Scenos atvaizdavimas ir eksportavimas

Scenos atvaizdavimas ir eksportavimas

@aspose/3d yra apdorojimo ir konvertavimo biblioteka, ir ji neatlieka GPU atvaizdavimo ar nesukuria paveikslų failų. „Atvaizdavimas“ šioje bibliotekoje reiškia eksportuoja sceną į formatą, kurį gali naudoti tolimesnis atvaizdavimo variklis, žaidimų variklis arba peržiūros programa.

Šiame puslapyje aptariami visi eksporto keliai: išsaugojimas į failą, išvedimas į atminties buferį, formatui būdingos parinktys ir kaip paruošti scenas dažniausiai naudojamiems vėlesniems tikslams (Three.js, Babylon.js, modelių peržiūros programoms ir žaidimų varikliams).

Pagrindinis eksportas

Iškvietimas scene.save() su failo keliu. Biblioteka iššakoja išvesties formatą iš failo plėtinio:

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

Eksportavimas į GLB (rekomenduojama žiniatinkliui ir žaidimams)

GLB (binarinis glTF 2.0) yra vienas savarankiškas failas, kuriame įterpti visi tinklo duomenys, medžiagos ir tekstūros. Tai rekomenduojamas išvesties formatas žiniatinklio peržiūros programoms (Three.js, Babylon.js, model-viewer) ir žaidimų varikliams (Godot, Unity per importuotoją):

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

Nustatyti binaryMode = true sukurti savarankišką GLB failą. Kai false, išvestis yra .gltf JSON failas su atskiru .bin buferio šoniniu failu.

Eksportavimas į glTF (JSON formatas peržiūrai)

JSON variantas (.gltf + .bin) yra naudingas kūrimo metu, nes JSON yra žmonėms skaitomas:

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

Eksportavimas į STL (3D spausdinimo procesai)

STL yra tik geometrija (be medžiagų, be animacijos). Tai standartinis keitimosi formatas 3D spausdinimo pjaustymo programoms:

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

Nustatyti binaryMode = false sukurti ASCII STL, kuris yra tekstu skaitomas, bet didesnis.

Eksportavimas į FBX (DCC įrankių procesai)

Pastaba: Bibliotekoje yra FBX importavimo ir eksportavimo klasės, tačiau FBX formato automatinis aptikimas nėra integruotas į scene.open() arba scene.save(). Kviečiant scene.save('output.fbx', opts) nebus iškviestas FBX eksportuotojas — šis .fbx plėtinys nėra atpažįstamas išsaugojimo dispečerio ir kvietimas grįš prie OBJ išvesties. Naudokite šį FbxExporter klasę tiesiogiai, jei jums reikia FBX I/O. Formato palaikymo lentelė žymi FBX kaip No* dėl šios priežasties.

Jei reikia eksportuoti į formatą, kurį priima Blender, Maya arba Unreal Engine, vietoj to naudokite GLB arba COLLADA – abu yra visiškai integruoti į 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);

Eksportavimas į atmintį su saveToBuffer()

Serverless funkcijoms, HTTP atsakymams ir srautinėms konvejerei, eksportuokite tiesiogiai į Buffer be įrašymo į diską:

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() priima formato eilutę kaip pirmą argumentą (pvz. 'glb', 'stl', 'obj') ir tas pačias parinkčių objektus kaip save().

Kombinuojant openFromBuffer() ir saveToBuffer()

Visuškai atminties pagrindu veikianti konversijos konvejerio grandinė be jokio disko I/O jokiu etapu:

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

Scenų paruošimas konkretiems rendereriams

Three.js / Babylon.js (žiniatinklis)

Šie rendereriai natūraliai įkelia GLB failus. Eksportuokite su binaryMode = true. Jei tekstūros yra nuorodojamos iš šaltinio OBJ, įsitikinkite, kad .mtl ir paveikslų failai yra kartu patalpinti įkėlimo metu.

model-viewer (žiniatinklio komponentas)

Priima .glb tiesiogiai. Tie patys eksporto nustatymai kaip Three.js.

Godot variklis

Importuokite GLB per Godot importuotoją (Project → Import). Naudokite binaryMode = true. Godot natūraliai palaiko PBR medžiagas iš glTF 2.0.

Blender

Norint pasiekti geriausią importo tikslumą, naudokite glTF (output.gltf + output.bin) arba GLB (output.glb). Blender glTF 2.0 importuotojas apdoroja PBR medžiagas ir animaciją. Pastaba: FBX išvestis per scene.save() nepalaikoma — FBX formato automatinis aptikimas nėra sujungtas su išsaugojimo dispečeru.

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

Eksportuokite į STL arba 3MF. Naudokite 3MF, kai reikia išsaugoti spalvą arba medžiagos metaduomenis. Naudokite STL didžiausiam suderinamumui.

Eksporto formatų palyginimas

FormatasPlėtinysMedžiagosAnimacijaVienas failasGeriausiai tinka
GLB.glbPBR (glTF 2.0)TaipTaipInternetas, žaidimai, bendras pristatymas
glTF.gltfPBR (glTF 2.0)TaipNe (+ .bin)Kūrimas, patikrinimas
STL.stlNeNeTaip3D printing, geometry-only
FBX.fbxPhong/PBRNe*Ne*Importuotojas/eksportuotojas egzistuoja, bet nėra prijungtas prie automatinio aptikimo
COLLADA.daeTaipTaipTaipKryžminis DCC keitimas
3MF.3mfSpalva/medžiagaNeTaipModernus 3D spausdinimas

Bendros eksporto problemos

SimptomasPriežastisPataisa
Išvesties GLB atveriamas kaip JSON peržiūros programojebinaryMode paliktas kaip falseNustatyti opts.binaryMode = true
GLB išvestyje trūksta tekstūrųbinaryMode nenustatytaNustatyti opts.binaryMode = true savarankiškam GLB
STL failas slicer’yje neturi spalvosSTL formatas nepalaiko spalvųNaudokite 3MF spalvų duomenims
saveToBuffer grąžina tuščią buferįFormato eilutės argumentas trūksta arba neteisingasPateikite formato eilutę, pvz. 'glb', 'stl', arba 'obj'
FBX atveriamas be animacijos Blender programojeŠaltinio failas (OBJ/STL) neturi animacijosAnimacija perduodama tik jei ji yra šaltinyje
Išvesties failas yra labai didelisŠaltinio OBJ turi daug pasikartojančių viršūniųGLB dvejetainis išvestis jau pašalina dublikatus; patikrinkite šaltinio turto kokybę

Žr. taip pat

 Lietuvių