Adobe Premiere ▼
Maxon Cinema 4D ▼
DAZ Studio ▼
Поиск

Моделирование физической модели движения автомобиля

Урок добавлен 23.04.2023

К этому уроку прилагается 3D-сцена

Краткое предисловие

Собственно говоря, в предыдущих уроках уже были упомянуты отдельные аспекты физики в Cinema 4D: так, например, в самом первом уроке на данном сайте мы с вами роняли шар на плоскую поверхность, позже физическую модель Cinema 4D рассматривали как один из способов моделирования генератора бесконечного движения. Но до сих пор это были лишь частные, крайне поверхностные и самые примитивные аспекты физики.

В данном же уроке мы с вами перейдём к самому интересному: к углублённому изучению физики в Cinema 4D на основе конкретного примера — мы попробуем создать и настроить (хотя бы в самом примитивном варианте) вполне работоспособную физическую модель движения автомобиля по пересечённой местности, имитирующую в общих чертах те же принципы, по которым автомобиль движется в реальном мире.

Движение автомобиля в соответствии с физической моделью

Необходимость применения физической модели перемещения автомобиля кроется в словах «по пересечённой местности». В большинстве случаев при моделировании автомобильного движения нет никакой необходимости в использовании физической модели: автомобили равномерно движутся по траектории (именно такой транспортный поток мы с вами учились создавать из одной модели автомобиля, помните?), визуально практически никак не взаимодействуя с окружающей обстановкой, и это легко и просто изобразить простыми средствами, не прибегая к физике. Однако как только речь заходит о сложном рельефе местности, по которой едет автомобиль, или о неординарном поведении самого автомобиля (дрифт, заносы или столкновения) — вот тут-то и настаёт черёд физики, если только мы с вами не хотим вручную расставлять огромное количество ключей и править кривые поведения трёхмерной модели для каждой секунды поведения последней (и это без гарантии визуального праводоподобия финального рендера).

Цели и задачи

Для начала определимся с целями и задачами. В данном уроке наша с вами цель — изобразить более-менее правдоподобное поведение автомобиля при движении по неровной поверхности. Конкретнее: автомобиль должен подпрыгивать и крениться при наезде на неровности, а также вывешивать колёса над выбоинами. А ещё, разумеется, он должен замедляться при преодолении нервностей и ускоряться на ровных участках.

Если бы не ускорение и замедление автомобиля в зависимости от рельефа, то возможно, мы с вами упростили бы себе задачу, «подвесив» автомобиль к движущемуся по заданной траектории невидимому «лидеру» — в этом случае автомобиль уподобился бы детским санкам, скорость которых зависит не от высоты снежных сугробов под полозьями, а от скорости шага отца, который тащит на санках сына. В нашем же случае нам с вами такой вариант решения проблемы не подходит, то есть придётся оборудовать модель автомобиля самым что ни на есть работающим двигателем. Для максимальной эффектности сделаем наш автомобиль заднеприводным внедорожником.

Приступаем?

Начнём с моделирования внешнего вида автомобиля (именно внешнего вида, а не физической модели — это не одно и то же!). Состоять наш с вами автомобиль будет всего лишь из пяти трёхмерных элементов: кузов и четыре колеса. Надеюсь, вам понятно, что каждое колесо должно быть отдельным элементом модели. Кроме того, каждое из колёс желательно сделать цельным (монолитным), то есть состоящим из одного-единственного элемента, а не из набора элементов, иначе впоследствии вы столкнётесь с массой сложностей — вам придётся скреплять между собой все элементы каждого из колёс при помощи физических модификаторов, что, на мой взгляд, было бы совершенно излишней тратой времени. Основной принцип, исходя из которого мы с вами разделили элементы модели — это возможность последующего визуального смещения элементов друг относительно друга во время движения внедорожника.

Визуальная модель внедорожника

Обратите внимание, что в днище кузова внедорожника предусмотрены вырезы для колёс — оговорюсь сразу, что их отсутствие не помешало бы работе нашей будущей физической модели (позже вы сами в этом убедитесь), но во время просмотра анимации было бы видно проходящие насквозь через днище колёса, что, конечно, было бы грубой визуальной ошибкой.

