"Big Buck Bunny" изнутри. Анимация.

 

Часть 4. Анимация

 

После долгого и мучительного копошения в костях, пришло время облегчённого вздохнуть и приступить к изучению того, что находится в таинственной папке \scenes. То есть файлов с анимацией.

 

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

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

Однако, прежде чем двигаться дальше, хочу предупредить, что некоторые файлы шотов настолько загружены объектами, что при попытке открыть их в среде Windows Blender спустя несколько минут раздумий может закрываться с ошибкой, так и не показав сцену. Обычно это вызвано нехваткой оперативной памяти, но даже если памяти на компьютере предостаточно, то всё равно нельзя гарантировать успешное открытие файла. В этом случае лучше перебраться в какую-нибудь линуксоподобную операционную систему, вроде Ubuntu, и там уже проблем с памятью будет поменьше. Если вы уже находитесь в Ubuntu или что-то в этом роде, то можно быть спокойным — удача всегда будет на вашей стороне! :) 

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

Откроем какой-нибудь специфический файл, например, \scenes\09_tree_trunk\04.blend, в котором три борзых грызуна врываются в посадку в поисках затаившегося в засаде Большого Зая. Этот файл интересен тем, что в нём одновременно анимированы три персонажа, которые находятся в однотипных движениях — беге на прямой дистанции. 

Люди, уже знакомые с Blender и его анимационной системой, при упоминании о беге или ходьбе персонажа обычно сразу же вспоминают NLA Editor, который позволяет взять один цикл движения и многократно его повторить. Это хороший способ облегчить себе работу, но... плохой, чтобы произвести на зрителя впечатление своим искусством анимации. И, как видно из данного файла, аниматоры из Peach Project NLA Editor для зацикливания движений не использовали вообще. 

По крайней мере, я не нашёл такого ни в одном шоте, которые мне приходилось когда-либо открывать. Почему? Потому что зацикленные движения не подходят для персонажей, показываемых на переднем плане. Они становятся слишком механистическими и скучными. Применение NLA Editor для размножения движений может быть оправдано разве что для многочисленных персонажей, расположенных на заднем плане: например, армии орков или тучи летящих птиц. Ну, и при создании игр, конечно же. А в «Big Buck Bunny» ничего подобного, как вы помните, не было. 

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

Тем не менее, хотя NLA Editor и не использовался для создания циклов движений, сами циклы в анимации персонажей всё же присутствуют. Например, во взмахах крыльев бабочки. 

Откроем для рассмотрения данного вопроса файл \scenes\03_apple\05.blend, оставим включёнными только слои 4 и 14, на которых расположена бабочка с её арматурой, и выделим кость левого крыла WingTip.L. В Ipo Editor мы сразу же сможем увидеть бесконечный цикл анимации этого крыла, продолжающийся в обе стороны таймлайна. Разыскав среди кривых ключи, можно увидеть, что само ядро цикла для полного взмаха крыла длится всего около 8 кадров, а всё остальное — это его повтор. 


Причём, даже для анимации полёта бабочки не были использованы ключи. Вместо этого её отправили летать по кривой Curve. И только в некоторых местах её движение слегка корректировали ключами, как видно из Action или NLA Editor. 

Второй похожий случай с циклом — это висящий летучим змеем Фрэнк, он же flyingsquirrel. Его плачевное состояние мы можем видеть в файле \scenes\13_end\09.blend. Ситуация аналогичная, только вместо крыльев в цикле анимируются края паруса, поэтому описывать больше ничего не буду, а дам только скриншот. 

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

Разберём сперва небольшой пример, чтобы выявить проблему, а потом поглядим, как она решается аниматорами «Big Buck Bunny». 

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

