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

Premultiplied alpha blend mode (fully transparent = add, fully opaque = mix).

depth_draw_opaque

Only draw depth for opaque geometry (not transparent).

depth_draw_always

Always draw depth (opaque and transparent).

depth_draw_never

Never draw depth.

depth_prepass_alpha

Do opaque depth pre-pass for transparent geometry.

depth_test_disabled

Disabilita il test di profondità.

sss_mode_skin

Subsurface Scattering mode for skin (optimizes visuals for human skin, e.g. boosted red channel).

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 viene disegnata utilizzando linee (utile per risolvere problemi).

debug_shadow_splits

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

diffuse_burley

Burley (Disney PBS) for diffuse (default).

diffuse_lambert

Lambert shading for diffuse.

diffuse_lambert_wrap

Lambert-wrap shading (roughness-dependent) for diffuse.

diffuse_toon

Toon shading for diffuse.

specular_schlick_ggx

Schlick-GGX for direct light specular lobes (default).

specular_toon

Toon for direct light specular lobes.

specular_disabled

Disable direct light specular lobes. Doesn't affect reflected light (use SPECULAR = 0.0 instead).

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

Disable computing shadows in shader. The shader will not receive shadows, but can still cast them.

ambient_light_disabled

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

shadow_to_opacity

Lighting modifies the alpha so shadowed areas are opaque and non-shadowed areas are transparent. Useful for overlaying shadows onto a camera feed in AR.

vertex_lighting

Use vertex-based lighting instead of per-pixel lighting.

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.

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.

Not all built-ins are available in all processing functions. To access a vertex built-in from the fragment() function, you can use a varying. The same applies for accessing fragment built-ins from the light() function.

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.

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.

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.

Users can disable the built-in modelview transform (projection will still happen later) and do it manually with the following code:

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.

Users can override the modelview and projection transforms using the POSITION built-in. If POSITION is written to anywhere in the shader, it will always be used, so the user becomes responsible for ensuring that it always has an acceptable value. When POSITION is used, the value from VERTEX is ignored and projection does not happen. However, the value passed to the fragment shader still comes from 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.

This allows you to easily adjust the shader to a particle system using default particles material. When writing a custom particle shader, this value can be used as desired.

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.

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

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.

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

Coordinata del centro in pixel nello spazio dello schermo. xy specifica la posizione nella finestra. L'origine è in basso a sinistra. 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.

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 un ramo di uno 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

Imposta qui la normale se legge la normale da una texture anziché da NORMAL.

out float NORMAL_MAP_DEPTH

Profondità da NORMAL_MAP. Il valore predefinito è 1.0.

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, 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, fonde il colore finale del pixel con FOG.rgb in base a FOG.a.

out vec4 RADIANCE

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

out vec4 IRRADIANCE

Se ci si scrive, 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() {
    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 in pixel nello spazio dello schermo. xy specifica la posizione nella finestra, z specifica la profondità del frammento se DEPTH non è utilizzato. L'origine è in basso a sinistra.

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