Perché le mappe normali sono prevalentemente blu invece di un colore casuale?
Immagino che i normali vettori di un oggetto 3D possano puntare in ogni direzione, come:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
Perché le mappe normali sono prevalentemente blu invece di un colore casuale?
Immagino che i normali vettori di un oggetto 3D possano puntare in ogni direzione, come:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
Risposte:
Esistono due tipi di mappe normali comunemente utilizzate nello sviluppo del gioco. Il modo in cui pensi che dovrebbero funzionare è il modo in cui funziona un tipo (mappe normali dello spazio modello), ma la maggior parte dei giochi usa un altro tipo (mappe normali dello spazio tangente), motivo per cui associ trame prevalentemente blu a mappe normali.
Con le mappe normali dello spazio modello , ciascun canale codifica il valore preciso della normale utilizzando lo stesso sistema di coordinate dei vertici del modello con cui viene utilizzato. Ciò significa che parti diverse della mappa normale avranno tonalità diverse, ma i pixel vicini l'uno all'altro avranno colori simili. Un esempio di una normale mappa dello spazio modello appare sopra ( sorgente ).
Le mappe normali nello spazio tangente sono di solito blu chiaro. Questo tipo di mappa definisce le normali in uno spazio di coordinate unico per la posizione di ciascun pixel sulla superficie della mesh. Usa il vertice (interpolato) normale come asse Z e altri due vettori ortogonali, chiamati tangenti e bitangenti, come assi X e Y. In sostanza, puoi considerare le normali nella mappa come un "offset" dalla normale per quel pixel calcolato interpolando le normali dei vertici. Anche i vettori tangenti e bitangenti sono interpolati dai dati dei vertici e determinano quale direzione sulla mesh corrisponde a "su" e "a sinistra" nella mappa normale. L'immagine fornita nella domanda fornisce un eccellente esempio di come appare una tipica mappa normale nello spazio tangente, quindi non fornirò un altro esempio qui.
I componenti di un normale normalmente (nessun gioco di parole previsto) vanno da [-1, 1]
. Ma i componenti di un colore in un'immagine vanno da [0, 1]
(o [0, 255]
ma di solito sono normalizzati a [0, 1]
). Quindi le normali vengono ridimensionate e sfalsate in modo tale che la normale (0, 0, 1)
diventi il colore (0.5, 0.5, 1)
. Questo è il colore azzurro che vedi nelle mappe normali e non indica alcuna deviazione dal normale interpolato del vertice quando usi le normali dello spazio tangente.
Il motivo per cui le normali dello spazio tangente sono preferite rispetto alle normali dello spazio modello è dovuto al fatto che sono più facili da creare e possono essere utilizzate per più mesh. Inoltre, se utilizzato con una mesh animata, vengono sempre utilizzate le normali dello spazio tangente, poiché le normali cambiano costantemente.
bitangent
e binormal
corretta.
La mappa normale punta principalmente verso l'esterno da una superficie. Supponendo che tu vada con la solita mappatura del componente Z dei vettori normali XYZ che è la direzione di "profondità" e una mappatura con il componente B dello spazio colore RGB, finirai con la maggior parte dei vettori normali essendo principalmente blu.
Se la trama fosse, diciamo, rossa, ciò significherebbe che la mappa normale è una superficie che punta principalmente verso destra. Puoi vedere quella funzione sull'immagine di esempio in quanto il bordo più a destra dei dossi ha una tinta rossastra.
Una superficie completa di un colore rossastro non avrebbe alcun senso. Ciò indicherebbe una superficie completamente rivolta verso destra. Sarebbe solo modellato con la geometria, non parte di una normale mappa.