«Big Buck Bunny»: риг птицы

Это существо появляется на экране всего три раза. Им мультфильм, как мы помним, начинается, им же потом заканчивается, и однажды оно появляется в середине, чтобы потерять сознание от удара жёлудем по голове. Роль эпизодическая, но рассмотреть актрису по косточкам мы всё-таки должны. Тем более, что там имеется немало интересного.

Открыв файл bird.blend в том виде, в каком его сохранили в Амстердаме в апреле 2008 года, мы обнаруживаем модель птицы с очень скудным набором костей. Подозревая, что на самом деле так не бывает, и от нас что-то скрывают, мы переходим в панель костей и включаем там слои с 1-го по 13-й. Для вьюпорта достаточно будет оставить включёнными только слои 2 и 12. Теперь на наших жидкокристаллических экранах предстаёт более правдоподобный вид (в Pose Mode, конечно):


Здесь мы видим скелет из костей столь разных цветов, что они украшивают птицу, словно новогоднюю ёлку. Вспомним, что означают те или иные цвета в спецификации Blender:

Серый — просто кость.

Голубой — кость содержит анимационные ключи, то есть связана с какой-либо анимационной кривой.

Зелёный — кость содержит констрейн (любой, кроме IK).

Жёлтый — кость содержит констрейн инверсной кинематики IK.

Взяв всё это на заметку, будем изучать риг птицы от простого к сложному, то есть снизу вверх. Но сперва сделаем ещё одно моральное подготовление.

Откройте где-нибудь в отдельном окошке Action Editor и переместите курсор времени на несколько кадров вперёд. Вы увидите, как птица изгибается в изящной балеринской позе. Это был тест рига в режиме анимации, созданный гениями из Peach Project, и нам он не нужен, потому что будет всё только запутывать. Вернитесь в кадр 1 и в нижней части окошка разорвите связь с action под названием test. Всё, теперь птица больше не двигается, а многие голубые кости стали серыми. Можно изучать риг.

Вернёмся во вьюпорт.

Большой круглый шейп в виде розы ветров представляет собой, как обычно, главную кость рига Root. Оттащим её немного в сторону и увидим, что всё оказалось далеко не так просто, как мы хотели.

Эх, лучше бы мы всё-таки начали сверху...

Будем выяснять, зачем птице понадобился внутри одного скелета ещё один, и почему нельзя было обойтись одним. Но сперва попробуем ещё одну вещь, а точнее две. Внизу левого скелета есть главная кость Root.001 (она расположена как раз посередине). Оттащим её ещё левее. Скелет отодвинулся, но глаза остались на месте. На самом первом скелете, который справа, есть очкообразный контроллер для управления глазами. Попробуем его пошевелить — и вместе с ним поворачиваются отдельно расположенные глаза!


Короче говоря, всё становится ещё сложнее.

Похоже, что такой сумасшедший риг можно было придумать только в Амстердаме (не будем уточнять, почему). Если в попытках докопаться до истины мы попытаемся открыть какой-нибудь файл с анимацией птицы, например, \scenes\01_intro\03.blend, то нам станет совсем плохо:


Подобная картина встречается и во всех остальных файлах с анимацией птицы. Выходит, в риге что-то не так? Возможно. Но более вероятно, что в той версии Blender, в которой создавался мультфильм, этих несуразиц не было, однако к версии 2.49b что-то изменилось, и риг теперь нужно корректировать. На это указывает ещё и то, что к видеотутору "Learn Character Animation with Blender" прилагается файл с птицей, содержащий точно такие же проблемы.

Раз так, то нам не остаётся ничего другого, кроме как не обращать на это внимания и продолжать изучать риг дальше. Для особо дотошных могу предложить такой вариант восстановления работоспособности глаз птицы. Нужно включить слой 13 во вьюпорте, выбрать объекты Lattice и Lattice.000, которые превращают полигональные шары в овальную форму глаз, отпарентить их от скелета и припаренть к кости головы. После отпаренчивания глаза вдруг резко увеличатся в размерах и ускачат в пространстве куда-то далеко (что указает на то, что риг создавался сперва в большом масштабе, а потом уменьшался, чего делать лучше не следует), и надо будет их уменьшить, а потом вернуть назад в глазницы.

Что касается второго скелета, то в анимации он нигде не используется, и предназначение его остаётся смутным. Может быть, он служил каким-то вспомогательным средством для аниматора во время процесса анимации. А, может, всё дело в специфичности города, в котором создавался мультфильм. :)

