Įvadas
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 yra natūralus pasirinkimas šiam darbui: apvalkalo scenarijai yra per trapūs, o pilnos DCC (digital content creation) įrankių integracijos – per sunkios paketiniam apdorojimui. Jums reikia bibliotekos, kuri galėtų įkelti bet kurį iš šių formatų, suteikti nuoseklų scenos grafą ir išrašyti atgal į bet kurį tikslinį formatą, nereikalaujant GUI ar grafikos tvarkyklės.
Aspose.3D FOSS skirta Python (aspose-3d-foss, MIT licencija) užpildo tą spragą. Ši vadovas rodo dažniausiai pasitaikančius konversijos kelius su pilnais, vykdomais kodo pavyzdžiais.
Kokius formatus palaiko Aspose.3D FOSS?
| Formatas | Extension(s) | Įkelti | Išsaugoti | Įprastas naudojimo atvejis |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Taip | Taip | Keitimasis iš modeliavimo įrankių; .mtl palaikomi medžiagų failai |
| STL | .stl | Taip | Taip | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Taip | Taip | Žiniatinklio peržiūros programos, žaidimų varikliai; GLB yra savarankiška binarinė versija |
| COLLADA | .dae | Taip | Taip | Importuoti iš animacijos įrankių; ColladaSaveOptions palaiko eksportą |
| 3MF | .3mf | Taip | Taip | Pridėtinė gamyba, turtingesnė spausdinimo metaduomenų informacija nei STL |
Formato aptikimas yra automatinis pagal failo plėtinį. Formatai specifinės parinkčių klasės (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) yra prieinamos, kai reikia smulkių valdymo kontrolės.
Pastaba apie FBX: Biblioteka apima dalinį FBX tokenizatorių importui. FBX nerekomenduojama naudoti gamybos konvertavimo darbo srautams šioje versijoje; vietoj to naudokite OBJ arba glTF kaip tarpinės formatus.
OBJ į STL: Modelio paruošimas 3D spausdinimui
OBJ yra dažniausia išvesties formatas iš modeliavimo ir skulptūros įrankių. STL yra 3D spausdinimo pjaustymo programų bendroji kalba. Konvertavimas tarp jų atliekamas vienu iškvietimu.
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 koduoja tik trikampių veidus. Jei jūsų OBJ faile yra keturkampių arba n-kampų veidų, eksportuotojas juos automatiškai trianguliuoja prieš rašant. Jei norite iš anksto valdyti trianguliavimą, iškvieskite mesh.triangulate() kiekvienam tinklui (mesh) scenoje:
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: Eksportavimas į Web ir žaidimų variklius
glTF 2.0 yra pageidaujama keitimosi formatas realaus laiko rendereriams, WebGL peržiūros programoms ir žaidimų varikliams, tokiems kaip Babylon.js, Three.js ir Unity. GLB (binari variantas) supakuoja geometriją, tekstūras ir medžiagas į vieną savarankišką failą, kurį lengviau teikti per 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())
Formatas nustatomas iš failo plėtinio: .gltf sukuria JSON+binary-buffer porą; .glb sukuria vieno failo binarinį duomenį. OBJ medžiagos duomenys (LambertMaterial, PhongMaterial) perduodami į glTF PBR medžiagos atvaizdavimą, kur yra atitikmuo.
STL į glTF: Nuo skenerio arba CAD išvesties į žiniatinklį
STL failai iš 3D skenerių ir CAD sistemų yra įprasti įvesties duomenys, kuriuos reikia padaryti web-viewable. STL talpina tik trikampės geometrijos duomenis ir neturi medžiagų duomenų, todėl konvertavimas yra paprastas.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Jei STL buvo sukurtas CAD įrankio, turinčio neįprastą koordinačių sistemą (Z‑aukštyje vs Y‑aukštyje), galite patikrinti ir pataisyti šaknies mazgo transformaciją prieš išsaugant:
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 į 3MF: Paruošimas adityvinei gamybai
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 formatas automatiškai aptinkamas iš .3mf plėtinio. Norint aiškiai valdyti, perduokite SaveOptions instanciją, sukonfigūruotą 3MF.
Masinio konvertavimo šablonas
Praktikoje konvertavimo užduotys veikia su failų katalogais, o ne atskirais failais. Žemiau pateiktas šablonas apdoroja OBJ failų aplanką ir konvertuoja kiekvieną į GLB, su klaidų tvarkymu kiekvienam failui, kad vienas blogas failas nepertrauktų viso proceso.
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 natūraliai plečiamas į kitas šaltinio/tikslo formato poras: pakeiskite plėtinio filtrą ir SaveOptions klasę bet kuriai kombinacijai aukščiau pateiktoje palaikymo lentelėje.
Išvada
Aspose.3D FOSS for Python palengvina formato konvertavimą: įkelkite su Scene.from_file, pasirinktinai peržiūrėkite arba modifikuokite scenos grafiką, tada išsaugokite su tinkamu SaveOptions. Biblioteka viduje tvarko trianguliavimą, koordinatų normalizavimą ir formatui būdingus niuansus.
Visam klasės ir metodų sąrašui, žiūrėkite API nuoroda. Norėdami giliau susipažinti su scenos grafiko modeliu (mazgais, tinklais, transformacijomis), žiūrėkite:
- Klasė Scene: įkėlimas, išsaugojimas ir scenos lygmens metaduomenys
- Klasė Node: hierarchija, transformacijos, objektų priskyrimas
- Klasė Mesh: viršūnių duomenys, poligonai, viršūnių elementai
- Kaip įkelti 3D modelius į Python
- PyPI: aspose-3d-foss