Vector Point distortion when arm or leg flexes with bone

Wondering how to accomplish a certain animation task? Ask here.

Moderators: Víctor Paredes, Belgarath, slowtiger

User avatar
mkelley
Posts: 1647
Joined: Fri Nov 02, 2007 5:29 pm
Location: Sunny Florida
Contact:

Post by mkelley »

Okay, I'm *still* going to disagree with you all here.

First of all, Gary, you're missing my point. I'm not looking at keeping vertices rigid or attached to the body (like your refined example). What I am looking for, as Vern so eloquently referred to it, was keeping the "volume" of the bend.

This is a very common problem with 3D animations -- we have ways to solve that that won't work here. But if you look at your example page, Gary, you'll see you have that same problem in the legs of your character (as they flex and bend the leg loses volume).

In Real Life (yeah, I know) this doesn't happen -- but it looks silly even in cartoons. Now I *know* I can manually move the verts (and this is what J. Baker suggests in his tutorial -- sorry, but that tutorial looks awful compared to what I can get on my own by reweighting things -- your feet don't bend at all and the leg loses all kinds of volume) but I can't get this by manually assigning verts because that ain't the problem.

The problem is that the verts themselves need to be weighted -- a vert close to the joint shouldn't move as far as it does as they bend (this is close to how we solve the problem in 3D). But there is no individual weighting I can see.

I don't really want to start moving verts around in the animation because getting them back to the start is a another PITA. Ideally this should be solvable by weights, but the weighting is too primative for this (in 3D we solve it by having bones not only have spheres of influence but individual weights -- so that one bone can influence more than another bone even over the same verts).