Итак, после некоторой заминки продолжим исследование рига.

Вернём сначала птицу в первоначальное состояние. Но чтобы второй скелет нам не мешал, оттащим его, как и раньше, куда-нибудь в сторону за кость Root.001. Теперь взглянем на лапы. Их управление не представляет из себя ничего сложного. У каждой лапы есть кость CTRL_Foot.L для левой ноги, либо CTRL_Foot.R для правой, которые участвуют в цепочке IK-констрейна (на что указывает жёлтый цвет кости), прикреплённого к соседним костям MCH_Shin.L и MCH_Shin.R соотвественно. Таким образом, лапы управляются при помощи инверсной кинематики и никогда из этого режима не выходят.

А теперь приблизим одну из лап и пристально взглянем на пальцы, потому что уж как-то подозрительного много в них костей. Выключим на панели костей все слои, кроме первого, и это оставит нам всего по одной кости на каждом пальце. На первый взгляд такой подход выглядит кощунственно, но этого более чем достаточно для управления пальцами. Выберем одну из костей, скажем, CTRL_Toe3.L, расположенную справа на левой ноге, после чего попробуем покрутить её и помасштабировать. Палец при этом сгибается и поворачивается.


Чтобы понять, как это так получается, включим дополнительно на панели костей слои 3 и 11, а режим отображения костей переведём в Octahedron, чтобы легче было отличать их одну от другой. Теперь мы видим всю систему.


Выделим корневую кость правого на экране пальца MCH_Toe3Base.L и обратим внимание, что она является потомком кости для управления лапой CTRL_Foot.L, а также, что она имеет констрейн Copy Rotation, который повторяет все повороты от кости управления пальцем CTRL_Toe3.L. Таким образом, нам становится понятно, откуда и как принимает повороты корневая кость.

Смотрим теперь дальше. Выделим следующую, среднюю кость того же пальца CTRL_Toe3Mid.L и взглянем на панель констрейнов. Там обнаруживается констрейн типа Action:


Это немного сложноватый и требующий предварительной подготовки констрейн, но очень полезный и относящийся к одной из самых удивительных способностей Blender. Принцип его работы заключается в следующем.

Сначала для кости в Action Editor создаётся aсtion, который на выбранном диапазоне кадров каким угодно образом анимирует эту кость, после чего action замораживается нажатием рядом с его названием кнопки F, чтобы он не пропал, и затем это имя указывается в самом констрейне в поле AC. Также в этом констрейне указывается название целевой кости, которая будет запускать action, тип трансформации этой управляющей кости, диапазон этих трансформаций и, наконец, диапазон кадров, в пределах которых action должен работать. Пока ничего не понятно, но сейчас я объясню всё на примере нашего птичьего пальца.

Рассмотрим внимательно констрейн Action, подцепленный к среднему пальцу CTRL_Toe3Mid.L, который приведён на скриншоте выше. Первое, что мы видим: целевой костью, которая будет двигать action, является CTRL_Toe3.L, то есть та самая длинная кость, масштабирование которой приводит к скручиванию пальцев. Ниже указано, что ей разрешено действовать в диапазоне от 1 до 31 кадра, и трансформация её выполняется от 1,5 до 0 единиц. Каких именно единиц, мы ещё не знаем, но сейчас всё прояснится.

В левой части панели констрейна в поле AC указано название action, который анимирует кость, а ниже выбран тип трансформации управляющей кости — SizeY. Это значит, что когда масштаб управляющей кости CTRL_Toe3.L по оси Y будет равен 1,5, состояние анимируемой кости CTRL_Toe3Mid.L при этом установится в такое, которое задаётся ключами action в кадре 1. А когда размер управляющей кости уменьшится до 0, то на CTRL_Toe3Mid.L начнут действовать ключи из кадра 31.

Разобьём теперь окно Blender на рабочие пространства так, чтобы мы могли видеть одновременно вьюпорт, панель костей, Action Editor и Ipo Curve Editor. Запомним название управляющего action из панели констрейна в поле AC. Оно называется Toe3Bend.L. Выбираем кость CTRL_Toe3Mid.L, переходим в окно Action Editor, подключаем там из списка action Toe3Bend.L и видим, что он состоит из нескольких ключей в диапазоне от 1 до 21 кадра. Поперемещаемся между ними по таймлайну. В ответ на это выбранная нами кость начинает сгибаться. Похоже, кое-что уже прояснилось.

