Volumetric Cloudscapes로 하늘을 처리하게 되면서 반사 처리할때는 하늘의 반사가 제외됐다.
정확히는
1) D3D11/D3D12렌더러에서는 반사 처리할때만 스카이박스로 배경을 먼저 렌더링해주고 있었고
2) DXR에선 하늘 반사는 아예 빠져버렸다.
D3D11/12렌더러에선 스카이박스로나마 반사처리를 해주기도 하고 어차피 물 표면에서만 반사가 일어나니 크게 눈에 띄진 않는다. 하지만 DXR에선 온 맵이 빤딱거리니 하늘 반사가 빠진게 너무 티가 많이 난다.
raytracing에서 ray가 아무 지형지물에도 충돌하지 않은 경우 miss shader가 호출되는데 일반적으로 여기서 월드의 환경맵으로부터 텍셀을 가져온다. 이 상황이 하늘을 그리게 되는 상황이다. 그럼 miss shader에서 현재의 ray가지고 Volumetric Cloudscapes를 처리하면 되겠네? 하면 미친 소리다. 돌아가는 코드를 짠다고 해도 엄청나게 느리다.
그보다 Volumetric Cloudscapes로 하늘을 렌더링할때 환경맵을 만들어두면 ray tracing할때 miss shader에서 간단히 하늘을 처리할 수 있다.
DXR에서 쓰기 위한 목적이지만 일단 기술검증을 먼저 해야한다. 어차피 D3D11렌더러에도 제대로된 하늘 반사는 필요하니까 D3D11렌더러부터 작업했다.
- 렌더링 품질을 위해서 카메라가 바라보고 있는 방향으로는 가장 높은 정밀도로 Volumetric Cloudscapes를 이용해서 하늘 렌더링
- 이때 +X,-X,+Y,+Z,-Z의 5면에 대해서 Volumetric Cloudscapes를 이용해서 360도 렌더링-> 큐브맵으로 저장. 성능을 위해서 면당 128×128정도의 저해상도를 사용한다. 어차피 반사에만 필요하니까.
- 물반사등 반사가 필요할때 렌더타켓을 지우는 대신 반사벡터 방향으로 큐브맵을 렌더링.
- DXR의 경우 miss shader에서 큐브맵으로부 텍셀을 가져온다.
일단 D3D11쪽 구현은 완료. 생각만큼 느린것 같지는 않다.

“Volumetric Cloudscapes + Environment mapping”에 대한 답글 1개