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');

참고: 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 재질(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를 사용하십시오.


또 보기

 한국어