Зззвоним в звонок
Как, нажав кнопку звонка, заставить его звенеть?
Тема:
Анимация.
Используемые техники и инструменты:
NURBS Modeling (NURBS-Моделирование), Random and If-Then Expressions (Случайные и Условные Выражения), Set Driven Key (Установить Управляемый Ключ), Channel Control (Управление Каналами).
Мауа, конечно, не воспроизводит звенящие звуки, но мы можем использовать ее возможности для создания ударника звонка, который будет вибрировать, ударяя по звонку. Мы также можем сконструировать кнопку звонка, нажатие которой заставит ударник вибрировать. Этот урок посвящен анимации и зависимостям.
Он также о работе аниматора в команде, то есть подготовке сцены таким образом, чтобы она была абсолютно понятна коллеге, специализирующемуся на анимации персонажей. Мы также примем меры к сокращению, а именно спрячем все лишнее в сцене, что может отвлечь аниматора, работающего с 3D персонажем, который нажмет кнопку звонка, чтобы войти в дом.
Сначала смоделируем четыре объекта: непосредственно звонок, ударник для звонка, кнопку и рамку для кнопки.
Вы можете использовать NURBS-примитивы, поскольку этот урок не о сложном моделировании. Вся геометрия на рис. 4.1 была создана именно так. Основа звонка - это верхняя часть NURBS-сферы, немного сверху приплюснутая. Ударник состоит из NURBS-цилиндра, поверхность которого создана инструментом Square Tool (Квадрат) и Loft (Построение поверхности по сечениям) для создания объема [Ударник состоит из нескольких поверхностей. Во-первых, «пятачок» - это просто NURBS-цилиндр. Во-вторых, «ножка», которую автор строил следующим образом: сдублирована крайняя изопарма цилиндра, разрезана пополам. Получились две полуокружности. Одна полуокружность отодвинута. Далее концы раздвинутых полуокружностей соединены отрезками. По полученным четырем кривым построена боковая часть «ножки» с помощью Square Tool. Затем все четыре кривые были отдублированы и немного сдвинуты «по толщине». К «новым» четырем кривым вновь применяется Square Tool для получения второй боковой поверхности «ножки».
Затем устраивается Loft между соответствующими парами кривых для получения толщины этой самой «ножки». - Примеч. ред. ]. Все части объекта были сгруппированы, для того чтобы не терять контакта при вращении. Рамка кнопки звонка была создана путем применения инструмента Round Tool (Округление) к NURBS-кубу. Сама кнопка - это отмасштабированная аналогично звонку половина NURBS-сферы. Давайте сначала поработаем над движением ударника.
Рис. 4.1.
Набор объектов: звенящее устройство со звонком, ударником, кнопкой и ее рамкой
Выделите ударник (в действительности группу поверхностей, из которых он состоит) и в режиме Insert mode (Режим редактирования опорной точки) передвиньте его опорную точку назад (см. рис. 4.2).
Рис. 4.2.
Опорная точка ударника сдвинута назад
В окне Channel Box (Окно Каналов) нажмите на Rotate Y (Вращение по оси Y) и, используя контекстное меню, правой кнопкой мыши откройте Expression Editor (Редактор Выражений) (рис. 4.3).
Рис. 4.3.
Выражение со случайной функцией заставляет ударник вращаться между -0,5 и 0,5 градусами
Наберите следующее выражение в пустом поле внизу окна и замените ringerG именем, которое вы выбрали для своего ударника:
ringerG.rotateY = rand(-0,5, 0,5);
Активизируйте выражение, нажав Create (Создать).
Ударник теперь вращается случайным образом между минус полградуса и плюс полградуса относительно своей вертикальной оси. Если вибрация кажется вам слишком слабой, увеличьте значение аргументов случайной функции rand.
Если бы мы могли услышать, звонок звенел бы уже без остановки. Но мы бы хотели, чтобы он звенел только тогда, когда нажимается кнопка. Чтобы достичь этого, мы должны будем создать зависимость между позицией кнопки и включенным / выключенным состоянием случайного выражения. Прежде всего, нам нужен новый атрибут для состояний кнопки звонка on (включена) и off (выключена).
Откройте Attribute Editor (Редактор Атрибутов) для кнопки и выполните команду Attributes / Add Attribute (Атрибуты / Добавить Атрибут).
Так вы откроете окно создания новых атрибутов объекта (рис. 4.4).
Рис. 4.4.
Кнопка приобретает новый атрибут для состояний on / off
Дайте атрибуту имя, например rrringTheBell, установите его Data Type (Тип Данных) на Boolean (Булевские). (Они принимают значения 0 или 1, включено или выключено - третьего не дано.) Data Type (Тип Данных) Integer (Целые) включает все целые числа и, таким образом, дает нам слишком большой выбор. Нажмите ОК для добавления нового атрибута.
Вы найдете новый атрибут прямо под атрибутом Object's Visibility (Видимость Объекта) в окне Channel Box (Окно Каналов). Сейчас его состояние установлено на off (выключено). Но даже если мы изменим его на on (включено), ничего не изменится. Атрибут должен знать, что делать с этим on (включено). Мы поручим инструменту Set Driven Key (Установить Управляемый Ключ) управлять связью между новым атрибутом rrringTheBell и позицией кнопки. Инструмент Set Driven Key (Установить Управляемый Ключ) заставит новый атрибут посылать команду, которая вызовет нажатие кнопки.
Откройте окно Set Driven Key (Установить Управляемый Ключ). Для этого нажмите клавишу F2, выберите Animate / Set Driven Key / Set Option Box (Создать Анимацию / Установить Управляемый Ключ / Установить Окно Настроек).
Загрузите атрибуты кнопки в верхнее и нижнее поля окна (Drivers and Driven (Управляющий и Управляемый) (рис. 4.5).
В верхнем правом поле выделите новый атрибут rrringTheBell.
В нижнем правом поле выделите канал перемещения, который отвечает за движение кнопки в нажатую позицию. В нашем примере это Translate Y (Значение перемещения по оси Y).
Рис. 4.5.
Инструмент Set Driven Key (Установить Управляемый Ключ) создает зависимость между позицией кнопки (в данном случае значение ее перемещения по оси Y (Translate Y) и значениями on / off нового атрибута звонка (rrring The Bell). В отличие от обычных ключевых кадров инструмент Set Driven Key (Установить Управляемый Ключ) создает связь не между атрибутами и временем, а между атрибутами и атрибутами
Убедитесь, что кнопка находится в ненажатом состоянии, а новый атрибут rrringTheBell установлен на off (выключено).
В окне Set Driven Key (Установить Управляемый Ключ) нажмите Key (Ключ). С этого момента всегда, когда вы будете устанавливать значение нового атрибута в off (выключено), кнопка сама примет ненажатое положение.
Приведите кнопку в нажатое положение.
В окне Channel Box (Окно Каналов) наберите слово on в поле нового атрибута.
В окне Set Driven Key (Установить Управляемый Ключ) нажмите Key (Ключ) и закройте окно.
Когда в окне Channel Box (Окно Каналов) вы поменяете атрибут звонка с on на off, кнопка звонка вернется в выключенное положение. Теперь давайте займемся самим ударником.
Откройте Expression Editor (Редактор Выражений) для ударника. Добавьте к перед ранее созданным случайным выражением строки, содержащие условный оператор if (замените имена атрибутов на ваши собственные, если это нужно):
if (button.rringTheBell == 1) ringerG.rotateY = rand (-0,5, 0,5);
Нажмите на Edit (Редактирование) для сохранения изменений.
Вот что новая запись означает: если атрибут rrringTheBell принимает значение on (включено) (1 как противоположность 0), звонок зазвенит. Из этого следует, что, если rrringTheBell принимает значение off (выключено), ничего не произойдет. Новый атрибут не только управляет кнопкой, но и позволяет вам звонить в дверной звонок.
Однако, если вы в таком виде передадите сцену коллеге, который будет создавать персонаж, звонящий в звонок, чтобы попасть в дом, она для него будет слишком сложной. Вашему коллеге придется анализировать внутреннюю структуру сцены, изучать взаимодействие Expressions (Выражений) и инструмента Set Driven Key (Установить Управляемый Ключ) с объектами и их работу и т. д. Мы сделаем так, чтобы следующий аниматор мог сфокусировать внимание только на одном объекте - красной кнопке и ее атрибуте rrringTheBell. Окно для наведения порядка в Channel Box (Окно Каналов) называется Channel Control (Управление Каналами).
Выберите Window / General Editors (Окно / Основные Редакторы), для того чтобы открыть окно Channel Control (Управление Каналами) (рис. 4.6).
Рис. 4.6.
Левая сторона окна Channel Control (Управление Каналами) содержит список всех атрибутов кнопки, на которые могут быть поставлены ключи (keyable attributes). Все атрибуты, кроме одного (нового), выделены и будут перемещены в правую часть окна. Они впоследствии исчезнут из окна Channel Box (Окно Каналов)
В левом поле выделите все входные данные, кроме того, которое относится к управлению звонком.
Нажмите Move (Переместить) для перемещения выделенных атрибутов в секцию Non Keyable окна и таким образом удалите их из окна Channel Box (Окно Каналов).
Вы можете спрятать атрибуты всех остальных объектов сцены тем же способом. Ваш коллега, открыв сцену, выделит кнопку и увидит только один атрибут, на который можно поставить ключ, имеющий значение для персонажа, который нажмет на кнопку своим большим пальцем (рис. 4.7).
Рис. 4.7.
После очищения только один атрибут остался в окне Channel Box (Окно Каналов). Это все, что нужно видеть аниматору, для того чтобы дать возможность персонажу позвонить в звонок
А теперь кое-что новенькое. Приходилось ли вам применять Incremental Save? [Сохранение с автоматическим добавлением возрастающих номеров к имени сохраняемого файла. - Примеч. ред.] Может предотвратить кучу неприятностей!