Обзор объектов игровой физики

Добавление игровой физики на платформе Source открыло широкий спектр возможностей симуляции, от качающихся шин до взамосвязанных механизмов. Теперь разработчики могут создавать физически реалистичные машины и объекты. Для создания таких объектов необходимо использовать несколько объектов физики, которые описывают физические ограничения или взимосвязи объектов друг с другом. Здесь перечислены эти объекты и их использование.
Физические ограничения
В реальном мире объекты физически ограничивают друг друга различными способами. Двери крепятся к своим рамам с помощью петель, на которых они могут качаться. Ваша рука крепится к туловищу с помощью шарового шарнира. Тяжёлые объекты можно перемещать с помощью системы тросов и шкивов. Эти закономерности в точности симулируются игровой физикой на платформе Source. Далее приведён перечень различных систем ограничений, которые можно использовать для присоединения объектов друг к другу.
phys_constraintsystem
|
Если у есть несколько объектов, связанных разными ограничениями, то расчёты ограничений могут конкурировать друг с другом, поскольку каждый из них выполянется отдельно (без учета других ограничений). Это может привести к нестабильности системы ограничений. Это будет наблюдаться как вибрация или скачки объектов. Чтобы предотвратить эту проблему, можно использовать phys_constraintsystem для каждой группы связанных ограничений, указав объект phys_constraintsystem в качестве диспетчера системы ограничений. В этом случае расчёты будут выполняться итерационно для каждой группы с учётом обратной связи между ограничениями, чтобы позволит управлять взаимодействием между ними. Система ограничений также позволяет регулировать количество итераций, можно потратить часть ресурсов ЦП, чтобы получить более точное решение. Основной проблемой является применение физических ограничений для объектов разной массы. Если объект большой массы нарушает ограничение, может потребоваться больше итераций, чтобы перевести его в соотвествующее положение/ориентацию. Обратите внимание, что все куклы создают внутреннюю систему ограничений для решения подобных проблем. |
phys_constraint (жёсткое соединение)
|
Самое простое ограничение из доступных, это ограничение просто прикрепляет один объект к другому, как если бы он был соединён гвоздями или клеем. Объект имеет два параметра для указания взаимосвязываемых ограничением объектов. Если один из объектов не указан, указанный объект присоединяется к центру расположения объекта-ограничения. В основном это используется для ограничения объектов в мире. Для всех ограничений, можно указать предел усилия или крутящего момента, при котором ограничение «разрушится». Когда к объекту, присоединённому к ограничению, прикладывается достаточное усилия или крутящий момент, ограничение отключается и срабатывает выход, который можно использовать для упарвления другими событиями.
Изучите mapssdk_phys_constraint.vmf |
phys_ballsocket (шарнир, связка ключей)
|
Шарнир идентичен тому, как рука крепится к туловищу в плече. Объект прикреплён к точке другого объект и может вращаться и двигаться по сфере вокруг этой точки. Это можно использовать в игре для изображения привязи веревкой с каким-либо элементом мира. Веревка будет вращаться внутри сферы вокруг точки в пространестве.
Изучите mapssdk_phys_ballsocket.vmf |
phys_hinge (петля/волчок)
|
Подобно дверной петле, это ограничение позволяет объектам вращаться вокруг одной оси. Ось петли задаётся с помощью компаса внутри редактора карт Hammer. Можно указать величину трения, которая заставит остановиться быстрее, как это происходит со старой ржавой петлёй. Поле "величина нагрузки" действует аналогично phys_motor.
Изучите mapssdk_phys_hinge.vmf |
phys_lengthconstraint (выпас на верёвке)
|
Это ограничение сохраняет расстояние между двумя объектами. Если установлен флаг "Сохранять жёстким", его можно рассматривать как стержень. Если нет, оно действует как виртуальная веревка с некоторой "погрешностью".
Изучите mapssdk_phys_lengthconstraint.vmf |
phys_pulleyconstraint (блок-шкив)
|
По сути, это ограничение на самом деле представляет собой два ограничения по длине и две точки в пространстве. Это похоже на виртуальную веревку, соединяющую два объекта, каждый из которых подвешен на шкив над ними. Ограничение сохраняет суммарное расстояние между точками шкива и подвешенными к ним объектами. Другими словами, перемещение одного ограниченного объекта приведет к перемещению другого, чтобы сохранить длину "веревки" постоянной.
Изучите mapssdk_phys_pulleyconstraint.vmf |
phys_convert (преобразователь в физический объект)
|
phys_convert следует использовать для превращения объёмных объектов или моделей в физические объекты. Например, создан func_tracktrain с некоторыми объектами динамичного реквизита, прикрепленными в качестве дочерних. Некоторое время используется система ввода вывода для перемещения func_tracktrain и его дочерних объектов по некоторому пути, затем в какое-то время необходимо, чтобы поезд взорвался и физически имитировать его крушение. Можно использовать phys_convert для преобразования func_tracktrain и динамичного реквизита в физические объекты во время этого события (поскольку func_tracktrain и prop_dynamic не имеют желаемого встроенного физического поведения).
Изучите mapssdk_phys_convert.vmf |
phys_ragdollconstraint (сочленения куклы)
|
Аналогично обычному phys_constraint, но используется для привязки кукол к определённому месту в пространстве, это ограничение также позволяет контролировать доступное перемещение, а также величину трения по каждой оси.
Изучите mapssdk_phys_ragdollconstraint.vmf |
phys_slideconstraint (ползун)
|
Это ограничение позволяет перемещаться вдоль одной оси. Вы можете представить это как кольцо занавески для душа, скользящее вдоль карниза для занавески. Как и ограничение phys_hinge, объект предоставляет визуальный помощник для указания направления перемещения.
Изучите mapssdk_phys_slideconstraint.vmf |
phys_keepupright (гироскоп)
|
Некоторые объекты должны пытаться оставаться в вертикальном положении. Данное ограничение применяет крутящий момент к физическому объекту, чтобы попытаться сделать это. Величина крутящего момента, который может быть сообщён в секунду, указывается в поле «Крутящий момент» объекта. Чем больше число, тем надёжнее объект будет сохранять свое вертикальное положение.
Изучите mapssdk_phys_keepupright.vmf |
phys_spring (пружина/резинка)
|
Это физическое моделирование пружины. Поле «Длина» указывает исходную длину пружины. Это то, какой длины была бы пружина, если бы она находилась в состоянии покоя (на ней ничего не висело и не было бы прикреплено). Если прикрепить что-либо к пружине, она растянется больше своей исходной длины. Величина растяжения определяется полем «Коэффициент упругости». Чем больше коэффициент, тем меньшее будет растягиваться пружина.
Изучите mapssdk_phys_sprint.vmf |
Прочие
phys_magnet (магнит)
|
Объект, действующий подобно магниту, притягивающему к себе металлические физические объекты, когда они к нему приближаются.
Изучите mapssdk_phys_magnet.vmf |
phys_motor (ротор)
|
Объект, который пытается вращать целевой объект с определенной скоростью. Это можно представить как вал двигателя, соединенный напрямую с объектом. Подключенный к колесу, он будет пытаться его вращать подобно колесу автомобиля. Имеется также поле «величина нагрузки», которое отвечает за увеличение мощности. Ротор будет пытаться вращать объект с заданной скоростью, но если этот объект оказывает сопротивление (например, из-за столкновения), ротор будет увеличивать свою мощность, в соотвествии со значением величины нагрузки, для продолжения вращения объекта с необходимой скоростью. Значение «2» заставит ротор прилагать в два раза больше усилия, чем требуется для вращения прикреплённого объекта без сопротивления.
Изучите mapssdk_phys_motor.vmf |
phys_ragdollmagnet (магнитное распятие)
|
Простое ограничение, которое притягивает к себе кукол. Это полезно для получения более достоверного падения трупа. Объект может притягиваться к точке или плашмя, то есть притягивается к прямой, а не к одной точке в пространстве. Это полезно для притягивания куклы к краю перил в любой точке вдоль края, а не к определённой точке.
Изучите mapssdk_phys_ragdollmagnet.vmf |
phys_thruster (движитель/тяга)
|
Этот объект прикладывает усилиие к объекту вдоль указанной оси. Это прямой аналог реактивного двигателя. Объект имеет таймер, который позволяет проектировщику указать длительность, в течение которой движитель должен толкать целевой объект, а затем отключиться.
Изучите mapssdk_phys_thruster.vmf |
phys_torque (стартер)
|
Аналогично phys_motor, этот объект применяет крутящий момент к другому объекту. Этот объект также имеет возможность игнорировать массу поворачиваемого объекта, а также встроенный таймер, который позволяет оказывать крутящий момент к прикрепленному объекту в течение заданного времени, отключая себя после этого.
|