Kris

Piattaforme diverse, destini diversi: guida alla scelta dello schema di compressione

Compressione 3DCompressione textureCompressione verticiOttimizzazionePipeline

I primi 4 articoli hanno trattato gli strumenti per la compressione dei vertici e delle texture. Ma saper usare gli strumenti è una cosa, quale usare e in quale scenario è un'altra. Questo articolo risponde proprio a questa domanda — e cerca di darti una risposta definitiva che puoi applicare subito.

Dopo aver letto questo articolo dovresti saper rispondere: su quale piattaforma gira il mio progetto, il collo di bottiglia iniziale è il download o la memoria GPU, e quale schema adottare per texture e vertici.

Premessa: guidato dallo scenario, non dagli strumenti

C'è un solo principio fondamentale in questo articolo, ribadito più volte in questa serie:

Non esiste uno schema di compressione "migliore", solo quello "più adatto allo scenario".

Tre variabili che influenzano la scelta:

  1. Piattaforma/dispositivo: PC desktop, browser mobile, visori VR, mini-program — capacità enormemente diverse
  2. Modalità d'uso: visualizzazione una tantum (pagina prodotto e-commerce) o immersione prolungata (gioco VR)
  3. Collo di bottiglia principale: download lento, memoria GPU insufficiente, o decodifica che blocca il primo rendering

Prima chiarisci il collo di bottiglia, poi scegli lo strumento. La matrice qui sotto cristallizza questo ragionamento.

Matrice decisionale principale: piattaforma × schema consigliato

Questa è la tabella più importante dell'articolo. Suddivisa per piattaforma, con schemi consigliati per texture e vertici, e relative motivazioni.

Piattaforma / ScenarioSchema textureSchema verticiCollo di bottiglia principaleMotivazione chiave
Web desktop (browser PC)KTX2 o WebPMeshOpt / quantizzazioneVelocità downloadMemoria GPU abbondante, priorità a file piccoli e caricamento rapido
Web mobile (browser smartphone)KTX2 (obbligatorio)MeshOptMemoria GPUMemoria GPU limitata, texture devono essere compresse a blocchi
WebXR / visori VRKTX2 (obbligatorio)MeshOpt + LODMemoria GPU + frame rateMemoria GPU piena = crash, frame drop = nausea
Mini-program (WeChat)KTX2 / WebPMeshOpt / solo quantizzazioneDimensione pacchetto + compatibilitàLimiti sul pacchetto, evitare decoder pesanti
Showcase e-commerceWebP (leggero) / KTX2 (preciso)MeshOptVelocità primo renderingRichiesta apertura immediata, volume sacrificato per velocità
Scena di grandi dimensioni / Digital TwinKTX2 (obbligatorio)MeshOpt + Draco + LODMemoria GPU + draw callMolte texture, modelli grandi, compressione a tutto campo

Alcune considerazioni da ricordare:

  • Se la memoria GPU è il collo di bottiglia, KTX2 è obbligatorio (mobile, VR, scene grandi)
  • Se il download è il collo di bottiglia e la memoria GPU è abbondante, WebP basta (desktop, e-commerce)
  • In ambienti sensibili alla dimensione del pacchetto come i mini-program, preferisci MeshOpt a Draco — decoder piccolo, buona compatibilità
  • Draco va considerato solo per modelli molto grandi, per la maggior parte dei modelli medi e piccoli MeshOpt è più equilibrato

Confronto completo dei formati texture

Sapere "usa KTX2" non basta. Vediamo tutti i formati texture su tutte le dimensioni:

FormatoDimensione fileOccupazione memoria GPUVelocità uploadCompatibilitàQualità immagineScenari adatti
PNGGrandeGrande (dopo decompressione)LentaMolto ampiaLosslessValori numerici precisi/trasparenza, o piattaforme legacy
JPGMolto piccolaGrande (dopo decompressione)LentaMolto ampiaLossyTexture colore, priorità alla trasmissione
WebPMolto piccolaGrande (dopo decompressione)LentaAbbastanza ampiaAltaWeb desktop, priorità alla velocità di download
AVIFAncora più piccolaGrande (dopo decompressione)LentaIn diffusioneAltaPiattaforme nuove, compressione estrema
KTX2 (ETC1S)PiccolaMolto piccolaVeloceRichiede transcodificaMedia (colori sufficienti)Texture colore, mobile/VR
KTX2 (UASTC)MediaPiccolaVeloceRichiede transcodificaAltaNormal map / texture dati

Nota: le prime tre righe (PNG/JPG/WebP/AVIF) hanno tutte occupazione memoria GPU "Grande" — non importa quanto sia piccolo il file su disco, una volta in GPU viene decompresso ai pixel originali. Questo è il limite fondamentale dei formati tradizionali.

Strategia ibrida molto comune: le texture colore chiave usano KTX2 per garantire la memoria GPU, le texture secondarie (es. una piccola emissive) usano WebP per semplicità. Non serve uniformare tutto a KTX2: distribuisci in base al collo di bottiglia.

Diagramma di flusso decisionale: scegli passo dopo passo

La matrice è il risultato, il diagramma ti mostra come arrivarci.

