pub struct LightRig<'a> {
pub sun: Option<DirectionalLight>,
pub points: &'a [PointLight],
pub ambient: [f32; 3],
pub shadow_strength: f32,
pub shadow_bias_voxels: f32,
pub shadow_max_dist: f32,
pub bands: u32,
pub shadow_tint: [f32; 3],
}Expand description
The whole per-frame light environment, borrowed into
crate::FrameParams. GPU-only.
Fields§
§sun: Option<DirectionalLight>The sun. None ⇒ no directional light this frame.
points: &'a [PointLight]Point lights. The backend caps the count (excess dropped with a log warning), so this slice may be longer than the GPU honours.
ambient: [f32; 3]Multiplier applied to the baked ambient byte — the global ambient
level / tint. [1.0; 3] uses the baked byte as-is.
shadow_strength: f32Stylized-shadow strength 0..1: the fraction of a caster’s light
removed in shadow (1.0 = full black, 0.0 = no visible shadow).
shadow_bias_voxels: f32Shadow-ray origin bias along the surface normal, in voxel units — kills self-shadow acne. ~1.5 is a good default.
shadow_max_dist: f32Sun shadow-ray length cap, world units (point-light shadow rays stop at the light instead).
bands: u32DL.6 — stylized lighting. 0 ⇒ smooth (physically-ish) diffuse
(the default). ≥1 ⇒ retro cel look: the sun’s key term and each
point light’s diffuse factor quantize to bands + 1 discrete levels
(terraced light instead of a smooth gradient), and the banded sun key
drives a gradient map from shadow_tint
(cool, unlit) to the sun’s colour (warm, lit) — hue-shifted shadows
rather than plain darkening. Avoids the “generic Phong” read that
flattens the voxel/retro identity.
shadow_tint: [f32; 3]DL.6 — the cool shadow/ambient tint the stylized ramp starts from
(the unlit end). Multiplied by the baked ambient/AO byte. Ignored
when bands == 0 (then ambient is used instead).
Trait Implementations§
impl<'a> Copy for LightRig<'a>
Auto Trait Implementations§
impl<'a> Freeze for LightRig<'a>
impl<'a> RefUnwindSafe for LightRig<'a>
impl<'a> Send for LightRig<'a>
impl<'a> Sync for LightRig<'a>
impl<'a> Unpin for LightRig<'a>
impl<'a> UnsafeUnpin for LightRig<'a>
impl<'a> UnwindSafe for LightRig<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more