Step 1. Data Cleaning in ZBrush

As explained in previous post, a 3D mesh is generated out of either “Photogrammetry” or “3D Laser Scanning” and the first step after ingestion is to clean up the generated data. I used ZBrush for 3D data cleaning. The procedure I went through is as below:

  1. Import Photogrammetry data into ZBrush
  2. Import texture, flip and apply
  3. Skin Shader 4 works well for face
  4. Use ScanCleanUI interface for a more efficient working environment
  5. Check Mesh and Fix Mesh commands in ZBrush
  6. Display> Double
  7. Ctrl+Shift select a nice area, then Visibility> Grow All then Geometry>Modify>Del Hidden
  8. Geometry>Modify>Close Holes (if possible)
  9. Convert to Dynamesh. Blur=0, Project=On, Res=4096
  10. ZRemesh (Adapt=on and Count=5)
  11. Subdivide to the number of original Dynamesh
  12. Project back at each level
  13. Do a clean-up. Clean noise and hair using Mask By Smoothness
Original photogrammetry data with temporary texture.
Original photogrammetry mesh converted to Dynamesh.

Step 2. Creating a Clean Topology Using Wrap3

The generated out of either “Photogrammetry” or “3D Laser Scanning” is a very dense inefficient 3D geometry with millions of polygon so it is actually unusable for animating. To make them usable, I have to “retopologize” them. In other word, a new low poly mesh will be generated on top of the high poly scan data. The low poly mesh will have better directed polygonal topology that matches human face muscles. To speed up the process, I used 3DScanStore base meshes to start with. The base mesh is a retopologized realistic human head that has a nice polygonal structure and a well unwrapped UV map.

Head Base Mesh has 12410 polygons and Body Base Mesh has 32076 polygons (including head that will be be replaced). I try to keep these numbers intact so the resulting mesh would be inconsistent with the rest of the pipeline.

Male And Female Multi Texture Base Mesh Bundle
3DScanStore base mesh collection. They are a good starting point for retopology process.
3DScanStore base mesh comes with a very clean unwrapped UV mapping.

I send both base mesh (from 3DScanStore) and 3d photogrammetry mesh (from ZBrush) to a program called Wrap3. This program reshapes and “morphs” the base mesh to make it match the scanned data. In another word, a nicely retopologized head mesh is getting reshaped to look like scanned data, i.e. the actor. The procedure in Wrap3 is as below:

  1. Import 3DScanStore base head mesh (12410 polygons) and scanned data
  2. Base on right, Target on left
  3. Add SelectPoints and add adjacent points in both base and target
  4. Add Wrapping and compute
  5. Add SaveGeom
Importing photogrammetry data into Wrap3.

The process of wrapping a base mesh onto photogrammetry data in Wrap3.

Step 3. Fine Tuning the Shape in ZBrush

Basically I have to reshape and reformat head to the shape of original head. I use a lot of real life references at this stage to make the digital version as close as possible to the actual human face. I can use “project” tool in ZBrush sometimes as well.

Clean retopologized head is sent back to ZBrush for further cleaning and reshaping.
The base mesh textures can be combined, painted and tweaked to match actor’s skin pattern then can be sent to ZBrush for referencing purposes.

Step 4. Attaching the Head to the Body in Maya and ZBrush

I used 3DScanStore human body base mesh again for this stage. There is much less attention on body details than facial. A tiny flaw on face will be spotted immediately but for the body, as long as the approximate proportions would be achieved and specially as most of it is covered by clothing, then the process of generating a proper mesh for the body is streamlined. The procedure for attaching the body to the head is as below:

  1. Import wrapped head
  2. Import base body mesh
  3. Connect them together using “Union”
  4. Tweak body proportions in Maya using real life references
  5. Arrange UVs to make a UDIM
  6. Deepen eye sockets in Maya
  7. Send combined mesh to ZBrush and re-tweak it
  8. Send it back to Maya
Ultimate Textured Male Base Mesh
3DScanStore body base mesh. It is a good starting point for modelling the body.

Below there are some real life references I photographed and used it in modelling procedure.

