Store face rotation, surface deform, then keep center position but restore rotation?

All my faces are separated

Geo Node modifier 1 = I set my target rotation/position

Surface Deform = Bind the results to an animated character with Surface Deform modifier

Geo Node Modifier 2 = I want to keep the face center locations made by the Surface Deform,

but I want to restore/preserve the rotations originally set by Geo Node modifier 1

As usually - I have spent a day melting my brain with vectors, rotations…all that crazyness.

Thank you in advance to anyone who has an idea - and a super mega thank you to @zeroskilz my forever vector hero who I guess will probably have the answer.

Its not clear what you’re asking.

Maybe state your objective or share a blend file with a simplified version of the issue.

Oh sorry about not explaining fully - totally my bad.

So I have a mesh being deformed by an armature:
(I will refer to this as mesh-armature object)

I have a ‘copy’ of this object but composed of separated planes:
(I will refer to this as mesh-plane object)

The correct orientation of the planes to face the camera is produced by a Geometry Node group =

I would like to use the mesh+armature object to animate the mesh-plane object.

I can do this with a surface deform on the mesh-plane object, targeting the mesh-armature object =


This animates the mesh-plane object the way I want in terms of the location/face center locations.

But it messes up the originally set rotations.

The mesh-plane (being a 3DGS scan) is only correctly visible when the faces are aligned a certain way relative to the camera.
And they don’t have a persistent axis of rotation when they move to face the camera which makes things harder.

I am wondering if there is any way to keep the change in face location made by the surface deform - but restore the face rotations set by the first Geometry Nodes modifier.

Sorry if this isn’t clear at all. Here’s the .Blend file if that helps.

Restore Rotation.blend

Sorry, haven’t had time to look at this…

Cant you just move this GN to after the deform?

Oh dude you never need to say sorry, you have saved my mind a thousand times over! Thank you as always.

So sadly the position set by that Geo Node group is not relative to the current position of the faces.

It’s relative to a stored attribute (origpos) which is created during import of the .ply object.

So if that Geo Node modifier is last, it overwrites any previous set positions or deformations

So, you can use Store Named Attribute… If you can make all those cards instances, then you can store their transforms on a Instance attribute. From the transform you should be able to extract the rotation and re-apply it.

So to deform the faces - by armature or surface deform - they need to be realized, right?

So In my first modifier I could split the geometry into realized + instances, and store the rotation on the instances.

After this I deform the mesh using armature/surface deform. Only the realized faces are deformed. The instances remain on top, un-deformed.

Then after deformation. Use geometry nodes to split the object into mesh / instances and read the stored rotation?

I’m stuck then as to how to implement that rotation on the realized faces?

Sorry if I’m bugging you with too many questions!
Let me know if I am and I’ll keep trying to noodle around with it :smiley:

You have to do a manual instance reset… and you have to use Instances to Points and Points to Vertices to have something for the deform to bind to…

This goes after your GN but before the deform

This is what you do after the deform:

Hope that helps.

I’m sooo tired.

I will try it immediately!

Thank you so so much for your help, I hope you know how appreciated you are by the community and myself.

I will send an update after I try this - but please don’t feel the need to respond. I’ll mark your answer as the solution now.

Hope you get some much needed rest!

Just an update since I said I would - please don’t feel the need to respond

Thank you again so much for the past answers.

I tried the instance method and it seems decent for tests on low face count objects. sadly too performance crushing for the models I’m working with (tens of thousands of faces)

But it has still pointed me toward a better option than my previous total confusion so thank you so much - you are such a hero to me as always.