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?

FormatEkstensi(s)MuatSimpanKasus Penggunaan Umum
Wavefront OBJ.objYesYesPertukaran dari alat pemodelan; file material .mtl didukung
STL.stlYesYesPencetakan 3D, ekspor CAD; varian biner dan ASCII
glTF 2.0 / GLB.gltf, .glbYesYesPenampil web, mesin game; GLB adalah varian biner yang berdiri sendiri
COLLADA.daeYesYesImpor dari alat animasi; ColladaSaveOptions mendukung ekspor
3MF.3mfYesYesManufaktur 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: