GPU Occlusion Culling이란?
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
'프로그래밍 > Unity' 카테고리의 다른 글
Unity R3 라이브러리 import(설치) 방법 (0) | 2025.03.31 |
---|---|
BatchRendererGroup(BRG) (0) | 2025.03.29 |
Unity 6 GPU Resident Drawer란? (0) | 2025.03.29 |
Unity 6 STP(Spatial-Temporal Post-processing)란? (0) | 2025.03.29 |
Photon PUN (Photon Unity Networking) (0) | 2025.03.25 |