М. Адаме, Э. Миллер, М. Симе
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 секунд до минуты. В идеале, конечно, хотелось, чтобы продолжительность анимации в минутах выражалась круглым числом, но мы решили не быть столь педантичными. Серьезным ограничивающим фактором было наше собственное время. Никого не волновало наличие у нас другой работы. Проект нужно было закончить в срок, и никуда от этого не деться. Это тоже повлияло на принятие решения о продолжи';;.". 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 SetCSppingPleresKejod«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 '••"'•- •'•'• :• , . .
,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
$ *. .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
Простые модели реквизита
-
?-*>•- .
т 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 ,!-. 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:^. 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. Моделирование собаки К предыдущей модели-макету можно добавить новые полигоны путем расщелл 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
Проще
Простой
,'-'Л
'•"--•'
:"-f.['-. 1 «,:,„
1
Spilpo
IPuly«:Uhe SZlCuhB
.Sntialk
.
.
«"ep Faces h'uhilnii}* !ifiliiriulyf|Lb4.4oef-nQMe'S«'i'li»iMa*eHQla- NlHofe P0ly 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
: ' .....
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 Oeval SemltCmd:
Как показано на рис. 14.29 и 14.30, частицы хвоста отстают от частиц, испускаемых генератором. Это связано с тем, что по умолчанию Maya вычисляет выражение перед пересчетом динамики. Поэтому в момент, когда выражение для эмиссии уже вычислено, на положение частицы еще не влияет однородное поле и прочие
431
Визуализация частиц
задействованные в сцене поля. То есть в основном используется положение частицы из предыдущего кадра. Чтобы исправить ситуацию, нужно установить для частиц флажок Expressions After Dynamics (Выражения после динамики) в разделе General Control Attributes (Общие управляющие атрибуты) диалогового окна Attribute Editor (Редактор атрибутов). ииияддйГС^^ W?
Ed* |'>-..v.> . .