#[derive(Clone, Debug, PartialEq)]
pub struct LightShadowParams {
pub cast: bool,
pub depth_bias: f32,
pub normal_bias: f32,
pub resolution: u32,
pub hardness: LightShadowHardness,
pub pcss_penumbra_scale: f32,
pub max_distance: f32,
pub cascade_count: u8,
pub cascade_split_lambda: f32,
pub evsm_cutoff: EvsmCutoff,
pub far_cascade_update_rate: FarCascadeUpdateRate,
pub cube_face_update_rate: CubeFaceUpdateRate,
}
impl Default for LightShadowParams {
fn default() -> Self {
Self {
cast: false,
depth_bias: 0.0005,
normal_bias: 0.05,
resolution: 1024,
hardness: LightShadowHardness::Soft,
pcss_penumbra_scale: 1.0,
max_distance: 0.0,
cascade_count: 4,
cascade_split_lambda: 0.5,
evsm_cutoff: EvsmCutoff::LastCascade,
far_cascade_update_rate: FarCascadeUpdateRate::Every4Frames,
cube_face_update_rate: CubeFaceUpdateRate::EveryFrame,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum LightShadowHardness {
Hard,
#[default]
Soft,
Pcss,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum EvsmCutoff {
Off,
#[default]
LastCascade,
LastTwoCascades,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum FarCascadeUpdateRate {
EveryFrame,
Every2Frames,
#[default]
Every4Frames,
Every8Frames,
}
impl FarCascadeUpdateRate {
pub fn period(self) -> u64 {
match self {
Self::EveryFrame => 1,
Self::Every2Frames => 2,
Self::Every4Frames => 4,
Self::Every8Frames => 8,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum CubeFaceUpdateRate {
#[default]
EveryFrame,
Every2Frames,
Every4Frames,
Every8Frames,
}
impl CubeFaceUpdateRate {
pub fn period(self) -> u64 {
match self {
Self::EveryFrame => 1,
Self::Every2Frames => 2,
Self::Every4Frames => 4,
Self::Every8Frames => 8,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct MeshShadowFlags {
pub cast: bool,
pub receive: bool,
}
impl Default for MeshShadowFlags {
fn default() -> Self {
Self {
cast: true,
receive: true,
}
}
}
impl MeshShadowFlags {
pub const TRANSPARENT_DEFAULT: Self = Self {
cast: false,
receive: false,
};
}