要设计角色模型以实现最佳渲染和动画速度,请遵循以下要求:
使用这些方法可能有助于提高角色的动画和渲染速度,但请注意,这些方法也可能会降低您要竭力实现的视觉逼真度和逼真效果。对于每种情况,并没有一个唯一的答案可以在更好的性能和视觉真实感之间取得完美平衡。必须根据角色和场景的复杂性以及所需的整体外观和逼真度来找到最佳的平衡。
对于每个角色,仅应使用单个带蒙皮的网格渲染器。Unity 使用可见性剔除和包围体更新来优化动画,这些优化仅在您将单个动画组件和单个带蒙皮的网格渲染器组合使用时才会生效。如果使用两个蒙皮网格代替单个网格,模型的渲染时间大概会是单个网格的两倍,并且这样做很少能带来实际的意义。
尽可能减少每个网格上的材质数量。只有在需要为角色的不同部分使用不同着色器(例如,眼睛的特殊着色器)时,才应对一个角色使用多种材质。其余大多数情况下,每个角色有两到三种材质就应该足够了。
一般来说,骨骼的数量越少,性能就越好。但有些时候,您需要创建具有大量骨骼的角色:例如,在需要大量可自定义的连接时。这些额外骨骼会增加构建大小,并且每个额外的骨骼都可能带来相对处理成本。例如,在通用模式下,已拥有 30 个骨骼的绑定上增加 15 个骨骼会让 Unity 再花费 50% 的时间来解析,这可能会影响解析所花费的时间。
请注意,对于通用和人形类型,您可以额外添加骨骼。如果未播放使用额外骨骼的动画,则处理成本应该可以忽略不计。如果连接不存在或为隐藏状态,此成本甚至会更低。
出于性能原因,请使用每个顶点最多有四个影响的线性混合蒙皮。但是,某些 3D 建模应用程序允许四个以上的骨骼对顶点产生影响,因此必须在性能成本与更大程度的控制之间进行权衡。有关更多信息,请参阅导入蒙皮网格。
您应该使用的多边形数量取决于您需要达到的视觉质量,以及您的目标平台。然而,以下两个相互冲突的事实都正确:
此外,还需要考虑其他元素也会争夺渲染资源。如果同时在屏幕上有很多游戏对象或地形对象,请考虑减少每个网格的多边形数量。
与移动平台相比,桌面平台通常可以处理更多的复杂性,但是移动平台的性能可能会因设备本身的质量和能力而千差万别。
在导入动画时,Unity 会将模型的反向动力学 (IK) 节点将烘焙为正向动力学 (FK),因此 Unity 根本不需要 IK 节点。但是,如果这些节点留在了模型中,那么即使不影响动画,Unity 也会计算它们。可以在 Unity 或 3D 建模应用程序中删除冗余的 IK 节点。为了方便删除 IK 节点,应在建模时保留单独的 IK 和 FK 层级视图。
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.