3Ds max 5. Библия пользователя

         

Анимирование материалов с помощью контроллера Expression



Анимирование материалов с помощью контроллера Expression

Для того чтобы управлять с помощью контроллера Expression параметрами материалов, назначьте его трекам этих параметров в окне Track View. Большинство параметров принимает значения скалярного типа, однако все параметры, управляющие цветом материала, принимают значения типа Point3.

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



Анимирование параметров объекта...



Анимирование параметров объекта с помощью контроллера Float Expression

Для того чтобы назначить контроллер Float Expression, выделите параметрический объект (или объект, к которому применен модификатор) и откройте окно Track View. Найдите и выделите трек нужного параметра, а затем щелкните на кнопке Assign Controller. Из списка диалогового окна Assign Float Controller выберите контроллер Float Expression и щелкните на кнопке ОК.

На самом деле тип контроллера зависит от выбранного параметра. С большинством параметров используется контроллер Float Expression, однако с некоторыми — контроллер Transform.

Назначив контроллер Expression, щелкните правой кнопкой мыши на треке параметра и из контекстного меню выберите команду Properties. Появится диалоговое окно Expression Controller. В поле Expression этого окна будет отображено текущее значение выбранного параметра.





Анимирование преобразований с помощью контроллера Expression



Анимирование преобразований с помощью контроллера Expression

После назначения контроллера Expression треку трансформации все текущие значения выбранного объекта отображаются в ноле Expression диалогового окна Expression Controller. При назначении контроллера преобразованию Position (Позиционирование) в этом поле будут отображены текущие координаты объекта X, Y и Z. Если контроллер назначен преобразованию Rotation (Вращение), в этом поле будет отображен угол поворота (в радианах). Если же контроллер Expression назначен преобразованию Scale (Масштаб), то в поле Expression отображаются масштабные множители каждой оси.

Углы измеряются как в градусах, так и в радианах. Угол полного оборота равен 360°, что соответствует 2pi радианам. Перевести градусы в радианы можно с помощью функции degToRad, а радианы в градусы — с помощью функции radToDeg.



Элементы выражений



Элементы выражений

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



Использование выражений



ГЛАВА 29. Использование выражений

Термин выражение применяется в тех случаях, когда речь идет о математическом выражении либо просто о формуле, по которой одни величины вычисляются через другие. Эти выражения могут быть простыми (как вычисление движения велосипеда, основанное на вращении педалей) и сложными (например, вычисление синусоидальных колебании лодки в море).

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

По сравнению с другими контроллерами Expression имеет неограниченные возможности, и о нем можно было бы написать целую книгу. В этой короткой главе рассматриваются основы создания выражений, проиллюстрированные несколькими примерами.



Интерфейс окна Expression Controller



Интерфейс окна Expression Controller

Контроллер Expression — это всего лишь один из многих контроллеров, используемых для автоматизации анимации. Он позволяет управлять преобразованиями объектов с помощью математических формул или выражений, которые можно применять к любым трекам объекта. В списке контроллеров Expression (в зависимости от трека, которому его необходимо присвоить) выглядит как Position Expression, Rotation Expression. Scale Expression, Float Expression и Point 3 Expression.

Прежде всего контроллер Expression необходимо назначить треку. Это можно сделать во вкладке Motion (Движение) или в диалоговом окне Track View (Просмотр трека). После назначения контроллера диалоговое окно Expression Controller появится автоматически. Для того чтобы отобразить диалоговое окно Expression Controller в любой другой момент, щелкните правой кнопкой мыши на треке и из появившегося контекстного меню выберите команду Properties (Свойства). Например, выберите объект сцены, откройте вкладку Motion (Движение) и выберите трек Position (Позиционирование). Затем щелкните на кнопке Assign Controller (Назначить контроллер), которая расположена в верхней части одноименной разворачивающейся панели, и выберите из списка контроллеров элемент Position Expression. Появится диалоговое окно Expression Controller (рис. 29.2).



Использование контроллера Expression



Использование контроллера Expression

С помощью выражений можно управлять различными преобразованиями объекта. Назначить преобразованию контроллер Expression можно в окне Track View или во вкладке Motion. Можно также использовать выражения для управления параметрами объекта (например, длина параллелепипеда) или свойствами материала (например, количество света, падающего на материал). Доспи ко всем этим параметра осуществляется с помощью диалогового окна Track View.



