Linkfeedator

Риггинг автомобиля

Дата: 28.05.2011 г.
E-mail
(0 Голосов)





Странно, но по этой теме в нете недостаточно информации. А нам очень захотелось разобраться с риггингом, основанном на реакторе. Ну вроде разобрался...)) Параллельно делаю свой первый 3d-car, вот на нем по-настоящему и опробуем, но чуть позже, а пока работа с "болванкой".


По-моему результат получился довольно приемлемый))





Кузов – body (1шт)
Колеса – wheels (4шт)
Элементы подвески – axis (4шт)
Элементы механизма поворота - rudder (2шт)
Располагаем, центруем и получаем примерно такой результат.



Для избежания ошибок, которые могут возникнуть в дальнейшем при работе с reactor, необходимо отцентровать все внутренние координаты объектов (pivot) и направить их в соответствии с основными координатами 3ds Max.




2. Создание и назначение элементов reactor


Кузов - подвеска
Как было написано ранее кузов с подвеской должен соединяться инертно, т.е. пружинить. Выберем элемент reactor Spring (пружина), далее назначаем в опциях пружины (вкладка модификаторов): Spring properties -> Objects -> Parent - body, Spring properties -> Objects -> Child - соответствующая подвеска (axis). Нажимаем Spring properties -> Objects -> Align Spaces To: Child Body, щелкаем по Spring в разделе модификаторов, раскрываем содержимое, выбираем Parent Space и мышкой тянем конец пружины вдоль оси Z примерно до середины кузова (body) по высоте. Нажимаем Spring properties -> Dynamic properties -> Rest Length ->set, чтоб зафиксировать положение пружины. При этом верхний и нижний конец пружины расположены друг над другом!





Повторяем действия для каждого элемента подвески (всего 4 пружины).
Но наличие одних только пружин недостаточно для устойчивой конструкции, поэтому применим реактор Prismatic Constraint для вертикального взаимодействия кузова с подвеской, то есть инертные движения кузова будут осуществляться только по вертикали, что и обеспечивает Prismatic Constraint.
Выберем элемент reactor Prismatic Constraint, далее назначаем в опциях элемента (вкладка модификаторов): Properties -> Parent - body, Properties -> Child - соответствующая подвеска (axis). Нажимаем Properties -> Align Spaces To: Child Body. Нажимаем Properties -> Limited. Устанавливаем Min Limit -0,2m, Max Limit 0,2m.





Повторяем действия для каждого элемента подвески (всего 4 элемента Prismatic Constraint).
Результат должен выглядеть как на рисунке. Если оси Prismatic Constraint не совпадают с изображенными на рисунке, необходимо щелкнуть по Prismatic в разделе модификаторов, раскрыть содержимое, выбрать Parent Space и Child Space и вручную развернуть оси.






Подвеска – механизм поворота
Пришло время подсоединить к подвеске механизм поворота колес (rudder). Колеса должны поворачиваться в горизонтальной плоскости, для этого используем reactor Hinge Constraint. Выберем элемент reactor Hinge Constraint, далее назначаем в опциях элемента (вкладка модификаторов): Properties -> Parent - axis, Properties -> Сhild – соответствующий «поворотник» (rudder). Нажимаем Properties -> Align Spaces To: Child Body. Ставим галочку Properties -> Limited.





Повторяем действия для следующего элемента механизма поворота (всего 2 Hinge Constraint).
Результат должен выглядеть как на рисунке. Если оси Hinge Constraint не совпадают с изображенными на рисунке, необходимо щелкнуть по Hinge в разделе модификаторов, раскрыть содержимое, выбрать Parent Space и Child Space и вручную развернуть оси.



Поворот колес
Колеса, а именно элементы механизма поворота (rudder) будут поворачиваться под воздействием reactor Motor. Добавим два мотора к левому и правому «поворотнику» (rudder). Выберем элемент reactor Motor, далее назначаем в опциях элемента (вкладка модификаторов): Properties -> Rigid Body – соответствующий rudder, Rotation Axis – Z





Созданные Hinge Constraint обеспечивают движение «поворотников» только в горизонтальной плоскости, поэтому ось Motor должна быть направлена вверх по оси Z, чтобы поворотники могли беспрепятственно поворачиваться.

