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)
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.