광고 자리 모집 중 · 제휴 문의

절두체 컬링, 오클루전 컬링 및 LOD 팝인 현상: 3D 게임 엔진이 보이지 않는 지오메트리를 걸러내는 원리

365Finds Editorial
Wiki 문서 11,430편 수록

내 AI에서 365 Wiki 사용하기

아래 프롬프트를 복사해 평소 사용하는 AI에 붙여넣고 바로 질문하세요.

전체 Skill 다운로드

먼저 프롬프트로 체험해 보세요. 365 Wiki를 자주 쓴다면 전체 365Wiki Skill을 설치해 매번 붙여넣는 수고를 줄일 수 있습니다. 평소 쓰는 AI가 없다면 Gemini나 Microsoft Copilot 웹 버전도 사용할 수 있습니다.

서론: 현대 게임의 기하학적 렌더링 최적화 난제

《더 위쳐 3》의 울창한 원시림, 《사이버펑크 2077》의 초고밀도 빌딩 숲, 《호라이즌 제로 던》의 광활한 대자연과 같은 현대 오픈 월드 게임은 단일 프레임당 수천만 개의 폴리곤 삼각형, 수백 개의 광원, 수 기가바이트(GB)에 달하는 고해상도 텍스처를 포함합니다. 그래픽 처리 장치(GPU)가 매 프레임마다 가상 세계의 모든 삼각형을 충실하게 변환하고 래스터화하며 픽셀을 칠해야 한다면, 최신 플래그십 그래픽 카드조차 연산 부하를 감당하지 못하고 한 자릿수 프레임으로 붕괴할 것입니다.

실시간 3D 렌더링의 본질은 "제거의 미학"에 있습니다. 게임 엔진이 60프레임 이상의 매끄러운 화면을 구현할 수 있는 이유는 GPU의 렌더링 속도가 단순히 빠르기 때문이 아니라, 플레이어의 눈에 보이지 않는 지오메트리(폴리곤 메쉬)를 파이프라인 극초반 단계에서 가차 없이 폐기하기 때문입니다.

이러한 폐기 공정은 시야 절두체 컬링(View Frustum Culling), 차폐/오클루전 컬링(Occlusion Culling), 그리고 세부 수준(LOD, Level of Detail) 관리라는 3단계 시스템을 통해 수행됩니다. 이 시스템들이 정상적으로 맞물릴 때는 CPU의 드로우 콜(Draw Calls)과 GPU의 대역폭을 극적으로 절감하지만, 지나치게 공격적으로 설정되거나 급격한 시야 회전으로 동기화가 지연되면 게이머들이 흔히 겪는 대표적인 시각적 결함인 오브젝트 갑툭튀(지오메트리 팝인 / Pop-in) 현상을 유발합니다.

절두체 컬링: 시야 경계 밖의 불필요한 지오메트리 배제

절두체 컬링은 렌더링 파이프라인에서 가장 먼저 실행되며, 연산 비용이 가장 적게 드는 1차 가시성 판별 단계입니다.

                   [카메라 위치 / 플레이어의 눈]
                            / \
                           /   \
          전방 절단면     /=====\
                         /   ▲   \
                        /    │    \   <--- 절두체 내부 (실제 렌더링)
                       / [가시 객체] \
                      /   메쉬 모델   \
          후방 절단면    /=============\
                      /               \
       [좌측 시야 제외] [최대 시거 제외] [우측 시야 제외]

카메라 시야 절두체의 기하학적 정의

3D 컴퓨터 그래픽스에서 카메라가 담아내는 시야 공간은 무한한 직육면체가 아니라, 윗부분이 잘려 나간 피라미드 모양의 사각뿔대, 즉 절두체(Frustum) 형태를 띱니다. 절두체는 엄밀하게 6개의 수학적 평면으로 정의됩니다.

  1. 전방 절단면(Near Plane): 카메라 렌즈에 너무 가까워 모델이 시야를 뚫고 들어오는 현상을 방지하는 경계.
  2. 후방 절단면(Far Plane): 게임의 최대 가시거리를 제한하여 그 이상의 배경 모델을 잘라내는 경계.
  3. 좌, 우, 상, 하 절단면: 카메라의 시야각(FOV)과 모니터의 화면 비율에 의해 결정되는 시야 경계.

