Common detail maps are reusable tiled textures used to add small-scale surface detail to materials without baking that detail into large unique texture maps. They are especially useful on vehicles, where many materials need repeated fine patterns such as leather grain, carpet fibers, headliner fabric, carbon fiber, orange peel paint, or plastic texture.
For general vehicle material setup and examples, see Vehicle Material Examples .
Instead of creating a unique high-resolution normal map for every surface, a material can use a shared detail texture from paths such as:
/vehicles/common/generic_mat_tex/
/vehicles/common/
This keeps materials consistent, saves texture memory, and makes it easier to reuse high-quality surface detail across vehicles.
Detail maps are usually used for high-frequency surface detail, such as:
They work together with the main material textures. The main textures define the large-scale look of the object, while detail maps add fine repeating surface information.
For example, the Ardente interior uses unique baked textures for the interior layout, AO, roughness, metallic, and main normal information, but uses common detail normal maps for the material surface finish.
Common detail maps are useful because they:
A small tiled detail normal can often provide better close-up results than increasing the resolution of a unique normal map.
Common fields used by detail maps:
| Field | Description |
|---|---|
| detailMap | Tiled detail base color texture. Adds small-scale color variation on top of the base color. |
| detailNormalMap | Tiled detail normal texture. Adds repeated fine surface relief such as leather grain, fabric, carpet, carbon fiber, or paint orange peel. |
| detailMetallicMap | Tiled detail metallic texture. Adds small-scale metallic variation. |
| detailRoughnessMap | Tiled detail roughness texture. Adds small-scale variation to reflection sharpness and specular highlights. |
| detailOpacityMap | Tiled detail opacity texture. Adds small-scale opacity or mask variation. |
| detailAmbientOcclusionMap | Tiled detail ambient occlusion texture. Adds small-scale occlusion detail. |
| detailScale | Controls how often detail maps repeat. Higher values make the pattern smaller and more frequent. |
| detailMapUseUV | Selects which UV layer is used by detail color maps. |
| normalDetailMapUseUV | Selects which UV layer is used by detail normal maps. |
| metallicDetailMapUseUV | Selects which UV layer is used by detail metallic maps. |
| roughnessDetailMapUseUV | Selects which UV layer is used by detail roughness maps. |
| opacityDetailMapUseUV | Selects which UV layer is used by detail opacity maps. |
| detailNormalMapStrength | Controls how strongly the detail normal affects the final surface normal. |
| detailMetallicMapStrength | Controls the influence of the detail metallic map. |
| detailRoughnessMapStrength | Controls the influence of the detail roughness map. |
| detailOpacityMapStrength | Controls the influence of the detail opacity map. |
| detailAmbientOcclusionMapStrength | Controls the influence of the detail ambient occlusion map. |
| opacityMap | Used on layered materials to mask where a layer appears. White shows the layer; black hides it. |
detailScale controls the tiling of the detail texture.
Example:
"detailScale": [45, 45]
This means the detail texture repeats many times across the selected UV space. A higher value creates smaller, denser detail. A lower value creates larger, more visible patterns.
Use scale carefully:
Detail maps can use either the main UV set or a secondary UV set, depending on the material setup.
Example from Ardente paint:
"detailNormalMap": "/vehicles/common/orange_peel_n.normal.png",
"detailScale": [128, 64],
"normalDetailMapUseUV": 1
Using a dedicated UV layer can help keep detail scale consistent across body panels, decals, skins, or other layered materials.
The Ardente interior is a good example of common detail maps used in a layered material.
The material uses several layers:
Simplified example:
"ardente_interior": {
"activeLayers": 4,
"Stages": [
{
"baseColorMap": "/vehicles/vivace/ardente/ardente_interior_b.color.png",
"normalMap": "/vehicles/vivace/ardente/ardente_interior_nm.normal.png",
"roughnessMap": "/vehicles/vivace/ardente/ardente_interior_r.data.png",
"metallicMap": "/vehicles/vivace/ardente/ardente_interior_m.data.png",
"ambientOcclusionMap": "/vehicles/vivace/ardente/ardente_interior_ao.data.png"
},
{
"baseColorFactor": [0.140854001, 0.140854001, 0.140854001, 1],
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_leather_grain_nm.normal.png",
"detailScale": [45, 45],
"opacityMap": "/vehicles/vivace/ardente/ardente_interior_leather_o.data.png",
"roughnessFactor": 0.934000015
},
{
"baseColorFactor": [0.696434975, 0.647749007, 0.568789005, 1],
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_headliner_nm.normal.png",
"detailNormalMapStrength": 1.55999994,
"detailScale": [35, 35],
"opacityMap": "/vehicles/vivace/ardente/ardente_interior_headliner_o.data.png"
},
{
"baseColorFactor": [0.123671003, 0.123671003, 0.123671003, 1],
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_carpet_nm.normal.png",
"detailNormalMapStrength": 1.5,
"detailScale": [30, 30],
"opacityMap": "/vehicles/vivace/ardente/ardente_interior_carpet_o.data.png",
"roughnessFactor": 0.907000005
}
]
}
In this setup:
Leather areas use:
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_leather_grain_nm.normal.png",
"detailScale": [45, 45],
"opacityMap": "/vehicles/vivace/ardente/ardente_interior_leather_o.data.png"
The opacity map selects leather regions, while the shared leather grain normal provides fine surface detail. This allows the same leather texture to be reused across different vehicles and skins.
Skins can then change leather color without needing a new leather normal map.
Example from an interior skin:
"baseColorFactor": [0.392870009, 0, 0, 1],
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_leather_nm.normal.png",
"detailScale": [50, 50]
This changes the leather to red, while keeping the same common leather detail.
Headliner areas use a different common detail normal:
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_headliner_nm.normal.png",
"detailNormalMapStrength": 1.55999994,
"detailScale": [35, 35]
The stronger detail normal helps the fabric texture remain visible on a soft, rough material.
Headliner Detail Normal Texture
Carpet uses:
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_carpet_nm.normal.png",
"detailNormalMapStrength": 1.5,
"detailScale": [30, 30],
"roughnessFactor": 0.907000005
Carpet is usually very rough, so a high roughness value and stronger normal detail help create a soft, fibrous look.
The Ardente main paint material uses a shared orange peel normal map:
"detailNormalMap": "/vehicles/common/orange_peel_n.normal.png",
"detailNormalMapStrength": 0.3,
"detailScale": [128, 64],
"normalDetailMapUseUV": 1
This adds subtle paint surface imperfection without modifying the main body normal map.
For car paint, detail normal strength should usually be low. The effect should be visible in reflections and highlights, but not look like heavy surface damage.
The Ardente carbon material uses both a detail color map and a detail normal map:
"detailMap": "/vehicles/common/carbonfiber_d.color.png",
"detailNormalMap": "/vehicles/common/carbonfiber_n.normal.png",
"detailNormalMapStrength": 0.769999981,
"detailScale": [80, 80],
"detailMapUseUV": 1,
"normalDetailMapUseUV": 1
This is useful for carbon fiber because the repeating weave pattern affects both color and surface normal.
Some materials use detail maps only for normal detail.
Example:
"ardente_grille_detail": {
"Stages": [
{
"detailNormalMap": "/vehicles/vivace/ardente/ardente_grille_detail_nm.normal.png",
"detailScale": [37, 37],
"roughnessFactor": 0.177000001
}
]
}
This adds fine grille texture without requiring a large unique normal map for every repeated detail.
Skins can override colors, roughness, metallic values, opacity maps, or layer setup while keeping the same common detail maps.
This is useful because:
Example:
"ardente_seats.skin_interior_ardente.interior_red": {
"Stages": [
{},
{
"baseColorFactor": [0.392870009, 0, 0, 1],
"detailNormalMap": "/vehicles/common/generic_mat_tex/detail_leather_nm.normal.png",
"detailScale": [50, 50]
}
]
}
Only the color changes. The detail normal remains shared.
Some common textures are also used as standalone material assets, not only as detailNormalMap.
For example, Ardente stitches use common stitch textures:
"ardente_stitches": {
"Stages": [
{
"ambientOcclusionMap": "/vehicles/common/generic_mat_tex/detail_stitches_ao.data.png",
"normalMap": "/vehicles/common/generic_mat_tex/detail_stitches_nm.normal.png",
"opacityMap": "/vehicles/common/generic_mat_tex/detail_stitches_o.data.png",
"normalMapStrength": 6
}
],
"alphaTest": true
}
In this case, the stitches are their own material with opacity and normal maps, rather than a detail layer on another material.
detailScale to match real material scale.Increase detailScale.
Lower detailScale or reduce detailNormalMapStrength.
Check UVs and whether the material is using the correct UV layer.
Check that:
activeLayers includes the layer.This is expected. Detail maps are usually shared and remain the same across skins. Only the material color, masks, or factors may change.
Common detail maps provide reusable, tiled fine detail for vehicle materials. In the Ardente, they are used for leather, fabric, carpet, headliner, carbon fiber, grille detail, paint orange peel, and stitches.
They allow materials and skins to share high-quality surface detail while keeping unique textures smaller, cleaner, and easier to maintain.
Was this article helpful?