2
$\begingroup$

I'm trying to deform part of an object (defined by a group) using another control object. Basically a hook deformer using geo nodes.

enter image description here

The tricky part is, I want the controller to follow the mesh it deforms (can be via sticking it to the closest face/vertex) and somehow consolidate for those transforms. It all goes fine with translations,

enter image description here

but rotations are starting to go sideways.

enter image description here

Another issue I'm having is that my control object leaves it's pivot behind. I'm setting it's transforms using geo nodes/transform geo, so not sure what's wring with that. Here's the node graph for the target object (framed nodes are just a test at the moment, they're not required)-

enter image description here enter image description here

And the nodes I'm using on the controler object -

enter image description here

edit - I'm guessing since I'm using set position on the target object I'd need to consolidate for the relative position of the specific element(vertex) in the case where I'm getting the control object location from, since that as well might be influenced by said object. Not sure, math is not my strong suit so it's quite a bit of trial end error.

Basically what breaks are rotations, being more noticeable after a certain degree. Low values are alrightish -

enter image description here

Higher values flip like so -

enter image description here

This is just visualizing the issue on an isolated setup. It look like that euler thing when the axis alignment messes things up and people talk about using quaternions instead, I have no clue what I'm talking about though.

$\endgroup$
9
  • $\begingroup$ This is an issue with dependencies-- you can't deform on the basis of where the empty is, and constrain the empty to the mesh: the empty depends on the mesh which depends on the empty which depends on the mesh... What you can do is parent both objects to a single control and manipulate that instead. For what you're showing, you could be doing this with an armature with 2 bones instead of anything complicated. $\endgroup$
    – Nathan
    Sep 21, 2023 at 15:20
  • $\begingroup$ I don't want to use a separate armature deformer as I would use these type of things on baked alembic caches for shotsculpting purposes. Let's say I get an alembic of a character that's both moving/rotating AND deforming from the anim department. I need to bend the arm a bit more in the y axis via shotsculpt. This is something that's done in production quite frequently, usually with sticky deformers which deform and follow a mesh at the same time. $\endgroup$
    – dan283
    Sep 21, 2023 at 23:05
  • $\begingroup$ You should still be able to do it with an armature, but it will require two copies of the mesh, one non-rendering. The armature should have two bones, for cluster deformer vs no deform. Constrain the armature object to maintain a given position on one, non-rendering mesh (probably, copy location->damped track->locked track vertex groups.) Then, you can manipulate the cluster deformer bone to deform the second, rendering copy of the mesh. Any solution to the problem in Blender is going to involve this kind of indirection-- extra objects-- to read one position while writing to another. $\endgroup$
    – Nathan
    Sep 22, 2023 at 0:58
  • $\begingroup$ Although you might find a warp modifier setup, "to" empty parented to constrained "from" empty, more intuitive-- similar thing though, there's little difference. $\endgroup$
    – Nathan
    Sep 22, 2023 at 1:03
  • $\begingroup$ My setup does work with transforms though, I'm just subtracting the double transforms via vector math. The only part where it's not working are rotations. Wouldn't it be possible to just subtract whatever transforms would be doubled from the mesh deformation? I mean I don't mind copying a mesh in the internal node setup, I just don't want to messy it up with armatures since I can't use those with nodes. I'm trying to think of it as not necessarily using the objects set position, but using it as part of the vector math for the transforms. $\endgroup$
    – dan283
    Sep 22, 2023 at 1:17

1 Answer 1

0
$\begingroup$

Here's a simple setup that uses two objects to displace from one to another:

Both can be parented to the object that is deformed by them (they don't depend on the mesh, they depend on the object, so there's no circular dependency):

$\endgroup$
1
  • $\begingroup$ Great idea using the raycast between the 2 objects! Not sure if it would work with custom painted vert groups? I'd need to play with it further as the deforming object would need to also deform the selection on the target by rotating and scaling. $\endgroup$
    – dan283
    Sep 23, 2023 at 19:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .