Houdini Procedural Hair Cards for Game Meshes

Who hates hand painting hair cards.  Never again!  I’ve made a Houdini Digital Asset (HDA) to help alleviate that and create automatically generated and textured hair cards from Houdini’s built in hair grooming system.  Yes, if you’re into real time / game meshes, you CAN use Houdini’s Hair system after all.

DOWNLOAD LINK

The Psynema Hair Card Houdini OTL file can be downloaded HERE.

Or it also can be downloaded on Orbolt.

PREPARATION

The Hair Card asset only requires the free version of Houdini (Apprentice) and Substance Designer for baking an opacity mask.  More importantly, Substance Designer provides group baking by mesh name, which Houdini doesn’t do.  Group baking by mesh name isolates baking to specific meshes in a 3D scene as opposed to baking everything high poly to everything low poly.  This is CRUCIAL to baking a high poly hair mesh to low poly hair cards.  As you can imagine, baking an entire head of hair onto a cluster of hundreds of hair cards would produce a mess.  Substance Designer’s “Bake By Mesh Name” feature allows us to bake individual cards with their high poly clump counterparts assigned to them without interference with surrounding hairs that belong to other hair cards.  Houdini doesn’t allow this so that’s why we need Substance Designer to get a cleaner bake.

3D model with the High Poly Hair Mesh created by the Hair Cards Asset.
3D model with the High Poly Hair Mesh created by the Hair Cards Asset.

 

3D model with the full low poly hair card wig, with each card procedurally generated from Houdini Hair Generate nodes. No hand modeling or hand placing poly strips required at all.
3D model with the full low poly hair card wig, with each card procedurally generated from Houdini Hair Generate nodes by the Hair Cards asset.

 

Quick render in iRay with the final textures baked in Substance Designer. That's not hand painted hair. It's not hand placed nor hand modeled hair card poly strips. That's PROCEDURAL hair cards built automatically from Houdini's hair grooming system and baked in Substance Designer.
Quick render in iRay with the final textures baked in Substance Designer. That’s not hand painted hair. It’s not hand placed nor hand modeled hair card poly strips. That’s PROCEDURAL hair cards built automatically from the provided Hair Cards Asset I’ve built, all based on Houdini’s hair grooming system and baked in Substance Designer.

To get started, make sure you have Houdini and Substance Designer installed.  Again, the apprentice version of Houdini (the free version) WORKS with this just fine.  So if you use another 3D software, you can still make hair cards without breaking the bank.  You would only need to buy Substance Designer.  Luckily it’s cheap, has a free 30 day trial, and if you’re reading this, you probably already own it.

If not:

Houdini can be downloaded at https://sidefx.com/download/

Substance Designer is at https://www.allegorithmic.com/products/substance-designer

 

Download/Buy/Install Houdini Apprentice and Substance Designer.  Next download the Hair Cards asset and put it into your Houdini OTL folder.

Drop the asset into Documents>Houdini 16.0>OTLs or wherever you store your assets.
Drop the Hair Cards asset into Documents>Houdini 16.0>OTLs or wherever you store your assets.

If you’re new to Houdini or its hair generation system, please check out this tutorial provided by SideFx.

While it may appear intimidating if you’ve never worked with hair before, it’s fairly easy.  With the above tutorial, you can get a basic hair style within 15 minutes by following the video above.  You create Guide Curves, which are a small amount of curves that represent a basic direction for the hairs to go.  You then input the Guide Curves node into a Hair Generate Node as shown in the video.  The Hair Generate node uses the guide curves to place thousands of hairs and determines how they’ll be shaped by interpolating in between the guide curves.  You will then take your Hair Generate Node, then feed it into the Hair Cards asset.

The overall pipeline is:

Guide Groom Curves node > Hair Generate node > the Hair Cards asset.

