Wie kann ich einen höhenbasierten volumetrischen Nebel erzeugen?

10

Vor kurzem habe ich nach Techniken gesucht, um volumetrischen Nebel auf einer Y-Positionsebene der Spielwelt zu erzeugen. Aber alles, was ich gefunden habe, ist Nebel, der mithilfe eines Partikelsystems oder eines eingebauten Motornebels erzeugt wurde und nicht wirklich zu dem passt, was ich suche.

In meinem Fall brauche ich einen Nebel, der sowohl effizient als auch dicht ist. Es sollte überall in der Spielwelt sein, aber aus Leistungsgründen kann es natürlich nur als Teil einer Kamera oder eines Shaders gerendert werden und sieht aus, als würde es sich bewegen, obwohl es nur eine Illusion ist. Ich könnte ein Partikelsystem einstellen, wenn es die beste Wahl ist, es an der Kamera befestigen und es bewegen.

Die Hauptfrage bleibt also weiterhin: Wie kann ich einen volumetrischen Nebel implementieren, der sowohl dicht als auch effizient arbeitet?

Als eine bestimmte Engine, die ich benutze, ist es Unity.

Als Beispiel, was ich meine, hier ist der Link zu einem Spiel mit dem Effekt, den ich suche: Astromike

Beispiel-Screenshot eines Spiels mit dichtem, höhenbasiertem Nebel.

Candid Moon _Max_
quelle
Ein bisschen wie ein GLSL-Noob hier, aber was ist mit dem Abtönen der Pixel im Fragment-Shader, basierend auf ihrer Y-Koordinate, die Sie vom Vertex-Shader abrufen würden?
Quentin
2
Haben Sie den Unity-Vortrag über "Spezialeffekte mit Tiefe" gelesen ? Obwohl es jetzt einige Jahre alt ist, gelten die Prinzipien immer noch. Sie decken sowohl höhenbasierten Nebel als auch "flauschigen Nebel" ab, der sich in leeren Räumen sammelt und sich um Hindernisse herum verdünnt. Da alle Beispiele Einheit sind, sollte es einfach anzuwenden sein.
DMGregory
@ Quentin ja, gute Idee, aber wird es Shader pro Objekt sein, oder? Dann müssten viele Shader gewechselt werden. Ich bin auch ein Neuling in der Shader-Programmierung, also hätte ich vielleicht etwas Unsinn geschrieben. Aber soweit ich weiß, gelten Vertex-Shader für Objekte. Und das Färben hat möglicherweise keinen Bewegungseffekt. Ich verstehe, dass, wenn ich Bewegung will, jedes kleine Ding, das sich im Inneren bewegt, ein Objekt sein sollte, also könnte das Partikelsystem der beste Weg sein.
Candid Moon _Max_
@wondra yep, dies ist möglicherweise nicht der beste Ansatz, wenn es wahr ist, Transparenz ist stark an Leistung.
Candid Moon _Max_
1
Listen passen auch nicht gut zu unserem Q & A-Format, denn wann ist eine Liste vollständig? Wie viele "verschiedene Situationen" sind genug? Nach welchen Metriken beurteilen wir "am besten"? Im Allgemeinen eignet sich dieses Format am besten für klar fokussierte Fragen mit Antworten, die Sie validieren können. Wenn Sie also das Gefühl haben, eine Antwort zu haben, die Ihren Anforderungen entspricht, ist es tatsächlich besser, Ihre Frage so zu bearbeiten, dass sie auf das eingegrenzt wird, was Sie tatsächlich benötigt haben, anstatt sie zu umfassend und unvollständig beantwortet zu lassen. Andere Benutzer können jederzeit andere Fragen zu anderen Aspekten stellen, um gezieltere Antworten zu erhalten, die für ihren Fall relevant sind
DMGregory

Antworten:

24

Ich bin der Schöpfer von Astromike. :) :)

Eigentlich benutze ich einen ziemlich einfachen Trick, um es wie Nebel aussehen zu lassen. Ich entwickle Astromike mit Unity. Wenn Sie also Unity verwenden, können Sie dasselbe tun. Ich gehe aber davon aus, dass Sie denselben Shader auch für andere Engines neu erstellen können.

Ich richte eine Ebene für den Nebel ein und füge ein Material mit Particle / Alpha Blended hinzu, auf dem ein Shader mit weichem Partikelfaktor (in meinem Fall 0,32) aktiviert ist. Das ist es.

Nebelflugzeug: http://imgur.com/a/MAEFW

Einstellungen: http://imgur.com/NJVAaIQ

Es funktioniert bei mir aufgrund des Kamerawinkels und funktioniert möglicherweise nicht bei anderen Personen.

Der Rest ist nur ein Post-Effekt-Stapel (Bloom, Vignette usw.). Ich hoffe, das hilft. Prost.

Mikea15
quelle
1
Beeindruckend! Cool, danke fürs Teilen! Das Spiel ist unglaublich :)
Candid Moon _Max_
Sieht fantastisch und so einfach aus, habe es in meinem Projekt versucht. Scheint nur mit einer perspektivischen Kamera zu funktionieren (unser Spiel ist orthographisch).
Jeff
das ist zu schön um wahr zu sein haha ​​schön
Lestat
Hi @ Mikea15, sehr gut aussehendes Spiel! Leider kann ich den von Ihnen erwähnten Effekt nicht wiederherstellen. Ich habe Bloom zum Nachbearbeitungsstapel hinzugefügt. Er verteilt sich jedoch auf Objekte, auch wenn sich die Nebelebene dahinter befindet (nicht überraschend), während in Ihrer Demo die vertikalen Kanten des Spalten sind frei von Bloom-Effekt. Auch in meinem Soft Particle Factor ändert sich nichts, unabhängig vom Wert. Es wäre großartig, wenn Sie eine kleine Demoszene bereitstellen könnten, die dies zeigt. Vielen Dank!
Dawid
@Dawid Ich weiß, dass dies zu spät ist, aber Sie müssen Ihren Kamera-Rendering-Pfad auf verzögert einstellen und sicherstellen, dass die Qualität weicher Partikel in den Projekteinstellungen auf Qualität überprüft wird
Rito Ramos