Character Breakdown

Mateusz Golko


Mateusz Golko

3D Artist


My name is Mateusz, and I have been working as a 3D artist for 4 years. I am experienced in almost every aspect of graphics, from characters to environments and level design.
However, characters are my main passion, which I devote the most attention and involvement to. The portrayed character was created under the watchful eye of Marcin Klicki, Principal Artist at CD Projekt.


  • PureRef for references
  • ZBrush for the creation of high-poly models
  • Krita for transforming ornaments into alphas and making map corrections
  • Maya for hard surface modeling, retopology, and UVs
  • Marmoset Toolbag for baking
  • Substance Painter for texturing
  • Unreal Engine for rendering


From the very beginning, I planned to focus on individual assets. I intended to depict accurate details, damages, textures, and elements of clothing to achieve photorealism in the final render.

I wanted to combine individual elements into a cohesive whole so that the viewer would have the impression of a complete model. I needed plenty of references and inspiration for both individual assets and characters. The research took me almost two weeks. Rushing at this stage wasn’t recommended. The more materials we gather, the easier it will be to choose the ones I will use for our character’s design.

I have been looking for inspiration on museum websites, ArtStation, Pinterest, Instagram, and Google.


When creating specific items like armor, swords, and shields, I recommend looking for historical examples or people/companies that specialize in making specific equipment. I have divided my PureRef into individual categories to help plan my work and make it easier to find my way around later.

From the grouped references, I have selected assets that will be used in specific places on the character. This helps me imagine the final result.


Of course, after selecting the assets for the character, I continued to review the references to avoid being limited to the photos I had collected.
It’s not a secret that during the course of the project, I replaced a few selected models.

High Poly

I sculpted my character in an A-pose to make it easier to pose later. I mainly used ZBrush. Some elements like hard surfaces were blocked in Maya, and clothing was created in Marvelous Designer. When working between software applications, it is important to choose the right scale for the character.

I blocked my character at a height of 170-180 cm.

Below, I am presenting some tips that helped me model the details of the character. I will present them using selected assets.


This is probably one of the most important processes. Placing the character in the right pose and testing different variations is crucial when starting the work. Do not be afraid to experiment with the form.

Sometimes a small change in an asset’s position, stretching a garment, or adjusting the position of a belt, bag, or buckle can drastically alter the character’s appearance. I took pictures of poses that I blocked in ZBrush. Then, throughout the day, I looked at them several times to determine the best pose to base my design on.



I find belts to be interesting and detailed assets worth discussing. Here are some tips for creating them:

  1. Gather references.
  2. Create belts in two layers: a base layer and a leather layer on top of the main model. Model the details mainly on the leather layer to give the belt a more textured appearance.
  3. Create imperfections on the belt using the Slash brush in LightBox. This adds subtle irregularities to make the object look more natural.
  4. Add an alpha to create natural folds and distortions on the belt.
  5. Finally, add texture and other weathering effects. The specific details will depend on your preferences and personal taste. You can use Noise and Detail based on your custom brushes.


Now, I will describe the workflow for creating textures in ZBrush, using a carpet as an example:

  1. Find references for the desired material.
  2. Model the object in Marvelous Designer or manually in ZBrush.
  3. Create a simple mesh and UV unwrap it. Import the mesh into ZBrush, making sure to export and import it as an .obj file.
  4. If necessary, swap the mesh with a simple UV. Increase the subdivision level and apply Noise under Alpha to create texture.
  5. Select Mask By Noise and invert the mask. Inflate the texture to achieve the desired effect.
  6. Add a new layer and create micro details using brushes like Inflate or Standard.


In this part, I will explain how I modeled details on the edges of objects using geometry. I primarily used Maya for this because it provided faster results compared to ZBrush and Blender. Here’s the workflow:

  1. Find references.
  2. Model a segmented object that matches the length of the edge of your asset.
  3. Import the object onto which you want to add the border.
  4. Convert the edge of the mesh into a curve by selecting Modify -> Convert -> Polygon Edges to Curve.
  5. Adjust the position of your mesh along the curve, keeping in mind that you might need to rotate it to fit correctly.
  6. Determine the density of the path you want your object to follow by selecting Constrain -> Motion Paths -> Flow Path Object. Adjust the “Divisions Front” setting.
  7. Manually adjust the position of your asset along the curve, ensuring it aligns properly.
  8. Before finalizing the mesh, consider testing it in ZBrush to verify that the scale is appropriate.
  9. Import the finished asset as a .fbx or .obj into ZBrush.


Selecting the right brushes is essential for detailing your models. I create custom brush sets based on my needs. In this project, I prepared packs for leather, metal, wood parts, and clothing. Here’s how I created leather brushes as an example:

  1. Find a reference for the detail you want to achieve.
  2. Create a plane and thicken it to a suitable level for detailing. Ensure that the plane’s edges are masked to avoid artifacts when applied to the target mesh. Make all changes on separate layers to have more control.
  3. Reproduce all the visible details from the reference. To enhance detail, consider using the “Mask by Cavity” feature and the Inflate brush.
  4. To create a set of brushes, go to “Brush” -> “From Mesh” (make sure your custom package is active).
  5. Save the package and open it in another project. Create multiple brush variants, as you may not use all of them in a single project.


