3
$\begingroup$

I have a mesh that I want to deform, and since there doesn't seem to be a deformer built in to blender that does what I want, I thought I'd try animation nodes.

Here's my node tree. The four maths nodes calculate how far the point is on the XY plane to the center (distance to line would have done the same thing, but it doesn't work for lists). Then I have a rotation matrix where the amount of rotation is controlled by that distance. Now it's just a matter of applying the matrix to the vert, right. But computer says no! I can't give a list of matrices to the transform node.

enter image description here

Can anyone suggest a workaround?

EDIT OK, I sat down and did the maths, and I got THIS CLOSE to having it work. But EVERY. FREAKING. TIME. there is one node that I need that doesn't work with list inputs.

Here is the updated node tree, with the rotation calculated using maths nodes (the formula is written in on lwr left).

enter image description here

It is so close to working that I'm thumping the monitor.

Here's the original mesh. seen from top ortho:

enter image description here

Here is what I get with the nodes applied:

enter image description here

SO CLOSE! The only problem is that for verts where x==0 it is returning 0,0 because it's dividing by zero. You can see it when I set the strength to 0

enter image description here

So I thought I'd add a compare node, and for any vert where x==0 I'd use a formula that avoided the divide by zero problem. But of course the compare node doesn't work with lists. HNGGGGH!

Why is something so simple so bloody difficult in Blender? Because you haven't read the manual.

$\endgroup$
6
$\begingroup$

OK, over lunch I sat down and read through the Animation Nodes docs, and worked out how subprograms work. Like a lot of stuff in Blender it seems like they're completely opaque and baffling, until you understand them, at which point they're completely obvious. So what I needed to do was to make a subprogram with the Project Point On Line node and the transformation matrix inside, and use the vectors from the mesh as an iterator. That means that for every point in the mesh the subprogram is run, given the point's co-ordinates and the strength parameter, and returns the rotated vector as a result.

Here's the much simpler, and more elegant node tree:

enter image description here

And here's the before and after, working just like I want:

enter image description here

| improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.