Unity/VRChat 性能基准测试
这是一篇关于Unity和VRChat中组件性能(主要聚焦于帧时间)的文章。
这本书是我在 https://notes.sleightly.dev/benchmarks/ 上发布的文章的移植版。
本译文封面图标来自 Freepik
译者前文
本书由 LIII Works 你亲爱的酒保K 翻译。 本书翻译自 VRCLibrary 的 Unity/VRChat Performance Benchmarks 本书翻译工作截止于20...
简介
收集这些数据的主要方法不是仅仅关注单个组件的性能,而是逐步添加更多组件,并从这些数据中推导出性能消耗的数学公式。例如:如果我们想知道在FX控制器上增加一个额外的动画层会增加多少帧时间,我们可以设...
动画控制器 Animator Controllers
引入
为了更好地理解本节的数据,我想指出以下两点: - 所有测试都没有包括任何状态行为(State Behaviour)。如果一个控制器的任何动画层上有一个或多个状态行为,所有这些控制器的运行时间会...
参考基准:两个状态切换
我们的参考基准将采用简单的双状态切换作为参考。 默认的切换对比图。图中显示了两个动画,每个动画包含两个帧,数值相同。已启用“写入默认”。 在每次测试动画层数时,层数与帧时间的关系图呈二...
任意状态(AnyState) & 混合树(Direct Blend Trees)
AnyState 无论AnyState切换的数量多少,AnyState的性能与非AnyState切换相似。这表明,转换检查的数量对帧时间的影响并不显著,这一点也在其他测试中得到了验证。 唯一...
杂项数据
以下是一些与切换不直接相关但可能对某些人有用的杂项数据: 每层的状态数量和过渡数量对性能的影响似乎不大(这可能解释了为什么AnyState的性能较好)。 唯一的例外是当单个状态有大量...
多控制器
使用多个控制器的性能不会按线性比例增长(也就是说,两个每个有100层的控制器比起一个有200层的控制器会有显著更少的延迟)。 实际的关系难以精确描述,但可以通过下面的图示来帮助理解。每条线代表...
约束 Constraint
在介绍完Animator控制器之后,我很高兴能说一些一些较为简单的内容了。虽然约束的情况看似奇怪,但它们的行为实际上是可预测的。 计算启用的约束总数(类型无关),然后结合用下图来确定帧时间。你...
音源 Audio Source
无论如何,我无法让Audio Source对性能产生任何影响,即使在Unity中,音频源的最大数量为64,而在VRChat中每个角色仅限3个。
接触发射器/接收器 Contact Senders/Receivers
首先需要说明的是,每个房间中的 Contact 数量最大限制为4096。如果一个房间中 Contact 的数量超过4096,一些 Contact 将会停止工作。 Contact Senders...
布料 Cloth
Cloth 组件对性能的影响非常大,应尽量谨慎使用。 对于合理数量的顶点(约20万顶点内),每增加1000个顶点,Cloth 组件会增加约0.2毫秒的帧时间。超出这个范围后,帧时间会急剧增加,...
后续计划
我计划继续对更多组件进行基准测试。目前我已经开始对一些组件进行测试,但由于数据尚不充分,暂时不能公布结果。 未来我打算进行基准测试的组件包括: PhysBones/PhysBone co...
物理骨骼 PhysBones
PhysBones 的优化非常出色,在合理的使用范围内,它们的开销较低。PhysBones 的帧时间主要取决于它控制多少有顶点权重的骨头,每 1000 个骨头大约增加 2 毫秒的帧时间。 组件...