Ottimizzazione di GLB animati: un caso di studio su CesiumMan

Quanto si guadagna riducendo i campioni di animazione o i triangoli dopo la compressione? Abbiamo testato CesiumMan, un personaggio pubblico con deformazione scheletrica, per valutare separatamente queste scelte. Meshopt ha fornito la maggior parte del risparmio in byte; ridurre la frequenza di campionamento dell'animazione ha aggiunto ben poco.

Il modello e le condizioni del test

Il GLB originale occupa 438,044 byte e contiene 4,672 triangoli, un'animazione e uno scheletro di deformazione con 19 articolazioni. Abbiamo eseguito gltfpack 1.3 nativo su Windows il 2 ottobre 2026. Ogni esportazione è partita dallo stesso originale. Le texture hanno mantenuto il formato originale; i nodi con nome, i materiali con nome e i dati extras sono stati preservati. Il campionamento dell'animazione è rimasto al valore predefinito di 30 FPS, tranne nella prova a 15 FPS.

Origine e licenza del modello · Scarica le misurazioni e l'hash del file originale

Confronta l'intero file, non solo il numero di chiavi

ImpostazioneDimensione del file (byte)TriangoliChiavi di animazione
Originale438,0444,6722,736
Conservativo269,4524,6721,205
Meshopt · 30 FPS207,7684,6721,205
Meshopt · 15 FPS206,2404,672625
Meshopt · Mantenimento del 50% dei triangoli193,7962,3361,205

Qui per chiavi di animazione si intende la somma dei conteggi degli accessor di input di tutti i sampler di animazione, non pose distinte o fotogrammi renderizzati. Tutti i file prodotti mantengono un'animazione e 19 articolazioni dello scheletro di deformazione. Questi conteggi non dimostrano che tempi, trasformazioni o deformazioni siano rimasti invariati.

Cosa ha apportato ogni modifica

Meshopt ha ridotto l'originale del 52.6% senza richiedere una riduzione dei triangoli. Anche l'esportazione conservativa ha modificato i dati di animazione: il numero di chiavi è sceso da 2,736 a 1,205. Mantenere tutti i triangoli non è un'impostazione senza perdita.

A 15 FPS, il numero di chiavi si è quasi dimezzato di nuovo, ma il file era solo 1,528 byte più piccolo dell'esportazione Meshopt a 30 FPS: un risparmio dello 0.74%. Per questo modello manterremmo 30 FPS, a meno che una verifica separata del movimento non giustifichi la frequenza inferiore. Meno chiavi non si traducono nella stessa riduzione percentuale dell'intero file.

L'obiettivo del 50% dei triangoli è stato raggiunto esattamente: 2,336 triangoli. Il risparmio è stato di 13,972 byte, pari al 6.72%, rispetto al solo Meshopt. Attivare la semplificazione aggressiva con lo stesso obiettivo ha prodotto, in questo test, lo stesso numero di byte e di triangoli, senza quindi offrire alcun vantaggio in termini di dimensioni. Questo risultato non è generalizzabile ad altre mesh.

Esamina la stessa posa, poi il movimento

CesiumMan — Originale
Originale
CesiumMan — Meshopt · 30 FPS
Meshopt · 30 FPS
CesiumMan — Meshopt · 15 FPS
Meshopt · 15 FPS
CesiumMan — Mantenimento del 50% dei triangoli
Mantenimento del 50% dei triangoli

Questi rendering usano la prima animazione a 0.5 secondi, la stessa telecamera e illuminazione e Three.js 0.180.0. Le texture restano visibili e il personaggio mantiene la sua sagoma generale in questa vista. Un'immagine statica non può attestare la qualità del movimento né rivelare ogni errore di deformazione; controlla gomiti, ginocchia e transizione del ciclo nel tuo visualizzatore.

C'è anche una differenza di durata: Three.js indica 2.0000 secondi per la clip originale, circa 2.0083 secondi per le esportazioni a 30 FPS e 2.0417 secondi per l'esportazione a 15 FPS. Se la tua applicazione sincronizza le azioni con la durata della clip, verifica questa integrazione anziché presumere che i tempi originali siano stati preservati.

Riprodurre le esportazioni

Usa il GLB originale come input.glb per ogni comando seguente. Questi comandi corrispondono alle opzioni del sito. I file prodotti con Meshopt richiedono un decoder compatibile e i file ottimizzati richiedono anche il supporto per la quantizzazione della geometria.

gltfpack -i input.glb -o conservative.glb -kn -km -ke
gltfpack -i input.glb -o meshopt.glb -cc -kn -km -ke
gltfpack -i input.glb -o fps15.glb -cc -af 15 -kn -km -ke
gltfpack -i input.glb -o half.glb -si 0.5 -cc -kn -km -ke

La nostra scelta iniziale per questa risorsa sarebbe Meshopt a 30 FPS mantenendo tutti i triangoli. Valuta la versione con metà dei triangoli quando il costo della geometria è rilevante e le verifiche della deformazione hanno esito positivo. Queste misurazioni riguardano un solo personaggio di piccole dimensioni; non misurano il tempo GPU, la velocità di caricamento o la fedeltà dell'animazione sui diversi dispositivi.

Modello: CesiumMan, © 2017 Cesium, distribuito con licenza CC BY 4.0. I rendering mostrano le nostre versioni derivate ottimizzate accanto all'originale. Il logo Cesium rimane parte del modello; i diritti sui marchi sono separati. Cesium non ha approvato questo sito né questo confronto. CC BY 4.0 · Avviso sui marchi

Caricare modelli gltfpack in Three.js → · Ridurre i poligoni di un GLB con gltfpack →

Apri l'ottimizzatore ↗