Culling (최적화)

LemongO·2024년 5월 8일
0

📌컬링(Culling)이란?

카메라에 보이지 않는 것은 그리지 않는다.

1. 프러스텀 컬링 (Frustum Culling)

기본적으로 유니티 엔진 자체에서 프러스텀(Frustum) 컬링으로 카메라에 잡히지 않는 물체는 그리지 않아 드로우 콜이 발생하지 않는다.

  • [사진 1] Batches = 15
  • [사진 3] Batches = 134

위 예시와 같이 씬 뷰에서 모든 오브젝트들이 다 보이지만 뷰 프러스텀(View Frustum) 내에 들어오지 않은 물체들은 그리지 않아
사진1의 Batches가 훨씬 작은 것을 알 수 있다.

2. 오클루전 컬링 (Occlusion Culling)

하지만 다음 그림과 같이 A 물체 뒤에 가려지는 B 물체는 게임 뷰에서 보이지는 않지만
뷰 프러스텀 내에 들어와 있다면 드로우 콜이 발생한다.

  • [사진 5] Batches = 94
  • [사진 7] Batches = 95

위와같이 가려져 있더라도 뷰 프러스텀 내에 들어오는 오브젝트들은 모두 드로우 콜이 발생한다.
비교를 위해 [사진 7]의 상황에서 큐브 오브젝트를 비활성화 해보았다.

  • [사진 9] Batches = 49

확실하게 줄어든 모습을 보아 카메라에 잡히지 않아도 드로우 콜이 발생한다는 사실을 알 수 있다.

이렇게 카메라에 잡히지 않는 오브젝트의 렌더링을 피하는 최적화 기법으로 오클루전 컬링(Occlusion Culling) 을 사용하는데
방법은 다음과 같다.

📌 Map과 같은 정적인 오브젝트에 Occulder 및 Occuldee Static 체크를 한다.

📌 Occulsion 윈도우를 열고 Bake를 한다.

  • Smallest Occluder : 다른 오브젝트를 가리는 가장 작은 오브젝트의 크기
  • Smallest Hole : 카메라가 들여다 볼 수 있는 가장 작은 간격

위 프로퍼티들은 매직넘버를 찾아야 한다고 한다.

Unity Document : 오클루전 컬링 URL

📌 컬링 대상 오브젝트의 Dynamic Occlusion 항목을 체크한다.

Cube의 Mesh Renderer - Dynamic Occlusion 체크박스를 체크한다.

  • 기본값은 체크되어있는 상태다.

🔍 변화를 확인해보자.

Batches가 25로 절반 가까이 더 줄었다. Cube 오브젝트 뿐만 아니라 이전에 렌더링 중이던 벽면등도 함께 컬링이 되었기 때문이다.

다만 평야와 같은 실외 맵에서 사용하면 오히려 연산비용이 증가하니 실내 맵에서만 사용하는 것을 권장하고 있다.

[유니티 TIPS] 알쓸유잡 | 카메라와 컬링 완벽 이해 URL

profile
비전공자의 Unity 성장기

0개의 댓글

관련 채용 정보