Shadow Map (+ PCF)

Date:     Updated:

카테고리:

태그:

홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.


🐥 Shadow Map

Ect-68

Rasterization을 이용한 렌더링 파이프라인에서 그림자를 그리는 방식은 다음과 같다.

  • Light로부터의 depth map 구하기 (Shadow map)
  • 특정 픽셀의 world position으로부터 light까지의 거리 구하기
  • 두 거리를 비교하여 그림자 영역 판별


ezgif com-crop (2)


🐥 Percentage Closer Filtering (PCF)

3

Shadow Mapping을 이용한 그림자는 프레임 버퍼의 해상도가 높을 수록 품질이 떨어진다. 이런 경우 그림자의 경계 부분을 보정해주는 여러 방법이 존재하는데, 대표적으로 PCF 기법이 있다.


images

// 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
3 4



맨 위로 이동하기

Graphics 카테고리 내 다른 글 보러가기

댓글 남기기