[ Dx11 ] (solution) Stencil Rendering 문제
문제
Stencil Routed Rendering을 통한 Depth Peeling을 진행 시, 아래와 같이 일부 폴리곤이 렌더링되지 않는 현상이 발생한다.
해결
이는 색상 샘플 방식 차이로 발생하는 것으로,
DirectX3D의 버전에 따라 샘플 방식이 달라, 발생한다.
Polygon이 픽셀의 중앙을 cover하는 것으로만 판단하던 이전 버전의 GPU와는 달리 현재의 GPU는 renderTarget마다 각각의 Sample position을 가짐, 따라서 renderTarget마다 Sample position이 다르면 Polygon이 픽셀의 일부 renderTarget만 Cover하는 경우가 발생
이로 인해, Polygon이 Cover하는 renderTarget과 연결된 Stencil buffer의 Stencil 값만 1씩 감소하게 되어 Stencil 값이 감소하지 않은 renderTarget의 Stencil값 과 동일해지고 같은 Stencil값을 가진 renderTarget들은 같은 Polygon의 색상을 저장하여 layer가 감소한다.
이를 해결하기 위해 기존 렌더링으로 출력한 이미지를 stencil 레이어의 첫 번째 이미지를 대체하여 방지하고, 샘플 픽셀의 depth를 주변 픽셀과 비교한다.
손실된 픽셀의 depth는 주변 픽셀에 비해 큰 값을 가지며, 이를 많이 샘플링 할수록 픽셀의 depth 평균이 주변 픽셀보다 커진다.
따라서 이를 비교하여 손실된 픽셀 렌더링을 방지한다.
이러한 과정을 통해 기존보다 향상된 결과를 얻을 수 있었다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.