Caterpillar Script for 3ds max

⚡️Скрипт для быстрого риггинга цепных соединений⚡️

[3ds max 2021-2026]

➡️ риггинг цепных соединений с неограниченным количеством звеньев и шестернями/колесами пяти разных диаметров (количество шестерен одинакового диаметра также не ограничено);

➡️ автоматический подсчет нужного количества звеньев;

➡️ возможность использовать звенья двух типов, чередующиеся друг за другом;

➡️ возможность идентификации готового рига для внесения изменений;

➡️ тонкая настройка вращения каждой шестерни/колеса;

➡️ возможность нивелировать накопленную погрешность при вращении из-за неточности начальных параметров;

➡️ возможность привязки готового рига к рут контролу;

➡️ возможность рига колес для их вращения и движения гусеничной ленты при перемещении рут контрола;

➡️ масштабирование рига без потери функционала.

Все скрипты от 3dbazooka имеют универсальный установщик. Просто перетащите файл CarRigger.mzp во вьюпорт (либо запустите его через Scripting → Run Script), выберите язык установки и следуйте инструкциям.

➡️Все объекты, созданные скриптом, хранятся в слоях Caterpillar_Helpers и Caterpillar_Tracks. Часть из этих объектов скрыта по умолчанию.

➡️В одной сцене можно создать сколь угодно много готовых ригов, при этом все объекты будут храниться все в тех же двух слоях.

➡️В интерфейсе скрипта предусмотрено удаление как одного конкретного рига, так и всех следов скрипта в сцене, однако в случае неполадок всегда можно удалить вышеупомянутые слои вместе с содержимым.

➡️Чтобы скопировать готовый риг, необходимо выделить все объекты слоев, указанных выше, сделать их видимыми, выделить полностью риг и с зажатой клавишей Shift переместить в сторону. Также можно произвести отзеркаливание рига.

Внимание! Автор скрипта не дает гарантий корректной работы при размножении рига способом выше!

Перед запуском скрипта необходимо выполнить подготовительные операции:

– убедиться, что пивоты шестерней выровнены по центрам их вращения и лежат в одной из ортогональных плоскостей (Front, Top, Left, Back, Bottom, Right);

– подготовить 2 соседних звена цепи, выровняв их пивоты по осям вращения и расположив последовательно друг за другом, выровняв пивот 2го звена относительно 2й оси вращения первого звена;

– нарисовать сплайн для перемещения звеньев (в случае импорта готовой модели из CAD софта все звенья обычно уже смоделированы. В таком случае для автоматического создания сплайна-пути удобно использовать скрипт Spline Penetrator из бесплатного набора Rig Scripts Pack)

– сплайн должен находиться в плоскости вращения шестерней.

Интерфейс разработан таким образом, чтобы по мере риггинга продвигаться сверху вниз. Интерфейс скрипта имеет 2 основных окна с настройками – главное и окно “Advanced Parameters” (“Продвинутые настройки”). В этом блоке рассмотрены первичные параметры главного окна.

➡️ Select Link – кнопка для выбора 1 звена цепи (если звеньев 2 вида, то сначала выбираем любой, 2й выберем позже). После выбора имя объекта отобразится под кнопкой выделения

➡️ Select Path – кнопка для выбора сплайна. После выбора имя объекта отобразится под кнопкой выделения

Примечание: скрипт не использует оригинальный spline в риггинге. Он делает его instance копию, а оригинал скрывает в панели слоев. Цвет instance копии всегда желтый!

➡️ Test – если Link и Path были выбраны и являются допустимыми объектами, то можно жать эту кнопку. Должно произойти равномерное распределение количества (взятого из спиннера Copies) копий звеньев по пути. Меняя количество в спиннере Copies количество звеньев также будет меняться в реальном времени.

➡️ Auto – выделяем 2 ранее подготовленных звена цепи с правильно размещенными пивотами, после чего жмем эту кнопку. Скрипт сам посчитает расстояние и между звеньями и разместит необходимое количество копий на сплайне так, чтобы максимально заполнить весь сплайн.

➡️ Percent – меняем сдвиг звеньев по пути (пригодится дальше, чтобы подогнать звенья под зубья шестерней).

➡️ LookAtConstraint – при включении звенья начинают смотреть на впередистоящее звено. Опционально для каждого случая. Если вдруг скрипт не угадал по какой оси использовать LookAtConstraint, есть возможность поменять угол в выпадающем напротив него меню – “X-Y-Z”

➡️ Блок Rotation – так как скрипт понятия не имеет как развернуты звенья в пространстве и куда направлены оси их пивотов, после нажатия кнопок Test или Auto есть возможность развернуть все звенья по любой оси для достижения ожидаемого результата.

➡️ Блок Offset – тоже самое только для перемещения звеньев. В случае если в стыке присутствует ненужный зазор, его можно быстро устранить.

Продвинутые настройки представлены в окне Advanced Parameters и рассмотрены в следующем блоке.

➡️ Select 2nd Link – в случае, когда соседние звенья разные, с помощью этой кнопки выбираем 2е звено. В результате автоматически каждое второе звено заменится на новое и приобретет более темный цвет.

Примечание: как первый, так и второй тип звеньев созданы копированием оригинала с помощью instance. Поэтому любое изменение геометрии оригиналов будет влиять на всю цепь.

➡️ Driving Gear Controls – блок для настройки рига ведомой шестерни.

Driving Gear – с помощью этой кнопки выбираете ведущую шестерню/колесо. Она будет управлять вращением всего механизма.

Measure Radius значение в спиннере рядом с этой кнопкой автоматически определило радиус на просвет выбранной шестерни. Однако, для точности рига необходимо брать для расчетов не этот радиус, а расстояние от центра вращения шестерни/колеса до одного из ближайших звеньев, лежащих на сплайне. Выделив шестерню и ближайшее к ее центру звено, жмем на кнопку Measure Radius, его значение должно измениться. Помните – очень важно, как было сказано в начале, чтобы сплайн и пивоты шестерней лежали в одной плоскости.

Rig – после измерения радиуса, сразу жмем эту кнопку. На ведущем колесе появится управляющий объект – оранжевый пойнт и скрипт откроет возможность выбирать дальше ведомые шестерни. Чтобы изменить его размер не используйте масштабирование, используйте настройку Size в кастомных атрибутах. После этого повращайте пойнт и убедитесь, что цепь движется в нужном направлении. Если это не так, то нажмите на кнопку “” рядом с кнопкой “Rig”, это изменит направление движения цепи. Сейчас самое время воспользоваться спиннером “Percent” из главного окна для подгонки звеньев под зубья.

Примечание – скрипт тестировался во множестве сценариев и в каждом их них он всегда верно определял Ось вращения шестерни при риге. Если вдруг в вашем случае шестерня/колесо вращаются не по той оси – измените ее в выпадающем меню X-Y-Z”.

Δ (дельта) – этот параметр создан для нивелирования накопленной погрешности, которая возникает при длительной анимации вращения из-за малейших неточностей в определении радиусов колес, длин сплайнов и т.д. Это происходит, так как 3ds max имеет конечную точность (количество символов после запятой) для определения всех размеров и расчета всех параметров. Чтобы устранить погрешность на длительном участке анимации сделайте в таймлайне 1000 ключей анимации, включите Auto key, переключитесь на последний кадр и повращайте оранжевый пойнт на 1800 градусов – 5 полных оборотов. Отожмите Auto key и перемещая ползунок анимации от нуля к 1000 вы заметите отклонение положения шестерни относительно зубьев, которые настроили с помощью спиннера “Percent”. Теперь увеличивайте/уменьшайте значение Δ по ходу анимации для возвращения относительного положения шестерни и звеньев, пока последний кадр не будет приблизительно равен первому.

➡️ Driven Gear 1-4 Controls – блоки для рига и настройки ведомых колес/шестерен разного диаметра, которые содержат абсолютно тот же набор настроек и параметров, что и ведущее колесо. После нажатия кнопки “Rig” в каждом блоке будет появляться зеленый пойнт в центре выбранной шестерни и будет открываться возможность добавлять шестерню следующего диаметра.

Внимание! Скрипт позволяет создавать риг механизма, который одновременно содержит шестерни/колеса 5ти разных диаметров и неограниченное количество шестерен совпадающих диаметров. Для того, чтобы добавить в риг шестерни с одинаковым диаметром, необходимо их выделить в сцене повторно нажать “Rig” в том блоке, чей диаметр необходимо повторить. В результате в центрах выделенных колес появятся пойнты желтого цвета.

