Renderizado y Exportación de Escenas
@aspose/3d es una biblioteca de procesamiento y conversión, y no realiza renderizado GPU ni produce archivos de imagen. “Renderizado” en el contexto de esta biblioteca significa exportar una escena a un formato que un renderizador descendente, motor de juego o visor pueda consumir.
Esta página cubre todas las rutas de exportación: guardado basado en archivos, salida a buffer en memoria, opciones específicas de formato y cómo preparar escenas para objetivos downstream comunes (Three.js, Babylon.js, visores de modelos y motores de juego).
Exportación básica
Llamada scene.save() con una ruta de archivo. La biblioteca infiere el formato de salida a partir de la extensión del archivo:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('input.obj'); // use a supported format (OBJ, glTF, GLB, STL, 3MF, COLLADA)
scene.save('output.glb'); // GLB (binary glTF)
scene.save('output.stl'); // STL
scene.save('output.dae'); // COLLADA
scene.save('output.3mf'); // 3MF
Exportando a GLB (Recomendado para Web y Juegos)
GLB (binary glTF 2.0) es un único archivo autónomo que incorpora todos los datos de malla, materiales y texturas. Es el formato de salida recomendado para visores web (Three.js, Babylon.js, model-viewer) y motores de juego (Godot, Unity mediante importador):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('source.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // produce .glb instead of .gltf + .bin
scene.save('output.glb', opts);
console.log('GLB export complete');Establecer binaryMode = true para producir un archivo GLB autocontenido. Cuando false, la salida es un .gltf archivo JSON con un .bin archivo lateral de búfer.
Exportando a glTF (Formato JSON para inspección)
La variante JSON (.gltf + .bin) es útil durante el desarrollo porque el JSON es legible por humanos:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae'); // COLLADA is fully supported; FBX is not wired into scene.open()
const opts = new GltfSaveOptions();
opts.binaryMode = false; // JSON + .bin sidecar
scene.save('output.gltf', opts);Exportando a STL (Flujos de trabajo de impresión 3D)
STL contiene solo geometría (sin materiales, sin animación). Es el formato de intercambio estándar para los slicers de impresión 3D:
import { Scene } from '@aspose/3d';
import { StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.obj');
const opts = new StlSaveOptions();
opts.binaryMode = true; // binary STL is more compact than ASCII
scene.save('output.stl', opts);Establecer binaryMode = false para producir STL ASCII, que es legible como texto pero más grande.
Exportando a FBX (Flujos de trabajo de herramientas DCC)
Nota: existen clases de importador y exportador FBX en la biblioteca, pero la detección automática del formato FBX no está integrada en scene.open() o scene.save(). Llamar a scene.save('output.fbx', opts) no invocará el exportador FBX — el .fbx extensión no es reconocida por el despachador de guardado y la llamada retrocederá a la salida OBJ. Use el FbxExporter clase directamente si necesita E/S FBX. La tabla de soporte de formatos marca FBX como No* por esta razón.
Si necesita exportar a un formato aceptado por Blender, Maya o Unreal Engine, use GLB o COLLADA en su lugar — ambos están totalmente integrados en scene.save():
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae');
// GLB is fully supported and widely accepted by DCC tools
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);Exportación en memoria con saveToBuffer()
Para funciones sin servidor, respuestas HTTP y canalizaciones de transmisión, exporta directamente a un Buffer sin escribir en disco:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function convertToGlbBuffer(inputPath: string): Buffer {
const scene = new Scene();
scene.open(inputPath);
const opts = new GltfSaveOptions();
opts.binaryMode = true;
return scene.saveToBuffer('glb', opts);
}
// Express.js / HTTP response example
// const glbBuffer = convertToGlbBuffer('model.obj');
// res.setHeader('Content-Type', 'model/gltf-binary');
// res.send(glbBuffer);
saveToBuffer() toma una cadena de formato como primer argumento (p. ej. 'glb', 'stl', 'obj') y los mismos objetos de opciones que save().
Combinando openFromBuffer() y saveToBuffer()
Una canalización de conversión totalmente en memoria sin E/S de disco en ninguna etapa:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function objBufferToGlbBuffer(objData: Buffer): Buffer {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
scene.openFromBuffer(objData, loadOpts);
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true;
return scene.saveToBuffer('glb', saveOpts);
}Preparando escenas para renderizadores específicos
Three.js / Babylon.js (Web)
Estos renderizadores cargan nativamente archivos GLB. Exporta con binaryMode = true. Si las texturas se referencian desde el OBJ de origen, asegúrate de que el .mtl y los archivos de imagen estén co-ubicados al cargar.
model-viewer (Web Component)
Acepta .glb directamente. Mismas configuraciones de exportación que Three.js.
Godot Engine
Importa GLB a través del importador de Godot (Proyecto → Importar). Usa binaryMode = true. Godot admite materiales PBR de glTF 2.0 de forma nativa.
Blender
Para la mejor fidelidad de importación usa glTF (output.gltf + output.bin) o GLB (output.glb). El importador glTF 2.0 de Blender maneja materiales PBR y animación. Nota: la salida FBX a través de scene.save() no es compatible — la detección automática del formato FBX no está conectada al despachador de guardado.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
Exporta a STL o 3MF. Usa 3MF cuando necesites preservar color o metadatos de material. Usa STL para máxima compatibilidad.
Comparación de formatos de exportación
| Formato | Extensión | Materiales | Animación | Archivo único | Mejor para |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Sí | Sí | Web, juegos, entrega general |
| glTF | .gltf | PBR (glTF 2.0) | Sí | No (+ .bin) | Desarrollo, inspección |
| STL | .stl | No | No | Sí | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | No* | No* | El importador/exportador existe pero no está conectado a la detección automática |
| COLLADA | .dae | Sí | Sí | Sí | Intercambio Cross-DCC |
| 3MF | .3mf | Color/material | No | Sí | Impresión 3D moderna |
Problemas comunes de exportación
| Síntoma | Causa | Solución |
|---|---|---|
| El GLB de salida se abre como JSON en el visor | binaryMode dejado como false | Establecer opts.binaryMode = true |
| Faltan texturas en el GLB de salida | binaryMode no establecido | Establecer opts.binaryMode = true para GLB autocontenido |
| El archivo STL no tiene color en el slicer | El formato STL no admite color | Usa 3MF para datos de color |
saveToBuffer devuelve un buffer vacío | Falta el argumento de cadena de formato o es incorrecto | Pasa la cadena de formato, p.ej. 'glb', 'stl', o 'obj' |
| FBX se abre sin animación en Blender | El archivo fuente (OBJ/STL) no tiene animación | La animación solo se conserva si está presente en la fuente |
| El archivo de salida es muy grande | El OBJ de origen tiene muchos vértices duplicados | La salida binaria GLB ya elimina duplicados; verifica la calidad del activo fuente |
Ver también
- Carga de modelo: cargando archivos 3D desde disco y buffers
- Grafo de escena: construyendo y modificando la escena antes de la exportación
- Compatibilidad de formatos: matriz completa de lectura/escritura
- Visión general de la API: todas las clases y enumeraciones