(57)【要約】  電子ゲームサーバは、現在のゲーム状態で作動するゲームセッション中に、遠隔地に位置するゲームコントローラから入力イベントを受信し、当該入力イベントは、当該ゲームセッション中に当該ゲームコントローラとのユーザ対話によって生成された第１のコマンドを含み、当該ユーザ対話中に遠隔地で表示される第１のフレームを決定し、当該第１のフレームは、当該サーバが当該入力イベントを受信する前にゲームセッション中にサーバによって送信される複数の出力フレームのうちの１つであり、当該第１のフレームに関連付けられる第１のゲーム状態を決定し、当該第１のゲーム状態は、現在のゲーム状態の前のゲーム状態であり、当該第１のコマンドに従って出力されたゲームプレイと第１のゲーム状態とを処理し、当該ゲームプレイ出力に基づいて応答フレームをレンダリングし、当該遠隔地で表示するための応答フレームを送信する。
2021509838.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
各々がそれぞれのリソースプロファイルを有する複数の仮想マシンを備えるサーバシステムにおいて、
リアルタイムの対話型ゲームセッションを確立するための要求をクライアント装置から受信することを備え、前記要求は、クライアント装置とのネットワーク接続を通じて受信され、
クライアント装置に関連付けられた出力装置の装置能力を決定することと、
前記ネットワーク接続の接続能力を決定することと、
前記装置能力および前記接続能力に基づいて、前記リアルタイムの対話型ゲームセッションの１つまたは複数の目標品質パラメータを決定することと、
前記１つまたは複数の目標品質パラメータに基づいて、前記複数の仮想マシンのうちの第１の仮想マシンを選択することと、
前記クライアント装置との前記リアルタイムの対話型ゲームセッションを確立することと、
前記リアルタイムの対話型ゲームセッションに、前記第１の仮想マシンのリソースプロファイルに従って、前記クライアント装置からの入力を処理し、リアルタイムの対話型ゲームセッション内で処理された入力に従ってゲームプレイ出力を生成するために複数リソースを提供することとを備える、方法。
【請求項２】
前記出力装置の装置能力は、前記出力装置におけるディスプレイ出力の最大解像度、または、前記出力装置におけるディスプレイ出力の最大フレームレート、のうちの１つ以上を含む、請求項１に記載の方法。
【請求項３】
前記ネットワーク接続の接続能力は、前記ネットワーク接続の帯域幅または、前記ネットワーク接続の遅延時間、のうちの１つまたは複数を含む、請求項１または２に記載の方法。
【請求項４】
前記１つまたは複数の目標品質パラメータは、前記出力装置に送信されるコンテンツの目標解像度、前記出力装置に送信されるコンテンツの目標フレームレート、および前記出力装置に送信されるコンテンツの目標遅延時間のうちの１つまたは複数を含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
入力を処理し出力を生成するための前記複数リソースは、前記サーバシステムにおけるグラフィカルプロセッサ帯域幅、前記サーバシステムにおける汎用プロセッサ帯域幅、前記サーバシステムにおけるグラフィカルメモリ、前記サーバシステムにおける汎用メモリ、前記サーバシステムにおける記憶容量、および前記サーバシステムにおける入出力チャネルのうちの１つまたは複数を備える、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記リアルタイムの対話型セッション内で入力を処理し出力を生成する複数リソースを提供することは、前記複数リソースのうちの１つまたは複数のそれぞれの部分を前記リアルタイムの対話型セッションに割り当てることを含む、請求項５に記載の方法。
【請求項７】
前記リアルタイムの対話型セッション内で入力を処理し出力を生成する複数リソースを提供することは、前記第１の仮想マシンの前記リソースプロファイルを前記複数リソースのうちの１つまたは複数のそれぞれの部分にマッピングすることを含む、請求項５に記載の方法。
【請求項８】
前記第１の仮想マシンを選択することは、
前記１つまたは複数の目標品質パラメータを、前記複数の仮想マシンのそれぞれのリソースプロファイル内の対応するパラメータと比較することと、
前記１つまたは複数の目標品質パラメータに最も密接に一致するパラメータを含むリソースプロファイルを決定することと、
前記第１の仮想マシンとして、前記１つまたは複数の目標品質パラメータに最も密接に一致するパラメータを有するリソースプロファイルを有する仮想マシンを選択することとを含む、請求項１〜７のいずれかに記載の方法。
【請求項９】
前記第１の仮想マシンを選択することは、
前記１つまたは複数の目標品質パラメータを、前記複数の仮想マシンのそれぞれのリソースプロファイル内の対応するパラメータと比較することと、
前記１つまたは複数の目標品質パラメータ以上のパラメータを有するリソースプロファイルを有する１つまたは複数の仮想マシンを仮想マシン候補として選択することと、
最もリソース集約でないリソースプロファイルを有する仮想マシン候補を前記第１の仮想マシンとして選択することとを含む、請求項１〜８のいずれかに記載の方法。
【請求項１０】
前記第１の仮想マシンを選択することは、前記第１の仮想マシンを前記リアルタイムの対話型セッションと関連付けることを含み、前記リアルタイムの対話型セッションを確立することは、前記第１の仮想マシンのリソースプロファイルに従って、前記リアルタイムの対話型セッションにリソースを割り当てることを含む、請求項１〜９のいずれかに記載の方法。
【請求項１１】
ネットワーク接続特性に変化があるとしても、その変化に関係なく、前記第１の仮想マシンと前記リアルタイムの対話型セッションとの関連付けを維持することをさらに含む、請求項１０に記載の方法。
【請求項１２】
所定の期間の間、前記第１の仮想マシンと前記リアルタイムの対話型セッションとの関連付けを維持することをさらに含む、請求項１０に記載の方法。
【請求項１３】
所定の期間の後、および／または所定の閾値を超えるネットワーク接続特性の変化を検出したときに、前記第１の仮想マシンの選択を再評価することをさらに含む、請求項１０に記載の方法。
【請求項１４】
複数の仮想マシンと、
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによる実行のための１つまたは複数のプログラムを記憶するメモリとを備え、前記１つまたは複数のプログラムは、請求項１〜１３のいずれかに記載の方法を実行するための命令を含む、電子サーバ。
【請求項１５】
１つまたは複数のプログラムを格納する非一時的なコンピュータ可読記憶媒体であって、前記１つまたは複数のプログラムは命令を含み、１つまたは複数のプロセッサを有する電子サーバによって実行されると、前記電子サーバに請求項１〜１３のいずれかに記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【請求項１６】
ゲームプレイ処理を制御する方法であって、
１つまたは複数のプロセッサと、前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリとを有する電子ゲームサーバにおいて、
現在のゲーム状態で動作するゲームセッション中に、遠隔地に位置するゲームコントローラから入力イベントを受信することを備え、前記入力イベントは、前記ゲームセッション中に前記ゲームコントローラとのユーザ対話によって生成される第１のコマンドを含み、前記方法は、さらに、
前記ユーザ対話中に遠隔地で表示される第１のフレームを決定することを備え、前記第１のフレームは、前記サーバが前記入力イベントを受信する前に前記ゲームセッション中に前記サーバによって送信される複数の出力フレームのうちの１つを含み、前記方法は、さらに、
前記第１のフレームに関連付けられる第１のゲーム状態を決定することを備え、前記第１のゲーム状態は、前記現在のゲーム状態の前のゲーム状態であり、
（ｉ）前記第１のコマンドと（ｉｉ）前記第１のゲーム状態とに従って、ゲームプレイ出力を処理することと、
前記ゲームプレイ出力に基づいて応答フレームをレンダリングすることと、
遠隔地で表示するための応答フレームを送信することと、を含む、方法。
【請求項１７】
前記第１のゲーム状態を決定することは、
前記第１のフレームに関連関連づけられたゲーム時間インデックスを決定することと、
前記第１のフレームに関連付けられたゲーム時間指標に対応する時間に存在したゲーム状態を決定することと、を含む、請求項１６に記載の方法。
【請求項１８】
ゲームプレイ出力を処理することは、
前記入力イベントを、当該入力イベントおよびゲーム状態に基づいてゲームプレイ出力を決定するゲームエンジンに入力することを含み、アルゴリズムは、プレイされている特定のゲームに基づく、請求項１６〜１７のいずれかに記載の方法。
【請求項１９】
前記応答フレームをレンダリングすることは、
前記ゲームプレイ出力に従って、（ｉ）新しい仮想オブジェクトを導入すること、または（ｉｉ）既存の仮想オブジェクトを修正することと、
前記応答フレーム内に前記新しい仮想オブジェクトまたは前記修正された既存の仮想オブジェクトを含めることと、
前記新たなまたは修正された仮想オブジェクトに従って後続のゲーム状態を更新することとを含む、請求項１６〜１８のいずれかに記載の方法。
【請求項２０】
前記現在のゲーム状態は、前記ユーザ対話の時に前記ユーザによって意図されたゲーム状態と矛盾するゲームシーンを示す第２のフレームに関連付けられており、
前記ゲームプレイ出力を処理することは、前記現在のゲーム状態を、前記ユーザ対話の時に当該ユーザによって意図されたゲーム状態に調整することを含む、請求項１６〜１９のいずれかに記載の方法。
【請求項２１】
前記現在のゲーム状態を前記ユーザ対話の時に前記ユーザによって意図されたゲーム状態に調整することは、前記現在のゲーム状態を示すフレームを修正して、前記意図されたゲーム状態を示す後続フレームを作成することを含む、請求項２０に記載の方法。
【請求項２２】
前記ゲームセッション中に前記サーバにおいて、前記遠隔地に位置するメディア装置から複数の表示イベントを受信することをさらに含み、各表示イベントは、遠隔地で表示されたそれぞれのフレームに対するフレーム識別データを含み、
前記ユーザ対話中に遠隔地で表示された前記第１のフレームを決定することは、
複数の表示イベントのうちのどれが入力イベントに時間的に最も近く受信されたかを決定することと、
前記最も近く受信された表示イベントに含まれるフレーム識別データに基づいて、前記最も近く受信された表示イベントに関連付けられるフレームを前記第１のフレームとして識別することとを含む、請求項１６〜２１のいずれか一項に記載の方法。
【請求項２３】
前記入力イベントは、前記ユーザ対話のタイミングを示す第１のタイムスタンプをさらに含み、
前記ユーザ対話中に遠隔地で表示されるた前記第１のフレームを決定することは、
前記サーバにおいて、前記受信した入力イベントに第２のタイムスタンプを割り当てることを含み、前記第２のタイムスタンプは、前記サーバでの受信時間を示し、
前記第１のタイムスタンプと第２のタイムスタンプとの比較に基づいて、前記コントローラから前記サーバへの前記入力イベントの一方向の通過時間を決定することと、
前記コントローラから前記サーバへの前記入力イベントの前記決定された一方向の通過時間に基づいて、前記サーバから遠隔地に位置するメディア装置への一方向の通過時間を近似することと、
前記サーバから前記メディア装置への、前記近似された一方向の通過時間に従って、前記サーバが前記メディア装置に以前に送信したフレームを、前記第１のフレームとして特定することとを含む、請求項１６〜２２のいずれかに記載の方法。
【請求項２４】
前記入力イベントは、前記ユーザ対話のタイミングを示す第１のタイムスタンプをさらに含み、
前記ユーザ対話中に前記遠隔地で表示される前記第１のフレームを決定することは、
前記応答フレームのメタデータに前記第１のタイムスタンプを含めることと、
前記第１のタイムスタンプを有する前記応答フレームを、コントローラからメディア装置までの遅延時間決定において使用するために、遠隔地に位置するメディア装置に送信することとを含む、請求項１６〜２３のいずれかに記載の方法。
【請求項２５】
前記入力イベントを受信する前に、
出力フレームをレンダリングすることと、
前記出力フレームのメタデータに、前記出力フレームの描画タイミングまたは送信タイミングを示す第１のタイムスタンプを含めることと、
前記第１のタイムスタンプを有する前記出力フレームを、一方向のサーバからメディア装置までの遅延時間決定において使用するために、遠隔地に位置するメディア装置に送信することと、をさらに備え、
前記ユーザ対話中に遠隔地で表示される前記第１のフレームを決定することは、
前記サーバにおいて、前記遠隔地に位置する前記メディア装置から表示イベントを受信することを備え、前記表示イベントは、前記一方向のサーバからメディア装置までの遅延時間決定に基づく一方向のサーバからメディア装置までの遅延時間の値を含み、さらに、
前記決定された一方向のサーバからメディア装置遅延時間の値に基づいて、前記出力フレームを第１のフレームとして識別することを備える、請求項１６〜２４のいずれかに記載の方法。
【請求項２６】
入力イベントを受信する前に、
出力フレームをレンダリングすることと、
出力フレームのメタデータに、当該出力フレームの描画タイミングまたは送信タイミングを示す第１のタイムスタンプを含めることと、
第１のタイムスタンプを有する出力フレームを前記遠隔地に位置するメディア装置に送信することとを備え、
前記ユーザ対話中に遠隔地で表示される第１のフレームを決定することは、
前記サーバにおいて、遠隔地に位置するメディア装置から表示イベントを受信することを含み、前記表示イベントは、第１のタイムスタンプと第２のタイムスタンプとを含み、前記第２のタイムスタンプは、前記出力フレームの表示タイミングを示し、
前記第１のタイムスタンプと前記第２のタイムスタンプとの比較に基づいて、一方向のサーバからメディア装置までの遅延時間値を決定することと、
前記決定された一方向のサーバからメディア装置までの遅延時間値に基づいて、前記出力フレームを第１のフレームとして識別することとを含む、請求項１６〜２５のいずれかに記載の方法。
【請求項２７】
入力イベントを受信する前に、
出力フレームをレンダリングすること、
前記出力フレームを第１の音声信号でタグ付けすることと、
前記出力フレームを第１の音声信号と共に遠隔地に位置するメディア装置に送信することと、
前記出力フレームの送信タイミングを第１のタイムスタンプに関連付けることとをさらに備え、
前記ユーザ対話中に遠隔地で表示される第１のフレームを決定することは、
前記ゲームコントローラからの入力イベントで、（ｉ）音声信号肯定応答を受信することを含み、前記音声信号肯定応答は、前記ゲームコントローラによる前記第１の音声信号の検出を遠隔地で確認し、かつ、（ｉｉ）第２タイムスタンプを受信することを含み、前記第２タイムスタンプは、前記コントローラから前記サーバへの入力イベントの送信タイミングを示し、
前記第１のタイムスタンプと前記第２のタイムスタンプとの比較に基づいて、一方向のサーバからコントローラまでの遅延時間値を決定することと、
前記サーバからコントローラまでの前記一方向のサーバからコントローラまでの遅延時間値と、往復時間（ＲＴＴ）遅延時間値と、の比較に基づいて、一方向のコントローラからサーバまでの遅延時間値を決定することと、
前記決定された一方向のコントローラからサーバまでの遅延時間値に基づいて、前記出力フレームを第１のフレームとして特定することとを含む、請求項１６〜２６のいずれかに記載の方法。
【請求項２８】
入力イベントを受信する前に、
出力フレームをレンダリングすること、
前記出力フレームを第１の画像パターンでタグ付けすることと、
前記第１の画像パターンを有する前記出力フレームを遠隔地に位置するメディア装置に送信することと、
前記出力フレームの送信タイミングを第１のタイムスタンプに関連付けることとをさらに備え、
前記ユーザ対話中に前記遠隔地で表示される第１のフレームを決定することは、
ゲームコントローラからの入力イベントで、（ｉ）画像パターン確認応答を受信することを含み、前記画像パターン確認応答は、前記ゲームコントローラによる第１の画像パターンの検出を遠隔地で確認し、かつ、（ｉｉ）第２のタイムスタンプを受信することを含み、前記第２のタイムスタンプは、前記コントローラから前記サーバへの入力イベントの送信タイミングを示し、
前記第１のタイムスタンプと前記第２のタイムスタンプとの比較に基づいて、一方向のサーバからコントローラまでの遅延時間値を決定することと、
前記一方向のサーバからコントローラまでの遅延時間値と、前記サーバと前記コントローラとの間の往復時間（ＲＴＴ）遅延時間値との比較に基づいて、一方向のコントローラからサーバまでの遅延時間値を決定することと、
決定された一方向のコントローラからサーバまでの遅延時間値に基づいて、前記出力フレームを第１のフレームとして特定することとを含む、請求項１６〜２７のいずれかに記載の方法。
【請求項２９】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶しているメモリとを備え、前記１つまたは複数のプログラムは、請求項１６〜２８のいずれかに記載の方法を実行するための命令を含む、電子ゲームサーバ。
【請求項３０】
１つまたは複数のプログラムを格納している非一時的なコンピュータ可読記憶媒体であって、前記１つまたは複数のプログラムは命令を含み、前記命令は前記１つまたは複数のプロセッサによって実行されると、前記電子ゲームサーバに請求項１６〜２８のいずれかに記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【請求項３１】
オンライン対話型ゲームセッションをレンダリングする方法であって、
１つまたは複数の処理コアと、前記１つまたは複数の処理コアによって実行するためのプログラムを記憶しているメモリとを含むサーバシステムにおいて、
オンラインゲームセッションに関連付けられた第１のクライアント装置から第１のコマンドを受信することと、
前記第１のコマンドのタイプと、前記第１のコマンドのタイプに関連付けられた第１の予想応答遅延時間とを決定することと、
ネットワーク遅延時間を決定することと、
前記ネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、第１の導入される遅延時間を決定することと、
所定のフレームレートで送信されるときに、前記第１の導入される遅延時間に対応する送信時間を占有する第１の数の中間フレームを生成することと、
前記第１のコマンドの初期結果を反映する第１の応答フレームを生成することと、
前記第１の応答フレームが第１の予想応答遅延時間に対応する時間において前記第１のクライアント装置に関連付けられた第１のメディア装置で受信されるように、所定のフレームレートで、前記第１の数の中間フレームに続いて、前記第１の応答フレームを送信することとを備える、方法。
【請求項３２】
前記オンラインゲームセッションのネットワーク特性に従って、前記所定のフレームレートを決定することと、
前記第１とは異なる後続のネットワーク遅延時間を決定すると、前記所定のフレームレートを維持することとをさらに備える、請求項３１に記載の方法。
【請求項３３】
前記第１のコマンドに従って後続のゲーム状態を更新することをさらに備え、前記後続のゲーム状態は、前記第１の応答フレームに最初に反映される、請求項３１または３２のいずれかに記載の方法。
【請求項３４】
前記第１の数の中間フレームを決定することは、
前記ネットワーク遅延時間に基づいて、応答フレームの予測到着時間を決定することと、
前記予想される応答遅延時間に基づいて、応答フレームの目標到着時間を決定することと、
デルタ時間を得るために、前記予想到着時間を前記目標到着時間と比較することと
前記デルタ時間に所定のフレームレートを乗じることとを含む、請求項３１〜３３のいずれかに記載の方法。
【請求項３５】
前記中間フレームの第１の数を決定することは、前記導入される遅延時間に前記所定のフレームレートを乗じることを含む、請求項３１〜３４のいずれかに記載の方法。
【請求項３６】
前記サーバ上で前記第１のコマンドを実行することに関連付けられる処理遅延時間を決定することをさらに備え、前記第１の導入される遅延時間はさらに、前記処理遅延時間に基づいている、請求項３１〜３５のいずれかに記載の方法。
【請求項３７】
前記ネットワーク遅延時間を決定することは、（ｉ）第１のクライアント装置と前記サーバとの間の往復通信遅延時間、および／または、（ｉｉ）前記サーバと前記第１のメディア装置との間の往復通信遅延時間を決定することを含む、請求項３１〜３６のいずれかに記載の方法。
【請求項３８】
前記ネットワーク遅延時間を決定することは、（ｉ）前記第１のクライアント装置と前記サーバとの間の一方向の通信遅延時間、および／または、（ｉｉ）前記サーバと前記第１のメディア装置との間の一方向の通信遅延時間を決定することを含む、請求項３１〜３７のいずれかに記載の方法。
【請求項３９】
前記第１のクライアント装置から第２のコマンドを受信することをさらに備え、前記第２のコマンドの種類は、前記第１のコマンドの種類とは異なり、前記方法は、
前記第２のコマンドのタイプに関連付けられる第２の予想応答遅延時間を決定することをさらに備え、前記第２の予想応答遅延時間は、前記第１の予想応答遅延時間とは異なり、前記方法は、
更新されたネットワーク遅延時間を決定することと、
前記更新されたネットワーク遅延時間と前記第２の予想遅延時間との比較に基づいて、第２の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第２の導入される遅延時間に対応する送信時間を占有する第２の数の中間フレームを生成することと、
前記第２のコマンドの初期結果を反映する第２の応答フレームを生成することと、
前記第２の予想応答遅延時間に対応する時間に前記第２の応答フレームが前記第１のメディア装置で受信されるように、前記所定のフレームレートで、前記第２の数の中間フレームに続いて前記第２の応答フレームを送信することとをさらに備える、請求項３１〜３８のいずれかに記載の方法。
【請求項４０】
第２のクライアント装置から、前記第１のコマンドのタイプと同等のタイプの第３のコマンドを受信することと、
前記第３のコマンドを第１の予想応答遅延時間と関連付けることと、
前記第２のクライアント装置に関連付けられたネットワーク遅延時間が前記第１のクライアント装置に関連付けられたネットワーク遅延時間とは異なることを判定することと、
前記第２のクライアント装置に関連付けられたネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、前記第１の導入される遅延時間とは異なる第３の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第３の導入される遅延時間に対応する送信時間を占有する、前記第１の数の中間フレームとは異なる第３の数の中間フレームを生成することと、
前記第３のコマンドの初期結果を反映する第３の応答フレームを生成することと、
前記第３の応答フレームが前記第１の予想応答遅延時間に対応する時間に第２のメディア装置で受信されるように、前記所定のフレームレートで、前記第３の数の中間フレームに続いて、前記第３の応答フレームを送信することとをさらに備える、請求項３１〜３９のいずれかに記載の方法。
【請求項４１】
前記第１のクライアント装置から、前記第１のコマンドのタイプと同等のタイプの第４のコマンドを受信することと、
前記第４のコマンドと第１の予想応答遅延時間とを関連付けることと、
現在のネットワーク遅延時間が、前記第１のコマンドに関連付けられたネットワーク遅延時間と異なるということを判定することと、
前記更新されたネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、前記第１の導入される遅延時間とは異なる第４の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第４の導入される遅延時間に対応する送信時間を占有する、前記第１の数の中間フレームとは異なる第４の数の中間フレームを生成することと、
前記第４のコマンドの初期結果を反映する第４の応答フレームを生成することと、
前記第４の応答フレームが前記第１の予想応答遅延時間に対応する時間に前記第１のメディア装置で受信されるように、前記所定のフレームレートで、前記第４の数の中間フレームに続いて、前記第４の応答フレームを送信することとをさらに備える、請求項３１〜４０のいずれかに記載の方法。
【請求項４２】
前記オンラインゲームセッションに関連付けらっれるする第２のクライアント装置に関連付けられる第２のネットワーク遅延時間を決定することと、
前記第２のネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、第５の導入される遅延時間を決定することと、
前記第２のクライアント装置に関連付けられる所定のフレームレートで送信されるときに前記第５の導入される遅延時間に対応する送信時間を占有する第５の数の中間フレームを決定することと、
前記第５の数の中間フレームが前記第１の数の中間フレームよりも高いという判定に従って、
前記第５の数の中間フレームが生成されるまで、１つまたは複数の追加の中間フレームを生成することと、
前記第１のコマンドの初期結果を反映する第５の応答フレームを生成することと、
前記第５の応答フレームが第１の予想応答遅延時間に対応する時間で第２のクライアント装置に関連付けられるメディア装置で受信されるように、前記第２のクライアント装置に関連付けられる前記所定のフレームレートで、前記第１の数の中間フレームに続いて、前記１つまたは複数の追加の中間フレームに続いて、前記第５の応答フレームを送信することとを含む、請求項３１〜４１のいずれかに記載の方法。
【請求項４３】
前記第５の数の中間フレームが前記第１の数の中間フレームより小さいという判定に従って、
前記第１のコマンドの初期結果を反映する第６の応答フレームを生成することと、
前記第５の応答フレームが前記第１の予想応答遅延時間に対応する時間で第２のクライアント装置に関連付けられたメディア装置で受信されるように、前記第２のクライアント装置に関連付けられた所定のフレームレートで、前記第５の数の中間フレームに対応する前記第１の数の中間フレームのサブセットを前記第５の応答フレームに続いて送信することとをさらに備える、請求項４２に記載の方法。
【請求項４４】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶しているメモリとを備え、前記１つまたは複数のプログラムは、請求項３１〜４３のいずれかに記載の方法を実行するための命令を含む、電子ゲームサーバ。
【請求項４５】
１つまたは複数のプログラムを格納する非一時的なコンピュータ可読記憶媒体であって、前記１つまたは複数のプログラムは命令を含み、前記命令は、前記１つまたは複数のプロセッサを有する電子ゲームサーバによって実行されると、前記電子ゲームサーバに請求項３１〜４３のいずれかに記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【請求項４６】
方法であって、
１つまたは複数のプロセッサと、前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶しているメモリとを有するサーバシステムにおいて、
第１のクライアント装置とのリアルタイムの対話型ゲームセッションを確立することを含み、前記ゲームセッションは特定のゲームタイプに関連付けられており、前記方法は、
前記ゲームセッション中に前記第１のクライアント装置のユーザに関連付けられるゲーム内パフォーマンスデータを監視することと、
前記ゲーム内パフォーマンスデータに従って前記第１のクライアント装置のユーザのゲームプレイ体験許容レベルを決定することと、
前記ゲームプレイ体験許容レベルに基づいて、ゲームセッションリソースを調整することとと含み、前記ゲームセッションリソースは、フレームレート、解像度、遅延時間レベル、またはストリーミングソースを含む、方法。
【請求項４７】
ゲーム内パフォーマンスデータを監視することは、前記第１のクライアント装置のユーザのスキルレベルを決定することと、前記スキルレベルを他のクライアント装置の複数のユーザを表す平均スキルレベルと比較することとを含む、請求項４６に記載の方法。
【請求項４８】
ゲーム内パフォーマンスデータを監視することは、１つまたは複数の所定のゲーム固有のゲームプレイパフォーマンスベンチマークに関してゲームプレイパフォーマンスを評価することを含む、請求項４６から４７のいずれかに記載の方法。
【請求項４９】
ゲーム内パフォーマンスデータを監視することは、対話応答データを監視することを含み、前記対話応答データは、レンダリングされた刺激と前記第１のクライアント装置から受信された対応するゲームプレイ入力との間の時間を表す、請求項４６から４８のいずれか一項に記載の方法。
【請求項５０】
ゲーム内パフォーマンスデータを監視することは、コントローラ対話データを監視することを含み、前記コントローラ対話データは、ゲームコントローラのその後のユーザ操作の間の時間を表す、請求項４６〜４９のいずれかに記載の方法。
【請求項５１】
ゲームプレイ体験許容レベルを割り当てることは、前記特定のゲームタイプにさらに従う、請求項４６〜５０のいずれかに記載の方法。
【請求項５２】
ゲームプレイ体験許容レベルを割り当てることは、ゲームセッションリソースに関するユーザ嗜好データにさらに従う、請求項４６〜５１のいずれか一項に記載の方法。
【請求項５３】
前記ユーザ嗜好データは、前記ユーザによって報告されるか、または、前記ゲーム内パフォーマンスデータから推測される、請求項５２に記載の方法。
【請求項５４】
前記ゲームプレイ体験許容レベルは、前記第１のクライアント装置のユーザに関連付けられ知覚されるゲームプレイ体験に対して、閾値未満の影響量を有すると決定された最小フレームレートを表し、前記ゲームセッションリソースを調整することは、前記フレームレートを最小レベルに設定することを含む、請求項４６〜５３のいずれかに記載の方法。
【請求項５５】
前記ゲームプレイ体験許容レベルは、前記第１のクライアント装置のユーザに関連付けられ知覚されるゲームプレイ体験に対して、閾値未満の影響量を有すると決定された最小解像度を表し、前記ゲームセッションリソースを調整することは、前記解像度を最小レベルに設定することを含む、請求項４６〜５４のいずれか一項に記載の方法。
【請求項５６】
前記ゲームプレイ体験許容レベルは、前記第１のクライアント装置のユーザに関連付けられ知覚されるゲームプレイ体験に対して、閾値未満の影響量を有すると決定された遅延時間の最大レベルを表し、前記ゲームセッションリソースを調整することは、前記遅延時間レベルを最大レベルに設定することを含む、請求項４６から５５のいずれかに記載の方法。
【請求項５７】
前記ゲームプレイ体験許容レベルは、前記第１のクライアント装置のユーザに関連付けられ知覚されるゲームプレイ体験に対して、閾値未満の影響量を有すると決定された、特定のフレームレート、特定の解像度、および／または、特定の遅延時間レベルを表し、前記ゲームセッションリソースを調整することは、現在のストリーミングソースから、前記特定のフレームレート、特定の解像度、および／または、特定の遅延時間レベルに最適化された異なるストリーミングソースに切り替えることを含む、請求項４６から５６のいずれかに記載の方法。
【請求項５８】
前記ゲームセッションリソースを調整することに続いて、
前記第１のクライアント装置に関連付けられるゲーム内パフォーマンスデータを監視することと、
ゲーム内パフォーマンスデータの変化が所定の閾値を超えるか否かを判定することと、
ゲーム内パフォーマンスデータの変化が前記所定の閾値を超えたという判定に応じて、前記ゲーム内パフォーマンスデータに従って、ゲームプレイ体験許容レベルを前記第１のクライアント装置に再割り当てすることと、
前記再割り当てされたゲームプレイ体験許容レベルに基づいて、前記ゲームセッションリソースを再調整することとをさらに備える、請求項４６〜５７のいずれか記載の方法。
【請求項５９】
電子サーバであって、
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶しているメモリとを備え、前記１つまたは複数のプログラムは、請求項４６〜５８のいずれかに記載の方法を実行するための命令を含む、電子サーバ。
【請求項６０】
１つまたは複数のプログラムを格納している非一時的なコンピュータ可読記憶媒体であって、前記１つまたは複数のプログラムは命令を含み、前記命令は、前記１つまたは複数のプロセッサを有する電子サーバによって実行されると、前記電子サーバに請求項４６〜５８のいずれかに記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、概して、１つまたは複数のリアルタイムユーザ対話型アプリケーションに対応するオンライン対話型セッションをサポートするためにサーバシステムを管理するための方法およびシステムを含むが、これらに限定されないコンピュータ技術に関する。
【背景技術】
【０００２】
インターネット接続された電子装置は、様々なクラウドベースのメディアおよびエンターテインメントアプリケーションをサポートすることができる。これらのアプリケーションは、サーバがコンテンツをユーザ装置にストリーミングするメディアストリーミングアプリケーション、ユーザがユーザ装置からサーバ上で実行するゲームと対話するゲームアプリケーション、ならびに多数のユーザが互いに同時に、およびそれらのインターネット接続された装置を介してクラウドで主催（host）されたコンテンツおよびアプリケーションと対話することを可能にする様々なソーシャルメディアおよび通信アプリケーションを含む。クラウドベースのアプリケーションの中でも、クラウドゲームは、ゲームタイトルのハードウェア要求が広く変化することと、（例えば、単一のプレイヤーによって、単一のロケーションにおける複数のプレイヤーによって、または複数のロケーションにおける複数のプレイヤーによって）クラウドベースのゲームをプレイすることができる多様なトポロジと、ゲームセッションを実行するゲームサーバへのプレイヤー入力、および、ゲームサーバからプレイヤーの装置／ディスプレイへのゲームセッション出力を、遅延時間なしで、かつ、確実に送信する必要性と、ゲームプレイの速度および応答性に関するプレイヤーの期待度が大きく変化すること、状況によっては、ほぼリアルタイムのゲームコンテンツを観客に提供するという要望により、いくつかの固有の課題を提示する。クラウドベースのゲームの他の課題は、プレイヤーがどこに位置しているか（例えば、サーバから近いかまたは遠いか）、（例えば、高速または低速インターネット接続を介して）ゲームサービスにどのように接続するか、ゲームをプレイするためにどのタイプの装置（例えば、パーソナル装置またはメディアストリーミング装置に接続されたメディア装置）を使用するか、または、ゲームプレイ出力を視聴するためにどのタイプの装置（例えば、汎用パーソナル装置または専用のゲームコントローラ）を使用するか（例えば、パーソナル装置またはメディアストリーミング装置に接続されたメディア装置）に関わらず、プレイヤーに一貫したゲームプレイ体験を提供することに関する。
【発明の概要】
【０００３】
特に、多種多様な入出力装置およびネットワーク接続を用いて、同じまたは異なる位置から同じゲームタイトルをプレイしている複数のプレイヤーについてを含む、許容可能な遅延時間および応答性でゲームを同時に実行することができる、複数のゲームタイトルに対する複数のゲームセッションをサポートするクラウドゲームシステムに対するニーズがある。さらに、ゲームセッションにおいてプレイヤー入力（例えば、エンドユーザゲーム装置／コントローラ上で入力されるゲーム入力）を受信すると、ユーザ入力を迅速に処理し、すべてのゲームプレイヤーに対するプレイヤー入力アクションの結果を反映する高精細な画像を同時に許容可能な遅延時間で出力するクラウドゲームシステムに対する要求がある。また、状況によっては、観客がそれぞれのディスプレイ装置上でゲームプレイをリアルタイムに追跡することを可能にするゲームプレイアクティビティの高精細な映像ストリームを提供するゲームシステムに対する要求がある。したがって、同じ場所に集められた複数ユーザによる自発的ゲームプレイから、異なる場所からの複数のユーザによるオンライン対話型ゲームプレイまで、広範囲のゲーム設定においてゲーム体験を拡張するための効率的なゲーム処理および出力メカニズムを有するクラウドゲームシステムを提供することが有益であろう。
【課題を解決するための手段】
【０００４】
概要
本明細書で説明する実施形態は、サードパーティゲームコンテンツの効率的で、携帯可能で、かつ、低遅延時間ホストを可能にするためのゲームアプリケーションプログラミングインターフェイス（ＡＰＩ）およびクラウドプラットフォームを提供することに向けられている。ある実施形態は、クラウドゲームハードウェアリソースを動的に割り当て、個々のエンドユーザに利用可能なネットワーク帯域幅を監視および利用して、最適なクラウドゲーム経験を提供する。ある実施形態は、高精細なメディア出力およびエンドユーザストリームを有する高性能リアルタイムゲームセッションをサポートする層を含む、複数の性能層を提供する。ある実施形態は、異なるサブスクリプションモデルをサポートし、および／または、１つもしくは複数の実際のゲームストリーム（例えば、映像ストリームモバイルアプリまたはブラウザベースのプログラムのいずれかを介してオンライン／クラウドゲームセッションに参加しているユーザのクライアント装置への映像ストリーム出力）に対する遅延時間が殆どまたは全くない１つもしくは複数の同時のリアルタイムゲームプレイおよび／またはレビューメディアストリームを提供するように構成される。ある実施形態では、同時ゲームプレイおよび／またはレビュービデオは、ＹｏｕＴｕｂｅ（登録商標）などのメディアストリーミングサイトを介して、１人または複数のユーザに殆どまたは全く遅延時間なしで提供される。
【０００５】
本出願の一態様では、ゲームプレイ処理を制御する方法は、１つまたは複数のプロセッサと、１つまたは複数のプロセッサによって実行される１つまたは複数のプログラムを記憶するメモリとを含むサーバシステムにおいて実施される。本方法は、現在のゲーム状態で動作するゲームセッション中に、遠隔地に位置するゲームコントローラから入力イベントを受信することを含み、入力イベントは、ゲームセッション中にゲームコントローラとのユーザ対話によって生成された第１のコマンドを含み、当該方法は、ユーザ対話中に当該遠隔地で表示される第１のフレームを決定することを含み、第１のフレームは、サーバが入力イベントを受信する前にゲームセッション中にサーバによって送信される複数の出力フレームのうちの１つであり、当該方法は、第１のフレームに関連付けられる第１のゲーム状態を決定することを含み、第１のゲーム状態は、現在のゲーム状態の前のゲーム状態であり、当該方法は、（ｉ）第１のコマンドと（ｉｉ）第１のゲーム状態とに従って、ゲームプレイ出力を処理することと、ゲームプレイ出力に基づいて応答フレームをレンダリングすることと、遠隔地で表示するための応答フレームを送信することとを含む。
【０００６】
本出願の別の態様では、オンライン対話型ゲームセッションをレンダリングする方法は、１つまたは複数の処理コアと、１つまたは複数の処理コアによって実行するためのプログラムを記憶するメモリとを含むサーバシステムにおいて実施される。本方法は、オンラインゲームセッションに関連付けられる第１のクライアント装置から第１のコマンドを受信することと、第１のコマンドのタイプと、第１のコマンドのタイプに関連付けられる第１の予想応答遅延時間とを決定することと、ネットワーク遅延時間を決定することと、ネットワーク遅延時間と第１の予想遅延時間との比較に基づいて第１の導入される遅延時間を決定することと、所定のフレームレートで送信されるとき、第１の導入される遅延時間に対応する送信時間を占有する第１の数の中間フレームを生成することと、第１のコマンドの初期結果を反映する第１の応答フレームを生成することと、第１の応答フレームが第１の予想応答遅延時間に対応する時間に第１のクライアント装置に関連付けられた第１のメディア装置で受信されるように、所定のフレームレートで、第１の数の中間フレームに続いて第１の応答フレームを送信することとを含む。
【０００７】
本出願の別の態様では、方法は、複数の仮想マシンを含むサーバシステムにおいて実施され、仮想マシンの各々は、それぞれのリソースプロファイルを有する。この方法は、リアルタイムの対話型ゲームセッションを確立するための要求をクライアント装置から受信することを含み、要求は、クライアント装置とのネットワーク接続を通じて受信され、クライアント装置に関連付けられた出力装置の装置能力を決定することと、ネットワーク接続の接続能力を決定することと、装置能力および接続能力に基づいて、リアルタイムの対話型ゲームセッションのための１つまたは複数の目標品質パラメータを決定することと、１つまたは複数の目標品質パラメータに基づいて、複数の仮想マシンのうちの第１の仮想マシンを選択することと、クライアント装置とのリアルタイムの対話型ゲームセッションを確立することと、リアルタイムの対話型ゲームセッションに、クライアント装置からの入力を処理し、リアルタイムの対話型ゲームセッション内で処理された入力に従ってゲームプレイ出力を生成するためのリソースを、第１の仮想マシンのリソースプロファイルに従って、提供することと、を含む。
【０００８】
本出願の別の態様では、方法は、１つまたは複数のプロセッサと、１つまたは複数のプロセッサによって実行される１つまたは複数のプログラムを記憶するメモリとを含むサーバシステムにおいて実施される。本方法は、第１のクライアント装置とのリアルタイムの対話型ゲームセッションを確立することを含み、ゲームセッションは、特定のゲームタイプに関連付けられており、ゲームセッション中に第１のクライアント装置のユーザに関連付けられたゲーム内パフォーマンスデータをモニタリングすることと、ゲーム内パフォーマンスデータに従って第１のクライアント装置のユーザのゲームプレイ体験の許容レベルを決定することと、ゲームプレイ体験の許容レベルに基づいて、ゲームセッションリソースを調整することと、を含み、ゲームセッションリソースは、フレームレート、解像度、遅延時間レベル、またはストリーミングソースを含む。
【０００９】
本出願のある態様によれば、サーバシステムは、サーバシステムに上述の方法のいずれかを実行させるための命令を記憶するメモリを含む。
【００１０】
さらに、本出願のある態様によれば、サーバシステムのメモリに格納された命令は、サーバシステムに上述の方法のいずれかを実行させるための命令を含む。
【００１１】
他の実施形態および利点は、本明細書の説明および図面に照らして当業者には明白であろう。
【００１２】
様々な記載される実施形態をよりよく理解するために、以下の図面と併せて、以下の実施形態の説明を参照するべきであり、図面全体を通して、同様の参照番号は対応する部分を指す。
【図面の簡単な説明】
【００１３】
【図１】ある実施形態に従う例示的なオンライン対話型ゲーム環境である。
【図２】ある実施形態に従うゲーム環境の例示的なクライアント装置を示すブロック図である。
【図３】ある実施形態に従うゲーム環境のメディア装置の例を示すブロック図である。
【図４】ある実施形態に従うゲーム環境の例示的なサーバを示すブロック図である。
【図５Ａ】ある実施形態に従う例示的なゲーム環境を示す。
【図５Ｂ】ある実施形態に従うゲームシナリオの例を示す。
【図５Ｃ】ある実施形態に従うゲームシナリオの例を示す。
【図６】ある実施形態に従うゲームプレイ処理のフロー図である。
【図７】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図８】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図９】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図１０】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図１１】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図１２】ある実施形態に従う様々なトリガフレーム決定処理のフロー図である。
【図１３】ある実施形態に従う遅延時間検出および補償処理のフロー図である。
【図１４Ａ】ある実施形態に従う応答時間設定の例示的なテーブルである。
【図１４Ｂ】ある実施形態に従う応答時間設定の例示的なテーブルである。
【図１４Ｃ】ある実施形態に従う例示的な装置／ネットワーク評価モジュールである。
【図１５】ある実施形態に従う例示的なオンライン対話型ゲーム環境である。
【図１６】ある実施形態に従うディスプレイ上にレンダリングされるフレームの例示的なシーケンスである。
【図１７】ある実施形態に従って導入される遅延時間を示す図である。
【図１８】ある実施形態に従って導入される遅延時間を示す図である。
【図１９Ａ】ある実施形態に従う例示的なオンライン対話型ゲーム環境である。
【図１９Ｂ】ある実施形態に従うオンライン対話型ゲーム環境の例示的なスクリーンショットを示す。
【図２０Ａ】ある実施形態に従う例示的なオンライン対話型ゲーム環境である。
【図２０Ｂ】ある実施形態に従うオンライン対話型ゲーム環境の例示的なスクリーンショットを示す。
【図２１】ある実施形態に従う遅延時間調整処理のフロー図である。
【図２２】ある実施形態に従うリソースレポジトリの実装例である。
【図２３】ある実施形態に従うリソース割り当て処理のフロー図である。
【図２４Ａ】ある実施形態に従うユーザ再生可能性プロファイルのためのレポジトリの実装例である。
【図２４Ｂ】ある実施形態に従うリソース設定の例示的なテーブルである。
【図２５】ある実施形態に従うリソース調整処理のフロー図である。
【発明を実施するための形態】
【００１４】
図面全体を通して、同様の参照番号は対応する部分を指す。
【００１５】
詳細な説明
本明細書で説明する実施形態は、第三者ゲームコンテンツを含むクラウドゲームコンテンツの効率的で携帯可能であり低遅延時間の主催を可能にするクラウドプラットフォームおよびＡＰＩを提供することに向けられている。ある実施形態は、クラウドゲームハードウェアリソース（例えば、ＣＰＵ、ＧＰＵ、メモリ、入出力、および映像ストリームエンコーダ）を動的に割り当て、個々のエンドユーザに利用可能なネットワーク帯域幅を監視および利用して、ゲームプレイヤーのコミュニティに最適なオンラインゲーム体験を同時に提供する。ある実施形態は、エンドユーザのための高精細メディアストリームを有する高性能リアルタイムゲームセッションをサポートする層を含む、複数の性能層を提供する。ある実施形態は、異なるサブスクリプションモデルをサポートし、および／または、１つもしくは複数の実際のゲームストリーム（例えば、映像ストリームモバイルアプリケーションまたはブラウザベースのプログラムのいずれかを介してオンライン／クラウドゲームセッションに参加しているユーザのクライアント装置に出力される映像ストリーム）に対する遅延時間が殆どまたは全くない１つもしくは複数の同時のリアルタイムゲームプレイおよび／またはレビューメディアストリームを提供するように構成される。ある実施形態では、リアルタイムゲームプレイおよび／またはレビューメディアストリームは、ＹｏｕＴｕｂｅのようなメディアストリーミングサイトを介して１人または複数のユーザに殆どまたは全く遅延時間なしで提供される。
【００１６】
クラウドゲーム環境のある実施形態では、サーバシステムは、プレイヤー入力を処理し、１人または複数のプレイヤーおよび任意にはゲーム観戦者に表示するための出力ストリームを生成するための、リアルタイムの対話型ゲームセッションのためのハードウェアリソースを提供する。リアルタイムの対話型ゲームセッションを確立する要求に応じて、サーバ装置は、要求元のクライアント装置（すなわち、プレイヤーのコントローラ装置）の装置能力（例えば、ハードウェアおよび／またはソフトウェアの能力）と、プレイヤーネットワーク接続の接続能力（例えば、帯域幅、遅延時間および／または誤り率）と、ゲームセッションの１つまたは複数の以上の目標品質パラメータ（例えば、出力映像ストリームの解像度、ゲーム応答遅延時間など）とを決定し、それに応じて、当該セッションを確立するために、その仮想マシンのうちの１つをリアルタイムの対話型セッションに関連付ける。
【００１７】
ある実施形態では、（例えば、プレイヤーおよび／または観客用の出力映像ストリームを生成するための）ゲームデータ映像ストリームの処理および符号化能力は、リアルタイム、オンライン、および対話型ゲーム環境をホストするサーバシステム内の１つまたは複数の処理コア（たとえば、ＧＰＵコアおよびエンコーダコア）のために管理される。たとえば、ある実施形態では、１つまたは複数の処理コアは、（例えば、それぞれ１６.６７ミリ秒の間コア上で実行する）複数の処理スライスで動作し、サーバシステムは、複数の処理スライスの各々を、その上で実行されるべき複数のオンラインゲームセッションのサブセットに割り当てる。処理スライスのうちの１つについて、サーバシステムは、ゲームセッションの対応するサブセットが処理スライスのデューティサイクルを共有し、それぞれのリアルタイムデータ処理ニーズに従って並行して実行されるように、タイムシェアリング処理スケジュールを決定する。さらに、ある時間間隔内で画像符号化を早めるために、サーバシステムのエンコーダは、ＧＰＵが画像フレームのすべてのデータを利用可能にするまで待つ必要がない。むしろ、ある実施形態では、画像フレームの一部分は、その部分を符号化するのに必要な情報がＧＰＵによって提供されるとすぐに、符号化された部分とは無関係な画像フレームの他の部分がＧＰＵによって利用可能にされるか否かとは無関係に、符号化される。
【００１８】
さらに、サーバシステムは、オンラインゲームセッションをプレイするユーザから受信されたユーザコマンドに応答して、いくつかのフレームを動的に生成することができる。サーバシステムは、ユーザコマンドの種類に応じて、期待応答遅延時間、実際の通信および処理遅延時間、および実際の送信遅延時間を決定する。そして、オンラインゲームセッションにおいて、コマンドの効果を反映したフレームの組を生成することにより、ユーザコマンドが実行される。所定のフレーム・レートで送信される場合のフレームのセットは、実際の送信遅延時間に対応する送信時間を占有し、予想される応答遅延時間に対応する時間内にユーザのクライアント装置において受信され得る。
【００１９】
図１は、ある実施形態に従う例示的なオンライン対話型ゲーム環境１００である。オンライン対話型ゲーム環境１００は、１つまたは複数のクライアント装置（たとえば、クライアント装置１０２および１０４）を含む。各クライアント装置１０２は、１以上のゲームアプリケーションを実行する。ゲームセッションは、サーバシステム１１４によって主催されるオンライン対話型ゲームをクライアント装置１０２のユーザがプレイすることを可能にするために、特定のゲームアプリケーション上で実行され得る。ある実施形態では、クライアント装置１０２（たとえば、ホストクライアント）は、１つまたは複数の他のクライアント装置１０２に、特定のゲームアプリケーションのゲームシーンに参加するように招待するように構成される。これらのクライアント装置１０２のゲームセッションは、同じゲームシーンを表示するように同期され、任意に、それぞれのユーザに対応する別個のパースペクティブを有する。
【００２０】
逆に、サーバシステム１１４は、特定のゲームアプリケーションを含む１つまたは複数のゲームアプリケーションをプレイするようにクライアント装置１０２をサポートするためにオンライン対話型ゲームプラットフォームを主催する。具体的には、サーバシステム１１４は、クライアント装置１０２に関連付けられた複数のユーザアカウントを含み、１つまたは複数のゲームアプリケーションの各々に関連付けられたクライアント装置のユーザを認証する。サーバシステム１１４は、シーンに関連付けられた対応するゲームセッションに参加するクライアント装置１０２上のオンライン対話型ゲームのシーンをレンダリングし、リフレッシュする。ある実施形態では、サーバシステム１１４は、クライアント装置１０２の能力および／またはサーバシステム１１４とクライアント装置１０２の各々との間の通信接続の品質を評価し、そして、クライアント装置１０２に関連付けられたゲームセッションのための同期データストリームを適応的に生成する。これらの手段により、サーバシステム１１４は、２つ以上のクライアント装置１０２上でのオンライン対話型ゲームの同期ゲームセッションを同時にかつ実質的に低い遅延時間で容易にするように構成される。
【００２１】
ある実施形態では、サーバシステム１１４は、ゲームサーバ１２２およびメディアストリーミングサーバ１２４を含む。ゲームサーバ１２２は、第１のクライアント装置１０２Ａ上で実行されるオンライン対話型ゲームセッションのために同時に２つ以上のメディアストリームを提供するように構成される。２つ以上のメディアストリームは、１つまたは複数の通信ネットワーク１１２を介してそれぞれ第１のクライアント装置１０２Ａおよびレビュー者クライアント装置１０４に供給される低遅延時間ストリームおよび通常遅延時間ストリームを含む。任意に、通常の遅延時間ストリームは、指示目的のために提供される。第１のクライアント装置１０２のユーザが第１のクライアント装置１０２Ａ上でゲームセッションをプレイしている間、ゲームセッションは記録され、通常の遅延時間ストリームを介して１つまたは複数の観客にブロードキャストされ、すなわち、観客は、レビュー者クライアント装置１０４上でゲームセッションをレビューすることができる。低遅延時間ストリームは、オンライン対話型ゲームセッションのゲームプレイに対応し、関連付けられたレビューセッションに対応する通常の遅延時間ストリームよりも速い応答レートおよび低い送信遅延時間を有する。例えば、低遅延時間ストリームは、６０フレーム／秒（ｆｐｓ）の予め定義されたフレームレートを有し、１６.６７ミリ秒の各時間間隔の間に少なくとも１つのフレームを第１のクライアント装置１０２Ａに供給し、通常遅延時間ストリームは、３０ｆｐｓの予め定義されたフレームレートを有し、３３.３３ミリ秒の各時間間隔の間に少なくとも１つのフレームをレビュー者クライアント装置１０４に供給する。ある実施形態では、通常遅延時間ストリームは、低遅延時間ストリームの解像度より低い解像度を有する。
【００２２】
ある実施形態では、クライアント装置１０２または１０４は、メディアコンテンツを表示するためにそこに統合されたディスプレイスクリーンを有する。ある実施形態では、クライアント装置１０２または１０４は、メディア装置１０６および出力装置１０８に結合される。具体的には、クライアント装置１０２または１０４は、ローカルネットワーク１１０（たとえば、Ｗｉ−Ｆｉ（登録商標）ネットワーク）を介して、または１つまたは複数の通信ネットワーク１１２を介して、（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）または他の無線通信リンクを介して）直接メディア装置１０６に通信可能に結合され得る。ある実施形態では、クライアント装置（１０２または１０４）およびメディア装置１０６は、（例えば、同じ部屋にあり、同じ家等にあり）互いにローカルである。メディア装置１０６はさらに、ビジュアルおよび／または音声コンテンツを出力することができる１つまたは複数の出力装置１０８（例えば、テレビ、表示モニタ、サウンドシステム、スピーカなど）に結合される。メディア装置１０６は、コンテンツを出力装置１０８に出力するように構成される。ある実施形態では、メディア装置１０６は、キャスティング装置（たとえば、グーグル社製のChromecaset（登録商標））、またはそうでなければキャスティング機能を含む装置である。
【００２３】
ある実施形態では、１つまたは複数のクライアント装置１０２または１０４は、互いに、中央サーバまたはクラウドコンピューティングシステム（たとえば、サーバシステム１１４）と、および／またはネットワーク接続された他の装置（例えば、別のクライアント装置１０２または１０４、メディア装置１０６、および出力装置１０８）と、データ通信および情報共有が可能である。データ通信は、様々なカスタムもしくは標準ワイヤレスプロトコル（例えば、ＩＥＥＥ８０２.１５.４、Ｗｉ−Ｆｉ、ＺｉｇＢｅｅ（登録商標）、６ＬｏＷＰＡＮ、Ｔｈｒｅａｄ、Ｚ−Ｗａｖｅ、Bluetooth（登録商標） Smart、ＩＳＡ１００．１１a、WirelessHART（登録商標）、ＭｉＷｉなど。）、および／または様々なカスタムもしくは標準ワイヤードプロトコル（例えば、イーサネット（登録商標）、HomePlugなど）のいずれか、または本文書の出願日時点で未だ開発されていない通信プロトコルを含むあらゆる他の適切な通信プロトコルのいずれかを使用して実行され得る。ある実施形態では、オンライン対話型ゲーム環境１００は、従来のネットワーク装置（例えばルータ）を含み、それを介して、一組のクライアント装置１０２および１０４ならびに（もしあれば）それらの対応するメディア装置および出力装置が、ローカルネットワーク１１０（例えばローカルエリアネットワーク）上で互いに通信可能に結合され、そして、ローカルネットワーク１１０は、通信ネットワーク１１２（例えば、広域ネットワークおよびインターネット）に通信可能に結合される。ある実施形態では、クライアント装置１０２および１０４の各々は、１つまたは複数の無線通信ネットワーク（例えば、ＺｉｇＢｅｅ（登録商標）、Ｚ−Ｗａｖｅ、Ｉｎｓｔｅｏｎ、Ｂｌｕｅｔｏｏｔｈ、Ｗｉ−Ｆｉ、および／または他の無線通信ネットワーク）を使用して、１つまたは複数の他のクライアント装置、それぞれのメディア装置１０６、またはそれぞれの出力装置１０８と任意に通信する。
【００２４】
ある実施形態では、クライアント装置１０２は、互いから離れており、すなわち、それらは、同じ部屋または構造物内に配置されていない。ゲームは、各クライアント装置１０２において実行するためにゲームアプリケーション（例えば、図２のゲームアプリケーション２２８）を起動することによって開始され得る。ある実施形態では、各クライアント装置１０２について、ゲームアプリケーションは、独立してサーバシステム１１４とのオンラインゲームセッション１１６を確立する。２つ以上のクライアント装置１０２（たとえば、１０２Ａおよび１０２ＢＢ）のオンラインゲームセッション１１６は、（例えば、それらはゲームアプリケーションの同じゲーム領域においてプレイされるため）互いに関連付けられており、したがって、ゲームアプリケーションにおいてゲームシーンを共有する。関連付けられたオンラインゲームセッション１１６は互いに同期され、各オンラインゲームセッション１１６は任意にそれぞれのクライアント装置１０２に対応する固有のプレイヤー視点または見方を有する同じゲームシーンを示す。したがって、各クライアント装置１０２のユーザは、それぞれのクライアント装置上でゲームをプレイし、他のクライアント装置１０２上でオンラインゲームセッション１１６からの出力に影響を与えることができる。
【００２５】
あるいは、いくつかの他の実施形態では、第１のクライアント装置１０２Ａのゲームアプリケーションがオンラインゲームセッション１１６を確立した後、１つまたは複数の第２のクライアント装置１０２Ｂが、招待メッセージによってオンラインゲームセッション１１６に参加するように招待される、例えば、オンラインゲームセッション１１６に参加するためのリンク（例えばＵＲＬアドレス）を有するメッセージは、第２のクライアント装置１０２Ｂの各々に送信される。適切なコントローラ構成が、オンラインゲームセッション１１６に参加するように招待される各第２のクライアント装置１０２Ｂに提供される。このアプリケーションでは、第２のクライアント１０２Ｂがオンラインゲームセッション１１６に参加するとき、サーバシステム１１４は、個々の第２のクライアント装置１０２Ｂごとに別個のゲームセッション１１６を作成する。それぞれの第２のクライアント装置１０２Ｂの別個のゲームセッション１１６は、第１のクライアント装置１０２Ａのゲームセッション１１６と同期され、同じシーンを共有するが、それぞれの第２のクライアント装置１０２Ｂに対応する固有のプレイヤーパースペクティブを有することができる。各第２のクライアント装置１０２Ｂが適切なコントローラ構成を受信し、オンラインゲームセッション１１６に参加（より正確には、その関連付けられるオンラインゲームセッション１１６を開始）した後、ユーザは、それぞれの第２のクライアント装置１０２Ｂ上でゲームをプレイし、他のクライアント装置１０２上で実行されるオンラインゲームセッション１１６の出力に影響を与えることができる。
【００２６】
クライアント装置１０２は、ゲームアプリケーションを含む１つまたは複数の別個のユーザアプリケーションを含み、実行することができる装置である。ある実施形態では、クライアント装置１０２は、スマートフォン、タブレット装置、ラップトップコンピュータ、デスクトップコンピュータ、またはマルチメディア装置である。ある実施形態では、クライアント装置１０２は、アクティブにされるかまたはそうでなければ操作されるときにゲームプレイのいくつかの態様を制御するように構成されたゲームコントロール（例えば、１つまたは複数のボタン、ジョイスティック、タッチスクリーンアフォーダンス、モーションコントロール、圧力コントロール、ビジョンコントロール、音声コントロール、および／または他の触覚インターフェイス）を含む専用のゲームコントローラである。ある実施形態では、クライアント装置１０２は、メディア装置１０６と連携して動作するように構成された１つまたは複数のユーザアプリケーションを含む。ある実施形態では、アプリケーションは、クライアント装置１０２をメディア装置１０６とペアリングし、メディア装置１０６を構成するためのメディア装置アプリケーションを含む。アプリケーションはまた、メディア装置１０６に関連コンテンツをキャストすることができる１つまたは複数のアプリケーションを含む。ある実施形態では、アプリケーションは、（たとえば、ローカルネットワークを介して）データ／コンテンツをメディア装置１０６に直接送信することによって、および／または、メディア装置１０６がそこからデータ／コンテンツをストリーミングまたはそうでなければ受信することができるリモートロケーション（例えば、サーバシステムにおける場所へのＵＲＬまたは他のリンク）にメディア装置１０６を方向付けることによって、データおよび／またはコンテンツをメディア装置１０６にキャストする。メディア装置１０６は、アプリケーションおよび／または遠隔地にある場所からデータ／コンテンツを受信し、受信されたデータ／コンテンツに対応するビジュアルおよび／または音声コンテンツを出力装置１０８に出力する。したがって、オンラインゲームセッション１１６は、クライアント装置１０２上で実行されるゲームアプリケーションと、リモートサーバシステム１１４と、メディア装置１０６との間に確立される。
【００２７】
ある実施形態では、関連付けられるオンラインゲームセッション１１６をリンクする処理の一部として、サーバシステム１１４は、各対応するクライアント装置１０２の能力および／またはサーバシステム１１４とクライアント装置１０２との間の通信接続の品質を評価する。ある実施形態では、サーバシステム１１４は、クライアント装置１０２とサーバシステム１１４との間のネットワーク遅延時間を測定する。測定された遅延時間が閾値を上回り、低遅延時間接続が利用可能である場合、サーバシステム１１４は、クライアント装置１０２が低遅延時間接続に変更することを提案でき、またはクライアント装置１０２のユーザに、クライアント装置１０２を低遅延時間接続に変更するように促すことができる。例えば、クライアント装置１０２がセルラワイヤレス接続１１８上にあり、ローカルネットワークが利用可能である場合、サーバシステム１１４は、クライアント装置１０２が当該利用可能なローカルネットワークを通じて接続すべきであることを提案することができる。ある実施形態では、遅延時間の閾値要件はゲーム間で異なる。例えば、あるゲーム（例えばアクションゲーム）は、低遅延時間接続で最もよく経験され、ある他のゲーム（例えば、オンラインボードゲームまたはカードゲーム）は、遅延時間に関してそれほど要求していない。サーバシステム１１４は、異なる種類のゲームに関連付けられるこれらの異なる要件を考慮して接続の推奨を行うことができる。
【００２８】
ある実施形態では、ゲームセッション１１６を開始または参加するクライアント装置１０２の一部として、サーバシステム１１４は、クライアント装置１０２上でコントローラ（例えば、ゲームコントローラ構成および／またはインターフェイス）を設定するために、クライアント装置１０２と通信する。ある実施形態では、これは、クライアント装置１０２がコントローラのために必要とされるリソースおよび通信能力を有するかどうかをサーバシステム１１４が評価することを含む。クライアント装置１０２において利用可能なリソース、接続品質、およびゲームに対する要件に応じて、コントローラは、クライアント装置１０２において異なって実装されてもよい。ある実施形態では、ゲームは、ウェブページベースのコントローラインターフェイスを用いてプレイすることができる。例えば、ゲームのためのコントローラインターフェイスは、ウェブページ内に埋め込まれていてもよく、当該ウェブページは、クライアント装置１０２上のウェブブラウザ内にレンダリングされる。あるいは、ある実施形態では、標準化されたコントローラは、ゲームに特有ではない、またはゲームに直接関連付けられる予め定義されたアプリケーション（例えば、グーグル社によるクロームキャストまたはＧｏｏｇｌｅ  Ｃａｓｔなどのキャスティング装置アプリケーション、または他のメディア装置アプリケーション）において、またはクライアント装置１０２のオペレーティングシステムにおいて実装される。例えば、クライアント装置１０２上の装置オペレーティングシステムまたは所定のアプリケーションは、コントローラサブモジュールを有することができる。コントローラサブモジュールは、１つまたは複数の標準化されたコントローラ構成、テンプレートなどを含む。標準化されたコントローラ構成の各々は、仮想コントローラを実装するために何らかの方法でクライアント装置１０２上の入力装置および／またはセンサを利用するようにコントローラサブモジュールを構成する。標準化されたコントローラ構成は、ゲームおよび／またはクライアント装置の種類によって異なり得る。
【００２９】
さらに、ある実施形態では、ゲームは、コントローラサブモジュール上で実装され得る特定のコントローラ構成を有する。そのような構成は、サーバシステム１１４に記憶されていてもよく、クライアント装置１０２がオンラインゲームセッション１１６に参加または開始する処理の一部として、クライアント装置１０２に送信されてもよい。ある実施形態では、特定のコントローラ構成は、完全に特別注文のコントローラ、または標準コントローラと特別注文のコントローラとの混合であり得る。さらに、ある実施形態では、ゲームは、当該ゲームに関連付けられた特定のアプリケーションを必要とする。例えば、ゲームは、当該ゲームに特に関連付けられたコントローラアプリケーションを必要とする場合がある。ある実施形態では、クライアント装置１０２は、セッション１１６の開始または加入の一部として、特定のアプリケーションまたは予め定義されたアプリケーションをダウンロードするように指示され得る。例えば、クライアント装置１０２が、（コントローラサブモジュールを有する）予め定義されたアプリケーションまたはゲームに関連付けられる特定のアプリケーションを前々から有しておらず、そのようなアプリケーションがプレイに必要とされる場合、サーバシステム１１４は、ダウンロードが必要であることをクライアント装置１０２のユーザに促し、進めるための許可をユーザに要求するようにクライアント装置１０２に命令する。
【００３０】
ある実施形態では、サーバシステム１１４は、サーバシステム１１４上でホストされる１つまたは複数のゲームアプリケーション（例えば、図２のゲームアプリケーション２２８）の各々のユーザアカウントに関連付けられるユーザ情報を記憶する。ユーザ情報の例は、ユーザアカウント情報（例えば、身分証明書およびパスワード）、メンバシップタイプ、嗜好、および活動履歴を含むが、これらに限定されない。ある実施形態では、サーバシステム１１４は、クライアント装置１０２上でプレイされるオンラインゲームセッションに関連付けられるセッションデータを記憶する。各オンラインゲームセッション１１６のためのセッションデータの例は、フレームレート、レンダリング仕様、通常の遅延時間要件、ＧＰＵ割り当ての情報、エンコーダ割り当ての情報、関連付けられるセッションの識別、および最新のステータス情報を含むが、これらに限定されない。
【００３１】
ある実施形態では、サーバシステム１１４は、オンラインゲームセッション１１６で使用されるサードパーティゲームコンテンツの効率的で携帯可能な低遅延時間ホストを可能にするためのゲームＡＰＩおよびクラウドプラットフォームを提供する。ある実施形態では、ゲームＡＰＩおよびクラウドプラットフォームは、フロントエンドサーバ１３４、メディアストリーミングサーバ１２４、ゲームサーバ１２２、および１つまたは複数のサードパーティコンテンツサーバ１３６のうちの１つまたは複数をさらに含むサーバシステム１１４によって可能にされる。ある実施形態では、ゲームＡＰＩプラットフォームは、ゲームサーバ１２２によって作成および／またはホストされ、フロントエンドサーバ１３４およびコンテンツサーバ１３６と共にゲームセッション１１６を可能にする。フロントエンドサーバ１３４は、ゲームセッション１１６のユーザにサービスを提供し、ユーザのアカウントを管理するように構成される。任意に、ユーザは、フロントエンドサーバ１３４を介してゲームサービスに加入する。コンテンツサーバ１３６は、ゲームセッション１１６に関連付けられるゲームコンテンツを提供する。
【００３２】
ある実施形態では、フロントエンドサーバ１３４は、クライアント装置１０２および１０４に関連付けられるユーザアカウント、たとえば、ユーザアカウントによる１つまたは複数のオンライン対話型ゲームのメンバシップへの加入を管理する。クライアント装置１０２が、それぞれのユーザアカウントにログインし、それらのオンラインゲームセッション１１６に参加した後、ゲームサーバ１２２は、ゲームセッション１１６を設定し、そして、コンテンツサーバ１３６からゲームコンテンツを取得することと、クライアント装置１０２上で実行されるゲームアプリケーションにゲームコンテンツを送信することと、ユーザ要求またはアクションを識別することと、ユーザ要求またはアクションに応答してクライアント装置１０２に対するゲームプレイ出力をレンダリングすることと、それぞれのゲームセッション１１６の間にゲーム状態データを記憶することと、によって、それぞれのクライアント装置１０２について各々の特定のゲームセッション１１６を管理する。ゲームサーバ１２２は、１つまたは複数の処理ユニット（例えば、ＣＰＵ１３８、ＧＰＵ１４０、およびエンコーダ１４２）と、メモリ１４６と、ＧＰＵ１４０によって生成されたマルチメディアコンテンツを一時的に記憶するためのデータバッファ144とを含み、一層の符号化（たとえば、標準化または圧縮）のためにマルチメディアコンテンツをエンコーダ１４２に提供する。データバッファ１４４は、任意に、メモリ１４６に統合されるか、またはメモリ１４６から独立している。
【００３３】
ある実施形態では、ゲームサーバ１２２は、クラウドゲームのハードウェアリソース（たとえば、ＧＰＵ１４０およびエンコーダ１４２）を動的に割り当て、個々のエンドユーザに利用可能なネットワーク帯域幅を監視および利用して、最適なクラウドゲーム経験を提供する。ある実施形態では、ゲームサーバ１２２は、高精細ビデオ／メディアストリームを伴う高性能リアルタイムゲームセッションをサポートする層を含む、複数の性能層を提供する。ある実施形態では、ゲームサーバ１２２は、異なるサブスクリプションモデルをサポートし、および／または、遅延時間が殆どまたは全くない１つまたは複数の実際のゲームストリーム（例えば、映像ストリームモバイルアプリまたはブラウザベースのプログラムのいずれかを介してオンライン／クラウドゲームセッションに参加しているユーザのクライアント装置に出力される映像ストリーム）に対応する１つまたは複数の同時リアルタイムゲームプレイおよび／またはレビューメディアストリームを提供するように構成される。具体的には、ゲームサーバ１２２は、ゲームプレイおよびレビュービデオのための同時メディアストリームを生成するように構成され、メディアストリーミングサーバ１０４は、同時ゲームプレイのためのレビュービデオを提供される。そのようなレビュービデオは、ＹｏｕＴｕｂｅなどのメディアストリーミングサイトを介して、１人または複数のユーザに、わずかな遅延時間または遅延時間なしで提供される。メディアストリーミングサイトは、任意に、メディアストリーミングサーバ１２４によって管理される。
【００３４】
ある実施形態は、ゲーム競技会と併せて公共イベントの主催を可能にする。例えば、主催されたゲームに基づくマルチプレイヤーゲームイベントまたは競技会に関連して、ゲームサーバ１２２によってホストされるクラウドゲームサイトは、特定のレビュー者クライアント装置１０４に、任意にメディアストリーミングサーバ１２３を介して、（a）関連付けられたコメントトラック／ストリームを含む１つまたは複数の同時の補助的なまたは補足のメディアストリーム、（b）異なるプレイヤー視点からのゲームストリーム、クラウドサーバ分析に基づく特に感動的なゲームアクションを示すハイライトストリーム、ゲームイベントに関連付けられる複数のゲームセッションのスコアリング、（c）１つまたは複数のアクティブなゲーマーのゲームプレイセッション１１６を反映する１つまたは複数のゲーム視点のストリーム、および／または（d）アクティブなゲーマーによってクラウドゲームサーバシステム１１４に送られるリアルタイムピクチャ・イン・ピクチャ（PIP）ビデオと、それらの対応するゲームプレイ応答とを多分含む、１つまたは複数のアクティブなゲーマーおよび／またはコメンテイターからの指示トラックを、ブロードキャストまたはストリーミングすることができる。
【００３５】
ある実施形態によれば、コンテンツサーバ１３６によって効果的に主催され得るサードパーティコンテンツの例は、スポーツゲーム、レースゲーム、ロールプレイングゲーム（ＲＰＧ）およびファーストパーソナルシューター（ＦＰＳ）ゲームを含むが、これらに限定されない。これらのゲームの異なるインスタンスは、異なる、関連付けられる遅延時間要件および期待と、出力映像の解像度と、ゲームサーバの計算負荷および映像符号化／ストリーミングリソースとに基づく（例えば、異なるサブスクリプションパフォーマンス階層と一貫性がある、最適なユーザゲーム体験を保証するための）広く変化するクラウドハードウェア要件およびネットワークと、ネットワーク帯域幅とを有しし得る。
【００３６】
ある実施形態では、フロントエンドサーバ１３４は、加入者のゲームプレイアクティビティおよび関連付けられる要求（例えば、エンドユーザによる、ゲームセッションに参加することを他のプレイヤーに招待すること、ゲーム中のツールをアップグレードすること、および／またはゲームパフォーマンスを向上させることを要求する）を監視し、コンテンツプロバイダが彼らの加入者および／またはフォロアの（課金情報、ゲーム内クレジット、サブスクリプションレベル等を含むが、これらに限定されない）設定を追跡することを可能にするために、ＡＰＩ関連情報をサードパーティコンテンツサーバ１３６に送信または利用可能にするアカウント管理ＡＰＩおよび／またはソフトウェアモジュールを提供する。ある実施形態では、主催されたコンテンツのコンテンツプロバイダは、同じ主催プラットフォームを介して、主催コンテンツの１つまたは複数の異なるサブスクリプションモデルを提供することができる。ある実施形態では、ユーザ（例えば、ゲームサービスへの加入者）は、主催プラットフォーム上でコンテンツプロバイダによって提供されるすべてのゲームに対して無制限のアクセスおよびゲームプレイを許可される。ある実施形態では、ユーザは、主催プラットフォーム上でコンテンツプロバイダによって提供される１つまたは複数の特定のゲームフランチャイズ（例えば、特定のフットボールまたは第１人のシューターフランチャイズ）に無制限のアクセスおよびゲームプレイを許可される。ある実施形態では、サブスクリプションは、ユーザによる限定された参加のためのものであり、当該参加は、ゲームプレイ時間、エンドユーザにコミットされるハードウェアリソースのレベル、またはエンドユーザの装置のタイプ／ロケーションに基づいて制限され得る。ある実施形態では、アカウントＡＰＩおよびモジュールは、ゲームプレイセッションを構成および監視し、アクティブなゲームプレイ中であっても、コンテンツプロバイダが、それらの最も現在の加入情報に従ってそれぞれの加入者のゲーム活動を追跡することを可能にする。
【００３７】
サーバシステム１１４は、ユーザが、例えば、第１のクライアント装置１０２上で実行される第１のゲームセッションの第１のゲームストリームを一時停止し、第２のクライアント装置１０２の第２のゲームセッション上で第１のゲームストリームを再開することのように動き回って、第１のゲームセッションを継続することを可能にするクラウド機能を可能にする。サーバシステム１１４はまた、大規模なスケールで複数のプレイヤーをサポートし、より豊かでより持続的なクラウドベースの世界を提供する。サーバシステム１１４は、クラウドベースのシステムを使用して、同じユーザの異なるゲームセッション１１６または異なるユーザの異なるゲームセッション１１６に関連付けられるセッションデータを記憶する。
【００３８】
サーバシステム１１４は、携帯電話、タブレットコンピュータ、デスクトップコンピュータ、およびテレビを含むがこれらに限定されない、複数のクライアント装置１０２および１０４上でゲームコンテンツを表示する。任意に、ゲームコンテンツは、これらのクライアント装置１０２および１０４の仕様に従うように動的に調整される。ある実施形態では、ゲームＡＰＩプラットフォームが即時アクセスを提供し、ユーザ装置ストレージ（例えば、ユーザは、５秒でプレイを開始し、２５０GBのコンソールハードドライブ空間を節約することができる）を全くまたは殆ど必要としないので、クライアント装置１０２および１０４は、制限された記憶能力または記憶能力を有さない。
【００３９】
ゲームコンテンツに加えて、サーバシステム１１４はまた、クライアント装置１０２および１０４に、アドオンコンテンツ、たとえば新しいリーグの名簿、統計、および初期タイトルへのプレビューアクセスをストリーミングし、これは任意に定期的に更新される（例えば、毎日、または毎時、容易に更新、アップグレードされる）。ある実施形態では、アドオンコンテンツは、インターネット検索またはデータベース検索の検索結果を含む。
【００４０】
ある実施形態では、サーバシステム１１４は、ゲームアプリケーションに関連付けられるライブオンラインコミュニティをサポートする。ユーザ（例えば、サービスの加入者）は、１日中、対応するゲームＡＰＩプラットフォーム上のライブイベント、トーナメントまたはアクティビティに参加する。ライブイベント、トーナメント、またはアクティビティの例は、他のユーザによってプレイされるライブゲームセッションを観戦すること、パブリックドメイン（例えば、ＹｏｕＴｕｂｅ）に成果を投稿すること、および生のヒントおよびコーチングビデオを得ることを含む。例えば、ゲームサーバ１２２は、ユーザアクションに応答して、２つ以上のライブストリーム１３０および１３２を提供する。ゲームプレイヤー用の第１のクライアント装置１０２Ａの第１のゲームセッション１１６上で第１のゲームストリーム１３０を維持しながら、サーバシステム１１４はまた、第２のライブレビューストリーム１３２（例えば、ＹｏｕＴｕｂｅストリーム）を（例えば、加入者の）１つまたは複数の他のクライアント装置１０４にブロードキャストする。第２のライブレビューストリーム１３２は、ユーザが自分のゲーム体験を視聴者と共有することを可能にする。任意に、第２のライブストリームは、プレイヤーの第１のクライアント装置１０２Ａの画面の再生である。サーバシステム１１４は、プレイヤーが第１のゲームセッション１１６を説明している音声ストリーム、またはプレイヤーが第１のゲームセッション１１６をプレイし説明している映像ストリームを取得してもよい。第２のライブレビューストリーム１３２がオーディエンスのために再生される間に、音声ストリームはオーディエンスのために任意に再生される。映像ストリームは、任意に、第２のライブレビューストリーム１３２内の埋め込まれたウィンドウ内で再生される。
【００４１】
ある実施形態は、オンザゴーゲームを提供し、ユーザが任意のロケーションまたはクライアント装置に自分の所望のゲームを取ることを可能にする。例えば、ユーザは、モバイル装置１０２Ａ上で自分の発信でオンラインゲームセッション１１６を開始し、次いでラップトップコンピュータ１０２Ｂ上で自分の宛先でゲームセッション１１６をシームレスに再開することができる。また、ある実施形態では、ゲームセッション１１６が異なる装置１０２間でハンドオーバされるときにユーザに利用可能な異なるクライアント装置のリソースに基づいて、サーバシステム１１４（特に、ゲームサーバ１２２）は、異なる一組のハードウェアリソース（例えば、ＧＰＵ１４０およびエンコーダ１４２）を動的に展開して、異なるエンドユーザの現在の装置のリソース（例えば、クライアントハードウェア能力およびネットワーク帯域幅）に基づいてユーザのゲーム経験を最適化することができる。
【００４２】
サーバシステム１１４において、フロントエンドサーバ１３４およびゲームサーバ１２２は、それぞれのユーザアカウントシステムを有することができる。一例では、フロントエンドサーバ１３４のためのユーザアカウントシステムは、特定のゲームコンテンツおよびサービスへの加入を管理するために使用され、ゲームサーバ１２２のためのユーザアカウントシステム（例えば、ＹｏｕＴｕｂｅまたはＧｏｏｇｌｅアカウント）は、ゲーム体験（例えば、特定のゲーム基準を満たすようにゲームコンテンツをレンダリングすること）および多くの他の目的を管理するために使用される。ある実施形態では、これらの２つのユーザアカウントシステムは、顧客および使用データ（例えば、ソーシャル、友人、プレゼンス、認証、アカウント情報、請求情報）を共有する。また、コンテンツフロントエンドサーバ１３４は、ゲームサーバ１２２によって有効化されるテクノロジレイヤの上に置くサービスレイヤを提供する。ある実施形態では、ゲームコンテンツサーバは、それらのコンテンツにアクセスするための追加のユーザアカウントシステムを管理する。任意に、ゲームコンテンツのための追加のユーザアカウントシステムは、ユーザ加入を管理するフロントエンドサーバ１３４のためのユーザアカウントシステムと統合される。
【００４３】
図２は、ある実施形態に従うゲーム環境１００の例示的なクライアント装置１０２を示すブロック図である。本出願を通して、他に特定されない限り、クライアント装置１０２への言及は、図１を参照して説明されるクライアント装置１０２Ａ、１０２Ｂ、および１０４のうちの１つまたは複数に対応する。クライアント装置１０２の例は、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、およびウェアラブルパーソナル装置を含むが、これらに限定されない。ある実施形態では、クライアント装置１０２は、ゲーム制御入力２１０（例えば、１つまたは複数のボタン、ジョイスティック、タッチスクリーン要素、モーションコントロール、圧力コントロール、ビジョンコントロール、音声コントロール、および／または起動されたときにゲームプレイのいくつかの態様を制御するように構成された他の触覚インターフェイス要素）を含む専用のゲームコントローラである。クライアント装置１０２は、１つまたは複数の処理ユニット（ＣＰＵ）２０２と、１つまたは複数のネットワークインターフェイス２０４と、メモリ２０６と、（チップセットと呼ばれることもある）これらの構成要素を相互接続するための１つまたは複数の通信バス２０８とを含む。クライアント装置１０２は、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする１つまたは複数の入力装置２１０を含む。さらに、いくつかのクライアント装置１０２は、接触を必要とするインターフェイス（たとえば、キーボードおよびボタン）を補うまたは置き換えるために、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用し得る。ある実施形態では、クライアント装置１０２は、たとえば、電子装置上に印刷されたグラフィックシリーズコードの画像をキャプチャするために、１つまたは複数のカメラ、スキャナ、またはフォトセンサユニットを含む。ある実施形態では、クライアント装置１０２は、１つまたは複数のスピーカおよび／または１つまたは複数のビジュアルディスプレイを含む、ユーザインターフェイスの提示およびコンテンツの表示を可能にする１つまたは複数の出力装置２１２を含む。任意に、クライアント装置１０２は、クライアント装置１０２の位置を決定するための、ＧＰＳ（地球測位衛星）または他の地理的位置受信機などの位置検出装置２１４を含む。クライアント装置１０２はまた、メディア装置１０６および／または他のクライアント装置１０２の近接度を決定するための近接検出装置２１５、たとえばＩＲセンサを含み得る。クライアント装置１０２はまた、（たとえば、上述の入力２１０のために）入力として使用され得る、クライアント装置１０２の動き、向き、および他のパラメータを感知するための１つまたは複数のセンサ２１３（例えば、加速度計、ジャイロスコープなど）を含み得る。
【００４４】
メモリ２０６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ ＲＡＭ、または他のランダムアクセス固体メモリ装置などの高速ランダムアクセスメモリを含み、また、任意に、１つまたは複数の磁気ディスク記憶装置、１つまたは複数の光ディスク記憶装置、１つまたは複数のフラッシュメモリ装置、または１つまたは複数の他の不揮発性半導体記憶装置などの不揮発性メモリを含む。メモリ２０６は、任意に、１つまたは複数の処理ユニット２０２から遠隔に位置する１つまたは複数の記憶装置を含む。メモリ２０６、または代替的に、メモリ２０６内の不揮発性メモリは、非一時的なコンピュータ可読記憶媒体を含む。ある実施形態では、メモリ２０６、またはメモリ２０６の非一時的なコンピュータ可読記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらの部分集合もしくは上位集合を記憶する：
・  様々な基本的なシステムサービスを処理するための、かつ、ハードウェア依存タスクを実行するための手順を含むオペレーティングシステム２１６、
・  １つまたは複数のネットワークインターフェイス２０４（有線または無線）、ならびにインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークような１つまたは複数のネットワーク１１０および／または１１２を介して、クライアント装置１０２を他の装置（例えば、サーバシステム１１４、メディア装置１０６、および他のクライアント装置１０２）に接続するためのネットワーク通信モジュール２１８、
・  １つまたは複数の出力装置２１２（例えば、ディスプレイ、スピーカなど）を介してクライアント装置１０２における情報（例えば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに／またはゲーム、音声および／もしくは映像コンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス）の提示を可能にするためのユーザインターフェイスモジュール２２０、
・  １つまたは複数の入力装置２１０のうちの１つからの１つまたは複数のユーザ入力または対話を検出し、当該検出された入力または対話を解釈するための入力処理モジュール２２２、
・  遅延時間計算において使用するために、入力識別および／またはタイムスタンプ情報をサーバシステム１１４に報告するための入力イベント報告モジュール２２３、
・  セッション１１６に参加するためのウェブインターフェイスを含む、ナビゲートし、（例えばＨＴＴＰを介して）要求し、そのウェブサイトおよびウェブページを表示するためのウェブブラウザモジュール２２５、
・  対話メディア装置１０６に関連付けられたユーザアカウントにログインすること、ユーザアカウントに関連付けられている場合にメディア装置１０６を制御するための、および、メディア装置１０６に関連付けられた設定およびデータを編集およびレビューすることを含む、メディア装置１０６と対話するためのメディア装置アプリケーション２２６、
・  対応するゲームプレイを容易にし、追加のプレイヤーの招待を容易にすることを含む、クライアント装置１０２上でゲームを提供するためのゲームアプリケーション２２８、
・  ゲームプレイ入力インターフェイスをゲームアプリケーション２２８に提供するためのゲームコントローラモジュール２３０、
・  サーバシステム１１４ならびに他のコンテンツホストおよびプロバイダからデータ（例えば、ゲームコントローラ構成４５６（図４）、ゲームアプリケーション２２８および他のアプリケーション、モジュールおよびアプリケーションの更新、並びにメモリ２０６内のデータ）をダウンロードするためのデータダウンロードモジュール２３１、
・  ゲームアプリケーション２２８および他のアプリケーション／モジュールに関連付けられる少なくとも以下を含むデータを記憶するクライアント装置データ２３２：
−  共通装置設定（例えば、サービス層、装置モデル、記憶容量、処理能力、通信能力など）を含む、クライアント装置１０２自体に関連付けられる情報を記憶するためのクライアント装置設定２３４、
−  アカウントアクセス情報および装置設定（例えば、サービス層、装置モデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つまたは複数を含む、メディア装置アプリケーション２２６のユーザアカウントに関連付けられる情報を記憶するためのメディア装置設定２３６、
−  アカウントアクセス情報、ゲーム内ユーザ嗜好、ゲームプレイ履歴データ、および他のプレイヤーに関する情報のうちの１つまたは複数を含む、ゲームアプリケーション２２８のユーザアカウントに関連付けられた情報を記憶するためのゲームアプリケーション設定２３８、
−  ゲームアプリケーション２２８に対するゲームコントローラモジュール２３０の構成（例えば、図４のゲームコントローラ構成４５６から受信された構成）に関連付けられた情報を記憶するためのゲームコントローラ構成２４０、
−  クライアント装置１０２およびメディア装置１０６のいずれかの存在、近接または位置に関連付けられた情報を含む位置／近接データ２４２。
【００４５】
ある実施形態では、ゲームコントローラモジュール２３０は、メモリ２０６内のメディア装置アプリケーション２２６または別のアプリケーションの一部（たとえばサブモジュール）である。ある実施形態では、ゲームコントローラモジュール２３０は、オペレーティングシステム２１６の一部である。ある実施形態では、ゲームコントローラモジュール２３０は、別個のモジュールまたはアプリケーションである。
【００４６】
クライアント装置１０２のある実施形態では、メディア装置アプリケーション２２６（および対応するメディア装置設定２３６）ならびにゲームアプリケーション２２８（および対応するゲームアプリケーション設定２３８）は任意である。クライアント装置１０２が参加するように招待される特定のゲームに応じて、メディア装置アプリケーション２２６およびゲームアプリケーション２２８は、プレイすることは必要とされない。これらのアプリケーションのいずれかがゲームをプレイするために必要であり（例えば、ゲームは、メディア装置アプリケーション２２６内のゲームコントローラモジュール２３０を使用する）、そのアプリケーションがメモリ２０６内にない場合、クライアント装置１０２は、そのアプリケーションをダウンロードするように促され得る。
【００４７】
上記で識別された要素のそれぞれは、前述のメモリ装置のうちの１つまたは複数に記憶され得、上記で説明された機能を実行するための命令のセットに対応する。上記で識別されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実装される必要はなく、したがって、これらのモジュールの様々なサブセットは、様々な実施形態で組み合わされるか、またはそうでなければ再配列され得る。ある実施形態では、メモリ２０６は、任意に、上で識別されたモジュールおよびデータ構造のサブセットを記憶する。さらに、メモリ２０６は、任意に、上で説明されない追加のモジュールおよびデータ構造を記憶する。
【００４８】
図３は、ある実施形態に従うゲーム環境１００の例示的なメディア装置１０６を示すブロック図である。メディア装置１０６は、典型的には、１つまたは複数の処理ユニット（ＣＰＵ）３０２と、１つまたは複数のネットワークインターフェイス３０４と、メモリ３０６と、これらの構成要素（チップセットと呼ばれることもある）を相互接続するための１つまたは複数の通信バス３０８とを含む。任意に、メディア装置１０６は、クライアント装置１０２の近接度を決定するための、ＩＲセンサなどの近接度／位置検出ユニット３１０を含む。
【００４９】
メモリ３０６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲＲＡＭ、または他のランダムアクセスソリッドステートメモリ装置などの高速ランダムアクセスメモリを含むみ、また、任意に、１つまたは複数の磁気ディスク記憶装置、１つまたは複数の光ディスク記憶装置、１つまたは複数のフラッシュメモリ装置、もしくは、１つまたは複数の他の不揮発性半導体記憶装置などの不揮発性メモリを含む。メモリ３０６は、任意に、１つまたは複数の処理ユニット３０２から遠隔に位置する１つまたは複数の記憶装置を含む。メモリ３０６、または代替的には、メモリ３０６内の不揮発性メモリは、非一時的なコンピュータ可読記憶媒体を含む。ある実施形態では、メモリ３０６、またはメモリ３０６の非一時的なコンピュータ可読記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらの部分集合もしくは上位集合を記憶する：
・  様々な基本的なシステムサービスを処理するための、および、ハードウェア依存タスクを実行するための手順を含むオペレーティングシステム３１６、
・  １つまたは複数のネットワークインターフェイス３０４（有線または無線）、ならびにインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、ケーブルテレビシステム、衛星テレビシステム、ＩＰＴＶシステムなどの１つまたは複数のネットワーク１１０および／または１１２を介して、メディア装置１０６を他のコンピュータまたはシステム（例えば、サーバシステム１１４およびクライアント装置１０２）に接続するためのネットワーク通信モジュール３１８、
・  １つまたは複数のコンテンツソース（例えば、ゲームセッション１１６からの出力のためのサーバシステム１１４）から受信されたコンテンツ信号を復号し、復号された信号内のコンテンツを、メディア装置１０６に結合された出力装置１０８に出力するためのコンテンツ復号モジュール３２０、
・  近接度検出ユニットによって検出されるか、またはサーバシステム１１４によって提供される近接度関連情報に基づいて、クライアント装置１０２の近接度を決定するための近接度／位置決定モジュール３２２、
・  メディア表示を制御するためのメディア表示モジュール３２４、
・  遅延時間計算において使用するために、表示イベント識別および／またはタイムスタンプ情報をサーバシステム１１４に報告するための表示イベント報告モジュール３２５、
・  ゲーム環境内の他のコンポーネントによって報告される遅延時間データ３３４に基づいて遅延時間値を計算するための遅延時間計算モジュール３２６、
・  少なくとも以下を含むデータを記憶するためのメディア装置データ３２８：
−  アカウントアクセス情報および装置設定（例えば、サービス層、装置モデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つまたは複数を含む、メディア装置アプリケーションのユーザアカウントに関連付けられる情報を記憶するためのメディア装置設定３３０、
−  クライアント装置１０２およびメディア装置１０６のいずれかの存在、近接または位置に関連付けられる情報を含む位置／近接データ３３２、
−  遅延時間計算モジュール３２６が遅延時間値を計算するために必要な情報（例えば、タイムスタンプ）を含む遅延時間データ３３４。
【００５０】
上記で識別された要素のそれぞれは、前述のメモリ装置のうちの１つまたは複数に記憶され得、上記で説明された機能を実行するための命令のセットに対応する。上記で識別されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実装される必要はなく、したがって、これらのモジュールの様々なサブセットは、様々な実施形態で組み合わされるか、またはそうでなければ、再配列され得る。ある実施形態では、メモリ３０６は、任意に、上で識別されたモジュールおよびデータ構造のサブセットを記憶する。さらに、メモリ３０６は、任意に、上で説明されない追加のモジュールおよびデータ構造を記憶する。
【００５１】
図４は、ある実施形態に従うゲーム環境１００のサーバシステム１１４内の例示的なサーバを示すブロック図である。サーバシステム１１４は、典型的には、１つまたは複数の処理ユニット（例えば、ＣＰＵ１３８、ＧＰＵ１４０、およびエンコーダ１４２）と、１つまたは複数のネットワークインターフェイス４０４と、メモリ１４６と、これらの構成要素（チップセットと呼ばれることもある）を相互接続する１つまたは複数の通信バス４０８とを含む。サーバシステム１１４は、任意に、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする１つまたは複数の入力装置４１０を含み得る。さらに、サーバシステム１１４は、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用して、キーボードを補足または置換してもよい。ある実施形態では、サーバシステム１１４は、任意に、たとえば電子装置上に印刷されたグラフィックシリーズコードの画像をキャプチャするための１つまたは複数のカメラ、スキャナ、またはフォトセンサユニットを含む。サーバシステム１１４はまた、１つまたは複数のスピーカおよび／または１つまたは複数の視覚的ディスプレイを含む、ユーザインターフェイスの提示およびコンテンツ表示を可能にする１つまたは複数の出力装置４１２を含み得る。
【００５２】
メモリ１４６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ ＲＡＭ、または他のランダムアクセス固体メモリ装置などの高速ランダムアクセスメモリを含み、また、任意に、１つまたは複数の磁気ディスク記憶装置、１つまたは複数の光ディスク記憶装置、１つまたは複数のフラッシュメモリ装置、または１つまたは複数の他の不揮発性半導体記憶装置などの不揮発性メモリを含む。メモリ１４６は、任意に、１つまたは複数の処理ユニットから遠隔に位置する１つまたは複数の記憶装置を含む。メモリ１４６は、または代替的に、メモリ１４６内の不揮発性メモリは、非一時的なコンピュータ可読記憶媒体を含む。ある実施形態では、メモリ１４６は、またはメモリ１４６の非一時的なコンピュータ可読記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する：
・  様々な基本的なシステムサービスを処理するための、および、ハードウェア依存タスクを実行するための手順を含むオペレーティングシステム４１６、
・  １つまたは複数のネットワークインターフェイス４０４（有線または無線）、ならびにインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの１つまたは複数のネットワーク１１０および／または１１２を介して、サーバシステム１１４を他の装置（例えば、サーバシステム１１４、クライアント装置１０２、およびメディア装置１０６内の様々なサーバ）に接続するためのネットワーク通信モジュール４１８、
・  クライアント装置１０２における情報（例えば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに／またはゲーム、音声および／もしくは映像コンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス）の提示を可能にするためのユーザインターフェイスモジュール４２０、
・  メディア装置１０６に関連付けられる装置プロビジョニング、装置制御、およびユーザアカウント管理のためのサーバ側機能を提供するように実行されるメディア装置モジュール４２２（任意選択）、
・  クライアント装置１０２およびメディア装置１０６のいずれかの位置情報に基づいて、メディア装置１０６に対するクライアント装置１０２の近接度を決定するための近接度／位置決定モジュール４２４、
・  特に制限されないが、ゲームセッションを設定すること、セッション状態データおよび他のゲームに関連付けられるデータを記憶すること、クライアント装置１０２からのゲームプレイ入力を処理すること、および、当該入力に応答してゲームプレイ出力を表示することを含む、ゲーム（例えば、ゲームアプリケーション２２８）に関連付けられたサーバ側の機能を提供するためのゲームサーバモジュール４２６、
・  メディアストリーミングサイトを主催し、オンラインゲームセッションに関連付けられる同時補助または補助メディアストリームを受信し、同じクライアント装置１０４または別個のクライアント装置１０２のゲームアプリケーション２２８上で実行されているオンラインゲームセッションとの同時表示のためにクライアント装置１０４に同時メディアストリームを提供するためのメディアストリーミングサーバモジュール４３８、
・  クライアント装置１０２に関連付けられたユーザアカウント、たとえば、ユーザアカウントによる１つまたは複数のオンライン対話型ゲームのメンバシップへの加入、を管理するための、加入者要求をゲームサーバモジュール４２６に転送するための加入者へのサービスを可能にするための、および加入者のゲームプレイ活動および関連付けられる要求を監視するための、フロントエンドサーバモジュール４４０、
・  １つまたは複数のサードパーティコンテンツプロバイダによって主催されるゲームコンテンツへのアクセスを提供するためのメディアコンテンツサーバモジュール４４２、
・  クライアント装置１０２への接続のネットワーク帯域幅を評価すること、およびクライアント装置１０２がゲームをプレイするために必要なモジュールまたはアプリケーションを有するかどうかを評価することを含むが、これらに限定されない、クライアント装置１０２の装置およびネットワーク能力を評価するための装置／ネットワーク評価モジュール４４４、
・  データ（例えば、ゲームコントローラ構成４５６、ソフトウェア更新など）をクライアント装置１０２に提供するためのデータ送信モジュール４４６、
・  以下を含むサーバシステムデータ４４８：
−  共通装置設定（例えば、サービス層、装置モデル、記憶容量、処理能力、通信能力など）を含む、クライアント装置１０２に関連付けられる情報を記憶するためのクライアント装置設定４５０、
−  アカウントアクセス情報および装置設定（例えば、サービス層、装置モデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つまたは複数を含む、メディア装置アプリケーション４２２のユーザアカウントに関連付けられる情報を記憶するためのメディア装置設定４５２（任意選択）、
−  クライアント装置１０２およびメディア装置１０６のいずれかの存在、近接または位置に関連付けられる情報を含む位置／近接データ４５４、
−  さまざまなゲームのためのコントローラ構成を記憶するためのゲームコントローラ構成４５６、
−  サーバシステム１１４上でホストされる１つまたは複数のゲームアプリケーション（例えば、図２のゲームアプリケーション２２８）の各々のユーザアカウントに関連付けられる情報（例えば、ユーザアカウント情報（例えば、識別およびパスワード）、メンバシップタイプ、嗜好、および活動履歴を含む）を記憶するためのユーザ情報４５８、
−  例えば、第１のゲームセッションのためのデータ４６０−１および第２のゲームセッションのためのデータ４６０−２を含み、各ゲームセッションのためのセッションデータ４６０は、フレームレート、レンダリング仕様、通常の遅延時間要件、ＧＰＵ割り当ての情報、エンコーダ割り当ての情報、関連付けられるセッションの識別、それぞれのゲームセッションに関連付けられる最新のステータス情報、入力イベントのログ、および表示イベントのログを含むが、これらに限定されない、ゲームセッション（例えば、ゲーム状態データ、入力イベント、表示イベント、他のゲーム関連データ）に関連付けられるイベントデータを記憶するためのゲームセッションイベントログ４６０、
−  様々なユーザコマンドタイプに対する予想遅延時間値を記憶するための応答時間設定４６２、
−  仮想マシンリソースプロファイルおよびコンテナイメージを記憶するためのリソースリポジトリ４６４、
−  ユーザ許容レベルに基づいて利用可能なリソースの構成を記憶するためのリソース設定４６６、
・  １つまたは複数の出力メディアストリームに関連付けられたＧＰＵ１４０によって生成されたゲームプレイマルチメディアコンテンツを一時的に格納するデータバッファ１４４。
【００５３】
ある実施形態では、ゲームサーバモジュール４２６は、以下のプログラム、モジュール、またはそれらのサブセットもしくは上位集合を含む：
・  （例えば、クライアント装置１０２とサーバシステム１１４との間である）ユーザ入力通過時間を（例えば、メディア装置１０６とサーバシステム１１４との間である）表示通過時間と比較し、入力イベントをそれぞれのトリガフレームとマッチングさせることによって、特定の入力の背後にあるユーザの意図を判定するための意図判定モジュール４２８、
・  （ｉ）ユーザ入力が受信された時点で処理されている現在のフレームと、（ｉｉ）受信された入力の結果を示す応答フレームとの間にＧＰＵ１４０が挿入するための中間フレームの数を決定するための遅延時間調整モジュール４３０、
・  エンドポイント（例えば、コントローラ１０２）からセッション要求を受信し、どのリソースを当該セッションに割り当てるかを決定するためのリソース割り当てモジュール４３２（任意に、本明細書では「セッションオーケストレータ」と呼ばれる）、
・  特定のユーザの遅延時間許容値を決定するリソース調整モジュール４３４。
【００５４】
ある実施形態では、メモリ１４６は、エンコーダ１４２をＧＰＵ１４０に結合するように構成されたデータバッファ１４４をさらに含む。具体的には、データバッファ１４４は、１つまたは複数の出力メディアストリームに関連付けられたＧＰＵ１４０によって生成されたゲームプレイマルチメディアコンテンツを一時的に記憶し、それにより、エンコーダ１４２は、データバッファ１４４からゲームプレイマルチメディアコンテンツを取り出すことができ、例えば、標準化、速度または圧縮のために、取り出したコンテンツを１つまたは複数のメディアストリームに符号化することができる。
【００５５】
上記で識別された要素のそれぞれは、前述のメモリ装置のうちの１つまたは複数に記憶され得、上記で説明された機能を実行するための命令のセットに対応する。上記で識別されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実装される必要はなく、したがって、これらのモジュールの様々なサブセットは、様々な実施形態で組み合わされてもよく、またはそうでなければ再配列され得る。ある実施形態では、メモリ１４６は、任意に、上で識別されたモジュールおよびデータ構造のサブセットを記憶する。さらに、メモリ１４６は、任意に、上で説明されない追加のモジュールおよびデータ構造を記憶する。
【００５６】
表示ラグの検出および補償
上記で説明されるクラウドベースのゲームプラットフォームの様々な実装は、多くの利益（例えば、可搬性、スケーラビリティ、効率、アクセスおよび制御の容易さなど）を提供する。しかしながら、これらのゲームプラットフォームのクラウドベースの性質は、ネットワークおよび処理リソースの変動性などの様々な課題を伴い、これは、適切に考慮されない場合、ゲームプレイ体験に悪影響を及ぼす可能性がある。そのような課題は、プレイヤー装置１０２とサーバシステム１１４との間のネットワーク１１０／１１２に導入される可変遅延時間に起因して、不均一なゲーム体験を潜在的に作り出す可能性がある。以下の開示は、リアルタイムの対話型クラウドベースのゲーム環境において存在し得る異なる種類の遅延時間を検出し、補償する様々な実施形態を説明する。これらの遅延時間を補償することによって、本明細書で説明する実施形態は、利用可能なネットワークおよび処理リソースに関係なく、各プレイヤーに対して滑らかで均一なゲーム体験を提供する。
【００５７】
図５Ａは、いくつかの遅延時間源がそこから説明される、例示的なゲーム環境５００を示す。ゲーム環境５００は、ゲーム環境１００（図１）の例示的な実施形態であり、対応する構成要素は同様にラベル付けされている。ゲーム環境５００は、例えば、入力２１０（図２）を起動または操作することによってゲーム（または「ゲームプレイ」）の様々な態様を制御するためにプレイヤー（または「ユーザ」）が使用するクライアント装置１０２（本明細書では、「ゲームコントローラ」または「コントローラ」とも称される）を含む。ゲーム環境５００はまた、メディア装置１０６（例えば、セットトップボックス）および出力装置１０８（例えば、テレビまたは他の出力ディスプレイ）を含む。コントローラ１０２およびメディア装置１０６は、それぞれローカル通信リンク５０２および５０４を介して（たとえば、Ｗｉ−Ｆｉ（登録商標）を介して）ローカルネットワーク１１０（この例では、ワイヤレスルータとして示される）に通信可能に結合される。ローカルネットワーク１１０は、通信ネットワーク１１２（例えば、インターネット）を介して、通信リンク５０６を介してサーバシステム１１４に通信可能に接続される。サーバシステム１１４は、ゲームサーバ１２２（図１）を含む。
【００５８】
図面に示されるゲーム環境５００は、単一のコントローラ１０２を有する単一のローカルネットワーク１１０のみを含むが、ゲーム環境５００のいくつかの実施形態は、複数のローカルネットワーク１１０を含むことができ、ローカルネットワーク１１０のうちのいくつかは、２つ以上のコントローラ１０２（例えば、上述の図１〜４を参照して説明したように、同じゲームセッションを共有する多人数参加型ゲームの場合である）を含む。
【００５９】
ゲーム環境５００内に存在するいくつかの要素は、認識可能（例えば、少なくとも１つのフレームに影響を及ぼす）かつ時間に応じて変化する遅延時間を導入することができる。たとえば、ローカルネットワーク１１０（たとえば、Ｗｉ−Ｆｉ）は、通信リンク５０２および５０４に様々な量の遅延時間を導入することができる。チャネルに競合がない場合、平均遅延時間は非常に低い（例えば、１ミリ秒未満）。しかしながら、重複Ｗｉ−Ｆｉネットワークを有するアパート建造物、または複数のワイヤレスクライアント装置を有するゲームプレイ環境などのビジーな環境では、１０〜５０ミリ秒の範囲の平均遅延時間量は、２００ ミリ秒の外れ値で、より一般的である。
【００６０】
さらに、通信ネットワーク１１２（たとえば、インターネット）は、通信リンク５０６に遅延時間を導入することができる。この遅延時間は、殆どのユーザのＷｉ−Ｆｉよりも変動が少ないかもしれないが、しかしながら、ピークゲーム時間（夕方）では、メディア共有（例えば、ケーブルモデム上で）ならびにネットワーク飽和は、遅延または欠落されたパケットをもたらす可能性がある。平均遅延時間は、ローカルネットワーク１１０からサーバシステム１１４のエッジサーバまでの距離に依存し、例えば、２０〜３０ミリ秒の範囲の遅延時間の量を有する。
【００６１】
上述のネットワークに導入される遅延時間は、ネットワーク需要およびリンク容量の非対称性のために、トラフィックフローの方向（例えば、コントローラ１０２からサーバ１２２へ、逆に、サーバ１２２からメディア装置１０６へ）に基づいて変動し得る。したがって、ルータからサーバへのリンク５０６上の遅延時間は、サーバからルータに戻る遅延時間等と一致しないことがある。
【００６２】
また、ゲームサーバ１２２は、遅延時間を導入することもできる。ＧＰＵ１４０への入力イベントの到着からエンコーダ１４２からのフレームの出力までの遅延時間がある。しかしながら、ある実施形態では、この遅延時間は完全に追跡可能であり、結果として、ゲームサーバ１２２によって知られる。
【００６３】
最後に、出力装置１０８（例えば、テレビ）におけるフレームの到着と、そのフレームの表示との間に遅延時間がある。これは、表示モード（例えば、ゲームモード対非ゲームモード）を含む、出力装置における処理の性質に依存し得る。例えば、テレビは、１５〜３０ミリ秒程度の表示ラグ、または５０〜６０ミリ秒程度の表示ラグを有し得る。悪いテレビは、１２０ミリ秒の表示ラグを有する可能性がある。
【００６４】
上述の異なる種類の遅延時間は、ゲームプレイの体験に重大な影響を及ぼし得る。図５Ｂおよび図５Ｃは、同じユーザ入力を含むが、異なる遅延時間レベルに起因して完全に異なる出力を生じる、２つの例示的なゲームプレイ経験を示す。しかしながら、これらの例を詳しく説明する前に、ゲームプレイ処理の例を最初に説明する必要がある。
【００６５】
遅延時間補償
図６は、ある実施形態に従うゲームプレイ処理６００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）、１つまたは複数のプロセッサ（たとえば、ＣＰＵ３０２）と、１つまたは複数のプロセッサによって実行される１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ３０６）とを有するメディア装置（たとえば、メディア装置１０６）、および／または、１つまたは複数のプロセッサ（例えば、ＣＰＵ２０２）と、１つまたは複数のプロセッサによる実行のための１つまたは複数のプログラムを記憶するメモリ（例えば、メモリ２０６）とを有するユーザ装置（例えば、コントローラ１０２）とにおいて実行され得る。ある実施形態では、サーバ、メディア装置、およびユーザ装置は、１つまたは複数のプログラムと、１つまたは複数のそれぞれのプロセッサによって実行するための１つまたは複数のそれぞれのプログラムを記憶するメモリとを含み、１つまたは複数のプログラムは、処理６００を実行するための命令を含む。ある実施形態では、それぞれの非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、１つまたは複数のそれぞれのプログラムは、１つまたは複数のそれぞれのプロセッサを用いて電子サーバ、メディア装置、およびユーザ装置によって実行されると、当該電子サーバ、メディア装置、およびユーザ装置に処理６００を実行させる。
【００６６】
コントローラ１０２（本明細書では「プレイヤー」とも称される）のユーザは、コントローラ１０２を使用して、出力装置１０８（図５Ａ参照）上に表示される映像フレーム（たとえば５１０）によって表されるゲームにおけるイベントに影響を及ぼす。プレイヤーが（例えば、仮想プレイヤーを動かしたり、ホッケーパックをシュートしたりすることなどにより）ゲームプレイシュート影響を与えることを決定すると、プレイヤーは、コントローラ１０２上の入力２１０をアクティブにする（６０２）か、そうでなければ操作する（例えば、ボタンを押す）。コントローラ１０２上の入力２１０の起動または操作は、本明細書では「入力イベント」または「コマンド」と呼ばれることもある。入力イベントは、通信リンク５０２および５０６を介して（ネットワーク１１０および１１２を介して）、（例えば、ゲームセッションに関連付けられたイベントログ４６０に対する）サーバシステム１１４に送信される（６０４）。
【００６７】
入力イベントを受信すると（６０６）、サーバシステム１１４（例えば、ゲームサーバ１２２の意図判定モジュール４２８）は、ユーザが、当該受信された入力イベントに関連付けられた入力を起動させた時点で、どのフレームが出力装置１０８に表示されたかを決定する（６０８）。ユーザが入力を活性化した時点でユーザに表示されたフレームは、入力を活性化することによって応答するようにユーザをトリガしたため、本明細書では「トリガフレーム」と称される。例えば、ホッケーゲームにおいて、フレームがオープンシュートを表示する場合、これは、「シュートパック」機能にマッピングされた入力制御を起動することによって応答するようにユーザをトリガする。トリガフレームは、オープンショット（例えば、フレーム５１０−１、図５Ｂ）を示すフレーム５１０であり、入力イベントは、トリガフレーム５１０を見たことに応答する、コントローラ１０２上の「シュートパック」制御のユーザによる起動である。
【００６８】
トリガフレームを決定すると、ゲームサーバ１２２（例えば、意図判定モジュール４２８）は、トリガフレームがユーザに表示された時点におけるゲームの状態（本明細書では「トリガ状態」と呼ばれる）を決定する（６１０）。ある実施形態では、意図判定モジュール４２８は、イベントログ４６０（図４）に維持されているゲーム状態のログを参照することによってトリガ状態を決定する。ある実施形態では、イベントログ４６０は、フレームフィンガープリント、フレームＩＤ、および／またはゲーム時間データ（たとえば、タイムスタンプまたはクロックデータ）によってインデックス付けされるゲーム状態のログを含む。ある実施形態では、意図判定モジュール４２８は、トリガフレームに関連付けられるゲーム時間インデックスを決定し、トリガフレームに関連付けられるゲーム時間インデックスの時点で存在したゲームの状態を決定するためにイベントログ４６０を参照することによって、トリガ状態を決定する。トリガフレームを出力装置１０８で表示してからゲームサーバ１２２で入力イベントを受信するまでの間にどのくらいの時間が経過したかに応じて、トリガ状態は、ゲームサーバ１２２で処理される現在の状態に対して、過去であり得る。
【００６９】
前の例に戻ると、（ゴール上のオープンシュートを示す）トリガフレームがゲーム時間インデックスＴ１に関連付けられている場合、時間インデックスＴ１におけるゲームの状態は、仮想シューター、仮想デフェンダ、仮想パック、仮想ゴール、およびこれらのオブジェクトの各々の位置を含む。時間インデックスＴ１におけるゲームの状態、より具体的には、時間インデックスＴ１における前述の仮想オブジェクトの各々の位置に応じて、パックとゴールとの間に明確な経路が存在する。別の言い方をすれば、ゲームプレイの規則を制御する１つまたは複数のアルゴリズムは、トリガフレーム（時間インデックスＴ１）の表示中の瞬間に、仮想パックが、シューターとゴールとの間の任意の他の仮想プレイヤーによって停止されることなく、パックをシュートしている仮想プレイヤーから仮想ゴールまで移動することを許可している。しかしながら、幾つかのシナリオでは、入力イベント（例えば、「シュートパック」）がサーバに到着すると、サーバは、仮想パックがもはやゴールへの明確な経路をもたない高度なゲームプレイ状態を含み得る後続の状態Ｔ２でゲームプレイを現在処理している。これらのシナリオでは、サーバがトリガ状態をＴ１に正しく決定する場合、トリガ状態は、サーバが現在処理している状態Ｔ２に対して、過去の状態である。
【００７０】
トリガ状態を決定すると、ゲームサーバ１２２（例えば、ＧＰＵ１４０）は、（ｉ）入力イベント（例えば、「シュートパック」）、および（ｉｉ）（例えば、パックからゴールへの明確な経路を含む）トリガ状態に従って、後続のゲーム状態（本明細書では「ゲームプレイ出力」と呼ばれることもある）を処理する（６１２）。ある実施形態では、ゲームプレイ出力を処理することは、入力イベントおよび対応するゲーム状態に基づいてゲームプレイ出力を決定するアルゴリズムまたはゲームエンジンに入力イベントを入力することを含む。例えば、ゲームエンジンは、現在のゲーム状態中のゴールに関する各プレイヤーおよびパックの状態／位置、ならびに現在のゲーム状態中に仮想プレイヤーに関して受信された任意の入力コマンド（例えば、「移動」、「シュート」、または「ブロック」）に基づいて、次のゲーム状態を決定することができる。ある実施形態では、入力イベントおよびトリガ状態に従って後続のゲーム状態（ゲームプレイ出力）を処理することは、サーバがトリガ状態（例えば、トリガ状態の後の次の状態、またはトリガ状態の近くに続く状態）に近接するゲーム状態を処理している時点で、サーバに利用可能であったかのように入力イベントを処理することを含む。
【００７１】
ゲームプレイ出力を処理すると、ゲームサーバ１２２は、処理されたゲームプレイ出力を示すフレームまたは一連のフレームをレンダリングする（６１４）。ゲームプレイ出力を示すフレーム（または一連のフレームのうちの最初のフレーム）は、本明細書では「応答フレーム」と呼ばれる。例えば、入力イベントおよびトリガ状態が、特定の仮想プレイヤーの移動を含むゲームプレイ出力をもたらす場合、応答フレームは、ユーザ入力によって指定された方向と一致する、当該フレーム内の他のオブジェクトに関して修正された空間位置における特定の仮想プレイヤーを示すフレームである。あるいは、入力イベントおよびトリガ状態が、パックをシュートした特定の仮想プレイヤーのゲームプレイ出力をもたらす場合、応答フレームは、ホッケーパック（例えば、フレーム５１０−３、図５Ｂ）をシュートした特定の仮想プレイヤーを示す一連のフレームのうちの最初のフレームである。ある実施形態では、応答フレームをレンダリングすることは、新しい仮想オブジェクトを導入すること、既存の仮想オブジェクトを修正すること、または処理されたゲームプレイ出力に従ってゲームプレイの任意の他の態様を修正することを含み、当該新しい仮想オブジェクト、当該修正された既存の仮想オブジェクト、または当該修正されたゲームプレイの任意の他の態様を応答フレームに含めることを含む。
【００７２】
サーバシステム１１４は、（例えば、エンコーダ１４２を使用して）応答フレームを符号化し、符号化された応答フレームをメディア装置１０６に送信する（６１６）ことを開始する。サーバシステム１１４から符号化された応答フレームを受信すると、メディア装置１０６は、（例えば、コンテンツ復号モジュール３２０を使用して）応答フレームを復号し、復号された応答フレームを（例えば、出力装置１０８を使用して）ユーザに表示する（６２０）。
【００７３】
図５Ｂおよび図５Ｃに戻り、映像フレームの２つのシーケンス（５１０および５２０）が示されており、ゲーム環境５００に存在する遅延時間の量が異なるために、異なる応答フレーム（成功シュート５１０−２対ブロックシュート５２０−３）以外の同じ入力イベント（パックをシュートすることを示している。これらのシーケンスは、ゲーム環境５００に適用されるゲームプレイ処理６００の例である。
【００７４】
図５Ｂは、ホッケーゲームをプレイする３つの仮想プレイヤー（Ａ、Ｂ、およびＣ）を示す映像フレーム５１０のシーケンスと、（例えば、図４のログ４６０に格納される）ゲーム状態Ｔ１〜Ｔ３のテーブル５１２とを含む、第１のシナリオ５５０を示す。プレイヤーＡは、コントローラ１０２のユーザによって制御され、プレイヤーＢおよびＣは、他のコントローラの他のユーザによって、コンピュータ制御アルゴリズムによって、またはそれらの組み合わせによって、制御される。状態Ｔ１において、プレイヤーＡは、ゴール上でクリアシュートを有し（表５１２において「クリア」として示される）、したがって、ゲームサーバは、この状態を示すフレーム５１０−１をユーザのディスプレイ１０８に送信する。プレイヤーＡを制御するユーザがディスプレイ１０８上のフレーム５１０−１を見ると、ユーザはプレイヤーＡがゴール上でクリアシュートを有することを確認し、したがってプレイヤーＡにパックをシュートするように命令することを決定する。換言すれば、フレーム５１０−１は、ユーザが「シュート」コマンドを入力することをトリガする。「シュート」コマンドは、入力イベントとしてゲームサーバ１２２に送信される。ゲームサーバ１２２が（表５１２において「Ｉｎ」として示される）「シュート」入力を受信すると、ゲームサーバは現在、プレイヤーＡがもはやクリアシュートを有さない状態Ｔ２を処理している（表５１２において「シュートなし」として示される）。しかし、ゲームサーバ１２２は、（表５１２において「Ｔ」として示されるトリガフレーム）がフレーム５１０−１であったと正しく判定する。フレーム５１０−１が表示されているときのゲームの状態（トリガ状態Ｔ１）に従うと、プレイヤーＡは依然としてゴール上でクリアシュートを有していた。したがって、ゲームサーバ１２２は、「シュート」コマンドおよびＴ１状態（クリアシュート）に従って後続の状態Ｔ３を処理する。ゲームエンジンによれば、プレイヤーがクリアシュートを有している間にシュートすると、その後の状態は成功したシュートシーケンスを含み、このシーケンスは、（表５１２において「得点」として示される）状態Ｔ３で処理される。したがって、ゲームサーバは、パックをシュートしているプレイヤーＡがプレイヤーＣを追い越したことを示す応答フレーム５１０−２をレンダリングし、その応答フレームをユーザに送信する。ユーザの視点から、応答フレームは、入力イベント時にユーザが意図したアクションを示す。このように、ゲームサーバは、ユーザの入力に応じたトリガ状態を正しく判定することにより、ユーザの意図に基づいてゲームプレイを処理する。
【００７５】
図５Ｃは、シナリオ５５０と同じゲームおよびプレイヤーを示す映像フレーム５２０のシーケンス、ならびに（例えば、図４のログ４６０に格納される）ゲーム状態Ｔ１〜Ｔ３のテーブル５２２を含む第２のシナリオ５５２を示す。前のシナリオと同様に、状態Ｔ１において、プレイヤーＡは、ゴール上で（表５２２において「クリア」として示される）クリアシュートを有する。したがって、ゲームサーバは、この状態を示すフレーム５２０−１をユーザのディスプレイ１０８に送信する。ユーザが画面１０８上でフレーム５２０−１を見ると、ユーザは、プレイヤーＡがゴール上でクリアシュートを有することを確認し、したがって、プレイヤーＡにパックをシュートするように命令することを決定する。「シュート」コマンドは、入力イベントとしてゲームサーバ１２２に送信される。以前のシナリオのように、ゲームサーバ１２２が（表５２２において「Ｉｎ」として示される）「シュート」入力を受信すると、ゲームサーバは現在、プレイヤーＡがもはやクリアシュートを有さない（表５２２において「shot」として示される）状態Ｔ２を処理している。しかしながら、以前のシナリオとは異なり、ゲームサーバ１２２は、（テーブル５２２において「Ｔ」として示される）トリガフレームを正確に決定しない。代わりに、ゲームサーバは、トリガフレームが現在の状態Ｔ２に従ってレンダリングされる最後のフレーム、この例ではフレーム５２０-２であると仮定する。あるいは、ゲームサーバは、トリガフレームを決定することを試みなくてもよく、代わりに、現在の状態Ｔ２（シュートなし）に基づいてゲームプレイ出力を処理する。いずれの場合においても、ゲームサーバは、「シュート」コマンドおよびＴ２状態（シュートなし）に従って後続の状態Ｔ３を処理する。ゲームエンジンによれば、プレイヤーがクリアシュートをしていない状態でシュートすると、その後の状態はブロックシュートシーケンスを含み、このシーケンスは（表５２２において「ブロック」と示される）状態Ｔ３で処理される。このように、ゲームサーバは、プレイヤーＡがパックをシュートしようとするがプレイヤーＣによって遮られていることを示す応答フレーム５２０-３をレンダリングし、その応答フレームをユーザに送信する。ユーザの視点から、応答フレームは、ユーザが入力イベント時に意図しなかったアクションを示す。具体的には、ユーザーは、プレイヤーＣが途中にいなかった間にプレイヤーＡにシュートさせることを意図している。代わりに、プレイヤーＡは、ユーザが意図したほど迅速にはシュートせず、その結果、シュートがブロックされた。したがって、ユーザの入力に対応するトリガ状態を正しく決定できないことによって、ゲームサーバは、ユーザの意図に反するゲームプレイイベントを処理するかもしれず、これは、潜在的に、ユーザ（および多くの他のユーザ）に、ゲームをプレイすることおよび／またはゲーム環境５００を使用することに関心を失わせる可能性がある。
【００７６】
上記の２つのシナリオのそれぞれにおいて、入力イベントは同時に発生する。しかしながら、入力イベントがゲームサーバに到達するのにかかる時間がどれだけ長いかに応じて、応答フレームは、２つの非常に異なる結果を示す。これは、サーバが、ユーザが入力を行うようにトリガしたゲーム状態（例えば、Ｔ１）よりも時間的に遅いゲーム状態（例えば、Ｔ２）を処理する間にユーザの入力を受信する場合、サーバは、ユーザ入力のタイミングに関する誤った情報に基づいてゲーム出力を誤って処理し得るためである。ゲームプラットフォームがこの種の不整合を回避するのは重要なことであるから、ゲームプラットフォームが、これらの遅延を引き起こすゲーム環境に導入される様々な遅延時間を検出し、補償することは重要である。様々な遅延時間を検出することによって、ゲームプレイプラットフォームは、（シナリオ５５０のように）入力イベントを実際のトリガ状態とより正確に関連付けることができる。これらの相関を行うことによって、ゲームプラットフォームは、ユーザの意図と一致する方法で各入力イベントを処理することによって、制御不能および／または検出不能な遅延時間の影響を低減する。したがって、本明細書で説明する様々な実施形態は、ユーザ入力に対応する正確なトリガ状態を決定または誤って決定しようとするものではないゲームプラットフォームに対する改善である。
【００７７】
特定のシナリオでは、トリガ状態とゲームサーバによって処理される現在の状態との間の時間がどれだけ経過しているかに応じて、特定のゲームプレイ出力は、１人または複数のユーザに既に表示されているものに矛盾し得る。例えば、図５Ｃにおいて、フレーム５２０-３は、ブロックされたシュートを示す。しかしながら、ゲームサーバが、状態Ｔ３の間に、トリガ状態がＴ１であったと決定した場合、ある実施形態では、ゲームサーバは、ユーザの意図をゲームの現在の状態と逆行的に調整しようとする。言い換えれば、ユーザの意図は、プレイヤーＡがクリアシュートを有する間にパックをシュートすることであり、一方、ゲームの現在の状態（Ｔ３）は、プレイヤーＡとゴールとの間にプレイヤーＣを表示している。ユーザの意図（パックがゴールに向かって移動する）を現在の状態（パックの道筋にいるプレイヤーＣ）に合わせるために、ゲームサーバは、プレイヤーＣがその道筋（例えば、フレーム５１０-３、図５Ｂ）にいるにもかかわらず、パックがゴールに向かって移動する一連の応答フレームをレンダリングしてもよい。応答フレームは、現在のゲーム状態と矛盾するように見え得る。しかし、それらは、過去のゲーム状態（トリガー）におけるユーザの意図と一致する。ゲーム開発者は、例えば、一貫しないゲーム状態を適合させるアニメーションを設計することによって、これらの不整合を事前に計画してもよい。例示的な調整アニメーションは、仮想キャラクタまたはオブジェクトを意図された位置（たとえこれがゲーム内の物理学に違反しているように見える場合であっても、）に即座にシフトすること、または正しいアニメーション（例えば、ゴールにパックが到着したことを示さずにスコアを更新すること、または、モンスターが撃たれる前の経路から外れたように見えても、モンスターが損傷に耐えたたと分類すること）を示さない意図された方法でゲーム状態を前進させることを含む。ある実施形態では、現在のゲーム状態を、ユーザ対話の時にユーザによって意図されたゲーム状態（意図されたゲーム状態）に調整することは、現在のゲーム状態を示すフレームを修正して、当該意図されたゲーム状態を示す後続フレームを作成することを含む。
【００７８】
遅延時間検出
以下の説明は、ある実施形態に従って、ゲーム環境における様々な遅延時間を検出する様々なアプローチを説明する。遅延時間検出は、ゲームサーバが特定のユーザ入力に対するトリガフレームを正確に決定すること（ステップ６０８、図６）を可能にし、それによってゲームサーバがトリガ状態を、さらにいうと、上述したように入力の背後のユーザの意図を決定するために必要なステップである。正しいトリガフレーム（および、さらにいうと、トリガ状態）の知識により、ゲームサーバ１２２は、入力がサーバに到着するときの（後のゲームプレイ状態に対応し得る）ゲームプレイ状態の代わりに、ユーザが入力する（例えば、ボタンを押す）時点により近いゲームプレイ状態を考慮することによって、ユーザの意図をより正確に反映する出力を処理することができる。
【００７９】
以下は、ある実施形態ではサーバがアクセスできる特定の遅延時間値、およびある実施形態ではサーバがアクセスできない特定の遅延時間値を含む、ゲームサーバ（例えば、サーバ１２２）の観点からの遅延時間の簡単な考察である。サーバがアクセスできない遅延時間値に関して、それらの値を検出または近似するためのある実施形態が、図７〜図１２を参照して説明される。
【００８０】
ある実施形態では、ゲームサーバ１２２は、入力イベントを処理し、結果として生じる応答フレームを送信するのにかかる時間量である処理遅延時間を計算するために必要な情報にアクセスする。ある実施形態では、処理遅延時間は、イベントごとに変化する。ある実施形態では、処理遅延時間は、ゲーム状態の複雑さ（例えば、同時に処理されるゲームプレイイベントの数）に応じて変化する。ある実施形態では、特定の入力イベントに対する処理遅延時間を計算するために、サーバシステム１１４は、入力イベントがサーバシステム１１４に（たとえば、エッジサーバに）到着した時間に対応する第１のタイムスタンプ、ならびに符号化された応答フレームがサーバシステム１１４を離れる時間に対応する第２のタイムスタンプを記録する。これらの２つのタイムスタンプから、サーバシステム１１４は、（例えば、第２のタイムスタンプから第１のタイムスタンプを減算することにより）入力イベントに関連付けられる処理遅延時間を計算する。
【００８１】
ある実施形態では、ゲームサーバ１２２はまた、サーバシステム１１４とコントローラ１０２との間の平均往復時間（ＲＴＴ）を計算するために必要な情報にアクセスする。ある実施形態では、サーバシステム１１４は、１つまたは複数のテストパケット（たとえば、ピング）をコントローラ１０２に送信することと、対応する応答を受信することと、１つまたは複数の平均応答時間を計算することとによって、このＲＴＴ値を計算する。ある実施形態では、ゲームサーバ１２２はまた、サーバ１１４とメディア装置１０６との間のＲＴＴを計算するために必要な情報へのアクセスを有する。ある実施形態では、サーバシステム１１４は、メディア装置１０６に１つまたは複数のテストパケット（たとえば、ピング）を送信することと、対応する応答を受信することと、１つまたは複数の平均応答時間を計算することとによって、このＲＴＴ値を計算する。しかしながら、非対称なネットワーク遅延時間のために、上述のように、平均ＲＴＴ情報だけが、コントローラ１０２からサーバシステム１１４への、または、メディア装置１０６からサーバシステム１１４への正確な一方向通過時間を決定するのに適切でない可能性がある。サーバシステム１１４が上述の一方向通過時間を直接計算できない場合、サーバシステム１１４はトリガフレームを正確に決定することができない可能性がある。
【００８２】
上述のＲＴＴ値にアクセスすることにより、サーバシステム１１４（例えば、意図判定モジュール４２８）は、各入力イベントについての平均ＲＴＴ値を仮定することと、ＲＴＴ値を半分に分割することと、仮定される出力装置表示ラグ（例えば、テレビ表示ラグ）の量を加算することとにより、トリガフレームを近似することができる。２つのネットワークノード間の遅延はしばしば非対称である（順方向遅延および逆方向遅延は等しくない）が、ＲＴＴ値の半分は順方向遅延および逆方向遅延の平均であり、したがって、ＲＴＴ値の半分は、一方向遅延（本明細書では、「一方向通過時間」および「一方向遅延時間」とも称される）の近似として使用され得る。
【００８３】
ある実施形態では、意図判定モジュール４２８は、トリガフレームをより正確に決定するために、（ｉ）コントローラとサーバとの間の一方向遅延時間値、（ｉｉ）メディア装置とサーバとの間の一方向遅延時間値、または（ｉｉｉ）それらの組み合わせを使用する。以下の議論は、図７〜１２を参照して、特定の入力イベントに対するトリガフレームをより正確に決定するために、一方向通過時間を測定するための、または、より正確に近似するための、ある実施形態を説明する。
【００８４】
図７〜１２は、ある実施形態に従うトリガフレーム決定処理７００〜１２００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、当該１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）において、１つまたは複数のプロセッサ（たとえば、ＣＰＵ３０２）と、当該１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ３０６）とを有するメディア装置（例えば、メディア装置１０６は、表示装置１０８と組み合わされるか、さもなければ結合されるときは「ディスプレイ」とも呼ばれる表示装置１０８）において、および／または、１つまたは複数のプロセッサ（例えば、ＣＰＵ２０２）と、当該１つまたは複数のプロセッサによる実行のための１つまたは複数のプログラムを記憶するメモリ（例えば、メモリ２０６）とを有するユーザ装置（例えば、コントローラ１０２）において、実行され得る。ある実施形態では、サーバ、メディア装置、およびユーザ装置は、１つまたは複数のプログラム、および、１つまたは複数のそれぞれのプロセッサによって実行するための１つまたは複数のそれぞれのプログラムを記憶するメモリを含み、当該１つまたは複数のプログラムは、それぞれの処理を実行するための命令を含む。ある実施形態では、それぞれの非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、当該１つまたは複数のそれぞれのプログラムは、１つまたは複数のそれぞれのプロセッサを用いて電子サーバ、メディア装置、またはユーザ装置によって実行されると、当該電子サーバ、当該メディア装置、または当該ユーザ装置に、方法７００〜１２００のうちの１つまたは複数を実行させる命令を含む。
【００８５】
図７は、ある実施形態に従うトリガフレーム決定処理７００を説明する。処理７００では、サーバ１１４、メディア装置１０６、およびコントローラ１０２は、非同期クロックを使用する独立した構成要素である。したがって、コントローラからサーバへ、および／またはメディア装置からサーバへ送られるタイムスタンプの分析は、それぞれの構成要素間の遅延時間の正確な評価を提供しないであろう。ある実施形態では、クロックのうちの１つまたは複数が同期される。しかしながら、サーバは、前述のクロックのいずれかが同期されているかどうかに関わらず、トリガフレームを決定するために処理７００を使用してもよい。
【００８６】
処理７００は、サーバ１１４が、出力装置１０８上でユーザに表示するための一連のフレームのうちの第１のフレームをメディア装置１０６に送信する（７０２）ことから始まる。メディア装置１０６が第１のフレームをユーザに表示する（７０４）と、メディア装置１０６は、第１のフレームがちょうど表示されていることをサーバ１１４に（例えば、ゲームセッションに関連付けられたイベントログ４６０に）送信する（７０６）。この通信は、本明細書では「表示イベント」と称され、ある実施形態では、メディア装置１０６の表示イベント報告モジュール３２５によって報告される。メディア装置１０６がフレームを表示させる度に、メディア装置１０６（例えば、報告モジュール３２５）は、対応する表示イベントをサーバに送り返す。ある実施形態では、表示イベントは、表示されたばかりのフレームに対応するフレームＩＤを含む。一方、ユーザは、第１のフレームを観察し、ゲームプレイに影響を与えるためにコントローラを操作することを決定すると、入力をアクティブにする。コントローラ１０２は、ユーザの入力を検出し（７０８）、ユーザの入力をサーバ１１４に送信する（７１０）。この通信は、本明細書では「入力イベント」と称され、ある実施形態では、コントローラ１０２の入力イベント報告モジュール２２３によって報告される。コントローラ１０２がユーザ入力を検出する度に、コントローラ１０２は、「対応する入力イベントをサーバに送信する。ある実施形態では、入力イベントは、ユーザによってアクティブにされた特定の入力に対応する入力ＩＤを含む。
【００８７】
一方、表示のためにフレームを連続的にレンダリングし、ユーザに送信するサーバは、（例えば、ステップ７０２の間に）ユーザに送信されたレンダリングされたフレームに対応する表示イベントを連続的に受信する（７１２）。（例えば、ステップ７１０から）入力イベントを受信すると（７１２）、意図判定モジュール４２８は、入力イベントを最も近く受信された表示イベントと照合する（７１４）。コントローラとサーバとの間、およびメディア装置とサーバとの間の同様の一方向遅延時間を仮定すると、入力イベントおよびそれらの対応する表示イベントは、ほぼ同時に到着すべきである。したがって、入力イベントを、入力イベントが受信された時間に最も近い時間で受信された表示イベントと一致させることによって、意図判定モジュール４２８は、一致した表示イベントに関連付けられるフレームをトリガフレームとして分類することによって、ユーザの入力イベント意図を近似する。
【００８８】
不正確性は、上流リンク（例えば、リンク５０２および５０４、図５Ａ）における可変性に起因して、コントローラ１０２およびメディア装置１０６に関連付けられる上流接続における差異から生じ得る。例えば、メディア装置１０６は、有線接続を使用しているかもしれないが、コントローラ１０２は、追加の遅延時間を伴う無線接続を使用しているかもしれない。ある実施形態では、意図判定モジュール４２８は、（例えば、平均サーバ−メディア装置ＲＴＴを平均サーバ−コントローラＲＴＴと比較することによって）２つのリンク間の遅延時間の差を平均化することによって、これらの変数を考慮する。
【００８９】
図８は、ある実施形態に従うトリガフレーム決定処理８００を示す。処理８００では、サーバ１１４およびコントローラ１０２は、同期されたクロックを有する。この処理およびクロック同期（例えば、以下で説明する処理９００−１２００）を伴う他の処理では、ある実施形態は、ネットワーク時間プロトコル（ＮＴＰ）サーバを介して同期を達成する。ある実施形態では、前述のクロックのうちの１つまたは複数は、クロックドリフトのために周期的に再同期される。
【００９０】
処理８００は、上記の処理７００で説明されるように、コントローラ１０２がユーザ入力を検出し（８０２）、報告モジュール２２３が対応する入力イベントをサーバ１１４に送信する（８０４）ことから始まる。しかしながら、処理８００では、入力イベントは、タイムスタンプ（例えば、ＴＳ１）をさらに含む。サーバ１１４は、時間ＴＳ２において入力イベントを受信し（８０６）、（例えば、各タイムスタンプ間の差分の絶対値をとることによって）ＴＳ１とＴＳ２とを比較することによって、一方向入力-表示遅延時間を計算する（８０８）。サーバ１１４（例えば、意図判定モジュール４２８）は、そして、一方向のディスプレイからサーバまでの遅延時間をプロキシとして使用すること（例えば、一方向のディスプレイからサーバまでの遅延時間を一方向の入力から表示までの遅延時間に等しく設定すること）により、一方向のディスプレイからサーバまでの遅延時間を近似する（８１０）。
【００９１】
次いで、意図判定モジュール４２８は、一方向のサーバからディスプレイまでの遅延時間を近似する（８１２）。ある実施形態では、サーバからディスプレイまでの遅延時間は、プロキシとして、ディスプレイからサーバまでの遅延時間の時間平均された、または、移動する窓を使用すること（例えば、サーバからディスプレイまでの遅延時間をディスプレイからサーバまでの遅延時間に等しく設定すること）によって、近似される。あるいは、サーバからディスプレイまでの遅延時間は、最近測定されたサーバ−ディスプレイＲＴＴを用いて（例えば、ＲＴＴを１／２で割ることにより）、および、任意に（出力装置１０８の遅延時間を参照して上述したように）想定される表示ラグを追加することによって、近似される。
【００９２】
一方向のサーバからディスプレイまでの遅延時間（例えば、Ｄミリ秒）の値を決定すると、意図判定モジュール４２８は、トリガフレームを、ＴＳ１の前にメディア装置に送信されたフレームであると判定する（８１４）。
【００９３】
図９は、ある実施形態に従うトリガフレーム決定処理９００を示す。処理９００では、メディア装置１０６およびコントローラ１０２は、同期されたクロックを有する。ある実施形態では、サーバ１１４は、メディア装置のクロック、コントローラのクロック、または両方に同期されるクロックも有する。
【００９４】
処理９００は、コントローラ１０２がユーザ入力を検出し（９０２）、報告モジュール２２３が、上述の処理８００で説明されたようにタイムスタンプＴＳ１を有する対応する入力イベントを送信する（９０４）ことから開始する。サーバ１１４は、入力イベントを受信し（９０６）、応答フレームをレンダリングし（９０８）、現在のゲーム状態が入力イベントをトリガしたと仮定するか、または過去のゲーム状態が入力イベントをトリガした（たとえば、所定量だけオフセットした）と仮定する。サーバ１１４は、タイムスタンプＴＳ１を応答フレームに（例えば、フレームのメタデータに）含め、これをメディア装置１０６に送信する。メディア装置１０６は、応答フレームを受信し（９１０）、応答フレームを第２のタイムスタンプ（例えば、ＴＳ２）でユーザに表示させる。メディア装置１０６（例えば、遅延時間計算モジュール３２６）は、２つのタイムスタンプ間の差を測定し（９１２）、ユーザがコントローラ１０２上で入力を入力した時点から、ユーザがディスプレイ１０８上で対応する応答を見た時点までの（本明細書では、「親指からディスプレイまでの遅延時間」と称される）遅延量を決定する。ある実施形態では、メディア装置１０６は、タイムスタンプデータを遅延時間データ３３４として記憶し、遅延時間計算モジュール３２６は、上述の様々な遅延時間を計算するために、記憶されたタイムスタンプデータにアクセスする。ある実施形態では、遅延時間計算モジュール３２６は、トリガフレームをより良く近似するために、親指からディスプレイまでの遅延時間を他の既知の（例えば、１つまたは複数の処理７００から１２００の）遅延時間と組み合わせる。
【００９５】
図１０は、ある実施形態に従うトリガフレーム決定処理１０００を示す。処理１０００において、メディア装置１０６およびコントローラ１０２は、同期されたクロックを有する。ある実施形態では、サーバ１１４も、メディア装置のクロック、コントローラのクロック、または両方に同期されるクロックを有する。
【００９６】
処理１０００は、サーバ１１４がタイムスタンプＴＳ１で第１のフレームをレンダリングし（１００２）、フレームに含まれる（例えば、フレームのメタデータに含まれる）タイムスタンプＴＳ１でフレームをメディア装置１０６に送信することによって開始する。メディア装置１０６は、フレームを受信し（１００４）、タイムスタンプＴＳ２でフレームを表示させる。メディア装置（例えば、遅延時間計算モジュール３２６）は、２つのタイムスタンプＴＳ１およびＴＳ２を比較し（１００６）、一方向のサーバからメディア装置までの遅延時間を直接決定し、報告モジュール３２５は、決定された一方向のサーバからメディア装置までの遅延時間をサーバ１１４に報告する（１００８）。ある実施形態では、報告は、第１のフレームに対応する表示イベントに含まれる。サーバ１１４は、サーバからメディア装置までの遅延時間を受信し、意図判定モジュール４２８は、トリガフレームをより良く近似するために、それを他の既知の（例えば、最近のメディア装置からサーバまでの遅延時間に関するデータなどの１つまたは複数の処理７００〜１２００からの）遅延時間と比較する（１０１２）。ある実施形態では、表示イベントは、対応する入力イベントに近接して到着すると仮定され得るので、処理１０００は、コントローラ１０２がユーザ入力を検出し（１０１４）、コントローラの報告モジュール２２３が、検出されたユーザ入力の入力ＩＤを含む入力イベントをサーバ１１４に送信する（１０１６）ことをさらに含む。サーバの意図判定モジュール４２８は、任意に、トリガフレームをより良く近似するために、上記処理７００に記載されるように、入力イベントを最も近い表示イベントと一致させる。
【００９７】
図１１は、ある実施形態に従うトリガフレーム決定処理１１００を示す。処理１１００において、メディア装置１０６およびコントローラ１０２は、同期されたクロックを有する。ある実施形態では、サーバ１１４は、メディア装置のクロック、コントローラのクロック、または両方に同期されるクロックも有する。
【００９８】
処理１１００は、処理１０００と同様に、サーバ１１４（１１０２）がタイムスタンプＴＳ１で第１のフレームをレンダリングすることから始まる。しかしながら、処理１１００において、サーバ１１４は、フレームの送信にタイムスタンプを含めることができない場合がある。その場合には、サーバ１１４は、タイムスタンプＴＳ１を伴わずに第１のフレームを送信する。メディア装置１０６は、第１のフレームを受信し（１１０４）、タイムスタンプＴＳ２で第１のフレームを表示させる。次いで、メディア装置１０６（たとえば、報告モジュール３２５）は、単独で、または上述のディスプレイイベント送信とともに、タイムスタンプＴＳ２をサーバ１１４に報告する（１１０６）。サーバ１１４はタイムスタンプＴＳ２を受信し（１１０８）、サーバの意図判定モジュール４２８は、サーバからメディア装置までの遅延時間を直接測定するために、タイムスタンプＴＳ２をタイムスタンプＴＳ１と比較する（１１１０）。ある実施形態では、意図判定モジュール４２８は、トリガフレームをより良く近似するために、サーバからメディア装置までの遅延時間を（例えば、最近のメディア装置からサーバまでの遅延時間に関するデータなどのように、１つまたは複数の処理７００−１２００からの）他の既知の遅延時間と比較する（１１１２）。ある実施形態では、表示イベントは、対応する入力イベントに近接した時間に到着すると仮定され得るので、処理１１００は、コントローラ１０２がユーザ入力を検出すること（１１１４）と、コントローラの報告モジュール２２３が、検出されたユーザ入力の入力ＩＤを含む入力イベントをサーバ１１４に送信すること（１１１６）とをさらに含む。サーバの意図判定モジュール４２８は、任意に、トリガフレームをより良く近似するために、上記処理７００に記載されるように、入力イベントを最も近い表示イベントと一致させる。
【００９９】
図１２は、ある実施形態に従うトリガフレーム決定処理１２００を示す。処理１２００において、メディア装置１０６およびコントローラ１０２は、同期されたクロックを有する。ある実施形態では、サーバ１１４も、メディア装置のクロック、コントローラのクロック、または両方に同期されたクロックを有する。
【０１００】
処理１２００は、大部分のテレビがリップシンク（テレビの画像遅延時間に一致するように音声信号を遅延させ、例えばＨＤＭＩ（登録商標）１．３ｂを介して受信機と調整する）が得意である場合、音声信号を使用してメディア装置から眼球までの遅延時間を測定することができるという仮定を利用する。ある実施形態では、サーバ１１４は、初期化時（例えば、ログインまたはセットアップ処理中）に別個の音声トーンを第１のタイムスタンプ（たとえば、ＴＳ１）でメディア装置１０６に送信し（１２０２）、メディア装置１０６は、音声トーンを第２のタイムスタンプ（たとえば、ＴＳ２）で出力装置１０８上で再生させる（１２０４）。あるいは、メディア装置１０６は、サーバ１１４によって促されることなく初期化時に（ＴＳ２で）、別個の音声トーンを独立して再生する（１２０４）。音声トーンを再生すると、メディア装置（例えば、報告モジュール３２５）は、第２のタイムスタンプＴＳ２を含む報告をサーバ１１４に送信する（１２０６）。音声トーンがコントローラ１０２に到達すると、コントローラ１０２は、第３のタイムスタンプ（例えば、ＴＳ３）で（たとえば、埋め込まれたマイクを用いて）音声トーンを検出し（１２０８）、第３のタイムスタンプＴＳ３を含む報告をサーバ１１４に送信する（１２０４）。
【０１０１】
サーバ１１４は、メディア装置１０５からＴＳ２を含む「音声送信」報告、およびコントローラ１０２からＴＳ３を含む「音声検出」報告を受信し（１２１２）、意図判定モジュール４２８は、タイムスタンプＴＳ２およびＴＳ３を比較して、出力装置からコントローラまでの遅延時間を判定する。ユーザがコントローラ１０２に近接していると仮定できるため、出力装置からコントローラまでの遅延時間は、出力装置から耳までの遅延時間と等価であると仮定できる。ある実施形態では、意図判定モジュール４２８は、音波の伝搬時間を考慮するために、表示装置１０８のスピーカからの所定の典型的な着座距離（たとえば、１０フィート）を、または、ユーザがプログラムした着座距離を仮定する。ある実施形態では、意図判定モジュール４２８は、表示ラグがセッション全体を通して固定されているという仮定により、表示装置から耳までの遅延時間を再測定しない。ある実施形態では、意図判定モジュール４２８はまた、トリガフレームをより良く近似するために、ＴＳ１をＴＳ２および／またはＴＳ３と比較し、それぞれのエンドツーエンド遅延時間を決定する。
【０１０２】
ある実施形態では、音声信号は、符号化フレームＩＤおよび／または符号化タイムスタンプＴＳ１を含み、サーバ１１４は、たとえば、高周波音声モデム（たとえば、ホイッスル）を介して音声信号を周期的に送信し、コントローラ１０２は、上述のように音声信号を聞く。あるいは、メディア装置１０６は、フレームＩＤおよび／またはタイムスタンプＴＳ１（例えば、処理１０００または１１００のいずれかによる）を受信し、出力装置１０８からの伝搬のために音声トーンを局所的に合成する。この実施形態では、コントローラは、トリガフレーム自体の識別情報（例えば、フレームＩＤおよび／またはタイムスタンプＴＳ１）を直接受信し、識別されたトリガフレームをサーバ１１４に直接報告することに進む。ある実施形態では、音声モデム遅延を考慮するために補正が実行される。
【０１０３】
ある実施形態では、音声トーンの代わりに、サーバ１１４は、フレームおよび／またはタイムスタンプＴＳ１を識別する画像パターンでフレームをレンダリングし（１２０２）、コントローラ１０２上のカメラまたは光検出器は、表示装置１０８上の画像パターンを検出する（１２０８）。他の工程は上記と同様である。ある実施形態では、画像パターンは、（例えば、測定された強度の基準値と比較した）強度の変動を含む。
【０１０４】
図１３は、ある実施形態に従う遅延時間検出および補償処理１３００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）において実行され得る。ある実施形態では、サーバは、１つまたは複数のプログラムと、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリとを含み、当該１つまたは複数のプログラムは、処理１３００を実行するための命令を含む。ある実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、当該１つまたは複数のそれぞれのプログラムは、１つまたは複数のプロセッサを備えるサーバによって実行されると、当該サーバに処理１３００を実行させる命令を含む。
【０１０５】
処理１３００は、図６のステップ６０６を参照して説明したように、遠隔地（例えば、ローカルネットワーク１１０、図１および図５Ａ）におけるトリガフレームの表示に応答して、サーバ１１４が遠隔地（例えば、ローカルネットワーク１１０、図１および図５Ａ）に位置するゲームコントローラ１０２から入力イベントを受信すると開始する。ある実施形態では、サーバは、現在のゲーム状態（たとえば、図５Ｂの状態Ｔ２）で動作するゲームセッション中に入力イベントを受信する。入力イベントは、ゲームセッション中にゲームコントローラとのユーザ対話（例えば、起動またはコントロール・キーの操作）によって生成されたユーザコマンドを含む。
【０１０６】
入力イベントは、遠隔地のユーザに以前に送信されたフレーム（「トリガフレーム」）が表示されていることに応答してコントローラによって生成されるが、入力イベントは、以前に送信されたフレームのうちのどれがトリガされたフレームであったかを必ずしも識別しなくてもよいことに留意することが重要である。したがって、当該処理は、上記図６のステップ６０８を参照して説明したように、サーバがトリガフレームを決定することに続く（１３０４）。より具体的には、サーバ（例えば、意図判定モジュール４２８）は、サーバが入力イベントを受信する前にゲームセッション中にサーバによってメディア装置１０６に複数の以前に送信されたフレームのうちのどれがユーザ対話（例えば、図５Ｂの５１０-１）中に遠隔地で表示されたフレームであるかを決定する。様々な実施形態では、サーバは、上で図７〜１２を参照して説明した処理のうちの１つまたは複数を実行することによって、トリガフレームを決定する。
【０１０７】
当該処理は、図６のステップ６１０を参照して説明したように、サーバが、決定されたトリガフレームを使用して、当該トリガフレームに関連付けられるゲーム状態（「トリガ状態」）を決定することに続く。ある実施形態では、入力イベントがサーバに到達するのにかかる時間がどれだけ長いかに応じて、現在のゲーム状態は、トリガ状態を超えて既に進行していてもよく、したがって、トリガ状態（たとえば、図５Ｂの状態Ｔ１）は、現在のゲーム状態の前のゲーム状態（たとえば、図５Ｂの状態Ｔ２）となるであろう。
【０１０８】
トリガ状態を決定すると、ゲームサーバは、図６のステップ６１２を参照して説明したように、（ｉ）トリガ状態、および（ｉｉ）入力イベントに含まれるかまたは入力イベントによって記述されたユーザコマンドに従ってゲームプレイ出力を処理する（１３０８）。具体的には、サーバが受信する各入力イベントについて、サーバは、ユーザがコマンドを開始することをトリガしたゲーム状態の状況で各コマンドをより正確に処理し、それによって各コマンドの背後にあるユーザの意図に適合し、意図を満たし、および／または意図を充足するために、入力イベントに記述されているそれぞれのユーザコマンドをそれぞれのトリガ状態と一致させる。ある実施形態では、ゲームプレイ出力を処理するために、ゲームサーバは、特に、上述のように、２つの状態が矛盾している場合、現在のゲーム状態をトリガ状態と調整しなければならない。
【０１０９】
サーバは、上記図６のステップ６１４を参照して説明したように、ゲームプレイ出力を示す応答フレームをレンダリングし（１３１０）、上記図６のステップ６１６を参照して説明したように、表示のための結果フレームを遠隔地のユーザに送信する（１３１２）。
【０１１０】
ゲームプレイチューニングに対する遅延時間調整
応答時間は、ユーザ経験に直接影響を与えるオンラインゲームの重要な態様である。応答時間を記述する１つの方法は、ユーザがアクションを実行する瞬間（例えば、ゲームコントローラの「ジャンプ」ボタンを押すこと）と、そのアクションの結果がユーザに表示される瞬間（例えば、デジタルレンダリングされたプレイヤーが画面上でジャンプすること）との間の時間量である。応答時間は、上述の様々な遅延時間のもとのいずれかによって影響を受け得る。遅延時間のもとの大部分は、２つのカテゴリ、すなわち、処理遅延時間およびネットワーク遅延時間に分類される。
【０１１１】
処理遅延時間は、特定のゲームまたはオンラインゲームセッション専用の処理リソースの量および品質の結果であり、ユーザ入力を処理するために、および、対応する応答をレンダリングするために割り当てられたプロセッサまたは処理コアの数、速度、および効率によって影響を受け得る。処理遅延時間は、ユーザ入力の複雑さ、または、ゲームセッションにおいて他のユーザによって処理されている同時入力の数および複雑さによって、さらに影響を受け得る。
【０１１２】
ネットワーク遅延時間は、オンラインゲームセッションをサポートするために使用される通信ネットワーク（たとえば、１１０および／または１１２）の品質の結果であり、干渉などの任意の数の外部要因によって、または様々なレベルのトラフィックおよび利用可能な帯域幅などの内部要因によって影響を受け得る。ユーザ（例えば、１０２）と特定のゲームサーバシステム（例えば、１１４）との間の距離が増加するにつれて、ゲームセッションをサポートするために必要とされる物理ネットワーク要素の量が増加し、そしてそのことは、より多くのネットワーク遅延時間が導入される可能性を増加させる。例えば、特定のゲームサーバを収容するデータセンタから数マイル離れて位置する第１のユーザ（例えば、１０２Ａ）は、ゲームサーバによってホストされるオンラインセッションの間に、同じセッションに参加するが当該データセンタから通りを隔てて位置する第２のユーザ（例えば、１０２Ｂ）よりも長い遅延時間を経験しし得る。
【０１１３】
処理遅延時間およびネットワーク遅延時間は、しばしばゲーム開発者の影響範囲外であるが、さらに他の種類の遅延時間が、ユーザ経験を最適化するために開発者によって意図的に追加および調整されてもよい。開発者によって付加される遅延時間を調整することによって、適切に装備されたゲームサーバは、制御不能な種類の遅延時間（例えば、処理およびネットワーク遅延時間）によって導入される負の効果の多くを打ち消すことができる。
【０１１４】
さらに、遅延時間調整は、現実のライフアクションにゲームアクションをモデリングすることによってユーザ経験を最適化する働きをする。例えば、手のわずかな動きに反応しすぎるコンピュータマウスのように、ゲームコンテキストにおける特定のユーザ入力は、他のものよりも様々な遅延時間量の影響を受けやすい。例えば、アイスホッケーゲームでは、移動に関連付けられる入力に対する応答時間は、競合応答時間を保証する（例えば、相手によってチェックされることを回避する）のに十分に敏感であるが、正確な移動を防ぐ（例えば、過剰補償を伴わずにシュートを準備する）のにそれほど敏感ではないように、注意深く調整されるべきである。さらに、異なるタイプの入力は、異なる量の応答時間を保証し得る。たとえば、プレイヤーの動きを制御するための入力に関連付けられる応答時間よりも速い応答時間のために、パックをシュートおよびブロックするための入力に関連付けられる遅延時間値が調整されてもよいが、これは、プレイヤーを位置に移動させ、シュートを準備するために、たとえばいつシュートするかを正確に決定するよりも、より高い精度が要求される可能性があるからである。
【０１１５】
ゲーム開発者は、様々な入力または入力の種類に対して応答時間を調整することができる。ある実施形態では、特定のゲームの応答時間値はプラットフォームによって異なるが、プラットフォームごとに当該応答時間は安定している。オンラインストリーミングを伴う実施形態では、応答時間は、ネットワーク条件および光の制約の速度に基づいて変化する。さらに、入力と応答との間を通過する時間量は、各ユーザについて、または時間とともに単一のユーザについてさえ、一貫しないので、上述の様々なタイプの処理およびネットワーク遅延時間は、応答時間の調整をより複雑にする。
【０１１６】
ゲームプレイの調整に関連して遅延時間を調整するための方法およびシステムの様々な実施形態が以下で説明される。本明細書で説明される様々な実施形態は、ネットワーク状況に基づく性能の変動をユーザにはあまり目立たなくする働きをし、より良いユーザ経験をもたらす。ある実施形態では、ゲームがホストされ、地理的に離れたサーバ（たとえば、１１４）内のコンピュータから出てローカルクライアント（たとえば、１０２Ａ）に表示されるゲームストリーミングシステム上で、ゲームは、入力イベントを登録することと、対応する応答をプレイヤーに表示することとの間でレンダリングされるフレーム数を動的にシフトする。特定のゲームの場合、開発者は、入力イベント（例えば、移動、アクション、ボタン押下、コントローラの向き変更など。）の各タイプに対して、理想的なまたは意図されたフレーム数または入力と応答との間の時間量（例えば、ミリ秒）を定義する。ある実施形態では、ゲームシステムは、各フレームについて、既存の入力遅延時間条件またはどのユーザが見ているかを表す最近の時間帯のいずれかを報告するＡＰＩを提供する。ある実施形態では、１人または複数のユーザが、可変の入力遅延時間条件下でそれぞれのゲームコントローラ（本明細書では、「クライアント装置」または「コントローラ」とも称される）上でゲームをプレイする。ある実施形態では、ユーザは、ジョイスティックを操作すること、ボタンを押すこと、アフォーダンスを選択すること、移動すること、または、ゲームコントローラなどの入力装置を操作することによって、入力イベントを生成する。入力イベントを生成すると、ユーザに関連付けられたコントローラは、ゲームを実行するサーバ（例えば、１１４）にこの入力イベントを送信する。
【０１１７】
ある実施形態では、サーバは、（たとえば、ストリーマＡＰＩに問い合わせることによって）、既存の遅延時間の量、すなわち、最も最近の値か、入力遅延時間（たとえば、ネットワーク遅延時間）の時間帯付けされた最近の推測値のいずれかを問い合わせる。サーバは、入力イベントに対応する応答を反映するフレーム（本明細書では「応答フレーム」と呼ばれる）を生成する前に通過するフレーム（本明細書では「中間フレーム」と呼ばれる）の数を減少または増加させる。サーバは、中間フレーム、続いて応答フレームをネットワークを通じてメディア装置に送信する。応答フレームをメディア装置に送信すると、メディア装置は、応答フレームを（例えば、出力装置１０８上で）ユーザに表示する。ある実施形態では、時間−レンダリングから加算または減算されるフレームにおけるデルタ（たとえば、中間フレームの数）は、現在のセッションにおいて表示されている（たとえば、フレーム／sにおける）フレームレートに基づいて計算される。デルタの変化は、入力と応答との間を通過する時間量を減少または増大させ、それにより、応答時間が、特定のタイプの入力に対する理想的なまたは意図された応答時間にできるだけ近くなる。異なる入力イベントは、理想的な応答時間を満たすために異なる量の調整を必要とする可能性があるので、本明細書で開示される実施形態は、フレームの全体的な遅延またはバッファリングを必要としないことに留意することが重要である。むしろ、本明細書で開示される実施形態の態様は、入力と対応する応答との間のフレーム数のイベント当たりの増加または減少に焦点を当てる。
【０１１８】
上述したように、ゲーム開発者は、異なる種類の入力イベントに対して、理想的なまたは意図された数のフレームまたはそれぞれの入力とそれぞれの応答との間の時間量を定義してもよい。ある実施形態では、これらの関係は、サーバシステム１１４（図４参照）に記憶された応答時間設定４６２において定義される。図１４Ａおよび図１４Ｂは、（本明細書では、「予想遅延時間値」または「目標遅延時間値」とも称される）理想的なまたは意図された応答時間に関連付けられる（本明細書では「コマンド」とも称される）ユーザ入力に対する例示的な応答時間設定４６２である。ある実施形態では、特定のゲームに対するコマンドのインデックスは、対応するコマンドタイプ（また、「予想遅延時間タイプ」または「遅延時間カテゴリ」とも称される）とともにテーブル（たとえば、１４１２）に格納される。例えば、「かわす（duck）」および「シュート」コマンドは、第１のカテゴリまたはコマンドタイプ（例えば、「タイプ１」）に属し、「歩く」および「ジャンプ」は、第２のカテゴリまたはコマンドタイプに属する、等である。ある実施形態では、コマンドタイプのインデックスは、対応する予想遅延時間値とともにテーブル（たとえば、１４１４）に格納される。例えば、「タイプ１」コマンドは、１６ミリ秒の予想される（例えば、理想的または意図される）遅延時間に関連付けられており、「タイプ２」コマンドは、４０ミリ秒の予想遅延時間に関連付けられている、等である。あるいは、１つのテーブル（例えば１４１６）を使用して、コマンドを予想遅延時間に直接関連付ける。例えば、「かわす」および「シュート」コマンドは、２０ミリ秒の予想遅延時間に関連付けられ、「移動」および「ジャンプ」コマンドは、４０ミリ秒の予想遅延時間に関連付けられる、等である。ある実施形態では、テーブル１４１２、１４１４、および／または１４１６は、サーバシステム１１４のメモリ１４６（たとえば、応答時間設定４６２）に格納される。
【０１１９】
図１４Ｃは、サーバシステム１１４の装置／ネットワーク評価モジュール４４４の例示的な実施形態である。装置／ネットワーク評価モジュール４４４は、特定のゲームセッションに参加している各ユーザ／コントローラに対するネットワーク遅延時間情報１４２０を取得する。ある実施形態では、ネットワーク遅延時間情報は、対応する応答フレームがサーバからメディア装置に送信されるのにかかる時間量と組み合わされて、ユーザ入力がコントローラからサーバに送信されるのにかかる時間量に関連付けられた、ラウンドトリップタイミング（ＲＴＴ）情報である。ある実施形態では、ＲＴＴ情報は、サーバがユーザ入力を処理し、対応する応答フレームを生成するのにかかる時間量をさらに含む。追加的または代替的に、ネットワーク遅延時間情報は、上述の図５〜１２に関して説明された遅延時間値のいずれかである。たとえば、ある実施形態では、ＲＴＴ情報がネットワーク評価モジュール４４４に容易に利用可能でない場合、様々な一方向の通過時間が上述のように決定され、ネットワーク評価モジュール４４４は、未知の遅延時間情報（例えば、コントローラからサーバまでサーバからメディア装置までの遅延時間）を決定するために、決定された通過時間（例えば、一方向のコントローラからサーバまでの遅延時間および一方向のサーバからメディア装置までの遅延時間）を組み合わせる。
【０１２０】
図１５は、ある実施形態に従う、例示的なオンライン対話型ゲーム環境１５００である。ゲーム環境１５００は、ゲーム環境１００（図１）および５００（図５Ａ）に類似しており、対応する構成要素には同様の番号が付されている。
【０１２１】
時間ｔ１において、コントローラ１０２Ａは、入力に関連付けられたユーザコマンド（例えば、テーブル１４１２からのコマンド）を、ネットワーク（例えば、１つまたは複数のローカルおよび／または非ローカル通信ネットワーク１１０／１１２）を介してサーバ１１４に送信する。ある実施形態では、ユーザコマンドは、ユーザがゲームコントローラ上のコントロールを操作すること（例えば、ボタンを押すこと、ジョイスティックを動かすこと、コントローラ自体を回転させること等）の、またはそうでなければ、ゲームコントローラと対話したことの結果である。ゲームコントローラを操作してユーザコマンド（すなわち、「トリガ」）を発行するユーザの動機は、プレイされる特定のゲームに基づく。例えば、ユーザがオンラインアイスホッケーゲームをプレイしている場合、ユーザは、ゴール内にパックをシュートするために、ゴールの開口部を利用して「シュート」ボタンを押すことを決定することができる。ある実施形態では、トリガ（たとえば、ゴールの開口部）は、サーバ１１４から通信され、コントローラ１０２Ａのユーザによってゲームプレイを見るために使用される出力装置（たとえば、１０８）上にレンダリングされる画像によって引き起こされる。したがって、画像（例えば、ゴールの開口部を示す画像フレーム）を見ると、ユーザは、適切なコマンドを発行する（たとえばパックをシュートする）ことによって応答するように動機付けられる。
【０１２２】
時間ｔ２において、サーバ１１４はコマンドを受信する。ｔ１とｔ２との間の時間量は、上述のネットワーク遅延時間に関連付けられる様々な因子の関数である。サーバは、コマンドを受信すると、コマンドに従って現在のゲーム状態を更新して、更新されたゲーム状態を反映する応答フレームを生成することによって、当該コマンドを処理する。ある実施形態では、コマンドを処理することは、どのコマンドが受信されたかを決定することと、コマンドのタイプを決定することと、ネットワーク遅延時間値を決定することまたは更新することと、（例えば、テーブルを参照し、コマンドに関連付けられる予想遅延時間を決定し、予想遅延時間をネットワーク遅延時間と比較することによって）ネットワーク遅延時間値および受信されたコマンドのタイプに基づいて導入すべき遅延時間の量を決定することと、決定された導入される遅延時間の量に基づいて（例えば、現在のフレームレートに、予想遅延時間とネットワーク遅延時間との間の差を掛けることにより）１つまたは複数の中間フレームを生成することとを含む。
【０１２３】
時間ｔ３において、サーバ１１４は、中間フレーム（もしあれば）および応答フレームを、出力装置１０８上に表示するためにネットワーク１１０／１１２を介してメディア装置１０６に送信する。ｔ２とｔ３との間の時間量は、上述の処理遅延時間に関連付けられる様々な因子の関数である。ある実施形態では、処理遅延時間は、応答フレームを生成するための処理によって影響を受ける。ある実施形態では、応答フレームを生成することは、（ｉ）応答を処理すること（例えば、移動パックを示す一連の画像フレームのうちの最初の画像フレームが、ゲームシーンにおける各プレイヤーの現在位置、およびシュートの軌跡およびプレイヤーの強さなどの他の因子に基づいて、どのようになるかを決定すること）と、（ｉｉ）応答を反映するフレームをレンダリングすること（例えば、プレイヤーがパックをシュートしていることを示す一連のフレームのうちの最初のフレームをレンダリングすること）と、（ｉｉｉ）フレームを符号化することと、（iv）ネットワークにわたるストリーミングのためにフレームをパケット化することとを含む。ある実施形態では、応答フレームは、所定のフレームレートで送信されるフレームのシーケンスのうちの１つである。ある実施形態では、所定のフレームレートは、たとえば、レート制御処理を使用することによって、オンラインゲームセッションのネットワーク特性（たとえば、利用可能な帯域幅）に従って決定され、所定のフレームレートは、ネットワーク遅延時間値が変わったと判断しても維持される。例えば、ユーザコマンドを受信する前の時点（例えば、ｔ２以前）における所定のフレームレートは、対応する応答フレームが送信される時点（例えば、ｔ３）における所定のフレームレートと同じである。言い換えれば、所定のフレームレートは、（たとえば、より多くの中間フレームを挿入することによって）どれだけの遅延時間が追加されるか、または、（例えば、より少ないまたは全く挿入されない中間フレームによって）減算されるかに関わらず、一定のままである。イベント毎の遅延時間調整のための全体的なフレームレートを変更しないことによって、ゲームプレイの他の態様（例えば、他のゲームプレイイベントおよび対話、視聴品質など）は、遅延時間調整によって影響を受けないことにより、妨害されないまま進行し得る。
【０１２４】
時間ｔ４において、メディア装置１０６は、応答フレーム１６１０を受信し、応答フレームを出力装置１０８に表示させる。ｔ３とｔ４との間の時間量は、上述のように、ネットワーク遅延時間に関連付けられる様々な因子の関数である。ある実施形態では、応答フレームが通過するネットワーク経路は、ユーザコマンドが通過するネットワーク経路とは異なる。様々な実施形態では、ネットワーク遅延時間値は、一方向のコントローラからサーバまでの通過時間（例えば、ｔ１とｔ２との差）、一方向のサーバからメディア装置までの通過時間（例えば、ｔ３とｔ４との差）、および／または処理遅延（たとえば、ｔ２とｔ３との間）に基づく。
【０１２５】
図１６は、ある実施形態に従う、ディスプレイ１０８上にレンダリングされるフレームの例示的なシーケンスである。この例では、フレーム１６１０−１〜１６１０−６は、５０フレーム／秒の所定のフレームレート（２０ミリ秒あたり１フレーム）で送信および表示される。また、簡単のため、ネットワーク遅延時間は無視できるものとする。図１６に示されるタイムスタンプは、各それぞれのフレームがサーバ１１４によって生成される時間である。t=０ミリ秒で、サーバはフレーム１６１０−１を生成し、フレーム１６１０−１は、２人のユーザおよびそれらのそれぞれのコントローラ（例えば、１０２Ａおよび１０２Ｂ）によって制御される２人のアイスホッケープレイヤーＡおよびＢを示す。プレイヤーＡはパックを有し、プレイヤーＢはゴールにいる。このとき、サーバは、プレイヤーＡを制御しているコントローラから「移動」コマンドを受信する。この特定の例において、「移動」コマンドは、（当該プレイヤーの左への）軌跡も含む。「移動」コマンドを受信すると、サーバ（例えば、遅延時間調整モジュール４３０）は、（例えば、表１４１２および１４１４、または表１４１６を参照することによって）「移動」コマンドが４０ミリ秒の予想遅延時間に関連付けられているコマンドタイプであると判定する。所定のフレームレートは２０ミリ秒当たり１フレームであり、応答フレームを生成する前にサーバは４０ミリ秒の予想遅延時間を満たさなければならないので、遅延時間調整モジュール４３０は、４０ミリ秒（予想遅延時間）−２０ミリ秒（実遅延時間）が２０ミリ秒に等しく、また、２０ミリ秒×１／２０フレーム／ミリ秒（フレームレート）が１フレームとなるため、１つの中間フレームをプレースホルダとして生成すべきと判断する。したがって、ＧＰＵ１４０は、ｔ＝２０ミリ秒で１つの中間フレーム１６１０−２を生成（またはそうでなければ、処理されるか、レンダリングされるか、または符号化されるように）し、次いで、ｔ＝４０ミリ秒で応答フレーム１６１０-３を生成する。ある実施形態では、エンコーダ１４２は、１つのスキップフレームまたは一連のスキップフレームとして、１つまたは複数の中間フレームを符号化する。
【０１２６】
図１６の例を続けると、プレイヤーＡの移動を見ると、プレイヤーＡを制御するユーザは、プレイヤーＢを制御するユーザがシュートをブロックする機会を有する前に、パックを直ちにシュートすることを決定する。サーバは、ｔ＝１６０ミリ秒で、フレーム１６１０−４の生成と同時に「シュート」コマンドを受信する。遅延時間調整モジュール４３０は、（例えば、表１４１２および１４１４、または表１４１６を参照することによって、）「シュート」コマンドが２０ミリ秒の予想遅延時間だけに関連付けられていると判断する。所定のフレームレートは２０ミリ秒当たり１フレームであり、応答フレームを生成する前にサーバは２０ミリ秒の予想遅延時間をはるかに満たすので、遅延時間調整モジュール４３０は、２０ミリ秒（予想遅延時間）−２０ミリ秒（実遅延時間）が０ミリ秒に等しく、０ミリ秒×１／２０フレーム／ミリ秒（フレームレート）が０フレームに等しいため、中間フレームが生成されるべきでないと判断する。したがって、ＧＰＵ１４０は、中間フレームをレンダリングすることなく、ｔ＝１８０ミリ秒で、２０ミリ秒後に応答フレーム１６１０-５を生成（またはそうでなければ、処理されるか、レンダリングされるか、または符号化されるように）する。応答フレーム１６１０−５は、「シュート」コマンドの結果を示す一連の応答フレームのうちの１番目のフレームであり、フレーム１６１０−６は、ｔ＝２００ミリ秒における一連の応答フレームのうちの２番目のフレームである。
【０１２７】
図１７および図１８は、どのくらいの遅延時間を導入するかを決定するための例示的な技法を示す図である。図中、中間フレームは無地で示され、応答フレームはストライプで示されている。
【０１２８】
図１７では、サーバは、２つの異なるネットワークを介して、または２つの異なる遅延時間値を有する同じネットワークを介して、同じコマンドを受信する。ネットワーク遅延時間１７２０は、ネットワーク遅延時間１７１０より低い。結果として、対応する応答フレームは、導入される遅延時間がなければ、異なる時間にメディア装置に返信されることになる。より低いネットワーク遅延時間１７２０で追加の中間フレームをシナリオにレンダリングすることにより、サーバは、ネットワーク遅延時間の量に関係なく、予想される全体の遅延時間（例えば、応答時間）が一貫することを確実にする。異なる観点から言えば、応答時間は、（ｉ）別のシナリオに対してより多くの中間フレーム（シナリオ１７２０）を生成することによって、（ｉｉ）別のシナリオに対してより少ない中間フレーム（シナリオ１７１０）を生成することによって、または、（ｉｉｉ）（ｉ）および（ｉｉ）の組み合わせによって、一貫性が維持される。
【０１２９】
図１８では、サーバは、異なる量の処理遅延時間を必要とする２つの異なるコマンドを受信する。例えば、「走る」コマンドは、第１の処理遅延時間量１８１０を必要とし、一方、よりリソース集約的な「パン」コマンドは、第１よりも多い第２の処理遅延時間量１８２０を必要とする。各コマンドが同じ予想遅延時間に関連付けられており、（同様のネットワーク遅延時間を仮定して）各コマンドが同時に受信された場合、サーバは、（ｉ）他のシナリオに関してより多くの中間フレーム（シナリオ１８１０）を生成することによって、（ｉｉ）他のシナリオに関してより少ない中間フレーム（シナリオ１８２０）を生成することによって、または（ｉｉｉ）（ｉ）と（ｉｉ）の組み合わせによって、処理遅延時間の差を考慮する。
【０１３０】
ある実施形態では、遅延時間調整モジュール４３０は、（ｉ）ユーザコマンドと対応する応答フレームとの間の実際の遅延時間の量を決定または推定すること（例えば、上述のようにネットワーク遅延時間を測定し、任意に処理遅延時間を考慮に入れること）によって、（ｉｉ）予想遅延時間を決定することによって（例えば、上述の応答時間設定４６２を参照することによって）、および（ｉｉｉ）実際の遅延時間と予想遅延時間との間の差を決定することによって、導入される遅延時間の量を決定する。実際の遅延時間が予想される（意図された）遅延時間よりも短い場合、サーバは追加の遅延時間を導入する。逆に、実際の遅延時間が予想される（意図された）遅延時間より長い場合、サーバは追加の遅延時間を除去する（または全く導入しない）。ある実施形態では、前述のシナリオの各々に対処するために、サーバは、導入される遅延時間のデフォルト量を常に加算し、導入される遅延時間の加算および減算の両方が可能となる。導入される遅延時間の量を決定した後、遅延時間調整モジュールは、導入される遅延時間の量をフレームレートに乗じることによって、レンダリングすべき中間フレームの数を決定する。ある実施形態では、遅延時間調整モジュール４３０は、次の方程式を使用して、レンダリングされるべき中間フレームの数を決定する：中間フレームの数＝フレームレート×（予想遅延時間−実際の遅延時間）。実際の遅延時間が予想遅延時間より高いシナリオの場合、中間フレームの数は負である。したがって、中間フレームの基準値が常に存在する実施形態では、遅延時間調整モジュール４３０は、基準値から中間フレームの適切な数を減算する。しかしながら、中間フレームの基準値が存在しない実施形態では、遅延時間調整モジュール４３０は、単に、そのようなシナリオでは中間フレームをレンダリングさせない。
【０１３１】
ある実施形態では、導入される遅延時間の量は、推定される応答フレーム到着時間に基づいて決定される。例えば、応答フレームが、（例えば、上述のように決定されたネットワークおよび／または処理遅延時間値に基づいて）予想または意図された到着時間よりも早くメディア装置に到達すると予測される場合、サーバは、上で論じたように、追加の中間フレームをレンダリングする。逆に、応答フレームが予想または意図された到着時間より後にメディア装置に到達すると予測される場合、サーバは、上で論じたように、より少ない中間フレームをレンダリングする。ある実施形態では、遅延時間調整モジュール４３０は、次の方程式を使用して、レンダリングされるべき中間フレームの数を決定する：中間フレーム数＝フレームレート×（目標到着時間−予測到着時間）。予測到着時間が目標到着時間より遅いシナリオの場合、中間フレームの数は負である。したがって、中間フレームの基準値が常に存在する実施形態では、遅延時間調整モジュール４３０は、基準値から中間フレームの適切な数を減算する。しかしながら、中間フレームの基準値が存在しない実施形態では、遅延時間調整モジュール４３０は、単に、そのようなシナリオでは中間フレームをレンダリングさせない。
【０１３２】
図１９Ａは、ある実施形態に従う例示的なオンライン対話型ゲーム環境１９００である。ゲーム環境１９００は、ゲーム環境１５００に対応する例示的な実施形態であり、第１のユーザおよびサーバから離れたサイトに配置された第２のユーザのコントローラ１０２Ｂおよびメディア装置／出力装置１０６Ｂ／１０８Ｂが追加される。第１および第２のユーザは、両方とも同じゲームをプレイしている。この例では、第２のユーザとサーバとの間の距離は、第１のユーザとサーバとの間の距離よりも遠い。したがって、第２のユーザは、より多くのネットワーク遅延時間を経験する。また、この例では、説明を簡単にするために、各メディア装置１０６とディスプレイ１０８との間の表示遅れはゼロであるものとする。
【０１３３】
時間ｔ０において、第１のコントローラ１０２Ａは、ネットワーク１１０／１１２を介してサーバ１１４にユーザコマンド（例えば、「シュート」）を送信し（図１５参照）、当該コマンドは、時間ｔ２においてサーバに到達するのに４０ミリ秒かかる。サーバは、当該コマンドの処理に２０ミリ秒を要し、時間ｔ３に応答フレームを第１のメディア装置１０６Ａおよび第２のメディア装置１０６Ｂに送信する。応答フレームは、時間ｔ５で第１のメディア装置１０６Ａに到達するのに４０ミリ秒要し、時間ｔ６で第２のメディア装置１０６Ｂに到達するのに６０ミリ秒要する。したがって、（コントローラ１０２ＢでプレイヤーＢを制御している）第２のユーザは、（コントローラ１０２ＡでプレイヤーＡを制御している）第１のユーザがディスプレイ１０８Ａで応答フレームを見る２０ミリ秒後まで、ディスプレイ１０８Ｂで応答フレームを見ない。２０ミリ秒遅延の結果として、第２のユーザの応答時間は、不当に遅延され得る。さらに、プレイヤーＡは、第２のユーザがディスプレイ１０８Ｂ上で展開されるこれらのイベントを見る前に、得点することができ、その後のゲーム状態は、それに応じて更新されるかもしれない。
【０１３４】
図１９Ｂは、図１９Ａのタイムスタンプに対応するタイムスタンプを有する、ディスプレイ１０８Ａおよび１０８Ｂによってレンダリングされるスクリーンショット１９２０−１９２８を示す。プレイヤーＡの応答時間はプレイヤーＢの応答時間よりも２０ミリ秒速いので、プレイヤーＡはｔ５＝１００ミリ秒で応答フレーム１９２６を見るが、プレイヤーＢは２０ミリ秒後に応答フレーム１９２６を見る。結果として、ｔ６＝１２０ミリ秒において、プレイヤーＡは得点したが、プレイヤーＢの観点からは、ゲーム状態がサーバにおいて（例えば、プレイヤーＡのチームのスコアにポイントを追加することによって）既に更新されているにもかかわらず、プレイヤーＡのシュートをブロックする時間は依然として存在する。いくつかのシナリオでは、プレイヤーＢは、将来のフレームにおいてプレイヤーＡのシュートを首尾よくブロックするように見え、実際のゲーム状態と競合する期待されるゲーム状態を生成する。これらの種類の競合するゲーム状態は、上述の様々な実施形態による遅延時間を導入することによって回避することができる。
【０１３５】
図２０Ａおよび図２０Ｂは、例示的なゲーム環境１９００および対応するユーザビューを示すが、上で説明された様々な実施形態に従って追加された追加の中間フレームが追加されている。図２０Ａ／２０Ｂは、図１９Ａ／１９Ｂに対応し、相違点は丸で囲まれている。具体的には、追加の中間フレーム２０００を追加することによって、サーバは、２０ミリ秒の追加の遅延時間をプレイヤーＡの応答時間に導入し、それによって、応答フレーム１９２６をメディア装置１０６Ａおよび１０６Ｂに同時に到着させる。
【０１３６】
図２１は、ある実施形態に従う遅延時間調整処理２１００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、当該１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）において実行され得る。ある実施形態では、サーバは、１つまたは複数のプログラムと、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリとを含み、当該１つまたは複数のプログラムは、処理２１００を実行するための命令を含む。ある実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、当該１つまたは複数のそれぞれのプログラムは、１つまたは複数のプロセッサを備えるサーバによって実行されると、当該サーバに処理２１００を実行させる命令を含む。
【０１３７】
処理２１００は、オンラインゲームセッションに関連付けられた第１のクライアント装置（例えば、ゲームコントローラ１０２Ａ）から第１のコマンド（例えば、「シュート」）を受信すること（２１０２）と、第１のコマンドのタイプ（例えば、表１４１２の「タイプ１」）と当該第１のコマンドのタイプに関連付けられる第１の予想される応答遅延時間（例えば、表１４１４または表１４１６の「２０ミリ秒」）とを決定すること（２１０４）と、（例えば、第１のゲームコントローラとサーバとの間の往復時間１４２０-１を測定および／または推定することによって、または、図５〜１２を参照して上述した他の方法のいずれかによって）ネットワーク遅延時間を決定すること（２１０６）と、ネットワーク遅延時間と第１の予想遅延時間との比較に基づいて、第１の導入される遅延時間（例えば、決定されたネットワーク遅延時間のような他の種類の遅延時間を補償するために、意図的に追加および／または調整された遅延時間）を決定すること（２１０８）と、所定のフレームレートで送信されると、第１の導入される遅延時間に対応する送信時間を占有する第１の数の中間フレーム（例えば、図１６のフレーム１６１０-２、または図２０Ｂのフレーム２０００）を生成すること（２１１０）と、第１のコマンドの初期結果を反映する第１の応答フレーム（例えば、図１６のフレーム１６１０−３、または図２０Ｂのフレーム１９２６）を生成する（またはそうでなければ、処理、レンダリング、または符号化させる）こと（２１１２）と、第１の予想される応答遅延時間に対応する時間に第１のゲームコントローラに関連付けられたメディア装置（例えば、１０６）で第１の応答フレームが受信されるように、所定のフレームレートで、第１の数の中間フレームに続いて第１の応答フレームを送信すること（２１１４）とを含む。
【０１３８】
コマンドと対応する応答フレームとの間の応答時間を調整するために中間フレームを使用することによって、サーバは、特定の態様（例えば、特定のタイプのユーザ入力に対する応答時間）を調整しながら、ゲームセッションの全体的な態様（たとえば、所定のフレームレート）を維持することができる。オンラインゲームの観点から、安定したフレームレートは、滑らかで高品質のユーザ経験に最適である。さらに、（例えば、特定の種類の入力だけのために）ローカルレベル上でゲームの調整を実施することによって、後続のゲーム状態に影響を及ぼさないが、ゲームプレイ体験の流動性および品質を増す連続的なレンダリングである重要でないゲームイベントなど、ゲームの他の態様は、妨害されずに継続する。
【０１３９】
対話型グラフィックスのスケーリングに基づく解像度
視覚シミュレーションのリアルタイムレンダリングは、レンダリングされた解像度に拡大する性能要件（例えば、ピクセルの数）を有する。例えば、ゲームプレイシーンを示す映像フレームの視覚シミュレーションがネットワークを通じてユーザに運ばれる場合、ユーザのネットワークおよび／またはディスプレイ装置の能力は、所与のユーザにサポートされ得る最大解像度を制約し得る。各々が異なるネットワークおよび表示能力を有する複数のユーザと共に、効率的なインフラストラクチャは、各ユーザの接続の特定の分解能に適切な性能を可能にする。以下の説明は、効率的で分解能が適切な仮想化方法および基本的なハードウェアからなるシステムの様々な実施形態を含む。
【０１４０】
オンラインビデオゲームなどの対話型グラフィックスアプリケーションは、目標画像解像度およびフレームレートを達成するために、基本的なハードウェア（たとえば、サーバシステム１１４）を利用する。例えば、得られた画像フレームがネットワーク（例えば、ネットワーク１１２）を介してエンドポイント（例えば、メディア装置１０６）にストリーミングされる場合、エンドポイントおよびネットワーク接続の能力は、維持され得る最大解像度を決定するであろう。
【０１４１】
対話型ゲームセッションを確立し、そのセッションにリソースを割り当てるための方法およびシステムの様々な実施形態が以下で説明される。図１５を参照すると、ある実施形態では、サーバシステム１１４は、セッション（たとえば、ゲームセッション）を確立するための要求をクライアント装置１０２Ａから受信する。サーバシステム（例えば、装置／ネットワーク評価モジュール４４４）は、コントローラ１０２Ａ、メディア装置１０６および／または表示装置１０８の特性ならびにネットワーク１１０／１１２の特性を決定する。当該装置およびネットワーク特性に基づいて、サーバシステム（たとえば、リソース割り当てモジュール４３２）は、解像度、フレームレート、および遅延時間など、当該セッションのための１つまたは複数の目標品質パラメータを決定する。目標品質パラメータに従って、サーバ（例えば、リソース割り当てモジュール４３２）は、特定の仮想マシンまたはコンテナを当該セッションに割り当て、割り当てに従ってセッションを確立する。リソースは、セッションに割り当てられた特定の仮想マシンまたはコンテナに関連付けられる（例えば、リソースリポジトリ４６４に格納される）リソースプロファイルに従ってセッションに提供される。サーバシステムにおける基本的なハードウェアリソースの専用の仮想化を割り当てることによって、（例えば、データセンタにおける）ゲームアプリケーションのハードウェアリソースの消費は、ネットワークおよびエンドポイントの両方の能力に適合され、それによって、各セッションに対する所望の性能メトリックが依然として達成される一方で、効率が最適化される。
【０１４２】
図２２は、リソースリポジトリ４６４の実装例である。リポジトリは、（Ｍ個の仮想マシンに対する設定を含む）仮想マシン設定２２０２、（Ｎ個のコンテナに対するイメージを含む）コンテナイメージリポジトリ２２０４、および、（Ｐ個のプロファイルに対する設定を含む）リソースプロファイル２２０６を含む。仮想マシンは、専用のハードウェアを模したソフトウェアにインストールされたオペレーティングシステムまたはアプリケーション環境であり、コンテナは仮想化されたオペレーティングシステムである。２つの間に相違があるが、両方とも仮想化の概念を実施する。したがって、特に明記しない限り、仮想マシンおよびコンテナは本開示全体を通して互換的に使用される。
【０１４３】
仮想マシンまたはコンテナは、目標品質パラメータに基づいてプロビジョニングされる。例えば、仮想マシンまたはコンテナは、目標解像度（例えば、「小」、「中」、「大」または７２０ｐ、１０８０ｐ、１４４０ｐ）に基づいて提供される。この例では、仮想マシン２２０２−１は、「小」と称され、７２０ｐの解像度を有する出力ストリームを提供するために使用されることができ、仮想マシン２２０２−２は、「中」と称され、１０８０ｐの解像度を有する出力ストリームを提供するために使用されることができ、仮想マシン２２０２−３は、「大」と呼ばれ、１４４０ｐの解像度を有する出力ストリームを提供するためなどに使用される、等である。ある実施形態では、各仮想マシンおよび／またはコンテナは、リソースプロファイル２２０６に関連付けられる。各リソースプロファイルは、仮想マシンおよび／またはコンテナに割り当てることができる特定のリソースおよびリソースレベルに関する設定を含む。これらのリソースは、セッション内で入力（例えば、上述の入力イベント）を処理し、出力（例えば、上述の応答フレーム）を生成するためのものである。リソースの例は、サーバシステムにおけるグラフィカルプロセッサ帯域幅、サーバシステムにおける汎用プロセッサ帯域幅、サーバシステムにおけるグラフィカルメモリ、サーバシステムにおける汎用メモリ、サーバシステムにおける記憶容量、およびサーバシステムにおける入出力チャネルのうちの１つまたは複数を含む。リソース割り当てモジュール４３２が、特定の仮想マシンまたはコンテナをセッションに割り当てるか、または別の方法でセッションに関連付けると、そのセッションには、その特定の仮想マシンまたはコンテナに関連付けられるリソースプロファイル２２０６に従って利用可能なリソースが提供される。
【０１４４】
図２３は、ある実施形態に従う、リソース割り当て処理２３００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）において実行され得る。ある実施形態では、サーバは、１つまたは複数のプログラム、および、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリを含み、当該１つまたは複数のプログラムは、処理２３００を実行するための命令を含む。ある実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、当該１つまたは複数のそれぞれのプログラムは、１つまたは複数のプロセッサを備えるサーバによって実行されると、当該サーバに処理２３００を実行させる命令を含む。
【０１４５】
当該処理は、サーバ１１４が、セッションを確立するための要求をクライアント装置（例えば、コントローラ１０２）から受信する（２３０２）と開始する。ある実施形態では、クライアント装置１０２は、リアルタイムの対話型セッションを確立することを要求し、当該要求は、クライアント装置１０２とのネットワーク接続（例えば、ネットワーク１１０／１１２）を通して受信される。
【０１４６】
要求を受信すると、サーバ（例えば、装置／ネットワーク評価モジュール４４４）は、クライアント装置１０２（例えば、メディア装置１０６、出力装置１０８、および／またはクライアント装置１０２自体）に関連付けられた装置の装置能力を決定する（２３０４）。ある実施形態では、装置能力は、クライアント装置に関連付けられた出力装置（たとえば、１０８）におけるディスプレイ出力の最大解像度、クライアント装置に関連付けられた出力装置（たとえば、１０８）におけるディスプレイ出力の最大フレームレート、またはその両方である。ある実施形態では、出力装置自体が、装置能力情報を、サーバに直接、またはクライアント装置を介して通信する。ある実施形態では、装置能力情報は、クライアント装置上にローカルに記憶され、クライアント装置は、セッションを確立するための初期要求とともに装置能力情報を送信する。ある実施形態では、クライアント装置は、装置／ネットワーク評価モジュール４４４による要求に応答して装置能力情報を送信する。
【０１４７】
さらに、サーバ（例えば、装置／ネットワーク評価モジュール４４４）は、ネットワーク接続（例えば、ネットワーク１１０／１１２）の接続能力を決定する（２３０６）。ある実施形態では、接続能力は、ネットワーク接続の帯域幅、および／または、ネットワーク接続に関連付けられる１つまたは複数の遅延時間値である。遅延時間値の例およびそれらを得る方法は、図５〜１２を参照して上で論じられている。
【０１４８】
装置およびネットワーク能力を評価すると、サーバ（例えば、リソース割り当てモジュール４３２）は、装置能力およびネットワーク接続能力に基づいて、リアルタイムの対話型セッションのための１つまたは複数の目標品質パラメータを決定する（２３０８）。ある実施形態では、１つまたは複数の目標品質パラメータは、出力装置に送信されるコンテンツ（たとえば、応答フレーム）に対する目標解像度、目標フレームレート、および／または、目標遅延時間のうちの１つまたは複数を含む。
【０１４９】
目標品質パラメータを決定すると、サーバ（例えば、リソース割り当てモジュール４３２）は、１つまたは複数の目標品質パラメータに基づいて仮想マシンまたはコンテナを選択する（２３１０）。ある実施形態では、リソース割り当てモジュール４３２は、（ｉ）１つまたは複数の目標品質パラメータを、複数の仮想マシンのそれぞれのリソースプロファイル中の対応するパラメータと比較することと、（ｉｉ）１つまたは複数の目標品質パラメータに最も密接に一致するパラメータを含むリソースプロファイルを決定することと、および、（ｉｉｉ）１つまたは複数の目標品質パラメータに最も密接に一致するパラメータを有するリソースプロファイルを有する仮想マシンを第１の仮想マシンとして選択することとによって、仮想マシンまたはコンテナを選択する。例えば、目標フレームレートが１２０ｆｐｓである場合、リソース割り当てモジュール４３２は、目標フレームレートを、１２０ｆｐｓのフレームレートをサポートするであろうリソースプロファイル２２０６内のパラメータと比較し、特定のリソースプロファイル（例えば、２２０６-２）が目標フレームレートを最良にサポートすることができると判断し、そして、プロファイル２２０６-２に関連付けられる仮想マシン（例えば、仮想マシン２）を選択する。
【０１５０】
ある実施形態では、リソース割り当てモジュール４３２は、（ｉ）１つまたは複数の目標品質パラメータを、複数の仮想マシンのそれぞれのリソースプロファイル中の対応するパラメータと比較することと、（ｉｉ）１つまたは複数の目標品質パラメータ以上のパラメータを有するリソースプロファイルを有する１つまたは複数の仮想マシンを仮想マシン候補として選択することと、（ｉｉｉ）最もリソース集約的でないリソースプロファイルを有する仮想マシン候補を第１の仮想マシンとして選択することとによって、仮想マシンまたはコンテナを選択する。例えば、目標フレームレートが１２０ｆｐｓである場合、リソース割り当てモジュール４３２は、目標フレームレートを、当該目標フレームレートをサポートするのに必要とされるリソースと等しいかそれより大きいリソース（例えば、１００ｆｐｓ、１２０ｆｐｓ、２４０ｆｐｓなどの目標フレームレートをサポートするリソース）を有するリソースを候補として選択するリソースプロファイル２２０６内のパラメータと比較し、最もリソース集約でないリソースプロファイル（例えば、１００ｆｐｓをサポートすることができるが、必ずしも１２０ｆｐｓではないプロファイル）を有する候補を選択する。最もリソース集約でないリソースプロファイルを選択することによって、サーバは、必要とされるリソースだけを割り当て、他のセッションのために追加のリソースを蓄えておき、それによって、サーバにおける効率を最適化しながら、目標とする性能レベルを達成する。
【０１５１】
ある実施形態では、仮想マシンを選択することは、選択された仮想マシンをリアルタイムの対話型セッションと関連付けることと、装置またはネットワーク接続能力の任意の変更に関係なく、当該関連付けを維持することとを含む。ある実施形態では、関連付けは、所定の時間期間にわたって維持される。ある実施形態では、リソース割り当てモジュール４３２は、装置またはネットワーク接続能力の変化を検出すると、当該関連付けを再評価する。ある実施形態では、リソース割り当てモジュール４３２は、装置またはネットワーク接続能力における検出された変化に基づいて、変化が所定の閾値よりも大きい場合にのみ、当該関連付けを再評価する。仮想マシンまたはコンテナの再割り当てを制限することによって、サーバは、当該サーバにおける安定性、したがって効率を最適化しながら、目標とする性能レベルを達成する。
【０１５２】
仮想マシンまたはコンテナが選択されると、サーバ１１４は、選択された仮想マシンまたはコンテナに従ってリアルタイムの対話型セッションを確立し（２３１２）、第１の仮想マシンのリソースプロファイルに従って、リアルタイムの対話型セッションに、リアルタイムの対話型セッション内のセッション内で、入力（例えば、上述の入力イベント）を処理し、出力（例えば、上述の応答フレーム）を生成するためのリソースを提供する（２３１４）。入力を処理し、出力を生成するためのリソースの例は、サーバシステムにおけるグラフィカルプロセッサ帯域幅、サーバシステムにおける汎用プロセッサ帯域幅、サーバシステムにおけるグラフィカルメモリ、サーバシステムにおける汎用メモリ、サーバシステムにおける記憶容量、および／または、サーバシステムにおける入力／出力チャネルのうちの１つまたは複数を含む。ある実施形態では、リソースは、当該リソースのうちの１つまたは複数のそれぞれの部分をリアルタイムの対話型セッションに割り当てることによって提供される。ある実施形態では、リソースは、選択された仮想マシンまたはコンテナのリソースプロファイルを、当該リソースのうちの１つまたは複数のそれぞれの部分に（例えば、特定のメモリパーティションまたは特定の入力／出力チャネルに）マッピングすることによって提供される。
【０１５３】
ある実施形態では、仮想マシンまたはコンテナの１つまたは複数のサブセットは、提供されるリソースのレベルに基づいて、異なるサービス階層として利用可能にされる。例えば、より高いサービス階層のために支払うユーザは、比較的高度なリソース（例えば、「大きな」解像度、高いプロセッサ帯域幅割り当てなど）を提供するリソースプロファイルを有する仮想マシンまたはコンテナへの優先権アクセスを受けることができる。ある実施形態では、オンラインゲーム環境１００のユーザは、プレミアムを支払うことによって、ゲーム内の報酬または高いゲーム内パフォーマンス統計を達成することによって、または、特定のゲーム会社によって提供される販売促進を利用することによって、より高いサービス層へのアクセスを得る。ある実施形態では、ユーザは、特定の嗜好（例えば、高解像度および平均フレームレート、平均解像度および高フレームレートなど）に基づいてカスタムパッケージを構築する。これらの実施形態では、カスタムパッケージの異なるバージョンが、１つまたは複数の仮想マシンまたはコンテナに関連付けられる。
【０１５４】
上述のリアルタイムの対話型セッションのゲームの性質のために、コントローラからディスプレイまでの遅延時間は、高品質で一貫したゲームプレイ体験を維持するために、監視されなければならない問題であることに留意することが重要である。したがって、上記のような仮想マシンまたはコンテナの提供は、個々のユーザまたはユーザのグループに専用のリソースを確保することによって、最小遅延時間基準を確保するために必要なリソースを満足させることができることを保証する。さらに、ゲームセッションの使用は、複数のプレイヤー（例えば、多人数参加型のオンライン・ロール・プレイング・ゲーム）を伴うゲームにスケールアップするので、仮想マシンおよびコンテナを通じたリソースの仮想的な提供は、各プレイヤーに対するレベルプレイフィールドを容易にすることによって（例えば、最小遅延時間基準が各プレイヤーに対して満たされることを保証することによって）、高品質のゲームプレイ体験をさらに保証する。例えば、２人のプレイヤーが同じオンラインゲームをプレイしている場合、ゲームサーバと第１のクライアント装置との間の第１のセッションは、第１および第２のクライアント装置の両方が同じゲームを並行してプレイしているにもかかわらず、ゲームサーバと第２のクライアント装置との間の第２のセッションに割り当てられた仮想マシンまたはコンテナとは異なる仮想マシンまたはコンテナを割り当てられてもよい。仮想マシンまたはコンテナをセッションごとに割り当てることによって、ハードウェア資源が最適化される一方、各ユーザに対する所望のゲームプレイ体験が保証される。
【０１５５】
ある実施形態では、アプリケーションは、基本的なコンテナのサイズを考慮し、所与のサイズに対して所望の性能を達成するためにハードウェアおよび／または仮想化されたハードウェアのアプリケーションの使用を「正しいサイズ」にすることができるソフトウェア開発キットを用いて、設計される。ある実施形態では、様々なサイズのコンテナのインスタンスが、エンドポイントに近接した場所で利用可能にされる。エンドポイントがリソース割り当てモジュール４３２に接続し、新しいセッションを確立すると、装置／ネットワーク評価モジュール４４４は、エンドポイント能力およびネットワーク能力を評価し、リソース割り当てモジュール４３２は、サイズを決定する。一旦決定されると、当該セッションは、対応するサイズの仮想マシンまたはコンテナに配属され、対応する解像度、フレームレート、または遅延時間レベルでコンテンツ配信が開始される。ハードウェア資源のアプリケーションによる消費をネットワークおよびエンドポイントの両方の能力に「正しいサイズに」することによって、サーバは、効率を最適化しながら所望の性能レベルを達成する。
【０１５６】
ユーザに固有なネットワーク条件の調整
オンラインで対話型でリアルタイムのゲーム環境では、遅延時間は、ゲームプレイ品質に影響を及ぼす重要な要因の１つである。上述したように、ゲーム環境に様々なレベルの遅延時間を導入することができる多数のネットワークおよび処理要素がある。遅延時間の負の効果を最小化することは、特に多くのゲームセッションからの多くのゲームプレイ入力を処理し、多くのユーザに並行してゲームプレイ出力コンテンツをストリーミングする場合、しばしば、処理能力および複雑さを犠牲にして生じる。したがって、ゲーム環境（例えば、サーバシステム１１４および／またはゲームサーバ１２２）が処理資源を賢明に割り当てることが重要である。
【０１５７】
処理リソースを割り当てる１つの方法は、ゲーム環境のユーザのニーズおよび経験をユーザごとに考慮し、それに応じてリソースを割り当てることである。例えば、異なるユーザは、不利なプレイ可能性イベントに対して異なるレベルの耐性を有する。一部のユーザは、他のユーザよりも特定のレベルの遅延時間に対してより敏感であり得る。例えば、一部のプレイヤーは、２０ミリ秒までのコントローラからディスプレイまでの遅延時間に対して異議を唱えるかもしれないが、他のプレイヤーは、１２０ミリ秒で遅延時間に関連付けられる問題を観察するだけかもしれない。制約されたリソースが与えられると、不利なプレイ可能性および条件に対する耐性を決定する能力は、より良い割り当て決定を行うことを可能にする。ユーザ固有ベースでリソースを割り当てることの利点は、より高度に最適化された処理効率のために、全てのユーザのより良い経験を含み、このことは、より多くのユーザをサポートする能力につながり、各ユーザにコンテンツを提供するコストを低下させる。
【０１５８】
ユーザ固有ベースでネットワーク条件を調整（ネットワークリソースの割り当て）するための方法およびシステムの様々な実施形態が以下で説明される。ある実施形態では、ゲームサーバ（例えば、リソース調整モジュール４５８、図４）は、各ユーザの利用可能なゲームプレイ統計のセット（たとえば、プロファイル２４０２、図２４Ｂ）を考慮し、各ユーザのゲームプレイ統計に基づいて、各ユーザのプレイ可能性のためのウィンドウを決定する。例示的なゲームプレイ統計は、ゲーム内パフォーマンス（例えば、ユーザがどのくらいうまくゲームをプレイするか）、コントローラ対話（例えば、動き、応答時間、および／または操作速度に対する過剰補償）、ユーザがプレイしているゲームの種類（例えば、速いペース対遅いペース）、および、（ゲームサーバによって推論されるか、またはユーザによって指定される）ユーザ嗜好を含む。ある実施形態では、ゲームサーバは、自己報告データに基づいてユーザごとのプレイ可能性を判断する。ある実施形態では、ゲームサーバは、ゲーム内のユーザの行動を観察して、プレイ体験をどのように分類するかを決定し、その情報を使用して、ストリームがどこから提供されるか、およびサーバが体験をどのように伝えるかを決定する。ある実施形態では、上述のアプローチは、機械学習を適用して、ユーザのプレー可能性の分類への各ゲームプレイ統計に対する特定の重みを決定することによって増強される。
【０１５９】
図２４Ａは、ユーザプレイ可能性プロファイル２４０２のためのレポジトリの実装例である。ある実施形態では、（例えば、Ｎ人のユーザのゲームプレイ統計を表す）プレイ可能性プロファイルは、ユーザ情報４５８としてメモリ１４６（図４）に格納される。
【０１６０】
ある実施形態では、ゲームプレイ統計はゲーム内パフォーマンスデータを含む。ユーザのゲーム内パフォーマンスデータの例は、特定のゲーム（例えば、ユーザがどのくらい良好にゲームをプレイするかの尺度）に対するユーザのスキルレベルを含む。ある実施形態では、ゲームサーバ（たとえば、リソース調整モジュール４５８）は、ユーザの活動または達成を特定のゲーム固有のベンチマーク、たとえば、ユーザがチェックポイントに到達するのにかかる時間の量、ユーザが特定の対戦相手またはチャレンジに対してどれだけの勝利を達成するか、ユーザがどれだけのポイントを獲得するか等と比較することによって、ユーザのスキルレベルを決定する。ある実施形態では、リソース調整モジュール４５８は、ユーザのゲーム内パフォーマンスデータ（たとえば、スキルレベル）を、他のユーザの対応するパフォーマンスデータと、または、ゲームを現在プレイしている若しくはプレイした複数のユーザを表す平均パフォーマンスメトリックと比較する。
【０１６１】
ある実施形態では、ゲームプレイ統計は、ゲームコントローラ１０２とのユーザの対話を記述するデータなどのコントローラ対話型データを含む。ある実施形態では、コントローラ対話型データは、（ｉ）ユーザに（たとえば、ディスプレイ１０８上に）表示されている出力フレームにおいてレンダリングされる刺激と、（ｉｉ）サーバにゲームプレイ入力を送ることにより（例えば、ゲームコントローラ１０２上のコントロール・キーと対話することにより）、当該刺激に応答するユーザとの間の時間量などのユーザ応答時間を記述する。例えば、図５Ｂを参照すると、トリガフレーム５１０−１が第１のゲームプレイ時間ｔ１に表示され、ユーザが第２のゲームプレイ時間ｔ２に応答する場合、ディスプレイからコントローラまでの対話の遅延時間はｔ２とｔ１との間の差である。より迅速な反応時間を有するユーザは、より短い応答時間を表すコントローラ対話型データと関連付けられる。
【０１６２】
ある実施形態では、ゲームプレイ統計は、（例えば、２つのコントロールキーに連続して作用することにより、または、連続して２回同じコントロール・キーに作用することによる）ユーザがどのくらい迅速に連続入力を登録するかを記述するデータのような、コントローラ操作速度データを含む。例えば、図１６を参照すると、ユーザが、プレイヤーＡを位置に移動させる第１のコントロール・キーを操作して（フレーム１６１０−３）、次いでプレイヤーＡにパックをシュートさせるように第２のコントロール・キーを操作して（フレーム１６１０−５）スコアリングを試みる場合、ユーザのコントローラ操作速度は、第１のコントロール・キーの操作と第２のコントロール・キーの操作との間に要した時間の量である。ゲームコントローラ１０２上の複数のコントロールキーをより迅速に操作することができるユーザは、連続する操作または作用の間のより短い操作時間を表すコントローラ操作データと関連付けられる。
【０１６３】
ある実施形態では、ゲームプレイ統計は、ユーザがコントローラ１０２とどのように正確に対話するかを記述するデータなどのコントローラ性能データを含む。例えば、図１６を参照すると、ユーザがプレイヤーＡを位置に移動させるとき（フレーム１６１０−３）、比較的高いスキルを有するユーザは、仮想プレイヤーが正しい位置に移動するのに十分なだけ長い適切な制御（例えば、「移動」ボタンを押下して保持する）と対話するが、比較的低いスキルを有するユーザは、過剰または過小補償（例えば、「移動」ボタンを長すぎて保持するか、または十分に長く保持しない）するかもしれず、これにより、仮想プレイヤーを誤った位置へ移動し、シュートを失敗する。ゲームコントローラ１０２上の制御をより正確に操作することができるユーザは、より正確なコントローラ性能データと関連付けられ得る。
【０１６４】
ある実施形態では、プレイ可能性プロファイル２４０２は、プレイされるゲームのタイプを含む。例えば、上記様々な例で説明されるゲームのような高速ホッケーゲームは、迅速な決定または動きを必要としない、よりのんびりした戦略ゲームよりも、より迅速なゲームプレイおよびより少ない遅延時間を必要とし得る。したがって、コントローラ応答時間および精度のような統計は、ゲームの種類に応じて、パフォーマンスまたはスキルレベルのような他の統計の状況において、異なる意味を有するか、または完全に無意味であり得る。
【０１６５】
ある実施形態では、プレイ可能性プロファイル２４０２は、ゲームプレイのいくつかの態様に対する許容レベルに関するプレイ可能性嗜好を含む。例えば、ユーザがゲームにおいてどのくらいうまく実行するか、またはコントローラと対話するかに関わらず、ユーザは、あるレベルの分解能、フレームレート、および／または遅延時間を好み得る。例えば、ユーザが、遅延時間の特定のレベルに関連付けられた特定のゲームプレイ体験に慣れているか、または好む場合、より速い応答時間を提供することは、（ユーザが遅い応答時間を好むので）最も不必要であるかもしれず、（ユーザがより速い応答時間に適応できない場合、同様にゲームをプレイすることができない可能性があるおで）最悪の弊害をもたらすかもしれない。さらに他の例として、ユーザは、個人的な視聴の好みのために、サーバシステム１１４が提供できるものよりも遅いフレームレートを好むかもしれない。その結果、ユーザの嗜好は、サーバシステム１１４がどのようにリソースを割り当てるかの要因となる。ある実施形態では、ユーザは、これらの嗜好を手動で入力し、サーバ（たとえば、リソース調整モジュール４５８）は、手動で入力された設定に従ってユーザの嗜好を記憶する。あるいは、サーバは、これらの嗜好を推論する。ある実施形態では、サーバは、ユーザのゲームプレイ統計（例えば、ゲーム内の挙動およびパフォーマンスデータ）に基づいてユーザの嗜好を推論する。
【０１６６】
上述のように様々なゲームプレイ統計を決定すると、リソース調整モジュール４５８は、上述のゲームプレイ統計（例えば、ゲーム内パフォーマンスデータ）のうちの１つまたは複数に従って、ゲームプレイ体験許容レベルをユーザに割り当てる。ゲームプレイ体験許容レベルは、ゲームサーバがユーザの知覚されるゲームプレイ体験に悪影響を及ぼすことなくユーザに提示することができるサービスのレベルを記述するメトリックである。ゲームプレイ体験許容レベルはまた、有害遅延時間レベル、プレイ可能性レベル、品質期待レベル、および／または、最小サービス許容レベルとして記述され得る。ある実施形態では、体験許容レベルは、第１のクライアント装置のユーザに関連付けられる知覚されるゲームプレイ体験に対して閾値未満の影響量を有すると決定された特定のフレームレート、特定の解像度、および／または、特定の遅延時間レベルを表す。
【０１６７】
図２４Ｂは、リソース設定テーブル４６６の例示的な実施形態である。ある実施形態では、リソース設定４６６は、メモリ１４６（図４）に記憶される。例示的なリソース設定４６６によれば、第１の許容レベル（“１”）は、特定のリソースプロファイル（“Ａ”）に関連付けられる。リソースプロファイルの例は、図２２を参照して上で説明されている（リソースプロファイル２２０６）。特定のゲームプレイ体験許容レベルを有するユーザにリソースのプロファイル（例えば、サーバプロセッサ帯域幅）を割り当てること、または割り振ることによって、サーバシステム１１４は、ゲームプレイ体験のレベルを提供するのに必要な最小のリソースだけと共に、所望のゲームプレイ体験を（例えば、ユーザの許容範囲内で）ユーザに提供する。
【０１６８】
図２５は、ある実施形態に従うリソース調整処理２５００のフロー図である。当該処理は、１つまたは複数のプロセッサ（例えば、ＣＰＵ１３８および／またはＧＰＵ１４０）と、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリ（たとえば、メモリ１４６）とを有する電子サーバ（例えば、サーバシステム１１４、またはより具体的には、ゲームサーバ１２２）において実行され得る。ある実施形態では、サーバは、１つまたは複数のプログラム、および、１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶するメモリを含み、当該１つまたは複数のプログラムは、処理２５００を実行するための命令を含む。ある実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のそれぞれのプログラムを記憶し、当該１つまたは複数のそれぞれのプログラムは、１つまたは複数のプロセッサを備えるサーバによって実行されると、サーバに処理２５００を実行させる命令を含む。
【０１６９】
当該処理は、サーバ１１４が第１のクライアント装置（例えば、ゲームコントローラ１０２）とのリアルタイムの対話型ゲームセッションを確立したとき（２５０２）に開始し、当該ゲームセッションは特定のゲームタイプ（例えば、高速なロールプレイングゲームまたはスローペースな戦略ゲーム）に関連付けられる。ゲームコントローラ１０２のユーザがゲームセッションを介してゲームをプレイしている間、サーバ（例えば、リソース調整モジュール４５８）は、ゲームセッション中にユーザに関連付けられたゲーム内パフォーマンスデータを監視する（２５０４）。ゲーム内パフォーマンスデータの例は、上述のように、ゲームプレイ統計、パフォーマンスメトリック、スキルレベル、コントローラ応答時間、コントローラ操作時間、および／または、コントローラ精度を含む。ある実施形態では、ゲーム内パフォーマンスデータは、ユーザのためのプロファイル２４０２に記憶される。
【０１７０】
ゲーム内パフォーマンスデータ（例えば、ゲームプレイスキル、コントローラ対話）、ゲームタイプ、および／またはユーザ嗜好に基づいて、リソース調整モジュール４５８は、当該ユーザのゲームプレイ体験許容レベルを決定する（２５０６）。例えば、ユーザが、比較的高いスキルレベル、より速い応答（より短いコントローラ応答時間）、より速いゲーム制御能力（より短いコントローラ操作時間）、および／または、より高いコントローラ精度を有する場合、調整モジュール４５８は、より高いリソースプロファイルに対応する許容レベル（例えば、ユーザのゲームセッションにより多くのリソースを割り当てること）、および／または、より高い品質のゲームプレイ体験に対応する許容レベル（例えば、より高いフレームレート、より高い解像度、および／または、より低い遅延時間）を割り当てる。一方、ユーザが比較的低いスキルレベル、遅い応答（より長いコントローラ応答時間）、より遅いゲーム制御能力（より長いコントローラ操作時間）、および／または、より低いコントローラ精度を有する場合、調整モジュール４５８は、より低いリソースプロファイルに対応する許容レベル（例えば、ユーザのゲームセッションにより多くのリソースを割り当てること）、および／または、より低い品質のゲームプレイ体験に対応する許容レベル（例えば、より低いフレームレート、より低い解像度、および／または、より高い遅延時間）を割り当てる。ある実施形態では、許容レベルは、他のゲームプレイ統計と共に、ユーザのプレイ可能性プロファイル２４０２に格納される。
【０１７１】
リソース調整モジュール４５８は、ゲームプレイ体験許容レベルに基づいて、ユーザのゲームセッションのためのサーバリソースを調整する（２５０８）。例示的なセッションリソースは、サーバシステムにおけるグラフィカルプロセッサ帯域幅、サーバシステムにおける汎用プロセッサ帯域幅、サーバシステムにおけるグラフィカルメモリ、サーバシステムにおける汎用メモリ、サーバシステムにおける記憶容量、サーバシステムにおける入力／出力チャネル、および／または、ストリーミングソースを含む。ある実施形態では、リソース調整モジュール４５８は、図２２〜２３に関して上述したように、仮想マシンまたはコンテナを割り当てることによって、ゲームセッションにリソースを割り当てる。セッションリソースの割り当てを調整することによって、ゲームサーバは、ゲームプレイ出力ストリーム（たとえば、ゲームプレイ出力を示す映像ストリーム）に関連付けられるフレームレート、解像度、または遅延時間レベルのうちの１つまたは複数に影響を及ぼす。代替的にまたは追加的に、ある実施形態では、リソース調整モジュール４５８は、ゲームプレイ出力ストリームに関連付けられるフレームレート、解像度、および／または、遅延時間レベルを直接調整する。
【０１７２】
ある実施形態では、リソース調整モジュール４５８は、最初に許容レベルを所定の（例えば、大半のユーザに対する肯定的なゲームプレイ体験を保証するために必要より高いと判断された）開始点に設定することによって、特定のユーザのゲームプレイ体験許容レベルを決定し、次いで、ユーザのゲームプレイ統計のうちの１つまたは複数が悪影響を受けるまで、許容レベルを徐々に調整する。ユーザのゲームプレイ統計が悪影響を受ける直前のレベルは、ユーザのゲームプレイ体験許容レベルとして決定される。例えば、ユーザがゲームセッションを確立すると、ゲームサーバは、ゲームにおいて優れるユーザの能力に悪影響を及ぼすことを回避するのに十分に高いことが既知または仮定されるレベルで、初期の帯域幅割り当てを設定する。次いで、リソース調整モジュール４５８は、ユーザのゲームプレイ体験が（例えば、ユーザのゲーム中のパフォーマンスが閾値未満に減少し始めることによる）悪影響を受ける兆候を示し始めるまで、当該セッションのための帯域幅割り当てを徐々に減らす。次いで、ユーザのゲームプレイが影響されないか、または閾値を超えて影響されない最低帯域幅レベルが、ユーザのゲームプレイ体験許容レベルの一部として記録される。
【０１７３】
ある実施形態では、ユーザは、当該ユーザのゲーム体験許容レベルにアクセスすることができる。例えば、ゲームサーバは、ユーザのプレー可能性プロファイル２４０２内の情報を当該ユーザに提供する。ユーザがプレイ可能性プロファイル情報を閲覧するためのオプションを提供することによって、ユーザは、当該ユーザのゲームプレイ進捗（例えば、ユーザがゲーム内パフォーマンスを改善しているかどうか）を追跡するためのメトリックとして、関連付けられたゲームプレイ統計を使用し、および／または、特定のゲームプレイ統計を他のユーザのゲームプレイ統計と比較することができる。
【０１７４】
本明細書で説明する様々な実施形態は、帯域幅およびコンピューティングリソースを効率的に利用して、各ユーザのゲームプレイパフォーマンスを監視することによって決定される、彼ら自身の固有の能力に基づいて、ユーザに最適なゲームプレイ体験を提供する。各ユーザの特定のプレイスタイル、スキル、ニーズ、および／または嗜好に従ってユーザごとにサーバリソースを調整することによって、本明細書で説明する様々な実施形態は、より高度に最適化された処理効率のために、より良好な体験を全てのユーザに提供し、より多くのユーザをサポートする能力をもたらし、各ユーザにコンテンツを提供するコストを下げる。
【０１７５】
開示に関する注記
様々な実施形態を詳細に参照し、その例は添付の図面に示されている。上記の詳細な説明では、本発明および記載された実施形態の深い理解を提供するために、多数の具体的な詳細が記載されている。しかし、本発明は、これらの具体的な詳細を伴わずに実施され得る。他の例では、実施形態を不必要に不明瞭にしないように、周知の方法、手順、構成要素、および回路は、詳細には説明されていない。
【０１７６】
「第１の」、「第２の」などの用語は、本明細書では様々な要素を記述するために使用され得るが、これらの要素は、これらの用語によって限定されるべきではないことを理解されたい。これらの用語は、１つの要素を別の要素から区別するためにのみ使用される。例えば、説明の意味を変更することなく、第１の装置のすべての出現が一貫して名前付けされ、第２の装置の全ての出現が一貫して名前付けされる限り、第１の装置は第２の装置と呼ぶことができ、同様に、第２の装置は第１の装置と呼ぶことができる。第１の装置および第２の装置は、両方とも装置であるが、同じ装置ではない。
【０１７７】
本明細書で使用される専門用語は、特定の実施形態を説明することのみを目的とし、特許請求の範囲を限定することを意図するものではない。実施形態および添付の特許請求の範囲の説明において使用されるように、単数形「a」、「an」および「the」は、文脈が明確にそうでないことを示さない限り、複数形も含むことが意図される。本明細書で使用される「および／または」という用語は、関連する列挙された項目のうちの１つまたは複数の任意のおよびすべての可能な組み合わせを指し、それらを包含することも理解されよう。本明細書で使用される場合、「備える（comprises）」および／または「含む（comprising）」という用語は、述べられた特徴、整数値、ステップ、動作、要素、および／または、構成要素の存在を指定するが、１つまたは複数の他の特徴、整数値、ステップ、動作、要素、構成要素、および／または、それらのグループの存在または追加を排除しないことがさらに理解されるであろう。
【０１７８】
本明細書で使用される場合、「・・・である場合」という用語は、文脈に応じて、前述の条件が真であることを意味している「・・・であるとき」または「・・・すると」または「決定に従って」または「決定に応答して」または「検出に応答して」と解釈され得る。同様に、「［前述の条件が真である］と判定されると」または「［前述の条件が真である］と判定されると」または「［前述の条件が真である］とき」という表現は、文脈に応じて、前述の条件が真であると「判定されると」または「判定したことに応答して」または「判定に従って」または「検知すると」または「検知に応答して」を意味すると解釈され得る。
【０１７９】
上記の説明は、説明を目的として、特定の実施形態を参照して説明してきた。しかしながら、上記の例示的な説明は、網羅的であること、または開示された詳細な形態に本発明を限定することを意図していない。多くの修正および変形が、上記の教示を考慮して可能である。実施形態は、本発明の原理およびその実用的な用途を最良に説明し、それによって、他の当業者が本発明および様々な実施形態を、企図される特定の使用に適するように様々な修正を伴って最良に利用できるようにするために選択されおよび記載されている。
【図１】
2021509838.tif 000003
【図２】
2021509838.tif 000004
【図３】
2021509838.tif 000005
【図４】
2021509838.tif 000006
【図５Ａ】
2021509838.tif 000007
【図５Ｂ】
2021509838.tif 000008
【図５Ｃ】
2021509838.tif 000009
【図６】
2021509838.tif 000010
【図７】
2021509838.tif 000011
【図８】
2021509838.tif 000012
【図９】
2021509838.tif 000013
【図１０】
2021509838.tif 000014
【図１１】
2021509838.tif 000015
【図１２】
2021509838.tif 000016
【図１３】
2021509838.tif 000017
【図１４Ａ】
2021509838.tif 000018
【図１４Ｂ】
2021509838.tif 000019
【図１４Ｃ】
2021509838.tif 000020
【図１５】
2021509838.tif 000021
【図１６】
2021509838.tif 000022
【図１７】
2021509838.tif 000023
【図１８】
2021509838.tif 000024
【図１９Ａ】
2021509838.tif 000025
【図１９Ｂ】
2021509838.tif 000026
【図２０Ａ】
2021509838.tif 000027
【図２０Ｂ】
2021509838.tif 000028
【図２１】
2021509838.tif 000029
【図２２】
2021509838.tif 000030
【図２３】
2021509838.tif 000031
【図２４Ａ】
2021509838.tif 000032
【図２４Ｂ】
2021509838.tif 000033
【図２５】
2021509838.tif 000034
【手続補正書】
【提出日】令和2年7月2日(2020.7.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オンライン対話型ゲームセッションをレンダリングする方法であって、
１つまたは複数の処理コアと、前記１つまたは複数の処理コアによって実行するためのプログラムを記憶しているメモリとを含むサーバシステムにおいて、
オンラインゲームセッションに関連付けられた第１のクライアント装置から第１のコマンドを受信することと、
前記第１のコマンドのタイプと、前記第１のコマンドのタイプに関連付けられた第１の予想応答遅延時間とを決定することと、
ネットワーク遅延時間を決定することと、
前記ネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、第１の導入される遅延時間を決定することと、
所定のフレームレートで送信されるときに、前記第１の導入される遅延時間に対応する送信時間を占有する第１の数の中間フレームを生成することと、
前記第１のコマンドの初期結果を反映する第１の応答フレームを生成することと、
前記第１の応答フレームが第１の予想応答遅延時間に対応する時間において前記第１のクライアント装置に関連付けられた第１のメディア装置で受信されるように、所定のフレームレートで、前記第１の数の中間フレームに続いて、前記第１の応答フレームを送信することとを備える、方法。
【請求項２】
前記オンラインゲームセッションのネットワーク特性に従って、前記所定のフレームレートを決定することと、
前記第１とは異なる後続のネットワーク遅延時間を決定すると、前記所定のフレームレートを維持することとをさらに備える、請求項１に記載の方法。
【請求項３】
前記第１のコマンドに従って後続のゲーム状態を更新することをさらに備え、前記後続のゲーム状態は、前記第１の応答フレームに最初に反映される、請求項１または２に記載の方法。
【請求項４】
前記第１の数の中間フレームを決定することは、
前記ネットワーク遅延時間に基づいて、応答フレームの予想到着時間を決定することと、
前記予想される応答遅延時間に基づいて、応答フレームの目標到着時間を決定することと、
デルタ時間を得るために、前記予想到着時間を前記目標到着時間と比較することと
前記デルタ時間に所定のフレームレートを乗じることとを含む、請求項１〜３のいずれかに記載の方法。
【請求項５】
前記中間フレームの第１の数を決定することは、前記導入される遅延時間に前記所定のフレームレートを乗じることを含む、請求項１〜４のいずれかに記載の方法。
【請求項６】
前記サーバ上で前記第１のコマンドを実行することに関連付けられる処理遅延時間を決定することをさらに備え、前記第１の導入される遅延時間はさらに、前記処理遅延時間に基づいている、請求項１〜５のいずれかに記載の方法。
【請求項７】
前記ネットワーク遅延時間を決定することは、（ｉ）第１のクライアント装置と前記サーバとの間の往復通信遅延時間、および／または、（ｉｉ）前記サーバと前記第１のメディア装置との間の往復通信遅延時間を決定することを含む、請求項１〜６のいずれかに記載の方法。
【請求項８】
前記ネットワーク遅延時間を決定することは、（ｉ）前記第１のクライアント装置と前記サーバとの間の一方向の通信遅延時間、および／または、（ｉｉ）前記サーバと前記第１のメディア装置との間の一方向の通信遅延時間を決定することを含む、請求項１〜７のいずれかに記載の方法。
【請求項９】
前記第１のクライアント装置から第２のコマンドを受信することをさらに備え、前記第２のコマンドの種類は、前記第１のコマンドの種類とは異なり、前記方法は、
前記第２のコマンドのタイプに関連付けられる第２の予想応答遅延時間を決定することをさらに備え、前記第２の予想応答遅延時間は、前記第１の予想応答遅延時間とは異なり、前記方法は、
更新されたネットワーク遅延時間を決定することと、
前記更新されたネットワーク遅延時間と前記第２の予想遅延時間との比較に基づいて、第２の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第２の導入される遅延時間に対応する送信時間を占有する第２の数の中間フレームを生成することと、
前記第２のコマンドの初期結果を反映する第２の応答フレームを生成することと、
前記第２の予想応答遅延時間に対応する時間に前記第２の応答フレームが前記第１のメディア装置で受信されるように、前記所定のフレームレートで、前記第２の数の中間フレームに続いて前記第２の応答フレームを送信することとをさらに備える、請求項１〜８のいずれかに記載の方法。
【請求項１０】
第２のクライアント装置から、前記第１のコマンドのタイプと同等のタイプの第３のコマンドを受信することと、
前記第３のコマンドを第１の予想応答遅延時間と関連付けることと、
前記第２のクライアント装置に関連付けられたネットワーク遅延時間が前記第１のクライアント装置に関連付けられたネットワーク遅延時間とは異なることを判定することと、
前記第２のクライアント装置に関連付けられたネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、前記第１の導入される遅延時間とは異なる第３の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第３の導入される遅延時間に対応する送信時間を占有する、前記第１の数の中間フレームとは異なる第３の数の中間フレームを生成することと、
前記第３のコマンドの初期結果を反映する第３の応答フレームを生成することと、
前記第３の応答フレームが前記第１の予想応答遅延時間に対応する時間に第２のメディア装置で受信されるように、前記所定のフレームレートで、前記第３の数の中間フレームに続いて、前記第３の応答フレームを送信することとをさらに備える、請求項１〜９のいずれかに記載の方法。
【請求項１１】
前記第１のクライアント装置から、前記第１のコマンドのタイプと同等のタイプの第４のコマンドを受信することと、
前記第４のコマンドと第１の予想応答遅延時間とを関連付けることと、
現在のネットワーク遅延時間が、前記第１のコマンドに関連付けられたネットワーク遅延時間と異なるということを判定することと、
前記更新されたネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、前記第１の導入される遅延時間とは異なる第４の導入される遅延時間を決定することと、
前記所定のフレームレートで送信されるときに、前記第４の導入される遅延時間に対応する送信時間を占有する、前記第１の数の中間フレームとは異なる第４の数の中間フレームを生成することと、
前記第４のコマンドの初期結果を反映する第４の応答フレームを生成することと、
前記第４の応答フレームが前記第１の予想応答遅延時間に対応する時間に前記第１のメディア装置で受信されるように、前記所定のフレームレートで、前記第４の数の中間フレームに続いて、前記第４の応答フレームを送信することとをさらに備える、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
前記オンラインゲームセッションに関連付けられる第２のクライアント装置に関連する第２のネットワーク遅延時間を決定することと、
前記第２のネットワーク遅延時間と前記第１の予想遅延時間との比較に基づいて、第５の導入される遅延時間を決定することと、
前記第２のクライアント装置に関連付けられる所定のフレームレートで送信されるときに前記第５の導入される遅延時間に対応する送信時間を占有する第５の数の中間フレームを決定することと、
前記第５の数の中間フレームが前記第１の数の中間フレームよりも高いという判定に従って、
前記第５の数の中間フレームが生成されるまで、１つまたは複数の追加の中間フレームを生成することと、
前記第１のコマンドの初期結果を反映する第５の応答フレームを生成することと、
前記第５の応答フレームが第１の予想応答遅延時間に対応する時間で第２のクライアント装置に関連付けられるメディア装置で受信されるように、前記第２のクライアント装置に関連付けられる前記所定のフレームレートで、前記第１の数の中間フレームに続いて、前記１つまたは複数の追加の中間フレームに続いて、前記第５の応答フレームを送信することとを含む、請求項１〜１１のいずれかに記載の方法。
【請求項１３】
前記第５の数の中間フレームが前記第１の数の中間フレームより小さいという判定に従って、
前記第１のコマンドの初期結果を反映する第６の応答フレームを生成することと、
前記第５の応答フレームが前記第１の予想応答遅延時間に対応する時間で第２のクライアント装置に関連付けられたメディア装置で受信されるように、前記第２のクライアント装置に関連付けられた所定のフレームレートで、前記第５の数の中間フレームに対応する前記第１の数の中間フレームのサブセットを前記第５の応答フレームに続いて送信することとをさらに備える、請求項１２に記載の方法。
【請求項１４】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行するための１つまたは複数のプログラムを記憶しているメモリとを備え、前記１つまたは複数のプログラムは、請求項１〜１３のいずれかに記載の方法を実行するための命令を含む、電子ゲームサーバ。
【請求項１５】
請求項１〜１３のいずれかに記載の方法をコンピュータに実行させる、プログラム。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図２２
【補正方法】変更
【補正の内容】
【図２２】
2021509838.tif 000035
【国際調査報告】
2021509838.tif 000036
2021509838.tif 000037
2021509838.tif 000038
2021509838.tif 000039
2021509838.tif 000040