Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Shader Spatial

Spatial shaders are used for shading 3D objects. They are the most complex type of shader Godot offers. Spatial shaders are highly configurable with different render modes and different rendering options (e.g. Subsurface Scattering, Transmission, Ambient Occlusion, Rim lighting, etc.). Users can optionally write vertex, fragment, and light processor functions to affect how objects are drawn.

Modalità di rendering

Per esempi visivi di queste modalità di rendering, consultare Standard Material 3D e ORM Material 3D.

Modalità di rendering

Descrizione

blend_mix

Modalità di fusione mista (alfa è la trasparenza), predefinita.

blend_add

Modalità di fusione additiva.

blend_sub

Modalità di fusione sottrattiva.

blend_mul

Modalità di fusione moltiplicativa.

blend_premul_alpha

Modalità di fusione alfa premoltiplicato (completamente trasparente = aggiungi, completamente opaco = mescola).

depth_draw_opaque

Disegna la profondità soltanto per geometria opaca (non trasparente).

depth_draw_always

Disegna sempre la profondità (opaco e trasparente).

depth_draw_never

Non disegnare mai la profondità.

depth_prepass_alpha

Effettua un pre-passaggio opaco di profondità per la geometria trasparente.

depth_test_disabled

Disabilita il test di profondità.

depth_test_default

Il test di profondità scarta il pixel se si trova dietro ad altri pixel. Solo in Forward+, il pixel viene scartato anche se si trova esattamente alla stessa profondità di un altro pixel.

depth_test_inverted

Il test di profondità scarta il pixel se si trova davanti ad altri pixel. Utile per gli effetti stencil.

sss_mode_skin

Modalità di subsurface scattering per la pelle (ottimizza gli effetti visivi per la pelle umana, ad esempio aumentando il canale rosso).

cull_back

Cull back-faces (default).

cull_front

Cull front-faces.

cull_disabled

Culling disabled (double sided).

unshaded

Il risultato è solo albedo. Non c'è alcuna illuminazione/ombreggiatura nel materiale, il che lo renderizza più velocemente.

wireframe

La geometria è disegnata usando linee (utile per risolvere problemi). Quando si utilizza il renderer Compatibilità, è necessario chiamare RenderingServer.set_debug_generate_wireframes(true) prima che la mesh venga caricata affinché il rendering fildiferro funzioni. Nel renderer Compatibilità, il backface culling è sempre disabilitato in modalità wireframe, mentre nei renderer Forward+ e Mobile, la modalità di culling è rispettata.

debug_shadow_splits

Le ombre direzionali vengono disegnate utilizzando colori diversi per ogni divisione (utile per risolvere problemi).

diffuse_burley

Burley (Disney PBS) per la diffusione (predefinita).

diffuse_lambert

Ombreggiatura Lambert per la diffusione.

diffuse_lambert_wrap

Ombreggiatura Lambert-wrap (dipendente dalla rugosità) per la diffusione.

diffuse_toon

Ombreggiatura toon per la diffusione.

specular_schlick_ggx

Schlick-GGX per lobi speculari a luce diretta (predefinito).

specular_toon

Toon per lobi speculari a luce diretta.

specular_disabled

Disabilita i lobi speculari a luce diretta. Non influisce sulla luce riflessa (usa invece SPECULAR = 0.0).

skip_vertex_transform

VERTEX, NORMAL, TANGENT e BITANGENT devono essere trasformati manualmente nella funzione vertex().

world_vertex_coords

VERTEX, NORMAL, TANGENT e BITANGENT sono modificati nello spazio mondiale anziché nello spazio modello.

ensure_correct_normals

Da utilizzare quando alla mesh è applicata una scala non uniforme (nota: attualmente non implementato).

shadows_disabled

Disabilita il calcolo delle ombre nello shader. Lo shader non riceverà ombre, ma potrà comunque proiettarle.

ambient_light_disabled

Disabilita la contribuzione della luce ambientale e della mappa di radianza.

shadow_to_opacity

