Unity Bone weights do not match bones.

在尝试合并两个带有骨骼和蒙皮的Unity模型时,只更新了骨骼数组和权重,但忽略了BindPoses。这导致模型加载时报错且显示不全。解决方法是根据新骨骼数组更新BindPoses,保持对应关系,即newBindPoses[newBoneIndex]=originBindPoses[oldBoneIndex]。完成更新后,模型将正常显示。
摘要由CSDN通过智能技术生成

记录一下这个问题的原因及解决办法:

问题环境:

我在进行两个带蒙皮的网格(SkinnedMesh)的模型合并的时候,合并了两个模型的骨骼,重新计算了合并后模型的骨骼数组Bones,并重新计算了网格的骨骼权重(sharedMesh.boneWeights),这个时候合并出来的模型在Unity里面会持续报错文章标题的错误,而且合并出来的模型只有合并前的其中一个模型的网格被显示了出来

问题:

仅更新了骨骼数组和骨骼权重(骨骼增多,骨骼下标也发生了变化),但是没有更新BindPoses,这个是驱动骨骼最初绑定位置的(也就是静态下网格被骨骼影响位置),这个数组没有更新,导致首先数组数量和骨骼数量对不上,少了很多,其次它在找骨骼的时候,没有找到正确的骨骼

解决:

和合并骨骼数组的方法一样,查原来BindPoses数组里面每个值对应的是哪个骨骼,然后这个骨骼在新的骨骼数组里面的下标是什么,然后把在新的BindPosese数组的这个下标位置更新成原来的bindPoses矩阵即可,公式化就是:

newBindPoses[newBoneIndex] = originBindPoses[oldBoneIndex]

newBindPoses=new Matrix4x4[newBones.Length]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值