장면 렌더링 및 내보내기
@aspose/3d 은(는) 처리 및 변환 라이브러리이며, GPU 렌더링을 수행하거나 이미지 파일을 생성하지 않습니다. 이 라이브러리에서의 “Rendering"은 다음을 의미합니다 는 씬을 하위 렌더러, 게임 엔진 또는 뷰어가 사용할 수 있는 형식으로 내보내는 것입니다.
이 페이지에서는 모든 내보내기 경로를 다룹니다: 파일 기반 저장, 메모리 버퍼 출력, 형식별 옵션, 그리고 일반적인 하위 대상(Three.js, Babylon.js, 모델 뷰어 및 게임 엔진)을 위한 씬 준비 방법.
기본 내보내기
호출 scene.save() 에 파일 경로를 지정합니다. 라이브러리는 파일 확장자를 기반으로 출력 형식을 추론합니다:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('input.obj'); // use a supported format (OBJ, glTF, GLB, STL, 3MF, COLLADA)
scene.save('output.glb'); // GLB (binary glTF)
scene.save('output.stl'); // STL
scene.save('output.dae'); // COLLADA
scene.save('output.3mf'); // 3MF
GLB로 내보내기 (웹 및 게임에 권장)
GLB(바이너리 glTF 2.0)는 모든 메쉬 데이터, 재질 및 텍스처를 포함하는 단일 독립 파일입니다. 웹 뷰어(Three.js, Babylon.js, model-viewer)와 게임 엔진(Godot, Unity의 임포터)에서 권장되는 출력 형식입니다:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('source.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // produce .glb instead of .gltf + .bin
scene.save('output.glb', opts);
console.log('GLB export complete');설정 binaryMode = true 는 자체 포함 GLB 파일을 생성합니다. 언제 false,이면, 출력은 .gltf 는 별도의 .bin 버퍼 사이드카입니다.
glTF로 내보내기 (검사를 위한 JSON 형식)
JSON 변형 (.gltf + .bin)은 JSON이 사람이 읽을 수 있기 때문에 개발 중에 유용합니다:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae'); // COLLADA is fully supported; FBX is not wired into scene.open()
const opts = new GltfSaveOptions();
opts.binaryMode = false; // JSON + .bin sidecar
scene.save('output.gltf', opts);STL로 내보내기 (3D 프린팅 워크플로우)
STL은 기하학 정보만 포함하며(재질 및 애니메이션 없음) 3D 프린팅 슬라이서의 표준 교환 형식입니다:
import { Scene } from '@aspose/3d';
import { StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.obj');
const opts = new StlSaveOptions();
opts.binaryMode = true; // binary STL is more compact than ASCII
scene.save('output.stl', opts);설정 binaryMode = false 는 텍스트로 읽을 수 있지만 크기가 큰 ASCII STL을 생성합니다.
FBX로 내보내기 (DCC 툴 워크플로우)
참고: 라이브러리에는 FBX 임포터 및 익스포터 클래스가 존재하지만, FBX 형식 자동 감지는 연결되어 있지 않습니다 scene.open() 또는 scene.save(). 호출 scene.save('output.fbx', opts) FBX 내보내기를 호출하지 않습니다 — the .fbx 확장자가 저장 디스패처에 의해 인식되지 않아 호출이 OBJ 출력으로 대체됩니다. 사용하십시오 FbxExporter FBX I/O가 필요하다면 클래스를 직접 사용하십시오. 포맷 지원 표에서는 FBX를 No* 이러한 이유로.
Blender, Maya 또는 Unreal Engine에서 허용하는 포맷으로 내보내야 한다면, 대신 GLB 또는 COLLADA를 사용하십시오 — 두 포맷 모두 완전히 연동되어 있습니다 scene.save():
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae');
// GLB is fully supported and widely accepted by DCC tools
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);인메모리 내보내기와 함께 saveToBuffer()
서버리스 함수, HTTP 응답 및 스트리밍 파이프라인의 경우, 직접 Buffer 디스크에 쓰지 않고:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function convertToGlbBuffer(inputPath: string): Buffer {
const scene = new Scene();
scene.open(inputPath);
const opts = new GltfSaveOptions();
opts.binaryMode = true;
return scene.saveToBuffer('glb', opts);
}
// Express.js / HTTP response example
// const glbBuffer = convertToGlbBuffer('model.obj');
// res.setHeader('Content-Type', 'model/gltf-binary');
// res.send(glbBuffer);
saveToBuffer() 첫 번째 인수로 포맷 문자열을 받습니다 (예:. 'glb', 'stl', 'obj') 및 동일한 옵션 객체를 save().
결합 openFromBuffer() 와 saveToBuffer()
전체 단계가 메모리 내에서 이루어지는 변환 파이프라인으로, 어느 단계에서도 디스크 I/O가 발생하지 않습니다:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function objBufferToGlbBuffer(objData: Buffer): Buffer {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
scene.openFromBuffer(objData, loadOpts);
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true;
return scene.saveToBuffer('glb', saveOpts);
}특정 렌더러용 씬 준비
Three.js / Babylon.js (웹)
이 렌더러들은 GLB 파일을 기본적으로 로드합니다. 다음을 사용하여 내보내십시오 binaryMode = true. 소스 OBJ에서 텍스처가 참조되는 경우, .mtl 이미지 파일이 로드 시 동일한 위치에 있는지 확인하십시오.
model-viewer (웹 컴포넌트)
허용 .glb 직접. Three.js와 동일한 내보내기 설정을 사용합니다.
Godot 엔진
Godot의 임포터(Project → Import)를 통해 GLB를 가져옵니다. 사용 binaryMode = true. Godot는 glTF 2.0의 PBR 재질을 기본적으로 지원합니다.
Blender
최상의 가져오기 정확도를 위해 glTF (output.gltf + output.bin) 또는 GLB (output.glb). Blender의 glTF 2.0 임포터는 PBR 재질과 애니메이션을 처리합니다. 참고: FBX 출력은 scene.save() 지원되지 않습니다 — FBX 형식 자동 감지는 저장 디스패처에 연결되어 있지 않습니다.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
STL 또는 3MF 로 내보냅니다. 색상이나 재료 메타데이터를 보존해야 할 경우 3MF를 사용하고, 최대 호환성을 원한다면 STL을 사용하세요.
내보내기 포맷 비교
| 포맷 | 확장자 | 재질 | 애니메이션 | 단일 파일 | 최적 용도 |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | 예 | 예 | 웹, 게임, 일반 배포 |
| glTF | .gltf | PBR (glTF 2.0) | 예 | 아니오 (+ .bin) | 개발, 검사 |
| STL | .stl | 아니오 | 아니오 | 예 | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | 아니오* | 아니오* | Importer/exporter는 존재하지만 자동 감지에 연결되어 있지 않음 |
| COLLADA | .dae | 예 | 예 | 예 | Cross-DCC 교환 |
| 3MF | .3mf | 색상/재질 | 아니오 | 예 | 현대 3D 프린팅 |
공통 내보내기 문제
| 증상 | 원인 | 수정 |
|---|---|---|
| 출력 GLB가 뷰어에서 JSON으로 열림 | binaryMode 그대로 남음 false | 설정 opts.binaryMode = true |
| 출력 GLB에 텍스처가 누락됨 | binaryMode 설정되지 않음 | 설정 opts.binaryMode = true 자체 포함 GLB용 |
| STL 파일이 슬라이서에서 색상이 없음 | STL 형식은 색상을 지원하지 않습니다. | 색상 데이터에는 3MF를 사용하십시오. |
saveToBuffer 빈 버퍼를 반환합니다. | 포맷 문자열 인수가 없거나 잘못되었습니다. | 포맷 문자열을 전달하십시오, 예:. 'glb', 'stl', 또는 'obj' |
| FBX가 Blender에서 애니메이션 없이 열립니다. | 원본 파일 (OBJ/STL)에 애니메이션이 없습니다. | 애니메이션은 원본에 존재할 경우에만 전달됩니다. |
| 출력 파일이 매우 큽니다 | 소스 OBJ에 중복된 정점이 많이 있습니다 | GLB 바이너리 출력은 이미 중복을 제거합니다; 소스 에셋 품질을 확인하세요 |