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.

Decal

Eredita: VisualInstance3D < Node3D < Node < Object

Nodo che proietta una texture su un MeshInstance3D.

Descrizione

I Decal servono per proiettare una texture su una Mesh nella scena. Utilizza le decalcomanie per aggiungere dettagli a una scena senza influenzare la Mesh sottostante. Sono spesso utilizzati per aggiungere intemperie a un edificio, sporcizia o fango al terreno o varietà agli oggetti di scena. Le decalcomanie possono essere spostate in qualsiasi momento, rendendole adatte per cose come ombre a chiazze o punti laser.

Sono costituiti da un AABB e un gruppo di Texture2D che specificano Color, normale, ORM (occlusione ambientale, ruvidità, metallico) ed emissione. Le decalcomanie sono proiettate all'interno del loro AABB, quindi la modifica dell'orientamento della decalcomania influenza la direzione in cui sono proiettate. Per impostazione predefinita, le decalcomanie sono proiettate verso il basso (ovvero da Y positivo a Y negativo).

Le Texture2D associate alle decalcomanie sono automaticamente memorizzate in un atlante di texture che serve per disegnare le decalcomanie in modo che tutte le decalcomanie siano disegnate allo stesso tempo. Godot utilizza decalcomanie raggruppate, ovvero sono memorizzate in dati raggruppati e disegnate quando viene disegnata la mesh, non vengono disegnate come effetto in post-elaborazione dopo.

Nota: Le decalcomanie non possono influenzare la trasparenza di un materiale sottostante, indipendentemente dalla sua modalità di trasparenza (alpha blend, alpha scissor, alpha hash, pre-passaggio opaco). Ciò significa che le aree traslucide o trasparenti di un materiale rimarranno traslucide o trasparenti anche se viene applicata una decalcomania opaca su di esse.

Nota: Le decalcomanie sono supportate solo nei metodi di rendering Forward+ e Mobile, non Compatibility. Quando si utilizza il metodo di rendering Mobile, è possibile visualizzare solo 8 decalcomanie su ogni risorsa mesh. Tentare di visualizzare più di 8 decalcomanie su una singola risorsa mesh causerà uno sfarfallio sulle decalcomanie mentre la telecamera si muove.

Nota: Quando si utilizza il metodo di rendering Mobile, le decalcomanie influenzeranno correttamente solo le mesh la cui visibilità AABB interseca con l'AABB della decalcomania. Se si usa uno shader per deformare la mesh in modo che esca dal suo AABB, GeometryInstance3D.extra_cull_margin deve essere aumentato sulla mesh. Altrimenti, la decalcomania potrebbe non essere visibile sulla mesh.

Proprietà

float

albedo_mix

1.0

int

cull_mask

1048575

float

distance_fade_begin

40.0

bool

distance_fade_enabled

false

float

distance_fade_length

10.0

float

emission_energy

1.0

float

lower_fade

0.3

Color

modulate

Color(1, 1, 1, 1)

float

normal_fade

0.0

Vector3

size

Vector3(2, 2, 2)

Texture2D

texture_albedo

Texture2D

texture_emission

Texture2D

texture_normal

Texture2D

texture_orm

float

upper_fade

0.3

Metodi

Texture2D

get_texture(type: DecalTexture) const

void

set_texture(type: DecalTexture, texture: Texture2D)


Enumerazioni

enum DecalTexture: 🔗

DecalTexture TEXTURE_ALBEDO = 0

Texture2D corrispondente a texture_albedo.

DecalTexture TEXTURE_NORMAL = 1

Texture2D corrispondente a texture_normal.

DecalTexture TEXTURE_ORM = 2

Texture2D corrispondente a texture_orm.

DecalTexture TEXTURE_EMISSION = 3

Texture2D corrispondente a texture_emission.

DecalTexture TEXTURE_MAX = 4

Dimensione massima dell'enumerazione DecalTexture.


Descrizioni delle proprietà

float albedo_mix = 1.0 🔗

  • void set_albedo_mix(value: float)

  • float get_albedo_mix()

Fonde il Color albedo della decalcomania con il Color albedo della mesh sottostante. Può essere impostato su 0.0 per creare una decalcomania che influenza solo la normale o l'ORM. In tal caso, è comunque richiesta una texture albedo poiché il suo canale alfa determinerà dove la normale e l'ORM saranno sovrascritte. Vedi anche modulate.


