粒子性能

From Valve Developer Community
Jump to: navigation, search
English (en)中文 (zh)
... Icon-Important.png

最大粒子数

默认情况下每个系统的最大粒子数设为1004。无论系统使用与否都会被分配到这么大的内存。所以在你设定完系统之后,你应该看看计数器来观察你有多少粒子被使用,并将最大粒子数设为这个值。这将有利于将内存占用量保持在一个理智的数量。

线程

粒子被系统设为了多线程。因此如果你有多个系统,他们会分布到尽可能多的线程里。所以从这点看,将复杂系统分割成多个系统来利用这个特性是一个不错的方式。这即是说,每个系统都有它们的开销,所以这个有效的方法的益处也是有限的,尤其在更简单的系统上。将一个只有少量粒子的系统分割开来几乎肯定是一种损失。然而,如果你的系统有1000+的粒子,那么你值得将粒子分成小份并分布到多线程中去。系统和其子系统总在同一个线程里因为父系统与子系统可以相互传递数据并且非常需要被组合在一起。

SIMD(单指令多数据流)

现在,大多数粒子操纵器、初始化器等工作在SIMD中。这意味着他们通常同时在硬件上做四个粒子的组的所有数学运算。理论上来讲未来在不同种类的硬件上这将增长至更广阔的数字。需要指出的是如果你注意四的倍数,你将会更好地利用系统。将系统缩放至最接近四的倍数可以使它变得稍稍更加理想。这虽然没有巨大的收获但也是应该被注意到的事。

共享数据

在父系统与子系统有许多方法可以共享数据。一些更复杂的初始化器或者操纵器可以通过向一个控制点写出他们的结果来最小化它们的表现效果,随后子系统可以读到这些结果并且不用计算便可得到相同数据。

碰撞

通常,碰撞是一项昂贵的操作。默认模式0在每一帧描绘每一个粒子的轨迹。这很昂贵并且无法良好地缩放。然而,碰撞约束允许一些不同的碰撞模式,他们能够用精确度换来速度以取得更快的碰撞碰撞模式3可以当粒子在不可预知的位置或动作时为动态碰撞最好地权衡精确度与性能。