Я ищу любые входные данные по моделированию воды в 2D, относительно довольно большого (назовите это) заблокированного / не заблокированного массива (если смотреть сбоку). Я выдвинул следующие идеи:
Сотовые автоматы
Проведите массовую симуляцию паррала на процессоре, используя клеточные автоматы . С такими простыми правилами, как:
- Если есть ячейка, открытая снизу, двигайтесь к ней.
- Проверьте левую и правую ячейки, выберите случайную из двух и перейдите к ней.
Pros
- Прост в реализации.
- Значимый / детерминированный в многопользовательской системе.
Cons
- Вероятно, очень медленно.
- Не убедительно.
Гидродинамика на графическом процессоре
Выполните грубое приближение динамики жидкости на графическом процессоре к текстуре, подобной следующей:
+------+-----+-----+-------+
|R |G |B |A |
+------+-----+-----+-------+
|vX |vY |NULL |Density|
+------+-----+-----+-------+
Pros
- Наверное, действительно быстро.
- Может быть довольно убедительно.
- Еще один пиксельный шейдер может визуализировать его напрямую.
Cons
- Сложно реализовать.
- Сложно настроить.
- Я не могу выделить одну текстуру размером моего уровня.
- Я мог бы перекрывать области сетки, но это добавило бы дополнительную сложность.
Частицы
Используйте частицы для симуляции воды. Во время рендеринга используйте аддитивное смешивание, а затем примените функцию умножения к альфа-каналу, чтобы придать воде четкие края.
Pros
- Вероятно, будет хорошо выглядеть.
- Легко реализовать.
- Легко сделать.
- Имеет смысл в многопользовательской системе, хотя для переноса потребуется совсем немного пропускной способности.
Cons
- Межчастичные эффекты, вероятно, будут медленными (поиск окрестностей).
- Может привести к «утечке» воды через твердое пространство (потому что твердое пространство мало, например, 1px).
- Может привести к странным отверстиям в воде в зависимости от размера частиц.
- Оба вышеперечисленных могут быть смягчены, позволяя частицам дрейфовать ближе друг к другу, чем их реальный размер, однако это вызовет проблемы с характеристиками между частицами и частицами / ландшафтом.
Есть еще идеи?
Примечание: это приблизительное значение, я не ищу здесь физически правильную воду - просто то, что «достаточно хорошо» (бонусные баллы за быстрое и грязное). Игра многопользовательская, поэтому, к сожалению, весь уровень нужно постоянно моделировать.