Соединение колес
Передние колеса соединяем с механизмом поворота, а задние с подвеской. Для этого используем Car-Wheel Constraint. Для передних колес в Car-Wheel Constraint (вкладка модификаторов): Properties -> Parent - соответствующий «поворотник» (rudder), Properties -> Child – соответствующее колесо (wheel), для задних Parent – соответствующий элемент подвески (axis). Нажимаем Car-Wheel Constraint -> Properties -> Align Spaces To: Child Body





Результат должен выглядеть как на рисунке. Если оси Car-Wheel Constraint не совпадают с изображенными на рисунке, необходимо щелкнуть по Car-Wheel Constraint в разделе модификаторов, раскрыть содержимое, выбрать Parent Space и Child Space и вручную развернуть оси.

Основной мотор
Задние колеса будут поворачиваться под воздействием reactor Motor. Добавим два мотора к левому и правому заднему колесу. Выберем элемент reactor Motor, далее назначаем в опциях элемента (вкладка модификаторов): Properties -> Rigid Body – wheel, Rotation Axis – X.
Ось Motor должна быть направлена по оси X
И Motor и Car-Wheel Constraint имеют стрелки направления вращения! При создании модели требуется обратить внимание, чтобы направления стрелок вращения Motor и Car-Wheel не противоречили друг другу!






3. Настройка RBCollection и CSolver


Итак, модель автомобиля создана, элементы реактора на своих местах, теперь пора «оживить» наше авто. Создадим плоскость (пол или поверхность, на которой будем испытывать авто) ниже автомобиля, так чтоб был небольшой просвет между колесами и плоскостью.



Добавим в сцену Rigid Body Collection и назначим rigid bodies. Для этого выделим RBCollection и во вкладке модификаторов RBCollection Properties -> add. В появившемся окне выбираем кузов, колеса, элементы подвески, элементы механизма поворота колес (имеются ввиду геометрические объекты, а не элементы reactor!!!) и обязательно добавляем созданную поверхность.



Далее переходим во вкладку Utilities, выбираем reactor и настраиваем reactor как на рисунке (подразумевается метрическая система измерения!).



Открываем вкладку reactor -> Collisions нажимаем Define collision pairs. В появившемся окне необходимо отключить все взаимодействия (collisions) между элементами сцены, оставив только их взаимодействие с полом. Во вкладке Properties указажите массу объектов:
Кузов - 50
Колеса – 10
Элементы подвески – 10
Элементы механизма поворота – 10
Пол - 0
Friction (трение) везде – 1
Simulation Geometry – Concave Mesh

Добавим в сцену Constraint Solver и назначим constraints. Для этого выделим CSolver и во вкладке модификаторов RBCollection Properties -> RBCollection укажем созданную RBCollection1. Нажмем Properties -> add. В появившемся окне выбираем CarWheel, Prismatic, Hinge. Обязательно установим Deactivation Threshold на 0!




4. Первая анимация


Пора ставить нашу модель на колеса! Открываем вкладку Utilities, выбираем Reactor -> Preview&Animation, указываем начальный и конечный кадр анимации (0 - 100 например) и нажимаем Preview in Window. В появившемся окне видим как модель, плавно амортизируя, опускается на пол. Ура! Большая часть задачи выполнена!! Теперь необходимо запустить моторы задних колес, а передними моторами будем регулировать "поворот руля". Все это можно делать и вручную, выделяя нужные элементы и своевременно меняя их настройки, но проще написать небольшой скрипт и упростить управление транспортным средством.


5. Немного скриптинга


Выбираем MaxScript -> New Script, появляется окно редактора MaxScript. Не буду вдаваться в особенности языка, просто опишу рассматриваемый пример. Итак, создадим окно управления, содержащее 2 раздела ("управление рулем" и "управление скоростью"). Для этого добавим в окно редактора MaxScript строки:

CarRig = newRolloutFloater "CarRig script" 300 330
addRollout rudder_control CarRig
addRollout speed_control CarRig

Раздел "управление рулем" будет контролировать угол поворота колес и скорость поворота, а также блокировку колес в прямом положении.

rollout rudder_control "rudder control" ////раздел управления рулем
(
slider wheelangle "wheel angle (right--center--left)" orient:#horizontal ticks:6 range:[-15,15,0] type:#integer ////бегунок контроля угла поворота колес
on wheelangle changed val do
(
$Hinge_r.minlimitangle = val-15 ////задаем мин и макс угол поворота колеса для
$Hinge_r.maxlimitangle = val +15 ////каждого Hinge
$Hinge_l.minlimitangle = val-15
$Hinge_l.maxlimitangle = val +15
)

slider rudderangspeed "rudder ang speed (right----center----left)" orient:#horizontal ticks:10 range:[-5,5,0] type:#integer ////бегунок контроля угловой скорости
on rudderangspeed changed val do
(
$Motor_ridder_r.angularspeed =val ////задаем угловую скорость для каждого мотора
$Motor_ridder_l.angularspeed=val
)

spinner ruddergain "rudder Gain" range:[0,10,0] type:#integer
on ruddergain changed val do ////поле выбора коэфф-та нарастания/убывания угловой скорости
(
$Motor_ridder_r.gain= val
$Motor_ridder_l.gain=val
)

checkbutton straightonly "straight only" checked:false align:#left
on straightonly changed state do ////кнопка движения прямо
if state == on
then
(
$Hinge_r.limitfriction = 1000
$Hinge_l.limitfriction = 1000

$Motor_ridder_r.disabled = true
$Motor_ridder_l.disabled = true
)
else
(
$Hinge_r.limitfriction = 0
$Hinge_l.limitfriction = 0

$Motor_ridder_r.disabled = false
$Motor_ridder_l.disabled = false
)
)


Раздел "управление скоростью" будет контролировать скорость авто.

rollout speed_control "speed control" ////раздел управления скоростью
(
slider speed "speed (back-stop-----forward)" orient:#horizontal ticks:8 range:[-10,30,0] type:#integer ////бегунок контроля скорости вращения задних колес
on speed changed val do
(
$Motor_r.angularspeed =val
$Motor_l.angularspeed=val
)

spinner speedgain "speed Gain" range:[0,20,0] type:#integer
on speedgain changed val do ////поле выбора коэфф-та нарастания/убывания скорости авто
(
$Motor_r.gain= val
$Motor_l.gain=val
)

checkbutton stop "stop"checked:false align:#left
on stop changed state do ////кнопка остановки/запуска мотора задних колес
if state == on
then
(
$Motor_r.disabled = true
$Motor_l.disabled = true
)
else
(
$Motor_r.disabled = false
$Motor_l.disabled = false
)
)


Полный текст скрипта:

rollout rudder_control "rudder control"
(


slider wheelangle "wheel angle (right--center--left)" orient:#horizontal ticks:6 range:[-15,15,0] type:#integer
on wheelangle changed val do
(
$Hinge_r.maxlimitangle = val +15
$Hinge_l.minlimitangle = val-15
$Hinge_l.maxlimitangle = val +15
)

slider rudderangspeed "rudder ang speed (right----center----left)" orient:#horizontal ticks:10 range:[-5,5,0] type:#integer
on rudderangspeed changed val do
(
$Motor_ridder_r.angularspeed =val
$Motor_ridder_l.angularspeed=val
)

spinner ruddergain "rudder Gain" range:[0,10,0] type:#integer
on ruddergain changed val do
(
$Motor_ridder_r.gain= val
$Motor_ridder_l.gain=val
)

checkbutton straightonly "straight only" checked:false align:#left
on straightonly changed state do
if state == on
then
(
$Hinge_r.limitfriction = 1000
$Hinge_l.limitfriction = 1000

$Motor_ridder_r.disabled = true
$Motor_ridder_l.disabled = true
)
else
(
$Hinge_r.limitfriction = 0
$Hinge_l.limitfriction = 0

$Motor_ridder_r.disabled = false
$Motor_ridder_l.disabled = false
)
)

rollout speed_control "speed control"
(
slider speed "speed (back-stop-----forward)" orient:#horizontal ticks:8 range:[-10,30,0] type:#integer
on speed changed val do
(
$Motor_r.angularspeed =val
$Motor_l.angularspeed=val
)

spinner speedgain "speed Gain" range:[0,20,0] type:#integer
on speedgain changed val do
(
$Motor_r.gain= val
$Motor_l.gain=val
)

checkbutton stop "stop"checked:false align:#left
on stop changed state do
if state == on
then
(
$Motor_r.disabled = true
$Motor_l.disabled = true
)
else
(
$Motor_r.disabled = false
$Motor_l.disabled = false
)
)
---------------------------------------------------------------------------
CarRig = newRolloutFloater "CarRig script" 300 330
addRollout rudder_control CarRig
addRollout speed_control CarRig

