石田賀津男の『酒の肴にPCゲーム』

ゲーム初回起動時の長いシェーダーコンパイルはなぜ必要なのか?

今後は「Advanced Shader Delivery」が解決

「Forza Horizon 6」のスクリーンショット

シェーダーコンパイルを回避する「Advanced Shader Delivery」

 マイクロソフトのオープンワールドレーシングゲーム「Forza Horizon 6」が5月19日に発売された。日本を舞台にした作品で、その映像の美しさや、日本の風景の再現度の高さが、多くのユーザーから注目を集めている。

 そしてゲーム本体とは別に、本作から新たに導入された「Advanced Shader Delivery」という技術がある。ゲームの初回起動時などに行われるシェーダーコンパイル(シェーダーウォーミングなどとも呼ばれる)を回避し、起動時間を劇的に短縮する機能だ。

 この説明で内容を理解できた方はいいのだが、『ゲーム起動時に待たされる、あのシェーダーコンパイルって何なんだ?』と思っている方も多いはず。「Advanced Shader Delivery」では、いったい何がどうなって起動時間を短縮しているのか、技術者ではない方にもわかるよう順を追って説明する。

シェーダーコンパイルとは?

 まずはシェーダーコンパイルについて。シェーダーとは、3Dグラフィックスの見た目を決めるプログラムのことで、3Dモデルの陰影や質感、波や服の揺れなどを決めるものだ。同じ3Dグラフィックスでも、「Forza Horizon 6」のように現実世界のようなリアルな質感も、アニメのような描写になるゲームも、それぞれシェーダーによって決められている。

 PCゲームにおいては、ユーザーが使用するハードウェアはまちまちだ。GPUメーカーはNVIDIA、AMD、Intel、Qualcommとあり、さらに各メーカーにも複数のアーキテクチャーと、さらに多くの製品がある。

 シェーダーはプログラムなので、GPUが理解できる機械語に翻訳する必要がある。しかしGPUはメーカーやアーキテクチャーごとに、理解できる機械語が異なる。DirectXという技術でシェーダーのコードは共通化され、開発者はユーザーの環境を意識する必要はないものの、ユーザー各々が使用するPC環境においては、各GPUに合わせた機械語に翻訳せねばならない。

 ユーザーのGPUドライバーが、シェーダーを翻訳し、各々のGPUに合わせた機械語にする。これがシェーダーコンパイルだ。これをやらないことには、GPUはシェーダーで指定された内容を理解できない。

なぜ事前のシェーダーコンパイルを行うのか?

 シェーダーコンパイルは、必要とする3Dモデルが使われる時に、その都度実行するという方法もある。この場合、3Dモデルが呼び出された際にコンパイルの処理が行われるため、映像の描画が一瞬遅れることがある。具体的には、ゲームの映像が一時的にカクカクする。この状態は「スタッタリング」と呼ばれ、不快感につながる。

 スタッタリングを起こさないためには、先にシェーダーをまとめてコンパイルしておけばいい。ゲームの初回起動時に長時間のシェーダーコンパイルを実行するのは、スタッタリングを回避し、ゲームのプレイ感を損なわないようにするためだ。

 例えば対戦格闘ゲームの「ストリートファイター6」では、設定に[起動時のシェーダーウォーミング]という項目がある。標準では[行わない]になっているが、これだと対戦中にスタッタリングが起きる可能性がある。対戦ゲームでの一瞬のカクつきは、勝敗を左右することもあり得る。

「ストリートファイター6」の設定にある[起動時のシェーダーウォーミング]

 それなら、あらゆるゲームで初回起動時のシェーダーコンパイルを行うようにした方がいいと思うだろう。ところがシェーダーコンパイルをまとめて行うと、それなりの時間が必要になる。大規模なゲームになるほどシェーダーの数も増えて、コンパイルにかかる時間は長くなってしまう。