Операторы



Операторы

Оператор — это часть выражения, которая указывает, что нужно сделать с переменными. Например, оператор сложения указывает на то, что одно значение следует прибавить к другому. Операторы можно разделить на три группы. Базовые операторы — это стандартные математические действия, например сложение или умножение. Операторы этой группы приведены в табл. 29.2. Логические операторы сравнивают два значения и возвращают результат истина или ложь. Эта группа операторов представлена в табл. 29.3. Векторные операторы выполняют математические действия над векторами. Их описание вы найдете в табл. 29.4.



Преобразует значение угла из радианов



Описание

Синус

sin(i)
Вычисляет синус угла
Косинус

cos(i)
Вычисляет косинус угла
Тангенс

tan(i)
Вычисляет тангенс угла
Арксинус

asin(i)
Вычисляет арксинус числа
Арккосинус

acos(i)
Вычисляет арккосинус числа
Арктангенс

atan(i)
Вычисляет арктангенс числа
Гиперболический синус

hsin(i)
Вычисляет гиперболический синус числа
Гиперболический косинус

hcos(i)
Вычисляет гиперболический косинус числа
Гиперболический тангенс

htan(i)
Вычисляет гиперболический тангенс числа
Преобразование радианов в градусы

radToDeg(i)
Преобразует значение угла из радианов в градусы
Преобразование градусов в радианы

degToRad(i)
Преобразует значение угла из градусов в радианы
Округление сверху

ceil(i)
Округляет число к ближайшему целому, которое больше этого числа
Округление снизу

floor(i)
Округляет число к ближайшему целому, которое меньше этого числа
Натуральный логарифм (с основанием е)

ln(i)
Вычисляет натуральный логарифм числа
Десятичный логарифм

log(i)
Вычисляет десятичный логарифм числа
Экспонента

ехр(i)
Вычисляет экспоненту числа
Степень

pow(i, j )
Возводит число i в степень j
Квадратный корень

sqrt(i)
Вычисляет квадратный корень числа
Модуль

abs(i)
Вычисляет модуль числа
Минимум

min(i,j)
Возвращает меньшее из двух чисел
Максимум

max(i,j)
Возвращает большее из двух чисел
Остаток

mod(i,j)
Возвращает остаток от деления i на j
Если

if(i,j,k)
Если i не равно нулю, то возвращается значение j, иначе — значение к
Векторное если

vif (i,V,W)
То же, что и функция if, но для векторов
Длина вектора

length(V)
Вычисляет длину вектора
Векторная компонента

comp (V, i)
Возвращает i-ю координату вектора
Орт

unit(V)
Возвращает единичный вектор, направленный в одну сторону с v
Случайная точка

noise(i, j ,k)
Случайным образом задает точку в пространстве

Таблица 29.5. Функции

Описание переменных



Описание переменных

Круговое движение

[Radiusl*cos(360*S) , Radiusl*sin(360*S),0]

Radius1 — радиус орбиты

Эллиптическое движение

[Radiusl*cos(360*S), Radius2*sin(360*S),0]

Radius1 И Radius2 —радиусы эллиптического пути

Восходящее движение по спирали

[Radiusl*cos(360*S), Radiusl*sin(360*S), S*AscentSpeed]

Radius1 — радиус орбиты; AscentSpeed — скорость подъема объекта

Движение вперед и назад

[HalfDist*cos(360*S),0,0]

HalfDist — половина пройденного пути

Движение зигзагом

[0,ZigDist*mod(F/ZagFreq), AscentSpeed*F]

zigDist — расстояние, которое проходит объект, перед возвращением на указанный путь; ZagFreq — частота зигзагообразного движения; AscentSpeed — скорость движения объекта вдоль пути

Движение с ускорением

[Dist*sqrt(NT*Scale), 0, 0]

Dist — расстояние, которое проходит объект; Scale — продолжительность действия ускорения

Качение по оси Y

BallPos.x/Ball Radius

BallPos. x —линейное движение вдоль оси X; Ball Radius — радиус шара

Таблица 29.6. Примеры выражений