I suggest not creating the entire hair style with a single Guide Groom / Hair Generate setup.  It’s easier to separate the hair style by groups, such as top hair, back hair, side hair, bangs etc.  This way when you comb the hair it’s not interfering with hair going in different directions.  It’s also much easier for the hair card asset to generate accurate card shapes and proper angle flow when you have separate hair groups, based on planar directions.

Use separate hair objects for each planar direction of hair to minimize sharp curves along the scalp. I've separated the entire hair style above into four groups: bangs, back hair, side hair, and top hair...ie planar directions of hair. This optimized combing the hair and gives better hair card generation. There's a guide groom node and a hair generate node object for each hair section.
Use separate hair objects for each planar direction of hair to minimize sharp curves along the scalp.
I’ve separated the entire hair style above into four groups: bangs, back hair, side hair, and top hair…ie planar directions of hair. This optimizes combing the hair and gives better hair card generation. There’s a guide groom node and a hair generate node object for each hair section.

VERY IMPORTANT:  For each Hair Generate object node, dig inside and make sure you have a HAIR CLUMP node.  This groups bundles of hair into id groups and is meant to mimic the way real hair clumps together.  The Hair Card asset NEEDS THIS to operate, so make sure each Hair Generate Object’s interior node graph includes a Hair Clump node.

Clump Size will determine how many hair cards there are.  To big of a size and you’ll have oversized hair cards that don’t represent your hair mesh properly.  Too small and you’ll have too dense of a mesh to be considered low poly.  Try .02 as a starter size as suggested in the pic below.

Hair Clump node inside the Hair Generate Object. The Hair Card asset NEEDS these to be included in each Hair Generate object's node graph to operate properly. I suggest .015 to .03 size ranges. The rest is up to you're tastes.
Hair Clump node inside the Hair Generate Object. The Hair Card asset NEEDS these to be included in each Hair Generate object’s node graph to operate properly. I suggest .015 to .03 size ranges for the “Clump Size” parameter in the hairclump node. The rest is up to your tastes.

Now that you have your hair set up on your model, let’s dig into the Hair Card asset.  It has three tabs and is fairly simple.  The 2nd and 3rd tabs, “Adjust Fitting and Detials” and “Vertex Colors”, are optional with default values explained later.  The important stuff is in the main tab, which we’ll start explaining below.

 

MAIN

Main Hair Tab for the Hair Card asset. Be sure to set a proper subdivision level for the Houdini Hair strands. By default, they are NOT subdivided. Hair Generate nodes only DISPLAY hair strands as subdivided but aren't actually subdivided. Be sure to turn off "display as subdivided curves in the Hair Generate node to see what the strands actually look like. Then in the Hair Card asset, set your subdivision level to actually subdivide the hairs. Failure to do so and you'll have a disappointing export.
Main Hair Tab for the Hair Card asset. Be sure to set a proper subdivision level for the Houdini Hair strands. By default, they are NOT subdivided. Hair Generate nodes only DISPLAY hair strands as subdivided but aren’t actually subdivided. Be sure to turn off “display as subdivided curves” in the Hair Generate node to see what the strands actually look like. Then in the Hair Card asset, set your subdivision level to actually subdivide the hairs. Failure to do so will result in a disappointing export.

High Poly Subdivision:  The hair strands produced by Houdini’s Hair Generate object node are NOT subdivided in reality.  They are only DISPLAYED as subdivided.  In reality they are a low poly angled mess if you export without subdividing them.  So you MUST subdivide the high poly hair curves in order to get a good result.  Set it as high as you need and as much as your computer will allow.  Again, make sure to turn OFF “Display as Subdivided Curves” in your Hair Generate nodes to get an accurate representation of what your hair really looks like.

Resample Hair Cards:  The Hair Card asset takes two hair strands, generally at the extreme edges of a hair clump, then skins them to make a hair card in the general shape of a hair clump.  Like I mentioned before, you’ll need to subdivide the hair strands, which leaves a small problem for making hair cards:  the subdivision of the hair strands may make the hair cards have too many polygons for games and real time playback.  Conversely, the hair strands, since they’re subdivided curves, only need a few points to make a smooth curve, whereas the cards are not subdivided and if they are being made from hair strands with few points, they may be too low poly and appear overly angular.

We can remedy this by a resample node located in the belly of the Haird Card’s node graph, which is accessible by the “Resample Hair Cards” parameter.  Adjust the slider to determine how many segments the hair cards will have, leaving “Resample by Polygon Edge” unchecked for most cases.  Check “Resample by Polygon Edge” if you have specific needs to match the hair shape and need super fine resolution.  Checking this box is, for the most part, redundant.  I left it exposed for convenience just in case.

Primitive Sort:  You’ll see this starts off with a drop down list of various sorting methods.  While it looks perplexing, it’s fairly simple.  Each hair clump is processed and we try to find the outermost hairs of each clump along a specific axis to generate a hair card that matches the shape of the hair clump.  In simpler terms, we find the left most hair, then the right most hair, then we use them as a spline for the edges of a hair card.  This insures all the hairs in the middle will be covered by the hair card and be hit by rays when you bake.

Hair Clump before being processed by the 'Primitive Sort' option. We need to find the outermost hairs on the edge of the clump to shape a low poly hair card.
Hair Clump before being processed by the ‘Primitive Sort’ option. We need to find the outermost hairs on the edge of the clump to shape a low poly hair card.
Hair clump with the middle hairs deleted and only keeping the two edge hairs. These hairs will be skinned / poly bridged to form the hair card mesh. We want the outermost edge hairs to catch all the hairs in the middle and so the card has a proper flow of the entire clump.
Hair clump with the middle hairs deleted and only keeping the two edge hairs. These hairs will be skinned / poly bridged to form the hair card mesh. We want the outermost edge hairs to catch all the hairs in the middle.

If you sample center hairs, then there’s nothing to give information on the width of the hair clump and how the width changes as you move from the roots to the tips of the hair clump.  So we need to do a primitive sort along a proper axis to determine which are the best two hairs to use as a spline and skin a hair card from them.  The drop down list attempts to find the best axis from which to sort each hair strand and then we isolate primitives 0 and $N (first and last hairs along an axis if you’re new to Houdini) giving us the first hair and last hair along a chosen axis.  This axis generally runs along X or Z axis variations.  It is ideally perpendicular to the head geometry if you draw a line from the center of the clump to the center of the head.

The thing with finding a proper axis is this:  heads are curved.   It’s often not as simple as an X, Y, or Z axis.  We need ways to dynamically change and measure the axis as we go around a curved head.  The drop down list provides various sort options that try to find the proper vector method to find a good dynamic axis.  Let’s go over the options.

Various sort nodes for finding the edge hairs of a hair clump to create a properly shaped hair card from. Experiment with works best for your scalp shape.
Various sort nodes for finding the edge hairs of a hair clump to create a properly shaped hair card from. Experiment with works best for your scalp shape.

For starters, IGNORE the following options: No change, Reverse, Random, and Shift.  This is driven by a Sort node within the hair card asset.  I tried removing those options from the HDA’s menu system for cleanliness, but the asset wouldn’t work when removed, so as this is the beta release, we’ll just have to live with them in the drop down list for now.

The options to use are:

By Axis (By X, By Y, Bz):  This is a nice start if you separated your hair objects by axis – bangs by x, sides by z, back by x etc.  You’ll rarely use “By Y”, but it’s there if the need arises.  This is the most straightforward method and why you should separate hair objects according to axis planes:  A ‘Bangs’ hair object is along the X axis so it will be easy to find the left and right most hairs since they’re literally the left most hair in a clump, then the right most hair in a clump.  A ‘Sidehair’ hair object would be along the Z axis, so the two edge hairs will be the front most hair then the back most hair.

However like I said before, a head is curved and not a box.  Sorting by an X, Y, or Z axis yields decent and stable results.  However, it sometimes can look “boxy” and produce a ‘steppy’ or ‘ribbony’ effect as the hair cards will not be tangential to the skin.  It often works just fine, especially for side hair as that’s often flat enough.  But for curvier heads try the other options below.

