Это заметка по самым базовым понятиям, связанным с анимацией в композитинге и VFx. Я уже не раз говорил про «анимацию», но не затрагивал детали. Теперь пора синхронизировать понимание темы.
О чем речь?
Когда мы работаем с программами, основной основ всей анимации является изменение (чаще всего числовых) значений во времени — именно к этому все и сводится.
Например, в первом кадре значение некоторого параметра s = 20, во 2-м s = 21, в 3-м s = 22 и так далее. Такие изменения значений можно использовать для создания анимаций. Например, пусть эта s означает размер некоторой фигуры, тогда в 1-3 кадрах эта фигура будет постепенно увеличиваться в размере. Или мы можем привязать значение s к громкости звуковой дорожки — и получим плавно нарастающий звук. Если s в каждом кадре прибавлять к координатам какого-нибудь объекта, то этот объект будет двигаться.
Примечание: в этой статье во всех примерах с трехмерной системой координат ось Y направлена вверх, а XZ — горизонтальная плоскость.
Анимированным у нас называется любой параметр, значение которого меняется с течением времени (даже если всего один раз за весь промежуток времени, так тоже бывает).
Для удобства восприятия проще всего представлять себе анимированные параметры как 2-мерные графики, где x-координата — это время, а y — значение параметра в момент времени. Да, практически любой софт, позволяющий что-то анимировать, имеет такое представление анимаций.
Виды анимации
Базовых видов анимации — два: анимация по ключевым кадрам (keyframe animation) и процедурная анимация (procedural animation). Они могут использоваться по отдельности или совместно.
Анимация с помощью ключевых кадров и интерполяция
Ключевой кадр — это кадр анимации, для которого задано конкретное значение определенного параметра. На изображении ниже ключевыми кадрами для параметра S (из первоначального примера) являются кадры 1, 2, 3, 4 и 10 — на графике изменения значения S они обозначаются точками. Также можно видеть, какие значения заданы для S в этих точках (20, 21, 22, 23 и 29 соответственно).
Такие «ключи» могут задаваться вручную, а могут создаваться в результате работы тех или иных алгоритмов (например, трекинга или записываться Motion control'ом).
Интерполяция — это метод расчета промежуточных значений параметра. На приведенной выше иллюстрации видно, что не для всех кадров заданы значения S. Тем не менее, линия графика показывает, что они существуют. Значения S между 4 и 10 кадром получены при помощи интерполяции — в данном случае линейной.
В общем случае существует три вида (метода) интерполяции:
- линейная (linear) — соедините два ключевых кадра прямой линией, и вы получите этот метод интерполяции;
- постоянная (constant) или ступенчатая — значение параметра из предыдущего ключевого кадра дублируется на все последующие кадры до следующего ключевого, который скачкообразно меняет значение на новое;
- кривая (сплайн) — значение параметра между ключевыми кадрами меняется не линейно, а неравномерно; график изменения значений в данном случае представляет собой тот или иной вид сплайнов, среди которых самыми распространенными являются кривые безье (bezier)
Анимация ключевыми кадрами позволяет реализовать любую анимацию, которая в принципе возможна средствами программного обеспечения, правда, иногда работа исключительно через ключевые кадры может быть излишне муторной, а посему была придумана...
Процедурная анимация
Если в анимации по ключевым кадрам изменение значения описывается установкой конкретных значений в конкретный момент времени (и методов расчета промежуточных значений), то процедурная (или вычисляемая) анимация — это подход, описывающий правила вычисления значений в каждый момент времени. Проще говоря:
- анимация по ключевым кадрам — это набор конечных значений;
- процедурная анимация — это формулы для вычисления значений.
Чтобы не оставалось вопросов, да, интерполяция между ключевыми кадрами — технически тоже процедурный элемент, хотя об этом не принято говорить, потому что это он слишком примитивен.
Процедурная анимация описывается математическими формулами и/или программным кодом (выражения, скрипты, программы). В ряде случаев это позволяет существенно оптимизировать процесс создания анимации, а иногда (не так, чтобы очень редко, на самом деле) это единственный способ решить задачу в разумные сроки.
В этом примере нет ни одного ключевого кадра — вся анимация создана процедурно. Значения расположения объекта и его угла вращения рассчитываются от номера текущего кадра F.
Кобминация видов анимации
Оба способа анимации часто задействуются совместно, отлично дополняя друг-друга. Например, можно сделать анимацию камеры при помощи ключей, но добавить к итоговым кривым функцию легкого шума (случайных значений), чтобы создать эффект съемки с рук. Приведенный выше пример с круговым движением объекта можно дополнить анимацией движения объекта по некоторой траектории, заданной ключами. Результатом трекинга всегда становится ключевая анимация, к кривым которой можно затем применить функции сглаживания. Можно сделать фрагмент анимации при помощи ключей, а затем использовать скрипты, чтобы продлить его, интерполировать или построить на его основе множество легко управляемых вариаций — примеры можно приводить бесконечно.
Специалист исходит из вопросов целесообразности и оптимизации: если работать ключевыми кадрами будет быстрее (в том числе и править результат), он будет работать ключевыми кадрами. Если процедурная анимация в перспективе даст выигрыш во времени работы, — будет писать скрипты.
Что можно анимировать
Конкретный состав анимируемых параметров зависит от конкретной программы, но как правило анимировать можно практически всё, чему позволено так или иначе задать какие-либо значения. А вот в зависимости от типов данных этих значений варианты их анимаций могут различаться.
Числа
Самый распространенный тип параметров — числовой. Координаты, цвет, прозрачность, масштаб, поворот, большинство параметров шрифтов и линий — всё это числа и их массивы.
Числа можно анимировать при помощи и ключей, и выражений. Ну и, конечно, раз в основе всего (по крайней мере, в мире компьютеров и ПО) лежит математика, то с числами можно использовать любые доступные алгоритмы интерполяции.
Строки
Строковые или текстовые параметры также хорошо известны, хоть в реальной жизни встречаются относительно нечасто (если сравнивать с общим количеством редактируемых параметров). Текст можно генерировать процедурно, алгоритмы работы с символами позволяют получать достаточно сложные анимации, а вот ключевая анимация поддерживает только постоянную интерполяцию: текстовые значения просто переключаются от одного к другому.
Флажки (логические)
Такие принимают всего 2 значения: включен или выключен, да или нет, 1 или 0, истина или ложь. В программировании такой тип данных называют булевым (boolean) или просто логическим.
Значение может вычисляться скриптами, а может задаваться ключами, между которыми всегда будет константная интерполяция: промежуточных значений попросту не существует.
Списки
Списки — это наборы значений, которые может принимать данный тип параметра. Всё множество вариантов значений (будь то строки или числа) заранее определено и конечно. Как можно догадаться, и скрипты, и ключи могут задавать новые значения, а интерполяция будет только ступенчатая.
Остальные
Зачастую в программах можно встретить такие «сложные» параметры как гистограмма, градиент, кривая и т. п. Они, фактически, являются «сложными наборами» описанных выше «простых» типов (чаще всего чисел) — и в анимации ведут себя соответственно задействованным в их комбинации базовым типам.
Инструменты работы с анимацией
У каждого программного продукта есть свой инструментарий для работы с анимацией, и хорошая новость заключается в том, что сейчас они все практически унифицированы. Умные дядьки со всего мира, пишущие софт, который мы с радостью юзаем, за годы существования индустрии-таки смогли найти наиболее удобные инструменты. Говоря научным языком, инструментарий унифицирован. Внешне редакторы могут различаться, но суть при этом не меняется.
Таймлайн (Timeline)
Рекомендуется для ежедневного использования. Позволяет ответить на вопросы, вроде, «в какой момент времени начинается и заканчивается тот или иной клип», «в каких кадрах стоят ключи анимации».
На скриншоте хорошо видно, как отдельный слой (клип или корректор) начинается и заканчивается в нужном кадре; ромбики (квадратики, кружочки, многоугольнички, точки и т. п.) под каждым клипом (слоем) — это и есть ключевые кадры анимации: метка времени для определенного параметра, где задано его конкретное значение. Значения в кадрах между ними интерполируются. Также под двумя треками есть простые выражения — элементы процедурной анимации, модифицирующие анимацию, созданную ключами.
Такое представление структуры и анимации удобно для размещения клипов, изображений, корректоров, генераторов во времени, синхронизации клипов, а также для управления расположением (также во времени) ключевых кадров, их соотнесения друг-с-другом.
Редактор кривых (Curve editor)
Это инструмент тонкой настройки анимации — он отображает все значения выбранных параметров во времени в виде 2-мерных графиков (то самое представление, с которым мы сталкивались на протяжении всей статьи).
При работе с ним художники стараются, как правило, скрыть все лишние графики, оставив видимыми только те параметры, которые необходимы для работы в данный момент. Кривые позволяют точно настроить значения ключевых кадров и интерполяцию, а также увидеть работу процедурных генераторов значений.
---------------------------
Вот мы и разобрались еще с одними основами, и все более и более готовы переходить к сложным темам (да, я обещал их и они на подходе — мне просто хочется подбить базу, чтобы у большинства читателей было понимание вещей, о которых пойдет дальше речь). Надеюсь, эта статья была полезна. Если да — подайте мне сигнал и подписывайтесь, материала много, будет еще интереснее. Вопросы, замечания, пожелания или идеи пишите в комментариях — прочитаю, учту, отреагирую. Всего хорошего!