I mainly found ornament references on the web and in museums. After processing more than a dozen, I recommend using stone ornaments because they have simple shapes and details, making it easier to generate alphas that fit well on your objects. Here’s the workflow:

  1. Import the ornament image into Photoshop/Krita and transform it into an alpha.
  2. Apply the alpha to your object using the Standard brush or Drag Rect and import it into alphas.
  3. Enhance the detail by adjusting the Intensity and Focal Shift values.
  4. Increase the mesh detail using brushes like Standard or Inflate.
  5. Finally, add destruction and noise to achieve a more interesting effect. Ensure that each step is on a separate layer for greater control.

Remember to model each step on a different layer e.g.

Projection alpha > inflate detail > destruction > noise > corrections > additional changes.

This will allow us to remove or change the intensity of the layer.

I modeled the details on the belts and ornaments individually, keeping them on separate geometries and subgroups.
This approach ensures high-quality detailing and simplifies geometry manipulation and potential shape changes.


  1. Find a photo of the ornament you’re interested in and import it into your scene. Turn off perspective when creating ornaments.
  2. Import the photo into the scene and adjust its position.
  3. Create a plane, increase the subdivision levels, and use masking to draw individual elements.
  4. Divide the elements into subgroups to make it easier to manipulate and create spatial objects.
  5. Remove subdivisions and unnecessary parts of the plane. Use ZRemesher to simplify the mesh while retaining essential details.
  6. Add thickness to the objects and refine them until they closely resemble the reference. Pay attention to settings like Loops, Polish, Bevel, Elevation, and Thickness for precise results.

Marvelous Designer

I created all the clothing in Marvelous Designer. I started by sewing the base of the garment and then added an additional layer duplicating the one below. I froze the layer below and worked only on the duplicated layer.

I used the Shrinkage Weft (%) and Shrinkage Warp (%) sliders to achieve the desired fabric behavior. Afterward, I exported the clothing to ZBrush, where I enhanced creases and added details, seams, threads, and metal parts.

Retopology and UVs

For retopology and UV mapping, I used Maya. In some cases, I applied decimation to preserve specific high-poly details. I separated each object into distinct materials to achieve the best results in texturing.

I didn’t focus on a specific number of triangles; my main goal was to maximize detail in the final render.


I used Marmoset Toolbag for baking. The program provides great control over baked meshes and allows adjustments through Paint Skew and Paint Offset. It also facilitates baking textures from high-poly to low-poly models, which is useful for game development in Unity. Here’s my workflow, using armor as an example:

  1. Divide the mesh into subgroups to avoid baking artifacts.
  2. Position the low-poly and high-poly objects correctly. I baked each object separately since I didn’t need Ambient Occlusion (AO) between meshes. If I wanted to bake AO on any object, I would place the character’s low-poly mesh inside the object I intended to bake.
  3. High-poly objects had between 10-15 million triangles in total. In this case, I didn’t decimate to maintain fine detail.
  4. Used settings:
    • Baked the maps in .png format.
    • Increased the Sample to 64x and set the Resolution to 4096×4096.
    • Selected the maps to be baked in the Configure tab, including Normals, Normals (Object), Position, Curvature, Thickness, Ambient Occlusion, Material ID, and Alpha Mask.
  5. Adjusted the number of samples for each map to achieve precise results if my computer could handle it.
  6. Ensured that the Padding Size matched the padding set during mapping in Blender or Maya.
  7. Also baked the Material ID, which simplifies texturing in Substance Painter by allowing easy selection of objects with the same color.
  8. After baking, check each texture for artifacts. Made necessary adjustments in Photoshop or Krita if required.


I used Substance Painter for texturing. Here’s my workflow for texturing a gun box:

  1. Imported the textures generated in Marmoset Toolbag into the Assets tab. Converted them to textures.
  2. Assigned the textures to specific layers in Substance Painter.
  3. Used the Gdansk Shipyard Buildings lighting preset and enabled shadows on the Lightweight setting.
  4. Initially, created two layers: BaseLayer with basic values and BaseShadow to add shadows where needed, covering imperfections.
  5. Created a scene in the target engine where I planned to render or use the character (e.g., Unity, Unreal, Marmoset).
  6. Blocked out basic colors and tested different variations. Once satisfied, added details and wear elements.
  7. Utilized Material ID for easy selection of objects to texture. Created folders with black masks and selected colors based on the Pick a color option. Adjusted the Tolerance as needed.
  8. Mixed colors in textures to achieve a more natural look. Adjusted intensity using sliders.
  9. Continuously checked how the object looked in the target engine. Made adjustments to the texture or masks as necessary.


Posing can be challenging, especially for those less familiar with animation and bone placement. I recommend following tutorials for guidance.
This can greatly simplify the posing process.


I used Unreal Engine 5.2 for rendering. During this stage, I took my time and tested various lighting setups until achieving the desired effect. Here’s my workflow:

  1. Created a clean scene with basic elements like SkyLight, SkyAtmosphere, ExponentialHeightFog, and PostProcessVolume.
  2. Designed the main lighting setup using SpotLights and RectLights. One RectLight served as the RimLight, while others provided supplementary lighting.
  3. Added the main camera, supported by the Cinematic Viewport, and included a Sequencer for animation purposes.
  4. Posed the character and initiated the rendering process.
  5. Double-check the camera selected in the Sequencer, as Unreal Engine sometimes changes it unexpectedly.

Lighting is a critical step in the project, requiring experimentation to find the best setup.

Conclusion & Tips

  1. References are crucial; invest time in gathering a diverse library for your project.
  2. Block out your character to explore different versions before proceeding to high-poly modeling.
  3. Pay close attention to detail during high-poly modeling, as it significantly impacts the final result.
  4. Continuously assess how your textures look in the target engine to ensure they match your vision.
  5. Enjoy the creative process; it’s essential for producing high-quality work!