Plateforme différente, destin différent : guide de sélection des schémas de compression
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 :
- Plateforme / appareil : PC de bureau, navigateur mobile, casque VR, mini-applications – les capacités varient considérablement
- Mode d'utilisation : présentation unique (page produit e-commerce) ou immersion longue (jeu VR)
- 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énario | Schéma texture | Schéma sommets | Goulot principal | Justification clé |
|---|---|---|---|---|
| Web de bureau (PC navigateur) | KTX2 ou WebP | MeshOpt / Quantifier | Vitesse de téléchargement | Mémoire vidéo large, l'accent est sur la taille des fichiers et la rapidité de chargement |
| Web mobile (navigateur mobile) | KTX2 (obligatoire) | MeshOpt | Mémoire vidéo | La mémoire mobile est limitée, les textures doivent être compressées par blocs |
| WebXR / Casque VR | KTX2 (obligatoire) | MeshOpt + LOD | Mémoire vidéo + FPS | Une mémoire vidéo saturée fait planter, des chutes de FPS provoquent des nausées |
| Mini-applications (ex. Facebook Messenger, LINE) | KTX2 / WebP | MeshOpt / Quantification pure | Taille du paquet + compatibilité | Taille du paquet limitée, éviter les décodeurs lourds |
| Présentation produit e-commerce | WebP (léger) / KTX2 (précis) | MeshOpt | Vitesse du premier affichage | Doit s'afficher instantanément, la taille remplace la vitesse |
| Grande scène / Jumeau numérique | KTX2 (obligatoire) | MeshOpt + Draco + LOD | Mémoire vidéo + draw call | Beaucoup 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 :
| Format | Taille fichier | Occupation mémoire vidéo | Vitesse de téléchargement | Compatibilité | Qualité | Scénario d'usage |
|---|---|---|---|---|---|---|
| PNG | Grande | Grande (après décomp.) | Lente | Très large | Sans perte | Pour des valeurs précises / transparence, ou support hérité |
| JPG | Très petite | Grande (après décomp.) | Lente | Très large | Avec perte | Textures de couleur, priorité à la transmission réseau |
| WebP | Très petite | Grande (après décomp.) | Lente | Assez large | Élevée | Web de bureau, recherche de vitesse de téléchargement |
| AVIF | Encore plus petite | Grande (après décomp.) | Lente | Progressive | Élevée | Nouvelles plateformes, compression extrême |
| KTX2 (ETC1S) | Petite | Très petite | Rapide | Nécessite transcodage | Moyenne (couleurs suffisantes) | Textures de couleur, mobile/VR |
| KTX2 (UASTC) | Moyenne | Petite | Rapide | Nécessite transcodage | Élevée | Textures 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èle | Priorité d'investissement | Raison |
|---|---|---|
| Personnage / produit PBR (beaucoup de textures) | Compression des textures | Les 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 sommets | Les 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 + LOD | Les 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ètre | Rôle | Défaut |
|---|---|---|
--texture-compress basisu | Compresse les textures en KTX2 (choisit automatiquement ETC1S/UASTC) | Désactivé |
--meshopt | Active la compression MeshOpt des sommets | Désactivé |
--simplify | Simplifie la géométrie (réduit les sommets, avec perte) | Désactivé |
--weld | Fusionne les sommets en double | Activé |
--prune | Supprime les nœuds/matériaux inutilisés | Activé |
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 optimizeen 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.