Рендеринг сцены и экспорт

@aspose/3d является библиотекой обработки и конвертации, и она не выполняет GPU‑рендеринг и не создает файлы изображений. «Рендеринг» в контексте этой библиотеки означает экспортировать сцену в формат, который может использовать downstream renderer, игровой движок или просмотрщик.

На этой странице рассматриваются все пути экспорта: сохранение в файл, вывод в буфер памяти, параметры, специфичные для форматов, и способы подготовки сцен для распространённых downstream‑целей (Three.js, Babylon.js, просмотрщики моделей и игровые движки).

Базовый экспорт

Вызов scene.save() с путем к файлу. Библиотека определяет формат вывода по расширению файла:

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

Экспорт в GLB (рекомендовано для веба и игр)

GLB (binary glTF 2.0) — это единый автономный файл, содержащий все данные сетки, материалы и текстуры. Это рекомендуемый формат вывода для веб‑просмотрщиков (Three.js, Babylon.js, model-viewer) и игровых движков (Godot, Unity через импортёр):

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');

Установить binaryMode = true для создания самодостаточного GLB‑файла. Когда false, вывод является .gltf JSON‑файл с отдельным .bin буфер‑sidecar.

Экспорт в glTF (JSON‑формат для инспекции)

Вариант JSON (.gltf + .bin) полезен в процессе разработки, потому что JSON читаем человеком:

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);

Экспорт в STL (рабочие процессы 3D‑печати)

STL содержит только геометрию (без материалов, без анимации). Это стандартный формат обмена для слайсеров 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);

Установить binaryMode = false для создания ASCII STL, который читаем в виде текста, но больше по размеру.

Экспорт в FBX (рабочие процессы DCC‑инструментов)

Примечание: В библиотеке существуют классы импорта и экспорта FBX, но автоматическое определение формата FBX не подключено к scene.open() или scene.save(). Вызов scene.save('output.fbx', opts) не вызовет экспортёр FBX — the .fbx расширение не распознаётся диспетчером сохранения, и вызов перейдёт к выводу в формате OBJ. Используйте the FbxExporter класс напрямую, если вам нужен ввод/вывод FBX. Таблица поддержки форматов отмечает FBX как No* по этой причине.

Если вам нужно экспортировать в формат, поддерживаемый Blender, Maya или Unreal Engine, используйте GLB или COLLADA вместо этого — оба полностью интегрированы в 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);

Экспорт в памяти с saveToBuffer()

Для безсерверных функций, HTTP‑ответов и потоковых конвейеров экспортируйте напрямую в a Buffer без записи на диск:

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() принимает строку формата в качестве первого аргумента (например,. 'glb', 'stl', 'obj') и те же объекты параметров, что и save().

Комбинирование openFromBuffer() и saveToBuffer()

Полностью оперативный конвейер преобразования без ввода‑вывода на диск на любом этапе:

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);
}

Подготовка сцен для конкретных рендереров

Three.js / Babylon.js (Web)

Эти рендереры нативно загружают файлы GLB. Экспортировать с помощью binaryMode = true. Если текстуры ссылаются из исходного OBJ, убедитесь, что .mtl и файлы изображений находятся в том же каталоге при загрузке.

model-viewer (Web Component)

Принимает .glb напрямую. Те же настройки экспорта, что и у Three.js.

Godot Engine

Импортируйте GLB через импортёр Godot (Project → Import). Используйте binaryMode = true. Godot поддерживает PBR‑материалы из glTF 2.0 нативно.

Blender

Для наилучшей точности импорта используйте glTF (output.gltf + output.bin) или GLB (output.glb). Импортёр glTF 2.0 в Blender обрабатывает PBR‑материалы и анимацию. Примечание: вывод FBX через scene.save() не поддерживается — автоматическое определение формата FBX не подключено к диспетчеру сохранения.

3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)

Экспортируйте в STL или 3MF. Используйте 3MF, когда необходимо сохранить цвет или метаданные материала. Используйте STL для максимальной совместимости.

Сравнение форматов экспорта

ФорматРасширениеМатериалыАнимацияОдин файлЛучшее для
GLB.glbPBR (glTF 2.0)ДаДаВеб, игры, общая доставка
glTF.gltfPBR (glTF 2.0)ДаНет (+ .bin)Разработка, инспекция
STL.stlНетНетДа3D printing, geometry-only
FBX.fbxPhong/PBRНет*Нет*Импортёр/экспортер существует, но не подключён к автоматическому определению
COLLADA.daeДаДаДаОбмен Cross-DCC
3MF.3mfЦвет/материалНетДаСовременная 3D‑печать

Общие проблемы экспорта

СимптомПричинаИсправить
Вывод GLB открывается как JSON в просмотрщикеbinaryMode оставлено как falseУстановить opts.binaryMode = true
Текстуры отсутствуют в выводе GLBbinaryMode не установленоУстановить opts.binaryMode = true для самодостаточного GLB
Файл STL не имеет цвета в слайсереФормат STL не поддерживает цветИспользуйте 3MF для цветовых данных
saveToBuffer возвращает пустой буферАргумент строкового формата отсутствует или неверенПередайте строку формата, например,. 'glb', 'stl', или 'obj'
FBX открывается без анимации в BlenderИсходный файл (OBJ/STL) не содержит анимациюАнимация сохраняется только если она присутствует в исходном файле
Выходной файл очень большойИсходный OBJ содержит много дублирующихся вершинБинарный вывод GLB уже удаляет дубликаты; проверьте качество исходного ассета

См. также

 Русский