|
Все, о чем здесь написано, никак не
претендует на методику. Скорее это –
упорядочивание очень раздробленных
соображений, возникших по мере работы над
роликом. Значит так!
Что послужило мотивом – понятно. Надо
отметить, что это первая достаточно
объемная работа в 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
|