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

この記事では、ライブラリが提供する機能、開始方法、そして今後の展開について解説します。.

Aspose.3D FOSS for .NET とは??

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

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

主なハイライト

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

クイックスタート

NuGet インストール

プロジェクトに NuGet パッケージを追加します:

dotnet add package Aspose.3D --version 26.1.0

最初の変換

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

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

この Scene クラスは中心的なエントリーポイントです。呼び出しは scene.Open() ファイルパスを渡してモデルをロードし、次に呼び出します Save() ターゲットパスを指定します。ライブラリはファイル拡張子からフォーマットを推測します。.

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

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

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);

node.Transform.Translation = new FVector3(1, 2, 3);

scene.Save("scene.gltf");

これにより新しいシーンが作成され、ルートの下にボックスプリミティブが子ノードとして追加され、座標 (1, 2, 3) に配置され、結果が glTF ファイルとしてエクスポートされます。.

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

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

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);

// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);

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

この scene.Open() メソッドはロードオプションのいずれかのタイプを受け入れます: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, または TmfLoadOptions.

シーングラフの走査

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

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.gltf");

foreach (var child in scene.RootNode.ChildNodes)
{
    Console.WriteLine("Node: " + child.Name);
    Console.WriteLine("  Translation: " + child.Transform.Translation);

    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine("  Vertices: " + mesh.ControlPoints.Count);
    }
}

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

変換の適用

3D 空間でノードを配置するには、 Transform 各々のプロパティ Node:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(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トップレベルコンテナ;シーングラフのルート
Nodeツリー内の名前付き位置;変換と子ノードを保持
Entityノードに付随するビジュアルオブジェクトの抽象基底
Meshポリゴンジオメトリ – 頂点、面、法線
Camera仮想カメラの定義
Transformノードのローカル平行移動、回転、スケール
GlobalTransform計算されたワールド空間変換

組み込みプリミティブ

.NET エディションには、ノードに直接アタッチできる、または変換できるパラメトリック形状クラスが含まれています Mesh:

  • ボックス – 幅・高さ・奥行きを設定可能な軸整列ボックス。.
  • 球体 – 半径を設定可能なパラメトリック球体。.
  • 円柱 – 半径と高さを設定可能なパラメトリック円柱。.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

マテリアル

このライブラリは複数のマテリアルタイプを提供します::

  • LambertMaterial – アンビエント、ディフューズ、エミッシブ、リフレクティブのカラー成分を持つ、クラシックな拡散のみマテリアル。.
  • PhongMaterial – Lambert を拡張し、鏡面ハイライトと光沢を追加。.
  • PbrMaterial – 基本色、メタリック、ラフネス、オクルージョン、テクスチャスロットを持つ物理ベースレンダリングマテリアル。.

数学ユーティリティ

その Aspose.ThreeD 名前空間には必須の数学プリミティブが含まれます:

  • FVector3 – 位置、方向、スケール用の単精度3成分ベクトル。使用されるのは Transform.Translation および Transform.Scale.
  • Vector4 – 制御点と法線用の単精度4成分ベクトル。.
  • Matrix4 – 4x4変換行列。.
  • Quaternion – 回転表現。使用される Transform.Rotation.
  • BoundingBox – 空間クエリ用の軸平行バウンディングボックス。.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

ロードおよびセーブオプション

各フォーマットには、インポートとエクスポートの動作を制御できる専用のオプションクラスがあります::

フォーマットロードオプション保存オプション
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

例として、座標の反転と法線の正規化を行ってOBJファイルを読み込む場合::

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

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

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

フォーマット拡張インポートエクスポート備考
OBJ.objはいはいMTL マテリアル付き
STL.stlはいはいバイナリ + ASCII
glTF 2.0.gltfはいはいJSON フォーマット
GLB.glbはいはいバイナリ glTF
FBX.fbxはいはいASCII とバイナリ モード
Collada.daeはいはい
3MF.3mfはいはいZIPベースの 3D 製造フォーマット

フォーマット選択ガイド

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

  • OBJ は、3Dツール間で最大の互換性が必要なときに理想的です。ほぼすべてのモデリングアプリケーションがOBJの読み書きが可能です。メッシュデータの交換には適していますが、付随するMTLファイルを通じて基本的なマテリアル情報しか保持しません。.
  • STL は、3Dプリントワークフローで選ばれるフォーマットです。マテリアルやシーン階層を持たない生の三角形ジオメトリを保存し、スライサーソフトウェアが期待する通りです。.
  • glTF は、ウェブおよびリアルタイム3Dの最新標準です。PBRマテリアル、完全なシーン階層をサポートし、効率的な転送を念頭に設計されています。ウェブベースのビューアを構築する場合や、リアルタイムレンダリングパイプラインを対象とする場合はglTFを使用してください。.
  • FBX は、ゲーム開発およびデジタルコンテンツ制作のワークフローに深く統合されています。階層やマテリアルを含む豊富なシーンデータをサポートします。Aspose.3D FOSS for .NET supports FBX インポートとエクスポート ASCIIモードとバイナリモードの両方で.
  • 3MF は、リッチなメタデータ、マテリアル、複数オブジェクトシーンを単一のZIPベースのパッケージでサポートする最新の3Dプリントフォーマットです。.

既知の制限事項

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

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

Aspose.3D FOSS for .NET は以下の下でリリースされています MIT License. これにより、以下が自由に行えます::

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

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

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

システム要件

要件詳細
.NET バージョン10.0 or later
依存関係なし(純粋な C#)
プラットフォーム.NET を実行できるすべてのプラットフォーム
パッケージマネージャーNuGet

はじめに

以下は、導入を支援するリソースです::

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

一般的な使用例

以下は、Aspose.3D FOSS for .NET が適している実用的なシナリオです::

フォーマット変換パイプライン

多くのチームは 3D アセットをあるフォーマットで受け取りますが、別のフォーマットが必要です。デザインチームは FBX で作業し、ウェブチームは glTF を必要とすることがあります。このライブラリを使えば、自動変換パイプラインを構築できます::

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

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

scene.Save("asset.glb");

3D Model Inspection and Validation

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

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.obj");

int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);

foreach (var child in scene.RootNode.ChildNodes)
{
    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine(child.Name + ": "
            + mesh.ControlPoints.Count + " vertices");
    }
}

シーンの組み立て

複数のモデルを読み込み、1つのシーンに結合できます::

using Aspose.ThreeD;

var scene = new Scene();

var part1 = new Scene();
part1.Open("chassis.obj");

var part2 = new Scene();
part2.Open("wheels.obj");

// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}

scene.Save("assembled.gltf");

次は何か

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

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

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