Первые шаги в Maya. Урок 21. Динамика мягких тел

Светлана Шляхтина

Теоретические аспекты

Примеры сцен с мягкими телами

Волнующаяся водная гладь

Падающая на поверхность капля

Падающий по лестнице пластилиновый куб

Раскачивающийся на нити воздушный шарик

Развевающийся на ветру флаг

 

Прошлый урок мы посвятили изучению основ динамики твердых тел (Rigid Body), таких, например, как костяшки домино и игральные кости, и выяснили, что подобные динамические тела имеют некоторую массу и трение, подвержены воздействию разнообразных сил (гравитации, ветра и т.д.) и при столкновении могут разрушаться, но не деформируются — в частности при падении под воздействием гравитационной силы формы своей они не меняют. А на этом уроке мы ознакомимся с динамикой мягких тел, которые (в отличие от твердых тел) под действием динамических сил и в результате столкновений с другими объектами должны деформироваться.

Теоретические аспекты

Мягкие тела (SoftBody) позволяют имитировать поведение объектов, сделанных из резины, желатина, пластилина и т.п. Они могут создаваться на базе NURBS-моделей (включая NURBS-кривые и модели, созданные посредством wire-деформаций), полигональных поверхностей, а также пространственных Lattice-решеток. Как и твердые, мягкие тела обладают массой и трением, подвергаются силовым воздействиям, но при столкновениях и иных внешних воздействиях видоизменяют свою форму. Для достижения подобного эффекта динамические свойства назначаются не геометрическому объекту в целом (как у твердых тел), а лишь его управляющим точкам (в случае NURBS-поверхности) или вершинам (при использовании полигональной сетки). С данными точками связывается система частиц: когда частицы попадают в зону действия поля или сталкиваются с другими объектами, они перемещаются и перемещают связанную с ними поверхность, что и обеспечивает деформацию объекта.

За работу с мягкими телами отвечает меню Soft/RigidBodies (Мягкие/Твердые тела; рис. 1) — оно доступно лишь в режиме Dynamics (Динамика), активируемом при нажатии клавиши F4. В данном меню находятся команды, используемые для создания тел, а также для выполнения в их отношении некоторых операций.

 

Рис. 1. Меню Soft/RigidBodies

Рис. 1. Меню Soft/RigidBodies

 

Мягкие динамические тела приводятся в движение действием внешних сил, называемых полями (Fields). За работу с полями отвечает меню Fields (рис. 2), также доступное лишь в режиме Dynamics. Поля позволяют имитировать воздействие самых разных сил — от силы ветра до силы тяжести:

  • Air (Ветер) — имитирует воздействие ветра, отклоняющего тела;
  • Drag (Трение) — замедляет движение тел вследствие трения;
  • Gravity (Гравитация) — используется для имитации воздействия на тела силы тяжести;
  • Newton (сила Ньютона) — обеспечивает орбитальное вращение тел;
  • Radial (Радиальность) — приводит к разбрасыванию тел в разные стороны или, наоборот, притягиванию их к некоторой зоне;
  • Turbulence (Турбулентность) — приводит к перемешиванию тел во время движения;
  • Uniform (Однородность) — заставляет тела двигаться в определенном направлении с постоянной скоростью;
  • Vortex (Вихрь) — создает эффект закручивания тел по спирали;
  • VolumeAxis (Объемность) — позволяет создавать эффект внутри некоторого объема, который может иметь форму куба, сферы, цилиндра, конуса или тора.

 

Рис. 2. Меню Fields

Рис. 2. Меню Fields

 

По умолчанию мягкие тела бесконечно растягиваются или сжимаются практически от любого воздействия. Для получения более реалистичного поведения к ним обычно добавляют мишени либо пружины. Мишени (Goals) предоставляют мягкому объекту форму, которую он стремится принять, — к такой форме объект неизменно возвращается после динамического воздействия (примерно так же, как резиновая игрушка после сжатия). Посредством пружин (Springs) движение одной частицы оказывает влияние на движение других, что также способствует стремлению мягкого тела к относительному сохранению своей формы.

