I. 서론
렌더링 파이프라인의 중요성 및 진화
렌더링 파이프라인은 3D 씬 데이터, 즉 모델, 텍스처, 광원, 카메라 파라미터 등을 2D 이미지로 변환하는 일련의 필수적인 절차를 의미한다.1 이는 컴퓨터 그래픽스에서 3D 씬을 화면에 효과적으로 표시하기 위한 핵심적인 프레임워크로 기능한다. 렌더링 파이프라인의 주된 목적은 기하학적 형태부터 조명까지 모든 씬 요소를 논리적인 순서로 체계적으로 처리하며, 각 단계에서 최적화를 가능하게 하는 데 있다.1 렌더링은 크게 오프라인 렌더링과 실시간 렌더링으로 구분된다. 오프라인 렌더링은 영화나 애니메이션과 같이 고품질을 최우선으로 하며, 속도에는 덜 구애받는다. 이 방식은 레이 트레이싱과 같은 고급 기술을 활용하여 사실적인 그림자 및 반사를 구현한다.1 반면, 실시간 렌더링은 시각적 품질과 성능 간의 균형을 추구하며, Z-버퍼링, 후면 제거(back-face culling), LOD(Level of Detail)와 같은 기술을 사용하여 계산 부하를 줄이고 높은 프레임 속도를 유지한다.1 그래픽스 파이프라인은 일반적으로 애플리케이션, 지오메트리, 래스터화의 세 가지 주요 단계로 나눌 수 있으며, 이 과정에서 중앙 처리 장치(CPU)와 그래픽 처리 장치(GPU)의 역할 분담이 핵심적으로 이루어진다.2 애플리케이션 단계는 주로 CPU에서 실행되며, 사용자 상호작용, 애니메이션, 충돌 감지, 공간 분할(Quadtrees, Octrees) 등을 처리한 후, 다음 단계에 기본 요소(삼각형, 선, 점)를 전달한다.2 지오메트리 단계는 폴리곤과 정점(vertices)에 대한 대부분의 작업을 담당하며, 3D 객체를 모델 공간에서 카메라 공간으로 변환한다.1 마지막으로 래스터화 단계는 3D 지오메트리를 2D 픽셀로 변환하고, 텍스처 적용 및 조명 계산을 통해 최종 색상과 깊이를 결정한다.1 전통적인 CPU 기반 렌더링 방식은 순차 처리 방식에 의존하여 복잡한 씬이나 고해상도 이미지를 처리할 때 상당한 한계와 긴 렌더링 시간을 야기했다.3 CPU는 범용 컴퓨팅에 최적화되어 있어 렌더링과 같은 고도로 병렬화된 작업에는 비효율적이었으며, 조명, 그림자, 반사 등 정교한 효과를 시뮬레이션하는 데 필요한 계산 능력은 CPU의 효율적인 처리 범위를 넘어섰다.3 이러한 한계는 업계가 GPU와 같은 대안적인 솔루션을 모색하도록 유도했다.3 GPU는 수많은 작고 효율적인 코어를 통해 대규모 데이터 블록에 대한 병렬 작업을 수행하도록 설계되어 있다.3 결과적으로, 렌더링 파이프라인에서 CPU의 역할은 점차 줄어들고, GPU가 셰이딩, 텍스처 매핑, 기하학적 변환 등 계산 집약적인 작업을 담당하게 되면서 렌더링 속도가 비약적으로 향상되고 CPU 자원이 확보되었다.3 이는 렌더링 기술의 발전이 단순히 새로운 알고리즘의 등장이 아니라, 하드웨어 아키텍처의 변화, 특히 CPU와 GPU 간의 역할 분담의 재정의에 기반하고 있음을 보여준다. 포워드 렌더링에서 디퍼드 렌더링으로, 그리고 최종적으로 GPU-Driven 렌더링으로의 전환은 이러한 CPU 병목 현상 해소 및 GPU 활용 극대화라는 일관된 목표를 가지고 진화해왔다.
보고서의 목적 및 개요
이 보고서는 실시간 렌더링의 핵심 기술인 포워드 렌더링, 디퍼드 렌더링, 그리고 최신 GPU-Driven 렌더링 방식에 대해 심층적으로 분석한다. 각 방식의 기본 원리, 장단점, 실제 적용 사례를 비교하여, 독자들이 렌더링 파이프라인의 복잡성을 이해하고 특정 프로젝트에 적합한 렌더링 방식을 선택하는 데 필요한 통찰력을 제공하는 것을 목표로 한다.
II. 전통적인 렌더링 방식: 포워드 렌더링
기본 원리 및 작동 방식
포워드 렌더링은 가장 직관적인 렌더링 방식으로, 각 객체를 하나씩 화면에 렌더링하며, 이때 필요한 모든 셰이더(조명, 재질 등) 계산을 즉시 수행한다.4 씬 내의 각 객체는 자신에게 영향을 미치는 모든 광원에 대해 조명 계산을 수행한다. 이는 객체 하나당 여러 번의 렌더링 패스가 발생할 수 있음을 의미한다.5 조명은 일반적으로 정점(vertex) 단위로 계산된 후 삼각형 면에 걸쳐 보간되거나, 픽셀 셰이더에서 픽셀 단위로 계산된다. 후자의 경우, 조명 계산에 사용되는 노멀(normal) 값은 삼각형 면에 걸쳐 보간된다.4 Unity의 HDRP(High Definition Render Pipeline)와 같은 일부 구현에서는 각 개별 GameObject를 렌더링할 때 조명을 단일 패스에서 계산한다고 설명하지만 5, 여러 광원이 영향을 미칠 경우, 해당 객체는 광원 수에 따라 여러 번 렌더링될 수 있다.7
렌더링 파이프라인 내에서의 위치
포워드 렌더링은 유니티(Unity)의 기본 렌더링 경로이며 7, 많은 게임 엔진에서 디폴트 방식으로 사용된다.4 전통적인 파이프라인에서 포워드 렌더링은 객체를 렌더링할 때 모든 셰이딩 단계를 한 번에 수행한다.9 즉, 지오메트리 처리와 조명 및 셰이딩 계산이 동시에 이루어진다. 효율성을 위해 깊이 버퍼를 미리 채우는 깊이 프리패스(depth pre-pass)를 수행하는 경우가 많으며, 이는 불필요한 픽셀 셰이더 실행(오버드로우)을 줄이는 데 도움이 된다.10
장점
포워드 렌더링은 구현이 비교적 간단하다는 장점을 가진다.4 특정 시나리오, 예를 들어 단일 방향성 광원 씬에서는 디퍼드 렌더링보다 빠를 수 있으며 5, VR 플랫폼에서 더 빠른 렌더링 패스와 성능을 제공할 수 있다.11 또한 광범위한 커스텀 셰이딩 모델을 지원하여 복잡한 재질 표현에 유연하며 7, 투명 객체를 빠르고 쉽게 처리할 수 있다.7 안티앨리어싱(AA) 측면에서는 MSAA(Multi-Sample Anti-Aliasing)와 TAA(Temporal Anti-Aliasing)를 모두 지원하며, 디퍼드 렌더러보다 더 나은 안티앨리어싱 옵션을 제공하여 더 나은 시각적 품질을 제공할 수 있다.7 특히 VR 환경에서는 TAA의 서브픽셀 움직임으로 인한 블러 현상 때문에 MSAA가 더 나은 선택일 수 있다.11
단점
포워드 렌더링의 가장 큰 단점은 오버드로우(Overdraw)이다. 여러 삼각형이 서로 겹쳐 렌더링될 때, 뒤에 있는 픽셀에 대한 조명 계산이 불필요하게 수행되고 나중에 앞의 픽셀에 의해 덮어씌워지면서 많은 연산 자원이 낭비된다.4 또한 씬 내 광원 수에 비례하여 렌더링 비용이 증가한다. 각 객체가 자신에게 영향을 미치는 모든 광원에 대해 여러 번 렌더링될 수 있기 때문에, 광원이 많아질수록 성능이 급격히 저하된다.6 이는 "per-light cost"라고 불리는 문제이다.7 깊이 복잡도가 높은 씬(동일한 화면 픽셀을 여러 객체가 덮는 경우)에서 프래그먼트 셰이더 실행이 많이 낭비되는 것도 비효율성을 초래하며 6, 이러한 단점으로 인해 실시간으로 수많은 동적 광원을 처리하기 어렵다.6
주요 적용 사례
포워드 렌더링은 하드웨어 요구 사항이 낮아 모바일 장치나 저사양 시스템에 적합하다.7 씬에 동적 광원이 많지 않은 경우에도 효율적이다. MSAA 지원 및 특정 성능 특성으로 인해 VR 애플리케이션에서 선호될 수 있으며 11, Unity 엔진의 기본 렌더링 경로로 널리 사용된다.7 또한, 디퍼드 렌더링에서 처리하기 어려운 투명 객체나 특정 특수 효과를 위해 하이브리드 렌더링 파이프라인의 포워드 패스로 함께 사용되는 경우가 많다.6 포워드 렌더링의 핵심적인 한계는 '오버드로우'와 '광원 수에 비례하는 성능 저하'에 있었다.4 여러 객체가 동일한 픽셀 공간을 덮을 때, 뒤에 있는 객체에 대해 불필요한 조명 계산이 수행되고 그 결과가 나중에 덮어씌워져 연산이 낭비되는 것이 오버드로우의 문제점이었다.4 또한, 각 객체가 모든 광원에 대해 조명 계산을 해야 하므로, 씬에 동적 광원이 많아질수록 기하급수적으로 연산량이 증가하는 광원 수의 제약이 발생했다.6 이러한 포워드 렌더링의 근본적인 한계가 디퍼드 렌더링이라는 새로운 패러다임을 탄생시킨 직접적인 원인이 된다. 디퍼드 렌더링은 조명 계산을 나중 단계로 미루고, 최종적으로 화면에 보이는 픽셀에 대해서만 조명 계산을 한 번씩 수행함으로써 이 문제를 해결하고자 했다.4 이는 렌더링 기술의 발전이 기존 방식의 한계를 극복하려는 시도에서 비롯된다는 것을 보여주는 명확한 인과 관계이다.
III. 디퍼드 렌더링
개념 및 등장 배경
디퍼드 셰이딩 또는 디퍼드 렌더링은 대부분의 무거운 렌더링 계산(예: 조명)을 나중 단계로 연기(defer)하거나 연기(postpone)하는 아이디어를 기반으로 한다.6 이 기술은 포워드 렌더링의 주요 문제점인 과도한 프래그먼트 셰이더 실행 낭비(오버드로우)와 많은 광원 처리의 비효율성을 극복하기 위해 고안되었다.6 특히, 수백 또는 수천 개의 광원을 허용 가능한 프레임 속도로 렌더링하는 것을 목표로 한다.6 디퍼드 렌더링의 핵심은 씬 지오메트리 렌더링과 조명 계산을 분리하는 데 있다.13
작동 방식: 지오메트리 패스 및 라이팅 패스
디퍼드 셰이딩은 크게 두 가지 패스로 구성된다. 첫 번째는 **지오메트리 패스(Geometry Pass)**이다. 이 패스에서는 씬을 한 번 렌더링한다.6 이때 최종 색상을 계산하는 대신, 조명 계산에 필요한 모든 기하학적 정보(위치, 노멀, 색상, 스페큘러 등)를 'G-버퍼(G-buffer)'라는 텍스처 컬렉션에 저장한다.6 G-버퍼 채우기는 객체 정보를 프레임버퍼에 직접 저장하는 것이므로 비용이 많이 들지 않는다. MRT(Multiple Render Targets)를 사용하여 이 모든 작업을 단일 렌더 패스에서 수행할 수 있다.6 두 번째는 **라이팅 패스(Lighting Pass)**이다. 이 패스에서는 화면을 채우는 쿼드(screen-filled quad)를 렌더링한다.6 이 쿼드의 각 프래그먼트(픽셀)에 대해 G-버퍼에 저장된 기하학적 정보를 사용하여 씬의 조명을 계산한다.6 깊이 테스트를 통과한 최상위 프래그먼트 정보만 G-버퍼에 저장되므로, 각 픽셀에 대해 조명 계산은 정확히 한 번만 수행된다.6
G-버퍼 구성 요소
G-버퍼는 최종 조명 패스에 필요한 모든 픽셀별 데이터를 저장하는 텍스처들의 집합이다. 블린-퐁(Blinn-Phong) 조명 계산을 위해 일반적으로 다음 정보가 저장된다 6:G-버퍼 구성 요소데이터 타입 (일반적)목적3D 월드 공간 위치 벡터RGBA16F 또는 RGBA32F광원 방향 및 시야 방향 계산을 위한 프래그먼트의 정확한 3D 위치 제공RGB 디퓨즈 색상 (Albedo)RGB8 또는 RGBA8 (알파에 스페큘러)표면의 기본 색상 정보 제공3D 노멀 벡터RGBA16F 또는 RGBA32F표면의 기울기 정보 제공 (조명 계산에 필수)스페큘러 강도단일 float (다른 채널에 포함)표면의 광택 정도 정보 제공 (스페큘러 하이라이트 계산) G-버퍼의 구성 요소를 명확하고 구조화된 형태로 제시함으로써, 복잡한 정보를 한눈에 이해하기 쉽게 만든다. 각 구성 요소가 어떤 데이터 타입으로 저장되고 어떤 목적으로 사용되는지 구체적으로 명시하여, 독자가 디퍼드 렌더링의 기술적 메커니즘을 깊이 있게 이해하는 데 도움을 준다. 이는 G-버퍼의 크기가 왜 큰 메모리 오버헤드를 유발하는지(특히 높은 정밀도가 요구되는 위치 및 노멀 벡터)에 대한 직관적인 이해를 돕는다.
장점
디퍼드 렌더링의 가장 큰 장점은 포워드 렌더링에 비해 훨씬 많은 광원(수백, 수천 개)을 효율적으로 렌더링할 수 있다는 것이다.6 조명 계산이 픽셀당 한 번만 이루어지기 때문에 가능한 이점이다.4 조명 계산 단계에서는 오버드로우가 발생하지 않으며, 지오메트리 패스에서는 셰이더가 저렴하므로 오버드로우가 있더라도 비용이 적게 든다.4 또한 복잡한 조명 및 셰이더 리소스 관리가 단순해지며 13, G-버퍼에 많은 씬 입력 데이터가 이미 저장되어 있어, 많은 후처리 효과(post-processing effects)를 더 저렴하게 적용할 수 있다.6
단점
디퍼드 렌더링은 G-버퍼가 상대적으로 많은 씬 데이터를 텍스처 버퍼에 저장해야 하므로 상당한 메모리(특히 고정밀 데이터의 경우)와 메모리 대역폭을 소비한다는 단점을 가진다.6 또한 알고리즘 내에서 투명도(블렌딩)를 직접 처리하기 어렵다. G-버퍼는 최상위 프래그먼트 정보만 저장하기 때문이며, 일반적으로 투명 객체는 별도의 포워드 패스에서 렌더링하여 처리한다.6 MSAA(Multi-Sample Anti-Aliasing)와 같은 하드웨어 안티앨리어싱이 직접적으로 올바른 결과를 생성하지 못하는 문제도 있다. 보간된 서브샘플이 무의미한 위치, 노멀, 탄젠트 속성을 초래하기 때문이며 6, 해결책으로 후처리 안티앨리어싱(FXAA, TAA 등)이 주로 사용된다.12 다양한 재질을 사용하는 것이 가능하지만, 이는 G-버퍼에 더 많은 데이터를 저장해야 하므로 G-버퍼 크기와 메모리 대역폭 요구 사항을 더욱 증가시킨다.13 일반적으로 씬의 대부분 조명에 동일한 조명 알고리즘을 사용하도록 강제하는 경향이 있으며 6, 광원이 적은 작은 씬에서는 디퍼드 렌더링의 오버헤드가 이점을 상회하여 포워드 렌더링보다 느릴 수 있다.6
디퍼드 라이팅 (Deferred Lighting)
디퍼드 라이팅은 디퍼드 셰이딩의 변형으로, 조명 계산만 연기하는 방식이다. 이 기술은 세 개의 패스를 사용한다.12 첫 번째 지오메트리 패스에서는 노멀과 스페큘러 확산 계수만 컬러 버퍼에 기록한다.13 두 번째 스크린 공간 패스에서는 디퓨즈 및 스페큘러 조명 데이터를 별도로 누적한다.13 마지막 세 번째 패스에서는 씬 지오메트리에 대한 최종 패스를 수행하여 픽셀별 셰이딩이 적용된 최종 이미지를 출력한다.13 디퍼드 라이팅의 장점은 G-버퍼 크기를 크게 줄일 수 있으며 12, 다중 재질 처리 및 MSAA 지원 문제를 부분적으로 해결할 수 있다는 것이다.13 그러나 씬 지오메트리를 두 번 렌더링해야 하며 13, 디퍼드 패스에서 디퓨즈와 스페큘러 조명 데이터를 별도로 출력해야 한다는 단점이 있다.13 또한 디퍼드 셰이딩보다 메모리 사용량은 적지만, 일부 구형 시스템에서는 더 부담이 될 수 있다.12
주요 적용 사례 및 게임 엔진
디퍼드 렌더링은 현대 비디오 게임에서 동적 광원의 양을 늘리고 셰이더 명령어의 복잡성을 줄이는 데 유용하여 사용이 증가했다.13 Alan Wake, Assassin's Creed III, BioShock Infinite, Black Mesa, Blur, Brink 등이 디퍼드 라이팅을 사용한 대표적인 게임이다.13 AnvilNext, Chrome Engine, CryEngine 3, Fox Engine, Frostbite 2, Leadwerks, MT Framework, Rockstar Advanced Game Engine, Torque 3D, Unity, Unreal Engine 4, Vision, Creation Engine (Fallout 4 및 Skyrim SE) 등이 디퍼드 셰이딩 또는 렌더링 기술을 특징으로 하는 주요 게임 엔진이다.13 S.T.A.L.K.E.R.의 경우, 고품질, 고폴리곤 콘텐츠를 완전히 동적인 조명 및 그림자와 함께 렌더링하기 위해 디퍼드 셰이딩을 선택했다.14 포워드 렌더링은 '오버드로우'와 '광원 수 확장성'이라는 명확한 한계를 가지고 있었다.4 디퍼드 렌더링은 조명 계산을 픽셀당 한 번으로 제한함으로써 이 두 가지 문제를 효과적으로 해결했다.4 그러나 이러한 해결책은 'G-버퍼의 큰 메모리 사용량', '투명도 처리의 어려움', 'MSAA 비호환성', '다중 재질 처리의 복잡성'이라는 새로운 문제들을 야기했다.6 이러한 새로운 문제들을 해결하기 위해 '디퍼드 라이팅'과 같은 변형 기술이 등장했고 13, 투명도 처리 등을 위해 포워드 렌더링과 디퍼드 렌더링을 혼합하는 하이브리드 접근 방식이 일반화되었다.6 이는 렌더링 기술의 발전이 선형적인 개선이 아니라, 특정 문제를 해결하면 그로 인해 파생되는 새로운 문제에 직면하고, 다시 그 문제를 해결하기 위한 다음 단계의 기술이 등장하는 순환적인 특성을 가지고 있음을 보여준다. 각 기술은 이전 기술의 한계를 극복하지만, 동시에 그 자체의 새로운 한계를 내포하며, 이는 끊임없이 더 나은 솔루션을 모색하게 만든다.
IV. GPU-Driven 렌더링
개념 및 필요성
GPU-Driven 렌더링은 렌더링 워크로드의 상당 부분을 CPU에서 GPU로 오프로드하는 현대적인 접근 방식이다.3 핵심 아이디어는 씬의 모든 데이터를 GPU에 상주시키고 GPU가 자체적으로 작업을 결정하도록 하는 것이다.15 이러한 패러다임의 필요성은 CPU의 제한된 컴퓨팅 자원과 드로우 콜(draw call) 오버헤드가 복잡한 씬 렌더링의 병목 현상으로 작용했기 때문에 대두되었다.3 GPU-Driven 방식은 CPU를 드로우 콜 관리에서 해방시켜 다른 작업에 활용할 수 있게 한다.15 GPU는 데이터 병렬 알고리즘(렌더링의 대부분)에서 CPU보다 훨씬 높은 성능을 가지고 있으며 3, GPU가 자체 작업을 결정함으로써 CPU-GPU 간의 왕복(roundtrip) 지연 시간이 최소화된다.15 특히 PS4 및 Xbox One 세대 콘솔에서 삼각형 처리량(triangle throughput) 병목 현상에 쉽게 걸리므로, 정확한 컬링을 통한 성능 향상이 매우 중요해졌고, GPU-Driven 렌더링이 이러한 문제에 대한 효과적인 해결책으로 부상했다.15
작동 방식: Draw Indirect 및 컴퓨트 셰이더
GPU-Driven 렌더링의 핵심은 그래픽스 API(Vulkan, DX12 등)의 Draw Indirect
지원에 있다.15 CPU가 개별 드로우 콜의 모든 파라미터를 직접 발행하는 대신, GPU가 자체적으로 쓰기 가능한 버퍼에서 이러한 파라미터를 읽어온다.15 컴퓨트 셰이더는 이 버퍼에 쓰기 작업을 수행하여 드로우 커맨드를 생성하고 수정할 수 있다. 이를 통해 컬링이나 LOD(Level of Detail) 선택과 같은 작업을 GPU에서 직접 수행할 수 있다.15
GPU-Driven 파이프라인은 BindVertexBuffer
, BindIndexBuffer
, BindPipeline
, BindDescriptorSet
과 같은 바인드 호출을 최소화할 때 가장 잘 작동하는 "바인드리스(Bindless) 디자인"을 지향한다.15 이를 위해 모든 정점(vertex) 및 인덱스(index) 데이터를 하나의 큰 버퍼에 통합하고, 드로우 콜에서 오프셋을 사용하여 특정 메시 데이터를 참조한다.15 일부 엔진은 정점 셰이더에서 직접 버퍼에서 정점 데이터를 가져와 다양한 정점 속성 형식에도 하나의 큰 정점 버퍼를 유지한다.15 텍스처는 텍스처 배열(texture arrays)로 관리되며, 셰이더에서 인덱스를 통해 접근한다.15 또한, 재질 파라미터를 SSBO(Shader Storage Buffer Objects)로 이동시키고, 유버셰이더(Ubershader) 접근 방식을 사용하여 고유한 파이프라인 수를 대폭 줄여 효율성을 높인다.15
주요 특징: 컬링 및 LOD
GPU-Driven 렌더링은 컬링 및 LOD 선택에서 혁신적인 성능을 제공한다. 컬링(Culling) 측면에서, 시야 절두체(frustum culling) 및 오클루전 컬링(occlusion culling)을 컴퓨트 셰이더를 통해 GPU에서 직접 수행한다.15 이는 백만 개 이상의 객체를 0.5밀리초 이내에 컬링할 수 있을 정도로 매우 효율적이다.15 Dragon Age나 Rainbow Six와 같은 고급 파이프라인에서는 메시 내 개별 삼각형까지 컬링하여 불필요한 렌더링을 최소화한다.15 Ubisoft의 SIGGRAPH 2015 발표에서 영감을 받은 Hi-Z 오클루전 컬링과 같은 기술도 구현된다.16 LOD(Level of Detail) 선택 또한 GPU 기반으로 이루어진다. 컴퓨트 셰이더가 객체의 거리 등 요인에 따라 적절한 LOD를 결정하고, 해당 드로우 커맨드를 간접 버퍼에 작성한다.15 메시 LOD는 정점 셰이더 비용을 줄이고 삼각형-픽셀 비율을 개선하여 원거리 메시의 셰이딩을 최적화하며, 그림자 패스 및 Hi-Z 생성 속도도 향상시킨다.17
장점
GPU-Driven 렌더링은 GPU의 병렬 처리 능력을 최대한 활용하여 렌더링 시간을 획기적으로 단축하고 실시간 렌더링을 가능하게 한다.3 CPU가 드로우 콜 발행과 같은 저수준 렌더링 작업에서 해방되어, 다른 게임 로직이나 시뮬레이션에 더 많은 자원을 할당할 수 있도록 CPU 부하를 경감시킨다.3 이러한 이점은 수십만 개 이상의 객체와 높은 기하학적 복잡도를 가진 씬을 효율적으로 렌더링할 수 있게 하여 씬 복잡도를 크게 증가시킨다.15 예를 들어, 특정 엔진은 닌텐도 스위치에서 25만 개의 "드로우 콜"을 60 FPS 이상으로, PC에서는 500 FPS로 실행할 수 있어 사실상 무제한의 객체 수를 달성한다.15 바인드리스 디자인과 대규모 드로우 콜을 통해 GPU의 유휴 시간을 줄이고 활용도를 극대화하여 GPU 활용도를 향상시킨다.15 CPU가 주로 스트리밍 로딩/언로딩만 처리하면 되므로 오픈 월드 게임 씬에 특히 적합하다.16
단점 및 한계
GPU-Driven 렌더러는 구현이 매우 복잡하며, 낮은 수준의 그래픽스 API에 대한 깊은 이해가 필요하다.10 이는 개발 팀에 높은 기술적 숙련도를 요구한다. 또한 최신 GPU 기능(예: Work Graphs)에 의존하므로, 특정 하드웨어 세대(AMD RDNA 3+, NVIDIA 30-series 이상)에서만 완벽하게 지원되어 지속적인 하드웨어 업그레이드가 필요할 수 있다.3 GPU 메모리는 CPU에 비해 제한적이므로, 데이터셋을 작은 배치로 분할하여 메모리 오버서브스크립션(oversubscription)을 방지해야 한다.19 GPU는 고성능을 유지하기 위해 상당한 전력을 소비하므로, 운영 비용 및 환경적 지속 가능성 측면에서 중요한 고려 사항이 된다.19 여러 GPU 또는 클러스터에 애플리케이션을 배포할 때 워크로드 분산 및 장치 간 통신 효율성 유지가 중요한 과제로 작용하여 다중 GPU 환경의 확장성 문제를 야기한다.19 마지막으로, 다양한 GPU 플랫폼 간의 이식성 문제가 존재하며, 하드웨어 및 소프트웨어 환경의 차이로 인해 애플리케이션 배포 및 유지보수가 복잡해질 수 있다.19
최신 발전 및 미래 전망
최근 GPU-Driven 렌더링은 Work Graphs
와 같은 기술을 통해 크게 발전하고 있다. DirectX 12의 Work Graphs는 수백만 개의 작업을 디스패치 카운트 폭증 없이 오케스트레이션할 수 있게 하여, 전통적인 ExecuteIndirect
호출로는 처리하기 어려운 복잡한 구조(예: 2억 6천 8백만 개 잎을 가진 나무)를 쉽게 처리한다.18 이는 CPU-GPU 간의 지속적인 통신이나 에셋 스트리밍의 필요성을 제거하여 엔진 통합을 단순화한다.18 AMD 연구팀은 GPU-Only 파이프라인을 통해 전통적인 방식이 수십 GB를 필요로 하는 반면, 단 51KB의 영구 상태(persistent state)만으로도 동작하는 극단적인 메모리 효율성을 시연했다.18
AI/머신러닝 알고리즘이 렌더링 프로세스를 최적화하는 신경망 기반 렌더링(Neural Rendering) 또한 중요한 발전 방향이다.3 AI는 조명 및 셰이딩 패턴을 예측하여 계산 부하를 줄이고, 이미지 노이즈 제거, 해상도 업스케일링, 절차적 텍스처 및 에셋 생성 등 다양한 방식으로 렌더링 품질과 성능을 동시에 혁신할 잠재력을 가진다.3 NVIDIA의 DiffusionRenderer는 역 렌더링(inverse rendering)과 포워드 렌더링(forward rendering)을 결합하여 실제 비디오 푸티지에서 깊이, 노멀, 알베도, 메탈릭, 러프니스와 같은 기하학 및 재질 속성을 정확하게 추정하고, 이를 기반으로 포토리얼리스틱한 이미지를 생성한다.20 또한, Neural Deferred Shading은 기존 디퍼드 렌더링 파이프라인에 신경망을 통합하여 물리 기반의 셰이딩 함수를 학습하고, 임의의 조명 입력에 대해 포토리얼리스틱한 결과를 생성하며 그림자 효과를 효율적으로 모방한다.21 NeRFs(Neural Radiance Fields) 및 3D Gaussian Splatting과 같은 기술은 새로운 시점 합성(novel view synthesis)을 위한 딥러닝 기반 기술로, 장면을 3D 가우시안으로 표현하여 실시간으로 고품질 이미지를 렌더링한다.21 Work Graphs 프레임워크를 사용하여 GPU에서 바운딩 볼륨 계층(BVH)을 구축하는 등 레이 트레이싱으로의 확장이 연구되고 있으며 18, 클라우드 기반 GPU 렌더링 서비스는 고가의 GPU에 대한 초기 투자 없이도 고성능 GPU에 접근할 수 있는 확장 가능한 솔루션을 제공한다.3
주요 적용 사례 및 게임 엔진
GPU-Driven 렌더링은 AAA 게임 타이틀에서 복잡한 씬을 구현하는 데 핵심적인 역할을 했다. Assassin's Creed Unity 및 후속작은 파리의 방대한 객체 및 실내 렌더링에 이 기술을 사용했으며, Frostbite 엔진(Dragon Age Inquisition)은 높은 지오메트리 디테일을, Rainbow Six Siege는 수천 개의 동적 잔해 객체를 구현하는 데 GPU-Driven 기술을 활용했다.15 PS4 및 Xbox One 세대 콘솔에서 삼각형 처리량 병목 현상을 해결하고 성능을 크게 향상시키는 데 인기를 얻었으며 15, Unreal Engine 4와 Unity는 이전에는 이 기술을 사용하지 않았지만, Unreal Engine 5는 이를 채택할 것으로 예상된다.15 Unity는 GPU Driven Rendering Pipeline이라는 스크립터블 렌더링 파이프라인 솔루션을 제공한다.16 AMD 연구팀은 완전히 절차적으로 생성되는 나무를 GPU-Only 파이프라인으로 실시간 렌더링하는 기술을 시연하기도 했다.18
GPU-Driven 렌더링은 렌더링 파이프라인에서 CPU의 역할을 최소화하고 GPU의 병렬 처리 능력을 극대화하는 궁극적인 단계이다. 이는 CPU가 드로우 콜 발행에서 완전히 해방되어, 수십만 개 이상의 객체를 단일 드로우 콜 또는 극히 적은 수의 드로우 콜로 렌더링할 수 있게 한다.15 이는 단순히 성능 개선을 넘어, 이전에는 불가능했던 방대한 스케일의 씬을 실시간으로 렌더링할 수 있는 새로운 가능성을 열었다. 이는 렌더링 기술 발전의 주요 동력이 CPU 병목 현상 해소에 있었음을 다시 한번 강조한다.
전통적인 렌더링에서는 객체별 또는 재질별로 버텍스 버퍼, 인덱스 버퍼, 텍스처, 셰이더, 디스크립터 세트 등을 매번 바인드해야 했다.15
VkCmdBindPipeline
과 같은 바인드 호출은 GPU에서 매우 비싼 작업 중 하나이며 15, 이러한 호출이 많아질수록 CPU와 GPU 모두에서 오버헤드가 증가하고 GPU 활용도가 저하된다. GPU-Driven 렌더링은 GPU의 효율성을 극대화하기 위해 바인드 호출의 수를 최소화하는 것을 목표로 한다.15 이를 위해 모든 메시 데이터를 하나의 큰 버텍스/인덱스 버퍼에 통합하고, 텍스처를 텍스처 배열로 관리하며, 재질 파라미터를 SSBO에 저장하고 유버셰이더를 사용하는 '바인드리스' 디자인이 채택된다.15 바인드리스 디자인은 CPU의 작업량을 크게 줄이고, 각 드로우 콜이 "더 커지게" 만들어 GPU 활용도를 향상시킨다.15 이는 현대 GPU의 큰 램프업/램프다운 시간을 고려할 때 매우 중요하다.15 바인드리스 디자인은 GPU-Driven 렌더링의 핵심적인 성능 최적화 전략이며, 단순히 CPU에서 GPU로 작업을 넘기는 것을 넘어, GPU 내부에서 데이터 접근 및 처리 방식을 근본적으로 재설계하여 효율성을 극대화하는 패러다임 전환을 의미한다. 이는 GPU-Driven 렌더링이 단순한 기술적 진보를 넘어, 렌더링 아키텍처 전반에 걸친 변화를 요구함을 보여준다.
V. 렌더링 방식의 비교 및 선택
각 방식의 성능 및 품질 트레이드오프
렌더링 방식은 각기 다른 성능과 품질 트레이드오프를 제공한다. 포워드 렌더링은 광원 수가 적거나 투명 객체가 많은 씬에서 빠르며, 하드웨어 요구사항이 낮다.7 MSAA 지원이 우수하여 더 나은 안티앨리어싱 품질을 제공할 수 있다.7 그러나 광원 수 증가에 따른 성능 저하(오버드로우 및 per-light cost)가 심각한 제약으로 작용한다.4 디퍼드 렌더링은 다수의 동적 광원이 존재하는 씬에서 압도적인 성능 우위를 보인다.6 조명 계산이 픽셀당 한 번만 이루어지기 때문에 가능한 이점이다.4 G-버퍼에 저장된 정보를 활용하여 다양한 후처리 효과를 효율적으로 적용할 수 있다.6 하지만 G-버퍼의 큰 메모리 사용량과 대역폭 요구사항이 단점이며 6, 투명도 처리 및 MSAA 지원에 어려움이 있다.6 GPU-Driven 렌더링은 CPU 병목 현상을 거의 제거하고 GPU의 병렬 처리 능력을 극대화하여, 극도로 복잡하고 객체 수가 많은 씬에서 최고의 성능을 제공한다.3 GPU 기반 컬링 및 LOD를 통해 시각적 품질을 유지하면서 성능을 최적화한다.15 최신 Work Graphs와 같은 기술은 실시간 절차적 생성 및 높은 디테일을 가능하게 한다.18 그러나 구현 복잡성이 매우 높고, 최신 하드웨어 및 API에 대한 의존도가 크다는 한계가 있다.3
적절한 렌더링 방식 선택 가이드
프로젝트의 광원 환경에 따라 적절한 렌더링 방식을 선택해야 한다. 소수의 동적 광원과 많은 투명 객체가 있는 씬에서는 포워드 렌더링이 유리하다.7 반면, 다수의 동적 광원과 복잡한 조명이 필요한 씬에서는 디퍼드 렌더링이 필수적이다.6 타겟 플랫폼의 하드웨어 사양도 고려해야 한다. 모바일이나 저사양 PC에서는 포워드 렌더링이 적합하며 7, 고성능 PC나 콘솔에서는 디퍼드 렌더링 또는 GPU-Driven 렌더링을 고려할 수 있다.5 씬의 복잡도와 객체 수가 매우 많고 오픈 월드 환경이라면 GPU-Driven 렌더링이 압도적으로 유리하다.15 요구되는 시각적 품질 및 특수 효과에 따라 선택이 달라질 수 있다. 최고의 안티앨리어싱(MSAA) 및 투명도 처리가 필요하다면 포워드 렌더링 또는 하이브리드 방식의 포워드 패스가 필요하며 7, 다양한 후처리 효과를 효율적으로 적용하려면 디퍼드 렌더링이 효과적이다.6 개발 팀의 기술 스택 및 숙련도 또한 중요한 고려 사항이다. 포워드 렌더링은 구현이 단순하여 진입 장벽이 낮지만 4, 디퍼드 렌더링과 GPU-Driven 렌더링은 더 높은 수준의 그래픽스 프로그래밍 지식과 복잡한 파이프라인 관리 능력을 요구한다.10 많은 현대 게임 엔진은 단일 렌더링 방식에 의존하기보다, 각 방식의 장점을 결합한 하이브리드 렌더링 파이프라인을 사용한다. 예를 들어, 불투명 객체는 디퍼드 렌더링으로, 투명 객체는 포워드 렌더링으로 처리하는 방식이 일반적이다.6 Unity의 HDRP(High Definition Render Pipeline)는 카메라별로 포워드/디퍼드 모드를 전환할 수 있는 유연성을 제공한다.5특징포워드 렌더링 (Forward Rendering)디퍼드 렌더링 (Deferred Rendering)GPU-Driven 렌더링 (GPU-Driven Rendering)핵심 원리객체별로 조명 및 셰이딩을 즉시 계산지오메트리 정보 저장 후, 화면 공간에서 조명 계산 연기CPU 작업(드로우 콜, 컬링)을 GPU로 오프로드, GPU가 작업 결정조명 처리광원 수에 비례하여 비용 증가 (per-light cost)광원 수에 관계없이 픽셀당 한 번 계산, 다수 광원에 효율적GPU 기반 컬링으로 실제 영향받는 광원만 처리, 무제한 광원 가능오버드로우심각한 문제 (불필요한 셰이더 실행 낭비)조명 계산 단계에서는 없음 (지오메트리 패스에서는 저렴한 오버드로우)GPU 기반 컬링으로 오버드로우 최소화투명도 지원용이 (기본적으로 지원)어려움 (별도 포워드 패스 필요)일반적으로 하이브리드 파이프라인에서 포워드 패스 사용MSAA 지원우수 (기본 지원)어려움 (후처리 AA 또는 디퍼드 라이팅 필요)일반적으로 후처리 AA 사용 또는 특정 하드웨어/API 지원 필요G-버퍼 사용없음필수 (대용량 메모리 및 대역폭 요구)없음 (데이터는 대규모 SSBO에 저장)CPU/GPU 부하CPU: 드로우 콜 많음, GPU: 오버드로우로 인한 셰이더 낭비CPU: 드로우 콜 여전히 존재, GPU: G-버퍼 메모리 대역폭 부담CPU: 최소화 (주로 로딩/언로딩), GPU: 작업량 극대화, 높은 병렬 처리구현 복잡성낮음중간 (G-버퍼 관리, 패스 분리)매우 높음 (로우레벨 API, 컴퓨트 셰이더, 바인드리스 디자인)주요 적용모바일, VR, 광원 적은 씬, 투명 객체, 하이브리드 파이프라인의 일부다수의 동적 광원, 복잡한 씬 (AAA 게임)극도로 복잡하고 객체 수가 많은 오픈 월드 씬, 차세대 게임 엔진 위 표는 세 가지 렌더링 방식의 핵심적인 특징들을 한눈에 비교할 수 있도록 구조화하여, 각 방식의 본질적인 차이점과 강점, 약점을 명확하게 파악할 수 있게 한다. 이는 프로젝트의 요구사항(광원 수, 투명도, 성능 목표, 하드웨어 제약 등)에 따라 어떤 렌더링 방식이 가장 적합한지 빠르게 판단하는 데 필요한 핵심 정보를 제공하여 실제 개발 현장에서의 의사결정을 지원한다. 또한, 복잡한 기술적 내용을 표 형식으로 요약함으로써 학습 효율성을 높이고, 각 방식 간의 상호 관계 및 진화 과정을 더 쉽게 이해할 수 있도록 돕는다. 각 렌더링 방식은 고유한 장단점을 가지며, 어떤 단일 렌더링 방식도 모든 시나리오에서 "최고"의 성능이나 품질을 제공하지 못한다.4 예를 들어, 포워드 렌더링은 단순하고 MSAA 및 투명도에 강하지만 광원 확장에 약하며 7, 디퍼드 렌더링은 광원 확장에 강하지만 메모리, 투명도, MSAA에 약하다.6 GPU-Driven 렌더링은 성능과 스케일에서 최고지만 구현 복잡성이 높다.10 각 프로젝트는 고유한 광원 환경, 씬 복잡도, 타겟 플랫폼, 시각적 목표를 가진다. 예를 들어, VR 게임은 MSAA와 낮은 지연 시간을 선호하여 포워드 렌더링이 유리할 수 있고 11, 오픈 월드 게임은 수많은 객체와 광원을 위해 GPU-Driven이나 디퍼드 렌더링이 필수적이다.12 이러한 트레이드오프를 관리하기 위해 현대 엔진들은 종종 여러 렌더링 방식을 혼합하는 하이브리드 파이프라인을 채택한다.6 이는 각 방식의 강점을 활용하고 약점을 보완하려는 실용적인 접근 방식이다. 따라서 렌더링 엔지니어링에서 "최고의" 기술은 존재하지 않으며, 항상 프로젝트의 특정 제약 조건과 목표에 맞춰 "최적의" 트레이드오프 지점을 찾아야 한다. 이는 기술 선택이 단순한 성능 지표 비교를 넘어, 시스템 아키텍처, 개발 비용, 최종 사용자 경험 등 다차원적인 고려를 포함하는 복잡한 의사결정임을 시사한다.
VI. 결론
렌더링 기술은 CPU의 한계를 극복하고 GPU의 병렬 처리 능력을 극대화하는 방향으로 꾸준히 진화해왔다. 가장 기본적인 방식인 포워드 렌더링은 구현이 단순하고 특정 시나리오(소수 광원, 투명 객체, MSAA)에서 효율적이지만, 오버드로우와 광원 수 증가에 따른 성능 저하가 주요 한계로 작용한다.
포워드 렌더링의 광원 확장성 문제를 해결하기 위해 등장한 디퍼드 렌더링은 G-버퍼를 활용한 2단계 파이프라인으로 다수의 동적 광원을 효율적으로 처리한다. 그러나 이 방식은 G-버퍼 메모리 오버헤드, 투명도 및 MSAA 처리의 어려움이라는 새로운 과제를 안고 있다.
가장 최신의 패러다임인 GPU-Driven 렌더링은 CPU의 드로우 콜 병목 현상을 해결하고 렌더링 워크로드를 GPU로 완전히 이관한다. Draw Indirect
와 컴퓨트 셰이더, 바인드리스 디자인을 통해 극도로 복잡하고 객체 수가 많은 씬을 효율적으로 렌더링할 수 있지만, 높은 구현 복잡성과 최신 하드웨어 의존성이 따른다.
각 렌더링 방식은 고유한 장단점을 가지며, 어떤 방식도 모든 상황에서 최적의 해답이 될 수 없다. 따라서 많은 현대 엔진은 각 방식의 강점을 결합한 하이브리드 파이프라인을 구축하여 최적의 성능과 품질을 추구하고 있다.
향후 렌더링 기술은 더욱 강력한 GPU 중심 아키텍처로 발전할 것이다. Work Graphs와 같은 기술의 발전은 CPU의 개입을 더욱 줄이고 GPU가 렌더링 파이프라인의 대부분을 자율적으로 처리하는 'GPU-Only' 파이프라인의 시대를 가속화할 것이다.18 AI/머신러닝의 통합 또한 중요한 방향이다. 신경망 기반 렌더링(Neural Rendering)은 전통적인 렌더링 파이프라인의 한계를 뛰어넘어, 실시간으로 포토리얼리스틱한 이미지를 합성하고, 조명 및 재질 속성을 추정하며, 복잡한 광원 상호작용을 효율적으로 시뮬레이션하는 새로운 가능성을 열고 있다.3 이는 렌더링 품질과 성능을 동시에 혁신할 잠재력을 가진다. 또한, G-버퍼의 메모리 오버헤드와 같은 문제는 여전히 중요하며, Work Graphs와 같은 기술이 보여준 극단적인 메모리 효율성 18은 향후 렌더링 기술의 중요한 발전 방향이 될 것이다. GPU-Driven 파이프라인은 실시간 레이 트레이싱 기술과 결합되어 더욱 사실적인 조명 및 반사 효과를 제공할 것이며 18, 복잡해지는 렌더링 기술을 개발자들이 더 쉽게 활용할 수 있도록, 엔진 및 API 수준에서의 추상화 및 최적화 도구 개발이 지속될 것이다.