Making of Winnie

Hi everyone, I’m Riccardo Gheller, a texture and lookdev artist currently working at Platige Image as an Asset Lookdev Artist. 

I’ve recently released “Winnie”, a personal project that I’ve been working on for the last 5 months in my spare time and I want to briefly break down the main steps I took to achieve the final result.

With this project I wanted to focus on all the aspects and try the VFace workflow, so I used a real life fashion model as the main reference.

It is Winnie Harlow dressed up by Iris Van Herpen.

I wasn’t aiming for a 1:1 likeness to be honest, my focus was more on the texture and lookdev process and I was very interested in the artistic challenge posed by the pigmentation shifts in her skin. 

Also the project started as a full body character, but then I decided to break it into a bust so I could focus more on the details.

I’ll be trying to break all the steps into 4 main sections (modeling, grooming, texturing and lookdev) even though I was working on all the aspects simultaneously.

Modeling of Winnie

It took some back and forth to finally achieve the shapes I was satisfied with. I constantly switched between Zbrush and Arnold to check the volumes and compare them with some pictures. I chose to start from a sphere in Zbrush to enhance my sculpting skills, so I relied heavily on references, especially anatomy ones.

My approach was to prioritize the anatomy over the likeness at first, and then refine the resemblance later. I used dynamesh to create the main shapes, and when it became insufficient in some areas, I switched to zremeshing with some guides, which helped me achieve trickier spots like the eyefold.

I used many references and tried to match some of them with the camera in Maya. I adjusted the main volumes there and then imported the model back to Zbrush. Setting the correct scale for the model was crucial in the initial steps, as it would affect the groom and the lookdev steps later and help me achieve physically realistic results.

