Создаём движущийся по траектории рой хаотично порхающих бабочек без XPresso
Урок добавлен 23.04.2023
К этому уроку прилагается 3D-сцена
Наша задача в данном уроке — создать замкнутый рой из хаотично порхающих бабочек, который плавно перемещается по траектории. Опытные специалисты по Cinema 4D сразу же вспомнят про XPresso, про узлы и триггеры управления частицами... и в этом случае, как ни странно, немедленно окажутся заложниками своего собственного опыта: для реализации нашей задачи есть значительно более простой, быстрый и эффектный способ.
Для начала создадим бабочку. Что она будет представлять собой в нашем исполнении? Учитывая, что в кадре одновременно будут видны не меньше сотни бабочек, что все они будут непрерывно находиться в движении и что в силу всего этого разглядеть каждую отдельную бабочку вблизи у зрителя не будет ни малейшей возможности — нам с вами вполне достаточно будет двух машущих крылышков. Дело упрощается до предела тем, что крыло бабочки не имеет видимой толщины и к тому же на вид абсолютно плоское. Создать такой объект в Cinema 4D — едва ли не самая простая задача. С этого и начнём.
Лезем в верхнюю панель инструментов, нажимаем пиктограмму создания сплайнов и в выпадающем меню выбираем создание одного из типов сплайнов (лично я в качестве стартовой заготовки предпочитаю прямоугольные сплайны типа «Rectangle», ведь форму сплайна всё равно предстоит редактировать до неузнаваемости по своему вкусу).
Сразу же после создания переводим сплайн в редактируемый сплайн, после чего переходим в режим редактирования точек и правим форму сплайна так, чтобы его контуры более-менее походили на контуры крыла бабочки.
Итак, контур крыла бабочки есть. Теперь нужно придать ему толщину, ведь сплайн — это всего лишь невидимая при рендере линия. Правда, вы можете вспомнить приведённое выше утверждение, что крыло бабочки не имеет видимой толщины (или, по крайней мере, не будет иметь её в нашей сцене). Вот тут-то нас с вами и поджидает маленький, но занятный парадокс: для создания не имеющего видимой толщины полигона необходимо придать контуру сплайна толщину — нулевую толщину! Фактически же, выражаясь более точно, мы с вами просто хотим заполнить внутреннее пространство замкнутого контура сплайна поверхностью (с незамкнутым контуром этот номер не пройдёт).
Создавать нулевую толщину крыла мы с вами будем, естественно, при помощи Extrude NURBS (модификатор вытягивания). Верхняя панель инструментов, пиктограмма создания NURBS-объектов, Extrude NURBS.
Осталось подчинить сплайн объекту NURBS... и нас с вами ожидает неприятный сюрприз: вместо ожидаемой нами толстой, вытянутой по вертикали пластины с контуром крыла мы видим в рабочем окне абсолютно плоский, размазанный по горизонтали хаос линий.
Не пугайтесь: это следствие создания сплайна в иной плоскости, нежели та, в которой пытается вытянуть его в высоту Extrude NURBS, только и всего. Вообще говоря, какое-либо вытягивание в высоту нам вообще не требуется — ведь согласно нашей задаче толщина крыла нулевая, и нам, по идее, достаточно просто щелчком мыши выделить Extrude NURBS в менеджере объектов и в открывшихся внизу свойствах указать значение 0 для всех ячеек параметра «Movement» («Смещение»). Но на будущее, для случаев, когда вам понадобится откорректировать привести в соответствие плоскость расположения сплайна и плоскость вытягивания, учтите: дело это вполне поправимое, нужно просто выбрать режим редактирования осей объектов, выбрать сплайн и повернуть его ось на 90 градусов (к слову говоря, ощутимо упростит эту задачу нажатие и удержание клавиши Shift — в этом случае поворот будет осуществляться строго с шагом 10 градусов), после чего вы увидите, что размазанная по плоскости модель крыла приобрела видимую толщину. А ещё проще указать в свойствах NURBS-объекта ненулевое смещение по другой оси, нежели текущая.
Ну ладно. Убедившись, что вытягивание осуществляется по вертикали, указываем нулевые смещения по всем осям и получаем вожделённое крылышко. Работа над крылом бабочки закончена — переводим объект Extrude NURBS в полигональный объект. В качестве бонуса за хорошее поведение можно присвоить полученному полигону какую-нибудь текстуру, например, лимонного цвета.
Что дальше? А дальше, очевидно, нам нужно создать зеркальную копию крыла. Лезем в менеджер объектов, нажимаем клавишу Ctrl, и удерживая её, цепляем и перемещаем полигон-крылышко на свободное место в менеджере объектов. Если мы с вами всё сделали правильно, то видим, что исходный полигон остаётся в менеджере объектов на прежнем месте, а ниже появился новый. В рабочем окне он, естественно, не виден, так как его положение идентично положению исходного полигона. Смещаем полигон-копию по горзионтали и указываем для него отрицательный размер по одной из осей, чтобы получить его в зеркальном отображении. «Отзеркалив» полигон, совмещаем его с полигоном-исходником.
На следующем шаге слегка подправим углы размещения крыльев — во-первых, крылья у бабочек никогда не развёрнуты полностью на 180 градусов, угол между крыльями у них всегда меньше, и во-вторых, не забываем, что бабочка у нас будет махать крыльями, поэтому угол должен составлять среднее арифметическое между значениями углов минимальной и максимальной фаз взмаха.
Ну вот и пришла пора задать анимацию крыльям бабочки. Как мы с вами это сделаем? Идею с ключами (на 5-й секунде — вверх, на 10-й секунде — вниз, на 15-й секунде... и так далее) мы с вами сразу же отбрасываем как совершенно дурацкую и неуместную — во-первых, долго и нудно, во-вторых, мы понятия не имеем о длительности нашей будущей анимации, и потому не знаем, сколько ключей понадобится. Взмаха с постоянными амплитудой и периодом нам вполне достаточно, и для этой цели великолепно подходит простой и удобный тег «Vibrato» — вот им и воспользуемся. Назначаем тег по очереди обоим крылышкам (щелчок правой клавишей мыши по наименованию крыла в менеджере объектов и последовательный выбор «Cinema 4D Tags» — «Vibrato» в каскаде выпадающих меню), подбираем параметры тега.
Здесь стоит попутно заметить, что нам с вами, вообще говоря, совершенно не было необходимости создавать полигональную копию крылышка-исходника — достаточно было бы использовать модификатор «Symmetry», расположенный у основания крылышка, чтобы получить зеркально отражённый клон последнего вместе со всеми трансформациями. Разница между двумя способами в том, что выбранный нами способ создания полигональной копии — предоставил в наше распоряжение полноценный самостоятельный редактируемый полигон со своими свойствами, а альтернативный с использованием «Symmetry» — лишь полностью зависимый от оригинала зеркальный клон. Зато при использовании второго способа тег «Vibrato» было бы достаточно назначить лишь крылу-оригиналу — зеркальный клон на протяжении всей анимации послушно повторял бы все его трансформации в зеркальном отображении.
Ну вот, отдельную бабочку мы с вами создали и анимировали. Теперь переходим к анимации роя бабочек. Модель поведения бабочек как его элементов, в отличие от «внутреннего» поведения бабочки (машет крыльями), будет немного посложнее: согласно нашему замыслу, все бабочки должны перемещаться вдоль одной и той же траектории, но с разной скоростью и с разным смещением относительно траектории, да к тому же это смещение на протяжении анимации должно меняться — то есть отдельные бабочки должны то приближаться к траектории, то удаляться от неё. Короче говоря, если вы заметили, наша задача сводится к тому, чтобы все бабочки внутри роя двигались максимально хаотично.
Приступаем. Вначале создаём сплайн траектории, затем объект MoGraph (мультипликатор объектов) и подчиняем ему то, что в нашей сцене является бабочкой (то есть группу из двух анимированных полигонов-крыльев или симметрию с одним анимированным полигоном). В качестве значения параметра «Mode» вкладки «Object» свойств мультипликатора указываем «Object» (это означает, что мультипликатор будет размножать бабочек не по одной из нескольких примитивных структурных заготовок, типа линии, а по узлам конкретного объекта, в нашем случае сплайна-траектории), в этой же вкладке ищем поле «Object» и перетаскиваем в него наименование сплайна, который играет роль траектории для роя. Не покидая вкладку, в качестве значения для параметра «Distrubution» («Распределение») выбираем «Count» (что означает для мультипликатора команду руководствоваться указанным вами количеством клонов в рое) и — соответственно — в поле «Count» указываем количество бабочек в рое.
Создаём хаос живности в сцене. Что может лучше послужить этой благородной цели, нежели эффектор «Random»? Правильно — ничего. Поэтому — верхнее меню, далее «MoGraph», в выпадающем меню «Effector», в выпадающем подменю — «Random».
Настраиваем эффектор: во вкладке «Parameter» его свойств отмечаем галочкой «Position» и ниже указываем, на какое максимальное расстояние по каким осям могут удаляться бабочки от своей первоначальной позиции в мультипликаторе в своих хаотических метаниях. Переходим во вкладку «Effector». А вот теперь — внимание! В качестве значения параметра «Random Mode» (это выбор одного из алгоритмов случайного распределения) выбираем «Noise» — этот вариант не только смещает клоны мультипликатора случайным образом в начале анимации, но и плавно меняет их смещение не менее случайным образом на протяжении анимации. Надеюсь, впрочем, вам понятно и без меня, что работа режима «Noise» так же плавно отразится и на углах поворота, и на вариантах масштаба, и даже на цветовых оттенках размноженных мультипликатором клонов — словом, на любых параметрах, какие вы разрешили модифицировать эффектору «Random».
Однако при проверке анимации нас с вами, скорее всего, ждёт ещё один неприятный сюрприз. Он заключается в том, что все клоны нашей бабочки машут крыльями совершенно синхронно, что напрочь рушит ощущение хаотичности происходящего. Для решения проблемы проще всего создать копию исходника бабочки (именно полноценную копию, а не клон, так как клон наследует не только геометрию, но и все трансформации модели-донора!) и анимировать движение её крыльев, если можно так выразиться, «в противофазе» по отношению к исходной модели — для этого достаточно сменить у тега «Vibrato», который анимирует поведение крыльев скопированной нами бабочки, положительное значение амплитуды угла поворота крыльев на отрицательное. В результате таких манипуляций мы добьёмся того, что мультипликатор будет размножать сразу и оригинал бабочки, и машущую крыльями «в противофазе» копию последней, что сразу же «погасит» эффект синхронности.
Ну и совет напоследок. Не исключено, что кому-то из вас захочется (или понадобится) реализовать такую штуку, как осыпание элементов при взаимостолкновении. Для этого дополнительно придётся задействовать в сцене физику: назначить мультипликатору тег «Dynamics Body» (щелчок правой клавишей мыши на MoGraph Cloner, в выпадающем меню «Dynamics Tags», в выпадающем подменю «Dynamics Body») с установленным для параметра «Individual Elements» вкладки «Collision» значением «Second Level» или «All» (это для расчёта динамики отдельных элементов, а не всего роя как единой модели) — не забываем попутно выставить для этого тега значение «On» параметра «Dynamic» во вкладке «Dynamics» и в этой же вкладке выбрать значение «On Collision» («При столкновении») для параметра «Trigger», — и такой же тег (со значением «Off» параметра «Dynamic» во вкладке «Dynamics» и со значением «Immediately» параметра «Trigger» в этой же вкладке) присвоить поверхности, на которую будут осыпаться элементы после столкновения.
Ну а более сложные варианты поведения элементов — в следующих уроках.
В заключение урока — видео с примером анимации в HD-разрешении.