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 에서 거리를 판단하므로 대량의 객체에도 성능 저하가 거의 없습니다.
- 메모리 절약: 멀리 있는 객체에 저해상도 모델을 사용하여 정점 처리 비용을 획기적으로 줄입니다.