Les textures sont généralement le plus grand consommateur unique de VRAM dans le rendu en temps réel. Un jeu AAA moderne peut inclure 20–60 Go de données de textures sur disque, décompressées pour remplir plusieurs gigaoctets de mémoire GPU à l'exécution. Choisir la bonne résolution, le bon format de compression et la bonne stratégie de chargement impacte directement la fréquence d'images, les temps de chargement et la configuration matérielle minimale.
Budgets VRAM
Une seule texture RGBA 4096×4096 non compressée consomme 64 Mo de VRAM. Avec un GPU typique de 8 Go, cela signifie qu'environ 125 textures 4K non compressées rempliraient l'intégralité du budget — ne laissant rien pour les tampons de trame, les tampons de profondeur ou les données de maillage. En pratique, les jeux s'appuient fortement sur la compression de textures pour faire tenir des milliers de textures dans une mémoire limitée.
Les consignes de budget varient selon le matériel cible. Pour mobile (2–3 Go de mémoire partagée), gardez la mémoire totale des textures sous 512 Mo. Pour PC/console (6–12 Go de VRAM), 2–4 Go pour les textures est courant. Les titres VR ont besoin d'une marge supplémentaire car ils rendent deux fenêtres simultanément.
MIP mapping
Les MIP maps sont des copies pré-calculées réduites d'une texture. Une texture de 2048 px a des niveaux MIP à 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2 et 1 pixel. Le GPU sélectionne le niveau MIP approprié en fonction de l'éloignement de la surface par rapport à la caméra, évitant l'aliasing (scintillement) qui se produit lorsqu'une texture haute résolution est réduite en dessous de sa densité de pixels.
Les MIP maps ajoutent exactement 33 % à l'empreinte mémoire de la texture (la série géométrique infinie 1/4 + 1/16 + 1/64 + ... converge vers 1/3). Cela vaut presque toujours le coût. Sans MIP mapping, les surfaces distantes scintillent lors des mouvements de caméra, créant du bruit visuel perturbant. Chaque moteur de jeu génère des MIP maps automatiquement lors de l'importation des ressources.
Formats de compression de textures
BC (Block Compression) — PC et console
La famille BC (également connue sous les noms DXT/S3TC pour les anciens formats) est la norme sur PC et console. BC1 (DXT1) compresse RGB avec un ratio 4:1, donnant 4 bits par pixel. BC3 (DXT5) gère RGBA avec un ratio 4:1. BC5 est optimal pour les cartes normales (compression à deux canaux). BC7 offre une meilleure qualité RGB(A) aux mêmes 8 bits par pixel que BC3, et est préféré sur le matériel moderne. Une texture BC7 de 2048 px utilise 16 Mo avec les MIPs — contre 64 Mo non compressé.
ASTC — Mobile et consoles modernes
La compression de texture adaptative évolutive (Adaptive Scalable Texture Compression) supporte des tailles de blocs variables de 4×4 à 12×12, permettant aux développeurs de choisir un compromis qualité/taille par texture. ASTC est mandaté sur les GPU mobiles modernes (ARM Mali, Qualcomm Adreno) et est pris en charge sur PlayStation 5 et Nintendo Switch. Un bloc ASTC 4×4 offre une qualité comparable à BC7 ; des blocs 6×6 réduisent davantage la taille avec une perte visuelle minimale.
ETC2 — Base OpenGL ES
ETC2 est le format compressé minimum requis pour les appareils OpenGL ES 3.0. La qualité est inférieure à ASTC, en particulier pour les textures avec des canaux alpha. Utilisez ETC2 uniquement comme solution de repli pour les appareils plus anciens qui ne prennent pas en charge ASTC.
Atlas de textures
Combiner plusieurs petites textures en une seule grande texture (un atlas) réduit les appels de rendu. Chaque changement de matériau dans une trame nécessite un changement d'état sur le GPU, ce qui bloque le pipeline. En regroupant des textures liées — toutes les textures de mur, toutes les textures de sol — dans des atlas, les objets partageant l'atlas peuvent être regroupés en un seul appel de rendu. Les coordonnées UV sont ajustées pour référencer la sous-région de l'atlas.
Les tailles d'atlas de 2048×2048 ou 4096×4096 sont typiques. Les atlas plus grands gaspillent la VRAM si seulement une petite portion est utilisée dans une trame donnée. Les systèmes de streaming de textures dans des moteurs comme Unreal Engine 5 atténuent partiellement cela en ne chargeant que les niveaux MIP requis.
LOD et streaming de textures
Le niveau de détail (LOD) s'applique aux textures ainsi qu'à la géométrie. Les objets éloignés de la caméra peuvent utiliser des niveaux MIP inférieurs ou des textures entièrement différentes et plus petites. La texturation virtuelle (utilisée dans le système Nanite d'Unreal Engine et les Mega Textures d'id Software) diffuse les données de texture depuis le disque en temps réel, ne chargeant que les tuiles visibles à la position et au niveau de zoom actuels de la caméra.
Cela découple la résolution de texture de la capacité VRAM : une scène peut référencer des téraoctets de données de texture tout en ne maintenant que quelques centaines de mégaoctets en mémoire GPU.
Directives pratiques
- Utilisez 1024 px pour les petits accessoires (tasses, vis, charnières)
- Utilisez 2048 px pour les objets moyens (meubles, armes, sections de mur)
- Utilisez 4096 px uniquement pour les ressources héroïques ou les grandes surfaces (terrain, façades de bâtiments)
- Compressez toujours avec BC7 (PC) ou ASTC 4×4 (mobile) comme base
- Profilez l'utilisation VRAM avec RenderDoc ou le profileur intégré du moteur
Générez des textures sans couture prêtes pour les jeux avec nos générateurs Herbe, Sable ou Pavé, disponibles en 1024, 2048 et 4096 px.