Теперь смотрим в Ipo Curve Editor и находим там на координатах поворота кости две бесконечные кривые, которые, собственно, и задают скорость поворота. Не важно, что конечный ключ стоит не на 31-м кадре, как указано в констрейне, а на 21-м. Поскольку кривые бесконечны, то главное определить их угол, а потом через 31-й кадр они уже пройдут, как надо. В кадре 11 угол поворота проходит через 0. Это тот самый момент, когда масштаб управляющей кости принимает размер 1, то есть это её среднее положение, которое и является исходным, когда палец не согнут ни в какую сторону.

А то, что кривых в Ipo Curve Editor не одна, а целых две, вызвано всего лишь тем, что в Blender повороты костей осуществляются не привычным для нас в трёхмерном мире градусовым способом, а при помощи кватернионов, которые всегда добавляют к трём пространственным углам поворота X, Y, Z ещё и дополнительный абстрактный угол W.


Последний, третий палец работает тоже через подобный констрейн и настроен на тот же action, что и средний палец, только имеет собственные анимационные ключи и кривые для задания углов поворота.

Итак, заключение по делу птичьего пальца.

Когда мы будем изменять масштаб управляющей для пальца кости в направлении больше 1 или меньше (до нуля), action через одноимённый констрейн начнёт одновременно поворачивать средюю и концевую кости в ту или иную сторону в зависимости от того, какие координаты принимает кривая поворота влево или вправо от 11-го кадра по таймлану.

Вроде бы так. Неужели мы это всё-таки осилили? :) Если да, то оставим теперь в покое ноги и поднимемся по птице чуть выше. Но прежде хотелось бы заметить, что скручивание пальцев при помощи action — это не единственный возможный способ. Есть ещё одна методика, придуманная Бассамом Курдали, которая имеет более простой вид, но использует для каждой такой системы на одну кость больше.

В ней все кости одного пальца завязываются в цепочку с инверсной кинематикой (для чего и нужна дополнительная кость), после чего для сгиба всех костей достаточно всего лишь перемещать саму концевую кость. Но поскольку во время анимации заниматься перемещением костей не так удобно, то опять же добавляется длинная управляющая кость, конец которой цепляется к последней кости пальца. Тогда при изменении её масштаба она начинает тянуть за собой концевую кость и скручивает или выпрямляет таким образом всю систему. Увидеть собственными глазами, как это работает, можно просто загрузив файл с ригом ManCandy, созданный самим Бассамом Курдали.

А теперь всё, о пальцах больше ни слова!

Поднимаясь по птице вверх, мы вдруг натыкаемся на кость, торчащую из анального отверстия. Это выглядит ужасно и похоже на какую-то пытку Мюллера или ректальный термометр, но давайте пересилим отвращение и попытаемся изучить, что это за кость, и как она действует. Ни повороты, ни перемещения на неё не влияют, но если попытаться её помасштабировать, то результат не заставит себя долго ждать. Те, кто досмотрел мультфильм до самого конца, когда закончились уже все титры, легко вспомнят эпизод, в котором была использована эта особенность рига.

Когда заходит речь об изменении формы меша во время анимации, особенно при помощи костей, то первое, что приходит на ум, — это поглядеть в раздел Shapes. Смотрим в эту панельку при выделенном меше птицы, и чутьё нас не обманывает. Попереключавшись между ключами формы (Shape Key) с названиями, начинающимися на Anus, мы видим, как изменяется форма анального отверстия.


Но это мы меняли форму анального отверстия вручную, а как это делается через масштабирование ректальной кости? Увы, похоже, что здесь не обошлось без Driven Key — словосочетания, которого блендеристы боятся обычно, как огня. Тем более, что на это указывает голубой цвет кости. Но поскольку мы уже матёрые и борзые риггеры, то нам не пристало отступать перед трудностями, и мы смело разбиваем вьюпорт по вертикали на две части, чтобы в нижнюю половину вывести Ipo Curve Editor. Затем устанавливаем в этом окне переключатель Ipo type в состояние Shape, убедившись сперва, что во вьюпорте выделен меш птицы. И, наконец, выводим туда же окошко Transform Properties (клавиша N), после чего начинаем смотреть, что же мы видим.


С правой стороны окна у нас перечислены все Shape Key, которые имеются в выбранном меше. Пощёлкав на названиях, начинающихся с Anus, мы видим, как изменяется форма анального отверстия, а также анимационные кривые, которые связаны с данными Shape Key-ями. Остановимся для примера на кривой AnusClose2.

