Как стать автором
Обновить

Комментарии 36

Если добавить конвекцию, будет намного реалистичней. Уж очень бойко идет прогрев воды вниз.

Хм, можно подработать формулы так, чтобы передача теплоты вниз была медленнее, чем вверх.

… во много раз медленней (х50 — х100). Прогрев вверх идет за счет конвекции, а вниз только за счет теплообмена, а вода — плохой проводник тепла.

Тогда возникает вопрос — если сделать это физичным — не потеряет ли в фановости? )
Но в любом случае, можно запилить и потом править коэффициенты.

по моему это даже бОльшие возможности дает:
— хочешь закипятить все — прогреваешь с самого низу;
— хочешь, закипятить только одну комнату — делаешь источник тепла только в/под ней.

Также на одном уровне смогут ужиться и лед и кипящая вода.
Не думаю, что это важно — игроки не будут видеть температурное распределение в реалтайме, но будут видеть, что изменение температуры в точке А, изменит воду и в удаленной точке Б.
А этого, имхо, вполне хватит для игр не заточенных на реал физике.
Просто безумие! Кипячение добавляет прикольные игровые возможности. Как в инкрадибл машинз, замутить сложное взаимодействие объектов для прохождения уровней в каком-нибудь рпг-платформере… Вообще крутотень, Жаль я такое запрограммировать не осилю.)

Да! Там действительно очень много забавных взаимодействий — и с кипением и с замерзанием. Из моих любимых идей:


  1. С другой стороны воды игрока обстреливают из луков.
  2. Стреляем в воду любой магией с большой ударной волной, например, файрболом (в воде поднимаются крупные волны).
  3. Стреляем в воду любой замораживающей магией.
  4. Прячемся за стеной льда.

И что самое приятное — каждый новый модуль добавляет (если это прорабатывать) не 1 взаимодействие, а N — 1 :)

Найти «кипятильник», чтобы вскипятить воду и убить плавающего в ней чудовище. А горячими парами от кипящего озера воздушный шар поднимет игрока на следующий уровень. Конечно, в данной постановке это всё без проблем скриптуется, но «реалистичная физичность» будет круче.)

Да, вот только всему этому придется игроку учится самому — слишком много взаимодействий. Но для уровней песочниц — идеально.

Ох, если бы я знал. )
Очень много кода и материала, причем приходится постоянно проводить research и иногда переписывать нафиг куски кода. Тут, похоже, процесс важен не менее, чем результат.

Что интересно, видео называется не “water 29 best”. Можно ждать часть про траву?

Вы еще на дату публикации видео посмотрите (
Да, по сути, планируется минимум про:


  1. Воду (графика)
  2. Траву и систему частиц
  3. Статья по оптимизации всего этого дела

Может, в процессе разработки еще что появится, например, ии.

Постепенное закипание воды

Наверняка вы в курсе, но там баг с закипанием правого колодца (на видео примерно с 0:40). По логике, он же должен снизу вверх нагреваться, а получается, что весь его объём слева направа греется.


А вообще очень круто это всё! Я вот только начинаю геймдев осваивать, и, представляя хотелки на свою игру, прихожу в ужас, когда вижу, сколько работы требуется для подобных деталей...

Да, выше в комментариях писали про похожую ситуацию — в идеале горизонтальный перенос температуры должен быть быстрее вертикального, да еще и конвекцию нужно учитывать. На самом деле, при прозрачной воде этого и не заметно, но если будет влиять на геймплей, придется доработать.

Как раз такой вариант ближе к реальному — тёплый поток устремится вверх, правда отогреваться будет не стеной а скорее сверху вниз, но в вашей модели воды такое не реализовать. В местах где кипящая вода примыкает к потолку визуальный баг высокой плоской волны, неужели пружина отскакивает от потолка?

Скорее косяк суммирования скоростей, спасибо, я как-то не заметил это.
Думаю, довольно просто пофиксить будет.

Спасибо! Каждая ваша статья — праздник)
А что это у Вас в заглавном видео дергается примерно между 1 и 2 секундой (там, где освещение на уровне земли, где какие-то две веточки прямо из фонарей на потолке выходят)?
При полной скорости просмотра даже и не заметно. Поставьте 0,25х
А на последнем видео не понятно, откуда появляются прямоуголные впадины на стыках с углами? Лучше всего разгледеть в стковке второго водоёма со свисающим куском башни

Прямоугольные впадины в воде при колебаниях? Какая-то ошибка в коде :)

Очень похоже на отрицательную высоту волны (или даже скорее уровня воды в определенном месте) при нормализации.

Там немножко более дурацкая ситуация:
При расчете волн у каждой пружины есть текущая скорость. И каждое обновление на эту скорость влияют 2 фактора:


  1. Затухание колебаний (неинтересно нам)
  2. Добавление ускорения