I guess I can fool around with what I hear called "fan bones" (my hunch is that's a whole bunch of bones scattered around the joint in an effort to solve the issue) but that's a PITA. AS just needs to work right, and it doesn't in this important regard. It's my one hope they get this fixed in the next version.

And, Vern, your solution is okay if that's the look you want in animation -- I want a smoother look and in many cases (okay, all of my cases) I can't easily make a separate joint between the upper and lower arms. However I respect you and suspect I may not have played around with this enough to see if I can actually get the look I want (it will require a lot of fooling with shapes that match but perhaps...)

However, I'm glad the original poster found his answer -- I only wish I could find mine.
User avatar
mkelley
Posts: 1647
Joined: Fri Nov 02, 2007 5:29 pm
Location: Sunny Florida
Contact:

Post by mkelley »

Okay, at least I think I've found my answer (and I'm sure all of you are glad I'm shutting up here -- sorry, not trying to be contentious, just trying to get the job done :>).

My own solution is to make an action which moves the verts of the offending limb to the correct position when bent. Then in the course of moving the bones if I find the verts wrong I just insert this action and presto, the thing is fixed. Of course I have to have a default action to reset the verts but in trying it out is ain't as difficult as I thought it might be.

The nice thing I find is I only need one action per limb -- at the extreme bend positions. And the resultant volume looks better than any solution I've seen posted here (and is actually far easier). It even enables me to emulate the muscle positions without the bone angle thingee. I wish I'd have thought of this earlier and I wouldn't have bothered anyone here.

So I'm happy -- I hope everyone else is as happy with their own solutions.
User avatar
J. Baker
Posts: 1086
Joined: Wed Mar 23, 2005 7:22 pm
Location: USA
Contact:

Post by J. Baker »

mkelley wrote:...(and this is what J. Baker suggests in his tutorial -- sorry, but that tutorial looks awful compared to what I can get on my own by reweighting things -- your feet don't bend at all and the leg loses all kinds of volume) but I can't get this by manually assigning verts because that ain't the problem.
I believe I wrote the tutorial on how to use bones (one of the ways, in which I happen to prefer). It wasn't a tutorial on "How to Animate like a Pro". It was just a simple setup to give noobies an idea on how to use bones.

As for comparing to what you can do, I'm not that kind of guy. I know what I'm capable of. :wink:
human
Posts: 688
Joined: Tue Jan 02, 2007 7:53 pm

Post by human »

mkelly wrote, ". . . your solution is okay if that's the look you want in animation -- I want a smoother look . . ."

If mkelly finds a way to significantly improve the look of animation--especially a relatively simple way--then more power to him.

Just do what the other gurus are doing, and teach us all how.
User avatar
slowtiger
Posts: 6250
Joined: Thu Feb 16, 2006 6:53 pm
Location: Berlin, Germany
Contact:

Post by slowtiger »

AS just needs to work right
Well ... what's right then?

Right now a point at a position outside of a joint of two bones only gets repositioned when one bone is rotated against the other. This is general behaviour and "right" in most cases. It only looks "wrong" at a joint, but that's not AS' fault. You need to tell it to handle this point differently, and in which way exactly.

I could make up a command like "take this point (which I specify for you), first put it in the right position as always (calculate this with regard to each bone's weight and so on), then change its curvature towards pointy, then correct its position to be further apart from the joint, best would be you calculate the outline in a way as if it would be two straght lines fixed to each bone and the point in question is placed at where those two lines cross."

But I doubt anyone here could translate this in a script. And even if that were possible, this would only work for angles between 180° and 30° - because any steeper angle asks for an overlapping line.

This is the kind of knowledge an animator has to have, and this is the kind of solution where the drawing of 5 positions is much faster than any clever script.

I got quite used to the way AS handles this. I know how much of a problem I could avoid with clever construction of my characters. I could wish for an update having the curvature (and the line width) of a single point animatable - this feature alone would solve a lot of problems.

(BTW: does there exist a list of all features which are animatable?)
User avatar
mkelley
Posts: 1647
Joined: Fri Nov 02, 2007 5:29 pm
Location: Sunny Florida
Contact:

Post by mkelley »

ST, the whole point of bones is joints -- to say that AS works fine otherwise kind of misses why you use bones (otherwise you'd just push points around).

Maybe I sound more critical because I've been around this bone issue many decades ago -- in 3D. We had all the same arguments (oh, it works "okay" and can't be improved, who cares about loss of volume, etc. etc.) and guess what? It WAS improved and fixed and done right and after that all was happiness again. So I know of what I speak -- if it can be done in 3D (far more complicated) it can be done here (and by done I mean automated so we poor animators don't have to do the manual work necessary -- if I want to push pixels around I'll do animations on pen and paper).

And the solution for bad volume could be handled the way it is in 3D (actually, there are several solutions: the bone weighting one I mentioned, and another one where you simply define the cross section at any particular angle of the two bone bend).

And for human, I explained what I did -- it's easy (assuming you have AS Pro). Just create a one frame action that first preserves the verts in a limb, and then an action with the limb bent to the extreme that you move the verts to look perfect. As you move your arm when it gest out of shap just drop in a reference to the latter action, and when it goes back drop in the first action. It takes far more time to explain than to do, the the result is absolutely perfect.

I suppose the argument could be made that because I can do this then AS doesn't need to improve bones but I look at the actions as a workaround and not something that would be immediately intuitive to folks (or someone would have suggested it here to me first).
User avatar
heyvern
Posts: 7042
Joined: Fri Sep 02, 2005 4:49 am

Post by heyvern »

mkelly,

I'm working on a simple bone set up for joints the preserves volume the way you describe. It won't require an action and will work based on the bone rotation using just a few extra bones and some constraints.

There are two ways I'm going with this so there might be different options. The one that I like uses some bone scaling on "fan bones" that uniformly adjust the volume of the shape at the joint. I use my script for converting rotation to scale but this could be simply scaling a single bone at the joint to adjust the "volume" of the points around the joint.

The other option I am working on doesn't use scaling but does use that cool "springy bones" gizmo Genete came up with ages ago. It is just a "widget" that will "slide" some points away from the joint to adjust the volume.

I will post when I have them ready.

Slowtiger is correct. It isn't a failing in AS. It is just a matter of tweaking bones to get the results you want. You have to understand the nature of how points on a vector relate to each other.

For instance a 3 point vector. If you bend at the middle and the two points on either side of the center bending point are equally spaced you get that big round shape at the center.

BUT... if you "offset" one side, push one of those side points closer the bending center point, you get a "smoother" more natural bend. It is those subtle things that help with getting the look you want.

-vern
User avatar
heyvern
Posts: 7042
Joined: Fri Sep 02, 2005 4:49 am

Post by heyvern »

Here is an example of how point positions effect a bending joint as I described in my previous post:

Image

-vern
User avatar
mkelley
Posts: 1647
Joined: Fri Nov 02, 2007 5:29 pm
Location: Sunny Florida
Contact:

Post by mkelley »

J. Baker wrote: I believe I wrote the tutorial on how to use bones (one of the ways, in which I happen to prefer). It wasn't a tutorial on "How to Animate like a Pro". It was just a simple setup to give noobies an idea on how to use bones.
I want to apologize to you, J, because I think I dismissed your tutorial without fully giving you credit. In particular, you mention in it that problems with the bends can be worked out by moving verts around and I basically pooh-poohed this as unacceptable (based on the amount of work needed to "restore" them).

As it turns out my technique of defining an action to hold the base positions of the verts overcomes this completely, so I'll give you your due and say that with that (that is, using that method) your advice is then very sound.

In fact, with that almost *any* way of doing the bends is acceptable -- as long as you are going to push around the verts to get good volume afterwards in those cases where it doesn't work. Obviously you want to start off with the best case scenerio and move as little verts as possible.

For me that is giving large weights to all bones -- that gets you "most" of the way there. Then define an action as I noted earlier to hold the verts of the limb in question.

I just got through doing a five minute animation which used this heavily and I'm not sure my second step (that is, defining an action which moves the verts properly at the extreme bone positions) is necessary. It's nice, and I think I'll still do it, but as long as you have the one action to restore the verts pushing them around by hand when they get unruly isn't all that time consuming (I found I had to do it about a grand total of 20 or 25 times during the course of that long animation). Being able to restore quickly IS critical, though.

Which kind of limits this approach to AS pro -- you could, of couse, make a key at frame 1 which holds the vert positions and copy as needed, but this would be a real PITA as you get further into the animation (going back to that frame, copying, and then pasting into the right position, particularly since AS doesn't seem to allow you multiple copy/paste of keys). But I wouldn't do without actions anyway (my walk cycles of just four key positions really depend upon this).
User avatar
J. Baker
Posts: 1086
Joined: Wed Mar 23, 2005 7:22 pm
Location: USA
Contact:

Post by J. Baker »

mkelley wrote:I want to apologize to you, J, ...
No problem. I think all methods can come in handy and we find ways which we all prefer to work or get the job done. ;)
Post Reply