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
| Format | Rozszerzenie | Materiały | Animacja | Pojedynczy plik | Najlepsze dla |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Tak | Tak | Web, gry, ogólne dostarczanie |
| glTF | .gltf | PBR (glTF 2.0) | Tak | Nie (+ .bin) | Rozwój, inspekcja |
| STL | .stl | Nie | Nie | Tak | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Nie* | Nie* | Importer/exporter istnieje, ale nie jest podłączony do automatycznego wykrywania |
| COLLADA | .dae | Tak | Tak | Tak | Wymiana Cross-DCC |
| 3MF | .3mf | Kolor/material | Nie | Tak | Nowoczesne drukowanie 3D |
Typowe problemy z eksportem
| Objaw | Przyczyna | Naprawa |
|---|---|---|
| Plik wyjściowy GLB otwiera się jako JSON w przeglądarce | binaryMode pozostawione jako false | Ustaw opts.binaryMode = true |
| Brakujące tekstury w wyjściowym GLB | binaryMode nie ustawiono | Ustaw opts.binaryMode = true dla samodzielnego GLB |
| Plik STL nie ma koloru w slicerze | Format STL nie obsługuje koloru | Użyj 3MF do danych kolorów |
saveToBuffer zwraca pusty bufor | Argument ciągu formatującego brakujący lub nieprawidłowy | Przekaż ciąg formatujący, np. 'glb', 'stl', lub 'obj' |
| FBX otwiera się bez animacji w Blenderze | Plik źródłowy (OBJ/STL) nie zawiera animacji | Animacja jest zachowywana tylko wtedy, gdy jest obecna w źródle |
| Plik wyjściowy jest bardzo duży | Plik OBJ źródłowy ma wiele zduplikowanych wierzchołków | Binarny output GLB już usuwa duplikaty; sprawdź jakość zasobu źródłowego |
Zobacz także
- Ładowanie modelu: ładowanie plików 3D z dysku i buforów
- Graf sceny: budowanie i modyfikowanie sceny przed eksportem
- Obsługa formatów: pełna macierz odczytu/zapisu
- Przegląd API: wszystkie klasy i wyliczenia