Документация/Статьи/Обзор редактора физических моделей

From NeoAxis 3D Engine Wiki

Jump to: navigation, search
Перейти на уровень выше

Contents

Обзор

Редактор физических моделей входит в состав редактора ресурсов, предназначен для создания физических моделей. Физические модели предназначены для настройки физического представления объектов в мире. Включают в себя набор физических тел, сочленений и моторов.

Редактор физических моделей

Режим тестирования (Test Mode)

Редактор физических моделей позволяет тестировать созданные модели непосредственно в окне редактора. Перед запуском режима тестирования необходимо войти в режим редактирования .physics файла, с помощью двойного щелчка по файлу в окне дерева ресурсов. Далее нажать на кнопку Test в нижнем правом углу экрана, в окне свойств.

Кнопка 'Test

В режиме тестирования можно включить отображение контактов. Для этого служит опция Show Contacts. Кроме того, в редакторе имеется опция Wireframe mode, позволяющая отображать объекты в виде сетки.

Wireframe mode режима тестирования

Создание объектов

Существует три типа объектов для построения физической модели:

  • Тела (Bodies),
  • Сочленения (Joints),
  • Моторы (Motors).

Тела (Bodies)

Тело — это цельный объект (твердое тело), на который могут действовать силы. Тело может состоять из одного и более примитивов (Shapes), неподвижных относительно друг-друга в рамках одного тела. Каждое тело обладает массой и характеризуется положением в пространстве.

Создание тела

Существует два способа создания тела. Для перехода в режим редактирования нужно дважды кликнуть на файле ресурса в окне дерева ресурсов или кликнуть по нему правой кнопкой мыши и выбрать пункт Edit в контекстном меню. В режиме редактирования нужно нажать правой кнопкой в любом месте рабочего окна и выбрать во всплывающем меню пункт Create Body.

Добавление тела.

Другой способ — нажать на кнопку "..." в свойстве Bodies окна свойств.

Добавление тела.

После этого появится окно редактора набора тел (Body Collection Editor), с помощью которого можно настроить тела.

Добавление тела.

Свойства тел

Параметр Описание
_General
CCD Включить/выключить непрерывное отслеживание столкновений (Continuous Collision Detection).
EnableGravity Включить/выключить воздействие гравитации на тело.
Name Параметр задает уникальное имя для физического тела, которое позволяет его однозначно идентифицировать его среди других тел.
Shapes Список примитивов тела. По кнопке "..." можно настроить примитивы с помощью окна настройки примитивов. Работа с примитивами и описание их свойств приведено ниже.
Sleepiness Порог чувствительности тела, ниже которого он впадает в "спящее" состояние. В спящем состоянии тело полностью неподвижно и не требуется времени на расчет физическим движком.
Static Включить/выключить статичное состояние объекта. Если опция включена, то на объект не действуют никакие силы. Его нельзя сдвинуть.
Damping
AngularDamping Коэффициент затухания угловой скорости. Чем выше значение, тем быстрее затухает угловая скорость тела.
LinearDamping Уровень затухания линейной скорости. Чем больше значение, тем быстрее происходит затухание.

Примечание: затухание (Damping) в физической модели не связано с трением (friction), т.к. затухание происходит вне зависимости от взаимодействия с внешними телами.

Mass
CenterOfMassAuto Включить/выключить автоматическое вычисление центра масс. Данный параметр используется только в PhysX.
Mass Суммарная масса примитивов тела. Смотрите параметр MassMethod для настройки способа расчета массы.
MassMethod Метод подсчета массы объекта. Предлагается выбрать между вычислением массы через плотность (ByDensity) или вручную (Manually). Смотрите параметр Density (плотность) примитивов.
PhysX
PhysX_SolverPositionIterations Число итераций физического движка для расчета изменения положения тела. Используется только в PhysX.
PhysX_SolverVelocityIterations Число итераций физического движка для расчета изменения скорости тела. Используется только в PhysX.
Transform
CenterOfMassPosition Положение центра масс тела.
CenterOfMassRotation Поворот центра масс тела.
IntertiaTensorFactor Множитель для вычисления тензора инерции тела. Используется только в PhysX.
Position Координаты тела в данной физической модели.
Rotation Поворот тела в данной физической модели.

