이론/그래픽스

컬링(Culling)

tsyang 2021. 12. 14. 01:28

컬링

드로우콜을 줄이기 위해서는 애초에 적은 수의 오브젝트를 렌더링 하면 된다. 이 때 눈에 보이지 않는 오브젝트를 제외함으로써 렌더링할 오브젝트의 수를 줄일 수 있는데, 이처럼 렌더링이 필요하지 않은 오브젝트들을 추려 내는 것을 컬링(Culling)이라 한다.

 


프러스텀(Frustum) 컬링

대부분의 게임 엔진은 카메라의 뷰 프러스텀(절두체)로 컬링을 수행한다. 

 

https://docs.unity3d.com/kr/530/Manual/UnderstandingFrustum.html

즉 저 사다리꼴 영역 안에 들어오거나 걸친 오브젝트만 눈에 보이게 되는데, 이 영역을 완전히 벗어난 오브젝트들은 렌더링 대상에서 제외시키는 것이다. (유니티의 경우 엔진에서 자동적으로 수행)

 

자유 시점 카메라에서는 카메라의 위치에 따라 렌더링 되는 오브젝트의 갯수가 크게 차이날 수 있다. 이런 경우 프러스텀 컬링에서 Far Clipping Plane을 더욱 가깝게 잡아줄 수 있는데 이 때 시점에 따라 어느 순간 오브젝트가 사라진다면 이상하게 보일 수 있다. 이런 경우 안개(Fog)를 추가하여 오브젝트가 자연스럽게 사라지게 하는 트릭을 쓸 수 있다.

 

이런 시점 문제 때문에 모바일 게임에서는 자유 시점보다는 시점을 탑뷰나 쿼터뷰로 고정시키기도 한다.

 

 


오클루전(Occlusion) 컬링

 

오클루전 컬링은 다른 오브젝트에 의해 숨겨진 오브젝트를 걸러낸다. 이 때 오브젝트들은 오클루더(Occluder)오클루디(Occludee)로 나뉜다.

 

  • 오클루더 : 다른 오브젝트를 가리는 역할. 사전 연산을 걸쳐서 데이터를 미리 Bake 해놓는다. 따라서 Static 오브젝트이다.
  • 오클루디 : 오클루더에 의해 가려지는 오브젝트.

오클루전 컬링을 할 때는 공간을 일정 간격의 로 나눠놓는다. 이는 오클루더가 가리는 영역의 해상도와 관련이 있다. 당연히 셀의 크기가 작을수록 정확도(해상도)가 높고 오버헤드가 크다.

 

오클루전 컬링에는 주의할 점이 있는데 야외 씬 같이 오브젝트끼리 가려지는 경우가 많지 않은 경우에는 오브젝트를 가림으로써 얻는 이득보다 오클루전 컬링 연산에 드는 비용이 더 클 수 있다.

 


LOD(Level Of Detail)

 

LOD를 통한 컬링도 가능하다. LOD를 이용해서 메시의 버텍스 갯수를 점점 줄이다가 오브젝트를 Culled되게 만들 수 있다. 

 


 

'이론 > 그래픽스' 카테고리의 다른 글

(기초) 포워드 VS 디퍼드 렌더링  (1) 2022.07.13
텍스처  (0) 2022.01.22
배칭(Batching)  (2) 2021.11.15
드로우콜(Draw Call)  (3) 2021.11.13
병목(Bottleneck)  (0) 2021.11.03