Long Straight Hair Breakdown
Overview
This project is intended to show a complex hair modeling workflow that results in a realistic, production ready hairstyle that can be animated and/or simulated while still being easy to tweak and art-direct.
The idea behind this project is to have a low resolution, small set of hair guides that will be used as the base of the groom, and have a high resolution dense set of guides that will be used for clump sculpting.
To accomplish this, we use edit guides to plant some guides and define the base shape of the hair. Next, we use hair from Guides to to interpolate hairs over those base guides, which are then converted back to guides to use as our dense guides for clump sculpting.
Finally another hair from guides is used for the final hair distribution and many details are added on top, including clumping and frizz.
This tutorial comes with a sample scene for you to study and experiment. The scene was created with Ornatrix V4 in Maya 2022.
This tutorial is intended for beginners, but it does not go into all the details, including only the information needed to explain the sample project. Please use the links found across this article to know more about the operators and tools used for this project.
If in doubt, please ask us questions in our forums, Discord channel or our social media.
Base Guides
To create the base guides, we start with a blank hair object where we can add some roots manually around the scalp, and then comb them using the combing brushes to define the base shape/silhouette of the groom.
To create a blank hair object:
Select a scalp mesh
use the Add Hair to Selection button to add a hair object to the selection.
in guides from Mesh reduce the root count to 0.
Plant some guides:
In edit guides, use the Plant Guides tool to plant some guides.
Scatter the roots uniformly around the scalp.
Make sure to define the parting line.
Generating the dense guides
Here we use a Hair from Guides to generate a small amount of hairs from the base guides. These hairs will be then converted back to guides to be used for the final hair interpolation and clump sculpting.
The default settings give us a good distribution of root, but we can do some things to improve the actual hair interpolation.
The roots are distributed evenly, but we need an even interpolation as well to get good clumping and a good hairline. For this, we can do two simple things:
1 - Add a Distribution Multiplier map:
This is a black and white texture map that we can use as a mask to determine where the hair roots should be scattered.
Use your preferred 3D painting application to paint a Distribution Multiplier map and connect it to the Distribution Multiplier parameter in Hair from Guides.
The white areas of the map represent the area where the hair should grow.
Make sure to paint a sharp border between the black and white values. Use 100% black or 100% white values for better root distribution. Any transitions can be added later in a length and width map.
[Insert Image]
2 - Define the hair parting:
Our hair interpolation algorithm will work better if we tell it where the hair should grow, but also if we define the hair parting(if it has any, in this case, it does).
There are several ways to define a parting, in this case we used the parting planes.
In Hair from Guides, go to the Parting section and use the Parting Editing tool in Add mode to draw some planes to define the parting.
[Insert Image]
You can also use a texture map for the parting, or even strand groups. If you use a texture map, paint a texture with contrasting colors for each part.
Remember, this first Hair from Guides node is being used to generate our high density guides, so in this step, use the Render Count and viewport Fraction parameters to determine how dense you want it.
Is better to set the viewport Count Fraction to 1(Which is 100%) and use the Render Count to set the density. This is basically how high you want to resolution to sculpt your clumps, or how many clumps you want.
This is how dense I set it in this scene:
[Insert Image]
Base Clumps
We need some base clumps that we can then subdivide to create smaller clumps. For this, we generate clumps based on the Base Guides:
Add a Clump node,
Reduce the Flyout Fraction to 0 to get perfect clumps,
Set the Clump Create Method to Guides and click Create Clumps:
[Insert Image]
In this demo we left the rest of the settings as default, but feel free to play with the clump Amount, the amount ramp and even twist to improve the final result.
Guides from Hair
Now our base guides and dense guides are ready. The base guides can be used for animation or simulation and the dense guides for hair interpolation and clump sculpting.
However, in order to use the dense guides for hair interpolation, we need to convert them back to guides. This is because the Clump operator(As of Ornatrix Maya version 3), requires guides to use the Guides clumping mode.
To convert hairs to guides use the Guides from Hair operator. This operator does not have any settings. It just does a simple conversion from one data type to another.
[Insert Image]
Tweaking the dense guides
Is better to shape the groom using the base guides, but it may be needed to do some tweaking to the dense guides. If needed, use Edit Guides above Guides from Hair to edit the guides.
When editing the dense guides, try to not take it too far away from its corresponding base guides. Any big changes to the hair shape or silhouette should be done at the base guides level because there is where the animation should be inserted.
At this point you can do small editing, add strand groups, strand channels, etc.
Generating Dense Hair
As before, use Hair from Guides to interpolate hair, but this time this node will use the dense guides. In this node we generate the final hair density that will be detailed and rendered.
Most of the settings will be the same as before. You can copy-paste it to avoid connecting the Distribution Multiplier map again.
Set the desired hair density as before, use the same Distribution Multiplier map and Parting map if you used one or add the parting plane as before.
Length
Use a Length node to adjust the hair length. For this demo, we let the Value as 1 and use a Value Multiplier map to set the strand length around the hair line. For instance, the hairs in a human head are shorter at the borders of the hairline, the nape and the sideburns.
As before, use your preferred painting application to paint a texture map. This time create a smooth transition between values, we want the hair length to change smoothly:
[Insert Image]
Finally, play with the randomization values to randomize the hair length a little bit. You can set a minimum and maximum length as a base, then randomize as desired.
Clumping
Here we generate smaller clumps based on the dense guides. This will create the smaller clumps that you can sculpt using the combing brushes. This adds another layer of details to your grooms that allows you to get the final look closer to the photo references.
Add another Clump node and generate guide clumps using the same settings as before. Feel free to copy-paste to previous clump node to save time. However this time we want to enable the Add Clump Index Channel checkbox.
This feature will generate a strand channel containing the clump IDs of the generated clumps. These IDs will be used for sub-clumping in the next Clump node.
[Insert Image]
Our clumps look good, but they are very tight, we want to add a bit of volume to them.
For this, add a Frizz node below the Clump node and remove all the frizz by setting everything to 0. It needs to be below the Clump node because the order of operations matter. This way the hair will get some volume and THEN will be clumped.
Adding the Frizz node above the Clump node will destroy the clumps instead of opening them.
Now, slowing increase the Amount value and you will notice how the radius of the clumps starts to increase. Play with this value and the Amount Curve until you get the desired results.
You may want to decrease the clump amount at the tips of the hair using the Amount Ramp Curve in the clump node. This will also open up the clumps a little bit for a more realistic result.
You can probably accomplish the same results by playing with Amount and Amount Curve in the Clump node itself, however sometimes if better to have a separate control for every detail in the groom.
[Insert Image]
Sub-Clumping
Here is where we take the big base clumps and subdivide them into smaller clumps.
Add another Clump node.
In the Region Channel list, select the Clump IDs channel generated in the previous Clump node. This is to ensure that this new Clump node uses the big clumps as base, subdividing the existing clumps instead of creating new ones.
This is what we call Sub-Clumping.
Enable Respect Parting to avoid clumping hairs between the two sides of the parting.
Set the Clump Create Method to Random to generate random clumps.
Set the amount of clumps in the Clump Count parameter and click Create Clumps.
Keep playing with the Clump Count parameter until you get the desired results.
[Insert Image]
As before, we use a Frizz node to add some volume to those smaller clumps. Add a Frizz node, set all the parameters to 0 and slowly increase the Amount parameter until you get the desired results.
At this point we are closer to the final result, and adding volume will change the silhouette of the hair quite a bit, so consider using very low values, or not adding volume at all.
[Insert Image]
Play with the Twist parameters to twist the clumps a bit and adjust the Twist Ramp Curve to modulate this effect.
The twisting effects helps to break out the clumps a bit, giving it a more natural look.
Play adding a random noise texture to the Twist Multiplier parameter to randomize this effect.
[Insert Image]
Fine details
It is time to add the final details. Here is where we add the finer details that will give the groom the final touches.
In this section we use a few Frizz nodes to add noise and some little imperfections to the groom to break out the silhuette just a bit and to break out the specular in the clumps.
First, we need to add some outlier hairs:
Add a Frizz node and set the Amount parameter to 0. We just want to add some high frequency details, we don't want to add volume.
Enable Preserve Strand Length so we don't change the hair length and preserve as much as possible the overall hair shape.
In the Outliers section, use the Fraction parameter to set what percentage of the total amount of hair you want to be outliers.
Use the Frizz Amount to set how much you want to frizz those outlier hairs.
Enable Add Outlier Channel. This option generates a strand channel containing the outlier strands. This channel will be used above to add more deformations to the outlier hairs.
Play with the Amount Curve to set the Frizz Amount for the outliers from the roots to the tips.
[Insert Image]
Now, we want to continue building over those outlier hairs. Remember the Outlier Channel created above?
This channel is called FrizzOutliers. We want to allow other nodes to affect those specific strands, but this, we need to convert this channel into a Strand Group:
Add a Generate Strand Data node.
Set Target Data to Strand Groups. Node that this will reset all the strand groups starting from this point in the Operator Stack. This means that strand groups created before this point in the stack will not be accessible above it.
Those strand groups still exist, but only below Generate Strand Data.
Set Generation method to Se Expr.
Open the Expression Editor and click List to see a list of all the available strand data in this groom:
[Insert Image]
Notice that the names of the available strand channels are prefixed with "sc_". The channel that we need is sc_FrizzOutliers.
Type the name of the channel in the Expression Editor and click Apply to compute the operation. This creates a new strand group with index 1 containing all the outlier hairs.
Now you can use node to affect those specific hairs. In this case, we add another Frizz node to add more noise to those hairs:
Add another Frizz node,
Set Strand Group to the index of our generated strand group, which is 1.
Set everything to 0 and use only the Scale parameter to deform the outlier hairs.
In this demo we used a really high value of 100.
Play with the Amount Curve to modulate the effect from root to tip.
[Insert Image]
Finally, we use one last Frizz node to break out a bit of the flow and the specular of the clumped hairs:
For this to work, we need enough resolution in the strands to add high frequency noise without creating sharp corners in the strands.
In reality, a hair strand is not perfectly straight and smooth. The idea is to add very small frizz but with very high frequency to create an imperfect hair strand. This effect will be added in a per-strand basis, adding to the realism:
[Insert Image]
Add a Detail node to increase the point count/resolution of the hair strands.
Set a very high Render Point Count for the render(or enough to get a smooth noise) and a very low in the View Point Count(For the viewport).
I used a value of 200, so having a lower value in the viewport will help to reduce the performance hit.
We used a Smoothing Point count of 20 and a Smoothing Amount of 1.
Add another Frizz node and set the parameters in the Outliers section to 0. In this case we don't want more outliers, only frizz.
Enable Preserve Strand Length.
Set a high value for the Scale parameter and a very low value for the Amount. This allows us to have high frequency noise with a small scale, if that makes sense.
Keep playing with those parameters as well as the Amount Curve until you get the desired results.
And this is what we got:
[Insert Image]
Final Thoughts
From here, you can continue playing with the parameters to create new and better effects. Some of the nodes can be baked to improve performance, or perhaps you can come up with a more simple and optimal hair stack.
With this workflow, you should apply the animation operators to the base guides, right above the nodes that generate the base guides. Those are the guides in charge of moving the whole groom.
The dense guides should only be used to sculpt the clumps with finer details.