int cull_mask = 1048575 🔗

  • void set_cull_mask(value: int)

  • int get_cull_mask()

Specifica su quali VisualInstance3D.layers sarà proiettata questa decalcomania. Per impostazione predefinita, le decalcomanie influenzano tutti gli strati. Questo è utilizzato per specificare quali tipi di oggetti ricevono la decalcomania e quali no. Ciò è particolarmente utile per garantire che gli oggetti dinamici non ricevano accidentalmente una decalcomania destinata al terreno sottostante.


float distance_fade_begin = 40.0 🔗

  • void set_distance_fade_begin(value: float)

  • float get_distance_fade_begin()

Distanza dalla telecamera alla quale la decalcomania inizia a svanire (in unità 3D).


bool distance_fade_enabled = false 🔗

  • void set_enable_distance_fade(value: bool)

  • bool is_distance_fade_enabled()

Se true, le decalcomanie svaniranno gradualmente quando sono lontane dalla Camera3D attiva a partire da distance_fade_begin. La decalcomania svanirà su distance_fade_begin + distance_fade_length, dopodiché verrà scartata e non verrà inviata allo shader. Usa questo per ridurre il numero di decalcomanie attive in una scena e quindi migliorare le prestazioni.


float distance_fade_length = 10.0 🔗

  • void set_distance_fade_length(value: float)

  • float get_distance_fade_length()

La distanza su cui la decalcomania svanisce (in unità 3D). La decalcomania diventa gradualmente più trasparente su questa distanza, fino a diventare completamente invisibile. Valori più elevati rendono la dissolvenza più graduale, più adatta quando la telecamera si muove velocemente.


float emission_energy = 1.0 🔗

  • void set_emission_energy(value: float)

  • float get_emission_energy()

Moltiplicatore di energia per la texture di emissione. Ciò farà in modo che la decalcomania emetta luce a un'intensità maggiore o minore, a prescindere dal colore dell'albedo. Vedi anche modulate.


float lower_fade = 0.3 🔗

  • void set_lower_fade(value: float)

  • float get_lower_fade()

Imposta la curva lungo la quale la decalcomania svanirà man mano che la superficie si allontana dal centro del suo AABB. Sono validi solo i valori positivi (i valori negativi saranno limitati a 0.0). Vedi anche upper_fade.


Color modulate = Color(1, 1, 1, 1) 🔗

  • void set_modulate(value: Color)

  • Color get_modulate()

Cambia il Color della decalcomania moltiplicando i colori dell'albedo e dell'emissione con questo valore. Il componente alfa viene esaminato solo quando si moltiplica il colore dell'albedo, non quello dell'emissione. Vedi anche emission_energy e albedo_mix per cambiare l'intensità di emissione e di albedo indipendentemente l'una dall'altra.


float normal_fade = 0.0 🔗

  • void set_normal_fade(value: float)

  • float get_normal_fade()

Dissolve la decalcomania se l'angolo tra AABB della decalcomania e la superficie di destinazione diventa troppo grande. Un valore di 0 proietta la decalcomania a prescindere dall'angolo, un valore di 1 limita la decalcomania alle superfici che sono quasi perpendicolari.

Nota: Impostare normal_fade su un valore maggiore di 0.0 ha un piccolo costo in termini di prestazioni dovuto ai calcoli aggiunti dell'angolo normale.


Vector3 size = Vector3(2, 2, 2) 🔗

Imposta la dimensione dell'AABB utilizzato dalla decalcomania. Tutte le dimensioni devono essere impostate su un valore maggiore di zero (saranno limitate a 0.001 se non sono così). L'AABB va da -size/2 a size/2.

Nota: Per migliorare l'efficienza di culling delle decalcomanie su "superfici rigide", imposta i loro upper_fade e lower_fade su 0.0 e imposta il componente Y di size il più basso possibile. Ciò ridurrà la dimensione dell'AABB delle decalcomanie senza influenzarne l'aspetto.


Texture2D texture_albedo 🔗

Texture2D con il Color di base della decalcomania. Questa texture oppure texture_emission devono essere impostati affinché la decalcomania sia visibile. Utilizza il canale alfa come una maschera per fondere in modo uniforme i bordi della decalcomania con l'oggetto sottostante.

Nota: A differenza di BaseMaterial3D la cui modalità filtro può essere regolata in base al materiale, la modalità filtro per le texture di un Decal è impostata globalmente con ProjectSettings.rendering/textures/decals/filter.


