Models and Meshes
Overview page on meshes
Type Extension
.mesh
Definition
In the context of Cyberpunk, a mesh is an entity that holds the following information:
the 3d object (as a number of submeshes)
movement and deform information (rigging for the rig/armature, and weights)
Materials (as in which part of the 3d object will look how)
Morphtargets
Materials
This is how to determine which parts of the mesh have which material. For a :

ChunkMaterials
You assign materials based on the "chunks" (the individual submeshes) inside a mesh. Open the mesh file in Wolvenkit and open the "appearances" array, then make sure that each of your submeshes has an entry inside the array.

Material definition
Materials are defined in the array materialEntries
inside your mesh:

index
numerical index of corresponding material in target list (as defined by isLocalInstance
)
isLocalInstance
Selects the material target list.
True: local material in localMaterialBuffer.materials
or preloadLocalMaterialInstances
False: material reference inexternalMaterials
or preloadExternalMaterials
name
unique name of material, used to select the material via chunkMaterial
Preload… what?
Many of CDPR's early meshes use preloadLocalMaterialInstances
instead of localMaterialBuffer.materials
. As far as we are concerned, you can use the two interchangeably, but:
If you are using a mix of local and external materials, you must use the corresponding list:
localMaterialBuffer.materials
externalMaterials
preloadLocalMaterialInstances
preloadExternalMaterials
If you do not, then the materials outside of preload
… will appear as transparent the first 1-2 times you trigger your item's appearance.
MaterialInstance: The local material
The materials themselves are inside the array localMaterialBuffer.materials
(or preloadLocalMaterials
in case of older meshes).
You can't go wrong by using those. However, if you don't have any properties that are unique to your mesh or appearance (for example a custom normal map), you might consider creating and using an external material instead.
A material instance looks like this:

Material reference: reusing materials
A relative path to an external material, usually encapsulated in a .mi file. Use this if you don't need to add extra properties.
Import/Export: _doubled
Normally, a mesh's backfaces are invisible/transparent - you aren't supposed to see a mesh from below, so it doesn't matter. But some, like hair and eyelashes, are different, and need to be doubled.
When importing via Noesis, you need to do this by hand: duplicate all the vertices in the mesh, and flip the normals. When importing via WolvenKit, it will automagically do that for you if a mesh name ends with _doubled.
The suffix also indicates that Wolvenkit de-duplicated a mesh on export!

Last updated