LOPs Hair Procedural Deformation Problems (Houdini 21)

   612   2   3
User Avatar
Member
1 posts
Joined: April 2024
Offline
Hello!
For the past few days, I've been trying to get the Houdini Procedural: Hair node to work, but it just doesn't seem to do what I need it to! I feel like I'm missing some fundamental understanding of how it's supposed to work, so I'm struggling to figure out what I'm doing wrong.


About Me: I am currently working on my fully animated graduation film (with 6 other team members) and I'm responsible for the CFX and FX. Right now I am working on the Hair for our Main Character "Fiona".

What we're trying to achieve:
Our goal is to simulate only the guide hairs and deform the full-resolution render hairs from those guides at render time.

The idea is to cache only the simulated guides into USD, together with a single reference frame of the high-resolution render hairs. It is important that the deformation is evaluated only at render time by the Hair Procedural—not by a Guide Deform or Point Deform SOP beforehand. We are using Houdini 21.0.440 and are probrably not able to update to Houdini 22 due to our pipeline.

We also have another main character in the film, a deer with a very dense fur groom, and we'd like to use the exact same workflow there. We simply don't have enough storage to cache the full groom for all 43 shots.

My Solaris setup

- Load the animated character (and replace it with the T-pose character for the groom).
- Two SOP Modify LOPs that each contain a Null, allowing me to export the skin/body and the hair to SOPs via Object Merge.
- Layer Break.
- SOP Import of the deformed/simulated guides (already deformed to the animation).
- SOP Import of the deformed render hairs (only the first frame, positioned to match the guides).
- Houdini Procedural: Hair
Mode: Deform
Deform Mode: Capture and Deform
- Preview Houdini Procedurals.

Outside of the LOP network, I have a SOP Create where I deform the guide hairs to the animated character using a Guide Deform Node. I also deform the render hairs for the first frame of the animation so that they match the guides before exporting them to USD.

Overall, this setup seems to work quite well. When viewing the result through the Preview Houdini Procedurals node, the render hairs deform. They also respond to the simulated guides, so they follow the simulated guides rather than just the skin.

However, I run into problems whenever the character moves quickly. The render hairs no longer follow the guides accurately. They start drifting away from them, and in some areas the groom changes shape quite dramatically.


What I've tried:

Using Capture and Deform in the Hair Procedural:
- Disabling Split Clumps improves the result slightly, but not enough.
- Changing Maximum Split Passes and Edge Flip Passes doesn't seem to have any effect at all. They appear to do nothing, which makes me wonder if this might be a bug.

Since Capture and Deform Mode doesn't have controls for the deformation, I also tried Deform – Existing Weights.

This mode requires a capture attribute on the render hairs. The only way I managed to generate that was by using a Guide Deform Node on the render hair with:
Mode: Capture
Method: Barycentric Weights

This works, but I end up with essentially the same issues as with Capture and Deform, sometimes the results are even worse.

Interestingly, this workflow exposes the same settings that didn't work before (Maximum Split Passes and Edge Flip Passes). Unlike in the Hair Procedural, these parameters do seem to work in the Guide Deform , but they still don't produce better deformation.

What seems to help a bit:
The only thing that noticeably improves the result is changing the guides, for example by adjusting the seed (without changing the render hair). However, no matter what I try, there are always some render hairs that break away from the guides during fast motion.


Am I misunderstanding how this workflow is intended to be used, or am I missing an important step?
From the documentation, it seems like the Hair Procedural is designed exactly for this use case: storing only simulated guides and deforming the render hairs at render time.

Has anyone successfully used this workflow and run into similar issues, or can you spot something wrong with my setup?
I have added some pictures, trying to explain the Problem. I have just enabled the braids for faster testing, thats why the character is semi bald
Thank you!

Attachments:
Hair_Procedural_01.png (672.0 KB)
Hair_Procedural_02.png (1.1 MB)
Hair_Procedural_03.png (898.0 KB)
Hair_Procedural_04.png (119.5 KB)
Hair_Procedural_05.png (94.1 KB)
Hair_Procedural_06.png (2.8 MB)

User Avatar
Member
313 posts
Joined: Jan. 2015
Offline
Maybe you will have better success with the new node in Houdini 22.

https://www.sidefx.com/docs/houdini/nodes/lop/configureguidedeform.html [www.sidefx.com]
Edited by Heileif - Aug. 4, 2026 14:26:27
User Avatar
Staff
123 posts
Joined: June 2024
Offline
Part of the reason why we redesigned this workflow for H22 is because it was a bit finnicky to set up correctly before. I suspect that you probably won't be able to switch to H22 for your project, so let's try to figure it out. Kai is the expert on this but he is on vacation so I'll try to use my rusty knowledge.

The issue with the Hair Procedural is usually missing attributes. I suspect that you either don't have an `orient` attribute on your rest guides, or the vellum sim is re-initializing it in a way that causes issues. What I suggest is (in SOPs) on your rest guides, create an "Orientation along Curve" SOP, with the Tangent Type set to "Next Edge", and under the output attributes you can untoggle "Y Axis" and "Tangent (Z Axis)" and toggle on "Quaternion".

Then I think you might also need a `restorient` attribute, so follow this with an "Attribute Swap" SOP with the method set to "Copy" the "Source" set to `orient` and the "Destination" set to `restorient`.

I am also skeptical that deforming your hair to the first frame before sending it to LOPs is a good idea. I would rather ensure that there is a `rest` attribute on your deformed guides.

I also recommend looking at the Hair Procedural example file. In the "hair_deformed" subnet switch the "Deform Mode" to "Capture and Deform" and then inside the "donut_animation" SOP Modify, cache out the hairsim. This approach of defining the procedural with the rest guides, skin and hair, and then updating the guides and skin with the deformed versions afterwards might help. It looks like in that case they don't use `orient`, but I think that for longer hair especially the `orient` attribute will be helpful.

Again, I am a bit rusty with this, so take what I say with a grain of salt. If you submit a ticket to support with your file attached I will be able to troubleshoot it for you better.
Liesbeth Levick
Technical Director: CFX
SideFX
  • Quick Links