Анимация в Cinema4D. Работаем с Morph
Использование Morph очень удобно и часто применимо для автоматизации анимации движения губ персонажей, трансформации любых объектов, создания сложных запрограммированных сцен, связанных, например, с водными поверхностями. Новичкам данная тема кажется довольно сложной, а в книгах по Cinema4D этот инструментарий обычно обходят стороной.
Инструменты Morph являются одними из ключевых для всех профессиональных 3D-пакетов, работающих с анимацией. Они предназначены для автоматизации плавных трансформаций между различными состояниями любого объекта, причем самим изменением можно управлять с помощью отдельных объектов — драйверов.
В Cinema4D такая возможность появилась с 9-й версии пакета в виде отдельного плагина от стороннего разработчика. Начиная с 10-й Morph появился в составе основных тегов программы и с тех претерпевает незначительные изменения.
В рамках этого урока мы покажем на практическом и очень простом примере, как можно применять данный инструментарий.
Трансформируем параллелепипеды
Задача довольно проста: нам нужно создать некий параллелепипед, который будет плавно менять свои размеры и соотношения сторон, а управление этими трансформациями будет реализовано за счет изменения состояния стороннего объекта управления — драйвера.
Этап 1. Загружаем фазы Morph
Открываем программу и в рабочую область помещаем примитив Cube, делаем из него параллелепипед. Назовем его Cube-main. Затем дублируем, меняем соотношения сторон и новую фигуру называем Cube1, после чего дублируем и эту фигуру, создав Cube2 со своими соотношениями сторон. Таким образом создаем еще две фигуры — все они должны быть разными. В результате в менеджере объектов у вас должны быть:
Cube4
Cube3
Cube2
Cube1
Cube-main.
Выделяем из них все и переводим в полигональное представление.
Примечание: инструмент Morph в рамках Cinema4D может работать только с полигональными объектами или сплайнами.
Задача, которую мы сейчас сделаем, — это плавная трансформация от Cube-main к Cube1, от Cube1 к Cube2, и т.п., и последней фазой будет превращение Cube4 в Cube-main, таким образом, сформируем замкнутый цикл.
Итак, все основные фазы изменений у нас уже есть в наглядном виде, теперь в менеджере объектов выделяем Cube-main и в закладке тегов для него выбираем Character Tags -> Morph. В результате напротив объекта появится соответствующая пиктограмма, кликнув на которую указателем мыши, мы переходим к свойствам самого инструмента. Все, что нас интересует на данный момент, — это список Morphs, в котором изначально имеются две записи: Base Morph и Morph Target. Последний пункт удаляем (правая кнопка мыши, в контекстном меню — Remove).
Теперь в этот список указателем мыши добавляем по одному наши кубы Cube1, Cube2, Cube3 и Cube4. На запросы: «Import geometry with new geometry Targets?» отвечаем «No». Таким образом, в списке Morphs должно оказаться пять записей:
Base Morph b
Cube1 a
Cube2 a
Cube3 a
Cube4 a
Под Base Morph в данном случае подразумевается основной объект инструмента, то есть наш Cube-main.
Теперь нам нужно сделать невидимыми все промежуточные состояния для основного рабочего пространства, для чего перенесем их в другой слой и сделаем его невидимым. Делается это так:
1. Выделяем в менеджере объектов Cube1, Cube2, Cube3, Cube4 и объединяем в группу. Называем ее Cube-phases.
2. Затем нажимаем над Cube-phases правую кнопку мыши и в контекстном меню выбираем пункт Add To New Layer, в результате чего напротив самого объекта появится цветной квадратик.
3. Отключаем видимость группы Cube-phases (Visible in Editor — Off, Visible in Renderer — Off), другими словами, делаем две точки напротив этого объекта красными.
4. Нажимаем Shift+F4 (либо опять нажимаем над Cube-phases правую кнопку мыши и в контекстном меню выбираем Layers Browser), после чего откроется менеджер слоев, и в нем напротив появившегося отключаем указатель в колонке M. То есть делаем невидимым и в менеджере.
Все, предварительный этап подготовки слоев готов. В качестве проверки можете войти в список Morphs и покликать по состояниям — они будут отображаться.
Подключаем драйвер
В качестве драйвера можно использовать абсолютно любой 3D-объект, будь то обычный примитив, нулевой объект, а некоторые даже исхитряются делать интерактивные связи, используя в качестве объектов управления элементы сцены.
Мы возьмем самый простой случай, а именно, поместим в рабочую область Null Object, отнеся его для удобства на некоторое расстояние от трансформируемой части, в его настройках Display меняем представление с dot (точка) на Circle (окружность), увеличив радиус до того, чтобы нам было удобно с ним работать.
Теперь в менеджере объектов подключаем к нему тег Character Tags -> Driver и входим в его свойства. Здесь нам в первую очередь предлагается характер управления, точнее, тот параметр нашего объекта, который будет управляющим для переключений в Morph — свойство Driving Parameter, это может быть смещение, вращение и т.п. Наиболее удобным в данном случае является вращение, поэтому выбираем Rotation, ось указываем как Y, а параметр Max устанавливаем в -360 градусов, другими словами, за один оборот окружности будет происходить весь цикл превращений.
X Resolution — это количество промежуточных точек. У нас всего пять состояний в Morph, а шестым будет возвращение к Base Morph, таким образом, точек у драйвера тоже шесть.
Теперь необходимо подключить драйвер к конкретному трансформируемому объекту, что делается довольно просто: в свойствах тега драйвера есть пункт- окошко Driven Object, в него из менеджера объектов мы переносим конкретно Morph, то есть пиктограмму этого тега.
Теперь нам нужно соотнести точки, первую не трогаем, нажав на вторую, находим чуть ниже пункт Parameter, и в выпадающем списке видим все промежуточные состояния, выбираем Cube1 и так далее, пятая точка — это Cube4, шестую не трогаем.
Теперь заходим в тег Morph и переключаем его режим с Edit на Animate, после чего можем вращать наш Null Object и смотреть за трансформацией.
Добавляем возможности управления
Выше мы показали основные приемы трансформации и управления через загруженные состояния в рамках тега Morph. Но это далеко не все возможности. Давайте сделаем гибридный вариант управления, который бы позволил не только менять свойства объекта, но и, например, смещать его в пространстве.
Для этого опять переходим в наш тег Morph, переключаемся на режим Edit. При этом в данном случае нам не понадобится загрузка дополнительных состояний, а мы воспользуемся вариантом MoveTarget. Нажимаем кнопку Add MoveTarget под нашим списком, в результате к нему добавится соответствующий элемент. MoveTarget — это определенное состояние или положение, в которое переходит объект, это может быть смещение, вращение и т.п. В данном случае важно понимать, что MoveTarget распространяет свои действия применительно не к конкретным объектам, а к вершинам. Поэтому чтобы записать любой вариант смещения, нужно переключиться в соответствующий режим.
Допустим, мы хотим, чтобы наш объект поднимался вверх, для этого выделяем все его вершины (Ctrl+A), нажимаем в свойствах тега Morph только что подгруженный Move Target и затем переносим все вершины (то есть сам объект) в нужную точку пространства. Затем опять переходим к Move Target, переключаем Morph на режим Animate, где видим, что Move Target стоит в значении 100%. Если его начать менять, то объект будет двигаться. Драйвер в данном случае подключается по аналогии с предыдущим случаем, правда, несколько проще, потому как точек у нас будет всего две: начальная (ничего не указываем) и конечная (параметр Move Target).
Причем Move Target может работать только с частью вершин или точек сплайнов. Кстати…
Работа со сплайнами
Работа со сплайнами строится идентично указанному примеру, только вместо построения фаз изменения полигональных объектов вы делаете различные варианты исходной кривой. Из множества таких кривых с помощью модификаторов Loft либо просто Extrude «заливаются» поверхности, а управление анимацией ее движения производится за счет драйверов. И именно по такому методу обычно производятся такие вещи, как большие океанские волны, развевающиеся флаги (если нужно их цикличное воспроизведение), перелистывающиеся страницы и т.п.
Я когда-то показывал пример с волной, точнее, описал принцип действия по созданию, потому как не хватало времени на полноценную реализацию (участвовал в другом конкурсе). Изначально я нарисовал все фазы (формирование, накат, затухание) в виде нескольких кривых (отображение — вид сбоку), которые после поместил в Morph в качестве различных состояний одного и того же объекта. Потом подключил к Morph два управляющих объекта (драйвера), первый из которых при своем вращении руководил переходом от одной фазы (формы кривой) к другой, а второй отвечал за смещение нескольких промежуточных точек, описывающих непосредственно саму волну, то есть руководил ее движением.
Размножив этот суммарный объект, который, по существу, в каждый момент времени является обычной кривой, а также сделав несколько подобных, но более разнообразных, я получил каркас, который после прекрасно заливается модификатором Loft. То есть идея описана, а рабочий промежуточный результат отображен на иллюстрации.
Отдельные примечания
Инструмент Morph грамотно работает, если все фазы подразумевают равное количество точек, в результате чего идет плавная трансформация «точка-в- точку». Если количество разнится, вы не сможете удачно трансформировать, например, куб в сферу — для этого есть другой инструментарий и приемы. От анимации по ключевым кадрам данная техника отличается, прежде всего, упрощением множества процессов, например, вы хотите, чтобы ваш персонаж произнес речь (Lip Sync) — с использованием Morph это сделать гораздо удобнее, если у вас имеются различные шаблоны мимики и жестов. Это же касается и множества других элементов, например, реализация качающихся деревьев на ветру и так далее. В целом, очень удобный и выгодный вариант автоматизации анимации и оптимизации рабочего процесса как такового.
Создаем ключевые фазы трансформации объекта
Загружаем эти фазы в тег Morph
Подключаем Null Object в качестве драйвера
Вносим в драйвер все состояния (фазы) Morph
Вращаем Null Object. Смотрим на трансформацию
Я когда-то показывал этот пример с движущейся волной (рабочий вариант). Это и есть классическое использование Morph для сплайнов
Кристофер http://itcs.3dn.ru
Инструменты Morph являются одними из ключевых для всех профессиональных 3D-пакетов, работающих с анимацией. Они предназначены для автоматизации плавных трансформаций между различными состояниями любого объекта, причем самим изменением можно управлять с помощью отдельных объектов — драйверов.
В Cinema4D такая возможность появилась с 9-й версии пакета в виде отдельного плагина от стороннего разработчика. Начиная с 10-й Morph появился в составе основных тегов программы и с тех претерпевает незначительные изменения.
В рамках этого урока мы покажем на практическом и очень простом примере, как можно применять данный инструментарий.
Трансформируем параллелепипеды
Задача довольно проста: нам нужно создать некий параллелепипед, который будет плавно менять свои размеры и соотношения сторон, а управление этими трансформациями будет реализовано за счет изменения состояния стороннего объекта управления — драйвера.
Этап 1. Загружаем фазы Morph
Открываем программу и в рабочую область помещаем примитив Cube, делаем из него параллелепипед. Назовем его Cube-main. Затем дублируем, меняем соотношения сторон и новую фигуру называем Cube1, после чего дублируем и эту фигуру, создав Cube2 со своими соотношениями сторон. Таким образом создаем еще две фигуры — все они должны быть разными. В результате в менеджере объектов у вас должны быть:
Cube4
Cube3
Cube2
Cube1
Cube-main.
Выделяем из них все и переводим в полигональное представление.
Примечание: инструмент Morph в рамках Cinema4D может работать только с полигональными объектами или сплайнами.
Задача, которую мы сейчас сделаем, — это плавная трансформация от Cube-main к Cube1, от Cube1 к Cube2, и т.п., и последней фазой будет превращение Cube4 в Cube-main, таким образом, сформируем замкнутый цикл.
Итак, все основные фазы изменений у нас уже есть в наглядном виде, теперь в менеджере объектов выделяем Cube-main и в закладке тегов для него выбираем Character Tags -> Morph. В результате напротив объекта появится соответствующая пиктограмма, кликнув на которую указателем мыши, мы переходим к свойствам самого инструмента. Все, что нас интересует на данный момент, — это список Morphs, в котором изначально имеются две записи: Base Morph и Morph Target. Последний пункт удаляем (правая кнопка мыши, в контекстном меню — Remove).
Теперь в этот список указателем мыши добавляем по одному наши кубы Cube1, Cube2, Cube3 и Cube4. На запросы: «Import geometry with new geometry Targets?» отвечаем «No». Таким образом, в списке Morphs должно оказаться пять записей:
Base Morph b
Cube1 a
Cube2 a
Cube3 a
Cube4 a
Под Base Morph в данном случае подразумевается основной объект инструмента, то есть наш Cube-main.
Теперь нам нужно сделать невидимыми все промежуточные состояния для основного рабочего пространства, для чего перенесем их в другой слой и сделаем его невидимым. Делается это так:
1. Выделяем в менеджере объектов Cube1, Cube2, Cube3, Cube4 и объединяем в группу. Называем ее Cube-phases.
2. Затем нажимаем над Cube-phases правую кнопку мыши и в контекстном меню выбираем пункт Add To New Layer, в результате чего напротив самого объекта появится цветной квадратик.
3. Отключаем видимость группы Cube-phases (Visible in Editor — Off, Visible in Renderer — Off), другими словами, делаем две точки напротив этого объекта красными.
4. Нажимаем Shift+F4 (либо опять нажимаем над Cube-phases правую кнопку мыши и в контекстном меню выбираем Layers Browser), после чего откроется менеджер слоев, и в нем напротив появившегося отключаем указатель в колонке M. То есть делаем невидимым и в менеджере.
Все, предварительный этап подготовки слоев готов. В качестве проверки можете войти в список Morphs и покликать по состояниям — они будут отображаться.
Подключаем драйвер
В качестве драйвера можно использовать абсолютно любой 3D-объект, будь то обычный примитив, нулевой объект, а некоторые даже исхитряются делать интерактивные связи, используя в качестве объектов управления элементы сцены.
Мы возьмем самый простой случай, а именно, поместим в рабочую область Null Object, отнеся его для удобства на некоторое расстояние от трансформируемой части, в его настройках Display меняем представление с dot (точка) на Circle (окружность), увеличив радиус до того, чтобы нам было удобно с ним работать.
Теперь в менеджере объектов подключаем к нему тег Character Tags -> Driver и входим в его свойства. Здесь нам в первую очередь предлагается характер управления, точнее, тот параметр нашего объекта, который будет управляющим для переключений в Morph — свойство Driving Parameter, это может быть смещение, вращение и т.п. Наиболее удобным в данном случае является вращение, поэтому выбираем Rotation, ось указываем как Y, а параметр Max устанавливаем в -360 градусов, другими словами, за один оборот окружности будет происходить весь цикл превращений.
X Resolution — это количество промежуточных точек. У нас всего пять состояний в Morph, а шестым будет возвращение к Base Morph, таким образом, точек у драйвера тоже шесть.
Теперь необходимо подключить драйвер к конкретному трансформируемому объекту, что делается довольно просто: в свойствах тега драйвера есть пункт- окошко Driven Object, в него из менеджера объектов мы переносим конкретно Morph, то есть пиктограмму этого тега.
Теперь нам нужно соотнести точки, первую не трогаем, нажав на вторую, находим чуть ниже пункт Parameter, и в выпадающем списке видим все промежуточные состояния, выбираем Cube1 и так далее, пятая точка — это Cube4, шестую не трогаем.
Теперь заходим в тег Morph и переключаем его режим с Edit на Animate, после чего можем вращать наш Null Object и смотреть за трансформацией.
Добавляем возможности управления
Выше мы показали основные приемы трансформации и управления через загруженные состояния в рамках тега Morph. Но это далеко не все возможности. Давайте сделаем гибридный вариант управления, который бы позволил не только менять свойства объекта, но и, например, смещать его в пространстве.
Для этого опять переходим в наш тег Morph, переключаемся на режим Edit. При этом в данном случае нам не понадобится загрузка дополнительных состояний, а мы воспользуемся вариантом MoveTarget. Нажимаем кнопку Add MoveTarget под нашим списком, в результате к нему добавится соответствующий элемент. MoveTarget — это определенное состояние или положение, в которое переходит объект, это может быть смещение, вращение и т.п. В данном случае важно понимать, что MoveTarget распространяет свои действия применительно не к конкретным объектам, а к вершинам. Поэтому чтобы записать любой вариант смещения, нужно переключиться в соответствующий режим.
Допустим, мы хотим, чтобы наш объект поднимался вверх, для этого выделяем все его вершины (Ctrl+A), нажимаем в свойствах тега Morph только что подгруженный Move Target и затем переносим все вершины (то есть сам объект) в нужную точку пространства. Затем опять переходим к Move Target, переключаем Morph на режим Animate, где видим, что Move Target стоит в значении 100%. Если его начать менять, то объект будет двигаться. Драйвер в данном случае подключается по аналогии с предыдущим случаем, правда, несколько проще, потому как точек у нас будет всего две: начальная (ничего не указываем) и конечная (параметр Move Target).
Причем Move Target может работать только с частью вершин или точек сплайнов. Кстати…
Работа со сплайнами
Работа со сплайнами строится идентично указанному примеру, только вместо построения фаз изменения полигональных объектов вы делаете различные варианты исходной кривой. Из множества таких кривых с помощью модификаторов Loft либо просто Extrude «заливаются» поверхности, а управление анимацией ее движения производится за счет драйверов. И именно по такому методу обычно производятся такие вещи, как большие океанские волны, развевающиеся флаги (если нужно их цикличное воспроизведение), перелистывающиеся страницы и т.п.
Я когда-то показывал пример с волной, точнее, описал принцип действия по созданию, потому как не хватало времени на полноценную реализацию (участвовал в другом конкурсе). Изначально я нарисовал все фазы (формирование, накат, затухание) в виде нескольких кривых (отображение — вид сбоку), которые после поместил в Morph в качестве различных состояний одного и того же объекта. Потом подключил к Morph два управляющих объекта (драйвера), первый из которых при своем вращении руководил переходом от одной фазы (формы кривой) к другой, а второй отвечал за смещение нескольких промежуточных точек, описывающих непосредственно саму волну, то есть руководил ее движением.
Размножив этот суммарный объект, который, по существу, в каждый момент времени является обычной кривой, а также сделав несколько подобных, но более разнообразных, я получил каркас, который после прекрасно заливается модификатором Loft. То есть идея описана, а рабочий промежуточный результат отображен на иллюстрации.
Отдельные примечания
Инструмент Morph грамотно работает, если все фазы подразумевают равное количество точек, в результате чего идет плавная трансформация «точка-в- точку». Если количество разнится, вы не сможете удачно трансформировать, например, куб в сферу — для этого есть другой инструментарий и приемы. От анимации по ключевым кадрам данная техника отличается, прежде всего, упрощением множества процессов, например, вы хотите, чтобы ваш персонаж произнес речь (Lip Sync) — с использованием Morph это сделать гораздо удобнее, если у вас имеются различные шаблоны мимики и жестов. Это же касается и множества других элементов, например, реализация качающихся деревьев на ветру и так далее. В целом, очень удобный и выгодный вариант автоматизации анимации и оптимизации рабочего процесса как такового.
Создаем ключевые фазы трансформации объекта
Загружаем эти фазы в тег Morph
Подключаем Null Object в качестве драйвера
Вносим в драйвер все состояния (фазы) Morph
Вращаем Null Object. Смотрим на трансформацию
Я когда-то показывал этот пример с движущейся волной (рабочий вариант). Это и есть классическое использование Morph для сплайнов
Кристофер http://itcs.3dn.ru
Компьютерная газета. Статья была опубликована в номере 20 за 2011 год в рубрике soft