А теперь переходим к самому главному: к созданию непосредственно физической модели внедорожника. Возможно, вы сразу же предположите, что наступила пора прикрепить колёса к кузову. Ни в коем случае! Ни сейчас, ни позже. И вот почему. Дело в том, что прикрепи вы колёса непосредственно к кузову — у вас опять-таки возникла бы куча сложностей: физическая модель Cinema 4D воспринимала бы колёса как находящиеся внутри кузова (т. е. как бы завязшие внутри него), и во что бы то ни стало пыталась бы высвободить их, вследствие чего вместо более-менее правдоподобного поведения колёс вы увидели бы главным образом их мелкую, безостановочную вибрацию и минимум реакции на физическое взаимодействие с прочими окружающими внедорожник объектами. Конечно, проблема эта вполне решается тонкой и длительной настройкой значений динамики сцены и моделей, вроде интервалов, по достижении которых начинается взаимодействие трёхмерных элементов, но мы с вами пойдём более простым путём.

Мы с вами пойдём более простым путём — и создадим на сей раз не визуальную, а физическую модель кузова автомобиля. В исполнении автора — это самый обычный полигональный куб. В вашем это может быть любой другой полигональный объект — главное, чтобы он не был виден под кузовом внедорожника, и чтобы он был полигональной моделью, края которой находятся достаточно далеко от колёс. Этот элемент мы условно назовём весовым центром.

Физическая модель внедорожника выглядит совершенно иначе, нежели визуальная

Почему именно так, спросите вы? Почему это не может быть NULL-объект или сплайн?

Потому что созданный нами весовой центр по определению и в силу своего наименования предназначен для активного участия в физической модели внедорожника. Ни сплайны, ни NULL-объекты, будучи наделены физическими характеристиками, не используют последние, так как не имеют физической поверхности.

Итак, весовой центр внедорожника создан. Переходим к прикреплению колёс. При отсутствии физической модели мы просто подчинили бы их кубу (или даже кузову) в менеджере объектов, и этого было бы вполне достаточно. В нашем же случае колёса должны быть прикреплены не жёстко, а с учётом определённой физической свободы, то есть возможности слегка смещаться относительно весового центра при возникновении физического взаимодействия с другими объектами в сцене (например, с неровностями дорожного покрытия).

Именно для такого вида крепления в Cinema 4D предусмотрены объекты типа «Connector» (от англ. «connect» — «соединять»). Переходим в верхнее меню, ищем пункт «Simulation», в выпадающем из этого пункта меню выбираем подпункт «Dynamics» и в выпадающем подменю жмём «Connector».

Создаём коннекторы для крепления колёс к кузову

Мы видим, что в рабочем окне появился новый объект, а в менеджере объектов — его наименование. Начнём с правого переднего колеса. Размещаем коннектор в точке, где расположен геометрический центр колеса, которое будет прикреплено с помощью коннектора к кузову — при этом сам геометрический центр колеса должен быть расположен в том месте, где у колеса как бы находится центр колёсной ступицы.

Размещаем коннектор в геометрическом центре колеса

Теперь нужно настроить коннектор. Выделяем его наименование в менеджере объектов и видим открывшееся ниже окно свойств.

Настраиваем свойства коннектора

Первый параметр, значение которого нам следует изменить — это тип соединения (параметр «Type»), от него зависит, по каким закономерностям будет смещаться колесо относительно кузова. Очевидно, наиболее подходящим типом соединения в нашем случае будет «Wheel Suspension». В поле напротив слов «Object A» перетаскиваем из менеджера объектов наименование весового центра, на изображении ниже он обозначен как «Base» — это объект, к которому мы с вами прикрепляем колесо. В поле напротив слов «Object B» перетаскиваем наименование колеса (на изображении обозначено как «Wheel_FR», от сокращения «Wheel Front Right») — это объект, который мы с вами прикрепляем. Параметры «Attachment A» и «Attachment B» трогать не будем — они обозначают, где у объектов находятся центры масс, и выставленные по умолчанию значения в данном случае нас вполне устраивают.

Переходим к тонкой настройке коннектора.

Параметр «Ignore Collisions» («игнорировать взаимодействие») предназначен для случая, когда вы хотите избежать физического взаимодействия колеса с весовым центром — например, если параметры коннектора позволяют колесу отклоняться на угол до 45 градусов, но колесо при этом упирается в объект, к которому прикреплено, и не может отклониться на максимально разрешённый угол, то эта настройка может помочь. Параметр «Steering Angle» («Угол поворота») — это и есть тот самый максимально разрешённый угол отклонения колеса от своего первоначального положения. Параметр «Suspension Rest Position» определяет смещение колеса по вертикали в состоянии покоя (то есть в те моменты, когда колесо ни с чем не взаимодействует). В нашем с вами случае значение составляет -15 см. — если изменить его до -25, то кузов внедорожника будет поднят по отношению к колёсам ещё выше, нежели в данный момент, и дорожный просвет увеличится, но при этом понизится устойчивость внедорожника, так как весовой центр окажется выше — не правда ли, это уже напоминает баланс устойчивости автомобилей в реальном мире? От значения параметра «Suspension Stiffness» зависит мягкость подвески. Чем меньше значение, тем мягче будет подвеска. Параметр «Suspension Dumping» определяет «прыгучесть» подвески. Ну и наконец, при желании можно активировать параметры «Lower Limit Y» и «Upper Limit Y» и указать для них значения дистанций, на расстояния больше которых колесо отклониться не сможет.

Закончив настройку коннектора, повторяем ту же операцию — начиная с создания нового коннектора — для второго переднего колеса, на сей раз левого. Вместо путешествий по верхнему меню, как вы, вероятно, уже сообразили, можно просто найти созданный нами ранее коннектор правого переднего колеса, и изо всех сил вдавив и не отпуская клавишу «Ctrl» на клавиатуре, перетащить наименование коннектора на свободное место в менеджере объектов — после выполнения этой операции мы с вами получим новую копию коннектора, да к тому же унаследовавшую от своего оригинала все настройки. Главное — не забудьте сменить в поле «Object B» свойств нового коннектора наименование правого колеса на наименование левого.

С передними колёсам закончили. Переходим к задним.

И сразу же сталкиваемся с несколько неочевидным на первый взгляд вопросом: сколько двигателей должно быть у нашего внедорожника? Что за странный вопрос, скажете вы — один, естественно.

Объясню, с чем связан такой вопрос. В реальном механизме автомобиля крутящий момент передаётся на оба ведущих колеса одновременно через достаточно сложную систему механических приводов. Нам с вами нет смысла моделировать эту систему приводов, так как у нас нет задачи визуализировать внутреннее устройство внедорожника, а значит, вместо полноценной работы двигателя мы можем позволить себе любую его упрощённую физическую имитацию, лишь бы ведущие колёса крутились и толкали автомашину вперёд.

Таким образом, у нас с вами имеется два альтернативных решения: если нам позарез требутся изобразить раздельную тягу двух ведущих колёс, мы можем добавить в виртуальную конструкцию два отдельных двигателя, каждый из которых будет крутить «своё» колесо. Если же моделирование раздельной тяги нам с вами не нужно, то наиболее эффективным и простым способом привести автомобиль в движение будет создание так называемой «колёсной пары» — два наглухо сцементированных вместе колеса, которые приводятся в движение одним мотором.

В данном уроке мы с вами выберем второй, более простой способ — создание колёсной пары и её вращение одним мотором. С оговоркой, что в принципе при желании можно усложнить и этот способ — к примеру, вращать не колёсную пару, а ось с прикреплёнными к ней при помощи коннекторов ведущими колёсами, чтобы последние свободно вихлялись туда-сюда, как это уже настроено нами ранее для передних колёс. Впрочем, в данном уроке лишне усложнять себе задачу мы с вами не будем, есть желание — экспериментируйте самостоятельно на основе сцены, приложенной к этому уроку, ссылку на неё можно найти в начале урока.

Итак, решено — создаём колёсную пару: выделяем два задних колеса — можно в рабочем окне, можно в менеджер объектов, где вам удобнее — затем уже именно в менеджере объектов щёлкаем на любом из них правой клавишей мыши и в выпадающем контекстном меню ищем пункт «Connect+Delete» («Соединить и удалить»). Строкой выше в том же контекстном меню есть пункт «Connect» — он при объединении элементов создаёт новый объект, оставляя нетронутыми оригиналы объединяемых моделей, нам же с вами оригиналы раздельных задних колёс не понадобятся.

Создаём колёсную пару

Мы видим, что задние колёса внедорожника стали одним трёхмерным элементом — то, что нам и требовалось.

Задние колёса внедорожника стали одним трёхмерным элементом

Создаём ещё один коннектор — на сей раз для задней колёсной пары, и учитывая её монолитность, всего один, после чего настраиваем его. Располагаем его, естественно, в центре колёсной пары.

Теперь создаём мотор: верхнее меню, снова пункт «Simulation», выпадающее меню, подпункт «Dynamics», в выпадающем меню подпункт «Motor».

Создаём мотор для внедорожника

Располагаем созданный мотор там же, где коннектор для колёсной пары — посерединке между задними колёсами (или, выражаясь научно, в геометрическом центре задней колёсной пары), затем выделяем его наименование в менеджере объектов, плавно премещаем взгляд в открывшееся ниже окно свойств мотора и приступаем к настройке.

Приступаем к настройке мотора

В поле рядом со словами «Object A» перетаскиваем из менеджера объектов наименование задней колёсной пары (на изображении оно обозначено как «Back Wheels»). В поле рядом со словами «Object B» ничего не перетаскиваем. Для параметра «Type» («Тип») выбираем значение «Angular» («угловой») — всё правильно, ведь для движения внедорожника созданный нами мотор должен непрерывно поворачивать ведущую колёсную пару на определённый угол. В качестве значения для параметра «Mode» («Режим») указываем «Regulate Speed» («Постоянная скорость»). Ну и наконец указываем числовые значения для параметров «Angular Target Speed» («скорость вращения цели») и «Torque» («крутящий момент»).

Вероятно, вы уже готовы запустить анимацию и проверить полученный результат. Если так, то — несколько рановато: ведь мы с вами выполнили только одну часть работы — настроили физическое воздействие на объекты, тогда как самих физических объектов у нас с вами пока нет. А колёса, скажете вы, а кузов, а весовой куб? Верно, полигональные модели созданы, но физически для сил воздействия ни колёс, ни кузова, ни весового куба пока не существует — пока колёсам, кузову и весовому кубу не назначен тег динамики. Ибо именно назначенный полигональному элементу трёхмерной сцены тег динамики обозначает, что данный элемент участвует во взаимодействии с другими элементами, обладающими динамическими характеристиками.

Приступаем к настройке физических характеристик внедорожника. А заодно и выстраиваем иерархическую структуру элементов, из которых он состоит. Первым делом создаём группу, в которой будут собраны все элементы автомобиля (если этого ещё не сделано) — это можно сделать, объединив несколько первых попавшихся под руку элементов при помощи комбинации клавиш Alt+G (напоминаю, что в отличие от общепринятого в Cinema 4D способа последовательного раздельного нажатия клавиш, эта комбинация нажимается одновременно!), либо создав NULL-объект.

Далее обзываем созданную группу неким уникальным, неповторимым и незабываемым словом (к примеру, автор назвал её «CAR») и запихиваем в неё все относящиеся к внедорожнику элементы: кузов, колёса, коннекторы, весовой куб и мотор.

Создаём группу для объединения элементов модели внедорожника