Определение переменных



Определение переменных

Переменная — это условное обозначение определенной величины. Например, обозначив через r радиус сферы, выражение "взять радиус сферы и умножить его на 2" можно упростить до "r умножить на 2".

Для того чтобы создать переменную, откройте диалоговое окно Expression Controller, введите в поле Name (Имя) имя переменной, в зависимости от ее типа установите переключатель Scalar (Скалярный) или Vector (Векторный) и щелкните на кнопке Create (Создать).

Созданная переменная появится в списке Scalars или Vectors. Чтобы удалить переменную, выделите ее в списке и щелкните на кнопке Delete (Удалить). В поле Tick Offset (Смещение тика) определяется величина временного сдвига, что позволяет задержать выполнение действия.

Каждую переменную необходимо назначить либо константе, либо контроллеру. Назначить переменную константе — это то же самое, что ввести в выражение значение константы. Константы всего лишь делают запись выражения более удобной. При щелчке на кнопке Assign to Controller (Назначить к контроллеру) появляется диалоговое окно Track View Pick (Выбор вида трека), изображенное на рис. 29.3. В этом окне можно выбрать трек, который будет присвоен переменной.



Отладка и вычисление выражений



Отладка и вычисление выражений

Для того чтобы просмотреть текущие значения всех переменных введенного в поле Expression выражения, щелкните на кнопке Debug (Отладка). Появится окно Expression Debug Window (Отладка выражения), показанное на рис. 29.5. В нем отображаются значения всех переменных, а также результат вычисления выражения. При перемещении бегунка Time Slider эти значения автоматически обновляются.



Построение выражения



Построение выражения

Выражение можно непосредственно ввести в поле Expression диалогового окна Expression Controller. Для того чтобы использовать в выражении какую-либо именованную переменную (из списков Scalars или Vectors), введите в поле Expression ее имя. Зарезервированные константы (подробнее о которых несколько позже), например F или NT, определять в группе Create Variables не нужно. При щелчке на кнопке Function List появляется список функций, которые можно использовать в выражении (рис. 29.4). Это окно предназначено только для просмотра списка функций: чтобы использовать функцию в выражении, необходимо ввести ее имя в поле Expression.



В 3ds max существует неписаное



Пример

Сложение

+

i+j

Вычитание

-

i-j

Отрицание

-

-i

Умножение

*

i*j

Деление

/

i/j

Возведение в степень

^ или **

i^j или i**j

Таблица 29.2. Базовые операторы


В 3ds max существует неписаное правило (т.е. необязательное к выполнению): для ввода скалярных переменных используют строчные символы, для ввода векторных переменных — прописные.
Порядок выполнения операторов называется операторным приоритетом. В первую очередь вычисляются операторы в круглых скобках. Если вы не помните, какое выражение вычисляется первым, поместите каждое из них в круглые скобки. Например, выражение (2+3) *4 равно 20, а 2+ (3*4) равно 14. Если выражение не содержит круглых скобок, а содержит только операторы, то оно выполняется слева на право, причем операторы умножения и деления имеют больший приоритет по сравнению с операторами сложения и вычитания.



возвращает 1, если хотя бы



Пример

Равно

=

i=j

Меньше

<

i<j

Больше

>

i>j

Меньше или равно

<=

i<=j

Больше или равно

>=

i>=j

Логическое или ( возвращает 1, если хотя бы одно утверждение верно)

|

i|j

Логическое и (возвращает 1, если верны оба утверждения)

&

i&j

Таблица 29.3. Логические операторы



которое по заданному аргументу возвращает



Пример

Компонента (Компонента х вектора V)
.
V.x
Векторное сложение
+
V+W
Векторное вычитание
-
V-W
Умножение на скаляр
*
i*V
Деление на скаляр
/
V?i
Скалярное произведение
*
V*W
Векторное произведение
x
VxW

Таблица 29.4. Векторные операторы
Функции
Функция — это такое мини-выражение, которое по заданному аргументу возвращает некоторое значение. Например, тригонометрическая функция синус, использующая в качестве аргумента угол, возвращает значение синуса этого угла. Функция синус выглядит следующим образом: Sin(). Например, если в диалоговом окне Expression Controller ввести Sin (45), а затем открыть диалоговое окно Debug, то значение выражения будет равно 0,707, что соответствует значению синуса угла 45°.


