Renderowanie sceny i eksport

@aspose/3d jest biblioteką przetwarzania i konwersji i nie wykonuje renderowania GPU ani nie tworzy plików graficznych. „Rendering” w kontekście tej biblioteki oznacza eksportowanie sceny do formatu, który może być użyty przez kolejny renderer, silnik gry lub przeglądarkę.

Ta strona opisuje wszystkie ścieżki eksportu: zapisywanie do pliku, wyjście do bufora w pamięci, opcje specyficzne dla formatów oraz sposób przygotowania scen dla typowych downstreamowych celów (Three.js, Babylon.js, przeglądarki modeli i silniki gier).

Podstawowy eksport

Wywołaj scene.save() ze ścieżką do pliku. Biblioteka wywnioskuje format wyjściowy na podstawie rozszerzenia pliku:

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

Eksport do GLB (zalecany dla sieci i gier)

GLB (binarny glTF 2.0) jest pojedynczym, samodzielnym plikiem, który zawiera wszystkie dane siatek, materiały i tekstury. Jest zalecanym formatem wyjściowym dla przeglądarek internetowych (Three.js, Babylon.js, model-viewer) oraz silników gier (Godot, Unity poprzez importer):

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

Ustaw binaryMode = true aby wyprodukować samodzielny plik GLB. Gdy false, wynik jest .gltf plik JSON z oddzielnym .bin plikiem pomocniczym bufora.

Eksport do glTF (format JSON do inspekcji)

Wariant JSON (.gltf + .bin) jest przydatny w trakcie rozwoju, ponieważ JSON jest czytelny dla człowieka:

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

Eksport do STL (przepływy pracy druku 3D)

STL zawiera wyłącznie geometrię (bez materiałów, bez animacji). Jest standardowym formatem wymiany dla programów cięcia (slicer) w druku 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);

Ustaw binaryMode = false aby wygenerować ASCII STL, które jest czytelne jako tekst, ale większe.

Eksport do FBX (przepływy pracy narzędzi DCC)

Uwaga: klasy importera i eksportera FBX istnieją w bibliotece, ale automatyczne wykrywanie formatu FBX nie jest podłączone do scene.open() lub scene.save(). scene.save('output.fbx', opts) nie wywoła eksportera FBX — ten .fbx rozszerzenie nie jest rozpoznawane przez dispatcher zapisu i wywołanie przejdzie do wyjścia OBJ. Użyj FbxExporter klasy bezpośrednio, jeśli potrzebujesz I/O FBX. Tabela wsparcia formatów oznacza FBX jako No* z tego powodu.

Jeśli potrzebujesz wyeksportować do formatu akceptowanego przez Blender, Maya lub Unreal Engine, użyj GLB lub COLLADA — oba są w pełni podłączone do 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);

Eksport w pamięci z saveToBuffer()

Dla funkcji serverless, odpowiedzi HTTP i potoków strumieniowych, eksportuj bezpośrednio do Buffer bez zapisywania na dysk:

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() przyjmuje ciąg formatu jako pierwszy argument (np. 'glb', 'stl', 'obj') i te same obiekty opcji co save().

Łączenie openFromBuffer() i saveToBuffer()

W pełni pamięciowy potok konwersji bez operacji I/O na dysku na żadnym etapie:

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

Przygotowywanie scen dla konkretnych rendererów

Three.js / Babylon.js (Web)

Te renderery natywnie wczytują pliki GLB. Eksportuj z binaryMode = true. Jeśli tekstury są odwoływane z źródłowego OBJ, upewnij się, że .mtl i pliki obrazów są współlokalizowane podczas ładowania.

model-viewer (Web Component)

Akceptuje .glb bezpośrednio. Te same ustawienia eksportu co Three.js.

Godot Engine

Importuj GLB za pomocą importera Godota (Project → Import). Użyj binaryMode = true. Godot natywnie obsługuje materiały PBR z glTF 2.0.

Blender

Aby uzyskać jak najwyższą wierność importu, użyj glTF (output.gltf + output.bin) lub GLB (output.glb). Importer glTF 2.0 w Blenderze obsługuje materiały PBR i animację. Uwaga: eksport FBX za pomocą scene.save() nie jest obsługiwany — automatyczne wykrywanie formatu FBX nie jest podłączone do mechanizmu zapisu.

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

Eksportuj do STL lub 3MF. Użyj 3MF, gdy potrzebne jest zachowanie koloru lub metadanych materiału. Użyj STL dla maksymalnej kompatybilności.

Porównanie formatów eksportu

FormatRozszerzenieMateriałyAnimacjaPojedynczy plikNajlepsze dla
GLB.glbPBR (glTF 2.0)TakTakWeb, gry, ogólne dostarczanie
glTF.gltfPBR (glTF 2.0)TakNie (+ .bin)Rozwój, inspekcja
STL.stlNieNieTak3D printing, geometry-only
FBX.fbxPhong/PBRNie*Nie*Importer/exporter istnieje, ale nie jest podłączony do automatycznego wykrywania
COLLADA.daeTakTakTakWymiana Cross-DCC
3MF.3mfKolor/materialNieTakNowoczesne drukowanie 3D

Typowe problemy z eksportem

ObjawPrzyczynaNaprawa
Plik wyjściowy GLB otwiera się jako JSON w przeglądarcebinaryMode pozostawione jako falseUstaw opts.binaryMode = true
Brakujące tekstury w wyjściowym GLBbinaryMode nie ustawionoUstaw opts.binaryMode = true dla samodzielnego GLB
Plik STL nie ma koloru w slicerzeFormat STL nie obsługuje koloruUżyj 3MF do danych kolorów
saveToBuffer zwraca pusty buforArgument ciągu formatującego brakujący lub nieprawidłowyPrzekaż ciąg formatujący, np. 'glb', 'stl', lub 'obj'
FBX otwiera się bez animacji w BlenderzePlik źródłowy (OBJ/STL) nie zawiera animacjiAnimacja jest zachowywana tylko wtedy, gdy jest obecna w źródle
Plik wyjściowy jest bardzo dużyPlik OBJ źródłowy ma wiele zduplikowanych wierzchołkówBinarny output GLB już usuwa duplikaty; sprawdź jakość zasobu źródłowego

Zobacz także

 Polski