zoukankan      html  css  js  c++  java
  • 优化汽车仪表板以实现高效渲染

    优化汽车仪表板以实现高效渲染

    Optimizing automotive dashboards for efficient rendering

    数字显示屏似乎已经占领了全世界,最早出现在20世纪80年代。如今,驾驶者希望进入一辆新车,发现一个设计良好、功能完善的数字仪表盘就在方向盘旁边。与传统的表盘相比,数字仪表盘以前所未有的视觉深度和广泛的颜色闪耀着美丽的光芒。可以根据驾驶员的个人喜好进行定制,并且还具有自适应性和动态性,精确显示驾驶员在任何给定时刻需要查看的信息。             

    就像其数字显示一样,汽车仪表板需要图形处理单元(gpu)来驱动。然而,现实情况是,汽车仪表盘通常在几何方面设计得很差,而表盘——速度表或转速表——通常是最严重的违规者。不是优化其发展的精度,准确性和清晰度,表盘经常开发使用难以置信的密集网格,以产生所需的水平的圆度。这种圆度——虽然在美学上对任何仪表盘都很重要——却是值得关注的一个重要原因。这是由于难以置信的稠密网格导致汽车中使用的嵌入式gpu性能不佳。             

    无论是开轿车、豪华SUV还是在路上跑得最快,大家最不希望的就是性能不佳。即使是仪表板也无法摆脱黯淡的结果。为了解决这个问题,GPU很可能是过度指定的,需要的马力远远超过了如果拨号盘在一开始就设计合理的话所需要的马力。这就引出了一个至关重要的问题:对此能做些什么?工程师如何优化汽车仪表板来开发高效的渲染?

    解决圆度难题             

    许多工程师从增加几何密度开始,在网格中添加越来越小的三角形,因为这是提高表盘圆度的最简单方法,消除难看的锯齿状边缘。

    Figure 1: The round dials dilemma: efficiency or quality? 

    这听起来像是个好主意。然而,通过将大量的三角形填充到只有几个像素宽的区域中,就会出现性能低下的情况。这是因为gpu的设计方式。gpu被用来加速绘制跨越大量像素的相对较少的三角形。在这种情况下,有相反的情况,造成巨大的性能损失,这是无法克服的暴力。             

    更糟糕的是,表盘——在数千个三角形的重量下渲染速度会很慢——也会出现严重的锯齿。因此,每个边、缩进和斜角都将最终显示“阶梯式”像素伪影。多采样消除混叠(MSAA)可以用来清理,但这样做是有代价的:渲染速度比以前慢得多。其原因是使用MSAA时,必须对三角形边界上的每个像素进行额外处理:首先,必须计算边缘两侧的颜色,然后测试像素内的多个点(通常为两个或四个),以查看三角形内实际有多少个点,最后,这个比例是用来把两种颜色混合在一起的。考虑到图像质量的提高,这种成本通常是可以接受的,但是当屏幕的某些部分看到几乎每个像素都被三角形边缘交叉时,很容易想象处理时间会增加多少。             

    为了克服这些障碍——包括对MSAA的需要——表盘可以很容易地用一个简单的透明纹理四边形来近似。这基本上是预先计算所有的几何图形和照明到GPU可以轻松处理的东西。更好的是,纹理可以很容易地调整到羽毛边缘,以获得额外的平滑度。             

    这个过程从一个非常重要的步骤开始:通过使表盘形状更圆来减少浪费的像素数。现在有了一个简单的透明四边形,这减少了几何处理单元的压力。然而,不幸的是,也为每个像素增加了许多不必要的工作:渲染的工作方式,即使是完全透明的对象部分(对最终图像没有丝毫贡献)仍需要作为正常像素进行处理。更糟糕的是,标记为透明的对象必须在已经渲染的背景上进行渲染,这实际上是其像素成本的两倍。因此,减少屏幕上透明区域的数量至关重要。             

    用一个非常粗糙的圆盘代替四边形,怎么样?添加一些三角形来节省数百或数千像素看起来是一个不错的折衷方案。然后只有表盘的外缘需要透明度,这样就可以将对象一分为二。中心圆盘是不透明的(因此可以有效地渲染),而外圈保持透明。这保留了完美圆盘的圆度和边缘的软羽化以避免混叠,代价是必须提交两个三角形略多于一个的对象。

    左侧优化的表盘看起来和运行都比右侧的天真表盘要好。

    汽车仪表盘的未来             

    自从第一个汽车数字仪表盘问世以来,gpu在性能方面取得了长足的进步。虽然还没有达到完全依靠暴力的地步,但已经展示了如何以更微妙和更聪明的方式进行设计,才能真正发挥作用。同样重要的是,工程师和艺术家能够而且应该更紧密地合作,以实现这些实质性的好处。通过更巧妙和巧妙的设计,可以在不牺牲每个人想要的完美圆形刻度盘的情况下,以比设备显示更快的速度呈现更清晰的图像。

    Figure 2: A texture projected onto an approximation of a disk. Highlighted areas are drawn transparently. 

    现在可以有效地渲染表盘了,但有一个问题:到目前为止,所做的只是将精度方面的工作从几何体转移到纹理上。纹理中需要编码的细节越多,就需要越大,这在小型嵌入式系统中通常是不受欢迎的。             

    值得庆幸的是,刻度盘往往是径向对称的,这意味着纹理中存储的大量数据实际上是冗余的。为什么不储存一个小楔子,在中心复制,而不是整个刻度盘呢?这意味着对于相同的纹理大小,实际的细节密度可以高得多。             

    如果需要动态照明环境,可以使用法线贴图而不是实际几何体模拟小的曲面细节。法线贴图的工作原理是使用表示曲面方向上的小变化的纹理,当与标准照明技术结合时,将给人一种非常详细的曲面的印象。除了额外的纹理要求,还增加了数学运算:对于一个简单的表盘和简单的照明,可以高达两倍的指令量每像素。              

    为什么要这么麻烦?从一个易于编写并集成到应用程序中的拨号盘开始,更复杂,需要昂贵和先进的技术,当然,只是在每个方面都让事情变得更糟?             

    乍一看,这听起来有悖常理,但这些技术实际上带来了极大的优越性能:从每秒渲染52帧到超过120帧!实际情况是,使用幼稚的渲染技术,绝大多数的渲染都发生在一个过度工作的GPU单元中,尽其所能地处理大量的几何图形,而通过一些简单的优化技巧,基本上将此成本分摊到GPU的其部分,即纹理处理单元和算术逻辑单元(ALU)。此外,使用透明的羽毛表盘和针的边缘意味着不再需要MSAA,这进一步降低了性能成本。

     

  • 相关阅读:
    H01-Linux系统中搭建Hadoop和Spark集群
    L07-Linux配置ssh免密远程登录
    L06-Ubuntu系统中部署Vagrant和VirtualBox
    P03-Python装饰器
    L05-Linux部署msmtp+mutt发送邮件
    O01-Linux CentOS7中利用RDO部署OpenStack
    L03-Linux RHEL6.5系统中配置本地yum源
    LoggerFactory.getLogger用法
    maven配置本地和远程仓库
    Jmeter下载安装配置及使用(windows)
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/13259583.html
Copyright © 2011-2022 走看看