В настоящее время я реализую игру с видом сверху на океан. Я использую следующую небольшую абстрактную текстуру:
Фактическая текстура прозрачна, я добавил зеленый цвет для ясности.
Теперь у меня проблема в том, что я не знаю, как анимировать эту текстуру, чтобы вода выглядела хорошо. Я попытался переместить текстуру синусоидальной волной: texture.y += sin(angle)
. Конечно, теперь вся текстура движется, что выглядит нереально. Следующее, что я попробовал, это добавить еще один слой и реализовать эффект параллакса. Так что отражения под поверхностью воды также будут двигаться, но намного медленнее. Это выглядит немного лучше, но все еще не ... достаточно хорошо.
Я думаю, что лучше всего будет выглядеть анимация, если отдельные ячейки будут расширяться и сжиматься, как сеть или кусок ткани. Представьте, что кто-то слегка потянет за одну вершину этих ячеек, и соседняя ячейка расширится, и ячейка, к которой я стремлюсь (или подтолкну), сократится. Вроде как паутина пружин (?). Но я понятия не имею, как реализовать что-то вроде этого:
- Какая математическая модель для этого? Что-то с пружинами, где силы толкать / тянуть?
- И если да, то как мне сопоставить эту модель с заданной текстурой? Сохраняя все кривые, а что нет ...
(Я также открыт для различных идей / ответов о том, как оживить данную текстуру. Реализм здесь не главное, просто приятные на вид воды, похожие на движения ...)
Решение от DMGregory
В этом посте я опубликовал пример libgdx: 2d анимация воды неровная и не плавная (см. Ответ о фильтрации текстур)
_Noise
это [текстурный сэмплер, который читает из] маленькой потертой случайной текстуры выше.v2f i
это интерполированные данные из вершинного шейдера - в основном мы используем его , чтобы получить координаты текстуры для пикселя мы рисуем,i.uv
. И вы абсолютно правы во всем остальном.Это называется эффектом каустики, и генерация этих эффектов во время выполнения довольно трудоемка, поэтому это традиционно делается с помощью предварительно визуализированной покадровой анимации. Существуют инструменты, которые будут генерировать кадры каустической анимации для вас, например, Caustics Generator , у которого есть бесплатная версия для некоммерческого использования. Есть также некоторые готовые, которые вы можете купить за значительно более дешевую, чем профессиональная версия инструмента, о котором я говорил.
Обратите внимание, что едкие эффекты также обычно являются эффектом, применяемым в виде легкого печенья на подводной местности или на подводной поверхности. То есть, положить его на поверхность воды, глядя вниз, обычно не то, как выглядит вода.
источник
Это похоже на текстуру, которую вы можете сгенерировать из графа вороной, например:
Вы можете сделать небольшие плавные корректировки графика, перемещая точки; Перерисовка графика каждого кадра будет довольно дорогой, поэтому вы, вероятно, захотите предварительно визуализировать анимацию.
источник
Существует метод oldschool, включающий нижний слой текстуры и две полупрозрачные текстуры для отражения сверху.
Если вы хотите пройти весь путь и хотите, чтобы вода не выглядела полной клонированных волн или голубоватых суповых карт, то вам нужно достичь цели.
https://steamcdn-a.akamaihd.net/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf
источник