Что мы для этого сделаем? Конечно же, используем констрейн Child Of, который повесим на объект Cube и укажем в нём целевой костью конечную кость манипулятора — в данном случае это Bone.002. Однако, как только мы это сделаем, куб прыгнет в пространстве и прилипнет к основанию кости Bone.002. Почему? Потому что он переместился из глобальной системы координат в локальную, в которой центр Вселенной находится в основании кости Bone.002. А поскольку глобальные координаты куба до подсоединения констрейна были (0, 0, 0), то он и попал в тот самый центр новой для него Вселенной. 

 Чтобы вернуть куб на место, в констрейне предусмотрена кнопочка Set Offset, которая добавит ему такое перемещение, чтобы, оставаясь в локальной системе координат манипулятора, он вернулся в пространстве в исходную до включения констрейна точку. Нажимаем эту кнопочку, и куб возвращается на место. 

 

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

Прежде всего, констрейн Child Of до начала анимации нужно выключить. Устанавливаем бегунок Influence в 0 и добиваемся этим того, что перемещение манипулятора больше не тащит за собой куб. Они хоть и остались связанными, но не взаимодействуют друг с другом. Поэтому спокойно анимируем подвод манипулятора к кубу, чтобы начать его захват, затем ставим ключ на параметр Influence в констрейне Child Of, перемещаемся на кадр вперёд, устанавливаем Influence в 1 и снова ставим на него ключ. Затем двигаем манипулятор вверх и видим, что куб, как и положено, следует вместе с ним. 

 На этом этапе мы также ещё не замечаем ничего подозрительного. Но движемся дальше. 

Переместим манипулятор в сторону и попытаемся отпустить куб. Для этого поставим ключ на Influence в то время, пока он ещё на ходится в 1, затем выключаем констрейн переводом Influence в 0 и снова ставим ключ, перейдя в следующий кадр. Упс! Появляется первая проблема: куб прыгает в то место, где он находился до захвата его манипулятором. 

 

 Ведь его координаты как были (0, 0, 0), таки и остались, поэтому когда он сменил локальную систему координат манипулятора обратно на глобальную, то вернулся в начало отсчёта. Кнопка Set Offset в констрейне Child Of нам здесь уже не поможет, так что мы не будем её трогать, а для решения проблемы воспользуемся следующей хитростью, которую для нас предусмотрели разрабочики Blender. 

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

Итак, наш куб всё ещё висит на конце манипулятора. В этот момент мы устанавливаем на него ключ перемещения и вращения (клавиша I → LocRot), чтобы зафиксировать эти координаты до скачка. Следом за этим ставим ключ на Influence констрейна Child Of, который сейчас имеет значение 1, переходим в следующий кадр и на кубе ставим ключ на визуальные координаты перемещения/вращения (клавиша I → VisualLocRot). Это приведёт к тому, что Blender определит глобальные координаты куба, а точнее той точки пространства, где он находится относительно центра Вселенной, и присвоит их ему в качестве локальных. И, наконец, мы уменьшаем Influence до 0 и тоже ставим на него ключ. Уводим манипулятор вверх и видим, что теперь куб остаётся на месте! 

 

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

В начале нашей анимации и в конце её куб находится вне действий родительской связи с манипулятором и связан только с глобальной системой координат. Во время анимации мы его не трогали, а перемещали только манипулятор, то есть координаты самого куба не изменялись. Однако в конечном итоге он должен оказаться в другой точке пространства. Как же он узнает координаты, в которые должен попать? Ведь Blender не держит для объектов две группы координат — локальные или глобальные, поэтому для него это одно и то же, а изменяется только точка отсчёта. 

Правильный ответ: не узнает никак, если мы сами их ему не сообщим. И он прыгнет в то место, откуда его взяли, как у нас и было в начале. А чтобы сообщить кубу новые координаты глобального пространства, в которое он возвращается, мы должны поставить ключ через VisualLocRot. Вот такое вот извращение. 

Итоговую анимацию можно увидеть в файле manipulator.blend, взяв его из архива manipulator.zip на данном сайте.

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

