Теперь вы можете ориентировать условную антенну, перемещая локатор и группу друг относительно друга, а также вытягивать ее или сжимать, передвигая верхний цилиндр.

Сохраните сцену (telescope_final.ma).

Напоследок замечу, что в данном примере expressions предназначены для задания связи между объектами, которую можно описать следующими словами: «если объекты расположены так, то делать одно действие, а если эдак, то делать другое, в противном же случае - ничего не делать!». Реализовать такую зависимость другими средствами (констрейнами, Set Driven Key) было бы очень и очень непросто, особенно логику типа «в противном же случае - ничего не делать». Поэтому перед выбором подходящих средств для определения связей между объектами всегда стоит хорошенько подумать о логике этих связей и, быть может, даже сначала описать эти связи «человеческим» языком или в виде блок-схемы.

Общие принципы создания и использования expressions

После такого подробного и пошагового разбора примеров я хочу немного ускорить темп и поговорить об общих принципах написания и применения expressions.

Прежде всего, следует постоянно помнить о том, что expressions - это объекты {точнее, ноды), хранящиеся вместе со сценой. Вы всегда можете увидеть их в Hypergraph и там же «распутать» или исследовать их связи с другими объектами.

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

Если говорить о циклических движениях, в их основе лежат, как правило, триногометрические функции sin() и cos(), зависящие от времени. Случайными перемещениями «заведуют» функции rand() и noise(). Примерами циклических движений могут служить различные спиралевидные траектории, колебания вокруг некоторой точки, размахивание крыльями, руками и другими конечностями, мигание маяка и прочее. Примеров хаотических перемещений так много, что перечислять их нет особого смысла, а диапазон примеров простирается от движения камеры в трясущихся руках взволнованного оператора до моргания глаз растроганного режиссера.

Затухание амплитуды колебаний или хаотических движений задается обычно с помощью эспоненциальной функции, зависящей от времени, типа exp(-O.OTtime). Однако можно просто делить нужную величину на текущее время ($amp/(time*10+0.0001)) и тогда она будет линейно убывать по мере проигрывания анимации. Не забывайте про деление на ноль в этом случае.

Примечание. Классики анимации советуют делать сначала линейное затухание, а потом - экспоненциальное.

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


⇐ вернуться назад | | далее ⇒