Su quale piattaforma gira il tuo progetto?
│
├─ Web desktop (memoria GPU abbondante)
│   └─ Il primo rendering è lento?
│       ├─ Sì → WebP (o AVIF) + MeshOpt  [priorità alla velocità di download]
│       └─ No, ma molti modelli → KTX2 + MeshOpt [margine per il futuro]
│
├─ Web mobile / VR / scene grandi (memoria GPU limitata)
│   └─ Texture: KTX2 obbligatorio (colori ETC1S, dati UASTC)
│       └─ I vertici del modello sono molto densi?
│           ├─ Sì → + Draco [compressione estrema, accettabile decodifica lenta]
│           └─ No → + MeshOpt [equilibrato]
│
└─ Mini-program / runtime limitato
    └─ Sensibile alla dimensione del pacchetto?
        ├─ Sì → solo quantizzazione o MeshOpt + WebP [zero/piccolo decoder]
        └─ Abbastanza → MeshOpt + KTX2 [combinazione standard]

Compressione vertici vs texture: dove investire

Spesso chiedono: budget limitato, da dove comincio? Dipende dalla composizione del modello:

Caratteristiche del modelloPriorità di investimentoMotivazione
Personaggio/prodotto PBR (molte texture)Compressione textureLe texture occupano 80%+, investire sui vertici ha poco ritorno
Modello CAD/scansione (vertici densi, poche texture)Compressione verticiI vertici sono il volume principale
Personaggio animato (scheletro + skin)Entrambi, ma vertici prima di DracoAnche i dati di animazione occupano volume, Draco supporta male le animazioni
Architettura/scena (grande, texture medie)Texture + LODLe texture risparmiano memoria GPU, LOD risparmia draw call

Una classifica approssimativa del ritorno: texture KTX2 > vertici MeshOpt/quantizzazione > semplificazione geometrica (LOD) > vertici Draco. Inizia da ciò che dà più beneficio.

Strategia ibrida: texture chiave in KTX2, secondarie in WebP

Non tutte le texture meritano di essere compresse in KTX2. Un tipico materiale PBR ha 5-6 texture: comprimerle tutte in KTX2 è un lavoro notevole, e a volte non necessario.

Divisione pratica:

  • KTX2 obbligatorio: albedo (grande, colore), normal (sensibile alla precisione), roughness/metallic (influenzano l'illuminazione)
  • WebP/JPG accettabile: emissive (di solito piccola), AO (medio-bassa frequenza), normal di dettaglio (se presente)

Criterio: la texture è grande? Ha dettagli ad alta frequenza? Verrà campionata frequentemente? Se sì a tutte e tre → KTX2; se no a tutte → formato tradizionale per semplicità.

Automazione della scelta: gltf-transform in un colpo solo

Il comando optimize di gltf-transform è la soluzione universale per la maggior parte degli scenari — rileva automaticamente il tipo di texture, comprime secondo la strategia consigliata, e gestisce opzionalmente i vertici.

# Installazione
npm install -g @gltf-transform/cli

# Ottimizzazione standard: texture KTX2 + vertici MeshOpt + rimozione ridondanze
gltf-transform optimize model.glb model-optimized.glb \
  --texture-compress basisu \
  --meshopt

Parametri:

ParametroEffettoDefault
--texture-compress basisuComprime le texture in KTX2 (sceglie automaticamente ETC1S/UASTC)Off
--meshoptAbilita compressione MeshOpt sui verticiOff
--simplifySemplificazione geometrica (riduce i vertici, lossy)Off
--weldUnisce i vertici duplicatiOn
--pruneRimuove nodi/materiali inutilizzatiOn

Una combinazione "compressione forte" adatta al mobile:

gltf-transform optimize model.glb model-mobile.glb \
  --texture-compress basisu \
  --meshopt \
  --simplify --simplify-ratio 0.5 \
  --prune --weld

Combinazione "morbida" per desktop (mantiene i dettagli, comprime solo texture e vertici):

gltf-transform optimize model.glb model-desktop.glb \
  --texture-compress webp \
  --meshopt

Non vuoi scrivere script? Usa la compressione online di Any3D

Non vuoi installare Node o configurare una toolchain? Compressione online Any3D elabora direttamente nel browser — scegli un GLB, regola i parametri visivamente in base alla piattaforma (mobile/desktop/VR), il modello non viene caricato su server (elaborazione interamente locale), e esporta la versione compressa con un clic. Alla base usa lo stesso motore di gltf-transform, ma senza alcuna curva di apprendimento. Il prossimo articolo sulla pipeline end-to-end collegherà l'intero flusso.

Promemoria in una frase

  • Memoria GPU è il collo di bottiglia → KTX2, non c'è alternativa
  • Download è il collo di bottiglia, memoria GPU abbondante → WebP/AVIF va bene
  • Sensibilità alla dimensione del decoder → MeshOpt > solo quantizzazione > Draco
  • Modelli molto grandi → solo allora considera Draco
  • Nel dubbio → gltf-transform optimize in un colpo, se sbagli aggiusta

Prossimi passi

Il framework di scelta è pronto. Ultimo articolo della serie: partendo da un modello reale, percorreremo l'intero flusso — esportazione da Blender, compressione texture, compressione vertici, caricamento nel motore — con script automatici completi e una tabella riassuntiva della serie.

Supportaci