Mipmap

I datorgrafik är mipmaps (även MIP-kartor ) eller pyramider förberäknade, optimerade sekvenser av bilder , som var och en är en progressivt lägre upplösningsrepresentation av föregående. Höjden och bredden på varje bild, eller nivå, i mipmap är en faktor två mindre än föregående nivå. Mipmaps behöver inte vara fyrkantiga. De är avsedda att öka renderingshastigheten och minska aliasartefakter . En högupplöst mipmap-bild används för högdensitetsprov, till exempel för objekt nära kameran; bilder med lägre upplösning används när objektet visas längre bort. Detta är ett effektivare sätt att nedfiltrera ( minifiera ) en textur än att sampla alla texel i den ursprungliga texturen som skulle bidra till en skärmpixel ; det går snabbare att ta ett konstant antal prover från de lämpligt nedfiltrerade texturerna. Mipmaps används ofta i 3D- datorspel , flygsimulatorer , andra 3D-bildsystem för texturfiltrering och 2D och 3D GIS-program . Deras användning är känd som mipmapping . Bokstäverna MIP i namnet är en förkortning av den latinska frasen multum in parvo , som betyder "mycket i lite".

Eftersom mipmaps per definition är förallokerade krävs ytterligare lagringsutrymme för att dra nytta av dem. De är också relaterade till wavelet-kompression . Mipmap-texturer används i 3D-scener för att minska tiden som krävs för att rendera en scen. De förbättrar också bildkvaliteten genom att minska aliasing och Moiré-mönster som uppstår på stora visningsavstånd, till kostnaden av 33 % mer minne per textur.

Översikt

Image showing how mipmaps reduce aliasing at large distances.
Bild som visar hur mipmaps minskar aliasing på stora avstånd. (Aliasing orsakar ett moirémönster i den vänstra bilden.)

Mipmaps används för:

  • Detaljnivå (LOD)
  • Förbättra bildkvaliteten. Återgivning från stora texturer där endast små, osammanhängande delmängder av texel används kan lätt producera Moiré-mönster ;
  • Snabbare renderingstider, antingen genom att minska antalet texel som samplades för att rendera varje pixel, eller genom att öka minnesplatsen för de samplingar som tagits;
  • Minska stressen på GPU eller CPU .
  • Vattenytans reflektioner

Ursprung

Mipmapping uppfanns av Lance Williams 1983 och beskrivs i hans papper Pyramidal parametrics . Från sammanfattningen: "Detta dokument utvecklar en 'pyramidal parametrisk' förfiltrerings- och samplingsgeometri som minimerar aliaseffekter och säkerställer kontinuitet inom och mellan målbilder." Den refererade pyramiden kan föreställas som en uppsättning mipmaps staplade framför varandra.

Ursprunget till termen mipmap är en initialism av den latinska frasen multum in parvo ("mycket i ett litet utrymme") och karta, modellerad på bitmapp. Termen pyramider används fortfarande ofta i ett GIS- sammanhang. I GIS-programvara används pyramider främst för att påskynda renderingstider.

Mekanism

Exempel på mipmap-bildlagring: huvudbilden till vänster åtföljs av filtrerade kopior av reducerad storlek.

Varje bitmappsbild av mipmap-uppsättningen är en förminskad dubblett av huvudtexturen , men med en viss reducerad detaljnivå. Även om huvudtexturen fortfarande skulle användas när vyn är tillräcklig för att återge den i full detalj, kommer renderaren att byta till en lämplig mipmap-bild (eller faktiskt interpolera mellan de två närmaste, om trilinjär filtrering är aktiverad) när texturen är sedd på avstånd eller i liten storlek. Återgivningshastigheten ökar eftersom antalet texturpixlar ( texels ) som bearbetas per displaypixel kan vara mycket lägre för liknande resultat med de enklare mipmap-texturerna. Om du använder ett begränsat antal texturprover per skärmpixel (som är fallet med bilinjär filtrering ) reduceras artefakter eftersom mipmap-bilderna faktiskt redan är kantutjämnade . Att skala ner och upp görs också mer effektivt med mipmaps.

Om texturen har en grundstorlek på 256 x 256 pixlar, kan den associerade mipmap-uppsättningen innehålla en serie om 8 bilder, var och en fjärdedel av den totala ytan av den föregående: 128×128 pixlar, 64×64, 32×32 , 16×16, 8×8, 4×4, 2×2, 1×1 (en enda pixel). Om, till exempel, en scen återger denna textur i ett utrymme på 40×40 pixlar, då antingen en uppskalad version av 32×32 (utan trilinjär interpolation) eller en interpolation av 64×64 och 32×32 mipmaps (med trilinjär interpolation) skulle användas. Det enklaste sättet att generera dessa texturer är genom successiv medelvärde; Men mer sofistikerade algoritmer (kanske baserade på signalbehandling och Fourier-transformationer ) kan också användas.

Att visa varje färgkanal för varje nivå av en RGB mipmap som ett separat plan (vänster) visar att hela mipmap bildar en kvadrat på 4 gånger arean. Eftersom varje plan kräver 1 3 lagringsutrymme kräver mipmaps därför 4 3 av minnet; dvs 1 3 ≈ 33 % mer.

Ökningen av lagringsutrymme som krävs för alla dessa mipmaps är en tredjedel av den ursprungliga texturen, eftersom summan av ytorna 1/4 + 1/16 + 1/64 + 1/256 + ⋯ konvergerar till 1/3. I fallet med en RGB-bild med tre kanaler lagrade som separata plan, kan den totala mipmapen visualiseras som att den passar snyggt in i ett kvadratiskt område som är dubbelt så stort som måtten på originalbilden på varje sida (dubbelt så stort på varje sida är fyra gånger det ursprungliga området - ett plan av den ursprungliga storleken för var och en av röd, grön och blå gör tre gånger den ursprungliga arean, och eftersom de mindre texturerna tar 1/3 av originalet, är 1/3 av tre en, så de kommer att ta samma totala utrymme som bara ett av de ursprungliga röda, gröna eller blå planen). Detta är inspirationen till taggen multum in parvo .

Anisotropisk filtrering

När en textur betraktas i en brant vinkel bör filtreringen inte vara enhetlig i varje riktning (den bör vara anisotrop snarare än isotrop ), och en kompromissupplösning krävs. Om en högre upplösning används sjunker cachekoherensen och aliasingen ökar i en riktning, men bilden tenderar att bli tydligare. Om en lägre upplösning används förbättras cachekoherensen, men bilden är alltför suddig. Detta skulle vara en avvägning av MIP-detaljnivå (LOD) för aliasing kontra suddighet. Anisotropisk filtrering försöker dock lösa denna kompromiss genom att sampla ett icke-isotropt texturfotavtryck för varje pixel snarare än att bara justera MIP LOD. Denna icke isotropa textursampling kräver antingen ett mer sofistikerat lagringsschema eller en summering av fler texturhämtningar vid högre frekvenser.

Tabeller för summerade arealer

Tabeller med summerade arealer kan spara minne och ge fler upplösningar. Men de skadar återigen cachekoherensen och behöver bredare typer för att lagra delsummorna, som är större än bastexturens ordstorlek. Således stöder inte modern grafikhårdvara dem.

Se även