Добавление примитивов к телу

Быстрый способ добавить к телу примитив (Shape) — выбрать тело, нажать правой кнопкой мыши в любой области рабочего окна и выбрать тип добавляемого примитива во всплывающем меню.

Добавление примитива к телу.

Другой способ добавления примитива заключается в использовании окна настройки списка примитивов. Чтобы его открыть, нужно нажать кнопку "..." напротив поля Shapes в окне свойств.

Добавление примитива к телу.
Добавление примитива к телу.

Для создания нового примитива служит кнопка Add. При добавлении примитива выбирается его тип. Доступны следующие типы примитивов:

  • Параллелепипед (BoxShape),
  • Сфера (SphereShape),
  • Капсула (CapsuleShape),
  • Меш (MeshShape).

Чтобы использовать примитив соответствующий 3D модели, необходимо выбрать тип примитива MeshShape и в его свойствах указать нужный файл с 3D моделью через параметр MeshName. Следует учитывать, чем более детализирована 3D модель, тем больше требуется процессорного времени для просчета физики. В некоторых случаях хорошим решением будет использование низко детализированного варианта меша в качестве физической модели.

Параметры примитива

Общие параметры для всех типов примитивов:

Параметр Описание
General
Contact Включить/выключить возможность взаимодействия данного примитива с другими примитивами. Если опция выключена, то примитив будет проникать сквозь другие объекты.
Name Имя примитива.
ShapeType Тип примитива (не редактируется). Может иметь одно из следующих значений: Box, Sphere, Capsule или Mesh.
Material
Density Плотность.
DynamicFriction Коэффициент трения в случае, когда соприкасающиеся тела двигаются относительно друг друга. Диапазон значений лежит от 0 до 1. Чем выше значение, тем выше сила трения.
Hardness Твердость. Определяет поглощение энергии материалом при столкновении. Диапазон значений от 0 до 1. Чем выше значение, тем выше твердость объекта (тем меньше поглощение энергии).
MaterialName Имя материала. Параметр позволяет выбрать один из заранее настроенных материалов. Доступные материалы: Metal (метал), Wood (дерево), Rubber (резина), Ice (лёд), Snow (снег), Grass (трава), Dirt (грязь), Tamac (асфальт) и материал по умолчанию. Настройки материалов находятся в файле "Data\Definitions\PhysicsSystem.config". Изменив файл, можно добавить новые материалы.
Restitution Коэффициент упругости примитива. Допустимые значения от 0 до 1. Чем выше значение, тем более упругим является объект.
StaticFriction Коэффициент трения для случая, когда соприкасающиеся тела покоятся относительно друг друга. Диапазон значений от 0 до 1. Чем выше значение, тем выше сила трения.
Special
SpecialLiquidDensity Плотность в воде. Параметр используется при взаимодействии объекта с водной поверхностью.
VehicleDrivableSurface Включает/выключает возможность автомобиля передвигаться по данному примитиву.
Transform
Position Положение примитива относительно центра физического тела.
Rotation Поворот примитива относительно центра физического тела.
Параметры параллелепипеда
Параллелепипед
Параметр Описание
Box
Dimensions Габариты. Задает размер параллелепипеда.
Параметры сферы
Сфера
Параметр Описание
Sphere
Radius Радиус сферы.
Параметры капсулы
Капсула
Параметр Описание
Capsule
Length Длина капсулы.
Radius Радиус закругления капсулы.
Параметры меша
Выпуклые оболочки

