본문 바로가기
프로그래밍/Unity

Unity 6 GPU Occlusion Culling

by argentdarae 2025. 3. 29.
반응형

GPU Occlusion Culling이란?

출처: https://discussions.unity.com/t/unity-gpu-occlusion-culling-texture-flickering/1566274

 

GPU Occlusion Culling은 Unity가 GPU를 활용해 가려진 객체들을 렌더링 대상에서 제외하는 기법이다

기존의 CPU 기반 오클루전 컬링보다 빠르고 병렬성이 높아 대규모 씬 최적화에 매우 유리하다

 

작동 원리

1. Depth Texture 생성 (이전 + 현재 프레임)

  • Unity는 현재 프레임과 이전 프레임의 뷰에서 생성된 Depth Texture를 이용한다
  • 이 뎁스 텍스처는 카메라 및 라이트의 시점에서 생성돼 객체의 거리와 가림 정보를 기록한다

2. Double Depth Pass 방식

  • 첫 번째 패스: CPU 컬링을 통과한 인스턴스를 이전 프레임의 depth와 비교.
  • 두 번째 패스: 이전 패스에서 가려졌다고 판단된 인스턴스를 새로 생성된 depth pyramid와 비교해 진짜 가려졌는지 재확인
  • 즉, 둘 중 하나에서 보였다면 해당 객체는 렌더링 된다 (안정성과 시각적 오류 방지를 위해)

3. Compute Shader로 컬링 수행

  • 객체별 가시성 정보를 GPU 버퍼에 저장
  • CPU는 이 결과를 기반으로 간접 드로우(Indirect Draw)만 수행

 

효과가 큰 경우

동일한 메쉬를 공유하는 객체가 많은 경우 → GPU Resident Drawer와 함께 드로우 콜 병합 가능

고버텍스 메쉬, 복잡한 쉐이더 연산이 많은 씬 → 가려진 객체의 삼각형을 미리 걸러내어 래스터라이징 비용 절감

 

즉, 작은 오브젝트가 많이 존재하는 환경 (예: 숲, 군중, 파티클)에 큰 효과를 볼 수 있다

 

유의 사항

GPU Occlusion Culling은 드로우 콜 수를 줄이지는 않음 → 셰이더 바인딩이나 머티리얼 세팅 등은 여전히 필요하다

삼각형/버텍스 수를 줄이는 데 초점을 둠 → 텍스처링, 라이팅, 포스트 프로세싱이 병목일 경우 효과 적다

Depth Pre-Pass와 함께 사용할 때 → 대부분의 장면에서는 성능 향상이 소폭일 수 있다  (1~3%)

 

CPU 컬링과의 비교

항목 CPU Occlusion Culling GPU Occlusion Culling
드로우콜 횟수 감소 가능 불가능
컬링 계산 위치 CPU GPU
래스터화 삼각형 감소 제한적 매우 효과적
병렬성 낮음 높음
고버텍스 오브젝트 비효율적 매우 효과적

 

CPU 컬링은 셰이더 셋업과 드로우 콜 자체를 줄일 수 있고, GPU 컬링은 실제 픽셀 단위의 처리를 줄이는 데 초점을 둔다

 

결론

 

  • GPU Occlusion Culling은 대규모 오브젝트가 많은 씬에서 GPU 부하를 줄이는 데 효과적이다
  • 하지만 셰이더 셋업, 텍스처 처리, 라이팅 등 CPU·GPU의 렌더 파이프라인 후반 병목에는 효과가 작다
  • 오히려 Depth Pre-pass로 대부분 커버 가능한 경우에는 기대 대비 낮은 향상을 보일 수 있다
  • CPU Occlusion Culling은 여전히 드로우 콜 자체를 줄일 수 있는 유일한 방법이므로, GPU Occlusion과 함께 병행 적용하는 전략이 필요하다

 


Reference

Unity 6 Fantasy Kingdom으로 알아보는 4가지 그래픽스 신기능 - Youtube

Enable GPU occlusion culling in URP - Unity Doc

GPU Dynamic Upload Culling - Unity Forum