pub struct CascadedShadowMap {
pub cascades: [ShadowMap; 4],
pub cascade_count: u32,
pub cascade_vp: [Mat4; 4],
pub split_distances: [f32; 5],
pub resolution: u32,
pub blend_cascades: bool,
pub blend_band: f32,
}Expand description
Shadow mapping for directional lights using cascaded shadow maps. Splits the view frustum into 4 cascades for better shadow resolution distribution.
Fields§
§cascades: [ShadowMap; 4]One shadow map per cascade (up to 4).
cascade_count: u32Number of active cascades (1..=4).
cascade_vp: [Mat4; 4]The view-projection matrix for each cascade.
split_distances: [f32; 5]Split distances in view space.
resolution: u32Resolution per cascade.
blend_cascades: boolWhether to blend between cascades.
blend_band: f32Blend band width in normalized split space.
Implementations§
Source§impl CascadedShadowMap
impl CascadedShadowMap
pub fn new(resolution: u32, cascade_count: u32) -> Self
Sourcepub fn update_splits(&mut self, params: &CascadeShadowParams)
pub fn update_splits(&mut self, params: &CascadeShadowParams)
Update cascade splits using the given parameters.
Sourcepub fn set_cascade_vp(&mut self, cascade: usize, vp: Mat4)
pub fn set_cascade_vp(&mut self, cascade: usize, vp: Mat4)
Set the view-projection matrix for a specific cascade.
Sourcepub fn compute_cascade_matrices(
&mut self,
light_dir: Vec3,
camera_frustum_slices: &[[Vec3; 8]; 4],
params: &CascadeShadowParams,
)
pub fn compute_cascade_matrices( &mut self, light_dir: Vec3, camera_frustum_slices: &[[Vec3; 8]; 4], params: &CascadeShadowParams, )
Compute cascade view-projection matrices from light direction and camera frustum.
Sourcepub fn select_cascade(&self, view_depth: f32) -> usize
pub fn select_cascade(&self, view_depth: f32) -> usize
Determine which cascade a view-space depth falls into.
Sourcepub fn is_in_shadow(
&self,
world_pos: Vec3,
view_depth: f32,
bias: &ShadowBias,
) -> bool
pub fn is_in_shadow( &self, world_pos: Vec3, view_depth: f32, bias: &ShadowBias, ) -> bool
Test if a point is in shadow, using the appropriate cascade.
Sourcepub fn shadow_factor(
&self,
world_pos: Vec3,
view_depth: f32,
bias: &ShadowBias,
) -> f32
pub fn shadow_factor( &self, world_pos: Vec3, view_depth: f32, bias: &ShadowBias, ) -> f32
Compute shadow factor with cascade blending (0.0 = fully shadowed, 1.0 = fully lit).
Sourcepub fn compute_frustum_slice(
near: f32,
far: f32,
fov_y: f32,
aspect: f32,
camera_pos: Vec3,
camera_forward: Vec3,
camera_up: Vec3,
) -> [Vec3; 8]
pub fn compute_frustum_slice( near: f32, far: f32, fov_y: f32, aspect: f32, camera_pos: Vec3, camera_forward: Vec3, camera_up: Vec3, ) -> [Vec3; 8]
Compute frustum slice corners for a cascade given camera near/far/projection.
Sourcepub fn memory_bytes(&self) -> usize
pub fn memory_bytes(&self) -> usize
Get total memory usage in bytes.
Trait Implementations§
Source§impl Clone for CascadedShadowMap
impl Clone for CascadedShadowMap
Source§fn clone(&self) -> CascadedShadowMap
fn clone(&self) -> CascadedShadowMap
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CascadedShadowMap
impl RefUnwindSafe for CascadedShadowMap
impl Send for CascadedShadowMap
impl Sync for CascadedShadowMap
impl Unpin for CascadedShadowMap
impl UnsafeUnpin for CascadedShadowMap
impl UnwindSafe for CascadedShadowMap
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.