Render pipeline
렌더 파이프라인은 씬의 콘텐츠를 가져와서 화면에 표시하는 일련의 작업을 수행합니다. 수행하는 작업의 간략한 내용은 다음과 같습니다.
- Culling
- Rendering
- Post Processing
렌더 파이프라인은 저마다 다른 기능 및 성능을 지니고 있으며, 다양한 게임, 어플리케이션 및 플랫폼에 적합합니다.
Unity 가 제공하는 다양한 렌더 파이프라인을 이해해야 개발 초기에 프로젝트에 대한 올바른 경험을 내릴 수 있습니다.
Unity 는 다음의 렌더 파이프라인을 제공합니다.
- 빌트인 렌더 파이프라인은 Unityd의 기본 렌더 파이프라인 범용으로 사용되는 렌더 파이프라인이므로 커스터마이즈 옵션이 제한적입니다.
- 유니버설 렌더 파이프라인(URP)은 광범위한 플랫폼에서 최적화된 그래픽스를 구현하도록 지원합니다.
- 고해상도 렌더 파이프라인(HDRP)는 고사양 플랫폼을 위한 최신 고해상도 그래픽스를 구현하도록 지원합니다.
- Unity의 스크립터블 렌더 파이프라인 API를 사용하여 커스텀 렌더 파이프라인을 생성할 수도 있습니다.

렌더링이란 3차원 공간에 객체(Object)를 2차원 화면인 하나의 장명(Scene)에 바꾸어 표현하는것을 말한다.
즉 2차원에 표시된 물체처럼 보이게 하는 것이라고 이해하며 쉽다.
https://parksh86.tistory.com/168
렌더링(Rendering) 이란?
렌더링(Rendering) 렌더링이란 3차원 공간에 객체(Object)를 2차원 화면인 하나의 장면(Scene)에 바꾸어 표현하는 것을 말한다. 즉 2차원에 표시된 물체를 3차원에 물체처럼 보이게 하는 것이라고 이해
parksh86.tistory.com
Forward Rendering
전통적인 렌더링 기법이며 수많은 동적 Light를 다루는데 에는 한계가 존재합니다. 비교적 저 사양에서 잘 작동하고, 해상도가 올라가도 요구하는 메모리가 Deferred에 비해 적으며 반투명 처리도 문제가 없습니다. 하지만, n개의 광원과 m개의 Mesh가 포함된 Scene을 표현하기 위해서는 n x m 번의 드로우콜이 필요합니다. 그리고 화면에 보이지 않더라도 모든 오브젝트 광원을 계산합니다.

Forward Rendering은 오브젝트들을 바로 하나의 버퍼에 그려주기 때문에 각 오브젝트를 그려줄 때 마다 조명 연산을 수행합니다. 광원이 많을수록 드로우 콜의 호출 횟수가 늘어나면서 성능에 큰 부담을 안겨줄 수 있습니다.

3D MMORPG로 대성공한 리니지2는 대표적인 Forward Rendering 방식의 게임이다. 당시 게임에서는 특별한 라이팅 처리를 하는것이 어려웠기 때문에 당시 출시된 게임은 화면이 비슷해 보이는 특징이 있다.
Deferred Rendering
많은 수의 실시간 Lighting 을 좋은 성능으로 처리하기 위한 기술입니다. 필요한 장면을 그린 후 G-Buffer 에 저장하여 장면을 합성하고 최종 결과물을 렌더링 하는 기법입니다. Scene 렌더링과 광원 렌더링을 구분하고 드로우콜이 감소되는 효과가 있고 모바일 GPU에 최적환 된 방법이지만 많은 Render target(Frame Buffer) 을 필요로 합니다.

