View a markdown version of this page

シェーダーキャッシュ - Amazon GameLift Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

シェーダーキャッシュ

シェーダーキャッシュを使用すると、アプリケーションは将来のストリームセッションでコストのかかるシェーダーの再コンパイルをスキップできます。アプリケーションがスタッタリングやロード時間の遅延に悩まされている場合、シェーダーキャッシュをキャプチャすると、エンドユーザーのエクスペリエンスが大幅に向上します。

Amazon GameLift Streams を使用すると、特別に指定されたストリームセッションからシェーダーキャッシュをキャプチャできます。互換性のあるすべてのストリームグループのアプリケーションの後続のストリームセッションでは、キャプチャされたシェーダーキャッシュが自動的に使用されます。シェーダーキャッシュ機能を使用すると、アプリケーションにコードやその他の変更は必要ありません。

前提条件

シェーダーキャッシュを使用するには、次の要件を満たす必要があります。

  • ストリームグループは、2026 年 7 月 31 日以降に作成されている必要があります。この日付より前に作成されたストリームグループは、シェーダーキャッシュをサポートしていません。

シェーダーキャッシュの仕組み

ゲームなどのグラフィックスアプリケーションは、シェーダーキャッシュの恩恵を受けます。キャッシュは、グラフィックス関連の処理とコンパイル作業の繰り返しを回避します。指定されたストリームセッションからシェーダーキャッシュをキャプチャするために、Amazon GameLift Streams はアプリケーション用に自動的に生成されたシステムシェーダーキャッシュファイルを収集します。サービスはこのキャッシュを保存し、互換性のあるストリームグループの今後のセッションに自動的に適用します。これにより、今後のセッションでシェーダーの処理に費やす時間が短縮されます。シェーダーキャッシュを生成または消費する場合、アプリケーションを変更する必要はありません。

シェーダーキャッシュライフサイクルには 3 つのステージがあります。

  1. キャプチャ – シェーダーキャッシュキャプチャを有効にしてストリームセッションを実行します。このセッション中、システムはアプリケーションで使用されるシェーダープログラムを自動的にローカルファイルシステムキャッシュにコンパイルします。アプリケーションを適切に終了すると、Amazon GameLift Streams はこのローカルキャッシュをパッケージ化してアップロードします。

  2. レプリケーション – Amazon GameLift Streams は、シェーダーキャッシュをストリームグループのすべてのストリーミング場所にレプリケートします。ListApplicationShaderCaches API オペレーションを使用してレプリケーションステータスをモニタリングできます。

  3. 消費 – Amazon GameLift Streams は、シェーダーキャッシュを自動的にダウンロードし、同じアプリケーションの後続のすべてのストリームセッションに適用します。シェーダーキャッシュは、互換性のあるすべての関連ストリームグループとストリーミングロケーションで使用されます。この動作はデフォルトでオンになっています。

シェーダーキャッシュのキャプチャ

シェーダーキャッシュをキャプチャするには、次の手順に従います。

  1. StartStreamSession API オペレーションを使用してストリームセッションを開始します。リクエストで、StartStreamSession を呼び出すときに、 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTUREを に設定して追加の環境変数1として含めます。

    { "AdditionalEnvironmentVariables": { "GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE": "1" } }
  2. セッション中に通常どおりにアプリケーションを使用します。

  3. 完了したら、組み込みメニューから、または他の組み込み終了コマンドを使用して、アプリケーションを適切に終了します。これにより、シェーダーキャッシュを収集できる状態になります。

  4. 終了すると、Amazon GameLift Streams はコンパイルされたシェーダーキャッシュをパッケージ化し、互換性のあるすべての関連ストリームグループのすべてのストリーミングロケーションへのレプリケーションを開始します。

ヒント

ゲームアプリケーションでは、さまざまな環境、コンテンツ、レベルを移動すると、追加のシェーダーデータが生成されます。キャプチャ中にカバーするアプリケーションが多いほど、シェーダーキャッシュカバレッジはより包括的になります。カバレッジを改善することで、今後のセッションでシェーダーの処理時間をさらに短縮できます。

重要

TerminateStreamSession API オペレーションを使用してセッションを終了しないでください。アプリケーションに出口が組み込まれていない場合は、 ストリームセッション管理シェル機能を使用してリモートログインします。次に、アプリケーションがアイドル状態であり、新しいコンテンツをレンダリングしていないことを確認したら、アプリケーションプロセスを停止します。

シェーダーキャッシュを生成したら、 を GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTUREに設定してさらにセッションを開始することで改善できます1。これらのセッションは、既存のシェーダーキャッシュで始まり、更新されたバージョンを生成します。

シェーダーキャッシュのサイズ制限

10 KB 未満または 4 GB を超えるシェーダーキャッシュ (非圧縮) は拒否されます。

シェーダーキャッシュワークフロー

既存の Amazon GameLift Streams アプリケーションのシェーダーキャッシュを生成すると、互換性のあるすべての関連ストリームグループが自動的に使用を開始します。

本稼働セッションに影響を与える前にシェーダーキャッシュをテストするには、次のアプローチをお勧めします。

  1. 別のアプリケーションを作成します。

  2. そのアプリケーションのシェーダーキャッシュを収集します。

  3. 新しいストリームセッションを使用して結果を確認します。

  4. 本番稼働用セットアップで アプリケーションを使用します。

シェーダーキャッシュレプリケーション

キャプチャが成功すると、Amazon GameLift Streams は、アプリケーションの互換性のある関連ストリームグループ内のすべてのアクティブなストリーミング場所でシェーダーキャッシュを自動的に使用可能にします。このレプリケーションプロセスは、通常数分以内に完了します。

