Renderizado y Exportación de Escenas

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

FormatoExtensiónMaterialesAnimaciónArchivo únicoMejor para
GLB.glbPBR (glTF 2.0)Web, juegos, entrega general
glTF.gltfPBR (glTF 2.0)No (+ .bin)Desarrollo, inspección
STL.stlNoNo3D printing, geometry-only
FBX.fbxPhong/PBRNo*No*El importador/exportador existe pero no está conectado a la detección automática
COLLADA.daeIntercambio Cross-DCC
3MF.3mfColor/materialNoImpresión 3D moderna

Problemas comunes de exportación

SíntomaCausaSolución
El GLB de salida se abre como JSON en el visorbinaryMode dejado como falseEstablecer opts.binaryMode = true
Faltan texturas en el GLB de salidabinaryMode no establecidoEstablecer opts.binaryMode = true para GLB autocontenido
El archivo STL no tiene color en el slicerEl formato STL no admite colorUsa 3MF para datos de color
saveToBuffer devuelve un buffer vacíoFalta el argumento de cadena de formato o es incorrectoPasa la cadena de formato, p.ej. 'glb', 'stl', o 'obj'
FBX se abre sin animación en BlenderEl archivo fuente (OBJ/STL) no tiene animaciónLa animación solo se conserva si está presente en la fuente
El archivo de salida es muy grandeEl OBJ de origen tiene muchos vértices duplicadosLa salida binaria GLB ya elimina duplicados; verifica la calidad del activo fuente

Ver también

 Español