Приблизим манипулятор к кубу, поставим на Influence констрейна Child Of ключ (сейчас его значение 0), перейдём в следующий кадр, установим Influence в 1 и снова поставим ключ. Однако раньше чем мы совершим последнее действие, мы уже заметим, что куб снова ускакал, да ещё в какое-то новое место, где он ещё ни разу не был. 

 

 По проверенной нами привычке мы попытаемся на констрейне Child Of нажать кнопку Set Offset, но от этого станет только хуже: куб снова прыгнет и теперь ещё дальше. После этого будет бесполезно нажимать кнопу Set Offset или Clear Offset, потому что ни то, ни другое нам уже не даст ничего толкового. Более того, испортится даже та начальная часть анимации, которая ранее работала безупречно. Вывод: кнопку Set Offset на протяжении анимации можно использовать только один раз — в первый. А дальше от неё идёт только вред. 

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

Вспомним, с чего мы начали, прежде чем отвлеклись на этот пример. А начали мы с рассмотрения файлов «Big Buck Bunny». :) Откроем файл с одним таким подходящим для нашей проблемы случаем из мультфильма, когда шиншилла идёт по тропе войны, держа в руках орех, потом роняет его и снова берёт. Это файл \scenes\10_chinchilla\02_04.blend. Выключим там всё ненужное, оставив только слой 2 с шиншиллой и орехом, чтобы легче и быстрее можно было ориентироваться в пространстве. 

Сразу же обратим внимание, что на орехе висит констрейн Child Of, который привязывает его к левой руке CTRL_FK_Hand.L. Это хорошая новость. Значит, аниматоры мультфильма использовали для анимации реквизита стандартные и всеми привычные средства. 

Просмотрим анимацию всего шота, внимательно наблюдая, как будет вести себя параметр Influence констрейна Child Of и координаты ореха. В начале шиншилла тащит орех в руках, и Influence, как и положено, стоит в 1 (на самом деле, у меня показывает 0,998, но это дела не меняет). Затем на 86 кадре она как бы спотыкается и неожиданно роняет свой обед на землю. 

Теперь Influence ореха показывает 0 (у меня 0,004, что опять же дела не меняет), а координаты перемещения и вращения скачкообразно изменились. Это всё легко объяснимо и не вызывает нареканий. Точно так же было и у нас, когда манипулятор отпускал куб, и он возвращался в глобальную систему координат. Однако самое интересное начинается дальше. На 162-м кадре шиншилла вновь берёт свой ненаглядный орех в своих загребущие руки. При этом Influence констрейна равен 1, а координаты ореха почти такие же, какими они были в начале анимации. То есть он вернулся в локальную систему координат кости левой руки. 

Идём дальше (точнее, шиншилла идёт, а мы смотрим за ней на своих больших 24-дюймовых жидкокристаллических экранах). После приключений с падающим бревном, которого она даже не заметила, на 510 кадре шиншилла вдруг встречает на пути Большого Зая и от испуга, впечатлившись его размерами и запасами жира, подбрасывает орех в воздухе. При этом происходит такая же ситуция с констрейном, как и во время ронения плода на тропу войны, то есть он переходит в глобальную систему координат, и сами координаты прыгают. 

 

Нам пока не понятно, каким образом аниматоры добились такого послушного поведения ореха, и продвинемся по анимации ещё немного дальше. Шиншилла ловит свой обед в 516-м кадре, а чуть позже, когда жестокий Зай катапультирует её за пределы «своего раёна», вновь, уже в последний раз, роняет его в 777-м кадре. 

Итак, орех проделал долгий путь на протяжении всего шота, несколько раз перемещался из локальной системы координат шиншиллиной арматуры в глобальную, однако так никуда и не ускакал. Почему? Ответ прост: потому что аниматоры ни разу не использовали кнопу Set Offset на констрейне Child Of. Чтобы проверить это, несколько раз нажмите кнопку Clear Offset, чтобы очистить все смещения, если они там были. Затем просмотрите снова анимацию всего шота, и вы убедитесь, что ничего не изменилось. А теперь нажите Set Offset в самом начале шота, и орех выпрыгнет из рук шиншиллы, так в них больше и не вернувшись. 

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