Если бы не было Driven Key, то по оси X в окне Ipo Curve Editor отсчитывалось бы время, а по оси Y — степень изменения Shape Key относительно базовой формы. Тогда, перемещая курсор времени, мы бы видели во вьюпорте, как согласно кривой изменяется форма анального отверстия: от начального состояния к максимуму и обратно. Но поскольку здесь подключён Driven Key, то всё меняется. По Y по-прежнему отсчитывается степень деформации формы, а вот по X теперь задаётся количественное значение трансформации управляющего объекта (который называется Driver). Под трансформацией в данном случае может выступать что угодно: перемещение объекта, вращение или масштабирование.

Взглянем на панельку Transform Properties, чтобы узнать, кто для данного Shape Key является Driver-ом. В левом верхнем углу окошка в поле OB указано BirdRig, а поле BO — CTRL_Anus. Это и есть та самая ректальная кость голубого цвета. Чуть правее указан режим Pose и ниже — способ трансформации ScaleX. Это значит, что масштабируя ректальную кость по оси X, мы получим изменение Shape Key от нулевого значения к максимальному и снова к нулевому. Ниже в этом же окошке введены числа Xmin, Xmax, Ymin и Ymax, которые как раз и задают диапазон трансформации кости, внутри которого она влияет на Shape Key.

Если бы Shape Key для анального отверстия был один, то мы бы на этом и успокоились. Однако на самом деле всё немного сложнее. Их там целых четыре. И все они имеют один и тот же Driver в виде ректальной кости, только в разных диапазонах её масштабирования. Что всё это означает? Это означает, что когда мы будем масштабировать ректальную кость, форма анального отверстия будет меняться не прямолинейно от начального значения к конечному, а через несколько промежуточных форм, в какой-то момент то вздуваясь, то снова расслабляясь. Вот так-то. Поэтому кривые для разных Shape Key и сдвинуты по оси X, чтобы попасть в соответствующий диапазон масштабирования ректальной кости.

Движемся по телу дальше. Снова включите все слои костей с 1-го по 13-й (те, кто уже просёк, что некоторые из них пустые, могут их не включать), а режим отображения оных переведите в Stick – теперь так будет удобнее.

Если вы двигались по телу в правильном направлении, то скоро должны были увидеть хвост! Собственно, его трудно было бы пропустить из-за обилия в нём костей. Все они зелёные, и это наводит на подозрение, что на каждой из них имеется какой-то констрейн. Выбираем первую попавшуюся кость хвоста и смотрим в панель констрейнов:


Это снова уже знакомый нам Action. Однако нас больше не запугать никакими action-ами, и мы уверенно разбираемся, куда он нас ведёт, и что от нас хочет. В поле Target: BO мы находим название управляющей кости CTRL_Tail, а слева определяем, что способ управления — масштабирование по Y (SizeY). Осталось только найти эту кость и посмотреть, что она делает с хвостом. Для этого на панели костей выключите слой 12, после чего на экране останется одна-единственная кость, которая, по-видимому, и есть та, которая нам нужна. Отмастшабируем её и увидим это:


Получилось очень интересно: хвост распушился. Если кому-то не терпится узнать, что же делает при этом тот action (он называется TailPoof) с костями хвоста, то добро пожаловать в Action Editor. Там найдёте его по названию и подключите к любой из хвостовой кости на некоторое время, пока не удовлетворите любопытство.

Кроме распушивания хвоста, кость CTRL_Tail может заниматься также ещё и его сгибом. Если подвигать кость CTRL_Tail вверх-вниз или влево-вправо, то хвост будет перемещаться вслед за ней. Поначалу это не вызывает никаких дополнительных вопросов: ну, вероятно, все кости хвоста припаренчены к CTRL_Tail и потому поворачиваются, как она. Но эта птица не так проста, как кажется — в этом мы уже не раз убедились. Поэтому наше предположение на самом деле неверно.

Дело в том, что кость CTRL_Tail предназначена для масштабирования: этим путём распушивается хвост. Но если все кости хвоста припарентить к CTRL_Tail, то во время её масштабирования кости вместе с перьями будут не только раздвигаться, но и увеличиваться в размерах. А это уже явный артефакт, который нам ни к чему. Чтобы обойти эту проблему, точно в том же месте, где расположена кость CTRL_Tail, находится похожих размеров кость с очень хитрым названием MCH_TailFeathersRoot. Все кости хвоста припаренчены именно к ней. А повороты и перемещения эта кость копирует из CTRL_Tail при помощи двух констрейнов Copy Rotation и Copy Location. Вот и вся хитрость.


