Skin System

The skin system allows for easy and seamless changes of vehicle textures within the game.

This is most commonly used to allow the change between different paintjobs or interior colors.

They are defined using two elements, the first one is a jbeamed part that will call the skin, and the second one is a new material defined as a skin.

This page describes more the technical elements of the skin system so you can use it for things like interior colors and others.

See this tutorial if you just want to learn how to create a new skin for a vanilla car.


Jbeam

The definition of a skin’s uses the slotType, and the skin identifier.

Keep in mind that with the exception of “paint_design”, the slotType of a skin needs to start with “skin_”, like “skin_interior” or “skin_gauges”.

Every vanilla car has a “paint_design” slot already included. This slot should be used when making alternative paintjobs.
"pigeon_skin_birdabduction": {
    "information":{
        "authors":"BeamNG",
        "name":"Bird Response Livery",
        "value":1500,
    },
    "slotType" : "paint_design",
    "globalSkin" : "birdabduction",
},

The “globalSkin” or “skinName” value will be used to define which skin should be used. Both can be used interchangeably.

Material

The material is defined like a standard material, usually starting with a copy of the base material and changing the parts that will be affected by the skin, usually the colorPalette and baseColorMap.

The main change is the “name” and “mapTo” parameters. For skins they should be structured as “materialName.skinType.skinName”

Material name refers to the name of the material on the model that will be replaced.

SkinType refers to the slotType of the jbeam that calls this skin. The only exception to this is the “paint_design” slot, which gets mapped to “skin”.

SkinName needs to match the value set inside the “globalSkin” or “skinName” value in the jbeam.

If we take the following example. The material that gets replaced is the main pessima material. The skinType is “skin”, meaning it uses the “paint_design” slot. The skinName is “bodycolored”.

{
  "pessima.skin.bodycolored" : {
    "name" : "pessima.skin.bodycolored",
    "mapTo" : "pessima.skin.bodycolored",
    "class" : "Material",
    "persistentId" : "e2c54f56-d710-4eb0-bc18-1dad8c9a5910",
    "Stages": [
      {
        "ambientOcclusionMap": "/vehicles/pessima/pessima_main_ao.data.png",
        "baseColorMap": "/vehicles/pessima/pessima_main_b.color.png",
        "metallicFactor": 1,
        "metallicMap": "/vehicles/pessima/pessima_main_m.data.png",
        "normalMap": "vehicles/pessima/pessima_n.dds",
        "roughnessMap": "/vehicles/pessima/pessima_main_r.data.png",
        "useAnisotropic": true
      },
      {
        "ambientOcclusionMap": "/vehicles/pessima/pessima_main_ao.data.png",
        "clearCoatFactor": 1,
        "clearCoatMap": "/vehicles/pessima/pessima_main_cc.data.png",
        "clearCoatRoughnessFactor": 1,
        "colorPaletteMap": "/vehicles/pessima/pessima_main_p.color.png",
        "colorPaletteMapUseUV": 1,
        "instanceDiffuse": true,
        "metallicFactor": 1,
        "normalMap": "/vehicles/pessima/pessima_n.dds",
        "opacityMap": "/vehicles/pessima/pessima_main_alt_c.data.png",
        "useAnisotropic": true
      },
      {},
      {}
    ],
    "activeLayers": 2,
    "dynamicCubemap": true,
    "materialTag0": "beamng",
    "materialTag1": "vehicle",
    "order_simset": 0,
    "version": 1.5
  },
}
Last modified: August 17, 2023
On this page:

Any further questions?

Join our discord
Our documentation is currently incomplete and undergoing active development. If you have any questions or feedback, please visit this forum thread.