Интеграция грузовиков и аддонов. Часть 1
This guide describes the integration of Trucks and Addons. Part #1 of this guide provides the general info on modding files (Chapters 1 to 4).
Гайд сообщества, переведённый на русский с mod.io.
Upd: ===========================================================
К сожалению, у нас возникли проблемы с обновлением веб-версии этого руководства из-за большого размера наших руководств (мы достигли максимального предела изображений для учетной записи и т. д.). Извините за это.
На платформе ПК те же руководства доступны в папке *установленной игры* в каталоге «...\en_us\Sources\BinEditor\Guides».
Или вы можете открыть папку с пакетом документации прямо из редактора SnowRunner™, выбрав «Справка» > «Руководства» в его главном меню.
Если вам нужна автономная копия, вы можете скачать это полное руководство в формате PDF отсюда (на английском или русском языке).
1. Organization of Files
Все имена файлов должны содержать только строчные буквы, цифры и «_».
1.1. Files of a Truck
- .../meshes/trucks/truck_example.fbx — содержит: сетки грузовиков.
- Truck skeleton
- Collision meshes
- .../meshes/trucks/truck_example.xml - содержит: Пути к текстурам грузовиков и описания их свойств (Blending, AlphaKill, TwoSided, параметры снежного покрова и т.д.)
- описание мест крепления вала
- MaterialOverrides — информация о настройке цвета.
- .../classes/truck_example.xml - содержит всю информацию о поведении грузовика: описание динамики физической модели, типы и размеры колес, используемых грузовиком, описания доступных подвесок и двигателей, информацию об освещении (расположение фонарей, их яркость, цвет, форма и т.д.), положение водителя, положение и направление выхлопной трубы, описания доступных аддонов и прицепов, стоимость грузовика и т.д.
- .../classes/suspensions/s_truck_example.xml — описание подвески
- .../classes/gearboxes/ - описание коробок передач (файлы коробок передач обычно не привязаны к конкретному грузовику, а являются общими для конкретного класса грузовиков).
- .../classes/engines/ - описание двигателей (файлы двигателей обычно не привязаны к конкретному грузовику, а являются общими для конкретного класса грузовиков).
1.2 Files of Wheels
Колеса грузовика включают в себя шины и диски и должны содержать оба этих объекта. Колеса прицепов и полуприцепов можно создавать по старой схеме, где колесо представляет собой единое целое (аналогично первому Mudrunner).
Старая схема следующая:
- fbx колеса, .../meshes/wheels/wheel_example.fbx
- xml сетки, .../meshes/wheels/wheel_example.xml, который содержит информацию о текстурах и радиусе недеформируемой части колеса RubberRadius (радиус обода колеса).
- xml класса, .../classes/wheels/wheel_example.xml, который содержит описание физических свойств колеса (радиус, ширина, трение, жесткость и т.д.)
Новая схема описывает не колесо, а конкретный тип колеса. Колеса этого типа могут иметь разные шины и диски. То есть, после подбора любого обода от типа колеса, к нему хорошо подойдет любая покрышка от того же типа колеса (и не будет никаких зазоров и пересечений геометрии):
- Набор файлов fbx для шин и дисков .../meshes/wheels/ example_rim1.fbx , example_rim2.fbx ,... example_tire1.fbx , example_tire2.fbx ,...
- Набор xml-файлов для сеток шин и дисков, содержащих информацию о текстурах: .../meshes/wheels/ example_rim1.xml, example_rim2.xml,... example_tire1.xml, example_tire2.xml,...
- xml-файл класса, .../classes/wheels/wheel_example.xml, который содержит описание физических свойств этого типа колес. В этом файле описаны все шины и диски данного типа и их свойства.
1.3. Files of Truck Addons
В широком смысле аддоном на грузовик является все, что на него можно установить: визуальные апгрейды (модификация выхлопных труб, солнцезащитных козырьков, фонарей и так далее), функциональные апгрейды (шноркели, бамперы, кузова, краны и так далее), прицепы.
Строго говоря, прицепы и полуприцепы могут существовать на сцене отдельно от грузовика и не являются аддонами. Грубо говоря, прицеп или полуприцеп – это усеченный грузовой автомобиль, в котором нет ни двигателя, ни водителя и т. д.
Организация файлов аддонов абсолютно аналогична организации файлов грузовиков. В принципе файлы аддонов могут находиться в папке с файлами грузовиков (как в Mudrunner 1). Однако для удобства использования файлы дополнений хранятся в отдельных подпапках.
Таким образом, в подпапке addons хранятся аддоны, общие для всех грузовиков или нескольких грузовиков (например, седельные устройства, кузова, краны и т.п.): .../classes/trucks/addons.
Прицепы и полуприцепы хранятся в подпапке прицепов: .../classes/trucks/trailers.
Отдельные аддоны грузовика хранятся в папке <имя_грузовика>_tuning: .../classes/trucks/truck_example_tuning
2. Fbx file structure
SnowRunner использует формат Fbx для хранения информации о геометрии, скелете и сетках столкновений грузовика, прицепа, дополнения или колеса.


