風景區中的扁平 2D 構圖

  • 專案主管:emircan@google.com
  • 文件作者:emircan@google.com、dworsham@google.com
  • 區域:查看系統

問題陳述

View 目前會在 fuchsia.ui.gfx 命名空間 (「gfx api」) 下提供 3D API 的圖形用戶端。這個 API 會在用戶端或其他 3D 圖像程式中,為用戶端提供類似的場景模型。繪製順序是由 Z 深度處理,不透明度的處理則會根據深度搭配 Alpha 混合處理 (無法實現群組不透明度等功能)。很遺憾,從產品觀點和效能角度來看,gfx API 不再適合在 View 上供需求使用。

從產品的角度來看,我們的現有客戶基本上就是 2D 產品。目前沒有任何深度和繪製順序的概念,就是不同繪製幾何圖形批次的順序。由於沒有深度,因此透明效果也會透過繪製順序指定,群組不透明度等效果也很常見。「2D」產品 (透過 Flutter、Chromium 和工作階段架構) 必須額外處理,以解決 View 的 3D 場景呈現方式與使用者所體驗 2D 呈現之間隱抑不一致的問題。

從效能的角度來看,新型影片顯示控制器 (VDC) 硬體提供加速功能,例如 View 日後會使用的多個螢幕平面和硬體重疊,以降低耗電量和 GPU 用量。硬體會以嚴格 2D 模式運作,並且只瞭解可在 X/Y 中定位的矩形層。風景優美的 3D API 目前允許及鼓勵客戶提交不適用於此模式的內容,且會使最佳化作業對您造成困擾。

解決方案陳述

The Flatland 2D API 是 YouTube 目前開發中的新用戶端 API,其目標是為用戶端提供類似螢幕控制器的功能,目的是藉此解決 Fuuchsia 中圖形的產品和效能目標。用戶端只能提交在 X/Y 中縮放和偏移的 2D 圖層。

這會導致:

  • 看起來更進一步地公開 2D API 符合現有客戶期望。
  • 盡可能將工作委派給 VDC,藉此降低 GPU 用量。
  • 更輕巧的風景,僅針對 2D 矩形圖層進行最佳化。

依附元件

將所有現有的景觀客戶 (樹狀結構內和從外部) 進行轉換

風險與緩解措施

風險:基於使用者輸入的疑慮,產品中的所有用戶端都必須以不可分割的形式遷移

緩解措施:用於在 RootPresenter、Flutter 和 Chrome 中啟用 Flatland 的設定標記,以確保啟用 Flatland 不會造成乾擾且不可部分完成

緩解措施:View 中較為複雜的輸入實作方式,可讓用戶端以非不可分割的形式進行遷移 (混合 gfx 和平面場景圖)

緩解措施:一開始不會實作群組不透明度功能,儲存以供日後使用