Le texture sono tipicamente il singolo maggiore consumatore di VRAM nel rendering in tempo reale. Un moderno gioco AAA potrebbe essere distribuito con 20–60 GB di dati di texture su disco, decompressi per riempire diversi gigabyte di memoria GPU a runtime. Scegliere la giusta risoluzione, il formato di compressione e la strategia di caricamento impatta direttamente sul frame rate, sui tempi di caricamento e sui requisiti hardware minimi.
Budget VRAM
Una singola texture RGBA 4096×4096 non compressa consuma 64 MB di VRAM. Con una tipica GPU da 8 GB, ciò significa che circa 125 texture 4K non compresse riempirebbero l’intero budget — senza lasciare nulla per frame buffer, depth buffer o dati mesh. In pratica, i giochi si affidano heavily alla compressione delle texture per adattare migliaia di texture in memoria limitata.
Le linee guida del budget variano in base all’hardware di destinazione. Per mobile (2–3 GB di memoria condivisa), mantieni la memoria totale delle texture sotto i 512 MB. Per PC/console (6–12 GB VRAM), 2–4 GB per le texture è comune. I titoli VR necessitano di margine extra perché renderizzano due viewport simultaneamente.
MIP Mapping
Le MIP map sono copie ridimensionate precalcolate di una texture. Una texture da 2048 pixel ha livelli MIP a 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2 e 1 pixel. La GPU seleziona il livello MIP appropriato in base a quanto la superficie è lontana dalla camera, evitando l’aliasing (shimmer) che si verifica quando una texture ad alta risoluzione viene ridotta al di sotto della sua densità di pixel.
Le MIP map aggiungono esattamente il 33% all’impronta di memoria della texture (la serie geometrica infinita 1/4 + 1/16 + 1/64 + ... converge a 1/3). Questo vale quasi sempre il costo. Senza MIP mapping, le superfici distanti tremolano durante il movimento della camera, creando un disturbo visivo distraente. Ogni motore di gioco genera automaticamente le MIP map durante l’importazione degli asset.
Formati di Compressione delle Texture
BC (Block Compression) — PC e Console
La famiglia BC (nota anche come DXT/S3TC per i formati più vecchi) è lo standard su PC e console. BC1 (DXT1) comprime RGB a 4:1, fornendo 4 bit per pixel. BC3 (DXT5) gestisce RGBA a 4:1. BC5 è ottimale per le mappe normali (compressione a due canali). BC7 fornisce RGB(A) di qualità superiore agli stessi 8 bit per pixel di BC3 ed è preferito sull’hardware moderno. Una texture BC7 da 2048 pixel usa 16 MB con MIP — rispetto ai 64 MB non compressi.
ASTC — Mobile e Console Moderne
Adaptive Scalable Texture Compression supporta dimensioni di blocco variabili da 4×4 a 12×12, permettendo agli sviluppatori di scegliere un compromesso qualità-dimensione per texture. L’ASTC è obbligatorio sulle GPU mobile moderne (ARM Mali, Qualcomm Adreno) ed è supportato su PlayStation 5 e Nintendo Switch. Un blocco ASTC 4×4 fornisce qualità comparabile a BC7; i blocchi 6×6 riducono ulteriormente le dimensioni con perdita visiva minima.
ETC2 — Baseline OpenGL ES
ETC2 è il formato compresso minimo richiesto per i dispositivi OpenGL ES 3.0. La qualità è inferiore ad ASTC, specialmente per le texture con canali alpha. Usa ETC2 solo come fallback per dispositivi più vecchi che non supportano ASTC.
Texture Atlas
Combinare più texture piccole in una singola texture grande (un atlas) riduce le draw call. Ogni cambio di materiale in un frame richiede un cambio di stato sulla GPU, che blocca la pipeline. Raggruppando le texture correlate — tutte le texture di parete, tutte le texture di pavimento — in atlas, gli oggetti che condividono l’atlas possono essere raggruppati in una singola draw call. Le coordinate UV vengono regolate per fare riferimento alla sotto-regione dell’atlas.
Le dimensioni degli atlas di 2048×2048 o 4096×4096 sono tipiche. Gli atlas più grandi sprecano VRAM se solo una piccola parte viene utilizzata in un dato frame. I sistemi di texture streaming nei motori come Unreal Engine 5 mitigano parzialmente questo problema caricando solo i livelli MIP richiesti.
LOD e Texture Streaming
Il Level of Detail (LOD) si applica alle texture così come alla geometria. Gli oggetti lontani dalla camera possono utilizzare livelli MIP inferiori o texture completamente diverse e più piccole. La texturizzazione virtuale (utilizzata nel sistema Nanite di Unreal Engine e nelle Mega Textures di id Software) trasmette dati di texture dal disco in tempo reale, caricando solo i tile visibili alla posizione e al livello di zoom correnti della camera.
Questo disaccoppia la risoluzione delle texture dalla capacità VRAM: una scena può fare riferimento a terabyte di dati di texture mantenendo solo poche centinaia di megabyte residenti nella memoria GPU.
Linee Guida Pratiche
- Usa 1024 pixel per piccoli oggetti di scena (tazze, viti, cerniere)
- Usa 2048 pixel per oggetti di medie dimensioni (mobili, armi, sezioni di parete)
- Usa 4096 pixel solo per asset di prim’ordine o superfici grandi (terreno, facciate di edifici)
- Comprimi sempre con BC7 (PC) o ASTC 4×4 (mobile) come baseline
- Profila l’utilizzo VRAM con RenderDoc o il profiler integrato del motore
Genera texture seamless pronte per i giochi con i nostri generatori Erba, Sabbia o Selciato, disponibili a 1024, 2048 e 4096 pixel.