Expensive Hair Cards

Hi,

We are observing pretty high card costs. Above 2ms on GPU for cards interpolation, for +50 groom instances.

From what I am seeing, the compute is lerping each card vertex individually based on closest guide control point position, which looks a lot more expensive than just applying the same transform as the head to the entire groom (so very basic/clipping prone, but cheap!).

It looks like guides are the ground truth as far as strands / cards are concerned.

It seems like cards are entering the same pipeline as strands, which unifies things, but also incurs additional costs we can’t skip if we want basic skinning.

Do you have any suggestion to improve those numbers, especially regarding HairCardsInterpolation? Have I missed something?

Hi Yann,

Indeed, if you want to have either hair simulation, skin deformation from the underlying surface (e.g, head mesh), or RBF deformation from the underlying surface (e.g, head mesh), we run a ‘complex’ interpolation similar to some linear skinning. If you want to avoid this, just remove simulation/RBF for the cards’ LODs and ensure that the binding is set to ‘rigid’ instead of ‘skinning’ for these LODs. Once set, the cards, should only be transformed by their parent’s transform.

Let me know if you have some questions.

/Charles.

Thanks a lot Charles, that did the trick performance wise!

Out of curiosity, is it expected for skinning binding type to have a flat 1ms-2ms cost regardless of the number of instances we have? I created a groom using just 1 LOD setup as cards/skinning, and the mesh was a single cube.

I created it starting from a groom using a single hair strand, then removed that strand LOD to only leave the cards LOD.

Having just 1 instance of that groom costs 1ms to 2ms. Is that expected?

I am adding more scopes to the hair passes, but your insight would be valuable.

That seems quite a lot. On which platform do you see that? Is there any bubble/resource wait? Also is your groom using RBF?

/Charles.