Моделирование физической модели движения автомобиля
Урок добавлен 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. В уроке, как вы заметили, не рассматривается моделирование поворотов, созданная нами модель способна к движению только по прямой — разумеется, если только неровности рельефа под колёсами не изменят траекторию движения (что и происходит в нижеприведённом видеоролике). К слову говоря, автор намеренно настроил параметры физической модели трёхмерной сцены так, чтобы движение внедорожника было как бы гиперболизировано, с целью наглядно продемонстрировать взаимодействие колёс и кузова машины с неровностями. Кроме того, в приложенную к уроку сцену входят и другие, не упомянутые в уроке элементы, предназначенные для съёмки и освещения. Впоследствии, возможно, на сайте будут рассмотрены и более сложные физические модели.
Финальный результат в виде анимации.