原文: OpenGL ES 3.0 Takes Mobile to the Next Level
在被问到 OpenGL® ES 3.0 为我好友的那部配装备 ARM® Mali™-T604的 Nexus 10 带来哪些改进时,我叹了口气,有些恼怒地看着我那无知的朋友。这个自己标榜是技术极客的人居然不知道 OpenGL ES 3.0 的优点?!?
我决定写一篇博文来回答他的问题。毕竟,OpenGL ES 3.0 的进步是更多受众所感兴趣的话题,而不仅仅是我的朋友。ARM Mali-T604 是出色的产品,Nexus 10 通过其超高分辨率屏幕进行了非常好的展示。
随着如今 Android 4.3 中 OpenGL ES 3.0 的推出,它变得更加出彩。这一更新现在已投放到配备 Mali-T604 的 Nexus 10,让开发人员能够作为一项 Android 标准功能,充分利用 OpenGL ES 3.0。
那么让 OpenGL ES 3.0 更加出色的到底是什么?
OpenGL ES 2.0 于 2007 年 3 月推出,让我们认识了移动 GPU 上的第一代可编程着色器。现在,这为移动游戏视觉质量带来的显著飞跃已不再是质疑所在。但是,阅读本文的有些人可能依然会问移动图形是不是目前已经够好,或者为何 OpenGL ES 1.1 对移动内容还不够...
Khronos Group 认识到移动空间中所用技术与桌面空间中所用技术之间的差距正在快速弥合。通过于 2007 年推出可编程着色器,Khronos 成功地简化了从桌面到移动的转换,诱使桌面开发人员转向移动平台。现在市面上有大量出色的游戏和应用程序,所以我必须说 Khronos 已取得了成功。但是,2007 年以来图形内容已经发生了许多变化,是时候对 OpenGL ES 2.0 进行更新了。
OpenGL ES 3.0 进一步弥合了桌面图形世界和移动图形世界之间的差距。利用多项新增的功能,开发人员在桌面和移动平台之间转换的能力比以往更强。此外,OpenGL ES 3.0 可在不牺牲视觉质量的同时节省系统功耗。毕竟,如果能够不必外接充电器,在移动平台上玩游戏会更加吸引人。
我来理一下 OpenGL ES 3.0 较其上一代更加出色的各种功能:
OpenGL ES 3.0 为移动平台带来了几种新的纹理格式。通过纳入浮点纹理,开发人可以使用高动态范围纹理构建场景。3D 纹理可用于存储分层信息,正如我们的路演 Timbuktu 2 中所示。
非二的 N 次幂纹理、深度纹理,以及 R 和 RG 纹理为移动设备带来梦寐以求的格式。它们都是纹理信息的高效包装程序,不要求三色通道和二的 N 次幂大小。这一新增通过仅传输内存中所需的颜色通道,提高了内存使用效率,进一步节省功耗。
OpenGL ES 3.0 也引入了全新强制纹理压缩标准,即 ETC2。这对开发人员来说非常重要,因为从现在起所有 OpenGL ES 3.0 兼容设备都必须支持 ETC2。这让内容开发人员仅压缩纹理一次,而在所有 OpenGL ES 3.0 兼容设备上重复使用相同的资源。同时,Khronos 还推出了自适应可扩展纹理压缩,作为 OpenGL ES 3.0 的扩展。而且,随着第二代 Mali-T600 系列 GPU 的推出,ARM 已经为这一格式提供完整的硬件支持。这一新标准带来的视觉质量改善,将在今年下半年中让最终用户设备获益。
GLSL ES 3.0 是对 OpenGL ES 着色语言的最新更新。从 GLSL ES 2.0 发展为 GLSL ES 3.0,其中包含了许多改进,让开发更加轻松、视觉质量更佳。全面支持 32 位浮点运算和 32 位整数运算增强了视觉效果。统一缓冲对象实现着色器程序之间的一致项简单共享。取样器对象分离了纹理数据和纹理取样参数,轻松实现同一纹理的过滤模式的混合使用。
几何实例允许渲染同一几何的多个实例,而不必将几何重新上载至 GPU。每个渲染的实例依然可以通过顶点和片段着色器应用唯一的属性。这可以降低 GPU 和 CPU 之间的带宽使用,同时减少 CPU 在绘制过程中的参与。
Boolean 遮挡查询 为开发人员带来了 GPU 加速剔除技巧。通过利用 GPU 的强大计算能力,游戏可以在渲染过程的早期丢弃完整对象的渲染。这为可见对象留出了更多处理时间,增强了最终用户在屏幕上实际看到的视觉质量。
转换反馈实现了从 GPU 捕捉顶点着色器输出的能力。此输出可用作下一帧的输入。这实现了在 GPU 上完整运行物理学模拟;其中一个不错的例子是质子系统,对象的绘制以及顶点位置的更新都在 GPU 上执行。与为每个帧在 GPU 和 CPU 之间来回传输质子位置相比,这样效率更高。
最后但同样重要的一项 OpenGL ES 3.0 功能是多渲染目标。借助此项功能,可以最终在移动 GPU 上完成延时着色。利用多渲染目标功能,开发人员可以将深度、颜色和模板信息渲染到单独的缓冲区,在管线的稍后阶段中重复利用相同的缓冲区。这是基本的延时着色运算,结果可以在许多现代桌面游戏中看到 - 很快也会出现在移动平台中。
一切关乎功耗
如您所知,移动空间的一切在于功耗。如果手机必须连接电源才能运行 3D 内容,用户或许就不会将它用于 3D 内容。幸运的是,OpenGL ES 的设计就考虑了这一点。由于 OpenGL ES 2.0 中可编程管线的飞跃,我们看到了 GPU 能效的提升。OpenGL ES 3.0 中新增的功能在 OpenGL ES 2.0 能效上更进一步。这一全新标准的中心思想是最小化每一绘制调用的能耗,同时改善输出的视觉质量。为此,Khronos 和 ARM 在系统层面上降低了系统总功耗。通常,3D 图形工作负载在从 CPU 卸载到 GPU 时可以减少能耗。但是,如果卸载任务需要传输大内存块,或许还是在 CPU 执行为佳。毕竟,传输内存会带来功耗。因此,在为移动空间设计 GPU 时尽可能减少内存传输是一大问题。对 OpenGL ES 3.0 的支持可以让开发人员充分利用最新的技术,尽可能实现最高效的设计。
游戏更上一层楼
对最终用户而言,什么是毋容置疑的最重要因素?外观更出色的游戏和应用程序。如果游戏的上一版本实际上外观更好,响应能力更佳,还有谁会关心新的版本可玩时间要长几小时。而这也是 OpenGL ES 3.0 的主旨。随着上述新功能的加入,OpenGL ES 3.0 让系统设计师、OEM 和开发人员能够设计出外观更出色、更吸引人的游戏。让游戏更上一层楼。这就是它所关乎的一切,也是让 ARM Mali-T604 比以前更加出色的真正原因。
Espen Oybo 是 ARM 的产品专家。在成长过程中,Espen 见证了 3D 图形在桌面计算机中的快速演进。在获得了集成电路设计专业的硕士学位后,Espen 被移动行业中的竞争局面所吸引。在一家高性能计算创业企业中短暂工作后,他加入了 ARM 媒体处理业务营销部门。在这里,Espen 负责 Mali-T600 系列,帮助合作伙伴充分利用其基于 Mali 的产品。