Pendahuluan
Konten 3D jarang tetap dalam satu format sepanjang siklus hidupnya. Sebuah model dapat berasal sebagai file OBJ yang diekspor dari aplikasi pemodelan, melewati pipeline pencetakan 3D sebagai STL, muncul dalam aplikasi web sebagai glTF, dan berakhir di alat manufaktur aditif sebagai 3MF. Setiap format melayani audiens yang berbeda dan alat hilir yang berbeda, dan konversi di antara mereka adalah sesuatu yang perlu ditangani secara andal oleh sebagian besar pipeline 3D.
Python adalah pilihan alami untuk pekerjaan ini: skrip shell terlalu rapuh, dan integrasi alat DCC (digital content creation) penuh terlalu berat untuk pemrosesan batch. Apa yang Anda butuhkan adalah perpustakaan yang dapat memuat semua format ini, memberikan grafik adegan yang konsisten, dan menulis kembali ke format target apa pun tanpa memerlukan GUI atau driver grafis.
Aspose.3D FOSS for Python (aspose-3d-foss, lisensi MIT) menutup kesenjangan tersebut. Panduan ini menunjukkan jalur konversi yang paling umum dengan contoh kode lengkap yang dapat dijalankan.
Format Apa yang Didukung Aspose.3D FOSS?
| Format | Ekstensi(s) | Muat | Simpan | Kasus Penggunaan Umum |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Yes | Yes | Pertukaran dari alat pemodelan; file material .mtl didukung |
| STL | .stl | Yes | Yes | Pencetakan 3D, ekspor CAD; varian biner dan ASCII |
| glTF 2.0 / GLB | .gltf, .glb | Yes | Yes | Penampil web, mesin game; GLB adalah varian biner yang berdiri sendiri |
| COLLADA | .dae | Yes | Yes | Impor dari alat animasi; ColladaSaveOptions mendukung ekspor |
| 3MF | .3mf | Yes | Yes | Manufaktur aditif, metadata cetak yang lebih kaya dibandingkan STL |
Deteksi format bersifat otomatis berdasarkan ekstensi file. Kelas opsi khusus format (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) tersedia ketika Anda memerlukan kontrol yang sangat detail.
Catatan tentang FBX: Perpustakaan menyertakan tokenizer FBX parsial untuk impor. FBX tidak direkomendasikan untuk alur kerja konversi produksi dalam rilis ini; gunakan OBJ atau glTF sebagai format perantara.
OBJ ke STL: Menyiapkan Model untuk Pencetakan 3D
OBJ adalah format output paling umum dari alat pemodelan dan pemahatan. STL adalah bahasa universal bagi slicer pencetakan 3D. Mengonversi di 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 mengkodekan wajah segitiga. Jika file OBJ Anda berisi wajah quad atau n‑gon, pengekspor akan secara otomatis melakukan triangulasi sebelum menulis. Jika Anda ingin mengontrol triangulasi 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: Mengekspor untuk Web dan Mesin Game
glTF 2.0 adalah format pertukaran yang disukai untuk renderer waktu nyata, penampil WebGL, dan mesin game seperti Babylon.js, Three.js, dan Unity. GLB (varian biner) mengemas geometri, tekstur, dan material ke dalam satu file mandiri, 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())
Formatnya disimpulkan dari ekstensi file: .gltf menghasilkan pasangan JSON+binary-buffer; .glb menghasilkan binary satu file. Data material OBJ (LambertMaterial, PhongMaterial) dibawa ke representasi material PBR glTF di mana ada padanan yang setara.
STL ke glTF: Dari Output Scanner atau CAD ke Web
File STL dari pemindai 3D dan sistem CAD adalah input umum yang perlu dibuat dapat dilihat di web. STL hanya berisi geometri segitiga dan tidak memiliki data material, sehingga konversinya sederhana.
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 vs Y-up), Anda dapat memeriksa dan memperbaiki transformasi node 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: Mempersiapkan Manufaktur Aditif
3MF adalah format pencetakan 3D modern yang didukung oleh 3MF Consortium. Format ini mendukung metadata yang lebih kaya dibandingkan STL (warna, penugasan material, instruksi pembangunan) dan diterima oleh perangkat lunak slicer seperti PrusaSlicer dan Bambu Studio. Jika Anda mengirimkan model dari penampil web ke alur kerja pencetakan, mengonversi GLB ke 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 terdeteksi secara otomatis dari ekstensi .3mf. Untuk kontrol eksplisit, berikan instance SaveOptions yang dikonfigurasi untuk 3MF.
Pola Konversi Batch
Secara praktik, tugas konversi beroperasi pada direktori file daripada file individual. Pola berikut menangani folder berisi file OBJ dan mengonversi masing‑masing menjadi GLB, dengan penanganan kesalahan per‑file sehingga satu file yang buruk tidak menghentikan seluruh 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}")
Pola ini secara alami dapat diperluas ke pasangan format sumber/target lainnya: ubah filter ekstensi dan kelas SaveOptions untuk kombinasi apa pun dalam tabel dukungan di atas.
Kesimpulan
Aspose.3D FOSS for Python mempermudah konversi format: muat dengan Scene.from_file, secara opsional periksa atau modifikasi grafik adegan, kemudian simpan dengan SaveOptions yang sesuai. Perpustakaan menangani triangulasi, normalisasi koordinat, dan keanehan khusus format secara internal.
Untuk daftar lengkap kelas dan metode, lihat API Reference. Untuk mempelajari lebih dalam model grafik adegan (node, mesh, transform), lihat:
- Kelas Scene: memuat, menyimpan, dan metadata tingkat scene
- Kelas Node: hierarki, transformasi, lampiran entitas
- Kelas Mesh: data vertex, poligon, elemen vertex
- Cara Memuat Model 3D di Python
- PyPI: aspose-3d-foss