Как сделать 2D физический движок Soft-body? - PullRequest
29 голосов
/ 28 июня 2011

Определение твердого тела в Box2d:

Кусок вещества, который настолько силен, что расстояние между любыми двумя кусками вещества на куске является полностью постоянным.

И это именно то, чего я не хочу, поскольку я хотел бы сделать 2D (возможно, в конечном итоге 3D) эластичным, деформируемым, ломким,и даже липкие тела.

То, что я надеюсь получить от этого сообщества, - это ресурсы, которые учат меня математике того, как объекты изгибаются, ломаются и взаимодействуют.Меня не волнуют молекулярные или химические свойства этих объектов, и часто это все, что я нахожу, когда пытаюсь найти как рассчитать, какой кусок дерева, металла, резины, слизи, жидкости, органического материалаи т. д. могут выглядеть как после того, как к нему применена сила.

Кроме того, я очень наглядный человек, поэтому диаграммы и тому подобное ОЧЕНЬ ПОМОЩЬ для меня.

================================================================================

Игнорируйте эти вопросы, они старые, и яя держу их здесь только в контекстных целях

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

2.Если бы не было возможности создать свой собственный, не потратив на это годы?

3. Могу ли я использовать в качестве начала существующие движки, такие как bullet и box2d, и просто трансформировать их код, или это просто приведет к еще большим проблемампозже, учитывая мой 1 год опыта программированияа пуля была 3D?

4. Наконец, если бы я преобразовал другую библиотеку, было бы лучше всего изменить уже 2D-код box2D, уже мягкий код Буллета или смешать исходный код обоих?


Спасибо!

Ответы [ 5 ]

17 голосов
/ 28 июня 2011

(1) И Bullet, и PhysX поддерживают деформируемые объекты в некоторой емкости. Bullet имеет открытый исходный код, и PhysX можно использовать бесплатно. У них обоих есть порты для Windows, Mac, Linux и всех основных консолей.

(2) Вы можете взломать что-нибудь вместе, если вы действительно знаете, что делаете, и это может даже сработать. Однако, вероятно, будут ошибки, если у вас нет чертовски хорошего понимания того, как работает последовательный решатель импульсных ограничений Box2D, и какие типы мер будут необходимы для поддержания стабильности вашей системы. Тем не менее, есть много способов заставить деформируемые объекты работать с минимальной суетой в игровой среде. Первый вариант - взять приближение деформации второго (или более высокого) порядка. Это позволяет вам справляться с деформациями почти так же, как с жесткими движениями, только теперь у вас есть несколько дополнительных степеней свободы. См., Например, следующую статью:

http://www.matthiasmueller.info/publications/MeshlessDeformations_SIG05.pdf

Второй метод - мягкие тела под давлением, которые в основном моделируют тело как набор частиц с некоторыми ограничениями по расстоянию и силами давления. Это то, что делают и PhysX, и Bullet, и сейчас это довольно стандартная техника (например, Гиш использовал ее):

http://citeseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.4.2828%26rep%3Drep1%26type%3Dpdf

Если вы гуглите вокруг, вы можете найти множество учебных пособий по его реализации, но я не могу ручаться за их качество. Наконец, недавно был предпринят толчок к попыткам сделать деформируемые объекты «правильным» способом, используя реалистичные модели упругости и подходы типа конечных элементов. Это все еще область активных исследований, так что это не для слабонервных. Например, вы можете взглянуть на любое количество работ в этом году на SIGGRAPH:

http://kesen.realtimerendering.com/sig2011.html

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

(4) Исходя из того, что я только что сказал, вы, вероятно, уже знаете ответ. Если вы любитель приключений и у вас есть время, чтобы убить, и желание учиться, тогда я говорю, дерзайте! Конечно, сначала это будет сложно, но со временем все становится проще. Кроме того, изучение новых вещей - это очень весело!

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

5 голосов
/ 28 июня 2011

Быстрый и частичный ответ:

  • твердое тело легко моделировать благодаря его свойствам (вы можете использовать физические инструменты, такие как "Torseur + (ссылка на французском в википедии, английский эквивалент точек теории винта) для моделирования сил, действующих в любой точке в твоей стихии.
  • для сравнения, нетвердые элементы переходят из почти твердой (например, очень жесткая резина: она может двигаться, но почти полностью) в почти жидкую (например, очень мягкий рубер, латекс). Это означает, что динамические свойства, применяемые к этому типу объектов, очень сложны и зависят от природы объекта
  • Возьмите пример пружины: легко моделировать независимо (f = kx), но создание универсального инструмента, способного моделировать этот конкретный случай, является кошмаром (особенно если вы думаете о угловых случаях: расширение не бесконечно, сжатие достигает нижней точки, материал нелинейный ...)
  • Насколько я знаю, когда имеешь дело с "упругими" материалами, люди проводят свою собственную моделизацию для своих собственных целей (общего не существует)

теперь ответы:

  1. Наверное, нет, не то чтобы я знал, по крайней мере
  2. не легко, смотрите ранее, почему
  3. Если у вас нет высокого уровня фона в эластичных материалах, боюсь, это будет больно

Надеюсь, это помогло

3 голосов
/ 02 июля 2014

Некоторые конкретные случаи, такие как деформируемые шарики, можно довольно хорошо смоделировать с помощью пружинных соединений: enter image description here

Вот пример реализации с cocos2d: http://2sa -studio.blogspot.com / 2014/05 / soft-body-with-cocos2d-v3.html

2 голосов
/ 08 июля 2011

В зависимости от сложности необходимых вам деформируемых объектов, вы можете их эмулировать, используя box2d, ограничивая твердые тела соединениями или пружинами. Я делал это в прошлом, используя клон box2d для xna (farseer), и он работал хорошо. Надеюсь, это поможет.

1 голос
/ 05 октября 2012

Физика вашего вопроса разбита на две разные темы:

  1. Неупругие столкновения : математика здесь проста, и вы можете написать довольно приличную библиотеку самостоятельно, не слишкоммного работы для 2D очков / шаров.(И с большим количеством работы, вы могли бы изучить физику для расширенных тел.)
  2. Изгиб и разрушение материалов: это будет трудно.В общем, вам придется смоделировать многие темы в области машиностроения:
    1. Механика сплошной среды
    2. Структурный анализ
    3. Анализ отказов
    4. Анализ напряжений
    5. Анализ деформаций

Я не бойсяМоделирование изгибания и разрушения материалов, в общем, очень подробная и разнообразная тема.Это займет много времени.И единственный способ добиться успеха будет состоять в том, чтобы понять науку достаточно хорошо, чтобы вы могли сделать умные комбинации, чтобы ограничить область науки, которую вы должны моделировать в своей игре.

Однако другая половина вашей проблемы (Моделирование Неупругие столкновения ) - гораздо более достижимая цель.

Удачи!

...