Shadow Map (+ PCF)
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 Shadow Map
Rasterization을 이용한 렌더링 파이프라인에서 그림자를 그리는 방식은 다음과 같다.
- Light로부터의 depth map 구하기 (Shadow map)
- 특정 픽셀의 world position으로부터 light까지의 거리 구하기
- 두 거리를 비교하여 그림자 영역 판별
🐥 Percentage Closer Filtering (PCF)
Shadow Mapping을 이용한 그림자는 프레임 버퍼의 해상도가 높을 수록 품질이 떨어진다. 이런 경우 그림자의 경계 부분을 보정해주는 여러 방법이 존재하는데, 대표적으로 PCF 기법이 있다.
// sampler description in CPU
sampDesc.Filter = D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT;
samDesc.ComparionFunc = D3D11_COMPARISON_LESS_EQUAL;
// pixel shader in GPU
// ...
[unroll]
for (int i=0; i<9; i++)
percentLit += shadowmap.SampleCmpLevelZero(shadowCompareSampler, lightTexcoord.xy, lightScreen.z - 0.001).r;
shadowFactor = percentLit / 9.0;
- 픽셀 단위로 그림자 영역(0/1)을 판단하지 않음
- 주변 픽셀 값들을 참조하여 0~1범위의 부드러운 그림자 표현 가능
- SampleCmpLevelZero : MipMap-Level 0에서 Sampling
- 내부 변수들을 이용해 shadowMap 비교 알아서 해줌
Simple Shadow | PCF Shadow |
---|---|
댓글 남기기