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

From NeoAxis Engine Wiki

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

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).

Кнопка 'Simulate'.

В режиме симуляции вы можете наблюдать количество Контактов (Контакт - касание между двумя примитивами (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 (сгибание) Тела соединяются с одной степенью свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное.
Physics28.jpg
Universal Joint (универсальное сочленение) Тела соединяются с двумя степенями свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное.
Physics29.jpg
Ball Joint (шаровое сочленение) Тела соединяются с тремя степенями свободы вращения, расстояние между каждым из двух тел и центром сочленения фиксированное.
Physics26.jpg
Slider Joint (скольжение) Тела могут перемещаться относительно друг-друга вдоль одной оси, без вращения.
Physics27.jpg
Hinge2 Joint (сгибание-2) Данный тип сочленения поддерживается только в физическом движке ODE и требует, чтобы оба тела не были статичными.

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

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

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

Параметры одинаковы для любого типа сочленения, отличие составляет только количество настраиваемых осей.

Параметры сочленений
Параметр Описание
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 файла.

В появившемся окне создания нового ресурса, выберите Physics Model и в следующем шаге введите название физической модели. Теперь откройте только-что созданный файл для редактирования (двойной клик). Вы увидите уже созданное тело с примитивом типа Box. Вы можете оставить это тело или удалить, как пожелаете. Для соблюдения чистоты эксперимента, давайте начнем с пустого файла. Создайте тело, состоящее из трех примитивов типа Box, как показано на рисунке Рис.1 (см. Создание тел). Измените параметр тела Static в значение True, чтобы оно не упало на зелю. Обратите внимание, что его цвет изменился на темно синий.

Рис.1

Теперь создадим новое тело с примитивом Sphere и разместим прямо над телом из коробок, настроим параметры, как на Рис.2

Рис.2

Далее создадим статичное тело над существующими объектами - как бордовый ящик на Рис.3. Все параметры, кроме Static можно не редактировать. Рядом создаем другое тело из двух примитивов Box, и соорудим из них простой молот (зеленое тело на Рис.3). Изменяем параметр плотность (density) каждого примитива в теле молота в значение 10.

Рис.3

Выбираем два последних созданных тела и соединяем их сочленением с одной степенью свободы Hinge Joint. Открываем параметры сочленения, в свитке Axis (оси), меняем параметр Direction с 1 0 0 на 0 1 0 (Рис.4)

Рис.4

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

Чтобы увидеть больше примеров физических моделей - смотрите в папке \Data\_Tests\Physics.