Въведение
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 е естествен избор за тази работа: обвивните скриптове са твърде крехки, а пълните интеграции с DCC (digital content creation) инструменти са твърде тежки за пакетна обработка. Това, от което се нуждаете, е библиотека, която може да зареди който и да е от тези формати, да ви предостави последователен граф на сцената и да запише обратно във всеки целеви формат без да изисква GUI или графичен драйвер.
Aspose.3D FOSS за Python (aspose-3d-foss, лиценз MIT) запълва тази празнина. Това ръководство показва най-често срещаните пътища за конвертиране с пълни, изпълними примерни кодове.
Кои формати поддържа Aspose.3D FOSS?
| Формат | Extension(s) | Зареждане | Запис | Обичаен случай на употреба |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Да | Да | Обмяна от инструменти за моделиране; .mtl поддържани файлове за материали |
| STL | .stl | Да | Да | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Да | Да | Уеб прегледачи, игрови енджини; GLB е самостоятелният бинарен вариант |
| COLLADA | .dae | Да | Да | Импорт от анимационни инструменти; ColladaSaveOptions поддържа експортиране |
| 3MF | .3mf | Да | Да | Адитивно производство, по-богати метаданни за печат от STL |
Откриването на формата е автоматично въз основа на разширението на файла. Класовете за опции, специфични за формата (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) са налични, когато се нуждаете от фино настройване.
Бележка относно FBX: Библиотеката включва частичен FBX токенизатор за импортиране. FBX не се препоръчва за производствени процеси на конверсия в това издание; вместо това използвайте OBJ или glTF като междинни формати.
OBJ към STL: Подготовка на модел за 3D печат
OBJ е най-често използваният изходен формат от инструменти за моделиране и скулптиране. STL е лингва франка на софтуерите за нарязване при 3D печат. Конвертирането между тях се извършва с едно извикване.
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 кодира само триъгълни лица. Ако вашият OBJ файл съдържа четириъгълни или n‑гранни лица, експортерът ги триангулира автоматично преди запис. Ако искате да контролирате триангулацията изрично преди запазване, извикайте mesh.triangulate() на всеки mesh в сцената:
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: Експортиране за уеб и игрови енджини
glTF 2.0 е предпочитаният междинен формат за рендеръри в реално време, WebGL прегледачи и игрови енджини като Babylon.js, Three.js и Unity. GLB (бинарният вариант) пакетира геометрия, текстури и материали в един самостоятелен файл, което е по‑лесно за обслужване през 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())
Форматът се извлича от разширението на файла: .gltf генерира двойката JSON+binary‑buffer; .glb произвежда еднофайловия бинарен файл. Данните за материалите в OBJ (LambertMaterial, PhongMaterial) се предава към представянето на материалите в glTF PBR, където съществува еквивалент.
STL към glTF: От скенер или CAD изход към уеб
STL файловете от 3D скенери и CAD системи са чести входни данни, които трябва да бъдат направени видими в уеб. STL съдържа само триъгълна геометрия и няма материални данни, така че конвертирането е просто.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ако STL е създаден от CAD инструмент с необичаен координатен система (Z‑up срещу Y‑up), можете да проверите и коригирате трансформацията на кореновия възел преди запазване:
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: Подготовка за адитивно производство
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 се открива автоматично от .3mf разширението. За изрично управление, предайте SaveOptions инстанция, конфигурирана за 3MF.
Шаблон за пакетно конвертиране
На практика задачите за конвертиране работят с директории от файлове, а не с отделни файлове. Следният шаблон обработва папка с OBJ файлове и конвертира всеки от тях към GLB, като осигурява обработка на грешки за всеки файл, така че един лош файл да не прекъсне цялото изпълнение.
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}")
Този модел се разширява естествено към други двойки източник/цел формати: променете филтъра за разширения и SaveOptions клас за всяка комбинация в таблицата за поддръжка по-горе.
Заключение
Aspose.3D FOSS for Python прави конвертирането на формати просто: заредете с Scene.from_file, по желание инспектирайте или променете графа на сцената, след което запазете с подходящия SaveOptions. Библиотеката се грижи за триангулацията, нормализирането на координатите и специфичните за формата особености вътрешно.
За пълен списък на класовете и методите, вижте API справка. За по‑задълбочено разбиране на модела на графа на сцената (възли, мрежи, трансформации), вижте:
- Клас Scene: зареждане, запазване и метаданни на ниво сцена
- Клас Node: йерархия, трансформации, прикачване на обект
- Клас Mesh: вершинни данни, полигони, елементи на върховете
- Как да: Зареждане на файлове: Как да заредите 3D модели в Python
- PyPI: aspose-3d-foss в PyPI