Skip to content

Instancing Mesh LOD

대량의 객체를 렌더링하는 인스턴싱 메시(Instancing Mesh) 에 LOD 를 적용하는 방법을 다룹니다. InstancingMesh 의 LOD 는 각 인스턴스별 거리 계산을 GPU 쉐이더 내부에서 병렬로 처리하므로, 수만 개의 객체에 대해 LOD 를 적용해도 CPU 부하가 거의 없는 것이 특징입니다.

1. 동작 원리

InstancingMesh 에 LOD 를 등록하면, 내부적으로 LOD 개수만큼의 서브 드로우 콜(Sub Draw Call) 이 생성될 수 있습니다. 하지만 렌더링 파이프라인 최적화를 통해, GPU 에서 각 인스턴스의 카메라 거리를 판단하고 적절한 지오메트리 버퍼를 참조하여 그립니다.

2. 사용법

일반 Mesh 와 동일하게 LODManager.addLOD 를 사용합니다.

javascript
import * as RedGPU from "https://redcamel.github.io/RedGPU/dist/index.js";

// 1. InstancingMesh 생성 (기본: Sphere High Poly)
const instancedMesh = new RedGPU.Display.InstancingMesh(
    redGPUContext, 
    10000, 10000, 
    new RedGPU.Primitive.Sphere(redGPUContext, 2, 32, 32), 
    material
);

// 2. LOD 레벨 추가
// GPU가 각 인스턴스별로 거리를 계산하여 아래 지오메트리를 적용합니다.
instancedMesh.LODManager.addLOD(20, new RedGPU.Primitive.Sphere(redGPUContext, 2, 8, 8));
instancedMesh.LODManager.addLOD(40, new RedGPU.Primitive.Box(redGPUContext, 3, 3, 3));

scene.addChild(instancedMesh);

3. 실습 예제: 2,000개의 LOD 큐브

2,000개의 객체가 카메라 와의 거리에 따라 모양이 변하는 것을 확인해 보세요. 카메라를 줌인/줌아웃 하면 멀리 있는 객체들은 박스(Box) 로, 가까운 객체들은 구(Sphere) 로 표시됩니다.

핵심 요약

  • GPU 가속: CPU 연산 없이 GPU 에서 거리를 판단하므로 대량의 객체에도 성능 저하가 거의 없습니다.
  • 메모리 절약: 멀리 있는 객체에 저해상도 모델을 사용하여 정점 처리 비용을 획기적으로 줄입니다.