핵심 정리
| 항목 | 의미 |
|---|---|
| Cascade | 카메라 거리 구간별 shadow map |
| Split | cascade를 나누는 거리 기준 |
| PCF | 여러 depth sample을 평균하는 filtering |
| Texel snapping | 카메라 이동 시 그림자 떨림 완화 |
| Bias | acne와 peter panning 사이의 절충 |
구조
directional light는 태양처럼 멀리 있는 빛을 표현할 때 많이 씁니다. 하지만 카메라 가까운 물체와 먼 물체를 한 장의 shadow map에 모두 담으면 가까운 그림자 해상도가 부족해집니다.
near cascade -> high detail shadows
middle cascade
far cascade -> wider, lower detail shadowscascaded shadow map은 카메라 frustum을 여러 거리 구간으로 나누고, 각 구간에 별도 light-space projection을 만듭니다. 가까운 cascade는 작은 영역을 높은 texel density로 담고, 먼 cascade는 넓은 영역을 낮은 밀도로 담습니다.
PCF는 hard shadow edge를 부드럽게 만들기 위한 대표적인 filtering입니다. shadow map 주변 여러 texel을 읽어 가려진 정도를 평균내지만, 샘플 수와 kernel 크기에 따라 비용이 증가합니다.
안정화
카메라가 조금 움직일 때 shadow projection이 texel 경계 사이를 계속 이동하면 그림자가 떨립니다. texel snapping은 light projection을 shadow map texel 단위에 맞춰 움직여 temporal shimmer를 줄입니다.
품질 기준
| 증상 | 먼저 볼 것 |
|---|---|
| 가까운 그림자가 뭉개짐 | near cascade 범위, 해상도 |
| cascade 경계가 보임 | split, blend between cascades |
| 그림자가 수영하듯 떨림 | texel snapping, stable projection |
| 표면에 점/줄무늬 | depth bias, normal bias |
| 가장자리가 너무 딱딱함 | PCF kernel, contact shadow |
좋은 cascade 설정은 해상도만의 문제가 아닙니다. frustum split, light projection fitting, filtering, bias, 안정화가 함께 맞아야 합니다.
주의할 점
cascade 수를 늘리면 품질은 좋아질 수 있지만 shadow pass 비용과 메모리 사용량도 증가합니다. 각 cascade마다 shadow caster를 다시 그릴 수 있기 때문입니다.
또 PCF로 가장자리를 부드럽게 만들어도 실제 penumbra 물리는 근사일 뿐입니다. 넓은 area light 그림자나 contact shadow는 별도 기법이 필요할 수 있습니다.