Collision meshes:

2.1. Coordinate axes
В игре грузовик ориентирован по оси OX. Ось OY направлена вверх. Ось OZ направлена влево.

Эта ориентация соответствует осям (x, y, -z) в Maya:

И в 3DS Max к осям (x, z, y):

В Blender оси такие же, как и в 3DS Max. Итак, ориентация игры соответствует ориентации осей (x, z, y) в Blender:

Таким образом, чтобы правильно экспортировать ваш грузовик в файл Fbx из вашего 3D-редактора, передняя ось вашего грузовика во время экспорта должна смотреть в направлении оси OX.
Причем, для корректного выполнения экспорта, Настройки экспорта в вашем 3D-редакторе должны быть точно такими же, как показано на скриншотах в руководстве «Экспорт в Fbx: 3ds Max, Maya и Blender», в разделе, соответствующем этому 3D-редактору.
Более того, после экспорта, когда вы будете задавать свойства грузовика в XML, вам следует учитывать разницу в ориентации осей, о которой говорилось выше.
Например: Если координаты центра колеса вашего грузовика в 3Ds Max или Blender равны (1; 2; 3) , то в XML-описании этого колеса нужно указать «(1; 3; 2)» в качестве значения атрибута Pos: Pos="(1; 3; 2)"
2.2. Требования к объектам в файле Fbx
Все объекты и сетки должны иметь одинаковый масштаб. Например:
- в Maya – соответствует шкале (1, 1, 1),
- в 3DS Max — в масштабе (100, 100, 100).
- в Блендере — в масштабе (1, 1, 1).
Убедитесь, что корневая кость и все сетки грузовика имеют одинаковое вращение (0, 0, 0).
Грузовик, аддон и полуприцеп могут иметь только одну корневую кость. Все остальные кости должны быть ниже в иерархии.
Грузовик или полуприцеп должен иметь хотя бы одну физическую кость. Физическая кость должна иметь сетку столкновений. Все кости и сетки грузовиков и полуприцепов должны иметь скин-модификаторы.
Аддоны могут вообще не иметь костей (например, небольшие аддоны, такие как лампы, плакаты и другие аддоны, которым не требуется столкновение). Если в аддоне есть кости, то эти кости должны иметь модификаторы скина и должна быть хотя бы одна физическая кость.
Колеса не имеют костей или объектов столкновения. Столкновение колес определяется в XML.
2.3. Special meshes
Каждый грузовик с кабиной имеет сетки лобового стекла и кабины.
2.3.1. _windshield
Очки, которые видны с камеры от первого лица. Это стекло является дубликатом очков, видимых снаружи, с перевернутыми нормалями. Кроме того, эта сетка сделана немного более высокополигональной, поскольку вода и грязь прилипают к стеклу в зависимости от вершины.
2.3.2. _cockpit
Зона отключения воды. На изображении ниже показан плохо настроенный _cockpit. Стрелками показаны части дворников, находящиеся внутри сетки _cockpit. Визуально они кажутся внутри кабины.

