連載
西川善司の3DGE:Appleのゲーム向けAPI「Metal 3」は,DirectX 12 Ultimateに一層近づいた
といっても,4Gamer読者でもMetalのことを耳にしたことがない人は少なくないだろう。
Metalとは,macOSやiOS(※iPad OSやtvOSも含む)を搭載したApple製コンピュータで採用されているグラフィックスサブシステムのことだ。イメージ的には「DirectX」(Direct 3D)や「OpenGL」のようなものと理解していい。ただMetalは,抽象化レイヤーを薄くしてGPUハードウェアに近いレベルで制御するモダンなAPI構造を採用しているのが特徴である。つまり,DirectX12やVulkanに設計思想は近い。
その最新版となるMetal 3は,MicrosoftのWindows&Xboxプラットフォームで採用されている「DirectX 12 Ultimate」や,OpenGL系の低抽象化版「Vulkan」に近い機能を実装しており,少なくともAPIレベルでは,WindowsベースのPCゲームを過不足なく移植できる能力を有するようだ。
その根拠は,Appleの開発者向けWebページにある動画を見ると分かる。WWDC 2022におけるMetal 3関連セッションの1つを動画にしたもので,概要の解説ではあるが,けっこう濃い内容だ。
Discover Metal 3
そこで本稿では,この動画から,Metal 3がなぜWindowsベースのPCゲームを過不足なく移植できる能力を持つと考えられるのかを説明していこう。
Metal 3の「Fast Resource Loading」とは?
まずは,Metal 3の新機能である「Fast Resource Loading」技術から。
Fast Resource Loadingは,グラフィックス関連データを,CPUオーバーヘッドを低減しながら高効率に読み込んで展開する仕組みである。これは,DirectX 12 Ultimateでいうところの「Direct Storage」に相当する機能だ。さらに言えば,この仕組みは,PlayStation 5(以下,PS5)が備える「Kraken Decompression」技術を中核とした超高速データローディングシステムや,Xbox Series X/S(以下,XSX)の「Xbox Velocity Architecture」に近い技術である。
近年のゲームでは,必要なデータブロックを断続的に読み込むようなファイル操作を多用することが多い。とくに,オープンワールド系のゲームなどで顕著だ。しかし,こうした処理は,CPU側で動く1つのスレッドが入出力制御を担当する一般的なファイル入出力システムAPIとは,相性がよくない。そもそも一般的なファイル入出力APIでは,細かいデータの読み込みを多用する処理を想定していない。これは,かつてPCにおけるストレージデバイスの主流であったHDDが,そうした用途を想定していなかったことも理由であろう。
ところが,最近ではSSDが普及してきたこともあり,HDD時代ではあまり使われなかった処理に対応する気運が高まってきたのだ。
ゲーム業界からの要望を受けて,Microsoftは,2021年に「Direct Storage」を発表した。
Direct Storageでは,SSDからの読み出し処理をDMA(Direct Memory Access)に担当させる設計として,CPUの介入を最低限とするファイル入出力システムを実現する。スクウェア・エニックス参加のゲームスタジオであるLuminous Productionsは,開発中のゲーム「FORSPOKEN」で,Direct Storageに対応することを大々的にアピールしていた(関連記事)。
Metal 3でのFast Resource Loadingの実装における詳細は明らかになっていないが,Appleが公開したFast Resource Loadingの解説動画「Load resources faster with Metal 3」によると,細々としたデータの断続的な読み込みを,マルチスレッドでキューイングしながら,非同期に読み込ませる事例を紹介していた。これから推測するに,Direct Storageと近い実装形態になっていると思われる。
Metal 3がMesh Shader対応へ
Appleは,Metal 3が最新のジオメトリパイプラインである「Mesh Shader」に対応することも発表した。
ジオメトリパイプラインとはポリゴン単位の処理系のことで,頂点パイプラインとも呼ばれることもある。Mesh Shaderについても解説するが,それにはちょっとだけ昔話から始めたい。
PCやゲーム機の世界では,2000年に誕生した「DirectX 8」から始まったプログラマブルシェーダアーキテクチャが,今でもGPUにおける基礎技術基盤となっている。Microsoftは,DirectXの拡張と歩調を合わせるように,ジオメトリパイプラインにも機能を追加していった。たとえば,以下のようなものがある。
- DirectX 10:「ジオメトリシェーダ」,ポリゴンの増減を行う
- DirectX 11:「テッセレーションステージ」(ハルシェーダ,
テッセレータ, ドメインシェーダをまとめた名称), プログラマブルにポリゴンを分割加工できる
しかし,追加した機能同士が互いに似ているので,ゲームグラフィックス開発者からは使いどころが分かりにくかった。そのうえ実効性能も今ひとつだったため,多くの開発者にそっぽを向かれてしまう。その結果,GPUが持つこれらの機能を活用するゲームは増えず,ある意味,開店休業状態となっていた。
この状況を打開すべく,2017年の「Radeon RX Vega」発表時にAMDは,新しいジオメトリパイプラインとして「Primitive Shader」を発表した。
そして2018年になると,GeForce RTX 20シリーズ発表時にNVIDIAは,「Mesh Shader」を発表した。新ジオメトリパイプラインの標準規格戦争だ。
経緯は省略するが,Microsoftは,2020年春に発表した「DirectX 12 Ultimate」でMesh Shaderを正式採用して,業界的には一丸となってMesh Shader推進で行くことが確定した。DirectX 12 UltimateのMesh Shader採用よりも先に,ソニー・インタラクティブエンタテインメントが,PS5でPrimitive Shaderを採用すると表明したことで(関連記事),足並みが若干乱れはしたものの,AMDも,2020年発表の「Radeon RX 6000」シリーズでMesh Shaderへの対応を表明。これにより,Primitive Shaderはお蔵入りとなった。
近年,AMD寄りの立場を取りちがちに見えるAppleなので,PS5が採用したPrimitive Shader案をMetal 3に採用したら,また混乱が広がったかもしれない。しかし,Appleは素直に最新GPU動向に乗って,Metal 3にMesh Shader対応を表明したわけだ。
話を戻して,Mesh Shaderとは一体どんなものなのか。簡単に言うと,頂点シェーダやジオメトリシェーダ,テッセレーションステージの各機能を統合したジオメトリエンジンに相当するものだ。各種シェーダ群を必要に応じて使うことができ,逆に使わないこともできる。また,GPGPU(Compute Shader)的に,複数の子スレッドを起動して,その結果を親スレッドが回収するような処理系も実現可能だ。
具体的な用途としては,ごく普通の頂点シェーダ的な処理のほか,不要なポリゴン群の削除(カリング)や,3Dモデルのハイポリゴン化(ポリゴン群の分割)などが,Mesh Shader活用の典型的な事例として挙げられている。
なおMesh Shaderは,自動的にカリングやハイポリゴン化を行ってくれるほど万能なものではない。カリングやハイポリゴン化を実現するには,そういう仕事をするシェーダプログラムを書く必要がある。ただ,異なるメーカーのGPUであってもMesh Shaderの仕様に大きな違いはないため,できたシェーダプログラムは,ソースコードレベルではかなり高い互換性があり,そのまま流用できる。
現在,Windows&Xbox向けのDirectX系ゲームで,Mesh Shaderを活用タイトルがどの程度あるのかは分からない(※事例は少ないと思われる)。ただ,Apple系プラットフォームのGPUでも,DirectX系シェーダプログラムがそのまま利用できることのメリットは大きいだろう。
Metal 3も超解像技術「MetalFX Upscaling」を実装
ここでいうアップスケーリングとは,「低解像度で描画した映像フレームに対して,超解像処理とアンチエイリアス処理を行って高解像度化する」という,ポストエフェクト処理のことを指す。
ポストエフェクトによるゲーム向け超解像処理としては,NVIDIAの「Deep Leaning Super Sampling」(以下,DLSS)を初めに,AMDの「FidelityFX Super Resolution」(以下,FSR),Intelの「Xe Super Sampling」(以下,XeSS)がある。AppleのMetalFX Upscalingも,これらと同系のものだ。
ただ,NVIDIAのDLSSとIntelのXeSSは,深層学習ベースの学習データを用いた,いわゆるAI系のアプローチで擬似高解像度化処理を行うものだが,一方,AMDのFSRは,信号処理による高解像度化技術という違いがある。
では,AppleのMetalFX Upscalingはどちらのタイプなのか。例によって,基調講演では明瞭な言及はなかったが,講演後に公開となったMetalFX Upscalingのアルゴリズム解説動画「Boost performance with MetalFX Upscaling」を見た限りでは,AMDと似た信号処理系の実装で間違いなさそうだ。
現時点のMetalFX Upscalingでは,2つの処理系を提供している。1つは,それなりの品質だが高フレームレートが狙えるという「空間方向アップスケーリング」の「MetalFX Spatial Upscaling」で,2つめは,高品質だが処理負荷が少し高くなる「時間方向アップスケーリング」の「MetalFX Temporal Upscaling」だ。
空間方向アップスケーリングは,処理対象の単一フレームにのみ注目して超解像&アンチエイリアス処理をする。各ピクセルの周辺で輝度がどう変化するかの傾向に注目して,高解像度化したときにピクセルがなめらかにつながるよう補間したり,あるいは輝度に差があれば,それを鮮鋭化するようなアルゴリズムで処理する仕組みだ。
一方,時間方向アップスケーリングでは,処理系自体は空間方向アップスケーリングとほぼ同一だが,補間や鮮鋭化をするときの参考情報として,その名のとおり過去フレームの画像や,現在のモーションベクター(ピクセル単位の移動速度情報。ベロシティバッファとも),現在の深度情報(デプスバッファ)なども引っ張ってくる。
ちなみに,2022年春にAMDが発表した「FidelityFX Super Resolution 2.0」(関連記事)は,まさに時間方向アップスケーリングを取り込んでおり,WWDC 2022のセッションで明らかとなった内容とほぼ同一内容のものとなっているので興味深かった。
Metal 3のレイトレ対応がよりモダンに
Appleは,NVIDIAやAMD,Intelが採用しているレイトレーシングのアクセラレーションと同等の技術を,Metal 3で実装することを明らかにした(関連リンク)。
3Dシーンをレイトレーシング向けに最適化した空間表現データ構造として「Bounding Volume Hierarchy」(BVH)を採用していることや,光源から放たれたレイが,BVH構造を探査しつつ交叉(Intersection)判定するパイプライン構造は,GeForce RTXやRadeon RX 6000が採用しているものと同一である。
ただ,Apple製プロセッサである「Apple M1」や「Apple M2」の統合型GPUは,ハードウェアレイトレーシングに対応していないので,現状のMetal 3では,GPGPU的なアプローチでレイトレーシングを行う実装となっている。
実のところ,以前のMetalでも,レイトレーシング技術には対応していた。Metal 3では,将来のハードウェアレイトレーシング対応に向けて,さらなるパイプラインの改良を進めた,と言うことのようだ。
いずれにせよ,Metal 3におけるレイトレーシング関連機能を効果的に活用できるのは,ハードウェアレベルの交叉判定ユニット(いわゆるレイトレーシングユニット)を組み込んだ次世代GPUを搭載した将来のApple Silicon(Apple M3?)の登場を待つ必要がある。
カプコンのRE ENGINEがMetal 3対応
伊集院氏の発表は,2022年後半に「バイオハザード ヴィレッジ」のMac版を発売するというシンプルなものだったが,これには,裏のテーマがある。伊集院氏は,カプコンが誇るゲームエンジン「RE ENGINE」を統括する立場にあり,バイオハザード ヴィレッジがMetal 3に対応するということは,RE ENGINEがMetal 3に対応すると表明したのと同義だと言えよう。カプコン製タイトルのSteam版が,今後はMacにも対応してくる可能性が見えてきたわけだだ。
通常,ゲームエンジンは,ゲームを構成するほぼすべての要素において,ハードウェアに依存する部分と,依存しない部分をモジュール化して切り分けたアーキテクチャになっている。ハードウェア依存部を具体的に言うと,グラフィックス(GPU),サウンド,ストレージ,入力装置(ゲームパッド),ネットワークといったサブシステムなどを指し,ハードウェアに依存しない部分とは,ゲーム進行を司るシナリオの部分や,ゲームの組み立てに直結するゲームメカニクス,そのほかの多様なデータ群のことであり,いわゆるゲームコンテンツ部分のことを指す。
ゲームエンジンを新しいプラットフォームに対応させるということは,事実上,ハードウェア依存部を対象のプラットフォームに対応させる,という意味になる。
RE ENGINEベースのゲームをMacに対応させるには,RE ENGINEのハードウェア依存部をMacのハードウェアに対応させる必要があるが,サウンドやストレージ,ネットワークなどは,ゲーム機やPCの種別が違っても,その仕様に大差はないので,対応はそれほど面倒なものではない。ゲームパッドには,ゲーム機固有の機能が組み込まれていることもあるので,個別対応が必要な場合もあるが,一般論として,やはりダントツで個別対応が必要,かつ面倒なのがグラフィックスだ。
パイプライン構造やプログラマブルシェーダアーキテクチャなどが,グラフィックス技術のトレンドに乗った仕様のグラフィックスサブシステムになっていないと,オリジナルの映像品質を維持したまま,異なるプラットフォームでゲームを動かすことは難しくなる。
その意味では,Metal 3発表直後に「バイオハザード ヴィレッジのMac版を出す」とカプコンが発表したのは,「RE ENGINEのグラフィックスサブシステムを,Metal 3へ対応させる目処がたった」ということなのだろう。
Macプラットフォームには,大作系ゲームが少ないと言われてきたが,それはひとえに,MacのグラフィックスサブシステムがWindows PCや最新ゲーム機のそれと比べて技術的に遅れていたり,あるいは独特なアーキテクチャを採用してきたという理由が大きかった。それが今回のMetal 3で,DirectX 12 UltimateやVulkanにかなり近い構造となったことで,これまでと比べれば,既存のゲームエンジンも,対応を行いやすくなったとみていい。
Appleにとって,基調講演におけるカプコンの招致は,「MacでもWindows PCやゲーム機と同等のゲーム体験が楽しめるようになります」という,同社製プラットフォームのゲーム環境改善をアピールするために,とても重要なものだったに違いない。
Unreal EngineやUnityなどの商用ゲームエンジンも,いずれはMetal 3への対応を果たすだろう。ただ,国内ゲーム開発スタジオの独自ゲームエンジンであるRE ENGINEがMetal 3に対応するという話題は,ゲーム業界に多少の影響は与えるかもしれない。
カプコンも,「バイオハザード ヴィレッジのMac版を出す」以上の発表はしていないのだが,Metal 3自体は,次のスライドにあるApple製ハードウェアに対応することが決まっているので,いずれは,RE ENGINEベースのゲームが,iPhoneやiPadでプレイできるようになるかもしれない。とくに,M1/M2チップ搭載のiPadシリーズは,性能も高いので有望だろう。
モンハンやストリートファイターがMacやiPadでプレイできる未来はやってくるのだろうか。
AppleのMetal解説ページ
- 関連タイトル:
MAC本体
- この記事のURL: