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”.
"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
},
}