«Big Buck Bunny»: риг белки

Squirrel, она же косоглазая белка, является моим самым любимым персонажем из мультфильма, поэтому будет очень обидно, если окажется, что нам особо нечего в ней рассмотреть. Впрочем, не будем столь пессимистичны, ведь уже не раз было такое, когда поначалу кажется, будто в риге всё видно, как на ладони, а потом мы неожиданно натыкались на какой-нибудь сюрприз и застревали с ним на 10 страниц исследований. Поэтому просто откроем файл squirrel.blend, включим всё, что можно, и взглянем издалека, что нас ожидает.

Первое, что уже бросается нам в глаза, — это две дополнительные шкалы с бегунками (tail и spine lock) и несколько костей, торчащих из туловища и делающих белку похожей на ежа. Хвост теперь подлиннее, чем нам встречалось раньше, и на конце имеет отдельную кость для его управления. Итак, во всём этом нам нужно будет разобраться, но прежде, как обычно, разложим всё по полочкам и рассмотрим все слои по отдельности.

  • Слой 1 — Главные контроллеры управления белкой. Корневая кость Root, педали для ног, пальцев, туловища, головы и бегунки переключащих шкал.
  • Слой 2 — Руки для режима FK.
  • Слой 3 — Руки для режима IK.
  • Слой 4 — Хвост, пузо, костяшки пальцев и уши.
  • Слой 5 — Контроллеры управления эмоциями и поворота глаз.
  • Слой 6 — Контроллеры для деформации отдельных частей головы.
  • Слой 7 — Пустой.
  • Слой 8 — Пустой.

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

  • Слой 9 — Множество вспомогательных костей из различных частей тела.
  • Слой 10 — Ещё одна немаленькая коллекция вспомогательных костей.
  • Слой 11 — Какие-то кости для запястьев рук.
  • Слой 12 — Кость в основании хвоста.
  • Слой 13 — Кости, непосредственно связанные с мешами глаз.
  • Слой 14 — Пустой.
  • Слой 15 — Пустой.
  • Слой 16 — Вертикальные кости для индивидуального управления глазами.

Содержимое последнего слоя непроизвольно вызывает протест: эй, а где же запасной скелет для скининга мешевого деформера? Терпение, джентельмены, сейчас мы всё узнаем. Включим во вьюпорте слой 13 и увидим мешевый деформер, который... охватывает только голову! Выходит, белка настолько тощая, что ей даже мешевый деформер не нужен. А большая и умная голова требует деформера только для того, чтобы можно было растягивать отдельные её части. Что ж, вот и хорошо. Нам меньше проблем при исследовании рига.

Вы, должно быть, наивно полагаете, что в этот раз мы изменим традиции и начнём изучать белку с головы. Однако, нет. Традиция — дело святое, так что приблизим во вьюпорте ноги и включим на панели костей слои 1, 6 и 9. А чтобы было более понятнее, что к чему присоединено, отключим кнопку Shapes, а белку сделаем прозрачной. Ну, чтобы получилось что-то в этом роде.

Начнём с самого большого и самого главного — управление всей ноги от носка до бёдер. Поскольку мы видим жёлтую кость в середине, то очевидно, что здесь не обошлось без констрейна инверсной кинематики. Заглянем в его настройки при выделенной кости IK_Shin.L и увидим, что длина цепочки ChainLen = 2, поэтому вся цепочка IK сверху вниз для левой ноги будет будет состоять из трёх костей: двух в самой цепочке и одной целевой. Кстати говоря, почему опять для левой ноги, а не для правой? Потому что автор статьи — левша, так что не спрашивайте больше об этом. :)

