Не так страшен черт

Не так страшен черт:

Просматривая сообщения на различных форумах, посвященных программе 3DS MAX, можно отметить очень низкий интерес к написанию скриптов на языке MAXScript. На фоне того, как широко используются скрипты в MAYA, причина сложившейся ситуации приобретает дополнительный интерес. И, как мне кажется, она не в недостатке навыков программирования у компьютерных художников, но это тема отдельного разговора:

В данном уроке на примере анимации зубчатой передачи рассматривается применение скрипт контроллеров традиционным методом с помощью окна Track View и с использованием MAXScript.

Загрузите сцену reducer.max и просмотрите анимацию.

Сцена содержит колесо и шестерню, делительный диаметр которых соответственно 30 и 20. Предположим, что Alpha - это угол поворота колеса, тогда угол поворота шестерни равен - Alpha * 3.0 / 2.0. Это значение необходимо перевести в радианы, умножив на (pi / 180.0).

Давайте добавим анимацию для шестерни:

- нажмите кнопку Open Track View в панели Main Tool Bar, после чего откроется окно Tracks

- выделите трек Rotation объекта LargerGear, нажмите кнопку Assign Controller и назначьте ему контроллер Local Euler XYZ

- назначьте треку Rotation объекта SmallerGear контроллер Local Euler XYZ

Обратите внимание на значение 9.0 в треке Local Z Rotation, позднее оно будет использовано в качестве поправки, которая появляется из-за того, что шестерня после создания была повернута вокруг оси Z

- назначьте треку Local Z Rotation объекта SmallerGear контроллер Float Script

- щелкните правой кнопкой мыши трек Local Z Rotation и в появившемся меню выберите Properties

- в появившемся окне Script Controller введите следующую строку:

(-$LargerGear.rotation.controller.Local_Z_Rotation.controller.value * 3.0 / 2.0 + 9.0) * pi / 180.0

- закройте окна Script Controller и Tracks

- просмотрите анимацию

Приведенную выше последовательность действий можно записать на языке MAXScript следующим образом:

-- назначаем контроллер Local Euler XYZ трекам Rotation объектов LargerGear и SmallerGear
$LargerGear.rotation.controller = Local_Euler_XYZ ()
$SmallerGear.rotation.controller = Local_Euler_XYZ ()

-- назначаем треку Local Z Rotation объекта SmallerGear контроллер Float Script $SmallerGear.rotation.controller.Local_Z_Rotation.controller = float_script ()

-- изменяем значение контроллера Float Script в треке Local Z Rotation объекта SmallerGear
$SmallerGear.rotation.controller.Local_Z_Rotation.controller.script = \
"(-$LargerGear.rotation.controller.Local_Z_Rotation.controller.value \
* 3.0 / 2.0 + 9.0) * pi / 180.0"

Затратив немного времени на добавление элементов управления для указания объектов, передаточного отношения, поправки, направления, можно получить удобный инструмент для анимации различного вида передач (зубчатых, ременных, цепных и т.д.). Подробный урок по элементам управления можно найти в разделе уроков, а полную версию скрипта - на моей страничке, посвященной MAXScript. Замечу, что с его помощью можно создавать многоступенчатые передачи.

Надеюсь, что эта статья немного приоткроет дверь в интересный и загадочный мир MAXScript.

0
RENDER.RU