I am exploring how to animate a character with a skeleton. So far, I haven’t been successful.
A model that I downloaded from the internet, and that I was trying to rig myself in Blender, doesn’t show up at the right position, and its scale is not correct, when using the skinning shader as opposed to the Phong shader for instance.
Because I did not know if I was doing something wrong in Blender (or Blender’s dae export has flaws), or in vvvv, I started from the astropimp patch that Stickman posted in https://discourse.vvvv.org/t/7021.
In the attached patch, you can see that the transformations are correct when looking at the skeleton using the SelectJoint node, and the result is the same for the spheres rendered at every joint transform.
However, the skinned guy doesn’t respond as expected. Does anyone know what I am doing wrong? Is it me, is it a wrong dae file, is it a bug in the skinning shader?
hmm, funny thing is that in the skeleton the right hip is the left one etc.
but i couldn’t find the problem either after a quick look at it. is it possible in blender to set everything up in a right handed coordinate system? those conversion of coordinate systems can be very confusing. i tried to make it easy with the settings one can change in the collada file loader, but maybe there’s something wrong and the skeleton node doesn’t apply this conversion? not sure right now.
you could also try to add an animation in blender, save it and use the skinning matrix output of the mesh node directly (together with the time input to play the animation) to see if at least that one works.
I imported the astroPimp back into Blender, I added some bad animation to the guy, and then exported it again (using Blender 2.60a, 2.59 produced a mutant without animation).
Now the animation works, but the SetJoint stuff still produces strange (allthough different) results, allthough right seems to stay right now.
I should check how I could change the coördinate system in Blender, since my experience with Blender is limited to a week.
But even without any transformations on the joints the results are odd.
It is as if the transformations coming from the Mesh node, only hold a rotation, whereas the ones coming from GetJointTransform also have a translation. Is there another node that I should use that only produces the change to the joint relative to its ‘rest’ position, rather than the whole transformation?
ok, after looking at http://www.scribd.com/doc/28819115/COLLADA-1-4-1-Specification-EN#outer_page_32, i remembered the bind shape matrix. hidden pin on the collada mesh node (…). if you add that one to the equation things start looking better.
see attached patch. i pre multiplied the skinning matrices with the bind shape matrix and removed the transform out/in connection. and make sure the out transform count is 60 of the getjointtransform node. it keeps setting itself back. seems we hit a bug here.
for everyone trying ths out and thinking, this doesn’t work: on the GetJointTransform node in the middle, set the ‘Output Transform Count’ pin (which is set to ‘Fixed to 60’) to ‘Dynamic’, and then set it back to ‘Fixed to 60’!
Only then this node’s output spread will really have 60 slices (instead of 23 oterwise).