Soporte de formatos
Aspose.3D FOSS for Python puede leer y escribir siete formatos 3D usando una única representación de escena en memoria. La biblioteca traduce cada formato a un objeto Scene común al cargar y serializa ese objeto de nuevo al formato de destino al guardar. Esto significa que una escena cargada desde OBJ puede guardarse directamente en glTF sin pasos intermedios de conversión.
Formatos compatibles
| Formato | Extensión | Lectura | Escritura | Clase de opciones | Notas |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Sí | Sí | ObjLoadOptions | .mtl carga de materiales compatible |
| STL (binario) | .stl | Sí | Sí | StlSaveOptions | Lectura binaria y ASCII; guardar por defecto en binario |
| STL (ASCII) | .stl | Sí | Sí | StlSaveOptions | Verificado de ida y vuelta |
| glTF 2.0 | .gltf | Sí | Sí | GltfSaveOptions | Se conserva el grafo completo de la escena, materiales y animaciones |
| GLB (glTF binario) | .glb | Sí | Sí | GltfSaveOptions | Contenedor binario de un solo archivo |
| COLLADA | .dae | Sí | Sí | ColladaLoadOptions / ColladaSaveOptions | Jerarquía de escena y materiales |
| 3MF | .3mf | Sí | Sí | ThreeMfSaveOptions | Formato de fabricación aditiva |
| FBX | .fbx | Parcial | No | N/A | Tokenizador funcionando; el analizador completo está en progreso (no listo para producción) |
Formato OBJ
Wavefront OBJ es el formato de intercambio más ampliamente soportado para mallas estáticas. Aspose.3D FOSS carga la geometría (vértices, normales, coordenadas UV y caras poligonales) y, opcionalmente, el archivo de material complementario .mtl.
ObjLoadOptions
| Property | Type | Default | Description |
|---|---|---|---|
enable_materials | bool | True | Analizar el archivo .mtl referenciado por el encabezado OBJ |
flip_coordinate_system | bool | False | Convertir de Y-up de mano derecha a Z-up de mano derecha |
normalize_normal | bool | True | Normalizar todas las normales de superficie importadas a longitud unitaria |
scale | float | 1.0 | Factor de escala uniforme aplicado a todas las posiciones de vértices |
Cargando un archivo OBJ
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0
scene = Scene()
scene.open("model.obj", options)
print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")Guardando en OBJ
scene.save("output.obj")La exportación OBJ escribe posiciones de vértices y caras de polígonos. Si la escena contiene objetos LambertMaterial o PhongMaterial, la biblioteca escribe automáticamente un archivo complementario .mtl.
Formato STL
STL (STereoLithography) almacena mallas de triángulos como una lista no indexada de facetas. Tanto las variantes binarias como ASCII son compatibles para la lectura; la biblioteca usa binario por defecto al guardar.
StlSaveOptions
StlSaveOptions no tiene campos obligatorios. Instáncialo para pasarlo a scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Ejemplo de ida y vuelta
from aspose.threed import Scene
##Load
scene = Scene.from_file("model.stl")
##Inspect
for node in scene.root_node.child_nodes:
if node.entity:
print(f"{node.name}: {len(node.entity.control_points)} vertices")
##Save
scene.save("roundtrip.stl")STL almacena solo geometría de triángulos, sin normales más allá de la normal de la faceta, sin coordenadas UV, sin materiales y sin jerarquía. Si tu escena contiene cuadriláteros o polígonos de orden superior, se triangulan automáticamente al guardar.
glTF / GLB Formato
glTF 2.0 es el formato recomendado para el intercambio 3D moderno. Preserva el grafo de escena completo (jerarquía de nodos, nodos con nombre, transformaciones), materiales (LambertMaterial, PhongMaterial → conversión a PBR) y clips de animación. GLB es la variante de contenedor binario de un solo archivo.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binarySoporte de material
Los materiales FOSS de Aspose.3D se asignan a glTF pbrMetallicRoughness al exportar:
from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene()
node = scene.root_node.create_child_node("object")
mat = PhongMaterial()
mat.diffuse_color = Vector3(0.8, 0.2, 0.2) # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat
scene.save("colored.gltf")Verificando la salida glTF
import json
with open("output.gltf") as f:
data = json.load(f)
print(f"Asset version : {data['asset']['version']}")
print(f"Nodes : {len(data.get('nodes', []))}")
print(f"Meshes : {len(data.get('meshes', []))}")Formato COLLADA
COLLADA (.dae) es un formato basado en XML que admite jerarquías de escena, materiales, múltiples canales UV y animación esquelética. Aspose.3D FOSS lee y escribe el árbol de nodos completo y las definiciones de materiales.
from aspose.threed import Scene
##Load a COLLADA file
scene = Scene.from_file("model.dae")
##Inspect top-level nodes
for node in scene.root_node.child_nodes:
print(f" {node.name}")
##Save back to COLLADA
scene.save("output.dae")COLLADA es una buena opción cuando necesitas hacer un round‑trip de jerarquías con nodos nombrados y materiales sin pérdida de datos.
3MF Formato
3MF (Formato de Fabricación 3D) está dirigido a flujos de trabajo de fabricación aditiva (impresión 3D). Almacena la geometría de triángulos, el color y los metadatos específicos de impresión en un contenedor basado en ZIP.
from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions
scene = Scene.from_file("part.stl") # Load from STL
opts = ThreeMfSaveOptions()
scene.save("part.3mf", opts) # Write as 3MF3MF es el formato de exportación recomendado al dirigirse a software de laminado (Cura, PrusaSlicer, Bambu Studio, etc.).
Formato FBX
Estado: en progreso (no listo para producción).
El soporte de FBX (.fbx) en Aspose.3D FOSS está actualmente en la etapa de tokenizador. El tokenizador binario de FBX puede analizar la estructura del archivo, pero el analizador completo de nodos, mallas y materiales tiene errores conocidos y no está completo. Los resultados de lectura de FBX deben considerarse experimentales.
No use FBX en pipelines de producción con esta versión. Si sus datos de origen están en FBX, conviértalos a glTF u OBJ primero usando Blender o FBX Review antes de cargarlos con Aspose.3D FOSS.
La escritura de FBX no es compatible.
Detección automática de formato
Scene.from_file() y scene.open() detectan el formato automáticamente usando la extensión del archivo y, cuando está disponible, los bytes mágicos en el encabezado del archivo:
from aspose.threed import Scene
##The library detects each format without being told explicitly
scene_obj = Scene.from_file("model.obj")
scene_glb = Scene.from_file("model.glb")
scene_stl = Scene.from_file("model.stl")
scene_dae = Scene.from_file("model.dae")
scene_3mf = Scene.from_file("model.3mf")Si la extensión está ausente o es ambigua, la biblioteca recurre a la inspección de encabezados (bytes mágicos). Los archivos no compatibles o no reconocidos generan un IOError con un mensaje descriptivo.
Consejos y Mejores Prácticas
- Use glTF o GLB para pipelines modernos. glTF preserva el grafo completo de la escena, los materiales y los datos de animación. Es el formato más completo para el intercambio con motores de juego y visores web.
- Use OBJ para máxima compatibilidad. OBJ es compatible con prácticamente todas las herramientas 3D. Está limitado a mallas estáticas pero es extremadamente portátil.
- Use 3MF para impresión. 3MF lleva color, indicaciones de orientación y configuraciones de impresión que STL no puede expresar.
- Evite FBX hasta que esté listo para producción. Consulte las notas de la versión para saber en qué versión el análisis completo de FBX está completo.
- Haga coincidir la extensión de guardado con el formato. No pase una extensión
.gltfcuando desee GLB binario; use.glbexplícitamente. La extensión determina qué serializador se utiliza. - Verifique la compatibilidad de polígonos. STL y 3MF requieren triángulos. Los cuádruplos y N‑gons se triangulan automáticamente al guardar, pero el recuento de vértices aumentará. Si necesita controlar la triangulación, llame a
mesh.triangulate()antes de guardar.