# Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs — Zhang, Sun, Nyman

- Source: https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-10-parallel-split-shadow-maps-programmable-gpus
- Volume: GPU Gems 3
- Note: add-only excerpt for wiki ingest; images omitted; prose and key listings kept.

## Summary of full chapter read

PSSM splits the view frustum with planes parallel to the view plane; each split gets an independent shadow map. Same idea as Engel's CSM / 3DMark cascaded shadows (Lloyd, Zhang, Tadamura lineage).

### Aliasing decomposition
dp/ds ≈ perspective aliasing (dz/(z ds)) × projection aliasing (cos φ / cos θ). Perspective aliasing is scene-independent and addressable by warping/splitting; projection aliasing needs scene analysis.

### Practical split scheme
Blend logarithmic (theoretically even perspective aliasing) and uniform splits:
C_i = λ C_log_i + (1−λ) C_uni_i, default λ=0.5.
Pure log oversamples near (tiny first splits); pure uniform undersamples near. Preprocess: tighten camera near/far to visible objects.

### Light matrices
Scene-independent: AABB of split in light clip space, near z left at 0 so casters between light near and split still cast; crop matrix zooms light frustum.
Scene-dependent: bound casters for near/xy and receivers for far; only receivers need depth compare at synthesize time.

### Implementations
1. Multipass: reuse one SM texture; render front-to-back with viewport depth range remapped so depth test stays valid.
2. DX9: multiple SM textures; VS passes all light texcoords; PS picks split by view-space z.
3. DX10: texture arrays + GS cloning or instancing to single-submit casters into all needed array slices; SampleCmpLevelZero with TextureCube for ≤6 splits PCF.

### Optimizations
PCF/VSM filtering; pack into atlas; warp within splits; vary resolution per split; linear depth for point lights.

