Нужен совет для физического движка

12

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

Прежде всего, я видел, что Game-Physics-Engine-Development настоятельно рекомендуется для поставленной задачи, и мне было интересно, если бы вы могли дать мне второе мнение. Могу ли я получить его? Кроме того, просматривая Amazon, я наткнулся на архитектуру Game Engine и, поскольку я хочу создать физический движок для игр, я подумал, что это может быть хорошо прочитано.

Во-вторых, я знаю, что моделирование физики требует больших вычислительных ресурсов, поэтому я хотел бы использовать CUDA или OpenCL. Прямо сейчас я склоняюсь к OpenCL, потому что он будет работать как на чипсетах NVIDIA, так и на чипсетах ATI. Что вы, ребята, предлагаете?

PS: я буду реализовывать это на C ++ в Linux.

adivasile
источник

Ответы:

10

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

  1. Документы Дэвида Барафф в Particulary Введение в физическое моделирование

  2. Тезис Брайана Винсента Миртича о динамическом моделировании систем твердого тела на основе импульсов

  3. Kacic / Bullock "Система практической динамики" SIGRAPH 2003, РЕДАКТИРОВАТЬ: Ссылка добавлена .

Эти документы были упомянуты в другой замечательной статье Ника Порсино (LucasArts) в одной из книг- самоцветов Gems 4 «Написание физического движка на основе Verlet». Это не бесплатно, но стоит каждого пенни.

Также взгляните на другие движки, вот источник Bullet Physics Engine .

О реализации CUDA / OpenCL: сначала запустите его на процессоре, это достаточно сложно :)

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

Как только у вас будет запущен простой движок, мой совет: создайте тестовые сценарии, в которых вы сравниваете результат вашего движка с результатом другого движка. Это помогло мне найти много ошибок и улучшит ваш интерфейс; что-то вроде приложения одинаковой силы на 1 секунду к одному и тому же корпусу в обоих двигателях.

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

Майк Земдер
источник
Выглядит как отличный ответ, но вы можете отформатировать его немного.
Коммунистическая утка
Спасибо за отзыв. Я согласен, что я не смогу создать конкурентоспособный двигатель, но моя главная цель в этом заключается в обучении.
adivasile
1
@ Коммунистическая утка, спасибо за подсказку, я был
новичком
1
Добавлена ​​ссылка на статью Качича, надеюсь, она правильная :)
Рэй Дей,
5

Майк прав, работы Бараффа - отличное начало, но не забывайте, что Крис Хеккерс пишет о динамике твердого тела: http://chrishecker.com/Rigid_Body_Dynamics !

Также его совет на тему «[..] ты выбросишь свой двигатель» полностью верен. Но вы многому научитесь!

Относительно части CUDA / OpenCL вашего вопроса: если вы знаете CUDA, то переключение на OpenCL становится очень простым. Я бы рекомендовал сначала изучить CUDA, потому что существует очень много хороших учебников, примеров кода и вычислительных библиотек. Например:

Но имейте в виду: начать работать с CUDA легко, начать работать с симуляцией физики немного сложнее, но объединить оба это довольно сложно!

Йонас Бетел
источник
Вы абсолютно правы, это еще один замечательный ресурс, который нужно упомянуть, +1 к статье Криса
Хекера
4

Я тоже начинал с Бараффом, но сейчас он немного устарел. То, что вам нужно, - это итеративные решатели, и лучшая работа с документами об этом - « Итеративная дианмика» Эрин Катто . У вас есть все, что вам нужно для реализации вашего физического движка. Вы можете немного покопаться в докторской диссертации Эрлебена, если вам нужно больше деталей (например, суставы и больше математических вещей), но это в значительной степени так. Хотелось бы, чтобы я нашел его с самого начала - пройдитесь по форуму Bullet немного, там много информации (может быть, слишком много).

Что касается книг, многие из них разочаровывают, но я рекомендую анимацию по физике Кенни Эрлебена или Game Physics Pearls.

Не знаю много CUDA / OpenCL (хотя я всегда хотел это сделать), но вы обязательно должны проверить работу Такахиро Харада.

Михай Ф
источник