Компьютерная графика
на домашней странице Михаила Мартыновского aka MikeMS

Риг вращения колеса

Урок
09.11.2009 г.

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

В 3d Max создайте или выберете ваше колесо. Добавим ему модификатор Attribute Holder и создадим параметр который будет отвечать за скорость вращения и который можно будет в дальнейшем проанимировать. Разумеется для задания скорости можно использовать любой другой параметр, например Value у слайдера или использовать к примеру положение объекта по какой-либо оси... тут уже выбор за вами.

На панели Motion, закладка Parameters, свиток Assign Controller выбирите нужную ось вращения и назначьте ей Float Script Controller. Также можно сделать это через Track View.

Наше выражение будет выглядеть следующим образом:


radius = 32 --Radius of our wheel (in cm)
rSum = 0 --Reset to 0 (sum of wheel rotations up to current frame)
c = 2 * pi * radius --Wheel length of circumference

for f = 0 to currentTime do
(
   v = at time f $Wheel.AttributeHolder.Wheel_Speed --Value of speed at frame f (replace with Driver attribute)
   z = (((v * 100000)/3600) / frameRate) / c --Km/h translates in cm/s, and then into rotations/frame
   rSum = rSum + z --Sum of wheel rotations up to current frame
)

DegToRad(rSum*360) --Result (in radiants)

А теперь разберём его и посмотрим что он делает:

radius — как и следует из названия здесь мы задаём радиус нашего колеса. Чем больше колесо, тем медленнее оно будет вращаться. Задаём это значение, для удобства, в сантиметрах.

rSum — это будет суммарная величина вращения колеса к текущему кадру. Пока просто сбросим в 0.

c — длина окружности, вычисляется исходя из радиуса нашего колеса.

Дальше у нас идёт цикл от ноля до номера текущего кадра, в котором мы вычисляем на сколько колесо успело прокрутиться к текущему времени. Тут стоит заметить, что если мы уже в готовой, анимированной сцене изменим количество кадров в секунду, то это "выражение" автоматически учтёт это.

v = at time f $Wheel.AttributeHolder.Wheel_Speed — смотрим и задаём переменной v скорость которая была в кадре f у параметра Wheel Speed нашего колеса. Более подробно об этом можно почитать в справке к MAX Script.

Ну и последняя строчка — мы переводим кол-во оборотов колеса в радианы чтобы колесо повернулось на корректную величину.