Optimisation glTF

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:

resizeprunesimplifyuastcetc1smeshopt

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"