使用了MotionVector的SkinnedMeshRenderer

首先我们先理解一下Unity里面的“骨骼动画”。它的概念很贴近现实中的“骨骼”的含义:常见的模型被分解为两个部分:骨骼Bones和蒙皮Mesh。这些以“关节”结构连接在一起的骨头为模型构建起了一套骨架;随着骨架结构的运动变化,模型表面的蒙皮网格也会随着骨架的变动而发生改变

这种以骨骼位置变动为核心的动画就是骨骼动画。相较于关键帧动画和关节动画,Bone animations目前在Unity中应用极其广泛

在Unity中,如果导入的模型有骨骼动画,那么Unity就会自动为对应的网格添加上Skinned Mesh Renderer,来渲染这些骨骼动画。蒙皮网格渲染器组件会将模型的网格(Mesh)与骨骼节点绑定起来,当骨骼动画播放时,网格的顶点会随着它所绑定的骨骼进行运动,这便形成了“皮肤”随骨骼运动的效果。在Inspector界面可以对该组件进行一系列配置

其中有一项属性就是本条的主角:Skinned Motion Vector

运动向量(Motion Vector)的概念来源于视频压缩领域,在维基百科中有如下解释:

In video compression, a motion vector is the key element in the motion estimation process. It is used to represent a macroblock in a picture based on the position of this macroblock (or a similar one) in another picture, called the reference picture.

通俗地理解,运动向量描述了在屏幕空间中,每个像素所对应的物体在连续两帧之间的运动“速度”,该“速度”值等于该像素块在这帧的位置减去在上一帧的位置,也就是当前像素下的片元在相邻两帧之间,屏幕空间位置的差。运动向量的示意图如下:


来源:维基百科

Unity中,在Mesh Renderer与Skinned Mesh Renderer组件中都可以开启Motion Vector,用以获取物体的运动信息。若开启,相机会在渲染管线中增加一个motion vector pass,将运动向量渲染在一个Buffer当中,用户可以将Shader脚本中这个Buffer用于后处理特效

Motion Vector一般会用于运动模糊这样的后处理特效、基于时间的抗锯齿算法(temporal antialiasing)等。但是Motion Vector带来的显存中的双倍buffer开销和运算量开销是不容忽视的。而Skinned Motion Vector在移动端项目当中的应用也是很少的,一般不建议开启

所以,在本条规则筛选出对应的Skinned Mesh Renderer后,开发团队需要根据实际情况决定是否勾选对应骨骼动画的Skinned Motion Vector