Для превращения объектов в мягкие тела достаточно выделить их и воспользоваться командой Soft/RigidBodies => CreateSoftBody (Мягкие/Твердые тела => Создать мягкое тело). Данная команда обеспечивает три варианта превращения:

  • Make Soft (Сделать объект мягким) — приводит к превращению выделенного объекта в мягкое тело;
  • Duplicate, Make Original Soft (Дублировать, сделать исходный объект мягким) — создает копию выделенного объекта и преобразует исходный объект в мягкое тело;
  • Duplicate, Make CopySoft (Дублировать, сделать копию объекта мягким) — создает копию выделенного объекта и превращает копию объекта в мягкое тело.

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

Для того чтобы прекратить существование объекта как мягкого тела (например, тогда когда это уже не требуется), необходимо выделить связанную с ним систему частиц и удалить ее.

Для примера создайте простую сцену с плоскостью с приподнятым над ней NURBS-шаром (рис. 3). Предположим, что шар резиновый и потому должен не просто упасть на плоскость (например, на пол) и несколько раз подпрыгнуть, но и деформироваться при падении. Это означает, что плоскость представляет собой пассивное твердое тело, а шар — мягкое тело. Для того чтобы Maya точно воспроизводила симуляцию падения шара под воздействием силы, установите режим воспроизведения каждого кадра, щелкнув на кнопке AnimationPreferences и выбрав в раскрывающемся списке PlaybackSpeed (Скорость воспроизведения) в категории Timeline (Временная шкала) вариант Playeveryframe (Воспроизводить каждый кадр), — рис. 4. Одновременно увеличьте общее число кадров анимации до 500. Превратите плоскость в пассивное твердое тело, выделив ее и применив команду Soft/RigidBodies => CreatePassiveRigidBody. Превратите шар в мягкое тело — выделите его, щелкните на квадратике справа от команды Soft/RigidBodies => CreateSoftBody и в поле Creations Options установите вариант MakeSoft (рис. 5). В итоге вокруг шара появится связанная с ним система частиц (рис. 6), что, впрочем, пока никак не скажется на поведении шара, поскольку частицы не подвергаются каким-либо динамическим воздействиям. Назначьте шару гравитационную силу, воспользовавшись командой Fields => Gravity (Поля => Гравитация). Проиграйте анимацию, и вы увидите, что шар падает и проваливается сквозь плоскость, причем никакой деформации при этом не происходит. Дело в том, что для имитации динамики необходимо настроить столкновения окружающих шар частиц с плоскостью. Для этого выделите шар и (при удерживании клавиши Shift) плоскость и воспользуйтесь командой Particles => MakeCollide (Частицы => Заставить сталкиваться). В результате при проигрывании анимации шар будет деформироваться (рис. 7), правда совсем неестественно — то превращаться в блин, то чрезмерно вытягиваться по вертикали.

 

Рис. 3. Исходный вид сцены

Рис. 3. Исходный вид сцены

 

Рис. 4. Смена режима воспроизведения кадров

Рис. 4. Смена режима воспроизведения кадров

 

Рис. 5. Выбор режима создания мягкого тела

Рис. 5. Выбор режима создания мягкого тела

 

Рис. 6. Появление вокруг шара системы частиц

Рис. 6. Появление вокруг шара системы частиц

 

Рис. 7. Вид шара в нескольких кадрах анимации

Рис. 7. Вид шара в нескольких кадрах анимации

 

Добиться более естественной деформации можно путем назначения частицам шара виртуальных пружин, которые обеспечат ему некую поддерживающую структуру и не позволят чрезмерно деформироваться. Откройте окно Outliner, выделите систему частиц, щелкните на квадратике у команды Soft/ Rigid Bodies => Create Springs (Мягкие/Твердые тела => Создать пружины) и в поле Creation Method установите вариант All (рис. 8). В итоге каждая из частиц окажется связанной с соседними частицами со всех сторон (рис. 9), сам шар при деформации уже не будет столь сильно искажаться, а его анимация теперь будет напоминать анимацию объекта из желатина (рис. 10).

 

Рис. 8. Настройка параметров создания пружин

Рис. 8. Настройка параметров создания пружин

 

Рис. 9. Шар с пружинами при увеличении

Рис. 9. Шар с пружинами при увеличении

 

Рис. 10. Вид шара с настроенными по умолчанию пружинами в нескольких кадрах анимации