Сохраняем скрипт.


6. Двигатель, заводись!


Запускаем MaxScript -> Open Script, выбираем созданный скрипт, появляется окно управления.



Делаем нужные нам настройки, устанавливаем интервал, запускаем просмотр в окне, если все нравится, создаем анимацию (Create Animation). Для плавности движения авто требуется чтобы следующий интервал, хотя бы на один кадр захватывал предыдущий (например, 0 - 100 - авто едет прямо, 99 - 200 - авто начинает поворачивать, 199 - 250 - авто снижает скорость до нуля).

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

-------------------------------------------------------------------------
------------------------------english text-------------------------------

In this lesson we`ll consider creation process of the car model simulating dynamics (car rigging), and also we will write a script (MaxScript) for management of the created model. Car rigging is based on 3dsmax reactor. i used Autodesk 3ds Max 2009.
This lesson is calculated on base knowledge of geometrical objects construction and work with reactor in 3ds Max.Functionality of reactor elements and maxscript bases won't considered here.
First its necessary to explain that our model is a body, wheels, a suspension bracket and the mechanism of forward wheels turn. The body is connected to a suspension bracket inertly, a suspension bracket with wheels – hard connection . The turn mechanism is connected to forward wheels, the motor is connected to back wheels.




1. Creation of cars elements.


create 1 box 4х1,5м – a body. create 4 cylinders in radius 0,4м (32 sides) – wheels. create 6 boxes 0,2м – 4 boxes is a suspension bracket, 2 boxes – the turn mechanism. Everything simple)).







For avoidance of errors which can arise further at work with reactor, it is necessary to center all internal coordinates of objects (pivot) and to direct them according to the basic coordinates.




2. Creation and appointment of reactor elements

Body - a suspension bracket
body with a suspension bracket should to incorporate inertly, to spring. Choose reactor element Spring, further appoint in spring options (a tab of modifiers): Spring properties-> Objects-> Parent - body, Spring properties-> Objects-> Child - a corresponding suspension bracket (axis). Press Spring properties-> Objects-> Align Spaces To: Child Body, click on Spring in section of modifiers, then open contents, choose Parent Space and pull the end of a spring along axis Z approximately to the body middle on height. Press Spring properties-> Dynamic properties-> Rest Length-> set to fix spring position. the top and bottom end of a spring should located above each other!





Repeat actions for each element of a suspension bracket (only 4 springs).
But presence of springs only not enough for a steady design, therefore apply reactor Prismatic Constraint to vertical interaction of a body with a suspension bracket. inert movements of a body will be carried out only on a vertical position, as provides Prismatic Constraint.
Let's choose an element reactor Prismatic Constraint, further appoint in element options (a tab of modifiers): Properties-> Parent - body, Properties-> Child - a corresponding suspension bracket (axis). Press Properties-> Align Spaces To: Child Body. Press Properties-> Limited. We establish Min Limit-0,2m, Max Limit 0,2m.





Repeat actions for each element of a suspension bracket (only 4 elements Prismatic Constraints).
The result should look as in pict. If Prismatic Constraint axes don't coincide with represented on pict, it is necessary to click on Prismatic in section of modifiers, to open contents, to choose Parent Space and Child Space and manually develop axes.






Suspension bracket – the turn mechanism

its time to connect a suspension bracket with the mechanism of turn of wheels (rudder). Wheels should turn in a horizontal plane, for this purpose used reactor Hinge Constraint. We will choose an element reactor Hinge Constraint, further we appoint in element options (a tab of modifiers): Properties-> Parent - axis, Properties-> Сhild – corresponding wheel turn mechanism (rudder). We press Properties-> Align Spaces To: Child Body. We Tick off Properties-> Limited.





Repeat actions for a following element of the turn mechanism (only 2 Hinge Constraints).
The result should look as in pict. If axes Hinge Constraint don't coincide with represented on pict, it is necessary to click on Hinge in section of modifiers, to open contents, to choose Parent Space and Child Space and manually develop axes.



Turn of wheels
Wheels, elements of the turn mechanism (rudder) will turn under influence reactor Motor. Add two motors to left and right rotate (rudder). Choose an element reactor Motor, appoint in element options (a tab of modifiers): Properties-> Rigid Body – corresponding rudder, Rotation Axis – Z





Created Hinge Constraint provide rotation in a horizontal plane only, therefore axis Motor should be directed upwards on axis Z that turn mech could turn free.

Connection of wheels
Forward wheels is connected to the turn mechanism, and back with a suspension bracket. For this purpose used Car-Wheel Constraint. For forward wheels in Car-Wheel Constraint (a tab of modifiers): Properties-> Parent - corresponding rotate mech (rudder), Properties-> Child – a corresponding wheel (wheel), for back Parent – a corresponding element of a suspension bracket (axis). We press Car-Wheel Constraint-> Properties-> Align Spaces To: Child Body





The result should look as in pict. If axes Car-Wheel Constraint don't coincide with represented on pict, it is necessary to click on Car-Wheel Constraint in section of modifiers, to open contents, to choose Parent Space and Child Space and manually develop axes.

The basic motor
Back wheels will turn under influence Motor reactor. Add two motors to the left and right back wheel. Choose an element reactor Motor, appoint in element options (a tab of modifiers): Properties-> Rigid Body – wheel, Rotation Axis – X.
Axis Motor should be directed on axis X
Both Motor and Car-Wheel Constraint have arrows of a rotate direction! At model creation it is required to pay attention, that directions of Motor and Car-Wheel rotation arrows didn't contradict each other!






3. Adjustment RBCollection and CSolver3.


So, the car model is created, reactor elements on the places, its time to make our car "alive". Create a plane (the floor or a surface on which we'll test a car) below the car, so that was a small gleam between wheels and a plane.



add in scene Rigid Body Collection and appoint rigid bodies. For this purpose select RBCollection and in a tab of modifiers RBCollection Properties-> add. In the appeared window choose a body, wheels, suspension bracket elements, elements of the mechanism of turn of wheels (geometrical objects, instead of elements reactor mean!!!) also its necessary to add the created surface.



Pass in tab Utilities, choose reactor and set reactor as in pict (the metric system of measurement is meant!).




Open a tab reactor-> Collisions, press Define collision pairs. In the appeared window disconnect all interactions (collisions) between scene elements,exept interaction with a floor. In tab Properties write weight of objects:
Body - 50
Wheels – 10
Suspension bracket elements – 10
Elements of the mechanism of turn – 10
Floor - 0
Friction (friction) everywhere – 1
Simulation Geometry – Concave Mesh

Add Constraint Solver and appoint constraints. select CSolver and in a tab of modifiers RBCollection Properties-> RBCollection specify created RBCollection1. Press Properties-> add. In the appeared window choose CarWheel, Prismatic, Hinge. Deactivation Threshold on 0!




4. The first animation


It is time to put our model on wheels! Open tab Utilities, Choose Reactor-> Preview&Animation, specify first and final shot of animation (0 - 100 for example) and press Preview in Window. Next task to run motors of back wheels, and forward motors that will turned under control of wheel turn mechanism. It it is possible to do all manually, allocating the necessary elements and in due time changing their options, but its easier to write a small vehicle management script.


5. a bit of scripting


We choose MaxScript-> New Script, there is a window of editor MaxScript. I will simply describe a considered example. So, create the window of management containing 2 sections ("management of a wheel" and "speed control"). For this purpose we will add in a window of editor MaxScript:

CarRig = newRolloutFloater "CarRig script" 300 330
CarRig = newRolloutFloater "CarRig script" 300 330
addRollout rudder_control CarRigaddRollout rudder_control CarRig
addRollout speed_control CarRigaddRollout speed_control CarRig

The section "management of a wheel" will supervise an angle of rotation of wheels and speed of turn, and also blocking of wheels in direct position.

rollout rudder_control "rudder control"
(
slider wheelangle "wheel angle (right--center--left)" orient:#horizontal ticks:6 range:[-15,15,0] type:#integer
on wheelangle changed val do
(
$Hinge_r.minlimitangle = val-15
$Hinge_r.maxlimitangle = val +15
$Hinge_l.minlimitangle = val-15
$Hinge_l.maxlimitangle = val +15
)

slider rudderangspeed "rudder ang speed (right----center----left)" orient:#horizontal ticks:10 range:[-5,5,0] type:#integer
on rudderangspeed changed val do
(
$Motor_ridder_r.angularspeed =val
$Motor_ridder_l.angularspeed=val
)

spinner ruddergain "rudder Gain" range:[0,10,0] type:#integer
on ruddergain changed val do
(
$Motor_ridder_r.gain= val
$Motor_ridder_l.gain=val
)

checkbutton straightonly "straight only" checked:false align:#left
on straightonly changed state do
if state == on
then
(
$Hinge_r.limitfriction = 1000
$Hinge_l.limitfriction = 1000

$Motor_ridder_r.disabled = true
$Motor_ridder_l.disabled = true
)
else
(
$Hinge_r.limitfriction = 0
$Hinge_l.limitfriction = 0

$Motor_ridder_r.disabled = false
$Motor_ridder_l.disabled = false
)
)


The section "speed control" will supervise speed of a car.

rollout speed_control "speed control"
(
slider speed "speed (back-stop-----forward)" orient:#horizontal ticks:8 range:[-10,30,0] type:#integer
on speed changed val do
(
$Motor_r.angularspeed =val
$Motor_l.angularspeed=val
)

spinner speedgain "speed Gain" range:[0,20,0] type:#integer
on speedgain changed val do
(
$Motor_r.gain= val
$Motor_l.gain=val
)

checkbutton stop "stop"checked:false align:#left
on stop changed state do
if state == on
then
(
$Motor_r.disabled = true
$Motor_l.disabled = true
)
else
(
$Motor_r.disabled = false
$Motor_l.disabled = false
)
)


full script:

rollout rudder_control "rudder control"
(


slider wheelangle "wheel angle (right--center--left)" orient:#horizontal ticks:6 range:[-15,15,0] type:#integer
on wheelangle changed val do
(
$Hinge_r.maxlimitangle = val +15
$Hinge_l.minlimitangle = val-15
$Hinge_l.maxlimitangle = val +15
)

slider rudderangspeed "rudder ang speed (right----center----left)" orient:#horizontal ticks:10 range:[-5,5,0] type:#integer
on rudderangspeed changed val do
(
$Motor_ridder_r.angularspeed =val
$Motor_ridder_l.angularspeed=val
)

spinner ruddergain "rudder Gain" range:[0,10,0] type:#integer
on ruddergain changed val do
(
$Motor_ridder_r.gain= val
$Motor_ridder_l.gain=val
)

checkbutton straightonly "straight only" checked:false align:#left
on straightonly changed state do
if state == on
then
(
$Hinge_r.limitfriction = 1000
$Hinge_l.limitfriction = 1000

$Motor_ridder_r.disabled = true
$Motor_ridder_l.disabled = true
)
else
(
$Hinge_r.limitfriction = 0
$Hinge_l.limitfriction = 0

$Motor_ridder_r.disabled = false
$Motor_ridder_l.disabled = false
)
)

rollout speed_control "speed control"
(
slider speed "speed (back-stop-----forward)" orient:#horizontal ticks:8 range:[-10,30,0] type:#integer
on speed changed val do
(
$Motor_r.angularspeed =val
$Motor_l.angularspeed=val
)

spinner speedgain "speed Gain" range:[0,20,0] type:#integer
on speedgain changed val do
(
$Motor_r.gain= val
$Motor_l.gain=val
)

checkbutton stop "stop"checked:false align:#left
on stop changed state do
if state == on
then
(
$Motor_r.disabled = true
$Motor_l.disabled = true
)
else
(
$Motor_r.disabled = false
$Motor_l.disabled = false
)
)
---------------------------------------------------------------------------
CarRig = newRolloutFloater "CarRig script" 300 330
addRollout rudder_control CarRig
addRollout speed_control CarRig

save script.


6. engine, go!


Start MaxScript-> Open Script, choose the created script, there is a management window.



make the necessary options, establish an interval, start viewing in a window if everything is ok, create animation. For car movement smoothness it is required that the following interval, at least on one shot grasped previous (for example, 0 - 100 - the car goes directly, 99 - 200 - the car starts to turn, 199 - 250 - the car reduces speed to zero).

Before creation of final animation try to train a little ))) This model and script are only one of many autorigging variants .
All questions and wishes will be considered.



Просмотров 132

Добавить в закладки:

Еще по теме