ReadonlynameHuman-readable identifier used in graph node labels and error messages.
EVSM warp exponent chosen for the active moment-texture format.
Active moment-texture format (rg32float when filterable, else rgba16float).
StaticcreateOptionalmomentPrecision?: "auto" | "fp32" | "fp16"moment-texture precision / memory trade-off:
'fp32' (rg32float, 8 B/texel): strong warp (exponent 40), little
light bleeding. Requires the float32-filterable feature; falls back to
'fp16' when it's absent (fp32 textures can't be linearly sampled then).'fp16' (rg16float, 4 B/texel): half the memory, but a weak warp
(exponent 5.5) — effectively plain VSM. Always available.'auto' (default): 'fp32' when filterable, else 'fp16'.Insert the pass into graph for one frame. Implementations call
graph.addPass(name, type, b => { ... }) exactly once and use the
supplied PassBuilder to declare reads, writes, transient
resources, and the execute callback.
Graph being built this frame.
Pass-specific dependency record (handles, scene data, etc.).
Pass-specific output record (typically a set of handles downstream passes will consume).
Release every long-lived GPU resource owned by the pass (pipelines, persistent uniform buffers, samplers, BGLs). Called by the factory or application during teardown. Default implementation is a no-op.
Converts the directional cascaded depth shadow map into a pre-filtered EVSM2 moment map for variance-based shadow sampling.
For each cascade layer: a fullscreen pass warps the depth into moments (E[w], E[w²], w = exp(c·d)), then a separable Gaussian blur (H then V, sharing a single-layer scratch texture) pre-filters them. The lighting pass samples the result with a plain linear sampler and the Chebyshev bound — no comparison sampler, no PCF kernel, constant-cost soft edges.
Moment precision:
rg32floatwhen the device exposesfloat32-filterable(a strong warp exponent, little light bleeding); otherwisergba16float, which is always filterable but caps the exponent and is effectively plain VSM.