Texturen zijn doorgaans de grootste verbruiker van VRAM in real-time rendering. Een moderne AAA-game kan 20–60 GB aan textuurdata op schijf bevatten, gedecomprimeerd om tijdens uitvoering meerdere gigabytes GPU-geheugen te vullen. De juiste resolutie, compressieformaat en laadstrategie kiezen heeft direct invloed op de framerate, laadtijden en minimale hardwarevereisten.
VRAM-Budgetten
Een enkele ongecomprimeerde 4096×4096 RGBA-textuur verbruikt 64 MB VRAM. Met een typische 8 GB GPU betekent dit dat ongeveer 125 ongecomprimeerde 4K-texturen het volledige budget zouden vullen — zonder iets over te laten voor framebuffers, dieptebuffers of mesh-data. In de praktijk zijn games sterk afhankelijk van textuurcompressie om duizenden texturen in beperkt geheugen te laten passen.
Budgetrichtlijnen variëren per doelhardware. Voor mobiel (2–3 GB gedeeld geheugen), houd het totale textuurgeheugen onder 512 MB. Voor pc/console (6–12 GB VRAM) is 2–4 GB voor texturen gangbaar. VR-titels hebben extra ruimte nodig omdat ze twee viewports tegelijk renderen.
MIP-Mapping
MIP-maps zijn vooraf berekende, gedownscalede kopieën van een textuur. Een 2048px-textuur heeft MIP-niveaus op 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2 en 1 pixel. De GPU selecteert het juiste MIP-niveau op basis van hoe ver het oppervlak van de camera verwijderd is, waarbij aliasing (schittering) wordt vermeden die optreedt wanneer een hoog-resolutie-textuur wordt verkleind tot onder zijn pixeldichtheid.
MIP-maps voegen precies 33% toe aan de geheugenvoetafdruk van de textuur (de oneindige meetkundige reeks 1/4 + 1/16 + 1/64 + ... convergeert naar 1/3). Dit is bijna altijd de kosten waard. Zonder MIP-mapping schitteren verre oppervlakken tijdens camerabeweging, wat afleidend visueel ruis veroorzaakt. Elke game-engine genereert MIP-maps automatisch tijdens het importeren van assets.
Textuurcompressieformaten
BC (Blokcompressie) — Pc en Console
De BC-familie (ook bekend als DXT/S3TC voor oudere formaten) is de standaard op pc en console. BC1 (DXT1) comprimeert RGB met 4:1, wat 4 bits per pixel geeft. BC3 (DXT5) verwerkt RGBA met 4:1. BC5 is optimaal voor normale maps (tweekanaalcompressie). BC7 biedt hogere kwaliteit RGB(A) bij dezelfde 8 bits per pixel als BC3, en heeft de voorkeur op moderne hardware. Een 2048px BC7-textuur gebruikt 16 MB met MIPs — vergeleken met 64 MB ongecomprimeerd.
ASTC — Mobiel en Moderne Consoles
Adaptive Scalable Texture Compression ondersteunt variabele blokgroottes van 4×4 tot 12×12, waardoor ontwikkelaars een kwaliteit-grootte-afweging per textuur kunnen kiezen. ASTC is verplicht op moderne mobiele GPU’s (ARM Mali, Qualcomm Adreno) en wordt ondersteund op PlayStation 5 en Nintendo Switch. Een 4×4 ASTC-blok biedt kwaliteit vergelijkbaar met BC7; 6×6-blokken verkleinen de grootte verder met minimaal zichtbaar verlies.
ETC2 — OpenGL ES Basislijn
ETC2 is het minimaal vereiste gecomprimeerde formaat voor OpenGL ES 3.0-apparaten. Kwaliteit is lager dan ASTC, vooral voor texturen met alfakanalen. Gebruik ETC2 alleen als fallback voor oudere apparaten zonder ASTC-ondersteuning.
Textuuratlassen
Het combineren van meerdere kleine texturen in een enkele grote textuur (een atlas) vermindert draw-calls. Elke materiaalwissel in een frame vereist een toestandswijziging op de GPU, waardoor de pijplijn wordt geblokkeerd. Door gerelateerde texturen — alle muurtexturen, alle vloertexturen — in atlassen te verpakken, kunnen objecten die de atlas delen worden samengevoegd in een enkele draw-call. UV-coördinaten worden aangepast om te verwijzen naar de deelregio van de atlas.
Atlasgroottes van 2048×2048 of 4096×4096 zijn typisch. Grotere atlassen verspillen VRAM als slechts een klein deel in een bepaald frame wordt gebruikt. Textuurstreaming-systemen in engines zoals Unreal Engine 5 beperken dit deels door alleen de vereiste MIP-niveaus te laden.
LOD en Textuurstreaming
Level of Detail (LOD) is van toepassing op texturen evenals geometrie. Objecten ver van de camera kunnen lagere MIP-niveaus of geheel andere, kleinere texturen gebruiken. Virtuele texturing (gebruikt in Unreal Engine’s Nanite-systeem en id Software’s Mega Textures) streamt textuurdata in real-time van schijf, waarbij alleen de tegels worden geladen die zichtbaar zijn op de huidige camerapositie en zoomniveau.
Dit ontkoppelt textuurresolutie van VRAM-capaciteit: een scène kan verwijzen naar terabytes aan textuurdata terwijl slechts een paar honderd megabytes in GPU-geheugen resident blijft.
Praktische Richtlijnen
- Gebruik 1024px voor kleine rekwisieten (kopjes, schroeven, scharnieren)
- Gebruik 2048px voor middelgrote objecten (meubilair, wapens, muurgedeelten)
- Gebruik 4096px alleen voor hero-assets of grote oppervlakken (terrein, gevels van gebouwen)
- Comprimeer altijd met BC7 (pc) of ASTC 4×4 (mobiel) als basislijn
- Profileer VRAM-gebruik met RenderDoc of de ingebouwde profiler van de engine
Genereer naadloze, game-klare texturen met onze Gras-, Zand- of Kinderhoofdjes-generatoren, beschikbaar op 1024, 2048 en 4096px.