Come posso creare una nebbia volumetrica basata sull'altezza?


10

Di recente, ho cercato delle tecniche per creare nebbia volumetrica su alcuni livelli di posizione Y del mondo di gioco. Ma tutto quello che ho trovato è un po 'di nebbia creata usando il sistema particellare o la nebbia del motore integrata che non si adatta davvero a ciò che sto cercando.

Nel mio caso, ho bisogno di una nebbia che sia efficiente e densa. Dovrebbe essere in tutto il mondo di gioco, ma ovviamente, per motivi di prestazioni, può essere renderizzato solo come parte di una videocamera o di uno shader e sembra che si stia muovendo sebbene sia solo un'illusione. Potrei impostare un sistema di particelle se è la scelta migliore, collegarlo alla fotocamera e farlo muovere.

Quindi la domanda principale rimane ancora: come posso implementare una nebbia volumetrica che è sia densa che performante in modo efficiente?

Come motore particolare sto usando, è Unity.

Ad esempio quello che voglio dire, ecco il link a un gioco con l'effetto che sto cercando: Astromike

Esempio di screenshot di un gioco che utilizza una fitta nebbia basata sull'altezza.


Un po 'di noob GLSL qui, ma per quanto riguarda la colorazione dei pixel nello shader di frammento, in base alla loro coordinata Y che avresti recuperato dallo shader di vertice?
Quentin,

2
Hai esaminato il discorso di Unity su "Effetti speciali con profondità" ? Anche se ormai ha diversi anni, i principi si applicano ancora. Coprono sia la nebbia basata sull'altezza che la "nebbia soffice" che si raccoglie in spazi vuoti e si assottiglia intorno agli ostacoli, e poiché tutti gli esempi sono Unity dovrebbe essere facile da applicare.
DMGregory

@Quentin sì, buona idea, anche se sarà shader per oggetto giusto? Quindi richiederebbe la modifica di molti shader. Sono un noob anche nella programmazione degli shader, quindi avrei potuto scrivere alcune sciocchezze. Ma per quanto ne so, gli shader di vertice si applicano agli oggetti. E la colorazione potrebbe non dare effetto al movimento. Capisco che se voglio movimento ogni piccola cosa che si muove all'interno dovrebbe essere un oggetto, quindi il sistema di particelle potrebbe essere il modo migliore per andare.
Candid Moon _Max_

@wondra sì, questo potrebbe non essere l'approccio migliore se è vero, la trasparenza è pesante sulle prestazioni.
Candid Moon _Max_

1
Anche gli elenchi non sono adatti al nostro formato di domande e risposte, perché quando è completo un elenco? Quante "situazioni diverse" sono sufficienti? In base a quali parametri giudichiamo "migliori"? Generalmente questo formato funziona meglio con domande chiaramente focalizzate con risposte che puoi validare. Quindi, se ritieni di avere una risposta adatta alle tue esigenze, in realtà è meglio modificare la tua domanda per restringerla a ciò di cui hai effettivamente bisogno in primo luogo, piuttosto che lasciarla eccessivamente ampia e con una risposta incompleta. Gli altri utenti possono sempre porre altre domande specifiche per altri aspetti, ottenendo risposte più mirate relative al loro caso
DMGregory

Risposte:


24

Sono il creatore di Astromike. :)

In realtà, sto usando un trucco piuttosto semplice per farlo sembrare nebbia. Sto sviluppando Astromike usando Unity, quindi se usi Unity, puoi fare lo stesso. Ma suppongo che tu possa anche ricreare lo stesso shader per altri motori.

Quello che faccio è impostare un aereo per la nebbia e aggiungere un materiale con lo shader Particle / Alpha miscelato con uno Soft Particle Factor (0,32 nel mio caso). Questo è tutto.

Aereo nebbia: http://imgur.com/a/MAEFW

Impostazioni: http://imgur.com/NJVAaIQ

Funziona per me a causa dell'angolazione della telecamera e potrebbe non funzionare per altre persone.

Il resto è solo uno stack post-effetto (Bloom, Vignette, ecc.) Spero che questo aiuti. Saluti.


1
Wow! Bene, grazie per averlo condiviso! Il gioco è fantastico :)
Candid Moon _Max_

Sembra fantastico e così semplice, ho provato a farlo nel mio progetto. Sembra funzionare solo con una videocamera prospettica (il nostro gioco è ortografico).
Jeff

è troppo bello per essere vero haha ​​nice one
Lestat

Ciao @ Mikea15, gioco molto bello! Sfortunatamente, non riesco a ricreare l'effetto che hai citato: ho aggiunto Bloom allo stack di post elaborazione, tuttavia si diffonde sugli oggetti anche se il piano di nebbia è dietro di loro (non sorprendentemente), mentre nella tua demo sembra che i bordi verticali del le colonne sono pulite dall'effetto fioritura. Inoltre, nel mio Soft Particle Factor non cambia nulla, indipendentemente dal valore. Sarebbe bello se tu potessi fornire una piccola scena demo che mostrerebbe questo. Grazie!
Dawid,

@Dawid lo so che è in ritardo, ma è necessario impostare il percorso di rendering della telecamera su differito e assicurarsi che le particelle morbide siano controllate sulla qualità nelle impostazioni del progetto
Rito Ramos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.