Hi, I made a fully rigged groomed lion model a couple of days ago and thought I’ll point out some bottleneck/papercut in the new hair system. (more technical footage in the comments below)
First of all, even though this post is full of complaints, I want to emphasize that I greatly enjoyed using the new system.
For me, the ability to change the base mesh topology (by multirese) was a game changer.
There are many other new features that make the foundation of this new system so great.
To name a few: geo-node integration, tools, collection management, transferring curves between different meshes, and so on.
Secondly, as a disclaimer, I started the project on an older version of Blender, which means some parts of the mane (around 35 %) were created by the old particle system.
Afterward, I converted those parts to the new system, made some adjustments, and added some geo-node modifiers.
I reused the old parts (instead of recreating them) mainly because I wanted to see how hard it is to make the transition work.
With that out of the way, those are the bottleneck I encountered during the process:
I know all of those bottlenecks are known or already tackled, but I still think it better to group my current experience in one place (instead of checking the future state of every point)
The hair objects together have 7,833,801 points and 1,376,160 splines.
The lion model has 39,810 vertices.
I used rigify for the rig.
I failed to use the Surface Deform modifier in real-time(~0.5fps). Every time I worked on the animation I had to exclude the whole hair collection.
I had to disable the modifier while grooming the hair.
The performance doesn’t depend on the curves count, I get from 60fps to 4fps even with a single strand.
On the other hand, when I accidentally generated 157 million hair points (~30 million strands) Blender behaved quite well.
Grooming the body fur without mesh collusion was frustrating.
Separating the position from rotation in the Surface Deform modifier (or providing a more general solution) would give much more flexibility in creating nature hair deformation(while we wait for a hair simulation ).
The Minimum Length in the “Grow/Shrink” tool is a lifesaver. I used it extensively to control the short hair length uniformly. I suggest adding a Maximum Length as well, providing an easy way to precisely control the hair’s length.
The steps to convert the old particle system to the new one consists of around eleven stages.
At least some of them could be automated:
Select the emitter → select the specific hair system (selecting the modifier isn’t enough) → use “convert particle system to curves” → parent the new curves to the emitter → select the emitter as “surface” on the curves data tab → select the emitter UV in the curves data tab → add a “Surface deform” modifier to the curves object → enter sculpt mode → use “Snap to nearest surface” → add a geometry node modifier to the emitter object → store the named attribute “rest_position” and apply the modifier
I accidentally joined the eyes mesh to the base mesh, which introduced some overlapping in the UVs. It took me some time to realize the source of the problem, as the surface deforms only informed me that “invalid surface UVs on X curves”
Changing it into: “Overlapping UVs, invalid surface UVs on X curves” would help.
Because of the performance issue (but not only), I had to disable some modifiers while grooming. Adding it as an option at the modifier display would be awesome (the same as render, display, edit mode, and on-cage options).
Using the “surface_uv_coordinate” to access the UV data in the shader node is a little strange.
I made a modifier to smooth some hair deformations by using the original hair position relative to the rig. Using “original data” instead, as described in this patch T98845, would be much more elegant.
Binding the hair to the rig and transitioning (for example, by spline parameter) between the Surface Deform and the rig deformation is an intriguing thought.
And that’s all I can think of right now, Hope it would be helpful.
And again, thank you very much for creating this system.