Texture2D texture_emission 🔗

Texture2D con il Color di emissione della decalcomania. Questa texture oppure texture_albedo devono essere impostati affinché la decalcomania sia visibile. Utilizza il canale alfa come una maschera per fondere in modo uniforme i bordi della decalcomania con l'oggetto sottostante.

Nota: A differenza di BaseMaterial3D la cui modalità filtro può essere regolata in base al materiale, la modalità filtro per le texture di un Decal è impostata globalmente con ProjectSettings.rendering/textures/decals/filter.


Texture2D texture_normal 🔗

Texture2D con la mappa normale per pixel per la decalcomania. Usala per aggiungere dettagli aggiuntivi alle decalcomanie.

Nota: A differenza di BaseMaterial3D la cui modalità filtro può essere regolata in base al materiale, la modalità filtro per le texture di un Decal è impostata globalmente con ProjectSettings.rendering/textures/decals/filter.

Nota: Impostando solo questa texture non si otterrà una decalcomania visibile, poiché deve essere impostato anche texture_albedo. Per creare una decalcomania contenente solo la texture normale, carica una texture albedo in texture_albedo e imposta albedo_mix su 0.0. Il canale alfa della texture albedo sarà utilizzato per determinare dove la mappa normale della superficie sottostante deve essere sovrascritta (e la sua intensità).


Texture2D texture_orm 🔗

Texture2D che memorizza l'occlusione ambientale, la ruvidità e il metallico per la decalcomania. Usalo per aggiungere dettagli aggiuntivi alle decalcomanie.

Nota: A differenza di BaseMaterial3D la cui modalità filtro può essere regolata in base al materiale, la modalità filtro per le texture di un Decal è impostata globalmente con ProjectSettings.rendering/textures/decals/filter.

Nota: Impostando solo questa texture non si otterrà una decalcomania visibile, poiché deve essere impostato anche texture_albedo. Per creare una decalcomania contenente solo l'ORM, carica una texture albedo in texture_albedo e imposta albedo_mix su 0.0. Il canale alfa della texture albedo sarà utilizzato per determinare dove la mappa ORM della superficie sottostante deve essere sovrascritta (e la sua intensità).

Nota: A causa di limitazioni tecniche, modificare la rugosità della superficie sottostante tramite texture_orm non influisce sui riflessi nello spazio dello schermo (Environment.ssr_enabled), sui riflessi da VoxelGI e sui riflessi da SDFGI (Environment.sdfgi_enabled). Sono influenzati solo i riflessi dai ReflectionProbe.


float upper_fade = 0.3 🔗

  • void set_upper_fade(value: float)

  • float get_upper_fade()

Imposta la curva lungo la quale la decalcomania svanirà man mano che la superficie si allontana dal centro dell'AABB. Sono validi solo i valori positivi (i valori negativi saranno limitati a 0.0). Vedi anche lower_fade.


Descrizioni dei metodi

Texture2D get_texture(type: DecalTexture) const 🔗

Restituisce la Texture2D associata alla DecalTexture specificata. Questo metodo esiste per convenienza, nella maggior parte dei casi dovresti accedere direttamente alla texture.

Ad esempio, invece di albedo_tex = $Decal.get_texture(Decal.TEXTURE_ALBEDO), usa albedo_tex = $Decal.texture_albedo.

Un caso in cui questo è meglio dell'accesso diretto alla texture è quando si desidera copiare le texture di una decalcomania in un'altra. Ad esempio:

for i in Decal.TEXTURE_MAX:
    $NewDecal.set_texture(i, $OldDecal.get_texture(i))

void set_texture(type: DecalTexture, texture: Texture2D) 🔗

Imposta la Texture2D associata alla DecalTexture specificata. Questo metodo esiste per convenienza, nella maggior parte dei casi dovresti accedere direttamente alla texture.

Ad esempio, invece di $Decal.set_texture(Decal.TEXTURE_ALBEDO, albedo_tex), usa $Decal.texture_albedo = albedo_tex.

Un caso in cui questo è meglio dell'accesso diretto alla texture è quando si desidera copiare le texture di una decalcomania in un'altra. Ad esempio:

for i in Decal.TEXTURE_MAX:
    $NewDecal.set_texture(i, $OldDecal.get_texture(i))