"컬링(Culling)"
개발을 하다보면 씬에 오브젝트가 늘어날수록 FPS(초당 프레임 수)가 급격히 떨어질 때가 온다.
특히 Unity에서는 렌더러(Renderer)가 많아질수록 CPU(컬링/드로우콜 준비)와 GPU(그리기) 모두 부담이 커지는데,
이때 가장 기본이 되는 전략이 바로 "컬링(Culling)"이다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1)컬링이 중요한 이유
Unity를 예시로 들자면,
Unity는 매 프레임 카메라가 무엇을 그릴지 판단한다.
기본적으로 카메라는 프러스텀(시야) 컬링을 수행해서 카메라 시야 밖 렌더러를 제외한다.
하지만 시야 안에 있어도 벽 뒤에 가려진 오브젝트까지 계속 렌더링 계산을 하면 CPU/GPU가 낭비될 수 있고,
이를 줄이는 방식이 오클루전(가림) 컬링이다.
오늘은 Unity에서 사용되는 컬링의 종류 4가지에 대해서 알아 볼 예정이다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
2) Unity 컬링의 종류

(1) 프러스텀(Frustum) 컬링
카메라가 보는 시야 영역(프러스텀) 밖에 있는 렌더링 하지 않는 방

기본적으로 카메라가 수행하며,
비용 대비 효과가 큰 것이 장점이다.
(반대로, 시야 안이지만 가려진 것은 걸러내지 못함)
(2) 오클루전(Occlusion) 컬링
다른 오브젝트들에 가려진 오브젝트들은 렌더링 하지 않는 방식

Unity의 기본 오클루전 컬링은
에디터에서 가시성 데이터를 베이크(bake) 해두고,
런타임에 그 데이터를 조회하는 방식이다.
또한 오클루전이 켜져도 프러스텀 컬링은 함께 수행된다.
방/복도처럼 작은 구역이 벽으로 분리된 구조에서 효과가 크고,
프로젝트가 오버드로우로 GPU 바운드일 때 체감이 크다.
사용시 주의사항
기본 오클루전 컬링은 런타임 CPU 계산 비용이 들어가며, 상황에 따라 이 비용이 이득을 상쇄할 수 있다.
베이크 데이터는 메모리를 사용하므로 메모리 여유를 고려해야 한다.
동적 오브젝트는 “가리는 역할(occluder)”을 못 한다는 제약이 있다.
런타임에 지오메트리를 생성하는 유형의 프로젝트에는 기본 오클루전 컬링이 부적합할 수 있다.
(URP/HDRP에서는 상황에 따라 GPU 오클루전 컬링 옵션을 고려할 수도 있음)
(3) 거리/레이어 컬링
카메라와의 거리에 따라,
특정 레이어의 오브젝트를 설정한 거리 밖에서는 렌더링하지 않도록 제외하는 방식
작은 바위, 풀, 파편 같은 오브젝트는 멀리서 보이지도 않는데 멀리까지 그리면 낭비이다.
Unity는 레이어별 컬링 거리를 설정할 수 있는데,
대표적으로 Camera.layerCullDistances가 있다.

특정 Layer는 farClipPlane보다 더 가까운 거리에서 렌더링을 끊는다.
(길이 32짜리 float 배열(레이어 수)로 지정하며, 0은 far plane을 의미)
(4) LOD(Level of Detail)
카메라와의 거리(또는 화면상 크기)에 따라 더 낮은/높은 디테일의 메시를 선택해 렌더링 비용을 줄이는 방식
멀리 있는 오브젝트를 같은 삼각형 수로 렌더링하면 GPU 낭비가 발생할 수 있는데,
LOD는 거리(또는 화면상 크기)에 따라 더 단순한 메시로 교체해 렌더링 부담을 줄인다.
Unity는 LOD Group을 통해 LOD 레벨을 구성할 수 있다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
3) 언제 어떤 컬링을 쓰면 좋을까?
프러스텀 컬링:
기본(always on)이라고 생각하면 된다.
오클루전 컬링:
방/복도/실내 구조처럼 가림이 명확한 구조에서 매우 강력하다.
(단, 베이크 데이터 메모리 + 런타임 CPU 비용을 반드시 고려)
거리/레이어 컬링:
작은 오브젝트가 많을 때 빨리 끊는 용도로 효율적이다.
LOD:
멀리 있는 큰 오브젝트가 많을 때 GPU 비용 절감에 효과적이다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
6) 오늘의 한 줄 요약
『 컬링은 카메라 관점에서 보이지 않거나 불필요한 렌더링을 제외해 성능을 확보하는 최적화 기법이다. 』
'1일 1 cs' 카테고리의 다른 글
| 11. GC(Garbage Collector) 란? (0) | 2026.01.26 |
|---|---|
| 10. 애니메이션(Animation)과 애니메이터(Animator)란? (0) | 2026.01.25 |
| 8. 코루틴(Coroutine)이란? (0) | 2026.01.23 |
| 7. 대리자(delegate)와 event란? (0) | 2026.01.22 |
| 6. Unity의 생명주기(Life Cycle)란? (0) | 2026.01.21 |