Для того чтобы отобразить полный список всех функций с объяснениями, щелкните на кнопке Function List (Список функций) в диалоговом окне Expression Controller (Контроллер выражений).
Функции, используемые для построения выражений, приведены в табл. 29.5.



Примеры выражений



Примеры выражений

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

Предположим, что к треку радиуса сферы применен контроллер Float Expression. Тогда для последовательного увеличения радиуса в соответствии с каждым следующим кадром анимации можно использовать такое выражение: initialRadius + F

С помощью тригонометрических функций можно получить гладкую дугу с центральным углом от 0 до 360°. Например, выражение для плавного увеличения радиуса сферы от 1 до 50 и уменьшения от 50 до 1 выглядит так:

50*sin(360*NT)

Чтобы заставить сферу двигаться зигзагами, можно использовать функцию mod. За счет этого сфера будет постепенно перемещаться, пока не достигнет определенного значения, а затем вернется в свое первоначальное положение. Итоговое выражение выглядит следующим образом:

[0,10*mod(F,20),10*F]

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

[100*sqrt(NT*2 00),10,10]

Создание сложных выражений требует более глубокого знания математики, но это вовсе не сложно. Чем больше вы будете работать с выражениями, тем проще вам будет с этим разобраться. Для начала воспользуйтесь примерами (табл. 29.6), которые для получения определенного движения объекта можно вводить непосредственно в диалоговом окне Expression Controller.



Работа с выражениями в числовых полях



Работа с выражениями в числовых полях

Диалоговое окно Expression Controller (Контроллер выражений), которому посвящена большая часть этой главы, далеко не единственный способ работы с выражениями. Выражения можно также вводить в обычных полях диалогового окна Numerical Expression Evaluator (Вычисление числовых выражений), показанного на рис. 29.1. Для доступа к этому окну щелкните в поле нужного параметра и нажмите комбинацию клавиш <Ctrl+N>.



В этой главе рассмотрены основы



Резюме

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

Диалоговое окно Numerical...



Рис. 29.1. Диалоговое окно Numerical Expression Evaluator позволяет оперировать выражениями для числовых полей

Для ввода выражений используется текстовая область диалотового окна Numerical Expression Evaluator; результат введенного выражения немедленно отображается в поле Result. Это поле обновляется сразу после ввода очередного выражения. Если при вводе выражения допущена ошибка, в поле Result ничего не отображается. Щелчок на кнопке Paste (Вставить) позволяет вставить результат выражения в поле выбранного параметра. Щелчок на кнопке Cancel (Отменить) закрывает диалоговое окно без каких-либо изменений в поле параметра.

С выражениями можно также работать в диалоговом окне Parameter Wiring (Передача параметров), которое рассматривается в главе 24, "Основы анимации".

В поле параметра можно вводить относительные значения, используя символ R и нужное значение. Например, если значение в поле Segments (Сегменты) объекта Sphere (Сфера) равно 32, то ввод выражения R20 изменит значение этого поля на 52, а ввод выражения R-20 — на 12.



С помощью диалогового...



Рис. 29.2. С помощью диалогового окна Expression Controller создаются выражения и определяются их результаты

В этом окне можно определять переменные и вводить выражения. Оно содержит четыре поля, в которых отображаются скалярные и векторные переменные, строятся выражения и вводятся описания этих выражений.



В диалоговом окне Track...



Рис. 29.3. В диалоговом окне Track View Pick отображаются все треки сиены. Треки, которые можно выбирать, выделены черным цветом

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



В диалоговом окне Function...



Рис. 29.4. В диалоговом окне Function List приведен список всех функций, которые можно использовать в выражениях

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



Выражение можно протестировать...



Рис. 29.5. Выражение можно протестировать с помощью окна Expression Debug Window

При щелчке на кнопке Evaluate (Вычислить), расположенной в диалоговом окне Expression Controller, результат выражения применяется к текущему сегменту кадров. Если в выражении допущена синтаксическая ошибка, то на экране появится предупреждающее сообщение, а в поле Expression будет отображена выполненная часть выражения. При замене контроллера Expression другим контроллером полученные с его помощью эффекты анимации станут недоступными.



