Metal は Apple のゲーム用高速グラフィックス レンダリング テクノロジですが、MetalFX はそれを輝かせるための改良を加えています。アップルシリコン。 MetalFX の仕組みは次のとおりです。

2014 年に Apple は、「金属

Metal は、Apple ハードウェアに最適化された高速パフォーマンスを提供するレンダリング API です。 Apple Silicon GPU の登場により、Metal のパフォーマンスはさらに大幅に向上しました。

コンピュータ ゲームのグラフィック レンダリングにおける問題の 1 つは、高解像度のサーフェス シェーダとエフェクトを使用して大量のポリゴン モデルを高速に描画する方法です。フレーム レートとゲーム シーンの複雑さが増すにつれて、この問題がグラフィックス レンダリング パイプラインにボトルネックを引き起こしています。

Metal API は、ご想像のとおり、Metal Shading Language (MSL) と呼ばれる独自のシェーディング言語を備えた Apple C++ API です。 Metal API は、Windows 上の DirectX 12 またはサードパーティのグラフィック レンダリング ライブラリ Vulkan と比較されています。

もあります迅速Metal API の Objective-C バージョン。

ただし、Metal は Apple 製であり、Apple ハードウェア向けに設計されているため、これらのデバイスで利用可能なレンダリング テクノロジの中で最高のグラフィックス レンダリング パフォーマンスを提供します。

を開始するたびに、動作中の Metal レンダリングのサンプルを確認できます。アップルアーケードでのゲームiOSまたはテレビOSdevice - すべての Apple Arcade ゲームが Metal を使用してレンダリングされる前に実行される、短い Apple Arcade ロゴのバウンス アニメーション。

多くのゲームは、GPU ハードウェア アクセラレーションと事前計算シェーダーを使用して、グラフィックスのレンダリングを高速化します。 Metal では、グラフィックス コマンドは事前にエンコードされ、レンダリングのために GPU に送信されます。

事前計算されたレンダリング ステートは、パフォーマンスを最大化するためにレンダリング パイプラインを構成する方法を GPU に事前に伝えます。

レンダリング シェーダ、つまり光、闇、色を制御する事前計算されたプログラムは、3D シーンのレンダリング中に使用され、リアリズムと特殊効果が提供されます。 MSL では、メタル シェーダがどのように機能するかについて説明します。

シェーダーは、1988 年に Pixar の RenderMan ソフトウェアで初めて商用ソフトウェアに導入されました。マック何十年も遡ります。

最新の GPU レンダリング パイプラインでは、3D データとシェーディング言語プログラムの両方が処理のために GPU に送信され、シーン内の各フレームが作成されるマルチステップのプロセスまたはパイプラインが管理されます。

レンダリング手順には、大まかに、ジオメトリの変換、モデルの三角形と四角形への分割、フラグメント シェーダの適用、深度テストと結合、オクルージョンされたサーフェスとオブジェクトの除外が含まれます。最後のステップでは、表示用にすべてを最終フレーム バッファーに結合します。

最新の GPU ハードウェアでは、これらすべてが 1 秒あたり数十回発生します。

Metal には、GPU 負荷を軽減しながらレンダリングを高速化するプログラムであるパフォーマンス シェーダーも含まれています。パフォーマンス シェーダーには、画像フィルタリング、ニューラル ネットワーク、高度な数学、レイ トレーシングが含まれます。

レイ トレーシングにより、3D モデル オブジェクトの表面、テクスチャ、光源からの反射が大幅に改善されます。

2020 年に Apple は、はるかに高速なパフォーマンスを提供するために Metal を Apple Silicon CPU および GPU に移植したと発表しました。でWWDC2022 年、Apple は Metal に次の新機能を導入しました。メタルFX

MetalFX を使用すると、一部のフレームを再計算してアンチエイリアシングし、レンダリングされたオブジェクトのエッジを再計算して滑らかにすることで、より高速かつ正確なシーンのレンダリングが可能になります。

MetalFX の秘密兵器はアップスケーリングと呼ばれるテクノロジーです。

