mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-21 10:49:23 +00:00
Pre-transform bones with inverse bind instead of sending it to the shader
This commit is contained in:
@@ -227,7 +227,6 @@ bool CShaderGenerator::CreateVertexShader(const CMaterial& rkMat)
|
||||
ShaderCode << "layout(std140) uniform BoneTransformBlock\n"
|
||||
<< "{\n"
|
||||
<< " mat4 BoneTransforms[100];\n"
|
||||
<< " mat4 InverseBindTransforms[100];\n"
|
||||
<< "};\n"
|
||||
<< "\n";
|
||||
}
|
||||
@@ -260,11 +259,10 @@ bool CShaderGenerator::CreateVertexShader(const CMaterial& rkMat)
|
||||
<< " \n"
|
||||
<< " if (BoneIdx > 0)\n"
|
||||
<< " {\n"
|
||||
<< " mat4 BoneSpaceTransform = InverseBindTransforms[BoneIdx] * BoneTransforms[BoneIdx];\n"
|
||||
<< " ModelSpacePos += vec3(vec4(RawPosition, 1) * BoneSpaceTransform * Weight);\n";
|
||||
<< " ModelSpacePos += vec3(vec4(RawPosition, 1) * BoneTransforms[BoneIdx] * Weight);\n";
|
||||
|
||||
if (VtxDesc & eNormal)
|
||||
ShaderCode << " ModelSpaceNormal += RawNormal.xyz * inverse(transpose(mat3(BoneSpaceTransform))) * Weight;\n";
|
||||
ShaderCode << " ModelSpaceNormal += RawNormal.xyz * inverse(transpose(mat3(BoneTransforms[BoneIdx]))) * Weight;\n";
|
||||
|
||||
ShaderCode << " }\n"
|
||||
<< " }\n"
|
||||
|
||||
Reference in New Issue
Block a user