This is my first Blog post. So here we go. I originally created this file at my time at RISE FX, but recently revisited it, since I wanted to render it in Redshift.


Goal:
Create a curly hair setup with dynamics with couple of features:

  • custom curlyness at all positions of the strand
  • custom thickness
  • custom width of the curls at all positions
  • color from noise of source geometry and strand’s U attribute
  • fast sim time

So let’s get started:
First I created an animated sphere:

Then I created some Fur on it with help of the shelftool.

This is how it looks like inside the Fur obj node:

Inside the “guides_deform” node I create my “OUT_TODOP” null to reference for my siminput.

Simple wiresolver sim with the guides as input:


Now I merge in my Simoutput into the “guide_dynamics” node and set the display flage on my merge (important since later it gets merged in based on the display flage of the geo node).

Then in the “fur” node after the create_fur I do some resampling and creation of attributes.

I wanted the length of the strands to drive the width of the curling of its strand. So I fit the perimeter of strands between the minimum and maximum to have the length of the strands between 0 and 1.

For the final hairstrands I started off with a regular circle node and did some wrangles on it.

Then I used the primuv function to extract P, tangentu, tangentv and N from my Curlinput matching its U attribute to the U attribute from my guides. Then I generate a Matrix from these attributes and apply it later on. I also did some tweaks to the width before applying the matrix. Additionally I transfer back some attributes like whitehair, hairid, guardhair.

Now mostly the color is missing. For the color I wanted to avoid a noise simply created in the shader, since it would just use the rest position, meaning the color would differ along the strand, just from the noise itself. So I created a noise on my sphere, applied it to the startpoints of my strands (where @u==0) and copied the color from these points to the strands according to the hairID. Then I copied my color from the frozen frame to my animated strands. That way it doesn’t have to calculate the pointcloud function each frame.

Finally, this is my vop network of my shader. I am mixing different colors for the changing U attribute of the strand, and the input noise, we just set up.