장면 렌더링 및 내보내기

장면 렌더링 및 내보내기

@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.glbPBR (glTF 2.0)웹, 게임, 일반 배포
glTF.gltfPBR (glTF 2.0)아니오 (+ .bin)개발, 검사
STL.stl아니오아니오3D printing, geometry-only
FBX.fbxPhong/PBR아니오*아니오*Importer/exporter는 존재하지만 자동 감지에 연결되어 있지 않음
COLLADA.daeCross-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 바이너리 출력은 이미 중복을 제거합니다; 소스 에셋 품질을 확인하세요

또 보기

 한국어