提升PowerVR平台的粒子系统

作者:TOM LEWIS

之前我们发布了一系列文章介绍如何在创建图形应用时充分利用PowerVR平台,今天我们又进行了更新,这次我们来介绍下粒子系统。

这个系列的文章是基于我们文档网站(http://docs.imgtec.com/)上大量PowerVR性能建议而总结的,我们介绍了很多主题,包括:

下面让我们来看看什么是粒子系统以及它是如何影响性能的。

介绍

从战火纷飞的战场到黑暗的地下城墙壁上的火把,粒子特效在游戏场景中无处不在。如果使用得当它们可以极大的增加场景的真实感,并且让这个游戏场景看起来像一个活生生的真实世界。然而与大多数游戏系统一样,如果使用不得当可能会对性能产生重大影响。

对于那些不了解的人来说,粒子系统是一种图形技术,用于模拟”模糊”的物理效果,比如火灾、灰尘、魔法和天气效果等,粒子效果是由许多独立的小物体(粒子)组成的,每个物体都有自己的属性,比如坐标、速度和加速度。一旦一个粒子被创造出来,它的属性值通常会根据物理引擎的规则演化,例如在重力作用下的降落。

粒子系统的典型实现是一个小型的2D四轴飞行器,它固定在摄像机(仪表盘)的前方,这些简单的四元组对粒子效果纹理进行采样从而确定它们的颜色,粒子系统由成百上千个这样的二维四轴飞行组件构成,所有的粒子通常使用alpha混合来合成。

如果你想了解更多关于如何在OpenGL ES和Vulkan中实现简单的粒子系统的信息,请查看我们的SDK示例:粒子系统


粒子系统存在的问题

采用alpha混合四元组可以是实现许多粒子效果的简单且有效的解决方案,但遗憾的是目前还存在一些缺点。

大量采用alpha混合粒子会导致性能透支,这是因为需要渲染alpha混合(部分透明)的粒子,GPU必须考虑粒子背后的任何碎片,这意味着它可能要为每个像素点阵更多的碎片进行处理,从而导致更多的处理工作。这可能是一个问题,即使是相对较少的粒子,如果它们在屏幕上的尺寸很大,这是PowerVR及其专用隐藏表面去除(HSR)技术的一个特殊问题。

正如前面其中一篇博客(在PowerVR硬件上对目标物体和几何图形的排序策略)中提到的,HSR通过丢弃任何可能遮挡的碎片来消除大量的性能透支,在alpha混合的情况下,HSR做不到这一点,这就消除了延迟渲染的主要优势之一并且增加了性能开销。

那么你怎么知道你的粒子效果正在引发性能透支问题呢?那么就需要PVRTune来发挥作用了!

在PVRTune(下图中高亮显示部分)工具中GPU调用计数器测量一个像素被着色的频率,在理想的应用程序中透支数值应该在1.0左右,这个参数值意味着屏幕上的每个像素只被着色一次,换句话说就是没有被调用处理。当然这通常是不现实的,因为总会存在一定的透支,但是如果透支计数器始终高于2.0,那么可能会直接影响性能。

PVRTune工具中的调用计数器可以帮助识别粒子系统中的问题。

提升PowerVR平台的性能

如果你已经确定了你制定的粒子系统造成了太多了性能透支,并且已经开始影响应用程序的性能,那么要怎么处理呢?

好消息是你不需要在应用程序中去除任何花哨的粒子效果,相反我们有几个小的建议,可能有助于减少它们对于性能的影响:

  • 使用网格粒子,密切遵循不透明的纹理使用规则,如一个圆形网格的烟雾,这意味着完全透明的部件不会造成不必要的性能透支,这将增加每个粒子所需的顶点数,但是除非你的应用程序是有顶点限制的,否则这应该是一个可接受的解决方案
  • 禁用各种异性过滤,对于大多数粒子来说,在远处的纹理可能没有那么重要

最后你还可以尝试其他方法:

  • 减少粒子的数量

是的,我知道这很痛苦,但最终用户会注意到性能下降的幅度要比粒子数量消减要好一点。

这就是最终的结果,请确保能够定期查看Imagination 推出的博客文章(http://www.imaginationtech.com/blog),我们后续会不断的进行更新!

想了解更多吗?

我们的文档网站不仅仅是给大家提供性能建议,我们有OpenGL ES和Vulkan入门指南,关于实现高级图形技术的文档比如基于物理渲染技术,我们还提供强大的开发工具套件以及用户手册等资料。

最后请大家通过论坛社区进行留言反馈,大家还可以在推特上关注@tom_devtech获取开发人员技术相关的讯息,或者关注@powervrinsider获得PowerVR平台相关的新闻。

原文链接:https://www.imgtec.com/blog/improving-particle-systems-on-powervr/

声明:本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利。

推荐阅读