Положение самолета...



Рис. 29.6. Положение самолета относительно оси Z определяется вращением джойстика вокруг оси X



Шарик надувается благодаря...



Рис. 29.7. Шарик надувается благодаря модификатору Push, которым управляет контроллер Expression



Диффузный цвет этого...



Рис. 29.8. Диффузный цвет этого объекта анимирован с помощью контроллера Expression

Прежде чем закончить с этим примером, рассмотрим более подробно используемое выражение. Это выражение оперирует величиной типа Point3, с помощью которой определяется количество красного, зеленого и синего цвета. Первая компонента этой величины отвечает за красный цвет. Поскольку в цветовой системе RGB желтый цвет состоит в равной степени из красного и зеленого, нам нужно, чтобы красный цвет был видимым в течение оставшихся двух третей от общей продолжительности анимации. Вам потребуется следующее выражение: if(NT>=.33,255,0)

Это значит, что, когда нормированное время перейдет за две трети суммарной продолжительности анимации, значение красного компонента станет равным 255, а до этого момента оно будет равно 0.

Вторая компонента величины типа Point3 отвечает за зеленый цвет. Зеленый цвет должен быть виден на протяжении первых двух третей анимации. Во второй трети в сочетании с красным он даст желтый цвет. Поэтому на месте второй компоненты величины Point3 используется выражение if(NT<.66,255,0)

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

Третья компонента величины типа Point3 отвечает за синий цвет. Но синий цвет не входит в состав ни зеленого, ни красного, ни желтого. Поэтому значение этой компоненты равно 0 в течение всей анимации.

Полное выражение (см. п. 4 упражнения) выглядит так: [if(NT>=.3 3,2 55,0), if(NT<.66,255, 0) ,0]



Скаляры



Скаляры

Скаляр — это величина, характеризуемая только числовым значением, например радиус сферы или длина параллелепипеда. Этот тип используется для треков, которым присвоен контроллер Float Expression. Все результирующие значения передаются назначенным параметрам объектов. У скаляров нет специфических форматов — это просто числа.



Сохранение и загрузка выражений



Сохранение и загрузка выражений

Для того чтобы сохранить выражение, щелкните на кнопке Save (Сохранить). Загрузить сохраненное ранее выражение можно, щелкнув на кнопке Load (Загрузить). Файлы выражений имеют расширение . XPR. Описание переменных в файлах выражений не сохраняется.



с материалами часто используется тип



Тип Point3

При работе с материалами часто используется тип под названием PointS. Величины такого типа представляют собой три целых числа, разделенных запятыми, в квадратных скобках. Каждое из этих чисел лежит в диапазоне от 0 до 255 и указывает на количество красного, зеленого и синего цвета в цвете материала.



Любое значение этого типа, выходящее за границы диапазона, автоматически устанавливается равным ближайшему допустимому значению. Например, если зеленому компоненту цвета ваше выражение присвоит значение 500, то оно будет приниматься равным 255.



Типы возвращаемых значений



Типы возвращаемых значений

Это типы переменных, возвращаемые трекам, которым присвоен контроллер выражений. Например, если треку Position присвоен контроллер Position Expression, то возвращаемым типом будет вектор (совокупность координат).

Объект и трек, которым присвоен контроллер выражений, отображены в строке заголовка диалогового окна Expression Controller.

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

Использующиеся в выражении переменные должны быть согласованы с типом результата. Например, контроллер управляет положением объекта. Поскольку положение задается тремя координатами, результат выражения должен быть вектором, при этом в выражении могут использоваться как скаляры, так и векторы. Если же тип переменной скалярный (например, радиус сферы), то ей нельзя присваивать вектор, так как из-за этого возникнет ошибка.



изменение размеров звезды



Упражнение: изменение размеров звезды

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

Чтобы увеличить размеры объекта Hedra (Правильный многогранник) посредством перетаскивания объекта Box (Параллелепипед), выполните ряд действий.

