底层图形介面迎来「现代化」进程,苹果加入割据战,底层API阵营分裂,Web端图形介面前景不清晰。

现代化的图形API

底层绘图API的现代化进程,带有这些明显的特征:

  • graphics/computing: 不只是图形API,而是GPU渲染API与计算API的结合
  • low-level/low-overhead: 更低级的介面(更多的GPU直接控制),更少的(驱动)资源消耗
  • Multi-thread: 多个CPU线程可以并行调用图形API进行绘制,充分利用多核CPU性能
  • *OO: 更加面向对象。没人喜欢对一个全局状态机编程,以及,将状态保存在server端能够大大降低IO消耗

2013年,AMD发布Mantle后,这些现代化方案已经逐步达成共识。2014年,D3D12和Metal发布,AMD将Mantle捐赠给Khronos。2015年,Khronos发布Vulkan,摆脱OpenGL历史包袱,加入现代化进程。

这次各大厂商集中的现代化升级带来了诸多向前不兼容的新设计理念。而随著底层API的断代,WebAPI必然跟著断代,只是可能会延迟个几年,等待底层技术的普及,以及一系列的 ??吵架-定标准-实现-浏览器升级??


现代化的Web图形API

基于 OpenGL ES3.0 的 WebGL2.0 方兴未艾,浏览器支持和框架层还没有普及,还有很多扩展特性(ES 3.1)仍在开发中,然而,一次更彻底的非兼容性升级已经在酝酿中了。

WebGL1/2的设计来自OpenGL ES,OpenGL ES的普及率十分高,但是面对现代化的CPU/GPU设备和Metal/Vulkan/D3D12这些新生API,性能和设计上显得较为陈旧。而这些新生代API又共享了很多相似的设计理念,于是大家开始基于这些理念去构思下一代Web图形API。

目前WebGPU有三套讨论中的提案:

  • google的 Dawn (NXT)
  • Mozilla的 Obsidian
  • Apple的 WebMetal

其中Apple对于WebMetal的推广十分主动(也是为了推广Metal),已经率先在Safari中实现了预览版的WebGPU和WebMetal(与此同时WebGL2预览版却还停留在没法用的阶段)。Dawn已经有可运行的CPP demo,至于集成到浏览器里的预览版本可能要等标准MVP定稿。

WebGPU的设计来自于Metal/Vulkan/D3D12,底层实现上也会更容易得直接port到这些API上,不仅能为Web带来新的流水线、GPGPU支持、性能上的巨大提升,还能实现更好的跨平台性(Google的Dawn已经飞快地把WebGPU转接到了这三种底层API上,与ANGLE形成鲜明的对比)。

从设计的前沿性来看,目前图形API可以大概形成下面几个梯队:

  1. 闭源操作系统公司开发的底层API Metal/D12
  2. 开源方案 Vulkan
  3. WebGPU 希望出现在这里
  4. 开源方案 OpenGL 4.6
  5. OpenGL 4.4/4.5 子集 OpenGL ES 3.1/3.2
  6. OpenGL ES 3.1 子集 WebGL2 compute (实现中)
  7. OpenGL ES 3.0 子集 WebGL2 (普及中)
  8. OpenGL ES 2.0 子集 WebGL1 (已普及)

更加复杂的平台割据

随著苹果的加入和Khronos/微软发布非兼容更新,底层图形API的市场进一步复杂化了:

其中苹果的目标已经非常明确:将来所有自家设备上有且只有Metal一套API。新版macOS和iOS中推荐使用Metal,反对使用OpenGL,OpenGL版本锁定在4.1, ES版本锁定在3.0,不提供Vulkan(knronos提供了Vulkan转接Metal的三方方案)。

目前跨平台应用基本上都基于OpenGL(ES),今后可能会更多的基于Vulkan。而苹果放弃OpenGL和Vulkan,已经导致一些跨平台游戏和图形软体开发者放弃macOS平台。未来的跨平台应用可能只能通过第三方转接器来在Metal上实现Vulkan/OpenGL介面。


不明朗的Web端标准

浏览器这一至关重要的跨平台应用要面对更多的麻烦,因为还要为上层开发者提供统一的Web图形API,从当前的标准发展情况来看,实现跨平台是非常难的:

当前WebGL2 compute正在通过官方扩展来添加基于ES 3.1的高级特性,将带来接近OpenGL的计算能力,然而考虑到苹果的态度,在macOS上应该无法普及。

WebGL1本来就不是一个跨平台黑盒。WebGL2中这一问题更加明显,经常需要对不同的硬体和系统进行差异化处理。反倒是还未成型的WebGPU体现出了更好的跨平台可能性。虽然WebGPU标准还在早期阶段,Vulkan/D3D12的普及率也有限,但是考虑到Vulkan/Metal/D3D12当前的相似性、Apple和Google的积极态度,以及Edge换用chromium内核,可以期待其作为下一代Web图形API,能为Web端GPU开发带来质的突破。


总结

  1. WebGL2目前处于一个比较尴尬的位置,一边是冷淡的Apple,一边是酝酿中的下一代技术。
  2. 跨平台性是一个WebAPI的基本特性,底层技术的分裂和互斥将严重影响Web技术发展。
  3. 框架开发者不可能针对每次出现的技术更新重写一遍框架。
  4. 用户不可能为了每次技术升级就换框架。

阅读

  • WebGPU 开发状态与计划
  • 不知道啥时候才能用上的 WebGL2 compute
  • WebGPU必要性的质疑
  • WebGL2 困境
  • OpenGL自身的性能优化AZDO
    • Khronos-OpenGL-Efficiency-GDC-Mar14.pdf
    • youtube
  • WebGPU 草案
  • WebGL BOF 2018

推荐阅读:

相关文章