Программа должна принимать входные данные, обрабатывать их и выдавать выходные данные. Так что именно физический движок принимает в качестве входных данных и предоставляет в качестве выходных данных?
Программа должна принимать входные данные, обрабатывать их и выдавать выходные данные. Так что именно физический движок принимает в качестве входных данных и предоставляет в качестве выходных данных?
Ответы:
Физический движок отвечает за моделирование движений и реакций объектов, как если бы они находились в пределах ограничений реальной физики (или схожей с реальной) физикой. Должен отметить, что обычно это не отдельная программа, а скорее компонент более крупной, более интересной программы (такой как игра).
Входными данными для физического моделирования обычно является набор объектов («тел») со свойствами (например, твердые они или мягкие, их массы, формы и т. Д.), А также набор сил, действующих на эти тела.
Основываясь на этих входных данных, двигатель моделирует обновленные положения и ориентации тел и применяет их («выходные данные»). Обычно, когда объекты сталкиваются или перекрываются, это включается в выходные данные шага моделирования в форме обратного вызова, который клиентский код может подключить для обработки определенной логики игрового процесса, относящейся к столкновению.
Ввод скорости, массы и времени, вывод новых скоростей. Иногда вращение / угловой момент также является входом и выходом.
По сути физические движки пытаются симулировать эффекты гравитации и столкновений. Для более совершенных физических движков это означает, что они включают как постоянную, так и временную деформацию объектов, в том числе расщепление объектов на несколько объектов, а также момент импульса объектов. В идеале они также имитируют стресс, например, сколько грузовиков может пересечь этот мост, пока он не рухнет, но это довольно редко. Другие переменные симуляции, такие как сопротивление воздуха, также считаются физическим движком, но, насколько я знаю, они еще не вошли ни в одну игру.
Большинство физических движков в некоторой степени специализированы и будут симулировать физику до уровня, необходимого для игры. Физические движки для автомобильных игр часто сильно отличаются от физических движков для 3D-шутеров. А физический движок игры в гольф может иметь чрезмерные расчеты взаимодействия мяча для гольфа и отдельных листьев травы, в то же время совершенно не обрабатывая столкновения на высокой скорости и деформацию автомобиля (в случае удара по мячу для гольфа) ,
Обычно физический движок используется для того, чтобы заставить объекты в игре вести себя реалистичным образом по отношению к окружающей среде без необходимости разрабатывать определенные анимации для каждого возможного сценария.
В частности, физический движок возьмет модель с набором свойств (масса, соединения и т. Д.) И отобразит ее в игре в соответствии с набором параметров.
Ранним примером этого были рэгддолл-движки (например, в Unreal), которые моделировали способ, которым обмякшие тела падают вниз по ступенькам и т. Д.
В современных технологиях физические движки часто будут тесно интегрированы в общий игровой пакет, наряду с ИИ, игровым интерфейсом, созданием катсцены и т. Д.
Можно с уверенностью утверждать, что физические движки восходят к началу игрового дизайна, например, понг можно считать грубым физическим движком. Однако главное в том, что физический движок способен генерировать точки анимации на лету, основываясь на наборе параметров, а не просто используя заранее определенные последовательности анимации из захвата движения или ручной анимации.
Как упоминалось в других ответах, в некоторых классах или играх, таких как вождение или симуляция полета, физический движок может быть основным для игры и, как таковой, будет основным входным сигналом для управления анимацией на экране. Хотя обычно этот термин используется для инструмента общего назначения, который может применяться в различных ситуациях, не требуя очень специфического знания или анализа рассматриваемого контекста со стороны разработчика, а не очень специфического симулятора, построенного с нуля для конкретного применения.
Физический движок отвечает за моделирование движения объектов в «мире» (что бы это ни значило в контексте движка). В настоящее время большинство физических движков используют для этого ньютоновскую механику, поскольку они относительно просты для симуляции и «достаточно точны» для большинства целей, если вы не занимаетесь космической симуляцией.
Теоретически, «чистый» физический движок будет принимать три входа:
Принимая во внимание инерцию и силы, двигатель перемещает объекты вокруг. Выход физического движка - это просто новое состояние «мира» , которое игра может затем считывать и изменять по мере необходимости.
На практике физические движки не обязательно настолько «чисты» . Объекты нужно создавать и уничтожать, а иногда их нужно перемещать так, как это не позволят законы физического движка. Иногда это может быть сделано вне двигателя, но иногда это делается внутри, и для этого двигателю требуется больше входных данных. Но три входа, указанные выше, охватывают основы.
Например, предположим, что вам нужно было перемещать персонажа в игре с помощью джойстика. Если вы не используете физический движок, это довольно просто: когда вы видите, что пользователь перемещает джойстик, вы соответственно перемещаете объект. С физическим движком вы не перемещаете объект напрямую: вы прикладываете к нему силу, соответствующую направлению, в котором вы хотите, чтобы объект двигался, и позволяете движку обрабатывать его .
Какая разница? Даже если в мире больше ничего нет, объект вряд ли будет двигаться точно так же, потому что физический движок будет обрабатывать такие вещи, как реалистичное ускорение. Но также возможно, что другие силы могут действовать на объект одновременно, как и инерция, и двигатель будет учитывать их все . Например, если вы применяете северную силу на объект, но что-то еще применяет западную силу (или объект уже двигался на запад, и ничто не замедляет это), то двигатель переместит объект на северо-запад.
Вот что дает вам физический движок: он отслеживает объекты, их положение и скорости, а также силы, действующие на них. Благодаря законам механики, он может даже создавать некоторые силы самостоятельно, чтобы автоматически обрабатывать такие вещи, как столкновения, трение и гравитация, и все это без вас, разработчика игры, от необходимости делать что-то дополнительное.
Физический движок - это симулятор физических тел.
Это позволяет вам создавать тело (или несколько), определяя его физические свойства, такие как масса, размер, плотность и т. Д.
Это также позволяет вам определять свойства мира физики, в котором происходит симуляция (например, гравитация).
Наконец, это позволяет вам применять силы или создавать соединения между телами.
После того, как вы определили все эти вещи, вы можете запустить симуляцию, и физический движок скажет вам, где каждое тело будет размещено на следующем временном шаге (который обычно соответствует следующему кадру в вашей игре). И следующий, и так далее ...
Вы видите движущихся спрайтов на экране, потому что каждый кадр игровой движок запрашивает физический движок
Где это тело сейчас?
и игровой движок обновляет графическое представление соответственно.
Мне обычно нравится видеть Физический Двигатель как инструмент для применения законов физики декларативным способом.
Фактически вместо написания кода, описывающего, какие вычисления должны быть выполнены, чтобы определить, где тело будет находиться на следующем временном шаге, я просто описываю мир физики, задающий атрибуты тел (и самого мира физики), и я позволяю механическому движку ответить этот вопрос для меня.