뭐라도 쓰겠지
25.04.19 / 디퍼드 렌더링(Deferred Rendering) 본문
디퍼드 렌더링은 3D 게임 엔진에서 조명 계산을 효율적으로 처리하기 위해 고안된 렌더링 기법이다. 전통적인 포워드 렌더링(Forward Rendering)과 달리, 장면의 각 픽셀에 대해 조명을 바로 계산하지 않고, 먼저 지오메트리 정보를 별도의 버퍼(G-Buffer)에 모아 둔 뒤에 나중(Deferred) 단계에서 한꺼번에 조명 계산을 수행한다는 점이 특징이다. 주요 흐름은 다음과 같다.
1. 지오메트리 패스(Geometry Pass)
- 씬의 각 픽셀마다 필요한 정보를 'G-Buffer'라고 불리는 여러 텍스처나 버퍼에 저장한다.
- 예: 월드 스페이스 노멀, 기본 색상, 머터리얼(금속성/거칠기 등), 깊이(Depth), 스페큘러 반사 계수 등
- 이 단계에서는 실제 조명 계산을 수행하지 않으며, 오직 지오메트리 및 재질 관련 속성을 픽셀 단위로 축적한다.
2. 라이팅 패스(Lighting Pass)
- 이전 단계에서 모아 둔 G-Buffer의 정보를 활용하여, 각 픽셀에 조명을 한꺼번에 계산한다.
- 조명 계산 시 필요한 광원의 정보와 함께, G-Buffer에 저장된 노멀, 머터리얼 정보 등을 참조한다.
- 이 과정을 거쳐 최종 컬러를 계산한 뒤 프레임 버퍼에 출력한다.
3. 포스트 프로세싱(Pass)
- 블룸(Bloom), 화면 왜곡, 톤 매핑(Tone Mapping), 필름 그레인 등 후처리 효과를 적용한다.
디퍼드 렌더링의 장점
1. 다수의 광원 처리에 유리
- 한 번 지오메트리 패스에 정보를 모아두면, 라이팅 패스에서 여러 광원 정보를 효율적으로 적용할 수 있다. 포워드 렌더링처럼 매 드로우 콜마다 광원을 일일이 계산할 필요가 줄어든다.
2. 복잡한 지오메트리에도 일정한 성능
- 픽셀별로 노멀, 재질 정보를 이미 확보했으므로, 뒤이은 조명 계산은 픽셀 차원에서만 반복된다. 광원 수가 늘어나도 지오메트리에 대한 추가 드로우 콜이 크게 증가하지 않는다.
디퍼드 렌더링의 단점
1. 메모리 사용량 증가
- G-Buffer에 다수의 텍스처(노멀, 알베도, 깊이, 스페큘러 등)를 저장하므로 메모리를 많이 소모한다.
2. 투명(Transparent) 렌더링 처리 어려움
- G-Buffer에 깊이, 노멀 정보를 이미 저장한 상태에서 투명 오브젝트의 빛 투과나 반투명 효과들을 쉽게 합산하기 힘들다. 따라서 일반적으로 투명 개체는 별도의 포워드 렌더링 파이프라인으로 처리한다.
3. 멀티샘플 안티에일리어싱(MSAA) 처리 어려움
- G-Buffer를 활용하는 관계로 MSAA 적용 시 여러 버퍼를 모두 샘플링해야 하므로 구현 복잡도가 올라간다. 대신 디퍼드 방식에서는 포스트 프로세싱 기반 안티에일리어싱 기법(예: FXAA, SMAA, TAA 등)을 주로 사용한다.
정리하자면 디퍼드 렌더링은 지오메트리 정보와 머터리얼 속성을 먼저 '연기(Deferred)'시켜 모아 두고, 후반부에 조명 계산을 집약적으로 처리하는 방식이다. 이는 여러 개의 광원이 있는 복잡한 장면에서도 상대적으로 높은 효율을 보여주나, 추가 버퍼로 인한 메모리 부담과 투명/반투명 처리의 복잡성이 따르게 된다.
'프로그래밍 > 게임 개발' 카테고리의 다른 글
25.04.19 / UV 좌표계(UV Coordinate System), 텍스처 매핑(Texture Mapping) (0) | 2025.04.19 |
---|---|
25.04.19 / 코루틴(Coroutine) (0) | 2025.04.19 |
25.04.18 / Volumetric Light, Volumetric Shadow (0) | 2025.04.18 |
25.04.18 / 글로벌 일루미네이션(Global Illumination, GI) (0) | 2025.04.18 |
25.04.18 / Ray Tracing vs Radiosity (0) | 2025.04.18 |