М. Адаме, Э. Миллер, М. Симе
Maya 5 Москва - Санкт-Петербург - Нижний Новгород • Воронеж Новосибирск • Ростов-на-Дону • Екатеринбург - Самара Киев • Харьков • Минск
2004
Краткое содержание
ЧАСТЬ Глава Глава Глава Глава Глава
I. 1. 2. 3. 4. 5.
ЧАСТЬ Глава Глава Глава Глава Глава
II. 6. 7. 8. 9. 10.
Об авторах Посвящения Благодарности Введение
15 18 19 22
Maya и производственный конвейер Использование Maya Знакомство с проектами Конвейер цифровой студии Приемы работы в Maya Язык MEL
27 28 40 54 70 94
Моделирование Форматы Методы Наборы объектов Реквизит Персонажи
115 116 144 1.78 218 286
ЧАСТЬ III. Технические аспекты Глава 11. Компоновка Глава 12. Узловая архитектура
Глава 13. Создание усовершенствованных связей
325 ,
Глава 14. Частицы и динамика ЧАСТЬ IV. Глава 15. Глава 16. Глава 17. Глава 18. Глава 19. Глава 20. ЧАСТЬ
Анимация Общие аспекты анимации персонажей Подготовка персонажей к анимации Сборка персонажей Использование материалов Освещение Визуализация
V. Приложения
Приложение А. Обычные и дополнительные возможности языка MEL Приложение Б. Список терминов Алфавитный указатель
326 342
360
404 455 456 542 570 652 680 720 775 776 814 819
Содержание Об авторах О помощниках авторов О научном редакторе
15 16 17
Посвящения
18
Благодарности
19
Введение
22
Для кого предназначена эта книга Для кого не предназначена эта книга Содержание книги От издателя перевода
ЧАСТЬ I. Maya и производственный конвейер ГЛАВА 1. Использование Maya
22 22 23 26
27 28
Возможности Maya Области применения Инструменты Характеристики Эволюция Maya Работа с Maya Обучающие ресурсы
29 29 30 31 32 33 34
Заключение
38
Собственный подход
ГЛАВА 2. Знакомство с проектами Начало работы
План А
Изменение первоначального плана Марк предлагает план В
Окончательный вариант
37
40 40
41
42 45
45
Содержание
Проработка деталей Убийца плана В Заключение
46 50 53
ГЛАВА 3. Конвейер цифровой студии Подготовка к производству Сценарий Внешние проявления Технические аспекты Настройка рабочей среды Моделирование Артикуляция Материалы Компоновка Оформление сцены Производство Анимация Освещение
!>4 54 54 56 57 59 59 60 62 63 64 65 65 66
.'
Эффекты
67
Визуализация Заключение
68 69
ГЛАВА 4. Приемы работы в Maya Организация рабочего пространства Команды Параметры команд по умолчанию Клавиатурные комбинации , Полки , Контекстные меню Пользовательский интерфейс Элементы пользовательского интерфейса Меню Окна проекции Увеличение Установка границ Центрирование камеры Управление файлами Проекты Именование файлов Заключение
ГЛАВА 5. Язык MEL Назначение и порядок использования языка MEL Основные сведения оязыке MEL
70
,
70 71 71 75 81 85 86 86 89 89 90 90 91 91 , 92 „92 .93
94 94 96
8
Содержание Командная строка и редактор сценариев Использование редактора сценариев Основы программирования на языке MEL Присваивание переменным возвращаемых значений Аргументы, массивы и управляющие структуры Пример управления интерфейсом Maya Добавление нового пункта вменю Добавление нового меню в интерфейс Maya Заключение
ЧАСТЬ П. Моделирование ГЛАВА 6. Форматы Неподдерживаемые форматы Неявные поверхности Октадеревья Облака точек Выбор формата Точность воспроизведения Эффективность Точность вычислений Непрерывность Гибкость Назначение материала Полигоны Гибкость топологии Позиционная непрерывность Назначение материалов NURBS-поверхности Параметризация Прямолинейная топология Обрезка Гладкие поверхности Деформируемость Иерархические поверхности Гибкая топология плюс иерархия Тангенциальная непрерывность Назначение материалов Выбор метода моделирования поверхности Персонажи Автомобили Пожарный гидрант Витрины магазинов Другие возможности моделирования Эффекты рисования
96 99 101 102 103 108 ПО 112 113
us Ш 116 117 117 117 117 118 118 118 119 119 119 120 120 122 123 124 124 128 129 129 130 132 132 136 138 138 139 139 140 141 141 141
Содержание
9
Капли воды
142
Волосы и мех
142
Заключение
142
ГЛАВА 7. Методы Вспомогательные образы , Получение опорных материалов Подготовка иллюстраций Планирование работы , Основные этапы Вспомогательные элементы Советы Проработка деталей Получение плавных границ Создание кромки Формирование скоса
,
144 145 145 147 152 1S2 153 154 155 155 163 166
Создание впадин и выступов
168
Ухабы и колдобины Заключение
174 176
Туннелирование
168
ГЛАВА 8. Наборы объектов Подготовительные операции Планирование Стандартизация Обмер Макетирование Обустройство территории Бордюры Тротуары
178 ,
Улицы
Пляж Строительство Планирование квартала Неподвижные части зданий Детали Двигаемся дальше Заключение
ГЛАВА 9. Реквизит Общее руководство по моделированию реквизита Пространство Простота Структура
178 178 179 381 182 185 1.85 193
199
200 203 203 205 208 214 216
218 218 218 221 222
10
Содержание Простые модели реквизита Большая кость Пожарный гидрант Автомобиль — сложный элемент реквизита Панели кузова Заключение
ГЛАВА 10. Персонажи Функциональные и эстетические критерии Достоинства иерархических поверхностей Дополнительные критерии Уровень детализации Избыточные точки Текстуры Создание Кляксы и Крутана Подготовительные операции Моделирование Кляксы Моделирование Крутана Заключение
ЧАСТЬ III.
Технические аспекты
ГЛАВА 11. Компоновка Понятие компоновки Интервью с сотрудником отдела компоновки Четкость изображения От раскадровки к первичной анимации Заключение
ГЛАВА 12. Узловая архитектура Преобразования в отношениях предок—потомок Объекты, формы и подобъекты Основы узловой архитектуры Maya DAG-узлы DG-узлы Типы узлов Узлы, не являющиеся DAG-узлами Просмотр графа истории иузлов сцены Связывание атрибутов различных узлов Заключение
224 224 237 258 260 285
286 286 287 288 288 289 290 291 291 294 308 324
325 326 326 327 329 331 341
342 342 345 347 347 347 352 352 353 355 ,. 358
Содержание
ГЛАВА 13.
И
Создание усовершенствованных связей
360
Связывание узлов Практическое применение ограничений Вторичные движения
360 376 377
Изменение геометрии после соединения сочленений с телесной оболочкой Заключение
399 403
ГЛАВА 14. Частицы и динамика
404
Распространение частиц
404
Столкновения
407
Управляющие узлы
411
Сила тяжести
411
Визуализация частиц Аппаратная визуализация
416 416
Программная визуализация Создание хвостов у капель воды Заключение
425 435 454
ЧАСТЬ IV. Анимация
455
ГЛАВА 15. Общие аспекты анимации персонажей Анимация в Maya , Интервью со Скотом Кларком Планирование анимации Первый шаг —свое видение Второй шаг — исследование движения Психология — теория мини-сценария Исследование сюжета Исследование движения Готовые видеоматериалы Захват движения Исследование видеоисточников Принципы анимации и программа CAPS CAPS, С — это Character CAPS, A-3TOA.S.A.F.E
CAPS, P — это Physicssss CAPS, S - это STS
Поза персонажа Окончательный план Процесс производства Деформация модели Элементы управления Деформация конечностей
456
•.
457 459 463 463 471 , 473 475 475 476 477 , 478 479 480 481
483
484
488 491 492 ,. 492 494 506
12
Содержание
Задание поз Создание ключей Временные интервалы Диалоговое окно Graph Editor Да пребудет с вами сила Последние советы Заключение
514 519 534 537 538 340 540
,
ГЛАВА 16. Подготовка персонажей к анимации
542
Пять золотых правил подготовки персонажа Знание анатомии персонажа Требования к движению персонажа Простое и интуитивно понятное управление персонажем Приведение впорядок файлов Активное тестирование системы Конвейер подготовки персонажа Одиннадцать распространенных ошибок при подготовке персонажа
542 543 543 544 545 548 548
Заключение
569
550
Интервью с Полом Туристом
565
ГЛАВА 17. Сборка персонажей Подготовка персонажа канимации Создание иерархий сочленений для анимации
570 570 571
Сборка собаки Позвоночник и бедра собаки Анимация лап персонажа по методу обратной кинематики Сборка хвоста и ушей
575 575 576 581
параллелепипедов Усовершенствованные элементы управления двуногим персонажем
584
Заместители с низким разрешением Подсоединение к сборке персонажа управляющих
582
,
589
Усовершенствованные растягивающиеся 1К-ноги и классическая обратная нога
608
Усовершенствованные IK-руки и ключичный треугольник Подключение скелетной иерархии головы Элементы управления чертами лица и деформатор Blend Shape Создание элементов управления глазами Волосы Крутана
Гладкое связывание аппроксимирующей геометрии Весовая раскраска гладкой оболочки
616 637 639 640 ,
642
642 645
Содержание
13
Весовая раскраска отдельных вершин Дополнительные объекты влияния Заключение
649 650 650
Использование материалов
652
Мир материалов Достижение сходства , Качество поверхности Создание материалов Диалоговые окна Multilister, Hypershade и Visor Эффективная настройка материалов Создание библиотек Назначение материалов Оценка вида материалов Создание карт текстур Нарисованные карты текстуры Отсканированные текстуры Текстуры, созданные с помощью эффектов рисования Процедурные карты текстур Пример материала Проецирование материала на поверхность Заключение
652 653 664 665 666 667 668 670 670 !э71 671 672 672 673 673 674 679
ГЛАВА 18.
ГЛАВА 19. Освещение Мир в свете Управление тенями Методология освещения в Maya Глобальная освещенность и методы ее имитации Имитация глобальной освещенности с помощью стандартного визуализатора Имитация глобальной освещенности с помощью купола Создание и подготовка HDR-изображений Цветовые сценарии , Заключение
ГЛАВА 20. Визуализация Визуализация при помощи стандартного визуализатора Недостатки стандартного визуализатора Сглаживание Трассировка лучей Размывание вдвижении Глубина резкости Заполнение ..
680 680 681 689 691 692 692 705 711 718
720 720 , 721 723 725 727 728 730
Содержание
14 Память Эффективность анимации Материалы и карты текстур
732 733 733
ВОТ-файлы
734
Тени Диагностика визуализации Визуализация из командной строки Предварительный просмотр результатов визуализации Контрольная проверка Предварительные тесты Визуализатор Mental Ray Известные недостатки Общие параметры Многопроходная визуализация Послойная визуализация Глобальные проходы Слои освещенности Выбор метода Фабрики визуализации Программное обеспечение Выбор платформы Аппаратное обеспечение Компоновка фабрик Окончательный вывод Видео Видео высокой четкости и цифровое видео Пленка Заключение
735 737 738 739 741 742 742 743 745 757 757 758 759 759 767 767 768 768 771 772 772 773 773 773
ЧАСТЬ V. Приложения
775
Приложение А. Обычные и дополнительные возможности языка MEL
776
Понятие узла сценария Создание и использование узла сценария Комбинация команды scriptJob с узлами сценариев. Загрузка исполняемого файла и получение результатов Обработка ошибок Написание сценариев и ведение журнала ошибок Дополнительные возможности языка MEL Написание деформатора Заключение
776 777 783 786 787 792 795 799 813
Приложение Б. Список терминов
Алфавитный указатель
814
.. 819
Об авторах Марк Адаме (Mark Adams) занимается компьютерным моделированием уже более 20 лет. Он начинал чертежником в Дейтройте, оставив сумасшедшую идею выучиться на адвоката. Однажды он увидел работы Роберта Абеля (Robert Abel) и решил, что должен заниматься тем же. Четыре года из следующего десятилетия Марк проработал в компании Intergraph, затем перешел в фирму Alias, где в его обязанности входило изучение, демонстрация и поддержка различных инженерных приложений и решение возникающих при работе с клиентами проблем. Б 1994 году он получил приглашение от фирмы Pixar и в результате оказался в Калифорнии, где работал над мультфильмом Toy Story (История игрушек). С тех пор он является техническим директором художественных фильмов этой фирмы, выпуская кроме этого компакт-диски и рекламные ролики и специализируясь в основном на моделировании объектов. В настоящее время Марк ежедневно работает с Maya. Он участвовал в пятом фильме этой студии Finding Nemo (В поисках Немо). Марк проживает на северном побережье с женой, двумя сыновьями, двумя кошками и многочисленными компьютерами. По знаку зодиака он Лев, и считая астрологию ерундой, он тем не менее с интересом читает все, что относится ко Львам. Эрик Миллер (Eric Miller) в настоящее время является техническим директором компании Digital Domain, получившей Оскар за визуальные эффекты в таких фильмах, как The Time Machine (Машина времени), Lord of the Rings (Властелин колец), Х-Меп (Люди X) и Armageddon (Армагеддон). Эрик работает с Maya каждый день, создавая с помощью этого приложения многочисленные подключаемые модули и сценарии, занимаясь сборкой персонажей и их деформацией, организуя производственный конвейер для высокобюджетных художественных фильмов и коммерческих проектов, для реализации которых Maya используется вкупе < другими приложениями. За время работы в Digital Domain Эрик успел внести свой вклад в ряд важных проектов. Системы деформации поз и мускулов/кожи для Maya составляют только небольшую часть результатов его труда. Он принимал участие в работе над высокобюджетным фильмом-катастрофой After Tomorrow (Когда насупит завтра) и выполнял обязанности руководителя группы в проекте /, Robot (Я, робот) по новеллам Айзека Азимова (Isaac Azimov). В числе его многочисленных заслуг можно упомянуть усовершенствованный метод сборки персонажей, сложные деформации оболочек, интеграция в Maya визуализатора RenderMan и реалистичную имитацию динамики и тканей. Эрик имеет степень бакалавра изобразительных искусств в области компьютерной графики, полученную в колледже Академии искусств, и сертификат специалиста по сборке персонажей от фирмы AUas|Wavefront. Он работает с Maya с момента появления версии 1.0.
16
Об авторах
Макс Симе (Max Sims) начал свою карьеру в Европе в качестве дизайнера автомобилей фирмы «Опель», а впоследствии и «Рено». Он стал сотрудником компании Alias в 1989 году, выполняя заказы по промышленному дизайну и анимации. Затем он основал собственную фирму развлекательного и промышленного дизайна Technolution, которая может похвастаться такими клиентами, как компании PDI, ILM, Pixar, Frogdesign и Apple Design. Он пошел дальше, став руководителем, ответственным за разработку новой продукции в фирме Thinkreal, которая является филиалом итальянской компании think3. В 2000 году он присоединился к проекту LuuLuu.com, создав инструменты для цифровой моды. Как руководитель производства трехмерной графики он ежедневно работает с Maya, моделируя тела персонажей и одежду для них. С 1994 года Макс преподает визуализацию и моделирование, а также Maya в Академии искусств Сан-Франциско. Кроме того, он является профессором политехнического института в Когсвелле, где преподает дизайн и Maya. Он также дает уроки в студии Painter and Advanced Alias в отделе индустриального дизайна Академии искусств. Макс до сих пор практикует как дизайнер. Его адрес
[email protected]
О помощниках авторов Адриан Даймонд (Adrian Dimond) является директором отдела анимации и руководителем отдела визуальных эффектов. В настоящее время проживает в Лос-Анджелесе. Работал над телевизионными шоу, принимал участие в производстве фильмов Cherish (Чериш) и Max Steel (Макс Стил), а также в создании компьютерной игрушки Mad Trix. Адриан начал изучать компьютеры в школе при институте искусств в Чикаго, где он также осваивал живопись, скульптуру, актерское мастерство, цифровое аудио и видео. Он говорит: «Когда я открыл для себя мир трехмерной графики, я понял, что смогу объединить все аспекты традиционных и современных искусств». В свободное время Адриан пишет сценарии на языке Perl и перестраивает интерфейс своего компьютера. Он является активным членом сообщества highend3d.com, где с удовольствием делится своими взглядами, приобретенными за более чем 10 лет работы в области компьютерной графики. Вилл Пэйсиус (Will Paicius) считает себя гуру в анимации персонажей, тем не менее надеясь, что его лучшая работа в этой области еще впереди. Он постоянно совершенствует свои навыки, двигаясь к намеченной цели. Его основным занятием является преподавательская деятельность в политехническом колледже в Силиконовой долине, где он дает уроки по анимации персонажей и дизайну компьютерных игр. Много времени он посвящает и игровому клубу Когсвелла (fuzzywoto.com). Кроме того, он преподает в колледже Деанза и других учебных заведениях на побережье. Билл основал некоммерческую компанию NeoCreations, обеспечивающую студентов работой по контракту. Именно эти студенты моделировали игру HydroThunder. Даниэль Наранжо (Daniel Naranjo) является ведущим создателем персонажей и трехмерных объектов в фирме AJvanon Inc., которая осуществляет визуализацию, управление данными и быстрое создание прототипов для швейной промышленности. Кроме того, Дэн посещает школу искусств и занимается традиционной скульптурой. Он накапливает бесценный опыт в области баланса, веса и пропор-
О научном редакторе
17
ций органических и неорганических форм традиционной скульптуры. Эти знания он применяет в ежедневной работе по моделированию трехмерных объектов, которые, в конечном счете, служат основой для создания реальных скульптур. Создаваемые им прототипы используются для визуализации и производства различной продукции. Даниэль Ройзман (Daniel Roizman) работает в индустрии визуальных эффектов уже более восьми лет. Он начал свою карьеру в фирме AUasjWavefront в качестве члена команды, занимавшейся разработкой Maya. Даниэль выполнял обязанности руководителя отдела визуальных эффектов для различных проектов, в том числе для фильмов Х-Меп (Люди X) и Spider-Men (Человек-паук). В начале 2000 года он основал фирму kolektiv (www.kolektiv.com), которая предоставляет услуги компаниям, специализировавшимся на создании различных эффектов. Именно эта фирма поставила DVD с учебными фильмами для компании AliasjWavefront, сотрудничала с такими экспертами в данной области, как Habib Zargarpour, разработала подключаемые модули для Maya, которые в настоящее время применяются по всему миру.
О научном редакторе Весомый вклад в создание книги внес научный редактор. По мере написания глав он просматривал все материалы, оценивая их на техническое соответствие. Линда Роуз (Linda Rose) в течение 12 лет являлась ведущим техническим писателем фирмы AliasjWavefront. Она начала работать с Maya с момента появления на свет версии 1, специализируясь на имитации динамики и тканей, а также занимаясь подготовкой справочной документации по этому приложению. На данный момент она полностью переключилась на разработку справочных систем, являясь внештатным сотрудником фирмы AliasjWavefront. Линда проживает во всемирно известном городе Сайта- Барбара с мужем и дочерью.
Посвящения Я посвящаю эту книгу моей любимой жене Стефани, чья любовь и поддержка дали мне возможность осуществить этот проект, а также своим сыновьям Петеру и Кевину, которые мирились с отцом, в течение многих месяцев: скрывающимся в своем офисе, вместо того чтобы играть с ними. Я также благодарен моей матери, которая всегда предъявляла ко мне высокие требования и смогла понять, что карьера в области компьютерной графики станет для меня лучшим выбором, чем юридическая практика. Марк Адаме Я бы хотел посвятить свою часть книги моей бабушке Иде Димео, которая растила меня с раннего детства, Она умерла, когда я работал над этой книгой. Боже, упокой ее душу... Я также благодарю Монику, мою красивую и умную жену и настоящую подругу жизни, за ее любовь, эмоциональную поддержку и твердость. Эрик Миллер Я посвящаю эту книгу поддерживавшей меня жене Крис Салите и моей любимой дочери Зелии Катарине Симе. Я написал первые слова этой книги в очень странный день. 11 сентября моей дочери исполнился год. Но перед тем как она проснулась, я услышал в новостях о страшной трагедии. Что бы мы знали о счастье, если бы не было боли? Я также хочу поблагодарить своих родителей Джозефа и Динею Симе за то, что они сделали меня тем, кто я есть, и никогда не пытались вмешиваться в мою карьеру. Я хочу сказать спасибо Эдварду и Марии Сапита за их чудесную дочь, которая стала моей женой. Я обязан поблагодарить супруг моих коллег и соавторов Эрика и Марка, которые поддерживали их и позволили им внести значительный вклад в наш проект. Спасибо вам, Стефани и Моника! Я не могу не упомянуть своих братьев Чино, Марко и Джулио. Я искренне сожалею, что на конце моего имени нет буквы «о». Не стоит забывать и о моих свояченицах Диане, Кэрол, Карен, Джиме, Поле и Кэти. И, конечно же, о моих племяннике и племяннице Лнаме и Мойре. Благодарю также моих друзей, которым я не мог уделять много времени из-за работы над этой книгой: Джима Лефтвича, Дебби Янга, Джефа и Лорел Стван, Пола и Робин Мерфи. Я хочу искренне поблагодарить Марка Адамса, Эрика Миллера, Даниэля Ройзмана и Скота Кларка за их вклад в такой крупный проект. Книга определенно выиграла от их участия. Макс Симе
Благодарности Сердечно благодарю основателей фирмы Alias Research, которые дали мне возможность отойти от инженерной работы с CAD и заняться более творческим делом. Спасибо также сотрудникам бывшей компании Wavefront, подстегивавшим won соревновательный дух, что привело к созданию многофункциональных продуктов. И теперь, когда недавние соперники объединились в одну компанию, такие пользователи, как я, могут наслаждаться потрясающим инструментарием и творческими возможностями Maya. Годы, проведенные мной в компании Alias, были наполнены встречами с людьми, которые заслуживают публичного признания за их совершенно безвозмездную помощь. В частности, я хотел бы упомянуть Кевина Турецкого (Kevin Tureski), Джона Гибсона (John Gibson) и Милана Новачека (Milan Novacek). Своими секретами со мной делились и талантливые инженеры. Особую благодарность я хотел бы выразить Стэнли Лью (Stanley Liu), Филу Мою (Phil Moy), Дамиру Фрковицу (Damir Frkovic) и Брэду Редмонду (Brad Redmond), Я не могу даже вообразить, чем бы я сейчас занимался, если бы не Дамир Фрковиц, который в далеком 1994 году поинтересовался, нет ли у меня желания поработать в фирме Pixar. Детройт, конечно, замечательное место, где навсегда останутся мои спортивные пристрастия, но когда я смотрю в окно на небеса над Сан-Франциско и вижу всех этих талантливых людей, заходящих в мой офис, я вспоминаю, что с этого телефонного звонка началась новая полоса в моей жизни. Разумеется, я в громадном долгу у многих сотрудников фирмы Pixar, в частности у Эбена Остбай (Eben Ostby) и Элиота Смирла (Eliot Srairl), за их непрекращающуюся помощь на протяжении нескольких фильмов и нескольких лет. Я бы также хотел поблагодарить Дейдра Барина (Deidre Warm), Келли Петере (Kelly Peters) и Синди Косенцо (Cindy Kosenzo) за их умение управлять производством, которое помогло мне сохранить рассудок в моменты напряженной работы. Наверное, я бы так до сих пор и работал только с приложением AutoStudio от Alias, если бы не поддержка и обширные познания в Maya других сотрудников фирмы Pixar. Лидерами тут были Брайан Бойд (Bryan Boyd), Брюс Бакли (Bruce Buckly) и Мартин Костелло (Martin Costello). Дополнительное спасибо Джошу Рейсу (J°sh Reiss) за его терпение, с которым он выслушивал жалобы на проблемы, возникающие при работе с Maya, и за знания, которые позволили ему показать мне пути решения всех этих проблем. Особая благодарность Джону Ласситеру (John Lassister), показавшему нам, какие волшебные вещи можно делать с помощью компьютерной графики, Эдду Катмулу (Ed Catmull) за его вклад в создание этой замечательной фирмы и Стиву
20
Благодарности
Джобсу (Steve Jobs), который верил в чудеса и в нашу счастливую звезду еще в те времена, когда название фирмы Pixar еще не было известно широкой публике. Я также хотел бы вспомнить былое и поблагодарить Кетлин Ханна (Kathleen Hanna), Патрисию Феррик (Patricia Ferrick), Джина Йоргенсона (Jean Jorgenson) и Алена Гилберта (Allen Gilbert) за шутки и энтузиазм, которые сделали мои первые годы работы в компании Intergraph столь приятными. Такие люди, как они, показали мне, что даже требующая колоссального напряжения карьера в области трехмерной графики может доставлять удовольствие. Огромное спасибо Линде Бапм (Linda Bump), Виктории Элзи (Victoria Elzey) и Одри Доил (Audrey Doyle) за их непрекращающуюся поддержку и терпение, когда мы трудились над этой книгой. Начинающие авторы являются поистине несносными созданиями, но вы не жаловались, а двигали проект вперед. Ну и, наконец, я хотел бы сказать спасибо Максу Симсу, который привлек меня к этому проекту и снисходительно относился ко всем проблемам, возникавшим изза моего участия. Огромное спасибо также Эрику Миллеру, Даниэлю Ройзману и Скоту Кларку за их вклад и усердную работу. Марк Адаме Я благодарю мою мать Анну и Джима за все ценные советы, мудрость, поддержку и уроки, которые я получал в этой жизни. Благодарю моего отца Стива, а также Кэрол, Грэмму, Грэмпу и всю мою семью, любовь и поддержку которой я ощущал все эти годы. Благодарю Макса Симса, Крис и Зейлу Симмс, Линду Бамп, Одри Доил и других замечательных редакторов и авторов, которые внесли свой вклад в создание этой книги: Даниэля Наранжо (Daniel Naranjo), Пола Туриста (Paul Thuriot), Менфред Рейф (Manfred Reif) и команду фирмы LuuLuu/Alvanon, Дарина Гранта (Darin Grant) и всех потрясающе талантливых сотрудников фирмы Digital Domain, Стива Моцери (Steve Mauceri), Тима Колемана (Tim Coleman), Натана Вогеля (Nathan Vogel), а также фирмы ААС и Mesmer. Наконец, я благодарю всех, кто когда-либо помогал мне в личном или профессиональном плане, а также всех читателей данной книги. Именно вам адресуются мои наилучшие пожелания. Эрик Миллер Я хочу поблагодарить всех нынешних и предыдущих сотрудников фирм Alias Research и Wavefront Technologies за создание такого непостижимого приложения, как Maya. Сотрудничество с вами, как и возможность пользоваться плодами вашего труда, большая честь и удовольствие для меня. Особую благодарность я хотел бы высказать сотрудникам компании Alias|Wavefront, работающим в Сан-Франциско. В их число входит Джим Лоренц (Jim Lorenz), много лет назад продавший мне мою верную старушку Indigo 2, Хезер Хаджес (Heather Hughes), которая обслуживает пользователей в прибрежном районе Сан-Франциско, и Пит Биллингтон (Pete Billington), осуществлявший техническую поддержку и глубоко понимавший суть происходящего. Я хотел бы также поблагодарить сотрудников фирмы Alias)Wavefront: Донну Теггарт (Donna Teggart), Хезер Кернахан (Heather Kernahan), Дэрлин Димаюга (Darlyn Dimayuga), Дэвида Ло (David Lau), Шелли Модерн (Shelly Morden), Ларису Страк (Laryssa Struk), Двейна Пута (Dwayne Foot) и Ренука Махарадж (Renukah Maharaj). Благодарю Стива Спенсли (Steve Spencely) за разработку лучше-
Благодарности
21
го пользовательского интерфейса на этой планете, Кевина Турецкого (Kevin Tureski) за его доверие, Дэйва Верри (Dave Wharry) за своевременную доставку продукции пользователям, Питера Местоблера (Peter Mehstaeubler) за ту самую встречу в Санта-Клара, Билла Бакстона (Bill Buxton) за ту прогулку в Сиэтле и всех президентов компании AUas|Wavefront — в частности Пенни Уилсона(Penny Wilson), Благодарю Дуга Уолкера (Doug Walker) за взлелеянную им веру в будущее Alias|Wavei'ront. Огромное спасибо Дэнису Пэйну (Dennis Payne), Брайану МакЛюру (Brian McLure) и Кристен Пирс (Kristen Реагсе) из фирмы Snader and Associates за их великодушную поддержку. Я также хотел бы поблагодарить Линду Бамп (Linda Bump) из издательства New Riders, которая нашла меня и убедила написать ату книгу. Спасибо за мой лихорадочный график работы и неистовую любовь. Благодарю Стефани Уолл (Stephanie Wall), которая не побоялась поставить на трех беспокойных авторов, Я также хотел бы поблагодарить Одри Доил (Audrey Doyle) за ее замечательную редактуру и потрясающее знание грамматики. Благодарю Викторию Элзи (Victoria Elzey), которая провела через все это таких неофитов, как мы, Марию Рапозо (Maria Raposo) из ATI, Крис Зейтц (Chris Seitz) из Nvidia, Кони Сью (Connie Siu) из AMD, Адама Шнитцера (Adam Schnitzer) из Lucas Arts и Пола Туриста (Paul Thuriot) из Tippet. Благодарю всех моих студентов и коллег, с которыми мне довелось поработать за прошедшие годы, за полученный с их помощью опыт. Благодарю моих прежних сотрудников, в частности Брюса, Эрика, Дебби и Мэтта С., Мэтта Дж., Майка К., Алекса С., Пола Т. и Свена Дж. Спасибо вам, Дэйв Коул (Dave Cole), Дэн Брик (Dan Brick), Хидеки Масуда (Hideki Masuda), Кевин Кэйн (Kevin Cain), Ронн Браун (Ronn Brown), Уильям Рентерья (William Renteria), Джош Хартл (Josh Hartl) и Билл Барранко (Bill Barranco). Я признателен всем библиотекарям и любителям книг, которые встречались на моем пути. Особо хотелось бы выделить Брюса Г. Даме (Bruce G. Dahms) из библиотеки Когсвелла. Без вас у меня не было таких обширных познаний и такого шикарного дома с этими треклятыми книгами. Оказывается, это такое удовольствие — отбросить книгу подальше. За всем этим я забыл двух других потрясающих библиотекарей — Гретхен Гуди (Gretchen Goode) и Лилиан Хезертон (Lillian Heatherton) из Академии искусств. Макс Симе
Введение Книга «Maya 5 для профессионалов» призвана научить вас разрабатывать проекты с помощью приложения Maya от фирмы Alias) Wavefront, предназначенного для моделирования, анимации и визуализации сцен. Мы написали книгу так, чтобы показать все этапы работы над коротким фильмом. Книга предназначена для тех пользователей, которые уже имеют опыт работы с Maya, но хотят больше знать о производстве анимации и деталях этого процесса. Основное внимание уделяется способам создания фильма и применению основных инструментов. Все авторы являются профессионалами в области компьютерной графики и работают с Maya практически ежедневно. Каждый из них рассказал о той части процесса, специалистом в которой он является. В итоге получилась книга, которая описывает весь «производственный конвейер» цифровой студии.
Для кого предназначена эта книга Эта книга предназначена для пользователей, уже имеющих базовые навыки работы с Maya. Тем, кто хотел бы больше знать о Maya и о методах работы с этим приложением, книга должна понравиться. Квалифицированные пользователи обнаружат тут описания альтернативных подходов к решению многих проблем и смогут детально познакомиться с неизвестными им ранее аспектами применения Maya. Так как специалистов сразу во всех областях, связанных с производством фильмов, по определению существовать не может, книга написана разными авторами, каждый из которых поделился своими знаниями. Их описания рабочего процесса без сомнения будут интересны квалифицированным пользователям и тем, кто хочет таковым стать. Все авторы имеют большой опыт работы с данным приложением и с удовольствием открывают вам свои секреты, В этой книге вы не найдете инструкций вида «нажмите эту кнопку» — вместо этого описаны основные этапы производства анимации с точки зрения профессионалов и опытных пользователей.
Для кого не предназначена эта книга Пользователи, только что начавшие знакомство с компьютерной графикой вообще и с приложением Maya в частности, вряд ли смогут усвоить материал книги,
Содержание книги
23
Не подойдет она и тем, кто ищет пошаговых инструкций с дотошным перечислением команд меню. Некоторые аспекты работы, такие как моделирование из фрагментов, вообще остались «за кадром». Мы надеемся, что интерес наших читателей к компьютерной графике не является праздным. Хотя, разумеется, мы осознаем, что само по себе прочтение данной книги не сделает из вас профессионала, дост< >йного работы в крупной цифровой студии. Не существует вещей, способных заменить личный опыт, и эта книга не является исключением. Описать все приемы работы с Maya просто невозможно. Если вы хотите знать, как функционирует Maya и познакомиться с этим приложением с самого начала, мы рекомендуем обратиться к другим источникам.
Содержаниекниги В этой книге делается попытка показать работу над проектом в Maya от момента зарождения идеи проекта до его завершения. Книга разделена на несколько мастей. В первой части описываются интерфейс последней версии приложения и способы его настройки. Кроме того, дается визуальный и технический обзор г:роекта «Место для парковки». В следующих частях детально изучается внутренняя структура Maya. Последовательно рассматриваются этапы производства анимании, в том числе процесс создания моделей с пояснениями технических моментов, процесс компоновки сцен, художественные детали. Последняя часть относится к вопросам назначения материалов, освещения и визуализации. Ниже дан подробный обзор каждой из глав. О Глава 1 ^Использование Maya». Описываются некоторые из бесчисленных областей применения данного приложения вкупе с его характеристиками и обширным инструментарием. Здесь же вы найдете краткую историю создания Maya и появления на свет фирмы-производителя этого приложения. Напоследок перечисляются навыки, необходимые для того, чтобы превратиться в квалифицированного пользователя Maya. О Глава 2 «Знакомство с проектами». Проект, на примере которого описывается работа с Maya в данном издании, называется «Место для парковки». Кратко его содержание можно выразить в нескольких словах: греющаяся на солны шке собака потревожена нетерпеливым человеком, пытающимся оплатить парковку свой машины. Представлены цели данного проекта и наш план их достижения. О Глава 3 «Конвейер цифровой студии». Студии, производящие цифровую анимацию, совсем недавно стали реалиями нашей жизни. Мы рассказываем о процессе создания анимации в такой студии, делая особый акцент на деталях обработки данных на каждом из этапов. Структура нашей книги и инструменты Maya описываются в контексте работы в цифровой студии. О Глава 4 «Приемы работы в Maya». Среда, в которой разрабатывается проект, в значительной степени влияет на его успех. Именно с этих позиций показаны способы адаптации интерфейса Maya к нуждам конкретного пользователя. Материал данной главы касается настройки меню, определения новых кл;звиа-
24
Введение
турных комбинаций, создания полок с кнопками и даже изменения интерфейса программы. Имеется также несколько советов по систематизации файлов и проектов. о Глава 5 «Язык MEL». Встроенный язык Maya (MEL) является «сердцем» этого приложения. Он позволяет писать интерпретируемые сценарии и представляет собой простой, но мощный инструмент автоматизации многих операций. В этой главе вы познакомитесь с основами языка MELn найдете примеры кода, Мы продемонстрируем в простой и занятной форме смысл таких понятий, как процедуры, переменные, управляющие структуры, циклы. Все исходные тексты протестированы. Их можно найти на прилагаемом к книге компакт-диске. о Глава 6 «Форматы», Моделирование в Maya осуществляется на основе сеток полигонов, NURBS-поверхностей и иерархических поверхностей. В этой главе рассматриваются функциональность, достоинства и недостатки каждого из форматов, объясняется механизм выбора того или иного формата или их сочетания для решения конкретных задач. Сравниваются такие характеристики форматов, как непрерывность, пригодность для использования в качестве поверхности материала, деформируемость, топологическая гибкость. Также рассматриваются форматы, подходящие для моделирования объектов нашего проекта. О Глава 7 -«Методы». В этой главе рассматриваются различные приемы моделирования, не относящиеся непосредственно к проекту «Место для парковки». С одной стороны, это позволяет получить информацию об общих целях моделирования, а с другой — сэкономить время при описании моделей нашего проекта. В число рассматриваемых приемов включены приемы получения плавных границ, обработки опорных изображений, формирования отверстий, создания скосов. О Глава 8 «Наборы объектов». В этой главе сначала описывается процесс моделирования набора объектов в общем виде, а затем — на примере нашего проекта. Улицы и здания, необходимые для проекта «Место для парковки», иллюстрируют типичные проблемы моделирования и способы их решения с точки зрения эффективности и соответствия дизайну. О Глава 9 «Реквизит». Требования к реквизиту отличаются от требований к наборам объектов, поэтому мы посвятили им отдельную главу. Начав с простого объекта, мы постепенно переходим к моделированию такого сложного объекта, как автомобиль главного героя. При этом демонстрируются различные приемы моделирования с обоснованием их выбора. О Глава 10 «Персонажи». Симпатичная Клякса и противный Крутан моделируются на основе иерархических поверхностей. В этой главе вы найдете также обсуждение вопросов эффективности рабочего процесса, Вы узнаете и о том, как важно придать персонажу максимальную привлекательность и равномерно распределить управляющие точки его оболочки. о Глава 11 «Компоновка». Бэтой главе обсуждается цифровая кинематография с применением камер. Свой взгляд на данный вид искусства представляет Адам Шнитцер (Adam Schnitzer), глава отдела компоновки фирмы Lucas Art.
Содержание книги
25
О Глава 12 «Узловая архитектура». Принцип узловой архитектуры Maya на первый взгляд может показаться сложным, но разобраться в нем достаточно легко. В этой главе объясняются различные аспекты функционирования направленных ациклических графов и графов зависимости, формирующих объединение узлов, форм и вычислений, которое, собственно, и представляет собой сш-ну в Maya. Четко объясняется суть атрибутов и связей, что позволяет понять принцип работы приложения и улучшить навыки работы с ним. О Глава 13 «Создание усовершенствованных связей». Следующим шагом в изучении Maya является создание усовершенствованных связей между узлами. В этой главе на несложных примерах демонстрируется этот процесс. Начиная с коротких упражнений и постепенно двигаясь вглубь, вы поймете, как организуются связи между узлами. О Глава 14 « Частицы и динамика». Модуль имитации динамики в Maya является одним из самых мощных, но при этом он чрезвычайно сложен, В этой главе описываются все детали имитации водной струи. Особое внимание уделяется созданию высокоуровневых элементов управления, настройке параметров визуализации, позволяющей менять вид частиц, корректной интеграции готоных элементов в остальную сцену. О Глава 15 «Общие аспекты анимации персонажей», В этой главе вы не только найдете описание разнообразных инструментов, предназначенных для создания анимации, но и познакомитесь с общими принципами этого процесса, характерными не только для компьютерной графики, но и для более традиционных видов искусства. Интервью со Скотом Кларком (Scott Clark), аниматором из студии Pixar, проливает свет на эту не всегда верно интерпретируемую область человеческой деятельности. Вы также познакомитесь с инструментами, предназначенными для создания иллюзии жизни на экране вашего компьютера. О Глава 16 ^Подготовка персонажей к анимации». Процесс сборки персонажа предполагает знание ряда ключевых понятий и идей, без которых организовать i ipaвильно этот процесс практически невозможно. Здесь раскрываются концепции сборки персонажей и методы внедрения этих концепций в производственный конвейер Maya. Вы узнаете пять золотых правил подготовки персонажа к анимации. Не обойдены вниманием и потенциальные сложности и опасности этого процесса. Завершает главу интервью с Полом Туристом (Paul Thuriot), сотрудником студии Tippett — одной из самых уважаемых и знаменитых студий по созданию компьютерной графики, специализирующейся на анимации персонажей и прочих созданий. О Глава 17 «Сборка персонажей». Эта глава посвящена сборке как двуногого,, так и четвероногого персонажей нашего фильма. Рассказ о создании пользовательских элементов управления и соединении их с персонажем даст вам представление о том, как это происходит в настоящих цифровых студиях. Здесь вы найдете подробные упражнения по данной теме, причем как простые, так и более сложные, в которых весьма подробно объясняется ход сборки собаки и человека. Ключичная область, сгибающиеся и растягивающиеся руки и ноги, позвоночник двуногого существа, хвост и уши четвероногого — способы настройки всех этих элементов описываются в соответствующих упражнениях. Не забы-
26
Введение
ты также черты лица, челюсть и глаза человека. Показаны процессы гладкого связывания скелета с оболочкой и раскраски весов, гарантирующие плавные деформации персонажа. Если вы заинтересованы в изучении новых сложных приемов сборки персонажей, эта глава определенно для вас. О Глава 18 «Назначение материалов». В этой главе показано, как работать с растровыми изображениями текстур и процедурными картами текстур. Также демонстрируется техника работы с проекционными координатами при назначении материала поверхности объекта. Чтение этой главы может значительно улучшить как вашу наблюдательность, так и навыки использования инструментария Maya. О Глава 19 «Освещением. После завершения работы над сценой остается только ее раскрасить с помощью многочисленных инструментов освещения Maya. Этот процесс может значительно ускорить эффективная предварительная подготовка. Б этой главе вы узнаете, как воссоздать теплый солнечный день и как сделать вид сцены более реальным с помощью шести направленных источников света. о Глава 20 «Визуализация». Для ускорения процесса получения окончательного изображения сцены используются различные методики, с которыми вы и познакомитесь в данной главе. Все, что вы делали до этого, — только замешивание теста, а теперь пришло время выпечь торт, то есть получить готовый фильм. О Приложение А «Обычные и дополнительные возможности языка MEL». В этом приложении вы найдете более подробные сведения о языке MEL и его применении в анимации. Вы получите много дополнительной информации, в том числе ряд полезных сценариев. Приложение завершается кратким знакомством с языком C++ и исчерпывающим примером создания подключаемого пользовательского деформатора. Все представленные исходные тексты были тщательно протестированы. Они находятся на прилагаемом к книге компакт-диске, О Приложение Б «Список терминов». Здесь перечислены основные термины, используемые в книге.
От издателя перевода Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты
[email protected] (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение! Все исходные тексты, приведенные в книге, находятся по адресу http://www.piter. com/download. Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www.piter.com.
ЧАСТЬ I Maya и производственный конвейер Глава 1. Использование Maya Глава 2. Знакомство с проектами Глава 3. Конвейер цифровой студии Глава 4. Приемы работы в Maya Глава 5. Язык MEL
1
Использование Maya
Многие пользователи Maya уже знают, что в названии этого приложения отражена концепция индуизма и буддизма, которая иногда рассматривается как «Мать всего сущего», иногда считается материальной вселенной как таковой, а в некоторых случаях понимается как иллюзия, маскирующаяся под реальность. Она уходит своими корнями в природу окружающей нас действительности. В упомянутых восточных философских школах считается, что реальность отличается от того, что видят люди. Сам по себе материальный мир является иллюзией, скрывающей фундаментальное единство всех вещей. Слово «maya» одновременно означает и сам мир, и иллюзию его реальности. Такое название прекрасно соответствует приложению, работе с которым посвящена эта книга. Программа Maya, созданная фирмой Alias]Wavefront, является чрезвычайно мощным инструментом, позволяющим создавать целые миры, не открывая зрителю реальности, таящейся за иллюзорным покровом. Фантастические создания будут резвиться в лесу из загадочных растений. Громадные космические корабли примут участие в эффектных межгалактических битвах. Целые цивилизации продолжат свою жизнь на экране вашего компьютера. Иллюзия, создаваемая Maya, ограничена только вашим воображением и ресурсами вашей системы. Впрочем, это достаточно серьезные ограничения. Наше воображение базируется в основном на предшествующем опыте. Maya не в состоянии восполнить его недостаток, хотя и позволяет скрыть пробелы в наших знаниях. Сложное, как и окружающий нас мир, приложение Maya содержит инструменты, которые позволяют упростить объекты, сделав их управляемыми. Хотя для работы с Maya требуется довольно много знаний и навыков, те, кто внимательно изучает это приложение, рано или поздно вознаграждается за свои усилия. Новичку же с Maya сложно, особенно сразу после первого запуска. Но все нужные знания постепенно можно получить. Инструменты, с одной стороны, являют собой квинтэссенцию знаний и навыков их разработчиков, с другой — допускают настройку под нужды конкретного пользователя. С их помощью можно создавать захватывающие сцены, достойные картинной галереи или фильма. Начав работать с Maya, большинство людей ставит перед собой цель превратиться из новичка в мастера. Эта книга призвана помочь более-менее опытным пользователям Maya получить дополнительные знания. Для этого действие различных функций будет продемонстрировано в ходе создания реального анимационного ролика. Также в книге вы найдете подробное описание инструменгов, ба-
Возможности Maya
29
зовую теорию, стратегию создания анимированных сцен и практические советы. В этой главе мы поговорим на следующие темы: О О О О
возможности Maya; история развития Maya; приобретение навыков работы с Maya; подходы к созданию проектов в Maya.
Возможности Maya Учитывая колоссальные возможности Maya, проще перечислить, что это приложение делать не умеет. Оно не может подать вам утренний кофе, выгулять вашу собаку и т. п. Однако список недостатков Maya в качестве приложения для работы с компьютерной графикой окажется очень коротким. Многообразие функций Maya является наследием предыдущих версий программы (о них мы поговорим чуть позже) и результатом кропотливой работы сотрудников фирмы AliaslWavefront.
Области применения Maya позволяет делать множество потрясающих вещей. Большинство поклонников компьютерной графики хорошо осведомлены о фильмах, в которых использовались созданные с помощью этой программы специальные эффекты и анимация. «Властелин колец» и «Шрек», «Титаник» и «Перл Харбор», «Звёздные войны: эпизод I» и «Последняя фантазия», «Мумия» и «Матрица*- — при создании всех этих фильмов фигурировало приложение Maya, вдыхая жизнь в персонажей и развертывая перед нашими глазами захватывающие сцены. Всего за несколько лет эта программа стала просто незаменимой при производстве художественных фильмов. Также она активно используется в телевизионных шоу и рекламе. Среднестатистический телезритель вряд ли особо задумывается при виде гвинейской свиньи или кролика, рассказывающих о новинках видео, но пользователи Maya знают, сколько труда вложено в этих персонажей, какие мощные инструменты потребовались для их создания. Даже когда дети смотрят свои любимые мультфильмы или музыкальные клипы, шанс обнаружить там «следы» Maya очень велик. Многие компьютерные игры также создавались с помощью Maya. Именно это приложение помогло продукции компаний Nintendo's GameCube, Sony's Playstation и Microsoft's Xbox превратиться из интересных концепций в реально существующие игры. Такие разработчики игр, как Electronic Arts, Square, Acclaim, Lucas Arts, Sega и Sony, используют Maya, чтобы сделать свою продукцию максимально привлекательной как для детей, так и для взрослых. В то время как дизайнеры изделий создают все, от электронных устройств (таких как устройства ввода для видеоигр) до ювелирных изделий, игрушек и разнообразной бытовой продукции с помощью приложения Studio Tool от фирмы Alia-;|Wavefront, многие лидирующие компании, такие как BMW Designworks, для переноса новых идей с листа бумаги в повседневную жизнь применяют Maya. Даже ученые и инженеры часто прибегают к Maya для наглядного представления сложных данных. Конечно, это приложение не в состоянии помочь в деталях
30
Глава 1 * Использование Maya
рассчитать столкновения галактик, но ученые из студии компьютерного моделирования NASA используют его для воспроизведения результатов эмуляции. На суде при разборе дорожно-транспортных происшествий тоже можно видеть смоделированные с помощью Maya аварийные ситуации.
Инструменты Всего за несколько лет приложение Maya прошло путь от новинки до популярной программы создания компьютерной графики и анимации. Его популярность напрямую связана с обширным инструментарием. Применяя даже часть инструментов Maya, вы не сможете не почувствовать их мощь и точность. Не обязательно пользоваться всеми возможностями Maya, однако, по крайней мере, знать о них нужно. Существует множество способов конструирования моделей. Разработчикам компьютерных игр пригодится полный набор инструментов для моделирования полигонов. Промышленные дизайнеры найдут замысловатые инструменты для построения NURBS-поверхностей1, позволяющие создавать сложные и точные модели. Аниматорам наверняка понравятся гладкость и гибкость иерархических поверхностей. В каждом из вышеупомянутых случаев можно выбирать различные подходы к моделированию и методы обработки объектов, в том числе и с помощью встраиваемых инструментов Artisan (Виртуальные кисти). Геометрические примитивы можно легко импортировать и экспортировать, используя различные форматы, в том числе и IGES, DXF, OBJ, RIB и Alias Wire. Анимация, в том числе данные, получаемые с помощью подключаемого модуля Maya Live, также допускает импорт и экспорт. Оживление персонажей осуществляется различными способами. Для этого используются деформаторы, скелеты, телесные оболочки и ограничения. Множество деформаторов в Maya позволяют работать с пространственными решетками, кластерами и объектами влияния, а также выполнять плавное сопряжение форм. Чтобы заставить двигаться скелет персонажа, можно использовать обратную кинематику, а затем объединить этот скелет с телесной оболочкой и проконтролировать вид поверхности на сгибах суставов. Достичь естественных и осмысленных движений персонажа позволяют многочисленные ограничения. Ну и, наконец, существует возможность взаимодействия со сложными элементами управления персонажем без вторжения в иерархическую цепочку. В Maya существует множество способов анимации готового персонажа. Кроме традиционного метода, который состоит в задании ключевых кадров, можно воспользоваться инструментом Set Driven Key (Создать управляемый ключ), принцип работы которого связан с архитектурой Maya, позволяющей связывать друг с другом практически любые объекты. Можно также воспользоваться анимацией вдоль пути, захватом движения или даже нелинейной анимацией. Повысить производительность работы позволят такие инструменты, как Graph Editor (Редактор анимационных кривых) и Trax Editor (Редактор слоев анимации). Для создания сложных материалов предназначены инструменты Hypershade (Редактор узлов) и Hypergraph (Просмотр структуры). С помощью графического ин1
Аббревиатура NURBS расшифровывается как Nonuniform rational B-splines, то есть неоднородные рациональные В-шлайны. — Примеч. ред.
Возможности Maya
31
терфейса они связывают воедино отдельные узлы, что значительно ускоряет процесс работы над материалом. Количество эффектов, которые можно получить с помощью Maya, поистине огромно. Вы можете создавать как невероятные эффекты течения с помощью модуля Fluid Effects, так и удивительные эффекты рисования путем применения модуля Paint Effects. Системы частиц, решатели динамики, имитаторы меха и тканей вот далеко не полный перечень инструментов, каждый из которых вносит свой вклад в индустрию развлечений. Дополняют функции Maya инструменты освещения и визуализации. Можно выбирать как осветители различного типа, так и разные визуализаторы (в том числе от сторонних производителей). В наше время для создания анимации используются инструменты, которые невозможно было даже вообразить десять лет назад! Разумеется, помимо инструментов в Maya поддерживаются также прикладной программный интерфейс (Application Programming Interface, API) и встроенный язык Maya (Maya Embedded Language, MEL), предназначенный для создания сценариев. Если в купленной вами версии приложения отсутствуют нужные, по вашему мнению, функции, их можно создать самостоятельно (и продать другим пользователям). Образно выражаясь, Maya предоставляет не только полный набор готовых ключей, но и ящик с инструментами для изготовления новых ключей.
Характеристики Несмотря на множество мощных инструментов, успешная работа с Maya вовсе не гарантирована. При создании Maya большое внимание было уделено дополнительным возможностям, доступ к которым нельзя получить с помощью списка команд и которые выделяют Maya среди конкурентов. Одной из главных особенностей Maya является приспособляемость. Существует множество методов взаимодействия с этим приложением. Некоторым пользователям, к числу которых относятся и авторы, нравятся контекстные меню и полки1, другие предпочитают традиционные средства оперативного доступа к командам (обычные меню и панели инструментов). Нельзя не упомянуть и способность к изменению конфигурации. Пользователи могут вносить изменения в меню, добавлять новые варианты компоновки и даже перестраивать интерфейс. Maya предоставляет привередливым пользователям возможность выбора наиболее удобного порядка работы путем регистрации собственных клавиатурных комбинаций и моделирования собственного варианта интерфейса. Функции Maya допускают расширение. Художникам и аниматорам пригодится язык MEL, в числе прочего лежащий в основе пользовательского интерфейса Maya. Разработчикам программного обеспечения будет полезен интерфейс прикладного программирования, позволяющий создавать новые функции, как встраиваемые в Maya, так и используемые в качестве отдельных приложений. Исходные данные в Maya также доступны. Хотя пользователи иногда предпочитают хранить их в двоичном формате, Maya предоставляет также формат ASCII, благодаря чему появляется возможность их просмотра и редактирования. Пред1
Полками (shelves) в интерфейсе Maya называют панели инструментов, которые пользоиатель может самостоятельно настраивать, добавляя на них необходимые инструменты. — Примеч. реВ.
32
Глава 1 • Использование Maya
положим, у вас есть геометрический объект сложной структуры. Что с ним можно сделать? Достаточно открыть файл в вашем любимом текстовом редакторе и прибегнуть к небольшому «хирургическому вмешательству». Это может оказаться удобней, так как файл уже состоит из команд языка MEL. Имея под рукой справочник MEL-команд, можно легко «препарировать» самые сложные сцены, разбираясь, как они устроены. Наконец, нельзя не упомянуть о возможности легко перемещать данные из одной системы в другую. Например, можно без проблем импортировать ESP-файлы или экспортировать IGES-файлы. Хотите воспользоваться визуализатором RenderMan от фирмы Pixar? Экспортируйте RIB-файл. Хотите опубликовать сцену в Интернете? В Maya имеется поддержка Shockwave 3D. Можно даже разрабатывать собственные интерфейсы данных, начиная от элементарных вещей, таких как добавление пользовательских атрибутов к прикладному про:граммному интерфейсу, и заканчивая написанием собственных структур данных.
Эволюция Maya В отличие от иллюзорной вселенной, приложение Maya не могло появиться из ничего. Оно тщательно разрабатывалось специалистами в области программного обеспечения, объединив в себе лучшие черты из SD-программ прошлых лет. В результате появился продукт, соответствующий требованиям нового тысячелетия. Формально появившаяся в 1995 году, фирма Alias)Wavefront реально начала свое существование в середине 80-х годов в момент формирования компаний Alias и Wavefront. Датой создания фирмы Alias считается 1983 год, в то время как фирма Wavefront появилась годом позже. Обе компании были основаны небольшими группами людей, имеющих массу идей в области компьютерной графики. В процессе конкуренции каждая из них заняла на рынке свою нишу. Хотя обе компании занимались анимацией для кино и видео, по мере их развития различия между ними становились все более существенными. Выдвижение компании Alias произошло в 1985 году, когда фирма General Motors соблазнилась потенциалом программного обеспечения Alias/1. Ранее ориентированные на инженерное программное обеспечение фирмы, занимающиеся промышленным дизайном, быстро восприняли идею приложений, предназначенных для моделирования поверхностей и их визуализации. Изначально моделирование осуществлялось на основе фундаментальных сплайнов, но затем быстро произошел переход к однородным рациональным В-сплайнам, а потом и к неоднородным рациональным В-сплайнам. Это улучшило внешний вид моделей и повысило их привлекательность в глазах проектировщиков. Дизайнеры обнаружили, что программное обеспечение от фирмы Alias позволяет лучше контролировать вид моделей. В это время компания WaveFront превратилась в признанного лидера в производстве анимации. Программное обеспечение от этой фирмы, в основном предназначенное для моделирования на основе полигонов, стало практически незаменимым при создании спецэффектов. Благодаря возможности программирования эти приложения также стали активно применяться для научных визуализаций, например изображений турбулентного течения, взаимодействия галактик и вихревых
Работа с Maya
33
штормов. К 1998 году программное обеспечение от фирмы WaveFront (Personal Visualizer) повсеместно распространилось на компьютерах Silicon Graphics. По мере эволюции рынка и выпускаемой продукции компании Wavefront и Alias занимали новые ниши, но этот процесс продолжался недолго. Движимые желанием соответствовать вызовам конкурентов, эти фирмы продолжали поставлять новинки и копировать продукцию друг друга( пытаясь захватить как можно бол ьший сегмент рынка. Иногда они просто покупали конкурирующие фирмы, например, компания Wavefront приобрела в 1988 году фирму Abel Image Research, а в 1993 году — фирму Thompson Digital Images. В других случаях начиналась чехарда с различными функциями, например системами частиц и модулями динамики. Соревновательный дух благотворно сказывался на деятельности обеих компаний. В феврале 1995 года произошло их слияние с целью разработки новой продукции. Фирма Alias начала работу над новым проектом, и было достаточно логично привлечь к ней фирму Wavefront. В 1998 году этот совместный проект был впервые представлен широкой публике под именем Maya и имел оглушительный успех. Приложение Maya облегчило жизнь множеству аниматоров. Хотя промышленные дизайнеры в некоторых случаях до сих пор применяют для моделирования сложных поверхностей такие программы, как Studio и AutoStudio, аниматоры однозначно предпочли Maya. Многие вещи, ранее требовавшие написания сложного кода, в Maya можно реализовать через графический интерфейс. Язык MEL позволяет просматривать и редактировать внутреннюю структуру программы. В Maya соединились инструменты и опыт предшествующих приложений для работы с компьютерной графикой. Появление Maya упростило решение многих задач, а также дало возможность решения задач совершенно нового уровня. Приложение Maya изменило сферу распространения компьютерной графики. Теперь этот род деятельности не является прерогативой крупных компаний, так как приобрести Maya могут самые обычные пользователи. Кроме того, само приложение продолжает развиваться быстрыми темпами.
Работа с Maya Хотя история Maya и индустрии компьютерной графики весьма интересна, напрямую она вас не касается. Каждый пользователь этого приложения уникален, как и каждая студия, применяющая эту программу. О своих читателях мы можем с уверенностью сказать только одно. Они хотят изучать Maya, иначе они не приобрели бы эту книгу. Maya привлекает самых разных пользователей. В их число входят настоящие художники, глаз которых натренирован на восприятие формы, цвета и композиции. С Maya работают и специалисты в области вычислительной техники, привыкшие формировать иллюзорный мир с помощью кода. Не стоит забывать и о фанатах компьютерных игр, которым любопытен инструмент, воплотивший в реальность их представление об идеальном отдыхе. Некоторые пронесли свою любовь к анимации с самого детства, в то время как другим всего лишь требуется визуа-
34
Главе! 1 • Использование Maya
лизировать ошеломляюще сложные научные данные. Люди начинают свое знакомство с Maya по разным причинам. Они пытаются воплотить свое видение мира, которое могут понять и оценить другие. Но будем честны. Приложение Maya не предназначено для глупых людей. Мощная система требует соответствующих элементов интерфейса, а также необходимых для их использования навыков. Для управления космическим кораблем недостаточно освоить джойстик и пусковую кнопку, в конце концов, предназначение корабля многофункционально и для управления им нужны соответствующие знания и навыки, а некомпетентный человек, скорее всего, лишь разобьет корабль о землю. Хотя разбиение сложной программы на управляемые фрагменты достойно похвалы, для работы с Maya по-прежнему требуется квалифицированный пользователь. То есть для создания с помощью Maya очередной иллюзии нужно в полной мере задействовать ваш талант, ваше видение мира, ваш опыт.
Обучающие ресурсы Итак, каким же способом можно получить необходимые для работы с Maya навыки? Даже специальные обучающие программы дают лишь поверхностные сведения. К счастью, существуют многочисленные дополнительные ресурсы, которыми может воспользоваться человек, имеющий базовые навыки работы с Maya. Разумеется, самым главным в этом деле является ваш собственный опыт. С ним не сравнится ничто. Даже самые талантливые пользователи Maya предпочтут взять уже имеющуюся работу и внести в нее необходимые изменения, а не начинать проект с «чистого листа». К сожалению, опыт не накапливается сам по себе. Для его получения необходимо приложить определенные усилия и быть крайне внимательным к деталям.
Предшествующий опыт Строго говоря, не существует деятельности, наличие опыта в которой однозначно помогло бы научиться работать с Maya. Искусные пользователи получаются из художников, аниматоров, инженеров, программистов, фанатов компьютерных игр, промышленных дизайнеров и т. п. Ведь Maya применяется в самых разных областях. При этом от пользователя требуются многочисленные полезные навыки. На первом месте стоит способность мысленно вообразить модель или сцену. Хотя для решения этой проблемы может оказаться достаточно обычной настойчивости. Главное — уметь представлять пространственные соотношения между объектами. Это можно делать как мысленно, так и на бумаге. Другими словами, для успешного освоения Maya желательно уметь рисовать. Ведь вам потребуется конструировать модели, планировать расположение объектов в сцене, продумывать позы персонажей, выполнять раскадровку анимации и даже раскрашивать объекты. Впрочем, вопреки распространенному мнению, для создания сцен в Maya вам вовсе не нужен особый талант художника. СОВЕТЖелательно все время держать рядом с компьютером блокнот или пачку бумаги, чтобы иметь возможность сразу же зафиксировать пришедшие в голову идеи.
Работа с Maya
35
Также важно, чтобы вам доставлял удовольствие процесс решения проблем. Имейте в виду, что проблемы появятся вне зависимости от природы задачи, которую вы ставите перед Maya. Мы говорим не о проблемах с программным обеспечением, в случае возникновения которых остается только написать разработчику сообщение об обнаруженном дефекте. Нет, мы подразумеваем всего лишь детали планирования и разработки сцены, необходимые для получения окончательного результата. В одном случае требуется понять способ управления артикуляцией персонажа, в другом — решить, как правильно расположить источники света, а иногда достаточно написать сценарий на языке MEL, чтобы избежать выполнения нудных, повторяющихся действий. Если поиск решения в подобных ситуациях доставляет вам удовольствие, значит, работать с Maya вам понравится. Также будут крайне полезными навыки программирования. Но даже если вы никогда не писали программ, поводов для беспокойства нет. Большинство сценариев языка MEL состоят всего из нескольких строк, а его синтаксис можно освоить по мере изучения структуры Maya. Более важным является знакомство с платформой, на которой вам предстоит работать. Нужно уметь хотя бы на уровне пользователя ориентироваться в установленной на вашем компьютере операционной системе. Умения загрузить приложение Maya и выйти из него в данном случае явно недостаточно. Старайтесь по мере сил изучать свою операционную систему, ведь впоследствии это позволит сэкономить время и даст дополнительные возможности. К счастью, большинство пользователей Maya не нуждается в подобных напоминаниях.
Эксперименты Основным источником информации является само приложение Maya. Провести эксперимент можно в любой момент. Помните, что перед тем как приступить к выполнению новых технических действий, желательно сохранить сцену. Удивительно, но часто пользователи об этом забывают. Возможно, процесс работы над крупным проектом настолько поглощает, что у человека даже не возникает мысли сохранить сцену и попробовать альтернативные варианты действий. В наше время можно недорого приобрести жесткий диск большого объема, поэтому имеет смысл выработать полезную привычку сохранять свою работу как можно чаще и рассматривать сохраненные варианты перед принятием решения о дальнейшем моделировании. СОВЕТ Разработайте понятную систему именования файлов и проектов с отдельным вариантом именования тестовых сцен. 8 этом случае вам не придется думать, где хранить результаты экспериментов и где их потом искать.
Иногда эксперимент состоит в подборе различных параметров для незнакомой команды. В других ситуациях может потребоваться построение упрощенной геометрической модели и выполнение с ней различных операций. Для решения большинства проблем достаточно тестирования разных вариантов действий на упрощенных моделях. Но даже если единственным выходом является работа над всей сценой, помните, что вы вовсе не обязаны проходить этот путь до конца. Попробуйте реализовать идею, верните сцену в исходное состоя-
36
Глава 1 • Использование Maya
ние, испытайте другой вариант. Если полученный результат понравится, сохраните сцену. В Maya можно экспериментировать бесконечно. Команду отмены допустимо вызывать сколько угодно, что позволяет отменять целые последовательности операций. Однако имейте в виду, что подобное возможно только в пределах одного сеанса. Когда окно программы закроется, произойдет автоматическая очистка буфера, и данные обо всех выполненных ранее операциях будут потеряны. СОВЕТ Установить разумное количество отменяемых операций можно в диалоговом окне Preferences (Параметры). По умолчанию использовать команду Undo (Отмена) можно десять раз. Установка переключателя Infinite (Бесконечность) в группе Queue (Стек) дает возможность применять эту команду бесконечно. Однако для большинства сцен достаточно ввести в поле Queue Size (Размер стека) значение от 100 до 200.
Богатое поле для экспериментов дает история преобразования объектов. Хотя авторы пользовались этой функцией не очень часто, у них она была включена. Если вас что-то не устраивает в процессе моделирования, достаточно найти неверную операцию в истории преобразования и удалить ее. Когда надобность в этой функции исчезает, остается просто очистить данные истории с помощью специально предназначенной для этой цели клавиатурной комбинации. Надежная последовательность действий и проверенные временем стратегии, конечно же, полезны, но иногда имеет смысл попробовать новые варианты. Быстрее приобрести нужные навыки вам поможет исследовательский дух, а не рутинное следование стандартным процедурам.
Образование Хотя лучшим учителем является опыт, пренебрегать образовательными ресурсами не стоит. Существует множество подходов к изучению компьютерной графики, в том числе и с использованием книг (в частности той, которую вы держите в руках). В настоящее время компьютерная графика настолько распространена, а приложение Maya настолько популярно, что по этой теме написано множество книг. Одни предназначены для новичков, другие — для опытных пользователей. Многие содержат развернутые упражнения, тщательно протестированные, чтобы гарантировать отсутствие проблем при их выполнении и предсказуемый результат, Заголовки книг различных издательств часто похожи друг на друга. Поэтому некоторые пользователи покупают все подряд, чтобы потом иметь возможность сравнивать информацию, предлагаемую разными авторами. Даже самые сложные программы имеют справочную документацию, которую можно, например, загрузить из Интернета. Однако желательно иметь дополнительные источники информации, ведь в документации можно найти только сухие факты и описания инструментов и элементов интерфейса. Кроме того, в примерах, которыми производитель снабжает документацию, обычно не рассматриваются проблемные ситуации, в то время как независимые издания (например, данная книга) часто содержат описание различных обходных путей, применяемых в нестандартных случаях.
Работа с Maya
37
Разумеется, больше всего информации предоставлено фирмой Alias|Wavefront. Стоит запустить программу Maya и нажать клавишу F1, чтобы запустилась справочная система как по работе с собственно программой, так и по командам языка MEL. Там можно найти объяснение различных понятий или узнать, как работает та или иная команда. Некоторые сайты сторонних производителей, посвященные компьютерной графике, также содержат информацию по Maya. Особенно популярными являются пособия, написанные пользователями, так как в них обычно предоставляются пошаговые инструкции. Постарайтесь найти и систематизировать такие ресурсы, тик как впоследствии они могут пригодиться. Часто на сайтах сторонних производителей можно найти форумы для обмена мнениями и информацией о Maya. Можем порекомендовать вам сайты www.SDArc. com, www.cgchannel.com, www.cgtalk.com и www.highend3d.com. Здесь можно задать вопрос и получить ответ от других пользователей, Особенно популярным ресурсом является список рассылки на сайте www.highend3d. com, который посещается тысячами пользователей Maya. Подписка на рассылку осуществляется непосредственно на сайте, и лучше сразу завести для нее отдельный ящик, так как сообщений будет очень много. Другой возможностью получения информации является присоединение к rpyi iпе пользователей. Избавляя от необходимости встречаться «вживую», Интернет в то же время увеличивает возможности эффективного обмена информацией и методиками внутри групп. Возникновение личных отношений может помочь, например, в поиске работы. Ну и, конечно, не стоит забывать тот факт, что всегда приятно поговорить с человеком, который понимает ваши проблемы. Узнать, существуют ли группы пользователей в вашем городе, можно на сайте компании Alias|Wavefront. Также во многих городах существуют курсы по Maya. Теперь пользователям не приходится полагаться на правильный выбор работы или коллегу со связями, чтобы получить навыки применения этого приложения на профессиональном уровне. Ну и, наконец, благодаря приложению Maya Personal Learning Edition появилась возможность осваивать Maya, сидя за собственным компьютером. Хотя оно доступно только для версии Maya Complete, новички вполне могут с его помощью получить большинство сведений о программе. Нужна определенная решительное! ь, чтобы заставить себя разобраться в многочисленных функциях, но с помощью дополнительных пособий вполне возможно пройти путь от новичка до опытною пользователя.
Собственный подход Не менее важным, чем различные образовательные ресурсы по Maya, является ваш подход к делу. Это сложное приложение, и количество функций при первом знакомстве с ним может испугать, но если изучать его терпеливо и с любопытством, оно станет вашим лучшим помощником. Конечно, вам захочется разобраться во всем как можно быстрее, и на первых порах вы, скорее всего, будете обескуражены количеством информации, которую нужно усвоить. Это совершенно нормально. Научиться работать с Maya не легко, но вполне реально.
38
Глава 1 • Использование Maya
Такие приложения, как Maya, появляются далеко не каждый день. Его мощь и точность поистине поразительны, и работа с ним требует большого опыта. По сложности Maya превосходит, к примеру, Mac OS X. Масса времени и труда была потрачена на создание и улучшение функций, благодаря которым приложение Maya стало доступным для новичков, в то же время оставив опытным пользователям возможность задействовать всю его мощь, Приложение Maya является столь сложным, что нужно честно признать — полностью освоить его невозможно. Неважно, сколько времени вы проработали с этим приложением и сколько проектов создали с его помощью. Все равно каждый день вы будете открывать для себя что-то новое. И это хорошо, хотя несколько огорчительно для самолюбия. В конце концов, не нужно знать приложение досконально, достаточно сведений, которые требуются для выполнения стоящих перед вами задач.
Заключение Приложение Maya не предназначено для глупых людей. Это продукт мирового класса, требующий затрат сил и энергии, и в умелых руках он может творить чудеса. Мы видим результаты его применения на телевидении,, в кино, в парке аттракционов, в компьютерных играх. Опытный пользователь Maya может заставить восхищенных зрителей по всему миру замереть перед своими работами. Для приложения Maya, появившегося в результате слияния ряда ведущих производителей программного обеспечения, характерны мощь, размах, приспособляемость. Интеграция и расширение функций, ранее разработанных для различных программных продуктов, дали в результате программу с потрясающим потенциалом. Разнообразные технологии моделирования, от полигонов до NURBS-поверхностей и иерархических поверхностей, позволяют легко начать любой проект. Мощные и конфигурируемые сети материалов придают моделям требуемый вид. Настройка персонажей и инструменты для работы с анимацией продолжают традиции компаний Alias и Wavefront, признанных лидеров в производстве анимации. Что бы вам не потребовалось — прямая или обратная кинематика, системы частиц, деформаторы, ограничения, кластеры, захват движения — все можно найти в Maya. Элементы пользовательского интерфейса можно скрыть для получения дополнительного рабочего пространства. Интерфейс API позволяет создавать новые инструменты и функции. Дополнительные модули позволяют снизить объем работ до вполне приемлемого уровня, что дает возможность сфокусировать внимание на результате, а не вкладывать все силы в процесс. После завершения моделирования сцены можно задействовать инструменты освещения и визуализации, чтобы придать сцене требуемый вид. Новичкам достаточно просто научиться работать с Maya, но стать опытным пользователем можно только путем наработки навыков. Чтение книг при всей его полезности способно всего лишь познакомить вас с чужим и идеями. Для выработ-
Заключение
39
ки своего стиля нужно «сойти с чужого следа» и начать поиск новых решений. Как только инструменты Maya, применяемые методики и сам рабочий процесс станут вашим «вторым я», можно будет сказать, что вы не просто используете Maya, вы делаете это хорошо! В следующих главах мы попробуем «открыть вам глаза» не только на различные функции Maya, но и на особенности их применения. В процессе работы над реальным проектом мы попытаемся «отделить зерна от плевел». Вы сделали первый шаг в джунглях Maya, и эта книга призвана показать вам правильный путь, чтобы он не сопровождался отчаянными попытками выжить, а превратился в увлекательное путешествие.
2
Знакомство с проектами
Каким бы невероятным это ни казалось, проект «Место для парковки* не относится к произведениям, которые пылятся на дальней полке, ожидая, пока их воплотит в жизнь группа фанатов. Впрочем, было бы несправедливо также утверждать, что это известный фильм, который просмотрели миллионы зрителей. Нет, проект «Место для парковки» был создан специально для вас, читателей этой книги. В этой главе описывается только сам проект, а не пошаговый процесс претворения его в жизнь средствами Maya. Детальное рассмотрение процесса вы найдете в следующей главе, а затем мы приступим к подробному обсуждению каждого шага. Но для начала давайте познакомимся со стоящими перед нами задачами и конечной целью наших действий. В этой главе мы обсудим следующие темы: О О О о О
история возникновения проекта «Место для парковки»; цель создания проекта; последовательность событий; план создания проекта; окончательный результат.
Начало работы Как во многих других случаях, проект «Место для парковки» родился в результате объективной необходимости, нашей настойчивости и определенного стечения обстоятельств. Необходимость возникла после подписания договора с издательством New Riders. Мы должны были создать книгу о Maya, в которой бы детально описывался процесс работы над проектом от начала и до конца. Требовалось пособие для людей, имеющих опыт работы с Maya и хотевших знать, как именно возникшая в голове концепция претворяется в жизнь. Настойчивость и определенное стечение обстоятельств понадобились для преодоления сложностей, особенно на начальном этапе проекта. Итак, как же выглядит наш проект?
41
Начало работы
План А Если быть точным, в момент подписания договора на подготовку книги мы уже имели в голове некий план проекта. Макс предложил, чтобы проект рекламировал автомобиль, и сначала показалось, что это хорошая идея. Автомобили представляют собой предмет всем знакомый, достаточно сложный и даже до некоторой степени эротичный, а реклама автомобилей распространена по всему миру. Соответственно, рекламный ролик на эту тему будет типичным примером применения компьютерной графики. Он даже может получиться забавным. После того как в команду пришли Эрик и Марк, началось обсуждение плана действий. Требовалось проработать детали и распределить задачи, чтобы превратить наши задумки в реальную книгу. Такую книгу, которую нам самим хотелось бы купить. Имея опыт моделирования как автомобилей, так и их отдельных частей, Марк был весьма обеспокоен масштабами предстоящей нам работы. Автомобиль является предметом, прекрасно знакомым всем и каждому, поэтому его модель должна быть выполнена чрезвычайно тщательно, чтобы можно было дурачить не только случайных зрителей, но и опытных и критично настроенных читателей, на которых, собственно, и рассчитана данная книга. Ведь даже приближенная к реальности компьютерная модель автомобиля, показанная на рис. 2.1, не выдерживает никакой критики.
Рис. 2.1. Реалистичная модель автомобиля
Для модели нового автомобиля потребуется отражающая краска, стекло и хром. Создание соответствующих поверхностей требует большого искусства и внимания к мелким деталям. Мы интуитивно угадываем форму автомобиля, глядя на блики, отражающиеся от его поверхности. И именно блики немедленно подчеркивают изъяны, в частности царапины.
42
Глава 2 • Знакомство с проектами
Если автомобильные дизайнеры начнут пользоваться Maya (они обычно пользуются программой AutoStudio от Alias]Wavefront), им потребуется довольно большая команда и значительный бюджет. А уж нашей маленькой группе такой проект просто не по силам. Поверхности требуется сгладить с помощью специальной программы, тщательно изучить полноразмерную модель из папье-маше и отдать ее на оценку тестовой группе. Дизайн перерабатывается раз за разом, пока на это не будут потрачены в буквальном смысле миллионы долларов. Создание автомобильной рекламы включает и сопутствующую деятельность. Фокусирование внимания исключительно на автомобиле ставит под угрозу весь проект, так как по мере работы происходит расширение его границ во многих направлениях, а для этого требуются колоссальные ресурсы., Еще хуже было предложение о «снятии точного слепка» реального автомобиля, так как в этом случае книга лишалась бы раздела, посвященного моделированию. Кроме того, мы не знали, как получить разрешение на подобную работу. Было ясно, что требуется новый план.
Изменение первоначального плана Мы любим автомобили. Нет, мы на самом деле любим автомобили. Макс прошел обучение по программе дизайна транспортных средств в художественном центре дизайна. Марк родом из Детройта, поэтому любовь к автомобилям у него в крови. Эрик... хм... Эрик просмотрел множество рекламных роликов на эту тему. Можно сказать, что автомобили — это наша страсть. Мы хотели включить автомобиль в проект, но понимали, что настоящий рекламный ролик нам не по силам. Собравшись вместе, мы поняли, что нужно четко сформировать цели нашего проекта и действовать в соответствии с ними.
Определение целей Прежде всего требовалось точно очертить границы проекта. Малочисленность группы и тесные временные рамки заставили искать компромисс между рутиной и требованиями издательства New Riders. Мы решили, что большой, но незаконченный проект лучше его полного отсутствия. Не менее важным было осветить как можно больше тем. Пользователи приходят в книжный магазин с различными намерениями, и уровень у них тоже разный. Мы могли наверняка утверждать только одно: нашими читателями преимущественно будут люди с опытом работы с Maya. Другое дело, что границы этого опыта в каждом конкретном случае угадать невозможно. Но нужно постараться, чтобы, выполняя наш проект, каждый из них нашел новую для себя информацию. Дело усложнялось тем, что не имело смысла составлять список возможностей Maya и создавать простые примеры для их иллюстрации. При покупке любого приложения пользователь получает справочную документацию, кроме того, уже существует множество книг, систематически описывающих возможности и сопровождающих их несложными примерами. А мы хотели показать способы создания настоящего проекта, поиск решений в процессе работы над ним и методы достижения нужных результатов. Чтобы не отстать от современных веяний, в книгу обязательно требовалось включить описание новейших и наиболее мощных функций. В нашем случае про-
Начало работы
43
ект зависел от неизвестной даты выпуска следующей версии Maya и входящего в приложение набора инструментов. Кроме того, проект требовалось разделить на несколько частей. Хотя вся наша группа живет в Сан-Франциско, соседями мы не являемся. И собираться каждый день для совместной работы крайне затруднительно. Разделение проекта на части не только облегчило бы нам жизнь, но и имитировало реальные условия работы, когда над заданием трудится целая команда. Распределенный объем работы кроме всего прочего гарантировал минимальное количество помех процессу публикации. Нам оставалось только отправлять в издательство результаты своего труда, главу за главой, уравновешивая необходимость работы над проектом необходимостью ее документировать. Также разделение проекта на части требовалось, чтобы в идеале каждую главу можно было читать независимо. Разумеется, и в проекте, и в книге есть ссылки на другие главы, что, впрочем, не мешает решению основных задач. Мы хотели, чтобы выполнение проекта могло не только доставлять удовольствие, но и позволяло проявиться художественным талантам. Как и большинство людей, мы подсознательно лелеяли надежду создать книгу, благодаря которой наши имена запечатлеются в памяти современников. Пусть даже наше творение не станет шедевром, но, по крайней мере, оно должно представлять законный повод для гордости и выдерживать критический взгляд профессионалов, в то же самое время заставляя их улыбаться. Так как нам хотелось продемонстрировать не только свои технические способности, но и художественные навыки, работа над проектом должна была осуществляться в достаточно свободной форме. Фотографическая точность не требовалась, потому что она не позволяла проявить собственный стиль. Ну и, наконец, проект должен был соответствовать реальному ходу событий. Хотя продолжительность анимации но первоначальным прикидкам составляла всего 30 секунд, мы хотели сделать свой рассказ достаточно интересным. Несмотря на желание включить в книгу примеры различных процедур Maya, сценарий фильма должен был иметь некий достаточно строгий контекст. ПРИМЕЧАНИЕ История, рассказанная Марком. Перед сном я часто играю со своим старшим сыном (на момент выхода книги ему будет шесть лет) в такую игру: он выбирает несколько не связанных друг с другом предметов, а я сочиняю про них историю. В большинстве случаев у меня получаются вполне приемлемые рассказы, хотя на первых порах сын ставил меня в тупик, когда в качестве действующих лиц предлагал, например, гиппопотама, пчелу, трактор, капусту и гору. Когда мы посмотрели на список целей, возникло ощущение, что мне снова предстоит играть в эту игру...
Неопределенность Обсудив возражения против прежней версии проекта и технические требования к новой версии, мы попытались понять, как же можно удовлетворить всем требованиям. Мозговой штурм может показаться забавным до того, как вы к нему приступите, или после того, как все уже позади, а нам предстояло проявить всю свою настойчивость. Глядя на список технических требований, мы продумывали объекты и операции, которые могли бы проиллюстрировать все актуальные темы. Нужно было не
44
Глава 2 • Знакомство с проектами
только создать модели автомобилей, людей и прочий реквизит, анимировать их, осветить и визуализировать полученный результат, но и придумать сценарий, связывающий все воедино. Идея включить в повествование автомобиль была просто замечательной, но при этом мы прекрасно понимали, что его изображение не должно быть фотореалистичным. Это не меняло порядка действий при моделировании объекта, зато давало дополнительную свободу творчества. После того как было решено не сковывать себя чрезмерной реалистичностью изображения, мы договорились, что все входящие в проект объекты будут выполнены в одном стиле. В конечном счете, требовалось получить декоративную картинку. Также мы пришли к соглашению, что количество объектов в сцене должно быть разумным. Скажем, сцена путешествия по сельской местности требует намного больше элементов, чем сцена в гараже, Наверное, из-за нашего желания непременно включить в сценарий автомобиль, возникла идея уличной сценки. На улице автомобиль будет смотреться вполне естественно, а персонажи можно расположить на тротуаре или в других автомобилях. У этой идеи был хороший потенциал, поэтому мы решили составить список задач, которые будут выполнены в процессе работы над подобным проектом. При создании строений и улиц можно рассмотреть моделирование наборов объектов. Проблем с поиском реквизита для моделирования также не возникнет. Это почтовые ящики, дорожные знаки, светофоры, счетчики оплачиваемого времени на стоянке и многое другое. Кроме того, не стоит забывать и о предстоящем моделировании автомобиля. Так как в больших городах вдоль тротуаров часто растут деревья, появляется шанс воспользоваться модулем Paint Effects (Эффекты рисования). Конечно, деревья можно получить и с помощью иерархических поверхностей, но зачем усложнять себе жизнь без необходимости? Эффекты рисования позволяют даже «вырастить» сорняки вокруг деревьев, сделан пейзаж более естественным. Создание персонажей представляет собой целое таинство, впрочем, наша задача упрощается тем, что в данном случае предстоит моделировать в основном людей. Однако это не дает возможности показать работу модуля Maya Fur (Имитация меха), поэтому в сцену было решено ввести животное. Собаку, кошку, мышь, кого угодно. Любое четвероногое создание значительно расширяло фронт работ по созданию персонажей. Итак, было решено, что в сцене должен фигурировать, по меньшей мере, один двуногий и один четвероногий персонаж. Их предстояло смоделировать, анимировать, одеть, раскрасить, покрыть шерстью и волосами. Один за другим мы обсуждали различные инструменты и методы работы, думая над тем, как проиллюстрировать их в рамках проекта. Например, использование NURBS-поверхностей и иерархических поверхностей будет объясняться при моделировании различных объектов. Моделирование полигонов было решено оставить за кадром, тем более что в иерархических поверхностях задействуются различные инструменты для работы с полигонами. Для создания объектов подобных поверхностей не потребуется, но в процессе моделирования персонажей вам так или иначе придется с ними столкнуться.
Марк предлагает план В
45
Хотим познакомить читателей с модулем имитации динамики? Значит, сцена будет происходить в ветреный день. Требуется объяснить, что такое системы частиц? Пусть из пожарного гидранта льется вода. Будем мы пытаться автоматизировать процесс совмещения движения объектов, снятых реальной камерой, и объектов сцены с помощью модуля Maya Live (Живая камера)? Нет... вот этого мы делать не будем. Невозможно объять необъятное. Главное — найти момент, когда следует поставить точку. Словом, после нашего обсуждения от первоначальной идеи Макса остался только центральный фрагмент, то есть автомобиль. Зато возникло множество новых идей о том, как сделать нашу историю более жизненной.
Марк предлагает план В Примерно через неделю после нашего обсуждения я пришел домой усталый и решил немного вздремнуть. Подобное для меня не характерно, но я был уверен, что жена вскоре меня разбудит и не позволит пропустить свое любимое вечернее шоу. До этого момента оставался почти час, дети уже спали, поэтому я принял оригинальное решение. Я задремал... и проснулся с совершенно новой идеей. Дело было в том, что я думал о проекте практически непрерывно. А засыпать с желанием обдумать проблему после пробуждения — все равно, что заставлять себя думать о деле сразу, а не откладывать его в долгий ящик. Во время группового обсуждения Макс предложил шутки ради смоделировать пожарный гидрант, из которого течет вода. Именно это мне пришло в голову, когда я ложился в постель. Автомобиль, пожарный гидрант, человек, зверь — эти элементы крутились у меня перед глазами, а потом внезапно сложились в одно целое, За пять минут я мысленно прошел путь от идеи до законченного проекта. Какой зверь должен быть в сцене? Собака и только собака! Зачем нужен пожарный гидрант? Собаки их просто обожают! Возникшее у меня в голове изображение собаки, привязанной на тротуаре к пожарному гидранту, совершенно прогнало сон. Я встал и позвонил Максу, чтобы познакомить его с идеей. Мы решили рассказать о новой версии проекта остальным членам команды. После долгого и бурного обсуждения было решено принять ее. Таким образом, своим рождением история по большому счету обязана стечению обстоятельств. Если бы я не пришел домой рано, если бы Макс не упомянул про пожарный гидрант, если бы по телевизору не показывали мое любимое шоу, проект, скорее всего, выглядел бы совсем иначе.
Окончательный вариант Итак, вот как мы представляли себе проект «Место для парковки*. На переполненной улице освобождается небольшой пятачок, пригодный для парковки. Рядом греется на солнце собака (ее зовут Клякса). За Кляксой располагается магазин игрушек с надписью на витрине «Внимание! Только сегодня!» Тут же мы видим пожарный гидрант. Рядом останавливается автомобиль, бросая тень на Кляксу и изрыгая выхлопные газы прямо ей в морду.
46
Глава 2 • Знакомство с проектами
Вышедший из машины человек смотрит на часы, собираясь зайти в магазин за подарком, затем, заметив, что к нему идет контролер, направляется к счетчику, чтобы оплатить стоянку, но не может добраться до счетчика, поскольку Клякса рычит, делая вид, что собирается его укусить. Человек пытается отвлечь Кляксу, кидая ей палку, но собака не уходит, к тому же ей мешает поводок. Попытка подойти с другой стороны от автомобиля тоже не приносит результата. Контролер тем временем приближается. Наконец, человек подходит к витрине зоомагазина, расположенного рядом с магазином игрушек, и указывает на кость в витрине. Клякса трясет головой. В конце Клякса, сидя рядом с гидрантом, вонзает зубы в большую кость. Тем временем главный герой добирается наконец до счетчика и пытается опустить туда монетку, но его уносит из кадра струя воды, которая начинает бить из гидранта. Клякса закрепляет кран концом кости, имеющим форму гаечного ключа. При этом надпись «Открыто» на двери магазина игрушек сменяется надписью «Закрыто». Завершает ролик большое изображение штрафной квитанции, приколотой на мокром переднем стекле машины главного героя.
Проработка деталей Договоренность о фабуле всей истории стала большим шагом вперед, поскольку позволила перейти к обсуждению элементов и вспомогательных объектов, необходимых не только в качестве завершающих штрихов нашего проекта, но и в качестве источника материала для книги. Хотя сценарий показывает, что с Кляксой лучше не шутить, мы хотели сделать ее симпатичной. Человек в автомобиле создает проблемную ситуацию и платит за это в полной мере. Контролер заставляет героя торопливо делать выбор между природной жадностью и предписанным порядком. Итак, характеры персонажей обрисованы, пришла пора воплотить их в образы,
Детали персонажей Человек в автомобиле должен быть «крутым парнем» (назовем его Крутан). Может быть, это коммивояжер, а может быть, испорченный сынок богатых родителей. Разумеется, он без умолку болтает по сотовому телефону и считает, что мир вращается исключительно вокруг него. Он любит свой автомобиль, который считает продолжением самого себя. Характерные черты персонажа были придуманы довольно быстро, но на проработку деталей ушла уйма времени, потому что нам не хотелось делать его слишком плохим или слишком хорошим. Проще всего было бы сделать из него полного болвана, раздражающего всех, с кем он оказывается рядом, но мы хотели показать зрителям, что персонаж, по крайней мере, иногда пытается совершать правильные поступки. Точно так же Кляксу желательно было сделать хотя и пугливой, но и довольно задиристой. Клякса всего лишь занималась своими делами, когда появился Крутан и помешал ей греться на солнышке. Раздраженная Клякса не просто отомстила, а заставила Крутана сделать пару приятных для себя вещей.
Марк предлагает план В
Получив описание характеров персонажей, Скот Кларк (Scott Clark), ведущий аниматор фирмы Pixar, нарисовал, как они могут выглядеть. Результаты его трудов показаны на рис. 2.2 и 2.3.
Рис. 2.2. Наброски Крутана
Рис. 2.3. Наброски Кляксы
Глава 2 • Знакомство с проектами
После обсуждения всех набросков была выбрана пара вариантов. После этого Скотт уединился и создал окончательные версии персонажей. Они представлены на рис. 2.4 и 2.5.
х»—«акт** feSP Рис. 2.4. Окончательный вид Крутана
Рис. 2.5. Окончательный вид Кляксы
Марк предлагает план В
Контролер не требует такой детальной прорисовки характера, поэтому его вид может быть вполне стандартным.
Детали сцены Мы отдельно занялись дизайном второстепенных объектов потому, что понимали их важность. В число этих объектов входят автомобиль, два магазина, тротуар, улица, пожарный гидрант, кость, счетчик оплачиваемого времени. В качестве статичных деталей сцены будут фигурировать другие автомобили, машина контролера и штрафная квитанция. В зависимости от выбранного угла камеры и дополните^ ьных элементов, которые нам, возможно, захочется включить в сцену, может возникнуть необходимость в других объектах. Впрочем, мы постараемся этим не злоупотреблять. После короткого обсуждения было решено, что не стоит слишком растягивать временные рамки сцены. В действительности, несмотря на наш план вставить в сюжет некоторые забавные трюки, основным смысловым моментом являются неуклюжие попытки Крутана избежать штрафа. Расположение объектов в первой сцене показано на рис. 2.6. Этот не очень качественный набросок передает идею проекта. На рисунке видны существенные элементы сцены и их расположение друг относительно друга.
Рис. 2.6. Первоначальный набросок сцены
Затем один за другим ключевые элементы сцены были аккуратно прорисоканы, и эти рисунки послужили отправной точкой для создания моделей. Что касается многочисленных второстепенных объектов, было решено не тратить время на их рисование. Имея опыт моделирования, мы не сомневались в своей способности создать эти объекты, что называется, «на лету».
50
Глава 2 • Знакомство с проектами
Впрочем, в сцене присутствует еще один элемент, требующий детальной проработки. Это автомобиль Крутана. Макс принес ряд замечательных эскизов, из которых был выбран вариант, показанный на рис. 2.7,
Рис. 2.7. Окончательный вид автомобиля Крутана
Разумеется, как уже упоминалось, моделирование автомобиля представляет собой весьма трудоемкую задачу, отнимающую много времени и сил. Именно поэтому мы решили создать вместо рекламного ролика сценку парковки. Но тем не менее нам требовался план моделирования транспортного средства. Было решено создать на основе автомобиля главного героя множество разнообразных машин. Урезая отдельные элементы и меняя цвета, мы надеялись сделать другие автомобили достаточно разными. Тем более что процесс создания объекта путем преобразования уже существующего элемента сцены сам по себе поучителен. Впрочем, можно было импортировать модель, предложенную Максом, и преобразовывать уже ее. Также требовались объекты, предназначенные для показа в витринах и украшения зданий, но их мы собирались моделировать по ходу дела. Нам кажется, что предварительное планирование подобных вещей не имеет особого смысла и лучше положиться на вдохновение.
Убийца плана В Для любой постановки требуется план. Что необходимо сделать? Когда? Кто будет этим заниматься? Сколько времени это займет? Что будем делать потом? В крупных студиях подобные вопросы возникают непрерывно, и специально подобранная команда умеет не только задавать их, но и находить ответы. Небольшие студии могут не иметь ресурсов на непосредственное решение подобных проблем, поэтому им остается полагаться на опытный персонал, умеющий в процессе работы обойти потенциальные проблемные места. Вне зависимости от сложности проекта, для его реализации требуется определенная методика, то есть система мер, без которых нельзя гарантировать успешный результат. Так как мы создавали историю для собственного удовольствия, наш опыт в данной области может заметно отличаться от вашего. Тем не менее без плана действий было не обойтись. Успех нашего проекта определили всего два фактора: раскадровка и книга. А реальным убийцей наших идей стали ресурсы.
Марк предлагает план В
Раскадровка При переходе от концепции к законченному проекту сложно переоценить значение раскадровки. Вы продумываете основные моменты анимации, а затем пытаетесь воспроизвести их на рисунках. Первая попытка раскадровки была весьма грубой, но вскоре нам удалось немного улучшить иллюстрации. Результат показан на рис. 2.8.
Рис. 2.8. Первые раскадровки
Затем наброски требовалось отсканировать и с помощью программы QuickTime создать из них небольшой фильм. С этого момента мы получили возможность увидеть, как отдельные части замысла выглядят вместе, сколько времени продолжаются различные фрагменты сцены, какие детали имеют смысл, а что лучше выкинуть. Кроме того, у нас в руках оказался исторический документ, показывающий эволюцию как проекта в целом, так и его отдельных моментов. Разумеется, сценарий меняется. Полученная анимация будет отличаться от того, что нам виделось в момент первоначального обсуждения сценария. Некоторые многообещающие идеи отбрасываются, потому что выясняется, что они затяги кают сцену или вместо них рождаются более свежие решения. Как только наш сценарий был перенесен на бумагу, возникло множество вопросов по поводу деталей. Впрочем, бесчисленные мелкие изменения никак не затронули центральную идгю. По большому счету раскадровка является вехой, позволяющей понять, будет ли анимация иметь успех. Бесчисленные технические детали также имеют отно-
52
Глава 2 * Знакомство с проектами
шеиие к проекту и должны прорисовываться при создании раскадровки. Какие бы сложные действия ни приходилось выполнять в Maya, основой для них все равно остается история, нарисованная на бумаге.
Книга Наш проект существует в рамках данной книги. Желание создать художественно целостную историю, точно воспроизводящую замысел, достойно похвалы, но не следует забывать, что основной целью проекта является объяснение различных методик и приемов работы с Maya. Впрочем, мы решили, что не будем искусственно провоцировать потребность в том или ином инструменте. Если какой-либо инструмент не требуется для наших целей, значит, в книге он упомянут не будет. Например, вы не увидите персонажей, смоделированных на основе NURBS-поверхностей. Для персонажей превосходно подходят иерархические поверхности, поэтому нет никакого смысла искусственно бороться с топологическими ограничениями NURBS-поверхностей. Разумеется, так тоже можно создать персонаж, но это не поможет читателям получить представление о наиболее удобных способах моделирования тех или иных объектов. Поэтому основным движущим принципом нашей работы стала демонстрация наиболее подходящих для выполнения поставленных задач инструментов и объяснения сделанного выбора.
Ресурсы Как уже упоминалось, проект «Место для парковки» требовалось разбить на отдельные части, работу над которыми можно было вести независимо. Это был всего лишь первый из вопросов координации ресурсов, с которым нам пришлось столкнуться. Временные рамки проекта ограничивались тремя факторами: сроком сдачи книги в издательство, временем демонстрации анимации и временем ее создания. Ко времени выпуска книги в издательство требовалось поставить отредактированные и проверенные материалы в книжном формате. Чтобы гарантировать подобные вещи, требовалось планировать наши индивидуальные действия и учитывать замечания редактора. Для такой группы начинающих авторов, как наша, это стало самой тяжелой частью проекта. Хотя мы не ставили задачу вместить нашу анимацию в четкие временные рамки, по практическим соображениям не стоило создавать слишком длинный клип. Увеличение продолжительности анимации означает дополнительную работу и дополнительное время визуализации. Поэтому временной аспект следовало ограничить заранее, чтобы не получить в результате монстра. По первоначальным прикидкам история должна была занимать от 30 секунд до минуты. В идеале, конечно, хотелось, чтобы продолжительность анимации в минутах выражалась круглым числом, но мы решили не быть столь педантичными. Серьезным ограничивающим фактором было наше собственное время. Никого не волновало наличие у нас другой работы. Проект нужно было закончить в срок, и никуда от этого не деться. Это тоже повлияло на принятие решения о продолжи';;.".<'м аннмпции.
Заключение
53
Ну и, наконец, существовали и денежные тра'гы. Для подобных проектов требуется соответствующее аппаратное и программное обеспечение. Положим, бетаверсию приложения Maya мы получили от фирмы Alias] Wave front. Дома у меня стоит Macintosh, а вот портативный компьютер с операционной системой Windows пришлось покупать самостоятельно. Впрочем, после завершения работы над проектом я планировал продать его.
Заключение Проект «Место для парковки» представляет собой короткую анимацию, призванную проиллюстрировать приемы работы с Maya. Его содержание отражает попытки объединить требования читателей, авторов и издателей. Однако сама история родилась благодаря необходимости, настойчивости и везению. Как и большинство частей целого, даже название наводит на мысли о двояком 1 1 значении и скрытом смысле . Возможно, в этом отношении наш проект не отли iaется от множества других, но мы хотели дать понять, как много вещей стоит за каждой деталью истории. Мы надеемся, что объяснением происхождения и целей проекта «Место для парковки» были проведены полезные параллели с вашей работой в Maya. По мере движения вперед, нам придется погрузиться в технические детали, но мы (а теперь и вы) все равно будем помнить о требованиях проекта.
1
Игра слов. В оригинале название проекта шглядит как «Parking spot*, а имя собаки — как «Spot*. Таким образом, простым изменением регистра буквы «s» в названии проекта можно место для : юрковки (parking spot) превратить в парковочную собаку Кляксу (parking Spot). — Примеч. ред.
3
Конвейер цифровой студии
Всего несколько лет назад компьютерная графика была целиком прерогативой больших студий, но теперь даже маленькие рабочие группы и отдельные пользователи могут создавать настоящие шедевры в этой области. Благодаря многочисленным функциям Maya даже один пользователь может довести до конца практически любой проект, не делая ничего экстраординарного, Цифровая студия — это не столько место, сколько процесс. Так как большинство этапов этого процесса зависят от того, что требуется получить в результате, его можно сравнить с конвейером. Разумеется, при внимательном рассмотрении выясняется, что эта аналогия далеко не совершенна, потому что при работе над сценой многое можно делать одновременно. Но тем не менее весь процесс имеет ясные зависимости и четко определенную последовательность. В этой главе мы поговорим на следующие темы: О О О О
этапы выполнения проекта; связи между этапами; факторы, повлиявшие на структуру данной книги; роль, которую играют в конвейере различные средства Maya.
Подготовка к производству Перед тем как запустить Maya и приступить к созданию первого объекта или к визуализации первого пиксела, следует пройти несколько этапов, которые позволят гарантированно получить желаемый результат. Другими словами, нужна подготовительная работа, которая и направит процесс в нужное русло. Никто не будет спорить с тем, что менять стилистику проекта или его основные детали лучше до начала моделирования, а не после завершения работы нал объектами и персонажами.
Сценарий Все начинается с написания сценария. Нет сценария — не будет и проекта. От его качества напрямую зависит потенциальный успех результатов вашего труда. Имен-
Подготовка к производству
55
но поэтому важно, чтобы на ранних стадиях все было выполнено как можно лучше. Кроме того, изменения в сценарии могут оказать очень большое влияние на все остальные этапы процесса, Любой проект обязательно сопровождается набором требований, в число которых иногда входит требование к основной сюжетной линии. Впрочем, даже скрупулезно написанный сценарий дает определенную свободу творческих и технических действий. Обычно представления клиента настолько грандиозны и неопределенны, что их точное воплощение в жизнь представляет определенные трудности. И хотя в процессе работы часто возникают приятные сюрпризы, из-за ограниченности ресурсов на первое место выходит необходимость четкого определения основной идеи проекта. Сценарий невозможно с самого начала проработать до мельчайших деталей. Обычно все начинается с вдохновляющей идеи, рационального рассмотрения целей проекта, пристального взгляда на возможности рабочей группы и учета многочисленных «А что если...», которые могут возникнуть в процессе разработки. Рано или поздно наступает момент перехода к воплощению проекта в жизнь, тут-то и начинается самое сложное. Изменения в сценарий можно вносить и на этой стадии, если, конечно, их эффект не оказывается деструктивным, однако за них приходится платить. В какой-то момент цена любых изменений становится непомерно высокой, и это значит, что работу над сценарием пора завершать. Для определения всех деталей сценария требуется перенести исходную идею на бумагу, то есть создать раскадровки. Они выполняют несколько функций. Вопервых, таким способом удается получить информацию о расположении объектов в сцене. Во-вторых, просмотр сценария по фрагментам позволяет учесть все его детали. Наброски обеспечивают простоту внесения изменений в сюжет и композицию. Ну и, наконец, рисунки можно отсканировать и использовать в качестве начальных образцов, постепенно заменяя их элементами компьютерной графики. Раскадровки дают эффективный способ детализированного описания анимации, которое можно представить как клиентам, так и рабочей группе. Описанный выше подход был применен и к нашему проекту «Место для парковки» (с его содержанием можно познакомиться в главе 2). После тщательного рассмотрения необходимых условий родилась основная концепция, которая бы ла представлена на одобрение клиентам (в их роли выступали как мы сами, так и издатели нашей будущей книги). Также мы обсудили детали ее воплощения в жизнь. Были созданы раскадровки, затем мы их отсканировали, оценили и внесли необходимые изменения (рис. 3.1). После начала работы над проектом из-за ограниченности ресурсов пришлось отказаться от некоторых деталей, в то же самое время появились новые идеи, позволяющие сделать конечный результат более интересным. Захватывающие картинки вряд ли сделают историю более интересной. Даже небольшие комичные сюжеты, призванные оживить повествование, не спасут положение, если сценарий недостаточно проработан. Плохо продуманный сценарий вряд ли сможет реализовать свой визуальный и сюжетный потенциал. Другими словами, к сценарию нужно относиться как к фактору, от которого зависит весь будущий проект.
Глава 3 • Конвейер цифровой студии
56
Рис. 3.1. Раскадровки для проекта «Место для парковки»
Внешние проявления Внешний вид проекта должен быть не побочным продуктом процесса его создания, а результатом сознательного выбора. Перед началом моделирования потратьте время на определение визуального характера готовой работы. Иногда впечатление об общем стиле проекта можно получить из раскадровки, но обычно наброски делаются крайне небрежно и дают представление в основном о расположении объектов в сцене и течении сюжета. Например, версия персонажа в раскадровке и его окончательный вид могут значительно различаться. Особенно . это характерно для второстепенных объектов, тщательным описанием которых при составлении раскадровки часто пренебрегают. Все вышесказанное ни в коем случае не означает критику раскадровок. От вас не требуется тратить время на создание красивых рисунков. Мы всего лишь обращаем ваше внимание на то, что внешний вид объектов требует дополнительной проработки. Визуальное конструирование объектов подразумевает решение достаточно широкого спектра задач. Нужно принять решение о характерном стиле персонажей (рис. 3.2), продумать освещение, вид после анимации, сложность и уровень реализма. Причем нужно учитывать, что выбор стиля влияет на подбор инструментов, которыми вы будете пользоваться при моделировании, а также определит технические требования.
Подготовка к производству
5?
Рис. 3.2. Первые варианты персонажей
Иногда выбор стиля загоняет проект в строгие рамки. В других случаях, несмотря на ограничения, все-таки присутствует возможность творческой интерпретации со стороны режиссера, художественного редактора и разработчика анимации (иногда это может быть один и тот же человек). Но в основном при выборе стиля проекта приходится идти на компромисс между творческими порывами и скудными ресурсами. Так как от стиля проекта во многом зависит дальнейшая работа над ним, все сопутствующие проблемы желательно решить еще на этапе обсуждения сценария. По возможности нужно создать тестовую анимацию и посмотреть, как она будет выглядеть. Впрочем, в качестве основы для работы вполне достаточно набора опорных рисунков. Следует помнить, что узнаваемый стиль является плодом кропотливой подготовки и внимания ко всем деталям.
Технические аспекты Несмотря на творческий подход к созданию сцен в Maya, работа с этим приложением представляет собой больше техническую задачу. К счастью, пользователи Maya являются умными и преданными своему делу людьми, для которых это, скорее, вызов, чем помеха. Кроме того, по мере эволюции компьютеров и программного обеспечения все больше наших знаний можно применять на практике. Вне зависимости от сложности проекта требуется затратить определенные ус илия на выявление стоящих перед вами технических задач. Некоторые из них будут стандартными, другие возникнут только в рамках одного проекта. Однако все
Глава 3 • Конвейер цифровой студии
они заслуживают самого пристального рассмотрения. Нужно убедиться, что все задачи решаемы с помощью обычных операций. Подобные операции в Maya легко планировать, но в то же самое время их проще всего проглядеть. Существует множество способов настройки Maya для выполнения обычных задач и работы в определенном стиле. Интерфейс этого приложения крайне гибок, и его можно расширять путем написания сценариев и программирования. Более того, вы можете непосредственно изучить исходный код программы, так как она целиком написана на языке MEL. При желании количество элементов интерфейса можно сократить, например, как показано на рис. 3.3.
Рис. 3.3. Вариант интерфейса Maya
Если вам надоело работать с контекстными меню, можно настроить клавиатурные комбинации или полки. Для повторяющихся операций пишутся сценарии на языке MEL. Если вам не нравится место расположения некоторых команд, можно взять сценарий меню, отредактировать его и сохранить копию в специальной папке. Другими словами, то, насколько удобно вам будет работать с Maya, зависит только вот вас. Дополнительные возможности конфигурирования Maya предоставляет прикладной программный интерфейс. Впрочем, вопросы разработки приложений с помощью API выходят за рамки темы данной книги.
Настройка рабочей среды
59
Другие технические вопросы могут быть совсем несложными, например выработка стандартов сохранения файлов. Чтобы получить логичную форму хранения данных, настройте интерфейс программы, напишите новые MEL-сценарии для управления пользовательскими атрибутами или разработайте собственную систему. Различные варианты настройки интерфейса Maya рассматриваются в главе 4.
Настройка рабочей среды Хотя производство анимации представляет собой непрерывный процесс, иногда полезно представлять его в виде двух фаз. Сначала идет фаза настройки и только затем — производства. В этом разделе мы поговорим именно о настройке конвейера цифровой студии.
Моделирование Первым шагом в работе над анимацией является моделирование. Ну, сами подумайте, какую историю можно рассказать с нулевым количеством объектов на сцене? С точки зрения управления процессом производства сначала имеет смысл составить список необходимых объектов. Информация о приоритете моделей позволяет более разумно распределять ресурсы. Тем более что обычно все операции требуют больше времени, чем предполагалось сначала, особенно при отсутствии предварительного плана действий. Второстепенные объекты не обязательно превращать в произведения искусства, но для основных моделей требуется хороший опорный материал. То есть нужно создать изображения модели в ключевые моменты, например, в виде серии ортографических проекций. Этого вполне достаточно для одиночных объектов и их совокупностей, а вот для персонажей потребуется дополнительный набор рисунков, характеризующий диапазон движений и выражений лица модели. Для начала следует выбрать метод создания объекта. Часто выбор определяется дальнейшими технологическими операциями нашего конвейера, например необходимостью назначения определенного материала или работы над артикуляцией. Для примера на рис. 3.4 показан объект, который вам совсем скоро предстоит создать своими руками. Все доступные форматы Maya (полигоны, NURBS-поверхности, иерархические поверхности) имеют собственные характеристики и методы конструирования. Персонажи обычно создаются как иерархические поверхности, в то время как большинство объектов моделируется на основе NURBS-поверхностей. Некоторые элементы добавляются, чтобы оттенить особенности назначаемого впоследствии материала, хотя материал в свою очередь помогает создавать такие элементы, которые трудно получить другим путем. Так как моделирование оказывает влияние на остальные этапы процесса, важно выработать к нему вдумчивый подход. Также желательно ясно понимать, каких затрат требует создание каждой модели.
60
Глава 3 • Конвейер цифровой студии
Крышками являются NURBS-поверхшсти, так как для каждой крышки требуется простая шадкая поверхность ;< ; ? :;=
Основанием гидранта является иерархическая шверхностъ, позволившая получить йЛввноесопряжение в области вентилей
"!
Пятиугольные .болты являются - ; NURBS-поиерхнрстями с числом интервалов! п 5 (в данном случае—15}: :
Рис. 3.4. Выбор методов моделирования объекта
С основами моделирования вы познакомитесь в главах 6 и 7. В главах 8 и 9 этот процесс будет описан более детально, а глава 10 посвящена особой области моделирования — созданию персонажей. Опыт и понимание сущности всех методов поможет найти наиболее продуктивное решение в каждом конкретном случае.
Артикуляция Понятие артикуляции применимо не только к персонажам, но и к обычным объектам. Этот процесс обеспечивает необходимые элементы управления анимацией для каждого компонента модели в случаях, когда движения не удается добиться назначением материала или имитацией. Думаем, вы понимаете, что этому процессу должно предшествовать конструирование модели. Объекты, к которым применимы обычные преобразования (перемещение, поворот, масштабирование), легко анимировать по методу ключевых кадров. В этом случае иерархическим связям и положению опорных точек можно не уделять особого внимания. Более сложные связи влекут за собой написание специальных выражений, позволяющих устанавливать зависимость между компонентами модели, или требуют указания степеней свободы с ограничениями в костях скелета для
(1
Настройка рабочей среды
обратной кинематики. Обычно все эти параметры можно определить только после построения модели. Поэтому работа над артикуляцией начинается после завершения моделирования. Основной объем работ по артикуляции связан с персонажами, впрочем, это относится и в целом к движению в анимации. Для деформирования моделей (а именно к таковым относятся персонажи) в Maya существует множество различных и нструментов. В распоряжении технического директора имеются скелеты, методы прямой и обратной кинематики, методы связывания, кластеры, сопряжения, многочисленные деформаторы и многое другое. Сборка персонажа представляет собой сложный процесс, требующий готовой модели, как показано на рис. 3.5. Впрочем, частично его можно выполнить при наличии модели-заместителя.
Рис. 3.5. Сборка персонажа
Обычно сборка персонажа сопровождается топологическим изменением модели, поэтому модель приходится редактировать несколько раз. Впрочем, об этом мы поговорим в главе 16.
Глава 3 * Конвейер цифровой студии
62
Материалы Следующей важной операцией на конвейере является назначение материалов. В зависимости от пристрастий сотрудников вашей студии и особенностей модели этот этап может как следовать за анимацией, так и выполняться параллельно. Назначение материала придает поверхности сходство с поверхностью реального объекта. Это может быть как выбор цвета в одной из стандартных моделей материалов Maya и назначение его нужным поверхностям, так и создание сложных сетей материалов, определяющих наложение друг на друга различных характеристик поверхности. Некоторые студии пользуются материалами от сторонних производителей, экономя таким способом время. Структура простых материалов достаточно очевидна, но, к сожалению, к большинству материалов слово «простой» неприменимо, как показано на рис. 3.6. . ., ,.,.-„• нет ( t,i ¥ •>. <Ъ * г
.,,;,.! ШЙ «n.^rt/s K-t
Рис. 3.6. Назначение материала
Если основной целью проекта является создание фотореалистичной сцены, материалы непременно будут очень сложными. Работу над материалом требуется тщательно планировать. Нужный результат обычно достигается последовательными приближениями. Убедительность созданного материала зависит от художественных способностей аниматора. Поверхности реальных объектов далеко не идеальны, на них име-
Настройка рабочей среды
ются грязь, царапины, неровности, имитация которых с помощью стандартных материалов невозможна. Их нужно создавать отдельно. Впрочем, даже если фотореалистичное воспроизведение не требуется, работа над материалами невозможна без артистического видения. Кроме того, существует возможность раскрасить объект. Для этого в Maya применяется инструмент 3D Paint (Рисовать по поверхности). Можно также воспользоваться приложениями Photoshop, Amazon 3D Paint или Deep Paint 3D. Процесс работы над материалом можно ускорить с помощью процедурных текстур и встроенных библиотек материалов. Кроме того, множество материалов можно обнаружить в Интернете. Более подробно на эту тему мы поговорим в главе 18. Точно так же как хорошие колонки влияют па звучание вашей стереосистемы, от хороших материалов зависит окончательный вид анимации.
Компоновка После моделирования основных объектов возникает вопрос об их расположении в сцене. Именно в этот момент раскадровка преобразуется в сцену, персонажи расставляются по местам, а камеры определяют композицию, как показано на рис. 3.7. !ЕСИЭЕЖЖЕрШ5"ВЗЩЩ"вйЩ^жш51Ё
U--L, is!
l*nmato."iy В * M U Si %. « > i : + [4 e * к '
«Э1£
f.'>'. 4. >«":'
i ло
|ieo
}№"""fa"':"ш"'"""'Ш I l !
. 1 , 1
'"ia I
;r ::>"-:S^T^^.'-Y?- 7--"--"^.?; '^З P •i-:. xmeK'Jwv^Mt'Wrf^'l" -->• ' **b^;j
««((омада ut
Рис. 3.7. Компоновка сцены
...,_&!£. , I '.*!&: .2\ : W "~W™"I'rlnr^T.^и"и W> Hi»:" "" i l i l т .... '.. .. • < ...; =
-135ооГ7»ОС11
Tf;-^,&'&>m.
Глава 3 • Конвейер цифровой студии
В зависимости от сложности проекта процесс компоновки может начинаться до, после или вместе с назначением материалов. Последнее никоим образом не зависит от расположения объектов в сцене (и наоборот). Но очень желательно, чтобы компоновка предшествовала оформлению сцены. И только после этого допустимо переходить к анимации, освещению и визуализации. Сущность компоновки состоит в создании фрагментов, содержащих основные элементы сцены. Для облегчения этой задачи все фрагменты должны явно прослеживаться, а основные элементы сцены должны быть определены и доступны. Для многих проектов это также означает наличие у сложных объектов заместителей. В действительности наличие качественных заместителей часто позволяет скомпоновать сцену уже на ранних стадиях. Более подробную информацию по этому поводу вы получите в главе 11. После того как все элементы сцены окажутся на своих местах, наступает время для установки камеры в соответствии с раскадровками. Иногда при этом приходится вносить изменения в исходную модель. Например, может потребоваться расширить границы комнаты, чтобы увеличить размер сцены.
Оформление сцены После установки камер становится ясно, чего в сцене не хватает. Обычно не хватает многого. Заполнение сцены недостающими объектами называется ее оформлением.
Рис. 3.8. Оформление сцены
Производство
65
Процесс оформления сцены должен предшествовать анимации, чтобы не получилось так, что персонаж проходит через подставку для зонтика или протягивает руку сквозь стоящую на столе лампу. Впрочем, задача оформления сцены является второстепенной по отношению к основным задачам, поскольку обычно достаточно просто передвинуть подставку для зонтика или убрать лампу, Модели, используемые для оформления сцены, мало просто «раскидать» где попало, заполнив пустое пространство (рис. 3.8). С их помощью можно скрыть неудачные части моделей, сбалансировать композицию, сделать изображение более объемным или добавить забавные элементы для наблюдательного зрителя. Хотя в данном случае также желательно иметь план работы, часто придумывание моделей для оформления сцены происходит спонтанно в процессе решения возникающих проблем. В основном работы по оформлению сцены выполняются сразу, но иногда отдельные этапы могут продолжаться по мере создания анимации. При производстве фильмов практикуется самое вольное обращение с предметами. Например, если лампа отчасти загораживает лицо персонажа, значит, лампу просто отодвигают. Эта практика принята и в компьютерной графике.
Производство Итак, все приготовления сделаны, и пришло время сконцентрироваться на самой тонкой части работы. Нужно добиться от виртуальных персонажей точного выполнения действий и создать впечатляющую сцену. Мы поговорим об участках нашего виртуального конвейера, предназначенных для реального производства, результатами которого вы сможете гордиться.
Анимация Анимацию принято считать одной из самых важных операцией на конвейере. Корректное выполнение всех предварительных этапов позволяет полностью сконцентрироваться на «оживлении» персонажей. Перейдя же к этой стадии слишком рано, вы потеряете время на поиск отсутствующих моделей, нацеливание камер и на исправление последствий неверного монтажа персонажей. Именно поэтому настолько важна предварительная подготовка. В отличие от реальных фильмов анимация создается постепенно. Действие каждого персонажа проходит свои собственные этапы, начиная от формирования позы до мелких жестов и выражения эмоций. Структурирование анимации в соответствии с этими этапами позволяет избежать излишней работы. Сначала персонаж нужно разбить на блоки, как показано на рис. 3.9. В ключевые моменты эти блоки просто устанавливаются в нужное положение. Это позволяет создать простейшую анимацию, чрезвычайно полезную при оценке композиции сцены. Затем начинается развертывание анимации во времени и настройка сложных движений. На этом этапе обычно начинает проявляться характер персонажа. После отладки мельчайших движений происходит бесконечная серия редактирований, конечным результатом которых является иллюзия движения живого существа.
66
Глава 3 • Конвейер цифровой студии
Рис. 3.9. Разбиение персонажа на блоки и установка их в нужные положения
Этот этап не должен продолжаться слишком долго, если вы хотите завершить проект к назначенному сроку. Никто не спорит, что нет предела совершенству, но нужно почувствовать момент, когда следует остановиться.
Освещение После заполнения сцены объектами и движущимися персонажами приходит время проявить ваши художественные наклонности. Освещение представляет собой нечто большее, нежели просто установку источников света и наблюдение за полученным результатом. Ведь таким образом можно создать определенное настроение, выделить определенные действия и подчеркнуть красоту и богатство сцены. Работу над освещением сцены принято начинать после завершения анимации объектов, так как обычно каждый персонаж освещается отдельно, как показано на рис. 3.10. Такой подход позволяет выделить его на общем фоне. Эффект можно дополнить такими элегантными деталями, как ореол. Для освещения персонажей обычно используются ключевой, заполняющий, кольцевой и отраженный свет. Много времени занимает настройка теней, особенно если объект находится в движении. Освещение сцены требует тщательного внимания к деталям, и не забывайте, что свет отрицательно сказывается на времени визуализации. Какими бы симпатичными ни казались мириады фотонов, за них придется заплатить при выводе информации. Ведь если анимацию невозможно визуализировать, насмарку идет вся работа.
Производство
Рис. 3.10. Освещение персонажа
Чтобы ускорить процесс освещения сцены, можно связать источники света с освещаемыми ими поверхностями. Тогда визуализация ограничится расчетом лучей, необходимых для освещения указанной вами поверхности, и теней, отбрасываемых соответствующим объектом. Более подробную информацию по этому поводу вы найдете в главе 19. Операция освещения навевает приятные мысли, ведь следующей на конвейере идет операция визуализации, после которой результаты своих трудов можно б> дет представить зрителям.
Эффекты Однако не следует торопиться. А как же фейерверк? А туман? А дождь? Впрочем, справедливости ради следует заметить, что сформирование различных эффектов может выполняться параллельно с работой над освещением сцены. Даже если эффект, например брызги воды (источником которых будет пожарный гидрант), может быть создан изолированно, брызги вес равно требуется осветить, как и остальную часть сцены. Эффекты часто фактически зависят от всей сцены, в том числе и от ее освещенности. Очередность создания эффектов зависит от ашшируемых объектов, а также от того, в какой точке нашего конвейера начинается их формирование. Приступать
Глава 3 • Конвейер цифровой студии
68
к созданию флага, развевающегося на ветру, лучше перед началом освещения сцены, в то время как имитация течения жидкости должна быть готова уже на стадии анимации. Меховые поверхности формируются при назначении материалов и в ходе анимации объектов. А такие уникальные инструменты, как модуль Paint Effects (Эффекты рисования), могут применяться уже на стадии моделирования. Словом, перед переходом к финальной операции на нашем конвейере — визуализации — необходимо создать все необходимые эффекты. У вас будет шанс попрактиковаться в этой области при чтении главы 14.
Визуализация К моменту визуализации вся сложная работа должна быть уже завершена, остается только позволить компьютеру делать то, для чего он предназначен, то есть вычислять. Иногда достаточно щелкнуть на кнопке Render (Визуализация), отойти попить кофе и вернуться через некоторое время, чтобы посмотреть на готовые кадры. Но это достаточно редкий случай.
Рис. 3.11. Артефакты, проявившиеся при визуализации
В первую очередь нужно убедиться, что процесс визуализации занимает приемлемое время. Для этого требуется визуализировать тестовые кадры и экстрапо-
Заключение
69
лировать результат на всю анимацию. Если выяснится, что вам придется ждать слишком долго, отредактируйте сцену (например, пересмотрев концепцию освещения) и проведите тест еще раз. Другим вариантом решения проблемы является проведение визуализации на более мощном компьютере. Тестовые кадры надлежит исследовать на наличие различных артефактов (рис. 3.11). Впрочем, даже если отдельные кадры пройдут тест, помехи могут проявиться на всей анимации. Из-за возможности их появления недопустимо откладывать визуализацию проекта на последний день перед сдачей заказа. Эффективным является метод послойной визуализации с последующим монтажом полученных в результате изображений. Обычно внесение изменений сопровождается необходимостью заново визуализировать всю анимацию, в то время как в данном случае повторная обработка требуется только для измененных элементов. Подробную информацию по этому поводу вы получите в главе 20.
Заключение Раньше возможность создания цифровой анимации была только мечтой, но теперь она воплотилась в реальность. Для успешного выполнения сложных проектов нужно понимать природу рабочего процесса. Вам не обойтись без планирования, впрочем, сэкономленное в результате время и ошибки, которых удастся избежать, стоят потраченных усилий. Воплощение придуманной истории в реальную анимацию является большой ответственностью, что, впрочем, не смущает многочисленных пользователей Maya по всему миру. Остальные главы книги, посвященные различным этапам подготовки проекта, следуют практически в том же порядке, который был описан в этой главе. Мы уверены, что эта информация поможет вам работать над своими проектами более целенаправленно.
4
Приемы работы в Maya
Одним из основных достоинств Maya является приспособляемость. Это означает, что многочисленные инструменты этого приложения могут настраиваться под конкретного пользователя. Более того, в основе всего пользовательского интерфейса лежат MEL-файлы, которые можно не только посмотреть, но и отредактировать в соответствии со своими нуждами. Поэтому перед тем как приступить к работе над проектом «Место для парковки*, поговорим о выгодах, которые дает приспособляемость Maya. Вы, скорее всего, уже знакомы со средствами адаптации Maya к потребностям пользователей — контекстными меню, полками, клавиатурными комбинациями, MEL-сценариями. И не сомневаемся, что вам хотелось бы побольше узнать о дополнительных приемах работы с программой, повышающих эффективность моделирования, его безопасность и удобство. Все это позволяет сэкономить максимум самого ценного, что у вас есть — времени. Мы обсудим понятия, касающиеся различных аспектов работы в Maya. Чтобы при описании этапов выполнения проекта не касаться множества мелких (но важных) деталей, мы предпочли свести информацию о них в одну главу. Здесь вы узнаете о способах настройки интерфейса Maya в соответствии с вашими нуждами, то есть о том как: О О о О О О О
менять заданные по умолчанию параметры команд; создавать собственные клавиатурные комбинации; создавать полки, используя текстовый режим полок; настраивать интерфейсные MEL-сценарии; редактировать существующие меню и создать новые; эффективно управлять окнами проекций; управлять проектами и файлами.
Организация рабочего пространства Иногда сложнее всего начать проект. Точнее говоря, понять, с чего начинать. В таких случаях очень важно иметь на руках надежную методологию перехода от кон-
Команды
71
цепции к реальному проекту. Поэтому перед тем как приступить к созданию моделей и их дальнейшей обработке, поговорим об интерфейсе программы, Для начала мы расскажем вам о том, как наиболее удобным образом организовать свое рабочее пространство. Так как количество элементов интерфейса Maya крайне велико, а команд еще больше, процесс их настройки чрезвычайно трудоемок. По крайней мере, это не та работа, которую можно выполнить быстро. По мере освоения Maya вы обнаружите, что темпы вашей работы растут, впрочем, рано или поздно будет достигнут определенный предел. Когда число и сложность шагов, необходимых для решения той или иной задачи, снизить уже невозможно, ваша производительность будет зависеть только от того, насколько хорошо вы знакомы с используемым инструментарием. Прежде всего нужно разобраться, что мешает вам повысить производительность. Иногда требуется облегчить доступ к определенным инструментам, иногда достаточно снизить количество шагов, отданных под некий процесс, а иногда приходится «наступить на горло» своим личным пристрастиям. Цель проста: по возможности создать уют в своем рабочем пространстве, то есть настроить под свои нужды интерфейс и инструменты Maya. Разумеется, процесс настройки требует времени, которое, впрочем, быстро компенсируется последующим ростом производительности. Постепенно вы обнаружите, что ваша работа с Maya перестает быть мучительным упражнением по поиску нужных элементов интерфейса, а естественно переходит в продолжение мыслительного процесса. Больше времени удастся уделять собственно редактированию моделей, а не возиться с меню, менять параметры команд, настраивать маски выделения и отменять свои действия. Достаточно долго проработав с Maya и запомнив различные варианты взаимодействия и параметры команд, нужно уделить внимание более сложным или плохо запоминающимся аспектам работы. Именно их наиболее выгодно оптимизировать под себя. В этой главе мы опишем основные приемы повышения производительности,
Команды Доступ к командам в Maya осуществляется различными способами: через основные и контекстные меню, через полки, через клавиатурные комбинации. То есть может быть несколько вариантов доступа к одной и той же команде. И для каждой задачи можно выбрать наиболее подходящий вариант. В этом разделе мы рассмотрим некоторые из этих вариантов и поговорим о том, как они влияют на эффективность работы.
Параметры команд по умолчанию Справа от названий некоторых команд находится квадратик, при щелчке на котором предоставляется доступ к параметрам команды. При этом Maya запоминает последние значения этих параметров и сохраняет их в файле userPrefs.mel, чтобы использовать при следующем вызове команды. Это просто замечательно, если вы работаете с командами, параметры которых меняются очень редко или наоборот, меняются при каждом следующем вызове. Но существует множество
72
Глава 4 • Приемы работы в Maya
команд, параметры которых изначально имеют не те значения, которые вам требуются. В этом случае имеет смысл отредактировать параметры, установленные по умолчанию. Папка $MAYA_LOCACTION/scripts содержит две вложенные папки со сценариями команд на языке MEL. Эти папки называются startup и others. В общем случае сценарии, формирующие пользовательский интерфейс, находятся в папке startup, в то время как специальные команды и их параметры занимают папку others. Чтобы изменить действие любого сценария, его нужно сначала скопировать из исходной папки в вашу собственную папку, предназначенную для сценариев. Если файл является общим для всех версий Maya, его можно поместить в папку «maya/ scripts. В противном случае маршрут доступа к папке должен содержать номер версии Maya, например ~maya/5.Q/scripts. ПРИМЕЧАНИЕ Знак тильды («) является стандартной для UNIX аббревиатурой, обозначающей домашний каталог. Поэтому маршрут ~/тауа обозначает каталог, в котором обычно хранятся файлы этого приложения, в то время как маршрут ~гпауа соответствует домашнему каталогу пользователя с регистрационным именем тауа,,
Итак, что же можно поменять, отредактировав сценарий? Как мы уже упоминали, заданные по умолчанию параметры команд могут не соответствовать вашим предпочтениям. Кроме того, можно поменять стандартный размер объектов-примитивов или выбрать другой метод присоединения. Но для начала мы поговорим о том, где в различных операционных системах хранятся файлы Maya.
Где искать папку $MAYA_LOCATION? Думаем, вы уже знаете, что Maya может работать в различных операционных системах. В каждой из них эта программа устанавливается по-разному, в зависимости от окружения. Вот в какие папки в различных операционных системах файлы Maya устанавливаются по умолчанию: О Irix — /user/aw/maya5.0; О Linux — /user/aw/maya5.0; о Windows — Drive:\Program Files\AliasWavefront\Maya5.0; О Mac OS X - Applications\Maya5.0. Дополнительную информацию по этому поводу можно найти в разделе Essentials руководства пользователя Maya. ПРИМЕЧАНИЕ Хотя в операционных системах семейства Windows принято использовать при написании маршрутов доступа обратную косую черту (\), в остальных операционных системах, допускающих работу с Maya, применяется обычная косая черта (/). В данной книге мы приняли второй вариант обозначения. А пользователи Windows при написании маршрутов доступа должны просто поменять прямую черту на обратную.
Изменение параметров команд, заданных по умолчанию Предположим, что требуется изменить заданное по умолчанию поведение команды Attach Curves (Присоединить кривые) таким образом, чтобы отключить параметр
Команды
73
Keep Originals (Сохранять исходную поверхность). Для этого нужно скопировать файл performAttachCrv.mel из папки scripts/others в вашу локальную папку для сценариев. Затем следует найти нужный параметр, открыв файл в текстовом редакторе. Сценарий выглядит следующим образом: // keep original (for in place operations is on-1 or off-0), // if (SforceFactorySettings | ГoptionVar -exists attachCrvKeepOhginaT) t optionVar -intValue attachCrvKeepGriginal 1; }
Осталось внести несложные изменения, присвоив нужному параметру значение 0: optionVar -intValue attachCrvKeepQriginal 0: После сохранения файла и перезагрузки Maya выбор команды Reset Settings (Сбросить настройки) будет вести к сбрасыванию флажка Keep Originals (Сохранять исходную поверхность), что избавит вас от необходимости делать это вручную. Итак, вы убедились, что параметры команд доступны в MEL-файлах, а не скрыты в бинарных файлах с непредсказуемыми названиями. Поэтому вы можете менять их в соответствии со своими нуждами.
Выяснение названий команд Описанный выше случай является очень простым, так как название команды было очевидным. Впрочем, большинство инструментов моделирования имеют названия вида реггогтНазвание.те!. Хотя сложные команды могут состоять из нескольких сценариев, найти нужный параметр обычно не трудно. Кроме того, достаточно установить флажок у команды Echo A l l Commands (Отображать все команды) в меню Script (Сценарий) диалогового окна Script Editor (Редактор сценариев), как показано на рис. 4.1, и вы увидите, как выглядят на языке MEL выполняемые вами команды. Также можно воспользоваться командой whatls. Иногда появившиеся в редакторе сценариев строки довольно сложно понять. В этом случае для поиска нужного варианта придется воспользоваться руководством по MEL-командам (MEL Command Reference). Впрочем, при наличии определенной смелости (а также понимания, что для возвращения заданных по умолчанию параметров достаточно удалить отредактированный файл) можно спокойно менять параметры практически любой команды. СОВЕТ Чтобы вернуться к заданным по умолчанию меню и элементам интерфейса, достаточно удалить отредактированные файлы из локальной папки со сценариями и перезагрузить Maya.
Если в результате применения команды whatls выясняется, что вы сделали запрос только об одной команде, существует два способа получить дополнительную информацию. Во-первых, можно запустить в браузере руководство по MEL-командам, содержащее описание всех команд с примерами их применения. Во-вторых, в нижней части страницы обычно указываются родственные команды.
Глава 4 • Приемы работы в Maya
74
в
..г.».
-
fc
v",-, »•£{«!«#'•>»•
^t-.г-..Ч
. , :.„
_ь t -.(.11..^ "
'
k»
• • .
T. -1C.. 1,1». ... •.„
Лил, Щ . , «...«..-.-.„ «,
.
l,J4,,«4!
• ;IKS^
,V H,»Uf :». i-i." ">- ! -ч Вт- ,-гч -,- Т.-.-' •* -
Рис. 4.1. Результат установки флажка Echo All Commands
По правде говоря, существуют команды, не упомянутые в руководстве. В этом случае можно воспользоваться справочной системой. Для этого в диалоговом окне Script Editor (Редактор сценариев) достаточно ввести команду help, а вслед за ней — название команды, которая вас интересует, например help getAttr. Это приводит к моментальному появлению списка флагов команды. Существует и другой вариант использования команды помощи. Можно искать команды по определенному образцу, например help -list "*ebuild*". В результате появится список команд, имеющих отношение к перестройке поверхностей. Для появления комментария в строке подсказки нужно ввести параметр -rm. Если же комментарий должен появиться на полке, в строке состояния или на панели инструментов, используются параметры -рт и-ptd.
Контроль за сделанными изменениями При желании можно изменить параметры любой команды. Кроме значений по умолчанию можно вносить изменения в диапазоны значений ползунков (см. команду floatSliderGrp), в метки, в приглашения командной строки и даже в сообщения об ошибках. Через некоторое время внесение изменений в сценарии команд входит в привычку. Чем чаще вы это делаете, тем проще это делать в следующий раз. Но слиш-
Команды
75
ком усердствовать не стоит. Вы только представьте, что после установки следующей версии Maya снова потребуется вносить изменения во все файлы и снова редактировать все сценарии, поменявшиеся при переходе к новой версии. Например, у меня процесс систематического сравнения, редактирования и тестирования всех сценариев после перехода к новой версии занимает несколько часов. В нашей папке со сценариями имеется около 30 сценариев, отредактированны х тем или иным образом. Оглядываясь назад, можно пожалеть, что эти изменения появились слишком поздно. Ведь каждое из них сделало работу с Maya более удобной. Мы уверены, что по мере накопления опыта у вас появится желание модифицировать дополнительные сценарии. СОВЕТ Помещайте в модифицированные вами сценарии команд четкие комментарии, позволяющие понять, какие параметры были изменены. Это поможет внести необходимые изменения в сценарии при переходе к следующей версии Maya. Кроме того, если вы решите предоставить свои сценарии другому пользователю, комментарии помогут ему понять, какие именно изменения вы внесли.
Так как редактирование сценариев представляет собой несложную операцию, помните, что все в ваших руках и поведение Maya можно настраивать в соответствии с вашим желанием. Постепенно вы достигнете равновесной ситуации, когда число раздражающих вас проблем будет соответствовать затрачиваемым на их устранение усилиям. К счастью, по мере накопления опыта затруднений будет все меньше, и эффективность вашей работы постепенно возрастет.
Клавиатурные комбинации Другим исключительно эффективным способом повышения скорости работы является создание собственных клавиатурных комбинаций. Хотя, начав работать с Maya, вы обнаружите множество уже существующих комбинаций, они не всегда будут соответствовать возникающим перед вами задачам. Заданный по умолчанию набор клавиатурных комбинаций достаточно полезен, но не слишком специализирован. Поэтому, оценив, например, действия, которые чаще всего приходится выполнять при моделировании объектов, можно создать собственные клавиатурные комбинации, увеличив, тем самым, эффективность процесса работы над сценой. Иногда требуются клавиатурные комбинации, соответствующие командам с oi iределенными параметрами, командам с последними использовавшимися параметрами или командам вообще без параметров. Таким образом, можно создавать совершенно новые команды. Например, если вам надоело каждый раз, когда требуется сделать обычную копию объекта, щелкать на квадратике, расположенном справа от команды Duplicate (Дублировать), дабы убедиться, что параметры этой команды имеют заданные по умолчанию значения, создайте клавиатурную комбинацию для унифицированной команды дублирования. Это должна быть особая команда, потому что при использовании существующих клавиатурных комбинаций выполнение команд осуществляется с параметрами, заданными при их предыдущем выполнении. Вряд ли комуто захочется получать разные результаты при применении одной и той же команд];.!.
76
Глава 4 • Приемы работы в Maya
Дублирование может закончиться как появлением пары дюжин экземпляров, ориентированных различным образом, так и созданием одной точной копии. Все зависит от параметров команды во время ее последнего применения. В этом случае есть простое решение. Команда Duplicate (Дублировать), имеющаяся в меню, вызывает команду duplicate языка MEL с параметрами, определенными во время предыдущего использования команды Duplicate (Дублировать). В то же самое время операция обычного копирования должна осуществляться путем вызова команды duplicate без параметров.
Назначение клавиатурных комбинаций Для создания клавиатурных комбинаций, которые вам предстоит запомнить, используется диалоговое окно Hotkey Editor (Редактор клавиатурных комбинаций). Клавиатурные комбинации, которые вы не в состоянии запомнить, вряд ли имеет смысл создавать. Для начала следует ознакомиться с уже имеющимися вариантами. Они перечислены в файле hotkeySetup.mel, расположенном в папке scripts/startup. Впрочем, существует и более удобный способ. Выберите команду Window > Settings/Preferences > Hotkeys (Окно > Настройки/параметры > Клавиатурные комбинации) и в появившемся диалоговом окне щелкните на кнопке List All (Показать все). ВНИМАНИЕ Никогда не редактируйте файл hotkeySetup.mel! Любые изменения допустимы только в диалоговом окне Hotkey Editor (Редактор клавиатурных комбинаций). В этом случае значения, заданные в файле hotkeySetup.mel, заменяются новыми, не всегда остается возможность вернуться в исходное состояние.
Иногда предположения и ассоциации для новых клавиатурных комбинаций можно получить при работе с другими приложениями. Тем, кто в течение многих лет работал с программой AutoStudio от Alias]Wavefront, можно сделать свой переход к Maya как можно более безболезненным, перенеся туда все ранее используемые клавиатурные комбинации. В AutoStudio не практикуется применение одиночных клавиш, в то время как именно из них состоят заданные по умолчанию клавиатурные комбинации Maya. Поэтому переход может произойти достаточно легко. Нужно просто использовать дополнительные клавиши Alt, Ctrl и Shift в качестве основы для создания категорий и применять одни и те же модификаторы для сходных команд, чтобы найти ассоциации, которые несложно запомнить. Соответственно, как по историческим, так и по мнемоническим причинам можно связать комбинацию Alt+D с командой Duplicate (Дублировать), а комбинацию Alt+S — с командой Save File As (Сохранить файл как). Можно привести еще один пример. Для команд, связанных с управлением камерами, имеет смысл задействовать легко нажимаемую комбинацию клавиш Ctrl+Shlft, что позволяет сделать эти комбинации удобными для нажатия, например, комбинация Ctrl+Shift+Z соответствует команде Zoom (Масштабирование). Это сочетание относится к наиболее используемым. Чтобы выполнить наезд камерой, достаточно нажать клавиши Ctrl+Shift+D. Панорамирование осуществляется с помощью комбинации Ctrl+Shift+X, а для автоматического задания плоскостей отсечки незаменима комбинация Ctrl+Shift+C, которая вызывает команду viewClipPlane -acp.
Команды
77
Для обычной команды дублирования была создана клавиатурная комбинация Alt+Shift+D. Здесь клавиша Shift является дополнением к комбинации Alt+D, привычной для пользователей программы AutoStudio. Сходным образом эта клавиша была использована для остальных комбинаций, предназначенных, например, для открытия диалоговых окон с параметрами команд. ПРИМЕЧАНИЕ Открытие диалогового окна с параметрами команды — это совсем не то же самое, что ее выполнение. Сопоставить клавиатурную комбинацию можно как этим операциям по отдельности, так и им вместе. Если вам часто приходится менять параметры какой-либо команды, подумайте о клавиатурной комбинации, которая будет открывать нужное диалоговое окно.
Клавиатурные комбинации борются не только за место на клавиатуре, но и за место в вашей голове. Запоминать лучше не отдельные комбинации, а их наборы, Например, нам было достаточно легко запомнить, как осуществляется переход к окну проекции Camera (Камера), так как все комбинации, необходимые для работы с камерами, обычно начинаются с сочетания Ctrl+Shift, а слово «camera» начинается с буквы «с». Словом, различные ассоциации облегчают запоминание клавиатурных комбинаций. Какими бы полезными вы ни считали обычные или контекстные меню, клавиатурные комбинации по быстродействию подобны регистрам процессора. Сопоставляйте их операциям, которые вы выполняете чаще всего, и производительность вашего труда возрастет. ВНИМАНИЕ Не вздумайте сопоставлять деструктивным операциям легко нажимаемую клавиатурную комбинацию. Особенно это относится к сохранению файлов. Ведь эту операцию невозможно отменить! Именно поэтому не должно быть клавиатурной комбинации для команды Save (Сохранить). А для команды Delete All Geometry (Удалить все объекты) используется комбинация Alt+Shift+Ctrt, случайно нажать которую практически невозможно.
Также полезно напечатать для себя справочное пособие, которое можно просматривать время от времени, чтобы освежить свою память. Для этого желательно объединить свои клавиатурные комбинации (они находятся в файле userHotkeys.mel, расположенном в папке prefs) с заданными по умолчанию (как уже упоминалось ранее, они хранятся в файле hotkeySetup.mel, расположенном в папке $MAYA_ LOQ^TTON/scripts/startup), а затем отсортировать этот список. При этом важно выделить те стандартные комбинации, которые вы заменили собственными. Можно также сгруппировать их по выполняемым функциям. СОВЕТЗнаете ли вы о «священных» клавишах Q, W, E, R, Т и Y? При желании их тоже можно поменять. Мы это сделали, потому что клавиша R просто обязана соответствовать операции поворота (Rotate), а буква «W» вызывает ассоциации с коэффициентом масштабирования.
ПРИМЕЧАНИЕ Нельзя не отметить, что управляющие клавиши Alt, Ctrl и Shift можно использовать только в комбинации с другими клавишами. В остальном все зависит только от евс.
78
Глава 4 • Приемы работы в Maya
Клавиатурные комбинации от Марка Несмотря на призывы к вам искать свои пути, наши варианты нравятся нам гораздо больше. Итак, позвольте представить вам любимые клавиатурные комбинации одного из авторов (табл. 4.1). Таблица 4.1. Клавиатурные комбинации от Марка Инструмент
Клавиши
Ассоциации
Merge Vertices (Слить вершины)
Alt ч-'
Split Polygon (Разбить полигон)
Alt+/
Знак ' выглядит, как две точки, слившиеся в одну Знак / обозначает операцию деления
Delete Edge (Удалить ребро)
Alt+-
Знак - ассоциируется с удалением
Append to Polygon (Присоединить к полигону) Detach Curve (Разъединить кривые)
Alt+=
На клавише выше знака = находится знак + Знак % (клавиша 5 в верхнем регистре) напоминает операцию деления
Collapse Edge (Свернуть ребро)
Alt+Y
Insert Knot (Вставить узловую точку)
Alt+б
Delete History (Удалить историю)
Alt+H
Revolve (Вращать) Extrude (Выдавить)
Ctrl+0 Ctrl+б
Alt+5
Буква Y напоминает операцию свертки (два переходят в одно) Знак Л (клавиша 6 в верхнем регистре) напоминает корректорский символ вставки Разумеется, буква Н напоминает слово «history» Цифра 0 похожа на результат вращения Цифра б выглядит как результат выдавливания
Как легко заметить, большинство ассоциаций являются визуальными, то есть в их основе лежит графическое обозначение клавиш. О графических операциях принято думать образно, и именно образы являются естественным продолжением мыслительного процесса. Большинство других клавиатурных комбинаций определяются с помощью основных букв сопоставляемой команды. Например, буква «F» в комбинациях Alt+F (преобразование выделенного в грани) и Ctrl+F (выделение граней полигона) соответствует первой букве слова «Face» (грань). Последовательность в выборе комбинаций помогает при их запоминании.
Планы на будущее Назначать клавиатурные комбинации можно как уже существующим, так и создаваемым вами командам. Если вас волнует, в какой степени результаты вашего труда будут применяться другими пользователями, на других компьютерах или в другой версии Maya, нужно понимать, чем отличаются эти ситуации. Назначение клавиатурных комбинаций существующим командам происходит достаточно просто. При щелчке на кнопке Save (Сохранить) в диалоговом окне Hotkey Editor (Редактор клавиатурных комбинаций) происходит запись новой комбинации в файл userHotkeys.mel, расположенный в папке maya/prefs. Затем остается только перенести этот файл на другой компьютер или дать его другому пользователю.
Команды
СОВЕТ Если вам требуются клавиатурные комбинации на один сеанс работы с Maya, укажите их в диалоговом окне Hotkey Editor (Редактор клавиатурных комбинаций) и щелкните на кнопке Close (Закрыть), не трогая кнопку Save (Сохранить). В этом случае все нововведения исчезнут после перезагрузки Maya. Это бывает полезно, если приходится неоднократно выполнять одну или несколько MELкоманд.
С другой стороны, при сопоставлении клавиатурной комбинации недавно созданной вами команде нужно сделать ее как можно более мобильной. Для начала требуется щелкнуть на кнопке New (Создать), расположенной в правой нижней части диалогового окна Hotkey Editor (Редактор клавиатурных комбинаций), как показано на рис. 4.2. В результате появится возможность ввода информации в поля, находящиеся в нижней части этого окна.
5 Conttran Chwaoei Pettictei FfuidElfects Fnkft Soft end Rigid 8 ode) Effect*
CreateLine PolyBacklaceCuIngOn HideNUflBS SetCSppingPleresKej
Light* and Shading Torturing PartEKec» ModeSftB Panel SMuiUr» Toofi
MwVpulBtot HDQDDM Atbnn BruihTooti DitkCac U»r Marking Menw
FLI
PickNurbsCV Duple atePlaJn EdgePelhSded Picks ubdiv FecnPaihSetecl. FacePathSpil pickTerrelele SlimRende ToflgleSeomatrji foggtoCurve» VisAIGeomel
Рис. 4.2. Создание новой клавиатурной комбинации в диалоговом окне Hotkey Editor
ВО
Глава 4 • Приемы работы в Maya
Клавиатурная комбинация сопоставляется не с введенной вами строкой названия команды, а скорее с «именованной командой». Эти именованные команды создаются автоматически при назначении новой клавиатурной комбинации, сохраняются в файле userNamedCommands.mel, расположенном в папке maya/prefs, и относятся к категории User (Пользователь). Если ввести исходную MEL-команду , именованная команда будет иметь на нее ссылку (через файл userRunTimeCommands.mel). К сожалению, если вы захотите передать эту команду другому пользователю, нужно будет либо передать ему все необходимые файлы, либо непосредственно вводить MEL-код в окне редактора клавиатурных комбинаций. Так как пользователи обычно создают клавиатурные комбинации для своих собственных нужд, то для заимствования новых полезных вариантов требуется ручное редактирование нужных записей в файлах userNamedCommands.mel и userRunTimeCommands.mel, а это утомительная и чреватая ошибками работа. Намного проще при назначении клавиатурных комбинаций новым командам использовать соответствующий команде MEL-сценарий. В этом случае новая комбинация сопоставляется процедуре, описанной в сценарии. Например, с помощью следующего простого кода можно скрыть или, наоборот, сделать видимыми все источники света в окне проекции: Global proc toggleLightsO
( string StliisPanel - 'getPanel -wf"; model Editor -e -lights (! 'model Editor -q -lights SthisPaneD SthisPanel;
Этот сценарий сначала распознает окно проекции и затем меняет видимость источников света. Кстати, подобный сценарий годится для всех объектов, перечисленных в меню Show (Показать) окна проекций. Другой пользователь может применить эту команду, просто поместив файл со сценарием в папку совместного доступа и определив клавиатурную комбинацию, вызывающую процедуру toggleLights, как показано на рис. 4.3. Так как процедура имеет дело с источниками света (Lights), для комбинации Ctrl+L была использована буква «L». В этом случае другие пользователи смогут назначить созданной вами команде свои клавиатурные комбинации, и для этого им не надо будет редактировать ваш файл userNamedCommands.mel. Кроме того, вы сможете ссылаться на процедуру другими способами (например, через контекстные меню) опять же без поиска нужного кода в файле userNamedCommands.mel. ПРИМЕЧАНИЕ Обычно любая процедура запоминается только в той области видимости, в которой она была определена. Затем память освобождается. Однако повторяющиеся процедуры необходимо сохранять. Для этого их нужно определять как глобальные. Другими словами, если код, сопоставленный некой клавиатурной комбинации, может быть полезен другим или может использоваться в другом контексте, его нужно поместить в отдельный MEL-файл как глобальную процедуру.
Разумеется, в процессе работы над данной книгой мы пользовались разными компьютерами и решали разные задачи, поэтому необходимости в общих клавиа-
Команды
турных комбинациях не возникало. Но наша профессиональная деятельность вне данного проекта подтвердила ценность подобного подхода.
// togglH an/off thi display of Hunts curvti 1n ihe icilva pinal glcbil proe TDMl*i.1ahc»p f nrlng ItMiStneT . g«»j/i«1 -*fi m»«TEiinor -* -UghH (l >od«ledHor -q -lights tthtiMiwV]
Рис. 4.З. Назначение процедуре клавиатурной комбинации
Аккуратно назначайте новые клавиатурные комбинации и обязательно применяйте их в работе (помните, что если их нельзя использовать многократно, они бесполезны). Зачем тратить время на поиск команд в многочисленных меню, если можно вызвать их нажатием нескольких клавиш?
Полки Разумеется, в Maya существуют места, куда можно положить регулярно испольнуемые команды. Это полки, которые являются удобным средством группирования в одном месте наиболее популярных инструментов. В этом смысле контекстные меню, о которых мы поговорим в следующем разделе, тоже можно считать своего рода полками. Можно сделать полки для работы с наборами полигонов, для выделения объектов, для создания NURBS-поверхностей, для настройки сеток, для работы с другими категориями объектов. Сам факт разбиения полок на категории помогает упорядочить рабочий процесс. Набор полок позволяет одним-двумя щелчками мыши получить доступ к почти всем регулярно используемым командам. Например, при редактировании сетки полигонов имеет смысл открыть полку с инструментами для их обработки. При-
82
Глава 4 * Приемы работы в Maya
менение полок вместе с клавиатурными комбинациями избавляет от необходимости обращаться к многочисленным меню. Если же вам понадобится инструмент, не имеющий отношения к обработке полигонов, например Create Lattice (Создать решетку), его можно найти на другой полке. Разумеется, стратегия выбора команд для полок является вашей прерогативой, но полки удобны еще и тем, что нужные наборы инструментов располагаются прямо над окнами проекций,
Параметры команд и полки Обычно для размещения команды на полке необходимо перетащить ее из меню, нажав при этом определенную комбинацию клавиш. В операционной системе IRIX это клавиши Ctrl+Alt+Shift, в Linux — клавиши Alt+Shift, в Windows — клавиши Ctrl+Shift В Мае для этой цели требуется одновременное нажатие клавиши Option и правой кнопки мыши. В результате нужный пункт меню оказывается на полке. Если это инструмент, кнопка полки становится указателем на соответствующий пункт меню. ПРИМЕЧАНИЕ В Maya существует разделение на «инструменты» и «действия». Инструментами называются команды, требующие от пользователя ввода дальнейшей информации (например, выделения геометрии), в то время как для действий это не нужно. Впрочем, в этой книге в основном будет употребляться термин «команда» и только в особых случаях, когда указать на отличие действительно необходимо, будут фигурировать термины «инструмент» и «действие».
Однако если вы хотите, чтобы параметры элементов на полке и соответствующих пунктов в меню не зависели друг от друга, нужно воспользоваться другим методом, а именно перетащить значок с панели инструментов, нажав среднюю кнопку мыши. Обычно при этом происходит копирование текущих параметров, но впоследствии их можно изменить в диалоговом окне Tool Settings (Параметры инструмента). Это дает возможность, например, поместить рядом два инструмента CV Curve (Управляющие точки кривой), один из которых будет создавать линейные кривые, второй — трехмерные. А как же быть с командами, для которых не существует :шачка на панели инструментов? Открыв диалоговое окно Tool Settings (Параметры инструмента), например, для команды Duplicate (Дублировать), вы обнаружите, что у нее отсутствуют параметры. Предположим, что вам требуются уникальные экземпляры какого-либо действия, например, пусть на основе команды Duplicate (Дублировать) выполняются специальные действия MlrrorX (Отражение по оси X), MirrorY (Отражение по оси Y) и MirrorZ (Отражение по оси Z). Откройте диалоговое окно Shelves (Полки), щелкнув на кнопке с указывающей вниз стрелкой, расположенной слева от полок, и выбрав в появившемся меню команду Shelf Editor (Редактор полок), и вы увидите, что «положенная на полку» команда Duplicate (Дублировать) в точности выполняет процедуру duplicatePreset, обладающую множеством непонятных аргументов. Однако так как эти аргументы зависят от указанных вами параметров команды, нужно всего лишь настроить параметры требуемым образом и по очереди перетащить каждую из версий команды на полку.
Команды
83
СОВЕТ Чтобы определить источник команды или процедуры языка MEL, достаточно ввести в командной строке или в диалоговое окно Script Editor (Редактор сценариев) команду whatls. Часто это — самый быстрый способ найти MEL-процедуры, которые вам хотелось бы перекроить под свои нужды. Разумеется, не все ваши запросы будут относиться к MEL-процедурам. Если результатом выполнения команды whatls явилась команда, значит, она относится к основным MEL-командам.
Не забудьте предоставить сопроводительный текст для каждого варианта команды на полке. Для большинства элементов полки достаточно открыть диалоговое окно Shelves (Полки) и ввести нужный текст в поле Label & Tooltips (Название и всплывающая подсказка), а в некоторых случаях — и в поле Icon Name (Название значка). Однако некоторые элементы (обычно созданные с помощью MEL-команды superCtx) упрямо сопротивляются всем попыткам присвоить им название.
snelfButton -enablecommandRepeat l -enable I -width 3! -height M -manage 1 -visible 1 -label "Duplicate" -Image-overt ayi-a,bel "lil" -•-Imagel "menuicDnCdlt.xem" -style "IcoiWiorextVertlcal" -command "duplicate" shelfButton -enablecommandRepeat 1 -enable 1 -width 82 -height 54 -manage 1 -visible 1 -annotation "MlrrorX; Mirror copy the selected object CO In x" -label "MlrrcrX" -1mageCverlayL4bel "-X" -Imagel "menuiconEdlt.xprn" -style "1conAntfr*xtvert1cal" -command "dupllcataPresettXl.l,0,0,0,0,0,0,0,0,0,0,-1,1,1)" shelfBurton -enablecommindRepeat 1 -enable 1 -width 82 -height 54 -manage 1 -visible 1 -annotation "MlrrorY: Mirror copy the selected ohjactCs? 1n V" -label "Mlrrory" -1m»geover1ayLibil "-v" -Imagel "menuIcDnEdlt.xpm" -style "IconAndrextvertlcal" -command "dupl1c«epr*serCl, 1,1,0,0,0,0,0,0,0,0,0,0,1,-1,1)" shelfButton -enableCommandRepeat 1 -enable 1 -width 82 -height 54 -manage l -visible 1 -annotation "Mlrrorz: Mirror copy the selected obJectCs} In z' -label "Mlrrorz" -Imageover1ayLabel "-2" -Imagel "mentaconEdlt.xpm" -style "Icorwidrextvertleal" -command "dupHcatepresetCL,1,1,0,0,0,0,0.0,0,0,0,0,1,1,-ID"
Рис. 4.4. Настройка элементов полки
Глава 4 • Приемы работы в Maya
84
Если элемент описывается в файле полки как shelfButton (это относится к большинству элементов), его всплывающую подсказку можно поменять с помощью аргумента-annotation. Интерактивного способа изменения подсказок не существует, но можно легко отредактировать строку примечания в файле полки, как показано на рис. 4.4. Естественно, текст всплывающей подсказки команды MirrorX (Отражение по оси X) должен отличаться от текста команды Duplicate (Дублировать). У прямого редактирования файла полки есть еще одно преимущество. Вы получаете возможность включать в названия специальные символы, которые нельзя ввести в интерактивном режиме. То есть вам не удастся обычным способом присвоить кнопке на полке название -X или 1:1, но это легко можно сделать в текстовом редакторе. ПРИМЕЧАНИЕ Файлы полок хранятся в папке maya/5.Q/prefs/shelves и имеют имена вида зЬе!Г_Название.те1.
Текстовый режим полок Итак, какой бы сценарий вы ни перетащили на полку, впоследствии можно отредактировать связанные с ним текстовые поля и даже значок. Но существуют и дополнительные возможности. В первых версиях Maya поддерживался текстовый режим полок, то есть на полках можно было размещать не только значки, но и слова. И хотя соответствующей команды меню, подобной показанной на рис. 4.5, в текущей версии Maya нет, существует возможность перейти в этот режим, отредактировав пару файлов. Для вашего удобства мы поместили эти файлы (ShelfEditorDialog.rnel и ShelfStyle.mel) в папку Chapters/Chapter04 прилагаемого к книге компакт-диска. Скопируйте их в папку 5.0/scripts/startup и перезапустите Maya.
Рис. 4.5. Перевод полок в текстовый режим
Таким образом, если вы, как и авторы, считаете, что количество команд намного превышает количество вразумительных значков, используйте возможности ан-
Команды
85
глийского (или русского) языка, чтобы различать, например, операции вращения на 180° вокруг оси Z и вращения на 360° вокруг оси X. Впрочем, если вы предпочитаете самостоятельно рисовать значки для новых команд, нет никакой причины переходить в текстовый режим. Хотя авторы предпочитают текстовый режим, иллюстрации в этой книге были сделаны в режиме показа значков.
Контекстные меню Несмотря на то что авторы не жалуют средства оперативного доступа к командам, возможности контекстных меню впечатляют. В Maya существует ряд способов доступа к контекстным меню, в число которых относится нажатие и удержание клавиши пробела. ПРИМЕЧАНИЕ Авторы считают контекстные меню излишними, так как при раскрытии они занимают много места, а все содержащиеся в них команды можно найти в других меню (например, в главном). Часто применяемые команды удобней размещать на полках или связывать с клавиатурными комбинациями.
При работе с контекстными меню полезно использовать режим Center Zone Only (Только центральная зона), позволяющий настроить меню для всех кнопок мыши, как это сделано в привычной авторам программе AutoStudio. Хотя потенциально можно создать 15 контекстных меню (3 кнопки мыши плюс 5 зон на экране), доступ к которым осуществляется через клавишу пробела, обычно вполне достаточно кнопок мыши. Чем плохи зоны? Авторы обнаружили, что слишком часто ошибаются, выбирая команду, например, в северной зоне, в то время как нужно было делать выбор в контекстном меню верхней части центральной зоны. Сокращение числа подобных меню позволило избавиться от частых ошибок. Тем более что никакой нужды в дюжине дополнительных меню обычно нет. Возложив основную нагрузку на полки и клавиатурные комбинации, авторы, тем не менее, зарезервировали контекстные меню за часто выполняемыми операциями. В этом случае набор манипуляций по выбору нужной команды через короткое время становится автоматическим. Чтобы удовлетворить рациональные натуры, можно создать контекстные меню различного назначения. В левой зоне — для выделения объектов, в центральной — для преобразований, в правой — для управления камерой. Чтобы порадовать взор и укрепить двигательную память (ключевой ингредиент манипуляций с контекстными меню), команды отмены можно разместить в северной зоне, а общие команды — в центральной. Марк, например, переделал контекстные меню в соответствии со своим стилем работы, но подобные действия потребовали определения MEL-команд, вызывающих выбор маски и режима выделения, а также активизацию выбранной команды. Благодаря хорошо спланированным командам выделения в контекстном мен ю и кнопкам на полке Pick (Выделение), применяемым для менее общих случаев, у Марка практически не возникает необходимости пользоваться маской выделения в строке состояния.
86
Глава 4 • Приемы работы в Maya
ПРИМЕЧАНИЕ В Maya существуют не только режимы выделения иерархий, компонентов и объектов, но и смешанный режим, в котором допустимо одновременно выделять элементы разного типа. Вот как могут выглядеть MEL-аналоги команд контекстного меню для выделения поверхностей в этом режиме: selectMode -p; selectType -ns 1; setToolTo $gSelect.
Конечным результатом редактирования методов выделения был выбор наиболее удобного способа работы. Вряд ли вы выберете тот же самый способ, что и Марк, но приспособляемость Maya позволяет любому пользователю настроить интерфейс под себя.
Пользовательский интерфейс Мы решили не только создать проект «Место для парковки», но и позволить тысячам других пользователей Maya, образно выражаясь, посмотреть нам через плечо. Чтобы не слишком сильно их дезориентировать, было решено по ходу проекта сохранить число очевидных вмешательств в интерфейс программы на минимальном уровне. Однако чтобы дополнительно проинформировать пользователей о невероятной гибкости Maya, в этом разделе мы поговорим о тех изменениях в интерфейсе, которые могут оказаться полезными.
Элементы пользовательского интерфейса Окно программы Maya делится на ряд основных секций (строка подсказки, полки, строка состояния и т. п.), которые можно скрывать и показывать, менять местами и даже полностью переопределять.
Видимость элементов интерфейса Для изменения видимости элементов интерфейса достаточно установить или снять флажок рядом с соответствующим элементом среди перечисленных в подменю UI Elements (Элементы интерфейса) меню Display (Отображение). В этом же подменю находятся команды Hide UI Elements (Скрыть элементы интерфейса) и Restore UI Elements (Восстановить элементы интерфейса), позволяющие соответственно скрыть или восстановить на прежних местах все элементы интерфейса (рис. 4.6). Впрочем, использовать эти команды нужно крайне аккуратно. Когда вы убираете элементы интерфейса с помощью команды Hide UI Elements (Скрыть элементы интерфейса), Maya запоминает, какие именно элементы были на экране, чтобы показать их в случае выбора команды Restore UI Elements (Восстановить элементы интерфейса). Если вы скрыли элементы интерфейса только один раз, их восстановление произойдет без проблем, однако если выбрать команду Hide UI Elements (Скрыть элементы интерфейса) два раза подряд, показать скрытые элементы можно будет, только устанавливая соответствующие флажки в подменю UI Elements (Элементы интерфейса). Разумеется, при наличии сценария, делающего видимыми нужные вам элементы интерфейса, беспокоиться не о чем. Команды, перечисленные в показанной ниже MEL-процедуре, можно комбинировать по вашему вкусу, делая видимыми и скрывая различные элементы:
Пользовательский интерфейс
117
Рис. 4.6. Подменю UI Elements меню Display global proc UI_Off() setStatusLineVislble 0; setShelfVisible 0; setPlaybackRangeVislble 0: setCorrmandLlneVisible 0; setHelpLlneVlsible 0; setToolboxVislble 0; setAttributeEditorVisible 0; setToolSettingsVisible 0; setChannelsLayersVislble 0;
Поместив такой сценарий на полку или в контекстное меню, вы сможете одни м щелчком мыши получить доступ ко всем сочетаниям элементов интерфейса, которые вам обычно требуются, — от минимального набора, достаточного для моделирования, до полного комплекта, предназначенного для работы над анимацией. При создании моделей рекомендуем использовать несколько подобных этому сценариев, располагая их на полке вместе с остальными сценариями, связанными с элементами интерфейса.
Расположение элементов интерфейса Существует возможность не только показывать или скрывать элементы интерфейса, но и менять их местами. Осталось понять, зачем это нужно? Ну, во-первых, иногда это требуется для удобства. Если вы часто работаете с полками, может оказаться, что раз за разом глядеть вверх, чтобы увидеть нужный ЗБ ачок, довольно утомительно. Поэтому можно опустить полки пониже. Кроме того, иногда имеет смысл разместить элементы со сходной информацией ближе друг к другу. При наведении указателя мыши на кнопку полки в строке подсказки появляется информация об этой кнопке. К сожалению, по умолчанию полки расположены в верхней части экрана, а строка подсказки — в нижней. Переместив полки вниз, вы расположите эти элементы друг рядом с другом. Обратите внимание, что само по себе изменение положения элементов на экране не сказывается на порядке следования их названий в подменю UI Elements (Элементы ин-
88
Глава 4 • Приемы работы в Maya
терфейса) меню Display (Отображение). Чтобы изменить порядок следования названий в меню, нужно отредактировать файл buildPreferenceMenu.mel. Также имеет смысл размещать элементы в соответствии с частотой их использования. Например, так как Марк практически никогда не задает маски или режимы выделения стандартным образом, а для привязок применяет клавиатурные комбинации, строка состояния требуется ему только для проверки режима привязки. Соответственно, ее можно поместить куда-нибудь, где на нее удобно смотреть. Для изменения порядка следования элементов нужно отредактировать сценарий initMainWindow.mel. В нижней части этого файла перечислены связанные элементы. Благодаря блокам кода для каждого элемента, описывающим их связь друг с другом, разобраться в MEL-коде достаточно легко. Например, чтобы поменять местами ползунок таймера анимации и шкалу диапазонов, нужно отредактировать следующий код: -attachNone
SmayaLi ve "top"
-attachForm -attachForm
SmayaLi ve "1 eft" SmayaLi ve "right"
0 0
-attachControl JmayciLive "bottom" 0 StlmeSlider -attachNone -attachForm -attachForm
StimeSlider "top" StimeSlider "left" 0 StimeSlider "right" 0
-attachControl StimeSlider
"bottom" 0 $playbackRange
-attachNone -attachForm -attachForm
$playbackRange "top" $p1aybackRange "left" $playbackRange "right"
-attachControl
$playbackRange
D 0
"bottom" 0 ScommandLine
Достаточно поменять блоки друг с другом местами, повторно создан ассоциации. В итоге должны получиться следующие строки: -attachNone -attachForm -attachForm
SmayaLive "top" SmayaLive "1 eft" $mayaLive "right"
-attachControl
SmayaLive
-attachNone -attachForm
$playbackRange "top" tplaybackRange "left"
-attachForm -attachControl
$playbackRange SplaybackRange
-attachNone -attachForm -attachForm -attachControl
StimeSlider "top" $timeS1ider "left" 0 $timeSlider "right" 0 StimeSlider "bottom" 0 ScommandLine
С 0
"bottom" 0 $playbackRange
0
"right" 0 "bottom" 0 StimeSlider
Сохраните файл и перезагрузите Maya. Теперь ползунок таймера анимации будет располагаться над шкалой диапазонов. Так как положение элементов интерфейса определяется в момент загрузки программы, ее повторный запуск обязателен. Разумеется, если вам недостаточно этих простых изменений, можно полностью перестроить интерфейс путем задания переменной окружения MAYA_OVER-
Окна проекции
89
RIDEJJI. Впрочем, инструкция по созданию пользовательского интерфейса «с нуля» выходит за рамки темы данной книги. Еще раз напоминаем, что хотя поменять положение элементов интерфейса Maya не сложно, а иногда и полезно, но по причинам, описанным ранее, при выполнении проекта «Место для парковки» будет использован стандартный интерфейс Maya.
Меню Работа опытного пользователя в Maya обычно заключается в нажатии клавиш, выборе команд в контекстных меню, щелчках на кнопках полок и перемещениях указателя мыши. Основными меню приходится пользоваться только в нестандартных ситуациях. Но даже Б этом случае доступ к нужным командам не должен быть сложным. Как и остальные элементы интерфейса, меню можно редактировать, потому что они тоже написаны на языке MEL, Код каждого меню содержится в отдельном файле. Любой файл может быть скопирован в вашу папку со сценариями и изменен в соответствии с вашими желаниями. Хотя каждое такое изменение затруднит переход к новой версии Maya, время от времени имеет смысл это делать, чтобы убрать ненужные вам команды. Для начала можно изменить порядок следования команд, переместив чаще всгго используемые команды в верхнюю часть меню. Также можно выделить их в отдельное подменю, расположив его на верхнем уровне иерархии меню. Существует даже возможность переносить пункты из одного меню в другое. Например, можно перенести команду Deform (Деформация) из меню Animation (Анимация) в меню Modeling (Моделирование), в котором эта команда может быть очень полезна. Даже панель инструментов существует в виде отдельного файла toolbox.mel и может быть изменена. Однако это делается в исключительных случаях, например после переназначения команд, соответствующих клавишам Q, W, E, R, Т и Y. Меню не являются неприкосновенными, поэтому не стоит бояться маленького «хирургического вмешательства», позволяющего поместить ваши любимые инструменты в наиболее удобное положение. Лежащий в их основе MEL-сценарий достаточно прост и обычно одному меню соответствует один файл, расположенный в папке scripts/startup или scripts/other. Еще раз напоминаем, что для редактирования его нужно скопировать в вашу локальную папку со сценариями. И как обычно для устранения этих модификаций достаточно удалить отредактированный файл и перезагрузить Maya. По мере работы вы самостоятельно придете к необходимости тех или иных изме нений. Если доступ к большинству команд вы получаете с помощью меню, описанные в этом разделе приемы, вероятно, будут вам более интересны, чем пользователям, предпочитающими клавиатурные комбинации, полки и контекстные меню. Экономьте ваше время, организуя рабочее пространства удобным вам образом.
Окна проекции Вместе с Maya вам предстоит провести бесчисленные часы в попытках настроит!, камеры таким образом, чтобы они показывали нужную вам сцену. Так как визу альные представления являются важной частью работы с Maya, повышение про изводительности в этой области окажет выгодное влияние на весь процесс моде лирования. Рассмотрим несколько способов управления окнами проекции.
Глава 4 • Приемы работы в Maya
90
Увеличение Любой пользователь, глядя на сцену, хочет видеть ее как можно лучше, а не тратить время, пытаясь разглядеть нужные объекты. Для начала нужно развернуть окно проекции во весь экран. Авторы делают это практически всегда, предпочитая работу в единственном окне проекции стандартному четырехоконному представлению. Для облегчения перехода от одного окна к другому можно настроить клавиши от F5 до F8 таким образом, чтобы при нажатии одной из них разворачивалось нужное окно: Тор (Вид сверху), Front (Вид спереди), Side (Вид сбоку), Perspective (Перспектива). После этого для перехода от одной проекции к другой теперь достаточно будет нажатия всего одной клавиши, Следует также помнить о положении камеры в окнах ортографических и центральных проекций. От этого зависит, например, настройка плоскостей отсечки.
Установка границ Для задания плоскостей отсечки нужно знать положение камеры. Для этого требуется выбрать команду Select Camera (Выделить камеру) в меню View (Вид) окна проекции (разумеется, у авторов для этой цели существует клавиатурная комбинация). В окне ортографическои проекции нужно узнать смещение камеры относительно начала координат вдоль оси, перпендикулярной наблюдению. Например, для окна проекции Side (Вид сбоку) это будет ось X. Не имеет смысла усложнять процесс расчета плоскостей отсечки, поэтому в качестве значения по умолчанию берется 100 или любое другое круглое число.
IV
(чигш
Ъ*.*-
S,
,',
.".'
"•"
'-"-
>"-.'
'>"-
Г*™-
Рис. 4.7. Задание плоскостей отсечки в форме атрибутов, допускающие создание ключей
Управление файлами
91
Задание плоскостей отсечки обычно требует открытия диалогового окна Attribute Editor (Редактор атрибутов). Однако после добавления нужных значений в список атрибутов, допускающих создание ключей, это может быть легко проделано в окне каналов. Подобное добавление можно вручную осуществить в диалоговом окне Channel Control (Управление каналами), а можно воспользоваться небольшим MELсценарием: setAttr -k on "topShape.nearClipPlane": setAttr -k on "topShape.farClipPlane";
После этого для задания плоскостей отсечки достаточно просто выделить камеру и ввести значения в поля Near Clip Plane (Ближняя плоскость отсечки) и Far Clip Plane (Дальняя плоскость отсечки) окна каналов, как показано на рис. 4.7. Задание плоскостей отсечки особенно важно при работе с неверно сделанными моделями, которым нужно придать правильную форму. Так как камера смещена на рлсстояние, выраженное круглым числом, легко вычислить величину ближней и дальней плоскостей отсечки, необходимых для получения среза нужного фрагмента модели.
Центрирование камеры Ориентируя камеру нужным образом, важно сохранять ее направление на определенную точку. В процессе моделирования можно использовать следующий способ просмотра объекта в окне проекции Perspective (Перспектива). 1. Устанавливается примерно такое же, как у обычного объектива, поле зрения камеры (то есть примерно 45°). 2. Регулируется расстояние от камеры до модели таким образом, чтобы модель имела максимально возможные размеры в границах окна проекции. 3. Выделяется нужный объект. 4. Применяется операция Look at Selection (Фокусировка на выделенном). После этого происходит настройка поля зрения с помощью команд Tumble (Переворот), Track (Сопровождение), Zoom (Масштабирование) и Look at (Фокусировка). Например, можно увеличить масштаб, выполнить нужные действия и затем нажать клавишу, которая возвращает проекцию в первоначальное состояние. В этом случае операция Dolly (Наезд) требуется очень редко, что очень хорошо, так как остается незатронутым соотношение между плоскостями отсечки. Кроме того, с точки наблюдения не теряется представление о масштабе и пропорциях. Если же постепенные изменения состояния камеры приводят к дезориентации наблюдателя, можно возвратиться к предыдущей процедуре и снова произвести настройку. Работа в ортографических проекциях происходит таким же способом, просто при этом вам не приходится иметь дело с переворотами и полем зрения. Особо амбициозные пользователи могут применить команду camera для определения заданного по умолчанию положения камеры. Наконец, можно просто выбрать команду Default Home (Вернуть на исходную точку) в меню View (Вид) окна проекции, чтобы камера вернулась на место.
Управление файлами При выполнении проектов крайне важно систематизировать порядок сохранения информации. В противном случае вы рискуете потерять время на поиск различ-
92
Глава 4 • Приемы работы в Maya
ных фрагментов проекта, ставя под угрозу само его выполнение. Хорошо устроенная система хранения информации гарантирует спокойную работу и минимум неприятных сюрпризов. Для проекта «Место для парковки» нам приходилось объединять результаты труда трех пользователей и превращать их в последовательности фрагментов. Переход данных из одних рук в другие должен быть надежным и последовательным.
Проекты Сначала необходимо принять решение о структуре проекта. Так как анимация включает несколько крайне сложных моделей, построение каждой из них было вынесено в отдельный проект. Названия для файлов проектов были выбраны в соответствии с названиями моделей — ParkingMeter, FireHydrant, Spot и т. п. В рамках каждого из этих проектов осуществлялась работа над деталями моделей, материалов и анимации определенного объекта. Затем была произведена компоновка, анимация, освещение и, наконец, визуализация главного проекта, хранящегося в файле ParkingSpot
Именование файлов Для работы мы выработали свою систему именования файлов. Чтобы избавиться от необходимости сортировать файлы со случайными именами, пытаясь отличить промежуточные варианты от окончательных версий, было решено пользоваться предсказуемыми именами. Для минимизации усилий общий стандарт именования файлов в Maya был приспособлен для нужд нашего проекта. Сложно переоценить важность последовательного сохранения результатов своего труда. Приложение Maya достаточно сложное, а все мы знаем, что такие программы могут зависнуть в процессе работы. Кроме того, вы можете обнаружить, что зашли в тупик. В этом случае нужно вернуться на один из предыдущих этапов. Наша система именования файлов замечательно упрощает эти действия. О Каждая модель создается в рамках своего проекта, например, в проекте Fire• Hydrant. О Промежуточным файлам внутри проектов присваивается сокращенное имя проекта и порядковый номер, например, FH3. о Временным файлам, сохраняемым с возрастающими числовыми расширениями, присваиваются имена от tmpl до tmp9. Затем эти имена используются повторно. О Важным файлам присваиваются «говорящие» имена, например, BeforeDeforming (перед деформацией). О Окончательная версия называется в соответствии с целью проекта, например, FireHydrant (пожарный гидрант). О Если окончательная версия файла была подвергнута редактированию, к имени файла присоединяется номер версии, например, FireHydrant.l. Отредактированному файлу присваивается название окончательной версии — в нашем случае FireHydrant.
Заключение
93
Именно таким способом именовались все модели проекта «Место для парковки» и все фрагменты. После завершения работы над одной моделью (с ее полной анимацией) мы знали, что можно удалить все файлы с названием tmp. Ведь ключевые файлы и окончательные результаты были ясно идентифицированы. В случае с фрагментами (или с любыми моделями, части которых создавались по отдельности) им присваивались имена вида sltmpl, sltmp2 и т. п. (чтобы не путать их с временными файлами). Файлы, содержащие ключевые моменты моделирования, назывались sl.l, si.2 и т. п. Окончательные варианты фрагментов имели имена shotl, shot2 и т. п. Кроме того, мы сохраняли свою работу в формате ASCII, а не в виде двоичных файлов. Последние, конечно, помогают экономить место на диске, но они недоступны для редактирования. Очевидным преимуществом ASCII-файлов являете я возможность вносить в них исправления в текстовом редакторе. ВНИМАНИЕСохраняйте ваши файлы в формате ACSII (с расширением .та), а не в двоичном формате (с расширением .mb). Ведь первые могут быть восстановлены в случае порчи, а вторые — нет. Не стоит рисковать результатами своего труда, сохраняя их в двоичном формате!
Наличие плана для проекта в целом и для входящих в него файлов позволило нам работать спокойно, зная, что у нас есть место для всего, что может понадобиться, и все это окажется на своем месте. Не стоит поддаваться порыву сохранить файл с первым попавшимся именем, смысл которого месяц спустя никто не поймет. Нам сразу было ясно, какие файлы важны, как назвать следующий файл и какие файлы должны попасть на компакт-диск, предназначенный для этой книги,
Заключение Интерфейс Maya допускает настройку, поэтому тщательно продумайте свою работу и определите способы повышения ее эффективности. Это может быть как полная перестройка пользовательского интерфейса, так и обычное создание кла виатурных комбинаций для чаще всего применяемых команд. Разумеется, нам было бы приятно, если бы вы предпочли работать гак, как ра ботаем мы, но вы должны определить собственные предпочтения и ведущий к ним путь. Небольшое неудобство добавляет всего пару секунд лишней работы на каждом шаге, но если вам приходится сталкиваться с этим изо дня в день, потери времени оказываются вполне ощутимыми, не говоря уж об испорченных нервах. Потратьте время на изучение своих привычек и вычленение повторяющихся задач. Лучше потратить день или два на освоение новой версии Maya, чем терять недели на отшлифовку рутинных операций. Созданный вами набор клавиатурных комбинаций может быть далеко не полным, а пользовательский интерфейс никогда не будет полностью оптимальным. Но, обращая внимание на эти моменты, вы повысите продуктивность своей работы и сделаете ее комфортной.
5
Язык MEL
Язык MEL (Maya Embedded Language - встроенный язык Maya) дает возможность непосредственного выполнения любой команды Maya. В действительности все меню и окна в Maya, как и остальные элементы пользовательского интерфейса, написаны именно на этом языке. Соответственно, введя нужную MEL-команду, можно выполнить любую команду меню. Все сценарии, запускаемые через меню, можно ввести непосредственно в диалоговом окне Script Editor (Редактор сценариев). Короче говоря, язык MEL позволяет напрямую послать сообщение с инструкцией для выполнения. В этом языке могут использоваться циклы и условия, а также функции. Последние в рамках принятой в MEL терминологии обычно называют процедурами. В этой главе мы поговорим на следующие темы: О О О О О О
назначение и порядок использования языка MEL; основные сведения о языке MEL; диалоговое окно Script Editor (Редактор сценариев) и внешние редакторы; написание первого сценария; аргументы, массивы, циклы, управляющие структуры и типы данных; ссылки на дополнительные ресурсы,
Назначение и порядок использования языка MEL Язык MEL позволяет выполнить в Maya практически любую операцию. Он применяется для автоматизации рутинных и повторяющихся задач. Нужно отметить также тот факт, что хорошо написанный сценарий никогда не совершит ошибки, которую может сделать человек, например, в процессе сотого по счету выделения и удаления пяти вершин одного и того же полигона. На языке MEL можно написать все, от простейшего графического интерфейса для создания персонажей до сложного алгоритма, применимого в любой «производственной» области Maya, от моделирования и анимации до динамики частиц, эффектов и визуализации. С его
Назначение и порядок использования языка MEL
95
помощью можно даже осуществлять ввод-вывод файлов, то есть записывать файлы на жесткий диск или передавать их в сеть и читать их. Отсюда следует возможность создавать и читать системный журнал, а также заниматься пакетной визуализацией в сети. Язык MEL позволяет импортировать и экспортировать файлы, сохранять их, выполнять и даже передавать аргументы командной строки во внешние программы. Все эти функции легко доступны, поэтому язык MEL можно использовать для любых действий, требующих передачи данных между Maya и остальными частями вашего производственного конвейера, а также для автоматизации промежуточных этапов работы. Обычно MEL используется техническим директором проекта для автоматизации повторяющихся или чересчур сложных операций, а также задач, выполнение которых требует точного алгоритма. Результат воплощается в небольших сценариях, которые легко могут быть запущены любым пользователем сети. Если возможностей языка MEL недостаточно (например, MEL не позволяет написать собственный деформатор), в Maya существует прикладной программный интерфейс, позволяющий создавать подключаемые модули. После создания и компиляции они размещаются в сети и динамически загружаются в Maya с помощью MEL. Именно таким способом реализованы модули Cloth (Работа с тканями) и Live (Живая камера). По мере чтения этой главы и освоения языка MEL помните следующее: О язык MEL достаточно прост и забавен; О чем лучше вы разбираетесь в Maya, тем полнее вы знаете MEL (обратное также верно). Язык MEL не является языком программирования в полном смысле этого слова. Он не предназначался для замены уже существующих языков, которые прекрасно работают на своем месте, имеют развитый код и в них вложены знания многих поколений пользователей. Язык MEL изначально разрабатывался для Maya. Он не зависит от платформы, на которой вы работаете. Хотя в нем существуют команды, присущие только UNIX или только Windows, по большей части, если Maya работает на какой-либо платформе, значит, там будут работать и MEL-сценарии. ПРИМЕЧАНИЕ Любому человеку с опытом программирования на С или C++, а также с опытом написания сценариев для UNIX, Csh или Perl без сомнения будет проще разобраться в языке MEL Если у вас нет подобного опыта, но есть знакомые специалисты, они, скорее всего, смогут ответить на основные вопросы. Кроме того, язык MEL намного проще любого из вышеупомянутых языков. Он был разработан, чтобы им могли пользоваться и программисты, и художники, причем так, чтобы тем и другим не приходилось осваивать много дополнительной информации. Первым вряд ли будут интересны подробности устройства Maya и способы доступа к командам через пользовательский интерфейс, затс они с удовольствием начнут писать понятные и эффективные сценарии. Художники же лучше осведомлены о том, с помощью каких команд выполняются определенные действия, но плохо представляют программную сторону вопроса. То есть уровень базовых знаний у них примерно одинаков. К сожалению, язык MEL не является объектно-ориентированным и не поддерживает пользовательские типы данных. С другой стороны, именно благодаря этому его достаточно легко освоить, получив в свои руки мощный инструмент для работы в Maya.
96
Глава 5 - Язык MEL
СОВЕТ Если вы раньше никогда не занимались программированием, первое знакомство с языком MEL может оказаться слегка обескураживающим. Не стоит отчаиваться! Для понимания основ этого языка вовсе не нужен опыт в программировании, хотя наличие знаний в этой области не повредит. Если вы несколько растерялись, наверное, имеет смысл приобрести книгу по языку С, в которой описываются принципы разработки и написания программ. Это будет полезно для понимания методов программирования и специальных терминов, а также поможет в будущем при написании сценариев.
Основные сведения о языке MEL MEL представляет собой построчно интерпретируемый язык сценариев. Его синтаксис сравним с синтаксисом таких языков, как С и Perl. Этот несложный для изучения язык дает полный контроль над интерфейсом Maya, включая диалоговые окна и элементы управления. Кроме того, вы можете создавать и выполнять ваши собственные сценарии и процедуры. Язык MEL представляет собой нисходящий, функционально-ориентированный, процедурный, интерпретируемый язык. Каждая MEL-процедура должна решать одну задачу и возвращать полученный результат в следующую функцию, или процедуру, и так до завершения сценария. В этом языке существует единая система понятий. В нем не поддерживаются пользовательские типы данных, объекты, классы, методы и шаблоны. Не поддерживаются даже ссылки и невозможна передача параметров по ссылке. Управление памятью целиком берет на себя Maya. Все массивы переменных создаются автоматически и удаляются из памяти после того, как функция покидает область видимости. Все понятия MEL взяты из других языков программирования, включая 2-размерные, 3-размерные и строковые типы данных, глобальные и локальные переменные, управляющие структуры, выражения, условия, ветвления, циклы, области видимости переменных, рекурсию и, конечно, необходимость указания типа возвращаемого функцией значения. Существуют сотни встроенных MEL-команд для таких операций, как обработка строк, математические расчеты, ввод и вывод файлов, поиск ошибок, а также множество процедур, присущих исключительно Maya. Некоторые понятия, такие как триггеры и события, использующие команды scriptJob и scriptNode, описаны в приложении А.
Командная строка и редактор сценариев В Maya существует внутренний редактор для написания и отладки MEL-сценариев, который называется Script Editor (Редактор сценариев). Его вызов осуществляется командой Window > General Editors > Script Editor (Окно i> Редакторы общего назначения > Редактор сценариев), как показано на рис. 5.1. Перед тем как приступить к написанию сценариев, убедитесь в наличии флажка рядом с командой Command Line (Командная строка) в подменю UI Elements (Элементы интерфейса) меню Display (Отображение), как показано, на рис. 5.2.
Командная строка и редактор сценариев
Рис 5.1. Вызов редактора сценариев
Рис. 5.2. Для доступа к командной строке установите флажок рядом с командой Command Line
Командная строка, показанная на рис. 5.3, полезна при написании сценариев, так как позволяет непосредственно вводить MEL-команды (в левом поле) и сразу видеть результаты их выполнения (в правом поле).
98
Глава 5 • Язык MEL
Рис. 5.3. Доступ к редактору сценариев можно получить, щелкнув на кнопке Script Editor, расположенной справа от командной строки
При выведенной на экран командной строке вызов диалогового окна Script Editor (Редактор сценариев) многократно упрощается — для этого достаточно щелкнуть на находящейся справа от нее кнопке Script Editor (Редактор сценариев). Существует еще один способ открытия диалогового окна Script Editor (Редактор сценариев), который мы рассмотрим в следующем упражнении. Упражнение 5.1. Ввод MEL-конанд и запуск редактора сценариев 1. Убедитесь, что командная строка выведена на экран, как было описано выше. 2. Если у вас уже открыто диалоговое окно Script Editor (Редактор сценариев), закройте его, 3. Введите в левое поле командной строки команду ScriptEditor. Помните, что MEL, как и любой язык сценариев, чувствителен к регистру букв. Что же происходит с Maya, когда вы вводите команду вызова диалогового окна Script Editor (Редактор сценариев)? После первой загрузки Maya в память в результате запуска файла maya.exe начинает работать сценарий, который интерпретирует команду ScriptEditor как заданную по умолчанию команду runTimeCommand. Эта команда служит всего лишь для вызова процедуры showWindow и передачи ей в качестве аргумента глобальной переменной $gCom ma ndWindow, которая содержит указание на место хранения в памяти диалогового окна Script Editor (Редактор сценариев). Значение этой переменной присваивается во время создания указанного элемента интерфейса, когда приложение Maya инициализируется и загружается в память компьютера. Имя диалогового окна хранится в глобальной переменной, которая является полностью доступной для других сценариев. Такой подход позволяет избежать конфликта имен. Если другому элементу интерфейса будет назначено имя, которое уже присвоено диалоговому окну Script Editor (Редактор сценариев), в Maya все равно будет использоваться корректное имя, так как оно при загрузке возвращается в исходную глобальную переменную. А если бы для задания имени в сценарии использовалась фиксированная строка, диалоговое окно Script Editor (Редактор сценариев), а вероятно и все приложение перестали бы работать. Это хороший пример, иллюстрирующий концепцию глобальных и локальных переменных (а также понятие области видимости переменных, о котором мы поговорим немного позже). Для начала давайте зададим значение глобальной переменной $gCommandWindow, введя в командную строку следующую команду: print SgCommandWindow;
Вы увидите, как в правой части командной строки и в верхней части диалогового окна Script Editor (Редактор сценариев) появится такая строка: CommandWi ndow
Командная строка и редактор сценариев
99
Именно на эту строку ссылается переменная $gComm and Window, поскольку в файле initial Layout, mel, который одним из первых загружается при старте Maya, имеется описание переменной и следующее присваивание: global string SgComiandWindow - "ComnandWIndow";
Имейте в виду, что глобальные переменные допускают редактирование в процессе работы. Но если назначить рассматриваемой переменной новое значение, например, выполнив показанную ниже команду, вы прервете текущий сеанс Maya, в результате у вас возникнут проблемы с открытием диалогового окна Script Editor (Редактор сценариев); JgCommandWindow - "foobar";
Это наиболее важная причина, по которой не стоит использовать глобальные переменные. Исключением являются случаи, подобные упомянутому выше. ПРИМЕЧАНИЕ Часто для написания MEL-сценариев применяется внешний редактор. Многие пользователи применяют такие редакторы, как Emacs, VIM или Nedit. Вы тоже можете выбрать редактор по своему вкусу. Довольно часто можно встретить программистов, пишущих MEL-сценарии в приложении Visual Studio, или художников, творящих в программе Notepad. Авторы предпочитают редактор UltraEdit благодаря наличию в нем удобных функций автоэавершения (для этого достаточно нажать комбинацию клавиш Ctrl-f Пробел), выделения элементов синтаксиса, замечательных макросов, возможности поиска и замены и многого другого. Если вы пока еще не определились с выбором текстового редактора, рекомендуем попробовать именно UltraEdit. На прилагаемом к книге компакт-диске имеется файл Wordfile.txt, используемый для синтаксического выделения в этом редакторе.
СОВЕТ Использование внешнего редактора обычно приводит к созданию более понятного кода с меньшим количеством ошибок, кроме того, этот процесс занимает меньше времени. Почему? Дело в том, что при написании кода в редакторе сценариев элементы синтаксиса не выделяются, к тому же возможна отмена только одной (последней) операции. Впрочем, этот редактор замечательно подходит дли тестирования и отладки уже готового сценария. То есть наиболее рационально — написать сценарий в вашем любимом редакторе, а затем для тестирования и отладки перенести его в диалоговое окно Script Editor (Редактор сценариев) с помощью команды Source Script (Источник сценария).
Использование редактора сценариев После написания MEL-сценария и сохранения его на диске нужно указать про грамме, где он находится. Это делается по двум причинам: О при этом происходит проверка кода на наличие синтаксических и логических ошибок; О процедуру с вашим сценарием нужно загрузить в память, только после этого сценарий можно будет вызвать из Maya по его имени. Указывая на источник сценария в диалоговом окне Script Editor (Редактор сценариев), вы на самом деле выполняете содержащийся в нем код. Открыв же сценарий в этом диалоговом окне, вы просто увидите текстовый файл. Но имейте в виду, что если за описанием переменных в файле сценария, адрес которого вы указали, содержится некий код, он тут же будет выполнен. Поэтому желательно точнс
100
Глава 5 - Язык MEL
знать, какие действия осуществляет сценарий (особенно это касается сценариев, загруженных из Интернета), Стоит приобрести привычку открывать эти файлы в текстовом редакторе и смотреть комментарии в заголовке. Только так можно гарантировать, что это именно тот код, который вы хотели бы выполнить на своем компьютере. Как указать источник сценария? Для этого существует несколько способов. Первый путь является самым очевидным. В меню File (Файл) диалогового окна Script Editor (Редактор сценариев) нужно выбрать команду Source Script (Источник сценария), как показано на рис. 5.4, и указать маршрут доступа к файлу со сценарием, В нижней части диалогового окна Script Editor (Редактор сценариев) появится описание сценария.
Рис. 5.4. Команда Source Script позволяет указать источник сценария
Имейте в виду, что при указании источника сценария оптимальным является отсутствие реакции со стороны приложения. Это означает, что программа отладки не обнаружила ни синтаксических, ни логических ошибок. Вторым способом указания источника сценария является ввод функции source с полным маршрутом доступа к файлу с нужным сценарием. Например» для указания на источник сценария copyArray.mel (в данном случае используется маршрут доступа в операционной системе Windows) нужно ввести: source "С:/Program F11es/AliasWavefront/Maya4.5/scnpts/unsupported /copyArray.mel":
ПРИМЕЧАНИЕ MEL-комамды для Maya в операционных системах Mac, Windows, Linux и IRIX практически идентичны. Слегка могут отличаться маршруты доступа к файлам и системные команды. Большинство примеров из этой книги, как и используемые в них MEL-команды, не зависят от платформы.
В процессе тестирования и отладки очень удобно превратить команду, указывающую на источник сценария, в кнопку на одной из полок. В результате после сохранения файла со сценарием можно перейти в Maya и, щелкнув на кнопке, немедленно увидеть сообщение об ошибках, которые Maya обнаружит в коде сценария. Такой способ позволяет интерактивно отлаживать сценарий во внешнем редакторе. Третий способ быстро указать на источник сценария во время работы программы является самым простым и быстрым. Он позволяет тестировать и отлаживать небольшие процедуры по мере их написания. Просто скопируйте строки кода из текстового редактора и вставьте их в нижнюю часть диалогового окна Script Editor (Редактор сценариев); для этого можно также использовать команду Open Script (От-
Командная строка и редактор сценариев
101
крыть сценарий). Затем нужно выделить текст и нажать клавишу Enter на цифровой клавиатуре. Убедитесь, что вы нажимаете именно клавишу на цифровой клавиатуре, потому что в противном случае текст будет просто стерт. Если вы работаете на портативном компьютере, у которого отсутствует цифровая клавиатура, используйте комбинацию клавиш Ctrl+Enter. После нажатия клавиши Enter вы увидите, что выделенный код появится в верхней части диалогового окна Script Editor (Редактор сценариев). Именно там вы увидите названия всех процедур и команд после их выполнения. Помимо всего прочего — это замечательный способ определить, что происходит при выполнении конкретных команд. Последним способом указать на источник сценария является установка глобального маршрута доступа на жестком диске в момент запуска Maya. Глобальный маршрут доступа ведет в папку со сценариями ../currentUser/maya/scripts/, а также в любую папку в цапке ../AliasWavefront/MayaS.O/scripts/. Поместив MEL-сценарий по любому из этих маршрутов, вы гарантируете указание на него при любом запуске Maya. Маршрут доступа к Maya хранится в глобальной переменной окружения, которая может быть запрошена или изменена с помощью команд geterw и setenv. Вот пример запроса значения глобальной переменной окружения: getenv
MAYA_SCRIPT_PATH;
Очень полезные команды находятся в меню Script (Сценарий) диалогового окна Script Editor (Редактор сценариев), а именно — команды Echo All Commands (Отображать все команды), Show Line Numbers (Показать номера строк) и Show Stack Trace (Показать стек вызова). Все эти команды поистине бесценны при отладке сценариев.
Основы программирования на языке MEL Надеемся, вы уже понимаете, что представляет собой язык MEL, и прекрасно освоились со средой для написания сценариев, встроенной в Maya. Пришло время приступить к активным действиям. Мы начнем с определения процедур, с инструкций возврата значений, с типов данных, с определения и присваивания переменных, с управляющих структур и прочих несложных вещей! Для начала объявим глобальную процедуру, которая выводит слова Hello World и возвращает строку goodbye. Введите следующий код в нижнюю часть диалогового окна Script Editor (Редактор сценариев), выделите текст и нажмите клавишу Enter на цифровой клавиатуре: global proc string helloWorld () ( print "Hello World!!!\n"; string $bye - "Goodbye"; return $bye: I
Поздравляем, вы только что написали свою первую процедуру на языке MEL, которая называется helloWorldQ. Теперь пришло время выполнить ее. В командную строку или в нижнюю часть редактора сценариев введите строку hello World{), выделите ее и нажмите клавл-
102
Глава 5 - Язык MEL
шу Enter на цифровой клавиатуре. В верхней части диалогового окна Script Editor (Редактор сценариев) должны появиться строчки: helloWorldO: Hello torld!!! // Result: Goodbye //
Посмотрим более подробно, что произошло. Функция helloWorld была описана, как глобальная процедура. Это значит, что для ее выполнения достаточно ввести ее название в командной строке. Ключевое слово string в первой строке задает тип возвращаемого значения. Скобки после названия процедуры helloWorld пусты. Это значит, что процедура не имеет аргументов. Фигурные скобки, в которые заключена остальная часть процедуры, определяют область видимости единственной локальной переменной этой процедуры. Команда print выполняет стандартный вывод, то есть выводит текст на экран. Символы \п представляют собой управляющую последовательность и воспринимаются командой print как возврат каретки или переход на новую строку. Переменная $Ьуе согласно описанию принадлежит к типу string и имеет значение goodbye. В конце функция возвращает значение переменной $Ьуе, то есть слово Goodbye. Возвращение значения в конце процедуры можно интерпретировать как получение от нее ответа. Если ответ имеется, его требуется зафиксировать или он будет потерян навсегда.
Присваивание переменным возвращаемых значений После написания процедуры helloWorld, указания ее источника и ее выполнения попытаемся присвоить возвращаемое ею значение какой-нибудь переменной. Затем это значение нужно вывести, чтобы удостовериться, что это действительно результат выполнения процедуры: string Scatchlt - 'helloWorld': print ("\n The result Is: " + Scatchlt + "Лп");
В результате выполнения этого кода должно получиться следующее: Hello World!!! The result Is: Goodbye.
После вызова функции helloWorld строка goodbye была присвоена переменной $catchlt В большинстве языков программирования, в том числе и в MEL, сначала вызывается функция, а потом выполняются все остальные операции (в нашем случае — это операция присваивания). В противном случае просто не будет данных для дальнейшей обработки. Функция helloWorld находится! внутри апострофов, что является короткой формой записи команды eval: eval С "nelloWorld" };
Эта команда позволяет вычислить и зафиксировать результат, возвращаемый любой командой или процедурой языка MEL.
Командная строка и редактор сценариев
103
Затем следует вызов команды print, но на этот раз используется оператор объединения строк (+), чтобы выполнить объединение значения переменной $catchlt и строки \n The result is. Это выражение находится в скобках, поэтому оно сначала вычисляется, потом объединяется в одну строку, а только после этого вызывается команда print, в качестве аргумента которой фигурирует полученная строка. В процессе написания сценариев особое внимание нужно обращать на синтаксис, регистр букв и опечатки. Пожалуй, это самая сложная часть работы над сценариями. (Достаточно непросто привыкнуть к разборчивости компилятора и к тому, как легко он пропускает глупейшие опечатки, немедленно предполагая наличие логической ошибки, вместо того чтобы искать ошибку синтаксическую.) Одной из самых распространенных ошибок у начинающих является использование одинарной кавычки (') вместо апострофа ('), клавиша для ввода которого находится в верхнем левом углу клавиатуры. Эта же клавиша печатает знак тильды (~). В качестве другой распространенной ошибки можно упомянуть использование оператора присваивания (=) для сравнения выражений, когда на самом деле нужен оператор проверки на равенство (==). Этот случай упоминается в документации, но тем не менее пользователи все равно часто допускают эту логическую ошибку, которую достаточно сложно обнаружить. Поэтому всегда внимательно следите за тем, что вы вводите! СОВЕТ Имейте е виду, что процесс отладки сценариев сопровождается сообщениями об ошибках. Установите флажки рядом с командами Echo All Commands (Отображать все команды), Show Line Numbers (Показать номера строк) и Show Stack Trace (Показать стек вызова) в меню Script (Сценарий) диалогового окна Script Editor (Редактор сценариев). Тогда приложение всегда даст вам исчерпывающую информацию об ошибках, которые оно сможет обнаружить в процессе интерпретации вашего кода, втом числе и о том, в каких строках они находятся. Это позволит быстро перейти к нужному месту кода в текстовом редакторе и внести необходимые изменения. Впрочем, иногда приходится поломать голову над тем, что же написано неправильно, но это не повод отчаиваться и прекращать работу! Ошибки являются неотъемлемой частью процесса написания и отладки сценария. И всегда есть вероятность, что вы всего лишь сделали опечатку, а с логической структурой все в порядке.
Аргументы, массивы и управляющие структуры Теперь, когда вы в состоянии объявить функцию и сохранить возвращаемое ею значение, пришло время познакомиться с логическими конструкциями. Вам предстоит написать функцию, напоминающую функцию helloWorldQ, но на этот раз новая функция будет использовать в качестве аргумента массив строк. Что такое массив? Это все равно, что список строк, причем каждый пункт этого списка сохраняется в виде отдельного элемента заранее указанного типа. Новая функция включает в себя условную инструкцию if/else, которая вычисляет выражение, присваивая ему значение true (истина) или false (ложь), и предпринимает действия в зависимости от полученного результата. Наконец, вы познакомитесь с циклом, то есть возможностью многократного выполнения набора команд. Циклы часто используются, например, при сортировке списков. Также вы познакомитесь с типом данных Integer (целые). С помощью цикла вам предстоит просмотреть, отформатировать и вывести на экран элементы массива
104
Глава 5 • Язык MEL
после применения к ним функции helloWorld. Затем отформатированные строки будут переданы в исходную процедуру, которая выведет на экран полученный результат. Этот пример во многом аналогичен предыдущему, но при этом он знакомит вас с дополнительными управляющими структурами языка MEL. Вы, вероятно, уже поняли, что любые строки, слева от которых находятся две косых черты (//), являются комментариями и полностью игнорируются при интерпретации сценария. Комментарии позволяют объяснить смысл вашего кода другим пользователям. Сразу заметим, что количество комментариев в примерах кода, которые вы найдете в данной книге, откровенно чрезмерно, так как мы пытались подробно объяснить вам суть происходящего, Ваш собственный код не обязательно комментировать настолько детально. В общем случае человек, знакомый с языком программирования, сможет понять смысл кода по его содержанию. Комментарии внутри рабочего кода не предназначены для обучения других пользователей основам программирования. Обычно лучше всего помещать их вне гела функции и делать как можно более обобщенными. В этом случае при изменении или обновлении кода комментарии не устареют. Представленный ниже сценарий предназначен для пояснения основных концепций языка MEL, о которых мы говорили выше. В нем использованы фундаментальные методы обработки данных, которые часто встречаются в реальных MELсценариях. Его текст находится на прилагаемом к книге компакт-диске в файле firstFullExampleScriptmel, расположенном в папке ChapterQS, Рекомендуем вам воспользоваться этой версией, а не перепечатывать текст из книги. Сценарий перебирает массив заранее объявленных имен, пока не натыкается на имя Stinky Pete (Вонючий Пит). Никто не хочет находиться рядом с вонючим Питом, поэтому после обнаружения этого имени процесс поиска завершается. Хотя поиск происходит в списке имен, результат объединяется со строкой goodbye, которая выводится на экран первой функцией. Внутри сценария вы найдете комментарии к каждому шагу и к каждой процедуре. Чтобы запустить его, достаточно ввести в командную строку команду firstFullExampleScriptQ и нажать клавишу Enter. //f i rstFul 1 Exarnpl eScri pt .mel // автор: Эрик Миллер // Объявление глобапьной процедуры firstFullExampleScript "главной", // го есть процедурой, вызов которой необходим для выполнения // остальной части сценария. В данном случае необходимости присваивать ей // название malnO нет. В языке MEL (в отличие от С) первой функции можно // присваивать любое иия, потому что для запуска все // равно потребуется вызов процедуры по имени. // 6 объявлении этой функции неуказан тип возвращаемого значения; // следовательно, инструкция возврата значения в конце не требуется // // Главная процедура: // // flrstFullExampleScriptO;
Командная строка и редактор сценариев global proc flrstFullExampleScriptO
•'.' // // // // // //
Объявление строкового массива из восьми элементов и присваивание им значений. Доступ к этим элементам может быть осуществлен индивидуально по их индексу. Индексация всегда начинается с О . Например, значение "МоШса" присвоено переменной $myArrayQfName$[3] массива, состоящего из восьми элементов. Хотя этот элемент является четвертым по счету, он имеет индекс 3
string $myArrayQfNames[8] - { "emptyEletnent" . // элемент массива "Max". // элемент массива "Mark". // элемент массива "Monica". // элемент массива "Matt", // элемент массива "Stinky Pete". // элемент массива "Bill". // элемент массива "Bob" // элемент массива
I, /l // // //
5myArrayOfNames[0] $myArrayGfNames[l] $myArrayOfNames[2] 3myArrayQfNames[3] $myArrayQfNames[4] $myArrayOfNames[5] $myArrayOfNames[6] SmyArrayOfNames[7]
Объявление строки $getlt и передача управления глобальной процедуре flrstFullExampleProcedure. Вкачестве ее аргумента испоольэуется только что объявленный массив. Любые данные, возвращенные процедурой flrstFullExampleProcedure. будут присваиваться строке Sgetlt
string Sgetlt = firstFullExampleProcedureC SmyArrayQfNames );
// Управление передано обратно процедуре firstFullExampleScriptO: // Выведем на экран значения, возвращенные процедурой // firstFullExampleProcedure print Sgetlt;
// Знакомство с массивами, аргументами, циклами, условиями. // комментариями и многим другим!!! //
II Объявление глобальной процедуры, в качестве аргумента которой // используется строковой массив. Возвращаемое значение представляет собой // одну строку
105
106
Глава 5 • Язык MEL
global ргос string firstFullExampleProceduret string $arrayArg[] I
// Присваивание строке SgoodbyeString // возвращаемого значения функции helloWorldC) String SgoodbyeString = 'helloWorld' ;
// Возвращаемая строка объявляется таким образом, // чтобы ее областью видимости стала вся функция string SlongReturnString;
II !/ Объявление целого числа для цикла,-. int $i ;
// // // // // II
Инструкцию объявления цикла можно понять следующим образом: Изначально переменная $i равна нулю. После каждой итерации выполняется операция $i++. то есть величина переменной $i увеличивается на единицу. Пока значение этой переменной меньше общего числа элементов массива, цикл продолжает выполняться. Этот цикл называется циклом 'for':
fort $1=0; Ji < size($arrayArg); $1++ }
II
II // П // // // // // //
Проверка условия, что переменная Si имеет значение 1 и (&&) текущий элемент массива не равен значению "Stinky Pete" (этот особый случай будет рассматриваться позже, пока же поверьте на слово, что отсутствие сравнения со значением "Stinky Pete" в данном месте привело бы к логической ошибке), Если оба утверждения истинны, произойдет выполнение команд, заключенных в фигурные скобки- В противном случае эти команды будут просто пропущены и произойдет переход к следующему блоку кода. расположенному после инструкции else:
if С ($1 — 0) && ($arrayArg[$i] !- "Stinky Pete") )
// Инструкция 'continue' приводит к прерыванию цикла. В нашей случае // если первый элемент имеет значение, отличное от "Stinky Pete", // этот элемент пропускается.
Командная строка и редактор сценариев continue;
I else
// Вывод на экран слова hello для каждого элемента пассива print С "Hello, array element #" + $1 + " . " + $arrayArg[$i] + "..An' ):
// // // // // //
Сравним все элементы массива со значением "Stinky Pete". Если результат сравнения истинный, будет выполнен набор команд, расположенный в фигурных скобках. Если we результат сравнения ложный, выполнение передается блоку команд, расположенному после инструкции else.
if ( $arrayArg[$i] = "Stinky Pete" ) { print ("\n...OH NO!. ITS STINKY PETE! FOUND AT ARRAY ELEMENT #"
+ $1 + ". RUN AWAY!!!\n"}; SlongReturnString - IlongReturnString + SgoodbyeString + "Stinky Pete!!!\n";
// Инструкция break используется для немедленного выхода из цикла. break ; ) else I // // // // //
Возвращаемая строка является объединением полученного значения. слова goodbye (которое возвращает исходная процедура hello world), пробела, номера текущего элемента массива $i и символов перехода на новую строку. (Все это нужно для форматирования заключительного сообщения процедуры.)
SlongReturnString - SlongReturnString + $goodbyeString + " " + $аггауАгд[$1] +" An";
!
107
108
Глава 5 * Язык MEL
// Это сообщение информирует вас о времени выхода из цикла // и передаче управления исходной функции firstFullExampleScriptO;
It print "\nTime to exit example procedure.\n\n";
/ / Возвращение отформатированного сообщения
return ( SlongReturnString );
// Наша самая первая процедура Hello World
global proc string helloWorld О
I print "\nHello W o r l d ! ! ! \ n " : string $bye - "Goodbye"; return Sdye;
}
Теперь вы убедились, что язык MEL прост и занятен? Подождите, скоро вы с его помощью начнете создавать значки и кнопки для полок! Приготовьтесь, сейчас мы перейдем к примерам управления интерфейсом Maya.
Пример управления интерфейсом Maya Сценарий для этого раздела был написан, чтобы продемонстрировать, как с помощью MEL-команд можно управлять интерфейсом Maya и даже выполнять действия, которые вряд ли имеют смысл, например, делать невидимым главное окно программы. В этом случае окно Maya просто исчезнет, оставив после себя несохраненную сцену. Сообщения об ошибке не поступит, хотя вы гарантированно потеряете результаты своего труда. В этом отношении язык MEL представляет собой потенциально опасный инструмент. Приведенный ниже сценарий был написан специально для этой книги. Смысл отдельных операций объясняется в комментариях. Файл closeAIIOfMayaExceptMaya.mel находится в папке ChapterOS прилагаемого к книге компакт-диска. II CloseAIIOfMayaExceptMaya.mel // автор: Эрик Миллер // Этот небольшой сценарий закрывает асе открытые диалоговые онна. оставляя // только основное окно Maya. // // главная процедура: closeAllOfMayaExceptMayaO:
Командная строка и редактор сценариев
п global proc closeAllQfMayaExceptMayaO
{ // Глобальная переменная, значением которой является основное окно Maya: global string SgMainWindow; // Массив всех открытых окон: string $a!10penWindows[] =-'lsUI -Mid'; // просмотр этого массиза осуществляется с помощью цикла for: // for С $eachVJindow in SallOpenWIndows )
{
if($eachWindow ™ SgMainWindow)
{
// Если рассматриваемое окно является основным окном Maya, // оно становится невидимым window -e -vis 0 JeachWindow; // Основное окно программы снова становится видимым window -e -vis I $eachWindow;
! else / / Рассматриваемое окно не является основным окном программы // Оно становится невидимым window -e -vis 0 SeachWindow;
// Если вы избавились от окна каналов или редактора атрибутов, // которые также относятся к основному интерфейсу Maya, // восстановите их и убедитесь, что они видимы: ToggleChannelBox; if crisChannelBoxVisible')
( setChannel Boxtfi s i bl e ( ! ' i sChannel BoxVi si bl e " ) ;
109
110
Глава 5 * Язык MEL
Добавление нового пункта в меню Случалось ли вам задавать себе вопрос вида: «А почему в меню Create (Создать) отсутствует команда Create Render Node (Создать узел визуализации)?* Авторы неоднократно спрашивали себя об этом, запуская каждую из трех предыдущих версий Maya. Что ж, интерфейс Maya открыт для редактирования. Если вам не нравятся заданные по умолчанию меню, вы считаете, что в них должны присутствовать дополнительные пункты или нужно поменять порядок их следования, это всегда можно сделать с помощью MEL-сценария. Следующий сценарий иллюстрирует процесс создания команды Create Render Node (Создать узел визуализации), которая затем добавляется в меню Create (Создать). Файл addCreateRenderNodeToMenu.mel находится в папке ClnapterOS прилагаемого к книге компакт-диска: // addCreateRenderNodeToMenu.mel :
п
- // Этот сценарий показывает, как можно добавить новый пункт // в существующее меню, // // Главная процедура; // // addCreateRenderNodeToMenuO; // /* Следующие переменные можно найти е файле 'initMainMenuBar.mel ': Они являются глобальными и используются для именования главных кеню. Благодаря их наличию пользователь может добавить новый пункт в конец любого меню, не прибегая к написанию сложного кода global string SgMainFileMenu: global string $gMainEditMenu: global string $gMainModifyMenu; global string SgMainDisplayMenu; global string SgMainWindowMenu: global string SgMainOptlonsMenu: global string SgMainOeateMenu: */ // // Это объявление процедуры, которая используется для активизации // окна Create Render Node с заданными по умолчанию аргументами // Эта процедура используется как команда для дополнительного // пункта меню "Create Render Node", находящегося в следующей // процедуре addCreateRenderNodeToMenu{ ) :
global proc InsideMaya CreateRenderNodeWinO
Командная строка и редактор сценариев // Активизация диалогового окна Create Render Node createRenderNodeC'-alT. "". "");
) // // Эта функция добавит новую команду вконец меню Create: //
global proc addCreateRenderNodeToMenuO { // Глобальная переменная, содержащая меня Create global string SgMainCreateMenu; // Эта команда создаст меню, если на данный момент оно отсутствует: evalC'ModCreateMenu " •*• JgMainCreateMenu): // Эта команда сделает меню "Create" родительским // по отношению к новому пункту setParent -menu SgMainCreateMenu; // Эта команда добавит разделитель для новой секции irenultetn -divider true; // // Добавление нового пункта меню с помощью ранее объявленной процедуры //
menultem -label "Create Render Node" -command "InsideMaya_CreateRenderNodeWin" -annotation "Create Render Node: Opens the Create New Render Node window. Easy, huh?"; // Сделаем меню родителем по отношению к созданному пункту setParent -menu ..: // Эту коианду можно вызвать из любого сценария, расположенного // в папке Startup, кроме того, она всегда будет в главном меню,
I
111
112
Глава 5 • Язык MEL
Добавление нового меню в интерфейс Maya Вы хотите иметь дополнительное меню, содержащее команды запуска созданных вами сценариев и инструментов? Нет проблем! Сейчас вы: увидите, как получить меню, дочернее по отношению к основному окну программы. Файл createCustomMenuItemlnMaya.mel находится в папке ChapterOS прилагаемого к книге компактдиска; // createCustomMenuItemlnMaya.mel //
// // // II // // // //
Этот сценарий покажет вам. как просто добавить новое меню к основному интерфейсу Maya. Мы создадим меню с названием "Custom Menu", дочернее по отношению к окну программы. Первый пункт этого меню содержит команду 'sphere', в процессе создания которой будет продемонстрировано действие флага -с. Остальные пункты меню пустые, для них флаг -с пустой, Помните: ео флаг -с может быть помещена любая команда: созданная пользователем процедура или встроенная команда MEL.
// Главная процедура: // // createCustomMenuItemlnMayaO;
global proc createCustomHenuItemlnMayaO ( // Глобальная переменная, содержащая основной интерфейс Maya. global string SgMainWindow; // Глобальное объявление пользовательского меню global string SgMyCustomMenu - "myCustomMenuItem"; // Эта команда сделает основной интерфейс Maya родительским элементом setParent $gMainWindow: if ("isTrue "BaseMayaExists"') { // Создание нового меню и присваивание ему имени:
menu -I "Custom Menu" -aob true -to true // Делаем это меню отсоединяемым -postMenuCommandOnce true SgMyCiastomMenu: // Делаем его родительским по отношению к окну программы Мауа.
Заключение
113
setParent -m ..:
It Делаем пользовательское пеню текущий родителем setParent -m SgMyCustomMenu; menultem -divider true; // Создание пунктов пользовательского иеню и присваивание ии названий: // // Первый пункт меню создает сферу // menultem -label "Super Custom Sphere Command!" -c "sphere" -annotation "Proprietary Workflow Interface module containing a top secret Sphere command!": II Эта команда добавит разделитель для новой секции, menultem -divider true:
' Остальные пункты меню оставляем пустыми, отделив их друг от друга //
menultem -label "Custom menultem -label "Custom menultem -label "Custom menultem -label "Custom menultem -label "Custom menultem -divider true; menultem -label "Custom menultem -label "Custom
Command 1 Goes Here!" Command 2 Goes Here!" Command 3 Goes Here!" Command 4 Goes Here!" Command 5 Goes Here!"
-c -c -c -c -c
"' "" "" "" ""
Command 5 Goes Here!" -c "" Command 7 Goes Here!" -c ""
// Делаем меню родителей по отношению к его пунктам, setParent -rn . . ;
; 1
Заключение Завершая эту главу, хотелось бы заметить, что вы увидели только верхушку айсберга. Существует множество других вариантов применения языка MEL. Рассмотренные темы должны были дать общее представление об основах синтаксиса MEL. Дополнительные сведения можно найти в справочной документации по Maya.
114
Глава 5 • Язык MEL
Хорошим примером является сценарий, добавляющий в меню новый пункт. Циклы применяются для решения многих проблем, поэтому мы постарались создать пример, который был бы легок для понимания и в то же время достаточно интересен. Впрочем, все приведенные в данной главе примеры жизненно важны для понимания основ языка MEL. Обязательно прочитайте приложение А, содержащее дополнительные советы и описания приемов программирования. Напоследок хотелось бы дать несколько советов, а также представить ссылки на дополнительные ресурсы. Используйте команды help и showHelp. Для этого достаточно ввести следом за каждой из них имя команды, по которой требуется получить справку. Кроме того, если вы не уверены, является ли тот или иной идентификатор командой или процедурой языка MEL, либо хотите узнать, где находится тот или иной сценарий, используйте команду whatls, чтобы определить полный маршрут доступа к файлу или получить сообщение, что указанный вами идентификатор является именем команды. В качестве источника дополнительных сведений по языку MEL можем порекомендовать вам документацию, вызываемую командой Help > Contents and Search (Помощь > Содержание и поиск). Воспользуйтесь разделами MEL Command Reference, MEL, Instant Maya справочной системы, а также сайтом www.highend3d.com/maya/mel.
Ч А С Т Ь II Моделирование Глава 6. Форматы Глава
7. Методы
Глава
8. Наборы объектов
Глава 9. Реквизит Глава 10. Персонажи
6
Форматы
В окружающем нас мире существует великое множество объектов, от неправдоподобно мелких частиц тумана до безбрежных галактик в межзвездном пространстве. Некоторые из этих объектов бесформенны, другие симметричны, третьи чрезвычайно сложны, четвертые предельно просты. Творения рук человеческих отличаются от природных объектов. Однако все это многообразие может быть воспроизведено на экране компьютера при помощи всего нескольких математических форматов. В Maya в основном используются три формата моделирования: сетки полигонов, NURBS-поверхности и иерархические поверхности. Старейшим является формат сеток полигонов. NURBS-поверхности стали применяться для моделирования в 80-х годах прошлого века, а иерархические поверхности — только в 90-х. Необходимость в эффективных, точных и в то же время гибких подходах к моделированию привела к появлению инструментов и приемов, позволяющих создать практически любой объект. В этой главе мы сравним особенности каждого из форматов и рассмотрим примеры их применения. В частности, будут подняты следующие темы: О О О о О
поддерживаемые (и неподдерживаемые) в Maya форматы моделирования; особенности форматов моделирования, применяемых в Maya; достижение поверхностной непрерывности средствами Maya; неоднородные рациональные В-сплайны; моделирование объектов для проекта «Место для парковки».
Неподдерживаемые форматы Несмотря на многочисленность доступных в Maya форматов моделирования, нельзя сказать, что это приложение поддерживает все существующие форматы. Для полноты картины в этом разделе мы опишем некоторые форматы моделирорапия, которые в Maya недоступны. Каждый из них имеет свои достоинства и обгш применения, но к Maya они отношения не имеют,
Выбор формата
117
Неявные поверхности Неявные поверхности, или блобы, хорошо подходят для моделирования органических форм, так как специально разрабатывались для плавного сопряжения одних фигур с другими. Основные правила работы с ними подразумевают размещение сглаженных примитивов (обычно в их роли выступают сферы) на близком расстоянии друг от друга и выбор параметров сопряжения. Частицы в Maya допускают визуализацию в виде блобов, но средства моделирования объектов на их основе не поддерживаются. Для работы с блобами в Maya применяются специальные подключаемые модули (такие как MetaShapes и Flow Tracer), предоставляющие нужные инструменты. Однако из-за отсутствия в Maya встроенной поддержки блобов лучше использовать другие форматы моделирования.
Октадеревья Вообразите процесс аккуратного заполнения пустого сосуда кирпичами (они в данном случае называются векселями), и вы получите приближенное представление об октадеревьях. Если вы к тому же представите, что воксели могут быть разного размера, тогда вы точно поймете, что именно представляет собой этот формат моделирования. Название свое октадеревья получили благодаря восьми областям, на которые делят пространство три оси координат. Октадеревья требуют интенсивных вычислений и не позволяют получать гладкие поверхности. Областью применения этого формата обычно является моделирование топографических особенностей местности, поэтому вряд ли вы пострадаете от того, что в Maya он не поддерживается.
Облака точек Облака точек являют собой еще один подход к моделированию, требующий обработки больших объемов данных, обычно получаемых трехмерным сканированием. Трудности возникают при преобразовании облака точек в более удобный для работы объект, например в NURBS-поверхность. Облака точек чаще всего применяются в таких областях, как инженерный анализ. Хотя некоторые системы на основе облаков точек (обычно треугольных) позволяют создавать сетки полигонов, сокращение объемов данных и алгоритм подгонки требуют специальных инструментов. Для пользователей, вынужденных работать с облаками точек, фирма Alias Wavefront (наряду с другими производителями) создала линейку продуктов Studio Tools. Разумеется, они не решают проблему полного соответствия поверхностей и данных, зато получаемые в результате объекты можно легко импортиронать в Maya.
Выбор формата Бывают случаи, когда выбор оптимального формата моделирования объекта совершенно очевиден, но обычно рассматриваются разные возможности. Иногда
118
Глава 6 * Форматы
в итоге приходится комбинировать форматы или использовать один из них, как основу для применения другого. Решая, какой формат выбрать для моделирования объекта, примите во внимание перечисленные ниже факторы. Более подробно мы поговорим о них при обсуждении каждого из форматов.
Точность воспроизведения Одним из самых важных факторов при выборе формата моделирования является точность воспроизведения желаемой формы. Хотя иногда бывает интересно изменить пропорции объекта или убрать лишние детали, инструменты должны обеспечивать принципиальную возможность точного воспроизведения формы объекта вне зависимости от ее сложности. Впрочем, так как некоторые детали можно имитировать путем назначения материала, нет необходимости воспроизводить абсолютно все тонкости геометрии объекта. Кроме того, вряд ли имеет смысл проработка деталей, которые не являются важными или «не бросаются в глаза». Однако если решение об уровне детализации принято, формат моделирования должен допускать точное воспроизведение любой намеченной формы. Все три основных формата моделирования Maya предоставляют такую возможность. Различия между ними проявляются в другом.
Эффективность Формат моделирования должен быть компактным и умеренно сложным. В наши дни возможности компьютеров возросли до фантастических высот, но пропорционально возросли и требования. Разработчик должен эффективно взаимодействовать с моделью в процессе ее создания и редактирования. Важным фактором является и скорость моделирования. Иногда благодаря небольшим размерам модели и ее простоте скорость моделирования можно не принимать во внимание, но эффективность важна всегда. В нашем случае, учитывая малочисленность рабочей группы и короткие сроки исполнения проекта, во главу угла была поставлена именно эффективность. Исходя из этого фактора и осуществлялся выбор формата моделирования большинства объектов.
Точность вычислений Конечным результатом работы большей части приложений компьютерной графики является физический объект. Модели, производимые автомобильными и аэрокосмическими дизайнерами, должны иметь точно подогнанные части. Другими словами, разница между круглым и почти круглым в этом случае равносильна разнице между успехом и провалом. В свою очередь аниматоры должны гарантировать, что при увеличении геометрических размеров фрагмента конечности персонажей не начнут непроизвольно дергаться из-за ошибок округления. Словом, точность вычислений как у ученых, так и у художников должна быть адекватной.
Выбор формата
119
Так как в проект для данной книги входил набор объектов ограниченного размера и обычного масштаба, вопрос точности вычислений был для нас не очень важен. Большинство узких мест можно было обойти за счет ограниченного разрешения изображения. В то же время некоторые объекты и области сцены требовалось смоделировать поточнее. К таким объектам относился, в частности, пожарный гидрант, демонстрируемый крупным планом, поэтому крайне желательно было избежать смещения его частей друг относительно друга. Здесь мы подходим к следующему важному фактору — непрерывности.
Непрерывность Очевидно, что в моделируемых объектах не должно быть лишних провалов и резких границ, но иногда требования к точности моделирования могут быть еще более строгими. Например, может потребоваться придать закругленному краю г:оверхности определенный радиус или же явно показать неодинаковую гладкость поверхности. Некоторым форматам моделирования свойство непрерывности присуще «по определению», в других его надо имитировать искусственно. Иногда определенного соотношения между деталями объекта можно добиться только с помощью какого-то конкретного формата. Многие объекты для проекта «Место для парковки?» требуют непрерывности форм. И именно этот факт во многом оказал влияние на выбор форматов моделирования.
Гибкость В анимации многие объекты в буквальном смысле слова должны быть гибкими, то есть деформироваться нужным вам образом. Само по себе моделирование статического объекта, даже полностью воспроизводящее задуманный образ, не является гарантией корректности деформации. Поэтому выбор формата моделирования часто определяется требованиями гибкости. Очевидно, что этот фактор выходит на первый план при моделировании персонажей. Это касается и проекта «Место для парковки». Впрочем, там присутствуют и другие объекты, которым предстоит подвергнуться деформации.
Назначение материала При выборе формата моделирования нужно учитывать последующее назначен] te материала. Например, NURBS-поверхности являются параметризованными, а вся поверхности на основе сеток полигонов и иерархические поверхности — нет (об этих поверхностях мы поговорим чуть позже). Кроме того, существуют методы назначения материалов, не зависящие от формата моделирования. Впрочем, каждый подход имеет свои преимущества, и частенько модели создаются в том или ином формате именно с учетом последующего назначения материала. Для некоторых моделей из проекта «Место для парковки» учитывалась возможность параметризации поверхностей. Впрочем, процесс назначения материалов моделям, полученным на основе сеток полигонов, облегчает тот факт, что подобным поверхностям можно сопоставлять проекционные координаты.
Глава 6• Форматы
120
Полигоны В прошлом использование полигонов для моделирования объектов было обусловлено требованиями простоты и снижения объемов вычислений. Нужды визуализации и сохранения данных удавалось удовлетворять за счет ограничения количества полигонов и взаимозависимостей между ними, что ни могло не сказываться на деталях. Практически всегда вместо точного воспроизведения объектов получались приближенные модели. Впрочем, степень этого приближения могла контролироваться непосредственно пользователями системы компьютерной графики, Все это характерно и для современного формата моделирования на основе сеток полигонов, хотя разработчикам удалось избавиться от многих существовавших ранее ограничений. Для работы с сетками полигонов в Maya имеется богатый набор инструментов, позволяющих создавать и редактировать даже очень сложные модели.
Гибкость топологии Вероятно, основной характеристикой системы моделирования на основе сеток полигонов является гибкая топология, то есть топология с различной структурой форм. Несмотря на фундаментальное требование создавать дополнительные элементы поверхности только для придания ей определенных очертаний или деформаций, поверхность на основе сеток полигонов допускает большую свободу обращения. цщ -т,:£. ж |'"»—'^-—-• | " ** ' >
а
Рис. 6.1. Грубая модель с низкой плотностью сетки
Полигоны
121
£k-
- '^
Рис. 6.2. Модель со слишком высокой плотностью сетки
Следствием этой свободы является ответственность пользователя за уровень детализации модели. Иногда это выливается в необходимость создания нескольких версий одной и той же модели с низкой и высокой плотностями сетки. Подобные компромиссы хорошо знакомы разработчикам игр, которым приходится балансировать между скоростью и степенью реализма моделей. Слишком низкая плотность сетки приводит к искажению изображения и исчезновению необходимых деталей, как показано на рис. 6.1. Но, сделав сетку слишком плотной, как показано на рис. 6.2, вы увеличиваете время, которое потребуется на редактирование модели и визуализацию сцены. Сетки полигонов состоят из связанных друг с другом многоугольных граней, которые, в свою очередь, состоят из ребер и вершин. Благодаря подобному построению одна вершина может принадлежать нескольким ребрам, а одно ребро — нескольким граням. Это позволяет сохранять минимальное количество данных и эффективно отслеживать структуру сетки. Для сеток полигонов характерна недостаточная точность воспроизведения искривленных поверхностей. В промышленных приложениях моделирование на основе сеток полигонов считается слишком непрактичным, так как для достижения определенного уровня детализации требуется обработать слишком большие объемы данных. Впрочем, при создании анимации сетку можно доработать, сгладив острые углы.
Глава 6 • Форматы
122
Несмотря на гибкость топологии сеток полигонов, разработчики все равно должны уделять внимание управляемости и хорошей структурированности получаемых сеток. В следующих трех главах мы поговорим на эту тему более подробно.
Позиционная непрерывность Сетки полигонов обеспечивают только позиционную непрерывность, которая представляет собой просто связность отдельных частей модели. Однако при визуализации создается впечатление непрерывности более высокого порядка. Ребра могут быть видны даже при условии интерполяции нормалей к вершинам, приводящей к сглаживанию внутренней области, как показано на рис. 6.3.
Рис. 6.3. Артефакты 8 местах соединения граней
Однако в действительности ключевым достоинством моделирования на основе сеток полигонов является связность отдельных частей модели. При деформации поверхностей с высокой степенью параметризации (выше первой степени) перемещение управляющих вершин обеспечивает более высокий по сравнению с реальным порядок непрерывности. Но пространственные деформации не приводят к появлению разрывов, так как для непрерывности сетки полигонов требуется лишь, чтобы совпадающие вершины находились в одной точке пространства. Не-
Полигоны
123
смотря на свою простоту, сетки полигонов легко деформируются даже в случаях, когда их более сложные собратья (например, NURBS-поверхности) рвутся. При логических операциях крайне полезна интерполяция нормалей визунлизатором, приводящая к появлению гладкой поверхности. При отключенном сглаживании результат такой операции, скорее всего, будет выглядеть крайне непривлекательно. Впрочем, обычно сглаживание включено по умолчанию, поэтому i ipoблемные области визуализируются вполне корректно, как показано на рис. 6.4.
Рис. 6.4. Результаты логической операции при включенном и отключенном сглаживании
Разумеется, сглаживание влияет на визуализацию только в пределах одной сетки. Между разными сетками отсутствует интерполяция нормалей к вершинам, поэтому стык двух граней незаметен только тогда, когда эти грани лежат в о,гной плоскости.
Назначение материалов Сетки полигонов не являются параметрическими, поэтому для назначения материалов нужно сопоставить их вершинам проекционные координаты. Это можно сделать как в процессе создания сетки или полигона (что, собственно, и происходит по умолчанию), так и при дальнейшем редактировании.
124
Глава 6 • Форматы
В общем случае если объекту невозможно без проблем назначить материал на основе проекционных координат параметрической поверхности или путем применения процедурной текстуры, имеет смысл подумать о моделировании этого объекта на основе сеток полигонов. В некоторых случаях можно прибегнуть к преобразованию NURBS-поверхности в сетку полигонов. При этом происходит автоматическое преобразование встроенных проекционных координат и сопоставление их вершинам сетки. При создании сеток полигонов по фрагментам очень полезно иметь значения параметров для каждого компонента поверхности.
NURBS-поверхности Разработка формата моделирования на основе неоднородных рациональных В-сплайнов (Nommiform rational B-splines, NURBS) стала важным этапом развития компьютерной графики. Наконец-то появился формат для точного и эффективного воспроизведения широкого спектра объектов. Кроме того, извлечение из этих объектов фрагментов произвольной формы не влияет на вид остальной поверхности. После долгих исследований неоднородные рациональные В-сплайны стали основой стандарта создания поверхностей в компьютерной графике. NURBS-поверхности состоят из отдельных параметрических фрагментов и являют собой подход к представлению геометрии, альтернативный сеткам полигонов. Однако в ходе визуализации в большинстве случаев (в том числе и в Maya) для удобства вычислений происходит преобразование NURBS-поверхности в набор полигонов. Чтобы понять основные отличия между этими форматами моделирования, рассмотрим неоднородные рациональные В-сплайны более подробно.
Параметризация Параметрические кривые и поверхности описывают геометрию посредством базисной функции и управляющих точек. Базисные функции создаются как функции одного параметра (U), использующего одно значение для каждой координаты: P(u)-(X(u),Y(u),Z(u)). Любая координатная функция использует один и тот ж:е базис, который определяет соответствующее значение координаты для каждой управляющей точки и выдает взвешенную сумму. Для кривой Безье в каждом вычислении принимают участие все точки, в то время как для В-сплайна берется определенное число точек. В этом последнем случае принято говорить, что кривая или поверхность состоит из отдельных фрагментов, так как выбранное подмножество управляющих вершин формирует отдельные участки элемента (интервалы). Значения параметра, при которых заканчивается один интервал и начинается следующий, называются узловыми точками. Геометрическое местоположение узловых точек является результатом вычисления соответствующих управляющих точек с использованием базисных функций при определенном значении параметра.
NURBS-поверхности
125
Значения параметра описывают пространство, которое может быть пройдено от начала до конца. Некоторые базисы определены от 0 до 1, но на базис В-сплайна наложено единственное ограничение: диапазон значений узловых точек должен быть неубывающим. При этом точные величины параметров не имеют значения. Их легко можно изменить путем прибавления ко всем константы или же умножения их на константу. В то же время крайне важным является соотношение между узловыми точками. Если все узловые точки отстоят друг от друга на постоянную величину, говорят, что элемент однородно параметризован. Если же хоть один интервал между узловыми точками выделяется из общего ряда, параметризация элементов называется неоднородной. То есть однородные В-сплайны описывают элементы посредством распределенных на равные расстояния узловых точек с неубывающими значениями, которые определяют взвешенную сумму управляющих точек через базисную функцию В-сплайна. Честно признаемся, что сущность этого элемента намного проще, чем его определение. Базис В-сплайна в действительности представляет собой не одну функцию, а их семейство, в зависимости от нужной математической степени. Структура базиса гарантирует, что сумма весов всех значимых управляющих точек всегда будет равна единице. Это означает, что ни одна точка не должна имет ь чрезмерного влияния на элемент, что приводит к появлению нужного нам свойства выпуклой оболочки. Данное свойство гласит, что элемент всегда находится внутри области, ограниченной линиями, соединяющими соответствующие управляющие вершины. При рассмотрении базисных функций в виде весовой суммы точек в простран стве становятся весьма наглядными степенные эффекты. Для двух точек может быть получена только линейная интерполяция. Другими словами, их можно соединить исключительно прямой линией. Ведь дополнительных точек, которые могли бы повлиять на положение кривой, просто нет. Математически такая кривая описывается уравнением первой степени. Три точки гарантированно образуют треугольник. Различные базисные функции в этом случае могут привести к появлению различных кривых, но благодаря наличию условия, что сумма этих функций равна единице, кривая будет лежать в плоскости треугольника. Такие кривые имеют дополнительную степень свободы и описываются уравнением второй степени. Чтобы получить кривую, не лежащую в одной плоскости, необходимы четыре точки. Пользователи Maya сразу поймут, что для построения кривой третьей степени требуются четыре точки. Это минимальное количество точек для параметрической кривой, не лежащей в одной плоскости. Такая кривая должна иметь как минимум третью степень. То есть базисные функции, оперирующие двумя, тремя или четырьмя точками, соответствуют линейному, плоскому и неплоскому вариантам. В действительности, описанные случаи относились к кривым, состоящим из одного интервала. Ддл кривых, составленных из нескольких интервалов, базис В-сплайна, показанный на рис. 6.5, определяет способ итераций вдоль этих интервалов с использованием для каждого из них соответствующих управляющих вершин.
126
Глава 6• Форматы
С = Р0Вэ + PiB2 +•
•+• P3Bo
Рис. 6.5. Базисная функция однородного В-сплайна
Так как вычисление параметра происходит от одного интервала к другому, эффект воздействия одной управляющей точки стремится к нулю по мере возрастания эффекта воздействия управляющей точки, расположенной рядом. Продолжение кривой первой степени начинается на конце интервала, кривая второй степени продолжается в том же самом направлении, то же можно сказать и о кривой третьей степени с той же самой степенью кривизны. Именно в этом состоит условие непрерывности В-сплайна, и именно для обеспечения этого условия были разработаны базисные функции. Можно создать NURBS-кривые более высоких степеней и обеспечить более высокий порядок непрерывности, но редактирование положения управляющих точек в этом случае лучше поручить компьютеру. Мы почти закончили. Осталось только рассмотреть неоднородную и рациональную части NURBS-кривых. Как уже было упомянуто ранее, интервал между узлами вовсе не обязан быть одинаковым. Пока значения в узловых точках не убывают, они могут быть любыми. Изменение значения параметра меняет форму кривой, так как меняется диапазон действия различных управляющих точек. Чаще всего параметризация производится назначением параметра на основе прямого расстояния между соседними узловыми точками. Хотя это всего лишь приближение (так как фактическое расстояние вдоль кривой зависит от параметров), метод достаточно действенный и известен под названием параметризации по длине хорды. Также неоднородная параметризация полезна на концах интервалов. Прямое применение базисной функции предыдущего В-сплайна к строго однородному узловому вектору приводит к появлению висящих концов, как показано на рис. 6.6.
NURBS-поверхности
127
Но путем повторения значений параметра в узловом векторе можно подогнать концы кривой к конечным управляющим точкам.
Рис. 6.6. Сравнение однородного В-сплайна и В-сплайна с множественными конечными узлами
В Maya часто приходится сталкиваться с ситуацией, когда однородные кривые и поверхности оказываются неоднородными на конце. Впрочем, положение этого конца и направление тангенса угла наклона может контролировать непосредственно пользователь. Напоследок следует отметить, что обсчет управляющих точек производится различными способами. Можно указать дополнительный масштабирующий коэффициент, показывающий соотношение между выбранной и обычной управляющими точками. Зачем это нужно? Дело в том, что коническое сечение, например правильный круг, может быть корректно определено с помощью В-сплайна только в том случае, если этот сплайн является рациональным. В Maya круги и поверхности вращения не являются строго круглыми. Чем большее количество интервалов использовалось для их получения, тем лучше приближение. Но точный круг может быть получен только с помощью рациональных В-сплайнов. Круглый участок, созданный с помощью небольшого числа интервалов, имеет не идеальный вид, в то время как рациональный элемент всегда точно повторяет
128
Глава 6 • Форматы
форму круга и состоит строго из нужного количества интервалов. Пример показан на рис, 6.7. Рациональная геометрия в Maya или импортируется из другой программы или создается с помощью языка MEL и интерфейса API. Встроенные же средства этого приложения не позволяют создавать ничего подобного.
Рис. 6.7. Сравнение нерациональных и рациональных В-сплэЙное
На этом закончим обсуждение сущности неоднородных рациональных В-сплайнов и перейдем к разговору о моделировании на их основе.
Прямолинейная топология Предшествующее обсуждение в основном относилось к кривым, но изложенные принципы применимы и к поверхностям. Впрочем, основным отличием кривой от поверхности является наличие еще одного измерения — V-координаты. Благодаря двум параметрическим U- и V-координатам, топология NURBS-поверхностей всегда прямолинейна вне зависимости от их фактической формы. Такая топология означает, что сложные объекты обычно моделируются в виде сети прямоугольных поверхностей. Некоторые из них могут иметь стороны нулевой длины (так называемые вырожденные ребра), но топология все равно остается прямоугольной. Планирование эффективного расположения этих по-
NURBS-поверхности
129
верхностей может быть весьма нетривиальным, зато в итоге получается очень точная форма. Вследствие этой топологии деталь, необходимая в одной области, должна быть продолжена через всю поверхность. Каждый ряд управляющих точек полностью перекрывает поверхность. Области высокой детализации иногда могут быть локализованы путем выделения и редактирования фрагментов большой поверхности. Но при этом должна быть сохранена непрерывность, то есть необходимо оставить один или несколько рядов управляющих точек,
Обрезка Удобным в подобной топологии является то, что NURBS-поверхности легко поддаются обрезке. Для обрезки параметрической поверхности требуется определить границу в пространстве U- и V-координат. Такая граница обычно создается проецированием кривой на поверхность или вычислением места пересечения двух поверхностей, но существуют и другие методы. Эта граница должна делить поверхность на отдельные области. При этом форма поверхности остается неизменной. Операцию обрезки очень легко отменить, так как граница среза может быть просто удалена. Обрезка особенно ценна при разработке точных скругленных форм. Фаски и скругления создаются с учетом свойства непрерывности, не оказывая влияния на форму соседних поверхностей. Разумеется, приходится идти на компромиссы при выборе минимально возможной точности, позволяющей избежать видимых зазоров между поверхностями. Обрезка поверхностей потребуется вам при подготовке ниш для колес у автомобилей в проекте «Место для парковки», так как изменением формы крыла в этом случае не обойтись. Разумеется, существуют студии, не практикующие обрезку поверхностей. По большей части это связано с тем, что в отличие от самой NURBS-поверхности параметрические границы невозможно контролировать с помощью управляющих вершин. Управляющие вершины кривой обрезки фактически существуют в параметрическом пространстве поверхности, соответственно, деформации поверхности перемещают управляющие вершины линии обрезки в другое пространство, что практически неизбежно приводит к нарушению целостности вдоль ребер обрезанной поверхности,
Гладкие поверхности Другой важной характеристикой NURBS-поверхностей, без сомнения, является их гладкость. Эти поверхности являются математически определенными сущностями, которые потенциально могут обрабатываться и визуализироваться с любой точностью. Любая пара U- и V-координат из диапазона, покрывающего рассматриваемую поверхность, связана с определенной точкой этой поверхности. К любой точке поверхности, исключая точки тангенциального разрыва, можно провести нормаль. Для объяснения этого факта сначала поговорим о непрерывности.
130
Глава 6 • Форматы
Заданный по умолчанию порядок непрерывности между интервалами NURBSкривой или NURBS-поверхности на единицу меньше порядка уравнения, задающего эту кривую или поверхность. Это значение представляет собой число существующих непрерывных производных. Оно записывается ь виде СО, Cl, C2 и т. д., впрочем, вам эти обозначения вряд ли о чем-нибудь скажут. Проще думать о непрерывности как о поочередно совпадающих коэффициентах изменения кривизны. NURBS-поверхность, описываемая уравнением любой степени, в узловых точках является позиционно непрерывной (СО). Уровень изменения положения определяется углом наклона. Соответственно, линейная поверхность (описываемая уравнением первой степени) в отличие от поверхностей более высокого порядка не гарантирует непрерывности производной (С1) в узловых точках. В свою очередь, производной от наклона является кривизна, или курватура, поверхности. Поэтому, хотя поверхности второго порядка имеют непрерывность первого порядка (С 1) в узловых точках, непрерывность второго порядка (С2) у них уже отсутствует. Для ее получения требуются уже поверхности третьего порядка и т. д. Кстати, порядок непрерывности уменьшается на единицу для каждого повторяющегося значения узловой точки. Поэтому точка тангенциального разрыва возникает на кубической NURBS-поверхности, если в узловом векторе три раза подряд появляется один и тот же узел. Первое повторение уменьшает непрерывность с С2 до С1, а после второго повторения остается только непрерывность нулевого порядка (СО). Так как непрерывностей меньшего порядка не существует, следующее повторение приводит к разрыву поверхности.
Д еформ и руемость Порядок непрерывности NURBS-поверхности может не только существовать вдоль внутренних узловых точек, но и устанавливаться по отдельным поверхностям. Значения параметров на поверхности, по существу, являются частью последовательного диапазона, но в случае с отдельными поверхностями такой гарантии нет. Для подобной ситуации терминология должна быть несколько иной. Непрерывность будет выражаться в геометрических соотношениях GO, Gl, G2 и т. п., как показано на рис. 6.8. Задача поиска такого расположения точек, при котором выполняются условия непрерывности, усложняется по мере увеличения порядка поверхности. К счастью, в Maya для этой работы существуют специальные инструменты. Говоря в общих чертах, для достижения геометрической непрерывности требуется последовательное выравнивание управляющих точек и получение определенного соотношения на общей границе. Практически во всех случаях это — тривиальная операция по изменению параметров соседних поверхностей, в процессе которой устанавливается параметрическая непрерывность (Сп), в то время как геометрическая непрерывность (Gn) уже существует. Для моделирования обычно хватает геометрической непрерывности, но при назначении материалов возникает необходимость и в параметрической непрерывности. Однако, добившись желаемой непрерывности вдоль границ поверхности, вы вовсе не гарантируете, что NURBS-поверхность можно будет деформировать нужным образом.
131
NURBS-поверхности
Рис. 6.8. Условия геометрической непрерывности
В действительности, если узловые векторы для рассматриваемых поверхностей имеют описанную ранее форму множественных узловых точек, при деформации, скорее всего, появится сморщивание или разрыв, как показано на рис. 6.9. Это связано с тем, что соотношение между соседними управляющими точками только геометрическое, и деформация его меняет. С другой стороны, если на границах поверхностей отсутствуют множественные узловые точки, необходимое соотношение непрерывности включает наложение соседних управляющих точек друг на друга. Деформация в равной мере воздействует на эти наложенные друг на друга точки, поэтому соотношение непрерывности сохраняется, как показано на рис. 6.10. Впрочем, имейте в виду, что обычно Maya не создаст подобных поверхностей (хотя потенциальная возможность для этого имеется). Не все соотношения непрерывности являются точными. Например, соотношения вдоль границ фаски приблизительны. В общем случае, при деформации обрезанных поверхностей практически гарантирован разрыв, поэтому не стоит использовать этот метод для моделирования гибких объектов. Исключение можно сделать для случая, когда условие непрерывности вычисляется отдельно для каждого кадра. Иногда моделирование на основе NURBS-поверхностей выглядит полной противоположностью моделированию на основе полигонов. Однако имеется и промежуточный вариант...
Глава 6• Форматы
132
Рис. 6.9. Вид поверхности с множественными узловыми точками в районе шва после деформации
Иерархические поверхности Гладкие NURBS-поверхности крайне привлекательны, но то же самое можно сказать о гибкой топологии сеток полигонов. Формат иерархических поверхностей является, по своей сути, новаторским смешением обеих технологий.
Гибкая топология плюс иерархия Основное правило топологии сеток полигонов применимо и к топологии сеток иерархических поверхностей. Вершины и ребра таких сеток должны располагаться с учетом положения соседних элементов, ребро не должно быть общим для трех граней и более, векторы нормалей двух смежных граней не должны быть направлены в противоположные стороны и т. п. Существенно, чтобы сетка была ориентирована единообразно и не требовала лишних данных. В некотором смысле это большее ограничение, чем в случае с полигонами, но это единственный способ создать сетку более высокой целостности,
Иерархические поверхности
133
Рис 6.10. Вид поверхности сеянными узловыми точками в районе шва после деформации
Однако в случае иерархических поверхностей к сетке полигонов добавляются две важные характеристики: предельная поверхность и иерархический уровень детализации. Предельная поверхность является основным источником широких возможностей формата. Грани сетки делятся определенное количество раз, пока не будет получен нужный уровень детализации. Впрочем, у этой процедуры существуют ограничения. Она осуществляется до момента достижения некоторого заранее указанного предела, например величины новых граней. В Maya для четырехугольных полигонов используется схема разбиения, известная под названием схемы Катмул—Кларка (Catmull—Clark). Несмотря на сложность ее описания, разобраться в некоторых получаемых с ее помощью результатах не составит труда. Во-первых, исходная сетка разбивается на четырехугольные грани. Фактически после первого уровня разбиения сетка оказывается составленной исключительно из четырехугольников. К тому же количество вершин, в которых сходятся больше или меньше четырех граней, ограничено числом вершин, присутствовавших в исходной сетке. Другими словами, структуру новой сетки можно предсказать практически немедленно, как показано на рис. 6.11.
134
Глава 6 • Форматы
>
Рис. 6.11. Результат разбиения сетки
Во-вторых, предельная поверхность, полученная из прямоугольного массива четырехугольных граней, идентична поверхности, созданной на основе однородных В-сплайнов с такой же исходной сеткой (рис. 6.12). Эти сведения будут крайне полезны при разработке эффективной сетки. Имейте в виду, что в области внутри прямоугольного массива управляющих точек визуальные артефакты обычно не появляются (разумеется, при условии разумного расположения этих точек). Знание того, что такие области будут вести себя как неоднородные рациональные В-сплайны, облегчает опытным разработчикам NURBSповерхностей операции объединения нескольких сеток. Однако Maya углубляет эту схему, добавляя к иерархическим сеткам еще один иерархический уровень детализации. Так как такие поверхности по своей природе являются продуктом последовательного уточнения, каждый следующий уровень детализации можно сделать редактируемым. Другими словами, вы можете работать не со всей сеткой целиком, а выбрать тот уровень данных, который требуется изменить. В результате появляется мощный механизм добавления деталей к иерархической сетке и манипуляции ими, наследующий информацию с предыдущих уровней. При этом образуется компактная структура данных, позволяющая вносить
Иерархические поверхности
135
уточнения в модель, включая высокоуровневые изменения. При работе с подобными сетками использование иерархии требуется далеко не всегда (существуют дополнительные методы повышения детализации), но во многих случаях этот механизм является просто бесценным. mm '••"'•- •'•'• :•<"•**> шщ
^'з н-i * «; -1 -
И *$ы>$*$ •*.-
* ^
MS*
-••>•
mm
Рис. 6.12. Эквивалентность NURBS-поверхности и предельной иерархической поверхности в прямоугольной области
Если требуется вся сетка базового уровня, нужно решить, как осуществить переход от ее грубых областей к более детальным. Преимуществом подобного подхода может стать лучшая оптимизация размера сетки и возможность работать со всеми данными одновременно. Кроме того, существуют созданные сторонними производителями инструменты, позволяющие соединять выходные данные узла сетки полигонов с входными данными иерархической поверхности, что дает в результате потенциально более совершенный рабочий процесс. Недостатком этого метода является сложность получения сетки без артефактов. Выбор варианта представления деталей объекта может быть основан на личных предпочтениях, требованиях взаимодействия и особенностях модели. Более подробно мы познакомимся с различными вариантами иерархических поверхностей чуть позже.
136
Глава 6• Форматы
Тангенциальная непрерывность Типологическая гибкость иерархических сеток является столь действенной благодаря тангенциальной непрерывности. Тангенциальная непрерывность позволяет работать с картами смещений благодаря гарантии, что нормали к поверхности также являются непрерывными. Это очень важно, поскольку дискретные нормали приводят к разрыву поверхностей в процессе смещения. В случае NURBS-по верхи остей легко понять, что представляет собой нормаль, потому что это всего лишь векторное произведение тангенциальных векторов U и V, Однако так как для сеток полигонов не существует встроенного параметрического пространства, процесс вычисления нормали к иерархической сетке неочевиден (для этого можно использовать векторы ребер). Впрочем, в данном случае по-настоящему важен лишь тот факт, что благодаря тангенциальной непрерывности нормали к поверхности не только существуют, но и, в свою очередь, являются непрерывными. Это предположение не выполняется только на полюсах поверхностей, полученных путем вращения. В Maya такие модели не одобряются как раз из-за «исчезающих нормалей» (рис. 6.13), причиной появления которых является обращение в ноль продольного вектора (несмотря на то, что поперечный вектор при этом отличен от нуля). Это может создать трудности при визуализации, но на полюсах тем не менее существует предельная поверхность, да и значение нормалей там можно получить, например, как предельное значение соседних нормалей.
Рис. 6.13. Артефакты на полюсах, связанные с исчезновением нормалей
Иерархические поверхности
137
Существует обходной прием по борьбе с артефактами на полюсах, а также но их перестройке, но следует помнить, что при этом происходит изменение формы поверхности. Для некоторых пользователей такое ограничение вполне допустима, другие же не желают с ним мириться. Еще одним следствием тангенциальной непрерывности является возможность легко создавать плавные границы. Обычно построение таких границ даже проще создания фасок для NURBS-поверхностей. Этим методом вполне можно воспользоваться, когда требуются границы, которые могут быть легко описаны с помощью однородного В-сплайна третьей степени. Если границу можно сконструировать в области, без проблем покрываемой прямолинейной сеткой, вы сможете сделать ее гладкой. Разумеется, для создания идеально круглой границы или для ее обрезки по диагонали относительно остальных ячеек сетки все равно потребуется прибегнуть к NURBS-поверхностям. Желаемая тангенциальная непрерывность может быть «сведена на нет» появлением складок. Ребра и вершины иногда образуют складки, как показано на рис. 6.14, что приводит к тангенциальному разрыву. Если наличие резких граней или пиков нежелательно, можно частично смять их (это делается пропуском на определенных итерациях операций разбиения поверхности),
Рис. 6.14. Не складчатые, частично складчатые и полностью складчатые ребра
138
Глава 6 • Форматы
Не забыли, что прямоугольные области сетки ведут себя точно так же, как однородные NURBS-поверхности? И что NURBS-поверхность третьего порядка имеет непрерывность второго порядка (курватурную непрерывность)? Так вот, иерархические поверхности в подобных ситуациях также обладают непрерывностью второго порядка. Многие модели, созданные таким методом, обладают курватурной непрерывностью. Но так как основной причиной применения иерархических поверхностей обычно является их топологическая гибкость, вполне можно считать, что эти непрямоугольные области обладают только тангенциальной непрерывностью.
Назначение материалов Иерархические поверхности в плане назначения проекционных координат аналогичны сеткам полигонов. Впрочем, существует множество возможностей сопоставить такой поверхности проекционные координаты непосредственно в момент ее создания. К тому же большинство этих поверхностей создаются из сеток полигонов или из NURBS-поверхностей, координаты которых они наследуют. Процессы сопоставления проекционных координат иерархической сетке и сетке полигонов аналогичны за одним исключением. При увеличении детализации для иерархической сетки применяются более сложные правила преобразования координат. Впрочем, с точки зрения процесса моделирования они эквивалентны. Кроме того, нормаль к вершинам иерархических сеток не определена, так как они функционируют скорее как управляющие точки NURBS-поверхЕтости, чем как вершины сетки полигонов. Нормали предельной иерархической поверхности не направлены вверх и не интерполируются как грани полигона. В действительности они являются геометрическим свойством предельной поверхности. Поэтому, хотя вершины иерархической сетки могут иметь проекционные координаты, у таких сеток нет нормалей к вершинам, как у обычных сеток полигонов.
Выбор метода моделирования поверхности Итак, после сравнения различных форматов моделирования пришло время принять решение по поводу моделей в проекте «Место для парковки». Сразу можно сказать, что некоторые объекты имеет смысл моделировать на основе сеток полигонов. Нам требуется короткий фильм с как можно меньшим количеством искажений, самым очевидным из которых является визуальное проявление граней. Неровностей NURBS-поверхностей избежать также не удастся, но модель можно отредактировать во время визуализации, в то время как сгладить сетку полигонов будет намного сложнее. То есть моделирование на основе сеток полигонов замечательно подходит для начальных стадий, но существует не так уж много объектов, для которых этот формат будет фигурировать в качестве основы окончательной формы.
Выбор метода моделирования поверхности
139
Персонажи Для моделирования персонажей без сомнения нужно использовать иерархические поверхности, так как модели на основе сетки полигонов будут либо слишком грубы, либо слишком сложны для обработки из-за избытка данных. В то же время в NURBS-моделях очень непросто избавиться от разрывов. Детали моделирования каждого персонажа могут различаться, но конечным результатом будет иерархическая поверхность. Основную часть работы по созданию одежды персонажей также, скорее всего, имеет смысл выполнить с помощью иерархических поверхностей, хотя для имитации тканей может потребоваться сетка полигонов. Для моделирования ботинок и пояса главного героя вполне можно было бы использовать NURBS-поверХности, но мы обойдемся иерархическими поверхностями.
Автомобили Автомобили в проекте «Место для парковки» в соответствии с разработанным планом имеют длинные плавные линии. Как и в случае с любой машиной, важным критерием качества поверхности являются блики и отражения. Так как на автомобиль главного героя зрители будут обращать особое внимание, модель, показанная на рис. 6.15, должна быть по возможности идеальной.
Рис. 6.15. Дизайн автомобиля
Вдобавок этот автомобиль будет наблюдаться с различных ракурсов, поэтому его требуется смоделировать полностью. Однако дизайн выполнен несколько карикатурно, что позволяет при необходимости вносить в модель мелкие изменения. Нам не требуется создавать рекламный ролик настоящего автомобиля, поэтому реалистичностью можно пожертвовать в угоду производительности. Кроме того, для проекта требуется несколько автомобилей, вид которых можно оперативно подправлять, как показано на рис. 6.16. Для этого достаточно поменять вид бампера, решеток, ручек и т. п. Впрочем, могут потребоваться и изменения кузова. В соответствии с этими требованиями кузов автомобиля имеет смысл модел ировать на основе NURBS-поверхностей. Однако большинство декоративных дегалей лучше всего создавать с помощью иерархических поверхностей, тем более что
Глава 6 • Форматы
140
это самый легкий путь получения плавных границ. Благодаря наличию блестящих стекол и расположению камер под небольшими углами не нужно будет прорабатывать внутренний интерьер автомобиля.
Рис 6.16. Альтернативный вид автомобиля
В большинстве своем машины будут окрашены однородно, поэтому параметризация поверхности не имеет большого значения. Зато для шин и колес потребуются проекционные координаты, поэтому эти объекты нужно моделировать на основе NURBS-поверхностеЙ. Мы планируем немного сдавить шины, но это можно будет сделать с помощью специального деформатора, Для проекта потребуется также создать автомобиль контролера платной стоянки. Но к счастью, автомобиль контролера будет виден только спереди, поэтому модель можно сделать достаточно простой.
Пожарный гидрант На первый взгляд пожарный гидрант выглядит классической NURBS-моделью. Так как гидранты должны быть сверхпрочными, они обычно состоят из крупных деталей со значительными радиусами граней. В зависимости от окончательного дизайна, гидрант может быть смоделирован как путем комбинирования NURBSповерхиостей и иерархических поверхностей, так и исключительно с применением последних. Желобки на поверхности можно смоделировать, но можно и создать их имитацию назначением соответствующего материала. При этом, очевидно, что корпус гидранта представляет собой NURBS-поверхность. Затем ее можно преобразовать
Другие возможности моделирования
141
в сетку полигонов, то же самое сделать для патрубков, соединить патрубки с корпусом с помощью логических операций и преобразовать конечный результат в иерархическую поверхность. Впрочем, это можно решить на месте. Но, по крайней мере, можно быть уверенным, что цепочки на крышках будут NURBS-поверхностями.
Витрины магазинов Витрины магазинов представляют собой практически плоскости, поэтому их можно моделировать на основе сеток полигонов, но существуют и аргументы против этого. Во-первых, хотелось бы избежать появления в сцене объектов с ненатурально резкими границами. Во-вторых, наличие параметрической поверхности облегчает назначение материалов. Например, текстуру кирпичей намного проще расположить на поверхности объекта с встроенными проекционными координатами. Поэтому витрины будут моделироваться на основе NURBS-поверхностей. Кроме того, плоские NURBS-поверхности часто являются линейными в одним или в обоих направлениях. Это упрощает их параметризацию (в большинстве случаев от 0 до 1) и облегчает процесс редактирования. Можно перетащить управляющие точки ребер в нужные места, не беспокоясь о том, что за ними остались другие управляющие точки, и операция перетаскивания разрушит параметрическое пространство. Такие объекты, как двери, нависающие окна и некоторые стены, можно получить из иерархических поверхностей. Это даст возможность легко создать плавные границы и упростит процесс назначения материалов.
Другие возможности моделирования Несмотря на огромное количество объектов, которые могут быть созданы модел ированием на основе сеток полигонов, NURBS-поверхностей и иерархических поверхностей, существуют модели, а также их части, для получения которых лучше подходят другие методы. Впрочем, они не являются методами моделирования в традиционном смысле этого слова. Фактически полученные с их помощью объекты становятся полноценно видимыми только после визуализации. Но так как мы планируем использовать их для создания некоторых элементов сцены, о них также требуется упомянуть в этой главе.
Эффекты рисования Деревья, растущие вдоль тротуара, можно смоделировать на основе иерархических поверхностей, NURBS-поверхностей или сеток полигонов, но в Maya существует привлекательная альтернатива всем этим форматам — модуль Paint Effects (Эффекты рисования). В данном разделе мы не будем обсуждать детали его использования. Имеет значение только тот факт, что скорость создания разнообразной растительности с помощью этого модуля намного превосходит скорость создания
142
Глава 6 • Форматы
соответствующих моделей обычным образом. От вас практически не потребуется усилий для оснащения сцены впечатляющими деревьями и травой. Кроме того, в Maya 5 появилась возможность преобразовывать полученные таким способом объекты в сетки полигонов.
Капли воды К концу ролика пожарный гидрант будет открыт. Не нужно говорить, что при этом из него начнет бить мощный поток воды. Сразу понятно, что традиционным моделированием здесь не обойтись, в сцене должны появиться частицы, Большинство этих частиц будут двигаться совершенно свободно, но некоторым из них предстоит столкнуться с поверхностью и стечь по ней вниз. Детали создания подобной модели будут обсуждаться в соответствующей главе, а пока имеет смысл упомянуть лишь о том, что для этой задачи лучше всего подходят сферические частицы. Сферические частицы — это вовсе не то же самое, что неявные поверхности, или блобы1, упоминавшиеся в начале главы. В Maya не поддерживаются блобы, которые можно было бы использовать для моделирования непосредственно в сцене, а вот возможность визуализировать частицы в виде сф>ер имеется. Хотя таким способом тоже получаются неявные поверхности, диапазон их применения крайне ограничен. К счастью, такие частицы замечательно подходят для моделирования капель воды,
Волосы и мех Собака в сцене будет покрыта шерстью, человек — волосами, и хотелось бы, чтобы то и другое выглядело натурально. С этой задачей превосходно справится модуль Maya Fur (Имитация меха). Хотя, наверное, можно было бы оставить главного героя сцены лысым или создать для него пластиковый каркас, имитирующий волосы, но это была бы низкопробная подделка, не говоря: уже о рисовании меховой шубы для Кляксы. Именно поэтому персонажи будут моделироваться без волос, а затем их вид довершит модуль Maya Fur (Имитация меха).
Заключение В Maya существуют три основных формата моделирования: сетки полигонов, NURBS-поверхности и иерархические поверхности. Каждый из них имеет свои сильные и слабые стороны и предназначен для решения определенных задач. Все вместе они предоставляют разработчику возможность выбора, хотя для этого требуется понимать природу каждого из форматов. Для некоторых моделей во главу угла ставится возможность деформации. Для других важен точный контроль над формой. Третьи требуют максимальной производительности при минимуме возможных изменений в геометрии. На выбор 1
В оригинале соответственно «blobby particles* и «blobby surfaces». — Примеч.ред.
Заключение
143
влияют и такие факторы, как время моделирования и потраченные на него усилия, легкость последующего назначения материала и существующий набор инструментов. Разумеется, благодаря возможности преобразования моделей из одного формата в другой можно не ограничивать себя одним форматом. И вне зависимости от того, будет ли для создания модели использован один формат, комбинация разных форматов или преобразование из одного формата в другой, в Maya существует возможность выбора среди хорошо разработанных и стандартизированных вариантов. Теперь, когда вы познакомились с различными форматами моделирования, поговорим о методах моделирования.
7
Методы
Процесс моделирования в Maya представляет собой, как правило, многократное выполнение одних и тех же стандартных приемов. В следующих главах мы займемся моделированием различных объектов и персонажей для проекта « Место для парковки», а пока поговорим об этих приемах, а также о стратегиях решения проблем, возникающих при выполнении практически любого проекта. Как говорил один опытный автомобильный дизайнер из Дейтройта, при создании законченной модели основное время тратится вовсе не на формирование больших поверхностей, даже если те полностью определяют внешний вид автомобиля, а на создание плавных переходов между ними, и это действительно так. С того момента прошло уже более 20 лет, и приложения для компьютерной графики усовершенствовались во всех отношениях. Визуальное богатство создаваемых сцен достигло уровня, который невозможно было представить раньше. Теперь люди не удивляются изображениям и эффектам, еще недавно казавшимся необычными и впечатляющими произведениями немногочисленных и до ужаса дорогих дизайнерских студий того времени. Возможности компьютерной графики в наши дни неоспоримы, но одно было и остается неизменным — это проблема проработки деталей. Каким бы мощным ни было программное обеспечение, внимание к деталям определяет разницу между приемлемым и превосходным. Создание превосходных моделей требует учета бесчисленных мелких деталей и топологии. Для получения удовлетворительного результата при построении сложной модели, которая должна выглядеть точно так же, как на рисунке, потребуется строить, перестраивать, соединять, плавно сопрягать, сглаживать, скруглять и, что самое важное, внимательно рассматривать. Как скульптор изучает инструменты, приемы и стратегии, позволяющие придать камню желаемую форму, так и вы будете знакомиться с методами работы в Maya. Техника работы скульптора быстро становится его второй природой, то же самое произойдет с вашей техникой моделирования в Maya. В этой главе вы изучите методы, которые авторы обычно используют для создания моделей. В том числе будут рассмотрены следующие темы: О выбор опорных материалов; о настройка опорных изображений; О работа с сетками и слоями;
Вспомогательные образы
145
О получение плавных границ; О устранение открытых концов; О создание и заполнение отверстий, Мы не ставим своей целью описать все существующие приемы работы в Maya (такое описание способно само по себе занять целую книгу), а всего лишь хотим указать на различные подходы к решению проблем, возникающих в ходе выполнения проектов. Но, пожалуй, наилучшим уроком стало бы осознание того факта, что для решения любой проблемы моделирования в Maya имеется множество альтернативных путей.
Вспомогательные образы Перед тем как пуститься в путешествие, желательно ясно представлять себе его конечную цель. При выполнении проекта в Maya необходимо тщательно прорабатывать ключевые элементы и действовать в соответствие с выбранным планом. Как бы ваши проекты ни отличались от описываемого, в них, несомненно, присутствуют модели, которые требуется разработать, и ряд ограничений, которые требуется соблюсти. Заманчивая перспектива двигаться вперед, несмотря ни на что, скорее всего, приведет в тупик. Во всех случаях, кроме самых простых, желательно убедиться, что вы полностью представляете себе будущую модель и имеете некий опорный материал. Когда вы поймете, что наличие опорного материала не угрожает, а помогает вашему собственному видению сцены и чувству пропорции, это намного упростит работу над сценой. В конце концов, на первый план выходят качество полученной модели и безукоризненная точность дизайна. Если сразу настроиться на получение конечного результата, работать над сценой будет проще.
Получение опорных материалов Пришло время решительно приступить к делу. Вы вооружены необходимыми инструментами и имеете исходную идею или небольшой набросок будущей сцены. Слова художника-постановщика: «В сцене требуется пожарный гидрант» — вовсе не означают, что вы знаете, как именно должен выглядеть этот самый гидрант. Здесь не обойтись без опорных материалов, Нужно четко представлять себе объекты, которые вы пытаетесь смоделировать, поэтому старайтесь в свободное время собирать о них сведения.
Реальные объекты Самым лучшим источником информации являются окружающие нас объекты, Большинство вопросов, возникающих в процессе моделирования, исчезают маги ческим образом, стоит всесторонне исследовать воспроизводимый объект. Если вам предстоит смоделировать автомобиль, попытайтесь заставить худож ника-постановщика приобрести его для вас (только представьте, как вам повезло!). Если предстоит работа над пожарным гидрантом, также не помешает иметь его под рукой (разумеется, при условии, что вам не придется таскать его на своем
146
Глава 7 • Методы
горбу). Если не удается найти реальный объект, можно приобрести его модель (это намного проще в случае автомобиля, чем в случае пожарного гидранта). Ну и, наконец, когда подобную модель невозможно купить или точно воспроизвести на бумаге, может быть, кто-то сможет сделать ее для вас. Наличие в качестве опорного материала объекта или хотя бы близкой к нему копии значительно облегчает процесс моделирования. К сожалению, мы не нашли автомобилей и пожарных гидрантов, конструкция которых соответствовала бы замыслу нашего проекта. В подготовленном нами списке объектов нам реально было доступно ничтожно малое их количество. Впрочем, у одного из наших друзей была собака (далматинец), так что мы могли получить представление хотя бы о том, как двигаются собаки.
Фотографии Неплохо также иметь фотографии объектов, которые вы собираетесь моделировать. Ни у кого из наших знакомых не было автомобиля модели Delahaye 135 М 1937 года выпуска, который послужил прототипом конструкции автомобиля главного героя нашей анимации, соответственно, у нас отсутствовала возможность непосредственно увидеть этот объект. Поэтому было решено ограничиться фотографиями. Благодаря навыкам поиска в Интернете мы быстро получили множество фотографий этой машины. В случаях когда пожарный гидрант требуется лишь в качестве фона, изобразить его очень легко. Но в нашей анимации это — один из центральных объектов. Поэтому пришлось снова прибегнуть к поиску в Интернете, приведшему нас на сайт firehydrant.org, «спрятанный!- в дебрях Всемирной паутины. Именно там мы обнаружили более тысячи фотографий разнообразных пожарных гидрантов. Несколько образцов удалось также найти на соседней улице — оставалось их только сфотографировать. Такого количества информации было вполне достаточно, чтобы составить представление об объекте (рис, 7.1).
Рис. 7.1. Варианты конструкции пожарного гидранта
Разумеется, это была самая простая часть работы. Когда мы пересмотрели несколько сотен различных конструкций, то обнаружили, что найти объект, подходящий по стилю к нашему проекту, практически невозможно. Тем не менее мы продолжали загружать из Интернета все новые и новые изображения разновидно-
Вспомогательные образы
147
стей пожарного гидранта, чтобы иметь представление о пропорциях и деталях этого объекта. Дальнейшие размышления о проекте подвигли нас на поиск изображений де йствующего гидранта. В реальной жизни это — достаточно редкое зрелище, поэтому мы старательно искали нужные снимки на сайте firehydrant.org, но поиск оказался безуспешным. В конце концов, один из нас решился написать по электронной почте веб-мастеру этого ресурса. На следующий день мы получили вежливый ответ о том, что приведение в действие пожарного гидранта — дело далеко не безопасное. В следующем письме мы объяснили проблему, сопроводив объяснения убедительной просьбой. К нашему изумлению парой дней позже мы получили набор снимков, которые были сделаны специально для нас и демонстрировали пожарный гидрант в действии (рис. 7.2).
Рис. 7.2. Струя воды из открытого пожарного гидранта
Пример с пожарным гидрантом иллюстрирует не столько наше обаяние, сколь ко один из способов легко добывать необходимые фотографии. Подобный поиск с теми же прекрасными результатами был проведен в отношении автомобилей и счетчиков оплаченного времени на стоянках. В результате основой для моделирования каждого из объектов стало объединение опорных рисунков и фотографий, причем наличие последних значительно ускоряло работу. Проработку деталей при наличии хороших снимков выполнить проще, чем вы думаете. Поэтому не забывайте фотографировать детали. В конце концов, именно они придают модели достоверность и колорит. Например, знаете ли вы, что боль щинство гаек на клапанах пожарного гидранта делаются пятигранными, чтобы максимально затруднить хулиганам их откручивание?
Подготовка иллюстраций Иногда лучшие опорные материалы — это качественные рисунки. Хорошо, если вы относитесь к счастливчикам, которые могут заказывать иллюстрации у талант-
148
Глава 7 • Методы
ливого художника. Такой художник в состоянии подчеркнуть важные детали, сопроводить рисунок необходимыми примечаниями и тем самым помочь воплощению ваших идей. Тот, кто сам является не только модельером, но и дизайнером, уже на старте имеет значительное преимущество. Впрочем, в любом случае вы скоро убедитесь, насколько полезными являются качественные иллюстрации. Обычно требуются ортографические проекции объекта. Так как окна проекций в Maya по умолчанию показывают вид сверху, вид спереди и вид сбоку (справа), именно эти варианты вида моделей нужно нарисовать на бумаге. Раскраска при этом не нужна, потому что она мешает составить правильное представлен ие о форме объекта и его границах. При моделировании объектов, созданных руками человека, имеет смысл поискать в Интернете сайты их производителей. В особенности это касается тех объектов, для которых можно найти чертежи (как тот же пожарный гидрант). У нас были рисунки некоторых объектов будущей уличной сценки, например изображение автомобиля (рис. 7.3). Хотя большинство объектов моделируется в достаточно свободной манере, мы хотели максимально корректно воспроизвести основные элементы конструкции.
Рис. 7.3. Типичная иллюстрация
Наброски главного персонажа показаны на рис. 7.4. Разумеется, оправдать недобросовестную проработку деталей можно ограниченным бюджетом, однако желательно с самого i тчала иметь ясное представление о том, как должен выглядеть нужный объгк]
149
Вспомогательные образы
Рис. 7.4. Варианты персонажа
В процессе выполнения проекта нам предстоит узнать еще немало интересного, а эти наброски будут напоминать нам о наших первых творческих порывах. Сейчас еще непонятно, насколько тщательно должны моделироваться одежда, черты лица, руки и волосы, но общее направление работы уже определено.
Сканирование изображений Основным доводом в пользу ортографических проекций является возможность их использования в качестве опорных изображений. Эти изображения лучше всего рисовать черными линиями на белом фоне. Соответственно, нет особого смысла задействовать фотографии, так как они обычно имеют невысокую контрастность и не самые удачные ракурсы (хотя часто это лучше, чем ничего). При подготовке опорных изображений исключительно для моделирования сканирование должно выполняться в оттенках серого. По мнению авторов, приемлемый баланс между детализацией снимка и размером файла может быть получен при разрешении 100 dpi. Помимо всего прочего, это еще и облегчает вычисления, Чтобы полученное после сканирования изображение было лучше видно в окнах проекций, его нужно «подчистить». Для этой цели обычно используют приложение Adobe Photoshop. 1. Для начала изображение нужно преобразовать в 8-разрядную шкалу оттенком серого, если оно находится в другом формате. 2. Если снимок был отсканирован с большим разрешением, воспользуйтесь командой Image t Image Size (Изображение * Размер изображения), чтобы уменьшить размер фотографии и задать удобное разрешение в 100 dpi.
150
Глава 7 • Методы
3. Выберите команду Image > Adjustment > Levels (Изображение > Коррекция > Уровни) для установки черной и белой точек, как показано на рис. 7.5. Это расширяет средний диапазон цветов таким образом, что все пикселы, находящиеся ниже уровня черного, становятся черными, а все пикселы, располагающиеся выше уровня белого, становятся белыми. Таким способом обеспечиваются высокий уровень контрастности и подчистка (в некоторой степени) стертых мест и пятен. Если тона среднего диапазона слишком тусклые или размытые, используйте средний ползунок для гамма-коррекции,
Рис. 7.5. Коррекция уровней в Adobe Photoshop
4. Сохраните файл под новым именем (на всякий случай). Исходный результат сканирования стирается только после завершения работы над опорными изображениями. 5. Если исходное отсканированное изображение назвать widgetScanRaw.tif (raw — сырой, необработанный), то единственное подправленное изображение логично именовать widgetScan.tif. А если существует несколько проекций, к названию присоединяется соответствующая буква, например^ widgetScanF.tif — для фронтальной проекции. Если различные проекции подготовлены на одном листе, выполните в Photoshop их обрезку и сохраните в виде отдельных изображений, 6. Далее нужно слегка подправить изображения, удалив все, что может затруднить распознавание рисунка через сетку. 7. Отредактированный, высококонтрастный, компактный рисунок в оттенках серого сохраните под именем widgetF.tif. Разумеется, вы можете выбрать другой формат, но TIF-файлы при достаточно компактных размерах обеспечивают сжатие без потерь.
Вспомогательные образы
151
Настройка опорных изображений Процесс настройки опорных изображений в Maya очевиден. 1. Чтобы использовать отсканированный рисунок в качестве опорного изображения, выделите камеру, через которую он будет наблюдаться, и откройте диалоговое окно Attribute Editor (Редактор атрибутов) на вкладке узла формы камеры, выбрав в меню окна проекции команду View > Camera Attribute Editor (Вид > Редактор атрибутов для камеры). Щелкните на кнопке Create (Создать) в разделе Environment (Окружение) — откроется доступ к элементам управления, необходимым для настройки атрибутов опорного изображения. В поле Image Name (Имя изображения) укажите маршрут доступа к нужному графическому файлу. Мож'-ю также воспользоваться командой View > Image Plane > Import Image (Вид > Опорное изображение > Импорт изображения) меню окна проекции, но авторы рекомендуют первый способ. 2. Чтобы опорное изображение не выделялось на общем фоне, нужно настроить фон рисунка в соответствии с фоном окна проекции, в нашем случае — со светло-серым фоном (R = G = В = 0,75). Для этого щелкните на цветовом образце Color Gain (Масштабный коэффициент цвета), чтобы открыть диалоговое окно Color Chooser (Выбор цвета), перейдите к цветовой схеме HSV и введите в поле Value (Интенсивность) значение 0,5. Повторите ту же операцию для цветового образца Color Offset (Смещение цвета), только на этот раз значение параметра Value (Интенсивность) должно равняться 0,25. В результате изображение потускнеет, а белый фон станет серым, что замечательно подходит для изменения геометрии. 3. Теперь перейдите в диалоговое окно Channel Box (Окно каналов). Именно с его помощью можно узнать, где именно в пространстве сцены находится плоскость изображения. Обычно требуется, чтобы она располагалась на противоположной от камеры стороне координатной сетки, так как в противном случае ора скроет сетку. При необходимости введите нужное значение в поле Center (Центрировать), соответствующее оси наблюдения выделенной камеры, чтобы сместить опорное изображение за нужную плоскость сетки. ВНИМАНИЕ Не пытайтесь использовать опорное изображение как плоскость отсечки, потому что вы все равно сможете выделять расположенные за ним объекты, даже если не будете их видеть.
4. Придайте изображению нужный размер путем равномерного масштабирования, то есть, поменяв ширину и высоту на одну и ту же величину. При этом оказывается очень полезной координатная разметка исходного рисунка, особенно n:j его длине. Обычно имеет смысл делать видимой сетку, за которой располагается опорное изображение, чтобы придать последнему корректные размеры. СОВЕТЕсли выделить в диалоговом окне Channel Box (Окно каналов) несколько имен каналов и перетаск^ • вать указатель мыши в окне проекции при нажатой средней кнопке, значения выделенных каналов будут меняться одновременно. Выбрав в меню окна каналов команду Channels > Settings > Invisible Manips (Каналы > Настройки * Скрыть манипуляторы), вы легко выполните равномерное масштабирование, которое может потребоваться при изменении размеров опорного изображения.
152
Глава 7- Методы
5. Теперь, когда опорное изображение имеет корректный размер, остается только настроить значения двух оставшихся полей Center (Центрировать), чтобы поместить рисунок точно на нужное место. 6. После этого можно сохранить сцену с расширением 0, указывая тем самым, что это файл начальной настройки. Если в сцене присутствует несколько опорных изображений, они легко перекрываются. Поместите их друг за другом, используя значение в поле Center (Центрировать), соответствующее оси, направленной в окне проекции на наблюдателя, Существует возможность легко настроить видимость опорных изображений. Для этого производится поиск по ключевому слову imagePlane*., а затем по очереди меняется значение атрибута displayMode для каждого из найденных элементов: global proc tgllPO { string $allPlanes[] = 'Is 'ImagePlane*'': for (tthisPlane In Sailplanes) { SdMode = Clnt) 'getAttr (thisPlane+ p .displayMode')'; int SnewMode = (int) ($dMode
}
Осталось только сопоставить этому сценарию клавиатурную комбинацию.
Планирование работы Итак, в чем же состоит планирование? Может показаться, что эту стадию допустимо пропустить, перейдя сразу к моделированию. Однако опыт показывает, что несколько минут, потраченных на выработку стратегии, могут стоить вам нескольких часов, потраченных впустую.
Основные этапы Для начала требуется решить, каким способом будет создан объект — на основе сеток полигонов, NURBS-поверхностей, иерархических поверхностей или же комбинации перечисленных подходов. Для моделирования персонажей обычно лучше подходят иерархические поверхности, так как персонажи имеют нерегулярную структуру и подвергаются многочисленным деформациям. Здания проще всего строить на основе NURBS-поверхностей, однако иерархические поверхности тоже будут кстати. Впрочем, как мы уже выяснили в предыдущей главе, выбирать метод моделирования можно бесконечно. Представив окончательный вид объекта, пару раз мысленно проведите моделирование. Иногда для этого достаточно одного метода, а иногда результат проще всего получить преобразованием одного типа поверхности в другой. В качестве примера непосредственно получаемых моделей можно привести двери магазинов; в то время как верхняя часть счетчика оплачиваемого времени превращается в иерархическую поверхность, только пройдя стадии NU RBS-поверхности
Планирование работы
153
и сетки полигонов. Кроме того, можно запланировать изменение формы изначально четких моделей путем применения деформаторов или перемещения управляющих точек. Нужно также решить, как сделать модель редактируемой. Наша жизнь немыслима без изменений, поэтому планировать создание объектов нужно таким образом, чтобы их вид можно было при необходимости поменять. При осмотре реального прототипа модели старайтесь вообразить очередность построения ее отдельных частей. Можно даже попытаться непосредственно нарисовать линии сетки или границы поверхности. Особое внимание нужно уделять соединению основных элементов друг с другом и созданию плавных границ.
Вспомогательные элементы Лучше всего сканировать трехмерные объекты, так как в этом случае вы сразу получаете правильные пропорции модели, но, к сожалению, не у всех есть доступ к сканеру. Тем, кто не в состоянии получить изображение модели в цифровом виде, остается прибегнуть к грубой аппроксимации готового объекта. В любом из этих случаев имеет смысл использовать опорные изображения, создавая полезные шаблоны, на основе которых можно сконструировать модель. Как правило, после получения трехмерного опорного изображения или модели-заместителя можно немедленно создать слой предварительной визуализации, а также особый конструкционный слой, предназначенный для хранения полезных элементов конструкции моделей после их использования. Так как именование слоев ничем не отличается от именования объектов, необходимо как-то выделить их в особую группу, например, с помощью определенного суффикса или префикса. В большинстве случаев объекты, расположенные в этих слоях, находятся в режиме Template (Шаблон), как показано на рис. 7.6. Исключением являются случаи, когда их нужно использовать повторно. Часто для создания трехмерной опорной геометрии прибегают к пересечению поверхностей или к проецированию кривых на поверхность. Полученные таким способом кривые используются в качестве шаблонов. Также они хорошо подходят в качестве мишеней привязки при построении параметризованных трехмерных кривых, хотя в этом случае сначала требуется выйти из режима Template (Шаблон), Компоненты, которые можно объединить в одну группу по какому-либо признаку (например, внутренний интерьер автомобиля), также имеет смысл размещать в отдельных слоях. Поскольку каждый слой выделяется своим цветом, это создает проблемы при использовании цветов для других целей, например для разбиения сетки или разделения поверхностей. По этой причине имеет смысл создавать слои, только полностью разобравшись в структуре модели. Те же, кто не собирается раскрашивать вспомогательные объекты, могут смело создавать слои на любой стадии. При моделировании промышленных объектов применяйте сетки. Привязка к сетке управляющих точек делает процесс выравнивания кривых и поверхностей делом достаточно тривиальным и в значительной степени решает проблему непрерывности. Если вам часто приходится работать с сетками, имеет смысл создать отдельную полку для вызова сеток с различными параметрами (например, как пс казанонарис. 7.7),
Глава 7 • Методы
154
SEW IB'-:
5*.;Ы
BrUtll
-.
йй 1«
GiUI/IE
trie 1 Л .
ЙЛЛ-Ч'
LltflnD
Рис. 7.6. Объект в режиме Template Значки и текст:
Только текст: кмгпг
. •
.
Ui«4
ч*»- l;:ri@ti#|
Рис. 7.7. Два варианта полки для вызова сеток различного размера
По умолчанию Maya сохраняет положения и размеры в сантиметрах, но пользователь может выбрать и другие единицы измерения. При этом следует помнить, что выбор сетки нужно осуществлять в соответствии с метрической системой, использовавшейся для построения объектов.
Советы Начинайте моделирование с тех объектов, процесс построения которых вы представляете наиболее четко. Верхняя часть счетчика оплачиваемого времени является крайне сложным объектом, зато его нижняя часть достаточно проста, поэтому
Проработка деталей
155
именно с нее можно начать. Моделировать автомобиль еще сложнее, но, начав с колес, можно вдохновить себя на дальнейшие подвиги. Чтобы облегчить процесс создания крыла автомобиля, постройте нужные кривые поверх опорного изображения в окне проекции Side (Вид сбоку), а затем отредактируйте их таким образом, чтобы они соответствовали опорному изображению в окне проекции Front (Вид спереди). Даже если вы не уверены в точной форме капота, наверняка известно, что он располагается по центру. Вы как будто складываете головоломку, и уже известная вам информация помогает заполнять пустующие области. Создание кривых с совместимой параметризацией облегчает дальнейшие операции с иерархическими поверхностями. Если вы собираетесь выполнить выдавливание отдельного участка сферы, сначала смоделируйте сферу, состоящую из нужного числа сегментов. Помните, что поверхности необычной формы обычно требуют особой обработки, поэтому сначала приведите в порядок базовую топологию, а затем уже приступайте к окончательной отделке,
Проработка деталей Многие модели состоят из типовых деталей. Другими словами, вам не требуется каждый раз придумывать их заново, хотя, разумеется, строить их все равно придется. В этом разделе мы поговорим о таких распространенных проблемах, как получение плавных границ и устранение открытых концов. Эти проблемы являются топологическими. Если вы поймете, что именно требуется сделать, вам будет намного проще определить пути решения.
Получение плавных границ Большинство объектов имеет плавные границы. Практически не существует объектов, края которых выглядят резкими, а число объектов, края которых являются резкими, и того меньше. Проще говоря, мы привыкли видеть свет, отражающийся от плавных границ, и именно такие блики требуется воспроизводить в ходе моделирования. Чтобы понять, как выглядят плавные границы, достаточно поработать с NURBSкривыми. Перемещением управляющих точек можно точно воспроизвести нужную форму NURBS-поверхности или иерархической поверхности. Как вы знаете, близко расположив несколько точек, вы уплотните проведенную через них кривую. При построении модели важно правильно выбрать количество управляющих точек и правильно их расположить. Чрезмерное количество точек не только утяжеляет модель, но и затрудняет формирование гладких фрагментов объекта. Мы начнем с рассмотрения NURBS-поверхностей и различных способов работы с ними, а затем перейдем к сеткам полигонов и иерархическим поверхностям,
Распределение управляющих точек Две управляющие точки, даже расположенные непосредственно одна над другой, не помогут создать острый пик из кривой второго порядка. В то же время три TOV-
156
Глава 7 • Методы
ки, расположенные подобным образом, сформируют отчетливый угол. Хотя кажется, что эти два случая охватывают все возможные варианты кривизны, на самом деле, это не так. Проблема в том, что важен не только радиус кривизны, но и форма кривой. Нужно учитывать положение кривой, ее направление, кривизну, а возможно и скорость изменения кривизны. Уравнения кривых не имеют особого значения, главное — получить в результате требуемую форму. СОВЕТ Под термином «сопряжение» (fillet) подразумевается внутренний скругленный угол, в то время как термин «скругление» (round) обозначает внешний скругленный угол. Операция скоса (bevel) позволяет создать фаску вдоль кривой, полученной в результате пересечения поверхностей. Некоторые используют эти термины взаимозаменяемо. Результаты сопряжения и скругления геометрически идентичны, вто время как фаски явно отличаются от них. В то же время результат скоса сетки полигонов идентичен результату сопряжения и скругления иерархической поверхности.
Для придания корректной формы большинству скругленных углов требуется от двух до пяти точек. Решающими факторами являются форма соседних участков и плавность кривой. Формирование угла с помощью пяти точек позволяет сохранить плоскую форму соседних участков, локально связывает узловые точки угла и придает его внутренней части круглую форму. При этом вы можете легко поменять радиус угла путем изменения положения управляющих точек относительно центральной точки. Если объект имеет небольшие скругленные углы при протяженной поверхности, для формирования этих углов можно использовать пять точек. А если стороны объекта являются достаточно длинными, промежуточные управляющие точки можно просто удалить, это никак не повлияет на вид модели. Используйте привязку к сетке, чтобы обеспечить равномерное распределение трех управляющих точек на каждом конце и выравнивание плоских сторон, как показано на рис. 7.8. С углами на трех точках приходится работать чаще, особенно если в скругление вовлекаются протяженные участки. Это хорошо работает и в случаях, когда угол нужно скруглить, не заботясь о точном радиусе кривизны. Смежные углы на трех точках соединяются плоскостью (особенно если между ними были добавлены промежуточные точки) с сохранением нужной кривизны углов. Радиус кривизны постепенно растет, и скругленная поверхность становится плоской. Впрочем, подобной формы можно достичь и при построении угла из пяти точек, но граница с прямым участком будет контролироваться немного хуже. Большинство скругленных углов в рамках нашего проекта строится по трем точкам. Особенно это касается архитектурных деталей. Угол из двух точек может иметь плоские стороны только после создания дополнительных коллинеарных управляющих точек. Возможности регулировки радиуса кривизны такого угла ограничены, а его масштабирование (в этом случае он является скорее гиперболой) представляет собой достаточно сложную задачу, Углы на четырех точках отличаются от двухточечных углов возможностью регулировки радиуса кривизны. Подбором интервалов между дополнительными управляющими точками можно создать скругленный угол с постоянным радиусом кривизны. Кроме того, пара смежных углов на четырех точках может быть соединена плоскостью.
157
Проработка деталей
«•; <;!«:«• -:, 6-M-uJ
. ц*мч
»У=тп|;
ШИШ &""* ;("»i/W
Рис. 7.8. Варианты топологии сгругленных углов
Знание основных вариантов расположения точек поможет вам получить правильную топологию с первого раза.
Операция присоединения При моделировании на основе NURBS-поверхностей создание гладких, скругленных границ между поверхностями может быть выполнено с помощью операции присоединения. Поскольку при этом происходит слияние двух поверхностей в одну, прибегать к данной операции можно только при гарантированном отсутствии дальнейших проблем (например, связанных с зависимостью процедуры назначения материала от существующих параметров). В большинстве случаев при соединении поверхностей с помощью команды Attach Surfaces (Присоединить поверхности) выполняется сопряжение, при котором проис ходит усреднение границ двух управляющих сеток, так как в группе Attach Method (Метод присоединения) установлен переключатель Blend (Сопряжение). Для лучшего соединения краев поверхностей можно указать значение параметра Blend Bia;s (Смещение сопряжения). Отличные от нуля значения используются, когда две поверхности имеют значительно различающуюся кривизну. Впрочем, в большинстве случаев происходит равномерное сопряжение одной поверхности с другой, при это\: удаляются управляющие вершины ребер и усредняются управляющие точки касательных.
Глава 7 • Методы
158
Эта операция не только устраняет любые разрывы (узловые точки поверхностей превращаются в одну внутреннюю узловую точку), но и выравнивает область соединения. Соответственно, как показано на рис. 7.9, операция разъединения поверхности на две с последующим их соединением не приводит к воссозданию исходной поверхности. « I i fc! ti <•• % &
ШЖ ""«•<•• ' мШШ "*»•"'
Две исходные кривые
Место \ разрыва '\ Удаленные управляющие точки
После разрыва (три кривые)
/'Место \ повторного^ . соединения' f
^ Усредненные; ^ управляющие, точки
Место соединения Посла соединения (одна кривая) ''В этом месте'; кривая стала более плоской
Разрыв был закрыт путем соединения
Рис. 7.9. Поведение кривых в процессе соединения
При использовании команды Attach Surfaces (Присоединить поверхности) обычно не обойтись без вставки дополнительных узловых точек, чтобы ограничить эффект изменения формы. В поле Insert Parameter (Параметр вставки) можно указать долю первого интервала каждой поверхности, на которой создается узловая точка. Если присвоить параметру вставки значение 0,1, новая узловая точка на длинном интервале будет вставлена дальше, чем на коротком. Чтобы добиться равномерного распределения управляющих точек на обеих соединяемых поверхностях, нужно либо начать с приблизительно одинаковых по размеру интервалов, либо компенсировать разницу масштабов с помощью поля Blend Bias (Смещение сопряжения). Команда Attach Surfaces (Присоединить поверхности) с неизбежностью объединяет в новой поверхности все соотношения, существующие между узловыми точками обеих поверхностей. Чтобы избежать избыточной плотности результирующей сетки, необходимо контролировать эквивалентность параметризации обеих поверхностей.
159
Проработка деталей
Это проще всего сделать путем моделирования поверхностей набором одинаковых U- или V-кривых. Копирование исходных кривых с последующим изменением их формы исключительно путем манипуляции управляющими точками позволяет сохранять одинаковые интервалы между узловыми точками. Существует еще один несложный способ сохранения однородности поверхности вдоль соединяемых границ — применение команды Rebuild Surfaces (Перестроить поверхности). При этом нужно убедиться, что соединяемые поверхности имеют одно ито же количество управляющих точек. Лучше сначала добиться выполнения этого условия (путем удаления или вставки управляющих точек), а затем осуществить равномерную перестройку, установив флажок Keep CVs (Сохранять управляющие точки). В простом примере со счетчиком оплачиваемого времени (рис. 7.10) плавного сопряжения удалось добиться настройкой смещения сопряжения, что позволило скомпенсировать различную длину касательных.
< . .йТФ1 ?• •?•»*-
1. Соединение '. . . симметричных; - •ПОЛОВИНОК.
'., Соединение двух полос
Сглаженная граница соединения (потребовалась вставка дополнительных узловых точек).
Рис. 7.10. Пример соединения поверхностей при моделировании счетчика оплачиваемого времени
Приблизительная оценка значения, вводимого в поле Blend Bias (Смещение сопряжения), осуществлялась с помощью соотношения В - (А + В) для интервалов длины А и В соответственно. Затем происходило соединение поверхностей при установленном флажке Insert Knot (Вставить узловую точку). Вы должны уметь пред-
160
Глава 7 * Методы
видеть результат, получаемый при различных значениях параметров Blend Bias (Смещение сопряжения) и Insert Parameter (Параметр вставки). Благодаря команде Attach Surfaces (Присоединить поверхности) удается добиться непрерывности второго порядка у итоговой поверхности и устойчивости этой поверхности к деформациям, Если вам потребуются отдельные поверхности, достаточно выделить изопараметрическую кривую вдоль нужного шва и выполнить разъединение.
Использование грубой силы Группу команд сопряжения поверхностей лучше оставить для ситуаций, когда добиться совместимости границ NURBS-поверхностей достаточно сложно. Сопряжение обычно применяется для «тяжелой» геометрии, так как создание касательных этим методом сродни использованию грубой силы — смещение поверхностей, создание кривых в каждой узловой точке, расположенной на их пересечении, лофтинг и детализация с помощью промежуточных кривых, вплоть до достижения нужного результата. Бот так выглядит основная идея метода. Этот способ создания плавных границ избавляет вас от необходимости контролировать параметризацию поверхностей. Для команд Freeform Fillet (Произвольное сопряжение) и Fillet Blend (Смешанное сопряжение) совпадающие значения параметров могут дать хорошие результаты, но лучше всего использовать эти команды для сглаживания нерегулярных пересечений между поверхностями. Иногда это единственный способ получить плавную границу, не меняя форму соединяемых фрагментов. Недостатком операций сопряжения является зависимость от обрезки поверхностей. Если история конструирования сохранена, можно будет анимировать и деформировать сопряженные компоненты, хотя сложности с изменением проекционных координат на стыке могут оказаться непреодолимыми. Если история отсутствует, имейте в виду, что на стыке поверхностей при деформации непременно образуется разлом. Другим недостатком этих команд является появление избыточных данных. Сопряженные поверхности сами по себе быстро становятся достаточно «тяжелыми», а кривые на месте стыка только добавляют данные. Операции сопряжения подходят для статических объектов, для которых крайне важна форма поверхности. Главное — не ждать от этих команд больше, чем они могут дать.
Создание плавных границ вручную Если требуется смоделировать объект с плоскими поверхностями, разделенными одинаковыми скругленными краями (примером такого объекта может быть игральная кость или дверь), в большинстве случаев проще всего выполнить сопряжение этих поверхностей вручную. Лучше всего, когда плоские поверхности параллельны координатным плоскостям. Сопряжение требует тангенциальной непрерывности, поэтому один интервал поверхности третьего порядка имеет все необходимые управляющие точки (мы предполагаем, что параметризация поверхностей является совместимой). Соответ-
Проработка деталей
161
ственно, если поверхность позволяет создавать плавные границы вручную, этим желательно воспользоваться. Конструирование скругленных объектов не стоит начинать с куба, лучше брать в качестве основы сферы, цилиндры или при необходимости окружности. Если для вас округлость важнее простоты касательных, используйте примитивы, состоящие из восьми интервалов, располагая их по окружности (то есть один интервал на 45°). Эти примитивы имеют достаточную округлость и обеспечивают места отрыва в основных направлениях. Смысл подхода состоит в разделении примитивов на части, а затем состыковки ребер путем лофтинга, как показано нл рис. 7.И.
1. Разбиение сферы на часта и размещение этих частей в нужных местах.
Рис. 7.11. Создание объекта со скругленными участками вручную
Простой скругленный куб имеет 8 углов, 12 ребер и 6 граней. Его можно легко создать из сферы. 1. Разделите сферу на восемь частей и поместите эти части в нужные места, 2. Выделите изопараметрические кривые? соответствующих ребер и методом лофтинга создайте между ними еще 12 ребер. 3. Наконец, создайте шесть поверхностей между ребрами, чтобы завершить построение объекта.
162
Глава 7 * Методы
Усилия по созданию симметричных объектов можно минимизировать путем зеркального отражения и копирования. Подобную конфигурацию имеют многие модели. Иногда более сложные объекты с плоскими концами (например, бордюр или части пожарного гидранта) можно легко получить путем выдавливания вокруг каждого конца четырехугольного скругленного профиля с последующим закрытием образовавшихся отверстий.
Разделяй и властвуй Команда Attach Surfaces (Присоединить поверхности) для полигональных и иерархических поверхностей, по сути, выполняет операцию объединения, после которой следует привязка к точкам и слияние вершин. Если объект, который требуется деформировать, нельзя смоделировать па основе одной поверхности, лучше всего воспользоваться командой Attach Surfaces (Присоединить поверхности). Существует множество способов конструирования плавных границ у иерархических поверхностей, но все опять-таки упирается в совпадение числа управляющих точек у NURBS-кривой, В конце концов, за управление персонажем на границах отвечают именно расположенные вдоль этих границ управляющие точки, В вашем репертуаре должно быть несколько методов, позволяющих правильно их разместить. Вспомните, что в случае сеток четырехугольников иерархические поверхности эквивалентны поверхностям, построенным на основе однородных В-сплайнов, Благодаря этому можно создавать иерархические поверхности из полигональных сеток, в свою очередь полученных преобразованием из NURBS-поверхностей. В результате можно видеть, какой фрагмент поверхности подходит больше всего, а также получать соприкасающиеся ряды точек, возникающие за счет выполнения операций третьего порядка над NURBS-поверхностью. Если эти ряды точек не нужны, их можно легко удалить, однако для создания гладких границ при сопряжении двух полигональных сеток они просто бесценны. Несмотря на наличие инструмента Split Polygon (Разбиение полигонов), позволяющего поместить один или два ряда управляющих точек вдоль границы, авторы предпочитают использовать сценарии facePathSplit Он проходит по рядам граней, разделяя их пополам, пока не доходит до развилки. Иногда он допускает ошибки, но их можно исправить вручную. А польза от данного сценария перевешивает возникающие из-за него проблемы. Так как сценарий facePathSplit делит грани только пополам — сходный инструмент multiLoopSplit от Микеля Джанса (Mikkei Jans) имеет ползунок, — иногда для получения нужного размера граней этот сценарий приходится запускать несколько раз, как показано на рис. 7.12. Сопутствующие сценарии facePath и edgePath замечательно подходят для выделения лишних граней с последующим их удалением. Они также полезны при выполнении операции Extrude (Выдавливание). Начиная с версии Maya 4.5, в меню Edit Polygons (Правка полигонов) появилась команда Cut Faces Tool (Разрезать грани), которая позволяет упростить создание рядов ребер, если эти ряды адекватно описываются планарным разрезом вдоль сетки полигонов. Данная команда также дает возможность делить случайные участки сетки.
163
Проработка деталей
,...,. , - • т*.
mm I.'.., Ки..-^!/
j'-.-Jr > , . .
,J . .
'.,
., ...
•..,-=.,.
.,...,. .,;..
ШШ ,
-,-,.
.'.
Г.Л.Ц1
Повторное
Рис. 7.12. Результат работы сценария facePathSplit
Создание кромки На ранней стадии обсуждения сценария проекта мы упоминали о том, что герой пытался отвлечь собаку с помощью палки. Идея не получила развития, тем не менее нельзя не отметить, что палка является замечательным объектом для испытания сценария edgePath. Ведь сценарий, как показано на рис. 7.13, позволяет легко создать гладкие границы на сетке полигонов, имеющей форму трубки, и аккуратно закрыть отверстия на концах. Чтобы закрыть конец трубки, состоящей из сетки полигонов, выполните следующие действия. 1. Для начала выделите ряд управляющих точек с помощью сценария edgePath, щелкнув на одном из ребер. Затем выберите в меню Edit Polygons (Правка полигонов) команду Extrude Edge (Выдавливание ребра), чтобы выдвинуть ряд управляющих точек вперед. Рекомендуем использовать для этой цели стан дартные преобразования Maya. Ведь нам всего лишь требуется немного выдвинуть ребро. 2. Снова используйте команду Extrude Edge (Выдавливание ребра), но вместо перемещения уменьшите масштаб ряда. Повторите эту операцию еще один или два раза, доведя масштаб центрального ряда управляющих точек до 0 (или выполнив их привязку к одной точке).
164
Глава 7 « Методы
• . • •.
,
• . -..: • •
i
•
•, - . . . • - - . , >..
.
.
.
.
Выделяются и мпампбирунлен горизонтальные ребра
Выделяются и масштабируются вертикальные
Рис. 7.13. Результат применения сценария edgePath СОВЕТ Чтобы уменьшить масштаб нескольких управляющих точек до 0, во-первых, выполните интерактивное масштабирование, отмените его, а затем вставьте обратно отмененную строку с добавленными вручную нулями; во-вторых, сгруппируйте управляющие точки в кластер, введите в поле Scale (Масштабировать) диалогового окна Channel Box (Окно каналов) значение 0, а затем удалите историю редактирования, чтобы уничтожить кластер. Чтобы вам было проще, мы включили в компакт-диск сценарий zeroScaleCVs, который решает указанную задачу.
Выполните слияние друг с другом всех вершин, оказавшихся в одной точке. Если управляющих точек слишком много, имеет смысл уменьшить плотность сетки, чтобы избежать сморщивания. После этого участок поверхности, призванный закрыть отверстие, будет готов. То же самое можно сделать с NURBS-поверхностью, создав гладкую поверхность на месте открытого конца, как показано на рис. 7.14. 1. Для начала нужно решить, сколько дополнительных рядов управляющих точек вам требуется (обычно три или четыре). Для их создания воспользуйтесь инструментом Insert Isoparams (Вставить изопараметрическую кривую). 2. Измените масштаб центрального ряда до 0. Это вовсе не означает закрытия отверстия или слияния управляющих точек в одну; вы просто пытаетесь объединить их в нужном месте.
Проработка деталей
- . •/:'•!••--••••..".'•.• - •••-,: -..'
165
!
•
• •
• '• .
1. Начните q открытого конца цилиндра. 2. Вставьте узловые точки.
--г-- , ^ 3. Уменьшите масштаб верхнего ряда.> 4, Переместите следующий ряд до высоты полюса ^*"щл и Ломеняцте. Яш егам^оитаб."
Рис. 7,14. Закрытие открытой трубки из NURBS-поверхностей 3. Измените масштаб следующего ряда таким образом, чтобы получить приемлемый наклон поверхности. В данном случае ряд точек должен лежать в одном плоскости с полюсом и быть симметричным относительно него. Этого проще всего добиться, поместив окружность подходящего размера и с нужным числом управляющих точек в область полюса и воспользовавшись привязкой управляющих точек поверхности к точкам этой окружности. 4. Выполните масштабирование остальных управляющих точек и переместите их таким образом, чтобы получить нужную форму поверхности, закрывающей отверстие. Обычно используют три управляющих точки для формирования угл i между трубкой и крышкой, но если требуется плавный переход между поверхностями, можно обойтись двумя или далее одной точкой. 5. Можно поменять параметризацию поверхности на однородную в том направ' лении, в котором происходило добавление интервалов, так как исходные значения параметров после операции вставки уже неприменимы. Не забудьте при! этом установить флажок Keep CVs (Сохранять управляющие точки). NURBS-поверхЕюсть, закрывающая отверстие, готова. Разумеется, тот же результат легко можно получить с помощью второй поверхности и команды Attach Surface (Присоединить поверхности). Для этого, как уже было описано ранее, нужно
166
Глава 7- Методы
продублировать границу поверхности, выделить ее управляющие точки, уменьшить их масштаб до 0, осуществит ь лофтинг, выровнять полученную поверхность и соединить полученный результат с оригиналом. Вне зависимости от способа получения скругленных границ они являются результатом размещения управляющих точек, которое практически всегда зависит от формы границы. Даже применяемая к иерархическим поверхностям техника создания складок, оптимизации в удаления складок подразумевает перемещение рядов управляющих точек поближе друг к другу,
Формирование скоса Итак, вы уже поняли, что существует множество способов добавить объектам скругленные ребра, но иногда при формировании ребер требуется не округлая граница, а скос под углом 45°. Обычно подобная операция осуществляется плотниками, когда необходимо совместить два куска дерева под прямым углом, Скосы присутствуют в оконных рамах, краях стола и т. п. В любом случае вам пригодится информация о том, как сформировать скос. Вот как можно создать оконную раму в виде единой поверхности. 1. Начните с создания кривой-профиля для вашей рамы. Профиль должен составлять половину от ширины окна. 2. Методом вращения создайте NURBS-поверхность, состоящую из 16 интервалов. Интервалов должно быть именно 16, так как вам нужно поместить по три управляющих точки в каждый угол, плюс еще по одной в середине каждой стороны. Позже эта поверхность превратится в раму. 3. Выделите области, выходящие под углом 45°. Обратите внимание, что если смотреть перпендикулярно оси вращения, они выглядят укороченными. Чтобы исправить ситуацию, воспользуйтесь операцией масштабирования. 4. Поменяйте масштаб выделенных управляющих точек, введя 1,0 для направления оси вращения и 1,4142 для остальных направлений, как показано на рис. 7.15. Последнее значение призвано компенсировать укорачивание, которое точно описывается косинусом угла поворота. То есть для компенсации поворота на 45° используйте величину I/cos 45° = 1/0,7071 = 1,4142. 5. Используйте клавиши со стрелками, чтобы выделить все четыре промежуточных каркаса (выделение каждого из них прибавляет 22,5°) на одной или на другой стороне. Выделив управляющие точки и зная угол их поворота, для компенсации дальнейших поворотов можно задействовать простое соотношение — единица, деленная на КОСИНУС угла. СОВЕТ Клавиши со стрелками позволяют выполнять навигацию по сцене, объектам и иерархии сеток.
6. Выделенные каркасы должны быть ориентированы так же, как и углы, поэтому измените их масштаб, как раньше, а затем поверните каждый из них на 22,5°.
167
Проработка деталей
Таким способом будет перекрыт первый набор каркасов, который вы поместили в углы,
я
Щ - ' ^- •• -^ И
й,-.« tea
<:я:л
г ,.* ...... .
• • .„vi
(ЩИ
• , - . : ! .
L
J -..
Измените масштаб управляющих точек угла, используя •••• коэффициент 1/cos45° = 1,4142
Рис. 7.15. Промежуточные углы оконной рамы
7. Выделите четыре противоположных каркаса, сделав два шага в любом направлении, затем измените их масштаб на ту же величину, что и на предыдущем этапе. Однако повернуть их нужно в противоположную сторону (они дополнят прежние каркасы, что приведет к появлению острых углов), 8. Напоследок отделите перекрывающиеся между собой каркасы в углах на вел] [чину некоторого «радиуса». Можно легко по очереди выделять перекрывающиеся ряды, перемещаясь по периметру сетки, и смещая их. Окончательный вид оконной рамы показан на рис. 7.16. Для регулировки размера рамы достаточно выделить управляющие точки на каждой стороне и переместить их. Рама очень проста, имеет гладкие границы и точную форму. Существуют другие подходы к моделированию рамы, например обрезка углов или создание 16-ти кривых и лофтинг замкнутой поверхности, но знание описанного подхода, основанного на прикладной тригонометрии, может оказаться весьма полезным при моделировании.
168
Глава 7 • Методы
-
... -
" '
1
"-. I ,a * | ;r> $ *. <*, & H
'
j
Рис. 7.16. Оконная рама, состоящая из одной поверхности
Создание впадин и выступов Попадание колеса в колдобину при поездке на автомобиле всегда неприятно и неожиданно. При этом колдобины но проектируются специально создателями дорог, дабы проверить вашу бдительность, а являются результатом воздействия тысяч и тысяч проехавших ранее автомобилей. Но при моделировании дорог в Maya за наличие колдобин отвечаете имепно вы (как и за интенсивность движения на дорогах, и за погодные условия и сцене). Вам нужно лично сформировать каждую впадину или бугорок, чтобы воплотить в жизнь задуманный сценарий. В этом разделе мы поговорим о приемах создания впадин и выступов, в которых используются и NURBS-геометрия, и геометрия полигонов.
Туннелирование Сквозное отверстие в объекте можно получить различными способами, в зависимости от формата модели, ее назначения и требуемой точности формы. Рассмотрим недостатки и достоинства различных подходов.
169
Создание впадин и выступов
Отверстия в NURBS-поверхностях Обычно при создании отверстия в NURBS-поверхности нужно, чтобы оно естественно интегрировалось в поверхность. То есть конструировать объект нужно таким образом, чтобы элементы одной стороны отверстия соответствовали элементам другой стороны. Как правило, это означает, что эти конструкционные элементы параметрически одинаковы с обеих сторон (вопросы параметризации рассматриваются в разделе «NURBS-поверхности» главы 6). В качестве простейшего примера в данном случае можно взять тор. Разумеется, модель тороидальной формы вовсе не обязана выглядеть, как баранка. В частности, подобную топологию имеет оконная рама, рассмотренная в предыдущем разделе. Если модель имеет только одно отверстие без дополнительных деталей, которые нужно внедрять в поверхность по периметру этого отверстия, ее можно создать методом вращения поверхности нужной формы, как показано на рис. 7.17.
т -,.;-..
••"'••
т
-. ..г^^ и,.. •
'
. ,
".
':•
•
У!ГТ:ГЗ;. Е •
5CZL
..
Ь*Й»м*"*й
Рис. 7.17. Модель, имеющая тороидальную топологию
Недостатком моделей, состоящих из единой NURBS-поверхности, является прямоугольная природа управляющих точек. Это означает, что каждое параметрическое направление будет содержать максимальное количество деталей сетки,
170
Глава 7 • Методы
необходимое для построения наиболее сложных участков. Крайние проявления данного эффекта можно видеть в модели головы человека, созданной из единой поверхности, которая начинается со рта, охватывает голову и в конце спускается на шею (рис. 7.18). Единая поверхность гарантирует непрерывность модели при деформациях, но работа с ней может стать настоящим кошмаром из-за большого «веса» сетки.
.
,
Рис. 7.18. Модель человеческой головы, полученная из единой NURBS-поверхносги
Обратите внимание, что подобные модели могут очень напоминать тор, хотя закрыты только с одной стороны. Форма внутреннего отверстия (проходящая через горло) тесно связана с формой внешнего отверстия (внешняя сторона шеи). Если есть возможность управлять подобной связью, модель с отверстием, созданная из единой поверхности, является весьма привлекательной.
Отверстия в сетках полигонов Тороидальную топологию достаточно легко конструировать в случае полигональных и иерархических поверхностей. 11ужно только убедиться в том, что форма разных концов тоннеля более-менее одинакова и что форма границ может настраиваться для придания тоннелю желаемой формы.
Создание впадин и выступов
171
ПРИМЕЧАНИЕ Инструмент Make Hole (Сделать отверстие) не обеспечивает визуальной связности отверстия и окружающих его полигонов, но может лишить вас доступа кряду важных управляющих функций, особенно если сетки полигонов используются для конструирования иерархических поверхностей. Именно по этой причине авторы не рекомендуют применять этот инструмент,
Например, при моделировании традиционной палитры художника, как показано на рис. 7.19, в полигональной модели можно легко создать отверстие для бол i>шого пальца.
<**•• ='?<*'"«- ^ I V& 'Ы*& ^^ •
.
-
.
•
.
• .
Рис. 7.19. Создание отверстия в сетке полигонов
1. Убедитесь, что одна или несколько граней верхней полигональной сетки соответствует одной или нескольким граням нижней сетки. 2. Выделите и удалите эти грани, 3. Используйте инструмент Append to Polygon tool (Присоединение к полигону), чтобы создать грани на боковых сторонах отверстия, 4. Используйте инструмент Split Polygon (Разбиение полигонов), чтобы создать вокруг отверстия все необходимые детали, Число отверстий, которые вы можете получить, определяется плотностью полигональной сеткн, поэтому у вас нет нужды ограничиваться тороидальной тслю-
172
Глава 7* Методы
логией. Чтобы сформировать стенки тоннеля, нужна одинаковая форма границ отверстия на обоих концах. Иерархические поверхности во многом ведут себя как NURBS-поверхности, поэтому полигональные сетки, определяющие их форму, будут выглядеть подобно соответствующим NURBS-сеткам. При создании круглого отверстия используйте то же самое количество и местоположение вершин полигона, что и в случае круглого отверстия в NURBS-поверхности. То есть отверстие в полигональной сетке из грани с четырьмя вершинами не будет круглым, в то время как отверстие из грани с восемью вершинами уже предоставляет шанс воссоздать нужную форму.
Пленарные отверстия NURBS-модели с большим количеством отверстий необходимо конструировать из нескольких поверхностей. Это наиболее частый случай для подобных моделей, и он полностью соответствует описанной выше технике для полигональных сеток. В рассмотренном случае с традиционной палитрой художника объект легко воссоздается в виде NURBS-модели вне зависимости от требуемого количества отверстий. Это связано с тем, что верхняя и нижняя части палитры являются планарными (плоскими). При создании тоннелей между планарными NURBS-поверхностями эти поверхности могут быть воссозданы после завершения работы над отверстием, как показано на рис. 7.20. 1. Создайте внешнюю границу палитры, например, тиснением профиля вокруг выбранного пути. 2. Тем же способом постройте внутреннюю границу, убедившись, что и верхняя и нижняя плоскости отверстия лежат в одной плоскости с внешней границей поверхности, 3. При наличии четкой линии между границей отверстия и границей палитры можно создать верхнюю и нижнюю поверхности с помощью инструмента Loft (Лофтинг). СОВЕТ Если в результате лофтинга имеет место скручивание, нужно либо изменить направление одной из кривых, либо воспользоваться инструментом Move Seam (Переместить стык) и ориентировать кривые таким образом, чтобы совпали эквивалентные узловые точки. Совпадение узловых точек кривых происходит в определенной пропорции, поэтому поверхность всшсе не обязана формироваться по кратчайшему расстоянию между ними.
4. При отсутствии четкой границы (или же в случае нескольких отверстий) нужно поделить конструкционные кривые для верхней и нижней поверхностей на сегменты с четкими линиями, которые могут быть соединены между собой методом лофтинга. В противном случае ваша поверхность будет пересекаться или перекрываться с другими поверхностями или сама с собой. Используйте инструмент Loft (Лофтинг) для формирования поверхностей, закрывающих все пустые области.
173
Создание впадин и выступов
-':•-' - . . . • ; ; j • . 1, | -.
.,-]
s
!
ff'lil I
"
:
Поверхности/кривые ра;з6иты так, чтобы было удобно управлять соответствием деталей
,,.,.,,
..„.:..
Рис. 7.20. Создание планарного NURBS-OTsepcnifl
СОВЕТ Для заполнения отверстий в недеформируемых плоских поверхностях применяются поверхно:ти первой степени. Их плотность в два раза меньше плотности кубических поверхностей, что в дальнейшем облегчает процесс редактирования.
Пленарные NURBS-отверстия всегда можно закрыть поверхностью с сеткой подходящей сложности, полученной методом лофтинга. Так как все поверхности параллельны друг другу, после визуализации не будет видно никаких швов в местах стыка. Впрочем, этот подход имеет свои недостатки. Во-первых, деформация полученных данным способом поверхностен обязательно приведет к появлению разлома. Во-вторых, усложняется назначение материалов, так как поверхность не имеет единого параметрического пространства,
Непланарные отверстия Для непараллельных NURBS-поверхностей иногда (но не всегда) также можно создать отверстие из поверхностей, плавно соединяющих обе стороны отверстия, В этом случае используется тот же подход, что и ранее. При этом дополнителы ое внимание уделяется контролю за непрерывностью поверхности. Многое зависит от ориентации противоположных поверхностей. В некоторых случаях сначала требуется создать границы поверхностей и соединить их ме:'о-
174
Глава 7 • Методы
дом лофтинга, как и в предыдущем случае, но установив в группе Surface Degree (Кривизна поверхности) переключатель Cubic (Третей степени). В других случаях можно начать с противоположных поверхностей, затем создать отверстие (по частям или сразу), а потом обеспечить непрерывность с помощью специальных команд. СОВЕТ Во всех случаях достичь оптимального результата можно путем совмещения парных узловых точек таким образом, чтобы при создании намеченных деталей сохранить плавность линий. По возможности используйте однородную параметризацию, при которой соответствие узловых точек полностью предсказуемо. Вы можете исследовать значения в узловых точках путем выделения точек редактирования и просмотра полученного результата в диалоговом окне Script Editor (Редактор сценариев) или сделать параметризацию однородной с помощью инструмента Rebuild Surfaces (Перестроить поверхности).
Ухабы и колдобины Не все отверстия должны быть сквозными. Многие из них представляют собой впадины, произвольно расположенные внутри других поверхностей и имеющие отчетливое дно. Может быть и наоборот, то есть могут существовать возвышения, которые с точки зрения топологии аналогичны впадинам. Для моделирования ухабов и колдобин подходят многие описанные выше приемы. Здесь же мы детально поговорим о двух наиболее распространенных из них: NURBS-сопряжении и логических операциях с полигонами.
Сопряженные отверстия Основным достоинством сопряженных отверстий является их независимость от ограничений, налагаемых формой обрезаемых поверхностей. До тех пор пока локальный радиус сопрягаемой поверхности меньше радиуса сопряжения, вы можете создать хорошее углубление. Подробную информацию по этому поводу можно найти в разделе «Использование грубой силы» в середине этой главы. ПРИМЕЧАНИЕ Радиус кривизны является мерой локальной кривизны кривой или поверхности. Правильная окружность или сфера имеет постоянную кривизну в любой точке, в то время как кривизна спирали снижается по мере удаления от ее центра. Радиус кривизны соответствует радиусу окружности, которая точно совпадает с кривой в выбранной точке,
Для получения поверхности с постоянным радиусом кривизны используйте круговое сопряжение. Если же требуется указать сопрягаемые границы, больше подойдет свободное сопряжение. В последнем случае иногда можно найти способ непосредственно задействовать границы поверхностей и вручную сконструировать поверхность, способную выдержать деформацию. Хотя обрезанные поверхности требуют особого внимания при визуализации (из-за возможных разломов вдоль границ), они хорошо подходят для создания таких деталей, как ухабы и колдобины.
Создание впадин и выступов
175
ЗНИМАНИЕ Избегайте построения поверхностей непосредственно между обрезанными границами, полученными в результате сопряжения, потому что они будут иметь слишком большую плотность точек (э~о связано с тем, что границы обрезанных поверхностей параметрически не связаны друг с другом), а стык между прилегающими поверхностями будет столь же плотным, что и в случае стандартных обрезанных поверхностей.
Моделирование отпечатка ноги к грязи или на снегу, щели для монеты, рельефного узора протектора или пряжки туфель выполняется методом сопряжение, которое прекрасно подходит для создания впадин и выступов.
Формирование отверстий с помощью логических операций Для сеток полигонов аналогами операций сопряжения NURBS-поверхностей являются логические операции. Они позволяют легко добавлять или удалять фрагменты полигональных поверхностей. ПРИМЕЧАНИЕ Для NURBS-поверхностей также существуют логические операции, но использовать их не рекомендуется, так как они приводят к появлению не округлых, а резких границ на стыках поверхностей. Они могут оказаться полезными для быстрой сборки опорного объекта при проектных расчетах, но их вряд ли стоит применять для получения окончательной геометрии.
Для извлечения из поверхности фрагментов и образования отверстий замечательно подходит команда Difference (Вычитание), а для получения рельефа— команда Union (Объединение). Логические операции определяют, какую поверхность сохранить, а какую удалить, руководствуясь направлением нормалей, поэтому очень важно правильное расположение сетки. Для начала нужно обеспечить одинаковое направление всех нормалей. Это можно сделать с помощью команды Edit Polygons > Normals > Conform (Правка полигонов > Нормали > Согласовать). Затем, если вас не устроил результат логической операции (например, как показано на рис. 7.21), можно попытаться изменить направление нормалей с помощью команды Edit Polygons > Normals > Reverse (Правка полигонов > Нормали » Перевернуть). Нужно помнить, что результат операции Difference (Вычитание) зависит от оче редкости выделения поверхностей. Объект, выделенный вторым, вычитается иа объекта, выделенного первым. Поэтому при получении неожиданного результата можно попытаться изменить очередность выделения. СОВЕТ Можно легко переместить любой выделенный объект в конец списка выделенных объектов, выбрав его в меню Object (Объект) диалогового окна Channel Box (Окно каналов).
Логические операции с сетками полигонов приводят к простому пересечению их граней, а затем полученный результат сохраняется в виде одной сетки. Если вы собираетесь использовать сетку для получения иерархической поверхности, нужно убрать лишнее, так как грани вдоль границы пересечения оказываются связанными произвольным образом.
176
Глава 7 • Методы
Рис. 7.21. Неудачный результат вычитания
Для начала требуется изменить ребра каждой из сеток так, чтобы они располагались по возможности напротив ребер противоположной сетки. Это гарантирует, что непарные короткие сегменты будут находиться достаточно близко друг к другу. Затем внешние ребра удаляются с помощью команды Collapse (Свернуть) меню Edit Polygons (Правка полигонов) путем небольшого перемещения вершин, При этом надо пытаться сделать так, чтобы вершины с одной стороны от границы пересечения совпадали с вершинами с другой стороны. В результате получается чистая и привлекательная граница вокруг отверстия или проекции. При моделировании объектов для нашего проекта несколько раз потребуется применение логических операций к сеткам полигонов, так что вам предстоит познакомиться с ними более детально.
Заключение Успех моделирования во многом определяется вашим опытом в решении топологических проблем и в повышении эффективности. Чем дольше вы работаете с Maya, тем чаще будете обнаруживать, что выполняете моделирование знакомыми вам методами. Это приведет к ускорению процесса создания эффектных моделей. Вам
Заключение
177
придется сталкиваться как с проблемами общего плана, так и с достаточно нетривиальными задачами, но четкое осознание возможностей Maya позволит вам решить даже самые сложные из возникающих проблем, Выявление характерных ситуаций и выработка стандартных подходов к их решению даст вам возможность уделять больше внимания деталям и творческим аспектам проекта.
8
Наборы объектов
Для начала в любом проекте требуется определить местоположение объектов и персонажей. Камеры следует поместить в нужное место и нацелить в нужном направлении. Хотя многие начальные этапы работы над проектом могут выполняться параллельно, создание набора объектов является настолько существенным для дальнейших действий, что начнем мы именно с этого. В этой главе будут рассмотрены следующие темы; О О О О О
подготовительные операции; создание заместителей; создание основных объектов набора; создание архитектурных элементов; управление структурой набора.
Подготовительные операции Создание сложного набора объектов может показаться чрезвычайно трудной задачей. Требуется сконструировать дюжины (а то и сотни или даже тысячи) моделей, каждую из которых нужно установить на свое место и притгть ей определенный вид, Обычно любая модель должна в чем-то незначительно, а в чем-то очень сильно отличаться от своих соседей. Страшно даже подумать о подобной задаче. К счастью, люди обладают логическим мышлением. Любую проблему можно рассмотреть с различных сторон, найти полезные шаблоны и спланировать решение, постепенно двигаясь от простого к сложному. Разработка набора объектов вне зависимости от его назначения (это может быть как одна комната, так и целый город) обычно осуществляется «сверху вниз», Именно таким способом будет создан набор объектов для проекта «Место для парковки».
Планирование Набор объектов, который нам требовалось получить, определялся раскадровками, нуждами книги и нашими возможностями. Из-за ограниченности ресурсов мы
179
Подготовительные операции
Главные здания Магазин Зоомагазин игрушек
н Вода
Н т
Центральная улиц
решили остановиться на минимальном количестве объектов, которого было бы достаточно для воплощения сценария в жизнь и иллюстрации технических моментов. Все началось с изучения раскадровок для поиска необходимых элементов. Выяснилось, что нужно смоделировать улицу, тротуар и магазины. Так как контролер приближается издалека, улица должна быть достаточно длинной, чтобы Крутан успел вдоволь намучиться с собакой. Пытаясь выжать максимум из минимального набора объектов, мы решили, что двух кварталов должно хватить. Некоторое время поразмышляв над проектом, мы сделали в Photoshop черненой набросок, демонстрирующий расположение основных элементов (рис. 8-1).
Главная улица
Рис. 8.1. План расположения объектов в проекте «Место для парковки»
Подобное расположение объектов позволяет нацелить источник света в нужном направлении, обойтись небольшим числом зданий и прочих деталей городского пейзажа, а также освободить место для демонстрации неба и водяной струи, которая будет смоделирована с помощью модуля Fluid Effects (Эффекты течения) Пожалуй, важнее всего контролировать горизонт, так как набор объектов будет располагаться на улице. Итак, для нашего проекта был принят именно этот план.
Стандартизация Для успешной совместной работы требовалось прийти к соглашению и по повод\ ряда других деталей. Для начала было решено, что ось Z будет направлена вверх. Для проектов, выполняемых исключительно с помощью Maya, совершенно не важно, какая именно ось выступит в этой роли. Нужно всего лишь, чтобы члены группы заранее пришли к соглашению по этому поводу. Тогда в дальнейшем не потребуется приводить персонажей, отдельные объекты и их наборы в соответствие друг с другом. Выбор вертикальной оси имеет большое значение при обмене данными с другими приложениями. Разумеется, если вы уже вложили время и силы в построе-
180
Глава 8 • Наборы объектов
ние моделей с неверно выбранной осью, для успешной передачи данных достаточно просто сгруппировать их и повернуть группу на 90° вокруг оси X. Затем было решено, что все модели будут создаваться в соотношении один к одному, то есть в натуральную величину. В Maya можно легко перейти от одних единиц измерения к другим (например, от дюймов к сантиметрам), поэтому подобное решение не накладывает никаких ограничений. Вы можете использовать футы при построении зданий и дюймы при проработке архитектурных деталей, меняя линии сетки в соответствии со своими нуждами. СОВЕТ При разработке моделей (таких как наборы объектов) с очевидными размерами имеет смысл создать полку с кнопками для выбора различных вариантов сетки и различных единиц измерения (см., например, рис. 7.7 в главе 7). Это облегчит и ускорит смену единиц измерения и координатной сетки.
Безоговорочно было принято решение об ориентации объектов относительно сторон света, Если глядеть сверху, то север находится наверху, а запад— слева, Соответственно, глядя на сцену спереди, мы смотрим на север. Подобный выбор легко сделать, если над элементами сцены работает один человек (а именно так было в нашем случае). Однако если наборы объектов создает целая команда, а другие конструкторы добавляют отдельные объекты и персонажей, вряд ли стоит удорожать проект, ориентируя модели перед их применением. Напоследок требовалось определить начало координат и расположение объектов в нашем наборе. Хотя каждая модель создается в своем собственном пространстве, для набора было заранее зарезервировано место. Нам оставалось только прийти к соглашению по поводу ракурсов съемки. Так как все действия производились в относительно небольшой области, расположить оси X и Y было достаточно легко. Мы центрировали плоскость XY относительно места действия. Так как ребро тротуара в передней части стоянки удобно делит сцену вдоль оси Y, именно вдоль него мы расположили точки с координатой Y = 0, то есть плоскость XZ. Место для плоскости YZ было выбрано в центре стоянки. Положение нулевой координаты вертикальной оси Z было менее очевидным. Для начала было решено не связываться с наклонными улицами и тротуарами (реальные улицы и тротуары имеют небольшой наклон для стока воды), и мы сделали их совершенно плоскими. В конце концов, в наши цели не входило создание полностью реалистичной сцены. Наклонная улица затруднит анимацию автомобиля, причем эти дополнительные усилия никак не повлияют на общий замысел. Затем мы обнаружили, что для нулевого значения координаты Z есть несколько возможных мест. С одной стороны, персонажи большую часть времени проводят на тротуаре, поэтому достаточно разумно поместить плоскость XY на этом уровне. Благодаря вертикальному положению большинства персонажей их анимация не составит проблемы, однако все объекты, находящиеся на улице, будут иметь отрицательное значение координаты Z. С другой стороны, если опираться на положение автомобилей, можно было бы поместить плоскость XY на уровне улицы. В результате и улицы, и здания будут иметь положительное или нулевое значение координаты Z.
Подготовительные операции
181
Наконец, можно поместить плоскость XY на уровне «моря», расположенного к западу от места действия. В этом случае значения координаты Z всех остальны х объектов будут положительными. Так как действие происходит вдалеке от воды (впоследствии нам придется решать вопрос об изменении наклона пляжа), мы отказались от последнего варианта. Для простоты был выбран второй вариант с добавлением необходимого смещения при переносе действия на тротуар. Выбор ориентации объектов для данного проекта был достаточно простым, но в других проектах над этим, возможно, пришлось бы поломать голову. ПРИМЕЧАНИЕ Термины «набор», «фрагмент» и «сцена» очень часто применяются не по назначению, поэтому в большинстве случаев можно только надеяться, что их смысл понятен пользователю. Обычно под набором объектов понимается некое их местоположение, фрагмент означает одно непрерывное событие, заснятое на камеру (то есть последовательность нескольких кадров), а сцена — группу фрагментов, объединяющую различимые события, из которых складывается вся история. Разумеется, в Maya разница между этими терминами слегка размыта. Например, файлы называют сценами [что может быть как корректно, так и не очень, в зависимости от того, содержит файл один или несколько фрагментов). Так как наша история состоит только из одной сцены, мы будем использовать термин «сцена», поясняя, если он будет применяться в другом значении.
С полностью изолированными друг от друга наборами объектов можно работать по отдельности. Однако в случае больших и взаимозависимых наборов крайне важно определить абсолютную точку отсчета (и проверить, что отдельные фрагменты совмещаются нужным образом). Недостаток внимательности в этом случае приводит к дополнительным усилиям на состыковку несовпадающих элементов и изменение положения персонажей и второстепенных объектов. Для гарантированного совпадения элементов важно правильно выбрать единицы измерения. Смена единиц измерения вполне допустима при редактировгнии отдельных элементов, но при соединении объектов набора Друг с другом желательно использовать заранее выбранные единицы измерения и привязки к сетке. Хотя существуют и другие способы точного размещения соседних объектов, намного проще следовать стандартам, В нашем случае при моделировании набора объектов в качестве единиц изме рения будут использоваться дюймы в соответствии со стандартами, принятыми в США. В основном это повлияет на высоту тротуаров (и, соответственно, на значение координаты Z персонажей), впрочем, об этом нужно будет помнить при создании элементов набора, их копировании и размещении относительно друг друга.
Обмер Мы настолько привыкли к улицам, тротуарам и зданиям, что создается впечатление, будто их можно смоделировать без лишних хлопот. Однако вскоре обнаруживается, что простота этих объектов кажущаяся и, в частности, связана с их окружением. Точно так же, как полная луна или заходящее солнце выглядит больше.. чем обычно, масштабы улиц, тротуаров и зданий могут быть обманчивыми. Кроме
182
Глава 8 • Наборы объектов
того, при восстановлении конструкции по памяти можно упустить множество мелких деталей. Авторы моделировали подобные объекты множество раз, но обычно делали это по чужим инструкциям, которые забывались сразу же после завершения проекта. Поэтому для получения реальных данных мы посетили центральные районы города Петалума в штате Калифорния, предварительно вооружившись рулеткой и блокнотом. Вопреки всему нашему опыту некоторые предположения оказались совершенно неверными. Например, выяснилось, что высота тротуаров составляет не 8, как мы думали, а 6 дюймов, а ширина — не 3, а 4 фута. Аналогично водосток на краю бордюра имеет ширину не 1, а 2 или даже 4 фута. Таких примеров можно привести множество, Не ленитесь обмерять реальные объекты, даже если результаты замеров будут сведены «на нет* стилистическим эффектом. Иногда наши усилия приносят плоды, а иногда они оказываются напрасными. Какова высота двери? Насколько высоко расположена дверная ручка? Каков ее размер? Что находится у основания стены? А сверху? Насколько глубоко в стенном проеме располагаются окна и двери? Для ответа на эти вопросы достаточно произвести необходимые измерения. Разумеется, для многочисленных мелких элементов современного мира существуют стандарты. Некоторые из них можно найти в Интернете, другие в книгах, посвященных архитектуре. Источниками информации могут служить также каталоги соответствующей продукции. Используйте их, если вам лень обмерять объекты самостоятельно. Небольшая ошибка в измерениях не вызовет фатальных последствий, а вот многочисленные неточности дадут в результате совершенно неверную конструкцию, даже если зритель и не сможет сразу сказать, что в ней не так. Мы ничего не имеем против карикатур, но они должны отталкиваться от реальности. Если персонаж берется за дверную ручку, которая располагается на 6 футов выше, чем нужно, страдает вся анимация. Берите пример с Пикассо, который достиг мастерства в классическом изображении объектов, а только потом нашел собственный стиль,
Макетирование Для начала имеет смысл создать простой макет сцены. Постройте его для наглядности, не перегружая излишним количеством деталей. Ваша задача — сориентироваться и определить соотношения между отдельными объектами. Средний городской квартал имеет протяженность около 300 футов (на одну милю приходится примерно 18 кварталов), хотя возможны варианты (протяженность кварталов в центре Чикаго составляет от 330 до 660 футов). Ширина улицы колеблется от 10 до 12 футов. Так как моделировать дополнительные здания нам не нужно, предположим, что наши кварталы имеют протяженность 300 футов и разделены улицами, ширина которых составляется 50 футов. Для укладки тротуара мы использовали квадратные блоки со стороной 4 фута, поэтому, чтобы облегчить задачу, предположим, что радиус кривизны бордюра на углах улиц равен ширине тротуара, который в этом месте состоит из трех квадратов, то есть имеет ширину 12 футов.
Подготовительные операции
183
При необходимости эти размеры можно поменять. Но на данный момент нам нужно получить простой шаблон, который впоследствии будет использоваться в качестве опорного слоя. СОВЕТ Размещение опорной или конструкционной геометрии в отдельном слое помогает избежать переполнения сцены объектами. В то же время это позволяет сохранить простоту доступа к необходимым элементам.
Сначала собранная информация о городских улицах была сведена до необходимого минимума. Начав с плоскости земли, мы, как показано на рис. 8.2, поместили параллелепипеды на места будущих тротуаров и зданий, затем добавили параллелепипеды меньшего размера, соответствующие дверям и окнам. Для получения красивых плавных углов использовались четвертинки цилиндра с радиусом 12 футов и поверхностью сверху.
Рис. 8.2. Исходный макет для проекта «Место для парковки»
Подобные примитивные элементы позволяют быстро оценить масштабные соотношения в сцене и служат шаблонами для окончательных моделей. Чтобы долго не возиться, вы можете загрузить файл InitialMockup.ma, расположенный в папке ChapterOS прилагаемого к книге компакт-диска,
184
Глава 8 • Наборы объектов
Чтобы получить хороший обзор сцены, мы для начала установили камеры в погшцни, приблизительно соответствующие указанным в раскадровках, и посмотрели на полученный результат. Для фиксации этих позиций была использована команда New Bookmark (Создать закладку). После завершения компоновки сцены зафиксированные проекции, показанные на рис. 8.3, послужили отправными точками для каждого фрагмента. Для таких объектов, как пожарный гидрант, счетчик оплачиваемого времени, уличные фонари, деревья и автомобили, использовались простые заместители в форме параллелепипедов, что позволило приблизить сцену к реальности и получить представление о масштабе объектов.
Рис. 8.3. Предварительное расположение камер СОВЕТ Располагайте заместители там же, где будут находиться готовые модели, заменяя их по мере создания последних. Например, если счетчик оплачиваемого времени должен находиться в начале координат, там же следует поместить его заместитель. Это позволит в дальнейшем осуществить непосредственную замену объекта и избавит вас от необходимости компенсировать разницу в пространстве для моделирования.
Обустройство территории
185
Для оценки общего стиля сцепы были смоделированы дополнительные архитектурные детали. Отсутствие упоминаний о них в раскадровках дало возможность на ранних стадиях обойтись достаточно примитивным дизайном. Начальные результаты были достаточно обнадеживающими. Мы создали рабочий и визуально интересный прототип, призванный стать шаблоном для будущих моделей. Некоторые заместители мы планировали использовать и в дальней шем, если окончательные модели окажутся слишком «тяжелыми» и будут тормозить работу в интерактивном режиме.
Обустройство территории Постройка двух городских кварталов начинается с прокладки тротуаров. С ними будут связаны остальные объекты (мы уже знаем все существенные элементы бор дюров и водостоков), поэтому приступим к работе примерно так же, как при рисовании картины (там обычно сначала рисуют контуры, а потом их раскрашивают)
Бордюры Как следует из наших измерений, бордюр имеет шесть дюймов в высоту и шс-сп. дюймов в ширину с двухфутовыми водостоками. Возле швов имеется закругление радиусом в четверть дюйма и закругление радиусом в один дюйм на передней грани. Швы имеют ширину три четверти дюйма и глубину в полтора дюйма (хотя частенько они бывают заполнены затвердевшим раствором). Так как бордюры в нашем проекте будут располагаться близко к камере, без моделирования швов ш> обойтись.
Упражнение 8.1. Создание бордюров и водостоков Перед тем как приступить к конструированию, убедимся, что макет находится в отдельном слое. Слои обычно применяются для сортировки геометрии по типам поэтому был создан и активизирован слой Curbs (curb — бордюр). Для получения кривой сечения для бордюров желательно использовать четырехдюймовую сетку (убедитесь в наличии привязок управляющих точек к сетке). В данном случае нет необходимости точно указывать радиус кривизны или рисовать идеальную окружность, поэтому воспользуйтесь для конструирования NURBS-кривой третьего порядка, как показано на рис. 8.4. Проще всего получить эту кривую, сразу задав правильную высоту и сечение для водостока при Z = 0. Так как бордюры находятся повсюду, не имеет значения, на какой плоскости их конструировать, на YZ или XZ, однако они должны непременно присутствовать вокруг участка, на котором развлекается Клякса. Поэтому логично начать создание кривых в окне проекции Side (Вид сбоку), то есть на плоскости YZ. Бордюры разделены на меньшее количество сегментов, чем тротуары, поэтому ширину одного сегмента можно сделать равной 16, а не 4 футам. Затем кривая профиля копируется и перемещается на некоторое расстояние в сторону. При этом нужно помнить о местах соединения тротуаров и решить, стоит ли их еде-
186
Глава 8 • Наборы объектов
лать в виде отдельного фрагмента или же они будут интегрированы в поверхность бордюра. Место соединения можно сконструировать в виде отдельного желобка (при этом между каждой парой желобков будет располагаться основная поверхность бордюра) или в качестве части основной поверхности бордюра. Несмотря на привлекательную возможность уменьшить количество сегментов поверхности, в нашем случае размер водостока очень мал по сравнению с общей длиной каждого сегмента бордюра. А размещение небольшого элемента на широкой поверхности усложняет ее параметризацию и затрудняет назначение материалов. Поэтому для сохранения простоты модели и возможности редактировать материалы бордюр и водосток нужно смоделировать в виде отдельных объектов.
.
___~. Промежугочные^управляюш,иеточ№1 между углами предохраняют углы от искажений
JuflX
' IS.
j
Рис. 8.4. Кривая профиля бордюра
Для начала нам потребуется поместить кривую профиля в нужное место. Загрузите файл CurbProfile.ma с прилагаемого к книге компакт-диска, 1. Продублируйте кривую профиля бордюра. Вместо того чтобы просто переместить кривую на 16 футов, требуется оставить место по ширине для водостока. Водосток имеет ширину 3/4 дюйма и радиус 1/4 дюйма с обоих сторон. В сумме это составляет дюйм с четвертью. Половина этого составляет 5/8 дюйма. То есть такое изменение положения, примененное к каждому концу профиля бордюра, позволит сохранить водостоки центрированными по отношению к замечательно ровной сетке каждые 16 футов.
Обустройство территории
187
2. Переместите копию на дюйм с четвертью. В итоге две кривые профиля будут разделены на ширину водостока, 3. Теперь переместите оба профиля назад на 5/8 дюйма. Это центрирует их относительно координатной плоскости YZ. Теперь можно создать кривую профиля водостока. В этот момент имеет смысл заняться профилем водостока. Сначала можно убрать участок кривой в нужном месте, а затем соединить концы кривых спрана и слева с помощью дуги радиусом в четверть дюйма. Однако это может привести к появлению зазора, кроме того, вместо одной поверхности для каждого в< >достока появляется две. 4. Снова используя привязку к сетке (чтобы гарантировать, что новый профиль водостока точно совпадет с профилем бордюра), придайте кривой форму nepi ;вернутой шляпы, как показано на рис, 8.5. Поместите ее туда, где она точно соединится с узловой точкой кривой профиля бордюра (в идеале это должна быть точка на плоском участке кривой, желательно на одном из ее концов). Вовсе не нужно делать такие же глубокие водостоки, как в реальности, поэтому ограничьте глубину менее чем одним дюймом, чтобы избежать самопересечения в в<' дущей грани профиля,
Рис. 8.5. Кривые профилей водостока и бордюра
188
Глава 8 • Наборы объектов
5. Создайте поверхность водостока путем выдавливания профиля водостока вдоль профиля бордюра. При ближайшем рассмотрении окажется, что полученная поверхность будет иметь самопересечения в областях закругления с радиусом в четверть дюйма профиля бордюра, как показано на рис. 8.6. Это неизбежно приводит к проблемам при визуализации, поэтому ситуацию нужно исправить. Проще всего избавиться от самопересечений путем перемещения или масштабирования соответствующих управляющих точек каркаса кривой. Поверхность следует форме каркаса, поэтому восстановление последнего приведет к восстановлению поверхности. 6, Выделяйте по порядку каждый участок оболочки с самопересечением. Наверное, проще всего сначала поворачивать такие участки от угла, а затем масштабировать в целях компенсации предшествующего поворота. Альтернативой в данном случае является применение решеток, позволяющее легко обрезать управляющие точки поверхности. После устранения самопересечений поверхности можно приступить к построению бордюра на ее основе. ш щш -.**-.
Рис. 8.6. Самопересечения поверхности водостока
Перед тем как приступить к созданию остальной геометрии на основе новой поверхности водостока, нужно удостовериться в верности расчетов. Вам тре-
Обустройство территории
189
буются бордюр и тротуар, длина которых достаточна, чтобы покрыть участки прямой дороги и области поворотов. Это означает, что у нас 276 (300 - 24) ф\ тов прямой дороги, что составляет по длине 69 квадратов тротуара. Так как это не совпадает с 16-футовыми сечениями бордюра, продолжим длину блока до 312 футов, что приведет к появлению 72 квадратных участков тротуара и 18 сечений бордюра вдоль каждого 288-футового прямого участка. СОВЕТ Чтобы сделать видимым только каркас NURBS-поверхности, отключите показ геометрии, выбра;., в меню команду Display > Object Display > No Geometry (Отображение > Отображение объектов > От сутствие геометрии) или воспользуйтесь MEL-командой: togglestate off-geometry. После этого вы берите в меню команду Display > NURBS Smoothness > Hull {Отображение > Гладкость NURBS * Каркас),
7. 8.
9.
10. 11.
Чтобы сохранить целостность для таких больших размеров, нужно поменять шаблон, используемый для построения улицы. В качестве рабочих единиц выберите футы и используйте 4-футовую сетку (в основном для визуального подтверждения правильности моделирования) Выделите полигональные сетки, формирующие тротуар и цилиндры, формирующие перекрестки на восточном конце каждого блока и переместите их нд 12 футов на восток. Выделите вершины сетки на восточных концах тротуаров главной улицы и переместите их на 12 футов на восток. Это легко сделать с помощью ноля для ввода данных преобразования в строке состояния. Для этого нужно перейти в режим Relative Entry (Ввод относительных значений преобразования). Чтобы поместить курсор в это ноле, нажмите комбинацию клавиш Atl+' (апостроф), Выделите оба восточных блока и переместите их еще на 12 еру то в на восток. Переместите сетку тротуара на восточной стороне развилки на 24 фута на восток. Теперь лежащий в основе сцены шаблон имеет нужный размер, а у нас на руках есть хорошая поверхность водостока. Эта поверхность может послужить основой для остальных водостоков и прямых участков, позволяя быстро получить все необходимые бордюры.
12. Операции с кривыми лучше производить в отдельном слое, поэтому создайте слой Curbs и поместите в него первый водосток. Убедитесь в наличии флажка рядом с командой Use Current Layer (Использовать текущий слой) в меню Options (Параметры) окна Layer Editor (Редактор слоев). В этом случае все новые участки бордюра будут автоматически помешаться в выбранный слой. 13. Выделите поверхность водостока и присвойте ей имя Groovel (groove — водосток). Продублируйте ее и поместите копию на 16 футов восточнее оригинала. СОВЕТ Перед дублированием присваивайте имена важным объектам. В этом случае вам не потребуется тратить дополнительное время на переименование их копий.
14. Между границами двух поверхностей водостока создайте методом лофтинга линейную поверхность. Если вы предпочитаете пользоваться командой Loft
190
15.
16.
17.
18.
19.
Глава 8 • Наборы объектов (Лофтинг), а не одноименным инструментом, нужно выделить изопараметрические кривые. Это можно легко сделать с помощью меню, вызываемого щелчком правой кнопки мыши. Однако намного проще воспользоваться инструментом Loft (Лофтинг). В данном случае история конструирования вам не требуется, поэтому отключите ее перед формированием поверхности методом лофтинга. Если же вы уже создали поверхность, удалите историю, выбрав в меню команду Edit > Delete by Type > History (Правка > Удалить все объекты типа > История). Присвойте поверхности имя curbSpanl. Так как вам потребуется множество таких поверхностей, все общие характеристики следует задать до операции дублирования. В „нашем случае поверхность нужно сделать односторонней. Выделите водосток и новую поверхность тротуара и откройте диалоговое окно Attribute Spread Sheet (Список атрибутов). Перейдите на вкладку Render (Визуализация) и введите в выделенные поля столбца Double Sided (Двухсторонний) значение 0 или ключевое слово off. Включите режим показа тонированных оболочек объектов и проверьте правильность направления поверхностей. В случае неверно ориентированной поверхности воспользуйтесь командой Reverse Surface Direction (Изменить направление поверхности) меню Edit NURBS (Правка NURBS), чтобы поменять направление нормали. Выделите поверхность бордюра и создайте еще одну ее копию, расположив ее на 16 футов восточнее (в положительном направлении оси X). Затем выделите обе скопированные поверхности (один водосток и один участок бордюра) и создайте остальные копии, необходимые, чтобы закрыть улицу до конца. В качестве ориентира можно использовать геометрию из слоя reference, в противном случае вам потребуется точное число копий (13 к востоку и 3 к западу), если вы делаете все точно так же, как авторы. Убедитесь в наличии поверхности водостока на каждом конце длинного прямого участка. Теперь длинные участки бордюра на месте, как показано на рис. 8.7. Теперь пришло время сконструировать поверхность бордюра на углах улиц, Выделите изопараметрическую кривую на дальней стороне самой удаленной поверхности водостока. Продублируйте ее с помощью команды Duplicate Surface Curves (Дублировать кривые поверхности), расположенной в меню Edit Curves (Правка кривых). Не снимая выделения с кривой, щелкните на квадратике, расположенном справа от команды Revolve (Вращение) в меню Surfaces (Поверхности). Задайте повое рот на 90 относительно оси Z, состоящий из четырех сегментов. Положение опорной точки можно потом задать отдельно, а можно воспользоваться группой переключателей Pivot (Опорная точка) в диалоговом окне Revolve Options (Параметры вращения), установив переключатель Preset (Предустановленное значение). Опорная точка должна находиться на конце кривой, выровненная с ребром поверхности водостока, несмотря на то что это заставляет нас использовать вместо номинальной 4-футовой сетки сетку 5/8 дюйма. При желании
Обустройство территории
191
вы можете вернуть сетку назад, но на данный момент важно добиться корректного совмещения блоков тротуара с водостоком. Создайте поверхность методом вращения и присвойте ей имя curbCornerl.
•
ШИШ т I IJ>
!'«, "...1
SV-,
....,-ч
( . :
I.»».*
Присвоение узлам имен перед копированием позволяет сэкономить время в дальнейшем .
Поверхности первой степени, расположенные линейно, имеют более простую форму и проще редактируются
Рис. 8.7. Один блок готового прямого бордюра
СОВЕТ Для изменения положения опорной точки объекта при выделенном объекте активизируйте любое; преобразование, например Move (Переместить), Rotate (Повернуть) или Scale (Масштабировать), и нажмите клавишу Ins. В результате появится возможность менять положение опорной точки, НЕ; затрагивая сам объект. После завершения операции снова нажмите клавишу Ins, чтобы выйти из режима преобразования опорной точки. Эта методика не сработает, если вы находитесь в режиме выделения подобъектов, так как временное положение опорной точки подобъекта забывается, как только с него снимается выделение.
20. Выделите последнюю поверхность curbGroove, скопируйте ее и поверните вокруг угла таким образом, чтобы она примыкала к поверхности, полученной методом вращения. В результате получится водосток для бордюра, идущего с севера на юг, 21. Скопируйте и поверните одну поверхность curbSpan, затем поместите ее рядом с водостоком, полученным на предыдущем шаге. Это будет началом бордюра, проходящего с севера на юг.
Глава 8 • Наборы объектов
192
22. Выделите одновременно поверхности curbGroove и curbSpan, создайте нужное число их копий и с помощью преобразования перемещения создайте бордюр до перекрестка. 23. Продублируйте и преобразуйте поверхности бордюра, расположенные на пересечении улиц, чтобы закрыть угол на другой стороне главной улицы. В результате будет готов бордюр для одного квартала. 24. Сгруппируйте все поверхности бордюра в этом квартале и присвойте группе имя curbsNW. Создайте зеркальные копии на южной стороне улицы и для двух кварталов на востоке. Назовите их сходными именами, ориентировав в нужном направлении. Напоследок создайте дальневосточный и западный бордюры (вниз по главной улице). 25. Выделите поверхность curbGroove, идущую с севера на юг, и соседнюю с ней поверхность curbSpan. Продублируйте их, а затем выделите из группы с помощью команды Unparent (Разорвать связь) меню Edit (Правка). При этом в группе Unparent Method (Метод разрыва связи) диалогового окна Unparent Options (Параметры разрыва связи) должен быть установлен переключатель Parent to World (Поместить в глобальную систему координат). Не забудьте также установить флажок Preserve Position (Сохранять положение). :"•-- -lri««j2F^ Щ
Г..'
1
j'-.tcii.»,^» '"!'
ШИШ ife. :••-:•/-«
Щ
!l;4.,.
Ь'«й», -j..'-^ ' "o;Q: '..1
.«„.,-
P
,.->-.-,
|
Рис. 8.8. Готовые бордюры и водостоки
Обустройство территории
193
26, Заново сгруппируйте эти поверхности и в соответствии с окончательным расположением группы присвойте ей имя curbsE или curbsW. Поместите эту новую группу на нужное место, выделите входящие в нее поверхности и создайте столько копии, сколько требуется для завершения бордюра на развилке. Каждая копия имеет длину 16 футов. 27. Создайте зеркальную копию этой группы и поместите ее на другую сторону улицы, идущей с севера на юг, Все готово! Полный набор бордюров и водостоков помещен в нужное положение, как показано на рис. 8.8. Наш вариант сцены находится в файле CurbsAndGutters.ma. Все эти объекты впоследствии будут сгруппированы с остальными необходимыми элементами.
Тротуары Теперь пришло время создать второй по важности элемент сцены — тротуары. Именно этим мы займемся в упражнении 8.2. Упражнение 8.2. Создание тротуаров В этом упражнении будет использован тот же подход, что и в предыдущем. Плоские и криволинейные участки будут создаваться по отдельности. Кроме того, вам предстоит сформировать тротуар на углах улиц. 1. Создайте слой Sidewalks (sidewalk — тротуар) для новой геометрии и сделайте его активным. Само по себе помещение геометрии в определенный слой представляет собой крайне простую процедуру, но желательно выработать привы чку делать это автоматически, чтобы в дальнейшем экономить время и усилия. 2. Смоделируйте водостоки тротуара с помощью кривой профиля, которую вы ранее использовали для водостоков бордюра. Дело в том, что эти водостоки должны иметь одинаковый профиль, чтобы совпасть на стыке тротуара и бордюра. Однако этот профиль применим только к прямолинейным участкам тротуара. Несмотря на наличие других способов создания квадратных блоков, мы выбрали этот подход, так как он облегчает работу с углами. 3. Воскресите профиль водостока бордюра шириной в три четверти и радиусом в четверть дюйма. Предположим, что подобный радиус характерен для нашего тротуара (в том числе и для вертикальных границ на углах блоков). Поместите пару таких кривых профилей вдоль границ блока, как показано на рис. 8.9. Это даст вам возможность получить прямую поверхность водостока методом лофтинга. 4. Копируйте и поворачивайте профили до тех пор, пока все прямые участки водостока не окажутся на своем месте. Все границы водостоков должны соприкасаться со своими соседями на углах квартала и полностью ограничивать большой плоский участок в центре. Этот плоский участок создается методом лофтинга на основе пары расположенных друг напротив друга границ водостока. 5. Формирование углов происходит путем вращения профиля водостока. Вам требуется получить поверхность с радиусом в четверть дюйма. Выделите имеющуюся кривую профиля водостока и поместите ее опорную точку на внешнюю границу (конец, соприкасающийся с блоком).
194
Глава 8 • Наборы объектов
Рис. 8.9. Конструкция водостока для тротуара
6. Решите, что вы предпочитаете: удалить половину кривой до применения операции Revolve (Вращение) или же потом удалить половину полученной поверхности. Авторы обычно выбирают первый вариант. 7. Поверните кривую профиля на 90° вокруг соответствующего угла. Поверхность, состоящая из двух интервалов, является оптимальной в данном случае, так как при своей простоте она достаточно округлая. Плавные границы в нижней части поверхности каждого угла водостока оставляют дыру ромбовидной формы, которую может потребоваться заполнить. При необходимости (вспомните, что водостоки часто забиваются грязью) это можно сделать несколькими способами. Вы можете закрыть отверстие с помощью кусков ромбовидной формы, но углы этих кусков будут вырожденными, потому что при коллинеарных направлениях U- и V-координат определить нормаль невозможно. Это приводит к проблемам с назначением материалов и визуализацией, поэтому лучше использовать другой метод. ВНИМАНИЕ По возможности избегайте создания вырожденных поверхностей. Как только угол между U- и Vнаправлеииями становится неопределенным (например, в случае их коллинеарности), пропадает возможность определить нормаль к поверхности и возникают проблемы с назначением материалов и визуализацией.
Обустройство территории
195
8. Вместо этого мы разобьем углы, состоящие из двух интервалов, на две поверхности из одного интервала и перетащим управляющие точки из центра скругления так, чтобы они образовали угол, как показано на рис. 8.10. Присвойте им имена вдоль линий grooveCornerl, чтобы облегчить в дальнейшем процесс их выделения. Отверстия также можно закрыть, поместив на дно водостока плоскость. Это самый простой метод. Хотя теоретически эта плоскость не должна пересекать углы радиальных поверхностей (которые немедленно начинают выступать снизу), желательно путем тестовой визуализации убедиться, что это действительно так. Если вы не можете использовать плоскость, лучше всего применить метод разбиения углов. 9. Создайте параллелепипед подходящего размера (с размерами 48 дюймоы, 3/4 дюйма и 1 дюйм), который помещался бы в водостоке. Удалите его нижнюю грань. Поместите его в водосток таким образом, чтобы его верхняя часть находилась на четверть дюйма ниже поверхности тротуара.
'Разбиение поверхности происходит по этой линии.
и приводит к появлению в этом месте новых управляющих точек Освободите управляющие точки, чтобы выпрямить границу
Рис. 8.10. Закрытие отверстий в углу путем разбиения поверхности и переноса управляющих точек
10. С помощью сценария facePathSplit добавьте дополнительные ряды ребер на стороны параллелепипеда. Снова примените этот сценарий» чтобы добавить три новых ряда на самую длинную грань параллелепипеда. Выделите два ноьых виешн] гх ряда полигональных вершин и переместите их на четверть дюйма от границ.
196
Глава 8 • Наборы объектов
11. Теперь параллелепипед нужно преобразовать в иерархическую поверхность. В этом случае он будет иметь плавные границы по краям и на конце. Это быстрый и простой способ получить объект прямоугольной формы с плавными границами. Поместив несколько заполняющих полос в водосток, вы обнаружите, что углубление перестало быть видимым, так что метод заполнения является спорным. Впрочем, применение заполняющих полос имеет и свои преимущества. Например, в итоге получается менее сложная геометрия, чем ожидалось изначально. Расположенную сверху плоскую поверхность, границы водостока и угловые поверхности затем можно продублировать и переместить на 48 дюймов вдоль оси Y. Потом проделать эту операцию еще раз. Затем эта 12-футовая последовательность (именно столько составляет ширина тротуара) может, в свою очередь быть, скопирована и перемещена и т. д. Однако все это приводит к появлению огромного количества поверхностей, так как в составе каждого блока их девять. В подобных случаях лучше всего использовать одну иерархическую поверхность, потому что она может включать в себя целый набор блоков тротуара. 12. Выделите все девять поверхностей блоков (верхнюю часть, четыре стороны и четыре угла) и выберите в меню команду Modify > Convert > NURBS to Polygons (Изменить > Преобразовать > NURBS в полигоны) для получения сетки полигонов, Убедитесь, что в группе Tessellation Method (Метод заполнения) диалогового окна Convert NURBS to Polygons Options (Параметры преобразования NURBS в сетку полигонов) установлен переключатель Control Points (Управляющие точки). 13. Скройте исходную поверхность, чтобы она не мешала последующим действиям, 14. С помощью команды Combine (Объединить) меню Polygons (Полигоны) соедините все сетки в одну. Эта операция позволяет объединять множество поверхностей одновременно. 15. Выделите управляющие точки полученной сетки. Это можно сделать, к примеру, с помощью команды Edit Polygons > Selection > Convert Selection to Vertices (Правка полигонов > Выделенное > Преобразовать выделенное в вершины). Затем воспользуйтесь командой Merge Vertices (Слить вершины) этого же меню, чтобы соединить друг с другом вершины вдоль ребер исходных сеток полигонов. Если окажется, что вершины не сливаются, причиной этого практически гарантированно является противоположная направленность граней соседних сеток. Воспользуйтесь командой Edit Polygons > Normals > Conform (Правка полигонов i* Нормали > Согласовать), чтобы упорядочить направления нормалей граней новой сетки. После этого попытайтесь снова осуществить слияние вершин. 16. На данный момент практически все, что вам осталось, — это выполнить дополнительное копирование, объединение и слияние вершин. Однако сначала нужно урегулировать ситуацию с углами водостока. Просто перетащите их в направлении осей X и Y, чтобы выровнять с управляющими точками на прямых сторонах. В результате при взгляде сверху сетка будет выглядеть как прямоугольник.
Обустройство территории
197
17. Продублируйте сетку два раза, каждый раз перемещая копии на 48 дюймов параллельно оси Y таким образом, чтобы все сетки примыкали друг к другу. Выделите все три сетки, соедините их в одну и слейте их вершины. Теперь у вас есть единая полоса, лежащая поперек тротуара. 18. Проделайте то же самое параллельно оси X, создав копии, требуемые, чтобы покрыть тротуар от одного угла улицы до другого. После их соединения в одну поверхность и слияния вершин останется всего один шаг. 19. Выберите в меню команду Modify > Convert > Polygons to Subdiv (Изменить > Преобразовать > Полигоны в иерархические поверхности). Тротуар готов. Наш вариант сцены находится в файле SubdivSidewalk.ma. Теперь прямая часть тротуара существует в виде единого фрагмента. Как вы увидите в дальнейшем, такой способ предоставления информации не только более эффективен и понятен, но и более гибок. Перед созданием дополнительных участков присвойте прямой части тротуара имя sidewalkStraightl. Получение более коротких тротуаров для улиц, идущих с севера на юг, представляет собой всего лишь удаление ненужных полигональных граней. Немного сложнее моделировать углы. Так как в данном случае это наша собственная конструкция, вы можете как повернуть профиль тротуара вокруг угла (создав концентрическое кольцо), так и продолжить квадратные блоки, а затем отрезать перекрывающиеся части. Решающими в данном случае могут стать эстетический фактор и простота исполнения. Скорее всего, вы никогда не обращали особого внимания на углы тротуаров, поэтому внимательно посмотрим на перекрывающийся участок, показанный на рис. 8.11. От одного из девяти блоков, попавших внутрь круглой границы, образуемой бордюром, отрезается маленький треугольник. Сконструировать его несложно, но это выглядит несколько карикатурно. В принципе его можно присоединить к одному из больших блоков. С другой стороны, если вы используете концентрические круги, внешняя гран ица внешнего кольца будет иметь длину около 18 футов, что значительно превосходит стандартную длину блока, равную 4 футам. Можно поделить внутреннюю часть колец на участки. Результат выглядит замечательно, но сохранить водостоки прямыми и добиться совпадения кривизны бордюра может быть крайне сложно. Подход с прямыми сетками требует укладки девяти блоков с последующей обрезкой лишних кусков. Линия обрезки определяется проецированием на блоки внутренней границы бордюра. Кроме того, в этих местах нужно создать закругле нный водосток путем вращения его профиля на нужную величину. Подход с использованием концентрических кругов достаточно прост, если вы не собираетесь разбивать плоские участки. Нужная геометрия получается с помощью инструмента Revolve (Вращение). Но для разбиения плоских участков потребуется сконструировать разделяющие водостоки, поместить их под нужными углами в нужных местах, обрезать заднюю часть и плоские участки и смоделировать углы.
198
Глава 8 • Наборы объектов
Треугольная рбласть слишком мала по сравнению с бордюром, чтобы перекрыть тротуар
Рис, 8.11. Сетка тротуара, полученная перекрыванием, со оругленным бордюром
Так как оба подхода подразумевают проецирование кривой, по которой будет производиться обрезка, и создание маленьких уголков, мы выберем более простой из них. Смоделируем концентрические поверхности путем вращения, как показано на рис. 8.12. При наличии времени в дальнейшем можно придать им красивую форму. Осталось добавить, то есть, наоборот, удалить одну вещь. А именно несколько блоков с тротуаров в тех местах, где предполагается наличие деревьев. Эти блоки должны располагаться недалеко от бордюра, но точное положение можно выбрать и позже. Процесс удаления граней из иерархической поверхности совсем несложен. Выделите большую грань в центре, увеличьте ее в три раза и удалите. Если бы вам пришлось работать с единой NURBS-поверхностью, вы бы так легко не отделались. Благодаря аккуратной конструкции сетки стороны соседних блоков выглядят вполне приемлемо. Мы, скорее всего, закроем отверстия сеткой, так что проблем не будет. Но даже если вы решите заполнить открытые участки землей, вам потребуется всего лишь сохранять уровень земли выше дна водостока, и все будет выглядеть замечательно. Техника выделения граней предоставляет еще один полезный метод обработки иерархических поверхностей. Любой блок может быть выделен нелегка накло-
Обустройство территории
199
нен. Это устраняет полную линейность и придает тротуару более достоверный вид. При этом водостоки тротуаров остаются в целости.
Рис. 8.12. Простейший способ моделирования углов тротуара
Улицы Ну и, наконец, по-настоящему простой элемент! Так как уже решено, какой ширины мы будем делать улицы (около 50 футов) и на каком уровне они будут располагаться (на 6 дюймов ниже тротуара), осталось просто уложить между бордюрами плоскую поверхность. Внешняя граница водостока намеренно расположена ниже улиц, поэтому плоскость проезжей части должна ее пересечь. Требуется убедиться, что взаимопроникновение двух поверхностей действительно происходит, так как в этом случае смещение бордюра не приведет к появлению отверстий. Мы создадим линейную NURBS-плоскость и придадим ей размер в соответствии с параметрами улицы. Ширина 50 футов плюс еще немного, а длина — точно 276 футов. При этом появляется возможность непосредственного создания текстуры для дороги, хотя мы еще и не решили, какой материал ей будет назначен. Чтобы облегчить идентификацию каждого участка, присвоим дорогам имена в соответствии с первоначальным планом города, например MainStreetW.
200
Глава 8 • Наборы объектов
Пересечения тоже создаются в виде плоскостей, но нужно помнить, что они должны быть немного шире, чтобы учесть дополнительную ширину двух тротуаров. То есть плоскость шириной ровно 74 фута (50 футов улица плюс два тротуара по 12 футов) помещается на каждом из трех перекрестков. Им присваиваются имена в соответствии с расположением, например MainAndOcean. Нужно заметить, что, несмотря на полную неосведомленность о материалах, которые будут назначены создаваемой геометрии, имеет смысл присваивать каждому из объектов сцены собственный стандартный материал. Это придает объектам более приятный вид, чем при заданных по умолчанию оттенках серого. Авторы создали для сцены материалы Concrete и Street (рис. 8.13). Эту сцену можно найти в файле StreetsAndWalks.ma. Теперь вся базовая инфраструктура на месте, и пришло время заняться остальными объектами. Имеет смысл воссоздать такие детали, как дренажная система, крышки люков, решетки на участках земли, предназначенных для деревьев. Но сначала мы позаботимся о более фундаментальных вещах.
Рис. 8.13. Сцена с готовыми тротуарами, улицами и бордюрами
Пляж Потратим немного времени на моделирование пляжа. Нам потребуется сформировать несложную поверхность,
Обустройство территории
201
Хотя натуральный ландшафт может быть весьма затейливым (часто для его воспроизведения применяются специальные инструменты), наш пляж представляет собой не более чем наклонную поверхность, идущую от дальней стороны западного тротуара на дороге вдоль океана к кромке воды, Поверхность пляжа сначала можно создать в виде плоскости шириной 50 футов, расположенной рядом с тротуаром, но форма будет более достоверной, если применить метод лофтинга между парой кривых. По длине будет достаточно 20 интервалов. Поверхность должна иметь достаточное количество управляющих точек, чтобы придать ей волнообразный вид. Для этого потребуются еще 10 интервалов. Так как это спокойный песчаный пляж, подобного уровня контроля будет вполне достаточно, Получить лежащие в основе кривые можно легко и быстро. В окне проекции Тор (Вид сверху) используйте 20 интервалов, чтобы создать профиль кромки воды, Если вам не хочется считать интервалы, можно построить единую кривую, разбить ее на 20 интервалов и путем перемещения управляющих точек придать ей желаемую форму. Затем переместите кривую на 2 фута ^ отрицательном направлении оси Z, чтобы установить ее в нужное положение. После этого скопируйте ее и привяжите все управляющие точки этой кривой к ближайшей к пляжу границе тротуара. Так как эта кривая совершенно плоская, ей требуется придать некую форму. Из-за большой длины могут возникнуть сложности с визуализацией всех добавленных неровностей поверхности. Для облегчения процесса слегка поворачивайте кривую и смотрите на ее вид в окне ортографической проекции, как показано на рис. 8.14. Здесь же можно поменять положение управляющих точек относительно оси Z. Не стоит проделывать эту операцию в окне центральной проекции, так как при увеличении расстояния до камеры снижается точность. Также помните, что после завершения работы кривую нужно повернуть в исходное положение. Альтернативным способом решения этой задачи является поворот камеры окна ортографической проекции. Для камеры центральной проекции данная операция выполняется с помощью инструмента Tumble (Переворот), в то время как для ортографических проекций эта возможность по умолчанию заблокирована. Раскройте в окне проекции подменю Camera Tools (Инструменты для работы с камерой) меню View (Вид) и щелкните на квадратике, расположенном справа от команды Tumble Tool (Переворот). Если в разделе Orthographic Views (Ортографические проекции) появившегося диалогового окна снять флажок Locked (Заблокировано), вы сможете поворачивать вид в окнах ортографических проекций. Если вы решите воспользоваться этим способом, после завершения редактирования кривой обязательно верните вид в первоначальное состояние и снова установите данный флажок. Любой из описанных приемов укорачивания может применяться для оценки формы кривой или поверхности, особенно при проверке небольших изгибов. С помощью инструмента Loft (Лофтинг) создайте между этими двумя кривыми поверхность, состоящую из 10 интервалов. Чтобы придать ей более натуральный вид, подвиньте управляющие точки ближе друг к другу для получения небольших
Глава 8 • Наборы объектов
202
холмиков, а другие управляющие точки переместите вниз для получения углублений в песке. Последняя операция осуществляется, например, с помощью инструмента Move Normal (Переместить нормаль). Придать поверхности приемлемую форму, как показано на рис. 8.15, можно довольно быстро. Наш вариант поверхности находится в файле SculptedBeach.ma.
Небольшой поворот в окне ортографической проекции оказывает укорачивающий эффект, позволяющий оценить форму кривой •,
Рис. 8.14. Укороченная кривая поверхности пляжа
Небольшой наклон на пару футов вниз к границе пляжа должен быть достаточно длинным, чтобы гарантировать, что нерегулярная поверхность воды, которую мы получим позже с помощью модуля Fluid Effects (Эффекты течения), не будет открывать границу песка. Вблизи воды поверхность пляжа должна быть гладкой, поскольку именно так она выглядит в реальности. Этого просто добиться с помощью инструмента Extend Surfaces (Продолжение поверхностей), вызываемого через меню Edit NURBS (Правка NURBS). В принципе мы можем воспользоваться инструментами Artisan (Виртуальные кисти), чтобы нарисовать поверхность нужной формы, но в данном случае это выглядит излишним. Всего за несколько минут нужный результат можно без усилий получить с помощью обычных инструментов. Итак, пришла пора заняться застройкой города,
203
Строительство
Рис. 8.15. Сформированная поверхность пляжа
Строительство Интересно, почему конечный продукт строительства называется зданием? Не лучше ли называть его постройкой? Ведь результат рисования мы зовем рисунком, результат резьбы по дереву — резьбой, а результат записи — записью... Нам остается только примириться с таким лингвистическим казусом. К счастью, процесс строительства происходит в Maya намного проще, чем в реальности.
Планирование квартала Пока что вместо зданий используются модели-заместители, имеющие форму параллелепипедов. Это коммерческая зона района в стиле «Арт Деко», для которой по большому счету тщательное планирование не требуется. С помощью простых рисунков и опорных материалов этого стиля, взятых из Интернета, эта область должна быть смоделирована достаточно быстро, но со вкусом. Здания на главной улице имеют по два или три этажа, В центре нашего проекта магазин подарков и зоомагазин, которые будут ясно видны с фасада. Все осталь-
204
Глава 8 • Наборы объектов
ные здания послужат фоном, на котором разворачивается наша история. Определенные детали их конструкции дадут понять, что это за магазины, но они не должны выбиваться из общего стиля. На западе зданий нет, там находится пляж. На востоке в основном видна развилка, хотя по некоторым деталям можно составить представление о том, что действие происходит в большом городе. Мы не будем строить целый город, вместо этого используем плоский рисунок с видом крыш и высотных зданий. Чтобы при построении зданий в двух кварталах добиться одинакового стиля, важно использовать один и тот же набор архитектурных элементов. Кроме того, при этом возрастает эффективность процесса моделирования. Намного быстрее поменять размер и форму таких элементов, как двери, окна и карнизы, чем создавать их каждый раз заново. Да и сам по себе выбор стиля «Арт Деко» является весьма практичным поступком, так как данный стиль основан на простых формах с минимальным набором дополнительных украшений.
Рис. 8.16. Элементы дизайна, присущие стилю «Арт Деко»
Общие элементы дизайна в этом стиле, как показано на рис. 8.16, включают плавные углы, длинные вертикальные и горизонтальные линии (возникшие благодаря «обтекаемым» формам), плоские тенты, простые карнизы, окна с уголками и набор повторяющихся декоративных мотивов. Не все эти детали будут использованы при моделировании зданий, перед которыми происходит основное действие; многие из них украсят фоновые строения.
Строительство
205
Используя по большей части NURBS-поверхности, мы получим основные формы зданий, а затем по мере необходимости внесем усовершенствования. Каждый угол, скорее всего, будет иметь некий радиус, чтобы отражать блики и обеспечивать при необходимости любое смещение. Некоторые элементы, например навесы, будут скрывать недоделки. Ряд деталей имеет чисто декоративный характер и моделируется исключительно для придания сцене нужного колорита.
Неподвижные части зданий Мы начнем моделирование с ближайшего к месту действия угла здания, в котором расположены два магазина. Именно перед ними разворачивается сцена с собакой. Сконструировать магазин подарков требуется быстро, но в то же время он должен иметь свой стиль. Для начала нужно сказать несколько слов по поводу конструкции обычных зданий. Для моделирования плоских стен, на которые добавляются необходимые детали, применяется следующий подход.
УглйьПопученные разбиением сферы-цз четвертинки, как
описано в главе 7
Та же самая, техника разбиения поверхности, чтр и при создании водостоков на.-тротуарах
Острые углы позволяют плоскостям ~^;^, закрывать область потолка >^(илипола)
: Основания стен обычно спрятаны за лепными украшениями
:
$> качестве пола можно 'использовать -обычную ПЛОСКОСТЬ
Рис. 8.17. Базовая гладкая стена и ее границы Сначала создаются стены со скругленными (там где нужно) углами. Вам потребуется всего лишь четвертинка цилиндра, состоящая из двух интервалов, но, к сожалению, в Maya невозможно создать такой объект непосредственно, так как минимальное количество интервалов в этом случае равно четырем. Словом, круг или ци-
Глава 8 • Наборы объектов
206
линдр потребуется обрезать. Для этой цели обычно создают круг, так как объектпримитив Cylinder (Цилиндр) в Maya не имеет различных степеней по U- и V-координатам, выделяют точки редактирования, ограничивающие нужную область, и применяют инструмент Detach Curves (Разъединить кривые). Созданный в окне проекции Тор (Вид сверху) круг лежит в плоскости XY. Однако обычно требуется опустить его чуть ниже, так как это позволяет устранить зазор между зданием и опорной плоскостью. Поэтому мы опускаем его на пару дюймов относительно границы тротуара. Четверть круга дублируется, и копия перемещается на расстояние, соответствующее длине фасада здания. Высота здания в данный момент не играет особой роли, так как при необходимости ее можно отредактировать позже. Остается создать методом лофтинга линейную поверхность между двумя кривыми. Иногда бывает полезно слегка увеличить радиус, чтобы граница не выглядела слишком резкой. Граница стены дублируется и перемещается на противоположный конец здания. Затем опять же методом лофтинга между этими границами создается линейная поверхность. Простейшая гладкая стена и ее границы, показанные на рис. 8.17, служат фасадом, на котором можно выполнять отделочные работы. Эти поверхности можно копировать, а затем менять их масштаб, а также двигать границы бесчисленных сегментов,
:*. a,;, i^m,-^ .еде Щ ': 1 •
•
•<:
1~1 '•
^~~~^i
•ж
Область окон может быть закрыта как горизонтальными, так и вертикальными ;полосами '-——•"
-i \
\
\
_-.-"-
t-*?-
•^"
^^.^^ ~^~~"~^< -
\ \ \
;
'
~>
^-^
'
? >:
.-. '• • > -' • '. ,X —
"~~~~~
—
'<
.
; 1
'
'^^ " Использование геометрии первой степени и дисфетных ребер поверхностей позволяет легко ^ осуществлять с»едактиоованиёг ?,1~^>
-••
—1—
^' " ".. .JL '.Jj 1 — ^- — =; — : г
Разбиение поверхности углов позволяет простым плоскостям закрывать стену i *' 3
' • „«., • -
.
• *---~~"^' -"-^~
-- .-
_^— ••" ^,ч"'""'
•'-'^' -^Г^;
.
-
-. .; п»» i
Рис. 8.18, Трехуровневая базовая стена
^•--~"~"~^
~;
... '%,4
'•"
1 • 1 ' .
.
Строительство
207
Создание окон в таких стенах осуществляется путем опускания верхней границы поверхности стены вниз на уровень нижней части окна. Затем поверхность стены дублируется, и копия перемещается вверх таким образом, чтобы оказаться точно над исходной поверхностью. Верхняя граница копии перемещается до высоты окна. И наконец, процесс повторяется еще раз, чтобы стена оказалась над окном. В итоге получается трехуровневая стена, как показано на рис. 8.18: один уровень находится под окном, второй — на уровне окна, третий над окном. Ранее мы говорили о типичных приемах построения стен и окон, но эта модель не является типичной. Начнем с того, что окна не прямоугольные, а округлые, поэтому послойное построение стены в данном случае не сработает. То есть окна магазина игрушек будут созданы путем проецирования на стену замкнутых кривых и последующего вырезания отверстий. Мы рассмотрели несколько вариантов дизайна в стиле «Арт Деко», стараясь не придумать себе больше работы, чем мы могли сделать. Первый дизайн в Maya, показанный на рис. 8.19, привел нас к окончательному варианту, который вы можете наблюдать на рис. 8.20, а также в файле GiftShop.ma.
Рис. 8.19. Первый вариант дизайна магазина игрушек
208
Глава 8- Наборы объектов
Рис. 8.20. Окончательный вид магазина игрушек
Большинство зданий можно создать с помощью стандартного подхода. Так как в сцене требуется единый стиль, можно копировать стены и углы, перемещать границы стен и менять радиусы углов. В итоге будет получен набор фасадов с оконными и дверными проемами. Чтобы здания отличались друг от друга, можно варьировать количество этажей, положение и вид дверей и окон, назначенные материалы и множество других деталей.
Детали До этого момента мы занимались общими формами зданий, не обращая внимания на мелкие детали, придающие зданию индивидуальность. Хотя финальный вариант сцены содержит намного больше деталей, чем будет рассмотрено в этом разделе (так как полное описание заняло бы сотни страниц), здесь мы поговорим только о наиболее типичных примерах. Несомненно, именно внимание к деталям позволяет удачно выполнить любой проект. В нашем проекте «Место для парковки» мы попытались найти компромисс между необходимостью создания стилизованных, но достоверных сцен и ограниченными ресурсами. Мы надеемся, что вы признаете и нашу стратегию, и полученный с ее помощью результат вполне удовлетворительными на любом уровне исследования проекта.
Строительство
209
Двери Двери магазинов играют немаловажную роль в нашей истории, поэтому нужно сделать их достаточно реалистичными, в то же время избежав лишней работы по моделированию. В стиле «Арт Деко* часто встречаются стеклянные двери со ст.] [лизованными ручками, но в этом случае придется моделировать внутренний интерьер. Чтобы избежать дополнительной работы, мы создадим нишу в дверном проеме и с ее помощью (а также задействовав для этой цели тени, появляющиеся во второй половине дня) минимизируем видимость расположенных внутри объектов. Для начала нужно сформировать нишу. Так как внутренние детали магазина мы никогда не увидим, не имеет смысла создавать скругленные углы. Ниша должна состоять лишь из пола и задней стены. Еще при желании можно добавить плинтус. Слева от двери можно сделать видимым интерьер магазина, но магазины игрушек обычно переполнены, так что вряд ли имеет смысл моделировать множество объектов просто в качестве заполнителя пространства. Таким образом, ограничив видимость внутри магазина, мы сократим требуемый объем работы. - ' " ' ''^^ХХ1'"1" "'"'^"•" "-••" £Л£* :/,...; j^
Рис. 8.21. Вход в магазин игрушек и дверь
После ниши приходит время создания дверного проема путем выдавливания прямоугольных профилей со скругленными углами. Мы можем соединить их под
210
Глава 8 • Наборы объектов
углом 45° (как было показано в предыдущей главе), но только такие углы в модели оказываются снизу, почти вне пределов нашей видимости. В качестве более простой альтернативы эти незаметные углы можно расположить под углом 45° без присоединения. Хотя стандартная дверь имеет высоту 80 дюймов, дверь в магазин игрушек мы несколько увеличим — до 108 дюймов. С другой стороны от дверного проема можно установить простую линейную поверхность, закрыв таким способом пространство. Однако так как эта дверь никогда не будет открываться, намного быстрее сделать дверь и стену из одного фрагмента, вырезав в нем окно. Скругленные углы помещаются на пересечении стен и плавно переходят друг в друга. Мы не будем в деталях описывать процесс создания петель, стеклянной панели и ручки. Обращаем ваше внимание только на необходимость применять плавные границы везде, где они должны быть в реальности. Готовая дверь показана на рис. 8.21. Она достаточно проста, но в то же самое время не выпадает из общего стиля. Полученную дверь можно скопировать и использовать в остальных зданиях, для этого достаточно отредактировать вид ручки и форму панели. Другое дело, что не стоит тратить усилия на элементы, которые зритель вряд ли заметит.
Окна Любой магазин предназначен для продажи товаров. Для привлечения покупателей нет ничего важнее его витрин. Потенциальные клиенты могут зайти вовнутрь, привлеченные выставленным на витрине товаром. Поэтому окно в данном случае выполняет не только архитектурную, но и рекламную функцию. Хотя в своих требованиях к моделированию мы пытаемся быть консервативными, грех было бы не придать окну магазина одновременно привлекательный и функциональный вид. Нависающий тент, который представляет собой всего лишь плоскую платформу, выступающую из здания, визуально связывает окно с областью двери. Эта простая деталь объединяет в одно целое окно и дверной проем. Эту деталь легко сконструировать. В окне ортографической проекции создается кривая, которая представляет собой профиль пути. Ее большая часть является прямой линией, закругляющейся на концах (чтобы лучше контролировать форму и закрыть концы объекта, можно использовать три отдельных кривых). Затем вдоль этой кривой выдавливается профиль, который создает ведущую границу навеса, как показано на. рис. 8.22. Этот обтекаемый профиль также является частью стиля «Арт Деко» и зеркально отражает форму искривленного дверного проема, расположенного ниже. Верхняя и нижняя поверхности навеса легко создаются путем отрезания прямого участка кривой пути и лофтинга между двумя (теперь отдельными) концами кривой. Альтернативой может быть лофтинг между целой кривой пути и прямой линией, созданной между двумя ее конечными точками. Для большего реализма навес можно слегка отодвинуть от стены и создать вдоль границы, соприкасающейся со стеной, цилиндр с небольшим радиусом. Можно оставить мазор между стеной и тентом, а можно слить их в единую поверхность.
211
Строительство
Рис. 8.22. Создание навеса
Окна в стиле «Арт Деко» обычно слегка вдавлены в стены. Для придания им подобного вида нужно создать глубокую раму (точно так же, как мы делали дверной проем). Затем большое отверстие делится на отдельные участки путем размещения в нем узких полосок. Сначала по вертикали устанавливаются более толстые полоски, а потом по горизонтали — более тонкие. Благодаря этой разнице размеров мы избежим проблем в местах пересечения поверхностей. Наконец, в проем устанавливается стекло в виде единой большой плоскости. Окончательный вид окон показан на рис. 8.23. Но что же находится за витринами? Чтобы обойтись «меньшей кровью*, сконструируем своеобразный дисплей внутри параллелепипеда (без верхней или передней сторон). Его нижняя част], будет соприкасаться с нижней границей рамы внутри магазина. На этом простран стве расположатся рекламируемые товары. С боков данный параллелепипед бу дет ограничен стенами магазина, в то время как задняя его часть станет всего лишь фоном, продолжающимся до уровня глаз, как показано на рис. 8.24. Сквозь это сооружение мы сможем наблюдать силуэты фигур и наверняка увидим внутренние стены магазина. Хотя мы отчасти скрываем внутренний интерьер, ограничивая освещенность, нужно создать несколько плоскостей, чтобы получить внутренние стены и потолок.
212
Глава 8 • Наборы объектов
Рис. 8.23. Витрины магазина
Рис. 8.24. Место для товаров в витрине магазина
Двигаемся дальше
215
Для начала придайте модели определенную структуру. Сделайте так, чтобы можно было делать видимыми и скрывать отдельные фрагменты. Для этого их нужно объединить в группы и присвоить основным подсекциям осмысленные имена, Для такой модели, как наша городская сценка, начните с деления на кварталы, улицы и тротуары. Затем поделите все на более мелкие компоненты, например, кварталы на здания, здания на фасады, а фасады на стены, двери и окна. Именование подобъектов в таких высокоструктурированных моделях должно осуществляться по легко распознаваемым правилам. Имеет смысл использовать направления, соответствующие сторонам света, даже если они выбраны произвольным образом, например, в окне проекции Тор (Вид сверху). В проекте «Место для парковки» мы выбирали направления сторон света со значением, принимая во внимание положение солнца в нужное время дня. Но даже если бы этого не было, в качестве основы для именования вполне можно было взять названия улиц. Пытайтесь быть последовательным и представлять, что кто-то другой может убирать или, наоборот, вставлять отдельные части сцены. Вряд ли вам нужно, чтобы Maya или визуализатор тратили мощность процессора на обсчет деталей, которые будут незаметны в итоговом изображении. Мощнейшим средством разделения модели на составные части являются внешние ссылки. Загрузка файлов с отдельными элементами сцены происходит примерно так же, как и загрузка изображений в программе для монтажа. Даже для моделей, построенных как единое целое, можно легко выделить объекты, которые вы хотели бы сделать мобильными, и воспользоваться командой Export Selection (Экспортировать выделенное) меню File (Файл). Если нужно удалить объекты, оставив ссылку на них, откройте диалоговое окно Export Selection Options (Параметры экспорта выделенного) и установите флажок Keep Only a Reference (Сохранять только ссылку), как показано на рис. 8.26. Ссылки на внешние файлы помогают повысить производительность, так как благодаря им появляется возможность применять версии моделей с низким разрешением (например, параллелепипеды вместо зданий, которые мы поместили в сцену в начале работы над ней). Для управления внешними ссылками используется диалоговое окно Reference Editor (Редактор ссылок). То есть модели-заместители являются естественным побочным продуктом процесса моделирования. Внешние ссылки удобны и тогда, когда над проектом работает большая команда. В этом случае ссылки позволяют получить доступ к последним версиям всех моделей, и в то же самое время отсутствует возможность редактировать результаты чужого труда. Хотя вы в состоянии защитить свою модель от случайного изменения другими пользователями, вы не сможете противостоять воле режиссера. Будьте готовы к тому, что вам придется вносить изменения. Вне зависимости от тщательности планирования сценария и выполнения сцен, некоторые элементы неизбежно придется менять. И что бы вам не предстояло исправлять — композицию, сценарий или модель, — нужно строить сцены таким образом, чтобы редактирование не вызывало затруднений. Обычно эго означает, что
216
Глава 8• Наборы объектов
иерархическая структура вашей геометрии должна быть разумной, кроме того, в ней не должно быть избыточных данных.
Рис 8.26. Экспорт объекта как внешней ссылки
Заключение Эффективное создание наборов объектов обычно считается проблемой оптимизации. Сценарий нужно реализовать в каком-то пространстве, но при компьютерной анимации вы не можете просто упаковать камеру и выйти на место действия. Вам приходится лично формировать всю обстановку. При этом намного разумней не пытаться максимально реалистично воспроизвести все вокруг, а добавлять детали только туда, где они действительно имеют значение. Если достаточно критично подходить к требованиям сценария, определенная оптимизация возможна с самого начала. Кроме того, желательно сохранять как можно менее сложную геометрию, обеспечивая вместе с тем возможность ее легкого редактирования. Повысить эффективность можно также путем многократного использования уже имеющихся в сцене элементов. Это позволяет избежать повторного моделирования. Структурированный сверху вниз технологический про-
Заключение
217
цесс поможет сконцентрироваться на деталях. Наконец, важно настроить напоры объектов для их эффективного использования в дальнейшем, В большинстве случаев, несмотря на значительные размеры наборов объектов, их моделирование представляет собой достаточно простой процесс. При этом важк о создать адаптируемый набор, который к тому же выполнен в определенном стиле и не требует слишком интенсивных усилий при моделировании. Вам нужно задать местоположение, придать объектам определенный вид и определить время действия. После выполнения всех этих шагов наступает пора компоновки, освещения и анимации. В конце концов, как и у любого «настоящего» режиссера, у режиссера проекта Maya после завершения предварительной стадии наступает пора трех коротких слов: «Свет, камера, мотор!»
9
Реквизит
Практически любая анимация, созданная с помощью компьютерной программы, такой как Maya, требует моделирования многочисленного реквизита. Реквизит вводит в изначально стерильную сцену достоверность и жизненный колорит. После создания наборов объектов и монтажа персонажей витрины магазинов требуется украсить, по улицам нужно разбросать мусор и т. п. Словом, если вы не ставите пьесу, основную суть которой составляют диалоги, вам потребуется куча реквизита. Моделирование каждого элемента реквизита можно сравнить с выполнением небольшого проекта. Некоторые веши можно создать за пару минут, в то время как на имитацию сложных элементов уходят недели. Однако несмотря на различные требования к стоимости и разный уровень важности каждого из элементов реквизита, процесс их моделирования имеет общие черты, В этой главе будут рассмотрены следующие темы: О О О О
общее руководство по моделированию реквизита; работа с опорными изображениями объектов; моделирование простых элементов реквизита; создание поверхностей для сложных элементов реквизита.
Общее руководство по моделированию реквизита Подобно остальным процессам, процесс моделирования реквизита только выигрывает от стандартных действий и решений, принятых на начальных этапах. Под решениями в данном случае понимается выбор пространства, ориентации и техники моделирования. Стандартизация действий делает их надежными, так как гарантирует выполнение всех необходимых шагов и экономит время на выяснение того, как и что нужно делать.
Пространство Для начала определим основную разницу между наборами объектов и реквизитом. Первые обычно сразу создаются в нужном месте, в то время как место в сцене
Общее руководство по моделированию реквизита
219
для вторых определяется позже. Из этого следует, что основным свойством реквизита должна быть простота его перемещения. Усилия на преобразования такой модели должны быть минимальными, так как модель уже включает в себя максимум данных, необходимых для перемещения, поворота и масштабирования. Обычно сначала решение принимается по поводу масштаба объектов, которые вам предстоит создать, Это означает, что в большинстве случае объекты моделируются в натуральную величину. Разумеется, часто возникает соблазн построить модель произвольного размера, лишь бы с нею было удобно работать в окнах проекций, а преобразование масштабирования применить позже, однако авторы категорически не рекомендуют вам этого делать. Отложенное напоследок масштабирование может преподнести немало сюрпризов, когда окажется, что реквизит не подходит под созданный набор объектов или персонаж. Поэтому стоит потратить дополнительное время на выяснение нужного размера и создать объект именно такого размера. Разумеется, в некоторых случаях масштаб 1:1 неприемлем. Космические путе шествия, приключения микроскопических героев и даже земной рельеф лучше моделировать в адаптированном виде. В других случаях на коэффициент масштабирования влияют инструменты, которые использовались ранее или должны использоваться в дальнейшем. Важно, чтобы выбранный масштаб был одобрен всеми членами команды, то есть, чтобы любая модель без проблем интегрировалась в общий проект. Также важна пространственная ориентация объекта. Команда должна прийти к соглашению, какую из осей следует направить вверх, Y или Z. С учетом этого условия и осуществляется моделирование реквизита. Бутылка, которую предстоит поставить на полку, должна быть ориентирована вверх, а не вбок, как показано на рис. 9.1. Время от времени случается, что модель по недоразумению строится в неверной проекции, но если все модели оказываются ориентированными неправильно, без сомнения их создатель не ознакомился с принятым решением по поводу того, какая ось должна быть направлена вверх. Кроме того, реквизит нужно ориентировать в соответствии с его предназначением. Если персонаж повернут в отрицательном направлении оси Y, значит, шляпа для него тоже должна быть повернута в ту же сторону. Если вы моделируете молоток, который персонажу предстоит взять в руку, ориентируйте его таким образом, чтобы его легко можно было схватить. С другой стороны, если нужно, чтобы изначально молоток лежал на столе, его с самого начала нужно ориентировать по горизонтали. Разумеется, некоторые детали реквизита имеют различные варианты использования и, как следствие, разные варианты ориентации. Но в большинстве случаев можно сэкономить усилия, заранее придав каждому элементу наиболее удобное положение. Расположение в пространстве тоже имеет значение. Несмотря на то что реквизит обычно распределяется по всей сцене, важно, чтобы каждый его элемент находился в удобном месте. Рамку для картины, вероятно, имеет смысл строить вокруг начала координат и с задней поверхностью, совпадающей с координатной плоскостью (то есть при нулевых значениях всех координат). Если вы моделируете шля-
220
Глава 9• Реквизит
пу, поместите ее таким образом, чтобы она была «насажена» на направленную вверх ось, будто бы она лежит на столе или надета на голову. Определяйте наиболее удобное положение реквизита в соответствии с его назначением. , . -. .
-, ^^—,
Рис. 9.1. Приемлемая и неприемлемая ориентация реквизита
Итак, большинство элементов реквизита желательно моделировать в начале координат, в пространстве, которое наилучшим образом соответствует их назначению. Это повышает эффективность работы членов команды, которые занимаются компоновкой и анимацией. Разумеется, если вы сами играете эти роли, повышается эффективность вашей собственной работы. Реквизит, который представляет собой тщательно продуманный единый набор элементов, имеет смысл моделировать таким способом, чтобы после его помещения в сцену не требовались дополнительные преобразования. Разумеется, если точное расположение объектов неизвестно, вступает в действие условие о необходимости моделирования легко перемещаемых объектов. СОВЕТ При моделировании реквизита имеет значение еще одно пространстЕЮ — пространство на диске вашего компьютера. Не поддавайтесь искушению смоделировать весь реквизит в рамках одного проекта Maya. Создавайте отдельные проекты для сложных элементов, следуя принятым стандартам именования.
Общее руководство по моделированию реквизита
221
Простота Реквизит служит различным целям. Некоторые его элементы являются ключевыми для сценария, требуют тщательной детализации и, возможно, выполняют чрезвычайно важные функции. Другие служат только фоном, и в глаза обычно бросается только их отсутствие или излишне небрежное выполнение. В некоторых случаях достаточно всего нескольких предметов, а иногда их количество может достигать сотен. Тем не менее всегда желательно сохранять конструкцию модели как можно более простой. Простота имеет значение уже в фазе конструирования. Помимо очевидной необходимости сохранять количество элементов реквизита минимальным, дизайн сам по себе должен представлять экономичные подходы к достижению приемлемого вида. Например, элементы, которые вряд ли заметят зрители, можно лишь обозначить с помощью нескольких видимых деталей, но никогда не нужно моделировать. После того как реквизит попадает в руки разработчика моделей, появляются три дополнительные возможности достижения экономичности через простоту Рассматривая потенциальную выгоду от каждой из них, разработчик может повысить свой вклад в проект. Первая возможность зависит от способности разработчика распознавать про блематичную геометрию и предлагать ей альтернативу. Часто сложный проект может быть разительно упрощен путем тонкой регулировки форм, местоположения деталей и топологических характеристик. Обычно такие изменения приветствуются (разумеется, если они не влияют на важные характеристики модели), так как это снижает объем работ. Вторая возможность достижения экономичности зависит от способностей раз работчика минимизировать геометрию модели. Опытный разработчик никогда но создаст методом вращения модель из 32 фрагментов, если можно обойтись восемью. Избыток геометрии замедляет любой связанный с объектом процесс, от моделирования до итоговой визуализации. Необходимо культивировать скрупулезную привычку обходиться минимальными объемами данных. Разумеется, слишком активная работав этом направлении иногда противоречит нуждам производства, но в любом случае об этом следует постоянно помнить. Исчерпывающее понимание методов моделирования, их достоинств и недостатков является чрезвычайно важным. Особенно значимой является техника, которую можно было бы назвать моделированием с учетом нюансов. Она требует обосновывать место размещения каждой управляющей точки и учитывать топологические детали прилегающей геометрии. Хотя для получения нужной формы из объекта-примитива обычно хватает лишь вашего желания (достаточно «взять в ру ки» кисть или прибегнуть к логическим операциям), элегантные решения часто являются сочетанием опыта, внимания к форме и хорошего знания инструментария Maya. Третья возможность достижения экономичности состоит в том, чтобы вообще не моделировать некоторые вещи. Это не значит, что их нужно просто отбросить. Они имитируются позже при назначении материалов с помощью карт текстуры или смещения.
222
Глава 9• Реквизит
Удивительно, сколько деталей можно имитировать с помощью материалов, особенно при условии, что их можно легко нарисовать или описать в виде карты текстуры, как показано на рис. 9.2.
Рис. 9.2. Геометрические детали, имитируемые с помощью материала
Иногда это очень простые детали, например желобки на бутылке или насечки на рукоятке, И хотя конструктор может поочередно вырезать многочисленные дырочки в столбе, на котором укреплен знак скоростного шоссе, на самом деле достаточно использовать в качестве карты текстуры изображение круга, назначить его каналу прозрачности материала, подобрать масштаб и несколько раз переместить.
Структура Если для представления геометрических деталей вы хотите задействовать материал, нужно особым образом создавать элементы сцены и включать их в иерархию объектов, которые будут использоваться членом команды, ответственным за назначение материалов. Это может выглядеть как особое условие, но все в модели должно быть направлено на то, чтобы назначение материалов происходило без проблем. Часто для этого требуются именование и группировка компонентов, из которых состоит модель. И это всего лишь одна из причин, по которой при создании реквизита нужно учитывать структуру модели.
Общее руководство по моделированию реквизита
223
Термин «структура» относится к именованию и группировке компонентов модели, благодаря которым облегчается дальнейшая работа с ней. Структура реквизита должна обеспечивать его анимацию, назначение материалов, освещение и интерактивное перемещение. Структура многих моделей минимальна, но важные объекты в значительной степени опираются на легко управляемую иерархию. Разумеется, для анимации требуется, чтобы в иерархии модели присутствовали соответствующие группы и опорные точки. Механизм создания и разрушения отношений типа предок—потомок в Maya достаточно прост, поэтому формирование подходящей структуры в строго сочлененной модели представляет собой вполне очевидный процесс. Также легко создаются и разрушаются группы, а для интерактивного описания отношений применяется диалоговое окно Outliner (Структура). СОВЕТ Создание отношения предок—потомок в большинстве случаев требует выделения сначала предка, затем потомка и нажатия клавиши р. Однако, если вы не выделили родительский объект в самом конце, обратитесь к списку объектов в диалоговом окне Channel Box (Окно каналов), чтобы указать, какое выделение должно считаться последним.
Выделение имен подобъектов требуется также при назначении материалов, связывании источников света с поверхностями и контроле видимости. Присвоение коротких значимых имен подобъектам позволяет понять, для каких целей они служат. Даже для целых объектов, таких как NURBS-поверхности, сетки полигонов и иерархические поверхности, выгодно присвоение значимых имен. В результате структуру модели можно изучить, глядя в диалоговое окно Outliner (Структура), После настройки иерархии приходит время настройки опорных точек. Это обычно имеет значение только для анимируемых компонентов, впрочем, иногда опорные точки применяются и для других целей. Положение опорных точек нужнс отслеживать весьма тщательно, чтобы гарантировать корректный результат. Типичный способ редактирования опорной точки в Maya связан с использованием таких преобразований, как Move (Перемещение) или Rotate (Поворот). Достаточно нажать клавишу Ins, перенести опорную точку в новое положение и снова нажать эту клавишу для выхода из режима редактирования опорной точки. Затем нужно выйти из режима выбранного преобразования, потому что в противном случае положение объекта или подобъекта может быть случайно изменено. Чтобы избежать случайных преобразований, имеет смысл задавать положение опорной точки в диалоговом окне Attribute Editor (Редактор атрибутов) непосредственно в разделе Pivots (Опорные точки) узла преобразования объекта, вводя данные в поля разделов Local Space (Локальное пространство) и World Space (Глобальное пространство). Имейте в виду, что изменение положения опорной точки в одном пространстве влияет на ее положение в другом пространстве, так как это всего лишь две альтернативные координатные системы. Другим способом редактирования положения опорной точки является непосредственный доступ к ней и применение инструмента Move (Перемещение). Каждый объект (и подобъект) имеет атрибуты .rotatePivot (для поворота) и .scalePivot (для масштабирования), но при этом не существует атрибута .movePivot (для перемещения), который может быть выделен вместо объекта и передвинут на нужнее место.
224
Глава 9 • Реквизит
MEL-команда, устанавливающая опорную точку для преобразования Rotate (Поворот) объекта foo в начало локальной системы координат, выглядит следующим образом: setAttr - e foo.rotatePivot 0 0 0 :
Для помещения обеих опорных точек в начало глобальной системы координат используйте команду: xform -ws -гр 0 0 0 -sp О О О:
Иногда процесс производства модели (как и работа с определенными инструментами) только выигрывает от фиксации преобразований объекта. При этом все параметры преобразований объекта принимают нулевое значение, хотя его состояние не меняется. В противном случае вы можете потерять достигнутый с большим трудом результат. Например, можно несколько раз скопировать винт, но процесс назначения копиям материалов упрощается, если все они располагаются в начале координат. Преобразования, перемещающие винты из начала координат на заданное для них место, теряются, что приводит к дополнительным трудностям при назначении материалов. Тем не менее тождественные преобразования упрощают многие ситуации. СОВЕТ Желательно фиксировать преобразования только при необходимости и в минимальном объеме (например, только для подобъектов). Кроме того, при фиксации важных преобразований имеет смысл сначала сохранить файл с исходными значениями всех параметров. Впоследствии, если потребуется, это даст вам возможность восстановить значения.
Напоследок следует отметить, что, как правило, организация любой дополнительной иерархии, предназначенной для лучшей управляемости модели, до завершения моделирования является пустой тратой времени. В большинстве случаев сначала нужно получить готовую модель, а потом уже решать, что и как назвать.
Простые модели реквизита Мы начнем с создания набора относительно простых моделей для проекта «Место для парковки*. В следующем разделе мы примемся за решение более сложных задач. Неоднократное повторение процесса моделирования должно прояснить для вас его суть. Кроме того, мы опишем несколько новых приемов.
Большая кость Одной из простейших деталей реквизита является большой кость, которую Клякса получает из зоомагазина. Эта кость имеет карикатурный вид, символизируя вкусную награду для действительно хорошей собаки, Упражнение 9.1. Создание большой кости Для подобной модели вам не понадобится опорный материал, поэтому рисовать кость мы не будем.
225
Простые модели реквизита
1. Начните с создания проекта BigBone, в котором будут храниться наши файлы. В данном случае вам не понадобится большинство стандартных папок, поэтому обойдемся папками Scenes, Shaders, Textures и Images. ПРИМЕЧАНИЕ Вы можете воспользоваться кнопкой Use Defaults (По умолчанию) в диалоговом окне New Project (Новый проект), но для простых моделей имеет смысл вручную ввести названия нужных папок в соответствующие поля.
Теперь пришло время определить размеры нашей кости. Оценив размер собаки и размер клапанов пожарного гидранта, а также прикинув, как кость могла бы выглядеть в витрине магазина, мы решили, что 15 дюймов в длину, 3 в ширину и 1 в толщину — это вполне приемлемо. 2. Начнем работу в окне проекции Front (Вид спереди), предположив, что персонаж подойдет и возьмет вертикально ориентированную кость. Создайте половину профиля кости с помощью инструмента CV Curve Tool (Построение CV-кривой), как показано на рис. 9.3. Отредактируйте полученную кривую до нужной вам формы. Наш вариант находится в файле BigBoneCurve.ma. :
,•:"-•
. . . -
Sg
0-«1':ч-|
«»(»(.•<
,
.
n«t?Ciy CMI- !*."!
Рис. 9.3. Кривая профиля кости
Обратите внимание, что начало кривой лежит в плоскости YZ, а касательная к этой кривой перпендикулярна данной плоскости, то есть параллельна оси X.
226
Глава 9• Реквизит
Дело в том, что вращение кривой будет осуществляться вокруг оси Z, поэтому нужно избегать точек на концах этой поверхности. 3. Другой конец кривой находится на плоскости XY, то есть имеет координату Z, равную 0. Чтобы получить на другом конце кривой такой же профиль, продублируйте ее и отразите копию относительно оси Z, как показано на рис. 9.4, Соедините два конца с помощью команды Attach Curves (Соединить кривые) меню Edit Curves (Правка кривых). При этом используется заданный по умолчанию способ соединения Blend (Сопряжение). Б результате будет получена замечательная симметричная кривая, имеющая форму кости. Чч-1*в
Stt^Mjn-^e^e-'fc-S.IUfrfrK-
.i
- *"*-,.(1tf f№- i^W'WK'W'a^*
rJJwj^l Щ^ШШ^ШЙШ^|.%
*
:
'
•
•
•
•
0.1 . : , , . - r. .'..i -. I , ' i
I: "
Рис. 9.4. Половинки кривой профиля кости, соединенные с помощью операции Attach
4. Воспользуйтесь инструментом Revolve (Вращение), чтобы получит], исходную форму объекта BigBone. Вам требуется создать поверхность третьего порядка поворотом кривой профиля вокруг оси Z. Вид этой поверхности показан на рис. 9.5. Пока что она больше напоминает гантель, чем кость. 5. Для получения нужной формы требуется сделать переднюю и заднюю части поверхности более плоскими. Поэтому отмасштабируйте управляющие точки, расположенные «в углах» кости, если смотреть на нее из окна проекции Тор
227
Простые модели реквизита
(Вид сверху), а также управляющие точки вдоль средней линии, как показано на рис. 9.6. Это быстро придаст объекту форму кости.
,J,.-- ,-,M,rft
-.-ЮГ" II..-,
I ff№
Г Мифе ''.rSLW-
Рис. 9.5. Исходная форма кости, полученная с помощью операции Revolve
6. Полученная в результате фигура по-прежнему является слишком толстой, поэтому попытайтесь сделать ее концы еще более плоскими, выделив только те управляющие точки, которые слишком «высовываются» относительно оси Y, Уменьшите их масштаб до получения желаемой формы. Как видно на рис. 9.7, у объекта больше нет выпуклостей относительно оси Y. 7. Операция по получению более плоской поверхности привела к появлению раз личимых ребер на переднем и заднем концах объекта BigBone. Чтобы устранить их, просто выделите все четыре управляющих точки (по две на каждом конце) и уменьшите их масштаб относительно оси Z, пока они не окажутся примерно на уровне следующего ряда управляющих точек. Так как это приведет к неровностям сетки, связанным с перенесением образующих ребра управляющих точек близко к управляющим точкам вблизи полюса объекта, выделите эти слишком близко расположенные точки и также слегка уменьшите их масштаб. Результат показан на рис. 9.8. Запланированный объект практически получен.
228
Глава 9• Реквизит
Рис. 9.6. Для начала сделаем кость более плоской
в окне проекции Тор
Отрегулируй?» &• " эти • управляющие - ' точки
Рис. 9.7. Плоские концы объекта BigBone
229
Простые модели реквизита
. . .
-
:- •
• •..
'
•
1
I..-
.
i , :
Щ •
'•.
•-.!•.-
.'•'
•.....!'*
Чл.-Ъм
Рис. 9.8. Результат удаления лишних ребер с поверхности объекта
Кость до сих пор имеет слишком овальную форму на концах, поэтому масштаб предельных относительно оси X управляющих точек можно еще немного уменьшить. Однако эксперименты показывают, что это приводит к разруше нию исходной кривой профиля. 8. Лучше поменять масштаб предельных управляющих точек по обе стороны от оси X. То есть после улучшения формы границы слегка поменяйте масштаб вышеупомянутых управляющих точек, как показано на рис. 9.9, чтобы вер нуть кривой профиля исходную форму. Требуется также внести аналогичные изменения в профиль на верхнем и нижнем концах. Предельные относительно оси Z управляющие точки вытягивают вверх концы кости, но этого недостаточно для совпадения с исходной формой кривой профиля. Решением проблемы опять же будет вытягивание вверх не этих точек, а их соседей. 9. Однако для начала расширим эти управляющие точки таким образом, чтобы они образовали одну линию в направлении оси X с предельными управляющими точками относительно оси Z. В данном случае вам не требуется точное совпадение, достаточно, чтобы точки располагались достаточно близко, как показано на рис. 9.10. 10. Пришло время отредактировать положение управляющих точек по вертикали (для лучшего совпадения с формой кривой профиля). Для этого нужно вкделить крайние по координате Z точки и их соседей, влияющих на форму профиля, и изменить их масштаб по оси Z. Это приведет форму поверхности в соответствие с кривой профиля, как показано на рис. 9.11.
Глава 9- Реквизит
230
,-
„ ,
"'^ '"
Рис. 9.9. Улучшенные профили на концах объекта BigBone
Выровняйте точки ,огнЬсительно оси X
Рис. 9.10. Выравнивание крайних по координате Z управляющих точек объекта BigBone
231
Простые модели реквизита
?, i . / чтобы добиться сощпзденЦя с формой кривой Профиля
Рис. 9.11. Результат исправления концов объекта BigBone
Теперь результат близок к намеченной форме, осталось отрегулировать размеры. У кости слишком широкий черенок, поэтому, возможно, имеет смысл сделать его поуже. К счастью, эта проблема решается легко. 11. Чтобы сделать черенок более узким, перейдите в окно проекции Front (Вид спереди) и выделите управляющие точки в центральной области, Там находятся пять рядов управляющих точек. Уменьшите их масштаб относительно оси X, как показано на рис. 9.12, чтобы бедняга Клякса смогла взять эту кость в пасть. 12. Для получения желаемой длины выделите управляющие точки для каждого конца кости и переместите их вдоль оси Z. Чтобы придать кости намеченную длину 16 дюймов, переместите конечные управляющие точки на дюйм дальше. Объект BigBone готов. Его форма показана на рис. Э.13. Сохраните эту кость, чтобы использовать ее прежде, чем Клякса отгрызет от нее кусок. Впрочем, вы можете взять нашу версию, которая содержится в файле BigBoneMainSurface.ma, Для моделирования откушенного куска воспользуемся операцией обрезки. 13. Для начала создайте кривую, которая описывает форму требуемого следа от зубов. Так как предполагается, что таким образом будет получен ключ, открывающий клапан пожарного гидранта, нужно, чтобы форма кривой совпадала с формой болта, закрывающего клапан. Так как болт пятигранный, создайте в окне проекции Front (Вид спереди) линейную NURBS-окружность, состоящую из пяти сегментов, которая будет фигурировать в качестве шаблона. Форма кривой, показанной на рис. 9,14, соответствует отгрызенному Кляксой куску. Так как эта форма должна выглядеть нерегулярно и вместе с тем симметрично, смоделируйте ее в свободном виде и слегка обработайте, придав фо :)му собачьих челюстей.
232
Глава 9 ' Реквизит
-! Й , |i>.V"',.~
;?;
М
"• VI..
И« I*,-,.
г.„,.,.„
!
-:.3 . ,
тШщрщш Нт Рис. 9.12. Сужение объекта BigBone
Рис. 9.13. Готовая форма объекта BigBone
Простые модели реквизита
233
Рис. 9.14. Кривая, форма которой имитирует следы зубов Кляксы
Продублируйте созданную кривую и передвиньте ее на одну из сторон на конце кости, расположив вне поверхности. Поместите оригинал на другую сторону кости и используйте инструмент Loft (Лофтинг) для создания между ними кубической поверхности, состоящей из двух интервалов, как показано на рис. 9.15. Не стоит особо волноваться из-за полученной формы, но желательно» что управляющие точки были на нужных местах. 15. Теперь поверхность укуса пересекает поверхность кости. Используйте инструмент Intersect Surfaces (Пересечь поверхности), чтобы получить кривые на месте пересечения двух поверхностей. Осталось применить инструмент Trim Tool (Обрезка). Результат показан на рис. 9.16. 16. В итоге мы получили резкие края, что может затруднить назначение материалов. Поэтому воспользуйтесь командой Undo (Отмена), чтобы вернуться в исходное состояние, а затем примените инструмент Circular Fillet (Круговое сопряжение). Используйте радиус 0,05 дюйма, чтобы результат сопряжения выглядел приемлемо. Итоговый вид объекта показан на рис. 9.17. М
ПРИМЕЧАНИЕ Круговое сопряжение создается путем сдвига двух поверхностей в направлении их нормалей. Если вы не получаете среза в нужном месте (существует четыре возможных варианта его расположения), поменяйте направление нормалей на одной из поверхностей и повторите операцию.
234
Глава 9• Реквизит
л ьЖжрЯШшЖЩЖш
Рис. 9.15. Поверхность, полученная методом лофтинга
Рис. 9.16. Результат обрезки объекта BigBone
235
Простые модели реквизита
•г;
:
I
1
Рис. 9.17. Результат кругового сопряжения
17. Осталось сгруппировать объекты и подобъекты п присвоить им имена, а та:'.;же задать последовательное направленно нормалей итоговой поверхности на случай, если это потребуется при назначении материалов. Процессы группировки и именования вполне очевидны, а чтобы задать направления нормалей, выделите объект, который называется BigBone, и откройте диалоговое окно Attribute Spread Sheet (Список атрибутов). Перейдите на вкладку Render (Визуализация) и присвойте атрибутам Double Sided (Двусторонний) значение off. Если какая-нибудь из поверхностей перевернута, как показано на рис. 9.18, воспользуйтесь инструментом Reverse Surface Direction (Изменить направление поверхности), чтобы поменять направление U- или V-координаты (но не обеих сразу). 18. Теперь пришло время назначить поверхности подходящий материал. Если вы попытаетесь присвоить ему имя BigBone, выяснится, что оно уже занято, так как вы присвоили его объекту, Материалы и объекты имеют одно и то же п н>странство имен, поэтому нужно использовать такую систему именования, в которой их имена различаются. Например, к именам материалов можно добавлять суффиксы или префиксы. Вид объекта после назначения материала (его детали еще не проработаны) показан на рис. 9.19. Можно сказать, что результат достигнут. В фильме нет слишком крупных планов кости, да и присутствовать на экране она будет недолго, поэтому довод ить ее форму до совершенства не имеет смысла. Работа над геометрией закончена.
236
Глава 9• Реквизит
Рис. 9.18. Если нормаль к поверхности имеет неверное направление, ее нужно развернуть
Рис. 9,19. Готовая к использованию модель кости
Простые модели реквизита
237
19. Чтобы гарантировать, что вы будете использовать только саму модель, а не, к примеру, конструкционные кривые, которые тоже содержатся в этом файле, выделите объект BigBone и воспользуйтесь командой Export Selection (Экспортировать выделенное) меню File (Файл), чтобы перенести модель в отдельный файл, Если вы хотите сравнить свой результат с нашим, загрузите файл BigBoneReady.ma с прилагаемого к книге компакт-диска. Оставьте ранее сохраненные файлы в проекте BigBone на случай, если они понадобятся вам в дальнейшем, Экспортированный файл будет использован в соответствующих сценах проекта «Место для парковки». Относительно простая модель BigBone дала нам возможность продемонстрировать процесс принятия решений при моделировании реквизита. Теперь перейдем к другому элементу, на примере которого вам предстоит познакомиться с техникой обработки иерархических поверхностей.
Пожарный гидрант Пожарный гидрант также представляет собой относительно простой элемент реквизита, но у него есть детали, которые затрудняют моделирование, — скругления. И это не какие-нибудь маленькие скругления, которые сложно заметить. Нет, они являются непосредственной частью конструкции. Но это еще не все. Требуется получить крупные хорошо различимые желобки. Они помогут превратить стандартный пожарный гидрант в характерный объект. Среди всех этих скруглений, желобков и функциональных элементов должен проявиться стиль. В идеале это будет стиль «Арт Деко», хотя мы согласились бы и на меньшее. Как уже отмечалось во главе 2, мы провели некоторое время в Интернете, изучая конструкции пожарных гидрантов. Несмотря на то что в большинстве случаев используется стандартная базовая форма, существуют и другие стили. На сайте http://www.firehydrant.org можно найти до 1600 разновидностей гидрантов. Для нмших нужд требуется достаточно высокий гидрант классической структуры. Загрузив из Интернета несколько многообещающих схем и фотореалистичных изображений, мы выбрали одну конструкцию (оставим ее неназванной) в качестве отправной точки. Именно ее воссозданием мы и займемся в следующем упражнении. Упражнение 9.2. Создание пожарного гидранта Мы сняли с изображения копию и отредактировали ее в программе Adobe Photoshop, чтобы сохранить для нашей модели только основные пропорции и детали, как показано на рис. 9.20. Хотя подготовка заняла некоторое время, оно было потрачено не зря, так как в результате мы получили шаблон в виде ортографичесвого изображения, которое можно использовать в качестве опорного (описание приемов работы с опорными изображениями вы найдете в главе 7). Форму пожарного гидранта в общем случае определяет центральная поверхность, полученная методом вращения, которую пересекают три другие поверхности. Эта форма может быть представлена скругленными NURBS-поверхностями или же единой иерархической поверхностью. Так как нас потенциально ожидает моделирование достаточно сложного материала с картой смещения (пожарные гидранты обычно покрашены толстым слоем краски с многочисленными следами к< >р-
Глава 9* Реквизит
238
розии), предпочтительней, чтобы объект состоял из единой поверхности. Поэтому мы остановимся на втором варианте.
i•
-:-
Рис. 9.20. Эскиз пожарного гидранта
Начнем с рисования профилей в виде однородных CV-кривых, используя опорное изображение в окне проекции Front (Вид спереди), как показано на рис. 9.21, Чтобы облегчить себе задачу, воспользуйтесь привязками к координатной сетке (для соответствия форме можно также слегка перемещать некоторые элементы). Помните, что модель нужно сделать симметричной относительно оси Z. Центральный профиль лучше всего сделать из двух кривых — верхней крышки и нижней части, к сторонам которой будут присоединяться боковой и передний патрубки. Создание двух кривых вместо одной непрерывной требует тесного плоского соединения (само по себе соответствующего конструкции гидранта). Продублируйте кривую профиля бокового патрубка, так как позднее вам предстоит поменять его размер и использовать в качестве профиля переднего патрубка. Затем закруглите внутренний конец кривой. Это приведет к появлению глубокой чашки при вращении и гарантирует, что конец будет закрыт. Кроме того, сделайте сегмент, проникающий в крышку, достаточно длинным и толстым, чтобы создать условия для имитации винтовой резьбы при назначении материала. Обратите внимание, что углы, созданные на основе трех равномерно распределенных управляющих точек, оставляют впечатление плавных границ. Количество управляющих точек в промежутках может быть относительно небольшим. В основном они включаются, чтобы внутренние криволинейные участки были не слишком длинными. Исключением является область, в которой профили бокового патрубка соединяются с кривой, формирующей основной корпус. Здесь используются всего две управляющие точки. Позднее это станет причиной появления на месте пересечения патрубков трех ребер в сетке иерархической поверхности.
239
Простые модели реквизита
-
?-*><*
M!iK
HI-O-
i >•- .
т s
-I• '.-•-. i -
!
. 1 Щ ..- '.
.
' I , ',,
,
•
1
i-
Рис. 9.21, Исходные кривые профилей пожарного гидранта
Также обратите внимание, что эти кривые на концах не должны включать профили пятиугольных болтов, так как болты можно смоделировать потом более легким способом. 3. Расположите опорные точки для всех этих кривых на концах, вокруг которых должно осуществляться их вращение. Затем воспользуйтесь инструментом Revolve (Вращение), чтобы получить NURBS-поверхности, как показано на рис. 9.22. Основная поверхность должна состоять из 16 интервалов, в то время как для боковой и передней достаточно восьми. Такое сочетание обеспечит хорошее совпадение интервалов между патрубками после монтажа управляющей иерархической поверхности. Если вы предпочли бы сократить объем работ, откройте файл HydrantFirstRevolves.ma с прилагаемого к книге компакт-диска и продолжите выполнение упражнения. ПРИМЕЧАНИЕ Позже, когда вы преобразуете эти NURBS-поверхности в иерархическую поверхность (на самом деле состоящую из полигонов), положения управляющих точек будут зафиксированы. Это гарантирует, что области иерархической поверхности будут выглядеть, как исходные NURBS-поверхности. Можно использовать NURBS-поверхности в качестве шаблона для итоговой формы, позволяющего получить предсказуемо точную сетку для каждой области поверхности и более осознанно планировать структуру сетки.
Глава 9• Реквизит
240
Г^ШшшшШ ;* й&$$¥
Рис. 9.22. Поверхности гидранта и бокового патрубка, полученные с помощью инструмента Revolve
4. Так как гидрант симметричен относительно оси X, для начала достаточно создать только одну сторону патрубка (мы сделали ее справа). Но перед тем как перейти к работе над второй стороной, обратите внимание, что поверхность бокового патрубка не пересекается с центральной поверхностью. То есть вам требуется отрегулировать положение ее управляющих точек таким образом, чтобы получить пересечение. Сделать это достаточно легко. Перейдите в окно проекции Front (Вид спереди), выделите управляющие точки вдоль внутренней границы поверхности и сдвиньте их немного вовнутрь. И конечные точки, и связанные с ними тангенциальные точки нужно переместить вместе, чтобы сохранить величину интервала между ними. Позднее этот интервал окажет влияние на вид кромки. Сначала обработайте центральные (имеющие максимальную координату Y) управляющие точки, затем перейдите к «углам» и используйте окно проекции Тор (Вид сверху), чтобы понять, когда вы переместите их вдоль оси X настолько, что граничные управляющие точки окажутся внутри сетки центрального патрубка. Во время этой операции важно убедиться, что у вас выделены как передние, так и задние пары управляющих точек, Другими словами, отследите, чтобы выделение не было ограничено слишком близко расположенными плоскостями отсечки.
Простые модели реквизита
241
СОВЕТ Чтобы гарантировать, что плоскости отсечки не мешают обзору, поместите их за имеющимися в окне проекции объектами, сместив с заданного по умолчанию положения на координатной плоскости. Можно также сделать, чтобы опорные изображения присутствовали только в окне проекции камеры. Для этого нужно присвоить атрибуту Display (Отображение) опорных изображений значение1 Looking Through Camera (Вид из окна камеры).
5. Итак, вы сформировали поверхность бокового патрубка. Создайте ее зеркальную копию с помощью команды Duplicate (Дублировать) со значением параметра Scale X (Масштабирование по оси X) равным -1. Так как мы часто пользуемся операцией дублирования с зеркальным отраже нием, кнопки команд для отражения относительно всех осей вынесены на одну из полок. Каждая из этих команд представляет собой одну строку кода ни языке MEL. 6. Для улучшения вида объекта нужно создать материал Hydrants. Мы использо вали для этого раскраску Blinn (По Блинну), придав ей ярко-желтый цвет и убе дившись, что блики являются достаточно яркими, чтобы однозначно подчеркивать форму поверхности. В процессе изучения формы кривой для боковой крышки вы можете обнару жить, что верхняя крышка не имеет отверстия для пятиугольного болта. Но тазе как в данном случае фиксируется история преобразований объекта, разобрать ся с этой проблемой достаточно легко. 7. Выделите последние управляющие точки на кривой и отодвиньте их от оси, освободив пространство для болта. Затем с помощью инструмента Add Point;; (Добавить точки) меню Edit Curve (Правка кривой) добавьте несколько точек, чтобы сформировать профиль ребра для отверстия. Это приведет к автоматическому обновлению поверхности, и проблема будет решена, как показано на рис. 9.23. Форма боковой крышки значительно отличается от формы верхней, поэтому вам придется использовать новую кривую, а не отредактированную копию. Воспользуйтесь вышеописанным методом (сетками и углами на основе трех управляющих точек). 8. Во внутренней области, имеющей нарезку, слегка переместите управляющие точки вдоль оси Z, чтобы они отличались от своих соседей на поверхности бокового патрубка. Для отверстия на конце крышки сделайте кривую периодической с помощью инструмента Open/Close Curves (Разомкнуть/Замкнуть кривые). Затем установите опорную точку кривой в место расположения первой управляющей точки и воспользуйтесь инструментом Revolve (Вращение), чтобы получить поверхность боковой крышки, как показано на рис. 9.24. Напоследок назначьте этой поверхности материал Hydrants и создайте ее зеркальную копию относительно оси X, формируя крышку с другой стороны. 9. Передний патрубок и крышка для него, по сути, являются увеличенной версией своих боковых собратьев, поэтому создайте соответствующие копии и поверните их на -90° относительно оси Z. Вы получите черновой вариант фронтальной геометрии, который нуждается в масштабировании.
Глава 9 • Реквизит
242
- Ш
'%'
?'
-^'
Рис. 9.23. В модель добавлены левый патрубок и отверстие сверху
10. Для облегчения процесса масштабирования примените к этим двум поверхностям команду Freeze Transforms (Зафиксировать преобразования). В результате текущее преобразование будет переопределено к?" тс;кдественное, а оси поверхностей будут ориентированы как оси глобальной системы координат. Хотя масштаб поверхностей позже можно увеличить примерно на 20 % в соответствии с опорным рисунком, в результате боковой и передний патрубки оказываются слишком близко друг к другу, в то время как лучше оставить между ними некоторое пространство. То есть вам нужно определить корректный коэффициент масштабирования. 11. Для начала выделите поверхность переднего патрубка и воспользуйтесь командой Center Pivot (Центрировать опорную точку), чтобы при масштабировании патрубок не менял свое положение в пространстве. 12. С помощью управляющих векторов преобразования Scale (Масштабирование) на глаз измените размер патрубка, чтобы определить нужный коэффициент. У нас он равнялся 1Д. Однако в данном случае масштабирование происходит относительно всех трех осей, поэтому отмените его результат. Вам не требуется, чтобы передний патрубок выдавался вперед больше остальных, поэтому масштабирование нужно выполнить только относительно осей X и Z. К счастью, существуют лучшие способы задания нужного размера объекта.
Простые модели реквизита
243
•• >:. - ',. I ,.•>.,
Iп Ы -
-г
•-
•
,,-
I ч, l,P.M,i . Jj I ,!-.<,!..!...: ,-s
Рис. 9.24. Поверхность боковой крышки
До выхода Maya версии 4,5 однородное масштабирование относительно двух осе и осуществлялось путем ввода численных данных или же отменой значения масштабирования по одной из осей. Например, можно было выделить передний патрубок, активизировать преобразование Scale (Масштабирование) и указать коэффициенты масштабирования (1,1, 1,0 и 1,1) в поле ввода численных данных, расположенном в строке состояния. Или можно было прибегнуть к интерактивному масштабированию, отменить его результат, а затем вставить MELкоманду из диалогового окна Script Editor (Редактор сценариев) в командную строку, отредактировать численные значения и запустить ее на выполнение. Можно было также вычислить коэффициенты масштабирования и отредактировать параме гры данного преобразования в диалоговом окне Channel Box (Окно каналов). Каждый из этих подходов не слишком удобен. В наши дни операция однородного масштабирования относительно двух осей осуществляется путем одновременного нажатия клавиши Ctrl и средней кнопки мыши и перетаскивания указателя в окне проекции. Чтобы выбрать нужную пару осей, начните процесс перетаскивания со значка оси, относительно которой не надо осуществлять преобразование. Использование перпендикулярной оси таким способом особенно удобно, если вам не требуется точное конечное значение размеров. Воспользуйтесь этой возможностью, чтобы увеличить масштаб переднего патрубка на 10 % но осям X и Z.
244
13.
14.
\ 5.
16.
Глава 9 • Реквизит После этого потребуется слегка отредактировать положение управляющих точек, чтобы они совпадали с внутренней границей центральной трубы. Вы уже проделывали это для боковых патрубков. Перейдите в окно проекции Тор (Вид сверху) и посмотрите, требуется ли редактирование сетки переднего патрубка. Если да, то перетащите граничные и тангенциальные управляющие точки по направлению к центральной трубе, как вы это делали раньше. Масштабирование передней крышки представляет собой более сложный процесс, так как при этом нужно оставить незатронутой область отверстия. Б окно проекции Тор (Вид сверху) или Side (Вид сбоку) выделите управляющие точки, расположенные спереди за выпуклостью. Поля ввода численных данных преобразования нельзя использовать при масштабировании или повороте управляющих точек. То же самое касается диалогового окна Channel Box (Окно каналов). Так как масштаб переднего патрубка был изменен на строго определенную величину, применение точно такого же коэффициента масштабирования к передней крышке возможно только посредством командной строки. Интерактивно поменяйте масштаб выбранных управляющих точек (всех тех, которые не влияют на форму отверстия) на произвольную величину, используя для этого управляющие векторы преобразования. Отмените эту операцию. При этом в командной строке появится выполненная команда. Там будет указан не только коэффициент масштабирования, но и расположение опорной точки, относительно которой осуществлялось преобразование. Опорные точки для выделенной группы управляющих точек обычно генерируются «на лету». Вам остается только зафиксировать полученный результат. Скопируйте команду масштабирования из командной строки или диалогового окна Script Editor (Редактор сценариев) и отредактируйте ее, введя точные значения коэффициентов для переднего патрубка. Убедитесь, что информация об опорной точке не изменилась. Например, пусть имеется следующая MEL-команда: scale -г -р Сап -15.71625cm 36.195cm 0.6789 0.6789 0.6789 Эта команда должна стать такой: scale -r -р Осп -15.71625cm 36.195cm 1.1 1.0 1.1
17. Убедитесь, что выделение с нужных управляющих точек еще не снято, и запустите команду на выполнение, нажав клавишу Enter на цифровой клавиатуре. Теперь размер передней крышки будет точно совпадать с размером патрубка. Разумеется, можно смошенничать, но полезно знать способ добиться точного совпадения размеров и положения, даже если это делается на время. Чтобы сделать форму крышки визуально более интересной, можно ее скруглить. Полученный в итоге передний патрубок с крышкой показан на рис. 9.25. Пришло время превратить набор патрубков в единую иерархическую поверхность. Для этого нужно преобразовать каждую из NURBS-поверхностей в сетку полигонов и соединить эти сетки между собой. Только после этого можно превратить результат в иерархическую поверхность.
Простые модели реквизита
245
Рис. 9.25. Передний патрубок с крышкой, добавленный к гидранту
Авторы рекомендуют данный способ для получения большинства сложных моделей подобного формата, хотя он и несколько неудобен. Это позволяет на соответствующих стадиях процесса моделирования поочередно пользоваться преимуществами NURBS-поверхностей, полигонов и иерархических поверхностей. NURBS-кривые можно применять для получения точных контуров объекта и построения гладких поверхностей. В Maya имеется мощный инструментлрий для работы с NURBS-объектами, а также надежные параметры отображения и выделения (вы можете опираться на внутреннюю параметризацию). Пр и необходимости последующего преобразования в иерархическую поверхность работать приходится исключительно cNURBS-поверхностями третьего порядка. Но сначала эти поверхности преобразуют в сетки полигонов (хотя на всякий случай имеет смысл сохранить и исходный вариант). На этой стадии процесса моделирования из отдельных сеток полигонов собирается одна бол: .шая сеть. Для этого применяются логические операции, позволяющие сфокусироваться на топологии конструируемого объекта. В конечном счете, сетка превращается в иерархическую поверхность. Практически сразу же после корректного соединения между собой двух сеток осуществляется преобразование и исследуется получившаяся гладкая поверх-
Глава 9 • Реквизит
246
ность. Основное внимание уделяется сетке в местах сочленений. Если там все в порядке, то остальная часть поверхности гарантированно будет выглядеть вполне приемлемо. 18. Преобразование NURBS-поверхности легко осуществляется с помощью команды Modify t Convert > NURBS to Polygons (Изменить > Преобразовать > NURBS в полигоны). Выделите все четыре поверхности (не забудьте центральную трубу), в группе Tessellation Method (Метод заполнения) диалогового окна Convert NURBS to Polygons Options (Параметры преобразования NURBS в полигоны) установите переключатель Control Points (Управляющие точки) и щелкните на кнопке Apply (Применить). Имеет смысл поместить NURBS-поверхности в отдельный слой и скрыть его или перевести в режим шаблона. Обычно в процессе работы полезно сохранять их как опорные изображения, удаляя при этом историю конструирования для сетки полигонов. 19. Поверхность после преобразования показана на рис. 9.26. Теперь нужно соединить четыре пересекающихся сетки в одну. При желании для этого вы можете воспользоваться файлом HydrantPolymeshes.ma. У -•' _-.ljl-j*-«t mm j .м- \ i ' t i i:^.<«\ч-..в!'.it.ч • */.,
i
. ,-•
..- J,
Рис. 9.26. Сетки полигонов, полученные из NURBS-поверхностей
Так как изначально контрольные точки поверхностей не совпадают, нужно выбрать один из двух путей решения этой проблемы. Во-первых, можно вруч-
247
Простые модели реквизита
ную отредактировать сетки, совмещая расположенные рядом точки. Во-вторых, можно использовать логические операторы Maya для пересечения и обрезки сеток. Начнем с более простого метода. Если выделить сетки центрального и правого патрубков и использовать команду Union (Объединение), это может привести к неожиданному результату, как показано на рис. 9.27. В нашем случае большая часть правого патрубка просто исчезает. ;1"-~>1р»-*|Л**
5?:
л;
•• —'!*•*."as I".--*»..--» 4Г' - ^
Щ | ^ | | ! увСУСв ^ШЩ ."p.rt.iPi™t ЬдЯ^ле - ¥»)1Й( .
о •- j ^ * о. ъ, -,,,, г, | | | р Ш р MCint j
Км№?
• JtilK
' S^:f
f(l Dew» [a'"vwcJ9-j.
Рис. 9.27. Неожиданный результат применения операции Union
В данном случае проблема состоит в несовпадении нормалей к граням. При логических операциях предполагается, что грани сеток полигонов направлены наружу. Если это условие не соблюдается, вас ждут сюрпризы, 20. Существует несколько возможностей увидеть нормали. Можно воспользоваться командой Custom Polygon Display (Показ многоугольников в заданном режиме), расположенной в меню Display (Отображение), и выбрать в раскрывающемся списке Backface Culling (Блокировка задней поверхности) диалогового окна Custom Polygon Display Options (Параметры показа многоугольников в заданном режима) вариант on. Затем достаточно просто посмотреть на сетку. Другим простым способом проверки является отключение атрибута Double Sided (Двусторонний) на вкладке Render (Визуализация) диалогового окна Attribute Spread Sheet (Спи-
Глава 9• Реквизит
248
сок атрибутов) и включение режима показа тонированных оболочек объектов. Ну и, наконец, если вы предпочитаете видеть нормали в графическом виде, выберите в меню команду Display > Polygon Component:; > Normals (Отображение > Подобъекты полигонов > Нормали), СОВЕТ Хотя режим показа односторонних поверхностей для проверки нормалей хорошо работает в случае сеток полигонов, он не очень надежен в случае NURBS-поверхностей. Нормаль к NURBS-поверхности вычисляется, как произведение U- и V-векторов, так что изменение направления сетки приводит к изменению нормали. Maya компенсирует это при отображении, но логические команды попрежнему работают с геометрическими нормалями. Когда произведение трех осей имеет отрицательный знак, отображаемая нормаль отличается от геометрической.
21. Если вы найдете сетки, нормали которых направлены вовнутрь (они обычно привлекают внимание непредсказуемыми результатами логических операций), используйте команду Edit Polygons > Normals > Reverse (Правка полигонов > Нормали > Перевернуть). После этого результат операции объединения будет корректным, как показано на рис. 9.28. .-.
Рис. 9.28. Правильный результат объединения сеток
Почти хорошо. Поверхность на дне правого патрубка после применения команды Union (Объединение) исчезла. Хотя теперь вы можете разбить этотучас-
Простые модели реквизита
249
ток, выполнить операцию и повторно соединить куски, существует более простой метод. 22. Просто удалите границы центральной трубы в этом месте. Для этого выделите центральные управляющие точки, перейдите к граням и удалите их. 23. Чтобы гарантировать полное пересечение сеток, уменьшите масштаб по вертикали внешних углов удаленных граней для размещения их в границах сетки бокового патрубка. Теперь результат команды Union (Объединение) полностью предсказуем. Она соединяет две сетки, как показано на рис. 9.29, не удаляя сетки в конце патрубка.
Рис. 9.29. Желаемый результат при объединении сеток полигонов
Ту же самую процедуру можно выполнить на противоположной стороне, но в данном случае имеет смысл воспользоваться преимуществами сим метрии. 24. Срежьте левую половину сетки, выделив грани на указанной стороне и удалив их. После этого нужно удалить и левый патрубок, так как его аналог уно.:1 имеется на правой стороне. Оставшийся объект, показанный на рис. 9.30, за мечательно подходит для создания зеркальной копии.
250
Глава 9• Реквизит
Рис. 9.30. Результат удаления левой стороны объединенной сетки
Но сначала требуется отредактировать границу, созданную операцией объединения. 25, С помощью команды Split Polygon (Разбиение полигонов) меню Edit Polygons (Правка полигонов) создайте новые ребра, которые соединят углы сетки бокового патрубка с исходными управляющими точками сетки центральной трубы, Для удаления ненужных ребер используйте команду Delete Edge (Удалить ребро) меню Edit Polygons (Правка полигонов). Операция отмены для этого не подходит, так как после нее остаются свободные вершины, которых лучше не иметь при преобразовании в иерархическую поверхность. В некоторых случаях удобно удалять ребра с помощью инструмента Collapse (Свернуть) меню Edit Polygons (Правка полигонов). Она позволяет производить свертку ребер таким образом, что остающиеся от них вершины переходят в разряд общих. Вам нужно получить сетку с плавными границами вокруг характерных деталей. Создав ее преимущественно из четырехугольников, вы избежите нерегулярностей поверхности. С помощью трех вышеперечисленных команд — Split Polygon (Разбиение полигонов). Delete Edge (Удалить ребро) и Collapse (Свернуть) — можно привести в порядок результаты применения логических операций, элегантно соединив друг с другом части исходной сетки.
251
Простые модели реквизита
26. Напоследок, после приведения в порядок ребер, полученных применением логических операций, сделайте дополнительный проход с помощью команды Split Polygon (Разбиение полигонов), чтобы создать еще один набор ребер, окружающих боковой патрубок, как показано на рис. 9.31. Это поможет сохранить ровный и красивый вид скругления вокруг патрубка. • 'Л- .:•:,,
,"Т1_Г. .,;.„, 1 j
1
^
м
-~
1
pwic«,. ;thiW-f.'* ii™iRc4 Си*»*!».* iioriiuit
-- -
Ц
««•«
1
«„.««
, ft.
1
mini ;
j*i;i
-Ti
Рис. 9,31. Вид границы, полученной в результате операции Union, после обработки
27. Чтобы посмотреть, как же будет выглядеть эта часть объекта после преобразования в иерархическую поверхность (особенно интересен вид скругления), выберите в меню команду Modify »• Convert t Polygons to Subdiv (Изменить > Преобразовать t Полигоны в иерархическую поверхность). При этом обязательно сохраните исходную сетку. Если преобразования не произошло, посмотрите в диалоговом окне Script Editor (Редактор сценариев), что же этому помешало. Исследуйте результаты преобразования в иерархическую поверхность в режиме показа тонированных оболочек объектов. Если поверхность выглядит хорошо, удалите ее. Потом вы быстро получите новую поверхность из целой сетки. 28. Продублируйте сетку полигонов и отразите копию относительно оси X. Затем соедините две сетки с помощью операции Combine (Объединить). Эта операция объединяет любой набор полигональных поверхностей, при этом лиш-
252
29.
30.
31.
32.
33.
Глава 9 • Реквизит
ние части не отсекаются. Кроме того, ребра и вершины объединяемых объектов не присоединяются к результирующей поверхности. Слейте друг с другом вершины вдоль линии соединения с помощью команды Merge Vertices (Слить вершины). Если вы до этого случайно не переместили какую-нибудь границу, левая и правая половины будут иметь точно совпадающие управляющие точки вдоль плоскости YZ. Чтобы проверить, как прошло слияние вершин, выделите сетку и используйте инструмент Custom Polygon Display (Показ многоугольников в заданном режиме) для показа внешних ребер. Установите в группе Highlight (Выделить) флажок Border Edges (Внешние ребра) и введите в поле Border Width (Толщина ребер) значение 2 или большее. Вы не должны видеть подчеркнутых ребер вдоль шва. Если шов слегка выделен, вероятно, в исходных сетках было несколько управляющих точек, расположенных недостаточно близко, чтобы подвергнуться операции Merge Vertices (Слить вершины). Подвиньте их ближе друг к другу и повторите операцию. Если же оказалось, что слиянию не подверглась ни одна из управляющих точек, значит, требуется поменять направление нормалей одной из поверхностей. Для устранения различий используйте команду Edit Polygons > Normals > Conform (Правка полигонов > Нормали > Согласовать). Выделите всю сетку, выполните эту команду и щелкните на оранжевой области. Теперь вы сможете произвести слияние вершин, что крайне важно для будущей иерархической поверхности. Преобразуйте сетку полигонов в иерархическую поверхность и увеличьте значение параметра Resolution (Разрешение) в разделе Subdiv Surface Display (Отображение иерархической поверхности) до 3. Ваше изображение должно выглядеть, как показано на рис. 9.32. В принципе между патрубками и центральной трубой могут встречаться небольшие артефакты, но они должны быть практически незаметными и не сказываться на виде пожарного гидранта. Отмените преобразование или удалите его результат, если вы сохранили исходную сетку, и повторите описанные ранее процедуры, чтобы подсоединить к объекту передний патрубок. Мы не будем повторно останавливаться на деталях этого процесса. Кстати, имеет смысл сохранять положение иерархических поверхностей, так как слияние сеток полигонов (или проведение над ними логических операций) в любом случае приводит к разрушению этих поверхностей- оставляя слитые сетки полигонов и иерархические поверхности без «полигонального заместителям. Хотя существуют способы возвращения сетки полигонов, до момента полной сборки объекта проще использовать затененную иерархическую поверхность только как оценочный инструмент. Несмотря на то что создание деталей объекта в режиме «полигонального заместителя* представляет собой относительно простой процесс, добиться совпадения с опорным рисунком и получить требуемую размерность в некоторых случаях крайне сложно. Однако включение известных характеристик
Простые модели реквизита
253
в заданную сетку позволяет совместить точность NURBS-моделирования с гибкостью полигональных моделей. I '"• '"'";js [.';« t{ i - h ; >
" " i »;•. -, ^ ii-.....^'.,.,.,.
i N 1 111 Ж т Ш:
Рис. 9.32. Иерархическая поверхность, полученная из полигональных сеток
34, После присоединения переднего патрубка снова преобразуйте сетку в иера]: хическую поверхность. На этот раз поверхность необходимо сохранить. Окон нательный вариант пожарного гидранта показан на рис. Э.ЗЗ. Теперь нужно смоделировать пятиугольные болты. Так как этот объект имеет пять сторон, а для формирования угла обычно используются три управляющих точки, чтобы воспроизвести нужную форму вам потребуется, по меньшей мере, 15 таких точек. Мы намереваемся взять поверхность, полученную методом вращения, и сформировать на ней углы, размещая управляющие точки близко друг к другу. Но так как нижняя часть болто в должна быть круглой, в основании болта такая группировка не нужна. 35. Начните с простой NURBS-кривой, представляющей собой профиль, построенный рядом с осью Z, проходящей через отверстия на верхней крышке гидранта. Используйте инструмент Revolve (Вращение) для получения поверхности, состоящей из 15 интервалов. Затем выделяйте каждый третий каркас, обходя новую поверхность по кругу (пропуская управляющие точки основания,
254
Глава 9• Реквизит
которые должны оставаться фиксированными) и поворачивайте его вокруг оси Z, подвигая ближе к соседнему каркасу.
Рис. 9.33. Окончательный вид иерархической псжерхности, из которой состоит основной корпус гидранта
Но перед выполнением операции Rotate (Поворот) необходимо изменить положение опорной точки преобразования таким образом, чтобы она оказалась над началом координат, как показано на рис. 9.34. Механизм автоматической генерации опорной точки использует центр габаритного контейнера выделенных управляющих точек. И если распределение точек не является симметричным относительно направления оси глобальной системы координат, результат преобразования будет далек от ваших ожиданий. Как бы то ни было, достаточно нажать клавишу Ins и переместить опорную точку на ось Z, где она должна находиться. Так как вышеописанная операция будет производиться более одного раза, имеет смысл воспользоваться командной строкой, как было описано ранее, чтобы выполнить одинаковые повороты управляющих точек в обоих направлениях. 36. Чтобы получить достаточно острые углы, сначала поверните выделенные управляющие точки относительно оси Z по направлению к их соседям с одной из сторон. Методом проб и ошибок мы обнаружили, что это должен быть поворот на 21 °,
255
Простые модели реквизита
• Опорная |' относительно' фиврашвния | :из-за нечетного чйс/^а .интервалов
Рис. 9.34. Опорная точка преобразования Rotate несимметрична из-за нечетного числа интервалов
37. Затем, пропустив один ряд, выделите другой набор управляющих точек и поверните их относительно оси Z на -21°. Именно в этот момент нужно вставить в командную строку ранее использовавшуюся команду вращения и поменять в ней численное значение. В результате вы получите углы, показанные на рис. 9,35. Скорее всего, потребуется небольшое редактирование объекта в соответствии с размером отверстия на верхней крышке. 38. Создайте простой материал и назначьте его пятиугольному болту. Так как в основании этого болта также можно сделать необходимый круг, болт будет скопирован и использован для боковой и передней крышек. Сначала создайте одну копию. Для расширения основания в соответствии с опорным рисунком потребуется незначительное масштабирование. Выдели" е управляющие точки вокруг основания и воспользуйтесь техникой масштаб] iрования относительно двух осей, которую вы уже применяли выше. После тою как вы поместите полученные таким способом болты на боковую и переднюю крышки, гидрант должен выглядеть так, как показано на рис. 9.36. 39. Создайте шестиугольные болты описанным способом. Единственным отличием в данном случае будет моделирование шести углов, то есть задание 18 интервалов вместо 15.
256
Глава 9• Реквизит
;]-
'
' ;v
'"is
!
Рис. 9.35. Углы пятиугольного болта, созданные путем поворота управляющих точек
Рис. 9.36. Вид гидранта после создания пятиугольных болтов
Простые модели реквизита
257
Затем поместите эти фальшивые болты (у них нет винтовой нарезки, присутствует только головка) на подходящие места вокруг основания гидранта и на фланцевое соединение верхней крышки с основанием гидранта. На нижнюю сторону фланца добавьте концы болтов, «пронизывая» шестиугольные болты простым профилем, полученным методом вращения. Разумеется, эти болты можно легко получить из иерархической поверхности, но мы использовали другой путь. Головки болтов также нужно случайным образом повернуть относительно оси Z, чтобы они не выглядели слишком регулярными. Итак, гидрант готов. Он показан на рис. 9.37, а нашу версию вы найдете в файле HydrantFinal.ma.
Рис. 9.37. Окончательный вид гидранта после добавления шестиугольных болтов
Если впоследствии вам потребуется сместить верхнюю часть шестиугольных болтов (или даже пятиугольные болты), их можно преобразовать в иерархическую поверхность и слить расположенные на полюсах управляющие точки. Однако при этом нужно стараться, чтобы число ребер, сходящихся в управляющих точках, не увеличилось. В идеале их должно быть четыре. Схождение в одной точке большого числа ребер приводит к появлению ясно различимые складок.
258
Глава 9• Реквизит
40. Ну и напоследок осталось произвести группировку и присвоить частям модели значимые имена. Правая крышка будет снята Кляксой, которая пустит воду, поэтому сгруппируйте болт и поверхность крышки и присвойте группе имя RightCap. Для ясности можно добавить еще несколько групп на случай, если потребуется редактирование материалов и подобъектов. К пожарному гидранту можно добавить и другие детали, например желобки или цепочки на крышках, но в принципе модель готова к использованию. Имитация некоторых деталей может быть выполнена с помощью материалов, другие же можно просто оставить до лучших времен и смоделировать, если у вас останется время до сдачи проекта заказчику. А сейчас пришло время двигаться вперед и вверх, то есть к другим элементам реквизита на нашей парковке.
Автомобиль — сложный элемент реквизита Наш главный персонаж — крутой парень, и машину он водит крутую. Такой автомобиль вряд ли встретишь на улице каждый день — он единственный в своем роде. Разумеется, в нашем вымышленном мире есть и другие уникальные автомобили, но эта машина должна что-то говорить о своем хозяине и о его взглядах на жизнь. В наших первых набросках, один из которых показан на рис. 9.38, фигурировал спортивный, можно сказать лихой автомобиль, который мог бы стать гордостью эгоцентричной кинозвезды. Предполагаемый уровень самолюбования своей персоной превращает нашего антигероя в пустышку. В процессе моделирования автомобиля нам нужно подтвердить эту характеристику.
Рис. 9.38. Ранняя версия автомобиля для Кругана
Автомобиль — сложный элемент реквизита
259
Более поздние наброски показали все необходимые проекции модели. Вы можете их увидеть на рис. 9.39 и 9.40.
Рис. 9.39. Набросок автомобиля. Вид сверху
Рис. 9.40. Набросок автомобиля. Вид сбоку
В следующем упражнении эти наброски будут использоваться в качестве опорных изображений, что позволит нам воспроизвести дизайн автомобиля по большей части простым совмещением, Кроме того, у нас был опорный рисунок, демонстрирующий автомобиль под небольшим углом, как показано на рис. 9.41.
Рис. 9.41. Опорный рисунок автомобиля
Так как автомобиль представляет собой крайне сложную модель, мы не будем останавливаться на всех деталях процесса ее формирования (это потребовало бы
260
Глава 9• Реквизит
отдельной книги). Вместо этого ваше внимание сфокусируется на основных формах и общих подходах, которые нужны, чтобы оснастить модель более мелкими деталями.
Панели кузова Начнем с создания главных панелей кузова. В данном случае моделирование нельзя начинать изнутри, хотя реальное производство автомобилей начинается именно с этой фазы. Итак, нам для размещения сиденья, рулевого колеса и т. п. требуется некая точка отсчета. А перед началом формирования внешних поверхностей нужно установить на место опорный рисунок. Для начала рисунки требуется совместить с окнами проекции, превратив в опорные изображения. Важно, чтобы эти изображения были как можно ближе по масштабу друг к другу. Кроме того, их следует должным образом выровнять. Существует два мнения о том, как надо выравнивать опорные изображения. Для задания масштаба можно использовать как колесную базу, так и весь автомобиль. Но так как в окне проекции Тор (Вид сверху) колеса практически не видны, выбор в данном случае является очевидным.
Рис. 9.42. Окончательный вид опорных изображений автомобиля
Автомобиль — сложный элемент реквизита
261
Какую же длину имеет эта машина? Колесная база спортивного автомобиля обычно составляет в длину от 100 до 110 дюймов, поэтому будем считать базовой величину в 108 дюймов, Когда вид машины сбоку помещается в окно проекции Front (Вид спереди), что соответствует стандартам автомобильной индустрии, его общая длина составляет примерно 142 дюйма. Это выглядит вполне приемлемо, поэтому используем данные результаты измерений для размещения опорного изображения в окне проекции Тор (Вид сверху). Несмотря на большое качество набросков, результат сканирования обоих изображений нужно слегка повернуть, чтобы выровнять их относительно координатных осей. И, несмотря на приятный цвет автомобиля, желательно перевести рисунки в оттенки серого, так как это позволяет лучше разглядеть геометрию. Ну и, наконец, чтобы гарантировать, что опорные изображения не будут загораживать координатные сетки или моделируемые объекты, их нужно разместить в глубине окон проекции. Если вы решите воспользоваться собственными рисунками, напоминаем, что процесс настройки опорных изображений детально описан в главе 7. Наши результаты настройки (которые вы можете загрузить с файлом CarlmagePlaneSetup.ma), показаны на рис. 9.42.
Упражнение 9.3. Создание панелей кузова Хотя можно было бы создать кузов автомобиля на основе NURBS-поверхностей, для этой конструкции больше подходят иерархические поверхности. Общий дизайн представлен двумя приятными на вид «обтекаемыми кривыми», которые подобны каплям воды, переходящим друг в друга. Вероятно, точное воспроизведение подобной формы (при условии, что вы не запутаетесь в деталях), успешно воплотит в жизнь задуманную нами элегантную модель. Как и в случае с гидрантом, моделирование начнется с NURBS-поверхностей, которые затем будут преобразованы в иерархические поверхности. В частности, использование единой поверхности удобно еще и потому, что гарантирует тангенциальную непрерывность в любой точке. Это пригодится, например, при формировании капота. Моделирование колесной арки в этом случае может быть несколько проблематичным, но достигнутая непрерывность этого стоит. Кроме того, нам не придется открывать двери, поэтому непрерывная поверхность будет даже функциональной. Раньше нам не приходилось моделировать ничего подобного, поэтому лучше всего начать с области, имеющей четкую форму. Например, с заднего крыла. Сначала грубо воспроизводится багажник, затем моделируется бампер. По мере необходимости мы можем удалять некоторые детали. 1. Создайте первую кривую, соответствующую форме багажника, как показано на рис. 9.43. Работайте в окне проекции Front (Вид спереди) и пользуйтесь опорными изображениями. Расставляйте управляющие точки по возможности равномерно, стараясь получить округлую кривую без плоских участков, но и без ненужных изгибов. Не забывайте, что управляющие точки находятся не на самой кривой, а вне ее. А хорошая исходная форма кривой позволит значительно сэкономить время в дальнейшем.
262
Ш,Р
Глава 9• Реквизит
.-
M l« -"^fijft .У Ч'".'
!".«•.
J.!.
Рис. 9.43. Первая кривая, описывающая центр багажника
2.
3. 4. 5.
Так как NURBS-кривые третьей степени обычно имеют большую кривизну рядом с управляющими точками, слишком маленькое количество этих точек сделает области между ними более плоскими, чем нужно. Разумеется, слишком большое число управляющих точек будет только помехой. Наши эксперименты показали, что расстояние между ними, равное примерно восьми дюймам, — это то, что нужно. Скопируйте первую кривую и поместите ее на конек задней предохранительной решетки. Методом лофтинга создайте между этими одинаковыми кривыми поверхность, состоящую из четырех интервалов. Эта поверхность будет использоваться для получения дополнительных кривых. Немного уменьшите масштаб внешней кривой, используя ее самую последнюю точку в качестве опорной точки преобразования. Благодаря истории конструирования это приведет к изменению формы поверхности. Теперь скопируйте внешнюю кривую и поверните ее на 90° относительно оси X, снова используя в качестве опорной точки преобразования самую последнюю управляющую точку. Сделайте эту кривую более плоской, чтобы она соответствовала профилю заднего крыла, как оно выглядит в окне проекции Тор (Вид сверху). Так как эта кривая не должна примыкать к предыдущей (наружной кривой лофтинга), пере-
Автомобиль — сложный элемент реквизита
263
местите ее на один дюйм вниз и сдвиньте предыдущую кривую вовнутрь на один или два дюйма. 6. Продублируйте третью кривую и поверните ее еще на 90°. Измените ее фор му таким образом, чтобы она совпала с профилем нижнего крыла, и перенес тите ее вовнутрь, расположив ниже внешней кривой лофтинга. Имейте в виду, что эти две кривые должны иметь видимый зазор, чтобы облегчить их выделение. Итак, мы получили верхнюю, среднюю и нижнюю кривые, описывающие крыло, как показано на рис. 9.44. Вы также можете воспользоваться нашим вариан том кривых, который находится в файле CarRearDeckCurves.ma.
Рис. 9.44. Кривые заднего крыла
7. Продублируйте внутренние изопараметрические кривые полученной методом лофтинга поверхности. Для этого их нужно выделить и применить инструмент Duplicate Surface Curves (Дублировать кривые поверхности). Переведите поверхность в режим шаблона, так как она еще может потребоваться для повторного извлечения кривых. Удалите историю построения новых кривых, чтобы получить возможность свободно менять их форму. На основе этих кривых вы методом лофтинга получите новую поверхность. Каждая из кривых будет описывать характер поверхности в локальной области.
264
Глава 9• Реквизит
Однако между верхней и центральной кривыми крыла требуется еще одна кривая. Без нее останется большой зазор, который полученная методом лофтинга поверхность не сможет заполнить. 8. Воспользуйтесь методом лофтинга для формирования поверхностей между верхней, средней и нижней кривыми. Это непременно должна быть поверхность третьего порядка, так как вам требуется округлая форма, из которой можно извлечь нужную кривую. 9. Для генерации промежуточных изопараметрических кривых введите в поле Section Spans (Количество интервалов) значение 2 и только после этого выполните лофтинг. После дублирования желаемой изопараметрической кривой (верхняя кривая между верхней и центральной) у вас должна получиться система, показанная на рис. 9.45.
3j. ц - т mm . < - .
Рис. 9.45. Конструкционные кривые и поверхности задней части автомобиля
В этот момент вы, скорее всего, подумаете, что можно было просто соединить две существующие поверхности. Но это повлияло бы на вид расположенного сзади угла. Поэтому давайте придерживаться исходного плана. 10. Создайте методом лофтиига еще одну поверхность из имеющихся кривых. Она должна выглядеть, как показано на рис. 9.46.
Автомобиль — сложный элемент реквизита
265
Рис. 9.46. Полученная методом лофтмнга поверхность задней части автомобиля
Даже углубление на гребне крыла получилось в первоначально задуманном виде. Это очень хороший старт! Хотя над формой поверхности можно еще поработать, редактируя конструкционные кривые или влияя на вид поверхности путем перемещения управляющих точек, мы двинемся дальше. Передняя часть автомобилей отличается от задней в одном отношении: в ней есть пара больших отверстий, предназначенных для колесной арки. Этот факт подтверждает правильность выбранного изначально формата моделирования. По меньшей мере, для этой области кузова разумно использовать иерархическую поверхность. Автомобили, как большие зеркала, отражая свет, подчеркивают несовершенства поверхности. Произвольное отверстие, вырезанное из отражающей иерархической поверхности, выставит напоказ кучу неприятных артефактов. Наш бюджет (не говоря уж о нашем терпении) может не вынести обработки данных, которая необходима, чтобы держать подобные артефакты под контролем. Из-за этого переднее колесо, возможно, придется моделировать из одной или нескольких обрезанных NURBS-поверхностей. К счастью, колесо располагается близко к переднему углу автомобиля, поэтому можно в полной мере не-
Глава 9• Реквизит
266
пользовать преимущесгваКиЯВЗ, которые позволяют скрывать несовершенства поверхностей, обрезая проблемные участки. 11. Приступим к моделированию передней части. И снова нарисуйте начальную кривую на основе управляющих точек в окне проекции Front (Вид спереди). Поскольку вы не можете видеть за буфером центральную линию автомобиля, скопируйте нарисованную вами кривую и в соответствии с опорным изображением переместите ее на гребень буфера, где она и должна находиться. 12. Отредактируйте обе кривые в соответствии с опорным рисунком. Уменьшите масштаб центральной кривой относительно оси X, используя в качестве опорной точки конец ветрового стекла. Слегка удлините кривую буфера, используя для преобразования ту же самую опорную точку. В итоге она должна заканчиваться в месте крепления двери, как показано на рис. 9.47. Эти кривые будут применяться в качестве направляющих для поверхности.
Рис. 9.47. Начало направляющих кривых
13. Добавьте внутренние участки кривой, начиная с переднего профиля машины, как он видится в окне проекции Тор (Вид сверху). Важно, чтобы эта кривая соединяла параметрически идентичные места на направляющих кривых, поэтому включите для последних режим показа точек
Автомобиль — сложный элемент реквизита
14.
15.
16.
17.
18.
267
редактирования. Для этого применяется команда Display > NURBS Components > Custom Settings (Отображение > Подобъекты NURBS > Пользовательские настройки). Привяжите конечные точки кривой профиля к соответствующим точкам редактирования. Обратите внимание, что на данном этапе детали решетки игнорируются, как если бы капот и передняя часть были единой поверхностью. Пришло время создания дополнительных профилей. Скопируйте профиль передней части и переместите его на конец направляющих кривых, туда, где должно начинаться ветровое стекло. Измените его форму путем перемещения управляющих точек (но не точек редактирования) таким образом, чтобы он соответствовал форме ветрового стекла. Пойдите на хитрость, чтобы устранить несовпадение опорных изображений в окнах проекций Тор (Вид сверху) и Front (Вид спереди). Поверните профиль таким образом, чтобы следовать секущей линии двери. Важно, чтобы управляющие точки, образовывающие выемку в профиле перед ней части, соответствовали точкам выемки, расположенным там, где ветровое стекло соединяется с секущей линией двери. Это гарантирует, что выемка ее тественным образом перетечет с границы капота в секущую линию двери. Продублируйте профиль передней части и поместите копию на нижнюю часть направляющих. Там внизу выемка должна исчезать, поэтому переместите управляющие точки так, чтобы получить более гладкую форму, Ну и напоследок BUM потребуется внутренняя секция капот а. Скопируйте кривую профиля ветрового стекла и поместите ее между совпадающими точками редактирования направляющих. При необходимости измените ее форму путем перемещения управляющих точек с учетом особенностей соседних кривых. После небольшого редактирования эти две кривые-направляющие, показанные на рис. 9.48, готовы к дальнейшему применению. Нашу версию едины вы найдете в файле CarFrontCurvesReady.ma. Используйте инструмент Birail 3++Tool (Построение поверхности по двум направляющим 3), расположенный в подменю Birail (Две направляющие) меню Surfaces (Поверхности). По очереди выделите все кривые профилей, нажмите клавишу Enter и выделите кривые-направляющие. Появится поверхность, показанная на рис. 9.49, но она нуждается в небольшой доработке. Изменение параметров инструмента Birail 3++ Tool (Построение поверхности по двум направляющим 3) при этом не поможет. Однако базовая структура полученной поверхности вполне соответствует тому, что нам нужно, поэтому займемся ее дальнейшим формированием. Большая часть поверхности, очевидно, состоит из повторяющихся узловых точек, расположенных на профилях. Для их удаления используйте команду Rebuild Surfaces (Перестройка поверхностей) меню Edit NURBS (Правка NURBS) и вгруппе Rebuild Type (Тип перестройки) открывшегося диалогового окна Rebuild Surface Options (Параметры перестройки поверхности) установите переключатель No Multiple Knots (Убрать повторяющиеся узловые точки).
268
Глава 9• Реквизит
Рис. 9,48. Кривые, подготовленные для создания поверхности
Рис. 9.49. Передняя часть поверхности, созданной с помощью инсгрумента Birail 3-n- Tool
Автомобиль — сложный элемент реквизита
269
Рис. 9.50. Вид передней части поверхности после изменения положения управляющих точек
Теперь структура поверхности выглядит пригодной для обработки. Получить желаемую форму можно путем простого перемещения управляющих точек. Небольшое усилие, и у вас будет передняя часть поверхности нужной формы, показанной на рис. 9.50. Для простоты будем называть эту поверхность капотом, Теперь нужно создать переднее крыло, поэтому пришло время для еще нескольких кривых. Крыло ставит перед нами интересную топологическую проблему. Оно должно поддерживать непрерывность с только что сконструированной поверхностью капота и в то же самое время сохранять желаемую форму блика на боку. Пока что вам надо построить только три стороны, игнорируя вырез колесной арки. Контролировать форму этих поверхностей довольно сложно, поэтому вам потребуется создать набор кривых, которые определяют нужные очертания. Начнем с профиля боковой стороны кузова. Так как, в конечном счете, потребуется соединить переднее крыло с поверхностью, расположенной сзади, логично получить кривую для боковой стороны кузова из заднего крыла. 19. Для этого выделите изопараметрическую кривую ближайшей к вам границы задней поверхности и продублируйте ее. Затем выделите точку редактирования, расположенную в трех интервалах от нижней точки, и произведите разъединение кривой в этом месте. Именно этот участок кривой вам требуется. Пе-
270
Глава 9 • Реквизит
реместите кривую вверх, к заднему углу поверхности капота. Но перед этим вам нужно перенести опорную точку этой кривой в место отсоединения. Чтобы расположить ее как можно более точно, используйте привязку к вершинам. Теперь кривой нужно придать требуемую форму. 20. Для начала осуществите привязку всех управляющих точек этой кривой к одной и той же координате X. Это должна быть координата точки, куда вы только что поместили кривую. Кроме того, тангенциальные управляющие точки, расположенные сверху, должны быть на одной и той же высоте, как и конечные точки. В результате кривая выйдет на уровень поверхности капота, одинаковый с уровнем гребня крыла. Затем продолжите кривую таким образом, чтобы ее нижний конец оказался на уровне нижней части двери. Слегка выпятите ее в центре, чтобы самый плоский участок совпадал с видом опорного рисунка в окне проекции Тор (Вид сверху). 21. Продублируйте эту кривую и переместите копию вперед (в отрицательном направлении оси X) на три интервала вдоль границы капота. Кривая должна быть несколько выше предыдущей (расширение крыла имеет пик в этой области), поэтому увеличьте масштаб верхних управляющих точек таким образом, чтобы они достигли расширения. Оставьте три нижние управляющие точки там, где они сейчас находятся, чтобы гарантировать, что блик останется на уровне этой части поверхности. У вас должна получиться конструкция, показанная на рис. 9.51, Мы планируем сделать поверхность передней части крыла четырехсторонней, поэтому вам потребуется еще и нижняя кривая. И снова достаточно выделить границу поверхности и получить из нее кривую нужной топологии. Имеет смысл воспользоваться командой Display > Hide > Hide Unselected Objects (Отображение * Скрыть > Скрыть невыделенные объекты), чтобы гарантировать, что операциям выделения, отсоединения и конструирования поверхности будут подвергаться только намеченные объекты. Хотя граница капота уже существует в виде кривой, лучше снова получить кривую из этой поверхности, чем пользоваться оригиналом. 22. Выделите изопараметрическую кривую, расположенную вдоль границы капота, и продублируйте ее. Затем выделите точку редактирования, отстоящую на три интервала от заднего конца, и используйте инструмент Detach Curves (Разъединить кривые), чтобы отрезать нужную часть. Так как предыдущая кривая была перемещена на расстояние грех интервалов от рассматриваемой, полезной будет состоящая из трех интервалов задняя часть. ВНИМАНИЕ Не стоит предполагать, что границы поверхности идентичны конструкционным кривым, даже если вы создаете их таким образом. Часто имеют место небольшие отличил в форме или параметризации. Выбирайте для конструирования правильные геометрические фрагменты.
23. Соедините этой кривой нижние части двух кривых профилей и выровняйте ее. Теперь все четыре стороны крыла на месте и для конструирования поверхности можно применить команду Square (Прямоугольник) меню Surfaces (Поверхности).
Автомобиль — сложный элемент реквизита
271
Рис. 9.51. Кривые профилей передней стороны крыла
24. Щелкните на квадратике, расположенном справа от команды Square (Прямоугольник). В группе Continuity Type (Тип непрерывности) установите переключатель Tangent (Тангенциальная) и щелкните на кнопке Apply (Применить). По очереди выделяйте граничные кривые, обходя отверстия (одним из них является граница капота). Итак, вы получили поверхность. ПРИМЕЧАНИЕ При создании нескольких поверхностей с помощью инструмента Square (Прямоугольник) имеет смысл выделять кривые последовательно (например, нижнюю, левую, верхнюю и, наконец, правую). Это гарантирует согласование ориентации проекционных координат и нормалей, что облегчает дальнейшее редактирование полученных поверхностей.
Вы обнаружите, что вдоль задней границы появились дополнительные интервалы. Это связано с тем, что задняя кривая профиля не соприкасалась с поверхностью капота. Поэтому Maya добавляет интервалы, пытаясь достичь танге нциальной непрерывности (в пределах указанной вами устойчивости). Вы можете либо попытаться выровнять их (путем редактирования поверхности или кривой), либо в группе Continuity Type (Тип непрерывности) установить переключатель Implied Tangent (Неявная тангенциальная), В последнем случае значения касательных вдоль границ будут просто интерполироваться.
272
Глава 9• Реквизит
25. Неявная тангенциальная непрерывность замечател ьно подходит в данных обстоятельствах (так как при необходимости вы можете позднее поменять форму границы задней поверхности), поэтому используйте диалоговое окно Channel Box (Окно каналов), чтобы изменить тип непрерывности. Для этого выделите новую прямоугольную поверхность и щелкните на входном узле (скорее всего, он называется squareSrfl). Имейте в виду, что в окне каналов можно поменять тип непрерывности для каждой границы в отдельности. Измените тип непрерывности для границы капота на Implied Tangent (Неявная тангенциальная). Вид поверхности изменится. На ней не будет лишних интервалов. Итак, мы построили только часть поверхности, расположенную поперек крыла. Теперь нужно создать передний участок, 26. Нижняя часть переднего сегмента может быть ограничена путем создания пары кривых. Самым быстрым способом их получения является конструирование кривой с однородно расположенными точками редюстирования между концами рассматриваемой кривой. Затем путем перестройки формируются два интервала, а концы кривой выравниваются с помощью инструмента Align Curves (Выровнять кривые) для достижения тангенциальной непрерывности. 27. Скопируйте нижнюю кривую и переместите ее парой интервалов выше на передней поверхности (передней части капота). В итоге получится подходящая верхняя кривая.
г,., :>,.,
Рис. 9.52. Прямоугольные поверхности в области переднего крыла
Автомобиль — сложный элемент реквизита
273
28. После создания этих кривых постройте еще одну прямоугольную поверхность, установив в группе Continuity Type (Тип непрерывности) переключатель Tangent (Тангенциальная). В результате получится форма, показанная на рис. 9.52. Помните, что большая часть того, что вы здесь видите, будет обрезана при создании колесной арки. На данный момент вам нужно закончить работу над оставшейся треугольной областью. 29. Вместо того чтобы попытаться создать единую поверхность, добавьте еще одну кривую параллельно границе капота, оставив небольшую треугольную область, прямо в центре будущей колесной арки. Используя уже знакомый вам процесс дублирования граничных кривых и отрезания нужного участка, сконструируйте кривую, которая свяжет границу области, расположенной вокруг расширения. Однако при взгляде на эту область в окне проекции Front (Вид спереди), как показано на рис. 9.53, становится ясно, что если бы верхний интервал большой боковой панели находился немного ниже, можно было бы полностью скрыть треугольный кусок в центре колесной арки. Именно это мы и сделали. Если у вас получилась такая же геометрия, вы также можете привести ее в порядок, 30. Выделите управляющие точки боковой панели и слегка опустите их вниз,
Рис 9.53. Вид области колесной арки в окне проекции Front
274
Глава 9- Реквизит
Но при этом неожиданно исчезнет нижняя передняя поверхность. Что же случилось? Дело в том, что изопараметрическая кривая, которая использовалась для совмещения с кривой верхней границы исчезнувшей поверхности, более не совмещается с этой кривой. Этого не произойдет, если не включать запись истории конструирования. Хотя на самом деле удобно, когда имеется такой очевидный знак того, что что-то сделано неправильно. Как бы то ни было, пришло время вернуться немного назад и поменять форму кривой бокового профиля в соответствии с новой формой поверхности. Так как эта область все равно будет обрезана, вам нужно всего лишь на глаз осуществить привязку и центрировать управляющие точки. Когда рассматриваемая кривая снова коснется изопараметрическои кривой, прямоугольная поверхность возникнет снова. 31. Поместите на место кривую, полученную из верхней границы крыла. Пусть она выходит из средней изопараметрическои кривой на нижней передней поверхности и идет к верхней изопараметрическои кривой на поверхности боковой панели. Эта система теперь должна оставаться в пределах колесной арки, как видно из опорного рисунка в окне проекции Front (Вид спереди). 32. Обратите внимание, что задняя часть нижней передней панели также находится в пределах области колесной арки, Используйте команду Detach Surfaces (Разъединить поверхность) меню Edit NURBS (Правка NURBS), чтобы избавиться от целого куска (он в любом случае был обречен). Это облегчает процесс получения чистой и простой поверхности выступа. Теперь вы можете легко изменить стык новой кривой с новой меньшей поверхностью. Инструмент Square (Прямоугольник) также хорошо подходит для создания выступа крыла, особенно благодаря возможности легко настроить непрерывность границы с помощью диалогового окна Channel Box (Окно каналов) даже после того, как поверхность уже создана. Используйте инструмент Square (Прямоугольник) для получения тангенциальной поверхности, которая завершит область вокруг колесной арки. После конструирования поверхности выступа крыло будет выглядеть примерно так, как показано на рис. 9.54. Наш вариант находится в файле CarFrontShoulderSurf.ma. В данный момент требуется соединить отдельные фрагменты в единую поверхность. Для этого нужны сетки хороших поверхностей с эквивалентной топологией соседей. Другой до этого момента не озвучиваемой целью является построение поверхностей таким образом, чтобы их границы соответствовали панелям кузова. В дальнейшем это облегчает процесс скругления границ панелей. Нужно отметить, что описываемый процесс создания поверхностей не имеет ничего общего с производством реальных автомобилей. Просто он удобен для построения данного элемента реквизита. Фрагментам поверхностей сначала придается форма, а потом они соединяются друг с другом. При этом заботу о непрерывности можно переложить на программу, осуществляющую операцию соединения. Для начала отделим участок капота от гребня крыла.
Автомобиль — сложный элемент реквизита
275
Рис. 9.54. Переднее крыло после размещения фрагментов поверхности
33. Выделите изопараметрическую кривую, проходящую вдоль желобка, который разделяет эти участки, и воспользуйтесь инструментом Detach Surfaces (Разъединить поверхность). В данном случае вам не нужно устанавливать флажок Keep Originals (Сохранять исходную поверхность). Хотя нашей целью является уменьшение числа поверхностей, на данный момент мы, наоборот, получили еще одну. У нас появилась внутренняя поверхность выступа, идущая в направлении расширения крыла. 34. Еще раз воспользуйтесь инструментом Detach Surfaces (Разъединить поверхность), чтобы отделить от нижней части верхнюю часть боковой панели, сопряженной с поверхностью выступа. На противоположной стороне этой новой поверхности находится набор из трех поверхностей, которые нужно собрать воедино с помощью инструмента Attach Surfaces (Присоединить поверхности). 35. Выбрав в качестве способа присоединения Blend (Сопряжение), используйте инструмент Attach Surfaces (Соединить поверхности) для попарного соединения поверхностей. После этого на каждой стороне от расширения крыла будет находиться длинная поверхность выступа. 36. Эти две поверхности выступа затем можно соединить, но это далеко не простая операция.
276
Глава 9• Реквизит Как непосредственно показывает наличие множества дополнительных линий, здесь имеется очевидное параметрическое несовпадение (рис. 9.55). Необходимо применить инструмент Rebuild Surfaces (Перестройка поверхностей) меню Edit NURBS (Правка NURBS), чтобы добиться согласования поверхностей друг с другом.
Рис. 9.55. Параметрическое несовпадение при соединении поверхностей
37. Перестройте поверхность в направлении длинной стороны, сохраняя положение управляющих точек и параметризуя от 0 до числа интервалов. Это может потребоваться только для поверхности внешнего выступа. Попытайтесь применить команду Attach Surfaces (Присоединить поверхности) и посмотреть, что получилось. При необходимости обработайте также поверхность внутреннего выступа (ну и заодно капот). После перестройки поверхности (или поверхностей) операция присоединения даст намного лучший результат. Теперь выступ представляет собой единую гладкую поверхность. Но остается нижняя боковая панель крыла, которая теперь оторвана от выступа. Пока что это не очевидно, но всенепременно проявится, когда вы посмотрите на бок автомобиля после назначения материалов и формирования отражений. Поэтому проблему нужно решить сейчас. Но как это сделать? Боковая панель только частично находится в контакте с выступом, поэтому применение инструмента Align Surfaces (Выровнять поверхности) вам не поможет. Остается снова разбить выступ в месте завершения боковой шнк'ли. После этого можно прибегнуть к выравниванию.
Автомобиль — сложный элемент реквизита
277
В теории это должно сработать. Однако по неизвестным причинам у нас ничего не получилось. Никакой перебор параметров не привел к желаемому результату. И что теперь делать? Кстати, все написанное выше не говорит о непригодности инструмента Align Surfaces (Выровнять поверхности). Это всего лини, рекомендация подумать об альтернативных подходах к выравниванию. В конце концов, может быть, мы делали что-то не то. При столкновении с проблемами, касающимися непрерывности, обычно су ществует возможность получить решение вручную. В основе этого решения лежит принцип выравнивания управляющих точек поперек шва (более под ровную информацию о непрерывности вы найдете в главе 6). 38. При конструировании прямых линий между тангенциальными и граничны ми управляющими точками одной из поверхностей их можно использован, для обеспечения тангенциальной непрерывности привязки к мишеням. Эти: линии легко создаются как прямые, состоящие из управляющих точек или точек редактирования. Установите опорные точки для каждой из этих кривых в месте расположения конечной тангенциальной управляющей точки, а затем измените их масштаб на нужную величину. Мы просто увеличили их размер вдвое. 39. Теперь осуществите привязку каждой из тангенциальных управляющих точек на другой поверхности к концам отмасштабированной кривой, как показано на рис. 9.56. Вы получили отменную касательную! . -до: а™.у-.».- i -
, !»'6*Л' и*.';
Рис. 9.56. Результат ручной настройки тангенциальной непрерывности между поверхностями
278
Глава 9• Реквизит
Передний конец теперь представляет собой гладкий набор из четырех поверхностей. Пришло время соединить заднюю и переднюю части. Процесс соединения является всего лишь продолжением предыдущего метода. Характерные линии укладываются таким образом, чтобы совместиться с существующими кривыми и поверхностями, а также с опорными рисунками. Затем на основе этих линий строятся поверхности. Если результаты вашего труда совпадали с заданной формой до этого момента, процесс должен пройти гладко. Как и в жизни, проще всего начать снизу. 40. На основе точек редактирования создайте кривую, состоящую из одного интервала, которая соединит нижние границы передней и задней частей. Немедленно перестройте эту кривую таким образом, чтобы она состояла, например, из четырех интервалов. Для этого используйте инструмент Rebuild Curve (Перестройка кривой), сохранив управляющие точки. Как только эта кривая оказывается в нужном месте, становится очевидно, что задняя поверхность подрезана слишком глубоко. Так что перед началом работы над кривой двери мы исправили этот недостаток. После этого все было готово для повторной попытки размещения кривой.
Рис. 9.57. Кривые нижней боковой части кузова
Автомобиль — сложный элемент реквизита
279
41. После размещения кривой в нужном месте скопируйте ее и переместите на пару интервалов, чтобы она совместилась с границей между боковой панелью и поверхностью выступа. С другой стороны она должна совместиться с задней поверхностью, отстоящей на два интервала от низа машины. Остановитесь, чтобы сравнить полученный результат с опорными рисунками в окнах проекции Тор (Вид сверху) и Front (Вид спереди). Кривые, показанные на рис. 9.57, готовы к использованию. Вы также можете найти их в файле CarLowerBodySideCurves.ma. 42. Активизируйте инструмент Square (Прямоугольник) и создайте поверхность. 1 43. Задействуйте аналогичную процедуру для получения верхней части боковой стороны кузова. Создайте подходящую верхнюю кривую и воспользуйтесь инструментом Square (Прямоугольник), чтобы завершить боковую сторону. Когда обе поверхности окажутся на месте, конструкция, наконец, начнет походить на автомобиль, как показано на рис. 9.58.
Рис. 9.S8. Результат размещения боковых поверхностей кузова
44. Чтобы увидеть автомобиль полностью, сгруппируйте поверхности и создайте зеркальную копию группы относительно оси Y. Для увеличения реализма можно вырезать колесную арку. Круглая кривая может быть построена в окне проекции Front (Вид спереди) и спроецирована
280
Глава 9• Реквизит
на поверхность переднего крыла с помощью инструмента Project Curve on Surface (Спроецировать кривую на поверхность). Останется применить инструмент Trim (Обрезка), чтобы удалить ненужную часть. Если не думать о непрерывности поверхности, модель выглядит просто замечательно. Ее можно увидеть на рис. 9.59. Если вы не получили ничего подобного, загрузите наш вариант из файла CarFullBodyPreview.ma.
Рис. 9.59. Вид кузова после обрезки
Что теперь? Мы знаем, что иерархическая поверхность обладает непревзойденной гибкостью и непрерывностью. Мы подозревали о возможных проблемах с топологией при вставке мелких деталей и попытках добиться соответствия дизайну. Поэтому в результате строились поверхности, каждая из которых соответствовала дизайну. А проблемы с непрерывностью мы решали по мере их возникновения. А теперь посмотрим, что нам нужно для перехода к иерархическим поверхностям. Каждая из построенных нами поверхностей была сконструирована таким образом, чтобы сохранить топологическую идентичность с соседями. Именно так предполагалось достичь непрерывности. Это замечательный подход к построению сложной иерархической поверхности. Хотя в основном подобные поверх-
Автомобиль — сложный элемент реквизита
281
ности создаются из таких примитивов, как куб или сфера, из которых потом методом выдавливания и разбиения ребер и граней «лепятся» нужные детали, преобразование NURBS-поверхности в иерархическую поверхность является мощной методологией, позволяющей точно контролировать формы отдельных объектов. 45. Первым шагом должно быть преобразование сеток, состоящих из управляющих точек, в сетки полигонов с помощью команды Modify > Convert > NURBS to Polygons (Изменить > Преобразовать > NURBS в полигоны). Мы не переходим непосредственно к иерархическим поверхностям, так как сначала требуется соединить Друг с другом несколько сеток. В данном случае просто выделите все поверхности и выполните указанную команду. Это приведет к появлению сеток полигонов (рис. 9.60).
Рис. 9.60. Сетки полигонов, полученные путем преобразования из NURBS-поверхностей
После того как NURBS-кривые и NURBS-поверхности исчезнут со сцены, может оказаться, что все выровнено вовсе не так идеально, как мы надеялись. Кроме того, поверхности, которые мы отсоединяли, на каждой стороне от шва содержат дополнительные ряды тангенциальных управляющих точек. Перед соединением полученных сеток друг с другом нужно улучшить их топологию.
282
Глава 9 • Реквизит
С помощью инструмента Select Contiguous Edges (Выделить смежные ребра), расположенного в меню Edit Polygons (Правка полигонов), можно легко выделить дополнительные тангенциальные ряды. Для этой цели применяется также сценарий edgePath, про который упоминалось в главе 7. 46. Сначала просто выделите границы, а затем позвольте инструменту выделить все связанные (в пределах указанных вами угловых ограничений) ребра. Проделав это несколько раз, вы быстро удалите лишние ребра (по крайней мере, по отношению к иерархическим поверхностям) с помощью инструмента Delete Edge (Удалить ребро). ПРИМЕЧАНИЕ Граничные управляющие точки, расположенные вдоль линии разрыва, в действительности ближе к поверхности, чем были исходные управляющие точки до выполнения операции Detach (Разъединение). При повторном соединении поверхностей нужно помнить о необходимости передвинуть эти управляющие точки немного наружу, чтобы избежать сплющивания поверхности в этой области. Иногда бывает полезно сохранять копию неразъединенной поверхности, которая обеспечит мишени привязки для подобного редактирования.
47. Вдоль каждого ребра выполните привязку управляющих точек друг к другу. При желании можно легко добавить новые ребра с помощью инструмента Split Polygon (Разбиение полигонов). Когда вы закончите, сетка должна выглядеть примерно так, как показано на рис. 9.61. Наш вариант сцены вы найдете в файле CarCleanedUpPolymeshes.ma, 48. Выделяйте соседние сетки попарно и с помощью команды Combine (Объединить) соединяйте их друг с другом. Перед тем как добавить сетку в общую модель, проверьте направление ее нормалей, как описано в предыдущем упражнении. Полученная в итоге единая сетка, показанная на рис. 9.62, имеет форму исходных поверхностей. Кроме того, она гарантирует тангенциальную непрерывность, присущую иерархическим поверхностям. 49. Создайте зеркальную копию этой сетки относительно оси X и соедините две половины. Теперь пришло время получить одну иерархическую поверхность, имеющую форму объекта. Воспользуйтесь командой Modify > Convert > Polygons to Subdiv (Изменить * Преобразовать t Полигоны в иерархическую поверхность), чтобы получить объект, показанный на рис. 9.63. Обратите внимание на отсутствие швов и любых других артефактов, возникающих из-за недостаточной непрерывности. Поверхность абсолютно гладкая! А как же быть с колесными арками? 50. Сконструировав простой полигональный цилиндр и применив команду Polygons > Boolean > Difference (Полигоны * Логические операции > Вычитание), чтобы удалить их из сетки кузова, вы увидите, что ожидаемые артефакты вокруг колесных арок выглядят вполне приемлемо, как показано на рис. 9.64. Вы можете исследовать полученные нами результаты, загрузив файл CarWheelwellSubdivTest.ma. Разумеется, операция вычитания возможна только при наличии полностью пересекающихся границ, поэтому вам нужно продолжить нижние ребра вокруг области колесных арок и замкнуть их с помощью инструмента Append to Polygon tool (Присоединение к полигону). Также потребуется время на приведение в порядок границ вокруг обода колесной арки, но это того стоит.
Автомобиль — сложный элемент реквизита
Рис. 9.61. Отредактированные сетки полигонов перед объединением их в единую поверхность
Рис. 9.62. Готовая сетка полигонов
283
284
Глава 9• Реквизит
Рис. 9.63. Иерархическая поверхность, полученная из соединенных друг с другом сеток полигонов
Рис. 9.64. Тестирование иерархической поверхности в области колесных арок
Заключение
285
Хотя еще осталась масса работы, уже ясно, что кузов автомобиля действительно может быть построен из иерархической поверхности. Выпуклости, расположенные за главной опорой, можно легко смоделировать из основной сетки с помощью иерархических функций Maya. Или же вы можете просто добавить нужные детали к основной сетке. После создания кузова автомобиля (неважно из NURBS-поверхностей или из иерархических поверхностей) остальные детали добавляются в соответствии с требованиями конструкции и ограничениями бюджета. Реальный процесс создания модели автомобиля занимает месяцы или даже годы с тщательным исследованием даже мельчайших деталей. В нашем случае были созданы только существенные части, которым постарались придать черты определенного стиля, при этом мы максимально сократили объем работы над объектом. Будучи основным элементом реквизита в сцене, автомобиль, по сути, все равно подобен кости или пожарному гидранту. Он выполняет определенную функцию, выражает определенный стиль и является важным элементом сценария. Как и любой реквизит, он в первую очередь требует создания, и Maya предлагает для этого многочисленные способы,
Заключение Технике моделирования в Maya можно посвятить целую книгу. Однако процесс моделирования реквизита имеет много общих черт. Элементы реквизита создаются, чтобы потом оказаться в разных местах сцены. Они должны иметь определенную структуру и вместе с тем оставаться простыми, а также допускать изменение своих размеров, Иногда для них создаются опорные рисунки, в других же случаях вполне допустимо обойтись без них, но в процессе моделирования всегда приходится балансировать между красотой, временем и техническими условиями. Во многих отношениях приемы моделирования основываются на персональных предпочтениях и приобретенных привычках. Тем не менее Maya предлагает огромный выбор инструментов, подходящих к практически любой методологии и позволяющих решить практически любую проблему.
10 Персонажи В нашем проекте присутствуют два персонажа — собака Клякса и человек Крутан. Они должны соответствовать определенным функциональным и эстетическим критериям. В этой главе мы поговорим об этих критериях и о том, как достичь подобного соответствия средствами моделирования Maya. Особо мы остановимся на следующих темах: О моделирование хорошо параметризованных персонажей, которые могут быть переданы дальше по технологической цепочке; О использование иерархических поверхностей для моделирования органических, то есть гибких, объектов; О создание и тестирование персонажей.
Функциональные и эстетические критерии Каждый раз при создании персонажа нужно принимать во внимание несколько функциональных и эстетических критериев. В отношении функциональных критериев модель должна обеспечивать возможность последующей настройки персонажей. Это означает топологию поверхностей, хорошо связанную со скелетами, анимированньши по методу обратной кинематики. Распределение точек в местах сочленений должно допускать сгибы и сморщивание. Общая гладкость поверхности важна для назначения текстур и, как следствие, для визуализации. В равной степени важным является перемещение точек, так как его результат отражается на дальнейших этапах работы, Технический руководитель проекта отправляет модель на монтаж, а после этого она передается аниматорам. К этому моменту все точки модели должны быть на месте. Модели обязаны равномерно сгибаться в нескольких направлениях, Любые компромиссы на стадии моделирования могут вылиться в дополнительные время и усилия на стадии анимации. Эстетические критерии формулируются просто: модели должны быть привлекательными. Существует слишком много персонажей, смоделированных так, что выглядят откровенно уродливо. Зная о наших ограничениях, мы попросили помощи у коллег. Мы знали, что наши способности в конструировании персонажей далеки от идеала, но в то же время понимали, что именно нам требуется. Поэтому, чтобы сделать персонажи нашего проекта достаточно привлекательными, мы привлекли
Достоинства иерархических поверхностей
287
к работе над ними Скота Кларка (Scott Klark), аниматора компании Pixar. Мы прошли через три последовательных уточнения дизайна, пока не проявились Клякса и Крутан. При этом мы постоянно помнили, что персонажи тоже должны быть выполнены в стиле «Арт Деко», кроме того, они являются актерами, которые будут разыгрывать написанный сценарий. Скот нарисовал тела и детальные изображения голов, которые можно было воспроизвести в Maya. К последним этапам обсуждения конструкции персонажей мы привлекли Эрика Миллера (Erick Miller), нашего технического руководителя, чтобы гарантировать плавный переход к их настройке. В отношении Кляксы у нас было три основных заботы: моделирование, дизайн и анимация. Нужно было выбрать лучший из возможных форматов моделирования. В данном случае это были иерархические поверхности. Затем требовалось гарантировать, чтобы Клякса с учетом ее универсальной привлекательности органично вписалась в общий стиль сцены. Кляксе пришлось вытерпеть анализ с пристрастием со стороны технического руководителя и аниматора. Это требовалось, чтобы все точки модели располагались в нужных местах, что позволило бы упростить работу наших коллег. То есть правильно размещенные точки оболочки и сочленений обеспечивают «живую» артикуляцию персонажа. Крутан, помимо всего прочего, должен был выглядеть, как размазня, которого мы с Марком нарисовали в своем воображении. Его дизайн требовалось сделать характерным и в то же время достоверным в рамках создаваемого мира. Функционально мы собирались получить до некоторой степени мультяшный персонаж, что позволило бы отбросить некоторые элементы, требуемые для фотореалистичности. Дополнительным фактором была одежда. Мы знали, что все наши знакомые, имеющие опыт работы с модулем Cloth (Работа с тканями), на данный момент заняты и не смогут поучаствовать в нашем проекте. В итоге было решено одеть Крута-на в футболку и джинсы. Это можно было проделать как назначением карт текстуры, так и полноценной имитацией одежды.
Достоинства иерархических поверхностей Помня обо всем вышеперечисленном, мы решили создать Кляксу и Крутана на основе относительно новых для Maya иерархических поверхностей, вместо того чтобы пойти традиционным путем формирования модели из фрагментов NURBS-noверхностеи. Иерархические поверхности имеют многочисленные преимущества по сравнению с неоднородными рациональными В-сплайнами. Например, многие студии до сих пор применяют моделирование на основе NURBS-поверхностей, называемое моделированием из фрагментов, при котором небольшие участки NURBS-noверхностей сшиваются друг с другом с помощью инструмента, сохраняющего во вре мя анимации непрерывность соседних ребер. Создать таким путем модель вполне возможно, но для этого требуется высокий уровень владения инструментом Global Stitch (Сшивание всех ребер). В случае же иерархических поверхностей вам не придется думать о проблемах непрерывности и глобальном сшивании. Модель создается сразу целым куском, к которому легко добавляются различные детали. Также легко эти детали можно удалить. Более того, при построении сложных элементов можно применять инструменты для работы с сетками полигонов. Не стоит забывать и о том, что иерархические поверхности поддерживаются визуализатором RenderMan от Pixar, который может пригодиться на заключительной стадии работы над проектом.
288
Глава Ю- Персонажи
Этот формат позволяет получить цельный персонаж с многочисленными отверстиями. Правда, реальная кожа все равно лучше. Тем не менее следует заметить, что иерархические поверхности далеко не совершенны. С ними долгое время нельзя было работать в различных коммерческих программах, да и в Maya они появились лишь в версии 2,5. Но и тогда для визуализации моделей их требовалось преобразовывать обратно в сетку полигонов. В каждой следующей версии Maya функциональность объектов данного формата росла. Однако в наши дни, когда пользователи могут наслаждаться всеми достоинствами трехмерного рисования, совмещения топологий и улучшенного смешения форм, процесс моделирования на основе иерархических поверхностей уже не кажется столь совершенным. Создатель модели может зайти в тупик, и у него не будет другого шанса, как только начать все сначала. Прелесть NURBS-поверхностей состоит в том, что их использовали в течение десятилетий, и разработчики программного обеспечения для последних этапов создания модели точно знают, как на этих поверхностях располагаются проекционные координаты для таких элементов, как образцы частиц или пространство текстуры. Тем не менее, несмотря на все вышесказанное, мы призываем вас сделать «шаг в будущее»-, освоив работу с иерархическими поверхностями. Хотя многие современные профессиональные студии до сих пор не поддерживают геометрии на основе таких поверхностей, постепенно этот формат входит в моду. Кроме того, пользователям Maya можно сообщить еще одну хорошую новость. Начиная с версии Maya 5, появилась возможность преобразовывать результаты, получаемые с помощью модулей Paint Effects (Эффекты рисования) и Fluid Effect;; (Эффекты течения), в сетки полигонов. Если единственным форматом, который поддерживает ваша фирма, является NURBS, вы вполне можете создавать модели на основе иерархических поверхностей, а потом просто преобразовывать их. Впрочем, возможна и обратная ситуация, когда вы изначально привыкли работать с NURBS-поверхностями. В этом случае на вашу долю достается обратное преобразование. В процессе выполнения нашего проекта мы ставили целью показать не детали работы с Maya, а реальный процесс производства. Именно поэтому все персонажи будут смоделированы на основе иерархических поверхностей, а не фрагментов NURBS-поверхностей.
Дополнительные критерии Как уже упоминалось, в рамках функциональных требо]заний к моделям Кляксы и Крутана нужно было гарантировать плавный переход к следующим этапам работы над проектом, то есть к анимации и визуализации. Как показано далее, этого можно добиться несколькими путями.
Уровень детализации Чтобы получить достаточную детализацию в местах сочленений, модели персонажей требуется связать со скелетом. Для этого нужно убедиться в наличии достаточного числа вершин на нулевом или первом уровне разбиения. Во время моделирования вы обязаны заботиться о том, чтобы течение линий поверхности объекта было равномерным и упорядоченным. Проще всего этого добиться путем созда-
289
Дополнительные критерии
ния моделей в виде сеток полигонов, которые потом преобразуются в иерархические поверхности. Этот переход нужно тестировать на различных стадиях, чтобы убедиться в верном направлении моделирования. Чтобы гарантировать, что Эрик Миллер получит достаточно хорошую модель для последующей сборки и анимации, на ранних стадиях процесса мы выяснили его требования. В основном он хотел, чтобы большинство деталей были сформированы на нулевом уровне разбиения. В результате вершины исходной модели на основе сетки полигонов будут точно соответствовать точкам нулевого уровня разбиения. Как уже упоминалось в главе б, в Maya существует уникальная система моделирования иерархических поверхностей. Это означает, что вы можете создавать детали любого уровня при различных разрешениях. При производстве более чем достаточно третьего уровня. На 12 уровне разбиение составляет 1/4096 по сравнению с нулевым уровнем. Подобная функциональность просто великолепна, но при современном развитии аппаратного обеспечения к ней лучше не прибегать.
Избыточные точки Другим предметом заботы при моделировании на основе иерархических поверхностей являются избыточные точки. Они обычно появляются в областях слияния нескольких поверхностей. Хороший пример показан на рис. 10.1. Обратите внимание, как при переходе от пальцев к руке создается подобие плотной паутины. Этот эффект возникает во многих случаях, к нему просто нужно быть готовым. --
•?•*
шт
:*-*Ш»
•'*
-
?
Рис. 10.1. Пример появления избыточных точек
Глава 10 • Персонажи
290
На рис. 10.2 представлена рука, у которой при переходе от пальцев к ладони просто происходит создание этой ладони из четырех полигонов.
Рис. 10.2. Оптимизированная версия руки
Текстуры При создании моделей нужно также учитывать последующий процесс назначения текстур. Возможности назначения проекционных координат иерархическим поверхностям такие же, как и в случае их назначения сеткам полигонов. Оба формата позволяют размещать рисунок текстуры на поверхн ости объекта, но по сравнению с назначением материала NURBS-поверхностям это достаточно долгий и трудоемкий процесс. В Maya существует замечательный инструмент для трехмерного рисования текстур, который, однако, работает корректно только в новых проекционных координатах. Другой возможностью являются проецирование карт текстур на основе ортографических проекций, позволяющее избежать многочисленны х проблем. Более подробно эта тема будет обсуждаться в главе 20. Существует множество способов создать оболочку персонажа. Например, можно настроить инструменты моделирования таким образом, чтобы на выходе появлялись иерархические поверхности. Для этого нужно вызвать диалоговое окно Preferences (Параметры), перейти на вкладку Modeling (Моделирование) и в группе Output Geometry Type (Тип выходной геометрии) установить переключатель Subdiv Surfaces (Иерархические поверхности). Кроме того, после завершения процесса моделирова-
Создание Кляксы и Крутана
291
ния в данный формат можно преобразовать объекты, состоящие из NURBS-noверхностей или сеток полигонов. Если вы чувствуете себя уверенней при работе с этими форматами, используйте последний способ. Можно также начать работу с объекта-примитива, состоящего из иерархической поверхности, и придать форме объем, например, взяв четырехстороннюю сетку полигонов и вылепив из нее нужный объект путем выдавливания граней. Это гарантирует получение хорошей модели и избавляет вас от проблем, неизбежно возникающих при преобразовании в иерархическую поверхность детализированных моделей на основе сеток полигонов или NURBS-поверхностей. Вы просто добавляете детали к единому объекту, избежав процесса соединения отдельных фрагментов. Однако чтобы добиться совпадения с поверхностью нулевого уровня разбиения, требуется сохранять большинство деталей в форме полигональной аппроксимации. В итоге вы получите нужные точки для привязки оболочки к скелету.
Создание Кляксы и Крутана Пришло время подтвердить наши выкладки путем создания реальных моделей, В этом разделе мы покажем вам процесс создания Кляксы и Крутана. Для ускорения моделирования мы создадим полку с набором кнопок для активизации нужных инструментов. После этого можно будет перейти к воспроизведению формы персонажей на основе иерархических поверхностей. Будем надеяться, что вы получите представление как об относительно простом процессе создания базовой формы, так и о добавлении мелких деталей.
Подготовительные операции Перед началом работы над моделями воспользуемся возможностями настройки интерфейса Maya, создав собственную полку. Существуют инструменты, которые вам предстоит применять чаще всего, поэтому имеет смысл максимально упростить к ним доступ.
Упражнение 10.1. Создание полки с кнопками запуска команд моделирования 1. Для начала убедитесь, что на экране присутствует элемент интерфейса Shelf (Полка), наподобие показанного на рис. 10.3. Если вы его не видите, воспользуйтесь командой Display > UI Elements > Shelf (Отображение > Элементы интерфейса к Полка).
.у—'ч :-
Sphere
..Т
IPolyCuba
-
'-
-
.
321Cube
•
ГйТф
:Smoolh
"
1 J
'"
'
-
•
'
Keep Faces Subdivide SplitpolygcExfrude Fac
Рис. 10.3. Полка Maya
2. Щелкните на кнопке с направленной вниз стрелкой, расположенной слева от полок, и выберите в появившемся меню команду New Shelf (Создав ь полку). Присвойте ей имя PolyModl.
292
Глава 10 • Персонажи
Пока новая полка не содержит элементов интерфейса. Вам предстоит перенести туда не только элементы для запуска чаще всего употребляемых команд, но и элементы для настройки нужных параметров. 3. Добавим на полку первую кнопку для запуска команды меню. Для добавления элемента интерфейса Maya в различных операционных системах предусмотрены различные клавиатурные комбинации: Ctrl+Aft+Shift в UNIX, Alt+Shift в Linux, Ctrl+Shift в Windows, Option+щелчок правой кнопкой мыши в Мае. В процессе выбора в меню команды Create > Polygon Primitives > Cube (Создать > Полигональные примитивы > Куб) нажмите и удерживайте комбинацию клавиш, подходящую для вашей операционной системы, На полке PolyModl появится кнопка, как показано на рис. 10.4.
Рис. 10.4. Первая кнопка на полке PolyModl
Чтобы задать другие параметры создания куба, щелкните на квадратике, расположенном справа от команды Create > Polygon Primitives > Cube (Создать > Полигональные примитивы > Куб). Введите в поле Subdivisions Along Width (Разбиение по ширине) значение 3, а в поле Subdivisions Along Height (Разбиение по аысоте) — значение 2. Щелкните на кнопке Apply (Применить), если вам требуется получить куб с этими параметрами, или же выберите в меню Edit (Правка) диалогового окна Polygon Cube Options (Параметры полигонального куба) команду Save
Создание Кляксы и Крутана
5.
6.
7.
8.
293
Settings (Сохранить настройки). Любое из этих действий устанавливает новые параметры команды. Повторите третий шаг, еще раз выбрав команду Create » Polygon Primitives * Cube (Создать > Полигональные примитивы > Куб) при нажатой клавиатурной комбинации. Обратите внимание, что на полке появилась кнопка для запуска той же команды, но с новыми параметрами. На данный момент имеющиеся на полке значки команд создания двух различных кубов имеют одинаковые имена, поэтому один из них нужно переименовать. Щелкните на кнопке с направленной вниз стрелкой, расположенной слева от полок, и выберите в появившемся меню команду Shelf Editor (Редактор полок). На вкладке Shelf Content (Содержимое полки) вы увидите дважды написанное слово Cube. Выделите первую строку и введите в поле Labels & Tooltips (Название и всплывающая подсказка) название 1 Poly Cube. Именно это название появится в текстовом режиме отображения полки. Чтобы получить надпись, которая будет находиться на кнопке вместе со значком, введите ее текст в поле Icon Name (Название значка). Присвойте второй кнопке название 321 Pcube. По умолчанию второй значок будет иметь то же самое название, что и первый, но лучше сделать его уникальным. Изменения, вносимые в диалоговое окно Shelf Content (Содержимое полки), немедленно отражаются на состоянии кнопок полки, поэтому, закончив работу, можно просто щелкнуть на кнопке Close (Закрыть). Однако если вы хотите, чтобы изменения сохранились и в следующих сеансах Maya, нужно вместо этого щелкнуть на кнопке Save All Shelves (Сохранить все полки). Чтобы избавиться от лишней кнопки, просто перетащите ее средней кнопкой мыши на кнопку со значком мусорной корзины, расположенную справа от полок, как показано на рис. 10.5.
и* ^г
Рис. 10.5. Кнопку, которая вам больше не требуется, можно перенести в мусорную корзину
Поместив нужные вам инструменты на полку Poly Modi, вы избавитесь от необходимости вызывать диалоговое окно с элементами для настройки этих инструментов. 9. Снова удерживая клавиатурную комбинацию, выберите в меню Polygons (Полигоны) команду Smooth (Сгладить), а затем — команду Tool Options t Keep Faces Together (Параметры инструмента > Объединить грани). Так создается полка с ин-
294
Глава 10* Персонажи
струментами для моделирования объектов на основе иерархических поверхностей. Эти инструменты можно использовать каждый раз, когда требуется применить выбранный метод. 10. Теперь, пользуясь описанной методикой, добавим на полку кнопки для запуска следующих команд меню Edit Polygons (Правка полигонов): • Subdivide (Дробление на равные части); • Split Polygon Tool (Разбиение полигона); • Extrude Face (Выдавить грань); • Merge Multiple Edges (Слияние множества ребер); • Make Hole Tool (Сделать отверстие); • Fill Hole (Заполнить отверстие). 11. Добавьте на полку PolyModl кнопки для запуска следующих команд меню Subdiv Surfaces (Иерархические поверхности): • Full Crease Edge/Vertex (Полные складки ребра/вершины); • Partial Crease Edge/Vertex (Частичные складки ребра/вершины); • Uncrease Edge/Vertex (Устранение складок ребра/вершины). 12. Напоследок добавьте на полку кнопку для запуска команды Modify > Convert * Subdiv to Polygons (Изменить > Преобразовать > Иерархические поверхности в полигоны). Теперь с помощью диалогового окна Shelf Editor (Редактор полок) можно отредактировать порядок следования, содержание надписей и вид кнопок. Теперь у вас есть система команд, позволяющая оперативно осуществлять модификацию поверхности. В остальных случаях используйте контекстные меню, вызываемые с помощью правой кнопки мыши. В процессе выполнения следующих двух упражнений вам предстоит активно применять выбранные инструменты при моделировании Кляксы и Крутана.
Моделирование Кляксы Собака Клякса представляет собой наполовину карикатурное четвероногое. Так как мы предпочитаем думать о создаваемых объектах в терминах иерархических поверхностей, представляя, что вырезаем скульптуры из мрамора, мы отдаем полигональной модели Кляксы роль камней, из которых будет получен окончательный объект. Мы изначально представляем общую форму целиком, смотрим, корректно ли она выглядит, и в случае проблем начинаем процесс моделирования сначала. Детали можно добавлять только после того, как мы будем полностью удовлетворены базовой формой. В копне концов, если основные пропорции модели неверны, какой смысл думать о нюансах? СОВЕТ Для этого проекта мы «вырастили» модель до определенного состояния, а затем выбросили ее, чтобы посмотреть, можно ли получить ее более эффективным и элегантным способом. В своих проектах вы должны действовать также. Оставляйте время на эксперименты, вместо того чтобы пускать в работу первую же полученную модель. Это вовсе не значит, что нужно много раз строить детализированный объект. Вместо этого поступите, как скульптор, который сначала создает макеты, а только потом переходит к окончательной скульптуре. Вы вряд ли получите готовую модель с первого раза, поэтому приготовьтесь к многочисленным «черновикам».
Создание Кляксы и Крутана
295
Рис. 10.6. Полигональный куб с гранями, выдавленными с помощью команды Extrude Face
Рис. 10.7. Грубая форма, полученная из цилиндра. Форма тела воспроизведена убедительно, чего нельзя сказать о форме головы
296
Глава 10- Персонажи
f n i;,.
.
Рис. 10.8. Модифицированный параллелепипед, в котором используются клиновидные грани для перехода шеи в нос
Часто бывает сложно определить, какая из черновых моделей приведет к финальной версии. Основная процедура при переходе к окончательному варианту объекта представляет собой построение полигональной формы из объекта-примитива, а затем эта форма тестируется путем преобразования в иерархическую поверхность. Рисунки 10.6-10.8 иллюстрируют построение базовой модели собаки. В следующем упражнении вам предстоит сделать простой макет для тестирования поверхности Кляксы. Упражнение 10.2. Разработка иерархической поверхности В этом упражнении вам предстоит активно использовать ранее созданные на полке кнопки. 1. Щелкните на кнопке 1 Poly Cube, чтобы получить объект-примитив Cube (Куб), и выделите его переднюю грань. Затем щелкните на кнопке Extrude Face (Выдавить грань). В сцене появится манипулятор TSR (Translate, Scale, Rotate), с помощью которого вы перенесете новую грань прочь от исходного куба. Это фундаментальный способ увеличения объема модели. 2. Выделите верхнюю грань и нажмите клавишу G, чтобы повторить операцию выдавливания. Перетащив грань, вы получите шею.
Создание Кляксы и Крутана
297
3. Снова повторите операцию выдавливания, еще раз нажав клавишу G, и переместите выделенную грань вверх, вдоль оси Y. После этого выделите манипулятор преобразования Rotate (Поворот) и поверните красное кольцо на 45° вокруг оси X. СОВЕТ Чтобы задать преобразование поворота на фиксированный угол, раскройте подменю Transformation Tools (Инструменты преобразований) меню Modify (Изменить), а затем щелкните на квадратике, расположенном справа от команды Rotate Tool (Поворот). Установите флажок Snap Rotate (Фиксированный поворот) и введите в поле Step Size (Размер шага) число 15.
4. Повторите выдавливание и поворот для формирования головы. 5. Снова повторите операцию выдавливания, но на этот раз поменяйте масштаб на 75 %. После этого выполните выдавливание морды вперед. 6. Выделите грани, расположенные с правой и с левой сторон. Выполните их выдавливание, сначала переместив наружу, затем — вниз. Выделите манипулятор поворота. При повороте обратите внимание, что другая сторона вращается в противоположном направлении. С этого момента вы должны забыть о двусторонней симметрии и начать работу с ближайшей к вам стороной модели. Если вы выполнили выдавливание двух граней одновременно, нужно убедиться, что у вас снят флажок рядом с командой Keep Faces Together (Объединить грани) подменю Tool Options (Параметры инструмента) меню Polygons (Полигоны). Этот флажок вы будете устанавливать и сбрасывать довольно часто, в зависимости от ваших нужд. 7. Выделите грани, из которых будут сформированы лапы, и выполните их выдавливание. Вытяните вперед лапы, даже если они будут находиться под углом 45е. Используйте инструмент Translate (Переместить), активизируемый нажатием клавиши W, чтобы переместить лапы на место. В этом случае грани будут перемещаться в одном направлении, а не в противоположных, как в случае с манипулятором TSR. 8. Выделите грани на двух лапах и выполните их выдавливание вниз. Снова проделайте это, формируя подушечки, но на этот раз вытягивание rpaiieu осуществляется примерно на четверть предыдущей длины. 9. Чтобы сформировать подушечку, выделите самые нижние грани, расположенные спереди на лапе, и выполните их выдавливание на небольшую величину, 10. Для формирования хвоста выделите заднюю часть собаки, выполните выдавливание грани и вытяните ее вперед, Затем поменяйте ее масштаб таким образом, чтобы хвост слегка заострялся к концу. 11. Снова выполните выдавливание грани и вытяните ее, формируя длинный прямой хвост. Итак, у нас есть макет собаки в виде полигонального массива. Вы можете и дальше манипулировать этой простой полигональной моделью после преобразования к иерархической поверхности. Даже после этого преобразования вы сможете применять инструменты из меню Edit Polygons (Правка полигонов). Затем вам предстоит протестировать новую форму поверхности и заняться моделированием симметричных деталей.
298
Глава 10* Персонажи
12. Щелкните на модели правой кнопкой мыши и выберите в появившемся меню команду Select (Выделить), выделяя всю модель. 13. Выберите в меню команду Modify > Convert * Polygons to Subdiv (Изменить > Преобразовать > Полигоны в иерархическую поверхность). Модель станет похожей на тюленя с лапами и хвостом. Теперь мы удалим половину модели, чтобы создать симметричный объект. 14. Щелкните на модели правой кнопкой мыши и обратите внимание на команды Coarser (Грубее) и Finer (Точнее), а также на команду Refine (Уточнить). Среди прочего в контекстном меню находится и команда Polygon (Полигон), позволяющая выполнить обратное преобразование к сетке полигонов. СОВЕТ Описываемый процесс называется полигональной аппроксимацией, так как полигональная форма используется как приближение к модели иерархических поверхностей. Для большей интерактивности старайтесь осуществлять как можно большее число преобразований в стандартном режиме. Представляйте границы, вершины и ребра сетки на базовом уровне, как управляющие ими полигоны. При создании деталей в стандартном режиме нельзя возвращаться к полигональной модели и увеличивать ее детализацию. Разбиение полигональных граней после редактирования иерархической поверхности приведет к ошибке. То есть перед переходом к редактированию на более высоком уровне нужно убедиться, что работа с полигональной моделью закончена.
15. Поверните модель боком, щелкните на ней правой кнопкой мыши и выберите в появившемся меню команду Face (Грань). Выделите все грани, лицевая сторона которых нацелена в отрицательном направлении оси Z, как показано на рис. 10.9. Удалите их. Это приведет к исчезновению одной половины модели, что избавит вас от необходимости вторично моделировать одни и те же детали, 16. Вернитесь к стандартный режим о помощью соответствующей команды контекстного меню, вызываемого щелчком правой кнопки мыши. Выделите все вершины открытых ребер. 17. Перейдите в окно проекции Front (Вид спереди) и переместите вершины только вдоль оси Z, нажав клавишу X. Это активизирует привязку к плоскости XY, 18. Продублируйте модель, щелкнув на квадратике, расположенном справа от команды Duplicate (Дублировать) в меню Edit (Правка). В группе Geometry Type (Тип геометрии) открывшегося диалогового окна установите переключатель Instance (Экземпляр). Введите в поле Scale (Масштабирование) для координаты 2 значение -1. Теперь изменения исходной половины объекта будут отражаться на его второй половине. К данному методу имеет смысл прибегать при наличии большого числа геометрических объектов, в точности подобных оригиналу. Это позволяет уменьшить размер файла, так как все копии исходного объекта являются всего лишь ссылками на него. К сожалению, продолжительность визуализации при этом не меняется, так как все равно приходится тратить время на пересчет пикселов каждого объекта. 19. Теперь вы можете выделить границу и выбрать в меню Subdiv Surfaces (Иерархические поверхности) команду Full Crease Edge/Vertex (Полные складки ребра/ вершины). Подвигайте границу в окне проекции и обратите внимание, как это отражается на состоянии второй половины.
299
Создание Кляксы и Крутана
F-.V 1л..к. С"..,г» :х-Ач '*» ••• ' ШШ ЙИЖЯ ER»J№S Part»* ' i
Рис, 10,9. Удаляемые грани
Как видите, исходному объекту-примитиву довольно быстро была придана форма собаки. Анализ этой формы показывает необходимость расширения модели в некоторых областях. Бок собаки пока что состоит всего из двух граней, нужно также смоделировать живот. Скорее всего, гам потребуются четыре разбиения. В области пасти деталей будет еще больше. Внутрь морды можно поместить отдельные модели челюсти и зубов. Эта модель представляет собой одну из многих версий, которые мы получили в поисках баланса между небольшим размером полигонального аппроксимирующего объекта и достаточной детализацией. Наш вариант персонажа находится в файле Dog^sketch.mb, расположенном в папке Chapters\ChapterlO прилагаемого к книге компакт-диска. Следующее упражнение также посвящено модели собаки, но вам предстоит более детально исследовать иерархические поверхности.
Упражнение 10.3. Моделирование собаки К предыдущей модели-макету можно добавить новые полигоны путем расщелл<:ния отдельных частей и их повторного соединения. Однако сделать это сложнее, чем начать работу с чистого листа. В этом упражнении вы создадите законченную модель собаки, которую уже можно представить техническому директору. Упражнение иллюстрирует процесс импорта опорных изображений, разработки формы и контроля всех деталей. 1. Создайте проект Spot и откройте новую сцену.
300
Глава 10* Персонажи
2. Перейдите в окно проекции Front (Вид спереди) и выберите в меню этого окна команду View > Image Plane * Import Image (Вид > Опорное изображение > Импорт изображения). В появившемся диалоговом окне выделите файл Side_Spot.iff, расположенный в папке Chapters\ChapterlO прилагаемого к книге компакт-диска, Введите в поле Center Z (Центрировать по Z) диалогового окна Channel Box (Окно каналов) значение -1. 3. В диалоговом окне Attribute Editor (Редактор атрибутоз) убедитесь, что в группе Display (Отображение) раздела Image Plane Attributes (Атрибуты опорного изображения) установлен переключатель in all views (Во всех окнах проекций). Щелкните на цветовом образце Color Gain (Масштабный коэффициент цвета) и введите в поля R (Красный), G (Зеленый) и В (Синий) появившегося диалогового окна значение 0,4. Для образца Color Offset (Смещение цвета) введите значение 0,3. В результате опорное изображение приобретет серый цвет, что позволит легко различать на его фоне активные и неактивные фигуры. 4. Создайте куб, щелкнув на кнопке 321 Pcube полки PolyModl, которая была создана в упражнении 10.1. Не снимая выделения с появившегося объекта, введите в поле Subdivisions Width (Разбиения по ширине) диалогового окна Channel Box (Окно каналов) значение 4. Макет собаки, созданный в предыдущем упражнении, показал, что для моделирования живота требуется дополнительное пространство. Поменяйте масштаб куба таким образом, чтобы он совпадал с размерами тела собаки на опорных изображениях в окнах проекции Тор (Вид сверху) и Front (Вид спереди). 5. В окне проекции Front (Вид спереди) выделяйте вершины нового куба и перемещайте их в положения, показанные на рис. 10.10. В данный момент важно достичь примерного совпадения с силуэтом туловища собаки на опорном рисунке. 6. Выделите центральные нижние и верхние вершины и поменяйте их масштаб относительно оси Z. 7. Выделите верхние правые вершины и переместите их вниз. Вы получите перпендикулярную грань, из которой будет выполняться выдавливание шеи. 8. Щелкните правой кнопкой мыши на модели и выделите грань, соответствующую основанию шеи. Выполните ее выдавливание. Повторите процесс выдавливания еще три раза, чтобы получить достаточное количество геометрических фигур для челюстей и глаз. 9. Теперь создадим переходную поверхность для открывания пасти. Выделите грани в области челюсти и убедитесь, что у вас активизирована команда Keep Faces Together (Объединить грани). Слегка выдавите их. 10. Сбросьте флажок у команды Keep Faces Together (Объединить грани) и выполните выдавливание тех же самых формирующих челюсть граней еще раз. 11. Слегка уменьшите масштаб граней, чтобы убедиться, что они не соединяются друг с другом, и немного сузьте морду. Переместите вершины таким образом, чтобы они совпадали с опорными изображениями в окнах проекции Тор (Вид сверху) и Front (Вид спереди).
301
Создание Кляксы и Крутана
i"i'
-
.i
Рис. 10.10. Настройка опорного изображения и первое редактирование полигонального куба
12. Перейдите в окно проекции Side (Вид сбоку) и импортируйте изображение heads_frontdetail.jpg с прилагаемого к книге компакт-диска. В поля Height (Высота) и Width (Ширина) диалогового окна Channel Box (Окно каналов) введите значение 15,2, чтобы выровнять голову с основанием шеи/ошейником. Значение в ноле Center X (Центрировать по X) должно равняться -15. 13. Теперь используйте детали изображения головы для формирования линии челюсти. Перемещайте ближайшие к опорному изображению вершины, выравнивая их с рисунком. 14. Выберите в меню команду Modify > Convert > Polygons to Subdiv (Изменить > Преобразовать > Полигоны в иерархическую поверхность). Совершите «облет камерой», чтобы убедиться, что все детали на месте. Нажмите клавишу 5 для перехода в режим тонированной раскраски, затем нажмите клавишу 3, чтобы задать более высокое разрешение модели. Воспользуйтесь командой Undo (Отмена) для возвращения к полигональной модели. Возможный вид модели на данный момент показан на рис. 10.11. На рисунке видно, что форма модели весьма близка к желаемой, но вам требуется получить дополнительные точки в местах расположения вершин иерархической поверхности. Именно этим мы займемся дальше.
302
Глава 10* Персонажи
Рис. 10.11. Модель на основе иерархической поверхности демонстрирует хорошую непрерывность поверхности и простоту построения
15. Начните с выдавливания грани хвоста. Поменяйте масштаб новой грани и поверните ее таким образом, чтобы в окне проекции Front (Вид спереди) она имела вид прямоугольника. 16. Щелкните на квадратике, расположенном справа от команды Extrude Face (Выдавить грань) в меню Edit Polygons (Правка полигонов). Введите в поле Divisions (Разбиения) раздела Other Values (Другие значения) значение 2. Немедленно переместите грань на конец хвоста. Заострите результат выдавливания на конце и сделайте его более плоским в центре при помощи операции Scale (Масштабирование). 17. При нажатой клавише Shift сначала выделите правую переднюю грань плечевого сустава, а затем ее ребро. Щелкните на квадратике, расположенном справа от команды Wedge Faces (Клиновидные грани) в меню Edit Polygons (Правка полигонов),, В поле Wedge Angle (Угол клина) оставьте заданное по умолчанию значение 90, а в поле Wedge Divisions (Разбиения клина) введите значение 2. 18. Переместите вновь появившиеся вершины таким образом, чтобы они совпадали с формой лопатки на опорном рисунке. Убедитесь, что угол грани, которую вы будете выдавливать для формирования лап, задан так, чтобы естественным образом сопрягаться с местом их сгиба.
Создание Кляксы и Крутана
303
19. Выполните выдавливание грани, чтобы сформировать лапу. Предварительно убедитесь, что в поле Divisions (Разбиения) раздела Other Values (Другие значения) в диалоговом окне Extrude Face Options (Параметры выдавливания грани) все: еще введено значение 2. Слегка поверните выдавливаемую область, чтобы устранить загиб в месте сочленения. 20. Повторите шаги 17-19 для задней лапы. 21. Выделите верхнюю грань в области пасти и щелкните на квадратике, расположенном справа от команды Extrude Face (Выдавить грань). Введите в поле Offset (Смещение) значение 0,5, а в поле Divisions (Разбиения) — значение 1. Переместите грань вверх относительно верхней челюсти. 22. Выделите грань в области нижней челюсти. На этот раз в поле Offset (Смещение) нужно ввести значение 0,1, а саму грань переместить вниз. 23. Выделите первые четыре грани, формирующие челюсть, и слегка поменяйте их масштаб, чтобы получить ротовое отверстие. 24. Теперь перейдем к ушам. Воспользуйтесь командой Split Polygon Tool (Разбиение полигонов) меню Edit Polygons (Правка полигонов), чтобы разбить полигоны на задней части головы и сформировать место для выдавливания ушей. Продолжите этот процесс на нижней части головы и в основании носа. 25. Выполните выдавливание грани с четырьмя разбиениями, оставив небольшой зазор в месте, где ухо должно свисать. 26. Сформируйте выдавливанием бровь, а затем путем выдавливания со смещением получите глазную впадину. 27. Преобразуйте полигоны туловища и головы в иерархическую поверхность. Щелкните на модели правой кнопкой мыши и выберите в появившемся меню команду Face (Грань). Выделите все грани, обращенные налево, как показано на рис, 10.12, и удалите их. 28. Вернитесь в стандартный режим с помощью команды Standard (Стандартный) контекстного меню, вызываемого щелчком правой кнопки мыши, и выделите все вершины на открытой границе. 29. Перейдите в окно проекции Front (Вид спереди) и переместите выделенные вершины вдоль оси 'L при нажатой клавише X, чтобы осуществить их привязку к плоскости XY. 30. Щелкните на квадратике, расположенном справа от команды Duplicate (Дублировать) в меню Edit (Правка). Введите в поле Scale (Масштабирование) для преобразования координаты Z значение -1 и в группе Geometry Type (Тип геометрии) установите переключатель Instance (Экземпляр). В итоге редактирование одной половины собаки будет отражаться на состоянии другой, что избавит вас от необходимости моделирования симметричных деталей, Итак, все готово для «скульптурных работ». Их можно осуществлять двумя способами: перемещать точки иерархической поверхности с помощью инструментов для работы с NURBS-поверхностями или с сетками полигонов. Кроме того, теперь можно детализировать любые области модели. В случае с Кляксой лучше всего перемещать точки полигонов, чтобы потом передать модель сборщику. Кроме того, на данный момент персонаж имеет несколько механи-
304
Глава 10 * Персонажи
стичный вид, поэтому желательно внести элемент случайности в форму аппроксимирующего объекта.
Рис. 10.12. Удаляемые грани
До этого момента вид модели основывался на ортографических проекциях, поэтому он не передает ощущение от будущего трехмерного персонажа. Пока что мы представляем себе голову в виде сферы и придаем глазам исходное нейтральное выражение. Сейчас имеет смысл назначить объекту материал с раскраской типа Blinn (По Блину). А также установить в сцене два источника света, освещающих объект с разных сторон, один из которых должен быть окрашен. Это позволит лучше различать создаваемые детали. А материал даст возможность наблюдать блики на поверхности модели. Время работы над главным персонажем может достигать двух недель. И даже после завершения его сборки иногда требуется дополнительное редактирование формы по функциональным причинам. В следующем упражнении нам предстоит немного «оживить» модель. Упражнение 10.4. Редактирование иерархической поверхности В этом упражнении мы усилим детализацию модели, сохраняя при этом непрерывность граней. Представьте себе модель, разбитую на однородные интервалы с общим направлением поверхностей. Мы будем избегать сеток на поверхности, которые там присутствуют волей неволей, так как их наличие усложняет процесс
305
Создание Кляксы и Крутана
детализации. В этом упражнении мы узнаем, где находится каждая точка и почему она находится именно там. 1. Начните с области пасти. Разбейте верхние, боковые и нижние грани верхней челюсти, чтобы сформировать нос, как показано на рис. 10.13.
:-
йрЩ>Й»»"в(**«Иа>
Fill Hole f>
Рис. 10.13. Разбейте эти грани, чтобы сформировать челюсть
2. 3. 4. 5. 6.
Продолжите разбиение вдоль верхней челюсти практически до кончика уха Выделите ребра ротового отверстия и частично согните их. Выделите вершины в области лодыжек и сформируйте частичный сгиб лап. Выделите основание носа и тоже согните его, как показано на рис. 10.14. Вернитесь в режим редактирования полигонов, Выделите переднюю грань одной из лап и разбейте ее на три вертикальные грани. Методом выдавливания сформируйте когти и слегка уменьшите их масштаб. 7. Вернитесь в стандартный режим. Выделите три грани когтей, щелкните на ни к правой кнопкой мыши и выберите в появившемся меню команду Refine (Уточнить). Выделите центральную вершину первого уровня и слегка перетащите ее вперед. 8. Снова выполните команду Refine (Уточнить) для точки первого уровня. Теперь выделите центральную точку второго уровня и переместите ее сначала вперед, а потом вниз. Слегка согните когти, как показано на рис. 10.15.
306
Глава 10' Персонажи
'
'
'
™
Рис. 10.14. Результат сгиба основания носа
*'
~-
'"
•• • - •
^
Рис. 10.15. Результат сгиба двух когтей. Осталась одна точка первого уровня
Создание Кляксы и «ругана
307
9. Подвигайте точки второго уровня, стараясь получить форму когтя на лапе, которая вам понравится. Перемещения каждой из точек осуществляйте по отдельности, чтобы получить несимметричный результат. 10. Удалите половину экземпляра собаки. Снова осуществите операцию дублирования, чтобы получить обычную копию. 11. Убедитесь, что все полигональные точки и вершины первого уровня находятся точно на центральной линии, и переведите обе половины модели в режим редактирования полигонов. Может оказаться, что грани на второй стороне собаки направлены нормалями вовнутрь. Чтобы проверить это, выберите в меню команду Display > Polygon Components > Long Normals (Отображение > Подобъекты полигонов > Длинные нормали). Произведите дублирование с отражением относительно оси Z. Вы заметите, что нормали копии направлены вовнутрь. Удалите копию. Для ее получения мы прибегнем к другому инструменту. 12. Отключите показ нормалей и выделите модель иерархической поверхности Щелкните на квадратике, расположенном справа от команды Mirror (Зеркальное отражение) в меню Subdiv Surfaces (Иерархические поверхности) и установите флажок Z в появившемся диалоговом окне. Теперь полученная копия будет выглядеть корректно. 13. Выделите обе половины модели и щелкните на квадратике, расположенном справа от команды Attach (Соединить) в меню Subdiv Surfaces (Иерархические поверхности). Введите в поле Threshold (Порог) значение 0,2. Это позволит сфор мировать из двух частей единую поверхность. ПРИМЕЧАНИЕ В поле Threshold (Порог) при соединении должно быть отличное от нуля значение, чтобы учесть любые неточности в размещении точек. Всегда вызывайте диалоговое окно с элементами настройки любого незнакомого инструмента, чтобы познакомиться с его возможностями.
Итак, мы усовершенствовали базовую форму собаки путем редактировании первичной полигональной модели. Дополнительную детализацию можно получит). аккуратным разбиением полигонов. В области уточнения иерархической поверх ности была проделана минимальная работа, так как мы дошли всего до третьего уровня, формируя когти. Итоговый вид модели показан на рис. 10.16, Наш технический директор Эрик Миллер попросил модель, которую легко можно было бы сгибать в виде аппроксимирующих полигонов, чтобы гарантировать отсутствие проблем при настройке. Это означает, что точки нулевого уровня и вершины полигонов должны располагаться в одном и том же месте. Также требуется детализация, достаточная для привязки скелета к точкам. К счастью, мы конструировали собаку, имеющую мультяшный вид, что облегчило нашу задачу. Для получения фотореалистичной собаки потребовалась бы большая степень детализации. Но в данном случае временные рамки не позволяли добиться совершенного реализма, кроме того, это не вписывалось в концепцию проекта. Теперь вам предстоит использовать уже знакомую по проделанным упражнениям технику для моделирования Крутана. Впрочем, в этом упражнении будет сделан больший акцент на общий вид персонажа.
Глава 10 • Персонажи
308
Рис. 10.16. Окончательная модель собаки готова к монтажу
Моделирование Крутана Крутаи был задуман как неприятный антигерой с изрядной дозой самолюбования. У меня были рисунки Скота Кларка, который запечатлел актера, сыгравшего нашего Крутана. Существовало множество версий внешнего вида этого персонажа. Первые показаны на рис. 10.17. На рис. 10,18 вы видите результат усовершенствования образа, Подобная работа крайне необходима. Слишком часто оказывается, что персонаж, смоделированный на основе первого же наброска, совершенно не привлекает зрителей. Мы тщательно работали над образом Крутана и, наконец, получили результат, представленный на рис. 10.19. Лицо также обдумывалось во всех деталях. Скотт представил нам набор вариантов от сложных к простым. Мы выбрали достаточно простой вариант, так как он показался нам наиболее привлекательным. Варианты представлены на рис. 10.20-10.23. Хороший дизайн персонажа столь же важен, сколь и хорошая модель. Если дизайн отсутствует, не стоит тратить усилия на моделирование. Желательно осознавать, что лучше всего работа выполняется в команде. Именно поэтому разработi «л') иж'ашего вида персонажа занимался Скотт Кларк, а заканчивал работу над модслып Дашо и, Марапджо (Daniel Naranjo). Теперь вам предстоит воссоздать nepvui..i-i.. < к-1 и п и - и мсь на предоставленных рисунках.
309
Создание Кляксы и Крутана
Hf
f- I
Рис. 10,17. Первые наброски Крутана, сделанные Скотом Кларком
Рис. 10.18. Усовершенствованные образы Крутана
Рис. 10.19. Окончательный вид нашего Крутана
310
Глава 10 • Персонажи
Более сложная ДПР моделирования и анимации форма головы. Но сделать ее вполне возможно... Рис. 10.20. Сложный дизайн головы
и •g Упрощенный вид головы Рис. 10.21. Простой дизайн головы, который и был выбран
Создание Кляксы и Крутана
Самый простой
311
Проще
Простой
<е-
Вероятно, имеет смысл упростить форму, сделав ее более мультяшной Рис. 10.22. Еще более простой дизайн головы персонажа
Три варианта тепа персонажа Рис. 10.23. Три варианта тела персонажа, которые были предложены Скоттом Кларком. Центральный проще всего для исполнения
312
Глава 10 • Персонажи
Упражнение 10.5. Создание Крутана Крутан представляет собой мультяшную, упрощенную форму человека. Эта модель будет скоЕ1струирована тем же самым способом, что и предыдущая, то есть на основе полигонального параллелепипеда. Ноги и руки мы упростим, так как они все равно будут закрыты одеждой. Но это не избавляет нас от необходимости моделировать мускулатуру, видимую через одежду. Выражение лица персонажа должно быть нейтральным, так как работа над этим аспектом моделирования выходит за рамки темы данной главы. Пока что нам нужно только получить объемную фигуру человека, начав работу с простого куба. Потом сетка полигонов будет преобразована в иерархическую поверхность. Мы создадим только одну сторону персонажа. Вторая будет получена путем зеркального отражения. Преимущества такого способа моделирования состоят в том, что персонаж состоит из одного фрагмента, к которому по мере надобности добавляются детали. Большинство деталей будут находиться на нулевом уровне иерархии, то есть совпадать с вершинами исходной полигональной сетки. 1. Создайте проект Jerk. 2. Импортируйте файл Jerk_head.JPG с опорным изображением, расположенный в папке Chapters\ChapterlO прилагаемого к книге компакт-диска. Эту операцию нужно проделать для окон проекции Front (Вид спереди) и Side (Вид сбоку). 3. Произведите однородное масштабирование изображений, чтобы придать им корректный размер. Также поменяйте параметр центрирования таким образом, чтобы положение изображений соответствовало показанному на рис. 10.24. Изображение тела будет получено альтернативным методом,
..
Рис. 10.24. Опорные изображения размещены в пространстве таким образом, чтобы вид спереди был слегка сзади вида сбоку
Создание Кляксы и Крутана
313
4. Создайте полигональную плоскость размером 512x612 (размеры изображения), а затем — материал, в котором изображение из файла Jerk_body.tif будет назначено каналу Incandescence (Свечение), и назначьте этот материал плоскости. Ориентируйте эту плоскость в окне проекции Front (Вид спереди) таким образом, чтобы выровнять ее с плоскостью изображения лица Крутана, и придайте ей нужный размер. Рисунок головы нужно совместить с головой на опорном изображении. 5. Создайте объект-примитив Cube (Куб) с четырьмя разбиениями по ширине, тремя — по высоте и одному — по глубине. 6. Поменяйте масштаб куба таким образом, чтобы в окне проекции Front (Вид спереди) он совпадал с изображением туловища, как показано на рис. 10.25, -В „,?.!_"!
__ T
:
EctMf
IPolyCLO." Jil(-..b«
S.l.wl,
ttet Гпж SunrtW» !!» itp,.ln,ri:<m,il, r
(Vital* Pit ,ф>Ы WJIS" if* и«я»«ж f -
-J
Рис. 10.25. Начало построения модели из объекта-примитива Cube
7, Выделите две нижние полигональные грани, расположенные справа, и убедитесь, что у вас активизирована команда Keep Faces Together (Объединить грани) подменю Tool Options (Параметры инструмента) меню Polygons (Полигоны). Выдавливанием сформируйте ногу до начала колена, затем до центральной части колена и напоследок — ниже колена. Это всего лишь точки, которые будут связаны со скелетом. Слегка поверните ногу, чтобы отделить ее. 8. Продолжите выдавливание, чтобы получить лодыжку и ступню. Затем выполните выдавливание передней грани ступни и слегка уменьшите ее размер. По очереди выдавите пальцы и переместите вершины вниз, чтобы получить плоскую ступню.
314 9.
10.
11.
12. 13.
Глава 10 • Персонажи
Продолжите верхнюю боковую грань, формируя руку тем же способом, который применялся для ноги, особое внимание обращая на выдавливание локтевой области и запястья. Из запястья выдавливанием получите ладонь. Это область усиления детализации, в которой одно разбиение сначала перейдет в два, а потом и в четыре, чтобы создать основу для формирования пальцев. Выделите четыре стороны вокруг ладони, оставив невыделенной переднюю грань. Используйте инструмент Subdivide (Дробление на равные части) меню Edit Polygons (Правка полигонов), чтобы сделать вместо одного полигона четыре небольших. С помощью инструмента Split Polygon Tool (Разбиение полигонов) разбейте переднюю поверхность на четыре вертикальные полосы. Выделите четыре грани семь раз, чтобы получить места сгибов пальцев. Используйте клавишу G для повторного вызова одной и той же команды. В итоге ваша модель будет выглядеть, как показано на рис. 10.26. •Aiwi-iiif«:i НА-
-j L- ;,: i tf й й |
Рис. 10.26. Детализированная рука, в которой на каждое сочленение приходится по две выдавленных грани
14. Убедитесь, что у вас активизирована команда Keep Faces Together (Объединить грани), и выделите две центральные грани на верхней части куба, чтобы получить короткую шею. Повторите процесс, чтобы получить угловое лицо, вы-
Создание Кляксы и Крутана
315
ровненное с линией челюсти. Выделите ребро на ключице и слегка переместите его вверх. 15. Воспользуйтесь командой View > Image Plane > Image Plane Attributes (Вид > Опорное изображение > Атрибуты опорного изображения) меню окна проекции Front (Вид спереди), чтобы открыть диалоговое окно Attribute Editor (Редактор атрибутов) для опорного изображения. Выберите в раскрывающемся списке Display Mode (Режим отображения) вариант None (Отсутствует), чтобы сделать опорное изображение невидимым. 16. Чтобы придать голове форму, используйте окна проекции Side (Вид сбоку) и Front (Вид спереди). Из граней шеи выдавите челюсть и слегка уменьшите ее размер. В окне проекции Side (Вид сбоку) выдавливание осуществляется шесть раз и таким способом формируется базовая форма головы. Дополнительные детали для формирования рта и носа будут добавлены на центральную полосу чуть позже. Другая полоса станет основой для глаз и ушей. Используйте две проекции, чтобы добиться грубого совмещения с профилем, как показано на рис. 10.27,
Рис. 10.27. Упрощенная голова
17. Выполните преобразование сетки полигонов в иерархическую поверхность. Перейдите в режим редактирования полигонов с помощью соответствующей команды контекстного меню, вызываемого щелчком на модели правой кнопкой мыши.
316
Глава 10" Персонажи
18. Скройте все опорные изображения в окне проекции Persp (Перспектива). 19. Выделите все грани на правой стороне персонажа, как показано на рис. 10.28, и удалите их.
Рис. 10.28. Убедитесь в наличии прямой линии от плеча к ноге
20. Выделите тело и переключитесь в стандартный режим. Раскройте подменю Subdiv Surface Components (Подобъекты иерархических поверхностей) меню Display (Отображение) и поочередно выберите команды Edges (Ребра) и Vertices (Вершины). Теперь ребра и вершины будут видимы всегда, и вам не потребуется выделять их с помощью команд меню, вызываемого щелчком правой кнопки мыши. 21. Чтобы гарантировать тангенциальную непрерывность вдоль центральной линии, сохраняйте два ряда нулевых точек параллельными друг другу. Осуществите привязку ряда граничных точек к плоскости YZ. В дальнейшем это облегчит процесс создания зеркальной копии и соединения двух половин. 22. Переключитесь в режим редактирования полигонов и выполните выдавливание грани, формирующей нос. Удалите боковую грань по центральной линии. Переместите вершины на нужные места в окнах проекций Side (Вид сбоку) и Front (Вид спереди). 23. Перейдите в стандартный режим. Выделите нижние ребра носа и полностью согните их. Выделите ребра на пересечении лица и ограниченного узкими рамками ребра и согните их частично, как показано на рис. 10.29.
317
Создание Кляксы и Крутана
Г*? til- >,'-'Л
'•"--<:
'>!*"
''"-«у-'-1 Ш§Ш
--»>•'
:"-f.['-. 1 «,:,„
1
Spilpo
IPuly«:Uhe SZlCuhB
.Sntialk
.
.
«"ep Faces h'uhilnii}* !ifiliiriulyf|Lb4.4oef-nQMe'S«'i'li»iMa*eHQla- NlHofe P0ly
Рис. 10.29. Частично согнутые подсвеченные ребра и полностью согнутые ребра, выделенные пунктиром
24. Вернитесь в режим редактирования полигонов и разделите полигон пополам, начав с верхней части головы, а потом переместившись вниз к ключице. В окне проекции Side (Вид сбоку) выделите ближайшую к уху грань. Выполните ее выдавливание со смещением 0,2. Еще раз выделите грань и уменьшите ее масштаб. 25. Вызовите диалоговое окно Extrude Face Options (Параметры выдавливания грани) и выберите в меню Edit (Правка) команду Reset Settings (Сбросить настройки). Создайте выдавливанием базовую форму уха. Поменяйте ее масштаб и поместите на место. Повторите операцию со сдвигом, а потом снова вернитесь к заданным по умолчанию параметрам инструмента и произведите выдавливание еще раз. Должен получиться результат, показанный на рис. 10.30. 26. Выделите две грани в области рта. Убедитесь, что у вас активизирована команда Keep Faces Together (Объединить грани). Выполните выдавливание этих граней пять раз, формируя губы и рот. Начните с верхней губы, пытаясь придать ей форму буквы М, как показано на рис. 10.31. На окончательном этапе формирования лица желательно видеть глаза персонажа. Это позволит точнее судить о его привлекательности. Вы можете импортировать файл Jerk_eyes.mb и использовать его в качестве опорного рисунка или создать собственную версию.
318
Глава 10 • Персонажи
Рис. 10.30. Ухо было сформировано выдавливанием полигонов
Т а1яцашщ11М.шя&ляалач. , ->•!-> iruih !ч'-' "'" •-
t X ' j I f H -(.!•.-
,-,::
,
Рис. 10.31. Выделенные грани губ, которым будет придана нужная форма путем выдавливания, и точки, формирующие губы и рот
Создание Кляксы и Крутана
319
27. Если вы выбираете второй вариант, создайте NURBS-примитив Sphere (Сфера), ориентировав проходящую через полюса ось вдоль оси X. Введите такие значения в поля Start Sweep Angle (Начальное значение угла) и End Sweep Angle (Конечное значение угла), чтобы веко было практически открыто и сверху и снизу. Поверните угол разворота на 180° относительно оси Y, чтобы веки были развернуты наружу. 28. Создайте сферу меньшего размера и вырежьте из нее область роговицы. Поместите опорную точку в центр и поменяйте ориентацию объекта. С помощью команды Attach Surfaces (Присоединить поверхности) меню Edit NURBS (Правка NURBS) присоедините этот объект к сфере, как показано на рис. 10.32. При этом в диалоговом окне Attach Surfaces Options (Параметры соединения поверхностей) должен быть установлен флажок Insert Knot (Вставить узловую точку). W
Рис, 10.32. Область роговицы после отсоединения
29. Хорошим подспорьем будет назначение глазам материала, поэтому воспользуйтесь материалом, содержащимся в файле Eye Shader.mb. Назначьте этот материал глазу. Создайте еще одну сферу промежуточного размера между ве ком и глазным яблоком. Назначьте ему прозрачный материал на основе раскраски Phong (По Фонгу). Результат этой операции показан на рис. 10.33. 30. Пришло время придать Крутану точную форму. На рис. 10.34 показано, как он может выглядеть.
320
Глава 10 • Персонажи
Рис. 10.33. Материал, каналу свечения которого назначена карта текстуры Ramp, делает глаз Крутана голубым
'.fUSX i«4»>
'^^^".бД^'^^Л-
Рис. 10.34. Несмотря на мультяшный вид, персонаж должны выглядеть живым. Пунктирные линии показывают места сгибов
Создание Кляксы и Крутана
321
31. Снабдите пальцы небольшим изгибом и подтяните ребра в местах сгибов, как показано на рис. 10.35. В качестве опорного изображения используйте собственные пальцы. Внимательно рассмотрите, как они выглядят при сгибе в суставах.
Рис. 10.35. Вид пальцев персонажа перед формированием сгибов
32. Выделите ребра, окружающие ногти, и полностью согните их, как показано i ia рис. 10.36. Окончательный вид руки показан на рис. 10,37. 33. Займемся созданием прически. Выберите в меню команду Create > Subdiv Primitives v Cone (Создать > Иерархические примитивы » Конус). Переместите верхние точки на боковые стороны, как на опорных изображениях. 34. Переместите вниз точки нулевого уровня, которые создадут линию волос. Это лучше всего делать в режиме показа тонированных оболочек объектов, чтобы видеть, насколько пересечение поверхностей соответствует опорному рисунку. 35. Создайте резкие грани путем изгиба вершин на втором уровне иерархии, как показано на рис. 10.38. После завершения работы над прической нужно получить зеркальную копию фигуры Крутана. 36. Выделите поверхность и выберите в меню Subdiv Surfaces (Иерархические поверхности) команду Mirror (Зеркальное отражение). Операция должна осуществляться относительно оси X. Теперь выделите обе поверхности и, введя в поле Threshold (Порог) значение 0,05, выполните команду Attach (Соединить). В результате должна получиться фигура, подобная показанной на рис. 10.39.
Глава 10* Персонажи
322
•
•3j!ti*:•,': Sptn.1
'
.
-'
IPdSCLU ajtlCliEii
.
I.' I ''a..,," Mojo tin
.
.
.
...; Л С.яи.Цщ.... 5
*• .
Рис. 10.36. Вид ребер, окружающих ногти, после сгиба
W/vf,,
'
•-11ЖВ'
Рис. 10.37. Готовая модель руки имеет достаточную детализацию, чтобы, сохраняя мультяшный вид, не стать излишне механистичной
Создание Кляксы и Крутана
' •- * "* ;: " ' * •
323
•
"•
' • •-
Рис. 10.38. Прическа Крутана, созданная путем редактирования точек на втором уровне иерархии
Рис. 10.39. Крутан готов к великим свершениям
324
Глава 10 • Персонажи
Заключение Моделирование на основе иерархических поверхностей имеет ясно выраженные преимущества. Модель создается из единого фрагмента и имеет непрерывную оболочку. Эти преимущества перевешивают достоинства традиционного моделирования персонажей из фрагментов NURBS-поверхностей. К счастью, существует возможность легко преобразовать иерархические поверхности в NURBS-поверхности и сетки полигонов. Важно только помнить о непрерывности поверхности. Перед тем как начать работу над сложной моделью, проконсультируйтесь с членами команды, которым предстоит заниматься сборкой персонажа, и узнайте их технические требования. Не жалейте времени на разработку образа и рисование многочисленных вариантов внешнего вида модели. Моделирование на основе иерархических поверхностей можно представить как создание единого объекта, к которому потом добавляются все необходимые детали путем выдавливания граней и разбиения полигонов. Старайтесь сделать несколько макетов модели и только после этого переходите к работе над окончательным видом персонажа. Лепите детали путем перемещения вершин поверхности, при необходимости переходя на следующий уровень иерархии. Важно сохранять относительно простую форму по сравнению с аппроксимирующей полигональной моделью с нулевым уровнем разбиения, чтобы иметь возможность сгибать ребра, как в случае с моделированием носа Крутана.
ЧАСТЬ III Технические аспекты Глава 11. Компоновка Глава 12. Узловая архитектура Глава 13. Создание усовершенствованных связей Глава 14. Частицы и динамика
11
Компоновка
В этой главе описывается процесс компоновки сцены при создании анимации, причем показано, что Maya является превосходным инструментом для решения этой задачи. Кроме того, рассказывается об общей последовательности сцен в коротком фильме, который вам предстоит создать в процессе чтения данной книги. Вдобавок будут описаны раскадровка, первичная анимация и финальные стадии редактирования. Вы познакомитесь со способами расстановки персонажей перед камерами с точки зрения реального кино и Maya. Особое внимание будет уделено следующим темам: О О О О
понятие компоновки; выделение ключевых моментов сценария; управление камерами; приемы быстрого редактирования сцены, включая нелинейное редактирование с помощью приложения Adobe Premiere.
Понятие компоновки Термин компоновка пришел к нам из традиционной анимации и означает композицию элементов на экране. Под это определение попадает также расстановка персонажей и фоновых элементов в сцене. В компьютерной графике камера, персонажи и прочие объекты являются полностью мобильными. Возможность свободно менять положение элементов фрагмента в любой момент времени добавляет новое измерение в компоновку анимированных фильмов. В больших цифровых студиях отдел компоновки сначала превращает раскадровки в семейства трехмерных моделей, В обязанности этого отдела входит размещение персонажей в кадре и, следовательно, создание определенной композиции на экране. Данный отдел также отвечает за все перемещения камер, на которые требуется разрешение руководителя проекта. В результате нужно получить непрерывный в пространстве и во времени переход от одного фрагмента к другому, чтобы рассказать зрителям связную историю. Сотрудники отдела компоновки работают с моделями низкого разрешения, что позволяет быстро визуализировать любой фрагмент анимации. Они оперативно
Понятие компоновки
327
просматривают фрагмент за фрагментом. Приведение макета в презентабельный вид может занять несколько часов. Часто фрагменты претерпевают повторяющиеся трансформации, пока не будут готовы для передачи в отдел анимации, которы и займется оживлением персонажей. Так как финальная анимация может потребовать значительных временных и денежных затрат, предварительные (черновые) фрагменты позволяют осуществлять быстрые эксперименты с персонажами на ранних стадиях. При этом редакторы и руководитель проекта могут свободно вносить изменения в любые части сцены, совершенствуя сценарий. Компоновка включает в себя также создание первичной анимации, содержащей фрагменты, лишенные любых деталей движения. ОЕШ помогают представить содержание сценария, показывая существенные моменты кадрирования и перемещения внутри каждого фрагмента. Персонажи при этом скользят от одной отметки к другой, принимая только наиболее существенные позы. Компоновка сцен в трехмерной графике имеет много общего с традиционной кинематографией. Обычный оператор помогает режиссеру запечатлеть его видение сцены на пленке. Он подбирает объектив камеры для каждого фрагмента и занимается освещением. Однако в производстве анимации компоновка включает в себя исключительно управление камерой. Фаза освещения наступает несколько позже, между назначением материалов и окончательной визуализацией. Поэтому после выбора объектива и завершения работы с камерой отдел компоновки обычно не вмешивается в дальнейшее редактирование сцены. Соответственно, аниматорам приходится заботиться о производительности только в рамках выбранной КОМПОЗИЦИИ.
Компоновка превращает раскадровки в живые объемные изображения. Сотрудники отдела компоновки помогают превратить двухмерные рисунки в реальные трехмерные действия. Этот процесс связан с быстрой визуализацией, допускающей многочисленные эксперименты и позволяющей получить окончательную композицию.
Интервью с сотрудником отдела компоновки Адам Шнитцер (Adam Schnitzer) является превосходным мастером компоновки и в настоящее время работает в фирме LucasArts, специализирующейся на выпуске компьютерных игр. Вот его взгляд на данную форму искусства. Э Расскажите о своем образовании. Я получил степень магистра живописи в Стэнфордском университете. В течение 12 лет рисовал пейзажи, продавая свои работы в галереях Лос-Анджелеса, Нью-Йорка и Сан-Франциско. В 1993 году я занялся созданием фонов для игр в компании Rocket Science Games. Затем я провел три года в фирме LucasArts, занимаясь опять же фонами и, в конечном счете, перешел к созданию трехмерных сред для таких игр, как, к примеру, Grim Fernando. В 1997 году я стал сотрудником фирмы Pixar, и следующие три года посвятил компоновке мультфильмов A Bug's Life (Жизнь жуков), Toy Story 2 (История игрушек 2) и Monsters, Inc (Корпорация монстров), Затем я вернулся в фирму LucasArts. О Чем вы занимаетесь в данный момент? Я работаю над интеграцией компоновки в процесс производства игр. Врезки (в игровой индустрии этот термин обозначает заранее записанные и включен-
328
О
О
О
О
Глава 11- Компоновка ные в игру фрагменты анимации в отличие от интерактивной кинематики, которой в ходе игры управляет сам игрок) использовались в играх долгое время. Но обычно они создавались после завершения работы над самой игрой, и процесс их разработки был несколько хаотичен. Одной из причин моего повторного найма в LucasArts являлись знания, приобретенные мной во время работы в фирме Pixar, в частности знания в области компоновки. Ваше определение компоновки. Процесс компоновки требует принятия двух решений: куда поместить камеру и как перед ней будут двигаться персонажи. Это примерно то же самое, что постановка сцен в театре. Художник-постановщик отвечает за место и время перемещения персонажей в фрагменте, а также за положение и перемещение камеры. В ходе работы над отдельной сценой задается ее продолжительность, распределяются во времени диалоги (если они есть) и закрепляются основные позы, а также «метки», к которым должен подойти персонаж. Совершенствуются положение камеры и любые ее перемещения, а также фокусное расстояние объектива. Затем сцена передается аниматору. Перед этим все сделанные настройки должны быть одобрены руководителем проекта. Соответственно, аниматор работает с параметрами, заданными в процессе компоновки. Как происходит переход к получению фрагмента или последовательности фрагментов? Перед началом компоновки требуется проделать ряд сопутствующих действий, Например, записать и отредактировать необходимые звуковые файлы. Завершить создание раскадровок. Смоделировать объекты и персонажей, смонтировать виртуальную съемочную площадку. Только после этого художник-постановщик загружает в свой компьютер сцену и персонажей и приступает к их размещению. Различные художники-постановщики применяют разные методы работы, но в общем случае сначала требуется получить примерный набросок движения персонажей, как можно больше соответствующий раскадровке, и проверить правильность размещения звуковых файлов. Затем производится установка камеры и начинается разработка движения вместе с выбором нужного поля зрения для сцены. Но работа над изолированными сценами не имеет смысла. Художник-постановщик отвечает за непрерывность повествования, поэтому берется полная последовательность сцен. Сначала просматривается вся анимация, затем — отдельные сцены. Распределение событий во времени, перемещения камеры и объединение записей в блок для каждой сцены призваны создать непрерывное повествование. Что меняется при переходе от раскадровки к трехмерной сцене? Самое большое изменение происходит с масштабом объектов. Персонажи с различным ростом, например Баз и Вуди в Toy Story (История игрушек), в раскадровке выглядят совершенно одинаково. Кроме того, часто меняется композиция. Сцены, согласно раскадровке являющиеся отдельными, часто сливаются друг с другом из-за перемещения камеры. Иногда бывает и так, что сцены исключают друг друга. На что обращают внимание при приеме на работу худо'жника-постановщика? В большинстве случаев от претендента требуется хорошее чувство движения. Стать художником-постановщиком можно при наличии самого разного опыта.
Четкость изображения
329
Некоторые сотрудники отдела компоновки фирмы Pixar раньше были операторами мультипликационной съемки, другие работали операторами кино. Некоторые, в том числе и я, начинали с создания декораций. В этом области работают даже бывшие программисты. Но помимо умения обращаться с приложениями для создания трехмерной графики требуются знания традиционной кинематографии. Каким образом сделать хорошую врезку? Как выразить сущность момента с помощью камеры? По каким критериям выбирают объектив? Как создать хорошую композицию? Навыки претендента должны показать, что он знает ответы на все эти вопросы. о Используете ли вы Maya в процессе компоновки ? На данный момент, являясь сотрудником фирмы LucasArts, я пользуюсь этим приложением как основным средством для создания трехмерной анимации (в Pixar применялось фирменное программное обеспечение). Я занимаюсь переложением на Maya всего того, к чему я привык за время работы в Pixar. О Как можно развить способности художника-постановщика? Смотрите больше фильмов. Но не как простой наблюдатель. Старайтесь знал изировать действия оператора и монтажера в каждой последовательности фрагментов. Это достаточно сложно, так как при производстве фильмов стараются сделать перемещения камеры и склейки фрагментов максимально незаметными. Если вы изучаете принципы компоновки, приобретите DVD-плеер и как можно чаще пользуйтесь кнопкой «Пауза». Думайте о том, куда была поставлена камера. Исследуйте длину отдельных фрагментов. Пытайтесь понять, почему камера движется именно таким способом. Анализируйте все аспекты расстановки персонажей на сцене в каждом фрагменте и старайтесь осознать, по каким причинам это было сделано именно таким способом. У хорошего режиссера ничего не бывает просто так.
Четкость изображения Получить в процессе компоновки четкое изображение крайне важно. Основой для получения четкого изображения является понятная и целостная композиция, Посмотрим, как актеры располагаются на экране. Почти всегда действует стандартное правило, называемое правилом 180°. Оно продемонстрировано на рис. 11.1. Чтобы понять его суть, проведите между персонажами, фигурирующими в сцене, прямую линию. Камера всегда должна располагаться с одной стороны от этой линии. Это гарантирует, что при переходе от фрагмента к фрагменту персонажи будут располагаться на одной и той же стороне экрана, повернувшись в нужном направлении. Мы настолько привыкли к выполнению этого правила, что любые отклонения от него приводят к путанице. Посмотрим внимательней на проект, работа над которым вам предстоит в процессе чтения этой книги. На момент съемки Крутан будет находиться слева, в то время как Клякса расположится справа на заднем плане. После перехода путем склейки к сцене с реакцией Кляксы на Крутана вы увидите, что собака осталась справа, в то время как Крутан отступил на задний план,
330
Глава 11 • Компоновка
Также нужно помнить о границах сцены. Их можно нарушать, но только при условии очерчивания новых границ. В нашем случае Крутан выходит из автомобиля, и его машина блокирует нам обзор со стороны улицы. Когда Крутан перемещается на тротуар, границы сцены сдвигаются. Возможность перемещаться в трехмерном пространстве, которую предоставляет вам Maya, позволяет легко определить местоположение камеры в подобных ситуациях.
Рис. 11.1. Графическое представление правила 1803 {обратите внимание, что положение персонажей одинаково в поле зрения обеих камер)
Для всех двухмерных и трехмерных анимированных фильмов, выпускаемых в наши дни, сначала тщательно пишется сценарий, рисуются раскадровки и ищутся прототипы, а только потом начинается дорогостоящее производство. Аниматоры лишены роскоши снимать несколько дублей, позволенной их коллегам-кинематографистам. Процесс производства трехмерного фильма должен включать тщательное планирование и давать возможность просматривать первичный результат перед переходом к многочасовой работе над анимацией и визуализацией. Намного дешевле убедиться, что сцена или действие ничего не добавляют к сценарию на фазе компоновки (или даже на фазе раскадровок), чем осознать это, когда производство уже в полном разгаре. Стоит также упомянуть про механизм сборки сцены, На фазе компоновки сцена состоит из одной готовой модели и макета с низким разрешением. После перехода к окончательному производству работа над моделями представляет собой всеобъемлющий процесс. При завершении эпизодов некоторые детали могут быть отброшены. В то же время в сцену могут попасть новые элементы, В Msya существует возможность ссылки на внешние файлы, которая позволяет ссылаться как
От раскадровки к первичной анимации
331
на модели с высоким, так и на модели с низким разрешением. Процесс компоновки начинается с моделей низкого разрешения, которые постепенно заменяются своими более детализированными собратьями. Таким образом, сцена в Maya состоит из ссылок на эпизоды, объекты и все прочие элементы. При обновлении ссылки вид сцены автоматически меняется. Существует еще один способ работы — размещение моделей с низким и высоким разрешением в разных слоях. В целом край не важно сохранять максимальную простоту сцен, чтобы быстро перемещаться и легко экспериментировать.
От раскадровки к первичной анимации Maya позволяет в значительной степени автоматизировать процесс превращения сценария в картинку на экране, даже если конечный результат не относится к области компьютерной графики. На ранней стадии производства нашего фильма раскадровки были нарисованы на карточках формата 3x5. Прежде всего, это был способ убедить остальную часть команды, что идея соответствует концепции книги и вполне вписывается в рамки нашего бюджета. Эти раскадровки указали принцип . создания фильма. Мы использовали именно карточки, потому что они позволяли осуществлять своего рода нелинейное редактирование, как показано на рис. 11,2.
Рис. 11.2. Компоновка последовательности фрагментов с помощью карточек происходит намного быстрее, чем моделирование и визуализация в Maya
332
Глава 11» Компоновка
Мы быстро собрали примерные модели персонажей и основных объектов, чтобы посмотреть, как они выглядят вместе. Простые приемы, например расширение тротуара, помогли точнее передать нашу историю, предоставив камере дополнительное пространство. Постепенно персонажи, объекты и наборы объектов были доработаны и стали соответствовать нашим первоначальным замыслам. Столь же полезной может быть «разведка местности». В производстве обычных фильмов этим занимается специальная команда, в задачу которой входит посещение возможных мест съемки. Они возвращаются с метрами отснятой пленки и с сотнями фотографий. Мы тоже вышли на улицу, избранную в качестве прототипа места действия, чтобы определить оптимальную точку размещения камеры. Это хорошо помогло нам при конструировании фрагментов и планировании будущей анимации. Перед началом работы над анимацией требовалось доработать сценарий, Какие действия должны быть смешными? Где встретятся Крутан и Клякса. Правильно распределив действующих лиц на сцене, можно достичь и комичности, и напряженности момента, что так необходимо для такого короткого фильма, как наш. Мы решили усилить напряженность сцен конфронтации Крутана и Кляксы с помощью телеобъектива. Также требовались несколько общих планов сцены, чтобы дать зрителям более полное представление о происходящем. После ряда экспериментов с трехмерными сценами мы лучше представили вид двухмерных рисунков. Мы нарисовали новые раскадровки, которые были отсканированы и загружены в графический редактор Adobe Premier (рис. 11.3).
Рис. 11.3. Просмотр раскадровок в программе Adobe Premier позволил представить, как будет выглядеть фильм
От раскадровки к первичной анимации
333
Продолжительность фрагментов была отмерена на временной диаграмме, а для указания на перемещения камеры применялась несложная техника панорамного сканирования. Это позволило приблизительно определить общую продолжительность фильма. Прелесть работы с пакетами, предназначенными для редактирования фильмов, состоит в том, что они дают возможность легко записать анимацию на пленку. В Maya вы также можете сохранить выходной файл в формате AVI (для PC) или Quicktime (для Macintosh), сделав соответствующие настройки в диалоговом окне Render Global Settings (Общие параметры визуализации). Потом результат визуализации можно посмотреть на экране, чтобы получить более полное представление о конечном результате анимации. Следующий шаг включает визуализацию первичной анимации, в которую входят движение камер и примерное перемещение персонажей. Для начала это делается только с одной камерой. Затем на стадии компоновки для каждой из камер применяют технику, которая подробно описана в представленных далее упражнениях. Файлы визуализируются аппаратно и загружаются в приложение Premier. Анимация сцены прохода Крутана по улице происходит с участием трех камер, транслирующих изображение с разных точек, как показано на рис. 11.4. Это дает возможность показать происходящее более подробно, не прибегая к повторной визуализации на стадии редактирования. eat
Чх11>
(tea
Рис. 11.4. Анимация автомобиля, едущего по улице, складывается из результатов съемки несколькими камерами
В процессе компоновки нужно также учитывать тип камер и способы управления ими. Именно этим мы займемся в упражнениях данной главы.
Глава 11 • Компоновка
334
Упражнение 11.1. Работа с камерой Камеру можно считать еще одним актером разыгрываемой пьесы. Именно она показывает происходящее зрителям. Большое значение имеет правильный выбор камеры. Для начала требуется открыть диалоговое окно Attribute Editor (Редактор атрибутов) и исследовать подборку пленок и объективов. По умолчанию в Maya применяется среднестатистическая камера, наиболее приспособленная для моделирования, но вовсе не предназначенная для достижения кинематографического реализма. Посмотрим, какое влияние на вид сцены оказывает выбор объектива и пленки. 1. Загрузите файл Layout_Camera$.mb с прилагаемого к книге компакт-диска. Этот файл содержит уличную сцену, воспроизведенную с низким разрешением, примерные модели уличных объектов, Кляксу, Крутана и его автомобиль. Убедитесь, что ось Z системы коорди пат направлена вверх. При необходимости в группе Up Axis (Вертикальная ось) раздела World Coordinate System (Глобальная система координат) категории Settings (Настройки) диалогового окна Preferences (Параметры) установите переключатель Z. 2. В меню View (Вид) окна проекции Persp (Перспектива) раскройте подменю Select Camera (Выделить камеру) и выберите команду Camera Attribute Editor (Редактор атрибутов камеры), В раскрывающемся списке Control;; (Тип камеры) раздела Camera Attributes (Атрибуты камеры) выберите вариант Camera and Aim (Камера и цель). Повторно выделите камеру. В кадре должен появиться белый кружок, как показано на рис. 11.5.
Рис. 11.5. Вот так должен выглядеть экран после выделения камеры и вызова диалогового окна Attribute Editor
От раскадровки к первичной анимации
335
3. Щелкните в поле Focal Length (Фокусное расстояние) и, удерживая клавишу Ctrl, перемешайте указатель мыши при нажатой левой кнопке. Этот способ дает более точный контроль над любым ползунком. Поменяйте значение данного параметра с 10 до 200 и обратите внимание, как объект постепенно приближается (рис. 11.6). Телеобъектив показывает объекты крупным планом. Это может подчеркивать напряженность момента или обеспечивать слежение за каким-нибудь объектом. То есть, как только взаимодействие между персонажами станет более напряженным, мы начнем увеличивать фокусное расстояние. И наоборот, широкоугольный объектив замечательно подходит для съемки сцен общего плана.
Рис. 11.6. Камера, снимающая левую сцену, имеет широкоугольный объектив 24 мм, в то время как камера, снимающая правую сцену, использует телеобъектив 350 мм
4. Попытайтесь вращать камеру вокруг центра, меняя фокусное расстояние и оставляя Крутана в центре путем его выделения с последующим нажатием клавиши F. 5. В разделе Film Back (Пленка) диалогового окна Camera Attribute Editor (Редактор атрибутов камеры) раскройте список Film Gate (Кадровое окно). Вы увидите огромное число форматов, в том числе Vista Vision, 16 мм, 35 мм и т. д. Они были разработаны для точного соответствия реальным камерам, которые использовались для получения фонового изображения. В результате с помо-
336
Глава 11 • Компоновка
щью пунктов этого списка можно заставить виртуальную камеру вести себя, как настоящую. 6. Выберите в списке Film Gate (Кадровое окно) вариант 35mm i.85 Projection, как показано на рис. 11.7, и сделайте фокусное расстояние равным 35 мм,
Рис. 11.7. Наш антигерой попал в кадр для первой съемки
Итак, мы выбрали камеру, подходящую для съемки. Характеристическое соотношение 1:1,85 означает, что если высоту принять за 1, то длина кадра будет равняться 1,85. Это традиционные пропорции пленки 35 мм, к которым вы привыкли в кинотеатрах. Теперь нужно подтвердить разрешение камеры. В меню окна проекции Persp (Перспектива) выберите команду View > Camera Settings к Resolution Gate (Вид > Настройки камеры > Разрешение кадрового окна). Откройте диалоговое окно Render Global Settings (Общие параметры визуализации). В разделе Resolution (Разрешение) выбирайте разные варианты в раскрывающемся списке Presets (Предустановленные значения), обращая внимание на то, как при этом меняется значение в поле Device Aspect Ratio (Характеристическое отношение устройства отображения). Понаблюдайте за белым кружком-мишенью и кадром при выделенной камере. Нам требуется характеристическое отношение устройства отображения, равное 1,85, поэтому мы обратимся к видео для выбора формата.
От раскадровки к первичной анимации
337
8. В меню окна проекции Persp (Перспектива) выберите команду View > Camera Settings * Film Gate (Вид > Настройки камеры > Кадровое окно), чтобы увидеть границы изображения. Ширина кадра видеозаписи составляет 720. Разделив это число на 1,85, получим 389,189. 9. В разделе Resolution (Разрешение) сбросьте флажки Maintain Width/Height Ratio (Сохранять соотношение ширина/высота) и Lock Device Aspect Ratio (Заблокировать характеристическое отношение устройства отображения). Введите значение 720 в поле Width (Ширина) и значение 389 в поле Height (Высота), как показано на рис. 11.8.
Рис. 11.8. Разрешение и характеристическое соотношение синхронизированы
В результате в поле Device Aspect Ratio (Характеристическое отношение устрой сгва отображения) появится значение 1,851. Это примерно то, что нам нужно. Теперь у нас есть замечательная имитация реальной камеры. 10. В качестве заключительного шага выберите в меню команды View > Camera Settings > Safe Title (Вид > Настройки камеры > Безопасные титры) и View > Сатепз Settings » Safe Action (Вид * Настройки камеры > Безопасное действие). Появится рамка, внутри которой элементы сцены гарантировано не будут обрезаны при просмотре на экране. Это было простое упражнение по кадрированию изображения в Maya. При выборе камеры вам придется экспериментировать с различными объективами, фо-
338
Глава И- Компоновка
кусными расстояниями и характеристическими отношениями. Теперь, получив первичные сведения о настройке камеры, рассмотрим, как с нею управляться. Упражнение 11.2. Анимация короткой последовательности фрагментов В этом упражнении вам предстоит провести быструю визуализацию с целью компоновки сцены. В вашу задачу входит распределение действия во времени и корректное размещение действующих лиц на экране. Мы применим Maya для размещения камеры и получения набора коротких фрагментов, которые затем будут смонтированы. Многие пользователи необдуманно приступают к анимации и уделяют перемещениям камеры слишком мало внимания. С другой стороны, существуют и те, кто, обнаружив, что камеру тоже можно анимировать, начинают ее перемещать, не задумываясь о логической мотивации этого действия. В этом упражнении вам предстоит сделать ряд склеек и выполнить ряд мотивированных перемещений камеры. Это будут первые фрагменты короткого фильма «Место для парковки». 1. Загрузите файл Parking_Spot Opening.mb с прилагаемого к книге компакт-диска, 2. Вы увидите, что камера нацелена вниз, как показано на рис. 11.9. Выберите в меню View (Вид) окна проекции команду Select Camera (Выделить камеру) и откройте диалоговое окно Channel Box (Окно каналов). На данный момент должны быть видимы такие элементы интерфейса, как шкала диапазонов и ползунок таймера анимации. Установите ползунок на отметку первого кадра и нажмите клавишу S, чтобы создать ключ. Диапазон анимации должен включать 300 кадров.
Рис. 11.9. Сцена с высоты птичьего полета. Редкий случай, когда применяется симметричная композиция
От раскадровки к первичной анимации
339
3. Средней кнопкой мыши перетащите ползунок на отметку кадра 60. Камеру нужно опустить пониже, наклонить и немного увеличить масштаб, чтобы появилась фигурка собаки. Создайте еще один ключ анимации. Вы только что проделали панорамирование с наклоном, чтобы показать окружающую обстановку, 4. Увеличьте масштаб таким образом, чтобы собака оказалась в правой нижней трети экрайа. Переместитесь на уровень глаз, создайте ключ анимации в кадре 90 и средней кнопкой мыши перетащите ползунок таймера анимации на отметку кадра 120. 5. Сделайте наезд камерой, показав крупным планом голову Кляксы, как показано на рис. 11.10. Сделайте ключевым кадр 140.
d —Т.-jtff—v.JT.-..-.-..ib, „_
Йфои
^ШШЙЙН т|ч;6».ао«а -о fS
IJOCCD"
Рис. 11.10. Крупный план негодующей Кляксы {детали этой пока грубой модели додумайте самостоятельно)
6. Левой кнопкой мыши передвиньте ползунок на отметку кадра 1, а затем средней кнопкой мыши верните его на отметку кадра 180. Это быстрый способ копирования фрагмента. 7. Активизируйте окно проекции Persp (Перспектива): а нишу откройте диалоговое окно Graph Editor (Редактор анимационных кривых), как показано на рис. 11.11, Используйте клавишу F, чтобы увидеть все кривые анимации. Воспроизведите анимацию.
340
Глава 11 • Компоновке
||
9 | e В;
Рис. 11.11. Отредактировать процесс движения камеры можно в диалоговом окне Graph Editor
Вы обнаружите нестабильность в перемещениях камеры. С этим часто сталкиваются начинающие аниматоры. Поэтому вам предстоит заняться контролем за ее перемещениями. 8. Выделите кадры с 60 по 80 и щелкните на кнопке Linear Tangents (Линейная форма). Воспроизведите анимацию. Движение камеры выглядит несколько механистичным. Проверьте другие кадры, задав для касательных режим Step (Ступенчатый). Теперь камера остается неподвижной, скачком переходя в новое положение в ключевых кадрах, исключая фрагмент первого панорамирования с наклоном. Поэкспериментируйте с различными типами касательных в моменты перехода от одного фрагмента к другому. Затем вам потребуется базовая анимация персонажей и объектов. Цель этого мероприятия — распределить действие во времени и расставить элементы на экране. Вы должны логически выделить основные моменты сценария, чтобы посмотреть, будут ли они смотреться вместе. В начале фильма собака отдыхает на залитом солнцем тротуаре. На своем автомобиле подъезжает Крутан, и Клякса замечает его краем глаза. 9. Перетащите ползунок таймера анимации на отметку кадра 150. С помощью соответствующих кнопок строки состояния установите режим выделения иерархических цепочек. Выделите в окне проекции автомобиль и задайте для него ключ анимации.
Заключение
341
10. Выделите фигуру собаки и создайте ключевой кадр. 11. Поверните собаку на -180° вокруг оси Y и сделайте ключевым кадр 195. Это быстрая реакция Кляксы на автомобиль. Вот с такой скоростью и степенью приближения осуществляется компоновка. Если вы проводите над одной сценой больше двух часов, скорее всего, вы совершаете лишние действия. Разумеется, бывают разные случаи. Для полнометражного фильма первичная анимация каждой сцены подразумевает долгие итерации. А ведь фильм может включать в себя до 2000 отдельных фрагментов. Старайтесь переходить от одного фрагмента к другому быстро, не пытаясь достигнуть совершенства. В данном случае не имеет смысла заниматься анимацией персонажей. Вам всегс лишь требуется задать перемещения камеры и параметры для последующей анимации.
Заключение В этой главе мы рассказали о том, как в процессе компоновки сценарий приобретает конкретную форму. Вы познакомились со способами управления камерой и быстрого воспроизведения всей сцены. Работа с прототипами и применение итераций увеличивают эффективность работы над сценой. Вспоминайте о кинематографических эквивалентах происходящего на каждой стадии производства анимации.
12 Узловая архитектура Основные сведения об узловой архитектуре Maya необходимы для понимания принципов работы этого приложения. Очень легко, не обращая внимания на концепции, перейти сразу к обучающим упражнениям и получить непосредственные результаты. Но при этом вы пропустите самое важное — умение применять знания, полученные в виде абстрактных концепций, для решения возникающих в процессе работы конкретных проблем. В этой главе вы найдете базовые сведения по архитектуре Maya, действительно элегантного и гибкого приложения для создания трехмерной графики. Maya часто описывается как большой ящик, наполненный полезными (но иногда недокументированными) инструментами. Эти инструменты представлены в виде узлов. В этой главе будут описаны универсальные методики, которые позволят вам применять все узловые инструменты, а не только те, которыми вы научились пользоваться. Эта глава призвана стать основой для дальнейшего изучения темы узлов, связанной с преобразованиями, связями узлов и другими вопросами, с которыми приходится сталкиваться в процессе работы в Maya. Сюда относятся проблемы с атрибутами и типами узлов, в частности следующие: О преобразования в Maya; О различия между DAG- и DG-узлами и способы доступа к ним; О циклы графа зависимости, типы узлов и предназначенные только для чтения узлы графа зависимости; О связи между множественными узлами, включая историю и связи атрибутов.
Преобразования в отношениях предок—потомок Пользователи должны знать, что перемещение объекта-предка автоматически приводит к перемещению объекта-потомка. Это происходит из-за того, что потомок существует в координатном пространстве предка. Принципы отношений предокпотомок достаточно простые. Однако эту концепцию недостаточно просто помнить, ее нужно также понимать и использовать на полную мощность.
Преобразования в отношениях предок—потомок
343
Любой, кто работал в игровой .индустрии, скажет, что координатное пространство, в котором осуществлялась анимация узла, часто играет важную роль при экспорте данных в игровой процессор. То же самое касается экспорта нескольких пакетов данных в киноиндустрии. Несовпадения координатных пространств в буквальном смысле приводят к сдвигу, перемещению, а возможно, и масштабированию всего вокруг. Эта концепция действует и во многих других областях компьютерной графики. В действительности, групповые и пулевые узлы представляют собой намного больше, чем просто изящный способ организации данных в диалоговых окнах Hypergraph (Просмотр структуры) или Outliner (Структура). Когда узел создается в глобальной системе координат, он существует относительно глобального координатного пространства, а опорная точка этого объекта является центром преобразований. Блокировка преобразования узла, дочернего в глобальной системе координат, которая выполняется с помощью команды Freeze Transformations (Зафиксировать преобразования) меню Modify (Изменить), переопределяет нулевую точку матрицы преобразования объекта и сдвигает центр преобразований из точки (0,0,0) , глобальной системы координат в узел формы объекта. Другими словами, локальные координаты узла подобъектов, такие как вершины полигонов или управляющие точки NURBS-поверхностей, оказываются в глобальном пространстве. Если узел имеет предка или является частью групп ы, это означает, что он перестает быть дочерним по отношению к глобальному пространству, а превращается в дочерний объект матрицы преобразований предка. Это очень просто. Представим себе посадку в автомобиль. Вы являетесь дочерним объектом по отношению к окружающему пространству, пока идете по земле, В момент, когда вы садитесь в автомобиль, вы попадаете в координатное пространство автомобиля. Когда автомобиль начинает двигаться, выдвигаетесь вместе с ним, Вы перемещаетесь относительно земли, несмотря на то, что на самом деле сидите. То есть вы ограничены новым координатным пространством. Создать отношения предок—потомок между узлами уровня объекта можно несколькими способами. О Чтобы создать предка по отношению к многочисленным потомкам, выделите все узлы, которые вы хотите сделать потомками, последним выделите узел-предка и нажмите клавишу р (регистр имеет значение). Кроме того, можно воспользоваться командой Parent (Сделать родителем) меню Edit (Правка). Клавиатурная комбинация Shift+p по умолчанию разрывает связь предок—потомок для выделенного узла или удаляет узел из иерархии преобразований и делает его потомком на уровне глобальной системы координат. О Для создания группового узла (пулевого родител ьского) выделите узел или узлы и нажмите клавиатурную комбинацию Ctrl+g (регистр имеет значение). СОВЕТ Проще всего увидеть отдельные узлы или их иерархии в диалоговом окне Hypergraph (Просмотр структуры). В процессе просмотра списка дочерних объектов одного родителя часто имеет смысл поменять их расположение таким образом, чтобы они следовали друг за другом. Многие, чтобы получить нужную очередность дочерних объектов, разрывают и вновь создают связи между узлами. Но на самом деле это лишнее. Достаточно нажать клавишу Ctrl и средней кнопкой мыши перетащить узел, положение которого требуется поменять, на узел, расположенный в нужном месте. Также это действие можно выполнить с помощью команды reorder языка MEL.
344
Глава 12 • Узловая архитектуре
Для создания отношения предок—потомок между объектами и узлами формы применяется следующая методика. Сначала создается NURBS-сфера и полигональный куб с помощью соответствующих команд меню Create (Создать). Пусть узел формы (в нашем случае он называется nurbsSphereShapel) — это узел, у которого отсутствуют атрибуты Translate (Перемещение), Rotate (Поворот) и Scaie (Масштабирование), а узел преобразования (в нашем случае он называется pCubel) — любой узел с указанными атрибутами. Выделите узел формы и узел преобразования и введите в командной строке следующую MEL-команду: parent -shape -relative;
То, что случится после этого, может показаться странным. Вы только что сделали узел NURBS-формы дочерним по отношению к узлу преобразования полигонов. Вы спросите: «И какой же узел получен в результате, и вообще, что я только что сделал? «• Ответ может показаться запутанным и сложным, но на самом деле он прост, как только что проделанное действие. Вы всего лишь связали две формы под единым преобразованием. Графический интерфейс Maya не обеспечивает эту возможность, потому что она может быть неправильно понята среднестатистическим пользователем. Но с помощью несложной MEL-команды эту операцию легко можно проделать. Она крайне полезна, если вы хотите повторно связать геометрическую форму с новым преобразованием, например, для моделирования, сборки персонажа или просто, чтобы изъять форму у текущего предка и преобразовать ее по-другому. Напоследок нужно упомянуть, что иногда Maya создает дополнительные родительские узлы преобразования без вашего на то желания. Эти новые узлы, появившиеся в иерархии, являются всего лишь средством автоматического вычисления разницы между координатными пространствами объекта и его нового родителя. Как избавиться от этого назойливого узла преобразования? Это довольно утомительный, хотя и несложный процесс. Нужно понимать, что надежно удалить такой узел можно только после возвращения преобразованиям объекта заданных по умолчанию значений из исходного координатного пространства, в котором существует рассматриваемый объект. То есть нужно, чтобы значения всех перемещений, поворотов и изменений масштаба равнялись 1. Разумеется, если вы помните, какой узел иерархии был потомком раньше, можно просто разорвать связь дочернего узла преобразования, вернув его в координатное пространство, в котором он находился до момента неверного связывания. Другими словами, можно просто поместить узел ниже в иерархии дополнительного преобразования, вернув его в исходную иерархию, и все будет работать превосходно. Если же напрямую вернуть атрибутам нулевые значения преобразования, Maya постарается защитить вас от этого действия. Ваш объект будет перемещаться, поворачиваться или масштабироваться в противоположном направлении, компенсируя разницу между координатными пространствами двух узлов — верхнего и нижнего. После этого можно разорвать связь с дочерним узлом. Преобразование больше не создастся автоматически, но дочерний узел будет преобразовываться неподходящим способом. Разумеется, это совершенно нежелательно, и именно от этого Maya старается предохранить вас путем создания дополнительных узлов преобразования, с которыми вам пришлось столкнуться изначально. Не стоит раздражаться. Изба-
Объекты, формы и подобъекты
345
виться от них достаточно просто. Всего лишь вычислите разницу для каждого атрибута, чтобы обратить в ноль вышеуказанные преобразования путем добавления к их дочерним преобразованиям дополнительных атрибутов (перемещения, поворота и масштабирования). Затем отмените нежелательные преобразования, установив для перемещений и поворотов значение 0, а для масштабирования — значение 1. После этого можно без проблем разорвать связь узла с надоевшим преобразованием и вернуть этот узел к исходному предку. Впрочем, если узлы были повернуты относительно разных осей, эта операция может оказаться достаточно нетривиальной. Все зависит от сложности иерархии. Может потребоваться просчитать преобразования координатного пространства. Лучше всего в этом случае просто оставить дополнительные узлы, если нет насущной необходимости избавляться от них. В противном случае просто помните, что Maya разрешит удалить их только после возвращения дочерних узлов в корректное исходное пространство преобразований,
Объекты, формы и подобъекты Вы должны хорошо понимать, что происходит в Maya на уровне объектов и подобъектов. Объекты существуют в виде узлов. Эти узлы могут преобразовываться целиком, подобно автомобилю, едущему по дороге. Кроме того, объекты должны быть построены из составных частей, точно так же, как кузов автомобиля состоит из стали, алюминия и резины. Отдельные части узлов, составляющие его суть, называются подобъектами. Подобъекты узла существуют внутри узла формы, в то время как преобразования узла существуют внутри узла преобразования объекта. Следовательно, можно отметить, что деформаторы связаны с узлом формы, а не преобразования. То же самое касается других элементов, вносящих вклад в историю формирования объекта, а также графов зависимости. Где еще деформаторы могут получить доступ к составным частям объекта? В действительности узел формы определяет поведение узла объекта; преобразование можно представить просто внешней оболочкой для перемещения, но не для создания. Это также объясняет возможность существования многочисленных узлов формы, которые являются дочерними по отношению к одному и тому же узлу преобразования, Узел формы является неотъемлемым потомком узла преобразования. Такая структура полностью надежна и действует для практически любого видимого узла, допускающего выделение. Существует несколько способов увидеть отношения между объектом, формой и подобъектами. Э Увидеть отношения между узлом преобразования (предком) и узлом формы (потомком) можно в диалоговом окне Hypergraph (Просмотр структуры). Достаточно выбрать в меню этого диалогового окна команду Options > Display > Shape Node (Параметры > Отображение > Узел формы). Рисунок 12.1 поможет вам понять, как преобразование перемещает форму (а следовательно, и подобъекты) через пространство. О Для перехода в режим выделения подобъектов можно нажать клавишу F8 или воспользоваться кнопкой Select by component type (Выделение типов подобъектов)
346
Глава 12 • Узловая архитектуре
в строке состояния, как показано на рис. 12.2. Можно также щелкнуть на объекте правой кнопкой мыши и выбрать в появившемся контекстном меню нужный режим работы с подобъектами.
Рис. 12.1. Отношения между формой и объектом в диалоговом окне Hypergraph
.
Рис. 12.2. Доступ к подобъектам для редактирования определенных свойств узлов, например, их формы ' • .
Рис. 12.3. Некоторые команды меню Display позволяют сделать видимыми подобъекты даже в режиме выделения объектов
Основы узловой архитектуры Maya
347
О Просматривать конкретные подобъекты можно также с помощью соответствующих команд подменю NURBS Components (Подобъекты NURBS) и Polygon Components (Подобъекты полигонов) меню Display (Отображение), как показано на рис. 12.3, Однако имейте в виду, что если оставить эти команды активными, это может запутать других пользователей, которые будут открывать этот файл, так как подобъекты загромождают сцену. Поэтому лучше пользоваться двумя предыдущими способами просмотра подобъектов.
Основы узловой архитектуры Maya Связи между узлами, атрибуты узла и иерархические отношения являются родственными понятиями, которые помогут вам выйти из практически любого затруднительного положения или добиться управляемого поведения объектов в сценах. В большинстве случаев связи узлов ограничены не столько возможностями приложения, сколько пользовательской интуицией, Разумеется, нужно понимать, как работают все эти узлы и чему служат определенные атрибуты узлов. Не зная; как входные и выходные связи узлов работают вместе и как путем соединения нужных атрибутов можно создать иерархию, невозможно понять архитектуру Maya. Задание связей между отдельными узлами является творческим процессом, Можно сформировать подчиненную связь для практически любого атрибута, которая будет непосредственно контролировать любой другой атрибут. Разумеется, эти атрибуты должны быть совместимы друг с другом. Также с помощью связей, отношений предок—потомок или ограничений можно добиться, чтобы преобразования одного узла управляли преобразованиями другого узла. Если непосредственная связь невозможна, всегда можно вставить один из многочисленных переходных узлов, воспользоваться переходной функцией или написать MEL-сценарий, переводящий данные атрибута в совместимую форму.
DAG-узлы DAG-узел (аббревиатура DAG расшифровывается как directed acyclic graph — направленный ациклический граф) является всего лишь средством представле ния сложных иерархических отношений в данных — иерархии предков и потом ков. Каждый раз, смотря на объекты в режиме показа иерархии в диалоговом окнг Hypergraph (Просмотр структуры) или Outliner (Структура), вы наблюдаете направленные ациклические графы. По существу, любой узел, который в режиме выделения объектов можно выделить в окне центральной проекции, например в окнг Persp (Перспектива), а затем переместить с помощью инструмента Move (Переместить) и сделать родительским по отношению к другим узлам, представляет собой DAG-узел.
DG-узлы DG-узлы (аббревиатура DG расшифровывается как dependency graph — граф зависимости) используются для получения данных через входные атрибуты, дальней-
348
Глава 12 • Узловая архитектура
шей обработки и вывода данных через выходные атрибуты. Существуют различные типы DG-узлов, но все они имеют сходное назначение. Они вводят и выводят данные. Замечательным примером графа зависимости является узел Multiply Divide (Множественное деление). Он получает численные данные в качестве входных, умножает их и выводит полученный результат. Каждый раз, когда вы смотрите на объект в диалоговом окне Hypergraph (Просмотр структуры) в режиме показа входных и выходных связей, вы видите представление графа зависимостей в Maya.
Входные и выходные графы зависимости Для начала возьмем простую аналогию из реальной жизни, которая поможет вам понять, что представляют собой графы зависимости. Представьте их в виде реки или ручья. Откуда начинается ручей? Скажем, его истоком является артезианский колодец. Следовательно, этот колодец является первым узлом нашего графа. Он производит воду, струящуюся вниз по течению. Элементы, из которых состоит эта вода, можно сравнить с данными. Предположим, что в воде содержится загрязняющее вещество, карбонат кальция, которое нужно извлечь перед тем, как воду начнут пить люди. То есть у нас есть узел — артезианский колодец, из которого выходят данные — карбонат кальция. Ниже по течению располагается узел переработки воды. Он обрабатывает карбонат кальция и выводит его из потока. Этот узел расщепляет составные данные (карбонат кальция) на отдельные фрагменты (кальций и карбонат). Соответственно, после прохождения потока через обрабатывающий узел в нем содержится два модифицированных элемента, полученные из карбоната кальция. В результате получим два новых потока, каждый из которых следует в своем русле. Назовем их рекой и притоком. Как река, так и ее приток имеют узлы ниже по течению, обрабатывающие данные, вышедшие из узла обработки воды. Данные-кальций содержатся в воде притока, а данные-карбонат — в воде реки. При этом как река, так и ее приток всего лишь следуют потоку данных. Узлом назначения воды с кальцием, которую несет приток, является всего лишь узел сборного танка, который поглощает выделенный кальций, не выдавая наружу ничего. За узлом обработки воды ниже по течению реки располагается узел распределения воды, делящий единый поток на массив из тысячи отдельных ручейков. В конце каждого ручейка находится узел водопроводного крана. Когда вы поворачиваете кран, вода вытекает, ее можно использовать для питья или принятия ванны. Описанный процесс представляет собой упрощенную версию обработки воды с целью ее смягчения. Его можно легко представить в виде сети графов зависимости. Можно даже усмотреть корреляцию между открыванием крана и визуализацией или выводом данных на экран. На рис. 12.4 показано, как вышеописанная гипотетическая сеть узлов графа зависимости выглядела бы в Maya. В диалоговом окне Hypergraph (Просмотр структуры) можно выделить узел, входные и выходные связи которого вы хотите увидеть, а затем выбрать вменю Graph (Граф) команду Input and Output Connections (Входные и выходные связи). В папке Chapters\Chapterl2 прилагаемого к книге компакт-диска находится файл WATER_TREATMENT.mb, содержащий показанную на рисунке сеть узлов.
Основы узловой архитектуры Maya
If*
W.. Г'-
349
.-.
Рис. 12.4. Визуальное представление входных и выходных связей нашей сети узлов, воссозданное в Maya
Создание DG-узла DAG-узел представляет собой всего лишь узел преобразования (например, узел группы), в то время как DG-узел является элементом графа входных и выходных данных. Почти все узлы в Maya принадлежат к этим двум типам — сюда входят раскраски, материалы, источники света, камеры, деформаторы, кривые анимации, ограничения, геометрические объекты, частицы, выражения и даже элементы, не имеющие формы. Более того, существует возможность связать любой DAG-узел, имеющий пространство преобразований, с любым DG-узлом с совместимыми входными атрибутами. Простые для понимания примеры DG-узлов, которые могут быть связаны с DAGузлами, можно найти на вкладке Utilities (Служебные элементы) диалогового окна Create Render Node (Создать узел визуализации), показанного на рис. 12.5. Особенно полезным является узел Multiply/Divide (Умножить/Разделить). Ниже показан процесс его создания. 1. Выберите в меню команду Window > Rendering Editors > Hypershade (Окно > Редакторы визуализации »• Редактор узлов), чтобы открыть редактор узлов.
350
Глава 12» Узловая архитектуре
Рис. 12.5. С помощью диалогового окна Create Render Mode можно создать многочисленные узлы визуализации
2. Выберите в меню появившегося диалогового окна команду Create > General Utilities > Multiply Divide (Создать > Общие служебные элементы > Умножить/Разделить). 3. Нажмите комбинацию клавиш Ctrl+A, чтобы открыть для появившегося узла диалоговое окно Attribute Editor (Редактор атрибутов). 4. Обратите внимание на атрибуты Inputl (Входные данные 1) и Input2 (Входные данные 2). Они принимают некоторые значения (введенные вручную или из присоединенного узла), а потом на их основе вычисляют некое значение, сохраняемое в качестве выходного атрибута. Выходной атрибут скрыт, так как он предназначен только для чтения, другими словами, исключительно для передачи данных другим атрибутам. В конце этой главы вы увидите, как легко связать выходные данные одного узла с входными данными другого.
Циклы в графах зависимости Графы зависимости в Maya представляют собой сети узлов с односторонними связями. Связь нижележащего узла с вышележащим недопустима. Другими словами,
Основы узловой архитектуры Maya
351
все связи DG-узлов должны иметь одно и то же направление при переходе от выходных данных одного узла к входным данным следующего. Существование циклов в графах зависимости напрямую не запрещено, просто при этом не гарантирован корректный результат или стабильность сети и передачи данных. Циклы можно сравнить с ездой в неверном направлении по улице с односторонним движением. Это можно сделать, и вы даже благополучно доберетесь до конца, если на улице отсутствует другой транспорт. Но при этом вы все равно нарушаете закон и ставите в опасность целостность ваших пассажиров (данных), а также других водителей и пешеходов. Так что всегда опасайтесь появления сообщения «Cycle On node may not evaluate as expected. Use 'cycleCheck -e off to disable this warning». Попытайтесь определить, данные каких атрибутов участвуют в образовании цикла. Наличие циклов также затрудняет выполнение операции отмены для атрибутов, значения которых являются результатом зацикленных данных. Распространенным примером создания цикла является ситуация, когда для объекта-предка пытаются создать ограничение типа Point (Точка) или Orient (Ориентация) с одним из его потомков. На рис. 12.6 показан другой простой пример зацикленного графа зависимости,
Рис. 12.6. Циклы в графе зависимости почти всегда приводят к нежелательным и недоступным для повторения результатам, которые часто невозможно отменить
352
Глава 12 • Узловая архитектура
Типы узлов Любой существующий узел относится к определенному типу. Тип сохраняется в узле формы, но не в узле преобразования объекта. Последний всегда соответствует универсальному типу преобразования. Узел обязательно должен иметь тип. Ближе всего к отсутствию типа является тип Unknown (Неизвестен). Проще всего интерактивно определить тип узла, введя в редакторе сценариев следующую команду: nodeType " I s - s i " ;
Перетащите средней кнопкой мыши этот фрагмент кода из диалогового окна Script Editor (Редактор сценариев) на полку, чтобы получить кнопку вызова команды, которой можно воспользоваться в любой момент. Затем выделите один узел формы (любой, который вам интересен) и выполните эту MEL-команду, щелкнув на созданной кнопке. Информация о типе узла появится в окне редактора сценариев. Чтобы увидеть длинный список всех известных типов узлов в Maya, вызовите диалоговое окно Hypergraph (Просмотр структуры) и выберите в меню Show (Показать) команду Auxiliary Nodes (Вспомогательные узлы). Появится диалоговое окно со списком всех типов узлов в Maya. Вывести список всех зарегистрированных на данный момент типов узлов на экране можно также с помощью команды: print 'Is -nodeTyaes';
Этот список узлов без преувеличений представляет собой полный набор инструментов Maya, в том числе и встраиваемых модулей. В большинстве случаев пользовательский интерфейс Maya обеспечивает создание и автоматическое связывание узлов, хотя существуют и исключения. Некоторые узлы скрыты от пользователя, так как не относятся к графическому интерфейсу. Однако это не означает, что вы не может с ними работать. Любой из этих узлов может быть создан вручную с помощью команды createNode: createNode wtAddMatrix; // Врезультате получаем: wtAddMatrixl //
ПРИМЕЧАНИЕ В случае создания с помощью команды createNode недокументированного узла вам придется догадываться о назначении этого узла по его атрибутам.
Узлы, не являющиеся DAG-узлами Узлы, не являющиеся DAG-узлами, представляют собой всего лишь DG-узлы. Это означает, что они являются своего рода узлами вычислений, существуя без каких бы то ни было преобразований. В большинстве случаев они требуются для кор-
Просмотр графа истории и узлов сцены
353
ректного функционирования новой сцены. По большей части существующие в сцене по умолчанию узлы, не являющиеся DAG-узлами, не нужно преобразовывать путем выделения в окне проекции и последующего редактирования. DG-узлы обычно являются частью созданного пользователем графа зависимости. По умолчанию узлы, не являющиеся DAG-узлами, практически всегда предназначены только для чтения и не допускают удаления. Разумеется, в некоторых случаях можно отредактировать атрибуты заданного по умолчанию узла, не являющегося DAGузлом, но при этом вы рискуете стабильностью сцены. Некоторые атрибуты таких узлов можно наблюдать с помощью графического пользовательского интерфейса, например, при аппаратной визуализации в диалоговом окне Render Global Settings (Общие параметры визуализации). Если же атрибуты узла, не являющегося DAGузлом, скрыты от пользователя, не стоит даже делать попыток их редактирования, за исключением тех случаев, когда вы точно знаете, какой именно результат требуется получить. Вот несколько примеров, предназначенных только для чтения узлов, не являющихся DAG-узлами, которые существуют по умолчанию и гарантируют стабильность сцены: о о о о о о О О о О
layerManager; globalCacheControl; defaultHardwareRenderGlobals; ikSystem; characterPartition; renderPartition; de.faultRenderLayer; globalRender; renderLayerManager; strokeGlobals.
Чтобы увидеть узлы, не являющиеся DAG-узлами, в меню Display (Отображение) диалогового окна Outliner (Структура) снимите флажок у команды DAG Objects Only (Только DAG-объекты).
Просмотр графа истории и узлов сцены Если на подобъекты узла формы объекта оказывают непосредственное влияние связи между расположенными ниже узлами, а также целевые атрибуты формы в связях графа зависимости, говорится, что узел имеет историю. Историю узла можно в общих чертах представить в виде любых данных, которые находятся ниже в графе зависимости и влияют на создание узла. Таким образом, под историей подразумевается любой фактор, влияющий на создание узла формы объекта (например, узел деформатора). Удаление истории не гарантирует исчезновения всех свя-
354
Глава 12 • Узловая архитектура
зей графа зависимости для узла. В действительности существуют дополнительные наборы узлов или так называемые промежуточные узлы, которые не оказывают совершенно никакого действия и остаются связанными с вашим графом даже после удаления истории. В зависимости от обстоятельств это может быть как положительным, так и отрицательным моментом. Соответственно, желательно понимать, как, когда и почему узел может создавать скрытые узлы зависимости и историю — в процессе своего создания или в процессе обработки. История обычно представляет собой ненужные данные, которые неопытные пользователи забывают удалить, в результате чего итоговый размер файла со сценой может вырасти на несколько мегабайтов. Кроме того, ухудшается стабильность редактирования и взаимодействия. С другой стороны, история может быть замечательным инструментом, так как позволяет после завершения создания узла менять атрибуты, влияющие на этот процесс. Для этих атрибутов можно даже создать ключи анимации или связать их с любым другим атрибутом. То есть история создания объектов является одной из самых мощных функций Maya, но только в случае, когда пользователь осведомлен о том, как с ней работать и в каких случаях ее стоит сохранить. Вот как можно посмотреть, что происходит с историей входных и выходных данных узла и его непосредственных связей: о раскрыть раздел Input/Output (Входные данные/Выходные данные) в окне Channel Box (Окно каналов) под названием узла формы; О использовать кнопки со стрелками и верхние вкладки окна Attribute Editor (Редактор атрибутов); О выбрать команду Inputs > All Inputs (Входные данные > Все входные данные) в контекстном меню, открываемом по щелчку правой кнопки мыши в окне проекции; О выбрать команду Outputs t All Outputs (Выходные данные > Все выходные данные) в контекстном меню, открываемом по щелчку правой кнопки мыши в окне проекции; 3 выбрать команду Input and Output Connections (Входные и выходные связи) в меню Graph (Граф) диалогового окна Hypergraph (Просмотр структуры); О выбрать команду Input and Output Connections (Входные и выходные связи) в меню Graph (Граф) диалогового окна Hypershade (Редактор узлов). Из этих способов для просмотра графа зависимости узла лучше всегс подходят последние два. Диалоговые окна Hypergraph (Просмотр структуры) и Hypershade (Редактор узлов) настолько связаны друг с другом, что остается только удивляться, почему фирма AliasjWavefront не создаст на их основе единый элемент интерфейса. Оба они предназначены для просмотра потоков данных как всего графа сцены, так и его частей. Единственное их отличие состоит в том, что диалоговое окно Hypershade (Редактор узлов) по умолчанию показывает только узлы материалов, текстур, источников света и раскрасок. Оно используется в основном для созда-
Связывание атрибутов различных узлов
355
ния сетей материалов и связывания узлов, которые помогут в визуализации, освещении и назначении материалов, Диалоговое окно Hypergraph (Просмотр структуры) по умолчанию показывает все узлы уровня объектов, исключая узлы материалов и источников света. Оно применяется для систематизации и группировки сцены в режиме иерархии и для соединения атрибутов узлов в режиме просмотра входных и выходных связей. Оба этих диалоговых окна являются бесценными редакторами, поэтому вы должны освоить их как можно лучше. Только в этом случае вы сможете «на полную мощность» использовать сети узлов. ПРИМЕЧАНИЕ Реальным различием между этими редакторами является возможность динамической визуализации образцов материалов в диалоговом окне Hypershade (Редактор узлов) при внесении изменений в их параметры, что дает пользователю представление о том, как будет выглядеть материал. При этом в данном диалоговом окне отсутствует возможность просмотра иерархии сцены. В то время как режим просмотра диалогового окна Hypergraph (Просмотр структуры) позволяет наблюдать порядок иерархических преобразований сгруппированных узлов. Однако при этом все узлы в диалоговом окне Hypergraph (Просмотр структуры) представлены в виде стандартных значков. Именно поэтому этот редактор допускает загрузку больших графов данных и работает намного быстрее диалогового окна Hypershade (Редактор узлов). Авторам больше нравится диалоговое окно Hypergraph (Просмотр структуры); они используют его для перемещения по узлам сцены. Этот редактор объединяет функциональность диалоговых окон Hypershade (Редактор узлов) nOutliner (Структура) в пределах одного быстродействующего окна с понятным интерфейсом.
Все, что нужно сделать для просмотра атрибутов узла, — выделить его и посмотреть на полученный результат, например, в диалоговых окнах Channel Box (Окно каналов) и Attribute Editor (Редактор атрибутов), Имеются и другие элементы интерфейса, обеспечивающие подобный просмотр. Например, диалоговое окно Attribute Spread Sheet (Список атрибутов) предназначено для одновременного изменения одних и тех же атрибутов у различных объектов. В диалоговом окне Connection Editor (Редактор связей) можно связать один атрибут с другим. Диалоговое окно Channel Control (Управление каналами) позволяет блокировать атрибуты, а также включать и выключать возможность создания ключей для них. Вывести на экран список атрибутов выделенного узла можно, введя в диалоговом окне Script Editor (Редактор сценариев) следующую команду: print "MstAttr";
Если затем эту команду перетащить на полку, воспользовавшись средней кнопкой мыши, для получения списка атрибутов узла вам будет достаточно выделить этот узел и щелкнуть на созданной кнопке.
Связывание атрибутов различных узлов Задачу непосредственного связывания объектов, имеющих атрибуты и обрабатывающих данные, можно считать своего рода визуальным программированием. Создание «с нуля» графа зависимости для достижения определенной цели или
356
Глава 12* Узловая архитектура
для решения какой-то проблемы может быть забавным и поучительным упражнением. Теперь, когда вы познакомились с DAG- и DG-узлами и узнали, для чего нужна история редактирования объекта, создадим простую связь между парой узлов.
Упражнение 12.1. Связывание двух DAG-узлов Начнем с узла служебного элемента Sampler Info (Информация об образце) и заданного по умолчанию материала. Этот узел используется визуализатором для получения данных о материале, назначенном поверхности. Компания Alias Wavefront пишет про этот узел следующее: 1
М,|.. , .1, ,,1.
Рис. 12.7. Диалоговое окно Hypershade предоставляет доступ ко многим важным узлам
Связывание атрибутов различных узлов
357
Обеспечивает информацией о каждой точке поверхности, которая была взята в качестве образца или обсчитана для визуализации. Элемент Sampler Info (Информация об образце) предоставляет данные о положении точки в пространстве, ее ориентации и наклоне касательных, а также о ее позиции относительно камеры, Мы воспользуемся диалоговыми окнами Hypershade (Редактор узлов) и Connection Editor (Редактор связей), чтобы установить связь между двумя узлами графа зависимости. 1. Создайте сферу, выбрав в меню команду Create > NURBS Primitives * Sphere (Создать > NURBS-примитивы > Сфера). 2. Выберите в меню диалогового окна Hypershade (Редактор узлов) команду Create > General Utilities > Sampler Info (Создать > Общие служебные элементы > Информация об образце), как показано на рис. 12.7. 3. Теперь, не снимая выделения с узла Sampler Info (Информация об образце), нажмите клавишу Shift и щелкните на образце раскраски Lambert (По Ламберту). 4. Щелкните на кнопке Input and Output Connections (Входные и выходные связи), как показано на рис. 12.8.
Рис. 12.8. Кнопка Input and Output Connections
5. Нажав клавишу Shift, перетащите средней кнопкой мыши узел Sampler Info (Информация об образце) на образец материала Lambert (По Ламберту). Появится диалоговое окно Connection Editor (Редактор связей) с автоматически загруженными узлами, которые вы пытаетесь связать. Пришло время связать два атрибута. 6. Выделите строку Facing Ratio (Соотношение между гранями) в левом окне редактора связей. Затем раскройте дерево атрибута Color (Цвет) в правом окне, щелк-
358
Глава 12 • Узловая архитектура
нув на значке со знаком «плюс» слева от его названия, как показано на рис. 12.9. Осталось выделить атрибут Color G (Зеленый цвет), чтобы получить непосредственную связь.
Рис. 12.9. Раскрытие дерева атрибута Color
Вы увидите, что материал изменил цвет. Внутри он будет зеленым, а по краям — фиолетовым. Это изменение цвета является результатом того, что атрибут Facing Ratio (Соотношение между гранями) контролирует канал зеленого цвета и дает на выходе значение от 0 до 1 в зависимости от угла между нормалью к поверхности в рассматриваемой точке и направлением на камеру, проводящую визуализацию в данный момент. Теперь визуализируйте сцену и посмотрите на полученный результат. Поэкспериментируйте, связывая атрибут Facing Ratio (Соотношение между гранями) с другими атрибутами материала. Законченный пример сети узлов находится в файле FACING_RATIO_SHADER.mb прилагаемого к книге компакт-диска.
Заключение Материал этой главы служит введением в узловую архитектуру Maya и призван заложить основы для понимания того факта, что Maya функционирует всего лишь
Заключение
359
как набор узлов преобразований и вычислений с передачей данных между атрибутами этих узлов. Мы более подробно поговорим о связях между узлами в следующей главе. Кроме того, понимание сути преобразований и форм очень пригодится при настройке персонажей. Основные сведения об узлах и методах связывания их атрибутов дадут вам возможность создавать материалы, монтировать персонажей, писать MEL-сценарии и выражения, делать многое другое.
13
Создание усовершенствованных связей
В Maya существует возможность создания пользовательских атрибутов. Как и обычные атрибуты узлов, они могут как управлять, так и быть управляемыми. Например, можно воспользоваться атрибутом, который контролирует активное и неактивное состояния нескольких взвешенных точечных ограничений, образующих смешанный элемент управления. Этот элемент позволяет персонажу без помех брать объект и класть его на место. Полный контроль над настройкой с помощью нескольких атрибутов, допускающих создание ключей, облегчает дальнейшее использование, редактирование и обновление файла. В этой главе мы поговорим о способах получения пользовательских элементов управления путем создания узлов, добавления атрибутов и связывания их друг с другом. Глава включает в себя несколько упражнений различной степени сложности, в которых рассматривается широкий диапазон методик определения отношений между узлами и атрибутами. В числе прочего мы обсудим следующие темы: О получение стандартных контроллеров руки и пальцев с помощью управляемого ключа, ограничений и диалогового окна Connection Editor (Редактор связей); О хватание случайным образом перемещающегося объекта с помощью взвешенных ограничений; О моделирование вторичных движений скелета с помощью динамики частиц, взвешенных ограничений и обратной кинематики; О изменение геометрии после связывания скелета с оболочкой и передачи U- и V-координат на оболочку персонажа без сохранения истории конструирования.
Связывание узлов Два самых понятных способа связывания узлов заключаются в непосредственном формировании связей в диалоговом окно Connection Editor (Редактор связей) и в создании связей под управлением кривых анимации в диалоговом окне Set Driven Key (Создать управляемый ключ).
Связывание узлов
361
Управляемые ключи являются прекрасным механизмом, позволяющим польз) >вателю определить отношения между двумя атрибутами, не прибегая к написанию выражений или построению сложных сетей узлов, Диалоговое окно Set Driven Key (Создать управляемый ключ) все сделает за вас. В ходе выполнения упражнений следует помнить, что вам требуется всего лишь заставить один атрибут менять значение другого на основе заранее определенного отношения. Например, когда первый атрибут имеет значение 5, можно сделать так, чтобы второй атрибут имел значение 15. При этом, когда значение первого атрибута уменьшится до 0, значение второго атрибута также должно постепенно стремиться к 0. Полагаем, этот несложный пример дал вам представление об управлении атрибутами и применении отношений управляемого ключа.
Упражнение 13.1. Создание стандартного элемента управления рукой заданием управляемого ключа Это упражнение начнется с загрузки файла, содержащего скелет руки, который требуется оснастить элементами для управления пальцами и запястьем. Затем вам предстоит создать локатор, который будет добавлен к атрибутам нового контроллера. Напоследок будет задано множество атрибутов, контролирующих различные положения руки. При моделировании сгиба пальцев аниматору важно сохранять баланс между простотой и тотальным контролем. 1. Загрузите файл Chapter 13Hand_begin.mb с прилагаемого к книге компакт-диска, Сцена содержит скелет руки. В ней уже присутствует ряд узлов. 2. Создайте локатор и присвойте ему имя ieft_handContro!. 3. Теперь нужно осуществить точечную привязку локатора к узлу left_wrist. Акт ивизируйте инструмент Move (Переместить). Нажмите и удерживайте клавишу v и в окне проекции Persp (Перспектива) средней кнопкой мыши перетащите локатор в область запястья. 4. Выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования), как показано на рис. 13.1. Теперь поменяйте масштаб локатора, введя в поля Scale (Масштабирование) диалогового окна Channel Box (Окно каналов) значение 3. Это облегчит процесс выделения локатора в дальнейшем. 5. Выделите локатор, затем объект left_wrist и выберите в меню Constrain (Ограничить) команду Point (Точка). Снова выделите локатор, но на этот раз вместе с сочленением left_armEnd и повторите операцию. В результате запястье будет связано с локатором. Использование ограничения Point (Точка) в данном упражнении вполне оправданно, так как для анимации сочленений руки будет использован метод прямой кинематики. Можно было сделать локатор предком по отношению к запястью, но в дальнейшем это ограничило бы свободу вращения. Если бы к присоединенной руке был применен метод обратной кинематики, имело бы смысл с помощью точечного ограничения связать IK-манипулятор с локатором. В результате появилась бы возможность управлять локатором и положением манипулятора одновременно. Теперь нужно заставить локатор вращаться, управляя при этом поворотом элемента leftj/vrist, а также поворотом вокруг оси Y сочленения lefLforearm. В ре-
362
Глава 13 • Создание усовершенствованных связей
зультате поворот запястья явится результатом поворота одного элемента управления. Это легки можно сделать в диалоговом окне Connection Editor (Редактор связей).
Рис. 13.1. Команда Freeze Transformations обнуляет атрибуты преобразования контроллера
ПРИМЕЧАНИЕ Прямой кинематикой (Forward Kinematics, FK) называется иерархическое преобразование сочленений, напоминающее отношения предок—потомок. При повороте предка все его потомки поворачиваются следом вокруг его опорной точки. В обратной кинематике (Inverse Kinematics, IK) используются «решатели», которые анализируют положение концевого эффектора и производят необходимые вычисления, позволяющие определить углы поворота всех суставов IK-цепочки, в результате перемещения которых последний сустав займет положение, указанное концевым эффектором. Метод обратной кинематики замечательно подходит для прикрепления дочерних объектов иерархии (например, ступней ног) к поверхностям (например, к полу).
6. Выберите в меню команду Window > General Editors > Connection Editor (Окно > Редакторы общего назначения > Редактор связей), чтобы вызвать диалоговое окно, показанное на рис 13.2. Выделите локатор left_handControl в окне проекции и щелкните на кнопке Reload Left (Перезагрузить левую часть) в верхней части диалогового окна. Затем выделите сочленение left_wrist в окне проекции и щелкните на кнопке Reload Right (Перезагрузить правую часть). Теперь все готово для связывания атрибутов из левой части с атрибутами, расположенными справа. Атрибут с левой стороны (from) будет контролировать атрибут с правой стороны (to). 7. Выделите строку Rotate сначала в левом, а затем в правом списке, как показано на рис. 13.3. Теперь атрибуты поворота сочленения запястья контролируются атрибутами поворота локатора.
363
Связывание узлов
Caching ettina Mode State Visibility Intermediate Cbiect Template Ghastrig uit Obi Qioup* Use Object СЫа Obiecl Eolot
Rotate RotoieOrde Scele Sheni Rat ale Pivot Trnmlnl» Scale Pi wot Scolti Pivot Ti amlate Holale Am
Display Handle '
Pivot ^ Hoinle Pivo
Display Local Atril Dynatrics ShawManip Default Specifie Kolele U u.i I Join Join Joint Type 2 Joint Orient Seatnent Scale CompensalB Invcue Scale Stiff nets Min Rotate Damp Ranye in Flirt ME Dump Strength Как К1оШв Damp Range
Рис. 13.2. Диалоговое окно Connection Editor просто связывает один атрибут с другим
364
Глава 13 • Создание усовершенствованных связей
Caching It Hislortcallv I nt cio» I ing Node Stale Mode State
Visttiilirji
Bounding box Matrix
Clbject G baiting
InvmteMatiH
Init Obj Giuupi
World Matrix
DIB Objocl Color
World Jnvw» Matrix
Shied Coin
Template 5 hosting
notnte Order
«rot Obj Groups J» Object Color
i Shw
!3iaw Override
Rotate
.odVefcatj.
Scale PrvW
Hendwlrto
Scete Pivot Tierulete
Roiate Ryot
Geomoliy ReteteOnw
Select Handle
Scab
,
Tranifoim
•
ffotitoffraf
cale Pivct Pivot Display Local Ami
Scale Pivot Translate
Dynamic*
Rotate Aris
Show Manip Dcfaidl
Trent Minu* Holate Pwot
Specified Menp Location f-totAte Ц *' л 1*1 и inn
ifetocl Hande Inherit* Trawform [Jitp^y Handta
X t Type Y Joint Type Jor* Orient
[Jttpley Rotate Pivol Оосгау Local Аи'» Manip DelauH
t Scale D)ni|tera&tti Inverse Scale SliftneM
Flotate Quatemmn
Pielwrad Angte
Flotation iWerpoUion
Min Flotnle Оатщ Rango Mb Rotate Damp Sdength Max Rul el [-Darrp Range
Рис. 13.3. Обратите внимание на выделенные каналы поворота. Это говорит о том, что связывание произошло
Связывание узлов
365
Message Caching ^ tntetailing Node Stale В Hunting бок
Inteimedale Ohied
Center
Template
: ' ..... <
B Matrix
Init Ohj Gioupt
World Maliix
USE Obiecl Color
Y/orld Inverse Mali*
Object Cdw
Object Template G boding InjtQbjGioups USB Dbiecl Color Object Cufci Draw Override
Rotate Flolele Older Scalr. Sheai Па late Pivirf Pivol Translat Scale Pivot Scale Pivot Т i ant late llulata Axis
Relate Z RoleleOfdei
Snlcct Handle
..-.
Inherit Tianslcum
• «a
Dii^ay Harxfle
ffotofo fftvf ftMiyf]»
Display Rotate Prvot
Scale PF/D!
Display Local A>i:
e Pivot
Scde Show Manp Def«4t Trent Mhu! Rotate Pivol
Speolied Menip Lccatkm
WoimMalrin EaiedHande Inherits Trererofm Display Scale Pivot
Jainl Orient
Display Rotate Pwol
Sequent Scale Conpemate
Display Local A»! Show Hanip Default Rotate Quaternion
Рис. 13.4. Связывание атрибутов в диалоговом окне Connection Editor осуществляется парой щелчков мыши
366
Глава 13 • Создание усовершенствованных связей
8. Выделите сочленение left_fbrearm в окне проекции и щелкните на кнопке Reload Right (Перезагрузить правую часть). Разверните дерево иерархии атрибута Rotate и выделите атрибут rotate Y. 9. В левом окне по-прежнему должны быть загружены атрибуты локатора. Раскройте дерево иерархии атрибута Rotate и выделите атрибут rotate Y, как показано на рис. 13.4. 10. Итак, вы связали атрибут rotate Y контроллера с аналогичным атрибутом предплечья. Теперь при повороте локатора будет поворачиваться и соответствующее сочленение. ПРИМЕЧАНИЕ Шаг 10 приводит к корректным результатам, которые достигаются таким простым путем, потому что ось вращения запястья совпадает с ориентацией локатора в глобальной системе координат, Для просмотра или редактирования локальной оси вращения сочленения нужно выделить сочленение, перейти в режим выделения подобъектое, щелкнуть правой кнопкой мыши на кнопке маски выделения со значком вопроса и выбрать в появившемся меню команду Local Rotation Axes (Локальные оси вращения). Локальные оси вращения сочленений являются редактируемыми осями XYZ, позволяющими менять ориентацию вращения. Они определяют не только оси, вокруг которых будут вращаться сочленения, но и их вращение относительно друг друга. Более подробно мы поговорим о них в главе 16. На данный момент достаточно понимать, что они собой представляют и зачем они нужны.
11.
12.
13.
14.
Теперь нужно заблокировать все лишние атрибуты и избавиться от тех из них, которые не требуются, а также добавить ряд новых атрибутов для управления пальцами. Для начала заблокируйте атрибуты, которые никто не должен трогать. В нашем случае это атрибуты масштабирования для управляющего узла leftjiand. Выделите атрибуты масштабирования в диалоговом окне Channel Box (Окно каналов), щелкните на них правой кнопкой мыши и выберите команду Lock Selected (Заблокировать выделенное). Чтобы скрыть остальные ненужные атрибуты, выберите в меню команду Window > General Editors > Cannel Control (Окно > Редакторы общего назначения * Управление каналами). На вкладке КеуаЫе (Ключевые атрибуты) выделите все атрибуты, для которых вы не собираетесь создавать ключей анимации (в данном случае это атрибуты перемещения, масштабирования и видимости, как показано на рис. 13.5), и щелкните на кнопке Move (Переместить). Эти атрибуты исчезнут из диалогового окна Channel Box (Окно каналов) и не будут больше перегружать вид. Теперь, не снимая выделения с локатора, добавьте атрибуты для пальцев, выбрав в меню Modify (Изменить) команду Add Attribute (Добавить атрибут). Появится одноименное диалоговое окно, позволяющее добавить любой атрибут к любому узлу Maya. В диалоговом окне Add Attribute (Добавить атрибут) нужно сделать несколько настроек. Добавьте в поле Attribute Name (Имя атрибута) следующие атрибуты для пальцев: •
thumbMidKnuckle;
•
thumbBaseKnuckle;
Связывание узлов
367
indexM id Knuckle; indexBaseKnuckle; middleMid Knuckle; middleBaseKnuckle; ringMidKnuckle; ringBaseKnuckle; pinkyMidKnuckle; pinkyBaseKnuckle,
Рис. 13.S. Диалоговое окно Channel Control позволяет скрыть атрибуты, в результате чего для них невозможно будет создать ключи анимации, кроме того, они исчезнуть из окна каналов
Каждый из этих атрибутов контролирует поворот сустава при сгибе отдельных пальцев. Оставьте следующие настройки заданными по умолчанию: • Make Attribute Keyable (Допустить назначение ключа анимации); • Data Type (Тип данных); • Attribute Type (Тип атрибута). В поле Minimum (Минимальное значение) введите значение -20, в поле Maximum (Максимальное значение) — значение 90, а в поле Default (Значение по умолчанию) — значение 0. 15. Чтобы обеспечить возможность раздвигать пальцы, добавьте следующие атрибуты:
368
Глава 13 • Создание усовершенствованных связей • thumbSpread; • indexSpread; • middleSpread; • ringSpread; • pinkySpread; • palmOpenClose, Используйте те же самые настройки, что и в предыдущем случае, но в поле Minimum (Минимальное значение) введите значение -30, а в поле Maximum (Максимальное значение) — значение 30. Для автоматизации процесса можно также воспользоваться MEL-сценарием, позволяющим быстро добавить одинаковые атрибуты. Для начала нужно объявить процедуру с аргументами, а затем цикл, который создает атрибуты, входящие в массив, а также дает возможность назначения им ключей анимации: global ргос addSameMultipleAttrs( string $attrs[]. string .$nodeName. int Smin. int $max){ for ($eacn in Sattrs)
: addAttr -In $each -at double -min Smin -max.$max -dv 0 SnodeMame; setAttr -e -keyable true {$nodeName+","+$each}; } I
Теперь объявим массив атрибутов, управляющих сгибом суставов, и передадим его в ранее описанную процедуру: string 3attrKnuckleNameArray[] = { "thumbMidKnuckle", "thumbBaseKnuck1e"."i ndexMIdKnuck1e", "1ndexBaseKnuckle", "mlddleMidKnuckle", "middleBaseKnuckle". "ringMidKnuckle", "ringBaseKnuckle'V'pinkyMidKnuckle". "pinkyBaseKnuckle" } ; addSameMultipleAttrs SattrKnuckleNameArray left_handControl -20 90;
To же самое нужно сделать для атрибутов, управляющих растопыриванием пальцев, так как они имеют другие предельные значения: string $attrSpreadNameArray[] * ( "thumbSpread", "indexSpread". "middleSpread". "ringSpread". "pinkySpread". "palmOpenClose" }: addSameMultipleAttrs SattrSpreadNameArray leftJiandControl -30 30;
В результате ручной настройки или использования сценария локатор leftJiandControl имеет множество атрибутов, которые, впрочем, ни на что не влияют. Запястье ограничено локатором, который, в свою очередь, ограничен элементом arm_ertd. Благодаря этому элементу запястье связано с рукой. Поворот локатора непосредственно контролирует поворот запястья. Теперь перейдем к управлению пальцами. 16. Щелкните на квадратике, расположенном справа от команды Animate > Set Driven Key * Set (Анимация > Создать управляемый ключ > Создать). Это приведет к появлению диалогового окна Set Driven Key (Создать управляемый ключ), показанного на рис. 13.6.
Связывание узлов
369
Рис. 13.6. Диалоговое окно Set Driven Key и кнопка его вызова
ПРИМЕЧАНИЕ Задание управляемых ключей является, вероятно, одним из самых популярных приемов контроля атрибутов, так как он очень прост для понимания и, кроме того, предлагает широкий диапазон редактируемых элементов управления, определенных пользователем. При формировании связи, заданной с помощью управляемого ключа, вы просто указываете ключ, который будет анимирован на основании управляющих атрибутов, При этом возникает кривая анимации, указывающая соотношение между управляющим и управляемым атрибутами. Управляемые ключи в действительности используют узлы ключевых кадров, доступ к которым осуществляется с помощью диалогового QKH.I Graph Editor (Редактор анимационных кривых). Единственное отличие между обычным заданием ключевых кадров и созданием управляемого ключа заключается в том, что в первом случае в качестве управляющего атрибута используется время, а во втором — атрибуты другого узла, которые задействуются как входные данные анимационной кривой вместо времени.
Процесс анимации начнется с атрибута thumb Mid Knuckle. 17. Выделите локатор leftJiandControl и щелкните на кнопке Load Driver (Загрузить управляющий объект) в диалоговом окне Set Driver Key (Создать управляемый ключ). Выделите в правом окне атрибут thumbMidKnuckle раздела Driver (Управляющий объект). 18. Выделите сочленения пальцев, которые должны находиться под управлением атрибута thumbMidKnuckle. Мы выделили объекты Ieft_thumb3, Ieft_thumb2 и leftjhumbl. Щелкните на кнопке Load Driven (Загрузить управляемый объект) и выделите все три строчки с левой стороны и все атрибуты поворота с правой, как показано на рис. 13.7. 19. Щелкните на кнопке Key (Ключи) в нижнем левом углу диалогового окна Set Driven Key (Создать управляемый ключ). Теперь координаты поворота будут нулевыми всякий раз, когда станет нулевым атрибут thumbMidKnuckle.
370
Глава 13 • Создание усовершенствованных связей
Рис. 13.7. В диалоговом окне Set Driven Key все готово для задания связи между атрибутами
20. Присвойте атрибуту thumbMidKnuckle максимально возможное значение 90. Поверните сочленения большого пальца, полностью согнув верхний сустав, как показано на рис. 13.8. Щелкните на кнопке Key (Ключи) в диалоговом окне Set Driven Key (Создать управляемый ключ), чтобы задать ключевой кадр для согнутого положения большого пальца у атрибута midKnuckle, который активизируется анимационной кривой, когда атрибут thumbMidKnuckle приобретает значение 90. В данном случае вы определяете отношение между поворотом сочленения большого пальца и атрибутом thumbMidKnuckle. 21. Теперь присвойте атрибуту thumbMidKnuckle его минимальное значение -20. Сочленение большого пальца под управлением этого атрибута должно двигаться, пока он не приобретет значения 0. Затем сочленение остановится. Это связано с отсутствием ключей анимации для координаты -20. Согните сочленения большого пальца в обратном направлении, пока не будет достигнуто предельное положение. Щелкните на кнопке Key (Ключи) в диалоговом окне Set Driven Key (Создать управляемый ключ). 22. Протестируйте управление, выделив локатор и управляющий атрибут в окне каналов. Затем подвигайте указателем мыши в окне проекции при нажатой средней кнопке. Это активизирует виртуальный ползунок для выделение-
Связывание узлов
371
го атрибута. Данный способ применяется для просмотра путем прокрутки различных значений атрибута. При этом не нужно вручную вводить эти значения в поля диалогового окна Channel Box (Окно каналов) или Attribute Editor (Редактор атрибутов).
Рис. 13.8. Сочленениям большого пальца теперь назначен управляемый ключ, поэтому их положение контролируется выделенными атрибутами
23. Повторите шаги 16-22, то есть весь процесс задания управляемого ключа, для каждого атрибута и управляемого им набора сочленений. Помните, что нужно сначала загрузить управляющий атрибут, затем управляемые сочленения, создать первый ключ при нулевых значениях, а затем еще пару ключей — в предельно низком и предельно высоком положении. В результате вы получите управляемую руку и набор атрибутов, контролирующих сгибы пальцев и повороты запястья. Каждый атрибут управляет поворотом своего набора сочленений. Прилагаемый к книге компакт-диск содержит файл ChapterlBHandJlnished.rnb с готовой версией данной сцепы. Вы можете загрузить его и внимательно исследовать конечный результат, чтобы получить более ясное представление о способе его достижения.
372
Глава 13 • Создание усовершенствованных связей
Упражнение 13.2. Взвешенные ограничения и моделирование хватания объекта, движущегося случайным образом Следующее упражнение представляет собой простой пример применения взвешенных ограничений для непрерывного перехода от одного движущегося объекта к другому. В этом примере вы заставите анимированную руку схватить и удерживать объект. Взвешенные ограничения можно применить для решения любой проблемы, связанной с сопряжением атрибутов преобразования объекта в разных местах. 1. Загрузите файл Chapter 13Constraints_begin.mb с прилагаемого к книге компактдиска. Вы увидите анимированную руку (с законченным контроллером из предыдущего упражнения). Имеется также анимированный ящик, который перемещается перед рукой. С помощью выражения, показанного на рис. 13.9, удалось добиться случайного перемещения ящика в направлении оси Y. Рука совершает хватательные движения над ящиком, так как именно на его поверхности будет располагаться объект, который требуется взять. Этим объектом является статичный на данный момент цилиндр.
Рис 13.9. Анимированному ящику было сопоставлено выражение, которое заставляет его случайным образом перемещаться туда и обратно вдоль оси Y
2. Подвигайте ползунок анимации. Обратите внимание, что цилиндр, который вам предстоит схватить, остается неподвижным. Это первая проблема, с которой нужно разобраться.
Связывание узлов
373
3. Создайте локатор и присвойте ему имя constrainToBox. He снимая с него выделения, нажмите клавишу Shift и выделите ящик, а затем нажмите клавишу р, чтобы создать отношение предок—потомок. 4. Теперь пришло время связать центр цилиндра с центром локатора. Выделите объект constrainToBox, затем при нажатой клавише Shift выделите цилиндр и выберите в меню Constrain (Ограничить) команду Point (Точка). В результате цилиндр должен перемещаться вслед за локатором. Чтобы поставить цилиндр на верхнюю грань ящика, просто переместите локатор. 5. Создайте локатор для руки. Присвойте ему имя constrainToHand. Затем, не снимая с него выделения, выделите при нажатой клавише Shift сочленен ис left_palm и нажмите клавишу р. 6. Выделите локатор constrainToHand, затем, нажав клавишу Shift, выдели'ве цилиндр и выберите в меню Constrain (Ограничить) команду Point (Точка). Воспроизведи те анимацию. Вы увидите, что цилиндр окажется ровно на полпути между ящиком и рукой, как показано на рис. 13.10. Именно так действуют взвешенные ограничения. .View- SiatSng, Lighting'"Show Panels
Рис. 13.10. Под влиянием двух ограничений цилиндр оказался точно между ящиком и рукой
7. Выделите цилиндр и посмотрите на раздел Shapes (Формы) в диалоговом окне Channel Box (Окно каналов). Выделите строку Cylinder_pointConstraintl, как показано на рис, 13.11. Нас интересуют параметры constrainToBoxWO и constrainToHandWl
374
Глава 13 • Создание усовершенствованных связей
Рис. 13.11. Обратите внимание на атрибуты, задающие вес ограничений — constrainToBoxWO и constrainToHandWl
Эти параметры задают силу воздействия ограничений. Но это не просто два атрибута типа Boolean (Логический). Их значение свободно меняется от 0 до 1, следовательно, вы можете плавно перейти от ограничения-ящика к ограничению-руке. Если оба атрибута имеют одинаковое значение, говорят, что они имеют равный вес, Следовательно, результат ограничения будет располагаться на равном расстоянии от ограничений. 8. Откройте диалоговые окна Hypergraph (Просмотр структуры) и Outliner (Структура) и найдите узел цилиндра. Обратите внимание, что узел ограничения Cylinder_pointConstraintl теперь является дочерним по отношению к цилиндру, как показано на рис. 13.12. Этот узел контролирует канал перемещений цилиндра. 9. Выделите узел CylinderjMintConstraintl. В диалоговом окне Channel Box (Окно каналов) должны появиться те атрибуты, которые вы уже видели ранее. Этим атрибутам нужно назначить ключи анимации, чтобы получить непрерывное движение, которым рука хватает проезжающий мимо цилиндр. 10. Установите ползунок таймера анимации на кадр 61. Значение параметра constrainToBoxWO оставьте без изменений, а параметру constrainToHandWl присвойте значение 0. Нажмите клавишу s, чтобы создать для этих параметров ключ анимации. 11. Установите ползунок таймера анимации на отметку кадра 63. Теперь присвойте параметру constrainToBoxWO значение 0, а параметру constrainToHandWl — значение 1, а потом еще раз нажмите клавишу s. Воспроизведите анимацию. Вы увидите замечательную непрерывную анимацию, в процессе которой рука хватает движущийся объект, как показано на рис. 13.13,
Связывание узлов
Рис. 13.12. Обратите внимание, что узел точечного ограничения теперь является дочерним по отношению к цилиндру; он опирается на вычисления ограничения для контроля перемещений цилиндра
Рис. 13.13. Движение объекта контролируется весами обоих ограничений
375
376
Глава 13 • Создание усовершенствованных связей
Может потребоваться слегка отрегулировать положение дочерних локаторов constrainToBox и constrainToHand таким образом, чтобы цилиндр проходил именно в том месте, где рука совершает хватательные движения. Можно также создать дополнительные ключевые кадры как для руки, так и для цилиндра, например, как в файле Chapterl3Constraints_fin,mb, который также расположен в папке Chapters\ ChapterlB прилагаемого к книге компакт-диска.
Практическое применение ограничений Ограничения являются крайне полезными инструментами. Применение взвешенных ограничений при объединении нескольких атрибутов преобразования может решить многочисленные проблемы. Ниже перечислены основные ограничения. О Ограничение Point (Точка) непосредственно контролирует перемещения вдоль осей X, Y и Z, как показано в предыдущем упражнении. О Ограничение Aim (Цель) заставляет любой объект ориентироваться в направлении объекта-мишени. Это ограничение часто применяется при моделировании движения глаз персонажа. Кроме того, оно позволяет нацелить источник света или камеру строго на определенный объект, О Ограничение Orient (Ориентация) действует аналогично ограничению Point (Точка), но контролирует поворот объекта. Часто оно применяется для превращения взвешенных ограничений одной цепочки сочленений в две одинаковые цепочки. Эта техника будет более подробно объяснена в упражнении 13.3. О Ограничение Scale (Масштабирование) отличается от ограничений Point (Точка) и Orient (Ориентация) тем, что присваивает ограничиваемому объекту те же параметры масштабирования, что и мишени, или же среднее значение этих параметров, если объектов-мишеней несколько. ПРИМЕЧАНИЕ Ограничения Point (Точка), Orient (Ориентация) и Scale (Масштабирование) в отличие от непосредственных связей заставляют ограниченный объект совершать преобразования в пределах иерархии, к которой принадлежит ограничивающий объект. Это крайне полезно при настройке персонажей, потому что при этом часто требуется добиться совместного движения объектов, принадлежащих к разным иерархическим цепочкам. Данный факт в совокупности с возможностью применять взвешенные атрибуты делает ограничения одним из самых мощных и ценных инструментов Maya,
О Ограничение Parent (Предок) появилось только в версии 5. Оно заставляет группу объектов, принадлежащих к одной иерархии, перемещаться таким образом, как будто они являются дочерними по отношению к новой иерархии. По умолчанию это ограничение должно поддерживать смещение между ограничиваемыми и ограничивающими объектами таким образом, чтобы исходная ориентация ограничения не приводила к преобразованиям ограничиваемых объектов. Одновременное применение нескольких ограничений Parent (Предок) крайне полезно при настройке персонажей. О В результате применения ограничения Geometry (Геометрия) центр ограничиваемого объекта остается на поверхности объекта-мишени. При этом атрибуты
Вторичные движения
377
ограничиваемого объекта не блокируются, что позволяет ему скользить вдоль поверхности. Это ограничение замечательно подходит, например, для моделирования слез, катящихся по щекам персонажа, или для насекомого, ползущего по поверхности какого-либо объекта. О Ограничение Normal (Нормаль) заставляет ограничиваемый объект ориентироваться в направлении нормали объекта-мишени. Чтобы увидеть нормали, выберите в меню команду Display > NURBS Components > Normals (Отображение > Подобъекты NURBS > Нормали) для NURBS-поверхностей или команду Display > Polygon Components > Normals (Отображение > Подобъекты полигонов > Нормали) для полигонов. Ограничение Normal (Нормаль) часто применяется вместе с ограничением Geometry (Геометрия), позволяя не только перемещать ограничиваемый объект вдоль поверхности объекта-мишени, но и ориентировать его в направлении нормали. О Ограничение Tangent (Касательная) применяется только в случаях, когда в качестве объекта-мишени применяется NURBS-кривая, Оно позволяет направить вектор ограничиваемого объекта вдоль касательной кривой-мишени. Применяется в случаях, когда требуется ограничить ориентацию объекта NURBS-кривой. При этом остальным атрибутам можно назначать ключи анимации, а также контролировать их с помощью других ограничений. О Ограничение Pole Vector (Вектор полюса) предназначено для случаев, когда в качестве ограничиваемого объекта фигурирует плоскость вращения 1К-манипулятора. Благодаря ему вектор полюса манипулятора всегда нацелен в направлении объекта-мишени. В результате вектор полюса будет контролировать направление центрального сочленения в цепочке, например направление локтя при сгибе руки. Это ограничение дает дополнительный уровень контроля за движением персонажа, иначе достижимый только при помощи атрибута Twist (Скручивание).
Вторичные движения Концепция вторичных движений составляет один из основных принципов анимации. Она состоит в том, что в процессе основного движения тела возникают дополнительные небольшие движения. К ним можно отнести, например, подрагива ние антенн на голове марсианина. Любые свободно свисающие или сгибаемые части, например уши и хвост собаки, будут в процессе перемещения тела совершать собственные движения. Если собака подпрыгнет вверх, перемещение ее хвоста и ушей будет обусловлено реакцией на сопротивление воздуха, соответственно, они будут двигаться вовсе не так, как при неторопливой прогулке. Иногда готовые модели вторичных движений можно продать. Ведь после завершения работы над основным перемещением аниматорам приходится заниматься нудной имитацией мелких движений, придающих объекту реализм. Поэтому часто можно слышать пожелания об автоматизации свойств болтающихся, висящих или подрагивающих элементов, позволяющей естественным образом моделировать подобные явления.
378
Глава 13 • Создание усовершенствованных связей
В упражнении этого раздела вы познакомитесь с одним из способов решения данной проблемы, который к тому же дает аниматору полный контроль над статичным положением скелета в процессе вторичных движений. Кроме того, от этих движений можно полностью отказаться, если в какой-то момент необходимость в них пропадет. Упражнение 13.3. Создание вторичных движений скелета Так как рассматриваемая техника является многоступенчатой и в некоторых моментах довольно сложной, начнем с краткого описания цели нашего упражнения, а затем кратко перечислим действия, которые вам потребуется предпринять. Для создания скелета, к которому будут применяться автоматические вторичные движения, нужно прибегнуть к модулю имитации динамики. Чтобы назначить упомянутый тип движения контролируемому и анимируемому скелету, воспользуйтесь решателем IK Spline (Сплайн) в комбинации с кластерами и взвешенными ограничениями, которые будут воздействовать на копию скелетной цепочки. Они позволят расположить цепочку определенным образом и органично сочетать в процессе анимации динамический и нединамический скелеты. Для начала вы примените решатель IK Spline (Сплайн) к кривой мягкого тела, чтобы заставить перемешаться одну из копий скелетной цепочки (она отвечает за свободное движение), в то время как вторая копия цепочки будет отвечать за стандартное движение. В дальнейшем для сопряжения этих двух цепочек нужно будет воспользоваться взвешенными ограничениями типа Point (Точка) и Orient (Ориентация). Потребуется применить точечное ограничение исходного корневого узла с помощью корневых узлов цепочек-копий. Затем вы ограничите по типу Orient (Ориентация) каждое из сочленений исходной цепочки с помощью соответствующих узлов цепочек-копий. Таким способом будет получена взвешенная сеть ограничений, которая позволит совместить обычное и вторичное движения. Вам потребуется создать локатор с набором пользовательских атрибутов и задействовать метод управляемого ключа для управления совмещением весов ограничений гибкой и обычной цепей, а также получить атрибут, контролирующий параметр Goal Smoothness (Однородность цели) частиц, которые формируют мягкое тело. Это позволяет добавлять вторичные движения различной силы. После этого вам предстоит создать кластеры как на кривой-мишени мягкого тела, так и на стандартной кривой-мишени. При этом кластеры кривой-мишени мягкого тела будут ограничены по типу Point (Точка) кластерами стандартной кривой. Это позволит деформировать обе кривые путем перемещения единого кластера. В результате вне зависимости от того, какой из скелетов вы используете, конечная поза будет одинаковой. Для каждого кластера обычной кривой-сплайна будет создан локатор, и затем вы свяжете их в иерархическую цепочку. В результате локаторы будут использоваться в качестве легко выделяемых элементов управления, с помощью которых можно установить цепочку в определенное положение или анимировать ее. Затем вам нужно будет систематизировать иерархию узлов, а также заблокировать атрибуты, не подлежащие редактированию. Наконец, вы создадите набор связей, позволяющих легко масштабировать систему и применять ее в других сценах. Благодаря этому систему можно использовать для различных персонажей. Для ваше-
379
Вторичные движения
го удобства мы поместили готовый файл Chapterl3_OverlapAct_end.mb на прилагаемый к книге компакт-диск. 1. Загрузите файл Chapter 13JDverlapAct__begin.mb с прилагаемого к книге компакт диска. Сцена содержит цепочку сочленений, для которой вам нужно настроить вторичные движения. Сочленения связаны друг с другом по методу прямой кинематики. Кроме того, имеется дополнительное сочленение, не входящее в цепочку. Оно потребуется позднее, а при выполнении нескольких первых шагон его нужно просто проигнорировать. 2. Убедитесь, что параметры дублирования имеют заданные по умолчанию значения. Выделите сочленение joints, которое является родительским, и дважды продублируйте его, нажимая комбинацию клавиш Ctrl+d. В результате в сцене появятся три одинаковых иерархии сочленений. 3. Выделите сочленение joints и выберите в меню Modify (Изменить) команду Prefix Hierarchy Names (Приставка к названию иерархии). Введите в текстовое поле появившегося диалогового окна строку baseBindSkeleton_ и щелкните на кнопке ОК. Выделите сочленение jointll и таким же способом переименуйте эту иерархическую цепочку в regularSplineIKdriven__. Наконец, выделите сочленение jointlZ и присвойте цепочке имя softBodyDynamicDriven_, как показано на рис. 13.14.
^™ 1,^^.^.;*,
»
!
!
& | !t; -i- [4 -:; ffi 1 | :• Ш | >;i .' ••-%-="• | *; >|'Л' i IE «и ?Й U*iri
Рис. 13.14. Команда Prefix Hierarchy Names применяется для быстрого переименования и идентификации узлов
i .. ....
380
Глава 13 • Создание усовершенствованных связей
4. Выделите родительские узлы иерархий softBodyDynamicDriven_, regularSplinelKdriven и baseBindSkeleton и выберите в меню Constrain (Ограничить) команду Point (Точка), а затем — команду Orient (Ориентация). Итак, вы начали формирование сети взвешенных ограничений. Обратите внимание, что ограничению подвергается только корневой сустав, так как именно он принимает участие в преобразовании перемещения. 5. Выделите следующий по счету узел в иерархии softBodyDynamicDriven — узел softBodyDynarnicDriven_joint2. Затем при нажатой клавише Shift выделите второй сверху узел иерархии regularSplinelKdriven — узел regularSplinelKdrivenj'oint2. Добавьте в выделенный набор узел baseBindSkeleton Joint2, принадлежащий к иерархии baseBindSkeleton. Выберите в меню Constrain (Ограничить) команду Orient (Ориентация), как показано на рис. 13.15.
Рис. 13.15. Путем выделения трех преобразований и создания для них ограничения Orient вы усредните действие ограничения от первых двух выделенных узлов на третий выделенный узел
6. Выделите набор третьих сверху узлов: softBodyDynamicDriven Joints, regularSplineIKdrivenJoint3 и baseBindSkeleton Joints и снова выполните команду Orient (Ориентация) меню Constrain (Ограничить).
Вторичные движения
381
7. Проделайте эту операцию со всеми остальными узлами, не забывая, что выделять узел цепочки baseBindSkeleton нужно в последнюю очередь, так как именно он является ограничиваемым. DBET Для ускорения процесса воспользуйтесь клавишей д, нажатие которой приводит к повторному выполнению последней команды. В результате вы получите взвешенное ограничение по типу Orient (Ориентация), в котором иерархические цепочки softBodyDynamicDriven и regularSplineIKdriven будут выступать в качестве ограничений вращения цепочки baseBindSkeleton. Теперь нужно создать локатор, который сыграет роль основного контроллера системы. Именно его атрибуты будут использоваться для сопряжении динамической и нединамической иерархий. 8. Создайте локатор и присвойте ему имя FloppyChainController. 9. Теперь нужно создать атрибут, который будет контролировать веса ограничений. Выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут). Введите в диалоговое окно, показанное на рис. 13.16, следующие значения:: • Attribute Name (Имя атрибута) — значение dynamicFlopOnOff; • Make Attribute Keyable (Допустить назначение ключа анимации) — флажок установлен; • Data Type (Тип данных) — установлен переключатель Float (С плавающей точкой); • Minimum (Минимальное значение) — значение 0; • Maximum (Максимальное значение) — значение 1; • Default (Значение по умолчанию) — значение 1. 10. Щелкните на квадратике, расположенном справа от команды Set (Создать) в подменю Set Driven Key (Создать управляемый ключ) меню Animate (Анимация). Выделите в окне проекции локатор FloppyChainController, щелкните на кнопке Load Driver (Загрузить управляющий объект) и выделите атрибут dynamicFlopOnOff в правой верхней части диалогового окна Set Driven Key (Создать управляемый ключ). 11. В диалоговом окне Outliner (Структура) раскройте дерево иерархии baseBindSkeleton. Все узлы ограничений, созданные вами ранее, теперь являются дочерними в указанной иерархии. Выделите все восемь ограничений — один из них принадлежит к типу Point (Точка), остальные к типу Orient (Ориентация). Затем щелкните на кнопке Load Driven (Загрузить управляемый объект) в диалоговом окне Set Driven Key (Создать управляемый ключ), как показано на рис. 13.17. Теперь пришло время установить связь между атрибутом dynamicFlopOnOff и взвешенными атрибутами ограничений. Для начала нужно задать ключ, контролирующий выключенное состояние атрибута. В этом состоянии атрибут regularSplinelKdrivenJoint#Wl будет иметь значение 1, а атрибут softBodyDynamicDriven _joint#WO — значение 0. Это позволит осуществить сопряжение между двумя иерархическими цепочками путем непрерывного перехода от 0 к 1.
382
Глава 13 • Создание усовершенствованных связей
Выключенному состоянию нужно сопоставить ключ анимации. Так как взвешенные атрибуты ограничений имеют разные имена, им можно сопоставлять ключи анимации непосредственно в разделе Driven (Управляемые объекты) диалогового окна Set Driven Key (Создать управляемый ключ) по одному за раз. Это несколько утомительное занятие, но таким способом вы укрепите свои навыки задания управляемых ключей, В принципе существует возможность автоматизировать эту задачу путем написания MEL-сценария, но в данном случае вам предстоит сделать все вручную.
Рис. 13.16. Этот атрибут будет контролировать веса ограничений, используя соотношение управляемого ключа
12. Выделите узел локатора FloppyChainController и убедитесь, что атрибут dynamicFlopOnOff имеет значение 0. Также убедитесь, что узел FloppyChainController загружен в раздел Driver (Управляющий объект) диалогового окна Set Driven Key (Создать управляемый ключ), а в правой части выделен атрибут dynamicFlopOnOff. 13. Убедитесь, что в раздел Driven (Управляемый объект) загружены все восемь ограничений, как показано па рис. 13.17, и выделите первую верхнюю строку. Затем выделите в правом окне атрибуты softBodyDynamicDriven и regularSplineIKDriven. Выделение атрибутов в правом окне представляет собой крайне важный шаг, так как этим вы даете программе понять, для каких атрибутов нужно
Вторичные движения
383
создать кривую анимации. Взвешенные атрибуты для каждого из узлов ограничения можно отличить по символам WO и W1 на конце.
Рис. 13.17. С помощью диалогового окна Set Driven Key можно создать отношение между атрибутом dynamicFlopOnOff узла локатора и взвешенными атрибутами ограничений
14. Убедитесь, что атрибут dynamicFlopOnOff до сих пор имеет значение 0. Затек присвойте атрибуту Soft Body Dynamic (Динамика мягкого тела) значение 0, а значение параметра Regular Spline IKDriv (Перемещения сплайна по методу обратной кинематики) оставьте без изменений. Щелкните на кнопке Key (Ключи) в диалоговом окне Set Driven Key (Создать управляемый ключ). Вы только что задали первое отношение между атрибутами, то есть правило, согласно которому будет создана анимационная кривая. На данный момен'] поставлена только ее первая точка. Было установлено, что когда атрибут dyna micFlopOnOf имеет значение 0, параметр softBodyDynamicDriven также принима ет значение 0, а параметр regularSplinelKDriven — значение 1. 15. Выделите следующее ограничение в левом окне раздела Driven (Управляемые объекты), а также два соответствующих взвешенных атрибута (softBodyDynamicDriven и regularSplinelKdriven) с левой стороны. Опять присвойте первому атри-
384
Глава 13 • Создание усовершенствованных связей
буту значение 0, а значение второго оставьте без изменений и щелкните на кнопке Key (Ключи). 16. Повторите эти действия для всех остальных ограничений, как показано на рис. 13.18.
Рис. 13.18. Обратите внимание на узлы анимационной кривой, которые были вставлены внутрь связей
В результате проделанных действий атрибуты Soft Body Dynamic (Динамика мягкого тела) и Regular Spline IKDriv (Перемещения сплайна по методу обратной кинематики) для каждого из ограничений должны быть выделены оранжевым цветом в диалоговом окне Channel Box (Окно каналов). Это говорит о том, что их состояние управляется другим узлом, в нашем случае ключом анимации. Теперь нужно определить включенное состояние атрибута dynamicFlopOnOf. He закрывайте окно Set Driven Key (Создать управляемый ключ), так как сейчас вам предстоит проделать те же самые действия, что и ранее. 17. Выделите локатор FloppyChainContoller и присвойте атрибуту dynamicFlopOnOf значение 1„ Это будет соответствовать включенному состоянию. 18. Выделите верхний узел ограничения в левом окне раздела Driven (Управляемые объекты) диалогового окна Set Driven Key (Создать управляемый ключ); кроме того, выделите взвешенные атрибуты в правой части этого окна. Параметру Soft Body Dynamic (Динамика мягкого тела) присвойте значение 1, а параметру Regular Spline IKDriv (Перемещения сплайна по методу обратной кинематики) — значение 0. Нужно начать с верхнего ограничения, а закончить нижним, то есть в точности повторить шаг 16, по с новыми параметрами.
Вторичные движения
385
Итак, вы установили непосредственное отношение между взвешенными атрибутами всех ограничений и атрибутом dynamicFlopOnOf, как показано на рис. 13.19. При любом его изменении взвешенные атрибуты будут меняться согласно заданным настройкам.
Рис. 13.19. Значение этой кривой меняется от 0 до 1, основываясь на состоянии атрибута dynamicFlopOnOff, который на данный момент полностью контролирует состояние взвешенных атрибутов ограничений
Теперь нужно быстро убрать все атрибуты локатора из диалогового окна Channe Box (Окно каналов) и создать новые пользовательские атрибуты. 19. При выделенном локаторе откройте диалоговое окно Channel Control (Управление каналами), На вкладке КеуаЫе (Ключевые атрибуты) выделите все атрибуты, расположенные слева, кроме dynamicFlopOnOf и visibility, и щелкните на кнопке Move (Переместить). Они исчезнут, как показано на рис. 13.20. 20. Выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут) Используйте следующие параметры: • Attribute Name (Имя атрибута) — значение addMoreFloppiness; • Make Attribute КеуаЫе (Допустить назначение ключа анимации) — флажок установлен; • DataType (Тип данных) — установлен переключатель Float (С плавающей точкой):
Глава 13 • Создание усовершенствованных связей
386
• Minimum (Минимальное значение) — значение 0; • Maximum (Максимальное значение) — значение 1. Результат показан на рис. 13.21. JY! [ ь,тоН i onUol - FtepoytNeinC
1
****** caching
\ djmamicFlopDnQlf • visibility
-
&
displayHande displayLocalAKis ditplajiRolatePivot displays cdePivot ghostPostSteps ghostPieStepi ghostflangeEnd ghosSangeSlart ghostS lepSize ghosting ghostingConlrol identification inherit sTiansfoim inlermediateObject layerOvenideCotoi laverRenctefable
1
-::
1
1 :;
;:
'• ,
nod eS late objectCotoi oveiiideCdoi ovetiideDeplayType ovenideEnabied oven ideLeve D f 0 etail ovenidePlayback oveiiideS hading ovenideT«tufing overrideVisblky
'-'_
:
:'
-
i
(
!•>' Change аи Detected obHtcl! с the шп* lype
Ш
;
a-
\
Рис. 13.20. С помощью диалогового окна Channel Control можно удалить ненужные каналы; в результате для них невозможно будет создать ключ анимации, кроме того, они исчезнут из диалогового окна Channel Box
Теперь все готово для настройки скелета по методу обратной кинематики с решателем IK Spline (Сплайн) и добавления кривой мягкого тела, после которого исходная кривая будет служить мишенью для формирующих это тело частиц. Однако перед этим желательно понять, что представляют собой частицы, формирующие мягкое тело и их мишени. Эти замечательные инструменты являются принадлежностью модуля имитации динамики. Мягкое тело представляет собой совокупность частиц. При создании мягкого тела Maya автоматически формирует набор частиц, расположенных в вершинах и соединенных друг с другом. Затем можно добавить объект-мишень, который будет задавать направление смещения вершин. Вес мишени указывает на силу притяжения к ней частиц. Если вес мишени равен 1, при имитации динамики частицы будут двигаться непосредственно к ней. Если же вес равен 0, мишень будет полностью игнорироваться. Разумеется, если сделать вес равным 0,5, частицы будут пытаться в 50 % случаев достичь указан-
Вторичные движения
387
ной цели. Это очень мощный механизм, так как различным частицам можно сопоставить разные веса. Этот способ позволяет автоматизировать движение свисающих объектов. Именно это составляет основу данного упражнения.
'j addM oceFlippine?.:
IUI» "(WHS •
С" Sting
f fitralaar, "'
Г infers)-
С Enure
Рис. 13.21. Этот атрибут будет контролировать атрибуты динамики частиц, составляющих мягкое тело
21. Вызовите диалоговое окно Channel Control (Управление каналами) и убедитесь, что атрибут Visibility (Видимость) сочленения jointlO не заблокирован, кроме того, для него можно создавать ключевые кадры. Откройте диалоговое окно Hypergraph (Просмотр структуры) или Outliner (Структура), выделите узлы jointlO, baseBindSkeletonjointS и regularSplinelKd riven Joint 11. Нажмите комбинацию клавиш Ctrl+h, чтобы скрыть выделенные узлы. Эта операция позволяет избежать случайного выделения ненужных объектов. Все эти узлы позднее снова можно сделать видимыми. Но на данями момент в сцене должна оставаться только иерархия softBodyDynamicDriven. 22. Щелкните на квадратике, расположенном справа от команды IK Spline Handle (Манипулятор IK-сплайна) в меню Skeleton (Скелет), и снимите флажок Autc Simplify Curve (Автоматическое упрощение кривой), как показано на рис. 13.22. 23. В данный момент у вас активен инструмент IK Spline Handle (Манипулятор IKсплайна), Нарисуйте рамку вокруг корневого сочленения softBodyDynamicDriven Jointl2, затем еще одну рамку вокруг сочленения softBodyDynamicDriven Joint?. расположенного на противоположном конце цепи.
388
Глава 13* Создание усовершенствованных связей
Рис. 13.22. Инструмент IK Spline Handle
24.
25.
26.
27.
Вы увидите появление IK-сплайна, и с этого момента угол поворота сочленений будет управляться NURBS-кривой. Выделите только что созданную кривую, затем манипулятор IK-сплайна и нажмите комбинацию клавиш Ctrl+g, чтобы сгруппировать эти узлы. Присвойте манипулятору имя goalCurveSpline_IkHandle, а группе — имя ik_curves_clusters_ drivenSetup. Теперь пришло время создать связи для мягкого тела. Перейдите в режим Dynamics (Динамика). Выделите кривую и щелкните на квадратике, расположенном справа от команды Create Soft Body (Создать мягкое тело) в меню Softy Rigid Bodies (Мягкие/твердые тела), как показано на рис. 13.23. Выберите в раскрывающемся списке Creation Options (Параметры создания) вариант Duplicate, Make Original Soft (Дублировать, сделать исходный объект мягким). Установите флажок Make Non-Soft a Goal (Сделать немягкий объект целевым) и введите в поле Weight (Вес) значение 0,65. Щелкните на кнопке Create (Создать). Присвойте кривой, которая является родительской для системы частиц, имя c_Controlled_softBodyCurve. Копии этой кривой, которая теперь принадлежит к группе ik_curves_clusters_drivenSetup, присвойте имя goalCurve. Выделите систему частиц и присвойте ей имя Soft Body Cu rveParticles. Выделите кривую c_Controlled_softBodyCurve, затем лри нажатой клавише Shift выделите группу ik_curves_clusters_drivenSetup и нажм ите клавишу р, чтобы сделать кривую потомком по отношению к группе.
389
Вторичные движения
Creetran Options Duplicate. Make Original Soft -J .L\ipkaC3 Input fcaph Г H Me N :.i-i "id! OVxl I" Make Nw-boil a God P Weight [[1550
3^:^777;;, ;
J"
Рис. 13.23. Для создания мягкого тела достаточно щелкнуть на кнопке Create
28. Выделите узел SoftBodyCurveParticleShape (убедившись, что это узел формы, а не преобразования), откройте окно Set Driven Key (Создать управляемый ключ), щелкните на кнопке Load Driven (Загрузить управляемый объект) и выделите в правом окне атрибут GoalSmoothness. Выделите локатор FloppyChainContoller и щелкните на кнопке Load Driver (Загрузить управляющий объект). Выделите в правом окне атрибут addMoreFloppiness. 29. Присвойте параметру Add More Floppiness (Усилить свисание) значение 0, а параметру Goal Smoothness (Однородность цели) — значение 0,75, как показано на рис. 13.24, и щелкните на кнопке Key (Ключи).
Рис. 13.24. Анимационная кривая получается методом создания управляемых ключей
Обратите внимание, что форма системы частиц связана с NURBS-кривой, которая управляет IK-решателем скелетной иерархии. Анимационная кривая формируется методом создания управляемых ключей. При этом задается атрибут частиц, отвечающий за вторичное движение в процессе имитации динамики.
Глава 13- Создание усовершенствованных связей
390
30. Присвойте параметру Add More Floppiness (Усилить свисание) значение 1, а параметру Goal Smoothness (Однородность цели) — значение 2 и щелкните на кнопке Key (Ключи). Пока что создается впечатление, что ничего не изменилось. Но когда вы закончите настройку системы, станет очевидным, как именно изменение атрибута addMoreFloppiness влияет на процесс имитации динамики. 31. Теперь нужно выделить объект SoftBodyCurveParticles в режиме выделения подобъектов, как показано на рис. 13.25. Щелкните на кнопке Select by component type (Выделение подобъектов) в строке состояния. Отожмите все кнопки, предназначенные для формирования маски выделения, а затем щелкните правой кнопкой мыши на кнопке Select by component type: Points (Выделение подобъектов: точки) и выберите в появившемся меню команду Particles (Частицы). Б результате выделению в окне проекции будет подвергаться только нужный вам компонент.
view eoo^wte Graf* Rendering -.Options show
Рис. 13.25. Результат перехода в режим выделения подобъектов и выбора в маске выделения режима выделения частиц
32. Нарисуйте выделяющую рамку вокруг кривой и сцены, чтобы выделить все узлы частиц. Выберите в меню команду Window > General Editors > Component Editor (Окно > Редакторы общего назначения > Редактор подобъектов) и перейдите на вкладку Particles (Частицы) появившегося диалогового окна. Присвойте атрибутам goaIPP следующие значения, как показано на рис. 13.26: • p[0]goalPP- 1; • р[1] goaIPP- 1; • р[2]доа!РР-1;
•
р[3] goaIPP - 0,8;
• • • • •
р[4] р[5] р[6] р[7] р[8]
goaIPP goafPP goaIPP goaIPP goaIPP -
0,7; 0,55; 0,5; 0,5; 0,5.
В результате провисание будет более сильным в центральной части, а не в основании кривой.
Вторичные движения
391
Рис. 13.26. Эти значения задают целевые веса отдельных частиц в системе, формирующей мягкое тело
Задание целевых весов частиц в Maya приводит к тому, что частицы динамически следуют за объектом-мишенью, как если бы они были присоединены куском резинки — частица обгоняет мишень, затем возвращается назад и в конце концов возвращается в фиксированное положение. Именно так создается динамическое вторичное движение. 33. Скройте кривую c_Controlled_softBodyCurve. Выделите узел goalCurve и в режиме выделения подобъектов установите, что выделению подвергаются только управляющие точки NURBS-кривой. Для этого нужно щелкнуть правой кнопкой мыши на кнопке Select by component type: Points (Выделение подобъектов: точки) и выбрать в появившемся меню команду NURBS CVs (Управляющие точки MURBS-кривой). Выделите первые две управляющие точки кривой и выберите в меню Deform (Деформация) команду Create Cluster (Создать кластер), как показано на рис. 13.27. Затем то же самое проделайте с двумя последними точками. Выделяя оставшиеся точки по одной, нажимайте клавишу д, что соответ-
392
Глава 13 • Создание усовершенствованных связей
ствует повторению последней выполнявшейся команды. В результате вы должны получить набор кластеров, совместное перемещение которых будет приводить к перемещению узла goalCurve.
Рис. 13.27. Создание кластеров приведет к деформации управляющих точек кривой, контролирующих цепочку обратной кинематики
34. При нажатой клавише Shift выделите все кластеры и сделайте их потомками узла ik_curves_clusters_drivenSetup. Появится сообщение «Warning: clusters were grouped to preserve position*. Переименуйте группы, в которые превратились кластеры, используя для каждой из них приставку goalCurve_ConstrainedCluster, 35. Создайте семь локаторов и присвойте им имена controller!, controlled, controllers, controller-^, controllers, controllers и controller?. Создайте привязку локаторов к кластерам (по порядку от первого к последнему). Для этого активизируйте инструмент Move (Переместить), нажмите клавишу v и по очереди перетащите локаторы по направлению к кластерам, как показано на рис. 13.28. 36. Выделите сочленение jointlO, введите в поле Visibility (Видимость) диалогового окна Channel Box (Окно каналов) значение On (Включено) и переименуйте его таким образом, чтобы название тоже содержало приставку baseBindSkeleton. Сделайте иерархию baseBindSkeleton Joints дочерней по отношению к нему. Затем по очереди выделите все локаторы, связанные с кластерами, напоследок выделите узел baseBindSkeleton Joint 10 и нажмите комбинацию клавиш Ctrl+g, чтобы объединить их в одной группу.
Вторичные движения
393
iziizi т 1
т Рис. 13.28. Подготовка к созданию отношения предок—потомок между локаторами и кластерами
37. Присвойте новой группе название mainAttachNode. Выделите узел SoftBodyDynamicDrivenJointl2 и добавьте его в группу, нажав комбинацию клавиш Ctrl+g. Переименуйте этот узел ограничения, присвоив ему имя constraintTargetSkeletons и сделайте его дочерним по отношению к узлу mainAttachNode путем нажатия клавиши р. Это приведет в порядок сгруппированные иерархии и создаст узел группы, который позволит осуществлять масштабирование системы. 38. Теперь нажмите комбинацию клавиш Ctrl+g три раза, не выделяя никаких объектов в окне проекции. Это приведет к появлению трех пустых узлов, каждый из которых будет дочерним по отношению к предыдущему. Верхнему узлу присвойте имя floppyChainRig, второму — mainHierarchy, а третьему — TRANS_RO TATE_SCALE_MATRIX. Выделите узел TRANS_ROTATE_SCALE_MATRIX и нажмите комбинацию клавиш Ctrl+d, чтобы получить его копию. Присвойте этой копии имя c_ControlledMatrixStack. 39. Выделите узел ik_curves_clusters_drivenSetup, затем при нажатой клавише Shift выделите узел floppyChainRig и нажмите клавишу р. Выделите узел mainAttachNode, при нажатой клавише Shift выделите узел c_ControlledMatrixStack и снова нажмите клавишу р. Два последних шага представляли собой просто дальнейшую группировку узлов. Итак, пришло время закончить группировку и приступить к анимации системы.
394
Глава 13 • Создание усовершенствованных связей
ПРИМЕЧАНИЕ Определенный порядок группировки нее определенная иерархия служат двум основным целям, Во-первых, таким способом формируется дерево иерархии. Во-вторых, что более важно, вы при этом получаете возможность перемещать и масштабировать всю конструкцию целиком, а следовательно, импортировать ее в отдельный файл и использовать в рамках других проектов. Кроме того, вам требуется иерархия, позволяющая кластерам контролировать кривые. При этом кривая-мишень должна оставаться в нужном координатном пространстве. Обращайте особое внимание на порядок группирования. Кроме того, всегда можно загрузить файл Qiapterl3_OverlapAct_fin.inb с прилагаемого к книге компакт-диска и посмотреть на окончательный результат.
40. Выделите узел controller!, расположенный ближе всего к корневому узлу, а затем объект FloppyChainContrailer и нажмите клавишу р. Осуществите привязку локатора FioppyChainController к корневому узлу constraintTargetSkeletons, как показано на рис. 13.29.
Рис., 13.29. Результат привязки локатора к корневому узлу иерархии
395
Вторичные движения
Вы почти закончили. Осталось только создать решатель Ж Spline (Сплайн) и ограничить кластеры мягкого тела кластерами, которые будут созданы из точно таких же управляющих точек кривой сплайна обратной кинематики. 41. Временно скройте иерархию floppyChainRig и сделайте видимой иерархию regularSplinelKdrivenJointll. Чтобы сделать иерархию видимой, выделите ее в диалоговом окне Hypergraph (Просмотр структуры) и выберите в меню команду Display > Show * Show Selection (Отображение > Показать > Показать выделенное) 42. Щелкните на квадратике, расположенном справа от команды IK Spline Handle: (Манипулятор IK-сплайна) в меню Skeleton (Скелет), и используйте те же настройки, что и на шаге 22. Убедитесь, что флажок Auto Simplify Curve (Автоматическое упрощение кривой) сброшен, как показано на рис. 13.30.
1
Uneai
Ж.
Рис. 13.30. Используйте те же самые параметры, что и при создании первого манипулятора IK Spline
43. Нарисуйте выделяющую рамку вокруг первого сочленения regularSplinelKdrivenjointll, а потом вокруг сочленения, расположенного на другом конце цепи: regularSplinelKd riven Joint?.
396
Глава 13 • Создание усовершенствованных связей
После этого появятся второй решатель IK Spline (Сплайн) и манипулятор. Теперь NURBS-кривая контролирует поворот иерархии сочленений regularSplinelKdriven, 44. Выделите только что созданную кривую и присвойте ей имя regularSplinelkcurve. Перейдите в режим выделения подобъектов. На этот раз нужно оставить только возможность выделения управляющих точек. Выделите первые две точки кривой и выберите вменю Deform (Деформация) команду Create Cluster (Создать кластер), как показано на рис. 13.31, Затем выделите две последние точки и повторите операцию. По очереди выделяйте оставшиеся управляющие точки и нажимайте клавишу д.
, -i--:, ш
} +
m Рис. 13.31. Создание кластеров из управляющих точек
В результате вы должны получить набор кластеров, совместное перемещение которых приводит к перемещению кривой regularSplinelkcurve. 45. Теперь выделите кластеры по очереди и свяжите их отношением предок—потомок с ближайшими узлами локаторов, начиная с узла controller! и заканчивая узлом controller?. Помните, что при этом появляется сообщение «Warning: clusters were grouped to preserve position», как показано на рис. 13.32. Группировка кластеров происходит таким образом, что их локальное пространство преобразования может быть модифицировано без непосредственного изменения значений преобразования.
Вторичные движения
397
f
jWj'inr* -viiiti* л^-t! s r..'i*-iJi4i--;.'"-f-r. «!"'.'-i
Рис. 13.32. Предупреждающее сообщение
46. Выделите новый IK-манипулятор и присвойте ему имя regularSpline_IkHandle, При нажатой клавише Shift выделите узел regularSplinelkcurve и сделайте его дочерним объектом по отношению к узлу ik_curves_clusters_drivenSetup. 47. Выделите узел regularSplinelKdrivenJointll и сделайте его дочерним по отношению к группе constraintTargetSkeletons. Скройте родительские узлы иерархии softBodyDynamicDrivenJoint и regularSplinelKdrivenJoint 48. Выделите узел floppyChainRig и выберите в меню команду Display > Show t Show Selection (Отображение > Показать * Показать выделенное). В диалоговом окис Hypergraph (Просмотр структуры) полностью раскройте дерево иерархии ik_cur ves_clusters_drivenSetup. Для этого нужно щелкнуть правой кнопкой мыши на корневом узле и выбрать в появившемся меню команду Expand A l l (Развернуть все). В результате вы увидите три узла кривых (одна из которых имеет в качестве дочернего объекта систему частиц), два IK-манипулятора и семь сгруппированных кластеров. Эти кластеры контролируют кривую-мишень мягкого тела, Требуется, чтобы они двигались вместе с локаторами, но при этом они не долж ны становиться потомками локаторов, так как в этом случае они окажутся в не • корректном пространстве преобразований. Поэтому нужно прибегнуть к ограничению типа Point (Точка). 49. По очереди выделяйте узлы локаторов, а затем при нажатой клавише Shift выделяйте соответствующие узлы кластеров и выбирайте в меню Constrain (Ограничить) команду Point (Точка), как показано на рис. 13.33. Сделайте это для всех кластеров, которые являются дочерними по отношению к иерархии ik_cur-ves_clusters_drivenSetup. 50. Выберите в меню команду Edit > Select All by Type > Clusters (Правка > Выделить, все объекты типа > Кластеры) и нажмите комбинацию клавиш Ctrl+h, Заодно скройте узел ik_curves_clusters_drivenSetup. 51. Выделите узлы baseBindSkeletonJointld и baseBindSkeleton_joint8 и сделайте их видимыми. Откройте диалоговое окно Connection Editor (Редактор связей). Выделите узел TRANS_ROTATE_SCALE_MATRIX и загрузите его в левую часть этого окна. Затем выделите узел c_Controlled_softBodyCurve и загрузите его в правую часть. Выделите в обоих окнах все атрибуты перемещения, поворота и масштабирования. В итоге узел TRANS_ROTATE_SCALE_MATRIX будет непосредственно контролировать положение узла c_Controlled_softBodyCurve. Это очень важно, так как любой другой способ управления перемещениями приведет к ошибке. 52. Не закрывайте диалоговое окно Connection Editor (Редактор связей). Выделите узел c_ControlledMatrixStack и щелкните на кнопке Reload Right (Перезагрузить правую часть). Создайте те же самые связи, что и раньше для атрибутов перемещений, поворота и масштабирования.
398
Глава 13 • Создание усовершенствованных связей
|ш|1.шосГ
Рис. 13.33. Ограничьте по типу Point кластеры кривой-мишени с кластерами нединамического сплайна кривой обратной кинематики, чтобы динамический и нединамический скелеты оказались в одном пространстве
53. Заблокируйте все атрибуты преобразования для всех узлов иерархий, кроме узлов локаторов, узла mainAttachNode и узла TRANS_ROTATE_SCALE_ MATRIX. Для этого нужно выделить все узлы, кроме вышеупомянутых, выделить атрибуты в диалоговом окне Channel Box (Окно каналов), щелкнуть на них правой кнопкой мыши и выбрать в появившемся меню команду Lock Selected (Блокировка выделенного набора). Итак, вы закончили создание вторичных движений в системе. Теперь у вас есть готовая цепь сочленений, которая будет автоматически менять свое состояние при помощи существующих элементов управления, Чтобы посмотреть на эту систему в действии, загрузите файл Chapter 13_0verlapAct_fm.mb с прилагаемого к книге компакт-диска, который содержит полностью оснащенную и допускающую многократное использование схему, созданную при помощи упражнения, аналогичного предыдущему. Вы можете перемещать ее, поворачивать и масштабировать с помощью узла TRANS_ROTATE_SCALE_MATRIX. Поместив систему в нужное положение, можно анимировать в любом месте узел mainAttachNode путем задания ключей анимации или же при помощи ограничений Point (Точка) и Orient (Ориентация), например, в задней части собаки, где хвост соединяется с ее телом. Эта система будет работать в любом файле. Для ее тестирования присвойте всем атрибутам локатора FloppyChainContoller значение 1 и задайте перемещение в пространстве узла mainAttachNode, как если бы система располагалась на голове идущего персонажа. При воспроизведении анимации вы увидите собственное движение системы. В результате может получиться весьма впечатляющий эффект.
Изменение геометрии после соединения сочленений с телесной оболочкой
399
Помните, что всегда есть возможность избавиться от этого движения, присвоив атрибуту dynamicFlopOnOff значение 0. Вы можете контролировать конечное положение скелета вне зависимости от наличия вторичных движений путем перемещения локаторов и создания для них ключей анимации. Однако если пара метр, задающий гибкость, равен 1, его положение обновляется только после на чала воспроизведения анимации. Это связано с наличием динамического реша теля. Следовательно, чтобы добиться совпадения с начальной позой персонажа при анимации, имеет смысл выделить частицы и сдвинуть их начальный кадр таким образом, чтобы их анимация начиналась раньше анимации персонажа Далее нужно довести анимацию до этого момента и воспользоваться командой Solvers > Initial State > Set for Selected (Решатели > Исходное положение > Зафиксиро вать для выделенного).
Изменение геометрии после соединения сочленений с телесной оболочкой Упражнение данного раздела фокусирует ваше внимание на ситуации, которая часто возникает при производстве реальных фильмов.
Упражнение 13.4. Передача проекционных координат на телесную оболочку персонажа Предположим, моделирование персонажа уже завершено и настала стадия его монтажа, но при этом возникает проблема с геометрией модели. В последний момент оказывается, что в процессе работы над моделью была разорвана одна связь, и для соединения персонажа с оболочкой, а также для присваивания весовых коэффициентов точкам оболочки использовалась неверная геометрия. Фактически эта геометрия не имеет проекционных координат для назначения карты текстуры. В данном примере вам предстоит исследовать последовательность выполненных ранее действий для модификации геометрии (передачи ей проекционных координат) персонажа, связанного с оболочкой, без создания дополнительных узлов. 1. ЗaфyзитeфaйлnonLinearWorkflow_start.mbc прилагаемого к книге компакт-диска. Обратите внимание, что скелет персонажа уже связан с гладкой оболочкой. Однако если открыть диалоговое окно UV Texture Editor (Редактор проекционных координат), как показано на рис. 13,34, вы увидите, что объекту не сопоставлены проекционные координаты. 2. Убедитесь, что у вас включен показ узлов формы, скрытых узлов и нижних узлов, как показано на рис. 13.35. Сначала вы импортируете геометрию с проекционными координатами, котсрые вам требуется переместить на модель. Обратите внимание, что модель с проекционными координатами является точной копией текущей сетки. 3. Импортируйте файл nonUnearWorkflowjmportUVs.mb с прилагаемого к книге компакт-диска. 4. Выделите импортированную модель и обратите внимание на наличие у нее проекционных координат.
400
Глава 13 • Создание усовершенствованных связей
Рис. 13.34. Скелет щенка соединен с оболочкой, точкам которой присвоены весовые коэффициенты, однако ей пока не сопоставлены проекционные координаты
Рис. 13.35. Убедитесь, что в диалоговом окне Hypergraph включен показ узлов формы, скрытых узлов и нижних узлов
Изменение геометрии после соединения сочленений с телесной оболочкой
401
Рис. 13.36. Обратите внимание, что импортированная модель снабжена проекционными координатами, которые вам предстоит перенести на модель, связанную со скелетом, не оставив следа в истории конструирования
Теперь нужно перенести проекционные координаты с импортированной модели на модель, связанную со скелетом, не оставив следа в истории моделирования, как показано на рис. 13.36. При переносе проекционных координат на модель собаки под узлами деформации кластеров оболочки должен появиться узел poiyTransferUv. Но существует возможность воспользоваться диалоговым окном Hypergraph (Просмотр структуры) и связыванием узлов при создании графов зависимости. Обратите внимание на скрытый узел dogLowResShapeOrig, расположенный нл рис. 13.36 под узлом dogLowResShape. Его исследованием мы и займемся в данный момент. В основе связи между узлами, которые формируют сеть, приводящую к дефор мации геометрии, лежит промежуточный узел формы полигона. Именно с этого узла начинается поток данных, создающий геометрию персонажа и совмещающий кластеры оболочки с вершинами, которые отвечают за деформацию объекта. Именно над этим узлом вы произведете операции изменения истории. Затем все дополнительные узлы будут удалены. 5 Выделите узел dogLowResShapeOrig, откройте диалоговое окно Attribute Editor (Редактор атрибутов), нажав комбинацию клавиш Ctrl+a, и в меню Graph (Граф) диалогового окна Hypergraph (Просмотр структуры) выберите команду Input and Output: Connections (Входные и выходные связи). Результат этой операции показан H;I рис. 13.37. 6, На вкладке dogLowResShapeOrig диалогового окна Attribute Editor (Редактор атрибутов) раскройте раздел Object Display (Отображение объекта) и сбросьте флажок Intermediate Object (Промежуточный объект).
402
Глава 13- Создание усовершенствованных связей
Рис. 13.37. Узел dogLowResShapeOrig является узлом сетки полигонов. Именно с него начинается поток данных, отвечающий за деформацию персонажа
7. Выделите импортированную сетку, затем при нажатой клавише Shift выделите узел dogLowResShapeOrig. Щелкните на квадратике, расположенном справа от команды Transfer (Перенос) меню Polygons (Полигоны). Убедитесь, что в диалоговом окне Polygon Transfer Options (Параметры переноса полигонов) установлен только флажок UV Sets (Наборы проекционных координат), как показано на рис. 13.38, Затем выделите узел dogLowResShapeOrig и выберите в меню команду Edit f Delete by Type > History (Правка > Удалить объекты типа > История). 8. Напоследок установите флажок Intermediate Object (Промежуточный объект) для узла dogLowResShapeOrig. Итак, вы перенесли проекционные координаты сетки полигонов, не добавив в сетку узлов историю переноса. Теперь нужно удалить импортированную модель. Файл с окончательной версией сцены называется nonLinearWorkflow_finished.mb и находится в папке Chapters\Chapter!3 прилагаемого к книге компакт-диска, Описанная техника может использоваться при различных обстоятельствах для различных модификаций геометрии до тех пор, пока не меняется порядок вершин сетки. Другим примером может быть триангуляция сетки персонажа, которая выполняется тем же способом, что и перенос проекционных координат.
Заключение
403
Н
Рис. 13.38. Вы должны передать проекционные координаты с импортированной сетки, а затем просто удалить историю редактирования узла dogLowResShapeOrig
Если порядок управляющих точек персонажа не меняется, существует возмож ность импорта и экспорта карт весовых коэффициентов, позволяющая передавать весовые коэффициенты между персонажами с различным разрешением в рамка*; одного пространства проекционных координат. При этом вам потребуется экспортировать карту весовых коэффициентов, внести изменения в порядок управляющих точек геометрии, удалить историю редактирования, вторично связать модифицированную сетку с теми же сочленениями, с которыми она была связана ранее, и снова импортировать ранее сохраненные карты весовых коэффициентов.
Заключение Архитектура Maya позволяет путем полного контроля узлов и связей между ними! конструировать любое заранее выбранное поведение, Связывая узлы, не имевши!.ранее никакого отношения друг к другу, можно решить даже самые сложные про блемы. Пользователь имеет доступ к управлению вводом и выводом необработанных данных и может непосредственно связывать нужные ему атрибуты. В результате появляется возможность интуитивно понятно и творчески строить сложные отношения между атрибутами. Это одно из основных преимуществ Maya, Надеемся, что вы его оцените по достоинству.
14 Частицы и динамика В анимации часто применяются такие динамические эффекты, как дым, пыль, огонь или дождь. Для их имитация в Maya обычно требуется совместная работа математических выражений для частиц, некоторых полей и пользовательских атрибутов. Важно «обернуть» эти атрибуты в единый набор элементов управления. В этом случае другие пользователи легко смогут включать их в свои сцены. В этой главе вы узнаете, как создать струю воды, которая сталкивается с объектом и стекает вниз управляемым образом. Подробнее всего будут рассмотрены следующие темы: О контроль и непосредственное распространение воды под высоким давлением (в нашем случае вытекающей из пожарного гидранта); О подготовка частиц к аппаратной визуализации и создание элементов для монтажа; О создание и указание времени жизни частиц с помощью математических выражений и применение некоторых важных математических функций; о управление движением частиц по поверхности с помощью мишеней и выражений. В этой главе вы познакомитесь с многочисленными нюансами имитации динамики в Maya, а также с эстетическим и техническим подходами к решению различных проблем. Путем пошагового выполнения представленных здесь инструкций и осознания значения каждого шага вы узнаете, как получить потрясающий эффект водяной струи. Для проекта «Место для парковки» нужно было создать пожарный гидрант, поливающий машину. Создание пожарного гидранта требует как чувства реализма (в конце концов, все мы знаем, как должна выглядеть водяная струя), так и стилизации под мультфильм. Поэтому при разработке эффекта важно было обеспечить максимальную гибкость и в плане реализма сцены, и в плане ее соответствия выбранному стилю.
Распространение частиц В файле HbaseScene.ma, расположенном в папке Chapters\Chapterl4 прилагаемого к книге компакт-диска, содержится неполный набор объектов для проекта «Место
Распространение частиц
405
для парковки». В анимации из пожарного гидранта внезапно начинает бить стру я воды, которая сталкивается с автомобилем. Первым шагом при создании струи является генерация частиц. Для имитации распространения частиц можно использовать направленный генератор со значением параметра Spread (Разброс) равным 0,5. Присвойте ему имя waterEmitter и поместите его внутрь пожарного гидранта, как показано на рис. 14.1.
----
э-
~"
.
Рис. 14.1. Источник частиц находится в задней части сопла пожарного гидранта
В общем случае настроить направленный источник частиц можно с помощью управляющих векторов, которые активизируются нажатием клавиши Т. Щелкните несколько раз левой кнопкой мыши, пока не появится манипулятор с меткой direction (направление). Его можно перемещать в трехмерном пространстве, регулируя направление выброса частиц. Результат перемещения этого вектора отражается в полях Direction X/Y/Z (Направление по оси X/Y/Z) окна каналов, как показано на рис. 14.2. Хотя этот прием работает вполне удовлетворительно, удобнее выбрать направление, параллельное одной из осей, например Direction X, и присвоить ему значение 1, а затем нацелить генератор частиц с помощью инструмента Rotate (Повернуть). Это дает возможность легко создать ограничение типа Aim (Цель) между источником и мишенью (в результате источник всегда будет нацелен на мишень), а также анимировать направление испускания частиц путем вращения источника. Это намного проще, чем решать, какие значения вводить в поля Direction X/Y/Z (Направление по оси X/Y/Z) для нацеливания потока частиц в нужном направлении.
406
Глава 14 • Частицы и динамика
'- K l ? ' 4 -J * -- - :• ' - • li^.v-!
i 1ГЛ
^ev-^WO" | *l-Ч!!-'. ."1-'
..
tl^H'^jW'^ e^li^ ,.•„ •: • .г -,, I ,
Рис. 14.2. Значения в полях Direction X/Y/Z в окне каналов меняются при перемещении манипулятора направления
Рис. 14.3. Частицы в виде точек
407
Распространение частиц
При работе над движением частиц обычно выбирают тип визуализации частиц Multistreaks (Множественные полосы), при котором каждая частица представляет собой группу полос, а не одну полосу или точку. Длина и направление «хвоста» частицы зависят от ее скорости. В этом случае отслеживать перемещения в разных направлениях хвостатых частиц намного проще, чем точек, показанных, например, на рис. 14.3. Кроме того, выбор типа визуализации Multistreaks (Множественные полосы) создает впечатление, что в сцене присутствует больше частиц, чем на самом деле (рис. 14.4). Способ визуализации частиц в любой момент времени можно сменить.
Не
Ь*
W :.*)•.-
•U > -л
*v*"*^##& i * •*• * M.«":"":"
Рис. 14.4. Частицы в виде множества полос. Обратите внимание, что скорость и направление движения частиц видны даже на статичном кадре
Столкновения Как показано на рис. 14.4, частицы вылетают из сопла пожарного гидранта, иногда пересекая его поверхность, в то время как они должны вылетать только из отверстия. Перед моделированием столкновений частиц со стенками трубы нужно убедиться в корректном направлении нормалей к поверхности, формирующей эти стенки. В нашей сцене они направлены наружу, как показано на рис. 14.5.
Глава 14 • Частицы и динамика
408
£№!»».:ЗЭ#Й W"*w. АЧггйя
С*Г?""' 8ЙСПВ
I ajld.vt', l l « ( 4 I I W n w | Sj.m^i. r
*•*
>;'•• I '
i^nsl'Tji
I
C-?™03'
HSIp
-,-r.j' l - T - l S i l d . . » ! ..tntl
> 1-kMfe 1 Ил
Cl!*n
Рис. 14.5. Направление нормалей показывает, что лицевая поверхность трубы располагается снаружи
Если выбрать в меню команду Edit Polygons > Normals > Reverse (Правка полигонов > Нормали > Развернуть), столкновения будут происходить корректно, но это повлияет на назначение текстур и освещение, кроме того, изменится вид проекционных координат. Вместо этого продублируйте трубу и присвойте копии имя с приставкой dyn_, указывающее, что она будет использоваться только при имитации динамики. Откройте для нее диалоговое окно Attribute Editor (Редактор атрибутов) и в разделе Render Stats (Условия визуализации) сбросьте флажки Primary Visibility (Непосредственная видимость), Casts Shadows (Формирование теней), Visible in Reflections (Видимость в отражениях) и Visible in Refractions (Видимость в преломлениях), как показано на рис. 14.6. Затем поменяйте направление нормалей. Это гарантирует, что даже если вы забудете скрыть копию объекта, она никак не повлияет на результат визуализации. Теперь выделим частицы, а затем — копию сопла пожарного гидранта и щелкнем на квадратике, расположенном справа от команды Make Collide (Заставить сталкиваться) в меню Particles (Частицы). Введите в поле Friction (Трение) значение 0,1, а в поле Resilience (Упругость) — значение 0,2 и щелкните на кнопке Create (Создать). Воде присуще трение, которое замедляет ее движение вдоль стенок трубы. В результате скорости выхода отдельных частиц из сопла пожарного гидранта будут
Распространение частиц
409
различаться. Когда струя сталкивается с объектом, она распадается на отдельные частицы, которые потом сливаются с другими частицами. Вода не просто отражается от поверхности, она разбрызгивается. Именно поэтому параметру Resilience (Упругость) присвоено относительно низкое значение. Кроме того, столкновение струи со стенками трубы сделает эффект более реалистичным, так как частицы будут выходить из сопла в различных направлениях, как показано на рис. 14.7, У Attribute Editor; cfyn__pCylinclef2
Щ Tuuimllation Atirttiutes __> j Metth Componnn
Renrier Slats Г Raniive Shadows Г |Г Г Г Visible In Reunions
И Г
Рис. 14.6. Редактирование атрибутов визуализации поверхности, формирующей сопло пожарного гидранта в разделе Render Stats диалогового окна Attribute Editor
Можно пойти дальше, добавив в устье сопла небольшую кромку. В результате частицы будут выходить из сопла еще более причудливым образом. Любые мелкие детали, присутствующие в системе, добавляют имитации реализм. Если частицы при столкновении с кромкой отбрасываются внутрь трубы вместо того, чтобы по дуге вылетать наружу, можно либо поменять форму кромки, либо присвоить параметру Resilience (Упругость) отрицательное значение. Последнее приведет к тому, что частицы будут перескакивать через объект, с которым они сталкиваются, а не отскакивать от него. Это очень полезный э^хрект, так как он позволяет быстро менять направление движения частиц без влияния поля.
410
Глава 14* Частицы и динамика
Рис. 14.7. Частицы больше не проходят сквозь сгенки трубы, они сталкиваются с ними и выходят из сопла
Атрибут Conserve Для имитации потери движения используется атрибут Conserve (Сохранение), который указывает, как изменится скорость частицы при переходе к следующему кадру. Этому атрибуту всегда нужно присваивать значение меньше заданного по умолчанию, так как все объекты, даже пустое пространство, оказывают некоторое сопротивление, что приводит к потере части движения. Атрибут Conserve (Сохранение) непосредственно контролирует движение в ходе имитации динамики. Если объект сохраняет 100 % движения в каждом кадре, поменять направление его перемещения крайне сложно. Например, если частицы испускаются параллельно оси X со скоростью 1 единица/с, и вы хотите добавить силу тяжести, чтобы они двигались по дуге и рано или поздно падали вниз, вы никогда не достигнете данного эффекта, если атрибут Conserve (Сохранение) имеет заданное по умолчанию значение 1. Ведь в этом случае скорость перемещения вдоль оси X будет сохраняться от кадра к кадру. Рекомендуем для начала присвоить этому атрибуту значение 0,975, а затем определить, что с ним делать, уменьшать или увеличивать.
Распространение частиц
411
Указанное значение вполне подходит для имитации водяной струи. Для доступа к данному атрибуту щелкните на квадратике, расположенном справа от команды Particle Tool (Инструмент для работы с частицами) в меню Particles (Частицы).
Сила тяжести Сила тяжести является важным фактором, позволяющим достичь реализма при имитации динамики. Присвоив соответствующему атрибуту неверное значение, невозможно добиться корректного вида сцены. Например, вы вряд ли спутаете астронавтов, идущих по поверхности Луны, с человеком, шагающим по поверхности нашей планеты. И не только потому, что над астронавтами находится черное небо со слишком яркими звездами. То, как они поднимают ноги при ходьбе, скорость оседания пыли, которую они при этом поднимают, да и скорость падения самих объектов, — все это дает зрителю ощущение, что действие происходи!" не на Земле. Сила тяжести в Maya вычисляется в метрах в секунду вне зависимости от выбранных вами единиц измерения. Следовательно, заданное по умолчанию значение параметра Magnitude (Интенсивность) для поля Gravity (Сила тяжести), равное 9,8, означает 9,8 м/с2. Так как сила притяжения частиц к земле зависит от их массы, а в нашем случае довольно сложно определить, какова должна быть масса каждой водяной капли., для имитации эффекта воздействия силы тяжести значение параметра Magnitude (Интенсивность) будет увеличено до 565. Это значение было найдено методом проб и ошибок.
Управляющие узлы Настал момент для создания узла, управляющего частицами. Скорость выхода воды из сопла определяется давлением. В свою очередь давление определяется объемом воды, проходящим через единицу объема пространства. Следовательно, соотношение между размером сопла и количеством пропускаемой сквозь него воды определяет скорость ее перемещения. То есть для вычисления скорости нужно знать радиус сопла и объем воды. Эти же параметры влияют на скорость эмиссии. Однако их не следует показывать пользователям, так как им не нужна информация, что 1000 кубометров воды перемещается по трубе диаметром 20 см. Поэтому скорость. генерации частиц примем за X, а скорость их перемещения — за Y. Если связать их друг с другом, для управления количеством вытекающей из пожарного гидранта воды пользователю потребуется регулировать всего один атрибут. С его помощью можно сформировать как мощную струю, так и несколько капель. Заданием этого соотношения вы и займетесь в упражнении данного раздела. Упражнение 14.1. Управление потоком воды Продолжим работу с уже открытой сценой. 1. Создайте пустой узел группы и присвойте ему имя waterSetup. 2. В диалоговом окне Channel Control (Управление каналами) заблокируйте атрибуты перемещения, поворота и масштабирования.
412
Глава 14 • Частицы и динамика
Все объекты, формирующие эффект водяной струи, будут сгруппированы под этим пустым узлом. Это делается, чтобы лишить пользователя возможности случайно переместить управляющий узел, что привело бы к перемещению всей системы. 3. Сделайте источник частиц и сами частицы дочерними по отношению к узлу waterSetup. 4. С помощью диалогового окна Add Attribute (Добавить атрибут) создайте три атрибута типа Float (С плавающей точкой): Pressure (Давление), Rate (Интенсивность) и Speed (Скорость) для узла waterSetup. 5. Теперь с помощью этих атрибутов создадим выражения, контролирующие скорость и интенсивность потока частиц. Выделите объект waterEmitter, а затем выберите в меню команду Window > Animation Editors > Expression Editor (Окно > Редакторы анимации > Редактор выражений). Добавьте туда следующие выражения: waterEmitter.rate = waterSetup.pressure * waterSetup.rate: waterEmitter.speed = waterSetup.pressure * waterSetup.speed:
Чтобы выражение было корректным, может потребоваться переименовать узел источника частиц. Он должен называться именно waterEmitter. Атрибут Pressure (Давление) будет использоваться для управления течением воды. Значение 0 означает, что из сопла гидранта вода не течет, а значение 1 — что вода течет с максимально возможной скоростью, 6. Присвойте параметру Pressure (Давление) значение 0,5, а параметру Rate (Интенсивность) — значение 1000. 7. Начните воспроизведение анимации и подберите такое значение параметра Speed (Скорость), чтобы поток воды представлял собой нечто среднее между струйкой и фонтаном. При этом вы обнаружите, что вне зависимости от значения атрибута Speed (Скорость) струя стекает на землю слишком быстро, как показано на рис. 14.8. Причина этого состоит в том, что сила, выталкивающая частицы из трубы, возникает только в момент их создания, то есть частицы получают только начальный импульс вдоль оси Z. В то же время сила тяжести притягивает частицы вниз непрерывно, а сила трения внутри трубы слишком быстро снижает их скорость. В реальности давление увеличивается при увеличении объема воды. Но так как мы не можем воспроизвести нечто подобное, воспользуемся для имитации увеличения давления однородным полем, которое находится «под рукой». 8. Выделите частицы и щелкните на квадратике, расположенном справа от команды Uniform (Однородное) в меню Fields (Поля). В диалоговом окне Uniform Options (Параметры однородного поля) введите в поле Direction X (Направление по оси X) значение 0, а в поле Direction Z (Направление по оси Z) — значение 1. В раскрывающемся списке Volume Shape (Форма облака частиц) выберите вариант Cylinder (Цилиндр) и щелкните на кнопке Create (Создать). Значения полей Translate (Перемещение), Rotate (Поворот) и Scale (Масштабирование) выберите таким образом, чтобы однородное поле соответствовало размеру трубы, как показано на рис. 14.9.
Распространение частиц
„-
-
-
' "~
413
"'
*'••"
'"-''
- . . -II [.'«Ы И *-';- *•: | •>:*..•..*« - 1. ?
'
Рис. 14.8. Вода стекает из сопла струйкой даже при значении параметра Speed равном 100
1
.
., fcj
^^ИЖЖ1Ж Рис. 14.9. Имитация силы, которая будет выталкивать воду из сопла, происходит путем придания облаку частиц, на которое воздействует однородное поле, формы цилиндра, соответствующего по размеру соплу
414
Глава 14» Частицы и динамика
9. Для имитации восходящего движения водяной струи, покидающей сопло, присвойте параметру Direction Y (Направление по оси Y) значение 1. Помните, что несмотря на учет при имитации частиц в Maya определенных физических аспектов, например силы тяжести, трения или массы, на движение объектов в реальном мире оказывают влияние тысячи других факторов. Их также нужно учесть при имитации динамики, пользуясь имеющимися в наличии инструментами. 10. Откройте выражение, созданное вами ранее, и добавьте туда строку: jnlformFieldl.magnitude = waterSetup.pressure * waterSetup. i;peed * 24;
Полученное значение умножается на 24, так как интенсивность поля представляет собой величину силы, действующей в одну секунду времени, а не в течение одного кадра. Именно поэтому при смене частоты, например, на 30 кадров в секунду в системе NTSC интенсивность движения объектов не меняется. Но со своей стороны, генератор частиц задает их скорость только в первом кадре, причем эта скорость никак не связана с отсчетом кадров. Следовательно, если начальная скорость частиц равна 50 единицам, интенсивность однородного поля должна составлять 50 х 24 = 1200. На данный момент параметр Speed (Скорость) узла waterSetup должен иметь значение 100, а параметр Rate (Интенсивность) — значение 1000. 11. Теперь параметры Speed (Скорость) и Rate (Интенсивность) можно заблокировать и контролировать поток частиц, меняя значение параметра Pressure (Давление). Эта простая схема дает достаточный контроль над сценой. Однако из-за быстрого движения создается впечатление, что вода выливается отдельными порциями, как показано на рис. 14.10. Описанная проблема часто проявляется при больших скоростях частиц. Она связана с тем, что за один кадр частицы проходят значительное расстояние, и появляется разрыв между этой и следующей порцией частиц. Для ликвидации этого эффекта используется несколько приемов. Чаще всего достаточно увеличить значение параметра Oversampliing (Число пересчетов в одном кадре), но мы не рекомендуем вам делать этого. В результате увеличения данного параметра вычисление динамики в каждом кадре будет производиться более одного раза. Это приведет к тому, что генератор частиц будет испускать частицы не один, а несколько раз в кадре. Однако при этом будут затронуты и все остальные аспекты динамики. Например, если атрибут Conserve (Сохранение) имеет значение 0,9, потеря скорости при каждом следующем пересчете составит 10 %. Кроме того, несколько раз будет вычисляться влияние поля. Таким образом, менять данный параметр лучше до начала работы над имитацией динамики, а не после того, как уже все готово. В этом случае значения атрибутов будут основаны на текущем значении параметра Oversampling (Число пересчетов в одном кадре). 12. Проблема разрыва в потоке частиц связана с их генератором. Соответственно, именно его параметры нужно скорректировать. Как можно понять по рис. 14.11, расстояние между отдельными порциями частиц равно примерно 5,5 единицы. Достаточно присвоить параметру Max Distance (Максимальное расстояние) значение 5,5, и при воспроизведении анимации разрыв исчезнет, как показано на рис. 14.11.
Распространение частиц
41
РИ
на • HaiSrpr 1 ? ^ п Л Ь Ш ° начальной скоростью, перемещающиеся за один кадр на значительные расстояния, создают впечатление, что вода вытекает порциями
;
"
Ti'w
jsciao
Рис. 14.11. Для созданий непрерывного потока достаточно присвоить параметру Max Distance значение 5,5
:
r'io Я
416
Глава 14- Частицы и динамика
ПРИМЕЧАНИЕ При желании вы можете создать для управления давлением, скоростью и интенсивностью потока частиц более сложные выражения. Например, сделать так, чтобы соотношение между этими параметрами было нелинейным, скажем, основываясь на диаметре сопла и объеме проходящей сквозь него воды.
Визуализация частиц Теперь, когда перемещение частиц выглядит корректно,, пришло время визуализировать сцену. Визуализация частиц в Maya представляет собой своего рода минное поле, на котором вам предстоит столкнуться с различными неожиданностями. Наиболее неприятной особенностью этого процесса являются сложность согласования эффекта размывания в движении геометрических объектов. Кроме того, у частиц отсутствует их собственный альфа-канал, их невозможно осветить и получить от них тень, при их аппаратной и программной визуализации используются разные варианты заполнения. Как уже упоминалось, существует два метода визуализации частиц — аппаратный и программный. Каждый из них имеет достоинства и недостатки. Для большинства создаваемых эффектов можно использовать оба метода, а также комбинировать их на стадии монтажа.
Аппаратная визуализация Аппаратная визуализация использует возможности графической карты для создания изображений в окне OpenGL, задействует аппаратный буфер визуализации и делает снимки экрана для каждого кадра. В данном случае термин «окно визуализации» не употребляется, так как программа может делать несколько проходов для одного кадра, сохраняя результат каждого из них в буфере и затем комбинируя их вместе для получения итогового изображения. С помощью этой техники можно создать ступенчатое размывание в движении, переходя от одного кадра к следующему, фиксируя изображение для сдвинутого положения частицы и затем комбинируя полученные снимки экранов, как показано на рис. 14.12-14.14. В зависимости от количества шагов, или проходов, которое вы укажете, итоговое изображение может выглядеть размытым при том, что на самом деле размывание пикселов отсутствует. Эффект достигается наложением друг на друга нескольких изображений с разной прозрачностью. Для определенных типов частиц, например Sprites (Текстурированные плоскости), такая техника позволяет получить красивые размытые изображения, хотя все зависит от степени перекрытия отдельных плоскостей и их непрозрачности. Главное убедиться, что в сцене достаточно перекрывающихся частиц, тогда не будет заметен ступенчатый эффект (рис. 14.15 и 14.16). Так как визуализация производится с помощью видеокарты, именно ее возможности определяют скорость данного процесса. По большей части визуализация одного кадра занимает от 1/10 секунды до минуты в зависимости от разрешения, числа проходов и объема данных в сцене.
Визуализация частиц
417
Рис. 14.12. Аппаратно визуализированная сфера после трех проходов визуализатора
Рис. 14.13. Алпаратно визуализированная сфера после 16 проходов визуализатора
Рис. 14.14. Аппаратно визуализированная сфера с трехмерным размыванием в движении
418
Глава 14- Частицы и динамика
Рис, 14.15. Аппаратно визуализированные частицы типа Sprites при отсутствии размывания в движении
Рис. 14.16. Аппаратно визуализированные частицы типа Sprites после 16 проходов визуализатора
Однако, как уже отмечалось, за скорость визуализации частиц данного типа приходится платить их недостаточной функциональностью. В Maya версии 4,5 некоторые типы частиц, а именно Points (Точки), Multipoints (Множественные точки) и Spheres (Сферы), поддерживают аппаратные тени.
Визуализация частиц
419
Типы аппаратно визуализируемых частиц Для изображения частиц при аппаратной визуализации используется несколько различных форм. Преимуществом буферной визуализации является тот факт, что для таких частиц, как Muttistreaks (Множественные полосы) и Multipoint (Множественные точки), положение каждой частицы представляется не одной точкой или полосой, а набором точек или полос указанного пользователем размера. Во время каждого прохода происходит изменение положения каждой точки/штриха случайным образом относительно частицы, что приводит к более ровному виду конечного кадра. Меняя такие параметры, как множественный радиус, размер точки/ширина линии и число проходов, можно придать частицам мягкие, газообразные контуры или создать слегка размытое плотное облако (рис. 14.17 и 14.18).
Рис. 14.17. Аппаратно визуализированные частицы типа Multipoint^ при нулевом числе проходов визуализатора
Рис. 14.18. Аппаратно визуализированные частицы типа Multipoints после 16 проходов визуализатора
420
Глава 14 • Частицы и динамика
Монтаж аппаратно визуализируемых частиц Монтаж частиц, особенно аппаратно визуализируемых, представляет собой нелегкую задачу в отличие от монтажа геометрических объектов, который в определенной степени интуитивно понятен. В последнем случае вы имеете однородный альфа-канал, а объект расположен либо перед другим объектом, либо за ним. Частицы же представляют собой облака, расположенные обычно как перед остальными объектами сцены, так и за ними. Рассмотрим в качестве примера дождь. Обычно создается один большой источник частиц, область действия которого распространяется на всю сцену, и результат его работы визуализируется с помощью окна Hardware Render Buffer (Аппаратный буфер визуализации). Однако на стадии монтажа возникает необходимость поместить программно визуализированные объекты сцены как перед частицами дождя, так и за ними. При наличии канала глубины для частиц и разделении геометрии по отдельным слоям монтаж осуществляется достаточно просто,. Но канал глубины создается только для частиц, имеющих форму геометрических объектов, например сфер, или если вы сопоставляете частицам некий заранее созданный объект. Частицы типа Multistreaks (Множественные полосы), которые, скорее всего, будут использоваться для имитации дождя, не имеют канала глубины, как, впрочем, и частицы типа Streaks (Полосы), Points (Точки), Multlpolnts (Множественные точки). Для этого есть причины. Ведь невозможно создать канал глубины для объекта, итоговый цвет пикселов которого определяется цветом пикселов другого объекта, расположенного позади. Для монтажа аппаратно визуализируемых частиц нужно установить флажок Geometry Mask (Маскирование геометрии) в разделе Render Modes (Режимы визуализации) диалогового окна Hardware Render Attributes (Атрибуты аппаратной визуализации). Маскирование геометрии напоминает назначение материала Use Background (Использовать фон), который применяется при программной визуализации и позволяет получить изображение частиц без включения в визуализацию геометрических поверхностей, как показано на рис, 14.19 и 14.20,
Рис. 14.19. Аппаратно визуализированные частицы типы Sprites с красной сферой
Визуализация частиц
421
."-• j.-. -г.
'-- :-
-. -•
•-
:-
;
.
-" • -
-.
Рис. 14.20. Аппаратно визуализированные частицы типа Sprites после установки флажка Geometry Mask
Теоретически исключение геометрических объектов при визуализации части!;. должно происходить одновременно с получением программно визуализированного изображения сцены. К сожалению, по ряду причин это условие не соблюдается. Во время программной визуализации NURBS-поверхности и даже иерархические поверхности заполняются треугольниками в соответствие с указанными вами параметрами. То, что вы видите в аппаратном буфере визуализации, является продуктом несколько другого заполнения, поэтому контуры не будут совпадать друг с другом, особенно в областях большой кривизны. Чтобы решить эту проблему можно установить флажок Display Render Tessellation Geometry (Показывать заполнение для геометрии) для каждой поверхности, которая фигурирует на фоне частиц, В случае иерархических поверхностей даже эта возможность отсутствует, При наличии в сцене двухмерного или трехмерного размывания в движении маскирование геометрии также не поможет сгладить несовпадения с программке визуализируемым изображением. Попытки прибегнуть к аппаратному размыванию в движении часто только усугубляют проблему, так как размывание, создаваемое в аппаратном буфере визуализации, приводит к «смазыванию» изображения, как вы уже видели на рис. 14.12-14.14. Кроме того, в данном случае для получения эффекта используется совершенно другой подход, нежели при программной визуализации. Поэтому в большинстве случаев, если вам требуется совместить апнаратно визуализируемые частицы с программно визуализируемым элементом сцены, лучше отказаться от размывания в движении для частиц. К сожалению, это радикально влияет на вид частиц, так как данный эффект сказывается на итоговом виде сцены. Особенно это заметно в случае мелких быстро движущихся частиц, которые должны выглядеть, как размытые полосы. Теперь, когда вы вооружены информацией о необходимости правильного маскирования геометрии и осведомлены о проблемах с размыванием в движении, перейдем к рассмотрению альфа-каналов,
422
Глава 14- Частицы и динамика
Альфа-каналы Возможность использовать аппаратный альфа-канал зависит от видеокарты вашего компьютера. В некоторых ситуациях альфа-канал, генерируемый видеокаргой, вполне приемлем. Например, при работе с однородной геометрией или с полностью непрозрачными частицами, как показано на рис. 14.21.
Рис. 14.21. Аппаратно визуализированный дым на черном фоне
Однако результат визуализации прозрачных объектов часто выглядит неаккуратно и является источником проблем на стадии монтажа, как показано на рис. 14.22. Это связано с тем, что программа монтажа предназначена для обработки альфа-каналов другого типа.
HOWWOW •лтевйд*^ «*«•№
•ДЛДЛ
Рис. 14.22. Результат монтажа черно-белой «шахмагки» иаппаратно визуализируемого дыма с аппаратным альфа-каналом
Визуализация частиц
423
Некоторые используют в качестве альфа-канала яркость изображения, что позволяет визуализировать дым или пыль в оттенках серого. Однако это неверный подход, так как в данном случае частицы выглядят плоскими (рис. 14.23). Под «плоскими» подразумеваются частицы, в которых отсутствует какая-либо информация о раскраске.
Рис. 14.23. Результат монтажа черно-белой «шахматки» и аппаратно визуализируемого дыма с яркостью в качестве альфа-канала
Более темные области будут иметь более низкое значение альфа-канала и, следовательно, слабее проявятся на итоговом изображении, как показано на рис. 14.24. Но темные области частиц так же важны, как и светлые, а альфа-канал должен указывать степень видимости слоя, расположенного за частицами.
Рис. 14.24. Более темный синий дым неверно разделяется на слои даже после редактирования уровней альфа-канала с помощью специализированной программы
424
Главе! И • Частицы и динамика
Даже если аппаратный альфа-канал доступен, вычисление альфа-канала изображения происходит некорректно, по крайней мере, в тех случаях, когда значение непрозрачности объекта меньше единицы. Рисование частиц происходит от задней части сцены к передней, при этом слои оказываются друг поверх друга. Если поместить слой синих пикселов поверх слоя зеленых, которые в свою очередь располагаются поверх слоя красных пикселов, итоговое изображение будет иметь синий цвет, так как зеленые и красные пикселы просто не имеют шанса проявиться (при условии, что все частицы являются непрозрачными). В результате вы получите изображение из синих пикселов с величиной альфа-канала равной 1. Однако если непрозрачность каждого из пикселов имеет значение 0,5, вы получите смесь синих, зеленых и красных пикселов, так как все цвета будут перемешаны. Итоговый пиксел получит 50 % синего, 25 % зеленого и 12,5 % красного цвета. Верхний пиксел с непрозрачностью 0,5 сохранит для итогового изображения 50 % своего цвета. Второй пиксел также даст 50 % своего цвета, но уже от той доли, которая будет видна сквозь верхний пиксел, то есть 50 % от 50 %, Соответственно, пиксел самого нижнего слоя сохранит 50 % от 50 % своего цвета, то есть 12,5 %. В случае с альфа-каналом Maya дает достаточно странные результаты. Теоретически, если все пикселы имеют непрозрачность, равную 0,5, альфа-канал никогда не будет белым на 100 %. Представьте себе кусок торта, которым вы делитесь с друзьями. Вы берете себе половину торта, оставляя вторую половину другу. Вы продолжаете делить свой кусок пополам, пока он не становится настолько маленьким, что дальнейшее деление невозможно. Если каждый пиксел воспроизводит только половину своего цвета через предыдущий пиксел, непрозрачность должна расти. Каждый следующий пиксел будет воспроизводить все меньшую часть своего цвета, пока не будет достигнут определенный порог и альфа-канал не станет практически равным 1. То есть у вас будет столько частиц, что рассмотреть сквозь них что-нибудь окажется невозможным. К сожалению, на практике этого не происходит. Трудно сказать, каким способом в Maya вычисляется значение альфа-канала, но оно вовсе не накапливается по описанной схеме. В качестве простого примера возьмите две частицы и присвойте одной из них непрозрачность 0,5, а второй — непрозрачность 1. Выровняйте их в окне проекции таким образом, чтобы сначала располагалась частица с непрозрачностью 0,5, аза ней — частица с непрозрачностью 1. Визуализируйте изображение и посмотрите на значения пиксела в каком-нибудь графическом редакторе, например в Photoshop. Так как расположенный сзади пиксел полностью непрозрачен, разумно предположить, что альфа-канал будет однородным. Однако итоговое значение альфа-канала оказывается равным 0,75. Подводя итоги, скажем, что даже при корректной цветовой информации альфа-канал результирующего изображения будет неточным. То есть вам нужно придумать другой метод вычисления его значения. Метод, который предпочитают авторы, называется техникой зеленого экрана. При визуализации эффектов, которые не требуют отдельной палитры цветов, например дыма или водяной струи, RGB-значения частиц применяются для хранения не цвета, а данных. К примеру, для имитации дыма информация об интенсив-
Визуализация частиц
425
ности цветов не важна. Цвет дыма можно скорректировать на стадии монтажа. Поместив информацию о раскраске в один канал, например красный, или разделив ее на области теней и бликов и поместив тени в красный канал, а блики — в синий, вы освободите зеленый канал для нужной вам информации, как показано на рис. 14.25. Если зеленый канал останется пустым, можно сделать цвет фона зеленым, а затем выбрать в раскрывающемся списке Alpha Source (Источник альфаканала) значение Green Channel (Канал зеленого).
Рис. 14.25. Благодаря использованию в качестве альфа-канала канала зеленого цвета дым корректно смонтирован с черно-белым фоном «шахматки»
В случае когда невозможно использовать зеленый или любой другой цвет в качестве фонового, так как он слишком коррелирует с цветом частиц, можно просто визуализировать частицы в два прохода — один с цветовой информацией, а второй с RGB-значениями, равными 1 на черном фоне. Полученное в результате изображение может служить маской для сцены, созданной во время первого прохода.
Программная визуализация Программная визуализация позволяет решить ряд проблем аппаратной визуализации в плане, например, создания корректного альфа-канала или корректного исправления геометрии после заполнения. Кроме того, при программной визуализации объекты, расположенные в сцене, могут отбрасывать тени на частицы, а также сами частицы могут отбрасывать тени друг на друга. Однако даже для частиц, визуализированных программно, невозможно создать размывание в движении. Причина этого лежит в механизме вычисления данного эффекта в Maya. Программа обращает внимание на местоположение рассматриваемой в текущий момент времени частицы и на ее положения в предыдущих кадрах и на основе этой информации вычисляет направление размывания в движении
426
Глава 14* Частицы и динамика
В случае трехмерного размывания в движении также вычисляется цвет пикселов в различные моменты, поэтому получается достаточно приемлемый результат. Однако при двухмерном размывании Maya вычисляет только вектор перемещения и размывает итоговые пикселы на основе этой информации. Что касается частиц типа Blobby Surface (Сферические частицы), которые представляют собой метасферы с изопараметрической поверхностью, то после их перемещения эффект размывания в движении приходится пересчитывать. То есть частица, выбранная в данный момент, может двигаться по другой траектории или располагаться в другом положении. В случае облака частиц вам приходится иметь дело с неким объемом. Текущие пикселы, взятые в качестве образца, составлены из сотен пикселов, расположенных за ними, каждый из которых перемещается со своей скоростью и в своем направлении. Следовательно, Maya не может предсказать, как именно будет происходить размывание. Впрочем, существует обходной путь, позволяющий имитировать этот эффект. Как уже упоминалось, для его создания требуется отслеживать положение образцов и, соответственно, вычислять вектор размывания. В случае двухмерного размывания вычисления происходят обычным образом, а затем итоговые пикселы размываются в указанном направлении. Так как частицы типа Cloud (Облако) и Blobby (Сферические частицы) имеют сферическую форму, достаточно заменить частицы сферами, которые и будут размыты при визугшизации. Однако вам требуется размыть не сферы, а частицы или объемные облака. Именно здесь можно обратить недостатки стандартного визуализатора в достоинства. При двухмерном размывании в движении не оценивается, является ли прозрачным назначенный объекту материал. Рассматриваются только треугольники заполняемого объекта, вычисляется вектор их движения и затем размывается цвет итоговых пикселов. Именно поэтому невозможно получить корректный результат при размывании прозрачных объектов. Соответственно, если назначить поверхностям сфер-заменителей материал с прозрачностью 100 %, цвет итоговых пикселов будет соответствовать лежащим в основе сферическим частицам. И этот цвет будет корректно размыт благодаря сферам-заменителям (рис. 14.26-14,28).
Рис. 14.26. Программно визуализируемые частицы типа Blobby Surface с двухмерным размыванием — размывание отсутствует
Визуализация частиц
427
Рис. 14.27. Программно визуализируемые частицы типа Blobby Surface с назначенными им заменителями в виде сфер и двухмерным размыванием
Рис. 14.28. Программно визуализируемые частицы типа Blobby Surface с прозрачными заменителями в виде NURBS-сфер и двухмерным размыванием — теперь частицы размыты
Главное в этой технике убедиться, что геометрический объект, используемый в качестве заменителя, превосходит по размеру частицы типа Cloud (Облако) и Blobby Surface (Сферические частицы). Если для контроля размера сферических частиц или облаков применяется атрибут radiusPP (Радиус одной частицы), с его помощью можно контролировать и масштаб объекта-заменителя частицы в разделе Instancer Options (Параметры заменителя) диалогового окна Attribute Editor (Редактор атрибутов). Эта техника работает в большинстве случаев. Но при наличии в сцене слишком большого числа частиц вам потребуется много геометрических объектов для замещения, что может привести к резкому увеличению не только размера файла, но в некоторых случаях и времени визуализации. Результатом размывания небольших быстро перемещающихся объектов обычно является полоса. В случае частиц типа Cloud (Облако), которые относятся к объем-
428
Глава 14- Частицы и динамика
ным частицам, подобный результат можно получить путем использования вместо них частиц типа Tube (Трубка). Последние аналогичны аппаратно визуализируемым частицам типа Streaks (Полосы) в том смысле, что длина трубки зависит от скорости частицы. Чем быстрее перемещается частица, тем длиннее трубка. Пользователь может также контролировать радиус конца (radiu<;l) и радиус основания (radiusO), то есть создавать конические трубки. В результате получается вполне достоверная имитация размывания в движении. Для частиц типа Blobby Surface (Сферические частицы) обходной путь сложнее. При этом используется примерно тот же подход, что и в случае с трубками, то есть создание заостренного хвоста за частицей.
Функция emit Функция emit позволяет пользователю добавлять частицы к уже существующему генератору. При использовании внутри выражения для рабочего цикла частиц или для их создания эта функция позволяет помещать частицы в определенное место с определенными атрибутами. В зависимости от ее места в выражении вычисления могут потребовать значительных ресурсов. Обычно MEL-команда с функцией emit используется, например, в цикле for: for ($1 = 0;$1 < 1000;++$1){ vector SrandPos = sphrand (1); emit -object particlel -position (SrandPos.x) (jrandPos.y) (SranJPos.z):
}
Хотя этот фрагмент работает совершенно корректно, он вызывает функцию emit 1000 раз. Представьте, что в сцене присутствует 1000 частиц, использующих этот фрагмент. В результате функция emit будет вызвана миллион раз. Эффективнее написать одну длинную команду и выполнить ее один раз: string $cmd = "emit -object particlel "; for <$i - 0;$i < 10QO;++$i){ vector SrandPos = sphrand (1); icmd += (" -position " + ($randPos.x) + " " + (SrandPos.y) + " " + ($randPos.z)): } eval $cmd;
В этом случае функция вызывается единственный раз :три вычислении выражения. Для создания хвоста у частиц типа Blobby Surface (Сферические частицы) нужна информация о текущей частице, ее положении и скорости. Затем на основе некоего выражения требуется вычислить хвост. Для начала создается новый объект-частица с названием blobbyTrailParticles, который также будет испускаться генератором waterEmitter. Если бы частицы испускались внутрь какого-то объекта, они, в свою очередь, испускали бы частицы, что привело бы к быстрому росту частиц в сцене. В диалоговом окне Script Editor (Редактор сценариев) введите выражение: particle -n "DlobbyT>ailParticles":
Визуализация частиц
429
Вам нужно открыть диалоговое окно Attribute Editor (Редактор атрибутов) для только что образованных частиц blobbyTrailParticles и выбрать в раскрывающемся списке Particle Render Type (Тип визуализации частиц) вариант Blobby Surface (Сферические частицы). Щелкните на расположенной под этим списком кнопке Current Render Type (Текущий тип визуализации), чтобы добавить атрибут Radius (Радиус), и введите в появившееся поле значение ОД. Выделите объект waterEmitter и выберите в раскрывающемся списке Particle Render Туре (Тип визуализации частиц) вариант Point (Точки) или любой другой вариант непрограммно визуализируемых частиц. Это требуется, потому что сферические частицы, созданные с помощью команды emit, не будут слипаться друг с другом, в результате частицы и их хвост не соединятся в один объект. Кроме того, вам нужно выбрать в раскрывающемся списке Lifespan Mode (Режим периода существования) для частиц blobbyTrailParticles вариант Constant (Постоянный) и ввести в поле Lifespan (Период существования) значение 0,03, что эквивалентно существованию в течение одного кадра. Выражение для рабочего цикла частиц blobbyTrailParticles будет выглядеть следующим образцом: vector Sdlrection = unit (velocity);
Функция unit Функция unit возвращает нормализованный вектор, то есть вектор, который указывает в том же направлении, что и аргумент функции, но и имеет единичную дл ину. Если частица перемещается в направлении оси X со скоростью 10 единиц в секунду, ее скорость будет равна <10,0, 0>. Но если нужно узнать только направление перемещения частицы безотносительно ее скорости, используйте функцию unit В указанном случае она вернет значение <1, 0, 0>.
Функция mag В свою очередь, функция mag возвращает скорость частицы. Она требуется достаточно часто, так как в большинстве случаев перемещение частицы осуществляется относительно всех трех осей одновременно. Кроме того, эта функция позволяет определять расстояние или длину. Если частица А имеет координату <10, 5, ()>, а вы хотите знать, как далеко она находится от фиксатора с координатой <-20,42, 3>, достаточно написать: float ^distance = mag («-20.42.3» - «10.5.0»};
Функция mag всегда возвращает положительное число, так как расстояние между частицей А и фиксатором будет одним и тем же вне зависимости от того, вычитаете вы координату частицы из координаты фиксатора или наоборот. Скорость перемещения частицы вычисляется следующим образом: Теперь, когда вы знаете направление и скорость движения частицы, нужно определить длину хвоста и количество частиц, из которого он будет состоять. К объекту particle нужно добавить два новых атрибута: длину хвоста (tailLength) и его плотность (density). На данный момент присвойте первому атрибуту значение 1, а второму — 0,1.
430
Глава 14- Частицы и динамика
Затем добавьте команду emit в выражение для рабочего цикла частицы: string SemitCmd = "emit -object blobb/Trall Part ides ": Начните цикл for: for ($1 = 0:Si < Sspeed * density;++$i){
Число испускаемых частиц зависит от скорости их перемещения и желаемой плотности хвоста. Когда исходные частицы замедляют свое движение, уменьшается количество частиц, формирующих хвост. Когда частицы останавливаются (speed = 0), создание хвоста прекращается. Это простое соотношение между скоростью и плотностью гарантирует, что вне зависимости от скорости перемещения частицы хвост сохранит свою плотность.
Функция linstep Функция linstep также крайне важна при работе с математическими выражениями для частиц. Подобно функции unit она нормализует числовой диапазон, указывая в процентах величину пройденного пути между двумя точками. Например, координата 7,5 лежит на полпути между координатами 5 и 10. Это можно обнаружить с помощью функции linstep, написав: float Spercentage = Iinstep(5.l0.7.5): // Результат: 0.5 //
При формировании хвоста требуется, чтобы испускаемые дополнительные частицы отстояли от нее на некоторое расстояние. Поэтому нужно знать число испускаемых частиц и их местонахождение в этом диапазоне: х float Iweight = linstep (0.Sspeed * density.$i}; Теперь, зная вес частицы, ее можно переместить в направлении, заданном вектором скорости, на значение, которое указано как длина хвоста. Вес определяет величину перемещения каждой конкретной частицы: vector SnewPosltion = position «tallLength * Sweight * Sdirection.;*. tailLength * Sweigtt * Sdirection.y, tailLength * Sweight * Sdlrection.z»,
С помощью команды emit добавим новые положения: SemitCmd += (" -position " + $newPosition.x + " " + $newPosition.y + " " + InewPosltion.z):
В завершение используется цикл for и с помощью функции eval выполняется команда em it: } if (Sspeed * density > Oeval SemltCmd:
Как показано на рис. 14.29 и 14.30, частицы хвоста отстают от частиц, испускаемых генератором. Это связано с тем, что по умолчанию Maya вычисляет выражение перед пересчетом динамики. Поэтому в момент, когда выражение для эмиссии уже вычислено, на положение частицы еще не влияет однородное поле и прочие
431
Визуализация частиц
задействованные в сцене поля. То есть в основном используется положение частицы из предыдущего кадра. Чтобы исправить ситуацию, нужно установить для частиц флажок Expressions After Dynamics (Выражения после динамики) в разделе General Control Attributes (Общие управляющие атрибуты) диалогового окна Attribute Editor (Редактор атрибутов). ииияддйГС^^ W?
Ed* |'>
!>i( t";
*,-|U^* ijrinierv
Jb-tr^
1 ^w*':xi
i^ i. --^r^iriiii -.1i-'a^?
-fel[i
MiSsr-j'la« щ .i *;л RJ j +':*,>" * я v ® т a * t.si ?>. % s-1 e r--^ | и « s}«cf и-^=С'-'-&-'|2'-1смр^з11'|Ч1Пг| buhcvb i-^тнй1.с%; «tna№- Ь"'й-"К^ [гл^мпна: PojnlCBw^j »^'i>: } Р-Й
Ii A
-• i ш ,
•' .
- -
• V.s>-..v.> . .<•
... Ы1ЛГЁ5 luolAyC
ISi С s-fc
i: «Si
Рис. 14.29. Хвостовые частицы движутся позади сферических частиц, испускаемых генератором
Хвостовые частицы в данный момент представляют собой всего лишь трубки (без всякого заострения) для сферических частиц. Чтобы создать заостряющийся хвост, нужно добавить атрибуты opacityPP (Непрозрачность на одну частицу) и radiusPP (Радиус на одну частицу), которые представляют собой массивы с плавающей точкой. Кроме того, нужно добавить объекту blobbyTailParticle скалярные атрибуты с плавающей точкой Opacity (Непрозрачность) и Radius (Радиус). teimtCmd += (" -attribute radiusPP -floatValue " + CblobbyTailParticlesShape.radius * (1 - Jweight))): EemitCmd += (" -attribute opacityPP -floatValue " + (blobbyTailParticlesShape.opacity * (1 - Sweight)));
Требуется, чтобы частицы были большими в начале хвоста и уменьшались к его концу. За это отвечает параметр radiusPP (Радиус на одну частицу). Следовательно, нужно поменять веса частиц таким образом, чтобы первая частица с весом 0 получила значение 1 (1-0). Кроме того, по мере заострения хвоста частицы должны становиться более прозрачными. То есть частицам нужно добавить параметр opacityPP (Непрозрачность на одну частицу), меняющийся с расстоянием.
Глава 14 • Частицы и динамика
432
ввЩЩШШнмм»1 : •"
:' *i
••',.
->.т,.
. V.
-4V-.
• ИИШУ
'.'л .-d-г
L. ' ,
'.'
•
'•
-- . .
• ••'•' . -:._
j.f * 4--г ШЩ-Щ^Ё^*ЖШ§
Рис. 14.30. Теперь, после установки флажка Expression After Dynamics, хвостовые частицы выровнены с частицами, испускаемыми генератором
Рис. 14.31. Заостренные хвосты частиц
Визуализация частиц
433
Взглянув на рис. 14.31, вы поймете разницу между частицами с заостряющимся хвостом и частицами с хвостом без заострения. Для дополнительного контроля над видом заострения можно соединить градиент с параметром radiusPP (Радиус на одну частицу) и управлять видом градиента с помощью соответствующего атрибута для хвоста, который, в свою очередь, задается функцией emit. По умолчанию градиент, связанный с атрибутом вида «на одну частицу», управляется нормализованным возрастом этой частицы.
Узел ParticleSamplelnfo Так как частицам типа Blobby Surface (Сферические частицы) назначаются обычные материалы, нужно найти способ как-то связать значение непрозрачности на одну частицу со значением прозрачности материала. Узел particleSamplerlnfo позволяет управлять атрибутами материала на основе значений на одну частицу. Кроме того, он передает информацию о частице в узел визуализации. Для создания узла particleSamplerlnfo перейдите на вкладку Utilities (Служебный элементы) диалогового окна Create Render Node (Создать узел визуализации). В разделе Particle Utilities (Служебные элементы для частиц) щелкните на кнопке Particle Sampler (Образы частиц). Если просто перетащить этот узел на материал, он свяжет атрибут outColor (Цвет на выходе) с атрибутом Color (Цвет) материала. Соответственно, при перетаскивании узла particleSamplerlnfo на атрибут Transparency (Прозрачность) материала он свяжет с этим атрибутом значение Out Transparency (Прозрачность на выходе). Так как параметры Opacity (Непрозрачность) и Transparency (Прозрачность) имеют диаметрально противоположный смысл — то есть значение 1 для параметра Opacity (Непрозрачность) означает, что вы не в состоянии видеть сквозь объект, тогда как значение 1 для параметра Transparency (Прозрачность) означает, что объект полностью прозрачен, — Maya автоматически преобразует параметр opacityPP (Непрозрачность на одну частицу) в величину, которая воспринимается визуализатором как мера прозрачности (1 - opacityPP).
Рис. 14.32. Программно визуализированные хвосты частиц при отсутствии узла particleSamplerlnfo, контролирующего прозрачность
434
Глава 14- Частицы и динамика
На рис. 14.32 показаны хвосты частиц, программно визуализированных при отсутствии узла particleSamplerlnfo, контролирующего прозрачность. Соответственно, на рис. 14.33 показаны хвосты частиц после добавления этого узла.
Рис. 14.33. Программно визуализированные хвосты частиц при наличии узла particleSamplerlnfo, контролирующего прозрачность
Теперь за сферическими частицами следуют конические хвосты с переменной прозрачностью.
Кэширование Итак, все настройки для частиц сделаны, и пришло врем? визуализировать полученный результат. Но перед окончательной визуализацией имитации динамики нужно все кэшировать. В нашем случае в имитации динамики участвуют генераторы, поля и математические выражения. Каждый из этих типов входных данных имеет до некоторой степени случайных характер, учитывая случайный процесс генерации частиц и наличие атрибута lifespanRandom (Случайный период существования) у формы для частицы. Хотя существуют способы гарантировать, что при каждом следующем воспроизведении анимации будет использовано то же самое случайное число, намного проще сохранить имитацию на диске. На основе нашего опыта работы в Maya можно отметить, что практически невозможно получить корректную имитацию динамики при первой же попытке. И если вам потребуется повторно визуализировать определенные кадры при отсутствии информации с сцене в кэше, нет никакой гарантии, что частицы окажутся в нужном положении.
Множественные проходы Как уже отмечалось, при визуализации частиц всегда лучше использовать несколько проходов визуализатора, которые позднее можно объединить с помощью программы для монтажа. Эффект водяной струи строится из полос водяных частиц,
Визуализация частиц
435
которые двигаются в определенном направлении на высокой скорости. В некоторых областях многочисленные капли сливаются, образуя облака. Водяная пыль подхватывается потоком и увеличивается в объеме, но при этом некоторая часть брызг отделяется от основной струи и улетает прочь. Каждый из этих элементов имеет собственные визуализируемые свойства — непрозрачность, цвет, блики. Поэтому каждый из них может быть визуализирован по отдельности — один с помощью аппаратного буфера визуализации, другой программно, — а потом смонти рован для получения окончательной сцены.
Создание хвостов у капель воды Для изучения процесса создания хвостов у капель воды загрузите файл 14waterDropsStart.ma с прилагаемого к книге компакт-диска (рис. 14.34).
!Ш$
Рис. 14.34. Сцена из файла HwaterDropsStart.ma содержит пожарный гидрант, струя воды из которого направлена на автомобиль
Воспроизведите анимацию. Вы увидите, что частицы, настройкой которых вы занимались в предыдущем разделе, являются всего лишь одним из элементов итогового эффекта. Теперь настало время узнать, как заставить их взаимодействовать с автомобилем, сталкиваясь с ветровым стеклом и стекая по нему вниз. Вы используете столкновения частиц для их нацеливания на поверхность. Вместо того что-
436
Глава 14- Частицы и динамика
бы оставить генератор частиц внутри пожарного гидранта, вы перенесете его в конец сопла. В итоге единственным объектом, с которым будут сталкиваться частицы, останется ветровое стекло, а радиальное поле заставит их фонтанировать. Нам нужно заставить водяные частицы сталкиваться с ветровым стеклом и стекать по нему внизу, не теряя созданный ранее хвост. Этого можно добиться различными путями, каждый из которых имеет свои достоинства и недостатки. Можно просто заставить частицы сталкиваться с геометрическим объектом, предварительно присвоив параметру Resilience (Упругость) значение 0. В результате частицы будут не отскакивать от поверхности, а стекать по ней под действием гравитационного поля. Эта техника не сработает, если вы попытаетесь имитировать движение жидкостей. Ведь жидкость при перемещении по наклонной поверхности «прилипает» к ней, а не просто стекает вниз под действием силы тяжести. Вспомните, например, как капли воды висят на потолке в ванной после того, как вы приняли горячий душ. Несмотря на влияние силы тяжести, они пытаются удержаться на поверхности потолка. Если рассматривать наклонную плоскость, вода будет стекать по ней, скапливаясь в нижней точке и некоторое время не падая на землю. То есть простой механизм столкновений описывает поведение жидкостей некорректно. Другим недостатком данной техники является тот факт, что при ее использовании трение для сталкивающихся объектов однородно по всей поверхности. В реальности характер перемещения воды по поверхности определяется не только силой тяжести и наклоном, но и текстурой, пылинками, жирными пятнами и т. п. После вступления в контакт с любым из перечисленных элементов капля меняет скорость своего движения, его направление, останавливается на мгновение и т. д. Кроме того, вид скользящей капли определяется составом жидкости. Тяжелые жидкости, например ил, слабо подвержены влиянию вышеперечисленных факторов и обычно совершают линейные перемещения, в то время как водяные капли могут двигаться зигзагообразно.
Упражнение 14.2. Имитация скольжения капель по поверхности В этом упражнении вы узнаете, как, объединив механизмы столкновений, мишеней и математические выражения, заставить частицы скользить по поверхности. Вы познакомитесь с многочисленными приемами обхода различных ограничений, возникающих в Maya при столкновениях с более чем одной поверхностью, При работе с мишенями важно определить, когда их следует активизировать, а когда игнорировать, Если частицы летят в воздухе, мишени должны пребывать в неактивном состоянии и включаться только после столкновения частиц с поверхностью. После достижения частицами нижнего края поверхности мишени снова необходимо отключить, чтобы дать частицам возможность упасть вниз под действием силы тяжести. Для начала нужно определить точку столкновения. 1. Выделите частицы и ветровое стекло. Выберите в меню Particles (Частицы) команду Make Collide (Заставить сталкиваться). Теперь при воспроизведении анимации частицы будут отскакивать от ветрового стекла. Осталось сделать так, чтобы они прилипали к поверхности в точке столкновения.
437
Визуализация частиц
2. Снова выделите частицы и ветровое стекло. Щелкните на квадратике, расположенном справа от команды Goal (Мишень) в меню Particles (Частицы), Появится диалоговое окно Goal Options (Параметры мишени), показанное на рис. 14.35. Ш Goal Options
• .• Г"
Рис. 14.35. Задание изначального веса мишени для частиц в диалоговом окне Goal Options
3. Введите в поле Goal Weight (Вес мишени) значение 1 и щелкните на кнопке Create (Создать). При воспроизведении анимации частицы будут двигаться к управляющим точкам поверхности, как показано на рис. 14.36.
iiif
-
la •at,
(ir.vn
b V w •:.,!.-•:
<'-;№'.:
r't,.stj-^-.!
.|* ,t v. « ^.<- 4 ят ~
r
Рис. 14.36. После вылета из сопла пожарного гидранта частицы перемещаются к управляющим точкам ветрового стекла
438
Глава 14* Частицы и динамика
Такое поведение частиц связано с весом мишени, равным 1. Из-за этого частицы пытаются прилипнуть к каждой управляющей точке поверхности. Но вам нужно сделать так, чтобы мишени присутствовали только в месте столкновения частиц с поверхностью. 4. Откройте диалоговое окно Attribute Editor (Редактор атрибутов) для частиц. Щелкните на кнопке General (Общие) в разделе Add Dynamics Attributes (Добавить динамические атрибуты). 5. В появившемся диалоговом окне перейдите на вкладку Particle (Частица) и выделите строки collisionU (Столкновение по U), collisionV ('Столкновение по V), goalU (U-координата мишени), goalV (V-координата мишени) и traceDepthPP (Глубина следа на одну частицу), как показано на рис. 14.37. &!. Add Attribute;
BttribulBName betierlllu mi nation birth Position birthWo rid Position
incandescence incendescencePP lingWidth
Рис. 14.37. На вкладке Particle диалогового окна Add Attribute можно назначить частицам определенные атрибуты, которые программа использует для передачи и получения информации
Щелкните на кнопке QK, чтобы назначить частицам выбранные атрибуты. Так как в выражениях вы используете параметризацию поверхности по U- и V-координатам, лучше всего изменить параметризацию и перестроить эти поверхности с помощью инструмента Rebuild Surfaces (Перестройка поверхностей), вызываемом из меню Edit NURBS (Правка NURBS). Щелкните правой кнопкой мыши в поле атрибута goalPP (Мишень на одну частицу) в диалоговом окне Attribute Editor (Редактор атрибутоЕ!) и выберите в появившемся меню команду Creation Expression (Создание выражений). Введите следующие строки: // инициализация параметра goalPP со значением О
Зизуализация частиц
439
goal и = 0.1; goalV - 0.1; // инициализация параметра traceDepthPP со значением 1 traceDepthPP = 1; По сути вы указываете начальные значения добавленных атрибутов. 1РИМЕЧАНИЕ После назначения мишени частицам атрибут goaIPP (Мишень на одну частицу) появляется автама тически. При этом Maya устанавливает значение любой частицы, появившейся при значении параметра goaIPP (Мишень на одну частицу) равном 1, а не 0. Способа узнать заданные по умолчанию значения прочих внутренних атрибутов Maya не существует. Поэтому нужно вручную указывать, начальные значения для любого атрибута, который вы назначаете частицам. Это верно даже в случае, когда инициализируемое значение равно 0.
Теперь параметр goaIPP (Мишень на одну частицу) инициализирован значением 0, поэтому частицы не будут прилипать к мишени, В качестве мишени для частиц в Maya обычно фигурируют вершины в случае полигональной геометрии и управляющие точки в случае NURBS-поверхностей. Кроме того, в последнем случае существует возможность задать положение мишени на основе параметризации по U- и V-координатам. То есть частица прилипнет к месту с определенными U- и V-координатам и, ПРИМЕЧАНИЕ К сожалению, если параметры goalU (U-координата мишени) и goalV (V-координата мишени) имеют значение 0 или 1, скорость воспроизведения анимации значительно снижается. Именно поэтому для инициализации этих параметров было выбрано ненулевое значение.
Последним мы определили атрибут traceDepthPP (Глубина следа на частицу). Решатель динамики в Maya может обсчитывать множество столкновений в одном кадре. Например, если частицу уронить в очень узкую трубку, она способна сталкиваться с ее стенами несколько раз за кадр, отскакивая от одной стороны к другой. В разделе Collision Attributes (Атрибуты столкновения) диалогового окна Attribute Editor (Редактор атрибутов) для объекта particle находится поле Trace Depth (Глубина следа), По умолчанию в нем указано значение 10, означающее, что за один кадр Maya может обсчитать до 10 столкновений. Так как капли воды прилипают к поверхности, с которой они сталкиваются, а не отскакивают от нее, параметру traceDepthPP (Глубина следа на частицу) присваивается значение 1. ПРИМЕЧАНИЕ Параметры Collision и (Столкновения по U) и Collision V (Столкновения по V) инициализировать не надо, так как они предназначены только для чтения и задаются самой программой. При столкновении частиц с NURBS-поверхностью Maya возвращает U- и V-координаты места столкновения, которые используются для определения значений параметров goalU (U-координата мишени) ngoalV (V-координата мишени). В результате частицы прилипнут ктой точке поверхности, с которой они столкнулись.
440
Глава 14 • Частицы и динамике
8. Откройте диалоговое окно Expression Editor (Редактор выражений) для объекта particle и введите туда следующие строки: // проверка на наличие столкновений
// if (colllsionU != -1}{ goalPP - 1; goalU - collisionU: goalV = coVisionV:
}
9. Воспроизведите анимацию, и вы увидите, что частицы исчезают, долетев до ветрового стекла. Дело в том, что они принадлежат к типу визуализации Multistreaks (Множественные полосы), и длина их хвоста соответствует скорости частицы. В момент прилипания к поверхности они не двигаются, то есть имеют нулевую скорость. Поменяйте тип визуализации частиц на Points (Точки), и вы увидите, что частицы начнут прилипать к поверхности ветрового стекла, как показано на рис. 14.38.
frwij -:0»р|^1 V&1KW;-''№.|1., « «j j * V И | 3 ! i i'>-:*"«'*
Рис. 14.38. Частицы прилипают к поверхности ветрового стекла в месте столкновения
Визуализация частиц
441
Если частицы не сталкиваются с объектом, атрибуты collisionU (Столкновение no U) и collisionV (Столкновение по V) возвращают значение 1. При столкновении с NURBS-поверхностью возвращаются U- и V-координаты места столкновения. На рис. 14.39-14.41 показано значение параметра collisionU (Столкновение по U) частицы в разных фазах ее столкновения с ветровым стеклом.
Рис. 14.39. В кадре 15 частица еще не столкнулась с ветровым стеклом; значение параметра collisionU равно -1
Если частица прилипла к поверхности, с которой она столкнулась, результат может быть непредсказуемым. В теории параметр goalUV (U- и V-координаты мишени) помещает частицу непосредственно на поверхность, что всегда приводит к столкновению. После того как частица попадает в мишень, Maya возвращает значение параметра collisionU (Столкновение no U) равное -1, указывая, что нового столкновения не произошло. Это обусловлено тем, что поверхность, с которой происходят столкновения, и поверхность-мишень — не одно и то же. Эта разница становится более заметной, если частица скользит по поверхности. Частица фиксируется на поверхности с помощью параметров goalU (U-координата мишени) HgoalV (V-координата мишени). Параметризация по U- и V-координатам базируется на системе координат, которая отличается от стандартной системы с координатами X, Y и Z. С помощью U- и V-координат частица должна перемещаться не в пространстве, а по поверхности.
442
Глася Н- Чааицы и динамика
Рис. 14.40. В кадре 16 частица столкнулась с поверхностьюзначение параметра collisionu равно 0,271
Рис. 14.41. В кадре 17 частица прилипла к поверхности' значение параметра collisionu равно -1
Визуализация частиц
443
Для этого определим ориентацию поверхности, 10. Выделите ветровое стекло и выберите в меню команду Display > NURBS Components > Surface Origins (Отображение > Подобъекты NURBS > Начало координат поверхности). Результат действия этой команды показан на рис. 14.42.
' "fjer'
Рис. 14.42. Начало координат поверхности, формирующей ветровое стекло, показывает, что ось U расположена горизонтально, а ось V — вертикально
В итоге появится набор кривых, указывающих на начальную точку параметризации поверхности. Ось U выделена жирной красной линией и расположена горизонтально. То есть, чтобы заставить частицу двигаться по стеклу внизу, нужно перемешать ее в направлении оси V. 11. Добавьте следующие выражения для рабочего цикла частиц:
Теперь при воспроизведении анимации вы увидите, как частицы после соударения с поверхностью прилипают к ней и начинают сползать вниз. Если поменять тип визуализации частиц на Numeric (Числовой), вы увидите, что значение параметра collisionU (Столкновение по U), равное -1, иногда меняется, что 1 указывает на наличие столкновений . Увидеть изменение значения этого параметра можно при наличии монитора 22 дюйм' 1 и разрешения 3840 х 2400. — Примеч. перев.
444
Глава 14- Частицы и динамика
Заполнение Для обсчета столкновений с NURBS-поверхностъю снач.ала нужно преобразовать эту поверхность в сетку полигонов, что выполняется с помощью узла geoConnector. Для заполнения используется очень простой счетный алгоритм. Атрибут tesselationFactor (Коэффициент заполнения) узла geoConnector определяет число треугольников, которые требуются для заполнения NURBS -поверхности. Заданного по умолчанию значения 200 вполне достаточно для адекватного воспроизведения сферической поверхности, не говоря уже о поверхности ветрового стекла, которая имеет меньшую кривизну. Хотя заполнение в случае столкновений может не соответствовать форме NURBS-поверхности, положения мишеней, определяемые параметрами goalU (U-координата мишени) и goalV (V-координата мишени), точны на 100 %. При этом полученная в результате заполнения геометрия не фигурирует в качестве мишени. Именно поэтому иногда Maya определяет столкновения как перемещение частицы вдоль NURBS-поверхности, для чего вовсе не обязателен контакт с заполняемой поверхностью. Присвойте атрибуту tessellation Factor (Коэффициент заполнения) узла geoConnector значение 10 000, и при воспроизведении анимации вы увидите, что число столкновений увеличилось. Во время создания частицы атрибуту traceDepthPP (Глубина следа на частицу) было присвоено начальное значение 1. После столкновения с поверхностью новые вычисления столкновений не требуются, поэтому данному атрибуту можно присвоить значение 0. Вы заметите некоторое повышение производительности за счет уменьшения объема вычислений. Кроме того, первая часть выражения гарантированно будет вычисляться только один раз. Добавьте после первой инструкции if в выражении для рабочего цикла частицы следующие строки;
if (collisionU != -1){ goalPP = 1; goalU = collisionU: goalV = collisionV; traceDepthPP = 0; i
Функция Noise Теперь, когда частица после столкновения с поверхностью сползает по ней вниз, нужно придать ее движению хаотичность. Для начала сделаем его зигзагообразным. Этого можно добиться несколькими способами, простейшим из которых является применение функции noise. Эта функция возвращает значение между -1 и 1 с помощью генератора поля Perlin noise (Перлинов шум). В документации Maya практически не объясняется, как работает функция noise, но, говор.ч i к-п рофессиональным языком, ее результат можно представить в виде кривой зашумленпя, определенной в интервале от 0 до бесконечности. Входное значение однол<тчни указывает на определенное место этой
Визуализация частиц
445
кривой. В отличие от функции rand функция noise дает повторяющийся результат при повторяющихся входных данных. Соответственно, гарантирована повторяемость результата при выполнении команды: noise (10); // Результат: -0.465903 //
Так как результат функции noise может быть представлен в виде кривой, ее выходные данные при входных значениях 10,01, 10,02 и 10,03 дадут гладкую интерполяцию: nolse(lO.Ol) = -0,474992; rioiseaG.O?) = -0.483307; no1se(10,Q3) =-0..
С другой стороны, определив входные значения функции 10,11 и 12, вы получите гораздо более хаотичный набор возвращаемых значений: nolse(lO) = -0.465903; n o l s e ( l l ) = 0,376804; noised?) = -0,420169.
Чтобы заставить частицу двигаться вдоль поверхности зигзагом, нужно отрегулировать параметр goalU (U-координата мишени), который меняется поперек ветрового стекла. В данный момент параметр attributeName для частицы должен иметь значение collisionU (Столкновение по U). Выберите вариант goalV (V-координата мишени). Добавьте следующее выражение для рабочего цикла частицы: goalU += noise(frame) * .01;
Начав воспроизведение анимации, вы увидите, что частицы совершают зигзагообразные движения в процессе скольжения вниз по поверхности. Это движение является слишком хаотичным, так как параметр, который вы берете за основу, меняется чересчур быстро. Значение аргумента frame увеличивается на 1 при переходе к следующему кадру. Чтобы сделать перемещение более равномерным, уменьшите эту величину. Для этого достаточно поделить параметр frame на 10, 100 или любое другое число, позволяющее получить желаемый результат. goalU += nchse(frame/10) * .01:
Чем больше выбранный вами делитель, тем менее хаотичным и зигзагообразным будет перемещение. Значение, возвращаемое функцией noise, затем умножается на 0,01. Этот множитель задает амплитуду зашумления. Таким способом диапазон возвращаемых функцией noise значений будет уменьшен от -0,01 до 0,01. Так как атрибут goalU (U-координата мишени) увеличивается в каждом следующем кадре на результат функции noise, важно помнить, что изменение на 0,01 в любом направлении приводит к сдвигу на 1 % вдоль поверхности. Диапазон значений при параметризация! по U- и V-координатам составляет от 0 до 1. Можно добавить сходную функцию зашумления к атрибуту goalV (V-координата мишени) частиц, но при этом значение данного параметра никогда не должно
446
Глава 14 • Частицы и динамике
увеличиваться. Ведь это привело бы к перемещениям капель вверх и вниз по стеклу, чего в реальности никогда не происходит: goalV -- abs (nolseCframe / 10 ) * .01):
При воспроизведении анимации вы заметите, что частицы то замедляют свое движение, то снова ускоряются. Однако будет заметно и то, что зигзагообразное движение всех частиц совершается одновременно и с одинаковой амплитудой. Ведь функция noise возвращает одно и то же значение при одинаковых входных данных. А в нашем выражении все частицы используют в качестве аргумента данной функции номер текущего кадра. Чтобы исправить данный недостаток, нужно определить для каждой частицы уникальное значение аргумента функции noise. Это можно сделать с помощью идентификационного номера частицы. Чтобы гарантировать максимальную хаотичность, умножим идентификатор частицы, например, на 1,005. Если вы хотите еще больше разнообразить хаотичность перемещений, умножьте значения параметров goalU (U-координата мишени) и goctIV (V-координата мишени) на различные числа: goalV -- abs (noisefframe / 10 + partideld * 2005) * .01); goalU +* noise(frame / 10 + particleld * 1005) * .01;
Теперь при воспроизведении анимации капли воды будут двигаться более хаотично, иногда уменьшая скорость скольжения вниз, а иногда — скорость перемещения из стороны в сторону. Как уже упоминалось в начале этого раздела, присвоение параметру goalU (U-координата мишени) или goalV (V-координата мишени) значений меньших или равных 0 или же больших или равных 1 приводит к резкому падению производительности. Так как изменение этих параметров происходит случайным образом, нужно ввести искусственное ограничение на их величину. Добавьте к выражениям для рабочего цикла частицы следующие строки: if (goalU >= 1 | goalU <* 0)goalU •= clamp (.001.,999.goalU): if (goalV >= 1 | | goalV <= 0)goalV = clamp (.001..999.goalV):
Вы должны заметить значительное повышение производительности при приближении частиц к границам поверхности. Когда капля воды приближается к нижней части поверхности, она прилипает к ней вместо того, чтобы упасть вниз под действием силы тяжести. Объем воды внизу постепенно увеличивается, так как туда стекают все новые и новые капли, пока вся система не становится слишком тяжелой и падает вниз. Проще всего заставить капли оторваться от поверхности путем присвоения параметру goalPP (Мишень на одну частицу) значения 0, когда значение параметра goalU (U-координата мишени) достигает 0,999. Как вы помните, значения параметров goalU (U-координата мишени) и goalV (V-координата мишени) находятся в диапазоне от 0 до 0,999, чтобы избежать проблем с производительностью. Следующее простое выражение заставит частицы отрываться от нижнего края поверхности, как только они ее достигнут: if CgoalU — .999)goalPP = 0;
Визуализация частиц
447
При воспроизведении анимации вы увидите, что капли падают вниз мгновенно. То есть отсутствует иллюзия наличия у них массы. Поэтому вместо простого присвоения параметру goaIPP (Мишень на одну частицу) значения 0 имеет смысл имитировать падение капель путем уменьшения величины этого параметра на случайное число в каждом кадре после достижения крал поверхности. Это гарантирует разницу во времени падения различных капель: if CgoalU == ,999)goalPP -= rand (.01..1):
Теперь при воспроизведении анимации капли будут зависать внизу поверхности, а потом медленно падать на землю. Меняя входные значения функции rand, этот процесс можно ускорить или замедлить. Для ветрового стекла автомобиля этот эффект не имеет особого смысла, но он может пригодиться вам в других областях.
След от воды Когда капля воды скатывается по поверхности, за ней остается след. В зависимости от качества поверхности этот след может остаться на ней, впитаться внутрь или же тянуться за каплей. В проекте «Место для парковки» вода разбрызгивается на ветровое стекло, представляющее собой достаточно гладкую поверхность. В подобных случаях обычно просто образуются капли. Но для создания более интересного эффекта мы решили оставить водяные следы. Упражнение 14.3. Генерация водяных следов Для формирования следов от воды мы будем испускать новые частицы из уже имеющихся в сцене частиц. 1. Выделите объект waters pray Particles. 2. Выберите в меню Particles (Частицы) команду Emit from Object (Испускать из объекта). 3. В раскрывающемся списке Emitter Type (Тип источника) выберите вариант Directional (Направленный). 4. В поля Direction X/Y/Z (Направление по X/Y/Z) введите значение 0. Это приведет к созданию генератора частиц, присоединенного к каждой частице объекта drop Particle. Пока что при воспроизведении анимации эффект выглядит скорее как фейерверк (рис. 14.43). Нужно сделать так, чтобы траектория этих вторичных частиц соответствовала следам исходных частиц, скользящих вниз по поверхности. Начиная с версии 3.0, в Maya появилась команда Per-Point Emission Rates (Интенсивность генерации на одну точку), которая позволяет контролировать скорость генерации частиц, приходящуюся на одну частицу. 5. Выделите только что созданный генератор частиц. Он является дочерним по отношению к узлу waters pray Particles. 6. Присвойте ему имя trailEmitter, 7. Выберите в меню Particles (Частицы) команду Per-Point Emission Rates (Интенсивность генерации на одну точку).
448
Глава 14 • Частицы и динамика
^»l ii • |И1И|»|>||ааидя;|^нмцмЦЦ|||ВЩИдццаа1дд
^Щй^™*?'й;йя5Ш *'*'"' ""
''-г*- лЛЬ' i-
• "' - ;j I ft *;!*>. Ч_ s. 'с- , t . , .,-f ,:-' ., ., ,f
Рис. 14.43. Узел waterSprayParticles испускает следы частиц
'с
Визуализация частиц
449
В разделе Per Particle (Array) Attributes (Атрибуты на одну частицу (массив)) диалогового окна Attribute Editor (Редактор атрибутов) для узла waterSprayParticles вы увидите появление нового атрибута trail Emitter RatePP. Если открыть диалоговое окно Hypergraph (Просмотр структуры) для источника частиц, вы увидите появление связи между узлами waterSprayParticlesShap«. trailEmitterRatePP и trail Em itter.ratePP, как показано на рис. 14.44, Генерация следа должна происходить, начиная с момента столкновения частицы с ветровым стеклом и заканчивая моментом достижения нижнего края. Для начала нужно инициализировать параметр trailEmitterRatePP в выражении для создания частицы. 8. Выберите команду Creation Expression (Создание выражений) для объекта waterSpray Particles и в открывшемся окне введите следующую строку: trailEmitterRatePP - 0: 9. Выберите команду Runtime Expression (Выражения для рабочего цикла) и в открывшемся окне введите код: // Проверка на наличие столкновений
// if (collisionU != -1){ goalPP = 1; goalU = collisionU: goalV = collisionV; traceDepthPP = 0; trailEmitterRatePP = 100;
1
10. Добавьте следующие инструкции к последней инструкции if: if (goalU == .999){ goalPP -= rand (.01..1); trailEmitterRatePP - 0: }
11. Сделайте скорость узла trailEmitter равной 0. Если вы заметите слишком много интервалов в следах, параметр trailEmitterRatePP можно увеличить. 12. При воспроизведении анимации вы увидите, что позади капель воды остаются следы, как показано на рис. 14.45. 13. Длинные гладкие дугообразные следы можно отрегулировать путем изменения некоторых входных значений функции noise. А чтобы не редактировать выражение каждый раз, когда вам потребуется повлиять на движение капель при падении, можно добавить элементы управления к узлу waterSetup, который мы создали для контроля потока из сопла пожарного гидранта. 14. Переименуйте объект particlel в trail Particles. 15. Снимите флажок Inherits Transforms (Наследование преобразований) в разделе Transform Attributes (Атрибуты преобразований) диалогового окна Attribute Editor
Глава 14 • Частицы и динамика
450
(Редактор атрибутов) для узла trailParticles и сделайте этот узел дочерним по отношению к узлу waterSetup.
'
• **г* *: ? •> w «™^v.i '-' • " - i '"•••
h
Рис. 14.45. Пока что вторичные частицы больше напоминают следы от коньков на льду, чем следы от капель на ветровом стекле 16. Добавьте к узлу waterSetup скалярные атрибуты с плавающей точкой hFrequency (Частота по горизонтали), hAmplitude (Амплитуда по горизонтали), vFrequency (Частота по вертикали), vAmplitude (Амплитуда по верикали). В выражениях для рабочего цикла частиц waterSprayParticles некоторые константы нужно поменять на переменные, управляемые этими атрибутами. 17. Выберите команду Runtime Expression (Выражения для рабочего цикла) для узла dropParticles и внесите следующие изменения: Вместо goalV — abs (noise(frame / 50 + particleld * 2005) * .03); Введите: goalV -= abs (noiseCframe * waterSetup.vFrequency + particleld * 2005) * waterSetup.vAnpHtude):
451
Визуализация частиц Вместо goalU +- nolsefframe
10 + p a r t i c l e l d * 1005) * .01;
Введите: goalU +- noise(frame * waterSetup. hFrequency •+ particleld * 1005) * waterSetup.hAmplitude; Теперь вы можете управлять движением капель путем выделения узла waterDropSetup и редактирования параметров в диалоговом окне Channel Box (Окно каналов), как показано на рис. 14.46 (hFrequency - 0,03, hAmplitude - 0,01, vFrequency - 0,01, vAmplitude - 0,01), рис. 14.47 (hFrequency - 1,0, hAmplitude - 0,01, vFrequency = 0,01, vAmplitude = 0,01) и рис. 14.48 (hFrequency = 0,5, hAmplitude - 0,005, vFrequency = 0,01, vAmplitude - 0,04).
* #'*ir * + ?
"•••№tf|
Рис. 14.46. Так как частота по горизонтали мала, капли меняют направление движения по горизонтали редко, что приводит к появлению длинных дуг Как видите, изменяя значения четырех переменных, можно получить разные варианты движения капель. Кроме того, добавление элемента управления интенсивностью генерации частиц позволит при необходимости легко изменить плотность водяных следов.
452
Глава 14 • Частицы и динамике
^™ДМ^^^'|И11Ии'1||1^ЩЯ1ЖИЗШЩ;ШШё-:
~""j W":»jl & s^tf *'> "if* IK *>'? a'ii^k^i.^""^ ^'i'|,'
fc
-^i^j^y^'fe^i
Рис, 14.47. Высокая частота по горизонтали приводит к появлению волнистых дуг
[ЩШЖШЩШЦ <*-;*>.* f * -.j; 'fB*™''' 'ainwSfV^btr*™™», n,.,,,.s,Sr,.^i
Рис. 14.48. Умеренная частота и малая амплитуда по горизонтали вкупе с умеренной амплитудой по вертикали приводят к тому, что капля часто меняет направление своего движения по горизонтали, но смещается на очень маленькое рассгояние в любом направлении, что создает хаотичный, но достаточно прямой след на ветровом стекле
Визуализация частиц
453
18. Чтобы заставить следы «тянуться» за каплями, выберите в раскрывающемся списке Lifespan Mode (Режим периода существования) для частиц trailParticles вариант Random Range (Случайный диапазон). В поле Lifespan Random (Случайный период существования) введите значение 0,5, а в поле Lifespan (Период существования) — значение 1. В рассматриваемом случае единственным объектом, по которому будут стекать капли, является объект-мишень, представленный ветровым стеклом. Если требуется применить тот же самый эффект к любой поверхности, с которой столкнутся капли, не обойтись без объекта particle для всех этих поверхностей. Это связано с тем, что, несмотря на возможность того, что в сцене будут несколько объектов-мишеней, атрибут goaIPP (Мишень на одну частицу) всего один. То есть вы просто не сможете сделать мишенями для частиц несколько поверхностей и контролировать процесс прилипания к ним отдельных частиц. Именно для обхода этих ограничений и требуется объект particle, который сделает каждую поверхность мишенью. Затем останется назначить частицаг^ waterSpray событие столкновения, которое будет запускать процедуру, подобную приведенной ниже: global proc waterCollisionCstring Sparticle. int $id, string $surface){ // Обратите внимание на наличие пробела " " перед именем поверхности // Это связано с тем. что Maya возвращает имена поверхностей // с ведущим пробелом if (Ssurface == " w1ndShleld"}{ // Здесь мы получаем значения параметров collisionU ncollisionV // для частицы // обратите внимание, что переменные объявлены как массивы, так как // команда particle кожет вернуть значения для набора частиц float $и[] - 'particle -attribute collisionU -id Sid Sparticle -q': float $v[] = 'particle -attribute colllslonV -Id Sid Sparticle -q'; // так как функция emit используется для генерации частим из уже // существующих частиц, нужно указывать положение генератора float $pos[] = 'particle -attribute position -id $id (particle -q'; / / данная инструкция if срабатывает, если имя поверхности, с которой // происходят столкновения. - windshield // следовательно, частицы должны испускаться в сторону объекта // wlndshieldParticles, который привязан кобъекту windshield // атрибуты goalU ngoalV испущенных частиц инициализированы со // значениями параметров collisionU ncollisionV для частицы, / / только что столкнувшейся emit -object windShieldPartlcles -pos $pos[0] Ipos[l] $pos[2] -attribute goalU -fv $u[0] -attribute goalV -fv $v[0]:
Визуализация капель Визуализация капель воды должна быть проведена программно. При этом в качестве типа визуализации частиц нужно указать вариант Blobby Surface (Сферические
454
Главе! 14* Частицы и динамика
частицы), а также включить эффект трассирования. Такие атрибуты, как радиус сферических частиц и пороговое значение, связаны с числом частиц в каплях и степенью их перекрывания с соседями. Не существует магического значения, ввод которого обеспечивал бы гладкий бесшовный результат. Однако имеет смысл устанавливать достаточно высокий порог, чтобы частицы гарантированно перекрывались друг с другом. Существует эмпирическое правило: чем более гладкую поверхность вы хотите получить, тем выше должны быть радиус и порог. Если значение порога больше 1, вам потребуется, по меньшей мере, две частицы для получения результирующей поверхности путем перекрывания друг с другом.
Монтаж При движении воды по поверхности на поверхности остаются следы. Следы могут выглядеть как капли или как изменение цвета поверхности, указывающее, что она мокрая. Получить подобные элементы при программной визуализации, а затем согласовать их с каплями воды, которые движутся по поверхности, крайне сложно. Благодаря визуализации дополнительных элементов при имитации динамики (неисчезающие следы от частиц, иной тип визуализации частиц и т. п.) вы получаете возможность более гибкой настройки на стадии монтажа, поскольку в специальной программе каждый из этих эффектов можно дополнительно затенить, добавить небольшой рельеф, сместить или исказить.
Заключение Приемы, описанные в этой главе, как и любые другие, имеют достоинства и недостатки. Для большего реализма при написании математических выражений и настройке нужно учитывать массу деталей. Большие капли воды должны двигаться быстрее мелких, их движение должно быть менее зигзагообразным, оставляемые за ними следы должны быть более отчетливыми и т, п. Введя в выражение создания частиц, имитирующих водяные капли, случайное значение, вы сможете затем использовать всю массу частиц, чтобы определить параметр radiusPP (Радиус на одну частицу) для сферических частиц или менять параметры goalU (U-координата мишени) и goalV (V-координата мишени) в каждом кадре. Чем больше переменных связаны друг с другом, тем больше шанс, что ваша имитация динамики будет выглядеть натурально и органично. Процесс имитации струи, бьющей из пожарного гидранта, состоит из нескольких стадий. В этой главе вы узнали, как путем аппаратной визуализации получить массу воды, и заставили воду взаимодействовать с объектом сцены, воспользовавшись программно визуализируемыми частицами типа Blobby Surface (Сферические частицы) и различными выражениями. Также вы исследовали инструмент Hardware Render Buffer (Аппаратный буфер визуализации) и познакомились с некоторыми его ограничениями.
Ч А С Т Ь IV Анимация Глава 15. Общие аспекты анимации персонажей Глава 16. Подготовка персонажей к анимации Глава 17. Сборка персонажей Глава 18. Назначение материалов Глава 19. Освещение Глава 20. Визуализация
15
Общие аспекты анимации персонажей Искусство анимации персонажей подобно попыткам поймать молнию в бутылку... по одному вольту за раз. Брэд Берд (Brad Bird)
Если анимация сама по себе является тем симбиозом искусства и ремесла, который заставляет объекты двигаться, то анимация персонажей п редставляет собой особый мир, внутри которого объекты должны не только двигаться, но и выглядеть, как живые. Именно оживление персонажей составляет смысл слова «анимация». В переводе с латыни апгта означает душа. Следовательно, все, имеющее душу, является живым. И при анимации персонажей необходимо создать иллюзию жизни. Технически этот процесс представляет собой изучение движений, которые способны убедить наблюдателя в наличии у персонажа эмоций и мыслей. Воссоздавая эти движения, можно анимировать персонаж нужным образом. То есть процесс анимации персонажа начинается с предварительного рисунка (рис. 15.1), продолжается изучением реального движения (рис. 15.2) и заканчивается реализацией выбранного движения в Maya (рис. 15.3).
Рис. 15.1. Предварительным рисунок движения
Рис. 15.2. Изучение реального движения
Анимация в Maya
457
Рис. 15,3. Реализация выбранного движения в Maya
При условии успешного выполнения всего вышеперечисленного персонаж будет выглядеть убедительно и получит индивидуальность, по которой его смогут узнавать зрители. Если зритель испытывает к персонажу любовь или ненависть, значит, работа аниматора удалась. Если же зрителю все равно или он путает персонажи друге другом, значит, усилия не увенчались успехом. В конечном счете, мерой успеха любой анимации является реакция аудитории. Это касается и нашего проекта «Место для парковки». В этой главе мы особо коснемся следующих тем: О О О О О О О
как выявить характер персонажа; как подчеркнуть особенности поведения персонажа; ссылки, действия и планирование; устойчивость персонажа к деформациям и анимация; принципы анимации; применение принципов анимации в Maya; оценка производительности.
Анимация в Maya Компьютерная анимация покорила мир развлечений. Многие фильмы, например Ice Age (Ледниковый период) и Stuart Little (Стюарт Литтл), обязаны своей популярностью как развитию компьютерной графики, так и традиционным принци-
458
Глава 15 • Общие аспекты анимации персонажей
пам анимации. Задачей сегодняшних аниматоров является изучение существующих традиций и объединение их с быстро меняющимся миром компьютерной графики. Анимация персонажей существовала и до появления компьютеров, но осуществлялась другими способами. Например, понятие трехмерной анимации (3D animation) изначально относилось к кукольной анимации и покадрового фотографирования. Как-никак анимированные таким способом объекты имели три измерения. Вспомним хотя бы Ладисласа Стэрвича (Ladislas Starewich). Стэрвич (1882-1959) в 1910 году изобрел кукольную анимацию, создаваемую путем покадрового фотографирования. Его ранние фильмы, в которых использовались анимированные части жуков, предвосхитили идею кукольной анимации. Именно в 1910 году вышел первый фильм Стэрвича про жуков-оленей (Lucanus cervus). К сожалению, интерес зрителей к данному виду анимации непостоянен, и популярность подобных фильмов то возрастает, то снова падает. Традиционная, или рисованная, анимация была доведена до совершенства Диснеем (Disney) в 20-х и 30-х годах XX века. Информация об этом периоде систематизирована в книге Франка Томаса (Frank Thomas) и Олле Джонсона (Ollie Johnson) Disney Animation, The Illusion of Life (Диснеевская анимация. Иллюзия жизни), выпущенной издательством Abberville Press в 1987 году. Целая глава этой книги посвящена определению классических принципов анимации. Пионеры современной компьютерной анимации в Pixar Animation Studio — и практически в любой другой студии — относят изучение традиционной анимации к новой форме искусства. Другими словами, применяются как принципы, разработанные до появления компьютеров, так и более новые уникальные принципы, присущие исключительно компьютерной графике. При создании Maya использовался подход объектно-ориентированного программирования, позволяющий задавать ключи анимации для любого атрибута. Объекты могут рассматриваться как узлы, включающие в себя набор атрибутов, которые несут информацию о цвете объекта, его размере, положении в пространстве и т. п. Скорее всего, вы уже знаете, что любой изменяемый атрибут допускает создание ключей анимации. То есть, заставляя параметры меняться во времени, вы и создаете анимацию. Однако в этой главе мы поговорим о более глубоком уровне анимации — об анимации персонажей, которая не просто заставляет объект двигаться, но и призвана сделать это движение достоверным и создать иллюзию жизни. Анимация персонажей представляет собой антропоморфизм в действии. В этой главе для краткости она будет называться просто анимацией. В Maya традиции анимации продолжаются путем разработки инструментов и приемов, помогающим аниматорам в работе. Так как это приложение является открытой системой, инструменты и программы можно создавать непосредственно в Maya с помощью встроенного языка MEL Такие компании, как Pixar, не только применяют имеющийся инструментарий, но и создают свои инструменты. Кроме того, Maya предоставляет аниматорам и техническим руководителям возможность настраивать существующие инструменты < под себя». Хотя для этого требуется знать язык MEL, он достаточно прост для изучения. Аниматоры со знанием MEL высоко ценятся в данной индустрии. Ведь среда Maya не просто использует этот язык, она целиком реализована из его команд. И хотя подобную воз-
Анимация в Maya
459
можность предоставляют и другие программы для работы с компьютерной графикой, ни одна из них не стала настолько популярной, как Maya. Инструментарий Maya, как базовый, так и пользовательский, помогает аниматорам продолжать существующие традиции. И, несмотря на значительную популярность компьютерной анимации в наши дни, она, скорее всего, в будущем объединится с рисованной и кукольной анимацией, что позволит создавать визуально богатые полнометражные фильмы. Обо всем этом вы можете прочитать в интервью со Скотом Кларком (Scott Clark), который днем работает аниматором, а по вечерам преподает анимацию в Колледже искусств в Сан-Франциско (San Fancisco's Academy of Art College),
Интервью со Скотом Кларком О Какое образование вы получили? Я изучал рисование, живопись, дизайн и анимацию в школе дизайна в Род-Айленд (Rhode Island School of Design) и получил степень бакалавра изобразительных искусств в области иллюстрирования в 1996 году. За последние два года обучения я принимал участие в двух интернатурах в фирмах Chuck Jones Film Productions и Pixar Animation Studios, Мне повезло встретить Чака Джонса (Chuck Jones) и поговорить с ним об анимации. Во время моего пребывания в фирме Pixar вышел мультфильм Toy Story (История игрушек), принесший этой компании известность. Изначально я собирался стать мультипликатором, например, у Диснея, но опыт работы в Pixar показал, что мне больше нравится заниматься компьютерной анимацией, О Чем вы сейчас занимаетесь в фирме Pixar? На данный момент я являюсь ведущим аниматором нового проекта Джона Лассетера (John Lassetes) под названием Cars (Автомобили). Фирма Pixar готовит к выпуску два других фильма — Finding Nemo (В поисках Немо) и The Incredibles (Невероятные), поэтому я много занимаюсь тестированием и подготовкой производства для фильма Cars. Я начал работу в Pixar в 1996 году, занимаясь подготовкой компакт-диска с мультфильмом Toy Story. Также я много работал над анимацией Хэймлича (Heimlich) и цирковых персонажей в фильме A Bug's Life (Жизнь жуков). Кроме того, я анимировал большинство главных персонажей в фильме Geri's Game (Игра Джерри), получившем «Оскара», и в фильме Toy Story 2. Признание мне принесли два рекламных ролика на тему Toy Story для сети Макдоналдс и короткий фильм для церемонии вручения «Оскара» в 2000 году. При создании фильма Monsters Inc. (Корпорация монстров) я уже исполнял роль ведущего аниматора. О Как вы определяете анимацию ? Анимация буквально означает оживление. Смотрите ли вы на персонаж из мультфильма Текса Эйвери (Tax Avery), который распадается на куски, или на динозавра, жующего какого-то неудачливого героя фильма про монстров, иы должны верить в то, что персонажи живые. Самая лучшая анимация позволяет зрителю узнать в героях фильма себя.
460
Глава 15 • Общие аспекты анимации персонажей
Другими словами, нам нравится смотреть на анимирозанных персонажей, так как мы узнаем в них человеческие черты. В наши дни любом сможет запустить программу для компьютерной анимации и создать двигающиеся объекты, но только талантливый аниматор заставит вас поверить, что персонаж обладает мыслями, чувствами, эмоциями, прошлым и будущим, жизнью вне экрана. О Как происходит создание анимации? Это всеобъемлющий вопрос, но возникает он довольно часто. Работа в области анимации, подобно любому другому искусству, которое требует долгого изучения и опыта, напоминает работу актера или художника. Научиться анимировать можно, просто прочитав книгу о принципах анимации или освоив компьютерную программу. Но остаются еще вопросы производительности, распределения времени, ваших действий, а также законы физики и сценарий. Если все сделать правильно, зрители забудут, что смотрят на рисунки, модели или результат визуализации, и поверят в рассказываемую им историю персонажа. Нужно добиться того, чтобы зритель четко распознавал персонажа и переживал за его приключения. Если аниматор выполнит свои функции правильно, его участие станет незаметным. Публика не должна думать о том, что на экране только иллюзия жизни, к которой приложил руку аниматор. Она должна просто поверить в реальность происходящего. Моя работа в области анимации строится на знаниях и мудрости как традиционных, так и современных аниматоров. Источником вдохновения для меня служат аниматоры прошлого, такие как Чак Джонс (Chuck Jones), Франк Томас (Frank Thomas), Оле Джонсон (ОШе Johnson) и Кен Харрис (Кел Harris). Здесь же нужно упомянуть современных аниматоров, таких как Глен Кип (Glen Keane) и Ричард Вильяме (Richard Williams). Меня постоянно вдохновляют работы других аниматоров, а иногда и выдающаяся игра актеров традиционного кино. Я думаю, что для любого аниматора непременным условием должно быть наличие наблюдательных способностей ученого и артиста. Вместо того чтобы сидеть за столом и делать первые, по большей части сугубо предварительные наброски, я предпочитаю искать образы во внешнем мире. Я планирую вид моих фрагментов тем же способом, что и традиционные аниматоры, — создаю эскизы в поиске наиболее забавных поз, которые подчеркнут фабулу сюжета. Я разыгрываю сцены из фрагментов перед зеркалом, чтобы увидеть движения, которые будет совершать персонаж, и прочувствовать эмоции, под влиянием которых совершаются его перемещения. Я работаю с видеоматериалами в поисках индивидуальных особенностей различных действий. Обычно процесс анимации начинается с простого разбиения движений на позы, а действием анимация наполняется по мере необходимости. Временные интервалы действия разбиваются на слои и перерабатываются, и только затем приходит время вторичных движений. О Чему вы учите студентов в академии искусств? Обучение начинается с анимации трех прыгающих мячей: для баскетбола, для игры в кегли и для пляжного волейбола. Я заставляю студентов поиграть в каждую из этих игр в реальности, чтобы получить четкое представление о физических свойствах всех мячей. Примерно половина заданий связана с физикой
Анимация в Maya
461
(анимировать персонажа, подпрыгивающего над мячом, создать реалистичный цикл ходьбы). Остальная часть заданий относится к действиям — нужно попытаться получить на экране забавного и достоверного персонажа, комического или трагического. Задания достаточно просты, а диапазон фрагментов ограничен. Любой, кто сможет имитировать наличие мыслей и эмоций у персонажа, справится с более простой работой, например с созданием летающего логотипа или космического корабля. А вот обратное неверно. О Какие недостатки и достоинства имеет компьютерная анимация? Компьютерная анимация — это изумительное средство. Многие люди, в том числе и администраторы основных голливудских студий, ошибочно считают, что компьютерная анимация лучше традиционной анимации, просто из-за ее новизны. Они не понимают, что важнее всего сценарий, а не средство, которым он воплощается в жизнь. Можно собрать для фильма изумительных актеров, но если заставить их произносить топорные диалоги и играть по жуткому сценарию, публику вряд ли заинтересует актерский состав. Анимация — это сердце фильма и действие, двигающее сценарий. Сам же сценарий можно сравнить со скелетом. Компьютерная анимация замечательна своей утонченностью. Можно воспроизвести даже мельчайшие детали, например небольшие движения глаз, которых не добиться традиционными методами. Доведенная до совершенства анимация выглядит весьма реалистично. Она объединяет гибкость слоев и временных интервалов, присущую рисованной анимации, и многомерность покадровой съемки. В компьютерной анимации намного проще выбрать модель (рис. 15.4). Кроме того, вы не ограничены линейным временем или силой тяжести, из-за которой на вашего героя может упасть кусок арматуры.
Рис. 15.4. Это пример наброска модели. Обратите внимание на поведение Кляксы и на то, что она остается Кляксой вне зависимости от положения
462
Глава 15 • Общие аспекты анимации персонажей
ПРИМЕЧАНИЕ В традиционной анимации достаточно сложно нарисовать персонаж в различных позах. Под действием различных сил персонажи могут сплющиваться или растягиваться, но при этом их объем не должен меняться. Это означает, что даже при помещении персонажа и экстремальные условия окончательный рисунок должен выглядеть так же, как набросок.
Однако компьютерная анимация имеет те же самые ограничения, что и любой из традиционных методов анимации. Она значительно зависит от способностей аниматора. Кроме того, применяются те же самые правила, что и в традиционном фильмопроизводстве. Не стоит также забывать, что, несмотря на название «трехмерная анимация», изображение все равно появляется на двухмерном экране. Компьютер обеспечивает равномерный переход от одной позы к другой, что способствует появлению чересчур плавных движений, ощущению невесомости объектов или ненатуральному подпрыгиванию. По моим наблюдениям анимация во многих голливудских фильмах выполнена так, как будто персонаж находится под действием силы тяжести другой планеты. Также крайне сложно убедительно показать взаимодействие персонажа с объектами. Кроме того, приходится воспроизводить такие сложно контролируемые вещи, как одежда или волосы. Существуют еще гипертрофированность, присущая графике, и дизайн, который можно воспроизвести только с помощью рисованной анимации. О Каковы критерии найма аниматоров? В фирме Pixar на работу принимаются аниматоры, являющиеся хорошими актерами и рассказчиками, с богатой фантазией и оригинальными идеями. Обычно они имеют профессиональный опыт и не боятся работать с компьютером. Мы нанимаем также аниматоров с опытом рисованной анимации, покадровой съемки и кукольных постановок. О Как можно улучшить способности аниматора ?
Если вам нравится рисовать, обзаведитесь компьютером с графическим планшетом. Начните с простых примеров. Не стоит сразу пытаться сделать эпическое полотно. Работайте над короткими сценами, позволяющими задействовать все ваши способности. Для начала заставьте мячик прыгать. Потом добавьте ящик, через который будет прыгать мячик. Сохраняйте простоту и небольшую продолжительность сцены. Смотрите мультипликационные и обычные фильмы хорошего качества. Старайтесь понять, что делает их забавными. Пытайтесь применять увиденные приемы в своей работе. Во время моего обучения в колледже я многому научился, копируя работы мастеров. Всегда идите от общего к частному. Свободно и быстро создавайте отдельные блоки сцены, а потом переходите к проработке деталей. Анимация, как и все остальное, требует длительной практики. Благодарим Скота Кларка за его искренний рассказ о мире компьютерной анимации. Надеемся, вы заметили в интервью темы, о которых мы упоминали ранее. В этой главе мы будем касаться этих вопросов по ходу создания небольшого представления. Но перед тем как приступить к анимации, нужно составить план. Олле Джонстон говорит, что половину времени, уходящего на анимацию, должно занимать планирование. Однако, если понаблюдать за работой аниматоров
Планирование анимации
463
в большой студии, можно заметить, что только половина из них отдает должное планированию. Их ответы на вопрос, почему они этим пренебрегают, поставили Олле в тупик. Большинство ответило, что они просто не знают. Некоторые добавили, что им кажется, как будто все и так идет как нужно. Они просто забывали о планировании. Словом, чтобы не забыть об этой стадии, начнем с составления плана работ.
Планирование анимации Процесс планирования анимации можно разделить на четыре этапа. Для начала нужно определить, что вы хотите сделать, и записать это. Затем требуется исследовать движения, которые будет совершать персонаж или объект. После этого к двл жению добавляется контекст. Ну и, наконец, создается сценарий, в который входят лучшие из ваших идей. Только потом можно приступать непосредственно к анимации. Анимация персонажей представляет собой трудоемкий процесс. Она требует терпения, внимания к деталям и энергии. Требуется хорошее знание инструментария, без которого невозможно направить всю свою энергию на реализацию сценария. Анимация персонажей подобна созданию контура рисунка вслепую. Сначала нужно замедлить мыслительный процесс, чтобы оценить детали, а потом сфокусироваться на задаче, исключив все остальное. ПРИМЕЧАНИЕ Об анимации персонажей невозможно знать все. Корни способностей к анимации уходят в психологию, анатомию, кинестетику, актерскую игру, человеческое восприятие и навыки работы с компьютером. Из-за ограниченности и вместе с тем многоликости подобной работы создать понятную методологию не так-то просто. Поэтому здесь мы представляем методологию, отражающую доктрину основных авторитетов в области анимации персонажей. Среди них нужно упомянуть Вейна Гилберта (Wayne Gilbert) и Дэйва Сидли (Dave Sidley) из компании Industrial Light & Magic (ILM). Именно они оказали наибольшее влияние на представляемую методологию. Также хотелось бы назвать Рекса Григнона (Rex Grignon), Пола Дэвиса (Paul Davies), Рона Сентона (Ron Thornton), Стива Бэйли (Steve Bailey), Кайла Кларка (Kyle Clark), Джимми Хэйварда (Jimmy Hayward), Орена Джэкобса (Oren Jacobs'), Дэйва Сидли (Dave Sidley) и Вейна Гилберта (Wayne Gilbert).
Первый шаг — свое видение Первым шагом в производстве любой анимации является определение предпочтительных поз и анимационной последовательности. Это нужно сделать до начала исследований, чтобы сохранить энергию, источником которой является «ваше видение». Эта предварительная работа крайне важна, так как анимация персонажей представляет собой одну из немногих творческих стадий создания сцены. Вы убедитесь, что большинство творческих решений для любого проекта принимаются именно на предварительной фазе. Именно в этот момент выбираются цвета, расположение объектов на сцене, персонажи, их настройки, диалоги и прочее. В действительности, из того, что зритель потом увидит на экране, на стадии
464
Глава 15 • Общие аспенты анимации персонажей
предварительной подготовки не обсуждаются только поведение персонажа и выражение его лица. Анимация персонажа определяет его поведение в сцене секунда за секундой. Чтобы защитить свое творчество от поправок руководителя проекта, ведущего аниматора и т. п., нужно зафиксировать ваше начальное видение. Это будет стимулом для дальнейшей работы и ключом для достижения нужного вам результата. На стадии планирования анимации нужно определить две важные вещи: источники энергии и неправильные представления. Источниками энергии называются те части фильма, проходящего перед вашим мысленным взором, которые управляют вашим вдохновением. Эти образы дают вам силы довести до конца любой проект. Профессиональные аниматоры часто удивляются, насколько их ожидания отличаются от реальности. Мы видим движущиеся предметы ежедневно, но не понимаем, что при этом происходит на самом деле, пока не сфокусируем внимание на изучении движения. Поэтому имеет смысл ясно представить ожидаемый результат, чтобы свести «на нет» ошибки в наших представлениях о движении объектов. Под ошибками подразумевается неправильное представление о способе совершения движения. Часто наши впечатления не совпадают с реальностью. Однако они все равно ценны, так как позволяют корректировать наши представления о движении. Люди говорят «слепой, как летучая мышь», но летучие мыши имеют замечательное зрение. Ночью, когда видимость падает, они переходят на эхолокацию, то есть определяют положение окружающих предметов по отраженному звуку. Эту информацию мы можем использовать как для планирования анимации летучей мыши, так и для включения нашего представления о ее движении в план. Представим, что требуется получить бегущую лошадь. Как двигаются ее ноги? Каков порядок их перемещения? Перемещает ли лошадь сначала переднюю левую и переднюю правую, а потом заднюю левую и заднюю правую ноги? Или же сначала идет передняя левая, а потом задняя правая и т. д.? Остановитесь и подумайте об этом. Разумеется, имеет смысл внимательно посмотреть на бегущую лошадь. Описать движение лошади может быть крайне сложно, но вы не узнаете этого, пока не приступите к процессу. Остановитесь на минуту и попытайтесь воспроизвести шаг лошади. Не читайте дальше, пока не запишете свои впечатления. Вы поняли, как ходит лошадь? Лошадь двигает переднюю левую ногу, затем переднюю правую, а после этого заднюю левую и заднюю правую. Вернемся к главе 2, в которой обсуждалось рождение проекта «Место для парковки». Вспомните яркое видение того, как вода из пожарного гидранта обливает Крутана. Именно это видение стало толчком к созданию нужного кадра. Именно оно дает энергию для работы над сценой и поддерживает интерес аниматора к проекту. Другой причиной для изучения действий, которые вы считаете известными, является тот факт, что ваше видение движения, по крайней мере, сначала будет основано исключительно на ваших представлениях о виде сцены и поведении персонажей. Однако после того, как вы начнете исследовать движения, ваше мнение изменится. Поэтому вам нужно в деталях запомнить видение, ведущее к оживлению анимации. Идея запоминания нужных представлений существовала у художников в течение многих лет. Натали Купер (Natalie Cooper), работающая консультантом и пре-
Планирование анимации
465
подавателем в фирмах ILM, Pixar и т. п., высказала нам свое мнение об источнике вдохновения у Пикассо. Этот великий художник понимал, что его картины были попытками запечатлеть сцены, проходящие перед его мысленным взором. Его видение было как источником, так и целью создания картин. Описывая это, Пикассо говорил, что когда он рисует, он видит картину в своих мыслях. И именно мысли являются той единственной существенной реальностью, которую он переносит на полотно или бумагу. Он работал над картиной, пока не получал нечто, максимально приближенное к его идее. Окончательная версия представляла собой наиболее удачную попытку запечатлеть первое видение. Аниматоры также заранее представляют, как будут двигаться их персонажи и что они будут делать. И перед тем как исследовательская работа разрушит осно • ву идеи, нужно перенести ее на бумагу, чтобы сохранить в качестве цели для последующей работы. Именно поэтому в конце аниматор испытывает такое чувство облегчения. Ведь результат получается настолько близким к первоначальной идее, насколько позволяют время и восприятие. Аниматору полезно фиксировать движение, которое, по его мнению, должно происходить в сцене. Это можно сделать с помощью простых карандашных набросков, Большинство аниматоров использует упрощенные версии персонажей, чтобы показать их положение и перемещения. Это тоже своего рода планирование движения, Многие аниматоры при определении поз обозначают части тела персонажа палочками. Часто эти позы связаны с ходом диалога или определенными обстоятельствами. Мы тоже рекомендуем вам начать с подобных фигурок. Например, на рисунке 15.5 показана простая структура персонажа, которую аниматор может использовать для описания принимаемых им поз. Это просто и в то же время эффективно. А на рис. 15.6 персонаж имеет туловище в виде карты, подобно карточным солдатам в фильме «Алиса в Зазеркалье». Некоторым аниматорам нравится такой стиль, так как он позволяет более четко показать повороты туловища. Так как вы работаете с персонажем Крутан, фигурка сразу должна иметь подходящие пропорции. Эти рисунки дадут вам представление о характере движения.
Рис. 15.5. Максимально упрощенная структура персонажа
Рис. 15.6. Структура персонажа, позволяющая показать повороты туловища
466
Глава 15 • Общие аспекты анимации персонажей
В процессе создания набросков персонажа имеет смысл использовать манекен, как показано на рис. 15.7, чтобы лучше представлять перспективу и позы.
Рис. 15,7. Маленький манекен дает достаточно четкое представление о позе персонажа
Манекены хорошо подходят для получения представлений о простых позах и центре тяжести персонажа, хотя они ограничены в движениях, что затрудняет установку их частей в крайние положения. Существуют манекены людей, лошадей и т. п. Некоторые из них стоят очень дорого. Тем не менее мы рекомендуем вам исследовать это средство, чтобы посмотреть, насколько полезным оно будет лично для вас. В настоящее время возрастает популярность таких приложений, как Poser. Если вы еще не устали от подобных программ, то можете откр ыть для себя новый источник вдохновения. Кроме того, существует возможность экспорта персонажей из Poser в Maya, а также возможность использования ссылок на объекты. ПРИМЕЧАНИЕ Фирма Reiss предлагает встраиваемые модули для Maya, поддерживающие экспорт персонажей из Poser. Подробную информацию можно найти на сайте http://www.reiss-studio.com.
Несмотря на все вышесказанное, многие предпочитают традиционное рисование, так как им можно заниматься и в очереди в супермаркете, и при разговоре по телефону. Другим преимуществом работы с карандашом и бумагой является возможность делать подписи, информирующие о мыслях, намерениях и мотивациях персонажа, как показано на рис. 15.8. Текст часто рассматривается как слова, которые пер-
Планирование анимации
467
сонаж произносит, или действия, которые он выполняет. Подтекст подразумевает, что происходит в мыслях персонажа, например, пожимая руку злобному негодяю, персонаж пытается не показать, что он знает, кто перед ним.
"w
Рис. 15.8. Рядом с персонажем описаны произносимый им текст и подразумеваемый подтекст
При актерской игре описывается следующий способ применения текста и подтекста. Актер сначала озвучивает подтекст, а затем текст. Поэтому в примере с пожиманием руки актер произносит: «Ты грязный ублюдок» — и только потом: «Привет». В итоге слово «привет» приобретает новое, более интересное значение, так как одновременно содержит и текст и подтекст. Такая, более сложная форма коммуникации необходима для успеха сценария. На практике герой думает подтекст, а говорит текст. Определяя текст и подтекст, не забывайте помечать, что где. Можно использовать скобки или карандаш другого цвета, чтобы усилить различие. При наличии аудиозаписи актерских реплик вам придется сделать циклы видеозаписи и для текста, и для подтекста. Продолжая работу над анимацией, нужно смотреть на текст сценария, чтобы получить собственное визуальное представление о сцене и действии в ней. Для примера мы решили обратиться к той части сценария, в которой Крутан приближается к Кляксе. Выйдя из автомобиля, Крутан смотрит на часы, а затем на табличку с надписью «Стоянка платная». Затем он поворачивается и видит, что к нему направляется контролер. Крутан идет к счетчику оплаченного времени, чтобы бросить в него монетку, но тут на него начинает рычать Клякса. Для начала нужно решить, какое впечатление должна производить эта сцена. В анимации длительность сценария часто превосходит длительность фильма. В три-
468
Глава 15 • Общие аспекты анимации персонажей
диционном кино мы знаем, что одна страница сценария примерно соответствует одной минуте на экране. Но в анимации это условие может и не выполняться, Следовательно, для начала нужно воспроизвести сцену мысленно. Пусть ваше воображение наполнит ее жизнью и покажет, что же явл*;ется самой важной частью фрагмента. Ваше впечатление может отличаться от нашего, но по нашему мнению ключевой момент сцены — это противостояние Крутана и Кляксы. Если вы решили создать эту сцену, прекратите чтение и начните делать наброски указанного фрагмента. Вы можете даже послать нам результат своей работы по адресу [email protected]. Остановитесь и поработайте над позами. Закончили? Хорошо, вот наше видение ситуации. Крутан наклоняется вперед с вытянутой рукой, а затем, когда Клякса рычит и пытается его укусить, в ужасе отскакивает назад. Мы считаем это самым сильным моментом в сцене, так как он демонстрирует конфликт между главным героем (Кляксой) него противником (Крутаном). На рис. 15.9 показана версия нашей истории, созданная одним из студентов Политехнического колледжа Когсвела (Cogswell Polytechnical College) Джеймсом Беттенкортом (James Bettercourt). Его набросок демонстрирует позы, которые персонаж будет принимать в сцене. Обратите внимание, что он написал мысли персонажа рядом с каждой позой. Подобная идея мини-сценария будет рассмотрена чуть позже.
Рис. 15.9. Варианты поз Джеймса Беттенкорта (хотя он использует простые фигуры из палочек, все позы ясно различимы)
Планирование анимации
469
Первым шагом в анимации Крутана должно быть создание линии действия персонажа. Этот термин обозначает традиционный подход в анимации, состоящий в создании линий, отражающих ключевые положения (позы) персонажа. По мне нию авторов, в сцене имеются, по меньшей мере, три ключевых положения. Кру тан идет к счетчику оплачиваемого времени с монеткой. Но он должен сначала достать эту монетку из кошелька. Здесь может быть первый ключевой момент. Он принимает угодливую позу, показанную на рис. 15.10. В этот момент Клякса начинает рычать.
Рис. 15.10. Линия действия вданном случае находится справа, и поза персонажа соответствует линии действия
Самое значительное изменение линии действия происходит при смене ее направления. На рисунке поза Крутана при попытке приблизиться к счетчику представляет собой наклоненную вперед кривую, имеющую форму обратной буквы С, Когда Крутан отшатывается от начавшей рычать Кляксы, линия действия меняет свою форму, как показано на рис. 15.11. Контраст между этими позами придает сцене интерес. Кроме того, не стоит забывать о позе персонажа в момент, когда он достает монетку.
Рис. 15.11. Испуганная поза, которая следует за позой с рис. 15.10 (обратите внимание на изменение формы тела с вогнутой на выпуклую)
470
Глава 15- Общие аспекты анимации персонажей
Некоторые режиссеры предпочитают при описанном изменении линии действия более нейтральные позы. Однако существуют и приверженцы противоположной точки зрения, которые считают, что поза в виде буквы С позволяет лучше подчеркнуть контраст ситуации. Авторам Крутан представляется в скрученной позе, когда он смотрит назад на приближающегося служащего и одновременно роется в своем кармане в поисках подходящей монетки. Это неестественное положение тела вызовет у зрителя предчувствия, что что-то должно произойти. Чтобы создать живописный комический номер, нужно поместить персонаж в забавную статичную позу. В качестве одного из лучших примеров можно вспомнить бросок торта в лицо главного героя, когда мы видим его глаза, открывающиеся среди взбитых сливок. Камера задерживается на этой сцене, и мы смеемся над злоключениями главного героя. По мнению авторов, снимать фрагменты, представленные на рис. 15.10 и 15.11, нужно сбоку, чтобы нридать позам максимальную выразительность. После детального исследования вопроса видение сцены может претерпеть изменения, но пока что нужно зафиксировать наше ощущение в текущий момент. На рис. 15.12 последовательно показаны позы персонажа в сцене.
Рис. 15.12. Ключевые позы Крутана в сцене «Место для парковки» (обратите внимание на изменение направления изгиба персонажа)
Практикующие аниматоры хранят результаты подобной работы в блокноте или на листах бумаги, пряча их от посторонних глаз. Вот как объясняет необходимость в этом Шамус (Джимми) Калхэйн (Shamus (Jimmy) Culhane), аниматор, работающий у Диснея. Когда вы объясняете свое видение другим, вы пересказываете сценарий; соответственно пропадает мотивация к созданию анимации. Кроме того, другие аниматоры могут воспользоваться вашей идеей. Так как это ваша находка, обращаться с ней нужно бережно. Это потребуется вам позже для мотивации и проникновения в суть. Если на данный момент описанные в этом разделе упражнения завершены, значит, вы определили, чего же вы ждете от сцены. Теперь можно приступить к исследованию деталей и определению степени нашей аккуратности и точности. Хотя мы сделали всего лишь часть сцены, в которой Крутан совершает несколько движений, вы можете легко нарисовать всю последовательность действий в этой или другой сцене. Например, часто мы ожидаем, что животные будут действовать определенным образом, но потом оказывается, что наши ожидания далеки от истины. Впрочем, подобными вещами мы займемся в следующем разделе.
Планирование анимации
471
Без сомнения, ваши результаты будут отличаться от наших. Поэтому рекоме! iдуем вам делать два упражнения — с нашими и с вашими вариантами рисунков.
Второй шаг — исследование движения Перед тем как приступить к созданию сцены с персонажем, нужно определить, как персонаж будет себя вести, понять его характер. Поведение персонажей часто является результатом как их физической, так и ментальной истории. Любой актер без проблем скажет вам, сколько времени он работал над ролью. К примеру, Дэниз Куэйд (Dennis Quaid) провел три месяца в отделе по расследованию убийств, чтобы освоиться со своей ролью в фильме The Big Easy (Большой кайф). Актер объяснял, что он пытался привыкнуть к сложностям работы в полиции, когда каждый день приходится сталкиваться с экстремальными ситуациями. Эти полицейские — мужчины и женщины — под влиянием окружающего насилия черствеют душой, чтобы выжить в жестоком мире. Подобные исследования, проводимые аниматором для каждого из персонажей, называются исследованием роли. Именно по этой причине аниматоров называют «актерами с карандашом». Они используют карандаш (или компьютер) для создания сцен, отражающих мысли и мотивацию персонажа. Наши исследования призваны определить, что представляет собой персонаж и как он двигается. Но перед тем как приступить к этим исследованиям, важно понять их цель. Мы хотим получить сложную сцену на основе наших наблюдений, экспериментов и чувства движения. В отличие от актеров, которые должны играть по требованию режиссера, у нас есть возможность планировать и редактировать сценарий, даже не приступая к анимации. В отличие от редакторов, которым приходится выбирать самый лучший фрагмент среди множества предоставленных, мы можем планировать свои действия заблаговременно, чтобы получить максимально убедительную сцену. Создание анимации имеет много общего с работой актера и редактора, но, по сути, это нечто совсем иное. Итак, путем наблюдения за окружающими мы должны собрать информацию в своего рода копилку, из которой по мере необходимости можно будет доставать требуемые образы. Для начала имеет смысл найти людей, которые послужат прототипом персонажа. Или можно задаться вопросом, что представляет собой персонаж, В качестве отправной точки исследований проведем поверхностный анализ одной сцены. Ее смысл очень прост. Сначала персонаж ищет монетку, затем пытается бросить ее в счетчик и, наконец, в страхе отступает. Так выглядит анализ на текстовом уровне. В нем ничего не сказано о том, как же выполняются все вышеперечисленные действия, то есть нет никакого подтекста. Сделаем действие в сцене характерным, придав ей подтекст. Посмотрим, что движет Крутаном. Что для него важно и почему. Это поможет нам понять его мотивацию и внутренний конфликт, который формирует характер подтекста.
Кто такой Кругам и почему он нам интересен Перед тем как создать сцену с персонажем, нужно понять, как он будет себя вести, узнать его характер. Как уже отмечалось, поведение человека часто является плодом его физического и ментального прошлого.
472
Глава 15 * Общие аспекты анимации персонажей
Одним из самых важных вопросов является определение сущности персонажа. Решить подобную задачу невозможно без подготовки, потому что именно это решение послужит основой для будущей анимации. Любой персонаж взаимодействует с окружающим миром уникальным способом. Персонаж может хромать из-за полученных в детстве повреждений. Хромота, впрочем, может быть фальшивой, чтобы вызвать симпатию у незнакомцев. Каждый персонаж вносит в сценарий багаж своего прошлого. И так как нам предстоит пройти его путем, мы должны знать его историю и привычки. Проще всего понять суть персонажа, описав его характер, О Чего больше всего боится Крутаи? Он боится, что остальные поймут его фальшивую натуру. А он действительно фальшив. Он считает себя великолепным коммивояжером, но на самом деле в последний раз он провернул крупную сделку только потому, что оказался в нужное время в нужном месте. Крупная сделка вовсе не была результатом его действий. Ему просто повезло. Но он считает, что все произошло благодаря его способностям. И даже заставил поверить в это многих вокруг себя. Крутан — крутой парень. Но он крут благодаря другим и не хочет признавать этого. О Что Крутан думает об окружающем мире? Крутан верит, что мир вращается вокруг него. Все, что делают окружающие, должно доставлять ему удовольствие. Если же кто-то не доставляет ему удовольствия, Крутан пытается сделать его более уступчивым. Потерпев неудачу, он старается больше не встречаться с этим человеком. У него нет животных. Ведь они так усложняют жизнь, а он живет только для себя. О Может ли Крутан и в самом деле с кем-нибудь подраться? Крутан определенно может с кем-нибудь подраться. Может быть, он проиграет, но это будет хорошая драка. И, скорее всего, он выйдет из нее спокойным. О Почему Крутан работает коммивояжером? Ему нравится этот стиль жизни. Как доказывает его пример, при этом не приходится особо напрягаться. Ему нравится выставлять напоказ признаки успеха; он водит крутую машину и обладает крутыми вещами. А, собственно, почему нет? Он верит, что заслужил все это. о Является ли Крутан атлетом? Его отец был футбольным судьей, а мать — домохозяйкой. Он играл в футбол, потому что так хотел его отец, но оставил это занятие после школы. Он был посредственным футболистом и получил место защитника в команде только благодаря отцу. Недостаток способностей не позволил ему начать спортивную карьеру. О Есть ли у него девушка? У него несколько девушек, которые не знают о существовании друг друга, потому что он этого не хочет. Большинство из этих женщин — золотоискательницы. Они хотят, чтобы рядом был обходительный мужчина, который тратил бы на них деньги. В свою очередь, они достаточно привлекательны, что дает ему возможность пустить пыль в глаза окружающим. Все отношения поверхностны. Крутан является обычным Донжуаном. О Что он любит? Ему нравится ездить на своем автомобиле и красоваться перед окружающими. Везде, где он появляется, все должны видеть, какой он крутой.
Планирование анимации
473
Он не занимается спортом, но любит смотреть футбол и заключать пари. Еще он любит пить пиво с друзьями, Но выпивает он только за компанию. Он играет в гольф, но при этом мошенничает. Даже если ему удается набирать неплохие очки, он все равно мошенничает. Но при игре с клиентами он честен, чтобы дать им шанс выиграть. Он может даже специально проиграть, если перед ним многообещающий клиент. Он никогда не чувствовал себя оскорбленным, а кроме того, является мастером уловок. Он подобен тефлоновой сковороде — к нему не прилипает ничего. О Где он учился? Он посещал университет Лойолы на севере Чикаго. Он католик, но не исполняет обрядов. Раньше он был богобоязненным, но, как многие в наши дни, он утратил веру. Итак, мы выяснили, что за человек Крутан. Хотя этот набор фактов может показаться бессмысленным, он даст нам основу для характеристики персонажа. Мы можем посмотреть с новой точки зрения на его поведение и на способ перемещаться в пространстве. Можно попытаться сымпровизировать и начать вести себя в повседневной жиз ни как Крутан. Многое прояснится, если вы попытаетесь даже думать как Крутан, Подобная импровизация позволяет лучше вникнуть в характер персонажа. Как вы сможете убедиться, превращение в персонажа, над которым идет работа, дает ключ к созданию убедительного образа. Начинающие студенты часто перемещают персонаж по сцене, не понимая, о чем он думает. К их удивлению зрите ли считают, что персонаж вообще ни о чем не думает. Ведь в этом случае он прости двигается, как кукла, не имея никаких намерений. И публика не обращает внимания на таких персонажей. Поэтому умение перевоплощаться в персонажа — способность крайне важная, и вы должны ее развивать. В применении к анимации важную роль играет также умение импровизировать. Именно оно дает аниматору возможность понять мысли и поступки персонажа. Полезной способностью является также пантомима, то есть умение визуально выражать свои мысли. Теперь перейдем к исследованию психологии персонажа.
Психология — теория мини-сценария Преподаватели анимации обращают внимание на разницу между игрой и действием. Действие представляет собой движение под влиянием внешних сил. Под внешними силами понимаются как ветер, дующий в спину, так и поднятие пустой чашки, лежащей в канаве. Эти факторы вызывают некую реакцию, но у нее отсутствует мотивация. С другой стороны, игра отличается именно наличием внутренней мотивации. Сценарий строится на противоречивых желаниях главного героя. Без внутренней мотивации не было бы сценария. Соответственно, это нужно учитывать при анимации персонажей. В то время как сценарий обеспечивает диалоги в представлении и указывает на мотивацию персонажей, мини-сценарий представляет собой мысленный диалог персонажа, секунда за секундой определяющий, о чем он думает. Теорию мини-сце-
474
Глава 15 • Общие аспекты анимации персонажей
пария можно определить как мысли персонажа, возникающие по мере выполнения им различных действий в сцене. Идея теории мини-сценария основана на работе Тайби Калера (Taibi Kahler), который заметил, то жизненные сценарии людей повторяются в их ежеминутном поведении. Мини-сценарий дает аниматору возможность придания поступкам персонажа определенной мотивации. Создание и усовершенствование этого мыслительного процесса наполняет положения и игру персонажа смыслом, Еще недавно понятие мини-сценария использовалось при изучении вопросов распознавания лжи под названием микровыражепий. Этим термином называют выдающие истинную реакцию кратковременные оговорки, которые длятся буквально доли секунды и в ходе которых говорящий теряет контроль над чертами лица. Для аниматоров такие выражения лица очень полезны, так как мимикой одного и того же персонажа позволяют показать и явный, и подразумеваемый сюжеты. Выгода от назначения некоего мыслительного шаблона определенному поведенческому шаблону состоит в том, что позы начинают лучше соответствовать поведению, а персонаж обретает для каждой позы определенную мимику. Ведь слишком часто персонажи двигаются без всякого внутреннего диалога, и представление становится плоским и бессмысленным. Чтобы показать мысли персонажа, аниматору нужно четко описать его внутренний диалог с самим собой. Соответственно, изменится поведение персонажа. Определив мыслительный процесс, аниматор получит целостность мыслей, намерений и чувств в сцене. К примеру, рассмотрим ситуацию, когда главный герой проверяет почтовый ящик. Само по себе это не очень занимательное действие. Если добавить сюда мотивацию, сцена изменится, что подогреет зрительский интерес. Главный герой скачет и выделывает пируэты вокруг почтового ящика, ожидая послания от любимой женщины. Или он с опасением идет забирать почту, потому что ожидает очередных ультиматумов и угроз от безжалостных кредиторов. Вид сцены будет разным в зависимости от внутреннего диалога персонажа — его мини-сценария. Теория мини-сценария уходит корнями в традиционное искусство. Например, в книге The Animation Process, Notes on a Lecture by Ollie Johnston (Процесс анимации, заметки о лекциях Олле Джонстона) Хэм Люске (Ham Luske) указывает следующие положения. О Не нужно иллюстрировать слова или механическое 'движение. Иллюстрированию подлежат идеи или мысли с позициями и действиями. о Что думает персонаж? Мысли и обстоятельства, скрывающиеся за неким действием, делают это действие более интересным. Например, сравните. Человек подходит к почтовому ящику, опускает в него письмо и идет прочь. Человек, отчаянно влюбленный в девушку, которая находится далеко от него, пишет ей письма, вкладывая в них собственное сердце. Именно это называют подтекстом. О Избегайте бесцельных движений. Выражения лица не должны противоречить движениям тела. Мысль должна выражаться всей позой. Идея мини-сценария исконно присутствовала в творчестве Диснея, хотя в те времена и не пользовались данным термином. Крутан живет для себя. Он нашел нишу, в которой может считаться успешным, хотя он ничего не сделал, чтобы заслужить подобную репутацию. Крутан считает,
Планирование анимации
475
что лучше выглядеть хорошим, а не являться таковым. Он должен казаться совершенством. Люди, которые хотят казаться совершенством, обычно разочарованы во всем вокруг, так как мир вокруг нас далеко не совершенен и всякое может случиться. Они настраивают себя на неудачи, полагая, что существуют вещи, которые определенно можно принять на веру. Возможно, в их жизни бывают и невыполненные планы, и трудности, и борьба, и неудачи, но затем все это трактуется так, чтобы казаться победителем. Вы можете вообразить, что происходит, когда человек, пытающийся быть совершенным, сталкивается с трудностями. Подобная персона должна игнорировать неудачи и жить в мире фантазий или же вкладывать усилия только в те мероприятия, которые гарантировано закончатся успешно. Отсутствие предрасположенности к риску вкупе с низкой толерантностью к неудачам означает, что рассказы о любом событии будут повернуты таким образом, чтобы выглядеть победителем. Если вы знаете кого-нибудь, похожего на Крутана, можете побродить вокруг этой персоны, наблюдая за ее поведением. Имеет смысл задать ему вопросы о прошлом и познакомиться с его взглядом на различные вещи. Это придаст вашему персонажу память, которую можно вызвать к жизни.
Исследование сюжета Большинство удачных сюжетов развиваются по дуге. Эта дуга описывает изменения различных аспектов сюжета во времени. Такие аспекты, как любовь или счастье, могут трактоваться и положительно, и отрицательно. Можно влюбиться в начале сюжета, а под конец оказаться безнадежно отвергнутым. Сцена может начаться с грусти героя, но, в конце концов, он добьется успеха. К счастью, каждая сцена, над которой мы работаем, показывает подобный переход. Поэтому публика будет смотреть фильм с интересом, чтобы узнать, что произойдет дальше. Так как динамика к середине сюжета обычно нарастает, синхронность и напряженность действий в ходе фильма должны меняться. То есть драка в начале фильма обязана быть менее неистовой и яростной, чем драка в середине. В противном случае центральный фрагмент сюжета покажется зрителям скучным. Таким образом, действие в нашей анимации должно быть отрегулировано по времени и по накалу в каждом фрагменте. Поэтому нужно четко определить, где персонажи выкладываются «по полной программе», а где сюжет описывает «затишье перед бурей». При воссоздании более продолжительных ситуаций необходимо отражать их настроение, тон, время и расположение в пространстве. Нужно тщательно исследовать каждую часть сценария, чтобы гарантировать, что она органично впишется в сюжет всего фильма.
Исследование движения Первое, чем мы займемся при исследовании движения, будет использование опорного материала. Исследование движения является у аниматоров одной из наиболее важных областей. Ведь на этой стадии нужно разыграть представление, которое предстоит
476
Глава 15* Общие аспекты анимации персонажей
воплотить на экране, И каждый из актеров импровизирует в меру своего понимания сценария и контекста. В течение многих лет считалось, что при розыгрыше представления можно использовать длинные зеркала, отражающие человека во весь рост. Предполагалось, что актер должен одновременно играть роль, смотреть на себя и делать заметки в блокноте. Но это никогда не работало нужным образом. После многолетних попыток большинство аниматоров пришло к выводу, что попытка одновременно выступать как актер и как зритель обречена на провал. Намного лучше фиксировать все движения на видеокамеру. Такой метод обеспечивает качественную запись представления, которое, в свою очередь, становится более качественным, так как актеру не приходится беспокоиться о записи. С помощью видеозаписи можно изучать распределение веса, синхронизацию действий и т. п., Обязанностью актера остается только воспроизведение действий персонажа. ПРИМЕЧАНИЕ В качестве примера воспроизведения действий персонажа вы можете посмотреть фильм JamesActing.avi, расположенный в папке Chapters\Chapterl5 прилагаемого к книге компакт-диска. Джеймс Беттенкорт (James Bettencourt) разыгрывает сцену для получения опорного материала.
СОВЕТ Нужно заметить, что видеосъемки перед большим зеркалом дают возможность записать сцену с другого ракурса. Главное — правильно выбрать положение камеры.
Дополнительная импровизация помогает обнаружить дополнительные мотивы действий персонажа и скрытый контекст. Работа с несколькими актерами, в число которых могут войти ваши друзья, коллеги, родственники и т. п., позволяет получить дополнительные интерпретации движения. Чем больше различных подходов к движению вы соберете, тем богаче будет палитра, на основе которой позже вы приступите к моделированию. Вы должны искать это разнообразие. Пытайтесь обнаружить нюансы в каждом представлении и используйте их для создания конечного образа.
Готовые видеоматериалы В 1876 году член правительства Калифорнии Лиланд Стэнфорд (Leyland Stanford) побился об заклад со своим коллегой. Он, будучи страстным любителем лошадей, полагал, что во время движения лошади существует момент, когда все ее четыре ноги оторваны от земли. Спорщики предложили 20 000 долларов любому, кто сможет доказать правоту одной из сторон. Эдвирд Майбридж (Edwierd Muybridge) был фотографом-экспериментатором и увлекался съемкой движущихся объектов. Начальные результаты его экспериментов показали, что он вполне мог бы разрешить пари Стэнфорда. А 20 000 долларов в те дни были весьма солидной суммой. Майбридж поставил точку в споре после трех дней работы. Для этого он использовал набор камер, связанных между собой тонкой нитью, которая по очереди включала их, когда перед ними пробегали лошади. Выигранные за разрешение пари
Планирование анимации
477
деньги Майбридж потратил на изучение движения животных и людей. Результаты этого изучения он опубликовал в своих книгах. Вы и сейчас можете найти их в библиотеке и даже заказать копии в Интернете. Майбридж доказал, что во время бега существует момент, когда все четыре ног и лошади оторваны от земли. Стэнфорд выиграл пари и даже пожертвовал деньги на лошадиный питомник. Позже этот питомник стал Стэнфордским университетом ( Stanford University), до сих пор носящим имя своего основателя. Как ни стран но, за последние сто лет никто не пытался повторить исследования Майбриджа. И сегодня, как и долгие годы до этого, фотографии, сделанные Майбриджем, служат опорными изображениями для аниматоров. В Интернете можно обнаружить многочисленные короткие фильмы или анимированные изображения в формате GIF, созданные из наборов изображений, опубликованных Майбриджем. Они полезней книг, так как представляют собой уже отсканированные снимки, готовые к использованию. Основным преимуществом работы с готовым видеоматериалом является экономия времени. Ведь он избавляет вас от необходимости самостоятельно разыгрывать представление. Но, к сожалению, практически невозможно найти действие, которое бы полностью совпадало с вашей задумкой. Большинство трудов Майбриджа не имеют отношения к современности. Иногда он запечатлевал вещи, которые совершались исключительно сто лет назад. Однако даже его работы могут дать вам представление о движении.
Захват движения Иногда опорные материалы по движению можно получить в Сети с помощью систем захвата движения. Захват движения представляет собой весьма спорный метод, как и его предшественница — ротоскопия. Вопрос состоит в том, способны ли системы захвата движения вытеснить ручную анимацию персонажей и будет ли результат захвата достаточно художественным. Утверждается, что фирма Pixar назвала захват движения ротоскопом дьявола Эта техника все настойчивей проникает в анимацию. В качестве примера можно привести игру Энди Серкиса (Andy Serkis), английского характерного актера, который озвучивал Голлама/Смеагола в фильме Lord of the Rings: The Two Towers (Властелин Колец: Две башни). Этот персонаж был создан путем захвата движения и Maya. Вот что думают авторы по поводу данной техники. Захват движения — один из многих приемов создания анимации. Злоупотребления им и неверное применение не стоит рассматривать в качестве причин отказа от этого приема. В 1926 году братья Флейшер (Fleisher) изобрели ротоскопию. Патент был выдан на метод, позволивший Максу Флейшеру сфотографировать своего брата Дэйва в костюме клоуна Коко и кадр за кадром спроецировать фильм на экран. В результате было получено реалистичное движение, но глобально этот метод не работал. По мнению критиков и зрителей, полученное таким образом движение выглядело плоским и безжизненным. Анимированные традиционным способом персонажи выглядели более привлекательно. Зрители ожидали от анимации вовсе не фотореалистичного движения. Нужно было нечто большее, нежели простое ко-
478
Глава 15 - Общие аспекты анимации персонажей
пирование реальности. Публика не понимала, что именно не так, она просто хотела большего. Как и следовало ожидать, Дисней тоже отдал должное ротоскопии и даже создал этим методом фрагменты фильма Snow White (Белоснежка). Однако позже он отказался от данной техники, потому что анимация выглядела негибкой и плоской. Исследования Диснея показали, что в реальности движение должно быть несколько гипертрофированным. Эксперименты Диснея с ротоскопией привели к появлению среди аниматоров философии «правдоподобного, но не реалистичного» движения. Эта философия снова возникла несколько лет назад, когда начала набирать популярность идея захвата движения. Для захвата движения характерны те же проблемы, что и для ротоскопии. Однако появляются новые пути их решения. В конце концов, можно проинструктировать талантливого актера выполнять движение определенным образом. В наши дни аниматоры и режиссеры, имеющие опыт работ по захвату движения, могут получать этим приемом вполне достоверные сцены. Хорошее планирование и техническое руководство предоставляют необходимые спорные материалы. К тому же новейшие программные инструменты имеют улучшенные возможности управления сценами с большей точностью. Однако даже если вы считаете, что как техника анимации захват движения не заслуживает внимания, его можно использовать, по крайней мере, в качестве опорного материала, дающего представление о том, как происходит движение. В ближайшие пять лет согласно многочисленным исследованиям в продаже появится программное обеспечение для преобразования видеоматериалов в трехмерные наборы данных. Это означает, что вы сможете взять клип из фильма Тор Hat (Цилиндр) и заставить персонаж танцевать, как Фред Астер (Fred Astaire).
Исследование видеоисточников Информацию о движении можно найти в коллекции DVD-дисков или видеокассет. Момент с нужным вам фрагментом движения обнаружить довольно сложно, но если у вас хорошая память, этот способ получения опорного материала — для вас. Если ваша коллекция фильмов невелика, можно воспользоваться прокатом. Часто воспроизведение движений из хорошего фильма может быть удачной находкой. СОВЕТ Существуют сайты, позволяющие искать подходящие сцены из фильмов, например, http://us.imbd.com.
Как видите, существует множество потенциальных источников опорных материалов. Но самым лучшим будет представление, самостоятельно разыгрываемое аниматором и его командой, так как при этом опыт непосредственного получения данных по нужному движению оказывается наиболее полным. После завершения работы над сценой путем комбинации найденных опорных материалов по движению сцену можно последовательно описать как набор поз. Некоторые аниматоры предпочитают разыгрывать представление полностью и за-
Принципы анимации и программа CAPS
479
писывать его на пленку, чтобы убедиться в правильности синхронизации и создаваемого настроения. После объединения сцен в единое целое можно оценить соответствие полученного результата принципам анимации, о которых рассказывается в следующем разделе.
Принципы анимации и программа CAPS Кажется, что четких правил анимации не существует. Для любого правила можно вспомнить как анимацию, в которой оно успешно выполняется, так и анимацию*, в которой им полностью пренебрегли, Поэтому создается впечатление, что четких инструкций по созданию анимации просто не существует. Однако исследования Диснея, проведенные в 20-х и 30-х годах XX века, привели к появлению принципов планирования и создания анимации. Они остаются актуальными и сегодня. Рассмотрим их более подробно. Вы можете обнаружить описание принципов анимации в самых разных источниках, но основным считается книга Франка Томаса (Frank Thomas) и Олле Джонстона (Ollie Johnston) Disney Animation: Illusion of Life (Анимация Диснея: Иллюзия жизни), выпущенная в 1987 году издательством Abbeville Press. В ней перечислены классические «12 принципов анимации»; о о О О о о О О О О О О
притягательность; пространственный рисунок; предвосхищение; вторичное действие; движение по дуге; завершение и совмещение; преувеличение; постановка; синхронизация; прорисовка всех кадров или только ключевых поз; медленный старт с медленной остановкой; сдавливание и вытягивание.
Эти принципы настолько важны, что большинство лекций по анимации обычно начинаются с их перечисления. Например, их использует для своих семинаров Ричард Вильяме (Richard Williams), аниматор, подаривший нам кролика Роджера в фильме киностудии Уорнер Бразерс Who Framed Roger Rabbit? (Кто подставил кролика Роджера?). Он считает, что именно с данных принципов нужно начинать обучение, так как они являются фундаментальными. Большинству обучающихся сложно запомнить все эти принципы. Психолог Джоржд А. Мюллер (George A. Muller), опубликовавший в журнале Psychological Review (Психологическое обозрение, 1955, том 63, с. 81-97) историческую работу Magic Number Seven, Plus or Minus Two; Some Limits on Our Capacity for Process Information (Магическое число семь, Плюс или минус два: Ограничения на воз-
480
Глава 15 • Общие аспекты анимации персонажей
можности человека по обработке информации), показал, что люди могут легко запомнить семь предметов, но уж никак не двенадцать. Слозом, это не ваша вина, вы всего лишь идете проторенным путем. Поэтому, чтобы помочь вам запомнить данные принципы, мы поделили их на функциональные блоки. Они используются при исследовании анимации, которую мы называем текущим съемочным материалом, чтобы проанализировать движение. Для начала познакомьтесь со вспомогательной аббревиатурой CAPS. Именно так называлась программа, созданная фирмой ILM для Диснея. Она автоматически обрабатывала цвет анимированных фильмов с помощью компьютера. Затем эта аббревиатура использовалась для обозначения автоматизированной производственной системы (Computer Assisted Production System, CAPS). Мы применим ее для запоминания групп принципов.
CAPS, С — это Character Первая группа принципов Томаса и Джонстона определяет вид персонажа. В эту группу входят два принципа: притягательность и пространственный рисунок. Первый принцип напоминает нам, что персонаж должен быть симпатичным. И это действительно должно быть так даже (вернее, особенно) для отрицательных персонажей. Однако из этого вовсе не следует, что хороший ттерсонаж должен обязательно выглядеть как пушистый кролик. Притягательность по большей части относится к внутреннему состоянию персонажа и к его внешнему виду. Она наводит на мысль о природе личности персонажа. Рассмотрим, к примеру, Крутана. Он имеет приятную внешность и худощавую фигуру. Он привлекателен снаружи, но не внутри. Его внешний вид являет собой значительный контраст с его черной душой. Крутан представляет собой идеальный образчик нечистоплотного торговца. Второй принцип, который называется пространственным рисунком, зародился в 20-х годах прошлого века при попытках улучшить рисованную анимацию. Персонажи обычно рисовались плоскими. Движения резинового шланга, вопреки их очарованию, считались плохой анимацией. Аниматоры, работающие у Диснея, знали, что могут создать иллюзию трехмерности персонажа, и доказывали это на практике. Достаточно посмотреть, как поменялся Микки Маус после рождения этого принципа. Этот принцип применим и к компьютерной анимации, созданной с помощью Flash или другого приложения, в котором объекты изначально являются двухмерными. А в трехмерном мире Maya он выполняется по определению. Объекты моделируются в трехмерном виртуальном пространстве, поэтому персонажи автоматически имеют глубину и объем. Словом, второй принцип можно проигнорировать. Ведь создаваемые с помощью Maya модели трехмерны по умолчанию. Но не следует замещать его другими вариантами. В некоторых источниках принцип пространственного рисунка пытаются заменить кустарными принципами, начиная от «Знакомства со средой» и заканчивая «Индивидуальностью». Эти заместители имеюг право на существование, но они не имеют отношения к классическим принципам Томаса и Джонстона.
Принципы анимации и программа CAPS
481
Итак, вы получили представление о двух первых классических принципах анимации персонажей. Осталось еще десять.
CAPS, A — это A.S.A.F.E Второй набор принципов относится к движению, Их использование превращает перемещение в безопасное действие (action-safe, или, иначе, A.S.A.F.E.). Эти принципы применимы как для создания анимации, так и для ее критики. Они также замечательно подходят для исследования классической анимации.
Предвосхищение Первым из принципов данной группы является предвосхищение (anticipation), что соответствует первой букве в аббревиатуре A.S.A.F.E. Этим термином называются подготовительные действия к более важной деятельности персонажа. Их можно сравнить со звонком, привлекающим внимание публики. Предвосхищение готовит зрителей к последующему действию. Благодаря возможности вращения конечности человека часто отходят назад при подготовке к движению вперед. Предвосхищение часто включает в себя движения, противоположные по направлению основному действию. Например, перед ударом кулаком рука и плечо отводятся назад. Этот принцип часто недооценивается. Профессионалы знают, что предвосхищение удлиняет фильм, что немаловажно, если вам платят за количество отснятых метров. Добавив к действию предвосхищение, его легко растянуть или сделать более естественным.
Вторичное действие Вторая буква в аббревиатуре A.S.A.F.E. соответствует вторичному действию (secondary action). Чтобы лучше понять, что это такое, рассмотрим первичное дей ствие. Действие, необходимое для воспроизведения очередного фрагмента сценария, называется первичным. Именно оно является причиной присутствия сцены в филь ме. Режиссер выбирает действие для передачи сути этого фрагмента, и мы его анимируем. Однако к первичному действию часто нужно добавить характерные особенности персонажа. Для этого используются сопутствующие действия, называемые вторичными. Вторичные действия обусловлены первичными, как, скажем, волосы на голове девушки покачиваются в такт при ходьбе. Кроме того, они могут обнаруживать подтекст действий персонажа. С их помощью можно добавить тонкие нюансы в действие и смысл сцены, Вторичные действия должны быть подчиненными, в противном случае они превратятся в первичные, что изменит смысл сцены. При их обдумывании нужно сфокусироваться на том, что еще требуется добавить в основную канву сценария. Они должны поддерживать первичное действие. Например, вспомним нашего Крутана. Он пристально смотрит на контролера. Но что он при этом думает? Скорее всего, мини-сценарий выглядит так: «О, нет...
482
Глава 15 • Общие аспе^ы анимации персонажей
он подходит. Не надо. Нет. Нет». Соответственно, при взгляде на контролера Крутан может мотать головой, а его губы будут беззвучно шептать: «Нет, нет...» Это добавит выразительности его взгляду и приоткроет его мысли. Зритель будет знать не только, куда смотрит герой, но и что он при этом думает.
Движение по дуге По дуге (arc) двигаются шаровые сочленения. Конечности млекопитающих и многих других созданий имеют именно такую конструкцию. Следовательно, когда мы двигаем руками или ногами, перемещение происходит по дуге. В результате движение получается натуральным и предсказуемым. Однако это всего лишь частный случай. Аниматоры Диснея в 20-х и 30-х годах изучали, что именно хочет видеть зритель. Они обнаружили, что людей намного 1 больше привлекают дугообразные формы, а не прямые линии. Поэтом) при разработке траектории перемещения нужно убедиться, что с точки зрения камеры она имеет форму дуги. Представьте себе подающего в бейсбольной команде. Он может заставить мяч двигаться по прямой линии, но действие станет намного более интересным, если траектория будет дугообразной. Это несложное изменение поразительно влияет на зрителей. Дисней провел анализ, который многие авторы считают самым важным документом, когда-либо рожденным в этой компании. Его суть — попытка заставить аниматоров воспринимать движение как самостоятельную сущность, а не как способ перейти от позы А в позу В. Движение должно происходить по дуге, быть синхронным и передавать настроение сцены. Частью этой концепции является идея, что с точки расположения камеры движение должно выглядеть как дуга. Вам еще предстоит столкнуться с этим позже, на заключительном этапе анимации.
Завершение Персонажи не имеют момента инерции, если к ним не применена динамика или анимационные процедуры. Требуется специально добавлять персонажам вес, так как по умолчанию они его не имеют. В реальном мире, когда подающий бросает мяч, его рука не останавливается после броска. Сила и момент инерции руки при броске приводят к тому, что рука продолжает перемещаться по дуге. Остаточное движение, которое имеет место после окончания главного, называется завершением (follow-through). Действие не может просто взять и остановиться. Движения из реального мира в наши дни ожидаются зрителями и в трехмерной анимации. Часто завершение действия придает ему отличительные черты. Представьте себе балерину. Она изгибается, предвосхищая прыжок, а затем прыгает, что рассматривается как главное действие. В качестве завершающего штриха можно заставить ее поскользнуться и сесть на попу. Подготовка и само действие полностью соответствуют традициям балета, а вот завершение совершенно нетипично. Эта пограничная особенность ожидаемого действия дает импульс завершению.
Преувеличение Роберт МакКи (Robert MacKee) является автором и преподавателем традиционной кинодраматургии. Его книга Story: Substance, Structure, Style, and Principles of
Принципы анимации и программа CAPS
483
Screenwriting (Сюжет: содержание, структура, стиль и принципы написания сценария), выпущенная в 1997 году издательством Harper-Collins, стала событием среди сценаристов и используется в качестве пособия в студиях, занимающихся созданием анимации. МакКи напоминает, что если бы люди хотели видеть обычную жизнь, они не пошли бы в театр. Они бы просто вышли на улицу и понаблюдали за другими людьми. Он считает, что на самом деле зритель хочет увидеть людей, действующих на пределе своих возможностей. Именно в таких ситуациях полнее всего раскрывается персонаж. Для аниматоров преувеличение (exaggeration) означает необходимость придания персонажам предельно достижимых поз. Действие должно быть более демонстративным, чем в реальности. Короче говоря, персонажи должны двигаться более размашисто, более уверенно и даже более экстремально. Этот момент станет вам более понятным после исследования положений персонажа в итоговой анимации.
CAPS, Р — это Physicssss Вы, вероятно, заметили, что слово физика (physics) в заголовке имеет несколько странное написание. Многочисленные буквы «s» требуются, чтобы помочь вам запомнить следующую группу принципов анимации. Следование этим принципам — единственная возможность подчеркнуть вес и материальную природу создаваемых в виртуальной реальности объектов.
Медленный старт с медленной остановкой Первый из трех принципов этого раздела называется медленным стартом с медленной остановкой (slow in, slow out). Он означает, что при анимации нужно учитывать инерцию. Можно предложить учащимся поэкспериментировать с шаром для боулинга. Он очень плотный и имеет значительную массу. Нужно приложить усилие, чтобы заставить его двигаться. Столь же трудно его остановить. То есть тяжелые объекты медленно начинают движение и также медленно заканчивают его. Причем процесс происходит тем медленнее, чем тяжелее объект, Этот принцип позволяет проинформировать зрителей о весе объекта. Представьте, что грузчик поднимает ящик. Если он сделает это быстро, создастся впечатление, что ящик легкий. Если же движение ящика вверх сначала будет очень медленным, а потом ускорится, появится ощущение, что ящик очень тяжел. Принцип медленного старта и медленной остановки в наше время по умолчанию используется в большинстве программ анимации. Он применяется после задания пары ключей анимации вне зависимости от нашего желания. Это можно даже назвать насилием, потому что в половине случаев подобное поведение не требуется. Тем не менее в Maya, как и во многих других программах, эта функция включена по умолчанию, чтобы дать представление о весе объекта. Осталось понять, как сделать явной природу материала, из которого сделан объект.
Сдавливание и вытягивание Сдавливание (squash) и вытягивание (stretch) означают равновесие. Когда на объект воздействует внешняя сила, происходящие изменения характеризуются уровнем
484
Глава 15 • Общие аспекты анимации персонажей
деформации. Искажения формы связаны с приложенной силой, но если искажения окажутся неестественными, публика быстро заскучает и магия момента будет потеряна. Рассмотрим упражнение из двухмерной анимации — прыгающий мячик. Он сплющивается в момент соприкосновения с землей, так как импульс толкает его вниз. Деформация мяча происходит в соответствии с эластичной природой материала, из которого он сделан. Металлический шарик при ударе о поверхность практически не деформируется и отскакивает иначе, в то время как для резинового мяча наблюдается деформация с поглощением энергии, Как Скот Кларк (Scott Clark), так и другие аниматоры из фирмы Pixar, преподающие анимацию, говорят о принципе Лассетера (Lasseter), называемом достоверностью материалов. В мире трехмерной графики сжатия и растяжения объектов не совпадают с ожиданиями зрителей. По этой причине в Pixar принято сначала анимировать объекты, считая их абсолютно твердыми, а для сжатий и растяжений искать другие способы. Если посмотреть, к примеру, на мультфильм Лкжсо (Luxo, Jr.), вы увидите растяжения и сжатия, выполненные путем поворота сочленений. Лампы сделаны из стали, а конечности не сгибаются. Происходит только поворот на шарнирах, но для сжатий и растяжений этого вполне достаточно. Согласно Лассетеру проблема с совмещением принципов сжатия и растяжения и достоверности материала основана на конструкции персонажа. Например, рассмотрим модель пылесоса. Мы хотим, чтобы он действовал как собака. Твердый металлический корпус должен изгибаться, как спина млекопитающего, имитируя перемещения собаки. Однако это нарушает принцип достоверности материалов. Одним из вариантов решения проблемы является изменение конструкции персонажа путем моделирования живота в центральной части коробки пылесоса. Этот «живот» должен быть сделан из резины или другого гибкого материала, позволяющего имитировать нужное нам поведение.
CAPS, S — это STS Последняя группа принципов относится собственно к постановке представления. Они описывают интеграцию метода анимации с представлением движения. Первым в группе идет принцип противопоставления непосредственной анимации и анимации в виде перехода от одной позы к другой. В настоящее время при производстве анимации в основном применяется второй способ. Мы также воспользуется им при работе над проектом «Место для парковки». Однако все вышесказанное не означает, что непосредственная анимация больше не нужна.
Различные подходы к анимации Непосредственная анимация возникла в 1910 году, когда Стэрвич (Starewich) анимировал жуков. В его фильме использовались части мертЕ;ых жуков, соединенные булавками. При съемке каждого кадра персонажу придавали нужную позу. Однако так как один кадр занимает всего 1/24 секунды, позы отличались друг от друга крайне незначительно. Смысл идеи состоит в покадровой съемке и установке персонажа в нужную позу в каждом кадре.
Принципы анимации и программа CAPS
485
Непосредственная анимация в наше время используется для покадровой съемки кукольных мультфильмов. В итоге получается уникальный результат с плавным движением. Если вы хотите освоить эту технику, поэкспериментируйте с каким-нибудь персонажем. Важно только помнить, что требуется менять положение каждой части персонажа. Это сохранит плавность. В принципе подобное упражнение имеет смысл проделать всем, кто изучает анимацию. К сожалению, заранее определить продолжительность непосредственной анимации невозможно. Неизвестно ни время, которое будет идти фильм, ни время, которое уйдет на его производство. Очень сложно рассчитать, сколько времени займет последовательность кадров. Фильм, полученный методом непосредственной анимации, уникален, но если во время съемки возникнут проблемы, все придется начинать сначала. В отличие от сложного метода непосредственной анимации, анимация с переходом от одной ключевой позе к другой работает по тому же принципу, что и любое приложение для создания трехмерной графики. Мы заранее определяем, где и в какой момент должен находиться наш персонаж. Соответственно, персонаж устанавливается в нужное положение, указывается время и создается ключевой кадр. В итоге сцена имеет ровно ту длину, которая была определена изначально. Затем аниматору остается как можно лучше воссоздать движения между ключевыми позами, и фильм готов. Помимо всего прочего эта схема производства позволяет задействовать еще один принцип Лассетера, называемый принципом слоев. Благодаря слоям части анимации можно создавать отдельно друг от друга. Например, начинающему аниматору поручается разбиение сцены на блоки, размещение персонажа или его заместителя в нужном месте и придание ему нужного направления. После завершения работы над этим слоем наступает черед создания в сцене источников света, анимации черт лица с синхронизацией движения губ, затем она снова возвращается к аниматору, работающему с позами персонажей. То есть слои позволяют разделять обязанности. Значит ли это, что анимация путем задания ключевых поз лучше непосредственной анимации? Увы, мнение в этом отношении осталось прежним. Многим нравится смотреть на непосредственную анимацию. Это своего рода жизнь и движения, которые очаровывали публику в течение века. Впрочем, в индустрии уже повсеместно используется новый метод. Одной из причин популярности анимации на основе ключевых поз является возможность программного расчета промежуточных положений. Несмотря на то что результаты этих расчетов порой все равно приходится редактировать, это намного проще, чем рисовать все кадры фильма. Более того, непосредственная анимация подвергается новым ударам. До некоторой степени это обусловлено стремлением к минимализму в производстве анимации и влиянием Анимэ (традиционной японской анимации) и Манга (японских графических новелл). Учитывая ежегодное снижение бюджета на многосерийные фильмы, упрощение анимационных фильмов приводит к сокращению числа ключевых и промежуточных поз.
486
Глава 15 • Общие аспекты анимации персонажей
Популярность Анимэ и Манга среди художников и студий является показателем глобализации. Анимэ происходит от Манга и, по сути, представляет собой иллюстрированную версию Манга. Персонажи быстро меня ют позы, поэтому происходящее в промежуточных кадрах уже не имеет особого значения. В западной анимации внимание наоборот сфокусировано на промежуточных кадрах. В центре внимания в анимации Диснея находится способ перемещения персонажей. Поэтому сейчас идет объединение восточного и западного стилей. Значимость анимации на основе ключевых поз в этом отношении не вызывает сомнения.
Гибрид Многие авторы предполагают, что гибрид между двумя вышеупомянутыми стилями анимации уже существует и что именно его использование позволяет создать самую лучшую анимацию. К сожалению, пока это только мечты. Вы можете задать ключевые кадры, а затем перемещать персонаж вручную, чтобы прийти к нужной позе, но, скорее всего, вы не уложитесь в выделенное время. То есть придется менять временные интервалы или другим способом редактировать анимацию, что может привести к хаосу. В действительности большинство аниматоров использует метод ключевых поз для получения нужного числа кадров в соответствии с требования современного производства. Легкость создания анимации с помощью компьютера является серьезным побуждающим мотивом. Хотя совершенно очевидно, что опыт анимации каждым из методов влияет на стиль работы аниматора, вряд ли их сочетание способно породить удачный гибрид.
Кинематика Нужно заметить, что анимация по любому из вышеуказанных методов может быть использована для получения обратной или прямой кинематики. При этом не существует никакой связи между непосредственной анимацией или анимацией путем задания ключевых поз и методами прямой и обратной кинематики. Выбор определяется только желанием аниматора и требуемым результатом.
Постановка Постановка представляет собой процесс расстановки персонажей в сцене таким образом, чтобы действие могли отчетливо видеть зрители. Посмотреть, насколько отчетливыми являются позы, можно путем интерактивной фотореал истинной визуализации, щелкнув в появившемся окне на кнопке Display Alpha Channel (Показать альфа-канал). Появится силуэт персонажа. Поза должна быть ясно различимой, в противном случае ее следует отредактировать, как показано на рис. 15.13 и 15.14. Постановка связана с выбором композиции. Корни этого искусства уходят в театральные традиции. Люди на дешевых местах должны понимать, что происходит на сцене, даже не слыша текста. То есть пьеса выражается действием, а не диалогом. Говорят, что основой театрального представления является диалог, в то время как фильмы, в том числе анимационные, основаны на визуальных эффектах. Если посмотреть на телевизионную анимацию, она, по сути, иллюстрирует диалог. Попробуйте как-нибудь выключить звук. Если вы все равно сможете сказать, что именно происходит, значит, по крайней мере часть фабулы передается с помощью визуальных эффектов.
Принципы анимации и программа CAPS
487
Рис. 15.13. В данном случае силуэт Крутана нечеткий. Ни полноцветное изображение слева, ни силуэт справа ничего не говорят о персонаже
Рис. 15.14. Здесь поза Крутана намного более выразительна. Обратите внимание на пустое пространство между руками и туловищем
Примечательным в данном плане является сериал Beast Wars (Битвы зверей} После отключения звука вы не сможете понять, что происходит, несмотря на впечатляющие эффекты и замечательный дизайн персонажей. Это иллюстрация к компьютерной графике, а не к анимации.
488
Глава 15 • Общие аспекты анимации персонажей
То есть постановка предполагает, что сценарий представляется в убедительной и заслуживающей внимания форме. Хорошая л остановка увлекает зрителей и влияет на них.
Синхронизация Существует два вида синхронизации: локальная и глобальная. Под глобальной синхронизацией подразумевается пошаговая синхронизация всего фильма: от инцидента через конфликт к развязке. Локальная синхронизация связана с отдельными действ иями, фрагментами или номерами. Рассмотрим эффект локальной синхронизации на примере сцены, в которой персонаж сгибается. Если он проделывает это медленно, это можно расценить, как почтительный поклон. Однако если персонаж сгибается быстро, действие выглядит рабским. Дальнейшее ускорение этого действия будет воспринято, как попытка уклониться от атаки или брошенного в него предмета. В этих случаях одно и то же действие различным образом синхронизировано. И эта разница меняет наше восприятие. Это лишь одна из иллюстраций влияния синхронизации. Синхронизация является одним из самых сложных для изучения понятий. Мы еще не раз с ним встретимся. Итак, наш путь к запоминанию 12 принципов анимации подошел к концу. Для разделения на категории используется аббревиатура CAPS. Подобное функциональное разделение принципов анимации должно облегчить и сделать более эффективным как их применение, так и запоминание. Эти принципы применяются для исследования и совершенствования композиции сцен. С их помощью можно проанализировать готовую анимацию и обнаружить места, способные усилить фабулу и действие. Пришло время разобраться в действиях и поведении персонажа, чтобы понять, как должно выглядеть его движение. Именно этим мы зай мемся в следующем разделе.
Поза персонажа Театр в основном имеет отношение к повествованию и диалогу, в то время как фильмы по большей части связаны с визуальными эффектами. Восприятие зрителей в театре не может контролироваться так же, как в кино. Представьте, насколько странно выглядела бы пьеса, по ходу которой зрителей бы двигали ближе к сцене, чтобы сымитировать крупный план. Даже если бы требовалось самостоятельно подходить к сцене, публике это быстро надоело бы. Однако кое-что одинаково и для кино, и для театра. Это позы персонажей. Публика в театре, сидящая на дешевых местах в задних рядах, все равно должна понимать, что происходит на сцене, даже при плохой слышимости текста. Именно принимая разные позы, актеры решают эту задачу. В традиционном японском театре Кабуки актеры имеют преимущество, так как опытные зрители уже знают, что именно означает та или иная поза. Подобная связь между языком тела у актера и интерпретацией зрителей ('оставляет разительный контраст с западным театром.
489
Поза персонажа
(РИМЕЧАНИЕ Получить дополнительную информацию по поводу театра Кабуки можно на сайте Мэри Марико Оно (Магу Mariko Ohno) http://webforce.nwrain.net/kabuki/Academy.html.
В западном театре нет прямого соответствия между позой и определенным кои текстом. На колени может встать любой — молящийся, отчаявшийся, просящий и т. п. Соответственно, возрастают требования к выбору позы. Она должна быть как можно более четкой и как можно точнее выражать подтекст. Например, на рис. 15.15 показан набор поз с определенным подтекстом. Этот рисунок может служить вам отправной точкой для создания собственной библиотеки поз. Имеет смысл создавать подобные наборы рисунков с выражением различных эмоций, так как это позволит сэкономить время в дальнейшем. Верхний ряд демонстрирует позы человека, находящегося в ярости, в центре показаны позы грустного человека, а завершает рисунок изображение поз радости. Такие опорные наборы поз рисуют все аниматоры, чтобы яснее выразить чувства персонажа перед зрителями. Вы можете усовершенствовать свою библиотеку поз путем экспериментов. Рисунки с позами можно давать учащимся, а затем спрашивать, каким мыслям или эмоциям эти позы соответствуют. Как правило, для западного театра стандартов в этом отношении не существует.
Рис. 15.15. Набор поз для выражения различных эмоций
490
Глава 15- Общие аспекты анимации персонажей
Помните, что эти позы определяются неоднозначно. Их восприятие зависит от многих факторов, в том числе от контекста пьесы и настроения зрителей. Соответственно, в вашу задачу входит окончательное определение влияния позы на зрителей. Одним из наиболее эффективных способов для этого считается использование текущего съемочного материала для опенки сцены. После настройки финальных поз соберите для просмотра команду сходно мыслящих аниматоров, Они вам скажут, что работает, а что нет. Для этого лучше всего собрать опытных аниматоров. Естественно, близкий вам человек, как правило, будет считать, что ваши творения великолепны, Это услаждает эго, но не помогает работе. Другими словами, результат вашего 1руда будет того же уровня, что и его критики. Изучение ашшированных персонажей в Интернете показывает, что в основном это плоды усилий начинающих аниматоров, выставляющих напоказ свои первые ужасные пробы, движения которых имеют крайне мало общего с движениями человека. Тем не менее три из пяти аниматоров (обычно неопытных) скажут, что работа просто великолепна. Еще один критик заметит, что персонаж слишком высок, а другой посоветует сделать ему коричневые ботинки. Хотя этот пример слегка преувеличен, по большей части советы и критика непрофессионалов выглядят именно так. Нет смысла осуждать подобные сайты, тем более что резкая критика вряд ли полезна для развития способностей. Просто тем, кто хочет чего-то добиться, можно посоветовать получать отзывы у опытных аниматоров, Критик должен быть профессионалом. На секунду вернемся к японским традициям, взглянув на Анимэ и Манга как на хороший пример опорных поз. Это весьма экономичный метод, в котором одна поза используется в течение достаточно долгого времени, а затем меняется другой. Аниматор придает персонажу определенную позу и некоторое время удерживает ее. Западная анимация (в том числе творчество Диснея) всегда уделяла внимание промежуточным позам. Внимание было сфокусировано на движении и его красоте. Однако мы можем взять полезные свойства обеих традиций — японской и американской. Сначала мы создадим замечательные позы, а потом движения персонажа между ними. Аниматорам иногда полезно напомнить, что они имеют дело с визуальной средой. Использование анимации в дополнение к театральной постановке или к фильму часто называют «цифровой ил люстрацией». Информация для таких сценических работ идет по звуковому каналу, а не по визуальному, как в кино. Западные аниматоры работают над физической игрой актеров, которая передает сценарий по визуальному каналу. Это намного труднее, чем обычно представляют. Передача сложных идей и эмоций часто становится проблемой. И именно поэтому в западной анимации полагаются на просмотр текущего съемочного материала опытными аниматорами, которые могут сказать, i гасколько убедительными получились образы. Подобная зависимость приводит к тому, что аниматоры часто осваивают искусство Кабуки, пантомиму и им] фовизацию. Если вы не имеете опыта ни в одном из данных искусств, имейте в виду, что это хорошая отправная точка для развития чувства движения.
Окончательный план
491
Итак, надеемся, вы поняли, что поза персонажа является средством взаимодействия с публикой. Актерские навыки в анимации примерно те же, что и в немых фильмах, поэтому последние можно использовать в качестве опорных материалов.
Пришла пора применить полученные знания на практике.
Окончательный план Вооруженные данной вам выше теоретической информацией и сведениями, полученными из сопутствующих источников, вы можете приступить к созданию окончательного плана. Мы начнем с расположения объектов, в том числе и камеры. Затем потребуется спланировать позы персонажа, а также сценарий и мини-сценарий его действий. Наконец, останется место для заметок ведущего аниматора и режиссера по поводу нашего проекта. Расположение объектов схематично изображается на диаграмме, которая служит планом сцены. Нужно тщательно подобрать ее масштаб, так как расположение персонажей в заданных позах потребуется подгонять под окружающее пространство. На рис. 15.16 но казан вариант диаграммы, которую вы можете загрузитьв Maya в качестве опорного материала. Это сцена с Крутаном, вид сверху. Рядом с каждым автомобилем находится счетчик оплаченного времени парковки. К счетчику, расположенному в центре, привязана Клякса. Крутан приближается справа.
..• - ;' ;, i«
; , Н -. / г
i Рис. 15.16. Диаграмма, на которой схематично показано расположение объектов в сцене
492
Глава 15- Общие аспекты анимации персонажей
Теперь завершим список поз, который должен включат]) не только текст, но и по возможности подтекст. При взгляде на позы смысл происходящего должен быть понятен даже без чтения подписей. Они должны рассказывать сценарий без слов. Готовый окончательный план желательно показать режиссеру и ведущему аниматору. Отзывы на ранней стадии крайне важны, поскольку сделанные на этом этапе ошибки проще поддаются коррекции.
Процесс производства Наконец-то пришло время открыть Maya 5. Чтобы освоиться со сборкой персонажа и управлением им, модель нужно проверить на излом. Затем придет время установить Крутана в нужные позы. После этого желательно посмотреть, как выглядят конечности персонажа, если их поместить в предельные положения. Напоследок исследованию подвергается траектория перехода от одной позы к другой, К любой анимации следует добавить еще две позы, определяющие положение до начала анимации и после ее завершения. Они не должны выпадать из анимации и, если анимация будет продолжена, обязаны плавно встраиваться в нее. Однако причиной их появления является вовсе не гипотетическая возможность расширить пределы сцены. Если анимация начинается с момента, когда персонаж .полностью неподвижен, на стыке отдельных фрагментов она будет выглядеть несколько странно. Чтобы избежать этого, начните действие до начала анимации и закончите его после ее завершения. Это гарантирует, что персонаж в первом и последнем кадрах будет «живым». Итак, у вас появится шанс реализовать план на практике. После внимательного чтения предыдущих разделов у вас должно было сложиться мнение о нашем персонаже. Если вы еще плохо представляете себе Крутана, вернитесь к началу данной главы. Впрочем, надеемся, что вы уже готовы. Мысленно засучим рукава и приступим к работе. По мере чтения следующих разделов вы будете «проникаться» процессом сборки персонажа и узнавать, что вы в состоянии с ним сделать.
Деформация модели Начнем работу с загрузки файла BreakingJerk.mb, расположенного в папке Спарters\Chapter!5 прилагаемого к книге компакт-диска. Этот файл предназначен исключительно для использования в Maya 5. Он не будет работать, например, в Maya Personal Learning Edition. Если вы еще не создали проект, имеет смысл сделать это сейчас. В принципе можно работать и с файлом, загруженным с компакт-диска, но лучше скопировать его в папку проекта. В этом случае вы сможете сохранять файл в процессе работы и будете избавлены от постоянного выбора маршрута доступа. При необходимости вы можете перечитать материалы, посвященные проектам в Maya (см. главу 2). Результат загрузки файла BreakingJerk.mb показан на ркс. 15.17. Первое, что вы заметите, — это различные сплайны на фигуре персонажа. Они выглядят как линии, параллелепипеды и окружности, созданные из кривых, Обычно в профессиональных студиях персонаж оснащается именно такими контроллерами.
Окончательный план
493
I ч» а
Рис. 15.17. Отправная точка для экспериментов по устойчивости модели к деформации
Чтобы лучше понять их назначение, рассмотрим их по очереди. Поэкспериментируем с фигурой Крутана, чтобы понять, какие именно ограничения наложены на ее движение. Можно просто начать перемещать их по отдельности и в связке друг с другом, чтобы понять, где именно модель начинает ломаться. Деформирование персонажа требуется, чтобы понять, насколько большое усилие он может выдержать в данной конфигурации. Список поз в этом случае оказывается полезным как для задания поз, так и для тестирования персонажа. В случае задания поз настоятельно рекомендуем вам устанавливать конечности персонажа в предельные положения, даже если это будет выглядеть смешно. Но если персонаж выдержит испытание в предельных позах, значит, в процессе анимации он тоже будет функционировать нормально. Не бойтесь, что будете воздействовать на персонажа слишком сильно. На данном этапе вам нужно определить предельные возможности элементов управления. Сюда входит как игра, так и оценка пространства, в котором будет двигаться ваш цифровой актер. Для просмотра результатов ваших попыток сломать персонаж лучше перейти к модели с более высоким разрешением. В диалоговом окне Channel Box (Окно каналов) вы заметите два слоя. Обычно модель с низким разрешением используется в качестве заместителя при настройке сцены, а при просмотре она заменяется модельзо с высоким разрешением. Такая схема позволяет ускорить работу пользовательского интерфейса при настройке поз и задании траектории движения. Воспроизведение результатов анимации осуществляется на модели с высоким разрешением.
494
Глава 15- Общие аспекты анимации персонажей
Если вы не помните, как работать со слоями, имеет смысл перечитать соответствующий раздел справочной документации. Впрочем, на данный момент вам вполне достаточно информации, что крайний слева квадратный значок рядом с именем слоя управляет его видимостью. Щелкните на значке с буквой V, и слой станет невидимым. Повторный щелчок возвращает его на экран. После завершения данного упражнения вы должны знать, что может делать персонаж, а что ему недоступно, а также знать о предельных положениях всех конечностей. В случае стандартных настроек обычно оказывается, что для получения нужного вам типа движения требуется поменять сборку персонажа. Однако, скорее всего, сборка Крутана окажется вполне удовлетворительной для стоящих перед нами задач. Как говорит Стив Бэйли (Steve Bailey), талант аниматора реализуется вовсе не в идеальной сборке персонажей, а в том, чтобы заставить их выглядеть достоверно и убедительно. При работе в профессиональной студии важно понимать роль технического руководителя. Благодаря выполнению этого предварительного упражнения вам будет проще объяснить, что именно должен делать персонаж, и вы сможете поделиться своими соображениями по этому поводу с техническим руководителем. СОВЕТ Имеет смысл освоить дисциплины, которые требуются, чтобы стать техническим руководителем. Обязательно прочитайте главу 17, даже если вы не собираетесь заниматься подобными вещами.
Если вы хотите стать профессионалом, важно понимать, через что приходится пройти техническому руководителю при сборке персонажей. Это поможет вам при обсуждении с ним необходимых подробностей. Знания такого рода позволяют техническому руководителю выполнять сборку персонажа с учетом нужд аниматора и с минимальными усилиями.
Элементы управления Под моделью Крутана находится сетка, которая выглядит как парящая в воздухе платформа. Название этого объекта — Jerk_MAIN_TRANSFORM. Он одновременно перемещает фигуру Крутана и все ее контроллеры (рис. : 5.18). Обратите внимание, что все контроллеры являются дочерними по отношению к контроллеру Jerk_ MAIN_TRANSFORM, который представляет собой опорную точку для перемещения Крутана в сцене. Он позволяет также убрать Крутана из сцены. В некоторых студиях этот узел называется (без шуток !)/erA Null (нуль Крутана), так как позволяет удалить персонажа из сцены. В других студиях используется название Character root (корень персонажа), так как он действительно является корневым узлом. Выделите контроллер Jerk_MAIN_TRANSFORM и нажмите клавишу W. В результате вы сможете перемещать и поворачивать персонаж, а также менять его размер. Подвигайте контроллер, чтобы посмотреть, какое действие это производит. Не имеет смысла анимировать контроллер Jerk_MAIN__TRANSFORM. Движение персонажа реализуется с помощью узлов, расположенных ниже в иерархии. Помните также, что перемещение персонажа осуществляется только посредством контроллеров.
Окончательный план
495
Рис. 15.18. Контроллер Jerk_MAIN_TRANSFORM представляет собой опорную точку для перемещения Крутана в сцене
Контроллер Jerk_CharacterMainRoot Выделите контроллер Jerk_CharacterMainRoot и исследуйте, какое действие он производит. Вам требуется диапазон перемещений, которые при деформации персонажа выглядели бы приемлемо. Сначала мы исследуем элементы управления талией и бедрами. Элемент управления талией носит название 3erk_CharacterMainRoot и представляет собой первый уровень анимации автономного персонажа, как показано на рис, 15.19. Контроллер Jerk_CharacterMainRoot можно подвергнуть только преобразованию перемещения. То же название носят элементы управления бедрами, показанные на рис. 15.20, Можно считать, что они являются аналогами пятой чакры нашего персонажа, центром его силы и движения. Перемещение этого элемента управления включает использование преобразований. Это становится ясно при выделении основного контроллера. Вы увидите, что в диалоговом окне Channel Box (Окно каналов) присутствуют только каналы, соответствующие преобразованию перемещения. Попытавшись применить инструмент Rotate (Повернуть), для активизации которого нужно нажать кла-
496
Глава 15 • Общие аспекты анимации персонажей
вишу е, вы увидите, что манипуляторы, имеющие вид сфер, становятся серыми, и их перемещение никак не влияет на положение главного контроллера или персонажа.
Рис. 15.19. Сетка, расположенная в области талии персонажа, представляет собой основной контроллер
Чтобы деформировать эту часть модели, подвигайте основной контроллер и понаблюдайте за производимым эффектом, Вы заметите, что продвижение его вверх (в положительном направлении оси У) приводит к чрезмерному удлинению ног персонажа. То есть его тело и руки перемещаются вместе с основным контроллером, в то время как ноги не зависят от него. Понятно, что с помощью основного контроллера можно двигать тело персонажа в пространстве и даже поднимать его над поверхностью. Правда, в последнем случае нужно будет позаботиться о том, чтобы ноги следовали за телом. Основной контроллер также полезен для перемещения бедер персонажа из стороны в сторону. Имейте в виду, что вы можете быстро вернуть персонак в исходную позу, выделив основной контроллер и введя в поля диалогового окна Channel Box (Окно каналов) значение 0. Результатом хорошей сборки является именно нулевое значение параметров всех контроллеров, позволяющее отменить результат любого преобразования и вернуть персонаж в исходное положение.
497
Окончательный план
;
& ъ *! = •-» <> * w V и ?" а LI
Рис. 15.20. Эта сетка расположена вместе нахождения пятой чакры и центра тяжести персонажа
Контроллер Jerk_HipsAndPartialRootControl Непосредственно над основным контроллером находится элемент управления JerkJHipsAndPartialRootControl, показанный на рис. 15.21. После выделения этого элемента управления вы увидите, что в диалоговом окне Channel Box (Окно каналов) появились поля, соответствующие преобразованию поворота. То есть вы можете не только перемещать, но и поворачивать этот контроллер. Исследуйте его влияние на вид персонажа. Обратите внимание, что перемещение контроллеров Jerk_HipsAndPartialRootControl и Jerk_CharacterMainRoot дает примерно одинаковый результат. Если переместить их вниз, Крутан согнет колени, в то время как перемещение вверх приводит к увеличению длины его ног. Отметьте также, что поворот контроллера JerkJHipsAndPartialRootControl приводит к повороту бедер. Персонаж не в состоянии их согнуть, но он покачивает ими из стороны в сторону, делая неприличные движения, как показано на рис. 15.22, Вероятно, только Крутан может быть таким вульгарным! Итак, вы поняли, как можно заставить Крутана крутить бедрами, ПРИМЕЧАНИЕ Деформации, возникающие при повороте относительно оси X на угол более чем -55° или 45°, приводят к повреждению модели. То же самое происходит при повороте относительно оси Z на угол больший, чем -25° или 25е. Кроме того, поворот таких деталей организма Крутана, как живот и ноги, ограничен относительно оси Y значением приблизительно 75°.
498
Глава 15- Общие аспекты анимации персонажей
Рис. 15.21. Стрелки указывают на контроллер Jerk^HipsAndPartialRootControl, обеспечивающий локальный поворот бедер персонажа
Рис. 15.22. Преобразования контроллера Jerk_HipsAndPattialRootControl приводят к перемещению туловища как целого, но не позволяют его сгибать
Окончательный план
499
Контроллер JerkJElvisControlBox При сборке персонажей контроллерам иногда присваивают забавные имена. По крайней мере название этого контроллера сразу дает понять, какое действие он производит. Под его влиянием персонаж имитирует движения Элвиса Пресли на сцене. Выделите узел Jerk^ElvisControlBox, показанный на рис. 15.23. Подобное действие вы уже видели ранее, но здесь оно проявляется намного явственней.
Рис. 15.23. Контроллер Jerk_ElvisControlBox
Контролер Jerk_ElvisControlBox можно подвергать только преобразованию перемещения, а его действие до некоторой степени напоминает результат применения ранее упомянутых контроллеров. Впрочем, есть и отличия. Обратите внимание, что он гибко соединяется с туловищем, как показано на рис. 15.24. То есть каждый из контроллеров позволяет имитировать какое-либо индивидуальное движение. Все преобразования этого контроллера ограничены, как и в предыдущем случае. Кроме того, перемещения вверх приводят к деформации модели в области талии, а перемещения вниз — к деформации модели в области ног. Натяжение оболочки было более гибким в случае перемещения контроллера Jerk_HipsAndPartialRootControl. Однако этот факт следует использовать с серьезными оговорками. Движение, полученное путем перемещения контроллера Jerk_ElvisControlBox вверх, вниз и даже в стороны, должно быть весьма ограниченным. Большинство людей не могут двигаться таким образом, поэтому слишком интенсивное движе-
500
Глава 15- Общие аспекты анимации персонажей
нис бедер персонажа будет выглядеть неестественно. Соответственно, используйте эти движения аккуратно и в соответствии с характером персонажа.
Рис. 15.24. Обратите внимание, что при перемещении контроллера Jerk_ElvisContro!Box вбок туловище сгибается
Контроллеры Jerk_SpineTopControlBox, Jerk_SpineMiddleControlBox и Jerk_SpineBottomControlBox Три параллелепипеда, расположенные в центре туловища, рассматриваются вместе, так как они обычно перемещаются одновременно, И позднее в данной главе мы поговорим об этой группе. Модель деформируется довольно быстро при перемещении любого из этих контроллеров в сторону или назад. Подобные движения могут произойти под руками массажиста или же при получении травмы во время игры в футбол. В сцене вам, скорее всего, они не потребуются. Полезность этих контроллеров становится очевидной, когда после их одновременного выделения вы используете преобразование поворота. Это позволяет персонажу сделать поклон вперед, отклониться назад и сгибать туловище из стороны в сторону. Помните, что выделять нужно все три контроллера одновременно. Для этого можно создать MEL-сценарий, активизируемый щелчком на кнопке полки. Достаточно открыть диалоговое окно Script Editor (Редактор сценариев), выделить все три контроллера, поочередно щелкая на них при нажатой клавише Shift, затем
Окончательный план
501
выделить появившиеся строки кода и средней кнопкой мыши перетащить их на полку. В итоге щелчок на появившейся кнопке будет приводить к одновременному выделению этих контроллеров, как показано на рис. 15.25.
Рис. 15.25. Контроллеры грудной клетки и спины обычно выделяются и перемешаются вместе
Поворот всех трех контроллеров ограничен углами -20° и 20°. Поворот на больший угол приводит к деформации модели. Бы можете сами удостовериться, что персонаж деформируется в районе груди при повороте на 25°. Это связано с тем, что человеческое тело не может повернуться так сильно. Поворот в стороны также позволяет Крутану без проблем перемещать тело примерно на 20°. При больших углах модель деформируется в районе плеч. Для компенсации поворота грудной клетки нужно отрегулировать положение шеи. Обратите внимание, что в диалоговом окне Channel Box (Окно каналов) доступны параметры масштабирования, то есть вы можете менять размер талии. Это позволяет имитировать эффект дыхания.
Контроллеры Jerk_mainNeckControlBox и Jerk_NeckMiddleControlBox Выделите два нижних элемента управления шеей, которые отмечены зеленым цветом. Они работают в тандеме и вместе с еще одним контроллером, расположенным выше, обеспечивают движение шеи, как показано на рис. 15.26.
502
Глава 15- Общие аспекты анимации персонажей
Рис. 15.26. Три контроллера, управляющие движением шеи, имеют зеленый цвет
После выделения обоих контроллеров преобразование Rotate (Поворот) приводит к повороту головы с хорошим уровнем контроля шэи. Предельные углы -34" и 26° дают полный диапазон вращения головы относительно оси Y. То есть персонаж кивает в знак согласия путем поворота головы относительно этой оси. Вращение из стороны в сторону относительно оси X аналогично отрицательному качанию головой. На это преобразование наложено ограничение от -8,5° до 8,5°. При превышении этого угла на шее возникают склздки и создается впечатление, что модель разрушена. Влияние на этот поворот оказывает еще один контроллер, который мы рассмотрим в следующем разделе. Самостоятельно исследуйте пределы вращения контроллеров Jerk_mainNeckContralВох и Jerk_NeckMiddleControlBox. Вы получите представление о том, как может двигаться персонаж и как это соответствует вашему плану анимации. Поворот относительно оси Z не оказывает влияния на целостность модели. Его результат может выглядеть неестественно, но не г.риведет к появлению разломов. Поворот относительно оси Y усиливается при добавлении к выделенному набору контроллера Jerk_headControlBox. Но об этом мы поговорим в следующем разделе. Кроме того, при достижении предельного угла поворота текущего выделенного набора можно выделить и повернуть контроллер JerkJieadControlBox на дополнительный небольшой угол, не деформируя модель.
Окончательный план
503
Контроллер Jerk_headControlBox Этот элемент управления перемещает голову, как единый модуль. Обратите внимание, что движением головы управляют несколько контроллеров, но только один из них перемещает ее целиком. Контроллер Jerk_head Control Box допускает перемещение, поворот и масштабирование. Однако для персонажа имеет значение только преобразование поворота. Преобразование перемещения пригодится лишь в случае, если вы планируете анимацию в мультяшном стиле, в которой шея будет вытягиваться при движении головы, обычно же это не нужно. Выделите контроллер JerkJieadControlBox, убедившись, что в выделенный пабор не попал самый верхний параллелепипед, имеющий то же имя. Вы можете повернуть голову из этой точки, потому что именно таким образом поворачивается человеческая голова. На рис. 15.27 показан результат поворота контроллера Jerk_ headControlBox на 33° относительно оси Z. Так как для этого поворота не использовались остальные контроллеры, голова выглядит отсоединенной от тела.
Рис. 15.27. Результат поворота контроллера Jerk_headControlBox
Поворот контроллера относительно оси Y приводит к перемещению головы вперед и назад. Голова двигается свободно и даже проникает в тело.
504
Глава 15 • Общие аспекты анимации персонажей
Поворот относительно оси X в диапазоне от -65° до 65° проходит без проблем для модели. Выход за границы этого диапазона можно компенсировать с помощью вышеупомянутых контроллеров. Однако голова человека редко может повернуться на больший угол. А внутри этого диапазона для управления головой достаточно контроллера Jerk_headControlBox. Поворот относительно оси Z происходит равномерно до момента пересечения с телом. Это движение хотя и работает, выглядит ненатурально.
Контроллеры Jerk_headControlBox и Jerk_jawContro1Box Контроллеры Jerk__headControlBox и JerkjawControlBox также расположены в районе головы, как показано на рис. 15.28. Название одного из них совпадает с названием контроллера шеи. Их не следует путать.
Рис. 15.28. Это контроллеры головы. До выделения они синие
Эти два контроллера вам практически не придется использовать, тем не менее желательно исследовать их свойства. Освойтесь с диапазоном движений, которые могут быть полезны для вашей анимации.
Окончательный план
505
Ни один из этих контроллеров еще не задействован полностью. Существует крайне ограниченный диапазон движений, предназначенный для выражения эмоций, но в большинстве нормальных голов отдельные части не двигаются друг относительно друга. Еще раз упомянем, что эти контроллеры можно перемещать. Например, нижний регулирует положение подбородка. А если этот контроллер повернуть, то подбородок удлинится. Эти контроллеры предназначены для артикуляции, что выходит за рамки темы данной главы.
Контроллеры Jerk_frontHairControl, JerkjnidBackHairControl и 3erk_midFrontHairControl Вы можете выделить одну из этих сфер или их все и посмотреть, что происходит в результате их преобразований. Можно найти условия, соответствующие вашим планам. Однако лучше всего не трогать эти контроллеры, пока вы не приступите к имитации динамики. В данный момент вы всего лишь ищете элементы, которые помогут вам реализовать планы, и пытаетесь найти потенциальные источники будущих ошибок. Сферы, расположенные в верхней части головы, контролируются с помощью элемента JerK_headControlBox, пара атрибутов которого добавляет динамику волос. Чтобы исследовать данный аспект, введите значение 1 в поле Hair Dynamics On T диалогового окна Channel Box (Окно каналов). Для настройки динамики существует еще один атрибут — Hair Floppiness. Он управляет степенью движения волос, как показано на рис. 15.29.
Рис. 15.29. Эти сферы контролируют деформацию волос персонажа и позволяют моделировать их вторичные движения
506
Глава 15- Общие аспекты анимации персонажей
Тестирование динамики осуществляется с помощью контроллера Jerk_HeadControlBox, который задает повороты головы налево и направо путем создания нескольких ключей. При воспроизведении анимации волосы будут двигаться под действием модуля имитации динамики, Детальное рассмотрение данной функции выходит за рамки темы текущей главы, но вы можете исследовать ее самостоятельно, Итак, мы рассмотрели все контроллеры, управляющие позвоночником и головой. Обратите внимание, что их совокупное действие позволяет создать иллюзию перемещения тела персонажа. При этом не нужно создавать дополнительные ключевые кадры для костей или геометрии персонажа.
Деформация конечностей Теперь исследуем дополнительные контроллеры, начиная с ног. Так как они одинаковы на обеих сторонах модели, достаточно рассмотреть только контроллеры, расположенные слева.
Контроллер Jerk_left_reverseHeel Выделите контроллер Jerk_left_reverseHeel, как показано на рис. 15.30, и исследуйте производимый им эффект.
Рис. 15.30. Это основной контроллер, управляющий ногами и ступнями
Окончательный план
507
Вы заметите, что нога следует за ступней и сгибается в соответствии с положением последней. Этот контроллер также позволяет поворачивать ногу. Убедитесь, что выделен именно контроллер Jerk_left_reverseHeei, а не два других контроллера, расположенные на конце ступни. Перемещения контроллера Jerk_left_reverseHeel активизируют метод обратной кинематики для левой ноги и заставляют ее сгибаться в соответствии с положением пятки. Пространство для перемещений пятки достаточно велико. Проблемы начинаются, когда она подходит слишком близко к телу. Ноги не могут сгибаться таким способом, исключая редкие случаи футбольных травм, именно поэтому на модель наложено подобное ограничение. Контроллер Jerk_left_reverseHeel может осуществлять также преобразование поворота. Вращение относительно оси X перемещает ногу вдоль ее длинной оси. Этот поворот осуществляется в диапазоне от -90° до 90° и сопровождается деформациями сетки, несмотря на то, что ноги человека не могут перемещаться подобным образом. При повороте контроллера относительно оси Z ступня движется вверх и вниз. Полезный диапазон составляет от -30° до 20°. Именно в этих пределах движение остается реалистичным. При больших углах поворота из-за слишком сильной деформации нога ломается в области лодыжки. В диалоговом окне Channel Box (Окно каналов) можно задать ряд дополнительных атрибутов. Элементы управления для этого, например Auto Stretch (Автоматическое натяжение), были созданы специально для управления непрерывностью сетки при растяжении ноги. Этот атрибут помогает свободному перемещению персонажа. При исследовании перечисленных элементов управления действуйте не спеша, Меняйте по одному параметру за раз, чтобы четко понять, какой эффект при этом возникает. Если поменять слишком много параметров одновременно, будет сложно понять их действие.
Контроллер Jerk_Jeft_reverse_ball Следующий контроллер расположен в центре ступни и носит название Jerk__ left_reverse_ball. В диалоговом окне Channel Box (Окно каналов) видно, что его можно подвергнуть только преобразованиям поворота. Это преобразование позволяет перемещать пятку вверх, а колено вперед, как показано на рис. 15,31. Поворот относительно оси Z приводит к перемещению пятки вверх, что смотрится достоверно, пока угол не превышает 57°. После этого на подушечках пальцев и собственно пальцах появляются складки. Предельный угол поворота в противоположном направлении составляет -10°. После этого возникает ощущение, что нога не является непрерывной. Любой поворот относительно оси Y выглядит неестественно. Неестественность заключается в том, что контроллер приводит к повороту ноги, как целого. Всякий раз, когда персонаж оснащен избыточным количеством элементов управления, имеет смысл заранее решить, какие из контроллеров будут использоваться. Это позволяет ускорить процесс отладки и поиска ошибок. Поэтому ограничим элементы управления поворотом стопы контроллером Jfrk_left_reverseHeel.
508
Глава 15- Общие аспекты анимации персонажей
Рис. 15.31. Контроллер Jerkjeft_reverse_ball допускает только преобразование Rotate
Контроллер Jerkjeft_reverse_toe Третий контроллер стопы расположен на ее конце и называется Jerk_left_reverse_toe (рис. 15.32). Он поворачивает стопу вокруг точки присоединения пальцев. Данное преобразование имеет смысл производить относительно оси Y в диапазоне от -20° до 37°. Поворот относительно оси Z в диапазоне от -37° до 37е также выглядит достаточно приемлемо. Превышение этих значений приводит к перелому голени. Мы не будем поворачивать этот контроллер относительно оси X, так как за этот поворот отвечает контроллер Jerk_left_reverseHeel.
Контроллер JerkjeftJegPoleVector Контроллер Jerkjeftjeg Pole Vector описывает ключевые элементы управления ногой. Здесь следует сделать небольшое отступление. Вектор полюса управляет направлением колена. Он помоглоi решателю обратной кинематики согнуть ногу в нужной плоскости.
Окончательный план
509
Рис. 15.32. Для контроллера Jerkjeft_reverse_toe определено только преобразование Rotate, то есть вы не сможете перемещать пальцы независимо от ноги
Контроллер JerkJeftjeg Pole Vector выглядит как шип, выходящий из бедренной кости (рис. 15.33). После его выделения в диалоговом окне Channel Box (Окно каналов) видно, что для него определены только преобразования поворота, а также атрибут Visibility (Видимость). Смысл имеет в основном поворот относительно оси Y, так как он ориентирует колено в том же направлении, что и кость. В результате появляется простой способ контролировать направление сгиба ноги. Поворот относительно других осей практически не влияет на направление решателя обратной кинематики. Используйте контроллер JerkJeftJegPoleVector для ориентации ноги, Теперь пришло время рассмотреть контроллеры, управляющие руками, кистями и плечами персонажа. Мы будем ломать персонажу руки и наблюдать, как на это отреагируют кисти и плечи.
Контроллер Jerk_Jeft_armIk Параллелепипед, расположенный в области запястья персонажа, является контроллером Jerk_left_armlk (рис. 15.34). Он оснащен тщательно разработанными решателем обратной кинематики и деформатором плеча. Чтобы убедиться в их наличии, выделите контроллер и подвигайте его в направлении оси Z. Обратите внимание, как при этом будет перемещаться плечо.
510
Глава 15 • Общие аспекты анимации персонажей
Рис. 15.33. Контроллер JerkJeftJegPoleVector выглядит как шип, торчащий из бедра персонажа
Человеческое плечо представляет собой вращательный сустав, но может слегка скользить вперед или назад. Это крайне сложное движение, и техническому руководителю придется немало потрудиться, чтобы его автоматизировать. Но в нашем случае персонаж оснащен хорошей версией данною перемещения, что облегчит наш с вами труд. Чтобы деформировать руку, нужно переместить контроллер Jerkjeft_armlk таким же способом, как это происходит в реальном мире. Смотрите поверх плеча при перемещении контроллера относительно оси Z. В данном случае плечо работает достаточно хорошо. Однако в какой-то момент дальнейшее движение становится невозможным. Например, рассмотрим ситуацию, когда рука перемещается вдоль оси Z до момен га начала растяжения. После этого к ней добавляется движение по направлению к телу, вдоль оси X, Это ведет к скручиванию и деформации руки и плеча. Важно отметить, что когда рука поднимается над плечом, на груди чуть ниже подмышки появляются бугры. Это можно использовать в кадрах, в которых данная сторона персонажа скрыта. При непосредственном просмотре подобное зрелище не слишком привлекательно.
Окончательный план
511
Рис. 15.34. Контроллер Jerk_left_armlk влияет на положение запястья и поворот руки
Так как каш персонаж не собирается поднимать руки над головой, его оснастка будет работать до тех пор, пока мы остаемся в обозначенных пределах. В противном случае нам пришлось бы редактировать сборку персонажа. Контроллер Jerk_left_armlk также поворачивает руку в области запястья. Рука персонажа может быть повернута в любое положение с помощью элементов управления поворотом. Вращение будет осуществляться относительно положения руки, поэтому четких правил по поводу предельных углов поворота нет. Можно без деформаций поворачивать руку персонажа в диапазоне, недоступном реальной человеческой руке. Так что об этом можно не беспокоиться. В диалоговом окне Channel Box (Окно каналов) доступны параметры решателей Auto Stretch (Автоматическое натяжение) и Shorten Tolerance (Сниженная устойчивость). Оставьте для них заданные по умолчанию значения. Скручивание приводит к некрасивому результату, поэтому мы не будем его использовать. Вектор полюса лучше применять для задания угла плеча по отношению к локтю. Контроллеры, управляющие пальцами, практически идентичны, поэтому мы рассмотрим только контроллер JerkJeft_pinkyFinger_4.
Контроллер Jerk_left_pinkyFinger_4 В диалоговом окне Channel Box (Окно каналов) для каждого из контроллеров, управляющих пальцами, доступны преобразования поворота, действие которых несколько отличается от обычного задания положения при создании ключевых кадров (рис. 15.35).
512
Глава 15* Общие аспекты анимации персонажей
Рис. 15.35. Поворот пальцев осуществляется путем выделения контролпера Jerk_left_pinkyFinger_4 и настройке его атрибутов в диалоговом окне Channel Box
Но сначала давайте не будем перемещать этот параллелепипед, так как это приводит к движению в мультяшном стиле, когда пальцы могут вытягиваться на произвольную длину. Подобное движение применяется только в особых случаях, как, например, в фильме Тех Avery (Тэкс Эйвери), но для нашего проекта это совершенно не нужно. Впрочем, для контроллера Jerk_left_pinkyFinger_4 определено и преобразование поворота. Но это преобразование мы тоже не будем использовать, так как поворот пальцев выглядит ненатурально. Подобное движение приемлемо только в таких фильмах, как The Exorcist (Изгоняющий дьявола). Таким образом, вы будете контролировать только "ри атрибута контроллера Jerk_left_pinkyRnger_4: Knuckle Curl (Сгиб у ладони), Middle Curl (Сгиб в центре) и End Curl (Сгиб на конце). Они управляют сгибом пальцев в суставах. Чтобы задать ключи анимации для этих атрибутов, нужно выделить их имена в диалоговом окне Channel Box (Окно каналов). Затем поместите указатель мыши в окне проекции и перемещайте его при нажатой средней кнопке. Это приведет к повороту пальца относительно корректной оси и позволит вам поместить палец в нужное положение. После этою достаточно щелкнуть правой кнопкой мыши па имени выделенного атрибута и выбрать в появившемся меню команду Key Selected (Создать ключи анимации для выделенных параметров).
Окончательный план
513
Имейте в виду, что для возвращения в исходное положение достаточно выделить все упомянутые атрибуты и ввести в поля значение 0.
Контроллер Jerk_left_armPoleVector Фоновый объект Jerk_left_armPoleVector является вектором полюса (рис. 15.36).
Рис, 15.36. Расположенная отдельно «кость» представляет собой контроллер Jerk_left_armPoleVector, который задает направление локтя
Этот объект управляет ориентацией локтя и позволяет независимо контролировать положение этой части тела. Его действие слегка отличается от действия вектора полюса, управляющего положением ноги, но по сути он выполняет ту же функцию. Контроллер Jerk_left_armPole Vector можно поместить в произвольном месте окна проекции. Надо помнить, что он может оказать разрушительный эффект на руки Крутана. Он позволяет, к примеру, выворачивать локоть наизнанку, что придает персонажу весьма странный вид. Следовательно, применять этот контроллер нужно очень аккуратно.
Контроллер JerkJeft_clavicleControlNode Ну и напоследок рассмотрим контроллер JerkJeft_davicleControlNode, оснащенный не только атрибутами перемещения и поворота, но и атрибутом скручивания, как показано на рис. 15. 37. Здесь важно, чтобы движения плеч были убедительными.
Глава 15* Общие аспекты анимации персонажей
514
Рис. 15.37. Поворот относительно оси Z управляется контроллером JerkJeft_clavicleControlNode
Впрочем, мы не рекомендуем вам пользоваться этими атрибутами, потому что. скорее всего, это приведет к искажению фигуры персонажа. Тем не менее исследуйте пределы движения и эффект от поворота плеча совместно с рукой. Теперь, когда вы познакомились со всеми контроллерами, для вас не должна составить труда анимация персонажа и понимание ограничений, наложенных на различные перемещения.
Задание поз В этом разделе вам предстоит применить полученные знания на практике. В результате ваших усилий Крутан должен научиться принимать намеченные позы.
Упражнение 15.1. Подготовка к заданию поз персонажа в соответствии с планом Начнем задание поз с настройки ранее исследованных контроллеров. 1. Загрузите файл JerkRiggedBase.mb с прилагаемого к книге компакт-диска. Если вы снимаете в движении, начать следует с разделения на блоки. То есть персонаж нужно поместить в положение, заданное с помощью масштабного рисунка, указав время, в которое он должен там быть. Пока еще рано задавать
Задание поз
515
позы персонажа, нужно всего лишь синхронизировать отдельные перемещения в пространстве. Часто полезно ориентировать персонаж в правильном направлении на каждой временной отметке. Этот процесс несколько отличается от того, чем мы сейчас займемся, но вам еще предстоит столкнуться с ним в дальнейшем. Для стационарных кадров, в которых имеет место минимальное движение, персонаж можно анимировать практически на месте. Представим, что Крутап изначально помешен в центр действия. Потом полученную анимацию можно будет соединить с финальной сценой. Но в процессе анимации в качестве элементов финальной сцены будут фигурировать объекты-заместители. Например, автомобили, расположенные справа и слева от Крутана, будут выглядеть как простые параллелепипеды. Можно предположить, что за размещение заместителей в сцене отвечают ассистенты, поэтому вы сразу можете приступить к работе. Однако человеку свойственно ошибаться. Поэтому перед тем как начинать анимацию, желательно убедиться, что все заместители расположены на нужных местах. 2.
Переместите изображение в окне проекции Persp (Перспектива) таким образом, чтобы получить Крутана, на три четверти повернутого к вам левой стороной, и дайте общий план. Общим планом называется кадр, в котором тело персонажа или объект видно целиком. Этот кадр должен соответствовать выбранным вами углу и фокусному расстоянию камеры. Один из принципов компьютерной анимации Лассетера гласит «Анимируйте для камеры». Из этого следует несколько выводов, но важнее всего тот, который гласит, что вы должны четко представлять, где в кадре располагается камера. В реальности ее положение определяет кто-нибудь из художественного отдела или, к примеру, кинематографист. Но вам придется делать это самостоятельно. В Maya вы создаете камеру, через которую будет визуализирована сцена. Вам следует беспокоиться только о том, что в нее видно, потому что если камера не нацелена на реальное действие, его можно считать потерянным.
ПРИМЕЧАНИЕ Для определения направления позы и действия должна использоваться только одна камера. Именно она отвечает за позы и мимику персонажа в сцене. Под мимикой подразумеваются действия, выполняемые в ходе других, более масштабных действий. Например, Хэмфри Богарт (Humphrey Bogart) использовал лицевой тик, чтобы показать свое раздражение. Камеру окна проекции Persp (Перспектива) можно применять для отслеживания перемещений в сцене и редактирования, в то время как камера, через которую показывается итоговая сцена, должна быть зафиксирована в определенной позиции.
3. Создайте объект Render Camera, открыв диалоговое окно Outliner (Структура), скопировав камеру окна проекции Persp (Перспектива) путем нажатия комбинации клавиш Ctrl+d и присвоив ей новое имя. 4. Теперь нужно выбрать положение и ориентацию новой камеры с помощью по лей преобразования в диалоговом окне Channel Box (Окно каналов). Выделите измененные поля, щелкните на них правой кнопкой мыши и выберите в появив
516
Глава 15 • Общие аспекты анимации персонажей
шемся меню команду Lock Selected (Блокировка выделенного набора). Это предохранит камеру от случайных перемещений. 5. Выберите в меню активного окна проекции команду Panels > Perspective > Render Camera (Панели > Перспектива > Render Camera), чтобы увидеть сцену через камеру Render Camera. Для возвращения к предыдущей проекции выберите там же команду Panels > Perspective > Persp (Панели > Перспектива > Persp). Таким способом вы можете перемещать персонаж в окне центральной проекции и возвращаться к зафиксированной проекции по вашему собственному желанию. Проверяйте любые изменения позы персонажа в окне проекции Render Camera. Название камеры, через которую вы смотрите на данный момент, написано в нижней части окна проекции. Убедитесь, что в окне: проекции Render Camera позы и действия персонажа выглядят приемлемо. 6. Выберите в меню команду Window > Rendering Editor:; > Render Globals (Окно > Редакторы визуализации » Общие параметры визуализации). В появившемся диалоговом окне раскройте раздел Image File Output (Файл с выходным изображением) и в раскрывающемся списке Camera (Камера) выберите вариант Render Camera.
Упражнение 15.2. Создание ключей анимации для поз Переход от одной позы к другой начинается с первого кадра анимации. Для выбора кадра можно воспользоваться ползунком таймера анимации, а можно напрямую ввести нужное число в поле Current Time (Текущий кадр), расположенное справа от ползунка. На этой стадии проще всего редактировать персонаж в окне проекции Persp (Перспектива) при его максимально возможных размерах. 1. Загрузите файл JerkRiggedBase.mb с прилагаемого к книге компакт-диска. Даже если эта сцена была открыта у вас в предыдущем упражнении, откройте ее заново. Это поможет избежать неожиданных странностей. Персонаж должен быть доступен для анимации по методу обратной кинематики. Помните, что выделять нужно исключительно контроллеры. Иногда имеет смысл выбрать в меню Show (Показать) окна проекции сначала команду None (Ничего), а затем команду NURBS Curves (NURBS-кривые). В итоге видимыми останутся только контроллеры, которые являются NURBS-кривыми. Так как они имеют нулевую толщину, они не визуализируются. 2. Убедитесь, что вы видите все контроллеры и, нажав клавишу Shift, «нарисуйте» вокруг них рамку выделения. 3. Откройте диалоговое окно Script Editor (Редактор сценариев). Для этого достаточно щелкнуть на одноименной кнопке, расположенной справа в командной строке. 4. Выберите в меню Edit (Правка) диалогового окна Script Editor (Редактор сценариев) команду Clear All (Удалить все), как показано на рис. 15.38. Это удалит всю информацию из окна редактора сценариев.
517
Задание поз
5.
Щелкните в любой точке окна проекции, чтобы снять выделение с контроллеров. Вы увидите, что в диалоговом окне Script Editor (Редактор сценариев) появится вызов-функции снятия выделения: select -cl
6. Снова выделите контроллеры, удерживая нажатой клавишу Shift и «нарисовав» рамку выделения. Результат этих действий в диалоговом окне Script Editor (Редактор сценариев) показан на рис. 15.39.
SHAPI
Jwh OUTPI
Layers
Рис. 15.38. Эта команда удаляет из диалогового окна Script Editor информацию о ранее выполненных командах
7. Теперь выделите две MEL-команды и, используя среднюю кнопку мыши, по очереди перетащите их на полку, как показано на рис. 15.40. Приложение распознает вашу попытку создать ME L-команду и поместит на полку кнопку, щелчок на которой приводит к повторному вызову только что выполненного вами сценария. 8. Протестируйте новую кнопку, снимая выделение с контроллеров и выделяя их снова. Теперь, когда вы понимаете, как работает этот механизм, пора двигаться дальше. Диалоговое окно Script Editor (Редактор сценариев) можно закрыть. 9. Выберите в меню Show (Показать) окна проекции команду АИ (Все). Но перед тем как приступить к процессу задания поз, нужно вспомнить, как создаются ключевые кадры и как это влияет на выбранный метод анимации.
518
Глава 15 • Общие аспекты анимации персонажей
Рис. 15.39. В диалоговом окне Script Editor результатом вь деления всех контроллеров одновременно является одна строка на языке MEL
f '•;
Рис, 15.40. Копирование сценария на полку
Задание поз
519
Создание ключей Компьютер никогда не будет достаточно мощным, чтобы аниматор мог позволить себе небрежность. Поэтому при создании ключей анимации так важно исследовать альтернативы. Ключи можно создавать различными способами, но при этом получаются различные результаты. Кроме того, выбранный способ влияет на время реакции интерфейса, что жизненно важно для большинства аниматоров, В Maya существует множество способов задания ключевых кадров. Например, можно просто выделить объект и нажать клавишу s. В результате появятся ключевые кадры для всех атрибутов, доступных в диалоговом окне Channel Box (Окно каналов): перемещения, поворота, масштабирования и видимости. То есть, чтобы контролировать только один вид преобразований, нужно проделать дополнительные действия. Схожие результаты можно получить, включив функцию Autokey (Автоключ) путем щелчка на кнопке со значком ключа, расположенной в правой части временной диаграммы. Так вы тоже зададите ключевые кадры для всех атрибутов в диалоговом окне Channel Box (Окно каналов). Следует помнить, что функция Autokey (Автоключ) создает ключи анимации для всех объектов, которые в текущем кадре были перемещены. Забыв поменять номер кадра, вы замените одну позу другой и даже не заметите этого. Именно поэтому данную функцию иногда называют «автоматическим разрушителем сцены», Можно также выделить нужные атрибуты в диалоговом окне Channel Box (Окно каналов) и щелкнуть на них правой кнопкой мыши, чтобы вызвать меню, позволяющее задать ключевые кадры. В итоге ключи анимации будут созданы только для нужных вам атрибутов. Единственная проблема состоит в том, что вам придется намного больше двигать мышью, что повышает шанс вывихнуть себе кисть, По этим причинам предпочтительней использовать клавишу Shift. Чтобы создать ключи анимации только для преобразования Move (Перемещение), нажмите комбинацию клавиш Shift+w. Ключи анимации для преобразования Rotate (Поворот) создает комбинация клавиш Shift+e, а за ключи анимации для преобразования Scale (Масштабирование) отвечает комбинация клавиш Shift+r. Эта методика позволяет не слишком «напрягать» интерфейс Maya и задать ключи анимации только для необходимого преобразования. В упражнении данного раздела вы начнете придавать Крутану разные позы Помните, что несмотря на некоторую гипертрофированность его движений, они все равно должны сохранять реалистичность. Но если вы хотите придать персонажу более гротескный вид, вы можете увеличить пределы перемещения конечностей.
Упражнение 15.3. Принятие позы Для начала загрузите файл JerkR.iggedBase.mb с прилагаемого к книге компакт-диска. Если он у вас уже открыт, загрузите его еще раз, чтобы гарантировать корректность начальной позы персонажа. Начните работу с задания центра тяжести (как уже отмечалось, именно в этом месте располагается пятая чакра). Методологии:' задания поз можно описать словосочетанием «изнутри наружу». Под этим имеется в виду, что сила должна следовать из источника к центру тяжести. Затем по оче-
520
Глава 15 • Общие аспелы анимации персонажей
реди обрабатываются все контроллеры. В упражнении этот процесс показан на примере одной позы. 1. Выделите узел Jerk_CharacterMainRoot и нажмите клавишу w для перехода в режим преобразования Move (Перемещение). Отрегулируйте положение центра тяжести персонажа в первой позе. Поза, над которой вам предстоит работать, показана на рис. 15.41.
Линия действия позы
Рис. 15.41. Используйте этот рисунок, чтобы придать Крутану первую позу
На рисунке хорошо виден угол поворота бедер. Установим персонаж в эту позу. 2. Сначала нужно переместить бедра таким образом, чтобы центр тяжести располагался над правой ногой, поддерживая вес персонажа. При этом желательно перейти к стандартному четырехоконному предстанлению, как показано на рис. 15.42, чтобы видеть все проекции персонажа одновременно. 3. Поверните контроллер Jerk_HipsAndPartialRootControl, чтобы развернуть бедра и придать им угол в соответствии с опорным рисунком (рис. 15.43). Теперь от бедер перейдем к груди. 4. Выделите три параллелепипеда, контролирующие грудную клетку. Поверните их относительно оси Z, чтобы обеспечить соответствие с опорным рисунком. При этом правое бедро поднимается, а левое — опускается. Кроме того, плечи тоже располагаются под углом. Угол плеч обычно дополняет угол бедер. Используйте преобразование перемещения, чтобы протестировать полученный результат. Наш вариант персонажа показан на рис. 15.44. Далее нужно отредактировать поворот ног и колен,
521
Задание поз
РИС. 15.42. Это представление позволяет видеть все четыре проекции персонажа в процессе позиционирования его бедер
' я | 5 it, г.* г, • и 1 в'
т ,« j. ,~ ш ,, ,„ и » я. « (т |» » ,
Рис. 15.43. Контроллер Jerk_HipsAndPartialRootControl позволяет изменить угол поворота бедер
522
Глава 15* Общие аспекты анимации персонажей
Рис. 15.44. Поворот груди в соответствии с опорным рисунком
5. У персонажа на рисунке правая нога указывает прямо, в то время как левое колено повернуто вправо по отношению к плоскости экрана. Чтобы получить подобный эффект, выделите контроллер JerkJeftJegPoleVoctor и поверните его относительно оси Y, как показано на рис 15.45. Для поворота относительно оси Y нужно выделить соответствующий атрибут в диалоговом окне Channel Box (Окно каналов) с последующим перемещением в окне проекции указателя мыши при нажатой средней кнопке. Теперь нужно отрегулировать положение левой ноги. 6. Выделите контроллер Jerk_left_reverseHeel и тоже поверните его относительно оси Y. Кроме того, переместите ногу относительно осей X и Z, чтобы сделать позу более свободной, как показано на рис. 15.46. Пока что ноги выглядят слишком прямыми и даже слегка напряженными. Чтобы избавится от этого эффекта, воспользуйтесь контроллером Jerk_CharacterМа in Root. 7. Выделите контроллер Jerk_CharacterMainRoot и переместите его вниз и немного назад, чтобы придать ногам более натуральный вид, как показано на рис. 15.47. Теперь отрегулируем поворот бедер, чтобы сделать его более естественным. 8. Поверните бедра, перетаскивая контроллер Jerk_HipsAndPartialRootControl. В результате тело будет расположено под более естественным углом, как показано на рис. 15.48. Обратите внимание, что в итоге поза стала открытой по отношению к камере. 9. Выделите три контроллера на груди и разверните груд.ъ по направлению к камере. Обратите внимание, что на опорном рисунке плечи и бедра наклонены в разные стороны. Этот эффект можно получить с помощью контроллеров, управляющих положением груди. Наш вариант позы показан на рис. 15.49.
523
Задание поз
Рис. 15.45. Поворот контроллера JerkJeftJegPoleVector
Vi "jii•••»•"«"«"•»" • ' я "и" «
™ 'ni 1 ;n « 'i* M " «"м
™ «"|M" '»
Рис. 15.46. Эта поза получена в результате преобразований Move и Rotate контроллера JerkJeftj-everseHeel
524
Глава 15 • Общие аспекты анимации персонажей
Рис. 15.47. Фигура после изменения положения контроллера Jerk_CnaracterMainRoot
Рис. 15.48. Небольшое изменение поворота бедер с помощью контроллера Jerk_HipsAndPartialRootControl
525
Задание поз
Рис. 15.49. С помощью трех контроллеров груди положение туловища было изменено
Так как за плечами следуют руки, пришло время заняться их контроллерами. 10. Для начала используйте контроллер Jerkjeft_armlk, чтобы придать левой руке такое же положение, как и на опорном рисунке. Затем таким же способом переместите другую руку (рис. 15.50).
V":"T", ' Hpt-bwn "•;T "Свинят.
Рис. 15.50. Контроллер Jerkjeft_armlk и его аналог с другой стороны служат для задания положения рук персонажа
526
Глава 15 • Общие аспекты анимации персонажей
И, Руки пока не следуют направлению запястья и выглядят безвольно. Чтобы исправить ситуацию, снова выделите контроллер Jerkjeft_armlk и перейдите в режим преобразования поворота. Поворот этого контроллера управляет направлением руки. Придайте ей нужное положение, как показано на рис. 15.51.
Рис. 15.51. Положение рук скорректировано путем поворота контроллеров Jerk_left_armlk и Jerk_right_armlk
12. Чтобы придать нужное положение локтям, используйте контроллер Jerk_right_ armPoleVector. Его положение определяет направление локтя. Это значит, что у вас есть возможность контролировать сгиб руки, как показано на рис. 15.52. Результат корректировки показан на рис. 15.53. Поза уже приобрела характерные черты, но положение плеч все еще нужно корректировать. 13. Выделите контроллер плеча Jerk_left_clavicleControlNode и поверните его, регулируя положение плеча в окне проекции. Игнорируйте эффект, оказываемый на руки, их положение вы скорректируете чуть позже. Попытайтесь путем перемещения плеч передать вес и силу позы. Результат нашего редактирования показан на рис. 15.54. Перемещение плеч отрицательно сказалось на положении рук, но это можно исправить. Результат показан на рис. 15.55. 14. Напоследок остается отрегулировать положение головы. Используйте для этого три зеленых контроллера, расположенных в области шеи. Они позволяют повернуть голову и достичь сходства с опорным рисунком (рис. 15.56). Готовая версия персонажа находится в файле JerkPoselFinished.mb на прилагаемом к книге компакт-диске.
527
Задание поз
Итак, вы узнали, как задать позу в соответствии с опорным рисунком. Для некоторых этот процесс может оказаться в новинку, но остальные, несомненно, признают подобную практику работы с персонажами вполне приемлемой и достаточно простой.
Рис, 15.52. Контроллер Jerk_right_armPo1eVector используется для корректировки направления сгиба руки
Рис. 15.53, Сгиб руки скорректирован в соответствии сонорным рисунком
528
Глава 15* Общие аспекты анимации персонажей
Рис. 15.54. Перемещение плеч сделало позу более выразительной
Рис. 15.55. Это положение рук достигнуто путем преобразований контроллера JerkJefLarmPoleVector
Если вы считаете, что это легко, переходите к следующим позам. Если же вам было сложно, повторение данного упражнения для различных поз поможет вам почувствовать уверенность в своих силах.
S29
Задание поз
Рис. 15.56. Регулировка положения головы завершает работу над первой позой персонажа
Упражнение 15.4. Синхронизация поз В этом упражнении, перед тем как перейти ко второй позе, вы скопируете ключи из первого кадра во второй. Это нужно, чтобы гарантировать, что все созданные ключи будут присутствовать в следующем кадре. Позднее, когда вы начнете распределять ключи анимации во времени, может возникнуть проблема, если в каком-то из кадров какой-нибудь из них окажется неопределенным. 1. Придав Крутану нужную позу, убедитесь, что ключевые позы заданы для всех нужных вам параметров. Только в первом кадре обычно выделяют все контроллеры при нажатой клавише Shift или щелкают на кнопке с соответствующим MEL-сценарием, расположенной на полке, а затем задают ключи анимации для перемещений и поворотов. Это делается потому, что если впоследствии переместить контроллер, не имеющий ключа анимации в первом кадре, поза в первом кадре будет автоматически заменена новой. 2. Чтобы проверить ключи анимации в первом кадре, перейдите к трехоконному представлению. При этом вверху должны расположиться окно проекции Persp (Перспектива) и диалоговое окно Hypergraph (Просмотр структуры), а внизу — диалоговое окно Graph Editor (Редактор анимационных кривых). Кнопки i:o стрелками, предназначенные для выбора нужного окна, находятся в нижней части панели инструментов у левой стороны экрана (рис. 15.57). Щелкните на кнопке в нижней части панели, имеющей удвоенную ширину, и выберите в появившемся меню команду Dope Sheet (Монтажный стол). Результат показан на рис. 15.58.
530
Глава 15 • Общие аспекты анимации персонажей
ЫЩ*т~--"^*]ж=г I s^ Thiiia 'bufct:o*i С— ""ч dj.aplciy н-iiei ^p sec: 2 Pe|: ^SM" anfii
the
Рис. 15.57. Щелчок на этой кнопке приводит Maya к трехоконному представлению; удобному для задания ключей анимации
Рис. 15.58. Диалоговое окно Graph Editor заменено окном Dope Sheet
Диалоговое окно Dope Sheet (Монтажный стол) применяется профессиональными аниматорами для натроики параметров синхронизации групп объектов или
Задание поз
531
всей сцены. Его преимущество состоит в том, что все действия рассматриваются как один линейный элемент с достаточно простыми элементами управления. В строках показано распределение атрибутов во времени, в то время как столбцы иллюстрируют наличие ключей в одном кадре. Это аналог таблицы в терминах ключей, помогающий упорядочить сцену. Однако существует ограничение на работу с этим диалоговым окном. Выделение строки Dopesheet Summary (Сводка) не гарантирует охвата всех узлов сборки персонажей. То есть у вас могут появиться плавающие узлы, для которых не существует ключей анимации, как показано на рис, 15.59. Это становится проблемой при попытке задать ключ анимации для атрибута, для которого он ранее не существовал. Такая попытка приведет к тому, что все предыдущие кадры будут иметь одно и то же значение анимируемого параметра
Рис. 15.59. Выделенные ключи (более светлые) в таблице диалогового окна Dope Sheet не означают выделения вложенных узлов или узлов, для которых не существует ключей анимации
3. Чтобы задать ключи анимации, как показано на рис. 15.60, убедитесь, что у вас выделены нужные контроллеры и по очереди нажмите комбинации клавиш Shift+w и Shift+e. Последнее приведет к появлению сообщения об ошибке, так как вы задаете поворот защищенных атрибутов. Игнорируйте его. Ключи пона добятся вам на следующем шаге. 4. Ключи анимации необходимо выделить, чтобы скопированным оказался весь комплект. Для этого достаточно выделить в левой части диалогового окна Dope Sheet (Монтажный стол) строку Dopesheet Summary (Сводка) и воспользоваться вертикальной полосой прокрутки, как показано на рис. 15.61.
532
Глава 15 * Общие аспекты анимации персонажей
Рис. 15.60. Эти ключи созданы для ранее не имевшего ключей анимации набора, а значит, все контролируемые атрибуты теперь имеют предсказуемые значения (светло-серый цвет показывает, что в момент создания ключей эти атрибуты были равны нулю)
Рис. 15.61. Теперь все ключи анимации выделены
533
Задание поз
5. Щелкните правой кнопкой мыши в правой части диалогового окна Dope Sheet (Монтажный стол) и выберите в появившемся меню команду Edit > Copy (Правка > Копировать), чтобы продублировать все ключи анимации, заданные в первом кадре. Визуально в диалоговом окне Dope Sheet (Монтажный стол) ничего не изменится. 6. Перейдем к кадру 2. Это можно сделать, перетащив мышью ползунок таймера анимации на отметку этого кадра. Для наглядности поменяйте пределы диапазона анимации, установив его равным 10 кадрам. 7. Снова щелкните правой кнопкой мыши в правой части диалогового окна Dope Sheet (Монтажный стол) и выберите в появившемся меню команду Edit > Paste (Правка * Вставить). Это приведет к копированию ключей из буфера во второй кадр. После этого оба кадра будут иметь одинаковые ключи для всех контроллеров, как показана на рис. 15.62. Замечательно! Теперь все готово для установки Крутана в новую позу во втором кадре.
DbBw ,-j-
Рис. 15.62. Успешно скопированные в кадр 2 ключи анимации полностью идентичны ключам кадра 1
Нужно убедиться, что для позы Крутана существуют все ключи анимации. Для этого перетащите ползунок таймера анимации на отметку первого кадра, а затем верните его на отметку второго. Если вы пропустили какой-нибудь ключ, отредактируйте позу и создайте его. После установки персонажа во вторую позу повторите описанную в упражнении процедуру для копирования ее в третий кадр и начинайте работу над тре-
534
Глава 15 • Общие аспекты анимации персонажей
тьей позой. То есть основная идея метода состоит в том, что каждая предыдущая поза является отправной точкой для следующей. Это гарантирует, что в будущем вы не обнаружите плавающих атрибутов. Ваше спокойствие стоит дополнительных усилий. Продолжайте, пока все позы от первой до пятой не будут готовы. Готовый вариант анимированного персонажа находится в файле JerkSPoses.mb. Вы можете использовать его как опорный материал. Теперь нужно добавить начальную и конечную позы. Они используются, чтобы создать у зрителя впечатление, что персонаж двигался до момента начала сцены и не прекратил движения после ее завершения. Вы, наверное, слышали о необходимости монтажа. Именно поэтому анимацию нужно продолжить в обе стороны, анимировав персонаж до и после показываемой сцены. В качестве опорного материала можно использовать файл 7PosesJerk.mb, расположенный в папке Chapters\Chapterl5 прилагаемого к книге компакт-диска, Хорошим практическим правилом создания подобных поз является рекомендация Тома Марша (Tom Marsh): HOC двуногого персонажа должен располагаться над шнурками богинкалпорной ноги. Том Марш — гений в рисовании фигур. Он преподает в колледже академии искусств. И его совет весьма уместен и своевременен. Когда Крутан переносит центр тяжести на правую ногу, его голова должна следовать в том же направлении. Это достигается путем поворота контроллеров туловища. Задавайте ключи для контроллеров, чтобы получить нужную позу. Помните, что позы должны быть четкими. Используйте альфа-канал, чтобы убедиться в этом, После того как установка персонажа окончена, убедитесь, что все ключи созданы. Затем можно перейти к следующей позе. Вот краткий перечень шагов, которые вам нужно предпринять. 1. Задайте позу персонажа. 2. Скопируйте ее в диалоговом окне Dope Sheet (Монтажный стол). 3. Отредактируйте ключи анимации контроллеров, управляющих положением персонажа. 4. По очереди проделайте это для всех поз.
Временные интервалы Теперь пришло время отрегулировать временные интервалы с помощью диалогового окна Dope Sheet (Монтажный стол). Для синхронизации действий будут использованы опорные материалы и окончательный план. Нам требуется, что действие развивалось медленно во время попытки опустить монетку и ускорялось, когда собака бросается на Крутана. Поиск монетки в воображаемом кармане происходит медленно, потом Крутан находит ее и ускоряет темп. Он без проблем достигает счетчика, но Клякса прыгает на него, и Крутан в ужасе отскакивает. Самым быстрым движением в анимации должно быть именно это отскакивание назад.
Задание поз
535
Самое время вспомнить о двух дополнительных позах, одна из которых должна приниматься до начала действия, а вторая — после его завершения. Вполне может оказаться, что он оглядывался на контролера, прежде чем начал искать монетку, а впоследствии, когда начал приходить в себя после атаки Кляксы, попытался снова придать себе невозмутимый вид. Дуга линии действия и его распределение во времени показывают аниматору направление приложения усилий. Вы должны быть уверены, что происходящее в конкретной сцене синхронизировано с действием во всей истории. Это означает, что если в рассматриваемом случае все происходит быстро и неистово, а в сценах до и после — медленно, эта сцена будет выделяться из общего ряда. Еще хуже, если сцена более динамична, чем финал. Зрители почувствуют спад активности во время кульминации. Если подобное имеет место, значит, история развивается не по нарастающей. Вместо этого в сцене есть пик, а потом действие медленно идет на спад. Вы должны осознавать, что каждая сцена является частью большой анимации и обязана соответствовать ей по ритму. Синхронизируя позы, вы можете обнаружить, что проще задавать по два ключа анимации для каждой позы: один для позы в кульминационный момент и один для позы в завершающий момент. Это позволяет добавлять промежуточные положения, задавая смещение. Если персонаж перестает двигаться, он выглядит мертвым. Это прискорбный побочный эффект, о котором мы уже упоминали. Живые объекты не могут быт]., неподвижными. В традиционной анимации подобная неподвижность называется задержкой движения. Идея состоит в том, что вы добавляете позу, которая совсем чуть-чуть отличается от заданной. Это позволяет зрителям убедиться, что персо наж все еще жив. В Maya можно создавать два типа ключевых кадров. Нормальные ключевые кадры указывают значение во времени для выделенного атрибута или атрибутов, Разбиение работает тем же способом, исключая тот факт, что при масштабировании (или других манипуляциях с двумя соседними ключами) оно рассматривается относительно них. Разбиение можно применять для смещения поз в Maya. Смещение поз добавляет небольшое движение персонажу, когда тот практически статичен. При аккуратном применении данной техники ваш персонаж останется живым даже после редактирования окружающих ключевых кадров. Таким образом, мы получаем структуру: ключевой кадр, разбиение, ключевой кадр. При масштабировании временного интервала разбиения сохраняют положение относительно своей группы. Для изменения масштаба достаточно выделить нужный диапазон (на конце которого расположены ключевые кадры, а в середине — разбиение) в диалоговом окне Dope Sheet (Монтажный стол), а затем воспользоваться инструментом Scale (Масштабирование), который активизируется нажатием клавиши г, и перетащить границу диапазона, используя среднюю кнопку мыши. Если вы не хотите возиться, управляя разбиением ключевых кадров, существует альтернативный путь. Сходный эффект можно получить с помощью диалогового окна Graph Editor (Редактор анимационных кривых), о котором мы подробно поговорим в следующем разделе.
536
Глава 15 • Общие аспекты анимации персонажей
Некоторые аниматоры говорят, что предпочитают задавать позы в то время, когда они должны приниматься. Мы же сначала задаем все позы, а затем синхронизируем их. Другие аниматоры копируют предыдущую позу на нужное место временной диаграммы согласно плану и меняют ее следующей. В любом случае результат будет одинаковым. Вы можете выбрать наиболее удобный для вас подход. Обратите внимание, что в Maya можно запускать анимацию при различной частоте кадров. Как вы уже вероятно знаете, большинство фильмов сняты с частотой 24 кадра в секунду, в то время как телепередачи транслируются с частотой 30 кадров в секунду (29,97, если уж быть совсем точным). Так что количество кадров при переходе от одной позы к другой может различаться. Некоторые аниматоры предпочитают частоту 30 кадров в секунду, полагая, что дополнительные кадры обеспечивают более детальный контроль. Другие же придерживаются принятых в традиционной анимации 24 кадров. Так как Maya может осуществлять преобразования от одной частоте к другой, выбор частоты является исключительно делом ваших личных предпочтений. Чтобы изменить частоту, щелкните на кнопке Animation Preferences (Параметры анимации), расположенной справа ог ползунка задания диапазона на временной диаграмме. Появится диалоговое окно, показанное на рис. 15.63. В раскрывающемся списке Time (Время) можно выбрать нужную частоту.
'Catenaries Interface Ul Elements Misc Display Kinematic* Animation Manipulators NUR8S .....PofeflOfta^
Setting*: General Application Pieferencex rWof Id Coordinate Syilem — • -UpAwr '& Y . '
tineai | cenlimeler *J ' . '• - .; •'•.;•"." ' • . . . . . -
Dynamic* Fifes/Piojects Keys : Modeling Selection Snepprig Sound Timeine Undo Modules
f.z •
.
":_ Working Unilr
:• .;• if .
Angulai '•" Trnie
1
degrees »
—J " , . ' . . - '
•
.
-
.
--
-
jNTscpoH j • . • . . . • . .
-• .
:
!
. ;
Г~ Keep Keys at CuneW Frames • г Tolerance
••--• Positional Tangential
v . Save.';
;
' - -'
-
jaocnoo [aos:/3o'"~
|:
j."V..-..;.- -.....- - — '"'J ' ' '
;[
.
Cancel
Рис. 15.63. Раскрывающийся список Time на вкладке Setting:; диалогового окна Preferences позволяет менять частоту кадров
,;,
I
Задание поз
537
Диалоговое окно Graph Editor После задания поз и расстановки их на временной диаграмме вы можете приступить к расчету движения. Б отличие от традиционных искусств, эстетическая концепция которых разрабатывалась в течение тысяч лет, понятие красоты движения пока практически не проработано. В этом отношении вы первооткрыватели и должны руководствоваться только собственными открытиями. К счастью, определенную помощь можно получить от аниматоров Диснея. Идея красивого или артистичного движения впервые появилась именно в принципах Диснея. Особенно полезными в этом плане являются принципы A.S.A.F.E. Именно их нужно применить к нашей анимации, чтобы получить эффективное и правдоподобное движение. Помня об этом, приступим к редактированию движения нашего персонажа с помощью диалогового окна Graph Editor (Редактор анимационных кривых). Этот инструмент нельзя назвать наглядным, но мы постараемся сделать его более понятным. Большинству из нас знакома идея графика, то есть зависимости значения одного параметра от значения другого в декартовых координатах. Например, на фондовой бирже постоянно печатают такие вещи, как зависимость цены акций от времени. Надеемся, вы в отличие от нас знаете, когда нужно покупать и продавать акции. У нас это получается плохо, и именно поэтому мы остаемся преподавателями и пишем книги, вместо того чтобы спокойно уйти на пенсию. Любое соотношение между параметрами может быть выражено графически, Б редакторе анимационных кривых Maya горизонтальная ось обычно показывает время, выраженное в виде числа кадров, а не в месяцах или днях, как на гра фике цен на акции. Располагать временные координаты по горизонтали принято уже давно. Параметр, откладываемый по вертикальной оси, зависит от выделенного вами элемента. Вы заметите некоторую разницу между значениями масштабного коэффициента в диалоговом окне Graph Editor (Редактор анимационных кривых). Этот инструмент показывает значения в соответствии с выбранными параметрами. Это означает, что если вы работаете с преобразованием перемещения, значения будут в единицах Maya. Для параметров, связанных с преобразованием поворота, значения, как легко догадаться, будут в градусах. Значения, связанные с преобразованием масштабирования, задаются в виде множителя. То есть значения, связанные с преобразованиями, выглядят вполне предсказуемыми. Однако при работе с графиком пользовательских атрибутов может появиться шкала от 0 до 1. Она показывает величину в долях единицы. Ее можно использовать для интерполяции различных атрибутов между их предельными значениями.
538
Глава 15 • Общие аспекты анимации персонажей
Например, если вы создали две формы и хотите авизировать форму, расположенную между ними, шкала от 0 до 1 представит именно такие промежуточные формы. Важно понимать, что интерполяция в этом случае происходит по линейной шкале. Это означает, что каждая точка расположения первой формы линейно движется по направлению к точке расположения второй. Большинство промежуточных кадров, автоматически создаваемых программой; следует этому линейному закону. Линейная интерполяция не настолько интересна, как движение по кривой или по дуге, которое обсуждалось ранее, поэтому нам нужно найти способ посмотреть на движение и сделать его более затейливым. Этого можно добиться показом двойников.
Да пребудет с вами сила Одним из наиболее важных шагов для начинающего аниматора является переход от ориентации положений к ориентации движения. Как уже отмечалось, западная традиция анимации фокусируется на том, что происходит между позами. Чтобы ясно показать движение, вы должны понимать силу промежуточного действия. В конце 20-х годов прошлого века Дон Грахам (Don Graham) проводил семинары в студии Диснея, чтобы помочь определить, на что же похож этот новый стиль анимации. К сожалению, записи этих семинаров не сохранились. До нас дошли только заметки аниматора и несколько приказов, ходивших по студии. Статья Дона Грахама Animation of Forces vs Animation of Formes (Сравнение сил и форм в анимации), изданная в 1937 году, описывает как раз изменение фокуса от позы к действию. Ее распространение было ограничено сотрудниками Диснея из соображений безопасности. Однако меморандум Дона Грахама был представлен снова в конце 80-х годов в интервью Джона Лассетера. На выставке SIGGRAPH Лассетер объявил его самой важной информацией для аниматоров. Секрет лежал в подходе к движению. За каждым движением нужно было видеть силу. Если зритель замечает вынуждающую силу, движение будет красивым. (В этот момент вы сделали гигантский шаг на пути превращения в настоящего аниматора!) Сила может проявляться в виде внешних условий. Сильный ветер, заставляющий персонаж двигаться определенным образом, удар сзади по голове, из-за которого он падает на землю, или любой другой внешний источник. Однако эта сила не делает персонаж личностью. Под ее влиянием он просто проделывает некие действия. Жизненная сила генерируется самим персонажем в виде мыслей или эмоций, Внутренняя активность проявляется в поведении персонажа, в его игре. То есть иллюзия личности основана на выражении внутренней силы. Результатом является анимация персонажа. Выполняет персонаж определенные действия или играет, истоком его поведения является некая сила. Аниматор должен понимать ее природу, чтобы сформу-
Задание поз
539
лировать се визуально. Вы увидите, как данный подход поможет вам избежать многих ошибок, которые делают начинающие. Например, если персонаж принял положение, при котором его центр тяжести расположен между ногами, он не может поднять одну из ног, не позаботившись о силе. Попробуйте сами поднять ногу, не смещая центра тяжести, и вы убедитесь, что сначала вес тела нужно перенести на вторую ногу, которая становится опорной. Знание о силе ведет вас к улучшению вида анимации. Чтобы учесть силу в анимации, нужно проанализировать путь ее передачи по сочленениям персонажа. Когда Крутан кладет ладонь себе на грудь, можно предположить, что для этого нужно изменить форму руки. Однако если рассмотреть этот процесс, как силу, проходящую через ключевые точки, мы определим усилия, которые должны быть совершены запястьем, локтем и т. д. Это даст лучший результат, чем простое изменение формы. Теперь при работе с траекториями анимации, которые создаются командой Create Motion Trail (Создать траекторию движения) меню Animate (Анимация), вы сможете видеть, как протекает движение. К визуализации перемещений вы добавите чувство движения. При редактировании анимации часто имеет смысл перейти к одной из предустановленных компоновок, включающей в себя окно проекции Persp (Перспектива) и диалоговые окна Graph Editor (Редактор анимационных кривых) и Hypergraph (Просмотр структуры). Для перехода к этому представлению достаточно щелкнуть на соответствующей кнопке панели инструментов у левой границы экрана. Затем окно проекции Persp (Перспектива) нужно заменить окном Render Camera, выбрав в меню окна проекции команду Panels > Pespective > Render Camera (Панели i> Перспектива > Render Camera). Это позволит посмотреть на анимацию через предназначенную для этого камеру. Используйте механизм показа двойников, как и раньше. После этого вы можете редактировать и настраивать анимацию в диалоговом окне Graph Editor (Редактор анимационных кривых). Помните, что это не единственный путь редактирования анимации. Вы можете использовать и собственные предпочтения, если ваш путь кажется вам более эффективным. Однако мы представляем способы создания анимации, применяемые профессионалами. Вам нужно оценивать каждое движение в терминах безопасности перемещений (A.S.A.F.E.), то есть проверять его на соответствие принципам, о которых мы говорили выше. Убедитесь, что для движений вашего персонажа характерны предвосхищение, вторичное действие и завершение. Подобное рассмотрение движения является способом сфокусироваться на завершении действия. Конструкция любого персонажа предусматривает определенные пределы движений, но для создания эффекта преувеличения используйте весь имеющийся диапазон. Перемещения должны происходить по дуге, а их траектории опять же ограничены оснасткой модели.
540
Глава 15' Общие аспекты анимации персонажей
Последние советы Одним из лучших уроков для анализа анимации является учет действующей на персонаж силы. Если персонаж стоит, его вес должны псддерживать одна или обе ноги. Перед тем как переместить ногу, убедитесь, что она больше не является опорной. При проверке результатов анимации обращайте внимание на расположение бедер, которые определяют центр тяжести. Они должны находиться над опорной ногой. Многие аниматоры чувствуют, когда движение происходит неверно. Найти ошибки поможет исследование анимации в диалоговом окне Graph Editor (Редактор анимационных кривых). Движение должно быть четким и иметь привязки к определенным местам. Если оно определяется короткими, резкими кривыми, оно будет рваным. Сглаживание кривых приводит к сглаживанию движения. Часто проблемой становится потеря непрерывности. Диалоговое окно Graph Editor (Редактор анимационных кривых) показывает вам все эти моменты визуально. Сборка Крутана замечательно подходит для движений всего тела. Он будет замечательно смотреться на кадрах общего плана. Но для следующего шага анимации применяется принцип Лассетера: анимация черт лица и синхронизация губ. Впрочем, это вы ходит за рамки темы данной главы. Упомянем только, что данная анимация благодаря ее помещению в отдельные слои может быть осуществлена вместе с анимацией всего тела. Преимущество слоев заключается также в том, что над одним персонажем могут работать одновременно несколько аниматоров. Это увеличивает эффективность производства. Недостатком такого подхода является необходимость дополнительной координации группы.
Заключение Процесс работы аниматора в равной степени состоит из планирования и выполнения планов. Планирование позволяет гарантировать точность и мощь реализации, Выполнение представляет собой попытку реализовать существующие планы. В данной главе мы затронули многие важные аспекты способностей аниматора и их применения для работы над повседневными задачами. Надеемся, что это помогло вам найти ответы на большинство вопросов и теперь вы не испытываете затруднений на начальных этапах анимации. Единственным способом научиться создавать анимацию является практика. Вы не можете просто прочитать пособие и сразу стать великим аниматором. Нужны регулярные упражнения. Вы должны показывать результаты своих трудов дру;:им. Анимация в своей основе представляет процесс передачи информации. Вы не можете передавать информацию сам себе, нужны зрители. Старайтесь получить отзывы от опытных аниматоров. Если у вас среди знакомых таких нет, постарайтесь их завести,
Заключение
541
Было бы здорово, если бы вы начали применять информацию из этой главы для создания своих сценариев. Помните о необходимости практики. Старайтесь получить отзывы от хороших учителей. Не стоит использовать для оценки своих работ форумы в Интернете, так как они могут только дезориентировать вас. Наслаждайтесь созданием жизни. Эта работа — только для аниматоров и богов!
16
Подготовка персонажей к анимации
Подготовка персонажа к анимации подразумевает его сборку, создание костей, связывание оболочки со скелетом, проработку мимики и многое другое. Эти обязанности обычно выполняет технический руководитель, группы. Кратко процесс подготовки персонажа можно описать как создание внутренней скелетной структуры с легко доступными элементами управления деформацией персонажа, которые позволяют аниматору быстро «вдохнуть жизнь» в персонаж, В этой главе мы обсудим следующие темы: О пять золотых правил подготовки персонажа к анимации; О конвейер подготовки персонажа к анимации; О одиннадцать распространенных ошибок при подготовке персонажа к анимации; О интервью с Полом Туристом из судии Tippett.
Пять золотых правил подготовки персонажа Для успешной подготовки персонажа к анимации вы должны принимать во внимание множество факторов. Попытка обобщить эти факторы привела к появлению пяти золотых правил. О Выясните анатомию персонажа. О Разберитесь в требованиях к движению персонажа. О Пытайтесь сохранить управление персонажей как можно более простым, интуитивно понятным и обобщенным. О Приводите файлы в порядок. О Активно тестируйте систему. Ниже мы подробно обсудим каждое из этих правил.
Пять золотых правил подготовки персонажа
543
Знание анатомии персонажа Вы должны знать внутреннее строение персонажа, включая его анатомию, мускулатуру, структуру скелета и костей и антропоморфические пропорции. Можно сказать, что это одно из самых серьезных требований в плане подготовки персонажей к анимации. Не важно, реалистичный вид у вашего персонажа или мультяшный, роботоподобный или даже совершенно фантастический. Если он перемещается, значит, у него есть иерархическая структура, определяющая возможности этого перемещения, а также определенные опорные точки для сочленений и деформаций оболочки. Без знания анатомии персонажа не обойтись при моделировании исходного скелета и создании элементов управления персонажем, Изучайте анатомию людей и животных и ищите различные способы применения своих знаний при создании скелета персонажа. В зависимости от того, подготовкой какого персонажа вы занимаетесь, вы должны разбираться в различных типах анатомического строения. Для создания реалистичной собаки нужно любой ценой изучить собачью анатомию. Проконсультируйтесь с экспертами, обсудите с ветеринаром влияние структуры скелета на перемещения собаки. Если вы собираетесь моделировать мультяшную собаку, внимательно изучите мультипликационные версии подобных персонажей. Персонажи мультфильмов имеют свою собственную уникальную анатомию, отчасти основанную на реальной анатомии, но в то же время намного более гибкую и позволяющую принимать практически любую позу. Нужно понимать, что мультяшный персонаж будет в состоянии сжиматься и растягиваться, его можно дергать и толкать любым способом, который аниматор сочтет подходящим для гиперболизации образа в кадре. В нашем проекте фигурирует собака, фигура которой представляет собой комбинацию мультфильма с реальностью, так что вы сможете познакомиться с обоими приемами работы, Помните, что анатомия является самым важным элементом подготовки. Именно она диктует ограничения в перемещении суставов и общий вид движения и деформаций персонажа. Если вы понимаете это, можете немедленно приступать к тестированию способа представления скелета в трехмерном мире компьютерной анимации. Практически всегда для компенсации ограничений компьютерного представления приходится дополнительно оснащать или менять реальный вид скелета. Именно при этом задействуются ваши творческие способности и понимание персонажей, как и знание инструментария Maya.
Требования к движению персонажа При подготовке персонажа нужно знать требования к его движению, особые возможности этого движения и его характерные особенности. В зависимости от типа персонажа, вида сцен и взаимодействия с другими элементами сцены, требования к анимации могут меняться. Крайне важно, чтобы вы, как сборщик персонажа, были полностью осведомлены об этом аспекте подготонки и точно знали, что персонаж будет делать. Когда человек ползет вверх по стене во время землетрясения, и когда животное сбивает с ног поток воды и увлекает в реку, требуется совершенно разная подготовка. А что делать, если персонаж должен отрастить крылья и улететь прочь? Как быть в случае, если персонаж должен взять лук и стрелы и выстрелить? Разумеется, работа аниматора всегда забавна и полна неожиданностей. В вашу задачу входит создание элементов управления, которые позволят реализовать движение требуемого типа настолько точно, насколько это возможно.
544
Глава 16* Подготовка персонажей к анимации
Элементы управления и скелетная иерархия находятся в полной зависимости от требований к движению, поэтому изучайте концепцию персонажа, старайтесь понять, как она проявляется в сценарии и раскадровках, задавайте вопросы по поводу возможностей перемещения персонажа. Можно даже сделать персонаж, движения которого будут несколько выходить за рамки изначально заданных требований, главное, чтобы они принадлежали к тому же диапазону. Никогда нельзя быть уверенным, что у руководителя проекта не появится новая идея и вам не потребуется добавлять элемент управления, отсутствовавший во время первой фазы тестирования персонажа. Всегда здорово, когда на подобные требования можно ответить; «Вам нужен этот элемент управления? Просто активизируйте вон тот атрибут узла запястья и вы получите ровно то, что требуется!» Но единственным способом добиться подобных результатов является умение думать далеко вперед и лучше других понимать механику и способы перемещения персонажа.
Простое и интуитивно понятное управление персонажем Всегда старайтесь делать персонажи такими, чтобы было совершенно понятно, как их использовать, чтобы ими было легко управлять, чтобы им было просто придать нужную позу. Никогда не прибегайте к манипуляции элементами управления персонажем для изменения положения частей тела, если это изменение не кажется естественным. То есть никогда не следует применять, например, выражения или взвешенные ограничения, чтобы обеспечить, к примеру, расположение бедер на уровне половины расстояния между ступнями. Никогда не усложняйте себе создание анимации персонажа по методу ключевых поз. Это ключевая концепция. Всегда группируйте атрибуты в соответствии с их наз начением. Например, используйте единый контроллер, реализующий все выражения лица, а также не забывайте о возможности нацеливания взгляда на определенный объект. Создайте по одному контроллеру для каждой руки, обеспечивающему также управление перемещениями пальцев. То же самое проделайте для ног. Всегда сопоставляйте контроллерам атрибуты, имеющие смысл для аниматора. Более простые элементы управления с интуитивно понятными в использовании параметрами позволяют улучшить качество анимации, так как ускоряют процесс работы и гарантируют надежный результат. Всегда слушайте аниматора. Подготовка персонажа требует сотрудничества, так как вы создаете файл, с которым в течение продолжительного времени предстоит работать другим людям. Этот файл поддерживает жизненную часть проекта — анимацию персонажей. Если выяснится, что персонаж не в состоянии выполнять определенные действия при анимации, решать проблему должны вы. Впрочем, иногда достаточно показать способ доступа к уже существующему атрибуту или функции, хотя в других случаях приходится менять отдельные элементы сборки или иерархии. В этом случае не стоит колебаться. Ваш отказ вносить изменения негативно скажется на времени работы над проектом, так как затормозится процесс анимации. Причем аниматор имеет полное право обвинить в задержке вас. Усложненная подготовка, позволяющая удовлетворить все пожелания аниматора, представляет собой одну из самых трудных задач в плане сборки персонажа. В то же самое время это один из лучших способов разобраться в устройстве персонажа.
Пять золотых правил подготовки персонажа
545
ОВЕТ В Maya 5 появились два новых элемента, предназначенных для решения проблем взаимодействия. Первый из них позволяет присоединить к любому узлу короткое сообщение. Для этого нужно открыть диалоговое окно Attribute Editor (Редактор атрибутов), в нижней части которого находится текстовое поле Notes (Примечания). В это поле можно ввести новое примечание, а также отредактировать и обновить существующее. Примечание позволяет объяснить другим пользователям, для чего предназначен тот или иной узел. Новая команда меню Create (Создать) называется Annotation (Примечание) и позволяет создать текст с указывающей на объект стрелкой, который появляется в окне проекции. Подобные примечания крайне полезны при подготовке персонажей и, разумеется, они не видны при визуализации.
Приведение в порядок файлов Всегда старайтесь приводить файлы в порядок, отслеживайте чужие ошибки и старайтесь их исправлять. Вы являетесь центром технической настройки создаваемого файла, это ваша работа, и к ней нужно подходить серьезно. Небрежность тут. неуместна. В файле с «хорошим» персонажем не должно оставаться ненужной истории конструирования, а также несгруппированных, повторяющихся или непонятно названных узлов. Например, если после передачи вам модели оказывается, что файл содержит историю ее деформаций, избавьтесь от нее. Если персонаж имеет системное имя polyMeshlZ, замените его осмысленным названием. Если в файле содержится множество вспомогательных хаотично рассеянных узлов, сгруппируйте их, а лучше просто удалите. Но самой большой проблемой после вставки персонажа в сцену является наличие ненужной истории узлов. Приводите в порядок все файлы, попавшие в ваши руки. Этот процесс является чрезвычайно важным, потому что гарантирует отсутствие излишней информации в файле. Кроме того, при этом вы еще раз внимательно изучаете модель и можете заметить проблемные места, на которые не обратили внимания раньше. Перед оснащением персонажа оболочкой нужно проделать описанную ниже процедуру. 1. Внимательно исследуйте геометрию персонажа. Щелкните на квадратике, расположенном справа от команды Cleanup (Очистка) в меню Polygons (Полигоны), установите флажок Nonmanifold Geometry (Совпадающая геометрия) и щелкните на кнопке Apply (Применить). Проверьте непарные вершины, выделив все вершины и нажав клавишу Del. Проверьте состояние нормалей и убедитесь, что они направлены наружу. Убедитесь, что у вас не заблокированы нормали к вершинам. Для этого нужно открыть диалоговое окно Polygon Set Vertex Normal Options (Параметры установки нормалей к вершинам полигонов), щелкнув на квадратике, расположенном справа от команды Edit Polygons > Normal > Set Vertex Normals (Правка полигонов * Нормаль > Задать нормали к вершинам), установить флажок Unlock Normals (Разблокировать нормали) и щелкнуть на кнопке Apply (Применить). 2. Проверьте состояние проекционных координат и убедитесь, что все подготовлено к назначению материалов. 3. Проверьте параметризацию, разрешение, направления поверхности и прочие факторы, которые могут повлиять на процесс дальнейшей работы с персонажем.
546
Глава 16* Подготовка персонажей к анимации
4. Не продолжайте работу, не закончив создание геометрии. Это означает, что модель должна быть готова к назначению материалов и связана со скелетом. Несмотря на отчасти отработанные механизмы обновления геометрии после связывания сетки (например, возможность замены формы промежуточного объекта в начале цепочки деформации), их применение желательно оставить для тех случаев, когда без них действительно не обойтись. Это связано с тем, что данные механизмы работают только в случаях, когда число вершин модели не меняется. Способность отследить ошибки в геометрии на начальном этапе потенциально может сэкономить ваши время и усилия на стадии сдачи проекта. Вот что имеет смысл сделать для удаления из сцены мусора перед началом оснастки модели. 1. Всегда группируйте и именуйте DAG-преобразования для вашей модели, если это не было сделано за вас. Нужно убедиться, что преобразования зафиксированы, то есть выполнена команда Freeze Transformation:; (Зафиксировать преобразования) меню Modify (Изменить), а опорные точки отцентрированы с помощью команды Center Pivot (Центрировать опорную точку) того же меню. 2. По очереди выделяйте все несвязанные узлы геометрии и смотрите, насколько осмысленными являются их имена. Особенно нужно следить за совпадением имен узлов формы и узлов преобразования (скажем, NodeNane и NodeNameShape). 3. После этого обычно выполняют несколько операций, которые гарантируют удаление всех узлов, не относящихся к нужной сцене. 1) для начала нужно сделать меню Delete A l l by Type (Удалить все объекты типа) плавающим. Для этого достаточно щелкнуть на двойной черте, расположенной в его верхней части. В результате вам не потребуется вызывать его для выполнения каждой команды. Затем нужно по очереди выполнить все команды этого меню; 2) после этого нужно удалить все деформаторы. В принципе это уже должно быть сделано, но лучше удостовериться в этом. Для этого применяется MEL-код: delete "Is -type weightGeometryFilter"; // удаление деформаторов 3) далее нужно убедиться в отсутствии дополнительных скрытых форм или промежуточных узлов, связанных с преобразованиями. Для их удаления применяется следующая MEL-команда: delete 'Is -io': // флаг -1о означает промежуточные узлы В результате появляется сообщение об ошибке, информирующее, что некоторые узлы предназначены только для чтения и удалить их нельзя. Просто проигнорируйте его. Таким образом, если в сцене были промежуточные узлы, которые можно было удалить, вы от них избавились. 4. Выберите команду Edit > Select by Type > Geometry (Правка > Выделение по типу объекта > Геометрия), а затем в меню Graph (Граф) диалогового окна Hypershade (Редактор материалов) — команду Input and Output Connections (Входные и выходные связи). Разорвите связи всех узлов, расположенных выше в иерархии, выделяя соединяющие их стрелки и нажимая клавишу Del. Сюда входят связи с ма-
Пять золотых правил подготовки персонажа
547
териалами, показ слоев и прочее, что может быть связано с геометрией. Смотрите вверх на все связи зависимостей отдельных узлов, чтобы убедиться в отсутствии случайных наборов или дополнительных узлов формы, оставшихся в результате применения деформаторов на стадии моделирования, 5. Щелкните на квадратике, расположенном справа от команды Optimize Scene Size (Оптимизировать размер сцены) в меню File (Файл), установите все флажки в появившемся диалоговом окне и запустите команду на выполнение. 6. Наконец, выделите узлы преобразования геометрии и экспортируйте их в формат ASCII, сняв флажок Include These Inputs (Включить эти входные данные) в диалоговом окне Export Selection Options (Параметры экспорта выделенного), как показано на рис. 16.1. Экспортируемый файл откроется в текстовом редакторе. Удалите все ненужные строки requires в заголовке файла и сохраните его в текстовом формате ASCII с расширением .та. Затем этот файл можно импортировать или просто открыть как окончательный вариант геометрии, который будет применяться при оснастке персонажа. Если вы не пользуетесь сторонними программами для загрузки модели, единственной строкой requires, которую нужно оставить, является строка; requires maya "5"
Рис. 16.1. Узлы полигональной геометрии, полностью очищенные от входных связей, как показано в диалоговом окне Hypershade
В некоторых случаях можно экспортировать полигональную геометрию в виде отдельных файлов с расширением .obj. При этом все флажки в диалоговом окне Export Selection Options (Параметры экспорта выделенного) снимаются. Затем эти
548
Глава 16' Подготовка персонажей к анимации
объекты по одному импортируются обратно в Maya, чтобы гарантировать, что вся геометрия будет в заданном по умолчанию состоянии. Все эти дополнительные шаги при подготовке файла могут показаться лишними (и даже в некоторой степени параноидальными). Кроме того, без сомнения они требуют общения между членами команды, занимающимися моделированием и созданием материалов. Но как показывает опыт, чем чище файл изначально, тем проще идет дальнейший процесс.
Активное тестирование системы Всегда проверяйте сборку» чтобы гарантировать, что модель не сломается в дальнейшем и все пойдет по заданному плану. Под проверкой в данном случае подразумевается удаление или скрытие всех атрибутов и узлов, которые не потребуются аниматору в работе и которые могут привести к поломке модели при некорректном редактировании. Можно скрыть все узлы, заблокировать все атрибуты и запретить назначение им ключей анимации, но аниматор всегда может открыть диалоговое окно Channel Control (Управление каналами) и снять блокировку, просто чтобы посмотреть на результат. Любопытство кошку сгубило; оно может погубить и сборку вашего персонажа и привести к проблемам с совместимостью анимации. А так как именно вы создавали файл, без сомнения именно вам предстоит заниматься работой над ошибками, вызванными действиями слишком ретивого аниматора. Существует несколько способов избежать подобной ситуации. Одним из них являются хорошая подготовка и планирование. Имеет смысл также развивать свою способность к убеждению. Ведь если настоятельно попросить аниматора не трогать определенные элементы, скорее всего, он не будет этого делать. Запланируйте собрание с аниматорами, которые будут использовать ваш файл, и узнайте, как они собираются работать с ним. Объясните группе, что не нужно делать с персонажем. Жизненно важно также убедиться в корректности размещения версий файлов. В этом случае в производство никогда не будет пущена устаревшая версия. Проще всего этого добиться, подключив скрытый узел со скрытым атрибутом, который содержит номер версии. При выпуске новой версии файла этот атрибут должен обновляться с помощью MEL-команд. Вы должны четко представлять, что будет с моделью на дальнейших этапах редактирования. Нужно понимать, как именно будет осуществляться назначение материалов и каким образом анимированный персонаж с текстурами станет частью основной сцены. Помните, что если что-то может сломаться, оно обязательно сломается. Если сцена содержит множество выделяемых узлов, редактирование которых неправильно повлияет на вид персонажа, заблокируйте их или переведите в режим шаблона и только после этого передавайте файл для дальнейшей обработки.
Конвейер подготовки персонажа «Жизнь» персонажа начинается в ту секунду, когда вы компонуете его сочленения и определяете, как он будет двигаться и взаимодействовать с окружающей средой под действием элементов управления. Процесс подготовки персонажа со-
Конвейер подготовки персонажа
549
стоит из множества шагов, большинство которых может быть выполнено на стадии начального создания модели или после завершения работы над ней. Основная часть вашей работы должна быть распределена в соответствие с запланированной схемой, согласованно с анимацией, назначением материалов, освещением и визуализацией. Вы должны иметь возможность сообщать каждой из команд об обновлениях в сборке персонажа по мере их завершения. Именно так осуществляется работа в реальной индустрии при наличии жестких сроков сдачи проекта. Существуют определенные этапы, призванные безболезненно интегрировать персонаж в остальное производство и обеспечить максимальную эффективность работы. Конвейер подготовки персонажа Изучение анатомии персонажа и требований к движению, эксперименты с конструкцией скелета и компоновкой Моделирование Окончательная модель персонажа
[Завершение работы над скелетной иерархией а соответствии с требованиями к движению и деформациям. > : ...
заместителей с низким разрешением Дальнейшее назначение материалов
, •. . Оснащение оболочкой, ". раскрашивание и подготовка 1. деформаций
Создание элементов управления анимацией
Тес1ированиа":движвния: и усовершенствование • -. окончательной сборки
Дальнейшая работа над материалами, освещением и визуализацией
Тестирование'конечностей персонажа. ? в крайних положениях и завершение работы наддвформациямй'; \. ~',„- '•-. Объединение материалов, освещения и визуализации
Дальнейшая работа над анимацией персонажа
Окончательная анимация готовой (оснащенной оболочкой) модели с высоким разрешением Визуализация Окончательные изображения для монтажа
Рис. 16.2. Основные этапы конвейера ввода-вывода при подготовке персонажа
550
Глава 16* Подготовка персонажей к анимации
В ходе подготовки персонажа каждому из этапов могут предшествовать дополнительные этапы. В зависимости ог нужд производства для каждого из них могут требоваться разъяснения, определяющие дальнейшие детали обработки и указывающие, какие команды должны быть вовлечены в этот процесс, каковы временные рамки и как должен функционировать конвейер ввода-вывода (например, как форматы файлов трехмерных данных нужно преобразовать в окончательный цифровой формат вывода). На рис. 16.2 показан прототип конвейера подготовки персонажа.
Одиннадцать распространенных ошибок при подготовке персонажа В этом разделе описаны характерные ошибки, возникающие при подготовке персонажа к анимации, которые могут негативно отразиться на сборке персонажа. Ниже перечислены те области, в которых они возникают. О о О О О о О О О о О
Ориентирование и масштабирование осей сочленений. Перемещение и редактирование готовых сочленений. Изменение геометрии после связывания. Применение методов прямой и обратной кинематики. Конструирование удобных элементов управления скелетом, Равновесие поз. Порядок вращения и блокировка шарниров. Ведение истории геометрии/узлов. Множественные деформации и порядок их применения, Построение геометрических нормалей и проекционных координат. Скелетная совместимость при передаче анимации и весов оболочки, а также при объединении конвейера в одно целое.
Некоторые из упомянутых проблем являются элементарными, но просто удивительно, насколько часто файл становится слишком тяжелым, а редактирование затрудняется из-за того, что на эти моменты не обращается должного внимания, Ниже мы поговорим о том, что нужно делать во всех вышеупомянутых случаях, чтобы облегчить дальнейший процесс подготовки персонажа.
Ориентирование и масштабирование главных осей сочленений Сочленения и кости в Maya являются практически уникальными объектами, так как поддерживают различные формы и уровни преобразований. Эти преобразования влияют на кластер оболочки, с которой связаны сочленения и кости. Сочленения можно не только вращать относительно опорной точки преобразования Rotate (Поворот), но и перемещать, масштабировать, о граничивать, перегруппировывать и делать предками или потомками по отношению к любому другому узлу. Это непосредственно влияет на их опорные точки и относительные преобразования. При настройке и компоновке скелета такое поведение обеспечивает интерактивную свободу, позволяющую пользователю делать все, что он хочет. К сожалению, это открывает многочисленные лазейки для ошибок. Например, можно
Конвейер подготовки персонажа
551
сформировать скелет таким образом, что некоторые из осей будут ориентированы неправильно. Повороты сочленений контролируются локальными осями вращения. Для интерактивного редактирования этих осей нужно выделить сочленение, перейти в режим редактирования подобъектов и щелкнуть на кнопке со знаком вопроса в строке состояния. К сожалению, это не меняет ориентации оси перемещения (масштабирования) сочленения. Если вы собираетесь изменить масштаб одного из сочленений, имейте в виду, что ось масштабирования выравнивается с локальной осью поворота и указывает точно на следующее сочленение в иерархии. Обратите внимание, что масштабирование сочленения в Maya аналогично изменению длины кости в других приложениях. В Maya происходит изменение размера выделенного сочленения, а затем эти значение передается атрибуту .inverseScale дочернего сочленения. Такое поведение приводит к изменению размеров текущего сочленения, и в итоге дочернее сочленение сохраняет свой размер. Обычно подобное поведение только на пользу, но его можно и отключить, сняв флажок Segement Scale Compensate (Компенсация размеров сегмента) в разделе Joint (Сочленение) диалогового окна Attribute Editor (Редактор атрибутов). СОВЕТ Что делать при разрыве связей .inverseScale? Иногда связь между атрибутом масштабирования родителя и атрибутом .inverseScale потомка разрывается. Это может быть связано с редактированием связей в скелетной иерархии. Кроме того, такая ситуация возникает при экспорте сочленений при сброшенном флажке History (История) в диалоговом окне настройки параметров экспорта. Некоторые начинают вручную повторно соединять каждое сочленение, в то время как существует более быстрый способ борьбы с этим явлением. Нужно просто выделить корневое сочленение «сломанной» иерархии и продублировать его, нажав комбинацию клавиш Ctrl+d. Так как приложение знает, какие атрибуты должны быть соединены друг с другом, оно в процессе дублирования произведет ремонт цепочки.
Ориентация осей поворота и масштабирования сочленений, которая раньше была доступна только через MEL-команду joint, теперь осуществляется с помощью пользовательского интерфейса Maya. Это команда Orient Joint (Ориентировать сочленение), расположенная в меню Skeleton (Скелет). Несмотря на появление этого элемента интерфейса, MEL-команда joint до сих пор широко применяется для правильной ориентации осей сочленений. Прочитайте информацию о ней в справочной документации и познакомьтесь со всеми флагами и параметрами. Вот несколько вариантов команды, которые используются наиболее часто. Их нужно ввести в командную строку, предварительно выделив нужное сочленение: joint -e -QJ xyz;
Переориентирует оси поворота выделенного сочленения в соответствии с осями X, YiiZ. joint -e -zso;
Обнуляет ориентацию осей масштабирования, выравнивая их с осями поворота, joint -e -ch -oj xyz -zso:
552
Глава 16- ПодготоЕ1ка персонажей к анимации
Одновременно переориентирует оси вращения и обнуляет ориентацию осей масштабирования для всей иерархии сочленений.
Перемещение сочленений после их создания и гладкое связывание Перемещение сочленений после их создания может привести к ряду раздражающих проблем при конструировании скелета. Переместить сочленение легко. Достаточно активизировать инструмент Move (Переместить) и подвинуть сочленение в окне проекции. Проблема состоит в том, что при этом перемешаются и остальные члены иерархии. Если вам нужно именно это, все замечательно, но в большинстве случаев требуется изменить положение сочленения, не трогая его потомков. В этом случае вместо инструмента Move (Переместить) нужно прибегнуть к инструменту Joint Creation (Создание сочленений). Выделенное сочленение затем перемещается в окне проекции при нажатой средней кнопке мыши. При этом остальные члены иерархии не затрагиваются. То же самое можно сделать, нажав клавишу Ins и перемещая сочленение с помощью инструмента Move (Переместить). Ведь при этом вы перемещаете сочленение в режиме редактирования опорной точки. Такая возможность появляется изза того, что расположение каждого из сочленений относительно его предков определяется положением его опорной точки. MEL-команда joint с флагом -со позволяет путем ввода численных данных менять положение сочленения, не затрагивая его потомков. То есть, если вам нужно поменять положение сочленения с помощью сценария, вы уже знаете и команду, и флаг. Вы можете создать любой сценарий со следующим фрагментом кода, который позволяет переместить сочленение любым методом (например, с помощью ограничений), а затем легко вернуть дочерние сочленения на прежнее место: // сначала переместите сочленение а произвольном направлении: string $joints[] - 'Is -si -type joint"; float $mvPos[3] - 'getAttr .translate IjointstO]': undo; // отмена результатов предыдущего перемещения...
joint -е -г -со -position
SmvPos[0] $mvPos[l] SmvPos[2] $jcnnts[0]: Теперь поговорим о крайне удобном приеме перемещения сочленения после оснащения скелета оболочкой. Этот прием позволяет создать узлы преобразования и прикрепить их к кластеру оболочки. В результате они входят в состав узлов, которые используются для раскраски весов. Так как информация о весах хранится в кластере оболочки, вы не теряете результат предыдущего раскрашивания. Это очень простой прием, но с ним настолько мало знакомы, что он заслуживает отдельного объяснения. Начнем с того, что кластер оболочки работает благодаря атрибуту ,matrix[ ]. Этот атрибут представляет собой матрицу, в которую входят новые элементы для каждого сочленения или зависимого объекта, используемого кластером оболочки для деформации геометрии. Каждый из элементов матрицы соединен с атрибутом . world Matrix [0], как показано на рис. 16.3.
Конвейер подготовки персонажа
553
Рис. 16.3. Каждый элемент матрицы соединен с атрибутом .worldMatrix[0] связанных сочленений
При перемещении сочленений матрица их преобразований передается функции деформации кластера оболочки. Затем этот кластер умножает каждую вершину на общее взвешенное преобразование каждого из влияний, и все готово! Кластер оболочки просто указывает новые положения вершин, в результате получается замечательная гладкая деформация на основе раскраски весов. Очень просто также создать новый узел с нулевым преобразованием, который будет являться дочерним по отношению к связанному сочленению, а затем быстро подключить новый атрибут узла .worldMatrix[0], заменяя связь, ранее занятую сочленением. Пример показан на рис. 16.4 (атрибут . world Matrix[Q] был подсоединен к узлу skinCluster). ВНИМАНИЕ Помните, что перемещение сочленений приводит к проблемам с локальными осями вращения. Ведь ось сочленения уже не будет указывать на его потомка, что вызывает нежелательные последствия, Поэтому после перемещения сочленений всегда нужно переориентировать и выравнивать их локальные оси вращения.
После создания новых иерархических связей матрица преобразований сочленений напрямую более не контролирует вычисления для кластера оболочки. Этим занимается потомок сочленения. В результате вы свободно можете перемешать сочленения путем перехода в режим редактирования опорной точки и активиза-
554
Глава 16 • Подготовка персонажей к анимации
ции инструмента Move (Переместить). Можно также менять ориентацию сочленений нужным вам образом с помощью команды Orient Joint (Ориентировать сочленение) меню Skeleton (Скелет), не затрагивая связанной с ними геометрии.
Рис. 16.4. Новый узел с нулевым преобразованием, который является дочерним по отношению к исходному связанному сочленению
Редактирование геометрии после гладкого связывания В идеальном случае после сборки ваша модель будет одобрена всеми командами и вам не потребуется вносить в нее изменения. К сожалению, реальность часто преподносит сюрпризы, И процесс работы над моделью мокет стать нелинейным, так как вам придется вносить в нее изменения после соединения с оболочкой, а может быть и после указания весов и создания анимации. Хотя это выглядит невозможным, существует несколько совершенных приемов, позволяющих заменить одну геометрию другой, сохранив при этом веса сочленений. То есть при необходимости вы можете внести изменения в модель и даже заменить ее обновленной версией. О При работе с полигональной моделью в диалоговом окне Connection Editor (Редактор связей) нужно непосредственно соединить атрибут .outMesh обновленной модели с атрибутом .inMesh промежуточной формы объекта. Это основные входные данные для графа зависимости деформируемой геометрии Для NURBS-поверхностей его роль будет выполнять выходной атрибут .worldSpacefO], который нуж-
Конвейер подготовки персонажа
555
но будет соединить с атрибутом .create деформированной сетки промежуточного объекта. Этот замечательный прием позволяет менять друг с другом совершение! разные модели, но существует одно ограничение: количество и порядок вершин должны оставаться неизменными, хотя форма и проекционные координаты модели могут меняться. Сохранение порядка вершин является обшим ограничени ем для всех структур данных в Maya с индексированным числом вершин. Этот прием замечательно работает, когда команда моделирования в состоянии предоставить готовый персонаж с определенным разрешением, однако остальная часть модели все еще нуждается в редактировании деталей, изменении пропорций и новых проекционных координатах. Пока порядок и число вершин останутся без из менений, кластер оболочки при использовании этого приема будет обновляться корректно. О Если разрешение сетки (то есть порядок или число вершин) требуется поменять, но проекционные координаты остаются теми же самыми, нужно щелкнуть на квадратике, расположенном справа от команды Skin > Edit Smooth Skin > Export Skin Weight Maps (Оболочка > Правка гладкой оболочки »Экспортировать карты весов оболочки). В результате Maya запишет набор текстурных изображений, которые можно затем загрузить в виде текстового файла, содержащего все необходимые ссылки для повторного назначения весовых данных. Преимуществом этой методики является то, что она никак не зависит от разрешения сетки. То есть порядок и количество ее вершин могут меняться как угодно. Пока проекционные координаты остаются без изменений, импорт и назначение карт весов будут осуществляться корректно. Кроме того, импортированные в виде растровых изображений карты весов не сохраняются в итоговом файле. Сохраняются только данные о весах в узле skinCluster, как и в том случае, когда вы собственноручно осуществляете раскраску. о Если же изменениям должны подвергнуться и разрешение сетки, и форма модели, и даже проекционные координаты, можно прибегнуть к комбинации двух вышеупомянутых методов. Сначала вы осуществляете замену старых проекционных координат новыми, а затем сохраняете весовые коэффициенты геометрии, повторно связываете новую модель и загружаете файл .weightMap. Также предполагается, что деформатор оболочки с низким разрешением может использоваться в качестве механизма для замены модели с высоким разрешением таким образом, что эта оболочка связывается со скелетом и действует как деформатор Wrap (Оболочка) для геометрии, имеющей высокое разрешение. Данный деформатор представляет собой замечательный инструмент, хотя и не позволяет детально контролировать деформации персонажа. Следовательно, прибегать к нему нужно только в случаях, когда отсутствуют Другие решения,
Применение методов прямой и обратной кинематики Метод обратной кинематики используется только в случаях, когда персонаж должен положить свою конечность на какой-то объект или удерживать его. Без сомнения именно по методу обратной кинематики происходит анимация ног персонажа при ходьбе, так как в этом случае ноги требуется ставить точно на поверхность. Но существует и множество других случаев, когда вполне можно обойтись методом прямой кинематики.
556
Глава 16 • Подготовка персонажей к анимации
Метод прямой кинематики используется в случаях свободного движения скелета. Особенно хорошо его применять, если конечное сочленение в иерархии не требуется ставить на поверхность какого-либо объекта. Идеальным примером применения метода прямой кинематики является анимация персонажа со свободно двигающимися руками, а также сочленений спинного хребта. Многие аниматоры предпочитают метод прямой кинематики даже в случаях, когда это означает создание дополнительных ключей анимации, а нужный вид движения конечностей так и не достигается. Опыт показывает, что большинство аниматоров предпочитают «естественные дуги*, возникающие при использовании метода прямой кинематики, линейному движению, к которому приводит метод обратной кинематики. Следовательно, важно не только знать, какой из методов требуется в рассматриваемой ситуации, но и учитывать предпочтения аниматора. ПРИМЕЧАНИЕ При работе с решателями обратной кинематики Maya предоставляет достаточную степень свободы. Множество полезных механизмов, например решатель ikPR (Вращение плоскости) и ограничения вектора полюса, позволяют контролировать основание вектора поворота цепочки сочленений. Некоторые полезные возможности преобразования между обоими методами кинематики могут даже требовать для интерполяции четверки ключевых кадров, что позволяет задать точные ключи между манипулятором обратной кинематики и скелетом прямой кинематики.
Разработка элементов управления скелетом Элементы управления скелетом обычно проектируются с учетом всех будущих свойств персонажа. В начале процесса нужно точно запланировать и определить, что именно должен уметь персонаж и как этого достичь. Никогда не занимайтесь окончательной сборкой модели, пока не поймете, какими будут ее элементы управления и как именно должна управляться ее иерархия. Понять, какие контроллеры необходимы, можно на основе первых двух правил подготовки персонажа: анатомии и требованиям к движению. Часто требуются скелеты со взвешенными ограничениями, которые будут контролировать ориентацию или положение дочерних объектов в иерархии. Другие элементы могут включать контроль вращения по методу управляющих ключей или даже прямых связей, устанавливаемых в диалоговом окне Connection Editor (Редактор связей). Но в любом случае важен простой доступ к элементам управления, простота их использования и их осмысленная группировка. В качестве элементов управления хорошо применять различные значки. Некоторые пользователи предпочитают для этой цели NURBS-кривые в форме текстовых символов, параллелепипедов или окружностей. Другие используют полигоны с разрушенной связью с материалом (в этом случае они отображаются только в виде каркаса и не визуализируются, как и NURBS-кривые). В любом случае это очень удобно для аниматора, так как подобные элементы управления легко различимы и без проблем выделяются в окнах проекции, чего не скажешь, например, о скрытом локаторе или манипуляторах. Имеет смысл также выделять элементы управления, присваивая им определенный цвет. Для этого вовсе не обязательно помешать их в разные слои. Достаточно открыть диалоговое окно Attribute Editor (Редактор атрибутов) для выделенного узла, раскрыть раздел Display (Отображение), затем - раздел Drawing Overrides (Замена кар-
Конвейер подготовки персонажа
557
каса) и установить флажок Enable Overrides (Включить замену). В итоге вы сможете менять цвет каркасных линий любого узла вне зависимости от того, в каком слое он находится. В итоге появляется возможность раскрасить однотипные элементы: управления из одного слоя в разные цвета.
Равновесие поз Одной из основных проблем, с которой можно столкнуться при анимации скелета персонажа, является равновесие поз. Изменение положения одной части тела персонажа может повлиять на его остальные части не самым лучшим способом, что приводит к необходимости повторной оценки и корректировки положения тела. Это внутренняя проблема сборки персонажа, так как подобная реакция совершен но нормальна для скелета, анимированного по методу прямой кинематики. То же самое касается частично естественного положения большинства персонажей. Хитрость состоит в том, чтобы понять, какую именно часть скелета нужно переместить, а что лучше не трогать. Если сборка персонажа была произведена корректно, исправить позу обычно не составляет труда. Одним из лучших приемов для последующей компенсации положения персонажа является создание отдельных иерархий для различных частей тела. Каждая из иерархий классифицируется по возможности самопроизвольного вращения. Замечательными примерами в данном случае являются голова и кисти рук. Если голова персонажа имеет определенную ориентацию, так как он смотрит на какой-то объект, и при этом персонаж слегка сгибает спину, это теоретически должно отразиться на положении головы, но никак не повлияет на ее ориентацию. Ровно то же самое происходит с кистями рук. Если вы анимировали их по методу обратной кинематики и кисть руки должна оказаться на определенном объекте, поворот спины или плеча не должен повлиять на ее положение. В противном случае аниматору пришлось бы заниматься проблемой равновесия поз. После изоляции отдельных настраиваемых частей персонажа их можно продублировать на уровень глобальной системы координат. Затем нужно создать для них ограничение со стороны той части скелета, для которой они будут дочерними. Равновесие поз обычно является проблемой в основном при преобразованиях поворота, так как преобразование перемещения родительских сочленений в большинстве случаев приводит к соответствующему перемещению их потомков. Если это так, то вам потребуется всего лишь ограничение Point (Точка) для соответствующих сочленений. В итоге все элементы управления вращением будут свободны для анимации по методу прямой кинематики, а остальные части иерархии также можно анимировать либо с его помощью, либо по методу обратной кинематики. Их вращение не повлияет на ориентацию сочленений, расположенных ниже,
Порядок вращения и блокировка шарниров Блокировка шарниров представляет собой интересное явление решателя поворота по Эйлеру, в котором одна из осей может быть легко перекрыта другой. В результате сочленение окажется не в состоянии повернуться в направлении перекрывающихся осей. Блокировка шарниров является прямым следствием порядка вращения узлов, который можно определить в диалоговом окне Attribute Editor (Редактор атрибутов). Забавно то, что к блокировке может привести единственный поворот на 90° относительно оси Y, если ориентация узла осуществляется в глобальном простран-
558
Глава 16- Подготовка персонажей к анимации
стве. Другими словами, если корневой узел персонажа ориентирован в глобальном пространстве (а в большинстве случаев так оно и есть), то единственный поворот налево или направо может заблокировать его. Рассмотрим пример. 1. Выберите в меню Create (Создать) команду Locator (Локатор). 2. Дважды щелкните на кнопке инструмента Rotate (Поворот) и в группе Rotate Mode (Режим поворота) установите переключатель Gimbal (Шарнир). В результате в окне проекции появятся реальные оси вращения. 3. Активизируйте инструмент Rotate (Поворот) и введите в поле Rotate Y (Поворот по Y) диалогового окна Channel Box (Окно каналов) значение 90. Теперь повороты относительно оси X и относительно оси Z будут происходить в одном и том же направлении. Именно это явление и называется блокировкой шарнира. Одним из способов снижения вероятности блокировки шарнира является изменение очередности выполнения преобразований поворота на yxz или zxy. В результате персонаж без проблем сможет вращаться влево и вправо и даже из стороны в сторону. Блокировка шарнира возникнет только в ситуации, когда персонаж требуется перевернуть вверх тормашками, но это требуется не так уж часто. Начиная с версии Maya 4.0, проблема с переворотом шарнира решается путем интерполяции кватернионов. К сожалению, многие аниматоры предпочитают бороться с блокировкой шарниров, используя заданный по умолчанию решатель поворота по Эйлеру, вместо того чтобы прибегнуть к установке ключей на кватернионах. Это связано с тем, что последние не допускают ни смещения отдельных ключей, назначенных каналам вращения, ни любого другого наклона касательных или отдельных кадров. Изменить тип используемых ключевых кадров можно в разделе Keys (Ключи) диалогового окна Preferences (Параметры). Достаточно выбрать нужный вариант в раскрывающемся списке New Curve Default (Новая заданная по умолчанию кривая). Решить проблему с блокировкой шарниров можно также с помощью двойных сочленений (или просто группы узлов вместо сочленений), В этом случае узел преобразования в точности дублируется, для него разрывается связь предок—потомок, а потом он помещается в иерархию с той же самой ориентацией и осями, что и расположенное под ним сочленение. В зависимости от природы иерархии элементов управления вашего персонажа дочернее сочленение можно скрывать и делать видимым при возникновении проблем с блокировкой шарниров. Двойные сочленения представляют собой крайне полезное средство при замене данных поворота или масштабирования скелета. Все это означает, что вместо одного сочленения в определенном месте скелета у вас имеется два: одно расположено точно поверх другого, и при этом они связаны простым соотношением предок—потомок. Вы связывается только дочернее сочленение, а дополнительное родительское сочленение предоставляет вам добавочный контроль над вращением иерархической цепочки. Подобные сочленения или узлы, которые просто являются дополнительными предками, особенно полезны при анимации по методу обратной кинематики, если вам требуется усиленный контроль над преобразованиями поворота. В качестве примера можно привести двойное шарнирное соединение с многочисленными управляемыми ключами, предназначенное для манипуляции пальцами рук. При этом аниматор может поворачивать эти соединения вручную, придавая пальцам нуж-
Конвейер подготовки персонажа
559
ное положение. Другим примером является наличие дополнительного узла преобразования над сочленением запястья, которое используется для поворота последнего. При блокировке шарниров становится видимым дополнительный узел запястья, расположенный выше в иерархии, что позволяет повернуть запястье вокруг нужной оси. Так как наличие двойного сочленения может привести к путанице, важно правильно выбирать для них имена и корректно группировать.
Ведение истории геометрии/узлов Ведение истории узлов представляет собой одну из наиболее полезных функций Maya, но в то же самое время часто является источником избыточных данных, приводящих к увеличению размера файла. Под историей подразумевается список всех операций, которые вы выполняли в файле. Если вы сохраняли историю, начиная с фазы моделирования, скорее всего, ее имеет смысл удалить перед связыванием персонажа со скелетом. Наличие истории может быть замечательным фактором, если вы понимаете, какую роль она играет для узла, и сохраняете ее по уважительной причине. В качестве примера осмысленного сохранения истории узла перед настройкой персонажа можно привести использование атрибута makeNurbsSphere.startSweep для создания мигающих глаз у мультяшного персонажа. Узлы истории в данном случае доступны для анимации, поэтому они могут оказаться крайне полезными. Слишком длинная история конструирования на стадии связывания персонажа может быть даже вредна. Для этого существует множество причин, но чтобы действительно понять, в чем именно состоит ее негативное влияние, нужно знать, что собой представляют все эти узлы. В узлах производятся вычисления данных, и на выход идут другие данные. Другими словами, любой узел истории имеет определенный алгоритм и данные, которые он должен обработать. Иногда вычисления могут быть весьма интенсивными из-за наличия множества сложных данных, обычно связанных с их трехмерным представлением. Каждый раз, когда у вас появляется шанс избавиться от истории, делайте это. Если же вы хотите ее сохранить, помните о возможных последствиях этого шага, Проделайте следующее упражнение, чтобы понять, как именно выполняется удаление истории узлов.
Упражнение 16.1. Удаление истории узлов 1. Создайте полигональную сферу. 2. Выделите несколько вершин этой сферы и создайте кластер с помощью команды Create Cluster (Создать кластер) меню Deform (Деформация). 3. Выделите еще несколько вершин и создайте решетку с помощью команды Create Lattice (Создать решетку) того же меню. Разрешение в данном случае не имеет значения. 4. Выберите в меню Polygons (Полигоны) команду Smooth (Сгладить). 5. Не снимая выделения со сферы, откройте диалоговое окно Hypergraph (Просмотр структуры) и посмотрите на восходящие связи. Выберите в меню Graph (Граф) этого диалогового окна команду Input and Output Connections (Входные и выходные связи).
560
Глава 16* Подготовка персонажей к анимации
6. Вы должны увидеть большое число узлов. Нажмите клавишу а, чтобы придать им максимальный масштаб в границах окна. Все это — узлы истории, в которых производились вычисления при создании вашего объекта. В случае если бы это была окончательная модель персонажа, которую предстояло бы связать с оболочкой, все эти узлы выполняли бы многочисленные вычисления совершенно бесцельно. 7. Выберите в меню команду Edit > Delete by Type > History (Правка > Удалить все объекты типа ¥ История). Все узлы, кроме узлов формы и преобразования объекта, должны исчезнуть. Перед тем как приступить к деформации персонажа, желательно удалить всю историю конструирования, случайные наборы узлов и скрытые копии промежуточных узлов формы. Другая проблема с историей конструирования возникает после связывания персонажа. Особенно аккуратно нужно обращаться с ней .в случае, если после связывания и присвоения весов вершинам вы собираетесь заняться сопряжением форм. Иногда история может изменить входные данные геометрии для кластеров оболочки и внести неразбериху в процесс управления деформаторами и порядок их применения. Именно поэтому моделирование выделяется в отдельный этап, а сборка персонажа осуществляется только потом. Моделирование не должно осуществляться после связывания со скелетом из-за порядка вычисления восходящего графа зависимостей, который создает итоговую сетку полигонов. Разумеется, существуют способы обхода этого ограничения. Тем не менее после связывания персонажа вы должны избегать редактирования геометрии, не относящегося к его деформациям. Исключением являются случаи, когда вы совершенно точно знаете, что делать с историей конструирования и как ваше редактирование повлияет на производительность.
Множественные деформации и порядок их применения Дополнительные деформаторы можно расположить слоями и добавить к сборке скелета (которая сама по себе после связывания с оболочкой является деформатором), чтобы получить такие эффекты, как относительные кластеры и решетки из вершин, связанные с сочленениями. Тип деформаторов Jiggle (Тряска) является относительно новым и замечательно подходит для создания послойной анимации, позволяющей получить эффект тряски кожи, Раньше подобных эффектов можно было добиться только комбинацией кластеров и целевых весов частиц. Вероятно, чаще всего применяется деформатор Blend Shape (Плавная модификация поверхности), добавляемый после связывания геометрии и скелета. История деформаторов показывает порядок их применения. Другими словами, хотите ли вы, чтобы дополнительная деформация вычислялась на местах расположения вершин после деформации их сочленениями, или вы предпочитаете, чтобы сначала деформаторы меняли форму геометрии и только после этого происходила деформация оболочки сочленениями? Скорее всего, вы предпочтете, чтобы новый деформатор находился перед узлом кластера оболочки. Редактирование деформаций является простой задачей. Достаточно щелкнуть на объекте правой кнопкой мыши и выбрать в появившемся меню команду Inputs > All Inputs (Входные данные > Все входные данные). Если вы применяли к объекту де-
Конвейер подготовки персонажа
561
форматоры, в этом же меню будет список всех элементов, требующихся для вычисления узлов, расположенных после узла геометрии. Так как деформаторы относятся к одному типу элементов, они имеют способность менять свой порядок, не влияя на остальные аспекты анимации. Изменение порядка деформаций осуществляется в диалоговом окне, появляющемся после выбора команды Inputs > All Inputs (Входные данные * Все входные данные), обычным перетаскиванием деформаторов при нажатой средней кнопке мыши на нужное место. Деформатор, расположенный в списке первым, деформирует положения вершин и затем передает данные вниз на следующий деформатор. Поэтому совершенно логично, что целевые веса морфинга будут располагаться в списке перед кластером сочленений. Нужно, чтобы вершины модели двигались относительно вершин исходной геометрии, а не относительно вершин геометрии кластеров сочленений. В большинстве случаев требуется, чтобы действие сочленений на модель было последним в списке. Это означает, что порядок деформации нужно будет поменять после создания. Или же при создании деформатора Blend Shape (Плавная модификация поверхности) нужно выбрать в раскрывающемся списке Deformation Order (Порядок деформаций) на вкладке Advanced (Дополнительно) диалогового окна Create Blend Shape Options (Параметры плавной модификации поверхности) вариант Front of Chain (Передняя часть цепочки). Имеет смысл менять их порядок, используя входные данные, так как это дает более полный контроль. После применения к геометрии любого деформатора в истории конструирования появляется деформатор Tweak (Щипок). Узел tweak сохраняет историю редактирования компонентов, произошедшую с узлом формы после применения деформатора. Его необходимость обусловлена тем, что исходный деформатор использует копию узла формы, которая существовала при изначальной деформации геометрии. Но несмотря на его наличие, вы все равно получите предупреждение Tweaks can be undesirable on shapes with history (Изменение форм, имеющих историю, нежелательно). Если же вам требуется узел отладки, но по каким-то причинам он отсутствует, его можно создать вручную. Достаточно выделить объект, для которого понадобился этот узел, и выполнить MEL-команду: deformer -type tweak;
В качестве примера работы с узлом отладки выполните описанную ниже процедуру. 1. Создайте сферу и удалите ее историю. 2. Выделите часть ее вершин и создайте решетку. 3. Выделите часть вершин набора, находящегося под действием деформатора Lattice (Решетка), и переместите их. В строке состояния появится предупреждение Tweaks can be undesirable on shapes with history (Изменение форм, имеющих историю, нежелательно). 4. Щелкните правой кнопкой мыши на сфере и выберите в появившемся меню команду Inputs > All Inputs (Входные данные > Все входные данные). В столбце Node State (Состояние узла) выберите в раскрывающемся списке Tweak (Щипок) вариант Has no Effect (He оказывает влияния). При этом внимательно наблюдайте за объектом в окне проекции. Вы увидите, как перемещенные вершины вернутся на прежнее место.
562
Глава 16 • Подготовка персонажей к анимации
Это помогает в случаях, когда аниматор непредумышленно выделяет и перемещает вершины оболочки персонажа с высоким разрешением. Чтобы исправить ситуацию, достаточно выделить оболочку, выполнить команду Inputs > All Inputs (Входные данные > Все входные данные) и выбрать в раскрывающемся списке узла отладки вариант Has no Effect (He оказывает влияния).
Преобразования, нормали, параметризация и проекционные координаты В данном случае все достаточно очевидно. В задачу членов команды, занимающихся построением модели и назначением текстур, входит создание чистых файлов с корректно построенными геометрическими элементами и правильно назначенными U- и V-координатами. При этом проверка проводится перед началом сборки персонажа, Нужно убедиться, что модель полностью подготовлена к назначению материалов, к освещению и визуализации. Только после этого можно осуществлять связывание оболочки со скелетом. Все ошибки в геометрии или в U- и V-координатах желательно выявлять на этом этапе. Разумеется, существуют пути борьбы с этими ошибками, но лучше все делать правильно с самого начала. Поэтому в данном разделе мы не будем рассказывать о том, как же исправить ошибки. Тем более что этот процесс в любом случае приведет к появлению упоминавшейся выше ненужной истории конструирования. Лучше поговорим о преобразованиях. После придания персонажу гарантированно правильных размеров, его измерения и сравнения с масштабом остальных объектов сцены имеет смысл прибегнуть к фиксации преобразований, Желательно также придерживаться пропорций, которые объекты имеют в реальном мире, особенно если впоследствии вы собираетесь заняться имитацией динамики или тканей. Итак, важно помнить, что как только персонаж приобретет нужный размер, вы должны обнулить все преобразования и создать группу для данной геометрии. Результатом применения команды Freeze Transformations (Зафиксировать преобразования) является фиксация всех преобразований в узле формы — в вершинах. Эта команда (как и удаление истории конструирования) делает модель чище, и это хороший знак того, что работа над ней близка к завершению. У моделей, построенных из двух зеркальных половинок, часто возникает ситуация с неверным направлением нормалей одной из них. Все нормали объекта должны быть нацелены наружу, в противном случае появятся проблемы при назначении материалов и динамических взаимодействиях. Для изменения направления нормали NURBS-поверхности достаточно поменять направление самой поверхности. Для изменения направления нормалей сетки полигонов и их согласования используются команды меню Edit Polygons (Правка полигонов). В первом случае нужно выбрать команду Normals > Conform (Нормали > Согласовать), во втором — щелкнуть на квадратике, расположенном справа от команды Reverse (Изменить направление), и выбрать в раскрывающемся списке Mode (Режим) вариант Reverse and Propagate (Перевернуть и применить ко всем элементам). Нормали к вершинам в полигональных моделях также могут доставить вам неприятности. Иногда при импорте геометрии из другого приложения оказывается, что все нормали ориентированы в одном направлении. Для решения проблемы нужно щелкнуть на квадратике, расположенном справа от команды Set Vertex Normals (Задать нормали к вершинам) в подменю Normals (Нормали) меню Edit Polygons (Прав-
Конвейер подготовки персонажа
563
кэ полигонов), и установить флажок Unlock Normals (Снять блокировку с нормалей) в появившемся диалоговом окне. Можно также экспортировать файл в формате OBJ с помощью команды Export (Экспорт) меню File (Файл), сняв все флажки в диалоговом окне настройки параметров этой команды, а затем повторно импортировать геометрию в сцену. Столь же важна параметризация персонажа. Это означает как разрешение модели в комбинации с распределением компонентов поверхности (ребер для сеток полигонов или изопараметрических кривых для NURBS-поверхностей), так и их поток на поверхности модели. Обычно проблем с параметризацией модели не возникает, и большинство разработчиков идеально справляются с ее созданием. Это означает четкое и равномерное распределение компонентов поверхности, которые следуют созданной вами форме и имеют нужную непрерывность. Мы упоминаем об этом потому, что параметризация важна не только при назначении материалов, но и для полного управления реалистичными деформациями персонажа. Если поверхность не может деформироваться определенным образом из-за недостаточного разрешения или неверно сделанной модели, вы должны отследить эти моменты и рассказать о них создателю модели. Он должен добавить к модели изопараметрические кривые или ребра, обеспечив необходимую гибкость при деформациях. Нужно также помнить о местах, в которых модели требуется дополнительное разрешение. Это любые части персонажа, на которых могут возникать складки, например морщины на лбу. Ну и, наконец, осталось упомянуть о U- и V-координатах. Они определяют размещение карт текстуры на поверхности объекта. NURBS-поверхности имеют встроенные проекционные координаты, поэтому тот, кто этим занимается, должен отслеживать направления поверхностей, состыковывать отдельные фрагменты друг с другом и гарантировать их принадлежность к одному типу однородной поверхности. При наличии навыков проверить отдельные фрагменты можно довольно быстро. В случае полигональных поверхностей тот, кто занимается назначением материалов, должен создать проекционные координаты для модели. Это не очень сложная задача, так как в любой момент существует возможность передать проекционные координаты в сетку полигонов или в иерархическую поверхность. Хотя это приводит к появлению дополнительной истории конструирования, обращать на это внимание имеет смысл только при работе с программами экспорта сторонних фирм, которые иногда не могут корректно прочитать историю узлов. В остальных случаях наличие узла переноса полигонов не повредит.
Совместимость персонажа при передаче данных Сохранение совместимости персонажа и скелета представляет собой достаточно нетривиальную задачу, особенно если вы хотите, чтобы они оставались совместимыми во всех точках вашего конвейера. Разумеется, этот вопрос зависит от особенностей производства. То есть у вас вряд ли возникнет проблема с весами оболочки или анимацией в Maya, если модель создана под игровой процессор. Если вы просто экспортируете персонаж для визуализации в сторонней программе, например RenderMan, спектр проблем окажется совершенно другим, при этом под рукой будут многочисленные инструменты для их решения. Но, решив воспользоваться встроенным визуализатором Maya, вы должны гарантировать совместимость
564
Глава 16 * Подготовка персонажей к анимации
скелета с оболочкой персонажа на всем протяжении анимации. Кроме того, нужно позаботиться о том, чтобы аниматор не предпринял неверных действий при работе с вашим файлом. Предполагается, что импорт и экспорт осуществляется в заданном по умолчанию формате ANIM. Этот формат иногда весьма требователен к совместимости элементов. Существуют вещи, которые должны точно совпадать, только в этом случае импорт в новый файл сцены произойдет успешно. При настройке конвейера существует один хороший способ гарантировать, что имена сочленений в скелетной иерархии останутся прежними. Используйте внешние ссылки для моделей с низким разрешением и MEL-сценарии, являющиеся всего лишь макросами, для выделения корректных сочленений в экспортируемой анимации. Так как внешние ссылки требуют наличия приставки перед именами узлов, это замечательная возможность задействовать в качестве такой приставки номер версии файла. Затем остается только создать внешние ссылки на модели с высоким разрешением, которые будут иметь тот же самый номер версии. Если аниматор захочет посмотреть, как выглядят его кадры в нормальном разрешении, он всегда может легко экспортировать анимацию при помощи набора простых сценариев. Затем эта анимация импортируется в файл с высоким разрешением. При этом аниматор теряет возможность что-либо менять в моделях, так как он имеет дело только со ссылками. Единственным элементом, который он сохраняет, являются анимационные кривые, экспортируемые из файлов. После выпуска новой версии файла можно воспользоваться сценарием, который передает ключи анимации непосредственно с элементов управления персонажем. В результате обновление анимации происходит практически незаметно для аниматора. Вы можете применять внешние ссылки для импорта в сцену окружающей среды, источников света, камер и новых вариантов компоновки слоев. С внешними ссылками нужно быть очень аккуратным и твердо знать, когда ими можно пользоваться, а когда желательно этого не делать. В идеале работа со ссылками в процессе производства должна происходить в нелинейной и недеструктивной манере. Разработчик заканчивает создание модели, в то время как член команды, занимающийся сборкой персонажей, начинает работать над весами оболочки. При этом одновременно должно осуществляться назначение проекционных координат и создание материалов. Освещение и компоновка модели в сцене также могут производиться до ее завершения, К сожалению, внешние ссылки не позволяют даже приблизительно следовать данной схеме. Все выглядит совершенно по-другому. Если вы редактируете узел, хотите обновить модель, но знаете, что ваш коллега, который использует внешнюю ссылку на файл, тоже трудится над этим узлом, внешняя ссылка оказывается неработоспособной. Исключением является анимация, и то если вы подготовитесь к этому заранее. Схема передачи данных обычно зависит от нужд вашего конвейера. Представленный здесь материал ~ всего лишь попытка заставить вас задуматься о различных типах проблем, возникающих на пути к готовым кадрам. Также вы должны думать о том, как подготовка персонажа вначале может обернуться против вас потом, если вы плохо представляете себе все последующие этапы работы.
Конвейер подготовки персонажа
565
Интервью с Полом Туриотом Студия Tippett, расположенная в Беркли (Калифорния), является одним из самых уважаемых производителей анимации в мире. Она была основана более 16 лет назад Филом Типпетом (Phil Tippett), одним из пионеров компьютерной графики. Спецэффекты данной студии замечены в таких фильмах, K&K.Jurassic Park (Парк юрского периода) и Starship troopers (Звездный десант), в фильме Hollow Man (Невидимка), номинированном на премию Оскар, а также в фильме Blade 2 (Блэйд 2) и рекламном ролике Carl and Ray (Карл и Рэй), получившем награду на фестивале рекламных роликов Clio. Именно студии Tippett мы обязаны потрясающей красотой многочисленных порождений компьютерной графики и специальных эффектов, над которыми работает команда художников, кукольников, технических руководителей и координаторов. Пол Туриот (Paul Thuriot) уже несколько лет является координатором студии Tippett, работающим над сборкой персонажей. Его творения можно видеть в ряде высокобюджетных фильмов и рекламных роликов. Он руководил группой сборки в фильме Blade 2 производства компании New Line Cinema, во втором варианте; рекламы Carl and Ray и в недавно выпущенном фильме Men in Black 2 (Люди в чер • ном 2). Б настоящее время он работает над новым проектом Hettboy (Демон ада), полнометражным фильмом на основе популярных комиксов в жанре «ужастика». Все персонажи и монстры, созданные в студии Tippett, гарантированно представляют собой произведения искусства и появились на свет с помощью Maya. В интервью мы с Полом обсуждаем некоторые возможности Maya, активно применяемые в производстве анимации. О Что вам больше всего нравится в процессе подготовки персонажей в такой знаменитой фирме как Tippett? Прежде всего, мне нравится возможность учиться. Благодаря окружению таких разных и талантливых мастеров своего дела мой опыт в артистическом и техническом отношениях стал намного богаче. Кем бы ты ни был, всегда есть возможность научиться чему-нибудь от других. Другим весьма важным аспектом является командный дух. Так как фирма Tippett до сих пор относительно мала, ты чувствуешь себя частью команды даже в случаях, когда сам не участвуешь в конкретном проекте. Ты чувствуешь, что тебя касается все, что происходит вокруг. Вид готового проекта после месяцев непрерывной (а иногда и стрессовой) работы дает ощущение достигнутого успеха. При сборке персонажей мне нравится комбинация технических проблем и творчества. Иногда процесс является совершенно трафаретным, но в некоторых случаях уровень абстрактного мышления может сыграть важнейшую роль в достижении реализма. Ты отвечаешь за решение таких проблем, как, к примеру, определение способа перемещения персонажа или поиск уровня управления, который максимально соответствует нуждам аниматора. В конце концов, требуется убедиться, что придуманный тобой процесс вообще реализуем с помощью компьютера. Существует также стадия исследований и разработки. Она мне нравится больше всего, так как при этом я могу исследовать новое, писать MEL-сценарии
566
Глава 16* Подготовка персонажей к анимации
и надстройки, решать различные технические вопросы, которые могут возникнуть на следующей стадии производства. В итоге получается замкнутый круг, и ты всегда изучаешь что-то новое. О Какое место занимает этап оснастки персонажа в процессе производства в фирме Tippett? На данный момент в Tippett, как и во многих других студиях, процесс производства анимации делится между несколькими командами. Каждая из них решает одну определенную задачу, но при этом они координируют свои действия друг с другом. Разумеется, это вовсе не значит, что од.нн человек не может работать в разных командах одновременно! Сначала в действие вступает команда моделирования, которая разрабатывает дизайн персонажа. Сам персонаж создается либо свободным моделированием, либо сканированием с последующим воссозданием поверхности, После одобрения результатов, полученных на этой стадии, в действие вступают художественная и кукольная команды. Художники рисуют текстуры параллельно с нашей работой по сборке персонажа. Как только наша команда получает готовую модель, начинается создание элементов управления персонажем. Мы подолгу сидим вместе с аниматорами и пытаемся определить, как именно должен двигаться персонаж при наихудшем развитии событий. Таким способом мы достигаем взаимопонимания, кроме того, аниматоры заранее узнают о возможностях персонажа. Как только появляется хорошая идея, мы начинаем компоновать все сочленения, а также настраивать и тестировать деформации. При этом модель переходит от нас к аниматорам и обратно. После завершения этого этапа готовый файл передается команде анимации, и начинается магия оживления персонажа. В то же время команда, занимающаяся эффектами, добавляет в сцену euie один слой. Именно на этом этапе появляются огонь, вода, ветер и даже одежда персонажей. Затем сцена передается в ведомство технических руководителей, которые занимаются освещением и визуализацией. Именно они осуществляют, в частности, назначение материалов. Ну и, наконец, файлы поладают в руки монтажеров, которые и создают финальный вариант анимации. Их конечной целью является получение максимально эффектного изображения. Кроме того, именно монтажеры занимаются интеграцией в фильм двухмерного фона, Правда жизни в данном случае такова: в любой момент прямая линия производства анимации может искривиться и привести вас ровно в то же самое место, где вы уже были. Мы стараемся максимально сократить число подобных возвращений назад, но если данная ситуация все-таки возникает, каждый старается сделать что-то для ее разрешения и возвращения процесса производства в стандартную колею, О Какая из методик сборки персонажа, по вашему мнению, должна преобладать, сборка персонажа по кадрам или сборка сразу всего персонажа? Мы пытаемся понять нужды персонажа и создать одну «суперкуклу>>, которая будет делать все, что потребуется по ходу фильма. Но, к сожалению, это не всегда возможно. Для некоторых кадров требуется создавать дополнительную мо-
Конвейер подготовки персонажа
567
дель персонажа, возможностей которой у стандартной модели просто нет. Впрочем, это делается только для важных кадров. В остальных случаях в сцену просто добавляется небольшой элемент управления. о Каким образом осуществляется переход с отредактированного анимированного персонажа к готовому к визуализации персонажу с высоким разрешением ? Вы фиксируете анимацию непосредственно на сочленениях или переход осуществляется на базе элементов управления и иерархических связей ? Существуют ли стандартные процедуры, гарантирующие отсутствие проблем на этом этапе ? В данный момент взгляды на этот процесс как раз пересматриваются, Раньше передача анимации от одного персонажа к другому осуществлялась путем экспорта и импорта. То есть бралась старая кукла, с которой работали раньше, ее анимация экспортировалась, а затем импортировалась на новый персонаж. Это срабатывало в 80-90 % случаев, но при изменении иерархии требовалось редактирование. Таким образом, процесс передачи анимации мог занять достаточно длительное время и сопровождаться проблемами, В настоящий момент мы разрабатываем новый инструментарий под общим названием ССТ (Creature Creation Tools — инструменты для создания созданий). Я не буду вдаваться в детали, но по своей сути этот инструментарий представляет собой язык написания сценариев, являющийся расширением языка MEL, Новый инструментарий позволяет аниматору формировать собственный набор элементов управления персонажем. Скажем, аниматор может захотеть применить комбинацию методов прямой и обратной кинематики для левой руки, а для правой ограничиться только первым из методов и т. п. Для создания персонажей достаточно указать подходящие параметры с помощью графического интерфейса, который мы назвали APU (Automatic Puppet Utility — утилита оживления кукол). Сочетания параметров выбирает сам аниматор в соответствии со своими предпочтениями. Все это построено на моделях с низким разрешением, с которыми можно работать в режиме реального времени. Один из множества новых инструментов позволяет подключать созданную аниматором сборку к основной кукле и управлять ею. Основная кукла имеет высокое разрешение и все нужные детали, то есть это та версия, которая без сомнения будет визуализирована. То есть при наличии обновлений вся анимация «направляется» новой сборкой. О Существуютли стандартные приемы подготовки персонажей, применяемые всеми членами команды, или же каждый использует свои собственные приемы? Разумеется, у нас есть стандарты для всех этапов и мы пытаемся следовать общим правилам. Кроме того, мы автоматизировали ряд основных шагов процесса подготовки. Это облегчает задачу и оставляет время на решение других проблем. О Считаете ли вы, что применение языка MEL крайне необходимо при производстве анимации? Без сомнения! Мы настолько полагаемся на наши сценарии, что некоторые этапы просто невозможно пройти без них. И это можно сказать не только о нашей команде, но и обо всей студии.
568
Глава 16 * Подготовка персонажей к анимации
О Как происходит визуализация после применения к окончательной модели с вы соким разрешением полностью оснащенного и взвешенного персонажа? После освещения технический руководитель дает команду к началу визуализации. Мы не пользуемся стандартным визуалиэатором Maya, а применяем RenderMan, поэтому приходится прибегать к утилите maya2rib, которая считывает из Maya файл сцены, а также командный файл, приложенный художниками. Этот командный файл, по сути, говорит визуализатору: ^Геометрия А имеет файл текстуры В, которому назначены такие-то свойствам. В нашей студии работают замечательные программисты, которые пишут все эти программы, функционирующие по большей части в виде фоновых процессов. Немногие замечают их работу, но она без сомнения благотворно сказывается на производстве, О Как происходят согласования в такой крупной студии, как Tippett, где каждый член команды отвечает за свой аспект анимации? Ведь может оказаться, что аниматор или осветитель взял не тот файл или сделал ошибку, которая, если ее быстро не исправить, может поставить под угрозу весь проект? Каждое утро у нас проходят совещания, на которых осуществляется просмотр на большом экране готовых кадров и обсуждается ход нашей работы. Именно здесь решаются возникшие проблемы подобного рода. Иногда они тривиальны, например, технический руководитель взял не самую новую версию или же в сцене какой-то из элементов оказался не в том месте Но в некоторых случаях это могут быть настоящие проблемы, когда все идет наперекосяк и никто не знает, как с этим бороться. Тогда мы пытаемся коллективно найти решение. О О чем нужно подумать, прежде чем приступить к сборке персонажа и сразу же после ее завершения? Помните о конечном результате, которого вы пытаетесь достичь. Не стоит усложнять сборку без необходимости. Разумеется, иногда такое усложнение даст персонажу возможность достичь потрясающей деформации, которая иногда происходит в реальности, но в основном это означает, что аниматору придется потратить несколько лишних часов (а то и дней), чтобы получить окончательный вид персонажа. А это не то, что можно себе позволить при фиксированных сроках проекта. Я обнаружил, что имеет смысл перед тем, как подойти к компьютеру, записать свои идеи и соображения на бумаге. Это помогает быстро представить себе всего персонажа и сформулировать проблемы, которые могут возникнуть в процессе работы над ним. В результате я получаю возможность решить их до передачи модели аниматору. Подобная подготовка делает ваши цели более ясными и облегчает дорогу от старта к финишу, О Какая из возможностей Maya с точки зрения профессионала наиболее полезна при сборке персонажей? Это возможность написания сценариев, Я имею в виду инструменты, позволяющие превратить длительный и болезненный процесс просто в щелчок на кнопке или в применение нового алгоритма для совершенно нового узла.
Заключение
569
По сути вы довольно просто можете заставить Maya делать ровно то, что вам нужно. Язык MEL представляет собой крайне мощный инструмент, позволяющий осуществлять любые действия, выходящие за стандарты Maya. Он является основой и для работы стандартных инструментов. Вот общее правило: если вам нужно выполнить какое-либо действие более одного раза, напишите для него сценарий. о Что по вашему предположению требуется, чтобы превратить Maya в наиболее мощный инструмент сборки персонажей ? Я считаю, что требуется система деформации мускулов и кожи. Большинство студий создают собственные версии подобного инструмента, но я думаю, что появление его в стандартном инструментарии Maya было бы гигантским шагом вперед. О Какой совет вы можете дать читателям нашей книги, которые хотели бы осво • итъ сборку персонажей? Для успешной сборки персонажей нужно обладать знаниями в области анатомии, понимать, как именно двигаются отдельные части персонажа и почему они двигаются именно так. Кроме того, вам нужно детально изучить какое-либо приложение для работы с компьютерной графикой, например Maya. Изучайте жизнь, внимательно смотрите на движения различных объектов, на их функционирование. Изучите программное обеспечение. Вы должны знать правила, применяемые в реальной жизни, прежде чем воплощать или нарушать эти правила на экране компьютера. При производстве анимации всегда возникают проблемы, для которых обнаруживаются элегантные решения, вдохновляющие на новые идеи. Именно это мне больше всего нравится в Maya,
Заключение Подготовка персонажа к анимации представляет собой один из этапов работы конвейера цифровой студии, а следующими этапами являются анимация, назначение материалов, освещение и визуализация. Это подразумевает не только непосредственно настройку и сборку персонажа, но и все то, что с этим связано. Разумеется, множество мелких деталей требует специальных приемов и процессов, которые мы будем обсуждать в следующей главе. Главное здесь помнить, что сборка персонажа может происходить параллельно с выполнением других этапов работы, то есть конвейер является нелинейным.
17 Сборка персонажей В процессе подготовки персонажей к анимации нужно эешигь несколько задач. В этой главе мы обсудим эти задачи применительно к проекту «Место для парковки» и объясним, в чем их важность. Особое внимание в этой главе уделяется пошаговому процессу сборки персонажей. Мы обсудим следующие темы: О о о о О о О О О О о О о О О
настройка позвоночника животного и положения его бедер; применение метода обратной кинематики для анимацли лап животного; настройка хвоста и ушей с помощью IK-решателя Spline; заместители геометрии с низким разрешением; блоки управления сборкой персонажа; усовершенствованный позвоночник для моделирования двуногих; растягивающиеся IK-ноги и классическая обратная нога; усовершенствованная рука и ключичный треугольник: усовершенствованная аддитивная рука и пальцы; управление чертами лица и деформатор Blend Shape; элементы управления глазами; гладкое связывание аппроксимирующей геометрии; весовая раскраска гладкой оболочки; весовая раскраска отдельных вершин; дополнительные объекты влияния.
Подготовка персонажа к анимации Самым первым шагом при сборке персонажа является изучение и сбор требований к анимации, включая выяснение типов движений персонажа и типов элементов управления, позволяющих удовлетворить эти требования. Затем нужно проанализировать раскадровки проекта и лочувствовать, что может вам потребоваться в каждом кадре. Также подумайте о дополнительных эле-
Зоздание иерархии сочленении для анимации
571
ментах управления и возможностях, которые могут оказаться полезными для анимации персонажа. РИМЕЧАНИЕ При чтении этой главы нужно помнить, что от персонажей, занятых в нашем проекте, не требуется фотореалистичности. Это всего лишь трехмерные куклы, которыми будет управлять аниматор, заставляя их двигаться одновременно и реалистично, и мультяшно.
Создание иерархий сочленений да анимации Теперь пришло время запланировать расположение сочленений персонажа в соответствии с его скелетной структурой. Это время экспериментов, в процессе которых можно пробовать различные варианты размещения сочленений, не затрагивая остальных аспектов модели. Сочленения в Maya крайне универсальны. Как показано на рис. 17.1, их можно создавать и располагать любым удобным вам образом.
Рис. 17.1. Иллюстрация гибкости сочленений
Следующим шагом является рисование сочленений в трехмерном пространств!/. Для этого лучше всего перейти к стандартному четьтрехоконно.чу представлении!, выбрав в меню любого окна проекции команду Panels > Layouts > Four Panes (Панели > Компоновка » Четырехсжонное представление). Затем с помощью ин румента Joint Tool (Сочленения), команда вызова которого находится в меню Sk (Ске-
572
Глава 17 • Сборка персонажем
лет), начните рисовать сочленения в одном из окон ортографической проекции. Рекомендуем воспользоваться окном Front (Вид спереди) или Side (Вид сбоку). В окнах центральной проекции крайне сложно отследить положение сочленений в пространстве. Создав первое сочленение, посмотрите в других окнах ортографических проекций, как оно располагается относительно персонажа. Затем, с помощью средней кнопки мыши, перетащите его на нужное место. После создания скелета нужно придать сочленениям нужную ориентацию. Для этого вы должны выделить все сочленения и выбрать в меню Skeleton (Скелет) команду Orient Joint (Ориентация сочленений), как показано на рис. 17.2.
Рис. 17.2. Команда Orient Joint
Если вам требуется переместить или изменить положение любого сочленения в произвольной точке перед связыванием, используйте клавишу Ins, предварительно активизировав инструмент Move (Перемещение). В результате вы сможете перемещать сочленение, не влияя на положение его потомков. Имейте в виду, что при этом нельзя масштабировать или вращать сочленения. Они только перемещаются. После перемещения одного из сочленений требуется повторно воспользоваться командой Orient Joint (Ориентация сочленений) или же выделить корневое сочленение и выполнить следующую команду: j o i n t -e -ch -oj xyz;
Завершив работу над выбором конфигурации сочленений, выделите их все и перейдите в режим редактирования подобъектов, нажав клавишу F8. Затем воспользуйтесь командой Display > Component Display > Local Rotation Axes (Отображение > Отображение подобъектов > Локальные оси вращения). С помощью инструмента Rotate (Повернуть) сделайте так, чтобы одна и та же ось (скорее' всего, это будет ось X) совпадала с осью кости, а две другие оси были ориентире ваны удобно для интуитивно понятного поворота сочленений персонажа при анимации. На рис. 17.3 показана локальная ось вращения в процессе редактирования.
издание иерархий сочленений для анимации
573
Рис 17.3. Задание положения локальной оси вращения
После того как вы разместили сочленения нужным образом, правильно ориентировали и отредактировали все локальные оси вращения, осталось только одно действие. Выделите верхний узел иерархии сочленений, который вы только что разместили и ориентировали, и выполните следующую команду: joint -e -ch -zso;
Это обнулит ориентации шкал и выровняет остальную часть матриц преобразования, связанных с сочленением, таким образом, чтобы получить совпадение с текущей ориентацией, которую вы редактировали при изменении локальной оси вращения. Это очень важный шаг, особенно если вы собираетесь перемещать или масштабировать сочленения. Его рекомендуется делать после выбора для сочленений окончательной ориентации. На рис. 17.4 и 17.5 показана окончательная структура скелета для обоих персонажей из проекта «Место для парковки*.
574
Ггава 17* Сборка персонажей
Рис. 17.4. Структура скелета Кляксы
Рис. 17.5. Структура скелета Крутана
575
:борка собаки
борка собаки В этом разделе вы познакомитесь с простой техникой, используя которую можно быстро подготовить четвероногого персонажа к анимации, не добавляя к нему сложные элементы управления. Несколько упражнений на эту тему дадут вам дополнительные сведения о процессе. В большинстве случаев простая сборка — это то, что вам нужно. Для главного героя анимации, действия которого будут в центре внимания, могут потребоваться сложные элементы управления. Технический руководитель проекта вместе с аниматорами решает, какой уровень сложности элементов управления требуется для конкретного персонажа, основываясь на требованиях к его движению.
Позвоночник и бедра собаки Применив метод прямой кинематики, мы создали простой позвоночник, который можно анимировать традиционным образом путем поворота сочленений. Как показано на рис. 17.6, позвоночник состоит всего из шести сочленений, готовых для присоединения элементов управления.
Рис. 17.6. Позвоночник состоит всего из шести сочленений
Важным в данном случае является не сам позвоночник, а способ, которым его сочленения соединены с ногами связью предок—потомок. Участок, с которого начи-
576
Глава 17» Сборка персонажей
наются ноги, имеет дополнительное сочленение между родительским сочленением ноги и связанным с ним сочленением позвоночника. Он управляет дополнительными поворотами груди. На рис. 17.7 показано, как иерархическая цепочка позвоночника должна соединяться с ногами с помощью дополнительного сочленения в области бедер.
Рис. 17.7. Позвоночник соединяется с ногами с помощью дополнительного сочленения, размещенного в области бедер
Эти сочленения связаны в иерархическую цепочку таким образом, что дополнительный элемент управления вращением может задействовать метод обратной кинематики для всех ног и при этом независимо поворачивать бедра персонажа. Возможность использования в иерархической цепочке дополнительных предков без сомнения представится вам еще не раз, поэтому имейте ее в виду, занимаясь сборкой персонажей.
Анимация лап персонажа по методу обратной кинематики Лапы персонажа состоят из четырех сочленений, выходящих из бедер и груди. Подушечки лап образуют одно сочленение, поворот которого осуществляется с помощью лодыжки, как показано на рис. 17.8. Относительно п ростой элемент управ-
Сборка собаки
577
ления подушечками был выбран потому, что нашей Кляксе не придется шевелить когтями по отдельности.
Рис. 17.8. Лапы персонажа состоят из четырех сочленений, в то время как для формирования подушечек лап использовалось всего одно
Чтобы создать элементы управления для лап по методу обратной кинематики, мы создали два IK-манипулятора для каждой из них и подключили локатор в качестве ограничителя поворота лодыжки, так же как I К-манипулятор для управления положением лап. Проделав упражнение, вы поймете, как именно осуществлялась сборка правой задней лапы. Этим же способом вы легко выполните сборку остальных трех лап.
Упражнение 17.1. Создание правой задней ноги Кляксы Начнем с создания IK-манипулятора между двумя сочленениями. 1. Загрузите файл Dog_SkeletalHiearchy.mb с прилагаемого к книге компакт-диска. Воспользуйтесь инструментом IK Handle Tool (Ж-манипулятор), чтобы создать IKманипулятор от сочленения Dog_jight_backLeg__l к сочленению Dog_right_backLeg_3. Присвойте этому новому манипулятору имя thighlkHandls и, не снимая с него выделения, выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования). 2. Создайте еще один IK-манипулятор от сочленения Dog_right_backLeg_3 к сочленению Dog_right_backLegAnkle и присвойте ему имя leglkHandle.
578
Глава 17* Сборка персонажей
3. Создайте локатор, выбрав в меню Create (Создать) команду Locator (Локатор), Воспользуйтесь привязкой к точке, активизировав инструмент Move (Перемещение), нажав клавишу v и перетащив локатор на манипулятор leglkHandle, нажав среднюю кнопку мыши. Присвойте ему имя footlkControl. 4. Создайте нулевое преобразование, нажав комбинацию клавиш Ctrl+g при отсутствии выделенных объектов в сцене. Перетащите его на манипулятор leglkHandle при нажатой клавише v, как и на предыдущем шаге. Теперь нужно придать нулевому преобразованию ориентацию, которую на данный момент имеет сочленение Dog_right_backLegAnkle. 5. Сначала выделите нулевое преобразование, а затем добавьте в выделенный набор сочленение Dog_right_backLegAnkle, щелкнув на нем при нажатой клавише Shift. Нажмите клавишу р, чтобы произвести операцию связывания. Затем выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования). Это обнулит значения всех преобразований и поместит нулевой узел в пространство сочленения лодыжки, как показано на рис. 17.9.
Рис. 17.9. Выбрав команду Freeze Transformations, вы обнулите знамения преобразований нулевого узла и поместите его в пространство сочленения лодыжки
6. Теперь верните нулевое сочленение обратно в глобальное пространство сцены, выделив его и выбрав в меню Edit (Правка) команду Unparent (Разорвать связь),
Сборка собаки
579
7. Выделите локатор footlkControl и свяжите его в иерархическую цепочку с узлом нулевого преобразования. Зафиксируйте преобразования узла footlkControl. Теперь он имеет ту же самую ориентацию, что и сочленение лодыжки. 8. Выделите локатор footlkControl и, используя клавишу Shift, добавьте в выделенный набор манипулятор leglkHandle. Выберите в меню Constrain (Ограничение) команду Point (Точка). Затем снова выделите по очереди локатор footlkContro'i и сочленение Dog_right_backLegAnkle и выберите в меню Constrain (Ограничение) команду Orient (Ориентация). Вы только что создали ограничение по типу Point (Точка) для 1К-манипулятсра, выбрав в качестве объекта-мишени локатор. Кроме того, подушечка лапы была ограничена по типу Orient (Ориентация) таким образом, чтобы поворот подушечки приводил к повороту всей ноги. Вы практически закончили сборку ноги. Осталось добавить ограничение типа Pole Vector (Вектор полюса). 9. Создайте локатор и присвойте ему имя leg_poleVector. Поместите его за лапой персонажа со стороны, противоположной сгибу вовнутрь. 10. Соблюдая очередность, выделите локатор leg_poleVector и манипулятор leglkHandle, затем выберите в меню Constrain (Ограничение) команду Pole Vector (Вектор полюса). 11. Сгруппируйте локатор leg_poleVector с самим собой, чтобы добавить к нему пустое преобразование, а затем ограничьте по типу Point (Точка) узел группы с узлом DogJHipsJoint. Выделите эту новую группу вместе с оставшимися ГКманипуляторами в диалоговом окне Hypergraph (Просмотр структуры), а также добавьте в выделенный набор нулевое преобразование, которое является родительским по отношению к элементу управления лапы. Нажмите комбинацию клавиш Ctrl+g и присвойте новой группе имя IkLegControls, как показано на рис. 17.10. 12. Повторите предыдущие шаги для всех остальных лап. По мере накопления опыта вы сможете выполнять эту процедуру быстрее. 13. Закончив сборку всех ног, добавьте к их именам префикс, выделяя каждый узел каждой ноги по отдельности, выбирая в меню Modify (Изменить) команду Prefix Hierarchy Names (Префикс к названию иерархии) и вводя префикс для каждой из лап в появляющемся диалоговом окне. Для передней правой лапы — это префикс frontRightl_eg_, для правой задней лапы — backRightl_eg_, соответственно для передней и задней левых лап — frontLeftLeg_ и backLeftteg_. 14. Теперь выделите все четыре лапы, принадлежащие к группе IkLegControls. Сгруппируйте их, нажав комбинацию клавиш Ctrl+g, и присвойте новой группе имя LegControls. 15. Напоследок сгруппируйте группу LegControls и сочленение Dogjlootn присвойте новой группе имя DogMainTransform, как показано на рис. 17.11. Готовый файл Dog_LegsSetup_Finished.mb находится в папке Chapters\Chapterl7 прилагаемого к книге компакт-диска.
580 Глава 17- Сборка персонажей
Рис. 17.10. Новая группа IkLegControls
Рис. 17.11. Окончательный вариант сборки собачьих
пап
Сборка собаки
581
Сборка хвоста и ушей Техника с применением решателя IK-сплайна, применяемая для сборки ушей и хвоста, распространена весьма широко и повсеместно используется в комбинации с элементами управления по методу прямой кинематики. В упражнении данного раздела вам предстоит создать решатель IK Spline Solver (Решатель IK-сплайна) для иерархии сочленений, а затем нарисовать иерархию сочленений с низким разрешением поверх кривой решателя (обычно в данном случае хватает двух или трех сочленений). После этого вы постепенно привяжете сочленения с низким разрешением к кривой IK-сплайна. Это замечательный способ понять сущность управления по методу прямой кинематики, сохранив при этом возможность перемещения сочленения для IK-сплайна.
Упражнение 17,2. Сборка хвоста Кляксы Это упражнение касается только сборки хвоста. Для сборки ушей используется та же самая техника. 1. Загрузите файл DogJ_egsSetup_Finished,mb с прилагаемого к книге компакт-диска или продолжите выполнение предыдущего упражнения. 2. Щелкните на квадратике, расположенном справа от команды IK Spline Handle (Манипулятор сплайна) в меню Skeleton (Скелет). Щелкните на кнопке Reset Tool (Восстановить исходные параметры инструмента) в верхней части появившегося диалогового окна, а затем снимите флажки Auto Simplify Curve (Автоматическое упрощу ние кривой) и Auto Parent Curve (Автоматическое создание иерархической цепочки). 3. Нарисуйте кривую IK-сплайна, начиная с корневого и заканчивая последним сочленением иерархии. В рассматриваемом случае это будет хвост, состоящий из девяти сочленений. Создание сплайна-манипулятора начнется с узла Dog_ tail_l и закончится узлом Dog_taiL9. 4. Воспользуйтесь инструментом Joint Tool (Сочленения). Удерживая клавишу с, чтобы осуществить привязку к кривой, нарисуйте еще одну иерархическую цепочку, состоящую всего из четырех сочленений, точно поверх кривой-сплайна, созданной с помощью инструмента IK Spline Handle (Манипулятор сплайна). 5. Перетащите новую иерархию вверх на небольшое расстояние, чтобы отделить ее от уже имеющегося набора сочленений, как показано на рис. 17.12, и переименуйте каждое сочленение в иерархии TailControUoint. 6. При нажатой клавише Shift выделите самого старшего предка в иерархии TailControlJoint и NURBS-кривую, автоматически созданную инструментом IK Spline Handle (Манипулятор сплайна). Это проще всего сделать в диалоговом окне Нурегgraph (Просмотр структуры). 7. Выберите в меню команду Skin > Bind Skin > Smooth Bind (Оболочка > Связать с оболочкой > Гладкое связывание). 8. Выделите корневое сочленение иерархии с низким разрешением и свяжите его с узлом, который будет управлять вращением хвоста и с которым соединен решатель IK-сплайна. В рассматриваемом случае нужно соединить иерархию TailControlJoint с узлом DogJHips Joint. В итоге при повороте бедер хвост тоже вильнет в сторону. 9. Повторите вышеуказанные действия для обоих ушей.
582
Глава 17* Сборка персонажей
Рис. 17.12. Создание иерархической управляющей цепочки с низким разрешением
10. После завершения сгруппируйте все несгруппированные манипуляторы IKсплайна, а также IK-кривые под новым узлом. Затем поместите этот узел в иерархическую систему персонажа, которой не назначена анимация. В нашем случае мы добавили новый узел группы к узлу DogMainTransform и присвоили ему имя Dog_character. Эта группа становится родительской по отношению ко всем элементам персонажа, которые не должны анимироваться в качестве дочерних объектов. 11. Зафиксируйте преобразования перемещения, поворота и масштабирования узла группы Dog_character. Сгруппируйте все оставшиеся IK-конгроллеры и NURBS-кривые под узлом группы Dog_character. Готовая версия сцены находится в файле Dog_TailAndEarSetup_Finished.mb на прилагаемом к книге компакт-диске.
Заместители с низким разрешением Как вы увидите в следующем упражнении, создание замещающей геометрии представляет собой очень простой процесс. Эта геометрия — лишь копия модели с низким разрешением, которая затем делится на фрагменты в соответствии с сочленениями. Для этого используется инструмент Cut Faces Tool (Разрезать грань). Новые фрагменты полигонов становятся дочерними по отношению к сочленениям, которым они соответствуют. В результате заместитель геометрии перемещается вместе с иерархией сочленений, но не связан с ней и не деформи оуется. Поэтому работа с данной моделью происходит быстро.
Сборка собаки
583
Упражнение 17.3. Создание замещающей геометрии с низким разрешением Продолжите выполнение предыдущего упражнения или загрузите файл Dog_TailAndEarSetup_Finished.mb с прилагаемого к книге компакт-диска. 1. Импортируйте в файл Dog_TailAndEarSetup_Finished.mb файл DogJowResPolyStarvdln.mb, содержащий модель собаки с низким разрешением, показанную на рис. 17.13.
Рис. 17.13- Вариант модели персонажа, имеющий низкое разрешение
2. Внимательно посмотрите на иерархию сочленений собаки и попытайтесь понять, каким образом нужно разрезать модель с низким разрешением. Обычно модель разрезается в местах будущих сгибов или там, где располагаются дочерние элементы, которые требуется повернуть независимо от их предков, чтобы достичь определенного положения персонажа. 3. Выделите модель персонажа и щелкните на квадратике, расположенном справа от команды Cut Faces Tool (Разрезать грань) в меню Edit Polygons (Правка полигонов), как показано на рис. 17.14. 4. Перетащите указатель мыши в месте будущего разреза и посмотрите, как под действием инструмента Cut Faces Tool (Разрезать грань) на модели появляется
584
Глава 17 * Сборка персонажей
прямая линия. Именно тут полигоны будут разрезаны, как только вы отпустите кнопку мыши. Произведите необходимые разрезы. Поэкспериментируйте с разрезанием геометрии и с выравниванием инструмента по расположению сочленений.
Рис. 17.14. Выделите модель с низким разрешением и активизируйте инструмент Cut Faces Tool
5. Когда все полигоны будут разрезаны, выберите команду Separate (Отделить) в меню Edit Polygons (Правка полигонов), а затем — команду Edit > Delete by Type > History (Правка * Удалить все объекты типа > История). 6. Разрежьте геометрию каждого из сочленений на отдельные фрагменты, пытаясь не разрезать остальные части модели. При каждом разрезе отделяйте полигон и удаляйте историю. 7. По одному выделяйте каждый отрезанный полигон и ближайшее к нему сочленение и нажимайте клавишу р, чтобы создать иерархическую цепочку. Проделайте это для всех отрезанных фрагментов. Готовая версия модели находится в файле DogJ_owResStandIn_Finished.mb на прилагаемом к книге компакт-диске.
Подсоединение к сборке персонажа управляющих параллелепипедов Элементы управления, имеющие форму параллелепипеда, представляют собой манипуляторы, с помощью которых осуществляется анимация персонажа. Они находятся на дополнительном уровне настройки, присоединенном к сочленениям скелета, а также к элементам управления обратной кинематикой и иерархиями, и дают аниматору простой и интуитивно понятный способ выделения всех анимируемых элементов управления персонажем. Все перемещения и повороты пер-
585
Сборка собаки
сонажа должны происходить под управлением этих элементов, а не случайных локаторов или манипуляторов, которые сложно увидеть и еще сложнее выделить. Управляющие параллелепипеды можно создать из NURBS-кривых или из объектов полигонов, которым не назначен материал. Чаще всего для этой цели применяются NURBS-кривые, так как существует возможность запретить их выделение в окнах проекций с помощью маски выделения, расположенной в строке состояния. Можно также сделать их невидимыми в окне проекции, сняв флажок у команды NURBS Curves (NURBS-кривые) меню Show (Показать) окна проекции. Загрузите файл CharacterControlBox.mb с прилагаемого к книге компакт-диска, чтобы посмотреть, как выглядят такой элемент управления, Как видите, это всего лишь NURBS-кривая, которой была придана форма куба и присвоено имя СопtrolBox, как показано на рис. 17,15. Разумеется, элементы управления могут иметь любые размер и форму, придаваемую им путем перемещения управляющих точек кривой.
Рис. 17.15. Элемент управления, имеющий форму куба
Прикрепить элемент управления к персонажу можно несколькими способами. По сути вам нужно соединить элементы управления преобразованиями куба с элементами управления преобразованиями собранного персонажа. Это можно сделать с помощью выражений, сложной сети узлов или ограничений и иерархических цепочек. Ниже перечислены методы, применяемые для этой цели чаще всего.
586
Глава 17* Сборка персонажей
О Иерархическая цепочка преобразований. Нужно сделать элемент управления персонажем дочерним по отношению к кубу из NURBS-кривых. Это легко и эффективно срабатывает в случаях с манипуляторами обратной кинематики, локаторами, участвующими в ограничениях, и группами, управляющими перемещением или поворотом. о Иерархическая цепочка форм создается путем связывания с узлами формы NURBS-кривых. Обратите внимание, что в данном случае берутся именно узлы формы, а не преобразования, Чтобы их увидеть, нужно открыть диалоговое окно Hypergraph (Просмотр структуры) и выбрать команду Input and Output Connections (Входные и выходные связи) в меню Graph (Граф). Сделав NURBS-кривую дочерней по отношению к действительному преобразованию, вы подсоедините элемент управления, который позволит использовать NURBS-кривые в качестве манипуляторов выделения существующих сочленений или элементов управления анимацией. Для этого сначала в режиме привязки к точке перетащите NURBS-кривую иа выбранное сочленение. Затем сделайте преобразования кривой дочерними по отношению к сочленению и выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования). Выделите NURBS-кривую и при нажатой клавише Shift добавьте в выделенный набор сочленение (или любой другой узел преобразования), к которому требуется подсоединить NURBS-кривую в качестве удобного манипулятора. После этого вэспользуйтесь следующей MEL-командой: parent -г -shape;
В итоге узел NURBS-кривой окажется под узлом преобразования сочленения. После этого выделение кривой в окне проекции будет приводить к выделению узла преобразования соответствующего объекта. О Группировка элементов управления с ограничениями. Создайте узел группы, имеющий те же самые ориентацию и пространство преобразований, что и сочленение или узел, к которому требуется присоединить управляющий параллелепипед. Сделайте этот узел родительским по отношению к параллелепипеду. Зафиксируйте преобразования элемента управления и ограничьте его по типу Point (Точка) относительно сочленения, к которому осуществляется привязка. Затем воспользуйтесь ограничением типа Orient (Ориентация), чтобы разрешить повороты управляющего параллелепипеда. Получить узел группы, имеющий те же самые ориентацию и пространство преобразований, что и сочленение или узел, к которому присоединяется управляющий параллелепипед, можно двумя способами. Во-первых, можно создать нулевое преобразование, нажав комбинацию клавиш Ctrl+<j при отсутствии в окне проекции выделенных объектов. Во-вторых, для него можно выбрать ту же самую опорную точку, что и для сочленения, с которым осуществляется соединение. Это, в свою очередь, тоже можно сделать двумя способами. • По очереди создайте ограничения типа Point (Точка), Orient (Ориентация) и Scale (Масштаб) для нулевого преобразования и сочленения. Затем сразу же удалите узлы ограничений, чтобы поместить нулевое преобразование в пространство преобразований сочленения.
Сборка собаки
587
•
Воспользуйтесь привязкой к точке, чтобы поместить нулевое преобразование поверх сочленения. Затем на время создайте иерархическую цепочку и;? нулевого преобразования и сочленения, зафиксируйте преобразования и разорвите установленную связь, чтобы вернуть нулевое преобразование в пространство преобразований сочленения, О Группировка элементов управления с прямыми связями. Создайте нулевой узел группы и ограничьте его по типу Point (Точка) и Orient (Ориентация) с родительским узлом сочленения, к которому будет присоединен управляющий параллелепипед. Создайте узел группы, имеющий те же самые ориентацию и пространство преобразований, что и сочленение. Сделайте его родительским по отношению к элементу управления. Сделайте узел группы элемента управления дочерним по отношению к ограниченному нулевому узлу. Зафиксируйте преобразования элемента управления и откройте диалоговое окно Connection Editor (Редактор связей). Загрузите в левую часть преобразования поворота NURBSкривой, а в правую — преобразования поворота сочленения и соедините их друг с другом. В итоге элемент управления будет задавать поворот сочленения. Несмотря на прямое соединение, их совместное движение всегда будет корректным, так как родительские объекты соединены с ограничениями, а оба узла находятся в одном и том же пространстве преобразований. Подсоединение элементов управления является важной частью сборки персонажей и представляет собой один из последних этапов перед тестированием анимации. Не имеет значения, каким именно способом вы соедините элементы управления с персонажем, главное, чтобы они работали нужным образом и перемещали нужные узлы. В простых случаях можно вообще ограничиться только созданием иерархических цепочек или прямым связыванием. Кроме того, имеет смысл оставить возможность возвращения элементов управления после перемещений и поворотов в заданное по умолчанию состояние с нулевыми значениями преобразований. Таким образом, чтобы переместить элемент управления, поменять его масштаб или положение, перейдите в режим редактирования подобъектов и придайте ему нужную форму путем перемещения вершин. Это также означает фиксацию преобразований перед соединением элемента управления с выбранным сочленением. Помните, что управляющие параллелепипеды применяются всего лишь для выделения элементов управления анимацией и перемещения персонажа. Поэтому они должны быть видимы и доступны для выделения в любом окне проекции. Иногда этого довольно сложно добиться. Приходится прибегать к неровной или асимметричной форме и к выделению цветом. В результате разница между двумя управляющими параллелепипедами будет видна невооруженным глазом. Ниже перечислены простые способы выделения цветом управляющих параллелепипедов. О Выделите объект и выберите в меню Display (Отображение) команду Wireframe Color (Цвет каркаса). После этого останется только выбрать подходящий цвет в появившемся диалоговом окне. Тогда атрибуты, которые используются программой для изменения цвета узла, останутся незатронутыми. О Откройте диалоговое окно Attribute Editor (Редактор атрибутов) и раскройте раздел Display (Отображение). Затем раскройте ставший видимым раздел Display
588 Сборка персонажей Overrides (Замещение отображения) и установите флажок Enable Overrides (Включить замещение). В нижней части окна станет доступным цветовое поле Color (Цвет) с ползунком выбора цвета. О Создайте новый слой и поместите в него объект, а затем поменяйте цвет этого слоя. Это наименее предпочтительный метод, потому что создавать слой для каждого объекта, цвет каркаса которого требуется изменить, неэффективно, рис. 17.16и17.17 показаны управляющие параллелепипеды моделей КруганаНа и Кляксы,
Рис. 17.16. Элементы управления моделью Крутана
Усовершенствованные элементы управления двуногим персонажем
589
ПРИМЕЧАНИЕ Изменение цвета отображения каркаса влияет только на OpenGL-отображение узла, не затрагивая вид или цвет атрибутов материала программно визуализируемых элементов. Впрочем, затронутым оказывается аппаратно визуализируемый цвет каркаса.
Рис. 17.17. Элементы управления моделью Кляксы
Усовершенствованные элементы управления двуногим персонажем В этом разделе мы рассмотрим несколько усовершенствованных подходов к сборке персонажа, позволяющих установить его в любую требуемую позу. Мы знаем, что Крутан должен стоять на двух ногах, сидеть, вести машину, попасть под струю пожарного гидранта, опрокинуться, а также взаимодействовать с рядом объектов и элементов реквизита. При разработке элементов управления не стоит выпускать из виду, что анимация персонажа осуществляется в стиле мультфильма. Для спины Крутана будет использоваться специальная сборка, включающая макет растягивающегося IK-сплайна, управляемого с помощью интуитивно понятных элементов у правления
590
Глава 17 • Сборка персонажей
иерархией, функционирующей по методу прямой кинематики. Это даст персонажу способность равномерно растягивать спину, как это происходит в реальности. Кроме того, при этом станут допустимыми повороты элементов управления по методу прямой кинематики, предназначенных для получения определенных поз, которые невозможно контролировать с помощью метода обратной кинематики. Существует и возможность растягивать спину, выходя за границу реальных возможностей человека, поэтому только аниматору решать, насколько сильно должна гнуться, сгибаться и т. п. спина персонажа. Для анимации ног персонажа используется метод обратной кинематики, так как Крутану для ходьбы придется ставить свои ноги па землю. Движение рук будет моделироваться по тому же принципу, а простая техника создания иерархических цепочек по методу обратной кинематики понадобится для воспроизведения поворота плеч в стиле прямой кинематики, а также для перемещения ключиц и рук. Это даст полный контроль над позой персонажа. Ноги и руки персонажа будут иметь встроенную способность к растяжению. Это добавляет еще один уровень управления, особенно при соприкосновении рук или ног с различными элементами сцены, так как при этом персонажу иногда приходится тянуться к объекту. Начнем сборку сложного персонажа с создания элемента, который можно было бы назвать «божественным позвоночником». Споры об элементах управления позвоночником велись не один год, и Maya поддерживает ряд методик, позволяющих достичь хороших результатов. Но в этих методиках не используются ключевые элементы, присущие другим стилям сборки, к которым привыкли многие аниматоры. В итоге возникает дилемма: как управлять пространством преобразований, чтобы добиться максимально возможных движений, сохраняя удобство и стабильность? Усовершенствованный вариант сборки позвоночника ре шает большинство, если не все проблемы, присущие ранее применявшимся приемам. Кроме того, он совмещает элементы управления из методов прямой и обратной кинематики, позволяя аниматору применять оба метода одновременно. Вам не потребуется неудобного или непонятного включения и выключения весовых атрибутов. Данный вариант сборки был выбран исходя из перечисленных ниже требований. О Требовалась возможность перемещать бедра персонажа, не меняя положения плеч, и наоборот, двигать плечи, не меняя положения бедер. О Требовалась возможность выделять элемент управления и поворачивать его в любом направлении. При этом спина персонажа должна была поворачиваться таким образом, как будто она является простой иерархией сочленений, движущейся по методу прямой кинематики. О Требовалась возможность выделять один и тот же элемент управления и перемещать его, двигая при этом позвоночник персонажа, как 1К-сплайн. О Требовалась возможность равномерного сжатия и растяжения между позвонками при анимации элементов управления, О Требовалась возможность контроля с помощью минимального числа управляющих сочленений при большом числе сочленений, из которых состоит позвоночник.
Усовершенствованные элементы управления двуногим персонажем
591
о Требовались стабильность, предсказуемость и эффективность. При этом для работы над вторичным движением не должны были применяться математичес кие функции, которые заставляют аниматора «бороться» с движением.
Упражнение 17.4. Сборка позвоночника Сборка позвоночника представляет собой универсальный процесс, применимый как для реальных персонажей, так и для героев мультфильмов. 1. Начните с создания иерархии сочленений и ориентации ее отдельных членов. Для позвоночного столба обычно используют от 12 до 18 сочленений, но у вас этот показатель может отличаться. Чтобы результат сборки функционировал корректно, требуется выполнять определенные правила. • При настройке инструмента Joint Tool (Сочленения) должен быть установлен флажок Scale Compensate (Компенсация масштабирования). • Все сочленения должны иметь корректную ориентацию, как показано на рис. 17.18. Для этого при настройке инструмента Orient joint (Ориентация сочленения) нужно установить флажок Scale (Масштабировать). 2. Создайте IK-манипулятор сплайна от первого к последнему сочленению, воспользовавшись командой IK Spline Handle (Манипулятор сплайна) меню Skeleton (Скелет). Убедитесь, что в окне настройки инструмента снят флажок Auto Simplify Curve (Автоматическое упрощение кривой), как показано на рис. 17.19.
Рис. 17.18. Перед тем как продолжить работу, установите флажок Scale Compensate и правильно ориентируйте все сочленения
592
Глава 17 • Сборка персонажей
ПРИМЕЧАНИЕ Если вы предпочитаете начать с готовой иерархии сочленений, загрузите файл Jerk_DivineSpine__Begin.mb с прилагаемого к книге компакт-диска.
Рис. 17.19. Убедитесь, что в диалоговом окне настройки инструмента IK Spline Handle снят флажок Auto Simplify Curve
3. Выделите кривую IK-манипулятора сплайна, которую автоматически создал для вас инструмент Ж Spline Handle (Манипулятор сплайна). Затем создайте информационный узел кривой, выполнив следующую MEL-команду: arclen -ch on;
При этом ваша кривая может иметь имя curvel. 4. Выделите кривую IK-сплайна, откройте диалоговое окно Hypergraph (Просмотр структуры) и выберите в меню Graph (Граф) команду Input and Output Connections (Входные и выходные связи). Вы увидите узел curvelnfo, присоединенный к кривой, как показано на рис. 17.20. Он содержит информацию о длине этой кривой. 5. Выберите в меню Create (Создать) диалогового окна Hypershade (Редактор узлов) команду Create Render Node (Создать узел визуализации) и на вкладке Utilities (Служебные элементы) появившегося диалогового окна создайте узел Multiply Divide (Умножить/Разделить). 6. Дважды щелкните на только что созданном узле, чтобы вызвать для него диалоговое окно Attribute Editor (Редактор атрибутов), и выберите в раскрывающемся списке Operation (Операция) вариант Divide (Разделить). Откройте диалоговое окно Hypergraph (Просмотр структуры) и сделайте видимыми входные и выходные связи вместе с узлом IK-сплайна, который представляет собой NURBSкривую, как показано на рис. 17.21.
Усовершенствованные элементы управления двуногим персонажем
593
Рис. 17.20. Узел curvelnfo содержит информацию о длине кривой
Рис. 17.21. Выберите в раскрывающемся списке Operation для узла Multiply Divide вариант Divide
Если вдруг вы не видите узел типа Utilities (Служебные элементы), например узел Multiply Divide (Умножить/Разделить), его легко можно найти на вкладке Utilities
594
Глава 17 • Сборка персонажей
(Служебные элементы) диалогового окна Hypershade (Редактор материалов). Если же этот метод не сработал (так как отсутствует соединение с узлом defaultRenderUtilityList), остается воспользоваться командами языка MEL. Для выделения узла по его типу используйте команду: select -add "Is -type raultiplyOlvlde*: Для выделения по групповому имени используйте команду; select -add "*mult1plyDivide*": После этого остается выбрать в меню Graph (Граф) диалогового окна Hypergraph (Просмотр структуры) команду Input and Output Connections (Входные и выходные связи). 7. Откройте диалоговое окно Connection Editor (Редактоэ связей), загрузите в его левую часть узел curvelnfb, а в правую — узел multiply Divide. 8. Решите, какая из осей в иерархии сочленений указывает вниз по кости, чтобы процесс масштабирования сочленений происходил вдоль оси, указывающей на следующее сочленение. Это определит атрибуты, которые нужно будет соединить на следующем шаге. В пашем примере, если вы используете для команды Orient Joint (Ориентация сочленений) заданные по умолчанию оси X, Y и Z, вам потребуется соединить ось X, как показано на рис. 17.22.
Рис, 17.22. Соединение узла curvelnfo с результатами применения команды Orient Joint
Усовершенствованные элементы управления двуногим персонажем
595
9. Соедините атрибут arcLength узла curvelnfo с атрибутом inputl узла multiply Divide. Убедитесь, что вы используете ту ось, вдоль которой происходит масштабирование сочленения. В нашем случае нужен атрибут inputlX. 10. Посмотрим, какое значение имеет атрибут inputl узла multiplyDivide. Для этого достаточно обратить внимание на подсвеченное желтым цветом поле в разделе Multiply-Divide Attributes (Атрибуты умножения/Деления) в диалоговом окне Attribute Editor (Редактор атрибутов). В нашем случае это значение 66,637. Это выходное значение атрибута arcLength, который возвращает текущую длину кривой IK-сплайна. Если длина этой кривой меняется (например, при деформации), этот атрибут обновляется и передает новое значение узлу multiplyDivide. Теперь нужно получить нормализованное соотношение, которое представля ет собой величину масштабирования кривой. Оно будет управлять атрибутами масштабирования каждого сочленения в иерархии. Его легко получить, поделив текущую длину (она выделена желтым цветом) на исходную длину кривой. В итоге, как подсказывает здравый смысл, выходное значение в заданном по умолчанию состоянии всегда равно 1. Ведь кривая еще не подвергалась деформации, поэтому текущая длина равна исходной. 11. Скопируйте значение входного атрибута узла multiplyDivide, которое выделено желтым цветом, и вставьте его в соответствующий канал input2, расположенный в диалоговом окне Attribute Editor (Редактор атрибутов) чуть ниже. В результате получится значение, показывающее, на какую величину должна быть изменена длина цепочки сочленений, чтобы примерно достичь текущей длины кривой. Его йотом можно использовать для управления атрибутом scaleX каждого из сочленений, как показано на рис. 17.23. 12. Еще раз откройте диалоговое окно Connection Editor (Редактор связей) и загрузите в левую часть узел multiplyDivide, а в правую часть — сочленения. Соедините атрибут outputX узла multiplyDivide с атрибутами scaleX каждого из сочленений, как показано на рис. 17.24. Пропустите самое последнее сочленение в иерархии (оно находится ниже всех в цепочке). Теперь пришло время создать второй скелет в иерархии. Это будет иерархия сочленений с низким разрешением, предназначенная для управления движением иерархии с высоким разрешением путем применения набора связываний и взвешенных ограничений тина Pole Vector (Вектор полюса). Обычно для данной цели достаточно четырех или шести сочленений. 13. Создайте сочленения и убедитесь, что они равномерно распределены в пространстве и расположены в местах, где спина по вашим задумкам должна сгибаться. Также их нужно поместить непосредственно поверх кривой IK-сплайна. Для этого удерживайте клавишу с в процессе работы с инструментом Joint Tool (Сочленения). Это активизирует режим привязки к кривой. Начальное и конечное положения новой иерархии должны совпадать с начальной и конечной точками 1К-сплайна. 14. Правильно расположив и ориентировав сочленения новой иерархии, как показано на рис. 17.25, выберите в меню Modify (Изменить) команду Prefix Hierarchy
596
Глава 17 • Сборка персонажей Names (Приставка к названию иерархии) и введите в появившемся диалоговом окне имя lowRes Control .
Рис, 17.23. Значение, указывающее, насколько нужно изменить длину цепочки сочленений
15. Одновременно выделите кривую сплайна и корневое сочленение новой иерархии. Выполните гладкое связывание кривой с иерархией сочленений модели с низким разрешением. 16. Проверьте, как иерархия сочленений с низким разрешением сгибает 1К-сплайн. Если вам не нравится форма получаемой кривой, несколько раз воспользуйтесь командой Undo (Отмена), пока не получите возможность перестроить иерархию с низким разрешением. Проделайте этот прием несколько раз, как показано на рис. 17.26, чтобы получить нужное расположение сочленений иерархии с низким разрешением.
Усовершенствованные элементы управления двуногим персонажем
Рис. 17.24. Соедините атрибут outputX узла multiplyDivide с атрибутами scaleX каждого из сочленении, кроме последнего в цепочке -
Рис. 17.25. Иерархию сочленений с низким разрешением нужно переименовать
597
598
Глава 17- Сборка персонажей
Рис. 17.26. Проверка влияния иерархии сочленений с низким разрешением на вид 1К-сплзйн;э
17. Выровняйте веса кривой после гладкого связывания путем более равномерного распределения весов управляющих точек кривой по сочленениям. Для этого нужно выделять по очереди управляющие точки и использовать вкладку Smooth Skins (Гладкие оболочки) диалогового окна Component Editor (Редактор подобъектов), как показано на рис. 17.27, Редактируйте веса путем изменения некоторых значений с 1 до 0,5 или 0,75, в зависимости от того, насколько близко они находятся к сочленениям. Теперь иерархия IK-сплайна замечательно сгибается и сжимается, но у нее отсутствует способность к скручиванию. Это обусловлено свойствами вектора полюса решателя IK-сплайна. Хотя этот решатель имее г встроенную плоскость вращения и может контролироваться с помощью атрибута скручивания, применение этого атрибута лишает аниматора интуитивно понятного управления, которое требуется при повороте контроллеров у сочленений цепочки с низким разрешением. То есть вам требуется плоскость вращения для каждого из сочленений, которая имеет средневзвешенное управление скручиванием позвоночника на основе скручивания цепочки сочленений с низким разрешением. К сожалению, IK-сплайн позволяет использовать только одну плоскость вращения, равномерно распределенную вдоль всей иерархии. Поэтому на следующих шагах мы создадим еще одну иерархию сочленений. На этот раз она будет представлять собой точную копию иерархии IK-сплайна, но без самого IK-сплайна и с взвешенным вектором полюса, ограниченным IК-манипулятором JkRPsolver в каждом из сочленений.
Усовершенствованные элементы управления двуногим персонажем
599
Рис. 17.27. Использование диалогового окна Component Editor для редактирования весов
18. Выделите корневое сочленение исходной кривой иерархии сочленений IKсплайна и продублируйте ее с заданными по умолчанию параметрами. Удалите в новой иерархии ненужный узел эффектора. Делайте это аккуратно, чтобы случайно не удалить эффектор, к которому подсоединен решатель IKсплайн. 19. Выберите вменю Modify (Изменить) команду Prefix Hierarchy Names (Приставка к названию иерархии) и переименуйте дубликат иерархии, воспользовавшись приставкой IkJ3ind_Spine_. С этим позвоночником, показанным на рис. 17.28, в конечном счете, будет связана сетка персонажа. ПРИМЕЧАНИЕ В итоге у вас появятся три иерархии, с одной из которых (вы ее только что продублировали) будет связана оболочка персонажа. Эта иерархия частично управляется исходной иерархией splinelk, соответствующей натянутому позвоночнику. Указанные две иерархии не должны быть связаны с группами, которые преобразуются вместе с персонажем, так как они полностью контролируются позвоночником с низким разрешением. Этот позвоночник в данный момент гладко связан с кривой сплайна позвоночника. При преобразовании связанной иерархии IK-сплайна вы получите двойное преобразование. Впрочем, подробно об этом мы поговорим чуть позже.
20. Переместите корневой узел иерархии-дубликата Ik_Bind_Spine_ от иерархии IK-сплайна, чтобы избежать проблем с выделением сочленений в окнах проекций.
600
е
Ггава 17 Сборка персонажей
Рис. 17.28. Именно с этим позвоночником будет связана сетка персонажа
Теперь вам нужно создать плоскость вращения для IK-манипуляторов каждого сочленения новой иерархии Ik_Bind_Spine_, начиная с корневого сочленения. С помощью инструмента IK Handle Tool (Ж-манипулятор) требуется получить манипуляторы, имеющие длину одного сочленения. 21. Выделите первое сочленение, а затем очередное сочленение в иерархии вверх по позвоночнику. После этого начните с основания следующего 1К-манипулятора, расположенного в конце предыдущего только что созданного манипулятора. Продолжайте этот процесс, пока не достигнете конца иерархии, как показано на рис. 17.29. В результате вы должны получить число манипуляторов, на единицу меньшее числа сочленений. Единственное сочленение, не имеющее ПС-манипулятора, находится наверху иерархии — это корневое сочленение, которое впоследствии будет ограничено по типу Point (Точка). Следующие несколько шагов относятся к выравниванию манипулятора rplk позвоночника с IK-сплайном позвоночника, 22. Для начала создайте ограничение типа Point (Точка) для каждого манипулятора rplk и соответствующего сочленения иерархии IK-сплайна. Затем ограничьте по типу Point (Точка) корневое сочленение Ik_Bind_Spine_ rplk с корнем иерархии IK-сплайна, как показано на рис. 17,30 и 17.31. 23. Соедините атрибуты масштабирования каждого из исходных сочленений в иерархии IK-сплайна с атрибутами масштабирования соответствующих им сочленений в иерархии Ik_BincLSpine_ rplk.
Усовершенствованные элементы управления двуногим персонажем
601
Рис. 17.29. Создание Ж-манипуляторов плоскости вращения в каждом сочленении новой иерархии Ik_Bind_Spine_
Рис. 17.30. Результат действия ограничения типа Point на половину 1К-манипуляторов и соответствующих им сочленений позвоночника splinelk
602
Глава 17* Сборка персонажей
Рис. 17.31. Результат действия ограничения типа Point на псе 1К-манипуляторы с соответствующими сочленениями позвоночника splinelk
Так как эти две иерархии располагаются в окнах проекции друг поверх друга, проще всего для выделения нужных элементов использовать диалоговое окно Hypergraph (Просмотр структуры) в режиме Scene Hierarchy (Иерархия сцены). Две иерархии размещаются друг рядом с другом после щелчка на кнопке Toggle Freeform/Automatic Layout Mode (Включение произвольной/автоматической компоновки). В результате легко увидеть, какие узлы требуется соединить друг с другом, потому что рядом с каждым узлом одной иерархии находится соответствующий ему узел другой. Так как иерархии полностью аналогичны, остается только открыть диалоговое окно Connection Editor (Редактор связей), выделить один узел и загрузить его в левую часть, потом выделить соответствующий ему узел другой иерархии и загрузить его в правую часть и затем быстро соединить атрибуты масштабирования двух цепочек. 24. Сгруппируйте все манипуляторы rplk под одним узлом, как показано на рис. 17.32. Для этого нужно выделить их все и нажать комбинацию клавиш Ctrl+g. Теперь в сцене присутствуют три иерархии, которые по большей части двигаются вместе и контролируются иерархией сочленений с низким разрешением. Они могут растягиваться и сжиматься, а также поворачиваться по методу прямой кинематики и перемещаться по методу обратной кинематики. Отсутствует только возможность скручивания иерархии с низким разрешением по
Усовершенствованные элементы управления двуногим персонажем
603
методу прямой кинематики, управляя при этом движением отдельных участков иерархии с высоким разрешением. Чтобы обеспечить подобную возможность, вы создадите локаторы, которые будут выступать в качестве ограничений типа Pole Vector (Вектор полюса) для плоскости вращения каждого ТК-манипулятора в иерархии Ik_Bind_Spine_.
Рис. 17.32. Группировка всех манипуляторов rpIK под одним узлом
25. Перед тем как приступить к этой операции, скройте на время иерархию с низким разрешением, чтобы освободить дополнительное пространство в окнах проекций. Для этого нужно выделить корневое сочленение этой иерархии и нажать комбинацию клавиш Ctrl+h. 26. Создайте локатор и присвойте ему имя poleVectorl. Активизируйте инструмент Move (Переместить), нажмите клавишу v и, нажав среднюю кнопку мыши, перетащите локатор на корневое сочленение иерархий с высоким разрешением. После этого перетащите его вдоль оси Z таким образом, чтобы он оказался за спиной персонажа. 27. Нажмите комбинацию клавиш Ctrl+d, чтобы получить копию локатора, и привяжите новый локатор к следующему сочленению, которое уже должно иметь IK-манипулятор. И снова переместите локатор назад, примерно на такое же расстояние, пока он не окажется за спиной персонажа. Повторите эту операцию для каждого из сочленений иерархии, кроме самого последнего.
604
Глава 17 • Сборка персонажей
28. Закончив с дублированием, привязкой и перемещением локаторов за спину персонажа, проверьте, сколько локаторов присутствует в сцене. Каждому манипулятору rplk должен соответствовать один локатор, который располагается непосредственно за сочленениями позвоночника. Примерное распределение локаторов показано на рис. 17.33.
Рис. 17.33. Ваши локаторы должны быть распределены в пространстве примерно таким образом
29. Сделайте видимой иерархию с низким разрешением, присвоив атрибуту видимости корневого узлаэначенпе on. Сделайте каждый из локаторов poleVector* родительским по отношению к ближайшему сочленению этой иерархии, как показано на рис. 17.34.
/совершенствованные элементы управления двуногим персонажем
60S
Рис. 17.34. Сделайте каждый из локаторов poleVector родительским по отношению к ближайшему сочленению
30. Ограничьте по типу Pole Vector (Вектор полюса) каждый манипулятор rplk и соответствующий локатор. Для этого сначала нужно выделить все локаторы, добавить в выделенный набор манипулятор rplk и выбрать в меню Constrain (Ограничение) команду PoleVector (Вектор полюса). В результате появится одно ограничение по типу Pole Vector (Вектор полюса) с весовыми атрибутами для всех локаторов, ограничивающее 1К-манипулятор по всем локатором, распределенным за спиной персонажа. 31. Выполните предыдущий шаг для остальных IK-манипуляторов. В результате получится, что каждый из IK-манипуляторов будет иметь ограничение типа Pole Vector (Вектор полюса) по всем локаторам, как показано на рис. 17.35. Теперь пришло время вручную поменять все веса ограничений типа Pole Vector (Вектор полюса), чтобы получить заметный спад по отношению к соответствующим сочленениям иерархии с высоким разрешением, которые являются дочерними для локаторов. 32. Выделите каждый IK-манипулятор и щелкните на ограничении вектора полюса в диалоговом окне Channel Box (Окно каналов), чтобы поменять весовые атрибуты этого ограничения. Или же просто выделите ограничение PoleVector (Вектор полюса), которое является дочерним по отношению к 1К-манипулятору. Посмотрите на значения весов в диалоговом окне Channel Box (Окно каналов). Каждый вес показывает, насколько скручивание рассматриваемого 1К-мани-
606
Глава 17* Сборка персонажей
пулятора контролируется локатором, на который было наложено ограничение. При этом локаторы являются дочерними по отношению к иерархии с низким разрешением.
Рис. 17.35. Каждая плоскость вращения IK-манипулятора имеет ограничение типа Pole Vector по всем локаторам, расположенным за спиной персонажа
33. Присвойте каждому весу значение, которое распределит вращение вектора полюса таким образом, чтобы управление равномерно осуществлялось двумя или четырьмя локаторами. Вращение иерархии с низким разрешением заставляет вектор полюса ограничивать локатор и перемещать его вокруг опорной точки иерархии с низким разрешением, поворот которой вы осуществляете. Это, в свою очередь, заставляет любые IК-манипуляторы, ограниченные с помощью локатора, скручиваться или поворачиваться вдоль их собственной плоскости вращения. Основная идея состоит в определении вращения сочленений иерархии с низким разрешением, которые влияют на скручивание сочленений иерархии с высоким разрешением. Определить весовые коэффициенты сочленений достаточно просто. Если сочленение находится вверху иерархии, укажите его вес по отношению к локатору, который является дочерним для верхнего сочленения иерархии с низ-
Усовершенствованные элементы управления двуногим персонажем
607
ким разрешением. Замечательно то, что ограничение Pole Vector (Вектор полюса) имеет веса, и эти веса можно сделать убывающими по мере перехода от одного локатора к другому. Если один из манипуляторов rplk находится между верхним и средним сочленениями иерархии с низким разрешением, присвойте ему вес, являющийся средним арифметическим весов локаторов, дочерних для рассматриваемых сочленений. Например, при распределении весов по четырем локаторам выбирайте возрастающие значения, скажем, ОД, 0,35, 0,75 и 1. Остальным весам присваивается значение 0. Вот единственное правило, согласно которому весам ограничений присваиваются более высокие значения: задавать веса ограничений Pole Vector (Вектор полюса) нужно таким образом, чтобы при скручивании иерархии с низким разрешением сочленения иерархии с высоким разрешением скручивались на меньшую величину. На рис. 17.36 показано, как выглядят ограничения Pole Vector (Вектор полюса) после указания нх весов,
Рис. 17.36. Так будут выглядеть ограничения Pole Vector после изменения их весов
34. Сгруппируйте все IK-маннпуляторы и кривые. Добавьте в группу обе 1Киерархии с высоким разрешением и присвойте ей имя spineRiglkNodes. Иерархия с низким разрешением должна остаться за пределами этой группы, так как группа никогда не будет перемещаться. Именно к иерархии с низким раз-
608
Глава 17 • Сборка персонажей
решением подсоединяются управляющие параллелепипеды, требуемые для анимации персонажа, 35. Ограничьте по типу Point (Точка) корневое сочленение иерархии с низким разрешением и корневое сочленение персонажа. Сгруппируйте и ограничьте остаток иерархии с низким разрешением с управляющими параллелепипедами таким образом, чтобы она осталась свободной от пе ремещений корневого сочленения. Это позволит перемещать бедра отдельно от плеч, и наоборот. Дополнительный предок обеих иерархий используется после создания остальных элементов управления персонажем. Он перемещает одновременно корневое сочленение и верхний позвоночник. Готовая версия сцены находится в файле Jerk_DivineSpine_Finished.mb на прилагаемом к книге компакт-диске.
Усовершенствованные растягивающиеся IK-ноги и классическая обратная нога Сборка ног Крутана выполняется аналогично сборке позвоночника. Ноги смогут растягиваться при увеличении расстояния между ступней и бедром. Это весьма интересный пример сборки, так как нога остается на поверхности даже в случае, когда персонаж перемещается и нога слегка растягивается. Это дает аниматору возможность задавать замечательные ключевые позы при ходьбе, как впрочем и другие позы, при которых одна нога стоит на поверхности, л вторая двигается. При этом не нужно беспокоиться об ужасной «IK-связи» сочленений, когда 1К-манипулятор слишком удаляется от сочленения и оно не может более сгибагься для достижения нужной позы. В следующем упражнении мы займемся сборкой ног. Требуется придать им способность к растяжению, чтобы аниматор не сталкивался с проблемой, подобной указанной выше. Упражнение 17.5. Классическая сборка обратной ноги Сборка ноги будет осуществлена в соответствии с классическими канонами. Подобная простая техника позволяет ноге поворачиваться относительно трех опорных точек, вокруг которых распределяется при ходьбе вес реальной ноги: пятка, подушечки пальцев и пальцы. Это облегчает процесс анимации стоп в процессе настройки цикла ходьбы. 1. Загрузите файл Jerk_IkLegs_Begin.mb с прилагаемого к книге компакт-диска. 2. Щелкните на квадратике, расположенном справа от команды IK Handle Tool (IKманипулятор) в меню Skeleton (Скелет), и щелкните на кнопке Reset Tool (Восстановить исходные параметры инструмента). Создайте IК-манипулятор от сочленения Leg к сочленению Ankle, затем от сочленения Ankle к сочленению Ball и, наконец, от сочленения Ball к сочленению Toe. Полученный результат показан на рис, 17.37.
/совершенствованные растягивающиеся IK-ноги и классическая обратная нога
609
Рис. 17.37. Вид моги после создания нужных !К-манипуляторов
3. Переименуйте все IK-манипуляторы в соответствии с частями ноги и ступни, которым они соответствуют: ankle jkHandle, balljkHandle и toejkHandle. 4. Приступим к созданию обратной ноги. Начните с рисования иерархии сочленений для ступни. Корневое сочленение этой новой иерархии должно располагаться в основании пятки, затем перемещаться к пальцам, подушечкам пальцев и лодыжке, как показано на рис. 17.38. Присвойте сочленениям этой иерархии имена reverseHeel, reverseToe, reverseBall и reverseAnkle соответственно. 5. Сделайте IK-манипулятор anklejkHandle предком по отношению к сочленению reverseAnkle, IK-манипулятор balljkHandle — по отношению к сочленению reverseBall, a IK-манипулятор toejkHandle — по отношению к сочленению reverseToe, как показано на рис. 17.39. 6. Создайте три локатора, которые сыграют роль ограничений типа Pole Vector (Вектор полюса) по отношению к IK-манипуляторам ноги и ступни. Присвойте первому локатору имя ballPoleVector. Активизируйте инструмент Move (Переместить)
610
Глава 17- Сборка персонажей
и, нажав клавишу v и среднюю кнопку мыши, перетащите локатор на узел reverseAnkle. Повторно выделите локатор ball Pole Vector, который вы только что включили в состав иерархической цепочки, добавьте к выделенному набору манипулятор ballJkHandle и выберите в меню Constrain (Ограничение) команду Pole Vector (Вектор полюса). Переместите локатор таким образом, чтобы он оказался в стороне от ступни, а не поверх сочленения лодыжки.
Рис. 17,38. Иерархия сочленений обратно^ ноги
7. Присвойте второму локатору имя toePoleVector. Осуществите его привязку к сочленению reverseBall и сделайте его предком этого сочленения. Выделите манипулятор toejkHandle и выберите в меню Constrain (Ограничение) команду Pole Vector (Вектор полюса). Сдвиньте локатор в сторону, чтобы он не располагался поверх сочленения подушечек пальцев. 8. Третьему локатору присвойте имя legPoleVector и осуществите его привязку к сочленению Leg, затем поместите его перед сочленением колена. Сделайте этот локатор родительским по отношению к сочленению Hips. Выделите локатор и манипулятор ankle_ikHandle и выберите в меню Constrain (Ограничение) команду Pole Vector (Вектор полюса). Результат показан на рис. 17.40 Сборка обратной ноги завершена. Все готово к анимации. 9. Теперь можно анимировать сочленения reverseHeel, reverseToe и reverseBall, чтобы заставить ступню персонажа гнуться при ходьбе. Скройте локаторы и IKманилуляторы, которые являются дочерними по отношению к иерархии обратной ступни, чтобы исключить их случайное выделение и анимацию. Все готово для сборки тянущейся ноги,
'совершенствованные растягивающиеся IK-ноги и классическая обратная нога
Рис. 17.39. Связь между IK-манипуляторами в иерархии сочленений обратной ноги
Рис. 17.40. Ограничения типа Pole Vector для ноги
611
612
Глава 17 • Сборка персонаже!
10. Создайте узел измерения расстояния от верхней части ноги до лодыжки, выбрав в меню команду Create * Measure Tools > Distance! Tool (Создать > Инструменты измерения > Рулетка). Сначала щелкните на сочленении Leg, затем на сочленении Ankle. Ограничьте по типу Point (Точка) первый локатор рулетки и сочленение Leg. Затем ограничьте по типу Point (Точка) второй локатор рулетки и манипулятор anklejkHandle, который находится между сочленениями Leg и Ankle, как показано на рис. 17.41.
Рис. 17.41. Создания узла измерения расстояния для ноги
/совершенствованные растягивающиеся IK-ноги и классическая обратная нога
613
11. Откройте окно Create Render Node (Создать узел визуализации), воспользовавшись одноименной командой меню Create (Создать) диалогового окна Hypershade (Редактор узлов). Создайте следующие узлы: • три узла Multiply Divide (Умножить/Разделить); • два узла Plus Minus Average (Плюс/Минус/Среднее); • один узел Condition (Условие). Результаты показаны на рис. 17.42.
Рис. 17.42. Результат создания служебных узлов для ноги
Теперь нужно подключить сеть узлов, которая позволит ногам растягиваться: при увеличении расстояния между IK-манипулятором лодыжки и сочленением Leg. Начать следует с создания атрибутов, контролирующих способность ноги к ра стяжению. 12. Выделите сочленение reverseHeel. К этому узлу вам предстоит добавить новые атрибуты, так как именно это сочленение можно использовать при анимации положения стопы. Выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут) и добавьте следующие атрибуты:
Глава 17 • Сборка персонажей
614
• autoStretch — в поле Minimum (Минимальное значение) введите значение 0, в поле Maximum (Максимальное значение) — значение 1 (в итоге автоматическое натяжение ноги можно будет активизировать и отключать); • snortenTolerance — в поле Minimum (Минимальное значение) введите значение О, в поле Maximum (Максимальное значение) — значение 1 (этот атрибут контролирует длину ноги перед началом сгиба); • legScale — в поле Minimum (Минимальное значение) введите значение 0, в поле Maximum (Максимальное значение) — значение 1 (этот дополнительный элемент управления позволяет ноге менять длину без автоматической операции масштабирования). Результат показан на рис. 17.43.
Рис. 17.43. Новые атрибуты ноги готовы к соединению
Осталось соединить все только что созданные узлы и атрибуты, чтобы получить контролируемую реакцию автоматического растяжения ноги. 13. Соедините атрибуты distanceDimensionShape.distance и multiplyDividel.inputlY. Для узла multiplyDividel выберите в раскрывающемся списке Operation (Операция) диалогового окна Attribute Editor (Редактор атрибутов) вариант Divide (Разделить). Скопируйте число из поля 1приМУузла multiplyDividel, выделив его и нажав комбинацию клавиш Ctrl+c, и вставьте в поле input2Y при помощи комбинации клавиш Ctrl+v.
'совершенствованные растягивающиеся IK-ноги и классическая обратная нога
615
14. Соедините атрибут outputY узла multiplyDividel с атрибутом inputlD[0] узла plusMinusAveragel. Убедитесь, что в раскрывающемся списке Operation (Операция) для узла plusMinusAveragel выбран вариант Subtract (Вычитание), Также убедитесь, что атрибут input2Z для узла multipyDivide 1 имеет значение 1. Затем соедините его с атрибутом inputlD[l] узла plusMinusAveragel, чтобы вычесть из выходных данных 1. 15. Соедините атрибут outputlD узла plusMinusAveragel с атрибутом input2Y узла multipyDividel. Соедините атрибут autoStretch узла reverseHeel с атрибутом inputlY узла multipyDivide2. 16. Соедините атрибут outputY узла multiplyDivide с атрибутом inputlD[0] узла plusMinusAverage. Присвойте атрибуту inputZz узла multiplyDivide2 значение 1 и соедините его с атрибутом inputlD[l] узла plusMinusAverage2. 17. Выберите в раскрывающемся списке для узласопЬ^юп! вариант Less Than (Меньше чем) и соедините атрибут outputlD узла plusMinusAverage2 с атрибутом colorIfFalseG узла condition. Соедините атрибут outputlD узла plusMinusAverage2 с атрибутом firstTerm узла condition. Соедините атрибут shortenTolerance узла reverseHeel сначала с атрибутом secondTerm узла condition, а потом с атрибутом colorIfTrueG узла condition. 18. Соедините атрибут outColorG узла conditionl с атрибутом inputlY последнего узла multiplyDivide3. Соедините атрибут legScale узла reverseHeel с атрибутом input2Y узла multiplyDivide3. 19. Ну и, наконец, соедините атрибут outputY узла multiplyDivide3 с атрибутом scaleX узлов сочленений Leg и Knee. Готовая сеть узлов показана на рис. 17.44.
Рис. 17.44. Готовая сеть узлов для растягивающейся ноги
616
Глава 17' Сборка персонаже!
Теперь можно анимировать обратную ступню и но га будет действительно растягиваться для компенсации чрезмерного натяжения стопы. Атрибуты, контролирующие подобную реакцию, находятся в узле reverseHael, поэтому вы можете легко создавать для них ключевые кадры, включая и отключая подобное поведение и меняя размер ноги. Готовая модель находится в файле Jerk_IkLegs_Finished.mb.
Усовершенствованные 1К-руки и ключичный треугольник В следующем упражнении мы посмотрим, как выполняется сборка плеч и рук Крутана. Использованная техника позволяет растягивать руки и поворачивать плечи, как при анимации рук по методу прямой кинематики. Для размещения рук с помощью метода обратной кинематики со стороны лопатки, ключицы и плеча существуют специальные элементы управления, наравне с традиционным 1К-манипулятором запястья. Два локатора, ограничивающие IK-манипулятор запястья, добавляют персонажу способность класть руку на указанное аниматором место. Два дополнительных сочленения будут вставлены в качестве дочерних сочленений плеча и локтя, но при этом они не будут связаны с остальной иерархией руки. Эти сочленения предназначены для лучшей деформации при скручивании плеча и запястья. Упражнение 17.6. Настройка руки и ключичного треугольника Загрузите файл Jerk_ArmSetup_Begin.mb с прилагаемого к книге компакт-диска и посмотрите, как расположены сочленения руки, составляющие иерархию. Файл содержит сочленения для целой скелетной иерархии, кото рая в окончательном виде будет служить Крутану рукой. Отсутствуют только элементы управления, которые предстоит добавить вам. Начать следует с области плеча, которую мы назовем ключичным треугольником. Затем вы создадите усовершенствованные 1К-контроллеры, позволяющие руке растягиваться на любую длину, и добавите персонажу возможность класть руку на любой объект. При этом рука должна оставаться неподвижной даже при движении остальных частей тела. Итак, начнем с ключичного треугольника. 1. Создайте IK-манипулятор от узла clavicularTriangle к узлу scapulaJoint. Для этого нужно щелкнуть на квадратике, расположенном справа от команды Ж Handle Tool (IK-манипулятор) в меню Skeleton (Скелет), и в открывшемся окне щелкнуть на кнопке Reset Tool (Восстановить исходные параметры инструмента). Затем ло порядку выделите узлы в окне проекции. Присвойте новому манипулятору имя scapulaClavicle__II
/совершенствованные IK-руки и ключичный треугольник
617
3. Нажмите комбинацию клавиш Ctrl+Shift+h, чтобы сделать видимым скрытый недавно узел scapulaJoint. Выделите узел clavicleJoint и нажмите комбинацию клавиш Ctrl+h, чтобы на время скрыть его. 4. Создайте IK-манипулятор от узла scapulaJoint к узлу shoulderjoint Присвойте ему имя clavicleShoulderJkControl, 5. Создайте последний IK-манипулятор от узла shoulderJoint к узлу wrisUoint, расположенному внизу иерархии. Присвойте ему имя armWrist_IkControl. Нажмите комбинацию клавиш Ctrl+Shift+h, чтобы сделать видимым скрытый недавно узел clavicleJoint. 6. Сделайте узел clavicleShoulder_IkControl дочерним по отношению к узлу scapulaClavicle_IkControl. Сделайте узлы clavicleStretch.IkHandle и armWrist__IkControl дочерними по отношению к узлу clavicleShoulder_IkControl. Напоследок сделайте всю группу узла scapulaClavicle_IkControl дочерней по отношению к узлу connectToSpine. Итоговый вид иерархии показан на рис. 17.45.
Рис. 17.45. Иерархия для ключичной области плеча
7. Выделите все IK-манипуляторы и выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования). Введите в поля poleVectorX (Вектор полюса по X), poleVectorY (Вектор полюса по Y) и poleVectorZ (Вектор полюса no Z) диалогового окна Channel Box (Окно каналов) значение 0.
618
Глава 17* Сборка персонаже!
8, Выберите в меню команду Create ^ Measure Tools > Distance Tool (Создать > Инструменты измерения * Рулетка). Нажав клавишу v, осуществите привязку измерительных локаторов к сочленениям clavicleJoint и clavToShoulder. Присвойте локаторам имена clavicleJointPoint и clavToShoulderFoint соответственно, Также переименуйте появившийся узел di stance Dimension в clavToShoulder_distanceDimension. 9. Выделите сочленения shoulderJoint и clavToShoulderPoint и выберите в меню Constrain (Ограничение) команду Point (Точка). Выделите сочленения davicleJoint и clavicleJointPoint и снова выберите в меню Constrain (Ограничение) команду Point (Точка). Выделите два локатора и рулетку и сгруппируйте их, нажав комбинацию клавиш Ctrl+g. Присвойте группе имя clavicleDistanasGroup и сделайте ее потомком узла connectToSpine. Вид иерархии после этих операций показан на рис. 17.46.
Рис. 17.46. IK-манипуляторы для ключичной области плеча
10. Выполните команду: createNode multlplyDivide; 11. При нажатой клавише Shift щелкните на узле clavToShou/der_distanceDimension. Откройте диалоговое окно Hypergraph (Просмотр структуры) и выберите команду Input and Output Connections (Входные и выходные связи) is меню Graph (Граф). Результат этой операции показан на рис. 17.47.
Усовершенствованные 1К-руки и ключичный треугольник
619
Рис. 17.47. Соединение узла distanced mension
12. При нажатых клавише Shift и средней кнопке мыши перетащите узел clavToShoulder_distanceDimensionShape на узел multiplyDividel. Это приведет к появлению диалогового окна Connection Editor (Редактор связей). Соедините атрибут distance yзлaclavToShoulder_distanceDimensionShapec атрибутом InputlX узла multiplyDivide. 13. Выделите узел multiply Divide и откройте диалоговое окно Attribute Editor (Редактор атрибутов). Выберите в раскрывающемся списке Operation (Операция) вариант Divide (Разделить) и скопируйте значение выделенного желтым цветом атрибута inputlX в поле атрибута input2X, как показано на рис. 17.48. В результате текущее расстояние будет делиться на исходное (до деформации) расстояние. Полученное таким способом соотношение применяется для масштабирования ключичного сочленения. 14. Одновременно выделите узлы multiplyDivide и claviclejoint. Откройте диалоговое окно Hypergraph (Просмотр структуры) и выберите команду Input and Output Connections (Входные и выходные связи) в меню Graph (Граф). При нажатых клавише Shift и средней кнопке мыши перетащите узел multiplyDivide на узел clavicle]oint. Снова откройте диалоговое окно Connection Editor (Редактор связей) для соединения соответствующих атрибутов. 15. В диалоговом окне Connection Editor (Редактор связей) выделите атрибут OutputX узла multiplyDivide и соедините его с атрибутом scaleX узла clavicleJoint. Эффект
620
Глава 17» Сборка персонажей
от этого действия будет нулевым, так как атрибут OutputX в данный момент имеет значение 1.
Рис. 17,48. Операции с узлом multiplyDivicle
16.
Напоследок одновременно выделите узлы shoulderjoint и clavicleStretch_IkHandle и выберите в меню Constrain (Ограничение) команду Point (Точка). Сборка ключичной области завершена. Если переместить или повернуть манипулятор clavicleShoulderJkControl, вы увидите, как сочленение clavfcleJoint меняет свой размер, чтобы сохранить длину от плеча до его основания. Хотя это анатомически неверно, такой подход помогает при создании деформаций в ключичной области, когда персонаж вытягивает руку вперед, кладет ее на грудь или поднимает над головой, Важно равномернс распределить веса сочленений по фронтальной геометрии.
В следующем упражнении мы займемся настройкой элементов управления всей руки. Упражнение 17.7. Сборка скручивающейся руки Начнем с соединения сочленений, чтобы сделать деформацию скручивания руки более достоверной. 1. В диалоговом окне Connection Editor (Редактор связей) соедините атрибут wristJoint. rotateX с атрибутом wristTwistHelper.rotateX. Затем соедините атрибут shoulderjoint. rotateX с атрибутом shoulderTwistHelper, rotateX, как показано на рис. 17.49.
Усовершенствованные IK-руки и ключичный треугольник
621
Рис. 17.49. Соединение сочленений, обеспечивающих деформацию скручивания руки
Теперь вам нужно создать стандартный элемент управления для руки, который позволит аниматору контролировать скручивание плеча и ориентацию локтя. Вы ограничите по типу Pole Vector (Вектор полюса) IK-манипулятор запястья и локатор, расположенный за персонажем. Перемещение этого локатора позволяет управлять ориентацией руки персонажа. Создайте локатор и присвойте ему имя armPoleVectorConstraint Активизируйте инструмент Move (Переместить), нажмите клавишу v и среднюю кнопку мыши и перетащите локатор на сочленение should erJoint Затем обычным способом переместите его назад, чтобы он оказался в нескольких дюймах за спиной персонажа. Сделайте локатор armPoleVectorConstraint дочерним по отношению к узлу connectToSpine. Одновременно выделите локатор armPoleVectorConstraint и узел armWristJkControl и выберите в меню Constraint (Ограничение) команду Pole Vector (Вектор полюса). г 5 Выделите локатор armPoleVectorConstraint и выберите в меню Modify (Измени ь) команду Freeze Transformations (Зафиксировать преобразования), чтобы обнулить значения его преобразований. Теперь нужно создать дополнительные элементы управления, которые позволят персонажу класть руку на объекты. Например, если персонажу нужно опереться рукой на стенку, ухватиться за шест и повернуться вокруг него или про-
622
6. 7.
8.
9. 10.
11.
Глава 17 • Сборка персонажей сто взяться за рулевое колесо, эти элементы управления легко позволят выполнить любое из перечисленных действий. Способ решения данной задачи крайне прост. Сначала создаются два локатора, которые включаются в ту же группу, что и узел Wris:_IkControl. Затем в сцене появляются взвешенные ограничения Point (Точка) и Orient (Ориентация), фиксирующие положение этих локаторов относительно учла WristJkControl. Напоследок добавляется атрибут, контролирующий вес добавленных огран имений, чтобы определить, каким локатором ограничен IK-манипулятор. Итак, начнем! Создайте два локатора. Присвойте им имена plantlkHand и freelkHand. Активизируйте инструмент Move (Переместить), нажмите клавишу v, чтобы перейти в режим привязки к точке, и, нажав среднюю кнопку мыши, перетащите оба локатора на контроллер запястья armWrist_IkControl. Сделайте оба локатора дочерними по отношению к узлу scapulaClavicle_IkControl. Теперь нужно создать узел нулевого преобразования, который станет родительским по отношению к IK-манипулятору и обоим локаторам. В результате они приобретут ту же самую ориентацию и положение, что и узел wrisUoint. Это даст возможность ограничить запястье с помощью IК-манипулятора по типу Orient (Ориентация), не меняя ориентации запястья. Убедитесь, что в окне проекции отсутствуют выделенные объекты, и нажмите комбинацию клавиш Ctrl+g, чтобы создать нулевое преобразование. Активизируйте инструмент Move (Переместить), нажмите клавиш}1 v, чтобы перейти в режим привязки к точке, и, нажав среднюю кнопку мыши, перетащите нулевое преобразование на узел wristjoint. Обнулите значение преобразований нулевого узла, выбрав в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования). Чтобы придать этому нулевому узлу ориентацию узла wristJoint, его нужно ограничить по типам Point (Точка) и Orient (Ориентация), а затем удалить эти ограничения с помощью MEL-команды. Начните с одновременного выделения узла wristjoint и нулевого преобразования, а затем выполните из командной строки следующий код (который автоматически создает ограничения, а потом немедленно их удаляет): delete 'orientConstraint'; delete 'pointConstralnt';
В итоге узлы приобретают одинаковую ориентацию, но не остаются под управлением ограничения. 12. Присвойте нулевому узлу имя wristTransformCompensation и сделайте его дочерним по отношению к узлу clavicleShoulder_IkControl, который уже является родительским по отношению к IК-манипулятору arrnWrist_IkControl и локаторам plantlkHand и freelkHand. Теперь нулевое преобразование находится в том же самом пространстве ориентации, что и узел wristJoint, но при этом корректно перемещается под узлом манипулятора clavicleShoulder_IkControl. Вы сделаете этот новый нулевой узел wristTransformCompensation родительским по отношению к IK-манипулятору armWrist_IkControl и локаторам plantlkHand и freelkHand.
Усовершенствованные IK-руки и ключичный треугольник
13.
623
Выделите три упомянутых узла (armWristJkControl, plantlkHand и freelkHand), добавьте v выделенный набор узел wristTransformCompensation и нажмите клавишу р,
1РИМЕЧАНИЕ Если при создании вышеупомянутой иерархической цепочки создается впечатление, что запястье и локоть оказались в разных местах, это легко скорректировать. Просто выделите узел armPoleVectorConstraint, выделите его каналы преобразования в диалоговом окне Channel Box (Окно каналов), введите число 0 и нажмите клавишу Enter. Проблема с обновлением данных возникает из-за медленности вычислений для графа зависимости.
14. Выделите узлы armWristJkControl, plantlkHand и freelkHand и выберите в меню Modify (Изменить) команду Freeze Transformations (Зафиксировать преобразования), чтобы обнулить преобразования IK-манипулятора и локаторов и поместить их водно пространство преобразований с нулевым узлом wristTransformCompensation, Нужно помнить, что это также пространство ориентации узла wristloint. Это очень важный таг, так как вам предстоит ограничить запястье по типу Orient (Ориентация) с помощью IK-манипулятора armWrist_IkControl. 15. Одновременно выделите узлы armWristJkControl и wristJoint и выберите в меню Constrain (Ограничение) команду Orient (Ориентация). Вид полученной в результате сети узлов в диалоговом окне Hypergraph (Просмотр структуры) показан на рис. 17.50.
. .
•«
Рис. 17.50. Управляющая иерархия руки и запястья
624
Глава 17* Сборка персонажей
Теперь, когда все элементы управления находятся Е нужном пространстве преобразований, осталось создать ограничения, которые позволят легко осуществить анимацию руки, в том числе и размещение ее на каком-нибудь предмете. Еще раз напоминаем, что для этого используются взвешенные ограничения типа Point (Точка) и Orient (Ориентация). 16. Выделите узлы plantlkHand и freelkHand и добавьте в выделенный набор узел armWrist^IkControl. Теперь по очереди выберите в меню Constrain (Ограничение) команды Point (Точка) и Orient (Ориентация). Если все сделано правильно, то узел wrist)oint будет ограничен по типу Orient (Ориентация) с помощью 1К-манипулятора руки. А этот манипулятор, в свою очередь, будет ограничен по типам Point (Точка) и Orient (Ориентация) с помощью локаторов plantlkHand и freelkHand. При этом вес обоих ограничений на данный момент равен 1. 17. Выдатите узел armWrist_IkControl и выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут), чтобы создать атрибут типа Float (С плавающей точкой). Присвойте этому атрибуту имя handPlant. В поле Minimum (Минимальное значение) введите значение 0, в поле Maximum (Максимальное значение) — 1, а в поле Default (Значение по умолчанию) — 0, как показано на рис. 17.51.
Рис. 17.51. Создание нового атрибута для узла armWristJkControl
Теперь нужно сделать так, чтобы атрибут handPlant управлял весом ограничения со стороны локаторов plantlkHand и freelkHand. Этого можно добиться с помощью управляющих ключей.
Усовершенствованные IK-руки и ключичный треугольник
625
18. Щелкните на квадратике, расположенном справа от команды Set (Создать) в подменю Set Driven Key (Создать управляемый ключ) меню Animate (Анимация), 19. Выделите IK-манипулятор armWristJkControl и щелкните на кнопке Load Driver (Загрузить управляющий объект) в диалоговом окне Set Driven Key (Создать управляемый ключ). Выделите атрибут handPlant в левой верхней части окна. 20. Откройте диалоговое окно Hypergraph (Просмотр структуры) и выделите два ниж них ограничения, которые являются дочерними по отношению к узлу armWrist__ IkControl; это ограничения Point (Точка) и Orient (Ориентация), созданные на шаге 16. Они называются armWrist_IkControl_pointConstraintl и armWrist_IkControLprientConstraintl. Нажмите клавишу Shift и добавьте к выделенному набору узлы plantlkHand и freelkHand. Щелкните на кнопке Load Driven (Загрузить управляемый объект) в диалоговом окне Set Driven Key (Создать управляемый ключ). Результат показан на рис. 17.52.
Рис. 17.52. Подготовка к использованию диалогового окна Set Driven Key
Для правильного задания управляющих ключей следующие несколько шагов крайне важны. 21. Убедитесь, что атрибут handPlant манипулятора armWrist_IkControl имеет значение 0 и загружен в раздел Driver (Управляющий объект) диалогового окна Set Driven Key (Создать управляемый ключ). Также убедитесь, что в левой верхней части диалогового окна Set Driven Key (Создать управляемый ключ) выделена строка armWrist_IkControl, а в правой верхней части — строка handPlant.
626
22.
Глава 17- Сборка персонажей
Присвойте значения атрибутам узлов: управляющему атрибуту armWrist_IkControl.handPlant — 0, управляемым атрибутам: • freelkHand. visibility — on; • plantlkHand.visibility — off; • armWristJkControLpointConstraintl.plantlkHandWO - 0; • armWrist_IkControLpointConstraintl.freeIkHandWl — 1; • armWrist:_IkControl_orientCon5traintl.plantIkHandWO — 0; • armWrist:_IkControLorientConstraintl.freeIkHandWl — 1,
23. Теперь, когда атрибуты заданы точно в соответствии с вышеуказанным списком, а управляющий узел выделен, по очереди выделяйте управляемые узлы в диалоговом окне Set Driven Key (Создать управляемый ключ). Для этого выделяйте имена узлов в нижнем ловом окне, затем выделяйте атрибут в правом окне и щелкайте на кнопке Key (Ключи). Например, первый узел, который будет выделен в нижнем левом окне. — freelkHand. Справа выделите его атрибут visibility и щелкните на кнопке Key (Ключи). Проделайте эту операцию для остальных атрибутов, включая оба ограничения, как показано на рис. 17.53.
Рис. 17.53. Работа с диалоговым окном Set Driven Key
Проделав вышеописанную операцию, когда атрибуты имеют значение 0, повторите ее для значения 1. 24.
Присвойте значения атрибутам узлов: управляющему атрибуту armWrist_IkControl.handPlant — 1, управляемым атрибутам:
Усовершенствованные IK-руки и ключичный треугольник • • • • •
627
freelkHand.visibility — off; plantlkHand.visibility — on; armWrist_IkControl_pointConstraintl.plantIkHandWO — 1; armWrist_IkControl_pointConstraintl.freeIkHandWl — 0; armWristJkControLorientConstraintl.plantlkHandWO — 1;
• armWrist_IkControl_orientConstraintl.freeIkHandWl — 0.
25. Повторите задание управляемого ключа для каждого из управляемых узлов,/ атрибутов, но с новыми значениями. По очереди выделяйте их в разделе Driven (Управляемый объект) диалогового окна Set Driven Key (Создать управляемый ключ), по очереди выделяйте их атрибуты и щелкайте на кнопке Key (Ключи). чтобы зафиксировать ключевое значение атрибута управляемого узла при текущем значении атрибута управляющего узла. Два локатора контролируют положение IK-манипулятора руки и ориентацию запястья. По большей части локатор freelkHand применяется для анимации свободного перемещения руки. Но теперь существует три дополнительных узла, позволяющих положить руку на предмет и ориентировать ее на покадровой основе. При этом к самому персонажу не требуется добавлять новые элементы управления. Если нужно, чтобы рука, ранее двигавшаяся свободно, легла на какой-то объект, достаточно сделать локатор plantlkHand родительским по отношению к этому объекту или связать его с этим объектом с помощью ограничения Point (Точка). После этого остается анимировать атрибут .handPlant, поменяв его значение за пару кадров от 0 до 1. Это уберет локатор freelkHand, который больше не требуется для анимации, и активизирует локатор plantlkHand. В следующем упражнении вы займетесь настройкой растягивающейся руки, что включает создание всех элементов управления, атрибутов и сетей узлов, которые позволяют руке менять свой размер для компенсации расстояния между IKманипулятором и плечом. В зависимости от величины этого расстояния рука будет автоматически растягиваться. Вы также добавите элементы управления, необходимые для активизации и отключения подобного поведения, оставив возможность ручной регулировки длины руки.
Упражнение 17.8. Сборка растягивающейся руки Начнем с создания узла измерения расстояния для руки. Это делается тем же «;амым способом, что и в случае измерения расстояния между ключицей и плечом. Данный узел будет первым элементом управления, контролирующим растяжение руки. 1. Выберите в меню команду Create Measure Tools > Distance Tool (Создать инструменты измерения > Рулетка). 2. Щелкните сначала в области плеча, потом — в области запястья. Появятся два локатора. Первому присвойте имя shoulder Point, а второму — wristPoint Заодно присвойте узлу distanceDimension новое имя armDistance^distanceDimension. 3. Выделите узел shoulderjoint и добавьте в выделенный набор локатор shoulderPoint Выберите в меню Constrain (Ограничение) команду Point (Точка). Выделите манипулятор armWrist_IkControl и локатор wristPoint и снова выберите в меню Constrain (Ограничение) команду Point (Точка). Напоследок выделите два локатора
628
ГлэЕ1а 17* Сборка персонажей
и узел distanceDimension и нажмите комбинацию клавиш Ctrl+g. Присвойте новой группе имя armDistanceGroup. Полученная в результате сеть узлов показана на рис. 17.54.
Рис. 17.54. Результат создания ограничений для растягивающейся руки
4. Сделайте группу armDistanceGroup дочерней по отношению к узлу connectToSpine, чтобы вставить его в иерархию, которая управляет сжатием руки. Далее нужно создать множество математических служебных узлов, формируя сеть выражений на их основе. Эти встроенные в Maya узлы традиционно предназначены для визуализации, но они допускают и более разнообразное применение. 5. Откройте диалоговое окно Hypershade (Редактор узлов) и выберите в меню Create (Создать) этого окна команду Create Render Node (Создать узел визуализации). В появившемся диалоговом окне перейдите на вкладку Utilities (Служебные элементы) и создайте три узла Multiply Divide (Умножить/Разделить), присвоив им имена arm Scale Ratio, autostretchMultiplier и armScaleMultiplier. Создайте узел Condition (Условие) и присвойте ему имя shortenToleranceCondition. Результат показан на рис. 17.55. Теперь нужно создать несколько атрибутов, управляющих способностью руки к растяжению.
Усовершенствованные IK-руки и ключичный треугольник
629
Рис. 17.55. Создание служебных узлов для растягивающейся руки
6. Выделите узел armWrist_IkControl и выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут). 7. В диалоговом окне Add Attribute (Добавить атрибут) создайте три атрибута типа Float (С плавающей точкой), используя следующие имена и параметры: • autoStretch — в поле Minimum (Минимальное значение) введите значение 0, в поле Maximum (Максимальное значение) — значение 1, в поле Default (По умолчанию) — значение 1; • shortenTolerance — в поле Minimum (Минимальное значение) введите значение О, в поле Maximum (Максимальное значение) — значение 1, в поле Default (По умолчанию) — значение 1; • armScale — в поле Minimum (Минимальное значение) введите значение 0, в поле Maximum (Максимальное значение) — значение 10, в поле Default (По умолчанию) — значение 1, Пришло время приступить к соединению атрибутов, чтобы получить руку со способностью к растяжению. Так как у вас уже открыто диалоговое окно Hypershade (Редактор узлов), именно оно будет применяться для соединения узлов. 8. Перейдите на вкладку Utilities (Служебные элементы) диалогового окна Hypershade (Редактор узлов) и выделите все четыре только что созданных узла. Добавьте
630
Глава 17- Сборка персонажей
в выделенный набор узлы armDistance_distanceDiOmension и armWristJkControl, воспользовавшись диалоговым окном Hypergraph (Просмотр структуры) или окном проекции. Выберите в меню Graph (Граф) диалогового окна Hypershade (Редактор узлов) команду Input and Output Connections (Входные и выходные связи). Появится бессистемный набор узлов. Разместите их, кзк показано на рис. 17.56, чтобы облегчить процесс выделения нужных узлов при формировании связей,
Рис. 17.56. Подготовка служебных узлов
9. Нажав клавишу Shift и среднюю кнопку мыши, перетащите узел distanceDimensionShape на узел armScaleRatioTima multiplyDivide. С помощью диалогового окна Connection Editor (Редактор связей) соедините атрибут distance с атрибутом inputlX. 10. Выделите узел armScaleRatio, атрибут которого вы только что соединили, и нажмите комбинацию клавиш Ctrl+a, чтобы загрузить диалоговое окно Attribute Editor (Редактор атрибутов). Выберите в раскрывающемся списке Operation (Операция) вариант Divide (Разделить). Скопируйте число из поля inputlX в поле input2X, чтобы текущая длина руки делилась на ее исходную длину. Выходное значение узла в данный момент должно быть равно 1. По мере роста расстояния выходное значение превратиться в нормализованное соотношение, показывающее величину масштабирования исходной длины руки. Это выходное значение станет управляющим для масштабирования сочленений руки,
Усовершенствованные IK-руки и ключичный треугольник
631
однако потребуется еще ряд элементов управления для более точного контроля способности к растяжению. 11. В диалоговом окне Connection Editor (Редактор связей) соедините следующие атрибуты: • атрибут armWrist JkControl.autoStretch с атрибутом autoStretchMultiplier.inputlX; • атрибут armScaleRatio.outputX с атрибутом autoStretchMultiplier.input2X (выходные данные узла autoStretchMultiplier позволяют активизировать и отключать возможность растяжения руки); • атрибут autoStretchMultiplier.outputX с атрибутами shortenToleranceCondition.firstTerm и shortenToleranceCondition.colorlfFalseR; • атрибут armWristJkControl.shortenTolerance с атрибутами shortenToleranceCondition.secondTerm и shortenToleranceCondition .colorlfTrueR (выходные данные узла shortenToleranceCondition теперь предохраняют руку от сокращения на расстояние, меньшее заданного параметром shortenToleranee); • атрибут shortenToleranceCondition.outColorR с атрибутом armScaleMultiplier. inputlX; • атрибут armWrist_IkControl.armScale с атрибутом armScaleMultiplier.input2X. 12.
Выделите узел shortenToleranceCondition и откройте диалоговое окно Attribute Editor (Редактор атрибутов), нажав комбинацию клавиш Ctrl+a. Выберите в раскрывающемся списке Operation (On ерация) вариант Less Than (Меньше чем). Узел condition предохраняет руку от сокращения на расстояние, меньшее, чем задано атрибутом armWrist_IkControl.shortenTolerance. Действия этого узла имеют следующую логику: «Если первый элемент меньше второго, использовать цвет, в противном случае не использовать цвет». Выходные данные, передаваемые в узел armScaleMultiplier, позволяют вручную увеличивать и уменьшать длину руки путем изменения этого атрибута. Осталось соединить выходные данные коэффициента масштабирования с каждым из сочленений руки (плечом и локтем). 13. Воспользуйтесь диалоговым окном Connection Editor (Редактор связей) для соединения атрибута armScaleMultiplier.outputX сначала с атрибутом shoulderJoint. scaleX, а потом — с атрибутом elbowJoint.scaleX. На рис. 17.57 показан вид полученной сети узлов в диалоговых окнах Hypershade (Редактор узлов) и Hypergraph (Просмотр структуры). На рис. 17.58 показан вид сети узлов в окне Hypergraph (Просмотр структуры) в режиме показа иерархии сцены.
Теперь потратьте несколько минут на тестирование созданных элементов управления и атрибутов. Попытайтесь подвигать локатор freelkHand, присвой]! атрибуту handPlant IK-манипулятора значение 0. Поэкспериментируйте с элементами управления, чтобы убедиться, что все функционирует корректно. Если чтото не так, вернитесь назад и проверьте правильность всех шагов. Наша версия сцены находится в файле Jerk_ArmSetup_Finished.mb на прилагаемом к книге компакт-диске.
632
Глава 17 • Сборка персонажей
Рис. 17.57. Показ входных и выходных связей полученной сети узлов в диалоговых окнах Hypershade и Hypergraph
Рис. 17.58. Вид сети узлов в диалоговом окне Hypergraph в режиме показа иерархии сцены
Усовершенствованные IK-руки и ключичный треугольник
633
В следующем упражнении вам предстоит заняться сборкой кисти руки и установить все элементы управления, необходимые для анимации руки и кисти.
Упражнение 17.9. Сборка усовершенствованных кисти и пальцев Перед началом упражнения исследуйте иерархию кисти для данного вида сборки, представленную в файле 3erkJHandJoints.mb на прилагаемом к книге компакт-диске. Обратите внимание, что на каждый сустав пальца приходится дополнительное сочленение, которое располагается сразу поверх дочернего сочленения сустава. В подобной технике учитываются две вещи. Во-первых, обнуляются преобразования дочерних суставов (которые будут анимироваться непосредственно). Во-вторых, появляется возможность послойной анимации родительских суставов, что необходимо в дальнейшем. Также обратите внимание на элементы управления суставами. Их применение в процессе задания ключей анимации при сборке персонажа очень важно, Добавить элементы управления к персонажу можно разными способами. Но об этом мы поговорим чуть позднее. Пока что вам достаточно помнить, что все эти элеме] tты управления являются всего лишь узлами NURBS-кривых, которые сделали дочерними по отношению к преобразованиям сочленений путем выделения кривой, а затем сочленения и использования флага -shape с MEL-командой parent. Сборку руки нужно сделать удобной для аниматора, но в то же время в ней должны присутствовать дополнительные элементы управления, позволяющие придать кисти любое положение. Вы настроите элементы управления, которые дадут аниматору возможность поворачивать пальцы как по отдельности, так и все вместе, а также сгибать их практически в кольцо. Кроме того, вы добавите отдельные элементы управления для каждого сустава. Будут использоваться дополнительные атрибуты, связанные с узлами plusMinusAverage, которые объединяют вместе атрибуты, управляющие поворотом суставов. 1.
Загрузите файл Jerk_ArmSetup_Finished.mb с прилагаемого к книге компакт-диска или продолжите выполнение предыдущего упражнения. Импортируйте файл JerkJHandJoints.mb. 2. Выделите все родительские узлы сочленения, которые составляют иерархию пальцев. Это узлы thumb_l, index_DoubleKnuckle, middle_DoubleKnuckle, ring_DoubleKnuckle и pinkyFingeM.. Сделайте их дочерними по отношению к узлу wristJcint и удалите пустой узел группы handGroup, оставшийся после этой операции. 3. Выделите элемент управления каждым суставом в окне проекции и выберите в меню Modify (Изменить) команду Add Attribute (Добавить атрибут). Добавьте следующие атрибуты типа Float (С плавающей точкой): • fingerFullCurl; • fingerMidBend; • fingerTipBend.
Оставьте поля Minimum (Минимальное значение), Maximum (Максимальное значение) и Default (Значение по умолчанию) пустыми. Результат показан на рис. 17.59. Чтобы пальцы сгибались в каждом суставе, мы сделаем суставы, состоящие из двойных сочленений. Это даст возможность каждому пальцу гнуться обособ-
634
Глава 17- Сборка персонажей
ленно, обеспечивая индивидуальное управление каждым сочленением каждого пальца, так что аниматор сможет придать руке любое положение. Для четырех пальцев (большой палец рассматривается отдельно) вы создадите два узла plusMinusAverage, а затем соедините одинаковые атрибуты для каждого пальца. В упражнении описана сборка только одного пальца. Для остальных потребуется проделать все самостоятельно.
Рис. 17.59. Элементы управления суставами
4. Создайте два узла plusMinusAverage, выбрав в меню диалогового окна Hypershade (Редактор узлов) команду Create > General Utilities » Plus Minus Average (Создать > Служебные программы общего назначения » Плюс/Минус/Среднее). 5. Выделите только что созданные узлы plusMinusAverage, а также узел pinkyFinger_Knuckle. Откройте диалоговое окно Hypergraph (Просмотр структуры) и выберите в меню Graph (Граф) команду Input and Output Connections (Входные и выходные связи). 6. В диалоговом окне Connection Editor (Редактор связей) соедините атрибут fingerFullCurl узла pinky RngerJCnuckle с атрибутом inputlD[0] обоих узлов plusMinusAverage. Также соедините атрибут fingerFullCurl с атрибутом rotateX узла pinky_ DoubleKnuckle, 7. Соедините атрибут fingerMidBend узла pinkyFinger_Knuckle : атрибутом inputlD[l] одного из узлов plusMinusAverage. После этого соедините атрибут outputlD с атрибутом rotateX узла pinkyRnger_2 joint.
Усовершенствованные IK-руки и ключичный треугольник
635
Иногда соединить атрибуты, являющиеся элементами массива, достаточно сложно, так как в диалоговом окне Connection Editor (Редактор связей) не всегда виден следующий доступный элемент, Чтобы соединить выходной атрибут с атрибутом inputlD[l], попытайтесь выделить и загрузить рассматриваемые узлы в режиме показа входных и выходных связен диалогового окна Hypergraph (Просмотр структуры). Затем нажмите правую кнопку мыши на правой стороне выходного узла и некоторое время не отпускайте кнопку. Должно появиться контекстное меню со списком доступных атрибутов. Выделите нужный атрибут и только потом отпускайте правую кнопку мыши. Указатель перейдет в активное состояние и изменит свою форму. После этого нажмите правую кнопку мыши на узле, содержащем нужный входной атрибут, и некоторое время не отпускайте ее, чтобы появилось меню Connect Input Of (Соединить входные данные). Выделите нужный атрибут и отпустите кнопку мыши. Соединение создано. Эта техника требует определенн их навыков, зато позволяет экономить усилия, так как избавляет вас от необходимости открывать диалоговое окно Connection Editor (Редактор связей). Соедините атрибут fingerTipBend узла pinky Finger JCnuckle с атрибутом inputlD[l] другого узла plusMinusAverage. После этого соедините атрибут outputlD этого узла с атрибутом rotateX узла pinkyFinger_3 joint. На рис. 17.60 показано, как будет выглядеть полученная при этом есть узлов.
Рис, 17.60. Сеть узлов после сборки одного из пальцев
636
9.
10. 11.
12.
13.
Глава 17- Сборка персонажей
Повторите шаги 2-8 для остальных грех пальцев. Для большого пальца создайте три узла plusMinusAverage. Выделите их вместе с сочленением thumb_Knuckle и откройте диалоговое окно Hypergraph (Просмотр структуры) в режиме показа входных и выходных связей. Соедините атрибуты rotateY и rotateZ узла thumb_Knudde таким образом, чтобы они непосредственно контролировали атрибуты rotateY и rotateZ узла thumb_l. Соедините атрибут fingerFullCurl узла thumb_Knuckle с атрибутом inputiD[0] одного из неиспользуемых узлов plusMinusAverage. Затем соедините атрибут fingerMidBend с атрибутом inputlD[l] того же самого узла plusMinusAverage. После этого соедините атрибут outputlD этого узла с атрибутом rotateX узла thumb_DoubleKnuckle. Соедините атрибут fingerFullCurl узла thumb_Knuckle с атрибутом inputlD[0] другого узла plusMinusAverage. Затем соедините атрибут rotateX узла thumb_Knuckle с атрибутом inputlD[l] того же самого узла plusMinusAverage. После этого соедините его атрибут outputlD с атрибутом rotateX узла thumb_l. Соедините атрибут fingerFullCurl узла thumb_Knuckle с атрибутом inputlDfO] последнего неиспользуемого узла plusMinusAverage. Затем соедините атрибут fingerTipBend с атрибутом inputlD[l] того же самого узла plusMinusAverage. В заключение соедините атрибут outputlD этого узла с атрибутом rotateX узла thumb_2. Полученный результат показан на рис. 17.61.
Рис. .17.61. Результат сборки служебных узлов для кисти руки
Подключение скелетной иерархии головы
637
Итак, сборка руки завершена. Готовый вариант руки вы найдете в файле Jerk_ HandSetup_Finished.mb на прилагаемом к книге компакт-диске.
Подключение скелетной иерархии головы Для головы персонажа будет создана отдельная иерархия, ограниченная по типу Point (Точка) на локатор, который является потомком позвоночника или шеи, как показано на рис. 17.62. В результате элементы управления вращением не попадут в состав иерархии, что позволит анимировать их вручную.
Рис. 17.62. Макет головы
Упражнение 17.10. Сборка головы Это короткое упражнение демонстрирует процесс создания иерархии сочленений для головы. Сначала создается сама голова. Затем она присоединяется к шее с по-
638
Глава 17 • Сборка персонажей
мощью комбинации ограничений, дающих дополнительную свободу при анимации и позволяющих осуществлять более гибкое движение головой. 1. Создайте сочленения головы, используя в качестве образца рис. 17.62. Имеет смысл поместить точку поворота челюсти немного перед выступающей частью уха и чуть пониже ее, если смотреть сбоку. Обычно туда входят несколько дополнительных сочленений, выходящих из челюсти точно так же, как и сочленение, идущее в сторону макушки персонажа. Это создает дополнительные веса для лицевой геометрии. 2. Создайте локатор и осуществите его привязку к корневому сочленению скелета головы. Сделайте локатор потомком ближайшего сочленения шеи. 3. Ограничьте по типу Point (Точка) корневое сочленение головы и новый локатор, выделив сначала локатор, потом сочленение и выбрав в меню Constrain (Ограничение) команду Point (Точка). Результат сборки показан на рис. 17.63. Голова может вращаться независимо от позвоночника и шеи, но перемещения в пространстве осуществляются только совместно. Если же вам нужно вытянуть шею немного вперед, достаточно слегка подвинуть локатор, ограничивающий голову.
Рис, 17.63. Результат сборки головы с элементами управления
Подключение скелетной иерархии головы
639
Элементы управления чертами лица и деформатор Blend Shape Хотя в нашем проекте работе над лицевыми чертами уделено немного места, способ сборки, который будет продемонстрирован, может применяться и в более сложных сценариях, например при синхронизации движения губ или передаче эмоции. Все элементы управления чертами лица можно построить традиционным способом. Сначала моделируются несколько вариантов выражения лица, а потом с помощью модификатора Blend Shape (Плавная модификация поверхности) происходит переход от одного к другому. После этого каждый из атрибутов модифицируемой поверхности собирается в единый узел faceController. Мигающие глаза также можно смоделировать с помощью модификатора Blend Shape (Плавная модификация поверхности) и подключить посредством управляемых ключей. Каждый глаз должен иметь свой элемент управления, как показано на рис. 17.64. .. .,„ .,„, „•-,. ...... i Щ!
Рис. 17.64. Моделирование мигающих глаз с помощью модификатора Blend Shape
Движения челюсти достигаются с помощью сочленений и плавной весовой раскраской, что позволяет получить реалистичный вид углов рта. Важно отметить, что все плавные формы для губ требуется смоделировать в заданных по умолчанию позах с закрытым ртом, чтобы избежать повторной трансформации челюсти в момент, когда она открывается.
640
Глава 17 • Сборка персонажей
Чтобы создать плавные формы для персонажа, который уже связан со скелетом, нужно обеспечить две вещи. Во-первых, нужно убедиться, что вы работаете с точным дубликатом геометрии персонажа перед его связыванием с оболочкой. Во-вторых, при создании плавной формы проследите, чтобы в раскрывающемся списке Deformation Order (Порядок деформации), расположенном на вкладке Advanced (Дополнительно) диалогового окна Create Blend Shape Options (Параметры создания плавной формы), был выбран вариант Front of Chain (Передняя часть цепочки). Или же после создания плавной формы выберите команду Inputs > All Inputs (Входные данные > Все входные данные) в меню, появляющемся при щелчке правой кнопкой мыши на деформируемом объекте, и при помощи средней кнопки мыши перетащите плавную форму в нижнюю часть списка деформаций (сразу над узлами щипковой деформации), как показано на рис. 17.65.
Рис. 17.65. Диалоговое окно со списком применяемых деформаторов
Создание элементов управления глазами Элементы управления направлением взгляда задаются двумя сочленениями — по одному на каждый глаз. IK-манипуляторы RP (Вращение плоскости) ограничены по типу Point (Точка) и Pole Vector (Вектор полюса) на локатор, который является потомком элемента управления линией взгляда. Следующее упражнение поможет вам освоить данный процесс. Откройте новую сцену и создайте две сферы, которые будут играть роль глазных яблок. Упражнение 17.11. Настройка глаз Начнем с создания сочленений для глаз, 1. Создайте два сочленения — по одному для каждого глаза. Местоположение этих сочленений определяет родительское сочленение (управляющее вращением глаз), которое находится в опорной точке глаза. Следо-
Подключение скелетной иерархии головы
2. 3.
4. 5.
6. 7.
641
вательно, крайне важно, чтооы глаз мог вращаться вокруг своей опорной точки без видимых пересечений с внешней геометрией лица. Другими словами, нужно повращать глаз и убедиться, что этот процесс происходит корректно. Если глаза представляют собой идеальные сферы и точно размещены внутри головы, а голова смоделирована корректно, расположение опорных точек в центре глаза сработает просто замечательно. Чтобы убедиться, что родительское сочленение находится точно там же, где и сочленение глазного яблока, достаточно включить манипуляторы для поворачивающего глаза узла. Для этого нужно выделить сочленение и выбрать в ме ню команду Display > Component Display > Selection Handles (Отображение > Отображение подобъектов > Манипуляторы выделения). Затем нажмите клавишу v, чтобы осуществить привязку сочленения к нужному месту. Создайте два локатора и поместите каждый из них перед своим глазом. Присвойте сочленению и локатору, расположенным перед левым глазом, име на leftEyeJoints и leftEyeAim, а сочленению и локатору, расположенным перед пра^ вым глазом, имена rightEyeJoints и rightEyeAim. Создайте IK-манипулятор от родительского сочленения к сочленению, расположенному на конце глаза. Выделите локатор, управляющий направлением взгляда, добавьте в выделенный набор IK-манипулятор и выберите в меню Constrain (Ограничение) команду Point (Точка). Не снимая выделения с объектов, выберите в меню Constrain (Ограничение) команду Pole Vector (Вектор полюса). Одновременно выделите группу геометрии глазного яблока и его родительское сочленение и нажмите клавишу р, чтобы сформировать иерархическую цепочку, показанную на рис. 17.66.
Рис. 17.66. Результат связывания глазного яблока сего иерархией сочленений
642
ГЛЭЕИ 17* Сборка персонажей
Теперь можно подключить связанные элементы управления, чтобы заставить глаз поворачиваться из стороны в сторону. Можно также добавить дополнительного предка целевому локатору, который будет ограничен по типу Point (Точка) на положение глаза. Это позволит аниматору получить вращение глаза по методу прямой кинематики и в то же время переместить локатор, получив элемент управления линией взгляда в стиле обратной кинематики. С этой техникой связан ряд Ештересных моментов. Во-первых, объект не будет переворачиваться, так как у вас присутствуют элементы управления над 1К-шгоскостью вращения более совершенные, чем у ограничения Aim (Цель). Во-вторых, сочленения, управляющие вращением глаз, можно связать с лицевой геометрией, Распределение весов глазных сочленений вокруг век выполняется очень аккуратно, и веса имеют значение между 0,2 и 0,4, что обеспечивает небольшую деформацию мягкой области вокруг глаз при изменении направления взгляда.
Волосы Крутана Для моделирования волос Крутана применяется вторичное действие. Готовый вариант сборки загружается прямо из файла Chapterl3_OverlapAct_fin.mb, полученного при выполнении упражнений главы 13. Затем объект устанавливается на нужное место и с помощью узла TRANS_ROTATE_SCALE_MATRIX ему придаются нужные ориентация и размер. Далее узел mainAttachNode ограничивается на конец иерархии головы, присоединяясь тем самым к основному скелету. ПРИМЕЧАНИЕ Чтобы отключить динамический режим при тестировании анимации, достаточно присвоить атрибутам dynamicFlopOnGff и addMoreFlopiness узла RoppyChainContoller значение 0. Затем, получив окончательный вариант анимации, атрибуты активизируются снова. Обратите внимание, что из-за динамики мягкого тела начинать анимацию нужно за 10-15 кадров дэ нулевого кадра, чтобы дать программе возможность правильно вычислить начальное положение; объектов.
Гладкое связывание аппроксимирующей геометрии Наши персонажи моделировались на основе иерархических поверхностей, но перед визуализацией мы преобразуем их в сетки полигонов со средним разрешением. Кроме того, это преобразование позволит избежать проблем, возникающих при связывании и деформации иерархических поверхностей. Рекомендуем вам всегда действовать подобным образом, если, конечно, нет веских причин, чтобы поступить по-другому. Подобный уровень упрощения геометрии позволяет значительно сэкономить время и повысить качество итоговой модели. Тем не менее иногда возникают ситуации, когда сборка осуществляется до преобразования в сетку полигонов. Чтобы дать вам представление, как действовать в этом случае, в эту главу было включено следующее упражнение. В нашем проекте без подобной процедуры можно обойтись, она включена только в качестве примера.
Волосы Крутана
643
Перечислим базовые предпосылки для организации рабочего процесса. Нам не нужно связывать иерархическую поверхность с узлом skinCluster, хранящим информацию о весах сочленений, так как это значительно замедлит процесс весовой раскраски и деформации. Сложность работы с такой моделью поистине пугает, особенно в сравнении с простым связыванием узла формы сетки полигонов. Вы свяжете только сочленения, которые требуются для деформации персонажа, путем их неявного выделения и последующего выделения управляющего узла формы сетки полигонов, вместо того чтобы производить связывание напрямую с иерархической поверхностью.
Упражнение 17.12. Связывание иерархической поверхности с аппроксимирующей сеткой полигонов Это упражнение является примером работы с абстрактным персонажем, поэтому оно не привязано к определенному файлу. Начните работу со сцены, содержащей любой элемент геометрии в виде иерархической поверхности и набор сочленений, которые требуется связать с этой поверхностью. 1. Выберите в меню Show (Показать) активного окна проекции команду None (Отсутствует), а затем команду Joints (Сочленения). В результате в окне проекции останутся только сочленения. 2. Аккуратно выделите сочленения, важные для деформации персонажа. Это означает, что среди перекрывающихся или ограниченных по типу Point (Точка) сочленений нужно выделить только сочленение, вызывающее деформацию. Никогда не выделяйте двойные сочленения. Также не имеет смысла выделять верхние сочленения в иерархии. Желательно открыть диалоговое окно Hypergraph (Просмотр структуры), чтобы гарантировать выделение только нужных сочленений. Чем меньше объектов вы выделите, тем меньше весов потребуется раскрасить в дальнейшем. 3. Убедившись в правильности выделения, создайте именованный выделенный набор, выбрав в меню команду Create > Set > Quick Select Set (Создать > Набор * Именованный выделенный набор). Присвойте ему имя bindJoints. Это всего лишь способ обеспечить быстрое выделение группы объектов. 4. Выделите иерархическую поверхность и откройте диалоговое окно Hypergraph (Просмотр структуры). Для выделения управляющей сетки полигонов нужно перейти в режим показа иерархии сцены. Выберите в меню диалогового окна Hypergraph (Просмотр структуры) команду Options > Diplay > Shape Nodes (Параметры > Отображение > Узлы формы). 5. Вы должны увидеть два узла формы. Один из них относится к форме иерархической поверхности, которая передает данные на узел polyToSubdiv, что можно увидеть, выбрав в меню Graph (Граф) команду Input and Output Connections (Входные и выходные связи). Ниже находится еще один узел формы, который относится к сетке полигонов, как показано на рис. 17.67. Эта сетка представляет собой управляющую решетку. Вы можете выделить аппроксимирующую управляющую сетку полигонов в режиме показа узлов формы. Или же ее можно найти в запутанной сети узлов,
Глава 17* Сборка персонажей
644
показываемой в режиме демонстрации входных и выходных связей. Также можно воспользоваться MEL-командой: select -г 'listRelatives -с -type mesh';
Рис. 17.67. Вид узлов формы в диалоговом окне Hypergraph
ПРИМЕЧАНИЕ Иерархическая поверхность должна находиться в режиме polyproxy, иннче ничего из вышеперечисленного вы просто не увидите. Для перехода в этот режим выберите в меню Subdiv Surfaces (Иерархические поверхности} команду Polygon Proxy Mode (Режим полигональной аппроксимации).
6. Теперь, когда в диалоговом окне Hypergraph (Просмотр структуры) видно узел полигональной формы, выберите в меню команду Edit I* Quick Select Sets » bindJionts (Правка > Именованные выделенные наборы > bindJohts). 7. Нажмите клавишу Shift и выделите в диалоговом окне Hypergraph (Просмотр структуры) узел полигональной формы. 8. Щелкните на квадратике, расположенном справа от команды Smooth Bind (Гладкое связывание) в подменю Bind Skin (Связывание оболочки) меню Skin (Оболочка), и выберите в раскрывающемся списке Bird To (Связать с) вариант Selected Joints (Выделенные сочленения). Щелкните на кнопке Bind Skin (Связать оболочку). 9. Перед началом весовой раскраски аппроксимирующей сетке полигонов нужно назначать материал. Снова выделите эту сетку. Откройте диалоговое окно Multilister, щелкните правой кнопкой мыши на образце initiaiShadingGroup и выберите в появившемся меню команду Edit > Assign (Правка > Назначить).
Волосы Крута на
645
10. С помощью соответствующей команды меню Show (Показать) активного окна проекции отключите показ иерархической поверхности, чтобы облегчить процесс деформации персонажа и обеспечить лучшую видимость происходящего,
Весовая раскраска гладкой оболочки Весовая раскраска представляет собой один из основных этапов работы над деформациями персонажа. Именно она позволяет сделать их достоверными и привлекательными. Для этого в основном используются инструменты модуля Artisan (Виртуальные кисти), а раскраска происходит в интервале значений от 0 до 1. Это показывает кластеру оболочки, какое сочленение оказывает действие на перемещение определенных вершин. Ниже описан мой процесс раскраски вершин гладкого связанного персонажа. Затем следует упражнение, демонстрирующее характерные особенности этого про цесса, который позволяет добиться хорошей весовой раскраски. Для начала нужно грубо заретушировать веса, проходя по группам вершин и по каждому сочленению и присваивая им значение 0 или 1. Затем кистью среднего размера раскрашиваются граничные участки весов таким образом, чтобы и там наблюдался разброс значений от 0 до 1. Когда вы закончите и раскрасите каждое сочленение, придав ему вес 0 или 1, сделайте значение Artisan равным 1 и уменьшите непрозрачность до 0,33. Далее потребуется слегка смягчить границы всех весов, пройдясь по ним полупрозрачной кистью. Иногда для этой цели можно задействовать гладкую кисть. Напоследок работа идет только гладкой кистью, позволяющей действительно сгладить веса сочленений, в которых необходимо сформировать резкий спад веса. Во время раскраски нужно непрерывно проверять правильность деформаций персонажа, сгибая сочленения и проверяя действие элементов управления. Получив приемлемый вид, нужно посмотреть, как выглядит основное движение и крайние позы персонажа. Используйте для тестирования действительно предельные позы, например поднятие кверху рук или сгиб в области талии, когда голова касается коленей. В этот момент всегда можно снова взять кисть и раскрасить персонаж заново, исправляя проблемные места, Вообще говоря, процесс весовой раскраски выглядит до некоторой степени повторяющимся, занудным и часто разочаровывающим. Периодически возникает ситуация, когда, добившись успеха с одной позой, вы испортите другую. Обычно приходится добиваться компромисса. Хотя, если следовать заранее выработанному плану, весовая раскраска может пройти без особых проблем.
Упражнение 17.13. Пример эффективной весовой раскраски гладкой оболочки 1. Выделите связанную сетку полигонов и щелкните на квадратике, расположенном справа от команды Paint Skin Weight Tool (Весовая раскраска оболочки) в подменю Edit Smooth Skin (Правка гладкой оболочки), как показано на рис. 17.68. 2. Выделите связанный персонаж. Щелкните на квадратике, расположенном справа от команды Prune Small Weights (Удаление малых весов) в подменю Edit Smooth Skin (Правка гладкой оболочки) меню Skin (Оболочка), и введите в поле Prune Below (Удалять ниже) появившегося диалогового окна значение 0,4. Избавьтесь от всех
646
Глава 17 • Сборка персонажей
бессмысленных весов вершин. Это позволит точно увидеть, какие сочленения в наибольшей степени влияют на деформацию геометрии персонажа. Также вы получите более полное представление о том, какие сочленения больше всего нуждаются в раскраске, как показано на рис. 17.69.
Рис. 17.68. Вызов диалогового окна настройки инструмента Paint Skin Weight
Рис. 17.69. Весовая раскраска инструментом Artisan
647
Волосы Крутана
3. Несколько раз установите персонаж в крайние позы и создайте для этих поз ключи анимации в разные моменты времени. Во время этой фазы конечности персонажа должны достигать предельных положений. Это так называемое тестирование диапазонов движения. Весовую раскраску персонажа нужно произвести так, чтобы он выглядел приемлемо даже в крайних положениях, как показано на рис. 17.70.
Рис. 17,70. Тестирование деформации при весовой раскраске
4. Раскрасьте веса только на одной половине сетки, стараясь добиться, чтобы деформации этой половины выглядели приемлемо. Обычно используют режимы Replace (Замена) и Smooth (Сглаживание) инструмента Artisan (Виртуальные кисти). Они задаются установкой соответствующего переключателя в группе Paint Weight (Раскраска весов) окна настройки инструмента Paint Skin Weights (Весовая раскраска оболочки). 5. Раскрасив половину персонажа, выделите его оболочку и воспользуйтесь командой Skin > Edit Smooth Skin t Mirror Weights (Оболочка > Правка гладкой оболочки ^Отражение весов). Соответствующее окно показано на рис. 17.71. Убедитесь, что у вас выбрана корректная ось отражения. Теперь нужно очистить отраженные веса (эта операция никогда не происходит идеально), проверив все деформации и пройдя через те же шаги, что и раньше. Кнопка Toggle Hold Weights on Selected (Фиксация выделенных весов) в окне настройки инструмента Paint Skin Weight (Весовая раскраска оболочки) предохраняет веса от случайных изменений после завершения работы над ними (рис. 17.72).
648
Главе! 17* Сборка персонажей
Рис. 17.71. Использование команды Mirror Weight для отражения весов
Рис. 17.72. Фиксация весов
Волосы Крута на
649
Весовая раскраска отдельных вершин Инструмент Paint Skin Weight (Весовая раскраска оболочки) позволяет выполнять раскраску не только на уровне объекта, но и на уровне отдельных вершин. Многие пользователи не знают об этой возможности. Вам достаточно выделить нужные вершины и активизировать инструмент Paint Skin Weight (Весовая раскраска оболочки). Эта возможность крайне полезна в начале весовой раскраски и распределения весов по поверхности, а также при настройке определенных вершин без влияния на остальную поверхность. Выделите вершины, веса которых вы хотите поменять, и воспользуйтесь кнопкой Flood (Заливка) в режиме Replace (Замена), чтобы присвоить этим вершинам вес 1. Это позволит быстро огрубить веса оболочки персонажа. Затем можно ИСПОЛЬЗОЕЧТЬ практически прозрачную кисть в режиме Replace (Замена) со значением 1, чтобы создать постепенно убывающие веса. Иногда раскрасить или выделить нужные вершины крайне сложно, так как они располагаются в небольших трещинах, например под мышками, в складках кожи, между ногами или между пальцами. Это самые сложные области для весовой раскраски, которые в то же самое время оказывают значительное влияние на вид деформаций персонажа. Поэтому так важна возможность быстрого выделения и редактирования этих областей. В этом вам может помочь редактор проекционных координат в режиме выделения вершин. В итоге геометрия будет развернута на плоскости в пространстве U- и V-координат. Если команды моделирования и создания текстур хорошо поработали над проекционными координатами, процесс выделения вершин не составит для вас труда. На рис. 17.73 показан пример выделения труднодоступных вершин в трехмерном пространстве и в пространстве, полученном разверткой на плоскости.
Рис. 17.73. Воспользовавшись разверткой в пространстве U- и V-координат, можно легко выделить труднодоступные вершины
650
Главе! 17 • Сборка персонажей
Дополнительные объекты влияния Гладкое связывание в Maya замечательно работает благодаря многочисленным объектам влияния. Геометрия может стать объектом влияния, для которого вы раскрасите вершины. Хотя для нашего проекта вовсе не обязательно прибегать к объектам влияния, рекомендуем сделать это для формирования сложных деформаций. Подробная информация по объектам влияния находится в справочной документации Maya. Объект влияния создается из любого узла преобразования путем выделения гладкой связанной сетки и объекта, который будет оказывать влияние. Затем нужно выбрать команду Skin > Edit Smooth Skin > Add Influence (Оболочка * Правка гладкой оболочки > Добавить объект влияния), как показано ча рис. 17.74.
Рис. 17.74. Команды подменю Add Influence мен о Skin
После завершения раскраски вершин и остальных шагов, необходимых для окончательной сборки персонажа, например связывания в иерархическую цепочку геометрии с низким разрешением и создания элементов управления, все готово для передачи файла аниматору.
Заключение Сборка персонажей может стать забавным и интересным процессом. Важно только помнить о необходимости сотрудничества с остальными членами команды. Все
Заключение
651
возможности настройки и элементы управления оудут использоваться аниматором, поэтому они должны быть понятными и легко контролируемыми. Деформации персонажа меняют его форму и природу модели. После сборки персонажа требуется провести назначение материалов, освещение и визуализацию, поэтому проблемы с геометрией, например неправильно ориентированные нормали или неверные U- и V-координаты, недопустимы. Сложность сборки персонажей состоит именно в систематическом учете всех факторов и получении персонажа, пространство преобразований которого обеспечивает легкость управления на стадии анимации. Анимация персонажа — сложный и долгий процесс, в котором ценится способность персонажа реагировать на действия аниматора желательным и предсказуемым образом. Можно сказать, что хорошая сборка персонажа должна обеспечивать максимум возможных вариантов движения. Всегда помните о том, что за элементами управления стоит персонаж, в который требуется вдохнуть жизнь.
18
Использование материалов
Итак, работа над анимацией завершена, и пришло время дать жизнь поверхностям, назначив им материалы. Создание материалов в Maya представляет собой крайне увлекательный, но в то же время весьма запутанный процесс. Чтобы избежать неразберихи, вам потребуется основательный в прямом и переносном смысле слова подход. Существует множество приемов назначения материалов и текстур. Для поиска собственного подхода вам сначала потребуется визуально представить качество материала, необходимого для объектов. В буквальном смысле слова вам предстоит создавать материалы для дороги, тротуаров, автомобилей, персонажей, зданий и других объектов сцены. В процессе редактирования материалов и текстур мы обсудим работу с диалоговым окном hypershade (Редактор узлов). Существует множество способов придания поверхности сходства с поверхностью реального объекта. В этой главе мы познакомимся с созданием материалов и поможем понять лежащие в основе этого процесса принципы. Будут рассмотрены следующие темы: О О О о О
визуальные принципы создания материала; различие между рисованными и процедурными картами текстур; процесс создания материала; назначение текстуры; проверенные методы получения эффектных материалов.
Мир материалов После того как вы начнете изучать цвета, закат уже никогда не останется для вас таким же, как был раньше. Вы начнете анализировать, пытаясь понять, как такая впечатляющая картинка создается из хроматической последовательности сходных цветов. Такая же наблюдательность и аналитические способности потребуются для получения натурально выглядящих материалов. Наша цель — получить материалы для уличной сценки в проекте «Место для парковки». Для начала представьте поверхности, вид которых вам предстоит воссоздать. Первым в списке идет дорожное полотно. Затем придет черед тротуаров,
Достижение сходства
653
витрин магазинов и зданий. Нужно внимательно рассмотреть, из каких материалов сделаны эти объекты. На асфальте имеется разметка, масляные пятна и следы от шин. Бетон тротуаров покрыт многочисленными трещинами. Кроме того, при пристальном взгляде становится заметной структура из камешков, составляют их бетон. Из трещин, скорее всего, растет трава. Здания сделаны из камня и дерева Их можно сделать совершенно чистыми, а можно добавить многочисленные неровности. На стекле витрины магазина имеется надпись, а цвет этого стекла отличается от цвета окон автомобиля. Обдумывая процесс создания материала, «двигайтесь» снизу вверх. Асфальт дороги имеет темный цвет, но стоит ли делать его совершенно черным? Наверное, более удачным кандидатом на эту роль будет темно-серый цвет с пятнами. Подумайте о процедурной текстуре или об отсканированном изображении, которое потребуется для получения подобного цвета. Сверху в отдельном слое расположатся нарисованные полосы. Они имеют некоторую толщину и блестят несколько иначе, чем сам асфальт. Чтобы приподнять полосы над поверхностью, потребуется карта рельефа, а для регулировки блеска пригодится карта зеркальных бликов. Для воспроизведения неровных краев нарисованной полосы нужна будет исходная карта текстуры. Также следует обратить внимание на масляные пятна и следы от шин. Уровень отражений от пятен контролируется с помощью карты отражений. При попадании на такое пятно света под определенным углом появляются радужные блики. Следы от шин должны иметь цвет старой резины, и для их воспроизведения лучше всего подойдет раскраска по Блину. Собирайте сведения о различных объектах, типах материалов, их свойствах и записывайте свои наблюдения. Попытайтесь понять свои ощущения от вида каждой поверхности. Итак, мы начинаем путешествие в мир материалов, помня о конечной цели — достижение сходства с реальными объектами.
Достижение сходства Вид объекта зависит от назначенного ему материала. Компьютерная графика открывает перед нами бесчисленные возможности, которые еще недавно нельзя было представить себе даже в кино и мультипликации. Процесс создания и оценки материалов представляет собой поиск компромисса между видением руководителя проекта и критериями команды художников. Именно таким путем были получены фотореалистичные эффекты в таких фильмах, как Star Wars (Звездные вой ны) и Matrix (Матрица). Вспомните, насколько по своему визуальному воздействию разнятся созданные средствами компьютерной графики мультфильмы Ante (Муравей Антц) от PDI и A Bug's Life (Жизнь жуков) от Pixar. В первом освещение более тусклое и в то же время более мягкое. Второй мультфильм показывает жизнь микромира и происходящие в нем чудеса. Хотя освещение является чрезвычайно важным, команда художников всегда обращает внимание на вид материалов. Впрочем, в компьютерной графике одно неотделимо от другого. Прекрасным примером применения материалов является имитация листа в фильме A Bug's Life. Поскольку лист должен был быть полупрозрачным, сначала был разработан тест, чтобы посмотреть, можно ли в принципе добиться такого эффекта. Для
654
Глава 18 • Использование материалов
теста была выбрана сцена с ползущим по ветке муравьем. Требовалось удостовериться, что тень от муравья видна сквозь лист. Для тестовой визуализации использовался простой цикл анимации. Оказалось, что нужный эффект вполне достижим и можно приступать к производству. Чтобы получить лист подобного вида, была запрограммирована модель просвечивающего материала, допускающая назначение поверхности карты теней. Результаты тестирования и иллюстративные материалы можно видеть на специальном DVD-диске с фильмом A Bug's Life. В процессе работы над фильмом было также решено, что для эффективности моделирования придание листьям толщины должно быть осуществлено с i юмощыо материала, так как это дает воз можность смоделировать лист из одного фрагмента. Созданный материал при визуализации выглядел более светлым у краев листа. Команда художников к тому же предоставила множество рисунков листьев с прожилками, а также листьев в разное время года. Получилось замечательное руководство, позволившее создателям текстур нарисовать карты прожилок и карты цвета. Сюда же были добавлены блики на поверхности и рельеф листа. Кроме того, не стоило забывать о следах жизнедеятельности гусениц. Нужно ли их моделировать или проще сымитировать их с помощью карты прозрачности? На все эти вопросы нужно было найти ответы до окончательной визуализации. Для получения определенного материала нарисуйте его, а затем логически разбейте на более простые элементы. Анализ любого материала начинается с внимательного осмотра. Исследовав крышку вашего стола, вы заметите огпечатки пальцев, грязные пятна и пыль. Что нужно сделать, чтобы восссздать отражение света от такой поверхности? Какой тип раскраски лучше всего подходит для имитации нужных зеркальных бликов? Какую карту текстуры нужно нарисовать и назначить карте зеркальных бликов? ПРИМЕЧАНИЕ Попытайтесь найти реальный образец материала, который вы собираетесь воспроизвести. Это позволит непосредственно наблюдать влияние света на поверхность. Ест и образец слишком велик, можно поискать его фотографии в Интернете или сделать своими руками. Фотографируйте материал в разное время дня и при разном освещении, чтобы видеть, как меняйся его вид. Если вы собираетесь использовать фотографию в качестве карты текстуры, снимок нужно делать в пасмурную погоду или в тени. Сфотографируйте материал с близкого и с далекого расстояния, чтобы тщательно изучить макро- и микроструктуру.
Нужно внимательно наблюдать за текстурами и поверхностями окружающих вас объектов. Это мелкозернистая прессованная текстура пластика или влажные глянцевые блики? Посмотрите, не нужно ли использовать карту рельефа. Какой из многочисленных узлов текстуры правильно воссоздаст тип и высоту зернистости для карты рельефа? Для имитации зернистого пластика многие предпочитают использовать карту текстуры гранита, так как она позволяет регулировать размер зерна. Также хорошо применять текстуру кожи для имитации булыжников. Вероятно, вы уже поняли, что область применения карт текстуры определяется производимым ими эффектом, а не их названиями. Возможные комбинации текстур, назначаемых каналам материала, практически бесконечны. Сложнее всего осмыслить идею бесконечной рекурсии. Ее смысл заключается в том, что, например, для карты цвета градиент может быть использован внутри другого градиента, который, в свою очередь, включается внутрь другого градиента
Достижение сходства
655
и так до бесконечности. Кроме того, градиент, назначенный параметрам другого градиента, можно назначить другим каналам материала, например каналу прозрачности, рельефа или зеркальных бликов. Именно это является самым привлекательным при создании материалов. Открываются поистине безграничные возможности для получения богатых текстур. ПРИМЕЧАНИЕ Наилучший способ знакомства с текстурами в Maya — накопление собственного опыта в ходе экспериментов. Исследуйте каждую карту текстуры, попадающуюся вам на глаза, и все ее атрибуты, Когда-нибудь вы сможете без проблем воссоздавать такие сложные вещи, как, например, снежинки на покрытом пылью пальто.
Исследуем несколько материалов, чтобы вы поняли, как они различаются Maya, Упражнение 18.1. Исследование различий материалов Как именно свет падает на поверхность? Это провокационный вопрос. Свет сталкивается с поверхностью очень сложным способом. Новички видят его как блик на сфере с образцом материала. Эксперты наблюдают сложную неравномерность раскраски и взаимодействие. Основным отличием раскрасок друг от друга является форма зеркальных бликов. В этом упражнении вы на практике познакомитесь с различными раскрасками в процессе создания новых материалов. Кроме того, вы получите навыки работы с редактором материалов. Несколько вариантов раскраски показаны на рис. 18.1.
Рис. 18.1. Различные типы раскраски (обратите особое внимание на форму бликов)
Глава 18 • Использование материалов
656
1. В главном меню диалогового окна Hypershade (Редактор узлов) выберите команду Create > Materials > Anisotropic (Создать > Материалы > Анизотропный). 2. Откройте диалоговое окно Attribute Editor (Редактор атрибутов) в разделе Specular Shading (Параметры зеркальных бликов). Перемещайте' ползунки Angle (Угол), SpreadX/Y (Разброс по X/Y), Roughness (Шероховатость) и Freshnel Index (Индекс Френеля), наблюдая за происходящими изменениями. Блик на образце материала имеет искривленную форму, как показано на рис. 18.2. По очереди выбирайте пункты в раскрывающемся списке Туре (Варианты |эаскраски), расположенном в верхней части окна редактора атрибутов, и смотрите, как меняется форма бликов. Анизотропные материалы, такие как полированный металл или волосы, рассеивают свет одновременно в двух направлениях. не:-.-, С",-(..у к.;±.* |,л',;^':«>;
;>tir-j" &fC. ' . ' 'L.M-
-ц-., ;„-кч,, ч.- (fl.:,!.-
-Г"'-'" ~ Г"1': "
I [F |Л"
Sj" "ш '"«г-й,-- ,..,;-- | ч; !. ШНГ
Рис 18.2. Блик на образце анизотропного материала
Выберите в раскрывающемся списке Туре (Варианты раскэаски) вариант Blinn (По Блину) и подвигайте ползунки Eccentricity (Эксцентриситет) и Specular Roll Off (Сила блеска), наблюдая за уменьшением и увеличением зеркального блика, как показано на рис. 18.3. Выберите в списке вариант Lambert (По Ламберту), и вь;; обнаружите, что элементы интерфейса раздела Specular Shading (Параметры зеркальных бликов) исчезли. Раскраска этого типа применяется для имитации матовых поверхнос-
657
Достижение сходства
тей, на которых просто не бывает зеркальных бликов, как показано на рис. 18.4. Поэтому, чтобы придать материалам более натуральный вид, матовые поверхности, например ткани, могут создаваться путем раскраски по Блину.
ч MBI,J-.S>>™(\I-..S [.и:.1
g ro
Рис. 18.3. Раскрав 10 Блину хорошо подходит для имитации таких материалов, как краска металлического цвета или резина
ПРИМЕЧАНИЕ Раскраска по Блину имитирует отражающую способность нашей планеты. Отражающей способностью называется количество света, отражаемого после столкновения с поверхностью объекта. Для Земли этот параметр равен 0,39, вто время как полное отражение принято за 1. Данная раскраска была создана входе имитации полетов космической станции Вояжер в лаборатории реактивных двигателей (Jet Propulsion Laboratory, JPL). Раскраска этого типа, названная в честь Джима Блина (Jim Blinn), замечательно подходит для имитации таких материалов, как металлическая краска или резиновые шины автомобиля нашего Крутана.
5. Теперь исследуем многослойную раскраску, выбрав в списке вариант Layered (Многослойная). По умолчанию образец материала имеет зеленый цвет. Этот вариант позволяет получить комбинацию различных раскрасок. Если поверхность должна сочетать в себе вельвет и хром, как показано на рис. 18.5, смато выбирайте этот тип раскраски. Канал прозрачности используется в качестве маски для показа одного материала сквозь другой.
658
Глава 18• Использование материалов
Рис. 18.4. Раскраска по Ламберту замечательно подходит для имитации матовых поверхностей
Рис. 18.5. Многослойная раскраска позволяет комбинировать различные материалы, показывая один из них сквозь другой
Достижение сходства
659
6. В Maya 4,5 впервые появилась новая версия раскраски Ocean Shader (Океан). Выбрав ее, вы увидите новые разделы в диалоговом окне Attribute Editor (Редактор атрибутов): Common Material Attributes (Общие атрибуты материала) и Ocean Attributes (Атрибуты океана), как показано на рис. 18.6. Хотя количество разных вариантов настройки достаточно велико, подвигайте ползунки в обоих разделах, чтобы посмотреть, как это влияет на вид образца материала.
Рис 18.6. Появившийся только в Maya 4,5 тип раскраски Ocean Shader
Подобный метод очень удобен для освоения Maya. Имея нужный опыт и xopt iшую память, вы быстро получите представление о том, как достичь того или иного вида. Раскраска Ocean Shader (Океан) была создана для имитации жидкостей в динамике, но ее можно применять и для воссоздания обычных поверхностей. 7. Выберите вариант раскраски Phong (По Фонгу). В разделе Specular Shading (Параметры зеркальных бликов) появится новый ползунок Cosine Power (Размер бликов), как показано на рис. 18.7. Переместите его до отказа вправо. Предельное значение размера бликов в этом положении равно 100. Введите в расположенное слева от ползунка текстовое поле значение 10 000 и начните перемещать ползунок влево. Обратите внимание, что блик на образце материала снова появится только при 6000. Тем не менее этот параметр может иметь любое значение, вплоть до бесконечности. 8. Теперь выберите в списке вариант Phong E (Расширенная раскраска по Фонгу). Этот вариант раскраски наиболее полно позволяет контролировать отражаю-
Глава 18 • Использование материалов
660
щую способность. Посмотрите, к чему приводит изменение параметров Roughness (Шероховатость) и Highlight Size (Размер бликов). Ползунок Whiteness (Белизна) позволяет менять цвет зеркальных бликов. Обратите внимание на более мягкие блики по сравнению с раскраской Phong (По Фонгу), как показано на рис. 18.8.
Рис. 18.7. Раскраска по Фонгу подходит для имитации блестящих материалов, таких как хром или стекло, то есть для полированной поверхности счеткими бликами
СОВЕТ Этот пример показывает, что максимальные значения некоторых параметров в Maya, заданные разработчиками, иногда можно увеличивать с помощью ползунков. Кроме того, значения параметров можно менять, одновременно нажав левую кнопку мыши и клавишу Ctrl и перетаскивая указатель мыши в текстовом поле.
ПРИМЕЧАНИЕ Визуализация объекта, которому назначен материал с раскраской Phong E (Расширенная по Фонгу), происходит быстрее остальных, Кроме того, существуют дополнительные возможности управления видом зеркальных бликов.
9. Выберите вариант раскраски Ramp Shader (Градиентная). Появится множество совершенно новых элементов интерфейса, как показано на рис. 18.9. Эти многочисленные элементы управления позволяют контролировать цвет градиента и вид зеркальных бликов
Достижение сходства
d
.
...,
., „ .
Рис. 18.8. Обратите внимание на постепенный спад интенсивности блика при раскраске Phong E
Рис. 18.9. Интерфейс для работы с раскраской Ramp Shader в Maya 5
661
662
Глава 18 • Использование материалов
10. Раскройте раздел Color (Цвет) и три раза щелкните в разных местах расположенной справа серой полосы. Поочередно слева направо выделяя появившиеся сверху кружки, щелкайте на расположенном слева поле образца цвета и перемещайте ползунок Value (Интенсивность) вправо, чтобы получить постепенный переход от темно-серого цвета к белому. 11. Выберите в раскрывающемся списке Color Input (Распределение цвета) вариант Brightness (Яркость) и поочередно выделяйте кружки, каждый раз выбирая в раскрывающемся списке Interpolation (Интерполяция) вариант None (Отсутствует). Неограниченный контроль над цветом позволяет создать замечательные эффекты с помощью раскраски Ramp Shader (Градиентная). Градиенты можно назначать и некоторым параметрам материала, таким как Specular Roll Off (Сила блеска), Color (Цвет) и Reflectivity (Отражающая способность). Дополнительно исследуем эти эффекты. 12. Выберите в раскрывающемся списке Color Input (Распределение цвета) вариант Light Angle (Угол падения света). В разделе Transparency (Прозрачность) добавьте белый цвет в левую часть черной полосы, Переместите черный маркер поближе к белому. 13. Повторите предыдущий шаг для параметров Incandescence (Свечение) и Specular Color (Цвет зеркальных бликов). Вид градиента для параметров Specular Roll Off (Сила блеска) и Reflectivity (Отражающая способность) показан на рис, 18.10.
Рис. 8.10. С помощью элементов управления раскраской Ramp Shader можно получить богатый переливающийся материал
Достижение сходства
663
14. В разделе Environment (Окружающая среда) создайте цветовой переход от черного к синему, а затем к белому. Вы должны получить богатый переливаю1 щийся материал. Раскраска Ramp Shader (Градиентная) является основой дл, ? создания различных эффектов. Поэкспериментируйте с ее параметрами, чтобы увидеть, какие потрясающие материалы можно получить. 15. Вернитесь к раскрывающемуся списку Туре (Варианты раскраски). Следующие два типа раскраски имеют узкоспециализированное назначение. Вариант Shading map (Карта материалов) до появления раскраски Ramp Shader (Градиентная) использовался для создания эффекта мультяшности. Пропустите вариант Surface Shader (Раскраска поверхности). Достаточно знать, что этот тип раскраски можно связать с положением объекта и это приведет к изменению цвета материала в процессе перемещения объекта. 16. Повторите все шаги упражнения, назначив фрактальную текстуру каналу зеркальных бликов. Это приведет к появлению на бликах пятен в соответствии с яркостью пикселов карты текстуры, как показано на рис. 18.11.
Рис. 18.11. Фрактальная карта текстуры сделала зеркальные блики более интересными
Аккуратное назначение карт текстуры каналу зеркальных бликов делает вид материала более реальным. Ведь идеальных поверхностей нет даже в мире компьютерной графики. При создании спецэффектов для кино нужно обращать
664
Глава 18 • Использование материалов
особое внимание на этот аспект, так как полученные изображения зрители имеют обыкновение разглядывать особенно тщательно. Исследование различных типов раскраски является весьма увлекательным занятием. Основная часть сделанного вами упражнения посвящалась наблюдению за различными способами отражения света от поверхности. Вы убедились, что встроенные раскраски помогают создать визуально интересные материалы.
Качество поверхности -
Перед тем как приступить к созданию материала, нужно учесть несколько моментов. Во-первых, определить качество воспроизводимой поверхности. Во-вторых, подумать о систематизации файлов. Большая часть моделей для нашего проекта была создана Марком Адамсом (Mark Adams), имеющим большой опыт в этой области. Они выполнены с высочайшим профессионализме vi. Но в большинстве случаев моделированием занимается далеко не такой опытный член команды. Поэтому перед назначением материалов нужно проверить параметризацию поверхности, величину ее разбиения и наличие проекционных координат. Затем систематизируйте файлы, чтобы облегчить работу над материалам]!. Параметрическая поверхность должна быть разбита на равные интервалы и иметь регулярную структуру. Убедитесь, что изопараметрические кривые образуют равномерную сетку, а дополнительное разбиение имеет место только там, где это необходимо. Исследуйте поверхность на предмет выпуклостей и впадин (рис. 8.12). Избегайте, так называемых, «обтягивающих» кусков, когда две и более изопараметрических кривых располагаются слишком близко друг к другу без какой-либо причины. Откройте диалоговое окно Attribute Editor (Редактор атрибутов), чтобы узнать, из какого количества интервалов состоит NURBS-поверхность. Эта величина должна быть разумной. Число интервалов нужно сохранять минимально необходимым для достижения требуемой детализации. Для живота большого персонажа из художественного фильма это могут быть сотни интервалов, однако с тем же успехом поверхность может состоять всего из двух интервалов — по одному для каждой из U- и V-координат. Все зависит только от ваших критериев. СОВЕТ NURBS-поверхность является бесконечно гладкой. Для описания земной плоскости достаточно NURBSповерхности, состоящей из двух интервалов. Максимальное разбиение для одного фрагмента составляет 128x128 полигонов, но во время визуализации из-за этого могут возникнуть артефакты. Поэтому желательно перестроить поверхность, вделав, например, количество интервалов равным 10x10. Подобной детализации вполне достаточно для близко расположенной камеры. В результате вы получите более стабильное изображение при перемещениях камеры. Это один из редких случаев, когда требуется увеличить разрешение поверхности.
Сетки полигонов и иерархические поверхности также требуют исследования перед назначением материалов. Узнать, из какого числа полигонов они состоят, позволяет диалоговое окно Attribute Editor (Редактор атрибутов). Также важно следить, равномерно ли распределены полигоны. Не слишком ли детализирована модель, которая будет видна только издалека? Правильно ли назначены проекционные координаты? Для оптимизации сетки используйте команду Cleanup (Оптими-
Создание материалов
665
зация) меню Polygon (Полигоны). Дополнительную информацию по этому поводу можно найти в главе 7.
Рис. 8.12. Поверхность слева плохо параметризована, что является причиной искажения текстуры
Планируя создание материалов, подумайте, какие иллюстрации вам потребуются и где они будут располагаться в вашей сети. Начав со схематических иллюстраций и опорных изображений, придумайте вид текстур. Если требуется цветная иллюстрация, подумайте, можно ли создать дополнительные каналы в процессе обработки изображения. Также рассмотрите возможность применения процедурных текстур, так как рисовать текстуры вручную достаточно утомительно.
Создание материалов Итак, работа по моделированию полностью завершена. Пришло время придать всем поверхностям сходство с поверхностями реальных объектов. Процесс работы над материалами включает создание текстур и назначение их различным каналам материала. Затем материал нужно расположить в пространстве проекционных координат в соответствии с размером поверхности. Это может означать применение графики или создание трехмерной карты рельефа нужного размера. На протяже-
666
Глава 18 • Использование материалов
нии этого процесса происходит оценка материала путем его освещения и тестовых визуализаций. В этом разделе сначала будут рассмотрены основные элементы материалов в Maya, затем мы займемся созданием материалов для проекта «Место для парковки». Процесс назначения материалов в Maya может осуществляться непрямым образом. Каждый пользователь имеет свой предпочтительный способ получения итогового изображения. Некоторые предпочитают придерживаться традиционных методов работы, избегая любых новшеств. Заслугой других является восприимчивость к методам работы коллег и готовность адаптироваться к новым веяниям. Итак, обсудим, как лучше всего организовать процесс создания материала и добиться максимальной эффективности.
Диалоговые окна Multilister, Hyperslhade и Visor Материалы могут быть созданы двумя основными способами. Один из них подразумевает использование диалоговых окон Hypershade (Редактор узлов) и Visor (Просмотр образцов), а второй — диалогового окна Multilister, знакомого пользователям приложения Power Animation от фирмы Alias. Вверху в нем располагаются образцы материалов, а внизу — текстуры. Вы можете посмотреть, из каких элементов состоит материал. Основным достоинством этого диалогового окна является удобная возможность просмотра материалов и текстур. Тем не менее привыкать к работе с ним не стоит, так как в следующую версию Maya этот элемент интерфейса вероятно уже не войдет. Лучшим средством для отображения отношений и редактирования сети материалов является диалоговое окно Hypershade (Редактор узлов). При работе с ним вы превращаетесь в программиста, так как, соединяя кодовые элементы, получаете алгоритм, описывающий материал при визуализации. Именно так возникают определенные визуальные свойства, которые назначаются поверхности. Подобный подход как бы подразумевает, что создание материалов является чисто технической задачей, но на самом деле это не так. Просто в диалоговом окне Hypershade (Редактор узлов) составные элементы материалов изображаются в виде диаграммы. Диалоговое окно Hypershade (Редактор узлов) состоит из трех областей — одной слева (это область создания узлов) и двух справа. Элементы верхней правой области уже являются частью текущей сцены, а в нижней правой по умолчанию открыта вкладка Work Area (Рабочая область), предназначенная для создания новых материалов. Обычно создают большое количество материалов, но отображают только те текстуры, которые требуются для каждого из них. При этом имеет смысл повторно использовать как можно большее число текстур. Вам требуется открыть диалоговое окно Attribute Editor (Редактор атрибутов) для материала и выбрать канал, которому требуется назначить карту текстуры, например Color (Цвет). Затем нужно щелкнуть на расположенной справа кнопке с рисунком иахматной доски, чтобы открыть диалоговое окно Create Render Node (Создать узел визуализации), в котором можно выбрать как двухмерную, так и трехмерную текстуру, при этом также будет создан корректный узел ее размещения. Если требуется назначить ту же текстуру другому каналу, например Bump mapping (Карта рельефа), воспользуйтесь располо-
Создание материалов
667
женной внизу рабочей областью. Для любого материала в рабочей области можно сделать видимыми восходящие и нисходящие связи, иллюстрирующие процесс его создания. Чтобы назначить уже используемую текстуру другому материалу, перетащите ее на образец материала, нажав среднюю кнопку мыши, и выберите в появившемся меню название нужного канала. При этом важно видеть, как цепочка различных текстур складывается в итоговую текстуру и образует материал. Наведя указатель мыши на соединительную стрелку, вы увидите всплывающую подсказку, а двойной щелчок на стрелке приводит к появлению диалогового окна Connection Editor (Редактор связей). В нем отображается даже больше нестандартных связей, чем вы можете образовать. СОВЕТЧтобы рассмотреть материал детально, нужно увеличить сферу-образец, перемещая указатель мыши при одновременно нажатых клавише Alt, а также левой и средней кнопках мыши.
Диалоговое окно Hypershade (Редактор узлов) позволяет соединять текстуры между собой бесчисленным количеством способов. При этом вы можете визуально программировать материал в рабочей области. Чтобы не запутаться в элементах диалогового окна Hypershade (Редактор узлов), нужно иметь четкий и лаконичный план создания материала.
Эффективная настройка материалов Визуализация часто сопровождается проблемами. Материалы нужно настроить таким образом, чтобы ресурсы компьютера использовались максимально эффективно. Это осуществляется, например, путем применения одной и той же карты текстуры к различным частям итогового материала. Скажем, можно назначить текстуру Checker (Шахматное поле) каналам рельефа и зеркальных бликов одного материала, а затем каналу цвета другого. Обычно можно создать каждый из них по отдельности, получив три узла Checker (Шахматное поле) и три узла 2D Texture Placement (Размещение двухмерной текстуры). Но если образец практически не различается для трех упомянутых случаев, почему не использовать его всего один раз? Если потребуется, чтобы один из образцов текстуры слегка отличался от остальных, можно воспользоваться свойством Switch Node (Узел переключения) и поменять его. Останется всего один образец текстуры Checker (Шахматное поле), редактирование которого окажет влияние на вид всех содержащих его материалов. Другим способом повышения эффективности является преобразование результирующей текстуры к двухмерному виду (рис. 18.13). Эта операция подобна слиянию слоев в Photoshop. Сложный составной материал неминуемо увеличивает время визуализации. ПРИМЕЧАНИЕ В качестве примера упрощения материала рассмотрим процедурную текстуру Cloth (Ткань), назначенную каналу цвета, а также каналам Gap Color (Цвет зазора), U Color (Цвет нити основы) и V Color (Цвет нити утка), которому, в свою очередь, назначена текстура Ramp (Градиент). Если выделить текстуру ткани и поверхность, которой она назначена, и выбрать в меню Edit (Правка) диалогового окна Hypershade (Редактор узлов) команду Convert to File Texture (Преобразовать в файл текстуры), количество вычислений во время визуализации будет минимальным. Однако если вам потребуется снова отредактировать текстуру материала, редактировать придется оригинал.
668
Глава 18• Использование материалов
Рис. 18.13. Результаты применения двух материалов одинаковы, но для материала слева характерно меньшее число узлов и связей
Итак, преобразование сети узлов в двухмерное изображение сокращает время визуализации каждого кадра. Для 10-секундной анимации это значение сэкономленного времени нужно умножить на 300 кадров.
Создание библиотек Другим способом достижения эффективности является создание вспомогательных элементов и управление ими. Для этого полезно действовать в двух направлениях. Во-первых, нужно тщательно продумывать свои проекты. Во-вторых, можно отдельно сохранить элементы, которые могут потребоваться для других проектов, и создать проект с именем Library (Библиотека), содержащий материалы и текстуры, а также часто используемые модели. 1. Выберите в меню команду File > Project > New (Файл > Проект > Создать) и в появившемся диалоговом окне щелкните на кнопке Use Default; (По умолчанию). 2. В меню Tabs (Вкладки) диалогового окна Hypershade (Редактор узлов) выберите команду Create New Tab (Создать новую вкладку). 3. Введите в поле New Tab Name (Имя новой вкладки) имя Library. 4. В группе Initial Placement (Разместить) установите переключатель Bottom (В нижнем окне), а в группе Tab Type (Тип вкладки) — переключатель Disk (С диска).
Создание материалов
669
5. Щелкните на кнопке, расположенной справа от поля Root Directory (Корневой каталог), чтобы указать маршрут доступа к проекту Library. 6. Щелкните на кнопке Create (Создать) и в нижней части окна редактора узлов появится новая вкладка. Таким образом, у вас появляется область для сохранения любой модели и материала на жестком диске. С помощью окна Visor (Просмотр образцов) можно просмотреть весь диск и выбрать все, что может быть открыто в Maya, как показано ни рис. 18.14.
Рис. 18.14. Система хранения информации состоит из вкладки Library и окна Visor
Это полезно при работе с изображениями, так как вы можете осуществлять их предварительный просмотр. Нажав среднюю кнопку мыши, изображение можно перетащить прямо в диалоговое окно Hypershade (Редактор узлов). СОВЕТ Выделите все созданные вами материалы и воспользуйтесь командой Export Selected Network (Экспортировать выделенную сеть) меню File (Файл) редактора узлов, чтобы сохранить их в одном фанге.
Карты текстур для каждой сцены должны храниться в папке Source Images, которая создается по умолчанию при создании нового проекта. При желании внутри этой папки можно создать вложенные папки Bump, Color и т. п. Используйте ста г-
670
Глава 18 • Использование материалов
дарт именования файлов, описывающий назначение текстуры. Для нашего проекта это были простые имена, например brick_bumpl20502.JFg; в данном случае сначала идет название текстуры Brick (Кирпич), а затем название канала, которому она была назначена. Заканчивается имя датой создания текстуры.
Назначение материалов Теперь, завершив разговор о систематизации файлов, пришла пора обсудить процесс назначения материалов, Это можно сделать и до начала работы с картами текстур, чтобы поверхности объектов имели разные цвета, а сцена потеряла свою стандартную серую раскраску. В Maya назначить материал может разными способами. После создания материала нужно выделить в окне проекции объект или объекты, щелкнуть правой кнопкой мыши на образце материала и выбрать в появившемся меню команду Assign Material to Selection (Назначить материал выделенному объекту), В качестве альтернативы можно упомянуть перетаскивание материала на поверхность объекта в окне проекции, нажав среднюю кнопку мыши. Впрочем, при наличии в сцене объектов с перекрывающимися поверхностями осуществить данную операцию будет нелегко. Чтобы гарантировать назначение нужного материала, щелкните правой кнопкой мыши на выбранной поверхности — появившееся контекстное меню содержит подменю Materials (Материалы) с командами Assign Existing Material (Назначить существующий материал) и Assign New Material (Назначить новый материал). Выберите вторую команду и укажите тип материала, который вы хотите создать. Появится диалоговое окно Attribute Editor (Редактор атрибутов). После этого поверхности можно сопоставить уникальный цвет. СОВЕТ Если материалу была назначена карта текстуры, параметру Default Color (Цвет по умолчанию) в разделе Color Balance (Баланс цветов) может быть сопоставлен любой цвет. Это поможет различать материал в режиме показа тонированных оболочек объектов.
На данный момент все модели должны иметь разные цвета, что является отправной точкой для визуализации и тестирования движения объектов. Но перед назначением текстур и окончательной визуализацией нужно оценить вид материалов.
Оценка вида материалов В процессе создания материалов вам постоянно придется их редактировать, прибегая к тестовой визуализации. Материалы обычно назначаются до освещения сцены, но желательно предварительно учитывать настройку источников света. Об освещении мы поговорим в следующей главе, хотя процессы назначения материалов, создания источников света и визуализации идут «р\ка об руку». Можно начать все эти процессы одновременно, а затем подправлять один за другим. Назначение материалов обычно полностью завершается к моменту начала работы над освещением сцены, что не исключает необходимости настройки материала для приведения его в соответствие с освещением. Сфера-образец в диалоговом окне Hypershade (Редактор узлов) дает общее представление о виде материала. Затем требуется посмотреть, как он будет выглядеть
Создание карт текстур
671
на созданной поверхности. Двухмерные и трехмерные текстуры могут идеально смотреться на сферическом образце, но оказаться слишком мелкозернистыми на модели. Быстрее всего можно осуществить предварительный просмотр текстур путем аппаратного назначения материалов. В этом случае карта текстуры будег показана с учетом канала, заданного в разделе Hardware Texturing (Аппаратное наложение текстур) диалогового окна Attribute Editor (Редактор атрибутов). В этом разделе также можно выбрать качество показа текстур с помощью раскрывающегося списка Texture Quality (Качество текстуры). Это замечательный способ размещения карт текстуры на поверхности объекта и просмотра результата этого размещения. Для улучшения вида материалов нужно нажать клавишу 7, включающую вое источники света в сцене. До того как в сцене окажутся все запланированные осветители, можно воспользоваться упрощенной схемой в виде направленного и рассеянного источников света. Это даст освещение с двух точек, причем направленный источник света будет ключевым, а рассеянный — заполняющим. Если над освещением сцены работает другой член команды, не исключено, что у него уже имеется предварительная схема, которой вы сможете воспользоваться. Материал должен выглядеть определенным образом, и свет только подчеркивает это. Вы обнаружите, что после перехода от базового освещения сцены к окончательному вам практически не потребуется редактировать материалы. Для тестирования материалов применяется интерактивная фотореалистичная визуализация. При этом сцена сохраняется в памяти, а визуализируются только сделанные изменения, что значительно ускоряет процесс. Можно также выделить участок сцены с объектом, над видом которого вы в данный момент работаете, что также способствует сокращению времени визуализации. Если вас устраивает вид материала, визуализируйте сцену сначала с низким, а потом и с высоким разрешением, чтобы убедиться, что это и в самом деле то, что вам нужно. Если материалы назначены анимированному персонажу, подвигайте ползунок таймера анимации, визуализируя различные кадры.
Создание карт текстур Первое, что бросается в глаза при виде материала, — его цвет. Варианты здесь могут быть бесчисленными. Карту текстуры можно создать с помощью модуля Paint Effects (Эффекты рисования), путем сканирования существующего рисунки или с использованием математических формул. Эти три приема позволяют получать самые разные карты текстур. Кроме того, всегда нужно учитывать, как карта текстуры ложится на поверхность. Это относится ко всем типам карт, в том числе к картам рельефа и зеркальных бликов. Рассмотрим эти вопросы более подробно.
Нарисованные карты текстуры Как следует из их названия, нарисованные карты текстуры вручную рисуются на бумаге или в приложении для работы с графикой, например в Deep Paint от Right Hemisphere, в Procreate Painter или в Adobe Photoshop. Эти графические редакторы применяются также для обработки изображений, а программа Deep Paint используется для трехмерного рисования в интеграции с Maya. Обычно проще ра(ю-
672
Глава 18 • Использование материалов
тать с полноразмерными диапазонами и диковинными цветовыми схемами в приложениях для редактирования графики, чем рисовать на бумаге. С помощью одного только цветового канала может быть достигнут высокий уровень детализации. Вы можете экстраполировать карты рельефа или зеркальных бликов путем обработки базового изображения. Например, можно убрать цвет, а затем увеличить резкость. Этот метод работы имеет высокую эффективность и позволяет достичь правдоподобного вида материалов. Скажем, кожа выглядит зернистой. Для ее имитации можно назначить каналу отражений простую черно-белую карту текстуры. Совмещение будет полным. Равно полезными являются и карты текстуры, нарисованные на бумаге. Однако при их сравнении с картами, созданными с помощью графического планшета в специальном редакторе, отчетливо видны различия. Их можно заметить и при взгляде на декорации современных рисованных мультфильмов. Попробуйте написать свое имя сначала на бумаге, а затем на экране с помощью графического планшета. Разница будет весьма значительной. Подпись на бумаге выглядит более естественно. Именно поэтому многие текстуры для проекта «Место для парковки» были нарисованы на бумаге гуашью, отсканированы и отретушированы в графическом редакторе.
Отсканированные текстуры В качестве текстур также используются отсканированные фотографии. Их прелесть — в высоком реализме изображения. Чем больше текстур создано таким образом, тем реалистичнее будет выглядеть объект. Наличие при моделировании опорной фотографии также позволяет достичь более точного воспроизведения. Однако в компьютерной графике фотореализм является всего лишь одним из множества вариантов вида объектов, который можно получить. Используя фотографию в качестве источника текстуры, вы воспроизводите реальные изъяны материала. Рисуя текстуру, сложно сымитировать царапины и зазубрины, которые практически всегда присутствуют на поверхности. Фотографии могут стать прекрасным источником карт текстуры даже при стилизации. Помните, что нарисованное изображение также можно отсканировать и обработать в графическом редакторе.
Текстуры/ созданные с помощью эффектов рисования Замечательным инструментом для создания двухмерных и трехмерных текстур является модуль Paint Effect (Эффекты рисования). Его кисти уникальны, достаточно открыть диалоговое окно Visor (Просмотр образцов) и убедиться в этом. Загрузите образцы кистей и поэкспериментируйте. Также можно воспользоваться инструментом Preset Blending (Настройка смешения) и получить гибридное изображение, задав процентные соотношения для формы и раскраски двух кистей. Можно также создать рисунок повторяющимся узором в режиме Canvas (Хо/ст). Для этого достаточно воспользоваться кнопками Wrap Canvas Horizontally (Горизонтальный перенос изображения) и Wrap Canvas Vertically (Вертикальный перенос изображения), расположенными на панели инструментов диалогового окна Paint Effect (Эффекты рисования). В результате штрих, расположенный управой границы холста, появится слева. Кисти
Создание карт текстур
673
модуля эффектов рисования могут использоваться инструментом 3D Paint Toot (Инструмент рисования по поверхности) в режиме Rendering (Визуализация). Хотя со стыками NURBS-поверхностей нужно быть очень аккуратным. Этот метод не так точен, как работа с приложением Studio Paint от фирмы Alias|Wavefront. На стыках могут обнаружиться несовпадения, которые придется ретушировать.
Процедурные карты текстур Работу по созданию текстур можно переложить на компьютер, воспользовавшись встроенными процедурами. Процедурные текстуры представляют собой всего лишь небольшие программы, генерирующие изображение. Вместо того чтобы сканировать снимок образца дерева, можно использовать текстуру Wood (Дерево), которая генерирует кольца и цвета и алгоритмически проецирует их на различные поверхности. Таким способом можно быстро получить текстуру, рисование которой занимает много времени, а найти фотографию достаточно сложно. Другим преимуществом процедурных текстур является легкость их редактирования и возможность анимации. Это негативно влияет на продолжительность визуализации, но вы мо жете воспользоваться командой Convert to File Texture (Преобразовать в файл текстуры), которая эквивалентна преобразованию текстуры к двухмерному виду. ПРИМЕЧАНИЕ Не существует единого мнения по поводу того, какие текстуры лучше, созданные вручную или процедурные. В некоторых студиях принято рисовать каждую карту текстуры, другие же при каждой возможности обращаются к процедурным текстурам.
В следующем разделе мы поговорим о применении цветовых карт на примере материалов, созданных для проекта «Место для парковки».
Пример материала Откройте файл candy_apple.mb, расположенный в папке Chapter 18 прилагаемого к книге компакт-диска, чтобы посмотреть на пример материала, созданного для проекта «Место для парковки». Получение любого материала сопровождается проблемами, и в каждом случае имеется свое, уникальное решение. Материал candyApple предназначен для автомобиля Крутана, а его структура показана на рис. 18.15. Уникальность материала состояла в том, что на нем необходимо было воссоздать переход от теплых тонов к холодным. Крутана можно себе представить исключительно за рулем яркоокрашенного автомобиля. Каналу цвета назначена текстура Env Cube (Пространственный куб). Верхняя часть этого куба имеет красный цвет холодного оттенка. Нижней поверхности соответствует яркокрасный цвет, а сторонам — красный цвет нейтрального оттенка. Вдоль сторон использован градиентный переход от одного цвета к другому, гарантирующий полное совпадение цветов сверху и снизу. Цвету зеркальных бликов был назначен круговой градиент. Этот трюк был позаимствован с картины Уинслоу Хомера (Winslow Homer), изображающей рыбака в шляпе. При внимательном рассмотрении шляпы оказалось, что на белом фоне находится небольшое пятно красного и зеленого цветов. Эти дополнительные друг к другу цвета давали эффект мерцания.
674
Глава 18 • Использование материалов
Рис. 18.15. Этот материал был создан для автомобиля Крутана из проекта «Место для парковки»
Параметр Glow Intensity (Интенсивность свечения) данного материала отличен от нуля. Обычно это приводит к свечению всей поверхности, но мы установили пороговое значение равным 0,419, поэтому светятся только наиболее яркие области. Каналу отражений была назначена утилита Clear Coat (Прозрачное покрытие). В результате отражающая способность материала стала зависеть от соотношения между направлением взгляда и ориентацией поверхности. Параметру Reflected Color (Цвет отраженного света) была назначена текстура Env Chrome (Зеркало), параметру Sky Zenith (Цвет неба в зените) присвоен черный цвет, а параметру Sky Color (Цвет неба) — голубой. Таким способом были получены темные пятна на поверхности при нормали, смотрящей в небо, и высококонтрастные отражения в случаях, когда нормаль направлена в сторону горизонта. Другими словами, чтобы сделать модель хорошо, делайте ее блестящей.
Проецирование материала на поверхность Мы пытаемся дать вам представление о процессе работы над реальным проектом, а не просто перечень функций различных инструментов. Документация в Интернете дает начальные сведения, но если вы захотите узнать, как выглядит рабочий процесс, вам придется заплатить. Мы сознательно не описываем процесс сопоставления проекционных координат иерархическим поверхностям и поверхностям из сеток полигонов, так как практически это никогда не делают. Намного чаще используют проекционные карты текстур. Это похоже на проецирование слайдов, которые можно точно разместить на трехмерной поверхности. Данный метод имеет следующие достоинства:
675
Проецирование материала на поверхность
О текстура может быть без швов расположена на поверхности, состоящей из нескольких фрагментов; О текстура может быть ограничена определенным объемом; О на NURBS-поверхности текстура может быть преобразована в двухмерную; О текстура может быть спроецирована из окна центральной проекции; О одна текстура может использоваться для нескольких поверхностей. В следующем упражнении вы познакомитесь с методикой проецирования для получения нереалистичного изображения. Впрочем, таким же способом можно воссоздать вид, близкий к реальности. Все зависит от иллюстраций, используемых для проецирования. Основная идея состоит в создании снимка экрана, который затем будет фигурировать в качестве основы для карты текстуры. Далее изображение повторно проецируется для достижения точного совмещения.
Упражнение 18.2. Создание нереалистичного материала 1. Загрузите файл dawg^shade.mb с прилагаемого к книге компакт-диска и перейдите в окно проекции Frontl (Вид спереди). 2. В группе 2D Textures (Двухмерные текстуры) области создания узлов диалогового окна Hypershade (Редактор узлов) установите переключатель As Projection (Как проекцию) и щелкните на текстуре File (Из файла). Нам требуется спроецировать на поверхность двухмерное изображение, содержащееся в файле (рис. 18.16). На данный момент это изображение представлено кубом, который называется матрицей преобразований.
штш
Рис. 18.16. Это вид собаки сбоку с матрицей проекций, которая помогает выровнять изображение
676
Глава 18 - Использование материалов
3. Поменяйте масштаб и местоположение матрицы преобразований таким образом, чтобы она целиком закрыла изображение собаки, 4. Придайте окну проекции Frontl (Вид спереди) максимально возможные размеры и максимально увеличьте матрицу, как показано на рис. 18.17.
Рис. 18.17. Вид сбоку показывает местоположение проецируемой карты текстуры
5. Сделайте снимок экрана. Для этой цели можно исполковать, например, приложение Snagit от Techsmith (http://www.techsmith.com). При отсутствии этого приложения можно действовать иначе. Выберите команду Window > Rendering Editors > Hardware Rendering ВиГег(Окно > Редакторы визуализации > Аппаратный буфер визуализации). 6. В меню Render (Визуализация) появившегося диалогового окна выберите команду Attributes (Атрибуты) и перейдите в окно редактора атрибутов. Введите в поле File Name (Имя файла) название side paint, параметру End Frame (Конечный кадр) присвойте значение 1, в раскрывающемся списке Resolution (Разрешение) выберите вариант Full_l280, а в списке Draw Style (Стиль визуализации) оставьте выбранный по умолчанию вариант Smooth Shaded (Сглаженный, с показом тонированных оболочек объектов). Установите флажок Full Image Resolution (Полное разрешение изображения). В разделе Display Options (Параметры отображения) поменяйте цвет цветового образца Background Color (Цвет фона) на белый и установите флажок Transform icons (Значки преобразования). В меню Cameras (Камеры) аппаратного буфера визуализации выберите вариант Frontl (Вид спереди). 7. Выберите в меню Render (Визуализация) команду Render Sequence (Визуализация последовательности). Чтобы посмотреть на результат, показанный на рис. 18.18, выберите в меню Flipbooks (Последовательность аппаратно визуализируемых изображений) вариант sidepaintl. 8. Сохраните изображение на диске.
Проецирование материала на поверхность
677
Рис. 18.18. Аппаратный буфер визуализации может быть использован для получения снимков экрана
9. Обрежьте рисунок по границам матрицы преобразований в любом графическом редакторе. 10. Вызовите модуль Paint Effects (Эффекты рисования) и в режиме Canvas (Холсг) раскрасьте пса в желаемый цвет. Мы покрыли его грязно-черными пятнами, как показано на рис. 18.19. Ведь пес по имени Клякса, к тому же обожающий пожарные гидранты, не может выглядеть по-другому. 11. Сохраните изображение и загрузите его в качестве файла материала. Создайте новый материал и назначьте проецируемое изображение каналу цвета. Присвойте материал модели собаки. Теперь изображение и матрица преобразований находятся в одном и том же пространстве, как показано на рис. 18.20. Проблемы возникают только при движении персонажа и сгибании его конечностей. В качестве заключительного шага нужно сделать копию модели и сохранить ее в качестве шаблона. Таким способом можно добиться корректного поведения карты текстуры при перемещениях собаки и натяжении кожи. 12. Выделите собаку и назначенный ей материал. Выберите в меню Texturing (Т«кстуры) команду Create Texture Reference Object (Создать опорную текстуру). Если вы не видите этого меню, выберите в раскрывающемся списке, расположенном слева на панели инструментов, вариант Rendering (Визуализация). После этого шаблон окажется выделенным. Снимите выделение. 13. Проверьте качество назначения текстуры, нажав клавишу 6, а затем перемешая отдельные точки и всю модель. Окончательно она должна выглядеть так, как показано на рис. 18.21.
678
Глава 18 • Использование материалов
!)
-.,' : - v '-'•" '"-• 'л- '<•!*! в JS'
Рис. 18.19. Окончательный вид собаки, созданный с помощью модуля Paint Effects
Рис. 18.20. Собака может двигаться без смещения текстуры вдоль поверхности ее тела
679
Заключение
<St
«oty :ОаШ
r-:.n
'л',,,,» 1 tf*,g'• »»is --rtj.-g Вв%»
РЛЧ.Чяк
tiSr'-
Рис. 18.21. Окончательный вид материала для Кляксы
Заключение Умение создавать материалы крайне важно при работе над проектом. Внимательно и пристально разглядывайте все поверхности и используйте результаты своих наблюдений в процессе работы над материалами. Не бойтесь экспериментировать, применяйте как процедурные, так и отсканированные карты текстур для получения нужного эффекта. Старайтесь достичь максимальной эффективности путем многократного использования повторяющихся узлов. Если вам требуется сложная раскраска, вспомните о методике проецирования с ее многочисленными достоинствами.
19 Освещение В этой главе мы поговорим о методиках получения реалистичного освещения. Мы познакомимся с наиболее совершенными приемами и совсем новыми подходами, обязанными своим происхождением недавно появившемуся визуализатору Mental Ray. Освещение является одним из самых важных аспектов создания сцен. Без света вы просто не сможете увидеть изображение. Стандартные осветители делают объекты сцены видимыми, но не более того. Вот почему в Maya имеется огромное количество разнообразных источников света. Соответствующие инструменты позволяют пользователю контролировать вид сцены. Мы обсудим способы получения определенных световых эффектов. В этой главе рассматриваются следующие темы: О О О О О О О
создание освещения в определенном стиле средствами Maya; элементы управления параметрами различных источников света; интерпретация цветового сценария; управление тенями; определение глобальной освещенности; имитация глобальной освещенности с помощью стандартного визуализатора; использование метода конечного сбора и HDR-изображений в визуализаторе Mental Ray.
Мир в свете Все объекты, которые мы видим вокруг себя, освещены. На улице все освещает большой направленный источник света — Солнце. При этом вид уличной сцены различается в разные моменты времени, соответственно, меняется и ее настроение. Время года и время суток связаны с атмосферными и прочими свойствами света. На освещение также влияют широта и долгота местности. Представьте себе полярную зиму, когда солнце появляется на небе на короткий промежуток времени, а потом — поддень в тропиках. Какие цвета вы будете использовать в этих двух случаях? Именно с этой проблемой мы столкнулись при обсуждении вопросов освещения в проекте «Место для парковки». По замыслу история происходила
Мир в свете
681
в летний день. Подъехав, автомобиль Крутана отбросил тень на греющуюся на солнышке собаку Кляксу. Именно этот инцидент положил начало всем последующим событиям. Но как описать все это языком параметров редактора атрибутов? Ответ на этот вопрос можно найти, зная, как работать с источниками света в Maya, и внимательно наблюдая за всем, что происходит вокруг. В Maya чаще всего используются встроенные осветители, среди которых есть источники направленного и рассеянного света. Направленный свет не затухает, другими словами, его интенсивность не зависит от расстояния. Соответственно, все поверхности оказываются освещенными. Рассеянный свет дает равномерное освещение, которое осветляет даже тени. Естественно, все оказывается освещенным, и конечный результат представляет собой типичную сцену компьютерной графики. Чтобы получить более полное представление о виде будущей сцены, желательно взглянуть на ее реальный прототип. Обратите внимание, что пока речь не идет об опорных фотографиях. Сначала вы должны выйти на улицу и осмотреть место, примерно соответствующее тому, которое вы хотели бы воспроизвести. Посмотрите, как солнечные лучи падают на поверхность. Двигаются ли тени от деревьев? К созданию опорных изображений можно перейти только после наблюдений. Обычно на фотографиях выдержка светлых областей завышена, а темных занижена, поэтому нужно делать несколько кадров с разной выдержкой. При съемке фильмов на улице оператору нужно компенсировать динамический диапазон. Человеческий глаз способен распознать 100 промежуточных уровней перехода от белого к черному. Фильмы и видео не в состоянии воспроизвести полный динамический диапазон человеческого зрения. Однако этот недостаток можно компенсировать правильным применением изображений с широким динамическим диапазоном (High Dynamic Range, HDR), или HDR-изображений, привнеся в компьютерную графику элемент реализма, который сложно получить другим способом. При съемке можно использовать подручные средства, позволяющие имитировать естественный солнечный свет. Это могут быть, например, отражатели, благодаря которым достигается более-менее приемлемая выдержка. Тот же эффект требуется получить в компьютерной графике. Тени не должны быть совершенно черными. В упражнениях данной главы мы рассмотрим вопросы настройки осветителей, создания и использования HDR-пзображений, применения модуля Mental Ray, а также поговорим о недостатках стандартного визуализатора Maya.
Управление тенями При освещении сцены основное внимание нужно уделить теням. Не бойтесь теней, с ними вполне можно работать и делать интересные вещи. Большое значение имеет цвет тени. В Maya важно, чтобы он отличался от черного. В общем случае цвет должен быть дополнительным к цвету источника света, формирующего тень. Для получения интересных эффектов со светом и тенью можно работать по отдельности, Например, обратите внимание на тени от деревьев на тротуаре. Понаблюдайте, как трепещут листья, рассеивая свет на поверхности. В результате возникает эффект Доплера, приводящий к появлению теней с круглыми пятнами. Подумайте об облаках, проплывающих по небу, и о том, как они влияют на вид он ружающего пейзажа. Благодаря им интенсивность освещения меняется скачками.
682
Глава 19 • Освещение
Проще всего получить эти эффекты, заставив источники света формировать тени и придав теням определенный цвет. Именно этим мы и займемся в следующем упражнении. Упражнение 19.1. Настройка теней В этом упражнении вы узнаете, как получать интересные эффекты теней, а также познакомитесь с методом их анимации. Для начала откройте файл Gobo.mb, расположенный в папке Chapter 19\scenes прилагаемого к книге: компакт-диска. Сцена содержит простые геометрически объекты, позволяющие лучше оценивать освещение в ходе его настройки. 1. Выделите прожектор и перейдите в диалоговое окно Attribute Editor (Редактор атрибутов), показанное на рис. 19.1. Кроме неге в сцене должны быть открыты диалоговые окна Hypershade (Редактор узлов) и Render View (Визуализатор), а также окно проекции Perspective (Перспектива), как показано на рис. 19.2. В окне центральной проекции показан пример освещения с оранжевыми и пурпурными тенями. Представленный вариант настройки не дает полный и насыщенный цвет, а всего лишь позволяет получить соответствующий оттенок. Глядя на обычные картины, можно обнаружить широкий спектр цветных теней. 2. Выделите прожектор и нажмите клавишу t, чтобы сделать видимыми управляющие векторы этого источника света. Выделив управляющий вектор мишени, вы получите возможность перемещать опорную точку и мишень одновременно. Переместите источник света таким образом, чтобы при визуализации стала заметной тень, как показано на рис. 19.3, 3. Щелкните на третьей слева кнопке панели инструментов окна Render View (Визуализатор), чтобы начать процесс интерактивной фотореалистичной визуализации. Затем выделите рамкой небольшую область, которая будет обновляться при редактировании материалов или освещения. Поменя йте значение параметра Dropoff (Затухание), и вы увидите, как меняется интенсивность освещения по мере удаления от источника света. Присвойте параметру Intensity (Интенсивность) отрицательное значение. Чем выше оно будет, тем сильнее скажется эффект удаления источника света со сцены, как показано на рис. 19.4. В реальном мире невозможно получить ничего подобного. ПРИМЕЧАНИЕ Типичным примером объекта с отрицательной интенсивностью света является рот персэнажа. Пространство внутри освещается внешними источниками света, если не позаботиться об этом особо. То же самое касается ноздрей, если лицо персонажа планируется показывать крупным планом.
ВНИМАНИЕ Несмотря на появление OpenGL и увеличение производительности видеокарт, не стоит полагаться на изображение, видимое в окне проекции. Аппаратное наложение теней и освещение поможет при настройке источников света, но не даст представления о том, как буцет выглядеть сцена после визуализации. Интерактивная фотореалистичная визуализация дает более адекватный результат, Тем не менее, так как она не позволяет рассчитывать эффект трассирования лучей, не стоит полагаться исключительно на полученное с ее помощью изображение. Впрочем, она представляет собой замечательный способ настройки источников света и назначения материалов в интерактивном режиме.
Мир в свете
683
Lfet
Selected
Fetus ад,*, ,Lrt
*bolLJsbfc jspotUgWSbapel
т ',,-^iJ
.
_£] Spot Light Attribute*
| I -'
ГЫм
Qufldralic V
|
Dl4oft.|ODDO
aassaL,
ЗГ*-~ ,|| - ?: Shadow Colm
'
te^«;'r '
" • -I-
vsp®«fefttmi_ •nten^ j":" " ЙфШЙЯ! sO.nwp*,!
-
'
'J
"
" 1~"
n
Г' •• P" i." ;. ..
rtn:
Рис. 19.1. Вариант настройки простой сцены, освещенной стрех точек (обратите внимание на параметры прожектора)
684
Глава 19 • Освещение
Рис. 19.2. В этом варианте освещения смены тени имеют пурпурный цвет, а источник распространяет оранжевый сеет
Рис. 19.3. Возможность одновременного перемещения опорной точки и мишени источника света облегчает управление тенями
685
Мир в свете
-
Рис. 19.4. Отрицательное значение интенсивности света уменьшает освещенность сцены и делает ее более контрастной
Рис. 19.5. Фрактальная текстура случайным образом меняет цвет света, позволяя получить более интересное изображение
686
Глава 19 • Освещение
Существуют вещи, о которых многие пользователи Maya часто забывают, например анимация источников света. Можно сделать тгис, что цвет и тени будут меняться с течением времени. 4. Верните параметру Intensity (Интенсивность) исходное значение и назначьте параметру Color (Цвет) в разделе Spot Light Attributes (Параметры прожектора) текстуру Fractal (Фрактал), как показано на рис. 19.5. 5. На вкладке Fractal (Фрактал) введите в поле Amplitude (Амплитуда) значение 6 и установите флажок Animated (Анимация). 6. Щелкните правой кнопкой мыши в поле Time (Время) и выберите в появившемся меню команду Set Key (Создать ключ). Установите ползунок таймера анимации на отметку кадра 60, введите в поле Time (Время) значение 5 и создайте еще один ключ, как показано на рис. 19.6.
Рис. 19,6. Создание ключа для времени (таким способом можно анимировать любой параметр в диалоговом окне Attribute Editor)
7. Несколько раз щелкните в разных точках ползунка таймера анимации. Вы увидите, что при каждом переходе к новой временной отметке изображение в окне проекции и в окне визуализатора меняется. Впрочем, существуют изменения, которые не отобразятся в окне Render View (Визуализатор), пока вы не начнете процесс интерактивной фотореалистичной визуализации еще раз. Сюда относятся, к примеру, тени, построенные на основе карты глубины.
687
Мир в свете
Чтобы сделать эффект менее выраженным, поменяйте цвета цветовых образцов Color Offset (Смещение цвета) и Color Gain (Масштабный коэффициент цвета), как показано на рис. 19.7, но не присваивайте последнему образцу абсолютна черный цвет.
FiactriAttribute»
\Aft*i^'isciaQ"
__
:
" "rjr-
Select
Рис. 19.7. Изменение цвета цветовых образцов Color Offset и Color Gain делает эффект менее выраженным
9. В диалоговом окне Render Global Settings (Общие параметры визуализации) введите в поля Start Frame (Начальный кадр) и End Frame (Конечный кадр) значения 1 и 60 соответственно. Выберите в меню Render (Визуализация) команду Batch Render (Пакетная визуализация) и просмотрите полученный результат с помощью утилиты fcheck (рис. 19.8). Раскройте архив Gobo.zip, расположенный в пап-
686
Глава 19 • Освещение
ке Images. Он содержит последЬвательность кадров, кэторую можно загрузить в окно утилиты fcheck.
Рис. 19-8. Для просмотра полученного результата в окне утилиты fcheck используйте команду Open Animation меню File
В большинстве систем, допускающих запуск Maya, достаточно ввести fcheck в командной строке. В Windows существует возможность запуска этой программы через меню Start (Пуск). СОВЕТ Утилита fcheck допускает просмотр данных в различных форматах, кроне того, может быть использована для преобразования изображений. Впрочем, для решения последней задачи применяется также утилита imgcyt, запускаемая из командной строки. Эта программа устанавливается автоматически при установке любой версии Maya. Однако ни одна из упомянутых утилит не поддерживает форматы AVI и Quick Time, поэтому для просмотра таких файлов вам потребуется программа стороннего производителя, например QuickTime Pro.
Благодаря фрактальной текстуре освещенность будет меняться довольно быстро. Однако нам требуются небольшие флуктуации, способные оживить ани-
Мир в свете
689
нацию. Поэтому изменения должны происходить в умеренном диапазоне и желательно растянуть их во времени. В конце концов, скачки рассеянного света в реальной жизни весьма умеренны.
Методология освещения в Maya В освещении сцен желательно следовать принятой методологии. Ниже перечислены основные правила, которых нужно придерживаться. О Для дополнительного контроля используйте квадратичное затухание, которое позволяет достичь точных значений интенсивности. При этом освещенность затухает естественным образом пропорционально квадрату расстояния до источника. Этот тип затухания используется при вычислении освещенности в >шзуализаторах сторонних производителей, например Mental Ray или RenderMan. ПРИМЕЧАНИЕ Хотя освещенность, которую обеспечивает квадратичное затухание, наиболее приближена к реальной, использование квадратичного затухания не всегда оправдано. Так как интенсивность света меняется в широком диапазоне, поверхности, расположенные ближе всего к источнику света, могут оказаться освещенными чересчур интенсивно. Кроме того, так как свет от такого источника распространяется достаточно далеко, дополнительно приходится рассчитывать освещенность удаленных поверхностей, хотя та является практически незаметной. Тем не менее на это расходуются ресурсы процессора, которые могут потребоваться для решения более актуальной задачи.
О
Меняйте параметры цветовой модели RGB. Никогда не оставляйте параметры R, G и В для источника света равными точно 255, так как иногда это может привести к появлению полос. Кроме того, поверхность в этом случае приобретает чересчур идеальный вид. Даже если присвоить одному из параметров значение 254, смешения цветов будет достаточно для устранения указанных недостатков. О Старайтесь обойтись минимальным набором источников света. У большинства пользователей мощность компьютеров не превышает 2 teraFLOPS, поэтому для ускорения процесса визуализации желательно не создавать в сцене липших источников света. При визуализации одного кадра экономия времени может составить всего несколько секунд, но следует помнить, что на одну секунду анимации приходится 30 кадров. Для отдельных источников света также существуют эмпирические правила. О Чтобы гарантировать освещенность определенного объекта, используйте источники света типа Directional (Направленные). Осветители данного типа достаточно универсальны, потому что у них отсутствует затухание. Создайте копию источника направленного света, разверните ее на 180°, придайте ее цвету прохладный оттенок и уменьшите интенсивность на 25-50 % по сравнению с интенсивностью оригинала. Сгруппируйте оба источника, обеспечив одновременность вращения. О Источники света типа Area (Прямоугольные) применяются для воспроизведения качества студийных фотографий при освещении объектов с отражающими поверхностями. Если снять флажок Emit Specular (Свечение зеркальных бликов) и направить источник света от поверхности, можно превосходно имитировать диффузное рассеяние этой поверхностью.
690
Глава 19 • Освещение
о Источник света типа Volume (Объемный), впервые появившийся в Maya 4.5, превосходно подходит для выделения небольших областей. Эффект от его применения ограничен поверхностью сферы, параллелепипеда, цилиндра или конуса. Его можно использовать для подсвечивания ограниченных областей, например глаз персонажа. Также данный источник света применяется для имитации распространения солнечных лучей в комнате, так как позволяет видеть отчетливую границу между светом и тенью, СОВЕТ Начальную настройку источников света лучше осуществлять иа примере сцены с равномерно окрашенными объектами. Достаточно назначить всем объектам сцены белый материал, полученный на основе раскраски по Блину, и для тестирования диапазона яркости оценивать результат в окне проекции Render View (Виэуализатор). Желательно получить для каждой сцены трехступенчатый переход от белого к оттенкам серого, а затем к черному. Подумайте о применении схемы освещения «свет — полутень — тень», которая позволяет сделать сцену более жизненной.
Для освещения в Maya нет никаких бесплатных инструментов, зато имеется фактически неограниченное количество лицензионных визуализаторов. Так как это приложение не поддерживает перенос излучения, основной источник света в сцене не будет автоматически освещать затененные участки за счет вторичного отражения света поверхностями объектов. Существуют альтернативные визуализаторы, позволяющие имитировать глобальное освещение и перенос излучения, Мы вкратце рассмотрим один из них, а именно визуализатэр Mental Ray. Однако воспроизведение этих эффектов в самой сцене осуществить невозможно, так как для этого требуется слишком много ресурсов компьютера. Большинство студий имитируют перенос излучения путем правильного размещения в сцене определенных источников света. Есть надежда, что по мсфе увеличения мощности процессоров глобальная освещенность сцены на регулярной основе станет реальностью. Для начала следует подумать о показе модели и окружающей обстановки. Затем сцену желательно сделать визуально интересной, кроме того, учесть особенности рассказываемой истории и по возможности подчеркнуть ее ключевые моменты с помощью освещения. Ниже перечислены шесть правил, о которых следует помнить. О Ключевой свет используется в основном для формирования теней. На данную роль лучше всего подходят источники света типа Directional (Направленный) и Spotlight (Прожектор). О Заполняющий свет усиливает детализацию затененных областей. Отдельно требуется учесть свет, отражаемый поверхностями объектов В Maya для этой цели лучше всего подходит источник света типа Ambient (Рассеянный), так как он распространяет лучи во всех направлениях. Также можно использовать точечный или прямоугольный источник света, предварительно сняв флажок Emit Specular (Свечение зеркальных бликов). О В случае кольцевого света источник располагается позади объекта, создавая эффект ореола, что помогает выделить объект на фоне других. Для этой роли подходит направленный источник света, интенсивность которого чуть превосходит 1, а цвет имеет холодный оттенок. О Выравнивающий свет подчеркивают еще одну грань объекта, например противоположную часть лица. Подобный тип освещения лучше всего воспроизво-
Глобальная освещенность и методы ее имитации
695
(Интенсивность) значение 0,03, а в поля Color R (Красный цвет) и Color G (Зеленый цвет) — значение 0,8, чтобы придать рассеянному свету синеватый оттенок. Эти значения будут присвоены всем выделенным источникам света одновременно. Величина 0,03 была получена делением совокупной интенсивности 1 на количество источников света — 33. 4. Выполните интерактивную фотореалистичную визуализацию, как показано на рис. 19.11, и «поиграйте» с настройкой источников света. Кроме того, имеет смысл поместить все осветители в именованный набор, чтобы облегчить процесс их выделения в будущем. Выберите в меню команду Window t Relationship Editors * Sets (Окно > Редакторы связей * Наборы). В меню Edit (Правка) панели Sets (Наборы) щелкните на квадратике, расположенном справа от команды Create Set (Создать набор), введите в поле Name (Имя) название domejights и щелкните на кнопке Apply and Close (Применить и закрыть).
Рис. 19.11. Результат интерактивной фотореалистичной визуализации после изменения параметров источников света, формирующих купол
Теперь, чтобы выделить все источники света сразу, достаточно ввести в командной строке команду select domejight или создать для этой цели кнопку на пол ке.
696
Глава 19 • Освещение
Далее нужно заставить источники света формировать тени. Для этого можно было бы ввести в поле Use Depth Map Shadow (Использовать карту глубины) значение on при выделенном наборе источников света. Однако таким способом нельзя задать разрешение картЕ>1 глубины, поэтому нам остается прибегнуть к MEL-сценарию. 5. Не снимая выделения с набора источников света, введите в диалоговом окне Script Editor (Редактор сценариев) следующие строки: string Sselection[]='ls -I -sT: for (Snode In $selection){ setAttr С$node+".useDepthMapShadows") 1; setAttr ($node+".dmapResolut1on"J 128; setAttr ($node+".dmapFilterSize") 2;
}
6. Нажмите комбинацию клавиш Ctrl+a, чтобы выделить текст в редакторе сценариев, а затем нажмите клавишу Enter на цифровой клавиатуре. Теперь после визуализации вы увидите слабые тени от объекта, как показано на рис. 19.12,
' ! •*'.~:; ;."!*«'« | -
^•.'•i'-t^^^s-^i
а с | ui v1 *• Ъ ^ | fl ft У ГЕЙ ig И | -М Й£
Рис. 19..12. Результат интерактивной фотореалистичной визуализации после включения функции формирования тен«;й
Глобальная освещенность и методы ее имитации
697
7. Выберите в меню команду Create > Lights > Directional Light (Создать > Источник света > Направленный). В меню Panels (Панели) любого окна проекции выберите команду Look Through Selected (Вид из точки расположения выделенного объекта), а затем переместите и ориентируйте источник света таким образом, чтобы пслучить вид на гидрант сверху. Не снимая с него выделения, откройте диалоговое окно Attribute Editor (Редактор атрибутов) и назначьте цветовому образцу Color (Цвет) желто-оранжевый цвет, а цветовому образцу Shadow Color (Цвет тени) темно-фиолетовый. Установите флажок Use Depth Map Shadow (Использовать карту глубины) и введите в поля Dmap Resolution (Разрешение карты глубины) и Dmap Filter Size (Размер фильтра карты глубины) значения 1024 и 4 соответственно. Переместите источник света немного в сторону, чтобы увеличить тень. Результат визуализации полученной сцены показан на рис. 19.13.
Рис. 19.13. Вид пожарного гидранта при наличии купола источников света и направленного источника света в роли Солнца
Нужно найти баланс между направленным источником света и осветителями, формирующими купол, иначе первый уничтожит тени, создаваемые последни ми. Кроме того, можно отдельно визуализировать тени от рассеянного свети, чтобы усилить их путем монтажа.
698
Глава 19 • Освещение
Это крайне упрощенная схема освещения, которая тем не менее превосходно подходит для большинства проектов. Узнать про дополнительные возможности и схемы можно на сайте http://www.pixho.com в разделе GI Joe. Вы можете загрузить любое изображение из этого раздела в качестве цветового образца для имитации глобальной освещенности путем базового освещения изображения, что избавит вас от необходимости обращаться к HDR-изображениям. Для этого формируется купол, а затем путем регулировки положения и числа управляющих точек этого купола создается массив направленных вовнутрь источников света. Их положение связано с проекционными координатами текстуры, а цвет соответствует цвету пикселов в месте их нахождения. Это позволяет быстро менять изображения и экспериментировать с различными сценариями освещения. Следующим шагом в имитации переноса излучения средствами стандартного визуализатора Maya является воспроизведение цвета отраженного света. Именно этим мы сейчас и займемся.
Упражнение 19.3. Имитация отраженного света В этом упражнении вы создадите источники света, которые приобретают оттенок отражающей их поверхности, и нацелите их в направлении другой поверхности, Этот эффект характерен для поверхностей всех объектов, но для некоторых из них он проявляется в крайне незначительной степени. Однако в ключевых местах сцены данное явление весьма к месту. 1. Откройте файл BounceLJght_Start.mb с прилагаемого к книге компакт-диска. Произведите интерактивную фотореалистичную визуализацию и сохраните изображение, щелкнув на кнопке Keep Image (Сохранить изображение) панели инструментов окна Render View (Визуализатор). Это изображение впоследствии будет использовано для сравнения и позволит рассмотреть едва различимый эффект, получаемый за счет отраженного света. Создайте прожектор и поместите его, центрировав на гидранте и нацелив на координатную плоскость, как показано на рис. 19.14. 2. Снимите флажок Illuminates by Default (Освещение по умолчанию). Выделите источник света, плоскость nurbsPlanel, изображающую землю, на которой стоит гидрант, и прожектор. Выберите в меню Lighting/Shading (Освещение/материалы) команду Make Light Links (Создать связь с источником), чтобы источник света освещал только эту плоскость. 3. Для цветового образца Color (Цвет) источника света задайте цвет, эквивалентный цвету пожарного гидранта, в поле Intensity (Интенсивность) введите значение 2 и снимите флажок Emit Specular (Свечение зеркальных бликов), чтобы избежать появления зеркальных бликов. В поля Cone Angle (Угол конуса света) и Penumbra Angle (Область полутени) введите значение 20 для получения мягкого рассеянного света. Так как цвет отраженного света должен сказываться только на близко расположенных объектах, введите в поле Dropoff (Затухание) значение ОД. Обновите результат интерактивной фотореалистичной визуализации, нарисовав рамку вокруг гидранта в окне Render View (Визуализатор). Теперь с помощью полосы прокрутки, расположенной в нижней части окна визуализатора, можно сравнить новое изображение с сохраненным ранее (рис. 19.15).
Глобальная освещенность и методы ее имитации
• ••- .- • .
Рис. 19.14. Вид пожарного гидранта перед созданием эффекта отраженного света
Рис. 19.15. Сравнение результатов визуализации до и после добавления отраженного света
699
700
Глава 19 • Освещение
4. Напоследок продублируйте источник света и нацельте его вниз от стены, чтобы на ней не появилось различимого красного пятна. Затем, как и в предыдущем случае, свяжите источник света со стеной, чтобы освещенной оказалась только она (рис. 19.16).
Рис. 19.16. Окончательный вид гидранта с двумя источниками, имитирующими отраженный свет
Эти эффекты, несмотря на их слабую выраженность, способствуют интеграции объекта в среду. Вы заметите интересные переходы в области света и тени, например красноватое свечение от стены в месте расположения тени от гидранта. Еще одной деталью, которую достаточно сложно воспроизвести, являются блики от очень ярких источников света. Для этой цели замечательно подходят HDRизображения, но, к сожалению, Maya их не поддерживает. Однако существует обходной путь — практически неизвестная команда Reflertion Specularity (Зеркальные блики отражений). Именно ей вам предстоит воспользоваться в следующем упражнении.
Глобальная освещенность и методы ее имитации
701
Упражнение 19.4. Создание зеркальных бликов с большим динамическим диапазоном Коротко говоря, в этом упражнении вам предстоит создать две сферы, одну путем назначения карты отражений, а вторую с помощью карты зеркальных бликов высокой интенсивности. Для этого упражнения была сделана фотография камерой Nikon CoolPix 990 с объективом Fisheye Converter FC-E8 0.21х. Этот объектив дает обзор практически в 180°, что замечательно подходит для карт текстуры, назначаемых сферам. Перед тем как применить этот снимок в Maya, он был обработан в графическом редакторе Photoshop. Вы можете аналогичным образом обработать собственные снимки, убрав насыщенность, а затем оставив только самые яркие участки, как показано на рис. 19.17. Однако чтобы упростить вам жизнь, готовые изображения wldeangle_highltght_map.tif и wideangle_reflection_map.tif мы поместили в папку \Chapter!9\sourceimages прилагаемого к книге компакт-диска. Г*. £к iKVfl [Hf
4*1. '1*
"М ;«. <**.. Г —г.г *\: •
Рис. 19.17. Карты отражений и зеркальных бликов после обработки в Photoshop
702
Глава 19 • Освещение
1. После завершения предварительной обработки вашего изображения или загрузки соответствующего файла с компакт-диска загрузите файл HDR_Specular_ Start.mb. Выберите в меню команду Create > NURBS > Sphere (Создать > NURBS * Сфера) и поменяйте размеры появившейся сферы таким образом, чтобы она включила в себя купол источников света, созданный в предыдущем упражнении. Другими словами, сфера должна быть больше любого объекта, который может ее отразить. В нашем случае достаточно ввести в поля JJcale X (Масштабирование по оси X), Scale Y (Масштабирование по оси Y) и Scale Z (Масштабирование по оси Z) значение 150, 2. Выберите в меню команду Window > General Editor > Attribute Spread Sheet(OKHo > Редакторы общего назначения > Список атрибутов) и в появившемся диалоговом окне перейдите на вкладку Render (Визуализация). Присвойте атрибутам Cast Shadows (Отбрасывать тени), Receive Shadows (Получать тени) и Primary Visibility (Первичная видимость) значение off. 3. Откройте диалоговое окно Hypershade (Редактор узлов) и создайте образец материала типа Surface Shader (Раскраска поверхности). Присвойте ему имя shader HDR_amb. Выделите ранее созданную сферу, щелкните на образце материала правой кнопкой мыши и выберите в появившемся меню команду Assign Material to Selection (Назначить материал выделенному объекту). 4. Дважды щелкните на образце материала, а затем щелкните на кнопке с рисунком шахматной доски, расположенной справа от ползунка Out Color (Цвет материала), и назначьте образцу текстуру File (Файл), в группе 2D Textures (Двухмерные текстуры) установив переключатель As Projection (Как проекцию). 5. В поле Image Name (Имя изображения) на вкладке file введите маршрут доступа к файлу wideangle_renection_map.tif. Затем в раскрывающемся списке Proj Type (Тип проекции) на вкладке projection выберите вариант Ball (Шар). Перейдите на вкладку place3dTexturel и введите значение -90 в поле Rotate (Поворот) для координаты X. По умолчанию точка сшивания текстур находятся на одной из сторон сферы, а нам требуется, чтобы она была снизу. Визуализируйте сцену обычным образом, так как интерактивная фотореалистичная визуализация не может осуществляться при включенном трассировании. Убедиться, что оно включено, можно в разделе Raytracing Quality (Качество трассирования) диалогового окна Render Globals (Общие параметры визуализации). Результат визуализации показан на рис. 19.18. Он выглядит достаточно приемлемо, но блики желательно сделать более яркими. Щелкните на кнопке Keep Image (Сохранить изображение) панели инструментов окна Render View (Визуализатор), чтобы сохранить изображение для последующего сравнения. ПРИМЕЧАНИЕ Сферическая проекция образуется путем сведения четырех углов клрты текстуры в одну точку. Представьте, что вы обернули вокруг шарика носовой платок, крепко стянув его концы внизу. Именно поэтому для данной проекции используется сферическое, а не панорамное изображение. Однако при наличии сферических проекционных координат или встроенных U- и V-координат NURBS-сферы вид изображения не имеет значения.
Глобальная освещенность и методы ее имитации
703
Рис. 19.18. Пожарный гидрант с отражениями, полученными трассированием
6. С помощью команды Duplicate (Дублировать) меню Edit (Правка) получите копию сферы и слегка уменьшите ее размер. Затем создайте образец материала с раскраской Blinn (По Блину) и присвойте ей имя HDR_spec. Назначьте этот материал выделенной сфере. Щелкните правой кнопкой мыши на образце материала для первой сферы и выберите в появившемся меню команду Graph Network (Сеть узлов). Выделите узел projection, а затем в меню диалогового окна Hypershade (Редактор узлов) выберите команду Edit > Duplicate > Shading Network (Правка > Создать копию > Сеть тонирования). 7. Дважды щелкните на новом узле проекции и перейдите в диалоговом окне Attribute Editor (Редактор атрибутов) на вкладку file. Замените файл wideangle_reflection_map.tif в поле Image Name (Имя изображения) файлом wideangle_highlight_ map.tif, который находится в той же папке прилагаемого к книге компакт-диска. 8. Дважды щелкните на образце материала HDR_spec и, нажав среднюю кнопку мыши, перетащите узел projections на кнопку с рисунком шахматной доски, расположенную справа от цветового образца Specular Color (Цвет зеркальных бликов). Параметру Transparency (Прозрачность) присвойте белый цвет.
704
Глава 19 • Освещение
9. В качестве завершающего шага перейдите в раздел Ra\trace Options (Параметры трассирования) для материала HDR_spec, щелкните правой кнопкой мыши на подписи Reflection Specularity (Зеркальные блики отражений) и выберите в появившемся меню команду Create New Expression (Создать новое выражение). Появится диалоговое окно Expression Editor (Редактор выражений), в которое нужно ввести выражение reflectionSpecularity=30. Наконец, остается только выровнять карту отражений и карту зеркальных бликов с источником света. 10. Выделите обе сферы и оба узла 3dplacement для сферических проекций и сгруппируйте их. Затем поверните группу в окне проекции Тор (Вид сверху). При этом в окне проекции Perspective (Перспектива) должно быть включено аппаратное отображение текстур. Посмотрите, где на карте отражений находится солнце, и выровняйте его с направленным источником света. Это довольно сложно, но в качестве ориентира можно использовать более светлую область на карте отражений. Визуализируйте сцену, как показано на рис. 19.19, и сравните полученный результат с исходным изображением.
Рис. 19.19. Вид пожарного гидранта с отражениями, полученными методом трассирования, и зеркальными бликами с большим динамическим диапазоном
Глобальная освещенность и методы ее имитации
70S
Освещение и материалы, созданные в этом упражнении, можно применять для множества других сцен, хотя купол источников света в основном используется для имитации уличного освещения, так как он воспроизводит атмосферу Земли, имеющую форму сферы. Для сцен в интерьере можно создать упрощенную версию освещения и материалов. Требуется связать источники света с объектами таким образом, чтобы осветительная система не взаимодействовала со стенами комнаты. Другими словами, для имитации глобальной освещенности комнаты можно использовать шесть направленных источников света, при этом для каждого из них нужно снять флажок Illuminate by Default (Освещение по умолчанию) и сделать так, чтобы он освещал только противоположную стену и объекты в комнате. Если северный источник света будет освещать северную и южную стены, вы получите нужные результаты. Вам требуется исключить северную стену из списка поверхностей, освещаемых северным источником света.
Создание и подготовка HDR-изображений Имитировать глобальную освещенность методом конечного сбора и переносом излучения в модуле Mental Ray можно и не прибегая к HDR-изображениям, но не следует недооценивать их преимущества. Они особенно полезны, например, при совмещении трехмерной сцены и традиционного фильма. Разумеется, можно вручную взять образец цвета из фильма, путем наблюдений определить направление световых лучей, а затем назначить цвет образца моделируемому источнику света. В заключительном упражнении этой главы вы сделаете это с помощью цветового сценария. Однако при монтаже фильма и трехмерной сцены вам потребуется совмещать либо естественный свет, либо свет ламп накаливания, либо то и другое вместе. В этих случаях важно иметь дополнительные опорные изображения. Но возможность получить детальные снимки окружающей среды существует далеко не всегда. Тем не менее для как можно более естественной интеграции трехмерной сцены в фильм желательно собрать максимальное количество информации. О В любом случае имеет смысл измерить объекты, служащие прототипами объектов сцены. Для этого вооружитесь длинной рулеткой и блокнотом. Проще всего осуществлять измерения втроем: два человека будут работать с рулеткой, а третий записывать результаты. Измерению также нужно подвергнуть источники света. На основе полученных данных вы можете создать физически корректный макет системы освещения. О Цифровой камерой сделайте фотографии прототипов объектов сцены. Ранее уже упоминалась камера Nikon Coolpix 990. Разумеется, существуют версии фотоаппаратов, дающих снимки с более высоким разрешением, но преимущество этой камеры состоит в наличии сменного объектива и возможности контроля выдержки. Однако при работе с ней желательно иметь дополнительный комплект аккумуляторов. Лучше всего приобрести сразу два комплекта, тогда один из них может заряжаться, в то время как другой находится в камере, При съемках в интерьере разумно использовать питание от сети. Включить вспышку имеет смысл только при очень слабом освещении. Таким образом,
706
Глава 19 * Освещение
эта камера замечательно позволяет запечатлеть особенности освещения. Вам потребуется, по меньшей мере, две карты памяти объемом 128 или 256 Мбайт, а также портативный компьютер или другое устройство для сохранения сделанных фотографий. При съемке поверхностей для карт текстуры применяйте телеобъектив, чтобы получить плоскую картинку. О Собирайте информацию об интенсивности света. Для этого требуются несколько световых зондов. Они подразделяются на три основных типа. Роль отражающего светового зонда может играть любой шарик с хромированной поверхностью. Для этой цели можно использовать елочные украшения, но они обычно имеют размер теннисного мяча, а этого слишком мало. В качестве сильно отражающей поверхности можно взять большой подшипник, но здесь нельзя не отметить их тяжесть, дороговизну и необходимость штатива. Впрочем, штатив желательно использовать и для легких световых зондов, так как при уличной съемке и большой выдержке даже небольшой ветер может смазать их снимки. Световые зонды для рассеянного света представляют собой белые пенопластовые шарики. Впрочем, их роль может играть отражающий световой зонд, завернутый в белую футболку. Они в основном требуются для определения освещенности в помещении. Если световой зонд поместить рядом с поверхностью, можно измерить количество отраженного этой поверхностью света. Световые зонды для измерения света, отражаемого кожей, делаются из молескина. Именно этот материал кладут в обувь путешественники, чтобы избежать мозолей. Его можно натянуть на сферу или другую поверхность для; дальнейшего определения цвета. Впрочем, полученная информация не нужна доя создания HDR-изображений, но полезна для определения отраженного света и просвечивания в ситуациях, когда человеческая кожа не попадает в кадр. Если съемка производится на зеленом или синем фоне, информация, полученная с помощью светового зонда, окажется некорректной, так как фиксироваться будут в основном эти два интенсивных цвета. Информацию о цвете на фотографиях всех перечисленных световых зондов можно взять в качестве образца с помощью инструмента Eyedгоррег (Пипетка), расположенного в диалоговом окне Color Chooser (Выбор цвета), или использовать непосредственно в качестве основы для базового освещения изображения. Чтобы создать HDR-изображение для базового освещения изображения, требуется снять световой зонд несколько раз с разной выдержкой или же использовать в качестве заменителя светового зонда объектив «рыбий глаз», позволяющий получить корректный диапазон значений. Объекты, расположенные в тени, нужно снимать с высокой выдержкой, а яркие источники света, наоборот, с низкой. Затем потребуются кадры с промежуточными значениями выдержки, как показано на рис. 19.20. Проецирование карты текстуры можно осуществлять различными способами. Мы уже упоминали сферические карты. Одним из способов получения панорамы является размещение камеры в центре сцены, с поворотом ее после съемки каждого кадра на определенный угол. Потом полученные фотографии соединяются между собой в Photoshop. Для преобразования набора снимков с разной выдержкой в фор-
Глобальная освещенность и методы ее имитации
707
мат HDR-изображсний требуется приложение HDRShop от фирмы Paul Debevec www.debevec.org/HDRShop/ или приложение mkhdr, которое можно найти на сайте http://athens.ict.usc.edu/FiatLux/mkhdr/.
Рис. 19.20. Снимки светового зонда с разной выдержкой и файл послойного выравнивания
Те, у кого нет цифровой камеры, могут использовать для создания HDR-изображений из набора снимков такие программы, как Вгусе. Если же имеется только одно изображение, различные варианты выдержки можно получить в Photoshop, меняя параметр Levels (Уровни). Кроме того, готовые HDR-изображения можно загрузить из Интернета, например, с сайтов http://www.debevec.org/Probes/ и http:// radiosity.tripod.co.jp/. Для предварительного просмотра уже готовых изображений применяется программа HDRview (http://www.debevec.org/FiatLux/hdrview/). Готовое HDR-изображение нужно преобразовать в формат, с которым может работать визуализатор Mental Ray. Этот визуализатор поставляется вместе с утилитой командной строки imf_copy, которая позволяет преобразовать HDR-файды в МАР-файлы.
708
Глава 19 • Освещение
Достаточно ввести в командной строке команду: imf_copy campus_probe.hdr campus.шар map rgb_fp
Утилита imfjcopy хранится в папке Maya S.O/bin. Впрочем, Maya не распознает ни один из вышеупомянутых форматов, поэтому при загрузке изображения появляется предупреждение, которое нужно просто проигнорировать. Для имитации глобальной освещенности методом базового освещения изображения, конечного сбора или переноса излучения HDR-изображение не требуется. Разумеется, как уже упоминалось, вид сцены при этом будет несколько отличаться. В чем состоит это отличие, вы поймете в процессе выполнения следующего упражнения. Упражнение 19.5. Использование метода конечного сбора в виэуализаторе Mental Ray Для начала требуется установить визуализатор Mental Ray, если он не был установлен вместе с Maya 5. Его можно бесплатно загрузить с сайта http:// aliaswavefront.com. Кроме того, нам нужно HRD-изображение. Пример снимка светового зонда можно найти в папке Chapter 19\sourceimages nf >илагаемого к книге компакт-диска. Он называется campus_probe.hdr. Самостоятельное создание таких изображений — дело достаточно сложное, к тому же программное обеспечение, применяемое для этой цели, имеет не самый удобный для пользователя интерфейс. Впрочем, существует возможность найти нужное HDR-изображение в Интернете и бесплатно или за небольшую сумму загрузить его. Для получения списка ресурсов по изображениям воспользуйтесь адресом http://www.gmask.com/newriders/Hnks/. 1. Загрузите файл MRJHDR_Start.mb с прилагаемого к кн:лге компакт-диска. Вид содержащейся в нем сцены показан на рис. 19.21. Это короткое упражнение. Мы уже произвели многочисленные настройки визуализации, которые облегчат его выполнение. Более подробно мы поговорим о них в главе 20. В данном случае будет использован метод построения купола, с которым вы познакомились ранее, хотя вам потребуется всего один источник света. Работу довершат метод конечного сбора визу ализатора Mental Ray и карта текстуры в стандарте HRDI (High Dynamic Range Image — изображение с широким динамическим диапазоном). 2. Теперь нужно создать точечный источник света. Выберите в меню команду Create > Lights > Point Light (Создать > Источники света > Точечный). Место его расположения не имеет значения. Присвойте параметру Intensity (Интенсивность) значение 0. 3. Дважды щелкните на образце материала Domeshader в диалоговом окне Hypershade (Редактор узлов). Это всего лишь раскраска поверхности, с которой вы уже познакомились в процессе выполнения одного из предыдущих упражнений. В данном случае образцу Out Color (Цвет материала) уже назначена текстура File (Файл). 4. В диалоговом окне Attribute Editor (Редактор атрибутов) перейдите на вкладку Projection и убедитесь, что в раскрывающемся списке F'roj Type (Тип проекции)
Глобальная освещенность и методы ее имитации
709
выбран вариант Bail (Шар). Нам потребуется определенный тип проекции в зависимости от того, горизонтальной или вертикальной является ориентация светового зонда, как показано на рис. 19.22. Карта, расположенная слева, получена с помощью объектива «рыбий глаз», направленного в небо, то есть является вертикальной. При ее использовании нужно повернуть сферическую проекцию на -90° по координате X. В этом случае будет применяться карта, сходная с расположенной на рисунке справа горизонтальной картой. Вам потребуется поме нять тип проекции.
Рис. 19.21. Вид собаки и гидранта перед назначением HDRI-карты куполу
5. Перейдите на вкладку file и щелкните на кнопке со значком папки, расположенной справа от поля Image Name (Имя изображения). Загрузите файл campus.map. Для этого вам потребуется выбрать в раскрывающемся списке File of Т/ре (Тип файла) вариант Best Guess (*,*) (Все файлы (*.*)), как показано на рис. 19.23. После загрузки файла в командной строке появится следующее предупреждение1: Warning: Failed to open texture file sourceimages/campus.map.
710
Глава 19 • Освещение
Рис. 19.22. Два изображения световых зондов: справа показано вертикальное изображение, слева — горизонтальное
Рис. 19.23. Выбор HDRI-карты в Maya
Цветовые сценарии
711
Проигнорируйте его. Визуализатор Mental Ray будет в состоянии прочитать этот файл. Мы преобразовали его из формата HDR в формат MAP с помощью утилиты imf_copy. Если вам нужен обычный 8-разрядный файл, позволяющий увидеть место размещения карты, можно сохранить HDR-файл в формате BMP с помощью приложения HDRview.exe. На всякий случай мы поместили на компакт-диск преобразованную версию этого файла под именем campus.bmp, 6. Визуализируйте окно проекции Perspective (Перспектива). Потребуется немного подождать, пока визуализатор Mental Ray создает карту конечного сбора. Вы увидите индикатор процесса в левой нижней части экрана. После завершения визуализации щелкните на кнопке Keep Image (Сохранить изображение), чтобы сохранить результат. Если изображение выглядит слишком тусклым или наоборот слишком ярким, можно поменять общую яркость HDR-изображеиия, воспользовавшись ползунком Color Gain (Масштабный коэффициент цвета) в разделе Color Balance (Цветовой баланс) на вкладке file. Для сравнения замените карту campus.map картой campus.bmp и визуализируйте сцену, как показано на рис. 19.24.
Рис. 19.24. Сравнение результатов применения метода конечного сбора при наличии HDR-изображения и без него
Легко заметить, что расположенная слева HDRI-версия имеет более насыщенный цвет. Обратите внимание на наличие ярких бликов на пожарном гидранте, которое свидетельствуют о применении HDR-изображений. О настройке визуилизатора Mental Ray мы детально поговорим в следующей главе. Сейчас вы просто познакомились с новой потрясающей возможностью Maya. В общих чертах подходы к освещению дискретными источниками света одни и те же. Но чтобы воспользоваться преимуществами виэуализатора Mental Ray, требуется дополнительная настройка.
Цветовые сценарии Цветовым сценарием называется изображение (или набор изображений), описывающее весь фильм в терминах цвета. Насыщенное исходное изображение может
712
Глава 19 • Освещение
превратиться в унылый однородный синий цвет. Хорошим примером является рисунок 19.25, дающий представление о цвете и настроении сцены. Его цветная версия находится в папке Chapterl9\sourceimages прилагаемого к книге компактдиска. Это изображение было нарисовано акварелью, отс канировано и после соответствующей обработки превращено в цветовой сценарий. Даже в черно-белом варианте можно разглядеть весь диапазон оттенков.
Рис. 19.25. Изображение цветового сценария для фильма «Место для парковки»
В этом изображении делается попытка описать качеств э света в солнечный день. Тени имеют синевато-фиолетовый оттенок, а само изображение выполнено в теплых оранжевых тонах. Оно должно помочь в настройке ОСЕ ещения: источники света будут иметь уклон в оранжевый цвет с сине-фиолетовыми тенями. Далее нужно думать об имитации переноса излучения. Именно благодаря ему белый объект на красной скатерти получит слабый розовый оттенок. В цветовом сценарии нужно сделать так, чтобы падающий на дорогу свет вторично отражался на разные объекты. Это придаст формам четкость и повысит визуальное богатство сцены. В Maya для имитации отраженного света требуется поместить н сцену дополнительные осветители, влияющие на цвет теней. Проще всего это сделать при наличии отсканированного цветового сценария, который будет использоваться в качестве опорного изображения. В этом случае можно просто взять нужный цвет с помощью инструмента Eyedropper (Пипетка). При работе в студии изображения цветового сценария и цветового ключа предоставляет команда художников. А команда осветителей использует их в качестве опорного материала. Они должны воспроизвести вид и ощущение определенного
Цветовые сценарии
713
цвета, а также прочие трудноуловимые вещи, например настроение сцены. Для начала следует создать основной свет, который будет присутствовать в непрерывной последовательности сцен. Затем каждый фрагмент индивидуально подстраивается к камере в соответствии с основным освещением. В следующем упражнении нам предстоит осветить сцену из фильма «Место для парковки». Действие происходит летом, солнце находится в начальной фазе заката.
Упражнение 19.6. Имитация освещения в яркий солнечный день Для начала настроим основное освещение, а затем сфокусируемся на нужном фрагменте. 1. Загрузите сцену StreetScene_Start.mb с прилагаемого к книге компакт-диска, В этой сцене присутствуют Крутан и его автомобиль на фоне магазина подарков. 2. Создайте направленный источник света и измените масштаб появившегося в сцене значка таким образом, чтобы отчетливо видеть его. Затем нажмите клавишу 5 и клавишу 7, перейдя таким способом в режим показа тонированных оболочек объектов и включив все имеющие источники света в сцене. В окне каналов поверните источник света таким образом, чтобы собака оказалась в тени автомобиля. Назовите источник света именем Key, так как он будет ключевым. 3. Сделайте цгет направленного источника света кремово-оранжевым, цвет теней — тсмио-фиолетовым, убедитесь, что у вас установлен флажок Use Depth Map Shadow (Использовать карту глубины), и введите в поля Dmap Resolution (Разрешение карты глубины) и Dmap Filter Size (Размер фильтра карты глубины) значения 1024 и 10 соответственно. Полученный в результате вид сцены показан на рис. 19.26. 4. Пришло время создать заполняющий свет. Начните с еще одного направленного осветителя, который нужно повернуть диаметрально противоположно уже имеющемуся в сцене источнику. Его цвет сделайте умеренно голубым, а в поле Intensity (Интенсивность) введите значение 0,25. Снимите флажок Emit Specular (Свечение бликов) и присвойте новому источнику света имя Fill. 5. Выберите в меню окна проекции команду Panels > Saved Layouts > Hypershade/ Render/Persp (Панели > Заданные варианты компоновки » Редактор узлов/Визуализатор/Перспектива). Затем выберите команду Window * General Editors > Attribute Spread Sheet (Окно * Редактор общего назначения > Список атрибутов) и выделите все источники света на вкладке Lights (Источники света) диалогового окна Hypershade (Редактор узлов). Воспользуйтесь интерактивной фотореалистичной визуализацией, чтобы посмотреть на общий баланс освещения. В диалоговом окне Attribute Spread Sheet (Список атрибутов) можно менять интенсивность каждого из источников света и смотреть, какие изменения происходят в окне Render View (Визуализатор). Направленный заполняющий свет должен осветлять область теней, как показано на рис. 19.27.
714
Глава 19 • Освещение
Рис. 19.26. Крутан слишком поздно собрался в магазин подарков
Щ • :. . ^ •-• •:
-
Щ •«-• Ц | f - , k . i . Щ ;.... .• I
^л. ^
"* в
Рис. 19.27. Голубоватый заполняющий свет осветлнет области, расположенные в тени
Цветовые сценарии
6.
7.
8.
9.
10.
11. 12.
715
Это абсолютный минимум освещения фона. Теперь нужно сделать акцент на фигуре собаки. Красноватый оттенок, который добавляет свет, отраженный от автомобиля, подчеркнет раздражение пса. Создайте источник света типа Area (Прямоугольный) и поместите его между персонажами и автомобилем. Направьте его в сторону персонажей и присвойте ему имя Red Car Bounce. Цвет этого источника должен совпадать с цветом автомобиля, В раскрывающемся списке Decay Rate (Скорость затухания) выберите вариант Quadratic (Квадратичная), а в поле Intensity (Интенсивность) введите значения 33. Снимите флажки Emit Specular (Свечение бликов) и Illuminates by Default (Освещение по умолчанию). Откройте диалоговое окно Outliner (Структура) и выделите персонажей, мостовую, тротуар и прямоугольный источник света. В меню Lighting/Shading (Освещение/материалы) выберите команду Make Light Links (Создать связь с источником). Это меню появляется только в режиме Rendering (Визуализация). В компьютерной графике можно легко добиться полного устранения теней, а также освещения только указанных пользователем поверхностей. Это позволяет получать потрясающие эффекты. Например, фон можно осветить ярким светом, в то время как для освещения объекта применять мягкий рассеянный свет. Редактирование подобных соотношений выполняется в диалоговом окне Relationship Editor (Редактор связей) в режиме Object-centric (Центрированный на объектах) или Light-centric (Центрированный на источниках света). Пора ограничить влияние некоторых источников света, чтобы получить плавный переход. Создайте прожектор, присвойте ему имя DogShadow и поместите над собакой. Параметру Dropoff (Затухание) присвойте значение 4, а цвет источника света сделайте ярко-оранжевым. В поле Intensity (Интенсивность) введите значение -4, чтобы под автомобилем появилась темно-синяя область. Отрицательное значение интенсивности приводит к тому, что свет уходит из сцены, Снимите флажок Illuminates by Default (Освещение по умолчанию) и свяжите источник света с мостовой. Повторите шаг 9 для автомобиля, Крутана и пожарного гидранта, чтобы получить тени и от этих объектов. При этом новые источники света должны быть связаны с тротуаром, как показано на рис. 19.28, Теперь пришло время вторичных источников света, подчеркивающих освещение персонажей. Вы можете указать освещаемые поверхности с помощью операции связывания, а затем отредактировать параметры источников света в диалоговом окне Attribute Spread Sheet (Список атрибутов), наблюдая за резул ьтатом путем интерактивной фотореалистичной визуализации. Это самый быстрый способ увидеть результаты сделанных изменений. Создайте источник света типа Volume (Объемный) и поместите его вблизи глаз Крутана. Свяжите этот источник света с лицом и глазами Крутана, как показано на рис. 19.29. Снимите флажок Emit Specular (Свечение бликов).
716
Глава 19 • Освещение
Рмс. 19.26. Теперь персонажи привязаны л земле при помощи источников света с отрицательной интенсивностью, заменяющих тени, получаемые в процессе визуализации
13. Создайте точечный источник света, проверьте, что установлен флажок Emit Specuiar (Свечение бликов), и поместите источник света рядом с правым глазом персонажа. Свяжите этот источник света с глазом. Повторите процесс для левого глаза. 14. Отредактируйте список атрибутов новых источников света, освещающих глаза, таким образом, чтобы акцент на глаза не был слишком сильным (рис. 19.30). Основным условием тут является точность воздействия, что требует многочисленных экспериментов с последующей визуализацией, Для ускорения работы над сценой откройте файл StreetScene_Finished.mb, чтобы посмотреть на окончательный результат. Осталось добавить ореол вокруг персонажа, чтобы выделить его на фоне декораций. 15. Создайте направленный источник света, нацелив его на камеру, и свяжите с персонажами. Введите в поле Intensity (Интенсивность) значение 1,3 и назначьте цветовому образцу Color (Цвет) светло-синий цвет. 16. Дважды щелкните на образце материала shaderGlow в диалоговом окне Hypershade (Редактор узлов) и введите в ноле Threshold (Порог) диалогового окна Attribute Editor (Редактор атрибутов) значение 6.
717
Цветовые сценарии
Рис. 19.29. Дополнительный источник света, размещенный перед лицом персонажа, привлекает внимание зрителей и усиливает драматический эффект
• т •:- -; • • -.
-•
.
•- -д. I-, ••-:
Рис. 19.30. Подвигайте точечные источники света, чтобы создать симпатичные блики света на глазных яблоках персонажа
Глава 19 • Освещение
718
17. Выделите образец материала Dog_Fur и введите в поле Glow Intensity (Интенсивность свечения) в разделе Special Effects (Эффекты) диалогового окна Attribute Editor (Редактор атрибутов) значение 0,5. 18. Заново запустите интерактивную фотореалистичную визуализацию и начните изменять параметр Threshold (Порог) материала srmderGlow и параметр Glow Intensity (Интенсивность свечения) материала Dog_Fur, наблюдая, как это влияет на вид сцены. Вы должны получить эффект «пушистости», как показано на рис. 19.31. Можно пойти дальше и отредактировать свечение и ореол.
Рис. 19.31. Параметр Threshold материала shaderGlow позволяет избежать сияния по всей поверхности и создает контролируемый эффект «пушистости»
Заключение Итак, вы получили представление о работе с источниками света в Maya и познакомились с рядом новых методов освещения. Для точной имитации реального освещения в сцене требуется создать от двух до шести источников света. При этом желательно как можно меньше жертвовать точностью. Смело моделируйте
Заключение
719
тени и всегда применяйте хорошие опорные изображения. Помните, что за счет связывания источника света с определенными поверхностями объем итогового файла уменьшается. Освещение представляет собой искусство, овладение которым дает вам пропуск и в мир компьютерной графики, и в мир обычной фотои видеосъемки.
20 Визуализация В этой главе рассказывается о выполнении визуализации в Maya. Подробно рассматриваются самые важные функции стандартного визу;*лизатора и проблемы, связанные с его использованием. Кроме того, мы познакомимся с новым встраиваемым визуализатором Mental Ray. Особое внимание уделяется следующим темам: О эффективная визуализация в Maya с применением встроенного визуализатора; О визуализация с помощью модуля Mental Ray; О многопроходная визуализация; О фабрики визуализации; О подготовка сцены к получению итогового результата. ПРИМЕЧАНИЕ Кроме стандартного визуализатора и модуля Mental Ray можно воспользоваться следующими интерфейсами: Pixar RenderMan and Mtor (http://www.pixar.com), BMRT (http://groups.yahoo.com/group/bmrt), Mayaman (http://www.animallogic.com/research/mayaman), 3deiight (http://viww.3delight.com). Air (http:// www.sitexgraphics.com), Aqsis (http://www.aqsis.com), RenderDotC и Maitai (http://www.dotcsw.com).
Визуализация при помощи стандартного визуализатора Подготовка сцены к визуализации представляет собой достаточно трудоемкий процесс, но потраченное на нее время всегда окупается, так как вряд ли кому-то будет приятно увидеть неожиданную ошибку после нескольких часов ожидания результата. Привычка каждый раз настраивать стандартный визуализатор, не полагаясь на заданные по умолчанию параметры, значительно улучшает результаты, Несмотря на некоторые недостатки, стандартный визуализатор Maya для каждой анимации позволяет задействовать практически неограниченное количество процессоров. При выполнении небольших проектов это снижает временные затраты на визуализацию.
Визуализация при помощи стандартного визуализатора
721
Эффективность стандартного визуализатора Maya можно повысить, если вы знаете все его возможности и недостатки. Имея эту информацию, можно заблаговременно планировать создание определенных эффектов, вместо того чтобы, проделав половину работы над проектом, обнаружить, что для получения требуемого эффекта недостаточно установки флажка или однопроходной визуализации. Впрочем, существует возможности обойти большинство известных ограничений стандартного визуализатора. О них мы и поговорим в следующем разделе.
Недостатки стандартного визуализатора Хотя стандартный визуализатор Maya позволяет в большинстве случаев получить приемлемый результат, он имеет ряд недостатков. Впрочем, существуют приемы, с помощью которых эти ограничения можно обойти, Например, многие функции в Maya позволяют получать отложенные эффекты. Существуют также эффекты, которые могут быть получены только при апшратной визуализации. Эффекты рисования (PaintFX), мех, свечение, а также оптические эффекты, такие как светорассеяние в объективе, глубина резкости и размывание в движении, получаются в результате отложенной обработки. Это означает, что эффекты добавляются к изображению после завершения визуализации. В результате они не могут стать частью эффектов, получаемых методом трассировки, например отражения и преломления, кроме того, их нельзя применять к прозрачным поверхностям, Большинство этих эффектов использует Z-буфер, что позволяет монтировать их позади и перед нужными элементами сцены. К сожалению, этот прием не работает в случае с прозрачными объектами. Кроме того, информация, сохраняемая в Z-буфере, может стать причиной появления зубчатых краев, если эффект размешается позади объекта. Для обхода этого ограничения можно визуализировать сцену вдвое большего, а затем вполовину меньшего масштаба и постепенно уменьшать масштаб изображения, пока зубцы не исчезнут. При работе с эффектами, которые не могут располагаться за прозрачными объектами или не видны в отражающих и преломляющих средах, прибегают к многопроходной визуализации или же используют для имитации эффекта карты отражения. Для имитации отражений производится визуализация с точки расположения второй камеры, а полученное изображение становится картой отражения поверхности, которая будет воспроизводиться методом трассировки. Именно таким способом можно получить, к примеру, отражение меха. Другим ограничением является невозможность корректной визуализации эффектов рисования и меха с применением послойной визуализации. Проблема решается путем введения в поле By Frame (По кадрам) значения 0,5 и последующей:' монтажа получаемых изображений. Различные варианты свечения позволяют получить потрясающие эффекты, Однако иногда предпочтительней задействовать свечение в композиции. При визуализации элементов свечение в композиции обычно не имеет смысла, так как получаемое таким сяособом мягкое свечение сложно смонтировать с другими эле -
722
Глава 20 • Визуализация
ментами. Чтобы обойти эту проблему, отдельно визуализируйте свечение для объекта, установив для материала, назначенного объекту, флажок Hide Source (Скрыть объект) в разделе Special Effects (Эффекты). Затем полученное изображение накладывается на обычный результат визуализации в режиме монтажа. Мерцание свечения возникает из-за установки флажка Automatic Exposure (Автоматическая выдержка) для узла shaderGlow. Для устранения мерцания нужно сначала визуализировать сцену с намеченным разрешением и обратить внимание на значения множителей Glow intensity normalization factor и Halo intensity normalization factor, появляющиеся в окне Output (Выходные данные) за счет автоматической выдержки. Это глобальные значения для свечений и ореолов. Чтобы применить их, нужно ввести их в поля Glow Intensity (Интенсивность свечения) и Halo Intensity (Интенсивность ореола) для узла shaderGlow. Возможность имитации двухмерного и трехмерного размывания в движении также ограничена, так как данный эффект не влияет на тени движущихся объектов и невидим в отражающих и преломляющих средах. Способы борьбы с этими недостатками описаны на сайте www,3dluvr.com/pixho/tutorials/mb_shdws/MBShdw_ main.html. Другим замечательным способом воссоздания эффектов, которые не реагируют на размывание в движении, является визуализация их в качестве фонового рисунка. Затем этот рисунок становится опорным изображением. Объект, к которому требуется применить размывание в движении, помещается на этом фоне, и ему назначается прозрачный материал без зеркальных бликов. Анимируйте размываемый объект таким образом, чтобы он перемещался с областью фонового изображения. При двухмерном размывании расплываются все пикселы, расположенные на траектории движения. То есть фоновое изображение размоется даже при перемещении прозрачного объекта. Для имитации размывания в движении отдельных объектов нужно также ввести в поле By Frame (По кадрам) диалогового окна Render Global Settings (Общие параметры визуализации) значение 0,1. Это увеличит число визуализированных кадров в десять раз. Затем в программе для монтажа нужно растя нуть последовательность кадров по времени в десять раз, чтобы получить корректное воспроизведение анимации на обычной скорости. При визуализации этой последовательности кадров с перекрыванием в приложении After Effects от Adobe вы получите действительно плавное движение. При работе с трехмерными титрами визуализируйте больше кадров, чем по вашим расчетам нужно. В этом случае вы сможете перенастроить последовательность без повторной визуализации. При ускорении анимации проблем не возникает, но вот если вам потребуется замедлить ее, понадобятся эти дополнительные кадры. Как уже отмечалось, для увеличения числа визуализируемых кадров используется поле By Frame (По кадрам) диалогового окна Render Global Settings (Общие параметры визуализации). Однако при этом последовательность кадров перенумеровывается непонятным для некоторых визуализаторов способом. Для компенсации этого эффекта можно вручную растянуть кадры или воспользоваться сценарием ajrtimeWarp, который можно найти на сайте http://www.highend3D.com. Пользователи Maya часто путают программно и аппаратно визуализируемые частицы. Если выбрать второй тип частиц и воспользоваться аппаратной визуализацией, появится сообщение об ошибке, например такое: Hardware rendering selected for particleShapel.Skipped
Визуализация при помощи стандартного визуализатора
723
В этом случае для визуализации нужно выбрать в меню команду Window > Rendering Editors > Hardware Rendering Bufer (Окно > Редакторы визуализации > Аппаратный буфер визуализации). Аппаратный визуализатор имеет свои собственные атрибуты. То есть такие частицы требуется визуализировать отдельно, а затем монтировать в основную сцену. Для этого применяется геометрическая маска, позволяющая располагать частицы перед другими объектами,
Сглаживание Настройкой параметров в диалоговом окне Render Global Settings (Общие параметры визуализации) достигается оптимальная производительность. Для начала мы поговорим о различных параметрах сглаживания, доступным в разделе Anti-aliasing Quality (Качество сглаживания), показанном на рис. 20.1. •видя д
е* 'р!*«!И • Heip-':t "РйЭ&и Urirg j
Soltwaie i->
llprwict L eyni/l'.Mi l.in.tinl 'j'Paint'ClfecU Rendormo Qptto
Рис. 20.1. Раздел Anti-aliasing Quality диалогового окна Render Global Settings
724
Глава 20 • Визуализация
О Раскрывающийся список Quality (Качество) содержит перечень предустановленных значений разрешения. Вариант Preview Quality (Эскизное качество) подходит для тестовых визуализаций, так как выбор более высокого качества может отрицательно сказаться на производительности редактирования сложных сцен. Выбранные параметры применяются ко всем элементам сцены вне зависимости от того, оправданно это или нет. Поэтому вариант Highest Quality (Высшее качество) имеет смысл выбирать только для окончательной визуализации, О Раскрывающийся список Edge Anti-aliasing (Сглаживание границ) контролирует сглаживание границ объектов. Максимальным значением является вариант Highest Quality (Высшее качество). О Значение в поле Shading (Затенение) определяет минимальное число образцов, которые требуются для сглаживания карт текстуры и материалов. Соответственно, в поле Max Shading (Максимальное затенение) указывается максимальное число образцов. Чем ниже эти значения, тем выше производительность. Дело в том, что дополнительные образцы могут потребоваться ограниченному числу текстур и материалов, поэтому не имеет смысла применять один и тот же высокий уровень ко всей сцене. Если в поле Max Shading (Максимальное затенение) ввести более высокое значение, алгоритм приспособления будет отмечать разницу в цветах только в случае, когда ее необходимо исправить. В то же самое время увеличение значения в поле Shading (Затенение) приводит к тому, что все пикселы обрабатываются одним и тем же способом, что замедляет процесс визуализации. При наличии в сцене материалов с текстурами, содержащими зашумление или мелкие детали, выделите объекты, которым они назначены, и откройте диалоговое окно Attribute Spread Sheet (Список атрибутов). На вкладке Render (Визуализация) присвойте значение on параметру Shading Samples Override (Изменение образца материала). Затем введите в поля Shading (Затенение) и Max Shading (Максимальное затенение) нужные значения. В результате вы получите гладкий рисунок текстуры после визуализации. О Все параметры, представленные в области Multi-pixel Filtering (Многопиксельная фильтрация), относятся к размыванию визуализированного изображения. Доступ к ним открывается только после выбора в раскрывающемся списке Edge Antialiasing (Сглаживание границ) варианта High Quality (Высокое качество) или Highest Quality (Высшее качество). В большинстве случаев вряд ли имеет смысл использовать многопиксельную фильтрацию для устранения эффекта мерцания, тем не менее она позволяет добиться устойчивости изображения. После установки флажка Use Multi Pixel Filter (Использовать многопиксельный фильтр) становится доступным раскрывающийся список Pixel Filter Type (Тип фильтрации пикселов), Самым слабым является фильтр Box Filter (Прямоугольный фильтр). Намного сильнее действует фильтр Gaussian Filter (Гауссов фильтр). Если проблему мерцания не удается решить путем наложения на объект фильтра и редактирования образца материала, может помочь визуализация с удвоенным разрешением и последующее уменьшение масштаба. При визуализации с полями невозможно использовать многопиксельную фильтрацию. Чтобы избежать появления артефактов, можно ввести в поле By Frame (По кадрам) значение 0,5, а потом задей-
Визуализация при помощи стандартного визуализатора
725
ствовать программу монтажа для перенастройки полученных кадров в последовательность, визуализированную с полями. О В области Contrast Threshold (Порог контрастности) поля Red (Красный), Green (Зеленый) и Blue (Синий) доступны только при выборе в раскрывающемся списке Edge Anti-aliasing (Сглаживание границ) варианта Highest Quality (Высшее качество). Эти значения определяют количество образцов материала, используемых при втором прогоне визуализатора. Их подбором можно добиться более явного проявления небольших бликов и теней, однако при этом может возрасти время визуализации. Поле Coverage (Область действия) становится доступным только после установки флажка Motion Blur (Размывание в движении) и переключателя 3D (Трехмерное) в группе Motion Blur Type (Тип размывания в движении). Уменьшение значения в этом поле улучшает качество трехмерного размывания, но увеличивает время визуализации.
Трассировка лучей Средства трассировки лучей в Maya достаточно развиты, но для получения максимальной отдачи применять их нужно грамотно. Например, желательно использовать трассировку для получения только тех эффектов, которые невозможно воспроизвести другими способами. Сюда относятся, например, тени от прозрачных или полупрозрачных окрашенных объектов. Но вряд ли имеет смысл путем трассировки имитировать мягкие тени, так как их можи о получить и с помощью карты теней, сэкономив время. Так как трассированные тени создаются в процессе визуализации, трассировка применяется ко всей сцене, что занимает намного больше времени, чем выделение поверхностей, обладающих отражающими или преломляющими свойствами. Прозрачные тени с показателем преломления равным 1 не нуждаются в трассировка, поэтому снимите флажок Refractions (Преломления) в разделе Raytrace Options (Параметры трассировки) диалогового окна Attribute Editor (Редактор атрибутов) для материала. В результате трассироваться будут только объекты с отражающими поверхностями, что ускорит процесс визуализации. Кроме того, нежелательно создавать слишком большие объекты без крайней необходимости. Они расширяют горизонты создаваемого вами мира, но последующая фокусировка на геометрии, расположенной в ограниченной области, замедляет процесс трассировки. То есть нужно либо удалить слишком большие объекты, либо уменьшить их размер. Изменить любой из этих параметров можно в диалоговых окнах Attribute Editor (Редактор атрибутов) и Attribute Spread Sheet (Список атрибутов) или путем написания MEL-сценариев. Имеет смысл также поместить кнопки запуска часто используемых команд на полку.
Качество трассировки Для получения оптимальных результатов в Maya сохраняйте значения перечисленных ниже параметров минимальными. О Reflections (Отражения). Эффект отражения может быть получен, даже когда этот параметр равен 1. Увеличение значения приводит к значительному замедлени ю процесса визуализации. При наличии в сцене всего одной отражающей поверх-
726
Глава 20 • Визуализация
ности не имеет смысла присваивать этому параметру значение выше 1, если, конечно, не требуется получить поверхность, отражающую саму себя. О Refractions (Преломления). По умолчанию этот параметр имеет значение 6, но для получения определенных эффектов может потребоваться увеличить его. Например, для стекла величина преломления достигает 9 или даже 10. При настройке преломляющих свет черных областей увеличьте значение этого параметра. О Shadows (Тени). Этот параметр определяет максимальное число отражений или преломлений луча, после которых он все еще может формировать тень. При наличии в сцене одной отражающей поверхности вполне достаточно присвоить этому параметру значение 1. Если в сцене используются отражающие поверхности и требуется, чтобы трассированные тени участвовали в процессе отражения или преломления, нужно присвоить этому параметру значение 2 или выше. То же самое касается значения параметра Ray Depth Limit (Предел глубины луча) в разделе Raytrace Shadow Attributes (Параметры трассированных теней) диалогового окна Attribute Editor (Редактор атрибутов) для источника света, формирующего тень. Если при работе с частицами типа Cloud (Облако) или Tube (Трубки) тени не формируются или формируются неверно, требуется также увеличить параметр Shadows (Тени). О Bias (Смещение). Этот параметр имеет смысл только для объектов с трехмерным размыванием в движении и трассированными тенями. При наличии артефактов или неправильных теней присвойте ему значение от 0,05 до 0,1. Во всех остальных случаях оставьте его равным заданному по умолчанию значению 0.
Параметры памяти и производительности для трассировки лучей Перечисленные в этом разделе параметры контролируют внутреннюю работу трассировщика. В большинстве случаев имеет смысл менять заданные по умолчанию значения, если, конечно, это не приводит к дополнительному расходу памяти и сцена не слишком сложная. Эти параметры находятся в разделе Memory and Performance Options (Параметры памяти и производительности) диалогового окна Render Global Settings (Общие параметры визуализации), показанном на рис. 20.2. о Recursion Depth (Глубина рекурсии). Этот параметр определяет количество уровней рекурсии элементов объемного изображения (векселей). Для простых сцен достаточно значения 1. По умолчанию этот параметр имеет значение 2, соответствующее более сложным сценам. Каждый новый уровень приводит к возведению предыдущего уровня в квадрат. Полученное в результате число представляет собой количество созданных векселей. Такой экспоненциальный рост векселей приводит к тому, что на уровне 6 сцена занимает более 1 Гбайт памяти. о Leaf Primitives (Примитивы-листья), Этот параметр контролирует число треугольников, из которых должен состоять каждый вексель для перехода на следующий уровень. Чем больше число треугольников, тем дольше луч будут двигаться до пересечения сними. По умолчанию этот параметр имеет значение 200.
Визуализация при помощи стандартного визуализатора
727
1
£1 и™*?* nkAal «ейиадй
.;&* .presets
. Rends Lljitifi
^J Motion ill» _fj Rondel Option* ^j MeniDlj' and Pwf«шансе Opiion* ,-TaisoUaiion
Muttt Piocotting
Vf"lPR'OpiiDn." ~ Rendei Lajiw/Pat* Conirol
Рис. 20.2. Раздел Memory and Performance Options диалогового окна Render Global Settings
О Subdivision Power (Величина разбиения). Этот параметр задает кубическое разрешение векселя. Значение представляет собой производительность создания векселя. По умолчанию оно равно 0,25, но для сложных сцен может быть слегка увеличено.
Размывание в движении Между двухмерным и трехмерным размыванием в движении существует большая разница. Во-первых, это время визуализации. Сцены с трехмерным размыванием визуализируются крайне медленно. Во-вторых, трехмерное размывание может влиять на вращение объектов, в то время как двухмерное размывание действует только на линейные векторы, то есть на объекты, положение которых меняется от одного кадра к другому. Преимуществом двухмерного размывания является скорость визуализации сцен. Оно создается в процессе отложенной
728
Глава 20 • Визуализация
обработки, поэтому при правильной настройке существует возможность отредактировать его параметры после визуализации. Другими словами, благодаря сохранению векторов движения в файле визуализации вам не придется повторно визуализировать всю сцену из-за слишком сильного или слишком слабого размывания в движении. Активизируя двухмерное размывание в диалоговом окне Render Global Settings (Общие параметры визуализации), вы получаете возможность сохранить векторы движения. Это может удвоить или даже утроить размер выходного файла видеоролика. Все зависит от числа объектов, к которым применено размывание в движении. После завершения визуализации остается воспользоваться командой blur2d, которая работает на любой машине с установленным приложением Maya и применяется для редактирования двухмерного размывания. Вне зависимости от того, какой вид размывания вы используете, разумно ограничить его применение только движущимися объектами. По умолчанию этот эффект применяется ко всем объектам сцены.
Количество образцов для трехмерного размывания Для настройки трехмерного размывания имеется еще два параметра. Они становятся доступными после установки в группе Motion Blur Type (Тип размывания в движении) переключателя 3D (Трехмерное). Образцом называется число проходов визуализатора, необходимое для появления каждого конкретного пиксела. Если посмотреть на экран телевизора с близкого расстояния, обнаружится, что он состоит из множества красных, зеленых и синих точек. Отодвинувшись, вы снова увидите цельную картинку. Другими словами, чем ближе наблюдатель к экрану, тем больше требуется точек (в нашем случае образцов), чтобы увидеть четкое изображение. Если эффект размывания в движении выглядит как множество отдельных квадратиков, значит, количество образцов слишком малэ. Для решения проблемы лучше увеличить параметр Мах 3D Blur Visib (Максимальное видимое трехмерное размывание), а не 3D Blur Visib (Видимое трехмерное размывание), как показано на рис. 20.3. Вышеописанный метод является адаптивным. Го есть при увеличении параметра Мах 3D Blur Visib (Максимальное видимое трехмерное размывание) эффект размывания проявляется только в тех местах, где он нужен, если же увеличить параметр 3D Blur Visib (Видимое трехмерное размывание), эффект распространяется на всю сцену.
Глубина резкости Чтобы получить размывание, достижимое с помощью объектива, применяется Zбуфер. Многие программы монтажа позволяют использовать файлы Z-буфера для создания эффекта глубины резкости. Это избавляет пользователей от необходимости повторной визуализации сцен. Для включения этой функции достаточно установить флажок Depth Channel (Z Depth) (Канал глубины (Л-буфер)) в разделе Image File Output (Выходной файл), как показано на рис. 20.4.
Визуализация при помощи стандартного визуализатора
729
iMRentfer Global Settiiws Hrtp
I Anli.ali.Minu Duality
*•
Quality InlermedJale Quality
| |
EdgS Ani^fceiiiii). Hiuhasl Qua*y j*J Number at Sample*
_^.,_^,,.^.
"nadns.|i -
У '..
!j-~j-
My-shadinaja •"'Lj!avgp-. .'
J—
'J..
: .
'«,-%... .;,,•*-. .. .i: . J
, a.lk*iJl
'J. .
'
-
Г U^M^r.^iF*Я
;
J
'•'•'. | " I- Я • -
.,,
;
| ^
. '•MV—
Hfcontiart tb~re*boU ч? ' = • : •-. fled ;
- . •
:
'
а д., ,,, , ,,, ,,
.
[0,ФЭО
.»—
T J.1..1^.
.;6!*eri C.30Q ии
* 1цьии-.
;.
J
1
'-; •
>] F-LieH Octjoni ^j1 Reytiacing (ЗиаШу -J M'ciiiunBlur
1 •" [
Ч
[• ao
-" BlutSpFterne jl^M
:.'
ч
^_i
:
;^' л
„ j :
•'
-— 1 "'
r<щ
Рис. 20.3. Раздел Motion Blur диалогового окна Render Global Settings
Для активизации эффекта глубины резкости при визуализации нужно открыть диалоговое окно Attribute Editor (Редактор атрибутов) для камеры и установить флажок Depth of Field (Глубина резкости) в одноименном разделе. При визуализации эффекта для камеры имейте в виду, что чем больше размывание, тем больше времени займет этот процесс. СОВЕТ Для дополнительного контроля глубины резкости загрузите сценарий DOF control, созданный Дирком Биалушем (Dirk Bialuch) и расположенный на сайте http://www.highend3d.com/maya/mel/. Этот сценарий создает объект (polyCube), управляющий глубиной резкости для выделенных камер, с помощью которого можно легко отрегулировать параметры данного эффекта.
730
Глава 20» Визуализация
.usjii
Rio Nanrer untitlediFf j-j luiagi! File Llutput
J JM.43_
i t ,*f,:,r..ve [Тта •P
lleplhof Reid •; .|: 1'|'-^| - F OsithliiField RGB Gunnel [Qdoil;. •:. 1 ': ' ; V ';FSl«i[566CI ~ ":r-j~ i^ ! l - v f , JI^^Hl.;.'!^!'!
jj Cuirtim Txlension JJ llenunbei J lamui „> j Hemkilion f \ Mendei Qjrtiimt
fDCti^fiegicnScaie [шО
;!. j |
Envrionwont Ditplaji Optioni Vietn
zl
Рис. 20.4. Раздел управления глубиной резкости в диалоговом скне Render Global Settings и диалоговое окно Attribute Editor для камеры
Заполнение В результате моделирования должны получаться как можно более «легкие» объекты. То есть желательно обходиться минимальным набором данных, необходимых для описания поверхности. «Тяжелые» модели приводят к замедлению процесса визуализации, поэтому не стоит чрезмерно увлекаться заполнением. Кроме того, не забывайте удалить все элементы, которые не попадут в кадр. Редактирование заполнения модели осуществляется в диалоговом окне Attribute Editor (Редактор атрибутов). Для получения оптимальных результатов выберите в раскрывающихся списках Mode U (По U-координате) и Mode V (По V-координате) в разделе Primary Tessellation Attributes (Основные атрибуты заполнения) вариант Best Guess Based on Screen Size (Предположение на основе размера экрана). В результате заполнение будет осуществляться в зависимости от расстояния до камеры. Для объекта, расположенного на постоянном расстоянии от камеры, имеет смысл задать определенное значение заполнения. Для сложных моделей, например персонажей, требуется указывать точное значение, чтобы избежать разломов. Для некоторых моделей может потребоваться установка флажка Smooth Edges (Сглаживание ребер) в разделе Tessellation (Заполнение) диалогового окна Attribute
Визуализация при помощи стандартного визуализатора
731
Editor (Редактор атрибутов). Однако это нужно и для всех окружающих поверхностей, что может оказаться крайне утомительным. Существует более быстрый способ изменить величину заполнения для набора объектов, а именно вкладка Tessellation (Заполнение) диалогового окна Attribute Spread Sheet (Список атрибутов). Также можно написать MEL-сценарий и сохранить его в виде кнопки на полке для последующего применения. Установка флажка Smooth Edges (Сглаживание ребер) приводит к усложнению геометрии, поэтому применять его нужно крайне аккуратно. Если параметр Smooth Edge Ratio (Соотношение сглаженных ребер) имеет значение 0,999, результат получается очень точным, но при этом требуется большой объем оперативной памяти, и время визуализации значительно возрастает. Все эти настройки могут быть выполнены с помощью MEL-сценария, тогда задать определенные параметры для большого количества объектов можно одним щелчком мыши. Перечислим параметры заполнения, расположенные в разделе Memory and Performance Options (Параметры памяти и производительности) диалогового окна Render Global Settings (Общие параметры визуализации), показанном на рис. 20.5.
Рис. 20.5. Раздел Tessellation диалогового окна Render Global Settings
О Use File Cache (Использовать файловый кэш). Установка этого флажка позволяет визуализатору осуществлять подкачку вне виртуальной памяти системы. Это особенно полезно при трассировке, так как редко требуемые воксели сохраняются на диске, освобождая память для часто требуемых векселей. Если увеличить параметр визуализатора Maximum Memory (Максимальная память), объем кэша на диске уменьшится (для визуализатора с управлением из командной строки используйте флаг -mm). Однако если чтение/запись на диск выполняют одновременно несколько процессов, использование файлового кэша может снизить производительность. О Optimize Instances (Оптимизация копий). Установка этого флажка приводит к тому, что визуализатор начинает применять одинаковое заполнение для оди-
732
Глава 20 • Визуализация
наковых объектов, например примитивов, а также для копий и экземпляров. Это приводит к экономии как времени обработки сцены, так и места на диске. О Reuse Tessellation (Повторное заполнение). Установка этого флажка приводит к сохранению заполнений, созданных для формирующих тени источников света. При наличии в сцене нескольких источников света это может ускорить процесс расчета. Однако при этом требуется дополнительная оперативная память, так что при ее нехватке лучше сбросить этот флажок. О Use Displacement Bounding Box (Использовать габаритный контейнер смещения). Установка этого флажка заставляет визуалиэатор применять настройки габаритного контейнера, заданного для поверхностей со смещением. В обычном состоянии визуализатор должен выполнить заполнение поверхности для вычисления размера габаритного контейнера, что является напрасной тратой времени. Для задания габаритного контейнера смещения можно воспользоваться диалоговым окном Attribute Spread Sheet (Список атрибутов). Впрочем, в разделе Displacement Map (Карта смещения) диалогового окна Attribute Editor (Редактор атрибутов) имеется кнопка Calculate Bounding Box Scale (Вычислить размер габаритного контейнера). Для одновременного вычисления и назначения полученного результата группе выделенных объектов можно прибегнуть к MEL-сценарию с командой: "displacementTcPoly -flndBboxOnly'
Память После завершения приготовлений к визуализации обычно имеет смысл закрыть окно Maya, так как графический интерфейс занимает место в памяти. Если ресурсов оперативной памяти достаточно, можно увеличить доступный для приложений объем памяти. Это можно сделать при вызове визуализатора из командной строки с помощью флага -mm ### команды render (где ### — число мегабайтов, на которое требуется увеличить память). В зависимости от платформы, на которой установлено приложение Maya, синтаксис этой команды может слегка отличаться. Эта операция увеличивает производительность Maya. Если будет выявлено избыточное количество обращений к файлу подкачки, имеет смысл уменьшить это число, заставив визуализатор работать с меньшим объемом оперативной памяти. По умолчанию используется 64 Мбайт. При нехватке памяти можно воспользоваться флагами -tw -th в командной строке, присвоив им значения от 64 до 256. Пример: rentier -th 64 -w 64 myseenfile.ma
Подробно об этих флагах можно узнать, введя в командной строке команду: render -h Полный список флагов находится в разделе Rendering Utilities электронной справочной документации.
Визуализация при помощи стандартного визуализатора
733
Эффективность анимации Для чистоты данных нужно удалять статические каналы анимации, как описан! i в главе 19. Если анимацию можно преобразовать в набор ключевых кадров в диалоговом окне Graph Editor (Редактор анимационных кривых), имеет смысл попробовать это сделать, а потом на всякий случай сохранить как преобразованную, так и не преобразованную анимацию. Это особенно важно при имитации динамики, так как в процессе визуализации в сети, посылая пакеты наружу каждый компьютер будет должен визуализировать всю последовательность вплоть до кадра, с которого начался процесс. А это напрасная трата ресурсов процессора. Однако в процессе преобразования имитации динамики в последовательность ключевых кадров иногда возникает проблема, связанная с ограничением координат Эйлера. То есть при любом преобразовании имитации динамики требуется открывать диалоговое окно Graph Editor (Редактор анимационных кривых) и проверять каналы поворота. При необходимости нужно использовать команду Eular Filter (Фильтр Эйлера) в меню Curves (Кривые) редактора анимационных кривых. Если этого не сделать, то, к примеру, в результате размывания в движении в некоторые моменты объект окажется размытым целиком, так как канал будет интерпретироваться как переход от 180° к -180°. Несмотря на корректный вид движения при воспроизведении анимации, могут возникнуть проблемы с графическим интерфейсом, и время, потраченное на визуализацию, окажется потерянным.
Материалы и карты текстур Материалы являются замечательным инструментом, выявляющим вид визуализации. Однако сложный материал может быть составлен из множества программных узлов визуализации, например фракталов, вложенных друг в друга. В результате можно получить изумительный вид, однако за это придется заплатить более продолжительной визуализаций, так как процессору потребуется время на расчет процедурной текстуры. Несмотря на то что применение базовых процедурных текстур представляет собой эффективный и забавный процесс, по мере роста их сложности визуализация сцены может ужасающе замедлиться. К счастью, в Maya существует замечательная команда Convert to File Texture (Преобразовать в файл текстуры), вызов которой иллюстрирует рис. 20.6. Эта команда преобразует все процедурные текстуры в двухмерную картинку, что позволяет значительно сэкономить время. Щелчок на квадратике, расположенном справа ст этой команды, открывает доступ к ее параметрам. Вы можете указать размер карты текстуры и определить, хотите ли вы зафиксировать в двухмерном изображении текущее освещение сцены. Разумеется, часто природа процедурной карты текстуры преподносит сюрпризы, выходящие за рамки простого увеличения времени визуализации. Если камера, изначально расположенная далеко от объекта, потом показывает этот объект крупным планом, имитировать детали рельефа при помощи карт текстуры не рекомендуется.
734
Глава 20 • Визуализация
Рис. 20.6. Преобразование материала в файл текстуры
Существует баланс между использованием памяти и временем работы процессора. В зависимости от длительности сцены и числа повторного появления объекта в производстве выгода от преобразования текстуры может оказаться пренебрежимо малой. Но, например, при моделировании компьютерных игр преобразования играют весьма существенную роль. Впрочем, там редко применяются процедурные текстуры или большое число источников света. При повторном использовании карты текстуры в другом материале желательно связать со всеми материалами только один узел текстуры. Также имеет смысл применять текстуры в формате IFF, так как этот формат файлов используется в Maya по умолчанию. Пытайтесь по возможности работать с квадратными картами текстуры, так как карты прямоугольной формы могут выглядеть не так эффектно. Кроме того, для более эффективного расходования оперативной памяти желательно брать карты текстуры, размеры которых являются степенями двойки, например 256x256,512x512 или 1024x1 024. В Maya 4,5 был изменен заданный по умолчанию тип фильтра для текстуры File (Файл). В предыдущих версиях использовался фильтр Mipmap (Множественное отображение), теперь вместо него применяется фильтр Quadratic (Квадратичный), обеспечивающий более высокое качество и эффективный способ сглаживания растровой текстуры. К сожалению, он слегка замедляет работу визуализатора.
ВОТ-файлы Файлы с блочным порядком текстуры (Block Oder Texture, ВОТ), или ВОТ-файлы, снижают требования к оперативной памяти при работе с большими картами текстуры, так как в соответствии со структурой объекта текстура разбивается на
Визуализация при помощи стандартного визуалиэатора
735
фрагменты, которые визуализатор может легко поместить в кэш. ВОТ-файлы позволяют обойтись загрузкой только фрагментов, необходимых для визуализации, Соответственно, вместо 40 Мбайт загружается всего несколько сотен килобайтов К сожалению, эти файлы не распознаются внешними программами, поэтому преобразовывать к подобному виду допустимо только те файлы, которые вы не собираетесь редактировать в дальнейшем. При работе с текстурами большого размера можно сэкономить память, преобразовав в ВОТ-файл только рисунок. Для преобразования одной текстуры за один раз воспользуйтесь MEL-командой: makebot -i "1n_image" -о "out_bot_f11e"
Здесь in_image — имя исходной текстуры, a out_bot_file — имя ВОТ-файла. Если же требуется автоматически преобразовать все текстуры в ВОТ-файлы и назначить их соответствующим узлам, применяется команда: maya -optlmlzeRender [options] mayaFile optirnizedMayaFile
Для получения дополнительной информации о данной команде введите в командной строке команду: 'maya -optlmizeRender -help'
СОВЕТ MEL-сценарий под названием Make ВОТ, созданный Юя Сигияма (Yuya Sugiyama), можно загрузить с сайта http://www.highend3d.com/maya/mel/. Для преобразования текстур а ВОТ-файлы он предоставляет графический интерфейс.
Тени Старайтесь не делать тени для каждого источника света. Кроме того, по возможности применяйте карты теней вместо теней, полученных трассировкой лучей. Для купола источников света в предыдущей главе мы использовали довольно много карт теней, и они были достаточно экономичны благодаря невысокому разрешению. Если бы осветительная система состояла из источников света с тенями, получаемыми трассировкой лучей, или же источников света типа Area (Прямоугольный), визуализация заняла бы намного больше времени, Выключение механизмов формирования теней для определенных поверхностей положительно сказывается на времени визуализации. Источники света, занимающие немного места в пространстве, имеют более плотные тени и требуют меньше памяти. В этом плане весьма эффективны прожекторы, так как позволяют точно контролировать их место в пространстве путем изменения угла освещения. Повторное использование карт теней также снижает время визуализации и в некоторой степени освобождает оперативную память. Впрочем, на эту роль годятся только неподвижные тени, а также тени, через которые не пересекают другие объекты сцены. Любые статичные тень и поверхность снижают время визуализации после преобразования, в процессе которого комбинированный эффект от тени и цвета по-
736
Глава 20 • Визуализация
верхности превращается в единый файл текстуры. Для этого нужно установить флажок Bake Shading Group Lighting (Зафиксировать освещенность) в диалоговом окне Convert to File Texture Options (Параметры преобразования в файл текстуры), вызываемом командой меню Edit (Правка) диалогового окна Hypershade (Редактор узлов), Можно также установить флажок Bake Shadows (Преобразовать тени). Однако следует иметь в виду, что эта функция работает только с картами теней,
Рис. 20.7. Выключение ненужных карг глубины для точечного источника света
Визуализация при помощи стандартного визуализатора
737
При наличии в сцене источника света типа Point (Точечный) можно облегчить сцену, оставив функцию формирования теней только для одного направления распространения лучей. Для этого нужно выделить источник света и в разделе Depth Map Shadow Attributes (Параметры карты глубины тени) диалогового окна Attribute Editor (Редактор атрибутов) снять флажки для всех направлений, кроме одного, как показано на рис, 20.7.
Диагностика визуализации Полезной командой стандартного визуализатора Maya является команда Render Diagnostics (Диагностика визуализации). Результат ее применения показан на рис. 20.8.
,:,
, h
. . .
-. — ' Ш Л шаый •
. ft! ia :.-•" •
.. -Г •<.!..:.t!,r .' - ,
i -j :.-•-•
Ш
.1
<,
'Л';-
S--
1-
'-,! "-. >-t J'- : ;;\, '-•.{,.. tV'i> -л'Л • ••• л; . I' • jljpe '•>- ;.: ... Li-i'Si -.-;• iibi-0-..vi a- ,-,',
• .
*'.J!- i
»i/ :• -"'••
a •• r-., .- -•„ ill iii .)-•. i .) - :.••• /•
у I ) ,'f.
.- • 1 1 •,•.",•
i-1. -
: i «;:..-,«. .Hu-' :<•,,.;,
:
on-
.../ :••! !•. ',i;-i.ii-. liS-.u ш ri' . .„ Г ,-.>,;,1
i;,
Щ ,
•ll-.s--V.Li J
• .-..i =-,
- y... , " > i ,'. .... . . . .
* -, .
Шшй
. ; «'. i, J .-ula.
-,. • ,-,
• .... ; .'
1» ; ., .
Рис. 20,8. Результат применения команда Render Diagnostics появляется в диалоговом окне Script Editor
После выполнения .этой команды сцена проверяется по длинному списку критериев и создается отчет. Большинство предостережений обычно касается трассировки, теней и параметров, которым присвоено слишком высокое значение. Также проверяется корректность соединения групп теней и анализируется состояние ка-
Глава 20• Визуализация
738
мер и параметры диалогового окна Render Global Settings (Общие парамегры визуализации). Диагностика визуализации является крайне полезной функцией, но следует помнить, что она не в состоянии решить все проблемы. Тем более что многие из них желательно решить до перехода к визуализации. При создании моделей важно следить за двусторонними гранями и направлением их нормалей. Если не позаботиться об этом сразу, проблема проявится на стадии визуализации. Впрочем, в этом случае разрешить вопрос можно с помощью вкладки Render (Визуализация) диалогового окна Attribute Spread Sheet (Список атрибутов). Здесь можно указать, следует ли визуализировать поверхность как двустороннюю, какая сторона должна быть направлена наружу и прочее в этом роде.
Визуализация из командной строки Помимо команды Batch Render (Пакетная визуализация) существует еще ряд средств, позволяющих инициировать визуализацию. Например, можно запустить файл render.exe из командной строки (именно так происходит в Windows, но в других системах операция может быть другой). Запуск команды render из командной строки, как показано на рис. 20.9, позволяет настроить ряд параметров, недоступных в диалоговом окне Render Global Settings (Общие параметры визуглизации). Кроме того, появляется возможность быстро изменить параметры, не открывая сцену. Для получения списка параметров введите в приглашении командно]! строки команду: render.exe -h
Microsoft Windows gaaa LUei'slon i.,00.2
tC> CoyycigJit 19fib-2d80 Ricruaoft C«ri>.
C:\>i-entiBi-.exc' ~s 1 --e 18B nj/acene.ftb
rendemiyfiles-bat - (Sotepad Edit
Format* Help
render.exe
-s 1
-e 100 myscene.mb
render.exe -s 101 -e 200 myscene.mb render.exe
-s 201 -e 300 myscene.mb
render.exe -s 301 -e 400 myscene.mtJ
Рис. 20.9, Выполнение визуализации из командной строки в Windows 2000 и ВАТ-файл
В Windows существует возможность создать командный файл из последовательности нескольких команд визуализации, которые будут выполняться одна за другой. Иногда имеет смысл разбить длинную последовательность команд на на-
Визуализация при помощи стандартного визуализатора
739
бор пакетов. В некоторых случаях для очистки оперативной памяти требуется перезагрузить визуализатор. Командный файл (или ВАТ-фаЙл, называемый так из-за расширения .bat) представляет собой текстовый файл, строки которого содержат набор команд. В системах семейства UNIX обычно используется сценари и для командного интерпретатора, в первой строке которого требуется указать тип интерпретатора и его местоположение, например: #! /usr/bin/ksh
Чтобы сделать файл исполняемым, в операционной системе Windows достаточно присвоить ему расширение .bat. Запуск на выполнение осуществляется двойным щелчком на названии этого файла. В UNIX для этой цели применяется команда chmod. В операционной системе Windows также допустимо щелкнуть правой кнопкой мыши на имени файла сцены и запустить визуализатор, но визуализация будет происходить с параметрами, заданными в диалоговом окне Render Global Settings (Общие параметры визуализации) на момент сохранения файла. СОВЕТ Создание командных сценариев для визуализатора может показаться сложной процедурой, но со временем вы убедитесь, что это не так. MEL-сценарий, созданный Юя Сугияма (Yuya Sugiyama), создает в Maya ВАТ-файлы для Windows с превосходным графическим интерфейсом и сохраняет исполняемый ВАТ-файл в папке проекта. Сценарий можно найти по адресу http://www.highend3d.com/ maya/mel/.
Предварительный просмотр результатов визуализации В этом разделе вы найдете советы по ускоренной визуализации для предварительного просмотра сцены. Для предварительного просмотра визуализация осуществляется с меньшим разрешением или же визуализируется небольшой участок сцены, над которым в данный момент ведется работа. В результате меньшего разрешения некоторые эффекты могут выглядеть некорректно, но это вполне допустимо при черновой настройке. Заданные по умолчанию параметры стандартного визуализатора Maya подходят для большинства случаев. Для ускорения процесса имеет смысл визуализировать только выделенные объекты. Этого можно добиться несколькими способами, Например, можно выбрать в раскрывающемся списке Renderable Objects (Объекты, подлежащие визуализации), расположенном в разделе Image File Output (Файл с выходным изображением) диалогового окна Render Global Settings (Общие параметры визуализации) вариант Render Active (Визуализировать только активные объекты). В результате будут визуализированы только выделенные объекты. Имеющиеся в сцене источники света задействуются автоматически, поэтому их выделять не нужно. Хотя для их фокусировки на определенных областях сцены лучше применять слои. Так как визуализатор IPR (Интерактивная фотореалистичная визуализация) не умеет осуществлять трассировку лучей, вам может потребоваться только стандартная визуализация.
Глава 20• Визуализация
740
СОВЕТ На сайте http://www.highend3d.com/maya/mel/ можно найти замечатегьный MEL-сченарий, созданный Мэттом Гидни (Matt Gidney) и называемый Hide Til Render Partition Tools. Он скрывает объекты, которые не нужно видеть до окончательной визуализации.
Отключите все источники света, не влияющие на рассматриваемую область. Этот процесс также можно упростить, поместив источники света в слои или же создав из них именованные выделенные наборы. Отключите формирование теней с помощью карт глубины, сбросив флажок Enable Depth Maps (Включить карты глубины) в диалоговом окне Render Global Settings (Общие параметры визуализации), как показано на рис. 20.10. Чтобы выключить формирование теней путем трассировки лучей, установите на нулевую отметку ползунок Shadows (Тени) в разделе Raytracing Quality (Качество трассировки) диалогового окна Render Global Settings (Общие параметры визуализации).
: . -\ .'.', .>': . .„I. . ' : 1 'J iiti'l П„1шл.-
• ••-:- ' , > , ..
"1
J M'l'-,-.ft;)ir;
; >"!(••.."•-, ilj.'w.
Рис. 20.10. Выключение теней, формируемых на основе <арты глубины, в диалоговом окне Render Global Settings
При работе с картами глубины имеет смысл выбрать в раскрывающемся списке Disk Based Dmaps (Карты глубины, хранящиеся на диске), расположенном в разделе Depth Map Shadow Attributes (Параметры карты глубины тени) диалогового окна Attribute Editor (Редактор атрибутов), вариант Reuse Existing Dmap(s) (Повторно использовать
Визуализация при помощи стандартного визуализатора
741
существующие карты глубины). В результате после первой визуализации карты теней будут использоваться снова и снова, пока вы не измените настройку, Другим очевидным способом увеличения скорости визуализации для предварительного просмотра является снижение качества сглаживания или полное его отключение. Например, можно выбрать в раскрывающемся списке Quality (Качество) раздела Antialiasing Quality (Качество сглаживания) вариант Preview Quality (Эскизное сглаживание). Заодно отключите трассировку или уменьшите значения па раметров в разделе Raytracing Quality (Качество трассировки).
:ОВЕТ
Еще один полезный MEL-сценарий, расположенный на сайте http://www.highend3d.com/maya/mel/, написан Брайаном Эвертом (Bryan Ewert). Этот сценарий называется enableMaterials и предназначен для временного разрыва связи между поверхностями объектов и назначенными им материалами. В результате объекты сцены после визуализации будут иметь нейтральный серый цвет.
Так как предварительная визуализация осуществляется много раз, уследить зи ее результатами достаточно сложно. Поэтому имеет смысл ставить в нижней области кадра «клеймо» с названием сцены и временем визуализации. Это можно осуществить различными способами. Для примечаний вполне сгодится простой текстовый объект, которому назначен белый материал. Затем такой объект нужни сгруппировать с камерой. Чтобы получить временной код, можно визуализировать счетную последовательность, например, в приложении Adobe After Effects;, и воспользоваться плоскостями камеры.
Контрольная проверка Ниже представлен список параметров, на которые нужно обратить внимание перед визуализацией. Некоторые из них совершенно очевидны, но лучше подстраховаться и приобрести привычку проверять все и только потом сохранять файл, о Проверьте параметры в диалоговом окне Render Global Settings (Общие параметры визуализации). В их число входят: File Name Prefix (Префикс имени файла), Frame/ Animation Ext (Расширение кадра/анимации), Start Frame (Номер начального кадра), End Frame (Номер конечного кадра). By Frame (По кадрам), Frame Padding (Количество цифр в номере кадра), Image Format (Формат изображения), Renderable Objects (Объекты, подлежащие визуализации), Camera (Камера), Channels (Каналы), Resolution (Разрешение), Field Options (Параметры поля), Antialiasing Quality (Качество сглаживания), Raytracing Quality (Качество трассировки), Render Options (Параметры визуализации) и Render Layer/Pass Control (Визуализация слоев/Управление проходами),
О Выделите все объекты сцены и проверьте их на вкладках Render (Визуализация) и Tessellation (Заполнение) диалогового окна Attribute Spread Sheet (Список атрибутов). О Помещая сцены на сервер для визуализации, убедитесь, что все маршруты доступа к файлам являются локальными. Кроме того, нужно проверить маршруты доступа к присоединенным файлам, Перед началом длинной визуализации имеет смысл перезагрузить компьютер и проверить наличие свободного места на диске.
742
Глава 20 • Визуализация
СОВЕТ
Загрузите с сайта http://www.highend3d.com/maya/mel/ сценарий Conform textures, написанный Робином Эшером (Robin Escher). Он помогает преобразовать маршруты доступа к файлам с картами текстур из абсолютных в относительные, что необходимо, если вы решите визуализировать сцену на компьютере с другой операционной системой или с другой версией Windows.
Предварительные тесты В процессе подготовки к визуализации по ряду причин требуется тестирование файлов со сценой. Во-первых, это помогает убедиться, что маршруты доступа к внешним файлам, например к текстурам или к опорным изображениям, корректны. Даже если уже 3 часа ночи и вы в отчаянии хотите уйти домой, нужно убедиться, что результат визуализации идет должным образом и процесс не остановится после первого кадра. Если вы собираетесь работать в этой области, нужно научиться выполнять тесты в режиме удаленного доступа. Может быть, имеет смысл сделать так, чтобы программное обеспечение посылало вам сообщения по электронной почте. В этом случае, где бы вы ни находились, вы будете осведомлены о ходе визуализации. Однако существуют проблемы, которые невозможно решить в режиме удаленного доступа. Это так же сложно, как объяснять по телефону порядок действий человеку, который никогда не работал с командной строкой в UNIX. Кроме того, тесты позволяют на основе оценки времени визуализации нескольких кадров приблизительно рассчитать, сколько времени займет весь процесс. Так как время визуализации каждого кадра может быть разным, нужно визуализировать несколько кадров и усреднить полученный результат. Для длинных последовательностей необходимо сделать как минимум три кадра. Формула для оценки времени визуализации выглядит следующим образом: (Время кадра 1 + Время кадра 2 + Время кадра 3)/Число тестируемых кадров (в нашем случае 3) х Число кадров в анимации. Затем полученный результат делится на количество компьютеров, которые будут использоваться для визуализации. То есть, если X, Y и Z — это тестовые кадры, Т — число тестовых кадров, R — количество компьютеров, на которых будет происходить визуализация, a S — общее число кадров, уравнение будет выглядеть следующим образом: Общее время визуализации = (((X + V + Z) / Т) х S) / R. Эта формула несовершенна, но дает вполне разумные результаты. Также имеет смысл фиксировать среднее время визуализации различных сцен и их сложность. Подобная статистика поможет в оценке будущих проектов,
Визуализатор Mental Ray Большинство вопросов относительно эффективности работы со стандартным визуализатором Maya имеют отношение и к визуализатору Mental Ray или к любому другому, которым вы решите воспользоваться. Однако Mental Ray позволяет
Визуализэтор Mental Ray
743
получить ряд эффектов, недостижимых с помощью обычного визуализатора, например перенос излучения или конечный сбор. Впрочем, несмотря на потрясающее впечатление от этих эффектов, их визуализация занимает много времени. Документация по установке визуализатора Mental Ray вполне исчерпывающа, хотя и не похожа на учебное пособие. Соответственно, в этом разделе мы поговорим об основах работы с этим визуализатором.
Известные недостатки После появления визуализатора Mental Ray он много раз совершенствовался, но до сих пор остается много вопросов по его применению. Начиная с первой вереи и, были добавлены следующие функции: О объемные эффекты Light Fog (Световой туман), Environment Fog (Туман), Volume Fog (Объемный туман); О материалы Noise (Шум) и Volume Noise (Объемный шум); О опорные изображения; О материал Ocean (Океан); О материал Ramp (Градиент); О объемное освещение; О дублирование частиц; О поддержка пользовательских материалов. О дальнейших перспективах развития этого приложения можно узнать в соответствующем разделе часто задаваемых вопросов (FAQ) сайта http://www.aliaswavefront.com. Там же находится документация на текущую версию визуализатора Mental Ray с инструкцией по его установке и способам применения. На момент написания данной книги визуализатор Mental Ray не поддерживал следующие функции: О источники света типа Area (Прямоугольный); О эффекты рисования и свечения, оптические эффекты, двухмерное размывание в движении, визуализацию меха; О аппаратную визуализацию систем частиц; О интерактивную фотореалистичную визуализацию; О послойную визуализацию; О файлы с блочным порядком текстуры (ВОТ-файл). В этом разделе мы поговорим о путях обхода некоторых из перечисленных ограничений.
Прямоугольные источники света Визуализатор Mental Ray для Maya не распознает источники света типа Area (Прямоугольный). Однако существует возможность получить такой источник света из обычно точечного осветителя или прожектора. Достаточно в диалоговом окне Attribute Editor (Редактор атрибутов) раскрыть раздел Mental Ray, затем подраздел Area Light (Прямоугольный источник света) и установить одноименный флажок. Это приведет к появлению значка прямоугольного источника света в месте нахождения прожектора.
Глава 20* Визуализация
744
ВОТ-файлы Визуалиэатор Mental Ray не поддерживает ВОТ-файлы, Hd он умеет работать с текстурами, отображенными в памяти. Утилита imf_copy, устанавливаемая вместе с данным визуализатором, преобразует файл изображения в файл с расширением .тар. Имейте в виду, что попытка открытия подобных изображений в Maya закончится появлением сообщения об ошибке, но это не помещает использовать их в Mental Ray. Для размещения на поверхности объекта можно взять стандартные карты текстур, а перед прочтением создать текстуры, отображенные в памяти. Для этого используется команда: imf_copy -p Inlmage outimage
Здесь inimage — название исходного файла с изображением, a outimage — название получаемого в результате файла.
Рис. 20.11. Вид вкладки Mentaf Ray диалогового окна Creste Render Node
745
Визуализатор Mental Ray
Общие параметры Модуль Mental Ray задействует основные параметры Maya, что облегчает процесс переключения между Mental Ray и Maya. Большинство узлов материалов преобразованы для работы с Mental Ray. Впрочем, чтобы воспользоваться специальными функциями этого визуализатора, потребуется более детальное исследование. Источники света, материалы и общие параметры визуализации в Mental Ray имеют свои копии в стандартном визуализаторе Maya. Для знакомства с дополнительными узлами выберите в меню Create (Создать) диалогового окна Hypershade (Редактор узлов) команду Create Render Node (Создать узел визуализации). Появится длинный список дополнительных узлов, показанный на рис. 20.11. Раскрыв подменю Window > Rendering Editors > Mental Rav (Окно > Редакторы визуализации > Mental Ray), вы получите доступ к двум командам: Approximation Editor (Редактор приближений) и Custom Text Editor (Пользовательский текстовый редактор), как показано на рис. 20.12.
^.ЖЧ».!, II
м . ...~..
""
1
• . . . • . _"J;
/[Fio-J; ' -, ,\'и - ituflcfli] si- , 1;j'
..
' -'^- "* ,
-
шш9ш|УУ|й^Уй1у ,' .-?:
..;
.-.
"
' . --° ' .' '
•
_
- ''
i
IfЛ
н
i!
r
I
K,..™™M™*jife.^ .. |. .^ |'^ .1 4 |Г|^
-
tNiwf;;* P n»yw'.!•!-*"[* лr«»e
Рис, 20.12. Диалоговые окна Approximation Editor и Custom Text Editor для визуализатора Mental Ray
Диалоговое окно Approximation Editor (Редактор приближений) предназначено для заполнения поверхностей, Оно является эквивалентом параметров заполнения,
746
Глава 20- Визуализация
используемых в Maya по умолчанию. Диалоговое окно Custom Text Editor (Пользовательский текстовый редактор) применяется для создания специальных узлов, хранящих, например, информацию о пользовательских материалах, которые воспринимаются только визуализатором Mental Ray. Воспользоваться визуализатором Mental Ray можно через диалоговое окно Render View (Визуализатор) или Render Global Settings (Общие параметры визуализации), как показано на рис. 20.13.
Рис. 20.13. Вкладка Mental Ray в диалоговом окне Render Global Settings
Для каждого источника света в визуализаторе Mental Ray существует свой раздел. Прожектора и точечные источники света имеют ряд параметров, в то время как у прямоугольного источника света они отсутствуют, так как он не поддерживается напрямую. Однако любой из двух вышеупомянутых осветителей можно превратить в источник света типа Area (Прямоугольный), как показано на рис. 20.14. Каждому материалу также посвящен собственный раздел параметров визуализатора Mental Ray. Именно эти параметры нужно настраивать, чтобы задействовать все возможности визуализатора. Однако для настройки параметров трассировки потребуется прибегнуть к кнопке Take Settings From Maya (Скопировать настройки из Maya), показанной на рис. 20.15.
Визуализатор Mental Ray
747
ТТЖ fib* jo™
ЕВ. ]
*
ром
Juno)
('.vol.
>. ! •.,:<
,11-U, -Jjr.i
IOTOMID ~
'
Г -.!.*!« (тост». i-Kiti
•"
.-
Г_
.
!
',1 '--»<>-' *•»
I
Рис. 20.14. Раздел визуализатора Mental Ray, посвященный источнику света типа Spotlight
Чтобы приступить к визуализации с помощью Mental Ray, выберите в раскрывающемся списке Render Using (Визуализировать с применением), расположенном в верхней части диалогового окна Render Global Settings (Общие параметры визуализации), вариант Mental Ray. Как показано на рис, 20.16, при этом открывается доступ к большинству стандартных параметров диалогового окна Render Global Settings (Общие параметры визуализации). Для начала вполне подойдут заданные по умолчанию значения. Сфокусировать свое внимание нужно на параметрах качества, в частности выбрать в раскрывающемся списке Quality (Качество) вариант Production (Качество фильма). В результате вы получите доступ к настройке точных параметров визуализации и основных эффектов, например трассировки лучей, теней, размывания в движении, каустиков, глобальной освещенности и методу конечного сбора.
Глава 20 * Визуализация
748
•
ш HHvte',^:
1 1
ftTjHfe "
jura
.Hi
fn±t-ni^r-rJ±:-^
: ^ii^—^u—~ й**,&-«-^4
:«-'-г.у ™
1Л*|тс<;}1Ш:0
Ш
*t-:.tt- ('-•- • "
-.
-;
Рис. 20.15. Раздел визуалиэатора Mental R«iy, посвященный раскраске по Блину
Трассировка лучей Модуль Mental Ray может осуществлять выборочную трассировку объектов сцены, так как он является гибридным визуализатором и работает очень быстро. Настройки в данном случае такие же, что и в стандартном сл;лте.
Тени Элементы управления в разделе Shadows (Тени) предоставляют возможность выбора теней, визуализируемых с помощью модули Mental Ray. Если активизиро-
Визуализатор Mental Ray
749
вать эффект размывания в движении в расположенном ниже разделе, станет доступным флажок Motion Blur Shadow Maps (Карты теней для размывания в движении).
Рис. 20.16. Основные параметры визуализатора Mental Ray
Размывание в движении И снова ряд элементов управления выглядят знакомо. В данном случае можно включить два варианта размывания в движении Linear (Линейное) и Exact (Точное), В первом случае размывание происходит в направлении перемещения объекта, в то время как во втором учитывается положение всех движущихся вершин, то есть принимается во внимание деформация.
Каустические эффекты/Глобальная освещенность Для использования каустических эффектов, глобальной освещенности и метода конечного сбора нужно включить трассировку в разделе General (Общие параметры) диалогового окна Render Global Settings (Общие параметры визуализации). Чтобы активизировать каустические эффекты в модуле Mental Ray, нужно установить флажок Caustics (Каустические эффекты) в разделе Caustics and Global Illumination
750
Глава 20* Визуализация
(Каустические эффекты и глобальное освещение). Однако чтобы воспользоваться всеми преимуществами этой функции, нужно получить доступ, по меньшей мере, к одному источнику света, материалу или объекту, как показано на рис. 20.17.
Рис. 20.17. Настройки каустических эффектов
Для создания эффекта потребуется прозрачная поверхность и источник света, испускающий каустические фотоны. Обратите внимание, что указание параметров материала в модуле Mental Ray не влияет на вид образца материала. Требуется включить поверхность, которая будет испускать или получать каустические фотоны. Это можно сделать несколькими способами. Во-первых, для каждого из объектов можно открыть визуализатор Mental Ray и задать соответствующие атрибуты в разделе, посвященном каустикам, как показано на рис. 20.18. Чтобы включить данный эффект для всех объектов, воспользуйтесь раскрывающимися списками Caustics Generating (Создание каустических эффектов) и Caustics Receiving (Получение каустических эффектов), расположенными в подразделе Caustics/Global Illumination (Каустические эффекты/Глобальная освещенность) раздела Overrides (Замещение) диалогового окна Render Global Settings (Общие параметры визуализации). Также можно вызвать диалоговое окно Attribute Spread Sheet (Список атрибутов) и на вкладке АН (Все) выделить параметры в разделе MI Caustics. Для настройки каустических эффектов источников света используются параметры раздела Caustics and Global Illumination (Каустические эффекты и глобальная освещенность) в визуализаторе Mental Ray. Если каустический эффект состоит из отдельных пятен, нужно увеличить число испускаемых фотонов. Откройте диалоговое окно Attribute Editor (Редактор атрибутов) для выделенного источника света и в разделе Caustiirs and Global Illumination (Каустические эффекты и глобальная освещенность) увеличьте значение параметра Caustic Photons (Фотоны каустики). Однако имейте в виду, что время визуализации
Визуализатор Mental Ray
751
прямо пропорционального величине этого параметра. Для начала вполне достаточно значения 10 000. Средняя величина равняется 100 000, а значение 500 000 дает превосходный результат, однако визуализация при этом значительно замедляется. Чтобы увеличить или уменьшить яркость фотонов, используйте параметр Energy (Энергия). Изменение его значения никак не сказывается на времени визуализации.
jHyttiinl
| i | i * i [оси
Cawsm
:|занб
Г|1е111
^ ' --У i
"*^ийю™^рша * • ID ODD VJ'.ViMl Gelhw "? : : : ...... : ; ;j;j Sanding Ruafiljr л
:
_*| Diaqnustml
М ride H^«.-it
oft
,.™
S4 Vi^iii" 2
:2
Рис. 20.18. Методы включения функции создания или получения каустических эффектов для объектов сцены
Для повышения качества нужно уменьшить значение параметра Caustic Accuracy (Точность каустики), по умолчанию равное 64. Если же требуется получить более мягкие пятна, нужно либо увеличить данный параметр, либо ввести большее значение в поле Caustic Radius (Радиус пятен). После завершения настройки эффекта снимите флажок Photon Map Rebuild (Восстановление карты фотонов), чтобы поз во-
752
Глава 20 • Визуализация
лить визуализатору использовать ранее созданные карты фотонов и тем самым ускорить процесс визуализации. Это замечательно подходит для обзорных сцен, в которых единственным движущимся объектом является камера. На прилагаемом к книге компакт-диске находится фг.йл MR_Caustics.mb, предназначенный для экспериментов с каустическими эффектами. На небольшой сцене, записанной в этом файле, имеется модель стеклянного пожарного гидранта. Откройте файл MR_Caustics.mb и поэкспериментируйте со значениями упоминавшихся выше параметров. На рис. 20.19 показан результа'1 трех тестовых визуализаций, для которых количество фотонов, испускаемых точечным источником света, равно 1000,100 000 и 500 000 соответственно. Между первым и последующими двумя изображениями видна значительная разница, в то время как второе и третье изображения практически одинаковы и различаются только продолжительностью визуализации. Более низкие значения приводят к появлению эффекта зеркального шара, который можно увидеть на дискотеках, кроме того, эти значения облегчают предварительный просмотр каустических эффектов. Чтобы инициировать расчет глобальной освещенности в модуле Mental Ray, установите флажок Global Illumination (Глобальная освещенность) в разделе Caustics and Global Illumination (Каустические эффекты и глобальная освещенность). Настройка при этом аналогична настройке каустических эффектов. Нужно выбрать подходящие варианты в раскрывающихся списках Global Ilium Generating (Создание глобальной освещенности) и Global Ilium Receiving (Воздействие глобальной освещенности), расположенных в разделе Overrides (Замещение) диалогового окна Render Global Settings (Общие параметры визуализации). Вы можете использовать источник света, но при глобальной освещенности он необходим только в качестве источника фотонов. Для устранения пятен нужно уменьшить параметр Global Ilium Accuracy (Точность глобальной освещенности) в разделе Caustics/Global Illumination (Каустические эффекты/Глобальная освещенность). Создание дополнительных фотонов приводит к увеличению времени визуализации. При чересчур «пятнистой» освещенности визуализация движущихся объектов может сопровождаться артефактами. Для устранения пятнистости нужно уменьшить число фотонов. Это достигается увеличением параметра Global Ilium Accuracy (Точность глобальной освещенности). Чтобы смягчить результат действия каждого из фотонов, увеличьте параметры Max Photon Depth (Максимальная глубина фотона) и Global Ilium Radius (Радиус глобальной освещенности). На компакт-диске находится сцена с пожарным гидрантом, предназначенная для экспериментов с глобальной освещенностью. Загрузите файл MR_GI.mb и поэкспериментируйте с вышеупомянутыми параметрами. На рис. 20.20 показаны результаты тестовых визуализаций для точечного источника света, излучающего 1000, 100 000 и 500 000 фотонов соответственно. Первое изображение значительно отличается от двух последующих, в то время как второе я третье изображения отличаются только продолжительностью визуализации. Для каждого из случаев были произведены и другие настройки. Первое изображение было получено при значении параметра Global Ilium Accuracy (Точность глобальной освещенности) равном 64. Параметр Global Ilium Radius (Радиус глобальной освещенности) имел значение 0, а параметр Max Photon Depth (Максимальная глубина фотона) — 10. Для второго изображения эти параметры имели значения 512,40 и 40, а для третьего — 1024, 20 и 20.
Визуализатор Mental Ray
Рис. 20.19. Результаты присвоения параметру Caustic Photons значений 1000, 100 000 и 500 000
753
754
Глава 20• Визуализация
Рис. 20.20. Глобальная освещенноаь при количестве излучаемых фотонов 1000, 100 000 и 500 ОСО
Визуализатор Mental Ray
755
Метод конечного сбора В методе конечного сбора для формирования лучей, испускаемых в случайном направлении при падении исходного луча на поверхность, используется трассировщик. Эти вторичные лучи заимствуют цвет поверхности, который применяется для вычисления итогового освещения. Таким образом, поверхности объектов превращаются в источники света. Для активизации метода нужно установить флажок Final Gather (Конечный сбор) в одноименном разделе диалогового окна Render Global Settings (Общие параметры визуализации). Кроме того, в сцене должен присутствовать хотя бы один источник света, параметр Intensity (Интенсивность) которого равен 0. Также нужно создать ряд поверхностей, предназначенных для рассеивания света. Назначив любому объекту материал Surface Shader (Раскраска поверхности), вы превратите этот объект в яркий источник света. Другие варианты раскраски, например Blinn (По Блину), для имитации эффекта отраженного света требуют задания параметра Irradiance (Освещенность) в разделе Mental Ray диалогового окна Attribute Editor (Редактор атрибутов). Три основных параметра, которые нужно задать, находятся в разделе Final Gather (Конечный сбор) диалогового окна Render Global Settings (Общие параметры визуализации): О Final Gather Rays (Лучи конечного сбора); о Min Radius (Минимальный радиус);
о Max Radius (Максимальный радиус).
Первый параметр задает число лучей, используемых для вычисления освещенности. Присвоение ему высоких значений имеет смысл только для очень больших сцен. Величина остальных параметров выбирается в зависимости от размера сцены. Единицы измерения этих параметров принадлежат к глобальной системе координат, поэтому для маленькой сцены потребуется небольшой диапазон. Чем больше сцена, тем выше значение параметра Max Radius (Максимальный радиус). Соответственно, чем более детализированы объекты сцены, тем меньше значение параметра Min Radius (Минимальный радиус) и тем выше продолжительность визуализации. Как и в предыдущих случаях, вы можете сохранить карту конечного сбора, сбросив флажок Final Gather Rebuild (Восстановление конечного сбора). Это особенно выгодно для архитектурных презентаций без анимированных объектов. Загрузите файл MR_FG.mb с прилагаемого к книге компакт-диска Результат визуализации этой сцены при значении параметра Final Gather Rays (Лучи конечного сбора) равном 1, 100 и 1000 соответственно показан на рис. 20.21. Режиссер нашего проекта «Место для парковки» решил использовать стандартный визуализатор. При этом на стадии монтажа он хотел добиться максимального контроля. В следующем разделе мы поговорим о многопроходной визуализации.
756
Глава 20• Визуализация
Рис. 20.21. Результат визуализации сцены при значении параметра Final Gather Rays равном 1, 100 и 1000
757
Многопроходная визуализация
Многопроходная визуализация Существует несколько причин прибегнуть к многопроходной визуализации, первой из которых является возможность дополнительного управления каждым из элементов. Это особенно важно в случае, когда элементы компьютерной графики требуется встроить в обычный фильм. Многопроходная визуализация применяется также для модификации определенных элементов. Создание отдельных слоев избавляет вас от необходимости каждый раз заново визуализировать всю сцену. Кроме того, существуют эффекты, которые могут быть выполнены только в процессе последующей обработки сцены.
Послойная визуализация Как следует из названия метода, вынесенного в заголовок раздела, за один раз визуализируются только элементы, расположенные в определенном слое. Если включена визуализация нескольких слоев сразу, каждый из них будет сохранен в отдельном файле. При этом визуализатор может создать отдельную папку для каждой последовательности кадров. Впрочем, эта функция полезна и при обычной визуализации. Установка флажка Enable Render Layers (Активизировать слои визуализации) в разделе Render Layer/Pass Control (Визуализация слоев/Управление проходами) диалогового окна Render Global Settings (Общие параметры визуализации), как показано на рис. 20.22, приводит к появлению списка слоев визуализации.
>J.
jReriifer"Щймм.'
IPR Option.
..
Leyw/F'oii Coriliol W
f" -
-
-
P.DulpWIuSubaii . Sesuty
Рис. 20.22. Параметры раздела Render Layer/Pass Control
758
Глава 20 • Визуализация
Слой defaultRendeitayer существует по умолчанию и содержит все объекты сцены, не назначенные другим слоям. Если установить флажок Output to Subdirectories (Сохранять в папках), результат каждого из проходов будет помещен в свою собственную папку. Таким образом, автоматическое создание папок для результата визуализации выполняется с помощью всего двух щелчков мыши в диалоговом окне Render Global Settings (Общие параметры визуализации). Эта функция особенно полезна при работе над проектами, так как при повторной визуализации результата изменений новые файлы просто заменят старые. Затем достаточно перезагрузить все части проекта, и исправленные файлы автоматически встанут на свои места. Если потребуется получить резервные копии старых версий файлов, достаточно продублировать структуру папок, добавив к старым копиям файлов расширение .bak. СОВЕТ Вам потребуется группа параметров Color/Compositing (Цвет/Монтаж), расположенная в разделе Render Options (Параметры визуализации) диалогового окна Render Global Settings (Общие параметры визуализации). Существует два типа альфа-канала — прямой и предумноженный. По умолчанию в Maya создаются преду множенные альфа-каналы. Если, к примеру, фон сцены в Maya имеет черный цвет, а требуется вставить изображение объекта на белом фоне, в результате монтажа вокруг объекта появится слабый черный ореол, так как в этом режиме цвет фона смешивается с цветом сглаженной границы. Установка флажка Premultiply (Предучножение) при условии, что параметр Premultiply Threshold (Порог предумножения) равен 0, создает прямой альфа-канал вместо сглаживания краев канала цвета изображения на границе с альфа -каналом. В этом случае смешение цветов будет корректным. Однако при просмотре сцены с помощью проигрывателя fcheck иногда появляются зубчатые края, как при выключенном сглаживании. Впрочем, это че повод для беспокойства.
Имейте в виду, что при наличии теней от объектов, расположенных в двух разных слоях, трассированные тени объектов, не принадлежащих визуализируемому в данный момент слою, игнорируются. При этом карты глубины дают замечательный результат, как и получаемые методом трассировки отражения объектов из других слоев. Если требуется получить трассированные тени от объектов, не принадлежащих текущему слою, в слое нужно создать дубликат этого объекта. Затем этот объект нужно сделать невидимым, сняв флажок Priman/ Visibility (Непосредственная видимость) в разделе Render Stats (Условия визуализации) диалогового окна Attribute Editor (Редактор атрибутов). Другой причиной использовать послойной визуализации с последующим монтажом может стать размер сцены. Некоторые визуализгторы эффективней других справляются со сценами большого размера, но даже у них может не хватить памяти. Статичные элементы, особенно целый неподвижный фон, не имеет смысла визуализировать вместе со всей сценой. Анимацию с тысячами персонажей также желательно разбить на небольшие фрагменты, чтобы сэкономить память и облегчить процесс управления проектом.
Глобальные проходы Установка флажка Enable Global Passes (Включение глобальных проходов) приводит к появлению списка управления проходами, в котором можно указать, какой из элементов вы хотите визуализировать. Список состоит из пяти пунктов: Beauty
Многопроходная визуализация
759
(Основной), Color (Канал цвета), Specular (Канал зеркальных бликов), Diffuse (Канаг диффузного рассеяния) и Shadow (Канал теней). Основной проход приводит к визуализации всех указанных атрибутов, то есть соответствует визуализации без глобальных проходов. Часто вместе с ним визуализируются каналы зеркальных бликов-или теней, например, если в процессе последующей обработки сцены требуется сделать тени более темными или увеличит!, яркость зеркальных бликов. Визуализация канала цвета включает в себя только цветовую информацию, например карты текстур. Визуализация канала зеркальных бликов позволяет отдельно получить вид бликов для раскрасок, обладающих этим свойством, например, Blinn (По Блину), Phong (По Фонгу) и Anisotropic (Анизотропная), Эти проходы визуализируются без маски или альфа-канала, поэтому их монтаж осуществляется в так называемом режиме экрана. При этом берутся светлые области одного изображения и назначаются другому изображения неаддитивным способом. Этот процесс подобен оптической печати, при которой два фрагмента пленки накладываются друг на друга. Визуализация канала диффузного рассеяния приводит к появлению цвета диффузного рассеяния и цвета подсветки поверхности или диффузного коэффициента для программно визуализируемых частиц. Визуализация канала теней приводит к появлению темного изображения (впрочем, цвет зависит от цвета теней) с альфа-каналом. В предыдущих версиях модуля Mental Ray и в определенных ситуациях для получения канала теней требовалось применять фоновую раскраску, но теперь этот процесс упростился.
Слои освещенности Слои освещенности также можно визуализировать в отдельных проходах, однако это требует от пользователя дополнительных усилий, так как в Maya эта возможность не поддерживается. Идея состоит в получении дополнительного контроля над процессом настройки освещения путем визуализации сцены или объектов каждый раз только с одним источником света. При работе с обычными слоями и слоями визуализации программа учитывает источники света, не принадлежащие рассматриваемому слою. То есть вам придется вручную по очереди отключать все источники света кроме одного и сохранять результаты визуализации сцены в отдельных файлах,
Выбор метода Очевидно, что применением всех вышеупомянутых методов может привести к появлению огромного количества слоев, поэтому желателен избирательный подход. Для планирования действий применяются следующие критерии. Визуализация фоновых и перегруженных сцен обычно требует много памяти:, поэтому желательно прибегнуть к послойной визуализации. В большинстве сцен присутствует персонаж, вокруг которого происходит все действие. Его требуется хорошо осветить и тщательно проработать все детали, поэтому имеет смысл воспользоваться глобальными проходами (а также слоями освещенности). Таким способом будет получен максимальный контроль над качеством освещения и комби-
Глава 20• Визуализация
760
нацией теней. Эта же методика применяется при монтаже элементов компьютерной графики с обычным фильмом. Для получения определенного эффекта иногда требуется обработка одного объекта сцены отдельно от остальных. В этом случае также поможет послойная визуализация. Остается открытым вопрос, как поступить с пересекающимися объектами, которые требуется визуализировать в отдельных слоях? Обычно для этой операции используется материал Surface Shader (Раскраска поверхности), параметру Out Matte Opacity (Непрозрачность) которого присвоен черный цвет, как показано на рис. 20.23. Для выделения области пересечения объектов нужно продублировать один из них, назначить копии материал «черной дыры» и поместить его в слой визуализации другого объекта. ,М Attribute filitor: WackhbfeHJjadet Ui Seiect-tri Fafift
black h
Jjrj [
fj 8ш(ас* Sheitet Atui'uiei
Oj!Gte«r;uicn .|:Мм;;яС»с.'У HJtdv»,-)!»- 1 nXluiiflp
mnnidl iiy Npdtj Hctinvior
i ору Те*)
Рис. 20.23. Настройки материала Surface Shader, имитирующего «черную дыру»
Упражнение 20.1. Выполнение многопроходной визуализации Начните с загрузки файла RenderPasses.mb, расположенного в папке Chapters\ Chapter20\Rendering\scenes прилагаемого к книге компакт-диска. Вам предстоит визуализировать сцену с нескольких точек, кроме того, потребуется визуализация нескольких слоев, чтобы удовлетворить требованиям режиссера проекта. Один из кадров будет содержать общий вид сцены, два других — крупный план. Общий вид сцены должен обеспечивать управление персонажами отдельно от фона. Для крупных планов потребуются глобальные проходы и слои освещенности. Фон будет отделен с помощью маски переднего плана. Начать следует с распределения элементов по слоям визуализации. К счастью, все элементы уже разбиты на соответствующие группы.
Многопроходная визуализация
761
1. Выделите объекты и персонажи в диалоговом окне Outliner (Структура). Нажмите и удерживайте клавишу Ctrl (или ее аналог, если вы работаете не на PC) и поочередно щелкните на строках Fire_Hydrant, Jerk_Character, Dog_Character, Car, Pavement, Sidewalk и Buildingsl, как показано на рис. 20.24.
Рис. 20.24. Выделение основных компонентов для слоев визуализации 2. Можно вручную выделять каждую группу объектов, создавать для нее слой визуализации и присваивать ему имя. Но если «время не терпит», воспользуйтесь для выполнения этой задачи коротким MEL-сценарием: // Сценарий создания слоя визуализации string $sel[> 'Is -si -Г : for (Snode In $sel}{ createRenderLayer -n Inode Snode: !
Этот сценарий сохраняет выделенные группы объектов в массиве, а затем, перебирая его элементы, сопоставляет каждому из них переменную. Переменные будут использоваться с командой createRenderlayer и флагом on после имени груп пы. Выполните сценарий, и вы увидите в окне каналов дополнительные слон визуализации, как показано на рис. 20.25.
762
Глава 20* Визуализация
Рис. 20.25. Набор слоев визуализации, появившийся после выполнения MEL-сценария
Теперь нужно включить трассировку, чтобы в витрине магазина отражались происходящие перед витриной события. 3. В диалоговом окне Render Global Settings (Общие параметры визуализации) перейдите на вкладку Maya Software (Программная визуализация) и убедитесь, что в разделе Raytracing Quality (Качество трассировки) установлен флажок Raytracing (Трассировка лучей). Так как в сцене не задействованы трассированные тени, параметру Shadows (Тени) нужно оставить заданное по умолчанию значение 0. Параметр Reflection (Отражения) также оставьте без изменений. Так как в сцене должно быть всего несколько отражающих поверхностей, откройте диалоговое окно Hypershade (Редактор узлов) и проверьте, чтобы только те материалы, которые назначены двери, окну, автомобилю и пожарному гидранту, имели отличное от нуля значение параметра Reflectivity (Отражающая способность), как показано на рис. 20.26. 4. В разделе Render Layer/Pass Control (Визуализация слоев/Управление проходами) диалогового окна Render Global Settings (Общие параметры визуализации) при необходимости установите флажки Enable Render Layers (Активизировать слои визуализации), Enable Render Layer Passes (Активизировать проходы слоев визуализации) и Output to Subdirectories (Сохранять в папках). Для слоя defaultRenderLayer все каналы должны иметь значение off, в то время как для остальных слоев необходимо включить визуализацию каждого из них, как показано на рис. 20.27, Также
Многопроходная визуализация
763
убедитесь в установке флажка Premultiply (Предумножение) в разделе Render Options (Параметры визуализации).
ита^. J
л*
;-s,.:V вЩШШ! -'-'i-^"-*!l":---'-"i '"'•'- [~; -t ••]••<•-' '-'•'"-"
Рис. 20.26. Проверка параметров материалов после включения трассировки
Все уже почти готово для сохранения первой визуализированной сцены, осталось только проверить параметры раздела Image File Output (Выходной файл). В сцене есть несколько камер, но в данном случае требуется визуализировать только вид в окне проекции StreetWideHigh. 5. Выберите в раскрывающемся списке Camera (Камера) раздела Image File Output (Выходной файл) вариант StreetWideHigh. При этом нужно по очереди выделить все камеры, присутствующие в сцене, и проверить, установлен ли флажок Renderable (Визуализируемая) в разделе Output Settings (Выходные данные) диалогового окна Attribute Editor (Редактор атрибутов), как показано на рис. 20.28. 6. Выберите в меню File (Файл) команду Save As (Сохранить как) и сохраните сщ-ну под именем RenderPasses_WH.mb. Теперь можно визуализировать файл. Если вы планировали прибегнуть к пакетной визуализации, необходимо протестировать сцену, визуализировав несколько кадров. Если требуется визуализировать сцену с параметрами, отличными от сохраненных, лучше всего сделать это из командной строки. В результате будет получен набор папок, которые затем можно перетащить мышью в вашу любимую программу монтажа, как показано на рис. 20.29.
764
Глава 20• Визуализация
С*1
;ОЛ
on
SMI
[ОЛ
В1
'Of
'on
Рис. 20.27. Параметры проходов послойной визуализации
>*
РЛЬ: H:/Nwrfiid0i,/awW,n20F*e,/NiiWFDUi,./Z350 га« Name: Stte«Sc«n« >:i- -— :-™!—^—v— Ыя Пи«ро» Ш -fnago
I
54 43 p
i,
Ж
,.
fa ci» p»™
Dnwwf 511«нЯл'ИеН№
Ш
т! ilv
W^FunheaVu-bteDw* |vj|' fJ -,••Г""'"-"'"— .
«I'
Рис. 20.28. Задание выходных параметров в диалоговом окне F:ender Global Settings и в диалоговом окне Attribute Editor для камеры
Многопроходная визуализация
765
Рис. 20.29. Перетаскивание папок с результатами разных проходов визуализации в приложение After Effects от Adobe
Теперь все готово для создания крупного плана лица главного героя. 7. Загрузите файл RenderPasses.JCU.mb с прилагаемого к книге компакт-диска. Большинство объектов в этой сцене не видны, поэтому их можно смело исключить. Затем следует сделать несколько прогонов визуализации, по одному для каждого из основных источников света. Начнем с отключения всех слоен визуализации, кроме Buildings2 и Jerk_Charactersl, как показано на рис. 20.30. Теперь нужно отключить источники света, которые не нужны на данный момент, а именно BloomShape, CarShadowShape, DogFaceShape, DogFaceSpec, DogFaceSpecl (это два точечных источника света с одинаковым именем pointLightShapel), Dog_ShadowShape и HydrantShadowShape. Другими словами, нужно выделить все источники света в верхнем ряду и первые два во втором. 8. Выделите вышеупомянутые источники света в диалоговом окне Hypershade (Редактор узлов) и выберите в меню команду Display > Hide > Hide Selection (Отображение > Скрыть > Скрыть выделенное). 9. Откройте диалоговое окно Render Global Settings (Общие параметры визуализации) и убедитесь в установке флажков Enable Render Layers (Активизировать слои визуализации) и Enable Render Layer Passes (Активизировать проходы слоев визуализации). Первый файл, который будет сохранен, соответствует слою визуализации Ви Idings2. Так как в данном случае не требуются многочисленные проходы для различных источников света, результат визуализации нужно сохранить отдельно. Присвойте сцене имя RenderPasses_JCU_B.mb,
766
Глава 20- Визуализация
Рис. 20.30. Крупный план персонажа
10. Отключите слой Buildings2 и включите вместо него слой Jerk_Characterl. Теперь можно скрыть также источник света WallShadowShape. 11. Пришло время сохранить набор сцеп, каждая из которых освещена одним источником света: • для источника света JerkFaceShape назовите сцену RenderPasses_JCU_JF.mb; • для источников света JerkFaceSpec и JerkFaceSpecl назовите сцену RenderPassesJCUJFS.mb; • для источников света KeyShape и JerkShadowShape назовите сцену RenderPasses_JCU_K.mb; • для источников света Fill и JerkShadowShape назовите сцену RenderPasses_ JCU_F.mb; •
для источника света RedCarboun.ce назовите сцену RenderPasses_JCU_RCB.mb.
Теперь все готово для запуска визуализаторов и создания материалов, которые затем будут обрабатываться программой монтажа. В данном случае вы получите больше, чем требуется, но это лучше, чем нехватка материала. Поэкспериментируйте с полученными сценами в программе монтажа, чтобы понять, что именно требуется для дополнительного контроля.
Фабрики визуализации
767
Фабрики визуализации В этом разделе мы поговорим о деталях планирования работы с фабриками визуализации. По существу фабрика визуализации представляет собой набор компьютеров, объединенных в сеть и обеспеченных определенным программным обеспечением, которые автоматически делят между собой задачи по созданию анимационной последовательности. Эти компьютеры часто называют узлами визуализации, или клиентскими машинами, и работают они под управлением сервера или главной вычислительной машины.
Программное обеспечение Существует множество приложений для фабрик визуализации. Пользователи Windows могут выбирать из приведенного ниже перечня. Приложение Maya Dispatcher в этой операционной системе не работает. о Maya Net Render v4.0, от фирмы Nitisara (http://www.highend3d.com/mava/toolsi/), Распространяется бесплатно. Поддерживает вюуализатор Mental Ray. Работает только под Windows. О Smedge 2, от фирмы Uberware (http://www.uberware.net/smedge2). Для 2-25 клиентов по 40 долларов за визуализацию; для бесконечного числа клиентов (от 26) — 1000 долларов. Поддерживает другие приложения, вызываемые из командной строки. Работает только под Windows. Можно загрузить демонстрационную версию. о Muster, от фирмы Virtual Vertex (http://www.wertex.com/). Для версии Muster V 3.0 нолноразмерная клиентская лицензия без ограничений стоит 899 долларов. Версия для одного клиента, допускающая работу на различных платформах, стоит 45 долларов. Поддерживаются такие платформы, как Mac OS X, Windows, Irix и Linux. Можно загрузить демонстрационную версию. О Rush, от фирмы GregErcolano (http://www.3dsite.com/people/erco/rush/). Стоимость 150 долларов за один хост со скидками при оптовой продаже. Допускается написание сценария поддержки любого визуализатора с командной строкой. Работает под Windows, Linux, Irix и OS X, О Lemonpro от Martin P.Heigan (http://www.ice.org/~martin/lemon_pro.html). Стоимость 180 долларов для одного компьютера. Работает только под Windows, Можно загрузить демонстрационную версию. о Rendermax от фирмы Rendercorp (http://www.rendercorp.com). Стоимость 65 долларов для одного процессора; начальная цена за версию без ограничений 995 долларов. Имеет функцию Image Scatter, позволяющую визуализировать в сети фрагменты одного изображения. Работает под Windows, Irix и Linux. Можно загрузить демонстрационную версию. Spider от фирмы Spider Networks, Inc. (http://www.stationx.com/). Стоимость 99 дол\ров для одного процессора, или 6000 долларов за неограниченную версию
768
Глава 20 • Визуализация
для профессионалов. Поддерживает разделение изображений на части и сценарии для командной строки. Работает только под Windows. Можно загрузить демонстрационную версию. о ButterflyNetRender v2.0 от фирмы Liquid Dream Solution (http://metanerd. bizland.com/). Существуют различные варианты лицензии. Поддерживает разделение кадров. Работает под Windows, Linux и OS X.
Выбор платформы Если все ваше аппаратное обеспечение ограничивается имеющимися в наличии компьютерами, вопрос о выборе платформы для фабрики визуализации вряд ли возникнет. В этом случае имеет смысл купить дополнительные машины с такой же операционной системой. Это не только удобно, но и позволяет предотвратить различные варианты несовместимости, возникающие при визуализации на смешанных платформах. Если в составе фабрики визуализации присутствуют компьютеры с различными операционными системами, при настройке визуализации может оказаться, что одну и ту же операцию они выполняют по-разному. Иногда различия могут быть просто поразительными, Попытки одновременно использовать эти компьютеры создадут проблемы из-за разных алгоритмов обработки данных с плавающей точкой. На сегодняшний день Windows является основной платформой для создания трехмерной анимации. Однако нехватка оперативной памяти говорит о слабой пригодности этой платформы для больших проектов. Операционная система Mac OS X является достаточно удобной платформой и до сих пор любима многими художниками, Впрочем, компьютеры Macintosh стоят дороже Intel или AMD. Версия Maya, предназначенная для операционной системы Linux, сертифицирована для запуска на версии Red Hat Linux. Проверить, совместима ли купленная вами версия Maya с дистрибутивом Linux, который вы собираетесь установить на машине, можно на сайте http://www.aliaswavefront.com. Вообще говоря, Linux представляет собой наименее дорогую и наиболее мощную операционную систему по сравнению со всеми прочими. Более рационально распределена память по сравнению с Windows, имеется возможность использовать более 2 Гбайт на один процесс. Работа с большими сетями под управлением Linux гораздо проще благодаря UNIX-архитектуре. Операционная система Irix до сих пор вне конкуренции, но ее использование для обслуживания фабрик визуализации стоит слишком дорого. Некоторые; мультипроцессорные системы от SGI могут выступать в качестве конкурентов или даже превосходить все прочие, но их цена слишком высока.
Аппаратное обеспечение На способ построения фабрики визуализации влияют несколько факторов. Требуется найти баланс между простотой применения, пространством, стоимостью
Фабрики визуализации
769
и возможностью модульного наращивания системы в рамках унифицированной архитектуры. По мере покупки новых систем у многих аниматоров накапливалась целая коллекция разнородных компьютеров. Большинство из этих компьютеров могут визуализировать несколько кадров или служить файловым сервером. Однако при построении фабрики визуализации вы ограничены только своим бюджетом и наличием свободного места в помещениях. Если вы ограничены в средствах, при наличии свободного пространства можно взять старый корпус, установив в него процессор последнего поколения. Если пространство имеет для вас решающее значение, а цена нет, можно смонтировать стойки, доверху заполнив их вертикальными системными блоками. Существует множество вариантов закупки компонентов. Некоторые фирмы создают специальные системы для визуализации, в то же время вы можете приобрести стандартный настольный компьютер. Любители техники могут собрать компьютер самостоятельно. В последнем случае есть шанс получить мощную систему за меньшие деньги. Процесс тщательного подбора товара всегда окупается. Но, решив воспользоваться заказом товара через Интернет, узнайте, сколько будет стоить доставка, и только потом оформляйте заказ. В большинстве фирм охотно ответят на ваши вопросы по телефону. Также рекомендуем покупать большинство комплектующих от одного производителя. Это не только позволяет сэкономить время и деньги. Некоторые производители проводят дополнительные тесты, чтобы убедиться, что покупаемые вами части совместимы друг с другом. Для компьютера, который в основном будет использоваться для визуализации, нужно иметь, по меньшей мере, 512 Мбайт оперативной памяти и 10-20 Гбайт места на жестком диске. Процессор можно приобрести тот, который вы считаете целесообразным, и рассмотреть идею установки нескольких процессоров. При наличии двух и более процессоров не только ускорится процесс визуализации, но и появится возможность обойтись меньшим количеством машин в сети. Вам потребуется простейшая видеокарта на 8 Мбайт видеопамяти, воспроизводящая 24-разрядный цвет. На сегодняшний день некоторые производители материнских плат выпускают дешевые модели со встроенной видеокартой.
Стандарты передачи данных в сетях Большинство современных компьютеров оснащаются сетевыми картами с интерфейсом 10/iOO/1000BaseT Ethernet. Встречаются дешевые материнские платы со встроенными микросхемами сетевых контроллеров. Для небольшой фабрики визуализации, состоящей из менее чем восьми компьютеров, достаточно интерфейса 100BaseT Ethernet. Цены на сетевые карты Gigabit Ethernet в последние годы значительно упали, и многие компьютеры теперь оснащаются этими контроллерами. При наличии большой фабрики визуализации и многочисленных ресурсов совместного доступа, например файлов с анимированными текстурами или кэшированных систем частиц, имеет смысл приобрети сетевую карту Gigabit Ethernet. К сожалению, коммутаторы для этого стандарта до сих пор стоят достаточно дорого.
770
Глава 20 • Визуализация
Коммутаторы и концентраторы При наличии нескольких компьютеров вам без сомнения понадобится концентратор для объединения их в сеть. Для построения фабрики визуализации нужен коммутатор. Коммутатор отличается от концентратора более широкой полосой пропускания, получаемой благодаря механизму контроля за потоками данных. Визуализация в сети требует широкой полосы пропускания. При наличии восьми компьютеров вам потребуется 16-портовый коммутатор и свободное пространство для дальнейшего роста фабрики визуализации. Соединение коммутаторов друг с другом приводит к сужению полосы пропускания. Исключением является случай, когда коммутаторы имеют специальные высокоскоростные шины для соединения в единый массив.
Источник бесперебойного питания Любой компьютер и его периферию желательно оснастить источником бесперебойного питания достаточной мощности. Напряжение в городской сети электропитания подвержено колебаниям, которые могут повредить ваш компьютер или привести к потере данных. Скорее всего, у вас есть сетевой фильтр, срезающий кратковременные превышения напряжения и высокочастотные помехи, но он не предупреждает вас о проблемах с питанием. Мощность источников бесперебойного питания указывается в вольт-амперах (VA). Она определяет время поддержания нагрузки на батареях при падении напряжения в сети до критической величины. Вам требуется достаточно времени, чтобы сохранить ваши данные и корректно завершить работу компьютера. Мощность источника бесперебойного питания определяется суммарным потреблением энергии подключенного к нему компьютера и периферии. В России единицей мощности является ватт. Чтобы определить величину в вольт-амперах, умножьте количество ватт на 1,4. Сложив все цифры, вы получите минимальные требования к мощности источника. Если на вашем компьютере установлены дополнительные жесткие диски, нужно найти мощность каждого из них и сложить между собой. Типичный винчестер IDE потребляет меньше 28 VA; большой монитор с электронно-лучевой трубкой потребляет примерно 360 VA, а жидкокристаллический монитор — примерно 56 VA. Процессор AMD с тактовой частотой более 1600 МГц потребляет около 90 VA, а процессор Intel Itanium с частотой 733 МГц — 164 VA. На рис. 20.31 показан примерный список для вычисления минимальных требований по мощности источника бесперебойного питания. При создании фабрики визуализации требования к мощности возрастают. Однако компьютерам, соединенным друг с другом, не требуется многочисленная периферия или мониторы, поэтому для поддержания каждого из них нужна меньшая мощность, чем для обычного рабочего компьютера, Для управления с одного рабочего места несколькими компьютерами иногда используются переключатели, коммутирующие один монитор, одну клавиатуру
Фабрики визуализации
771
и одну мышь на компьютер, выбранный среди подключенных к этому устройству. Поэтому вам не требуется покупать мониторы для всех компьютеров, входящих в фабрику визуализации. Даже если вы можете удаленно подключаться к машине, вышеуказанная возможность может вам потребоваться в случае возникновения проблем. Переключатели позволяют переходить от одной системы к другой путем нажатия специальных клавиш на клавиатуре.
Рис. 20.31. Пример списка для вычисления минимальных требований к мощности источника бесперебойного питания
Компоновка фабрик Компоновка фабрики визуализации зависит от размеров сети.
Небольшие сети Для небольших сетей лучше всего приобрести один коммутатор и одну систему, предназначенную под сервер, где будут храниться файлы с проектами и готовыми кадрами.
Средние сети или сети с массированной передачей данных Для несколько больших сетей или же для сетей, использующих большое количество ресурсов, можно поменять конфигурацию таким образом, чтобы каждый компьютер считывал файлы с собственного жесткого диска. Большинство программ для фабрик визуализации не умеет распределять файлы проекта по всем клиентским машинам. В этом случае нужно применить MEL-команды или же перенастроить программу визуализации. Если поместить исходный файл на жесткий диск каждого клиентского компьютера, не придется заботиться о полосе пропускания в сети, но после этого вам придется вручную обрабатывать файлы на разных ком-
772
Глава 20 • Визуализация
пьютерах. Кроме того, распределение этих файлов по клиентским машинам тоже может занять несколько часов.
Крупные сети Крупные сети могут состоять из сотен компьютеров, рассчитывающих одну визуализацию. На этом уровне вам потребуется настраиваемое программное обеспечение. В этой среде может потребоваться указать, какой фрагмент анимации должен обсчитываться каждым из компьютеров. Управление этим процессом осуществляется с сервера. Файлы проекта копируются на каждый файловый сервер кластера.
Окончательный вывод Результаты визуализации могут занять много места на диске, особенно в случае нескольких проходов. К счастью, в наше время жесткие диски стоят не очень дорого. Емкость жестких дисков IDE достигает заметных величин при умеренной цене. Так что, несмотря на возможность пользоваться компакт-дисками, имеет смысл купить несколько дополнительных винчестеров. Большинство корпусов в наши дни имеет отсек для установки 5-дюймового привода, который замечательно подходит для установки салазок со сменным накопителем. После заполнения одного жесткого диска достаточно просто заменить его другим. Всегда делайте резервные копии файлов проекта и комплектующих узлов. Проблемы имеют свойство возникать в последние часы, когда они нужны вам меньше всего.
Видео Существуют различные стандарты видео. Наиболее распространенными являются NTSC, PAL и SECAM. Эти форматы используют поля для кодирования цветности. Различные форматы также имеют различную частоту кадров. В NTSC поддерживается 29,97 кадра в секунду, a PAL и SECAM — 25. Этим стандартам соответствуют различные разрешения. Максимальное разрешения для NTSC составляет 720x486, в то время как для PAL и SECAM оно равняется 720x576. Основным вопросом является использование полей для воспроизведения движения. Некоторые типы движения невозможно передать без полей. При этом особенно заметным становится вибрация при горизонтальном движении. Этой проблеме подвержены в том числе и титры. В фильмах такое движение сглаживается путем размывания в движении. Однако в некоторых случаях требуется движение без размывания. Это приводит к появлению вибрирующих перемещений, которые замечательно подходят для фильмов ужасов и музыкальных клипов. В Maya существует возможность визуализации с полями, но сначала нужно подобрать значение параметра Field Dominance (Преобладание полей) для аппаратного обеспечения, которое вы используете для вывода на видео. Затем это значе-
Заключение
773
ние указывается в разделе Field Options (Параметры полей) диалогового окна Global Render Settings (Общие параметры визуализации). Однако если вы перепутали значение, откройте последовательность в программе монтажа и сдвиньте файл вверх или вниз на один пиксел.
Видео высокой четкости и цифровое видео Другие форматы, а именно HD и DV, могут использовать прогрессивную развертку. Это означает, что вы можете показать полный кадр без полей. Это похоже на проецирование фильма на экран. В наши дни практически любой компьютер способен к выводу полноразмерного видео в реальном времени. Если ваш компьютер не умеет этого делать, можно недорого приобрести видеокарту с композитным выходом, которая позволит осуществлять вывод данных на видеомагнитофон. Для профессиональной работы существуют устройства, позволяющие записывать данные на специальные кассеты, но они стоят достаточно дорого и вряд ли их имеет смысл покупать индивидуальным пользователям. В вашем случае лучше всего найти фирму, специализирующуюся на обработке данных. Большинство редакций в наши дни оснащено системами Avid или другими системами для нелинейного редактирования на базе настольных компьютеров. Они могут легко преобразовать вашу анимацию в формат Quick Time или AVI или же сохранить его в виде последовательности изображений. Небольшой проект можно принести туда на компакт-диске. Для доставки проектов значительного размера лучше использовать жесткий диск. Помните о необходимости создания резервных копий и никогда не отправляйте оригинал или единственную копию.
Пленка Вывод на пленку представляет собой далеко не такой простой процесс, как вывод на видео, так как никогда точно нельзя сказать, как будет выглядеть результат, пока вы его не напечатаете. Имеет смысл подготовить несколько тестовых кадров из каждой сцены и распечатать их. При монтаже кадров, полученных с помощью компьютера, и кадров, снятых камерой, желательно иметь рядом специалиста, который исследует результаты теста и поможет добиться совпадения с исходным фильмом. В любом случае при сканировании должен использоваться динамический диапазон, в котором при получении растрового изображения не обрезаются самый темный и самый белый участки. Если вы используете сканер для пленок Kodak, скорее всего, это будет 16-разрядный файл Cineon.
Заключение Визуализация практически всегда производится в спешке, так как это завершающая стадия создания анимации. Некоторые из рекомендаций данной главы могут
774
Глава 20 • Визуализация
показаться излишними. Однако при работе над большими проектами, как и при подготовке анимации для показа клиенту, вы увидите, что дополнительная гибкость, которую дает многопроходная визуализация, сэкономит вам довольно много времени. Кроме того, многие эффекты и фотореалистичное освещение просто не могут быть получены всего одним проходом визуализатора.
ЧАСТЬ V Приложения Приложение А. Обычные и дополнительные возможности языка MEL Приложение Б. Список терминов
А
Обычные и дополнительные возможности языка MEL
Это приложение предназначено для пользователей Maya, которые уже открыли для себя мощь и красоту языка MEL и хотели бы получить дополнительные знания по данной теме. Написание сценариев и применение языка MEL в производстве анимации требует многосторонних знаний и навыков. Здесь вы найдете дополнительные сведения по Maya и MEL. Это приложение поможет вам отточить уже имеющиеся у вас навыки применения языка MEL. Исследуйте примечания в программе, расположенной в последнем разделе данного приложения, чтобы понять, как написать пользовательский деформатор на языке C++. В этом приложении мы поговорим на следующие темы: О О О О О О
узлы сценариев; команда scriptJobs; способы загрузки исполняемых файлов и получения данных; обработка ошибок; написание сценариев и ведение протокола ошибок; написание деформатора.
Понятие узла сценария Задумывались ли вы когда-нибудь, как именно Maya запоминает параметры пользовательского интерфейса в каждом файле? При загрузке одного файла может оказаться открытым диалоговое окно Outliner (Структура), а при загрузке другого — диалоговое окно Graph Editor (Редактор функциональных кривых). Это происходит благодаря сохранению информации на языке MEL внутри редактируемого узла, который называется узлом сценария. По сути этот узел представляет собой своего рода выражение, хотя вычисления в каждом кадре и не производятся. Но как только вы открываете файл, в котором присутствует такой узел, Maya считывает содержащуюся в нем информацию. Это позволяет легко встраивать в файлы нужный
Понятие узла сценария
777
вам код на языке MEL. Это особенно удобно в случае сценариев с пользовательским интерфейсом для управления персонажем. Пользовательский интерфейс для управления персонажем представляет собой сценарий, который вы не хотите раскрывать пользователю. Как его вызвать, откуда он вызывается, как выполнить процедуру, как происходят обновления версий сценария и т. п.? Вопросы остаются за кадром. Это крайне сложные вопросы, но ответить на них можно, поместив пользовательский интерфейс непосредственно в узел сценария.
Создание и использование узла сценария Интерактивное создание узла сценария осуществляется с помощью диалогового окна cript Editor (Редактор сценариев), впрочем, его можно доверить и MEL-сценарию с командой scriptNode. Подробная информация об этой команде находится в документации по MEL-командам. Рисунок АЛ иллюстрирует доступ к узлам сценария с помощью пользовательского интерфейса Maya.
Рис, АД. Диалоговое окно Expression Editor, в котором можно просматривать и редактировать все узлы сценариев, имеющиеся в файле
778
Приложение А • Обычные и дополнительные возможности языка MEL
Предположим, что вам требуется пользовательский интерфейс с различными ползунками, а также с кнопкой Set Key (Задать ключ) для определенных атрибутов персонажа. Кроме того, код должен автоматически загружаться при загрузке сцены, а также сохранять кнопки на полке для задания поз персонажа в процессе анимации. В следующем простом примере показано, как создать узел сценария и встроить в сцену несколько кодов для настройки интерфейса.
Упражнение А.1. Создание узла сценария 1. Для начала загрузите сцену myLocatorWithAttrs_begin.mb, расположенную в папке Chapters\AppendixA прилагаемого к книге компакт-диска. 2. Выберите в меню команду Window »Animation Editors * Expression Editor (Окно > Редакторы анимации > Редактор выражений), а затем уже в меню Select Filter (Выделить фильтр) появившегося диалогового окна выберите команду By Script Name Node (По имени узла сценария). Вы увидите пару узлов сценария sceneConfigurationScriptNode и uiConfigurationScriptNode в разделе Selection (Выделение). Эти два узла автоматически создаются и обновляются приложением при сохранении сцен, и именно они отвечают за сохранение ваших предпочтений относительно интерфейса Maya. Благодаря им при следующей загрузке любой сцены вы можете вернуться к параметрам, с которыми закончили работу в последний раз. Исследуйте узел uiConfigurationScriptNode. Он даст вам представления о том, как именно происходит выбор и сохранение предпочтений относительно пользовательского интерфейса Maya. После беглого взгляда на уже существующие узлы можно создать собственный. Редактировать заданные по умолчанию узлы не стоит, так как Maya автоматически переписывает их содержимое, и все изменения существуют только на время текущего сеанса работы со сценой. 3. Щелкните на кнопке New Script Node (Создать узел сценария) и введите в поле Script Node Name (Имя узла сценария) название Custom Em bedded UI. Вы можете выбрать любое удобное вам имя. 4. Откройте файл customControlWindow.mel с прилагаемого к книге компакт-диска в любом текстовом редакторе. Скопируйте следующий код в поле Script (Сценарий), расположенное в нижней части диалогового окна Expression Editor (Редактор выражений): global proc customControlWindowO , string $selected[] = 'Is -si'; if ( r$1ze($selectedr ){ return;
//
} ifC'window -ex custCntr!Win'){ deleteUI custCntrlWIn; } else ifCwindowPref -ex custCntrlW1n"){ windowPref -r custCntrlUIn;} window -wh 550 650 -title ("Custom Attribute Control Window") -s 1 custCntrlWin;
Понятие узла сценария scroll Layout: col umnLayout: int $count - 0: for (Snode in Sselected)
I
string $keyableAttrs[] - 'listAttr -r -w -k -u -v -m -s Snode'; if С Psize($keyableAttrsr)( continue:
} string $fl - "frameLayout -label ("Custom Controls::"+$node ) -collapsable true -cl true -labelAlign "top" -borderStyle "in"' ; If ( !$count ){ frameLayout -e -cl false $f 1 : $count++: } rowCol umnLayout -nc 2 -columnWidth 1 450 -columnWidth 2 60: button -label ("Select Node: "+$node) -c ("select -r "+Snode+":") button -label "Key All " -c ("select -r "+$node+": SetKey:"); for ($attr in $keyableAttrs) i string SbufferH; JnumTokens = 'tokenize (Snode +"."+$attr) " . " $buffer\ if С SnumTokens <- 2 ]
I attrFieldSliderGrp -at (Snode +"."+$attr); button -label ("Set Key") -c ("setKeyframe \""+$node +"."+$attr+"\""):
setParent . . : setParent . . ;
} rowCol umnLayout ^nc 2 -columnWidth 1 450 -columnWidth 2 60; button -h 50 -label "Save Selected Node's V'setAttrV Commands to a Shelf Button. -c C'saveSelectedNodeAttrsToShelf ( 'textField -q -tx "t-$node -t-"_custCntrlWin' ):");
779
780
Приложение А • Обычные и дополнительные возможности языка MEL
textField ($node +"_custCntrlWin"); setParent ..; setParent .,: showWindow; I global proc string saveSelectedNodeAttrsToShelffstnng $label)
:
string 3selected[] = 4s -sT; if ( Psize($selectedr ){ warning "Nothing is currently selected. No shelf button created, or action taken.": return "Nothing is currently selected. Wo shelf button created, or action taken."; string JsafeShelfCormand; for (Snode in $selected) string $keyableAttrs[] - 'listAttr -r -w -k -LI -v -m -s $node': if ( rsize(SkeyableAttrsD{ continue: for ($attr in SkeyableAttrs) string Svalue - string ( "getAttr (Jnode+". "-s-Sattr)' ): SsafeShelfCommand - ("catch ('5etAt.tr \""+Jnode +"."+$attr+"\" "+3value+"')Лп")+$safeShelfCommand;
print "\n\rl\n";
print "// Команда поместить на вкладку Shelf: \n\n": print SsafeShelfConmand: print "\n"; global string $gShelfToplevel; if TtabLayout -exists $gShelfTopLeveT) { if (Slabel == '"){ 31abel - "ATTR"; } shelfButton -parent C$gShelfTopLevel + "|" + 'tabLayout -q -st $gShelfTopLeveD -enableCommandRepeat 1 -enable 1 -width 34 -height 34 -manage 1 -visible 1 -annotation ("Will set attributes into a stored pose for the previously selected nodes (for all keyable attributes}." )
Понятие узла сценария
781
-label Slabel -iol $label -imagel "menuIconCharacters.xpm" -style "iconQnly" -command SsafeShelfCommand; else
( error "You need a visible shelf for this work, dude! Show your shelf, man!";
1 return $safeShelfComand; }
Этот код приведет к появлению замечательного пользовательского интерфейса для любого атрибута, допускающего создание ключей анимации на всех узлах, выделенных во время вызова сценария. Код написан в его обобщенной форме для использования на практически любом выделенном узле с численными атрибутами, допускающими создание ключей, поэтому его можно применять в различных ситуациях. Функция customControlWindow, по сути, является циклом для выделенных в текущий момент времени узлов. Она просматривает все выделенные атрибуты, допускающие создание ключей анимации, и создает для каждого из них ползунок и кнопку. Функция saveSelectedNodeAttrsToShelf также представляет собой цикл, перебирающий атрибуты выделенных узлов и сопоставляющий их значениям строку setAttr. Затем эта строка помещается на полку, формируя там новую кнопку. 5. После копирования кода в окно Script (Сценарий) щелкните на кнопке Create (Создать). 6. Выберите в раскрывающемся списке Execute On (Выполнять при) вариант GUI Open/Close (Загрузка/Закрытие пользовательского интерфейса), как показано на рис. А.2. Это приведет к тому, что код, помещенный в поле Script (Сценарий), будет выполняться при загрузке файла. В данном случае это единственный сценарий, выполняемый при загрузке. 7. Теперь введите в конец кода в поле Script (Сценарий) следующие строки: select -r"myLocatorWithAttributes": eval Defer red "customControl WindowO";
Завершив ввод, щелкните на кнопке Edit (Правка). Если вы догадались, что при загрузке файла будет происходить выделение локатора, а затем загрузка кода с пользовательским интерфейсом, вы совершенно правы. То есть загрузка файла сопровождается загрузкой и выполнением связанного с этим файлом кода. Что делать, если вы не хотите или не имеете времени, чтобы написать собственный пользовательский интерфейс для управления персонажем? Если вы считаете
782
Приложение А • Обычные и дополнительные возможности языка MEL
эту процедуру лишней, так как вряд ли подобный код понадобится вам еще раз, можно сказать, что вы достаточно мудры. Тем не менее рекомендуем вам разрабатывать пользовательский интерфейс для любого персонажа с многочисленными элементами управления, так как это значительно облегчает работу аниматора. Как же подготовить пользовательский интерфейс, не создавая его самостоятельно? Элементарно! Вы можете пользоваться сценариями, предлагаемыми в книге. Ведь именно для этого они и написаны!
sceneConJigtiialbnS га iptfJode
UI Согйдшмюп flrtemd] Sol [ware fiende* Software Frame Render Scene
i f l ' v t n d o w -mx cutbCBCrlVla ) { "Cur
*[1 «trine fiilBCEkdll * *1* -> 11 { r i l E i l f i t l i e c i d ) ' И return; lab * f aimdHkt ch • 0 • (or i f o b ] in (or IfpridnfiaidOb} IB 1 it
Рис. А.2. Пункты раскрывающегося списка Execute On в диалоговом окне Expression Editor
Если вас не устраивают предлагаемые сценарии, существует возможность загрузить из Интернета другие, полностью настраиваемые варианты. Как бы то ни
Понятие узла сценария
783
было, вы всегда можете встроить их в свои файлы в виде узлов. При написании кода действует одно общее правило: не стоит изобретать колесо! Если кто-то уже написал нужный вам сценарий, используйте его. Например, очень удобным является сценарий attributeCollection.mel, который можно бесплатно загрузить с сайта компании Alias|Wavefront. Впрочем, в желании написать собственный пользовательский интерфейс нет ничего плохого, хотя все-таки лучше не тратить драгоценное время, а обратиться к уже готовым сценариям. Теперь перейдем к следующему этапу. Вы узнаете, как заставить пользовательский интерфейс автоматически загружаться при выделении определенных узлов. Для этого применяется команда scripUob.
Комбинация команды scripUob с узлами сценариев Команда scriptJob представляет собой задание, позволяющее отслеживать заранее заданные события или условия, а затем в соответствии с полученными результатами запускать тот или иной код. Это инструкция, которая присоединяется к вашей копии Maya в момент ее открытия и имеет уникальный идентификатор. Благодаря этому данную инструкцию можно удалить без перезагрузки приложения. Настоятельно рекомендуем вам прочитать документацию по команде scripUob, так как список заранее заданных событий и условий слишком длинен, чтобы приводить его здесь. Вот несколько полезных примеров применения данной команды: scriptJob -event "SelectionChanged" "dolt"; scriptJob -conditionTrue "SomethingSelected" "dolt"'; scriptOob -attributeChange "object.attribute" "dolt";
Как только возникает заданное условие или событие, выполняется функция dolt. ПРИМЕЧАНИЕ Фиктивная функция dolt показана исключительно для иллюстрации того факта, что в данном месте можно загрузить любую процедуру.
В следующем упражнении вы создадите простое задание по загрузке кода пользовательского интерфейса после возникновения события SelectionChanged. Упражнение А.2. Загрузка кода пользовательского интерфейса Требуется загрузить пользовательский интерфейс после появления в сцене определенной группы заранее заданных объектов. Так как это только объекты, для которых требуется загружаемый пользовательский интерфейс, нужно осуществить фильтрацию списка выделяемых объектов, чтобы определить, принадлежит ли выделенный в текущий момент объект к нужной группе. После того как нужные объекты будут идентифицированы, останется запустить задание scriptJob после возникновения события SelectionChanged. При любом изменении выделенного набора происходит выполнение заданного кода. В результате вы получите пользовательский интерфейс, который появляется только при изменении набора выделенных объектов и содержит выделенный в текущее время объект, если тот попадает в заранее указанный список.
784
Приложение А • Обычные и дополнительные возможности языка MEL
Вот как это осуществить. 1. Для начала убедитесь, что вы все еще используете файл myLocatorWithAttrs_ begin.mb из предыдущего упражнения. Откройте диалоговое окно Expression Editor (Редактор выражений) и убедитесь в наличии в нем кода, созданного в предыдущем упражнении. В раскрывающемся списке Execute On (Выполнять при) должен быть выбран вариант GUI Open/Close (Загрузка/Закрытие пользовательского интерфейса). 2. Удалите следующую строку кода из узла сценария: evalDeferred "cuE-tomControlWindow(}"; После перехода к автоматической загрузке интерфейса она больше не понадобится. 3. Добавьте следующий код, скопировав его из файла customControl Window.mel, расположенного на прилагаемом к книге компакт-диске, перед уже имеющимся в поле Script (Сценарий) кодом. Отметьте, что первую строку кода, начинающуюся с символов int $jobNum = и заканчивающуюся символом точки с запятой, вы должны ввести вручную, так как ее нет в файле customControl Window.mel. Это связано с тем, что данная строка в действительности начинает работу по запуску сценария при следующем открытии файла: int $jobNum - 'scriptJob -ct "SomethingSelected" "objFitterCustomUiCodeO"': global proc objFilterCustomUiCodeO {
ifCwindow -ex custCntr!Win'){ return: } string $predefinedObjects[] = { "rnyLocatorWlthAttributes" }; string $selected[] = 'Is -si -dag'; if ( rsize($se!ectedr ){ return; i
int JfoundMatch = 0: for ($obj in $selected)
;
for C$predefinedObj in SpredefinedGbjects)
( if CSpredefinedObj « $obj}{ SfoundMatch - 1; break;
} 1 if ( SfoundMatch ){ customControlWindowC): return; } ;
Понятие узла сценария
785
Предыдущий код просто просматривает по очереди выделенные в текущий момент времени объекты и сравнивает их со списком заранее заданных объектов. В рассматриваемом случае этот список содержит единственный объект myLocatorWithAttributes. При совпадении происходит вызов функции customControlWindowO, которая создает окно пользовательского интерфейса. Последня я строка представляет собой объявление задания сценария. Команда scriptJob возвращает целое число, которое позднее будет использоваться для уничтожения задачи, поэтому его нужно сохранить в переменной. 4. В группе Script (Сценарий) установите переключатель After (После). Это приведет к исчезновению текста из поля Script (Сценарий). Не беспокойтесь, код по-прежнему на месте, вы просто перешли в другой режим. Обычно здесь указывается завершающий код, который выполняется немедленно после закрытия сцены. Вы можете добавить сообщение, которое напомнит пользователю о проверке файла в системе контроля версии. В принципе тут располагается любой код, который требуется выполнить после закрытия файла. Можно даже добавить код, автоматически проверяющий файл в базе данных пользователей. В этом случае вы просто производите очистку и удаляете задание, загруженное в предыдущем коде. Это позволяет гарантировать отсутствие случайных или повторяющихся заданий при новом открытии файла в ходе текущего сеанса Maya. 5. Введите в поле Script (Сценарий) строку: scriptJob -kill SjobNum -force;
Все готово. Теперь у вас есть задание, которое после возникновения события загрузит триггер, вызывающий элемент пользовательского интерфейса для указанных вами объектов и удаляющий следы своей деятельности после закрытия файла. Готовая версия данного файла называется myLocatorWithAttrs_finished.mb.
Рис А.З. Чтобы открытие файла сопровождалось выполнением сценария узлов, нужно установить флажок Execute Script Nodes в диалоговом окне Open Options
786
Приложение А • Обычные и дополнительные возможности языка MEL
Чтобы задание начало работать, нужно установить флажок Execute Script Node (Выполнить узел сценария) в диалоговом окне Open Options (Параметры открытия), как показано на рис. А.З. Для доступа к этому окну нужно щелкнуть на квадратике, расположенном справа от команды Open (Открыть) в меню File (Файл). Указанный флажок установлен по умолчанию, но если вдруг вы его сбросили, встроенный сценарий не будет выполняться при загрузке сцены с узлом сценария.
Загрузка исполняемого файла и получение результатов Теперь, когда вы закончили с узлами сценариев, поговорим о других способах применения Maya для взаимодействия с вычислительной средой. Часто оказывается, что нужно загрузить внешние инструменты или исполняемые файлы (например, Perl или визуализатор стороннего производителя). В Maya для этого существует системная команда, но, к сожалению, она тут же возвращает вас к сценарию, не ожидая возвращаемого результата от загруженного системного процесса. В некоторых случаях такое поведение даже желательно. Если это так, просто используйте систему с командой start. Но в большинстве случаев требуется передать информацию в исполняемый код и получить от него ответ. Гарантированный ввод-вывод данных может быть получен с помощью сценария на языке MEL путем конвейерного открытия исполняемых файлов. Этот конвейер ориентирован на получение результатов, после чего работа продолжается. Так как это именно то, что нам требуется, для решения проблемы воспользуйтесь следующим кодом: // // Загружает исполняемый код и помещает любой возвращаемый ответ в строковый // пассив. Все аргументы кода необходимо поместить а переменную $ехе // из процедуры, которая будет вызывать следующую процедуру:
II global ргос stringE] processOutStream( string $exe } {
// создание конвейера для передаваемых файлов int $standardOutput =• рореп{ $ехе, "г" ); string $catchOutput[]; // создание цикла и добавление каждой строки к следующему элементу // массива до тех пор. пока не будет достигнут конец файла, while ( !feof( SstandardOutput ) ) { $catchOutput[s1ze( ScatchOutput )] = fgetlineC $standardOutput ):
;
// закрытие конвейера: pcloseC SstandardOutput ); // возвращение массива данных: return ( JcatcnOutput ): }
Вот пример вызова предыдущей функции вместе с возвращаемым результатом: // Это стандартная программа, поставляемая вместе с Maya и предназначенная // для размывания в движении после визуализации:
Понятие узла сценария
787
string $output[] = processOutStreamC "blur2d" ): // Результат (сохраненный в переменной-массиве Soutput): Usage: b1ur2d [-1 blurjength] [-s blur_sharpness] [-m smooth_value] [-r smoothColor] [-n start end step] [-f input JMlejiaroe] ... use blur2d -h for more help
Обработка ошибок Обработка ошибок заключается в постоянной проверке кода на отказ, нежелательное поведение и некорректный ввод-вывод данных. При возникновении ошибки желательно иметь возможность распознать ее и отреагировать контролируемым или заранее заданным образом, отличным от простого выхода из программы без упоминания о возникшей ошибке. Ошибки, возникающие во время выполнения программы, находятся за границей исходной логики программиста и появляются из-за непредвиденных изменений или комбинации неизвестных обстоятельств. В MEL этих ошибок часто можно избежать, так как распределение памяти и ее чистка осуществляются интерпретатором команд. Тем не менее они иногда возникают, и к этому нужно быть готовым. Иногда на ошибки в MEL можно не обращать внимания, но иногда они критичны. В некоторых случаях вы знаете, что в выполняемом коде будет ошибка, так как по своей природе код вызывает ошибку в интерпретаторе, однако сам по себе он не содержит логических ошибок. Для этих случаев, как и для отслеживания реальных ошибок, замечательно подходит команда catch. Она дает возможность отреагировать на ошибку, немедленно завершить выполнение кода или продолжить его выполнение, если ошибка не влияет на конечный результат. Код обработки ошибок добавляется в алгоритм сценария обычно после того, как подтвердится работоспособность основного кода и все логические ошибки будут отслежены и устранены. Написанием кода обработки ошибок можно заниматься одновременно с работой над основными функциями кода. Но это следует делать только в случаях, когда вы точно знаете, как будет выглядеть и работать ваш код после завершения программирования. В противном случае код обработки ошибок следует добавить в сценарий только после появления первой работающей версии сценария и только в том случае, если кто-нибудь из членов команды может его протестировать (разумеется, желательно, чтобы он сам не работал над этим кодом). Любой код, запущенный в производство, обязан сопровождаться кодом обработки ошибок. Обработка ошибок обычно осуществляется построчно и может быть весьма занудным процессом. Кроме того, она усложняет общую удобочитаемость кода. Обычно для проверки используется условие if, которое отслеживает наличие ошибок или нежелательных обстоятельств. В общем случае, чем сложнее логическая структура программы, тем сложнее код обработки ошибок. Соответственно, любой реальный код примерно на треть состоит из строк, относящихся к обработке ошибок. Но это гарантирует, что если пользователь запустит сценарий и сделает нечто непредусмотренное, вам не придется приносить извинений, так как сценарий сообщит о неправильных действиях и завершит свою работу еще перед возникновением реальных проблем.
788
Приложение А • Обычные и дополнительные возможности языка MEL
Ниже представлен пример сценария compltmentaryLightShadow.mel с приемлемым объемом кода обработки ошибок. Чтобы получить безопасный код, в сценарий включены строки проверки часто возникающих ошибок, включая проверку результатов выделения, правильности типов узлов, связи атрибутов и т. п. Ошибки отслеживаются, а затем пользователю возвращается простой код ошибок, а также сообщение о состоянии сценария. Это общий подход к обработке ошибок. Итак, вот описание сценария. При рисовании обычно применяется небольшое количество дополнительных цветов в области теней, что позволяет достичь большей контрастности и сделать тени выразительнее. Сценарий создает сеть узлов дополнительных цветов теней на основе цвета источника света. Сеть узлов использует кривую перераспределения цвета по дополнительным оттенкам на основе цвета осветителя. Как только вы меняете этот цвет, сеть узлов обновляется и появляются дополнительные атрибуты, позволяющие регулировать насыщенность теней и соотношение яркость/контрастность нужным вам образом. Копия сценария находится в файле compliments ryL.ightShadow.mel на прилагаемом к книге компакт-диске. global proc int complimentaryLlghtShadowO {
int JreturnStat = 0: // // Сохраняем исходное выделение // string $selected[] = "Is -sV ; string $lights[]: // // Получаем все возможные выделенные узлы формы источников света: // Slights = 'Is -si -If; string $shapeBuffer[] = 'listRelatives(eval("1s -tr -o -si"))'; select -cl : for ( SlightShape in $lights ){ select -add SlightShape: } for ($shape in $sh3peBuffer)( select -add $shape; } Slights = "Is -si -It": // // Если выделенных источников света нет, // используем все осветители в сцене: II
if ( Psize (Slights)' ){ Slights - 'Is -It*:
// // // // // //
Связь узлов внутри следующего цикла преобразует схему R68 в HSV и использует дополнительное значение параметра Hue, исходя из сдвига цветового пространства (с простой кривой, редактируемой в окне Graph Editor). Затем цвет преобразуется обратно к схеме RGB. чтобы получить значение RGB для формы тени. К новым редактируемым атрибутам цвета тени добавляются еще два атрибута "shadowSaturation" и "shadowValue":
Понятие узла сценария
if // // // // // // //
(TsizeUlightsr ){ Команда catch позволяет вернуть код ошибки в вызываемую функцию. при том что в выходных данных диалогового окна Script Editor появляется сообщение об ошибке. Если не использовать эту функцию, произойдет выход из программы до выполнения инструкции return, и, следовательно, работа сфрагнентом сценария, если он используется внутри другой функции, завершится:
// catch ("error "There are no lights in your scene. This"+ "script will operate on the shadow color of any light type."'); treturn$tat=2;
i else
( for ( Slight in Slights }
{ select -r Slight; if Cconnectionlnfo -id ($light+".sc")'){ warning C$light+": Skipped "+$light+", because it's shadow color is already connected to another attribute."); continue:
/ / Добавляем атрибуты для последующих связей: // int $attrExistWarning = 0; if (TattributeExists "IHue" Slight' ){ addAttr -sn "IHue" -In "lightHue" -min 0 -max 360 -at "double":
1 else { $attrExistWarning++: ) if (I'attributeExists "sHue" $light')| addAttr -sn "sHue" -In "shadowHue" -min 0 -max 360 -at "double1 } else { $attrExistVJarning++: } if (I'attriouteExists "sSat" Slight" ){ addAttr -sn "sSat" -In "shadowSaturation" -min 0 -max 1 -at "double": setAttr -e -keyable true ".sSat"; } else { $attrExistWarning++: } if (I'attributeExists "sVal" $light'){ addAttr -sn "sVal" -In "shadowValue" -min 0 -max 1 -dv 0.333 -at "double"; setAttr -e -keyable true " . s V a l " ; I else { $attrExistWarning++; }
789
790
Приложение А • Обычные и дополнительные возможности языка MEL
/ // Сообщение с предостережением, если какой-нибудь // из вышеуказанных атрибутов уже существует: U
if {$attrExistWanring){ warning (Slight*": "+$attrExistWarning + " attributes were not created because they already existed.\n"); SreturnStat-1:
}
11 II Создание параметров цвета: // string $rgbToHsv = 'createNode rgbToHsv -n (Jlight+'^rgbToHsvInfo"}' string ShsvToRgb - "createNode hsvToRgb -n ($1ight+"_hsvToRgbInfo") //
// Рисуем кривую, которая будет использоваться для описания оттенка // дополнительного цвета. Редактирование згой кривой впоследствии // осуществляется в диалоговом окне Graph Editor, где к ней можно // добавить ключи анимации или поменять наклоны касательных // string SshadowHueShift = 'createNode animCurveUU -n ($light+"_ShadowHueShift")~; float $indexedKeyValues[] = { 0 . 0 . 120, 30, 210. 60. 275. 120, 360. 159.9999. 300, 160, 25, 180, 45. 250, 40, 275. 60. 300. 70. 330. 90, 360. 120 }: int $i: for (11 •= 0: $i < size($indexedKeyVa1ues); ti++ ){ setKeyframe -itt flat -ott flat -f $indexedKeyValues[Ji] -v $indexedKeyValues[++$i]: ! ./ // Реализуем необходимые связи между атрибутами: // int SattrConnectedWarning - 0; if (! 'connectionlnfo -id ($light+".sc"D{ connectAttr ($hsvToRgb+".o") (J1ight-*-".sc"); } else { $attrConnectedWarning++: ) if (! "connectionlnfo -id ($light+".lHue")'){ connectAttr C$rgbToHsv+".oh") CIlight+".IHue"); }
else ( $attrConnectedWarning++; ) if (! "connectionlnfo -id C$light+".sHue")'}{ connectAttr ($shadowhueShift+".o") ($light+".sHue"); } else { $attrConnectedWarning++; }
Понятие узла сценария
if (! "connectlonlnfo -id ($rgbToHsv+".i'T){ connectAttr (Slight*".cl") ($rgbioHsv+".1");
) else ( $attrConnectedWarning++; } if (! 'connectionlnfo -id ($shadowHueShift-t-".i")'){ connectAttr ($"Mght+" .iHue") C$shadowHueShift+"л");
}
else { SattrConnectedWarning-H-; } if (! 'connectionlnfo -id ($hsvToRgb+".ir")'){ connectAttr (Slight*".sHue") (ShsvToRgb+".ir"); } else { $attrConnectedWarning++; } if (! 'connectionlnfo -id ($hsvToRgb+".ig")'){ connectAttr (Slight+".sSat") ($hsvToRgb+".ig"}; } else { SattrConnectedWarning-н-: } if (! 'connectionlnfo -id ($hsvToRgb+".ib")'){ connectAttr C$light+".sVal") ($hsvToRgb+".ib"); I else { $attrConnectedWarning++; ) // // Если вышеуказанные атрибуты не соединены, на экран выводится // сообщение с предупреждением: // if (5attrConnectedWarning)( warning (Slight-»-": Connection failure on current light. "-t-$attrConnectedWarnlng+" attributes were not connected because they were already destinations of another attribute connectionAn"}; SreturnStat=l: I // // Получение заданной по умолчанию насыщенности тени на основе // насыщенности цвета источника света.
// setAttr <$light+".sSat") CgetAttr ($rgbToHsv-t-".outHsvS")');
II П Повторное выделение ранее выделенного объекта, если таковой // присутствовал в сцене:
// select -cl; if ('size {$selectedD{ for ($each in $selected){ select -add Seach; } i return ( $returnStat ):
791
792
Приложение А • Обычные и дополнительные возможности языка MEL
Написание сценариев и ведение журнала ошибок Часто сценарии требуется запускать в распределенной системе, например на фабрике визуализации, в виде пакетного сценария. В этом случае программное обеспечение, управляющее процессом, должно иметь команды для вызова Maya и для передачи этому приложению информации источника сценария. Кроме того, оно должно передавать аргументы для выполнения сценария с помощью флага -script, например, таким образом: mayabatch.exe -script "myscript.mel" -command "myscript(\"arg\")" В данной строке фигурирует фиктивный сценарий myScript.mel, получающий фиктивный аргумент, arg. Весь процесс рассмотрения распределенных заданий может выполняться внешним сценарием. В этом случае нужно иметь один сценарий, который вызывается для сбора данных и для предоставления команд распределенной системе. В качестве альтернативы для передачи команд распределенной системе можно использовать Perl-сценарий или сценарий командного процессора. Этот процесс называется цепочкой заданий и представляет собой замечательный инструмент автоматизации повторяющихся задач, например автоматического монтажа набора файлов, полученных в результате визуализации, или отправку большого количества файлов в программу экспорта. К сожалению, при всем его удобстве процесс в большинстве отношений остается безнадзорным. Следовательно, он чреват ошибками и потерей данных. Для борьбы с этими проблемами и требуется встроить в каждую часть системы код, реализующий обобщенный механизм проверки ошибок. На языке MEL этот обобщенный механизм выражается командой catch, о которой мы упоминали. Также вы должны решить, что делать в случае обнаружения ошибки. Как автор кода вы должны гарантировать обнаружение любых возникающих в разных частях программы ошибок. Это особенно важно, если программа будет работать долгое время и выполнять функции многократного использования. Обработка ошибок менее важна, если вы быстро создали фрагмент кода для отладки сбоев в наборе файлов и больше никогда не собираетесь применять этот сценарий. Но даже в этом случае требуется, чтобы код работал. А если он не работает, нужно узнать, почему. Ниже представлен код обнаружения простой ошибки, о которой делается запись в журнале. Это базовая информация, без которой невозможно понять, в каком месте возникла ошибка. Мы также включили группу небольших вспомогательных функций, но основной процесс обнаружения ошибок выполняется процедурой importFileAndDoIt. Эта процедура проверяет, существует ли переданный в нее файл и является ли он читабельны м. В случае положительного результата проверки файл передается для импорта. В случае отрицательного результата процедура распознает ошибку и выдает сообщение о ней, записывая его в папку, в которой расположен файл. Сообщение об ошибке содержит дату и время ее обнаружения, а также имя файла, в котором она была найдена. Это общий случай обработки ошибок, который должен также прояснить для вас работу функции fopen, записывающей текстовые файлы на диск. // // импорт файла:
Понятие узла сценария
global ргос string ImportFileAndDoIK string SfilePathToImport ) t int SERROR = 1;
string $pathToSucess : if ( 'flletest -r SfilePathToImporf ) { JERROR = catch (SpathToSucess = 'file -import SfilePathToImport' ); if ( ! SERROR ) // при отсутствии ошибок успешный импорт: // Основной алгоритм, отвечающий за логику вашего сценария . // Здесь должна располагаться ваша фиктивная процедура "Dolt", // которая может выполнять любые нужные вам действия; doItO;
if ( SERROR ;
string $dt = "getDateAndTime' : string $err = "outputStringToAsciiTxtlnFilesDir ($dt+"Bad file, unable to import: " +$filePathToImport+" \n") "Import_Error_Log" "txt"'; error ("Import file failed. "+$filePathToIrnport +" . Wrote to error log file "+$err+" " ) ;
} return $pathToSucess; I
U Здесь находится вспомогательная функция, записывающая текстовый файл // в папку, в которой летит файл со сценой. Это используемый в качестве // журнала ошибок или для другой цели связанный с файлом текст ASCII. // который требуется записать на диск: global proc string outputStringToAsci1TxtInFilesDir( string SoutputString. string SfileName, string SfileType ) I string SpathToCurrentfile = getFullUnixPathToOpenMayaSceneO; // Если файл Maya не сохранен, ему еще не присвоено имя: // это код обработки ошибок внутри функции обработки ошибок! if (SpathToCurrentFile == ""){ EpathToCurrentFile - 'pwd"; SpathToCurrentFile = tpathToCurrentFile+"/": } string SoutputFile - ( SpathToCurrentFile + SfileName + " . " + SfileType ); pause -sec 3: if ("filetest -r SoutputFile' && 1'filetest -w toutputFile') { int $ver = 1; while ( 'filetest -r SoutputFile'
793
794
Приложение А • Обычные и дополнительные возможности языка MEL && I'filetest -w SoutputFile') I
string SnewName = $outputFile + Sver; EoutputFile - SnewName:
int $fi1eld: If С 'filetest ~w SoutputFile' }{ Sfileld = "fopen SoutputFile "a"': f
else{ Sfileld = ' fopen SoutputFile " w " " ;
}
f print $fileld ("\n"+$output$tring+"\n") : fclose Sfileld: return $outputFile: } // Дополнительная вспомогательная функция для журнала ошибок: // работает только под Windows, но получение отформатированных // даты и времени происходит как на обычной UNIX-машине: global proc string getDateAndTimeO
i
string SreturnDateAndTime: if ("about -os' == "nt"){ string $dateln[] = 'processOutStream "date /T"': string $timeln[] = "processOutStream "time / T " ' : string $date = "removeAllStringsFromString $dateln[0] string Stime = 'removeAllStringsFromString $timeln[0] SreturnDateAndTime - ( $date+$time •*• " : "); } else{ IreturnOateAndTime - "Unknown system date / time : ":
return SreturnDateAndTime: }
// Это быстрая вспомогательная функция, которая возвращает маршрут доступа, // только с удаленным именем файла в файл открытой в данный момент сцены // в Maya : global proc string getFullUnixPathToOpenMayaSceneO string SpathToFile * 'file -q -$rT: string $temp = SpathToFile: string SfileName = "substitute ".*/" $temp ..... : string JunixPath = 'substitute $fiteName $pathToFile ..... : return SunixPath; } // Быстро избавляется от новых линий, знаков табуляции, пробелов и т . п. // преобразует строки к нижнему регистру для большей связности
Дополнительные возможности языка MEL
795
global proc string removeAHStnngsFromSthng( string Jstrlng, string SbadWord )
{ string Snewstring - tolower($string); SbadWord = tolower($badWord); for ($i - 0; $i < sizeUstring); $i++){ $newstring = 'substitute SbadWord Jnewstring '"";
} return Snewstring:
I
Хорошим способом тестирования данного кода является его проверка в случаях, когда маршрут доступа к файлу существует и когда он отсутствует или написан неверно, как в двух следующих примерах. // Неверный маршрут доступа нфайлу найдет отражение в журнале ошибок: importFileAndOoItt"С:\Temp\mayaFile.mb"): // Правильный маршрут доступа к файлу будет импортирован без проблем // (если файл Maya действительно существует): importFileAndDolt("C:/Temp/mayaFi1e.mb ")
ПРИМЕЧАНИЕ В Maya 5 появилась новая команда catchQuiet, которая выполняет ту же функцию, что и команда catch, но автоматически удаляет сообщения об ошибках, в результате чего они не появляются в выходных данных редактора сценариев. Это полезно в случаях, когда вы хотите скрыть те или иные ошибки от пользователя (или программы), который просматривает выходные данные в поисках ключевого слова «error».
Файл в предыдущем примере не прошел тестирование из-за различий в наклоне косых черт в передаваемых строках. Эта проблема часто возникает при написании кода. Символ обратной косой черты (\) распознается компилятором как знак смены регистра (эта тема уже обсуждалась в главе 5). Так как его невозможно распознать в качестве буквенного знака, импорт не производится. Во втором случае все происходит без помех, так как Maya использует стандартную прямую косую черту в качестве разделителя в маршрутах доступа. Если вы хотите, чтобы в первом примере импорт производился при наличии обратной косой черты, нужно поставить дополнительную косую черту. Набор из двух косых черт (\\) интерпретируется как один символ обратной косой черты (\). Вот корректный пример строки с обратными косыми чертами: importFi I eAndOoIt ("С •.\\Temp\\mayaFi 1 е. mb");
Дополнительные возможности языка MEL В этом разделе вы найдете более совершенный анализ MEL-функций на примере трех функциональных алгоритмов (сценарий fitMorph.mel — один из многих сценариев, которые можно найти на сайте highend3d.com). Мы начнем с превосходного примера использования встроенных функций Maya и получения требуемого поведения во всех случаях. Наш сценарий гарантирован-
796
Приложение А - Обычные и дополнительные возможности языка MEL
но будет работать корректно. Разработчики Maya потратили массу усилий на написание подобных отладчиков. Однако вряд ли подобное может себе позволить один человек. Поэтому рекомендуем вам пользоваться для решения проблем встроенными функциями Maya. Никогда не следует заново «изобретать колесо». Рассматриваемая в данном разделе функция достаточно проста. Она ограничивает по типу Point (Точка) выделенные объекты (в обратном порядке, что связано с последовательным порядком выделения). Затем узел этого ограничения удаляется, а объекты выделяются в том же порядке, в котором они выделялись изначально. ПРИМЕЧАНИЕ В принципе для написания данной функции можно применять команду xform, но для примера больше подходит ограничитель. Тем более что команда xform часто фигурирует в других функциях данного сценария и вообще употребляется достаточно часто. global proc snapObjToObjO
// если количество выделенных объектов равно двум: // string $sel[] = "is -sT ;
if (size ($sel)!= 2) {
error "Select 2 geometry objects, the object to move. and the target object last.";
} // выделите их в обратном порядке: select -г $sel[l] $sel[0]; // свяжите объекты друг с другом с помощью ограничителя типа point. // а затем удалите его: string $pConstraints[] = "pointConstraint -weight Г: delete $pConstrauits[0]; select -r $sel[D] $sel[l]: // выделите -cl :
}
А вот пример решения проблемы отсутствия нужного сценария. В примере создается ограничение «габаритный контейнер», так как встроенное ограничение Scale (Масштабирование) использует числовые атрибуты масштаба объекта вместо его габаритного контейнера. Нам нужно было найти быстрый и не зависящий от масштаба способ совмещения двух объектов по размерам их габаритных контейнеров. Особая точность не требовалась, поэтому было использовано приближение в 0,1 единицы. Затем был организован цикл изменения масштаба объекта с выбранным приращением по каждой из осей, до тех пор пока размер габаритного контейнера объекта не окажется в диапазоне этого приращения. Это достаточно простой алгоритм, однако для него в Maya не существует встроенного сценария. global proc boundingBoxFitter( string $object. string Star-get }
( // массив буферов габаритных контейнеров float $bbox[6]:
Дополнительные возможности языка MEL //исходный габаритный контейнер объекта eval ("select -r "+$object); Sbbox = 'xform -q -ws -bb"; float SsizeX = $bbox[3] - $bbox[0]: float SsizeY = $bbox[4] - $bbox[l]: float SslzeZ - $bbox[5] - $bbox[2]; // опорный габаритный контейнер select -r $target; $bbox - 'xform -q -ws -bb': float StargetX = $bbox[3] - $bbox[0]; float StargetY = $bbox[4] - $bbox[l]; float StargetZ - $bbox[5] - $bbox[2]: // согласование габаритных контейнеров в пределах заданного диапазона // float Sincrmnt = .1; // В цикле каждый объект масштабируется относительно определенной // оси. пока разница не станет меньше или равна 0.15: // согласуйте х-координату габаритного контейнера while С (abs($s1zeX - StargetX) >- .15 ) && (abs($targetX - SsizeX) >= .15 )){ eval ("select -r "+$object): If (StargetX < SsizeX) scale -r (1-Sincrmnt) 1 1 ; if (StargetX > SsizeX) scale -r (1+Sincrmnt) 1 1 : eval ("select -r "+$object); $bbox = 'xforra -q -ws -bb'; SsizeX - $bbox[3] - SbboxtO]: select -r Starget; Sbbox - 'xform -q -ws -bb'; StargetX = $bbox[3] - $bbox[0]:
;
// согласуйте у-координату габаритного контейнера while С (abs<SsizeY - StargetY) >= .15 ) && (abs($targetY - SsizeY) >« .15 )){ eval ("select -r "+$object): if (StargetY < SsizeY} scale -r 1 (l-$incrmnt} 1 : if (StargetY > SsizeY) scale -r 1 (l+Sincrmnt) 1 ; eval ("select -r '4$object): Sbbox - 'xform -q -ws -bb': SsizeY = $bbox[4] - Sbbox[1]; select -r Starget: Sbbox - 'xform -q -ws -bb'; StargetY = $bbox[4] - $bbox[l]:
I // согласуйте z-координату габаритного контейнера while ( (abs($sizeZ - StargetZ) >= .15 ) &&
797
798
Приложение А • Обычные и дополнительные возможности языка MEL
(abs($targetZ - SsizeZ) >= .15 )){ eval ("select -r "+$object>: if {StargetZ < $s1zeZ) scale -r 1 1 (l-$lncrmnt) ; If CStargetZ > JsizeZ) scale -r 1 1 (l+$1ncrmt) ; eval ("select -r "+$object); Sbbox = 'xform -q -ws -bb'; SsizeZ • $bbox[5] - $bbox[2]; select -r Stargeit; Ibbox - 'xform -q -ws -bb'; EtargetZ - $bbox[5] - $bbox[2]:
Дальше вы увидите сердце этого сценария. У нас часто пытались узнать по электронной почте, как был написан этот сценарий. Откроем вам секрет. Это замечательный пример сочетания функциональности Maya и специальных приемов. Эта функция берет единичную вершину и поверхность, а затем привязывает эту вершину к ближайшей точке этой поверхности. Поговорим немного о том, как этого достичь. Начнем с того, что можно использовать NURBS-поверхности, полигоны или иерархические поверхности. Подойдет и любой другой тип поверхности, который будет изобретен в будущем, — такая возможность предусмотрена. Как добиться подобного результата? Известно, как ведут себя геометрические ограничения в Maya, и именно об их реализации нужно было думать, чтобы решить задачу. Если геометрическое ограничение совместимо с определенным типом геометрии, значит, с ним можно работать. ПРИМЕЧАНИЕ Если вам когда-нибудь потребуется вычислить расстояние между двумя точками в трехмерном пространстве, достаточно посчитать, насколько отстоят друг от друга два вектора положения. Если вам требуется линейно вычислить, какой объект из списка находится к определенной точке ближе всего, достаточно создать двойной цикл в каждой группе объектов и просто сохранить имена тех двух объектов, которые возвращают кратчайшее расстояние. Подобные вычисления производятся медленно и требуют больших ресурсов. Поэтому лучше всего выполнять их с помощью программного интерфейса со ссылками на ячейки памяти, указателями и структурами данных, которые больше подходят для расчетов подобного рода. В принципе ничего страшного не произойдет, если эти вычисления будут проведены в MEL, если, конечно, вам не придется выполнять их по кадрам и неоднократно. Узел, называемый closestPointOnSurface, позволяет исследовать подобные вещи (достаточно ввести команду createNode closestPointOnSurface).
Единственным недостатком геометрических ограничений является тот факт, что они не работают с типами вершин. Следовательно, все, что должны делать функции, чтобы обойти этот недостаток, — точно связывать нулевой узел группы с местоположением вершины. Затем выполняется геометрическое ограничение этого нулевого узла и перемещение вершины на новое место, в котором нулевой узел окажется после назначения ограничения. Когда в этой функции появляется цикл, перебирающий все выделенные вершины, происходит привязка этих вершин к объекту, и это основная проблема, которую нужно было решить. Кроме всего прочего, это хороший пример разбиения крупной проблемы на ряд мелких, решения которых могут быть с легкостью представлены обобщенными функциями, допускающими многократное использование.
Написание деформатора
799
global ргос float[] snapToClosestPointOnSurfaceC string Svertex. string Jsurface) I
// // // // // //
Программа для вычисления ближайшей точки поверхности путем применения встроенной в Maya системы ограничений; Это освобождает нас от необходимости создавать цикл для просмотра всех вершин и сравнения расстояний между двумя позиционными векторами. За вас это делает алгоритм геометрических ограничений:
float 51ocation[3] - 'xfonn -ws -q -t Svertex'; // создание нулевого узла и помещение его вместо расположения вершины: string Snull - 'group -em'; xform -os -piv 0 0 0 ; xform -ws -t $location[0] $location[l] $location[2j; select -r $surface Jnull; // создание из нулевого узла геометрического ограничения на поверхности string $geoConst[] = 'geometryConstraint -weight Г; clear ( Jlocation ); It узнаем новое положение: Slocation = 'xform -ws -q -t $geoConst[0]'; select -r Svertex; // перемещаем вершину в это положение: xform -ws -t $location[0] tlocation[l] $1ocation[2]; // удаляем нулевой узел: delete $null: // возвращаем положение: return ( Slocation );
I Пример использования; snapToClosestPointOnSurfaceC"pCubel.vtx[5]". "pSpherel"):
Полный код сценария fitMorph.mel находится на прилагаемом к книге компактдиске. Данные для примера функции являются основой единственного реального алгоритма в сценарии. Остальные функции представляют собой всего лишь код пользовательского интерфейса, функции оболочки для ранее задействовавшихея кнопок пользовательского интерфейса или код обработки ошибок. Внимательно исследуйте остальные функции, чтобы получить представление об объеме дополнительного кода, который требуется для запуска сценария с простым пользовательским интерфейсом и парой простых операций по вызову базовых функций. Окончательная первая версия сценария насчитывала около 500 строк кода, что вовсе не плохо для такой замечательной вещи.
Написание деформатора Прикладной программный интерфейс Maya является объектно-ориентированным, написан на языке C++ и построен по принципу фабрик классов. При использовании программного интерфейса, написанного на языке, отличном от C++, важно знать принципы построения этого языка.
800
Приложение А • Обычные и дополнительные возможности языка MEL
На случай, если вы не знакомы с объектно-ориентированным программированием или механизмом наследования, перегрузкой операторов или виртуальными функциями, дадим короткое пояснение. Оно должно дать вам основные представления о языке C++ и сущности объектно-ориентированного программирования. Вы получите достаточно информации, чтобы написать узел деформатора. Но если вы хотите научиться самостоятельно создавать различные подключаемые модули, настоятельно рекомендуем вам почитать какую-нибудь хорошую книгу по языку C++, а может быть даже взять несколько уроков. Парадигма объектно-ориентированного программирования базируется на принципе, что все в этом мире существует в виде отдельных объектов. Различные вещи состоят из различных объектов, скомбинированных друг с другом. Кирпич представляет собой объект, а когда вы кладете рядом набор кирпичей, скрепляя их цементом и водой, получается кирпичная стена, то есть другой объект. Все объекты состоят из данных и обладают определенным поведением. Рассмотрим, к примеру, цемент. При смешении с водой он формирует вязкую жидкость, которая может применяться в качестве клея, Объекты в C++ представлены ключевым словом class. Классы состоят из данных любого типа уровня модуля или проекта, а также из унаследованных и программноопределенных функций, которые могут управлять данными классов. Объекты в программном интерфейсе C++ могут иметь так называемые базовые классы. Базовым называется класс, свойства которого можно унаследовать, получив заданное по умолчанию поведение этого класса. Для привнесения в Maya нужной вам функциональности нужно выполнить так называемую перегрузку виртуальных функций. В большинстве случаев она автоматически осуществляется компилятором. Для создания собственного подключаемого модуля вам достаточно переписать подходя щую функцию класса в соответствии со спецификациями в документации на программный интерфейс. Остальное компилятор сделает за вас, если включить корректные маршруты доступа ко всем файлам заголовков вашего кода. Используя инструкцию ^include, вы указываете компилятору, какой фрагмент внешнего кода следует взять, чтобы корректно обработать двоичный файл библиотеки. Так как в рассматриваемом примере вы наследуете свойства деформатора, вам потребуется включить файл заголовка для базового класса деформаторов. Файлы с расширением .mil представляют собой всего лишь двоичные библиотеки. Эти библиотеки динамически загружаются в Maya или в подключаемые модули Maya. ПРИМЕЧАНИЕ Компиляцией называется процесс превращения написанного вами кода на языке высокого уровня в биты и байты, которые компьютер может распознать в качестве инструкций для запуска процесса. Вам потребуется компилятор в соответствии с языком, на котором написана программа (в данном случае C++), а также подходящая операционная система. Кроне того, вместе с Maya нужно установить комплект программного обеспечения для разработки приложений. Перед тем как приступить к написанию подключаемого модуля, нужно выяснить, как работать с компилятором. Так как существует множество различных компиляторов, мы не будем останавливаться на всех этих моментах. Детали работы с установленным у вас компилятором можно узнать в справочной документации. Мы использовали компилятор Microsoft Visual Studio C++ 6.0 под управлением Microsoft Windows 2000 Professional, а чтобы добавить и связать маршруты доступа, достаточно было нажать комбинацию клавиш A11+F7.
Прикладной программный интерфейс Maya представлен несколькими надежными классами. Это достаточно солидный инструмент, применяемый программи-
Написание деформатора
801
стами как в индустрии игр, так и в киноиндустрии. При его создании была проделана немалая работа, так что теперь написание вашего собственного узла или деформатора представляет собой простое наследование одного из базовых классов. Поэтому вместо дальнейшего рассмотрения программирования на О + и принципов объемно-ориентированных конструкций, что, вообще говоря, выходит за рамки темы данной книги, перейдем к конкретному примеру. Внимательно исследуйте нижеприведенный код, создающий в Maya простой, но нужный деформатор. Это код подключаемого модуля rippleDeformer. Он находится в файле rippleDeformer.cpp на прилагаемом к книге компакт-диске. Туда включены весь проект Visual Studio и рабочая среда (dsp- и dsw-файлы) на случай, если вы работаете под Windows. Вы сможете открыть этот проект в Visual Studio C++ 6.0 и скомпилировать его непосредственно оттуда.
// Эти инструкции дают понять компилятору, какой код следует // включить в вычисления автоматически а процессе компиляции
^include <stnng.h> #include ^include <math.h> #i include <maya/MPxDeformerNode.h> ^include <maya/MItGeometry.h> ^include #include ^include #include
<maya/MTyppId.h> <maya/MPlug.h> <maya/MDataBlock.h> <maya/MDataHandle.h>
#i ncl ude #include llnclude #1nclude
<maya /MFnNumerl cAtt ri bute . n> <maya/MFnEnumAttnbute.h> <maya/MFnP1ug1n.h> <maya/MFnDependencyNode.h>
#1nclude <maya/HPoint.h> // #inc1ude <5naya/MMatrix.h>
// макрос обработки ошибок: // ^define McheckErr(stat.msg}\ If ( MS::kSuccess !- stat > { \ cerr « msg: \ return MS: -.kFallure: \ 1 llllitHUttnUUUIilllillllllitlUUHHI
802
Приложение А • Обычные и дополнительные возможности языка MEL
// Наследование от узла MPxDeformerNode Maya для создания // производного обьекта класса деформаторов: //
class ripple : public MPxDeformerNode { public: rippleO: virtual -rippleO: static void* creatorO; static MStatus initializeO:
// Функция деформации // virtual MStatus deform ( MDataBlockS block. MItGeometry& iter. const MMatrixS mat, s i z e t multilndex );
II Атрибуты дефорнатора Ripple (эти объекты в действительности // представляют атрибуты, создаваемые самим узлом дефориатора) U static MQbject rippleXtype: static MObject rippleXx; static MQbject rippleXy; static MObject rlppleXz: static MObject rippleYtype: static MObject rippleYx; static MObject rippleYy: static MObject rippleYz: static MObject rippleZtype; static MObject rippleZx: static MObject "ippleZy: static MObject "MppleZz; static MObject amplitude: static MObject frequency: static MObject multiplier:
Написание деформатора static MObject waveScale: static MObject offsetX; static MObject offsetY; static MObject offsetZ: static MTypeld id; private: // I! закрытых членов класса нет II }•• MTypeld ripple: :id( ОхбОООе ):
HHIHIUH
II определения глобальных атрибутов; // MObject ripple: :ripp1eXtype; MObject ripple: irippleXx: MObject ripple: '.rippleXy; MObject ripple: :rippleXz: MObject ripple: :rippleYtype; MObject ripple: :rippleYx; MObject ripple: :rippleYy: MObject ripple: :rippleYz: MObject ripple: :rippleZtype; MObject ripple: :rippleZx; MObject ri ppl e : : ri ppl eZy ; MObject ripple: :rippleZz: MObject ri ppl e : : ampl i tude ; MObject ripple: frequency; MObject ripple: multiplier; MObject ripple: :waveScale: MObject ripple: :offsetX; MObject ripple: :offsetY; MObject ripple: roffsetZ:
// Конструктор;
803
804
Приложение А • Обычные и дополнительные возможности языка MEL
npple::npple(){}
// Деструктор: ripple: :~ripp1e(}{] Hillltlllllilli II Формирователь... тут используется оператор new, помогающий // с распределением динамической памяти: void* ripple: :creator(){ return new rippleO: }
// Инициализация и создание внутренних атрибутов узла деформатора // эта функция вызывается при первом создании деформатора. перед // вызовом функции deform:
// MStatus ripple: :1n1t1al1ze()
E
// // Создайте набор объектов атрибутов функции: // MFnNumericAttnbute nAttr: HFnEnumAttrlbute eAttr;
// Создайте и задайте свойства с помощью // функций класса MFnNumericAttnbute: // rlppleXtype = eAttr. create( "rippleXType". "rxt" ): eAttr. addFielcU "sine". 0): eAttr. addFi el d( "cosine". 1): eAttr . setKeyabl e(t rue) ; eAttr . setStorabl e( true) ; eAttr . setReadabl e( true) ; eAttr. setWri tabl eC true) ; rippleXx - nAttr. c r eate( "rippleXx". "rxx". MFnNumericData: :kDouble }, nAttr. setDefaultC. 33); nAttr. setSoftMin(-l.O): nAttr. setSoftMax(l.Q); nAttr, setKeyable(true); nAttr . setStorabl e( true) ; nAttr . setReadabl e( true) : nAttr. setWritable(true): rippleXy = nAttr .create( "rippleXy". "rxy", MFnNumericData: :kDouble }; nAttr. setDefaultC. 33): nAttr. setSoftMinC-1,0): nAttr, setSoftMax(l.O):
Написание деформатора nAttr.setKeyable(true); nAttr.setStorable(true); nAttr.setReadable(tme); nAttr.setWritabled; rue); rippleXz - nAttr.createC "rippleXz", Y x z " . MFnNumericData:ikDouble ) nAttr.setDefaultC.33): nAttr.setSoftMin(-l.O); nAttr.setSoftMax(l.O): nAttr.setKeyable(true); nAttr.setStorableCtrue): nAttr,setReadableCtrue);
nAttr,setWritableCtrue); rippleYtype = eAttr.createC "rlppleYType", "ryt". 1 ): eAttr.addFieldC "sine", 0); eAttr,addFieldC "cosine". 1); eAttr.setKeyabl eCtrue); eAttr.setStorable(true): eAttr.setReadable(true): eAttr.setWritable(true): rlppleYx - nAttr.create( "rippleYx", 'ryx". MFnNumerlcOata:;kOouble ): nAttr.setDefaultC.33); nAttr.setSoftMin(-l.O): nAttr.setSoftMax(l.O): nAttr.setKeyable(true); nAttr.setStorable(true); nAttr.setReadable(true); nAttr.setWritable(true); rlppleYy = nAttr.createC "nppleYy", 'ryy". MFnNumericData:ikDouble ) nAttr.setDefault(.33); nAttr.setSoftMin(-l.Q); nAttr.setSoftMax(l.O): nAttr.setKeyable(true); nAttr.setStorable(true); nAttr.setReadableCtrue); nAttr.setWritable(true); rippleYz •= nAttr.create( YlppleYz". "ryz", MFnNumericData::kDouble ) nAttr.setDefaultC.33): nAttr.setSoftMin(-l.O): nAttr.setSoftMaxCl.O): nAttr.setKeyable(true); nAttr.setStorable(true); nAttr.setReadableCtrue); nAttr.setWritableCtrue): rippleZtype = eAttr.createC "rippleZType", "rzt" ):
805
806
Приложение А • Обычные и дополнительные возможности языка MEL
eAttr.addFieldt "sine". 0): eAttr.addFieldC "cosine", 1); eAttr.setKeyable(true): eAttr.setStorableCtrue); eAttг.setReadable(true): eAttr.setWritablettnje): rippleZx * nAttr.createC "rippleZx", 'rzx". MFnNumericData::kDouble nAttr.setDefault(.33); nAttr.setSoftMin(-l.Q): nAttr.setSoftMax(l.O); nAttr.setKeyable(true): nAttr.setStorable(true): nAttr.setReadable(true); riAttr.setWri tablet true): rippleZy = nAttr.createC "rippleZy". 'rzy", MFnNumericData::kDouble ) nAttr.setOefault(.33); nAttr.setSoftMinC-1.0); nAttr.setSoftMax(l.O); nAttr.setKeyable(true); nAttr.setStorable(true);
nAttr.setReadable(true): nAttr.setWritablettrue); rippleZz = nAttr.createt "rippleZz". "rzz", MFnNumericData::kDoub1e ): nAttr.setDefault(.33): nAttr.setSoftMin(-l.O): nAttr.setSoftMax(l.O): nAttr.setKeyable(true): nAttr.setStorableCtrue); nAttr.setReadable(true); nAttr.setWritable(true); amplitude = nAttr.createf "ripplePower". "amp". MFnNumericData::kDouble ); nAttr.setDefaultCO.O): nAttr.setSoftM1nC-1.5): nAttr.setSoftMax(l.S); nAttr.setKeyablettrue): nAttr.setStorable(true): nAttr.setReadable(true); nAttr.setWri tab!e(true): frequency = nAttr.createC "frequency", "frq", MFnNumericData:ikOouble ): nAttr.setDefault(99.0): nAttr.setSoftMin(-lOOOO.O); nAttr.setSoftMax(10000.0);
nAttr.setKeyable(true): nAttr.setStorableCtrue); nAttr.setReadable(true);
Написание деформатора
nAttr.setWritable(true); multiplier = nAttr.createt "multiplier", "mlt". MFnNumericOata:ikDouble ) nAttr.setDefault(l.O); nAttr. setSoftMin(-lOO.O): nAttr.setSoftMax(100.0};
nAttr.setKeyable(true): nAttr.setStoraule(true):
nAttr.setReadable(true): nAttr.setWritable(true); waveScale = nAttr.createC "waveScale". "wvs". MFnNumericData::kDouble ) nAttr.setDefault(l.Q): nAttr.setSoftMin(-lOO.O): nAttr.setSoftMax(lOO.O); nAttr.setKeyable(true): nAttr.setStorable(true); nAttr.setReadable(true); nAttr.setWritablettrue): offsetx = nAttr.createC "offsetX". 'osx", MFnKumericData::kDouble ) nAttr.setDefault(O.O): nAttr.setKeyable(true): nAttr.setStorable(true); nAttr.setReadable(true); nAttr.setWritable(true); offsetY = nAttr.createt "offsetY". "osy", MFnNumericData::kOouble ) nAttr.setDefault(O.O): nAttr.setKeyable(true); nAttr.setStorable(true); nAttr.setReadabl e(true): nAttr. setWntable(true); offsetZ = nAttr.create( "offsetZ". "osz". MFnNumericData-kDouble ) nAttr.setDefault(O.O): nAttr.setKeyable(true): nAttr.setStorable(true): nAttr.setReadable(true): nAttr.setWrltable(true);
U I! Добавьте атрибуты и укажите, на какие еще атрибуты // будут влиять объекты MObjects: // addAttributeC amplitude );
3ttributeAffects( ripple:tamplitude. ripple::outputGeom ): addAttributeC frequency ); attributeAffectst ripple: frequency, ripple::outputGeorn );
807
808
Приложение А • Обычные и дополнительные возможности языка MEL
addAttributeC multiplier ); attributeAffects( ripple:multiplier, npple: :outputGeom ): addAttribute( waveScale ); attributeAffects( ripple: :waveScale, ripple: :OLitputGeom ): addAttrlbuteC rippleXtype ); attributeAffectsC ripple::rippleXtype. ripple::outputGeom ); addAttributeC rippieXx ): attributeAffects( ripple::r1ppleXx. ripple::outputGeom ); addAttributeC rippleXy ); attributeAffectsC ripple::rippleXy, ripple::outputGeom ); addAttributeC rippleXz }; attributeAffects( ripple:rrippleXz. ripple::outputGeom ); addAttributeC rippleYtype ); attributeAffectsC ripple::rippleYtype. ripple::outputGeom ): addAttributeC rippleVx }; attributeAffectsC ripple::rippleYx. ripple::outputGeom ): addAttributeC rippleYy ); attributeAffectsC ripple::rippleYy, ripple::outputGeom ); addAttributeC rippleYz ); attributeAffectsC ripple::rippleYz, ripple::outputGeom ); addAttributeC rippleZtype }; attributeAffectsC ripple::rippleZtype. ripple::outputGeom ): addAttributeC rippleZx ); attributeAffectsC npple: :rippleZx. ripple: :outputGeom ); addAttributeC rippleZy ): attributeAffectsC ripple::rippleZy. ripple::outputGeom ); addAttributeC rippleZ2 ); attributeAffectsC ripple: :nppleZz. ripple: :outputGeoni ); addAttributeC offsetx ); attributeAffectsC ripple::offsetX, ripple::outputGeom ); addAttributeC offsetY ); attributeAffectsC ripple::offsetY. ripple::outputGeom ): addAttributeC offsetZ ); attributeAffectsC ripple::offsetZ. ripple::outputGeom );
Написание деформатора return HS::kSuccess:
// "deform" перегруженные члены: // Эта функция вызывается каждый раз, когда узел деформатора получает // сообщение, что входящие данные изменились и. следовательно, требуются // повторные вычисления для обновления выходных данных, // Эта функция является "мозгом" узла иуказывает способ деформации вершин: // Аргументы: // block: блок данных узла (содержит асе доступные узлу данные, включая его // атрибуты и все связанные с ним надстройки) II Her: итератор для деформируемой геометрии (все это связано с вершинами // объектов) // // // //
m : матрица преобразования точки в глобальном пространстве (только умножение точки на матрицу приводит к переходу ее в глобальную систему координат) multilndex: номер деформируемого геометрического элемента
MStatus ripple::deform( MDataBlockS block. MItGeometry& iter, const MMatrlxS m, size_t multilndex )
I
MStatus status = MS::kSuccess: // Получение значений атрибутов цеформатора: MDataHandle ripXtypeData = block.1nputValue(rippleXtype, Sstatus): McheckErrfstatus. "Error getting rippleXtype data handle.\n"); short ripxtype = ripXtypeData.asShortO: MDataHandle rxxData = block.inputValue(rippleXx. Sstatus): McheckErr(status. "Error getting rippleXx data handle.\n"h double rxx = rxxData.asDoubleO: MDataHandle rxyData - block.inputValue(rippleXy. Sstatus); McheckErr(status. "Error getting nppleXy data handle.\n"): double rxy = rxyData.asDoubleO; MDataHandle rxzData = block.inputValueCrippleXz, Sstatus); McheckErr(status, "Error getting rippleXz data handle.\n"); double rxz = rxzData.asDoubleO: MDataHandle ripYtypeData - block.inputValuetrlppleYtype. ^status); McheckErrtstatus, "Error getting rippleYtype data handle.\n"): short ripYtype = ripYtypeData.asShortO;
809
810
Приложение А • Обычные и дополнительные возможности языка MEL
MDataHandle ryxData = block.inputValue(nppleYx. &status); McheckErrCstatus, "Error getting MppleYx data handleAn"): double ryx = ryxData. asDoubleO: MDataHandle ryyData = block,inputValueCrippleYy, Sstatus): McheckErr(status. "Error getting rlppleYy data handle.\n"); double ryy = ryyData.asDoubleC): MDataHandle ryzData - block.inputValuefrippleYz, Sstatus); McheckErrCstatus. "Error getting rippleYz data handle.\n"): double ryz = ryzData. asDoubleO; MDataHandle ripZtypeData = block.inputValuefrippleZtype, Sstatus) McheckErr(status, "Error getting rippleZtype data handle.W); short ripZtype = ripZtypeData.asShortO: MDataHandle rzxData = block.inputValue(rippleZx. Sstatus); McheckErr(status. "Error getting rippleZx data handle,\n"); double rzx = rzxData.asDoubleO; MDataHandle rzyData = block.inputValue{nppleZy. &status): McheckErr(status. "Error getting rippleZy data handle.\n"): double rzy = rzyData.asDoubleO; MDataHandle rzzData = block.InputValueCrippleZz. Sstatus); McheckErrCstatus. "Error getting rippleZz data handle.\n"J: double rzz = rzzData.asDoubleC): MDataHandle ampData = block.inputValuetamplitude. SstatusJ: McheckErrCstatus. "Error getting amplitude data handle.\n"J; double amp = ampData.asDoubleO; MDataHandle freqData = block.InputValueCfrequency. Sstatus); McheckErr(status. "Error getting frequency data handle.\n"); double magnitude = freqData.asDoubleO; MDataHandle multData - block.inputValue(multiplier. Sstatus); McheckErr(status. "Error getting multiplier data handle.\n"): double mult = multData.asOouble(); MDataHandle wScaleData •= block.inputValueCwaveScale. Sstatus): McheckErrfstatus. "Error getting waveScale data handle.\n"): double wScale - wScaleData.asDoubleO: MDataHandle osxOata - block.InputValuefoffsetX. &status); McheckErrCstatus. "Error getting offsetX data handle.\n"); double osX = osxData.asDoubleO; MDataHandle osyData - block.inputValueCoffsetY. Sstatus): McheclcErrfstatus, "Error getting offsetY data handle.\n"):
Написание деформатора double osY - osyData.asDoubleO: MDataHandle oszData = block. inputValuetoffsetZ. &status); McfieckErrCstatus. "Error getting offsetZ data handle.Vn"); double osZ • oszData.asDoubleO; MDataHandle envQata - block. inputValue(envelope.Sstatus); McheckErrt status, "Error getting envelope data handleAn"); float env - envData.asHoatO:
// // // // // // // // // //
Алгоритм дефорнатора Ripple: Это микл. использующий функции итератора HItGeometry для восстановления в памяти положения текущей вершины и дпя перехода к следующей вершине Именно таким способом работают все деформаторы a Maya. Определяется положение точки, а затем оно меняется в соответствии с заданным алгоритмом. В данном случае используется нелинейное (но простое) уравнение для повторного вычисления нового положения точки на основе текущих атрибутов узла. Если текущие атрибуты нулевые, для каждой оси используется функция sin, если единичные - функция cos
for ( : liter. isDoneO; iter.nextO)
I
MPoint pt = iter.positionC MSpace: ikObject ); if (! ripxtype ) { pt.x - {pt.x + env * (( sin( (pt.x * rxx) +• (pt.y * rxy) + (pt.z * rxz) + magnitude * mult) * (amp/2) ) + Usin(pt.y-osX)* (amp/2) )+osX) )) * wScale;
} else if ( ripXtype — 1 ) { pt.x - (pt.x + env * (( cos{ {pt.x * rxx) + (pt.y * rxy) + (pt.z * rxz) + magnitude * mult) * (amp/2) ) + (Ccos(pt.y+osX)* (amp/2) )+osX) )) * wScale;
if (! ripYtype )
[
pt.y - (pt.y + env * (( sinC (pt.x * ryx) + (pt.y * ryy) + (pt.z * ryz) + magnitude * mult) * (amp/2) ) + ((sin(pt.z+osY)* (amp/2) )+osY) )) * wScale;
1 else if ( ripYtype — 1 ) I
pt.y - (pt.y + env * (( cos( (pt.x * ryx) + (pt.y * ryy) + (pt.z * ryz) + magnitude * mult) * (amp/2) } +
811
812
Приложение А • Обычные и дополнительные возможности языка MEL ((sin(pt.z+osY)* (amp/2) }+osY) )) * wScale;
I if (! rlpZtype ) { pt.z = ( pt.z •<- env * (C sin( (pt.x * rzx) + (pt.y * rzy) + (pt.z * rzz) + magnitude * mult) * (amp/2) ) + ((sin(pt.x+OE;Z)* (amp/2) )+osZ) }) * wScale: }
else if ( ripztype =* 1 ) { pt.z - ( pt.z + env * (( cos( (pt.x * rzx} + (pt.y * rzy) + (pt.z * rzz) + magnitude * mult) * (amp/2) ) +• t(sin(pt.x+osZ)* (amp/2) )+osZ) » * wScale;
:•
// задайте новое положение вершины: именно тут выполняется деформация // вершин и перемещение их в пространстве на новое место: iter.setPositiont pt, MSpace: :kObject ):
return status:
// Стандартная инициализация подключаемого модуля: // MStatus initializePluginf MObject obj ){' MStatus result; MFnPlugin plugin( obj. "www.erickmiller.com". "4.5", "Any"}; result •= pi ugln.registerNode( "ripple", ripple;:1d. ripple: rcreator. ripple::initialize. MPxNode: :ScDeformerNode ): // Настроим MEL -процесс на запуск при загрузке/выгрузке модуля result - plugin.registerUIC'sOLirce rippleDeformerCreateUI.mel : MppleDeformerCreateUl:". "rippleDeformerDeleteU!"}; if ('result) { result. perror("reg1sterUIScripts"); return result: J return result: MStatus uninitializePlugint MObject obj){ MStatus result: MFnPlugin plugint obj ); result - plugin.deregisterNodef ripple; :id ); return result;
Заключение
813
Для создания узла деформатора в Maya (после компиляции вышеуказанного кода на языке C++ и загрузки его в качестве подключаемого модуля) можно воспользоваться командой deformer. Вот пример; deformer -type ripple:
В качестве альтернативы подойдет команда createNode ripple, но команда deformer автоматически подключает деформатор к геометрии, поэтому рекомендуется применять именно ее. В примере с деформатором ripple мы пошли еще дальше и написали небольшой сценарий на языке MEL, который создает функцию rippleDeformerQ, а также соответствующий ей пункт в меню Deform (Деформация). Более подробную информацию о создании пользовательских пунктов меню вы найдете в главе 5. Примеры полной реализации, которые представляют собой всего лишь код пользовательского интерфейса и сценарий обработки ошибок, гарантирующий загрузку подключаемого модуля, вы найдете в файлах rippleDeformer.mel и rippleDeformerCreateUI.mel на прилагаемом к книге компакт-диске. Обратите внимание, что эти сценарии требуются только потому, что на них есть ссылка в коде функции initializePluginQ.
Заключение Предоставленные в этом приложении исходные тексты и идеи сфокусированы на общих проблемах, которые могут возникнуть при работе над проектами. Мы хотели всего лишь показать возможные решения проблем в максимально обобщенной форме. Практически любая проблема в Maya может быть решена либо написанием MEL-сценария, либо созданием команды/узла в прикладном программном интерфейсе. Возможности настройки архитектуры Maya в полной мере можно оценить только после многочасовых исследований и экспериментов.
Б
Список терминов
Ниже приведен список основных терминов, используемых в книге. Термин
Аббревиатура
Перевод
3D animation
Трехмерная анимация
Acting
Игра
Acting research
Исследование роли
Action
Действие
Action-safe
Безопасное действие
Ambient light
Рассеянный свет
Animatic
Первичная анимация
Antialiasing
Сглаживание
Anticipation
Предвосхищение
Anticipation, Secondary action, Arc, Follow-through, Exaggeration
A.S.A.RE.
Предвосхищение, вторичное действие, дуга, завершение, преувеличение
Application Programming Interface Arc
API
Прикладной программный интерфейс
Дуга
Articulation Automatic Puppet Utility
Артикуляция APU
Background light
Утилита оживления кукол Фоновый свет
Baking
Преобразование
Bevel
Скос
Big timing Binding
Глобальная синхронизация
Blend
Сопряжение
Blobby particle
Сферическая частица
Blobby surface
Блоб Квартал
Связывание
Block Block Order Texture
ВОТ
Блочный порядок текстуры
Blur
Размывание
Boning
Создание костей Разбиение
Breakdown
815
Список терминов
Термин Breaking Bump Bump map Business Catmull-Clark subdivision scheme Character Clipping Pane Ooud Color script Component Computer Assisted Production System Connection Constraint Construction layer Creasing Creature Creation Tools Curvature Curvature continuity Cut scene Dailies Deformer Dependency Graph Depth of field Directed Acyclic Graph
Directional light Dolly Edge Engine Exaggeration Exposure Expression Eye light Face Feature-based modeling Field rendering Fill light Fillet Final gathering Follow-through Forward Kinematics Frame Framing
Аббревиатура
Перевод Деформация
CAPS
CCT
Рельеф Карта рельефа Мимика Схема разбиения Катнул— Кларка Персонаж Плоскость отсечки Облако Цветовой сценарий Подобъект Автоматизированная производственная система Связь Ограничение Конструкционный слой Создание складок Инструменты для создания созданий Курватура, или кривизна Курватурная непрерывность Врезка Текущий съемочный материал Деформатор
DG DAG
FK
Граф зависимости Глубина резкости Направленный ациклический граф Направленный свет Наезд камерой Ребро Процессор Преувеличение Выдержка Выражение Подсветка глаз Грань Моделирование с учетом нюансов Послойная визуализации Заполняющий свет Сопряжение Конечный сбор Завершение Прямая кинематика Кадр Кадрирование
816 Термин
Приложение Б • Список терминов
Аббревиатура
Перевод
Freeze transform
Фиксация
Ghosting
Показ двойников
преобразований
Gimbal
Шарнир
Gimbal lock
Блокировка шарниров
Global illumination
Глобальная освещенность
Groove
Водосток
Hidden node
Скрытый узел
Hierarchy
Иерархия
High Dynamic Range
HDR
Широкий динамический диапазон
High Dynamic Range Image
HDRI
Изображение с широким динамическим диапазоном
Hotbox
Средства оперативного доступа к командам
Hull
Каркас
Illumination
Освещенность
Image plan Image-Based Lighting
IBL
Опорное изображение Базовое освещение изображения
Implicit surface
Неявная поверхность
Influence object
Объект влияния
Inverse Kinematics
IK
Обратная кинематика
Jet Propulsion Laboratory
JPL
Лаборатория реактивных двигателей
Joint
Сочленение
Key light Keyframe Kicker Knot
Ключевой свет Ключевой кадр
Выравнивающий свет Узловая точка
Layout
Компоновка
Lens flares
Светорассеяние в объективе
Limit surface
Предельная поверхность
Line of action
Линия действия
Locator
Локатор
Marking menu Maya Embedded Language
Контекстное меню MEL
Mesh
Встроенный язык Maya Сетка
Motion blur
Размывание в движении
Motion capture
Захват движения
Moving hold
Задержка движения
Node Nonuniform rational B-splines
Узел NURBS
Неоднородные рациональные В-сплайны
Octree
Октадерево
Orthographic line artwork
Ортогрэфическая проекция
Overlapping action
Вторичное движение
Particle instancing
Дублирование частиц
817
Список терминов
Термин
Patch modeling Physics Pinching Pivot Mug-in
Аббревиатура
Перевод Моделирование из фрагментов Физика Сморщивание Опорная точка
Point Cloud
Подключаемый модуль Облако точек
Polygon Polygon mesh Polygon proxy
Полигон Сетка полигонов Полигональная аппроксимация
Pose compensation Positional continuity
Равновесие поз
Post effect Postprocessing
Отложенный эффект Отложенная обработка Слой предварительной визуализации
Previs layer
Primary action Projection matrix Props Quaternion Radiosity
Позиционная непрерывность
Первичное действие Матрица проекций Реквизит Кватернион Перенос излучения
Radius of curvature Ray Tracing Reference image
Радиус кривизны
Reference layer Reference, Reference material Refining
Опорный слой Опорный материал
Трассировка лучей Опорный рисунок
Оптимизация
Reflectivity map Rendering Rigging
Карта отражений
Rim light
Кольцевой свет Скругление Образец
Round
Sample Script node Secondary action
Визуализация Сборка
Set
Узел сценария Вторичное действие Безопасность Набор объектов
Security
Set dressing
Оформление сцены
Shader
Материал
Shading Shading map
Назначение материала Карта материалов Сеть материалов Форма Узел формы
Shading network Shape Shape node
Приложение Б • Список терминов
818
Термин
Аббревиатура
Перевод
Shot
Полка Фрагмент
Sidewalk
Тротуар
Skeleton
Скелет
Skin
Телесная оболочка Оснащение оболочкой
Shelf
Skinning Slow in, slow out
Медленный старт с медленной остановкой
Small timing
Локальная синхронизация
Snapping Solver
Привязка Решатель
Span
Интервал
Specular map
Карта зеркальных бликов
Spotlight
Прожектор
Squash
Сдавливание
Stand-in
Заместитель
Storyboard Stretch
Раскадровка Вытягивание
Subdivision surface
Иерархическая поверхность
Tableau gag
Комический номер
Tangent continuity
Тангенциальная непрерывность
Tessellation
Заполнение
Timeline
Временная диаграмма
Timing
Синхронизация
Tracing
Трассировка
Track
Панорамирование
Transform
Преобразование
Transform node
Узел преобразования
Transformation matrix
Матрица преобразований
Trimming
Обрезка
Uncreasing Underworld node
Удаление складок Нижний узел
View
Окно проекции
Voxel
Вексель
Weight map
Карта весов
Weighted constraint
Взвешенное ограничение
Алфавитный указатель 3D Paint Tool, инструмент, 673 Add Dynamics Attributes, раздел, 438 Add Influence, команда, 650 Add Points, инструмент, 241 Advanced, вкладка, 561 After, переключатель, 785 Aim, ограничение, 376 Align Curves, инструмент, 272 All Inputs, команда, 354, 560 All Outputs, команда, 354 Alpha Source, список, 425 Amplitude, поле, 686 Angle, ползунок, 656 Animated, флажок, 686 Anisotropic, команда, 656 Annotation, команда, 545 Antialiasing Quality, раздел, 723, 741 Append to Polygon tool, инструмент, 171,282 Approximation Editor, команда, 745 Area, тип источника света, 689,715, 743 As Projection, переключатель, 702 Assign Existing Material, команда, 670 Assign Material to Selection, команда, 670, 702 Assign New Material, команда, 670 Attach, команда, 307 Attach Curves, команда, 226 Attach Surfaces, команда, 157,275,319 Attribute Name, поле, 366 Attribute Spread Sheet команда, 691 окно, 355 Attribute Spread Sheet, окно, 724 Auto Parent Curve, флажок, 581 Auto Simplify Curve, флажок, 387,581
Automatic Exposure, флажок, 722 Auxiliary Nodes, команда, 352
В
В-сплайн, 125 Backface Culling, список, 247 Background Color, цветовой образец, 676 Bake Shadows, флажок, 736 Ball, пункт списка, 702 Batch Render, команда, 687, 738 Beauty, пункт списка, 758 Bend, деформатор, 213 bevel, термин, 156 Bias, параметр, 726 Bind Skin, подменю, 581,644 Birail 3++ Tool, инструмент, 267 Blend Bias, параметр, 157 Blend Shape, деформатор, 560, 639 Blinn, пункт списка, 656 Blobby Surface, тип визуализации, 426,428 Border Edges, флажок, 252 Border Width, поле, 252 Bottom, переключатель, 668 Box Filter, фильтр, 724 Brightness, пункт списка, 662 By Frame, поле, 722,741 By Script Name Node, команда, 778 Calculate Bounding Box Scale, кнопка, 732 Camera, параметр, 741 Camera and Aim, пункт списка, 334 Camera Tools, подменю, 201 Cannel Control, команда, 366 Canvas, режим, 672
820 Cast Shadows, атрибут, 702 Casts Shadows, флажок, 408 catch, MEL-команда, 787 Caustic Accuracy, параметр, 751 Caustic Photons, параметр, 750 Caustic Radius, поле, 751 Caustics, флажок, 749 Caustics Generating, список, 750 Caustics Receiving, список, 750 Center, поле, 151 Center Pivot, команда, 242, 546 Center Zone Only, режим, 85 Channel Control, окно, 355, 548 Channels, параметр, 741 Checker, текстура, 667 Circular Fillet, инструмент, 233 Cleanup, команда, 545, 664 Clear Coat, утилита, 674 Cloth, текстура, 667 Cloud, тип визуализации, 427 Coarser, команда, 298 Collapse, команда, 176,250 Color, пункт списка, 759 Color Balance, раздел, 670 Color Gain, цветовой образец, 151,300,687 Color Input, список, 662 Color Offset, цветовой образец, 151,300,687 Combine, команда, 196,251 Command Line, команда, 96 Common Material Attributes, раздел, 659 Component Editor, команда, 390 Condition, узел, 613 Cone Angle, поле, 698 Conform, команда, 175,196, 562 Connection Editor, окно, 355,360, 667 Conserve, атрибут, 410 Constrain, меню, 3(31 Contents and Search, команда, 114 Continuity Type, группа переключателей, 271 Control Points, переключатель, 196, 246 Convert, подменю, 196 Convert Selection to Vertices, команда, 196 Convert to File Texture, команда, 667, 673, 733 Cosine Power, ползунок, 659
Алфавитный указатель
Coverage, поле, 725 Create Blend Shape Options, окно, 561 Create Cluster, команда, 391, 396, 559 Create Lattice, команда, 559 Create New Expression, команда, 704 Create New Tab, команда, 668 Create Render Node команда, 592 окно, 350, 666 Create Set, команда, 695 Create Soft Body, команда, 388 Creation Expression, команда, 449 Current Render Type, кнопка, 429 Custom Polygon Display, команда, 247 Custom Settings, команда, 267 Custom Text Editor, команда, 745 Cut Faces Tool, инструмент, 162,582 CV Curve Tool, инструмент, 225 Cylinder, пункт списка, 412 DAG Objects Only, команда, 353 Data Type, атрибут, 367 Decay Rate, список, 715 Default, поле, 367 Default Color, параметр, 670 Default Home, команда, 91 Deformation Order, список, 561,640 Delete All by Type, меню, 546 Delete by Type, подменю, 560 Delete Edge, команда, 250 Detach Curves, инструмент, 205, 270 Detach Surfaces, команда, 274 Device Aspect Ratio, поле, 336 Difference, команда, 175,282 Diffuse, пункт списка, 759 Directional, тип источника света, 447,689 Disk, переключатель, 668 Disk Based Dmaps, список, 740 Displacement Map, раздел, 732 Display Mode, список, 315 Display Overrides, раздел, 588 Display Render Tessellation Geometry, флажок, 421 Distance Tool, команда, 612 Divide, пункт списка, 592 Dmap Filter Size, поле, 697 Dmap Resolution, поле, 697 Dolly, команда, 91
Алфавитный указатель
Double Sided атрибут, 235 поле, 190 Draw Style, список, 676 Drawing Overrides, раздел, 556 Dropoff, поле, 682,698 Duplicate, Make Original Soft, пункт списка, 388 Duplicate, команда, 693 Duplicate Surface Curves, команда, 191,263 Dynamics, режим, 388 Eccentricity, ползунок, 656 Echo All Commands, команда, 101,103 Edge Antialiasing, список, 724 Edit Smooth Skin, подменю, 555,645 Emit from Object, команда, 447 emit, MEL-функция, 428 Emit Specular, флажок, 689, 698 Emitter Type, список, 447 Enable Depth Maps, флажок, 740 Enable Global Passes, флажок, 758 Enable Overrides, флажок, 557, 588 Enable Render Layers, флажок, 757,762 End Frame, поле, 687,741 End Sweep Angle, поле, 319 Energy, параметр, 751 Env Chrome, текстура, 674 Env Cube, текстура, 673 Environment, раздел, 663 Environment Fog, эффект, 743 Eular Filter, команда, 733 eval, MEL-команда, 102 Execute On, список, 781 Execute Script Node, флажок, 786 Expand All, команда, 397 Export Selected Network, команда, 669 Export Selection, команда, 215,237 Export Selection Options, окно, 547 Export Skin Weight Maps, команда, 555 Expression Editor команда, 778 окно, 440 Expressions After Dynamics, флажок, 431 Extend Surfaces, инструмент, 203 Extrude Edge, команда, 163 Extrude Face, кнопка, 296
821
Face, команда, 298 facePathSplit, MEL-команда, 162 Facing Ratio, поле, 357 Far Clip Plane, поле, 91 fcheck, утилита, 687 Field Dominance, параметр, 772 Field Options, параметр, 741 File, текстура, 702 File Name Prefix, параметр, 741 Fillet Blend, команда, 160 fillet, термин, 156 Film Back, раздел, 335 Film Gate, список, 335 Final Gather Rays, параметр, 755 Final Gather Rebuild, флажок, 755 Finer, команда, 298 Flipbooks, меню, 676 Flood, кнопка, 649 Fluid Effects, модуль, 202 Focal Length, поле, 335 Four Panes, команда, 571 Fractal, текстура, 686 Frame Padding, параметр, 741 Frame/Animation Ext, параметр, 741 Freeform Fillet, команда, 160 Freeze Transformations, команда, 343, 361,546,578 Freeze Transforms, команда, 242 Freshnel Index, ползунок, 656 Friction, поле, 408 Front of Chain, пункт списка, 561, 640 Full Crease Edge/Vertex, команда, 298 Full Image Resolution, флажок, 676 Gap Color, канал, 667 Gaussian Filter, фильтр, 724 Geometry, ограничение, 376 Geometry Mask, флажок, 420 Geometry Type, группа переключателей, 298 Gimbal, переключатель, 558 Global Ilium Accuracy, параметр, 752 Global Ilium Radius, параметр, 752 Global Illumination, флажок, 752 Global Stitch, инструмент, 287 Glow Intensity, поле, 674,718,722 Goal, команда, 437 Goal Smoothness, параметр, 389
Алфавитный указатель
822 Goal Weight, поле. 437 Graph Editor, окно, 339 Graph Network, команда, 703 Green Channel, пункт списка, 425 GUI Open/Close, пункт списка, 781
н
Halo Intensity, поле, 722 Hardware Render Buffer, окно, 420 Hardware Rendering Bufer, команда, 676, 723 Hardware Texturing, раздел, 671 Has no Effect, пункт списка, 561 Height, поле, 337 Hide Source, флажок, 722 Hide Ш Elements, команда, 86 Hide Unselected Objects, команда, 270 Highest Quality, пункт списка, 724 Highlight Size, параметр, 660 History, команда, 560 Hotkey Editor, диалоговое окно, 76 Hypergraph, окно, 343, 355 Hypershade, окно, 354, 656, 666 Icon Name, поле, 83, 293 IK Handle Too], инструмент, 577 IK Spline Handle, команда, 387 Illuminates by Default, флажок, 698 Image Format, параметр, 741 Image Plane, подменю, 300 Implied Tangent, переключатель, 271 Import Image, команда, 300 in all views, переключатель, 300 Incandescence, капал, 313 Include These Inputs, флажок, 547 Infinite, переключатель, 36 Inherits Transforms, флажок, 449 Initial Placement, группа переключателей, 668 Initial State, подменю, 399 Input and Output Connections, команда, 349,354,401,547,559 Input/Output, раздел, 354 Insert Isoparams, инструмент, 164 Insert Knot, флажок, 159,319 Insert Parameter, поле, 158 Instance, переключатель, 298 Instancer Options, раздел, 427 Integer, тип данных, 103
Intensity, параметр, 682, 755 Intermediate Object, флажок, 401 Interpolation, список, 662 Intersect Surfaces, инструмент, 233 Invisible Manips, команда, 151 IPR, визуализатор, 739 Irradiance, параметр, 755 Jerk_CharacterMainRoot, контроллер, 495 Jerk_ElvisControlBox, контроллер, 499 Jerk_headControlBox, контроллер, 503,504 Jerk_Hips And Partial RootControl, контроллер, 497 Jerk Jaw Control Box, контроллер, 504 Jerk_left_armlk, контроллер, 509 Jerk_left_armPoleVector, контроллер, 513 Jerk_left_clavicleControlNode, контроллер, 513 JerkJeft_reverseHeel, контроллер, 506 Jerk_MAIN_TRANSFORM, контроллер, 494 Joint Creation, инструмент, 552 Joint Tool, инструмент, 571,581
К Keep CVs, флажок, 159 Keep Faces Together, команда, 293 Keep Image, кнопка, 698 Keep Only a Reference, флажок, 215 Keyable, вкладка, 366 •
Labels & ToolTips, поле, 293 Lambert, пункт списка, 656 Lattice, деформатор, 213 Layer Editor, окно, 189 Layered, пункт списка, 657 Layouts, подменю, 571 Leaf Primitives, параметр, 726 Less Than, пункт списка, 615 Lifespan Mode, список, 429, 453 Light Angle, пункт списка, 662 Light Fog, эффект, 743 Light-centric, режим, 715 Linear Tangents, кнопка, 340 linstep, MEL-функция, 430
823
Алфавитный указатель
List All, кнопка, 76 Load Driver, кнопка, 369, 625 Local Rotation Axes, команда, 366, 572 Local Space, раздел, 223 Locator, команда, 578 Lock Device Aspect Ratio, флажок, 337 Lock Selected, команда, 366 Locked, флажок, 201 Loft, инструмент, 172,189, 233 Long Normals, команда, 307 Look at Selection, команда, 91 Look at, команда, 91 Look Through Selected, команда, 697
M mag, MEL-функция, 429 Magnitude, параметр, 411 Maintain Width/Height Ratio, флажок, 337 Make Collide, команда, 408 Make Hole Tool, инструмент, 171 Make Light Links, команда, 698,715 Make Non-Soft a Goal, флажок, 388 Max Distance, параметр, 414 Max Photon Depth, параметр, 752 Max Radius, параметр, 755 Max Shading, поле, 724 Maximum Memory, параметр, 731 Maximum, поле, 367 Maya Fur, модуль, 142 Measure Tools, подменю, 612 Memory and Performance Options, раздел, 726 Mental Ray, визуализатор, 690, 742 Merge Vertices, команда, 196, 252 Min Radius, параметр, 755 Minimum, поле, 367 Mipmap, фильтр, 734 Mirror, команда, 307 Mirror Weights, команда, 647 Mode, список, 562 Motion Blur Shadow Maps, флажок, 749 Motion Blur, флажок, 725 Move Normal Tool, инструмент, 202 Move Seam, инструмент, 172 Multilister, окно, 666 Multiply Divide, узел, 348,592,613 Multiply/Divide, узел, 350 Multipoints, тип визуализации, 419 Multistreaks, тип визуализации, 407,419
N Near Clip Plane, поле, 91 New Bookmark, команда, 183 New Curve Default, список, 558 New Script Node, кнопка, 778 New Shelf, команда, 291 New Tab Name, поле, 668 No Multiple Knots, переключатель, 267 noise, MEL-функция, 444 Noise, материал, 743 Nonmanifold Geometry, флажок, 545 Normal, ограничение, 377 Normals, подменю, 562 Notes, поле, 545 Numeric, тип визуализации, 443 NURBS, поверхность, 124 NURBS Components, подменю, 347 NURBS Curves, команда, 585 NURBS to Polygons, команда, 196,246 Object Display, раздел, 401 Object-centric, режим, 715 Ocean, материал, 743 Ocean Attributes, раздел, 659 Ocean Shader, пункт списка, 659 Opacity, параметр, 433 opacityPP, атрибут, 431 Open Options, окно, 786 Open Script, команда, 100 Open/Close Curves, инструмент, 241 Operation, список, 592 Optimize Instances, параметр, 731 Optimize Scene Size, команда, 547 Orient, ограничение, 376 Orient Joint, команда, 551,572 Orthographic Views, раздел, 201 Out Color, параметр, 702 Out Matte Opacity, параметр, 760 Output, окно, 722 Output Geometry Type, группа переключателей, 290 Output to Subdirectories, флажок, 758,762 Oversampling, параметр, 414 Paint Effects, модуль, 141 Paint Skin Weight Tool, команда, 645
824
Алфавитный указатель
Quadratic, фильтр, 734 Quality, список, 724 Queue Size, поле, 36 Quick Select Set, команда, 643 QuickTime, программа, 51
Ramp Shader, пункт списка, 660 Random Range, пункт списка, 453 Ray Depth Limit, параметр, 726 Raytracing Quality, параметр, 741 Rebuild Surfaces, команда, 159, 267 Receive Shadows, атрибут, 702 Recursion Depth, параметр, 726 Reference Editor, окно, 216 Refine, команда, 298, 305 Reflected Color, параметр, 674 Reflection Specularity, команда, 700 Reflections, параметр, 725 Reflectivity, параметр, 762 Refractions, флажок, 725, 726 Relative Entry, режим, 189 Reload Left, кнопка, 362 Render Active, пункт списка, 739 Render Diagnostics, команда, 737 Render Global Settings, окно, 723 Render Layer/Pass Control, параметр, 741 Render Modes, раздел, 420 Render Options, параметр, 741 Render Sequence, команда, 676 Render Using, список, 747 Render View, окно, 682 Renderable Objects, список, 739, 741 Replace, режим, 647 Reset Tool, кнопка, 581 Resilience, поле, 408 Resolution, параметр, 741 Resolution Gate, команда, 336 Restore UI Elements, команда, 86 Reuse Tessellation, параметр, 732 Reverse, команда, 175,408,562 Reverse and Propagate, пункт списка, 562 Reverse Surface Direction, команда, 190, 235 Revolve, команда, 191,226 Root Directory, поле, 669 Rotate Mode, группа переключателей, 558 Roughness, параметр, 656, 660 round, термин, 156 Runtime Expression, команда, 449
radiusPP, атрибут, 427,431 Ramp, материал, 743
Safe Action, команда, 337 Safe Title, команда, 337
Parent команда, 343 ограничение, 376 Parent to World, переключатель, 191 Particle Render Type, список, 429 Particle Sampler, кнопка, 433 Penumbra Angle, поле, 698 Per-Point Emission Rates, команда, 447 Phong, пункт списка, 659 Photon Map Rebuild, поле, 751 Pivot, группа переключателей, 191 Pivots, раздел, 223 Pixel Filter Type, список, 724 Point команда, 361,373,579 ограничение, 376, 557 Pole Vector команда, 579 ограничение, 377 Polygon, команда, 298 Polygon Components, подменю, 347 Polygon Cube Options, окно, 292 Polygon Proxy Mode, команда, 644 Polygon Set Vertex Normal Options, окно, 545 Polygon Transfer Options, окно, 402 Polygons to Subdiv, команда, 196, 251 Prefix Hierarchy Names, команда, 379,579 Premultiply, флажок, 758 Preserve Position, флажок, 192 Preset Blending, инструмент, 672 Presets, список, 336 Preview Quality, пункт списка, 724 Primary Visibility, флажок, 408, 758 print, MEL-команда, 103 Proj Type, список, 702 Project Curve on Surface, инструмент, 279 Prune Small Weights, команда, 645
Алфавитный указатель
Sampler Info, элемент, 357 Save All Shelves, кнопка, 293 Save Settings, команда, 293 Scale ограничение, 376 инструмент, 535 Scale Compensate, флажок, 591 Scene Hierarchy, режим, 602 Script Editor, окно, 96, 777 Script Node Name, поле, 778 scriptjob, MEL-команда, 96, 783 scriptNode, MEL-команда, 96 Section Spans, поле, 264 Segement Scale Compensate, флажок, 551 Select, команда, 298 Select by component type, кнопка, 345, 390 Select Camera, подменю, 334 Select Contiguous Edges, инструмент, 282 Select Filter, меню, 778 Selected Joints, пункт списка, 644 Selection Handles, команда, 641 Separate, команда, 584 Set, команда, 625 Set Driven Key окно, 360,368 подменю, 625 Set for Selected, команда, 399 Set Key, команда, 686 Set Vertex Normals, команда, 545,562 Shading, поле, 724 Shading Network, команда, 703 Shading Samples Override, параметр, 724 Shadow Color, цветовой образец, 697 Shadow, пункт списка, 759 Shadows, параметр, 726, 740 Shape Nodes, команда, 643 Shelf Content, вкладка, 293 Shelf Editor, команда, 293 Show Line Numbers, команда, 101,103 Show Selection, команда, 395 Show Stack Trace, команда, 101,103 Skeleton, меню, 387,551,571 Skin, меню, 581 Sky Color, параметр, 674 Sky Zenith, параметр, 674
825 Smooth команда, 293,559 режим, 647 Smooth Bind, команда, 581,644 Smooth Edges, флажок, 730 Smooth Shaded, пункт списка, 676 Smooth Skins, вкладка, 598 Snap Rotate, флажок, 297 Soft/Rigid Bodies, меню, 388 Source Images, папка, 669 Source Script, команда, 99 Special Effects, раздел, 722 Specular, пункт списка, 759 Specular Roll Off, ползунок, 656 Specular Shading, раздел, 656 Split Polygon Tool, команда, 303 Split Polygon, инструмент, 162,171 Spread, параметр, 405 Spread X/Y, ползунок, 656 Sprites, тип визуализации, 416 Square, команда, 270 Start Frame, поле, 687,741 Start Sweep Angle, поле, 319 Step, режим, 340 Step Size, поле, 297 string, ключевое слово, 102 Subdiv Surface Components, подменю, 316 Subdiv Surfaces, переключатель, 290 Subdivision Power, параметр, 727 Subdivisions Along Width, поле, 292 Subdivisions Width, поле, 300 Subtract, пункт списка, 615 Surface Origins, команда, 443 Surface Shader, материал, 702, 755, 760 Switch Node, свойство, 667 Tab Type, группа переключателей, 668 Tabs, меню, 668 Take Settings from Maya, кнопка, 746 Tangent ограничение, 377 переключатель, 271 Template, режим, 153 Tessellation, раздел, 730 Tessellation Method, группа переключателей, 196, 246 Texture Quality, список, 671 Threshold, поле, 307
826 Time, поле, 686 Tool Options, подменю, 293 Trace Depth, поле, 439 Track, команда, 91 Transfer, команда, 402 Transform icons, флажок, 676 Transformation Tools, подменю, 297 Transparency, параметр, 433, 703 Trim, инструмент. 280 Trim Tool, инструмент, 233 Tube, тип визуализации, 428 Tumble, команда, 91 Tweak, деформатор, 561 Type, список, 656
и
U/V Color, канал, 667 UI Elements, команда, 291 Undo, команда, 301 Uniform, команда, 412 Union, команда, 175, 247 unit, MEL-функция, 429 Unknown, тип, 352 Unlock Normals, флажок, 545, 563 Unparent Method, группа переключателей, 191 Unparent, команда, 578 Up Axis, группа переключателей, 334 Use Background, материал, 420 Use Current Layer, команда, 189 Use Defaults, кнопка, 668 Use Depth Map Shadow, поле, 696 Use File Cache, параметр, 731 Use Multi Pixel Filter, флажок, 724 Utilities, вкладка, 350, 592 UV Sets, флажок, 402 UV Texture Editor, окно, 399 Value, ползунок, 662 Visibility, атрибут, 387 Visible in Reflections, флажок, 408 Visible in Refractions, флажок, 408 Visor, окно, 666, 669 Volume, тип источника света, 690, 715 Volume Fog, эффект, 743 Volume Noise, материал, 743 Volume Shape, список, 412
Алфавитный указатель
w
Wedge Angle, поле, 302 Wedge Divisions, поле, 302 Wedge Faces, команда, 302 Weight, поле, 388 whatls, MEL-комапда, 73 Whiteness, ползунок, 660 Width, поле, 337 Wireframe Color, команда, 587 Wood, текстура, 673 Work Area, вкладка, 666 World Coordinate System, раздел, 334 World Space, раздел, 223 Wrap, деформатор, 555 Zoom, команда, 91 альфа-канал, 422 анатомия персонажа, 543 анимация, 65,457 непосредственная, 484 планирование, 463 принципы, 479 трехмерная, 458 эффективность, 733 аппаратная визуализация, 416 аппроксимация полигональная, 298 артефакт, 252 артикуляция, 60 архитектура узловая, 342, 347 базис В-сплайна, 125 базисная функция, 125 базовое освещение изображения, 691 безопасное действие, 481 библиотека материалов, 668 ближняя плоскость отсечки, 91 блоб, 117,142 буфер визуализации, 420
В вектор полюса, 377, 579 вес частиц, 386 весовая раскраска, 645 взвешенное ограничение, 372, 376 визуализатор, 287
827
Алфавитный указатель
визуализация, 68 аппаратная, 416 диагностика, 737 из командной строки, 738 интерактивная, 671 капель воды, 453 многопроходная, 757 пакетная, 738 последовательности, 676 послойная, 757 программная, 425 фабрика, 767 фотореалистичная, 671 частиц, 416 виртуальная кисть, 203, 645 воксель, 117 вспомогательный узел, 352 вторичное движение, 377 выравнивающий свет, 690 «вытягивание», 483 гамма-коррекция, 150 геометрическая непрерывность, 130 гладкая поверхность, 129 гладкое связывание, 644 глобальная освещенность, 691 глобальная синхронизация, 488 глобальное пространство, 223 глубина резкости, 728 градиентная раскраска, 660 граф зависимости, 348 истории, 353 направленный ациклический, 347 группировка элементов управления с ограничениями, 586 с прямыми связями, 587 групповой узел, 343 дальняя плоскость отсечки, 91 движение вторичное, 377 задержка, 535 исследование, 475 траектория, 539 действие вторичное, 481
действие (продолжение) завершение, 482 первичное, 481 деформатор, 61,95,345,555, 560, 799 Bend, 213 Lattice, 213 деформация, 484 деформируемость, 130 диагностика визуализации, 737 динамический диапазон, 681 диффузная освещенность, 691 дуга, 482
Ж
журнал ошибок, 792 завершение, 482 замещение отображения, 588 заполнение поверхности, 444 заполняющий свет, 690 затухание, 682
И
иерархическая поверхность, 132,287,296 иерархия преобразований, 586 сочленений, 571 сцены, 602 форм, 586 избыточная точка, 289 изопараметри ческая кривая, 189,264 именование файлов, 92 имитация меха, 142 импорт изображений, 300 инерция, 483 интенсивность ореола, 722 свечения, 674, 722 интерактивная фотореалистичная визуализация, 671 интервал, 124 исследование движения, 475 роли, 471 история, 353, 559 исчезающая нормаль, 136
828
К камера, 90 канал альфа, 422 глубины, 420 диффузного рассеяния, 759 зеркальных бликов, 759 теней, 759 цвета, 759 карта глубины, 697 зеркальных бликов, 653 материалов, 663 отражений, 653 рельефа, 653, 666 смещения, 732 текстур, 671 фотонов, 751 каустический эффект, 749 качество поверхности, 664 клавиатурная комбинация, 75 кластер, 378, 396 ключ анимации, 519 ключевой свет, 690 кольцевой свет, 690 команда Attach Curves, 72 Duplicate, 75 Echo All Commands, 73 Reset Settings, 73 командная строка, 97 комментарий, 104 компоновка, 63, 326 конечный сбор, 691 контекстное меню, 85 контроллер, 492 кривизна поверхности, 130 критерий функциональный, 286 эстетический, 286 круговое сопряжение поверхностей, 233 курватура, 130 курватурная непрерывность, 138 кэширование, 434
Л локальная синхронизация, 488 локальное пространство, 223
Алфавитный указатель
локатор, 361 лофтинг, 160,172,189,210,233
м
макетирование, 182 манипулятор IK-сплайна, 387 TSR, 296 маска выделения, 390 массив, 103 масштабирование, 242,535 материал, 62 матрица преобразований, 675 меню, 89 метод конечного сбора, 708, 755 обратной кинематики, 362,555 прямой кинематики, 362, 556 микровыражение, 474 мини-сценарий, 473 многопроходная визуализация, 757 многослойная раскраска, 657 моделирование, 59 гибкость, 119 из фрагментов, 287 на основе NURBS-поверхкостей, 124 сеток полигонов, 120 назначение материала, 119 непрерывность, 119 персонажей, 286, 299 реквизита, 218 точность воспроизведения, 118 вычислений, 118 эффективность, 118 модуль Artisan, 645 Cloth, 95, 287 Fluid Effects, 179,202 Live, 95 Maya Fur, 44,142 Maya Live, 45 Paint Effect, 672 Paint Effects, 44,68,141 монтаж частиц, 420 монтажный стол, 529
829
Алфавитный указатель
Н наезд камерой, 76 назначение материалов, 123,138 направленный ациклический граф, 347 направленный свет, 681 непланарные отверстия, 173 непрерывность геометрическая, 130 курватурная, 138 параметрическая, 130 позиционная, 122,130 производной, 130 тангенциальная, 136, 272 непрозрачность, 431 неявная поверхность, 117 нижний узел, 399 нормаль, 562 облако точек, 117 обмер, 181 обработка ошибок, 787 образец, 728 обрезка параметрической поверхности, 129 объект влияния, 650 объемный туман, 743 объемный шум, 743 ограничение взвешенное, 372,376 окно каналов, 361,373,495 проекции, 77,89,515 октадерево, 117 опорная точка, 223 опорное изображение, 57,151 опорные материалы, 145 реальные объекты, 145 рисунки, 147 фотографии, 146 оптимизация копий, 731 ориентация сочленений, 572 ортографическая проекция, 149 освещение, 66, 680 освещенность глобальная, 691 диффузная, 691 отверстия непланарные, 173 пленарные, 172
отверстия (продолжение) сопряженные, 174 отражающая способность, 657, 762
п
пакетная визуализация, 738 параметризация NURBS-поверхностей, 124 персонажей, 563 параметрическая непрерывность, 130 первичное действие, 481 переменная, 102 перенос излучения, 691 пипетка, 706 планарные отверстия, 172 планирование анимации, 463 плоскость отсечки, 90 ближняя, 91 дальняя, 91 поверхность гладкая, 129 заполнение, 444 иерархическая, 132, 287, 296 качество, 664 модификация, 560 неявная, 117 предельная, 133 сопряжение, 160 подобъект, 345 подсветка глаз, 691 позиционная непрерывность, 122,130 полигон, 120 полигональная аппроксимация, 298 полка, 81 послойная визуализация, 757 постановка, 486 потомок, 342 правило 180 градусов, 329 освещения, 689 подготовки персонажа, 542 предвосхищение, 481 предельная поверхность, 133 предок, 342, 376 предумноженный альфа-канал, 758 преувеличение, 482 принципы анимации, 479 притягательность, 480 программирование, 101 программная визуализация, 425
830 проект, 92 прозрачность, 433 произвольное сопряжение поверхностей, 160 просмотр структуры, 30 пространство глобальное, 223 локальное, 223 процедурная текстура, 673 прямолинейная топология, 128 равновесие поз, 557 радиус кривизны, 174 размывание в движении, 727, 749 раскадровка, 34, 51, 55,179, 331 раскраска градиентная, 660 многослойная, 657 по Блину, 657 по Ламберту, 656 по Фонгу, 659 поверхности, 663 рассеянный свет, 681 редактор. См. AppBrowser анимационных кривых, 30, 339, 529, 537, 733 атрибутов, 91,223,334,350,551 визуализации, 676 выражений, 412,440 клавиатурных комбинаций, 76 подобъектов, 390 полок, 82, 293 приближений, 745 проекционных координат, 399 связей, 355,360 слоев анимации, 30 ссылок, 216
сценариев, 74, 94,96,99, 352,355 узлов, 30,350,354,631,666 реквизит, 218 решатель IK-сплайна, 581 ротоскопия, 477 рулетка, 612
С свертка, 250 свет выравнивающий, 690 заполняющий, 690
Алфавитный указатель
свет (продолжение) ключевой, 690 кольцевой, 690 направленный, 681 рассеянный, 681 фоновый, 691 световой туман, 743 свечение, 313,662 связывание узлов, 360 сглаживание, 723 сдавливание, 483 сетка полигонов, 120,196 сила блеска, 662 трения, 412 тяжести, 411, 412 синхронизация глобальная, 488 локальная, 488 поз, 529 скелет, 551 скос, 156,166 скругление, 156, 251 скручивание, 172 скрытый узел, 399 слой, 494 смешанное сопряжение поверхностей, 160 смещение цвета, 151 сопряжение поверхностей, 156, 160 круговое, 233 произвольное, 160 смешанное, 160 сопряженные отверстия, 174 сочленение, 550 сплайн, 378 стандартизация, 179 стек, 36 столкновение частиц, 407 сферические частицы, 426 схема разбиения Катмул—Кларка, 133 тангенциальная непрерывность, 136, 272 текстура, 290 текущий съемочный материал, 480 тень, 681,726,735,748 теория мини-сценария, 474
831
Алфавитный указатель
тестирование, 548 топология прямолинейная, 128 тороидальная, 169 тороидальная топология, 169 точка избыточная, 289 опорная, 223 узловая, 124 управляющая, 155 траектория движения, 539 трассировка лучей, 725, 748 трехмерная анимация, 458 туман, 743 туннелирование, 168 узел DAG, 347 DG, 348 визуализации, 350 вспомогательный, 352 групповой, 343 деформатора, 353 корневой, 494 нижний, 399 отладки, 561 переключения, 667 связывание, 360 скрытый, 399 сценария, 776 сцены, 353 тины, 352 управляющий, 411 формы, 345,353,399 узловая архитектура, 342, 347 узловая точка, 124 управляющая точка, 155 управляющий узел, 411
Ф фабрика визуализации, 767 фаска, 129, 156
физика, 483 фиксация преобразований, 224 фокусное расстояние, 335 фоновый свет, 691 фрактал, 686 фронтальная проекция, 150
X
холст, 672
Ц
цветовой баланс, 711 цветовой сценарий, 711 центрирование камеры, 91 цикл, 103
Ч частицы визуализация, 405,416 монтаж, 420 распространение, 405 столкновения, 407, 436 сферические, 426
ш
шероховатость, 660 эксцентриситет, 656 элемент интерфейса видимость, 86 создание, 291 эффект Доплера, 681 каустический, 749 рисования, 141, 671 течения, 179,202 эффектор, 362 язык MEL, 35, 94, 96
Марк Адаме, Эрик Миллер, Макс Симе Maya 5. Для профессионалов (+CD) Перевела с английского И. Рузмайкина Главный редактор Заведующий редакцией Руководитель проекта Научный редактор Литературный редактор Иллюстрации
Е. Строганова И. Корнеев А. Крузенштерн Д. Слепичев А. Жданов В. Шендерова, М. Шендерова
Художник
Н. Еиржаков, И. Кудрявцев
Корректор
В. Листова
Верстка
А. Зайцев
Лицензия ИД№05784 от 07.09.01. Подписано в печать) 6.06.04. Формат 70X100/16. Усл. п. л. 67,08. Тираж 3000 экз. Заказ№2775. ООО «Питер Принт». 196105, Санкт-Петербург, ул. Благодатная,л. 67в. Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 953005 — литература учебная. Отпечатано с готовых диапозитивов в ФГУП «Печатный двор» им. А. М. Горького Министерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций. 197110, Санкт-Петербург, Чкаловский пр., 15.