역자의 말.
최근 보름동안 유니티2022 버전에서 개발 된 렌더링 메서드들을 유니티6 으로 전환하고 있습니다. 역자 역시 Render Graph 를 최근에서야 다뤄보고 있기 때문에 많은 자료와 예제들을 찾아보고 있었는데요... 아쉽게 해외 블로그 또는 한국 블로그에서는 잘 정돈 된 내용을 찾아보기 힘들더라구요. 그래서 일본 엔지니어 분들이 정리 해 주신 양질의 테크블로그 글을 간략히 소개 해 보고자 합니다.
소개하는 글은 주식회사 사이버에이전트 SGE 핵심기술본부 기술 블로그에 소개 된 글입니다.
소개
안녕하세요, 사이버 에이전트 게임 엔터테인먼트 사업부, SGE 핵심기술본부(코어테크) 그래픽팀에서 근무하고 있는 장유빙(張煜冰)입니다.
RenderGraph는 렌더링 파이프라인을 보다 유연하고 효율적으로 관리할 수 있는 새로운 프레임워크입니다.다양한 최적화를 통해 런타임 렌더링 성능을 향상시킵니다. 이미 HDRP에 도입되어 있으며, Unity6(URP17)부터는 URP에도 정식으로 도입됩니다.
RenderGraph는 향후 URP의 중요한 부분이 될 것으로 예상하고, 저는 유니티 2023.3부터 코어 테크그래픽스 팀에서 RenderGraph에 대해 꾸준히 연구해왔습니다.
이제부터는 제가 그동안 얻은 지식과 공식 발표 자료를 종합하여 RenderGraph의 기본 개념부터 적용 방법까지 몇 차례에 걸쳐 소개하고자 합니다.
이번 글은 그 첫 번째로 RenderGraph의 기본 개념과 유용한 기능에 대한 소개입니다.
기사 작성 시점의 환경
- Unity6 (6000.0.4f1)
- Universal RP 17.0.3
RenderGraph의 특징과 장점
RenderGraph는 기존 URP 렌더링아키텍처에 비해 다음과 같은 장점이 있습니다.
- 렌더패스 종속성 명확화
- 각 렌더 패스의 입력(텍스처, 버퍼 등), 출력(렌더 타깃, 버퍼 등)을 명시적으로 선언해야 합니다.
- 이를 통해 각 렌더 패스 간의 리소스 종속성을 명시하여 패스 순서와 리소스 관리를 효율화할 수 있습니다.
- 자동 동기화 포인트 생성
- 비동기 컴퓨트 큐와 일반 그래픽 큐 사이의 동기화 지점을 자동으로 생성하여 GPU 처리 시간을 단축합니다.
- 이를 통해 개발자는 수동으로 동기화 지점을 설정하는 번거로움을 줄일 수 있습니다.
- 메모리 사용 효율 최적화
- 프레임당 실제 사용되는 리소스만 할당하고, 더 이상 사용하지 않는 리소스를 자동으로 해제하여 메모리 사용량을 줄입니다.
- 이를 통해 GPU 메모리 사용 효율을 향상시킵니다.
- 성능 최적화
- 각 렌더 패스를 자동으로 NativeRenderPass(저수준 GraphicAPI에 직접 접근하는 형태)로 컴파일하고, 병합 가능한 경로(입력, 출력이 일치하는)를 병합하고 불필요한 경로(렌더링 결과에 영향을 주지 않는)를 제외합니다.
- 이를 통해 불필요한 중복 처리를 제거하여 오버헤드를 줄이고 성능을 향상시킬 수 있습니다.
- 유지보수성 향상
- 리소스 관리가 내재화되어 있어 개발자는 리소스 확보, 해제 등 복잡한 코드를 직접 작성하지 않아도 되므로 렌더 파이프라인의 유지보수가 용이해집니다.
- 향상된 디버깅 및 프로파일링
Render Graph Viewer 정보
RenderGraphViewer는 RenderGraph와 함께 구현된 새로운 시각화 도구로, 에디터 내에서 엔진의 렌더패스 생성 및 프레임 리소스 사용량을 직접 분석할 수 있습니다.
이제부터 그 주요 기능과 사용법을 소개합니다.
Render Graph Viewer 열기
Window → Analysis → Render Graph Viewer에서 엽니다.
기능 설명
Render Graph Viewer는 이 5가지 영역으로 구성되어 있으며, 각종 정보를 한 눈에 파악할 수 있도록 설계되어 있습니다.
- ①:각 리소스의 수명 및 각 패스별 액세스 현황
- ②:RenderGraph에서 실행되는 RenderPass 목록입니다.
- ③:드로잉 처리에 사용되는 모든 텍스처 리소스 목록입니다.
- ④:3)에 있는 리소스에 대한 자세한 정보
- ⑤:2)에 있는 RenderPass의 상세 정보
①아이콘 설명
:해당 리소스가 해당 Pass에서 Global 리소스로 설정된 경우
:해당 리소스가 해당 Pass로 작성된 리소스
:해당 리소스가 해당 Pass로 로드됨
:해당 리소스가 해당 Pass로 읽기 및 쓰기 모두 완료됨.
:해당 리소스가 해당 Pass에서 사용되지 않았지만 후속 Pass에 사용되기 때문에 아직 폐기되지 않았습니다.
:해당 리소스가 확보되기 전 또는 파기된 후
②아이콘 설명
1:선택한 패스의 문자와 하단 테두리가 흰색으로 강조 표시되며, NativeRenderPass에 병합된 패스도 동시에 선택됩니다.
2:테두리에 파란색 선으로 연결된 패스들은 하나의 NativePass로 병합되었음을 의미한다.
3:파란색 테두리가 있는 Pass는 선택한 Pass와 동일한 리소스를 사용하고 있음을 의미합니다.
4:프레임에 옅은 파란색으로 깜박이는 Pass는 선택한 Pass와 병합이 가능하지만, 병합할 수 없는 Pass 사이에 끼어 병합할 수 없음을 의미합니다.
③아이콘 설명
:그 리소스는 RenderGraph에 의해 확보되는 것이 아니라 RTHandleSystem에 의해 확보된 후 RenderGraph로 Import되고 있다.
④에서 각 리소스에 대한 자세한 정보를 확인할 수 있습니다.
⑤에서 각 Pass의 상세 정보를 확인할 수 있습니다.
RenderGraph의 단점
기존 프로젝트를 Unity6에서 열었을 때, 커스텀 경로가 모두 작동하지 않는다는 사실에 놀라지 않으셨나요?
- 호환성 문제: 호환성 문제.
- 구 시스템과 호환되지 않기 때문에 구 시스템에서 만든 커스텀 패스는 전혀 작동하지 않습니다.
RenderGraph에서 구 시스템에서 만든 커스텀 패스를 전혀 사용할 수 없다는 것이 가장 큰 단점이라고 생각합니다. 신규 프로젝트는 그렇다 치더라도, 개발 중인 프로젝트를 Unity6로 옮기는 데는 상당한 어려움을 겪을 수 있습니다. 다행히 RenderGraph를 사용하지 않고 기존 시스템을 그대로 사용할 수도 있습니다.
RenderGraph 활성화/비활성화 전환 방법
Unity6부터 이전 시스템은 비추천으로 분류되어 RenderGraph가 기본적으로 활성화되어 있습니다. 아래 메뉴에서 이전 시스템으로 되돌릴 수 있습니다.
편집 → 프로젝트 설정 → 그래픽 → 파이프라인별 설정 → URP탭 → 렌더 그래프 → 호환 모드(렌더 그래프 비활성화)
여기에 체크하면 Render Graph가 비활성화되어 이전 시스템으로 돌아갑니다.
마지막으로
RenderGraph는 매우 훌륭한 시스템이지만, 기존 시스템에서 생성한 커스텀 패스가 전혀 작동하지 않기 때문에 특히 기존 프로젝트에서 첫 발을 내딛기가 어려울 수 있습니다.
그러나 구 시스템은 이미 비추천으로 분류되어 조만간 폐기될 것으로 예상됩니다.그때가 되면 RenderGraph로 전환할 수밖에 없습니다.
다음 시간에는 유니티 공식에서 제공한 RenderGraph 샘플 코드를 바탕으로 RenderGraph에서 새로운 커스텀 패스를 구현하는 방법에 대해 알아보도록 하겠습니다.
참조:
다음 글.
원문
'TECH.ART.FLOW.IO' 카테고리의 다른 글
[번역] URP 17, RenderGraph Invalid version: 20 (2) | 2024.10.06 |
---|---|
[번역] Unity6에서 RenderGraph를 활용해보자 - 구현 응용편 1편 (0) | 2024.10.06 |
[소식][번역]URP 17로의 업그레이드와 Render Graph 활용 방법 (1) | 2024.10.06 |
[소식] 유나이트 2024 하이라이트 게임 개발의 도구, 강연 및 변화 (17) | 2024.09.27 |
[번역] Optimizing AMD FSR for Mobiles (1) | 2024.09.20 |