Как сделать транспорт для FiveM в Blender с Sollumz 2.9

Автор: Nilo3D · Обновлено:

Модель транспорта FiveM это фрагмент (.yft): арматура, где каждая кость отвечает за часть машины, drawable с мешами и набор баундов коллизии. В Blender с Sollumz вы собираете эти три части, назначаете мешам шейдеры транспорта и экспортируете файлы .yft, _hi.yft и .ytd. Гайд написан по Sollumz 2.9.0 на Blender 5.2, названия панелей и кнопок приведены так, как они выглядят в аддоне.

Что мне понадобится?

ИнструментВерсияДля чего нужен
Blender4.2 или новее (Sollumz 2.9.0 задаёт 4.2 как минимальную версию; мы используем 5.2)Моделирование, риггинг, экспорт.
Sollumz2.9.0Аддон, который читает и записывает файлы моделей GTA V.
CodeWalkerПоследний релизПросмотр архивов игры и извлечение стокового транспорта в качестве образца.
GTA V для ПКИсточник образцового транспорта и общих текстур.

Sollumz устанавливается как расширение Blender. В Blender откройте Preferences > Get Extensions > Repositories > +, выберите Add Remote Repository и введите https://repo.sollumz.org/, затем найдите Sollumz и установите его. При первом запуске аддон предлагает установить зависимости. Согласитесь: одна из них, PyMateria, позволяет Sollumz напрямую записывать бинарные файлы игры. Для чего нужен каждый инструмент, сравнивается в гайде CodeWalker или Sollumz.

Где в Blender находятся инструменты Sollumz?

Инструменты находятся в боковой панели 3D-вьюпорта (клавиша N), на вкладке Sollumz Tools. Свойства выбранного объекта находятся в редакторе Properties, в панелях с названием Sollumz.

ГдеПанельЧто там делается
Sollumz ToolsGeneralImport RAGE Assets и Export RAGE Assets. Подпанель View показывает или скрывает коллизии и переключает уровень LOD на экране.
Sollumz ToolsDrawablesCreate Drawable Objects, Shader Tools, LOD Tools и Bone Tools.
Sollumz ToolsCollisionsCreate Bounds и Create Collision Material.
Sollumz ToolsFragmentsCreate Fragment Objects, Set Mass, Copy Bone Physics и Vehicle Tools (light ID, предпросмотр колёс и стёкол).
Properties > ObjectSollumzТип Sollumz объекта и его настройки.
Properties > BoneSollumzТег кости, флаги кости и переключатель Fragment Physics.
Properties > Data (меш)Sollumz LODsКакой меш используется на каждом уровне детализации.
Properties > MaterialSollumzШейдер, текстуры и значения шейдера.

Как устроен транспорт в Blender?

У каждого объекта в сцене Sollumz есть тип Sollumz. Транспорт выглядит как такое дерево:

