Aspose.3D FOSS for Java は5つの3Dファイル形式をサポートしています: OBJ, STL, glTF, GLB,、および FBX (インポートのみ)。.

すべての例は com.aspose.threed.* パッケージ:

import com.aspose.threed.*;

Maven 依存関係::

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

フォーマット概要

本題に入る前に、サポートされている4つのフォーマットとそれぞれの典型的な使用例を簡単に概観します。.

形式拡張子インポートエクスポートマテリアルサポートシーン階層
OBJ.objはいはい基本 (MTL ファイル)フラット
STL.stlはいはいなしフラット
glTF 2.0.gltfはいはいPBRフル
GLB.glbはいはいPBRフル
FBX.fbxはいいいえリッチフル

OBJ、STL、glTF、そして GLB はインポートとエクスポートの両方をサポートしています。FBX は インポートのみ. GLB(binary glTF)は以下によって生成されます GltfSaveOptions 使用して setContentType(FileContentType.BINARY).

OBJ:Wavefront Object

OBJは最も広くサポートされている3Dメッシュ形式の一つです。ジオメトリはプレーンテキストとして保存され、オプションの .mtl マテリアル用の companion ファイルです。.

OBJ ファイルの読み込み

最も簡単な方法はファイルパスを直接渡すことです::

Scene scene = Scene.fromFile("model.obj");

より細かく制御するには、次を使用してください ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

OBJ ファイルが MTL ファイルを参照する場合( mtllib ディレクティブ)、ライブラリは自動的にそこからマテリアル定義を読み込もうとします。MTL ファイルは OBJ ファイルと同じディレクトリにあるか、ディレクティブで指定されたパスに配置してください。.

OBJ として保存

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBJ の使用例

  • 異なる 3D ツール間でメッシュデータをやり取りすること。.
  • OBJ形式で配布されているアセットライブラリからモデルをインポートする。.
  • 複雑なシーン階層なしでジオメトリを素早く検査する。.

STL: ステレオリソグラフィー

STLは3Dプリントの標準フォーマットです。マテリアル、カラー、シーン階層を持たない生の三角形ジオメトリを表現します。STLファイルには2つのバリエーションがあり、ASCII(人間が読める)とバイナリ(コンパクト)があります。.

STLファイルの読み込み

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

STLとして保存

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

出力を制御するには、次を使用してください StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

STLの考慮点

  • STLは三角形ジオメトリのみを格納します。マテリアル、テクスチャ、シーン階層はサポートされず、エクスポート時に除外されます。.
  • STL エクスポートは 自動的に三角形化しません Binary STL は各ポリゴン面の最初の 3 頂点のみを書き込みます;四角形や n 頂点の面は黙って切り捨てられます。ASCII STL は面ごとにすべての頂点インデックスを書き込み、三角形でない面に対しては不正な出力になります。STL にエクスポートする際は、常に事前に三角形化されたメッシュ(すべて三角形の面)を使用してください。.
  • 大規模なモデルでは、バイナリSTLはASCII STLに比べてかなりサイズが小さくなります。.
  • STLは、対象が3Dプリンターやスライサーソフトウェアの場合に選択されるフォーマットです。.

glTF: GL Transmission Format

glTFは、特にウェブやリアルタイムアプリケーションにおいて、3Dコンテンツの効率的な転送とロードを目的とした最新のフォーマットです。PBRマテリアル、シーン階層、アニメーションをサポートします。.

glTFファイルの読み込み

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

glTFとして保存

基本的な保存はファイル拡張子を使用してフォーマットを判定します::

scene.save("output.gltf");

詳細な制御のために、使用してください GltfSaveOptions:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

GltfSaveOptions の詳細

メソッド目的
setFlipCoordinateSystem(boolean)エクスポート時に座標系の軸を反転します。Y‑up から Z‑up へ、またはその逆に変換する際に便利です。.
setPrettyPrint(boolean)可読性のために出力 JSON をインデント付きで整形します。設定は false 本番環境でファイルサイズを小さくするために.

glTF の使用例

  • Webベースの3Dビューア(three.js、Babylon.js)。.
  • リアルタイムアプリケーションやゲームエンジン。.
  • ツール間でPBRマテリアル定義を保持する。.

FBX: Filmbox(インポートのみ)

FBX は Autodesk が提供する独自フォーマットで、ゲーム開発やデジタルコンテンツ制作で広く使用されています。Aspose.3D FOSS for Java は FBX をサポートしています インポートのみ — FBX へのエクスポートは利用できません。.

バイナリ FBX のみ。. FBX インポーターはバイナリ FBX ファイルのみを読み取ります。ASCII FBX ファイルを渡すと例外がスローされます ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). FBX からのノード階層とマテリアル抽出は完全に検証されていません;複雑な FBX シーンは完全にロードされない可能性があります。アニメーションとリギングは実装されていません。.

FBXファイルの読み込み

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

FBXを他のフォーマットに変換する

FBXエクスポートがサポートされていないため、インポートしたFBXシーンをglTF、GLB、OBJ、またはSTLに変換してください::

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

