Kris

Plateforme différente, destin différent : guide de sélection des schémas de compression

Compression 3DCompression de textureCompression de sommetsOptimisationPipeline

Les 4 articles précédents ont présenté les outils de compression des sommets et des textures. Mais savoir utiliser un outil est une chose, savoir lequel utiliser et dans quel contexte en est une autre. Cet article répond à cette question – et vous permet de prendre une décision immédiate après l'avoir lu.

Après avoir lu cet article, vous devriez être en mesure de répondre : sur quelle plateforme mon projet s'exécute-t-il ? Le goulot d'étranglement initial est-il le téléchargement ou la mémoire vidéo ? Quels schémas pour les textures et les sommets choisir ?

Préambule : piloté par le scénario, pas par l'outil

L'ensemble de l'article repose sur un seul principe fondamental, également répété tout au long de cette série :

Il n'existe pas de « meilleur » schéma de compression, seulement celui qui correspond le mieux au scénario.

Les trois variables qui influencent le choix :

  1. Plateforme / appareil : PC de bureau, navigateur mobile, casque VR, mini-applications – les capacités varient considérablement
  2. Mode d'utilisation : présentation unique (page produit e-commerce) ou immersion longue (jeu VR)
  3. Goulot d'étranglement principal : téléchargement lent, mémoire vidéo insuffisante, ou décodeur bloquant le premier affichage

Identifiez d'abord le goulot d'étranglement, puis choisissez l'outil. La matrice ci-dessous formalise cette approche.

Matrice de décision centrale : plateforme × schéma recommandé

Voici le tableau le plus important de l'article. Par plateforme, il donne les recommandations pour les textures et les sommets, ainsi que les justifications.

Plateforme / ScénarioSchéma textureSchéma sommetsGoulot principalJustification clé
Web de bureau (PC navigateur)KTX2 ou WebPMeshOpt / QuantifierVitesse de téléchargementMémoire vidéo large, l'accent est sur la taille des fichiers et la rapidité de chargement
Web mobile (navigateur mobile)KTX2 (obligatoire)MeshOptMémoire vidéoLa mémoire mobile est limitée, les textures doivent être compressées par blocs
WebXR / Casque VRKTX2 (obligatoire)MeshOpt + LODMémoire vidéo + FPSUne mémoire vidéo saturée fait planter, des chutes de FPS provoquent des nausées
Mini-applications (ex. Facebook Messenger, LINE)KTX2 / WebPMeshOpt / Quantification pureTaille du paquet + compatibilitéTaille du paquet limitée, éviter les décodeurs lourds
Présentation produit e-commerceWebP (léger) / KTX2 (précis)MeshOptVitesse du premier affichageDoit s'afficher instantanément, la taille remplace la vitesse
Grande scène / Jumeau numériqueKTX2 (obligatoire)MeshOpt + Draco + LODMémoire vidéo + draw callBeaucoup de textures, modèles volumineux, compression tous azimuts

Quelques jugements à retenir :

  • Dès que la mémoire vidéo est un goulot d'étranglement, KTX2 est obligatoire (mobile, VR, grandes scènes)
  • Si le téléchargement est lent et la mémoire vidéo abondante, WebP suffit (bureau, e-commerce)
  • Pour les environnements sensibles à la taille du paquet comme les mini-applications, privilégiez MeshOpt plutôt que Draco – décodeur plus petit, meilleure compatibilité
  • Ne considérez Draco que pour les très gros modèles, pour la plupart des modèles moyens et petits, MeshOpt est plus équilibré

Comparaison complète des formats de texture

Savoir qu'il faut utiliser KTX2 ne suffit pas. Comparons tous les formats de texture sous tous les angles :

FormatTaille fichierOccupation mémoire vidéoVitesse de téléchargementCompatibilitéQualitéScénario d'usage
PNGGrandeGrande (après décomp.)LenteTrès largeSans pertePour des valeurs précises / transparence, ou support hérité
JPGTrès petiteGrande (après décomp.)LenteTrès largeAvec perteTextures de couleur, priorité à la transmission réseau
WebPTrès petiteGrande (après décomp.)LenteAssez largeÉlevéeWeb de bureau, recherche de vitesse de téléchargement
AVIFEncore plus petiteGrande (après décomp.)LenteProgressiveÉlevéeNouvelles plateformes, compression extrême
KTX2 (ETC1S)PetiteTrès petiteRapideNécessite transcodageMoyenne (couleurs suffisantes)Textures de couleur, mobile/VR
KTX2 (UASTC)MoyennePetiteRapideNécessite transcodageÉlevéeTextures normales / données

Notez que les trois premières lignes (PNG/JPG/WebP/AVIF) ont toutes une occupation mémoire vidéo « grande » – quelle que soit la taille sur le disque, une fois en mémoire vidéo, elles sont décompressées en pixels bruts. C'est la limitation fondamentale des formats traditionnels.

Une stratégie mixte est courante : utiliser KTX2 pour les textures de couleur essentielles afin de garantir la mémoire vidéo, et WebP pour les textures secondaires (par exemple une petite emissive) pour simplifier. Il n'est pas nécessaire de tout convertir en KTX2, répartissez en fonction du goulot d'étranglement.

Diagramme de décision : choix pas à pas

