Version: 2020.2
网格渲染器 (Mesh Renderer)
文本网格

带蒙皮的网格渲染器 (Skinned Mesh Renderer)

Unity 使用__带蒙皮的网格渲染器 (Skinned Mesh Renderer)__ 组件来渲染骨骼动画;此类动画中的网格形状由动画骨骼进行变形。这种技术对于关节弯曲的角色和其他对象(与关节更像铰链的机器相反)非常有用。

__骨骼__是蒙皮网格内的不可见对象,会影响网格在动画过程中的变形方式。骨骼连接在一起形成分层的“骨架”,并通过旋转骨架的关节使骨架移动来定义动画。每个骨骼都附着在周围网格的一些顶点上。播放动画时,顶点会随着它们所连接的一个或多个骨骼移动,因此“皮肤”也跟随骨架移动。在简单的关节(例如肘部)处,网格顶点受到在此处相交的两个骨骼的影响,当关节弯曲时,网格将逼真地伸展和旋转。在更复杂的情况下,两个以上的骨骼会影响网格的特定区域,从而产生更微妙的移动。

Unity 会在导入时自动将带蒙皮的网格渲染器 (Skinned Mesh Renderer) 组件添加到需要它的网格。
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)

网格渲染器 (Mesh Renderer)
文本网格