“Rigid Body” - это объект в физической симуляции, форма и размер которого не могут измениться. Если вы в
своей сцене превратите приметив цилиндр в “Rigid Body”, он cможет подпрыгивать и скользить, но его
никогда нельзя согнуть или сломать (независимо от того, какая сила приложена).
Несколько “Rigid Body” могут быть соединены вместе в сцене с помощью Constraints (ограничений).
Например, представьте, что вы добавили дверь в свою сцену и превратили ее в “Rigid Body”. Хотя она может
начать вертикально болтаться в дверной раме, при любом ударе о дверь она упадет плашмя на пол.
Вам нужно добавить Constraints (ограничение) на петлю двери, чтобы удерживать дверь в дверной раме.
Без PhysX каждый 3D объект в вашей сцене - это то, что мы называем Graphical Mesh. Это визуальное
представление вашего объекта и определяет, как он выглядит. Чтобы оптимизировать игру в реальном
времени (или ускорить скорость рендеринга), вы, вероятно, управляете полигонами в своём Graphical Mesh.
Для физической симуляции вы также хотите иметь возможность контролировать объем обрабатываемой
информации. Часто объем информации, необходимый для симуляции, намного меньше, чем требуется
для Graphical Mesh. Например, как показано на Рис.05, для симуляции, Graphical Mesh лодки может быть
представлена простым Physics Shapes.
“Physics Shapes” может представлять собой набор полигонов (как в примере с лодкой), или это может
быть более простая форма. Доступны простые примитивы для “Physics Shapes” - Box; Sphere; Capsule.
Вы должны использовать эти примитивы для Physics Shapes, когда это возможно, так как они
менее полигональные и поэтому быстрее (в некоторых ситуациях на порядок), чем вариант “Triangle Mesh”
который точно повторяет структуру вашего Graphical Mesh, но он более полигонален.
Составление физического представления лодки, состоит из нескольких Physics Shapes. Вы можете спросить:
какая польза от примитивов - сфер, кубов и капсул. Ведь лодка, смоделированная в виде сферы, коробки или
капсулы, не очень реалистична. Ответ кроется в способности создавать фигуры. Хотя наиболее
распространенным случаем является один Physics Shapes для одной формы Graphical Mesh, но для
представления одного Graphical Mesh формы можно использовать произвольное
количество Physics Shapes. (Рис.06)
на Рис.05 сверху находится изображение лодки без Physics Shapes а ниже с Physics Shapes . На этот раз мы
используем Physics Shapes Convex Hull для основания лодки, три примитива коробки для ящиков на лодке,
которые торчат над корпусом, и примитив капсулы для разбитой мачты. Если бы мы использовали один
Convex Hull для всей лодки, то он бы сработал бы только в том случае, если бы пушечным ядрам никогда не
разрешалось летать в пространстве между мачтой и ящиками. Поскольку “Dynamic Rigid Body” не могут
использовать вогнутый Graphical Mesh (см. Следующий раздел), вам необходимо составить физическое
представление из набора соединенных Physics Shapes для вашего Graphical Mesh.
Рис.05
Рис.06
Каждый созданный вами “Rigid Body” будет иметь один из трех типов. Для вашего удобства в меню PhysX
есть опции для каждого типа. Однако вы всё равно можете изменить тип “Rigid Body” после его создания.
Dynamic Rigid Body - очень похож на объекты в реальном мире. Он падает под действием силы тяжести,
сталкивается с другими объектами и может быть столкнут этими же объектами. Физическое представление
объекта перемещается и поворачивается с помощью симуляции, Graphical Mesh в Maya обновляется
на основе этого. Вогнутый Graphical Mesh не может использоваться для “Dynamic Rigid Body”.
Kinematic Rigid Body - это тела марионетки, перемещаемые с помощью анимации. Они не будут падать под
действием силы тяжести. Хотя они будут выталкивать любые динамические объекты, с которыми они
столкнутся, они не могут быть вытеснены другими объектами. Преобразование Graphical Mesh
управляется Maya (есть анимация или нет), и это, в свою очередь, управляет преобразованием Physics Shapes ,
представляющей объект в симуляции. Вогнутый Graphical Mesh не может использоваться
для “Kinematic Rigid Body”.
Static Rigid Body - похож на кинематический, за исключением того, что он не может быть анимирован.
“Dynamic Rigid Body” может сталкиваться со “Static Rigid Body” и отскакивать от него,
но “Static Rigid Body” никогда не движется. Статические объекты полезны как для оптимизации
производительности, так и потому, что для Physics Shapes может использовать вогнутые формы.
Создание “Rigid Body”
“Rigid Body” создается и обрабатывается путем применения к объекту модификатора “Rigid Body”.
Вы можете добавить это с помощью команд в разделе “Rigid Body” меню PhysX. Они просто устанавливают
для вас значение параметра “Type Rigid Body”. Как показано на Рис.07, вы можете свободно изменять
тип “Rigid Body” после его создания.
Рис.07
Try it! (Попробуйте это сделать)
В новом проекте создайте приметив цилиндр. Поднимите цилиндр над землей
(и, возможно, немного поверните его для получения более интересных результатов). Выбрав цилиндр,
откройте меню PhysX > Rigid Body > Create Dynamic Rigid Body (Рис.07) Модификатор “Rigid Body”
добавляется в стек модификаторов, для Physics Shapes будет применён тип формы “Convex Hull”.
Нажмите кнопку “Start Simulation” на полке PhysX. Цилиндр должен упасть на землю и возможно, немного
подпрыгнуть и покатиться. Если он провалился сквозь землю. Вам необходимо включить опцию
“Ground Plane” в глобальных настройках (nxRigidSolver). Нажмите кнопку “Stop Simulation”
на полке PhysX, чтобы остановить симуляцию. Нажмите кнопку “Rewind Simulation” (перемотка назад),
чтобы вернуть цилиндр в исходное положение. Если вам мешает Physics Helper вы можите его скрыть
для этого в Outliner выделите nxRigidSolver перейдите в Attribute Editor > Simulation Visualization -
снимите флажок с Enable.
“Dynamic Rigid Body” перемещаются в сцене с помощью симуляции. Нажатие кнопки “Rewind Simulation”
(перемотка назад) перемещает любой “Dynamic Rigid Body” обратно туда, где они должны начинаться.
Эта начальная точка называется “initial transform” (начальное преобразование).
Как плагин узнает, где находится это преобразование? По умолчанию любое изменение, которое вы вносите
в перемещение или вращение “Dynamic Rigid Body”, когда Playhead Maya находится в первом кадре,
автоматически обновляет Initial Transform (начальное преобразование). Любые изменения, которые вы
вносите в преобразование “Dynamic Rigid Body”, когда Playhead не находится на первом кадре, будут
потеряны при нажатии кнопки “Rewind Simulation” (перемотка назад).
Try it! (Попробуйте это сделать)
Снова запустите, а затем снова остановите симуляцию. Теперь, когда цилиндр лежит на земле, измените
его положение. Нажмите кнопку “Rewind Simulation” (перемотка назад), Playhead Maya возвращается
к первому кадру, и цилиндр снова начинает парить над землей. Всё ваше перемещение вернулось
в изначальное положение! Теперь, когда Майя находится на первом кадре, снова переместите и поверните
цилиндр. Нажмите кнопку “Start Simulation” Теперь цилиндр не сдвинулся с того места, с которого вы хотели
его запустить! Запустите, а затем перемотайте симуляцию назад “Rewind Simulation”, Теперь цилиндр
вернулся на свое новое, стартовое место!
Параметры плотности и массы физического материала связаны между собой объемом объекта. Крошечный
стальной штифт и большой стальной столб имеют плотность около 7,85 г/см3, но (конечно) штифт имеет
массу, которая намного легче. Более тяжелые объекты обладают большей инерцией и легче будут
отталкивать легкие объекты с их пути.
Чтобы “Dynamic Rigid Body” падал быстрее, вы можете попробовать увеличить его плотность (или массу)
в разделе Attribute Editor > Physical Material, (См.выше Рис.07) но это ничего не даст.
В идеализированном мире (игнорируя сопротивление воздуха) объекты разных размеров и веса падают с
одинаковой скоростью. (Возможно, вы помните что-то апокрифическое о том, как Галилей ронял вещи с
Пизанской башни?) Единственные способы, которыми вы можете заставить объект падать быстрее, это либо:
увеличьте силу гравитации (что можно сделать с помощью nxRigidSolver) или переместите объект ближе
к земле. Перемещение объекта к земле может показаться очевидным и бесполезным, но это весьма актуально
и поднимает важный вопрос о единицах измерения.
Например в реальном мире кирпичная башня высотой 50 футов, которую видит человек ростом 6 футов,
стоящий на расстоянии 10 футов, выглядит идентично кирпичной башне высотой 500 футов, которую видит
гигант высотой 60 футов, стоящий на расстоянии 100 футов. Однако (гигантскому) кирпичу, падающему
с этой (огромной) 500-футовой башни, потребуется намного больше времени, чтобы упасть на землю,
чем (обычному) кирпичу, падающему всего с высоты 50 футов. Если вы смотрите глазами великана, думая,
что вы человек, вы будете удивлены, почему кирпич падает так медленно.
Try it! (Попробуйте это сделать)
Проверьте, насколько велик ваш цилиндр, посмотрев параметр Radius в редакторе атрибутов “polyCylinder”.
Если вы не видите никаких единиц измерения в параметре radius, это означает, что для ваших единиц
отображения в Maya установлено значение “Generic”, и, таким образом, они непосредственно представляют
ваши системные единицы. Мы настоятельно рекомендуем использовать нестандартные дисплеи, чтобы вы
четко представляли себе реальные размеры, которые вы имитируете. Превратите его в гигантский цилиндр,
установив радиус около 50 футов (или что-то достаточно большое, учитывая размеры вашего проекта).
Если хотите сделайте его таким же большим, как футбольное поле. После масштабирования цилиндра,
его Physics Shapes “Convex Hull” должен автоматически обновиться вместе с ним.
Переместите цилиндр так, чтобы он был примерно на один километр от земли. Запустите симуляцию,
цилиндр медленно опускается на землю, как гигантский воздушный шар, приземляясь через пару секунд.
Сбросьте симуляцию и уменьшите цилиндр до человеческих пропорций (около 6 дюймов в диаметре).
Вам также придется снова регенерировать “Convex Hull”, чтобы соответствовать новому размеру.
Теперь у вас есть цилиндр нормального размера, парящий высоко в воздухе. Снова переместите цилиндр так,
чтобы он находился примерно на одином футе от земли. Запустите симуляцию, цилиндр падает на землю
менее чем за полсекунды. Поэтому помните: если вам кажется, что ваша симуляция находится на Луне,
сначала проверьте, насколько всё велико, прежде чем увеличивать гравитацию.
Величина трения для “Rigid Body” определяет, насколько легко он скользит по другим поверхностям.
Тефлоновый кубик на тефлоновом столе со значениями Friction (трения) 0,05 (почти без трения) будет
скользить почти бесконечно, прежде чем остановиться. И наоборот, два куска блоков, покрытых наждачной
бумагой, со значениями трения 0,95 (почти полное трение) почти никогда не будут скользить друг об друга.
Для настройки доступны два вида трения:
Static Friction - описывает величину трения, когда два объекта не скользят друг об друга. Подумайте об этом
как о том, сколько силы требуется, чтобы начать заставить их скользить.
Dynamic Friction - описывает величину трения, когда два объекта скользят друг против друга.
Если вы каждый раз пытались подтолкнуть машину или диван, вы, возможно, заметили, что их трудно
сдвинуть с места, и легче, когда они уже начали сдвигаться. Для получения реалистичных результатов
коэффициент Static Friction обычно должен быть больше коэффициента Dynamic Friction.
Параметр Bounciness (отскок) определяет, как твердые объекты отскакивают друг от друга при столкновении.
Резиновый мяч может иметь значение Bounciness (отскок) около 0,75,
шарик из пенопласта, возможно, около 0,2, а шарик из арахисового масла 0,0.
Если вы увлекаетесь английским языком, вы можете указать, что такого слова, как "Bounciness",
не существует. Если вы увлекаетесь физикой, вы можете указать, что подходящим термином является
"coefficient of restitution"(коэффициент реституции). В любом случае, надеюсь, вы сможете принять
более короткий вариант, который мы используем здесь.
Как описано выше в разделе “Physics Shapes по сравнению с Graphical Mesh” по сравнению
с Graphical Mesh, “Dynamic Rigid Body” может иметь одну или несколько Physics Shapes, представляющих
его форму в физической симуляции. Раздел “Shapes” позволяет создавать дополнительные Physics Shapes.
(Рис.08) Параметр Shape Type позволяет изменить тип (выбранного) Physics Shapes (Рис.09), используемый
для вашего “Rigid Body”. Типы форм бывают: Convex Hull - Это Physics Shapes по умолчанию для
любого созданного вами “Rigid Body”, поскольку он может использоваться для любого типа “Rigid Body”
и примерно напоминает исходную форму Graphical Mesh. Параметр в Attribute Editor > Attributes > Inflation
не может регулировать размер “Physics Shapes” для Convex Hull но может влиять на другие
“Physics Shapes” Sphere, Box, Capsule.
Рис.08
Рис.09
Sphere, Box, Capsule - Это простые примитивы, хотя они грубо ограничивают ваш Graphical Mesh,
но при этом удобно использовать понятные параметры (Радиус, Длина, Ширина, Высота) для управления
размером примитива, после его создания. Пользовательские параметры для Physics Shapes доступны
в Attribute Editor > Shapes Type. Sphere самый быстрый примитив для симуляции, за которым следует
Box, а затем Capsule. Однако любые примитивы быстрее, чем Convex Hull.
Try it! (Попробуйте это сделать)
Чтобы изменить Physics Shapes, во вьюпорте нажмите на свой цилиндр к которому применён “Rigid Body”.
Вы должны увидеть вкладку “Rigid Body”, который появится в “Attribute Editor”. Если вы не можете
увидеть Attribute Editor, вы можете нажать на значок “Show Attribute Editor”, расположенный в правом
верхнем углу, или в верхнем меню Windows > Attribute Editor. (Attribute Editor - HotKey Ctrl + A)
Что бы выделить “Physics Shapes” откройте Attribute Editor и перейдите на вкладку “Rigid Body” в раздел
“Shapes” затем нажмите кнопку “Select” - это выделит “Physics Shapes”, либо в списке Outliner выберите
“RigidBodyShapeTransform” тогда в Attribute Editor должна появиться вкладка “RigidBodyShape”,
если вам необходимо изменить размер или положение “Shape” примитивов (Sphere, Box, Capsule) то первое
что необходимо сделать это снять флажок с “Best Fit”, иначе при изменении примитивов “Shape” они будут
пытаться соответствовать вашему Graphical Mesh, но с изменёнными преобразованиями которые вы сделали
для Translate; Rotate; Scale. В зависимости от выбранного примитива вам будет доступно настроить:
Size; Radius; Height для того что бы более точно подогнать размеры “Physics Shapes” под ваш
Graphical Mesh, так же вы можете нажать кнопку “Select Transform” и вас перекинет на вкладку
“RigidBodyShapeTransform” на которой можно изменить Translate; Rotate; Scale для “Physics Shapes”,
помимо этого вы можете изменить Rotate Axis, либо вы можете изменять “Physics Shapes” прям во вьюпорте,
с помощью стандартных инструментов Maya, когда выбран “RigidBodyShapeTransform” в списке Outliner
можно изменить “Physics Shapes” с помощью: инструментов: поворота (HotKey E),
перемещения (HotKey W), или изменить Pivot (HotKey D).
Запустите симуляцию.
Цилиндр упадет и приземлится в зависимости от свойств и местоположения Physics Shapes,
а не Graphical Mesh. Сбросьте симуляцию перемотав в начало. Вернитесь на вкладку “Rigid Body”,
вы можете изменить “Type Shapes” в разделе “Attributes” на другие Physics Shapes, такие как Box, Sphere,
Capsule, Convex Hull, Triangular mesh. Измените тип примитива на сферу и снова запустите симуляцию.
Теперь, когда цилиндр приземляется на землю, он ведёт себя как мяч.
Для создания составного объекта, состоящего из нескольких Physics Shapes
(например, создание стола со столешницей и 4 ножками). Вы можете перейти к слою “Shapes” на вкладке
Attribute Editor в “Rigid Body”, нажать кнопку “Add”, выбрать из списка форму примитива, которая
наиболее точно соответствует деталям, выбрать “Around Object” и нажать на деталь в окне просмотра.
Вы можете продолжить добавлять новые формы к одному и тому же “Rigid Body” и повторить шаги
по преобразованию Physics Shapes во вьюпорте. Теперь вы можете создавать несколько Physics Shapes,
чтобы создавать более сложные объекты в сцене!
Rigid Bodies могут быть подключены к Fields (Полям) Maya следующими шагами. Создайте “Rigid Body”
Не выбирайте сетку снова, иначе майя создаст свое собственное “Rigid Body”, которое не нужно.
Создайте Air Field. Maya HotBox > Fields/Solvers > Air - Теперь вы можете добавлять Rigid Bodies в Fields
Далее выберите Graphical Mesh и Air field затем подключитесь к Fields
Maya HotBox > PhysX > Rigid Bodies > Connect to Fields - Connect to Fields. При необходимости настройте их.
Отрегулируйте относительное положение между Graphical Mesh и Fields. Если расстояние между ними
велико, результат неочевиден. Чтобы сделать эффект более очевидным, установите Ослабление поля
равным 0 и, если необходимо, установите величину полей примерно на 10 или 6 Запустите симуляцию