Unity 개발/기술 향상

[Unity6] URP 200% 활용하기 - GPU Resident Drawer 및 GPU Occlusion Culling 설정과 확인 방법

내공부방 2025. 6. 22. 23:20
반응형

이번 글에서는 Unity 6 URP에서 GPU Resident DrawerGPU Occlusion Culling 기능을 설정하고,
실제로 적용되었는지 확인하는 방법까지 정리해보겠습니다.

 

참고한 영상은 Unity 6 URP에서 업데이트된 주요 렌더링 기능을 소개하는 공식 영상이고,
그 중에서도 Draw Call 최적화 및 Occlusion Culling 기능이 어떻게 개선되었는지를 설명해줍니다 ㅎㅎ 

https://www.youtube.com/watch?v=yBu8m-AaT3A

 

 

!! 병목 지점 먼저 이해하자: CPU vs GPU 바운드

렌더링 최적화를 위해 가장 먼저 파악해야 할 것은 어디가 병목인지입니다.

  • CPU가 Game Logic을 처리 → GPU에게 Draw Call 명령을 전달
  • 이 명령은 바로 실행되지 않고, Command Buffer에 저장되어 GPU가 순차적으로 처리
  • CPU와 GPU는 병렬적으로 동작하지만, 어느 한 쪽이 느려지면 프레임 지연 발생!!

🔻 예시

  • GPU가 일을 다 했는데 CPU가 아직 명령을 안 주면 CPU 바운드
  • 반대로 CPU가 명령을 다 주고 GPU가 아직 처리 중이면 GPU 바운드

!! 만약 Unity 프로파일러 창에서 RenderLoop 시간이 높고, Stats 창의 SetPass Call 수가 많다면 → 드로우콜 병목일 가능성이 큽니다.

Unity6 강의 이미지 참고

1. 최적화 방법 1: GPU Resident Drawer 설정

GPU Resident Drawer는 Unity가 자동으로 Draw Call을 Instancing과 Batching으로 최적화하는 기능

1-1. 주요 특징

  • 유니티가 자동으로 최적화 수행 (개발자가 직접 Batching 하지 않아도 됨)
  • 대부분의 플랫폼 지원 (단, WebGL2/OpenGLES는 제외)
  • 실제 Draw Call 수를 3분의 1 수준으로 감소 가능하다고 한다! 
  • Skinned Mesh Renderer에는 적용되지 않음 (Mesh Renderer만 해당)

1-2. 설정 방법

1. Project Settings > Graphics
BatchRendererGroup Variants를 Keep All로 설정

 

2. Graphics > URP Asset 파일 선택
GPU Resident Drawer를 Instanced Drawing으로 설정

 

* 설정 항목 설명 :

  • Small-Mesh Screen-Percentage
    → 화면상 작게 보이는 메시 제외 기준 (0.1 ~ 0.5 추천)
  • GPU Occlusion Culling
    → GPU에서 가려진 오브젝트를 자동으로 생략.
    고사양 플랫폼(PC/콘솔)에서 효과 큼

3. Rendering Path → Forward+


2. 최적화 방법 2: GPU Occlusion Culling 활성화

 : GPU에서 Depth 정보를 기반으로 가려진 오브젝트를 렌더링에서 제외시켜 퍼포먼스를 높이는 기능!

 

2-1. 설정 방법

1. URP Renderer에서:

  • Rendering Path → Forward+
  • Depth Priming Mode → Auto 또는 Forced

* Depth Priming Mode란? : Overdraw(중복 픽셀 처리)를 줄이는 최적화 기술

- 정적/불투명 오브젝트가 많은 씬에서 특히 효과적 

- 모바일은 Forced,  조명이 많은 씬은 Auto 또는 Forced, 복잡한 구조물 씬은 Auto 하는 것을 권장!!!!

 

2. Render Graph → 비활성화

 

3. URP Asset에서 → GPU Occlusion Culling 체크

 

 

4. Static Batching → 비활성화
(GPU 오클루전 컬링과 충돌 가능성 있음)

 

 

아!! 그리고 마지막으로 오브젝트 속성에서 Static 체크카메라 속성의 Rendering 부분 중 오클루전 컬링 항목 체크 해줘야 한다 

 

자 이제 설정은 끝이 났다!! 적용 여부를 확인해보자 

확인 방법은 Frame Debugger를 사용하여 확인할 수 있다.

 

!! 확인 순서 !!

  1. Window > Analysis > Frame Debugger 실행
  2. 좌측에서 ExecuteRenderGraph 항목 확장
  3. 아래 항목이 존재하는지 확인:
 

 

ExecuteRenderGraph
├─ UpdateOccluders           ← GPU 오클루전 컬링 로직 시작
├─ InstanceOcclusionTest     ← 오클루전 결과 테스트  (GPU 오클루전 연산)
├─ DrawDepthNormalPrepass    ← 여기서 숨긴 오브젝트가 Draw 되면 컬링 실패
└─ DrawForwardOpaque         ← 최종 렌더링. 여기서도 숨긴 오브젝트가 없으면 성공!

 

* GPU Resident Drawer과 GPU Occlusion Culling을 설정하기 전 

 

* GPU Resident Drawer과 GPU Occlusion Culling을 설정 후 

 - DrawSRPBatcher, HybridBatchGroup SRP 최적화 Draw 구조이다! 

 - Hybrid Batch Group 내에 숨긴 오브젝트가 렌더링 대상에서 제외되었는지 확인할 수 있다.

 - Hybrid Batch Group이 증가하고 Draw Mesh 수가 줄었다면 → 최적화 성공

 - InstanceOcclusionTest가 존재하면 → GPU 오클루전 컬링이 작동 중임

 

 

이번 글에서는 Unity 6 URP에서 새롭게 강화된 GPU 기반 렌더링 최적화 기법
(GPU Resident Drawer와 GPU Occlusion Culling)을 설정하고 적용 여부를 검증하는 방법까지 정리해봤습니다.

 

다음 포스트에서는 Render Graph 구조와 최적화 설정에 대해 다뤄보겠습니다!

 

반응형