렌더링 부하를 줄이는 다양한 컬링에 대해 알아보고 일인칭 시점에 렌더링 부하를 획기적으로 줄일 수 있는 오클루전 컬링 기능에 대해 소개한다.

Occlusion : 한물체가 다른 물체를 가리는 것 (한물체에 다른물체가 가려져 안보이는 것)

Culling : 도태시킨다(제거한다)

간단하게 정리하면 가려져 안보이는 물체는 렌더링 하지 않는 기법이다.

 

컬링방식은 다음과 같은 방법들이 있다.

프러스텀컬링,  거리비례에 의한 컬링, 오클루전 컬링

 

프러스텀컬링

절두체 컬링이라고도 하는데 카메라 시야 범위내의 물체만 렌더링하는 기법이다. 유니티에서 Main Camer 인스펙터뷰의 Field of view로 촬영범위를 조절할 수 있다.  

촬용범위 내에서도 Clipping Planes Near와 Clipping Planes Far를 조정해 일정거리 이내와 이상은 컬링할수 있다.

 위에 창에서 Far를 10으로 조정해보면 카메라의 절두체가 짤리면서 벽쪽이 보이지 않게 된다.

거리 비례에 의한 컬링

Player의 인스펙터뷰에 LOD Group 컴포넌트를 보면 10%미만은 Culled 되어 있다. 거리비례에 따라 해상도가 다른 모델을 사용하다가 10%미만에서는 렌더링 하지 않겠다는 뜻이다.

오클루전 컬링

가려진 물체는 렌더링 하지 않는 기능이다. 가려지는 장면이 별로 없는 스테이지에서는 괜히 부하만 증가시키는 역효과도 있다. 1인칭 시점 게임같이 장애물이 많은 게임에서 효과적이다.

MENU>Windows>Rendering>Occlusion Culling을 선택해 오클루젼뷰에서 Bake탭을 선택한후   Bake하면 기능이 실행된다.

 

오클루전 컬링 (유니티매뉴얼)

오클루전 컬링은 Unity가 다른 게임 오브젝트에 의해 뷰에서 완전히 가려진(오클루전된) 게임 오브젝트에 대한 렌더링 계산을 수행하지 못하도록 하는 프로세스입니다.

프레임마다 카메라는 씬의 렌더러를 검사한 후 그릴 필요가 없는 렌더러를 제외(컬링)합니다. 기본적으로 카메라는 절두체 컬링을 수행하여 카메라의 뷰 절두체에 속하지 않는 모든 렌더러를 제외합니다. 하지만 절두체 컬링은 렌더러가 다른 게임 오브젝트에 의해 가려지는지를 확인하지 않으므로, Unity가 최종 프레임에 표시되지 않는 렌더러에 대한 렌더링 작업에 CPU 및 GPU 시간을 여전히 낭비할 수 있습니다. 오클루전 컬링은 Unity가 이러한 낭비되는 작업을 수행하지 못하도록 방지합니다.

일반 절두체 컬링은 카메라 뷰 내의 모든 렌더러를 렌더링합니다.

오클루전 컬링은 더 가까운 렌더러에 의해 완전히 가려진 렌더러를 제거합니다.

오클루전 컬링을 사용하는 시기

오클루전 컬링이 프로젝트의 런타임 성능을 향상하는지 판단하려면 다음을 고려하십시오.

  • 낭비되는 렌더링 작업을 방지하면 CPU 및 GPU 시간을 모두 절약할 수 있습니다. Unity의 빌트인 오클루전 컬링은 CPU에서 런타임 계산을 수행하므로 절약되는 CPU 시간을 오프셋할 수 있습니다. 따라서 오클루전 컬링을 사용하면 오버드로우로 인해 프로젝트가 GPU 바운드일 때 성능이 향상될 가능성이 매우 높습니다.
  • Unity는 런타임 시점에 오클루전 컬링 데이터를 메모리에 로드합니다. 이 데이터를 로드할 만큼 충분한 메모리가 있는지 확인해야 합니다.
  • 오클루전 컬링은 작고 윤곽이 또렷한 영역이 견고한 게임 오브젝트에 의해 서로 명확하게 분리된 씬에서 가장 잘 작동합니다. 일반적인 예로는 복도로 연결된 방을 들 수 있습니다.
  • 오클루전 컬링을 사용하여 동적 게임 오브젝트를 가릴 수 있지만, 동적 게임 오브젝트는 다른 게임 오브젝트를 가릴 수 없습니다. 프로젝트가 런타임 시점에 씬 지오메트리를 생성하는 경우에는 Unity의 빌트인 오클루전 컬링이 프로젝트에 적합하지 않습니다.

오클루전 컬링의 작동 방식

오클루전 컬링은 Unity 에디터에서 씬에 대한 데이터를 생성한 후 런타임 시점에 해당 데이터를 사용하여 카메라가 볼 수 있는 요소를 결정합니다. 이러한 데이터 생성 프로세스를 베이크라고합니다.

오클루전 컬링 데이터를 베이크하면 Unity는 씬을 셀로 나누고 셀 내 지오메트리와 인접 셀 간의 가시성을 설명하는 데이터를 생성합니다. 그런 다음 Unity는 생성된 데이터의 크기를 줄이기 위해 가능한 경우 셀을 병합합니다. 베이크 프로세스를 설정하려면 오클루전 컬링 창에서 파라미터를 변경하고, 씬에서 오클루전 영역을 사용하십시오.

런타임 시점에 Unity가 베이크된 데이터를 메모리에 로드하고, Occlusion Culling 프로퍼티가 활성화된 각 카메라에 대해 해당 데이터에 대한 쿼리를 수행하여 카메라가 볼 수 있는 요소를 결정합니다. 오클루전 컬링이 활성화되면 카메라는 절두체 컬링과 오클루전 컬링을 둘 다 수행합니다.

+ Recent posts