Теперь обозначаем элементы группы как участников физического взаимодействия с окружающей физической моделью: выделяем наименование группы, щёлкаем на нём правой клавишей мыши, в выпадающем меню наводим курсор мыши на пункт «Dynamics Tags» («Теги динамики») и в выпадающем из последнего подменю выбираем единственный пункт — «Dynamics Body».

Обозначаем группу элементов модели автомобиля как участников физического взаимодействия

Если до сих пор вы внимательно знакомились с данным уроком, то, возможно, спросите: как группа «CAR», будучи NULL-объектом, может физически взимодействовать в физической модели? Верно, сам NULL-объект — никак. Зато свойства динамики могут унаследовать от него все подчинённые ему элементы, при этом отпадает необходимость назначать тег динамики каждому элементу индивидуально. Главное — правильно настроить тег динамики группы. Настраиваем: выделяем тег и в открывшемся ниже окне свойств выбираем вкладку «Dynamics», в которой активируем параметр «Enabled» (тем самым включая физику взаимодействия) и выбираем значение «On» для параметра «Dynamic» (тем самым указывая участие группы во всех общих для сцены физических правилах, типа гравитации и пр.)...

Активируем физическое поведение группы

...после чего переходим во вкладку «Collision» («Соприкосновение») в том же окне свойств и указываем значения, заставляющие элементы группы наследовать правила динамики: «Apply Tag to Children» («распространять действие тега на дочерние элементы») для параметра «Inherit Tag» («Наследование»), «All» («всё») для «Individual Elements» («Отдельные элементы»), галочку напротив «Self Collisions» («Собственное взаимодействие») и «Automatic (MoDynamics)» для «Shape» («Контур»). Остальные параметры настраиваем на свой вкус.

Активируем наследование динамики элементами группы

Тут будет уместно наконец-то вспомнить про кузов внедорожника. По нашей задумке, он также должен взаимодействовать с окружающей физической моделью трёхмерной сцены — например, разбрасывать носовой частью стену из картонных ящиков, — но при этом не должен взаимодействовать с другими элементами своей же группы — с весовым кубом и колёсами. Чтобы добиться такого результата, мы с вами подчиним его весовому кубу и назначим кузову индивидуальный тег динамики — точно так же, как группе элементов автомобиля, — но в теге динамики кузова отключим параметр «Dynamic» (укажем для него значение «Off») во вкладке «Dynamics» (обратите внимание, параметр «Enabled» остаётся активированным, иначе кузов вообще перестанет участвовать в физической модели сцены, и любое оказавшееся на пути внедорожника препятствие свободно пройдёт насквозь через кузов!). Во вкладке «Collision» назначенного кузову тега динамики для параметров «Inherit Tag» и «Individual Elements» можно указать соответственно «None» и «Off» — у кузова нет подчинённых элементов, которым следовало бы передавать динамические свойства кузова.

Всё, что осталось — это добавить в трёхмерную сцену неоднократно упоминавшуюся выше окружающую физическую модель — некий неровный рельеф, который в финальной анимации выявлял бы физически правдоподобную реакцию автомобиля на взаимодействие с ухабами. В приложенной к уроку сцене — это грубое подобие некоей арены с усеянной буграми сердцевиной.

В заключение

В данном уроке мы с вами изучили создание простейшей физической модели движения автомобиля — без каких-либо дополнительных плагинов и модулей, штатными средствами Cinema 4D. В уроке, как вы заметили, не рассматривается моделирование поворотов, созданная нами модель способна к движению только по прямой — разумеется, если только неровности рельефа под колёсами не изменят траекторию движения (что и происходит в нижеприведённом видеоролике). К слову говоря, автор намеренно настроил параметры физической модели трёхмерной сцены так, чтобы движение внедорожника было как бы гиперболизировано, с целью наглядно продемонстрировать взаимодействие колёс и кузова машины с неровностями. Кроме того, в приложенную к уроку сцену входят и другие, не упомянутые в уроке элементы, предназначенные для съёмки и освещения. Впоследствии, возможно, на сайте будут рассмотрены и более сложные физические модели.

Финальный результат в виде анимации.