离屏渲染在车载导航中的应用

与移动导航不同,AMAP AUTO版本的高清地图直接面向主要的汽车制造商和众多设备供应商。这些B端用户采用的硬件参数不均匀,提出的业务需求涉及渲染中许多复杂技术的应用,这对渲染性能提出了极高的要求。

原车版本遵循移动版本的当前屏幕渲染模式,并且每个帧需要实时渲染地图元素。但是,在业务实践过程中,我们发现在多屏幕渲染和多视图渲染方案中CPU负载急剧增加。以鹰眼场景为例,在鹰眼场景中,地图具有多视图渲染状态:一个是主地图,另一个是鹰眼小地图,因此渲染引擎同时渲染两个地图实例对象,图片的右下角是鹰眼:

2509688-735f30fd39e13805.png

绘制鹰眼图后,平均帧速率下降2帧,如下图所示:

2509688-202a05b054158c07.jpeg

2509688-589157f5231b1ee7.jpeg

鉴于上述情况,除了传统的渲染细节,批量和纹理的优化外,我们还需要找到一种全局的技术优化方法,以大大提高引擎的渲染性能。为此,我们深入研究了离屏渲染技术,并结合导航业务,提出了一种基于离屏渲染技术的方法,以优化特定地图视图的性能。

在OpenGL的渲染管道中,几何数据和纹理最终通过一系列转换和测试在屏幕上呈现为二维像素。用于存储颜色值和测试结果的二维数组称为帧缓冲区。当我们为OpenGL绘图创建表单时,表单系统将生成一个默认的帧缓冲区,它由表单系统完全管理,仅用于将渲染的图像输出到窗口。显示区域。我们还可以使用缓冲区来渲染当前屏幕缓冲区之外的操作。前者是当前的屏幕渲染,后者是离屏渲染。

与当前屏幕渲染相比的离屏渲染:

在不断变化的场景中,因为屏幕外渲染需要创建一个新缓冲区并且需要多次切换上下文,所以成本很高;

在稳定的场景中,可以使用单个纹理渲染屏幕外渲染,因此性能比当前屏幕渲染要好得多。

从上面的比较可以看出,在稳定场景中使用离屏渲染的优点更大。但由于地图状态随时都在变化,因此地图渲染通常处于前景动态渲染状态。那么有一个相对稳定的场景吗?答案是肯定的,我们将地图的状态划分为沉浸式和非浸入式状态。顾名思义,当地图处于变化状态时,它被称为非浸入状态,进入稳定状态称为沉浸状态。

件。统计后,在地图处于前景状态的场景中,沉浸时间基本上等于非沉浸时间,这样我们就可以使用纹理在非沉浸式场景中渲染地图,这大大减少了系统开销。在诸如鹰眼图和矢量交叉图像的特定视图场景中,地图基本上处于浸入状态。因此,这些视图通过屏幕外渲染技术进行优化,并且收益将是巨大的。

上述技术优化原则被替换为实际的导航应用程序,过程如下:

2509688-27e1c0bf3a6ef22f.jpeg

离屏渲染通常使用FBO完成。 FBO是一个帧缓冲对象,它允许我们的渲染不在屏幕上渲染,而是渲染到屏幕外的缓冲区。但是,通常的屏幕外渲染FBO对象没有抗锯齿功能,因此启用了具有全屏抗锯齿功能的OpenGL应用程序。如果屏幕外渲染FBO对象用于离屏渲染,则会出现锯齿状。在非沉浸式地图中,启用了全屏抗锯齿功能,因此我们必须使用具有抗锯齿功能的离屏渲染技术来优化地图渲染技术。

本节以iOS系统为例,介绍屏幕外渲染技术以防止混叠。 iOS系统已针对OpenGL进行了深度定制,其抗锯齿功能基于FBO。如下图所示,IOS在抗锯齿帧缓冲(FBO)对象上运行,以实现全屏抗锯齿:

2509688-86ce7d58d279ba39.png

接下来,详细描述了创建抗锯齿FBO的步骤:

创建一个FBO并绑定它:

创建颜色框缓冲区,在视频内存中创建消除锯齿的对象,并将颜色缓冲区安装到打开的对象。创建深度模板渲染缓冲区,打开消除锯齿的内存空间,并绑定到帧缓冲区:

测试由正确的环境创建的环境,以避免在内存空间不足时创建失败的可能性:

此时,已创建具有抗锯齿功能的屏幕外FBO。 FBO将在下面应用。步骤如下:

首先清除抗锯齿帧缓冲区空间:

启动一系列渲染功能操作,如准备顶点数据,纹理数据,VBO,IBO,矩阵,状态等,并执行一系列渲染指令,选择指定的着色器及其传输数据状态;

FBO不是具有直接渲染功能的帧缓冲空间。执行2次操作后,需要将消除锯齿的FBO中呈现的内容合并到每个帧中,并转换为渲染屏幕的帧缓冲区空间。原则如下所示:

代码如下:

完成上述操作后,需要一些Discard步骤来忽略最初存储在当前帧缓冲区中的一些内容:

Android系统的基本思想是一样的。您需要使用gles3.0接口提供的抗锯齿功能进行渲染,并且不要在此处展开它。

优化之前的鹰眼渲染的耗时火焰图如下:

2509688-67018e597e45407c.png

优化的鹰眼渲染耗时的火焰图如下:

2509688-32eab21d28aaf182.png

从正面和背面的对比图可以看出,鹰眼渲染的时间消耗几乎消失了。

从系统的渲染帧速率进一步验证。从下图中可以看出,帧速率已恢复到与未显示鹰眼相同的水平:

2509688-46bdc9cc7f489069.png

应该注意的是,除了增加额外的存储空间之外,全屏抗锯齿损耗资源也将在抗锯齿处理中产生一定的时间。因此,在获取利润的同时,还必须衡量其产生的成本,并且需要对具体问题进行具体分析。在这种情况下,如比较结果所示,抗混叠离屏渲染技术的优化产生远远超过成本。

作者:德国高科技小弟弟

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。