Theory/KeyFraming

Rib 

Анимация по ключам

Введение

Общепринятый метод анимации – анимация по ключам: аниматор явно задает значение некоторых характеристик сцены в определенных кадрах, называемых ключевыми. Значение характеристик в остальных кадрах рассчитывается автоматически интерполяцией (или экстраполяцией) значений ключевых кадров. Renderman работает с анимацией на самом «низком» уровне: интерполировать ключи он не умеет, поэтому анимация должна быть явным образом задана покадрово.


В Renderman Interface? есть два способа для описания анимции:

  1. с помощью последовательности RIB-файлов, в которой каждый файл описывает один кадр анимации.
  2. с помощью одного RIB-файла, в котором описывается последовательность кадров.

Пакеты вроде Maya и Houdini используют первый подход: каждый кадр – отдельный RIB-файл.


Мы же рассмотрим, второй вариант, когда внутри одного RIB-файла много блоков FrameBegin FrameEnd



В результате рендера этого RIB-файла получается сиквенс с вот такой анимацией:

Создение анимации в .key-файле при помощи Cutter

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


Так например в Cutter'е присутсвуют инструменты упрощающие создания подобных rib-файлов с покадровой анимацией.
Анимация описывается в файле с расширением .key, которые представляют из себя обычные RIB-файлы с добавлением некоторых специальных команд, распознаваемых Cutter'ом. Перед отправкой .key файла на рендер Cutter производит его препроцессинг и превращает его либо в «правильный» RIB, содержащий много блоков FrameBegin / FrameEnd, задающих анимацию, либо в последовательность RIB-файлов, по файлу на кадр анимации.


.key-файлы для Сutter'а можно писать с чистого листа, но обычно проще толкаться от уже существующего RIB-файла. Для этого нужно выполнить в Cutter команду: Rman Tool?->Docs->Convert To Keyframe. В результате Cutter создаст .key-файл который дважды повторяет код исходного RIB'а, включенный в пару блоков KeyFrameBegin / KeyFrameEnd. Ниже приведен пример простейшего .key-файла, созданного таким способом.



Обратите внимание на то, что команды Display и Format находятся до блоков KeyFrameBegin/KeyFrameEnd. Первой не RI-командой является


Tween “output” “all”


Она сообщает Cutter'у о том, что необходимо сгенерировать все кадры анимации и записать их в один RIB-файл. Следующая команда Tween говорит о том что в анимации будет 16 кадров:


Tween “from” 1 “to” 2 “frames” 16


Для того чтобы получить всего один кадр анимации, например десятый кадр, нужно заменить первую команду Tween на такаую:


Tween “output” 10


В .key-файле можно задать большее число ключевых кадров, каждый их которых должен быть оформлен в виже KeyFrameBegin/KeyFrameEnd блока с соответствующим номером. В частности, к рассмотренному выше примеру можно дописать:



Блоки KeyFrameBegin/KeyFrameEnd должны иметь одинаковую структуру и могут отличаться только значением числовых параметров команд. В противном случае Cutter выдаст ошибку при генерации RIB-ов с анимацией.


Добавим в .key-файл также дополнительные команды Tween



По умолчанию переходы между значениями ключевых кадров происходят линейно. Для интерполяции с плавным стартом и окончанием нужно использовать следующую форму:


Tween “from” 1 “to” 2 “frames” 16 “smooth”


В таком случае первую половину интервала из 16 кадров анимация будет «разгонятся», а второую – «тормозить».


Возможна еще более тонкая настройка плавного старта и финиша в переходе между ключевыми кадрами. Для этого нужно пользоваться атрибутами команды Tweeneasyin и easyout (в данном случае это «в» («in») и «из» («out») относительно интервала между ключами, а не самих ключей). К примеру:


Tween “from” 2 “to” 1 “frames” 100 “easein” 0.2 “easeout” 0.4


В данном примере на разгон отведено первые 20 кадров, последние 40 – на торможение, а в 40 кадрах между ними значение параметров будет меняться по линейному закону.

Анимированные текстуры


Анимированная текстура (если она не процедурная) обычно предсталяет собой сиквенцию? обычных текстур. Cutter позволяет при помощи рассмотренного выше подхода итерироваться по элементам этой сиквенции. К примеру:



Для того, чтобы такой .key-файл был корректно обработан Cutter'ом необходимо, чтобы текстура имела расширение в виде трехцифрового номера кадра, а число кадров указанных в команде Tween совпадало с количеством текстур, определенных парой KeyFrame блоков. Все текстуры по указанным путям должны существовать (Cutter не может сам генерировать недостающие кадры сиквенций).


В целях экономии дискового пространства, в рассмотренном примере все текстуры после конвертирования помещаются в один и тот же файл myTex.tex последовательно перезаписывая друг друга с каждым новым кадром.