TypeScriptで3Dモデルを変換する方法

TypeScriptで3Dモデルを変換する方法

Aspose.3D FOSS for TypeScript は、3D フォーマット間の変換を中立的な Scene 表現にロードし、ターゲット形式に保存することで行います。このガイドでは、最も一般的な変換を示します。

ステップバイステップガイド

ステップ 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マテリアル(usemtl.mtlファイル)はObjLoadOptions.enableMaterials = true時にロードされます。glTFに保存する際、PBRマテリアルプロパティは自動的にマッピングされます。複雑なマテリアル(プロシージャル、マルチレイヤー)は、忠実度が低下した状態で変換される可能性があります。

メッシュが正しくスケーリングされていません

異なるフォーマットは異なるデフォルト単位を使用します(STL はミリメートル、glTF はメートル)。ロード時には ObjLoadOptions.scale を、保存時には StlSaveOptions.scaleFactor を使用して単位を正規化してください。

座標系の不一致(モデルが反転または回転している)

一部のフォーマットは右手座標系で Y が上向き、他は Z が上向きです。ObjLoadOptions.flipCoordinateSystem = true を使用するか、ロード後にルートノードに回転を適用してください。


よくある質問

変換はアニメーションを保持しますか?

アニメーションデータは、対応フォーマット間の変換時に保持されます(例:COLLADA → glTF)。STL と OBJ にはアニメーションデータが含まれません。FBX は scene.open()/scene.save() ではサポートされていないため、FBX アニメーションのラウンドトリップは高レベル API では利用できません。

テクスチャ データは保持されますか?

OBJ マテリアルで参照されるテクスチャや glTF に埋め込まれたテクスチャは、シーン グラフに引き継がれます。GLB(binaryMode = true)に保存する場合、バイナリ バッファは単一ファイルに埋め込まれます。OBJ 出力の場合、テクスチャは .obj と同じ場所に別ファイルとして保存されます。

複数のファイルを同時に変換できますか?

scene.open()scene.save() は同期です。並列処理には Node.js worker_threads を使用してください。


参照

 日本語