3D модель автомобиля: принципы 3д моделирования авто и машин
Ведущие разработчики в сфере автомобилестроения используют качественные ПО международного стандарта. Это кропотливый труд, в котором принимают участие несколько специалистов, каждый из которых отвечает за свою сферу – внутреннее наполнение, детали, корпус, дизайн. В статье мы расскажем, как создается 3D модель автомобиля и какие программы для проектирования используются.
Этапы моделирования с нуля
При налаженной работе автомобильного концерна весь процесс от идеи и создания макета до полной отработки всех механизмов и снятия с конвейера первой машины проходит около 72 месяцев. Могут быть корректировки, они в основном зависят от того, какие новые технологии разработаны, берется ли за основу прежняя модель, какие производственные мощности предлагает производитель. Рестайлинг, то есть переделка уже имеющегося авто, конечно, проходит в гораздо меньшие сроки – до 1 года.
Предпроектная подготовка, сбор исходных материалов – этап первый
Проходит исследования международного рынка автомобильной отрасли. Анализируется доля заполненности автосалонов этой конкретной марки, спрос потребителя, средняя сумма, которую готов заплатить покупатель, а значит, и класс авто.
Затем создается УТП, то есть уникальное торговое предложение. Это та особенность, которая отличает новинку от аналогов и прочих предложений производителя. Это может быть – повышенная безопасность, легкость управления, комфорт премиального уровня и прочее.
На этой ступени подготовки также проводится оценка следующих решений:
- весовая категория транспортного средства;
- расчет топливного расхода, пути к экономии ресурсов;
- выбор двигателя, мощи новой модели, количество лошадиных сил;
- выбор инвестиций и экономическая сторона вопроса, максимальная себестоимость одной единицы производства;
- договоры с поставщиками на материал, детали, расходные материалы;
- рекламная кампания.
Дизайн корпуса машины на 3D модели – этап второй
Здесь в первую очередь работают дизайнеры, они приготавливают свои эскизы, решения, цветовые исполнения, исследуют отзывы реальных покупателей, определяя из предпочтения по внешнему виду. Затем вступаются инженеры, которые выбранный дизайн адаптируют к реальным возможностям проектирования. Создаются трехмерные модели сборки, происходит работа по подбору материалов, в основном вопрос касается салона – какая ткань будет выбрана для обивки, для сидений, для панели управления, и пр.
На этой стадии по 3Д модели автомобиля оценивается аэродинамика – как воздух будет обтекать машину в момент ее работы, как дополнительные элементы будут способствовать развитию максимальной скорости.
В это время работают рекламщики, они создают первую пробную презентацию товара с указанием его лучших сторон. Если она пройдет провально, то у них еще будет время для переделки некоторых частей.
В этом момент на заводах уже запускается пробная версия – прототип должен быть максимально приближен к реальной конструкции, так как его будут оценивать, экспериментировать на нем.
ZW3D Lite
Базовый набор инструментов для трехмерного проектирования поверхностных и твердотельных объектов, изделий из листового металла, построения двухмерных чертежей и сечений
170 000 ₽
ZW3D Lite (годовая лицензия)
Базовый набор инструментов для трехмерного проектирования поверхностных и твердотельных объектов, изделий из листового металла, построения двухмерных чертежей и сечений
76 500 ₽
ZW3D Standard
Трехмерное проектирование поверхностных и твердотельных объектов, построение двухмерных чертежей и сечений, гибридное моделирование
300 000 ₽
ZW3D Standard (годовая лицензия)
Трехмерное проектирование поверхностных и твердотельных объектов, построение двухмерных чертежей и сечений, гибридное моделирование
135 000 ₽
Общие принципы 3Д моделирования машины в специализированных программах
Сначала создается несколько чертежей в разных проекциях – сверху и снизу, со всех сторон. Они будут основой для будущего проекта.
Для работы с корпусом используется полигональная сетка. Ей удобно управлять, если понадобится изменить параметры плоскости, сделать скругление или выпуклость\вогнутость (что удобно производить в FormZ Pro), задать желаемые параметры, поработать с фактурой.
Можно работать с одной стороной авто, а затем воспользоваться функцией симметричного отображения или копировать элементы и воспользоваться ими повторно.
Для создания колесных арок нужно ориентироваться на расположение осей колес, их диаметр и расположение. Между двумя этими элементами нужно провести сетку линий, которая заложит основу корпусу. Двигая за точки полигональных прямых, можно аналогичным образом создавать бампер, двери, капот и крышу авто.
Этим же инструментом создаются окна и пластиковые детали, вся машина получает объем.
Фары
Работа над осветительными приборами проходит в три этапа в следующей последовательности:
- местонахождение и форма;
- внутреннее содержимое;
- поверхность из стекла.
Колеса в программе для 3D моделирования автомобилей
Диск создается на основе цилиндра, для работы с ним также создается полигональная сетка. Очерчиваются линии спиц, места креплений, внешняя сторона. После того как и шина будет выполнена в объеме, можно заняться деталями, например, системой торможения.
Далее можно перейти ко внутренней обивке, рулю, панели управления, если все это будет видно через стекла. Которые, впрочем, можно оставить матовыми и непрозрачными.
Поверхности A класса
Это такие объекты , которые строятся из сплайнов произвольного порядка с сопряжением кривых и поверхностей (с применением непрерывности G2 и выше) и соответствуют определенным аэродинамическим и,эргономическим требованиям. После создания такие поверхности, как правило, отражают свет, близко расположенные предметы. Ранее создавались только матовые покрытия без бликов, но все изгибы намного реалистичнее и нагляднее смотрятся на глянце. Именно для получения информации о качестве поверхностей подходит инструмент NURBS анализа, который есть в FormZ и ZW3D (версии Standard и Professional). С этой программой для проектирования машин в 3D можно добиться максимальной правдоподобности.
Если моделировать без такой технологии, то не получится сделать эффективный рендеринг, а тем более анимацию с освещением – тени постоянно будут идти неправильной волной. Для сложных деталей и поверхностей это и вовсе невозможно – одна вершина не на своем месте приведет к глобальному смещению общего рисунка.
Вот каких искривлений на корпусе можно добиться, если применять только полигональное моделирование:
Используя технологию NURBS в FormZ и ZW3D можно добиться непрерывного отображения света, которое фактически не преломляется из-за смещенных линий, вершин, петель или узлов.
Дадим вам несколько советов по моделированию авто в программах для 3Д проектирования, в которых есть и возможность разбивки на полигоны, и NURBS.
Расстояние между сегментами ребер
Оно должно быть максимально равномерным – между каждой точкой. Даже если у вас сложная геометрия чертежа, работайте с инструментами кривых линий. Это поможет вам достигнуть минимальных отклонений от непрерывного движения бликов.
Ребра жесткости
В ZW3D и formZ рекомендуется создавать ребра жесткости до их преобразования в поверхности класса А. Для легкого построения ребер в ZW3D имеются специальные инструменты Rib и Rib network, а в formZ Pro для придания сглаживания воспользуйтесь набором инструментов Subdivision Tools.
В formZ воспользуйтесь инструментами N-reconstruct, что позволит редактировать объект не разбивая его на полигоны. Это позволит работать напрямую с поверхностью NURBS как с мешем. При этом доступны инструменты присоединения, совмещения, продления, разбиения, редактирование каждой контрольной точки, вставка узловой точки и т.д.
Подразбиение
Это уже этап, когда вся поверхность отлаживается на предмет правильного и непрерывного отображения. Все элементы и острые углы этой мельчайшей сети нужно вручную двигать и возвращать на место в случае ошибки. Но этого этапа можно избежать, если применить NURBS анализ и рендеринг.
Такими функциями обладают ПО от «ЗВСОФТ». Посмотрим подробнее, какие еще возможности дает софт от этого разработчика для автомобилестроения.
или присоединяйтесь к нашей группе в соцсети
Программы для проектирования металлоконструкций
Инженерно-экологические изыскания для проектирования и строительства: состав, цель и требования
Проектирование в ZWCAD за минуту. Команды на N и O.
Что такое землеустройство: его виды, объекты
Создание автомобиля в Blender — Gamedev на DTF
В этой статье я делюсь своим небольшим опытом моделирования автомобилей без чертежей.
40 683 просмотров
Blender > UDIM > Substance Painter > Blender cycles
В этот раз выбрал для себя концепт попроще, но в то же время с возможностью для креатива — на оригинальном концепт арте Андрея Ткаченко видно лишь левую сторону автомобиля, когда как остальные я додумывал исходя из собранных референсов. А вот кстати и он:
В своих работах автор практически всегда отсылает нас к советскому автопрому. ГАЗы, УАЗы, ЗИЛы всех цветов и расцветок, часто заглядывают знаковые модели вроде Волги или Чайки. Не то, чтобы всё это было категорически необходимо, но раз уж начал создавать свою советскую вселенную дизельпанка, то к делу надо подходить серьёзно.
Вместе с этим у автора появляются абсолютно авторские автомобили не имеющие аналогов даже на чертежах (вроде ГАЗ-ГЛ2) или в секретных бункерах союза ядерного назначения. Эти интересуют меня больше всего, так как при их моделировании использование чертежей фактически невозможно. Так процесс становится похожим на скульптинг с большей свободой для творчества.
О существовании программы Pure Ref, кажется, знает абсолютно каждый.Основным референсом в данном случае всегда остается концепт-арт, который я стараюсь полностью перенести в 3D и по возможности захватить как можно больше деталей. Это не совсем поэтапное руководство, скорее сборник полезных советов и фишек, которые по моему мнению могут быть полезны новичкам в этой программе.
Из важного: все что вы увидите ниже, написано непрофессионалом. Не относитесь к статье серьезно, не ищите здесь достоверной информации. Автор пишет сугубо по приколу.
Начинаем с примитива
Я всегда стараюсь получить первые результаты из простых форм как можно скорее, так как всегда лучше иметь дело с плохими, но быстро смоделенными очертаниями, чем с хорошим и пустым проектом. Никаких особых знаний здесь не требуется, и в ход идут только основные инструменты блендера: экструд, скейл, мув. Важно как можно проще интерпретировать все доступные глазу элементы в примитивные формы и расположить их в проекте, чтобы потом исходя из общей картины сложилось понимание формы автомобиля на концепте.
Самым сложным этапом для меня является начало процесса. Как угадать, что подразумевал автор, если рисунок мы видим лишь с одной стороны? Какую ширину подобрать для капота, на сколько задняя часть занижена относительно передней, одна из стенок изогнута наружу вдоль продольной оси или это так тень падает? Чаще всего я оставляю эти вопросы на потом, ведь легче достраивать конструкцию, имея фундамент вроде тех же основных форм.
Первый час работы модель выглядит как формочка из детского набора для игры в песочнице, поэтому я стараюсь преодолеть этот этап как можно скорее. Справа можете наблюдать мой стандартный набор модификаторов, а именно: Mirror — чтобы не моделить идентичную половину, и Subdivision — surface для сглаживания формы. Между ними стоит Bevel. Его изначальная функция — создавать скосы/фаски, но в данном случае он позволяет мне оставлять острые углы перед сглаживанием, не добавляя при этом лишнюю геометрию.
Как вы видите на примере ниже, редактирование осуществляется всего двумя вертексами без необходимости добавлять лупы снизу и сверху. На трех эджах наложена синяя полоска — это bevel weight, его я выставляю там, где хочу видеть работу модификатора bevel, в котором Limit metod как раз выставлен на параметр Weight. Небольшое количество геометрии позволяет быстро перестраивать модель чуть ли не до этапа текстурирования, что в моём случае постоянных затупов с масштабами критически необходимо.
Еще одним элементом моего процесса является чистка модели от лишних изгибов — необходимо подровнять плоскости и идентифицировать схожие элементы в дубликаты. До этого момента весь моделинг производился исключительно на глаз — важно было лишь совпадение визуальных образов, а не техническая часть.
Здесь я выставил Pivot around active object (вкладка работы с Pivot, т.е опорной точкой, находится в верхнем меню) и выровнял нужную мне геометрию с последним выделенным вертексом (выделен белым) по оси X. Комбинация клавиш выглядит так: с зажатым Shift выделяем те вертексы, которые хотим выровнять, последним выделенным вертексом и будет наша опорная точка.
Далее S (scale) — X (ось) — 0 (зиро), ну или как истинный старовер можно помахать мышкой лево-вправо. Этим удобным приемом я пользуюсь часто, ведь в первые часы важно уловить суть концепта, пока сама модель в целом похожа на полный бардак, а единственный позитивный момент лишь в квадратной сетке и небольшом количестве вертексов.
Пока что рабочий процесс не меняется. Где то я могу углубиться в детали вроде лобового стекла, в то же время отдалиться, растянуть корпус и прижать крышу всей модели, пока она не будет напоминать оригинал с нужного мне ракурса. Вся детализация экструдится из получившейся «формочки» по два раза. Первый — для дальнейшей проработки, а второй — для бекап-папки, чтобы в любой момент вернутся к базовой форме, если вдруг что то пойдёт не так.
Двери и остальные детали я вырезаю прямо из основы c помощью ножа (K). Сужаю прорези и выдавливаю их с помощью комбинации клавиш Alt + E с выбором Along normals. Так они выдавливаются по направлению нормалей, после чего лишнее можно удалить, а на углы выставить всё тот же bevel weight (синяя полоска), тем самым показав модификатору bevel, где и сколько добавить геометрии для сохранения острых углов. Ниже я записал демонстрацию, как это выглядит в программе.
На сложных участках можно не боясь резать модель как вздумается, ведь самое важное — получить необходимую форму объекта, а лишнее всегда можно прибрать комбинацией клавиш Ctrl + x.
А вот всё тот же bevel сохраняет мне кучу времени при детализации частей корпуса
Автомобиль уже начинает походить на себя, хоть на нескольких участках выглядит слишком просто и квадратно (позже покажу, почему именно), а пока займёмся колёсами.
До этого времени на месте колёс стояли примитивы, отзеркаленные относительно корпуса модели. Они мне понадобятся лишь для соблюдения их масштабов, которыми я занимался в самом начале. Теперь же я воспользуюсь ещё одним способом, который в моделировании цилиндрических форм мне нравится больше всего.
Для этого нам понадобится один вертекс и модификатор Screw. В демонстрации ниже pivot (синяя точка) нужно расположить так, что бы он находился в центре будущего колеса, а вертекс — в самой нижней его части. После этого выбираем модификатор Screw и выставляем в нём необходимую нам ось (в нашем случае X), по которой нам нужно получить цилиндрическую форму.
После дело остается за малым — проекструдить профиль колеса вверх до центра, не забывая добавлять геометрию посредством разделения вертексов комбинацией клавиш Ctrl +Shift + B. Теперь можно накинуть Subd и наслаждаться результатом.
Вот как получается в итоге.
Вернёмся к корпусу. Всё это время он оставался простым без каких либо изгибов, хотя на концепте они имеются. Конечно же, это не случайно, и я не просто так до последнего оставлял формы прямыми, ведь ими гораздо легче манипулировать, нежели пробовать искривлять форму сразу.
Для этого нам понадобится модификатор Lattice. Его работа объясняется достаточно просто. Он позволяет гладко деформировать ваш объект, не разрушая при этом его изначальной геометрии, впрочем, как и любой модификатор. Чуть ниже я прикреплю пару гифок для тех, кто ни разу о нём не слышал. Двигая края решетки, у меня получилось создать нужный мне изгиб буквально за минуты.
Важно! Lattice должен обязательно стоять перед Subd, так как в любом случае применять его надо первым делом. В противном случае может возникнуть ситуация, когда Lattice начнёт изгибать несуществующую геометрию, которая была создана лишь модификатором ранее.
Чтобы в итоге получить тот результат, который вы хотели изначально, придётся применять SubD и получать огромное количество ненужной геометрии. Да, это может показаться не такой большой проблемой, ведь, например, ничего не мешает переставить модификаторы в нужном порядке когда хочется, но поверьте, на поздних этапах такая ошибка отбросит прогресс на пару часов назад.
Ниже — пример того, как неправильное расположение модификаторов может сильно навредить проекту.
Повторюсь, до последнего я не был уверен, какая форма изгиба будет у корпуса, поэтому к этому модификатору я возвращался постоянно.
Небольшая демонстрация одного из бекапов проекта. Как видно в верхней части дверей автомобиля, геометрии пока недостаточно для плавного изгиба — фиксится банальным добавлением лупов (Ctrl + R) , что не составило труда, т.к в этом месте модель состоит из простых квадратов.
(К слову, subd я не применяю вообще, он так и стоит на модели до конца. Вот так взял и в любой момент выключил — чем не игровая модель? 🙂 )
Ещё одним очень интересным приёмом я начал активно пользоваться совсем недавно. Пишу я про Instance collection — это, по сути, дубликат уже существующей папки (коллекции). Он имеет все свойства от оригинала вплоть до анимации оригинального объекта, но не может редактироваться, как тот же связанный дубликат (Alt+D). Чаще всего его используют для заполнения проекта кучей одинаковых объектов и экономии этим памяти, но так же для альтернативы модификатора mirror. Чем я и воспользовался в своем случае.
Я засунул абсолютно все детали автомобиля, которые впоследствии должны быть отзеркалены — колёса, боковые панели, интерьер автомобиля, кресла, лампы и объекты света — в одну папку, правой кнопкой по которой открывается подменю, где и находится Instance to scene. Появляется дубликат всей коллекции, который я одним махом отзеркаливаю посредством Object > Mirror > X, Y, Z — и всё, готово.
Больше не нужно волноваться о бесконечных стаках модификаторов, выключать их, включать, терять бесконечное число родовых объектов, которые легко случайно подвинуть и не заметить и т. д. Всё автоматически ставится на место после того, как вы просто отправляете объект в нужную вам папку. Это касается абсолютно всего, вплоть до анимации и света, что экономит многочисленные нажатия мышкой. Советую!
Конечно, у всего есть свои плюсы и минусы. Конкретно в этом случае вы не сможете как-то взаимодействовать с instans’ом кроме как расположить его в проекте. Правда, ничего не мешает сделать его реальным в любой момент времени и анимировать/редактировать любой объект на выбор уже после стадии моделирования и текстурирования.
Демонстрация магии путём перетаскивания объектов из одной папки в другую.
UDIM
Поддержка мозаичной структуры развертки текстур появилась в Blender лишь в прошлом году. Она не только позволяет разделить одну текстуру на несколько файлов, но и выставить для каждой части «мозайки» своё разрешение. Создаётся такая текстура в Image editor посредством добавления галочки tiled.
Корпус я перетащил на один тайл, выставив 4K-разрешение, мелкие детали — на другой в 1K, на отдельных тайлах у меня расположился интерьер, потом колёса, стёкла и так далее. На первом у меня находится крыша — она единственная во всей модели имеет High poly вариант, который позже я смог запечь отдельно от всего остального.
Текстуры в Substance Painter
Ниже на примере можно заметить, как на основной бежевый материал корпуса я добавляю несколько слоев грязи оранжевого и тёмно-коричневых цветов, стараясь приблизиться к тому же результату, что и на концепте.
Всегда сложно подобрать нужный шрифт, поэтому чаще всего я моделирую некоторые буквы и цифры прямо в Blender, выставляя лишь шейдер Emission белого цвета в тёмном окружении. Таким образом за 5 минут получается маска нужной мне формы.
Вся модель была запечена сама с себя (окно бейка Ctrl + Shift +B, выставив в параметрах 4K-разрешение, 2х2 subsampling и выключив Average normals), а уже после я выбрал конкретно тайл с крышей, добавил в настройках бейка хайполи объект, и кликнул на Bake only (название тайла) maps.
По ходу дела появилась идея создать вторую версию текстур для автомобиля. Не то что бы тут было много работы — половина материалов не изменила своих свойств, а основные изменения получили градиенты с цветом корпуса. Эти градиенты в сабстенсе получаются с помощью фильтра Position. Их я накладываю как дополнительные слои сверху и снизу автомобиля, немного изменяя основной цвет и его яркость.
Эту квадратную текстуру я сгенерировал с помощью Brick generator.
Во время работы с этим генератором вылезла проблема неправильно расположенных UV частей, из за чего квадраты на некоторых частях автомобиля располагались по-разному. Для решения подобных проблем можно воспользоваться фильтром Tri-Planar Advanced, но для его работы необходим Input с предыдущей информацией.
Естественно, поместить сам Brick generator в input мы не можем, но зато можем сохранить результат его работы в некий «контейнер» при помощи добавления в цепь фильтров anchor point (якорь), и уже потом использовать этот якорь в инпутах или вообще других слоях и материалах.
Ниже вы видите, как после Brick gen стоит тот самый якорь, то бишь сохранение предыдущего результата для последующей отправки в фильтр Tri-Planar.
Чтобы импортировать полученные текстуры в шейдер блендера, одним движением нужно кликнуть по нему правой кнопкой мыши и воспользоваться комбинацией клавиш Ctrl + Shift + T. В большом списке Udim текстур выделяются лишь те, что находятся на первом тайле (по дефолту это 1001 или тот, что находится в левом нижнем углу рабочей среды UV-editor’а).
Если на остальных объектах выставлен тот же материал, то UDIM-алгоритм автоматически подберёт для них из той же папки необходимые тайлы с текстурами, а сам сетап будет выглядеть так. (Чтобы комбинация клавиш сработала, необходимо во вкладке Edit > Preferences > Add-ons найти и включить встроенный аддон Node Wrangler)
Думаю, на этом пока и остановимся. Полученную модель с текстурами я осветил десятком источников, парочку из которых также закинул в отзеркаленный instance, за счёт чего получилось создать симметричное освещение для turntable видео (для объектов света в Blender нет модификаторов, поэтому на них нельзя накинуть mirror, а instance collection легко позволяет обойти это ограничение).
Пара рендеров из того, что получилось.
Блики у ночной версии с такси я добавил также в Blender на этапе постобработки. Эффект получается с помощью фильтра Glare с подтипом Ghosts. Если выставить параметр mix на 1.0, получается интересный эффект с чёрным фоном, который позже можно наложить поверх основного рендера с режимом «экран» или подобных ему «мягкий свет» и «линейный осветлитель».
Страничка проекта на Artstation.
Посмотреть мои остальные модели можно здесь.
Получить Симулятор вождения гоночного автомобиля 3D
Получить Симулятор вождения гоночного автомобиля 3D — Microsoft StoreПроизводство мегагеймеров
Гонки и полеты
ВСЕ 10+
Мягкое насилие
Симулятор вождения гоночного автомобиля 3D это лучший автомобильный симулятор 2017 года, благодаря его передовому реалистичному физическому движку. Вы когда-нибудь хотели попробовать симулятор спортивного автомобиля? Теперь вы можете водить, дрейфовать, парковаться и чувствовать себя на гоночном спортивном автомобиле бесплатно! Тест на вождение автомобиля на высокой скорости Будь яростным гонщиком. Не нужно тормозить из-за пробок или участвовать в гонках с другими автомобилями соперников, поэтому вы можете выполнять незаконные трюки и мчаться на полной скорости, не преследуя полицию! Будьте экстремальным гонщиком. Нет предела для вращения ваших горячих колес и выгорания. Грандиозные автомобильные трюки Быстро дрейфовать и выгорать еще никогда не было так весело! Гори асфальт! Race Car Driving Simulator 3D — новая лучшая бесплатная мобильная игра, в которой вы сможете выполнять каскадерские гонки, управляя быстрыми автомобилями по улицам. Управляйте самыми яростными спортивными автомобилями, дрейфуйте по пробкам на максимальной скорости или каскадерски прыгайте по асфальтовым пандусам. Пройди тест по вождению на высокой скорости, дрифтуя по дорогам. Безлимитный городской симулятор вождения Это также для любителей симуляторов парковки и школ вождения уличных автомобилей. Да, если вам нравится играть в симулятор городской парковки, вам обязательно нужно попробовать эту игру вождения. В нем представлены уровни симулятора городской парковки. Наслаждайтесь уличными гонщиками, избегая препятствий на дорогах и выполняя экстремальные автомобильные трюки. Крути свои горячие колеса. Симулятор вождения гоночного автомобиля 3D Особенности: * Наслаждайтесь самым реалистичным городским автомобилем с самым точным физическим движком вождения автомобиля. * Различные гоночные поверхности: жгите асфальт на полной скорости! * Множество различных транспортных средств в максимально реалистичном HD-развлечении. * Самые веселые испытания, будь гонщиком. * Режим контрольной точки игры. * Драйв с дорожной игрой! * Полный реальный HUD, включая обороты, передачу и скорость. * Точная физика. * Управление с помощью руля, акселерометра или стрелок * Несколько режимов камеры. * Покажите свои навыки в экстремальном вождении автомобиля * Уровни школы вождения уличных автомобилей * Выполняйте автомобильные трюки, чтобы насладиться острыми ощущениями * Экстремальные автомобильные гонки на загруженных дорогах Вращайте горячие колеса для выгорания и начните дрейфовать без ограничений. Одна из лучших гоночных игр. Мы надеемся, что вам понравится «Симулятор вождения гоночного автомобиля». Мы рекомендуем вам оставлять положительные отзывы и предложения. Отзывы и рейтинги пользователей важны для нас, чтобы обеспечить вам лучший игровой опыт!
См. системные требования
Обзор Системные ТребованияДоступно на
ПК Мобильное устройство
Центр
Скриншоты
- {{#каждый слайд}}
- {{#каждый ImageForBreakPoints}} {{/каждый}} {{/каждый}}
{{/если}}
Характеристики
- Совместимость с сенсорными устройствами
Системные Требования
ОС | Windows 10 версии 10240. 0 или выше, Xbox |
---|---|
Архитектура | АРМ, х64, х86 |
ОС | Windows 10 версии 10240.0 или выше, Xbox |
---|---|
Архитектура | АРМ, х64, х86 |
ВведениеВ этой статье мы создадим простую симуляцию вождения для обучения классификатора автономному вождению виртуального автомобиля. Наша симуляция будет состоять из 3D-сцены, состоящей из извилистой дороги и одного автомобильного контроллера, созданного пользователем или компьютером. Перед автомобилем будет установлена камера, чтобы обеспечить изображение с его точки зрения (POV). Это изображение с точки зрения будет использоваться в качестве входных данных для нашего классификатора, чтобы решить, как управлять автомобилем. На каждом этапе симуляции автомобилю будет разрешено двигаться вперед или поворачивать на месте влево или вправо. Построение моделированияГрафика моделированияМы начнем с создания графических функций для сборки и отображения моделирования. Сначала давайте создадим текстуру для земли. Для простоты мы растрируем встроенную кривую, содержащую как левый, так и правый повороты дороги. дорожка = Растеризация[ С[{дорога = HilbertCurve[2, DataRange -> {{0,25, 1,75}, {0,25, 1,75}}] /. Линия -> BSplineCurve}, Графика[{ CapForm["Круглый"], Серый, AbsoluteThickness[36], дорога, Желтый, Лихой [0,033], Абсолютная толщина[2], дорога }, PlotRange -> {{0, 2}, {0, 2}}, Фон -> Цвет RGB["#e8e1ba"] ] ] ] Далее мы определим функцию для сборки 3D-сцены, охватывающей землю и автомобиль. Мы будем визуализировать эту сцену с помощью двух разных камер, чтобы обеспечить обзор автомобиля на дороге, а также изображение с точки зрения автомобиля. CarSimScene[sim_] := Module[{земля, машина}, земля = { Текстура[дорожка], EdgeForm[Нет], Полигон[ {{0, 0, 0}, {100, 0, 0}, {100, 100, 0}, {0, 100, 0}}, VertexTextureCoordinates -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}} ] }; автомобиль = С [{размеры = {2, 1, 0}}, {Красный, Повернуть[ Cuboid[sim["Позиция"] - размеры , sim["Позиция"] + размеры + {0, 0, 1}], sim["Вращение"], {0, 0, 1}, сим["Позиция"] ] } ]; {земля, машина} ] Наконец, нам нужна функция для позиционирования камеры в 3D-сцене в месте расположения автомобиля для записи изображения с точки зрения. Это изображение будет использоваться только при классификации, поэтому мы растрируем с относительно низким разрешением. После некоторых экспериментов я решил использовать ImageResolution вместо RasterSize, потому что это было более чем в 2 раза быстрее для создания окончательного изображения. Координаты ViewVector были определены экспериментально, чтобы соответствовать типичному виду изнутри автомобиля. CarPOV[sim_] := Модуль[{ вращение = sim["Вращение"], pos = sim["Позиция"] }, Растеризовать[ Графика3D[ CarSimScene[сим], Размер изображения -> Маленький, Вектор просмотра -> { sim["Позиция"] + {2.1 Cos[sim["Вращение"]], 2.1 Sin[sim["Вращение"]], 1.5}, sim["Позиция"] + {5 Cos[sim["Вращение"]], 5 Sin[sim["Вращение"]], -0,25} }, Угол обзора -> 1,5, В штучной упаковке -> Ложь, Фон -> Голубой, Диапазон просмотра -> {0, 0,1} ], Разрешение изображения -> 8 ] ] Теперь мы можем объединить все наши графические функции в единую всеобъемлющую функцию, которая отображает всю симуляцию автомобиля, включая 3D-сцену и вставку с точки зрения автомобиля. DisplayCarSim[sim_] := Модуль[{}, Оверлей[{ Графика3D[ CarSimScene[сим], PlotRange -> {{0, 100}, {0, 100}, автоматически}, Размер изображения -> Большой, Фон -> Голубой, В штучной упаковке -> Ложь ], Помечен[ Framed[sim["POV"], FrameMargins -> None, FrameStyle -> Gray, ImageSize -> Small], "Car POV", LabelStyle -> Gray] }] ] Внутреннее устройство симуляцииЗавершив графику симуляции, мы приступим к созданию функций, продвигающих симуляцию вперед. Наше состояние симуляции будет содержаться в одной ассоциации, содержащей свойства положения автомобиля, поворота и текущего изображения точки зрения, а также историю всех предыдущих изображений точки зрения и связанных с ними действий. NewCarSim инициализирует нашу модель данных для новой симуляции. Мы позволяем параметру определять, с какого направления на трассе стартует автомобиль. Мы будем генерировать обучающие данные в направлении «Вперед», а затем тестировать обученный самоуправляемый автомобиль в противоположном направлении. NewCarSim[direction_] := Module[{sim}, сим = Если[ SymbolName[направление] == "Вперед", <|"Позиция" -> {10, 10, 0}, "Вращение" -> 0|>, <|"Позиция" -> {90, 14, 0}, "Вращение" -> Пи|> ]; sim["История"] = {}; sim["POV"] = CarPOV[sim]; сим ] Продвигаться вперед в симуляции легко, StepCarSim принимает состояние симуляции и действие, одно из «Вверх», «Влево» или «Вправо», и соответствующим образом перемещает автомобиль. Каждый раз, когда симуляция продвигается вперед, текущее изображение автомобиля POV сохраняется вместе с предоставленным действием в нашем списке истории. В конце этапа моделирования создается новое изображение автомобиля POV. StepCarSim[sim_, action_] := Module[{}, AppendTo[sim["История"], sim["POV"] -> действие]; Выключатель[ действие, "Влево", sim["Вращение"] += 0,05, "Вправо", sim["Вращение"] -= 0,05, "Вверх", sim["Позиция"] += {Cos[sim["Вращение"]], Sin[sim["Вращение"]], 0} ]; sim["POV"] = CarPOV[sim]; сим ]; SetAttributes[StepCarSim, HoldFirst]; Наше моделирование почти завершено, теперь пришло время создать интерактивный интерфейс, который позволит человеку управлять автомобилем и генерировать обучающие данные. Создание примера обучающих данныхsim = NewCarSim[Forward]; Обработчик события[ Стиль[Динамический[DisplayCarSim[sim]], Выбираемый -> False], { «LeftArrowKeyDown»:> StepCarSim[сим, «Влево»], "RightArrowKeyDown":> StepCarSim[сим, "Вправо"], «UpArrowKeyDown»:> StepCarSim[сим, «Вверх»] } ] Когда я вручную вел машину по всей длине трассы, симуляция сгенерировала около 600 обучающих примеров. Эти данные доступны в разделе «Дополнительные материалы» ниже, если вы предпочитаете не создавать свои собственные. Давайте взглянем на несколько обучающих примеров: TableForm@RandomSample[sim["История"], 3] Обучение самоуправляемого автомобиляСгенерировав данные нашего примера, мы готовы обучить классификатор вождению автомобиля! самоуправляемый автомобиль = Classify[sim["История"], Метод -> "Логистическая регрессия"] Я выбрал логистическую регрессию, потому что она обеспечивает наилучшую точность при относительно небольшом времени оценки. Мы можем показать информацию о нашем классификаторе и увидеть точность выше 70%. Изучая кривую обучения и кривую точности, похоже, что мы приближаемся к пределу нашего обучения, но, вероятно, все же могли бы извлечь пользу из еще нескольких обучающих примеров. Тем не менее, с нашим скромным количеством примеров данных автономный автомобиль работает хорошо. Информация[selfDrivingCar] Чтобы просмотреть наш самоуправляемый автомобиль, мы проведем симуляцию сто раз, используя наш новый классификатор для управления автомобилем. Это только немного отвлекает нас от трека, но показывает, что классификатор работает. DynamicModule[{selfDrivingSim = NewCarSim[Назад]}, Print[Dynamic[DisplayCarSim[selfDrivingSim]]]; Do[StepCarSim[selfDrivingSim, selfDrivingCar[selfDrivingSim["POV"]]], 100]; ] Мы могли бы увеличить количество шагов, чтобы увидеть, как автомобиль едет до конца, но из-за относительно низкой производительности рендеринга я предпочитаю предварительно рендерить каждый 5-й или 10-й кадр и собирать их в манипулировании, чтобы легко перемещаться назад и вперед во времени: selfDrivingSim = NewCarSim[Назад]; кадры = Таблица[ С [{img = Rasterize[DisplayCarSim[selfDrivingSim]]}, Do[StepCarSim[selfDrivingSim, selfDrivingCar[selfDrivingSim["POV"]]], 5]; изображение ], 120 ]; Манипулировать [кадры [[t]], {t, 1, длина [кадры] - 1, 1}] Итак, насколько хорошо работает наш беспилотный автомобиль? На самом деле неплохо. Он может легко проехать по всей трассе и при этом оставаться на правой стороне дороги! Но что произойдет, если мы заведем машину не на той стороне дороги? Это путается? Посмотрим: DynamicModule[{selfDrivingSim = NewCarSim[Назад]}, selfDrivingSim["Позиция"] -= {0, 4, 0}; Print[Dynamic[DisplayCarSim[selfDrivingSim]]]; Do[StepCarSim[selfDrivingSim, selfDrivingCar[selfDrivingSim["POV"]]], 100]; ] При старте с неправильной стороны беспилотный автомобиль немедленно корректируется и поворачивает обратно на правильную сторону! Наша машина прекрасно работает, особенно учитывая скромный набор для обучения и ограниченную ручную оптимизацию Classify. |