Along Vector:  Input your head geometry into the ‘Vector Object’ field.  Then all the hairs will be sorted on a plane perpendicular to the center point of the given object, which is almost always going to be a head…or other body party.  So it will wrap your hair cards around a curved head, roughly following the topology, so long as the center point of your head is reasonably in the center.

You can also choose a point in space instead.  Input vector coordinates into the “Vector” parameter and leave the ‘Vector Object’ blank.  Then you can move the point in space my middle mouse dragging the X, Y, and Z coordinates.   Then watch as your hair cards align to face that point in space.  ‘Along Vector’ is good option with its only fault being that sometimes it will align the hair cards sideways being on a 90 degree angle perpendicular angle to the skin.  Which means it’s slicing the head as opposed to wrapping around it.  This will happen if you’re not careful with your vector coordinates.

Proximity to Point – similar to ‘Along Vector’ by object but orders the primitives (the strands of hair) by proximity to the center root.  Each hair clump will have its VERY OWN center point to sort the hair strands with this method, as opposed to a single point in world space or by a head object.  This center root point is one I defined by averaging the locations of the roots to get a central point of the hair clump, located within the guts of the Hair Card asset.  Generally the hair strands furthest away from this center point will be two edge hairs.  You can input your own point voo-doo, but the central root point average is the most logical so I suggest leaving it to the default.

Spacial Locality – a procedural, built-in way of doing things similar to Proximity to Point and usually gives similar results with minor offsetting variations.  Give it a try and see if it works for you.

By Attribute – great if you want to add attribute magic of your own.  Try the “skinprim” attribute which the Hair Generate nodes provide you with as a starter.  ‘Skinprim’ will be listed in the drop down menu.  This often does a good job of simulating the above methods but using the skinned mesh of your character’s head VDB collision as a reference.  Again you can make your own attributes for advanced Houdini Users.  You could paint patterns on your scalp and increase or decrease the painted attribute as you desire then the attribute would appear in the drop down list under ‘By Attribute’.  The attributes in the drop down list will most likely be a vector, so the ‘Component’ option allows you to select which portion of the vector, with 0 being X, 1 being Y, 2 being Z etc.

That concludes the Primitive sort options.  The hard part is over.  Now the last parameter in the main tab is:

Custom Group Name:  Merely input a descriptive name for your hair object.  The Hair Card Asset will take care of the rest.

Replace the default "CustomGroupName" with a name of your own, usually describing the hair object, such as 'Bangs" or "Sidehair". The Hair Card asset will procedurally generate a group for each hair card and high poly hair clump based on this name.
Replace the default “CustomGroupName” with a name of your own, usually describing the hair object, such as ‘Bangs” or “Sidehair”. The Hair Card asset will procedurally generate a group for each hair card and its partner high poly hair clump based on this name.

 

A group node within the Houdini Hair asset. It procedurally sets a group name for each hair clump based on the name you chose in the "Custom Group Name" parameter in the Hair asset followed by an id number, then a suffix for the low and high versions, which Substance Designer requires to match the low poly card with it's corresponding high poly hair clump. So your group names will resemble something like this: Bangs_124_low Bangs_124_high Sideburns_324_low Sideburns_324_high Beard_1205_low Beard_1205_high In general, for the Custom Group Name parameter, just type in what your hair object is: bangs, beard, side hair etc.
A group node within the Houdini Hair asset. It procedurally sets a group name for each hair clump based on the name you chose in the “Custom Group Name” parameter followed by an id number, then a suffix for the low and high versions.  Substance Designer requires this to match the low poly card with its corresponding high poly hair clump.

This way other programs, namely Substance Designer, can recognize each card and its associated high poly hair clump as objects of their own that go together, to be baked together and ONLY BAKED together, without interference from surrounding hairs.  So your group names will resemble something like this:

