Uvod
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 prirodan izbor za ovaj posao: shell skripte su previše krhke, a potpune DCC (digital content creation) integracije alata su preteške za grupno procesiranje. Ono što vam treba je biblioteka koja može učitati bilo koji od ovih formata, pružiti vam dosljedni graf scene i zapisati natrag u bilo koji ciljni format bez potrebe za GUI-jem ili grafičkim driverom.
Aspose.3D FOSS za Python (aspose-3d-foss, MIT licenca) premošćuje taj jaz. Ovaj vodič prikazuje najčešće putanje konverzije s potpunim, izvršivim primjerima koda.
Koje formate podržava Aspose.3D FOSS?
| Format | Extension(s) | Učitaj | Spremi | Uobičajeni slučaj upotrebe |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Da | Da | Razmjena iz alata za modeliranje; .mtl podržane datoteke materijala |
| STL | .stl | Da | Da | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Da | Da | Web preglednici, game enginei; GLB je samostalna binarna varijanta |
| COLLADA | .dae | Da | Da | Uvoz iz alata za animaciju; ColladaSaveOptions podržava izvoz |
| 3MF | .3mf | Da | Da | Aditivna proizvodnja, bogatiji metapodaci ispisa od STL-a |
Detekcija formata je automatska na temelju ekstenzije datoteke. Klase opcija specifične za format (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) su dostupne kada trebate finu kontrolu.
Napomena o FBX-u: Biblioteka uključuje djelomični FBX tokenizator za uvoz. FBX se ne preporučuje za proizvodne radne tokove konverzije u ovom izdanju; umjesto toga koristite OBJ ili glTF kao međuformate.
OBJ u STL: Priprema modela za 3D ispis
OBJ je najčešći izlazni format iz alata za modeliranje i skulptiranje. STL je lingua franca slicera za 3D ispis. Pretvaranje između njih je jedan poziv.
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 kodira samo trokutne površine. Ako vaša OBJ datoteka sadrži četverokutne ili n-gon površine, izvoznik ih automatski triangulira prije zapisivanja. Ako želite izričito kontrolirati triangulaciju prije spremanja, pozovite mesh.triangulate() na svakom mrežnom objektu u sceni:
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 u glTF: Izvoz za web i game engineove
glTF 2.0 je preferirani format za razmjenu u real-time renderera, WebGL preglednicima i game engineovima poput Babylon.js, Three.js i Unity. GLB (binarna varijanta) pakira geometriju, teksture i materijale u jednu samostalnu datoteku, što je lakše poslužiti putem HTTP-a.
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 se zaključuje iz ekstenzije datoteke: .gltf generira par JSON+binarnog bafera; .glb generira jedinstvenu binarnu datoteku. OBJ podaci o materijalu (LambertMaterial, PhongMaterial) prenosi se u glTF PBR prikaz materijala gdje postoji ekvivalent.
STL u glTF: Od skenera ili CAD izlaza do weba
STL datoteke iz 3D skenera i CAD sustava su uobičajeni ulazi koji trebaju biti prikazani na webu. STL sadrži samo trokutnu geometriju i nema podatke o materijalu, pa je konverzija jednostavna.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ako je STL proizveden CAD alatom s neobičnim koordinatnim sustavom (Z-up naspram Y-up), možete pregledati i ispraviti transformaciju korijenskog čvora prije spremanja:
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 u 3MF: Priprema za aditivnu proizvodnju
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")
Format 3MF se automatski otkriva iz .3mf ekstenzije. Za izričitu kontrolu, proslijedite a SaveOptions instanca konfigurirana za 3MF.
Uzorak za grupnu konverziju
U praksi, zadaci konverzije rade na direktorijima datoteka, a ne na pojedinačnim datotekama. Sljedeći uzorak obrađuje mapu OBJ datoteka i pretvara svaku u GLB, uz obradu grešaka po datoteci kako jedan loš fajl ne bi prekinuo cijeli proces.
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}")
Ovaj uzorak prirodno se proširuje na druge parove izvornog/ciljnog formata: promijenite filter ekstenzija i SaveOptions klasu za bilo koju kombinaciju u tablici podrške iznad.
Zaključak
Aspose.3D FOSS za Python čini konverziju formata jednostavnom: učitajte s Scene.from_file, po želji pregledajte ili izmijenite graf scene, zatim spremite s odgovarajućim SaveOptions. Biblioteka interno obrađuje triangulaciju, normalizaciju koordinata i specifične osobitosti formata.
Za potpuni popis klasa i metoda, pogledajte API referencu. Za dublje razumijevanje modela grafa scene (čvorovi, mreže, transformacije), pogledajte:
- Klasa Scene: učitavanje, spremanje i metapodaci na razini scene
- Klasa Node: hijerarhija, transformacije, pričvršćivanje entiteta
- Klasa Mesh: podaci vrhova, poligoni, elementi vrhova
- Upute: Učitavanje datoteka: Kako učitati 3D modele u Python
- PyPI: aspose-3d-foss na PyPI