Making of Blue-haired girl

Hey everyone, my name is Yangzhengnan Cheng. I'm 25 years old. I'm a 3D Character Artist from China. This is my second year since officially entering this field, and I have been studying and improving my craft. And I'm happy to share the processes explored in it with all of you!

I'd like to thank Natalia (Blu304)Xiaode Zhu, and Huifeng Huang. They're all very talented 3D character artists. They're my good friends. They have helped me a lot throughout my studies in the field of 3D! Many thanks to TexturingXYZ for the opportunity to talk about my work!


I was initially determined to create an accurate representation, but it was becoming very time-consuming. I began collecting images on Pinterest and came across a photo of a fashion model named Sasha Belyaeva that I wanted to use as a reference for female portraits and create my own interpretation of her.

I purchased the foundational mesh created by J HILL from the Artstation platform. Additionally, J HILL's YouTube channel offers a plethora of content.The tutorials provided are of exceptional quality. My head basemesh has been subdivided 8 times, resulting in approximately 80 million polygons.

This level of subdivision is advantageous for capturing intricate details.(Or, you don't need to because now VFace comes with its own UV-optimized mesh, enabling you to begin the sculpting process directly on the mesh!)

I split the UV map into three parts to achieve more detailed results.


Once the mesh has been sculpted and UV'd, you have the option to wrap the mesh using Wrap3D. I was ready to start creating the texture details for the face, and this time I chose the displacement from VFace #31 and albedo from VFace #97.

Firstly, import your own model and VfaceBasemesh into Maya. Then, overlap them in approximate positions and export.

Open Wrap to initiate the wrapping process for the model and create SelectPointPairs to match the points. (When you're ready to start wrapping , you can connect the Vface mesh and diffuse to pick the best point to match.)If you want to make the VfaceBaseMesh perfectly symmetrical, you can press the Tab key.

Add the FixSymmetry function to make the mesh symmetrical.

When you have finished wrapping, you can add a Brush node to relax and project the mesh. Alternatively, you can also perform this step in Zbrush.

Transfer maps in Mari

I use Mari to bake the texture, and I chose VFace fully calibrated Displacement for the texture transfer.Of course, you can also watch the official TexturingXYZ tutorials.

Import your head model and VfaceBasemesh, which should already be matched to your own model, into Mari. Next, create a 32-bit base channel with a resolution of 16k in Mari. Make sure to change the color space to RAW mode and remember to tick the Scalar Data option.

Under the VfaceBaseMesh layer import XYZ_dispCalibrated_mid0_raw.1001 and change the import colour space to Linear. Right click on the channel under the mesh and select the Transfer option to pass the VfaceBasemesh channel to your model.

I extracted the colour and specular maps from XYZ_albedo_lin_srgb.1001 and XYZ_utility_lin_srgb.1001 and converted them to 8bit TIF format in Photoshop, and passed them on to the model I sculpted in Zbrush in the same way.

After baking, we need to export the texture in EXR format and select the color space as RAW.

Once the file has been saved, we repeat the steps we took in Photoshop to convert the image into a 32-bit TIF map that can be used in Zbrush. You can find the method for applying this texture in the following paragraph.

We then apply it to the model that I have already sculpted. As you can see, there is almost no loss of detail in the converted map. If you have more than one UV, you can group the models into UVs and then apply the replacement maps and add layers to them.

Displacement Mapping

(If you use the base mesh provided by VFace, you can skip the process in Mari and start applying the mapping directly.)

We can find the mapping with the name XYZ_dispCalibrated_mid0_raw.1001.exr on the maps folder in the 01_head of the VFace file package.

 XYZ_dispCalibrated_mid0_raw.1001.exr can be converted to a 32-bit TIF image in Photoshop and then applied to Zbrush, remembering to flip the image vertically at the end.

We can import it directly and apply it to the base mesh of Vface. You can see a lot of amazing details.

The VFace mapping provides amazing details when applied to the model after the PS conversion! I used the VFace Victoria#31, There's a lot of amazing detail, which is great when you need to create a portrait of a young woman!

Basic Mapping

I wrapped my model in a Medina# 97 color texture to my model using Wrap3D. I felt that the color of her face needed further work, so I began enhancing the brightness and saturation of the texture using Mari.

I also applied minimal makeup to enhance the complexion and added a touch of blue around her lips for a subtle and natural look. In addition, I applied coatings and adjusted the roughness to prepare for the subsequent rendering in Arnold.



The entire process took place in Arnold for Maya 2022.My Arnold skin shader (a simple aiStandardSurface) uses nodes such as aiColorCorrect and aiRange to adjust the maps until a satisfactory result is achieved. My shader network is pretty simple. I try to keep it as non-technical as possible.

This is how I plugged in my displacement maps. It is a very basic setup. There are two levels of displacement at this point. One is from the XYZ_dispCalibrated_mid0_raw.1001, which was passed through Mari. The other is from the sculpting details in Zbrush.

I created a mask in Mari to control the displacement texture of the red channel. Each of these maps is connected to an aiRange node, allowing me to adjust the intensity through the "Output Max" slot. Finally, I combine them using a "plusMinusAverage" node.

This is the result of the network.

I spent some time on the ambient light test, and you can find the image "hdri_studio_lin_srgb" in the "02_references" folder. And the results look great! I also tried testing with other HDRI lights.

Also, I tested other HDRI.


When you have finished mapping the eye, you can import it into Photoshop. Convert the image to grayscale mode and change the bit count of the map to 16-bit. Additionally, apply high contrast retention.

This will result in a displacement map that can be easily applied in Zbrush. Using this map, you will be able to sculpt the pupil deeper in Zbrush and enhance the detail on the sclera. So you can achieve more detailed reflections in the renderer.

For the sclera, I utilized LayeredTexture to blend the colors and transparency maps. I also incorporated the ramp node to fine-tune the surface color of the sclera before combining it with the AiColorCorrect node.

Finally, I employed the RemapHsv node to achieve the desired color blending results.

For the pupil, I added a ramp node to modify the intrinsic color. I selected the Type as Circular and the interpolation method as smooth. This way, the modified color will blend more naturally with the existing texture.

For the cornea, I created a transparent glass material sphere and added a noise node connected to the displacement and normal inputs to simulate the effect of tears.

In order to minimize the impact of noise on the pupil area, I added a transparency map to ensure that the entire pupil area remains unaffected.

This is the final network result.

This is the information for all materials,I hope you find it useful.


I used Xgen's guide line mode and interactive mode to create the hair. In guide line mode, I created the basic hair, and in interactive mode, I modified the shape and added details to the hair.

If you decide to start using Xgen, you can watch Hadi Karimi's instructional video on Xgen, which will be very helpful!

Eyebrows and eyelashes were created using Xgen interactive.

Also, I added smaller amounts of pomade to the scalp and hair parting to achieve a more natural look.

I used the aiStandardHair shader with the "red" color. Additionally, I added a ramp node to connect the Basecolor and Transmission Tin. I wanted the hair color to transition from the forehead to the ends of the hair, avoiding a monotonous look.

To achieve this, I created a gradient that goes from blue to blue-green.



For the lighting, I tried a few different techniques. While collecting photos, I came across photographer Marat Safin's work, which inspired me. To achieve a similar result, I used a setup with three area lights and experimented with their scale. Although my lighting setup was simple, I hope to improve upon it in the future.


The highlight of this project was receiving appreciation from the 3D artists I have always admired, as well as from many other people (not only artists!) I came into contact with someone after I posted it on social media. I owe the success of this piece to the CG community. Thank you!

And thank you XYZ for your hard work!

I hope you find this breakdown useful!

If you have any questions or are interested in my work, you can contact me via Instagram or ArtStation.