Unity 使用__带蒙皮的网格渲染器 (Skinned Mesh Renderer)__ 组件来渲染骨骼动画;此类动画中的网格形状由动画骨骼进行变形。这种技术对于关节弯曲的角色和其他对象(与关节更像铰链的机器相反)非常有用。
__骨骼__是蒙皮网格内的不可见对象,会影响网格在动画过程中的变形方式。骨骼连接在一起形成分层的“骨架”,并通过旋转骨架的关节使骨架移动来定义动画。每个骨骼都附着在周围网格的一些顶点上。播放动画时,顶点会随着它们所连接的一个或多个骨骼移动,因此“皮肤”也跟随骨架移动。在简单的关节(例如肘部)处,网格顶点受到在此处相交的两个骨骼的影响,当关节弯曲时,网格将逼真地伸展和旋转。在更复杂的情况下,两个以上的骨骼会影响网格的特定区域,从而产生更微妙的移动。
虽然蒙皮网格最常用于动画,但也可将刚体组件附加到骨架中的每个骨骼,从而将其置于物理引擎的控制之下。这种做法通常用于创建“布娃娃”效果;在此效果中,角色在被抛出或被爆炸击中后,四肢胡乱摆动。
其中一些属性也会出现在网格渲染器 (Mesh Renderer) 参考页面上。下表提供了蓝色框中显示的其余属性的相关信息。
属性: | 功能: |
---|---|
BlendShapes | 存储此网格上定义的混合形状。 |
Rendering Layer Mask | 确定该渲染器所在的渲染层。使用可编程渲染管线时,可以额外指定一个特定于渲染的层遮罩。这将根据渲染器具有的遮罩和传递给 DrawRenderers 命令的遮罩筛选渲染器。 |
Renderer Priority | 按优先级对渲染器排序。首先渲染较小值,最后渲染较大值。 |
Quality | 定义蒙皮时每个顶点使用的最大骨骼数。骨骼数量越多,渲染器的质量越高。 Unity 可以使用从 1 到 32 的任意数量的骨骼为每个顶点蒙皮,但多于四个骨骼会降低性能。使用的骨骼越多,获得的效果就越好,但是每增加一个骨骼都会带来更高的处理开销。 |
Auto | 使用 Blend Weights Quality 设置。 注意:如果导入了自定义数量的 Skin Weights,并且您希望允许四个以上的骨骼产生影响力,则必须选择此选项并确保 Blend Weights 设置为 Unlimited。 |
1 Bone | 仅使用一个骨骼来影响每个顶点。 |
2 Bones | 每个顶点使用最多两个骨骼。这是游戏的通用设置,因为这个设置可以在视觉质量与性能之间实现良好折衷。 |
4 Bones | 每个顶点使用最多四个骨骼。如果需要允许四个以上的骨骼影响单个顶点,请使用 Blend Weights Quality 设置。 |
Update When Offscreen | 启用此选项可计算每帧的包围体积(即使对摄像机不可见)。禁用此选项可在游戏对象不在屏幕上时停止运行动画。 默认情况下,Unity 不会更新对摄像机不可见的蒙皮网格。当网格返回屏幕时,Unity 会再次更新蒙皮。这样可以节省系统资源。有关更多信息,请参阅下面的确定游戏对象的可见性。 |
Skinned Motion Vectors | 启用此选项将对网格蒙皮数据进行双重缓冲,以便 Unity 能够插入蒙皮运动并将其置于运动矢量纹理中。这会使用更多的 GPU 内存,但会带来更正确的运动矢量。 |
Mesh | 设置该渲染器使用的网格(皮肤)。 |
Root Bone | 设置作为动画“根”的骨骼(即,所有其他骨骼移动时参照的相对骨骼)。 |
Bounds | 设置 Unity 用于判定网格是否超出屏幕外的包围体积。在模型文件中导入网格和动画时,Unity 会预先计算构成此包围体积的边界,并在 Scene 视图中将这些边界显示为模型周围的线框。有关更多信息,请参阅下面的确定游戏对象的可见性。 |
Unity 使用网格的 Bounds 属性来确定游戏对象是否可见。也就是说,整个包围体积必须在所有激活的摄像机的视野之外。但是,动画网格的真实包围体积可能随着动画的播放而变化(例如,如果角色将手举到空中,则包围体积会变高)。Unity 在计算最大包围体积时会考虑所有附加的动画,但有时无法通过计算包围体积边界来预测每个可能的用例。
以下每个示例情况在 Unity 将骨骼或顶点推出预先计算的包围体积时都可能出现问题:
在这些情况下,可以尝试使用以下任一解决方案来解决问题:
修改 Bounds 的值以匹配网格的潜在包围体积。
尽可能使用此选项,因为它对性能更有利。
启用 Update When Offscreen 以始终进行蒙皮和渲染蒙皮网格。
如果性能不是主要问题,或者如果无法预测包围体积的大小(例如,使用布娃娃时),则可使用此选项。
为了使蒙皮网格在使用布娃娃时有更好的表现,Unity 会在导入带蒙皮的网格渲染器时自动将其重新映射到根骨骼。但是,仅当模型文件中只有一个带蒙皮的网格渲染器,Unity 才会执行此操作。如果使用布娃娃,并且无法将所有带蒙皮的网格渲染器附加到根骨骼或子项,则应关闭此优化。
2019–05–31 页面已修订
更新后添加了 Skin Weights (2019.1)