Bangs_124_low
Bangs_124_high

Sideburns_324_low
Sideburns_324_high

Beard_1205_low
Beard_1205_high

And this is assuming that Bangs, Sideburns, and Beard were input into the Custom Group Name parameter for each hair object.  Each Hair Card Asset node needs their own separate CustomGroupName, so there’s no cross contamination.  Now onto the second tab:

ADJUST FITTING AND DETAILS

This section is optional with default values.  You can adjust them if you wish.  The primary objective with these are to slightly increase the hair card size relative to the hair clump and to slightly trim the high poly hair curves.  This way, they “fit”.   It insures the hair card will cover the entire hair clump while baking.  We don’t want hairs to get cut off because they extend past the hair card and have ticker tape / pom-pom looking hair.

The Adjust Fitting and Details Tab of the Procedural Hair Card Asset.
The Adjust Fitting and Details Tab of the Procedural Hair Card Asset.

LOW POLY CARDS

This section, a single parameter called ‘Adjust Card Scale’, merely increases the size of the hair card a tiny bit to create padding for baking.

HIGH POLYWIRE HAIR 

This section controls how the high poly hair mesh appears.  We run the Houdini hair strands through a polywire node within the Hair Card asset.  By default, Houdini hair strands are NOT actual 3D geometry, but are merely curves that were originally meant to be read by Mantra, but have no geometry to export.  So the Hair Card asset creates geometry for the hair, so it’s an actual exportable mesh.  Controls are as follows:

Trim Hair Length:  By default, the asset trims the high poly hairs a tiny bit for padding and so they fit in the hair card and don’t extend beyond it.  Shorten or lengthen to your desires.

Blend Trimmed Hair:  Similar to above, but blends in-between the cut hair and the original for finer control.

Hair Width Multiplier:  This basically controls how thick the hair is.  I wouldn’t stray too far from the default values as lower than .3 and you can have issues with it being too thin to render on a texture sheet without aliasing.  Too thick and it will look like noodle worms.

Start Taper and End Taper:  These are self-explanatory, but it tapers the hair to a point on the beginning and ends.  You can control where the taper effect starts for the roots and tips of the hair.  This is to ensure the hair looks like hair and not pom poms or noodles.

Most people will want variation in the length of their hair strands.  As shown in the tutorial by SideFX above, you generally would put a “Set Length” guide process node on your hair object and click “randomize”.  I advise against this, because you may overly shorten the hairs that wind up being used as the edge splines that make the hair card, where the middle hairs are longer and extend past the card.  The Adjust Fitting and Details tab should help you if you do a TINY BIT of length variation, say a few millimeters.   I suggest being restrained to get properly fitting hair cards.  You can always take your final opacity texture into Substance Painter or Photoshop and trim the hairs randomly there instead.

That concludes the second tab.

VERTEX COLORS

And finally the third tab, which is optional, called Vertex Colors.  The asset embeds attributes into the high poly hair, which are called ‘rootfade’, ‘midfade’, and ‘tipfade’.  As you may have guessed, these describe the roots, middle, and tips of the hairs.  The reason for this is AFTER BAKING, you can style the hair cards and perhaps run a few blend shapes and wrangles to say, curve the ‘tipfade’ outwards or inwards via vex scripting and curl the hair.  Or grab the ‘midfade’ attribute, peak it, and puff the middle section of the hair cards.

The reason for this is when you bake your hair, you ideally want straight and plain hair.  Curves, curls, and corkscrews will mess up your baking as you’ll have portions of individual hair cards shooting rays at EACH OTHER, intersecting the SAME HAIR STRANDS TWICE.  This will double render PORTIONS the same strands of hair and create a MESS at  extreme curls and bends in your hair.

You could alleviate this by reducing the ray length in Substance Designer, but then you run the risk of missing hairs as the rays may not be long enough.  You may not want to trial and error bake, so I suggest baking with simple and fairly straight hair, then use these attributes to adjust the hair cards.  Don’t get me wrong, you CAN do curls and basic waves, but any hair curve angle flirting with +-45 degrees should be avoided, unless you want to play with ray lengths over and over again.

