유니티 Render Graph에 대해 배워 렌더링 효율을 높여보자!
by VR하는소년Render Graph란?


Render Graph 유튜브 강의를 들으면서 가장 인상 깊었던 점은,
하나의 Render Texture가 다른 Render Pass의 입력(Read) Resource로 사용될 수 있다는 구조뿐 아니라,
리소소의 생명주기를 기반으로 메모리를 재사용한다는 점이었습니다.
예를 들어, 위 이미지를 보면 DOF는 Depth Buffer를 입력으로 필요로 합니다.
Frame Debugger를 찍어보면 DOF Pass에서 사용된 Render Target이 _Screen Space Occlusion Texture임을 알 수 있습니다.
이는 DOF가 SSAO 결과를 직접 사용하는 것을 의미하기 보다는, SSAO Pass의 생명주기가 종료된 이후 해당 메모리 블록이 DOF Pass의 출력 버퍼로 재할당되고 있음을 보여줍니다.
즉, Screen Space Occlusion Pass에서 사용하기 위해 만들어둔 텍스처(Buffer)가 DOF에서의 Buffer로 재활용 되고 있고,
이런 최적화를 도와주는 것이 Render Graph라고 합니다.
한 마디로, Render Graph는 Pass간 리소스 의존성을 분석하고, 사용이 끝난 Buffer의 메모리를 다른 Pass에서 재사용함으로 GPU 메모리 사용량을 최적화해줍니다!
Render Graph를 통해 시각적으로 살펴보자

Render Graph를 통해 리소스들의 흐름을 시각적으로 쉽게 확인할 수 있습니다.
Depth Buffer, 즉 깊이 정보를 담고 있는 Camera Depth Texture는 Opaque 단계에서 처음 생성(Write)되며,
이후 SSAO, DOF등 여러 후처리 Pass에서 입력(Read) 리소스로 활용되고 있습니다.

Render Graph는 상단 Window - Analysis 탭을 누르시면 Render Graph Viewer를 찾을 수 있습니다.

제가 지금 진행중인 프로젝트는 VR프로젝트고, 최적화에 엄청 신경을 쓰고 있습니다.
나름 최적화를 잘했다고 생각했었는데, Render Graph를 보니 더 개선할 부분이 많네요....더 개선해야겠습니다 ㅠㅠㅠ
이렇게 시각적으로 보니깐 이해하기쉽고 어떻게 개선해야할 지 한 번에 이해되니 너무 좋은거 같아요!!!!!
TMI : 왜 Opaque 단계에서 Camera Depth Texture가 생성이 될까요?
URP 렌더링 구조에 대해
유니티 URP 렌더링 구조 정리 - Main Thread부터 GPU까지, RenderPass와 CommandBuffer의 실제 흐름
항상 URP 프로젝트를 해오면서, URP 정체에 대해서는 궁금해한 적이 없었던 것 같습니다.그래서, 이번 시간에 Main Thread부터 GPU까지, RenderPass와 CommandBuffer의 실제 흐름을 한 번 살펴보고자 합니다.
wlsdn629.tistory.com
이전 포스팅을 보시면 이해하기 쉽습니다!
Opaque 단계에서 픽셀 단위의 가려짐(occlusion) 판정과 올바른 렌더 순서를 보장하기 위해서입니다!
특히 Early-Z 최적화를 통 뒤에 가려진 픽셀들을 미리 버릴 수 있기 때문입니다.
Camera Depth Texture는 Shader에서 Sampling 가능하게 만든 Texture라고 생각하시면 좋을거 같습니다!
다음 시간엔 아래 유튜브 강의까지 모두 이해해서 돌아오겠습니다!
블로그의 정보
진우의 혼잣말하는 블로그
VR하는소년