서론
이전 시간에 Unreal Engine에서의 렌더링 파이프라인에 알아보기 전에 기초적인 하드웨어(GPU)관점에서의 렌더링 파이프라인에 대해서 알아보았다. 이번 시간에는 Unreal Engine에서 사용하는 렌더링 파이프라인은 어떤 방식이며 그것에 대해서 알아보도록 하자.
Forward rendering
Unreal Engine에서 사용하는 파이프 라인은 기본적으로 디퍼드 렌더링(Deferred rendering)과 포워드 렌더링(Forward rendering)을 선택하여 사용하고 디폴트는 디퍼드 렌더링을 사용한다고 한다. 우선 디퍼드 렌더링에 대해 알기 전에 포워드 렌더링에 대해 간략하게 알아보자.
이전 시간에 GPU의 관점에서의 렌더링 파이프라인에 대해 알아보았다. 포워드 파이프라인은 이것에서 조금 더 구체화되어 Vertex들을 래스터화(Rasterization)한 다음에 Pixel shader(Fragment shader) 단계를 추가하여 각 픽셀마다 쉐이딩과 라이팅 연산을 해주는 방식이다.
조금 더 설명을 하자면 래스터화가 끝난 직후에는 2D 그리드(Frame buffer)에 색이 없는 픽셀들이 찍혀있다.
이 픽셀들에 원본 오브젝트(메쉬, 텍스쳐, 조명 등)을 참조하여 색을 결정하는 과정이 Pixel shader 단계인 것이다. 즉 래스터화 과정은 이 픽셀들이 활성화 될 위치를 결정하는 과정 이고, 해당 픽셀이 어떤 색을 가지는지를 결정하는 것은 Pixel shader 과정에서 정해지는 것이다.
이 방식은 아마 렌더링 파이프라인을 검색하면 나오는 가장 "정석적인" 방식의 렌더링 방식이다. 실제로 디퍼드 렌더링 방식이라는 개념이 나오기 전에는 이 방식이 렌더링 파이프라인의 대명사였지만 디퍼드 렌더링 방식이 추가되면서 별도로 포워드 렌더링이라고 지칭하는 단어가 생긴 것이다. 그럼 왜 Unreal engine 에서는 디폴트로 디퍼드 렌더링 방식을 사용하는 걸까?
포워드 렌더링 방식의 한계
포워드 렌더링 방식의 가장 큰 단점은 오브젝트 단위로 라이팅을 처리한다는 점에 있다. 앞서 Pixel shader 과정에서 픽셀에 원본 오브젝트를 참조하여 색을 결정한다고 했는데, 이 과정을 모든 오브젝트를 대상으로 처리를 하기 때문에 화면상의 보이지 않는 오브젝트도 라이팅 처리를 하게 되어 오버 드로우가 발생해 여러개의 실시간 광원이 존재할 경우 성능에 대한 부담이 크게 증가하게 된다.
Deferred rendering
디퍼드 렌더링과 포워드 렌더링은 래스터화 까지는 동일하지만 픽셀 셰이더(Fragment Shader) 실행 방식 부터 차이가 발생한다. 디퍼드 렌더링에서는 래스터화 이후 Pixel Shader(Fragment Shader)가 각 오브젝트별로 실행되며, 색상(Color), 법선(Normal), 깊이(Depth), 재질 정보(Material Properties) 등의 데이터를 여러 개의 G-Buffer에 저장하며, 이때는 라이팅을 계산하지 않는다.
이때 이 G-Buffer를 활용하여 두번째 Pixel shader(Lighting Fragment Shader)에서 마치 포스트 프로세싱과 유사하게 픽셀 단위로 라이팅 연산이 수행되는데, 이는 오브젝트 개수와 관계없이 G-Buffer를 활용해 라이팅 연산을 한 번의 패스로 처리할 수 있다는 뜻이다.
Forward rendering VS Deferred rendering
그렇다면 "디퍼드 렌더링이 무조건 좋은게 아닌가요?" 라고 할 수 있지만 아쉽게도 디퍼드 렌더링은 포워드 렌더링에 비해 복잡하고 G-Buffer의 사용으로 인해 추가적인 GPU 저장공간을 필요로 하기 때문에 하드웨어의 의존도가 높아진다. 따라서 포워드 렌더링은 하드웨어의 성능에 제약이 있는 모바일, VR등의 환경에서 주로 사용되며, 이는 즉 모바일이나 VR환경을 개발할때 포워드 렌더링 방식을 사용한다면 무분별한 조명의 사용은 성능 저하를 발생시킬 수 있다.
포워드 렌더링 | 디퍼드 렌더링 | |
방식 | 즉시 라이팅 & 셰이딩 | 나중에 라이팅 수행 |
장점 | 메모리 사용량 적음, 투명 처리 쉬움 | 조명 개수 많아도 성능 유지, Overdraw 방지 |
단점 | 조명이 많으면 성능 저하, Overdraw 발생 | G-버퍼 저장 공간 필요, 투명도 처리 어려움 |
적합한 곳 | 모바일, VR, 심플한 장면 | AAA 게임, 실사풍 그래픽 |
'Computer Graphics' 카테고리의 다른 글
1. [Unreal 5] 언리얼 엔진의 렌더링 파이프라인 (Rendering Pipeline) (1) | 2025.03.21 |
---|