Metal は Apple のゲーム用高速グラフィックス レンダリング テクノロジですが、MetalFX は Apple Silicon 上で映えるように改良を加えています。 MetalFX の仕組みは次のとおりです。
2014 年、Apple は Metal と呼ばれる新しいグラフィックスおよびゲーム レンダリング テクノロジを導入しました。
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 には Swift バージョンと Objective-C バージョンもあります。
ただし、Metal は Apple 製であり、Apple ハードウェア向けに設計されているため、これらのデバイスで利用可能なレンダリング テクノロジの中で最高のグラフィックス レンダリング パフォーマンスを提供します。
iOS または tvOS デバイスで Apple Arcade ゲームを開始するたびに、動作中の Metal レンダリングのサンプルを確認できます。これは、すべての Apple Arcade ゲームが Metal を使用してレンダリングされる前に実行される、短い Apple Arcade ロゴのバウンス アニメーションです。 。
多くのゲームは、GPU ハードウェア アクセラレーションと事前計算シェーダーを使用して、グラフィックスのレンダリングを高速化します。 Metal では、グラフィックス コマンドは事前にエンコードされ、レンダリングのために GPU に送信されます。
事前に計算されたレンダリング ステートは、最大のパフォーマンスを得るためにレンダリング パイプラインを構成する方法を GPU に事前に伝えます。
レンダリング シェーダ、つまり光、闇、色を制御する事前計算されたプログラムは、3D シーンのレンダリング中に使用され、リアリズムと特殊効果を提供します。 MSL では、メタル シェーダがどのように機能するかについて説明します。
シェーダーは、1988 年に Pixar の RenderMan ソフトウェアによって商用ソフトウェアに初めて導入されました。このソフトウェアには、Mac 上で数十年前に遡る長い歴史があります。
最新の GPU レンダリング パイプラインのほとんどでは、3D データとシェーディング言語プログラムの両方が処理のために GPU に送信され、シーン内の各フレームが作成されるマルチステップのプロセスまたはパイプラインが管理されます。
レンダリングの手順には、大まかにジオメトリの変換、モデルの三角形と四角形への分割、フラグメント シェーダーの適用、深度テストと結合、オクルージョンされたサーフェスとオブジェクトの除外が含まれます。最後のステップでは、表示用にすべてを最終フレーム バッファーに結合します。
最新の GPU ハードウェアでは、これらすべてが 1 秒あたり数十回発生します。
Metal には、GPU 負荷を軽減しながらレンダリングを高速化するプログラムであるパフォーマンス シェーダーも含まれています。パフォーマンス シェーダーには、画像フィルタリング、ニューラル ネットワーク、高度な数学、レイ トレーシングが含まれます。
レイ トレーシングは、3D モデル オブジェクトの表面、テクスチャ、光源からの反射を大幅に改善します。
2020 年、Apple は、より高速なパフォーマンスを提供するために Metal を Apple Silicon CPU および GPU に移植したと発表しました。 WWDC 2022 で、Apple は MetalFX と呼ばれる Metal の新機能を紹介しました。
MetalFX を使用すると、一部のフレームを再計算してアンチエイリアスし、レンダリングされたオブジェクトのエッジを再計算して滑らかにすることで、より高速かつ正確なシーンのレンダリングが可能になります。
MetalFX の秘密兵器は、アップスケーリングと呼ばれるテクノロジーです。
アイデアは、オブジェクトをレンダリングすることです。シーンを低解像度で表示するため、全体的なフレーム バッファーのレンダリングが高速になります。次に、シーンを拡大して表示する前に追加の手順を追加します。
ほとんどのシーンのレンダリングをより小さなサイズで実行することにより、シーンをより高速に、より詳細かつ複雑にレンダリングできます。ほとんどの場合、シーン全体を大きな最終寸法でレンダリングするよりも、小さなスケールでシーン オブジェクトをレンダリングしてから最終フレームの全体的な解像度を向上させる方が高速です。
アップスケーリングを使用することにより、MetalFX は、より高速なシーン レンダリングと、より多くのオブジェクトの詳細と鮮明さの両方を提供できます。
MetalFX のアップスケーリングの例。右側のフレームはよりシャープに見えます。
MetalFX は、空間アップスケーリングと時間アンチエイリアス アップスケーリングという 2 つの異なるアップスケーリング タイプを使用します。
空間アップスケーリングでは、MTLFXSpatialScalerDescriptor と MTLFXSpatialScaler という 2 つの Metal クラスが作成されます。記述子オブジェクトは空間スケーラー オブジェクトの詳細を記述し、MTLFXSpatialScaler オブジェクトは (その encode メソッドを介して) 実際のエンコードを実行します。
encode が呼び出されると、MTLFXSpatialScaler オブジェクトはレンダリング コマンドを作成し、レンダリングのために MTLCommandBuffer オブジェクトに送信します。このプロセスはシーン内のフレームごとに繰り返されます。
MetalFX 空間アップスケーリングは、パフォーマンスを大幅に損なうことなく、シーンのディテールを約 2 倍まで提供できます。
MTLFXSpatialScaler オブジェクトの作成は計算コストがかかるため、アプリケーションの起動時またはディスプレイの解像度の変更時にのみ実行する必要があります。
時間的アンチエイリアシング アップスケーリングでは、前のフレームのデータが現在のフレームをアップスケーリングするための入力として使用されます。
スーパーサンプリングと時間サンプリングは、フレームの個々のピクセル データを使用してアップスケーリングを実現する手法です。各ピクセルからのデータと複数のフレームにわたるピクセルの両方からのデータがサンプリングされます。
時間的アンチエイリアスは計算量がわずかに多く、機能するには追加の色、深度、およびモーション データが必要です。
これは、Apple の WWDC プレゼンテーションからのアンチエイリアス アップスケーリングの別の例です:
左は 1080p、右はアンチエイリアシング アップスケーリングを使用して 4K アップスケーリングです。
ほとんどの MetalFX アップスケーリング処理は、レンダリング後、最終的な後処理の前に実行する必要があります。フレーム上で行われます。
MetalFX アンチエイリアシング アップスケーリングの使用法の 1 つは、1080p フレームの解像度を上げて 4K 解像度に近づけることです。
空間アップスケーリングと同様に、MetalFX はアンチエイリアシング アップスケーリング用の 2 つのクラス、MTLFXTemporalScalerDescriptor と MTLFXTemporalScaler を提供します。
完全な MetalFX のドキュメントは、Apple の開発者 Web サイトで入手できます。 Apple はまた、WWDC’22 で「MetalFX アップスケーリングによるパフォーマンスの向上」というタイトルの MetalFX セッション ビデオを公開し、サンプル コードを含めて MetalFX の使用方法を詳しく説明しました。
No Man’s Sky を含むいくつかの AAA ゲーム タイトルはすでに Apple デバイスで MetalFX を使用しています。
MetalFX は、最新のグラフィックス コンピューティング技術により、最新の GPU ハードウェアでシーンの解像度とゲーム パフォーマンスの両方を向上させることを約束します。新しい Metal テクノロジーは、Apple デバイスでのゲームに革命をもたらす可能性があります。