self-portrait study
This project focuses on the development of a self-likeness sculpt with the purpose of realism. I will be working with Arnold using Alshaders, Xgen hair for grooming and texturing using Mari. Research into human facial anatomy and self-portrait drawings for concepts and further understanding of the structure of the face. In addition, traditional sculpting helped gain insight into muscle anatomy.
Technical workflow to recreate naturalistic subjects whilst working with good topology and optimised UV mapping to ensure high fidelity detail. Further use of advanced rigging systems with dynamic hair and eye for animation use.
The workflow will be broken into different sections; likeness sculpts in Zbrush for displacement and detail; texturing (MARI) and shading in Arnold, groom and hair in XGEN and then advance eye rigging in Maya.
SCULPTING
Different regions of the face’s skin surface offer different skin texture and detail. This means that the wrinkles and pores are unique so it is important to sculpt individual details separately.
brushes and Alphas in Zbrush were used to simulate high-fidelity skin details and hand sculpted details were added, for more unique and visibly intricate features.
Lazy mouse delays the stroke set by the user which allows For intricate details to be applied manually.
UV MAP
To ensure optimization of UV space, the head model’s UV map needed to be unwrapped again.
Using Zbrush’s Unwrap tool, it is possible to ‘enable control painting’ to protect specific areas that will avoid having seams (the facial region) and attract seam cuts to areas which will not have as much detail (the back of the head).
The Map can then be exported in Maya and using the unfold tool, the UV map can be optimized accordingly.
TEXTURING
To achieve realism, it is important to use a collection of reference images, taken from different angles. However, to avoid fake lighting during the final renders of the model, highlights and shadows must be removed. Therefore, lighting should be created from the project scene, otherwise visible highlights on the textures may look unrealistic or overexposed.
Highlights and shadow were removed from the image using Photoshop to achieve a 'flat' appearance, however, this can also be done by using polarised filters, attached to a camera.
TEXTURING: SUBSTANCE PAINTER VS MARI
SUBSTANCE PAINTER
Substance Painter is a powerful texturing package which provided a suitable method for texturing my UV map in comparison to its competitors due to its powerful utilities and brushes and it’s strong processing capabilities.
By using the Projection brush, it was possible to ‘paint’ the reference images collected directly onto the mesh, in correlation with the UV map. However, due to the limitation of references images used, it was difficult to produce accurate details in delicate areas such as the eyes. In addition, the reference images still lacked even colour correction which was visible in the final UV map as dark areas. Overall, the texture detail was good but showed unwanted problems which needed to be fixed.
The UV texture map did not utilise the UV space effectively as there are large empty spaces. This causes loss of detail as less information is being used.
MARI
Mari is another powerful texturing software that handles complex assets and offers a friendly user interface and paint tools. This allows the ability to paint on the mesh or on the UV map to reach difficult areas such as behind the ears.
Mari has a wide selection of brushes and tools for detailed texturing and layers can be used to stack different textures and colour palates to achieve the best look.
Alpha stencils are available to allow small details such as freckles and veins to be made with ease.
Clean textures with less patches can be made with high fidelity and could also be exported at high texture resolution.
TEXTURING: HUMAN SKIN SHADER
The human skin has stacks of layers on top of one another comprising of different properties and appearance.
There are three main skin layers which include, the epidermis, which is the most visible skin layer as it is situated on the outermost layer; the dermis, which contains the hair roots, sweat glands, nerves and blood vessels; and finally, the hypodermis-subcutaneous fat layer, which is a layer of fat that sits underneath the dermis layer.
Layers of the human skin (Image taken from Webmd, LLC)
Diffuse Map: Use of Projection mapping to paint textures with reference images.
Shallow Map: Represents the most exposed skin (epidermis) of the face. Non-vascularised area, skin needs to be desaturated.
(Difference between the diffuse and shallow map: mainly the saturation, with a slightly darker level).
Mid Map: The dermis Skin Layer, which contains the hair roots, sweat glands, nerves and blood vessels.
Deep Map: The hypodermis-subcutaneous fat Layer – A layer of protective fat, which lays underneath the Dermis layer.
Deep Mask: This will allow control over the deep map’s influence.
Primary Specular Map: To capture the areas of oily skin and highlights, a specular must be created for specific regions and provide an appropriate level of intensities.
Secondary Specular Map: This enhances certain regions of the facial features and captures the highlights and reflections.
Glossy Map: Controls the intensity of the specular map.
DEEP MASK
DEEP SSS
GLOSSY
MID-MAP
SHALLOW
SPECULAR
SECONDARY MASK
DISPLACEMENT MAP
ARNOLD: SHADING | ALSHADER
A shader made by Anders Langlands has used due to its powerful functionality and physical based rendering capabilities. Through tests, AL shaders proved to handle Fresnel and lighting much better than Arnold’s standard Ai shader and it also supports AOV.
The specular map determines the most highlights found on the human face.
With the help of AlremapFloat node, the pixel values of the specular map could be adjusted appropriately to attain the most detail on the maps.
To control the specular reflections, a glossy map was created in Mari. It was important to assign the correct distribution of reflectivity and highlight to achieve the most realistic appearance of skin.
SUBSURFACE-SCATTERING: SSS
The SSS attribute has three layers which are defined by the distance to distribute the level of intensity.
By turning the SSS on, it will calculate a default sub-surface scattering across the entire mesh. The empirical mode provides more detail than the Cubic mode as it does not soften surface details greatly. Directional mode offers much more detail but can take up a larger amount of rendering time which is why the empirical mode was chosen.
The maps created previously using Mari were then integrated into the colour of each layer of the SSS attributes. The distance of these layers affects the visibility of each map.
XGEN: HAIR REFERENCE
SHALLOW
MID-MAP
DEEP-SSS
XGEN: HAIR REFERENCE
It is important to understand the behaviour and characteristics of the hair reference to achieve a realistic simulation of hair dynamics.
Specific features such as the flow, volume, variations in length and attributes of the hair all play a vital role in creating believable and accurate hair and will need to be replicated.
XGEN is a powerful geometry instancing tool and allows the user to procedurally create and style hair, fur and feathers.
For the first attempt at creating hair using XGEN, masks were used, however, it seemed to be very temperamental and various problems occurred. An alternative solution was using isolated geometry to select specific regions of the head for which the hair would originate from.
An important aspect that had to be taken into consideration was organised naming conventions and scene. This was due to the XGEN system working in directory paths and allocation with specific name tags so it was imperative that the geometry and file names were relative to the XGEN files.
XGEN uses Collections and Descriptions. The Collections allows descriptions to be made in the same location, providing an effective process of creating various different types of hair.
Splines were used for the creation of the hair primitives as it provided much more control with the primitives that the description generates. In addition, individually placing each shaping guides encouraged greater control.
Reference images were used to help accurate place the guidelines on the geometry.
The flow, volume, variations in length and hair properties were all taken into consideration when placing the guide lines for the best appearance.
To achieve realism, the hair primitives required modifiers to simulate real hair properties and movement.
In the Modifier tab, two variations of clumping were added with varying different levels of intensity.
To add variations of length for the hair primitives, a Cut modifier was used.
The Noise modifier creates variations of flow and direction of hair strands. Two Noise
A mask was used to restrict the stray hair’s Noise Attribute to appear in specific regions. For this method, a noise_smoothstep mask was used as an expression from XGEN’s samples library and modifers were created, the first adds an overall variation of flow to create a natural appearance and the second was to create stray hairs for realism.
The Hair shader of the primitives were altered to match the reference image’s and allowed clearer visible representations.
Further development of the hair primitives were needed to achieve the most ideal appearance and ensure likeness.
EYEBROWS, EYELASHES AND FACIAL HAIR
Using the same workflow as with the hair primitives, it was not too difficult to generate primitives hairs for the eyebrows and facial hair.
The most difficult aspect was creating believable and accurate renders of each hair strands, ensuring the flow and behavior were highlighted.
Peachfuzz, also known as Vellus hair is a short, thin, hair that covers most of the skin surface of a human body.
For the Peachfuzz primitives, Groomable splines were used instead of Splines. Groomable splines is an effective way of creating realistic fur and hair due to its ability to randomly populate the bound geometry. This differs from Spline mode as XGEN generates splines across the entire surface using Ptex maps.
Created a Guide Animation with a new Hair System. Using the Guide Curves used for the xGEN primitives, it was possible to convert them to NURBS curves for animation.
Sculpting the iris detail in Zbrush using brush tools and alphas. A displacement map could then be exported.
ZBRUSH SCULPT
DISPLACEMENT MAP
For this method to work, the eye model had to be split into groups: Iris, Sclera and Iris rim.
The Iris and Rim details were re-sculpted to capture a much more accurate and realistic eye. This was encouraged by collecting a large series of Iris reference images.
SCULPT OF IRIS AND IRIS RIM
MODEL OF SCLERA
IRIS AND IRIS RIM DIFFUSE
IRIS AND IRIS RIM DISPLACEMENT
SCLERA DIFFUSE
SCLERA DISPLACEMENT
SCLERA AND CORNEA MASK
The final rendered images replicated a real-world eye, with accurate refraction and reflection and a realistic overall appearance, however, this method offered little versatility on the attributes of the eye and it was very difficult to make changes on the shape and look of the eye when combined with the final mesh.
A new approach will be looked into for a better alternative for rendering a realistic eye with the final head model.
The 1ST attempt offered limited control on the attributes and properties of the eye which was why it was decided that it was best to follow a different approach.
To allow the Iris to be seen through the Cornea, a mask was used. This mask needed to be inverted and attached to the ‘transmission strength’ attribute which was done by using an alRemapFloat node and swapping the input and output values from the Bias and gain attribute.
For the eye to receive shadows, the Opaque setting must be disabled under the Arnold tab of the geometry. Now the eye does not consist of just one solid colour.
The specular attribute was then turned on and the Microfacet Distribution was converted to GGX as it allowed for a sharper highlight than Beckmann and provides a much more realistic appearance.
After attaching the Sclera diffuse and Sclera Bump map onto the diffuse colour and bump map attributes, it is possible to see the texture of the eye.
The AlRemapColor node allows easy colour correction and change of exposure and hue through its node attributes which is very useful to create a realistic eye render.
To check the refraction of the Sclera and transmission of the cornea, the Iris geometry was unhidden and a new Alsurface shader was applied with no maps.
SCLERA BUMP
SCLERA DIFFUSE
IRIS DIFFUSE
IRIS DISPLACEMENT
The refraction of the eye has been set to 1.376 and it clearly shows an accurate representation of the iris bending outwards from the cornea.
However, the bump map appeared to have caused unrealistic veins on the eye. This was removed by turning the SSS attribute on the Sclera and Cornea Shader and converting the Mode to Empirical.
In addition, to ensure that no bumps appeared in the cornea, an AlRemapNode was used, in combination with an inverted Sclera Mask to isolate the specific region of the eye.
FINAL EYE RENDER
For this process, a new geometry was used to avoid generating hair primitives across the lips and the eye lids. Using the XGEN’s modifiers, it was possible to change the attributes and characteristics of each hair strand to get a subtle look that compliments that lights by shaping the contours of the face.
The Peachfuzz hair primitives should not be overpowering, or strong in appearance. It should be light and thin and should only be fully visible when light bounces off them.
XGEN: DYNAMIC HAIR
By adding a passive collision constraint on the head mesh, the curves were restricted from passing through. In addition, the Space attribute of the Nucleus had to be changed, so that the unit scale of the model matched Maya’s working unit scale.
To adjust the dynamic properties of the hair, attributes found in the Hair Systems were tested. Restricting the amount of deformation created, the stretch resistance and compression resistance were increased. By doing so, gravity and other factors would have less influence on the curves, for a more believable and realistic movement.
From here, the hair would appear to just fall and sway, having little restrictions on the appearance. To keep the volume and style of the hair, the Start Curve Attract attribute was increased to encourage the hair to keep its initial shape.
The Nucleus’ attributes allowed the introduction of wind and gust effects on the Dynamic hair curves which can be found in the Gravity and Wind panel.
To simulate these dynamic changes, a key was set on the Wind Speed and Wind Noise attribute.
The hair primitives required attachment to the new NURBS curves generated by the hair system before it can be previewed in XGEN.
For this to work, all the curves were selected from the Hierarchy and were then attached to the Hair System found in Guide Animation in the XGEN tab.
There are two ways to export the dynamic hair animation from Xgen: exporting the pre-determined hair curves animation using nCache for iterative simulations or exporting as an Alembic Cache which pre-records the movements of the hair guides.
EYES: SCULPT
EYES: TEXTURING IN SUBSTANCE PAINTER
Projecting reference textures onto the mesh.
Quality and resolution of texture maps greatly influence the quality of the model. In addition, it was difficult to get an accurate projection throughout as it required intricate details.
Diffuse texture maps were created for the Sclera, Iris and Rim models with an individual displacement map to create realistic surface elevations from the veins produced, as well as the Iris effects. Unlike Bump maps, the elevations and depressions are simulated for true surface relief, rather than flat, unrealistic visuals.
Masks were also created to control opacity and the visibility of the Iris through the Cornea.
EYE SHADERS: ARNOLD
Four Arnold shader nodes were created for each geometry of the eye. To ensure that each shader displayed accurate simulations of the eye, their attributes were configured to match real-world properties.
An important aspect to take into consideration was the Cornea’s index of refraction. The cornea itself is the transparent membrane that forms on the surface of the Sclera. Its index of refraction is 1.376 and this was important to know as the refraction will simulate a real-life eye.
Fresnel was also turned on as it will produce a reflective effect on the models.
Index of refraction of the Cornea (image taken from hyperphysics)
Using a Blendnode in the Hypershade, it was possible to combine two texture materials together and the node will blend between the two, depending on the requested value.
DYNAMIC EYE RIGGING
Before the eye rig was created, joints were created to form the head, neck and jaw. Attached to the neck joint were two eye joints. These eye joints were then parented to the Jawbones.
Extra joints were parented to the eye joints which formed the upper and lower eye lids.
The eye joints were then bound to the skin. The binding process combines the joint and the geometry together and the movement will be determined by the paint weight influences of each joint.
Once bonded, the influence of the strength of each joint can be determined through the paint weights tool. Each joint was selected and painted individually to get the best results.
It was also helpful to animate the joints in a position to show the movement and restrictions and show possible errors.
For the movement of the eyes, constraints were used. First, extra eye joints were created as part of each eye. These eye joints were then constrained together using Maya’s Point function.
Once completed, the new eyes joints were bonded to the eye geometry.
IK Handles were then created the new joints.
NURBS curves provided the best method for controls of the eye movement which was then parented to the IK handle of each Eye.
For the eye to move free in the eye socket, with the skin deforming around it, expressions were used to calculate the movement of the joints which affects the corresponding joint’s movements.
The expression required needed to determine the movement of the rotations of the upper and lower eye joints in relation to the original eye joints. This is difficult as the movement of the skin must be realistic.
).rotate(Z/Y) = (The expression used for each joint was, (eyejointeyejoint).rotate(Z/Y) * value 0.8. This value determines the subtle movement of the eye. Due to the eyeball having a stretching point that does not bypass the value 1, 0.8 provided an accurate value for a delayed movement of the eyelids with causing a slight stretching of the mesh.
For the opposite eye, the expression required minor changes for it to work accurately. The rotation of Y value must be multiplied by -0.8, to invert the movement. This ensured the eyelids moved in correlation with the eye joint.
DYNAMIC EYE RIGGING: TEST SIMULATION
By experimenting with different software packages, it was possible to determine the best and most efficient method to achieve realism. Overall, Mari was a much better package than Substance Painter, due to its clean and accurate results.
XGEN using geometry over masks: This method was much more effective, however, there were disadvantages. The edges of the hair would have a less natural falloff in comparison to masks, resulting in restricted flexibility and control.
To improve, the head sculpt could be more accurate, by extending the eye sockets and reducing the reduce the perkiness of the chin. The eye look development can be improved by focusing on the textures and bump maps. Further research into XGEN hair will provide an improvement on the hair appearance and behaviour, especially for the eyebrows.
Overall, the final renders displayed a realistic render of myself with appropriate levels of realism. This has been such a great experience for all aspect, following industry pipeline to achieve photorealistic renders with room for improvement.