Obecnie wdrażam grę z widokiem z góry na ocean. Używam następującej, trochę abstrakcyjnej tekstury:
Faktyczna tekstura jest przezroczysta, dla jasności dodałem zielony kolor.
Problem, który mam teraz, polega na tym, że nie wiem, jak ożywić tę teksturę, aby woda wyglądała ładnie. Próbowałem przesunąć teksturę z falą grzech texture.y += sin(angle)
. Oczywiście teraz cała tekstura się porusza, co wygląda trochę nierealnie. Następną rzeczą, którą próbowałem, jest dodanie kolejnej warstwy i wdrożenie efektu paralaksy. Aby odbicia pod powierzchnią wody również się poruszały, ale znacznie wolniej. Wygląda trochę lepiej, ale wciąż nie ... wystarczająco ładnie.
Myślę, że najlepiej wyglądającą animacją byłoby, gdyby pojedyncze komórki rozszerzyły się i skurczyły, coś w rodzaju sieci lub kawałka materiału. Wyobraź sobie, że ktoś lekko pociągnąłby za jeden wierzchołek tych komórek, a sąsiadująca komórka rozszerzyłaby się, a komórka, do której pociągam w kierunku (lub naciskałem), kurczyłaby się. Coś jak sieć sprężyn (?). Ale nie mam pojęcia, jak zaimplementować coś takiego:
- Jaki jest do tego model matematyczny? Coś ze sprężynami, gdzie siły pchają / ciągną?
- A jeśli tak, to jak zmapować ten model do podanej tekstury? Trzymając wszystkie krzywe, a co nie ...
(Jestem również otwarty na różne pomysły / odpowiedzi na temat animowania danej tekstury. Realizm nie jest tutaj o tyle, tylko ładnie wyglądająca woda jak ruchy ...)
Rozwiązanie z DMGregory
W tym poście zamieściłem przykład libgdx: animacja wody 2d jest postrzępiona i nie jest gładka (zobacz odpowiedź na temat filtrowania tekstur)
_Noise
to [próbnik tekstur, który czyta z] małą, losową teksturę powyżej.v2f i
jest interpolowane dane z vertex shader - głównie za jego pomocą uzyskać współrzędne tekstury dla piksela jesteśmy rysunkui.uv
. I masz całkowitą rację co do całej reszty.Nazywa się to efektem kaustycznym, a generowanie tych efektów w czasie wykonywania jest dość czasochłonne, więc tradycyjnie odbywa się to za pomocą wstępnie renderowanej animacji klatka po klatce. Istnieją narzędzia, które wygenerują dla Ciebie żrące klatki animacji, takie jak Caustics Generator , który ma bezpłatną wersję do użytku niekomercyjnego. Istnieje również kilka gotowych, które można kupić za znacznie tańsze niż pro wersja wspomnianego narzędzia.
Pamiętaj, że efekty żrące są również zwykle efektem stosowanym jako lekkie ciastko na podwodnym terenie lub na podwodnej powierzchni. Oznacza to, że umieszczenie go na powierzchni wody podczas patrzenia w dół nie jest zwykle tym, jak wygląda woda.
źródło
Wygląda to na teksturę, którą można wygenerować z wykresu voronoi, np .:
Możesz dokonywać drobnych, płynnych korekt na wykresie, przesuwając punkty; ponownie rysując wykres, każda klatka byłaby dość droga, więc prawdopodobnie zechcesz wstępnie renderować animację.
źródło
Istnieje metoda oldschoolowa, obejmująca dolną warstwę tekstury i dwie półprzezroczyste tekstury do odbicia na górze.
Jeśli chcesz przejść całą drogę i nie chcesz, aby woda nie wyglądała na pełną sklonowanych fal lub samish niebieskich zup - mapy przepływu są celem.
https://steamcdn-a.akamaihd.net/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf
źródło