В папке Chapter Example Files на прилагаемом компакт-диске найдите файл Chap 29 . zip, распакуйте его и откройте файл Expanding star .max. В файле находятся два простых примитива: Box и Hedra. Перемещение объекта Box ограничено по оси X. Выделите объект Hedra и в главном меню программы выберите команду Graph Editors> Track View-Dope Sheet (Графические редакторы>Средство Track View-Монтажный стол). Найдите трек Radius (Радиус), который находится в иерархии Objects> Hedra01>Object(Hedra)>Radius, и присвойте ему контроллер Float Expression. Появится диалоговое окно Expression Controller. Создайте скалярную переменную initialRadius и векторную переменную boxPos. Для этого введите имена новых переменных в поле Name, выберите соответствующий переключатель (Scalar и Vector) и щелкните мышью на кнопке Create. Выберите в списке Scalars элемент initialRadius и щелкните на кнопке Assign to Constant. В единственном поле появившегося диалогового окна введите 10 и щелкните на кнопке ОК. В списке Vectors выберите элемент boxPos и щелкните на кнопке Assign to Controller. В появившемся диалоговом окне Track View Pick найдите трек объекта Box, который называется Position:Position XYZ (Objects>Box01>Transform), и щелкните на кнопке ОК. Удалите содержимое поля Expression и введите следующее выражение: initialRadius + abs(boxPos.x)/2    Щелкните на кнопке Debug и в появившемся диалоговом окне Expression Debug Window понаблюдайте, как изменяются значения переменных в соответствии с изменениями объектов сцены.

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



надувание воздушного шарика



Упражнение: надувание воздушного шарика

Наполнение шарика воздухом можно имитировать с помощью модификатора Push (Выталкивание). В этом упражнении воспользуемся моделью шарика, созданной компанией Zygote Media, и продемонстрируем, как с помощью контроллера Float Expression можно управлять параметрами этого модификатора.

Для того чтобы надуть шарик с помощью контроллера Float Expression, выполните ряд действий.

В папке Chapter Example Files на прилагаемом компакт-диске найдите файл Chap 29 . zip, распакуйте его и откройте файл Balloon and pump.max. В файле находятся созданный на основе примитивов насос и модель воздушного шарика, к которой применен модификатор Push.

Откройте окно Track View с помощью команды Graph Editors>Track View-Dope Sheet. Найдите и выделите трек Push Value, расположенный в ветви Objects>b3> Modified Object>Push>Push Value. Выделив трек Push Value, щелкните на кнопке Assign Controller, в диалоговом окне Assign Float Controller выделите контроллер Float Expression и щелкните на кнопке ОК. Появится диалоговое окно Expression Controller.

В поле Expression диалогового окна Expression Controller вместо значения О введите 2*NT.

Чтобы увидеть результат, щелкните на кнопке Debug. He закрывая окно Expression Debug Window, перетащите бегунок Time Slider и посмотрите, как при этом надувается шарик.

Если в выражении используется такой параметр, как, например, Radius (Радиус), вы не сможете во вкладке Modify изменить его значение вручную.

На рис. 29.7 показан воздушный шарик, надуваемый с помощью насоса.



управление моделью самолета



Упражнение: управление моделью самолета

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

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

В папке Chapter Example Files на прилагаемом компакт-диске найдите файл Chap 29 . zip, распакуйте его и откройте файл Joysticks controlling airplane, max. В файле вы увидите модель самолета, предоставленную компанией Viewpoint Datalabs, и два джойстика, созданные на основе примитивов. Каждый из джойстиков отклоняется только вдоль одной оси. Выделите модель самолета, активизируйте вкладку Motion и щелкните на кнопке Parameters. В разворачивающейся панели Assign Controller выделите трек Position и щелкните на кнопке Assign Controller. Из списка окна Assign Position Controller выберите элемент Position Expression и щелкните на кнопке ОК. Откроется диалоговое окно Expression Controller. В поле Name диалогового окна Expression Controller введите имя joystickRot0l. установите переключатель Scalar (Скалярная) и щелкните на кнопке Create. Щелкните на кнопке Assign to Controller, в появившемся диалоговом окне Track View Pick выделите трек Local X Rotation (в иерархическом списке этот трек можно найти следующим образом: Objects>JoystickOI >Transform:Position/Rotation/ScaleoRotation:Local Bezier Float) и щелкните на кнопке ОК. Затем создайте другую скалярную переменную по именем joystickRot02 и присвойте ее треку Local Y Rotation объекта Joystick02. В поле Expression должно появиться значение [150,0,50]. Вместо него введите в поле выражение [50+(2*radToDeg(joystickRot02)), 0,50+(2*radToDeg(JoysUckRot01))]. Для просмотра полученных значения щелкните на кнопке Debug (Отладка). Не закрывая окно Expression Debug Window (Окно отладки выражений), щелкните на кнопке Select and Rotate (Выбрать и повернуть) основной панели инструментов и поверните один из джойстиков в окне проекции. Убедитесь в том, что самолет перемещается в окне проекции, а в окне Expression Debug Window обновляются соответствующие значения. Если выражение составлено верно, закройте окна Expression Debug Window и Expression Controller, щелкнув на кнопке Close в каждом из них.