Специальные параметры меша делятся на две категории: параметры меша (Mesh) и параметры разбиения меша на выпуклые оболочки (ConvexHullDecomposition). Разбиение меша на выпуклые оболочки упрощает просчет физической модели.

Параметр Описание
ConvexHullDecomposition
ConvexHullDecompositionMaxTriangles Максимальное общее количество треугольников в выпуклой оболочке. Определяет количество треугольников, которое будет использовано для создания выпуклых оболочек меша. Параметр используется только в мешах типа ConvexHullDecomposition.
ConvexHullDeoompositionMaxVerticesPerConvexHull Максимальное число вершин в каждой из выпуклых оболочек. Определяет количество вершин, которое будет использовано для создания выпуклой оболочки меша. Параметр используется только в мешах типа ConvexHullDecomposition.
Mesh
MeshName Файл с 3D моделью.
MeshScale Масштабирование меша.
MeshType Тип меша. Предлагается выбрать между TriangleMesh (меш), ConvexHull (выпуклая оболочка) и ConvexHullDecomposition (разбиение меша на выпуклые оболочки). Тип TriangleMesh может использоваться только для статичных объектов. Для динамических объектов необходимо использовать ConvexHull или ConvexHullDecomposition. В последнем случае меш будет автоматически разбит в набор выпуклых оболочек.

Сочленения (Joints)

Сочленения (шарниры) используются для соединения двух тел.

Сочленения (Joints) между телами.

Создание сочленения

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

Добавление сочленения между двумя телами.

Виды сочленений

Тип сочленения Описание Пример
Hinge Joint (сгибание) Тела соединяются с одной степенью свободы вращения. Расстояние между каждым из двух тел и центром сочленения фиксированное.
PhysicsModelEditor 016.jpg
Universal Joint (универсальное сочленение) Тела соединяются с двумя степенями свободы вращения. Расстояние между каждым из двух тел и центром сочленения фиксированное.
PhysicsModelEditor 017.jpg
Ball Joint (шаровое сочленение) Тела соединяются с тремя степенями свободы вращения. Расстояние между каждым из двух тел и центром сочленения фиксированное.
PhysicsModelEditor 018.jpg
Slider Joint (скольжение) Тела могут перемещаться относительно друг друга вдоль одной оси, без вращения.
PhysicsModelEditor 019.jpg
Hinge2 Joint (сгибание-2) Данный тип сочленения поддерживается только в физическом движке ODE и требует, чтобы оба тела не были статичными.

Работает также как универсальное сочленение, с отличием в ориентации одной оси. Две степени свободы вращения.

PhysicsModelEditor 020.jpg
Fixed Joint (фиксированное сочленение) Не позволяет телам вращаться или перемещаться относительно друг друга.
PhysicsModelEditor 021.jpg

Параметры сочленений

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

Параметры сочленений
Параметр Описание
Break
BreakMaxForce Сила разрыва. Определяет максимальную силу, необходимую для его разрыва. Значение 0 означает неразрывное сочленение.
BreakMaxTorque Вращающий момент разрыва. Определяет максимальный вращающий момент, необходимый для его разрыва. Значение 0 означает неразрывное сочленение.
General
Anchor Привязка. Положение сочленения в пространстве, задается тремя координатами.
Axis1 Первая ось.
Axis2 Вторая ось.
Body1 Первое тело задействованное в сочленении. Параметр не редактируется.
Body2 Второе тело задействованное в сочленении. Параметр не редактируется.
ContactsEnabled Включить/выключить контактирование тел между собой, которые связаны данным сочленением.
Name Уникальное имя для данного сочленения.

Параметры осей:

Параметр Описание
Direction Направление оси. Задает направляющий вектор для оси. Диапазон значений от 0 до 1 для осей X, Y или Z. В случае, если введен недопустимый параметр (например: 1 0 1), редактор сообщит об этом при запуске симуляции.
LimitHigh Верхний предел поворота оси. Ограничивает максимальный угол поворота по данной оси.
LimitLow Нижний предел поворота оси. Ограничивает минимальный угол поворота по данной оси.

