Exposing emitter normal to hair strands? (Please consider for new hair system)

As far as I can tell, there is no way to access the face normal of the underlying mesh when using hair strands, unlike material textures/UVs. Is this exposed anywhere within the API? Please consider ensuring this information is available for the new hair curves system.

Am I missing something obvious? Here’s what I’ve tried.

Here’s a use case: Stylized fur rendering with “flat” shading. Right Click Select claims this is implemented but it is actually not (I’ll discuss below).

  1. Here is a lonely sphere with a Diffuse BSDF and using default normals. In this case, this corresponds to Geometry Info → Normal, but I also tried Geometry Info → True Normal, which did remove the fake “rounding” effect but did not align the strand normals in any way.

  2. To get a flat look on an ungroomed mesh, Hair Info → Tangent Normal can be used, because the tangent of a strand perpendicular to the emitter plane turns out to be parallel with the emitter plane. This is the look of this use case.

  3. …however, as soon as you groom the strands, it falls apart, because now the strands are no longer perpendicular to the emitter. This is why the Right Click Select proposal is not accurate; this is not a working implementation.

  4. My interim solution has been to encode the mesh normals in world space to a vertex color layer and unpack it in the shader. I have to do this every frame, which breaks realtime animation work because it’s slow. It also means that I have to “sync” the vertex colors every frame. But it looks exactly as desired.

I don’t think it is currently possible to do this natively in Blender. I had a quick skim through the source code (which I’m not very familiar with). I see references to interpolate_mcol and interpolate_uvs (e.g., in source/blender/blenkernel/intern/particle.c ) but nothing that implies normals are being exposed.

I don’t know if this belongs here, or on RCS (in a new request?), or what, but I wanted to make sure it was considered by the devs when looking at information to expose to the new hair system.

If I figure out how to modify the particle system to expose this information, would a patch be accepted? I know there is no work being done in general on the legacy particle system.

If anyone has any tips on how else to get this effect, I’m all ears.