Так вот, цепочка: IK_Femur.L (бедренная кость) → IK_Shin.L (голень, и она же кость с IK-констрейном) → Leg_IKTarget.L (целевая кость для IK-констрейна). А также KneeTarget.R в качестве полюса для направления поворота колена. Все эти кости на скриншоте выше указаны стрелками. При этом, если потягать за кость Leg_IKTarget.L, то мы увидим работу инверсной кинематики в чистом виде. Однако нога при этом работает не так, как надо. Чтобы заставить её работать, как положено ноге, приходится идти на усложнения. Риггер, создавший скелет белки, туда уже сходил, и теперь нам осталось всего лишь понять ход его мыслей.

Вспомним, что целевая кость для IK-констрейна не может находиться внутри IK-цепочки, также как не может находиться и где-то после неё. Она может быть только раньше, то есть ближе к корневой кости рига. Иначе констрейн работать не будет. Поэтому кость Leg_IKTarget.L припаренчена к кости пятки CTRL_Heel.L, которая каким-то обходным путём, не через ноги, выходит на корневую CTRL_Root. Стало быть, если потягать за пяточную кость CTRL_Heel.L, то ступня должна работать правильно. Потягаем за неё. Увы, координаты перемещения заблокированы, поэтому разблокируем их и потягаем кость снова.

Примечание. В открытой по умолчанию белке все кости, попавшие внутрь меша, будут не видны. Чтобы их увидеть не только в Wireframe-режиме вьюпорта, нужно в разделе объектов на панели Draw → Draw Extra отжать кнопку Transp.

Как мы видим, пяточная кость отлично таскает прискиненный к ней меш ступни и двигает за собой всю ногу до бедра. Однако риггер почему-то не только заблокировал для неё координаты перемещения, но и выделил для управления ноги другую кость, CTRL_Foot.L, к которой эта пяточная кость припаренчена. С чего бы это вдруг на него нашло такое помешательство? А дело всё в поворотах ступни. Ведь белке при ходьбе нужно опираться на носок, однако сгибать этот носок нужно не как попало, а по-хитрому: оставляя его на земле, а всё остальное приподнимать кверху.

Отвлечёмся поэтому ненадолго от ноги в целом и обратим всё своё внимание к ступне. Устройство её до боли напоминает то, что мы уже видели в ступне шиншиллы, и это нас очень радует, потому что не нужно больше заново разбираться, как это всё работает. Достаточно только вспомнить отдельные детали.

Основой носочно-пяточной системы является кость CTRL_Heel.L. На ней держится всё остальное, и вот каким образом. Внутри этой кости находится другая — ToeLimiter.L, которая при помощи констрейнов Copy Location и Copy Rotation копирует из неё перемещения и повороты, но повороты не любые, а только те, которые попадают в диапазон 0-180 градусов, потому что всё остальное блокирует констрейн Limit Rotation. Поэтому, когда кость CTRL_Heel.L поворачивается вверх, ToeLimiter.L остаётся на месте, а когда вниз — следует за ней. К кости ToeLimiter.L припаренчена носочная кость CTRL_FK_Toe.L, поэтому она наследует от неё все повороты и перемещения, но может также поворачиваться и сама в случае надобности.

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

Однако риггер из Peach Project не лыком шит и придумал выход из положения (или позаимствовал его из другого рига). Он добавил ещё одну кость, CTRL_Foot.L, параллельную пяточной кости CTRL_Heel.L, и припарентил к ней эту кость и ещё ToeLimiter.L. Ну, а напоследок, чтобы окончательно утвердиться в собственной гениальности, поместил корневой шарнир кости CTRL_Foot.L внутрь концевого шарнира кости IK_Shin.L. В результате чего идеально совместил центр вращения стопы с центром вращения контроллера.

Теперь алгоритм управления ногой становится таким: контроллером стопы CTRL_Foot.L мы перемещаем всю ногу и вращаем стопу, носочной костью CTRL_FK_Toe.L поворачиваем носок в случае надобности, а костью CTRL_Heel.L приподнимаем или опускаем пятку относительно носка.

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

