Рендеринг сцены и экспорт
@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 | .glb | PBR (glTF 2.0) | Да | Да | Веб, игры, общая доставка |
| glTF | .gltf | PBR (glTF 2.0) | Да | Нет (+ .bin) | Разработка, инспекция |
| STL | .stl | Нет | Нет | Да | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Нет* | Нет* | Импортёр/экспортер существует, но не подключён к автоматическому определению |
| COLLADA | .dae | Да | Да | Да | Обмен Cross-DCC |
| 3MF | .3mf | Цвет/материал | Нет | Да | Современная 3D‑печать |
Общие проблемы экспорта
| Симптом | Причина | Исправить |
|---|---|---|
| Вывод GLB открывается как JSON в просмотрщике | binaryMode оставлено как false | Установить opts.binaryMode = true |
| Текстуры отсутствуют в выводе GLB | binaryMode не установлено | Установить opts.binaryMode = true для самодостаточного GLB |
| Файл STL не имеет цвета в слайсере | Формат STL не поддерживает цвет | Используйте 3MF для цветовых данных |
saveToBuffer возвращает пустой буфер | Аргумент строкового формата отсутствует или неверен | Передайте строку формата, например,. 'glb', 'stl', или 'obj' |
| FBX открывается без анимации в Blender | Исходный файл (OBJ/STL) не содержит анимацию | Анимация сохраняется только если она присутствует в исходном файле |
| Выходной файл очень большой | Исходный OBJ содержит много дублирующихся вершин | Бинарный вывод GLB уже удаляет дубликаты; проверьте качество исходного ассета |
См. также
- Загрузка модели: загрузка 3D файлов с диска и буферов
- Граф сцены: построение и модификация сцены перед экспортом
- Поддержка форматов: полная матрица чтения/записи
- Обзор API: все классы и перечисления