Как создать 2D-движок с физикой мягких тел?

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

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

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

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

Кроме того, я очень наглядный человек, поэтому диаграммы и тому подобное ЧРЕЗВЫЧАЙНО ПОМОГАЮТ для меня.

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

Не обращайте внимания на эти вопросы, они старые, и я оставил их здесь только в целях контекста

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

2. Разве нельзя было бы сделать свою собственную, не потратив на это годы?

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

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


Спасибо!


person Griffin    schedule 28.06.2011    source источник
comment
4. Я не верю, что будет простой физический движок, который сделает то, о чем вы просите. Как упоминал Брюс, обычный нежесткий физический движок был бы чрезвычайно сложным. Однако это могло бы / было бы хорошим упражнением для реализации некоторых особых случаев. Например, вы можете смоделировать лист резины, используя сетку узлов, соединенных пружинами.   -  person tskuzzy    schedule 29.06.2011
comment
Что ж, я знаю, что написание собственного физического движка занимает очень много времени. На это уходят годы. Однако необходимое время сокращается по мере того, как требуемые методы становятся более известными. Даже решение уравнений, необходимых для движения точек, требует теории категорий и откатов, поэтому обычно это не считается очень простым.   -  person tp1    schedule 10.08.2011
comment
Голосование за закрытие слишком широкое.   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 15.04.2016


Ответы (5)


(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, которые могут работать с физическим движком 3D (например, игры типа «сверху вниз») для создания специальных эффектов.

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

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

person Mikola    schedule 28.06.2011
comment
насчет 2d физических двигателей, мне нужен двигатель на уровне пуль, но разработанный для 2d реализации. - person Griffin; 28.06.2011
comment
Ну, я не знаю хороших симуляторов мягкого тела для 2D. Я думаю, что в настоящее время люди выбирают собственный путь. Тем не менее, с 2D работать намного проще, чем с 3D, поэтому, если вы хотите попробовать, это может быть хорошим опытом для обучения. Я бы немного погуглил и изучил давление мягких тел, если вам это действительно нравится. - person Mikola; 28.06.2011
comment
не могли бы вы взглянуть на мой недавно отредактированный вопрос 3? он спрашивает, могу ли я преобразовать API 3D-физики в 2d - person Griffin; 28.06.2011
comment
Я обновил его, но ответ таков, что это, вероятно, не сработает так хорошо. Чтобы сделать 2D, вам нужно было бы добавить кучу ограничений, и система стала бы очень некорректной / медленной. - person Mikola; 28.06.2011

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

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

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

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

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

person Bruce    schedule 28.06.2011
comment
не могли бы вы взглянуть на мой недавно отредактированный вопрос 3? он спрашивает, могу ли я преобразовать API 3D-физики в 2d. - person Griffin; 28.06.2011
comment
ну, другой ответ - гораздо лучше документировать, чем мой, возвышая его. - person Bruce; 28.06.2011

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

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

person sdabet    schedule 02.07.2014

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

person crisbia    schedule 07.07.2011

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

  1. Неупругие столкновения: математика здесь проста, и вы могли бы написать довольно приличную библиотеку самостоятельно, не слишком много работа для 2D точек / мячей. (А если потрудиться, вы сможете изучить физику протяженных тел.)
  2. Materials Bending and Breaking: This will be hard. In general, you will have to model many of the topics in Mechanical Engineering:
    1. Continuum Mechanics
    2. Структурный анализ
    3. Анализ отказов
    4. Анализ напряжений
    5. Анализ деформации

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

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

Удачи!

person theJollySin    schedule 04.10.2012