Візуалізація сцени та експорт
@aspose/3d — це бібліотека для обробки та конвертації, і вона не виконує GPU‑рендеринг або створює файли зображень. «Rendering» у контексті цієї бібліотеки означає експорт сцени у формат, який може споживати нижчий за рівнем рендерер, ігровий движок або переглядач.
На цій сторінці розглядаються всі шляхи експорту: збереження у файл, виведення у буфер пам’яті, параметри, специфічні для форматів, та підготовка сцен для поширених 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 (бінарний 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, вихідний файл є a .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 — .fbx розширення не розпізнається диспетчером збереження, і виклик перейде до виводу у форматі OBJ. Використовуйте 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-відповідей та потокових конвеєрів експортуйте безпосередньо у 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 | Так | Так | Так | Крос-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: усі класи та перерахування