Infuriating technical difficulties
Added 2023-04-16 14:52:57 +0000 UTCtl;dr: Content is resuming soon, rant as to why things stalled below
I spent the past week and a half trying to implement a new system to better take advantage of the new nodes released by Blender Foundation with 3.5 to handle hair and fur using geometry nodes. I had originally assumed that the native systems MUST have better performance or at least quality than my own work so I spent the time completely re-implementing the way I handle hair and fur. my initial testing was incredibly promising but I wasn't noticing the performance issues since I was only testing on a Suzanne head. As soon as I moved onto implementing the system on a complete character, things started to go wrong.
I determined that the Blender system is passable for hair/headfur but when it comes to full body grooms it is an absolute disaster. The performance is abysmal
My original implementation in 3.4
Multiplexing 3.3ms
Culling Controller 3.6ms
Curve Shaping 18ms
Normal Processing 4.0ms
Master Fur Rendering Controller 212 ms
Total time to process 1 character's grooms 240.9ms
Replacing my own geometry nodes with the Blender native ones and using them as their own limited documentation advises. Some of the new nodes are acceptable but the "Interpolate Hair Curves" Node which has feature parity with my "Master Fur Rendering Controller" has absolutely unacceptable performance.
A 1 to1 replacement of my fur rendering controller looked something like this in blender 3.5. I switched to using the Blender curve shaping group because it does have slightly better performance and more shaping controls. and I had to rewrite my normal processing because of changes in the back-end for geo-nodes.
Multiplexing 4.1
Culling Controller 2.5
Native Curve shaping 16ms
Normal processing 25ms
Interpolate Hair Curves 13623 ms
... 13,670.6ms...
Thirteen and a half seconds....for essentially the same functionality and no significant improvement in quality.... The Interpolate Hair Curves node was supposed to make things easier and I would have accepted some level of performance hit...But it seems that recalculating the entire fur system using poisson-disc distribution is whats causing the biggest performance hit. the density control was nice and it introduced an opportunity to create a nicer LOD system but the performance was eyewateringly bad.
Massively reducing the number of guides improved the performance to around 8500ms but struggled around tight surfaces like the face and ears.
And removing the multiplexing and applying the nodes to the sparse guides yielded the best performance at around 450-700ms per section of fur but the whole thing still ended up around 6000ms. but the worst quality with noticeable seams between islands.
And to make matters worse this change results in much worse fur visual quality especially around fur borders like eye sockets and the mouth. The final quality was worse than the old particle implementation and the performance was 10x slower at that.
I'm still porting and debugging the original system from 3.4 but hopefully I will be back up and running soon.But I might need a day off to let the frustration in my head die down -_-