Į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?

FormatasExtension(s)ĮkeltiIšsaugotiĮprastas naudojimo atvejis
Wavefront OBJ.objTaipTaipKeitimasis iš modeliavimo įrankių; .mtl palaikomi medžiagų failai
STL.stlTaipTaip3D printing, CAD export; binary and ASCII variants
glTF 2.0 / GLB.gltf, .glbTaipTaipŽiniatinklio peržiūros programos, žaidimų varikliai; GLB yra savarankiška binarinė versija
COLLADA.daeTaipTaipImportuoti iš animacijos įrankių; ColladaSaveOptions palaiko eksportą
3MF.3mfTaipTaipPridė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: