PDA

View Full Version : Skinning algorithms

Itun.itu
03-05-2012, 10:24 AM
Skeletal animation is a well-known techniques in 3D Computer Graphics. I am interested in transformation blending algorithm when a final transformation is calculated from several join transformations. I read about different techniques and I have tried dual quaternion and linear matrix methods. I understand that first gives good results and the second has problems. However, I don't understand why it cannot be split a transformation into translation and rotation and make their interpolations separately. For example, I can present the rotation as Euler angles (with some restrictions) and the translation as vector and make a linear interpolation. What are the problems with this method of interpolation? Why do all people (in papers, posts, ...) suggest to use complex and performance consuming methods?

Alfonse Reinheart
03-05-2012, 10:33 AM
What are the problems with this method of interpolation?

You mean, besides the fact that it involves the use of Euler angles which interpolate horribly? Oh, and how do you linearly interpolate between three or four sets of Euler angles? Many vertices are weighted to more than two bones, after all. And why would whatever method you suggest for doing this lead to reasonable results?

Also, the performance of taking Euler angles and building a matrix out of them is going to be far worse than the performance of doing 4 matrix multiplies and doing a weighted sum of the results.

Itun.itu
03-05-2012, 11:07 AM
Euler angles which interpolate horribly?
Can you, please, explain why it is horrible?

how do you linearly interpolate between three or four sets of Euler angles?
Why not?

Alfonse Reinheart
03-05-2012, 12:11 PM
Can you, please, explain why it is horrible?

Try it. Just take a square, give it two sets of Euler angles, and then lineally interpolate between them.

Now tell me if the half-state between them even resembles what you would get if you interpolated a quaternion.

Dark Photon
03-05-2012, 08:13 PM
Skeletal animation...transformation blending algorithm when a final transformation is calculated from several join[t] transformations. ...tried dual quaternion and linear matrix methods...

However, I don't understand why it cannot be split a transformation into translation and rotation and make their interpolations separately.
You could. Some folks do. But there are problems with that in the general case.

Why do all people (in papers, posts, ...) suggest to use complex and performance consuming methods?

Just to recap, you probably already get this but AFAIK the main reason to consider the more "complex and [potentially] performance consuming methods" is to avoid joint collapse. There are many strategies for attacking this (blend bones, quaternion-based methods, spline bones, corrective displacement methods, etcetc.) with their advantages and disadvantages. And just to slightly correct the implication of your statement, not all of these "more complex" methods are more expensive than standard linear blend skinning (LBS).

Alfonse has sufficiently covered, for interpolating rotations specifically, why doing it on a euler angle rep isn't a great idea.

However to the more general idea of separately interpolating rotation and translation (in some form)...

Considering rotations only (i.e. assuming no translation), ordinary quaternion interpolation works here quite well. Using SLERP (or even QLERP), you get a smooth change of rotation angle (though with QLERP you get a non-constant speed). These apply in the case where you have at most 2 adjacent bone influences per vertex. Same translation center, so no translation interpolation required. You can read all about this in Hardware Skinning with Quaternions (Hejl 2004, Game Pgm Gems 4) and Spherical Blend Skinning (Kavan 2005). If this is sufficient or you, then (AFAIK) just use it and forget dual quaternions. In fact, allegedly if you handle antipodality on the CPU, these quaternion interpolation methods (in the Hejl form -- i.e. no 3+ bone expensive SVD rotation center solves ala Kavan) can be faster than standard LBS.

Where dual quaternion skinning comes in is where you need to interpolate between joint transforms where the rotation and translation may be different. This more often occurs in the case where you have 3 or more bone influences. You could do SLERP/QLERP for the rotation part and linearly interpolate the translation, but this is not really correct (your translation center doesn't follow a nice "screw" path around the joint). See the diagrams and text in the dual quat papers for details. In particular, check out Geometric Skinning with Approximate Dual Quaternion Blending (Kavan, 2008).

So as with all things, it really boils down to what your requirements are. Maybe standard LBS with blend bones cooked by your friendly database modeler or publishing tool are what you'd prefer (though there's more bones to transform/solve/etc.). Or quaternion interpolation. Or... <<insert one of many other techniques for combating joint collapse here>>