바운딩 볼륨과 평면 교차 테스트

수백만 개에 달하는 모델 정점(Vertex) 좌표를 CPU에서 6개 평면과 일일이 대조 계산하는 것은 그 자체로 막대한 오버헤드를 일으킵니다. 따라서 게임 엔진은 각 3D 메쉬를 단순화된 형태인 **바운딩 볼륨(Bounding Volume)**으로 감싸 처리합니다.

DirectX, Vulkan 또는 그래픽 드라이버로 드로우 콜을 보내기 전, 엔진은 바운딩 구와 6개 평면 방정식 간의 간단한 내적 연산을 수행합니다. 바운딩 볼륨이 6개 평면 중 단 하나라도 완전히 바깥쪽에 놓여 있다면 해당 메쉬는 즉시 폐기되며, GPU는 그 객체에 대한 정점 데이터를 단 1바이트도 받지 않습니다.

오클루전 컬링: 시선에 가려진 픽셀의 중복 렌더링(Overdraw) 제거

절두체 컬링을 통해 플레이어 등 뒤나 시야 바깥의 모델을 모두 걷어낸다 하더라도, 시야각 안에 들어와 있지만 전방의 장애물(건물 벽, 바위산, 문 등)에 완전히 가려진 객체들로 인한 중복 렌더링(오버드로 / Overdraw) 문제는 해결할 수 없습니다.

거대한 성벽 바로 앞에 서 있는 플레이어를 위해 성벽 뒤편에 가려진 번화한 시장, 수많은 NPC, 대장간의 수십만 개 폴리곤을 그대로 그리는 것은 치명적인 GPU 자원 낭비입니다. 게임 엔진은 이러한 비가시 메쉬를 솎아내기 위해 **오클루전 컬링(Occlusion Culling)**을 동원합니다.

[플레이어 시점] ───► [거대한 화강암 성벽] ───X (시선 차단)
                            │
                   (오클루전 컬링 판별)
                            │
                  ┌─────────┴─────────┐
                  ▼                   ▼
           [가려진 시장 골목]   [가려진 대장간]
          (드로우 콜 완전 차단) (GPU 연산 부하 0)

오클루전 컬링의 3대 핵심 기법

  1. 잠재적 가시 집합(PVS) 및 셀-포털 시스템:
    • 실내 및 복도형 맵에서 널리 쓰이는 고전적이면서도 확실한 기법.
    • 맵을 독립된 방(셀)들로 분할하고 문이나 창문(포털)으로 연결합니다. 현재 시야 절두체 내에 연결 포털이 보이지 않으면, 그 방 안에 존재하는 모든 소품과 지오메트리를 아예 연산하지 않습니다.
  2. 하드웨어 오클루전 쿼리(Hardware Occlusion Queries):
    • 먼 거리의 복잡한 모델 대신 거친 바운딩 박스만을 GPU에 먼저 그려보고, "이 박스 중 단 1픽셀이라도 깊이 버퍼(Z-Buffer) 테스트를 통과해 화면에 드러났는가?"를 질의하는 방식입니다.
    • 통과한 픽셀이 0개라면 후속 고해상도 메쉬의 드로우 콜을 중단합니다.
    • 지연 시간의 함정: 질의 결과를 GPU로부터 돌려받으려면 PCIe 버스를 통한 왕복 통신이 필요하며, 이는 1~2프레임의 CPU-GPU 동기화 지연을 유발합니다. 시점을 빠르게 홱 돌릴 때 가려져 있던 물체가 순간적으로 깜빡이거나 늦게 나타나는 원인이 됩니다.
  3. 계층적 Z 버퍼(HZB, Hierarchical Z-Buffering) 및 컴퓨트 셰이더 컬링:
    • 《Unreal Engine 5》 등 최신 엔진들이 사용하는 표준 기법입니다. 이전 프레임의 깊이 버퍼를 피라미드 형태로 다운샘플링(HZB)합니다.
    • GPU 내부의 컴퓨트 셰이더를 통해 수만 개 객체의 바운딩 박스를 이 깊이 피라미드와 병렬 대조합니다. 모든 계산이 VRAM 내에서 완결되므로 CPU-GPU 동기화 병목이 발생하지 않고 압도적인 속도로 대규모 지오메트리를 걸러냅니다.