mycar                  Armature, Sollumz type: Fragment (bones = the car's parts)
  mycar.mesh           Empty, Sollumz type: Drawable
    chassis            Mesh, Drawable Model (skinned to the bone "chassis")
    bodyshell          Mesh, Drawable Model
    door_dside_f       Mesh, Drawable Model
    wheel_lf           Mesh, Drawable Model, "Is Wheel Mesh" on
    ...
  mycar.col            Empty, Sollumz type: Bound Composite
    chassis.col        Bound Geometry, follows the bone "chassis"
    wheel_lf.col       Bound Disc, follows the bone "wheel_lf"
    door_dside_f.col   Bound Geometry, follows the bone "door_dside_f"
    ...
ЧастьОбъект BlenderТип Sollumz
ТранспортАрматура (Armature)Fragment
Видимая модельEmpty, дочерний объект арматурыDrawable
Каждый мешМеш, дочерний объект drawableDrawable Model
КоллизияEmpty, дочерний объект арматурыBound Composite
Каждая форма коллизииДочерний объект композитаBound Geometry, Bound Disc, Bound Box и так далее

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

Зачем начинать со стокового транспорта?

Импортируйте стоковый транспорт, наиболее близкий к вашему, через Import RAGE Assets и держите его в сцене, пока работаете. Выберите .yft; если рядом лежит _hi.yft, Sollumz объединит оба файла при импорте. Стоковый транспорт служит спецификацией: какие кости существуют, как они называются, какие формы коллизии используются, сколько весит каждая часть и какие у неё шейдеры.

Две привычки экономят здесь время:

  • Сначала переименуйте объекты образца, например добавив префикс ref_. Blender не допускает одинаковых имён объектов, поэтому, если имя chassis всё ещё занято образцом, ваш собственный меш молча станет chassis.001.
  • Скопируйте арматуру образца, а не создавайте кости вручную. Копия сохраняет теги костей, флаги костей и настройки физики. Затем передвиньте кости под свою модель и удалите те, которые не используете.

Какие кости нужны транспорту?

Машина использует фиксированный набор имён костей. Вот самые распространённые:

КостьЧасть
chassisКорень транспорта.
bodyshellПанели кузова, которые никогда не двигаются.
wheel_lf, wheel_rf, wheel_lr, wheel_rrКолёса: переднее левое, переднее правое, заднее левое, заднее правое.
door_dside_f, door_pside_f, door_dside_r, door_pside_rДвери со стороны водителя и со стороны пассажира, передние и задние.
bonnet, bootКапот и крышка багажника.
bumper_f, bumper_rБамперы, которые могут отвалиться.
seat_dside_f, seat_pside_f, seat_dside_r, seat_pside_rМеста, где сидит каждый пед.
steeringwheelРуль.
windscreen, window_lf, window_rfСтёкла.
headlight_l, headlight_r, taillight_l, taillight_r, indicator_lf, brakelight_l, reversinglight_lТочки, из которых светит каждый источник света.
misc_a, misc_b, ...Дополнительные подвижные или отделяемые части, например спойлер.

Сиденья и точки входа в vehiclelayouts.meta ссылаются на эти же кости. Позиции, которые мы измеряем на модели, а не подбираем на глаз:

  • Двери вращаются вокруг кости, поэтому кость ставится на линию петель: это передняя кромка обычной двери.
  • Капот: задняя кромка. Багажник: передняя кромка.
  • Руль: центр обода, а не центр всего объекта. Вместе с рулевой колонкой центр габаритного бокса на одной из конвертированных нами машин был смещён на 46 см.
  • Кости света: середина светящихся граней.

Каждый меш должен следовать за своей костью. Создайте в нём группу вершин с именем, точно совпадающим с именем кости, и весом 1 на каждой вершине, и добавьте модификатор арматуры. Bone Tools > Add Armature Modifier делает вторую часть для выбранных объектов. Чтобы посмотреть или изменить тег кости, выберите кость и откройте Properties > Bone > Sollumz.

Какие шейдеры используют материалы транспорта?

Материалы в Sollumz это шейдеры игры. Создайте материал в Drawables > Shader Tools кнопкой Create Shader Material или превратите существующий материал Blender в выбранный шейдер кнопками конвертации в той же панели. Вот шейдеры транспорта, которые используем мы, и их назначение:

ПоверхностьШейдерПримечание
Краска кузова, которую игроки могут перекраситьvehicle_paint1 и другие шейдеры vehicle_paintСлой краски (основной, дополнительный, перламутр, колёса, салон) задаётся в панели материала Fragment (Vehicle Paint).
Части с фиксированным цветом или текстурой: ливрея, пластик, металл, салонvehicle_meshИспользует diffuse-текстуру как есть.
Шины и дискиvehicle_tireИспользуйте его для всего колеса. В наших тестах части колеса на vehicle_mesh в игре не отрисовывались.
Стеклоvehicle_vehglass, vehicle_vehglass_innerВнешняя и внутренняя сторона каждого стекла.
Рассеиватели фар, неонvehicle_lightsemissiveСветится, когда включён соответствующий источник света.
Наклейки, сетки, шильдики с прозрачностьюvehicle_decal

Две вещи, которых не видно в Blender, определяют, как машина выглядит в игре:

  • Цвет вершин. В шейдерах mesh красный канал первого атрибута цвета умножается на текстуру. Меш с чёрным цветом вершин в игре будет чёрным, какой бы хорошей ни была текстура. Залейте его цветом, у которого красный равен 255.
  • Light ID. В vehicle_lightsemissive альфа-канал цвета вершин указывает, к какому источнику света относятся грани. Он задаётся в Fragments > Vehicle Tools > Light IDs: перейдите в Edit Mode с выделением граней, выделите грани, выберите источник света и нажмите Set Light ID.
Light IDСвет
0Всегда включён
1, 2Левая и правая фара
3, 4Левый и правый задний фонарь
5, 6, 7, 8Поворотники: передний левый, передний правый, задний левый, задний правый
9, 10, 11Стоп-сигналы: левый, правый, центральный
12, 13Фонари заднего хода: левый и правый
с 14 по 17Дополнительные источники света

Что касается текстур: оставьте diffuse от своей модели, а карты specular, normal и грязи по возможности берите из общих текстур транспорта игры. Размеры и форматы описаны в гайде об оптимизации транспорта FiveM.

Как работают колёса?

Игра рисует одну модель колеса на всех колёсах. Смоделируйте колесо один раз как wheel_lf, с центром на его кости, и включите Is Wheel Mesh в Properties > Object > Sollumz. Без этого переключателя колесо экспортируется как часть кузова: у машины одно колесо висит на месте, а на остальных ступицах колёс нет. Vehicle Tools > Preview Wheel Instances показывает колесо на всех четырёх позициях прямо в Blender.

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

Как в Sollumz работают LOD и файл _hi.yft?

Каждый Drawable Model может содержать пять мешей: Very High, High, Medium, Low и Very Low. Они перечислены в Properties > Data > Sollumz LODs. При экспорте Sollumz записывает меши Very High в <name>_hi.yft, а остальные четыре в <name>.yft. Вручную ничего разделять не нужно: если хотя бы у одной модели есть меш Very High, файл _hi создаётся.

Как сгенерировать младшие уровни и что писать в lodDistances, описано в гайде об оптимизации транспорта FiveM.

Как экспортировать .yft и .ytd?

Выберите фрагмент (арматуру) и нажмите Export RAGE Assets в Sollumz Tools > General. Настройки, важные для транспорта:

НастройкаЗначениеЗачем
Target FormatsNativeЗаписывает бинарные файлы, которые игра загружает напрямую. CW XML записывает CodeWalker XML, читаемую текстовую версию, удобную для проверки результата.
Target Game VersionsGen8Gen8 означает GTA V Legacy, а Gen9 означает GTA V Enhanced. Если включены оба, файлы попадают в подпапки gen8/ и gen9/.
Limit to SelectedВкл.Экспортирует только то, что выбрано и видимо.
Texture DictionariesВкл., Include: SelectedЗаписывает .ytd. С вариантом All вы получите ещё и словарь образцового транспорта.

В результате получаются mycar.yft, mycar_hi.yft и mycar.ytd. Скрытый объект выбрать нельзя, а Sollumz скрывает меши при переключении уровня LOD, поэтому, если ничего не записалось или в логе стоит "No Sollumz objects selected for export!", сделайте транспорт видимым и выберите его снова. После каждого экспорта перед тестом смотрите время изменения файла на диске.

Что проверить перед тестом в игре?

  • У каждой кости с включённым Fragment Physics есть коллизия. Если у какой-то её нет, экспорт предупреждает: "Bone has physics enabled, but no associated collision!".
  • Ни у одного меша нет чёрного цвета вершин.
  • Каждая текстура, которую использует материал, есть в .ytd или намеренно берётся из общих текстур транспорта игры.
  • У меша колеса включён Is Wheel Mesh.
  • Масштаб применён: на арматуре не осталось масштаба.
  • Каждый файл проходит проверку размера на сервере. См. предупреждение oversized assets.

Как перенести модель в FiveM?

Положите три файла в папку stream ресурса. Самый быстрый первый тест: назвать их именем стокового транспорта, например sultan.yft, sultan_hi.yft и sultan.ytd. Тогда игра рисует вашу модель везде, где спавнится Sultan, с его handling и сиденьями, и meta-файлы пока не нужны.

Когда модель выглядит правильно, дайте ей собственное имя и meta-файлы, чтобы она загружалась рядом со стоковыми машинами. Эта часть описана в гайде о добавлении аддон-транспорта на сервер FiveM.

Частые вопросы

Какая версия Blender нужна для Sollumz 2.9?
Sollumz 2.9.0 задаёт Blender 4.2 как минимальную версию. Мы используем его на Blender 5.2.
Может ли Sollumz экспортировать файлы .yft напрямую?
Да. Если в опции Target Formats выбрано Native, Sollumz записывает бинарные файлы .yft, .ydr и .ytd, которые игра загружает напрямую. Для этого нужна зависимость PyMateria, которую аддон предлагает установить. Вариант CW XML вместо этого записывает CodeWalker XML.
Что экспортировать для FiveM: Gen8 или Gen9?
Gen8. В Sollumz Gen8 означает GTA V Legacy, а Gen9 означает GTA V Enhanced.
Как Sollumz создаёт файл _hi.yft?
Автоматически. Меши в слоте LOD Very High записываются в name_hi.yft, а меши High, Medium, Low и Very Low в name.yft.
Почему мой транспорт в игре чёрный?
Обычно потому, что у меша чёрный цвет вершин. В шейдерах vehicle mesh красный канал цвета вершин умножается на текстуру, поэтому закрасьте меш цветом, у которого красный равен 255.

Источники

Товары из гайда

Все гайды