Pengenalan
Konten 3D jarang tetap dalam satu format sepanjang hayatnya. Sebuah model mungkin bermula sebagai fail OBJ yang dieksport dari aplikasi pemodelan, melalui rantaian percetakan 3D sebagai STL, muncul dalam aplikasi web sebagai glTF, dan berakhir dalam alat pembuatan aditif sebagai 3MF. Setiap format melayani audiens yang berbeza dan alat hiliran yang berbeza, dan penukaran antara mereka adalah sesuatu yang kebanyakan rantaian 3D perlu tangani dengan boleh dipercayakan.
Python adalah pilihan semula jadi untuk kerja ini: skrip shell terlalu rapuh, dan integrasi alat DCC (digital content creation) penuh terlalu berat untuk pemprosesan kelompok. Apa yang anda perlukan ialah perpustakaan yang dapat memuatkan mana-mana format ini, memberikan graf adegan yang konsisten, dan menulis kembali ke mana-mana format sasaran tanpa memerlukan GUI atau pemacu grafik.
Aspose.3D FOSS untuk Python (aspose-3d-foss, lesen MIT) menutup jurang itu. Panduan ini menunjukkan laluan penukaran yang paling biasa dengan contoh kod lengkap yang boleh dijalankan.
Format Apa Yang Disokong oleh Aspose.3D FOSS?
| Format | Sambungan(s) | Muat | Simpan | Kes Penggunaan Biasa |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Yes | Yes | Pertukaran dari alat pemodelan; .mtl fail bahan disokong |
| STL | .stl | Yes | Yes | Pencetakan 3D, eksport CAD; varian binari dan ASCII |
| glTF 2.0 / GLB | .gltf, .glb | Yes | Yes | Penonton web, enjin permainan; GLB ialah varian binari berdiri sendiri |
| COLLADA | .dae | Yes | Yes | Import dari alat animasi; ColladaSaveOptions menyokong eksport |
| 3MF | .3mf | Yes | Yes | Pembuatan tambahan, metadata cetakan lebih kaya berbanding STL |
Pengesanan format adalah automatik berdasarkan sambungan fail. Kelas pilihan khusus format (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) tersedia apabila anda memerlukan kawalan terperinci.
Nota mengenai FBX: Perpustakaan ini menyertakan tokeniser FBX separa untuk import. FBX tidak disyorkan untuk aliran kerja penukaran produksi dalam keluaran ini; gunakan OBJ atau glTF sebagai format antara sebagai gantinya.
OBJ ke STL: Menyiapkan Model untuk Pencetakan 3D
OBJ ialah format output yang paling biasa daripada alat pemodelan dan pemahatan. STL ialah lingua franca bagi pemotong cetakan 3D. Menukar antara keduanya hanya memerlukan satu panggilan.
from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
opts = StlSaveOptions()
scene.save("model.stl", opts)
STL hanya mengekod muka segitiga. Jika fail OBJ anda mengandungi muka kuad atau n‑gon, pengeksport akan menjanakan segitiga secara automatik sebelum menulis. Jika anda ingin mengawal penjanakan segitiga secara eksplisit sebelum menyimpan, panggil mesh.triangulate() pada setiap mesh dalam adegan:
from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
def triangulate_all(node):
if isinstance(node.entity, Mesh):
# entity setter clears existing entities and sets the new one
node.entity = node.entity.triangulate()
for child in node.child_nodes:
triangulate_all(child)
triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())
OBJ ke glTF: Mengeksport untuk Web dan Enjin Permainan
glTF 2.0 ialah format pertukaran pilihan untuk perender masa nyata, penonton WebGL, dan enjin permainan seperti Babylon.js, Three.js, dan Unity. GLB (varian binari) membungkus geometri, tekstur, dan bahan ke dalam satu fail berdiri sendiri, yang lebih mudah disajikan melalui HTTP.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("model.obj")
##Save as JSON-based glTF (external buffer)
opts_gltf = GltfSaveOptions()
scene.save("model.gltf", opts_gltf)
##Save as self-contained GLB binary: preferred for web delivery
scene.save("model.glb", GltfSaveOptions())
Format disimpulkan daripada sambungan fail: .gltf menghasilkan pasangan JSON+binary-buffer; .glb menghasilkan binari satu fail. Data bahan OBJ (LambertMaterial, PhongMaterial) dibawa ke representasi bahan glTF PBR di mana setara wujud.
STL ke glTF: Dari Pengimbas atau Output CAD ke Web
Fail STL daripada pengimbas 3D dan sistem CAD adalah input biasa yang perlu dijadikan boleh dilihat di web. STL hanya mengandungi geometri segitiga dan tiada data bahan, jadi penukaran adalah mudah.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Jika STL dihasilkan oleh alat CAD dengan sistem koordinat yang tidak biasa (Z-up berbanding Y-up), anda boleh memeriksa dan membetulkan transformasi nod akar sebelum menyimpan:
import math
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("cad_export.stl")
# Rotate -90 degrees around X to convert Z-up to Y-up
# set_euler_angles takes radians, not degrees
root = scene.root_node
root.transform.set_euler_angles(-math.pi / 2, 0.0, 0.0)
scene.save("cad_export_yup.glb", GltfSaveOptions())
glTF ke 3MF: Persiapan untuk Pembuatan Aditif
3MF adalah format percetakan 3D moden yang disokong oleh Konsortium 3MF. Ia menyokong metadata yang lebih kaya berbanding STL (warna, penetapan bahan, arahan pembinaan) dan diterima oleh perisian pemotong seperti PrusaSlicer dan Bambu Studio. Jika anda menghantar model dari penonton web ke dalam aliran kerja percetakan, menukar GLB kepada 3MF adalah langkah yang berguna.
from aspose.threed import Scene
from aspose.threed import FileFormat
from aspose.threed.formats import SaveOptions
scene = Scene.from_file("model.glb")
scene.save("model.3mf")
Format 3MF dikesan secara automatik daripada sambungan .3mf. Untuk kawalan eksplisit, hantarkan satu contoh SaveOptions yang dikonfigurasikan untuk 3MF.
Corak Penukaran Pukal
Dalam praktiknya, tugas penukaran beroperasi pada direktori fail berbanding fail individu. Corak berikut mengendalikan folder fail OBJ dan menukar setiap satu kepada GLB, dengan pengendalian ralat per‑fail supaya satu fail rosak tidak menghentikan keseluruhan proses.
import os
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
input_dir = "./obj_files"
output_dir = "./glb_files"
os.makedirs(output_dir, exist_ok=True)
opts = GltfSaveOptions()
results = {"ok": [], "failed": []}
for filename in os.listdir(input_dir):
if not filename.lower().endswith(".obj"):
continue
src = os.path.join(input_dir, filename)
stem = os.path.splitext(filename)[0]
dst = os.path.join(output_dir, stem + ".glb")
try:
scene = Scene.from_file(src)
scene.save(dst, opts)
results["ok"].append(filename)
print(f"OK {filename} -> {stem}.glb")
except Exception as exc:
results["failed"].append((filename, str(exc)))
print(f"ERR {filename}: {exc}")
print(f"\n{len(results['ok'])} converted, {len(results['failed'])} failed.")
if results["failed"]:
for name, reason in results["failed"]:
print(f" {name}: {reason}")
Corak ini berkembang secara semula jadi kepada pasangan format sumber/sasaran lain: ubah penapis sambungan dan kelas SaveOptions untuk sebarang kombinasi dalam jadual sokongan di atas.
Kesimpulan
Aspose.3D FOSS untuk Python memudahkan penukaran format: muat dengan Scene.from_file, secara pilihan periksa atau ubah suai graf adegan, kemudian simpan dengan SaveOptions yang sesuai. Perpustakaan mengendalikan triangulasi, normalisasi koordinat, dan keanehan khusus format secara dalaman.
Untuk senarai lengkap kelas dan kaedah, lihat Rujukan API. Untuk mendalami model graf adegan (nod, mesh, transformasi), lihat:
- Kelas Scene: memuat, menyimpan, dan metadata peringkat adegan
- Kelas Node: hierarki, transformasi, lampiran entiti
- Kelas Mesh: data verteks, poligon, elemen verteks
- Cara Memuat Model 3D dalam Python
- PyPI: aspose-3d-foss