Теперь, разобравшись с хвостом, мы отправляемся на поиски неизведанного дальше.

Оставьте на панели костей включенным только слой 2. Во вьюпорте мы видим теперь всего три кости. Первые две мы уже знаем — это ректальная кость и кость распушивания хвоста. А вот третья, в виде круглого шейпа, расположена на пузе. Чем гадать, для его она нужна, можно просто взять и потягать её в разные стороны.


Итак, легко понять, что эта кость деформирует птичье пузо. В невыделенном состоянии она не зелёного, не желтого и даже не голубого цвета, а обычного серого, что указывает на отсутствие в ней каких-либо констрейнов, и это ставит нас в тупик, потому что на первый взгляд неясно, как такая кость может изменять меш. Но чудес, как известно, не бывает, и всему есть объяснение.

Включим во вьюпорте дополнительно слой 13. На нём, как оказалось, хранится сетка какого-то деформера BirdDef и решётки Lattice для деформации глаз.


Сетка BirdDef прозрачная, но это ничего не значит. На самом деле эта сетка — полигональный меш, отображённый в режиме Wire. Чтобы проверить это, перейдём при выделенной сетке в режим объекта F7 и там на панели Draw в разделе Drawtype включим режим Solid. Вот что мы теперь увидим.


Этот грубый угловатый меш находится на слое, который выключен для рендеринга, поэтому свою функцию он выполняет скрыто. Но какую и как?

Вернём его снова в Wire-режим, перейдём в Edit Mode и потягаем вершины меша (в любом месте).


Что ж, значит, деформер оправдывает своё название и занимается тем, что деформирует меш персонажа. И это указывает на то, что здесь замешан модификатор типа MeshDeform. Выделим меш самой птицы и перейдём в панель модификаторов. Там мы и увидим этот самый модификатор, у которого в поле Ob как раз указан меш BirdDef.


С одной стороны, деформацию меша птицы можно было бы выполнять и через решётки Lattice, но отдельный, повторяющий форму птицы меш будет деформировать её более точнее. Таким образом, нам не нужно больше думать о меше птицы, а остаётся лишь связать управляющие кости скелета с самим деформером.

А сделано это было при помощи обычных Vertex Groups. В меше деформера были созданы группы, имена которых соответствуют костям, которые должны двигать конкретную группу вершин. Получился как бы двойной скининг. С одной стороны, меш самой птицы прискинен к арматуре и её костям. А с другой, меш деформера прискинен к той же самой арматуре, но уже, правда, к другим, управляющим, костям. Иначе возник бы конфликт, в какую сторону деформировать поверхность птицы, когда одна и та же кость одновременно тянет её в разные стороны.

Однако, если внимательно рассмотреть названия Vertex Groups для меша деформера, то окажется, что они никоим образом не соответствуют названиям управляющих костей. Точнее, соответствуют, не не совсем. Например, кость для управления пузом называется CTRL_Belly, а среди Vertex Groups есть просто Belly, и это работать, естественно, не будет. Вместо CTRL_Tail для деформации области вокруг хвоста находится тоже просто Tail. И точно так же для всех остальных костей. Значит, не управляющие кости деформируют меш BirdDef. А что же тогда?


Пришло всё-таки открыть одну страшную тайну. И похоже, чем глубже мы будем изучать риг птицы, тем тайны станут всё страшнее и страшнее. Ну, так вот. На панели костей выключите все слои, а вместо них включите последний, под номером 16. И вот мы вдруг видим целый запасной скелет с потайными костями! При этом у них ещё и названия как нельзя лучше соответствуют Vertex Group-ам, и расположены они точно в тех же местах, где находятся почти одноимённые управляющие контроллеры для деформера. Хуже того! Они даже связаны с ними через констрейны Copy Location, Copy Rotation, а иногда и Copy Scale.


В общем, теперь всё становится ясно, как день. Мешевый деформер на самом деле прискинен не к самим управляющим костям, а к их копиям, перемещения которых также копируются. И это здорово, что нам стало всё известно. Вот только не даёт покоя вопрос: а зачем вообще все эти сложности? Почему нельзя было прискинить мешевый деформер просто к управляющим костям?

