@ -6,38 +6,38 @@
#define NUM_WEIGHTS_PER_VERT 4
#define NUM_WEIGHTS_PER_VERT 4
attribute vec4 inBoneWeight;
attribute vec4 inHW BoneWeight;
attribute vec4 inBoneIndex;
attribute vec4 inHW BoneIndex;
uniform mat4 m_BoneMatrices[NUM_BONES];
uniform mat4 m_BoneMatrices[NUM_BONES];
void Skinning_Compute(inout vec4 position){
void Skinning_Compute(inout vec4 position){
if (inBoneWeight.x != 0.0) {
if (inHW BoneWeight.x != 0.0) {
#if NUM_WEIGHTS_PER_VERT == 1
#if NUM_WEIGHTS_PER_VERT == 1
position = m_BoneMatrices[int(inBoneIndex.x)] * position;
position = m_BoneMatrices[int(inHW BoneIndex.x)] * position;
#else
#else
mat4 mat = mat4(0.0);
mat4 mat = mat4(0.0);
mat += m_BoneMatrices[int(inBoneIndex.x)] * inBoneWeight.x;
mat += m_BoneMatrices[int(inHW BoneIndex.x)] * inHW BoneWeight.x;
mat += m_BoneMatrices[int(inBoneIndex.y)] * inBoneWeight.y;
mat += m_BoneMatrices[int(inHW BoneIndex.y)] * inHW BoneWeight.y;
mat += m_BoneMatrices[int(inBoneIndex.z)] * inBoneWeight.z;
mat += m_BoneMatrices[int(inHW BoneIndex.z)] * inHW BoneWeight.z;
mat += m_BoneMatrices[int(inBoneIndex.w)] * inBoneWeight.w;
mat += m_BoneMatrices[int(inHW BoneIndex.w)] * inHW BoneWeight.w;
position = mat * position;
position = mat * position;
#endif
#endif
}
}
}
}
void Skinning_Compute(inout vec4 position, inout vec3 normal){
void Skinning_Compute(inout vec4 position, inout vec3 normal){
if (inBoneWeight.x != 0.0) {
if (inHW BoneWeight.x != 0.0) {
#if NUM_WEIGHTS_PER_VERT == 1
#if NUM_WEIGHTS_PER_VERT == 1
position = m_BoneMatrices[int(inBoneIndex.x)] * position;
position = m_BoneMatrices[int(inHW BoneIndex.x)] * position;
normal = (mat3(m_BoneMatrices[int(inBoneIndex.x)][0].xyz,
normal = (mat3(m_BoneMatrices[int(inHW BoneIndex.x)][0].xyz,
m_BoneMatrices[int(inBoneIndex.x)][1].xyz,
m_BoneMatrices[int(inHW BoneIndex.x)][1].xyz,
m_BoneMatrices[int(inBoneIndex.x)][2].xyz) * normal);
m_BoneMatrices[int(inHW BoneIndex.x)][2].xyz) * normal);
#else
#else
mat4 mat = mat4(0.0);
mat4 mat = mat4(0.0);
mat += m_BoneMatrices[int(inBoneIndex.x)] * inBoneWeight.x;
mat += m_BoneMatrices[int(inHW BoneIndex.x)] * inHW BoneWeight.x;
mat += m_BoneMatrices[int(inBoneIndex.y)] * inBoneWeight.y;
mat += m_BoneMatrices[int(inHW BoneIndex.y)] * inHW BoneWeight.y;
mat += m_BoneMatrices[int(inBoneIndex.z)] * inBoneWeight.z;
mat += m_BoneMatrices[int(inHW BoneIndex.z)] * inHW BoneWeight.z;
mat += m_BoneMatrices[int(inBoneIndex.w)] * inBoneWeight.w;
mat += m_BoneMatrices[int(inHW BoneIndex.w)] * inHW BoneWeight.w;
position = mat * position;
position = mat * position;
mat3 rotMat = mat3(mat[0].xyz, mat[1].xyz, mat[2].xyz);
mat3 rotMat = mat3(mat[0].xyz, mat[1].xyz, mat[2].xyz);
@ -47,19 +47,19 @@ void Skinning_Compute(inout vec4 position, inout vec3 normal){
}
}
void Skinning_Compute(inout vec4 position, inout vec3 tangent, inout vec3 normal){
void Skinning_Compute(inout vec4 position, inout vec3 tangent, inout vec3 normal){
if (inBoneWeight.x != 0.0) {
if (inHW BoneWeight.x != 0.0) {
#if NUM_WEIGHTS_PER_VERT == 1
#if NUM_WEIGHTS_PER_VERT == 1
position = m_BoneMatrices[int(inBoneIndex.x)] * position;
position = m_BoneMatrices[int(inHW BoneIndex.x)] * position;
tangent = m_BoneMatrices[int(inBoneIndex.x)] * tangent;
tangent = m_BoneMatrices[int(inHW BoneIndex.x)] * tangent;
normal = (mat3(m_BoneMatrices[int(inBoneIndex.x)][0].xyz,
normal = (mat3(m_BoneMatrices[int(inHW BoneIndex.x)][0].xyz,
m_BoneMatrices[int(inBoneIndex.x)][1].xyz,
m_BoneMatrices[int(inHW BoneIndex.x)][1].xyz,
m_BoneMatrices[int(inBoneIndex.x)][2].xyz) * normal);
m_BoneMatrices[int(inHW BoneIndex.x)][2].xyz) * normal);
#else
#else
mat4 mat = mat4(0.0);
mat4 mat = mat4(0.0);
mat += m_BoneMatrices[int(inBoneIndex.x)] * inBoneWeight.x;
mat += m_BoneMatrices[int(inHW BoneIndex.x)] * inHW BoneWeight.x;
mat += m_BoneMatrices[int(inBoneIndex.y)] * inBoneWeight.y;
mat += m_BoneMatrices[int(inHW BoneIndex.y)] * inHW BoneWeight.y;
mat += m_BoneMatrices[int(inBoneIndex.z)] * inBoneWeight.z;
mat += m_BoneMatrices[int(inHW BoneIndex.z)] * inHW BoneWeight.z;
mat += m_BoneMatrices[int(inBoneIndex.w)] * inBoneWeight.w;
mat += m_BoneMatrices[int(inHW BoneIndex.w)] * inHW BoneWeight.w;
position = mat * position;
position = mat * position;
mat3 rotMat = mat3(mat[0].xyz, mat[1].xyz, mat[2].xyz);
mat3 rotMat = mat3(mat[0].xyz, mat[1].xyz, mat[2].xyz);