Переделаем теперь нашу анимацию с манипулятором, не используя кнопку Set Offset. Для этого удалим все ключи и начнём сначала. 

Подведём, как в прошлый раз, манипулятор к кубу, после чего установим на его констрейне Child Of ключ на Influence, который в данный момент равняется 0. Перейдём в следующий кадр, изменим Influence в 1 и поставим ключ. Куб прыгнул к основанию кости Bone.002, и нам нужно вернуть его назад, где он и стоял. 

У каждого может быть своя методика для этого, а я, к примеру, делаю так. 

Создадим пустышку Empty, вернёмся в предыдущий кадр и скопируем в неё координаты перемещения и вращения куба. Для этого выделим Empty, затем объект Cube, нажмём комбинацию клавиш Ctrl+C и выберем по очереди сперва Location, а затем после повторного Ctrl+C – Rotation. Таким образом, Empty стала как бы промежуточной ячейкой, которая хранит исходные координаты куба до скачка. 

Поставим на кубе ключ LocRot и перейдём в следующий кадр, когда наш прямоугольный друг переходит в локальную систему координат, и факт скачка состоялся. Здесь возникает соблазн повторить процедуру копирования координат, но в обратном порядке — с пустышки на куб. Увы, этот способ теперь не пройдёт, потому что хотя куб и изменил систему координат, но сами его координаты остались прежними, то есть такими же, как и пустышки. Поэтому будем использовать Empty в качестве ориентира, переместив в неё куб, и выровняем его оси по осям пустышки. После чего поставим на координатах нашего прямоугольного друга ключ LocRot. 

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

Однако теперь нам нужно снова взять куб и переместить его в третью позицию. Что мы делаем? Правильно. Выбираем объект Empty, затем Cube → Ctrl+C → Copy Location → Ctrl+C → Copy Rotation. Опускаем манипулятор, ставим ключ LocRot на кубе, на Influence констрейна, переходим в следующий кадр, Influence — в 1, и выравниваем куб по новым координатам пустышки. Перемещаем его в третью позицию и высвобождаем из лап манипуляторая при помощи VisualLocRot. 

Невероятно! Задача решена! Файл с примером называется manipulator-empty.blend и хранится всё в том же архиве. :) 

Что ещё интересного мы можем найти в этом мультфильме? По части анимации персонажей, в общем-то, технически сложного там больше ничего нет. Всё то, что вытворяли звери на протяжении мультфильма, относится уже к искусству анимации и к Blender имеет очень отдалённое отношение. В основном, это перемещение объектов и костей туда-сюда, установка ключей, просмотр анимации во вьюпорте или при помощи OpenGL-снимков и бесконечные, бесконечные переделки, пока не закончится время, выделенное для этого процесса. Поэтому зверей мы оставим теперь в покое и рассмотрим анимацию неперсонажную. 

Итак, первое, на что интересно было бы глянуть, — это то, как были анимированы отражения в воде небольшого ручья на лугу. Вот этот кадр: 

А смотреть его внутренности мы будем в файле \scenes\01_intro\02.blend. Откроем его и выключим все слои, кроме второго. Во вьюпорте при этом мы увидим модель реки с берегами, по поверхности которой проложено несколько решёток Lattice волнобразной формы с наиболее сильными искажениями сетки в районе обтекания лежащих на дне камней. 

Включим дополнительно к слою 2 слой 3, и на наших плоских экранах появится протянутая через весь участок реки плоскость water цвета чернее ночи. Проиграв анимацию, мы увидим, что она движется по канаве как раз со скоростью истечения воды в мультфильме. Обратим также внимание на то, что на неё повешено внушительное количество модификаторов типа Lattice, которые как раз и используют те решётки, которые были искорёжены под форму волн и камней на дне реки.

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

