Контроллеры можно классифицировать несколькими способами: по одному параметру против нескольких, по тому, является ли контроллер параметрическим или ключ-базированным, по типу данных контроллера и по типу интерполяции контроллера. В данном разделе представлен взгляд на различия между контроллерами для каждого классификационного типа.
Начиная применение контроллеров Expression, вы осознаете, что созерцаемое - это не всегда получаемо. Часто значения данных, которые задаются в 3DS МАХ, и отображаемые значения данных не являются действительными значениями, хранящимися в контроллерах. Контроллер Expression, примененный к параметру, должен выводить значения в диапазон, ожидаемый параметром. Если это не происходит, эффект анимации может отключиться из-за ситуации, связанной с превышением значения.
При создании объекта в 3DS МАХ ключевой подключаемый компонент, ассоциированный с данным объектом, определяет список подверженных анимации параметров. В данном случае объект может ссылаться на материал, геометрический объект или модификатор. Для целей обсуждения назовем ключевой компонент родителем. Для каждого поддающегося анимации параметра имеется контроллер, подчиненный родителю.
Родитель самостоятельно решает, как обрабатывать значения данных, возвращаемые из подчиненного контроллера. Родитель также указывает, как значения данных должны появляться в командных панелях, Track View и других диалогах, где можно видеть или устанавливать значения переменных. Часто видимые значения данных не являются действительными данными, переданными контроллером родителю, но являются значениями данных, "проработанными" родителем. Один из примеров связан с параметрами, работающими с углами. Во всех случаях значения устанавливаются и отображаются в градусах. Внутренне большинство углов представляется в радианах.
При использовании контроллеров Expression происходит буквально подключение в центр событий. Если контроллер Expression применяется к параметру, работающему с углами, вывод должен быть в радианах. Если выражение имеет переменную, присвоенную контроллеру, который работает с углами, ожидайте результат в радианах.
В некоторых случаях способы, в соответствие с которыми родитель обрабатывает данные из подчиненного контроллера, варьируются. Хотя большинство углов внутренне обрабатываются в радианах, в некоторых случаях они обрабатываются и в градусах. Примером сказанному служит Bend Angle в модификаторах Bend и Twist. Ниже приведены обобщенные правила для действительных выводных значений контроллеров: Если параметр основан на времени, вывод контроллера обычно представляется в тиках. Примерами являются Ease Curve и частота порождения для системы частиц. Параметр Phase модификатора Noise также выводит значения в тиках. Если параметр является процентом или просматриваемым диапазоном значений от 0 до 100, диапазон вывода контроллера обычно составляет от 0 до 1. Примерами являются параметры масштаба и непрозрачности материала. Если параметр основан на угле, вывод контроллера обычно происходит в радианах. Примерами являются FOV для камеры и контроллеры вращения, подчиняющиеся контроллеру XYZ Эйлера. Если параметр является цветом, диапазон вывода контроллера заключен между 0 и 1. Для параметров, отображаемых как целые, вывод контроллера округляется до ближайшего целого. Примером является параметр Material ID в модификаторе Material. Если параметр отображается как опция, последняя обычно включается, когда вывод контроллера составляет значение, большее 0.5. Примерами являются опция Fractal в модификаторе Noise и опция Symmetry в модификаторе Taper. Для других значений, которые можно свободно настраивать, вывод контроллера обычно является значением, видимым на панели команд и в Track View. Как и во всех основных правилах, всегда имеют место исключения.
СОВЕТ Для определения действительных выводных значений контроллера следует выполнить анимацию параметра по диапазону его значений. Создайте объект Point и присвойте контроллер Expression его параметру позиции. Используйте в качестве уравнения [inp,inp,inp] и назначьте исследуемый контроллер скалярной переменной inp. После этого действительные значения вывода контроллера можно наблюдать через кривую функции в позиции Point объекта.
Дополнительный аспект, на который следует обратить внимание, заключается в том, что ограничения, налагаемые 3DS МАХ на некоторые параметры, действуют только во время ввода данных. Поскольку контроллер Expression обходит ввод данных, данные ограничения не всегда срабатывают. Примером является FOV камеры. FOV во время ввода данных ограничен углом в 175°, но контроллер Expression может представить любое желаемое значение. Несмотря на редкую фатальность, выходящие за пределы допустимого диапазона значения контроллера Expression могут приводить к достаточно неожиданному поведению. Лучше всего определить пределы изменений параметра и всегда в них оставаться.
СОВЕТ В предыдущем примере выражения LookAt доска объявлений была связана с фиктивным объектом ввиду того, что контроллер выражения вращения нуждался в позиции доски, но ему не был разрешен доступ к дорожке позиции объекта. Вместо связывания объектов можно было бы скопировать контроллер позиции доски в контроллер позиции фиктивного объекта в виде экземпляра. Тогда какой бы из объектов не передвигался, другой объект передвигался бы автоматически.
Типы контроллеров для уровня трансформации объектов можно указывать в панели Motion или в Track View. Для тех типов контроллеров, требующих задания дополнительного объекта (контроллеры Path и LookAt), этот объект можно указать только из панели Motion.
Типы контроллеров легко определять в Track View для любого значения, поддающегося анимации. Сюда входят контроллеры трансформации для гизмо модификаторов, примененных к объекту. Хотя контроллер Path и можно указать для позиции гизмо, однако прямого способа определения пути следования не существует. Данное ограничение можно обойти, применив контроллер Path к другому объекту, указывающему путь следования на панели Motion, и затем вырезав и вставив контроллер Path в контроллер позиции гизмо.
Позиция модификатора гизмо указывается относительно точки вращения объекта, к которому применен модификатор. Другими словами, модификатор, спозиционированный в [О, О, О], расположен в точке вращения объекта. Когда контроллер пути применяется к объекту или гизмо, возвращаемые значения позиции являются относительными к центру мира.
Следующее упражнение использует контроллеры Position List и Position Expression в сочетании с контроллером Position Path для соответствующего размещения гизмо с учетом объекта. В упражнении модификатор Volume Select применяется для выбора группы граней объекта, а модификатор MeshSmooth - для выбора граней с целью увеличения их плотности в области. Модификатор EditMesh применяется для очистки множества выборок, а модификатор Displace - для формирования "впадины" в объекте. В упражнении для модификаторов гизмо Volume Select и Displace применяется контроллер пути.
Контроллер LookAt используется камерами Target, а также источниками света Target. При создании одного из этих объектов ему присваивается контроллер LookAt, затем создается фиктивный объект, играющий роль цели, и фиктивный объект определяется как цель LookAt.
Хотя контроллер Path классифицируется как позиционный, он также может изменять вращение объекта, к которому применен. Опции Follow и Bank в Path Options заставляют объект вращаться на основе кривизны сплайна пути. Вращение от контроллера Path дополняет любое вращение, определенное пользователем.
Когда опция Follow отключена, ориентация объекта не изменяется. При включенной опции Follow объект вращается так, чтобы "передняя часть" объекта всегда указывала вдоль касательной сплайна. "Передняя часть" объекта определяется как направление, указывающее вдоль положительной оси Х мира в начале активного диапазона. Таким образом правая сторона объекта в окне Тор является "передней частью" объекта.
Опция Bank указывает, куда смотрит верх объекта ("верх" определяется как направление вдоль положительной оси Z мира). Если Bank выключена или Bank Amount равно нулю, верх объекта пытается указывать в направлении положительной оси Z мира. (Две степени свободы используются опцией Follow, следовательно для опции Bank осталась только одна степень свободы. Таким образом верх указывает в направлении положительной оси Z мира только в той степени, в которой это возможно.)
При включенной опции Bank объект будет вращаться на основе локальной кривизны сплайна. Для низких и умеренных значений верх объекта имеет тенденцию указывать внутрь сплайна. Для высоких значений верх объекта вращается вокруг сплайна.
Smoothness (гладкость) определяет скорость, с которой разрешено меняться вращению при указании опции Bank. Высокие значения смягчают результирующее вращение. Эффекты параметров Bank Amount и Smoothness взаимодействуют друг с другом, поэтому для достижения желаемого движения обычно требуется небольшая интерактивная настройка значений. Как правило, для достижения гладкого движения следует использовать предельно низкие значения указанных параметров.
Все данные анимации в 3D Studio MAX обрабатываются элементами, которые называются контроллерами и хранят значения анимации, а также управляют интерполяцией от одного значения к другому. 3DS МАХ распространяется со множеством контроллеров. Понимание различий между контроллерами, того, как они работают, умение выбрать контроллер для работы в определенных обстоятельствах и умение настроить поведение контроллера является важным для получения желаемой анимации.
В данной главе разъясняется использование контроллеров в 3DS МАХ и освещаются следующие темы: Выбор типов контроллеров Одиночный параметр против сложных контроллеров Параметрические контроллеры против ключ-базированных контроллеров Типы данных контроллеров Типы интерполяции ключ-базированных контроллеров Контроллеры выражений Копирование и вставка контроллеров Преобразование вывода параметрического контроллера в ключ-базированную анимацию
При создании объекта в 3DS МАХ особое подключаемое приложение, ассоциируемое с объектом, определяет список параметров, поддающихся анимации. С целью экономии памяти данным параметрам контроллер обычно не присваивается. Если пользователь выполняет анимацию параметра, последнему присваивается контроллер по умолчанию.
В дополнение к списку параметров, возвращаемого из подключаемого к объекту приложения, 3DS МАХ присваивает объекту контроллер трансформации. Контроллер трансформации отслеживает положение объекта в мировом пространстве, любые данные вращения, ассоциированные с объектом и примененные к объекту факторы масштабирования. При создании объекта контроллеры по умолчанию присваиваются контроллеру трансформации и его входным контроллерам.
Рисунок 24.1 демонстрирует параметры и контроллеры по умолчанию, ассоциированные с коробкой, которая еще не была оживлена, но ей был присвоен материал- Оживляемые параметры обозначаются зеленым треугольником. Для каждого параметра отображается имя параметра и в случае назначения контроллера за именем параметра следуют контроллер интерполяции и типы данных.
Ключ-базированные контроллеры используются для определения значений между ключами. Для всех контроллеров кривая функции всегда проходит через ключевые значения в момент времени, связанный с ключом. Различные контроллеры оказывают влияние только на интерполяцию между ключами, но не на сами ключи.
Таблица 24.2 показывает доступные типы интерполяции и типы данных, с которыми они могут использоваться.
Таблица 24.2. Типы данных, доступные для каждого типа интерполяции.
Тип интерполяции | Действительные типы данных |
Linear | Position, Rotation, Scale, Float |
Smooth | Rotation |
Bezier | Position, Scale, Float, Points, Color |
ТСВ | Position, Rotation, Scale, Float, Point3, Morph |
Каждая комбинация типов интерполяции и типов данных реализуется посредством уникального контроллера. Метод для варьирования значений ключей и значений интерполяционных параметров для ключей является одним и тем же внутри группы контроллеров заданного типа интерполяции.
Контроллеры, использующие тип интерполяции Linear, разделяют изменение в значениях ключей между данным ключом и следующим на количество времени между ключами. Значения, возвращаемые из контроллера, следуют прямой линии между ключами и равномерно распределяются во времени, т.е. значения между ключами изменяются с постоянной скоростью. Никакой настройки интерполяции значений выполнить нельзя.
Контроллеры, использующие тип интерполяции Smooth, настраивают касательную кривой, проходящей через значение ключа, и обеспечивают гладкую интерполяцию в ключе. Никакой настройки интерполяции значений выполнить нельзя.
Контроллеры, использующие тип интерполяции Безье, применяют настраиваемый сплайн Безье, проходящий по ключам, и вычисляют значения между ключами. Форма кривой сплайна основывается на значениях ключа и тангенса в ключах. Параметры интерполяции, а также их влияние на кривую, описаны в разделе "Контроллеры Безье".
Контроллеры, использующие тип интерполяции ТСВ, интерполируют между ключами на основе пяти параметров: Tension, Continuity, Bias, Ease to и Ease from. Форма кривой функции базируется на ключе и значениях параметров в ключе. Влияние параметров интерполяции на кривую описано в разделе "Контроллеры ТСВ".
Для всех контроллеров можно установить или настроить значения ключа, включая кнопку Animate, устанавливая соответствующее время и затем устанавливая новое значение для варьируемого параметра. Для всех контроллеров, кроме контроллеров вращения, также можно создавать ключи или настраивать значения, связанные с ключом. Для этого применяются инструменты Function Curve в Track View. Как описывалось ранее, ключи вращения нельзя отобразить как Function Curve, следовательно их нельзя настроить описанным способом.
Для типов контроллеров Безье и ТСВ значения ключей можно также настроить, щелкая правой кнопкой на ключе и задав при этом режим Edit Key или Function Curve. В результате такого действия отображается диалог Key Info, в котором можно изменять значения. Рисунок 24.7 показывает примеры диалогов Key Info для контроллеров Bczier Float, Scale и Color. Рисунок 24.8 демонстрирует диалоги Key Info для контроллеров ТСВ Rotation, Scale и Float. Как видно из диалогов, внутри интерполяционного типа изменяется только количество полей со значениями ключей. Элементы управления остаются одинаковыми. Исключение составляет контроллер Безье Color. Он используется только с параметрами света, что и отражает диалог. В диалоге Key Info данного контроллера пользователь может задавать цвета с использованием как модели RGB, так и модели HSV. Обеспечивается цветовая отметка, отображающая указанный значениями цвет. После щелчка на цветовой отметке будет отображен стандартный диалог Color Selector.
Для контроллеров, связанных с трансформацией на объектном уровне, ключевые значения можно настроить в свитке Key Info в панели команд Motion.
По умолчанию для дорожек вращения используется контроллер ТСВ Rotation. Хотя данный контроллер и обеспечивает гладкое вращение, однако кривые функций, связанных с данным контроллером, в Track View недоступны из-за того, что контроллер ТСВ для управления вращением применяет кватернионовскую математику. Кватернионовская математика имеет четыре значения - X, Y и Z единичного вектора (unit vector) и угол вращения вокруг единичного вектора (см- раздел "Типы данных контроллеров" ранее в этой главе, где приведены более подробные сведения о кватернионовской математике). Другие контроллеры вращения, также использующие кватернионовскую математику - это Linear и Smooth.
Помимо невозможности отображения кривых функций вращения для данных контроллеров, иногда требуется большее управление вращением, нежели обеспечиваемое данными контроллерами. 3DS МАХ обеспечивает дополнительный контроллер вращения Euler XYZ, для которого можно отобразить кривые функций и отдельно управлять вращением относительно каждой локальной оси объекта.
Рассмотрим случай, когда вращается объект вокруг осей Х и Y и необходимо настроить интерполяцию на один из ключей для вращения вокруг Х-оси. Значения контроллера ТСВ для данного ключа можно настроить либо в панели Motion, либо в Track View, но также будет настраиваться и интерполяция вращения вокруг оси Y в данном ключе. Используя контроллер ТСВ нельзя настроить значения интерполяции для одной оси, не затрагивая значения для всех остальных осей. Если используется контроллер вращения Euler XYZ, интерполяция для ключей, связанных с вращением вокруг оси X, может выполняться без влияния на вращение вокруг оси Y.
Дополнительные преимущества применения контроллера вращения Euler XYZ для объекта заключаются в том, что для каждой из осей вращения можно использовать свой контроллер выражения, а другие контроллеры выражения могут ссылаться на вращение объекта.
В файле Lookat_x.xpr подготовлен дополнительный контроллер выражения. Рисунок 24.49 показывает уравнение Lookat_X. Если использовать данное выражение для управления дорожкой Х Rotation объекта и уравнение Lookat_Z для управления дорожкой Z Rotation, то ось -Z объекта всегда будет указывать на объект цели. На сцене примера ch24_8.max, находящегося на сопровождающем CD, показано два объекта ~ один использует контроллер LookAt, а другой - приведенные выше выражения.
Контроллер трансформации LookAt объединяет вывод из контроллеров положения, вращения (тип данных Float) и масштаба (см. рис. 24.31). Вывод контроллера LookAt является матрицей трансформации, используемой 3DS МАХ внутренним образом- Контроллер LookAt можно применять только в качестве контроллеров трансформации для объектов, но не для модификаторов.
Контроллер LookAt вращает объект так, чтобы негативная локальная ось Z всегда указывала на точку вращения другого объекта. Параметр вращения задает угол поворота объекта вокруг локальной оси Z.
Целевой объект, за которым необходимо следить, определяется в качестве параметра контроллера LookAt. Целевой объект контроллера LookAt можно увидеть и отобразить только в разделе Parameters панели команд Motion. Свиток LookAt Parameters в панели команд Motion показан на рисунке 24.32.
Контроллер Path позиционирует объект так, чтобы точка вращения объекта располагалась на сплайне. Кроме того, создается параметр, подчиняющийся контроллеру Path. Параметр называется Percent (см. рис. 24.33). Параметр Percent задает положение на сплайне для использования в конкретный момент времени. Значение Percent автоматически устанавливается в 0 в начале активного отрезка времени и в 100 в конце активного отрезка времени,
Сплайн для использования в качестве пути указывается как параметр контроллера Path. Сплайн пути контроллера Path может устанавливаться и отображаться только в разделе Parameters панели команд Motion. Свиток Path Parameters на панели команд Motion показан на рисунке 24.34. Если выбранная форма содержит более одного сплайна, то в качестве сплайна пути используется первый из них.
Контроллер трансформации Position/Rotation/Scale (PRS) объединяет ввод из контроллеров положения, вращения и масштаба (см. рис. 24.30). Вывод из контроллера PRS является матрицей трансформации, которая используется 3DS МАХ внутренним образом. Контроллер PRS можно применять только на дорожках трансформации объектов и гизмо модификаторов.
Никаких настраиваемых пользователем свойств с контроллером PRS не связано.
Интерполяция Безье между двумя ключами основана на ключе и значении тангенса ключа. Значения тангенсов можно настроить, щелкая правой кнопкой мыши на ключе, находясь в Track View в режимах Edit Key или Function Curve. Такое действие отобразит диалог Key Info, где можно изменять значения. Для контроллеров, связанных с трансформацией на объектном уровне, значения тангенсов можно настроить в свитке Key Info на панели команд Motion.
3DS МАХ .обеспечивает пять предварительно определенных тангенциальных типов и один пользовательский тангенциальный тип. Тангенциальный тип выполняется с использованием подменю Key Tangent в диалоге Key Info. Рисунок 24.9 показывает диалог Key Info с раскрытым подменю Key Tangent.
В следующем примере вы увидите влияние каждого из тангенциальных типов на движение объекта. Сцена состоит из сферы, которая перемещается по круговому пути. Две сплайновые формы показывают, каким мог бы оказаться путь, если бы путь следования был круговым или линейным. Обратите внимание на то, что повсюду в примере положение сферы в ключе всегда является положением, определенным ключом и время, ассоциированное с ключом, никогда не изменяется.
Контроллеры Bxpression оценивают определенные пользователем математические выражения и определяют выводные значения контроллеров. Контроллеры Expression можно применять практически ко всем параметрам 3DS МАХ, которые поддаются анимации. Контроллер Expression может получать вывод из других контроллеров и использовать в выражении полученные значения. Момент времени, для которого оценивается выражение, также доступен в нескольких формах. Для использования в выражениях определено множество встроенных функций. Параметры для контроллера Expression задаются в диалоге Properties. Для всех типов данных доступ к диалогу Properties осуществляется в Track View путем выбора параметра, которому назначается контроллер Expression, последующего щелчка в свободной области окна редактирования с целью убедиться, что никаких ключей не выбрано, и затем выполнения одного из следующих действий: щелчка правой кнопкой мыши на имени параметра, щелчка правой кнопкой мыши на линейке диапазона дорожки параметра или щелчка на Properties в линейке инструментов Track View.
Для контроллеров, связанных с трансформацией на объектном уровне, параметры контроллера можно настроить также из панели команд Motion, выбрав параметр в свитке Assign Controller, щелкнув правой кнопкой на параметре и выполнив Properties из всплывающего меню.
Контроллеры List применяются для объединения результатов нескольких контроллеров. Например, можно добавить помехи в предварительно определенное движение, назначив контроллер List желаемому параметру и добавив контроллер Noise в качестве ввода для контроллера List. Кроме того, контроллер List предоставляет возможность интерактивно добавлять дополнительное движение в параметр, управляемый параметрическим контроллером, подобным Path.
В следующем упражнении для части анимации используется контроллер Path, а затем для завершения анимации происходит переключение на контроллер Безье. Сцена состоит из мяча, движение которого управляется контроллером пути. Путь является кругом. Необходимо, чтобы в анимации мяч был неподвижен в начале, а впоследствии, передвигаясь по кругу, ускорился в три раза и улетел туда, где размещен фиктивный объект.
Параметры для контроллера помех указываются в диалоге Properties контроллера. Для всех типов данных диалог Properties доступен в Track View через выбор параметра, которому назначен контроллер, щелчке на свободной области окна редактирования, чтобы убедиться, что никаких ключей не выделено, затем щелчке правой кнопкой мыши на названии параметра и щелчке правой кнопкой на линейке диапазона в дорожке параметра или щелчке на Properties в линейке инструментов Track View.
Для контроллеров, связанных с трансформацией на объектном уровне, параметры контроллера можно также настроить из панели команд Motion, выбрав параметр в свитке Assign Controller, щелкнув правой кнопкой на параметре и выполнив из всплывающего меню команду Properties.
Рисунок 24.24 показывает пример диалога Property для контроллеров Noise Float и Position. Легко заметить, что единственное различие заключается в количестве полей Strength. Во всем остальном контроллеры одинаковы.
Characteristic Graph в диалоге Noise Properties грубо отражает эффект, который окажут на вывод контроллера изменения в параметрах помех. Во многих случаях лучше видеть точный эффект этих изменений. Это можно сделать, щелкнув на Function Curves на линейке инструментов Track View для показа кривой функции параметра. Данная кривая изменяется при изменении параметров помех.
СОВЕТ Поскольку контроллеры вращения не отображают кривых функции, вы не увидите эффекта изменений параметров помех посредством таких контроллеров. В этом случае следует использовать сложный контроллер Эйлера XY2 и применить контроллер помех к каждой оси. Значения в каждом контроллере будут в основном теми же, за исключением исходного инициирующего, которое для каждого контроллера должно быть различным.
Поля Strength указывают диапазон выводных значений контроллера помех. Диапазон меняется от Strength/2 до "Strength/2, если опция >0 отключена, или от 0 до Strength в противном случае. Здесь существует два исключения. Прежде всего для типа данных масштаба значение 100 автоматически прибавляется к каждому из выводных значений помех. Это означает, что вы применяете, помехи к 100% фактору масштаба. Во-вторых, если включены фрактальные помехи, выводной диапазон увеличивается, а центральная точка не изменяется. Таким образом могут быть значения меньшие нуля даже тогда, когда включена опция >0. Для Roughness 0.0 диапазон увеличивается приблизительно на 10%, для Roughness 1.0 на 100%.
СОВЕТ Для управления точкой центра результата с контроллером Noise можно'использовать контроллер List и кпюч-базированный контроллер как ввод. Отключите опции >0 в Noise и затем создайте ключ для ключ-базированного контроллера, значение которого желательно для центральной точки.
Поля Ramp In и Ramp Out уменьшают количество помех в начале и в конце диапазона. Данное изменение нелинейно, однако эквивалентно кривой Безье. Для Ramp In кривая определяется вершиной Безье, находящейся в нулевой отметке времени и во времени, указанном в поле Ramp In, с вершиной, имеющей нулевую скорость интерполяции. Рисунок 24.25 показывает кривую для значения Ramp In, равного 10. Форма кривой не настраивается.
Поля Ramp In и Ramp Out ведут себя сходно с Multiplier Curve, примененной к контроллеру Noise. Интересное последствие подобного сходства состоит в том, что если опция >0 включена и указано значение Ramp In, выводное значение контроллера подходит к нулю при нулевом времени, а не к средней точке Strength/2.
СОВЕТ Если требуется использовать Ramp In или Ramp Out и необходим уклон к значению средней точки, следует отключить опцию >0, поместить контроллер Noise под контроллер List и добавить к контроллеру List ключ-базированный контроллер. Создайте ключ для ключ-базированного контроллера м установите его значение в Strength/2.
Контроллеры с единственным параметром размещены на самом нижнем уровне иерархии контроллеров. Данные контроллеры хранят значения анимации, указанные пользователем для параметра объекта и для выводных значений во времени. Возвращаемые значения могут иметь как единственный компонент (такой как высота коробки) или несколько компонентов (подобные позициям X, Y и Z объекта). Контроллер с единственным параметром может быть как параметрическим, так и ключ-базированным.
Сложные контроллеры в качестве своего ввода берут вывод других контроллеров. Затем они объединяют полученные данные с любыми данными параметров, ассоциированными со сложным контроллером, манипулируют данными и выводят результаты (см рис. 24.4). Сложными являются контроллеры трансформации Position/Rotation/Scale (PRS) и LookAt, контроллер вращения Эйлера XYZ, контроллер позиции Path и контроллер List. Каждый из сложных контроллеров детально описывается в данной главе позже.
Контроллеры, использующие тип интерполяции ТСВ, выполняют интерполяцию между ключами на основе параметров ТСВ для каждого ключа. Параметры ТСВ можно настраивать, находясь в режимах Edit Key или Function Curve в Track View и щелкнув правой кнопкой мыши. Такое действие приводит к появлению диалога Key Info, в котором можно изменять значения. Для контроллеров, связанных с трансформацией, параметры ТСВ можно также настраивать в свитке Key Info панели команд Motion.
Следующее упражнение демонстрируют влияние, оказываемое параметрами ТСВ на движение объекта. Сцена состоит из сферы, двигающейся по круговому пути. Две сплайновых формы показывают, как выглядел бы путь, если бы путь следования был круговым или линейным. Обратите внимание на то, что везде в примере положение сферы в ключе всегда является положением, задаваемым ключом, и время, асоцииро-ванное с ключом, никогда не изменяется.
В Track View можно скопировать и вставить большинство контроллеров. Пока параметр имеет присоединенный контроллер с рядом ограничений этот контроллер можно скопировать. Контроллер можно вставить в параметр, если этот параметр может принять тип данных контроллера.
Главное ограничение на вырезание и вставку заключается в том, что нельзя копировать или вклеивать контроллеры, отстоящие от объекта более чем на два уровня вниз. Это ограничение означает невозможность копирования подчиненных контроллеров в контроллере List, контроллерах Ease и Multiplier и подчиненные контроллеры вращения X, Y и Z в контроллере Rotation Эйлера. Дополнительные ограничения заключаются в том, что копирование/вставку нельзя выполнить на дорожке позиции для центра модификатора и его также нельзя выполнить для контроллера PRS для гизмо модификатора. Однако копирование/вставку можно применять для подчиненных контроллеров для PRS контроллера гизмо с учетом предыдущих ограничений.
Последнее ограничение заключается в том, что если копируется и вставляется контроллер, использующий контроллер Ease или Multiplier, канал Ease или Multiplier в копии не сохраняется. Это справедливо как для контроллеров, скопированных в Track View, так и для объектов, которые клонируются в главных видовых окнах.
Из следующего упражнения будет видно, как экзем пляризованные контроллеры можно использовать в качестве помощи при создании геометрии. Цель данного упражнения заключается в создании коробки, которая всегда будет квадратной, - для ширины, высоты и длины коробки всегда будет применяться одно и то же значение.
СОВЕТ Можно опуститься по стеку модификаторе^ до Cylinder и наблюдать за изменением количества Height Segments при воспроизведении анимации. Кроме того, можно изменить значения, присвоенные HSMin и HSMax в выражении, и наблюдать за производимым эффектом.
Контроллер List можно использовать для объединения контроллеров Path и Bezier и для того, чтобы заставить камеру следовать за объектом вдоль пути. Памятуйте об одном ограничении: если контроллер Path подчиняется контроллеру List, он должен быть первым контроллером в списке. Если это не так, то любые значения из контроллеров, предшествующих Path, будут игнорироваться.
В следующем упражнении сцена состоит из тора, катящегося между препятствиями. В данной сцене необходимо, чтобы камера всегда смотрела на тор и следовала позади него.
Контроллеры выражений (Expression controllers) уникальны в том, что они оценивают определенные пользователем выражения и таким образом определяют свои выводные значения. Из-за своей относительной сложности контроллеры выражений детально описываются в этой главе позже. Для сравнения их с другими параметрическими контроллерами рассмотрите следующее основное упражнение, посвященное контроллерам выражений.
3DS МАХ распространяется с двумя типами параметрических контроллеров - Noise и Expression. Таблица 24,3 показывает типы параметрических контроллеров и типы данных, с которыми их можно использовать.
Таблица 24.3. Типы данных, доступные для каждого типа параметрического контроллера
Тип параметрического контроллера | Допустимые типы данных |
Noise | Position, Rotation, Scale, Float, Point3 |
Expression | Position, Scale, Float, Point3 |
Каждая комбинация параметрического типа и типа данных реализуется уникальным контроллером. Внутри группы контроллеров заданного параметрического типа способ, по которому задаются параметры контроллера, является одним и тем же.
Контроллеры с одним параметром можно классифицировать по признаку, является ли контроллер параметрическим или ключ-баз иро ванным. Параметрический контроллер принимает в качестве ввода значения данных, указанные пользователем, и затем выводит значения на основании уравнения, реализуемого контроллером, и на значениях Вводных данных. Ключ-базированный контроллер воспринимает в качестве ввода значения данных, указанные пользователем в определенных временных точках и затем обеспечивает в качестве вывода интерполированные во времени значения для любой точки.
Примером параметрического контроллера является Noise Rotation. Ввод для данного контроллера указывается в диалоге свойств контроллера и включает частоту и силу помех (см, рис. 24.5). Эти данные задаются однажды и не изменяются на протяжении всей анимации. С параметрическим контроллером не связываются ключи, и присутствие контроллера обозначается линией диапазона на дорожке параметра в Track View. Вывод контроллера в заданное время основывается на вводных данных, времени и уравнении, реализуемом функцией помех.
Примером ключ-базированного контроллера является Tension/Continuity/Bias (TCB) Rotation. Вводом в данный контроллер является вращение объекта в заданных временных точках. Эти данные обычно обеспечиваются установкой кадра анимации, включением кнопки Animation и вращением объекта. Каждый раз, когда объект вращается в различных кадрах, генерируются новые данные. Эти данные носят название ключей, а данные, указывающие на величину поворота, называются значениями ключей. Наличие ключа отображается точкой на дорожке параметра в Track View.
Вывод ключ-базированного контроллера основывается на значениях ключей, времени и уравнении, использованном для интерполяции между ключами. Для некоторых контроллеров уравнение, применяемое для интерполяции между ключами, может принимать дополнительный пользовательский ввод. Например, в случае контроллера TCB пользователь может настроить напряжение, непрерывность и смещение каждого ключа (см. рис. 24.6). Другие контроллеры, подобные Linear, всегда интерполируют одинаково и не настраиваются.
В уравнении можно использовать два типа переменных. Первый тип. Scalar, применяется для ссылок на единичное значение данного с плавающей точкой. Второй тип, Vector, используется для ссылки на трехкомпонентные векторы. Для создания переменной сначала вводится имя переменной в поле имени в окне Create Variables, уточняется, является ли переменная скалярной или векторной, и нажимается на Create. После этого переменная создается и ее имя появляется в колонке Scalars или Vectors.
При создании переменной ей присваивается значение константы 0 для скаляра и [О, О, 0] для вектора. Переменным могут назначаться константные значения во время анимации или присваиваться вводные значения другого контроллера. Для назначения переменной константного значения следует выбрать имя переменной в колонке Scalars или Vectors, щелкнуть на Assign to Constant и присвоить соответствующее значение.
Для назначения переменной вывода контроллера выберите имя переменной, нажмите Assign to Controller и выберите контроллер в появившемся диалоге Track View Pick (см. рис. 24.46). В диалоге Track View Pick контроллеры, которые можно выбрать, выделены жирным шрифтом. Контроллер можно выбрать тогда, когда его тип данных совпадает с типом переменной, и если контролер был назначен параметру. В некоторых случаях 3DS МАХ предоставляет возможность выбрать контроллер, а затем выдает сообщение об ошибке "Can't Assign Control... Circular Dependency". Данное сообщение об ошибке генерируется в случае, если выбранный параметр и параметр, к которому применяется контроллер выражения, подчиняются одному и тому же контроллеру. Например, выражение для параметра Length коробки не может ссылаться на параметр ширины коробки. Однако выражение может ссылаться на параметры трансформации коробки и параметры для любых модификаторов, применяемых к коробке.
Применяя поставляемые с 3DS МАХ контроллеры, можно создавать сложное движение объектов. Например, объект может иметь контроллер Path, контроллер List, контроллер LookAt и параметрические контроллеры, подобные Noise. Объект может также быть частью оживляемой иерархии.
В ряде случаев возникает желание свернуть движение для объекта до простых ключей позиции, вращения и масштаба. Последнее делается для использования контроллера Expression, который нуждается в ссылке на дорожки позиции или вращения или для создания пути для лидирующего объекта. Имеется возможность свернуть движение до ключей трансформации, привязав один объект к другому, движение которого необходимо захватить и затем применить Inverse Kinematics/Bind.
В следующем упражнении BoxOl связана со Shpere03, связанной со Sphere02, которая в свою очередь связана с SphereOl. В течение анимации каждая сфера поворачивается на 360° вокруг оси Z. Рассеянный цвет материала, отображающийся на BoxOl, управляется контроллером Expression. Данный контроллер изменяет рассеянный цвет коробки на основе скорости X, Y и Z коробки в текущем кадре. Скорость определяется векторными переменными, присвоенными дорожке позиции BoxOl. Во время проигрывания анимации можно заметить, что рассеянный цвет никогда не изменяется, поскольку для BoxOl не обеспечено никакого движения, кроме как через иерархию. Таким образом значение, возвращаемое с дорожки позиции, является константным.
Загрузите файл ch24_9.max из папки Chapter 24 сопровождающего CD-ROM. Рисунок 24.50 отражает перспективу и фронтальный вид цилиндра со "впадиной". Откройте Track View, щелкните на Filters и включите Show Controller Types. Расширьте дорожки, как показано на рисунке 24.51. Выберите контроллер позиции Path на Sphere и щелкните на Copy Controller. Выберите контроллер позиции на гизмо Displace цилиндра. Щелкните на Paste Controller и выполните Paste as Instance. Выберите контроллер позиции на гизмо Displace, щелкните на Assign Controller и выполните Possition Expression. Расширьте контроллер Position List, выберите Available, щелкните па Assign Controller и выберите Position Expression. Щелкните правой кнопкой мыши на Position Expression и выполните Properties. Создайте векторную переменную под названием CylPos, щелкните на Assign Controller и выберите контроллер позиции для Cylinder па панели Track View Pick. Введите в качестве выражения -l*CylPos и закройте диалог контроллера выражения. Выберите контроллер Position List и щелкните на Copy Controller. Выберите контроллер позиции гизмо Volume Select, щелкните на Paste Controller и выполните Paste as Instance. Закройте Track View и проиграйте анимацию.
Как описывалось ранее, составные контроллеры принимают в качестве ввода вывод подчиненных контроллеров и объединяют полученные данные с любыми параметрами, ассоциированными с контроллером, манипулируют данными и выводят результаты.
3DS МАХ распространяется с двумя составными контроллерами уровня трансформации (контроллеры Position/Rotation/Scale и LookAt), контроллером, который объединяет вращение вокруг отдельных осей (контроллер вращения Euler XYZ), контроллером для перемещения объекта вдоль сплайна (контроллер Path position) и контроллером, который производит сложение результатов своих вводных контроллеров (контроллер List).
Способ, в соответствие с которым значения, выходящие из подчиненных контроллеров, используются в контроллере уровня трансформации, зависит от того, присвоен ли контроллеру объект, гизмо модификатора или центр модификатора. Для контроллера трансформации на уровне объекта возвращаемое положение является положением точки вращения объекта относительно начальной точки мировых координат. Возвращаемые значения поворота и масштаба относительны положению точки вращения объекта.
Для контроллера трансформации уровня гизмо модификатора или уровня центра, возвращаемое значение положения является относительным точке вращения объекта, т.е. центр модификатора, позиционированный в [О, О, 0] располагается в точке вращения объекта. Если точка вращения объекта после применения модификатора изменяется, гизмо модификатора и центр будут оставаться в своем начальном положении. Возвращаемые значения вращения и масштаба относительны положению центральной точки гизмо.
Контроллеры можно также классифицировать по типу возвращаемых данных. Типы данных контроллера должны соответствовать типу данных параметра объекта для того, чтобы контроллер мог применяться с данным параметром. Например, контроллер типа данных Scale нс может использоваться для параметра позиции объекта ввиду различий в типах данных. В таблице 24.1 показаны доступные типы данных и примеры параметров, с которыми они могут использоваться.
Таблица 24.1. Типы данных, связанные с параметрами
Тип данных контроллера | Действительные параметры |
Position | Объект или позиция гизмо модификатора, позиция центра гизмо |
Scale | Масштаб объекта или гизмо модификатора |
Rotation | Вращение объекта или гизмо модификатора |
Float | Любой парметр с единственным значением компонента (высота, число сегментов, угол вращения, непрозрачность и т. д.) |
Point3 | Любой параметр с тремя значениями компонента, отличных от Position и Scale (в настоящее время используется только для цветов материала) |
Color | Любой цвет материала (рассеянный, фоновый и пр.) |
Morph | Используется только для параметра морфинга |
Типы данных Position и Scale - это выделенные версии типа данных Pomt3 и могут считаться одним и тем же типом, за исключением случая, когда они назначаются контроллерам. Единственное заметное различие между данными контроллерами заключается в том, что тип интерполяции Linear доступен для типов данных Position и Scale, но не доступен для Pomt3.
Для управления вращением 3DS МАХ внутренне использует кватернионовскую математику. Кватврнио-новская математика (используемая практически всеми системами анимации для вещей, подобных камерам и вращению объектов) является полюс-базированной (polar-based) (использующей трехкомпонентный вектор и угол/скаляр). Данная математика первоначально разрабатывалась в начале XVIII века для решения задачи предохранения от блокировки кардановых подвесок на огромных парусных кораблях. Кватерн ионовская математика результируется в гладкие значения интерполяции для вращения, в то время как матричные решения (отдельные вращения X, Y и Z) приводят к негладким результатам.
Тип данных Rotation состоит из четырех значений компонентов, требуемых для кватернионовской математики: значения X, Y и Z вектора и угла вращения вокруг вектора.
СОВЕТ Поскольку тип данных Rotation возвращает четыре значения, нет возможности отобразить кривую функции для контроллера вращения. Если требуется отобразить кривые функции вращения, следует использовать сложный контроллер Эйлера XYZ. Ввод в контроллер Эйлера XYZ - это три контроллера типа данных Float, определяющих значения вращении X, Y и Z. Затем можно отобразить кривые функций для каждого из этих контроллеров типа данных Float.
Тип данных Color является особым случаем типа данных Pomt3. Вывод из контроллеров Pomt3 имеет любой диапазон значений. Вывод из контроллеров Color ограничен диапазоном 0-255.
Теперь, когда вы познакомились с разницей между классами контроллеров, в следующих разделах будет представлен материал, более детально исследующий основные типы контроллеров.
На рисунке 24.45 показан пример диалога контроллера Expression. При первом назначении контроллера Expression параметру, который уже имеет контроллер, окно уравнения показывает значение параметра в кадре 0. Если параметр не имеет контроллера, значение будет установлено в 0. Значение отображается в одном из двух форматов. Первый формат применяется в случае, когда назначаемый контроллер Expression имеет тип данных Position, Scale или Point3. Эти типы данных требуют, чтобы контроллер Expression вернул трехкомпонентный вектор. Формат выражения следующий: [eqnl, eqn2, eqn3]. Второй формат применяется в случае, когда параметр, которому назначается контроллер Expression, имеет тип данных Float. Последний требует, чтобы контроллер Expression возвращал скалярное значение с плавающей точкой. Формат выражения будет выглядеть как eqni. Если формат выражения некорректен или во время оценки выражения возникает ошибка, на экране отображается сообщение об ошибке.
В данном упражнении вы будете иметь дело с вращением доски объявлений так, чтобы фронт доски всегда смотрел в камеру. Однако доска всегда должна оставаться перпендикулярной земле - ее требуется вращать только относительно одной оси. Для решения поставленной задачи используйте контроллер выражений, который вращает доску объявлений вокруг оси Z на основе положения камеры относительно доски.
Сцена состоит из камеры, коробки, представляющей землю (Ground) и коробки с отображенной текстурой (Billboard). Точка вращения Billboard настроена так, чтобы ось +Z доски оказалась перпендикулярной Ground.
Для применения к Billboard контроллер выражения вращения нуждается в доступе к позиции Billboard. Поскольку выражению вращения для объекта не разрешено получать доступ к контроллеру положения того же объекта, в позиции, где находится Billboard, создается фиктивный объект и Billboard делается дочерним по отношению к фиктивному объекту.
Во время проигрывания анимации можно было заметить, что конус двигается быстрее у концов эллипса и медленнее по сторонам. При использовании контроллера Path важно принимать во внимание взаимосвязь между положением вершин сплайна, служащего в качестве пути, и временем. 3DS МАХ позиционирует объект на сплайне во времени на основе количества вершин сплайна - а не длины сплайна или расстояния между вершинами. Каждая вершина преобразуется в равномерно распределенный во времени ключ положения. Например, если в качестве пути объекта используется линия с 11 вершинами, создается 11 ключей. Если активный диапазон времени находится между 0 и 100 кадрами, объект размещается на вершине 0 в кадре О, на вершине 1 в кадре 10 и на вершине 2 в кадре 20. В зависимости от расстояния между вершинами скорость объекта во времени может существенно изменяться.
В некоторых ситуациях требуется постоянная скорость вдоль всего пути. 3DS МАХ обеспечивает возможность модификации пути Безье так, чтобы по траектории объекта поддерживалась постоянная скорость. Модификация пути Безье для поддержки постоянной скорости выполняется в диалоге Advanced Key Info.
В следующем упражнении траектория эмиттера системы частиц настраивается на деформацию-дофт объекта. На сцене лофт-объект (Fuse) использует анимацию деформации масштаба для сокращения длины фитиля во времени. Деформация шкалы была определена так, чтобы длина фитиля сокращалась во времени с постоянной скоростью. Эмиттер системы частиц (Sparks) назначается контроллеру пути там, где путь является тем же сплайном, что и путь лофта (FusePath). Поскольку вершины для FusePath распределены неравномерно, Sparks предшествует деформации шкалы.
Хотя 3DS МАХ и назначает типы контроллеров по умолчанию, можно изменить тип контроллера параметра на другой тип. Кроме того, можно изменить типы по умолчанию, которые 3DS МАХ присваивает параметрам. Типы контроллеров для всех параметров изменяются в Track View. Типы контроллеров уровня трансформации на объектном уровне имеется возможность изменить из панели Motion.
Для изменения контроллера параметра объекта в Track View выполните следующие шаги: Откройте Track View и расширьте дорожки объекта до уровня параметра. Выберите параметр и щелкните на Assign Controller. Выберите желаемый контроллер в диалоге Replace Position Controller и нажмите на ОК (см. рис. 24-2).
Для изменения контроллера параметра объекта на панели Motion выполните следующие шаги; Выберите объект и откройте панель Motion. Нажмите на Parameters и откройте свиток Assign Controller (см, рис. 24.3). Выберите параметр и нажмите на Assign Controller. Выберите желаемый контроллер в диалоге Replace Controller и затем щелкните на ОК.
Обратите внимание на то, что после выбора контроллера в диалоге Replace Controller кнопка Make Default становится активной. После выполнения на ней щелчка будет задан вопрос, уверены ли вы в том, что хотите, чтобы данный контроллер стал контроллером по умолчанию для всех параметров с одним и тем же типом данных. Если ответить утвердительно, то всегда, когда 3DS МАХ будет присваивать контроллер параметру с определенным типом данных, будет использоваться выбранный контроллер.
ПРЕДУПРЕЖДЕНИЕ В случае выбора параметрического контроллера (подобного Path или Noise) в качестве контроллера по умолчанию для типа данных, исчезает возможность интерактивной установки или изменения значения параметра, использующего этот тип данных. Например, если установлен контроллер Position Expression в качестве контроллера позиции по умолчанию, все новые объекты создаются в исходной точке World и не могут перемещаться интерактивно. При изменении типа контроллера для параметра 3DS МАХ по возможности превращает любые существующие данные анимации в формат, требуемый для нового контроллера. Если один ключ-базированный контроллер изменяется на другой кпюч-базированный контроллер, данные анимации сохраняются. Однако, если конвертируется параметрический контроллер, то данные анимации будут потеряны.
3D Studio MAX не предоставляет возможности изменить контроллер для некоторых параметров. Такими параметрами являются Ease Curves, Morph, управляющие точки деформации лофтинга и модификатор Gizmo Center Positions.
Существует несколько имен переменных, которые нельзя или не требуется применять в качестве имен создаваемых переменных. Четыре из них (Т, S, F и NT) являются предварительно определенными именами переменных со специальными значениями. Кроме того, не следует использовать имена е, pi или TPS. Эти имена переменных также предварительно определены со специальными значениями. Однако 3DS МАХ предоставляет возможность их переопределения. Ниже перечислены значения, ассоциированные с каждой из этих переменных:
Т | Временная точка, оцениваемая в тиках |
S | Временная точка, оцениваемая в секундах |
F | Временная точка, оцениваемая в кадрах |
NT | Нормализованное время. Данное значение линейно возрастает от 0 в начале активного сегмента времени до 1 в конце сегмента |
е | Константа е (2.71828...) |
pi Константа pi (3.14159...) | |
TPS | Число тиков в секунду (4800) |
Значения, возвращаемые из контроллера и присваиваемые переменной, обычно являются выводными значениями контроллера в той же самой временной точке, которая оценивается. В ряде случаев желаемое значение является выводом контроллера в другой временной точке. 3D Studio MAX предоставляет возможность задания фиксированного смещения для переменной. 3DS МАХ добавляет значение смещения к оцениваемой временной точке и оценивает назначенный контроллер в новой временной точке. Значение смещения указывается в поле Tick Offset в окне Create Variables. Значение Tick Offset устанавливается в момент создания переменной и может быть изменено за счет выбора имени переменной, установки нового значения Tick Offset и щелчка на Change Offset. Значение Tick Offset может быть как положительным, так и отрицательным, и сохраняется постоянным во время анимации. Как и подразумевает название, значение Tick Offset задает смещение времени в тиках. Секунда содержит 4800 тиков. Если частота кадров равна 30 кадрам в секунду, то на кадр приходится 160 тиков.