Fulll low poly card wig with its high poly hair strands. Color coded with root, mid, and tip based attributes controlled via the Vertex Color Tab.
Full low poly card wig with its high poly hair strands. Color coded with root, mid, and tip based attributes controlled via the Vertex Color Tab.

By default, the rootfade, midfade, and tipfade attributes are visualized according to RGB color values.  The ‘rootfade’ attribute is assigned to red, ‘midfade’ to green, and ‘tipfade’ to blue.  Adjust the sliders to change how strong the areas are that they effect.  The Shift Mid slider moves the “midfade” attribute along the length of the hair.  The “midfade’ attribute adjusts how far the ‘midfade’ attribute extends from the center.

You can check the “Turn Off Visualization” box if you do not want the color coding.

On a side note, while on the topic of reshaping the cards post baking:

1.  An ‘island’ attribute exists which will isolate each hair card if you need it.  Just run the whole low poly card wig through a for each loop using “island” as the name parameter as opposed to by Primitive which will target individual polygons and not full cards.  Again, this is for AFTER baking.

2.  If you want to move the hair cards in a single group, such as rotating the “bangs” and increasing the size of the “backhair” you’ll see hundreds of groups labelled bangs_low_324, bangs low, 3243, bangs_low 103, etc.  You may gulp thinking you’ll have to manually select all 400 of the “bangs” groups manually for your transform node.  But simply type in bangs* (followed by an asterisk), or backhair*, or whatever the name of the group you selected in “CustomGroupName” followed by an asterisk  (known as a wildcard in code speak).  This will select any and ALL groups starting off with that name.

POST ASSEMBLY – Now that we’re familiar with the asset and you have a basic hair style with the tutorial above, let’s put together a sample node graph for exporting to Substance Designer.  Follow the pics below as a sample.

Building a final composition node tree. Get all of your hair objects in one graph by using an object merge node for each hair object. Then apply the Hair Card asset. The left output of the asset is the low poly output. The 2nd (right) output of the Hair Card asset is the high poly output. Merge the low polys together, then merge the high polys to get a final merged low poly mesh and a final merged high poly mesh.
Building a final composition node tree. Get all of your hair objects in one graph by using an object merge node for each hair object. Then apply the Hair Card asset to each hair object. The left output of the asset is the low poly output. The 2nd (right) output of the Hair Card asset is the high poly output. Merge the low polys together, then merge the high polys to get a final merged low poly mesh and a final merged high poly mesh.

Create a geo object and dive inside.  Then create an ‘Object Merge’ node for each hair object you have and input your Hair Generate nodes into them.  Plug each hair object into its own Hair Card asset.  You’ll see two outputs on the bottom of the Hair Card asset.  The first one, on the left, is the LOW POLY HAIR CARDS.  The second output, on the right, is the HIGH POLY HAIR MESH.

Input each hair object into a Hair Card asset (located in red).
Input each hair object into its own unique Hair Card asset (located in red).  The left output is LOW POLY.  The right output is HIGH POLY.

 

Use a UV Layout node for each hair object to adjust their scale relative to the other hair objects. Then merge them together adding a final UV Layout node to see the result and adjust final padding, alignment etc.
Use a UV Layout node for each LOW POLY hair object to adjust their scale relative to the other hair objects. Then merge them together adding a final UV Layout node to see the result and adjust final padding, alignment etc.

 

 

Merged low poly and high poly meshes with a final UV Layout node for the low poly and high poly, respectively. UV defaults to vertices in Houdini, but OBJ exports wants point based UV coordinates, so convert UV to points using an attribute promote at the end. Otherwise problems may occur.
Merged low poly and high poly meshes with a final UV Layout node for the low poly.  The high poly doesn’t need a UV as you may know. UV defaults to vertices in Houdini, but OBJ exports want point based UV coordinates, so convert UV to points using an attribute promote at the end. Otherwise problems may occur.  I like putting a smooth node for each high poly hair object, but it’s not necessary, and will slow down your machine.

 