Deferred Rending의 연산처럼 각 오브젝트의 Normal 정보와 Depth 정보 Diffuse 정보 등을 모아서 한번에 처리해주는 것을 볼 수 있습니다. MRT(Multi Render Target) 라는 기법으로 각 Render Target에 각각의 정보들을 그려준 뒤 G-Buffer 에 저장하고 하나의 Texture에 연산하여 그려줍니다.
하지만, 메모리 대역폭이 뒷받침 되어야 하며 PC에서 많이 사용하지만 모바일에서는 메모리 대여폭이 낮아 성능이 저하됩니다.
* Anti aliasing (MSAA) 해결 과 반투명 오브젝트의 Rendering 이 어렵다.

현실감 넘치거나 눈부신 화면을 연출할 때 강력한 효과를 보여주는 Deferred Rendering 현재는 많이 개선되었습니다.
Forward +
수많은 Lighting 다루는 기술입니다. 여러 개의 타일을 나누고 타일 별로 Lighting 개수를 나눕니다. Forward 의 경우 Lighting 의 영향을 받는 제한이 오브젝트에 있었다면 Forward+ 는 타일 별로 Lighting 의 개수로 영향을 받아 하나의 오브젝트에 여러 개의 Lighting 을 적용시킬 수 있습니다.

Forward + Rendering 기술의 첫 번째 단계는 화면 공간에서 균일한 타일 그리드를 사용하여 조명을 타일별 목록으로 분할
두 번째 표준 Forward Rendering pass 를 사용해 Scene 의 개체를 셰이딩 처리하지만, 씬의 모든 동적 조명을 반복해 계산하는 대신 현재 Pixel의 화면 공간 위치를 사용하여 이전패스에서 계산된 그리드의 조명 목록을 조회한다. 이 Light Culling 은 Pixel을 올바르게 조명하기 위해 반복해야 하는 중복 조명의 수를 크게 줄이므로 표준 Forward Rendering 기술에 비해 상당한 성능 향상을 제공하게 된다. Forward + 는 표준 기술을 통합하기 때문에 기존방식으로 구축된 그래픽 엔진에 통합 될 수 있다. Forward + 는 G-Buffer 를 사용하지 않으며 Deferred 의 한계를 겪지 않는다. 불투명 및 투명 지오메트리 모두 Forward +를 사용하여 렌더링할 수 있다. 최신 그래픽 하드웨어를 사용하여 5,000~6,000개의 동적 조명으로 구성된 장면을 Full HD 해상도에서 실시간으로 Rendering 할 수 있게된다.

Screen Space Ambient Occlusion (SSAO)
AO(Ambient Occlusion) 빛의 차폐(가려 막고 덮음)로 인한 감쇠 근사치를 구하는 효과입니다. 현실에서도 방의 구석 부분은 훨씬 어둡듯이, 구석이나 틈 같은 곳을 더 어둡게 하여 더욱 자연스럽고 사실적인 느낌을 낼 수 있도록, 표준 글로벌 일루미네이션에 더해 미묘한 효과를 사용하는 것이 가장 좋습니다. 일반적으로 광원과 물체를 던져 놓고 지역 조명으로 처리를 시행하면 그림자는 있지만 실제와 미묘하게 다른데 AO는 이를 보정하고 입체감을 강화하며 실제에 더 가깝게 보이도록 만들어 줍니다.

SSAO(Screen Space Ambient Occlusion) 가장 많이 쓰이는 AO이며 현재 모니터에 Rendering 되는 영역만을 Screen Space로 인식하여 해당 영역에만 AO를 적용함으로써 일정 수준 최적화 된 그래픽을 제공합니다. 정확도는 떨어지지만 실시간 렌더링에 사용이 가능하면서 연산이 가벼운 이점이 있습니다.

AO를 표현하는 기법들은 기본적으로 연산이 비쌉니다. 왜냐하면 해당 영여이 표면에 의해서 둘러쌓여있는지 판가름하기 위해서 여러 정보를 수집해야 하기 때문입니다.
'Unity' 카테고리의 다른 글
[Unity] UGUI & 최적화 (0) | 2023.04.23 |
---|---|
[Unity] Occlusion Culling (0) | 2022.12.05 |