Таким образом, анимация течения воды в реке до безобразия проста и заключается только в том, чтобы протянуть плоскость через лежащие вдоль берегов модификаторы Lattice. Если взглянуть на материал этой плоскости, то можно увидеть, что именно ею и создаётся сама вода, поскольку в материале явно наличествуют включённые настройки отражения и преломления света (Ray Mirror и Ray Transp), не говоря уже о текстурах, говорящих сами за себя. 

Впрочем, материалы мультфильма «Big Buck Bunny» — это тема для отдельного разговора, и в этой главе мы её касаться не будем. 

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

Посмотрим, как это сделано. Для этого откроем файл \scenes\09_tree_trunk\01.blend и по традиции отключим те слои, которые нам в этот раз не понадобятся. Перечислять их я не буду, потому что их много, а лучше покажу скриншот. 


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

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

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

Файл с этой сценой называется \scenes\13_end\02.blend. В нём нам понадобится лишь слой 9, в котором находится поле, а под ним спряталось Empty с названием fob_low. Однако это не просто Empty. На нём висит поле типа Texture, которое как-то волнует траву. Разберёмся, как оно это делает. 

Во-первых, выясним, что за текстура там имеется. Её имя ForceColor.001. Увидеть её не так-то просто, потому что не очевидно, на какой объект она назначена, поэтому просто создадим любой полигональный объект, например, Plane, назначим ему дефолтный материал и на первый слот присвоим текстуру ForceColor.001, выбрав её из списка. 

Увидев её, мы теперь легко сможем узнать в ней трёхмерную процедурную текстуру Clouds, имеющую, к тому же, довольно простые настройки цвета и формы. Однако самое важное то, что эта процедура трёхмерная. Проиграв анимацию, мы заметим, что объект fob_low, на котором висит поле Texture, плавно опускается вниз и загручивается вокруг вертикальной оси. Стало быть, завихрения цвета в облаке текстуры ForceColor.001 будут прогибать или поднимать траву вверх, одновременно закручивая и раскручивая её по вертикали. И это в чём-то будет похоже на действие ветра! 

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

Есть много шотов, в которых колышатся листья или тени от них, поэтому я выбрал для изучения тот, что быстрее всех открывается, потому что в нём кроме листьев почти ничего и нет. Это файл \scenes\12_peach\01.blend. А в нём нам понадобится только слой 6. 

Однако будет бесполезно искать в этом файле кривые и ключи, которыми анимированы листья, потому что ничего подобного там нет. На самом деле листья были анимированы ещё раньше, в файле с деревом, а не в сцене шота. И найти тот файл нам помогут наводки из DupliGroup раздела Anim Settings и Libraries в Outliner, которые указывают нам на то, что, вероятнее всего, это \envs\branches.blend. 

Откроем теперь этот файл с ветками и увидим знакомую нам крону листьев. Прокрутим немного анимацию, чтобы убедиться, что листья шевелятся. Так и есть! Они действительно шевелятся в этом файле. Но как именно, мы пока не знаем. Однако обратим внимание, что крона — это мешевый объект leaf_peach, на полигоны которого методом DupliFaces навешаны листья из следующего прилинкованного файла. 

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

Теперь нам почти всё понятно (ну, по крайней мере, мне). Волнение меша создаётся при помощи текстуры leaves disp, а её движение сквозь меш задаёт некий объект leaves_disp. Возможность увидеть саму текстуру я предоставляю вам самим тем же способом, каким мы искали её для колыхания травы — это будет обычный чёрно-белый шум из трёхмерной процедурной текстуры типа Marble, а вот найти объект leaves_disp будет проще всего в Outliner, включив для отображения все слои. Это окажется уже привычная нам пустышка Empty, находящаяся на слое 2. А бесконечная анимационная кривая в Ipo Editor наглядно покажет нам, что её неторопливое перемещение и есть тот самый двигатель, который шевелит листья путём деформации рваного меша leaf_peach. 

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

