移动图形技术新进化 解析OpenGL ES 3.2

  • 来源:微型计算机
  • 关键字:图形技术,移动图形,OpenGL ES
  • 发布时间:2015-10-13 17:43

  随着移动计算技术的发展,移动设备对图形技术的要求也越来越高,尤其是移动游戏开发商,为了得到更绚丽的游戏画面,对移动图形API也提出了更高的要求。在此前结束的SIGGRAPH 2015上,Khronos组织发布了最新的OpenGL ES 3.2,希望借此为移动图形业界注入新的活力。

  对于图形API想必许多人都不陌生。在桌面,我们使用DirectX和OpenGL,前者主要用于娱乐和部分专业领域,后者则主要是专业用户在使用。在移动计算上,由于Android的迅速普及,其使用的OpenGL ES也成为了开发商眼中最重要的图形API之一。相比OpenGL,OpenGL ES更像是它的简化版,去掉了一些庞大而复杂的功能,并充分考虑到移动设备低功耗、高性能功耗比的需求,在移动设备上实现了“高性价比”的图形功能。

  早期OpenGL ES实现的功能比较简单,这也是受制于此前移动处理器的性能。不过在OpenGL ES 3.0发布后,大量新功能的加入,使得移动图形无论在画质还是功能实现上都有了长足的进步。在SIGGRAPH 2015上,OpenGL ES迎来了全新的3.2版本,它进一步加强了移动计算领域的图形技术。

  OpenGL ES的进化

  从名字上可以看出,这次发布的OpenGL ES 3.2应该只是之前OpenGL ES 3.0的改进版本。需要说明的是,OpenGL ES 3.2和之前的OpenGL ES 3.x版本一样,并非是OpenGL 3的子集,而是OpenGL 4系列API的子集。从OpenGL的发展历史来看,OpenGL 4是一个相当重要的更新,它包含了大量全新的图形特性,比如新的着色阶段、曲面细分、着色子程序、双精度支持等。在这个基础上,OpenGL ES 3.2也带来了不少技术创新,官方宣称它有着“很多桌面级别的特效”。接下来,我们就来看看OpenGL ES 3.2中有哪些基础功能的增强,并对其中的重点功能进行详细介绍。

  ●曲面细分

  OpenGL ES 3.2终于在移动设备上支持曲面细分了。实际上在这之前,已经有数款移动设备宣称自己提供了对曲面细分的支持,包括英伟达的TegraK1和TegraX1系列、高通骁龙810处理器等。实际上对移动设备来说,它们相比桌面设备可能更需要曲面细分功能。这是因为移动SoC的CPU性能一般偏弱,承担大量的顶点计算会消耗很多资源,而曲面细分恰好可以弥补这个缺憾,能够将CPU的计算负荷释放出来,使其投入到其他更紧迫的计算任务中去。此前,Android是以扩展API的方式对曲面细分功能提供支持的,然而直到现在为止,也几乎没有什么移动游戏采用它。在OpenGL ES 3.2将其标准化后,相信未来会逐步有游戏开始尝试使用该功能。

  ●ASTC纹理压缩

  移动计算由于带宽小、空间有限,因此对各种数据压缩技术特别敏感。目前在移动计算领域的纹理压缩算法主要有PowerVR系列支持的PVRTC、高通Adreno支持的ATITC、ARM Mali系列支持的ETC1以及英伟达Tegra系列支持的DXTC。不过在OpenGL ES 3.2中,ASTC成为了一种全新的纹理压缩规范,那么ASTC有什么优势呢?要得出这个问题的答案,还得先去了解此前压缩格式的情况。PowerVR由于受到苹果的青睐,因此PVRTC是目前很多厂商采用的纹理压缩格式。PVRTC的问题在于对PowerVR的TBDR格式支持非常好,压缩比很高,但是在其他架构上无法使用,因此使用范围受限。ETC压缩格式是ARM官方“钦定”的,不过ETC1不支持透明通道,压缩质量也比较差,存在先天不足的问题。随后的ETC2开始支持透明通道并提升了压缩质量,可惜支持的厂商不够多。至于DXTC,顾名思义,是从DirectX中转移过来的压缩方式,只有Tegra系列支持,它更适合将D3D游戏移植到移动平台。

  ASTC的全称是Adaptive Scalable Texture Compression,自适应扩展纹理压缩。在普通压缩方面,ASTC表现正常,它的优势在于3D纹理压缩方面,拥有极为出色的压缩比,并且可以压缩任意可想象得到的纹理格式。举例来说,未压缩的256×256×256的3D纹理体积大概为48Mb,之前的压缩都是将其切成片,然后分片压缩。但是ASTC不是这样,ASTC使用了一个128bit的单元块覆盖一个3D块(3×3×3的像素块或者6×6×6的像素块),在压缩时能够尽可能保证质量并且消除性能方面的差异。此外,任意纹理都可以使用ASTC压缩,并获得不错的压缩比,这比之前移动计算中任何压缩技术都要自由。

  鉴于ASTC有这么多的优势,因此之前在做了一段时间的“可选规范”后,Khronos组织正式将ASTC纳入OpenGL ES 3.2的规范中。根据官方消息,ASTC能够最大限度地节省带宽、缩小数据体积,给开发人员和用户带来便利。不过看起来目前大部分硬件都不支持ASTC,因此如果要看到使用ASTC纹理压缩算法的移动游戏,还得等一段时间才行。

  ●几何着色器

  在DirectX上,几何着色器从DirectX10时开始引入,主要目的是根据需要自主生成一些顶点,增加图形细节并降低处理器负载。这一次既然曲面细分都有了,作为几何部分的重要功能,几何着色器自然不可能没有。在OpenGL ES 3.2中,几何着色器的出现可以帮助画面实现更精美的阴影效果,并且增加图形细节。

  ●浮点渲染目标

  浮点渲染目标也是比较重要的改进之一。之前的大部分渲染都是以整数完成的,虽然速度快但是精度就难以保证了。在使用浮点渲染后,其整体精度有了很大提高,渲染目标表现会更为出色。

  除了上述新特性外,OpenGL ES 3.2还有增强的纹理目标、混合操作等,并且还改善了调试易用性,使得工程师调试程序更为容易,代码执行更为简单和安全。由于整个图形架构的改善和功能引入,OpenGL ES 3.2还可以实现更多的图形特效,包括下列四种效果:

  ●延迟渲染和基于物理着色

  延迟渲染不用说了,它基本上已经成为目前绝大部分新游戏的标配。延迟渲染的特点是将光照和渲染计算推迟,避免多次渲染一个像素。延迟渲染的特点在于很好地解决了性能浪费并提高了效率。

  另外一个新增的特性是基于物理着色。这个技术的本意是使用各种数据建模方式来模拟物体表面各种材质散射光线的属性,从而得出逼真的效果。通过基于物理着色技术,人们可以得到不同表面材质下的不同光照效果。举例来说,同样一个立方体,如果是泥土捏成的,那么它的光照情况和金属表面的立方体是完全不同的。基于物理着色就可以精确地实现这两者的不同。应用了这项技术的游戏和场景,不同材质的物体能获得正确的光照效果,让用户可以直接分辨其材质,而不是只有干巴巴的贴图。

  ●HDR色调映射

  色调映射的主要功能是将较高动态范围的图像以接近人眼观察的画面显示在显示设备上。HDR色调映射就是高动态范围色调映射,这种色调映射可以将高动态范围的图像经过处理后显示在常规显示设备上,使得人眼在观察图像时能获得和真实场景一致的感官信息。HDR色调映射在桌面平台上已经有很多应用,在引入移动平台后,场景画面的明暗区分会更为鲜明,整体视觉效果和光照场景表现会更为出色。

  ●全局照明与反射

  全局照明与反射是目前在PC游戏中较常使用的光照技术。全局光照的特点在于不但有直接光照,而且还有一定数量的间接光照。因为在实际的场景中,物体表面总是存在着弱的或者强的光照反射,所以直接照明无法表现这样的特点,只有应用全局照明才能实现。目前移动平台的游戏中几乎没有使用全局照明的,这会使得它们的整体画面表现比较平淡。全局照明和反射的应用能够让游戏画面表现更为出色。

  ●烟雾和粒子效果

  烟雾和粒子效果是目前游戏应用中最重要的效果之一。之前生成烟雾和粒子效果总是使用动画等方法,这种方法在某个角度观察时会穿帮。真正的烟雾和粒子效果是使用大量粒子交互计算实现的。不过目前看起来,由于烟雾和粒子效果计算耗费资源极大,在桌面游戏上使用得都不多,移动游戏短期内应该不会大面积应用。

  写在最后

  从OpenGL ES 3.2更新的内容来看,由于之前的OpenGL ES 3.0/3.1更新不小,因此OpenGL ES 3.2更像是一个“补完”。不过即使如此,诸如曲面细分、ASTC纹理压缩、几何着色器等新技术的加入,以及延迟渲染、基于物理着色、HDR色调映射等新特效的使用,还是让人们对未来基于OpenGL ES 3.2开发的游戏充满了期待。目前移动游戏市场处于产品良莠不齐的阶段,这既有市场早期无序发展的原因,也有移动图形技术本身比较落后的因素。在这种情况下,技术的升级能够使得真正有实力的厂商脱颖而出。OpenGL ES 3.2以及之前Android扩展的图形API,都是为了这个目的而生的。

  值得注意的是,虽然OpenGL ES 3.2已经正式发布,不过现有的系统还不能支持它。据悉OpenGL ES 3.2将会和Android M一起作为Android下一个重大更新、版本换代的核心技术推出。目前人们普遍预计Android M将在年底发布,乐观估计使用OpenGL ES 3.2的游戏将在2016年出现。我们不妨等到那个时候,看看移动设备究竟可以带给我们怎样惊艳的视觉体验吧!

  文/张一山

……
关注读览天下微信, 100万篇深度好文, 等你来看……
阅读完整内容请先登录:
帐户:
密码: