Skinned Mesh Renderer 中属性详解
RootBone:根骨骼,有两个作用。
1.作为 mesh 在屏幕外时是否更新的依据。
rootBone的位置是Bounds的原点。而这个mesh是否渲染要根据Bounds是否在屏幕空间内来判断。如果rootbone为空,则以组件所在GameObject的Transform为中心计算Bounds。
2.进行坐标计算时的 Root 空间。
在 Unity 中计算 mesh 上一点位置的流程大概是这样的:
1 | V_{RootBone_{local}} = M_{World→RootBone}⋅M’{Bone→World}⋅M{Bindpose}⋅V_{world} |
不同的Root Bone,在Shader中得到的vertex位置(即local space position)不同,从而导致基于local space计算的特效效果会发生变化。
一些关于SkinnedMeshRenderer的Tips:
- 如果fbx有更新,特别是关于骨骼的更新,应该用fbx重新生成一个prefab,而不是只替换旧prefab里的mesh。因为skinnedmesh的一部分信息是保存在这个component里头,例如要绑定的骨骼列表,而且在fbx更新时,相关的origin prefab是不会更新的(做成prefab变体可能会一起更新)。所以为了保险起见,还是重新做一个吧。