Привязка к кадрам

При создании анимации иногда бывает необходимо выполнить какие-то действия в зависимости от времени или, что в сущности одно и то же, номера текущего кадра. Осуществить привязку анимации к кадрам в Blender возможно с использованием встроенного Python API.

В качестве примера создадим несложную анимацию, последовательно превращающую одну из букв произвольного текста из строчной в заглавную.

  1. Для начала добавим в сцену текст:
    1. shift+a — Text
      1. переименовать его в «toLower»
      2. заменить базовое «Text» на что-нибудь более интересное, например «cartoon» (мультфильм).
      3. придать немного объемности
        1. в окне Properties во вкладке Object data в панели Geometry:
          1. Extrude = 5
          2. Depth = 1
          3. Resolution = 2
Создание текста

Для того, чтобы связать изменения текста с номером текущего кадра, необходимо отслеживать событие переключения кадров. Blender API предоставляет для этого возможность прослушивания следующих событий:

  • frame_change_pre — возникающего перед сменой очередного кадра
  • frame_change_post — возникающее после смены очередного кадра

Подключив для работы с API Blender внешнюю IDE PyCharm или же просто воспользовавшись встроенным текстовым редактором, определим функцию, которая будет выполнять необходимые действия при смене кадра:

В первых четырех строчках функция определяет переменные startFrame — номер первого кадра, endFrame — номер последнего кадра и currentFrame — номер текущего кадра, а так же ссылку на созданный ранее объект с текстом «toLower».

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

Осталось главное — подключить созданную функцию в качестве обработчика события смены кадров анимации.

Для этого необходимо добавить ее в список обработчиков события frame_change_pre:

Данный код сначала проверяет, не была ли зарегистрирована данная функция как обработчик этого события ранее, и если нет — добавляет ее в список обработчиков события frame_change_pre.

Полный код скрипта выглядит следующим образом:

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

Анимация после запуска скрипта

Можно подобрать шрифт повеселее, настроить фон и материалы и отправлять анимацию на рендер.