[起動時のシェーダーウォーミング]を[行う]にすると、すぐにシェーダーコンパイルが行われ、終わるまでしばらく待つことになる

 スタッタリングでゲームの体験を損なうのは確かに嫌だ。しかし楽しみにしていた新作ゲームをいざ遊ぼうと思ったら、初回起動時のシェーダーコンパイルが始まって、何分経ってもゲームが始まらない。これもまた体験としてよろしくない。

 さらに、シェーダーコンパイルは初回起動時だけとは限らない。GPUドライバーが更新されると、再びシェーダーコンパイルが必要になる場合がある。GPUドライバーにそのゲームをより効率的に動かせるコンパイル手法が導入された場合、過去の機械語データを破棄して、再度シェーダーコンパイルを実行する。ゲームのフレームレート向上やバグ修正などが行われる代わりに、待ち時間が発生する。

 またゲームのアップデートで新たな要素が追加された際に、3Dモデルの追加や新たな映像表現のためのシェーダーの修正が入った場合も、再びシェーダーコンパイルが必要になる。この場合はコンパイルが必要になるシェーダーが一部だけであれば、比較的短時間で済む。

 いずれにせよユーザー側は、ゲーム中のスタッタリングか、事前のシェーダーコンパイルの待ち時間か、どちらかを許容せねばならない。

 ちなみに家庭用ゲーム機の場合は、ハードウェアやドライバーは全ユーザーで共通している。ゲームのデータは、最初から機械語に翻訳されたものを用意できるので、ユーザー側でシェーダーコンパイルを行う必要がない。PCはハードウェアの自由度があるがゆえに、このような問題が起こる。

「Advanced Shader Delivery」はコンパイル済みのデータを配信する

 そこで登場したのが「Advanced Shader Delivery」である。簡単に言えば、シェーダーコンパイルを済ませた機械語のデータを、ユーザーに直接届けるという仕組みだ。これならユーザー側で事前のシェーダーコンパイルを行うことなく、スタッタリングも回避できる。

 対象となるのは、AMDのRDNA 3/3.5/4のアーキテクチャーを採用したGPUで、GPUドライバーがAdrenalin 26.5.2以降であることが条件。また現時点ではXbox Insider Programの参加者(Xbox Insider Hubの利用者)に限定して提供される。対応するゲームタイトルも現時点では「Forza Horizon 6」のみとなっている。

 RDNA 3以降のGPUは、型番で言えば「Radeon RX 7000」シリーズ以降、およびCPU内蔵の「Radeon 700M」シリーズ以降となる。ポータブルゲーミングPCで採用された「Ryzen Z1」シリーズもこれに含まれる。

 「Advanced Shader Delivery」は、昨年発売されたポータブルゲーミングPC「ROG Xbox Ally」シリーズで先に導入されたもの。対応するゲームでは、シェーダーコンパイル済みのデータがダウンロードされ、端末側でコンパイルする必要がない。これは家庭用ゲーム機と同様、「ROG Xbox Ally」シリーズという限定的なハードウェアだからこそ実現できたものだ。

 「Forza Horizon 6」では、「Advanced Shader Delivery」がより多くのAMD製GPUに対して提供される。これは「ROG Xbox Ally」シリーズがAMD製APUを採用しているため、同様の技術を展開しやすかったことが理由として考えられる。ちなみに「ROG Xbox Ally X」のGPUはRDNA 3.5なので今回も対象となるが、「ROG Xbox Ally」はRDNA 2なので対象外となる。