На этот вопрос я не могу дать вразумительного ответа. Я перескинил меш-деформер от спрятанного скелета к управляющим костям, и всё осталось работать, как прежде. Поэтому либо мы не видим какого-то бага, который, может быть, всплывёт во время анимации, либо второй скелет был создан из соображений каких-то удобств для риггера, чтобы не запутаться в изобилии костей. Если это так, могу посоветовать вот что: когда начнёте создавать собственный риг с меш-деформером, то начинайте с простого, то есть скиньте меш-деформер к обычным костям. А на случай возникновений каких-то недоразумений, вы будете уже знать, что можно сделать внутри скелета ещё один и прискинить меш-деформер к нему.

Позже нам часто будут попадаться такие кости, которые занимаются деформацией не самой птицы, а повешенного на неё деформера. Поэтому было бы очень неплохо хорошо себе представлять, как работает эта система. Тем более, что скоро мы встретим похожие по функциональности контроллеры, но работающие несколько иным образом. Это кости, отвечающие за лицевую анимацию (ну, или анимацию морды). Однако не будем забегать вперёд и прежде познакомимся с крыльями. :)

Выключим во вьюпорте слой 13 с деформером. В ближайшее время нам он не пригодится. И оставим на панели костей включенными только слои 1, 12 и 13. Вот они, наши крылья. Подвигайте кости CTRL_WingBase.L, CTRL_WingTip.L или CTRL_Feathers.L, которые проходят вдоль верхнего края крыла. Вы увидите, как перья раздвигаются.


Должен сказать, что данный риг птичьев крыльев — это прямо-таки шедевр человеческой изобретательности. Мне далеко не сразу удалось понять, как они работают. Однако благодаря моим подсказкам вы, я надеюсь, разберётесь в них быстрее и скоро поймёте, что ничего особо сложного там нет, а нужно просто немного «сломать мозг».

Итак, поскольку цвет крыльевых костей жёлтый, то мы можем быть уверены, что они используют констрейн инверсной кинематики. Разумеется, так оно и есть. Причём, что странно, длина IK-цепочки в кости каждого пера составляет всего одно звено. Это означает, что куда бы ни двигалось основание кости, её конец всегда будет заморожен в пространстве (относительно той кости, к которой она припаренчена).


Давайте это проверим. Однако посмотрим прежде на то, как вело бы себя конкретное перо, если бы IK-констрейна на нём не было. Я выбрал для экспериментов самое первое перо в левом крыле и в кости Feather18.L отключил IK-констрейн, переведя бегунок Influence в 0. После этого подвигал управляющую кость крыла CTRL_WingBase.L, которая с этим пером связана отношением предок-потомок.


Мы видим, что выбранное нами перо повторяет теперь все движения управляющей кости, то есть оно припаренчено к ней обычной связью. Однако если бы IK-констрейн работал сам по себе, тогда при значении Influence в 1 во время перемещения управляющей кости конец пера всегда оставался бы на месте. Но, включив IK-констрейн обратно, мы видим, что это не совсем так. Значит, констрейну что-то мешает.

Вернём управляющую кость CTRL_WingBase.L в исходное состояние (обнулив вращение) и рассмотрим повнимательнее кости нашего первого пера. На его конце мы видим две кости, сидящие одна в другой — длинную FeatherTipB18.L и короткую FeatherTipA18.L. Короткая кость нужна для работы IK-констрейна, потому что её имя указано там в качестве целевой кости. А вот зачем длинная, тем более, что она припаренчена к управляющей кости крыла, пока не совсем ясно. Но обратим внимание, что у короткой кости имеется констрейн Copy Location, который должен копировать все перемещения длинной. Вот только копирует ли?

Значение Influence в констрейне Copy Location установлено в 0,2. Чтобы понять смысл этого числа, доведём его до 0 и подвигаем снова управляющую кость CTRL_WingBase.L.


На этот раз IK-констрейн работает как надо. Конец пера замер в пространстве и никакая сила не может его сдвинуть. Тогда как начало пера следует за управляющей костью. В том же констрейне Copy Location для маленькой кости FeatherTipA18.L передвинем теперь бегунок Influence до уровня 1. Снова пошевелим управляющую кость и заметим, что в этот раз перо ведёт себя так, как будто IK-констрейна у него нет вообще.

Ну, и чтобы сделать себе контрольный выстрел в голову, пробежимся по соседним коротким костям с названиями FeatherTipA и посмотрим, что там показывает бегунок Influence в констрейнах Copy Location. Во втором пере показывает 0,4, в третьем 0,6, в четвёртом 0,7 и так далее, приближаясь к 1, а потом где-то в середине начинаются перья уже с другой управляющей костью, и отсчёт снова возвращается к 0.

