TypeScript에서 3D 모델 변환 방법

TypeScript에서 3D 모델 변환 방법

Aspose.3D FOSS for TypeScript는 중립적인 Scene 표현으로 로드한 후 대상 형식으로 저장하여 3D 형식 간 변환을 수행합니다. 이 가이드는 가장 일반적인 변환을 보여줍니다.

단계별 가이드

1단계: @aspose/3d 설치

npm install @aspose/3d

2단계: 원본 파일 로드

Scene을 만들고 scene.open()을 호출하십시오. 최상의 결과를 위해 형식별 *LoadOptions 클래스를 사용하십시오.

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);

3단계: 대상 형식으로 저장

출력 경로와 함께 scene.save()을 호출하십시오. 출력 형식은 파일 확장자에서 감지됩니다.

// OBJ → glTF binary (GLB)
scene.save('output.glb');

// OBJ → STL
scene.save('output.stl');

// OBJ → COLLADA
scene.save('output.dae');

Note: FBX는 scene.save() 자동 감지에서 지원되지 않습니다. .fbx 확장은 어떤 내보내기와도 연결되어 있지 않으며 — .fbx에 저장하면 조용히 OBJ 형식 콘텐츠가 기록됩니다. 안정적인 출력을 위해 OBJ, glTF, STL, 3MF 또는 COLLADA를 사용하십시오.


4단계: 일반 변환 예시

OBJ를 glTF / GLB로

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');

FBX — 지원되지 않음

FBX 자동 감지는 scene.open()에 연결되어 있지 않습니다. .fbx 파일이 scene.open()에 전달되면 어떤 포맷 감지기에서도 인식되지 않아 STL 파서로 넘어가게 되며, 이 경우 파서가 실패하거나 쓰레기를 생성합니다. 라이브러리에는 FBX 가져오기/내보내기 클래스가 존재하지만 고수준 open()/save() API 대신 직접 호출해야 합니다. FBX 대안으로 COLLADA, OBJ 또는 glTF를 사용하십시오.

glTF를 STL로

import { Scene } from '@aspose/3d';

const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');

COLLADA를 3MF로

import { Scene } from '@aspose/3d';

const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');

5단계: 여러 파일 일괄 변환

import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const inputDir = './input';
const outputDir = './output';

fs.mkdirSync(outputDir, { recursive: true });

const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));

for (const file of objFiles) {
    const inputPath = path.join(inputDir, file);
    const outputFile = file.replace('.obj', '.glb');
    const outputPath = path.join(outputDir, outputFile);

    const scene = new Scene();
    scene.open(inputPath, new ObjLoadOptions());
    scene.save(outputPath);

    console.log(`Converted ${file}${outputFile}`);
}

지원되는 변환 매트릭스

에서 \까지glTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX는 고수준 open()/save() API를 통해 지원되지 않습니다 — 이 형식은 자동 감지에 연결되어 있지 않습니다. 위의 모든 FBX 셀은 ✗입니다.


일반적인 문제 및 해결책

변환 후 자료가 손실됩니다

OBJ materials (usemtl, .mtl 파일)은 ObjLoadOptions.enableMaterials = true 시 로드됩니다. glTF로 저장할 때 PBR 재질 속성이 자동으로 매핑됩니다. 복잡한 재질(프로시저, 다중 레이어)은 충실도가 감소된 상태로 변환될 수 있습니다.

메시가 잘못 스케일링되었습니다

다양한 형식은 서로 다른 기본 단위를 사용합니다 (STL은 밀리미터, glTF는 미터). 로드할 때는 ObjLoadOptions.scale을, 저장할 때는 StlSaveOptions.scaleFactor을 사용하여 단위를 정규화하십시오.

좌표계 불일치 (모델이 뒤집히거나 회전됨)

일부 포맷은 오른쪽 손 Y‑up을 사용하고, 다른 포맷은 Z‑up을 사용합니다. ObjLoadOptions.flipCoordinateSystem = true를 사용하거나 로드 후 루트 노드에 회전을 적용하십시오.


자주 묻는 질문

변환이 애니메이션을 보존하나요?

애니메이션 데이터는 이를 지원하는 형식 간 변환 시 보존됩니다(예: COLLADA → glTF). STL 및 OBJ는 애니메이션 데이터를 포함하지 않습니다. FBX는 scene.open()/scene.save()을 통해 지원되지 않으므로, 고수준 API를 통해 FBX 애니메이션 라운드트립을 사용할 수 없습니다.

텍스처 데이터가 보존되나요?

OBJ 재질에서 참조되거나 glTF에 포함된 텍스처는 씬 그래프에 그대로 전달됩니다. GLB(binaryMode = true)로 저장할 때, 바이너리 버퍼는 단일 파일에 포함됩니다. OBJ 출력의 경우, 텍스처는 .obj와 함께 별도의 파일로 저장됩니다.

많은 파일을 동시에 변환할 수 있나요?

scene.open()scene.save()는 동기식입니다. 병렬 처리를 위해 Node.js worker_threads를 사용하십시오.


참고

 한국어