
A
Aim-ограничитель 26
B
Bugzilla 63
C
Character Studio 93
M
MEL-сценарий makeSandS 21
MEL-сценарий parentShape 11
N
normalConstraint 26
S
Set Driven Key 16
Shape-узел 10
U
Utility-узел 17
Z
zooObjectMenu 88
А
Атрибут 11
а
атрибут ikStretch 23
А
Атрибут inMesh 14
Атрибуты веса 18
Б
База данных для отслеживания ошибок 63
Базовый файл анимации персонажа 158
В
Вызов basename 161
Г
Гиперграф 13
Грубое управление 76
Группы выделения 103
Группы персонажа 103
Д
Даунстрим 13
Деформирующий узел 10
Добавление атрибутов 137
Дополнительные инструменты 88
З
Заданная форма выделения 11
И
Игровой меш 43
Инструмент IKHandle 22
Инструмент Joint 20
Инструмент Orient Joint 64
Инструмент Prefix 64
Инструмент автоматической настройки стопы 135
Инструмент выравнивания 28
Исследование и разработка 45
к
кластеры управляющих кривых 126
К
Команда addAttr 137
Команда basename 153
Команда batchIt 143
Команда buttonManip 114
Команда connectAttr 139
Команда Create Reference 154
Команда dirname 151
к
команда makeSandS 21
К
Команда setKeyFrame 17
Команда stripPrefix 154
Команда substitute 151
Команда xform 28
Контактные центральные точки 47
к
кривая NURBS 11
К
Кривая анимации 15
Л
Локализованное скручивание 50
Локатор 17
М
Маппинг в Trax 65
Математические узлы 76
Меш без истории 42
Меш для кино 43
Меш низкого разрешения 66
Мульти-оператор 104
Н
Неравномерный масштаб 20
Нечисловые соединения 14
О
Общее скручивание 50
Огибающая кластера 187
П
Пакетная обработка 142
Параметр ikBlend 24
Параметр scaleX 20
Параметр scaleY 20
Параметр растяжения 24
Переменная $command 142
Переменная $position[] 135
Переменная $prefix 140, 155
ПК-солвер спины 93
Плаг (plug) 12
Плаг вывода (output plug) 12
Плагин animImportExport 41
Повороты vs. перемещение 84
Поза да Винчи 40
Поза для текстурирования 40
Поза модели 40
Поза первичной привязки 30
Поза рига 40
Полигональный меш 10
Пределы вращения 70
Привязка объекта 28
Р
Размер и шкала 38
р
растяжение 20
Р
Реверсный узел 18
Рендер-узел 14
С
Сервер WIKI 63
с
сжатие 20
С
Скалярное произведение 26
Скелет первичной привязки 41
Скелет рига 41
Смешанные формы 40
Соединение 12
Соединение unitConversion 14
Составные ограничители 18
Сочленения
жесткость 68
размещение и движение 48
Сценарий connectRig 157
Т
Тип boolean 12
Тип float 12
Тип integer 12
Тип message 12
Тип string 12
У
Узел 9
поток данных 9
Узел animCurve 15
Узел arrowShape 15
Узел curveInfo 24
Узел curveLengthRatio 25
Узел DagPose 30
Узел initialShadingGroup 9
у
узел multiplyDivide 21
У
Узел pCube1 13
Узел pCube1Shap 9
Узел pCubeShape1 13
Узел plusMinusAverage 76
Узел polyCube1 9
Узел vectorProduct 26
Узел измерения 30
Узел с условием 19
Узел сдвига 106
Узел-описание 100
Узел-трансформ 10
Узлы создания 14
Установка Bind Method 170
Ф
Файл позы 41
Файл рига 41
Форма выделения 11
Формат .FBX 42
Ч
Чистый файл 42
Любви моей жизни – жене Дженнифер и нашей восхитительной малышке Изабелле: спасибо за то, что вы – часть этого долгого путешествия, потому что без вас я не смог бы совершить его. Брэд Кларк
Сандре и Расселу Ходж за их любовь и терпение и всем моим друзьям, которые никогда не переставали верить в меня. Джон Худ
Биллу Питу, чьи рассказы спокойно стоят в моем книжном шкафу как напоминание о детстве, и чья автобиография вдохновила меня последовать за моими мечтами. Джо Харкинс
Благодарности
Брэд Кларк
Дженнифер, спасибо за всю твою помощь и за поддержку в те 12 месяцев, что я работал над этой книгой. Ты дала мне одобрение и любовь, в которых я нуждался, чтобы взяться за эту задачу.
Мои родители, дедушка и бабушка, благодаря которым мой интерес к искусству перерос в жизненный путь – я благодарю вас. Мой дедушка Роберт Купер (Robert Cooper), который покинул этот мир, пока я работал над книгой, спасибо тебе за бесконечное количество материалов по искусству, книг по анимации и знания, которые ты дал мне в течение всей моей жизни. Я буду вечно благодарен тебе.
Некоторым из лучших друзей, которые только могут быть – Йорме Обурн (Jorma Auburn) и Джону Худу (John Hood). Без вас эта книга была бы лишь шелухой. Спасибо за энергию и терпение и за беседы в 4 часа утра о MEL, ИК и всем, что приходило в голову в столь раннее время утра. Йорма, твоя модель для книги была просто блестящей; ты, наконец, сделала двуногому существу ноги, которые не выглядели неуместно.
Джо Харкинсу (Joe Harkins), который согласился приняться за этот сумасшедший проект в последние месяцы, чтобы выручить нас. Ты сделал потрясающую работу в короткий срок, и я не смогу в достаточной мере отблагодарить тебя. Мы бы никогда не сделали этого без тебя.
Наконец, особая благодарность Майклу Форду (Michael Ford), Кайлу Кларку (Kyle Clark) и Кевину Харрельду (Kevin Harreld), которые, в первую очередь, удостоили меня честью написать эту книгу, и которые доверяли мне и подталкивали, когда мне казалось, что они выбрали не того человека.
Джон Худ
Я бы хотел поблагодарить мою мать и Рассела за их любовь и доброту.
Я бы хотел поблагодарить Брэда Кларка (Brad Clark), без которого я бы никогда не вступил в этот проект. Ты был со мной в трудные времена, и я благодарю тебя.
Лизе, которая всегда отвечала на звонок, когда мне было нужно поговорить, даже если было поздно. Твои терпение и доброта были мне большим утешением.
Огромное спасибо Дастину Клингману (Dustin Clingman), Йорме Обурн, Касто Вокалу (Casto Vocal) и Максу (Max). Вы, наверное, не знаете друг друга, но все вы были для меня огромным источником вдохновения. Дастин, однажды мы сделаем механические костюмы и совершим путешествие вокруг мира. Йорма, вы так вдохновляли меня в анимации. Без вас я бы не стал тем, кем стал. Касто, наши пути всегда как будто пересекаются, и это всегда интересно. Макс, ты всегда мог развеселить меня. Спасибо.
Лорна Ланнинг (Lorne Lanning), Шерри МакКенна (Sherry McKenna) и Oddworld Inhabitants, спасибо за возможность учиться и расти.
Я бы хотел поблагодарить Кевина Харрельда, Марту Юстак (Marta Justak) и Джоша Кэри (Josh Carey) за помощь и поддержу в этом проэкте.
И последнее, но не менее важное: особая благодарность Майку Форду и Кайлу Кларку за возможность развивать мое мастерство на новом уровне.
Джо Харкинс
Дженн, спасибо за любовь и поддержку и за сопутствие во всем. Твое понимание и одобрение были благословением этого проекта.
Моей семье, побуждавшей меня исследовать и создавать, поощрявшей во мне дух изобретательства, мудрость которой вела меня по жизни. Ваша любовь и поддержка – самое ценное для меня.
Всем в Tippett Studio, моим бывшим коллегам Полу Туриоту (Paul Thuriot), Дэвиду Ричарду Нелсону (David Richard Nelson) и Мэттью Мантину (Mattew Muntean), которые научили меня всему. Спасибо за понимание, огромный опыт и за бережное отношение ко мне.
Моему лучшему другу Мэтью Скотту (Mattew Scott), за возможность разделить с ним это необычайное путешествие в анимации, за все сумасшедшие уикенды, за то, что он – настоящий друг. Раймонду Свонланду (Raymond Swanland), Лорне Ланнинг и всем чудесным людям из Oddworld Inhabitants за то, что делились со мной творческим взглядом и чудесными персонажами, за то, что помогли мне чувствовать себя как дома.
Особенная благодарность Брэду Кларку за то, что он дал мне эту возможность, и за постоянную помощь. Спасибо Джону Худу, Майку Форду и Джошу Кэри за ценный вклад. Спасибо Кэвину Харрельду и Марте Юстак, воплотившим этот проект в жизнь.
Авторы также хотели бы отдать должное заслугам следующих людей:
Джоша Кэри, нашего технического редактора, интенсивно трудившегося сверх своих обязанностей, чтобы проработать и перепроверить всю техническую часть книги. Спасибо тебе, Джош, за дополнительную помощь. На последнем этапе редактирования он даже нашел время, чтобы написать для нас руководство по лицевому риггингу.
Даниэля Лэмота (Danielle Lamothe) и команды Alias® за предоставление программного обеспечения и помощь в создании контента книги. Благодарность от всех авторов.
Особое признание и долг благодарности всем участвовавшим художникам и техническим директорам по персонажам. Это Флойд Бишоп (Floyd Bishop) и Bishop Animation, Джош Кэри и The Animation Farm, Майк Комет (Mike Comet), Рамахан Фолк (Ramahan Faulk), Стэф Гринберг (Steph Greenberg), Кейт Ланго (Keith Lango), Шахар Левави (Shahar Levavi), Рик Мэй (Rick May), Чад Мур (Chad Moore), Калеб «Cro» Оуэнс (Caleb “Cro” Owens), Стив Талковски (Steve Talkowski) и Hornet Inc., Стив Теодор (Steve Theodore).
Дополнительная благодарность Джейсону Шлейферу (Jason Schleifer), Эрику Миллеру (Erick Miller), Джо Харкинсу и Полу Туриоту за их риггинг мастер-классы, вдохновлявшие и послужившие большим подспорьем, когда пришло время писать книгу. И всем на форумах http://jonhandhisdog.com и http://creatureTD.com. Парни, вы – огромная поддержка для новичков и старших технических директоров, спасибо за то, что помогали и постоянно делились идеями.
И еще: Джим Блум (Jim Bloom), Даг Купер (Doug Cooper), Дэвид Галлахер (David Gallagher), Рик Гранди (Rick Grandy), Майкл Иснер (Michael Isner), Свен Йенсен (Sven Jensen), Стив Келли (Steev Kelly), Робин Линн (Robert Linn), Хэмиш Макензи (Hamish Mackenzie) (macroniKazoo), Шон МакКлелланд (Shawn McClelland), Тим Нэйлор (Tim Naylor), Даг Нельсон (Doug Nelson), Джейсон Осипа (Jason Osipa), Джейсон Паркс (Jason Parks), Бэй Рэйтт (Bay Raitt), Стивен Т. Л. Роселль (Steven T. L. Rossele), Бен Раш (Ben Rush), Уилльям Тодд Стинсон (William Todd Stinson), Марк Свэн (Mark Swain), Джефф Юнэ (Jeff Unay), Натан Уолпол (Nathan Walpole), Дэвид Уолден (David Walden), Барри Уэйсс (Barry Weiss).
Создание основных персонажей
Дизайн персонажей: Джон Худ
Окончательная модель: Йорма Обурн
UV-развертка текстур: Чад Кендалл (Chad Kendall)
Создание текстур: Грегг Харгров (Gregg Hargrove) и Пио Раваджо (Pio Ravago)
Об авторах
Брэд Кларк
Брэд Кларк – отмеченный наградами художник и аниматор. В течение последних девяти лет работал в широком диапазоне проектов – от моделирования и риггинга для телевидения и видеоигр до редактирования данных движения Голума в фильме «Властелин колец. Две башни» («The Lord of the Rings: The Two Towers»). Его карьера провела его по всему земному шару: от Флориды до Филиппин, от Техаса до Новой Зеландии. Брэд преподавал анимацию, персонажный дизайн и настройку персонажей в Full Sail, обучал аниматоров 2D работе c SOFTIMAGE® в Маниле и руководил обучением художников Acclaim Austin технологии захвата движения, риггингу персонажей и созданию скриптов. Последние лекции и презентации он делал для мастерской Conceptart.org и для мастер-класса по Alias 2004 года, посвященного продвинутому искусству разработки игр. В настоящее время Брэд работает аниматором и техническим директором по персонажам студии Animation Farm в Остине, штат Техас
Чтобы обратиться к Брэду и другим авторам с вопросами или предложениями, свяжитесь с нами по адресу advancedrigging@gmail.com.
Фильмы:
«Властелин колец. Две башни»
«Тяжелый ущерб» («Major Damage»)
«Robots_PSA» (ReelFx)
Телевизионные проекты:
«Quest: Tales From the Ramayana»
Сфера интерактивных развлечений:
«The Red Star»
«NBA JAM ‘04»
«VEXX»
«NFL QBClub ‘02/’03»
«ASB 2002»
«SHOWDOWN: Legends of Wrestling»
«Turok: Evolution»
«100 Bullets»
«Alias»
(Все игры произведены Acclaim Entertainment)
Джон Худ
Джон Худ – сын пчеловода – родился в болотах Центральной Флориды. Получив степень по свободным наукам, Джон бросил перспективную работу в обувной торговле, преследуя мечту стать компьютерным аниматором. Он начал карьеру в Full Sail в качестве координатора компьютерной анимации. Переехав в Калифорнию для работы в сфере интерактивных развлечений, он нашел доходное занятие во многих крупных компаниях, таких как Eidos, Microsoft® и Oddworld Inhabitants. Сейчас он занимает должность технического аниматора в Sony Pictures Imageworks (Лос-Анжелес, штат Калифорния) и работает над «Открытым сезоном» («Open Season») – первым художественным фильмом SONY Pictures Animation.
Чтобы обратиться к Джону и другим авторам с вопросами или предложениями, свяжитесь с нами по адресу advancedrigging@gmail.com.
Фильмы:
«Открытый сезон»
Сфера интерактивных развлечений:
«Soul Reaver» (Eidos)
«Soul Reaver II» (Eidos)
«Age of Mythology» (Ensemble Studios/Microsoft)
«Stranger» (Oddworld Inhabitants)
Джо Харкинс
Джо Харкинс – технический директор по персонажам в Sony Pictures Imageworks. Сейчас он разрабатывает визуальные эффекты художественного фильма «Призрачный гонщик» («Ghost Rider»). В последнее время он работал над фильмом «Открытый сезон» – первым настоящим полнометражным анимационным фильмом Sony.
Ранее Джо был техническим режиссером по персонажам в Tippett Studio (Беркли, штат Калифорния), где занимался фильмами «Маска 2: сын Маски» («Mask 2: Son of the Mask») и «Константин» («Constantine») (научно-фантастический триллер с Киану Ривзом в главной роли, основанный на комиксах Hellblazer). В Tippett он также получил ценный опыт работы с такими фильмами, как «Матрица: революция» («The Matrix: Revolution») и «Хеллбой» («Hellboy»).
Осмысление себя как технического художника позволило Джо поделиться своими знаниями с другими путем публикаций в профессиональных журналах, таких как 3D World и Computer Graphics, ведения мастер-класса по Maya в SIGGRAPH 2004, обучения студентов и профессиональных художников. Он также был приглашенным лектором в 3December, в Академии Университета искусств, в Expression Center и в Full Sail.
Вы можете обратиться к нему с вопросами или комментариями по адресу joe@creaturetd.com или advancedrigging@gmail.com.
Художественные фильмы:
«Лига выдающихся джентльменов» («The League of Extraordinary Gentlemen»)
«Матрица: революция»
«Хеллбой»
«Маска 2: сын Маски»
«Константин»
«Открытый сезон»
«Призрачный гонщик»
Телевизионные проекты:
Gatorade Commercial Campaign
GI Joe SpyTroops Commercial Campaign
GI Joe SpyTroops: The Movie
Введение
Риггер следующего поколения
Производство. Каждый, кто пережил хотя бы один проект в среде производства, знает, каким лихорадочным оно может быть, каким напряженным, рискованным и веселым. Технический директор по персонажам может сгинуть в урагане творчества и быть сметенным по неосторожности. Этой книгой мы надеемся помочь вам, технический директор по персонажам (так же известный как ТД по персонажам), научиться более совершенным техникам обращения с возможной бурей.
Этой книгой мы хотим изменить ваш подход к риггингу. Успешный риггинг более осуществим, если вы разобьете самые сложные проблемы на мелкие задачи. Мы предложим вам взглянуть не на необъятный процесс работы, а на его отдельные компоненты и понять, как они объединяются в единое целое. Разбиение риггинга на меньшие части также делает общую задачу более гибкой, позволяет создать блоки инструментов и решений с возможностью использовать их повторно.
Если вы не работаете в большой студии, вы не можете обратиться за помощью в отдел программирования и у вас нет шести месяцев для организации конвейера настройки персонажей или создания кожной системы. Тогда вам приходится успевать сделать за день слишком много работы, и у вас может не хватать времени на что-то большее, чем торопливое сведение очередной сборки. Часто оказывается проще сразу приступить к работе над персонажем, не обдумывая заранее общую задачу. Как бы то ни было, даже срочные задания следует планировать, чтобы избежать неминуемых производственных проблем.
Этот тип анализа и продумывания – решающая часть процесса риггинга. Аккуратное планирование – то, что часто отличает самостоятельного художника, который знает как выполнять определенные действия, от профессионального ТД по персонажам, который действительно «схватывает» суть риггинга. Вы можете заниматься движением без глубокого понимания, и это сойдет вам с рук, но не тогда, когда перед вами стоят специфические проблемы риггинга. А если вы работаете в студии и несете за свою работу ответственность перед другими людьми, то гораздо сложнее заниматься риггингом, не наблюдая картину в целом. Мы надеемся расширить ваше мышление до масштабов всего производственного процесса, и показать вам, что трата некоторого времени вначале на корректную настройку персонажа действительно сохранит вашей команде время и избавит от головной боли во время работы над проектом.
Для кого эта книга
Существует множество учебников по риггингу, доступны материалы на DVD, так зачем нужна еще одна книга? Затем, чтобы прогрессировать как ТД по персонажам, а для этого вы должны понимать, почему сборка делается определенным образом. Многие учебные материалы всего лишь руководят вашими действиями, предоставляя вам самим догадываться о том, почему нужно делать так, а не иначе, и как эти действия повлияют на сборку в будущем. Эта книга познакомит вас с альтернативами, проблемами и решениями, с которыми приходится иметь дело профессиональному ТД по персонажам. Мы надеемся, что это поможет вам лучше понять, что и зачем вы сделали. У вас будут средства для решения сложных производственных проблем и повышения как скорости, так и качества вашей работы, а также работы аниматоров, работающих с вашей сборкой.
Мы писали эту книгу с мыслью о самостоятельном ТД по персонажам. Может быть, вы единственный ТД по персонажам в студии видеоигр или один из немногих ТД, создающих эпизодические телевизионные проекты и не имеющих времени на сложные сборки и симуляцию. Вы могли сами вычислить установки персонажа, но обнаружить, что учебники и источники, доступные в данный момент, не дают необходимых вам практических решений. С вашими навыками риггинга вы можете настроить вращение ноги даже во сне или трехкомпонентную руку в ИК/ФК, даже не выпив кофе с утра после целой ночи работы, но ваши текущие проекты и команды начинают требовать большего. Вы хотите улучшить качество и эффективность вашей работы, но не знаете как. Эта книга даст вам основание и направление, необходимые вам, чтобы приступить к сложным задачам и начать расти как художник и техник.
Мы постараемся держать вас в курсе развития риггинга в Maya и детально охватить фундаментальный процесс создания законченной сборки. Если что-то будет неладно, а так и произойдет, у вас будет знание и понимание правильных рабочих процессов, чтобы вовремя внести исправления и не потерять голову.
Мы проведем вас через идеи и примеры, чтобы удостовериться, что ваше понимание фундаментальных принципов достаточно для будущего построения более сложной системы. Мы также обсудим отношение риггинга к остальным этапам производства. По мере продвижения в более сложные вопросы риггинга, мы будем пересматривать возможность повторного использования кода и применения MEL в задачах автоматизации. Кроме того, некоторые вещи, с которыми сталкивается большинство ТД по персонажам, но о которых не пишут в учебниках, – это пропсы и особенности их стыковки с персонажами.
Деформации и скиннинг включают отношения между персонажной сборкой и её геометрией. В этом разделе более детально излагаются основы, представленные в книге «Inspired 3D Characters Setup», и обсуждаются распространенные проблемы деформирования персонажей, причины их возникновения и способы решений. Другие главы по деформации описывают, как смешивать техники и инструменты, чтобы добиться сложной текстуры кожи и движений мускулов, не жертвуя скоростью и результативностью и не используя специальный плагин. Цель – создать многослойные деформации с максимальным контролем над обликом персонажа. Никакой риггинг не имеет значения, если его окончательный образ – плохо деформированное месиво со сдавленными невзрачными контурами и растягивающимися, по причине плохого скиннинга, текстурами.
Как технический художник, вы наверняка столкнетесь с массой программного обеспечения, помимо Maya. Очень важно глубокое и всеохватное знание операционной системы компьютеров, используемых в вашей студии. Большая часть работы ТД по персонажам будем сконцентрирована на необходимости автоматизации процесса вне 3D приложения вашего главного компьютера, когда от вас требуется применение .bat файлов и основных скриптов, а также автоматизация таких действий, как инсталяция инструментов, обновление моделей, разметка дисков, получение доступа к управлению версиями программного обеспечения (как Alien Arain) и манипуляция операционной системой. К счастью, есть несколько крупных веб-ресурсов, обучающих созданию .bat файлов в Windows и основных скриптов в UNIX. Конечные результаты этих маленьких быстрых скриптов – важная часть интеграции производственного процесса, они могут творить чудеса эффективности в вашей студии.
Прежде чем углубляться в эту книгу, вы должны достичь хорошего понимания интерфейса Maya и того, как использовать программное обеспечение. Кроме того, на протяжении всей книги (там, где это возможно) распространенные инструменты и техники будут представлены для 3ds Max, так чтобы ТД, работающий в условиях различного программного обеспечения, смог лучше переключаться с одной программы на другую. Такое столкновение нескольких программных пакетов вполне распространено в производстве, и становится все более популярным в игровой индустрии. Твердое понимание основных идей настройки позволит вам создавать хорошие сборки, вне зависимости от выбранного 3D приложения.
Наш взгляд на риггинг таков, что даже самые сложные сборки основаны на простых шагах, которые, складываясь вместе, формируют «продвинутую сборку». Безотносительно своей сложности или простоты, сборка должна быть удобна для аниматора, обладать хорошим пользовательским интерфейсом и помогать аниматору в слежение за ключевыми кадрами. К счастью, основанная на узлах архитектура Maya предоставляет техническому директору очень открытую систему, погрузившись в которую он получает контроль над каждым уровнем персонажной сборки и деформации. Риггинг в Maya может быть очень полезным процессом с возможностью сочетать и использовать почти все части программы, чтобы сделать удобную аниматору сборку.
Для небольшой студии много очень полезных инструментов и скриптов авто-риггинга можно скачать из Web, благодаря сообществу очень активных пользователей. Эти бесплатные скрипты – большое подспорье для небольших студий или для аниматоров, которым нужно настраивать собственные персонажи. Единственный недостаток скачивания скриптов и их слепого использования заключается в том, что если что-то идет неправильно или если вам нужно сделать что-то, на что бесплатные скрипты не способны, то вы можете застрять и задержать всю команду или просрочить работу.
На что в Персонажных Риггерах смотрят студии
Взглянув на требования киностудий к идеальному ТД по персонажам, показанные далее в объявлениях, вы можете представить себе современные ожидаемые и требуемые стандарты создания высококлассных персонажей. Хотя большинство студий перечисляют качества, которыми должен обладать безупречный кандидат, в действительности набор навыков большинства людей не соответствует никакой должности в полной мере. Независимо от места вашей работы, отраженные ниже навыки важны для создания качественных персонажных сборок и инструментов в текущем производстве современных студий.
Tippett Studio и Sony Imageworks предъявляют примерно одинаковые требования к базовым навыкам ТД по персонажам.
Tippett Studio: «Создает анимационные контроллеры и поверхностные деформации, имитирующие естественную поверхность, которая определяется лежащими в ее в основе скелетом и мускулатурой. Создает аккуратные, детальные, легко управляемые аниматорами «куклы».
Technical Animators – Sony Imageworks: «Ответственный за создание специальных персонажных установок и технической поддержки персонажной анимации на всем протяжении производства. Работает на производстве с командой для определения различных установок анимации и помощи в решениях».
К профессиональному ТД по персонажам предъявляются большие требования, чем всего несколько лет назад. Создание сложных мускульных систем и более интенсивное использование имитации и технологии захвата движения (motion capture) подняли планку знаний большинства ТД по персонажам. Использование технологии захвата движения в играх не новость, но вот что действительно ново, так это владение более сложными деформациями и более реалистичными персонажами кинематографического качества. Так что техническим директорам приходится лучше понимать, как размещение сочленений и анатомия вместе помогают создать персонажей, которые в движении выглядят естественно. «Half Life 2» от Valve software – одна из первых игр, демонстрирующих использование псевдо-мускулатуры при помощи костей, которая настроена так, что скручивание, сжатие и растяжение происходят в реальном времени, чтобы зафиксировать это состояние и придать мускулам персонажа реалистичную выпуклость. Скоро это станет скорее правилом, чем исключением, по мере того как «железо» ПК и консолей будет развиваться и становиться более мощным.
Помимо требований времени, проекты стали теперь более сложными и реалистичными, в то время как время на создание объектов сократилось. Возросла необходимость эффективного и гибкого риггинга с применением сценариев и программ, автоматизирующих составные задачи.
Вне технических требований существуют и другие необходимые требования – способность работать в команде, сильные навыки коммуникации, внимание к деталям и способность следовать указаниям как лидера, так и рядовых членов команды. У каждого персонажа впереди долгая жизнь на протяжении всего производственного процесса, и поэтому понимание всех процедур, через который должна пройти сборка, очень важно. Вы быстро окажетесь в центре производства и должны будете работать с отделами моделирования, анимации, освещения. Чем лучше вы будете понимать процесс производства в целом, тем больше это поможет вам в планировании наперед, чтобы свести будущие технические проблемы к минимуму.
Будущие технические режиссеры сегодня
Так какие же требования к ТД по персонажам будут актуальны в будущем? Прежде всего, ежедневно вы должны будете предлагать решения необычных для вашей производственной среды проблем, таких как автоматизированное создание собственной сборки/скелета, создание кожи, batch-экспорт анимации, или добавление одежды и оружия, или риггинг пропсов для серии файлов.
Во-вторых, по мере того как 3D персонажи будут становиться все более реалистичными, ожидания зрителей возрастут, поэтому будет необходимо более глубокое понимание анатомии и биомеханических процессов. Вы должны будете подробно исследовать, как движения главных видимых мышц влияют на сочленения и кожу вокруг них, когда они анимированы. Еще вам придется быть четко осведомленным об истинных точках поворота каждого сочленения, а также понимать и отчетливо представлять себе, как размещение сочленений влияет на деформации и суммарное качество окончательного анимированного движения.
В-третьих, имитация будет также играть большую роль в жизни компьютерного персонажа, изображают ли его взлетающим на воздух, с подстреленной рукой или просто в специальной одежде, имеющей решатели ткани, выглядящих так, будто их можно сорвать с его тела, как в «Халке» («The Hulk»). Специалисты по волосам, одежде, имитации трюковых киносъемок, съемке движения и переориентации, моделированию выстрела и специалисты по лицам смогут в будущем играть разные роли. Эта книга затронет каждую дисциплину, несмотря на то, что каждая из них может занять на объяснения ещё одну такую же книгу.
Как бы техничны вы ни были, важны и ваша способность понимать художественную сторону того, чем вы занимаетесь, и ваши человеческие качества, умение контактировать и с темпераментными художниками, и с людьми глубоко технического склада.
Раздел 1
Основные элементы
Глава 1
Архитектура Maya
Для того чтобы эффективно заниматься персонажным риггингом, важно разбираться в архитектуре программного обеспечения для трехмерной анимации. Чтобы быть хорошим риггером, важно понимать, почему и как работает та или иная вещь. В этой главе мы рассмотрим архитектуру Maya более внимательно.
Первые программы для работы с 3D были очень примитивными и позволяли совершать лишь простые операции с 3D данными. Обычно эти данные имели вид вершин и плоскостей. По мере развития программного обеспечения возникли новые парадигмы управления данными.
Архитектура Maya построена на системе узлов (nodes) и соединений (connections). Узел polyCube1 (рис. 1.1) генерирует точки и полигоны, которые определяют форму куба. Эти данные передаются в узел pCube1Shape. Затем эта информация передается для рендеринга в узел initialShadingGroup. Соединение обозначается фиолетовой линией, соединяющей их. Треугольный указатель посередине линии показывает направление потока данных. В редакторе Hypergraph узлы отображаются так, что поток данных направлен слева направо. Окончательная конфигурация сцены, вся ее геометрия, все шейдеры, освещение и эффекты – все это зависит от узлов и соединений.
@Рис. 1.1. Узлы и соединения полигонального куба
Анатомия узла
Что такое, в точности, узел? По сути, это объект данных в Maya. Все, что вы можете выбрать в Maya, выражено в виде узла. Полигональная геометрия, поверхности NURBS, частицы – все это узлы. Есть два основных типа узлов: те, что представляют 3D объект и те, что этого не делают.
Все узлы, которые в Maya представляют 3D объекты, называются трансформами (transforms). Узел трансформы содержит всю информацию, необходимую для размещения объекта в трехмерном пространстве: атрибуты перемещения, вращения и масштабирования, несколько матриц и информацию о габаритах объекта. Также узел содержит другие различные данные, такие как, например, данные о прорисовке объекта, является ли он видимым или же шаблоном, нужно ли прорисовывать гостинг. Трансформы встроены в иерархию для возможности осуществления сложных действий, также они служат в качестве опоры для геометрии, подвергающейся рендерингу. Все объекты, которыми можно манипулировать во вьюпорте Maya, за некоторым исключением (таким как размещение проэкции текстуры и задний план), являются трансформами
Все содержащие геометрию трансформы, такие как полигональные объекты, кривые, NURBS и иерархические поверхности, также содержат узлы форм (shape nodes). Узел форм – это узел, в котором хранятся только данные о форме объекта. В случае с полигональными каркасами узел формы содержит все точки, ребра и грани, которые составляют геометрию. Узлы форм должны быть дочерними объектами трансформ - в рабочем пространстве Maya они никогда не существуют отдельно. Чтобы увидеть, как функционирует shape-узел, откройте Outliner через меню Window Outliner (Окно Схема сцены). Щелкните в пустом пространстве Outliner правой кнопкой мыши и выберите в контекстном меню Show Shapes (Показать Формы). Вы увидите, что за всеми узлами-трансформами теперь стоит [+]. Щелкните на [+], чтобы развернуть узел, и вы увидите Узел формы. Подобные узлы обладают таким свойством, что если вы при выделении во вьюпорте узла форм, Maya автоматически выберет родительскую этому узлу трансформу. Важно отметить, что, хотя все shape-узлы подчинены трансформам, не каждая трансформа обязательно содержит shape-узлы.
Узел форм – это пример узла содержащего данные, видимые во вьюпорте. В Maya есть много других узлов содержащих данные, отображение которых отключено по умолчанию. Выражения (expressions), группы выделений (selection sets), решатели Инверсной Кинематики (ИК) (IK solvers) – все это и многое другое внутренне представляется в виде узлов. Чтобы понять архитектуру узлов, откройте Outliner. Удерживайте правую кнопку мыши, чтобы активировать контекстное меню, и выберите Show DAG Objects Only (Показать только DAG-объекты). В Outliner вы увидите все используемые в Maya узлы, которые не являются трехмерными объектами. Однако многие узлы в Maya не столько содержат данные, сколько оперируют ими. Деформирующий узел, например, не содержит текущие координаты вершин, которые он деформирует. Вернее, при рендеринге геометрии данные узла формы модели проходят через деформирующий узел, который искривляет каркас модели до нужного состояния (рис. 1.2). Такой поток данных характерен для всех пакетов трехмерной анимации, и он будет более подробно описан в следующем разделе.
@Рис. 1.2. Сгибающий деформатор
Утверждение о том, что деформирующий узел не содержит данных, не совсем верно. Для увеличения скорости и интерактивности большинство узлов будут содержать локальную копию обрабатываемых данных. Таким образом, если пользователь не укладывается в отведенное время, Maya может сэкономить время, не пересчитывая все элементы трансформации. Если изменены первоначальная модель или параметры узла-деформатора, то Maya рассчитывает и кэширует заново. Все это сделано ради увеличения скорости, но с точки зрения производственного процесса надежнее рассматривать деформирующие узлы не как хранилища данных, а как их обработчики.
И в итоге то, что большинство узлов, обрабатывающих данные, также содержат некоторые данные не имеет значения, так как обычно они представлены в виде параметров, которые определяют зону действия и суть операции. К примеру, деформирующий узел содержит некоторые данные о искривлении, атрибутах верхней и нижней границ.
Shape-узлы
Из всех узлов Maya именно узлы форм имеют несколько интересных свойств. Представляют ли они из себя кривые NURBS, полигональные фигуры, иерархические поверхности или любой из других типов геометрии, которые поддерживает Maya, – они содержат используемую трансформами геометрию. Одно из самых полезных свойств метода выделения узла: всякий раз, когда вы щелкаете по геометрии во вьюпорте, выделяется ее узел-трансформа. Это позволяет задавать установки, упрощающие процесс выделения узла.
Как раз для этого Maya предоставляет упрощенный инструмент выбора узла – управляющая форма. Его недостаток в том, что значительное количество таких форм сбивает с толку. Становится трудно определить, какая из них к какому узлу относится. Есть еще один недостаток управляющих форм: в окне вьюпорта они отображаются поверх всего остального. Допустим, плечи вашего персонажа выбраны с помощью форм. Если вы взглянете на персонажа в боковой проекции, переключатели будут перекрывать друг друга. Слегка повернув изображение, вы увидите два переключателя рядом, но изображенными так, как будто они находятся к камере ближе, чем торс персонажа.
Следующий пример иллюстрирует создание органов управления для сочленений скелета (joints). Этот метод может использоваться с любыми трансформами, но обычно его применяют к сочленениям, потому что другие регулировки могут быть не входить в кривую или полигональные узлы.
1. Скачайте файл controlCurveExample.ma для первой главы по адресу http://www.courseptr.com/downloads.
2. Зайдите в опции через меню File Import (Файл Импорт). Убедитесь, что опции Group (Группа) и Use Namespaces (Использовать разделение в именах) не включены. Импортируйте файл scenes/capter01/nurbSplineCube.mb.
3. Выделите куб. Примените инструменты Move (Перемещение), Rotate (Вращение) и Scale (Масштаб), чтобы разместить куб рядом с сочленением left_Lshoulder (рис. 1.3).
4. Выделив куб, выделите также с помощью клавиши Shift сочленение left_Lshoulder. Нажмите клавишу p, чтобы привязать куб к сочленению.
5. Куб должен быть выделен. Оставьте его в этом состоянии и обнулите его перемещение и вращение через меню Modify Freeze Transformations (Модифицировать Заморозить Трансформации).
6. В командной
строке введите: parent
-r -s
curveShape1
left_Lshoulder.
Теперь выделите куб. Активируйте инструмент вращения и поверните его. Вы должны увидеть вращение сочленения.
@Рис. 1.3. Размещение кривой NURBS
Это пример заданной формы выделения (рис. 1.4). Когда бы вы ни щелкнули по кубу, выделяется сочленение. Если вы откроете Outliner, то заметите, что следующая за сочленением микро-иконка имеет форму кривой, но тем не менее это сочленение. В использовании кривой NURBS нет необходимости: могут быть применены любые формы, от полигональных объектов до NURB поверхностей. Какую бы форму вы не применили, она может быть отключена в меню View (Вид) в окне вьюпорта. В этом примере, если вы отключите Show NURBS Curves (Вид Кривые NURBS), форма выделения исчезнет. Формы выделения могут редактироваться так же, как все другие формы.
@Рис. 1.4. Привязанная кривая
Несмотря на то, что формы выделения вещь полезная, манипуляции, которые нужно совершать, несколько утомляют. Кроме того, нельзя использовать Outliner или стандартные команды Maya для того, чтобы подчинить форму сочленению. В итоге мы создали MEL-скрипт parentShape. Чтобы использовать его, выделите трансформу и затем, выделите с помощью клавиши Shift объект который вы желаете привязать к ней. Выполните parentShape, и родительская связь готова.
Атрибуты и каналы
Все данные в Maya передаются через атрибуты (attributes). Существуют атрибуты различных типов. Есть атрибуты со значениями типа float, string и так далее. Атрибуты могут быть сгруппированы. Например, атрибуты перемещения (translate attributes) .tx, .ty и .tz – дочерние объекты атрибута .translate.
Одна из важнейших характеристик атрибутов – обладание типом. То есть атрибут содержит определенный тип информации. Большинство атрибутов имеют тип float (числа с плавающей запятой). Это означает, что они содержат действительные числа, в том числе с несколькими знаками после запятой. К этому типу относятся атрибуты перемещения, вращения и масштабирования. Еще один тип – integer (целые числа). Он может содержать только целые числа. Хороший пример этого типа – атрибут, контролирующий число делений при создании сферы или куба. Тип boolean (логические значения) может содержать только 0 или 1, и никаких промежуточных значений. Хороший пример логического атрибута – видимость.
Все рассмотренные выше типы атрибутов могут быть отредактированы, так же им могут быть назначены ключевые кадры, но есть и такие типы, к которым это не относится. Атрибутам типа string не могут быть назначены ключевые кадры или соединения. Также и атрибутам типа message не могут быть назначены ключевые кадры, но могут быть присвоены соединения. Такие атрибуты, как атрибут inMesh полигонального объекта могут быть соединены, но не редактируемы. Тип – важное свойство атрибута, потому что он гарантирует, что между узлами происходит обмен нужной информацией.
В Maya почти все узлы имеют каналы (plugs). Каналы – это порты узла, через которые могут проходить данные. Почти все узлы в Maya имеют каналы ввода или вывода. Приходить данные могут через входящий канал (input plugs), и так же данные могут быть переданы другим узлам через выходящие каналы (output plugs) (рис. 1.5).
Многие каналы в Maya соответствуют атрибутам объектов. Например, все трансформы имеют атрибуты перемещения, вращения, масштабирования. Каждый из них имеет каналы ввода и вывода. Эти атрибуты можно увидеть в Channel Box (Блок Каналов), также им могут быть назначены ключевые кадры. Это также верно для многих (но не всех) атрибутов, которые пользователь может присоединить к узлу.
@Рис. 1.5. Выходящие каналы узла
@Рис. 1.6. Соединение узлов в редакторе Hypergraph
Однако не все каналы имеют свои атрибуты. Геометрия узла формы, например, имеет выходной канал. Он не привязан к атрибуту, но используется для передачи информации узлам деформаторов. Также важно отметить, что не всем входным каналам сопутствуют выходные, и что есть атрибуты без каналов вообще.
Соединения
Соединения в архитектуре Maya позволяют данным перетекать от узла к узлу. Они формируют внутреннюю сеть – ядро всех операций в Maya. Соединение – это прямая ссылка с выходного канала на входной (рис. 1.6). Существуют некоторые правила управления соединениями:
соединения могут быть направлены от выходного канала только к входному;
данные могут перемещаться через соединение только в одном направлении, от вывода к вводу. Если вам нужно соединить translateX сферы с rotateY куба, вы не можете выделить куб, ввести значение в Channel Box rotateY и осуществить перемещение сферы по оси X;
несмотря на то что соединений в выходном канале узла может быть несколько, входной канал может участвовать лишь в одном соединении. Допустим, вы хотите вывести translateX куба на translateY пяти сфер. Вы можете соединить выходной канал атрибута cube.tx с входным каналом атрибутов сфер .ty. Но вы не можете вывести .ty нескольких сфер на cube.tx;
соединения можно устанавливать только между каналами схожего типа. Например, большое количество каналов, таких как translateX, имеют числовой тип. Этот канал может быть соединен только с другим каналом такого же типа. А если бы вы попытались соединить его с каналом, скажем, матричного типа, вы бы потерпели неудачу.
Соединения – это клей, который скрепляет сцены в Maya. Когда Вы открываете сцену, Maya создает все узлы, устанавливает все атрибуты, а затем создает соединения. Важно представлять себе, как все это работает, когда дело дойдет до отладки риггинга. Достаточно часто придется вносить изменения в исходный файл непосредственно во время рабочего процесса. Когда это случается, техническому директору приходится отслеживать изменения и решать, влияет ли это на рабочий процесс в целом.
Поток данных
Поток данных – один из важнейших аспектов соединений. По мере того как Вы создаете более сложный риггинг с сетями деформаторов, поток данных приобретает очень большое значение. Как уже говорилось выше, данные передаются по сети узлов только в одну сторону, и называется это поток (downsteam). Данные берут начало в созданном узле и текут по направлению потока. Последний узел в цепочке представляет то, что будет видно в окне вьюпорта. Каждый раз, когда Maya обновляет данные, например, когда задействована временная линия, вся цепочка полностью вычисляется заново.
В истоке сети – узел, который и хранит данные, и генерирует их. Например, если вы выберете Create Polygon Primitives Cube (Создать Полигональные Примитивы Куб), то Maya создаст куб. Если вы его выделите, откроете Hypergraph (Гиперграф) и выберете Graph Input and Output Connections (Схема Входящие и Исходящие Соединения), то увидите, что появились несколько узлов. Первый узел – pCube1. Это узел-трансформы, и он предоставляет Maya информацию, необходимую для размещения геометрии. Ему подчиняется сеть узлов, составляющих фактическую геометрию. Узел polyCube1 выступает в качестве генератора: он создает геометрию куба. Затем эта геометрия поставляется в узел pCubeShape1. Вы заметите, что в Hypergraph узел pCubeShape1 не отображается как дочерний узла pCube1. Хотя их отношение ясно показано в Outliner, вы должны обращать внимание на правила присваивания имен в Hypergraph, чтобы было ясно, где какой узел. Hypergraph постарается отображать эти узлы вместе.
Работа с узлами и соединениями
Существует несколько способов манипулирования узлами и соединениями в Maya. Один из самых мощнейших редакторов это - Hypergraph. Исходя из этого, в нем можно совершать 90% действий с узлами и соединениями, с некоторой поддержкой редакторов Connection Editor (Редактор Соединений) и Hypershade.
Hypergraph – один и самых полезных для риггера редакторов. По существу, он дает карту узлов и их соединений всей сцены. Это важный инструмент диагностики, так как позволяет увидеть все входящие и исходящие соединения узла. В этой книге будет дана небольшая справка по Hypergraph, так что затратить некоторое время на знакомство с ним было бы хорошей идеей. Этот раздел раскроет не все возможности Hypergraph, а только часто используемые инструменты.
В книге «Inspired 3D Characters Setup» мы рассматриваем Hypergraph из-за его возможности отображения соединений. Сейчас мы выйдем за эту границу и используем другое его свойство – способность создавать соединения. В открытом редакторе Hypergraph, вы можете пробежать курсором мыши по любому узлу - когда курсор находится над правой стороной узла, он меняет форму. Если вы нажмете и удержите правую кнопку мыши, появится контекстное меню с большинством выходных каналов узла. Выбрав из списка один из них, вы можете перетащить линию соединения к другому узлу. Нажатие и удерживание правой кнопки мыши над правой стороной любого другого узла вызовет список наиболее часто используемых входных каналов узла. Выбор из меню одного из них создаст соединение.
Создайте в Maya полигональный куб (polyCube) и NURB-сферу (nurbSphere).
С помощью меню Window Hypergraph откройте окно Hypergraph.
Выделите два узла и активируйте пункт Input and Output Connections. Вы увидите два узла в Hypergraph.
Поместите курсор мыши на правую сторону узла pCube1. Вы увидите выделение узла цветом, и курсор изменится на указатель потокового соединения (рис. 1.7).
Нажмите и удерживайте правую кнопку мыши, и в появившемся списке исходящих соединений выберите из группы перемещений параметр translateX.
Если отпустить клавишу, то появится инструмент соединения. Переместите указатель мыши на правую сторону узла nurbsSphere1.
Когда курсор изменится, нажмите и удерживайте правую кнопку. Возникнет контекстное меню входящих каналов. Из группы вращений выберите атрибут rotateX.
Вы должны будете увидеть в Hypergraph появившееся соединение. Если вы выделите узел pCube1 и переместите его по оси X, объект nurbsSphere1 будет вращаться.
@Рис. 1.7. Курсор готов создать соединение
Точно также в Hypergraph можно быстро разбить соединение. Когда вы ведете мышью по линии соединения, она подсвечивается, и отображаются каналы соединения. Вы можете выделить соединение, щелкнув по нему левой кнопкой мыши. В этот момент его, как и любой другой объект, можно удалить, нажав клавишу Backspace или Delete.
Необходимо дать некоторые пояснения к работе с Hypergraph. Когда вы корпите над узлами и соединениями в Maya, временами узел, используемый для рендеринга, соединяется с трансформом. Когда это происходит, Maya использует соединение unitConversion. При создании этих соединений в Hypergraph вьюпорт может не обновляться должным образом. Чтобы увидеть соединение, надо заново выбрать узел и отобразить его схему, при этом соединение станет видимым. Если вы попытаетесь разбить соединения, Maya не сможет это сделать. Для этого нужно использовать Connection Editor.
В этой книге мы будем достаточно часто использовать Hypershade. Хотя большая часть работы делается в Hypergraph, в Hypershade так же есть несколько инструментов, полезных для создания узлов. Открыв Hypershade, вы увидите Create Bar (Панель создания). Эта панель в левой части окна содержит список всех рендер-узлов (render nodes), которые могут быть созданы в Maya. В отношении способа оперирования узлами и соединениями Hypershade очень похож на Hypergraph: в обоих редакторах для соединения узлов используется правая кнопка мыши.
Нестандартное соединение атрибутов
Подавляющее большинство типов соединений – числовые: float, integer или boolean. Атрибут boolean либо включен, либо выключен, что в Maya рассматривается как 0 или 1. Integer – это любое целое число: 1, 2, 3, 4, 5 и так далее, включая отрицательные числа -1, -2, -3 и так далее. К float относится любое действительное число и его остаток, например: 1,76, 3,45, -92,45. Числовое соединение может быть соединено с любым другим, так как соединение может переводить данные из одного типа в другой, например, данные типа float могут быть переведены в integer, integer в boolean и так далее.
Существует целая группа типов соединений, которые не являются числовыми и не взаимозаменяемы. Такие соединения переносят от узла к узлу особые данные. Следующий пример иллюстрирует работу нечисловых соединений:
1. Начните с новой сцены.
2. Создайте полигональный куб.
3. Создайте полигональный конус.
4. Выделите и куб, и конус и откройте Hypergraph. Отобразите входящие и исходящие соединения узлов. Вы должны увидеть узлы-трансформы, shape-узлы и узлы создания (creation nodes) каждого объекта. Узлы создания называются polyCone1 и polyCube1. Эти узлы генерируют точки и полигональные объекты для узлов форм. Когда вы выделяете конус или куб, вы можете редактировать параметры создания в Channel Box.
5. Откройте Connection Editor. Выделите узел pCube1Shape и загрузите его на левую панель. Выделите узел polyCone1 и загрузите его на правую панель.
6. Соедините атрибут Output узла polyCube1 с атрибутом inMesh узла pConeShape1 (рис. 1.8).
@Рис. 1.8. Соединение генератора формы и узла формы
Вы увидите, как конус становится кубом. Узлы создания генерируют данные, используемые для создания формы, в данном случае, вершины и поверхности, составляющие полигональный куб. Когда вы направляете те данные вывода в атрибут inMesh shape-узла, текущая форма заменяется новыми введенными данными. Такие же процессы могут быть применены и к обычным узлам формам:
Врезка. Некоторые из атрибутов объектов могут быть соединены только через Connection Editor. В Hypergraph между числовыми атрибутами почти любое соединение можно установить с помощью мыши. Другие атрибуты, как правило, должны соединяться в Connection Editor.
Начните с новой сцены.
Скачайте с Web-сайта http://www.courseptr.com/downloads файл arrow.obj. С помощью команды меню File Import переместите файл в трехмерное рабочее пространство.
Создайте полигональный куб.
Выделите узел arrow и отобразите в Hypergraph его входящие и исходящие соединения.
Выделите узел arrowShape. Откройте Connecion Editor и загрузите выбранную форму на левую понель.
Выделите узел pCubeShape1 и загрузите его на правую панель.
Соедините атрибут outMesh левой панели с атрибутом inMesh правой панели (рис. 1.9).
Вы увидите, что shape-узел куба теперь является дубликатом стрелы. Если вы выделите узел arrowShape, перейдете в режим редактирования компонентов (component mode) и начнете редактировать форму, то вы увидите, что форма дубликата меняется в полном соответствии с внесенными Вами изменениями. Если вы выделите соединение между arrowShape и pCubeShape1, отношение исчезнет, но геометрия останется такой, как задано shape-узлом polyCube.
@Рис. 1.9. Соединение shape-узлов
Врезка. В этом примере иллюстрируется способность создания иллюзорной копии в Maya, но важно отметить, что дублирование с включенной опцией иллюзорной копии создает различные отношения между копией и исходным объектами.
Кривые анимации
Один из наиболее широко используемых узлов – узел animCurve. При анимации объекта данные об анимации хранятся в кривых анимации (animation curves). Кривая анимации – это непрерывная сплайновая кривая, содержащая пары параметр/значение, а также «переключатели», управляющие интерполяцией значений. Всякий раз, когда Maya вводит значение параметра (обычно время), кривая анимации вычисляется в данной точке, и возвращается соответствующее значение. Самая интересная особенность кривой анимации состоит в том, что параметр ввода функционально обуславливается управляемым ключом (set driven key).
Входной параметр управляемого ключа кривой определяется атрибутом, с которым он соединен. Вводимые данные передаются от управляющего атрибута к узлу animCurve, который производит значение управляемого атрибута. Это один из самых полезных инструментов настройки и анимации персонажей, и поэтому было бы неплохо разобраться с управлением узлами кривых анимации. Следующий пример показывает, как решить проблему, с которой многие сталкиваются во время риггинга: изменение управляющего атрибута управляемого ключа:
Скачайте с Web-сайта http://courseptr.com/downloads файл sdk_Connection_Start.mb. Откройте его в Maya. Вы должны увидеть простые установки руки (рис. 1.10).
@Рис. 1.10. Простые установки руки
Выделите узел запястья (wrist). В Channel Box вы увидите атрибуты FingerA, FingerB и FingerC. Подведя курсор к атрибуту FingerC и перетащив его средней кнопкой мыши, вы увидите, как искривляется цепь сочленений FingerC.
Откройте Hypergraph. Отобразите входящие и исходящие соединения сустава запястья. Вы увидите, как соединение идет от узла wrist к анимационным кривым setDrivenKeys и от них к самим сочленениям.
В окне моделирования выделите сустав запястья и суставы, образующие средний палец: fingerB1, fingerB2 и fingerB3.
В окне Hypergraph отобразите входящие и исходящие соединения. Вы должны увидеть кривые анимации и суставы fingerB.
Выделите узлы fingerC1_rotateZ, fingerC2_rotateZ и fingerC3_rotateZ. Нажмите Ctrl+D, чтобы дублировать их. Перетащите новые узлы левой кнопкой мыши так, чтобы они расположились ближе к узлу wrist, для удобства.
Щелкните на узле fingerC1_rotateZ1, чтобы выделить его. В Channel Box переименуйте его в узел fingerB1_rotateZ. Переименуйте fingerC2_rotateZ1 в fingerB2_rotateZ, а fingerC3_rotateZ1 в fingerB3_rotateZ.
В Hypergraph перемещайте указатель мыши по правой стороне узла fingerB1_rotateZ до тех пор, пока курсор не поменяется на указатель соединения. Щелкните правой кнопкой мыши и выберите output в контекстном меню. Перетащите соедининие к суставу fingerB1 и с помощью контекстного меню присоедините его к атрибуту rotateZ сустава (рис. 1.11).
Соедините атрибут fingerB2.output с атирибутом fingerB2.rotateZ, а fingerB3.output – с fingerB3.rotateZ.
Следующий шаг должен быть совершен в Connection Editor. Откройте его с помощью меню Window General Editors (Окно Общие Редакторы). Выделите сустав запястья и загрузите его на левую панель. Выделите все три кривые анимации fingerB и загрузите их на правую панель. Убедитесь, что индикатор соединения установлен на from→to.
Соедините атрибут fingerB с атрибутом input каждой кривой анимации.
Во вьюпорте выделите сустав запястья. В Channel Box подведите курсор к каналу fingerB и удерживайте среднюю кнопку мыши. Вы должны увидеть палец изгибающимся, как и другие.
Механизм Set Driven Key – это просто отображение управляющего атрибута на кривой, определяющей значение управляемого атрибута. Эти кривые могут быть дублированы, они могут принимать любые числовые данные в качестве параметров, и их исходящие данные могут участвовать в соединении при условии принятия числовых параметров другой стороной.
Автоматизация сложных действий
Один из недостатков интерфейса этого редактора обнаруживается при поточной работе. Чтобы установить управляемый ключ при сложной операции, нужно много раз выделять объекты и отменять выделение и, прежде чем нажимать в окне редактора на кнопку Ключ (Key), проверять, что бы каналы были выбраны верно.
Следующий пример объяснит организацию такого поточного действия, которое облегчит преобразование сложных действий в управляемые ключи. Оно использует свойство соединений применять анимационные кривые для управляемых ключей.
Скачайте с Web-сайта http://courseptr.com/downloads файл первой главы sdk_ComplexAnimStart.ma.
Начнем построение сценария с установки ключевых кадров для объектов. Выделите узел door1. Убедитесь, что временной ползунок (time slider) находится в позиции нулевого кадра и установите ключевой кадр для параметра rotateX $$ Ключевые кадры для отдельных параметров устанавливаются в редакторе Channel Box путем удерживания на нужном параметре правой кнопки мыши и выборе параметра key selected – прим ред. $$. Так же поступите и с объектом door2.
Переместите слайдер времени на 27-й кадр. Поверните объект door1 на -130º по оси X и установите ключевой кадр. Выделите объект door2, поверните его на 130º по оси X и установите ключевой кадр.
Выделите joint1, joint2, joint3, joint4 и joint5. Передвиньте временной ползунок на 15-й кадр и установите ключ.
Выделив эти сочленения, передвиньте временной ползунок на 20-й кадр. В Channel Box введите значение вращения по X, равное 70, и установите ключевой кадр.
Выделите узел joint1 и поверните его обратно по оси X, так чтобы цепь узлов была направлена вертикально. Установите ключевой кадр.
С помощью меню Edit Delete By Type Static Channels (Редактировать Удалить По Типу Статические Каналы) удалите плоские анимационные кривые: они только прибавят ненужной работы. Оставьте только кривые rotateZ (рис. 1.12).
Передвиньте слайдер времени на 0 и нажмите на кнопку Playback (Воспроизведение). Вы увидите, как двери открываются, а сочленения разлетаются подобно бьющему роднику.
Выделите все сочленения, и с помощью клавиши Shift выделите узлы door1 и door2. Откройте Hypergraph и отобразите входящие и исходящие соединения. Вы должны увидеть все анимированные узлы и связанные с ними анимационные кривые (см. рис. 1.12). На каждый анимированный объект должна приходиться одна кривая.
@Рис. 1.12. Анимация сочленений
Создайте локатор. Он должен появиться в Hypergraph.
Выделите локатор и откройте окно Connection Editor. Загрузите локатор на левую панель. Убедитесь, что кнопка Map (Отобразить) установлена на from→to.
Выделите в Hypergraph один из узлов animCurve. С помощью меню Show Show Selected Type(s) (Вид Показать Выделенный Тип) отобразите только соединения кривых анимации с объектами. Выделите все узлы анимации и загрузите их на правую панель окна Connection Editor.
Врезка. Так как это единственный анимируемый объект сцены, вы можете выделить все узлы animCurve, введя в командную строку следующую команду: select -r `ls -type animCurve`;
На левой панели откройте группу локатора Rotate (Вращение) и выделите RotateX. На правой панели укажите курсором на атрибут Input первого узла animCurve. Прокрутите список вниз и укажите курсором на все атрибуты Input, соединяя их с RotateX $$ При отключенной в Connection Editor опции Auto-Connect Вы можете выделять нужные каналы и создавать связи нажатием на кнопку Make – прим ред. $$ (рис. 1.13).
Выделите локатор во вьюпорте. Поверните его по оси X, и вы увидите воспроизведение анимации.
@Рис. 1.13. Переназначение кривых, допускающее вращение локатора для сокращения времени просчета сцены
Данный пример демонстрирует Вам, как легко редактировать анимацию объектов до перестраивания их под управляемые ключи. На этой стадии анимацию еще можно редактировать: сохранение ключевых кадров в анимированных каналах изменит образ действий. Это происходит потому, что управляющие образом действий анимационные кривые не являются управляемыми ключами, и Maya обращается с ними в точности как со стандартными кривыми анимации. Когда выделен объект с такими кривыми, на линейке времени появляются отметки, и кривые можно редактировать, как обычно. Единственное различие состоит в том, что в них вводятся не временные данные, а параметр вращения локатора по Х.
Врезка. Создав нужный алгоритм действий, следует заблокировать (lock) каналы, управляемые кривыми анимации. Этот метод работы гибок, но также и уязвим, так как может быть искажен командой setKeyFrame , примененной не вовремя. Блокирование каналов предотвратит случайное изменение кривых.
Utility-узлы
Архитектура Maya основана на узлах, связываемых с помощью соединений. Эта информация необходима каждому бесстрашному человеку, отважившемуся нырнуть в глубины программного пакета для работы с трехмерной графикой. Но сверх того надо сказать, что есть много новых техник, связанных с применением узлов. В этом разделе мы рассмотрим utility-узлы и их использование.
Что такое utility-узлы?
Utility-узлы (utility nodes) – это узлы, которые выполняют над вводимыми данными математические функции. Первоначально они были разработаны для оперирования данными сетей рендеринга. В результате многие каналы ввода и вывода узлов обозначены R, G, и B противоположность X, Y и Z. Когда атрибут XYZ соединяется с utility-узлом, Maya для обработки данных часто генерирует узел unitConversion. Соединения узла unitConversion показаны в Hypergraph серыми пунктирными линиями.
Если в откроете окно Hypershade, перейдете на вкладку Create Maya Nodes (Создать узлы Maya) и прокрутите немного вниз, вы увидите раздел General Utilities (Главные утилиты). В этой группе вы обнаружите utility-узлы. Они выполняют некоторые простые функции, которые можно применить для создания сложных взаимодействий объектов в Maya.
Зачем использовать utility-узлы?
Польза utility-узлов очевидна, но зачем претерпевать все трудности их настройки и соединения, если можно просто написать выражение?
Узлы по сравнению с выражениями обладают большими преимуществами, в том числе следующими:
1. Узлы формируются в программном интерфейсе Maya (application programming interface – API) и компилируются в приложение. Вследствие этого они производят вычисления очень быстро;
2. Выражения должны интерпретироваться «на лету», что замедляет обновление сцены;
3. В некоторых случаях выражения могут обновляться не полностью или неправильно если были произведены изменения во временной линии или изменения управляющих атрибутов. Состояние же узлов всегда соответствует текущему моменту времени, и при изменении управляющего атрибута они полностью пересчитываются;
4. Узлы управляют атрибутами через соединения. Это стабильно и безопасно. Выражения должны опираться на заданные имена, и если объекты, с которыми они соединены, при импортировании в новую сцену переименовываются, то может произойти сбой.
Последний пункт – один из самых важных. На протяжении всей книги периодически поднимается тема упрощения технологии риггинга. Один из способов – создать библиотеку компонентов, которые вы сможете импортировать в рабочую сцену. По мере увеличения работы с узлами, Вы начнете понимать, как много сил тем самым можно сберечь.
Некоторые полезые схемы узлов
Реверсный узел
Реверсный узел (reverse node) – один из самых полезных для риггера utility-узлов, так как он позволяет эффективно сочетать два атрибута со значениями от 0 до 1. Это отличный способ сочетать атрибуты веса (weight attributes) в составных ограничителях (multi-part constraints). Этот пример покажет, как использовать реверсные узлы для переключения ограничителей веса объекта:
1. Создайте локатор и назовите его locatorA.
2. Создайте еще один локатор и назовите его locatorB.
3. Создайте полигональный куб.
4. Добавьте узлу pCube1 атрибут AtoB со значениями от 0 до 1.
5. Выделите locatorA, locatorB и куб и создайте точечный ограничитель (point constraint) и ограничитель направления (orient-constraint).
6. Соедините атрибут pCube1.AtoB с pCube1_pointConstraint.locatorA W0 и с pCube1_orientConstraint.locatorA W0.
7. Создайте реверсный узел в окне Hypershade.
8. Соедините атрибут pCube1_pointConstraint.locatorA W0 с атрибутом reverse.inputX.
9. Соедините атрибут pCube1_orientConstraint.locatorA W0 с атрибутом reverse.inputY.
10. Соедините атрибут reverse.inputX с атрибутом pCube1_pointConstraint.locatorB W1.
11. Соедините атрибут reverse.inputY с атрибутом pCube1_orientConstraint.locatorB W1.
12. Подрегулируйте атрибут AtoB, чтобы увидеть, как меняются веса.
При изменении атрибутов веса автоматически нормализуются. Эта система хорошо работает в ситуациях, когда нужно ограничить два объекта, но для ограничителей, применяющихся более чем к двум целям, она не подходит.
Узел с условием
Узел с условием (condition node) позволяет создавать простые условия, обычно требующие написания MEL-скриптов. В этом примере вы примените узел с условием и дистанционный узел (distance node), чтобы управлять объектом:
1. Создайте локатор и назовите его floor.
2. Создайте еще один локатор и назовите его control.
3. Создайте полигональный куб. Он будет представлять конечную цель ИК эффектора (effector).
4. Откройте Hypershade. В разделе utility-узлов создайте узел с условием (condition node).
5. В Hypergraph соедините атрибут control.ty с атрибутом condition1.firstTerm.
6. Соедините атрибут floor.ty с атрибутом condition1.secondTerm.
7. Откройте узел condition1 в Attribute Editor. Установите Operation (Операция) на Less Than (Меньше Чем).
8. Соедините floor.translate с каналом condition1.colorIfTrue.
9. Соедините control.translate с каналом condition1.colorIfFalse.
10. Соедините conditional.outColor с pCube1.translate.
11. Выделите управляющий локатор. С помощью инструмента Move передвигайте его вверх и вниз по оси X. Вы заметите, что когда узел достигает значения локатора floor по оси Y, куб останавливается у floor. Если вы сдвинете контроллеры X или Z вдоль оси Y, то увидите, что куб перескакивает к месту локатора floor.
12. Соедините атрибуты control.tx и floor.tx, control.tz и floor.tz.
Теперь всякий раз при перемещении объекта control объект floor будет двигаться вместе с ним. Чтобы упростить, например, шагание персонажа, атрибуту translateY объекта floor теперь можно назначить ключевой кадр.
Узел с условием предоставляет почти безграничные возможности создания схем решений, предназначенных для управления многими аспектами риггинга персонажа. Например, в простом риггинге можно с помощью параметра ikBlend выбирать между прямой кинематикой (ПК) и инверсной кинематикой (ИК). Когда задействована ИК, для размещения руки используется контроллер. Но когда аниматор переключается на ПК, узел с условием может сделать органы управления сочленениями видимыми.
1. Скачайте с Web-сайта файл первой главы conditionNode_start.ma.
2. В Hypershade создайте узел с условием.
3. Вставьте параметр ikBlend в первый элемент узла с условием.
4. Установите Operation на Less Than. Установите colorIfTrueR на 1,0. Установите colorIfFalse на 0. Установите второй элемент на 1,0.
5. Соедините атрибут outputColorR узла с условием и атрибуты сочленений .displayHandle.
Врезка. Иногда при соединении с атрибутом displayHandle в Maya вначале возникают проблемы с обновлением среды.
Теперь узел с условием отображает органы управления, если значение IKBlend меньше 1, что верно для всех случаев, когда cочленения ПК влияют на объект. Узел с условием лучше, чем прямое соединение реверсного узла, потому что параметр видимости может принимать только значения 0 или 1. Все числа меньше единицы, например 0,83, не будут восприняты как положительное значение видимости, потому что видимость – это атрибут логического типа. Эту простую технику можно применить к любому атрибуту, имеющему варианты значений 0 и 1.
Узел и основанная на соединениях структура – одна из самых сильных сторон Maya. Вооружившись знаниями о принципах работы этих систем, можно приспособить их для различных нужд.