Примечание: Верхний предел должен превосходить нижний. Примечание: Данные значения будут работать, только, если флаг LimitsEnabled установлен в значение True.

LimitsDamping Коэффициент затухания упругости пределов оси. Учитывается лишь в случае, когда коэффициент упругости (LimitsSpring) больше 0.
LimitsEnabled Включить/выключить ограничения для оси. Если выбрано значение True, то будут учитываться верхний и нижний пределы изгибов для данной оси. Если выбрано значение False, то параметры LimitHigh и LimitLow не учитываются.
LimitsRestitution Определяет коэффициент отдачи при достижении верхнего или нижнего предела изгиба оси. Если значение равно 1, то тело отскакивает обратно от предела с сохранением скорости. Если значение равно 0, то тело останавливается намертво.
LimitsSpring Определяет коэффициент упругости пределов. Если значение больше 0, то пределы становятся мягче. Т.е. пружина возвращает тело к пределу.

Моторы (Motors)

Моторы — это объекты, создающие силовое воздействие на тела. Существует три типа моторов:

  • Attractor Motor (притяжение). Мотор создает силу притяжения между двумя телами, заставляющую их двигаться навстречу.
  • Geared Motor (роторный двигатель). Этот тип мотора создается для сочленения и производит силу крутящего момента.
  • Servo Motor (шаговый двигатель). Этот тип мотора создается для сочленения. Двигатель применяет к телу силу соответствующего направления, стараясь сохранять заданный угол поворота для выбранной оси сочленения.


Создание мотора

PhysicsModelEditor 023.jpg

Для создания притягивающего мотора (Attractor Motor) нужно выбрать два тела и нажать правой кнопкой в любой области рабочего окна. Далее выбрать пункт Create Attractor Motor из контекстного меню.

PhysicsModelEditor 024.jpg

Для создания роторного (Geared) или шагового (Servo) мотора, требуется выбрать сочленение и нажать правой кнопкой в любой области рабочего окна. Затем выбрать нужный мотор в контекстном меню.

У каждого мотора имеется собственный набор параметров.

Притягивающий мотор

Параметры притягивающего мотора
Параметр Описание
General
ApplyForceToBody1 Включить/выключить применение силы к первому телу.
ApplyForceToBody2 Включить/выключить применение силы ко второму телу.
Body1 Имя первого задействованного тела. Параметр не редактируется.
Body2 Имя второго задействованного тела. Параметр не редактируется.
Enabled Включить/выключить мотор.
Exponent Коэффициент затухания. Параметр определяет зависимость силы взаимодействия тел от расстояния. Чем ниже значение параметра, тем выше сила на определенном расстоянии.
Name Уникальное имя для данного мотора.
Strength Сила действия мотора. Чем выше значение, тем больше сила взаимодействия между телами.

Роторный двигатель

Параметры роторного двигателя
Property name Description
General
ApplyForceToBody1 Включить/выключить применение силы к первому телу.
ApplyForceToBody2 Включить/выключить применение силы ко второму телу.
Enabled Включить/выключить мотор.
Joint Имя сочленения, к которому присоединен мотор. Параметр не редактируется.
JointAxis Имя оси, на которую действует мотор. Параметр не редактируется.
MaxTorque Максимальное значение вращающего момента, который мотор может передать на сочленение.
MaxVelocity Максимальная скорость, которую мотор может передать на сочленение.
Name Уникальное имя мотора.
Throttle Направление и стартовое значение силы. Значения варьируются от -1 до 1. 1 означает вращение по часовой стрелке, -1 — вращение против часовой стрелки, 0 — отсутствие действующей силы.

Шаговый двигатель

