Úvod
3D content rarely stays in a single format for its entire lifetime. A model may originate as an OBJ file exported from a modelling application, travel through a 3D printing pipeline as STL, appear in a web application as glTF, and end up in an additive manufacturing tool as 3MF. Each format serves a different audience and a different downstream tool, and conversion between them is something most 3D pipelines need to handle reliably.
Python je pre túto prácu prirodzenou voľbou: shell skripty sú príliš krehké a plné integrácie DCC (digital content creation) nástrojov sú príliš ťažké pre dávkové spracovanie. Potrebujete knižnicu, ktorá dokáže načítať ktorýkoľvek z týchto formátov, poskytne vám konzistentný graf scény a zapíše späť do akéhokoľvek cieľového formátu bez potreby GUI alebo grafického ovládača.
Aspose.3D FOSS pre Python (aspose-3d-foss, MIT license) pokrýva túto medzeru. Tento sprievodca ukazuje najbežnejšie konverzné cesty s kompletnými, spustiteľnými príkladmi kódu.
Aké formáty podporuje Aspose.3D FOSS?
| Formát | Extension(s) | Načítať | Uložiť | Bežný prípad použitia |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Áno | Áno | Výmenný formát z modelovacích nástrojov; .mtl sú podporované materiálové súbory |
| STL | .stl | Áno | Áno | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Áno | Áno | Webové prehliadače, herné enginy; GLB je samostatná binárna varianta |
| COLLADA | .dae | Áno | Áno | Importovať z animačných nástrojov; ColladaSaveOptions podporuje export |
| 3MF | .3mf | Áno | Áno | Additívna výroba, bohatšie metadáta tlače než STL |
Detekcia formátu je automatická na základe prípony súboru. Formátovo špecifické triedy možností (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) sú k dispozícii, keď potrebujete detailnú kontrolu.
Poznámka k FBX: Knižnica obsahuje čiastočný FBX tokenizér pre import. FBX sa v tomto vydaní neodporúča pre produkčné konverzné pracovné postupy; namiesto toho použite OBJ alebo glTF ako medziformáty.
OBJ na STL: Príprava modelu na 3D tlač
OBJ je najbežnejší výstupný formát z modelovacích a sochárskych nástrojov. STL je lingua franca 3D tlačových slicerov. Konverzia medzi nimi je jediným volaním.
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 kóduje iba trojuholníkové plochy. Ak váš OBJ súbor obsahuje štvoruholníkové alebo n-gónové plochy, exportér ich automaticky trianguluje pred zápisom. Ak chcete kontrolovať trianguláciu explicitne pred uložením, zavolajte mesh.triangulate() na každý mesh v scéne:
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):
for entity in list(node.entities):
if isinstance(entity, Mesh):
tri_mesh = entity.triangulate()
# Attach the triangulated mesh via add_entity
node.add_entity(tri_mesh)
for child in node.child_nodes:
triangulate_all(child)
triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())
OBJ na glTF: Export pre web a herné enginy
glTF 2.0 je preferovaný výmenný formát pre renderery v reálnom čase, WebGL prehliadače a herné enginy ako Babylon.js, Three.js a Unity. GLB (binárna varianta) zabalí geometriu, textúry a materiály do jedného samostatného súboru, čo je jednoduchšie naservírovať cez 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())
Formát je odvodený od prípony súboru: .gltf vytvorí pár JSON+binárny-buffer; .glb vytvorí jednosúborový binárny súbor. OBJ materiálové dáta (LambertMaterial, PhongMaterial) sa prenášajú do glTF PBR materiálovej reprezentácie, kde existuje ekvivalent.
STL na glTF: Od skenera alebo CAD výstupu k webu
STL súbory z 3D skenerov a CAD systémov sú bežné vstupy, ktoré je potrebné sprístupniť pre web. STL obsahuje iba trojuholníkovú geometriu a žiadne materiálové dáta, takže konverzia je jednoduchá.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ak bolo STL vytvorené CAD nástrojom s neobvyklým súradnicovým systémom (Z-up vs Y-up), môžete pred uložením skontrolovať a opraviť transformáciu koreňového uzla:
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
root = scene.root_node
root.transform.set_euler_angles(-90.0, 0.0, 0.0)
scene.save("cad_export_yup.glb", GltfSaveOptions())
glTF na 3MF: Príprava na aditívnu výrobu
3MF is a modern 3D printing format backed by the 3MF Consortium. It supports richer metadata than STL (colour, material assignments, build instructions) and is accepted by slicer software such as PrusaSlicer and Bambu Studio. If you are delivering models from a web viewer into a printing workflow, converting GLB to 3MF is a useful step.
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")
Formát 3MF je detekovaný automaticky z .3mf prípony. Pre explicitnú kontrolu, odovzdajte a SaveOptions inštancia nakonfigurovaná pre 3MF.
Vzor hromadnej konverzie
V praxi konverzné úlohy pracujú s adresármi súborov namiesto jednotlivých súborov. Nasledujúci vzor spracuje priečinok s OBJ súbormi a konvertuje každý z nich na GLB, s ošetrením chýb na úrovni jednotlivých súborov, aby jeden chybný súbor neukončil celý beh.
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}")
Tento vzor sa prirodzene rozširuje na ďalšie páry zdroj/formát cieľa: zmeňte filter prípony a the SaveOptions class pre akúkoľvek kombináciu v tabuľke podpory vyššie.
Záver
Aspose.3D FOSS pre Python robí konverziu formátov jednoduchou: načítajte pomocou Scene.from_file, prípadne skontrolovať alebo upraviť graf scény, potom uložiť s vhodným SaveOptions. Knižnica interným spôsobom spracováva trianguláciu, normalizáciu súradníc a špecifické zvláštnosti formátu.
Pre úplný zoznam tried a metód pozri API Referenciu. Ak chcete podrobnejšie informácie o modeli grafu scény (uzly, siete, transformácie), pozri:
- Trieda Scene: načítanie, ukladanie a metadáta na úrovni scény
- Trieda Node: hierarchia, transformácie, pripojenie entity
- Trieda Mesh: dáta vrcholov, polygóny, prvky vrcholov
- Ako načítať 3D modely v Python
- PyPI: aspose-3d-foss