Чи є двигун 2d фізики, який може моделювати рідини та гази? [зачинено]


20

На даний момент платформа та мова програмування не мають значення, я хотів би просто знати, чи існує щось для цього. Будь-яка допомога вдячна.


Я реалізував користувальницький 2d двигун рідини. Мені вдалося отримати робочий приклад, використовуючи цей документ про в'язкопружні рідини та код із емо Flui ° D ° як шаблон. Однак рідини не такі стабільні, як хотілося б, і код може використати багато оптимізації любові (багатоядерна обробка, зручність кешування тощо). Мені хочеться - це бібліотека, яка вже все це зробила, так що мені залишається лише інтегрувати її з Box2d і моєю грою.
deft_code

Відповіді:


8

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


8
Вони використовували домашній двигун, але включили методи, які можна застосувати за допомогою будь-якого двигуна фізики за деяким спеціальним кодом. Насправді дуже інформативно розповіли про свою динаміку рідини на GDC (слайди тут: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
привид

6

Добре, що я не розглядав це, але я знаю, що майже будь-який двигун фізики може наслідувати цю ідею. Box2D тощо.

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

Якщо зв’язати зовнішні частинки, ви отримаєте багатокутну форму, що представляє масу

АБО

якщо просто намалювати піксель або графік частинок над кожною частинкою, ви можете досягти ефекту хмари для маси.


4
Ця відповідь не підходить для ігор в реальному часі в практичному розмірі.
Атака

3
Я не впевнений, чому ви це скажете, оскільки динаміка рідини дуже часто моделюється як частинки. Для прикладів дивіться відео nvidia tech про частинки рідини на youtube, програма Algodoo (яка раніше називалася Phun) або розмовна Q-Games розповіла про свою гру PixelJunk Shooter (слайди на gdcvault.com/play/1012447/Go-With-the- Потокова рідина ). В останньому випадку Q-Games показують, як вони будують багатокутник із колекції частинок. Я думаю, що це підтверджує, що ця відповідь цілком справедлива для реальної реалізації IMHO.
привид

WOWOW навіщо знищення? Я не лютую, просто хочу знати, чому. Це реалістична техніка і використовується.
Джоель

"частинки, що підстрибують навколо, від поверхонь та іншого (швидше для газів)". Це звучить так, як ви описуєте рідини на молекулярному рівні, і хоча наївний підхід може працювати з запеченим моделюванням, він не буде добре працювати в режимі реального часу. Частинки добре, якщо тривалий тип моделювання правильний, "підстрибуючи навколо", схоже, він би працював з макрочастинками. Ви також грубо помилково представили, як імітувати щільність.
AttackingHobo

Частинки працюють досить добре en.wikipedia.org/wiki/Smoothed-particle_hidrodynamics . Використовувався в останній демонстрації FLT: як описано в directtovideo.wordpress.com/2011/05/03/numb-res Ця реалізація може бути трохи важкою, але більш прості наближення, як у розмові GDC Pixel Junk Shooter, повинні добре працювати.
недійсна

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.