我的骨骼动画顶点着色器有问题。当一次制作大约32个模型的动画时,我只能得到60帧/秒,在低端计算机上我得到的更少。下面的顶点着色器:
uniform mat4 boneMatrixes[128];
void main(){
vec4 a = gl_Vertex;
// Apply bone transformation
a = boneMatrixes[int(gl_Normal.x)] * gl_Vertex;
gl_Position = gl_ModelViewProjectionMatrix * a;
gl_TexCoord[0] = gl_MultiTexCoord0;
}参数是这样绑定的(请注意,这是Java,我使用的是LWJGL OpenGL绑定:)
int boneMatrixesName = ARBShaderObjects.glGetUniformLocationARB(mProgramShader, "boneMatrixes");
// matrixFloatBuffer is a FloatBuffer of size 128 * 16
ARBShaderObjects.glUniformMatrix4ARB(boneMatrixesName, false, matrixFloatBuffer);注释掉a = boneMatrixes[int(gl_Normal.x)] * gl_Vertex;行可以将性能提高大约500%。如何提高此顶点着色器的性能?它看起来尽可能的简单和快速。
发布于 2012-04-03 05:16:17
根据GPU供应商和型号的不同,这128个4x4矩阵可能使用多达512个统一组件。这是一个可怕的数量,也浪费了大量的空间,因为实际有用的部分是3x4。您可能希望检出四元数,作为将蒙皮信息上载到GPU并在着色器中将其转化为矩阵的一种方法。
https://stackoverflow.com/questions/9983679
复制相似问题