Есть ли 2-ой физический двигатель, который может моделировать жидкости и газы? [закрыто]

20

На данном этапе платформа и язык программирования не имеют значения, я просто хотел бы знать, существует ли что-то для этого. Любая помощь приветствуется.

Ксавье
источник
Я реализовал собственный двухмерный жидкостный двигатель. Я смог получить рабочий пример, используя эту статью о вязкоупругих жидкостях и код от Flui ° D ° emo в качестве шаблона. Тем не менее, жидкости не так стабильны, как хотелось бы, и код мог бы использовать много оптимизаций (многоядерная обработка, удобство кэширования и т. Д.). Мне нужна библиотека, которая уже сделала все это, так что мне осталось только интегрировать ее с Box2d и моей игрой.
deft_code

Ответы:

8

Посмотрите, что Q-Games использовали для Pixeljunk Shooter. Это 2d игра с довольно сложной физикой флюидов. Я не уверен, использовали ли они доморощенный или физический движок промежуточного программного обеспечения, но информация, вероятно, где-то там.

Тристан Крокетт
источник
8
Они использовали доморощенный движок, но включили методы, которые можно применять с помощью любого физического движка и некоторого пользовательского кода. На самом деле они дали очень информативный доклад об их динамике жидкости на GDC (слайды здесь: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
призрак
6

Ну, я не смотрел на это, но я точно знаю, что практически любой физический движок может подражать этой идее. Box2D и др.

В основном, частицы отскакивают вокруг, от поверхностей и друг от друга (быстрее для газов), но также дают им эффект, подобный постоянной гравитации (у жидкостей все будет одинаковым, но некоторые газы могут подняться медленно).

Если вы соедините внешние частицы, вы получите многоугольную форму, представляющую массу

ИЛИ

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

Joel
источник
4
Этот ответ не подходит для игр реального времени в практическом размере.
AttackingHobo
3
Я не уверен, почему вы бы сказали это, поскольку динамика жидкости очень часто моделируется как частицы. В качестве примеров смотрите технические видеоролики nvidia о жидких частицах на YouTube, программу Algodoo (ранее называвшуюся Phun) или доклад Q-Games о своей игре PixelJunk Shooter (слайды на gdcvault.com/play/1012447/Go-With-the- Flow-Fluid ). В последнем случае Q-Games показывает, как они строят многоугольник из набора частиц. Я думаю, что это подтверждает, что этот ответ вполне допустим для реализаций реального времени IMHO.
призрак
WOWOW, почему отрицательные голоса? Я не бушую, просто хочу знать почему. Это реалистичная техника и используется.
Джоэл
«частицы, отскакивающие от поверхности и друг от друга (быстрее для газов)», которые звучат так, как будто вы описываете жидкости на молекулярном уровне, и хотя наивный подход может работать с запеченным моделированием, он не будет хорошо работать в играх в реальном времени. Частицы хороши, так как длинный тип симуляции верен, «подпрыгивание вокруг» действительно похоже на работу с макрочастицами. Вы также сильно исказили, как имитировать плотность.
AttackingHobo
Частицы работают достаточно хорошо en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . Был использован в последней демонстрации FLT, как описано в directtovideo.wordpress.com/2011/05/03/numb-res. Эта реализация может быть немного тяжелой, но более простые приближения, как в обсуждении Pixel Junk Shooter GDC, должны работать нормально.
аннулировано
6

Единственная библиотека, в которой я могу найти информацию о жидкостях, - это Fluidic . Это довольно альфа и только один релиз. Библиотека физики Bullet поддерживает «гидродинамику сглаженных частиц», метод, используемый для моделирования жидкостей. Хотя библиотека ориентирована на 3D, вы можете применить ограничения к одной оси, чтобы она работала в 2D.

Я бы рекомендовал, как я уже упоминал в некоторых комментариях к другим ответам, использовать стандартный физический движок, такой как Box2D или Бурундук, и использовать несколько кругов для моделирования воды (с гравитацией) или газа (без гравитации) и комбинировать их вместе. в одно водное или газовое тело. Вы можете применить некоторые ограничения к отдельным телам, чтобы они «слипались» вместе, чтобы вы могли имитировать вязкость. Посмотрите это видео, чтобы увидеть, как отдельные тела (смоделированные как квадраты в видео) работают вместе. Обратите внимание, однако, что техника, используемая в этом видео, отличается от упомянутой в этом параграфе. Вы можете использовать видео, чтобы понять, как круги взаимодействуют друг с другом, и попытаться имитировать это с помощью ограничений, присутствующих в используемой библиотеке физики.

Интересная часть приходит, когда вы хотите объединить несколько кругов в водоем. Самое простое решение, которое я могу придумать, это нарисовать каждый круг в виде метабола, чтобы они выглядели как часть большего тела. Вы можете найти математику и пример кода за этими телами здесь .

призрак
источник
Видео, на которое вы ссылаетесь, использует гораздо больше, чем просто много кругов. Он использует технику, известную как SPH. Полыхать порт в Флуи ° D ° Эмо использует Box2d найти столкновений и применять силы , но методы использования SPH вычисления силы не твердые тела Box2D в.
deft_code
Вы абсолютно правы в этом отношении. Видео должно было быть иллюстративным, а не примером реализации. Спасибо, что упомянули мою ошибку, и я обновил ответ, чтобы избежать дальнейших недоразумений.
призрак
3

Прошло несколько лет с тех пор, как этот вопрос был опубликован, но я наткнулся на него во время поиска, поэтому я решил обновить его.

Google выпустил LiquidFun (с открытым исходным кодом) для системы Box2D. У него есть некоторые ограничения, но это быстрый способ начать работу с частицами жидкости, песка и т. Д. С довольно приличной производительностью.

https://github.com/google/liquidfun

У PixelJunk отличный подход, но это частная библиотека. Они рассказали об удивительном уровне деталей в своем выступлении на GCD 2010.

TrophyGeek
источник