Примечание – пойнты зеленого и желтого цветов не являются управляющими, все оси трансформации у них заблокированы. Чтобы изменить/подогнать вращение ведомых колес либо вращайте геометрию колеса, либо изменяйте параметр Δ в соответствующем блоке.

➡️ Controls – данный блок содержит настройки для линка всего рига к одному рут объекту для простоты его перемещения и вращения, и не только.

Link to Root Ctrl – жмите эту кнопку и выбирайте рут объект в сцене для линка всего рига к нему. Его имя появится рядом с кнопкой. При любой трансформации рут объекта – перемещении/вращении/масштабировании – весь риг также трансформируется. Также скрипт “морозит” все трансформации рута на начальном положении, так что к нему можно возвращаться позже.

Unlink Root – жмите, чтобы отлинковать текущий рут контрол, можете сразу выбрать другой.

Rig Root – кнопка доступна только если риг прилинкован к рут объекту. После активации – скрипт связывает перемещение рут объекта с вращением ведущей шестерни/колеса (см. видео ниже), а в центре рут объекта создается красный пойнт. При вращении рута на месте, ведущее колесо также вращается, симулируя движение гусениц танка при развороте на месте. Кнопка “–” меняет направление движения гусениц, а кнопка “Zrot-“ меняет направление вращения ведущей шестерни при повороте рута на месте. В риге использован уникальный алгоритм вращения колеса при движении рут объекта. Он не зависит от контроллеров трансформации рут объекта, поэтому правильно работает при любых поворотах рига, а также при его масштабировании.

Примечание – при анимации в случае неожиданных подергиваний цепи или внезапных неуместных вращений ведущего колеса необходимо выделить красный пойнт и нажать кнопку – Clear Animation Cache в стеке модификаторов.

Unrig Root – удаляет риг ведущего колеса, а также красный пойнт хелпер.

Decline – на любом этапе создания рига скриптом, можно нажать эту кнопку и она отменит все изменения для текущего рига. Все созданные для данного рига вспомогательные и геометрические объекты будут удалены. Если это единственный риг в сцене, также будут удалены слои Caterpillar_Helpers и Caterpillar_Tracks.

Confirm – когда вас полностью устраивает работа рига в сцене, жмите эту кнопку.

Leave Only Geometry – в случае, если динамика, создаваемая скриптом не нужна, а нужно только распределение геометрии по сплайну, жмите эту кнопку, она оставит только созданную геометрию в сцене.

Detect Rig – кнопка для определения готового рига, созданного этим скриптом. После нового запуска скрипта необходимо выделить желтый сплайн, созданный скриптом (должен иметь имя “CaterpillarPath_###”) и нажать эту кнопку. Если вы не вносили вручную изменения в риг, то скрипт определит все его элементы, автоматически заполнит все окна готовыми параметрами и вы получите возможность их менять. Также данная опция полезна в случае если в сцене много ригов, созданных скриптом, а вам необходимо удалить только конкретный. В таком случае определяем его и жмем кнопку “Decline”.

Примечание – риг считается завершенным и определяется кнопкой Detect Rig в том случае, если определена хотя бы ведущая шестерня/колесо.

Remove All Traces – в отличии от кнопки “Decline” удаляет все следы скрипта в сцене, также удаляет слои Caterpillar_Helpers и Caterpillar_Tracks.

➡️ 2.0 – 07.2025

        – добавлена опция автоматического подсчета звеньев цепи;

        – оптимизирована опция LookAtConstraint;

        – добавлена возможность выбора оси для LookAtConstraint;

        – добавлено окно Advanced Properties, где можно выбирать второе звено, риггить ведущую шестерню и до 4х ведомых шестерен разных диаметров;

        – добавлена функция линка готового рига к рут контролу;

        – добавлена функция рига рут контрола для автоматического вращаения ведущей шестерни и движения цепи при перемещении рут контрола;

        – добавлена функция определения готового рига;

        – устранено 100500 мелких багов и косяков.

➡️ 1.0 – 07.2024

        – Оригинальный релиз