2.4. Truck meshes
2.4.1. lp_cab, hp_cab
Рекомендуем сделать кабину более детализированной для камеры от первого лица, чем для внешней камеры. Если меш имеет префикс lp_ (lp = lowpoly), то он виден только с внешней камеры. Меши с префиксом hp_ (хайполи) видны только с камеры от первого лица.
2.5. Textures
В файле Fbx сетке грузовика можно назначить любые текстуры. Текстуры должны иметь правильные имена: их имена могут содержать латинские буквы и цифры и не должны содержать специальных символов (кроме «_») и пробелов. Система берет из файла Fbx только имя текстуры. Все свойства текстуры описаны в XML-файле сетки. Чем меньше текстур присвоено грузовику, тем выше производительность.
ВНИМАНИЕ: Все текстуры материалов мода должны соответствовать определенной схеме наименования, подробности см. в разделе «7.2.<Материал>». Эта схема именования необходима для включения потоковой передачи текстур мода, что может быть важно. В частности, моды с неправильным названием текстур приводят к утечкам памяти на консолях и не получают одобрения.
Вы можете использовать одни и те же карты текстур для разных фигур. Но, например, если одна фигура находится внутри кабины, а другая снаружи кабины, то следует это учитывать на этапе создания Fbx-файла. В частности, в этом случае вам следует создать в файле Fbx два материала с разными именами, так как их параметры в XML будут разными (например, параметры, отвечающие за снежный покров). Вы можете использовать одну текстуру для всех сеток грузовиков, но в файле Fbx должно быть столько материалов, сколько различных наборов параметров в XML-описании. Например, у вас может быть один файл текстуры .tga. А если в Maya назначить грузовику один материал, то там все будет нормально (не в игре). Однако в XML-файле может возникнуть необходимость определить разные параметры для разных частей грузовика (например, включение или выключение снежного покрова). А сделать это у вас не получится, если вы назначили один материал для всех частей грузовика. Итак, вам нужно будет продублировать материал в Maya, переименовать там вторую копию материала и присвоить этот второй материал нужным частям грузовика. В этом случае вы сможете определить для него разные значения параметров в XML.
2.6. Bones
2.6.1. Physical bones
Кости, включенные в симуляцию Хавока. То есть кости, которые должны реагировать на силу тяжести, сталкиваться, испытывать трение и так далее. Все кости в физической модели должны иметь сетки столкновений. Для удобства мы используем именование NameOfBone_сdt, что означает, что эта кость имеет сетку коллизий.
2.6.1.1. Collision meshes
Имя сетки столкновений должно начинаться с «cdt». В общем, сетка столкновений может иметь любую форму. Это может быть замкнутая фигура или двухмерная поверхность.
Одна физическая кость может иметь несколько сеток столкновений.
С точки зрения производительности лучшей формой сетки столкновений является куб.
Желательно, чтобы сетка столкновений представляла собой выпуклую фигуру. Мы рекомендуем это из-за того, что выпукло-вогнутые формы могут вызвать сбои (если небольшой объект среды столкновений попадет внутрь, он может «провалиться» внутрь сетки столкновений).

2.6.2. Non-physical bones
Поведение этих костей не имеет прямого отношения к физике Хавока. Однако это зависит от положения физических или нефизических костей, к которым они прикреплены, или от положения колес. Эти кости не имеют сеток столкновений и не могут влиять на поведение костей физической модели.
2.6.2.1. Axles
Ось грузовика. Для зависимой подвески положение осей по оси OY рассчитывается как среднее между двумя ближайшими колесами, угол поворота рассчитывается по вектору, соединяющему эти колеса.
Если координата Y аксельной кости не совпадает с координатой ближайшего колеса, описанной в XML грузовика, то в игре можно получить неожиданный результат: кость окажется между колесами и скин-меш будет деформирован.
2.6.2.2. SteeringRack

Рулевая рейка всегда состоит из трех костей: кости рейки, кости левой ступицы и кости правой ступицы.
Поведение каждой кости (ступиц и стойки) контролируется вращением ближайшего к ней колеса.
Кость стойки перемещается по дуге, рассчитанной исходя из положения ближайшего колеса и длины самой стойки. (Половина длины стойки задается в XML грузовика значением параметра RackHalfSizeZ).
Ступичные кости вращаются вместе с ближайшими колесами. Однако ось вращения ступицы не совпадает с осью вращения колеса. Поэтому колесо должно не просто вращаться, но и двигаться по окружности, описанной вокруг места крепления ступицы. За это смещение отвечает параметр SteeringJointOffset в теге Wheel в XML трека.

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

Здесь в физике задействованы только две кости (BoneRotationBase_cdt, BoneArm1_cdt).

Для реализации работы гидропоршня нам потребуются две цепи костей с обратной кинематикой. BoneRod1, BoneRod2 и BonePistonBase, BonePiston.


