[목차]

 

- 포스팅에 앞서

- 디퍼드 렌더링에서 반투명 물체 그리기

- 테스트 결과

 

 

[포스팅에 앞서]

 

해당 포스팅은 디퍼드 렌더링에서의 반투명 물체를 그릴 때 어떤 문제가 있는지 정도만 테스트했습니다. 

 

 

[디퍼드 렌더링에서 반투명 물체 그리기]

 

디퍼드 렌더링에서 가장 큰 문제는 바로 반투명 물체를 그리는 것입니다. 디퍼드 렌더링은 다음의 과정을 거칩니다.

 

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)하는 방식입니다(정확하게 수행한 것은 아님). 그러면 의도대로 반투명 처리가 되는 것을 확인할 수 있습니다.

 

 

+ Recent posts