[목차]
- 포스팅에 앞서
- 디퍼드 렌더링에서 반투명 물체 그리기
- 테스트 결과
[포스팅에 앞서]
해당 포스팅은 디퍼드 렌더링에서의 반투명 물체를 그릴 때 어떤 문제가 있는지 정도만 테스트했습니다.
[디퍼드 렌더링에서 반투명 물체 그리기]
디퍼드 렌더링에서 가장 큰 문제는 바로 반투명 물체를 그리는 것입니다. 디퍼드 렌더링은 다음의 과정을 거칩니다.
1. G-Buffer Pass
: Geometry 정보를 여러 RenderTarget에 기록(Albedo, Normal, WorldPosition 등)
2. Lighting Pass
: 모든 조명을 G-Buffer 기반으로 계산
3. Final Composition
: 결과 조명값을 픽셀에 적용
디퍼드 렌더링은 한 픽셀 당 오직 하나의 Geometry 정보만 기록하기 때문에, 다수의 반투명 물체를 표현할 수 없습니다.
- 반투명 물체는 여러 픽셀이 겹쳐서 알파 블렌딩이 이뤄져야 하는데, G-Buffer는 마지막에 그려진 1개의 픽셀 정보만 기록함
- Lighting Pass는 G-Buffer를 기준으로 조명을 계산하기 때문에, 반투명 물체가 G-Buffer에 들어가지 않으면 조명 적용 자체가 불가능함
해당 문제는 이런 저런 방법이 있는데, 가장 쉽게 구현할 수 있는 방식이 바로 Alpha의 경우 Forward 렌더링을 따로 진행한 뒤, Depth Test 기반으로 서로 블렌딩 해주는 것입니다.
[테스트 결과]
디퍼드 렌더링 내에서 반투명 처리를 할 경우, 투과되어 모이는 물체에 빛이 적용되지 않는 현상이 발생합니다.
반투명을 Forward와 같이 따로 그리고, 그걸 나중에 RenderTarget에 Merge(Blending)하는 방식입니다(정확하게 수행한 것은 아님). 그러면 의도대로 반투명 처리가 되는 것을 확인할 수 있습니다.
'DirectX11 > 프레임워크 제작' 카테고리의 다른 글
| [DirectX11] 리플렉션 프로브 해보기 (0) | 2025.06.21 |
|---|---|
| [DirectX11] 스카이박스 만들어보기 (0) | 2025.06.21 |
| [DirectX11] 포스트 프로세싱 적용해보기 (0) | 2025.06.21 |
| [DirectX11] 그림자 매핑 해보기 (0) | 2025.06.12 |
| [DirectX11] 디퍼드 렌더링으로 변경하기 (0) | 2025.06.11 |