FBX の使用例

  • Autodeskツール(Maya、3ds Max)から静的メッシュアセットをインポートし、他のフォーマットに変換する。.
  • バイナリFBXジオメトリを読み込み、glTF/GLB、OBJ、またはSTLに再エクスポートする。.

バッチ変換

一般的なワークフローは、ディレクトリ内のすべてのファイルをあるフォーマットから別のフォーマットへ変換することです。以下はバッチ変換のパターンです::

import com.aspose.threed.*;
import java.io.File;

public class BatchConvert {
    public static void main(String[] args) throws Exception {
        File inputDir = new File("models/obj");
        File outputDir = new File("models/gltf");
        outputDir.mkdirs();

        GltfSaveOptions saveOpts = new GltfSaveOptions();
        saveOpts.setPrettyPrint(true);

        File[] objFiles = inputDir.listFiles(
            (dir, name) -> name.toLowerCase().endsWith(".obj")
        );

        if (objFiles == null) return;

        for (File objFile : objFiles) {
            String baseName = objFile.getName()
                .replaceFirst("\\.obj$", "");

            Scene scene = Scene.fromFile(objFile.getAbsolutePath());
            String outPath = new File(outputDir, baseName + ".gltf")
                .getAbsolutePath();

            scene.save(outPath, saveOpts);
            System.out.println("Converted: " + objFile.getName()
                + " -> " + baseName + ".gltf");
        }
    }
}

これはすべての .obj ディレクトリ内のファイルを読み込み、各ファイルを pretty-printed 出力の glTF に変換し、結果を保存します。このパターンは任意のソースおよびターゲットフォーマットの組み合わせに適用できます。.

クロスフォーマット変換リファレンス

以下の表は、フォーマット間の変換時に期待できる内容を示しています。.

からジオメトリマテリアル階層注記
OBJSTL保持済み失われたN/ASTL にはマテリアルのサポートがありません
OBJglTF/GLB保持PBR に変換フラット可能な限り MTL マテリアルをマッピング
STLOBJ保持なしN/Aソースにマテリアルがありません
STLglTF/GLB保持デフォルトフラットデフォルトマテリアル適用
glTFOBJ保存簡易化フラット化PBR→基本マテリアル
glTFSTL保存失われたフラット化ジオメトリのみ
FBXOBJ保持簡略化フラット化マテリアルの簡略化
FBXSTL保持失われたフラット化ジオメトリのみ
FBXglTF/GLB保持PBRに変換保持高い忠実度

一般的な変換ガイドライン

  • ジオメトリ 一般的にフォーマット間で保持されますが、重要な例外があります。STL にエクスポートする場合、メッシュは完全に三角形の面で構成されていなければなりません。Binary STL は四角形や n‑gon の面を最初の 3 頂点に静かに切り捨てます。ASCII STL は三角形でない面に対して不正な出力を生成します。.
  • マテリアル マテリアルデータを含む glTF と FBX インポートシーン間で最も保持されます。STL に変換すると常にマテリアルが失われます。OBJ に変換するとマテリアルは基本的な MTL モデルに簡略化されます。.
  • シーン階層 glTF フォーマットのファイル間で保持されます。OBJ と STL はフラットな構造を生成します。このバージョンでは FBX の階層とマテリアル抽出は完全に検証されていません。.

すべてをまとめると

以下は、OBJ ファイルを読み込み、ノードを検査し、glTF と GLB の両方にエクスポートする完全な例です::

import com.aspose.threed.*;

public class FormatWorkflow {
    public static void main(String[] args) throws Exception {
        // Load
        Scene scene = Scene.fromFile("input.obj");

        // Inspect
        System.out.println("Nodes in scene:");
        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("  " + child.getName());
            Transform t = child.getTransform();
            System.out.println("    Translation: "
                + t.getTranslation());
        }

        // Export to glTF with options
        GltfSaveOptions gltfOpts = new GltfSaveOptions();
        gltfOpts.setPrettyPrint(true);
        scene.save("output.gltf", gltfOpts);

        // Export to GLB (binary glTF)
        GltfSaveOptions glbOpts = new GltfSaveOptions();
        glbOpts.setContentType(FileContentType.BINARY);
        scene.save("output.glb", glbOpts);

        System.out.println("Export complete.");
    }
}

概要

Aspose.3D FOSS for Java は、複数のフォーマットにわたる一貫した API を提供します。主なポイントは次のとおりです::

  • OBJ – 基本的なマテリアルによるシンプルなメッシュ交換。.
  • STL – 3Dプリントパイプライン向けのジオメトリのみのフォーマットです。.
  • glTF / GLB – Webおよびリアルタイム用途向けの最新PBR対応フォーマットです。 GltfSaveOptions 使用 setContentType(FileContentType.BINARY) GLB出力用。.
  • FBX – インポート専用;ゲームエンジンやDCCツールからアセットを読み込むためのリッチフォーマットです。.

フォーマット固有のロードおよびセーブオプションクラスを使用してください(ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions).

詳細については、こちらをご覧ください。 Aspose.3D ドキュメント またはソースを閲覧してください GitHub.