Параметры шагового двигателя
Параметр Описание
General
ApplyForceToBody1 Включить/выключить применение силы к первому телу.
ApplyForceToBody2 Включить/выключить применение силы ко второму телу.
Enabled Включить/выключить мотор.
Joint Имя сочленения, к которому присоединен мотор. Параметр не редактируется.
JointAxis Имя оси, на которую действует мотор. Параметр не редактируется.
Name Уникальное имя мотора.
Servo
DesiredAngle Угол, на который мотор стремится повернуть тело. По достижении требуемого угла будет применяться сила, необходимая, чтобы удерживать тело в данном положении.
MaxTorque Максимальное значение вращающего момента, который мотор может передать на сочленение.
MaxVelocity Максимальная скорость, которую мотор может передать на сочленение.
ThresholdAcceleration Предельное ускорение, при котором необходимо уменьшение скорости.

Создание и редактирование .physics файла

Данный пример демонстрирует создание нового .physics файла с моделью молота, бьющего по шару.

Для создания нового .physics файла, нажмем правой кнопкой мыши на папке в окне ресурсов, в которую мы хотим поместить физическую модель. Выберем пункт New в контекстном меню, а затем пункт Physics Model.

Создание нового .physics файла.

В появившемся окне создания нового ресурса введем название физической модели и нажмем кнопку Next.

Создание нового .physics файла.

В окне ресурсов перейдем в режим редактирования, дважды кликнув по созданному файлу.

Новая физическая модель.

Созданная модель уже содержит тело с примитивом типа Box. Его можно оставить или удалить. В нашем уроке мы начнем с пустой модели. Для начала нам потребуется создать плоскую поверхность из примитива типа Box (см. Создание тел).

Размер примитива удобно изменять с помощью инструмента трансформации объектов в режиме масштабирования. 

Изменим значение параметра Static тела на True, чтобы оно не проваливалось.

Основание для физической модели.

Теперь создадим новое тело с примитивом Sphere и разместим прямо над плоскостью.

Шар на плоскости.

Настроим параметры сферы как показано на следующем скриншоте:

PhysicsModelEditor 033.jpg

Далее разместим статичное тело над существующими объектами. Пусть это будет Box с включенным параметром Static.

Статичный Box над объектами.

Рядом создадим другое тело из двух примитивов типа Box и соорудим из них простой молот. Изменим параметр плотность (Density) каждого примитива в теле молота в значение 1000.

Молот.

Выберем два последних созданных тела (Box над плоскостью и молот) и соединим их с помощью Hinge Joint — сочленения с одной степенью свободы. Кроме того, нам необходимо повернуть и подвинуть молот. Тем самым мы отведем его в сторону для того, чтобы ему было куда опускаться.

Выделить два тела можно, кликнув по ним левой кнопкой мыши с нажатой клавишей Shift.
Молот и сочленение.

Теперь можно запустить режим тестирования, чтобы увидеть, как тяжелый молот падает, и, набирая скорость, обрушивается на шар.

Молот бьет по шару.

Увидеть больше примеров физических моделей можно в папке "Data\_ResourceEditorSamples\Physics".

Настройка редактора

Для настройки редактора физики, необходимо нажать кнопку Options на панели инструментов или выбрать одноименный пункт во вкладке Tools главного меню. Затем следует выбрать вкладку Physics Model в появившемся окне настроек.

Настройка редактора физической модели
Параметр Описание
General
Background Color Цвет фона рабочего окна. Цвет фона виден в том случае, если не используется Sky Box.
Grid Height Высота сетки в пространстве (Y-координата плоскости сетки).
Show Axes Включить/выключить отображение координатных осей. Может пригодится для позиционирования объектов в пространстве.
Show Grid Включить/выключить отображение сетки. Сетку удобно использовать для масштабирования объектов. В случае редактора физической модели, сетка — это также своеобразный пол, предотвращающий падение объектов.
Sky Box Skybox (небо), отображаемое на фоне редактора.