Hair node, root based normal proposal

This is a follow-up to my RCS post here https://blender.community/c/rightclickselect/tkhbbc/
I’ve been interested in exploring toon-based shading and lighting with EEVEE. And I Discovered an amazing effect with hair particles and the standard toon-shader,
(A standard toonshader in EEVEE. Is using the shader-to-RGB node, and then having a coloramp making the shadows much crisper, akin to the look of Nintendo’s Wind Waker game).

Alas I found a big limitation blender currently has. In short

Currently there’s no way to get normal data for hair particles, that each face outwards in the direction the hair is pointing. They have the normal data of their 3d geometry, that’s of course immensely useful for realistic rendering. But for toon-shading, it’s very limiting not having a second option.

The proposal
An addition to hair node, called “root normals” or something more fitting, where the each strands normal is exactly the same as the normal of the surface it’s sitting on. Would look similar to this

This is what hair particles normals look like “normally” notice each strand has multiple colors

With all that, i’d greatly appreciate any insight into how i could try to implement this as an addon or similar. I’m admittedly not experienced with coding for Blender specifically, but if it’s possible i’d want to. Since i really wanna utilize this effect for future animations

1 Like

btw.
the top right “nice” example image was achieved by plugging a “normal” node into the shaders normal input, but it only receives lighting from 1 direction, and also isn’t accurate to the geometry

@STANN.co I recently bumped into the same issue, and since I already did an Eevee hair shader, it was easier for me to implement this

1 Like

https://developer.blender.org/rBa294670bacb1db66ca0aad29df5752b10b8ba7fd This seems to be the final implementation. And it’s now more consistent with cycles as well!

Though, it still isn’t actually enough to achieve the effect that was desired.
That addition grants the ability to tangent relative to the direction of the hair strand.

But for the stylish pictures above, it would need to have tangent relative to the origin point the hairs are sitting on (I might be using the wrong words, tangent and normals isn’t my strong suit)

This is the closest i could get in the 2.93.0 beta

Isn’t it the same for short hair as in your case? Could you draw a picture to illustrate what do you mean?

I tried making a drawing to demonstrate what i’d want.
With the bottom example I could achieve the affect i described above i think!! It would help with that Cell-shaded look that’s become popular in recent times

The triangles are hair strands sitting on a surface

The implementation for that would probably look similar to the one i did for the hair info length attribute here

I haven’t tried implementing stuff in Blender before actually. If i did tweaks to your thing for these purposes. How would i run it, and after that get it implemented?

All information of how to get diffs, build blender and similar can be found here:
https://wiki.blender.org/wiki/Process/Contributing_Code -> https://wiki.blender.org/wiki/Tools/CodeReview#Use_Arcanist
https://wiki.blender.org/wiki/Developer_Intro/Advice

After a long time, i’m still no closer unfortunately :sweat_smile:
But, i have found the propper words.

In order to create that cool toony effect, each strand would need to get it’s normal data from the surface they’re sitting on. You can do that currently by using a data-transfer modifier from one mesh to another, but the problem is, that, that isn’t possible with hair particles. Closest you can get is converting all hair particles into it’s own unique mess, but doing that would be horribly innefecient to animate and run.