我对基于逆向运动学和变形目标的实时角色动画有着执着的追求。
我使用了一个名为Animata的开源(基于FLTK)IK链式动画程序,取得了一定的进展。我甚至将他们的渲染代码移植到了不同的平台上(Java/Processing和iPhone)alt video http://ats.vimeo.com/612/732/61273232_100.jpg video of Animata renderers 然而,我从未确信他们的代码特别优化,每帧似乎需要在CPU上进行大量模拟来渲染,这对我来说似乎有点不必要。
现在,我正在开始一个项目,制作一个依赖于实时角色动画的iPad应用程序。在浏览iOS文档时,我发现了一个“两个骨骼蒙皮着色器”的代码片段。
我使用了一个名为Animata的开源(基于FLTK)IK链式动画程序,取得了一定的进展。我甚至将他们的渲染代码移植到了不同的平台上(Java/Processing和iPhone)alt video http://ats.vimeo.com/612/732/61273232_100.jpg video of Animata renderers 然而,我从未确信他们的代码特别优化,每帧似乎需要在CPU上进行大量模拟来渲染,这对我来说似乎有点不必要。
现在,我正在开始一个项目,制作一个依赖于实时角色动画的iPad应用程序。在浏览iOS文档时,我发现了一个“两个骨骼蒙皮着色器”的代码片段。
// A vertex shader that efficiently implements two bone skinning.
attribute vec4 a_position;
attribute float a_joint1, a_joint2;
attribute float a_weight1, a_weight2;
uniform mat4 u_skinningMatrix[JOINT_COUNT];
uniform mat4 u_modelViewProjectionMatrix;
void main(void)
{
vec4 p0 = u_skinningMatrix[int(a_joint1)] * a_position;
vec4 p1 = u_skinningMatrix[int(a_joint2)] * a_position;
vec4 p = p0 * a_weight1 + p1 * a_weight2;
gl_Position = u_modelViewProjectionMatrix * p;
}
有人知道我该如何使用这个片段吗?它的上下文非常少。我认为这是我想要在GPU上执行的基于骨骼的IK链动画所需做的,但我不确定。