
언리얼의 렌더링 파이프라인에 대해 알아보기 전에 Rendering pass와 Deferred rendering의 개념에 대해 알아볼 필요가 있습니다.
Rendering pass는 GPU에서 실행되는 하나에서 여러 개의 드로우 호출로 구성된 집합입니다. 일반적으로 많은 Draw calls은 적절한 실행 순서를 보장하기 위해 함께 그룹화됩니다. 이는 이전 패스의 출력이 다른 순차적 패스의 입력으로 사용될 수 있기 때문입니다.
Deferred rendering은 라이트와 머티리얼을 별도의 패스로 렌더링하는 언리얼의 기본 메서드입니다. 이 별도의 패스는 베이스 패스가 불투명도, 스페큘러, 디퓨전, 노멀 등의 주요 정보에 대한 정보를 축적할 때까지 기다립니다. 아래 예시는 디퍼드 렌더링이 어떻게 작동하는지 보여줍니다.

언리얼은 래스터화할 때 각 픽셀의 라이팅과 셰이딩을 계산하는 대신 디퍼드 렌더링을 사용하여 씬의 지오메트리에 대한 정보를 “화면 밖”의 GBuffer에 캡처합니다. 이 버퍼는 씬에 라이팅과 셰이딩을 적용하기 위해 두 번째 패스에 사용됩니다. 이 버퍼의 장점은 GPU를 보다 효율적으로 사용할 수 있다는 것입니다.
지오메트리를 조명과 셰이딩에서 분리하면 GPU가 많은 수의 조명과 효과를 동시에 처리할 수 있으므로 성능이 향상될 수 있습니다. 따라서 Dynamic lighting과 복잡한 조명 설정에 유연성을 제공합니다.
이 패스는 변경될 수 있지만 일반적으로 이 순서대로 진행됩니다. RenderDoc을 다운로드하고 엔진 검증을 직접 해보는 것을 추천합니다
Deferred mode에서 Base Pass는 머티리얼의 프로퍼티를 나중에 라이팅 계산을 위해 GBuffer defers에 저장합니다.
Geometry Passes는 라이팅 전에 메시를 그리고 우선순위를 지정하는 곳입니다.

투명도에 따라 메시를 최적화하는 데 사용되는 Depth Z-Buffer의 PreRendering입니다. 이는 다른 메시 뒤에 숨겨져 보이지 않는 메시를 최적화하며 “Culling”(렌더링하지 않음)이라고 하는 방법입니다.
HZB는 오클루전 컬링(occlusion culling) 기법과 화면 공간(Screen Space)에서의 앰비언트 오클루전 및 반사와 같은 기술에 사용됩니다.
Velocity는 움직이는 모든 버텍스의 속도를 측정하여 모션 블러 속도 버퍼에 저장하는 버퍼입니다. Velocity buffer는 현재 프레임과 다음 프레임의 차이를 비교하여 마스크를 생성합니다. Doom 2016에서는 이 Velocity buffer를 사용하여 씬에서 정적이지 않은 메시를 마스킹하는데, 이는 다음 프레임에서 움직이지 않는 메시의 렌더링을 최적화하는 영리한 방법입니다.
이 부분은 프레임에서 가장 연산량이 많은 단계로, 특히 많은 동적 및 그림자 광원이 있을 때 더욱 그렇습니다.
직접 조명(Direct Lighting)
그림자가 없는 광원(Non-Shadowed Lights)
그림자가 있는 광원(Shadowed Lights)
그림자 깊이(Shadow Depths)

Shadow Projection
간접 조명(Indirect Lighting)

라이팅 이후 합성(Composition After Lighting)
반투명 및 라이팅(Translucency and lighting)
반사(Reflections)
스크린 공간 반사(Screen Space Reflections)
포스트 프로세싱(Post Processing)
렌더 파이프라인의 마지막 패스로, 이후에 삼각형을 그릴 때 이 부분을 활용하게 됩니다.