Не так страшен черт
Не так страшен черт:
Просматривая сообщения на различных форумах, посвященных программе 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.