А ускорение — рассчитывается как разница между y-координатой текущей пружины и соседних (+некие коэффициенты). Обычно все ок — т.к нужно выровнять воду к одному уровню.
Но тут у пары пружин максимальная y-координата ниже, чем у соседей (т.к в стену упирается). И поэтому кадра 3-4 при расчете ускорения получается так, что y-координата пружины по-прежнему ниже соседей и в сумму получается нехилое ускорение. Из-за него и происходит такое "проседание".
В общем, хороший вопрос — как это корректно исправлять :)

Есть несколько вопросов по вашему проекту, но слишком много, чтобы обсуждать их здесь. Возможно ли с вами связаться? Мой вк: https://vk.com/nikgen

Если честно, я буду очень рад обсуждению именно здесь — это полезнее и для меня и для хабровчан :)

Хорого, что заметили: там все фонари болтаются на "цепях", которые всего-лишь перекрашенная трава, чересчур гибкая. Поэтому на пкрвых кадрах источники света резко сносит в сторону.

Напомнило powder toy. Не пробовали искать исходники или связываться с авторами сего чуда? Возможно, какими-то идеями взаимно обогатиться вышло бы.

Посмотрел (мельком, если честно) игрушку — всё-таки у нас очень разные подходы. У автора очень реалистичная и цельная штука, в то время как у меня модульная (т.е не один общий набор "законов", а много независимых взаимодействующих систем). Плюс у меня не так "честно" всё считается — хаки на каждом ходу, т.к. красивая картинка — одна из основных целей. :)

Ясно. Ну, тут вам виднее… Вообще, я вспомнил powder toy во многом потому, что подход этой штуки к расчёту теплообмена напомнил отдалённо ваш подход. Всегда казалось очень интересным используемое в powder toy совмещение клеточного автомата (для обработки фишек, связанных с давлением) и физики частиц (собственно, для частиц). Подумал что именно эта концепция могла бы вам пригодиться.

Помню, читал где-то (чуть ли не тут тоже) статью про расчёт Навье-Стокса со смешиванием цветом на сетчатой модели в реальном времени (всё это в толстом шейдере на видеокарте). Выглядело весьма впечатляюще.
Сейчас это обычно делают все же сглаженными частицами. Но да, такой подход тоже существует. Для 2d симуляция физики жидкости — давно довольно легкая(в вычислительном плане) задача.
Исходники TPT открыты https://github.com/simtr/The-Powder-Toy/
Можно сделать чтобы из кипящей воды вылетали капли. А еще можно сделать в ней пузыри. Можно сделать чтобы толщина льда зависела от температуры воздуха. И чтобы во льду замерзали пузыри.

Капель скорее всего, не будет, а вот пузырьки в кипящей воде — в разработке :)
Толщина льда не сможет зависеть от температуры воздуха, как в реальности: т.к. в реальности вода редко промерзает до дна, а у меня вполне может, за некоторое время (течений ведь нет).
Кстати, про пузыри во льду — шейдер для льда основная проблема, по которой задерживается написание следующей статьи — никак не могу придумать, как должен выглядеть прозрачный лёд так, чтобы при этом была видна граница вода/лёд

Можно сделать его как воду, но белее и матовым. Капли будут частицами, которые летят по параболической траектории обратно в воду. И как нельзя сделать толщину льда? От температуры, площади поверхности и высоты нахождения воды будет зависеть соотношение льда и воды. Например, в сильный мороз будет у какого-то озера 20% льда и 80% воды. А лужица замёрзнет полностью. Кстати, лаву собираетесь делать? Как может обойтись неприступная крепость без рва с лавой и карпами?

С каплями все просто — примерный размер игрока сейчас — 8 пикселей. По правде говоря, не хотел бы я находится рядом с кипящей водой, где брызги размером с мою голову. :)
А если серьёзно, после доработки системы частиц попробую, и если окажется классно — напишу вам в личку большое спасибо.
Про воду и лёд. Тут все достаточно просто — даже если исключить течения, конвекцию и т.д. в реальном мире возможны ситуации, в которых и вода не замерзает ещё и лёд уже толком не тает. Метастабильность.
А у меня эти фишки принесены в жертву геймплею: из-за большой теплопроводности жидкости лед всё-таки достаточно быстро достигает дна. А если уменьшать теплопроводность, будет неинтересно использовать огненную и ледяную магию.


Про лаву. Я уже пробовал колдовать с настройками жидкости, можно сделать довольно тягучую и медленно пузырящуюся субстанцию. Не могу сказать, что лава в приоритетных планах, но хочется. :)

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.