3D Studio MAX: первые шаги. Урок 22. Инверсная кинематика

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

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

Понятие инверсной кинематики

Управление вращением и перемещением объектов

Настройка пределов ограничений

Назначение приоритетов

Блокирование IK-сетей

Анимация объектов при обратной кинематике

Примеры моделирования и анимации объектов с учетом инверсной кинематики

Крутящаяся булава

Свисающие бусы

Анимированная лампа

Поднимающийся кузов

Анимированная лампа

Воспользуемся инверсной кинематикой для моделирования и анимирования настольной лампы, меняющей свою форму благодаря наличию соответствующих технических конструкций. Создайте упрощенную модель подобной лампы (рис. 47). Выделите указанные на рис. 48 объекты и объедините их в группу. Соедините все объекты в иерархическую структуру, начиная с объекта Lamp и заканчивая объектом Base (рис. 49). Выделите объект Joint1, из меню Animation=> IK Solvers выберите команду HI Solver и укажите мышью на объект Joint7 — данные объекты окажутся связанными в IK-цепь (рис. 50). Для того чтобы конструкции вращались требуемым образом, откорректируйте положение опорных точек для объектов Group01 и Cylinder4. Вначале выделите объект Group01, откройте на панели Hierarchy закладку AdjustPivot, щелкните на кнопке AffectPivotOnly и переместите опорную точку в нижнюю часть конструкции, затем аналогичную операцию проведите в отношении Cylinder4 и выйдите из режима редактирования опорных точек, повторно щелкнув на кнопке AffectPivotOnly (рис. 51). Учитывая, что объект Base при раздвигании/сдвигании конструкций лампы не должен поворачиваться, выделите его и отключите для него в свитке RotationalJoint s флажки Active для всех трех осей (рис. 52).

 

Рис. 47. Исходная сцена

Рис. 47. Исходная сцена

 

Рис. 48. Объединение объектов в группу

Рис. 48. Объединение объектов в группу

 

Рис. 49. Вид иерархической цепочки

Рис. 49. Вид иерархической цепочки

 

Рис. 50. Формирование IK -цепи

Рис. 50. Формирование IK -цепи

 

Рис. 51. Редактирование положения опорных точек

Рис. 51. Редактирование положения опорных точек

 

Рис. 52. Корректировка параметров свитка RotationalJoints для объекта Base

Рис. 52. Корректировка параметров свитка RotationalJoints для объекта Base

 

Активируйте 1-й кадр, перетащите объект Base влево, чтобы лампа согнулась требуемым образом, а затем выделите перекрестие IK-цепи и переместите его вниз, добиваясь нужного угла наклона конструкций (рис. 53). Переключитесь в режим автоматического генерирования ключевых кадров, активируйте 50-й кадр и полностью раздвиньте конструкции лампы, применив вышеназванные приемы перемещения объекта Base и перекрестия. В последнем кадре восстановите исходную форму лампы (то есть ту, что была определена для 1-го кадра). Проиграйте анимацию, и вы увидите, что лампа меняет свою форму, вначале разгибаясь, а потом сгибаясь. Настройте для сцены освещение — в простейшем случае можно обойтись тремя источниками света: одним Omni-источником для общего освещения сцены и двумя дополнительными направленными Spot-источниками для формирования рассеянного освещения. Кроме того, придется предусмотреть источник для имитации света самой лампы — мы остановились на направленном Spot-источнике, который нужно разместить внутри абажура лампы (рис. 54 и 55). Назначьте сцене эффект объемного света на вкладке Atmosphere (Атмосфера), применив команду Rendering=>Environment (Визуализация=>Окружение), щелкнув на кнопке Add (Добавить) и выбрав эффект VolumeLight. В области VolumeLightParameters окна EnvironmentandEffects щелкните на кнопке PickLight (Указать источник), укажите на любом из видовых экранов прожектор, находящийся внутри лампы, и измените параметры эффекта в соответствии с рис. 56. Для того чтобы в процессе анимации лампы находящийся внутри нее источник света менял свое положение и ориентацию в соответствии с самой ламой, свяжите его с объектом Lamp. По окончании текстурируйте все объекты сцены, возможный вид которой в некоторых кадрах анимации представлен на рис. 57.

 

Рис. 53. Изменение положения перекрестия IK-цепи для 1-го кадра

Рис. 53. Изменение положения перекрестия IK-цепи для 1-го кадра

 

Рис. 54. Размещение на сцене источников света

Рис. 54. Размещение на сцене источников света

 

Рис. 55. Параметры настройки источника света, расположенного внутри лампы

Рис. 55. Параметры настройки источника света, расположенного внутри лампы

 

Рис. 56. Настройка параметров эффекта VolumeLight

Рис. 56. Настройка параметров эффекта VolumeLight

 

Рис. 57. Анимированная лампа

Рис. 57. Анимированная лампа

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

Поднимающийся кузов

