Skinned Mesh虽然这里写死了限制最多75个骨骼,实际上可以通过修改引擎源代码来放宽限制:
这里的代码来自Engine/Source/Runtime/RHI/Public/RHIDefinitions.h
,修改上方的“75”就可以放宽骨骼数量要求。通常建议放到256。
另外说一下为什么限定75:GLES2.0时代寄存器数量有限,于是就在引擎里限制死了骨骼数量。但是在GLES 3.0不需要这种限制,所以可以直接在源代码里面改大限制。
除了直接改代码还可以:
一是用贴图存储矩阵,但shader里不好处理旋转和缩放,因为将矩阵转成四元数再插值旋转很麻烦,所以到这一步我就放弃了,直接用矩阵插值旋转。同样也不方便支持IK等骨骼动画的融合
第二是用类似分材质的方式,比如说将身体分成头身脚,这样它们就是单独的模型,但是他们可以共用同一套骨骼。在CPU每帧计算完没根骨骼的矩阵之后,需要把矩阵传进GPU。但是就没必要在进行渲染的时候整套骨骼都传了,只需要传影响这部分的骨骼。比如全身75根,影响头的只有20根,那其实渲染就可以只传20根。缺点就是得手动处理映射关系,以及1个部位就是1个Drawcall。
第三纯CPU算矩阵,效率太低,不推荐。