Mateusz Sroka / Making of Bad captain

I’m Mateusz Sroka, am working in Platige Image as Lookdev Artist.
My job uses knowledge of texturing, shading, lighting, rendering, compositing, grading, and some basics of modeling (blendshapes, some facial geometry fixes, etc), in both artistic and technical way... And of course, many others things!

Part 1-

In this work I started with Izabela Poznańska mesh (she worked on the base model and high resolution sculpt while working at Platige), and started to kill all symmetry in face, make big, mid, and small changes using ZBrush grab,sculpt …

This is very important step, make more real man in geometry is 50% of final look, spend lot of time in this step , kill symmetry , and variations , make sure that your head is not to much cg look ( in face very important is eye region, if this region is not ok then all face look bad ).

That look my face after all small, big changes , for this portrait i add small facial expression to give more real look , i made 10 different changes using simple soft selection, and grab tool in Maya, then using all them as blendshapes on my no expression mesh.

Part 2-
Ok so we have good base model with some expression in face , we can start with texturing , let's start from displacement map.
In work i will be using two types of displacement - one for mid scale , and second for small, micro scale , big scale I have already in my 3d model.
For this step, I use Mari and a pack of UHD Displacement from TexturingXYZ.
On these maps, you can see that we have 3 channels for different scale of displacement!
On this project, I used hand-made projection on my 3d model in Mari (now I use the Zwrap method , and I only paint empty areas... It's 10x faster, and gives better results).

TexturingXYZ texture, projection-painted in Mari

BaseMesh + Base Displacement + TexturingXYZ texture

TexturingXYZ texture + Base Displacement Specular AOVs
Of course i prepare all maps to painting in nuke and save them as 16bit exr with PIZ wavelet compression - optimization ! (file size)
In Mari, I paint all the maps in 8k 16bit (you need a good PC for that, sometimes I eat 128gb RAM )

For now we have: our TexturingXYZ micro-displacement map from Mari, and our hand-made displacement made in ZBrush.
I want to see them in Real-Time in Mari, so:
  • I import a HDRI map in the Environment Lighting,
  • Create an aiStandard shader,
  • Setup this shader ( Specular by IOR, connect ZBrush displacement to Displacement, change size of tessellation, give good scale of displacement, connect the TexturingXYZ map to Bump so we can see both of them. Set them to use accurate normals, and you will see your displacement!).
In the next step, we add our albedo map (I usually use scan-data that of my own, now I really like to use Multi-Channel Faces packs from TexturingXYZ)!
For this character, I made a lot of changes to my Albedo map, like adding pores from displacement to correct displace with Albedo (pores are darker and more saturated in red. Another thing to keep in mind for LookDev is that pores have less Specular, making big changes on the nose, lips, and eye regions).

Then add dirts, and make some variations in skin tones on different regions of the face.
Noses are more red, some parts of the face are lighter, some are darker...
Add some small spots , and a lot, lot of changes!

I wanted to give many subtle informations to this character -there was around 400 Albedo modifications during this process… But this scan was not as good as those I have now, so I had to put a lot of efforts on this part!

Albedo Map & 3D Scan, displayed in Mari
Now that we have Displacement and Albedo , we need the next technical maps:
  • Specular,
  • Roughness,
  • Thickness.

Displacement / Albedo / Roughness / Specular maps
I create Specular and AO, using Knald (Knald GPU gives you epic-detailed maps).
AO is much much better than Cavity, when computed from Displacement, and this will be our base for Specular.
We need to paint big areas of Roughness, with different values for the nose, lips, forehead, etc.
The more detail you provide is the better!
I will make most of the detailing in Shading, but this is our workbase.

Export 16bit .EXR in PIZ wavelet from Mari , and optimize more its filesize (~20%), using Nuke.

Part 3-
Shading on Arnold, LookDev and Rendering

  Tip: Convert all your .EXR textures to .TX, so Arnold can read them in Linear color spaces.
At first, we start with creating our shader.
For this work, I was using Arnold Renderer 4 with AlShaders (these shaders are now depreciated since Arnold 5, with its Randomwalk SSS feature).
In Arnold 4, make your ZBrush Displacement connect with an alSurface Shading Group displacement input with an alLayerColor, to mix mid and small-sized details.
Add the TexturingXYZ displacement using add mode, then setup them like in Mari.
Setup catclark subdivision with adaptive mode for optimization, check "Autobump" for small details (in the "Arnold/Displacement Attributes" of your mesh shape, and check "ArnoldRenderer/Advanced/Use Autobump in SSS" in your Render Settings).
Fix scalar zero of your maps together, to share the same Scalar Zero Value - we mix two maps with mid value at 0, and a second one at 0.5.

After setuping displacement, we connect our albedo to diffuse map, with an alRemap for small changes (gain, saturation, etc).
In your Shader, open SSS settings:
  • Set to "directional SSS" the dispertion mode,
  • Setup scene scale,
  • Using medical data, tweak the scale on the 3 different SSS layers of human skin. To these layer color inputs, we need to plug the right maps, with their respective dominant colors and gain. For this, I also use medical data, to know how they look!
  • Connect other maps like Roughness, Specular and Thickness to our shader, with an alRemap/Float node for more control!
  • Make two GGX specular lobes using the Specular map, and mix them with the TexturingXYZ maps (do the same with Roughness), the first to 85% long tail, and the second one set to 15% wet tail of specular.

AlSurface Shader with all Maps, and Shading Network

Add a Lighting to your scene.
I used an Ambient Light, a Key Light and a Rim Light for these Renders.
Setup the ArnoldRenderer tab of your Render Settings (like Sampling, Ray Depth, AOVs, etc ).

Render to 16bit .EXR for color, 32bit for technical AOVs like Z, Position pass, UV... And Render with light groups for Compositing!

Make a lot of test renders, with different light conditions (i.e. HDRI environments, Area Lights, Back Lights, Soft/Hard Lights, add Hair (with micro hair/peach-fuzz), and make 4K renders with your final LightRig.

Up: Test Renders / Down: Scene with Lights, Settings, and Shader

Nuke composition base on Raw Render
Use Nuke for Compositing -Add Specular and some color corrections using CryptoMate, setup all lens effects, add Depth of Field, a first little grade, and export to .DPX (Cineon) for Resolve, to finalize the Grading process.

  Q: Do you have any resources you would like to share, on where you find medical data, reference for SSS Shading, and Setup in Arnold?

A: Here are some links, where you'll find technical articles about rendering Human skin - different SSS models (diffusion, directional, volumetric) , how to setup Arnold , references for albedo, specular levels, microgeometry.
It's really important to understand how all of this works in real life, to create more realistic characters:

Of course references are very important in achieve good, and realistic look of character. There are so many things to do that you need a lot of test renders, changes in textures and shading iterations, before you achieve what you really want.
Even small changes are very important to push a little forward!

I would like to thank Jeremy Celeste from to give me the opportunity to write this article, and show you my newest work... And of course, for all the epic content on this website.

Mateusz Sroka's ArtStation | CGSociety
We would like to thank Mateusz for his helpful contribution.
If you're also interested to be featured here on a topic that might interest the community, feel free to contact us!