Ievads
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 ir dabiski piemērots šim darbam: čaulas skripti ir pārāk trausli, un pilnas DCC (digital content creation) rīku integrācijas ir pārāk smagas grupveida apstrādei. Jums vajag bibliotēku, kas spēj ielādēt jebkuru no šiem formātiem, nodrošina konsekventu ainas grafu un var izrakstīt atpakaļ uz jebkuru mērķa formātu, neprasot GUI vai grafikas draiveri.
Aspose.3D FOSS priekš Python (aspose-3d-foss, MIT licence) aizpilda šo plaisu. Šis ceļvedis parāda visbiežākos konversijas ceļus ar pilnīgiem, izpildāmiem koda piemēriem.
Kādus formātus atbalsta Aspose.3D FOSS?
| Formāts | Extension(s) | Ielādēt | Saglabāt | Parasts lietošanas gadījums |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Jā | Jā | Apmaiņa no modelēšanas rīkiem; .mtl materiālu faili atbalstīti |
| STL | .stl | Jā | Jā | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Jā | Jā | Tīmekļa skatītāji, spēļu dzinēji; GLB ir pašpietiekama binārā versija |
| COLLADA | .dae | Jā | Jā | Importēt no animācijas rīkiem; ColladaSaveOptions atbalsta eksportu |
| 3MF | .3mf | Jā | Jā | Adītīvā ražošana, bagātāki drukas metadati nekā STL |
Formāta noteikšana ir automātiska, pamatojoties uz faila paplašinājumu. Formātam specifiskas opciju klases (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) ir pieejami, ja jums ir nepieciešama smalka vadība.
Piezīme par FBX: Bibliotēka ietver daļēju FBX tokenizētāju importam. FBX šajā izlaidumā nav ieteicams ražošanas konvertēšanas darbplūsmām; tā vietā izmantojiet OBJ vai glTF kā starpposma formātus.
OBJ uz STL: Modeļa sagatavošana 3D drukāšanai
OBJ ir visizplatītākais izvades formāts no modelēšanas un skulptūras rīkiem. STL ir 3D drukāšanas sliceru kopvaloda. Pārveidošana starp tiem ir viena funkcija.
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 kodē tikai trīsstūra sejas. Ja jūsu OBJ fails satur kvadrātveida vai n-gona sejas, eksportētājs tās automātiski trīsstūruveido pirms rakstīšanas. Ja vēlaties kontrolēt trīsstūruveidošanu tieši pirms saglabāšanas, izsauciet mesh.triangulate() katram mesh ainas:
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 uz glTF: Eksportēšana tīmeklim un spēļu dzinējiem
glTF 2.0 ir vēlamais apmaiņas formāts reāllaika renderētājiem, WebGL skatītājiem un spēļu dzinējiem, piemēram, Babylon.js, Three.js un Unity. GLB (binārā variante) pakotē ģeometriju, tekstūras un materiālus vienā pašpietiekamā failā, kas ir vieglāk piegādājams caur 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āts tiek noteikts no faila paplašinājuma: .gltf izveido JSON+binārā bufera pāri; .glb izveido vienas faila bināru. OBJ materiālu dati (LambertMaterial, PhongMaterial) tiek pārvadīti uz glTF PBR materiāla attēlojumu, kur pastāv ekvivalents.
STL uz glTF: No skenera vai CAD izvades uz tīmekli
STL faili no 3D skeneriem un CAD sistēmām ir bieži izmantoti ievades dati, kas jāpadara skatāmi tīmeklī. STL satur tikai trīsstūra ģeometriju un nav materiālu datu, tāpēc konvertēšana ir vienkārša.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ja STL tika izveidots ar CAD rīku, kuram ir neparasta koordinātu sistēma (Z‑up pret Y‑up), varat pārbaudīt un koriģēt saknes mezgla transformāciju pirms saglabāšanas:
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 uz 3MF: Sagatavošana pievienošanas ražošanai
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")
3MF formāts tiek automātiski noteikts no .3mf paplašinājuma. Lai iegūtu precīzu kontroli, nododiet SaveOptions instanci, kas konfigurēta 3MF.
Masveida konvertēšanas paraugs
Praktiskā lietā konvertēšanas uzdevumi darbojas ar direktorijām, nevis ar atsevišķiem failiem. Zemāk esošais paraugs apstrādā OBJ failu mapi un konvertē katru no tiem uz GLB, ar kļūdu apstrādi katram failam, lai viens nepareizs fails neatceltu visu izpildi.
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}")
Šis modelis dabiski paplašinās uz citām avota/mērķa formāta pāriem: mainiet paplašinājuma filtru un SaveOptions klasi jebkurai kombinācijai atbalsta tabulā iepriekš.
Secinājums
Aspose.3D FOSS priekš Python padara formāta konvertēšanu vienkāršu: ielādējiet ar Scene.from_file, pēc izvēles pārbaudiet vai modificējiet ainas grafu, pēc tam saglabājiet ar atbilstošo SaveOptions.Bibliotēka iekšēji apstrādā trīsstūra sadalīšanu, koordinātu normalizāciju un formāta specifiskās īpatnības.
Lai iegūtu pilnu klašu un metožu sarakstu, skatiet API atsauce. Lai iegremdētos dziļāk ainas grafu modelī (mezgli, tīklu, transformācijas), skatiet:
- Klase Scene: ielāde, saglabāšana un ainas līmeņa metadati
- Klase Node: hierarhija, transformācijas, vienību piesaiste
- Klase Mesh: virsotnes dati, daudzstūri, virsotnes elementi
- Kā: Failu ielāde: Kā ielādēt 3D modeļus Python
- PyPI: aspose-3d-foss uz PyPI