Геймдев
#статьи

Уроки по Blender: основы анимации

Разбираемся в более продвинутых понятиях и инструментах.

Иллюстрация: Busbus / Rawpixel / Image from Pngegg / Pngegg / Annie для Skillbox Media

Андрей Соколов

Специалист по компьютерной графике, оптимизации и автоматизации проектов. Автор серии уроков по Blender.

Год назад в рамках своего YouTube-канала Андрей записал подробный курс по Blender, в котором работает более семи лет. Обучение начинается с основ, рассчитанных в первую очередь на новичков, но последующие уроки могут быть интересны и для продвинутых пользователей — в них Андрей затрагивает скрытые возможности софта. Сам материал записывался в версии программы 2.90.1, но знания актуальны как для ранних версий (от 2.80), так и для последней (3.0.0).

Делимся основными тезисами пятого видеоурока, в котором изложены основы анимации с помощью ключевых кадров, драйверов и модификаторов. С предыдущими уроками, посвящёнными структуре объектов, оптимизации и рандомизации через инструменты Blender и скрипты Python, можно ознакомиться по ссылке.

Пятый урок по Blender от Андрея Соколова

Анимация с помощью ключевых кадров

В Blender существует несколько способов анимации. Самый очевидный — анимация при помощи ключевых кадров или кейфреймов (Keyframe). В нижнем окне программы по умолчанию открыт таймлайн — временная линия, на которой можно фиксировать различные параметры объектов в виде ключевых кадров.

Расположение таймлайна в Blender 3D. Скриншот: Леон Балбери для Skillbox Media

Попробуем зафиксировать положение куба на кадре 1. Выбираем объект, нажимаем I — горячую клавишу Меню вставки ключевых кадров (Insert Keyframe Menu) — и выбираем Положение (Location). На таймлайне добавится кейфрейм со значением «0, 0, 0».

Значение положения объекта отобразится на панели «Трансформация» (Transform). Скриншот: Леон Балбери для Skillbox Media

Переходим на 50-й кадр, перемещаем куб куда-нибудь в сторону, ещё раз нажимаем I и выбираем Положение (Location), фиксируя новые координаты. Запускаем воспроизведение анимации в таймлайне (Space) и видим передвижение объекта. Программа самостоятельно высчитывает, как он двигается между двумя заданными ключевыми кадрами.

Воспроизведение анимации с помощью ключевых кадров

Движение производится плавно, поскольку по умолчанию при добавлении кейфреймов интерполяция между ними представлена в виде кривой Безье. Это визуально отображено в Редакторе графов (Graph Editor).

Редактор графов во вкладке «Тип редактора». Скриншот: Леон Балбери для Skillbox Media

Редактор графов похож на таймлайн, но в нём отображена более детальная информация о ключевых кадрах и том, как они интерполированы — то есть как кривая отображается на графике.

Кривая Безье в редакторе графов. Чтобы масштабировать и перемещать рабочее пространство по своему усмотрению, используйте комбинации Ctrl + СКМ и Shift + СКМ. Скриншот: Леон Балбери для Skillbox Media

Как уже упоминалось ранее, в качестве режима интерполяции по умолчанию используется кривая Безье — это означает, что объект медленно начинает движение, разгоняется и постепенно замедляется к концу анимации. Для наглядности переведём Центр трансформации (Pivot Point) в режим Индивидуальные центры (Individual Centres) и сделаем кейфреймы чуть шире при помощи клавиши S. Это отразится на графике, и распределение скорости движения объекта между кейфреймами изменится. С этими настройками также можно экспериментировать.

Увеличение кейфреймов в редакторе графов

Рассмотрим другие режимы интерполяции. Полный список вызывается клавишей T.

Линейно (Linear) — объект движется равномерно, без замедлений и ускорений. Этот режим может оказаться удобным для таких задач, как, например, анимация вращения Земли вокруг своей оси.

Анимация в режиме интерполяции «Линейно»

Постоянно (Constant) — промежуточное значение между кадрами отсутствует. Подойдёт для стоп-моушн-анимации.

Анимация в режиме интерполяции «Постоянно»

Рассмотрим режимы из списка Динамические эффекты (Dynamic Effects).

Отскоки (Bounce) — эффект затухающего подпрыгивания объекта после его падения.

Анимация в режиме интерполяции «Отскоки»

Упругое (Elastic) — эффект струны, которую натянули, а затем отпустили.

Анимация в режиме интерполяции «Упругое»

Сзади (Back) — объект перелетает чуть дальше заданной точки и возвращается к ней.

