# Vehicle Model Setup Pipeline

## Recommendations for model development and configuration

To optimize the workflow of creating and exporting assets into the game, it is recommended to adhere to the established production pipeline.

Start by creating the base model and perform initial in-game testing to identify any visual artifacts and verify the correct functionality of the primary features.

After successful validation, proceed to generate Levels of Detail (LODs). Then create the X-model and XX-model, along with their respective LODs. Integrate animations at the final stage, once the model is fully polished and no further adjustments are needed.

Following this sequence will allow for timely identification of issues and help avoid extensive rework.

{% stepper %}
{% step %}

### Pre-setup checklist

* **Verify model scale and proportions**

  Ensure that the vehicle's overall dimensions (length, width, height) and the gun barrel caliber are accurately scaled to match the original specifications or reference data.
* **Confirm model orientation**

  Align the model so that its front faces the positive X-axis, adhering to the standard coordinate system conventions used in the game engine.
* **Assign materials and shaders**

  Apply the appropriate materials and shaders to the model to facilitate correct visualization and rendering within the engine.
* **Create the `basis` root bone**

  Add the `basis` root bone to the model's skeletal hierarchy. \
  In its **Object properties window**, set the game entity type and specify the export path for integration into the game's asset pipeline.

[More about this step](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#basis-bone)
{% endstep %}

{% step %}

### Working with the mesh

* **Merge and split mesh components**\
  Organize the mesh by splitting or merging it into components that correspond to the **visible bones** of the model. Assign appropriate names to each bone according to the specification. \
  In the **Object Properties** of each bone, set the parameter `poly` to indicate that it is a visible bone of the model.\
  [More about the visible bones](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#visible-bones-of-the-vehicle-model)
* **Establish layer hierarchy**\
  Set up a hierarchical layer structure to manage various aspects of the model for better workflow efficiency. Include layers for meshes, Levels of Detail (`lod0` to `lod3`), volumes, special effects, and **auxiliary bones**. Using layers allows you to easily isolate and work on specific parts of the model.
* **Add occlusion geometry to simulate interiors**\
  For vehicle parts where the interior might be visible  — such as the hull, turret, or engine compartment — add simple box geometry to cover openings. Apply textures with dark or non-reflective materials on these occluders to create the illusion of depth without modeling detailed interiors. This technique improves rendering performance and visual fidelity by preventing the camera from seeing through the model.
  {% endstep %}

{% step %}

### Working with bones and hierarchy

* **Build the hierarchy**\
  Organize the model elements into the correct hierarchy by linking all branches of elements to the model's root bone (`basis`). Ensure that **primary bones** and **secondary bones** are properly connected, and that **auxiliary bones** are correctly integrated to support the model's functionalities.\
  [Additional details](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#visible-bones-of-the-vehicle-model)
* **Set parameters in Object Properties**\
  Specify the necessary parameters for objects (including meshes and both visible and auxiliary bones) in their **Object Properties**, according to the project's specifications.\
  [Additional details](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#bone-properties)
* **Adjust pivots**\
  Check and, if necessary, adjust the pivot points for meshes, **visible bones**, and suspension components. Ensure that all pivots are correctly oriented. Verify that the rotations of movable parts like wheels, turrets, and barrels occur around the Z-axis.
* **Add helper bones**\
  Include the necessary **helper bones** required for the correct functioning of all features of the model. These may include:
  * bones for the starting points of specific animations (`emit`);
  * bones for passenger positions (`seat`);
  * bones for all visible crew members and machine gunners;
  * bones for visors;
  * bones used for enumeration purposes;
  * bones for special effects;
  * bones for chassis components and suspension control;
  * any other bones as necessary.\
    [Additional details](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#helper-bones)
    {% endstep %}

{% step %}

### **Working with volumes**

* **Create and configure volumes**

  Create the required volumes and rename them appropriately. \
  For each volume, specify the parameter `volume` in its **Object Properties** to designate it as a volume object. \
  Then, link each volume to its corresponding parent object in the model hierarchy.\
  [Additional details](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#creation-and-configuration-of-volumes)
* **Verify armor mapping**

  Ensure that each face of the volume primitive has the correct **ID** assigned in the **Polygon: Material IDs** window. If a volume is a polyhedron, reassign the Material IDs of its faces according to the established [rules for armor calculation](/documentation/modeling/vehicle-model-setup-pipeline/bone-hierarchy-in-vehicle-models.md#reassigning-material-id-for-polyhedron-volume-surfaces).
* **Define volumes in the .def file**

  If a component has additional volumes (e.g., `body01_vol`, `body02_vol`, etc.), after the first export, you need to add their definitions to the model's **.def** file.
  {% endstep %}

{% step %}

### The first export

* **Verify export settings**\
  Check the export settings of the **3ds Max Plugin** and the export path specified in the properties of the `Basis` bone.
* **Post-export .def file verification**\
  After exporting, review the .def file. \
  Ensure that the .def file includes all the necessary elements required for conducting the initial in-game testing of the model and verifying its core functionality.
  {% endstep %}

{% step %}

### Test basic functionality in the game

* **Verify visual conformity**\
  Ensure that the model visually matches its representation in the 3ds Max workspace after export to the game and texture conversion to DDS.\
  Confirm that the model has the correct orientation and proportions.
* **Test unit movement and movable parts**\
  Verify the proper functioning of all primary components:
  * verify that movable parts respond correctly if applicable;
  * the main weapon fires and has correct rotation limits;
  * machine guns (if any) fire and have correct rotation limits;
  * suspension behaves correctly during movement;&#x20;
  * wheels and/or tracks rotate and steer in the proper directions;
  * armor screens (if any) detach upon damage;
  * test collision volumes for proper physical interactions.
    {% endstep %}

{% step %}

### Working with LODs

**Create LODs**

* **LOD 1:** Retain \~75–80% of the original triangles.
* **LOD 2:** Retain \~50% of the original triangles.
* **LOD 3:** Retain \~30–35% of the original triangles.
  {% endstep %}

{% step %}

### Working with textures

* **Assign materials**\
  Assign materials to the model and apply the corresponding textures.
* **Verify material assignments with alpha channel support**\
  Create a separate material with alpha channel support and assign it exclusively to polygons with transparent elements to optimize rendering.

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

* **Check seams and edges**\
  Ensure that textures are not distorted at cuts, seams, and displacements. If necessary, reassign using UVW mapping.
* **Clear shadows**\
  Ensure that shadows are absent in areas where objects were removed in X- and XX-model textures.
  {% endstep %}

{% step %}

### Creating X-models

* **Modify the export path**\
  Change the export path of the `Basis` bone to the X-model folder.
* **Create X-model textures**\
  Textures should include damage elements (rust spots, soot marks, burned-out paint, broken glass, etc.)
* **Refine the X-model mesh**\
  Remove unnecessary elements, add dents, penetrations, and damage areas.
* **Refine LODs for X-models**\
  Apply the same actions to all LODs (or simultaneously to all).
* **Refine broken tracks**\
  For tracked models, refine the broken track mesh.
* **Clear shadows on the X-model**\
  Remove shadows from areas where objects were removed on the X-model texture.
* **Test component destructibility**\
  Test using the following console commands:
  * destroy a component: `g_component break "component_name"`;
  * repair a component: `g_component restore "component_name"`;
  * shoot at the unit with two shell types;
  * fire at the unit with an anti-tank weapon (e.g., Bazooka);
  * throw an anti-tank grenade at the unit.
    {% endstep %}

{% step %}

### Creating XX-models

* **Modify the export path**\
  Change the export path of the `Basis` bone to the XX-model folder.
* **Remove helpers**\
  Delete unnecessary helpers.
* **Reassign diffuse texture**\
  Use a `Multiply` material for the diffuse texture. \
  For models using PBR materials, the `pbr/standard_dirt` scheme is used; otherwise, use `gem2/bump_specular_lightmap`.
* **Move the UV mapping**\
  Transfer UVs  to the second channel for lightmap purposes across all elements and LODs.

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

* **Refine the XX-model mesh**\
  Remove unnecessary elements, including tire meshes for wheeled models.
* **Refine LODs**\
  Apply the same refinements to all LODs.
* **Create parts and volumes**\
  Create and configure parts and volumes for XX-models.
* **Test component destructibility**\
  Use the following commands:
  * destroy a component: `g_component destroy "component_name"`;
  * trigger an explosion effect: `g_effect "explosion"`;
  * fire at the unit with two shell types;
  * use an anti-tank weapon (e.g., Bazooka) to fire at the unit and verify the destruction of vehicle components upon impact.
  * throw an anti-tank grenade;
  * verify that `part` bones detach upon explosion.
    {% endstep %}

{% step %}

### Configuring the .def file

During the first export of the model into the game, a simplified version of the **.def** file is generated, which is sufficient for testing the model's main functionality in-game. \
Once the model is fully completed, you need to refine the **.def** file using a text editor. It is acceptable to copy a **.def** file from an already completed and configured model of similar type and functionality, then make the necessary adjustments.

* **Add basic props**\
  Add props corresponding to the model's type and functionality.
* **Describe additional volumes**\
  Ensure that all additional volumes are properly described in the **.def** file.
* **Define crew bones and emit points**\
  In the **.def** file, describe the emitters and bones for crew placement. \
  \&#xNAN;*If the **crew\.ext** file is specified, make entries in that file.*
* **Add crew animations and poses**\
  Specify the appropriate animations and poses for the crew members.
* **Describe additional equipment**

  If applicable, describe any additional equipment, such as mesh-mounted machine guns or machine guns integrated via auxiliary bones.
* **Specify physical properties**\
  Define the model's physical properties (mass, speed, fuel tank volume, etc.).
  {% endstep %}

{% step %}

### Adding animations

* **Configure tracks**\
  Apply and configure the `Skin` modifier for all tracks.
* **Create basic animations:**
  * `start/stop`;
  * `hit`;
  * `fire`;
  * `fire_mgun`;
  * animations for opening/closing doors and hatches during crew embarkation/disembarkation;
  * other animations if necessary.
    {% endstep %}
    {% endstepper %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bestway-1.gitbook.io/documentation/modeling/vehicle-model-setup-pipeline.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
