Bear Grooming
Responsibilities: Hair Guides creation, Hair Generation, Hair Rendering with MaterialX
Overview
Bear Grooming introduces a procedural system for fur grooming that involves Guide Groom, Hair Generation, and Solaris shading modules, each containing submodules (notaries). For example module Guide Groom contains base guides, guides processing with masks, breaking patterns, clumping prep, and cleanup sumodules. This workflow is documented with RemNote, which makes it reusable. Artistic modifications include 20 hand-painted masks and maps that control hair parameters, directions, clumping, etc., allowing to achieve super realistic look based on real bear references.
Hair Guides
After analyzing references, I noticed that the fur on the nose and front part of the face is very short, while the fur on the sides and back is very long. I divided the workflow into two parts. For each workflow, I follow the same setup process, moving from Guides Base to Guides Clumping.
Base
The base consists of mapped guides that set the initial directions. This process happens inside the guideAdvect node, which moves or deforms guides using a velocity field. The first input is the Base, where I scatter straight curves on the surface for guides. The second input is the skin geometry, taken from the Object Merge SKIN node. The fourth input comes from the Volume Velocity From Curves, which I drew based on reference.
Guide Process
At this stage, I apply modifications driven by noise, curve masks, and custom hand-drawn masks. These affect bending, length, lift, frizz, clumping, and wave of the hairs at different stages of the workflow. This approach allows for customization, such as making some hairs messier or more lifted.
Cleanup
The cleanup process organizes the LV1 guides by removing collisions, managing attributes, and grouping them.
LV2 Guides
I then create a second level of guides to add variation and detail. These LV2 guides are essentially clumped and slightly modified LV1 guides. The setup includes the Base, Hair Clump, Guide Process, and Cleaning stages.
At this point, two levels of hair guides are complete, and the process moves into creating the actual fur geometry.
Hair Generate
Within the Hair Generate network, I used a Hair Generate node combined with a custom-drawn density mask to optimize hair scattering. Areas with short, straight fur required higher density to feel fuller, while regions with longer, frizzier hairs needed less density to maintain balance and realism. I also introduced diagonal patterns along the sides leading toward the face, as well as varied patches of density across the back, to better mimic the natural irregularities found in real bear fur.
Guide Process
ITo introduce natural variation, I applied curve-mask and custom-mask driven adjustments to hair length and bend. When hairs form clumpsin Houdini Fur workflow, they become shorter, so I made them longer to account for this shift. Because Set Length Guide Process make all hairs grow straight, I bent the longer strands to break up uniformity and create a more organic flow.
Clumping
For realism, I applied three levels of clumping using the Hair Clump node. This hierarchical approach breaks larger clumps into smaller groups, and then into even finer sub-clumps, closely mimicking the layered structure of real fur. The first two clumping stages were guided by LV1 and LV2 hair guides, while the third applied broader parameters across the groom, with the exception of the nose area, which needed to remain straight and clean. Additionally, I created a tightness map that defines how tight the clumps are and thereby, optimizes the distribution. Areas with short straight hair can be less tight and heavily-clumped areas of long hairs should be more tight.
Rendering preparation
or procedural rendering, I generated and exported two key attributes to enhance shading control. The first, rampSHD, defined the color gradient along each hair curve. The second, lenSHD, distinguished long hairs from short hairs.
Procedural MaterialX shading
For the bear groom, I applied three procedural modifications to the fur material in MaterialX to achieve realistic hair shading. Using the rampSHD attribute, I darkened the roots and lightened the tips to replicate the natural gradient found in real bear fur. The lenSHD attribute was then used to separate long hairs from short ones, with the longer strands near the base darkened to add depth and weight. I also incorporated the clumpidSHD attribute, generated during the Hair Generation stage, to introduce noise and create natural color variations between clumps. Finally, I adjusted melanin saturation to better simulate how light interacts with real animal hair.
Challenges and learning outcomes
My challenge was replicating the messy appearance of longer hairs after coming into contact with water.
AIn real bears, the ends of wet hairs often look damp and carry a noticeably different texture than the rest of the strand—they appear heavier, frizzier, wavier, and less controlled. My first attempt was to modify the hair ends using the curveu attribute, but this did not produce convincing results. The final solution was to apply a Frizz Guide Process with very subtle noise, making the effect more pronounced on longer hairs so their clump ends developed messy normal directions. Then, I added a Set Length Guide Process that generated short, straight hairs growing out from the frizzy sections, but oriented in slightly irregular directions. This technique helped me to achieve that messy, but straight look that naturally occurs when fur is wet.