skinned mesh 蜘蛛样

被skinned mesh 折磨了 好久,开始感觉skinindices不对,因为pix显示里面全是0

后来跟来跟去发现是这样的,那些uchar的整数被pix用float的格式显示出来 (显示为0.0000000而不是按照生命的uint显示为0)

变成很小的数所以是0.00000

这样skinindices 就也是对的了 weight看起来也是对的 因为加起来等于1

 

 

哦对了 phyre的d3d11要把shader里面的semantic

skinindices :BLENDINDICES;

skinweights :BLENDWEIGHTS;

要这么写,不能就写个color0 看起来它是由后面的sementic来确定的

 

chr的skin运动起来看起来是蜘蛛一样的,并没有拉伸到无穷远,也没有很乱,说明还是比较正确的,只是哪里。。比如没有unormalize或者范围被扩大了(float 才要normalize 这个排除了

weight错误我也大概能认出来了 是会有蹼状的拉伸

矩阵如果没有转置会有三角片那样像无限远拉伸

这种在一个范围内的拉伸反向,看起来是比如把脚跟的matrix乘到了膝盖膝盖上,skintransform看起来也是对的,所以还是skinindices不对,位置不对。。。感觉是这样

 

偶然发现了pix显示buffer的方法,在layout那页把你的类型写进去就可以了,那页相当于脚本。

这样就奇怪了 因为skinindices还是0

.。。。。。skinindices并不是0 前面有些frame是0是因为那些frame里还没画

后面找到了数据完全正确的skinindiceds 和weight 矩阵看起来也对

就只有mul的问题了 也就是一开始就最先怀疑的rowmajor的问题

被semantic这个问题遮蔽了

 

这下人物也正常了 只有define mul(a,b)mul((b),(a))好使就一切ok啦 

上次升级我大概是手动改的mul 这次一定要找到一个宏

准备用u4 的处理方法

//////if you genetated matrix (float3X3(VectA,VectB,VectC)),you must use mul else use MulMatrix means you passed through a matrix para

if defined XX

define MulMatrix(Mtx, Vect) mul(Vect, Mtx)

 

这是个比较全面的解决方案,忽略我前面文章说的 单纯define mul(a,b)mul((b),(a))这种方法

你可能感兴趣的:(in)