L'illuminazione modifica il canale alfa, rendendo le zone ombreggiate opache e quelle non ombreggiate trasparenti. Utile per sovrapporre le ombre al feed fornito da una telecamera in AR.

vertex_lighting

Utilizza l'illuminazione basata sui vertici anziché quella per pixel.

particle_trails

Abilita le scie quando utilizzato sulla geometria di particelle.

alpha_to_coverage

Modalità di antialiasing per la trasparenza, consulta qui saperne di più.

alpha_to_coverage_and_one

Modalità di antialiasing per la trasparenza, consulta qui saperne di più.

fog_disabled

Disabilita la ricezione di nebbia volumetrica o basata sulla profondità. Utile per i materiali con blend_add come per le particelle.

Modalità di stencil

Nota

Il supporto per lo stencil è sperimentale, utilizzalo al tuo rischio. Cercheremo di non compromettere la compatibilità il più possibile, ma se dovessero emergere difetti significativi nell'API, potrebbero essere apportate modifiche nella prossima versione minore.

Stencil operations are a set of operations that allow writing to an efficient buffer in an hardware-accelerated manner. This is generally used to mask in or out parts of the scene.

Alcuni degli usi più noti sono:

  • Contorni: mascherare la mesh interna che viene contornata per evitare contorni interni.

  • Raggi X: visualizza una mesh dietro altri oggetti.

  • Portali: disegnare geometrie normalmente "impossibili" (non euclidee) mascherando gli oggetti.

Nota

È possibile leggere dal buffer stencil solo nel passaggio trasparente. Qualsiasi tentativo di lettura nel passaggio opaco fallirà, poiché al momento non è un comportamento supportato.

Si noti che, per gli effetti compositore, il buffer stencil del renderer principale non può essere copiato in una texture personalizzata.

Modalità di stencil

Descrizione

read

Leggi dal buffer stencil.

write

Scrivi il valore di riferimento nel buffer stencil.

write_if_depth_fail

Scrivi il valore di riferimento nel buffer stencil se il test di profondità non viene superato.

compare_always

Supera sempre il test dello stencil.

compare_equal

Supera il test dello stencil se il valore di riferimento è uguale al valore nel buffer stencil.

compare_not_equal

Supera il test dello stencil se il valore di riferimento non è uguale al valore nel buffer stencil.

compare_less

Supera il test dello stencil se il valore di riferimento è minore del valore nel buffer stencil.

compare_less_or_equal

Supera il test dello stencil se il valore di riferimento è minore o uguale al valore nel buffer stencil.

compare_greater

Supera il test dello stencil se il valore di riferimento è maggiore del valore nel buffer stencil.

compare_greater_or_equal

Supera il test dello stencil se il valore di riferimento è maggiore o uguale al valore nel buffer stencil.

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 valori marcati come inout forniscono un valore predefinito sensato e sono scrivibili facoltativamente. I campionatori non sono scrivibili, quindi non sono marcati.

Non tutte le variabili integrate sono disponibili in tutte le funzioni di elaborazione. Per accedere a una variabile integrata di vertice dalla funzione fragment(), è possibile utilizzare un varying. Lo stesso vale per accedere alle variabili integrate di frammento dalla funzione light().

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 si può cambiare 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 e aggiornarlo a ogni frame.

in float PI

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

in float TAU

Una costante TAU (6.283185). Equivalente a PI * 2 e al numero di radianti in un giro completo.

in float E

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

in bool OUTPUT_IS_SRGB

true quando l'output è nello spazio colore sRGB (questo è true nel renderer Compatibilità, false in Forward+ e Mobile).

in float CLIP_SPACE_FAR

Spazio di ritaglio per il valore z. Nei renderer Forward+ o Mobile, è 0.0. Nel renderer Compatibilità, è -1.0.

in bool IS_MULTIVIEW

true quando l'output è stereoscopico (XR), false quando l'output è monoscopico.

in bool IN_SHADOW_PASS

true quando lo shader si sta renderizzato in un passaggio di shadow mapping, false altrimenti. Questo si può usare per renderizzare gli oggetti in modo diverso nelle mappe delle ombre rispetto al rendering regolare.

