Документация/Статьи/Обзор редактора физических моделей
From NeoAxis Engine Wiki
| Language: | Status: | Approved |
Contents |
Обзор
Редактор физических моделей входит в состав редактора ресурсов и предназначен для создания, редактирования и тестирования физических моделей. Он может быть использован в вашем приложении для реализации физических взаимодействий между объектами.
Здесь вы можете найти базовую информацию о поддерживаемых в NeoAxis физических движках.
Настройка
Для настройки редактора физики, нажмите на кнопку Options на панели инструментов, или во вкладке Tools верхнего меню. Вы увидите окно настроек внешнего вида редактора физической модели.
В свитке General пять параметров:
| Параметр | Описание |
|---|---|
| Background Color | Позволяет задать цвет фона рабочего окна. Вы можете ввести значения цвета в формате RGBA (Красный, Зеленый, Синий, Прозрачность)(Каждый цвет в диапазоне 0-255) или воспользоваться инструментом для выбора цвета.
Примечание - Цвет фона виден в том случае, если не используется skybox. |
| Grid Height | Позволяет задать высоту сетки в пространстве. |
| Show Axes | Значение True позволяет включить отображение координатных осей. Может пригодится для позиционирования объектов в пространстве. |
| Show Grid | Значение True позволяет увидеть сетку. Размер одной клетки по умолчанию равен 1 метру, удобно использовать для масштабирования объектов. В случае редактора физической модели, сетка - это так-же своеобразный пол, предотвращающий падение объектов. |
| Sky Box | Используйте этот параметр, чтобы сменить skybox (небо), отображаемое на фоне редактора. |
По завершении настройки редактора нажмите кнопку OK, чтобы сохранить настройки, или Cancel, для отмены внесенных изменений.
Режим симуляции (Simulation Mode)
Редактор физической модели позволяет тестировать созданные модели в режиме симуляции. Перед запуском режима симуляции необходимо войти в режим редактирования .physics файла, с помощью двойного щелчка по .physics файлу в окне Ресурсов (Resources). Далее нажмите на кнопку Simulate в нижнем-левом углу экрана, в окне Свойств (Properties).
В режиме симуляции вы можете наблюдать количество Контактов (Контакт - касание между двумя примитивами (Shapes)).
Создание объектов
Существует три основополагающих категории объектов для построения физической модели:
- Тела (Bodies)
- Сочленения (Joints)
- Моторы (Motors)
Ниже вы найдете инструкции по созданию простой физической модели.
Тела (Bodies)
Тело - это цельный объект (твердое тело), на который может действовать одна или несколько сил. Тело может состоять из одного и более примитивов (Shapes), неподвижных относительно друг-друга в рамках одного тела. Каждое тело имеет параметры массы и свое расположение в пространстве.
Создание тела
Существует два способа создания тела. В обоих случаях для создания тела необходимо открыть .physics файл для редактирования. (Двойной клик на файле в окне Ресурсов или выделение правой кнопкой мыши и выбор пункта Edit). В режиме редактирования нажмите правой кнопкой в любом месте рабочего окна и выберите во всплывающем меню Create Body.
Следующий способ - нажать на иконку Browse, обозначенную тремя точками "[...]" в свитке Bodies в окне свойств.
Вы увидите окно редактора групп тел (Body Collection Editor), с помощью которого вы можете добавить новые элементы. Так-же редактор позволяет удалить тела или изменить порядок нумерации.
Элемент на картинке выше, в левом списке - это, непосредственно тело, и в правом списке его основные параметры:
Свойства тел
| Параметр | Описание |
|---|---|
| CCD | В значении True включает непрерывное отслеживание столкновений (Continuous Collision Detection). |
| EnableGravity | В значении True применяет к телу силу гравитации, направленную вниз. Если параметр установлен в значение False тело продолжает оставаться на месте (пока к нему не будет приложена внешняя сила). |
| Name | Параметр задает уникальное имя для физического тела, которое позволяет отличить его от остальных тел. |
| Shapes | Параметр позволяет редактировать группы примитивов (Shape Collection Editor) и присвоить примитив (Shape) данному телу. Описание примитивов приведено в данной статье ниже. |
| Sleepiness | Параметр определяет уровень затухания, после которого все силы, действующие на тело будут приравнены к нулю. Если установить значение в 0, то физические взаимодействия будут просчитываться даже после полного затухания сил, если параметр равен еденице, то движок будет пренебрегать малыми силами. |
| AngularDamping | Уровень затухания со временем угловой скорости. Чем больше значение, тем быстрее происходит затухание. |
| LinearDamping | Уровень затухания со временем линейной скорости. Чем больше значение, тем быстрее происходит затухание.
Заметка: Затухание (Damping) в физической модели не означает трение (friction), т.к. затухание происходит вне зависимости от взаимодействия с внешними телами. |
| Mass | Параметр не редактируется непосредственно (см. параметр Density (плотность) примитивов). Указывает суммарную массу всех примитивов данного тела. |
| Position | Состоит из трех параметров соответствующих осям X, Y и Z и описывает расположение тела в данной физической модели. |
| Rotation | Состоит из трех параметров соответствующих осям X, Y и Z и описывает углы поворота тела в данной физической модели. |
Добавление примитивов (Shapes) к телу
Быстрый способ добавить к телу примитив - выделить тело, нажать правой кнопкой в любой области рабочего окна и выбрать тип добавляемого примитива во всплывающем меню.
Второй способ заключается в использовании редактора групп примитивов (Shape Collection Editor). Чтобы его открыть нажмите на иконку Browse возле вкладки Shapes в окне свойств (Properties) или Редактора Групп Тел при создании тела.
Нажав на кнопку Add вы создадите новый физический примитив. Нажав на маленькую стрелку, являющуюся частью кнопки Add вы можете выбрать тип создаваемого примитива. Доступные типы примитивов:
- Коробка (BoxShape)
- Сфера (SphereShape)
- Капсула (CapsuleShape)
- Меш (MeshShape)
- Колесо (PhysXWheelShape) (поддерживается только в движке nVidia PhysX, выбрать физический движок можно в конфигураторе (Configurator.exe))
Чтобы использовать примитив соответствующий вашей 3d модели, выберите MeshShape и в свойствах в свитке Mesh выберите параметр MeshName, откроется окно выбора ресурсов, в котором необходимо выбрать необходимый меш (файл .mesh). Следует учитывать, что, чем более детализированным является меш, тем больше потребует процессорного времени просчет его физики. Хорошим решением будет использование низко детализированного варианта меша для использования в физической модели.
Параметры примитива
Список параметров, которые можно установить для каждого примитива:
| Параметр | Описание |
|---|---|
| Contact | В значении True, примитив будет вступать во взаимодействие с другими примитивами. Если выбрать значение False, это позволит примитиву проникать сквозь другие объекты. |
| Name | Поле позволяет ввести уникальное имя для данного примитива. |
| ShapeType | Отображает тип примитива. Может иметь одно из значений: Box, Sphere, Capsule, Mesh или PhysXWheel и не редактируется вручную. |
| Bounciness | Параметр задает упругость тела. Допустимые значения от 0 до 1, чем выше значение, тем выше упругость тела. |
| Density | Плотность. Влияет на зависимость массы тела от его объема. Диапазон значений от 0(наименьшая плотность) до бесконечности. |
| DynamicFriction | Параметр задает силу трения для случая, когда соприкасающиеся тела движутся относительно друг-друга. Диапазон значений от 0 до 1, чем выше значение, тем выше сила трения. |
| Hardness | Твердость. Определяет поглощение материалом энергии при столкновении. Диапазон значений от 0 до 1, чем выше значение, тем выше твердость объекта (меньше поглощение энергии). |
| MaterialName | Параметр позволяет выбрать один из заранее настроенных материалов. Доступные материалы: Металл (Metal), Дерево (Wood), Резина (Rubber) и Лёд (Ice). Вы можете задать настройки новых материалов в файле \Data\Definitions\PhysicsSystem.config. |
| StaticFriction | Параметр задает силу трения для случая, когда соприкасающиеся тела покоятся относительно друг-друга. Диапазон значений от 0 до 1, чем выше значение, тем выше сила трения. |
| SpecialLiquidDensity | Плотность в воде. Параметр используется при взаимодействии объекта с водной поверхностью (Water Plane). Параметр определяет - будет ли тело плавать в воде или утонет. При значении 0 объект утонет, значение 1 позволит ему плавать. |
| Position | Состоит из трех параметров соответствующих осям X, Y и Z и описывает расположение примитива в данном физическом теле. |
| Rotation | Состоит из трех параметров соответствующих осям X, Y и Z и описывает углы поворота примитива в данном физическом теле. |
Сочленения (Joints)
Сочленения используются для объединения двух тел и определения характера взаимодействия между ними. Невозможно создать сочленение только для одного или более чем двух тел.
Создание сочленения
Для создания сочленения - сперва выберите два соединяемых тела, затем кликните правой кнопкой мыши в области рабочего окна и выберите тип создаваемого сочленения из всплывающего меню. Для выбора двух и более тел можно воспользоваться клавишей Shift.
Виды сочленений
Ниже приведен список доступных сочленений с комментариями и примерами:
| Тип сочленения | Описание | Пример |
|---|---|---|
| Hinge Joint (сгибание) | Тела соединяются с одной степенью свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное. | |
| Universal Joint (универсальное сочленение) | Тела соединяются с двумя степенями свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное. | |
| Ball Joint (шаровое сочленение) | Тела соединяются с тремя степенями свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное. | |
| Slider Joint (скольжение) | Тела могут перемещаться относительно друг-друга вдоль одной оси, без вращения. | |
| Hinge2 Joint (сгибание-2) | Данный тип сочленения поддерживается только в физическом движке ODE и требует, чтобы оба тела не были статичными.
Работает так-же как универсальное сочленение, с отличием в ориентации одной оси. Две степени свободы вращения. |
|
| Fixed Joint (фиксированное сочленение) | Не позволяет телам вращаться или перемещаться относительно друг-друга. |
Параметры сочленений
Параметры одинаковы для любого типа сочленения, отличие составляет только количество настраиваемых осей.
| Параметр | Описание |
|---|---|
| BreakMaxForce | Сила разрыва. Поле определяет максимальную силу, приложенную к сочленению требуемую для его разрыва. Значение 0 означает неразрывное сочленение. |
| BreakMaxTorque | Вращающий момент разрыва. Поле определяет максимальный вращающий момент, приложенный к сочленению требуемый для его разрыва. Значение 0 означает неразрывное сочленение. |
| Anchor | Привязка. Расположение сочленения в пространстве, состоит из трех составляющих, соответствующих осям X, Y и Z. |
| Axis Direction | Направление оси. Задает направляющий угол для оси. Диапазон значений от 0 до 1 для осей X, Y или Z. В случае, если введен недопустимый параметр (например: 1 0 1), редактор сообщит об этом при запуске симуляции. |
| Axis LimitHigh | Верхний лимит оси. Ограничивает максимальный угол поворота по данной оси. |
| Axis LimitLow | Нижний лимит оси. Ограничивает минимальный угол поворота по данной оси.
Примечание: Верхний лимит должен превосходить нижний. Примечание: Данные значения будут работать, только, если флаг Axis LimitsEnabled установлен в значение True |
| Axis LimitsBounciness | Ограничивает упругость при взаимодействии соединенных тел друг с другом. |
| Axis LimitsEnabled | В значении True включает верхний и нижний пределы изгибов для данной оси. Если установлен в значение False, то параметры Axis LimitHigh и Axis LimitLow не берутся во внимание. |
| Axis LimitsHardness | Параметр определяет коэффициент отдачи при достижении верхнего или нижнего предела изгиба оси. |
| Body1 | Отображает первое тело соединенное данным сочленением. Параметр не редактируется вручную. |
| Body2 | Отображает второе тело соединенное данным сочленением. Параметр не редактируется вручную. |
| ContactsEnabled | В значении True позволяет сочлененным телам контактировать друг с другом. Если установить параметр в False, то сочлененные тела смогут свободно проникать друг в друга, но не в другие тела. |
| Name | Поле позволяет задать уникальное имя для данного сочленения. |
Моторы (Motors)
Моторы это объекты, создающие силовое воздействие на тела. Существует три типа моторов:
- Attractor Motor (притяжение) - единственный тип мотора, создаваемый непосредственно между телами. Он создает силу притяжения между двумя телами, заставляющую их двигаться навстречу (кроме случая, когда присутствуют внешние силы, предотвращающие сближение).
- Geared Motor (Роторный двигатель) - этот тип мотора создается только на сочленениях и производит силу крутящего момента, может использоваться, например, для приведения в движение колес автомобиля.
- Servo Motor (Шаговый двигатель) - создается только на сочленениях. Двигатель применяет к телу силу соответствующего направления, стараясь сохранять заданный угол поворота на одной из осей сочленения.
Создание мотора
Для создания притягивающего мотора (Attractor Motor) выберите два тела и нажмите правой кнопкой в любой области рабочего окна. Выберите Create Attractor Motor из контекстного меню. Для создания роторного (Geared) или шагового (Servo) мотора, выберите сочленение, к которому собираетесь прикрепить мотор и нажмите правой кнопкой в любой области рабочего окна. Выберите соответствующий мотор из пунктов контекстного меню.
У каждого мотора свой собственный набор параметров:
Притягивающий мотор
| Параметр | Описание |
|---|---|
| Body1 | Отображает имя первого задействованного тела. Параметр не редактируется вручную. |
| Body2 | Отображает имя второго задействованного тела. Параметр не редактируется вручную. |
| Enabled | В значении False выключает данный мотор. |
| Exponent | Затухание. Параметр определяет, зависимость силы взаимодействия от расстояния. Чем ниже значение параметра, тем выше сила на определенном расстоянии. |
| Name | Позволяет задать уникальное имя для данного мотора. |
| Strength | Значение позволяет задать силу действия мотора. Чем выше значение, тем больше сила взаимодействия между телами. |
Роторный двигатель
| Property name | Description |
|---|---|
| Enabled | В значении False выключает данный мотор. |
| Joint | Отображает имя сочленения, к которому присоединен мотор. Данный параметр не редактируется вручную. |
| JointAxis | Отображает параметры оси, на которой действует мотор. Данный параметр не редактируется вручную. |
| MaxTorque | Максимальное значение вращающего момента, который мотор может передать на соответствующее сочленение. |
| MaxVelocity | Параметр задает максимальную скорость, которую мотор может передать на соответствующее сочленение. |
| Name | Параметр позволяет задать уникальное имя мотора. |
| Throttle | Параметр задает направление и стартовое значение силы. Значения варьируются от -1 до 1. 1 - вращение по часовой стрелке, -1 - вращение против часовой стрелки, 0 - отсутствие действующей силы. |
Шаговый двигатель
| Параметр | Описание |
|---|---|
| DesiredAngle | Параметр определяет угол, на который мотор старается повернуть тело. По достижении требуемого угла будет применяться сила, необходимая, чтобы удерживать тело в данном положении. |
| Enabled | В значении False выключает мотор. |
| Joint | Отображает имя сочленения, к которому присоединен мотор. Данный параметр не редактируется вручную. |
| JointAxis | Отображает параметры оси, на которой действует мотор. Данный параметр не редактируется вручную. |
| MaxTorque | Максимальное значение вращающего момента, который мотор может передать на соответствующее сочленение. |
| Name | Параметр позволяет задать уникальное имя мотора. |
| RestoreMultiplier | Параметр определяет жесткость сочленения, от которой зависит, насколько резко будет достигаться требуемый угол. Чем ближе значение к 0, тем жестче соответствующее сочленение. |
Создание и редактирование .physics файла
Данный пример демонстрирует создание своего .physics файла, с моделью молота, бьющего по шару.
Для создания нового .physics файла, нажмите правой кнопкой на папке в окне ресурсов, в которую вы хотите поместить созданную физическую модель, выберите New Resource в контекстном меню.
В появившемся окне создания нового ресурса, выберите Physics Model и в следующем шаге введите название физической модели. Теперь откройте только-что созданный файл для редактирования (двойной клик). Вы увидите уже созданное тело с примитивом типа Box. Вы можете оставить это тело или удалить, как пожелаете. Для соблюдения чистоты эксперимента, давайте начнем с пустого файла. Создайте тело, состоящее из трех примитивов типа Box, как показано на рисунке Рис.1 (см. Создание тел). Измените параметр тела Static в значение True, чтобы оно не упало на зелю. Обратите внимание, что его цвет изменился на темно синий.
Теперь создадим новое тело с примитивом Sphere и разместим прямо над телом из коробок, настроим параметры, как на Рис.2
Далее создадим статичное тело над существующими объектами - как бордовый ящик на Рис.3. Все параметры, кроме Static можно не редактировать. Рядом создаем другое тело из двух примитивов Box, и соорудим из них простой молот (зеленое тело на Рис.3). Изменяем параметр плотность (density) каждого примитива в теле молота в значение 10.
Выбираем два последних созданных тела и соединяем их сочленением с одной степенью свободы Hinge Joint. Открываем параметры сочленения, в свитке Axis (оси), меняем параметр Direction с 1 0 0 на 0 1 0 (Рис.4)
Теперь вы можете запустить режим симуляции, чтобы увидеть, как тяжелый молот падает, и, набирая скорость обрушивается на шар, который выстрелит, как пушечное ядро.
Чтобы увидеть больше примеров физических моделей - смотрите в папке \Data\_Tests\Physics.










