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.
Checking the stable version of the documentation...
Nebbia volumetrica e volumi di nebbia
Nota
La nebbia volumetrica è supportata solo nel renderer Forward+, non nei renderer Mobile o Compatibilità.
Come descritto in Environment and post-processing, Godot supporta vari effetti visivi, tra cui due tipi di nebbia: nebbia tradizionale (non volumetrica) e nebbia volumetrica. La nebbia tradizionale influenza l'intera scena alla volta e non può essere personalizzata con Shader di nebbia.
Se lo si desidera, è possibile utilizzare la nebbia volumetrica e la nebbia non volumetrica allo stesso tempo.
In questa pagina imparerai:
Come configurare la nebbia volumetrica in Godot.
Cosa sono i volumi di nebbia e in che modo differiscono dalla nebbia volumetrica "globale".
Vedi anche
È possibile osservare il funzionamento della nebbia volumetrica in azione attraverso il progetto demo Volumetric Fog.
Ecco un confronto tra la nebbia tradizionale (che non interagisce con l'illuminazione) e la nebbia volumetrica, che è in grado di interagire con l'illuminazione:
Proprietà della nebbia volumetrica
Dopo aver abilitato la nebbia volumetrica nella risorsa Environment del nodo WorldEnvironment, è possibile modificare le seguenti proprietà:
Density: la densità base esponenziale della nebbia volumetrica. Si dovrebbe Impostare sulla densità più bassa che si desidera avere globalmente. I FogVolume si possono usare per aggiungere o sottrarre questa densità in aree specifiche. Un valore di
0.0disabilita la nebbia volumetrica globale consentendo ai FogVolume di visualizzare la nebbia volumetrica in aree specifiche. Il rendering della nebbia è esponenziale come nella vita reale.Albedo: Il colore della nebbia volumetrica quando interagisce con le luci. La nebbia e foschia hanno un albedo vicino al bianco (
Color(1, 1, 1, 1)) mentre il fumo ha un albedo più scuro.Emission: la luce emessa dalla nebbia volumetrica. Anche con l'emissione, la nebbia volumetrica non proietterà luce su altre superfici. L'emissione è utile per creare un colore ambientale. Poiché l'effetto nebbia volumetrica utilizza solo una diffusione singola, la nebbia tende ad aver bisogno di un po' di emissione per sfumare le ombre nette.
Emission Energy: la luminosità della luce emessa dalla nebbia volumetrica.
GI Inject: Regola l'intensità dell'illuminazione globale applicata al colore albedo della nebbia volumetrica. Un valore di
0.0significa che l'illuminazione globale non influirà sulla nebbia volumetrica. Ha un piccolo impatto sulle prestazioni se impostato su un valore superiore a0.0.Anisotropy: la direzione della luce diffusa mentre attraversa la nebbia volumetrica. Un valore vicino a
1.0significa che quasi tutta la luce è diffusa in avanti. Un valore vicino a0.0significa che la luce è diffusa uniformemente in tutte le direzioni. Un valore vicino a-1.0significa che la luce è diffusa principalmente all'indietro. La nebbia e foschia diffondono la luce leggermente in avanti, mentre il fumo la disperde uniformemente in tutte le direzioni.Length: la distanza su cui viene calcolata la nebbia volumetrica. Aumentare per calcolare la nebbia su un raggio maggiore, diminuire per aggiungere maggiori dettagli quando non serve una lunga portata. Per la migliore qualità, mantenere questo valore il più basso possibile.
Detail Spread: la distribuzione delle dimensioni lungo la lunghezza del buffer dei froxel. Un valore più alto comprime i froxel più vicini alla telecamera e posiziona più dettagli più vicino ad essa.
Ambient Inject: regola l'intensità della luce ambientale applicata alla nebbia volumetrica. Un valore di
0.0significa che la luce ambientale non influirà sulla nebbia volumetrica. Questo ha un piccolo impatto sulle prestazioni se impostato su un valore superiore a0.0.Sky Affect: controlla la quantità di nebbia volumetrica da disegnare sullo sfondo del cielo. Se impostato su
0.0, la nebbia volumetrica non influirà affatto sul rendering del cielo (inclusi i FogVolume).
Nella sezione Temporal Reprojection sono disponibili altre due proprietà:
Temporal Reprojection > Enabled: Abilita la riproiezione temporale nella nebbia volumetrica. La riproiezione temporale fonde la nebbia volumetrica del frame attuale con quella del frame precedente per ammorbidire i bordi frastagliati. L'impatto sulle prestazioni è minimo, tuttavia può causare un effetto "fantasma" sui FogVolume e sui Light3D in movimento, lasciando una scia dietro di loro. Quando la riproiezione temporale è abilitata, si consiglia di evitare di spostare i FogVolume o i Light3D troppo velocemente. Gli effetti di illuminazione dinamica di breve durata dovrebbero avere Volumetric Fog Energy impostata su
0.0per evitare l'effetto fantasma.Temporal Reprojection > Amount: la quantità con cui fondere l'ultimo frame con il frame attuale. Un valore più alto produce una nebbia volumetrica più sfumata, ma peggiora notevolmente l'effetto "fantasma". Un valore più basso riduce l'effetto fantasma, ma può rendere evidente il tremolio temporale per ogni frame.
Nota
A differenza della nebbia non volumetrica, la nebbia volumetrica ha una portata finita. Significa che la nebbia volumetrica non può coprire completamente un mondo ampio, poiché a distanza smetterà di essere renderizzata.
Se si desidera nascondere aree distanti al giocatore, si consiglia di abilitare la nebbia sia volumetrica sia non, e di regolarne la densità adeguatamente.
Interazione della luce con la nebbia volumetrica
Per simulare il comportamento di diffusione della luce della nebbia nella realtà, tutti i tipi di luce interagiranno con la nebbia volumetrica. È possibile regolare l'impatto di ogni luce sulla nebbia volumetrica attraverso la proprietà Volumetric Fog Energy di ogni luce. Abilitando le ombre su una luce, queste saranno visibili anche sulla nebbia volumetrica.
Se per motivi artistici non si desidera interagire con la luce della nebbia, è possibile disabilitare questa funzione globalmente impostando Volumetric Fog > Albedo su un colore nero puro nella risorsa Environmente. L'interazione con la luce della nebbia si può disabilitare anche per luci specifiche impostando la loro Volumetric Fog Energy su 0. In questo modo si miglioreranno anche le prestazioni, escludendo la luce dai calcoli della nebbia volumetrica.
Utilizzare la nebbia volumetrica come soluzione di illuminazione volumetrica
Sebbene non sia fisicamente accurato, è possibile regolare le impostazioni della nebbia volumetrica in modo che funzioni come una soluzione di illuminazione volumetrica. Significa che le parti non illuminate dell'ambiente non saranno più oscurate dalla nebbia, ma la luce sarà comunque in grado di rendere la nebbia più luminosa in aree specifiche.
Questo lo si può fare impostando la densità della nebbia volumetrica al valore minimo consentito maggiore di zero (0.0001), poi aumentando la proprietà Volumetric Fog Energy delle luci a valori molto più alti di quelli predefiniti per compensare. I valori compresi tra 200.0 e 5000.0 di solito funzionano bene per questo.
Equilibrare le prestazioni e la qualità
Sono disponibili alcune impostazioni del progetto per regolare le prestazioni e la qualità della nebbia volumetrica:
Rendering > Environment > Volumetric Fog > Volume Size: la dimensione base utilizzata per determinare la dimensione del buffer di froxel sugli assi X e Y della telecamera. La dimensione finale viene scalata in base al rapporto d'aspetto dello schermo, quindi i valori effettivi potrebbero differire da quelli impostati. Impostare una dimensione più grande per una nebbia più dettagliata, impostare una dimensione più piccola per prestazioni migliori.
Rendering > Environment > Volumetric Fog > Volume Depth: numero di sezioni da utilizzare lungo la profondità del buffer di froxel per la nebbia volumetrica. Un numero più basso sarà più efficiente, ma potrebbe far comparire artefatti durante il movimento della telecamera.
Rendering > Environment > Volumetric Fog > Use Filter: abilita il filtraggio dell'effetto nebbia volumetrica prima dell'integrazione. Ciò sfoca notevolmente la nebbia, riducendo i dettagli fini, ma allo stesso tempo attenua i bordi netti e gli artefatti di aliasing. Disabilitare quando servono più dettagli.
Nota
La nebbia volumetrica può causare la comparsa di banding nella viewport, soprattutto a livelli di densità più elevati. Consultare Color banding per indicazioni su come ridurre il banding.
Utilizzare i volumi di nebbia per la nebbia volumetrica locale
A volte, si desidera che la nebbia sia limitata ad aree specifiche. Al contrario, si potrebbe voler avere una nebbia volumetrica globale, ma escluderla da determinate aree. Entrambi gli approcci si possono implementare grazie ai nodi FogVolume.
Ecco una guida rapida su come usare i FogVolume:
Assicurati che la Volumetric Fog sia abilitata nelle proprietà dell'Environment . Se la nebbia volumetrica globale non è desiderata, imposta la sua Density su
0.0.Crea un nodo FogVolume.
Assegna un nuovo FogMaterial alla proprietà Material del nodo FogVolume.
Nel FogMaterial, imposta Density su un valore positivo per aumentare la densità all'interno del FogVolume, oppure su un valore negativo per sottrarre la densità dalla nebbia volumetrica globale.
Regola le estensioni e la forma del FogVolume a quanto serve.
Nota
I volumi di nebbia sottili possono apparire tremolanti quando la telecamera si muove o ruota. Lo si può attenuare aumentando l'impostazione del progetto Rendering > Environment > Volumetric Fog > Volume Depth (a scapito delle prestazioni) oppure diminuendo la Length nelle proprietà della nebbia volumetrica dell'Environment (senza un impatto sulle prestazioni, ma a scapito di una minore portata della nebbia). Alternativamente, è possibile rendere il volume di nebbia più spesso e utilizzare una densità più bassa nel Material.
Proprietà di un FogVolume
Extents: Le dimensioni del FogVolume quando Shape è Ellipsoid, Cone, Cylinder o Box. Se Shape è Cone o Cylinder, il cono/cilindro sarà adattato per rientrare nelle estensioni. Ridimensionare non uniformemente le forme cono/cilindro tramite la proprietà Extents non è supportato, ma è possibile invece ridimensionare il nodo FogVolume.
Shape: la forma del FogVolume. Può essere impostata su Ellipsoid, Cone, Cylinder, Box or World (agisce come nebbia volumetrica globale).
Material: Il materiale utilizzato dal FogVolume. Può essere un FogMaterial integrato o uno ShaderMaterial personalizzato (Shader di nebbia).
Dopo aver selezionato Nuovo FogMaterial nella proprietà Materiale, è possibile regolare le seguenti proprietà in FogMaterial:
Density: la densità del FogVolume. Gli oggetti più densi sono più opachi, ma potrebbero presentare artefatti di sottocampionamento che appaiono come strisce. I valori negativi si possono utilizzare per sottrarre la nebbia da altri FogVolume o dalla nebbia volumetrica globale.
Albedo: il colore di diffusione singola del FogVolume. Internamente, l'albedo membro viene convertito in diffusione singola, che viene miscelata additivamente con gli altri FogVolume e con l'albedo della nebbia volumetrica globale.
Emission: il colore della luce emessa dal FogVolume. La luce emessa non proietterà luce o ombre su altri oggetti, ma può essere utile per modulare il colore del FogVolume indipendentemente dalle sorgenti luminose.
Height Falloff: la frequenza con cui la densità della nebbia basata sull'altezza diminuisce all'aumentare dell'altezza nello spazio mondo. Un valore elevato di attenuazione risulterà in una transizione netta, mentre un valore basso risulterà in una transizione più graduale. Un valore di
0.0produce una nebbia a densità uniforme. La soglia di altezza è determinata dall'altezza del FogVolume associato.Edge Fade: la durezza dei bordi del volume di nebbia. Un valore più alto produrrà bordi più sfumati, mentre un valore più basso produrrà bordi più netti.
Density Texture: la texture 3D utilizzata per scalare la densità dei membri del FogVolume. Può servire per variare la densità della nebbia all'interno del FogVolume con qualsiasi tipo di motivo statico. Per effetti animati, si consiglia di utilizzare uno shader di nebbia personalizzato . È possibile importare qualsiasi immagine come texture 3D cambiandone il tipo di importazione nel pannello Importazione.
Utilizzare texture di densità di noise 3D
A partire da Godot 4.1, è disponibile la risorsa NoiseTexture3D che si può usare per generare proceduralmente noise 3D. Questa risorsa è ideale per le texture di densità in FogMaterial, consentendo di ottenere effetti di nebbia più dettagliati:
Screenshot taken with Volume Size project setting set to 192 to make high-frequency detail more visible in the fog.
Per farlo, seleziona la proprietà Density Texture e scegli New NoiseTexture3D. Modifica questo NoiseTexture3D cliccandoci sopra, poi clicca su Noise in fondo alle proprietà di NoiseTexture3D e scegli New FastNoiseLite. Regola la larghezza, l'altezza e la profondità della texture del noise a seconda delle dimensioni del volume della nebbia.
Per migliorare le prestazioni, si consiglia di utilizzare dimensioni ridotte per la texture (64×64×64 o inferiori), poiché i dettagli ad alta frequenza sono difficili da notare in un FogVolume. Se si desidera rappresentare variazioni di densità più dettagliate, sarà necessario aumentare Rendering > Environment > Volumetric Fog > Volume Size nelle impostazioni del progetto, il che ha un impatto sulle prestazioni.
Nota
La Color Ramp di NoiseTexture3D influisce sulle texture di densità del FogMaterial, ma poiché viene campionato solo il canale rosso della texture, solo il canale rosso della rampa di colore influenzerà la densità risultante.
However, using a color ramp will not tint the fog volume according to the texture. You would need to use a custom shader that reads a Texture3D to achieve this.
Shader di FogVolume personalizzati
This page only covers the built-in settings offered by FogMaterial. If you need to customize fog behavior within a FogVolume node (such as creating animated fog), FogVolume nodes' appearance can be customized using Shader di nebbia.
Faking volumetric fog using quads
In some cases, it may be better to use specially configured QuadMeshes as an alternative to volumetric fog:
Quads work with any rendering method, including Mobile and Compatibility.
Quads do not require temporal reprojection to look smooth, which makes them suited to fast-moving dynamic effects such as lasers. They can also represent small details which volumetric fog cannot do efficiently.
Quads generally have a lower performance cost than volumetric fog.
Però questo approccio ha alcuni svantaggi:
The fog effect has less realistic falloff, especially if the camera enters the fog.
Transparency sorting issues may occur when sprites overlap.
Performance will not necessarily be better than volumetric fog if there are lots of sprites close to the camera.
Per creare uno sprite di nebbia basato su QuadMesh:
Crea un nodo MeshInstance3D con una risorsa QuadMesh nella proprietà Mesh. Imposta le dimensioni a piacere.
Crea un nuovo StandardMaterial3D nella proprietà Material della mesh.
Nello StandardMaterial3D, imposta Shading > Shading Mode su Unshaded, Billboard > Mode su Enabled, abilita Proximity Fade e imposta Distance Fade su Pixel Alpha.
Imposta Albedo > Texture sulla texture sottostante (fai clic destro e scegli Salva come…):
Dopo aver impostato la texture albedo, vai al pannello Importazione, seleziona la texture e cambia la modalità di compressione in Lossless per migliorare la qualità.
Il colore della nebbia è impostato tramite la proprietà Albedo > Color; la sua densità è impostata tramite il canale alfa del colore. Per i migliori risultati, bisognerebbe regolare Proximity Fade > Distance e Distance Fade > Max Distance a seconda delle dimensioni del QuadMesh.
Optionally, billboarding may be left disabled if you place the quad in a way where all of its corners are in solid geometry. This can be useful for fogging large planes that the camera cannot enter, such as bottomless pits.