フォーマットサポート
Aspose.3D FOSS for Python は、単一のインメモリシーン表現を使用して、7つの3Dフォーマットの読み書きが可能です。ライブラリは各フォーマットを共通の Scene オブジェクトに変換してロードし、保存時にそのオブジェクトを対象フォーマットへシリアライズします。これにより、OBJ から読み込んだシーンを中間変換ステップなしで直接 glTF に保存できます。.
サポートされているフォーマット
| フォーマット | 拡張子 | 読み取り | 書き込み | オプションクラス | 注記 |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | はい | はい | ObjLoadOptions | .mtl マテリアルのロードがサポートされています |
| STL(バイナリ) | .stl | はい | はい | StlSaveOptions | バイナリとASCIIの読み取り; 保存はデフォルトでバイナリ |
| STL (ASCII) | .stl | はい | はい | StlSaveOptions | 往復が検証済み |
| glTF 2.0 | .gltf | はい | はい | GltfSaveOptions | 完全なシーングラフ、マテリアル、アニメーションが保持されます |
| GLB(バイナリ glTF) | .glb | はい | はい | GltfSaveOptions | 単一ファイルのバイナリコンテナ |
| COLLADA | .dae | はい | はい | ColladaLoadOptions / ColladaSaveOptions | シーン階層とマテリアル |
| 3MF | .3mf | はい | はい | ThreeMfSaveOptions | 付加製造フォーマット |
| FBX | .fbx | 部分的 | いいえ | N/A | トークナイザは動作中です;フルパーサは進行中です(本番環境向けではありません) |
OBJ フォーマット
Wavefront OBJ は静的メッシュ用の最も広くサポートされているインターチェンジ形式です。Aspose.3D FOSS はジオメトリ(頂点、法線、UV座標、ポリゴン面)をロードし、オプションで同伴する .mtl マテリアルファイル。.
ObjLoadOptions
| プロパティ | タイプ | デフォルト | 説明 |
|---|---|---|---|
enable_materials | bool | True | 解析する .mtl OBJヘッダーで参照されるファイル |
flip_coordinate_system | bool | False | Y-up 右手系から Z-up 右手系へ変換 |
normalize_normal | bool | True | インポートされたすべてのサーフェス法線を単位長さに正規化 |
scale | float | 1.0 | すべての頂点位置に適用される一様スケール係数 |
OBJ ファイルのロード
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0
scene = Scene()
scene.open("model.obj", options)
print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")OBJ に保存
scene.save("output.obj")OBJエクスポートは頂点位置とポリゴン面を書き出します。シーンに LambertMaterial または PhongMaterial objects が含まれる場合、ライブラリはコンパニオン .mtl ファイルを自動的に生成します。.
STL 形式
STL(STereoLithography)は三角形メッシュをインデックスなしのファセットリストとして保存します。読み込み時にはバイナリ形式と ASCII 形式の両方がサポートされており、保存時のデフォルトはバイナリです。.
StlSaveOptions
StlSaveOptions 必須フィールドはありません。それをインスタンス化して渡します scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)ラウンドトリップ例
from aspose.threed import Scene
##Load
scene = Scene.from_file("model.stl")
##Inspect
for node in scene.root_node.child_nodes:
if node.entity:
print(f"{node.name}: {len(node.entity.control_points)} vertices")
##Save
scene.save("roundtrip.stl")STL は三角形ジオメトリのみを保存し、ファセット法線以外の法線、UV 座標、マテリアル、階層情報は保持しません。シーンにクアッドや高次多角形が含まれている場合、保存時に自動的に三角形化されます。.
glTF / GLB フォーマット
glTF 2.0 は、最新の 3D 交換に推奨されるフォーマットです。フルシーン グラフ(ノード階層、名前付きノード、変換)、マテリアル(LambertMaterial, PhongMaterial → PBR 変換)、およびアニメーション クリップ。GLB は単一ファイルのバイナリ コンテナ バリアントです.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryマテリアルのサポート
Aspose.3D FOSS のマテリアルは glTF にマッピングされます pbrMetallicRoughness エクスポート時:
from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene()
node = scene.root_node.create_child_node("object")
mat = PhongMaterial()
mat.diffuse_color = Vector3(0.8, 0.2, 0.2) # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat
scene.save("colored.gltf")glTF 出力の検証
import json
with open("output.gltf") as f:
data = json.load(f)
print(f"Asset version : {data['asset']['version']}")
print(f"Nodes : {len(data.get('nodes', []))}")
print(f"Meshes : {len(data.get('meshes', []))}")COLLADA フォーマット
COLLADA (.dae) は、シーン階層、マテリアル、複数の UV チャネル、スケルトンアニメーションをサポートする XML ベースのフォーマットです。Aspose.3D FOSS はフルノードツリーとマテリアル定義の読み書きを行います。.
from aspose.threed import Scene
##Load a COLLADA file
scene = Scene.from_file("model.dae")
##Inspect top-level nodes
for node in scene.root_node.child_nodes:
print(f" {node.name}")
##Save back to COLLADA
scene.save("output.dae")COLLADA は、名前付きノードやマテリアルを含む階層構造をデータ損失なく往復させる必要がある場合に優れた選択肢です。.
3MF Format
3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.
from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions
scene = Scene.from_file("part.stl") # Load from STL
opts = ThreeMfSaveOptions()
scene.save("part.3mf", opts) # Write as 3MF3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).
FBX フォーマット
ステータス:進行中(本番環境向けではありません)。.
FBX (.fbx) のサポートは現在トークナイザ段階です。バイナリ FBX トークナイザはファイル構造を解析できますが、フルノード、メッシュ、マテリアルパーサーには既知のバグがあり、未完成です。FBX の読み取り結果は実験的扱いとしてください。.
このリリースでは、プロダクションパイプラインで FBX を使用しないでください。. ソースデータが FBX 形式の場合、Aspose.3D FOSS で読み込む前に、Blender または FBX Review を使用して glTF または OBJ に変換してください。.
FBX の書き込みはサポートされていません。.
フォーマット自動検出
Scene.from_file() および scene.open() ファイル拡張子と、利用可能な場合はファイルヘッダーのマジックバイトを使用して、フォーマットを自動的に検出します::
from aspose.threed import Scene
##The library detects each format without being told explicitly
scene_obj = Scene.from_file("model.obj")
scene_glb = Scene.from_file("model.glb")
scene_stl = Scene.from_file("model.stl")
scene_dae = Scene.from_file("model.dae")
scene_3mf = Scene.from_file("model.3mf")拡張子がない、または曖昧な場合、ライブラリはヘッダー検査(マジックバイト)にフォールバックします。サポートされていない、または認識できないファイルは IOError 説明的なメッセージとともに。.
ヒントとベストプラクティス
- 最新のパイプラインには glTF または GLB を使用してください。. glTFはフルシーングラフ、マテリアル、アニメーションデータをすべて保持します。ゲームエンジンやウェブビューアとのやり取りに最も完全なフォーマットです。.
- 最大の互換性を得るにはOBJを使用してください。. OBJは事実上すべての3Dツールでサポートされています。静的メッシュに限定されますが、非常にポータブルです。.
- 印刷には3MFを使用してください。. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- FBXは本番対応になるまで使用しないでください。. 完全なFBXパースが完了したバージョンについては、リリースノートをご確認ください。.
- 保存拡張子をフォーマットに合わせてください。. a を渡さないでください。
.gltfバイナリGLBが必要なときは拡張子を使用してください.glb明示的に。拡張子はどの serialiser が使用されるかを決定します。. - polygon の互換性を確認してください. STL と 3MF は三角形が必要です。四角形や N-gon は保存時に自動的に三角形化されますが、頂点数は増加します。三角形化を制御する必要がある場合は、呼び出してください
mesh.triangulate()保存する前に。.