Promote UV attribute from vertices to points before exporting to OBJ as OBJ will default to point based UVs.
Promote the UV attribute from vertices to points before exporting to OBJ as OBJ will default to point based UVs.Letting the OBJ export convert them can distort your UVs and cause issues, so do it within Houdini via an attribpromote node.

Again I’ll remind everyone, USE AN ATTRIBPROMOTE node to promote the UVs from vertex to points.  I’ve had problems with UVs staying accurate on export.
Afterwords, export the hairmesh_low and hairmesh_high obj models by adding a null node after the low and high poly branches.  Then right click>save>geometry then name your low poly mesh with an suffix of _low and your high poly mesh with a suffix of _high.

Create a null node after the low poly branch and export it with a _low suffix.
Create a null node after the low poly branch and export it with a  _low suffix.

 

Create a null node after the high poly branch and export it with a _high suffix.
Create a null node after the high poly branch and export it with a _high suffix.

Now we’re off to Substance Designer.  Exporting the High Poly mesh WILL TAKE A LONG TIME.  You’ll think Houdini is about to crash…but it won’t.  Make a sandwich as it can be as long as two hours to export the high poly if you’re on a slower machine.

 

Baking with Substance Designer

Open up Substance Designer and create a new graph.  Right click it and click ‘Link > Mesh’ and import your low poly and high poly meshes.

In the High Poly Mesh section, on the middle left of the dialogue box, link to your high poly mesh.  On the right side, set the ray distance very high.  You can go nuts here since the hair cards will be matched to their hair clumps by their group name.  There’s no worries of cross contamination since the Houdini Hair Card asset made individualized groups for us.  Again, you may want to experiment with reducing it less than 1 if you’ve went with curly hair.

Under “Match” change always to “By Mesh Name”.  This is very important as this will make Substance Designer use the individual hair card group names as opposed to baking the entire mesh.

Even more important, uncheck “Ignore Back Face”.  We’ll have high poly hair strands on both sides of the hair card and we don’t want to miss any.

Now go to the bottom of the dialogue box and add your bakers.  While this may sound nuts, GO FOR 8K TEXTURES.  I’ve done tests and it makes a difference.  Obviously you’ll down res it to 4K when you export your final maps from Substance Designer.  However for baking, I want optimal quality so as to not miss anything or risk aliasing or poor resolution.  Try 8K with at least 2×2 anti-aliasing.  Keep in mind hair is TINY and ALIASING prone, so GO NUTS with the baking quality and down res later.

Add an Opacity Map from Mesh baker.  This will make only the baked hairs visible on your hair cards.

Add a Normal Map from Mesh and Height Map from Mesh baker.

Now add an Ambient Occlusion from Mesh baker.  Under Normal Map, select “Previous Baker” and point it to the Normal Map you’re going to bake.  Previous Baker merely means that the texture needs to be baked first and the AO will use the Normal Map when it’s done baking as opposed to a  pre-existing Normal Map.  Now under the Match section of the Ambient Occlusion, again, set it to match “By Mesh Name”.

Now hit the bake button and make another sandwich.

Once the baking is done, the maps you’ve baked will appear in the left sidebar.  Drag your low poly mesh into the viewer and wait for it to appear.  Now drag the maps you’ve created on top of it in the 3D Viewer and when the pop up window comes up, assign the proper maps.  Don’t be alarmed as it won’t look nice at first.  That’s because OpenCL, the default renderer, is low quality and can’t do double sided materials, a must with hair.  On the top tab of the 3D viewer, click “Renderer” and select iRay.  You’ll now see what your wig actually looks like.  Add a base color via a “uniform color” node and drag it onto your mesh, so it’s not plain white.  Concoct a roughness map then export your final hair material textures.

 

 

 

Leave a Comment


Skip to toolbar