
# Objective add support for light textures (also known as light cookies, light functions, and light projectors)  ## Solution - add components: ```rs /// Add to a [`PointLight`] to add a light texture effect. /// A texture mask is applied to the light source to modulate its intensity, /// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs. pub struct PointLightTexture { /// The texture image. Only the R channel is read. pub image: Handle<Image>, /// The cubemap layout. The image should be a packed cubemap in one of the formats described by the [`CubemapLayout`] enum. pub cubemap_layout: CubemapLayout, } /// Add to a [`SpotLight`] to add a light texture effect. /// A texture mask is applied to the light source to modulate its intensity, /// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs. pub struct SpotLightTexture { /// The texture image. Only the R channel is read. /// Note the border of the image should be entirely black to avoid leaking light. pub image: Handle<Image>, } /// Add to a [`DirectionalLight`] to add a light texture effect. /// A texture mask is applied to the light source to modulate its intensity, /// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs. pub struct DirectionalLightTexture { /// The texture image. Only the R channel is read. pub image: Handle<Image>, /// Whether to tile the image infinitely, or use only a single tile centered at the light's translation pub tiled: bool, } ``` - store images to the `RenderClusteredDecals` buffer - read the image and modulate the lights - add `light_textures` example to showcase the new features ## Testing see light_textures example
85 lines
3.0 KiB
TOML
85 lines
3.0 KiB
TOML
[package]
|
|
name = "bevy_pbr"
|
|
version = "0.17.0-dev"
|
|
edition = "2024"
|
|
description = "Adds PBR rendering to Bevy Engine"
|
|
homepage = "https://bevy.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[features]
|
|
webgl = []
|
|
webgpu = []
|
|
pbr_transmission_textures = []
|
|
pbr_multi_layer_material_textures = []
|
|
pbr_anisotropy_texture = []
|
|
experimental_pbr_pcss = []
|
|
pbr_specular_textures = []
|
|
pbr_clustered_decals = []
|
|
pbr_light_textures = []
|
|
shader_format_glsl = ["bevy_render/shader_format_glsl"]
|
|
trace = ["bevy_render/trace"]
|
|
# Enables the meshlet renderer for dense high-poly scenes (experimental)
|
|
meshlet = ["dep:lz4_flex", "dep:range-alloc", "dep:half", "dep:bevy_tasks"]
|
|
# Enables processing meshes into meshlet meshes
|
|
meshlet_processor = [
|
|
"meshlet",
|
|
"dep:meshopt",
|
|
"dep:metis",
|
|
"dep:itertools",
|
|
"dep:bitvec",
|
|
]
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_app = { path = "../bevy_app", version = "0.17.0-dev" }
|
|
bevy_asset = { path = "../bevy_asset", version = "0.17.0-dev" }
|
|
bevy_color = { path = "../bevy_color", version = "0.17.0-dev" }
|
|
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.17.0-dev" }
|
|
bevy_derive = { path = "../bevy_derive", version = "0.17.0-dev" }
|
|
bevy_diagnostic = { path = "../bevy_diagnostic", version = "0.17.0-dev" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.17.0-dev" }
|
|
bevy_image = { path = "../bevy_image", version = "0.17.0-dev" }
|
|
bevy_math = { path = "../bevy_math", version = "0.17.0-dev" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.17.0-dev" }
|
|
bevy_render = { path = "../bevy_render", version = "0.17.0-dev" }
|
|
bevy_tasks = { path = "../bevy_tasks", version = "0.17.0-dev", optional = true }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.17.0-dev" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.17.0-dev" }
|
|
bevy_window = { path = "../bevy_window", version = "0.17.0-dev" }
|
|
bevy_platform = { path = "../bevy_platform", version = "0.17.0-dev", default-features = false, features = [
|
|
"std",
|
|
] }
|
|
|
|
# other
|
|
bitflags = { version = "2.3", features = ["bytemuck"] }
|
|
fixedbitset = "0.5"
|
|
thiserror = { version = "2", default-features = false }
|
|
derive_more = { version = "2", default-features = false, features = ["from"] }
|
|
# meshlet
|
|
lz4_flex = { version = "0.11", default-features = false, features = [
|
|
"frame",
|
|
], optional = true }
|
|
range-alloc = { version = "0.1.3", optional = true }
|
|
half = { version = "2", features = ["bytemuck"], optional = true }
|
|
meshopt = { version = "0.4.1", optional = true }
|
|
metis = { version = "0.2", optional = true }
|
|
itertools = { version = "0.14", optional = true }
|
|
bitvec = { version = "1", optional = true }
|
|
# direct dependency required for derive macro
|
|
bytemuck = { version = "1", features = ["derive", "must_cast"] }
|
|
radsort = "0.1"
|
|
smallvec = "1.6"
|
|
nonmax = "0.5"
|
|
static_assertions = "1"
|
|
tracing = { version = "0.1", default-features = false, features = ["std"] }
|
|
offset-allocator = "0.2"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|