This page contains practical material examples for vehicle and prop creation. The examples focus on modern version: 1.5 physically based materials.
You can create and edit materials manually in main.materials.json, or by using the in-game Material Editor:
World Editor (F11) → Window → Material Editor
See Vehicle Art Materials for vehicle material naming conventions and standard material slots.
Using vanilla content as reference is highly recommended. Common reusable textures and materials can be found in folders such as:
/vehicles/common/
/vehicles/common/generic_mat_tex/
These include useful shared textures for carbon fiber, leather, fabric, carpet, stitches, orange peel paint, generic lights, grilles, and more.
A typical material definition looks like this:
"example_material": {
"name": "example_material",
"mapTo": "example_material",
"class": "Material",
"Stages": [
{},
{},
{},
{}
],
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
| Field | Description |
|---|---|
| name | Internal material name. Usually matches the JSON key. |
| mapTo | Name of the material assigned in Blender. This tells the game which mesh material this definition replaces. |
| class | Should normally be "Material". |
| Stages | Material layers. Up to 4 layers are supported. |
| activeLayers | Number of layers used. If omitted, the material uses one layer. |
| dynamicCubemap | Allows the material to use dynamic/level reflections depending on settings. |
| materialTag0 / materialTag1 | Optional organizational tags. |
| version | Use 1.5 for modern PBR materials. |
persistentId lines. They are no longer used by game engine.Use the modern texture suffixes:
*.color.png Base color / color palette
*.normal.png Normal maps
*.data.png Linear data maps such as roughness, metallic, opacity, AO
Examples:
vehicle_main_b.color.png
vehicle_main_nm.normal.png
vehicle_main_r.data.png
vehicle_main_m.data.png
vehicle_main_ao.data.png
vehicle_main_o.data.png
Materials should reference the PNG path. If a cooked DDS exists, the engine will load it automatically.
"baseColorMap": "/vehicles/example/example_main_b.color.png"
Do not reference the DDS directly in the material.
The main vehicle material is usually the most important material on a car. It often contains both:
Modern vehicle materials should avoid masking the main paint layer. Instead, the recommended layout is:
Layer 1: Paint layer, unmasked
Layer 2: Fixed details layer, masked
Layer 3: Optional additional detail layer
Layer 4: Optional additional detail layer
This avoids color bleeding at texture mip levels, especially on lower Texture Quality settings.
The paint layer should be unmasked and act as the base layer. It usually contains:
Example:
{
"ambientOcclusionMap": "/vehicles/vivace/ardente/ardente_main_ao.data.png",
"clearCoatFactor": 1,
"clearCoatMap": "/vehicles/vivace/ardente/ardente_main_cc.data.png",
"colorPaletteMap": "/vehicles/vivace/ardente/ardente_main_p.color.png",
"detailNormalMap": "/vehicles/common/orange_peel_n.normal.png",
"detailNormalMapStrength": 0.3,
"detailScale": [128, 64],
"metallicFactor": 1,
"normalDetailMapUseUV": 1,
"normalMap": "/vehicles/vivace/ardente/ardente_main_nm.normal.png"
}
This layer is fully paintable and should generally not use an opacity mask.
The details layer goes on top of the paint layer and is masked with an opacity map. It contains parts that should not be affected by the player paint color.
Typical maps:
Example:
{
"ambientOcclusionMap": "/vehicles/vivace/ardente/ardente_main_ao.data.png",
"baseColorMap": "/vehicles/vivace/ardente/ardente_main_b.color.png",
"clearCoatFactor": 1,
"metallicFactor": 1,
"metallicMap": "/vehicles/vivace/ardente/ardente_main_m.data.png",
"normalMap": "/vehicles/vivace/ardente/ardente_main_nm.normal.png",
"opacityMap": "/vehicles/vivace/ardente/ardente_main_o.data.png",
"roughnessMap": "/vehicles/vivace/ardente/ardente_main_r.data.png"
}
The opacity map defines where this layer appears:
Masking the base paint layer can cause bright edges or seams due to texture filtering and mipmaps. This becomes especially visible on lower texture quality settings, where smaller mip levels are used.
The recommended setup avoids this by keeping the paint layer continuous and only masking the detail layers above it.
Old setup with white edge bleeding
New setup with unmasked paint layer
"ardente_main": {
"name": "ardente_main",
"mapTo": "ardente_main",
"class": "Material",
"Stages": [
{
"ambientOcclusionMap": "/vehicles/vivace/ardente/ardente_main_ao.data.png",
"clearCoatFactor": 1,
"clearCoatMap": "/vehicles/vivace/ardente/ardente_main_cc.data.png",
"colorPaletteMap": "/vehicles/vivace/ardente/ardente_main_p.color.png",
"detailNormalMap": "/vehicles/common/orange_peel_n.normal.png",
"detailNormalMapStrength": 0.3,
"detailScale": [128, 64],
"metallicFactor": 1,
"normalDetailMapUseUV": 1,
"normalMap": "/vehicles/vivace/ardente/ardente_main_nm.normal.png"
},
{
"ambientOcclusionMap": "/vehicles/vivace/ardente/ardente_main_ao.data.png",
"baseColorMap": "/vehicles/vivace/ardente/ardente_main_b.color.png",
"clearCoatFactor": 1,
"metallicFactor": 1,
"metallicMap": "/vehicles/vivace/ardente/ardente_main_m.data.png",
"normalMap": "/vehicles/vivace/ardente/ardente_main_nm.normal.png",
"opacityMap": "/vehicles/vivace/ardente/ardente_main_o.data.png",
"roughnessMap": "/vehicles/vivace/ardente/ardente_main_r.data.png"
},
{},
{}
],
"activeLayers": 2,
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
Color palette maps define which paint slot affects which area.
See Introduction to Paint Materials for how color palette maps and instance colors work with vehicle paints.
Common channels:
| Channel | Paint slot |
|---|---|
| Red | Paint 1 |
| Green | Paint 2 |
| Blue | Paint 3 |
For most single-color paint materials, use a common null red palette texture:
/vehicles/common/nullcolormaskR.color.png
Use custom palette maps when the vehicle needs factory two-tone or three-tone paint behavior.
Vehicle paint can use a shared detail normal map for orange peel:
See Common Detail Maps for reusable paint, interior, fabric, and carbon-fiber detail setups.
"detailNormalMap": "/vehicles/common/orange_peel_n.normal.png",
"detailNormalMapStrength": 0.3,
"detailScale": [128, 64],
"normalDetailMapUseUV": 1
This adds subtle surface imperfection visible in highlights and reflections.
Keep the strength low. Orange peel should not look like dents or heavy damage.
Layers 3 and 4 can be used for optional material details, such as:
Example from a carbon fiber material:
{
"baseColorFactor": [0.318, 0.318, 0.318, 1],
"clearCoatFactor": 0.926,
"clearCoatRoughnessFactor": 0.047,
"detailMap": "/vehicles/common/carbonfiber_d.color.png",
"detailMapUseUV": 1,
"detailNormalMap": "/vehicles/common/carbonfiber_n.normal.png",
"detailNormalMapStrength": 0.77,
"detailScale": [80, 80],
"normalDetailMapUseUV": 1,
"roughnessFactor": 0.09
}
Use a standard opaque material for fixed non-colorable parts such as mechanical components, engine bay parts, suspension components, interior plastics, or trim.
"example_mechanical": {
"name": "example_mechanical",
"mapTo": "example_mechanical",
"class": "Material",
"Stages": [
{
"ambientOcclusionMap": "/vehicles/example/example_mechanical_ao.data.png",
"baseColorMap": "/vehicles/example/example_mechanical_b.color.png",
"metallicFactor": 1,
"metallicMap": "/vehicles/example/example_mechanical_m.data.png",
"normalMap": "/vehicles/example/example_mechanical_nm.normal.png",
"roughnessMap": "/vehicles/example/example_mechanical_r.data.png"
},
{},
{},
{}
],
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
| Map | Notes |
|---|---|
| Base Color | Should not contain baked lighting or strong shadows. |
| Metallic | Usually black or white. Avoid gray values unless physically justified. |
| Roughness | Controls reflection sharpness. |
| Normal | Adds surface relief. |
| Ambient Occlusion | Darkens areas where indirect light is blocked. |
A simple material can be made without texture maps by using factors only:
"example_single_color_material": {
"name": "example_single_color_material",
"mapTo": "example_single_color_material",
"class": "Material",
"Stages": [
{
"baseColorFactor": [0.11, 0.16, 0.20, 1],
"roughnessFactor": 0.4,
"metallicFactor": 0
},
{},
{},
{}
],
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
This is useful for quick prototypes, but textured materials usually look better.
Transparent materials are commonly used for glass and light lenses.
"example_glass": {
"name": "example_glass",
"mapTo": "example_glass",
"class": "Material",
"Stages": [
{
"baseColorMap": "/vehicles/example/example_glass_b.color.png",
"metallicFactor": 0.75,
"opacityMap": "/vehicles/example/example_glass_o.data.png",
"roughnessFactor": 0
},
{},
{},
{}
],
"castShadows": false,
"dynamicCubemap": true,
"translucent": true,
"translucentBlendOp": "PreMulAlpha",
"translucentRecvShadows": true,
"version": 1.5
}
| Field | Description |
|---|---|
| translucent | Enables transparency. |
| translucentBlendOp | Use PreMulAlpha for glass. |
| opacityMap | Controls transparency. |
| castShadows | Usually disabled for vehicle glass. |
| translucentRecvShadows | Allows transparent surfaces to receive shadows. |
The interior side of glass often uses a separate material with reflections set to black cubemap. This prevents the inside of the glass from reflecting the road or exterior environment unrealistically. Make sure to enable shadow receiving to avoid interior glass being too bright vs rest of interior.
"example_glass_int": {
"name": "example_glass_int",
"mapTo": "example_glass_int",
"class": "Material",
"Stages": [
{
"baseColorMap": "/vehicles/example/example_glass_b.color.png",
"metallicFactor": 0.75,
"opacityFactor": 0.061999999,
"roughnessFactor": 0
},
{},
{},
{}
],
"castShadows": false,
"cubemap": "BlackSkyCubemap",
"translucent": true,
"translucentBlendOp": "PreMulAlpha",
"translucentRecvShadows": true,
"version": 1.5
}
Damaged glass usually uses separate base color, opacity, roughness, and normal maps.
"example_glass_dmg": {
"name": "example_glass_dmg",
"mapTo": "example_glass_dmg",
"class": "Material",
"Stages": [
{
"baseColorMap": "/vehicles/example/example_glass_dmg_b.color.png",
"metallicFactor": 0.75,
"normalMap": "/vehicles/example/example_glass_dmg_nm.normal.png",
"opacityMap": "/vehicles/example/example_glass_dmg_o.data.png",
"roughnessFactor": 0
},
{},
{},
{}
],
"alphaRef": 20,
"alphaTest": true,
"castShadows": false,
"dynamicCubemap": true,
"translucent": true,
"translucentBlendOp": "PreMulAlpha",
"translucentRecvShadows": true,
"version": 1.5
}
The opacity map should contain holes and crack transparency. The normal map should contain crack relief.
Emissive materials are used for lights, gauges, screens, indicators, and illuminated controls.
Modern emissive materials should use nits for brightness instead of overbright color values.
For vehicle light switching and fading, see Glow Maps and Smooth lighting emissive materials and light props .
"example_lights_on": {
"name": "example_lights_on",
"mapTo": "example_lights_on",
"class": "Material",
"Stages": [
{
"ambientOcclusionMap": "/vehicles/example/example_lights_ao.data.png",
"baseColorMap": "/vehicles/example/example_lights_b.color.png",
"emissiveFactor": [1, 1, 1],
"emissiveIntensityNits": 15000,
"emissiveMap": "/vehicles/example/example_lights_g.color.png",
"metallicFactor": 1,
"metallicMap": "/vehicles/example/example_lights_m.data.png",
"normalMap": "/vehicles/example/example_lights_nm.normal.png",
"roughnessMap": "/vehicles/example/example_lights_r.data.png"
},
{},
{},
{}
],
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
emissiveIntensityNits for brightness.Example:
1000 nits material:
white pixel = 1000 nits
50% gray pixel = ~500 nits
black pixel = 0 nits
Retro reflectivity is used for surfaces that should become bright when viewed near a local light source, such as road signs in headlights, license plates, reflective decals, and reflector lenses. It is a version: 1.5 layer property and is separate from cubemap reflections.
"example_reflector": {
"name": "example_reflector",
"mapTo": "example_reflector",
"class": "Material",
"Stages": [
{
"baseColorMap": "/vehicles/example/example_reflector_b.color.png",
"metallicFactor": 1,
"normalMap": "/vehicles/example/example_reflector_nm.normal.png",
"retroreflectivity": 1,
"retroreflectiveColor": [1, 1, 1],
"roughnessMap": "/vehicles/example/example_reflector_r.data.png"
},
{},
{},
{}
],
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
retroreflectivity between 0 and 1. Road signs commonly use 1; license plates can use lower values such as 0.5.retroreflectiveColor, or use [0, 0, 0], when the whole base color should retroreflect.retroreflectiveColor to limit the effect to matching base-color areas. [1, 1, 1] is useful for white sheeting, while red or yellow values are useful for colored reflectors.reflectivityMap for this. That field belongs to the old cubemap reflection workflow, not headlight-style retro reflectivity.Decal-style materials are simple meshes with transparency, often used for badges, lettering, labels, stickers, or trim. Should use Z-Write to not float above surface where possible.
"example_lettering": {
"name": "example_lettering",
"mapTo": "example_lettering",
"class": "Material",
"Stages": [
{
"ambientOcclusionMap": "/vehicles/example/example_lettering_ao.data.png",
"baseColorMap": "/vehicles/example/example_lettering_b.color.png",
"metallicFactor": 1,
"metallicMap": "/vehicles/example/example_lettering_m.data.png",
"normalMap": "/vehicles/example/example_lettering_nm.normal.png",
"opacityMap": "/vehicles/example/example_lettering_o.data.png",
"roughnessMap": "/vehicles/example/example_lettering_r.data.png"
},
{},
{},
{}
],
"dynamicCubemap": true,
"translucent": true,
"translucentRecvShadows": true,
"translucentZWrite": true,
"version": 1.5
}
Dummy materials were empty material definitions used when another system, such as glowmaps, replaces the material at runtime.
"example_dummy": {
"name": "example_dummy",
"mapTo": "example_dummy",
"class": "Material",
"Stages": [{}, {}, {}, {}]
}
Dynamic texture materials are used when the game needs to replace some textures at runtime, for example dynamic vehicle liveries.
See Skins for the JBeam setup and Vehicle Skin System for skin material naming and configuration.
Dynamic texture materials usually use the same setup as the base material, but with selected textures replaced by dynamic texture references.
Example:
"example_main.skin.dynamicTextures": {
"name": "example_main.skin.dynamicTextures",
"mapTo": "example_main.skin.dynamicTextures",
"class": "Material",
"Stages": [
{
"ambientOcclusionMap": "/vehicles/example/example_main_ao.data.png",
"baseColorMap": "/vehicles/example/example_main_b.color.png",
"metallicFactor": 1,
"metallicMap": "/vehicles/example/example_main_m.data.png",
"normalMap": "/vehicles/example/example_main_nm.normal.png",
"roughnessMap": "/vehicles/example/example_main_r.data.png"
},
{
"ambientOcclusionMap": "/vehicles/example/example_main_ao.data.png",
"baseColorMap": "@DynamicTextureBaseColor",
"colorPaletteMap": "@DynamicTextureColorPalette",
"colorPaletteMapUseUV": 1,
"clearCoatFactor": 1,
"clearCoatMap": "/vehicles/example/example_main_cc.data.png",
"instanceBaseColor": true,
"metallicFactor": 1,
"normalMap": "/vehicles/example/example_main_nm.normal.png",
"opacityMap": "/vehicles/example/example_main_o.data.png"
},
{},
{}
],
"activeLayers": 2,
"dynamicCubemap": true,
"materialTag0": "beamng",
"materialTag1": "vehicle",
"version": 1.5
}
Common dynamic texture references include:
@DynamicTextureBaseColor
@DynamicTextureColorPalette
@DynamicTextureMetallic
@DynamicTextureRoughness
version: 1.5 for modern PBR materials..color.png, .normal.png, and .data.png suffixes.Usually caused by masking the paint/base layer. Use an unmasked paint layer and place masked details above it.
Make sure metallicFactor is set to 1.
Check that the paint layer uses instance color / palette setup correctly.
Do not use overbright emissive colors. Use emissiveIntensityNits.
Use retroreflectivity on the material layer. Cubemap reflection settings and legacy reflectivityMap fields do not create a headlight-style retroreflective response.
Reduce detailScale, reduce detail strength, or check mipmaps/cooked DDS output.
Check mipmaps, texture padding, UVs, and whether layers are masked correctly.
Was this article helpful?