In Maya, I deleted the head of the base mesh from UV line, I deleted the same area of base mesh from neck downward. Then merged head and body together.
Sculpting and reshaping in ZBrush is much easier so I sent the combined body and head to ZBrush for final reshaping and proportion adjustments.

Step 5. Modelling Eyes, Eyelashes, Teeth and Tongue in Maya

Teeth and tongue are hidden parts and are revealed briefly only when the character talks. That is why most CG artists use a base tongue and teeth model and reshape and re-texture them when needed. I also used generic meshes for eyes, eyelashes, teeth and tongue. Re-positioning eyes and eyelashes needs some work. The eye colour can be easily adjusted by adjusting eye texture colour.

  1. Import base meshes for eyes and eyelashes, adjust them accordingly
  2. Adjust the colour of the body texture in Photoshop
  3. Adjust the colour of the eyes texture in Photoshop
Eyes and eyelashes are adjusted in Maya.
Eye colour textures are adjusted and tested in Maya and Photoshop.
Base meshes are used and reshaped for eyes, eyelashes, teeth and tongue.

Step 6. Merging Head and Body Textures in Mari

The final stages of texturing will happen in a powerful texture painting program called Mari. As the head and body textures are two totally different sources, a lot of adjustment is required to make them merge seamlessly. First the tone and colour tonality has to be matched. So far a couple of adjustments has be done in Photoshop but the final stage of colour adjustment can be done in Mari. Then using “clone tool” in Mari, the textures around the attachment area of the body and neck will be merged.

The area where head attaches to the body needs to be texture painted for a seamless texture integration.
After texture painting using Mari, the head and body textures are integrated.

Colour channel is not the only channel that needs to be painted and merged. A very important channel that will be used in shading as well is “Displacement Channel” which defines pores and geometrical height variation of skin details. As shown below, displacement map is also texture painted in Mari. Both body and head bases come with a default displacement map which has to be painted according to the character features and also has to be integrated like colour map.

Painting displacement map in ZBrush.

Step 7. Hair Modelling and Grooming in Houdini

Based on my industry background and also the research I did, there are two major tools to develop a realistic human hair: Xgen tools in Maya and Hair Grooming tools in Houdini. I had worked with XGen on a couple of projects, including Niki character for Kara Technologies. The creation and grooming process for a realistic hair in XGen is fairly fast and efficient but when it comes to animation and dynamic simulation, XGen becomes very cumbersome, full of bugs and creates a lot of unpredictable problems.

Niki character, modelled in ZBrush and Maya and the hair modelling and grooming is done using XGen and rendered using Arnold.
© 2018 Kara Technologies Ltd.

Considering all the issues I experienced working with XGen and also as I am already using powerful Houdini for the great range of simulation and effects in Stella project, I decided to experiment the newly introduced hair grooming tools in Houdini. The results has been very successful both in modelling and grooming progress but also in hair simulation and dynamics. This is the hair modelling and grooming procedure I went through in Houdini:

  1. Select the faces that hair requires to grow and group them
  2. Use “Add Fur” shelf icon to create hair network
  3. Inside Groom node: add a guidegroom and cut everything out. Start adding them one by one using “Plant Guides” then reshape them and populate the head.
  4. Cut, lift, brush, climp and part hair guides to the desired shape
  5. Inside Groom note, at the end of the guidegroom nodes, add reguide and increase the number of guides
  6. Then add guidecollidevdb to make them lift from surface more
  7. Then groom the guides again a bit
  8. Inside Hairgen node start with hairclump
  9. Then add Frizz, Set Lift and other needed guideprocess
  10. On the master Hairgen node, in Render tab, switch the first popup menu to “Use SOP Geometry”
  11. In Redshift render setting under Redshift tab then under System tab, increase Hair Tesselation
  12. Add Whitehair at the end if needed
Adding few hair guides and shaping them in Houdini. These hair guides will direct the hair strands.
Hair guides are multiplied using reguide node.
And then hair gen is added to create the hair strands.
By adding extra clump, frizz and other notes, add the last grooming features to the hair.