A "singular" matrix means it is a non-invertible matrix. That is to say, if you attempt to invert the matrix, you end up with an impossible answer. Since inverting a matrix is like dividing by the matrix, this is analogous to saying x is singular if 1/x can't be computed, which (in the case of simple numbers) is the same thing as saying x is singular if x is 0.
In matrices, the most common kind of singular matrix is one in which one of the axes has a length of 0, which means it contains a scale to zero, or at least a scale to zero in one axis (x, y, or z). There are a few other kinds of singular matrices, but you have to go out of your way to construct them (you can't construct them with the normal translate, rotate, scale trinity).
So, I suspect you probably really do have a scale to zero in one of your matrices, but you didn't find it for some reason. Maybe it's a matrix you're not aware of. One way to track it down will be to add the prc setting:
- Code: Select all
which will raise a C++ exception instead of just printing a warning. However, then you'll need to break into the program with a debugger and inspect the stack to figure out where you are, which means you'll need to have your own personal build of Panda3D (instead of using the build provided here, which doesn't have the needed debugging symbols). So that option may be more trouble than it's worth.
So, the next option is to look more closely at the egg file for a zero scale (either i, j, or k will be 0 for at least one frame somewhere).
Or, another option is not to worry about it, just ignore the warnings and see if your animation comes out OK. Chances are good that it will be just fine. If something *is* broken, then knowing which bone is now broken will give you insight as to where to look for the singularity.