Perché le mappe normali sono di colore blu e viola?


11

Sto imparando la mappatura normale. Ho capito che i valori RGB vengono convertiti in XYZ, ma la mia domanda è: come viene convertito e perché la normale mappa è di colore blu e viola?

Risposte:


12

Poiché una mappa normale copre i vettori da -1 a 1, ha senso estendere questo intervallo a 0-> 1 in modo che tutto possa rientrare nell'intervallo di RGB.

Quindi di solito applichiamo una trasformazione sul normale per convertirla in qualcosa che possiamo vedere.

vec3 colour = vec3(0.5) + normal * 0.5;

Il colore blu è dovuto al fatto che si suppone che le mappe normali vengano utilizzate rispetto alla normale primitiva (triangolo / ecc.) Con una direzione predefinita (0,0,1) per indicare nessuna deviazione dal triangolo normale. Di solito lo shader di frammenti deve ruotare questa normale in relazione alla normale corrente per pixel al momento dell'esecuzione.


Questo codice vec3 colour = vec3(0.5) + normal * 0.5;sta convertendo RGB in XYZ?
Abhinay Singh Negi,

1
@AbhinaySInghNegi no, il colore è RGB e normale è XYZ, quindi questo sta convertendo XYZ in RGB. Se vuoi RGB a XYZ, usivec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101,

20

Solo le mappe normali dello spazio tangente sono principalmente blu. Questo perché il colore blu rappresenta una normale di (0,0,1) che sarebbe una normale invariata quando il triangolo si trova nel piano xey, cioè perpendicolare alla superficie. La tangente, xe bi-tangente, y (indicata anche come bi-normale) sono codificati nei canali rosso e verde e questi formano per creare uno spazio tangente normale per un punto sulla superficie del triangolo.

Se una mappa normale dello spazio tangente dovesse codificare un colore solo in rosso (1.0, 0.0, 0.0), ciò genererebbe un normale spazio tangente parallelo alla superficie del triangolo. Questo non si vede mai perché significherebbe che il triangolo verrebbe illuminato solo a 90 gradi dalla superficie e visualizzerebbe il vettore in quel momento non si sarebbe in grado di vedere il triangolo comunque.

Le mappe normali dello spazio mondiale codificano l'unità normale su una sfera, quindi possono essere principalmente colori diversi una volta codificati da [-1, 1] a [0, 1] per canale.

Un confronto può essere visto qui:

inserisci qui la descrizione dell'immagine

In pratica, le mappe normali sono generalmente codificate in un formato a 2 canali come BC5 che in realtà memorizza solo xey con z che viene ricostruito poiché sappiamo che è un vettore unitario. Ciò consente di mantenere una maggiore precisione con più bit senza aumentare le dimensioni del file.


Gli spazi tangenti non sono parametrizzati in modo univoco, eppure trovo un sacco di immagini mesh + mappa normale nello spazio tangente in giro. Esiste un modo convenzionale per definire la base dello spazio tangente?
Alec Jacobson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.