В этом уроке мы будем создавать риггинг гусениц танка. Для этого будут использоваться драйвера, ограничители и физическая симуляция (riggid body). В конце урока создадим объект, с помощью которого будем производить управление танком. А именно движение вперед/назад и повороты.
Финальный результат
Видеоурок
Текстовая версия
С помощью модификатора Array создайте 6 цилиндров, примените его, сделайте каждый цилиндр отдельным объектом и установите центр объекта в геометрическом центре каждого цилиндра:
Добавьте еще два цилиндра большего размера. Добавьте кривую Безье и с ее помощью создайте путь, по которому будет вращаться гусеница танка (обратите внимание на геометрический центр кривой):
Добавьте в сцену куб и создайте из него звено цепи. Добавьте два модификатора и настройте одинаковое расстояние между звеньями гусеницы. После этого примените оба модификатора, сделайте каждое звено отдельным объектом (как мы делали цилиндры в начале), а также установите центр объекта в его геометрическом центре:
После кривую можно удалить. Результат должен быть примерно следующим:
Включите 2-й и 3-й слои. Выделите все звенья и сделайте активным любое из них (желательно по середине). Сделайте их активными объектами и свяжите между собой. После этого Вы заметите, что в месте активного объекта одна связь отсутствует. Выделите эти два несвязных звена и таким же образом свяжите их:
Перейдите не 3-й слой, выделите все связи (ограничители) и переместите их лишь на 3-й слой (просто уберите со второго). Измените центр вращения на Individual Origins и поверните их на 90 градусов по оси Y:
Добавьте плоскость в качестве пола, сделайте ее пассивным объектом и запустите анимацию (на вкладке рендера можно выставить 60 кадров в секунду для более быстрой анимации):
Чтобы повысить качество физических взаимодействий, на вкладке сцены увеличьте указанные значения:
Примените масштабирование к звеньям и установите для них вес равным 5:
Измените форму первого цилиндра, и настройте для него следующие параметры на вкладке физики (форма, отступ, трение):
Добавьте в сцену пустышку (Single Arrow) и куб (назовите его body). Примените для куба параметр Scale. На вкладке физики установите для него вес равным 50:
Выделите пустышку и создайте для нее ограничитель Generic Spring. Разрешите цилиндру вращаться лишь по оси X:
Таким же способом создаем ограничения для первого маленького цилиндра. Но в отличии от верхнего, разрешим ему немного изменять свое положение по оси Z:
Теперь создадим еще одну пустышку, которая будет выступать в качестве подвески и контролировать положение цилиндра. Расположите ее как показано на изображении, затем выделите цилиндр и создайте для него ограничитель Limit Distance. Затем свяжите пустышку с телом танка (Ctrl + P — Object (Keep Transform)):
Продублируйте обе пустышки и цилиндр на второе колесо (а первоначальный цилиндр удалите). Выделите пустышку Single Arrow и добавьте 4 драйвера для указанных значений. Для каждого создайте переменную var, в качестве параметра укажите пустышку первого маленького колеса и скопируйте путь соответствующего параметра:
После этого продублируйте колесо с драйверами на оставшиеся 4, а первоначальные цилиндры удалите:
Удалите последний цилиндр и добавьте на его месте кольцо. Необходимо создать «шестеренку» которая будет вращать гусеницу. Звеньев в моей цепи 75, поэтому кольцо я создал с 28 вершинами. Затем с помощью инструмента Bevel придал ему соответствующую форму:
Далее из этого кольца создайте примерно следующую форму и на вкладке физики установите для него указанные параметры:
Затем также как и для первого цилиндра — ограничитель для пустышки, позволяющий вращаться лишь по оси X:
Добавьте еще одну пустышку (plain axes) и для нее установите ограничитель Motor. Активируйте угловой мотор, установите его максимальную и текущую мощности:
Увеличьте продолжительность анимации до 2000 и запустите ее для теста (помимо количества кадров, на вкладке сцены в меню Rigid Body Cache установите параметр End равным 2000). На данном этапе можете изменять веса различных частей, увеличивать/уменьшать пределы ограничителей… в общем тестируйте, играйтесь и добивайтесь желаемых результатов.
Продублируйте левую половину и снова займитесь тестами и улучшением:
Теперь добавим пустышку, с помощью которой будем управлять мощностью двигателя. Добавьте новую пустышку Cone в центре координат и подымите ее лишь по оси Z (X и Y должны быть равны 0). Выделите одну из пустышек, к которым назначен ограничитель Motor и создайте драйвер для параметра Tangent Velocity. Затем просто скопируйте данный драйвер на вторую пустышку. Теперь перемещая пустышку Cone по оси Y мы управляем направлением движения танка.
Чтобы научить танк разворачиваться, необходимо создать еще одну переменную для драйвера Tangent Velocity и дополнить формулу. Различия же будут лишь в том, что для правой стороны переменная var2 будет принимать отрицательные значения, а левая — положительные:
Последний штрих, это заменить все текущие низкополигональные объекты высокополигональными. Таким образом мы избавимся от искажения гусениц в местах изгиба и в конце концов получим танк, а не палочки на колесах :)
Делитесь своими успехами в комментариях. Удачи!