개발하는 리프터 꽃게맨입니다.
전방위 그림자 매핑 (Omni directional shadow mapping) 본문
참고자료
Chapter 12. Omnidirectional Shadow Mapping
Philipp S. Gerasimov iXBT.com One of the most difficult problems in real-time computer graphics is generating high-quality shadows. Yet, the appearance of such shadows is one of the most important factors in achieving graphic realism. In computer-generated
developer.nvidia.com
https://learnopengl.com/Advanced-Lighting/Shadows/Point-Shadows
LearnOpenGL - Point Shadows
Point Shadows Advanced-Lighting/Shadows/Point-Shadows In the last chapter we learned to create dynamic shadows with shadow mapping. It works great, but it's mostly suited for directional (or spot) lights as the shadows are generated only in the direction o
learnopengl.com
기본적인 쉐도우 매핑은 점 광원에서 사용하기 어렵습니다.
기존에 사용했던, 광원의 시점으로 뎁스 온리 버퍼를 생성하는 알고리즘은 단방향성의 쉐도우만 생성할 수 있습니다. 점 광원의 경우 360 도로 그림자가 생겨야 하는데 이는 어떻게 구현할 수 있을까요?
원리는 비슷합니다. 빛의 관점에서 깊이 맵을 생성하되 일반적인 2D 깊이 맵을 사용하는 것이 아니라 큐브맵을 사용하는 것이죠. 점 광원을 기준으로하여 6개의 면에 각각 깊이를 렌더링하고 그 값을 샘플링하여 구현할 수 있습니다.
이 개념을 소개하기전에
깊이 큐브맵을 만든다는 생각부터가 생소하고 어떻게 하는지 잘 몰랐기에 상당히 해맸습니다.
이런 방식으로 생성했습니다.
그렇다면 깊이 큐브맵을 생성하기 위해 6번의 렌더링을 해야한다는 뜻인데, 이는 상당히 큰 오버헤드고 작은 트릭을 사용하여 한 번의 드로우콜로 처리할 수 있습니다.
그 방법은 Geometry Shader를 이용하는 것이죠
DepthCube를 바인딩하면 SV_RenderTargetArrayIndex[0] ~ [5] 까지 순서대로 텍스처가 바인딩 됩니다.
그러므로 SV_RenderTargetArrayIndex 값을 바꿔가면서 픽셀 쉐이더로 출력하면 한 번에 6개의 프리미티브를 그릴 수 있습니다.
여기서 중요한 것은 렌더타겟이 바인딩 되어 있으면 오류가 발생할 수 있기 때문에 아예 nullptr 로 바인딩해야한다는 겁니다.
그 다음
굉장히 재미있는 부분인데,
기본적으로 깊이 값은 비선형값입니다. 그 이유는 원근 투영 때문이겠죠
그런데 기존에 자동으로 계산된 뎁스 값이 아닌, 임의의 뎁스 값을 출력할 수 있습니다.
바로 SV_DEPTH를 이용해서 말이죠.
그래서 이번 구현에서는 조명과 픽셀의 거리를 정규화한 값을 넘겨주었습니다.
이러한 방식의 장점은 픽셀을 투영하지 않고도 단순 falloffend 값만 곱해주면 되기에 계산량 + GPU 데이터 전송량을 획기적으로 줄인다는 것 입니다.
아니면 64바이트의 inv 투영행렬 6개를 넘겨줘야 했을 것인데, 부담이 어마무시하죠
마지막으로 그림자를 렌더링해보겠습니다.
이전 포스팅에서 빛의 투영공간으로 픽셀을 투영하여 깊이 값을 생성한 것과는 달리
단순하게 거리를 비교하여 처리하는 모습입니다.
다음 포스팅에서는
CSM, PCF, PCSS 를 차례로 소개하겠습니다.
'컴퓨터 그래픽스' 카테고리의 다른 글
Cascade Shadow Mapping 음..? 미완성! (0) | 2025.03.13 |
---|---|
PBR 물리 기반 렌더링 + 모델 로딩 + 반사 테스트 (0) | 2025.02.27 |
컴퓨트 쉐이더를 이용한 Smoothed Particle Hydrodynamics Fluid (0) | 2025.02.25 |
[Real-time Rendering] Chapter 2. The Graphics Rendering Pipeline (1) | 2025.01.24 |
[Real-time Rendering] Chapter 1. Introduction (1) | 2025.01.23 |