Comment puis-je créer un brouillard volumétrique basé sur la hauteur?

10

Récemment, je cherchais des techniques pour faire du brouillard volumétrique sur un certain niveau de position Y du monde du jeu. Mais tout ce que j'ai trouvé, c'est du brouillard créé à l'aide d'un système de particules ou d'un brouillard de moteur intégré qui ne correspond pas vraiment à ce que je recherche.

Dans mon cas, j'ai besoin d'un brouillard à la fois efficace et dense. Cela devrait être partout dans le monde du jeu, mais évidemment, pour des raisons de performances, il ne peut être rendu que comme une partie d'un appareil photo ou d'un shader et avoir l'air de bouger bien que ce ne soit qu'une illusion. Je pourrais définir un système de particules si c'est le meilleur choix, le fixer à la caméra et le faire bouger.

La question principale reste donc la suivante: comment mettre en œuvre un brouillard volumétrique à la fois dense et performant?

En tant que moteur particulier que j'utilise, c'est Unity.

A titre d'exemple ce que je veux dire, voici le lien vers un jeu avec l'effet que je recherche: Astromike

Exemple de capture d'écran d'un jeu utilisant un brouillard dense basé sur la hauteur.

Candid Moon _Max_
la source
Un peu d'un noeud GLSL ici, mais qu'en est-il de la teinture des pixels dans le fragment shader, en fonction de leur coordonnée Y que vous récupéreriez du vertex shader?
Quentin
2
Avez-vous revu le discours d'Unity sur "Effets spéciaux avec profondeur" ? Bien qu'il ait plusieurs années maintenant, les principes s'appliquent toujours. Ils couvrent à la fois le brouillard basé sur la hauteur et le «brouillard moelleux» qui se rassemble dans les espaces vides et s'amincit autour des obstacles, et puisque tous les exemples sont Unity, il devrait être facile à appliquer.
DMGregory
@Quentin ouais, bonne idée, mais est-ce que ça va être shader par objet non? Ensuite, il faudrait changer beaucoup de shaders. Je suis aussi un noob dans la programmation de shaders, donc j'ai peut-être écrit des bêtises. Mais pour autant que je sache, les vertex shaders s'appliquent aux objets. Et la coloration peut ne pas donner d'effet de mouvement. Je comprends que si je veux du mouvement, chaque petite chose qui se déplace à l'intérieur devrait être un objet, donc le système de particules pourrait être la meilleure voie à suivre.
Candid Moon _Max_
@wondra yep, ce n'est peut-être pas la meilleure approche si c'est vrai, la transparence est lourde de performances.
Candid Moon _Max_
1
Les listes ne conviennent pas non plus à notre format de questions / réponses, car quand une liste est-elle complète? Combien de "situations différentes" suffisent? Selon quelles mesures juge-t-on "les meilleures"? Généralement, ce format fonctionne mieux avec des questions clairement ciblées avec des réponses que vous pouvez valider. Donc, si vous sentez que vous avez une réponse qui correspond à vos besoins, il est en fait préférable de modifier votre question pour la limiter à ce dont vous aviez réellement besoin au lieu de la laisser trop large et sans réponse. Les autres utilisateurs peuvent toujours poser d'autres questions spécifiques à d'autres aspects, obtenant des réponses plus ciblées pertinentes à leur cas
DMGregory

Réponses:

24

Je suis le créateur d'Astromike. :)

En fait, j'utilise une astuce assez simple pour le faire ressembler à du brouillard. Je développe Astromike en utilisant Unity, donc si vous utilisez Unity, vous pouvez faire de même. Mais je suppose que vous pouvez également recréer le même shader pour d'autres moteurs.

Ce que je fais, c'est que je mets en place un plan pour le brouillard et que j'ajoute un matériau avec un shader Particle / Alpha Blended avec un facteur de particules douces (0,32 dans mon cas). C'est ça.

Avion de brouillard: http://imgur.com/a/MAEFW

Paramètres: http://imgur.com/NJVAaIQ

Cela fonctionne pour moi en raison de l'angle de la caméra et peut ne pas fonctionner pour d'autres personnes.

Le reste est juste une pile post-effet (Bloom, Vignette, etc.) J'espère que cela vous aidera. À votre santé.

Mikea15
la source
1
Hou la la! Cool, merci du partage! Le jeu est incroyable :)
Candid Moon _Max_
Ça a l'air génial et si simple, j'ai essayé de le faire dans mon projet. Semble fonctionner uniquement avec une caméra en perspective (notre jeu est orthographique).
Jeff
c'est trop beau pour être vrai haha ​​gentil
Lestat
Salut @ Mikea15, très beau jeu! Malheureusement, je n'arrive pas à recréer l'effet que vous avez mentionné - j'ai ajouté Bloom à la pile de post-traitement, mais il se propage sur les objets même si le plan de brouillard est derrière eux (sans surprise), tandis que dans votre démo, il semble que les bords verticaux du les colonnes sont propres de l'effet de floraison. De plus, dans mon facteur de particules douces ne change rien, quelle que soit la valeur. Ce serait formidable si vous pouviez fournir une petite scène de démonstration qui le montrerait. Merci!
Dawid
@Dawid je sais que c'est tard mais vous devez définir le chemin de rendu de votre caméra sur différé et vous assurer que la qualité des particules douces est vérifiée dans les paramètres du projet
Rito Ramos