ListApplicationShaderCaches API オペレーションを使用してレプリケーションの進行状況をモニタリングできます。シェーダーキャッシュStatusフィールドは、ストリームグループのすべての場所における集約ステータスを示します。可能なステータスは次のとおりです。

ステータス 説明
INITIALIZED Amazon GameLift Streams はリクエストを受け取り、シェーダーキャッシュを準備しています。
PROCESSING Amazon GameLift Streams は、関連するストリームグループのストリーミング場所にシェーダーキャッシュをレプリケートしています。
READY シェーダーキャッシュはレプリケートされ、ストリームセッションで使用できます。
ERROR シェーダーキャッシュの処理中にエラーが発生しました。新しいシェーダーキャッシュを作成して、もう一度試してください。
DELETING Amazon GameLift Streams はシェーダーキャッシュを削除しています。

ステータスが の場合READY、シェーダーキャッシュはアプリケーションのすべての新しいストリームセッションに自動的に適用されます。

新しくプロビジョニングされたストリーム容量は、シェーダーキャッシュをすぐに受け取ります。既存のストリームグループの容量は、新しいシェーダーキャッシュを取得するまでに最大 1 時間かかる場合があります。

シェーダーキャッシュの消費を無効にする

デフォルトでは、Amazon GameLift Streams はアプリケーションを起動する前にシェーダーキャッシュをダウンロードして適用します。特定のセッションでこの動作を無効にするには、次の環境変数を設定します。

{ "AdditionalEnvironmentVariables": { "GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_IGNORE": "1" } }

既存のシェーダーキャッシュを改善するには、 のみを指定しますGAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE。既存のキャッシュを破棄し、まったく新しいキャッシュを収集するには、 GAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_IGNOREと の両方を指定しますGAMELIFT_STREAMS_PACKAGED_SHADER_CACHE_CAPTURE

シェーダーキャッシュの互換性

アプリケーションを複数のストリームグループに関連付けることができます。アプリケーションが現在関連付けられているストリームグループを確認するには、GetApplication API オペレーションを使用して AssociatedStreamGroupsフィールドを確認します。

関連付けられたすべてのストリームグループが、収集されたシェーダーキャッシュと必ずしも互換性があるわけではありません。ListApplicationShaderCaches API オペレーションを使用して、互換性のある関連ストリームグループを特定できます。レスポンスでは、 AssociatedStreamGroupsフィールドには、シェーダーキャッシュと互換性のある関連するストリームグループのみが含まれます。

グラフィックハードウェアとドライバーは、システムがシェーダープログラムをコンパイルする方法を決定します。このため、キャッシュは異なるハードウェアおよびソフトウェア設定間で転送できません。Amazon GameLift Streams では、シェーダーキャッシュの互換性は、キャプチャ中に使用されるストリームグループのプロパティによって決まります。

  • 基盤となるグラフィックスハードウェア (GPU) の正確なモデル

  • インストールされた GPU ドライバーのバージョン

実際には、これは Amazon GameLift Streams シェーダーキャッシュに次の互換性制限があることを意味します。

  • シェーダーキャッシュは、異なる GPU ハードウェアを使用するストリームクラス間で互換性がありません。つまり、異なる世代のストリームクラスです。たとえば、 gen5n_highおよび gen6n_high ストリームクラスは互換性がありませんが、 gen6n_highおよび gen6n_ultraは互換性があります。同様に、 gen6n_progen6e_pro も互換性がありません。

  • シェーダーキャッシュは、異なる GPU ドライバーバージョンがインストールされているストリームグループ間で互換性がありません。ストリームグループは、存続期間中同じ GPU ドライバーバージョンを使用しますが、新しく作成されたものは更新されたバージョンを受け取る可能性があります。新しいストリームグループの Amazon GameLift Streams で現在利用可能な GPU ドライバーのバージョンの詳細については、「」を参照してくださいGPU ドライバーのバージョン

  • シェーダーキャッシュは、Windows、、Linuxランタイム間で互換性がありませんProton。

Amazon GameLift Streams は、この互換性を自動的に決定し、収集されたシェーダーキャッシュを互換性のあるセッションでのみ使用します。

例: 異なる世代のストリームクラス

アプリケーションは 2 つのストリームグループに関連付けられています。

  • 最初のストリームグループがストリームクラスを使用する gen5n_high

  • 2 番目のストリームグループがストリームクラスを使用する gen6n_high

同じシェーダーキャッシュは、これら 2 つの異なる世代のストリームグループ間で互換性がありません。両方のストリームグループをサポートするには、ストリームクラスごとに個別のシェーダーキャッシュを生成します。

例: 異なる GPU ドライバーのバージョン

ストリームクラスを使用するgen6n_highストリームグループがあり、そのためにシェーダーキャッシュを生成している。後で別のストリームグループを作成し、それでも同じストリームクラス を使用しますgen6n_high

この新しいストリームグループは、別の最新の GPU ドライバーバージョンを使用するようになりました。ListApplicationShaderCaches を使用すると、新しいストリームグループが にリストされていないことがわかりますAssociatedStreamGroups。したがって、既存のシェーダーキャッシュは新しいストリームグループと互換性がありません。新しいストリームグループを使用して新しいシェーダーキャッシュを生成します。

シェーダーキャッシュの問題のトラブルシューティング

  • ListApplicationShaderCaches はステータス ERROR を表示します – シェーダーキャッシュ処理中にエラーが発生しました。新しいシェーダーキャッシュを作成して、もう一度試してください。

  • ListApplicationShaderCaches は新しいシェーダーキャッシュを一覧表示しません

    • シェーダーキャッシュが小さすぎるか大きすぎて収集できません。

    • アプリケーションが正常に終了しませんでした。

    • 収集中にエラーが発生しました。

    新しいシェーダーキャッシュを作成して、もう一度試してください。