Optimisation de fichiers glTF
Avec Blender
Le plugin glTF 2.0 propose une documentation très exhaustive.
Avec gltf-transform
Pour des options (très) avancées : Compression meshopts (mesh et animations), ktx/basisu (textures), etc…
Voir la doc. Utiliser en ligne de commande avec :
npm i @gltf-transform/cli
npx gltf-transform optimize input.glb output.glb
Pour tester la compression basisu, il faut installer les outils KhronosGroup KTX-Software. Pour le moment seule la compression dracoest supportée par Voyager (suivre #62 pour le support meshopt et ktx).
Guide des options de compression basisu : compressing to KTX
Attention, la plupart des optimisations ne sont pas sans risque… Il est possible que le modèle soit détérioré et/ou que des extensions ne soient pas supportées par GLTFLoader ou par Voyager.
gltf-transform en ligne de commande
Obtenir de l’aide:
npx gltf-transform help # aide générale
npx gltf-transform help <command> #aide spécifique à une commande
Par exemple : npx gltf-transform help optimize
L’opération optimize peut convenir pour une modification rapide, mais pour une meilleure maitrise on préfèrera généralement enchainer des opérations plus précises. Typiquement:
resize → prune → simplify → uastc → etc1s → meshopt
resize
Redimensionne toutes les textures à la résolution demandée (diminution uniquement)
npx gltf-transform resize --width 2048 --height 2048 "input.glb" "output.glb"
Voir aussi: Script de diffuse bake pour blender
prune
Supprime toutes les propriétés et les accesseurs inutilisés. Par exemple, si une UVmap est définie pour un mesh mais que son material ne l’utilise pas, elle peut être retirée.
npx gltf-transform prune "input.glb" "output.glb"
simplify
Simplifie le mesh en retirant les vertex les moins significatifs. On peut lui demander un ratio cible (--ratio), ou un niveau d’erreur admissible (--error).
Pour une scène multi-modèles, pour préserver les bordures, on rajoutera l’option --lock-borders
uastc
Compression ktx la plus performance, mais génère de nombreux artefacts visuels. Généralement optimale pour les normal/roughness/metal maps.
npx gltf-transform uastc --slots "{normalTexture,occlusionTexture,metallicRoughnessTexture}" --level 4 --rdo --rdo-lambda 4 --zstd 18 "input.glb" "output.glb"
etc1s
Deuxième format ktx, résultats plus gros qu’UASTC, mais moins d’artefacts visuels. Idéal pour les diffuse.
Les images déjà en format ktx ne seront pas recompressées donc on omet géneralement le paramètre --slot si le modèle est déjà passé par une compression UASTC.
npx gltf-transform etc1s --quality 240 "input.glb" "output.glb"
meshopt
Compression de mesh. Alternative à draco, taille de fichier équivalente après compression. meshopt permet généralement des performances légèrement supérieures en vitesse de décompression.
npx gltf-transform meshopt "input.glb "output.glb"