利用可能になったことをお知らせできることを嬉しく思います Aspose.3D FOSS for Java – Java アプリケーションで 3D ファイル形式を扱うための、無料かつオープンソースのライブラリです。ネイティブ依存関係を持たない純粋な Java ソリューションとして構築されており、Java 21 以降で動作するため、幅広いプロジェクトや環境で利用可能です。.

この投稿では、ライブラリが提供する内容、開始方法、そして今後の進め方について解説します。.

Aspose.3D FOSS for Java とは何ですか??

Aspose.3D FOSS for Java は、軽量な 3D ファイル処理ライブラリで、 MIT license. シーングラフ API を提供しており、複数の広く使用されているフォーマット間で 3D モデルの読み込み、検査、変換、保存が可能です。ライブラリは Java だけで完全に記述されており、外部のネイティブバイナリやプラットフォーム固有の設定は不要です。.

ソースコードは GitHub で入手可能です: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

主なハイライト

  • 純粋な Java – JNIなし、ネイティブライブラリなし、プラットフォーム制限なし。.
  • Java 21以上 互換性があります。.
  • MIT ライセンス – 個人、商用、または独自プロジェクトで制限なく使用できます。.
  • シーングラフアーキテクチャ – ノード、メッシュ、カメラ、マテリアルからなる馴染みのあるツリー。.
  • マルチフォーマットサポート – OBJ、STL、glTF 2.0、GLB ファイルの読み書き、FBX ファイルの読み取りが可能です。.

クイックスタート

Maven インストール

次の依存関係をあなたの pom.xml:

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

最初の変換

最もシンプルな使用例は、ある形式の 3D ファイルを読み込み、別の形式で保存することです。以下は OBJ から STL への 2 行の変換例です:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

その Scene クラスは中心的なエントリーポイントです。呼び出す Scene.fromFile() ファイルパスを指定してモデルをロードし、次に呼び出す save() 対象パスとともに。ライブラリはファイル拡張子から形式を推測します。.

スクラッチからシーンを構築する

シーンはプログラムから構築することもできます:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

これにより新しいシーンが作成され、ルートの下に「Box」という名前の子ノードが追加され、座標 (1, 2, 3) に配置され、結果が glTF ファイルとしてエクスポートされます。.

フォーマット固有のオプションでロードする

ロードプロセスをより細かく制御したい場合、各フォーマットは専用のオプションクラスを提供します。例えば、明示的なオプションを使用して STL ファイルをロードする場合:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

その Scene.fromFile() static メソッドは、ロードオプションのいずれかのタイプを受け入れます: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,、または FbxLoadOptions.

シーングラフの走査

シーンがロードされたら、ノードツリーをたどって内容を検査したり変更したりできます:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

このパターンは、デバッグやモデル内容に関するレポートの生成、または再エクスポート前にシーンの一部を選択的に変更する際に便利です。.

変換の適用

3D 空間でノードを配置するには、 Transform 各々のオブジェクト Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

変換は標準的な親子継承モデルに従います。子オブジェクトのワールド空間位置は、ローカル変換とルートまでのすべての先祖の変換を組み合わせたものです。.

含まれるもの

このライブラリは、3Dシーングラフモデルを中心に設計された、限定的な機能セットを提供します。.

シーングラフ

シーングラフは API の中核です。すべての 3D ファイルはツリー構造で表現されます::

クラスロール
Sceneトップレベルコンテナ; scene graph のルート
Nodeツリー内の名前付き位置; transforms と child nodes を保持
Entityノードに添付された visual objects の抽象基底
Meshポリゴンジオメトリ – 頂点、面、法線
Camera仮想カメラの定義
Transformノードのローカル平行移動、回転、スケール
GlobalTransform計算されたワールド空間変換

マテリアル

このライブラリは PBR(Physically Based Rendering)マテリアルモデルを提供します::

  • PbrMaterial – 物理ベースレンダリングマテリアル(アルベド、メタリック、ラフネス、エミッシブカラー、透明度)。これは Java エディションで利用可能な唯一の具体的なマテリアルクラスです。.

Math Utilities → 数学ユーティリティ

その com.aspose.threed パッケージには基本的な数学プリミティブが含まれています:

  • Vector3 – 位置、方向、色のための3成分ベクトル。.
  • Matrix4 – 4x4変換行列。.
  • クォータニオン – 回転表現。.
  • BoundingBox – 空間クエリ用の軸整列バウンディングボックス。.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Load and Save Options → ロードおよび保存オプション

Each format has dedicated option classes that let you control import and export behavior: → 各フォーマットには、インポートとエクスポートの動作を制御できる専用のオプションクラスがあります:

フォーマットロードオプション保存オプション
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (インポートのみ)

