
- •Лекция 5. Анимация
- •12 Приемов художников Disney для оживления анимации
- •Типы анимации.
- •Главный принцип анимации в maya
- •Общие принципы и внутреннее устройство анимации в maya
- •Защита от анимации
- •Скорость воспроизведения анимации
- •Анимация по ключам
- •Режим Auto Key
- •Работа с ключами в Attribute Editor
- •Основы работы с Graph Editor.
- •Dope Sheet - альтернативный графический редактор
- •Иерархическая анимация. Слоеная анимация
- •Типы ключей. Breakdowns
- •Короткие вставки. Inbetweens
- •Анимация по пути
- •Пресмыкание по пути
- •Редактирование анимации по пути
- •Деформация по пути
- •Порядок работы с констрейнами. Их устройство и отличия от других видов связи между объектами
- •Типы констрейнов. Их общие и уникальные атрибуты
- •Смешивание анимации - старый добрый подход
- •Борьба с переворачиванием
- •Совместимость констрейнов.
- •Удаление и добавление дополнительных управляющих объектов
- •Работа с весами.
- •Констрейны как потенциальный источник циклов в дереве зависимостей
- •Пример использования констрейнов. Конструирование карданной передачи
- •Порядок создания expressions
- •Разница между скриптами и expressions. Порядок выполнения expressions
- •Примеры использования expressions. Часы
- •Приручение Expression Editor
- •Примеры использования expressions. Телескопическая антенна
- •Циклические движения. Устаканивание с помощью expressions
- •Скорость объекта. Использование expressions для ориентации объекта по направлению движения. Работа с динамическими атрибутами
- •Коленвал.
- •Операция Set Driven Key. Формула произвольной гибкости
- •Интеллектуальный шлагбаум
- •Управление множеством атрибутов с помощью Set Driven Key.
- •Set Driven Key некоторые замечания
- •Порядок смешивания анимаций
- •Кватернионы, эйлеровские углы, синхронизация вращений и прочие ужасы
- •Бесплатный гхостинг, или классическая фазовка
- •Playblast: предварительный просмотр анимации
- •Работа со звуком
- •Еще раз про основной принцип анимации в maya
- •654 Книга Сергея Цыпцына
- •Типичный ритуал применения деформеров. Создание и удаление деформеров
- •Типы деформеров. Нелинейные деформации
- •Деформация частиц
- •Решетки Lattice. Free Form Deformation
- •Wrap deformer. Решетка произвольной формы. Обобщенные деформации
- •Деформеры Sculp и Wire
- •Кластеры - группирование компонент и объектов
- •Еще немного теории деформаций.
- •Порядок деформаций
- •Членство в партии деформеров. Вступление и выход из партии. Партиции и эксклюзивные деформеры
- •Окно для работы с Blend Shapes
- •Устройство объекта blendShape.
- •Совместимость форм и принцип работы морфинга
- •Последовательный морфинг
- •Морфинг групп и иерархий
- •Локальны й и глобальны й морфин г
- •Симметричный морфинг
- •Некоторые замечания по поводу лицевой анимации
- •Используйте Wrap и Wire деформеры
- •Оптимизируйте количество объектов
- •Wrap не любит изменения масштаба объекта влияния
- •Чего следует избегать при работе с Wrap-деформером
- •Wrap-деформер и параллельные деформации
- •Wrap-деформер в составе Skin Cluster-деформера
- •Wire и его dropoff-локаторы
- •Wrap для одежды
- •Wrap как непрямой скининг
Wrap-деформер в составе Skin Cluster-деформера
Второй метод, как заставить работать совместно несколько Wrap-деформеров - это включить управляющие объекты в Skin Cluster в качестве «geometry influence». Подробнее об этой операции вы можете прочитать в советах по «скинингу». В отличие от обычного Wrap-деформера, Skin Cluster-деформер не пересчитывает «привязку» к контрольным точкам управляющих объектов. К тому же вы получаете еще одну возможность делить их взаимное влияние с помощью весов Skin Cluter-деформера. И в отличие от предыдущего способа параллельных деформаций, этот метод гарантирует то, что влияние нескольких управляющих объектов для каждой вершины деформируемого объекта может быть нормализовано, то есть в сумме будет составлять единицу. Это очень полезно для деформации лица, когда несколько управляющих объектов могут имитировать мускулатуру. И конечно же, есть возможность сочетать Wrap-деформацию с деформацией костей. В случае, когда влияние костей не нужно, то есть в состав Skin Cluster- деформера должны войти только -geometry influence" объекты, можно для создания деформера привязать объект к временно созданной кости. Затем добавить управляющие объекты с помощью меню Skin=>Edit Smooth Skin=>Add Influence. После чего удалить кость.
Всем хорош данный метод, но все же он имеет недостатки. Во-первых, в отличие от Wrap- деформера, Skin Cluster-деформер не реагирует на изменение значений трансформа базовых (Base) управляющих объектов, хотя это редко когда нужно. Во-вторых, он работает медленнее, чем Wrap-деформер, хотя деформации и выглядят лучше. Похоже, что это результат постоянной оптимизации работы Wrap-деформера, которая не коснулась аналогичного кода в Skin Cluster- деформере.
Wire и его dropoff-локаторы
Возможности этого деформера незаслуженно опущены в документации Maya. Его главные достоинства в том, что он работает быстро и качественно. Но мало кто знает (а тем более использует) некоторые его функции, которые появляются при создании на управляющей кривой dropoff-локаторов. Ведь именно они позволяют не только гнуть, но и масштабировать и
698
закручивать объект относительно кривой, что незаменимо, например, для анимации губ. Стоит только на управляющую кривую поставить два dropoff-локатора, как у Wire-деформера появятся возможности скручивать не хуже, чем у Twist-деформера! После создания локатора к деформеру автоматически добавляется набор динамических атрибутов: locatorEnvelope - множитель к общему атрибуту envelope - и locatorTwist - относительное вращение. А также атрибуты param и per cent, которые можно увидеть только в Attribute Editor, или выделив сам dropoff-локатор. Удобно управлять этими параметрами с помощью Show Manipulator Tool, наглядно передвигая локатор по кривой и изменяя, если нужно, дистанцию влияния деформера в данной точке. Изменяя все эти значения, можно увидеть, как Wire-деформер интерполирует эти значения между локаторами вдоль кривой.
К сожалению, у деформера в этом наборе отсутствует атрибут locatorScale, его атрибут scale управляет масштабом относительно всей кривой. Но выход из этой ситуации есть. Если такой контроль нужен, можно использовать последовательно два Wire-деформера. Первый будет управлять масштабом, а второй гнуть и скручивать. Для этого нужно выставить атрибут scale в нужное значение (например, 2), а уже атрибутами locatorEnvelope управлять величиной масштаба в выбранных участках. Это действие даже можно автоматизировать, если сделать Driven Key от ноды arcLengthDimension, которая будет измерять длину управляющей кривой и, в зависимости от этого, расширять или сужать объект в нужных областях.
Будьте готовы к тому, что у параметров locatorTwist есть неприятная особенность: обычные ключи и Driven Key ставятся в радианах, но связываются с нодой, как градусы. Это, конечно же, недоработка программистов. Рекомендую поправлять значения ключей в Graph Editor, а перед тем, как поставить новый ключ, копировать его значение из Channel Box в буферную память.
Если у Wrap-деформера имеется один dropoff-локатор, его атрибуты будут влиять на весь отрезок кривой. Таким образом, помимо scale появится еще возможность делать операцию twist.
Пример такого влияния находится в файле wire_for_lips.mb
Wire + Wrap
Еще один трюк. Я уже упомянул о том, что можно добиться хороших результатов объединив мощь этих двух деформеров. Эта комбинация используется для анимации лица, когда нужно добиться очень качественного и реалистического движения кожи персонажа. Wrap-деформер хороший деформер, но в тех местах, где сетка обрывается или загибается во внутреннюю сторону, как это происходит с области губ, больше подходит Wire-деформер. Так Wrap отвечает за деформацию лица в целом, а Wire-деформер за области губ (глаза, брови и прочее - по желанию). При построении управляющей Wrap-сетки для лица можно сильно упростить себе задачу, если заставить деформироваться управляющую wire-кривую той же управляющей wrap-сеткой, что и
для деформируемого объекта.
Таким образом, в области губ управляющая wrap-сетка не замкнута и топологически радиальная. В этой области строится замкнутая кривая, чьи вершины точно совпадают в пространстве с крайними вершинами wrap-сетки.
После чего создаются два Wrap-деформера от одной управляющей сетки, один для деформируемого объекта, а другой для управляющей wire-кривой.
Это можно сделать за один раз, выделив три объекта (причем последним из них должен быть управляющий wrap-объект) и вызвав меню Deform => Create Wrap.
Затем создаем Wire-деформер для деформируемого объекта (меню Deform => Wire Tool с параметрами), но при этом переключив параметр Deformation Order в режим Parallel.
Теперь Wire и Wrap деформеры параллельно деформируют наш объект. Осталось только разграничить их зоны влияния, чтобы не было двойной трансформации.
699
Самый простой способ сделать жесткую границу, выделив поочереди каждый деформер, и инструментом Edit Membership Tool удалить для каждого из них ненужные вершины. Но чаще всего желательна мягкая граница. Однако встроенные в Maya средства, к сожаленью, не позволяют этого сделать. Чтобы не прибегать к программированию, попробуем приспособить для этой цели сам Blend Shape-деформер, который уже был автоматически создан Maya в процессе и назван parallelBlender. В Maya 7.0 у Blend Shape-деформера появилась возможность маскировать каждый канал. Но при попытке зайти в окно инструмента Paint Blend Shape Weights Tool, выясняется, что не на чем рисовать! Более того, вызываем окно Blend Shape и там не находим нашего деформера. Для того, чтобы случилось это чудо, нужно обнулить одноименный атрибут деформера parallel- Blender. Этот атрибут делает его невидимым, чтобы он не смешивался с традиционным Blend Shape-деформером. Поэтому для того, чтобы он стал доступным для нормальной работы, нам нужно выделить его и запустить команду:
setAttr .parallelBlender 0;
Но этого не достаточно для того, чтобы начать красить веса каналов. Нужно еще зайти в окно Blend Shape и переименовать каналы деформера, например: wrap и wire. Теперь уже, открыв Shape Weights Tool, можно приступить к раскраске весов параллельного деформера.
Лучше начать рисование с маски канала wire (Wire-деформера), проверяя работу деформера в действии. Так как зона действия деформера в нашем случае зависит от маски, стоит сильно увеличить значение его атрибута dropoffDistance, например, до 100. Затем эту маску следует записать в файл, пользуясь закладкой Attribute Maps / Export. Затем, обнулив маску канала wrap, импортируем (закладка Import) этот файл и инвертируем его, так же, как описано в разделе
«Советы по скинингу» для Cluster-деформера.
Этот способ не самый изящный, к тому же требует от объекта наличие корректного UV- маппинга, если он полигональный. Если каналов не два, а более, лучше начинать с маски Wrap- деформера, как самого большого по площади влияния. Более простой способ раскрашивания заключается в выделении группы faces, относящихся к одному деформеру, и назначение им единичного или нулевого значения влияния с помощью заливки кнопкой Flood в режиме Re place. Затем делается инверсия выбора на компонентном уровне и новой группе назначается противоположное значение влияния. И в самый последний момент, когда все зоны уже определены, в режиме Smooth для каждого деформера нажимается определенное количество раз кнопка Flood. Это создает плавный переход между влиянием разных деформеров в пограничных зонах. Очень важно, чтобы количество нажатий было одинаково для каждого деформера, иначе результирующее влияние на эти вершины будет не единичным, то есть не нормализованным, что приведет к двойным транформациям.
Пример распределения весов этим способом находится в файле wrap_and_wire.mb
Будем надеяться, что в следующих версиях Maya еще больше расширятся возможности деформера Blend Shape, чтобы для таких случаев в режиме parallelBlender была возможность
700
рисовать веса с автоматической нормализацией, как это делается при раскраске весов Skin Clus ter-деформера.