Responses, beep boop:
Ah, cool
I'm curious -- what libraries (if any) are you using for the non-linear least squares solve? I was looking at this library a while ago but didn't get to try it --
http://www.ics.forth.gr/~lourakis/sparseLM/ ... (it's Levenberg-Marquardt not Gauss-Newton though.) It looks like the paper probably used some sparse linear solver per each iteration of the Gauss-Newton, but I don't see them say the details explicitly anywhere.
With their method, you just need to compute G, the pseudoinverse of the matrix A, which is easy enough, and then b(V) is a non-linear function of V they describe in detail. Fortunately you can precompute G, so you don't need to do a linear solve each iteration or anything. I think I'll stick with the method they've got, unless I find I have convergence problems or something, in which case I might use Levenberg-Marquardt or see what else I can do. I don't know, we'll cross that bridge when we come to it.
You both will and won't be able to do this, ha ha. Obviously actually turning a limb out of the plane is impossible (and wouldn't look right anyway). You will be able to change bone length, dynamically, and by turning off global area preservation, you will cause distortions. Whether you'll be able to get things to go into perspective properly is another matter entirely, and until I have the mesh system and solver up and running (next week, I should think), I don't want to speculate. It might wind up looking okay for quick movements, and it might not.
One thing that I can stick on the feature wish-list, though, is an additional animatable FFD system. It would mean a lengthier setup for frames (depending on how many domains you were using and their configurations), but you'd be able to perspective warp parts of meshes, if you wanted.
Also, remember you can use this as part of a tool-chain. Since it generates bitmap data, you'll be able to go in and edit frames manually afterwards as well. If you want detailed and accurate shading, for example, you could draw colourmaps or silhouettes, produce all your frames, then paint shading on in Photoshop or whatever afterwards, or make minor adjustments. You'd still be able to do the bulk of your animating in a more automated, more interactive way, without having it look too computer-generated.
Also, the ability to change the entire, or parts of, the source texture mid-animation. So I can, for instance, change a character's hand from open to closed, or have some more traditionally animated details within the larger animation (like clothes flapping, hand motions, facial expressions, etc.).
Yeah, I had plans for this. The only issue is the boundary curve around objects that are being animated. If the animation is just a change in texture, and the boundary remains the same, that's trivial, but if you want flapping clothes or hand motions where the boundary of the shape is changing... well, I can definitely precompute meshes and operators for each frame in an animation, but the issue would be how to handle the fact that changes in the boundary might move user-defined control points out of the mesh as it animates.
For example, if you've got an open hand and you've defined a control point at the end of one finger, then the next frame the hand closes, where does that control point map to on the mesh?
The best I can think of is for frame data to consist of:
- The texture image.
- The triangle mesh.
- The operator G for the solver.
- A vector of offsets mapping the control points from the previous frame to their closest vertices in this frame.
Then you'd be able to successively offset control points every time the frame changes. I think that would work. I'll have to think about it.
Edit: if you have frames with vertex lists V and U, this is still a potential problem if |V|=/=|U| depending on the number of control points. Imagine you don't want a character's head to deform at all, so you select every vertex in that region as a control point. Then the head is animated to turn obliquely, the areas of the two frames are unequal and suddenly you have fewer vertices than control points. I'll probably just need heuristics to handle any extra cases. There
might be unconquerable weirdness, but I hope it should work okay for typical use cases.
The verdict on this one is: definitely texture changes (with identical boundary curves), possibly animations including changes in the boundary curve, but I won't guarantee it's doable.
and, (one more, sorry) layers?
You kind of get this for free, since you can attach multiple meshes to different bones. If you don't want hierarchical transforms, you can just stick everything on to the root. You'll be able to specify draw order.
toonboom anyone?
The problem with Toon Boom (and basically every other animating package I've checked out) is that their support for bitmap images is basically just a rudimentary skeletal system. I don't even think they do FFD. They seem to have morphing only of vector images. Also, even their skeletal systems for vector images produce artifacts (if you rotate the leg of an outlined character at the knee, the outline enters the interior of the leg).
My goal is really to have something that's flexible enough to handle painterly art well.