Не корректно работает Skinning. OpenGL & ASSIMP
Пытаюсь повторить уроки по OpenGL на C++, но использую OpenGL и C#, для загрузки модели использую AssimpNet 4.1.0.
Шейдер GLSL:
mat4 view = viewRotation * viewTranslation;
mat4 viewProjection = projection * view;
vec4 transformedPosition = (boneTransform[boneID.x] * vec4(position, 1)) * boneWeight.x;
transformedPosition += (boneTransform[boneID.y] * vec4(position, 1)) * boneWeight.y;
transformedPosition += (boneTransform[boneID.z] * vec4(position, 1)) * boneWeight.z;
transformedPosition += (boneTransform[boneID.w] * vec4(position, 1)) * boneWeight.w;
gl_Position = viewProjection * transformedPosition;
Код C#:
List<Matrix4x4> transforms = new List<Matrix4x4>();
for (int i = 0; i < bones.Length; i++) {
//TRS это комбинированная матрица, = node.Parent.Transform * node.Transform
//TRS и offset получаю из Assimp
transforms.Add(TRS * offset);
}
GL.UniformMatrix4fv(material.boneTransformLocation, transforms.Count, false, transforms.ToArray());
Результат (слева как должно быть, справа что у меня):
Почему-то у меня робот получился немного вытянутым вверх и сплющенным по бокам, но это другая проблема, в целом кости тут на своих местах.

При масштабировании происходит смещение, масштаб по оси Y был 1.5 и смещение было на ту же величину.
Вращается не вокруг своей кости, а смещается, будто вращается вокруг центра модели.

В чём же искать проблему, неправильно работают матрицы или я делаю не в том порядке как нужно? Update: главная проблема была найдена в импорте модели, я пытался изменить размер модели и делал это не правильно, это как-то портило кости, придётся мириться с масштабом x100 при импорте FBX модели.
Однако, тогда появилась другая проблема:
Моя система координат отличается от той, что используется в Assimp.

Для решения я использовал Matrix4x4.Decompose, затем инвертировал X и Y в position и rotation, то есть в -x, y, -z, затем из них снова создал матрицу.
В итоге проблема была в масштабе и перевёрнутой системе координат.