在 WWDC 上,Apple 連續兩年改進了 Metal,讓 Metal 3 在 Apple Silicon Mac 以及 iOS 和 tvOS 設備上運行。以下是即將推出的 iOS 17 和 macOS Sonoma 中 Metal 的重大變化。

Metal 3 代表了對用於為 Apple 平台編寫 3D 遊戲的 Metal 引擎和框架的重大增強。

Metal 有自己的基於 C++14 的著色語言 Metal Shading Language,它在 Metal Shading Language Specific (MSL) 中有完整的詳細說明。

在 WWDC’23 上,Apple 推出了金屬著色語言規範 1.3 版。 MSL 規範涵蓋了用 C++ 為 Metal 編寫著色器代碼的各個方面。

新的 MSL 規範可以從 Apple 開發者網站下載 PDF 版本。

Metal 3 現在包含一個可選的小型平視顯示器,當遊戲運行時,該顯示器可在渲染場景的右上角可見:

性能 HUD 可以顯示幾條有用的信息,用於實時檢查遊戲的性能:

顯示並記錄關鍵性能統計數據 CPU 和分辨率 設備刷新率 縮放 直接或複合渲染 FPS 每幀平均 GPU 成本 更多

一些 Metal 抬頭顯示統計數據。

在 WWDC’23 上,Apple 還推出了 金屬著色器轉換器工具。著色器是管理場景中 3D 對象的光線、顏色和材質的小程序。

Metal Shader Converter 可幫助您將以其他語言和框架或從其他平台編寫的著色器轉換為 Metal 3-即從 Microsoft Windows 的 DirectX 12 DXIL 格式。

Metal Shader Converter 提供兩種綁定模型可供選擇:自動佈局和顯式佈局。這些模型有助於轉換來自其他平台的著色器。

MTLBuffer 表用於 Metal Shader Converter 工具。

無綁定渲染、參數緩衝區和光線追踪

無綁定渲染是 Metal 3 中的新增功能,允許您使用光線追踪來提高 3D 性能和質量渲染的場景。

無綁定渲染的一個方面-參數緩衝區-允許您將資源組合到緩衝區中,從而加快渲染速度。

不是綁定每個顯示資源,而是使用參數緩衝區將資源在內存中的緩衝區中鏈接在一起。在無綁定模型中,參數緩衝區將資源聚合併鏈接在一起,允許從渲染管道直接訪問。

3D 網格在內存中鏈接在一起,而不是在渲染管道中一一使用。這可以加快對光線追踪著色器所需的所有對象的訪問速度,從而更快、更詳細地渲染高分辨率表面。

無綁定渲染。

網格、材質和紋理都可以在內存中鏈接。

Metal 3 中的四個新增強功能有助於無綁定渲染:

參數緩衝區-將資源鏈接在一起以進行直接訪問,如上所述。

無界數組-允許在數組中一次定義多個網格結構。著色器可以不受限制地訪問任何大小的數組。

無界數組中的網格結構對象現在可以直接從 C/C++ 代碼和線程訪問,但由於線程同步問題,在訪問它們時必須小心。

您可以使用 __METAL_VERSION__ 預編譯器標誌有條件地編譯 Metal 3 中的 C、C++ 和 Mesh 聲明,以使用無界數組(如果目標平台上可用)。

您可以在運行時使用 MTLDevice 對象來查看是否有任何給定設備支持新功能。要使用新功能,您的設備必須具有以下規格:

iOS-A13 Bionic 芯片或更高版本。

macOS-2016 Mac 或更高版本。

Apple Metal 開發人員文檔的“緩衝區”部分有一個關於參數緩衝區的新部分。

MTLHeap 分配的加速結構

堆是預先分配的內存空間,在渲染之前將資源和結構加載到其中。駐留在堆中意味著資源已預加載,並可在渲染過程中需要時立即使用。

光線追踪加速結構可以直接從 MTLHeap 對像以及緩衝區和紋理中分配。這允許與其他資源類型聚合。使用 MTLHeap 加速結構可以節省線程中的 CPU 時間。

著色器驗證增強

通常,資源在渲染之前必須駐留在堆中,以確保渲染性能和準確顯示。未能提前堆分配資源可能會導致性能故障,甚至在繪製過程中導致對象顯示不正確。

為了幫助確保資源駐留在堆上,Metal 3 提供了一項新功能來檢測共享命令緩衝區執行期間丟失的駐留情況。為了確保堆駐留,現在在將場景對象發送到光線跟踪編碼器之前將 useResource: 發送到場景中的每個元素。

這種確保資源在光線跟踪著色器運行之前駐留的形式在 Metal 3 中稱為著色器驗證。

這四個功能使得在 Metal 3 中更容易實現無綁定。

p>

此外,請務必查看 WWDC’23 會議“Metal 光線追踪指南”和“使用 Metal 3 實現無綁定”。

新的 Metal Debugger 依賴關係查看器顯示渲染工作負載資源之間的依賴關係。

要顯示依賴項查看器,請打開 Metal 調試器,然後單擊左側導航器中的“依賴項”行:

打開 Metal 依賴調試器。

將出現一個依賴關係圖,其中顯示每個渲染命令中的依賴關係。單擊依賴關係圖中的任何項目都會在依賴關係查看器右側的新側欄中顯示該項目的詳細信息。

Metal Debugger Dependency Viewer 中顯示兩種類型的依賴關係:數據流和同步。依賴關係查看器中的實線顯示數據流,虛線顯示依賴關係,顯示傳遞之間的同步。

Metal 依賴調試器圖。

著色器調試器

Xcode 14 及更高版本中還內置了一個著色器調試器,它允許您對著色器代碼執行像素級調試。您可以選擇任何場景中顯示的任何渲染像素,單擊調試器窗口右下角的“著色器調試器”按鈕,它將跳轉到著色器代碼中用於繪製對象的確切位置。

其他增強功能

Metal 團隊現在有四個用於優化 Metal 渲染管道的附加建議:

在渲染之前移動副本。將相同類型的命令分組。避免空編碼器。使用 MTLLoadAction 和 MTLStoreAction 進行優化

最後一個建議-MTLLoadAction 和 MTLStoreAction-用於附件,即渲染過程之前要執行的操作。

WWDC’23 會議“使用 Metal 3 實現無束縛”中也更詳細地介紹了這些建議。請參閱 Apple Developer 應用程序以訪問所有 WWDC’23 Metal 會議視頻。

另外,請務必查看 MetalFX 升級,我們在上週的另一篇文章中對此進行了介紹。

Metal 3 中的這些改進意味著 Metal 比以往任何時候都更適合作為 Apple 設備上的 3D 遊戲和應用程序平台。

Categories: IT Info