Hỗ trợ Định dạng
Aspose.3D FOSS cho Python có thể đọc và ghi bảy định dạng 3D bằng một đại diện cảnh trong bộ nhớ duy nhất. Thư viện chuyển đổi mỗi định dạng thành một Scene đối tượng khi tải và tuần tự hoá đối tượng đó trở lại định dạng đích khi lưu. Điều này có nghĩa là một cảnh được tải từ OBJ có thể được lưu trực tiếp sang glTF mà không cần bất kỳ bước chuyển đổi trung gian nào.
Các Định Dạng Được Hỗ Trợ
| Định dạng | Phần mở rộng | Đọc | Ghi | Lớp Options | Ghi chú |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Có | Có | ObjLoadOptions | .mtl hỗ trợ tải material |
| STL (binary) | .stl | Có | Có | StlSaveOptions | Đọc binary và ASCII; lưu mặc định là binary |
| STL (ASCII) | .stl | Có | Có | StlSaveOptions | Đã xác minh vòng quay |
| glTF 2.0 | .gltf | Có | Có | GltfSaveOptions | Đồ thị cảnh đầy đủ, vật liệu và hoạt ảnh được bảo lưu |
| GLB (binary glTF) | .glb | Có | Có | GltfSaveOptions | Bộ chứa nhị phân một tệp |
| COLLADA | .dae | Có | Có | ColladaLoadOptions / ColladaSaveOptions | Cây phân cấp cảnh và vật liệu |
| 3MF | .3mf | Có | Có | ThreeMfSaveOptions | Định dạng sản xuất gia tăng |
| FBX | .fbx | Một phần | Không | N/A | Tokenizer đang hoạt động; bộ phân tích đầy đủ đang trong quá trình thực hiệnkhông sẵn sàng cho sản xuất) |
Định Dạng OBJ
Wavefront OBJ là định dạng trao đổi được hỗ trợ rộng rãi nhất cho các lưới tĩnh. Aspose.3D FOSS tải geometry (vertices, normals, UV coordinates, và polygonal faces) và tùy chọn tệp đi kèm .mtl tệp vật liệu.
ObjLoadOptions
| Thuộc tính | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
enable_materials | bool | True | Phân tích .mtl tệp được tham chiếu bởi tiêu đề OBJ |
flip_coordinate_system | bool | False | Chuyển đổi từ Y-up tay phải sang Z-up tay phải |
normalize_normal | bool | True | Chuẩn hoá tất cả các vector pháp tuyến bề mặt đã nhập về độ dài đơn vị |
scale | float | 1.0 | Hệ số tỉ lệ đồng nhất được áp dụng cho tất cả các vị trí đỉnh |
Tải một tệp 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)}")Lưu dưới dạng OBJ
scene.save("output.obj")OBJ export ghi vị trí các đỉnh và các mặt đa giác. Nếu cảnh chứa LambertMaterial hoặc PhongMaterial đối tượng, thư viện sẽ ghi một tệp phụ .mtl tệp một cách tự động.
Định dạng STL
STL (STereoLithography) lưu trữ lưới tam giác dưới dạng danh sách các mặt không có chỉ mục. Cả hai dạng nhị phân và ASCII đều được hỗ trợ khi đọc; thư viện mặc định sử dụng nhị phân khi lưu.
StlSaveOptions
StlSaveOptions không có trường bắt buộc. Tạo một thể hiện của nó để truyền cho scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Ví dụ round-trip
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 chỉ lưu trữ hình học tam giác, không có các vector pháp tuyến ngoài pháp tuyến mặt, không có tọa độ UV, không có vật liệu và không có cấu trúc phân cấp. Nếu cảnh của bạn chứa các đa giác tứ giác hoặc đa giác bậc cao hơn, chúng sẽ được tự động chia thành tam giác khi lưu.
Định dạng glTF / GLB
glTF 2.0 là định dạng được khuyến nghị cho việc trao đổi 3D hiện đại. Nó bảo tồn toàn bộ đồ thị cảnh (cây nút, nút có tên, biến đổi), vật liệu (LambertMaterial, PhongMaterial → chuyển đổi PBR), và các clip hoạt hình. GLB là biến thể chứa nhị phân dạng tệp đơn.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryHỗ trợ vật liệu
Aspose.3D vật liệu FOSS được ánh xạ sang glTF pbrMetallicRoughness khi xuất:
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")Xác minh đầu ra 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', []))}")Định dạng COLLADA
COLLADA (.dae) là một định dạng dựa trên XML hỗ trợ cấu trúc cảnh, vật liệu, nhiều kênh UV và hoạt ảnh khung xương. Aspose.3D FOSS đọc và ghi toàn bộ cây nút và định nghĩa vật liệu.
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 là một lựa chọn tốt khi bạn cần chuyển đổi qua lại các cấu trúc phân cấp với các nút và vật liệu có tên mà không mất bất kỳ dữ liệu nào.
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.).
Định dạng FBX
Trạng thái: đang tiến triển (chưa sẵn sàng cho sản xuất).
FBX (.fbx) hỗ trợ trong Aspose.3D FOSS hiện đang ở giai đoạn tokenizer. Trình tokenizer FBX nhị phân có thể phân tích cấu trúc tệp, nhưng trình phân tích đầy đủ các nút, lưới và vật liệu có các lỗi đã biết và chưa hoàn thiện. Kết quả đọc FBX nên được coi là thử nghiệm.
Không sử dụng FBX trong các quy trình sản xuất với phiên bản này. Nếu dữ liệu nguồn của bạn ở định dạng FBX, hãy chuyển đổi nó sang glTF hoặc OBJ trước bằng Blender hoặc FBX Review trước khi tải bằng Aspose.3D FOSS.
Việc ghi FBX không được hỗ trợ.
Phát hiện định dạng tự động
Scene.from_file() và scene.open() phát hiện định dạng tự động bằng cách sử dụng phần mở rộng tệp và, nếu có, các magic byte trong phần đầu của tệp:
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")Nếu phần mở rộng không có hoặc không rõ ràng, thư viện sẽ quay lại việc kiểm tra phần đầu (magic byte). Các tệp không được hỗ trợ hoặc không nhận dạng được sẽ gây ra một IOError với một thông báo mô tả.
Mẹo và Thực hành tốt nhất
- Sử dụng glTF hoặc GLB cho các pipeline hiện đại. glTF giữ nguyên toàn bộ đồ thị cảnh, vật liệu và dữ liệu hoạt hình. Nó là định dạng hoàn chỉnh nhất để trao đổi với các engine trò chơi và trình xem web.
- Sử dụng OBJ để đạt độ tương thích tối đa. OBJ được hầu hết mọi công cụ 3D hỗ trợ. Nó chỉ giới hạn ở lưới tĩnh nhưng lại cực kỳ di động.
- Sử dụng 3MF để in. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Tránh sử dụng FBX cho đến khi nó sẵn sàng cho sản xuất. Kiểm tra ghi chú phát hành để biết phiên bản mà việc phân tích FBX đầy đủ đã hoàn thành.
- Khớp phần mở rộng lưu với định dạng. Không truyền một
.gltfphần mở rộng khi bạn muốn GLB nhị phân; sử dụng.glbmột cách rõ ràng. Phần mở rộng quyết định bộ tuần tự nào sẽ được sử dụng. - Kiểm tra tính tương thích đa giác. STL và 3MF yêu cầu các tam giác. Các quad và N-gon được chuyển thành tam giác tự động khi lưu, nhưng số lượng đỉnh sẽ tăng. Nếu bạn cần kiểm soát quá trình chuyển đổi thành tam giác, hãy gọi
mesh.triangulate()trước khi lưu.