Коллизионные формы (Shapes)
В то время как тело (body) имитирует различные типы физического поведения, форма (shape) представляет собой объем пространства, занимаемого физическим телом. Физически моделируемый объект обычно имеет одно тело и одну или несколько форм, которые позволяют объектам сталкиваться друг с другом (поэтому формы часто называют коллизионными формами). Объекты с формой также падают под действием силы тяжести, отскакивают от статичных поверхностей или скользят по ним. Тело, которому не назначена единственная форма, ведет себя как фиктивное тело Dummy, которое может соединяться с другими телами с помощью сочленений, но не сталкивается и невосприимчиво к гравитации.
Основные типы форм следующие:
- Простые примитивы. Они очень быстры и эффективны по памяти. По возможности следует использовать простые примитивы.
- Сфера (использует непрерывное обнаружение столкновений)
- Капсула (использует непрерывное обнаружение столкновений)
- Цилиндр
- Куб
- Сложные коллизионные формы, состоящие из треугольников. Эти формы медленнее и требуют больше памяти.
- Выпуклый многогранник
- Набор автоматически сгенерированных выпуклых многогранников
Простые примитивы упрощают вычисление столкновений, сохраняя при этом высокую производительность и приемлемую точность. Выпуклые многогранники обеспечивают более высокую точность, однако непрерывное обнаружение столкновений недоступно для этого типа формы. Следовательно, выпуклые многогранники не стоит использовать для быстро движущихся объектов.
Число форм должно быть как можно меньше. В противном случае тяжелые физические вычисления снизят производительность.
Форма (shape) не может быть создана без тела (body) и не имеет собственной позиции в мировых координатах. Она всегда присваивается телу и позиционируется относительно него.
Дополнительная информация#
Программная реализация:
- Класс Shape
- Класс ShapeSphere
- Класс ShapeCapsule
- Класс ShapeCylinder
- Класс ShapeBox
- Класс ShapeConvex
- Фрагмент видеоурока по физике, иллюстрирующий концепцию формы.
Параметры формы#
Все формы независимо от их типа имеют следующие общие параметры:
Enabled | Флаг, указывающий, включена ли форма. |
Continuous | Флаг, указывающий, включено ли непрерывное обнаружение столкновений для формы. Непрерывное обнаружение столкновений доступно только для сфер и капсул. |
Mass | Масса формы. Изменение массы влияет на плотность, которая рассчитывается путем деления массы на объем формы. В случае, если телу присвоено несколько форм (например, набор выпуклых многогранников) |
Density | Плотность формы. Изменение плотности влияет на массу, которая рассчитывается путем умножения объема формы на плотность. |
Friction | Коэффициент трения формы. Определяет шероховатость поверхности формы. Чем выше значение, тем меньше тенденция к скольжению формы.
В случае, если объект содержит поверхность и форму, и для них обеих задан параметр трения, будет использоваться только параметр формы. |
Restitution | Коэффициент восстановления формы. Определяет упругость формы при столкновении.
В случае, если объект содержит поверхность и форму, и для них обеих задан параметр восстановления, будет использоваться только параметр формы. |
Position | Положение формы в координатах тела (body). |
Rotation | Вращение формы в координатах тела (body). |
Physics Intersection mask | Битовая маска формы для определения Physics Intersection. |
Collision mask | Битовая маска столкновений формы. Эта маска используется для указания столкновений формы с другими. |
Exclusion mask | Битовая маска исключений формы. Эта маска используется для предотвращения столкновения формы с другими. |
Наш видеоурок по физике содержит обзор параметров формы и разъяснения по использованию масок Exclusion и Collision.
Добавление формы#
Чтобы добавить форму через UnigineEditor, выполните следующие шаги:
- Откройте окно World Hierarchy
- Выберите объект, которому вы хотите присвоить физическую форму.
- Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту: твердое тело (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 определяет порог объема для слияния выпуклых форм после декомпозиции и может использоваться для уменьшения количества генерируемых форм: чем выше значение, тем меньше выпуклых форм будут создано.