Nebel unter Wasser rendern

8

Mir ist glFog bekannt, das sich je nach Entfernung zur Kamera zwischen Nebel und Oberflächenfarbe mischt:

Geben Sie hier die Bildbeschreibung ein

Die Gleichungen sind sogar in den Dokumenten angegeben . Der Nebel wird jedoch unmittelbar vor der Kamera angebracht. Ich versuche, eine Wasseroberfläche zu rendern und möchte, dass sie eine gewisse Tiefe hat, zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Im Moment rendere ich nur die Wasseroberfläche mit Alpha-Blending, wie unten. Was ich brauche, ist, dass der Nebel auf der Entfernung von der Wasseroberfläche zum Grund des Wassers basiert. Wie kann ich diese Entfernung erreichen? Im Moment gehe ich davon aus, dass sich die Kamera immer über dem Wasser befindet.

Geben Sie hier die Bildbeschreibung ein

jozxyqk
quelle

Antworten:

5

Sie können den Abstand zur zweiten Oberfläche strahlenverfolgen. Dies mag konzeptionell am einfachsten sein, aber nicht unbedingt die schnellste Methode *.

Aber es gibt einen tollen Trick: Sie können eine Tiefenkarte von der Kamera aus mit mehreren Durchgängen auf die Wasseroberfläche rendern. Die Entfernung im Wasser ist jetzt die Pixeltiefe abzüglich der Tiefenkartentiefe. Dies funktioniert nicht in allen Situationen, z. B. wenn Sie das Wasser verlassen und später wieder eintreten. Sollte aber in vielen Fällen funktionieren, wie der abgebildete. Sie können dieselbe Technik sogar für Boolesche Operationen verwenden.

dmap

Bild 1 : Rendern Sie die Tiefenkarte. Konsultieren Sie die Tiefenkarte, wenn Sie den Boden Ihres Teichs beschatten.

* Es kann in bestimmten Fällen sein.

joojaa
quelle