Получается вот что. Когда управляющая кость раскрывает крыло, перья разворачиватся не все сразу, а постепенно: те, что ближе к краю, — сильнее, а те, что дальше, — слабее. То есть в середине крыла перья будут прилегать друг к другу более плотно, а по краям — так разрежённо, что можно будет отчётливо видеть каждое пёрышко. И всё это благодаря тому, что констрейн Copy Location в каждом пере своей движущей силой с различным весом смягчает действие инверсной кинематики, стремящейся оставить перо неподвижным.

Вот, собственно говоря, и всё. Это что касается крыльев. Но птица на этом ещё не заканчивается. :)

Включим на панели костей слои с 1 до 11 и приступим к изучению головы. Она у птицы большая, умная и изобилует различными контроллерами. Самый большой среди них — это шейп вокруг всей головы, который занимается её поворотами. Несмотря на размеры, ничего интересного из себя этот контроллер не представляет, поскольку принцип его работы основан на искажении деформера BirdDef, а как действует этот деформер мы уже знаем. Для проверки можете включить во вьюпорте слой 13 и собственноручно поглядеть на гнущийся меш деформера. Похожим образом устроены и контроллеры для изменения формы щёк, клюва и бровей. Все они представлены в виде серых безшейповых костей, поэтому их легко отличить от тех контроллеров, которые работают по другому принципу, и которые мы тоже скоро рассмотрим. А если точнее, то сделаем мы это прямо сейчас.

Заглянем птице в рот, хоть это и некультурно. В нём имеется язык с несколькими костями (вопреки всем поговоркам), где каждая кость изгибает конкретную часть языка: корень, середину или кончик. Сделано это обычным скинингом через Vertex Groups, поэтому не представляет для нас никакого интереса, также как и фигуристый контроллер для управления нижней челюстью. А вот что представляет интерес, так это пара контроллеров по бокам клюва для поднятия или опускания его уголков. Потому что ни деформер, ни скининг там не задействованы.

Потягаем за левый уголковый контроллер под названием CTRL_Mouth.L. Как можно заметить, он деформирует клюв в четыре различных состояния: радость в верхнем, ужас в нижнем, нейтральность в среднем и удивление в направлении к кончику клюва.


Поскольку ни деформер, ни скининг здесь не используются, то остаётся последний вариант — Shape Key. Посмотим при выделенном меше птицы на панель Shapes. Там среди списка шейпов легко обнаруживаются такие, у которых имеются очень подозрительные имена, вроде MouseIn.L, MouseSmile.L и так далее. Выбирая эти шейпы, мы видим, как во вьюпорте клюв птицы попеременно принимает форму в соответствии с их названиями. Значит, нам осталось понять, какая имеется взаимосвязь между уголковой костью и шейпами, которые она переключает.

Разобьём снова вьюпорт на две части, чтобы в одну из них вывести Ipo Curve Editor. В этом окне при выделенном меше птицы включим переключатель режима Ipo type в состояние Shape и повыбираем в правой части окна шейпы с названием Mouse.


Для каждого из такого шейпа мы увидим странной формы анимационную кривую, ни одна из которых не похожа на то, что мы видели раньше. А в окошке Transform Properties заметим, что Driver-ом для всех этих шейпов являются кости CTRL_Mouth.L либо CTRL_Mouth.R, смотря с какой стороны морды находится шейп. Чего, собственно, и следовало ожидать. Но есть ещё одна вещь, которая не так быстро бросается в глаза, но имеет на самом деле очень важное значение.

Заметьте, что для шейпов MouthNeutral.L (будем для определённости обследовать левую сторону клюва), MouthFrown.L и MouthSmile.L Driver действует через Driver Channel LocY, а для четвёртого шейпа MouthIn.L — через LocX. Это означает, что уголковый контроллер CTRL_Mouth.L управляет шейпами сразу через две координаты своего перемещения в пространстве. Объясню чуть подробнее.

Вспомним, что в окне Ipo Curve Editor, если используется Driver, горизонтальная ось становится управляющей и принимает значения того канала, через который работает Driver (в нашем случае это LocX или LocY), а вертикальная становится управляемой — это значение Key Value в выбранном шейпе, которое изменяется обычно от 0 до 1, хотя иногда этот диапазон бывает и шире. Для придания клюву нужных эмоций, наш уголковый контроллер в 3D-пространстве по Y может принимать как положительные, так и отрицательные значения, а по X только отрицательные. Вы можете увидеть это в окошке Transform Properties во вьюпорте, когда будете двигать эту кость.