Рис. 10. Вид шара с настроенными по умолчанию пружинами в нескольких кадрах анимации

 

Попробуем сделать шар более упругим. Это можно было обеспечить еще на этапе создания пружин (то есть в окне Spring Options), где предусмотрены возможности регулирования множества параметров, основными из которых являются следующие (рис. 11):

  • Wire Walk Length (Глубина связи) — ограничивает распространение связей между частицами: если этот параметр равен единице, то каждая частица связана лишь с ближайшими частицами, если двум — с ближайшими и соседними с ними (то есть связь распространяется не на одну, а на две частицы) и т.д.;
  • Stiffness (Жесткость) — определяет, насколько быстро пружины возвращаются в исходное состояние, а значит, насколько хорошо объект сохраняет свою форму;
  • Damping (Торможение) — устанавливает скорость, с которой пружины приходят в состояние покоя; данный параметр отличается высокой чувствительностью и при экспериментах должен корректироваться незначительно.

 

Рис. 11. Окно Spring Options

Рис. 11. Окно Spring Options

 

Однако в данном случае еще ничего не потеряно, поскольку параметры Stiffness и Damping могут регулироваться также через окно каналов либо редактор атрибутов. Выделите пружины (строка Springsl в окне Outliner) и в окне каналов установите параметр Stiffness равным 15, а Damping — 0,1 (рис. 12). Выделите гравитационную силу (строка gravityField1 в окне Outliner) и уменьшите значение параметра Magnitude, регулирующего силу воздействия поля, примерно до 5. Теперь движущийся шар по характеру своей деформации вполне походит на резиновый (рис. 13). Увеличение значения Stiffness уменьшило степень деформации шара (его форма стала изменяться в достаточно жестких рамках), уменьшение Damping позволило объекту отскочить от плоскости большее число раз, а уменьшение Magnitude уменьшило степень притяжения к земле — в итоге мы добились иллюзии того, что объект достаточно легкий.

 

Рис. 12. Настройка параметров пружин

Рис. 12. Настройка параметров пружин

 

Рис. 13. Вид шара после корректировки параметров

Рис. 13. Вид шара после корректировки параметров

 

Можно было добиться естественности деформации шара и иным путем — через назначение ему мишени, правда данный путь предполагает использование другого метода превращения объекта в мягкое тело. Поэтому удалите пружины (объект Springsl), а затем прекратите существование шара как мягкого тела, удалив связанную с ним систему частиц (объект nurbsSphere1Particle). Выделите шар, щелкните на квадратике у команды Soft/RigidBodies => CreateSoftBody (Мягкие/Твердые тела => Создать мягкое тело) и в раскрывающемся списке CreationOptions установите вариант Duplicate, MakeOriginalSoft (Дублировать, сделать исходный объект мягким). Включите флажки HideNon-SoftObject (Скрыть немягкий объект) и MakeNon-SoftaGoal (Сделать немягкий объект целевым) — рис. 14 — и щелкните на кнопке Create (Создать). В итоге в сцене окажутся два шара: исходный шар превратится в мягкое тело, а его твердая копия будет служить в качестве мишени. После этого форма мягкого тела при любых преобразованиях будет стремиться вернуться к форме мишени.

 

Рис. 14. Выбор режима создания мягкого тела

Рис. 14. Выбор режима создания мягкого тела

 

Если попробовать сразу проиграть анимацию, то ничего не произойдет, поскольку связи с гравитационным полем и настройки столкновения оказались утраченными после прекращения существования шара как мягкого тела. Необходимо вручную установить эти настройки заново. Вначале восстановим связь с полем гравитации. Откройте редактор динамических связей, воспользовавшись командой Window => RelationshipEditors => DynamicRelationships (Окно => Редакторы связей => Динамические связи). В левом окне редактора выделите исходный шар (то есть шар, преобразованный в мягкое тело), затем удостоверьтесь, что в правом окне переключатель SelectionModes (Режимы выделения) находится в положении Fields (Поля), и подсветите строку gravityField1 — выделенная строка будет свидетельствовать об установке связи (рис. 15). Аналогично установите связь с полем гравитации для копии шара, выступающей в роли мишени (рис. 16). Переключитесь в сцену. Выделите исходный шар, а затем при нажатой клавише Shift выделите плоскость и настройте столкновения, применив команду Particles => MakeCollide. Проиграйте анимацию — шар падает и несколько раз подпрыгивает, но безо всякой деформации, поскольку в процессе превращения шара в мягкое тело значение параметра Weight (Вес) мы оставили равным 1. Выделите систему частиц и в окне каналов уменьшите значение веса мишени (GoalWeight) до 0,5 (рис. 17) — шар станет деформироваться, причем достаточно естественно.

 