Variabili integrate di vertice

I dati dei vertici (VERTEX, NORMAL, TANGENT e BITANGENT) sono presentati nello spazio modello (detto anche spazio locale). Se non vengono scritti, questi valori non saranno modificati e saranno trasmessi così come sono arrivati, poi trasformati nello spazio visivo per essere utilizzati in fragment().

Facoltativamente, si possono presentare nello spazio mondiale tramite la modalità di rendering world_vertex_coords.

Gli utenti possono disattivare la trasformazione integrata modello-vista (la proiezione avverrà comunque in seguito) e farlo manualmente con il seguente codice:

shader_type spatial;
render_mode skip_vertex_transform;

void vertex() {
    VERTEX = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
    NORMAL = normalize((MODELVIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
    BINORMAL = normalize((MODELVIEW_MATRIX * vec4(BINORMAL, 0.0)).xyz);
    TANGENT = normalize((MODELVIEW_MATRIX * vec4(TANGENT, 0.0)).xyz);
}

Anche altre variabili integrate, come UV, UV2 e COLOR, vengono passate alla funzione fragment() se non vengono modificate.

Gli utenti possono sovrascrivere le trasformazioni modello-vista e proiezione attraverso la variabile integrata POSITION. Se POSITION viene scritto in qualsiasi punto dello shader, sarà sempre utilizzato, quindi l'utente è responsabile di garantire che abbia sempre un valore accettabile. Quando si utilizza POSITION, il valore di VERTEX è ignorato e la proiezione non avviene. Tuttavia, il valore passato allo shader di frammento proviene comunque da VERTEX.

Per l'istanzazione, la variabile INSTANCE_CUSTOM contiene i dati personalizzati dell'istanza. Quando si utilizzano particelle, queste informazioni sono solitamente:

  • x: Angolo di rotazione in radianti.

  • y: Fase durante il ciclo di vita (da 0.0 a 1.0).

  • z: Fotogramma di animazione.

Ciò permette di adattare facilmente lo shader a un sistema di particelle utilizzando il materiale di particelle predefinito. Quando si crea uno shader di particelle personalizzato, questo valore si può usare a piacere.

Integrato

Descrizione

in vec2 VIEWPORT_SIZE

Dimensioni della viewport (in pixel).

in mat4 VIEW_MATRIX

Trasformazione dallo spazio mondiale allo spazio visivo.

in mat4 INV_VIEW_MATRIX

Trasformazione dallo spazio visivo allo spazio mondiale.

in mat4 MAIN_CAM_INV_VIEW_MATRIX

Trasformazione dallo spazio visivo allo spazio mondiale della telecamera utilizzata per disegnare la viewport attuale.

in mat4 INV_PROJECTION_MATRIX

Trasformazione dallo spazio di ritaglio allo spazio visivo.

in vec3 NODE_POSITION_WORLD

Posizione del nodo, nello spazio mondiale.

in vec3 NODE_POSITION_VIEW

Posizione del nodo, nello spazio visivo.

in vec3 CAMERA_POSITION_WORLD

Posizione della telecamera, nello spazio mondiale. Rappresenta il punto medio tra i due occhi in modalità multivista/rendering stereoscopico.

in vec3 CAMERA_DIRECTION_WORLD

Direzione della telecamera, nello spazio mondiale.

in uint CAMERA_VISIBLE_LAYERS

Strati di culling della telecamera che renderizza il passaggio attuale.

in int INSTANCE_ID

ID di istanza per l'istanziazione.

in vec4 INSTANCE_CUSTOM

Dati personalizzati dell'istanza (per le particelle, principalmente ).

in int VIEW_INDEX

La vista che stiamo renderizzando. VIEW_MONO_LEFT (0) per Mono (non multivista) o l'occhio sinistro, VIEW_RIGHT (1) per l'occhio destro.

in int VIEW_MONO_LEFT

Costante per Mono o l'occhio sinistro, sempre 0.

in int VIEW_RIGHT

Costante l'occhio destro, sempre 1.

in vec3 EYE_OFFSET

Offset di posizione per l'occhio che si sta renderizzando. Applicabile solo per il rendering multivista.

inout vec3 VERTEX

Posizione del vertice, nello spazio modello. È nello spazio mondiale se si utilizza world_vertex_coords.

in int VERTEX_ID

L'indice del vertice attuale nel buffer dei vertici.

inout vec3 NORMAL

Normale, nello spazio modello. È nello spazio mondiale se si utilizza world_vertex_coords.

inout vec3 TANGENT

Tangente, nello spazio modello. È nello spazio mondiale se si utilizza world_vertex_coords.

inout vec3 BINORMAL

Binormale, nello spazio modello. È nello spazio mondiale se si utilizza world_vertex_coords.

out vec4 POSITION

Se scritto, in qualunque ramo, sovrascrive la posizione finale del vertice nello spazio di ritaglio.

inout vec2 UV

Canale principale degli UV.

inout vec2 UV2

Canale secondario degli UV.

inout vec4 COLOR

Colore dai vertici. Limitato a valori compresi tra 0.0 e 1.0 per ciascun canale e 8 bit di precisione per canale (256 livelli possibili). Il canale alfa è supportato. I valori fuori dall'intervallo consentito vengono limitati e potrebbero essere arrotondati a causa della precisione limitata. Utilizzare CUSTOM0-CUSTOM3 per trasmettere dati con maggiore precisione, se necessario.

out float ROUGHNESS

Rugosità per l'illuminazione del vertice.

inout float POINT_SIZE

Dimensione dei punti per il rendering dei punti.

inout mat4 MODELVIEW_MATRIX

Trasformazione dallo spazio modello/locale allo spazio visivo (da usare se possibile).

inout mat3 MODELVIEW_NORMAL_MATRIX

in mat4 MODEL_MATRIX

Trasformazione dallo spazio modello/locale allo spazio mondiale.

in mat3 MODEL_NORMAL_MATRIX

inout mat4 PROJECTION_MATRIX

Trasformazione dallo spazio visivo allo spazio di ritaglio.

in uvec4 BONE_INDICES

in vec4 BONE_WEIGHTS

in vec4 CUSTOM0

Valore personalizzato dalla primitiva del vertice. Quando si utilizzano UV aggiuntivi, xy è UV3 e zw è UV4.

in vec4 CUSTOM1

Valore personalizzato dalla primitiva del vertice. Quando si utilizzano UV aggiuntivi, xy è UV5 e zw è UV6.

in vec4 CUSTOM2

Valore personalizzato dalla primitiva del vertice. Quando si utilizzano UV aggiuntivi, xy è UV7 e zw è UV8.

in vec4 CUSTOM3

Valore personalizzato dalla primitiva del vertice.

out float Z_CLIP_SCALE

Se scritto, in qualunque ramo, ridimensiona il vertice verso la telecamera per evitare il clipping in cose come i muri. Luci e ombre continueranno a funzionare correttamente quando questo viene scritto, ma gli effetti nello spazio dello schermo, come SSAO e SSR, potrebbero non funzionare correttamente con valori inferiori. Si consiglia di mantenere questo valore il più vicino possibile a 1.0.

Nota

MODELVIEW_MATRIX combina entrambi MODEL_MATRIX e VIEW_MATRIX ed è più adatto quando potrebbero sorgere problemi di virgole mobili. Ad esempio, se l'oggetto è molto lontano dall'origine del mondo, si potrebbero verificare problemi di virgole mobili quando si utilizzano MODEL_MATRIX e VIEW_MATRIX separati.

Nota

INV_VIEW_MATRIX è la matrice utilizzata per renderizzare l'oggetto in quel passaggio, a differenza di MAIN_CAM_INV_VIEW_MATRIX, che è la matrice della telecamera nella scena. Nel passaggio di ombra, la vista di INV_VIEW_MATRIX si basa sulla telecamera che si trova nella posizione della luce.

Variabili integrate di frammento

L'uso predefinito di una funzione processore dei frammenti in Godot consiste nel configurare le proprietà del materiale dell'oggetto e lasciare che il renderer integrato gestisca lo shading finale. Tuttavia, non è obbligatorio utilizzare tutte queste proprietà e, se non le si scrive, Godot ottimizzerà la funzionalità corrispondente.

Integrato

Descrizione

in vec2 VIEWPORT_SIZE

Dimensioni della viewport (in pixel).

in vec4 FRAGCOORD

Coordinate del centro pixel nello spazio dello schermo. xy specifica la posizione nella finestra. L'angolo in alto a sinistra della viewport è l'origine, (0.0, 0.0). L'angolo in basso a destra della viewport è (1.0, 1.0). z specifica la profondità del frammento. È utilizzato anche come valore di output per la profondità del frammento, a meno che DEPTH non vi si scrive.

in bool FRONT_FACING

true se la faccia attuale è rivolta in avanti, false altrimenti.

in vec3 VIEW

Vettore normalizzato dalla posizione del frammento alla telecamera (nello spazio visivo). Questo è lo stesso sia per le telecamere prospettiche sia per quelle ortogonali.

in vec2 UV

UV che deriva dalla funzione vertex().

in vec2 UV2

UV2 che deriva dalla funzione vertex().

in vec4 COLOR

COLOR che deriva dalla funzione vertex().

in vec2 POINT_COORD

Coordinata di punto per disegnare punti con POINT_SIZE.

in mat4 MODEL_MATRIX

Trasformazione dallo spazio modello/locale allo spazio mondiale.

in mat3 MODEL_NORMAL_MATRIX

Trasformazione dallo spazio modello/locale allo spazio mondiale per le normali. Questo valore è solitamente uguale a MODEL_MATRIX, a meno che l'oggetto non sia scalato in modo non uniforme, nel qual caso è impostato su transpose(inverse(mat3(MODEL_MATRIX))).

in mat4 VIEW_MATRIX

Trasformazione dallo spazio mondiale allo spazio visivo.

in mat4 INV_VIEW_MATRIX

Trasformazione dallo spazio visivo allo spazio mondiale.

in mat4 PROJECTION_MATRIX

Trasformazione dallo spazio visivo allo spazio di ritaglio.

in mat4 INV_PROJECTION_MATRIX

Trasformazione dallo spazio di ritaglio allo spazio visivo.

in vec3 NODE_POSITION_WORLD

Posizione del nodo, nello spazio mondiale.

in vec3 NODE_POSITION_VIEW

Posizione del nodo, nello spazio visivo.

in vec3 CAMERA_POSITION_WORLD

Posizione della telecamera, nello spazio mondiale. Rappresenta il punto medio tra i due occhi in modalità multivista/rendering stereoscopico.

in vec3 CAMERA_DIRECTION_WORLD

Direzione della telecamera, nello spazio mondiale.

in uint CAMERA_VISIBLE_LAYERS

Strati di culling della telecamera che renderizza il passaggio attuale.

in vec3 VERTEX

Posizione del frammento (pixel) nello spazio visivo. È il valore VERTEX di vertex() interpolato tra i vertici della faccia e trasformato nello spazio visivo. Se skip_vertex_transform è abilitato, potrebbe non essere nello spazio visivo.

inout vec3 LIGHT_VERTEX

Una versione scrivibile di VERTEX che si può utilizzare per modificare luci e ombre. Scriverci su non cambierà la posizione del frammento.

in int VIEW_INDEX

La vista che stiamo renderizzando. Utilizzato per distinguere tra viste nel rendering multivista/stereo. VIEW_MONO_LEFT (0) per Mono (non multivista) o l'occhio sinistro, VIEW_RIGHT (1) per l'occhio destro.

in int VIEW_MONO_LEFT

Costante per Mono o l'occhio sinistro, sempre 0.

in int VIEW_RIGHT

Costante l'occhio destro, sempre 1.

in vec3 EYE_OFFSET

Offset di posizione per l'occhio che si sta renderizzando. Applicabile solo per il rendering multivista.

sampler2D SCREEN_TEXTURE

Rimosso in Godot 4. Utilizzare invece un sampler2D con hint_screen_texture.

in vec2 SCREEN_UV

Coordinate UV dello schermo per il pixel attuale.

sampler2D DEPTH_TEXTURE

Rimosso in Godot 4. Utilizzare invece un sampler2D con hint_depth_texture.

out float DEPTH

Valore di profondità personalizzato (nell'intervallo di [0.0, 1.0]). Se si scrive su DEPTH in qualunque ramo dello shader, si è responsabili di impostare DEPTH per tutti gli altri rami. Se no, l'API grafica li lascerà non inizializzati.

inout vec3 NORMAL

Normale che deriva dalla funzione vertex(), nello spazio visivo. Se skip_vertex_transform è abilitato, potrebbe non essere nello spazio visivo.

inout vec3 TANGENT

Tangente che deriva dalla funzione vertex(), nello spazio visivo. Se skip_vertex_transform è abilitato, potrebbe non essere nello spazio visivo.

inout vec3 BINORMAL

Binormale che deriva dalla funzione vertex(), nello spazio visivo. Se skip_vertex_transform è abilitato, potrebbe non essere nello spazio visivo.

out vec3 NORMAL_MAP

Impostare qui la normale nello spazio tangente se si sta leggendo la normale da una texture invece di NORMAL. Il canale blu è ignorato, poiché viene ricostruito dal motore. Ciò consente alle mappe di normali con compressione RGTC di funzionare.

out float NORMAL_MAP_DEPTH

Profondità da NORMAL_MAP. Il valore predefinito è 1.0.

out vec3 BENT_NORMAL_MAP

Impostare qui la mappa di normali piegate nello spazio tangente per abilitare le normali piegate. Questo è utilizzato per migliorare l'occlusione speculare e richiede una mappa di normali piegate creata appositamente. Il canale blu è ignorato, poiché viene ricostruito dal motore. Ciò consente alle mappe di normali piegate con compressione RGTC di funzionare.

out vec3 ALBEDO

Albedo (bianco come predefinito). Colore di base.

out float ALPHA

Alfa (nell'intervallo di [0,0, 1,0]). Se letto o scritto su, il materiale sarà indirizzato alla pipeline trasparente.

out float ALPHA_SCISSOR_THRESHOLD

Se ci si scrive, in qualunque ramo, i valori inferiori a una certa quantità di alfa vengono scartati.

out float ALPHA_HASH_SCALE

Scala dell'hash alfa quando si utilizza la modalità di trasparenza hash alfa. Il valore predefinito è 1.0. Valori più alti generano pixel più visibili nel motivo di dithering.

out float ALPHA_ANTIALIASING_EDGE

La soglia al di sotto della quale si dovrebbe usare l'antialiasing alfa a copertura. Il valore predefinito è 0.0. Richiede la modalità di rendering alpha_to_coverage. Da impostare su un valore inferiore a ALPHA_SCISSOR_THRESHOLD per avere effetto.

out vec2 ALPHA_TEXTURE_COORDINATE

Le coordinate della texture da utilizzare per l'antialiasing alfa a copertura. Richiede la modalità di rendering alpha_to_coverage. Tipicamente impostata su UV * vec2(albedo_texture_size), dove albedo_texture_size sono le dimensioni della texture albedo in pixel.

out float PREMUL_ALPHA_FACTOR

Fattore alfa premoltiplicato. Efficace solo se si utilizza render_mode blend_premul_alpha;. Si deve scrive su questo parametro quando si utilizza un materiale ombreggiato con fusione alfa premoltiplicato per interagire con l'illuminazione. Non è necessario per i materiali non ombreggiati.

out float METALLIC

Metallico (nell'intervallo di [0.0, 1.0]).

out float SPECULAR

Speculare (non fisicamente accurato da cambiare). Il valore predefinito è 0.5. 0.0 disabilita i riflessi.

out float ROUGHNESS

Rugosità (nell'intervallo di [0.0, 1.0]).

out float RIM

Bordo (nell'intervallo di [0.0, 1.0]). Se utilizzato, Godot calcola l'illuminazione del bordo. La dimensione del bordo dipende da ROUGHNESS.

out float RIM_TINT

Tinta del bordo, intervallo da 0.0 (bianco) a 1.0 (albedo). Se utilizzato, Godot calcola l'illuminazione del bordo.

out float CLEARCOAT

Piccola macchia speculare aggiunta sopra quella esistente. Se utilizzata, Godot calcola l'effetto di rivestimento trasparente.

out float CLEARCOAT_GLOSS

Lucidità del rivestimento trasparente. Se utilizzato, Godot calcola l'effetto di rivestimento trasparente.

out float ANISOTROPY

Per distorcere la macchia speculare in base allo spazio tangente.

out vec2 ANISOTROPY_FLOW

Direzione della distorsione, da utilizzare con le flowmap.

out float SSS_STRENGTH

Intensità del subsurface scattering. Se utilizzata, il subsurface scattering sarà applicato all'oggetto.

out vec4 SSS_TRANSMITTANCE_COLOR

Colore della trasmittanza del subsurface scattering. Se utilizzata, la trasmittanza del subsurface scattering sarà applicata all'oggetto.

out float SSS_TRANSMITTANCE_DEPTH

Profondità della trasmittanza del subsurface scattering. Valori più elevati permettono all'effetto di raggiungere più in profondità nell'oggetto.

out float SSS_TRANSMITTANCE_BOOST

Aumenta la trasmittanza del subsurface scattering se impostato su un valore superiore a 0.0. Questo assicura che l'effetto sia notabile anche su superfici illuminate direttamente

inout vec3 BACKLIGHT

Colore della retroilluminazione (funziona come la luce diretta, ma è ricevuta anche se la normale è leggermente rivolta nella direzione opposta alla luce). Se utilizzata, la retroilluminazione sarà applicata all'oggetto. Si può utilizzare come approssimazione più performante del subsurface scattering.

out float AO

Intensità dell'occlusione ambientale. Da utilizzare con AO precalcolato.

out float AO_LIGHT_AFFECT

Quanto l'occlusione ambientale influisce sulla luce diretta (nell'intervallo di [0.0, 1.0], predefinito su 0.0).

out vec3 EMISSION

Colore di emissione (può superare (1.0, 1.0, 1.0) per HDR).

out vec4 FOG

Se ci si scrive, in qualunque ramo, fonde il colore finale del pixel con FOG.rgb in base a FOG.a.

out vec4 RADIANCE

Se ci si scrive, in qualunque ramo, fonde la radianza della mappa ambientale con RADIANCE.rgb in base a RADIANCE.a.

out vec4 IRRADIANCE

Se ci si scrive, in qualunque ramo, fonde l'irradianza della mappa ambientale con IRRADIANCE.rgb in base a IRRADIANCE.a.

Nota

Gli shader che passano per la pipeline trasparente quando si scrive su ALPHA potrebbero presentare problemi di ordinamento per trasparenza. Consultare la sezione sull'ordinamento per trasparenza nella pagina sulle limitazioni del rendering 3D per ulteriori informazioni e modi per evitare problemi.

Variabili integrate di luce

Scrivere funzioni processori di luce è completamente facoltativo. È possibile ignorare la funzione light() utilizzando la modalità di rendering unshaded. Se nessuna funzione di luce viene scritta, Godot userà le proprietà del materiale scritte nella funzione fragment() per calcolare l'illuminazione (a seconda della modalità di rendering).

La funzione light() viene chiamata per ogni luce in ogni pixel. Viene chiamata all'interno di un ciclo per ogni tipo di luce.

Di seguito è riportato un esempio di una funzione light() personalizzata che utilizza un modello di illuminazione lambertiano:

void light() {
    if (LIGHT_IS_AREA) {
        // Area light GGX shading.
        DIFFUSE_LIGHT += LIGHT_AREA_DIFFUSE_MULTIPLIER * ATTENUATION * LIGHT_COLOR;
        SPECULAR_LIGHT += LIGHT_AREA_SPECULAR_MULTIPLIER * ATTENUATION * LIGHT_COLOR * SPECULAR_AMOUNT;
    } else {
        // Used for all other light types (directional, omni, spot).
        DIFFUSE_LIGHT += clamp(dot(NORMAL, LIGHT), 0.0, 1.0) * ATTENUATION * LIGHT_COLOR / PI;
    }
}

Se si desidera che le luci si sommino, aggiungere il contributo della luce a DIFFUSE_LIGHT tramite +=, anziché sovrascriverlo.

Avvertimento

La funzione light() non sarà eseguita se la modalità di rendering vertex_lighting è abilitata o se Rendering > Qualità > Shading > Forza l'ombreggiatura per vertice è abilitato nelle Impostazioni del progetto. (È abilitato come predefinito sulle piattaforme mobili.)

Integrato

Descrizione

in vec2 VIEWPORT_SIZE

Dimensioni della viewport (in pixel).

in vec4 FRAGCOORD

Coordinate del centro pixel nello spazio dello schermo. xy specifica la posizione nella finestra. L'angolo in alto a sinistra della viewport è l'origine, (0.0, 0.0). L'angolo in basso a destra della viewport è (1.0, 1.0). z specifica la profondità del frammento. È utilizzato anche come valore di output per la profondità del frammento, a meno che DEPTH non vi si scrive.

in mat4 MODEL_MATRIX

Trasformazione dallo spazio modello/locale allo spazio mondiale.

in mat4 INV_VIEW_MATRIX

Trasformazione dallo spazio visivo allo spazio mondiale.

in mat4 VIEW_MATRIX

Trasformazione dallo spazio mondiale allo spazio visivo.

in mat4 PROJECTION_MATRIX

Trasformazione dallo spazio visivo allo spazio di ritaglio.

in mat4 INV_PROJECTION_MATRIX

Trasformazione dallo spazio di ritaglio allo spazio visivo.

in vec3 NORMAL

Vettore normale, nello spazio visivo.

in vec2 SCREEN_UV

Coordinate UV dello schermo per il pixel attuale.

in vec2 UV

UV che deriva dalla funzione vertex().

in vec2 UV2

UV2 che deriva dalla funzione vertex().

in vec3 VIEW

Vettore di vista, nello spazio visivo.

in vec3 LIGHT

Vettore di luce, nello spazio visivo.

in vec3 LIGHT_COLOR

Colore della luce moltiplicato per energia della luce moltiplicato per PI. La moltiplicazione per PI è presente perché i modelli di illuminazione basati sulla fisica includono una divisione per PI.

in float SPECULAR_AMOUNT

Per OmniLight3D e SpotLight3D, 2.0 moltiplicato per light_specular. Per DirectionalLight3D, 1.0.

in bool LIGHT_IS_DIRECTIONAL

true se questo passaggio è una DirectionalLight3D.

in float ATTENUATION

Attenuazione basata sulla distanza o sull'ombra.

in vec3 ALBEDO

Albedo di base.

in vec3 BACKLIGHT

in float METALLIC

Metallico.

in float ROUGHNESS

Rugosità.

out vec3 DIFFUSE_LIGHT

Risultato della luce diffusa.

out vec3 SPECULAR_LIGHT

Risultato della luce speculare.

out float ALPHA

Alfa (nell'intervallo di [0.0, 1.0]). Se ci si scrive, in qualunque ramo, il materiale sarà indirizzato alla pipeline trasparente.

Nota

Gli shader che passano per la pipeline trasparente quando si scrive su ALPHA potrebbero presentare problemi di ordinamento per trasparenza. Consultare la sezione sull'ordinamento per trasparenza nella pagina sulle limitazioni del rendering 3D per ulteriori informazioni e modi per evitare problemi.

Inoltre, i materiali trasparenti non possono proiettare ombre o apparire nelle uniformi hint_screen_texture e hint_depth_texture. Ciò a sua volta impedisce che tali materiali appaiano in riflessi o rifrazioni nello spazio dello schermo. i riflessi netti SDFGI non sono visibili sui materiali trasparenti (per essi sono visibili solo riflessi approssimativi).