Канон №16

http://ilee16.narod.ru

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

Что послужило мотивом - понятно. Надо отметить, что это первая достаточно объемная работа в Maya, после развода с MAX (судя по всему, сразу часть читателей с гневом жмет на крестик справа вверху - спокойно, представьте, что Вы полюбили другую). Остановлюсь на некоторых технических подробностях, которые удалось осмыслить.

Моделирование

Метод NURBS выбран с потолка. Забегая вперед, отмечу, что в данной ситуации, а именно, при имитации мультипликации нужно очень тщательно готовить модели, впрочем, как и всегда - это избавит от дальнейшей головной боли, нашару изготовленные модели все равно придется переделывать. Мне показалось, что для качественной прорисовки краевого контура (Ink Line) модель должна быть максимально сглаженной - тогда контур не рвется и не ломается. Методы сглаживания - на собственное усмотрение.

С целью облегчения последующей анимации для поющих персонажей заранее подготовлены фонемы артикуляции. Необходимые деформации созданы на базовых объектах с помощью Wire Tool и Bend. Фонограмма подготовлена была в первую очередь, поэтому анализ фонем и их локализация по времени не представили труда и произведены в WAV-редакторе, например, SoundForge. Оговорюсь, в принципе это можно сделать и прямо в Maya, импортировав Sound, но чтобы произвести синхронизацию, не нервничая, нужна сильная машина.

Текстурирование

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

www.aliaswavefront.com/en/Community/Learn/how_tos/rendering/toon_shader/ .

Еще ссылка - http://www.highend3d.com/maya/tutorials/xavier1/ .

Для свинцовых задниц - http://www.red3d.com/cwr/npr/ .

За недостатком времени пришлось воспользоваться рекомендациями первой ссылки.

Наложение рисунка на Toon

- не очень сложное дело, тем более, что и вариантов реализации много. Например! Текстура Maverickfile, как видно из рис. 1, накладывалась по альфе через цилиндрическую проекцию Maverickprojection и условие Maverickcondition1 - если есть альфа - накладываем альфу в качестве Color1 условия, если нет - заливка градиентом в качестве Color2 условия. OutColor от MaverickphongE нормализован MaverickClamp в пределах 0.0 - 1.0, затем через условие осуществлен remapping серой шкалы phongE на линейную заливку градиентом Maverickramp. Толщина Ink Line управляется с помощью дополнительного атрибута MaverikShader, на который ссылается второе из условий Maverickcondition2. Ну, а первое условие Maverickcondition2 - это Facing Ratio (Mavericksamplerinfo) каждой точки поверхности модели, то есть фактически угол ее нормали по отношению к продольной оси камеры. До определенного дополнительным атрибутом угла (конечно в относительных, а не в угловых единицах) все залито черным (или другим цветом, определяемым тоже дополнительными атрибутами LineR=0.0, LineG=0.0, LineB=0.0), вне этого угла - соответственно градиентом или рисунком из файла.

Сияние проблесковых маяков.

Создан дополнительный атрибут MayakGlowLevel, который связан с параметром шейдера Mayak_Red OutGlowColorR (рис.2 и 3)

Управление <миганием> производится установкой ключей дополнительного атрибута MayakGlowLevel (Рис.4)

Как видно из рисунка достаточно указать номер кадра (Time) и значение (Value).

Анимация

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

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

Все движущиеся персонажи в качестве скинов связаны со скелетонами. При сведениии в одной сцене через импорт возникает желание подвигать эти персонажики хотя бы в нужное место! Ох! Хочу предостеречь от того, на что я нарвался. И лучше, чем высказался Забелин В.В., не скажешь: - НИ В КОЕМ СЛУЧАЕ нельзя двигать скин или группировать скин со скелетоном и пытаться все вместе двигать - получатся двойные трансформации. МОЖНО создать локаторы, которые передавали бы свои перемещения и повороты на Root и ikHandles засчет пойнт и ориент констрэйнов, и вот эти локаторы можно группировать и передвинуть в нужное место. ВАЖНО не создавать двойных трансформаций. Это правило должно быть всеми известными способами выжжено в мозгу! (Цитата закончена) No comment! Мне показалось по общению в форуме, что эту ошибку делают многие, как следствие - объекты разлетаются.

Итак, посмотрим на один из файлов поподробнее (BASS_DEMO.mb и скрипт AniBASS.mel). Задача: есть поющий персонаж - ракета Maverick. Башка-нос-уши-рот-ноги. К нижней губе нужно прилепить толовую шашку-сигару, к сигаре, точнее, к бикфордову шнуру - эмиттер частиц, который бы двигался во времени по этому самому шнуру. Базовую точку дочернего объекта привязываем через pointOnSurfaceInfo к UV-координате родителя (см. скрипт). UV координату снимаем прямо с модели, поглядывая, например, в окно Script Editor (можно чаще туда заглядывать, это помогает быстрее понять смысл многих атрибутов объектов, да и освоить MEL).

Затем, необходимо заставить ракету шагать и танцевать под музыку, вовремя раскрывать рот и <произносить> необходимые звуки. Что ж, модель есть, строим скелетон, ОБЯЗАТЕЛЬНО создаем локаторы для ikHandles <ног-ушей-макушки-носа> и Root, а уже их связываем с кривыми примерных траекторий движения (анимация вдоль пути), интерактивно подстраивая U Value (атрибут OUTPUT motionPath соответствующей кривой) во времени и форму кривых. На это необходимо потратить много труда, это определит походку, синхронность, поведение и характер. Проверяем анимацию, запуская скрипт. Не понравилось - модифицируем кривые, U Value и снова запускаем скрипт. И так - до наилучшего варианта. Если не охота возиться с кривыми - управляйте движением локаторов вручную, но, по-моему, это не проще. Как видно из скрипта, ik привязаны к локаторам только pointConstrain, это немного обеднило анимацию, неплохо бы учитывать и ориентацию.

Артикуляция создана с помощью blendshape. Посмотрев внимательно на скрипт, можно увидеть, что достаточно указать текущее время (номер кадра) и номер фонемы, а остальное сделает процедура global proc prBAS (int $Phonem) установки ключей для blendShape. Опять же, очень удобно, что можно, запустив скрипт, оценить артикуляцию, и, если необходимо, откатиться назад, отредактировать номера фонем и их текущее время и снова запустить скрипт (некстати, который не претендует на изящество, но работает).

Файлы остальных персонажей проработаны аналогичным образом, нет смысла подробно останавливаться на них. Может быть кому-то будет интересно поглядеть на скрипт управления пламенем - это в файле LIGHTER_DEMO.mb и скрипте AniLIGHTER.mel.

Еще раз хочу выразить благодарность Забелину В.В., Archi Zbyshek, bog и форумам RealTime School, Render.ru за консультации, Станиславу Сваричевскому за предоставленную возможность высказаться и Сергею Цыпцыну за появление чудесной книги Maya Complete.

Ну, если кому-то этот набор слов поможет свалиться на Maya, буду рад, Игорь Леводянский, ilee@adv.md.

0 0 850 1
0
RENDER.RU