Первые шаги в Maya. Урок 21. Динамика мягких тел
Падающий по лестнице пластилиновый куб
Раскачивающийся на нити воздушный шарик
Раскачивающийся на нити воздушный шарик
Воспользуемся возможностями динамики мягких тел для создания анимации раскачивающегося на нити воздушного шарика. В окне Side создайте вытянутую вдоль оси Y кривую. Постройте на ее основе поверхность вращения, применив команду Surfaces => Revolve(режим Modeling), — это и будет воздушный шарик (рис. 60). Дополните сцену длинным цилиндром небольшого радиуса и с увеличенным числом секций, который сыграет роль нити (рис. 61). Удалите историю создания Revolve-объекта, воспользовавшись командой Edit => Delete by Type => History (Редактировать => Удалить по типам => История). Объедините Revolve-объект и цилиндр в группу, выделив их и применив команду Edit => Group (Редактировать => Группа), — рис. 62.
Рис. 60. Воздушный шарик
Рис. 61. Появление нити
Рис. 62. Объединение объектов в группу
Активируйте режим Animation. Установите в анимации 150 кадров (кнопка AnimationPreferences). Выделите группу и создайте анимационный ключ, применив команду Animate => Set Key (Анимация => Установить ключ). Включите режим автоматической генерации анимационных ключей, активируйте 50-й кадр и переместите группу некоторым образом, например немного вверх и вправо. Перейдите в 100-й кадр и переместите группу немного вниз и влево, а затем в 150-м кадре опять немного вверх и вправо. Отключите режим автоматической генерации ключей. Проиграйте анимацию — оба объекта должны перемещаться определенным при создании ключевых кадров образом, составляя при этом единое целое.
Переключитесь в режим Dynamics. Выделите цилиндр и превратите его в мягкое тело, воспользовавшись командой Soft/RigidBodies => CreateSoftBody и установив при создании вариант Duplicate, MakeCopySoft, а также уменьшив значение параметра Weight до 0,5 (рис. 63). Это приведет к появлению в сцене двух мягких тел (рис. 64), являющихся копиями исходных Revolve-объекта и цилиндра, которые окажутся скрытыми, но, тем не менее, будут в качестве мишеней оказывать влияние на характер анимации и деформации мягких тел. Выделите систему частиц, связанную с цилиндром, откройте в редакторе атрибутов вкладку PerParticle (Array) Attributes и щелкните правой кнопкой мыши на строке goalPP (рис. 65). В контекстном меню выберите команду CreationExpression (Создать выражение) и в открывшемся окне редактора выражений в поле Expression введите выражение следующего вида (рис. 66):
float $scaling = 0.7;
float $offset = 0.1;
vector $pos = copyOfnurbsCylinder1ParticleShape.position;
float $posY = $pos.y;
copyOfnurbsCylinder1ParticleShape.goalPP = ((($posY + 1) / 2) * $scaling) + $offset;
Рис. 63. Установка параметров создания мягкого тела
Рис. 64. Появление в сцене мягких тел
Рис. 65. Свиток PerParticle (Array) Attributes с выделенной строкой goalPP
Рис. 66. Ввод выражения в редакторе атрибутов
Данное действие позволит сделать параметр goalPP, определяющий силу притяжения частиц к мишени, динамическим, в результате чего цилиндр при анимации будет заметно деформироваться (рис. 67), что как раз и характерно для нити. Правда, зачастую степень деформации оказывается явно чрезмерной, что, впрочем, несложно исправить, добавив к частицам виртуальные пружины. Вновь выделите систему частиц, связанную с цилиндром, щелкните на квадратике у команды Soft/RigidBodies => CreateSprings и в поле CreationMethod установите вариант All, все остальные параметры оставьте без изменения. По окончании увеличьте число кадров анимации, например, до 500 и проиграйте ролик — шарик на нити станет динамически раскачиваться на протяжении всей анимации (рис. 68). Стоит отметить, что естественность данной деформации зависит не только от указанных для частиц цилиндра весовых характеристик, но и от того, насколько удачной оказалась созданная перед этим анимация по ключевым кадрам.
Рис. 67. Вид сцены в одном из кадров анимации
Рис. 68. Раскачивающийся на нити воздушный шарик
Развевающийся на ветру флаг
Попробуем получить имитацию развевающегося на ветру флага, превратив обычную плоскость в мягкое тело. Создайте NURBS-плоскость с семью разбиениями по обеим осям. Поднимите ее немного вверх по оси Y, поверните на 90° относительно оси Z и дополните древком, на котором будет крепиться плоскость-флаг (рис. 69). Выделите плоскость и преобразуйте ее в мягкое тело, воспользовавшись командой Soft/RigidBodies => CreateSoftBody и установив при создании Duplicate, MakeOriginalSoft, а также уменьшив значение параметра Weight до 0,5 (рис. 70). Свяжите полученные частицы пружинами — выделите систему частиц, щелкните на квадратике у команды Soft/RigidBodies => CreateSprings, в поле CreationMethod установите вариант All, а в поле WireWalkLength введите число 3 (рис. 71). Спрячьте пружины, применив команду Hide => Hide Selection.
Рис. 69. Исходный вид сцены
Рис. 70. Установка параметров создания мягкого тела
Рис. 71. Настройка параметров создания пружин
Выделите мягкое тело и назначьте ему силу ветра, а также гравитационную и турбулентную силы, разместив их в соответствии с рис. 72. Выделите силу airField1 (то есть силу ветра) и установите для нее параметры Direction X и Direction Y равными 1 и 0 (рис. 73) — в итоге ветер станет дуть в торец флага, а не вверх. Проиграйте анимацию, и вы увидите, что пока практически никакой деформации плоскости не наблюдается (имеет место лишь некоторое ее перемещение), поэтому увеличьте степень воздействия турбулентной силы (параметр Magnitude) примерно до 280, а для системы частиц уменьшите значение параметра Goal Weight примерно до 0,25.
Рис. 72. Вид сцены с размещенными силами
Рис. 73. Настройка параметров силы ветра
Теперь плоскость при анимации уже вполне напоминает полотнище флага, однако при внимательном наблюдении проявляется одна проблема — находящиеся у древка концы полотнища должны к нему крепиться и при анимации оказываться зафиксированными, что пока не наблюдается. Для их фиксации следует создать пружины, закрепляющие управляющие вершины древка и частицы мягкого тела. Выделите систему частиц. Активируйте режим выделения по типу компонентов (кнопка SelectbyComponentType — рис. 74), включите выделение по точкам (кнопка SelectbyComponentType: Points — рис. 75) и выберите работу с частицами (флажок Particles), щелкнув уже правой (а не левой, как в предыдущем случае) кнопкой на только что задействованной кнопке SelectbyComponentType: Points. Выделите левую верхнюю частицу полотнища. Переключитесь к выделению управляющих вершин древка, отключив флажок Particles и активировав флажок NURBSCVs. При нажатой клавише Shift выделите близлежащие к выделенной частице вершины древка и свяжите выделенные объекты пружиной, применив команду Soft/RigidBodies => CreateSprings с такими же параметрами, как на рис. 76. Аналогичным образом свяжите указанные на рис. 77 объекты. В итоге будут созданы две дополнительные пружины (рис. 78).
Рис. 74. Активация режима SelectbyComponentType
Рис. 75. Включение выделения по точкам
Рис. 76. Первое связывание полотнища с древком
Рис. 77. Выделение объектов для второго связывания полотнища с древком
Рис. 78. Появление в сцене дополнительных пружин
Есть и еще один нюанс, который рекомендуется учесть. При удалении от древка влияние ветра на полотнище должно проявляться сильнее, поэтому изменим для соответствующих частиц значения весовых коэффициентов. Откройте окно редактора компонентов (команда Window => GeneralEditors => ComponentEditor) и перейдите на вкладку Particles. В окне Outliner выделите систему частиц, нажмите клавишу F8, в окне проекции Side выделите все вершины, которые должны сильнее реагировать на порывы ветра (рис. 79), и в столбце GoalPP для всех точек установите весовой коэффициент равным 0,95 (рис. 80). В заключение создайте иллюзию закрепления полотнища на древке шпагатом (для его имитации можно воспользоваться цилиндром и торусом) и проиграйте ролик — полотнище флага будет вполне реалистично развеваться на ветру (рис. 81).
Рис. 79. Выделение вершин
Рис. 80. Изменение весовых коэффициентов
Рис. 81. Развевающийся на ветру флаг