Рис. 15. Установка связи между исходным шаром и полем гравитации

Рис. 15. Установка связи между исходным шаром и полем гравитации

 

Рис. 16. Установка связи между мишенью и полем гравитации

Рис. 16. Установка связи между мишенью и полем гравитации

 

Рис. 17. Настройка параметров системы частиц

Рис. 17. Настройка параметров системы частиц

 

Как уже было отмечено, мягким телом можно сделать не только полигональные объекты и NURBS-поверхности, но и, например, NURBS-кривые. Попробуем поэкспериментировать с NURBS-окружностью — создайте ее с учетом параметров, указанных на рис. 18. Установите под окружность NURBS-плоскость, опустив последнюю по оси Y на 0,5 единиц (рис. 19). Превратите плоскость в пассивное твердое тело, выделив ее и применив команду Soft/RigidBodies => CreatePassiveRigidBody. Назначьте окружности гравитационную силу (команда Gravity из меню Fields). Превратите окружность в мягкое тело, выделив ее, щелкнув на квадратике у команды Soft/RigidBodies => CreateSoftBody и установив в поле CreationsOptions вариант MakeSoft, а значение параметра Weight уменьшив до нуля (рис. 20).

 

Рис. 18. Исходная NURBS-окружность

Рис. 18. Исходная NURBS-окружность

 

Рис. 19. Появление плоскости

Рис. 19. Появление плоскости

 

Рис. 20. Установка параметров создания мягкого тела

Рис. 20. Установка параметров создания мягкого тела

 

Разумеется, после этого окружность при проигрывании анимации будет просто проваливаться сквозь плоскость. Настроим столкновение частиц с плоскостью, но вначале оснастим их виртуальными пружинами. Выделите систему частиц, щелкните на квадратике у команды Soft/RigidBodies => CreateSprings, в поле CreationMethod установите вариант MinMax, а значения Min Distance и Max Distance сделайте равными 1 и 2 соответственно (рис. 21). Данные расстояния взяты из учета того, что нам необходимо связать пружинами все частицы в единую окружность, установив последние между всеми четными и всеми нечетными частицами. Примерное расстояние между соседними четными (либо нечетными) частицами в данном случае равно примерно 1,57 ((8х3,14/32)х2 = 1,57), значит, Min Distance берем равным 1 (то есть меньше 1,57), а Max Distance равным 2 (то есть больше чем 1,57). После этого настройте столкновение частиц с плоскостью — выделите систему частиц и (при удерживании клавиши Shift) плоскость и воспользуйтесь командой Particles => MakeCollide при параметрах, как показано на рис. 22. Назначьте частицам радиальную силу (команда Radial из меню Fields), после чего окружность при проигрывании анимации будет расти. Чтобы ограничить радиус увеличения окружности под воздействием радиальной силы, установите жесткость пружин (параметр Stiffness) равной 100. Добавьте в сцену несколько достаточно больших примитивов и разместите их вне окружности, но достаточно близко от нее, чтобы появилась возможность смоделировать столкновение частиц с данными объектами (рис. 23). Последовательно настройте столкновения системы частиц с каждым из примитивов — в итоге окружность при анимации станет деформироваться, поскольку частицы при движении будут плавно огибать стоящие на их пути примитивы (рис. 24).

 

Рис. 21. Настройка параметров виртуальных пружин

Рис. 21. Настройка параметров виртуальных пружин

 

Рис. 22. Настройка параметров столкновения частиц с плоскостью

Рис. 22. Настройка параметров столкновения частиц с плоскостью

 

Рис. 23. Появление примитивов

Рис. 23. Появление примитивов

 

Рис. 24. Вид сцены в одном из кадров анимации