При щелчке на кнопке Debug выражение автоматически применяется к объектам. Если в поле Expression окна Expression Controller сделаны какие-либо изменения, необходимо закрыть диалоговое окно Expression Debug Window и затем открыть его вновь.

Если применить к джойстику преобразование вращения вокруг оси X, то самолет будет автоматически подниматься или снижаться. На рис. 29.6 показан управляемый джойстиками самолет.



управление светофором



Упражнение: управление светофором

В этом примере, изменяя цвет сферы с помощью функции if, попытаемся имитировать работу светофора. Для этого применим контроллер Expression к треку цвета Diffuse. Наша задача состоит в том, чтобы каждую третью часть времени анимации светофор показывал попеременно зеленый, желтый и красный свет.

Для имитации светофора с помощью контроллера Expression выполните ряд действий.

В папке Chapter Example Files на прилагаемом компакт-диске найдите файл Chap 29.zip, распакуйте его и откройте файл Stoplight .max. В файле находится модель светофора, созданная на основе примитивов. К одной из сфер применен материал зеленого цвета. В главном меню программы выберите команду Graph Editors>Track View-Dope Sheet и в появившемся окне выделите трек Diffuse Color. Этот трек находится в иерархии Objects>Sphere03>MateriaWI>Shader Basic Parameters. Щелкните на кнопке Assign Controller. Из списка окна Assign Point3 Controller выберите элемент Point3 Expression и щелкните на кнопке ОК. Таким образом треку Diffuse Color будет назначен контроллер Point3 Expression. Щелкните правой кнопкой мыши на треке Diffuse Color и выберите из контекстного меню команду Properties. Появится диалоговое окно Expression Controller. Введите в поле Expression следующее выражение: [if(NT>=33,255,0), if(NT<-66,255,0),0]. Затем щелкните на кнопке Evaluate и закройте диалоговое окно Expression Controller. Чтобы увидеть результат, щелкните на кнопке Play Animation.

На рис. 29.8 показана модель светофора и окно Track View-Dope Sheet для этой модели.



Векторы



Векторы

Если контроллер Expression управляет преобразованием положения, то в поле Expression диалогового окна Expression Controller можно увидеть три значения, разделенных запятыми, в квадратных скобках. Эти три значения составляют вектор, причем каждое отдельное значение — это длина проекции вектора на соответствующую координатную ось. Для ссыпки на какую-либо составляющую координатной оси необходимо после имени переменной поставить точку, а затем указать саму ось. Предположим, что существует векторная переменная boxPosition, тогда для ссылки на ее составляющую по оси X необходимо ввести boxPosition. х. Значения всех составляющих в действительности являются скалярами.



Зарезервированные константы



Зарезервированные константы

Существует ряд зарезервированных констант программы 3ds max 5, описание которых приведено в табл. 29.1. При вводе таких констант обращайте внимание на регистр.



Значение



Значение

Число пи

pi

3,14159

Основание натурального логарифма

e

2,71828

Количество отметок в секунде

TPS

4800

Номер кадра

F

Номер текущего кадра

Нормированное время

NT

Общее время активного сегмента кадров

Секунды

s

Количество секунд (вычисляется на основе частоты кадров)

Отметки

T

Количество отметок (вычисляется на основе частоты кадров), где 1 секунда равна 4 800 отметкам

Таблица 29.1 Зарезервированные константы

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