세부 수준(LOD)과 오브젝트 갑툭튀(Pop-in)의 물리적 메커니즘

물체가 시야 내에 있고 장애물에 가려지지 않았다 하더라도, 저 멀리 화면에서 고작 8픽셀 크기로 잡히는 조각상에 10만 개의 폴리곤을 쏟아붓는 것은 극히 비효율적입니다. 이를 해결하기 위해 마련된 체계가 **LOD(Level of Detail)**입니다.

이산적 LOD와 가상화 마이크로폴리곤

팝인(Pop-in)이 발생하는 하드웨어적 병목

플레이 도중 건물, 풀숲, 고화질 텍스처가 갑자기 화면에 툭 튀어나오는 것은 단순한 코드 버그가 아니라 자산 스트리밍(Asset Streaming) 하드웨어의 한계 때문입니다.

  1. 스토리지 I/O 지연: 구형 HDD나 읽기 부하가 걸린 SATA SSD가 수백 메가바이트의 메쉬 데이터를 수 밀리초 내에 디스크에서 시스템 메모리로 읽어 들이지 못합니다.
  2. PCIe 대역폭 및 VRAM 전송 포화: 시야를 빠르게 회전할 때 대량의 정점 버퍼와 텍스처를 그래픽 메모리로 밀어 넣는 전송 속도가 한계에 다다릅니다.
  3. 차폐 판정의 시차: 코너를 고속으로 돌며 튀어나갈 때, 카메라의 이동 속도가 HZB의 차폐 해제 속도보다 빨라 수십 밀리초 동안 렌더링이 지연됩니다.

장애 진단 매트릭스: 컬링 및 LOD 렌더링 결함 판별

화면에 나타나는 이상 징후를 정확히 분류하면 올바른 그래픽 옵션 조정과 원인 분석이 가능합니다.

시각적 결함 증상원인 서브시스템기저 기술 메커니즘대응 조치 및 권장 옵션
화면 가장자리에서 오브젝트가 잘려 사라짐절두체 컬링(Frustum)바운딩 박스 마진 계산이 너무 엄격하거나 FOV 불일치엔진 설정 파일의 FOV 안전 여유 마진 확대
코너를 돌 때 건물 구조물이 일시적으로 번쩍임오클루전 컬링(Occlusion)하드웨어 쿼리로 인한 CPU-GPU 동기화 왕복 지연오클루전 모드를 계층적 Z 버퍼(HZB)로 전환
접근할 때 모델 외형이 계단식으로 급격히 바뀜이산적 LOD 편향(LOD Bias)드로우 콜 절감을 위해 LOD 전환 거리를 너무 짧게 설정게임 내 "시야 거리 품질" 또는 "메쉬 디테일" 상향
전방 10m 앞의 그림자가 뚝뚝 끊기며 생성됨캐스케이드 섀도우 맵(CSM)그림자 분할 거리(Split Distance) 임계값이 너무 짧음그래픽 설정에서 "그림자 가시거리" 또는 캐스케이드 수 증가
시야 회전 후 텍스처가 흐렸다가 뒤늦게 선명해짐텍스처 밉맵 스트리밍VRAM 부족 또는 디스크 I/O 병목으로 고해상도 Mip 지연게임을 NVMe SSD로 이동, 텍스처 해상도 한 단계 하향

실시간 3D 그래픽은 제한된 컴퓨팅 파워 안에서 시각적 완성도를 극대화하기 위한 정교한 밸런싱의 결과물입니다. 365Finds의 기술 분석을 참고하여 가시성 파이프라인의 원리를 이해하면, 거슬리는 팝인 현상을 최소화하면서도 쾌적하고 안정적인 프레임을 유지할 수 있습니다.

참고 자료