Желе физика 3d - PullRequest
       2

Желе физика 3d

4 голосов
/ 06 января 2011

Я хочу спросить о физике желе (http://www.youtube.com/watch?v=I74rJFB_W1k), где я могу найти хорошее место, чтобы начать делать такие вещи? Я хочу сделать симуляцию автокатастрофы, и я хочу использовать эту физику желе, но я не могу найти много о них. Я не хочу использовать существующий физический движок, я хочу написать свой собственный:)

Ответы [ 5 ]

4 голосов
/ 26 января 2012

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

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

  1. Разбейте объем вашего объекта на множество маленьких кусочков (элементов)обычно тетраэдр .Давайте назовем всю коллекцию этих элементов сеткой.Вы действительно хотите сделать две копии этой сетки.Пометьте одну «остальную» сетку, а другую - «мировую».Я расскажу вам почему.

  2. Для каждого тетраэдра в вашей сетке мира, измерьте, насколько деформирован он по отношению к соответствующему покоящемуся тетраэдру.Мера того, насколько она деформирована, называется «деформация».Обычно это достигается путем первого измерения так называемого градиента деформации (часто обозначаемого F ).Есть несколько хороших документов , которые описывают, как это сделать.Если у вас есть F , один из наиболее типичных способов определения деформации ( e ): e = 1/2 ( F ^T * F ) - I .Это известно как штамм Грина.Он инвариантен к поворотам, что делает его очень удобным.

  3. Используя свойства материала, который вы пытаетесь смоделировать (желатин, резина, сталь и т. Д.), И используя деформациюВы измерили на шаге выше, выведите « напряжение » каждого тетраэдра.

  4. Для каждого тетраэдра, посетите каждый узел (вершину, угол, точку (все этиозначают одно и то же)) и усредняют взвешенные по площади нормальные векторы (в форме покоя) трех треугольных граней, которые разделяют этот узел.Умножьте напряжение тетраэдра на этот усредненный вектор, и на этот узел действует сила упругости из-за напряжения этого тетраэдра.Конечно, каждый узел может потенциально принадлежать нескольким тетраэдрам, поэтому вы захотите суммировать эти силы.

  5. Интегрируйте !Есть простые способы сделать это, и сложные способы.В любом случае, вам нужно перебрать каждый узел в вашей сетке мира и разделить его силы на его массу, чтобы определить его ускорение.Самый простой способ перейти отсюда:

    • Умножить его ускорение на некоторое небольшое значение времени dt .Это дает вам изменение скорости, DV .
    • Добавьте DV к текущей скорости узла, чтобы получить новую общую скорость.
    • Умножьте этоскорость на dt , чтобы получить изменение позиции, dx .
    • Добавьте dx к текущей позиции узла, чтобы получить новую позицию.

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

  6. Повторяйте шаги со 2 по 5 столько раз, сколько вы хотите.

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

http://sealab.cs.utah.edu/Courses/CS6967-F08/Project-2/

Следующая ссылка также очень полезна:

http://sealab.cs.utah.edu/Courses/CS6967-F08/FE-notes.pdf

Это действительно веселая тема, и я желаю вам удачи!Если вы застряли, просто оставьте мне комментарий.

1 голос
/ 06 мая 2011

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

Затем напишите свою собственную версию;)

0 голосов
/ 24 ноября 2011

К сожалению, только 2d, но может быть что-то для начала это JellyPhysics и JellyCar

0 голосов
/ 06 января 2011

См. Страницу этого парня Мацей Матыка , тема мягкого тела

0 голосов
/ 06 января 2011

Здесь - страница с некоторыми довольно хорошими учебниками. Тот, который вы ищете, вероятно, в секциях (обратная кинематика) и Mass & Spring .

Подсказка: желе можно рассматривать как трехмерную ткань ; -)

Кроме того, попробуйте взглянуть на результаты поиска для модели мягкого тела с пружинным давлением - они могут заставить вас двигаться в правильном направлении: -)

...