Unity/TIL

Unity Render Pipeline

김차루 2024. 6. 18. 20:50
스파르타 내배캠 40일차 TIL
C3조_ 이석삼조

 

 

 

셰이더 강의에 앞서 이런 말을 들었다. 여러분들의 킥은 뭔가요? 뒷통수를 맞은 기분이었다. 부트캠프에 들어오기 전에는 분명 유니티 공부 중에서도 연출이나 사운드, 셰이더에 집중해서 공부하고 나만의 강점도 만들자고 했었는데 어느순간 공부를 하면서 잊고 있었던 것 같다. 남은 기간 동안 잘할 수 있는 한 가지를 정해서 열심히 공부 해봐야 할 것 같다. 그래서 오늘은 렌더 파이프라인으로 시작해보려고 한다. 

 

렌더 파이프라인은 면접에서도 많이 나오는 질문 중 하나이다. 이번 기회에 공식 문서를 참고하여 꼼꼼히 공부해보면 좋을 것 같다. 

 

렌더 파이프라인

씬의 콘텐츠를 가져와서 화면에 표시하는 일련의 작업을 수행한다. 수행하는 작업의 간략한 내용은 다음과 같다. 

  • 컬링
  • 렌더링
  • 포스트 프로세싱

렌더 파이프라인은 저마다 다른 기능 및 성능 특성을 지니고 있으며, 그렇기 때문에 전환하기가 어려울 수 있다. 개발 초기에 프로젝트에 대한 올바른 결정을 내려야 한다. 

 

종류

  • 빌트인 렌더 파이프라인 : Unity의 기본 렌더 파이프라인이다. 범용으로 사용되는 렌더 파이프라인이므로 커스터마이즈 옵션이 제한적이다.
  • 유니버설 렌더 파이프라인(URP) : 쉽고 빠르게 커스터마이즈할 수 있는 스크립터블 렌더 파이프라인이다. 광범위한 플랫폼에서 최적화된 그래픽스를 구현하도록 지원한다.
  • 고해상도 렌더 파이프라인(HDRP) : 스크립터블 렌더 파이프라인으로, 고사양 플랫폼을 위한 최신 고행상도 그래픽스를 구현하도록 지원한다. 
  • 커스텀 렌더 파이프라인 : Unity의 스크립터블 렌더 파이프라인 API를 사용하여 생성할 수 있다.

 

빌트인 렌더 파이프라인 

서로 다른 렌더링 경로 중에서 선택하여 설정하고 커맨드 버퍼와 콜백을 사용하여 기능을 확장할 수 있다.

렌더링 경로

렌더링 경로는 조명 및 셰이딩과 관련된 일련의 작업이다. 렌더링 경로는 저마다 다른 기능 및 성능 특성을 지니고 있다. 프로젝트에 가장 적합한 렌더링 경로를 결정하는 방식은 프로젝트 타입과 타겟 하드웨어에 따라 다른다. 

 

1. 포워드 렌더링

빌트인 렌더 파이프라인의 기본 렌더링 경로이다. 포워드 렌더링은 범용적인 목적으로 사용된다. 이것으로 실시간 광원을 렌더링하는 작업은 성능 부하가 매우 크다. 이러한 부하를 줄이기 위해 Unity가 픽셀당 한 번에 렌더링하는 광원 수를 선택할 수 있다. 

+ 프로젝트가 실시간 광원을 많이 사용하지 않거나, 조명 정확도가 프로젝트에 중요하지 않은 경우에 추천한다. 

2. 디퍼드 셰이딩

빌트인 렌더 파이프라인에서 조명과 그림자 정확도가 가장 높은 렌더링 경로이다. 디퍼드 셰이딩은 GPU 지원을 필요로 하며, 일부 제한 사항이 따른다. 예를 들어 반투명 오브젝트, 직교 투사, 또는 하드웨어 안티앨리어싱을 지원하지 않는다. 

+ 실시간 광원이 많고, 높은 수준의 조명 정확도를 필요로 하고, 타겟 하드웨어가 디퍼드 셰이딩을 지원하는 경우에 추천한다. 

3. 레거시 버텍스 릿

조명 정확도가 가장 낮은 렌더링 경로로, 실시간 섀도우를 지원하지 않는다. 

 

 

유니버설 렌더 파이프라인 

Unity에서 제작한 사전 빌드된 스크립터블 렌더 파이프라인이다. URP는 아티스트 친화적 워크플로를 통해 모바일, 고사양 콘솔, PC 등 다양한 플랫폼에서 최적화된 그래픽스를 쉽고 빠르게 구현하도록 도와준다.

 

 

고해상도 렌더 파이프라인 사용

AAA 품질 게임, 자동차 데모, 건축물 구현 등 고화질 그래픽스가 더 중요한 요소에 사용한다. HDRP는 물리 리반 조명 및 머티리얼을 사용하고 포워드 및 디퍼드 렌더링을 지원하다. HDRP는 컴퓨터 셰이더 기술을 사용하므로 호환 가능한 GPU 하드웨어를 필요로 한다.  

 

 

스크립터블 렌더 파이프라인 사용

C# 스크립트를 사용하여 렌더링 커맨드를 예약하고 설정할 수 있는 씬 API 레이어이다. Unity는 이러한 커맨드를 저수준 그래픽스 아키텍처로 전달한 후 그래픽스 API에 명령을 전송한다. 또한 URP와 HDRP는 SRP를 기반으로 빌드된다. 또한 SRP를 기반으로 커스텀 렌더 파이프라인을 만들 수 있다.