- 最后登录
- 2018-12-19
- 注册时间
- 2012-8-20
- 阅读权限
- 90
- 积分
- 54706
- 纳金币
- 32328
- 精华
- 41
|
在Unity 4.0中我们加入了对世界粒子碰撞的检测。它的效果相当的棒而且速度非常快。http://video.unity3d.com/v.ihtml? 我们花了很多时间来优化世界粒子碰撞,而且我们对Shuriken不只做了一般意义上的一些优化工作。特别是在移动设备上Shuriken有一极大的性能提升。多线程 Shuriken是多线程的,碰撞检测也是如此。定量 粒子世界碰撞变得缓慢的原因是由于投射光线的绝对数量和执行光线投射的复杂性。我们已经做了一些优化工作以减少这方面的消耗。 我们增加了对定量光线投射的支持。因此我们首先找到与粒子系统中所有的粒子发生接触的所有PhysX形状,将之前剔除出来的逆着这些物理形状的投射光线以每个粒子为基础执行非常快速的本地缓存。只有这时我们才能执行任意一个碰撞体的光线投射。这极大地提高了性能,因为任意一个时间点,实际上只有很少数粒子需要完全的碰撞检测。 这种方法的一个副作用是,创建轴对齐的小的碰撞体会使性能得以提升。例如,如果你有一个走廊。将墙壁和地板分离成单独的碰撞体是一个好主意。以这种方式当粒子无碰撞地简单飞过走廊,Shuriken可以快速地跳过大量的计算。在几乎所有的粒子效果中,大部分粒子在任何一个单独帧下都是没有碰撞发生的。因此对于创建超薄边框的碰撞体来说这种方式总是可行的。近似模式 然而当你创建拥有大量粒子的场景时,例如每帧执行50,000次光线投射,那么就会迅速达到一个瓶颈。因此我们加入了对于近似碰撞检测模式的支持。它允许你定义一个每一帧执行光线投射数量的上限。这就使你可以完全控制在计算光线投射碰撞上所花费的最长时间。当然这就要以牺牲粒子碰撞的准确性为代价。在某些情况下,粒子可能落到表面以下或者与不存在的几何形体发生碰撞。在许多情况下,一些粒子落下去对用户是不可见,因为它们只是消失了。特别是粒子密度很高时这就变得很不明显了。另一方面由于大量的粒子碰撞检测导致的帧速率降低却非常的明显。 为了减少品质下降,我在将先前的碰撞存储在缓存中,本质上是存储在一个由空间和速度定义的voxel(体元)网格中。每个网格在缓存中有一个单一的平面,这个平面之后被重用做所有所有穿过这个voxel(体元)的粒子。如果粒子数量超出预算,一些粒子就会只执行对劣质voxel查找并重用缓存中的信息。一个几乎无消耗的光线投射。 在粒子系统中,你可以选择高品质(总是执行全部的光线投射),中等品质(每帧占用一部分的光线投射开销)和低品质(每几帧占用一部分的开销)。一般来说任何本质上无序的效果在低等和中等品质模式下表现起来都相当好。如烟雾,火花,粉尘,以及雨雪降落。低中质量条件下只向静态几何体进行投射。而缓存通常会相当迅速的聚集,在此时只需要执行很少的光线投射就可以展现很好的视觉效果。
【来源:互联网】
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/ |
|