例えば、整形された JSON と座標系が反転した glTF をエクスポートするには:

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

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

サポートされているフォーマット

以下の表は、Aspose.3D FOSS for Java が読み書きできるフォーマットをまとめたものです。.

フォーマット拡張子インポートエクスポートメモ
OBJ.objはいはいMTLマテリアル付き
STL.stlはいはいバイナリ + ASCII
glTF 2.0.gltfはいはいJSON形式
GLB.glbはいはいGltfSaveOptions を使用したバイナリ glTF
FBX.fbxはいいいえインポートのみ

OBJ、STL、glTF、GLB は読み込みと保存の両方に対応しています。FBX はインポートのみ対応しています。.

フォーマット選択ガイド

適切なフォーマットの選択は、使用ケースに依存します:

  • OBJ 3Dツール間で最大の互換性が必要なときに最適です。ほぼすべてのモデリングアプリケーションが OBJ の読み書きが可能です。メッシュデータの交換にはうまく機能しますが、付随する MTL ファイルを通じて基本的なマテリアル情報しか保持しません。.
  • STL STL は3Dプリントワークフローで選ばれるフォーマットです。素材やシーン階層を含まない生の三角形ジオメトリを保存し、スライサーソフトウェアが期待する形になっています。パイプラインが3Dプリンターで終わるのであれば、STL が最もシンプルな選択肢です。.
  • glTF glTF はウェブやリアルタイム3Dの最新標準です。PBRマテリアル、完全なシーン階層をサポートし、効率的な転送を念頭に設計されています。webベースのビューアを構築する場合や three.js や Babylon.js を使用する場合、あるいはリアルタイムレンダリングパイプラインを対象とする場合は glTF を使用してください。.
  • FBX はゲーム開発およびデジタルコンテンツ制作のワークフローに深く統合されています。階層やマテリアルを含むリッチなシーンデータをサポートします。Aspose.3D FOSS for Java supports FBX インポートのみ – FBX アセットを読み込み、他のフォーマットに変換するために使用します。.

既知の制限事項

注意すべき点は Scene.render()はサポートされていません FOSS エディションでは利用できません。このメソッドを呼び出すと例外がスローされます UnsupportedOperationException. このライブラリは、ディスプレイへのリアルタイムレンダリングではなく、ファイルベースの 3D 処理(ロード、操作、変換、モデルの保存)を目的としています。.

オープンソースとライセンス

Aspose.3D FOSS for Java は以下のライセンスでリリースされています MIT License. これは、あなたが自由にできることを意味します::

  • 商用およびプロプライエタリなアプリケーションでライブラリを使用すること。.
  • ニーズに合わせてソースコードを変更すること。.
  • ライブラリを自分のソフトウェアの一部として配布する。.

ロイヤリティ料金はなく、使用制限もなく、MITライセンスが規定する以外の帰属表示要件もありません。.

完全なソースコードは GitHub にホストされており、貢献は歓迎です:: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

システム要件

要件詳細
Java バージョン21 or later
依存関係なし(純粋な Java)
プラットフォームJVM を実行できる任意のプラットフォーム
ビルドツールMaven(推奨)

はじめに

以下は、セットアップと実行に役立つリソースです::

  • ドキュメント – 包括的なガイドと API のウォークスルーが利用可能です Aspose.3D ドキュメンテーションサイト.
  • ナレッジベース – 実用的なハウツー記事とトラブルシューティングのヒントが Aspose.3D KB.
  • API リファレンス – 詳細なクラスとメソッドのリファレンスが Aspose.3D API リファレンス.
  • ソースコード – ブラウズして貢献する GitHub.
  • Maven Central – パッケージは次の形で公開されています com.aspose:aspose-3d-foss Maven Central にて。.

Common Use Cases

Here are some practical scenarios where Aspose.3D FOSS for Java fits well:

Format Conversion Pipelines

Many teams receive 3D assets in one format but need them in another. A design team might work in FBX while the web team needs glTF. The library lets you build automated conversion pipelines:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

アプリケーションに3Dアセットを統合する前に、その内容を検証したい場合があります――ノード数の確認、ジオメトリの検証、または期待される要素が存在するかの確認などです::

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

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

シーンアセンブリ

複数のモデルをロードし、単一のシーンに結合できます::

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

次は何ですか

今後の記事では、以下を取り上げます::

  • シーングラフ API、マテリアル、数学ユーティリティの主要機能を徹底解説します。.
  • サポートされている各3Dフォーマット(OBJ、STL、glTF、FBX)の取り扱いに関する実践的ガイド――ロード/セーブオプションやバッチ変換パターンを含みます。.

お楽しみに。また、ライブラリを自由に探索し、GitHubでフィードバックを共有してください。.