Making of Golden Miami

Hi! My name is Piotr Kujko, I’m a professional 3D Artist, working as Senior/Lead Character Artist and Art Director. When I felt strong enough with sculpting and got some knowledge about 3D pipeline production, I started learning how to create realistic characters.

After some years, I decided to use most of photorealistic methods in 3D creation I have learned on my own, or in commercial studios where I worked and started to developing my unique style based on realism and cartoon design.

My last character is called “Golden Miami”. At the beginning, I wasn’t sure about an idea of her, I had some imaginations how she could look like, who is she, what’s her story, but I wanted to had more fun during work and described her on the fly.  


The first steps I took, was searching the Texturing XYZ VFace library for good start. I follow Texturing XYZ social medias and some days before, I noticed a new content – head geometries with UV mapping and tones of textures, called VFace. Amazing library of well prepared, photoscanned and cleaned meshes, what more could you want?!

I chose VFace Olena, thinking that time, I would create white skin woman. 

Starting with symmetrical mesh, which you can download from for free, I was looking for an idea of her face. I always try to make a story around my characters, the face is the most important part of every artwork for me. After few hours, I finally made the head I liked. I was worried about UV mapping and topology stretches. Enlargement of the eyes could break the UVs. Fortunately, the stretches were not to big and I was sure, when I just applied six or seven subdivision level and baked a displacement map, It would be imperceptible. 

VFace symmetrical model, with proper UV mapping turned into defined head in Zbrush.

1st subdivision level in Zbrush – the same mesh as VFace model, just redefined and resculpted.

4th and the last subdivision in Zbrush

I was worried about UV stretching after sculpting process, fortunately visible stretching on 1st subdiv level wouldn’t be visible after applying displacement map created on 4th subdiv level in Zbrush.

My main sculpting software is Zbrush. The symmetrical mesh has been imported there and defined to the look of African roots woman. During this work, I checked the possibility of changing color ranges of Olena’s raw albedo map and I was very pleased of the result. Darkening and hue fixing passed whitout problems and gave me nice dark skin version. When I was done with a new base mesh, I created new layer in Zbrush and made smirking morph.

Olena’s albedo map after darkening, hue and levels changing in Photoshop.

New version of head with smirking face as morph layer in Zbrush.


After obtaining visible results, I exported smirking head version into Maya and started applying displacement map. This was my first try doing it, without creating detailed version in Zbrush. All the time, I was using well known “Killer workflow” with ZWrap method, but in this project, I wanted to test myself in what time will I be able to do all the work. “Killer workflow” is still insane, but the whole process takes much more time.  

 Take a look on a displacement nodes in Arnold / Maya.

Remember! If you render in sRGB color space, every linear map should has set ColorSpace as RAW (Displacement, Roughness, Metalness, Normal), color maps should be in sRGB (Base Color, SSS, Specular, Emissive etc.)

The first node is XYZ Displacement map from Olena’s pack. As every displacement map created by Texturing XYZ developers, we have three detail density maps packed in R, G and B channels. I split them and plugged into ramps with full black gradient, next every ramp node has been connected to plusMinusAverage node, strictly to Input3d[1] slot with –0.5 value and then to multiplyDivide node (color to Input1), where Input2 was mine intensity value of every channel.

It may seem difficult, but just copying this structure, you can play around values of displacement intensity strictly in shader, without re-importing map from Zbrush. Time is money, friends!  

I also added Zbrush displacement map from smirking face, only to got more muscle bumps – there were any pores or wrinkles detail on it! It’s very important, micro details I needed was in XYZ displacement map. Mixing these textures gave me possibility to changing the details and bumps without any bridges between software.

At the end, I used ID maps (downloaded for free from - remember, everything is on the same UV – every heads and all of maps available in VFace library. It’s simple and amazing!) with marked ears area and set the next node for controling pores there. Texturing XYZ displacment map + Zbrush displacement map connected into PlusMinusAverage node is the base displacement layer. In the last step it was connected with ear displacement to aiLayeredRgba node (can be aiLayeredFloat node too). 

I know this can be hard to understand, so check the record: 

The structure of displacement nodes in Arnold.

After some displacement values changes, I connected dark skin version of Olana’s albedo map into Base Color and Subsurface Color slot. It’s not necessary to apply color map into Base Color slot, until you use 100% of subsurface. I prefer connect it to these two slots, because I have more control of subsurface effect - but remember, it’s not physical average – it's just simpler and faster process.

 Albedo map connected to Base Color and Subsurface Color slots.

As you can see, albedo map has two indirect nodes – remap and aiColorCorrection. Once again, changing some color informations strictly in shader is much faster, than making it in Photoshop, or Substance Painter. I used them for some small tweaks, fixing the skin tone in Arnold viewer during some render tests.  

The next thing, after applying displacement and color is roughness. I should say, after setting displacement, setting roughness is the most important stage and it’s good to start with reflections without applied colors. I did it because, controling everything connected to proper slots is just easier for me, but if you learn skin shading, remember about it – displacement maps first, roughness is the second. 

Take a look on a reflection structure:  

Roughness and Specular node structures.

My base texture for roughness and specular was Utility map from Olena’s pack – R for specular, G for roughness and B for cavity. 

Utility map separated on RGB channels, where R is specular, G roughness and B cavity.

Let’s start from G channel – Roughness. 

I connected roughness channel to remapHSV nodes (can be remapValue too) and ID’s areas into aiLayerRgba, using RGB channels of ID map. Then I could separate face parts (as masks) and had a control of values in the shader. It made me change roughness value of mouth, nose and full head in the skin material, without re-importing between external software.  

R and B channels were controlling my Specular. R channel was my base specular layer, plugged into remap node to set a proper brightness and was gathered with cavity map for separating reflectivity of pores. This method is a mile stone of achieving a photorealistic result – cavity map should cover your micropores from “spilled”, “fatty” skin reflections and make them much more visible with SSS turned on.  

Roughness and Specular workflow explanation.

Shader tree of skin material in Arnold engine.

The first result of skin material: 

Skin shader after connecting maps to their slots.

Diffuse, SSS and Specular passes in Arnold viewer.


Head material settings.


Eyes are my asset made some time ago, which I use in every artwork. I just change some colors, values, or “halo” around the iris. You can find some iris textures pack on - I did it once and use them all until now! 

Examples of using the same eye asset in my artworks, just with different settings or an iris diameter.

Eye shader composed of two materials - cornea and sclera, controlling by ramp.

Sclera is this “white” base of eye. It’s wet, glossy with minimal bumps. Cornea is a “cap” on the sclera, which looks like a lens. 

Cornea and Sclera.

It’s very important to make these materials separetly! Sclera is a part of eye, which are not transparent, it has much of subsurface intense, which looks like a milk material, while cornea is a refractive material and makes the iris visible. Ramp plugged into mask slot in aiMixShader can control the diameter of iris and “halo” effect around it.  

Eye shaders.

UV mapping of eye mesh.

The entire eye model is made of three objects – 1. eye, 2. iris, 3. pupil. You already know the eye material, take a look on iris and pupil materials. 

Eyes are consist of three separated meshes: eye mesh, iris mesh and pupil mesh. Eye mesh has two materials – for sclera and cornea, iris has only one with base color and normal maps, while pupil has pure black shader.

Iris material is very simple. It has only base color, as previous, connected to Base Color and Subsurface Color slots, normal as Tangent Space Normals connected to Normal Camera slot and displacement map with a characteristic look of mountainous area.  


Iris material settings.

Material structure of Iris.

Render of eyes material.

Pupil is the easiest thing. Just be sure, base color is pure black, turn off specular and treat it as a black hole. 

Eye looks really good. Be sure to add displacement map in the iris material, it makes enormous difference!

As you can see, the whole skin material has been created without any external software like Substance Painter, or Mari. Everything is based on VFace mesh and new skin version from Olena’s resources pack. And guess what, creating this shader took only 30 minutes!  


VFace mesh is only a head mesh, there is no body geometry. I wanted to connect them, keeping UVs of head and pose my female character for clothes simulation process.  

Head geometry and body geometry were separated. I had to connect them for posing and clothes simulation.

I did it using Maya, just merging two meshes and welding vertices. Sometimes I had to add some geometry to equalize a quantity of points between body and head, fortunately this welding area is not very sensitive for mesh deforming and having some tris there were not a big problem. 

Welded meshes.

