1 Уроки Maya Иерархия и прямая кинематика 1 Сб Окт 02, 2010 7:00 am
Admin
Admin
Иерархия — это набор объектов со связями между ними, при условии, что объекты объединены между собой по принципу «предок/потомок» (рис. 1). Предок — это объект, который контролирует поведение одного или более потомков. Некоторые предки сами могут контролироваться другими предками, имеющими более высокий уровень иерархии. Потомок — объект, контролируемый предками, который одновременно может оказаться родительским для других потомков, находящихся по иерархии ниже его. У каждого предка может быть много потомков, но всякий потомок имеет только одного предка. Самый верхний объект иерархии (ни для одного другого объекта он не является потомком) управляет всеми объектами иерархии и называется корневым, или Root-объектом.
Подобный способ объединения объектов позволяет настраивать сложные анимационные движения, при которых путем назначения связи «предок/потомок» можно передавать движение от одного объекта к другому — то есть, перемещая один из входящих в иерархическую цепочку объектов, одновременно перемещать и другие объекты, с ним связанные. Классический пример подобной иерархии — нога человека, представляющая собой иерархическую цепочку из нескольких объектов: бедра, голени, ступни и пальцев. Главным в данной структуре является бедро, и его перемещение приводит одновременно к перемещению голени, ступни и пальцев, причем каждый из данных объектов, перемещаясь с бедром, сохраняет возможность двигаться независимо. Например, при ходьбе все объекты цепочки перемещаются в некотором направлении (задаваемым бедром) и одновременно при этом голень, ступня и пальцы совершают вращательные движения, соответствующие сгибанию в суставах.
Назначение или разрушение связей регулируется расположенными на главной панели инструментами SelectandLink (Выделить и связать) и UnlinkSelection (Разорвать связь с выделенным) — рис. 2. Первый позволяет установить связь между дочерним и родительским объектом, а второй — разрушить связь опять же между объектом-потомком и объектом-предком (при этом связи с нижележащими в иерархии дочерними объектами, если таковые существовали, сохраняются). Для связывания объектов в иерархическую структуру вначале активируется инструмент SelectandLink, затем им выделяется самый младший в предполагаемой структуре объект (или сразу несколько объектов, если они должны располагаться на одном иерархическом уровне), и при нажатой левой кнопке мыши указывается объект, который должен стать родительским для данных объектов. Затем выделяется второй снизу в структуре объект, и в отношении него производится точно такая же операция — и так до тех пор, пока не будет установлена связь с Root-объектом. Разорвать связь проще — достаточно выделить объект, связь которого с вышестоящим в иерархии должна быть уничтожена, и щелкнуть на кнопке UnlinkSelection.
Для примера смоделируйте набор из 10 торусов (рис. 3). Для этого проще вначале создать один торус, а затем применить к нему операцию Array (команда Tools=> Array — Инструменты=>Массив) с параметрами как на рис. 4. Соедините все торусы в иерархическую цепочку. Выделите последний торус (Torus10), щелкните на кнопке SelectandLink и, не отпуская кнопку мыши, укажите на Torus09. Курсор при этом должен изменить свою форму, а торус Torus09 на мгновение выделится, что будет свидетельствовать об установлении связи. Выделите Torus09 и точно так же свяжите его с Torus08 — и так далее до Torus01.
Убедиться в том, что нужные связи установлены, можно через окно Select by Name (или Select Parent, вызываемое тем же инструментом, но при активной кнопке Select and Link), где при условии включения флажка Display Subtree объекты будут отображаться с учетом их иерархической структуры (рис. 5). Однако есть лучший способ — можно активировать панель Display (Отображение), отвечающую за управление отображением объектов сцены в окнах проекций, и в свитке LinkDisplay для каждого из объектов включить флажок DisplayLinks (Отображать связи) — рис. 6. Естественно, данную операцию разумнее провести сразу для всех десяти торусов одновременно, предварительно выделив их. Включение названного флажка приведет к тому, что между объектами появятся отображающие направление связей объемные стрелки, правда последние будут плохо видны. Поэтому удобнее временно установить для всех объектов полупрозрачный вариант отображения, включив в свитке DisplayProperties (Свойства отображения) панели Display (Отображение) флажок See-Trough (Видеть насквозь) — объекты станут серыми и полупрозрачными, и связи между ними будут видны гораздо лучше (рис. 7).
Структура иерархий видна также в окне редактора треков TrackView (Просмотр треков), открытом, например, в режиме работы с кривыми (CurveEditor) — рис. 8, где отображаются все объекты сцены (как связанные, так и несвязанные). Несвязанные объекты по умолчанию считаются дочерними по отношению к некоторому вымышленному глобальному объекту (World).
Управление иерархическими цепочками
Положение и ориентация связанных в некую иерархическую структуру объектов не только определяется формой иерархии, но зависит также от выбранного метода управления цепочкой. Таких методов два: прямая кинематика и инверсная (или обратная) кинематика. В случае прямой кинематики иерархические связи передаются от предков к потомкам, то есть дочерние объекты наследуют поведение родительских и с ними происходят те же самые преобразования (перемещение, масштабирование и т.д.). В то же время трансформация потомка не вызывает трансформации родительского объекта. Инверсная кинематика работает по-иному — потомки приводят в движение родительские объекты. Иными словами, задается положение и ориентация потомка, и по этим данным программа сама рассчитывает положение и ориентацию родительских по отношению к потомку объектов. Выбор метода производится на панели Hierarchy (Иерархия) — рис. 9, предназначенной для управления связями. По умолчанию используется метод прямой кинематики — для активирования режима обратной кинематики следует открыть на панели Hierarchy закладку IK и щелкнуть на кнопке Interactive IK.
Рассмотрим отличия поведения связанных объектов в каждом из данных методов на примере созданной иерархической цепочки торусов. Выделите первый в цепочке торус Torus01 и переместите его вверх по оси Y — вместе с ним переместятся и все остальные торусы, являющиеся по отношению к первому торусу дочерними. В то же время перемещение последнего торуса никак не повиляет на остальные, поскольку дочерних объектов у него нет (рис. 10). А теперь активируйте режим инверсной кинематики (кнопка Interactive IK) и повторите те же самые операции с перемещением первого и последнего торусов — перемещение первого торуса даст те же самые результаты, что и ранее, а вот изменение положения последнего элемента иерархии приведет к соответствующим изменениям положения остальных элементов (рис. 11).
Трансформацию цепочки объектов можно анимировать. Войдите в режим создания анимации с автоматической генерацией ключей, переместите ползунок на 50-й кадр и в окне Front переместите Torus10 вверх. После этого перетащите ползунок на последний кадр, верните торус вниз и выйдите из режима автоматической генерации ключей. Проиграв анимацию, вы увидите, что получится приближенная имитация движения реальной цепочки (рис. 12).
Как правило, связанные объекты должны трансформироваться только каким-то определенным образом, то есть все другие варианты трансформаций для них запрещены. Например, конкретный объект в цепочке может перемещаться относительно оси X, но не может двигаться вдоль осей Y и Z, равно как и вращаться или масштабироваться. Установка подобных запретов регулируется через закладку LinkInfo (Информация о связях) — рис. 13 — панели Hierarchy. На данной закладке имеются два свитка: Locks (Запирание) и Inherit (Наследование). Первый отвечает за установку запретов на конкретные виды трансформаций. Второй позволяет регулировать уровень наследования дочерними объектами свойств родительских объектов, то есть определять, какие трансформации и относительно каких осей должен повторять дочерний объект за своим предком. Кроме того, при сборке любой иерархической структуры необходимо сообщить программе, относительно каких центров (то есть опорных точек) вращаются связанные объекты, поскольку по умолчанию вращение производится относительно собственных физических центров объектов, а не точек соединения объектов друг с другом, что далеко не всегда верно. Данный аспект регулируется на закладке Adjust Pivot (Настройка опорной точки) панели Hierarchy.
Чтобы поэкспериментировать с упомянутыми настройками, создайте сцену с механическим манипулятором (рис. 14) — для удобства назовите детали манипулятора в соответствии с приведенным рисунком. Последовательно, начиная с объекта Hand, свяжите все детали друг с другом в соответствии со схемой, приведенной на рис. 15. Теперь по замыслу нужно сделать так, чтобы объекты Arm, Horizontal Shaft и Hand (условно назовем данные объекты штангой) как единое целое могли поворачиваться относительно оси X (это будет соответствовать подъему всей конструкции вверх под некоторым углом), а объект VerticalShaft со всеми своими потомками — относительно оси Z (что будет приводить к развороту манипулятора). Посмотрим, насколько это возможно сразу после связывания при установленной по умолчанию прямой кинематике.
Выделите объект VerticalShaft и поверните его относительно оси Z — он вместе со всеми дочерними объектами развернется требуемым образом (рис. 16). Правда, при условии, что вы окажетесь внимательными и будете визуально ограничивать вращение по другим осям в процессе вращения. Гораздо удобнее и надежнее (хотя и не всегда обязательно) устанавливать запреты на те варианты трансформаций, которые с объектом происходить ни в коем случае не должны. В данном случае объект VerticalShaft не может вращаться по двум другим осям, а также перемещаться и масштабироваться по всем трем осям. Установим названные ограничения: откройте на панели Hierarchy закладку LinkInfo и в свитке Locks включите флажки для всех трансформаций, кроме вращения относительно оси Z (рис. 17). После этого (даже при желании) произвести в отношении объекта VerticalShaft запрещенные трансформации уже не удастся. Выделите теперь объект Arm и разрешите ему поворачиваться относительно оси X, запретив все прочие варианты трансформаций. Поверните данный объект относительно оси X (рис. 18), и вы увидите, что штанга поворачивается не относительно места соединения с объектом Hinge, а относительно собственного физического центра, что неправильно. Поэтому отмените последнюю трансформацию, откройте на панели Hierarchy закладку Adjust Pivot, щелкните на кнопке AffectPivotOnly (Воздействие на центр связывания) — теперь опорная точка находится в физическом центре объекта. Переместите ее в точку соединения с объектом Hinge (рис. 19) и выйдите из режима редактирования опорных точек, щелкнув еще раз на кнопке AffectPivotOnly, — после этого штанга при подъеме уже будет поворачиваться относительно точки соединения с объектом Hinge, что и требовалось (рис. 20).
Теперь движения манипулятора можно анимировать. Отмените последнее действие. Увеличьте число кадров анимации до 200. Переключитесь в 0-й кадр, включите режим автоматического создания анимационных ключей, активируйте 50-й кадр, выделите объект Arm и поверните его на –20° относительно оси X. Перейдите в 100-й кадр, выделите объект VerticalShaft и поверните его на –70° относительно оси Z. В 150-м кадре верните объект Arm в первоначальное положение, а в 200-м кадре верните в первоначальное положение объект VerticalShaft, выйдите из режима генерации ключей. Проиграйте анимацию — манипулятор будет плавно вращаться, поднимая и опуская штангу (рис. 21).
Нередко в качестве составных элементов иерархической цепочки наряду с обычными визуализируемыми объектами используются фиктивные объекты-пустышки — объекты типа Dummy, доступные из категории Helpers панели Create. Данные объекты не отображаются при рендеринге, а в окнах проекций представлены в виде каркасных кубов (рис. 22). Основное назначение объектов Dummy — установка связей между отдельными составляющими сложной иерархической структуры для организации связанной анимации. Например, можно использовать подобный фиктивный объект в качестве центра вращения, связывая с ним множество различных визуализируемых объектов — тогда при вращении фиктивного объекта будут вращаться и все связанные с ним другие объекты. Другим широко распространенным направлением применения Dummy-объектов является анимация нацеленных камер и источников света. В таком случае объект-пустышка и камера (или источник света) связываются в иерархическую структуру, где камера с мишенью является потомком фиктивного объекта. После этого достаточно будет назначить траекторию движения объекту-пустышке с его автоматическим поворачиванием в соответствии с направлением вектора движения (флажок Follow в свитке PathParameters панели Motion), и это обеспечит автоматическое следование камеры за фиктивным объектом. Причем направление мишени камеры всегда будет соответствовать направлению вектора движения, а сама камера будет следовать за объектом на указанном расстоянии, автоматически настраивая позиционирование.
Для примера перезагрузите сцену (команда File=> Reset) и создайте произвольный криволинейный сплайн, объект типа Dummy (команда Create=>Helpers=> Dummy) и произвольный сложный объект, предназначенный для перемещения по сплайну (мы остановились на группе объектов в виде куба и двух шаров) — рис. 23. Выберите объект-пустышку и примените к нему команду Animation=>Constraints=>PathConstraint (Анимация=>Ограничения=>Ограничения пути), указав в одном из окон проекций сплайн пути. Откройте панель Motion (Движение) и в свитке PathParameters (Параметры пути) установите флажок для параметра Follow (Следовать) — рис. 24. Данное действие обеспечит не только следование объекта-пустышки вдоль пути, но и его автоматическое поворачивание в соответствии с направлением вектора движения. При необходимости отрегулируйте положение фиктивного объекта в нулевом кадре так, чтобы он располагался на спирали. Теперь нужно настроить движение основного объекта (то есть куба с двумя шарами) — это можно реализовать и без объекта Dummy, но на практике внедрение в сцену фиктивного объекта, которому непосредственно и назначается перемещение, часто заметно упрощает управление сложными объектами, поэтому мы пойдем по данному пути. Выделите все три элемента основного объекта (то есть куб и два шара) и свяжите их с объектом Dummy, а затем выровняйте относительно него по всем трем осям. Проиграйте анимацию и убедитесь, что основной объект полностью унаследовал особенности перемещения фиктивного объекта, так как движется по спирали задуманным образом (рис. 25).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 1. Пример иерархической цепочки из десяти сфер
Рис. 1. Пример иерархической цепочки из десяти сфер
Подобный способ объединения объектов позволяет настраивать сложные анимационные движения, при которых путем назначения связи «предок/потомок» можно передавать движение от одного объекта к другому — то есть, перемещая один из входящих в иерархическую цепочку объектов, одновременно перемещать и другие объекты, с ним связанные. Классический пример подобной иерархии — нога человека, представляющая собой иерархическую цепочку из нескольких объектов: бедра, голени, ступни и пальцев. Главным в данной структуре является бедро, и его перемещение приводит одновременно к перемещению голени, ступни и пальцев, причем каждый из данных объектов, перемещаясь с бедром, сохраняет возможность двигаться независимо. Например, при ходьбе все объекты цепочки перемещаются в некотором направлении (задаваемым бедром) и одновременно при этом голень, ступня и пальцы совершают вращательные движения, соответствующие сгибанию в суставах.
Назначение или разрушение связей регулируется расположенными на главной панели инструментами SelectandLink (Выделить и связать) и UnlinkSelection (Разорвать связь с выделенным) — рис. 2. Первый позволяет установить связь между дочерним и родительским объектом, а второй — разрушить связь опять же между объектом-потомком и объектом-предком (при этом связи с нижележащими в иерархии дочерними объектами, если таковые существовали, сохраняются). Для связывания объектов в иерархическую структуру вначале активируется инструмент SelectandLink, затем им выделяется самый младший в предполагаемой структуре объект (или сразу несколько объектов, если они должны располагаться на одном иерархическом уровне), и при нажатой левой кнопке мыши указывается объект, который должен стать родительским для данных объектов. Затем выделяется второй снизу в структуре объект, и в отношении него производится точно такая же операция — и так до тех пор, пока не будет установлена связь с Root-объектом. Разорвать связь проще — достаточно выделить объект, связь которого с вышестоящим в иерархии должна быть уничтожена, и щелкнуть на кнопке UnlinkSelection.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 2. Кнопки SelectandLink и UnlinkSelection
Рис. 2. Кнопки SelectandLink и UnlinkSelection
Для примера смоделируйте набор из 10 торусов (рис. 3). Для этого проще вначале создать один торус, а затем применить к нему операцию Array (команда Tools=> Array — Инструменты=>Массив) с параметрами как на рис. 4. Соедините все торусы в иерархическую цепочку. Выделите последний торус (Torus10), щелкните на кнопке SelectandLink и, не отпуская кнопку мыши, укажите на Torus09. Курсор при этом должен изменить свою форму, а торус Torus09 на мгновение выделится, что будет свидетельствовать об установлении связи. Выделите Torus09 и точно так же свяжите его с Torus08 — и так далее до Torus01.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 3. Исходный набор торусов
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 4. Параметры настройки операции Array
Рис. 3. Исходный набор торусов
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 4. Параметры настройки операции Array
Убедиться в том, что нужные связи установлены, можно через окно Select by Name (или Select Parent, вызываемое тем же инструментом, но при активной кнопке Select and Link), где при условии включения флажка Display Subtree объекты будут отображаться с учетом их иерархической структуры (рис. 5). Однако есть лучший способ — можно активировать панель Display (Отображение), отвечающую за управление отображением объектов сцены в окнах проекций, и в свитке LinkDisplay для каждого из объектов включить флажок DisplayLinks (Отображать связи) — рис. 6. Естественно, данную операцию разумнее провести сразу для всех десяти торусов одновременно, предварительно выделив их. Включение названного флажка приведет к тому, что между объектами появятся отображающие направление связей объемные стрелки, правда последние будут плохо видны. Поэтому удобнее временно установить для всех объектов полупрозрачный вариант отображения, включив в свитке DisplayProperties (Свойства отображения) панели Display (Отображение) флажок See-Trough (Видеть насквозь) — объекты станут серыми и полупрозрачными, и связи между ними будут видны гораздо лучше (рис. 7).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 5. Вид иерархической цепочки в окне Select Parent
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 6. Включение опции DisplayLinks
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 7. Вид объектов после изменения варианта их отображения
Рис. 5. Вид иерархической цепочки в окне Select Parent
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 6. Включение опции DisplayLinks
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 7. Вид объектов после изменения варианта их отображения
Структура иерархий видна также в окне редактора треков TrackView (Просмотр треков), открытом, например, в режиме работы с кривыми (CurveEditor) — рис. 8, где отображаются все объекты сцены (как связанные, так и несвязанные). Несвязанные объекты по умолчанию считаются дочерними по отношению к некоторому вымышленному глобальному объекту (World).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 8. Окно Track View — Curve Editor с иерархической цепочкой
Рис. 8. Окно Track View — Curve Editor с иерархической цепочкой
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] |
Положение и ориентация связанных в некую иерархическую структуру объектов не только определяется формой иерархии, но зависит также от выбранного метода управления цепочкой. Таких методов два: прямая кинематика и инверсная (или обратная) кинематика. В случае прямой кинематики иерархические связи передаются от предков к потомкам, то есть дочерние объекты наследуют поведение родительских и с ними происходят те же самые преобразования (перемещение, масштабирование и т.д.). В то же время трансформация потомка не вызывает трансформации родительского объекта. Инверсная кинематика работает по-иному — потомки приводят в движение родительские объекты. Иными словами, задается положение и ориентация потомка, и по этим данным программа сама рассчитывает положение и ориентацию родительских по отношению к потомку объектов. Выбор метода производится на панели Hierarchy (Иерархия) — рис. 9, предназначенной для управления связями. По умолчанию используется метод прямой кинематики — для активирования режима обратной кинематики следует открыть на панели Hierarchy закладку IK и щелкнуть на кнопке Interactive IK.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 9. Панель Hierarchy
Рис. 9. Панель Hierarchy
Рассмотрим отличия поведения связанных объектов в каждом из данных методов на примере созданной иерархической цепочки торусов. Выделите первый в цепочке торус Torus01 и переместите его вверх по оси Y — вместе с ним переместятся и все остальные торусы, являющиеся по отношению к первому торусу дочерними. В то же время перемещение последнего торуса никак не повиляет на остальные, поскольку дочерних объектов у него нет (рис. 10). А теперь активируйте режим инверсной кинематики (кнопка Interactive IK) и повторите те же самые операции с перемещением первого и последнего торусов — перемещение первого торуса даст те же самые результаты, что и ранее, а вот изменение положения последнего элемента иерархии приведет к соответствующим изменениям положения остальных элементов (рис. 11).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 10. Поведение объектов в случае прямой кинематики — при перемещении первого (слева) и последнего (справа) торусов
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 11. Поведение объектов в случае обратной кинематики — при перемещении первого (слева) и последнего (справа) торусов
Рис. 10. Поведение объектов в случае прямой кинематики — при перемещении первого (слева) и последнего (справа) торусов
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 11. Поведение объектов в случае обратной кинематики — при перемещении первого (слева) и последнего (справа) торусов
Трансформацию цепочки объектов можно анимировать. Войдите в режим создания анимации с автоматической генерацией ключей, переместите ползунок на 50-й кадр и в окне Front переместите Torus10 вверх. После этого перетащите ползунок на последний кадр, верните торус вниз и выйдите из режима автоматической генерации ключей. Проиграв анимацию, вы увидите, что получится приближенная имитация движения реальной цепочки (рис. 12).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 12. Вид сцены в одном из промежуточных кадров анимации
Рис. 12. Вид сцены в одном из промежуточных кадров анимации
Как правило, связанные объекты должны трансформироваться только каким-то определенным образом, то есть все другие варианты трансформаций для них запрещены. Например, конкретный объект в цепочке может перемещаться относительно оси X, но не может двигаться вдоль осей Y и Z, равно как и вращаться или масштабироваться. Установка подобных запретов регулируется через закладку LinkInfo (Информация о связях) — рис. 13 — панели Hierarchy. На данной закладке имеются два свитка: Locks (Запирание) и Inherit (Наследование). Первый отвечает за установку запретов на конкретные виды трансформаций. Второй позволяет регулировать уровень наследования дочерними объектами свойств родительских объектов, то есть определять, какие трансформации и относительно каких осей должен повторять дочерний объект за своим предком. Кроме того, при сборке любой иерархической структуры необходимо сообщить программе, относительно каких центров (то есть опорных точек) вращаются связанные объекты, поскольку по умолчанию вращение производится относительно собственных физических центров объектов, а не точек соединения объектов друг с другом, что далеко не всегда верно. Данный аспект регулируется на закладке Adjust Pivot (Настройка опорной точки) панели Hierarchy.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 13. Закладка LinkInfo
Рис. 13. Закладка LinkInfo
Чтобы поэкспериментировать с упомянутыми настройками, создайте сцену с механическим манипулятором (рис. 14) — для удобства назовите детали манипулятора в соответствии с приведенным рисунком. Последовательно, начиная с объекта Hand, свяжите все детали друг с другом в соответствии со схемой, приведенной на рис. 15. Теперь по замыслу нужно сделать так, чтобы объекты Arm, Horizontal Shaft и Hand (условно назовем данные объекты штангой) как единое целое могли поворачиваться относительно оси X (это будет соответствовать подъему всей конструкции вверх под некоторым углом), а объект VerticalShaft со всеми своими потомками — относительно оси Z (что будет приводить к развороту манипулятора). Посмотрим, насколько это возможно сразу после связывания при установленной по умолчанию прямой кинематике.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 14. Исходный вид манипулятора
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 15. Иерархическая цепочка, соответствующая манипулятору
Рис. 14. Исходный вид манипулятора
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 15. Иерархическая цепочка, соответствующая манипулятору
Выделите объект VerticalShaft и поверните его относительно оси Z — он вместе со всеми дочерними объектами развернется требуемым образом (рис. 16). Правда, при условии, что вы окажетесь внимательными и будете визуально ограничивать вращение по другим осям в процессе вращения. Гораздо удобнее и надежнее (хотя и не всегда обязательно) устанавливать запреты на те варианты трансформаций, которые с объектом происходить ни в коем случае не должны. В данном случае объект VerticalShaft не может вращаться по двум другим осям, а также перемещаться и масштабироваться по всем трем осям. Установим названные ограничения: откройте на панели Hierarchy закладку LinkInfo и в свитке Locks включите флажки для всех трансформаций, кроме вращения относительно оси Z (рис. 17). После этого (даже при желании) произвести в отношении объекта VerticalShaft запрещенные трансформации уже не удастся. Выделите теперь объект Arm и разрешите ему поворачиваться относительно оси X, запретив все прочие варианты трансформаций. Поверните данный объект относительно оси X (рис. 18), и вы увидите, что штанга поворачивается не относительно места соединения с объектом Hinge, а относительно собственного физического центра, что неправильно. Поэтому отмените последнюю трансформацию, откройте на панели Hierarchy закладку Adjust Pivot, щелкните на кнопке AffectPivotOnly (Воздействие на центр связывания) — теперь опорная точка находится в физическом центре объекта. Переместите ее в точку соединения с объектом Hinge (рис. 19) и выйдите из режима редактирования опорных точек, щелкнув еще раз на кнопке AffectPivotOnly, — после этого штанга при подъеме уже будет поворачиваться относительно точки соединения с объектом Hinge, что и требовалось (рис. 20).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 16. Результат поворота объекта VerticalShaft
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 17. Настройка запретов для объекта VerticalShaft
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 18. Результат поворота объекта Arm до перемещения опорной точки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 19. Положение опорной точки: изначально (слева) и после перемещения (справа)
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 20. Результат поворота объекта Arm после перемещения опорной точки
Рис. 16. Результат поворота объекта VerticalShaft
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 17. Настройка запретов для объекта VerticalShaft
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 18. Результат поворота объекта Arm до перемещения опорной точки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 19. Положение опорной точки: изначально (слева) и после перемещения (справа)
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 20. Результат поворота объекта Arm после перемещения опорной точки
Теперь движения манипулятора можно анимировать. Отмените последнее действие. Увеличьте число кадров анимации до 200. Переключитесь в 0-й кадр, включите режим автоматического создания анимационных ключей, активируйте 50-й кадр, выделите объект Arm и поверните его на –20° относительно оси X. Перейдите в 100-й кадр, выделите объект VerticalShaft и поверните его на –70° относительно оси Z. В 150-м кадре верните объект Arm в первоначальное положение, а в 200-м кадре верните в первоначальное положение объект VerticalShaft, выйдите из режима генерации ключей. Проиграйте анимацию — манипулятор будет плавно вращаться, поднимая и опуская штангу (рис. 21).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 21. Вид манипулятора в одном из кадров анимации
Рис. 21. Вид манипулятора в одном из кадров анимации
Нередко в качестве составных элементов иерархической цепочки наряду с обычными визуализируемыми объектами используются фиктивные объекты-пустышки — объекты типа Dummy, доступные из категории Helpers панели Create. Данные объекты не отображаются при рендеринге, а в окнах проекций представлены в виде каркасных кубов (рис. 22). Основное назначение объектов Dummy — установка связей между отдельными составляющими сложной иерархической структуры для организации связанной анимации. Например, можно использовать подобный фиктивный объект в качестве центра вращения, связывая с ним множество различных визуализируемых объектов — тогда при вращении фиктивного объекта будут вращаться и все связанные с ним другие объекты. Другим широко распространенным направлением применения Dummy-объектов является анимация нацеленных камер и источников света. В таком случае объект-пустышка и камера (или источник света) связываются в иерархическую структуру, где камера с мишенью является потомком фиктивного объекта. После этого достаточно будет назначить траекторию движения объекту-пустышке с его автоматическим поворачиванием в соответствии с направлением вектора движения (флажок Follow в свитке PathParameters панели Motion), и это обеспечит автоматическое следование камеры за фиктивным объектом. Причем направление мишени камеры всегда будет соответствовать направлению вектора движения, а сама камера будет следовать за объектом на указанном расстоянии, автоматически настраивая позиционирование.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 22. Отображение фиктивного объекта в окне проекции Perspective
Рис. 22. Отображение фиктивного объекта в окне проекции Perspective
Для примера перезагрузите сцену (команда File=> Reset) и создайте произвольный криволинейный сплайн, объект типа Dummy (команда Create=>Helpers=> Dummy) и произвольный сложный объект, предназначенный для перемещения по сплайну (мы остановились на группе объектов в виде куба и двух шаров) — рис. 23. Выберите объект-пустышку и примените к нему команду Animation=>Constraints=>PathConstraint (Анимация=>Ограничения=>Ограничения пути), указав в одном из окон проекций сплайн пути. Откройте панель Motion (Движение) и в свитке PathParameters (Параметры пути) установите флажок для параметра Follow (Следовать) — рис. 24. Данное действие обеспечит не только следование объекта-пустышки вдоль пути, но и его автоматическое поворачивание в соответствии с направлением вектора движения. При необходимости отрегулируйте положение фиктивного объекта в нулевом кадре так, чтобы он располагался на спирали. Теперь нужно настроить движение основного объекта (то есть куба с двумя шарами) — это можно реализовать и без объекта Dummy, но на практике внедрение в сцену фиктивного объекта, которому непосредственно и назначается перемещение, часто заметно упрощает управление сложными объектами, поэтому мы пойдем по данному пути. Выделите все три элемента основного объекта (то есть куб и два шара) и свяжите их с объектом Dummy, а затем выровняйте относительно него по всем трем осям. Проиграйте анимацию и убедитесь, что основной объект полностью унаследовал особенности перемещения фиктивного объекта, так как движется по спирали задуманным образом (рис. 25).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 23. Исходный вид сцены
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 24. Настройка параметров движения объекта Dummy
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 25. Вид сцены в нескольких кадрах анимации
]Рис. 23. Исходный вид сцены
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 24. Настройка параметров движения объекта Dummy
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 25. Вид сцены в нескольких кадрах анимации