Выбираем все кости Ы, …, Ь9, в Channel Box выделяем атрибуты RotateY и RotateZ и освобождаем их (Channels=>Break Connection)
Далее, чтобы управлять изгибом крыла, нам, естественно, понадобится еще один дополнительный атрибут на контрольном локаторе (назовем его bend), который мы создадим точно так же, как создавали атрибут wide, например, MEL-командой:
addAttr -In bend - keyable true -at double IWingControl ; Поскольку есть естественное желание, чтобы изгибом всего крыла управлял один атрибут, вы не можете напрямую связать новоявленный атрибут bend с углом поворота костей b# - кости должны по-разному реагировать на одно и то же значение атрибута bend, а именно: чем дальше от тела, тем поворот кости больше. Поэтому связь между атрибутом bend и углами поворота костей мы осуществим с помощью технологии Set Driven Key.
Открываем окно Set Driven Key.
В качестве управляющего объекта (driver) выбираем IWingControl и управляющий атрибут bend.
В качестве управляемых объектов (driven) - кости М, …,Ь9 и управляемый атрибут - rotateZ.
Ставим всего два ключа - при значении bend=0 значение поворота для всех костей b# равно, естественно, нулю, а при bend=1 выставим углы поворотов вручную, руководствуясь такими соображениями: чем дальше от тела, тем угол поворота больше, при этом линия, которую будет образовывать задняя кромка крыла, должна быть похожа скорее не на прямую линию, а на параболу. Впрочем, это дело вкуса…
Ну, и наконец последний, завершающий штрих - изменение Infinity для всех Driven Key кривых - открываем Graph Editor, выделив предварительно кости Ь#, и для всех обнаруженных кривых изменяем значении параметра Рге- и Post Infinity с Constant на Linear (файл wing25.ma).
Ну вот и все. Основные идеи сетапа крыла изложены. Вам осталось только переварить все прочитанное. Естественно, то крыло, которое мы построили, весьма далеко от совершенства. Реальность, как всегда, намного сложнее. И вам придется самостоятельно изменять конструкцию, в зависимости от конкретной задачи, но, тем не менее, надеюсь, что некое понимание устройства крыла у вас все-таки появилось…
Перенос анимации. Навешивание ярлыков. Animation Retargeting. Joint Labelling
Рано или поздно перед вами встанет задача переноса анимации с одного персонажа на другой. Хочу сразу обозначить разницу между переносом анимации (Animation Mapping) и переносом движений (Animation Retargeting). В первом случае вы переносите с одного объекта (или персонажа) на другой именно анимацию, то есть анимационные кривые (в виде клипов) будут перенесены с атрибутов одного персонажа на атрибуты другого. Эта технология реализуется средствами нелинейной анимации и будет описана позже. Она полностью прозрачна и бесхитростна и к тому же не привязана только к скелетам.
Во втором случае между персонажами, а точнее, между скелетами, переносится характер движения. В этом случае используется специальный интеллектуальный солвер (недоступный для редактирования), трансформирующий движение одного скелета в подходящее движение другого. Скелеты при этом могут быть разных пропорций и даже могут иметь разное количество костей, солвер при этом старается максимально эффективно «втиснуть» движение одного персонажа в скелет другого. Этот процесс более интеллектуальный, чем просто перенос анимационных кривых между атрибутами. А самая главная особенность такого переноса движения заключается в том, что перенесенная анимация редактированию не подлежит. Да-да. Перенесенная анимация выглядит как ключи на вращение для всех суставов в каждом кадре. То есть у вас либо получится перенести движение, либо нет. Никаких дальнейших правок.