Contents

Chaos破碎性能分析

默认情况下,Chaos没有开启多线程,我们将两种方式对比.开启TaskGraph没有明显变化

一.基础测试

1.1 没有碎块

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111154240.png

没有碎块的话,我们的性能开销是0.1ms

开启TaskGraph没有明显变化

1.2 100块碎块

当我们100块的时候,上升到了5ms https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111154324.png

1.3 500块碎块

上升到了20ms

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111154723.png

1.41000块碎块

上升到了60ms 测试案例,将一个box分为1000块。

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111115025.png

二.修改参数

2.1修改Iterations

我们看到,绝大部分的物理性能的消耗不出所料是在计算物理位置的EvolutionAndKinematicUpdate上面。

集中在AdvanceOneTimeStep上面。在物理引擎中,我们的帧数其实要比物理引擎的帧数低很多,物理引擎将每帧分成更小的单位Step,每一步来判断是否发生了碰撞,如果发生了碰撞则会发生反弹等其他操作。

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111155722.png

对于1000块,我们修改

当Iterations变为5时,48ms。为2时,28ms,为1时,25ms。

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111160259.png

2.2增加cluster

我们Iterations的基础上,将1000块分组。增加Cluster的效果非常好,虽然我们破碎分为10个Cluster的话和没分的时候差不多。但是我们分为100个Cluster时 https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111161319.png

我们分为200个:

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111161526.png

这里的分簇操作控制碎裂网格体的视觉质量和性能。破坏建筑物等对象时,级别1通常需要少量簇(或较大碎片),随着级别的增加会发生更多破坏(较小碎片)。 最初碎裂时无需数千碎片以进行优化,而是在建筑物倒下时落下单独碎片。 优化的另一选择是定义要碎裂的 最大簇级别(Max Cluster Level)

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111162149.png

可以看出来,分Cluster对整个的破碎非常的有帮助。

合理的分簇能够极大的减少性能开销,我们进行多级的分组

https://papalqiblog.oss-cn-beijing.aliyuncs.com/blog/picture20210111163531.png

帧数能稳定在70fps

结论

就算是调整到比较廉价的方式,其本身依旧还是开销巨大,对整个场景的破坏极具考验。