Анимация в режиме интерполяции «Сзади»

Попробуем анимировать другие параметры, например вращение. Задаём для объекта исходный угол вращения, вызываем меню через горячую клавишу I, выбираем Вращение (Rotation). Затем повторяем то же самое для другого кадра.

примечание

Меню вставки ключевых кадров необязательно вызывать во вьюпорте. Можно навести курсор на нужный параметр во вкладке Трансформация (Transform), при необходимости изменить значение и нажать I. Параметр станет жёлтым, оповещая, что изменения зафиксировались в ключевом кадре.

Быстрая настройка вращения для ключевого кадра

Анимация с использованием ключевых кадров работает не только со стандартными параметрами объектов (положение, вращение, масштаб), но и с настройками материалов, модификаторов и прочих инструментов программы.

Изучаете Blender? Присмотритесь к курсу Skillbox «3D-художник». Проходя курс, вы научитесь работать с Autodesk Maya, Blender, Houdini, Substance Painter и Photoshop с нуля до профессионального уровня.

Анимация с помощью драйверов

Драйверы в Blender дают возможность задавать зависимости каких-либо параметров одного объекта от определённых параметров другого. Рассмотрим это на практике.

Удаляем прошлый объект, создаём новый куб и пустышку Оси (Plain Axes), с которой мы работали во втором уроке. Перемещаем её в сторону по оси X (G + X), выделяем куб и, кликнув правой кнопкой мыши по одному из трёх параметров Вращения (Rotation) на панели Трансформация (Transform), выбираем пункт Добавить драйвер (Add Driver).

Опция «Добавить драйвер» в открывшемся меню. Скриншот: Леон Балбери для Skillbox Media

Появится окно с настройками драйвера (всплывающее предупреждение игнорируем). Драйверы поддерживают однострочные выражения на языке Python, но по сравнению с полноценным скриптингом их функциональность сильно ограничена. В ряде случаев использование драйверов может привести к нестабильной работе — например, анимированные с их помощью объекты при рендере останутся статичными или будут двигаться не так, как при воспроизведении анимации во вьюпорте. Тем не менее драйверы удобны для совершения простых операций.

примечание

Функционал Python в драйверах ограничен встроенными методами языка Python и содержанием нескольких импортированных в пространство драйверов модулей: math, mathutils, bpy. Для тех, кто разбирается в Python, выражение, которое мы здесь пишем, — это, по сути, лямбда-функция, со всеми вытекающими последствиями. Полный список доступных классов и методов можно посмотреть в Консоли Python (Python Console) (см. третий урок) через автозаполнение в словаре bpy.app.driver_namespace. С помощью скриптов Python в этот словарь можно добавлять и другие функции.

У драйверов есть параметр Тип (Type), то есть способ, с помощью которого драйвер вычисляет итоговое значение. В этом уроке мы рассмотрим тип Скриптовое выражение (Scripted Expression).

Выбор объекта, от параметров которого будет зависеть куб. Скриншот: Леон Балбери для Skillbox Media

Зададим переменную для куба. В качестве Объекта (Object) выбираем Пустышку (Empty). Напротив пункта (x) изменяем название с «переменной» (в английской версии var) на empty. В Выражении (Expression) также заменяем var на empty.

Замена названия в выражении. Скриншот: Леон Балбери для Skillbox Media

Ниже, в пункте Тип (Type), определяем, какой именно параметр пустышки мы будем применять в качестве драйвера для вращения куба. Выберем Положение X (X Location) — это означает, что для вращения куба мы используем позицию Пустышки (Empty) по оси X. Теперь, если двигать пустышку по этой оси — куб начнёт вращаться.

Вращение объекта с помощью пустышки

Для анимаций можно писать небольшие формулы. В драйверах они называются выражениями. Возвращаемся в меню, нажав на модифицированный параметр ПКМ и выбрав Редактировать драйвер (Edit Driver). В Выражении (Expression) умножаем переменную empty на 2 и нажимаем Enter.

empty * 2

Знак звёздочки (*) означает умножение. Нажимаем Enter. Теперь, если перемещать пустышку по оси X — куб вращается в два раза быстрее.

Вращение объекта с помощью пустышки при удвоенном значении

Продолжаем эксперимент: дублируем куб (Shift + D), выделяем его и чуть сдвигаем в сторону. Заходим в Редактировать драйвер (Edit Driver) и в строке Выражение (Expression) пишем:

empty * 4

Так второй куб будет вращаться уже в четыре раза быстрее, что хорошо заметно в сравнении с первым.

