在PowerVR硬件上对目标物体和几何图形的排序策略

上提供的有用提示和技巧。今天我们会向大家介绍,内容主要来自于我们重新修订和更新的。这个文档包含有很多有用的信息,可以帮助大家最大限度的利用在PowerVR硬件平台上的图形应用程序。

不透明的物体对象(Opaque objects)

通常对于PowerVR硬件图形应用中不透明的物体,最好不要根据场景中物体的深度对绘制调用进行排序,这是因为对于延迟渲染系统,比如PowerVR TBDR()架构,所有影响特定帧缓冲区的绘制调用都是在开始渲染之前就会被捕获,这意味着GPU将拥有场景中所有几何图形的完整数据,并且可以判断哪些数据位可以丢弃,这与即时渲染模式(IMR)明显不同,在IMR模式下不管对象可见性如何,所有部分都是被着色和贴图。

PowerVR有专用的硬件用于隐藏表面去除(HSR)功能,可以根据特定片元的深度来测试它们是否被遮挡,然后只存储可见的片元。这意味HSR可以减少场景中资源的透支,有助于提高应用程序的性能。很明显没有必要对不透明的几何图形进行排序,因为PowerVR GPU为你完成了所有这些工作,否则只会浪费宝贵的资源。

HSR功能还避免使用像深度预传递这样的技术,即使用额外的传递来填充深度缓冲区,在每个像素处填充不透明物体的深度值,在下一遍中这些深度值可以用来判断哪些片元是可见的,然后删除遮挡的部分,无论如何这正是HSR要实现的功能,代价是需要额外的时钟周期和内存带宽。

PowerVR HSR功能意味着你不必进行深度值的预传递操作,但是对于Alpha混合对象仍然需要排序操作。

Alpha混合物体对象 (Alpha-blended objects)

在PowerVR中对目标物体和几何图形的排序过程与对透明物体略有不同,被部分透明物体遮挡的片元仍然会影响最终呈现的效果,因为需要混合前景和背景的颜色来生成最终的片元颜色,这意味着这些部分被限制的片元不能被HSR功能简单的丢弃,当然这消除了延迟渲染的一些优势并可能一定程度导致资源透支,这也是为什么我们一般建议将场景中Alpha混合物体的数量保持为最小的原因。

如果场景中必须包含不透明物体对象、Alpha混合以及Alpha测试物体对象,那么应用程序应该对这些物体对象进行排序,然后按照如下顺序显示这些对象:
1. 不透明的(首先)
2. Alpha混合
3. Alpha测试(最后)

这样可以确保所有对象都按照预期来显示。

在PowerVR图形架构中排序物体对象和几何的其他方法

虽然基于深度值的对象和几何图形排序在PowerVR硬件中通常不是一个好的主意,但是在考虑呈现状态的情况下对图形对象进行排序是非常重要的,这意味着基于共享资源(如材质、着色器等)进行组块操作,这有助于通过最小化驱动程序在渲染期间需要对状态及时更改来减少CPU的工作负载。

最后当拟采用OpenGL ES图形库时可以根据帧缓冲区对象(FBO)对绘制调用进行排序,从而获得显著的性能提升,FBO可以包含几个纹理形式的附件,这些附件可以被渲染到对象中,我们建议在进行下一个FBO操作前提交所有与特定FBO纹理相关的绘制调用信息,这意味着FBO将会按照顺序来渲染,消除由于从系统内存中存储和检索部分渲染的FBO对象而导致的额外带宽消耗。

顶点排序

有时候对渲染顺序进行排序是不够的,在应用程序中需要渲染大量顶点图形的情况下,比如汽车的显示屏(包含数百个三角形),如果顶点数据存储的不够理想,性能就会受到影响,你需要确保顶点缓冲区在缓存有效时存储数据,这基本上意味着尝试重新排列顶点可以改进空间局限性,这样应用程序就不需要在内存中频繁地来回跳转操作了。

幸运的是采用工具对顶点排序是非常简单的,这个工具将模型导出为POD文件格式时,可以将此工具设置为自动对网格数据进行排序,如果你想使用单独的网格,PVRGeoPOD的GUI操作也是非常简单的,很容易上手,而且还可以与目前流行的3D图形软件(比如Autodesk 3ds Max、Blender等)集成一起使用,如果你要处理很多网格数据也可以使用命令行实现批处理操作。

想要了解更多信息?

对于更多关于PowerVR性能建议和技巧大家可以访问我们的网站(),我们会对网站上的稳定进行定期的更新,文档包括Vulkan和OpenGL ES图形库入门、PowerVR硬件平台性能优化和建议以及新的图形技术指南。

大家可以在我们的和留下你的问题和意见!

大家还可以关注获取与开发人员技术相关的新闻,或者关注获取关于PowerVR的最新消息!

原文链接:

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

推荐阅读

快赢彩票计划群 韩国1.5分彩 快乐赛车 三分PK拾平台 秒速快3 欢乐生肖 北京幸运28 三分快3 一分时时彩 极速快乐十分