Strap Softbody Sim to Curve GN | Getting non Flipping curve normals

Hey,

So I want to Simulate a Strap attached to a Buckle with the strap pulling on it and then releasing. Since the Strap itself should thread through the Object beforehand, I opted to create a curve from a softbody Sim and to then position the Strap Mesh on the curve in GN.

While this setup fullfills the need of being simulated, having uv’s and having the ability to thread the Strap Mesh through the Buckle, I cant get proper curve normals to work.

When leaving the curve normals untouched, the curve normals flip occasionally and if I lock them to a certain direction the Strap Mesh gets Skewed rather than rotated to face the Buckle when animating the Buckle movement.

It would be greatly appreciated if someone could help me out with the Geometry Nodes Setup and getting good curve normals or come up with a whole different setup.

Thanks in advance!
Neal

Edit: Sadly I cannot attach the File since im a new User :s

Neal asked me if i could attach the Blendfile, so here it is : BAhelp.blend (1.6 MB)

Hello there and welcome!

The way curve normals are calculated is… well, I don’t actually know how it works, but it seem to be heavily dependent on curve points positions. So when you animate the curve things become that much more complicated to predict.

Here’s an idea: your “original” strap geo seems to deform just right, doesn’t it?
We can take its surface normals and store them (before “Delete Geo”). They are perpendicular to the ones we actually need, so we find cross product between them and curve Tangent - that should be our curve normal.
…I think? At least it looks very close.

Yes! It works!

I actually tried something similar, but placed the store named attribute node right before turning the undeleted geo into a Curve.

For some reason this doesnt work at all!
Is it because on deleting the surrounding geo, the vertex normals change?

Yes. Face normals are perpendicular to faces, vertex normals are the average of surrounding face normals… and without faces around vertex normals don’t make much sense, so who knows where they point. Hence, we need to capture/store them before deleting faces.