Пример вращения двух объектов, имеющих разное скриптовое выражение, с помощью пустышки

Этим методом удобно анимировать механизмы, шестерёнки и различные конструкции, зависимые друг от друга. Во время работы всегда проверяйте, отобразится ли итоговый результат в рендере и при экспорте. Рекомендуется воздержаться от сложных систем анимаций — использование драйверов не даёт стопроцентной гарантии корректного воспроизведения анимации даже при простых операциях.

примечание

Важно знать, что в Выражении (Expression) нельзя импортировать модули Python. Например, в теории можно было бы установить случайное число для вращения множества кубов, как в третьем уроке, написав для первого куба выражение empty *2 *random.randint (0,100). К сожалению, драйвер «не знает» ни о модуле random, ни о методе randint, поэтому случайные числа можно использовать только непосредственно в Python.

Существуют выражения, которые позволяют анимировать объекты без участия других объектов. Удалим данные из первого куба — его переменную и само выражение. Анимация — это изменение параметра во времени, и на каждом кадре у него может быть своё значение. Если написать в Выражении (Expression) слово frame — драйвер на каждом кадре будет выставлять значение параметра, равное текущему кадру. Так происходит потому, что frame в Blender — ключевое слово, обозначающее номер текущего кадра.

Вращение объекта по оси X при использовании frame в качестве значения параметра

примечание

При подключённом драйвере необязательно переходить в меню Редактировать драйвер (Edit driver), чтобы поменять выражение. Достаточно щёлкнуть ЛКМ по параметру, который нужно изменить, прямо во вкладке Трансформация (Transform) и набрать выражение там.

Сейчас куб вращается с огромной скоростью — на кадре 9 он поворачивается на 516°. Это объясняется тем, что для параметра вращения счёт идёт в радианах, а не в градусах. Чтобы перевести значение в градусы, напишем выражение.

frame/180*pi

В данном случае pi — тоже ключевое слово, которое обозначает математическое число π (3,14159…). Нажимаем Enter и видим, что на кадре 9 куб поворачивается на 9°. Если анимацию нужно ускорить — умножаем формулу на нужное число (для наглядности возьмём первую часть выражения в скобки), например 20:

(frame/180*pi) * 20

Теперь куб начнёт вращаться со скоростью 20° в кадр, и на кадре 9 он повернётся на 180°. Чтобы замедлить вращение, уменьшите число.

Скорость вращения куба при умножении выражения (frame/180*pi) на 20, 10 и 3

Ещё можно написать выражения с использованием синусов (sin), косинусов (cos), тангенсов (tan), арктангенсов (atan) и других функций. Рассмотрим следующий пример:

sin (frame/180*pi*20) 

Если вы помните из уроков математики, на графике синус отображается в виде волны. При таком выражении куб начнёт вращаться из стороны в сторону.

Покачивание куба при выражении sin (frame/180*pi*20)

Для уменьшения амплитуды можно поделить значение — например опять на 20:

sin (frame/180*pi*20)/20

В этом случае куб будет слабо покачиваться.

Такие базовые операции очень удобны для реализации каких-то фоновых событий, например полёта облаков по небу или колыхания травы, — нужно всего лишь «повесить» драйвер на объект, и тот будет двигаться сам по себе. При этом никакие ключевые кадры не нужны.

Чтобы удалить драйвер с объекта, кликните ПКМ по модифицированному параметру и нажмите Удалить драйверы (Delete Drivers).

Здесь мы напомним про курс Skillbox «3D-художник». За год обучения вы научитесь 3D‑моделированию, добавите более 20 практических работ в портфолио и освоите профессию, востребованную в кино- и игровой индустрии.

Анимация с помощью модификаторов

Ещё один инструмент для анимации — модификаторы в Редакторе графов (Graph Editor). Рассмотрим, как они работают.

Переходим в начало таймлайна, затем на панели Трансформация (Transform) кликаем правой кнопкой мыши на Положении (Location) объекта по оси X и выбираем Вставить ключевые кадры (Insert Keyframes).

Пример вставки ключевого кадра через панель «Трансформация»

Теперь переходим во вкладку Object Transforms, которая появилась в левой части Редактора графов (Graph Editor). Выбираем пункт X Положение (X Location) и нажимаем N. Справа появится панель со вкладкой Модификаторы (Modifiers).

Расположение вкладки модификаторов в редакторе графов. Скриншот: Леон Балбери для Skillbox Media

