GLSL для простого воздействия на поверхность воды

Я ищу несколько указателей на то, как реализовать простые эффекты поверхности воды в OpenGL ES 2.0. Ничего необычного, как отражение или рефракция, просто основной эффект пульсации/волны, который модулирует с течением времени. Производительность имеет решающее значение. Я предполагаю, что это будет лучше всего сделано в шейдере.

Любые указатели на то, как лучше всего справиться с этим?

Ответ 1

Существует старый трюк для моделирования волн воды и ряби, используя минимальное усилие в терминах уравнений. Он используется во многих местах, и я не могу найти оригинал, но вы можете его захватить, например, из здесь.

Вам понадобятся две текстуры, каждая из которых содержит только высоту. Моделирование выполняется путем ping-ponging между ними (используя один как источник, а второй как пункт назначения каждый раз).

При рендеринге вам может потребоваться вывести нормальный уровень поверхности соседей.

Ответ 2

Блог Adrian Boeing содержит пример кода GL, сопровождаемый ясными объяснениями, для ряда эффектов, включая пульсацию.