底層圖形介面迎來「現代化」進程,蘋果加入割據戰,底層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

推薦閱讀:

相关文章