Myślę, że powinieneś pomyśleć o efekcie jako „obliczyć mapę, gdzie jest woda” + „wygeneruj normalny wektor z tej mapy i użyj go, aby zrównoważyć wyszukiwanie tekstury tła”.
W podziale na to, co robi twój przykładowy shadertoy, po prostu oblicza „ślad”, aby pokazać, gdzie następuje defogowanie:
Oblicza normalne okrągłe krople deszczu,
i używa tej normalnej mapy, aby zrównoważyć wyszukiwanie tekstury do fałszywego załamania.
Jeśli chcesz, aby ślady były wykonywane przez przetwarzanie końcowe w module cieniującym, powinieneś po prostu utworzyć kształt „śladu” w module cieniującym za pomocą algebry. Na przykład w poniższej funkcji nałożyłem „chwiejną ścieżkę” i stożek na głowie i ogonie, aby uzyskać
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);
}
Oto szorstki POC w shadertoy - https://www.shadertoy.com/view/XlBfz1 demonstrujący tworzenie zestawu kropli deszczu. Wygląda ziarniście w małych rozdzielczościach ze względu na rozdzielczość instrumentów pochodnych, ale powinien wyglądać lepiej, jeśli wyświetlisz go na pełnym ekranie.
Edycja: Dodano przykład z nakładanymi kroplami deszczu
Pozostawione jako ćwiczenie dla czytelnika:
1) Dodaj małe okrągłe krople. dla inspiracji, spójrz na StaticDrops
funkcję w swoim oryginalnym przykładzie shadertoy.
2) Dodaj wysokiej jakości normalne obliczenia. Jak #define CHEAP_NORMALS
sugeruje opcja z oryginalnego przykładu shadertoy, wbudowany dFdx jest przybliżeniem niskiej wierności i można uzyskać lepsze wyniki, ręcznie obliczając pochodne (kosztem obliczenia funkcji 3 razy).
3) Randomizowanie odstępów między kolumnami. Możesz poszerzyć kolumny, a następnie zmodyfikować uv.x - 0.5 + 0.2 * wobble
bit, aby dodać losowe przesunięcie na osi x. Prawdopodobnie zechcesz jeszcze raz usunąć stronę z oryginalnego przykładu i nałożyć na siebie kilka różnych strumieni strumieni, aby uzyskać mniej jednolity wygląd.
możesz uzyskać ten efekt, wykonując następujące czynności:
Cząstka
RenderTextuer
możesz zapisać wynik za pomocą RenderTexture. to jest przykład multipass w shadertoy:
https://www.shadertoy.com/view/ltccRl
Stworzyłem kamerę do renderowania cząstek do RenderTexture:
GrabPassing
możesz zdobyć przepustkę za zastosowanie Distortion
Wyjaśniłem to w tym poście:
Jak mogę odtworzyć efekt cząsteczki zniekształcającej Quantum Break?
Plama
dzięki użyciu alfa w kolorze przez całe życie mamy proste rozmycie
aby uzyskać lepszy wynik, lepiej zastosować proste rozmycie, ale jak uzyskać rozmycie?
Macierz splotowa
W przetwarzaniu obrazu jądro, macierz splotu lub maska to mała matryca. Służy do rozmycia, wyostrzania, wytłaczania, wykrywania krawędzi i nie tylko. Odbywa się to poprzez splot jądra z obrazem.
Aby uzyskać więcej informacji, kliknij ten link
Boxblur
Powtórzenie
możesz użyć Rendertexture do zapisania poprzedniej klatki. więc możesz złapać poprzednią klatkę, a następnie rozmyć. powtarzając to osiągasz rozmycie.
Normalna
Wniosek
Ostateczny moduł cieniujący:
bez używania koloru alfa przez cały okres użytkowania:
za pomocą alfa w kolorze przez całe życie:
Źródło jest dostępne:
https://github.com/smkplus/RainDrop
Jest więcej!
możesz także tworzyć fale
Przydatne linki
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/
źródło
Wiele lat temu istniało pytanie , ale w ogóle nie dotyczy Unity (niestety). Jeśli spojrzysz na slajd 57 połączonej prezentacji, wspominają o podejściu opartym na siatce.
Istnieje pewne pokrewne pytanie dotyczące Physics SE, które może Cię zainteresować. Link do droplet.pdf w połączonym pytaniu jest zepsuty, ale nadal znajduje się na Wayback Machine. Zajmuje się matematyką wody spływającej z kilku rodzajów powierzchni. Kropelki wolą podróżować po ścieżkach wcześniej używanych przez wcześniejsze krople deszczu, na przykład (patrz p926).
Prawdopodobnie możesz po prostu wymodelować głowy i ogony każdej „kropli deszczu” i pozwolić jej trochę zygzakować. Kiedy zderzają się dwie wydłużone krople deszczu, przypuszczam, że można je połączyć w większą i szybciej poruszającą się kroplę deszczu. Objętość wody pozostaje taka sama. Jest po prostu poruszany i kształtowany przez siły grawitacji, przyczepność do szkła i spójność.
źródło