Рис. 24. Вид сцены в одном из кадров анимации

 

Несколько усложним задачу — попробуем в некоторой точке пространства подвесить на пружину обладающий гравитационной силой шар и заставить его в процессе опускания и подтягивания на пружине деформироваться. Получается, что к шару должен быть применен ограничитель Spring (Пружина), что возможно лишь в отношении твердых тел. Вместе с тем шар в процессе анимации должен изменять свою форму, то есть быть представлен в виде мягкого тела. Это означает, что вначале следует преобразовать шар в твердое тело и только после подвешивания его на пружину конвертировать в мягкое. Создайте плоскость и находящийся под ней шар (рис. 25). Установите в анимации 500 кадров. Выделите оба объекта и свяжите их пружинным ограничителем, применив команду Soft/RigidBodies => CreateSpringConstraint (Мягкие/Твердые тела => Назначить Spring-ограничитель) — рис. 26. Выделите ограничитель и в окне каналов установите значения параметров SpringDamping (Торможение пружины) и SpringRestLength (Длина пружины в состоянии покоя) равными 0,06 и 4 соответственно (рис. 27). Выделите шар и назначьте ему гравитационную силу при помощи команды Fields => Gravity (рис. 28). Воспроизведите анимацию — шар станет колебаться на пружине вверх-вниз.

 

Рис. 25. Исходный вид сцены

Рис. 25. Исходный вид сцены

 

Рис. 26. Появление ограничителя Spring

Рис. 26. Появление ограничителя Spring

 

Рис. 27. Настройка параметров Spring-ограничителя

Рис. 27. Настройка параметров Spring-ограничителя

 

Рис. 28. Появление поля гравитации

Рис. 28. Появление поля гравитации

 

Выделите шар и превратите его в мягкое тело (команда Soft/RigidBodies => CreateSoftBody), указав создание дубликата и уменьшив значение параметра Weight до 0,3 (рис. 29 и 30). Сделайте временно видимым скрытый шар-мишень, назначьте шарам контрастные материалы и внимательно понаблюдайте за деформацией мягкого тела — пока все его вершины в равной степени стремятся к восстановлению формы (рис. 31). Попробуем добиться того, чтобы деформация была неравномерной: для вершин, близких к центральной части шара, меньше, а для вершин на полюсах больше. Откройте окно редактора компонентов (команда Window => GeneralEditors => ComponentEditor... — Окно => Основные Редакторы => Редактор компонентов) и перейдите на вкладку Particles (Частицы). В окне Outliner выделите систему частиц (рис. 32), нажмите клавишу F8, в окне проекции Front выделите точки на экваторе (рис. 33) и в столбце GoalPP для всех точек установите весовой коэффициент равным 0,9 (рис. 34). Затем выделите в окне проекции Front указанные на рис. 35 частицы и выставите для них весовые коэффициенты равными 0,8, а для частиц, указанных на рис. 36, — равными 0,65. Запустите анимацию — шар, падающий под воздействием силы тяжести, будет растягивать пружину до некоторой величины, а затем возвращаться в исходную позицию, при этом заметно вытягиваясь с полюсов (рис. 37).

 

Рис. 29. Установка параметров создания мягкого тела

Рис. 29. Установка параметров создания мягкого тела

 

Рис. 30. Появление в сцене мягкого тела

Рис. 30. Появление в сцене мягкого тела

 

Рис. 31. Вид сцены в одном из кадров анимации

Рис. 31. Вид сцены в одном из кадров анимации

 

Рис. 32. Выделение системы частиц

Рис. 32. Выделение системы частиц

 

Рис. 33. Первое выделение частиц

Рис. 33. Первое выделение частиц

 

Рис. 34. Изменение весовых коэффициентов для частиц, близких к экватору

Рис. 34. Изменение весовых коэффициентов для частиц, близких к экватору

 

Рис. 35. Второе выделение частиц

Рис. 35. Второе выделение частиц

 

Рис. 36. Третье выделение частиц

Рис. 36. Третье выделение частиц

 

Рис. 37. Вид подвешенного на пружине шара в некоторых кадрах анимации

Рис. 37. Вид подвешенного на пружине шара в некоторых кадрах анимации

В начало В начало

КомпьютерПресс 5'2008


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует