Контроллеры

Анимация

Контекст coordsys

Для изменения текущей системы координат служит контекст coordsys. В этом случае префикс контекста coordsys следует указывать перед операторами в начале выражения, например:

in coordsys local rotate c1 (quat 45 y_axis)

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

set coordsys local

С помощью контекста coordsys можно установить систему мировых координат, локальную, родительскую, сеточную, экранную систему координат, а также локальную систему координат другого объекта.

Ранее было показано, что при установке свойств .pos, .rotation и .scale с помощью оператора значения этих свойств присваиваются непосредственно и в абсолютном виде, а при повторе оператора они не подлежат приращению.
Глава 5

 

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

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

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

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

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

Конкретные типы контроллеров указываются в подсвойстве .controller всякого оживляемого свойства объекта:

s = sphere()

s.pos.controller

При выполнении этого фрагмента кода возвращается значение Controller: Position_XYZ, указывающее на то, что для трека анимации положения сферы назначен контроллер Postion_XYZ.

Свойство .controller имеет подсвойство .value. Как только для параметра будет назначен контроллер, значение этого контроллера может быть установлено следующим образом:

s.pos.controller.value = [20,0,50]

Некоторые контроллеры, например Position_XYZ, имеют три составляющие, каждая из которых имеет свой контроллер. Доступ к этим контроллерам осуществляется по индексу 1,2 и 3:

s.pos.controller[1].controller

При выполнении этой строки кода возвращается контроллер, назначенный для составляющей X стандартного контроллера Position_XYZ, в качестве которого


Преобразования и анимация

служит Bezier_Float, т.е. контроллер управления по кривой Безье с плавающей точкой. Подсвойство .value может быть использовано и для этого подконтроллера:

s.pos.controlIer[1].controller.value

При выполнении этой строки кода возвращается значение составляющей X контроллера Position_XYZ.

У каждого контроллера имеются свои подсвойства. Так, если для объекта назначен контроллер Position_XYZ в качестве контроллера анимации его положения, следующая строка окажется равнозначной предыдущей строке кода: s.pos.controller.X_Position.controller.value

Доступ к контроллеру, состоящему из подконтроллеров, а также к его значениям может быть всегда осуществлен несколькими способами. Многие программисты предпочитают конструкцию controller[1].controller вместо более явно выраженной конструкции controller.X_Position, поскольку это дает им возможность работать с любым назначенным для объекта контроллером при условии, что он имеет три составляющие. Если в сценарии используется первая кон­струкция, используемый в объекте контроллер можно изменить без ошибок.

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

c = linear_float()

s.radius.controller = c

В дальнейшем экземпляр контроллера можно использовать для изменения свойств данного контроллера.

c.value = 40

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

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