(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-01
(54)【発明の名称】クラウドゲーミングサーバで符号化するためのシーン変化のヒントを提供するゲームアプリケーション
(51)【国際特許分類】
H04N 19/107 20140101AFI20221124BHJP
A63F 13/355 20140101ALI20221124BHJP
A63F 13/52 20140101ALI20221124BHJP
H04N 19/142 20140101ALI20221124BHJP
H04N 19/162 20140101ALI20221124BHJP
H04N 19/172 20140101ALI20221124BHJP
【FI】
H04N19/107
A63F13/355
A63F13/52
H04N19/142
H04N19/162
H04N19/172
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022520321
(86)(22)【出願日】2020-09-30
(85)【翻訳文提出日】2022-05-18
(86)【国際出願番号】 US2020053554
(87)【国際公開番号】W WO2021067441
(87)【国際公開日】2021-04-08
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-09-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100099324
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】マーク イー. サーニー
(72)【発明者】
【氏名】ケルビン エム. ヨン
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA04
5C159MA05
5C159NN43
5C159PP05
5C159SS26
5C159TA24
5C159TB04
5C159TC14
5C159TD12
5C159UA02
5C159UA05
(57)【要約】
ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行してビデオフレームを生成することを含む、符号化する方法である。ゲームロジックの実行中に収集されたゲーム状態に基づいてビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行する。この方法では、シーン変化を含むことが予測されるビデオフレームの範囲を識別し、シーン変化ロジックを使用してシーン変化のヒントを生成し、シーン変化のヒントはビデオフレームの範囲を識別し、ビデオフレームの範囲は第1のビデオフレームを含むものである。この方法では、第1のビデオフレームをエンコーダに配信し、シーン変化ロジックからエンコーダにシーン変化のヒントを送出し、シーン変化のヒントに基づいて第1のビデオフレームをIフレームとして符号化する。
【選択図】
図5B
【特許請求の範囲】
【請求項1】
符号化方法であって、
ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成し、
前記複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行し、前記予測は、前記ゲームロジックの実行中に収集されたゲーム状態に基づくものであり、
前記シーン変化を含むことが予測される前記複数のビデオフレーム内のビデオフレームの範囲を識別し、
前記シーン変化ロジックを使用してシーン変化のヒントを生成し、前記シーン変化のヒントは前記ビデオフレームの範囲を識別し、前記ビデオフレームの範囲は第1のビデオフレームを含むものであり、
前記第1のビデオフレームをエンコーダに配信し、
前記シーン変化ロジックから前記エンコーダに前記シーン変化のヒントを送出し、
前記シーン変化のヒントに基づいて前記第1のビデオフレームをIフレームとして符号化する、方法。
【請求項2】
さらに、前記エンコーダで前記第1のビデオフレームを受信し、
前記第1のビデオフレームについてシーン変化のヒントが前記エンコーダで受信されたかどうかを判定し、
シーン変化のヒントが受信されなかったときに前記第1のビデオフレームを通常通り符号化し、
前記シーン変化のヒントが受信されたと判定した後に前記第1のビデオフレームをIフレームとして符号化する、請求項1に記載の方法。
【請求項3】
さらに、前記シーン変化ロジックによる検出とは無関係に、前記ビデオフレームの範囲内で予測される前記シーン変化が閾値を満たすかまたは超えることを前記エンコーダで判定し、
前記シーン変化のヒントまたは前記シーン変化が前記閾値を満たすかまたは超えるとの前記エンコーダの前記判定に基づき、前記第1のビデオフレームをIフレームとして符号化する、請求項1に記載の方法。
【請求項4】
さらに、前記シーン変化ロジックによって識別された前記ビデオフレームの範囲内の前記シーン変化が閾値を満たすことも超えることもないと前記エンコーダで判定し、
前記第1のビデオフレームのIフレームとしての符号化を終了させ、
前記第1のビデオフレームを通常通り符号化する、請求項1に記載の方法。
【請求項5】
前記シーン変化ロジックは、前記ゲームロジック内に統合されるか、または前記ゲームロジックへのアドオンとして提供され、前記シーン変化ロジックは、前記複数のビデオフレームを生成するときに収集されたゲーム状態の追跡に基づいてシーン変化を予測するように構成される、請求項1に記載の方法。
【請求項6】
さらに、前記エンコーダでグループオブピクチャ(GOP)モードを無効化し、
前記エンコーダでシーン変化の検出を無効化する、請求項1に記載の方法。
【請求項7】
さらに、前記第1のビデオフレーム内のシーン変化を予測し、
前記シーン変化のヒントは前記第1のビデオフレームを識別し、
前記ビデオフレームの範囲は前記第1のビデオフレームに制限される、請求項1に記載の方法。
【請求項8】
前記シーン変化は、前記第1のビデオフレームが生成される前に予測される、請求項1に記載の方法。
【請求項9】
符号化のためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体であって、
ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成するためのプログラム命令を有し、
前記複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行するためのプログラム命令を有し、前記予測は、前記ゲームロジックの実行中に収集されたゲーム状態に基づくものであり、
前記シーン変化を含むことが予測される前記複数のビデオフレーム内のビデオフレームの範囲を識別するためのプログラム命令を有し、
前記シーン変化ロジックを使用してシーン変化のヒントを生成するためのプログラム命令を有し、前記シーン変化のヒントは、前記ビデオフレームの範囲を識別し、前記ビデオフレームの範囲は第1のビデオフレームを含むものであり、
前記第1のビデオフレームをエンコーダに配信するためのプログラム命令を有し、
前記シーン変化ロジックから前記エンコーダに前記シーン変化のヒントを送出するするためのプログラム命令を有し、かつ、
前記シーン変化のヒントに基づいて前記第1のビデオフレームをIフレームとして符号化するためのプログラム命令を有する、非一時的コンピュータ可読媒体。
【請求項10】
さらに、前記エンコーダで前記第1のビデオフレームを受信するためのプログラム命令と、
前記第1のビデオフレームについてシーン変化のヒントが前記エンコーダで受信されたかどうかを判定するためのプログラム命令と、
シーン変化のヒントが受信されなかったときに前記第1のビデオフレームを通常通り符号化するためのプログラム命令と、
前記シーン変化のヒントが受信されたと判定した後に前記第1のビデオフレームをIフレームとして符号化するためのプログラム命令を有する、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項11】
さらに、前記シーン変化ロジックによる検出とは無関係に、前記ビデオフレームの範囲内で予測される前記シーン変化が閾値を満たすかまたは超えることを前記エンコーダで判定するためのプログラム命令と、
前記シーン変化のヒントまたは前記シーン変化が前記閾値を満たすかまたは超えるとの前記エンコーダの前記判定に基づいて前記第1のビデオフレームをIフレームとして符号化するためのプログラム命令を有する、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項12】
さらに、前記シーン変化ロジックによって識別された前記ビデオフレームの範囲内の前記シーン変化が閾値を満たすことも超えることもないと前記エンコーダで判定するためのプログラム命令と、
前記第1のビデオフレームのIフレームとしての符号化を終了させるための行うプログラム命令と、
前記第1のビデオフレームを通常通り符号化するためのプログラム命令を有する、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項13】
前記シーン変化ロジックは、前記ゲームロジック内に統合されるか、または前記ゲームロジックへのアドオンとして提供され、前記シーン変化ロジックは、前記複数のビデオフレームを生成するときに収集されたゲーム状態の追跡に基づいてシーン変化を予測するように構成される、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項14】
前記エンコーダでグループオブピクチャ(GOP)モードを無効化するためのプログラム命令と、
前記エンコーダでシーン変化の検出を無効化するためのプログラム命令をさらに含む、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項15】
前記第1のビデオフレーム内のシーン変化を予測するためのプログラム命令をさらに含み、
前記シーン変化のヒントは前記第1のビデオフレームを識別し、
前記ビデオフレームの範囲は前記第1のビデオフレームに制限される、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項16】
前記シーン変化は、前記第1のビデオフレームが生成される前に予測される、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項17】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合され、内部に命令を記憶させたメモリを有し、前記命令は、前記コンピュータシステムによって実行された場合、前記コンピュータシステムに、
ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成し、
前記複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行し、前記予測は、前記ゲームロジックの実行中に収集されたゲーム状態に基づくものであり、
前記シーン変化を含むことが予測される前記複数のビデオフレーム内のビデオフレームの範囲を識別し、
前記シーン変化ロジックを使用してシーン変化のヒントを生成し、前記シーン変化のヒントは前記ビデオフレームの範囲を識別し、前記ビデオフレームの範囲は第1のビデオフレームを含むものであり、
前記第1のビデオフレームをエンコーダに配信し、
前記シーン変化ロジックから前記エンコーダに前記シーン変化のヒントを送出し、
前記シーン変化のヒントに基づいて前記第1のビデオフレームをIフレームとして符号化することを含む符号化方法を実行させるものである、コンピュータシステム。
【請求項18】
前記方法では、さらに、
前記エンコーダで前記第1のビデオフレームを受信し、
前記第1のビデオフレームについてシーン変化のヒントが前記エンコーダで受信されたかどうかを判定し、
シーン変化のヒントが受信されなかったときに前記第1のビデオフレームを通常通り符号化し、
前記シーン変化のヒントが受信されたと判定した後に前記第1のビデオフレームをIフレームとして符号化する、請求項17に記載のコンピュータシステム。
【請求項19】
前記方法では、さらに、
前記シーン変化ロジックによる検出とは無関係に、前記ビデオフレームの範囲内で予測される前記シーン変化が閾値を満たすかまたは超えることを前記エンコーダで判定し、
前記シーン変化のヒントまたは前記シーン変化が前記閾値を満たすかまたは超えるとの前記エンコーダの前記判定に基づいて前記第1のビデオフレームをIフレームとして符号化する、請求項17に記載のコンピュータシステム。
【請求項20】
前記方法では、さらに、
前記シーン変化ロジックによって識別された前記ビデオフレームの範囲内の前記シーン変化が閾値を満たすことも超えることもないと前記エンコーダで判定し、
前記第1のビデオフレームのIフレームとしての符号化を終了させ、
前記第1のビデオフレームを通常通り符号化する、請求項17に記載のコンピュータシステム。
【請求項21】
前記方法では、前記シーン変化ロジックは、前記ゲームロジック内に統合されるか、または前記ゲームロジックへのアドオンとして提供され、前記シーン変化ロジックは、前記複数のビデオフレームを生成するときに収集されたゲーム状態の追跡に基づいてシーン変化を予測するように構成される、請求項17に記載のコンピュータシステム。
【請求項22】
前記方法では、さらに、
前記エンコーダでグループオブピクチャ(GOP)モードを無効化し、
前記エンコーダでシーン変化の検出を無効化する、請求項17に記載のコンピュータシステム。
【請求項23】
前記方法では、さらに、
前記第1のビデオフレーム内のシーン変化を予測し、
前記シーン変化のヒントは前記第1のビデオフレームを識別し、
前記ビデオフレームの範囲は前記第1のビデオフレームに制限される、請求項17に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ネットワークを通じてコンテンツをストリーミングするように構成されたストリーミングシステムに関連し、より具体的には、クラウドゲーミングサーバとクライアントの間のレイテンシを低減する目的で、クラウドゲーミングサーバとクライアントの間の均一なレイテンシを提供するために、及びビデオのクライアント表示の滑らかさを向上させるために、ビデオゲームの実行中に生成されたビデオフレームについてのシーン変化のヒントをエンコーダに提供することに関連する。
【背景技術】
【0002】
近年、ネットワークを通じて接続されたクラウドゲーミングサーバとクライアントの間でストリーミング形式のオンラインまたはクラウドゲーミングを可能にするオンラインサービスが継続的に推進されている。ストリーミング形式は、オンデマンドでゲームタイトルを利用可能なこと、マルチプレイヤーゲーミングのためにプレイヤー間でネットワーク化できること、プレイヤー間で資産を共有すること、プレイヤー及び/または観客の間で即時体験(あるいはインスタントエクスペリエンス)を共有すること、ビデオゲームの友人のプレイを友人が見るのを可能にすること、友人の進行中のゲームプレイに友人を参加させることなどの理由により、ますます人気が高まってきている。
残念なことに、需要はまた、ネットワーク接続の能力、ならびにクライアントに配信されるときに高品質の画像をレンダリングするのに十分な応答性を備えたサーバ及びクライアントで実行される処理の制限に対抗して押し上がっている。例えば、サーバ上で実行される全てのゲーミングアクティビティの結果は、最高のユーザ体験のために、圧縮され、ミリ秒の低レイテンシでクライアントに返送する必要がある。
往復レイテンシ(ラウンドトリップレイテンシ)は、ユーザのコントローラ入力からクライアントでのビデオフレームの表示までの全体的な時間として定義され得る。これは、コントローラからクライアントへの制御情報の処理及び送信、クライアントからサーバへの制御情報の処理及び送信、入力に応答してビデオフレームを生成するためのサーバでのその入力の使用、ビデオフレームの処理及び符号化(エンコード)ユニットへの転送(例えば、スキャンアウト)、ビデオフレームの符号化、符号化済みのビデオフレームのクライアントへの返送、ビデオフレームの受信及び復号、ならびにビデオフレームのその表示前の任意の処理またはステージングを含み得る。
片道レイテンシ(一方向のレイテンシ)は、サーバでのビデオフレームの符号化ユニットへの転送(例えば、スキャンアウト)の開始からクライアントでのビデオフレームの表示の開始までの時間からなる往復レイテンシの一部として定義され得る。往復及び片道レイテンシの一部は、データストリームが通信ネットワークを経由してクライアントからサーバに送出され、サーバからクライアントに送出されるのにかかる時間に関連付けられる。別の一部は、クライアント及びサーバでの処理に関連付けられる。フレームの復号及び表示に関連する高度な手順など、これらの動作を改善することにより、サーバとクライアントの間の往復及び片道レイテンシを大幅に低減し、クラウドゲーミングサービスのユーザに高品質な体験を提供することができる。
【0003】
本開示の実施形態は、上記背景のもとになされたものである。
【発明の概要】
【0004】
本開示の実施形態は、ネットワークを通じてコンテンツ(例えば、ゲーミング)をストリーミングするように構成されたストリーミングシステムに関連し、より具体的には、レイテンシを低減し、クラウドゲーミングサーバとクライアントの間のより均一なレイテンシを提供する目的で、及びビデオのクライアント表示の滑らかさを向上させるために、ビデオゲームの実行中に生成されたビデオフレームについてシーン変化のヒントをエンコーダに提供することに関連する。
【0005】
本開示の実施形態は、符号化する方法を開示する。この方法では、ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成する。複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行することも含まれ、予測は、ゲームロジックの実行中に収集されたゲーム状態に基づくものである。また、シーン変化を含むと予測される複数のビデオフレーム内のビデオフレームの範囲を識別することを含む。また、シーン変化ロジックを使用してシーン変化のヒントを生成し、シーン変化のヒントはビデオフレームの範囲を識別し、ビデオフレームの範囲は第1のビデオフレームを含む。また、第1のビデオフレームをエンコーダに配信することも含まれる。シーン変化ロジックからエンコーダにシーン変化のヒントを送出することも含まれる。さらに、シーン変化のヒントに基づいて第1のビデオフレームをIフレームとして符号化することも含まれる。
【0006】
別の実施形態では、符号化するためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が開示される。このコンピュータ可読媒体には、ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成するためのプログラム命令が含まれる。複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行するためのプログラム命令も含まれ、予測は、ゲームロジックの実行中に収集されたゲーム状態に基づくものである。シーンの変化を含むと予測される複数のビデオフレーム内のビデオフレームの範囲を識別するためのプログラム命令も含まれる。シーン変化ロジックを使用してシーン変化のヒントを生成するための命令であって、シーン変化のヒントはビデオフレームの範囲を識別し、ビデオフレームの範囲は第1のビデオフレームを含む、生成するためのプログラム命令も含まれる。第1のビデオフレームをエンコーダに配信するためのプログラム命令も含まれる。シーン変化ロジックからエンコーダにシーン変化のヒントを送出するためのプログラム命令も含まれる。さらに、シーン変化のヒントに基づいて第1のビデオフレームをIフレームとして符号化するためのプログラム命令も含まれる。
【0007】
さらに別の実施形態では、コンピュータシステムは、プロセッサと、プロセッサに結合され、内部に命令を記憶させたメモリを有し、命令は、コンピュータシステムによって実行された場合、コンピュータシステムに符号化方法を実行させるものである。この方法には、ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成することが含まれる。この方法では、複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行し、予測は、ゲームロジックの実行中に収集されたゲーム状態に基づく、実行することを含むものである。この方法では、シーン変化を含むと予測される複数のビデオフレーム内のビデオフレームの範囲を識別する。この方法では、シーン変化ロジックを使用してシーン変化のヒントを生成し、シーン変化のヒントはビデオフレームの範囲を識別し、ビデオフレームの範囲は第1のビデオフレームを含むものである。この方法では、第1のビデオフレームをエンコーダに配信することも含まれる。この方法では、シーン変化ロジックからエンコーダにシーン変化のヒントを送出することも含まれる。さらに、この方法では、シーン変化のヒントに基づいて第1のビデオフレームをIフレームとして符号化することも含まれる。
【0008】
本開示の他の態様は、本開示の原理を実施例として示す添付図面と併せて解釈することで、以下の詳細な説明から明らかになるであろう。
【0009】
本開示は、添付図面と併せて、以下の詳細な説明を参照することにより、最も良く理解され得る。
【図面の簡単な説明】
【0010】
【
図1A】本開示の一実施形態による、フレーム周期の開始時のVSYNC信号の図である。
【
図1B】本開示の一実施形態による、VSYNC信号の周波数の図である。
【
図2A】本開示の一実施形態による、VSYNC信号を同期及びオフセットして片道レイテンシを低減することができる、様々な構成における、1つまたは複数のクラウドゲーミングサーバと1つまたは複数のクライアントデバイスの間でネットワークを経由してゲーミングを提供するためのシステムの図である。
【
図2B】本開示の一実施形態による、VSYNC信号を同期及びオフセットしてコントローラ及びデバイス間の他の情報の受信の最適なタイミングを実現することができる、2つ以上のピアデバイス間でゲーミングを提供するための図である。
【
図2C】本開示の一実施形態による、ソースデバイスとターゲットデバイスの間のVSYNC信号の適切な同期及びオフセット処理から利益を得る様々なネットワーク構成を示す。
【
図2D】本開示の一実施形態による、ソースデバイスとターゲットデバイスの間のVSYNC信号の適切な同期及びオフセット処理から利益を得る、クラウドゲーミングサーバと複数のクライアントの間のマルチテナンシー構成を示す。
【
図3】本開示の一実施形態による、サーバ上で実行されているビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトによるクラウドゲーミングサーバとクライアントの間の片道レイテンシの変動を示す。
【
図4】サーバ上で実行されているビデオゲームから生成されたビデオフレームをストリーミングするときのクラウドゲーミングサーバ及びクライアントを含むネットワーク構成を示し、サーバとクライアントの間のVSYNC信号は、サーバとクライアントでの動作の重畳を可能にし、サーバとクライアントの間の片道レイテンシを低減するために同期及びオフセット処理される。
【
図5A】本開示の一実施形態による、クラウドゲーミングサーバ上で実行されているビデオゲームからネットワークを通じてクライアントにコンテンツをストリーミングするときにビデオフレームを符号化するときにシーン変化のヒントを使用するように構成されたクラウドゲーミングサーバシステムを示す。
【
図5B】本開示の一実施形態による、対応するビデオフレームを符号化するときにエンコーダがシーン変化のヒントを使用するように構成される、クラウドゲーミングサーバで実行されているビデオゲームからネットワークを通じてクライアントにコンテンツをストリーミングするときに修正済みのビデオフレームを生成してエンコーダに配信するように実行されているスキャンアウト動作を示す。
【
図6A】本開示の一実施形態による、1つまたは複数のシーン変化のヒントが対応するビデオフレームを処理するためにエンコーダによって使用される、クラウドゲーミングを実行するときのビデオフレームの符号化方法を示すフロー図である。
【
図6B】本開示の一実施形態による、対応するビデオフレームの効率的な符号化に使用することができるビデオゲームまたはゲームアプリケーションを実行するときの1つまたは複数のシーン変化のヒントの生成を含む、クラウドゲーミングを実行するときにビデオフレームを符号化する方法を示すフロー図である。
【
図7】本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイスの構成要素を示す。
【発明を実施するための形態】
【0011】
以下の詳細な説明は、例示の目的で多くの特定の詳細を含むが、当業者であれば、以下の詳細に対する多くの変形及び変更が本開示の範囲内にあることを理解するであろう。したがって、以下で説明される本開示の態様は、この説明に続く特許請求の範囲への一般性を失うことなく、また限定を課すことなく示される。
【0012】
概して、本開示の様々な実施形態は、メディアコンテンツをストリーミングする(例えば、ビデオゲームからオーディオ及びビデオをストリーミングする)ときのソースデバイスとターゲットデバイスの間のレイテンシ及び/またはレイテンシの不安定性を低減するように構成された方法及びシステムについて説明する。サーバで複雑なフレーム(例えば、シーン変化)を生成するために必要な時間が付加されること、サーバで複雑なフレームを符号化/圧縮(エンコード/)するための時間が増加すること、ネットワークを経由した通信経路が変わりやすいこと、及びクライアントで複雑なフレームを復号するための時間が増加することにより、サーバとクライアントの間の片道レイテンシにおいてレイテンシの不安定性が生じる場合がある。レイテンシの不安定性は、サーバとクライアントでのクロックの差によっても生じる場合がある。これにより、サーバVSYNC信号とクライアントVSYNC信号の間のドリフトが発生する。本開示の実施形態では、ビデオゲームの実行中に生成されたビデオフレームについてシーン変化のヒントをエンコーダに提供することにより、クラウドゲーミングアプリケーションにおいてサーバとクライアントの間の片道レイテンシを低減することができる。エンコーダは、シーン変化であるビデオフレーム上で異なる符号化を実行する(例えば、クラウドゲーミングサーバとクライアントの間でコンテンツをストリーミングするために使用されるMPEG圧縮形式のPフレームで符号化するのではなくIフレームに切り替える)場合がある。特に、ゲームアプリケーションが、シーン変化が発生したことを(例えば、GPU APIなどのAPIを介して)エンコーダに通知するとき、このシーン変化のヒントを符号化プロセスで使用することができる。このようにして、シーン変化のヒントがエンコーダに提供されるため、エンコーダはシーン変化を検出する必要がない。シーン変化を検出すると、シーン変化の検出及びより複雑なビデオフレームの再符号化のためにジッタが生じ、レイテンシが増加する場合がある。つまり、エンコーダは、シーン変化の検出及びより複雑なビデオフレームの再符号化のために1つまたは複数の追加のフレーム周期を必要とせずに、シーン変化のヒントを使用してシーン変化として識別されるビデオフレームを適切な複雑さ(例えば、Iフレーム)を使用して直ちに符号化することができる。これにより、片道レイテンシが低減され、フレームレートがより滑らかになり、クラウドゲーミングサーバとクライアントの間の片道レイテンシの信頼性及び/または均一性がより高くなる。
【0013】
様々な実施形態の上記の一般的な理解を用いて、実施形態の例示的な詳細について様々な図面を参照して以下で説明する。
【0014】
本明細書全体を通して、「ゲーム」または「ビデオゲーム」または「ゲーミングアプリケーション」への言及は、入力コマンドの実行を通じて指示される任意のタイプの対話型アプリケーションを表現することを意味する。単なる例示目的で、対話型アプリケーションは、ゲーミング、文書処理、ビデオ処理、ビデオゲーム処理などのためのアプリケーションを含む。さらに、上記で紹介された用語は置き換え可能である。
【0015】
クラウドゲーミングは、サーバでビデオゲームを実行してゲームレンダリング済みのビデオフレームを生成することを含む。このビデオフレームは、次いで表示のためにクライアントに送出される。サーバとクライアントの両方での動作のタイミングは、それぞれの垂直同期(VSYNC)パラメータに連動し得る。VSYNC信号がサーバ及び/またはクライアントの間で適切に同期及び/またはオフセットされると、サーバで実行される動作(例えば、1つまたは複数のフレーム周期にわたるビデオフレームの生成及び送信)は、クライアントで実行される動作と同期される(例えば、フレーム周期に対応する表示フレームまたはリフレッシュレートでディスプレイ上にビデオフレームを表示する)。特に、サーバで生成されたサーバVSYNC信号とクライアントで生成されたクライアントVSYNC信号とは、サーバとクライアントでの動作を同期するために使用され得る。つまり、サーバVSYNC信号とクライアントVSYNC信号が同期及び/またはオフセットされると、サーバはビデオフレームを、クライアントがそれらのビデオフレームを表示する仕方と同期させて生成及び送出する。
【0016】
サーバとクライアントの間でメディアコンテンツをストリーミングするときにビデオフレームを生成し、それらのビデオフレームを表示するために、VSYNC信号区間及び垂直ブランキング区間(VBI)が組み込まれている。例えば、サーバは、対応するサーバVSYNC信号によって定義されたような1つまたは複数のフレーム周期においてゲームレンダリング済みのビデオフレームを生成しようと試み(例えば、フレーム周期が16.7msの場合、フレーム周期ごとにビデオフレームを生成すると60Hz動作となり、2つのフレーム周期ごとに1つのビデオフレームを生成すると30Hz動作となる)、その後、そのビデオフレームを符号化してクライアントに送信する。クライアントでは、受信された符号化済みのビデオフレームが復号されて表示される。ここでクライアントは、対応するクライアントVSYNCで開始して、ディスプレイにレンダリングされる各ビデオフレームを表示する。
【0017】
例示のために、
図1Aは、VSYNC信号111がフレーム周期の開始をどのように示し得るかを示し、サーバ及び/またはクライアントで対応するフレーム周期中に様々な動作が実行され得る。メディアコンテンツをストリーミングするとき、サーバは、ビデオフレームの生成及び符号化のためにサーバVSYNC信号を使用でき、クライアントは、ビデオフレームを表示するためにクライアントVSYNC信号を使用し得る。VSYNC信号111は、
図1Bに示されるように、定義されたフレーム周期110に対応する定義された周波数で生成される。加えて、VBI105は、前のフレーム周期に最後のラスター線がディスプレイ上に描画されてから最初のラスター線(例えば、最上部)がディスプレイに描画されるまでの時間周期を定義する。示されるように、VBI105の後、表示のためにレンダリングされたビデオフレームは、ラスター走査線106を介して(例えば、ラスター線毎に、左から右に)表示される。
【0018】
加えて、本開示の様々な実施形態は、メディアコンテンツ(例えば、ビデオゲームコンテンツ)をストリーミングするときなどに、ソースデバイスとターゲットデバイスの間の片道レイテンシ及び/またはレイテンシの不安定性を低減するために開示される。単なる例示の目的で、片道レイテンシ及び/またはレイテンシの不安定性を低減するための様々な実施形態が、サーバ及びクライアントのネットワーク構成内で説明される。しかしながら、片道レイテンシ及び/またはレイテンシの不安定性を低減するために開示された様々な技術は、
図2A~2Dに示されるように、他のネットワーク構成内で、及び/またはピアツーピアネットワークを経由して実装され得ることが理解される。例えば、片道レイテンシ及び/またはレイテンシの不安定性を低減するために開示された様々な実施形態は、様々な構成(例えば、サーバ及びクライアント、サーバ及びサーバ、サーバ及び複数のクライアント、サーバ及び複数のサーバ、クライアント及びクライアント、クライアント及び複数のクライアントなど)におけるサーバ及びクライアントデバイスのうちの1つまたは複数の間で実装され得る。
【0019】
図2Aは、本開示の一実施形態による、サーバ260とクライアント210の間の片道レイテンシを低減するために、サーバVSYNC信号とクライアントVSYNC信号を同期及びオフセットすることができる、及び/または動的バッファリングがクライアント上で実行される、及び/またはサーバ上の符号化動作と送信動作を重畳させることができる、及び/またはクライアントでの受信動作と復号動作を重畳させることができる、及び/またはクライアント上の復号動作と表示動作を重畳させることができる、様々な構成における、1つもしくは複数のクラウドゲーミングネットワーク290及び/またはサーバ260と1つまたは複数のクライアントデバイス210の間でネットワーク250を経由してゲーミングを提供するためのシステム200Aの図である。特に、本開示の一実施形態によれば、システム200Aは、クラウドゲームネットワーク290を介してゲーミングを提供し、ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、シンクライアント)からリモートで実行されている。システム200Aは、シングルプレイヤーモードまたはマルチプレイヤーモードのいずれかで、ネットワーク250を介してクラウドゲームネットワーク290を通じて1つまたは複数のゲームをプレイする1人または複数のユーザにゲーミングの制御を提供し得る。いくつかの実施形態では、クラウドゲームネットワーク290は、ホストマシンのハイパーバイザ上で実行されている複数の仮想マシン(VM)を含み得、1つまたは複数の仮想マシンは、ホストのハイパーバイザに利用可能であるハードウェアリソースを利用するゲームプロセッサモジュールを実行するように構成される。ネットワーク250は、1つまたは複数の通信技術を含み得る。いくつかの実施形態では、ネットワーク250は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
【0020】
いくつかの実施形態では、通信は、無線技術を使用して容易化され得る。そのような技術は、例えば、5G無線通信技術を含み得る。5Gはセルラーネットワーク技術の第5世代であり、5Gネットワークはデジタルセルラーネットワークである。このネットワークでは、プロバイダによってカバーされたサービスエリアは、セルと呼ばれる小さい地理的エリアに分割されている。音及び画像を表すアナログ信号は、電話機内でデジタル化され、アナログ-デジタルコンバータによって変換され、ビットのストリームとして送信される。セル内の全ての5G無線デバイスは、他のセルで再利用される周波数のプールからトランシーバによって割り当てられた周波数チャネルを経由して、セル内のローカルアンテナアレイ及び低電力自動トランシーバ(送信機及び受信機)と電波によって通信する。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって電話網及びインターネットに接続される。他のセルネットワークと同様に、あるセルから別のセルに横断するモバイルデバイスは、新しいセルに自動的に転送される。5Gネットワークは単なる実施例のタイプの通信ネットワークであり、本開示の実施形態は、前世代の無線または有線通信、及び5G以降に続く後世代の有線または無線技術を利用し得ることが理解されるべきである。
【0021】
図示されるように、クラウドゲームシステム290は、複数のビデオゲームへのアクセスを提供するゲームサーバ260を含む。ゲームサーバ260は、クラウド内で利用可能な任意のタイプのサーバコンピューティングデバイスであり得、1つまたは複数のホスト上で実行されている1つまたは複数の仮想マシンとして構成され得る。例えば、ゲームサーバ260は、ユーザのためにゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理し得る。そのため、複数の仮想マシンに関連付けられたゲームサーバ260の複数のゲームプロセッサは、複数のユーザのゲームプレイに関連付けられた1つまたは複数のゲームの複数のインスタンスを実行するように構成される。このようにして、バックエンドサーバサポートは、複数のゲームアプリケーションのゲームプレイのメディア(例えば、ビデオ、オーディオなど)のストリーミングを、対応する複数のユーザに提供する。つまり、ゲームサーバ260は、データ(例えば、対応するゲームプレイのレンダリング済みの画像及び/またはフレーム)を、対応するクライアントデバイス210にネットワーク250を通じてストリーミングして返すように構成される。このようにして、クライアントデバイス210によって受信され、伝達されたコントローラの入力に応答してコンピュータ的に複雑なゲーミングアプリケーションがバックエンドサーバで実行されていてもよい。各サーバは、画像及び/またはフレームをレンダリングすることが可能である。これらの画像及び/またはフレームは、次いで符号化(例えば、圧縮)され、表示のために対応するクライアントデバイスにストリーミングされる。
【0022】
例えば、複数のユーザは、ストリーミングメディアを受信するように構成された対応するクライアントデバイス210を使用して、通信ネットワーク250を介してクラウドゲームネットワーク290にアクセスし得る。一実施形態では、クライアントデバイス210は、計算機能(例えば、ゲームタイトル処理エンジン211を含む)を提供するように構成されたバックエンドサーバ(例えば、クラウドゲームネットワーク290のゲームサーバ260)とのインターフェースを提供するシンクライアントとして構成され得る。別の実施形態では、クライアントデバイス210は、ビデオゲームの少なくとも何らかのローカル処理のためにゲームタイトル処理エンジン及びゲームロジックを用いて構成され得、バックエンドで実行されているビデオゲームによって生成されるようなストリーミングコンテンツを受信するために、またはバックエンドサーバサポートによって提供される他のコンテンツのためにさらに利用され得る。ローカル処理の場合、ゲームタイトル処理エンジンは、ビデオゲームを実行するための基本的なプロセッサベースの機能及びビデオゲームに関連付けられたサービスを含む。ゲームロジックは、ローカルクライアントデバイス210上に記憶され、ビデオゲームを実行するために使用される。
【0023】
特に、対応するユーザ(図示せず)のクライアントデバイス210は、インターネットなどの通信ネットワーク250を経由してゲームへのアクセスを要求するように、及びゲームサーバ260によって実行されたビデオゲームによって生成される画像をレンダリングして表示するように構成され、符号化済みの画像は、対応するユーザに関連付けて表示するためにクライアントデバイス210に配信される。例えば、ユーザは、ゲームサーバ260のゲームプロセッサ上で実行されているビデオゲームのインスタンスとクライアントデバイス210を通じて対話していてもよい。より具体的には、ビデオゲームのインスタンスは、ゲームタイトル処理エンジン211によって実行される。ビデオゲームを実装する対応するゲームロジック(例えば、実行可能コード)215は、データストア(図示せず)を通じて記憶され、アクセス可能であり、ビデオゲームを実行するために使用される。ゲームタイトル処理エンジン211は、複数のゲームロジックを使用して複数のビデオゲームをサポートすることが可能であり、それらのビデオゲームのそれぞれはユーザによって選択可能である。
【0024】
例えば、クライアントデバイス210は、ゲームプレイを促すために使用される入力コマンドを介するなどして、対応するユーザのゲームプレイに関連付けられたゲームタイトル処理エンジン211と対話するように構成される。特に、クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって取得されたジェスチャ、マウス、タッチパッドなどの、様々なタイプの入力デバイスからの入力を受信し得る。クライアントデバイス210は、ネットワーク250を経由してゲームサーバ260に接続することが可能である、メモリ及びプロセッサモジュールを少なくとも有する任意のタイプのコンピューティングデバイスとすることができる。バックエンドゲームタイトル処理エンジン211は、レンダリング済みの画像を生成するように構成される。
この画像は、クライアントデバイス210に関連付けられた対応するディスプレイに表示するためにネットワーク250を経由して配信される。例えば、クラウドベースのサービスを通じて、ゲームレンダリング済みの画像は、ゲームサーバ260のゲーム実行エンジン211上で実行されている対応するゲームのインスタンスによって配信され得る。つまり、クライアントデバイス210は、符号化済みの画像(例えば、ビデオゲームの実行を通じて生成されたゲームレンダリング済みの画像から符号化された)を受信し、ディスプレイ11のためにレンダリングされた画像を表示するように構成される。一実施形態では、ディスプレイ11は、HMD(例えば、VRコンテンツを表示する)を含む。いくつかの実施形態では、レンダリング済みの画像は、クラウドベースのサービスから直接、またはクライアントデバイス210(例えば、プレイステーション(登録商標)リモートプレイ)を介して、無線または有線でスマートフォンまたはタブレットにストリーミングされ得る。
【0025】
一実施形態では、ゲームサーバ260及び/またはゲームタイトル処理エンジン211は、ゲーミングアプリケーションに関連付けられたゲーム及びサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能には、2Dまたは3Dレンダリング、物理、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドーイング、カリング、変換、人工知能などが含まれる。加えて、ゲーミングアプリケーション用のサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークのフレンドとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどが含まれる。
【0026】
一実施形態では、クラウドゲームネットワーク290は、分散型ゲームサーバシステム及び/またはアーキテクチャである。特に、ゲームロジックを実行する分散型ゲームエンジンが、対応するゲームの対応するインスタンスとして構成される。一般に、分散型ゲームエンジンは、ゲームエンジンの機能のそれぞれを取り込み、多数の処理エンティティによって実行するためにそれらの機能を分散させる。個々の機能は、1つまたは複数の処理エンティティにわたってさらに分散させることができる。処理エンティティは、物理ハードウェアを含めて、及び/または仮想構成要素もしくは仮想マシンとして、及び/または仮想コンテナとして、種々の構成で構成され得る。
この場合、コンテナは、仮想化されたオペレーティングシステム上で動作しているゲーミングアプリケーションのインスタンスを仮想化するものであるため、仮想マシンとは異なる。処理エンティティは、クラウドゲームネットワーク290の1つまたは複数のサーバ(計算ノード)上のその基礎となるハードウェアを利用し、及び/またはそれらに依拠してもよく、サーバは、1つまたは複数のラック上に位置してもよい。
様々な処理エンティティに対するそれらの機能の実行の協調、割り当て及び管理は、分散同期層によって実行される。このようにして、それらの機能の実行は、プレイヤーによるコントローラ入力に応答してゲーミングアプリケーション用のメディア(例えば、ビデオフレーム、オーディオなど)を生成することが可能になるように分散同期層によって制御される。分散同期層は、重要なゲームエンジン構成要素/機能が、より効率的な処理のために分散され、再度組み立てられるように、分散処理エンティティにわたってそれらの機能を(例えば、負荷バランシングを通じて)効率的に実行することが可能である。
【0027】
ゲームタイトル処理エンジン211は、マルチテナンシーGPU機能を実行するように構成され得る中央演算処理装置(CPU)及びグラフィックス処理装置(GPU)グループを含む。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行されている単一のアプリケーションについてグラフィックス処理を実行する。
【0028】
図2Bは、本開示の一実施形態による、VSYNC信号を同期及びオフセットしてコントローラ及びデバイスの間の他の情報の受信の最適なタイミングを実現することができる、2つ以上のピアデバイス間でゲーミングを提供するための図である。例えば、直接対決ゲーミングは、ネットワーク250を通じて接続された、またはピアツーピア通信(例えば、ブルートゥース(登録商標)、ローカルエリアネットワーキングなど)を通じて直接接続された2つ以上のピアデバイスを使用して実行され得る。
【0029】
図示されるように、ゲームは、ビデオゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、ゲームコンソール)のそれぞれにおいてローカルに実行されており、クライアントデバイス210は、ピアツーピアネットワーキングを通じて通信する。例えば、ビデオゲームのインスタンスは、対応するクライアントデバイス210のゲームタイトル処理エンジン211によって実行されている。ビデオゲームを実装するゲームロジック215(例えば、実行可能コード)は、対応するクライアントデバイス210上に記憶され、ゲームを実行するために使用される。例示の目的で、ゲームロジック215は、ポータブルメディア(例えば、光学メディアなど)を通じて、またはネットワークを通じて、対応するクライアントデバイス210に配信され得る(例えばインターネットを通じてゲーミングプロバイダからダウンロードされ得る)。
【0030】
一実施形態では、対応するクライアントデバイス210のゲームタイトル処理エンジン211は、ゲーミングアプリケーションに関連付けられたゲーム及びサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能には、2Dまたは3Dレンダリング、物理、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドーイング、カリング、変換、人工知能などが含まれる。加えて、ゲーミングアプリケーション用のサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークのフレンドとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどが含まれる。
【0031】
クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって取得されたジェスチャ、マウス、タッチパッドなどの、様々なタイプの入力デバイスからの入力を受信し得る。クライアントデバイス210は、メモリ及びプロセッサモジュールを少なくとも有する任意のタイプのコンピューティングデバイスとすることができ、ゲームタイトル処理エンジン211によって実行されたレンダリング済みの画像を生成し、そのレンダリング済みの画像をディスプレイ(例えば、ディスプレイ11、またはヘッドマウントディスプレイ-HMDなどを含むディスプレイ11)上に表示するように構成される。
例えば、レンダリング済みの画像は、ゲームプレイを促すために使用される入力コマンドを介するなどして、対応するユーザのゲームプレイを実施するためにクライアントデバイス210上でローカルに実行されているゲームのインスタンスに関連付けられ得る。クライアントデバイス210のいくつかの例としては、パーソナルコンピュータ(PC)、ゲームコンソール、ホームシアターデバイス、汎用コンピュータ、モバイルコンピューティングデバイス、タブレット、電話、またはゲームのインスタンスを実行することができる任意の他のタイプのコンピューティングデバイスが挙げられる。
【0032】
図2Cは、本開示の実施形態による、
図2A~
図2Bに示された構成を含む、ソースデバイスとターゲットデバイスの間のVSYNC信号の適切な同期及びオフセットから利益を得る様々なネットワーク構成を示す。特に、様々なネットワーク構成は、サーバとクライアントの間の片道レイテンシ及び/またはレイテンシのばらつきを低減する目的でのサーバVSYNC信号とクライアントVSYNC信号の周波数の適切なアライメント及びサーバVSYNC信号とクライアントVSYNC信号のタイミングオフセットから利益を得る。例えば、1つのネットワークデバイス構成は、クラウドゲーミングサーバ(例えば、ソース)対クライアント(ターゲット)の構成を含む。一実施形態では、クライアントは、ウェブブラウザ内でオーディオ及びビデオ通信を提供するように構成されたWebRTCクライアントを含み得る。
別のネットワーク構成は、クライアント(例えば、ソース)対サーバ(ターゲット)の構成を含む。さらに別のネットワーク構成は、サーバ(例えば、ソース)対サーバ(例えば、ターゲット)の構成を含む。別のネットワークデバイス構成は、クライアント(例えば、ソース)対クライアント(ターゲット)の構成を含み、クライアントはそれぞれ、例えば、直接対決ゲーミングを提供するためのゲーミングコンソールとすることができる。
【0033】
特に、片道レイテンシ及び/またはレイテンシのばらつきを低減する目的で、VSYNC信号のアライメントは、ドリフトを除去する目的で、及び/またはサーバVSYNC信号とクライアントVSYNC信号の間の理想的な関係を維持するために、サーバVSYNC信号とクライアントVSYNC信号の周波数を同期することを含み得、クライアントVSYNC信号とサーバのVSYNC信号の間のタイミングオフセットを調整することも含み得る。
適切なアライメントを実現するために、一実施形態では、サーバ260とクライアント210のペア間の適切なアライメントを実施するためにサーバVSYNC信号が調整され得る。
別の実施形態では、サーバ260とクライアント210のペア間の適切なアライメントを実施するためにクライアントVSYNC信号が調整され得る。クライアントVSYNC信号とサーバVSYNC信号が一旦アライメントされると、サーバVSYNC信号とクライアントVSYNC信号は実質的に同じ周波数で発生し、タイミングオフセットによって互いにオフセットされる。このタイミングオフセットは随時調整され得る。
別の実施形態では、VSYNC信号のアライメントは、ドリフトを除去する、及び/またはコントローラ及び他の情報の受信の最適のタイミングを実現する目的で、2つのクライアントについてVSYNCの周波数を同期することを含み得、それらVSYNC信号間のタイミングオフセットを調整することをも含み得、いずれかのVSYNC信号が、このアライメントを実現するように調整され得る。
さらに別の実施形態では、アライメントは、複数のサーバについてVSYNCの周波数を同期することを含み得、例えば、直接対決のクラウドゲーミングの場合、サーバVSYNC信号とクライアントVSYNC信号の周波数を同期すること、及びクライアントVSYNC信号とサーバVSYNC信号の間のタイミングオフセットを調整することも含み得る。サーバ対クライアントの構成及びクライアント対クライアントの構成では、アライメントは、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期と、サーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットを提供することとの両方を含み得る。サーバ対サーバの構成では、アライメントは、タイミングオフセットの設定を伴わないサーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期を含み得る。
【0034】
図2Dは、本開示の一実施形態による、ソースデバイスとターゲットデバイスの間のVSYNC信号の適切な同期及びオフセットから利益を得るクラウドゲーミングサーバ260と1つまたは複数のクライアント210の間のマルチテナンシー構成を示す。サーバ対クライアントの構成では、アライメントは、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期と、サーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットを提供することとの両方を含み得る。マルチテナンシー構成では、一実施形態では、サーバ260とクライアント210のペア間の適切なアライメントを実施するために、クライアントVSYNC信号が各クライアント210にて調整される。
【0035】
例えば、一実施形態では、グラフィックスサブシステムは、マルチテナンシーGPU機能を実行するように構成され得、1つのグラフィックスサブシステムは、複数のゲームについてグラフィックス及び/またはレンダリングパイプラインを実装している可能性がある。つまり、グラフィックスサブシステムは、実行されている複数のゲーム間で共有される。特に、一実施形態では、ゲームタイトル処理エンジンは、マルチテナンシーGPU機能を実行するように構成されたCPU及びGPUグループを含み得、1つのCPU及びGPUグループが複数のゲームについてグラフィックス及び/またはレンダリングパイプラインを実装している可能性がある。つまり、CPU及びGPUグループは、実行されている複数のゲーム間で共有される。CPU及びGPUグループは、1つまたは複数の処理デバイスとして構成することができる。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行されている単一のアプリケーションについてグラフィックス処理を実行する。
【0036】
図3は、サーバでビデオゲームを実行してゲームレンダリング済みのビデオフレームを生成し、それらのビデオフレームを表示のためにクライアントに送出する一般的なプロセスを示す。従来、ゲームサーバ260及びクライアント210でのいくつかの動作は、それぞれのVSYNC信号によって定義されるようなフレーム周期内に実行される。例えば、サーバ260は、対応するサーバVSYNC信号311によって定義されるような1つまたは複数のフレーム周期において301でゲームレンダリング済みのビデオフレームを生成しようと試みる。ビデオフレームは、動作350で入力デバイスから配信された制御情報(例えば、ユーザの入力コマンド)、または制御情報によって駆動されないゲームロジックのいずれかに応答して、ゲームによって生成される。
送信ジッタ351は、制御情報をサーバ260に送出するときに存在することがあり、ジッタ351は、クライアントからサーバへの(例えば、入力コマンドを送出するときの)ネットワークレイテンシの変動を測る。示されるように、太い矢印は、制御情報をサーバ260に送出するときの現在の遅延を示しているが、ジッタのために、サーバ260に制御情報が到着する時間の範囲(例えば、点線の矢印で囲まれた範囲)が存在し得る。フリップ時間309で、GPUは、対応するビデオフレームが完全に生成され、サーバ260のフレームバッファ内に置かれたことを示すフリップコマンドに到達する。
その後、サーバ260は、サーバVSYNC信号311(分かりやすくするためにVBIは省略されている)によって定義されるような後続のフレーム周期にわたって、そのビデオフレームについてスキャンアウト/スキャンイン(動作302、スキャンアウトはVSYNC信号311にアライメントされ得る)を実行する。続いて、ビデオフレームが符号化され(動作303)(例えば、VSYNC信号311の発生後に符号化が開始され、符号化の終了はVSYNC信号にアライメントされなくてもよい)、クライアント210に送信される(動作304、送信はVSYNC信号311にアライメントされなくてもよい)。
クライアント210で、符号化済みのビデオフレームが受信され(動作305、受信はクライアントVSYNC信号312にアライメントされなくてもよい)、復号され(動作306、復号はクライアントVSYNC信号312にアライメントされなくてもよい)、バッファされ、表示される(動作307、表示の開始はクライアントのVSYNC信号312にアライメントされ得る)。特に、クライアント210は、クライアントVSYNC信号312の対応する発生で開始して、表示のためにレンダリングされた各ビデオフレームを表示する。
【0037】
片道レイテンシ315は、サーバでのビデオフレームの符号化ユニットへの転送の開始(例えば、スキャンアウト302)から、クライアント307でのビデオフレームの表示の開始までのレイテンシとして定義され得る。つまり、片道レイテンシは、クライアントのバッファリングを考慮した、サーバのスキャンアウトからクライアントの表示までの時間である。個々のフレームは、スキャンアウト302の開始から復号306の完了までのレイテンシを有する。このレイテンシは、符号化303及び送信304などのサーバ動作、付随するジッタ352を伴うサーバ260とクライアント210の間のネットワーク送信、ならびにクライアントの受信305が高い程度で変動することにより、フレーム毎に異なり得る。
送信ジッタ352は、サーバ260からクライアント210への片道レイテンシの変動を測り、ジッタ値が低いほど、接続がより安定していることを示す。レイテンシの変動は、フレーム周期を超えるサーバでの動作、ならびにビデオフレームをクライアント210に送信するときにレイテンシをもたらすネットワークの問題に起因し得る。示されるように、直線の太い矢印は、対応するビデオフレームをクライアント210に送出するときの現在のレイテンシを示すが、ジッタ352のために、クライアント210にビデオフレームが到着する時間の範囲(例えば、点線の矢印で囲まれた範囲)が存在し得る。良好なプレイ体験を実現するには、片道レイテンシが比較的安定している(例えば、相当の均一性が保たれている)必要があるため、従来はバッファリング320が実行され、その結果、低レイテンシ(例えば、スキャンアウト302の開始から復号306の完了まで)の個々のフレームの表示が数フレーム周期の間遅延される。つまり、ネットワークの不安定性、または予測できない符号化/復号時間が存在する場合、片道レイテンシを均一に保つために追加のバッファリングが必要となる。
【0038】
本開示の一実施形態によれば、一部には、サーバ上で実行されているビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトにより、クラウドゲーミングサーバとクライアントの間の片道レイテンシが異なり得る。つまり、サーバVSYNC信号311とクライアントVSYNC信号312の周波数の違いにより、クライアントVSYNC信号において、サーバ260から到着するフレームに対するドリフト390が生じ得る。サーバVSYNC信号311とクライアントVSYNC信号312の相対的なタイミング間のドリフト390は、サーバ及びクライアントでの各クロックのそれぞれにおいて使用される水晶発振器のごくわずかな違いに起因し得る。
レイテンシの変動は、クライアント210での受信及び復号動作を通じて延長され得、片道レイテンシの変動に対処するために1つまたは複数のバッファ320が実装され得る。さらに、サーバとクライアントの間のアライメントのためにVSYNC信号の同期及びオフセットを1回または複数回実行することにより、クライアント上の動的バッファリングを提供することにより、サーバでのビデオフレームの符号化と送信を重畳させることにより、クライアントでのビデオフレームの受信と復号を重畳させることにより、及びクライアントでのビデオフレームの復号と表示を重畳させることにより、片道レイテンシは低減され得る。
【0039】
加えて、ビデオフレームの符号化(動作303)中、以前の技術では、エンコーダは、符号化されている現在のビデオフレームと1つまたは複数の以前に符号化されたフレームとの間にどれだけの変化が存在するかを決定して、シーン変化(例えば、対応する生成されたビデオフレームの複雑な画像)が存在するかどうかを判定する。つまり、シーン変化のヒントは、符号化対象の現在のフレームと既に符号化されている以前のフレームとの違いから推測され得る。ネットワークを経由してサーバからクライアントにコンテンツをストリーミングするとき、サーバのエンコーダは、シーン変化として検出される複雑なビデオフレームを符号化することを決定し得る。
それ以外の場合、エンコーダは、シーン変化として検出されない、複雑さのより少ないビデオフレームを符号化する。ただし、エンコーダでのシーン変化の検出には、最大で1フレーム周期(例えば、ジッタの追加)かかる場合がある。その理由として、ビデオフレームは、最初はより少ない複雑さで(第1のフレーム周期で)符号化されるが、その後、シーン変化が存在すると一旦判定されるとより複雑さを増して(第2のフレーム周期で)再符号化されるためである。また、シーン変化の検出は、シーン変化が存在しないとしても、現在符号化されているビデオフレームと以前に符号化されたビデオフレームとの差が閾値の差の値を超え得るとき、(画像内の小さい爆発を通じてなど)不必要に引き起こされ得る。そのため、シーン変化がエンコーダで検出されるとき、シーン変化の検出を実行すること、及びより複雑なビデオフレームを再符号化することに対応するために、ジッタに起因した追加のレイテンシがエンコーダに導入される。
【0040】
図4は、本開示の実施形態による、サーバの動作とクライアントの動作を重畳させることで片道レイテンシを低減する、ならびにサーバとクライアントの間のVSYNC信号を同期及びオフセットすることで、片道レイテンシを低減するのみでなく、サーバとクライアントの間の片道レイテンシのばらつきを低減する、サーバ上で実行されているビデオゲームから生成されたビデオフレームをストリーミングするときの、高度に最適化されたクラウドゲーミングサーバ260及び高度に最適化されたクライアント210を含むネットワーク構成を通じたデータの流れを示す。
特に、
図4は、サーバVSYNC信号とクライアントVSYNC信号の間の望ましいアライメントを示す。一実施形態では、サーバVSYNC信号311の調整は、例えば、サーバ及びクライアントのネットワーク構成において、サーバVSYNC信号とクライアントVSYNC信号の間の適切なアライメントを得るために実行される。別の実施形態では、クライアントVSYNC信号312の調整が、例えば、マルチテナントサーバ対複数のクライアントのネットワーク構成において、サーバVSYNC信号とクライアントVSYNC信号の間の適切なアライメントを得るために実行される。
例示の目的で、サーバVSYNC信号311の調整が、サーバVSYNC信号とクライアントVSYNC信号の周波数を同期する、及び/または対応するクライアントVSYNC信号とサーバVSYNC信号の間のタイミングオフセットを補正する目的で
図4に記載されているが、クライアントVSYNC信号312も調整に使用され得ることが理解される。この特許の文脈では、「同期する」とは、周波数が一致するように信号を調整することを意味すると解釈されるべきであるが、位相は異なり得る。「オフセット」とは、信号間の時間遅延、例えば、一方の信号が最大に到達してから他方の信号が最大に到達するまでの時間を意味すると解釈されるべきである。
【0041】
図示されるように、
図4は、本開示の実施形態では、サーバでビデオゲームを実行してレンダリング済みのビデオフレームを生成し、それらのビデオフレームを表示のためにクライアントに送出する改善されたプロセスを示す。このプロセスは、サーバ及びクライアントでの単一のビデオフレームの生成及び表示に関して示されている。特に、サーバは、401でゲームレンダリング済みのビデオフレームを生成する。例えば、サーバ260は、ゲームを実行するように構成されたCPU(例えば、ゲームタイトル処理エンジン211)を含む。CPUは、ビデオフレームについて1つまたは複数のドローコールを生成し、このドローコールは、サーバ260の対応するGPUによってグラフィックスパイプラインで実行するためにコマンドバッファ内に置かれたコマンドを含む。グラフィックスパイプラインは、表示用のビデオフレームについてレンダリングされるときのテクスチャ値を生成するために、シーン内のオブジェクトの頂点に対する1つまたは複数のシェーダプログラムを含み得、これらの動作は、効率化のためにGPUを通じて並列に実行される。フリップ時間409で、GPUは、対応するビデオフレームが完全に生成及び/またはレンダリングされ、サーバ260のフレームバッファ内に置かれたことを示す、コマンドバッファ内のフリップコマンドに到達する。
【0042】
402で、サーバは、ゲームレンダリング済みのビデオフレームのエンコーダへのスキャンアウトを実行する。特に、スキャンアウトは、走査線毎に、または連続する走査線のグループで実行され、走査線は、例えば、スクリーンの端からスクリーンの端までのディスプレイの単一の水平線を指す。これらの走査線または連続する走査線のグループは、スライスと呼ばれることもあり、本明細書ではスクリーンスライスと呼ばれる。特に、スキャンアウト402は、ゲームレンダリング済みのフレームを別のフレームバッファとオーバーレイさせること、または別のフレームバッファからの情報を用いてゲームレンダリング済みのフレームを囲むためにゲームレンダリング済みのフレームを縮小させることを含む、ゲームレンダリング済みのフレームを修正するいくつかのプロセスを含み得る。スキャンアウト402中、修正済みのビデオフレームは、次いで圧縮のためにエンコーダへとスキャンされる。一実施形態では、スキャンアウト402は、VSYNC信号311の発生311a時に実行される。他の実施形態では、スキャンアウト402は、フリップ時間409などの、VSYNC信号311の発生前に実行され得る。
【0043】
403で、ゲームレンダリング済みのビデオフレーム(このビデオフレームは修正を受けている場合がある)は、エンコーダでエンコーダスライス毎に符号化されて、1つまたは複数の符号化済みのスライスを生成する。ここで、符号化済みのスライスは、走査線またはスクリーンスライスとは無関係である。そのため、エンコーダは、1つまたは複数の符号化済みの(例えば、圧縮された)スライスを生成する。
一実施形態では、符号化プロセスは、対応するビデオフレームについてスキャンアウト402プロセスが完全に完了する前に開始する。さらに、符号化403の開始及び/または終了は、サーバVSYNC信号311にアライメントされてもよく、またはアライメントされなくてもよい。符号化済みのスライスの境界は、単一の走査線に制限されず、単一の走査線または複数の走査線で構成され得る。加えて、符号化済みのスライスの終了及び/または次のエンコーダスライスの開始は、必ずしも表示スクリーンの端で発生しなくてもよく(例えば、スクリーンの中央または走査線の中央のあたりで発生し得る)、それにより、符号化済みのスライスは、表示スクリーンの端から端まで完全に横断する必要はない。示されるように、1つまたは複数の符号化済みのスライスは、ハッシュマークを有する圧縮された「符号化済みのスライスA」を含めて、圧縮及び/または符号化され得る。
【0044】
404で、符号化済みのビデオフレームは、サーバからクライアントに送信される。ここで、送信は、符号化済みのスライス毎に発生することがあり、各符号化済みのスライスは、圧縮されているエンコーダスライスである。一実施形態では、送信プロセス404は、対応するビデオフレームについて符号化プロセス403が完全に完了する前に開始する。さらに、送信404の開始及び/または終了は、サーバVSYNC信号311にアライメントされてもよく、またはアライメントされなくてもよい。示されるように、圧縮された符号化済みのスライスAは、レンダリング済みのビデオフレームについて他の圧縮されたエンコーダスライスとは別にクライアントに送信される。エンコーダスライスは、一度に1つずつ、または並列に送信され得る。
【0045】
405で、クライアントは、符号化済みのスライス毎に改めて、圧縮されたビデオフレームを受信する。さらに、受信405の開始及び/または終了は、クライアントVSYNC信号312にアライメントされてもよく、またはアライメントされなくてもよい。示されるように、圧縮された符号化済みのスライスAがクライアントによって受信される。サーバ260とクライアント210の間には送信ジッタ452が存在し得る。
ここで、ジッタ452は、サーバ260からクライアント210へのネットワークレイテンシの変動を測る。ジッタ値が低いほど、接続がより安定していることを示す。示されるように、太い直線の矢印は、対応するビデオフレームをクライアント210に送出するときの現在のレイテンシを示すが、ジッタのために、クライアント210にビデオフレームが到着する時間の範囲(例えば、点線の矢印で囲まれた範囲)が存在し得る。レイテンシの変動はまた、符号化403及び送信404などのサーバでの1つまたは複数の動作、及びビデオフレームをクライアント210に送信するときにレイテンシをもたらすネットワークの問題に起因し得る。
【0046】
406で、クライアントは、圧縮されたビデオフレームを、符号化済みのスライス毎に改めて復号し、復号されたスライスA(ハッシュマーク無しで示される)を作成する。このスライスは現在、表示の準備ができている。一実施形態では、復号プロセス406は、対応するビデオフレームについて受信プロセス405が完全に完了する前に開始する。さらに、復号406の開始及び/または終了は、クライアントVSYNC信号312にアライメントされてもよく、またはアライメントされなくてもよい。407で、クライアントは、復号されたレンダリング済みのビデオフレームをクライアントのディスプレイ上に表示する。つまり、復号されたビデオフレームはディスプレイバッファ内に置かれる。このバッファは、例えば、走査線毎にディスプレイデバイスにストリーミングアウトされる。
一実施形態では、表示プロセス407(すなわち、ディスプレイデバイスへのストリーミングアウト)は、対応するビデオフレームについて復号プロセス406が完全に完了した後、すなわち、復号されたビデオフレームがディスプレイバッファ内に完全に常駐した後に開始する。別の実施形態では、表示プロセス407は、対応するビデオフレームについて復号プロセス406が完全に完了する前に開始する。つまり、ディスプレイデバイスへのストリーミングアウトは、復号されたフレームバッファの一部のみがディスプレイバッファ内に常駐する時点で、ディスプレイバッファのアドレスから開始する。次いで、ディスプレイバッファは、表示に間に合うように対応するビデオフレームの残りの部分によって更新されるか、または満たされる。それにより、ディスプレイバッファの更新は、それらの部分がディスプレイにストリーミングアウトされる前に実行される。さらに、表示407の開始及び/または終了は、クライアントVSYNC信号312にアライメントされる。
【0047】
一実施形態では、サーバ260とクライアント210の間の片道レイテンシ416は、スキャンアウト402が開始されたときから表示407が開始されるときまでの経過時間として定義され得る。本開示の実施形態は、サーバとクライアントの間の片道レイテンシを低減し、サーバとクライアントの間の片道レイテンシのばらつきを低減するために、サーバとクライアントの間のVSYNC信号をアライメントすること(例えば、周波数を同期し、オフセットを調整すること)が可能である。例えば、本開示の実施形態は、サーバVSYNC信号311とクライアントVSYNC信号312の間のオフセット430に対する最適な調整を計算することが可能である。それにより、符号化403及び送信404などのサーバ処理に必要な時間がほぼ最悪な場合、サーバ260とクライアント210の間のネットワークレイテンシがほぼ最悪な場合、ならびに受信405及び復号406などのクライアント処理がほぼ最悪な場合においても、復号されたレンダリング済みのビデオフレームは、表示プロセス407に間に合うように利用可能である。つまり、サーバVSYNCとクライアントVSYNCの間の絶対オフセットを決定する必要はない。復号されたレンダリング済みのビデオフレームが表示プロセスに間に合って利用可能となるようにオフセットを調整するだけで十分である。
【0048】
特に、サーバVSYNC信号311及びクライアントVSYNC信号312の周波数は、同期を通じてアライメントされ得る。同期は、サーバVSYNC信号311またはクライアントVSYNC信号312の調整を通じて実現される。例示の目的で、サーバVSYNC信号311に関連して調整が説明されているが、その代わりにクライアントVSYNC信号312に対して調整を実行できることが理解される。例えば、
図4に示されるように、サーバのフレーム周期410(例えば、サーバVSYNC信号311の2つの発生311cと311dの間の時間)は、クライアントのフレーム周期415(例えば、クライアントVSYNC信号312の2つの発生312aと312bの間の時間)と実質的に等しい。これは、サーバVSYNC信号311とクライアントVSYNC信号312の周波数も実質的に等しいことを示している。
【0049】
サーバVSYNC信号とクライアントVSYNC信号の周波数の同期を維持するために、サーバVSYNC信号311のタイミングが操作され得る。例えば、サーバVSYNC信号311内の垂直ブランキング区間(VBI)を、例えば、サーバVSYNC信号311とクライアントVSYNC信号312の間のドリフトを説明するために、ある期間にわたって増加させてもよく、または減少させてもよい。VBI内の垂直ブランキング(VBLANK)線の操作は、サーバVSYNC信号311の1つまたは複数のフレーム周期についてVBLANKに使用される走査線の数を調整することを提供する。
VBLANKの走査線の数を減らすと、サーバVSYNC信号311の2つの発生間の対応するフレーム周期(例えば、時間間隔)が減少する。逆に、VBLANKの走査線の数を増加させると、VSYNC信号311の2つの発生間の対応するフレーム周期(例えば、時間間隔)が増加する。このようにして、サーバVSYNC信号311の周波数が、クライアントVSYNC信号311とサーバVSYNC信号312の間の周波数をアライメントして実質的に同じ周波数になるように調整される。また、サーバVSYNC信号とクライアントVSYNC信号の間のオフセットは、VBIを元の値に戻す前に、VBIを短時間増加または減少させることによって調整することができる。
一実施形態では、サーバのVBIが調整される。別の実施形態では、クライアントのVBIが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスが存在し、それらのデバイスのそれぞれが、調整された対応するVBIを有し得る。一実施形態では、複数の接続されたデバイスのそれぞれは、(例えば、サーバデバイス無しで)独立したピアデバイスであり得る。別の実施形態では、複数のデバイスは、1つもしくは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのある組み合わせに配列された1つもしくは複数のサーバデバイス及び/または1つもしくは複数のクライアントデバイスを含み得る。
【0050】
あるいは、一実施形態では、サーバのピクセルクロック(例えば、サーバのノースブリッジ/サウスブリッジコアロジックチップセットのサウスブリッジに位置する)を操作して、ある期間にわたってサーバVSYNC信号311の周波数の粗調整及び/または微調整を実行することにより、サーバVSYNC信号311とクライアントVSYNC信号312の間の周波数の同期をアライメントに戻してもよい。
具体的には、サーバのサウスブリッジ内のピクセルクロックをオーバークロックまたはアンダークロックして、サーバのVSYNC信号311の全体的な周波数を調整してもよい。このようにして、サーバVSYNC信号311の周波数は、クライアントVSYNC信号311とサーバVSYNC信号312の間の周波数をアライメントして実質的に同じ周波数になるように調整される。サーバとクライアントのVSYNC間のオフセットは、ピクセルクロックを元の値に戻す前に、クライアントサーバのピクセルクロックを短時間増加または減少させることによって調整することができる。
一実施形態では、サーバのピクセルクロックが調整される。別の実施形態では、クライアントのピクセルクロックが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスが存在し、それらのデバイスのそれぞれが、調整された対応するピクセルクロックを有し得る。一実施形態では、複数の接続されたデバイスのそれぞれは、(例えば、サーバデバイス無しで)独立したピアデバイスであり得る。別の実施形態では、複数の接続されたデバイスは、1つもしくは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのある組み合わせに配列された1つまたは複数のサーバデバイス及び1つまたは複数のクライアントデバイスを含み得る。
【0051】
図5Aは、本開示の一実施形態による、クラウドゲーミングサーバ上で実行されているビデオゲームの2つのシーン間の遷移を示す。特に、シーンは、ビデオゲーム用の仮想化環境の一部であり得、仮想化環境は、多くのシーンを有し得る。例えば、シーンは、洞窟環境として説明され得、その環境内で、ユーザによってプレイされているキャラクタがボス戦に参加している。特定のシーンは、種々の視点からレンダリングされ得る。例えば、キャラクタが洞窟環境のシーンの周囲を移動しているとき、洞窟内の種々の地点から種々の画像が生成される。一般に、シーン内の移動は、シーンの視点間のばらつきがあまり変化しない場合があるため、シーンの変化とはみなされない。
【0052】
図示されるように、ユーザによってプレイされている対応するビデオゲーム用の仮想化環境には、2つのシーン511及び512が存在する。例示の目的で、シーン511は、上で提供された実施例の洞窟環境であり得る。洞窟環境は、暗く単調な配色を使用して特徴付けられ得る。シーン512は、青い空、青い海及び白い砂浜のある明るく照らされた海辺のシーンなど、洞窟環境の外であり得る。ユーザによってプレイされているキャラクタは、仮想化環境において経路514に沿って横断している場合があり、経路514は、シーン511と512の両方を横断する。
例えば、キャラクタは、シーン511において地点Aから地点Bに移動し、次いで地点Bから地点Cに移動し、次いで地点Cから地点Dに移動する。シーン511内の経路514に沿ったキャラクタの視点はあまり変化しないため、対応する生成中のビデオフレームは、MPEGまたはH.264圧縮形式で使用されるフレームなどの、低い割合のIフレーム及び高い割合のPフレームを生成するなど、より少ない複雑さで符号化され得る。
【0053】
キャラクタの経路514は、シーン511の地点Dからシーン512の地点Eに移動する。つまり、地点DとEの間の経路は、キャラクタが洞窟環境内のシーン511から海辺の環境内のシーン512に移動するときのシーン変化513を含む。シーン変化513は、表示されているシーンの遷移を示し、これは一般に、ビデオゲームの要求中に新しいアセットを備えた新しいシーンを描画しなければならないことを示す。
例えば、シーン変化513は、ゲーム内のシーンカットであり得、ゲームは、2つのビデオフレーム間であるシーンから別のシーンに遷移する(例えば、映画の場面におけるシーン変化、または一連のメニューの後の対話型ゲームプレイの開始)。つまり、シーン変化により、シーン511とシーン512の間の遷移を表す対応するビデオフレームまたは複数のビデオフレームは、MPEGまたはH.264圧縮形式で使用されるフレームなどの、Iフレームとして生成されるなど、非常に複雑に(例えば、参照フレームとして)生成され得る。
【0054】
シーン変化513の後、キャラクタは経路514に沿い続け、シーン512内で地点Eから地点Fに移動する。この場合もシーン512内の経路514に沿ったキャラクタの視点はあまり変化しないため、対応する生成中のビデオフレーム(例えば、地点Eと地点Fの間)は、低い割合のIフレーム及び高い割合のPフレームを生成するなど、より少ない複雑さで符号化され得る。
【0055】
図5Bは、クラウドゲーミングサーバ260及びクライアント210を含むクラウドゲーミングシステムを示す。クラウドゲーミングサーバ260は、本開示の一実施形態によれば、クラウドゲーミングサーバ260上で実行されているビデオゲームからネットワーク250を通じてクライアント210にコンテンツをストリーミングするときにビデオフレームを符号化するときにシーン変化のヒントを生成及び使用するように構成される。
【0056】
特に、ビデオのゲームロジック215は、ゲームエンジン211上に構築される。このゲームエンジンは、クラウドゲーミングサーバ260によって実行されると、クライアント210にストリーミングして返すためのゲームレンダリング済みのビデオフレームを生成する。特に、ゲームエンジン211は、ビデオゲームのゲーミング環境を構築するためにゲームロジックによって使用され得るコア機能を含む。
例えば、ゲームエンジン211のいくつかの機能には、ビデオゲーム内のオブジェクトに作用する物理的な力及び衝突をシミュレーションするための物理エンジン、2Dまたは3Dグラフィックス用のレンダリングエンジン、衝突検出、サウンド、アニメーション、人工知能、ネットワーキング、ストリーミングなどが含まれ得る。このようにして、ゲームロジック215は、ゲームエンジン211によって提供されるコア機能をゼロから構築する必要はない。加えて、ゲームエンジン211のコア機能は、他のビデオゲーム用の他のゲームロジックに移植され得、それによって使用され得る。
【0057】
ゲームエンジン211と組み合わせたゲームロジック215は、CPU501及びGPU502(例えば、グラフィックスパイプラインを実装するように構成される)によって実行され、CPU501及びGPU502は、ゲームレンダリング済みのビデオフレームを生成するためのレンダリングパイプラインとして構成され得る。レンダリングパイプラインは、CPU501及びGPU502、ならびに両方にアクセス可能であり得るメモリ(例えば、システムメモリ、共有メモリ、頂点バッファ、インデックスバッファ、深度またはZバッファ、レンダリング済みのビデオフレームを記憶するためのフレームバッファなど)を含む。レンダリングパイプラインは、ゲームレンダリング済みの画像を表示に適した画像フレームとして出力し、仮想化されたディスプレイ内のピクセルのそれぞれについての対応する色情報を含む。
【0058】
CPU501は、ビデオゲーム(例えば、ゲームエンジン211上に構築されたゲームロジック)を実行して、複数のビデオフレームを生成するように構成される。例えば、CPU501は、ビデオフレームのフレームについてドローコールを生成し、このドローコールは、GPUパイプライン内のGPUによって実行される対応するコマンドバッファ内に記憶されたコマンドを含む。特定のビデオフレームの場合、CPU501によって生成され、グラフィックスパイプラインを通じてGPU502によって実行される複数のドローコールが存在し得る。後続のビデオフレームは、同様に構成されたコマンドバッファを使用して表示のために生成及び/またはレンダリングされ、それらのビデオフレームはGPUパイプラインから出力される。
【0059】
特に、1つまたは複数のコマンドバッファ内のコマンドは、対応するビデオフレームを生成するためにGPU502によって実行され得る。例えば、グラフィックスパイプラインは、シーン内のオブジェクトの頂点に対してシェーダプログラムを実行してディスプレイのピクセルについてのテクスチャ値を生成するように、GPU502によって実装され得る。この場合、これらの動作は、効率化のためにGPU502を通じて並列に実行される。
一般に、グラフィックスパイプラインは、入力ジオメトリ(例えば、ゲーミング世界内のオブジェクトの頂点)を受信する。頂点シェーダは、シーン内のオブジェクトを構成するポリゴンまたはプリミティブを構築する。頂点シェーダまたは他のシェーダプログラムは、ポリゴンについてライティング、シェーディング、シャドウイング及び他の操作を実行し得る。深度またはZバッファリングは、対応する視点からレンダリングされたシーン内にどのオブジェクトが表示されるかを決定するように実行され得る。
ラスター化は、3次元世界のオブジェクトを、視点によって定義された2次元平面に投影するように実行される。ピクセルサイズのフラグメントがオブジェクトについて生成され、1つまたは複数のフラグメントは、画像を表示するときに対応するピクセルの色に寄与し得る。フラグメントは、対応するビデオフレーム内のピクセルのそれぞれの複合色を決定するためにマージ及び/またはブレンドされ、フレームバッファに記憶することができる。
【0060】
一実施形態では、ゲームレンダリング済みのビデオフレームのそれぞれは、追加のユーザインターフェース(UX)機能と(例えば、オーバーレイとして)合成及びブレンドされ得る。例となるUX機能には、ユーザインターフェース、システムユーザインターフェース、テキスティング、メッセージング、メニュー、通信、追加のゲーミング視点、eスポーツ情報などが含まれ得る。例えば、スキャンアウトプロセスは、ゲームレンダリング済みのビデオフレームのそれぞれを対応する機能オーバーレイと合成及びブレンドして修正済みのビデオフレームを生成するように実装され得る。
DCC圧縮サーフェスの解凍、ターゲットディスプレイに対する解像度スケーリング、色空間変換、デガンマ、HDR拡張、色域リマップ、LUTシェーピング、トーンマッピング、ガンマのブレンド、ブレンドなど、修正済みのビデオフレームを生成するときに追加の操作が実行され得る。そのため、他の操作を使用して合成及びブレンド及び修正された入力フレームバッファの1つまたは複数の層は、次いで任意選択で表示バッファ内に置かれ、次いでエンコーダにスキャンされる(例えば、表示バッファからスキャンされる)。
【0061】
ビデオゲームのための複数のゲームレンダリング済みのビデオフレーム及び/または修正済みのビデオフレームが生成される。修正済みのビデオフレームは、次いで、ネットワークを経由してクライアントに修正済みのビデオフレームをストリーミングする前に、圧縮のためにエンコーダ570にスキャンされる。例えば、対応する修正済みのビデオフレームは、1つまたは複数の符号化済みのスライス(圧縮されたエンコーダスライス)へと圧縮され得、このスライスは、ネットワークストリーミングのためにさらにパケット化され得る。
一実施形態では、対応する修正済みのビデオフレームは、エンコーダ上でスライス毎に符号化されて、対応する修正済みのビデオフレームについて1つまたは複数の符号化済みのスライスを生成する。圧縮及び/またはパケット化されて符号化済みのスライスとなった修正済みのビデオフレームは、次いで任意選択でバッファ(例えば、先入れ先出しまたはFIFOバッファ)に記憶される。ストリーマ575は、符号化済みのスライスを任意選択のバッファからネットワーク250を経由してクライアント210に送信するように構成される。ストリーマ575は、伝送制御プロトコル/インターネットプロトコル(TCP/IP)コンピュータネットワーキングモデルのアプリケーション層で動作するように構成され得る。
【0062】
ゲームロジック215は、本開示の一実施形態によれば、CPUがビデオゲームを実行している間のシーン変化を認識させることができる。特に、シーン変化ロジック520は、ゲームロジック215内に統合され得、及び/またはゲームロジック215へのアドオンとして提供され得る。シーン変化ロジック520は、生成中のビデオフレームがシーン変化(例えば、あるシーンから別のシーンへの遷移)を含むときを決定、予想及び/または予測するように構成される。例えば、ゲームロジック215及び/またはシーン変化ロジック520は、特定のビデオフレームがシーン変化であることを示すコードを含み得る。別の実施形態では、シーン変化ロジック520は、ビデオゲームの実行中にゲームプレイを追跡して、シーン変化が差し迫っているときを予測するように構成される。
【0063】
特に、シーン変化ロジック520は、ビデオゲームの実行中に収集されたゲーム状態データを分析して、次のX数のフレームで生じている、または識別されたビデオフレームについてのシーン変化が存在するときを決定及び/または予想及び/または予測する。例えば、ゲーム状態データは、その時点のゲームの状態を定義し、ゲームキャラクタ、ゲームオブジェクト、ゲームオブジェクト属性、ゲーム属性、ゲームオブジェクト状態、グラフィックオーバーレイ、プレイヤーのゲームプレイのゲーミング世界内のキャラクタの位置、ゲームプレイのシーンまたはゲーミング環境、ゲーミングアプリケーションのレベル、キャラクタのアセット(例えば武器、道具、爆弾など)、ロードアウト、キャラクタのスキルセット、ゲームレベル、キャラクタ属性、キャラクタの位置、残存ライフ数、利用可能ライフの可能総数、鎧、トロフィー、タイムカウンタ値、及び他のアセット情報などを含み得る。
このようにして、ゲーム状態データにより、ビデオゲーム内の対応する地点に存在していたゲーミング環境の生成が可能となる。そのため、実行されるときのシーン変化ロジック520は、シーン変化が発生しつつあるときを予想するように構成され、さらに、どのビデオフレーム(例えば、フレーム番号によって)がシーン変化を含むか、またはどの範囲のビデオフレームにわたってシーン変化が発生する可能性があるかを識別するように構成される。
【0064】
特に、シーン変化ロジック520及び/またはゲームロジック215によるシーン変化の認識は、一実施形態では、クラウドゲーミングサーバ上で実行されているビデオゲームからネットワークを通じてクライアントデバイスにコンテンツをストリーミングするために使用される、エンコーダへのシーン変化の通知を提供する。例えば、通知は、APIを介して、シーン変化ロジック520から他の構成要素(例えば、エンコーダ)にシーン変化のヒント509として提供され得、APIは、構成要素間またはクラウドゲーミングサーバ260の構成要素上で実行されているアプリケーション間で通信するために使用され得る。
一実施形態では、APIはGPU APIであり得る。例えば、APIは、GPU502、システムメモリ、コマンドバッファ、エンコーダ570などの別の構成要素と通信するために、シーン変化ロジック520及び/またはゲームロジック215上で実行されているか、またはそれらによって呼び出される場合がある。一実施形態では、シーン変化のヒント509はデータ制御パケットとして提供され得る。このデータ制御パケットは、このデータ制御パケットを受信する全ての構成要素が、どのタイプの情報がこのデータ制御パケットに含まれるかを把握することができ、対応するレンダリング済みのビデオフレームへの適切な参照を把握するように初期化される。一実施態様では、APIに使用される通信プロトコル、データ制御パケットまたはメッセージのための初期化は、対応するビデオゲーム用のソフトウェア開発キット(SDK)で定義され得る。
【0065】
図2A~
図2Dの様々なクライアントデバイス210及び/またはクラウドゲーミングネットワーク290(例えば、ゲーミングサーバ260内)の詳細な説明に関して、
図6Aのフロー
図600Aは、本開示の一実施形態による、対応するビデオフレームを処理するために1つまたは複数のシーン変化のヒントがエンコーダによって使用される、クラウドゲーミングを実行するときにビデオフレームを符号化する方法を示す。エンコーダは、シーン変化のヒントが受信されたかどうかに応じて、ビデオフレームを異なるように符号化することを選択し得る。このようにして、符号化対象のビデオフレームがシーン変化であるかどうかをエンコーダが判定する必要がなくなるため、クラウドゲーミングサーバとクライアントの間の片道レイテンシが低減される。また、シーン変化を判定すること、及びシーン変化であると判定されたビデオフレームを再符号化することのためにフレーム周期が使用されなくなったため、片道レイテンシがより均一になる。その理由としては、大部分のビデオフレームの符号化が単一のフレーム周期にわたって実行されるためである。
さらに、シーン変化を判定すること、及びシーン変化であると判定されたビデオフレームを再符号化することのためにフレーム周期が使用されなくなるため、ジッタが低減され、それによってビデオのクライアント表示の滑らかさが向上する。フロー
図600Aは、ビデオフレームを圧縮するように構成されたエンコーダにシーン変化のヒントを提供するものとして説明されているが、シーン変化のヒントは、対応するビデオフレームの符号化済みのスライスを圧縮するように構成されたエンコーダによっても使用され得ることが理解される。
【0066】
特に、601で、CPU及びGPU上で実行されているビデオゲームによって生成されたビデオフレームが、クラウドゲーミングサーバからクライアントにコンテンツをストリーミングするときにエンコーダで受信される。前述のように、ゲームで生成されたビデオフレームは、追加のユーザインターフェース機能と合成ド及びブレンドされて修正済みのビデオフレームとなり得、この修正済みのビデオフレームはエンコーダへとスキャンされる。
【0067】
エンコーダは、所望の形式に基づいて修正済みのビデオフレームを圧縮するように構成される。例えば、モーションピクチャエキスパートグループ(MPEG)またはH.264規格が、クラウドゲーミングサーバからクライアントにメディアコンテンツをストリーミングするために使用され得る。エンコーダは、ビデオフレーム(例えば、MPEG-2)による圧縮を実行し得るか、またはビデオフレームのスライスを符号化することによって圧縮を実行し得る。この場合、各ビデオフレームは、1つまたは複数の符号化済みのスライスとして圧縮され得る。一般に、ビデオフレームは、Iフレーム(中間フレーム)またはPフレーム(予測フレーム)として圧縮され得、これらのフレームのそれぞれを分割して符号化済みのスライスにすることができる。
【0068】
特に、Iフレームは画像全体を含み、任意の他のビデオフレームを全く参照せずに符号化され得る。つまり、Iフレームは、キー画像として独立可能であり、他のビデオフレームを符号化及び/または復号するための参照として使用され得る。Iフレームはまた、任意の他のフレームを参照せずに復号され得る。シーン変化であると判定されたビデオフレームは、典型的には、Iフレームとして符号化される。しかしながら、Iフレームは、典型的には、Pフレームなどの他のフレームタイプよりも多くのビットを符号化する必要がある。
【0069】
Pフレームは、1つまたは複数の以前のビデオフレームを参照して符号化及び/または復号される。一般に、Pフレームとして符号化されたビデオフレームは、現在符号化されているフレームと提供された1つまたは複数の以前のビデオフレームとの違いのみを含む。つまり、ビデオフレーム間の冗長な情報はPフレームにおいて符号化されない。復号するとき、冗長な情報を含む以前に復号されたビデオフレームを復号されたPフレームが参照するため、冗長な情報が復活し得る。
【0070】
ストリーミングのとき、一実施形態では、シーン変化があるまで、または現在符号化されているフレームがキーフレーム(例えば、前のIフレーム)を参照し得なくなるときまでビデオフレームがPフレームとして符号化され、それにより次のビデオフレームは、次いで別のIフレームとして符号化される。特に、実施形態では、グループオブピクチャ(GOP)モードが無効化され得、GOPモードは、ビデオフレーム(例えば、16ビデオフレーム)の周期ごとに1つのIフレームを必要とする。加えて、実施形態では、シーン変化の検出もエンコーダで無効化され得る。GOPモード及びシーン変化の検出を無効化することにより、大部分のビデオフレームは、Pフレームを生成することが実行できなくなるまで(例えば、前のIフレームを参照できなくなるまで)Pフレームとして符号化される。本実施形態では、対応するシーン変化のヒントがエンコーダで受信されたとき、ビデオフレームはIフレームとして圧縮される。
【0071】
判定ステップ603で、エンコーダは、対応するビデオフレームについてシーン変化のヒントが受信されたかどうかを判定する。前述のように、シーン変化のヒントは、クラウドゲーミングサーバ上で実行されているビデオゲームによって提供され得る(例えば、シーン変化ロジック520によって生成され、APIを経由して配信され得る)。エンコーダは、符号化対象の現在のビデオフレームに関連してシーン変化のヒントが受信されたか否かに応じて異なるように挙動する。特に、シーン変化のヒントが受信されないとき、エンコーダは、ビデオフレームがシーン変化ではないと仮定し、ビデオフレームを通常通り符号化する。一実施形態では、ビデオフレームがシーン変化であり、Iフレームとして符号化される必要があるときを判定するためにエンコーダがシーン変化のヒントに依拠するように、GOPモードが無効化され、シーン変化の検出も無効化される。典型的には、エンコーダは、対応するビデオフレームをPフレームとして圧縮することになる。ただし、それができなくなる場合を除く。
【0072】
一方、シーン変化のヒントが受信されたとき、対応するビデオフレームは最終的にIフレームとして圧縮される。特に、607で、上記方法は、次のビデオフレームがPフレームとして符号化される(すなわち、依然として前のIフレームに戻って参照され得る)かどうかを判定する。ビデオフレームがPフレームとして符号化される場合、シーン変化のヒントが受信された後の609で、エンコーダによって受信された対応するビデオフレームは、Iフレームとして圧縮される。一方、ビデオフレームがIフレームとして符号化されるべきである場合、ビデオフレームは依然としてIフレームとして符号化される。エンコーダはシーン変化のヒントに依拠しているため、エンコーダではGOPモードもシーン変化の検出も必要ない。特に、シーン変化のヒントは、ビデオゲームを実行してビデオフレームを生成するときにCPUによって提供される。つまり、ビデオゲームは、ビデオフレームがシーン変化であるとみなされるときを認識する。例えば、ビデオゲーム内のコードを使用してシーン変化を識別してもよく、それにより、対応するビデオフレームも、生成されたときにシーン変化として識別され得る。
【0073】
図2A~
図2Dの様々なクライアントデバイス210及び/またはクラウドゲーミングネットワーク290(例えば、ゲームサーバ260内)の詳細な説明に関して、
図6Bのフロー
図600Bは、本開示の一実施形態による、対応するビデオフレームの効率的な符号化に使用できるビデオゲームまたはゲームアプリケーションを実行するときの1つまたは複数のシーン変化のヒントの生成を含む、クラウドゲーミングを実行するときにビデオフレームを符号化する方法を示す。一般に、クラウドゲーミングサーバによって実行されているビデオゲームは、符号化対象の次のビデオフレーム内の来るべきシーン変化に関するヒントを提供するように構成でき、シーン変化のヒントは、アプリケーション(例えば、ゲームロジック)により、そのアプリケーションがAPIを通じて実行されるときにエンコーダに通信され得る。
エンコーダは、異なる符号化を実行することを選択し得る(例えば、シーン変化時にPフレームからIフレームに切り替える)。このプロセスは、より滑らかなフレームレートとより信頼性の高いレイテンシを提供する。それにより、クラウドゲーミングサーバとクライアントの間の片道レイテンシが低減され、より均一になり、それによってビデオのクライアント表示の滑らかさが向上する。フロー
図600Bは、ビデオフレームを圧縮するように構成されたエンコーダにシーン変化のヒントを提供するものとして説明されているが、シーン変化のヒントは、対応するビデオフレームの符号化済みのスライスを圧縮するように構成されたエンコーダによっても使用され得ることが理解される。
【0074】
610で、この方法は、ビデオゲームのゲームエンジン上に構築されたゲームロジックをクラウドゲーミングサーバで実行して複数のビデオフレームを生成することを含む。ゲームロジックは、グラフィックスパイプラインを実装するCPU及びGPU上で実行される。例えば、クラウドゲーミングサーバは、ストリーミングモードでビデオゲームを実行していてもよく、それにより、ゲームエンジン上に構築されたゲームロジックは、ストリーミングに使用できるグラフィックスパイプラインを使用してゲームレンダリング済みのビデオフレームを生成するためにユーザからの入力コマンドに応答して実行される。特に、ゲームエンジン上に構築されたゲームロジックを実行するCPUは、GPUグラフィックスパイプラインと連携して、複数のビデオフレームを生成するように構成される。クラウドゲーミングでは、ゲームで生成されたビデオフレームは、典型的には、仮想ディスプレイ上に表示するためにレンダリングされる。
【0075】
620で、上記方法は、複数のビデオフレーム内のシーン変化を予測するためにシーン変化ロジックを実行することを含み、予測は、ゲームロジックの実行中に収集されたゲーム状態に基づく。一実施形態では、シーン変化ロジックは、ゲームロジック内に統合され得る。別の実施形態では、シーン変化ロジックは、ゲームロジックへのアドオンとして提供され得る。特に、ゲームロジックが実行されているとき、シーン変化ロジックは、対応するビデオフレームによって表現されるようなゲーム内の特定のビデオフレームまたはシナリオをシーン変化として識別し得る。シーン変化ロジックは、複数のビデオフレームを生成するときに収集されたゲーム状態の追跡に基づいてシーン変化を予測するように構成される。
例えば、シーン変化ロジックは、仮想化されたゲーミング環境内でキャラクタがあるシーンから別のシーンに移動するとき、またはキャラクタがビデオゲーム内であるレベルを終了して別のレベルに移行しているときなど、シーン変化が発生しようとしているときを予測することができる。シーン変化は、仮想化されたゲーミング世界または環境の大きくて複雑なシーンを含むビデオフレームによって表現され得る。例えば、シーン変化は、実行されたときのビデオゲームが2つのビデオフレーム間であるシーンから別のシーンに遷移するときに発生し得る(例えば、映画の場面でのシーン変化またはシーンカット、または一連のメニューの後の対話型ゲームプレイの開始)。そのため、ビデオゲーム(例えば、ゲームロジック)は、シーン変化がいつ発生しようとしているか、及びビデオフレームが生成されているときを決定または予想することができる。
【0076】
630で、上記方法は、シーン変化を含むことが予測される複数のビデオフレーム内のビデオフレームの範囲を識別することを含む。つまり、シーン変化ロジックは、今後のビデオフレームのある範囲にわたる、または識別可能なビデオフレーム内でのシーン変化の可能性を予測するように実行される。一実施形態では、シーン変化ロジックは、第1のビデオフレームなどの識別可能なビデオフレームについてシーン変化を予測することができる。その場合、ビデオフレームの範囲は第1のビデオフレームに制限される。
【0077】
640で、上記方法は、シーン変化ロジックを使用してシーン変化のヒントを生成することを含む。特に、シーン変化のヒントはビデオフレームの範囲を識別し、ビデオフレームの範囲は第1のビデオフレームを含む。シーン変化ロジックによるシーン変化予測により、1つまたは複数の対応するビデオフレームに対して操作を実行しているクラウドゲーミングサーバの他の構成要素にシーン変化を通知することができる。
【0078】
650で、上記方法は、第1のビデオフレームをエンコーダに配信することを含み、第1のビデオフレームは、シーン変化を有すると識別されたビデオフレームの範囲内にある。第1のビデオフレームは、クラウドゲーミングサーバで実行されているビデオゲームからネットワークを通じてクライアントにコンテンツをストリーミングするときなど、第1のビデオフレームをクライアントにストリーミングする準備として圧縮するためにエンコーダへとスキャンされる。
【0079】
660で、上記方法は、シーン変化のヒント(例えば、通知)をCPUからエンコーダに送出することを含む。シーン変化ロジック及び/またはゲームロジックによるシーン変化認識は、識別されたビデオフレームまたはビデオフレームの範囲の1つもしくは複数がシーン変化を含むという下流への通知を提供する。それにより、下流の構成要素は、1つまたは複数の識別されたビデオフレームがクラウドゲーミングサーバを通じて処理されるときの処理時間の低減を図るようにそれに応じて作動する。例えば、シーン変化のヒントは、APIを介してシーン変化ロジックからエンコーダに配信され得る。ここでAPIは、構成要素間またはクラウドゲーミングサーバの構成要素上で実行されているアプリケーション間で通信するために使用され得る。
【0080】
670で、上記方法は、シーン変化のヒントに基づき、エンコーダによって受信された対応するビデオフレーム(例えば、第1のビデオフレーム)をIフレームとして符号化することを含み、エンコーダは、クラウドゲーミングサーバ上で実行されているビデオゲームからネットワークを通じてクライアントデバイスにコンテンツをストリーミングする目的でビデオフレームを圧縮するように構成される。前述のように、エンコーダは、シーン変化のヒントの受信を通じてビデオフレームがシーン変化として識別されるか否かに応じて異なるように挙動する。つまり、エンコーダは、ビデオフレームについてシーン変化のヒントがエンコーダで受信されたかどうかを判定するように構成される。特に、シーン変化のヒントが受信されたとき、エンコーダは、対応するビデオフレームをIフレーム(例えば、キーフレーム)として圧縮する。
【0081】
通常、クラウドゲーミングサーバからコンテンツをストリーミングするとき、本開示の一実施形態によれば、ビデオフレームをPフレームとして圧縮できなくなるまで(例えば、以前のIフレームまたはキーフレームを参照できなくなるまで)、及びシーン変化のヒントを通じて別の方法で指示されない限り、ビデオフレームはPフレームとして圧縮される。本開示の一実施形態によれば、GOPモードが無効化され、シーン検出も無効化されるため、エンコーダは、シーン変化のヒントに大きく依拠して、ビデオフレームをシーン変化として識別する。
つまり、シーン変化のヒントが受信されないとき、エンコーダは、ビデオフレームがシーン変化ではないと仮定し、ビデオフレームを通常通り(例えば、Pフレームとして)符号化する。一方、シーン変化のヒントが受信されたとき、ビデオフレームが通常通りPフレームまたはIフレームとして符号化されるべきか否かに関わらず、対応するビデオフレームはIフレームとして符号化される。そのため、対応するビデオフレームについてシーン変化のヒントが受信されたとき、エンコーダは次いでそのビデオフレームをIフレームとして圧縮する。
【0082】
実施形態では、シーン変化のヒントは、エンコーダの圧縮判定を補完する。特に、ゲームはシーン変化のヒントを提供し、エンコーダは、所定のまたは動的に決定された閾値(例えば、高い閾値)を用いて構成され得る。これらの閾値は共に、ビデオフレームがIフレームとして符号化されるべきか、それともPフレームとして符号化されるべきかを判定するために使用される。あるシナリオでは、ゲームは、(例えば、カメラカット中に)爆発を示すビデオフレームについてシーン変化のヒントを提供していない場合があり、そのビデオフレームをIフレームとして符号化することを推奨していないが、エンコーダによって判定されたようにそのフレームをIフレームとして符号化することがより効率的であり得る。具体的には、エンコーダは、Iフレームとしての圧縮に値する程度に爆発が大きいかどうかも判定している。つまり、エンコーダは、シーン変化ロジックによるシーン変化の検出とは無関係に、閾値を満たすかまたは超えるビデオフレームの対応する範囲内のシーン変化(例えば、爆発)が存在すると判定する。
例えば、エンコーダは、シーン変化が保証される程度にフレーム間の差分が大きかったと判定する。そのため、対応するビデオフレームは、シーン変化のヒント、またはシーン変化が閾値を満たすかもしくは超えるとのエンコーダによる判定のいずれかに基づき、Iフレームとして符号化される。別のシナリオでは、ゲームは、(例えば、カメラカット中に爆発を示す)ビデオフレームについてシーン変化のヒントを提供していない場合があり、したがって、そのビデオフレームをIフレームとして符号化することを推奨していないが、エンコーダによって判定されたようにそのフレームをPフレームとして符号化することがより効率的であり得る。
具体的には、エンコーダは、Iフレームとしての圧縮に値する程度に爆発が大きいかどうかも判定している。つまり、エンコーダは、対応するビデオフレームの範囲内のシーン変化ロジックによって識別されたシーン変化が閾値を満たすことも超えることもないと判定する。例えば、エンコーダは、フレーム間の差分が閾値を下回ったと判定し、それにより、Pフレームとしての圧縮がより効率的となることを示す。そのため、対応するビデオフレームのIフレームとしての符号化、及び対応するビデオフレームのPフレームとしての符号化が終了し得る。
【0083】
図7は、本開示の様々な実施形態の態様を実行するために使用できる実施例のデバイス700の構成要素を示す。例えば、
図7は、本開示の実施形態による、レイテンシを低減し、クラウドゲーミングサーバとクライアントの間のより均一なレイテンシを提供する目的で、及びビデオのクライアント表示の滑らかさを向上させるために、ビデオゲームの実行中に生成されたビデオフレームについてシーン変化のヒントをエンコーダに提供することを含む、メディアコンテンツのストリーミング及び/またはストリーミングされたメディアコンテンツの受信に適した例示的なハードウェアシステムを示す。
このブロック図は、それぞれが本発明の実施形態を実施するのに適したパーソナルコンピュータ、サーバコンピュータ、ゲーミングコンソール、モバイルデバイスもしくは他のデジタルデバイスを組み込むことができるか、またはそれらとすることができるデバイス700を示す。デバイス700は、ソフトウェアアプリケーション及び任意選択でオペレーティングシステムを実行するための中央演算処理装置(CPU)702を含む。CPU702は、1つ以上の同種のまたは異種の処理コアで構成され得る。
【0084】
様々な実施形態によれば、CPU702は、1つまたは複数の処理コアを有する1つまたは複数の汎用マイクロプロセッサである。さらなる実施形態は、ゲームの実行中にグラフィックス処理を行うように構成されたアプリケーションの、媒体及び対話型エンターテインメントアプリケーションなどのきわめて並列かつ計算集約的なアプリケーションに特に適合されたマイクロプロセッサアーキテクチャを有する1つまたは複数のCPUを使用して実装することができる。
【0085】
メモリ704は、CPU702及びGPU716によって使用するためのアプリケーション及びデータを記憶する。ストレージ706は、アプリケーション及びデータに不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、固定ディスクドライブ、取り外し可能ディスクドライブ、フラッシュメモリデバイス、及びCD-ROM、DVD-ROM、Blu-ray(登録商標)、HD-DVD、または他の光学ストレージデバイス、ならびに信号伝送及びストレージ媒体を含み得る。ユーザ入力デバイス708は、1人または複数のユーザからのユーザ入力をデバイス700に通信し、その例としては、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルまたはビデオレコーダ/カメラ、及び/またはマイクロホンを含み得る。
ネットワークインターフェース709は、デバイス700が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどのワイドエリアネットワークを経由した有線または無線通信を含み得る。オーディオプロセッサ712は、CPU702、メモリ704、及び/またはストレージ706によって提供される命令及び/またはデータから、アナログまたはデジタルオーディオ出力を生成するように適合される。CPU702、GPU716を含むグラフィックスサブシステム、メモリ704、データストレージ706、ユーザ入力デバイス708、ネットワークインターフェース709及びオーディオプロセッサ712を含むデバイス700の構成要素は、1つまたは複数のデータバス722介して接続される。
【0086】
グラフィックスサブシステム714はさらに、データバス722及びデバイス700の構成要素と接続される。グラフィックスサブシステム714は、グラフィックス処理ユニット(GPU)716及びグラフィックスメモリ718を含む。グラフィックスメモリ718は、出力画像の各ピクセルについて画素データを記憶するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックスメモリ718は、GPU716と同じデバイス内に統合することができ、別個のデバイスとしてGPU716と接続することができ、及び/またはメモリ704内に実装することができる。
ピクセルデータは、CPU702からグラフィックスメモリ718に直接提供することができる。あるいは、CPU702は、所望の出力画像を定義するデータ及び/または命令をGPU716に提供し、GPU716は、そこから1つまたは複数の出力画像のピクセルデータを生成する。所望の出力画像を定義するデータ及び/または命令は、メモリ704及び/またはグラフィックスメモリ718に記憶することができる。実施形態では、GPU716は、シーンについてジオメトリ、ライティング、シェーディング、テクスチャリング、動き及び/またはカメラパラメータを定義する命令及びデータから出力画像用のピクセルデータを生成する3Dレンダリング能力を含む。GPU716はさらに、シェーダプログラムを実行することが可能な1つまたは複数のプログラム可能実行ユニットを含むことができる。
【0087】
グラフィックスサブシステム714は、ディスプレイデバイス710上に表示されるように、または投影システム(図示せず)によって投影されるように、グラフィックスメモリ718から画像用のピクセルデータを周期的に出力する。ディスプレイデバイス710は、CRT、LCD、プラズマ及びOLEDディスプレイを含む、デバイス700からの信号に応答して視覚情報を表示することが可能な任意のデバイスとすることができる。デバイス700は、ディスプレイデバイス710に、例えば、アナログまたはデジタル信号を提供することができる。
【0088】
グラフィックスサブシステム714を最適化するための他の実施形態は、GPUインスタンスが複数のアプリケーション間で共有されるマルチテナンシーGPU動作、及び単一のゲームをサポートする分散型GPUを含むことができる。グラフィックスサブシステム714は、1つまたは複数の処理デバイスとして構成することができる。
【0089】
例えば、グラフィックスサブシステム714は、一実施形態によれば、1つのグラフィックスサブシステムが複数のゲームについてグラフィックス及び/またはレンダリングパイプラインを実装している可能性がある、マルチテナンシーGPU機能を実行するように構成され得る。つまり、グラフィックスサブシステム714は、実行されている複数のゲーム間で共有される。
【0090】
他の実施形態では、グラフィックスサブシステム714は、対応するCPU上で実行されている単一のアプリケーションについてグラフィックス処理を実行するように組み合わされる複数のGPUデバイスを含む。例えば、複数のGPUは、フレームレンダリングの代替形式を実行することができる。この場合、GPU1が第1のフレームをレンダリングし、GPU2が第2のフレームを連続したフレーム周期でレンダリングし、以下、最後のGPUに到達するまで続き、その後、最初のGPUが次のフレームをレンダリングする(例えば、GPUが2つしかない場合、GPU1は第3のフレームをレンダリングする)。つまり、フレームをレンダリングするときにGPUは循環する。レンダリング動作は重複させることができ、GPU1が第1のフレームのレンダリングを終了する前にGPU2が第2のフレームのレンダリングを開始してもよい。
別の実施態様では、複数のGPUデバイスは、レンダリング及び/またはグラフィックスパイプラインにおいて異なるシェーダ動作を割り当てることができる。マスタGPUがメインのレンダリング及び合成を実行している。例えば、3つのGPUを含むグループでは、マスタGPU1がメインのレンダリング(例えば、第1のシェーダ動作)を実行し、スレーブGPU2とスレーブGPU3からの出力の合成を実行することができる。この場合、スレーブGPU2は第2のシェーダ(例えば、川などの流体効果)動作を実行することができ、スレーブGPU3は第3のシェーダ(例えば、粒子の煙)動作を実行することができ、マスタGPU1は、GPU1、GPU2及びGPU3のそれぞれからの結果を合成する。このようにして、種々のシェーダ動作(例えば、旗の揺れ、風、煙の発生、火など)を実行してビデオフレームをレンダリングするために異なるGPUを割り当てることができる。
さらに別の実施形態では、3つのGPUのそれぞれを、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。上記の実施形態及び実施態様では、これらの動作は、同じフレーム周期で(同時並列に)、または異なるフレーム周期で(順次並列に)実行することができる。
【0091】
したがって、本開示は、レイテンシを低減し、クラウドゲーミングサーバとクライアントの間のより均一なレイテンシを提供する目的で、及びビデオのクライアント表示の滑らかさを向上させるために、ビデオゲームの実行中に生成されたビデオフレームについてシーン変化のヒントをエンコーダに提供することを含む、メディアコンテンツをストリーミングし、及び/またはストリーミングされたメディアコンテンツを受信するように構成された方法及びシステムについて説明する。
【0092】
本明細書で定義された様々な実施形態は、本明細書に開示された様々な特徴を使用して特定の実施態様に組み合わされ得るか、または組み込まれ得ることが理解されるべきである。したがって、提供される実施例は、様々な要素を組み合わせることによってより多くの実施態様を定義することが可能である様々な実施態様に限定されず、いくつかの可能な実施例にすぎない。いくつかの実施例では、いくつかの実施態様は、開示されたまたは同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0093】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、ミニコンピュータ、メインフレームコンピュータ、及び同種のものを含む、様々なコンピュータシステム構成を用いて実施されてもよい。本開示の実施形態はまた、有線ベースのネットワークまたは無線ネットワークを通じてリンクされる遠隔処理デバイスによってタスクが実行される分散型コンピューティング環境において実施することができる。
【0094】
上記の実施形態を念頭に置き、本開示の実施形態はコンピュータシステムに記憶されたデータを含む様々なコンピュータ実装動作を使用できることが理解されるべきである。これらの動作は、物理量の物理的操作を要する動作である。本開示の実施形態の一部を形成する、本明細書で説明された動作のうちのいずれも、有用な機械動作である。開示の実施形態はまた、これらの動作を実行するためのデバイスまたは装置に関連する。装置は、必要な目的のために特別に構築することができ、または装置は、コンピュータに記憶されたコンピュータプログラムによって選択的に起動または構成される汎用コンピュータとすることができる。特に、本明細書の教示に従って書かれたコンピュータプログラムと共に様々な汎用マシンを使用することができ、あるいは、必要な動作を実行するためにさらに特化した装置を構築することがより好都合であり得る。
【0095】
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとして具現化することができる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出すことができるデータを記憶可能である任意のデータストレージデバイスである。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、ならびに他の光学及び非光学データストレージデバイスが挙げられる。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で記憶され実行されるように、ネットワーク接続されたコンピュータシステムにわたって分散されたコンピュータ可読有形媒体を含めることができる。
【0096】
方法の動作を特定の順序で記載したが、オーバーレイ動作の処理が所望の方法で実行される限り、動作間に他のハウスキーピング動作が実行されてもよく、または動作がわずかに異なる時間に起こるように調整されてもよく、またはシステム内に動作を分散することで、処理に関連する様々な間隔で処理動作が起こることを可能にしてもよいことが理解されるべきである。
【0097】
前述の開示は、理解を明確にする目的である程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。したがって、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に与えられた詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で修正されてもよい。
【国際調査報告】