핵심 정리
1. 빛의 시점에서 scene depth를 shadow map에 렌더링
2. 카메라 렌더링 중 표면 위치를 light space로 변환
3. shadow map depth와 현재 depth를 비교
4. 더 뒤에 있으면 그림자| 개념 | 의미 |
|---|---|
| Shadow map | 빛에서 본 depth texture |
| Light space | 빛의 view-projection 기준 공간 |
| Bias | self-shadowing을 줄이는 depth 보정 |
| PCF | 여러 샘플을 평균해 경계를 부드럽게 함 |
| Cascade | 넓은 범위를 여러 shadow map으로 나눔 |
구조
그림자 매핑은 “빛이 볼 수 있는 표면만 밝다”는 관점으로 동작합니다. 먼저 빛의 시점에서 장면을 렌더링해 각 위치에서 가장 가까운 깊이를 저장합니다. 이후 카메라 렌더링에서 현재 fragment를 빛의 좌표로 변환하고, shadow map의 깊이보다 뒤에 있으면 빛을 받지 못한다고 판단합니다.
currentLightDepth > shadowMapDepth + bias
-> in shadowBias
shadow acne은 표면 자신이 자기 그림자를 만드는 현상입니다. depth precision과 rasterization 차이 때문에 현재 깊이가 shadow map 깊이보다 조금 뒤로 계산될 수 있습니다. bias는 이 차이를 보정하지만, 너무 크면 그림자가 물체에서 떨어져 보이는 peter panning이 생깁니다.
품질 기준
| 증상 | 의심할 원인 |
|---|---|
| 그림자 표면에 줄무늬 | bias 부족, depth precision |
| 그림자가 떠 보임 | bias 과도 |
| 그림자가 계단짐 | shadow map 해상도 부족 |
| 멀리서 품질 저하 | cascade 필요 |
| 가장자리가 딱딱함 | PCF, filtering |
| 움직일 때 떨림 | texel snapping, 안정화 필요 |
shadow map은 결국 texture입니다. 해상도, projection 범위, filtering, depth precision이 품질을 결정합니다.
주의할 점
shadow map 해상도를 무작정 올리면 메모리와 렌더링 비용이 커집니다. 품질은 해상도뿐 아니라 빛의 projection 범위를 얼마나 타이트하게 잡는지에 크게 좌우됩니다.
또 투명 물체, alpha cutout, normal bias, contact shadow는 기본 shadow mapping만으로 깔끔하게 처리되지 않을 수 있습니다.
참고 링크
1 sources