Úvodní článek
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 přirozeným vhodným prostředkem pro tuto práci: skripty shellů jsou příliš křehké a plné integrace nástrojů DCC (digitální tvorba obsahu) jsou na batch zpracování příliš těžké. Co potřebujete, je knihovna, která může načíst jakýkoli z těchto formátů, poskytnout vám konzistentní grafický graf scény a napsat zpět do jakéhokoli cílového formátu bez nutnosti GUI nebo grafikového ovladače.
3D FOSS pro Python (aspose-3d-foss,Tato příručka ukazuje nejčastější konversiční cesty s kompletními, spustitelnými příklady kódu.
Jaké formáty podporuje Aspose.3D FOSS?
| Formát | Extension(s) | Náklad | Uložení | Případ běžného použití |
|---|---|---|---|---|
| OBJ | .obj | Ano , ano . | Ano , ano . | výměna z modelovacích nástrojů; .mtl podporované materiální soubory |
| STL | .stl | Ano , ano . | Ano , ano . | 3D printing, CAD export; binary and ASCII variants |
| glTF | .gltf, .glb | Ano , ano . | Ano , ano . | Webové prohlížeče, herní motory; .glb je samostatná binární varianta, |
| COLLADA | .dae | Ano , ano . | Ano , ano . | Import z animačních nástrojů; ColladaSaveOptions podporuje vývoz |
| 3MF | .3mf | Ano , ano . | Ano , ano . | Aditivní výroba, bohatší metadata než STL |
Detekce formátu je automatická z rozšíření souboru.ObjLoadOptions, StlSaveOptions, GltfSaveOptions) jsou k dispozici, když potřebujete jemně zpracovanou kontrolu.
Poznámka k FBX: Knihovna obsahuje částečný tokenizer FBX pro import. FBx se v tomto vydání nedoporučuje pro pracovní postupy konverze výroby; místo toho použijte OBJ nebo glTF jako meziformáty.
OBJ pro STL: Příprava modelu pro 3D tisk
OBJ je nejběžnější výstupní formát modelovacích a sochařských nástrojů. STL je lingua franca 3D tiskových řezačů . Konverze mezi nimi je jediným volání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 pouze trojúhelníkové tváře. Pokud váš soubor OBJ obsahuje čtyřkolkové nebo n-gonové tvářky, vývozce je automaticky triangulatuje před psaním. Chcete-li kontrolovat triangulaci výslovně před ukládáním, zavolejte: mesh.triangulate() na každém okruhu v scéně:
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):
if isinstance(node.entity, Mesh):
# entity setter clears existing entities and sets the new one
node.entity = node.entity.triangulate()
for child in node.child_nodes:
triangulate_all(child)
triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())
OBJ na glTF: Exportování pro webové a herní motory
glTF 2.0 je preferovaný formát pro výměnu dat pro reálný časové rendery, WebGL diváky a herní motory jako Babylon.js, Three. js a Unity. GLB (binární variant) balí geometrii, textury a materiály do jediného samostatného souboru, který se snadněji obsluhuje přes 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 odvoděn z rozšíření souboru: .gltf vytváří pár JSON+binární buffer; .glb Objektová data (object-material data)LambertMaterial, PhongMaterial) se přenáší do reprezentování materiálu glTF PBR, pokud existuje ekvivalent.
STL na glTF: ze snímku nebo výstupu CAD na web
STL soubory ze 3D skenerů a CAD systémů jsou běžné vstupy, které je třeba udělat prohlížitelné na webu. ST L nese pouze geometrii trojúhelníku a žádné materiální údaje, takže konverze je jednoduchá.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Pokud byl STL vytvořen CAD nástrojem s neobvyklým souřadnicovým systémem (Z-up vs. Y- up), můžete před ukládáním zkontrolovat a opravit transformaci kořenečného uzlu:
import math
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
# set_euler_angles takes radians, not degrees
root = scene.root_node
root.transform.set_euler_angles(-math.pi / 2, 0.0, 0.0)
scene.save("cad_export_yup.glb", GltfSaveOptions())
glTF až 3MF: Příprava na výrobu doplňkových látek
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 detekován automaticky z datového systému. .3mf pro výslovnou kontrolu, předat SaveOptions instanci konfigurovanou pro 3MF.
Vzor konverze šarže
V praxi se konverzní úkoly provádějí na adresárech souborů spíše než jednotlivých souborech. Následující vzor zachází s složkou OBJ souboru a konvertuje každý z nich do GLB, s pro-souborovou manipulací chyb tak, aby jediný špatný soupis nezrušil celý provoz.
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 se přirozeně rozšíří i na jiné páry zdrojových/cílových formátů: změňte filtr pro rozšiřování a nastavení. SaveOptions třída pro jakoukoli kombinaci v výše uvedené podpůrné tabulce.
Výsledky
Aspose.3D FOSS pro Python dělá konverzi formátu jednoduchou: naložit s Scene.from_file, volitelně zkontrolovat nebo upravit graf scény, a pak uložit s příslušným SaveOptions.Knihovna se zabývá triangulací, normalizací souřadnic a zvláštnostmi specifickými pro formát vnitřně.
Úplný seznam tříd a metod viz článek “Klasifikace” v příloze k této knize. Odkaz na API.Pro hloubkování grafického modelu scény (zásady, sítě, transformy) viz:
- Scéna třídy: načítání, ukládání a metadata na úrovni scény
- Člen třídy: hierarchie, transformace, připojení entit
- Třída sítí: údaje o vrcholu, polygony, prvky vrcholů
- Jak načítat 3D modely v Pythonu?
- PyPI: aspose-3d-foss