右はアップスケーリングの例。ピクセルとオブジェクトのエッジはどちらもより鮮明で滑らかです。

この目的は、オブジェクトまたはシーンを低解像度でレンダリングすることで、フレーム バッファー全体のレンダリングを高速化することです。次に、シーンを拡大して表示する前に追加の手順を追加します。

ほとんどのシーンのレンダリングをより小さい次元で実行することにより、シーンをより高速に、より詳細かつ複雑にレンダリングできます。ほとんどの場合、シーン全体を大きな最終寸法でレンダリングするよりも、小さなスケールでシーン オブジェクトをレンダリングしてから最終フレームの全体的な解像度を向上させる方が高速です。

アップスケーリングを使用することにより、MetalFX は、より高速なシーン レンダリングと、より多くのオブジェクトの詳細と鮮明さの両方を提供できます。

MetalFX のアップスケーリングの例。右側のフレームの方が鮮明に見えます。

MetalFX は、空間アップスケーリングと時間アンチエイリアス アップスケーリングという 2 つの異なるアップスケーリング タイプを使用します。

空間アップスケーリングでは、2 つの Metal クラス (MTLFXSpatialScalerDescriptor と MTLFXSpatialScaler) が作成されます。記述子オブジェクトは空間スケーラー オブジェクトの詳細を記述し、MTLFXSpatialScaler オブジェクトは (そのオブジェクトを介して) 実際のエンコードを実行します。encode方法)。

いつencodeが呼び出されると、MTLFXSpatialScaler オブジェクトはレンダリング コマンドを作成し、レンダリングのために MTLCommandBuffer オブジェクトに送信します。このプロセスはシーン内のフレームごとに繰り返されます。

MetalFX 空間アップスケーリングは、マテリアルのパフォーマンスを損なうことなく、およそ最大 2 倍のシーンのディテールを提供できます。

MTLFXSpatialScaler オブジェクトの作成は計算コストがかかるため、アプリケーションの起動時またはディスプレイの解像度が変更された場合にのみ実行する必要があります。

時間的アンチエイリアシング アップスケーリングでは、前のフレームのデータが現在のフレームをアップスケーリングするための入力として使用されます。

スーパーサンプリングと時間サンプリングは、フレームからの個々のピクセル データを使用してアップスケーリングを実現する手法です。各ピクセルからのデータと複数のフレームにわたるピクセルの両方のデータがサンプリングされます。

時間的アンチエイリアシングは、計算量がわずかに多くなり、機能するには追加の色、深度、およびモーション データが必要です。

Apple の WWDC プレゼンテーションからのアンチエイリアス アップスケーリングの別の例を次に示します。

左は 1080p、右はアンチエイリアシング アップスケーリングを使用して 4K アップスケーリング。

MetalFX のアップスケーリング処理のほとんどは、レンダリング後、フレームに対して最終的な後処理が行われる前に実行する必要があります。

MetalFX アンチエイリアス アップスケーリングの使用法の 1 つは、1080p フレームの解像度を上げて 4K 解像度に近づけることです。

空間アップスケーリングと同様に、MetalFX はアンチエイリアス アップスケーリング用に MTLFXTemporalScalerDescriptor と MTLFXTemporalScaler という 2 つのクラスを提供します。

完全な MetalFXドキュメントApple の開発者 Web サイトから入手できます。 Apple はまた、WWDC '22 で「MetalFX アップスケーリングによるパフォーマンスの向上」というタイトルの MetalFX セッション ビデオを公開し、サンプル コードを含めて MetalFX の使用方法を詳しく説明しました。

いくつかの AAA ゲーム タイトルを含むノーマンズスカイすでに Apple デバイスで MetalFX を使用しています。

MetalFX は、最新のグラフィックス コンピューティング技術により、最新の GPU ハードウェアでシーンの解像度とゲーム パフォーマンスの両方を向上させることを約束します。新しい Metal テクノロジーは、Apple デバイスでのゲームに革命をもたらす可能性があります。