How (and why) to split up meshes
Published: January 06 2024 by
In Cyberpunk, you can assign one material per submesh.
Material assignment is done in the .mesh file's appearances
array via chunkMaterials.
The chunkMaterial entries correspond to material entry names.
You can see which submesh is wich in the #mesh-preview tab.
At first, this seems a bit counter-intuitive, but keep in mind that Cyberpunk's entire material system is geared for flexibility. By altering a single submesh material, a black Arasaka helmet with red lights and a Hello Kitty hologram can become a black Militech helmet with red lights and a Hello Kitty hologram!
To learn how materials work, check the parent page: 3d objects: .mesh files
In Blender, our helmet would look like this:
You can create more submeshes by splitting off parts of a mesh, and incrementing the submesh index.
You want red and blue glowing tubes on the example helmet.
Split parts of submesh_04_LOD_1
into submesh_04_LOD_1.001
Re-name submesh_04_LOD_1.001
to submesh_05_LOD_1
Export the new geometry and import it into Wolvenkit
Your mesh will now have six submeshes instead of its previous five
For each appearance that you have defined, add a chunkMaterial entry. If you skip this step, the new submesh will have no material assigned, and be invisible.
To hide parts of the body, you can also use ArchiveXL tags. See #base-game-tags-and-archivexl-tags-visual-guides and the corresponding wiki page for more information.
Imagine you want to hide the helmet's glowing parts (because you are being stealthy). You could just define another appearance where the glowing tubes are turned off — but you would have to add one for every variant you make. arasaka_hellokitty_glow
and arasaka_hellokitty_noglow
, the same for Militech, NightCorps and NCPD… ain't nobody got time for this.
That's why CDPR came up with chunkmasks.
The mesh is loaded via component in an .ent or .app file. Here, you will find the chunkMask
attribute, which looks like this:
The numbers in the dropdown correspond to the submeshes: unchecking an entry will hide it, regardless of the assigned materials.
You can only use chunkMasks to hide submeshes. If you want to conditionally show them, you have to use custom ArchiveXL tags (see ArchiveXL: Tags -> #adding-custom-tags)
To learn about hiding other items with chunkmasks, check out #partsoverrides-hiding-chunks
You have two options, (for NPCs, including V) and RedHotTools.
You can download Appearance Creator Mod on Nexus. It requires Codeware, Cyber Engine Tweaks, and all of their requirements.
With ACM installed, make sure that the target is under the cursor in the middle of the screen (you can use photo mode to look at V). Then, find the correct mesh/component in the UI and click on the correct button:
Find RedHotTools -> #installation-guide for instructions on how to install this.
See #inspecting-chunkmasks for a guide.
If a submesh does not end in LOD1, that means it's intended for lower resolutions (for example, if an object is far away).
Under The whole world: .streamingsector, you can find an explanation of how cyberpunk handles world sector Level of Detail (LOD).
By default, Wolvenkit these low-resolution meshes on export, since you don't normally want them for modded characters or items.