PRO FUR HOUDINI GUIDE
In this guide, we will take a look at the grooming tools introduced in Houdini’s 16.5 to quickly lay down the flow of the hair’s guide curves. This way, we can achieve a detailed and realistic look to gain a further understanding of its procedural workflow and organise our layout for efficiency. We’ll also examine alternative ways of creating intricate custom shading through Houdini’s own programming language VEX to allow complete control of the amount of colours and blending pattern throughout each hair strand without the use of shaders; this method is compatible with texture maps, too. Additionally, we will go through the steps for caching collisions using VDB volumes and new options to isolate sections of individual strands of hair using different parameters. Special thanks to Tighe Rzankowski for his assistance with VEX scripting. 01
Add fur by density attribute The groom was created through Guide Groom object’s skin attribute; it works by painting interactively on the mesh a mask where the guides will be generated. 02
Groom procedurally The advantage of Houdini’s procedural workflow is the ability to go back upstream to apply changes anytime, be it the initial mesh or any adjustments to the grooming tools themselves. The Guide Groom object sets down the initial guides that will be later simulated. The Hairgen object depends on these curves
as its function is to generate the hair on render time and most of the detailed styling happens here. Frizz, Clumping and Bend tools were the most used. 03
Use Curve Advect This new node introduced in Houdini 16.5 works similarly to Initialize Guides node; it can be used to set down the general direction of the hair. However, it also offers the ability to draw curves directly on the geometry to specify the flow of the groom guides into unique paths. In the Tarantula groom, it was extremely helpful as the Curve Advect node defined the direction of each leg’s hair as they spread outwards from the body. 04
Remove overlapping hair The Guide Groom SOP node offers different brush tools such as Length Adjust and Surface Brush. In this case, Cut was perfect for deleting the guides going into the eye sockets and other spots where hair shouldn’t generate.
05 Utilise Guide Collide VDB To be certain the curves are not intersecting into the skin geometry, create a Guide Collide VDB node at the end of the chain inside the Guide Groom or Hairgen subnetwork. The curves can be either offset or pushed away from the skin surface – the latter allows you to isolate a section of each curve such as the segments closer to the root. 06
Work with Groom Merge Another new feature is the Groom Merge node, which allows you to work on different isolated groom objects. In the Tarantula project, the hair is separated by different body parts such as the abdomen, legs, sternum and mouth. After the Guide Groom’s curves are styled, Groom Merge allows the user to combine these different systems into one single set of guides that is ready to be deformed and simulated. Additionally, Groom Merge creates groups that the Hairgen will be able to pick up to blend the guides between each other to create smooth transitions. 07
Cache Collisions It is possible to work with the Guide Groom’s rest skin VDB settings as the default From Skin Geometry. However, to manage faster rendering speed, it’s always best to cache out the VDB volumes beforehand. You would need to do so for the T-pose and animated mesh separately. To achieve this, simply use a VDB From Polygons node connected to a Filecache node. Keep in mind that this works best on a mesh that doesn’t have any open holes, so be sure to cap any gaps! 08
Use Point Color as diffuse To apply customised colour patterns to the groom, paint directly on your base mesh using a Paint node. Since it’s dependent on the amount of points that exist within the geometry to store the Cd attribute, you may wish to subdivide beforehand. To transfer the Cd attribute, it’s best to cache out your painted geometry per frame through a File Cache node, then load the BGEO as a File node within the Hairgen object and use an Attribute Transfer node to copy the painted Cd attribute. Keep in mind the cached BGEO must match the corresponding deforming mesh, so it can’t be the static T-pose geometry you started your groom with. If you painted your T-pose mesh first, just copy and paste the Paint node below your deforming mesh.
09 Load texture maps inside Hairgen Create an Attribute Wrangle and connect the wire that corresponds to the HAIRS SOP up top to the first input. next, plug in a cached BGEO file of the mesh into the second input – this is to transfer the uv attribute directly to the hair. The Vexpression that you need to type down is shown on this step’s image. Afterwards, place an Attribute From Map node right underneath and set your texture path accordingly. In this example, a tiger pattern was used for clarity. 10
Custom root and tip blends This method requires a Point Wrangle node and VEX. The advantage of blending through these is the complete control of the diffuse colour along the strands without depending on the hair shader. Either a mesh that was painted using a Paint node may be used, or the Cd attribute from a texture file that is fed directly into the hairgen – or any combination of both. On the image you can see the setup and the Vexpression needed to be able to do custom blending. In this example, three colours were used for clarity: magenta for the roots, orange for the tip and lastly for the blend between the two the Point Color that was directly painted on the Tarantula mesh. Inside the Hairgen object, create an Attribute Rename (set from Cd to rootdiffusecolor) and a new Attribute Create node (set name to tipdiffusecolor and size to 3 – the first three values at the bottom of the parameter box will determine what colour the tip of the hair will be). Both Attribute Rename and Create plug into the second and third input of a point attribute wrangle respectively. 11
Mask single hairs The Guide Mask node is very helpful to drive the mask with various types of noise, hair length or even single out randomly scattered strands. The ability to group them allows you to make them be affected by various Guide Processes such as Frizz, Clumping or even by Color. For the abdomen a length mask was used to group the longest hairs. 12
Depth pass On the Extra Image Planes tab on your Mantra ROP, you can create a new image plane by clicking the plus button and setting the VEX Variable to Pz. The sample filter Closest to Surface and pixel filter set to Object With Most Coverage proved to render a reliable and artifact-free Depth pass.
To manage faster rendering speed, it’s always best to cache out the VDB volumes beforehand