В списке Добавить модификатор (Add Modifier) выбираем Шум (Noise). Он изменяет положение объекта по оси X независимо от ключевых кадров, хотя мы по-прежнему можем изменять это положение на графике кейфреймов. При добавлении модификатора общая траектория графика не меняется, но теперь именно он устанавливает точное положение объекта на основе заданного ключевыми кадрами.

График «X Положения» до и после модификатора.

После добавления Шума (Noise) на панели появится список параметров модификатора. Рассмотрим их.

Масштаб (Scale) — отвечает за скорость движения объекта (в данном случае по оси X, потому что выбрана ось X).

Интенсивность (Strength) — амплитуда, с которой объект передвигается по оси.

Смещение (Offset) — сдвиг огибающей шума назад или вперёд.

Фаза (Phase) — создаёт случайный исходный элемент (фазу или противофазу).

Глубина (Depth) — добавляет небольшую динамику внутри, как при потряхивании.

Попробуем применить настройки для остальных осей. Копируем модификатор вместе с заданными параметрами, нажав на значок, указанный на скриншоте ниже.

Кнопки «Копировать» и «Вставить». Скриншот: Леон Балбери для Skillbox Media

Выбираем другую вкладку, например Y Положение (Y Location), и вставляем настройки, кликнув на значок, расположенный рядом со значком копирования. Теперь куб двигается по двум осям. Для наглядности мы можем чуть изменить параметр Смещения (Offset) и увидеть, как объект хаотично передвигается по осям X и Y.

Изменение параметра смещения на скопированных настройках и демонстрация хаотичного движения куба по двум осям

Аналогичные манипуляции можно провести и с осью Z. Если снова скопировать настройки и изменить параметр Смещения (Offset), куб начнёт беспорядочно передвигаться уже по трём осям. Модификатор очень удобен, если объектам нужно задать хаотичное движение.

Свойства модификаторов можно ограничивать. Отключим модификатор для осей Z и Y, нажав на галочку справа.

Расположение галочки отключения модификатора. Скриншот: Леон Балбери для Skillbox Media

Модификатор для X Положения (X Location) оставляем включенным. В его настройках выбираем пункт Ограничить диапазон кадров (Restrict Frame Range) и задаём диапазон — с какого по какой ключевой кадр будет работать модификатор. Для примера возьмём промежуток от 50 до 150. Если нужно плавное затухание в начале и в конце анимации, помогут параметры Начало смещения (In) и Выход (Out) — аналоги fade-in/fade-out в звуковых дорожках. Настраиваем их на своё усмотрение и смотрим результат.

Пример использования модификатора «Шум» с ограниченным диапазоном кадров и плавным затуханием

Если одного модификатора недостаточно, можно добавить ещё один Шум (Noise) и активировать его на другом отрезке таймлайна или наложить на первый — например, чтобы создать «фон».

Комбинация двух модификаторов «Шум»

Кроме Шума (Noise) есть и другие модификаторы. Напоследок рассмотрим один из них — Генератор (Generator). Добавим его для X Положения (X Location) и включим в настройках Добавление (Additive) — так его значения будут добавляться к значениям предыдущего модификатора. В противном случае он их перекроет. Для наглядности в пункте x^1 уменьшим значение до 0,1 — теперь при анимации куб медленно «поедет» по оси X. Так как у нас включён предыдущий модификатор Шум (Noise), с 50-го по 150-й кадр объект будет «потряхивать».

Пример комбинации «Шума» и «Генератора» в одном цикле анимации

При этом вручную выставлять ключевые кадры не нужно, как и с драйверами, — вся анимация происходит автоматически. На практике такие колебания, тряски и другие простые движения придают объектам больше жизни и отлично подойдут для анимации в костях арматуры (объекта, схожего с человеческим скелетом), которую мы рассмотрим в следующем уроке.

примечание

Хоть анимация и происходит автоматически, для того, чтобы можно было воспользоваться модификаторами, необходимо установить хотя бы один ключевой кадр на нужном параметре.

Таким образом, мы изучили три основных способа воспроизведения анимации, которые можно использовать для решения любых задач, независимо от сложности проекта. А дальнейшие эксперименты с настройками помогут реализовать все ваши задумки.

Любите игры? Попробуйте себя в геймдеве!

❓ Кто вы: геймдизайнер, разработчик, концепт-художник? Узнайте на бесплатном курсе

😼 Узнать, кто я →
Кто вы в мире геймдева? Узнайте на бесплатном курсе ➞
Вы на практике попробуете 3 профессии: геймдизайнера, 2D-художника и разработчика на Unity. Создадите свою первую игру в стиле Mario. Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована