Свой автомобиль в Арме (Часть 1)

Минимальные действия, которые необходимы чтобы можно было покататься на автомобиле в игре.


 

Эта статья рассчитана на пользователей, которые уже имеют представление о том, как работать в оксигене, и как добавить свою модель в игру. Если вы еще не знаете как добавляется простая модель в игру, то советую почитать эту статью, т.к. здесь я уже не буду расписывать основные моменты типа изменения путей текстур, создание ЛОДов и т.п.

Итак, предположим у вас есть пока статичная моделька автомобиля. Я выбрал Скорпиона из игры FlatOut, которого скачал на просторах интернета

Если делать упор на качество — то я советую первым делом, пока нет текстур проверить правильно ли сглажена ваша модель. Закругленные места должны иметь сглаженные грани, прямые —  острые грани. .3DS формат ломает сглаживание на модели, поэтому я рекомендую для сложных объектов импортировать в оксиген в формате .FBX. Но иногда все равно бывают косяки, которые лучше поправить ручками, как например вот здесь:

Видно что на месте номера должно быть углубление, но его ели заметно, и лишь темные треугольники выделяются. Надо это исправить. Выделяю само место под номер и убираю сглаживание (U):

Выглядит уже получше. И так далее… Конечно делать это совсем не обязательно, но на светлых участках модели будут выделяться полигоны, что говорит о не качественной работе.

Иногда случается вот так:

Это бывает когда пытаешься сгладить «двухсторонние» полигоны. На моей модели стекла имеют полигоны как снаружи машины, так и с нутри с общими точками, но на нулевом ЛОДе, где салон не видно, эти полигоны совсем не нужны. Поэтому я их выделил и удалил, после чего сглаживание применилось нормально:

 

Для начала сделаем только играбельную модельку, без повреждений и других красивостей, проверим в игре, а затем уже будем добавлять все остальное.

 

Начнем с выделения селекшенов в нулевом ЛОДе, необходимые для работы подвески и руля:

Выделяем руль и называем его drivewheel

Колеса. Опишу Важные селекшны:

wheel_hide— указываем само колесо. Если в вашей модели видны тормозные диски — можно их включить в этот селекшн чтобы диски крутились вместе с колесом.

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

wheel_damper— на этот селекшн влияет только ход подвески. Им можно сделать например задние амортизаторы\рессоры.

ВАЖНО! Колеса указываются от левого переднего до заднего левого, затем правое переднее до правого заднего, то есть:

wheel_1_1_… — переднее левое, wheel_1_2_… — заднее левое

wheel_2_1_… — переднее правое, wheel_2_2_… — заднее правое.

На моей модели нет никаких видимых частей подвески, поэтому я обошелся только селекшенами …_hide

 

С основными селекшенами в нулевом ЛОДе все, вернемся к ним когда будем добавлять машине повреждения, фары, цвета и т.д.

Помимо основного ЛОДа нам нужен ЛОД который включается когда игрок сидит в машине с видом от первого лица.

Создаем ЛОД View Cargo и копируем туда те части авто, которые водитель/пассажир будут видеть со своих мест. Не стоит копировать всю машину целиком, ведь, например нижнюю часть авто, колеса или крышу игрок все равно не увидит, а игру нагружать лишний раз ни к чему.

Из селекшенов нам пока потребуется только руль:

 

 

Теперь нам нужно «посадить» водителя и пассажиров по местам. Для этого нам понадобится распакованная ПБОшка по пути P:\A3\data_f\proxies

Создаем прокси водителя, выбирая подходящего под ваш авто (driver_low01— низкая посадка — подходит для спорткаров, driver_mid01-средняя — для обычных авто, driver_high01— высокая посадка .) и пассажира — passenger_low01, и т.д.

Как заставить водителя обхватить руль руками?

Если умеете делать анимации, то можно сделать индивидуальную для своей машины, чтобы и руль держал, и ноги на педалях были :), но у нас пока только такой способ:

Во вьюпорте прячем все, кроме руля/сидушки/пола/потолка (чтобы бульдозер быстрее обновлялся), запускаем бульдозер, сворачиваем его, и двигаем проксю так, чтобы руки водителя легли на руль, попутно переключаясь альт-табом в бульдозер. Если руль больше или меньше охвата рук — соответственно уменьшить/увеличить руль.

После того как посадили всех как надо, прокси обязательно копируем в нулевой ЛОД.

 

Теперь создаем ЛОД memory и ставим нужные точки осей колес, руля, точки посадки\высадки, подвеску.

doplnovani— ставим точку у багажника. Подходя к этой точке мы можем заглянуть в инвентарь авто.

