How to make a FiveM vehicle in Blender with Sollumz 2.9

By Nilo3D · Updated:

A FiveM vehicle model is a fragment (.yft): an armature whose bones are the parts of the car, a drawable holding the meshes, and a set of collision bounds. In Blender with Sollumz you build those three, give the meshes vehicle shaders, and export .yft, _hi.yft and .ytd files. This guide follows Sollumz 2.9.0 on Blender 5.2, with the panel and button names as they appear in the add-on.

What do I need?

ToolVersionUsed for
Blender4.2 or newer (Sollumz 2.9.0 sets 4.2 as its minimum; we use 5.2)Modelling, rigging, export.
Sollumz2.9.0The add-on that reads and writes GTA V model files.
CodeWalkerLatest releaseBrowsing the game archives and extracting a stock vehicle to use as reference.
GTA V for PCSource of the reference vehicle and the shared textures.

Sollumz installs as a Blender extension. In Blender go to Preferences > Get Extensions > Repositories > +, choose Add Remote Repository and enter https://repo.sollumz.org/, then search for Sollumz and install it. On first start the add-on asks to install its dependencies. Accept: one of them, PyMateria, is what lets Sollumz write the game's binary files directly. What each tool is for is compared in CodeWalker vs Sollumz.

Where are the Sollumz tools in Blender?

The tools are in the sidebar of the 3D viewport (press N), in the tab Sollumz Tools. Properties of the selected thing are in the Properties editor, in panels named Sollumz.

WherePanelWhat you do there
Sollumz ToolsGeneralImport RAGE Assets and Export RAGE Assets. The View sub-panel shows or hides collisions and switches the LOD level on screen.
Sollumz ToolsDrawablesCreate Drawable Objects, Shader Tools, LOD Tools and Bone Tools.
Sollumz ToolsCollisionsCreate Bounds and Create Collision Material.
Sollumz ToolsFragmentsCreate Fragment Objects, Set Mass, Copy Bone Physics and Vehicle Tools (light IDs, wheel and window previews).
Properties > ObjectSollumzThe Sollumz type of the object and its settings.
Properties > BoneSollumzBone tag, bone flags and the Fragment Physics switch.
Properties > Data (mesh)Sollumz LODsWhich mesh is used at each level of detail.
Properties > MaterialSollumzShader, textures and shader values.

How is a vehicle structured in Blender?

Every object in a Sollumz scene has a Sollumz type. A vehicle is this tree:

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"
    ...
PartBlender objectSollumz type
The vehicleArmatureFragment
Visible modelEmpty, child of the armatureDrawable
Each meshMesh, child of the drawableDrawable Model
CollisionEmpty, child of the armatureBound Composite
Each collision shapeChild of the compositeBound Geometry, Bound Disc, Bound Box and so on

The root has to be the armature. The game does not find doors, wheels and seats by mesh name. It finds bones, and each bone carries a numeric tag that Sollumz derives from the bone name. That is why bone names have to be exact.

Why start from a stock vehicle?

Import the stock vehicle closest to yours with Import RAGE Assets and keep it in the scene while you work. Select the .yft; when the _hi.yft sits next to it, Sollumz merges the two on import. The stock vehicle is the specification: which bones exist, how they are named, which collision shapes it uses, what each part weighs and which shaders it has.

Two habits save time here:

  • Rename the reference objects first, for example with a ref_ prefix. Blender keeps object names unique, so if the reference still owns the name chassis, your own mesh silently becomes chassis.001.
  • Copy the reference armature instead of creating bones by hand. The copy keeps bone tags, bone flags and physics settings. Then move the bones to fit your model and delete the ones you do not use.

Which bones does a vehicle need?

A car uses a fixed vocabulary of bone names. These are the common ones:

BonePart
chassisRoot of the vehicle.
bodyshellBody panels that never move.
wheel_lf, wheel_rf, wheel_lr, wheel_rrWheels: left front, right front, left rear, right rear.
door_dside_f, door_pside_f, door_dside_r, door_pside_rDoors, driver side and passenger side, front and rear.
bonnet, bootHood and trunk lid.
bumper_f, bumper_rBumpers, which can fall off.
seat_dside_f, seat_pside_f, seat_dside_r, seat_pside_rWhere each ped sits.
steeringwheelThe steering wheel.
windscreen, window_lf, window_rfGlass panes.
headlight_l, headlight_r, taillight_l, taillight_r, indicator_lf, brakelight_l, reversinglight_lWhere each light shines from.
misc_a, misc_b, ...Extra moving or detachable parts, such as a wing.

Seats and entry points in vehiclelayouts.meta refer to these same bones. Positions that we measure on the model instead of guessing:

  • Doors pivot on the bone, so the bone goes on the hinge line: the front edge of a normal door.
  • Bonnet: rear edge. Boot: front edge.
  • Steering wheel: the centre of the rim, not the centre of the whole object. With the steering column included, the bounding box centre was 46 cm off on one car we converted.
  • Light bones: the middle of the faces that glow.

Each mesh has to follow its bone. Give it a vertex group named exactly like the bone with weight 1 on every vertex, and add an armature modifier. Bone Tools > Add Armature Modifier does the second part for the selected objects. To see or change a bone tag, select the bone and open Properties > Bone > Sollumz.

Which shaders do vehicle materials use?

Sollumz materials are game shaders. Create one in Drawables > Shader Tools with Create Shader Material, or turn an existing Blender material into the selected shader with the convert buttons in the same panel. These are the vehicle shaders we use and what for:

