Bevezetés
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.
A Python természetes választás ehhez a feladathoz: a shell szkriptek túl törékenyek, és a teljes DCC (digital content creation) eszközintegrációk túl nehezek a kötegelt feldolgozáshoz. Amire szükséged van, az egy könyvtár, amely képes betölteni bármelyik formátumot, egységes jelenetgrafot biztosít, és visszaírni bármely célformátumba anélkül, hogy GUI-ra vagy grafikus driverre lenne szükség.
Aspose.3D nyílt forráskódú szoftver Python (aspose-3d-foss, MIT licenc) lefedi ezt a hiányt. Ez az útmutató bemutatja a leggyakoribb konverziós útvonalakat teljes, futtatható kódrészletekkel.
Mely formátumokat támogatja a Aspose.3D FOSS?
| Formátum | Extension(s) | Betöltés | Mentés | Általános felhasználási eset |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Igen | Igen | Átvitel modellező eszközökből; .mtl anyagfájlok támogatottak |
| STL | .stl | Igen | Igen | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Igen | Igen | Webes megjelenítők, játékmotorok; a GLB az önálló bináris változat |
| COLLADA | .dae | Igen | Igen | Importálás animációs eszközökből; ColladaSaveOptions támogatja az exportálást |
| 3MF | .3mf | Igen | Igen | Additív gyártás, gazdagabb nyomtatási metaadatok, mint az STL |
A formátumdetektálás automatikus a fájlkiterjesztés alapján. Formátum-specifikus opcióosztályok (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) érhetők el, ha finomhangolt vezérlésre van szükség.
Megjegyzés az FBX-ről: A könyvtár részleges FBX tokenizálót tartalmaz az importáláshoz. Az FBX nem ajánlott a termelési konverziós munkafolyamatokhoz ebben a kiadásban; helyette használjon OBJ vagy glTF köztes formátumokat.
OBJ → STL: Modell előkészítése 3D nyomtatáshoz
Az OBJ a leggyakoribb kimeneti formátum a modellező és szobrászati eszközökből. Az STL a 3D nyomtatási szeletelők közös nyelve. Közöttük a konvertálás egyetlen hívás.
from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
opts = StlSaveOptions()
scene.save("model.stl", opts)
Az STL csak háromszög felületeket kódol. Ha az OBJ fájlja négyoldalú vagy n‑gon felületeket tartalmaz, az exportáló automatikusan háromszögezi őket írás előtt. Ha a háromszögezést kifejezetten szeretné szabályozni mentés előtt, hívja meg mesh.triangulate() minden hálón a jelenetben:
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 → glTF: Exportálás webhez és játék motorokhoz
A glTF 2.0 a preferált csereformátum a valós idejű renderelők, WebGL nézők és olyan játék motorok számára, mint a Babylon.js, Three.js és Unity. A GLB (a bináris változat) a geometriát, textúrákat és anyagokat egyetlen önálló fájlba csomagolja, ami könnyebb HTTP-n keresztül kiszolgálni.
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())
A formátum a fájlkiterjesztésből következtethető: .gltf a JSON+bináris-puffer párost állítja elő; .glb a egyfájlos binárist állítja elő. OBJ anyagadatok (LambertMaterial, PhongMaterial) átkerül a glTF PBR anyagábrázolásba, ahol ekvivalens létezik.
STL → glTF: Szkenner vagy CAD kimenetből a webre
A 3D szkennerek és CAD rendszerek által előállított STL fájlok gyakori bemenetek, amelyeket webes megjelenítésre kell alakítani. Az STL csak háromszög geometriát tartalmaz, anyagadatok nélkül, így a konverzió egyszerű.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ha az STL-t egy CAD eszköz szokatlan koordináta-rendszerrel (Z-felfelé vs Y-felfelé) állította elő, akkor a mentés előtt ellenőrizheted és javíthatod a gyökércsomópont transzformációját:
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 to 3MF: Additív Gyártásra való előkészítés
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")
A 3MF formátum automatikusan felismerhető a .3mf kiterjesztésből. Kifejezett vezérléshez adjon át egy SaveOptions példány konfigurálva a 3MF-hez.
Kötegelt konverzió mintája
Gyakorlatban a konverziós feladatok könyvtárakban lévő fájlokon dolgoznak, nem egyedi fájlokon. Az alábbi minta egy OBJ fájlokból álló mappát kezel, és mindegyiket GLB-re konvertálja, fájlonkénti hibakezeléssel, így egyetlen hibás fájl sem szakítja meg a teljes futást.
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}")
Ez a minta természetesen kiterjeszthető más forrás/cél formátumpárokra: módosítsa a kiterjesztés szűrőt és a SaveOptions osztályt bármely kombinációhoz a fenti támogatási táblázatban.
Összegzés
Aspose.3D FOSS a Python számára egyszerűvé teszi a formátumkonverziót: betöltés a Scene.from_file, opcionálisan ellenőrizze vagy módosítsa a jelenet gráfot, majd mentse a megfelelő SaveOptions.A könyvtár belsőleg kezeli a háromszögelést, a koordináta normalizálást és a formátum-specifikus sajátosságokat.
A teljes osztály- és metóduslista megtekintéséhez lásd a API Referenciát. A jelenet gráf modelljének (csomópontok, hálók, transzformációk) mélyebb megismeréséhez lásd:
- Scene osztály: betöltés, mentés és jelenetszintű metaadatok
- Node osztály: hierarchia, transzformációk, entitás csatolás
- Mesh osztály: csúcspont adatok, poligonok, csúcspont elemek
- 3D modellek betöltése Python-ban
- PyPI: aspose-3d-foss