「Forza Horizon 6」で「Advanced Shader Delivery」が使われている場合、起動時の画面に「Precompiled shaders installed(事前コンパイルされたシェーダーがインストール済み)」という文字が出る

 既に実績があるとは言っても、今回は複数のGPU製品を網羅してシェーダーコンパイル済みのデータを用意する必要がある。GPUドライバーを新しいものに限定することで、用意するデータも限定的にできる。その上で各GPUに合わせたデータを用意し、ユーザーの環境に合わせたデータを配信する仕組みを、マイクロソフトが整えたということだ。

 具体的には、マイクロソフトのクラウド上で特定のGPUとドライバーの組み合わせで、事前にシェーダーコンパイルを行う。ユーザーがMicrosoft Storeからゲームをダウンロードする際、ユーザーに適切なコンパイル済みのシェーダーデータを合わせて送る。やっていることはシンプルながら、かなりの力技で、マイクロソフトならではのやり方とも言える。

 この仕組みが完全に動作すれば、シェーダーコンパイルは発生しないことになる。ただし、GPUドライバーのアップデートで再度シェーダーコンパイルが必要になった場合は、ローカルでシェーダーコンパイルを行わない代わりに、コンパイル済みデータのダウンロードが発生することになる。

 シェーダーコンパイルを行うのか、コンパイル済みのデータをダウンロードし直すのか、どちらが体験として優れているのかはユーザーの環境による。ただダウンロードの場合は、ゲームを起動することなく、バックグラウンドで自動アップデートを動かす方法もあるので、一般的にはこちらの方がスムーズであろう。実際どんな挙動になるのかはマイクロソフト次第で、今後明らかになるだろう。

「Advanced Shader Delivery」は今後どこまで広がる?

 「Advanced Shader Delivery」はAMDが先行して対応している状況だが、他の3社も対応を予定している。ゲーム側の対応が必要にはなるが、いずれは全ユーザーに標準機能として提供されることになるだろう。

 ただし現時点では、「Advanced Shader Delivery」が利用できるのはMicrosoft Storeのみで、Steam版では提供されていない。マイクロソフトのサーバー上にデータを持つ仕組みである以上、他社のストアで利用できないのは当然のことだ。

 ただ自社でストアを持つEpic Gamesは、ゲームエンジン「Unreal Engine」に「Advanced Shader Delivery」の導入テストを実施していることを明らかにしており、いずれは他社ストアでも利用できる仕組みが整う可能性はある。とはいえマイクロソフトが自社ストアの差別化にも利用できる要素なだけに、今後どうなるかは不透明だ。

 なお、シェーダーコンパイル済みのデータを配信するという発想は、Steamでは「Steam シェーダープリキャッシュ」という名前で2017年から提供されている。「Advanced Shader Delivery」とは異なる仕組みで、Windowsユーザーにはあまり恩恵がなかったりもするのだが、興味がある方は調べてみていただきたい。

「Steam シェーダープリキャッシュ」の設定。標準でONになっている

終わりに

 話は変わりますが、本連載は前回で第200回を迎えました。実は今回が200回だと思っていて、念のため数え直したところ、第201回だったことに気づいたのですが……。読者様には約4年間にわたりお付き合いいただき、まことにありがとうございます。ゲームの合間にご覧いただき、少しでもお楽しみいただけていれば幸いです。

 そして次回からは、掲載を窓の杜からAKIBA PC Hotline!に移すこととなりました。内容が大きく変わることはない予定ですが、ソフトウェア寄りの媒体からハードウェア寄りの媒体に移ることで、方向性が少しずつ変わっていくかもしれません。そのあたりも含めて、引き続きお楽しみいただきたいと思います。

著者プロフィール:石田賀津男(いしだ かつお)

1977年生まれ、滋賀県出身

ゲーム専門誌『GAME Watch』(インプレス)の記者を経てフリージャーナリスト。ゲーム等のエンターテイメントと、PC・スマホ・ネットワーク等のIT系にまたがる分野を中心に幅広く執筆中。1990年代からのオンラインゲーマー。窓の杜では連載『初月100円! オススメGame Pass作品』、『週末ゲーム』などを執筆。

・著者Webサイト:https://ougi.net/

石田賀津男の『酒の肴にPCゲーム』 記事一覧

 PCゲームに関する話題を、窓の杜らしくソフトウェアと絡め、コラム形式でお届けする連載「石田賀津男の『酒の肴にPCゲーム』」。PCゲームファンはもちろん、普段ゲームを遊ばない方も歓迎の気楽な読み物です。