SSUNBORI Archive

3d Generalist를 꿈꾸는 Modeler ssunbori 입니다. 생성형 ai, 모델링 툴, 게임 엔진을 주로 공부하고 있습니다.

Artstation 자세히보기

UNITY/BLENDER-UNITY

[최적화] Occlusion Culling 하는 방법, 이유

ssunbori 2023. 4. 23. 12:13

목차

     

    개념

    occlusion Culling은 컴퓨터 그래픽 및 비디오 게임 개발에서 렌더링해야 하는 오브젝트의 수를 줄여 렌더링 성능을 개선하는 데 사용되는 기술입니다. 다른 오브젝트에 의해 가려져서 카메라에 보이지 않는 오브젝트의 렌더링을 비활성화하는 것이 바로 Occlusion Culling입니다 .

    이 방식을 사용하는 이유

    Occlusion Culling이 필요한 이유는 렌더링 과정에서 오버드로우(overdraw)라는 현상을 방지하기 위해서입니다. 오버드로우란 카메라에서 가장 먼 오브젝트가 먼저 그려지고 가까운 오브젝트는 그 위에 그려지는 것으로, 결국 카메라에 보이지 않는 오브젝트까지 불필요하게 렌더링하는 것을 말합니다 . 이렇게 되면 CPU와 GPU의 시간과 자원을 낭비하게 되므로, Occlusion Culling을 통해 보이지 않는 오브젝트를 컬링(culling)하여 렌더링 작업을 줄이는 것이 효율적입니다.

    Occlusion Culling을 실질적으로 사용하는 예시로는 Unity 엔진이 있습니다. Unity 엔진은 Umbra 라이브러리를 사용하여 Occlusion Culling을 수행합니다. Unity에서 Occlusion Culling을 사용하려면 씬(scene)에 대한 데이터를 생성(bake)한 후, 런타임 시점에 해당 데이터를 사용하여 카메라가 볼 수 있는 요소를 결정합니다. Unity에서 Occlusion Culling을 적용하고자 하는 모든 씬 오브젝트는 인스펙터(Inspector)에서 Occluder Static과 Occludee Static으로 체크해야 합니다. Occluder Static은 다른 오브젝트를 가릴 수 있는 정적(static) 오브젝트를 의미하고, Occludee Static은 가려질 수 있는 정적 오브젝트를 의미합니다.

    3D 모델링을 하는 디자이너의 입장에서 Occlusion Culling이 필요한 이유는 다음과 같습니다.

    1. 첫째, Occlusion Culling을 통해 렌더링 성능을 향상시켜 게임의 프레임 속도(frame rate)와 반응 속도(response time)를 개선할 수 있습니다. 이는 게임의 품질과 사용자 경험에 직결되므로 중요한 요소입니다.
    2. 둘째, Occlusion Culling을 통해 메모리 사용량을 줄일 수 있습니다. 메모리에 로드되는 데이터의 양이 줄어들면 메모리 부족 문제(memory leak)나 메모리 관리 문제(memory management)를 방지할 수 있습니다.
    3. 셋째, Occlusion Culling을 통해 디자인의 자유도를 높일 수 있습니다. 복잡하고 다양한 지형과 건물, 가구 등의 요소를 씬에 배치할 수 있으며, 이들이 카메라에 보이지 않으면 자동으로 컬링되므로 디자인에 제약을 받지 않고 다양한 오브젝트를 배치할 수 있습니다.

    모델링 시 Occlusion Culling을 위해 고려할 것

    이런 식으로 카메라 뷰에 잡히는 오브젝트들이 렌더가 되는데, 모델링의 사이즈가 크면 오브젝트의 일부분만 쳐다보고 있을 때에도 전체 오브젝트를 렌더해야 하기때문에 리소스를 많이 사용하게 됩니다. 따라서

    • 한눈에 들어오지 않는 큰 덩어리의 메쉬는 작은 부분들로 모델링을 잘라준다.
    • 작은 오브젝트를 array, mirror로 만들었을 경우, 하나씩 분리해준다.

    큰 덩어리의 오브젝트를 작은 부분들로 잘라준 모습
    Mirror, Array로 만든 프롭도 하나하나 분리해준다.

    이렇게 생각하면서 모델링을 하면 이후 최적화할때 효율적으로 프로세스를 진행할 수 있습니다.