UE3는 하드웨어를 이기려 하지 않았다.
Hybrid는 당시의 타협이었고, Full Deferred는 결국 도착한 최적해였다.
GPU 친화적인 구조로 수렴할 수밖에 없었다.

앞선 글에서 GPU가 SIMD / SIMT 구조로 동작하며,
분기(Branch Divergence)에 매우 취약하다는 이야기를 했습니다.
이 특성은 단순히 셰이더 코드 작성에만 영향을 주는 것이 아니라,
엔진 전체의 렌더링 파이프라인 설계에도 직접적인 제약으로 작용합니다.

이러한 GPU 아키텍처의 제약이 실제 엔진 설계에
어떻게 반영되었는지 보여주는 대표적인 사례가
Unreal Engine 3입니다.
이번 글에서는 UE3의 렌더링 구조 변화를 살펴보겠습니다.

UE3 초기

Forward Rendering

2006년 처음 출시된 Unreal Engine 3는
완전한 Forward Rendering 기반의 엔진이었습니다.

Lightmap과 Static Lighting 중심의 구조였고,
다양한 Post Effect까지 폭넓게 지원했습니다.

다만 라이팅이 많아질수록
Pixel 수에 비례해 연산 비용이 증가하는
Forward Rendering 특유의 문제도 함께 가지고 있었죠.

그럼에도 불구하고,
당시의 낮은 해상도와
제한적인 메모리·대역폭 환경에서는
Forward Rendering이 현실적인 선택이었고,
실제로 많은 주목을 받게 됩니다.

 

하지만 해상도가 올라가고,
동적 라이팅에 대한 요구가 커지면서
Forward Rendering의 한계는 점점 더 뚜렷해지기 시작합니다.

UE3 중기

Deferred Rendering

이러한 한계 속에서 Unreal Engine 3는 중기에 접어들며
Multiple Render Targets(MRT)을 활용한
G-Buffer 기반의 Deferred Lighting을 도입하게 됩니다.

메시 위에 또 다른 텍스처를 덧씌워 표현하던 Decal 기능 역시
Deferred Decal이라는 형태로 진화하게 됩니다.


이를 Deferred Lighting과 결합함으로써
라이팅 연산 비용을 줄이는 동시에,
Z-Fighting 문제를 완화하는 성과를 거두게 됩니다.

다만 G-Buffer가 요구하는 메모리 비용이 상당했기 때문에,
UE3는 Full Deferred Rendering이 아닌
Hybrid Rendering 구조를 채택하는 선택을 하게 됩니다.

 

이 Hybrid Rendering 구조는
당시 하드웨어 환경에서는 합리적인 선택이었지만,
동적 라이팅의 규모가 더 커지면서
결국 또 다른 한계를 드러내게 됩니다.

UE3 후기

SSAO

그래픽카드의 메모리는 지속적으로 증가했습니다.
결국 Unreal Engine 3는 후기 단계에 들어서
Full Deferred Lighting 구조로 귀결합니다.

모든 Geometry Pass에서 동일한 G-Buffer를 생성하고,
Lighting Pass에서는 화면 공간 기준으로
동일한 라이트 연산을 수행하는 방식으로 전환됩니다.

이 과정에서 픽셀 간 분기 가능성이 크게 줄어들며,
Branch Divergence를 최소화한,
GPU 구조에 가장 잘 맞는 형태로 수렴하게 됩니다.

이러한 흐름 속에서 등장한 대표적인 기법이
Screen Space Ambient Occlusion(SSAO)입니다.
화면 공간 기준으로 빛의 차폐를 계산함으로써,
그림자 표현의 퀄리티는 한 단계 도약하게 됩니다.

맺는말

오늘은 Forward Rendering에서 Deferred Rendering으로 이어지는 흐름 속에서,
Unreal Engine 3의 렌더링 구조 변화를 살펴보았습니다.

메모리 사용량과 컴퓨팅 연산을 맞바꾸며
그래픽스 퀄리티를 끌어올린 과정은,
엔진 설계에서의 Optimizing이 무엇인지 보여주는
좋은 사례라고 생각합니다.

다음 글에서는 SIMT 구조를 전제로,
본격적으로 문제를 해결하기 시작한
Unreal Engine 4의 렌더링 구조에 대해 다뤄보겠습니다.

다음글

 

UE4 전기: Unified Shader 이후

UE3 - Forward Rendering을 넘어 Deferred Rendering으로UE2의 Overlay Shader와 초기 Post Process EffectGPU의 역사 - 1 : FFP에서 SIMD까지그래픽카드의 한계 2000년대 초반의 GPU는 FFP(Fixed Function Pipeline)중심이었고, 지금

chessire.tistory.com

이전글

 

 

UE2의 Overlay Shader와 초기 Post Process Effect

GPU의 역사 - 1 : FFP에서 SIMD까지그래픽카드의 한계 2000년대 초반의 GPU는 FFP(Fixed Function Pipeline)중심이었고, 지금처럼 복잡한 셰이더 기반 렌더링이 불가능했습니다. VRAM 용량도 32~64MB 수준이라 SSAA

chessire.tistory.com

 

GPU의 역사 - 2 : SIMD에서 SIMT로, Branch Divergence

GPU의 역사 - 1 : FFP에서 SIMD까지그래픽카드의 한계 2000년대 초반의 GPU는 FFP(Fixed Function Pipeline)중심이었고, 지금처럼 복잡한 셰이더 기반 렌더링이 불가능했습니다. VRAM 용량도 32~64MB 수준이라 SSAA

chessire.tistory.com