見出し画像

Macでもゲームがしたい(2023冬)

この記事はnote株式会社 Advent Calendar 2023の15日目の記事です。


Steam DeckにみるLinux Gamingという選択肢

筆者は、昨年の1月末にポータブルゲーミングPCのSteam Deckを注文してからというものSteamでゲームを購入しては積むことにハマっている。

このSteam Deckはとんでもない代物で、さながら大きめのPSPっぽい筐体にAMDの新しめのAPU(CPUとGPUを一個のパッケージに収めたもの)を搭載し、なんとLinux(SteamOSという名称)上でWindowsのゲームを実行できるというものである。もちろんディスクリートGPU並の性能をAPUで実現するのはまだまだ難しいので、APUに実装されているRDNA2のコアを減らした上で1280x800のHD解像度で多くのゲームが快適に実行できるAPUというラインを確保してポータブルなゲーミング体験を実現している。

机に鎮座するSteam Deckの図

Steam Deckの恐るべき点はハードウェアのみならず、Windows用のゲームをLinux上で実現するためのソフトウェア的な仕組みも用意されている点にある。これはProton (https://github.com/ValveSoftware/Proton) と呼ばれていてOSSとして開発されている。READMEにはこうある。

Proton is a tool for use with the Steam client which allows games which are exclusive to Windows to run on the Linux operating system. It uses Wine to facilitate this.

https://github.com/ValveSoftware/Proton/blob/proton_8.0/README.md

Wineという割りと昔からあるLinux向けのWindows用のバイナリの実行基盤をベースにゲームを実行できるようにValveが改変したものだ。WineにはWine HQというサイトがあって、Linux上でも意外と多くのソフトウェアが動作することがわかる。

ではWine以外に、Linux上でゲームを動かすのに足りないパーツはなんだろうか。多くのWindowsゲームは3Dの描画のためにコンピュータに搭載されているGPUを利用する。GPUを利用して3Dモデルを描画するための命令(多くはシェーダーとか機械学習文脈だとカーネル関数と呼ばれている)を実行する仕組みはなんとOSごとに違っており、Windowsでは古くからあるDirect Xという仕組みを利用する。Linux ではOpenGLなどを利用することが多く、Direct XとOpenGLに互換性はないので、Windows用に書かれたDirect Xを利用したゲームはそのままではLinux上では実行することができない。

Protonではこれを解決するために、DXVKというライブラリを利用する。DXはDirect Xのことであるが、VKはVulkanの略でこれはOpenGLに類似する(互換性はない)比較的新しめの3D計算用のAPIである。最近だとAndroidはVulkanを経由して、画面を描画していたりするらしい。DXVKは、Direct X からVulkanへの命令の変換を肩代わりしてくれる。つまり、WineでWindows用のバイナリを実行できるようにしつつ、ついでにDXVKでGPUへの命令もライブラリを通して変換することで、Linux上でさもゲームが実行できてしまうという寸法である。

Game Porting Toolkit

青天の霹靂。6月に毎年Appleが開催しているWWDCで、驚くべき発表があった。筆者も日本時間深夜に眠い目をこすりながら基調講演を視聴していたが、次期macOSではゲームモードを実装し、Windows用のゲームを簡単に移植できるようにするよ、と担当役員が言っているように聞こえた。発表中では詳しい内容は明かされなかったので、後々公開された動画を確認したら、Game Porting Toolkit (以後GPTKと呼ぶ) なるものを導入するらしく、要はWindowsゲームの開発者がAppleのプラットフォーム向けにゲームを移植しやすくできるようにするよとのことだった。

要はこれを使えば、ゲーム開発者がAppleデバイス向けにゲームを移植したくなったとき(ビジネス上そんなことが急にあるのかは分からないが)に、ファーストタッチとしてさくっと動作するのかどうかをテストできるということらしい。

GPTKのスタック図 
https://developer.apple.com/videos/play/wwdc2023/10123/ の3:29辺りから引用

GPTKの実体はなんなのか。Steam DeckにおけるProtonに類似するように、エミュレーション(トランスレーション)レイヤーである。Windows用のバイナリを実行するための変換レイヤーをWineでつくり、それをApple Siliconを搭載したMac上で実行できるようにしたものである。ただしSteam Deckと異なるのは、macOSやiOSで3Dグラフィックスを扱うためのAPIはVulkanではなくMetalであるので、Direct Xの命令をMetalに変換するためのライブラリ (D3DMetal)を実装したことである。もう一つはApple SiliconはARMアーキテクチャのCPUコアを実装しているので、よくあるWindowsマシンがIntel製のCPUを搭載していたとしてそのままバイナリを実行できないのを、Rosetta 2 でこれもトランスレーションして実行できるようにしている点である。

GPTKを利用すれば、

  • 開発者はWindows用のゲームをMac(やIPhoneやiPad)などに移植したくなったときに最初の動作検証のための準備を大幅に省略できる

    • 動かなかったら大幅にコード修正が必要なので一旦やめとくというビジネス上の意思決定ができる

  • 非開発者(主にゲームする人)はWineやProtonと同じようにエミュレーション(トランスレーション)レイヤーとして利用して、Mac上でWindowsゲームを動作させることができる

    • ただし、あくまで元は開発者向けのツールなのでシェーダーなどが最適化されていないゲームを動作させることになる

ということが可能になる、夢がある。

Game Porting Toolkitを利用する

GPTKのインストール方法は主に開発者向けのツールなので、手動でインストールするためには Homebrew経由でビルド用のリソースを落としてきて、コンパイルする必要がある。海外のAndrew Tsaiさんという方がメンテしているWikiにインストール手順があるので、貼っておく。筆者も仮想環境でのビルドを試してみたが、Mac Studio (M2 Max 64GB 38 GPU)でもビルドに数時間かかった。また、GPTKのバージョンによってはXcode のバージョンが合ってないとビルドが途中で失敗することがあった。

先述の通りGPTKのインストールは面倒なので、海外の有志の方がGPTKのインストールとWineのボトルの管理をGUIでできる、macOS用のアプリを公開してくれているので、こちらは開発も活発で比較的おすすめであるが、筆者のMac Studio + 外部ディスプレイx2の環境だとなぜかインストールしたSteamが起動しなかった (MBPなどのディスプレイ付きなら起動できるのかもしれない)。

CrossOver for Mac

筆者イチオシのGPTKの利用方法は、Mac界隈に昔からあるCrossOverというMac上でWindowsアプリを実行できるアプリを利用することである。古来からMac界隈でWindowsのアプリを実行したいときのソリューションとしてParallesなどの完全仮想化アプリなどと一緒に有名であったが、最近だとDirect X 12 のAPIの変換レイヤーを自社で作っていたらしく、23.0.0 で初サポートされたが本当に限られたゲームしか動作しなかった。

GPTKはCodeWeavers(CrossOverをつくってる会社)にとっても青天の霹靂だったらしく、自社で作っていたDirect X 12 対応をやめて、GPTKに付属するD3DMetalに速攻乗り換えて革新を起こしたりしている(すごすぎて自分でこれはゲームチェンジャーだと言っている)。

14日間無料トライアルがあるので、インストールしてSteamをインストールしたらここのトグルをオンにするとGPTKでも使っているD3DMetalで変換レイヤーを動作させられる。

CrossOverの設定パネル

(注:この手順を利用して、なにか問題が発生しても筆者は責任を負わない。必ず正規の手段で購入したソフトウェアを利用すること。)

CrossOverでWindowsゲームをやってみる

GPTK (D3DMetal)のおかげでかなりのAAAタイトルがMac上で動作するようになった。モンスターハンターライズ:サンブレイク はGPU負荷はあまり高くないがDirectX 12を利用するのでMacでは実行できなかったが、最近は動作するようになった(Steam Inputを無効にするとコントローラーも動く)。

筆者が地味にすごいなと思ったポイントとしては、Apple Silicon Macの電力性能である (筆者の場合はMac Studio)。待機時電力でせいぜい9W程度しかかからなく、これはSteam DeckのTDP (15W)と同じくらいである。加えてMetalベンチマークによれば、M2 Maxの性能は内蔵GPUなのにも関わらずRDNA2(前世代のAMDのGPUアーキテクチャ)世代のハイエンドのGPUと同等の性能である。Mac Studioの値段は一旦考えないようにしている。

バットマンアーカムナイト

  • 普通にプレイ可

Star Wars ジェダイ:フォールン・オーダー

  • 普通にプレイ可

ジェダイサバイバー

  • やたらメモリを食うけど普通にプレイ可

ウィッチャー3 ワイルドハント

  • 普通にプレイ可(GPTK以前にも動いたらしい)

モンスターハンターワールド

  • 起動までにやたら時間がかかる(数分)が普通にプレイ可

Tips

  • ゲームが動くかどうかはCodeWeaversのサポートサイトで検索できる

    • 4つ星くらいなら大体動く

    • 有志がテスターとして動作を評価するシステムらしい

  • D3DMetalのメモリ管理には難があるかもしれなくてたまにメモリが解放されないまま使用率が増えていくことがある

  • Steam Input をオンにしているとコントローラーを認識しないゲームがある

    • CrossOverのバグ説あり

まとめ

  • MacでWindowsゲームが遊べて嬉しい

末筆ではあるが、筆者の所属するnote社ではゲームやソフトウェア命令変換技術が大好きなエンジニアを募集しているので、ぜひご応募いただきたい。

その他参考になる情報ソース


この記事が参加している募集

やってみた

この記事が気に入ったらサポートをしてみませんか?