Візуалізація сцени та експорт

Візуалізація сцени та експорт

@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.glbPBR (glTF 2.0)ТакТакВеб, ігри, загальне розповсюдження
glTF.gltfPBR (glTF 2.0)ТакНі (+ .bin)Розробка, інспекція
STL.stlНіНіТак3D printing, geometry-only
FBX.fbxPhong/PBRНі*Ні*Імпортер/експортер існує, але не підключений до автоматичного виявлення
COLLADA.daeТакТакТакКрос-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 вже виконує дедуплікацію; перевірте якість вихідного ресурсу

Див. також

 Українська