Perché le mappe normali sono prevalentemente blu?


44

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) ... 

inserisci qui la descrizione dell'immagine

Risposte:


71

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.

Esempio di mappa normale spazio modello

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.


6
Adoro questa spiegazione - concisa, include la matematica, elabora i diversi tipi utilizzati per le mappe normali e perché sono usati.
Tom 'Blue' Piddock,

Grazie per aver ottenuto la distinzione tra bitangente binormalcorretta.
imallett,

2
@imallett Sì, le superfici hanno un carattere normale, tangente e bitangente, mentre le curve hanno un carattere tangente, normale e binormale. Almeno questa è la mia comprensione.
bcrist

8

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.


3
Per chiarire un po 'di più questo, la mappa normale NON contiene il vettore normale dal tuo punto di vista, ma mantiene il vettore normale dal punto di vista delle facce, quindi dopo aver ottenuto il tuo normale dalla faccia, mescoli questo con il normalmaps-normalvector. E poiché è prevalentemente blu, ovvero (0, 0, 1), ciò significa che il normale vettore che hai già non cambia. (Pensa a questo, come se dovessi posare ogni faccia sul pavimento prima di disegnarlo, e quindi utilizzare il normale vettore dalla mappa normale, questo sarà principalmente verso l'alto, se è a destra o a sinistra, qualcosa non va nella tua mesh).
tkausl,
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.