Управление крылом Для управления передней кромкой крыла мы применим самый примитивный способ - точно такой же, какой применяется для управления рукой.
Во-первых, назначим ikHandle на первые две кости передней кромки крыла. Обратите внимание, что мы будем использовать ikRPSolver, чтобы иметь полный контроль над местоположением «локтя» при сгибе передней кромки крыла.
Для реализации этого управления создадим локатор , который назовем, например, IPoleV-ectorControl.
Поместим его в место соединения первой и второй кости передней кромки крыла, используя все ту же привязку к точке (snap to point).
Выполним Freeze Transformation для этого локатора, чтобы обнулить значения атрибутов transtateX, translateY и translateZ.
Затем воспользуемся констрейном типа Pole Vector для ориентации направления сгиба IK Handle передней кромки крыла (файл wing11.ma).
Теперь самое время создать контрольный элемент, управляющий работой крыла. Часто для этой цели используют кривую, но можно обойтись и просто локатором.
Итак, создадим локатор, который назовем, например, IWingControl поместим его в место сочленения второй и третьей кости передней кромки крыла, (там сейчас находится ikHandlel), используя привязку к точке.
Выполним Freeze Transformation для IWingControl.
Затем с помощью Point Constaint прикрепим ikHandlel к нашему контрольному локатору. Убедившись, что ikHandlel правильно реагирует перемещение контрольных локаторов IWingControl и IPoleVectorControl, можно теперь сам ikHAndlel спрятать (Hide), чтобы он не «путался под ногами».
Теперь займемся управлением «кистью» третьей костью передней кромки крыла. Естественно, хотелось бы, чтобы эта последняя кость вращалась при вращении управляющего локатора, и такая синхронизация легко достигается согласованием вращений с помощью Orient Constraint, однако хотелось бы сохранить нулевые значения поворотов контрольного локатора при имеющемся взаимном расположении костей скелета, а это значит, что «напрямую» воспользоваться им (то бишь констрейном Orient Constraint) не удастся. Мы выполним согласование вращений кости и контрольного локатора через вспомогательный объект - локатор-«посредник». Можно было бы воспользоваться для этой цели и пустой трансформ-нодой, но мне больше нравится, когда все элементы сетапа, даже вспомогательные, имеют какое-то «материальное воплощение».
Итак, создаем локатор-«посредник» IWingAdd.
Припарентим его к контрольному локатору IWingControl.
Затем совмещаем его положение с контрольным локатором IWingControl.
И, наконец, с помощью Orient Constaint сориентируем наш локатор-«посредник» вдоль интересующей нас третьей кости передней кромки крыла.
В результате получается: кость и локатор ориентированы одинаково, однако связь между ними абсолютно неправильная - сейчас кость управляет поворотом локатора «посредника», а нам нужно ровно наоборот (файл wing12.ma).
Поэтому разрываем связь между между локатором-«посредником» и костью, просто «убив» в Outliner соответствующую ноду констрейна Orient Constraint.
Заблокируем (Lock) атрибут translate локатора-«посредника» в Channel Box.