Once I felt a bit comfortable with most of the shapes, I decided to wrap some topology on top with R3DS Wrap in order to have a better base to sculpt with (https://texturing.xyz/pages/vface-docs-2-2-a-wrap-r3ds) and create some UVs. 

For the body UVs I’m using 2 8K UDIM for the face, and then I kept the same texel density for the rest of the visible body.

I kept the detailing process simple, focusing on the primary and secondary forms in Zbrush and sculpting with the highest subdivision level of 4 (about 1 million polygons for the high poly), since I planned to add all the fine tertiary details with the textures later.

This is what the highpoly looks like.

The eye model is created. I took as reference Michael Cauchi’s one (https://youtu.be/qgw1Z9JtkNI), but mine is way less elaborated. Below the side view of the eye geo and UVs.

I’m using a double sided mesh for the meniscus and I quickly sculpted and Zremeshed the caruncle in Zbrush.

Map transfer and Texturing of Winnie

For the texturing part, I used “VFace #46 Rajendra” (https://texturing.xyz/collections/vface/products/vface-rajendra-46) as a base. Vfaces have a clean topology and a single UDIM mesh, so I wrapped the Vface mesh to mine using R3DS Wrap. A nice thing about VFace is that they are already free of facial hair, eyebrows or any other unwanted elements. The initial wrap was decent, but I had to fix some areas like the eye fold and the mouth in Zbrush.

After wrapping, I brought both meshes (the wrapped Vface and mine) into Mari and transferred all the maps that I needed. I mainly used Albedo, Displacement 3 channel and the ID pack, which was very helpful during the lookdev process. The texture transfer in Mari took about 2 or 3 hours, which was not very fast but quite reliable. Here below you can find some screenshot for the all process which is very straightforward. 

Once it was done, I loaded all the maps into a new Mari scene to start the texturing process.

This is how the maps were looking after the transfer process and a bit of cleanup of the unwanted features (like moles or dirty patches).

I began by importing all the maps and working on the color to match the reference as closely as possible. I separated the two main components of her skin, the dark and the light patches. Then I added paint for the mouth, the eye darkening, a layer of makeup and some distinctive moles. Finally, I added some color correction layers while testing the maps in Arnold.

To create the Specular Roughness map, I began with a value of 0.4 and added some texture on top to make the details more varied. I painted glossier areas (down to 0.2) on the lips and eyelids and rougher areas (around 0.6) near the hair. I could also use the Blue channel from the displacement or the cavity map to make the specular roughness look more realistic, but with such high resolution displacements, there is no need to use too much contrast or very detailed specular maps. Find below a screenshot of the final SPECR map.

For the displacement map, I wanted to have more control in Mari, so I split the 3 channels and worked on each of them separately before merging them again. I did some minor cleanups on the eye area and some unwanted features. I usually use the clone stamp tool or the marquee select with the lift selection to clean up. Here is what the split channels look like in Mari.

I also painted more isolation maps during the texturing process to help me with the lookdev process and avoid switching between programs. The most important one was the one I called “ISOspot”, which controls the bright spot of her skin due to vitiligo.

Grooming of Winnie

I knew the grooming process would be very long and complex, so I took my time with it, without rushing it. I feel the groom nowadays is one of the most if not the most important component in a digital portrait. It is really easy to lack realism with the groom and difficult to achieve a natural look.

I was grooming with Xgen because it's the tool I'm most comfortable with.

During the process I was creating a lot of descriptions and dividing as much as I could the groom, so as to have maximum control over everything and easily modify specific sections.

Here is the guides and all the descriptions I’ve used.

After I’ve modeled the crown, I created the braids around it with a brush in Zbrush, then I extracted the curves from the edges in Maya and converted them to guides in Xgen.

There are not many things to say about the braid description, just that sometimes you need to go crazy with the CV modifier count so the hair can properly follow the guides of the braids.

As a modifier I’ve only used one layer of Clump and a layer of noise.

For the clumps of hair around the braids, I’ve inserted a small line of polygon to be able to generate them.

A cool tip I can suggest is trying to create a description to nicely blend eyebrows and hair with the skin. For instance you will have a description for the actual eyebrows and one just to blend them with the skin. In the “blending descriptions” I used another shader with less melanin and a bit less opacity to help the smooth and soft transition.

Peach fuzz is the fine hair that covers the face and gives it a soft appearance. It is very important to include it in your groom if you want to achieve a realistic and detailed portrait. To do that, you should look at some references and observe how the peach fuzz varies in length, density and direction. Then you should create a separate description in Xgen for the peach fuzz and adjust the melanin and opacity parameters in the shader to make it lighter and more transparent than the rest of the hair.

Last but not least about the grooming is once I finished the whole groom, I converted all the descriptions into interactive grooming, so I could manipulate shaders and textures easier than the Xgen legacy way. 

Lookdev of Winnie

One of the best practices for lookdev is to use different light rigs to test your shaders under various lighting conditions. By using different light rigs, you can check how your shaders react to different light sources, directions, intensities, and colors. This can help you spot any issues or inconsistencies in your shaders and improve their realism and quality.

General settings of the aiStandardSurface:

More or less it is a standard skin shader, so full subsurface, specular layer with 1.42 IOR and a coat layer for the sweaty portion of the skin. I’m using several ISOs combined with aiLayerRgba to mix different inputs and have as much control as I can in the various sections of the character.

Speaking of ISOs, if you are using VFace I suggest you have a look at their ID pack. I found it very useful and nicely done. Here is the link:

https://texturing.xyz/collections/vface-add-ons/products/vface-ids-extension-pack 

I’ll try to give you some approximated median values for the shader I used:

Diffuse Wight is 0;

Specular Weight is around 0.5;

Specular IOR is at 1.42;

Specular Roughness is around 0.35;

Coat Weight is around 0.4, masked with cavity map (so 0 inside the cavity);

Coat IOR is at 1.337;

Coat Roughness is from 0.38 to 0.08 on the lips;

Subsurface Weight is 1;

Subsurface Scale really depends on your model size and on your radius color, mine was around 0.01. 

These values worked for me, maybe it is not very physically correct. Usually we should have rougher specular than coat and maybe higher coat IOR numbers, but after several tests this is what worked out for me. 

To simulate this effect in the shader, I used two different values for the skin radius in the Subsurface section, which controls how deep the light penetrates the skin and scatters. 

I used (R: 3.670, G: 1.445, B: 0.778) for the dark skin and R: 4.820, G: 1.690, B:1.090 for the pale skin, in order to create a contrast between the two types of skin.
Please check Arnold user guide if you have doubts on how radius works and why we need to use values like this.

Managing displacement is straightforward with 3 channel maps. 

Let me show you how I set up the shader in order to control it.

In this way I can fully control the intensity of each separated channel and play around with it without going back to texturing.

For the gold makeup I used a combination of mesh and isos painted on the skin. 

The mesh is generated in Zbrush quickly and then I painted the ISO in Mari to have a nice blend between the mesh and the skin.
I’m also using an aiMixShader to blend the skin and the gold of the makeup.

I hope this breakdown was helpful and informative for you, and I want to express my gratitude to TexturingXYZ for giving me this opportunity and for their amazing products!