Ich denke, Sie sollten über den Effekt nachdenken, indem Sie "eine Karte berechnen, auf der sich das Wasser befindet" + "einen normalen Vektor aus dieser Karte generieren und damit eine Hintergrundtextur-Suche versetzen".
Wenn Sie die Funktionsweise Ihres Beispiel-Shadertoys aufschlüsseln, wird lediglich eine "Spur" berechnet, um zu zeigen, wo das Entnebeln stattfindet:
Berechnet die Normalen der kreisförmigen Regentropfen,
und verwendet diese normale Karte, um eine Textur-Suche zu einer falschen Brechung zu versetzen.
Wenn Sie möchten, dass die Trails in einem Shader nachbearbeitet werden, sollten Sie einfach die "Trail" -Form im Shader mit etwas Algebra erstellen. Zum Beispiel habe ich in der folgenden Funktion einen "wackeligen Pfad" und eine Verjüngung an Kopf und Schwanz überlagert, um sie zu erhalten
float trailDrop(vec2 uv, vec2 id, float t) {
// wobbly path
float wobble = 0.5 + 0.5
* cos(120.0 * uv.y)
* sin(50.0 * uv.y);
float v = 1.0 - 10.0 * abs(uv.x - 0.5 + 0.2 * wobble);
// head
v *= clamp(30.0 * uv.y, 0.0, 1.0);
v *= clamp( uv.y + 7.0 * t - 0.6, 0.0, 1.0);
// tail
v *= clamp(1.0 - uv.y - pow(t, 2.0), 0.0, 1.0);
return clamp(v * 10.0, 0.0, 1.0);
}
Hier ist ein grober POC in Shadertoy - https://www.shadertoy.com/view/XlBfz1 , der das Erstellen einer Reihe von Regentropfen zeigt. Bei kleinen Auflösungen sieht es aufgrund der Auflösung der Derivate körnig aus, sollte aber besser aussehen, wenn Sie es im Vollbildmodus anzeigen.
Bearbeiten: Ein Beispiel mit überlagerten Regentropfen wurde hinzugefügt
Als Übung dem Leser überlassen:
1) Fügen Sie die kleinen runden Tropfen hinzu. Schauen Sie sich zur Inspiration die StaticDrops
Funktion in Ihrem ursprünglichen Shadertoy-Beispiel an.
2) Fügen Sie hochwertige Normalberechnungen hinzu. Wie die #define CHEAP_NORMALS
Option in Ihrem ursprünglichen Shadertoy-Beispiel impliziert, handelt es sich bei dem integrierten dFdx um eine Low-Fidelity-Näherung, und Sie können bessere Ergebnisse erzielen, indem Sie die Ableitungen manuell berechnen (auf Kosten der dreifachen Berechnung der Funktion).
3) Randomisierung des Abstands zwischen den Spalten. Sie können die Spalten erweitern und dann das uv.x - 0.5 + 0.2 * wobble
Bit ändern , um einen zufälligen Versatz auf der x-Achse hinzuzufügen. Wahrscheinlich möchten Sie auch noch einmal eine Seite aus dem Originalbeispiel herausnehmen und ein paar unterschiedlich große Ebenen von Streams übereinander legen, um ein weniger einheitliches Erscheinungsbild zu erhalten.
Sie können diesen Effekt erzielen, indem Sie die folgenden Schritte ausführen:
Partikel
RenderTextuer
Sie können das Ergebnis mithilfe von RenderTexture speichern. Dies ist ein Beispiel für Multipass in Shadertoy:
https://www.shadertoy.com/view/ltccRl
Ich habe eine Kamera zum Rendern von Partikeln in RenderTexture erstellt:
GrabPassing
Sie können sich einen Pass zum Anwenden von Distortion schnappen
Ich habe es in diesem Beitrag erklärt:
Wie kann ich den Verzerrungsteilcheneffekt von Quantum Break replizieren?
Verwischen
Durch die Verwendung von Alpha in Farbe über die Lebensdauer hinweg erhalten wir eine einfache Unschärfe
Um ein besseres Ergebnis zu erzielen, ist es besser, einfache Unschärfe zu verwenden, aber wie erreichen wir Unschärfe?
Faltungsmatrix
Bei der Bildverarbeitung ist ein Kernel, eine Faltungsmatrix oder eine Maske eine kleine Matrix. Es wird zum Verwischen, Schärfen, Prägen, Kantenerkennen und mehr verwendet. Dies wird erreicht, indem eine Faltung zwischen einem Kernel und einem Image durchgeführt wird.
Für weitere Informationen folgen Sie bitte diesem Link
Box Unschärfe
Wiederholung
Sie können Rendertexture verwenden, um den vorherigen Frame zu speichern. Sie können also den vorherigen Frame greifen und dann verwischen. Wenn Sie dies wiederholen, erhalten Sie Unschärfe.
Normal
Fazit
Letzter Shader:
ohne Verwendung von Alpha in Farbe über die Lebensdauer:
durch Verwendung von Alpha in Farbe über die Lebensdauer:
Quelle ist verfügbar:
https://github.com/smkplus/RainDrop
Es gibt mehr!
Sie können auch Wellen machen
Nützliche Links
https://80.lv/articles/breakdown-animated-raindrop-material-in-ue4/
https://seblagarde.wordpress.com/2013/01/03/water-drop-2b-dynamic-rain-and-its-effects/
quelle
Es gab tatsächlich eine FrageVor Jahren , die sich jedoch (leider) überhaupt nicht auf Unity bezieht. Wenn Sie sich Folie 57 der verknüpften Präsentation ansehen , wird ein gitterbasierter Ansatz erwähnt.
Es gibt eine etwas verwandte Frage zu Physics SE, die Sie vielleicht interessant finden. Der Link zu droplet.pdf in der verknüpften Frage ist unterbrochen, befindet sich jedoch immer noch auf der Wayback-Maschine. Es geht um einen Teil der Mathematik des Wassers, das von einigen Arten von Oberflächen abläuft. Tröpfchen ziehen es beispielsweise vor, auf Pfaden zu wandern, die zuvor von früheren Regentropfen verwendet wurden (siehe Seite 926).
Sie könnten wahrscheinlich nur die Köpfe und Schwänze jedes "Regentropfens" modellieren und es ein bisschen zick und zack lassen. Wenn zwei längliche Regentropfen kollidieren, könnten sie sich zu einem größeren und sich schneller bewegenden Regentropfen verbinden. Das Wasservolumen bleibt gleich. Es wird nur durch die Schwerkraft, die Haftung am Glas und den Zusammenhalt bewegt und geformt.
quelle