GLTF Loader
Primitive 로 기본적인 형태를 만들 수 있지만, 정교한 캐릭터나 건물 같은 고품질 에셋은 외부 3D 툴(Blender, Maya 등)에서 제작하여 가져와야 합니다. RedGPU는 웹 3D 표준 포맷인 glTF(GL Transmission Format) 2.0 로딩을 지원하는 GLTFLoader 를 제공합니다.
1. 모델 불러오기
RedGPU.GLTFLoader 를 사용하여 .gltf 또는 .glb 파일을 로드할 수 있습니다. 로딩은 비동기적으로 진행되며, 완료 시 콜백 함수를 통해 결과를 전달받습니다.
javascript
import * as RedGPU from "https://redcamel.github.io/RedGPU/dist/index.js";
new RedGPU.GLTFLoader(
redGPUContext,
'https://.../DamagedHelmet.glb', // 모델 경로
(loader) => {
// [로드 성공] loader.resultMesh가 최종 모델 객체입니다.
scene.addChild(loader.resultMesh);
}
);주요 속성 (GLTFLoader 인스턴스)
resultMesh: 로드된 모델을 담고 있는RedGPU.Display.Mesh객체입니다.parsingResult: 재질, 그룹, 텍스처 등 glTF 파일의 상세 파싱 데이터입니다.
2. IBL과의 시너지 (필수 권장)
외부에서 가져온 고품질 모델들은 대부분 물리 기반 렌더링(PBR) 재질을 사용합니다. 이러한 재질은 주변 환경의 빛 정보를 반사하여 질감을 표현하기 때문에, 앞서 배운 IBL 과 함께 사용할 때 가장 사실적인 결과를 얻을 수 있습니다.
IBL이 없는 환경에서 PBR 모델을 로드하면 금속 질감이 검게 보이거나 매우 어색하게 출력될 수 있습니다.
3. 실습 예제: 환경광과 모델 로딩
IBL로 환경을 구성하고, 정교한 금속 헬멧 모델을 로드하는 전체 과정입니다. 카메라 컨트롤러의 distance 속성을 조절하여 모델을 적절한 크기로 관찰할 수 있습니다.
javascript
import * as RedGPU from "https://redcamel.github.io/RedGPU/dist/index.js";
RedGPU.init(canvas, (redGPUContext) => {
const scene = new RedGPU.Display.Scene();
const controller = new RedGPU.Camera.OrbitController(redGPUContext);
// 1. 카메라 거리 설정 (모델 크기에 맞춰 조절)
controller.distance = 3;
const view = new RedGPU.Display.View3D(redGPUContext, scene, controller);
redGPUContext.addView(view);
// 2. IBL 및 SkyBox 설정 (PBR 재질의 핵심)
const ibl = new RedGPU.Resource.IBL(
redGPUContext,
'https://redcamel.github.io/RedGPU/examples/assets/hdr/2k/the_sky_is_on_fire_2k.hdr'
);
view.ibl = ibl;
view.skybox = new RedGPU.Display.SkyBox(redGPUContext, ibl.environmentTexture);
// 3. GLTF 모델 로딩
new RedGPU.GLTFLoader(
redGPUContext,
'https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/DamagedHelmet/glTF-Binary/DamagedHelmet.glb',
(loader) => {
scene.addChild(loader.resultMesh);
}
);
const renderer = new RedGPU.Renderer();
renderer.start(redGPUContext);
});라이브 데모
IBL 환경광을 받아 정교하게 반사되는 금속 헬멧 모델을 확인해 보세요.
다음 단계
텍스트와 함께 3D 공간을 풍성하게 채워줄 이미지 기반의 객체들에 대해 알아봅니다.