La matrice donne le résultat, le diagramme vous montre comment y parvenir.

Sur quelle plateforme votre projet s'exécute-t-il ?
│
├─ Web de bureau (mémoire vidéo large)
│   └─ Le premier affichage est-il lent ?
│       ├─ Oui → WebP (ou AVIF) + MeshOpt  [recherche de vitesse de téléchargement]
│       └─ Non, mais beaucoup de modèles → KTX2 + MeshOpt [pour anticiper l'avenir]
│
├─ Web mobile / VR / Grande scène (mémoire vidéo limitée)
│   └─ Textures obligatoires : KTX2 (couleur ETC1S, données UASTC)
│       └─ Les sommets sont-ils très denses ?
│           ├─ Oui → + Draco [compression extrême, tolère un décodage lent]
│           └─ Non → + MeshOpt [équilibré]
│
└─ Mini-applications / runtime limité
    └─ La taille du paquet est-elle sensible ?
        ├─ Oui → Quantification pure ou MeshOpt + WebP [décodeur nul/petit]
        └─ Non → MeshOpt + KTX2 [combinaison standard]

Compression des sommets vs compression des textures : où investir ?

On me demande souvent : avec un budget limité, par où commencer ? Regardez la composition du modèle :

Caractéristiques du modèlePriorité d'investissementRaison
Personnage / produit PBR (beaucoup de textures)Compression des texturesLes textures représentent 80%+ du volume, le rendement sur les sommets est faible
Modèle CAO / scanné (sommets très denses, peu de textures)Compression des sommetsLes sommets constituent le volume principal
Personnage animé (squelette + skin)Les deux, mais priorité sommets (hors Draco)Les données d'animation prennent aussi du volume, Draco gère mal l'animation
Bâtiment / scène (grande, textures moyennes)Textures + LODLes textures économisent la mémoire vidéo, les LOD économisent les draw calls

Un classement approximatif des gains : texture KTX2 > sommets MeshOpt/quantification > simplification géométrique (LOD) > sommets Draco. Commencez par ce qui rapporte le plus.

Stratégie mixte : textures clés en KTX2, textures secondaires en WebP

Toutes les textures ne méritent pas d'être compressées en KTX2. Un matériau PBR typique a 5 à 6 textures, toutes les compresser en KTX2 demande beaucoup de travail et n'est pas toujours nécessaire.

Répartition pratique :

  • Obligatoire KTX2 : albedo (grande, couleur), normal (sensible à la précision), roughness/metallic (impacte l'éclairage)
  • Peut être WebP/JPG : emissive (généralement petite), AO (moyenne/basse fréquence), détail normal (si présent)

Critère de décision : la texture est-elle grande ? Contient-elle des détails haute fréquence ? Sera-t-elle échantillonnée fréquemment ? Si les trois réponses sont oui → KTX2 ; sinon, un format traditionnel fera l'affaire.

Sélection automatisée : une commande avec gltf-transform

La commande optimize de gltf-transform est la solution idéale pour la plupart des scénarios – elle détecte automatiquement le type de texture, compresse selon les recommandations et traite éventuellement les sommets.

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

# Optimisation standard : textures KTX2 + sommets MeshOpt + suppression des redondances
gltf-transform optimize model.glb model-optimized.glb \
  --texture-compress basisu \
  --meshopt

Paramètres :

ParamètreRôleDéfaut
--texture-compress basisuCompresse les textures en KTX2 (choisit automatiquement ETC1S/UASTC)Désactivé
--meshoptActive la compression MeshOpt des sommetsDésactivé
--simplifySimplifie la géométrie (réduit les sommets, avec perte)Désactivé
--weldFusionne les sommets en doubleActivé
--pruneSupprime les nœuds/matériaux inutilisésActivé

Une combinaison « compression forte » adaptée au mobile :

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

Combinaison « douce » pour le bureau (conserve les détails, ne compresse que textures et sommets) :

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

Pas envie d'écrire un script ? Utilisez la compression en ligne Any3D

Vous ne voulez pas installer Node.js ni configurer une chaîne d'outils ? Any3D Compression en ligne traite directement dans le navigateur – sélectionnez un GLB, réglez visuellement les paramètres par plateforme (mobile/bureau/VR), le modèle n'est pas téléchargé sur le serveur (tout est traité localement), et exportez en un clic la version compressée. Le moteur sous-jacent est le même que gltf-transform, mais sans aucune barrière à l'entrée. Le prochain article de bout en bout assemblera l'ensemble du processus.

Mémo en une phrase

  • Goulot d'étranglement mémoire vidéo → KTX2, pas le choix
  • Goulot d'étranglement téléchargement, mémoire vidéo abondante → WebP/AVIF suffisent
  • Sensibilité à la taille du décodeur → MeshOpt > quantification pure > Draco
  • Très gros modèles → seulement envisager Draco
  • Dans le doute → gltf-transform optimize en un clic, ajustez si nécessaire

Prochaine étape

Le cadre de sélection est en place. Dernier article de la série : à partir d'un modèle réel, parcourez l'exportation Blender, la compression de texture, la compression des sommets, le chargement dans le moteur, et fournissez un script automatisé complet ainsi qu'une fiche récapitulative de la série.

Nous soutenir