В соответствии с этим создаются такие Ipo-кривые для Driver, чтобы в положительных значениях Y, которые в пространстве занимает контроллер CTRL_Mouth.L, был включён шейп, создающий улыбку, а остальные выключены; в отрицательных значениях Y включался шейп, создающий гримасу ужаса; а для отрицательных значений X все остальные шейпы выключались, и включался тот, который отвечает за удивление. Однако чтобы всё не было совсем уж сухо, иногда кривые могут допускать одновременное срабатывание сразу нескольких шейпов, то есть где-то получается немного удивления и улыбки, а где-то смесь удивления с ужасом. Например, так:


Больше о клюве нам, собственно, сказать нечего, поэтому поедем дальше. И поскольку тему Shape Key-ев мы закрыли, то можно теперь смело пропустить из рассмотрения треугольные контроллеры на верхних и нижних веках птицы, а вместе с ними и овальные шейп-контроллеры поднятия бровей. Все они работают по тому же принципу, что был описан выше.

И вот, наконец, после всего того, что мы узнали и пережили, нам осталось рассмотреть последнюю часть птичьего рига — зеркало души! То есть глаза. И они, надо сказать, нам тоже легко не дадутся.

Выключим на панели костей все слои, кроме 3,4 и 11, затем во вьюпорте включим слой 13 с деформерами и решётками Lattice и пристально рассмотрим, что из себя представляют птичьи глаза.


Глаза эти были сделаны из полигонального меша типа UVSphere, который окрашен в белый цвет, а затем к нему были добавлены ещё несколько материалов для симуляции зрачка. При этом несколько полигонов, формирующих круг на полюсе сферы, стали зрачком, затем вокруг него кольцо из полигонов превратилось в радужную оболочку, а всё остальное осталось белком. Если покрутить такой шар, то получится, что зрачок как бы перемещается по глазу. А поскольку по задумке режиссёра глаза у птицы должны были быть овальными, то к ним был применена деформирующая решётка Lattice, которая растянула глаз по высоте. Таким образом, чтобы перемещать зрачки, достаточно всего лишь вращать сами глаза. И вот здесь начинается самое трудное.

Слой 13 во вьюпорте мы можем теперь выключить, поскольку Lattice в системе вращения глаз всё равно не используется, и начнём рассматривать кости. Двигаться будем, как любят говорить математики, от обратного. То есть с того очкообразного контроллера CTRL_EyeTarget, который всегда концентрирует взгляд птицы на себе. Подвигайте этот контроллер, чтобы понять, что при этом происходит.


Мы можем видеть, что, когда глазовый контроллер перемещается, три кости в голове птицы следят за его направлением. Две из них находятся в глазах, а третья — в переносице. Судя по их зелёному цвету, на всех из них висят констрейны. Это, конечно, не радует, но раз мы смогли до этого изучить почти всю птицу, то о глазах даже говорить смешно.

Выделим среднюю кость MCH_Eyes, которая находится в переносице, и посмотрим, что за констрейны она содержит. Их там два. Оба они типа Locked Track и оба указывают на один и тот же очкообразный контроллер.


Работу этого констрейна нелегко понять сходу, особенно когда толком не видно, в какую сторону смотрят оси у кости MCH_Eyes. Но, переключившись в Edit Mode при выделенной кости, мы увидим, что ось Z у неё смотрит вверх, ось Y вглубь, то есть вдоль её длины, а ось X – слева направо. Учитывая эти обстоятельства, получается, что верхний констрейн блокирует вращение кости в плоскости YZ, то есть разрешает ей следить за очкообразным контроллером, поворачиваться только слева-направо, а нижний констрейн — только в плоскости YX, то есть вверх-вниз. Ну, а в сумме это даёт возможность вращаться глазу в любом направлении, куда бы ни повернула кость CTRL_EyeTarget.

В принципе, оба этих констрейна можно было бы заменить одним, более удобным констрейном TrackTo. Но то ли его ещё не существовало в Blender в те времена, когда создавался мультфильм, то ли с ним возникли какие-то трудности, то ли просто у риггера была привычка использовать только Locked Track. Во всяком случае, когда вы будете создавать новый риг для глаз, то можете смело начинать с TrackTo — это и есть наш выбор!

Однако мы отвлеклись. Продолжим углубляться в бездонные глаза птицы.

В каждом глазу мы видим по две кости, сидящие одна в дру

552 0 850 4
2
2014-08-28
Обрыв текста (((((
2014-08-28
Обрыв текста (((((
RENDER.RU