การสนับสนุนรูปแบบ
Aspose.3D FOSS สำหรับ Python สามารถอ่านและเขียนรูปแบบ 3D ทั้งหมดเจ็ดรูปแบบโดยใช้การแสดงผลฉากในหน่วยความจำเดียวกัน ไลบรารีจะแปลงแต่ละรูปแบบเป็นอ็อบเจ็กต์ทั่วไป Scene อ็อบเจ็กต์เมื่อโหลดและทำการซีเรียลไลซ์อ็อบเจ็กต์นั้นกลับไปยังรูปแบบเป้าหมายเมื่อบันทึก ซึ่งหมายความว่าฉากที่โหลดจาก OBJ สามารถบันทึกโดยตรงเป็น glTF ได้โดยไม่ต้องผ่านขั้นตอนการแปลงกลางใดๆ.
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน | คลาส Options | หมายเหตุ |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | ใช่ | ใช่ | ObjLoadOptions | .mtl รองรับการโหลดวัสดุ |
| STL (ไบนารี) | .stl | ใช่ | ใช่ | StlSaveOptions | อ่านแบบไบนารีและ ASCII; การบันทึกตั้งค่าเริ่มต้นเป็นไบนารี |
| STL (ASCII) | .stl | ใช่ | ใช่ | StlSaveOptions | ยืนยันการเดินทางไป-กลับ |
| glTF 2.0 | .gltf | ใช่ | ใช่ | GltfSaveOptions | กราฟฉากเต็ม, วัสดุ, และแอนิเมชันถูกเก็บรักษาไว้ |
| GLB (binary 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 วัตถุ, ไลบรารีจะเขียนไฟล์คู่ .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) เป็นรูปแบบที่ใช้ XML เป็นฐานซึ่งรองรับโครงสร้างฉาก, วัสดุ, ช่อง UV หลายช่อง, และการเคลื่อนไหวของโครงกระดูก. 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 เป็นตัวเลือกที่ดีเมื่อคุณต้องการทำ round‑trip ลำดับชั้นที่มีโหนดและวัสดุที่ตั้งชื่อโดยไม่สูญเสียข้อมูลใด ๆ.
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) การสนับสนุนใน Aspose.3D FOSS อยู่ในขั้นตอน tokenizer ในขณะนี้. ตัว tokenizer ของ FBX แบบไบนารีสามารถวิเคราะห์โครงสร้างไฟล์ได้, แต่ตัว parser ของโหนด, mesh, และวัสดุเต็มยังมีบั๊กที่ทราบและยังไม่สมบูรณ์. ผลลัพธ์การอ่าน FBX ควรถือว่าเป็นการทดลอง.
ห้ามใช้ FBX ในสายงานการผลิตกับรุ่นนี้. หากข้อมูลต้นฉบับของคุณอยู่ในรูปแบบ FBX ให้แปลงเป็น glTF หรือ OBJ ก่อนโดยใช้ Blender หรือ FBX Review ก่อนโหลดด้วย Aspose.3D FOSS.
ไม่รองรับการเขียน 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 ตัวใดจะถูกใช้. - ตรวจสอบความเข้ากันได้ของโพลิกอน. STL และ 3MF ต้องการสามเหลี่ยม. Quads และ N-gons จะถูกทำให้เป็นสามเหลี่ยมโดยอัตโนมัติเมื่อบันทึก, แต่จำนวนเวอร์เท็กซ์จะเพิ่มขึ้น. หากคุณต้องการควบคุมการทำให้เป็นสามเหลี่ยม, เรียก
mesh.triangulate()ก่อนบันทึก.