Texturarea MIP ( Eng. MIP mapping ) este o metodă de texturare care utilizează mai multe copii ale aceleiași texturi cu detalii diferite. Numele provine de la lat. multum in parvo - „mult în puțin”.
Imaginea arată cel mai bine atunci când detaliile texturii sunt aproape de rezoluția ecranului . Dacă rezoluția ecranului este mai mare decât rezoluția texturii (textura prea mică/obiect prea aproape), imaginea va fi neclară. Dacă rezoluția texturii este prea mare (textura este prea mare / obiectul este prea departe), obținem pixeli aleatori - ceea ce înseamnă pierderea detaliilor fine, moiré și pâlpâire. Detalierea excesivă este, de asemenea, dăunătoare în ceea ce privește performanța - supraîncărcă magistrala video și dă un procent mare de pierderi de memorie cache . Se dovedește că este mai bine să aveți mai multe texturi cu detalii diferite și să o aplicați pe cea mai potrivită în această situație obiectului. În unele cazuri, creșterea vitezei de texturare poate crește de mii de ori, iar viteza de afișare a întregii scene pe ecran - de zeci de ori.
Multe jocuri moderne pentru PC permit utilizatorului să seteze manual calitatea texturii, în setări, alegând între performanță și calitate. Dacă calitatea texturii este setată la „scăzută”, jocul va folosi mipmap-urile lor (copii mici) în loc de texturile originale.
Este creată o așa-numită piramidă MIP - o secvență de texturi cu o rezoluție de la maxim la 1x1. De exemplu: 1x1, 2x2, 4x4, 8x8, 16x16, 32x32, 64x64, 128x128, 256x256, 512x512 și 1024x1024. Fiecare dintre aceste texturi este numită nivel MIP ( ing. nivel MIP ) sau nivel de detaliu ( ing. nivel de detaliu ).
Toate aceste texturi au aceeași imagine. Astfel, mip-texturarea crește consumul de memorie video cu o treime:
.La aplicarea texturilor, se calculează distanța până la obiect, iar numărul texturii este găsit prin formula:
,unde rezoluția este rezoluția camerei virtuale (numărul de pixeli care vor fi într-un obiect cu dimensiunea de 1 unitate situat la 1 unitate de cameră), texelsize este dimensiunea texelului în unități lumii 3D, dist este distanța la obiectul din aceleași unități, mip bias - un număr care vă permite să selectați o textură mai mult sau mai puțin detaliată decât o oferă formula.
Acest număr este rotunjit la un număr întreg, iar textura cu numărul corespunzător (zero este cel mai detaliat, primul este de două ori mai mic etc.) este aplicată obiectului.
Consumul de memorie video crește cu o treime (totuși, în schimb, viteza de desenare a obiectelor pe ecran crește). Cu toate acestea, dimensiunile tipice ale memoriei video la începutul anilor 2010 sunt de 1-3 GB. În plus, dacă obiectul este departe, textura sa detaliată poate fi încărcată în RAM .
Texturarea MIP nu rezolvă problema texturilor care se află la un unghi ascuțit față de vizualizator (cum ar fi un drum într-un simulator de mașină ). Pentru astfel de texturi, rezoluția de-a lungul unei axe este foarte diferită de rezoluția de-a lungul celeilalte - și, de exemplu, imaginea este clar neclară de-a lungul axei X, în timp ce pâlpâirea este vizibilă de-a lungul axei Y, ceea ce este caracteristic unei texturi supradimensionate. rezoluţie. Există mai multe moduri de a rezolva acest lucru simultan (începând cu cea mai mică calitate):
Este vizibilă o limită clară între nivelurile MIP. Acest lucru este rezolvat prin filtrare triliniară .
Dacă există bucăți de suprafețe diferite în aceeași textură, trebuie să faceți alocații și goluri care depășesc 1 pixel din cel mai „călător” nivel MIP. Acest nivel nu este neapărat cel mai înalt (de exemplu, în Dota 2 vedem atât un erou detaliat în meniu, cât și unul în miniatură în joc) - prin urmare, aceste lacune au fost prescrise în mod explicit în manualul de modelare Dota 2 .
Renderele de înaltă calitate pot folosi un tabel de sumă parțială . Aceasta oferă cea mai înaltă calitate a imaginii (patru accesări la tabel pot media culoarea pe orice dreptunghi), dar aveți nevoie de tipuri mai largi pentru a stoca sumele. În consecință, tabelul sumelor parțiale nu mai este o treime, ci cel puțin de două ori. Tabelul de sumă parțială nu rezolvă problemele cu erorile de cache.