В констрейне инверсной кинематики есть поле Pole Target для ввода имени кости, на которую будет нацелена кость, имеющая констрейн IK. В левой ноге белки такая кость называется KneeTarget.L. Она находится немного впереди колена и припаренчена к контроллеру стопы, чтобы колено не поворачивалось тогда, когда не нужно. В данном случае колено будет всегда поворачиваться туда же, куда и стопа, и только если вдруг возникнет несогласованность, тогда можно будет проанимировать кость KneeTarget.L отдельно.

Между коленом и костью KneeTarget.L протянулась растягивающаяся кость KneeTargetConnector.L, но она на самом деле не играет особой роли в управлении ногой и предназначена больше для визуального ориентира.

Последнее, что осталось в левой ноге нами незатронутым, — это кости COR_HeelDown.L, COR_HeelUp.L и другие, названия которых начинаются на COR. Они не имеют констрейнов и припаренчены к основным костям довольно просто, располагаясь как бы отдельно, поэтому на первый взгляд их предназначение кажется неопределённым. Однако если случайно при выделенном меше белки заглянуть в раздел Shapes, то мы увидим там много шейпов с похожими названиями.

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

А теперь, после того как мы потратили столько времени и усилий, разбирая ноги, нам логично хочется взглянуть на что-то более простое. И такая возможность нам сейчас как раз и предоставится. Хвост — разве может быть что-то проще? Кто-то, вспоминая хвост птицы, уверенно скажет «Нет!» Однако давайте не будем спешить с выводами, а сначала просто посмотрим.

Включим на панели костей слои 4, 9, 12 и попробуем посгибать любые кости хвоста на выбор. Круто! Хвост гнётся, как кочерга!

А теперь выпрямим хвост обратно, включим слой 1, чтобы увидеть кости на шкалах, переведём бегунок tail в положение IK и потягаем за концевую кость TailTarget. Хвост начал изгибаться в дугу!

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

Окончание хвоста не вызывает вопросов. Последней костью в нём является Tail6 и находящийся на ней констрейн IK указывает на расположенную рядом кость TailTarget. Вопрос возникает в том, как будет двигаться эта концевая кость, когда переместится основание хвоста, ведь целевая кость не может находиться в пределах системы IK. И как бы не вышло так, чтобы в то время, когда зад белки будет поворачиваться, конец хвоста оставался бы на месте. Покрутите за кость Tail1, чтобы понять, о чём я толкую.

Поглядим, к чему припаренчена целевая кость IK-констрейна TailTarget. Судя по пунктирной линии, её предком является кость MCH_TailIK_Parent, помещённая в основании хвоста, а та, в свою очередь, ведёт аж на главную кость рига CTRL_Root. Отсюда следует, что для одновременного перемещения всего хвоста в режиме IK, нужно, чтобы основание хвоста было как-то связано с костью MCH_TailIK_Parent. И такая связь есть! На панели констрейнов при выделенной кости MCH_TailIK_Parent мы находим констрейн Copy Location, указывающий на кость TailBase, а это как раз та самая кость, с которой начинается хвост (на скриншоте указано стрелкой).

Таким образом, когда перемещается кость TailBase, она двигает основание хвоста и одновременно с ним — кость MCH_TailIK_Parent, а та через родительскую связь перемещает целевую кость IK-констрейна TailTarget. И всё встаёт на свои места. Пошевелите за TailBase, чтобы убедиться, что я вас не обманываю :)

Как бегунок шкалы переключает хвост из режима FK в IK, рассказывать вам, я думаю, уже не надо. Вы и сами можете догадаться, что кость бегунка CTRL_TailIKFKSwitch через Driven Key воздействует на параметр Influence в констрейне инверсной кинематики, сидящем на кости Tail6. А кривая там очень простая.

Что ж, мы немного отдохнули, и теперь пришло время снова взяться за что-то серьёзное и невообразимо сложное. На этот раз это будет обсуждение того, к чему приводит переключение бегунка на шкале с названием spine lock. В двух словах его предназначение можно показать вот этим кадром из мультфильма:

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

