Constant CANOPY_LIGHT_HEAD
Source pub const CANOPY_LIGHT_HEAD: &str = r#"
struct CanopyParams {
center_extent: vec4f,
sun_receiver: vec4f,
wind: vec4f,
direction: vec4f,
projected_extent: vec4f,
mode_sharpness: vec4f,
}
@group(3) @binding(9) var canopy_cookie: texture_2d<f32>;
@group(3) @binding(10) var canopy_sampler: sampler;
@group(3) @binding(11) var<uniform> canopy_params: CanopyParams;
fn canopy_hash(p: vec2f) -> f32 {
let q = fract(p * vec2f(123.34, 456.21));
return fract((q.x + 45.32) * (q.y + 45.32) * 34.23 + q.x * 13.7);
}
fn canopy_noise(p: vec2f) -> f32 {
let i = floor(p);
let f = fract(p);
let u = f * f * (3.0 - 2.0 * f);
return mix(mix(canopy_hash(i), canopy_hash(i + vec2f(1.0, 0.0)), u.x), mix(canopy_hash(i + vec2f(0.0, 1.0)), canopy_hash(i + vec2f(1.0, 1.0)), u.x), u.y);
}
fn canopy_fbm(p: vec2f) -> f32 {
return canopy_noise(p) * 0.55 + canopy_noise(p * 2.13 + 3.1) * 0.28 + canopy_noise(p * 4.37 + 7.7) * 0.17;
}
"#;