MIP map
# MIP map

Una MIP map è, nell'ambito della computer grafica 3D, una raccolta ottimizzata di immagini bitmap precalcolate associate ad una texture principale; essa ha lo scopo di aumentare la velocità di rendering e di ridurre gli artefatti a scapito di una maggiore richiesta di memoria.

Le MIP map sono molto usate nei videogiochi 3D, simulatori di volo e altre applicazioni. Le lettere "MIP" sono l'acronimo della frase latina multum in parvo che significa "molto nel piccolo".

## Origine

Le MIP map furono inventate da Lance J. Williams nel 1983 che le descrisse nella sua pubblicazione Pyramidal parametrics dove le MIP map venivano immaginate impilate una sull'altra come a formare una piramide.

## Funzionamento

### MIP map standard

Ogni bitmap dell'insieme MIP map è una versione più piccola della texture principale, cioè con un dettaglio e una risoluzione minore. La texture principale viene utilizzata quando il punto di vista è tale da permettere di renderizzarla con il massimo dettaglio, il processo passa ad un'immagine dell'insieme più ridotta (o ne crea una nuova, per interpolazione tra le due immagini più "vicine", se è attivo il filtro trilineare) quando la texture è vista in lontananza o in piccole dimensioni. La velocità di rendering aumenta dato che il numero di pixel calcolati può diminuire sensibilmente rispetto a quello delle texture semplici. La possibilità che si formino artefatti si riduce per il fatto che sulle immagini MIP map è già stato applicato l'antialiasing con conseguente diminuzione del carico di lavoro in tempo reale. Infine anche il ridimensionamento viene eseguito in modo più efficiente.

Se la texture ha una dimensione di base di 256x256 pixel (solitamente le texture sono quadrate e hanno lati uguali a una potenza di 2) allora l'insieme MIP map può contenere una serie di 8 immagini, ognuna della dimensione di un quarto rispetto alla precedente: 128x128 pixel, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Se, per esempio, è necessario renderizzare la texture in uno spazio di 40x40 pixel, verrà calcolata un'interpolazione tra la MIP map da 64x64 e quella da 32x32.

L'aumento di spazio occupato da tutte le MIP map è di un 50% rispetto a quello occupato dalla texture originale, anche se la superficie occupata è solo di un terzo maggiore, infatti la somma della serie geometrica con termine generale pari a 1/4 è:

    $\sum _{k=0}^{\infty }\left({\frac {1}{4}}\right)^{k}={\frac {4}{3}}$

a meno che non venga utilizzato un sistema di compressione delle immagini.

In molti casi è necessario un processo non uniforme in ogni direzione (cioè filtro anisotropico) e viene utilizzata una soluzione di compromesso. Si può adoperare una bitmap a risoluzione maggiore, in questo caso diminuisce la coerenza della cache e aumenta l'aliasing in una direzione, ma l'immagine tende a diventare più nitida. Diversamente si può adoperare una bitmap a risoluzione minore, in questo caso aumenta la coerenza della cache, ma l'immagine risulta sfuocata al punto che potrebbe diventare difficile da riconoscere.

### RIP map

Per risolvere questo problema si utilizzano, talvolta, MIP map non uniformi (chiamate RIP map). Partendo da una texure base di 16x16, le risoluzioni delle RIP map sarebbero: 16×8, 16×4, 16×2, 16×1, 8×16, 8×8, 8×4, 8×2, 8×1, 4×16, 4×8, 4×4, 4×2, 4×1, 2×16, 2×8, 2×4, 2×2, 2×1, 1×16, 1×8, 1×4, 1×2 1×1. Sfortunatamente questo approccio richiede il quadruplo della memoria della texture di base. Queste immagini riescono sia a svolgere la funzione delle classiche BIP map, sia a facilitare il calcolo e la resa visiva su superfici inclinate, riducendo il peso del filtro anisotropico, ma richiedono una quantità maggiore di RAM, in quanto il loro peso è doppio rispetto alle MIP map, in compenso contengono 2,5 volte le informazioni rispetto alle MIP map.

