Коллизионные формы (Shapes)
В то время как тело (body) имитирует различные типы физического поведения, форма (shape) представляет собой объем пространства, занимаемого физическим телом. Физически моделируемый объект обычно имеет одно тело и одну или несколько форм, которые позволяют объектам сталкиваться друг с другом (поэтому формы часто называют формами столкновения). Объекты с формой также падают под действием силы тяжести, отскакивают от статичных поверхностей или скользят по ним. Тело, которому не назначена единственная форма, ведет себя как фиктивное тело , которое может быть соединено с другими телами с помощью сочленений , но не сталкивается и невосприимчиво к гравитации.
Основные типы форм следующие:
- Простые примитивы . Они очень быстры и эффективны по памяти. По возможности следует использовать простые примитивы.
- Sphere(использует непрерывное обнаружение столкновений )
- Capsule(использует непрерывное обнаружение столкновений )
- Cylinder
- Box
- Сложные коллизионные формы , состоящие из треугольников. Эти формы медленнее и требуют больше памяти.
- Выпуклая оболочка
- Набор автоматически сгенерированных выпуклых оболочек
Простые примитивы упрощают вычисление столкновений, сохраняя при этом высокую производительность и приемлемую точность. Выпуклые оболочки обеспечивают более высокую точность, однако непрерывное обнаружение столкновений недоступно для этого типа формы. Следовательно, выпуклые оболочки не должны использоваться для быстро движущихся объектов.
Число форм должно быть как можно меньше . В противном случае тяжелые физические вычисления снизят производительность.
Форма (shape) не может быть создана без тела (body) и не имеет собственной позиции в мировых координатах. Он всегда присваивается телу и позиционируется относительно него.
Смотрите также#
Программная реализация:
- Shape class
- ShapeSphere class
- ShapeCapsule class
- ShapeCylinder class
- ShapeBox class
- ShapeConvex class
- Фрагмент видеоурока по физике , иллюстрирующий концепцию формы.
Параметры формы#
Все формы независимо от их типа имеют следующие общие параметры
Enabled | Флаг, указывающий, включена ли форма. |
Continuous | Флаг, указывающий, включено ли непрерывное обнаружение столкновений для формы. Непрерывное обнаружение столкновений доступно только для сфер и капсул. |
Mass | Масса формы. Изменение массы влияет на плотность, которая рассчитывается путем деления массы на объем формы. В случае, если телу присвоено несколько форм (например, набор выпуклых оболочек) |
Density | Плотность формы. Изменение плотности влияет на массу, которая рассчитывается путем умножения объема формы на плотность. |
Friction | Коэффициент трения формы. Определяет шероховатость поверхности формы. Чем выше значение, тем меньше тенденция к скольжению формы.
В случае, если объект содержит поверхность и форму, оба с указанным параметром трения, будет использоваться только параметр формы. |
Restitution | Коэффициент восстановления формы. Определяет упругость формы при столкновении.
В случае, если объект содержит поверхность и форму, оба с указанным параметром восстановления, будет использоваться только параметр формы. |
Position | Положение формы в координатах тела (body). |
Rotation | Вращение формы в координатах тела (body). |
Physics Intersection mask | Битовая маска формы Physics Intersection. |
Collision mask | Битовая маска столкновения формы. Эта маска используется для указания столкновений формы с другими. |
Exclusion mask | Битовая маска исключения формы. Эта маска используется для предотвращения столкновения формы с другими. |
Наш видеоурок по физике содержит обзор параметров формы и разъяснения по использованию Exclusion и Collision masks .
Добавление формы#
Чтобы добавить форму через UnigineEditor , выполните следующие шаги:
- Откройте окно World Hierarchy
- Выберите объект , которому вы хотите присвоить физическую форму.
- Перейдите на вкладку Physics в Parameters window и назначьте физическое тело выбранному объекту: твердое тело (rigid), Ragdoll-тело или тело-пустышка (dummy) .
- В разделе Shapes ниже выберите подходящий тип формы и щелкните Add.
- Установите необходимые параметры формы .
Вы можете включить визуализацию форм, выбрав панель Helpers → элемент Physics → параметр Shapes (Visualizer должен быть включен).
Сфера#
сфера - самая простая и быстрая форма, поскольку у нее только один параметр: радиус. Для сферических форм доступно постоянное обнаружение столкновений. Следовательно, избегается прохождение через другие объекты даже при движении с высокой скоростью.
Использование сферической формы для любой произвольной сетки гарантирует, что ее столкновения всегда будут обнаруживаться.
Чтобы форма соответствовала вашему объекту, вы можете настроить Радиус сферы.
Капсула#
Капсула также представляет собой форму очень быстрого столкновения с возможностью непрерывного обнаружения столкновения. Капсулы удобны для приближения удлиненных предметов (колонн и т.д.), А также персонажей-гуманоидов, поскольку позволяют им плавно подниматься и спускаться по лестнице, не спотыкаясь на каждой ступеньке (если ступеньки не слишком высокие). Это также гарантирует, что конечность персонажа не застрянет где-нибудь неожиданно.
Чтобы форма соответствовала вашему объекту, вы можете настроить радиус и высоту капсулы.
Цилиндр#
Цилиндр можно использовать для приближения удлиненных форм с плоскими концами (например, валов, пилонов и т. д.). Он похож на форму коробки.
Чтобы форма соответствовала вашему объекту, вы можете отрегулировать радиус и высоту цилиндра.
Куб#
Куб можно использовать для аппроксимации объема различных объектов. подходит для отделки стен, дверей, лестниц, деталей механизмов, кузовов автомобилей и многого другого. Длину формы коробки в каждом измерении можно выбрать произвольно.
Чтобы форма соответствовала вашему объекту, вы можете отрегулировать размер поля по каждой оси: Size X, Size Y, Size Y.
Выпуклая оболочка (Convex hull)#
Convex hull - самая медленная из всех форм и используется для объектов сложной геометрии. Созданная форма всегда будет выпуклой, то есть отверстия и полости сетки игнорируются при создании выпуклой оболочки. Вместо этого они включены в объем формы. Выпуклая форма - это наименьшая форма, которая может охватывать вершины приближенной сетки.
Для создания выпуклой оболочки укажите значение ошибки аппроксимации:
Параметр Approximation error позволяет уменьшить количество вершин создаваемой формы. Простые и грубые выпуклые оболочки с небольшим количеством вершин обрабатываются быстрее, поэтому рекомендуется сохранять количество вершин как можно меньшим.
- При значении 0 форма точно дублирует сетку; весь его объем прилагается.
- Чем выше значение, тем меньше вершин в созданной форме, но тем больше деталей пропускается.
Ошибка аппроксимации = 0
|
Ошибка аппроксимации = 0,1
|
Автогенерируемая форма#
Чтобы приблизить сложный вогнутый объект и исключить полости из его объема, используйте набор автоматически сгенерированных выпуклых оболочек .
Чтобы добавить автоматически сгенерированный набор форм, укажите следующие параметры:
Recursion depth определяет степень декомпозиции сетки. Если указан 0 или отрицательное значение, будет создана только одна форма. Чем выше значение, тем больше выпуклых форм будет создано
Approximation error позволяет уменьшить количество вершин генерируемых форм. Простые и грубые выпуклые оболочки с небольшим количеством вершин обрабатываются быстрее, поэтому рекомендуется сохранять количество вершин как можно меньшим.
- При значении 0 форма точно дублирует сетку; весь его объем прилагается.
- Чем выше значение, тем меньше вершин в созданной форме, но тем больше деталей пропускается.
Merging threshold определяет порог объема для слияния выпуклых форм после разложения и может использоваться для уменьшения количества генерируемых форм: чем выше значение, тем меньше выпуклые формы будут созданы.