drivewheel_axis— ось поворота руля

exhaust1_dir\ exhaust1_pos— точки позиции и направления выхода выхлопных газов. Если трубы две и больше, надо добавлять точки exhaust2_dir\ exhaust2_pos

pos cargo \ pos cargo dir

pos driver \ pos driver dir  — 4 точки которые определяют где окажется водитель\пассажир при выходе из машины, и в какую сторону будет повернут.

pos_cargo \ pos_driver ставятся за пределами авто, в полуметре от нее, а точки … dir — определяющие направление — должны быть ближе к машине.

Далее ставим точки posun wheel_1_1, posun wheel_1_2, posun wheel_2_1, posun wheel_2_2. Эти точки нужны для анимации хода подвески т.е. на сколько сильно может опустится\подняться колесо от своего основного положения. Ставится по 2 точки на колесо — нижние точки в центр оси колеса, верхние — немного выше (не обязательно вымерять миллиметры, само расстояние хода подвески задается в конфиге). Можно обойтись одним селекшеном posun wheel_1_1, в конфиге все равно остальные наследуются от него, но, например если ход подвески у задних колес нужно сделать отличным от передних — то поставить на каждое колесо свои точки, и добавить их в конфиге.

 

Ставим wheel_1_1_steering_axis и wheel_2_1_steering_axis — отвечающие за ось поворота колес от руля.

Не обязательно ставить кучу точек, в данном случае можно объединить точки отвечающие за ход подвески с осью поворота колес — т.е. на 2-х точках 2-а селекшена

Ставим по 2 точки по центру каждого колеса — это будет ось вращения колеса. Называем wheel_1_1_axis, wheel_1_2_axis и т.д.

 

Далее ставим по 2 точки на каждое колесо, только не по центру — а на самый нижний край колеса — будем указывать тем самым ширину колес для следов от шин на асфальте. Но здесь каждая точка имеет свое название, т.е. всего 8 точек и 8 селекшнов.

  • Левое переднее колесо, наружная точка — TrackFLL
  • Левое переднее колесо, внутренняя точка — TrackFLR
  • Левое заднее, наружная — TrackBLL
  • Левое заднее, внутренняя — TrackBLR
  • Правое переднее, наружная — TrackFRR
  • Правое переднее, внутренняя — TrackFRL
  • Правое заднее, наружная — TrackBRR
  • Правое заднее, внутренняя — TrackBRL

Ну и осталось указать эти же наружные точки как wheel_1_1_bound, wheel_1_2_bound и т.д. — эти точки служат для расчета движком игры радиуса колеса (центр которого автоматически берется от точек wheel_…_…_axis), поэтому расположение этих точек относительно друг друга очень важно.

Далее создаем ЛОД LandContact, копируем в него крайние точки …bounds (т.е. по одной точке на колесо), и переименовываем в wheel_1_1_damper_land… и так далее

Ну все, с точками пока все (пока до фар не добрались). Можно подключить model.cfg и посмотреть, крутится ли руль\колеса в бульдозере. (не забудьте заменить «YOUR_MODEL_NAME» на название вашего .p3d файла модели). Если ничего этого не работает — перечитываем статью снова, открываем БИСовский пример, пытаемся разобратсья.

Весь код вы можете скопировать нажав кнопочку копирования в верхнем правом углу окна кода

Далее, обязательным для работы автомобиля в игре нам мужны ЛОДы геометрии (коллизии).

Начнем с ЛОДа Geometry. Я сильно не морочился, скопировал коллизийку с БИСовского примера и растянул по размерам своей машины. Тут особой роли не играет как она выглядит главное сделать колеса из цилиндра, чтобы они не вылезали  за пределы основных колес. И сделать их селекшенами с названием wheel_1_1_damper, wheel_1_2_damper и т.д. — чтобы наши коллизийные колеса работали с подвеской.

Ставим массу колесам килограмм 50, основной модели примерно 1000 — это важно — вес колес влияет на разгон авто и инерцию, это высчитывается в конфиге.

Не забываем посчитать компоненты (Structure -> Find Components)

На скрине видно, что я скопировал прокси водителя и пассажира, но при такой коллизии как у меня это делать не обязательно.

Теперь создаем ЛОД Geometry Phys. Судя по БИСовским примерам — в этом ЛОДе используется один элемент размером с машину без колес и прочего. Я скопировал в него свой основной ЛОД коллизии. Масса там не нужна.

Если вы копируете название селекшенов с данной статьи — будьте внимательны, иногда, при двойном клике по названию можно скопировать пробел, и тогда селекшен работать не будет!

Свой автомобиль в Арме (Часть 2)