Динамика твердых тел

В Maya существует два тип динамических тел - твердые и мягкие. Твердые тела предствляют собой монолитные объекты, которые двигаются и вращаются в соответствии с назначенной им движущей силой. Примером твердого тела могут послужить игральные кости или бейсбольный мяч. К мягким телам относятся деформируемые поверхности, например, занавеска, колышущаяся под действием силы ветра, или прыгающий резиновый мячик. Подобный эффект достигается превращением в динамическое тело не всего объекта, а только его управляющих точек (если оно построено на основе NURBS-поверхности) или вершин (если использовалась полигональная сетка. При столкновении или под действием полей эти точки смещаются, вызывая деформации поверхности. В этом уроке будет рассматриваться динамика только твердых тел.
В твердое тело можно проебразовать любой геометрический объект. После преобразования его поверхность начнет испытывать действие полей и сможет принимать участие в столкновениях. При этом поведение объектов в процессе столкновения вычисляется программой исходя их из массы, скорости и других свойств. Существует два типа твердых тел - активные и пассивные. Активные тела реагируют на столкновения с другими объектами и действие полей. В отличие от них пассивные тела неподвижны, хотя могут участвовать в столкновениях. Обычно в роли пассивного тела выступает поверхность.
1. Откроем файл.
2. Преобразуем NURBS объект в Polygons. Выберите в меню Modify>Convert>NURBS to Polygons и щелкаем на квадрат рядом.
3. Для начала выберем в меню Edit>Reset Settings. В настройках преобразования выберем тип преобразования в полигоны Type>Triangles (треугольные полигоны), Tessellation method>General,Initial tessellation controls поставим Per span # of IsoParams для равномерного преобразования в полигоны по всему объекту. Остальные параметры оставим без изменения.
4. Полученный объект переместим в сторону, а предыдущий удалим.
5. Удалим историю создания объекта Edit>Delete By Type>History.
6. В окне диалога Channel Box для полученного объекта сменим имя вместо nurbsToPoly1 напишем glass. Переместим объект в начало координат, изменив значения Translate X, Translate Y, Translate Z на 0. Создадим плоскость, о которую будет разбиваться рюмка Crate>NURBS Primitives>Plane и увеличим ее.
7. Назначим материалы нашим объектам. Выделим плоскость и, удерживая правую кнопку выберем Materials>Assign New Material>Blinn. Аналогично поступим со вторым.
8. Изменим цвет объектов. Выделите плоскость и откройте для нее окно диалога Attribut Editor. В закладке blinn1 измените параметр Color на синий. Аналогично и с рюмкой, только цвет - белый.
9. Нажмите F4 для перехода в режим Dynamics.
10. В меню выберем Effects>Crate Shatter (создать обломки) и щелкаем на квадрат рядом.
11. Для начала выберем в меню Edit>Reset Settings. Выберем тип обломков Surface Shatter (поверхность). Изменим параметр Post Operation на rigid bodies with collisions off, Original Surface на Link to Shards. Теперь наша рюмка - активное тело. В окне диалога Outliner (Window>Outliner...) выберем нашу рюмку и поизменяем параметр Shatter в диалоговом окне Channel Box. Если пареметр включен (On), то объект разбит на части, а если выключен (Off) то как будто никаких изменений над объктом и не происходило. Оставим в положении Off.
12. Зададим начальную скорость по оси Y (Initial Velocity - задает скорость перемещения тела в первый момент анимации. Этот параметр имеет три поля, в каждом из которых указывается скорость движения относительно соответствующей координатной оси) введем значение Initial Velocity Y=-10. Прокрутим анимацию, рюмка пролетает сквозь плоскость.
13. Выделите опорную поверхность и выберите в меню Soft rigid Bodies>Crate Passive Rigid Body. В результате плоскость превратится в пассивное тело, с которым будет сталкиваться наша рюмка. Разумеется, активные и пассивные тела имеют различные атрибуты, но пока мы не будем обращать внимания на них внимания и оставим им заданные по умолчанию значения. Прокрутим анимацию. Рюмка после сталкновения с плоскостью отскочит.
14. Объект превращается в твердое тело в результате добавления ему набора атрибутов, отвечающих за его поведение в процессе имитации динамики. Рассмотрим наиболее важные параметры как активных, так и пассивных тел, участвующих в столкновениях. Mass (Масса) - задает относительную массу твердого тела. Масса является фактически определяющим, какое количество энергии будет передано при столкновении от одного объекта другому. Чем больше масса объекта, тем меньшее усилие ему потребуется, чтобы при столкновении сдвинуть другой объект, сохранив при этом часть собственной энергии для дальнейшего движения. Масса является относительной величиной, то есть если все взаимодействующие объекты имеют одиноковое соотношение масс, имитация динимики будет выглядетьодиниково вне зависимости от абсолютной масы. Bounciness (Упругость) - определяет количество энергии, остающееся у тела после столкновения. Чем больше значение, тем быстрее будет двигаться рикошетировавшее после столкновения тело. Damping (Торможение) - отвечает за уменьшение кинетической энергии в процессе движения тела. Чем больше значение этого параметра, тем быстрее будет уменьшаться скорость объекта. В нашем случае Mass=150, Bounciness=0,1, а Damping=0.
15. Повернем рюмку на градусов 30-50 по оси Z. Прокрутите анимацию.
16. Теперь наша рюмка летит так как надо, но она не разбивается. Изменяем параметр Shatter в диалоговом окне Channel Box на включен (On). Прокрутим анимацию с самого начала. Все тормозит - это из-за того, что наша рюмка уже расколота на части в самом начале и машина уже просчитывает как осколки летят вниз. Изменим параметр обратно на выключен (Off). Нам нужно, чтобы наша рюмка разбилась после соприкосновения с плоскостью. Для этого прокрутим анимацию до того момента, как рюмка косается плоскости и остановим анимацию. Выделяем параметр Shatter в диалоговом окне Channel Box и изменяем его на On, щелкаем правой кнопкой мыши на параметр Shatter и удерживая кнопку ведем курсор на параметр Key Selected, отпускаем кнопку мыши. Мы установили ключ анимации для осколков, но и до этого ключа араметр Shatter остался в положении On. Для того чтоб изменить его на Off, отмотаем на один кадр анимацию и изменим Shatter на Off, добавим ключ анимации. Прокрутим анимацию.
17. Рюмка пролетает сквозь плоскость. Чтобы это исправить в диалоговом окне Attribut Editor в закладке rigidBody в атрибуте Perfomance Attributes изменим параметр Collision Layer на -1.
18. Прокрутив анимацию, рюмка разбивается и осколки летят вверх как-то неестественно. Исправим это, выделим осколки и в меню Fields назначим Gravity, гравитацию.
19. Прокрутим анимацию. Теперь все в норме. Но осколки пересекают друг друга.
20. Для этого поэкпериментируйте с параметром Collisions в диалоговом окне Channel Box точно так же, как и с параметром Shatter.
Финальная анимация здесь.
Будут вопросы - пишите на мыло savenkov_v@mail.ru или на ICQ 171211020.