TypeScript'te 3D Modelleri Nasıl Optimize Edilir

TypeScript'te 3D Modelleri Nasıl Optimize Edilir

Aspose.3D FOSS for TypeScript, çıktı dosyası boyutunu azaltmak ve işleme verimliliğini artırmak için çeşitli stratejiler sunar. Bu kılavuz, format seçimi, ikili gömme, bellek içi veri hatları ve Node.js düzeyinde iyileştirmeleri kapsar.

Adım Adım Kılavuz

Adım 1: Doğru Çıktı Formatını Seçin

GLB (binary glTF), iyi araç desteğiyle en kompakt çıktıyı üretir. OBJ metin tabanlıdır ve daha büyüktür. STL, yalnızca geometri içeren iş akışları için kompakt bir formattır.

BiçimBoyutMalzemeler içerirAnimasyonu içerirEn iyi kullanım
GLBKüçükEvet (gömülü)EvetWeb, oyunlar, genel değişim
glTFOrtaEvet (ayrı)EvetGeliştirme, denetim
STLKüçükHayırHayır3D printing, geometry-only
OBJBüyükAyrı .mtlHayırEski araçlar, geniş uyumluluk
FBXOrtaHayır*Hayır*İçe aktarıcı/dışa aktarıcı mevcut ancak otomatik algılamaya bağlanmamış
3MFKüçükEvetHayırModern 3D baskı

Adım 2: Binary GLB’ye Dışa Aktarın

GLB’ye kaydederken, ayarlayın GltfSaveOptions.binaryMode = true tek bir bağımsız ikili dosya üretmek için. Bu, ayrı .bin yan dosyayı önler ve birçok 3D görüntüleyici için gereklidir:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('complex-model.obj', new ObjLoadOptions());

const opts = new GltfSaveOptions();
opts.binaryMode = true;

scene.save('optimized.glb', opts);
console.log('Saved compact binary GLB');

Adım 3: Bellek İçi Veri Hatları için Buffer I/O Kullanın

Bir web hizmetinde dosyaları işlerken, kullanın openFromBuffer ve saveToBuffer dosya sistemine yazmayı önlemek için:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

function convertInMemory(inputBuffer: Buffer): Buffer {
    const scene = new Scene();
    scene.openFromBuffer(inputBuffer, new ObjLoadOptions());
    return scene.saveToBuffer('glb');
}

Adım 4: Dosyaları İşçi İplikleriyle Toplu İşleyin

Büyük dönüşüm görevleri için, işi Node.js işçi iplikleri arasında dağıtarak birden fazla CPU çekirdeği kullanın:

// worker.ts
import { workerData, parentPort } from 'worker_threads';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const { inputPath, outputPath } = workerData;

const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);

parentPort?.postMessage({ done: true, output: outputPath });
// main.ts: dispatch files to workers
import { Worker } from 'worker_threads';
import * as fs from 'fs';
import * as path from 'path';

const files = fs.readdirSync('./input').filter(f => f.endsWith('.obj'));

for (const file of files) {
    const inputPath = path.join('./input', file);
    const outputPath = path.join('./output', file.replace('.obj', '.glb'));

    const worker = new Worker('./dist/worker.js', {
        workerData: { inputPath, outputPath }
    });

    worker.on('message', msg => console.log(`Converted: ${msg.output}`));
    worker.on('error', err => console.error(`Error: ${err}`));
}

Adım 5: Büyük Modeller İçin Belleği İzleyin

50 MB üzerindeki dosyalar için, yığın kullanımını izleyin ve bellek kısıtlıysa dosyaları sıralı işleyin:

function logMemory(label: string) {
    const used = process.memoryUsage();
    console.log(`[${label}] heapUsed: ${Math.round(used.heapUsed / 1024 / 1024)} MB`);
}

logMemory('before load');
const scene = new Scene();
scene.open('large-model.obj');
logMemory('after load');
scene.save('output.glb');
logMemory('after save');

Çok büyük modeller için Node.js yığınını artırın:

node --max-old-space-size=8192 convert.js

Sık Sorulan Sorular

En kompakt çıktı formatı nedir?

Gömülü varlıklarla GLB (binary glTF), malzeme ve doku içeren sahneler için en kompakt tek dosya çıktısını üretir. STL, yalnızca geometri içeriği için daha kompakt bir formattır.

@aspose/3d, ağ basitleştirme veya LOD uygular mı?

Hayır. Kütüphane, ağ topolojisini değiştirmeden kaynak geometrisini okur ve yazar. Ağ basitleştirme (köşe azaltma, LOD oluşturma) desteklenmez.

Dosya boyutunu azaltmak için malzemeleri çıkarabilir miyim?

Ayarla ObjSaveOptions.enableMaterials = false OBJ’ye kaydederken. glTF için, tüm malzeme verileri her zaman dahil edilir; yalnızca geometri çıktısı için STL kullanın.


Ayrıca Bakınız

 Türkçe