Shader di nebbia

Gli shader di nebbia sono utilizzati per definire come la nebbia è aggiunta (o sottratta) da una scena in una determinata area. Gli shader di nebbia sono sempre utilizzati insieme a FogVolumes e alla nebbia volumetrica. Gli shader di nebbia hanno una sola funzione di elaborazione, la funzione fog().

La risoluzione degli shader di nebbia dipende dalla risoluzione della griglia volumetrica di froxel. Pertanto, il livello di dettaglio che uno shader di nebbia può aggiungere dipende da quanto vicino il FogVolume è dalla telecamera.

Gli shader di nebbia sono una forma speciale di shader di calcolo che vengono chiamati una volta per ogni froxel in contatto con un AABB del FogVolume associato. Questo significa che i froxel che a malapena sono in contatto con un determinato FogVolume saranno comunque utilizzati.

Variabili integrate

I valori marcati come in sono di sola lettura. I valori marcati come out sono scrivibili facoltativamente e non contengono necessariamente valori sensati. I campionatori non sono scrivibili, quindi non sono marcati.

Variabili integrate globali

Le variabili integrate globali sono disponibili ovunque, comprese le funzioni personalizzate.

Integrato

Descrizione

in float TIME

Tempo globale dall'avvio del motore, in secondi. Si ripete ogni 3.600 secondi (che può essere modificato con l'impostazione rollover). È influenzato da time_scale ma non dalla pausa. Se è necessaria una variabile TIME che non sia influenzata dalla scala temporale, aggiungere il proprio uniforme di shader globale da aggiornare a ogni frame.

in float PI

Una costante PI (3.141592). Il rapporto tra la circonferenza di un cerchio e il suo diametro, e la quantità di radianti in mezzo giro.

in float TAU

Una costante TAU (6.283185). Equivalente a PI * 2 e alla quantità di radianti in un giro completo.

in float E

Una costante E (2.718281). Numero di Eulero e base del logaritmo naturale.

Variabili integrate di nebbia

Tutti i valori di output dei volumi di nebbia si sovrappongono. Ciò permette di renderizzare in modo efficiente i FogVolumes, poiché si possono tutti disegnare contemporaneamente.

Integrato

Descrizione

in vec3 WORLD_POSITION

Posizione della cella del froxel attuale nello spazio mondiale.

in vec3 OBJECT_POSITION

Posizione del centro del FogVolume attuale nello spazio mondiale.

in vec3 UVW

UV tridimensionale, utilizzato per mappare una texture 3D sul FogVolume attuale.

in vec3 SIZE

Dimensioni del FogVolume attuale quando la sua forma ha almeno una dimensione.

in vec3 SDF

Signed distance field dalla superficie del FogVolume. Negativo se interno al volume, positivo altrimenti.

out vec3 ALBEDO

Valore del colore di base in output, interagisce con la luce per produrre il colore finale. Viene solo scritto sul volume di nebbia se utilizzato.

out float DENSITY

Valore di densità in output. Può essere negativo per permettere di sottrarre un volume da un altro. La densità deve essere utilizzata affinché lo shader di nebbia possa scrivere qualsiasi cosa.

out vec3 EMISSION

Valore del colore di emissione in output, aggiunto al colore durante il passaggio di luce per produrre il colore finale. Viene solo scritto nel volume di nebbia se utilizzato.