Кость BoneRod1 прикреплена к BoneRotationBase_cdt с помощью константы Hinge. Кость BoneRod2 прикреплена к BoneRod1 константой Hinge. И локатор (в терминах Maya) обратной кинематики прикреплен к кости BoneArm1_cdt. Таким образом, их поведение полностью определяется положением физических костей.
Гидравлический поршень устроен аналогично, но локатор обратной кинематики прикреплен не к физической кости, а к кости из первой цепи — BoneRod2.
2.6.2.4. Shakers
Некоторые кости описаны в XML грузовика как «Шейкеры». Они нужны, например, для дребезжания выхлопной трубы или обеспечения вибрации работающего двигателя.
2.6.2.5. Rotators
Кости, которые описаны в XML грузовика как Ротаторы, помогут вращать вентилятор или аварийную лампочку.
3. ХМL Description of a Truck
3.1. XML сетки (/meshes/trucks)
Этот XML-файл содержит информацию о текстурах грузовика или аддона. Наряду с этим он может содержать некоторую специфическую информацию, например: описание точек крепления валов, параметры снежного покрова и другую информацию, связанную с сеткой.
3.2. XML класса грузовика (/classes/trucks)
В этом файле содержится вся информация о поведении грузовика в движке игры. Вот неполный список того, что там описано:
- Описание типа объекта - грузовик, аддон или прицеп.
- Описание физической модели Havok (характеристики взаимодействия физических костей друг с другом и с окружающей средой)
- Описание поведения костей, не связанных с физическим движком: шейкеры (вибрации, интенсивность которых зависит от текущей «мощности двигателя»), кости инверсной синематики (поведение которых зависит от положения других костей, но не от физической симуляции) и так далее.
- Assignment of control buttons
- Позиции и описание характеристик источников света
- В наличии двигатели, подвески, коробки передач
- Есть ли у грузовика дифференциал
- Типы, размеры и расположение колес.
- Types of the wheel drive
- Descriptions of cast shadows
- Поведение руля и колес, которые к нему подключены
- Положение и направление воздушного потока и выхлопа
- Position of the driver
- Положение внешней камеры и положение камеры от первого лица
- Характеристики повреждений двигателя и топливных баков
- Позиции аддонов и их взаимодействие с грузовиком и друг с другом
- Length of the winch
- Точки крепления лебедки
- Точки крепления кранового троса
- Price of truck
- Для грузовых автомобилей: Расположение камер в гараже; для аддонов: камера, которая активна при выборе аддона
- Описание модели грузовика на карте
3.3. XML класса приостановки (/classes/suspensions)
В этом файле содержится описание подвесок, доступных для конкретного грузовика. Обычно их два: дефолтный и повышенный (например, ank_mk38_suspension_default, ank_mk38_suspension_high).
Here you can specify:
- высота и жесткость подвески
- максимальный отрыв колес от грузовика при поломке подвески
- value of DamageCapacity
- значение CriticalDamageThreshold
- значение BrokenWheelDamageMultiplier
- price of the suspension
- параметры разблокировки этой подвески в игре
3.4. XML класса Engine (/classes/engines)
DamageCapacity и другие параметры повреждения двигателя, коэффициент расхода топлива, сила крутящего момента и так далее.
3.5. XML класса Gearbox (/classes/gearboxes)
Информация о повреждениях коробки передач, коэффициенте расхода топлива, информация о передачах.
3.6. XML настройки материала (/classes/customization_presets/customization_preset.xml)
Этот файл содержит пресеты настройки цвета для грузовика.
4. Description of Wheels
Есть два способа создания колеса:
- Вы можете создать колесо целиком. То есть в данном случае покрышка и обод представляют собой единое целое.
- Вы можете создать определенный вид колеса (например, набор колес), который будет содержать несколько сменных шин и дисков.
Fbx и XML-файлы сеток для колес, шин и дисков находятся в папке: /meshes/wheels.
XML-файлы классов колеса или набора колес находятся в папке: /classes/wheels.
4.1. Колесо как единое целое
Файл Fbx колеса содержит всю геометрию левого колеса. Какая часть колеса является шиной (которая может деформироваться), а какая — ободом — определяется параметром в XML-файле сетки колеса. XML класса содержит все характеристики колеса, такие как следующие: трение, жесткость шины, маркировка колеса, масса колеса, радиус и ширина колеса в Havok.
Если так описаны колеса грузовика, то поменять их нельзя. Более того, в этом случае в меню гаража нет опции выбора шин и дисков.
4.2. Колесо как комплект шин и дисков
Один файл Fbx содержит либо одну, либо две шины, либо один или два обода. Когда создается геометрия для колес, единых для всех осей грузовика (как на большинстве скаутов), то файл Fbx будет содержать только одну шину (с именем «tire») или только один диск (с именем «rim»). В случае сдвоенных колес (обычно задних колес грузовика) файл Fbx будет содержать две шины или два обода.
Иногда автомобиль имеет смешанные типы колес. Например, грузовик может иметь сдвоенные задние колеса и одинарные передние колеса.

В этом случае Fbx содержит как геометрию одинарной шины (обода), называемую «tire_front» («rim_front»), так и геометрию сдвоенной шины, называемую «tire_back» («rim_back»). В данном случае данные названия («tire_front»/«rim_front» и «tire_back»/«rim_back») для этих элементов строго необходимы, так как это позволяет правильно определить тип колеса и использовать один и тот же рисунок протектора или геометрию диска при кастомизации.

XML сетки содержит только информацию о материалах. XML класса содержит описание характеристик всех шин и дисков, доступных в данном типе колес.
To continue, please refer to:
- Часть №2 этого руководства — общие аспекты структуры XML (главы 5–6).
- Часть №3 — описание тегов и атрибутов, используемых для сеток и грузовиков (главы 7–8).
- Часть № 4 — для тегов и атрибутов, используемых для подвесок, двигателей, коробок передач, колес и дополнений (главы 9–14).
- Часть №5 — для тегов и атрибутов, используемых для создания пользовательских скинов и раскрашивания (глава 15).