> For the complete documentation index, see [llms.txt](https://ccxl-tattoo-toolkit.gitbook.io/main/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ccxl-tattoo-toolkit.gitbook.io/main/tutorial/customizing-the-meshes.md).

# Customizing the meshes

With our character creator options configured, we are now ready to start creating our custom tattoo.

> *Since I am demonstrating with the chest tattoo template, we will also be looking at the&#x20;*<kbd>*.morphtarget*</kbd>*&#x20;file.*

Now would be a good time to start importing our custom textures into our WolvenKit project. Having our textures ready will help us visualize how they will look once projected onto the mesh, and help us confirm that our meshes are configured properly.

## .xbm Textures

Go ahead and export the template <kbd>*.xbm*</kbd> files:

> *If you closed the import/export tools earlier, you can bring them back now*

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FqFs0o8EzUvEhIjGPOr0O%2FScreenshot%202025-03-14%20193657.png?alt=media&amp;token=cccad2a8-e1e2-4260-bec0-e27e846d409d" alt=""><figcaption><p>Check both .xbm files and click "Export Selected"</p></figcaption></figure>

Once you've exported the textures, open them in your preferred image editor (they will be located in the "raw" folder inside your project's "source" folder):

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2Fd4ytiuvNZBEhO2W5PeD8%2FScreenshot%202025-03-14%20194238.png?alt=media&amp;token=7f76b613-abd4-45f3-a6a3-728b48f529a2" alt=""><figcaption><p>I use paint.NET because I'm hardcore</p></figcaption></figure>

The template project came with UV maps, which can be found in *source > UV Maps*. Use those to help when creating your texture:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FHf7msOMgMNgH3fMZ8f8b%2FScreenshot%202025-03-14%20194636.png?alt=media&amp;token=6b98f9a2-6334-42c3-80a6-f00d52e92d4f" alt=""><figcaption></figcaption></figure>

Once you've created your textures, save them over the original templates, and import them back into WolvenKit:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2Fco9EXx994VMeo9cmNO2P%2FScreenshot%202025-03-14%20195130.png?alt=media&amp;token=79da22f2-abb0-4d48-829f-1b93c36d29cb" alt=""><figcaption></figcaption></figure>

Now that we have our custom textures, we can begin customizing our <kbd>*.mesh*</kbd> files.

## Mesh Files

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2F40O5uXyCo2XJFH1tyLzG%2FScreenshot%202025-03-14%20200054.png?alt=media&amp;token=0e75476c-3f5b-4748-a1c1-e11f54f5497b" alt=""><figcaption></figcaption></figure>

Our mesh contains a single appearance, which is referenced by our <kbd>*.app*</kbd> file when we select a tattoo in the game.&#x20;

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FtRbFaUkwPcAZNI2qboSb%2FScreenshot%202025-03-14%20211355.png?alt=media&amp;token=51d4efa3-53f4-4270-8f26-a447d563ae88" alt=""><figcaption></figcaption></figure>

<kbd>chunkMaterials</kbd> are the materials the appearance will use that make up our tattoo. The name of our submesh must point to a <kbd>materialInstance</kbd>.

### Materials

Let's look at our <kbd>materialEntries</kbd>:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FhHRvCVmJo0O3coKNqld4%2FScreenshot%202025-03-14%20212511.png?alt=media&amp;token=95965693-0203-4c68-b6fb-594234de341c" alt=""><figcaption></figcaption></figure>

We have one material entry for our tattoo. It is a local instance because we are defining it in the <kbd>localMaterialBuffer</kbd> :

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2F3ZYq4TuSnTCfxyuWWAig%2FScreenshot%202025-03-14%20204821.png?alt=media&amp;token=3688db19-59d5-425f-9109-4f5894223615" alt=""><figcaption></figcaption></figure>

* <kbd>CMaterialInstance</kbd> is the definition of our material in <kbd>materialEntries</kbd>&#x20;
* <kbd>baseMaterial</kbd> is a resource path to our <kbd>*.mi*</kbd> file. This is what turns our <kbd>*.xbm*</kbd> into an actual texture. We won't be modifying the <kbd>*.mi*</kbd> in the tutorial, but you *can* rename it. Be sure to update the path if you do.
* <kbd>Value</kbd> points to our <kbd>*.xbm*</kbd> file, and <kbd>Key</kbd> determines *how to use it.* Read more about it [*here.*](https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/materials/shaders/shader-docs)

All of these options have been configured for you in the template and will work out-of-the-box with our custom *.xbm* files. To see this in action, toggle the "mesh preview" tab in the mesh file:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FqPuKoiINL04OiWhegape%2FScreenshot%202025-03-14%20214558.png?alt=media&amp;token=d6dbeeb3-96ec-4154-a2d3-eeafc3da2b46" alt=""><figcaption></figcaption></figure>

Here you will see a blank version of the tattoo mesh. If you click "Generate Materials" it will render our texture onto the mesh:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FP0P2ec7Gt6GtIPYVVztd%2FScreenshot%202025-03-14%20214756.png?alt=media&amp;token=4be0a7e0-dbe3-49dc-a101-849d6134dffe" alt=""><figcaption></figcaption></figure>

If that works, then you're ready to <kbd>Ctrl + S</kbd> and repeat for opposite gender.

***

## Morphtarget

> *If you're not working on a chest tattoo, you can* [*skip this step.*](/main/tutorial/the-.app-file.md)

In vanilla *Cyberpunk 2077,* Female V can manipulate her breast size between three different options by visiting a ripper. Instead of configuring a .mesh for each breast size, we use a .morphtarget (essentially a mesh, but with the ability to shapeshift, so-to-speak). Our player\_woman\_average chest tattoo *mesh* is actually just a reserve for our tattoo appearances, and provides the default mesh for the morphtarget.&#x20;

> *If you haven't already, you really need to check out* [*the wiki.*](https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/3d-modelling/morphtargets)

The only thing for us to do in this project is ensure that the information in our .morphtarget file is accurate:

<figure><img src="https://181024330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDecuWTGPSBrawvB4cIcq%2Fuploads%2FhAUViCjShE8rxgv5LSSW%2FScreenshot%202025-03-14%20220753.png?alt=media&amp;token=f51384d7-b6ca-4a6a-853c-a24d25046811" alt=""><figcaption></figcaption></figure>

* Is baseMesh path pointing to our femV mesh?
* Is baseMeshAppearance pointing to the tattoo appearance in our femV mesh?

If you answered yes to both of these questions, then you are ready to carry on!
