컬링 (Culling) 이란?
드로우콜을 줄이기 위해서는 렌더링할 오브젝트의 수를 줄이면 된다. 주로 사용하는 방법은 눈에 보이지 않는 오브젝트를 제외함으로써 렌더링할 오브젝트의 수를 줄이는 것인데, 이처럼 렌더링이 필요하지 않은 오브젝트들을 추려 내는 것을 컬링(Culling)이라 한다. 게임 캐릭터의 시야 영역 밖에 있는 객체들을 렌더링하지 않고 제외하는 기술이다. 화면에 표시되지 않는 부분의 객체들을 처리하기 위한 비용을 아낌으로써 성능을 향상시키는 데 도움이 된다.
컬링의 종류는?
프러스텀(Frustum) 컬링 = 절두체 컬링
대부분의 게임 엔진은 카메라의 뷰 프러스텀(절두체)으로 컬링을 수행한다. 절두체의 사다리꼴 영역 안에 들어오거나 걸친 오브젝트만 눈에 보이게 되는데, 이 영역을 완전히 벗어난 오브젝트들은 렌더링 대상에서 제외시킨다. (유니티의 경우 엔진에서 자동적으로 수행한다.)
프러스텀 컬링은 컴퓨터 그래픽과 게임 개발에서 씬의 오브젝트가 카메라 뷰 프러스텀(카메라에 보이는 공간의 일부)의 안쪽인지 바깥쪽인지 결정하는 데 사용되는 기법이다. 이 기술은 카메라에 실제로 보이는 오브젝트만 렌더링하고 프러스텀 외부에 있는 오브젝트는 버림으로써 렌더링을 최적화하는 데 사용된다.
프러스텀 컬링은 특히 오브젝트 수가 많거나 지오메트리가 복잡한 씬에서 렌더링 성능을 크게 향상시킬 수 있다. 렌더링 파이프라인에서 보이지 않는 오브젝트를 제거하면 그래픽 카드에 필요한 작업량을 크게 줄일 수 있으므로 프레임 속도가 향상되고 사용자 경험이 더 부드럽고 반응성이 높아진다.
(유의점)
하지만 프러스텀 컬링은 씬의 각 오브젝트를 프러스텀과 비교하여 확인해야 하므로 약간의 오버헤드가 발생한다는 점에 유의해야한다. 따라서 프러스텀 컬링의 이점과 컬링 자체에 드는 비용의 균형을 맞추고, 프러스텀 컬링과 함께 다른 최적화 기법을 사용하여 최상의 결과를 얻는 것이 중요하다.
자유 시점 카메라에서는 카메라의 위치에 따라 렌더링 되는 오브젝트의 갯수가 크게 차이날 수 있다. 이런 경우 프러스텀 컬링에서 Far Clipping Plane을 더욱 가깝게 잡아줄 수 있는데, 이 때 시점에 따라 어느 순간 오브젝트가 사라진다면 이상하게 보일 수 있다. 이런 시점 문제 때문에 모바일 게임에서는 자유 시점보다는 시점을 탑뷰나 쿼터뷰로 고정시키기도 한다.
오클루전(Occlusion) 컬링
오클루전 컬링(Occlusion Culling)은 다른 오브젝트에 가려(오클루전된) 카메라에 보이지 않는 오브젝트의 렌더링을 비활성화하는 기능이다. 3D 컴퓨터 그래픽에서는 대부분의 경우 카메라에서 먼 오브젝트가 먼저 그려지고 더 가까이 있는 오브젝트를 차례차례 덮어서 쓴다(오버드로우).
오클루전 컬링은 프러스텀 컬링(절두체 컬링)과는 다르다. 프러스텀 컬링은 카메라의 표시 영역에서 벗어난 오브젝트의 렌더러를 비활성화하지만 오버드로우에 의해 안 보이게 된 것을 비활성화하지 않기 때문이다.
오클루전 컬링에서는 가상의 카메라가 씬을 지나가며 나중에 그려지는 오브젝트를 모아 계층 구조를 구축한다.
이 데이터는 각 카메라가 어떤 것을 볼 수 있고 없는지 구분하는데 사용한다. 이 정보를 이용해 유니티는 해당 씬에서 객체가 볼 수 있는 오브젝트만 선별해 렌더링에 전송한다. 이를 이용해 드로우콜 횟수를 줄여 게임 성능을 향상시킨다.
오클루전 컬링의 데이터는 셀로 이루어져 있다. 각 셀은 씬의 전체 바운딩 볼륨의 하위 분할이다.
셀은 이진 트리를 형성하는데, 하나는 정적 오브젝트 (view cells) 이고 다른 하나는 동적 오브젝트 (target cells) 이다.
오클루전 컬링은 다른 오브젝트에 의해 숨겨진 오브젝트를 걸러낸다.
이 때 오브젝트들은 오클루더(Occluder) 와 오클루디(Occludee)로 나뉜다.
오클루더 : 다른 오브젝트를 가리는 역할. 사전 연산을 걸쳐서 데이터를 미리 Bake 해놓는다. 따라서 Static 오브젝트이다.오클루디 : 오클루더에 의해 가려지는 오브젝트.
오클루전 컬링을 할 때는 공간을 일정 간격의 셀로 나눠놓는다. 이는 오클루더가 가리는 영역의 해상도와 관련이 있다.
셀의 크기가 작을수록 정확도(해상도)가 높고 오버헤드가 크다.
오클루전 컬링에는 주의할 점이 있는데 오브젝트끼리 가려지는 경우가 많지 않은 경우에는 오브젝트를 가림으로써 얻는 이득보다 오클루전 컬링 연산에 드는 비용이 더 클 수 있다.
공부자료 : https://docs.unity3d.com/kr/530/Manual/OcclusionCulling.html
'게임 개발 일지 > 내일배움캠프 TIL' 카테고리의 다른 글
[C#] 프로그래머스/삼총사 (0) | 2024.02.23 |
---|---|
[Unity] Scene이 여러 개인 게임의 SoundManager (0) | 2024.02.22 |
[C#] Update 주의사항 / Time.deltaTime 사용법 (0) | 2024.02.20 |
[Unity] 렌더링 파이프라인 (0) | 2024.02.20 |
[Unity] MonoBehaviour 메서드 (0) | 2024.02.16 |
댓글