SurfaceShaderNote
Body paint that players can resprayvehicle_paint1 and the other vehicle_paint shadersThe paint layer (primary, secondary, pearlescent, wheel, interior) is set in the material's Fragment (Vehicle Paint) panel.
Fixed colour or textured parts: livery, plastics, metal, interiorvehicle_meshUses the diffuse texture as it is.
Tyres and rimsvehicle_tireUse it for the whole wheel. Parts of a wheel on vehicle_mesh did not render in game in our tests.
Glassvehicle_vehglass, vehicle_vehglass_innerOuter and inner face of each pane.
Lamp lenses, neonvehicle_lightsemissiveGlows when the matching light is on.
Stickers, nets, badges with transparencyvehicle_decal

Two things that are not visible in Blender decide how the car looks in game:

  • Vertex colour. On the mesh shaders the red channel of the first colour attribute multiplies the texture. A mesh with black vertex colour is black in game however good its texture is. Fill it with a colour whose red is 255.
  • Light ID. On vehicle_lightsemissive the alpha channel of the vertex colour says which light the faces belong to. Set it in Fragments > Vehicle Tools > Light IDs: go to Edit Mode with face selection, select the faces, pick the light and press Set Light ID.
Light IDLight
0Always on
1, 2Left and right headlight
3, 4Left and right taillight
5, 6, 7, 8Indicators: front left, front right, rear left, rear right
9, 10, 11Brake lights: left, right, centre
12, 13Reversing lights: left and right
14 to 17Extra lights

For textures, keep the diffuse from your model and take specular, normal and dirt maps from the game's shared vehicle textures when you can. Sizes and formats are in optimising a FiveM vehicle.

How do wheels work?

The game draws one wheel model on every wheel. Model the wheel once as wheel_lf, centred on its bone, and tick Is Wheel Mesh in Properties > Object > Sollumz. Without that switch the wheel is exported as part of the body: the car shows up with one wheel floating in place and none on the other hubs. Vehicle Tools > Preview Wheel Instances shows the wheel on all four positions inside Blender.

Each wheel also needs its own collision disc so the car has something to roll on. That is covered in vehicle collision in Sollumz.

How do LODs and the _hi.yft file work in Sollumz?

Every Drawable Model can hold five meshes: Very High, High, Medium, Low and Very Low. They are listed in Properties > Data > Sollumz LODs. On export, Sollumz writes the Very High meshes to <name>_hi.yft and the other four to <name>.yft. There is nothing to split by hand: if any model has a Very High mesh, the _hi file is created.

How to generate the lower levels, and what to put in lodDistances, is in optimising a FiveM vehicle.

How do I export the .yft and .ytd?

Select the fragment (the armature) and press Export RAGE Assets in Sollumz Tools > General. The settings that matter for a vehicle:

SettingValueWhy
Target FormatsNativeWrites binary files the game loads directly. CW XML writes CodeWalker XML, a readable text version that is useful for checking the result.
Target Game VersionsGen8Gen8 is GTA V Legacy and Gen9 is GTA V Enhanced. With both on, files go to gen8/ and gen9/ subfolders.
Limit to SelectedOnExports only what is selected and visible.
Texture DictionariesOn, Include: SelectedWrites the .ytd. With All you also get the dictionary of the reference vehicle.

The result is mycar.yft, mycar_hi.yft and mycar.ytd. A hidden object cannot be selected, and Sollumz hides meshes when you switch LOD level, so if nothing is written or the log says "No Sollumz objects selected for export!", unhide the vehicle and select it again. After every export, look at the file time on disk before testing.

What should I check before testing in game?

  • Every bone with Fragment Physics on has a collision. If one does not, the export warns: "Bone has physics enabled, but no associated collision!".
  • No mesh has black vertex colour.
  • Every texture a material uses is in the .ytd, or comes from the game's shared vehicle textures on purpose.
  • The wheel mesh has Is Wheel Mesh on.
  • Scale is applied: no scale left on the armature.
  • Each file is within the server's size check. See the oversized asset warning.

How do I get the model into FiveM?

Put the three files in the stream folder of a resource. The quickest first test is to name them after a stock vehicle, for example sultan.yft, sultan_hi.yft and sultan.ytd: the game then draws your model wherever a Sultan spawns, with the Sultan's handling and seats, and you need no meta file yet.

When the model looks right, give it its own name and metas so it loads next to the stock cars. That part is in how to add an add-on vehicle to a FiveM server.

Frequently asked questions

Which Blender version does Sollumz 2.9 need?
Sollumz 2.9.0 sets Blender 4.2 as its minimum version. We use it on Blender 5.2.
Can Sollumz export .yft files directly?
Yes. With the Target Formats option set to Native, Sollumz writes binary .yft, .ydr and .ytd files the game loads directly. This needs the PyMateria dependency that the add-on offers to install. The CW XML option writes CodeWalker XML instead.
Should I export Gen8 or Gen9 for FiveM?
Gen8. In Sollumz, Gen8 means GTA V Legacy and Gen9 means GTA V Enhanced.
How does Sollumz create the _hi.yft file?
Automatically. Meshes in the Very High LOD slot are written to name_hi.yft and the High, Medium, Low and Very Low meshes to name.yft.
Why is my vehicle black in game?
Usually because the mesh has black vertex colour. On the vehicle mesh shaders the red channel of the vertex colour multiplies the texture, so paint the mesh with a colour whose red is 255.

Sources

Products from this guide

All guides