Урок второй. Настройка автомобиля. Float Script.

Категория урока: 
Анимация

 

Решений для анимации колес автомобиля существует много: от ручной анимации (что не приемлемо при большой по времени сцене и нескольких машин) до применения специальных программ в виде скриптов. В этом уроке вращение колес осуществлено довольно простым способом - с помощью контролера Float Script.
 
Использую авто из первого урока. Все последующие действия затем применяются для каждого колеса отдельно или его можно будет просто скопировать.
 
Например, для начала задам вращения колеса для движения по оси Y. Посмотрю нужную ось вращения колеса. Для этого включу инструмент Select and Rotate, переключусь на локальную систему координат и выберу колесо. Во вьпорте вижу, что нужно вращать по красному кругу инструмента – это ось X.
 
Далее перехожу в свиток Assign Controller панели Motion и вместо X Rotation контролера Rotation устанавливаю Float Script. Для этого надо выбрать в списке соответствующую запись, нажать на кнопку Assign Controller и из появившегося списка указать Float Script. Откроется окно, которое опишу подробнее.

 
В левой части окна в области Create Variable создаются переменные значения. Variables – список созданных значений. С помощью кнопок в левой нижней части окна созданным переменным значениям можно назначать константы (Assign Constant), привязывать значения контролеров (Assign Controller), привязывать значение записей (осей) контролеров (Assign Track), назначать обращение к объектам (Assign Node).
 
В правой части в области Expression пишется сам скрипт. Причем последнее значение скрипта (скрипт читается по строкам с верху) берется в качестве исполняемого значения для данного Float Script.

 
Теперь становится ясно, что для данного вращения достаточно создать переменную, назначить ей запись контроллера перемещения авто по оси Y и указать в поле скрипта с поправкой на радиус колеса. Что и сделаю.
 
Создаю переменную ypos – пишу ypos в поле Name и жму Create. Выбираю ее в поле Variables и нажимаю Assign Track и в списке указываю Y Position контролера Position объекта Point01 (главный объект в иерархии привязок автомобиля).

 
Далее пишу простую запись в поле Expression:
ypos/0.315
 
Где число 0.315 радиус колеса. И нажимаю Evaluate (вычислить).
 
Теперь при перемещении авто за объект управления Point01  по оси Y колесо будет вращаться с учетом изменяемого расстояния, но пока вращение колеса еще не зависит от того, в какую сторону оси Y «смотрит» автомобиль. Если его повернуть на 180 градусов, то можно убедиться, что колесо крутится в обратную сторону. Логично предположить, что это зависит от угла поворота Point01 по оси Z.
 
Добавлю еще одну переменную – zrotate. Ей назначу запись Z Rotation контролера Rotation объекта Point01. И добавлю запись в скрипт:
If cos(zrotate)>0 then ypos=ypos*(-1)
 
If -условие «если». 
 
Cos(zrotate)>0 -косинус угла zrotate больше нуля.
Косинус принимает отрицательные значения при углах во 2 и 3 четвертях тригонометрической окружности, т.е. при значениях угла zrotate, равных от 90 до 270 градусов, что соответствует повороту машины в другую сторону.
Здесь - меньше или больше нуля, и выбор углов через Cos или Sin - зависит от изначального положения настраиваемой машины.
 
Then – условие «тогда выполнить».
 
ypos=ypos*(-1) – ypos меняются на отрицательные значения для вращения колеса в другую сторону.
 
Теперь при передвижении  по оси Y колесо как будто привязано к поверхности. Сделаю тоже самое для оси перемещения X. Создам xpos и допишу скрипт.
 
В итоге получилось всего три строчки:
If cos(zrotate)>0 then ypos=ypos*(-1)
If sin(zrotate)<0 then xpos=xpos*(-1)
(xpos+ypos)/0.315

 
Теперь можно легко анимировать перемещения автомобиля за Point01, перейдя в локальный режим инструмента Move, и не задумываться о соответствии вращения колес. Причем, если понадобится добавить ручную анимацию(например, пробуксовку), то достаточно добавить на колесо еще один контролер на вращения и сделать его активным. После чего можно добавлять к вращению колеса ручную анимацию. Или можно временно отключать вращения колеса анимированием параметра веса контролера. Для этого контролер Rotation (со скриптом) должен находиться в списке контролеров на вращение – Rotation List (добавляется так же, как и другие контролеры).

 
Прикреплена сцена с настроенной машиной в формате 3ds Max 2008. 

 

Файл со сценой урока: 

Комментарии

exloki 3d аватар

Спасибо) нужная вещь...

dnluser 3d аватар

Опубликуйте версию для 3ds max 7.

Kroterk 3d аватар

Реально полезно, благодарю.

turbo 3d аватар

Ага, кул

Turbo

KOcccTya 3d аватар

спасибо =))

PROTECT 3d аватар

best