Каждый раз при выполнении анимации объекта на сцене 3D Studio MAX сохраняет все данные, необходимые для репродуцирования анимации. Поскольку вы не указываете, как объект будет оживляться в каждом кадре, 3DS МАХ должна рассчитать (интерполировать) данные анимации для кадров, данные анимации которых не заданы. В предыдущих версиях 3D Studio способ сохранения этих данных не был доступен пользователю. Более того, существовал только один тип интерполяции.
Все данные анимации в 3D Studio MAX обрабатываются элементами, которые называются контроллерами и хранят значения анимации, а также управляют интерполяцией от одного значения к другому. 3DS МАХ распространяется со множеством контроллеров. Понимание различий между контроллерами, того, как они работают, умение выбрать контроллер для работы в определенных обстоятельствах и умение настроить поведение контроллера является важным для получения желаемой анимации.
В данной главе разъясняется использование контроллеров в 3DS МАХ и освещаются следующие темы:
Выбор типов контроллеров
Одиночный параметр против сложных контроллеров
Параметрические контроллеры против ключ-базированных контроллеров
Типы данных контроллеров
Типы интерполяции ключ-базированных контроллеров
Контроллеры выражений
Копирование и вставка контроллеров
Преобразование вывода параметрического контроллера в ключ-базированную анимацию
При создании объекта в 3DS МАХ особое подключаемое приложение, ассоциируемое с объектом, определяет список параметров, поддающихся анимации. С целью экономии памяти данным параметрам контроллер обычно не присваивается. Если пользователь выполняет анимацию параметра, последнему присваивается контроллер по умолчанию.
В дополнение к списку параметров, возвращаемого из подключаемого к объекту приложения, 3DS МАХ присваивает объекту контроллер трансформации. Контроллер трансформации отслеживает положение объекта в мировом пространстве, любые данные вращения, ассоциированные с объектом и примененные к объекту факторы масштабирования. При создании объекта контроллеры по умолчанию присваиваются контроллеру трансформации и его входным контроллерам.
Рисунок 24.1 демонстрирует параметры и контроллеры по умолчанию, ассоциированные с коробкой, которая еще не была оживлена, но ей был присвоен материал- Оживляемые параметры обозначаются зеленым треугольником. Для каждого параметра отображается имя параметра и в случае назначения контроллера за именем параметра следуют контроллер интерполяции и типы данных.
Хотя 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.
Контроллеры можно классифицировать несколькими способами: по одному параметру против нескольких, по тому, является ли контроллер параметрическим или ключ-базированным, по типу данных контроллера и по типу интерполяции контроллера. В данном разделе представлен взгляд на различия между контроллерами для каждого классификационного типа.
Контроллеры с единственным параметром размещены на самом нижнем уровне иерархии контроллеров. Данные контроллеры хранят значения анимации, указанные пользователем для параметра объекта и для выводных значений во времени. Возвращаемые значения могут иметь как единственный компонент (такой как высота коробки) или несколько компонентов (подобные позициям X, Y и Z объекта). Контроллер с единственным параметром может быть как параметрическим, так и ключ-базированным.
Сложные контроллеры в качестве своего ввода берут вывод других контроллеров. Затем они объединяют полученные данные с любыми данными параметров, ассоциированными со сложным контроллером, манипулируют данными и выводят результаты (см рис. 24.4). Сложными являются контроллеры трансформации Position/Rotation/Scale (PRS) и LookAt, контроллер вращения Эйлера XYZ, контроллер позиции Path и контроллер List. Каждый из сложных контроллеров детально описывается в данной главе позже.
Контроллеры с одним параметром можно классифицировать по признаку, является ли контроллер параметрическим или ключ-баз иро ванным. Параметрический контроллер принимает в качестве ввода значения данных, указанные пользователем, и затем выводит значения на основании уравнения, реализуемого контроллером, и на значениях Вводных данных. Ключ-базированный контроллер воспринимает в качестве ввода значения данных, указанные пользователем в определенных временных точках и затем обеспечивает в качестве вывода интерполированные во времени значения для любой точки.
Примером параметрического контроллера является Noise Rotation. Ввод для данного контроллера указывается в диалоге свойств контроллера и включает частоту и силу помех (см, рис. 24.5). Эти данные задаются однажды и не изменяются на протяжении всей анимации. С параметрическим контроллером не связываются ключи, и присутствие контроллера обозначается линией диапазона на дорожке параметра в Track View. Вывод контроллера в заданное время основывается на вводных данных, времени и уравнении, реализуемом функцией помех.
Примером ключ-базированного контроллера является Tension/Continuity/Bias (TCB) Rotation. Вводом в данный контроллер является вращение объекта в заданных временных точках. Эти данные обычно обеспечиваются установкой кадра анимации, включением кнопки Animation и вращением объекта. Каждый раз, когда объект вращается в различных кадрах, генерируются новые данные. Эти данные носят название ключей, а данные, указывающие на величину поворота, называются значениями ключей. Наличие ключа отображается точкой на дорожке параметра в Track View.
Вывод ключ-базированного контроллера основывается на значениях ключей, времени и уравнении, использованном для интерполяции между ключами. Для некоторых контроллеров уравнение, применяемое для интерполяции между ключами, может принимать дополнительный пользовательский ввод. Например, в случае контроллера TCB пользователь может настроить напряжение, непрерывность и смещение каждого ключа (см. рис. 24.6). Другие контроллеры, подобные Linear, всегда интерполируют одинаково и не настраиваются.
Контроллеры можно также классифицировать по типу возвращаемых данных. Типы данных контроллера должны соответствовать типу данных параметра объекта для того, чтобы контроллер мог применяться с данным параметром. Например, контроллер типа данных 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.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.
Интерполяция Безье между двумя ключами основана на ключе и значении тангенса ключа. Значения тангенсов можно настроить, щелкая правой кнопкой мыши на ключе, находясь в Track View в режимах Edit Key или Function Curve. Такое действие отобразит диалог Key Info, где можно изменять значения. Для контроллеров, связанных с трансформацией на объектном уровне, значения тангенсов можно настроить в свитке Key Info на панели команд Motion.
3DS МАХ .обеспечивает пять предварительно определенных тангенциальных типов и один пользовательский тангенциальный тип. Тангенциальный тип выполняется с использованием подменю Key Tangent в диалоге Key Info. Рисунок 24.9 показывает диалог Key Info с раскрытым подменю Key Tangent.
В следующем примере вы увидите влияние каждого из тангенциальных типов на движение объекта. Сцена состоит из сферы, которая перемещается по круговому пути. Две сплайновые формы показывают, каким мог бы оказаться путь, если бы путь следования был круговым или линейным. Обратите внимание на то, что повсюду в примере положение сферы в ключе всегда является положением, определенным ключом и время, ассоциированное с ключом, никогда не изменяется.
Загрузите файл ch24_l.max из папки Chapter 24 сопровождающего CD-ROM.
Выберите сферу и нажмите в кнопку Trajectories на панели команд Motion. Голубая линия отобразит траекторию сферы, желтые точки будут обозначать возрастание кадров и белые квадраты - ключи.
В Track View расширьте дорожки так, чтобы отображать дорожку позиции для SphereOl. Нажмите Function Curves. Щелкните на кривой для отображения ключей.
Выполните выбор области с целью выбора всех ключей. Для отображения диалога Key Info щелкните правой кнопкой мыши (см. рис. 24.10). Перепозиционируйте диалог Key Info так, чтобы можно было видеть кривые функций в Track View и траекторию SphereOl в видовом окне Тор. Диалог Key Info показывает, что все ключи используют гладкий тангенциальный тип. Траектория, отраженная в видовом окне, и кривые функций, показанные в Track View, представляют гладкую интерполяцию.
Щелкните в Track View на точке ключа Y (зеленая кривая) в кадре 25. Теперь диалог Key Info будет показывать параметры только для данного ключа.
Щелкните и удержите кнопку мыши на подменю Out Key Tangent и выберите тип касательной Linear.
Траектория между вторым и третьим ключом по прежнему кривая, но спрямляется при выходе из второго ключа.
Щелкните на правой стрелке рядом с внешним тангенциальным подменю и установите тангенс следующего ключа в тангенциальный тип Linear. Как видно из рисунка 24.11, траектория между вторым и третьим ключами является прямой. Интерполированное значение между двумя ключами 3DS МАХ вычисляет, основываясь как на выходном тангенсе первого ключа, так и на входном тангенсе второго ключа. Эффект тангенса для ключа уменьшается по мере приближения к другому ключу.
Установите выводной тангенс в тангенциальный тип Step. Транспортируйте ползунок времени по диапазону от 25 до 50.
Если выводной тангенс для одного ключа является тангенциальным типом Step, то входной тангенс следующего ключа автоматически изменяется на тангенциальный тип Step. Тангенциальный тип Step поддерживает выводное значение постоянным до времени следующего ключа. После этого значение прыгает до значения нового ключа.
Установите выходной тангенс в тангенциальный тип Fast. Щелкните на правой стрелке рядом с выводным тангенциальным подменю и установите входной тангенс следующего ключа в тангенциальный тип Fast. Транспортируйте ползунок времени по диапазону 25-50. Как видно из рисунка 24.12, сфера, покинув ключ номер 2, двигается быстро, замедляется и затем вновь ускоряется по мере приближения к ключу номер 3. Приращения кадров на кривой траектории разрежены рядом с обеими ключами и сжаты в середине.
Установите выходной тангенс в тангенциальный тип Slow. Щелкните на правой стрелке рядом с выходным тангенциальным подменю и установите входной тангенс следующего ключа в тангенциальный тип Slow. Транспортируйте ползунок времени через диапазон 25-50. Как видно из рисунка 24.13, сфера двигается медленно после покидания ключа номер 2, ускоряется и затем, подходя к ключу номер 3, замедляется вновь. Приращение кадров на кривой траектории сжато рядом с обеими ключами и разрежено в середине.
Установите выходной тангенс в тангенциальный тип Custom. Входной тангенс автоматически изменится на тангенциальный тип Custom. В Track View выберите все точки ключей для данного ключа (кадр 25). На каждой точке ключа показаны входная и выходная ручки. Тангенсы для данного ключа можно настроить, перемещая тангенциальные ручки вниз и вверх или настраивая их значения в разделе Advanced диалога Key Info.
Щелкните и транспортируйте ручку. По мере движения ручки, ручка с другой стороны ключа будет передвигаться в противоположном направлении. Форма кривой, проходящей через ключ, изменяется по мере перемещения ручки. Пример настройки тангенциальной ручки и результирующей траектории показан на рисунке 24.14.
Щелкните на кнопке Advanced в диалоге Key Info и настройте входное или выходное значение. Вновь будут изменяться обе ручки.
Разблокируйте ручки, щелкнув на пиктограмме замка между входным и выходным полями значения. Настройте входное или выходное значение. Будет передвигаться только одна ручка. Разблокировать ручки можно также путем нажатия Shift и щелкнув. После разблокирования ручек настройка одной ручки не заставляет передвигаться другую. Можно вновь заблокировать ручки, щелкнув на пиктограмме замка между входным и выходным полем значения. Перед транспортированием ручек для настройки их можно временно заблокировать путем щелчка на Lock Tangents в линейке инструментов Track View.
Контроллеры, использующие тип интерполяции ТСВ, выполняют интерполяцию между ключами на основе параметров ТСВ для каждого ключа. Параметры ТСВ можно настраивать, находясь в режимах Edit Key или Function Curve в Track View и щелкнув правой кнопкой мыши. Такое действие приводит к появлению диалога Key Info, в котором можно изменять значения. Для контроллеров, связанных с трансформацией, параметры ТСВ можно также настраивать в свитке Key Info панели команд Motion.
Следующее упражнение демонстрируют влияние, оказываемое параметрами ТСВ на движение объекта. Сцена состоит из сферы, двигающейся по круговому пути. Две сплайновых формы показывают, как выглядел бы путь, если бы путь следования был круговым или линейным. Обратите внимание на то, что везде в примере положение сферы в ключе всегда является положением, задаваемым ключом, и время, асоцииро-ванное с ключом, никогда не изменяется.
Загрузите файл ch24_2.max из папки Chapter 24 сопровождающего CD-ROM.
Выберите сферу и щелкните на Trajectories в панели команд Motion.
В Track View расширьте дорожки для отображения дорожки положения для SphereOl. Щелкните на Function Curves. Щелкните на кривой для отображения ключей.
Выполните выбор области для выбора всех ключей. Щелкните правой кнопкой мыши с целью отображения диалога Key Info. Перепозиционируйте диалог Key Info так, чтобы были видны кривые функций в Track View и траектория SphereOl в видовом окне Тор. Все ключи используют параметры ТСВ по умолчанию. Как видно из рисунка 24.15, приращение кадров на кривой траектории несколько более сжимается при подходе или уходе с ключа, нежели в середине между ключами. При проигрывании анимации сфера перемещается рядом с ключами медленнее, чем между ними.
Постепенно увеличивайте значение Ease To. Как видно из рисунка 24.16, по мере увеличения значения приращение кадров на траектории становится теснее при подходе к ключу и разреживается при уходе из ключа. Если проиграть анимацию, сфера быстрее двигается при уходе из ключа и замедляется при подходе к нему.
Установите значение Ease То в 0 и постепенно увеличивайте значение Ease From. Эффект будет противоположным наблюдаемому при увеличении значения Ease To.
Установите и Ease To и Ease From в 50. Как видно из рисунка 24.17, приращение кадров на траектории становится теснее по мере подхода к ключу или ухода с него, чем приращение посредине между двумя ключами. В полученной анимации сфера замедляется рядом с ключами.
Установите и Ease To и Ease From в 0. Постепенно увеличивайте значение Tension. Как видно из рисунка 24.18, кривизна траектории уменьшается, пока она не становится прямой линией между ключами. Приращение кадров теснее рядом с ключами и реже между ними.
Постепенно уменьшайте значение Tension. Как видно на рисунке 24.19, кривизна траектории между ключами увеличивается. Приращение кадров равномерно распределяется по траектории.
Установите значение Tension в 25. Постепенно увеличивайте значение Continuity. Из рисунка 24.20, видно, что угол между входной и выходной касательными и кривой функции возрастает, заставляя интерполированные значения перекрывать значения ключей по обе стороны ключей.
Постепенно уменьшайте значение Continuity. Как видно из рисунка 24.21, угол между входными и выходными касательными к траектории и кривой функции уменьшается, заставляя кривизну траектории и кривые функций превращаться в прямые линии между ключами. Приращение кадров равномерно распределяется по траектории.
Установите значение Continuity в 25. Постепенно увеличивайте значение Bias. Рисунок 24.22, показывает, что входная и выходная касательные траектории и кривые функции поворачиваются, заставляя значения интерполяции перекрывать значения ключей при уходе с ключей.
Постепенно увеличивайте значение Bias. Как видно из рисунка 24.23, входная и выходная касательные к траектории и кривые функции поворачиваются, заставляя интерполированные значения перекрывать значения ключей при подходе к ключам.
3DS МАХ распространяется с двумя типами параметрических контроллеров - Noise и Expression. Таблица 24,3 показывает типы параметрических контроллеров и типы данных, с которыми их можно использовать.
Таблица 24.3. Типы данных, доступные для каждого типа параметрического контроллера
Тип параметрического контроллера
Допустимые типы данных
Noise
Position, Rotation, Scale, Float, Point3
Expression
Position, Scale, Float, Point3
Каждая комбинация параметрического типа и типа данных реализуется уникальным контроллером. Внутри группы контроллеров заданного параметрического типа способ, по которому задаются параметры контроллера, является одним и тем же.
Параметры для контроллера помех указываются в диалоге 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.
Контроллеры выражений (Expression controllers) уникальны в том, что они оценивают определенные пользователем выражения и таким образом определяют свои выводные значения. Из-за своей относительной сложности контроллеры выражений детально описываются в этой главе позже. Для сравнения их с другими параметрическими контроллерами рассмотрите следующее основное упражнение, посвященное контроллерам выражений.
Создайте в видовом окне Тор цилиндр с Radius = 50, Height = 200, пятью Height Segments, одним Cap Segment и 24 Sides. Убедитесь, что опция Smooth включена.
В диалоге Time Configuration установите Animation End Time в 50.
Включите Animate и примените модификатор Bend. На кадре 50 установите Bend Angle (Угол изгиба) в 180 и Bend Axis - в Z (см. рис. 24.26).
Отключите Animate, активизируйте вид Perspective, щелкните на Zoom Extents, увеличьте окно для лучшего обозрения и проиграйте анимацию (зрелище довольно отвратительное).
Откройте вид Track и расширьте дорожки так, чтобы видеть контроллеры, служащие вводом в модификатор Bend и в Object (Cylinder).
Щелкните на Height Segment для его выбора, щелкните на Replace Controller, выберите Float Expression и нажмите на ОК. Рисунок 24.27 отражает иерархию Track View и диалог Replace Controller в этой точке.
Щелкните правой кнопкой мыши на Height Segments и выполните Pproperties из всплывающего меню. После этого происходит переход в диалог Expression Controller.
Прежде всего требуется создать скалярную переменную, определяющую минимальное количество сегментов, которые должен иметь цилиндр. В поле Name в разделе Create Variables (переменные создания) напечатайте HSMin, убедитесь, что выбрана опция Scalar, и нажмите Create. Щелкните на Assign to Constant (присвоить константу), установите значение в 2 и нажмите на ОК.
Далее требуется создать скалярную переменную, определяющую максимальное количество сегментов, которое может быть в цилиндре. В поле Name в разделе Create Variables напечатайте HSMax, убедитесь, что выбрана опция Scalar, и нажмите на Create. Щелкните на Assign to Constant, установите значение в 14 и нажмите на ОК.
Теперь необходимо создать скалярную переменную, указывающую угол изгиба для цилиндра. В поле Name раздела Create Variables напечатайте BendAngle, убедитесь, что опция Scalar включена, и щелкните на Create. Щелкните на Assign to Controller и в появившемся диалоге Track View Pick выберите параметр Angle под Bend. Нажмите на ОК. Рисунок 24.28 показывает диалог Expression Controller и диалог Track View Pick в данный момент.
Наконец, следует ввести уравнение для оценки. В окне Expression напечатайте HSMin+(BendAngle/ 180)*(HSMax-HSMin) и щелкните на Evaluate. Рисунок 24.29 отражает диалог Expression Controller в данной точке.
Переместите или измените размеры диалогов Track View и Expression Controller так, чтобы можно было видеть вид Perspective, после чего проиграйте анимацию. Количество сегментов высоты цилиндра изменяется при изменении угла.
СОВЕТ
Можно опуститься по стеку модификаторе^ до Cylinder и наблюдать за изменением количества Height Segments при воспроизведении анимации. Кроме того, можно изменить значения, присвоенные HSMin и HSMax в выражении, и наблюдать за производимым эффектом.
Как описывалось ранее, составные контроллеры принимают в качестве ввода вывод подчиненных контроллеров и объединяют полученные данные с любыми параметрами, ассоциированными с контроллером, манипулируют данными и выводят результаты.
3DS МАХ распространяется с двумя составными контроллерами уровня трансформации (контроллеры Position/Rotation/Scale и LookAt), контроллером, который объединяет вращение вокруг отдельных осей (контроллер вращения Euler XYZ), контроллером для перемещения объекта вдоль сплайна (контроллер Path position) и контроллером, который производит сложение результатов своих вводных контроллеров (контроллер List).
Способ, в соответствие с которым значения, выходящие из подчиненных контроллеров, используются в контроллере уровня трансформации, зависит от того, присвоен ли контроллеру объект, гизмо модификатора или центр модификатора. Для контроллера трансформации на уровне объекта возвращаемое положение является положением точки вращения объекта относительно начальной точки мировых координат. Возвращаемые значения поворота и масштаба относительны положению точки вращения объекта.
Для контроллера трансформации уровня гизмо модификатора или уровня центра, возвращаемое значение положения является относительным точке вращения объекта, т.е. центр модификатора, позиционированный в [О, О, 0] располагается в точке вращения объекта. Если точка вращения объекта после применения модификатора изменяется, гизмо модификатора и центр будут оставаться в своем начальном положении. Возвращаемые значения вращения и масштаба относительны положению центральной точки гизмо.
Контроллер трансформации Position/Rotation/Scale (PRS) объединяет ввод из контроллеров положения, вращения и масштаба (см. рис. 24.30). Вывод из контроллера PRS является матрицей трансформации, которая используется 3DS МАХ внутренним образом. Контроллер PRS можно применять только на дорожках трансформации объектов и гизмо модификаторов.
Никаких настраиваемых пользователем свойств с контроллером PRS не связано.
Контроллер трансформации LookAt объединяет вывод из контроллеров положения, вращения (тип данных Float) и масштаба (см. рис. 24.31). Вывод контроллера LookAt является матрицей трансформации, используемой 3DS МАХ внутренним образом- Контроллер LookAt можно применять только в качестве контроллеров трансформации для объектов, но не для модификаторов.
Контроллер LookAt вращает объект так, чтобы негативная локальная ось Z всегда указывала на точку вращения другого объекта. Параметр вращения задает угол поворота объекта вокруг локальной оси Z.
Целевой объект, за которым необходимо следить, определяется в качестве параметра контроллера LookAt. Целевой объект контроллера LookAt можно увидеть и отобразить только в разделе Parameters панели команд Motion. Свиток LookAt Parameters в панели команд Motion показан на рисунке 24.32.
Создайте в окне Тор два конуса. Увеличьте окно на указанную высоту конуса.
Выберите Local из выпадающего списка Transform Coordinate System в линейке инструментов. Это покажет локальные оси выбранных объектов.
В Motion Parameters присвойте контроллеру LookAt параметр трансформации для Сопе02. Сопе02 вращается так, чтобы его отрицательная ось Z указывала на исходную точку мира.
Щелкните на Pick Target и выберите ConeOl. Сопе02 поворачивается так, чтобы его отрицательная ось Z указывала на ConeOl. Точка вращения для конуса расположена в центре его дна. Это будет именно та точка, куда указывает Сопе02.
Перемещайте любой конус в окне Тор. При движении конуса база Сопе02 всегда указывает на ConeOl.
Не забудьте изменить Transform Coordinate System или ограничения осей, прежде чем пытаться переместить конус в другое видовое окно.
Вращайте Сопе02. Конус всегда вращается относительно своей локальной оси 2.
Контроллер LookAt используется камерами Target, а также источниками света Target. При создании одного из этих объектов ему присваивается контроллер LookAt, затем создается фиктивный объект, играющий роль цели, и фиктивный объект определяется как цель LookAt.
Контроллер Path позиционирует объект так, чтобы точка вращения объекта располагалась на сплайне. Кроме того, создается параметр, подчиняющийся контроллеру Path. Параметр называется Percent (см. рис. 24.33). Параметр Percent задает положение на сплайне для использования в конкретный момент времени. Значение Percent автоматически устанавливается в 0 в начале активного отрезка времени и в 100 в конце активного отрезка времени,
Сплайн для использования в качестве пути указывается как параметр контроллера Path. Сплайн пути контроллера Path может устанавливаться и отображаться только в разделе Parameters панели команд Motion. Свиток Path Parameters на панели команд Motion показан на рисунке 24.34. Если выбранная форма содержит более одного сплайна, то в качестве сплайна пути используется первый из них.
Создайте конус в окне Left. Расширьте окно на указанную высоту конуса. Это создаст конус, вершина которого смотрит в направлении положительной оси Х мира. Включите опцию Slice On и установите Slice То в 180.
В окне Тор создайте эллипс. На рисунке 24.35 показаны относительные размеры конуса и эллипса.
Выберите Local из выпадающего списка Transform Coordinate System в линейке инструментов. В результате будут показаны локальные оси выбранных объектов.
Выберите конус и в Motioni-^Parameters присвойте контроллер Path позиционному параметру конуса.
Убедитесь, что в Path Options опция Follow отключена, нажмите Pick Path и выберите эллипс. Конус изменит свою позицию так, чтобы его точка вращения (расположенная в середине дна конуса) разместилась на первой вершине эллипса. Обратите внимание на то, что ориентация конуса не изменяется (см. рис. 24.36).
Переместите эллипс. Во время движения эллипса также будет передвигаться и конус.
Проиграйте анимацию. За активный сегмент времени конус проходит длину эллипса.
Выберите Editr^Hold. С этого момента начинается следующее упражнение.
Хотя контроллер Path классифицируется как позиционный, он также может изменять вращение объекта, к которому применен. Опции Follow и Bank в Path Options заставляют объект вращаться на основе кривизны сплайна пути. Вращение от контроллера Path дополняет любое вращение, определенное пользователем.
Когда опция Follow отключена, ориентация объекта не изменяется. При включенной опции Follow объект вращается так, чтобы "передняя часть" объекта всегда указывала вдоль касательной сплайна. "Передняя часть" объекта определяется как направление, указывающее вдоль положительной оси Х мира в начале активного диапазона. Таким образом правая сторона объекта в окне Тор является "передней частью" объекта.
Опция Bank указывает, куда смотрит верх объекта ("верх" определяется как направление вдоль положительной оси Z мира). Если Bank выключена или Bank Amount равно нулю, верх объекта пытается указывать в направлении положительной оси Z мира. (Две степени свободы используются опцией Follow, следовательно для опции Bank осталась только одна степень свободы. Таким образом верх указывает в направлении положительной оси Z мира только в той степени, в которой это возможно.)
При включенной опции Bank объект будет вращаться на основе локальной кривизны сплайна. Для низких и умеренных значений верх объекта имеет тенденцию указывать внутрь сплайна. Для высоких значений верх объекта вращается вокруг сплайна.
Smoothness (гладкость) определяет скорость, с которой разрешено меняться вращению при указании опции Bank. Высокие значения смягчают результирующее вращение. Эффекты параметров Bank Amount и Smoothness взаимодействуют друг с другом, поэтому для достижения желаемого движения обычно требуется небольшая интерактивная настройка значений. Как правило, для достижения гладкого движения следует использовать предельно низкие значения указанных параметров.
Выполните Editi-Fetch для получения сцены предыдущего упражнения.
Выберите конус.
Щелкните правой кнопкой в видовом окне Perspective, щелкните на Play Animation и продолжите проигрывание анимации до завершения упражнения.
В Motion^ Parameters включите Follow. Конус повернется так, что его верх будет указывать на сплайн (см. рис. 24.37).
Включите Bank. Конус, двигаясь вдоль эллипса, будет наклоняться. Величина наклона варьируется в зависимости от кривизны сплайна.
Установите Smoothness в 2. Конус будет меньше наклоняться в концах эллипса, но больше по его сторонам.
Установите Smoothness в 0.5 и Bank Amount в 0. Постепенно увеличивайте значение Bank Amount. Рисунок 24.38 показывает конус со значением наклона, равным 1.5. По мере возрастания значения градус наклона увеличивается до точки, когда конус начинает вращаться, следуя по пути.
Во время проигрывания анимации можно было заметить, что конус двигается быстрее у концов эллипса и медленнее по сторонам. При использовании контроллера Path важно принимать во внимание взаимосвязь между положением вершин сплайна, служащего в качестве пути, и временем. 3DS МАХ позиционирует объект на сплайне во времени на основе количества вершин сплайна - а не длины сплайна или расстояния между вершинами. Каждая вершина преобразуется в равномерно распределенный во времени ключ положения. Например, если в качестве пути объекта используется линия с 11 вершинами, создается 11 ключей. Если активный диапазон времени находится между 0 и 100 кадрами, объект размещается на вершине 0 в кадре О, на вершине 1 в кадре 10 и на вершине 2 в кадре 20. В зависимости от расстояния между вершинами скорость объекта во времени может существенно изменяться.
В некоторых ситуациях требуется постоянная скорость вдоль всего пути. 3DS МАХ обеспечивает возможность модификации пути Безье так, чтобы по траектории объекта поддерживалась постоянная скорость. Модификация пути Безье для поддержки постоянной скорости выполняется в диалоге Advanced Key Info.
В следующем упражнении траектория эмиттера системы частиц настраивается на деформацию-дофт объекта. На сцене лофт-объект (Fuse) использует анимацию деформации масштаба для сокращения длины фитиля во времени. Деформация шкалы была определена так, чтобы длина фитиля сокращалась во времени с постоянной скоростью. Эмиттер системы частиц (Sparks) назначается контроллеру пути там, где путь является тем же сплайном, что и путь лофта (FusePath). Поскольку вершины для FusePath распределены неравномерно, Sparks предшествует деформации шкалы.
Загрузите файл ch24_3.max из папки Chapter 24 сопровождающего CD-ROM и проиграйте анимацию.
Выберите объект Dummy.
Выберите Motioned TrajectoriesOConvert From, установите Samples в 11 и выберите Fuse Path как сплайн.
Выберите в Track View контроллер позиции для Dummy, затем на Function Curves и щелкните на одной из кривых функций, показанных в Track View для позиции Dummy. Рисунок 24.39 показывает видовое окно Тор и кривые функций позиции Dummy в Track View. Траектория для Dummy отображается в окне Тор голубым цветом с 11 ключами позиций на расстоянии 10 кадров друг от друга. Точки на траектории показывают приращение кадров. Количество кадров приращения между ключами позиций постоянно, однако приращение кадров не распределено равномерно между ключами. Хотя это не тот путь, которому должны следовать Sparks (искры), его можно использовать для демонстрации эффекта модификации траектории для случая постоянной скорости.
На панели команд Motion щелкните на Sub-Object и в видовом окне Тор выберите все ключи позиций на траектории.
Щелкните правой кнопкой мыши на любом ключе позиции, выберите Key Info и щелкните на Advanced (см. рис. 24.40).
Включите Constant Velocity (постоянная скорость). Приращение кадров между смежными ключами позиции распределено равномерно. Ключи позиций по прежнему размещены через каждые 10 кадров и находятся на прежних местах. Можно заметить, что в Track View изменилась только кривизна между ключами.
Отключите Constant Velocity и щелкните на Normalize Time. Положения ключей остались прежними, но время, связанное с каждой позицией, изменилось на основе расстояния между ключами. В больших сегментах приращений кадров больше, чем в коротких. Между ключами позиций скорость непостоянна.
Включите Constant Velocity. Приращение кадров равномерно распределяется на всей траектории. Теперь, посмотрев на эффекты, которые оказывают на траекторию Constant Velocity и Normalize Time, можно завершить анимацию.
В Motionc^Trajectories увеличьте Samples до 101, выберите Convert From и FusePath в качестве сплайна.
Выберите на траектории все ключи позиций, а в Key Info отметьте Constant Velocity. Щелкните на Normalize Time. Рисунок 24.41 показывает траекторию Dummy и положение кривых функций с Samples, равным 101.
Закройте Key Info и щелкните на Convert To. Convert To генерирует из траектории форму под названием ShapeOl.
Выберите Sparks и в Motion"-^ Parameters щелкните на Pick Path и выберите в качестве пути ShapeOl.
Проиграйте анимацию. Теперь Sparks на протяжении всей анимации находится в том же самом положении, что и деформация шкалы.
По умолчанию для дорожек вращения используется контроллер ТСВ Rotation. Хотя данный контроллер и обеспечивает гладкое вращение, однако кривые функций, связанных с данным контроллером, в Track View недоступны из-за того, что контроллер ТСВ для управления вращением применяет кватернионовскую математику. Кватернионовская математика имеет четыре значения - X, Y и Z единичного вектора (unit vector) и угол вращения вокруг единичного вектора (см- раздел "Типы данных контроллеров" ранее в этой главе, где приведены более подробные сведения о кватернионовской математике). Другие контроллеры вращения, также использующие кватернионовскую математику - это Linear и Smooth.
Помимо невозможности отображения кривых функций вращения для данных контроллеров, иногда требуется большее управление вращением, нежели обеспечиваемое данными контроллерами. 3DS МАХ обеспечивает дополнительный контроллер вращения Euler XYZ, для которого можно отобразить кривые функций и отдельно управлять вращением относительно каждой локальной оси объекта.
Рассмотрим случай, когда вращается объект вокруг осей Х и Y и необходимо настроить интерполяцию на один из ключей для вращения вокруг Х-оси. Значения контроллера ТСВ для данного ключа можно настроить либо в панели Motion, либо в Track View, но также будет настраиваться и интерполяция вращения вокруг оси Y в данном ключе. Используя контроллер ТСВ нельзя настроить значения интерполяции для одной оси, не затрагивая значения для всех остальных осей. Если используется контроллер вращения Euler XYZ, интерполяция для ключей, связанных с вращением вокруг оси X, может выполняться без влияния на вращение вокруг оси Y.
Дополнительные преимущества применения контроллера вращения Euler XYZ для объекта заключаются в том, что для каждой из осей вращения можно использовать свой контроллер выражения, а другие контроллеры выражения могут ссылаться на вращение объекта.
Загрузите файл ch24_4.max из папки Chapter 24 сопровождающего CD-ROM и проиграйте анимацию. Коробка анимируется таким образом, чтобы поворачиваться на 180° вокруг своей локальной оси Z в кадрах с 0 по 100. Кроме того, коробка поворачивается на 45° вокруг оси Y в кадрах с 25 по 75. Как можно заметить в видовом окне, вращение вокруг оси Y имеет место и до 25 кадра, и после 75. Можно было бы попытаться настроить параметры ТСВ для ключей в кадрах 25 и 75, но в данных кадрах это повлияло бы на вращение коробки вокруг оси Z.
Откройте Track View и расширьте дорожки так, чтобы отобразить параметр вращения для BoxOl.
Выберите параметр вращения и присвойте ему контроллер Euler XYZ.
Расширьте дорожки для параметра вращения.
Выберите параметр Y Rotation и щелкните на Function Curves. Щелкните на кривой для отображения ключей. Кривые функций показаны на рисунке 24.42. Кривые функций показывают, что значение вращения Y варьируется между первым и вторым и между третьим и четвертым ключами.
Щелкните правой кнопкой мыши на первом ключе и отобразите диалог Key Info.
Установите для первого ключа выходную касательную в тангенциальный тип Step.
Установите для четвертого ключа входную касательную в тангенциальный тип Step.
Проиграйте анимацию. Теперь нет вращения вокруг оси Y до кадра 25 и после кадра 75. Вращение вокруг оси Z по-прежнему является гладким.
Контроллеры List применяются для объединения результатов нескольких контроллеров. Например, можно добавить помехи в предварительно определенное движение, назначив контроллер List желаемому параметру и добавив контроллер Noise в качестве ввода для контроллера List. Кроме того, контроллер List предоставляет возможность интерактивно добавлять дополнительное движение в параметр, управляемый параметрическим контроллером, подобным Path.
В следующем упражнении для части анимации используется контроллер Path, а затем для завершения анимации происходит переключение на контроллер Безье. Сцена состоит из мяча, движение которого управляется контроллером пути. Путь является кругом. Необходимо, чтобы в анимации мяч был неподвижен в начале, а впоследствии, передвигаясь по кругу, ускорился в три раза и улетел туда, где размещен фиктивный объект.
Загрузите файл ch24_5.max из папки Chapter 24 сопровождающего CD-ROM.
Откройте Track View, щелкните на Filters и включите Show Controller Types.
Расширьте дорожки для SphereOl так, чтобы был виден контроллер Percent под контроллером Position: Path.
Щелкните правой кнопкой мыши на позиции ключа в кадре 100 и вызовите диалог Key Info.
Измените значение кадра ключа на 300 и покиньте диалог.
Проиграйте анимацию. Мяч трижды проходит по кругу с постоянной скоростью.
В Track View щелкните на Function Curves и затем на Add Keys.
Добавьте три ключа к кривой функции Path Percent и щелкните на Move Keys.
Настройте три ключа на получение кривой, подобной показанной на рисунке 24.43. Обратите внимание на то, что имеется возможность проигрывать анимацию во время настройки кривых и видеть соответствующее движение в реальном времени. Теперь мяч стартует с последней позиции и ускоряется в три раза, проходя круг за 100 кадров. Теперь необходимо выполнить данное движение за 80 кадров и затем улететь в позицию фиктивного объекта.
Щелкните на Edit Keys и выберите PositioniPath controller.
Щелкните и транспортируйте маркер конца диапазона контроллера позиции в кадр 80.
Щелкните на Assign Controller и выберите Position List.
Расширьте дорожки для Position List, выделите Available и присвойте дорожке контроллер Bezier Position.
Щелкните на Add Keys, щелкните на кадре 80 в дорожке Bezier Position для создания ключа и щелкните на Move Keys.
Щелкните на свободной области Track View для отмены только что созданного выбора ключа.
Щелкните на контроллере Position List для его выбора, щелкните на нем правой кнопкой мыши и выберите из всплывающего диалога Properties. Появившийся диалог List Controller покажет контроллер Path как активный. Вы же хотите добиться активности контроллера Bezier Position, чтобы можно было интерактивно настраивать позицию мяча.
Выберите Bezier Position, щелкните на Set Active и выйдите из диалога List Controller.
Включите Animate и перейдите к кадру 100.
В окне Тор переместите SphereOl в положение фиктивного объекта.
Отключите Animate и проиграйте анимацию. Теперь мяч ускоряется по кругу в три раза и улетает в новую позицию. Обратите внимание на заметное небольшое изменение скорости мяча, когда он проходит кадр 80.
Выберите все ключи для контроллера Percent и ключ в кадре 80 для контроллеров Bezier Position. Щелкните на Scale Keys и настройте выбранные ключи за счет транспортировки ключа в кадре 80 с целью Bezier Position для получения гладкого перехода скорости.
Контроллер List можно использовать для объединения контроллеров Path и Bezier и для того, чтобы заставить камеру следовать за объектом вдоль пути. Памятуйте об одном ограничении: если контроллер Path подчиняется контроллеру List, он должен быть первым контроллером в списке. Если это не так, то любые значения из контроллеров, предшествующих Path, будут игнорироваться.
В следующем упражнении сцена состоит из тора, катящегося между препятствиями. В данной сцене необходимо, чтобы камера всегда смотрела на тор и следовала позади него.
Загрузите файл ch24_6.max из папки Chapter 24 сопровожцающего CD-ROM.
Выберите камеру и откройте панель команд Motion. Откройте свиток Assign Controller и щелкните на Transform: Position/Rotation/Scale. Щелкните на Assign Controller, выберите из диалога Replace Transform Controller контроллер LookAt и щелкните на ОК.
В разделе LookAt Target свитка LookAt Parameters щелкните па Pick Target и в качестве цели выберите DummyO 1.
В свитке Assign Controller щелкните на Position: Bezier Float. Щелкните на Assign Controller, выберите в диалоге Replace Position Controller контроллер Path и нажмите на ОК.
В разделе Current Path Object свитка Path Parameters щелкните на Pick Path и в качестве пути выберите TorusPath. Включите опцию Follow Path.
В свитке Assign Controller щелкните на Position:Path. Щелкните на Assign Controller, выберите в диалоге Replace Position Controller контроллер Position List и нажмите на ОК.
Расширьте список позиций, выберите Available и назначьте ему контроллер Bezier Position.
В свитке Position List выберите Bezier Position и щелкните на Set Active.
В окне Front переместите камеру вверх на 200 единиц.
Откройте Track View и расширьте дорожки трансформации для камеры.
Выберите дорожку Percent под контроллером Path.
Щелкните на Position Curves и щелкните на кривой.
Щелкните и удержите кнопку Move Keys и выберите в подменю нижнюю пиктограмму. Это ограничит перемещение точек ключей только вертикальным направлением.
Выберите обе точки ключей и переместите ключи вниз на 5 единиц.
Закройте Track View и проиграйте анимацию. Для достижения интересных вариаций в движении камеры выберите контроллер Path в свитке Position List панели команд Motion и щелкните на Set Active. В свитке Path Parameters включите опцию Bank Path и установите Bank Amount в -0.5. Теперь на повороте камера "свернет" с пути.
Контроллеры Bxpression оценивают определенные пользователем математические выражения и определяют выводные значения контроллеров. Контроллеры Expression можно применять практически ко всем параметрам 3DS МАХ, которые поддаются анимации. Контроллер Expression может получать вывод из других контроллеров и использовать в выражении полученные значения. Момент времени, для которого оценивается выражение, также доступен в нескольких формах. Для использования в выражениях определено множество встроенных функций. Параметры для контроллера Expression задаются в диалоге Properties. Для всех типов данных доступ к диалогу Properties осуществляется в Track View путем выбора параметра, которому назначается контроллер Expression, последующего щелчка в свободной области окна редактирования с целью убедиться, что никаких ключей не выбрано, и затем выполнения одного из следующих действий: щелчка правой кнопкой мыши на имени параметра, щелчка правой кнопкой мыши на линейке диапазона дорожки параметра или щелчка на Properties в линейке инструментов Track View.
Для контроллеров, связанных с трансформацией на объектном уровне, параметры контроллера можно настроить также из панели команд Motion, выбрав параметр в свитке Assign Controller, щелкнув правой кнопкой на параметре и выполнив Properties из всплывающего меню.
На рисунке 24.45 показан пример диалога контроллера Expression. При первом назначении контроллера Expression параметру, который уже имеет контроллер, окно уравнения показывает значение параметра в кадре 0. Если параметр не имеет контроллера, значение будет установлено в 0. Значение отображается в одном из двух форматов. Первый формат применяется в случае, когда назначаемый контроллер Expression имеет тип данных Position, Scale или Point3. Эти типы данных требуют, чтобы контроллер Expression вернул трехкомпонентный вектор. Формат выражения следующий: [eqnl, eqn2, eqn3]. Второй формат применяется в случае, когда параметр, которому назначается контроллер Expression, имеет тип данных Float. Последний требует, чтобы контроллер Expression возвращал скалярное значение с плавающей точкой. Формат выражения будет выглядеть как eqni. Если формат выражения некорректен или во время оценки выражения возникает ошибка, на экране отображается сообщение об ошибке.
В уравнении можно использовать два типа переменных. Первый тип. 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 коробки не может ссылаться на параметр ширины коробки. Однако выражение может ссылаться на параметры трансформации коробки и параметры для любых модификаторов, применяемых к коробке.
Значения, возвращаемые из контроллера и присваиваемые переменной, обычно являются выводными значениями контроллера в той же самой временной точке, которая оценивается. В ряде случаев желаемое значение является выводом контроллера в другой временной точке. 3D Studio MAX предоставляет возможность задания фиксированного смещения для переменной. 3DS МАХ добавляет значение смещения к оцениваемой временной точке и оценивает назначенный контроллер в новой временной точке. Значение смещения указывается в поле Tick Offset в окне Create Variables. Значение Tick Offset устанавливается в момент создания переменной и может быть изменено за счет выбора имени переменной, установки нового значения Tick Offset и щелчка на Change Offset. Значение Tick Offset может быть как положительным, так и отрицательным, и сохраняется постоянным во время анимации. Как и подразумевает название, значение Tick Offset задает смещение времени в тиках. Секунда содержит 4800 тиков. Если частота кадров равна 30 кадрам в секунду, то на кадр приходится 160 тиков.
Существует несколько имен переменных, которые нельзя или не требуется применять в качестве имен создаваемых переменных. Четыре из них (Т, S, F и NT) являются предварительно определенными именами переменных со специальными значениями. Кроме того, не следует использовать имена е, pi или TPS. Эти имена переменных также предварительно определены со специальными значениями. Однако 3DS МАХ предоставляет возможность их переопределения. Ниже перечислены значения, ассоциированные с каждой из этих переменных:
Т
Временная точка, оцениваемая в тиках
S
Временная точка, оцениваемая в секундах
F
Временная точка, оцениваемая в кадрах
NT
Нормализованное время. Данное значение линейно возрастает от 0 в начале активного сегмента времени до 1 в конце сегмента
Начиная применение контроллеров 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 могут приводить к достаточно неожиданному поведению. Лучше всего определить пределы изменений параметра и всегда в них оставаться.
В данном упражнении вы будете иметь дело с вращением доски объявлений так, чтобы фронт доски всегда смотрел в камеру. Однако доска всегда должна оставаться перпендикулярной земле - ее требуется вращать только относительно одной оси. Для решения поставленной задачи используйте контроллер выражений, который вращает доску объявлений вокруг оси Z на основе положения камеры относительно доски.
Сцена состоит из камеры, коробки, представляющей землю (Ground) и коробки с отображенной текстурой (Billboard). Точка вращения Billboard настроена так, чтобы ось +Z доски оказалась перпендикулярной Ground.
Для применения к Billboard контроллер выражения вращения нуждается в доступе к позиции Billboard. Поскольку выражению вращения для объекта не разрешено получать доступ к контроллеру положения того же объекта, в позиции, где находится Billboard, создается фиктивный объект и Billboard делается дочерним по отношению к фиктивному объекту.
Загрузите файл ch24_7.max из папки Chapter 24 сопровождающего CD-ROM.
Щелкните на Play Animation для выполнения анимации.
Нажмите Esc для завершения воспроизведения и щелкните на Min/Max с целью отображения всех видовых окон.
Создайте фиктивный объект.
Выполните Align и выберите Billboard как Align Target Object. Выберите X Posinion, Y Position и Z Position и затем Pivot Point как для Current Object, так и Target Object. Выберите оси X, Y и Z в Align Orientation. Щелкните на OK для завершения работы.
Выполните Select and Link и свяжите Billboard с фиктивным объектом.
Откройте Track View и выберите контроллер вращения для Billboard.
Выполните Assign Controller и выберите контроллер Euler XYZ.
Расширьте дорожку контроллера вращения и назначьте дорожке Z Rotation контроллер Float Expression. Рисунок 24.47 показывает экран в данной точке.
Щелкните правой кнопкой мыши на контроллере Z Rotation и выполните Properties.
Щелкните на Load и загрузите lookat__z.xpr из папки Chapter 24 сопровождающего CD-ROM. Рисунок 24.48 отражает диалог Expression Controller, содержащий уравнение Lookat_Z.
Выберите MyPos в колонке Vector, щелкните на Assign to Controller и выберите дорожку позиции для фиктивного объекта.
Выберите TargetPos в колонке Vector, щелкните на Assign to Controller и выберите дорожку позиции для камеры.
Щелкните на Close, активизируйте видовое окно камеры и проиграйте анимацию.
В файле Lookat_x.xpr подготовлен дополнительный контроллер выражения. Рисунок 24.49 показывает уравнение Lookat_X. Если использовать данное выражение для управления дорожкой Х Rotation объекта и уравнение Lookat_Z для управления дорожкой Z Rotation, то ось -Z объекта всегда будет указывать на объект цели. На сцене примера ch24_8.max, находящегося на сопровождающем CD, показано два объекта ~ один использует контроллер LookAt, а другой - приведенные выше выражения.
В Track View можно скопировать и вставить большинство контроллеров. Пока параметр имеет присоединенный контроллер с рядом ограничений этот контроллер можно скопировать. Контроллер можно вставить в параметр, если этот параметр может принять тип данных контроллера.
Главное ограничение на вырезание и вставку заключается в том, что нельзя копировать или вклеивать контроллеры, отстоящие от объекта более чем на два уровня вниз. Это ограничение означает невозможность копирования подчиненных контроллеров в контроллере List, контроллерах Ease и Multiplier и подчиненные контроллеры вращения X, Y и Z в контроллере Rotation Эйлера. Дополнительные ограничения заключаются в том, что копирование/вставку нельзя выполнить на дорожке позиции для центра модификатора и его также нельзя выполнить для контроллера PRS для гизмо модификатора. Однако копирование/вставку можно применять для подчиненных контроллеров для PRS контроллера гизмо с учетом предыдущих ограничений.
Последнее ограничение заключается в том, что если копируется и вставляется контроллер, использующий контроллер Ease или Multiplier, канал Ease или Multiplier в копии не сохраняется. Это справедливо как для контроллеров, скопированных в Track View, так и для объектов, которые клонируются в главных видовых окнах.
Из следующего упражнения будет видно, как экзем пляризованные контроллеры можно использовать в качестве помощи при создании геометрии. Цель данного упражнения заключается в создании коробки, которая всегда будет квадратной, - для ширины, высоты и длины коробки всегда будет применяться одно и то же значение.
Создайте коробку произвольных размеров. Грани коробки нс должны быть квадратными.
Откройте Track View, щелкните на Filters и включите Show Controller Types.
Расширьте дорожки для BoxOl.
Выберите параметр Height и присвойте параметру контроллер Bezicr Float.
Щелкните на Copy Controller для сохранения копии контроллера Bezier Float.
Выберите параметр Width и удерживая клавишу Ctrl щелкните на параметре Length, чтобы добавить его к выборке.
Щелкните на Paste Controller. На экране появится диалог Paste с опцией вставки контроллера в виде копии или экземпляра. Следует вставить в виде экземпляра так, чтобы при изменении одного значения поменялись бы значения и для остальных трех дорожек.
Выберите Instance и нажмите на ОК.
Закройте Track View и откройте панель команд Modifier.
Настройте значение для Length, Width и Height. Как только изменится одно значение, новое значение отобразится в остальных полях.
СОВЕТ
В предыдущем примере выражения 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 применяется контроллер пути.
Загрузите файл 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.
Применяя поставляемые с 3DS МАХ контроллеры, можно создавать сложное движение объектов. Например, объект может иметь контроллер Path, контроллер List, контроллер LookAt и параметрические контроллеры, подобные Noise. Объект может также быть частью оживляемой иерархии.
В ряде случаев возникает желание свернуть движение для объекта до простых ключей позиции, вращения и масштаба. Последнее делается для использования контроллера Expression, который нуждается в ссылке на дорожки позиции или вращения или для создания пути для лидирующего объекта. Имеется возможность свернуть движение до ключей трансформации, привязав один объект к другому, движение которого необходимо захватить и затем применить Inverse Kinematics/Bind.
В следующем упражнении BoxOl связана со Shpere03, связанной со Sphere02, которая в свою очередь связана с SphereOl. В течение анимации каждая сфера поворачивается на 360° вокруг оси Z. Рассеянный цвет материала, отображающийся на BoxOl, управляется контроллером Expression. Данный контроллер изменяет рассеянный цвет коробки на основе скорости X, Y и Z коробки в текущем кадре. Скорость определяется векторными переменными, присвоенными дорожке позиции BoxOl. Во время проигрывания анимации можно заметить, что рассеянный цвет никогда не изменяется, поскольку для BoxOl не обеспечено никакого движения, кроме как через иерархию. Таким образом значение, возвращаемое с дорожки позиции, является константным.
Загрузите файл ch24_10.max из сопровождающего CD-ROM и проиграйте анимацию.
Создайте фиктивный объект и откройте часть IK в панели команд Hierarchy. Щелкните на Bind и свяжите фиктивный объект с BoxOl. Включите Bind Position и Bind Orientation и в свитке Sliding Joints активизируйте оси X, Y и Z. Щелкните на Apply IK.
Откройте Track View, расширьте дорожки и выберите параметр Diffuse для Material #1 под BoxOl. Щелкните правой кнопкой мыши на Diffuse и выполните Properties. На экране появится диалог контроллера Expression, показанный на рисунке 24.52.
Выберите переменную PosLast в колонке Vector и щелкните на Assign to Controller. В появившемся диалоге Track View Pick выберите дорожку позиции DummyOl. Повторите для PosNow и закройте диалог контроллера Expression.
Оставляя Track View открытым, активизируйте вид камеры и проиграйте анимацию. При изменении скорости цвет коробки будет изменяться. Цвет коробки в кадре 0 существенно отличается от цвета в кадре 1 и кадре 100.
В Track View со все еще выбранным Diffuse щелкните на Function Curves. Обратите внимание на прерывание в кадре 0. Выберите дорожку позиции для DummyOl. Кроме того следует обратить внимание на постоянные значения, используемые вне активного диапазона времени. Поскольку переменная PosLast в выражении получает доступ к позиции на один тик позже текущего кадра, в кадре 0 изменение скорости не наблюдается.
Щелкните на Parameter Curve Out-Of-Range Types. Щелкните на двух кнопках ниже Cycle и выйдите из диалога.
Закройте Track View и проиграйте анимацию. Теперь цвет в кадре 0 стал корректным.
Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!