유니티 이보다 완벽한 컬링(Culling)시스템은 없다! #Perfect Culling - Occlusion Culling System

이 에셋을 사용하기 위해서는 컬링에 대해서도 알고 계셔야 하며, 유니티에 기본 내장된 Occlusion Culling System에 대해서도 어느 정도 알고 계셔야! 이 에셋의 좋은 점을 더 이해하기 쉽습니다.

 

 

Occlusion Culling에 대하여 아주 쉽게 설명해보기

Occlusion Culling이란? Occlusion Culling은 컬링 기법중 하나이며, 드로우콜을 줄이기 위해 눈에 보이지 않는 오브젝트들을 렌더링 하지 않는 것을 뜻합니다! 위 사진처럼 플레이어의 시야각에 벗어나

wlsdn629.tistory.com

 

Unity Occlusion Culling 사용해보기 #1 / 약간의 Shader 개념(MVP)

설명에 앞서 셰이더 개념에 대해 굉장히 설명을 잘해준(? 솔직히 그냥 내가 올리고 싶었기 때문) 사진이 있어서 가져와봤다 오브젝트의 트랜스폼이 움직인다는 것은 Mesh가 움직이는게 아닌 곧 Ve

wlsdn629.tistory.com

 

유니티에 기본적으로 내장된 (Umbra) Culling System은 사실 문제가 있다는 거... 알고 계시나요?

음...예를 들면 정확히 Culling이 되지 않는다?라는 문제가 있죠! 아래 영상을 보면 쉽게 이해가 되실 겁니다.

비교 영상

 

영상을 보시면 아시겠지만, Perfect Culling은 유니티 기존 내장된 Umbra보다 더 정확한 Culling 계산을 보여줍니다.

 

Perfect Culling에 대해 알아보러 가시죠!


Perfect Culling이란?

🌟 완벽한 오클루전 컬링 시스템 🌟

 

여러분의 프로젝트를 더욱 효율적으로 최적화 하고 싶으신가요? Perfect Culling을 이용하여 프로젝트 최적화를 해주세요! Perfect Culling는 프리팹과 씬에 대한 Pixel Occlusion Data를 구울 수 있게 해줍니다. Perfect Culling을 이용하여 게임의 성능을 향상시키고, 렌더링 시간을 줄여보세요. Perfect Culling을 사용한다면 런타임에서의 성능 오버헤드가 없답니다?!

 

주요 특징:

  • LOD 지원
  • 투명도 지원
  • 내장 및 URP/HDRP 호환
  • VR 호환 (멀티뷰, 싱글 패스 인스턴스, 멀티패스 등)
  • 매우 높은 성능
  • 동적으로 생성되는 프리팹에 대한 베이킹 지원
  • 다중 카메라 지원
  • 모든 플랫폼 지원 (모바일 및 VR 포함)

 

 


Perfect Culling 사용 방법

이 에셋을 사용하기 위한 최소 조건 3가지만 기억해주세요!

 

  1. Perfect Culling Volume
  2. Perfect Culling Camera
  3. Exclude Floating Sampling Provider / Exclude Below Collider Array Sampling Provider (ㅋㅋ2개지만 하나로 봐주이소..)

 

Perfect Culling Volume

Perfect Culling Volume

 

Perfect Culling Volume 컴포넌트를 추가하면 우측 사진처럼 파란색 Volume이 생깁니다. 이 Volume을 조절해서 Culling될 오브젝트들을 감싸주세요! Volume의 사이즈는 크면 클수록 Bake되는 시간도 오래걸리고 리소스도 잡아먹게 되니 꼭 "알맞은" 사이즈로 감사주세요.


Camera Out of Bounds Behaviour

카메라가 Volume을 벗어날 때 취하는 행동입니다.

옵션  설명
ClampToNearestCell 카메라가 볼륨을 벗어나면 가장 가까운 셀에 고정됩니다. 
Cull 카메라가 볼륨을 벗어나면 Volume이 숨겨집니다. 
IgnoreDoNothing 카메라가 볼륨을 벗어날 때 아무런 조치도 취하지 않습니다. 

 

Attempt to find non-empty cell

이 변수를 활성화 하면 빈 셀을 만났을 때 빈 셀을 찾는 것을 시도할지를 나타냅니다. 


Attempt to find non-empty cell

emptyCellCullBehaviour 변수는 빈 셀을 만났을 때 어떻게 처리할지를 나타냅니다. 

Value  설명
CullEverything 빈 셀이 발견되면 해당 영역의 모든 것을 숨깁니다.
MakeEverythingVisible 빈 셀이 발견되는 경우에도 모든 내용이 표시됩니다.

Volume Size / Cell Size

Volume Size / Cell Size

 

Volume Size는 위 사진에서 보이는 파란색 Volume 영역입니다.

Cell Size는 위 사진에서 보이는 노란색 테두리 영역입니다.


 

Merge-Downsample-Iterations

이 변수는 셀을 병합하는 횟수를 설정하는 것입니다. 범위는 0에서 8까지이며, 0이면 셀을 병합하지 않습니다. 이 변수가 1이면 셀을 한 번 병합하고, 2이면 셀을 두 번 병합하고, 8이면 셀을 여덟 번 병합합니다. 이렇게 셀을 병합하면 셀의 수를 줄일 수 있으며, 이는 메모리 사용량을 줄이는 데 도움이 됩니다.

 

이 옵션을 적절히 사용하면 팝핑 문제도 방지할 수 있습니다!


Manage Bake Groups

Manage Bake Groups

 

현재 Culling될 목록들을 리스트로 볼 수 있는 윈도우 창 (버튼) 입니다.

 


Open Renderer Selection Tool

Open Renderer Selection Tool

 

이 Tool을 이용하여 리스트에 Culling될 객체들을 추가할 수 있습니다.


Bake

위 세팅들을 다하고 Bake만 누르면 끝납니다!

 


Perfect Culling Camera

Occlusion Culling 해제! / 컴포넌트 추가

 

위와 같이 세팅을 해줍니다!

 

Include Neighbor Cell Radius

IncludeCellNeighborRadius 변수는 인접한 셀을 고려하여 팝핑 문제를 방지하는 것을 조절하는 수치입니다. 변수가 0이면 인접한 셀을 고려하지 않고, 변수가 1이면 인접한 셀을 고려합니다. 이렇게 하면 팝핑 문제를 방지할 수 있습니다. 이 변수는 미세한 성능 영향을 줄 수 있습니다.

 

앞서 언급한 Merge-Downsample-Iterations과 함께 사용하면 됩니다!


Exclude Floating Sampling Provider / Exclude Below Collider Array Sampling Provider

(좌) 컴포넌트 X / Exclude Below Collider Array Sampling Provider / (우) 컴포넌트 O

 

Cell을 Bake할 때 특정 콜라이더 아래를 Bake하지 않을 때 사용하는 컴포넌트입니다.

 

(좌) Distance - 5 / Exclude Floating Sampling Provider / (우) Distance - 7

 

지면으로부터 Cell의 영역을 제외할 때 사용되는 컴포넌트입니다.

 


결과

(좌) Culling X / (우) Culling O

 

와우! Batch와 FPS차이가 확연히 보이시죠?!

 

이래도 사용하지 않을 것인가요?!!!!!

 


구매 링크

 

이 글은 어필리에이트 링크를 포함하고 있습니다. 

위 링크를 클릭하셔서 애셋을 구매하시면 저에게 수수료가 제공됩니다.
링크를 클릭하는 것으로는 수익이 발생하지 않습니다!
감사합니다!