Как обычно, сделаем сперва рокировку видимости костяных слоёв, а точнее включим слои 1 и 9, оставив всё остальное в положении OFF.

Ключевым в работе растягивания белки является извилистый контроллер CTRL_Ribcage. Попробуйте пошевелить его. Перемещения при этом на него не действуют, а вот от поворотов он не отказывается.

А теперь переключите бегунок шкалы в положение free. Белка немного вытянется вверх, но это ещё не всё. Снова потягайте за контроллер CTRL_Ribcage. Эффект, как говорится, налицо.

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

Чтобы лучше рассмотреть беличью спину, и было видно, куда какие кости повёрнуты, нам придётся включить режим отображения костей Octahedron и отключить Shapes. Бегунок шкалы spine lock оставим в положении locked.

А теперь начнём.

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

Рассмотрим сперва позвоночник, используемый в обычном, неэкстремальном режиме.

В нижней части беличьего позвоночника №1 находится тазовая кость CTRL_Pelvis, которая является потомком главной кости рига. Она повёрнута вниз, исходя из центра, и не является больше предком для других костей (не считая основы позвоночника №2, но об этом ниже), поэтому любые её повороты влекут за собой вращение только нижней части тела, да и то благодаря связанному с ней позвоночнику №2. Однако если кость CTRL_Pelvis начать перемещать, то вместе с ней начнёт двигаться и вся верхняя половина тела. С чего бы это вдруг?

Оказывается, у кости CTRL_Spine, отходящей от центра позвоночника вверх, имеется констрейн Copy Location, указывающий на кость CTRL_Pelvis. И хотя кость CTRL_Spine является потомком главной кости рига, но в случаях, когда мы будем тащить тазовую кость, она последует за ней.

Двигаясь от CTRL_Spine ещё выше, мы вдруг натыкаемся на ещё один центр позвоночника, в котором сходятся кости сверху и снизу. От этого центра вниз исходит кость грудной клетки CTRL_Ribcage, которая (надо же, какое совпадение!) тоже является потомком главной кости рига, но вместе с тем копирует перемещения из CTRL_Spine через констрейн Copy Location. Наличие в позвоночнике ещё одного центра приводит к тому, что голова с шеей тоже не могут наклоняться вместе с грудной клеткой, а в итоге получается, что белка состоит из трёх как бы независимых частей — головы, грудной клетки и таза, каждые из которых наклоняются и вращаются независимо друг от друга. Вот такая получилась озорная белка.

Закончивая рассмотрение позвоночника №1, поднимемся ещё выше и захватим заодно голову. После кости CTRL_Ribcage идёт шея Neck, но вдруг оказывается, что она не имеет никакой связи с позвоночником №1, а припаренчена к кости Ribcage, которая является окончанием уже позвоночника №2. Как видите, оба позвоночника очень взаимосвязаны и трудно изучать один, не затрагивая другого. Так что когда мы начнём рыться во втором позвоночнике, мы ещё не раз вернёмся к первому.

С шеей и головой тоже не всё так просто, потому что между ними появляются какие-то две странные кости — NeckTipRot и NeckTipLoc.

Но проще всего начать разбираться в голове не с этих двух маленьких костей, а с кости самой головы Head. Она, как и многие другие части скелета, припаренчена к главной кости рига, и поэтому никакие повороты на неё не действуют, что заставляет её всегда смотреть вперёд, как бы дико ни извивалось во время анимации тело белки. На неё не действовали бы и перемещения тела, если бы не констрейн Copy Location, указывающий на кость NeckTipLoc, которая на скриншоте выше показана стрелкой с правой стороны.

Чем же особенна эта кость NeckTipLoc, что голова так стремится повторить её перемещения? Тем, что она припаренчена к шее Neck. И вследствие этого конец шеи тянет за собой голову, всегда смотрящую вперёд.