The only thing I had to do during this stage was re-projecting mimic bumps from 4th subdivison level of separated head onto merged object. I just copied the older one, delete all of lower subdivisions, treating 4th sbdiv as my high poly mesh, then masked a head sewed to a body in the new version (red polygroup) and used Project option in Zbrush. 

The same detail as before, but with rest of the body.

When I was done with A-Pose, I posed my character using Transpose Master plugin in Zbrush. As you can see, I also sculpted neck muscles to achieve more realistic result. 

Posed character on a new layer in Zbrush (whitout rigging).

My workflow is based on creating A-Pose version for sculpting, texturing and other, more technical processes and posed version, mainly for clothes simulation. Unfortunately, I’ve never learnt rigging at a sufficient level, but I still believe, posing in Zbrush with simultaneous cleaning is still much faster, than creating weight maps and probably making some fixes in Zbrush once again.  

In this case, I created a new layer in Zbrush just for posed version and when I was done, I exported A-Pose low poly version and Posed low poly version strictly to Marvelous Designer.

The last thing of creating skin material was creating blood textures and combined them with the skin shader. Blood material has been created in Substance Painter and put on top of textures of the entire character with clothes, props etc.  

Skin material in Substance Painter – just for blood, dirt and make-up.

The first layer was converted .jpg skin base color from Texturing XYZ – just for reference. I created a make-up layer based only on some layers with masks. In the same way, I coped with the blood material, just adding some grunge masks on three different shades of red, with very dark roughness and gentle height. On top of it, I created a dirt group with brown-black grunges. That’s all, pretty simple. 

What more, I didn’t add extra maps for makeup in the skin material. After some small roughness/color fixes in Substance Painter, I stated that render results looked really good and it was not necessary to complicate it. 


Substance Painter - additional layers for skin.

Staying in Substance Painter, I also created a similar hand-painted textures for her hand, using the same colors as head and created new displacement map for details in Zbrush (0 mid value, exr 32bit).  

I exported grunge masks of the blood from Substance Painter and plugged them into Base Color and Roughness for more control (R channel). As you can see below, remap node has been connected to next Roughness and Base Color slots in aiLayerRgba.

As before, I used G channel of skin utility map as my roughness and set very dark value, for additional blood color, I changed a hue and values to got a darker shade. Everything is in the same material, because combining two shaders extend render time. From technical side, I always want to make my artworks as simple, as it’s possible.  

Additional setting for blood material – just color (connected to Base Color and Subsurface Color) and roughness. 


After creating clothes in Marvelous Designer, materials for every new asset in a scene and hair, I started with final render! It’s also important to say, during sewing the clothes only then I finally came up with her story. Not sure why, I just had a thought “okay, maybe let’s create a portrait of rollerskate dancer girl, who has just smashed some freaks faces, oh and let’s make it in 70s style”. Yep, that’s deep.. 

Working on hairstyle - it always takes me most of the time. 

Simple lighting setup I created on the beginning. I just used HDRI (Gdansk Shipyard Buildings, one of the best HDRmaps) as my gentle global light and few external lights. On the last stage, I created more lights to extract things, which in my opinion looks the most attractive. Golden jewelery, glasses, baseball – had to shine!

Maya final scene, hair is turned off for better performance.

Looking for the best results between quality and render time, I set up sampling prioritizing Specular – once again, because of the hair. Hair and fur, SSS, depth of field, displacement maps cruelly extend the rendering time, but for me, the most important, apart from story, is quality in details. Take a look on settings below: 


After few days of rendering.. I did all final touches in Photoshop (adding selective contrasts) and Lightroom, to find the best color mood – I love to say, this last, short stage is my X factor.  

Comparing RAW render and final render

It took 5-6 days to create the entire model. The most difficult part was her hair - I spent about 2 days working on it and finding the best hairstyle. The use of VFace, without using any external texturing software (apart from blood and make-up, which lasted about an hour) took less than half day. I was so pleased, there’s finally an option to create characters much faster than before.  

Sharing with you some portion of knowledge about Character Art creation is a huge pleasure for me. I hope to help, or even have already helped giving you some advices. Also, thank you Texturing XYZ for create the amazing content for us, a space where artists can share their own artworks, describing techniques they use and for finding some place for my short breakdown. 

If you guys have any question about 3D production, write me on Instagram or Artstation

I’m a machine, so whenever you read this, expect a new artwork soon!