# Welcome

Thank you for using Sollumz, the only GTA V modding suite for Blender!

### Prerequisite Knowledge

* A basic understanding of Blender and 3D modeling. ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* A basic understanding of modding in GTA V including using CodeWalker.

### Requirements

* Blender 4.0 or later - [blender.org](http://www.blender.org/download/)
* Latest version of CodeWalker found in #releases channel. [Download](https://discord.com/invite/codewalker)

### Reporting Bugs and Making Feature Requests

If you think you've found a bug or you wish to request a feature, please use the [issue tracker on GitHub](https://github.com/Sollumz/Sollumz/issues). Be sure you extensively troubleshoot the issue first to ensure a bug is actually present.

### **Our Community**

Join the [discord](https://discord.gg/bZuWBWaQBg) and be a part of our growing community!


# Features

[**Key**](#user-content-fn-1)[^1]

🟩 Fully implemented

🟧 Partially implemented

🟥 Not implemented

{% hint style="info" %}
Since this plugin was designed around CodeWalker's XML file formats, OpenIV is not explicitly supported. You may experience issues going from Sollumz > CodeWalker > OpenIV. It's highly recommended that you just use CodeWalker.
{% endhint %}

### **File Formats**

<table><thead><tr><th width="211">Asset Type</th><th width="138">File Extension</th><th width="84" align="center">Import</th><th align="center">Export</th></tr></thead><tbody><tr><td>Drawable</td><td>.ydr.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Drawable Dictionary</td><td>.ydd.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Static Collision</td><td>.ybn.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Fragment</td><td>.yft.xml</td><td align="center">🟧</td><td align="center">🟧</td></tr><tr><td>Clip Dictionary</td><td>.ycd.xml</td><td align="center">🟧</td><td align="center">🟧</td></tr><tr><td>Map Data</td><td>.ymap.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Archetype Definition</td><td>.ytyp.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr></tbody></table>

### Specific Features

#### Drawable (.ydr)

<table><thead><tr><th width="416">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Mesh editing</td><td align="center">🟩</td></tr><tr><td>Embedded collisions</td><td align="center">🟩</td></tr><tr><td>Shader editing</td><td align="center">🟩</td></tr><tr><td>Terrain shader painting</td><td align="center">🟩</td></tr><tr><td>Tint shaders</td><td align="center">🟩</td></tr><tr><td>Props</td><td align="center">🟩</td></tr><tr><td>Shader preview</td><td align="center">🟧</td></tr></tbody></table>

#### Drawable Dictionary (.ydd)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Editing Drawable Dictionaries</td><td align="center">🟩</td></tr><tr><td>Importing with external skeleton</td><td align="center">🟩</td></tr></tbody></table>

#### Static Collision (.ybn)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Collision editing</td><td align="center">🟩</td></tr></tbody></table>

#### Fragment (.yft)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Vehicles</td><td align="center">🟩</td></tr><tr><td>Breakable props (i.e. street lights)</td><td align="center">🟩</td></tr><tr><td>Breakable glass props</td><td align="center">🟩</td></tr><tr><td>Explodable props (i.e. gas tanks)</td><td align="center">🟩</td></tr><tr><td>Ped yfts</td><td align="center">🟥</td></tr><tr><td>Cloth yfts</td><td align="center">🟩</td></tr></tbody></table>

<details>

<summary>Unsupported Ped YFTs</summary>

The following is a list of unsupported ped YFTs. These YFTs contain unknown ragdoll physics data that is not handled by Sollumz. Currently, it is not possible to create completely custom player skeletons.

```
z_z_alien.yft 
z_z_fred.yft 
z_z_fred_large.yft 
z_z_wilma.yft 
z_z_wilma_large.yft 
a_c_boar.yft 
a_c_cat_01.yft 
a_c_chickenhawk.yft 
a_c_chimp.yft 
a_c_cormorant.yft 
a_c_cow.yft 
a_c_coyote.yft 
a_c_crow.yft 
a_c_deer.yft 
a_c_dolphin.yft 
a_c_fish.yft 
a_c_hen.yft 
a_c_humpback.yft 
a_c_killerwhale.yft 
a_c_pig.yft 
a_c_pigeon.yft 
a_c_poodle.yft 
a_c_pug.yft 
a_c_rabbit_01.yft 
a_c_rat.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_sharkhammer.yft 
a_c_stingray.yft 
a_c_westy.yft 
a_c_whalegrey.yft 
a_c_chop.yft 
a_c_husky.yft 
a_c_mtlion.yft 
a_c_retriever.yft 
a_c_rottweiler.yft 
a_c_sharktiger.yft 
a_c_shepherd.yft 
a_c_chimp_02.yft 
a_c_rabbit_02.yft 
a_c_panther.yft 
a_c_chickenhawk.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_chop_02.yft 
a_c_chickenhawk.yft 
```

</details>

#### Clip Dictionary (.ycd)

<table><thead><tr><th width="416">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Skeletal Animations</td><td align="center">🟩</td></tr><tr><td>UV Animations</td><td align="center">🟩</td></tr><tr><td>Camera Animations</td><td align="center">🟩</td></tr><tr><td>Light Animations</td><td align="center">🟧</td></tr></tbody></table>

#### **Map Data (.ymap)**

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Entities</td><td align="center">🟩</td></tr><tr><td>Entity LOD Hierarchies</td><td align="center">🟩</td></tr><tr><td>Car Generators</td><td align="center">🟩</td></tr><tr><td>Occluders</td><td align="center">🟩</td></tr><tr><td>Time Cycle Modifiers</td><td align="center">🟩</td></tr><tr><td>Grass Batches</td><td align="center">🟩</td></tr><tr><td>LOD Lights</td><td align="center">🟩</td></tr></tbody></table>

#### Archetype Definition (.ytyp)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Base Archetypes</td><td align="center">🟩</td></tr><tr><td>Time Archetypes</td><td align="center">🟩</td></tr><tr><td>MLO Archetypes</td><td align="center">🟩</td></tr><tr><td>Create rooms from vertices</td><td align="center">🟩</td></tr><tr><td>Create portals from vertices</td><td align="center">🟩</td></tr><tr><td>Entity Extensions</td><td align="center">🟩</td></tr><tr><td>Entity Sets</td><td align="center">🟩</td></tr></tbody></table>

[^1]:


# Installation

## Blender 4.2+

Starting with Blender 4.2, Sollumz can now be installed as an extension from our repository <https://repo.sollumz.org/>.

First, add `https://repo.sollumz.org/` as a remote repository by navigating to `Preferences` > `Get Extensions` > `Repositories` > `+` > `Add Remote Repository`:

<figure><img src="/files/gNsi1BvUiyQzPHom5BOh" alt=""><figcaption></figcaption></figure>

Next, search for "Sollumz". You will see two available versions to install:

1. **Sollumz**: The official release version, identical to what can be downloaded from the release page.
2. **Sollumz (Development)**: The latest development build, which may be unstable. Use this version to test new features and updates, and provide feedback to help us improve.

Choose your preferred version and click `Install`:

<figure><img src="/files/YXrGqvRXmloGnrtZNzo1" alt=""><figcaption></figcaption></figure>

Once installed, you can easily update to newer versions directly within Blender. You will see an `Update` button whenever new versions are available.

<figure><img src="/files/3FCR43BLgUJ8KupR2HeX" alt=""><figcaption></figcaption></figure>

## Previous Blender Versions

Download `Sollumz.zip` from the [latest release page](https://github.com/Sollumz/Sollumz/releases/latest).

Open Blender, go to `Edit` > `Preferences` > `Add-ons`

<figure><img src="/files/yqpS2MSr7BP08DOzbYKi" alt="" width="563"><figcaption></figcaption></figure>

Click `Install...` and select the downloaded zip file.

Now enable the add-on by checking the checkbox.

<figure><img src="https://i.imgur.com/YnVdn4k.gif" alt="" width="563"><figcaption></figcaption></figure>

Restart Blender.


# Creating Your First Asset

Jump right in and create your first game asset by following one of our tutorials! We recommended you start with these tutorials first, as the other tutorials build off knowledge from these tutorials.

{% content-ref url="/pages/T6NL0v2SwwA0ABWxpM1T" %}
[Creating Static Meshes](/tutorials/creating-static-meshes)
{% endcontent-ref %}

{% content-ref url="/pages/W4iIHjyKff3Ou0UA0ZQO" %}
[Creating Static Collisions](/tutorials/creating-static-collisions)
{% endcontent-ref %}

{% content-ref url="/pages/sndikrXvJpLejzPudWB7" %}
[Creating Props](/tutorials/creating-props)
{% endcontent-ref %}

It's also highly recommended that you check out the documentation section. There you will find detailed information about each file type and how it is represented in Blender.

{% content-ref url="/pages/jjfq3GUVDJ5YgTlnOROP" %}
[Drawables (.ydr)](/documentation/drawables.ydr)
{% endcontent-ref %}


# FAQ

Frequently Asked Questions

### When I import a YDR/YFT/YDD the textures are not loaded

* From the CodeWalker RPF Explorer, open the asset with the textures.
* Click the save icon in the top right, then click "Save All Textures"
* In Blender, press the `V` key, then click `Find Missing Files` and select the folder where you saved the textures.

<div align="left"><figure><img src="https://i.imgur.com/vbXzGXx.gif" alt="" width="563"><figcaption></figcaption></figure></div>

* **Alternatively**, export all textures into a folder with the same name as the file you are importing. For instance, if you wanted to import `adder.yft` with all of its textures, you would export all textures to a folder called `adder` in the same directory. Then, when you import into Sollumz, all textures will be automatically loaded from the `adder` folder.

***

### My MLO shows up in CodeWalker but not in game.

* Make sure you generate a "\_manifest.ymf" file from the CodeWalker project window with your MLO, YMAP, and YTYP in it.

***

### I'm getting an error when importing a file.

* 9 out of 10 times it is due to having an outdated Sollumz version. Try updating.

***

### I'm getting the message `No Sollumz objects in the scene to export!` or `No Sollumz objects selected for export!`

* Check if the "Limit to Selected" export option is ticked. If so, only the selected objects will export.
* Make sure all of your objects have their sollum type set, otherwise, they will not be recognized by the add-on.
* As a last resort, you can select the parent object and use `Sollumz Tools > General > Debug > Fix Hierarchy`

***

### I'm getting the error `TypeError: create_uvsphere: keyword "diameter" is invalid for this operator.`

* Update your Sollumz.

***

### I'm getting the error `KeyError: 'bpy_prop_collection[key]: key "Image Texture" not found'`

* One of your materials has a missing node connection between Color node and an Image Texture, which is 100% needed in order to export the model.
* Check shading tab to find more.

***

### I'm getting the error `KeyError: 'bpy_prop_collection[key]: key "Principled BSDF" not found'`

* Only the Principled BSDF shader is supported during material conversion operations, anything else must be converted or recreated using Principled BSDF as base.

***

### I created a collision (external or embedded) but it isn't working.

* Remember to apply `General (default)` flags to your `Bound GeometryBVH` object from the `Sollumz Tools > Collision Tools > Flag Presets` menu.

***

### I'm having issues importing the file into OpenIV

* Since this plugin was designed around CodeWalker's XML file formats, OpenIV is not explicitly supported. You may experience issues going from Sollumz > CodeWalker > OpenIV. It's highly recommended that you just use CodeWalker.

***

### Why the vertices amount is doubled or tripled after exporting my model?

* Vertices in Blender and in game meshes have different meaning. For Blender, it is basically just a position. For the game, it is position + attributes (normals, colors, UVs, etc). Closer to what Blender calls "Face Corners".<br>

  Don't think Blender shows the number of face corners anywhere without python, but after triangulization, it is basically number of faces\*3.<br>

  On export, Sollumz removes duplicate face corners when it can, when position and all its attributes are the same. So the final vertex count in the game mesh is somewhere between number of vertices and number of face corners.<br>

  Anyways, number of faces is more representative of the model quality/performance, so just use that, not vertices.

***

### My model is invisible after importing to CodeWalker

* Check the UV Maps and Color Attribute names, they have to follow the Sollumz naming convention. Sollumz is warning a user when names don't match.

<figure><img src="/files/pROCyXSTsVgTExuWAp8O" alt=""><figcaption></figcaption></figure>

UV Maps and Color Attribute should be changed to the following

<figure><img src="/files/QOf5Z0i1xjSs9ThMgCg4" alt=""><figcaption></figcaption></figure>

***

## I try to import a XML but nothing happens!

Make sure the "Import To Asset Library" checkbox is unchecked and try to import again.<br>

<figure><img src="/files/KVHNbBBpbbxnaHbMNLkN" alt=""><figcaption></figcaption></figure>

***

#### I have embedded or linked a ytd to my model but it doesnt show.

Sollumz required textures to be added to shaders. (see Creating Static Meshes)

The texture must be a .dds file. (png, bmp etc will not work.)&#x20;

The dds must be 'power of 2' ie 512x512, 128x64 etc. You can use any graphics software to edit the size as long as it saves in dds format with mipmaps and as a dtx1 for models.

Maximum recommended size for textures is 2048 to ensure your model is optimised. Download textures from the game for examples and use on your models.

For Clothing textures, see&#x20;

{% embed url="<https://docs.sollumz.org/tutorials/basic-clothes-editing>" %}

***

## Why can't I see CodeWalker XML to import or export files?

Sollumz can now import and export native files as well as XML files. These are referred to as RAGE (Rockstar Advanced Game Engine) assets. This allows you to directly import files without exporting as XML.

For example: db\_apart\_06.ydr or db\_apart\_06.ydr.xml\
\
There is the option in the export window to choose native or CW XML for Legacy (Gen8) or Enhanced (Gen9). Note, some files will still be required to be imported as XML.

<figure><img src="/files/Suaw5hU6nVK8dGFypteM" alt=""><figcaption></figcaption></figure>


# Getting Help

If you have any questions, feel free to ask on our [Discord](https://discord.gg/sollumz) server. Please use the "[help](https://discord.com/channels/899043946142003240/1124818456022356039)" channel.

### Before asking

Helpers are taking time out of their day to help you, so please make an effort to provide as much detail as possible in your post. See the pinned post "[How to ask questions](https://discord.com/channels/899043946142003240/1124854088601972807)" for guidelines on how to ask questions.

{% hint style="info" %}
Common sense is a must. Please check that you haven't done anything basic wrong, such as installation, misunderstanding about 3D formats, wrong Blender version, etc.
{% endhint %}

{% hint style="info" %}
Make sure your question has not been asked before. Use the search function on our Discord server to find information about your problem.
{% endhint %}

{% hint style="info" %}
If you have zero experience using Blender, learn the basics before asking anything.
{% endhint %}

{% hint style="info" %}
Check FAQ section to look across the most asked questions.
{% endhint %}


# Files not supported by Sollumz

Not every file type found in GTA is supported by Sollumz.

## Ped YFTs (.yft) with articulated skeletons

Skeleton yfts (like `mp_f_freemode_01.yft`) **are supported**, as they just contain skeletons. However, some ped yfts also contain additional unknown physics data which is not handled by Sollumz. Here is a list of ped yfts that are **not** supported.

```
z_z_alien.yft 
z_z_fred.yft 
z_z_fred_large.yft 
z_z_wilma.yft 
z_z_wilma_large.yft 
a_c_boar.yft 
a_c_cat_01.yft 
a_c_chickenhawk.yft 
a_c_chimp.yft 
a_c_cormorant.yft 
a_c_cow.yft 
a_c_coyote.yft 
a_c_crow.yft 
a_c_deer.yft 
a_c_dolphin.yft 
a_c_fish.yft 
a_c_hen.yft 
a_c_humpback.yft 
a_c_killerwhale.yft 
a_c_pig.yft 
a_c_pigeon.yft 
a_c_poodle.yft 
a_c_pug.yft 
a_c_rabbit_01.yft 
a_c_rat.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_sharkhammer.yft 
a_c_stingray.yft 
a_c_westy.yft 
a_c_whalegrey.yft 
a_c_chop.yft 
a_c_husky.yft 
a_c_mtlion.yft 
a_c_retriever.yft 
a_c_rottweiler.yft 
a_c_sharktiger.yft 
a_c_shepherd.yft 
a_c_chimp_02.yft 
a_c_rabbit_02.yft 
a_c_panther.yft 
a_c_chickenhawk.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_chop_02.yft 
a_c_chickenhawk.yft
```


# Creating Static Meshes

Game meshes are stored in the [Drawable (.ydr)](https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr) file format. Creating Drawables in Sollumz is very simple. This tutorial will walk you through step-by-step.

### Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* Know how to create YMAPs to place objects in CodeWalker ([Here's a basic tutorial](https://www.youtube.com/watch?v=W0YPabgu8oo))
* Know how to either stream assets in a FiveM server or load mods into the base-game

### What you will need

* A UV-mapped 3D mesh of your choice
* Textures for the mesh

You can also follow along with the tutorial by using the assets below:

{% file src="/files/q6QQ95rAYyjU4x4x8kc3" %}

### Converting to a Drawable

The first thing to do is convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawable > Create Drawable Objects`.

<figure><img src="/files/VgGRKA7baw87cG8Vz6Fi" alt=""><figcaption><p>Converting to Drawable</p></figcaption></figure>

You'll notice that an empty object gets created called "Drawable" and the objects that were selected are now Drawable models.

<div align="left"><figure><img src="/files/tfc7IeLBXzyH4rsAzKlG" alt=""><figcaption><p>Drawable hierarchy</p></figcaption></figure></div>

If you navigate to `Mesh Properties > Sollumz LODs` you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.

<div align="left"><figure><img src="/files/sCUHn50rN7QZ8FE1dLVZ" alt=""><figcaption><p>Mesh Properties > Sollumz LODs</p></figcaption></figure></div>

### Adding Materials

Next, we need to add materials to the Drawable Models. With one of the Drawable Models selected, open the `Sollumz Tools > Drawable > Shader Tools` panel. For this tutorial, I will use the "NORMAL" shader which allows us to specify a base color and a normal map. Search for the "NORMAL" shader and click `Create Shader Material`.

<div align="left"><figure><img src="/files/g2VhTj8vY5gn9ZyvY6IU" alt=""><figcaption><p>Creating Sollumz material</p></figcaption></figure></div>

With the newly added material selected, head to the shading tab and assign your textures.

<div align="left"><figure><img src="/files/QFKHpnEnJOLOaKF2FK4G" alt=""><figcaption><p>Assigning textures</p></figcaption></figure></div>

Repeat the process for any other Drawable Models. In my case, I am just going to use the same material for the "crate\_top" Drawable Model.

### Embedding Textures

Lastly, we need to set the textures as embedded. This will embed the textures into the YDR file, so we don't have to create a texture dictionary file (.ytd). With both objects selected, navigate to `Sollumz Tools > Drawable > Shader Tools` and click `Set all Materials Embedded.`

<div align="left"><figure><img src="/files/dvNMmS2LLdsOkOnewjBB" alt=""><figcaption><p>Sollumz Tools > Drawable > Shader Tools > Set All Materials Embedded</p></figcaption></figure></div>

### Exporting

Before exporting I'm going to rename my Drawable to something more descriptive like "crate". Once you're happy with everything, export the Drawable by clicking File > Export > Codewalker XML. I am going to also enable `Export with ytyp`. This will automatically generate a YTYP with the Drawable we created already defined.

<div align="left"><figure><img src="/files/d1zV8uk19d9wCxjcozKc" alt=""><figcaption><p>File > Export > Codewalker XML</p></figcaption></figure></div>

{% hint style="info" %}
You can also import/export via the Sollumz pie menu by pressing V and choosing "Export CodeWalker XML"
{% endhint %}

Your Drawable is now ready to be loaded into the game!

### Getting Files Ready to Stream

Convert the ydr.xml and ytyp.xml using CodeWalker.

<div align="left"><figure><img src="/files/zrqgXNtXXXOgh6wPNRKF" alt=""><figcaption></figcaption></figure></div>

Open the converted files in a CodeWalker project.

<div align="left"><figure><img src="/files/GOZNhFrSPC3VNj0pu55a" alt=""><figcaption></figcaption></figure></div>

Add a YMAP to the project and add the newly created Drawable as an entity.

<div align="left"><figure><img src="/files/rQibdgkNIe5X0MPcB0EC" alt=""><figcaption></figcaption></figure></div>

Position the entity to your liking, then export the YMAP.

{% hint style="warning" %}
Don't forget to generate \_manifest.ymf for your project!
{% endhint %}

<div align="left"><figure><img src="/files/Ax1Sj5g0MTbGxHNUEKsG" alt=""><figcaption></figcaption></figure></div>

Now, load your YDR, YTYP, YMAP, and \_manifest.ymf into either an RPF or the stream folder of your FiveM resource.

### Test In-Game

That's it! Load into the game and check out your creation!

<div align="left"><figure><img src="/files/ncIulxXZvr9v9vOwjgro" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Note that your character will not collide with the Drawable as we have not created collisions for it. See [Creating Static Collisions](/tutorials/creating-static-collisions) to learn how to create collisions.
{% endhint %}


# Creating Static Collisions

Game Collisions are stored in the Static Collisions (.ybn) file format. Creating Collisions in Sollumz is very straight forwards.

### Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* Know how to either stream assets in a FiveM server or load mods into the base-game

### What you will need

* A mesh located at the world location (where you want the collision to be)

### Converting to a Static Collision

The first thing to do is apply location transforms on your object(s). Select all the objects and press CTRL + A and select 'Location'.

Next go to Sollumz Tools > Collisions > Create Bounds and select your object(s) and click 'Convert to Composite'.

![](/files/6rr16NDpFFTFcRaMBuLt)

Ensure that the Bound Composite and Bound GeometryBVH empties are located at 0, 0, 0.

Next, Center the origins of your object(s), go to Object > Set Origin > Origin to Geometry.

<figure><img src="/files/q5MqWTc34gQd23uIfDPp" alt=""><figcaption><p>Example Hierarchy</p></figcaption></figure>

It should now look something like this.

![](/files/OCWJbbPl2IupdDa5P2Dq)

Last step is to rename the 'Bound Composite' empty to your .ybn file name.

### Additional tips

Using Primitive shapes such as, 'Bound Poly Box', 'Bound Poly Capsule', 'Bound Poly Sphere' should be used for majority of your collisions, unless the mesh is a complex shape and cannot be made up of multiple primitive shapes. This is because it is more performance friendly and reduces unnecessary asset size.


# Creating Interiors

When making an interior there are about 9 steps to take.

* Picking a building
* Importing from CodeWalker
* Planning
* Modeling
  * Interior
    * Decals
    * Other props
  * Exterior
    * Decals
    * Other props
  * Modifying terrain
  * Create the ybn
* Texturing
  * Vertex coloring
* Collision
* Creating ytyp
  * Rooms/Portals
* Exporting from Blender
* Creating ymap

{% hint style="warning" %}
This is not the only order to make an interior every step, can be made when you want to or are ready to. Every step is as a tutorial in the headline in itself.
{% endhint %}

## Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
  * There will be some tips in this tutorial
* Know how to either stream assets in a FiveM server or load mods into the base-game

This tutorial is a minimal way to make an interior, so I will not go over things like making doors and moving objects this is purely how to make an interior.

Let's start at the beginning and pick a building you want to make an interior in.


# Picking a building

When picking a building it is a good idea to have some thoughts for what you want to make. When it's your first time make an interior it is a good idea to make a single or double roomed interior.

Start by opening CodeWalker and find the building you want to make an interior inside.

For this tutorial I have chosen this building from grapeseed.

<figure><img src="/files/f0tGC7ZNIgrFhKSCBIaT" alt=""><figcaption></figcaption></figure>


# Importing from CodeWalker

## Drawables

When you have found the building and selected it, copy the name from the right hand side and search in the files using the RPF Explorer from the tool menu

<figure><img src="/files/HuLLwVrumK05hF77UGea" alt=""><figcaption></figcaption></figure>

To export from CodeWalker we need the xml file before you export it you can open the file to ensure it is the right one, and we get that by right-clicking and pressing export to xml.

<figure><img src="/files/DTxsDfFYrv1h86bbEz3G" alt=""><figcaption></figcaption></figure>

To get every texture use the >> to find the textures and save them to the folder of the building name so when we load the model into Blender we don't have any missing textures.

<figure><img src="/files/cCXPv1B7azLyZkimhE6q" alt=""><figcaption></figcaption></figure>

This is also the time to find everything you will need. A little hint is you need everything you are going to modify and the ground around the building as it is really easy to create the floor to collide or texture fight. To find every file that is in the area right-click on the file again and press open file location, here you can find the ground every decal and other tings from the area, in this folder you can find **.ydr** (drawables) **.ytd** (textures), **.ybn** ( collisions), **.yft** (fragments), and the **.ymf** (manifest)

## Collisions

The easiest way to find the collisions is to open them from the RPF explore and export every **.ybn** that have anything with the building you are making to do. **NOTE:** It is important to take the hi@\[name].ybn and the \[name].ybn. The reason they are split up is because of the way GTA collisions work, the hi@ is for example for bullet so when a player shoots the building the bullet hits where the building and gets the right bullet hole and sound, the other one is example the player collision so when the player walks into the building they don't just walk through it. But in real life this is nothing you should be worried about unless you make major modifications to an exterior of a building.

<figure><img src="/files/NjD32KJMxjJkw8ZkyCWI" alt=""><figcaption></figcaption></figure>

## .ymap

The .ymap is the last file that is needed to be exported from CodeWalker the .ymap file have a lot of information that we can use to our advantage, some of the information in this file are the cords so we can place the buildings and decal at their exact locations. There can be more than one .ymap file so be sure that you have every .ymap file.

To find the .ymap name can be done in a couple of ways if you are making a small building you can look in the information menu to the right

<figure><img src="/files/1XnyKX9LBCiO81BYtYLJ" alt=""><figcaption></figcaption></figure>

If there are more .ymap files it can be easier to open a new project select everything that is going to be modified and read the name of the .ymap name

<figure><img src="/files/x8xLRoYlXeYJlSYFR9BO" alt=""><figcaption></figcaption></figure>


# Planning

This part is optional but a good idea for bigger interiors

When planning you can do a lot you can use Photoshop, Paint, or anything to draw what you want this do not have to be to scale. This is also a good time to make mood boards find out what you want the building be like and the art style modern, old, western, etc.

This is some floor plans I have made for interiors they are not beautiful, but they are a way to stay on target.

<figure><img src="/files/JTXJJbwi7wMBeEptrHhj" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/PXOUKvwjySVVyxam5Pvv" alt=""><figcaption></figcaption></figure>


# 🏠📐 Modelling

You should now have a folder that look something like this if you only exported the building and collisions. I wil now go ahead and export the building decals so when it is imported into Blender it will look more like the game this is **optional** but if you will edit them you should just export it from CodeWalker now, but you can always import later so no worries.

<figure><img src="/files/QPSWryPILXyQJjX6ZjRt" alt=""><figcaption></figcaption></figure>

## Import

To start with you only import the ybn and ydr files **not** the ymap files and then the ymap file after

<figure><img src="/files/fxEHa0iq7IIGLbBizCls" alt=""><figcaption></figcaption></figure>

I have chosen to use the file hierarchy ydr ybn and ymap this is just a way to separate the files and not necessary you can use whatever you'd like to have you can think of it as folders

When you have imported everything you can open the ymap file and find a copy of the building you have imported you can go to it by pressing `NUM,` **Keybindings may vary**

<figure><img src="/files/kWUqRmomijN9R8VFMVGU" alt=""><figcaption></figcaption></figure>

## Align mesh to building

This is to make it much easier to model. We can make it so that our mesh have the orientation of the building we are trying to make an interior inside of.

To do this we select an area that is the closest to the orientation in this tutorial the roof was the closest, so you selected the roof and pressed `shift + NUM7` and to get the 3D cursor over you first go out of edit mode and then presses `shift + mouse2 (Right mouse button)` before adding Mesh Plane, click n to open Right panel and click the View tab remove rotation from the 3d cursor on X and Y Axis you then go up and adds a plane from mesh and in the menu down to the left press Align -> 3D cursor, and now you have the mesh to build the floor and walls of, and it is in the right orientation and now to get back to the normal view press `NUM5`. **Once again keybindings may vary**

<figure><img src="/files/coCjQKmnDUkmt12rbMJN" alt=""><figcaption></figcaption></figure>

## Set model back to world origin

We now need to set the model to the world origin, but we don't just set it back but make a mirror and send the original back to world origin. To make a mirror of the object we selected just press `ALT+D` and then right click cancel movement of the mirrored object. Now that we have a copy of the model. We can unparent it with `ALT+P` and click "Clear and Keep Transformation". Then select the original, not the model but the empty and clear transformation with `ALT+R` and `ALT+G`. You'll now have the model at the location and at the world origin. The mirror will be used to get the location so when we need to create the ymap it will be at the exact same place as in blender you can therefore rename the mirror to "Location" or whatever you want it doesn't really matter what the name is.

## Modelling the drawable

Now it is time to actually model your interior the plane we made before is the starting point and build out from that so you ensure that the orientation will follow for this tutorial I will just make a very simple 2 room interior

Now I have made the floor of the 2 room and removed the doors

<figure><img src="/files/TMGt7AO1jfk4uOxgbrez" alt=""><figcaption></figcaption></figure>

Now add some walls

<figure><img src="/files/aM76yki7Ytaokop37zav" alt=""><figcaption></figcaption></figure>

And add the roof

<figure><img src="/files/pv2ZeLI5AI9GrnTTkfNL" alt=""><figcaption></figcaption></figure>

This part is the most time-consuming this step can be merged a bit together with the texturing but for this tutorial we will have it operated for better overview. This is also where you edit the decals and other thing you want to edit.

## Convert to a drawable

When you have your model you need to convert it to a drawable. To convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawable > Create Drawable Objects`.

<figure><img src="/files/HWkdvkzmghhOqoi7455A" alt=""><figcaption></figcaption></figure>

If you navigate to `Mesh Properties > Sollumz LODs` you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.


# Texturing

Next, we need to add materials to the Drawable Models. With one of the Drawable Models selected, open the `Sollumz Tools > Drawable > Shader Tools` panel. For this tutorial, I will use the "NORMAL" shader which allows us to specify a base color and a normal map. Search for the "NORMAL" shader and click `Create Shader Material`.

<figure><img src="/files/HWkdvkzmghhOqoi7455A" alt=""><figcaption></figcaption></figure>

To add a texture open shader tool and find the normal one select your drawable and then pres Create Shader Material, and it should appear in the Material menu in this tutorial I make 1 set of textures for each room so each room have a roof, wall, and floor. In this sample I use the normal, but you can play around with the others they have some different attributes that can be useful

<figure><img src="/files/XXYh8w4GyIXBXPjQYqtC" alt=""><figcaption></figcaption></figure>

With the newly added material selected, head to the material section then open `Sollumz > Texture Parameters` then press the folder icon and select the texture you want.

{% hint style="info" %}
When selecting textures you'll need to make sure their resolution is power of 2 E.g. `16x16` `32x16` `512x512` `512x16`.

It also needs to be .dds and not jpg, png, or any other file format.
{% endhint %}

<figure><img src="/files/9C8EyLXTV8VpGsE3kQyL" alt=""><figcaption></figcaption></figure>

When you have set a texture open the UV Editing tab where you can edit the placement of the texture if the textures is placed wild you have to select the textures right click and press the Unwrap button

<figure><img src="/files/ySVb8ozpo76MPJbxLtkV" alt=""><figcaption></figcaption></figure>

## Embedding Textures

There are 2 way to store the textures in a ytd (texture dictionary) or embedded in the model. There are reasons to use either, but I won't come into when to use what for this tutorial i wil just use the embedded way. Chose each texture from the menu and press the `Set all Textures Embedded` button

<figure><img src="/files/Z8KfG1hJbvttrEAEhYH7" alt=""><figcaption></figcaption></figure>

## Vertex coloring

To set the vertex paint open `Data > Color Attributes` and add a new color attribute called `Color 1` and it need to be set to Face Corner and Byte Color for this tutorial I will just use green at .2 and everything else at 0 the vertex coloring is something you can play around with.

Red control ambient occlusion of the model during night, most (except for night lights) will have it topped to 255 so it gets very dark at night

Green artificial light, topping this to 255 will give a self emissive power to the object. Used for objects near to lampposts or light sources to simulate ambient lightning

Blue moonlight illumination, how much the object reflects of the moonlight. Rockstar uses this at very frequent situations to avoid a fully dark atmosphere

<figure><img src="/files/btrcaDS2jOYUxLVkN0JG" alt=""><figcaption></figcaption></figure>


# Collisions

Now we need a collision so the player can walk inside the interior without falling through the walls and floor. Let's start with opening of the building collision.

## Edit the ybns

Go and show every ybn that are where there is a doorway and edit it so there is a hole inside to the interior. Remember to take the camera inside the interior to see if there is any collision that needs to be moved/deleted.

<figure><img src="/files/Bhu2c102mq6xz0BGxb9j" alt=""><figcaption></figcaption></figure>

Like that we now have removed the collision so the players actually can go inside the interior.

<figure><img src="/files/X1qq3IrptiEgpeW869jL" alt=""><figcaption></figcaption></figure>

## Create the ybn

The easiest way to do it is to make a copy of the shell and then convert it to a ybn, but before you just convert then export you'll need to assign the material so the footsteps and gun shots wil behave as intended.

To make a copy of the shell just press `SHIFT+D` and then right click and then `ALT+P` move the duplicated shell out of the drawable so it can be made to a ybn.

<figure><img src="/files/MXeOs5yI1mNtK7ie9LZG" alt=""><figcaption></figcaption></figure>

Now that we have made a copy it needs to be converted to a Composite you do that by marking the mesh and pressing `V` and selecting the option convert to Composite and then the option Apply flag preset

<figure><img src="/files/e6sMNQg9Ve8mJhWZopk9" alt=""><figcaption></figcaption></figure>

## Collision material

You are now ready to assign the material to the collision. Here you just need to find the material that is closest to what material you have chosen on the drawable, and then it's just assign them the same way as the texture.

The floor material need to be different for each room so the room ID can be set to the material

<figure><img src="/files/Z3FhyQQnasZglkYYslC1" alt=""><figcaption></figcaption></figure>


# Creating ytyp

So now we have a somewhat finished model now it is time to make the archetype (.ytyp). The archetype is a file that contains information about the model, collision, and texture it is also in the file we determine how many rooms there are and where the portals between rooms are and entities in the room (This ***can*** be easier to do in CodeWalker later on), it is also time to create the map data (.ymap) this is where we place exterior entities and in the interior we defined in the archetype. There are ways to do it directly inside of Blender, but it is not part of this tutorial check out [this video by ook3D](https://www.youtube.com/watch?v=P8Pxe6Z_iwQ\&ab_channel=ook_3D) if you want to know more.

## ytyp

Start by opening `Sollumz Tools > Archetype Definition > YTYPS` and then press the `+` icon to create a new archetype then you can mark every item you have made just the drawable then make sure it is set to base then press Auto-Create From Selected then mark the collision change to MLO and then press Auto-Create From Selected again you now have the definition of every drawable and the MLO where the portals are defined.

<figure><img src="/files/xyDyohxaiy0yZ46uY8Bp" alt=""><figcaption></figcaption></figure>

Now we want to create the rooms for every room + limbo, first select the mlo and open the tab Rooms now we add the first room witch is the limbo room it is created by pressing the Create Limbo Room, now the rest of the rooms will be added by pressing the `+` foreach room you'll need in this tutorial, then we just need 2 one for the front room and one for the back room. Then to fit the room select the collision and open edit mode and select the 4 vertices and press the button Set Bounds From Selection

<figure><img src="/files/lD3dSiO77PYWmtBN8EhY" alt=""><figcaption></figcaption></figure>

Now it is time for portals. Go to the Portals tab and mark the 4 corners of the doorway and make the portal from ***inside*** to ***outside***, when inside it doesn't really matter what way they are facing. When the portal is set make sure the direction of the arrow in the portal faces the same way as the instructed and if not use the Flip Direction button to flip so the arrow match.

<figure><img src="/files/XhRVY2nKGevby6Ze0nvQ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
It is very important to go out from inside when limbo is one of the parts.

Room -> Limbo
{% endhint %}

Now to add the shell as an entity, navigate to the Entities tab and select the drawable and press the Add Object(s) as Entity, and it will be added now just add the room limbo to the entity

<figure><img src="/files/ww4QYeQj159aMlBiX5MJ" alt=""><figcaption></figcaption></figure>

We are now done with the archetype there are much more to know about the archetype you can read more about it [here](/documentation/archetype-definition.ytyp) There is also much more to discover here you can play around with the timecycles and flags on room and portals these can also be done in CodeWalker


# Export from Blender

To export you just need to select every item you want to export and open Sollumz tool and press export. Note that the object need to be visible to be exported so make sure that everything you want to export is not hidden.

<figure><img src="/files/P1aEP4NNYF21uMtqThmK" alt=""><figcaption></figcaption></figure>

We now need to convert the xml to gta formats we do that by opening the RPF Explorer and then open a folder you want the files to be in and drag the xml file into the RPF Explorer.

<figure><img src="/files/F1xMkxUVvV3ugEjxukqg" alt=""><figcaption></figcaption></figure>


# Creating ymap

Now we are at the last step of the interior tutorial the only thing we need is to place the interior into the world.

Start by opening the folder where all your files are located so the files wil be loaded into the game. Open the navbar and press open folder.

<figure><img src="/files/A1uoetJHpycrWmo1XvbN" alt=""><figcaption></figcaption></figure>

When you have opened the folder everything should be in the project manager, and it is now time to add the ymap. Go add the ymap and a new entity and replace `prop_alien_egg_01` with the name of the interior as defined in the ytyp in this tutorial I called it `tutorial_interior_col`.

<figure><img src="/files/A7nDWotEmpZIKDGibpTH" alt=""><figcaption></figcaption></figure>

Now it is time to place it the right place, and it is now that the mirror we created earlier come in handy. Select the model in blender and open `General > Object Location & Rotation Tools` and press the most left button to copy the coordinates to clipboard the go into CodeWalker and paste the coordinates into the project manager.

<figure><img src="/files/SABgjARkii3EN0doNAfP" alt=""><figcaption></figcaption></figure>

Now it's time to calculate the flags and extents by selecting the ymap and press the calculate buttons and here you can also name the ymap what you want to call it in the name field then save the ymap.

<figure><img src="/files/HiWp9U8yyPbAegfLcxyv" alt=""><figcaption></figcaption></figure>

We are almost done we are just missing the manifest file which we can auto generate by pressing Tools and the generate manifest and then save.

<figure><img src="/files/Q0u7pRkl0gk5OSTrKF0M" alt=""><figcaption></figcaption></figure>

Now we are ready to load everything into the game.


# Creating Props

Props are simply just entities or models that can be reused and placed multiple times to detail an area or scene.

### Prerequisite Knowledge

* Basic Blender skills
* Know how to either stream assets in a FiveM resource or load singleplayer mods

### What you will need

* A model with textures prepared

### You can follow this guide in the order below:

{% content-ref url="/pages/736WMU04X2JCkLPyJryI" %}
[Setting Up Sollumz Shaders](/tutorials/creating-props/setting-up-sollumz-shaders)
{% endcontent-ref %}

{% content-ref url="/pages/rqFVdu6nnmAOGAiFSiWc" %}
[Converting To Drawable](/tutorials/creating-props/converting-to-drawable)
{% endcontent-ref %}

{% content-ref url="/pages/2lrw02dWcLDIktaCM6XJ" %}
[Creating the Archetype (.ytyp)](/tutorials/creating-props/creating-the-archetype)
{% endcontent-ref %}


# Setting Up Sollumz Shaders

### Setting up proper Sollumz Shaders

For your textures and materials to work correctly inside of GTA V, you will need to use 'Sollumz Shaders'. these are simply materials that are set up correctly for use with GTA V assets.

To get started, within the Sollumz Tools found in the Toolbar, navigate to Drawables -> Shader Tools

<figure><img src="/files/n254MuzWCuf5jm5CjVT8" alt=""><figcaption><p>Sollumz Shader Tools Panel</p></figcaption></figure>

Here you can find a list of all usable shaders within GTA V. you will quickly notice just how many shaders there are, and you might be intimidated by the amount, but around 80-90% of these shaders are not used frequently or at all for props.

Next, we will need to decide which shader is right for our asset. some key things to keep in mind when deciding which shader to use are:

* Does my asset utilize a normal map?
* Does my asset utilize a specular map?
* Do my textures contain an alpha channel?

for this example, the asset uses a normal and specular map, but no alpha. so for this shader we will use "normal spec".&#x20;

#### Creating the Shader

So now that we have decided which shader we will be using, we can now go ahead and create the shader. To do so, you can either press CTRL + F within the shader list and search for "normal\_spec", or you can scroll manually.

Once you have located the shader, select it by clicking it. it should now be highlighted. next, select your prop model, and click the "Create Shader Material" button.

<figure><img src="/files/UW2yeSwr1FruybRuisni" alt=""><figcaption><p>Sollumz Shader Tools Panel</p></figcaption></figure>

### Applying textures to your new shader

If you now navigate to the Material tab on the bottom right panel with your prop model selected, you will see your newly created shader.&#x20;

<figure><img src="/files/wSmkaUX79X0fUG0VX0zO" alt=""><figcaption><p>Material Panel</p></figcaption></figure>

another thing you will notice is the "Sollumz" tab within the Material tab. Within this Sollumz tab is where you will be controlling everything related to this specific shader.

If you expand the Texture Parameters panel, you will see the 3 different texture slots:

* DiffuseSampler (Diffuse / Colour map)
* BumpSampler (Normal / Bump map)
* SpecSampler (Specular Map)

you can go ahead and click the folder icon on the right to open up the file explorer window and select the corresponding textures for each.

<figure><img src="/files/FfvPfRSjjbGB4XHChNJi" alt=""><figcaption></figcaption></figure>

Once you apply each texture, ensure the BumpSampler Color Space is set to "non-Color" otherwise it will look incorrect within blender, but will be fine when you export.

<figure><img src="/files/dhMMc3kfIhNRAqC4e4er" alt=""><figcaption><p>Color Space</p></figcaption></figure>


# Converting To Drawable

Game meshes are stored in the [Drawable (.ydr)](https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr) file format. Creating Drawables in Sollumz is very simple. This tutorial will walk you through step-by-step.

### Converting to a Drawable

The first thing to do is convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawables > Create Drawable Objects`.

<figure><img src="/files/yRdQWQdYPQz4zqcRdMWO" alt=""><figcaption></figcaption></figure>

You will notice in your Scene Collection top right, that your object has changed a little. It is now in the correct hierarchy / format for GTA V.

<figure><img src="/files/4yPit1nbxBSzADAuYlV5" alt=""><figcaption><p>Drawable Hierarchy</p></figcaption></figure>

If you navigate to `Mesh Properties > Sollumz LODs` with the drawable model selected, you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.

<div align="left"><figure><img src="/files/sCUHn50rN7QZ8FE1dLVZ" alt=""><figcaption><p>Mesh Properties > Sollumz LODs</p></figcaption></figure></div>


# Creating the Archetype (.ytyp)

TODO


# Creating Vehicles

In this crash course tutorial, you are going to learn how to create a vehicle using a vanilla GTAV vehicle as a base. A basic knowledge of RAGE engine is nice to see.

The example vehicle used in this article is `adder.yft`

<figure><img src="/files/0Jc5IIMLYCouOhIawd8r" alt=""><figcaption><p>adder.yft</p></figcaption></figure>

{% hint style="info" %}
Before creating a new vehicle, make sure you have read the Vehicle Setup pages in Fragment documentation.
{% endhint %}

### Contents


# Setting Up the Model and Materials

### Importing a model

Without further ado, import a model (from a different game, modelled by yourself) to Blender. In this case, I am going to import the Super GT from GTAIV in `.FBX` format.

{% hint style="info" %}
You can ditch that part if your vehicle was modelled in Blender.
{% endhint %}

<figure><img src="/files/eojM0zVmVebUeAGtwCRC" alt=""><figcaption><p>Importing a .fbx format file with tutorial vehicle</p></figcaption></figure>

As the import has finished, you will see an imported mesh.

<figure><img src="/files/AXOSBLFUhIqEPkcGc2t8" alt=""><figcaption><p>Vehicle mesh after importing process</p></figcaption></figure>

### Assigning materials

The subject of consideration for this tutorial is the bonnet part. To assign a material, go to Material tab, click on Browse material button and select the material from the list. In this case, I have assigned a vehicle paint one to the outer part of the bonnet.

<figure><img src="/files/iMbgtPvEBIvppmHU3xDi" alt=""><figcaption><p>Choosing a vehicle paint material</p></figcaption></figure>

The same is true for all the bonnet's materials.


# Positioning Bones

{% hint style="info" %}
This step is needed when you are creating a fully custom vehicle. If this is an edit of an existing car, skip this step and go to next one.
{% endhint %}

Bones can be easily moved in Edit mode. To move them:

1. Switch to **Solid Mode**
2. Toggle **X-Ray**
3. Choose a bone you want to move
4. Select it in 3D View
5. Click on Move icon
6. Move the bone using gizmo.

<figure><img src="/files/awwtnDRHePQQJFEepSom" alt=""><figcaption></figcaption></figure>


# Vertex Groups, Hierarchy, and Armature

### Create and assign Vertex Groups

To create a new vertex group, go to **Data** tab, click `+` in **Vertex Groups**, double click on the Group name and rename it to **bonnet**.

<figure><img src="/files/GDItemnUvcRKY7jd3cLx" alt=""><figcaption><p>Process of creating a vertex group</p></figcaption></figure>

1. Change **Object Mode** to **Edit Mode.**
2. Switch to **Face Select.**
3. Select all faces by pressing `A` or using the `CTRL+A` shortcut.
4. Go to **Vertex Groups**, click Assign button and exit **Edit Mode**.

Now all of the selected faces are properly set to the **bonnet** vertex grou&#x70;**.**

<figure><img src="/files/HUsSNd3hqDLvho33rOMW" alt=""><figcaption><p>Assignment of faces to vertex group</p></figcaption></figure>

### Hierarchy

Our new custom bonnet model has to be considered by Sollumz as a valid part, so we have to move the mesh by expanding Adder's armature then drag and drop bonnet's Drawable Model inside `adder.mesh`

<figure><img src="/files/RAZNktuqMNP80tDNgPO4" alt=""><figcaption><p>Bonnet part moved into adder.mesh</p></figcaption></figure>

{% hint style="info" %}
You can delete the original bonnet, since is not needed anymore.
{% endhint %}

<figure><img src="/files/hXbNdpIcvOZAGancSk08" alt=""><figcaption><p>Removal of vanilla bonnet part of adder.</p></figcaption></figure>

### Armature

A replacement custom part has also to be linked to the armature, you can do this via **Armature** modifier.

1. Go to **Modifiers** tab.
2. Add an **Armature** modifier.
3. Select your vehicle's armature.

<figure><img src="/files/mLfJWzgDiJT2r1iy1TQr" alt=""><figcaption><p>Armature modifier creation</p></figcaption></figure>


# LOD Assignment

All models rely on LOD meshes, which greatly reduces graphics demand of detailed models and improves overall performance.

{% hint style="warning" %}
if you have any other LOD meshes ready to be set up, copy their names to the proper LOD levels.
{% endhint %}

In order to render your mesh at any distance:

1. Go to **Data** tab.
2. Scroll to **Sollumz LOD.**
3. Copy the name from High LOD to Very High, Medium and Low.

<figure><img src="/files/Fk5AyPZImdWSEcBD3Eoa" alt=""><figcaption><p>LOD assignment for all levels</p></figcaption></figure>


# Exporting

In the `Export Codewalker XML > Fragment` panel, you will find the two options, depending of your edits done prior in Blender.

<figure><img src="/files/znwj8UGk3MQo4FiDaZqk" alt=""><figcaption><p>Export settings with two options marked</p></figcaption></figure>

First option - `Auto Calculate Bonetags` in Drawable is doing a bone number calculations. This option is needed to use when you have added a fresh new bone (i.e. a rear doors). The hardcoded bone tag value tells the game that specific bone has to be treated as rear doors. If you have not added any bones, do not select this.

Second option - `Auto Calculate Inertia` and `Auto Calculate Volume` has to be ticked if you have changed the shape of any collision mesh. Using this option provides a correct calculation for a physics engine. If you have not changed any collision shapes, do not select this.


# Creating Weapons \[TODO]

TODO


# Basic Animation Editing \[TODO]

TODO


# Basic Clothes Editing

Often the easiest way to get into ped editing is to start simple: Let's edit an existing model from GTA for a freemode ped, so we can learn the basics.

## Peds: Streamed vs Non-Streamed

One thing you should know is that there are generally two different types of peds for GTA: "streamed" and "non-streamed". For a basic explanation, just know that peds use YDD (drawable dictionary) files for their models instead of YDR. For streamed peds, all of their 'parts' (ie shirt, shoes, head, etc) are separate YDDs. For non-streamed peds, all of those parts are put together into 1 single YDD. Streamed peds are generally easier for beginners to start with editing, because you can edit and export 1 piece at a time so if you mess up, you know it's just that 1 part that isn't working.

MP Freemode both male and female are both "streamed peds". This means that all of their parts are separate. If you wanted to see a 'base body' in blender to work with, you'll need to import several different YDDs: a HEAD, an UPPER, a LOWR, and a FEET.&#x20;

## Ped Skeletons

One other note before we start: All peds, whether streamed or non-streamed, have a SEPARATE FILE called a YFT for their skeleton. For whatever ped you are editing with Sollumz, you will need their YFT file so that Sollumz knows what their bones are.

## Importing the Files

#### Export the skeleton YFT XML

Let's start getting ready to get into Blender! The first step is to export the male and female Freemode ped skeletons (YFTs) to use when importing and exporting components that are rigged to the ped. These are located at **x64v.rpf\models\cdimages\streamedpeds\_mp.rpf** and can be saved separately to be used with any freemode ped clothing or accessories you edit in the future.

<figure><img src="/files/4w9BRnrRmbarpDxxE25D" alt=""><figcaption><p>an image of codewalker showing the folder where mp m/f yfts can be found</p></figcaption></figure>

If you haven't already created a folder somewhere on your computer to work on this project, do that now. Then, right-click the **mp\_m\_freemode\_01.yft** and press `Export XML...`. Make sure you're keeping track of where you exported the XML to. It will need to be in the same folder as the YDD when we import into Sollumz.

#### Exporting the YDD

Now we'll export the model we actually want to edit, as well as a texture for it. If you didn't already know of it, [tobii.space](https://tobii.space/) is a good visual reference for most of the freemode components. It has most DLC clothing, although it is missing some of the newer updates. Today we already know what clothing piece we're using, so let's head back over to Codewalker RPF and grab the file.

Open up CW RPF and type `mp_m_freemode` into the searchbar

<figure><img src="/files/0fvmgJY6jDujqg7quFDd" alt=""><figcaption></figcaption></figure>

If you click "Name" at the top to sort by name, you'll then see a list of all of the MP Male folders. You'll notice there are multiple folders for every DLC. This is the original DLC folder, and then patchday folders that hotfixed any issues R\* had with various pieces of clothing.

<figure><img src="/files/L73wkuSdSiFHciOqwnm7" alt=""><figcaption></figcaption></figure>

The 🟥 outline is all of the base MP male DLC folders

The 🟧 outline highlights all of the DLC names. Notice the original DLC and all of the patchday hotfixes.

The 🟩 outlines the original base game DLC folder.

Right now we aren't going to worry about any hotfixed files, so just click into the original DLC folder. If you are ever editing GTA assets, though, you should always look through the patchday folders for whatever component you're trying to edit so that you can work off of the most up-to-date version.

Now that we're inside the base folder, you'll see a long list of all the base game components and their YTD textures. Make sure you're sorted by 'Name' so that everything is alphabetical, and then scroll down until you see the JBIBs.&#x20;

For the purposes of our tutorial, let's export `jbib_007_u`.&#x20;

1. Right-click on `jbib_007_u.ydd`
2. Select `export XML...`
3. Export location: **Make sure you export to the same folder** you exported the YFT earlier.

<figure><img src="/files/svo4DzB9TC9Lg1d9yl3f" alt=""><figcaption></figcaption></figure>

Now let's quickly visit the folder you've just exported the file to. In the folder, you should have a couple of things. Firstly the `mp_m_freemode_01.yft.xml`, then `.ydd.xml` of our jbib & there should also be a folder named `jbib_007_u`.

Whenever you are exporting a model that **has embedded textures**, Codewalker RPF will create a folder named after the model you exported to XML with all of the embedded textures placed inside of it.&#x20;

Go ahead and click into the folder and take a peek at the embedded textures!  You should see two: a **normal** texture and a **specular** texture. To quickly explain these: A normal helps emphasize clothing details like wrinkles & a specular helps display the glossiness or matte of your clothing.

Most freemode clothing components have an embedded specular texture and normal texture. When you go to make your own models later on, you'll need to learn how to create these yourself. For now, they have already been made for us. So get familiar with them while you can!

#### Exporting a texture for our model

You might have already noticed, but there's one texture we don't have yet: A diffuse texture. The diffuse texture for clothing YDDs stays un-embedded from the model and in a separate file called a  YTD (texture dictionary), and you can have up to 26 of them (A to Z) for any single YDD. We *don't  need* the texture for our editing today, but it's nice to have a visual reference, so let's grab one now.

In Codewalker RPF right below where you found the YDD we exported, should be the YTD files. Scroll down until you see `jbib_diff_007_a_uni.ytd` and export it to XML. It will create a sub-folder named **jbib\_diff\_007\_a\_uni** with the texture inside of it.

### Ready for Blender

Do a final check before opening blender. Your folder should look like this:

<figure><img src="/files/oEzKNzKSB52KdvWBmj4p" alt=""><figcaption></figcaption></figure>

Your `.yft.xml` is in the same folder on the same level as the `.ydd.xml` . That's the import part!

If you would like, you can copy/paste the diffuse texture from the **jbib\_diff\_007\_a\_uni** to the "embedded textures" folder **jbib\_007\_u** . This will allow Sollumz/Blender to automatically find the texture when you go to import. Otherwise, you can link it manually later on.

## Importing to Sollumz

With Blender open:

1. click File
2. Import ► Codewalker XML
3. Navigate to the folder you exported the XMLs
4. Click **jbib\_007\_u.ydd.xml** and from the side-menu options make sure you select 'Import External Skeleton'

<figure><img src="/files/51Wyw2vxVRQAtexKz0p0" alt=""><figcaption></figcaption></figure>

You should now be looking at something like this:

<figure><img src="/files/B5P8A7gEqQ8aZQ9UUijD" alt=""><figcaption></figcaption></figure>

Let's make sure we imported correctly. In scene collection:

1. Expand **jbib\_007\_u** and then **jbib\_007\_u.001** and click on **SKEL\_ROOT**&#x20;
2. In the properties window, click on the Object Data Properties tab
3. Expand Vertex Groups (if its not already) and make sure they are all named.&#x20;

<figure><img src="/files/1rBehEz2rXhdwZGRgTOV" alt=""><figcaption></figcaption></figure>

If you see named bones like **SKEL\_L\_Hand** etc then you're good to go! If you see something like UNK.001 you did not follow the correct steps for exporting the YFT portion of this tutorial. Go back up, re-read, and try again.

## Preparing the model

#### Viewport adjustments

With everything imported properly, let's get ready to actually edit! First things first, we probably want to change our viewport to actually see what we're working with.&#x20;

<figure><img src="/files/iQt1tLl5T0LtZ8Rxt7mn" alt=""><figcaption></figcaption></figure>

Personally, I like to change the 'color' to Texture and 'lighting' to MatCap, but you can play around in this menu and see what works for you.

#### Linking diffuse texture

Once we have that set, your shirt might look like this:

<figure><img src="/files/NoDT95vvmpJcILK9aIUO" alt=""><figcaption></figcaption></figure>

If you left the diffuse texture in it's own **jbib\_diff\_007\_a\_uni** sub-folder, you'll see our jacket is pink. That's fine! We can just link up our diffuse texture now.

* Top-left, go to File ► External Data ► Find Missing Files

<figure><img src="/files/9TnmIdrbMCOMPKM2drKX" alt=""><figcaption></figcaption></figure>

Navigate to your project folder and select the **jbib\_diff\_007\_a\_uni** sub-folder where you will see the **jbib\_diff\_007\_a\_uni.dds**. Then press 'find missing files'.&#x20;

<figure><img src="/files/kNwdqckgrN0G3Z5SzbXs" alt=""><figcaption></figcaption></figure>

It's good to know this method, as you will use it in other parts of Sollumz modding as well for things like props and MLOs. You might see a yellow warning popup at the bottom of your blender that says it cannot find 'givemechecker.dds' . This is fine to ignore.

<figure><img src="/files/Z0sm0jBhLrncQwLHhUsl" alt=""><figcaption><p>you can ignore this warning</p></figcaption></figure>

Head back to the 3D viewport (instead of shader editor) and we can see our jacket now has the diffuse texture:

<figure><img src="/files/hH0Gxke8bQsO1wue6Vni" alt=""><figcaption></figcaption></figure>

Great! Just one more thing to do before we actually edit. When importing into blender our vertices have unmerged and we've lost our sharp edges. We want all of that back so that we can have the most accurate view of what we're working with and what it will look like in-game.&#x20;

#### Merge vertices/Sharp Edges

To fix things, let's do the following:

1. Select SKEL\_ROOT in scene collection
2. In 3D Viewport, Tab into Edit Mode
3. Select everything (Default: A key)
4. Merge ► By Distance (Default: M key)
5. In the bottom left for the 'Merge by Distance' window, expand it and tick on Sharp Edges

<figure><img src="/files/4qUXJnnOAFrSwDSD8FQY" alt=""><figcaption></figcaption></figure>

Clothing has 3 LODs (level of detail): high, medium, and low. We also need to do the same thing for our medium and low LODs.&#x20;

The easiest way to switch between LODs quickly is to press **SHIFT + V** (make sure you are no longer in edit mode) to bring up the Sollumz Object Visibility wheel.

<figure><img src="/files/8Ke1Z0onHjlC0pd0Wrhw" alt=""><figcaption></figcaption></figure>

The three options on the right-side of the wheel are the ones you'll be using for clothing YDDs. Switch to Medium, repeat the same steps above. Then switch to Low, and do it once more.&#x20;

## Editing

We're ready to edit! Switch back to High LOD with SHIFT + V and tab into edit mode. You can make any changes you want here. I'll delete the sleeves for the purpose of this tutorial.

<figure><img src="/files/IAP7CGg2zJxk7H5XPmKu" alt=""><figcaption></figcaption></figure>

Now that I've removed the sleeves, I have 2 things to resolve:

1. I need to fill in the holes where the sleeves used to be
2. I need to create new sharp edges to tidy up the model

The reason we want to fill in the holes is because GTA uses back-face culling. What this means is that the faces on the model do not have both a viewable "front" and "back". Instead, the front-facing side is visible and the back is invisible. We can see this in action in blender by going back up to the viewport shading options and turning it on.

<figure><img src="/files/k1epbi5OaA9bzvMHf5uy" alt=""><figcaption></figcaption></figure>

You can see the "back side" of the model is invisible now. We need to fill in those holes. There are two ways to fix this.

First, go back into edit mode and select all of the vertices around the edge.

<figure><img src="/files/SdLjpmeTEMX6T4Zv3cVn" alt=""><figcaption></figcaption></figure>

Then you have two options. You can either press F to fill in the hole, or you can extrude the hole and then merge the vertices from the extrusion. For this tutorial, I'll be doing the second method.

<figure><img src="/files/x5ZKd9tc0IsPYY8EAoHZ" alt=""><figcaption></figcaption></figure>

1. Select the vertices around the edge
2. Extrude (default E key)
3. With your mouse, move the new points slightly inward
4. Scale the vertices together (default S key) then merge them (M Key) ► at center

You might notice that our new geometry looks a little weird. Almost as if its shiny in places.

<figure><img src="/files/nG0qDYn0Td8ER0WpxiAR" alt=""><figcaption><p>an example of bad normals</p></figcaption></figure>

What's happening here is we have bad normals. To be clear, there is a difference between the embedded "normal texture" (sometimes also called a bump map) and geometry normals. If you'd like to learn more about normals, there are plenty of youtube videos that can help.&#x20;

For now I'm just going to reset them to clear up this issue! **With my geometry selected** go to Mesh ► Normals ► Reset Vectors

<figure><img src="/files/Zh7JXG8mQx9GbZZVifOt" alt=""><figcaption></figcaption></figure>

Once that's done, everything should be looking much betterr.

<figure><img src="/files/xvnV0sDiNSLh4x7hUgkh" alt=""><figcaption></figcaption></figure>

Since this is the edge of the shirt, I'd also like to set some sharp edges along the same loop we just filled in. Sharp edges add a more "crisp" line in geometry that is clearly visible in-game. When you use them properly, they can add a little extra emphasis to your model quality. There's no rule of when or when not to use sharp edges, it's up to you to follow the lines of clothing and determine where they would make sense.&#x20;

For now I'll go to edge select & select the loop I filled in, then right-click and press "mark sharp"

<figure><img src="/files/rovtT2HbXB0G6eHihaiM" alt=""><figcaption></figcaption></figure>

Now do the same thing with the other side.&#x20;

<figure><img src="/files/L9DrXQD7y4pJPAzAwpWy" alt=""><figcaption></figcaption></figure>

With that done comes the boring part: Repeating the same process with the medium and low LODs! With custom models, you would have all of this already finished before you create your LODs  but when editing existing clothing, you need to either edit everything the same or create new LODs after you've edited.

For this tutorial, you should delete the sleeves on the med/low LODs so that they look visually similar, but it's up to you whether you want to fill in the sleeve holes like we did here for High LOD. Chances are that from a distance people won't be able to see that small detail anyway.

## Exporting

With all of the LODs edited, we're now ready to export!&#x20;

* In the outliner window, right-click **jbib\_007\_u** and `select hierarchy`

<figure><img src="/files/atDgKhCW4aQOdyjjUtM1" alt=""><figcaption></figcaption></figure>

* Then go top-left to File ► Export ► Codewalker XML
* It's best to create an 'export' folder so that you are not overwriting the original. That way if you mess up, you don't have to go grab the ydd xml all over again.&#x20;
* navigate into Export folder
* Export

<figure><img src="/files/WagNFXoWsIOy4LruOSBk" alt=""><figcaption></figcaption></figure>

The window will close and at the bottom of your blender you should see a message like "exported in 0.12 seconds".&#x20;

Now in our export folder, we should have our new .ydd.xml and a copy of the embedded textures folder with our normal/specular textures inside.&#x20;

<figure><img src="/files/7itJ5BUcIxnVlstbKkB9" alt=""><figcaption></figcaption></figure>

You can now head back over to Codewalker RPF and import the XML to turn it back into a YDD & preview it!

<figure><img src="/files/gOtxZxE4YKiVDlG5hSy5" alt=""><figcaption></figcaption></figure>

Our model is finished! Now you can replace the existing one or create an addon with the same textures and test in-game. In-game you might see it clips with the underarms as you move around. That's due to something called "weight painting". More about that to come in future tutorials!

## FAQ

### What Vertex Colors should I use?

99% of the time you want Color 1 to be #FF8000 and Color 2 to be #000 with 0 alpha.&#x20;

<figure><img src="/files/Dl23bILYBpeFBq5qUqQO" alt=""><figcaption></figcaption></figure>

Color 1 setup:

<figure><img src="/files/9wt92y0ZBOJMrDV9wWRi" alt=""><figcaption></figcaption></figure>

Color 2 setup:

<figure><img src="/files/KnDdD5CTXxOSoDJOMSiG" alt=""><figcaption></figcaption></figure>

Make sure both are set to "face corner" and "byte color":

<figure><img src="/files/zNfHsYTFNIKo1aBTFJdc" alt=""><figcaption></figcaption></figure>

### My clothes are shaking ingame

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on, and Color 2 is to deal with sweat or wind effects. Your clothes are shaking due to wind. To turn off wind effects, make sure Color 2 is black #000 (see above).&#x20;

### The shading on my clothes are weird, it's completely black on one side/in the shade.

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on. Most MP clothing uses hex color #FF8000 for Color 1 (#000 with no alpha for Color 2, see above)

### My clothes look shiny/oily in the sun

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on, and Color 2 is to deal with sweat or wind effects. Your clothes are shiny in the sun due to sweat. To turn off sweat effects, make sure Color 2 has no alpha:&#x20;

<figure><img src="/files/ttrPq6Rph88oCbnNg0Yn" alt=""><figcaption></figcaption></figure>

### There's a weird checkered pattern on top of my clothing texture

<figure><img src="/files/SJ9Dn7SIR3A9tobI7PMz" alt=""><figcaption></figcaption></figure>

**Answer**: For MP Freemode YDDs using PED material (or streamed ped YDDs) it is required to embed both a normal and specular texture(s). If you see your texture but with a checkered overlay, most likely you are missing one or both.

### My YDD exported but doesn't appear ingame

**Answer**: Most of the time this is due to clothing not being rigged. Either you did not import with external skel (see [Basic Clothes Editing](/tutorials/basic-clothes-editing#importing-the-files)) or your import was okay but you didn't actually rig your mesh (empty vertex groups).&#x20;

### My \_r freemode clothing piece is not changing skin colors ingame

**Answer:** Several things could be wrong. Either you:

* Did not name your embedded textures correctly (should follow R\* format so `component_normal/spec_number` for example: `jbib_normal_000` and `jbib_spec_000`)
* The alpha RGB channel on your specular texture (viewable in programs like photoshop) is not setup correctly
* You moved the UVs for the skin (you should not do this)
* Your diffuse is not square or not Power-of-2 (256x256 or 512x512 etc). \_r clothing should be square to follow original MP skin dimensions.

This is an intermediate problem that has many possible issues. For a more in-depth explanation of these problems (and a walk-through of the solutions) please watch this video:

{% embed url="<https://www.youtube.com/watch?v=sJO_Fd__2nw>" %}

### My emissive material is not glowing in game.

For ped emissive to work correctly on clothing, set Color 1 to #FFBAFF. Keep Color 2 #000/no alpha to disable sweat/wind.

\
![](/files/rL5WFaQwgGGFax47e8Xt)

{% hint style="info" %}
**Tip:** In Vertex Paint mode, you can press **Ctrl+X** to quickly paint the mesh.
{% endhint %}


# Asset conversion for GTAV Enhanced

In this tutorial, you will learn how to convert your assets from the Legacy version of Grand Theft Auto V to Enhanced, released in 2025.

### What will you need

* CodeWalker30\_dev48 or newer version (available at <https://discord.gg/codewalker>, #releases channel)
* Legacy assets from mods (.ydr. .yft, .ytd, .ydd files are supported)
* OpenRPF for Enhanced <https://www.gta5-mods.com/tools/openrpf-openiv-asi-for-gta-v-enhanced>

{% hint style="info" %}
Double make sure you are using the CodeWalker 30 dev48 or newer version.
{% endhint %}

### Utilizing the Asset Converter

1. Prepare the folder with your Legacy assets&#x20;

<figure><img src="/files/c5eumyh5aT6YOjcbvDvS" alt=""><figcaption><p>Files of Adder vehicle in Legacy format</p></figcaption></figure>

2. Create a folder for Enhanced assets (in this example - **gen9**)

<figure><img src="/files/DWG5AIhUskzt0XeZZRuu" alt=""><figcaption></figcaption></figure>

3. Open up CodeWalker RPF Explorer, and head to Asset Converter

<figure><img src="/files/4KNMllpPbUuPoZ7BSf3f" alt=""><figcaption><p>Opening Asset Converter via Tools\Asset Converter</p></figcaption></figure>

4. Select a folder with Legacy files

<figure><img src="/files/fQRLFuwKMouj3g2j3VdX" alt=""><figcaption><p>Selecting a folder with Legacy files</p></figcaption></figure>

5. Select a folder to save converted files

<figure><img src="/files/ySdiA6L5TYCaAsCVcH3p" alt=""><figcaption><p>Selecting a folder to convert files for Enhanced</p></figcaption></figure>

6. Untick **Include subfolders** and click **Process**

<figure><img src="/files/NWvFTBR2ehZ3Ge1mRsGV" alt=""><figcaption><p>Conversion process</p></figcaption></figure>

And it's done! Conversion process was completed and your mod is ready to be used in Enhanced.

***

### OpenRPF

In order to use modified files in the Enhanced version, an OpenRPF file loader is needed. \
Installation process is very simple.

1. Download OpenRPF from the link on the top of this tutorial.
2. Extract ZIP archive.
3. Select dsound.dll and OpenRPF.asi and drag\&drop them to GTAV Enhanced installation folder

<figure><img src="/files/t65DyVhkUKMK0WIVN01A" alt=""><figcaption><p>OpenRPF installation process</p></figcaption></figure>

***

### Troubleshooting

There is no rose without thorns, especially in game modding. Some unexpected behaviours can occur when porting content to Enhanced.

#### ERR\_GFX\_STATE

<figure><img src="/files/ASXjfpeoy84AOjM1YUn5" alt=""><figcaption></figcaption></figure>

**Q**: My car is spawned, when I'm entering the car, I got **ERR\_GFX\_STATE** crash.\
**A**: The issue is in the texture inside .ytd file. A texture starting with `script_rt_` name is saved in incorrect format. For such file, only `D3DFMT_A8R8G8B8` is expected by game.

<figure><img src="/files/nuzkN5DXmaAkASFc7Nlg" alt=""><figcaption><p>DXT5/BC3 texture format is the wrong one</p></figcaption></figure>

To fix this issue:

1. Extract texture to .dds

<figure><img src="/files/ZrdebfsFMNdKKpGKFnnQ" alt=""><figcaption><p>Process of extracting texture from .ytd file</p></figcaption></figure>

2. Open texture in image editor supporting editing .dds files (i.e. GIMP)
3. Save the texture using **RGBA8** texture format, without mipmaps.

<figure><img src="/files/Iqi84iI2iP3EUH98Ajkd" alt=""><figcaption><p>Example of saving texture in GIMP</p></figcaption></figure>

4. Replace texture by the saved one from moments ago and save file.

<figure><img src="/files/zHtHPo6nCEXzaT6XOa6C" alt=""><figcaption><p>Process of replacing texture</p></figcaption></figure>

5. Close and open adder.ytd file.
6. Go to Details tab, find G9\_Flags column and change the value to 2490920, if CW didn't set it by default.

<figure><img src="/files/zXx80RTPqnqlh5ZVYTa2" alt=""><figcaption></figcaption></figure>

***

**Q**: Game crashed even when I didn't enter the car.\
**A**: Check the material/geometries amount of the converted vehicle. GTAV Enhanced **has a limit of 128 materials/geometries** per file and exceeding that value leads to crashes.<br>

<figure><img src="/files/8mfez37r6ehOmLoMvJZ9" alt=""><figcaption><p>vacca_hi vehicle with more than 128 materials</p></figcaption></figure>

A plausible workaround for that issue is to export \_hi.yft and .yft files to .XML, import them using Sollumz, export to .XML and import these files by CW RPF Explorer.\
\
1\. Select files in CW RPF Explorer, click right mouse button and select Export XML button.

<figure><img src="/files/B1PyCkWoT4m5Zf9YKxr4" alt=""><figcaption><p>Exporting files to XML format</p></figcaption></figure>

2. Import XML file in Blender using Sollumz

<figure><img src="/files/F2tWTabLLGAoL6D6WmRg" alt=""><figcaption><p>Importing process</p></figcaption></figure>

3. Select the root component from the Layers menu and Export CodeWalker XML

<figure><img src="/files/LeZLM4QSqO5tmcPwRCEw" alt=""><figcaption><p>Exporting process</p></figcaption></figure>

4. In CW RPF Explorer, click right mouse button and select Import XML button and select both exported from Blender.

If this process didn't reduce material/geometries amount, then vehicle mod isn't well optimized for games and ask mod author about fixing it for GTAV Enhanced.


# Drawables (.ydr)

Drawables are objects that hold mesh data, skeleton data, and shader data. It can be thought of as the game engine's mesh format. YDR files contain one Drawable and are typically used for static mapping but are also used for dynamic props in some cases. In cases where a prop consists of multiple breakable parts, [Fragment (.yft) ](https://github.com/Sollumz/wiki/blob/main/documentation/fragments.yft)objects are used instead.

### File Layout

```
Drawable
    ShaderGroup
        Shaders
        TextureDictionary
    Skeleton (sometimes)
    DrawableModelsHigh
        Geometries...
    DrawableModelsMed
        Geometries...
    DrawableModelsLow
        Geometries...
    DrawableModelsVeryLow
        Geometries...
    Lights (sometimes)
```

Drawables consist of multiple "Drawable Models" which hold the actual mesh data. Drawable Models are organized into High, Medium, Low, and Very Low detail levels. In every Drawable there is also a list of the shaders used and the parameters for each shader. Sometimes there are textures embedded in the file as well. Drawables can also contain skeleton data, but it is not required. This is usually only found in dynamic Drawables (objects affected by physics) such as props or in Drawables that are animated. Lastly, Drawables can contain lights, where each light contains light properties such as direction, falloff, color, etc.

### Blender Hierarchy

<div align="left" data-full-width="false"><figure><img src="/files/TUUjP8BoI0GuWDNr8AwJ" alt="" width="453"><figcaption><p>Example Drawable object</p></figcaption></figure></div>

In Blender, the hierarchy for Drawables consists of one parent Drawable object (either an empty or an armature depending on whether or not the Drawable has skeleton data) and Drawable Models (mesh objects).


# Level of Detail (LODs) Editing

The LODs for each Drawable Model can be edited in the `Mesh Properties > Sollumz LODs` panel. As mentioned before, there are 4 LOD levels: **High**, **Medium**, **Low**, and **Very Low**. You will also see the "Very High" LOD level, but that is only used for YFT vehicles (see Fragments > [Vehicle Setup](/documentation/fragments.yft/vehicle-setup#import-with-_hi)).

<div align="left"><figure><img src="/files/J2VRIxZ9yb6qnDjvIAtj" alt="" width="493"><figcaption><p>Mesh Properties > Sollmz LODs</p></figcaption></figure></div>

### Setting LOD Level

For each LOD level, you can select the mesh it will use. You can also select any LOD level from the list and it will swap out the mesh that the Drawable Model uses.

<div align="left"><figure><img src="/files/4wujaT7HTBbdYbP7dBdI" alt="" width="489"><figcaption><p>Swapping LOD meshes</p></figcaption></figure></div>

LODs can also be changed for the entire hierarchy at once in the `Sollumz Tools > General > View` panel.

<div align="left"><figure><img src="/files/ogYOA2EYvUpGMsD8sqeX" alt=""><figcaption><p>Sollumz Tools > General > View</p></figcaption></figure></div>

Alternatively, press `Shift + V` to open a pie menu for quickly viewing different LOD levels.

<figure><img src="/files/zjl94QgMjuU7vSdd9Tf9" alt=""><figcaption><p>LODs pie menu (Shift + V)</p></figcaption></figure>

### Auto LOD Tool

Sollumz provides a basic LOD generation tool that uses the decimate modifier.

Select the Drawable Model and Navigate to `Sollumz Tools > Drawable > LOD Tools`.

<div align="left"><figure><img src="/files/KJ4y7dqes5CjDTMBxlyl" alt=""><figcaption><p>Sollumz Tools > Drawable > LOD Tools</p></figcaption></figure></div>

From here you can select which LOD levels will get created. Normally you'd model the highest LOD first, convert to a Drawable Model, then use that high LOD mesh as the reference mesh. The reference mesh is not affected in this process. Each subsequent LOD level is decimated by `Decimate Step`.

<div align="left"><figure><img src="/files/3QMVcAlpFQdgsSyuOK7J" alt=""><figcaption><p>Generating LODs using Suzanne.high</p></figcaption></figure></div>

Your results will vary depending on the mesh, as the decimate modifier does not work well for all topologies.

### Extracting LODs into Separate Objects

You can also take advantage of Blender's instancing functionality and separate the LOD meshes into separate objects. This allows you to work on multiple LOD meshes at once.

Select the Drawable Model and Navigate to `Sollumz Tools > Drawable > LOD Tools`.

<div align="left"><figure><img src="/files/DhyAAOXwRSqkgkEYfaVh" alt=""><figcaption><p>Sollumz Tools > Drawable > LOD Tools</p></figcaption></figure></div>

From here you can select which LODs to extract as well as what to parent the new objects to. You can either parent the objects to a collection or an empty object.

<div align="left"><figure><img src="/files/8YX4kSWzuZWNTvNPUvG3" alt=""><figcaption><p>Extract LODs</p></figcaption></figure></div>

Notice how these new objects are using the same meshes as the ones defined in the `Sollumz LODs` panel.

<div align="left"><figure><img src="/files/6AnYCWD5RHbS32zfqK2P" alt=""><figcaption><p>Mesh Properties > Sollumz LODs</p></figcaption></figure></div>

Now, if you edit one of these object instances, the Drawable Model will be affected too.

<div align="left"><figure><img src="/files/MuZ2wYlv77rDPcvrILjv" alt=""><figcaption><p>Editing Suzanne.high</p></figcaption></figure></div>


# Rigging

Drawables can be rigged using either vertex groups (skinning) or Child Of constraints. The top-level Drawable object must be an armature.

### Skinning

Skinning Drawables works the same way you would normally do it in Blender. Simply create vertex groups where each group's name corresponds to a bone in the armature. Then, add an armature modifier and specify the Drawable as the armature object.

<div align="center"><figure><img src="/files/9bp1ciTGvjNfFYweFWpo" alt="" width="503"><figcaption><p>Drawable Model setup for skinning</p></figcaption></figure></div>

### Linking bones to Drawable Models

Many Drawables aren't rigged using weighted vertex groups. You can instead link an entire Drawable Model to a bone by using a *Copy Transforms* constraint.

<figure><img src="/files/BrmyejfF29XszGTWSDsP" alt=""><figcaption><p>Sollumz Tools > Drawables > Bone Tools</p></figcaption></figure>

Use the "Add Bone Constraint" operator with the Drawable Model Selected to add a *Copy Transforms* constraint with the properties setup for correct previewing.

<figure><img src="/files/exwaroAC3wODdznHXLIR" alt=""><figcaption><p>Example <em>Copy Transforms</em> constraint for a Drawable Model</p></figcaption></figure>

{% hint style="info" %}
By default, Blender sets the owner space and target space of the *Copy Transforms* constraint to "World". This can cause issues when objects are parented to both bones and other objects. Because of this, **make sure to always use the Add Bone Constraint tool when creating&#x20;*****Copy Transforms*****&#x20;constraints.**
{% endhint %}


# Fragments (.yft)

Fragments are objects that contain separable parts and react to physics. These objects are typically used in breakable props (i.e. street lamps) and vehicles. The file contains a Drawable and a Composite (collision), and sometimes multiple of each if there is a destroyed variant such as in gas tanks. However, Sollumz does not currently support editing destroyed variants of Fragments.

It's recommended that you read the documentation page on Drawables and collisions first, as Fragments are made up of these objects.

{% content-ref url="/pages/jjfq3GUVDJ5YgTlnOROP" %}
[Drawables (.ydr)](/documentation/drawables.ydr)
{% endcontent-ref %}

{% content-ref url="/pages/GD7UEMAqFXOsu7UaiCn9" %}
[Collisions (.ybn)](/documentation/collisions.ybn)
{% endcontent-ref %}

### File Layout

```
Fragment
    Drawable
    DrawableDamaged (sometimes)
    Physics
        Composite
        CompositeDamaged (sometimes)
        PhysicsGroups
        PhysicsChildren
    VehicleGlassWindows
    GlassWindows (currently not supported)
    Lights
```

{% hint style="info" %}
The file layout for Fragments is quite complex, even with the simplified layout shown above (if you wish to see the full file layout, just open a yft.xml). However, you don't need to understand how the file works internally to understand how it works in Sollumz.
{% endhint %}

The Fragment contains a main Drawable as well as a `Physics` section which contains the collisions and physics data. `PhysicsGroups` contains groups of physics data where each group is linked to a bone. This is essentially the physics properties for each bone. `PhysicsChildren` contains physics data for each collision (i.e. mass, inertia). Each physics child belongs to a `PhysicsGroup`, and multiple children can belong to a single group.

You'll also notice there is a `VehicleGlassWindows` section. As the name implies, this is where data relating to vehicle windows are stored. Non-vehicle fragments can also have `GlassWindows`, but that is not currently supported by Sollumz.

Finally, there are `Lights`, which, just like Drawables, contain any lights that the Fragment might have (only ever used in prop Fragments).

### Blender Hierarchy

<div align="left"><figure><img src="/files/1wzCOOddMapATomaIap1" alt=""><figcaption><p>Example Fragment object</p></figcaption></figure></div>

The Blender hierarchy for Fragments is quite simple. The Fragment object itself is an armature with a Bound Composite and Drawable parented to it. The Fragment can also contain lights. Lights are typically stored in an empty object called "Lights", but can also be stored loosely in the Fragment or under the Drawable. It's up to you where to store the lights, as, during export, it will search all children (recursively) for lights. The hierarchy for the Bound Composite and Drawable is exactly the same.


# Bone Physics

You will notice that each Fragment bone now has a `Use Physics` property.

<div align="left"><figure><img src="/files/qNLRpcDcLxltbtjckCUo" alt=""><figcaption><p>Bone Properties > Sollumz > Fragment</p></figcaption></figure></div>

Enabling this will reveal a `Physics` subpanel where various physics properties can be configured for that bone. The defaults work great for most use cases but feel free to tweak them to get the results you want.&#x20;

{% hint style="info" %}
If you're ever not sure what physics properties to set, import a similar model from the game and copy its physics properties.
{% endhint %}

Most importantly, enabling Use Physics is what causes the bone to react to physics. If this is unticked, any geometry associated with the bone will always remain static in-game. Usually, you'd have a bone for each separable part. That way, all parts of your Fragment will act independently of each other. See the [Prop Setup](/documentation/fragments.yft/prop-setup) page for an example (vehicles also have separable parts but the bone hierarchy is usually much more complex).

{% hint style="info" %}
Strength is what determines how easily the part can be separated. If strength is -1, the part will not separate, but will still react to physics. This can be seen in props with hinging doors such as the container prop shown in [Prop Setup](/documentation/fragments.yft/prop-setup#skeleton-setup).
{% endhint %}


# Collision Physics

Each separable part of a Fragment must have an associated collision object in order for physics to work. This means each bone with `Use Physics` enabled should also have a collision object linked to it.

### Rigging Collisions

You link collisions to bones the same way you link Drawable Models to bones as described in [Drawables (.ydr) > Rigging](/documentation/drawables.ydr/rigging#linking-bones-to-drawable-models).

<div align="left"><figure><img src="/files/NVRKQ45r2Xhjd9fVVIzU" alt=""><figcaption><p>Collision object linked to bone via a Child Of constraint</p></figcaption></figure></div>

### Setting Mass

Each collision object under a Fragment also has a Physics subpanel where you can define its mass.

<div align="left"><figure><img src="/files/7BxWygEowtnYbjhEQE3a" alt=""><figcaption><p>Object Properties > Sollumz > Physics</p></figcaption></figure></div>

#### Auto Mass Tool

There is also a tool for automatically calculating mass based on the collision material's density and the object's volume. Navigate to `Sollumz Tools > Fragment > Set Mass`. There you will find the `Calculate Collision Mass tool`.

<div align="left"><figure><img src="/files/lXV8Z3aiGUsH9PbrscUz" alt=""><figcaption><p>Sollumz Tools > Fragment > Set Mass</p></figcaption></figure></div>

In order for this tool to work, the collision object must have a collision material added.

### Volume and Inertia

Volume and Inertia are essential physics properties for collisions. You can find these options under `Object Properties > Sollumz`.

<div align="left"><figure><img src="/files/LATUB4DrmV944ZBPBCg0" alt=""><figcaption><p>Object Properties > Sollumz</p></figcaption></figure></div>

Typically when creating completely custom collisions, you would auto-calculate these values during export, as calculating these involves a lot of math relating to the dimensions and shape of your collisions.

<div align="left"><figure><img src="/files/LBjAbRZA4x3n1uEzhtQ2" alt=""><figcaption><p>Export Codewalker XML > Collisions</p></figcaption></figure></div>


# Prop Setup

The example prop used in this article is `prop_container_05a.yft`

<div align="center"><figure><img src="/files/G0yYchbKqMvSgbAyjBzQ" alt=""><figcaption><p>prop_container_05a.yft</p></figcaption></figure></div>

### Fragment Hierarchy

<div align="left"><figure><img src="/files/AzGRaFVcPAT3aozxVVW8" alt=""><figcaption><p>prop_container_05a Blender hierarchy</p></figcaption></figure></div>

### Prop Rigging

You'll also notice that each Drawable Model is rigged using a Child Of constraint instead of vertex groups.

<div align="left"><figure><img src="/files/J1cGYmSghbAUDtctnCq1" alt=""><figcaption><p>prop_container_05a.mesh</p></figcaption></figure></div>

This is the case for all props. Typically each Drawable Model for a prop corresponds to a particular separable part of the Fragment. Notice there is a Drawable Model for the latch, each door, and the container itself.

### Skeleton Setup

This matches up with the bone hierarchy.

<div align="left"><figure><img src="/files/Gpnf28Mj0kiPrzYSgW5q" alt=""><figcaption><p>prop_container_05a.skel</p></figcaption></figure></div>

Each bone is parented to `Prop_Container_05a` and is thus affected by that bone. Every skeleton in the game engine always has one root bone that all the other bones are parented to.

{% hint style="warning" %}
If you attempt to add multiple top-level bones (bones with no parent) you will run into issues. Make sure there is a single "root" bone that all other bones are parented to!
{% endhint %}

Notice, too, that each bone has `Use Physics` enabled. This means that each of those parts will have physics in-game and will separate from each other.&#x20;

<div align="left"><figure><img src="/files/fPrIIUzQh2uB1W9q2zVa" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
In this case, the doors don't actually "separate" from the mesh, but fling open instead. This is because the `Strength` bone physics property is set to -1. When set to another value (i.e. 100) you'll notice that the parts will separate.
{% endhint %}

<div align="left"><figure><img src="/files/j8OTYwSlytAqUjfbdAiJ" alt=""><figcaption><p>With Strength set to 100 for both doors</p></figcaption></figure></div>

### Collisions

As mentioned before, each bone with physics enabled must have an associated collision. However, there can be multiple collisions for a single bone. Notice for this prop, there is a single collision for the latch and the doors, but the container itself is comprised of 5 box collisions.

<div align="left"><figure><img src="/files/pspEoGOht6keZ5pGJuTD" alt=""><figcaption><p>prop_container_05a.col</p></figcaption></figure></div>

{% hint style="info" %}
You will notice that a lot of vanilla collisions will use bound shapes wherever possible. This is typically preferred over using a bound mesh as it is much more performant. **Keep collisions as simple as possible.**
{% endhint %}

Each of these collision objects is linked to a bone via a Child Of Constraint.

<div align="left"><figure><img src="/files/e93qlG2cNLwgOMsWxsxl" alt=""><figcaption><p>Prop_CDoor_L.col constraints panel</p></figcaption></figure></div>

Each collision also has its mass set in the `Object Properties > Sollumz > Physics` panel.

<div align="left"><figure><img src="/files/jmE8GIqNEtM3SyFnBk2m" alt=""><figcaption><p>Object Properties > Sollumz > Physics</p></figcaption></figure></div>

### Quick Note on YTYP Flags

{% hint style="info" %}
In order for physics to work for your prop in-game, make sure the YTYP archetype has the "Dynamic" flag enabled!
{% endhint %}

<div align="left"><figure><img src="/files/taDNJ9SIKmNGuWVoiqvL" alt=""><figcaption><p>Archetype Definition > Archetypes > crate > Flags</p></figcaption></figure></div>


# Vehicle Setup

The example vehicle used in this article is `adder.yft`

<figure><img src="/files/0Jc5IIMLYCouOhIawd8r" alt=""><figcaption><p>adder.yft</p></figcaption></figure>

### Fragment Hierarchy

<div align="left"><figure><img src="/files/Pvz5pKqII2oUfsA8FtP6" alt=""><figcaption><p>adder.yft Blender hierarchy</p></figcaption></figure></div>

### Contents

{% content-ref url="/pages/9j4qRj41q4nXUJ5mU2WI" %}
[Broken mention](broken://pages/9j4qRj41q4nXUJ5mU2WI)
{% endcontent-ref %}

{% content-ref url="/pages/G2v0KQiRalUzf3wEk7Xh" %}
[Vehicle Windows](/documentation/fragments.yft/vehicle-setup/vehicle-windows)
{% endcontent-ref %}

{% content-ref url="/pages/zF7tjoXsWcDaKSmKIYrP" %}
[Light IDs](/documentation/fragments.yft/vehicle-setup/light-ids)
{% endcontent-ref %}

{% content-ref url="/pages/5o1WuLNoZ707bozcbjya" %}
[Paint Colors](/documentation/fragments.yft/vehicle-setup/paint-colors)
{% endcontent-ref %}

{% content-ref url="/pages/8j7N827Pmlg8lqryVtnf" %}
[Broken mention](broken://pages/8j7N827Pmlg8lqryVtnf)
{% endcontent-ref %}

{% content-ref url="/pages/lcSPSZPMDcqRhKZ11CIv" %}
[Export Settings](/documentation/fragments.yft/vehicle-setup/export-settings)
{% endcontent-ref %}


# Import Settings

There are two import settings that determine how Fragments import: `Split By Group` and `Import with _hi`.

<figure><img src="/files/hraXOQwB2B0H2kxBm81E" alt=""><figcaption><p>Import Codewalker XML > Fragment</p></figcaption></figure>

#### Split By Group

Split By Group will split the Drawable by vertex group. This is typically what you want when editing vehicles, as vehicles are skinned (i.e. rigged with weighted vertex groups), so there is typically only one Drawable Model containing many vertex groups as opposed to multiple Drawable Models each linked to a bone (see [Drawables > Rigging > Skinning](/documentation/drawables.ydr/rigging#skinning) for more info on rigging Drawables).

Here is what `adder.yft` looks like when split by group.

<div align="left"><figure><img src="/files/uSCFpqNq1KUN4ywPg4qv" alt=""><figcaption><p>adder.yft split by vertex group</p></figcaption></figure></div>

Notice how each object represents a separable part of the vehicle. Since it's split by vertex group, each object will only have one vertex group.

<div align="left"><figure><img src="/files/Xl615lqIO6yaZ818q0Sh" alt=""><figcaption><p>bodyshell</p></figcaption></figure></div>

{% hint style="info" %}
While the Drawable is initially set up with one vertex group per object, it is perfectly fine for an object to contain multiple vertex groups.
{% endhint %}

Each object also has an armature modifier with the Fragment as the target object.

#### Import with \_hi

Vehicle Fragments have an additional LOD level that is stored in a separate file named `<fragment name>_hi.yft`. For adder, it would be called `adder_hi.yft`. This is the highest level of detail and is what the player sees when close to the vehicle (i.e. when driving). It is very cumbersome to work on two separate YFTs so Sollumz stores this extra LOD level in the `Very High` LOD level. This enables you to work on both YFTs at once.

{% hint style="info" %}
You should only use this LOD level when working with vehicles. When a mesh is provided for the `Very High` LOD level, Sollumz will export an extra \_hi YFT that you don't need when working on props.
{% endhint %}

To import `Very High` LODs, first enable the `Import with _hi` option in the[ import settings panel](#import-settings), and ensure the \_hi YFT is in the same directory as the non-hi YFT. Then, **select the non-hi YFT** and import.

<div align="left"><figure><img src="/files/PE5jGtnfKZf0APkpE4GX" alt=""><figcaption><p>Importing adder.yft.xml with hi</p></figcaption></figure></div>

{% hint style="info" %}
As with any Fragment/Drawable, if you want the textures to be automatically imported with the mesh, ensure you extract all textures to a folder with the **same name as the Fragment** in the **same directory**.
{% endhint %}


# Vehicle Windows

Vehicle windows are defined in the physics properties of the window collision. See `window_lf.col` in `adder.yft` for example.

<div align="left"><figure><img src="/files/Q01vVNksHzsF1eEIMBRE" alt=""><figcaption><p> window_lf.col | Object Properties > Physics</p></figcaption></figure></div>

Enabling `Is Glass Window` will cause the window properties to appear. The only property you should have to change here is the `Window Material`. This is the material that the corresponding window mesh uses. Looking at the `window_lf` mesh materials, we see that it uses two `vehicle_generic_glasswindows2` materials.

<div align="left"><figure><img src="/files/vtucA31MzX7Ib8QTKYvX" alt=""><figcaption><p>window_lf | Materials</p></figcaption></figure></div>

This is because one material represents the inner glass and the other represents the outer glass. Go into Edit Mode and select the vertices of each material to see which one represents the outer glass. In this case, it's the material without the ".001" so that's the one that the glass window should reference.&#x20;

<div align="left"><figure><img src="/files/z604kwSmN93i9YpIyJll" alt=""><figcaption><p>Determining which material is the outer glass material</p></figcaption></figure></div>

That's all that is needed for working vehicle windows!

### Shattermaps

You will notice that all vanilla vehicles have "shattermaps", which is an image that defines the border of the glass-breaking pattern. These aren't 100% necessary for working vehicle windows but will result in better-looking glass shatter patterns.

In Sollumz, shattermaps are represented as planes with a single texture. For example, `adder.yft` has an object called `windscreen_shattermap` which is parented to `windscreen.col`.

<figure><img src="/files/0SlMMPYFgSRCu9H03aap" alt=""><figcaption><p>windscreen_shattermap</p></figcaption></figure>

These are always low-res bitmap greyscale textures. Currently, Sollumz has no tools for creating shattermaps, so your best bet is to copy shattermaps from vanilla files and work off of those.


# Light IDs

Any mesh with `vehicle_lightsemissive` shaders will appear always emissive in-game unless light IDs are assigned. Assigning light IDs allow you to make some faces only appear emissive under certain conditions (i.e. headlights on/off). Sollumz makes assigning light IDs easy.

With a headlight object selected, enter `Edit Mode` in `Face Selection` mode and navigate to the `Sollumz Tools > Fragment > Vehicle Light IDs` panel.

<figure><img src="/files/s6Lqa15DteyV6S6ahVSA" alt=""><figcaption><p>Sollumz Tools > Fragment > Vehicle Light IDs</p></figcaption></figure>

Select the faces of the left headlight that use the emissive shader, then set its light ID to `headlight_l`.

<div align="left"><figure><img src="/files/AyoMmUQtWimnGzmApjzL" alt=""><figcaption><p>Setting left headlight light IDs</p></figcaption></figure></div>

Notice now that if you unselect those faces, and select the `headlight_l` light ID, it will select those faces you just assigned.

<div align="left"><figure><img src="/files/B6s5gFOaP0I0VNgNgizQ" alt=""><figcaption><p>Selecting light IDs</p></figcaption></figure></div>


# Paint Colors

Paint colors allow you to determine which materials represent the **Primary** color, **Secondary** color, **Wheel** color, **Interior Trim** color, and **Dashboard** color. To select the paint color for a material, navigate to `Material Properties > Sollumz > Fragment`.

<figure><img src="/files/b47HTqpdayFUXSdiewWw" alt=""><figcaption><p>Material Properties > Sollumz > Fragment</p></figcaption></figure>

By default it will be "Not Paintable", meaning the shader will not be affected by any paint color.&#x20;

{% hint style="info" %}
Not all shaders are paintable. If you are trying to set up a paintable vehicle material and you are getting the "Not a paint shader" message, then you need to use a different shader. Typically you'd want to use a `vehicle_paint` shader for the body of a vehicle.
{% endhint %}


# Wheels

Upon importing, you will notice that the vehicle has only one wheel. This is because the game instances (re-uses) `wheel_lf` for all other wheels.

Wheel meshes do not have vertex groups but are instead rigged by a Child Of Constraint (as explained in [Drawables > Rigging](/documentation/drawables.ydr/rigging#linking-bones-to-drawable-models)).

<figure><img src="/files/eWHFFd0gaf1tDNBhqw4R" alt=""><figcaption><p>Wheel mesh rigging</p></figcaption></figure>

Also, wheel meshes have the `Is Wheel Mesh` property ticked under `Object Properties > Sollumz`.

<div align="left"><figure><img src="/files/UG0i89wOxv3ajnK7fiWl" alt=""><figcaption><p>Object Properties > Sollumz</p></figcaption></figure></div>

That's all that's needed for setting up wheel meshes!

### Previewing the Other Wheels

In `Sollumz Tools > Fragment > Create Fragment Objects` is a tool called `Generate Wheel Instances`. This tool will create instances of the wheel, allowing you to better preview what it looks like in-game. This is useful when positioning the wheel bones.

<div align="left"><figure><img src="/files/74dqhFm8zF7TL5VMG6Xc" alt=""><figcaption><p>Sollumz Tools > Fragment > Create Fragment Objects</p></figcaption></figure></div>


# Export Settings

In the `Export Codewalker XML > Fragment` panel, you will find the `Toggle LODs` option.

<div align="left"><figure><img src="/files/vWasQAD41iZcIlT9lOCc" alt=""><figcaption><p>Export Codewalker XML > Fragment</p></figcaption></figure></div>

This allows you to export just the hi YFT, just the non-hi YFT, or both at the same time.


# Vehicle Shaders

In this page you can find all vehicle shaders used on vehicles and their technical usage

### Vertex Colors for vehicles

* Red : Ambient Occlusion
* Green : Body Deformation
* Blue : Burn level

### Vehicle Paint shaders

`vehicle_paint1`

{% tabs %}
{% tab title="📚 Description" %}
Typical vehicle paint shader, used on most vehicles in GTA V.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="205">UV Maps</th><th width="494">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Specular</td></tr><tr><td>UVMap 1 </td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/LuqquqIVUtvreRd0YIMX" alt=""><figcaption><p>Example of vehicle_paint1 in blista.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint1_enveff`

{% tabs %}
{% tab title="📚 Description" %}
Basic vehicle paint shader with additional feature of applying snow.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Specular</td></tr><tr><td>UVMap 1 </td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/R1ap7oJBZ5TxKiiHAMgN" alt=""><figcaption><p>Example of vehicle_paint1_enveff from asea2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint2`

{% tabs %}
{% tab title="📚 Description" %}
A very similar shader to vehicle\_paint1, with dirt mapping moved to first UV map.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Specular / Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/lvGebheK1d44tnow5OHu" alt=""><figcaption><p>Example of vehicle_paint2 from burrito3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint2_enveff`

{% tabs %}
{% tab title="📚 Description" %}
A copy of vehicle\_paint2 with additional feature of applying snow.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Specular / Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/neADIbKGEKNbGcjQhdyx" alt=""><figcaption><p>Example of converted material for vehicle_paint2_enveff</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint3`

{% tabs %}
{% tab title="📚 Description" %}
Used for liveries on a car.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="319">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Dirt</td></tr><tr><td>UVMap 1</td><td>Second diffuse / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/C4tt7dhzqLuB1MLXgRh3" alt=""><figcaption><p>Example of vehicle_paint3 from buffalo3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint3_enveff`

{% tabs %}
{% tab title="📚 Description" %}
A copy of vehicle\_paint3 with additional feature of applying snow.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="319">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Dirt / Enveff tileable UV (edited in envEffTexTileUV)</td></tr><tr><td>UVMap 1</td><td>Second diffuse / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/dLP6OrZN4pt0RXrFPtOb" alt=""><figcaption><p>Example of vehicle_paint3_enveff from stunt.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint3_lvr`

{% tabs %}
{% tab title="📚 Description" %}
Variant of vehicle\_paint3 with tileable livery via second UV Map.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Third diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="319">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Dirt</td></tr><tr><td>UVMap 1</td><td>Livery / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/X6TFYohuRjt2s0z9Iqgs" alt=""><figcaption><p>Example of vehicle_paint3_lvr from tornado5.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint4`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and/or livery on a car.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1</td><td>Tileable specular (edited in specTexTileUV)</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/tOHYo8Xw2giiqRROQqB5" alt=""><figcaption><p>Example of vehicle_paint4 from banshee.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint4_emissive`

{% tabs %}
{% tab title="📚 Description" %}
Very same vehicle\_paint4 shader with support of emissives.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1</td><td>Tileable specular (edited in specTexTileUV)</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/sK4UY2Wtl2tcnNKMIj4a" alt=""><figcaption><p>Example of vehicle_paint4_emissive from blimp3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint4_enveff`

{% tabs %}
{% tab title="📚 Description" %}
vehicle\_paint4 shader, used for metal worn effect and liveries on a car.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1</td><td>Tileable specular (edited in specTexTileUV)</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/6urCeAjq1ewtDWcNV6XR" alt=""><figcaption><p>Example of vehicle_paint4_enveff from caddy3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint5_enveff`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and liveries on a car.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1 </td><td>Livery</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/kvyhxuwehUfBQbA2a4Zz" alt=""><figcaption><p>Example of vehicle_paint5_enveff from camper.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint6`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal bolts on planes, applying liveries, metal worn effect.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Second diffuse
* [x] Dirt
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1 </td><td>Livery</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/JUBdhYc1FwvhMAGrybNX" alt=""><figcaption><p>Example of vehicle_paint6 from utillitruck.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

`vehicle_paint7`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and liveries on a car.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Specular / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1 </td><td>Livery</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/fR3i4ICDTGlDpnwvIaIj" alt=""><figcaption><p>Example of vehicle_paint7 from phantom2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint7_enveff`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and liveries on a car.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV)</td></tr><tr><td>UVMap 1 </td><td>Livery</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/3a0zH9JVsGVl8Sv66iIi" alt=""><figcaption><p>Example of vehicle_paint7_enveff from wastelander.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint8`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and liveries on a car.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Dirt normal map
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt normal map</td></tr><tr><td>UVMap 1 </td><td>Diffuse tileable UV (edited in DiffuseTexTileUV) / Snow sampler tileable UV (edited in envEffTexTileUV)/ Livery / Specular</td></tr><tr><td>UVMap 2</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/Ci0gas41aiQCpuUTMput" alt=""><figcaption><p>Example of vehicle_paint8 from brutus.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_paint9`

{% tabs %}
{% tab title="📚 Description" %}
Used for metal worn effect and liveries on a car.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Snow sampler 0
* [x] Snow sampler 1
* [x] Second diffuse
* [x] Dirt
* [x] Dirt normal map
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Dirt normal map</td></tr><tr><td>UVMap 1 </td><td>Livery</td></tr><tr><td>UVMap 2</td><td>Dirt / Diffuse tileable UV (edited in DiffuseTexTileUV) / Snow sampler tileable UV (edited in envEffTexTileUV) / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/tgj4SexMDyK4qqvznf08" alt=""><figcaption><p>Example of vehicle_paint9 from conada.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle Light shaders

`vehicle_lightsmeissive`

{% tabs %}
{% tab title="📚 Description" %}
Allows the light to be lit.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="319">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Specular</td></tr><tr><td>UVMap 1 </td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/D7COLtLSKeuHYxuSsYQ5" alt=""><figcaption><p>Example of vehicle_lightsemissive from asea2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Lights ID values for different type of vehicle lights, available in Fragments / Vehicle Light IDs

<figure><img src="/files/Ms62wiArCs7HfxVGREWr" alt=""><figcaption><p>Lights ID</p></figcaption></figure>

***

### Vehicle Glass shaders

`vehicle_vehglass`

{% tabs %}
{% tab title="📚 Description" %}
Shader specifically tailored to work with windows and other glasses.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Specular</td></tr><tr><td>UVMap 1</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/hb5DrQNv8CbWIyeMSbgi" alt=""><figcaption><p>Example of vehicle_vehglass from buffalo2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_vehglass_inner`

{% tabs %}
{% tab title="📚 Description" %}
Identical shader to vehicle\_vehglass, used for inner side of windows/glasses, with limited dirt intensity.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Specular</td></tr><tr><td>UVMap 1</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/dVe1wUzfxCxOQU9Qm7uM" alt=""><figcaption><p>Example of vehicle_vehglass_inner from buffalo2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle Interior shaders

`vehicle_interior`

{% tabs %}
{% tab title="📚 Description" %}
Simple interior shader with normal map support.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse / Normal map / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/ZMHl8a5jKuBzCp8VvO72" alt=""><figcaption><p>Example of vehicle_interior from vigero.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_interior2`

Simple interior shader without normal map support.

{% tabs %}
{% tab title="📚 Description" %}
Simple interior shader without normal map support.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/wuHeVUytRXXwjGKcwxeY" alt=""><figcaption><p>Example of vehicle_interior2 from burrito3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle Mesh shaders

`vehicle_mesh`

{% tabs %}
{% tab title="📚 Description" %}
Extensively used for metallic vehicle parts, like exhausts, engines, chassis parts.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Normal map / Specular</td></tr><tr><td>UVMap 1</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/B2TNJg3jmSjL3CrM9Nsv" alt=""><figcaption><p>Example of vehicle_mesh from vigero.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_mesh_enveff`

{% tabs %}
{% tab title="📚 Description" %}
Extensively used for metallic vehicle parts, like exhausts, engines, chassis parts with additional feature of applying snow.

Vertex Alpha: visibility of snow samplers (**black** - non applied, **white** - applied)
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

{% endtab %}

{% tab title="🗺 UV Maps" %}

{% endtab %}

{% tab title="✒ Example" %}

{% endtab %}
{% endtabs %}

***

### Vehicle Tire shaders

`vehicle_tire`

{% tabs %}
{% tab title="📚 Description" %}
A shader for wheels, **cannot be used** on any other vehicle parts.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Dirt / Normal map / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/sDoszR5sJajJGJAWxZ0Q" alt=""><figcaption><p>Example of vehicle_tire from vigero.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_tire_emissive`

{% tabs %}
{% tab title="📚 Description" %}
vehicle\_tire shader with emissive support
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse /  Dirt / Normal map / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/ACLnODZKqmClljMFfAMH" alt=""><figcaption><p>Example of vehicle_tire_emissive from tezeractyft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle Emissive shaders

`vehicle_dash_emissive`

{% tabs %}
{% tab title="📚 Description" %}
Shader dedicated for emissive dials being lit up at night.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/wRYAr5W4WNAD5JrBcVTy" alt=""><figcaption><p>Example of vehicle_dash_emissive from vigero.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_dash_emissive_opaque`

{% tabs %}
{% tab title="📚 Description" %}
Shader dedicated for emissive dials being lit up at night for opaque textures.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/X49hEJxZdZU4EWQlkGiA" alt=""><figcaption><p>Example of converted material for vehicle_dash_emissive_opaque</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle License plate shaders

`vehicle_licenseplate`

{% tabs %}
{% tab title="📚 Description" %}
Shader responsible for rendering vehicle license plates with changeable text.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Plate background
* [x] Plate background normal map
* [x] Font texture
* [x] Font texture normal map
* [x] Dirt
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="316">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Plate background, Place background bump, Font, Font bump</td></tr><tr><td>UVMap 1</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/AkG6QdN1ewdQKS6CayA3" alt=""><figcaption><p>Example of vehicle_licenseplate from asea2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

### Vehicle Miscellaneous shaders

`vehicle_badges`

{% tabs %}
{% tab title="📚 Description" %}
Shader for vehicle badges.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="321">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Normal map / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/Dd9SrtHntSa7J8JQ2KjR" alt=""><figcaption><p>Example of vehicle_badges from asea2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_decal`

{% tabs %}
{% tab title="📚 Description" %}
Shader created for adding additional decals, scratches on the vehicle.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/z8JmIUOzjHlzrZAwSg6y" alt=""><figcaption><p>Example of vehicle_decal from ambulance.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_decal2`

{% tabs %}
{% tab title="📚 Description" %}
Derivated from vehicle\_decal, with dirt support.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Dirt
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="317">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Dirt / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/CprvJSyG3S7a5CzwBPTr" alt=""><figcaption><p>Example of vehicle_decal2 from burrito3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_detail2`

{% tabs %}
{% tab title="📚 Description" %}
Used to add a leather detail effect to seats and dashboards.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="369">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Normal map / Specular</td></tr><tr><td>UVMap 1</td><td>Detail (tileable)</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/Fmv2REzcz5V9AJSSclOP" alt=""><figcaption><p>Example of vehicle_detail2 from burrito3.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_shuts`

{% tabs %}
{% tab title="📚 Description" %}
Shader utilized for inner sides of engine bay, doors, bonnet and boot.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Normal map / Specular</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/TIulxbMYnJ0Hq9HySDPy" alt=""><figcaption><p>Example of vehicle_shuts from sentinel2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}

***

`vehicle_track/vehicle_track2`

{% tabs %}
{% tab title="📚 Description" %}
Shader for UV animation, **hardcoded usage**, in modded vehicles works only on the left side.
{% endtab %}

{% tab title="🎨 Texture Sampler(s)" %}

* [x] Diffuse
* [x] Normal map
* [x] Specular
  {% endtab %}

{% tab title="🗺 UV Maps" %}

<table><thead><tr><th width="320">UV Maps</th><th width="379">Texture</th></tr></thead><tbody><tr><td>UVMap 0</td><td>Diffuse  / Normal map / Specular</td></tr><tr><td>UVMap 1</td><td>Dirt</td></tr></tbody></table>
{% endtab %}

{% tab title="✒ Example" %}

<figure><img src="/files/wCr3PROoeeUeimLvE10r" alt=""><figcaption><p>Example of vehicle_track from manchez2.yft</p></figcaption></figure>
{% endtab %}
{% endtabs %}


# Drawable Dictionary (.ydd)

The Drawable Dictionary is a container that holds a collection of drawables. Its primary use is for storing LOD models, ped components, ped props, mesh minimaps and instanced props.

It is recommended that you read the Drawable documentation page before creating a Drawable Dictionary, as it consists of drawables.

{% content-ref url="<https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr>" %}
<https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr>
{% endcontent-ref %}

### File Layout

```
Drawable Dictionary
    Drawable#1
        ShaderGroup
        Skeleton (sometimes, mostly seen on ped components)
        DrawableModelsHigh
        DrawableModelsMed
        …
    Drawable#2
    Drawable#3
    Drawable#4
    Drawable#5
    …
```

For the hierarchy, several drawables exist as regular game-ready assets, but all of them share one parent drawable dictionary object.

### Blender Hierarchy

<div align="left" data-full-width="false"><figure><img src="/files/PrCjMzRugxSNmPLpUL5R" alt=""><figcaption><p>Example Drawable Dictionay object</p></figcaption></figure></div>

In Blender, Drawable Dictionaries comprises a parent object and one or more drawable objects in its hierarchy.

### Limitation

Some features of Drawable objects cannot be inherited by Drawable Dictionaries. For example, the embedded collision **cannot function** when the drawable is in a drawable dictionary.

Furthermore, CodeWalker cannot identify the real name of a drawable in drawable dictionaries unless a nametable with resolved names is loaded. Thus, it is recommended to create a nametable whenever utilizing a drawable dictionary in your project to facilitate your own and others' modding processes.

### Archetype Definition

{% hint style="info" %}
A Drawable Dictionary does not have its own archetype definition.
{% endhint %}

When creating the archetype definition for a drawable in a drawable dictionary, it is necessary to fill the correct name of your drawable dictionary in the "Drawable Dictionary" blank to ensure it workds within the game.

For instance, if we have the drawable dictionary `my_ydd` and the drawable `my_ydr` in the scene. Then you should fill in "Drawable Dictionary" in the archetype as shown in the picture below:

<div align="left" data-full-width="false"><figure><img src="/files/uSb61J1GjfQIjiFUY4vY" alt=""><figcaption><p>Fill the "Drawable Dictionary" with the name of your drawable dictionary</p></figcaption></figure></div>

{% hint style="info" %}
If you use the "Auto-Create From Selected" function, the "Drawable Dictionary" will be filled in automatically.
{% endhint %}


# Collisions (.ybn)

Collisions are well, collisions. whether that is for players, bullets, vehicles etc.\
There is 3 main types of .ybns, the normal version(s), hi@ versions which is for weapon bullets, and ma@ collisions that are used to procedurally spawn grass and other things like garbage on the street.

```
BoundComposite
     BoundGeometryBVH
          BoundPolyMesh
          BoundBox
          BoundPolyBox
```

{% hint style="info" %}
A very common mistake users make is not applying a Flag Preset to the Bound GeometryBVH, resulting in the collision not working in game.
{% endhint %}

The Bound Composite is the top most part of the hierarchy, it doesnt control much on its own.\
\
The Bound GeometryBVH controls things like which things collide with the Bound Poly Mesh / Boxes.\
&#x20;![](/files/PE4LCnOGlyXPTcxw5Tug)\
You can disable or enable certain flags here t o disable collision for specific object types.\
\
The Bound Poly Mesh / Box is the collision model itself, what you are actually colliding with.\
It is here where you can add or remove Collision materials and apply flags to said materials to control the physics of the collisions further.\
![](/files/RLWjIdvgHtiWfFo6uVj9)\
\
Also, the "Procedural ID" setting is used mainly for ma@ collision ybns to spawn procedural objects like trash on the ground.\
The "Room ID" Setting is used for setting up different rooms for MLOs.<br>


# Clip Dictionary (.ycd) \[TODO]

TODO


# Archetype Definition (.ytyp)

**Archetype definitions (.ytyp) is basically the configuration file to define properties of objects.**\
\
inside the .ytyp you will find multiple Archetypes, each archetype is for one object, there is 3 types of archetypes, Base, Time and MLO. Base is for .ydr, .ydd, .yft objects, Time archetypes are for time based objects such as window emissives that only show up at night. MLO archetypes are for MLOs (.ybn) objects.<br>

* <br>

  <figure><img src="/files/lWwtfDFJ6uBrViNULGbT" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="266.3333333333333">Settings</th><th width="628">Description</th><th data-hidden></th></tr></thead><tbody><tr><td><code>Type</code></td><td>Archetype type (Base, Time, MLO)</td><td></td></tr><tr><td><code>Name</code></td><td>Archetype Name</td><td></td></tr><tr><td><code>Special Attribute</code></td><td>Marks the archetype as a special kind of object, most often a door, but also lights, bushes and a few others</td><td></td></tr><tr><td><code>Texture Dictionary</code></td><td>Texture dictionary (.YTD)</td><td></td></tr><tr><td><code>Clip Dictionary</code></td><td>Linked YCD Animation (.YCD)</td><td></td></tr><tr><td><code>Drawable Dictionary</code></td><td>The .YDD this archetype's model comes from. Blank when the model is not inside a dictionary</td><td></td></tr><tr><td><code>Physics Dictionary</code></td><td>Blank or same as Archetype Name if embedded</td><td></td></tr><tr><td><code>HD Texture Distance</code></td><td>Distance at which the HD Textures (+hi.ytd, +hidr.ytd) load</td><td></td></tr><tr><td><code>LOD Distance</code></td><td>Distance at which the object unloads</td><td></td></tr><tr><td><code>Asset Type</code></td><td>Assetless, Drawable Dictionary (.YDD), Drawable (.YDR), Fragment (.YFT), Uninitialized</td><td></td></tr><tr><td><code>Asset Name</code></td><td>Same as Archetype Name</td><td></td></tr><tr><td><code>Linked Object</code></td><td>Object in blender scene linked to the archetype</td><td></td></tr></tbody></table>


# Archetype Flags

Archetype flags are used to define certain properties of the archetype, like its vertex colours and its physics and how it renders

<figure><img src="/files/UcW3f8Wlfs22g7e0HDKi" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="316">Flag</th><th>Description</th></tr></thead><tbody><tr><td><code>Wet Road Reflection</code></td><td>Contributes to reflections on wet road surfaces</td></tr><tr><td><code>Dont Fade</code></td><td>The entity does not fade with distance, it pops in and out instead</td></tr><tr><td><code>Draw Last</code></td><td>Drawn after everything else, so transparent surfaces such as glass blend correctly over what is behind them</td></tr><tr><td><code>Climbable By AI</code></td><td>Peds may climb over it</td></tr><tr><td><code>Suppress HD TXDs</code></td><td>High detail texture dictionaries are never streamed in, useful for props never seen close up</td></tr><tr><td><code>Static</code></td><td>Freezes the entity and disables physics, the default for most map props</td></tr><tr><td><code>Disable alpha sorting</code></td><td>Changes how the entity is written to the depth buffer, can help or hurt when transparent surfaces overlap; try it alongside <code>Draw Last</code></td></tr><tr><td><code>Tough For Bullets</code></td><td>Bullets neither penetrate nor scar the surface</td></tr><tr><td><code>Is Generic</code></td><td>Appears to mark archetypes reused across many locations, poorly understood (used for procedural objects)</td></tr><tr><td><code>Has Anim (YCD)</code></td><td>The archetype has an associated clip dictionary</td></tr><tr><td><code>UV anims (YCD)</code></td><td>The archetype has UV animations, used for scrolling signs and conveyor belts</td></tr><tr><td><code>Shadow Only</code></td><td>The entity is invisible but still casts a shadow, commonly used to fake shadows cheaply</td></tr><tr><td><code>Damage Model</code></td><td>The archetype has a damaged state, as street lights and hydrants do</td></tr><tr><td><code>Dont Cast Shadows</code></td><td>The entity is visible but casts no shadow</td></tr><tr><td><code>Cast Texture Shadows</code></td><td>Related to alpha-aware shadows, but its effect is unclear. <code>Has Alpha Shadow</code> appears to be the flag that actually drives them</td></tr><tr><td><code>Dont Collide With Flyer</code></td><td>Aircraft pass straight through</td></tr><tr><td><code>Double-sided rendering</code></td><td>Back faces are rendered too, commonly used on foliage</td></tr><tr><td><code>Dynamic</code></td><td>The entity is simulated by physics and can be pushed or knocked over</td></tr><tr><td><code>Override Physics Bounds</code></td><td>Uses the collision bounds defined on the archetype instead of those embedded in the model</td></tr><tr><td><code>Auto Start Anim</code></td><td>The animation plays on its own, without a script starting it</td></tr><tr><td><code>Has Pre Reflected Water Proxy</code></td><td>Has a simplified version prepared for water reflections</td></tr><tr><td><code>Has Drawable Proxy For Water Reflections</code></td><td>The water reflection proxy is a separate drawable</td></tr><tr><td><code>Does Not Provide AI Cover</code></td><td>Peds will not take cover behind it</td></tr><tr><td><code>Does Not Provide Player Cover</code></td><td>The player cannot take cover behind it</td></tr><tr><td><code>Is Ladder Deprecated</code></td><td>Legacy ladder flag, no longer used</td></tr><tr><td><code>Has Cloth</code></td><td>The model contains simulated cloth</td></tr><tr><td><code>Enable Door Physics</code></td><td>Enables door physics, the archetype's <a href="/pages/eTZggUHmw7LMd35HAljK"><mark style="color:$primary;">special attribute</mark></a> must also be set to the kind of door, otherwise the flag does nothing.</td></tr><tr><td><code>Is Fixed For Navigation</code></td><td>The object is already part of the navigation mesh, so peds do not steer around it at runtime</td></tr><tr><td><code>Dont Avoid By Peds</code></td><td>Peds do not steer around it while pathfinding, collision still applies</td></tr><tr><td><code>Use Ambient Scale</code></td><td>Takes the ambient lighting scale from the surrounding area instead of computing its own</td></tr><tr><td><code>Is Debug</code></td><td>Appears to mark development-only content, poorly understood</td></tr><tr><td><code>Has Alpha Shadow</code></td><td>The archetype casts an alpha-aware shadow</td></tr></tbody></table>


# Archetype Extensions

Used to add things like particles, ped spawns, ladders, and light shafts to be attached to the entity

<figure><img src="/files/7S2KOXlIUsW12UJHMzUO" alt="" width="389"><figcaption></figcaption></figure>

### CExtensionDefExpression

Used for:<br>

<figure><img src="/files/u7VtNIwZUuz2YIDhxCEo" alt="" width="381"><figcaption></figcaption></figure>

| Setting                    | Description                                |
| -------------------------- | ------------------------------------------ |
| Name                       |                                            |
| Expression Dictionary Name |                                            |
| Expression Name            |                                            |
| Creature Metadata Name     |                                            |
| Initialize on Collision    |                                            |
| Offset Position XYZ        | Extension offset relative to entity origin |

### CExtensionProcObject

Used For: Attaching / Spreading procedural objects<br>

<figure><img src="/files/hPQ8YXCoB7qNifEBjMXk" alt="" width="383"><figcaption></figcaption></figure>

<table><thead><tr><th width="222">Setting</th><th>Description</th></tr></thead><tbody><tr><td>Name</td><td>Extension Name</td></tr><tr><td>Radius Inner</td><td>Inside radius of a circle around the extension</td></tr><tr><td>Radius Outer</td><td>outside radius of a circle around the extension</td></tr><tr><td>Spacing</td><td>Distance between procedural objects</td></tr><tr><td>Min Scale</td><td>Lowest possible scale value</td></tr><tr><td>Max Scale</td><td>Highest possible scale value</td></tr><tr><td>Min Scale Z</td><td>Lowest possible scale value on the Z axis</td></tr><tr><td>Max Scale Z</td><td>Highest possible scale value on the Z axis</td></tr><tr><td>Min Z Offset</td><td>lowest possible offset on the Z Axis</td></tr><tr><td>Max Z Offset</td><td>Highest possible offset on the Z Axis</td></tr><tr><td>Object Hash</td><td>procedural object to use</td></tr><tr><td>Flags</td><td></td></tr><tr><td>Offset Position XYZ</td><td>Extension offset relative to entity origin</td></tr></tbody></table>

### CExtensionDefWindDisturbance

Used for:<br>

<figure><img src="/files/GPKvLUCrl9ZLhkYECJjd" alt="" width="381"><figcaption></figcaption></figure>

| Setting             | Description                                |
| ------------------- | ------------------------------------------ |
| Name                | Extension Name                             |
| Offset Rotation XYZ | Extension rotation                         |
| Disturbance Type    |                                            |
| Bone Tag            | Linked bone's Bone Tag(Optional?)          |
| Size XYZW           |                                            |
| Flags               |                                            |
| Offset Position XYZ | Extension offset relative to entity origin |

### CExtensionDefSpawnPointOverride

Used For: Spawning / overriding ped spawns<br>

<figure><img src="/files/S1knBWfmZDXraTq2xPsP" alt="" width="383"><figcaption></figcaption></figure>

| Setting              | Description                                |
| -------------------- | ------------------------------------------ |
| Name                 | Extension Name                             |
| Scenario Type        | Scenario type from .ymt scenarios          |
| iTime Start Override | When the override should start             |
| iTime End Override   | When the override should end               |
| Group                | Ped Group                                  |
| Model Set            | Ped Model Set                              |
| Radius               | Radius of the Spawn Point Override         |
| Time Till ped Leaves | Time until ped stops task (in minutes?)    |
| Available in MP/SP   | Whether it is SP only or MP                |
| Scenario Flags       |                                            |
| Offset Position XYZ  | Extension offset relative to entity origin |

### CExtensionDefSpawnPoint

Used For: Attaching peds / ped scenarios to objects<br>

<figure><img src="/files/0aAgkjkMhq79VpoBdmRz" alt="" width="383"><figcaption></figcaption></figure>

| Setting              | Description                                                           |
| -------------------- | --------------------------------------------------------------------- |
| Name                 | Extension Name                                                        |
| Offset Rotation XYZ  | Extension rotation                                                    |
| Spawn Type           |                                                                       |
| Ped Type             |                                                                       |
| Group                | Ped Group                                                             |
| Interior             | Interior Name (if inside one)                                         |
| Required Map         |                                                                       |
| Probability          | Chance for the scenario to spawn                                      |
| Time Till Ped Leaves | Time until ped stops task (in minutes?)                               |
| Radius               | Radius of the Spawn Point                                             |
| Start                | Time the scenario starts                                              |
| End                  | Time the scenario ends                                                |
| High Priority        | Prioritizes spawning of scenario                                      |
| Extended Range       | Extend range at which the scenario can spawn relative to the player   |
| Short Range          | Decrease range at which the scenario can spawn relative to the player |
| Available in MP/SP   | Whether it is SP only or MP                                           |
| Scenario Flags       |                                                                       |
| Offset Position XYZ  | Extension offset relative to entity origin                            |

### CExtensionDefLightShaft

Used For: Light Rays / God Rays

<figure><img src="/files/npUfkUdgC5q4tkQJTogs" alt="" width="378"><figcaption></figcaption></figure>

<figure><img src="/files/z3fMXHZ3aTtk7hjvsZJd" alt="" width="383"><figcaption></figcaption></figure>

<figure><img src="/files/PnvINOMBml6PFqtLoWjR" alt="" width="375"><figcaption></figcaption></figure>

| Setting                | Description                                                      |
| ---------------------- | ---------------------------------------------------------------- |
| Density Type           | How dense the light shaft should be                              |
| Volume Type            | Shape of the shaft                                               |
| Scale By Sun Intensity | Use in game sun intensity to effect brightness                   |
| Direction Amount       |                                                                  |
| Length                 | Length of the Light Shaft                                        |
| Color                  | Color of the Light Shaft                                         |
| Intensity              | Intensity of the Light Shaft                                     |
| Flashiness             | Flags for how fast and if the Light Shaft should flash / flicker |
| Flags                  | Only Possible flags are 35, 99, 83, 115, 51                      |
| Fade In Time Start     | When the Light Shaft should begin to appear                      |
| Fade in time End       | when the Light Shaft is fully visible                            |
| Fade Out Time Start    | When the Light Shaft should begin fading away                    |
| Fade Out Time End      | when the Light Shaft Shouldnt be visible                         |
| Fade Distance Start    | Distance at which the Light Shaft begins Fading                  |
| Fade Distance End      | Distance at which the Light Shaft is fully Faded                 |
| Softness               |                                                                  |
| Corner A XYZ           | Top Left Corner Coords                                           |
| Corner B XYZ           | Top Right Corner Coords                                          |
| Corner C XYZ           | Bottom Right Corner Coords                                       |
| Corner D XYZ           | Bottom Left Corner Coords                                        |
| Offset Position XYZ    | Extension offset relative to entity origin                       |


# Maps (.ymap)

Map data such as object locations, car generators, occlusions, and LOD lights are stored in the .ymap file format.

<figure><img src="/files/yQ8BYvTVgmVSJUpmDR8i" alt=""><figcaption></figcaption></figure>

### Basic Concepts

Maps are managed through the `Sollumz Tools > Maps` panel in the sidebar.

<figure><img src="/files/ljajjBPfbrmaWviiegEI" alt="" width="375"><figcaption></figcaption></figure>

The first list contains **map groups**. A map group holds a set of **containers** and the\
**map items** assigned to them.

Maps marked as "Scripted" will not be loaded automatically by the game. A script will be needed to load and unload them.

#### Containers

Containers are organized in a hierarchy: each container can have a parent container,\
which corresponds to the YMAP LOD hierarchy in the game. On export, each container\
becomes one YMAP file, named after the container.

<figure><img src="/files/1745SwyL5glB3kBCv1nE" alt="" width="374"><figcaption><p>Containers list</p></figcaption></figure>

The hierarchy can be partially generated using Auto partioning. See [Partitioning](/documentation/maps/partitioning).

#### Map Items

There are six types of map items: [entities](/documentation/maps/entities), [car generators](/documentation/maps/car-generators), [timecycle modifiers](/documentation/maps/timecycle-modifiers), [grass batches](/documentation/maps/grass-batches), [occluders](/documentation/maps/occluders), and [LOD lights](/documentation/maps/lod-lights). Each map item is assigned to a container, which determines the YMAP file it is exported to. Items not assigned to any container are skipped on export with a warning.


# Entities

Entities represent props, buildings, terrain, or any other models placed in a map. Each entity is linked to a Blender object in the scene. The object defines the archetype name and world transform of the entity.&#x20;

All entity properties and functionality can be found in the Entities tab panel in the sidebar.

<figure><img src="/files/6u1q5n2F44uoKOc04m94" alt="Entities panel" width="375"><figcaption><p>Entities tab panel</p></figcaption></figure>

#### Operators

<table><thead><tr><th width="313.333251953125"></th><th>Description</th></tr></thead><tbody><tr><td><strong>Add Object(s) as Entity</strong></td><td>Add the selected objects in the scene to the map as an entity for each object.</td></tr><tr><td><strong>Go To Entity</strong></td><td>Select the object linked to the entity and move the view to its location.</td></tr><tr><td><strong>Instance Entities</strong> / <strong>Remove Instances</strong></td><td>Re-create the entities linked objects after import or delete them. The entities still exist in the map, only the Blender objects are removed from the scene.</td></tr><tr><td><strong>Show / Hide Entities</strong></td><td>Toggle the visibility of entity objects at specific LOD levels.</td></tr></tbody></table>

#### **Properties**

<table><thead><tr><th width="192.6666259765625">Property</th><th>Description</th></tr></thead><tbody><tr><td><strong>LOD Parent</strong></td><td>The parent entity of this entity in the <a href="/pages/8OyW4BCQg4AOZsXOVwLN">LOD hierarchy</a>.</td></tr><tr><td><strong>LOD Level</strong></td><td>Level of this entity in the LOD hierarchy.</td></tr><tr><td><strong>LOD Distance</strong></td><td>Override the distance at which the object unloads. The default -1 uses the LOD distance defined in the archetype.</td></tr><tr><td><strong>Child LOD Distance</strong></td><td>Override the LOD distance of the children entities of this entity in the LOD hierarchy.</td></tr><tr><td><strong>Priority Level</strong></td><td>Only relevant for <strong>HD</strong> entities. Determines whether the game is allowed to skip creating this entity when loading the map in certain cases. </td></tr><tr><td><strong>Natural AO Multiplier</strong></td><td>Natural ambient occlusion multiplier.</td></tr><tr><td><strong>Artifical AO Multiplier</strong></td><td>Artificial ambient occlusion multiplier.</td></tr><tr><td><strong>Tint Value</strong></td><td>Palette index for models using tint shaders.</td></tr></tbody></table>

#### Entity Extensions

<table><thead><tr><th width="197.3333740234375">Extension</th><th>Description</th></tr></thead><tbody><tr><td><strong>Door</strong></td><td>Additional settings for door entities.</td></tr><tr><td><strong>Spawn Point Override</strong></td><td>Used to override settings from spawn points in the archetype.</td></tr><tr><td><strong>Light Effect</strong></td><td>Used to override settings from lights found in the base model.</td></tr></tbody></table>

***

To quickly view the entity properties associated with the selected object, you can use the "Sollumz > Map Entity Properties" panel in the object properties tab.

<figure><img src="/files/yrmkoeLCHeOvatCtZtBi" alt="" width="375"><figcaption><p>Entity properties of the selected object</p></figcaption></figure>

The "View in Sidebar" button synchronizes the selection in the Entities list with the selected objects in the scene.&#x20;

### MLO Instances

MLO instances are used to place interiors in maps. There are two main ways to create MLO instances:

* From an MLO created in the same `.blend` file.
* From an asset library.

The MLO panel in the sidebar has a "Create MLO Instance" button that creates a copy of your MLO as a single object, ready to be placed in a map. The refresh button next to it is used to update all existing instances to reflect the latest changes in the MLO, generally added or deleted entities.

<figure><img src="/files/XCBsuGX16sHE7QH5D4C1" alt="Location of &#x22;Create MLO Instance&#x22; button" width="375"><figcaption><p>Location of "Create MLO Instance" button</p></figcaption></figure>

When using an [asset library](/documentation/asset-libraries) created from a YTYP with MLO, you can simply drag and drop the MLO asset into the scene.

<figure><img src="/files/D3Ab1rSDnjTM0CBHzYp1" alt="MLO instance from asset library"><figcaption><p>MLO instance from asset library</p></figcaption></figure>

Now, you can add the MLO instance objects to a map like any other entity object, for example using "Add Object(s) as Entity". The new entity should be marked as MLO and the MLO-specific properties appear in the panel.

<figure><img src="/files/N09S8VkTcDnMWzi9y3oq" alt="MLO instance properties" width="375"><figcaption><p>MLO instance properties</p></figcaption></figure>


# LOD Hierarchy

Parent/child LOD relationships are managed across the whole map group.

Partial hierarchies can still be imported, but containers with missing LOD parents or children are locked down and editing is limited (e.g. entities cannot be deleted) to prevent data loss on export.

### 3D Viewport Tool

The **Map LOD Hierarchy** viewport tool allows you to visualize and modify the hierarchy in 3D: drag and drop entities to link or unlink parents.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRAM9lBHCqq3QodZ420I%2Fuploads%2FTntrNAJxMVvQT89XXuyc%2Fdemo_lod_hierarchy.mp4?alt=media&token=fb64f131-ffc7-4d6b-9b45-fd91ef2ae689>" %}


# Car Generators

Car generators define spawn points where vehicles can appear.

They are represented using the following model:

<figure><img src="/files/ZlftED8ng70ZnFls0kDO" alt="" width="375"><figcaption><p>Model used by car generators</p></figcaption></figure>

All car generators properties and functionality can be found in the Car Generators tab panel in the sidebar.

<figure><img src="/files/6T8Yax8Bu7WTQOqoRORC" alt=""><figcaption><p>Car Generators tab panel</p></figcaption></figure>

Each car generator entry is linked to a **Collection**. Each object inside this collection defines a spawn location. All objects in the collection share the same car generator properties.

#### Operators

<table><thead><tr><th width="313.333251953125"></th><th>Description</th></tr></thead><tbody><tr><td><strong>Create Car Generator Object</strong></td><td>Create an object at the cursor location with the car generator model and add to the linked collection.</td></tr><tr><td><strong>Select All Car Generator Objects</strong></td><td>Select all objects in the linked collection.</td></tr></tbody></table>

#### **Properties**

<table><thead><tr><th width="192.6666259765625">Property</th><th>Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>Label used to identify this car generator entry. For UI display/organization purposes only, has no effect on export or in-game. If empty, a label will be automatically generated based on the other settings.</td></tr><tr><td><strong>Model</strong></td><td>Use a specific vehicle model.</td></tr><tr><td><strong>Model Set</strong></td><td>Use any vehicle model found in the specified model set. Model sets are defined in vehiclemodelsets.meta</td></tr><tr><td><strong>Creation Rule</strong></td><td></td></tr><tr><td><strong>Flags</strong></td><td></td></tr><tr><td><strong>Livery</strong></td><td></td></tr><tr><td><strong>Body Color Remap</strong></td><td></td></tr></tbody></table>

***

When a car generator object is selected you can view its properties in the "Sollumz > Map Cargen Properties" panel in the object properties tab.

<figure><img src="/files/sYm8GCQfO4cmu7PWhwFY" alt="" width="375"><figcaption><p>Car generator properties of the selected object</p></figcaption></figure>

The "View in Sidebar" button synchronizes the selection in the Entities list with the selected objects in the scene.

"Move to New Collection" can be used when you want to change the properties of only the selected car generator objects. Remember, the properties shown here are shared by all objects in the collection. This button creates a new car generator entry, a new collection, and moves the selected objects to this collection. Then, you can modify the properties without affecting the other car generators.


# Timecycle Modifiers

These map items allows you to define box areas where a **timecycle modifier** should be applied.

When the Timecycle Modifiers tab panel in the sidebar is active, gizmos will appear in the 3D Viewport showing the bounds of all timecycle modifers.

<figure><img src="/files/HyU3Sb4uW1q4HQcXKCkJ" alt=""><figcaption><p>Timecycle Modifiers tab panel</p></figcaption></figure>

#### **Properties**

<table><thead><tr><th width="192.6666259765625">Property</th><th width="540.666748046875">Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>Timecycle modifier to apply.</td></tr><tr><td><strong>Location / Size</strong></td><td>Bounds of the timecycle modifier.</td></tr><tr><td><strong>Percentage</strong></td><td>Strength of the timecycle modifier.</td></tr><tr><td><strong>Range</strong></td><td>Range over which the timecycle modifier fades in.</td></tr><tr><td><strong>Start / End Hour</strong></td><td>Time range at which the timecycle modifier is active.</td></tr></tbody></table>


# Grass Batches

Grass batches are represented as a mesh with only vertices, where each vertex represents a grass instance. Attributes are used to store per-grass instance settings.

Geometry nodes are used to generate and preview grass batches. Each grass batch is configured through a list of "templates", which define the models that can appear and their per-model settings (e.g. scale, LOD distance). The geometry nodes modifier then uses these templates to scatter the grass instances over a base mesh.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRAM9lBHCqq3QodZ420I%2Fuploads%2FX8annCOURmw1WgrwQCd6%2Fdemo_grass_batch_gen.mp4?alt=media&token=f2571568-fd53-4c91-aeb6-9a53b1a8de1d>" %}

The geometry nodes require Blender 5.0 or newer. Import/export still works on all supported versions, since the grass batch itself is just a regular mesh containing only vertices. This also means some manual editing is possible.

<figure><img src="/files/7MnDuVTXmHAFQyAhCPsI" alt="" width="563"><figcaption><p>GrassBatchGen geometry nodes modifier</p></figcaption></figure>


# Occluders

Occluders are used as a rendering optimization to determine which objects are hidden from view and avoid rendering them. These are stored as box occluders (oriented boxes) or model occluders (low-poly triangle meshes).

Occluders are represented as a red semitransparent mesh.

<figure><img src="/files/jJgwp9oWsdMvGoo8EBsi" alt=""><figcaption></figcaption></figure>

The list of occluders can be found in Occluders tab panel in the sidebar.

<figure><img src="/files/hmYOafO1ySFERIJcqQKO" alt="" width="563"><figcaption><p>Occluders tab panel</p></figcaption></figure>

Each occluder can be linked to multiple mesh objects which are merged together on export. Each mesh object can use one of the following export modes:

* **Automatic**: automatically detects box-shaped mesh islands (upright boxes or planes) and exports them as box occluders; everything else as model occluders.
* **Boxes Only**: all mesh islands must be box-shaped. Non-box islands are skipped with a warning.
* **Models Only**: export the mesh as-is as model occluders, without attempting box conversion

<figure><img src="/files/6U0toIfKcPIZnt9yMKSV" alt="" width="181"><figcaption><p>Occluder export modes</p></figcaption></figure>


# LOD Lights

LOD lights are represented as a mesh with only vertices, where each vertex represents a light. Attributes are used to store per-light settings.

"Bake LOD Lights" operator collects the lights of all entities in the map group and generates the `lodlights`/`distlodlights` YMAPs automatically, categorized by size, partitioned, and with streaming extents already computed.

<figure><img src="/files/71bjJ6rXB90whYZRBgIa" alt="" width="563"><figcaption></figcaption></figure>


# Partitioning

Instead of assigning every map item to a container by hand, a container can be set to **Auto partitioning mode**. Sollumz then splits the items assigned to it into auto-generated child containers, following the same conventions as the vanilla game maps:

* entities and car generators (*strm*),
* entities with large LOD distances (*long*),
* entities marked as critical (*critical*),
* interiors (*milo*),
* and grass.

Large sets are further split into numbered chunks by position.

LOD entities stay in the Auto container itself, which acts as the LOD parent YMAP.

Partitions are regenerated with the Generate Partitions button, or automatically on export if new items were added since.


# Texture Dictionaries (.ytd)

Texture dictionaries contain textures that can be used by drawables or fragments. Compared to embedded textures, texture dictionaries allows you to share textures between multiple models and reduce asset file sizes.

The `Sollumz Tools > Texture Dictionaries` panel in the sidebar lets you create dictionaries and add or remove textures manually, or add *source* mesh objects that automatically gather all images used by their Sollumz shaders, with a per-image toggle to control what gets included.

<figure><img src="/files/U2QZlCas002RRcUjfh2Y" alt="" width="521"><figcaption><p>Texture Dictionaries panel</p></figcaption></figure>

#### Sources

Sources let you reference Objects or Collections whose Sollumz shaders are scanned for textures, keeping the texture dictionary in sync with the textures actually used by your models.

The Images list shows every texture gathered from each source. Use the checkbox to control which of them are included in the texture dictionary. By default, embedded textures are excluded and non-embedded textures are included.

<figure><img src="/files/7haeqpu9Aj5w6Tf1wIhE" alt="" width="375"><figcaption><p>Texture dictionary sources list</p></figcaption></figure>

#### HD Texture Dictionaries

HD texture dictionaries (+hi) can also be managed using Sollumz. Next to each textures there is an "HD" toggle. On export, textures marked as HD are exported to a +hi.ytd at full resolution, while the base .ytd contains half-resolution versions. For this, it is necessary for the textures to have mipmaps.

This also works with embedded textures on drawables, fragments, and drawable dictionaries: when HD textures are present, a +hidr.ytd/+hifr.ytd/+hidd.ytd is exported alongside the main asset.

<figure><img src="/files/zoiTQB07lhK9zVtrmXpi" alt="" width="563"><figcaption><p>HD embedded textures</p></figcaption></figure>


# Asset Libraries

Asset libraries give you quick access to vanilla props or your own props for placement in maps or MLO interiors, or for instancing entities when importing them.

<figure><img src="/files/SlCvpc4ZcxauiX6g6gY3" alt=""><figcaption><p>An asset library</p></figcaption></figure>

<figure><img src="/files/ydki5UFiGHFE6GRSn82O" alt="" width="548"><figcaption><p>Asset Library panel</p></figcaption></figure>

**"Import To Asset Library"** is used to import drawables or fragments directly to the current `.blend` asset library, instead of to the scene.

**"Build Asset Library"** scans a directory of game files and builds `.blend` asset libraries from the YTYPs and assets it finds, including files inside RPFs. If a YTYP contains an MLO, the whole MLO is also saved as an asset, which can later be placed in maps as an [MLO instance](/documentation/maps/entities#mlo-instances).

This operator parallelizes the work across multiple Blender background processes, significantly speeding up the build. Libraries are managed from the add-on preferences and integrate with Blender's asset browser.

When instancing entities from YMAPs or YTYP MLOs, archetypes are resolved from these libraries, after first checking the current .blend. Assets built by Sollumz also embed metadata, allowing features like LOD light baking and entity LOD distance resolution to work without loading the original game files.


# Lighting (.ydr)

Lights are well, lights that are embedded into .ydr or .yft objects. there is many different settings for these lights which can make it very tricky and confusing to get right.


# Light Flags

<figure><img src="/files/wbsag4z99nGl7AV6kwaI" alt=""><figcaption><p>Sollumz Light Flags Panel</p></figcaption></figure>

<table><thead><tr><th width="266">Flag Name</th><th>Description</th></tr></thead><tbody><tr><td>Interior Only</td><td>Light only renders inside interiors</td></tr><tr><td>Exterior Only</td><td>Light only renders outside of interiors</td></tr><tr><td>Dont Use In Cutscene</td><td></td></tr><tr><td>Vehicle</td><td></td></tr><tr><td>Ignore Artificial Lights State</td><td></td></tr><tr><td>Texture Projection</td><td>Enables Texture Projection</td></tr><tr><td>Cast Shadows</td><td>Casts Shadows</td></tr><tr><td>Cast Static Shadows</td><td>Cast Static shadows from the light (Static ydr meshes)</td></tr><tr><td>Cast Dynamic Shadows</td><td>Cast dynamic shadows from the light (player shadows)</td></tr><tr><td>Calculate From Sun</td><td>Calculate light intensity by time of day and sun brightness</td></tr><tr><td>Enable Buzzing</td><td>Enables electric light buzzing sound</td></tr><tr><td>Force Buzzing</td><td>forces electric light buzzing sound</td></tr><tr><td>No Specular</td><td>Disables light from showing up in specular reflections</td></tr><tr><td>Both Interior and Exterior</td><td>Interior lights bleed out of the MLO and vise versa</td></tr><tr><td>Corona Only</td><td>Only renders the corona of the light</td></tr><tr><td>Not In Reflection</td><td>Do not render light in mirror reflections</td></tr><tr><td>Only In Reflections</td><td>Only Render light in mirror reflections</td></tr><tr><td>Enable Culling Plane</td><td>Enables the lights culling plane</td></tr><tr><td>Enable Volume Outer Color</td><td>Enable Volume outer Color of the light</td></tr><tr><td>Higher Res Shadows</td><td>Increase Shadow Resolution</td></tr><tr><td>Only Low Res Shadows</td><td>Use Low Resolution Shadows</td></tr><tr><td>Far Lod Light</td><td>Force Light to be far LOD Light</td></tr><tr><td>Dont Light Alpha</td><td>Dont effect the alpha of objects</td></tr><tr><td>Cast Shadows If Possible</td><td></td></tr><tr><td>Cutscene</td><td></td></tr><tr><td>Moving Light Source</td><td></td></tr><tr><td>Use Vehicle Twin</td><td></td></tr><tr><td>Force Medium LOD Light</td><td></td></tr><tr><td>Corona Only LOD Light</td><td></td></tr><tr><td>Delay Render</td><td>Disables the light</td></tr><tr><td>Already Tested For Occlusion</td><td></td></tr></tbody></table>


# Flashiness Values

All light types have a Flashiness parameter, here you can set a value to make the light flicker or flash in a specific predefined way.

<figure><img src="/files/ReXr5L891x6W9OPiRcx1" alt=""><figcaption><p>UI Layout</p></figcaption></figure>

The default value is set to 0, or constantly visible.

<table><thead><tr><th width="261">Flashiness Name</th><th>Description</th></tr></thead><tbody><tr><td>Constant (0)</td><td>Light shines constantly, no flashing</td></tr><tr><td>Random (1)</td><td>Takes the lights Extent value as a factor for the random value</td></tr><tr><td>Random Override If Wet (2)</td><td></td></tr><tr><td>Once Per Second (3)</td><td>Light flashes 1 time per second</td></tr><tr><td>Twice Per Second (4)</td><td>Light flashes 2 times per second</td></tr><tr><td>Five Per Second (5)</td><td>Light flashes 5 times per second</td></tr><tr><td>Random Flashiness (6)</td><td>Truely random flashiness</td></tr><tr><td>Off (7)</td><td></td></tr><tr><td>Unused (8)</td><td>An unused value, has no effect</td></tr><tr><td>Alarm (9)</td><td>Flashes like an alarm, possibly tied to audio alarms?</td></tr><tr><td>On When Raining (10)</td><td>Flashing begins when weather is set to rain</td></tr><tr><td>Cycle 1 (11)</td><td>A predefined flashing cycle</td></tr><tr><td>Cycle 2 (12)</td><td>A predefined flashing cycle</td></tr><tr><td>Cycle 3 (13)</td><td>A predefined flashing cycle</td></tr><tr><td>Disco (14)</td><td>Flashes like a disco ball</td></tr><tr><td>Candle (15)</td><td>More so a flicker, like a candle</td></tr><tr><td>Plane (16)</td><td>Likely used for plane lights, the navigation ones</td></tr><tr><td>Fire (17)</td><td>Similar to the candle, but flickers faster</td></tr><tr><td>Threshold (18)</td><td></td></tr><tr><td>Electric (19)</td><td>Flashes like an electric ceiling light</td></tr><tr><td>Strobe (20)</td><td>Flickers like a strobe light, very fast and intense</td></tr></tbody></table>


# Welcome

Thank you for using Sollumz, the only GTA V modding suite for Blender!

### Prerequisite Knowledge

* A basic understanding of Blender and 3D modeling. ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* A basic understanding of modding in GTA V including using CodeWalker.

### Requirements

* Blender 4.0 or later - [blender.org](http://www.blender.org/download/)
* Latest version of CodeWalker found in #releases channel. [Download](https://discord.com/invite/codewalker)

### Reporting Bugs and Making Feature Requests

If you think you've found a bug or you wish to request a feature, please use the [issue tracker on GitHub](https://github.com/Sollumz/Sollumz/issues). Be sure you extensively troubleshoot the issue first to ensure a bug is actually present.

### **Our Community**

Join the [discord](https://discord.gg/bZuWBWaQBg) and be a part of our growing community!


# Features

[**Key**](#user-content-fn-1)[^1]

🟩 Fully implemented

🟧 Partially implemented

🟥 Not implemented

{% hint style="info" %}
Sollumz cannot import binary formats directly. You must convert them to XML first using CodeWalker!
{% endhint %}

{% hint style="info" %}
Since this plugin was designed around CodeWalker's XML file formats, OpenIV is not explicitly supported. You may experience issues going from Sollumz > CodeWalker > OpenIV. It's highly recommended that you just use CodeWalker.
{% endhint %}

### **File Formats**

<table><thead><tr><th width="211">Asset Type</th><th width="138">File Extension</th><th width="84" align="center">Import</th><th align="center">Export</th></tr></thead><tbody><tr><td>Drawable</td><td>.ydr.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Drawable Dictionary</td><td>.ydd.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Static Collision</td><td>.ybn.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Fragment</td><td>.yft.xml</td><td align="center">🟧</td><td align="center">🟧</td></tr><tr><td>Clip Dictionary</td><td>.ycd.xml</td><td align="center">🟧</td><td align="center">🟧</td></tr><tr><td>Map Data</td><td>.ymap.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr><tr><td>Archetype Definition</td><td>.ytyp.xml</td><td align="center">🟩</td><td align="center">🟩</td></tr></tbody></table>

### Specific Features

#### Drawable (.ydr)

<table><thead><tr><th width="416">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Mesh editing</td><td align="center">🟩</td></tr><tr><td>Embedded collisions</td><td align="center">🟩</td></tr><tr><td>Shader editing</td><td align="center">🟩</td></tr><tr><td>Terrain shader painting</td><td align="center">🟩</td></tr><tr><td>Tint shaders</td><td align="center">🟩</td></tr><tr><td>Props</td><td align="center">🟩</td></tr><tr><td>Shader preview</td><td align="center">🟧</td></tr></tbody></table>

#### Drawable Dictionary (.ydd)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Editing Drawable Dictionaries</td><td align="center">🟩</td></tr><tr><td>Importing with external skeleton</td><td align="center">🟩</td></tr></tbody></table>

#### Static Collision (.ybn)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Collision editing</td><td align="center">🟩</td></tr></tbody></table>

#### Fragment (.yft)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Vehicles</td><td align="center">🟩</td></tr><tr><td>Breakable props (i.e. street lights)</td><td align="center">🟩</td></tr><tr><td>Breakable glass props</td><td align="center">🟩</td></tr><tr><td>Explodable props (i.e. gas tanks)</td><td align="center">🟩</td></tr><tr><td>Ped yfts</td><td align="center">🟥</td></tr><tr><td>Cloth yfts</td><td align="center">🟩</td></tr></tbody></table>

<details>

<summary>Unsupported Ped YFTs</summary>

The following is a list of unsupported ped YFTs. These YFTs contain unknown ragdoll physics data that is not handled by Sollumz. Currently, it is not possible to create completely custom player skeletons.

```
z_z_alien.yft 
z_z_fred.yft 
z_z_fred_large.yft 
z_z_wilma.yft 
z_z_wilma_large.yft 
a_c_boar.yft 
a_c_cat_01.yft 
a_c_chickenhawk.yft 
a_c_chimp.yft 
a_c_cormorant.yft 
a_c_cow.yft 
a_c_coyote.yft 
a_c_crow.yft 
a_c_deer.yft 
a_c_dolphin.yft 
a_c_fish.yft 
a_c_hen.yft 
a_c_humpback.yft 
a_c_killerwhale.yft 
a_c_pig.yft 
a_c_pigeon.yft 
a_c_poodle.yft 
a_c_pug.yft 
a_c_rabbit_01.yft 
a_c_rat.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_sharkhammer.yft 
a_c_stingray.yft 
a_c_westy.yft 
a_c_whalegrey.yft 
a_c_chop.yft 
a_c_husky.yft 
a_c_mtlion.yft 
a_c_retriever.yft 
a_c_rottweiler.yft 
a_c_sharktiger.yft 
a_c_shepherd.yft 
a_c_chimp_02.yft 
a_c_rabbit_02.yft 
a_c_panther.yft 
a_c_chickenhawk.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_chop_02.yft 
a_c_chickenhawk.yft 
```

</details>

#### Clip Dictionary (.ycd)

<table><thead><tr><th width="416">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Skeletal Animations</td><td align="center">🟩</td></tr><tr><td>UV Animations</td><td align="center">🟩</td></tr><tr><td>Camera Animations</td><td align="center">🟩</td></tr><tr><td>Light Animations</td><td align="center">🟧</td></tr></tbody></table>

#### **Map Data (.ymap)**

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Entities</td><td align="center">🟩</td></tr><tr><td>Box Occluders</td><td align="center">🟩</td></tr><tr><td>Car Generators</td><td align="center">🟩</td></tr><tr><td>Model Occluders</td><td align="center">🟩</td></tr><tr><td>Physics Dictionaries</td><td align="center">🟥</td></tr><tr><td>Time Cycle</td><td align="center">🟥</td></tr><tr><td>Lod Lights</td><td align="center">🟥</td></tr></tbody></table>

#### Archetype Definition (.ytyp)

<table><thead><tr><th width="414">Feature</th><th align="center">Support</th></tr></thead><tbody><tr><td>Base Archetypes</td><td align="center">🟩</td></tr><tr><td>Time Archetypes</td><td align="center">🟩</td></tr><tr><td>MLO Archetypes</td><td align="center">🟩</td></tr><tr><td>Create rooms from vertices</td><td align="center">🟩</td></tr><tr><td>Create portals from vertices</td><td align="center">🟩</td></tr><tr><td>Entity Extensions</td><td align="center">🟩</td></tr><tr><td>Entity Sets</td><td align="center">🟩</td></tr></tbody></table>

[^1]:


# Installation

## Blender 4.2+

Starting with Blender 4.2, Sollumz can now be installed as an extension from our repository <https://repo.sollumz.org/>.

First, add `https://repo.sollumz.org/` as a remote repository by navigating to `Preferences` > `Get Extensions` > `Repositories` > `+` > `Add Remote Repository`:

<figure><img src="/files/gNsi1BvUiyQzPHom5BOh" alt=""><figcaption></figcaption></figure>

Next, search for "Sollumz". You will see two available versions to install:

1. **Sollumz**: The official release version, identical to what can be downloaded from the release page.
2. **Sollumz (Development)**: The latest development build, which may be unstable. Use this version to test new features and updates, and provide feedback to help us improve.

Choose your preferred version and click `Install`:

<figure><img src="/files/YXrGqvRXmloGnrtZNzo1" alt=""><figcaption></figcaption></figure>

Once installed, you can easily update to newer versions directly within Blender. You will see an `Update` button whenever new versions are available.

<figure><img src="/files/3FCR43BLgUJ8KupR2HeX" alt=""><figcaption></figcaption></figure>

## Previous Blender Versions

Download `Sollumz.zip` from the [latest release page](https://github.com/Sollumz/Sollumz/releases/latest).

Open Blender, go to `Edit` > `Preferences` > `Add-ons`

<figure><img src="/files/yqpS2MSr7BP08DOzbYKi" alt="" width="563"><figcaption></figcaption></figure>

Click `Install...` and select the downloaded zip file.

Now enable the add-on by checking the checkbox.

<figure><img src="https://i.imgur.com/YnVdn4k.gif" alt="" width="563"><figcaption></figcaption></figure>

Restart Blender.


# Creating Your First Asset

Jump right in and create your first game asset by following one of our tutorials! We recommended you start with these tutorials first, as the other tutorials build off knowledge from these tutorials.

{% content-ref url="/pages/T6NL0v2SwwA0ABWxpM1T" %}
[Creating Static Meshes](/2.8/tutorials/creating-static-meshes)
{% endcontent-ref %}

{% content-ref url="/pages/W4iIHjyKff3Ou0UA0ZQO" %}
[Creating Static Collisions](/2.8/tutorials/creating-static-collisions)
{% endcontent-ref %}

{% content-ref url="/pages/sndikrXvJpLejzPudWB7" %}
[Creating Props](/2.8/tutorials/creating-props)
{% endcontent-ref %}

It's also highly recommended that you check out the documentation section. There you will find detailed information about each file type and how it is represented in Blender.

{% content-ref url="/pages/jjfq3GUVDJ5YgTlnOROP" %}
[Drawables (.ydr)](/2.8/documentation/drawables.ydr)
{% endcontent-ref %}


# FAQ

Frequently Asked Questions

### How do I import files to Blender with Sollumz?

* Sollumz can only import XML files exported from CodeWalker. Make sure you install the latest version of CodeWalker as described[ here](/2.8#requirements).

***

### When I import a YDR/YFT/YDD the textures are not loaded

* From the CodeWalker RPF Explorer, open the asset with the textures.
* Click the save icon in the top right, then click "Save All Textures"
* In Blender, press the `V` key, then click `Find Missing Files` and select the folder where you saved the textures.

<div align="left"><figure><img src="https://i.imgur.com/vbXzGXx.gif" alt="" width="563"><figcaption></figcaption></figure></div>

* **Alternatively**, export all textures into a folder with the same name as the file you are importing. For instance, if you wanted to import `adder.yft` with all of its textures, you would export all textures to a folder called `adder` in the same directory. Then, when you import into Sollumz, all textures will be automatically loaded from the `adder` folder.

***

### My MLO shows up in CodeWalker but not in game.

* Make sure you generate a "\_manifest.ymf" file from the CodeWalker project window with your MLO, YMAP, and YTYP in it.

***

### I'm getting an error when importing a file.

* 9 out of 10 times it is due to having an outdated Sollumz version. Try updating.

***

### I'm getting the message `No Sollumz objects in the scene to export!` or `No Sollumz objects selected for export!`

* Check if the "Limit to Selected" export option is ticked. If so, only the selected objects will export.
* Make sure all of your objects have their sollum type set, otherwise, they will not be recognized by the add-on.
* As a last resort, you can select the parent object and use `Sollumz Tools > General > Debug > Fix Hierarchy`

***

### I'm getting the error `TypeError: create_uvsphere: keyword "diameter" is invalid for this operator.`

* Update your Sollumz.

***

### I'm getting the error `KeyError: 'bpy_prop_collection[key]: key "Image Texture" not found'`

* One of your materials has a missing node connection between Color node and an Image Texture, which is 100% needed in order to export the model.
* Check shading tab to find more.

***

### I'm getting the error `KeyError: 'bpy_prop_collection[key]: key "Principled BSDF" not found'`

* Only the Principled BSDF shader is supported during material conversion operations, anything else must be converted or recreated using Principled BSDF as base.

***

### I created a collision (external or embedded) but it isn't working.

* Remember to apply `General (default)` flags to your `Bound GeometryBVH` object from the `Sollumz Tools > Collision Tools > Flag Presets` menu.

***

### I'm having issues importing the file into OpenIV

* Since this plugin was designed around CodeWalker's XML file formats, OpenIV is not explicitly supported. You may experience issues going from Sollumz > CodeWalker > OpenIV. It's highly recommended that you just use CodeWalker.

***

### Why the vertices amount is doubled or tripled after exporting my model?

* Vertices in Blender and in game meshes have different meaning. For Blender, it is basically just a position. For the game, it is position + attributes (normals, colors, UVs, etc). Closer to what Blender calls "Face Corners".<br>

  Don't think Blender shows the number of face corners anywhere without python, but after triangulization, it is basically number of faces\*3.<br>

  On export, Sollumz removes duplicate face corners when it can, when position and all its attributes are the same. So the final vertex count in the game mesh is somewhere between number of vertices and number of face corners.<br>

  Anyways, number of faces is more representative of the model quality/performance, so just use that, not vertices.

***

### My model is invisible after importing to CodeWalker

* Check the UV Maps and Color Attribute names, they have to follow the Sollumz naming convention. Sollumz is warning a user when names don't match.

<figure><img src="/files/pROCyXSTsVgTExuWAp8O" alt=""><figcaption></figcaption></figure>

UV Maps and Color Attribute should be changed to the following

<figure><img src="/files/QOf5Z0i1xjSs9ThMgCg4" alt=""><figcaption></figcaption></figure>

***

## I try to import a XML but nothing happens!

Make sure the "Import To Asset Library" checkbox is unchecked and try to import again.<br>

<figure><img src="/files/KVHNbBBpbbxnaHbMNLkN" alt=""><figcaption></figcaption></figure>

***

#### I have embedded or linked a ytd to my model but it doesnt show.

Sollumz required textures to be added to shaders. (see Creating Static Meshes)

The texture must be a .dds file. (png, bmp etc will not work.)&#x20;

The dds must be 'power of 2' ie 512x512, 128x64 etc. You can use any graphics software to edit the size as long as it saves in dds format with mipmaps and as a dtx1 for models.

Maximum recommended size for textures is 2048 to ensure your model is optimised. Download textures from the game for examples and use on your models.

For Clothing textures, see&#x20;

{% embed url="<https://docs.sollumz.org/tutorials/basic-clothes-editing>" %}


# Getting Help

If you have any questions, feel free to ask on our [Discord](https://discord.gg/sollumz) server. Please use the "[help](https://discord.com/channels/899043946142003240/1124818456022356039)" channel.

### Before asking

Helpers are taking time out of their day to help you, so please make an effort to provide as much detail as possible in your post. See the pinned post "[How to ask questions](https://discord.com/channels/899043946142003240/1124854088601972807)" for guidelines on how to ask questions.

{% hint style="info" %}
Common sense is a must. Please check that you haven't done anything basic wrong, such as installation, misunderstanding about 3D formats, wrong Blender version, etc.
{% endhint %}

{% hint style="info" %}
Make sure your question has not been asked before. Use the search function on our Discord server to find information about your problem.
{% endhint %}

{% hint style="info" %}
If you have zero experience using Blender, learn the basics before asking anything.
{% endhint %}

{% hint style="info" %}
Check FAQ section to look across the most asked questions.
{% endhint %}


# Files not supported by Sollumz

Not every file type found in GTA is supported by Sollumz.

## Ped YFTs (.yft) with articulated skeletons

Skeleton yfts (like `mp_f_freemode_01.yft`) **are supported**, as they just contain skeletons. However, some ped yfts also contain additional unknown physics data which is not handled by Sollumz. Here is a list of ped yfts that are **not** supported.

```
z_z_alien.yft 
z_z_fred.yft 
z_z_fred_large.yft 
z_z_wilma.yft 
z_z_wilma_large.yft 
a_c_boar.yft 
a_c_cat_01.yft 
a_c_chickenhawk.yft 
a_c_chimp.yft 
a_c_cormorant.yft 
a_c_cow.yft 
a_c_coyote.yft 
a_c_crow.yft 
a_c_deer.yft 
a_c_dolphin.yft 
a_c_fish.yft 
a_c_hen.yft 
a_c_humpback.yft 
a_c_killerwhale.yft 
a_c_pig.yft 
a_c_pigeon.yft 
a_c_poodle.yft 
a_c_pug.yft 
a_c_rabbit_01.yft 
a_c_rat.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_sharkhammer.yft 
a_c_stingray.yft 
a_c_westy.yft 
a_c_whalegrey.yft 
a_c_chop.yft 
a_c_husky.yft 
a_c_mtlion.yft 
a_c_retriever.yft 
a_c_rottweiler.yft 
a_c_sharktiger.yft 
a_c_shepherd.yft 
a_c_chimp_02.yft 
a_c_rabbit_02.yft 
a_c_panther.yft 
a_c_chickenhawk.yft 
a_c_rhesus.yft 
a_c_seagull.yft 
a_c_chop_02.yft 
a_c_chickenhawk.yft
```


# Creating Static Meshes

Game meshes are stored in the [Drawable (.ydr)](https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr) file format. Creating Drawables in Sollumz is very simple. This tutorial will walk you through step-by-step.

### Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* Know how to create YMAPs to place objects in CodeWalker ([Here's a basic tutorial](https://www.youtube.com/watch?v=W0YPabgu8oo))
* Know how to either stream assets in a FiveM server or load mods into the base-game

### What you will need

* A UV-mapped 3D mesh of your choice
* Textures for the mesh

You can also follow along with the tutorial by using the assets below:

{% file src="/files/q6QQ95rAYyjU4x4x8kc3" %}

### Converting to a Drawable

The first thing to do is convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawable > Create Drawable Objects`.

<figure><img src="/files/VgGRKA7baw87cG8Vz6Fi" alt=""><figcaption><p>Converting to Drawable</p></figcaption></figure>

You'll notice that an empty object gets created called "Drawable" and the objects that were selected are now Drawable models.

<div align="left"><figure><img src="/files/tfc7IeLBXzyH4rsAzKlG" alt=""><figcaption><p>Drawable hierarchy</p></figcaption></figure></div>

If you navigate to `Mesh Properties > Sollumz LODs` you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/2.8/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.

<div align="left"><figure><img src="/files/sCUHn50rN7QZ8FE1dLVZ" alt=""><figcaption><p>Mesh Properties > Sollumz LODs</p></figcaption></figure></div>

### Adding Materials

Next, we need to add materials to the Drawable Models. With one of the Drawable Models selected, open the `Sollumz Tools > Drawable > Shader Tools` panel. For this tutorial, I will use the "NORMAL" shader which allows us to specify a base color and a normal map. Search for the "NORMAL" shader and click `Create Shader Material`.

<div align="left"><figure><img src="/files/g2VhTj8vY5gn9ZyvY6IU" alt=""><figcaption><p>Creating Sollumz material</p></figcaption></figure></div>

With the newly added material selected, head to the shading tab and assign your textures.

<div align="left"><figure><img src="/files/QFKHpnEnJOLOaKF2FK4G" alt=""><figcaption><p>Assigning textures</p></figcaption></figure></div>

Repeat the process for any other Drawable Models. In my case, I am just going to use the same material for the "crate\_top" Drawable Model.

### Embedding Textures

Lastly, we need to set the textures as embedded. This will embed the textures into the YDR file, so we don't have to create a texture dictionary file (.ytd). With both objects selected, navigate to `Sollumz Tools > Drawable > Shader Tools` and click `Set all Materials Embedded.`

<div align="left"><figure><img src="/files/dvNMmS2LLdsOkOnewjBB" alt=""><figcaption><p>Sollumz Tools > Drawable > Shader Tools > Set All Materials Embedded</p></figcaption></figure></div>

### Exporting

Before exporting I'm going to rename my Drawable to something more descriptive like "crate". Once you're happy with everything, export the Drawable by clicking File > Export > Codewalker XML. I am going to also enable `Export with ytyp`. This will automatically generate a YTYP with the Drawable we created already defined.

<div align="left"><figure><img src="/files/d1zV8uk19d9wCxjcozKc" alt=""><figcaption><p>File > Export > Codewalker XML</p></figcaption></figure></div>

{% hint style="info" %}
You can also import/export via the Sollumz pie menu by pressing V and choosing "Export CodeWalker XML"
{% endhint %}

Your Drawable is now ready to be loaded into the game!

### Getting Files Ready to Stream

Convert the ydr.xml and ytyp.xml using CodeWalker.

<div align="left"><figure><img src="/files/zrqgXNtXXXOgh6wPNRKF" alt=""><figcaption></figcaption></figure></div>

Open the converted files in a CodeWalker project.

<div align="left"><figure><img src="/files/GOZNhFrSPC3VNj0pu55a" alt=""><figcaption></figcaption></figure></div>

Add a YMAP to the project and add the newly created Drawable as an entity.

<div align="left"><figure><img src="/files/rQibdgkNIe5X0MPcB0EC" alt=""><figcaption></figcaption></figure></div>

Position the entity to your liking, then export the YMAP.

{% hint style="warning" %}
Don't forget to generate \_manifest.ymf for your project!
{% endhint %}

<div align="left"><figure><img src="/files/Ax1Sj5g0MTbGxHNUEKsG" alt=""><figcaption></figcaption></figure></div>

Now, load your YDR, YTYP, YMAP, and \_manifest.ymf into either an RPF or the stream folder of your FiveM resource.

### Test In-Game

That's it! Load into the game and check out your creation!

<div align="left"><figure><img src="/files/ncIulxXZvr9v9vOwjgro" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Note that your character will not collide with the Drawable as we have not created collisions for it. See [Creating Static Collisions](/2.8/tutorials/creating-static-collisions) to learn how to create collisions.
{% endhint %}


# Creating Static Collisions

Game Collisions are stored in the Static Collisions (.ybn) file format. Creating Collisions in Sollumz is very straight forwards.

### Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
* Know how to either stream assets in a FiveM server or load mods into the base-game

### What you will need

* A mesh located at the world location (where you want the collision to be)

### Converting to a Static Collision

The first thing to do is apply location transforms on your object(s). Select all the objects and press CTRL + A and select 'Location'.

Next go to Sollumz Tools > Collisions > Create Bounds and select your object(s) and click 'Convert to Composite'.

![](/files/6rr16NDpFFTFcRaMBuLt)

Ensure that the Bound Composite and Bound GeometryBVH empties are located at 0, 0, 0.

Next, Center the origins of your object(s), go to Object > Set Origin > Origin to Geometry.

<figure><img src="/files/q5MqWTc34gQd23uIfDPp" alt=""><figcaption><p>Example Hierarchy</p></figcaption></figure>

It should now look something like this.

![](/files/OCWJbbPl2IupdDa5P2Dq)

Last step is to rename the 'Bound Composite' empty to your .ybn file name.

### Additional tips

Using Primitive shapes such as, 'Bound Poly Box', 'Bound Poly Capsule', 'Bound Poly Sphere' should be used for majority of your collisions, unless the mesh is a complex shape and cannot be made up of multiple primitive shapes. This is because it is more performance friendly and reduces unnecessary asset size.


# Creating Interiors

When making an interior there are about 9 steps to take.

* Picking a building
* Importing from CodeWalker
* Planning
* Modeling
  * Interior
    * Decals
    * Other props
  * Exterior
    * Decals
    * Other props
  * Modifying terrain
  * Create the ybn
* Texturing
  * Vertex coloring
* Collision
* Creating ytyp
  * Rooms/Portals
* Exporting from Blender
* Creating ymap

{% hint style="warning" %}
This is not the only order to make an interior every step, can be made when you want to or are ready to. Every step is as a tutorial in the headline in itself.
{% endhint %}

## Prerequisite Knowledge

* Basic Blender skills ([This is a great place to start](https://www.youtube.com/playlist?list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD))
  * There will be some tips in this tutorial
* Know how to either stream assets in a FiveM server or load mods into the base-game

This tutorial is a minimal way to make an interior, so I will not go over things like making doors and moving objects this is purely how to make an interior.

Let's start at the beginning and pick a building you want to make an interior in.


# Picking a building

When picking a building it is a good idea to have some thoughts for what you want to make. When it's your first time make an interior it is a good idea to make a single or double roomed interior.

Start by opening CodeWalker and find the building you want to make an interior inside.

For this tutorial I have chosen this building from grapeseed.

<figure><img src="/files/f0tGC7ZNIgrFhKSCBIaT" alt=""><figcaption></figcaption></figure>


# Importing from CodeWalker

## Drawables

When you have found the building and selected it, copy the name from the right hand side and search in the files using the RPF Explorer from the tool menu

<figure><img src="/files/HuLLwVrumK05hF77UGea" alt=""><figcaption></figcaption></figure>

To export from CodeWalker we need the xml file before you export it you can open the file to ensure it is the right one, and we get that by right-clicking and pressing export to xml.

<figure><img src="/files/DTxsDfFYrv1h86bbEz3G" alt=""><figcaption></figcaption></figure>

To get every texture use the >> to find the textures and save them to the folder of the building name so when we load the model into Blender we don't have any missing textures.

<figure><img src="/files/cCXPv1B7azLyZkimhE6q" alt=""><figcaption></figcaption></figure>

This is also the time to find everything you will need. A little hint is you need everything you are going to modify and the ground around the building as it is really easy to create the floor to collide or texture fight. To find every file that is in the area right-click on the file again and press open file location, here you can find the ground every decal and other tings from the area, in this folder you can find **.ydr** (drawables) **.ytd** (textures), **.ybn** ( collisions), **.yft** (fragments), and the **.ymf** (manifest)

## Collisions

The easiest way to find the collisions is to open them from the RPF explore and export every **.ybn** that have anything with the building you are making to do. **NOTE:** It is important to take the hi@\[name].ybn and the \[name].ybn. The reason they are split up is because of the way GTA collisions work, the hi@ is for example for bullet so when a player shoots the building the bullet hits where the building and gets the right bullet hole and sound, the other one is example the player collision so when the player walks into the building they don't just walk through it. But in real life this is nothing you should be worried about unless you make major modifications to an exterior of a building.

<figure><img src="/files/NjD32KJMxjJkw8ZkyCWI" alt=""><figcaption></figcaption></figure>

## .ymap

The .ymap is the last file that is needed to be exported from CodeWalker the .ymap file have a lot of information that we can use to our advantage, some of the information in this file are the cords so we can place the buildings and decal at their exact locations. There can be more than one .ymap file so be sure that you have every .ymap file.

To find the .ymap name can be done in a couple of ways if you are making a small building you can look in the information menu to the right

<figure><img src="/files/1XnyKX9LBCiO81BYtYLJ" alt=""><figcaption></figcaption></figure>

If there are more .ymap files it can be easier to open a new project select everything that is going to be modified and read the name of the .ymap name

<figure><img src="/files/x8xLRoYlXeYJlSYFR9BO" alt=""><figcaption></figcaption></figure>


# Planning

This part is optional but a good idea for bigger interiors

When planning you can do a lot you can use Photoshop, Paint, or anything to draw what you want this do not have to be to scale. This is also a good time to make mood boards find out what you want the building be like and the art style modern, old, western, etc.

This is some floor plans I have made for interiors they are not beautiful, but they are a way to stay on target.

<figure><img src="/files/JTXJJbwi7wMBeEptrHhj" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/PXOUKvwjySVVyxam5Pvv" alt=""><figcaption></figcaption></figure>


# 🏠📐 Modelling

You should now have a folder that look something like this if you only exported the building and collisions. I wil now go ahead and export the building decals so when it is imported into Blender it will look more like the game this is **optional** but if you will edit them you should just export it from CodeWalker now, but you can always import later so no worries.

<figure><img src="/files/QPSWryPILXyQJjX6ZjRt" alt=""><figcaption></figcaption></figure>

## Import

To start with you only import the ybn and ydr files **not** the ymap files and then the ymap file after

<figure><img src="/files/fxEHa0iq7IIGLbBizCls" alt=""><figcaption></figcaption></figure>

I have chosen to use the file hierarchy ydr ybn and ymap this is just a way to separate the files and not necessary you can use whatever you'd like to have you can think of it as folders

When you have imported everything you can open the ymap file and find a copy of the building you have imported you can go to it by pressing `NUM,` **Keybindings may vary**

<figure><img src="/files/kWUqRmomijN9R8VFMVGU" alt=""><figcaption></figcaption></figure>

## Align mesh to building

This is to make it much easier to model. We can make it so that our mesh have the orientation of the building we are trying to make an interior inside of.

To do this we select an area that is the closest to the orientation in this tutorial the roof was the closest, so you selected the roof and pressed `shift + NUM7` and to get the 3D cursor over you first go out of edit mode and then presses `shift + mouse2 (Right mouse button)` before adding Mesh Plane, click n to open Right panel and click the View tab remove rotation from the 3d cursor on X and Y Axis you then go up and adds a plane from mesh and in the menu down to the left press Align -> 3D cursor, and now you have the mesh to build the floor and walls of, and it is in the right orientation and now to get back to the normal view press `NUM5`. **Once again keybindings may vary**

<figure><img src="/files/coCjQKmnDUkmt12rbMJN" alt=""><figcaption></figcaption></figure>

## Set model back to world origin

We now need to set the model to the world origin, but we don't just set it back but make a mirror and send the original back to world origin. To make a mirror of the object we selected just press `ALT+D` and then right click cancel movement of the mirrored object. Now that we have a copy of the model. We can unparent it with `ALT+P` and click "Clear and Keep Transformation". Then select the original, not the model but the empty and clear transformation with `ALT+R` and `ALT+G`. You'll now have the model at the location and at the world origin. The mirror will be used to get the location so when we need to create the ymap it will be at the exact same place as in blender you can therefore rename the mirror to "Location" or whatever you want it doesn't really matter what the name is.

## Modelling the drawable

Now it is time to actually model your interior the plane we made before is the starting point and build out from that so you ensure that the orientation will follow for this tutorial I will just make a very simple 2 room interior

Now I have made the floor of the 2 room and removed the doors

<figure><img src="/files/TMGt7AO1jfk4uOxgbrez" alt=""><figcaption></figcaption></figure>

Now add some walls

<figure><img src="/files/aM76yki7Ytaokop37zav" alt=""><figcaption></figcaption></figure>

And add the roof

<figure><img src="/files/pv2ZeLI5AI9GrnTTkfNL" alt=""><figcaption></figcaption></figure>

This part is the most time-consuming this step can be merged a bit together with the texturing but for this tutorial we will have it operated for better overview. This is also where you edit the decals and other thing you want to edit.

## Convert to a drawable

When you have your model you need to convert it to a drawable. To convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawable > Create Drawable Objects`.

<figure><img src="/files/HWkdvkzmghhOqoi7455A" alt=""><figcaption></figcaption></figure>

If you navigate to `Mesh Properties > Sollumz LODs` you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/2.8/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.


# Texturing

Next, we need to add materials to the Drawable Models. With one of the Drawable Models selected, open the `Sollumz Tools > Drawable > Shader Tools` panel. For this tutorial, I will use the "NORMAL" shader which allows us to specify a base color and a normal map. Search for the "NORMAL" shader and click `Create Shader Material`.

<figure><img src="/files/HWkdvkzmghhOqoi7455A" alt=""><figcaption></figcaption></figure>

To add a texture open shader tool and find the normal one select your drawable and then pres Create Shader Material, and it should appear in the Material menu in this tutorial I make 1 set of textures for each room so each room have a roof, wall, and floor. In this sample I use the normal, but you can play around with the others they have some different attributes that can be useful

<figure><img src="/files/XXYh8w4GyIXBXPjQYqtC" alt=""><figcaption></figcaption></figure>

With the newly added material selected, head to the material section then open `Sollumz > Texture Parameters` then press the folder icon and select the texture you want.

{% hint style="info" %}
When selecting textures you'll need to make sure their resolution is power of 2 E.g. `16x16` `32x16` `512x512` `512x16`.

It also needs to be .dds and not jpg, png, or any other file format.
{% endhint %}

<figure><img src="/files/9C8EyLXTV8VpGsE3kQyL" alt=""><figcaption></figcaption></figure>

When you have set a texture open the UV Editing tab where you can edit the placement of the texture if the textures is placed wild you have to select the textures right click and press the Unwrap button

<figure><img src="/files/ySVb8ozpo76MPJbxLtkV" alt=""><figcaption></figcaption></figure>

## Embedding Textures

There are 2 way to store the textures in a ytd (texture dictionary) or embedded in the model. There are reasons to use either, but I won't come into when to use what for this tutorial i wil just use the embedded way. Chose each texture from the menu and press the `Set all Textures Embedded` button

<figure><img src="/files/Z8KfG1hJbvttrEAEhYH7" alt=""><figcaption></figcaption></figure>

## Vertex coloring

To set the vertex paint open `Data > Color Attributes` and add a new color attribute called `Color 1` and it need to be set to Face Corner and Byte Color for this tutorial I will just use green at .2 and everything else at 0 the vertex coloring is something you can play around with.

Red control ambient occlusion of the model during night, most (except for night lights) will have it topped to 255 so it gets very dark at night

Green artificial light, topping this to 255 will give a self emissive power to the object. Used for objects near to lampposts or light sources to simulate ambient lightning

Blue moonlight illumination, how much the object reflects of the moonlight. Rockstar uses this at very frequent situations to avoid a fully dark atmosphere

<figure><img src="/files/btrcaDS2jOYUxLVkN0JG" alt=""><figcaption></figcaption></figure>


# Collisions

Now we need a collision so the player can walk inside the interior without falling through the walls and floor. Let's start with opening of the building collision.

## Edit the ybns

Go and show every ybn that are where there is a doorway and edit it so there is a hole inside to the interior. Remember to take the camera inside the interior to see if there is any collision that needs to be moved/deleted.

<figure><img src="/files/Bhu2c102mq6xz0BGxb9j" alt=""><figcaption></figcaption></figure>

Like that we now have removed the collision so the players actually can go inside the interior.

<figure><img src="/files/X1qq3IrptiEgpeW869jL" alt=""><figcaption></figcaption></figure>

## Create the ybn

The easiest way to do it is to make a copy of the shell and then convert it to a ybn, but before you just convert then export you'll need to assign the material so the footsteps and gun shots wil behave as intended.

To make a copy of the shell just press `SHIFT+D` and then right click and then `ALT+P` move the duplicated shell out of the drawable so it can be made to a ybn.

<figure><img src="/files/MXeOs5yI1mNtK7ie9LZG" alt=""><figcaption></figcaption></figure>

Now that we have made a copy it needs to be converted to a Composite you do that by marking the mesh and pressing `V` and selecting the option convert to Composite and then the option Apply flag preset

<figure><img src="/files/e6sMNQg9Ve8mJhWZopk9" alt=""><figcaption></figcaption></figure>

## Collision material

You are now ready to assign the material to the collision. Here you just need to find the material that is closest to what material you have chosen on the drawable, and then it's just assign them the same way as the texture.

The floor material need to be different for each room so the room ID can be set to the material

<figure><img src="/files/Z3FhyQQnasZglkYYslC1" alt=""><figcaption></figcaption></figure>


# Creating ytyp

So now we have a somewhat finished model now it is time to make the archetype (.ytyp). The archetype is a file that contains information about the model, collision, and texture it is also in the file we determine how many rooms there are and where the portals between rooms are and entities in the room (This ***can*** be easier to do in CodeWalker later on), it is also time to create the map data (.ymap) this is where we place exterior entities and in the interior we defined in the archetype. There are ways to do it directly inside of Blender, but it is not part of this tutorial check out [this video by ook3D](https://www.youtube.com/watch?v=P8Pxe6Z_iwQ\&ab_channel=ook_3D) if you want to know more.

## ytyp

Start by opening `Sollumz Tools > Archetype Definition > YTYPS` and then press the `+` icon to create a new archetype then you can mark every item you have made just the drawable then make sure it is set to base then press Auto-Create From Selected then mark the collision change to MLO and then press Auto-Create From Selected again you now have the definition of every drawable and the MLO where the portals are defined.

<figure><img src="/files/xyDyohxaiy0yZ46uY8Bp" alt=""><figcaption></figcaption></figure>

Now we want to create the rooms for every room + limbo, first select the mlo and open the tab Rooms now we add the first room witch is the limbo room it is created by pressing the Create Limbo Room, now the rest of the rooms will be added by pressing the `+` foreach room you'll need in this tutorial, then we just need 2 one for the front room and one for the back room. Then to fit the room select the collision and open edit mode and select the 4 vertices and press the button Set Bounds From Selection

<figure><img src="/files/lD3dSiO77PYWmtBN8EhY" alt=""><figcaption></figcaption></figure>

Now it is time for portals. Go to the Portals tab and mark the 4 corners of the doorway and make the portal from ***inside*** to ***outside***, when inside it doesn't really matter what way they are facing. When the portal is set make sure the direction of the arrow in the portal faces the same way as the instructed and if not use the Flip Direction button to flip so the arrow match.

<figure><img src="/files/XhRVY2nKGevby6Ze0nvQ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
It is very important to go out from inside when limbo is one of the parts.

Room -> Limbo
{% endhint %}

Now to add the shell as an entity, navigate to the Entities tab and select the drawable and press the Add Object(s) as Entity, and it will be added now just add the room limbo to the entity

<figure><img src="/files/ww4QYeQj159aMlBiX5MJ" alt=""><figcaption></figcaption></figure>

We are now done with the archetype there are much more to know about the archetype you can read more about it [here](/2.8/documentation/archetype-definition.ytyp) There is also much more to discover here you can play around with the timecycles and flags on room and portals these can also be done in CodeWalker


# Export from Blender

To export you just need to select every item you want to export and open Sollumz tool and press export. Note that the object need to be visible to be exported so make sure that everything you want to export is not hidden.

<figure><img src="/files/P1aEP4NNYF21uMtqThmK" alt=""><figcaption></figcaption></figure>

We now need to convert the xml to gta formats we do that by opening the RPF Explorer and then open a folder you want the files to be in and drag the xml file into the RPF Explorer.

<figure><img src="/files/F1xMkxUVvV3ugEjxukqg" alt=""><figcaption></figcaption></figure>


# Creating ymap

Now we are at the last step of the interior tutorial the only thing we need is to place the interior into the world.

Start by opening the folder where all your files are located so the files wil be loaded into the game. Open the navbar and press open folder.

<figure><img src="/files/A1uoetJHpycrWmo1XvbN" alt=""><figcaption></figcaption></figure>

When you have opened the folder everything should be in the project manager, and it is now time to add the ymap. Go add the ymap and a new entity and replace `prop_alien_egg_01` with the name of the interior as defined in the ytyp in this tutorial I called it `tutorial_interior_col`.

<figure><img src="/files/A7nDWotEmpZIKDGibpTH" alt=""><figcaption></figcaption></figure>

Now it is time to place it the right place, and it is now that the mirror we created earlier come in handy. Select the model in blender and open `General > Object Location & Rotation Tools` and press the most left button to copy the coordinates to clipboard the go into CodeWalker and paste the coordinates into the project manager.

<figure><img src="/files/SABgjARkii3EN0doNAfP" alt=""><figcaption></figcaption></figure>

Now it's time to calculate the flags and extents by selecting the ymap and press the calculate buttons and here you can also name the ymap what you want to call it in the name field then save the ymap.

<figure><img src="/files/HiWp9U8yyPbAegfLcxyv" alt=""><figcaption></figcaption></figure>

We are almost done we are just missing the manifest file which we can auto generate by pressing Tools and the generate manifest and then save.

<figure><img src="/files/Q0u7pRkl0gk5OSTrKF0M" alt=""><figcaption></figcaption></figure>

Now we are ready to load everything into the game.


# Creating Props

Props are simply just entities or models that can be reused and placed multiple times to detail an area or scene.

### Prerequisite Knowledge

* Basic Blender skills
* Know how to either stream assets in a FiveM resource or load singleplayer mods

### What you will need

* A model with textures prepared

### You can follow this guide in the order below:

{% content-ref url="/pages/736WMU04X2JCkLPyJryI" %}
[Setting Up Sollumz Shaders](/2.8/tutorials/creating-props/setting-up-sollumz-shaders)
{% endcontent-ref %}

{% content-ref url="/pages/rqFVdu6nnmAOGAiFSiWc" %}
[Converting To Drawable](/2.8/tutorials/creating-props/converting-to-drawable)
{% endcontent-ref %}

{% content-ref url="/pages/2lrw02dWcLDIktaCM6XJ" %}
[Creating the Archetype (.ytyp)](/2.8/tutorials/creating-props/creating-the-archetype)
{% endcontent-ref %}


# Setting Up Sollumz Shaders

### Setting up proper Sollumz Shaders

For your textures and materials to work correctly inside of GTA V, you will need to use 'Sollumz Shaders'. these are simply materials that are set up correctly for use with GTA V assets.

To get started, within the Sollumz Tools found in the Toolbar, navigate to Drawables -> Shader Tools

<figure><img src="/files/n254MuzWCuf5jm5CjVT8" alt=""><figcaption><p>Sollumz Shader Tools Panel</p></figcaption></figure>

Here you can find a list of all usable shaders within GTA V. you will quickly notice just how many shaders there are, and you might be intimidated by the amount, but around 80-90% of these shaders are not used frequently or at all for props.

Next, we will need to decide which shader is right for our asset. some key things to keep in mind when deciding which shader to use are:

* Does my asset utilize a normal map?
* Does my asset utilize a specular map?
* Do my textures contain an alpha channel?

for this example, the asset uses a normal and specular map, but no alpha. so for this shader we will use "normal spec".&#x20;

#### Creating the Shader

So now that we have decided which shader we will be using, we can now go ahead and create the shader. To do so, you can either press CTRL + F within the shader list and search for "normal\_spec", or you can scroll manually.

Once you have located the shader, select it by clicking it. it should now be highlighted. next, select your prop model, and click the "Create Shader Material" button.

<figure><img src="/files/UW2yeSwr1FruybRuisni" alt=""><figcaption><p>Sollumz Shader Tools Panel</p></figcaption></figure>

### Applying textures to your new shader

If you now navigate to the Material tab on the bottom right panel with your prop model selected, you will see your newly created shader.&#x20;

<figure><img src="/files/wSmkaUX79X0fUG0VX0zO" alt=""><figcaption><p>Material Panel</p></figcaption></figure>

another thing you will notice is the "Sollumz" tab within the Material tab. Within this Sollumz tab is where you will be controlling everything related to this specific shader.

If you expand the Texture Parameters panel, you will see the 3 different texture slots:

* DiffuseSampler (Diffuse / Colour map)
* BumpSampler (Normal / Bump map)
* SpecSampler (Specular Map)

you can go ahead and click the folder icon on the right to open up the file explorer window and select the corresponding textures for each.

<figure><img src="/files/FfvPfRSjjbGB4XHChNJi" alt=""><figcaption></figcaption></figure>

Once you apply each texture, ensure the BumpSampler Color Space is set to "non-Color" otherwise it will look incorrect within blender, but will be fine when you export.

<figure><img src="/files/dhMMc3kfIhNRAqC4e4er" alt=""><figcaption><p>Color Space</p></figcaption></figure>


# Converting To Drawable

Game meshes are stored in the [Drawable (.ydr)](https://github.com/Sollumz/wiki/blob/main/documentation/drawables.ydr) file format. Creating Drawables in Sollumz is very simple. This tutorial will walk you through step-by-step.

### Converting to a Drawable

The first thing to do is convert your object(s) to a Drawable. Select all the objects and click `Convert to Drawable` in `Sollumz Tools > Drawables > Create Drawable Objects`.

<figure><img src="/files/yRdQWQdYPQz4zqcRdMWO" alt=""><figcaption></figcaption></figure>

You will notice in your Scene Collection top right, that your object has changed a little. It is now in the correct hierarchy / format for GTA V.

<figure><img src="/files/4yPit1nbxBSzADAuYlV5" alt=""><figcaption><p>Drawable Hierarchy</p></figcaption></figure>

If you navigate to `Mesh Properties > Sollumz LODs` with the drawable model selected, you'll also notice that the active mesh is automatically assigned to the "High" LOD level. This panel is where you can assign other meshes as LODs. More info on that [here](/2.8/documentation/drawables.ydr/level-of-detail-lods-editing). For the sake of this tutorial, we will only be setting the High LOD level.

<div align="left"><figure><img src="/files/sCUHn50rN7QZ8FE1dLVZ" alt=""><figcaption><p>Mesh Properties > Sollumz LODs</p></figcaption></figure></div>


# Creating the Archetype (.ytyp)

TODO


# Creating Vehicles

In this crash course tutorial, you are going to learn how to create a vehicle using a vanilla GTAV vehicle as a base. A basic knowledge of RAGE engine is nice to see.

The example vehicle used in this article is `adder.yft`

<figure><img src="/files/0Jc5IIMLYCouOhIawd8r" alt=""><figcaption><p>adder.yft</p></figcaption></figure>

{% hint style="info" %}
Before creating a new vehicle, make sure you have read the Vehicle Setup pages in Fragment documentation.
{% endhint %}

### Contents


# Setting Up the Model and Materials

### Importing a model

Without further ado, import a model (from a different game, modelled by yourself) to Blender. In this case, I am going to import the Super GT from GTAIV in `.FBX` format.

{% hint style="info" %}
You can ditch that part if your vehicle was modelled in Blender.
{% endhint %}

<figure><img src="/files/eojM0zVmVebUeAGtwCRC" alt=""><figcaption><p>Importing a .fbx format file with tutorial vehicle</p></figcaption></figure>

As the import has finished, you will see an imported mesh.

<figure><img src="/files/AXOSBLFUhIqEPkcGc2t8" alt=""><figcaption><p>Vehicle mesh after importing process</p></figcaption></figure>

### Assigning materials

The subject of consideration for this tutorial is the bonnet part. To assign a material, go to Material tab, click on Browse material button and select the material from the list. In this case, I have assigned a vehicle paint one to the outer part of the bonnet.

<figure><img src="/files/iMbgtPvEBIvppmHU3xDi" alt=""><figcaption><p>Choosing a vehicle paint material</p></figcaption></figure>

The same is true for all the bonnet's materials.


# Positioning Bones

{% hint style="info" %}
This step is needed when you are creating a fully custom vehicle. If this is an edit of an existing car, skip this step and go to next one.
{% endhint %}

Bones can be easily moved in Edit mode. To move them:

1. Switch to **Solid Mode**
2. Toggle **X-Ray**
3. Choose a bone you want to move
4. Select it in 3D View
5. Click on Move icon
6. Move the bone using gizmo.

<figure><img src="/files/awwtnDRHePQQJFEepSom" alt=""><figcaption></figcaption></figure>


# Vertex Groups, Hierarchy, and Armature

### Create and assign Vertex Groups

To create a new vertex group, go to **Data** tab, click `+` in **Vertex Groups**, double click on the Group name and rename it to **bonnet**.

<figure><img src="/files/GDItemnUvcRKY7jd3cLx" alt=""><figcaption><p>Process of creating a vertex group</p></figcaption></figure>

1. Change **Object Mode** to **Edit Mode.**
2. Switch to **Face Select.**
3. Select all faces by pressing `A` or using the `CTRL+A` shortcut.
4. Go to **Vertex Groups**, click Assign button and exit **Edit Mode**.

Now all of the selected faces are properly set to the **bonnet** vertex grou&#x70;**.**

<figure><img src="/files/HUsSNd3hqDLvho33rOMW" alt=""><figcaption><p>Assignment of faces to vertex group</p></figcaption></figure>

### Hierarchy

Our new custom bonnet model has to be considered by Sollumz as a valid part, so we have to move the mesh by expanding Adder's armature then drag and drop bonnet's Drawable Model inside `adder.mesh`

<figure><img src="/files/RAZNktuqMNP80tDNgPO4" alt=""><figcaption><p>Bonnet part moved into adder.mesh</p></figcaption></figure>

{% hint style="info" %}
You can delete the original bonnet, since is not needed anymore.
{% endhint %}

<figure><img src="/files/hXbNdpIcvOZAGancSk08" alt=""><figcaption><p>Removal of vanilla bonnet part of adder.</p></figcaption></figure>

### Armature

A replacement custom part has also to be linked to the armature, you can do this via **Armature** modifier.

1. Go to **Modifiers** tab.
2. Add an **Armature** modifier.
3. Select your vehicle's armature.

<figure><img src="/files/mLfJWzgDiJT2r1iy1TQr" alt=""><figcaption><p>Armature modifier creation</p></figcaption></figure>


# LOD Assignment

All models rely on LOD meshes, which greatly reduces graphics demand of detailed models and improves overall performance.

{% hint style="warning" %}
if you have any other LOD meshes ready to be set up, copy their names to the proper LOD levels.
{% endhint %}

In order to render your mesh at any distance:

1. Go to **Data** tab.
2. Scroll to **Sollumz LOD.**
3. Copy the name from High LOD to Very High, Medium and Low.

<figure><img src="/files/Fk5AyPZImdWSEcBD3Eoa" alt=""><figcaption><p>LOD assignment for all levels</p></figcaption></figure>


# Exporting

In the `Export Codewalker XML > Fragment` panel, you will find the two options, depending of your edits done prior in Blender.

<figure><img src="/files/znwj8UGk3MQo4FiDaZqk" alt=""><figcaption><p>Export settings with two options marked</p></figcaption></figure>

First option - `Auto Calculate Bonetags` in Drawable is doing a bone number calculations. This option is needed to use when you have added a fresh new bone (i.e. a rear doors). The hardcoded bone tag value tells the game that specific bone has to be treated as rear doors. If you have not added any bones, do not select this.

Second option - `Auto Calculate Inertia` and `Auto Calculate Volume` has to be ticked if you have changed the shape of any collision mesh. Using this option provides a correct calculation for a physics engine. If you have not changed any collision shapes, do not select this.


# Creating Weapons \[TODO]

TODO


# Basic Animation Editing \[TODO]

TODO


# Basic Clothes Editing

Often the easiest way to get into ped editing is to start simple: Let's edit an existing model from GTA for a freemode ped, so we can learn the basics.

## Peds: Streamed vs Non-Streamed

One thing you should know is that there are generally two different types of peds for GTA: "streamed" and "non-streamed". For a basic explanation, just know that peds use YDD (drawable dictionary) files for their models instead of YDR. For streamed peds, all of their 'parts' (ie shirt, shoes, head, etc) are separate YDDs. For non-streamed peds, all of those parts are put together into 1 single YDD. Streamed peds are generally easier for beginners to start with editing, because you can edit and export 1 piece at a time so if you mess up, you know it's just that 1 part that isn't working.

MP Freemode both male and female are both "streamed peds". This means that all of their parts are separate. If you wanted to see a 'base body' in blender to work with, you'll need to import several different YDDs: a HEAD, an UPPER, a LOWR, and a FEET.&#x20;

## Ped Skeletons

One other note before we start: All peds, whether streamed or non-streamed, have a SEPARATE FILE called a YFT for their skeleton. For whatever ped you are editing with Sollumz, you will need their YFT file so that Sollumz knows what their bones are.

## Importing the Files

#### Export the skeleton YFT XML

Let's start getting ready to get into Blender! The first step is to export the male and female Freemode ped skeletons (YFTs) to use when importing and exporting components that are rigged to the ped. These are located at **x64v.rpf\models\cdimages\streamedpeds\_mp.rpf** and can be saved separately to be used with any freemode ped clothing or accessories you edit in the future.

<figure><img src="/files/4w9BRnrRmbarpDxxE25D" alt=""><figcaption><p>an image of codewalker showing the folder where mp m/f yfts can be found</p></figcaption></figure>

If you haven't already created a folder somewhere on your computer to work on this project, do that now. Then, right-click the **mp\_m\_freemode\_01.yft** and press `Export XML...`. Make sure you're keeping track of where you exported the XML to. It will need to be in the same folder as the YDD when we import into Sollumz.

#### Exporting the YDD

Now we'll export the model we actually want to edit, as well as a texture for it. If you didn't already know of it, [tobii.space](https://tobii.space/) is a good visual reference for most of the freemode components. It has most DLC clothing, although it is missing some of the newer updates. Today we already know what clothing piece we're using, so let's head back over to Codewalker RPF and grab the file.

Open up CW RPF and type `mp_m_freemode` into the searchbar

<figure><img src="/files/0fvmgJY6jDujqg7quFDd" alt=""><figcaption></figcaption></figure>

If you click "Name" at the top to sort by name, you'll then see a list of all of the MP Male folders. You'll notice there are multiple folders for every DLC. This is the original DLC folder, and then patchday folders that hotfixed any issues R\* had with various pieces of clothing.

<figure><img src="/files/L73wkuSdSiFHciOqwnm7" alt=""><figcaption></figcaption></figure>

The 🟥 outline is all of the base MP male DLC folders

The 🟧 outline highlights all of the DLC names. Notice the original DLC and all of the patchday hotfixes.

The 🟩 outlines the original base game DLC folder.

Right now we aren't going to worry about any hotfixed files, so just click into the original DLC folder. If you are ever editing GTA assets, though, you should always look through the patchday folders for whatever component you're trying to edit so that you can work off of the most up-to-date version.

Now that we're inside the base folder, you'll see a long list of all the base game components and their YTD textures. Make sure you're sorted by 'Name' so that everything is alphabetical, and then scroll down until you see the JBIBs.&#x20;

For the purposes of our tutorial, let's export `jbib_007_u`.&#x20;

1. Right-click on `jbib_007_u.ydd`
2. Select `export XML...`
3. Export location: **Make sure you export to the same folder** you exported the YFT earlier.

<figure><img src="/files/svo4DzB9TC9Lg1d9yl3f" alt=""><figcaption></figcaption></figure>

Now let's quickly visit the folder you've just exported the file to. In the folder, you should have a couple of things. Firstly the `mp_m_freemode_01.yft.xml`, then `.ydd.xml` of our jbib & there should also be a folder named `jbib_007_u`.

Whenever you are exporting a model that **has embedded textures**, Codewalker RPF will create a folder named after the model you exported to XML with all of the embedded textures placed inside of it.&#x20;

Go ahead and click into the folder and take a peek at the embedded textures!  You should see two: a **normal** texture and a **specular** texture. To quickly explain these: A normal helps emphasize clothing details like wrinkles & a specular helps display the glossiness or matte of your clothing.

Most freemode clothing components have an embedded specular texture and normal texture. When you go to make your own models later on, you'll need to learn how to create these yourself. For now, they have already been made for us. So get familiar with them while you can!

#### Exporting a texture for our model

You might have already noticed, but there's one texture we don't have yet: A diffuse texture. The diffuse texture for clothing YDDs stays un-embedded from the model and in a separate file called a  YTD (texture dictionary), and you can have up to 26 of them (A to Z) for any single YDD. We *don't  need* the texture for our editing today, but it's nice to have a visual reference, so let's grab one now.

In Codewalker RPF right below where you found the YDD we exported, should be the YTD files. Scroll down until you see `jbib_diff_007_a_uni.ytd` and export it to XML. It will create a sub-folder named **jbib\_diff\_007\_a\_uni** with the texture inside of it.

### Ready for Blender

Do a final check before opening blender. Your folder should look like this:

<figure><img src="/files/oEzKNzKSB52KdvWBmj4p" alt=""><figcaption></figcaption></figure>

Your `.yft.xml` is in the same folder on the same level as the `.ydd.xml` . That's the import part!

If you would like, you can copy/paste the diffuse texture from the **jbib\_diff\_007\_a\_uni** to the "embedded textures" folder **jbib\_007\_u** . This will allow Sollumz/Blender to automatically find the texture when you go to import. Otherwise, you can link it manually later on.

## Importing to Sollumz

With Blender open:

1. click File
2. Import ► Codewalker XML
3. Navigate to the folder you exported the XMLs
4. Click **jbib\_007\_u.ydd.xml** and from the side-menu options make sure you select 'Import External Skeleton'

<figure><img src="/files/51Wyw2vxVRQAtexKz0p0" alt=""><figcaption></figcaption></figure>

You should now be looking at something like this:

<figure><img src="/files/B5P8A7gEqQ8aZQ9UUijD" alt=""><figcaption></figcaption></figure>

Let's make sure we imported correctly. In scene collection:

1. Expand **jbib\_007\_u** and then **jbib\_007\_u.001** and click on **SKEL\_ROOT**&#x20;
2. In the properties window, click on the Object Data Properties tab
3. Expand Vertex Groups (if its not already) and make sure they are all named.&#x20;

<figure><img src="/files/1rBehEz2rXhdwZGRgTOV" alt=""><figcaption></figcaption></figure>

If you see named bones like **SKEL\_L\_Hand** etc then you're good to go! If you see something like UNK.001 you did not follow the correct steps for exporting the YFT portion of this tutorial. Go back up, re-read, and try again.

## Preparing the model

#### Viewport adjustments

With everything imported properly, let's get ready to actually edit! First things first, we probably want to change our viewport to actually see what we're working with.&#x20;

<figure><img src="/files/iQt1tLl5T0LtZ8Rxt7mn" alt=""><figcaption></figcaption></figure>

Personally, I like to change the 'color' to Texture and 'lighting' to MatCap, but you can play around in this menu and see what works for you.

#### Linking diffuse texture

Once we have that set, your shirt might look like this:

<figure><img src="/files/NoDT95vvmpJcILK9aIUO" alt=""><figcaption></figcaption></figure>

If you left the diffuse texture in it's own **jbib\_diff\_007\_a\_uni** sub-folder, you'll see our jacket is pink. That's fine! We can just link up our diffuse texture now.

* Top-left, go to File ► External Data ► Find Missing Files

<figure><img src="/files/9TnmIdrbMCOMPKM2drKX" alt=""><figcaption></figcaption></figure>

Navigate to your project folder and select the **jbib\_diff\_007\_a\_uni** sub-folder where you will see the **jbib\_diff\_007\_a\_uni.dds**. Then press 'find missing files'.&#x20;

<figure><img src="/files/kNwdqckgrN0G3Z5SzbXs" alt=""><figcaption></figcaption></figure>

It's good to know this method, as you will use it in other parts of Sollumz modding as well for things like props and MLOs. You might see a yellow warning popup at the bottom of your blender that says it cannot find 'givemechecker.dds' . This is fine to ignore.

<figure><img src="/files/Z0sm0jBhLrncQwLHhUsl" alt=""><figcaption><p>you can ignore this warning</p></figcaption></figure>

Head back to the 3D viewport (instead of shader editor) and we can see our jacket now has the diffuse texture:

<figure><img src="/files/hH0Gxke8bQsO1wue6Vni" alt=""><figcaption></figcaption></figure>

Great! Just one more thing to do before we actually edit. When importing into blender our vertices have unmerged and we've lost our sharp edges. We want all of that back so that we can have the most accurate view of what we're working with and what it will look like in-game.&#x20;

#### Merge vertices/Sharp Edges

To fix things, let's do the following:

1. Select SKEL\_ROOT in scene collection
2. In 3D Viewport, Tab into Edit Mode
3. Select everything (Default: A key)
4. Merge ► By Distance (Default: M key)
5. In the bottom left for the 'Merge by Distance' window, expand it and tick on Sharp Edges

<figure><img src="/files/4qUXJnnOAFrSwDSD8FQY" alt=""><figcaption></figcaption></figure>

Clothing has 3 LODs (level of detail): high, medium, and low. We also need to do the same thing for our medium and low LODs.&#x20;

The easiest way to switch between LODs quickly is to press **SHIFT + V** (make sure you are no longer in edit mode) to bring up the Sollumz Object Visibility wheel.

<figure><img src="/files/8Ke1Z0onHjlC0pd0Wrhw" alt=""><figcaption></figcaption></figure>

The three options on the right-side of the wheel are the ones you'll be using for clothing YDDs. Switch to Medium, repeat the same steps above. Then switch to Low, and do it once more.&#x20;

## Editing

We're ready to edit! Switch back to High LOD with SHIFT + V and tab into edit mode. You can make any changes you want here. I'll delete the sleeves for the purpose of this tutorial.

<figure><img src="/files/IAP7CGg2zJxk7H5XPmKu" alt=""><figcaption></figcaption></figure>

Now that I've removed the sleeves, I have 2 things to resolve:

1. I need to fill in the holes where the sleeves used to be
2. I need to create new sharp edges to tidy up the model

The reason we want to fill in the holes is because GTA uses back-face culling. What this means is that the faces on the model do not have both a viewable "front" and "back". Instead, the front-facing side is visible and the back is invisible. We can see this in action in blender by going back up to the viewport shading options and turning it on.

<figure><img src="/files/k1epbi5OaA9bzvMHf5uy" alt=""><figcaption></figcaption></figure>

You can see the "back side" of the model is invisible now. We need to fill in those holes. There are two ways to fix this.

First, go back into edit mode and select all of the vertices around the edge.

<figure><img src="/files/SdLjpmeTEMX6T4Zv3cVn" alt=""><figcaption></figcaption></figure>

Then you have two options. You can either press F to fill in the hole, or you can extrude the hole and then merge the vertices from the extrusion. For this tutorial, I'll be doing the second method.

<figure><img src="/files/x5ZKd9tc0IsPYY8EAoHZ" alt=""><figcaption></figcaption></figure>

1. Select the vertices around the edge
2. Extrude (default E key)
3. With your mouse, move the new points slightly inward
4. Scale the vertices together (default S key) then merge them (M Key) ► at center

You might notice that our new geometry looks a little weird. Almost as if its shiny in places.

<figure><img src="/files/nG0qDYn0Td8ER0WpxiAR" alt=""><figcaption><p>an example of bad normals</p></figcaption></figure>

What's happening here is we have bad normals. To be clear, there is a difference between the embedded "normal texture" (sometimes also called a bump map) and geometry normals. If you'd like to learn more about normals, there are plenty of youtube videos that can help.&#x20;

For now I'm just going to reset them to clear up this issue! **With my geometry selected** go to Mesh ► Normals ► Reset Vectors

<figure><img src="/files/Zh7JXG8mQx9GbZZVifOt" alt=""><figcaption></figcaption></figure>

Once that's done, everything should be looking much betterr.

<figure><img src="/files/xvnV0sDiNSLh4x7hUgkh" alt=""><figcaption></figcaption></figure>

Since this is the edge of the shirt, I'd also like to set some sharp edges along the same loop we just filled in. Sharp edges add a more "crisp" line in geometry that is clearly visible in-game. When you use them properly, they can add a little extra emphasis to your model quality. There's no rule of when or when not to use sharp edges, it's up to you to follow the lines of clothing and determine where they would make sense.&#x20;

For now I'll go to edge select & select the loop I filled in, then right-click and press "mark sharp"

<figure><img src="/files/rovtT2HbXB0G6eHihaiM" alt=""><figcaption></figcaption></figure>

Now do the same thing with the other side.&#x20;

<figure><img src="/files/L9DrXQD7y4pJPAzAwpWy" alt=""><figcaption></figcaption></figure>

With that done comes the boring part: Repeating the same process with the medium and low LODs! With custom models, you would have all of this already finished before you create your LODs  but when editing existing clothing, you need to either edit everything the same or create new LODs after you've edited.

For this tutorial, you should delete the sleeves on the med/low LODs so that they look visually similar, but it's up to you whether you want to fill in the sleeve holes like we did here for High LOD. Chances are that from a distance people won't be able to see that small detail anyway.

## Exporting

With all of the LODs edited, we're now ready to export!&#x20;

* In the outliner window, right-click **jbib\_007\_u** and `select hierarchy`

<figure><img src="/files/atDgKhCW4aQOdyjjUtM1" alt=""><figcaption></figcaption></figure>

* Then go top-left to File ► Export ► Codewalker XML
* It's best to create an 'export' folder so that you are not overwriting the original. That way if you mess up, you don't have to go grab the ydd xml all over again.&#x20;
* navigate into Export folder
* Export

<figure><img src="/files/WagNFXoWsIOy4LruOSBk" alt=""><figcaption></figcaption></figure>

The window will close and at the bottom of your blender you should see a message like "exported in 0.12 seconds".&#x20;

Now in our export folder, we should have our new .ydd.xml and a copy of the embedded textures folder with our normal/specular textures inside.&#x20;

<figure><img src="/files/7itJ5BUcIxnVlstbKkB9" alt=""><figcaption></figcaption></figure>

You can now head back over to Codewalker RPF and import the XML to turn it back into a YDD & preview it!

<figure><img src="/files/gOtxZxE4YKiVDlG5hSy5" alt=""><figcaption></figcaption></figure>

Our model is finished! Now you can replace the existing one or create an addon with the same textures and test in-game. In-game you might see it clips with the underarms as you move around. That's due to something called "weight painting". More about that to come in future tutorials!

## FAQ

### What Vertex Colors should I use?

99% of the time you want Color 1 to be #FF8000 and Color 2 to be #000 with 0 alpha.&#x20;

<figure><img src="/files/Dl23bILYBpeFBq5qUqQO" alt=""><figcaption></figcaption></figure>

Color 1 setup:

<figure><img src="/files/9wt92y0ZBOJMrDV9wWRi" alt=""><figcaption></figcaption></figure>

Color 2 setup:

<figure><img src="/files/KnDdD5CTXxOSoDJOMSiG" alt=""><figcaption></figcaption></figure>

Make sure both are set to "face corner" and "byte color":

<figure><img src="/files/zNfHsYTFNIKo1aBTFJdc" alt=""><figcaption></figcaption></figure>

### My clothes are shaking ingame

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on, and Color 2 is to deal with sweat or wind effects. Your clothes are shaking due to wind. To turn off wind effects, make sure Color 2 is black #000 (see above).&#x20;

### The shading on my clothes are weird, it's completely black on one side/in the shade.

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on. Most MP clothing uses hex color #FF8000 for Color 1 (#000 with no alpha for Color 2, see above)

### My clothes look shiny/oily in the sun

**Answer**: This has to do with Vertex Colors. Color 1 determines the lighting a ped object should take on, and Color 2 is to deal with sweat or wind effects. Your clothes are shiny in the sun due to sweat. To turn off sweat effects, make sure Color 2 has no alpha:&#x20;

<figure><img src="/files/ttrPq6Rph88oCbnNg0Yn" alt=""><figcaption></figcaption></figure>

### There's a weird checkered pattern on top of my clothing texture

<figure><img src="/files/SJ9Dn7SIR3A9tobI7PMz" alt=""><figcaption></figcaption></figure>

**Answer**: For MP Freemode YDDs using PED material (or streamed ped YDDs) it is required to embed both a normal and specular texture(s). If you see your texture but with a checkered overlay, most likely you are missing one or both.

### My YDD exported but doesn't appear ingame

**Answer**: Most of the time this is due to clothing not being rigged. Either you did not import with external skel (see [Basic Clothes Editing](/2.8/tutorials/basic-clothes-editing#importing-the-files)) or your import was okay but you didn't actually rig your mesh (empty vertex groups).&#x20;

### My \_r freemode clothing piece is not changing skin colors ingame

**Answer:** Several things could be wrong. Either you:

* Did not name your embedded textures correctly (should follow R\* format so `component_normal/spec_number` for example: `jbib_normal_000` and `jbib_spec_000`)
* The alpha RGB channel on your specular texture (viewable in programs like photoshop) is not setup correctly
* You moved the UVs for the skin (you should not do this)
* Your diffuse is not square or not Power-of-2 (256x256 or 512x512 etc). \_r clothing should be square to follow original MP skin dimensions.

This is an intermediate problem that has many possible issues. For a more in-depth explanation of these problems (and a walk-through of the solutions) please watch this video:

{% embed url="<https://www.youtube.com/watch?v=sJO_Fd__2nw>" %}

### My emissive material is not glowing in game.

For ped emissive to work correctly on clothing, set Color 1 to #FFBAFF. Keep Color 2 #000/no alpha to disable sweat/wind.

\
![](/files/rL5WFaQwgGGFax47e8Xt)

{% hint style="info" %}
**Tip:** In Vertex Paint mode, you can press **Ctrl+X** to quickly paint the mesh.
{% endhint %}




---

[Next Page](/llms-full.txt/1)