Используем возможности инверсной кинематики для создания анимации поднимающегося кузова грузовика. В целях ускорения процесса ограничимся лишь упрощенной имитацией кузова, которую дополним поршневой системой, предназначенной для решения поставленной задачи. Данная система будет состоять из трех вложенных цилиндров одинаковой длины. Кроме того, в сцене будут присутствовать два фиктивных объекта: первый станет Root-объектом для системы цилиндров, а второй будет использоваться для связи поршневой системы с кузовом (рис. 58). Данные объекты должны быть объединены в две иерархических цепочки: первую составят три цилиндра поршневой системы и объект Dummy01, а вторую — сам кузов вместе с объектом Dummy02 (рис. 59).

 

Рис. 58. Исходная сцена

Рис. 58. Исходная сцена

 

Рис. 59. Вид иерархической цепочки

Рис. 59. Вид иерархической цепочки

 

Поскольку трансформации цилиндров должны быть ограничены в плане не только вращения, но и скольжения, придется назначить им IK-контроллер. Поэтому выделите Cylinder03, из меню Animation=> IK Solvers выберите команду HD Solver и укажите мышью на объект Dummy01. Выделите Cylinder03 и на панели Hierarchy в свитке Rotational Joints отключите флажки Active для всех трех осей. Аналогичные операции проведите в отношении двух других цилиндров — в итоге для каждого из них будут запрещены любые варианты вращений. Выделите объект Dummy01 и разрешите ему вращение только относительно оси Y, включив в свитке Rotational Joints для данной оси флажок Active и отключив флажки для двух других осей (рис. 60). Выделите объект Cylinder01 и в свитке SlidingJoints запретите для него скольжение относительно любой из осей, отключив флажки Active. Для двух других цилиндров разрешите скольжение только вдоль оси Z. Теперь нужно подобрать пределы ограничений для скольжения цилиндров Cylinder02 и Cylinder03. Активируйте окно проекции Left, выделите объект Cylinder02 и при нажатой клавише Ctrl подберите для него ограничения скольжения в полях From и To (флажок Limited) так, чтобы данный цилиндр справа не выходил за пределы цилиндра Cylinder01, а слева выдвигался на большую часть своей длины. В нашем случае мы остановились на значениях –0,7 и –50 для полей From и To соответственно (рис. 61), но в каждом конкретном примере эти значения будут свои, поскольку они зависят как от длины цилиндра, так и от того, насколько требуется его выдвигать. Руководствуясь теми же принципами, подберите пределы ограничений для объекта Cylinder03. После этого включите для объектов Cylinder02 и Cylinder03 флажки Limited и протестируйте результаты настройки пределов ограничений путем перемещения влево объекта Cylinder03 — если пределы ограничений скольжения были установлены удачно, то оба цилиндра должны оказаться полностью выдвинутыми (рис. 62). Отмените перемещение и (при необходимости) подкорректируйте пределы ограничений скольжения.

 

Рис. 60. Параметры настройки свитка RotationalJoints для объекта Dummy01

Рис. 60. Параметры настройки свитка RotationalJoints для объекта Dummy01

 

Рис. 61. Параметры настройки свитка SlidingJoints для объекта Cylinder02

Рис. 61. Параметры настройки свитка SlidingJoints для объекта Cylinder02

 

Рис. 62. Вид цилиндров при полном выдвижении

Рис. 62. Вид цилиндров при полном выдвижении

 

Теперь необходимо связать между собой две иерархические цепочки. Для этого выделите объект Cylinder03, откройте на закладке IK панели Hierarchy свиток ObjectParameters, щелкните на кнопке Bind и свяжите данный цилиндр с объектом Dummy02 (рис. 63). Выделите кузов и попробуйте повращать его в проекции Left относительно оси Z — к сожалению, вращаться он будет совсем не так, как требуется, из-за неверного положения опорной точки. Поэтому отмените последнюю трансформацию, откройте на панели Hierarchy закладку AdjustPivot и щелкните на кнопке AffectPivotOnly. Переместите опорную точку в нижний левый край кузова (рис. 64) и выйдите из режима редактирования опорных точек, щелкнув еще раз на кнопке AffectPivotOnly, после этого кузов будет поворачиваться уже так, как это необходимо. Выделите кузов, активируйте режим автоматической генерации ключевых кадров, перетащите ползунок на 50-й кадр и поверните кузов на требуемый угол (рис. 65). Перейдите в последний кадр, опустите кузов и выйдите из режима автоматической генерации ключевых кадров. Проиграйте анимацию, возможный вид которой в нескольких ключевых кадрах представлен на рис. 66. По окончании добавьте к кузову прочие составляющие грузовика и текстурируйте сцену — возможный вид полученной в итоге анимации представлен на рис. 67.

 

Рис. 63. Свиток ObjectParameters для объекта Cylinder03 после связывания его с объектом Dummy02

Рис. 63. Свиток ObjectParameters для объекта Cylinder03 после связывания его с объектом Dummy02

 

Рис. 64. Перемещение опорной точки

Рис. 64. Перемещение опорной точки

 

Рис. 65. Положение кузова в 50-м кадре

Рис. 65. Положение кузова в 50-м кадре

 

Рис. 66. Поднимающийся кузов

Рис. 66. Поднимающийся кузов

 

Рис. 67. Грузовик с поднимающимся кузовом

Рис. 67. Грузовик с поднимающимся кузовом

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

КомпьютерПресс 12'2007


Наш канал на 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
Популярные статьи
КомпьютерПресс использует