Однако внутри головной кости есть ещё одна маленькая кость NeckTipRot, предназначение которой всё ещё осталось нераскрытой. Она сидит внутри головной кости Head, и у неё есть констрейн Copy Rotation, указывающий на эту кость. Это приводит к тому, что NeckTipRot и Head вращаются всегда синхронно. Вот только зачем? Наклоним голову белки вперёд и посмотрим на шею сбоку.

А теперь выключим констрейн Copy Rotation на кости NeckTipRot.

Шея выпрямилась. Значит, эта маленькая кость управляет изгибом шеи, чтобы она не была всё время ровной, словно белка проглотила весло. А управление это производится путём влияния этой кости на меш через функцию Envelope.

На этом знакомство с первым позвоночником можно считать законченным. Займёмся теперь вторым.

Опустимся снова вниз к тазу белки. Там, как мы помним из рассмотрения первого позвоночника, было две кости с похожими названиями — CTRL_Pelvis и Pelvis. Одна является потомком главной кости рига, а вторая — потомком первой. То есть повороты и перемещения тазового контроллера CTRL_Pelvis автоматически тянут за собой кость Pelvis, и это говорит о том, что оба позвоночника имеют общую основу — таз. Но потом они разветвляются. И хотя дальше вверх они идут параллельно, но уже в первом же центре позвоночника пересекаются, совмещаясь своими шарнирами. Однако после этого снова расходятся. Следующая кость, исходящая из центра во втором позвоночнике — это Spine, которая является непосредственным потомком кости Pelvis. Она интересна тем, что имеет констрейн Stretch To, указывающий на кость Ribcage.

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

Своим концевым шарниром кость Ribcage сходится во втором центре с первым позвоночником, и дальше у них идёт общая на двоих шея Neck, которая кстати, припаренчена не к CTRL_Ribcage, а к Ribcage, то есть исходит из второго позвоночника.

Уясним, как происходит переключение между позвоночниками, и как им удаётся работать то вместе, то по отдельности.

В обоих режимах мы таскаем грудь белки за кость грудной клетки CTRL_Ribcage, для чего ей и присвоен фигуристый шейп, указывающий на принадлежность к контроллерам. Однако из-за того, что на ней находится констрейн Copy Location, связывающий её перемещения с костью CTRL_Spine, мы не можем в обычном режиме таскать грудь белки, а можем только вращать её между первым и вторым центрами позвоночника. Но если мы переключаем бегунок шкалы spine lock в положение free, то этот констрейн отключается, и теперь кость CTRL_Ribcage становится свободна перемещаться куда душе угодно. Кость Ribcage, на которой держится голова, припаренчена к CTRL_Ribcage, поэтому второй позвоночник тянется за контроллером грудной клетки. Так происходит разъединение двух позвоночников.

Здесь стрелкой указана кость CTRL_Spine, которая осталась на месте, а рамочкой в констрейне Copy Location указано, что тот отключён, и поэтому CTRL_Ribcage с костью спины больше не связан. Собственно говоря, получается, что второй позвоночник является основным, поскольку как раз на нём держится грудь, руки и голова, но в обычном режиме он ограничен в перемещении, будучи связан с первым позвоночником, который является опорой для всего тела.

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

Там мы видим маленькую кость SpineTip, припаренченую к Spine, но имеющую констрейн Copy Rotation, указывающий на кость SpineFollow. А SpineFollow припаренчена к кости Ribcage, которая идёт следом. Короче говоря, можно не вникать во все эти детали, а просто отключить констрейн и взглянуть, что произойдёт. При этом возникает тот же эффект, что и при отключении констрейна Copy Rotation на кости NeckTipRot в шее белки: спина начинает изгибаться неправильно. Чтобы не было таких невыразительных горбов, и были вставлены кости SpineTip вместе со SpineFollow.

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

Сайт автора: www.krre.inf.ua.
0
RENDER.RU