И заключительная часть нашей статьи об анимации в «Big Buck Bunny» будет посвящена всё тем же листьям, но летающим у поверхности земли. Таких случаев было несколько: когда Большой Зай разбрасывал их руками, чтобы прикрыть свой злодейский капкан, и во время срабатывания этого капкана от удара об него персика. Подозревая, что во всех этих случаях листья анимированы одинаковым способом, мы не будем, как всегда, переутруждать себя и выберем кадр попроще, чтобы в нём было поменьше моделей. А именно вот такой: 

Содержимое этого кадра находится в файле \scenes\12_peach\06.blend. И когда мы его откроем, то просто придём в ужас, потому что неожиданно окажется, что все листья в нём — это отдельные объекты, каждый со своими констрейнами и настройками — всего 305 штук! 

И самое страшное как раз то, что настройки констрейнов у всех разные! Хотя их состав и количество одинаковое. Не будем задаваться вопросом, какой голодный студент день и ночь сидел, размножая 305 листьев и цепляя на каждый по 5 констрейнов. Скорее всего, это тоже было сделано автоматически каким-то скриптом. Наша задача сейчас — разобраться, как эти листья летают, и зачем им нужны все эти констрейны. 

Итак, выбрав для примера любой из листьев, рассмотрим, что представляют из себя его констрейны. Мы увидим, что хотя их и 5 штук, но указывают они всего на 3 объекта: p1, p2 и track. На p1 указывает один Track To и Copy Location, на p2 – два другие Track To и Copy Location, и на track – просто Copy Rotation. Найдя все эти странные объекты на слое 20 и проиграв анимацию, мы увидим, как они перемещаются. 

Анимация этих трёх объектов заставляет листья кружиться в заданном направлении и вокруг своих осей. Но и это ещё не всё, ведь листья также и падают, а, кроме того, у каждого из них циклически плавают значения Influence во всех констрейнах. Поэтому взглянем, какие у каждого из листа имеются анимационные кривые. Точнее, поглядеть можно на один из них, а на остальные предположить, что там похожая ситуация. Откроем Ipo Editor. 

На самом деле я немного схитрил и открыл сразу два Ipo редактора для одного и того же листа: первый показывает анимацию Inf одного из констрейнов, а второй — самого объекта leaf.284. 

Что мы здесь имеем? Цикличность анимации параметра Influence показывает, что каждый констрейн влияет на лист не с постоянной силой, а с переменной. Причём, поскольку во всех констрейнах Influence в одно и то же время разный, значит, фаза бесконечного цикла у них немного сдвинута, чтобы все листья не кружились синхронно. Вторая кривая с правой стороны просто указывает на бесконечное падение листа вниз по вертикали. 

Таким образом, картина становится полностью ясна. У каждого из 305 листов имеется бесконечная кривая, которая заставляет их падать вниз. В то же время, каждый из листов имеет по 5 констрейнов, которые указывают на три анимированных объекта, заставляющие листья вилять по время падения. А благодаря цикличности и сдвигу по фазе в изменении степени влияния констрейнов, листья кружатся несинхронно. 

Что ж, разобрав этот последний, но самый мудрёный пример анимации эффектов в «Big Buck Bunny», мы сделаем небольшую паузу и вернёмся в студию в следующий раз, чтобы поговорить о материалах. И в частности, о мехе братьев наших меньших. Так что не уходите далеко от ваших жидко-кристаллических приёмников. :) 

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

100 0 850 1
2
2011-07-14
[b]Блин Уласно Бвли бв такие же уроки по Maya[/b]
2011-07-23
Долой Маью! Блен форевер! Спасибо за "железячные" разборки!
RENDER.RU