WWDC Quick Look 💓 By SwiftGGTeam
Discover Metal 3

Discover Metal 3

元の動画を見る

ハイライト

Metal 3 では、Xcode 14 の新しい依存関係ビューとアクセラレーションされた構造ビューアを使用して、高速アセットの読み込み、オフライン コンパイル、MetalFX アップスケーリング、メッシュ シェーダー、最適化されたレイ トレーシング、機械学習アクセラレーションが導入されています。

主要内容

最新のゲームやプロのグラフィックス アプリケーションにおけるボトルネックは、レンダリングだけではありません。テクスチャ ストリーミングの読み込みは、多数の小さなファイル リクエストで停止します。パイプライン状態オブジェクトを初めて作成すると、フレームがドロップされる可能性があります。高解像度のレンダリングにはより多くのピクセル バジェットが必要です。複雑なジオメトリ処理では、多くの場合、最初に計算パスを実行し、次に中間結果をビデオ メモリに書き戻す必要があります。

Metal 3 は、これらの問題を実装可能ないくつかの新機能に分割します。リソースは Metal コマンド モデルにロードされ、シェーダー バイナリはビルド期間中に事前に生成され、MetalFX は高品質の出力と引き換えに低解像度を使用し、メッシュ シェーダーはレンダリング パイプライン内にジオメトリ処理を置きます。

このセッションはメタル 3 の概要です。各 API の完全な使用法を詳しく説明するものではありませんが、各機能によって解決される特定のパフォーマンスの問題について説明し、後続の特別なセッションを示します。

詳細

Metal 3 デバイスの機能チェック

(00:01) Metal 3機能を使用する前に、まずデバイスがサポートしているかどうかを確認してください.metal3 family。

if device.supportsFamily(.metal3) {

    // My awesome Metal 3 renderer

}

重要なポイント: -deviceはいMTLDevice

  • supportsFamily(.metal3)現在の GPU が Metal 3 機能セットをサポートしているかどうかを問い合わせます
  • 条件内に Metal 3 専用のレンダー パスを配置します
  • サポートされていない場合、ダウングレードされたレンダリング パスを保持する必要がある

リソースの高速読み込み

(01:25) Metal 3 の高速リソース読み込みにより、多くの小さなファイル読み込みリクエストが Metal コマンドに変換されます。各リクエストは、非同期送信のためにキューに入れられ、メタル バッファおよびテクスチャに直接ロードできるコマンドです。

テクスチャ ストリーミングのロードの従来のプロセスには 4 つのステップがあります。前のフレームのフィードバックに基づいてコンテンツをロードするかどうかを決定し、ファイルからタイルをロードし、ステージング領域からスパース テクスチャにコピーし、現在のフレームを描画します。読み込みとコピーが遅くなると、アプリケーションが低品質のテクスチャを描画するのにかかる時間が長くなります。リソースの高速ロードにより中間ステップが削減され、ストレージ ハードウェア キューが十分なリクエスト量を維持できるようになります。

オフラインコンパイル

(03:36) 従来の Metal パイプラインは、作成時に GPU 固有のシェーダー バイナリを生成します。この操作は、アプリケーションの起動の読み込みフェーズ中に発生する場合もあれば、フレーム内で新しいパイプラインが作成されるときに発生する場合もあり、その結果、初回起動の待機やフレーム レートのジッターが発生します。

Metal 3 のオフライン コンパイルにより、シェーダー バイナリの生成がプロジェクトのビルド時に行われます。実行時にパイプライン状態オブジェクトを作成するほうが速く、初めてシーンに入ってパイプラインを動的に作成するときの遅延が少なくなります。

MetalFX Upscaling

(06:04) MetalFX アップスケーリングは、プラットフォームに最適化された超解像度とアンチエイリアスを提供します。アプリは低解像度でピクセルを生成し、MetalFX は高品質の高解像度画像を生成します。低コストでより高いフレーム レートを達成することを目的として、時間アルゴリズムと空間アルゴリズムの組み合わせをサポートします。

Mesh Shaders

(07:03) 従来のグラフィックス パイプラインでは、頂点が個別に読み取られ、変換され、出力され、その後、固定機能のハードウェアによってプリミティブが組み立てられます。 GPU 駆動のカリング、LOD 選択、または手続き型ジオメトリを実行する場合、多くの場合、可変数の中間ジオメトリを生成してデバイス メモリに書き込むためにコンピューティング パスが必要になります。

メタル メッシュ シェーダは、従来の頂点ステージを 2 ステージのモデルに置き換えます。オブジェクト ステージでは、最初にオブジェクト全体を分析して、拡大、縮小、または調整するかどうかを決定します。 Mesh ステージは実際のジオメトリを生成します。中間ジオメトリがビデオ メモリに書き戻されるのを避けるために、両方のステージがレンダー パス内で実行されます。

レイ トレーシング、機械学習、ツール

(09:34) Metal 3 は、アクセラレーション構造の構築、交差、シェーディングを最適化します。間接コマンド バッファーがレイ トレーシングをサポートすると、CPU でのカリングを GPU に移動できるようになります。

(10:36) Metal 3 は機械学習も高速化します。 Mac Studio M1 Ultra では、TensorFlow トレーニングを CPU と比較して最大 16 倍高速化できます。 PyTorch が Metal GPU アクセラレーションを使用すると、BERT トレーニングは 6.5 倍、ResNet50 は 8.5 倍高速化できます。

(13:20) Xcode 14 の Metal dependency Viewer は、レンダラー全体または単一パスを表示し、同期されたエッジを表示できます。 Acceleration Structure Viewer は、プリミティブをハイライト表示し、プリミティブ データを表示し、さまざまな時点でのモーション情報を視覚化できます。

重要ポイント

  • オープンワールド ゲームのテクスチャ ストリーミング読み込みを改善: 高速リソース読み込みを使用してタイルを Metal テクスチャに直接読み込み、ステージング コピーを削減します。シーンが速く動く場合、低品質のテクスチャをより速く置き換えて画像の安定性を向上させることができます。

  • パイプラインのコンパイルを最初のフレームの外に移動: オフライン コンパイルを使用して、ビルド時にシェーダー バイナリを生成します。起動時のパイプライン ステート オブジェクトのバッチ作成の待ち時間が短縮され、ゲームが初めて新しいシーンに入ったときのフレーム ドロップが減少します。

  • 高いフレーム レートのために MetalFX を交換: Retina スクリーン上で低解像度で 3D シーンをレンダリングし、その後 MetalFX を使用して高解像度の画像を出力します。レース、アクション ゲーム、リアルタイム プレビュー ツールに最適です。

  • ジオメトリ クリッピングをメッシュ シェーダに移動: 大規模なシーンでは、最初にオブジェクト ステージを使用してオブジェクトを拡張する必要があるかどうかを判断し、メッシュ ステージを使用して表示可能なジオメトリを生成します。プロシージャル テレイン、パーティクルの群れ、大規模なインスタンスの LOD 選択。

  • Xcode 14 でレンダリングの依存関係を確認する: 依存関係ビューアーを使用して複雑なレンダラーのパス間の同期エッジを表示し、高速リソースの読み込み、コンピューティング パス、およびレンダー パス間の隠れた待機を回避します。

関連セッション

コメント

GitHub Issues · utterances