Comments 37
Если добавить конвекцию, будет намного реалистичней. Уж очень бойко идет прогрев воды вниз.
Хм, можно подработать формулы так, чтобы передача теплоты вниз была медленнее, чем вверх.
… во много раз медленней (х50 — х100). Прогрев вверх идет за счет конвекции, а вниз только за счет теплообмена, а вода — плохой проводник тепла.
Тогда возникает вопрос — если сделать это физичным — не потеряет ли в фановости? )
Но в любом случае, можно запилить и потом править коэффициенты.
А этого, имхо, вполне хватит для игр не заточенных на реал физике.
Да! Там действительно очень много забавных взаимодействий — и с кипением и с замерзанием. Из моих любимых идей:
- С другой стороны воды игрока обстреливают из луков.
- Стреляем в воду любой магией с большой ударной волной, например, файрболом (в воде поднимаются крупные волны).
- Стреляем в воду любой замораживающей магией.
- Прячемся за стеной льда.
И что самое приятное — каждый новый модуль добавляет (если это прорабатывать) не 1 взаимодействие, а N — 1 :)
Постепенное закипание воды
Наверняка вы в курсе, но там баг с закипанием правого колодца (на видео примерно с 0:40). По логике, он же должен снизу вверх нагреваться, а получается, что весь его объём слева направа греется.
А вообще очень круто это всё! Я вот только начинаю геймдев осваивать, и, представляя хотелки на свою игру, прихожу в ужас, когда вижу, сколько работы требуется для подобных деталей...
Да, выше в комментариях писали про похожую ситуацию — в идеале горизонтальный перенос температуры должен быть быстрее вертикального, да еще и конвекцию нужно учитывать. На самом деле, при прозрачной воде этого и не заметно, но если будет влиять на геймплей, придется доработать.
При полной скорости просмотра даже и не заметно. Поставьте 0,25х
Прямоугольные впадины в воде при колебаниях? Какая-то ошибка в коде :)
Там немножко более дурацкая ситуация:
При расчете волн у каждой пружины есть текущая скорость. И каждое обновление на эту скорость влияют 2 фактора:
- Затухание колебаний (неинтересно нам)
- Добавление ускорения
А ускорение — рассчитывается как разница между y-координатой текущей пружины и соседних (+некие коэффициенты). Обычно все ок — т.к нужно выровнять воду к одному уровню.
Но тут у пары пружин максимальная y-координата ниже, чем у соседей (т.к в стену упирается). И поэтому кадра 3-4 при расчете ускорения получается так, что y-координата пружины по-прежнему ниже соседей и в сумму получается нехилое ускорение. Из-за него и происходит такое "проседание".
В общем, хороший вопрос — как это корректно исправлять :)
Есть несколько вопросов по вашему проекту, но слишком много, чтобы обсуждать их здесь. Возможно ли с вами связаться? Мой вк: https://vk.com/nikgen
Хорого, что заметили: там все фонари болтаются на "цепях", которые всего-лишь перекрашенная трава, чересчур гибкая. Поэтому на пкрвых кадрах источники света резко сносит в сторону.
Посмотрел (мельком, если честно) игрушку — всё-таки у нас очень разные подходы. У автора очень реалистичная и цельная штука, в то время как у меня модульная (т.е не один общий набор "законов", а много независимых взаимодействующих систем). Плюс у меня не так "честно" всё считается — хаки на каждом ходу, т.к. красивая картинка — одна из основных целей. :)
Помню, читал где-то (чуть ли не тут тоже) статью про расчёт Навье-Стокса со смешиванием цветом на сетчатой модели в реальном времени (всё это в толстом шейдере на видеокарте). Выглядело весьма впечатляюще.
Капель скорее всего, не будет, а вот пузырьки в кипящей воде — в разработке :)
Толщина льда не сможет зависеть от температуры воздуха, как в реальности: т.к. в реальности вода редко промерзает до дна, а у меня вполне может, за некоторое время (течений ведь нет).
Кстати, про пузыри во льду — шейдер для льда основная проблема, по которой задерживается написание следующей статьи — никак не могу придумать, как должен выглядеть прозрачный лёд так, чтобы при этом была видна граница вода/лёд
С каплями все просто — примерный размер игрока сейчас — 8 пикселей. По правде говоря, не хотел бы я находится рядом с кипящей водой, где брызги размером с мою голову. :)
А если серьёзно, после доработки системы частиц попробую, и если окажется классно — напишу вам в личку большое спасибо.
Про воду и лёд. Тут все достаточно просто — даже если исключить течения, конвекцию и т.д. в реальном мире возможны ситуации, в которых и вода не замерзает ещё и лёд уже толком не тает. Метастабильность.
А у меня эти фишки принесены в жертву геймплею: из-за большой теплопроводности жидкости лед всё-таки достаточно быстро достигает дна. А если уменьшать теплопроводность, будет неинтересно использовать огненную и ледяную магию.
Про лаву. Я уже пробовал колдовать с настройками жидкости, можно сделать довольно тягучую и медленно пузырящуюся субстанцию. Не могу сказать, что лава в приоритетных планах, но хочется. :)
Я с 2017 жду продолжения. Автор, я надеюсь, ты жив и все хорошо. Таких статей больше не найти.
2D магия в деталях. Часть четвёртая. Вода