IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソニー・コンピュータエンタテインメントの特許一覧

特許7494293クラウドゲームアプリケーション用のサーバ表示バッファの高速スキャンアウト
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-24
(45)【発行日】2024-06-03
(54)【発明の名称】クラウドゲームアプリケーション用のサーバ表示バッファの高速スキャンアウト
(51)【国際特許分類】
   H04N 21/2343 20110101AFI20240527BHJP
   H04N 21/24 20110101ALI20240527BHJP
【FI】
H04N21/2343
H04N21/24
【請求項の数】 15
(21)【出願番号】P 2022520320
(86)(22)【出願日】2020-09-29
(65)【公表番号】
(43)【公表日】2022-12-01
(86)【国際出願番号】 US2020053348
(87)【国際公開番号】W WO2021067321
(87)【国際公開日】2021-04-08
【審査請求日】2023-09-29
(31)【優先権主張番号】17/008,502
(32)【優先日】2020-08-31
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/008,463
(32)【優先日】2020-08-31
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/008,482
(32)【優先日】2020-08-31
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,172
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,166
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,175
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100099324
【弁理士】
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】マーク イー. サーニー
(72)【発明者】
【氏名】ルーロフ ロダリック コーレンブランデル
【審査官】醍醐 一貴
(56)【参考文献】
【文献】米国特許出願公開第2015/0264298(US,A1)
【文献】特表2017-505035(JP,A)
【文献】特表2011-507339(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 21/00-21/858
(57)【特許請求の範囲】
【請求項1】
クラウドゲーミング方法であって、
サーバでビデオゲームを実行するときにビデオフレームを生成し、前記ビデオフレームはフレームバッファに記憶され、
前記フレームバッファを含むチップセットの最大ピクセルクロックを決定し、
前記最大ピクセルクロックと、クライアントのターゲットディスプレイの画像サイズとに基づいてフレームレート設定を決定し、
前記チップセットの速度設定値を決定し、
前記フレームバッファからスキャンアウトブロックに前記ビデオフレームをスキャンし、前記チップセットは前記スキャンアウトブロックを含み、
特徴処理エンジンで特徴を生成して前記特徴をユーザインタフェースバッファに記憶し、前記特徴はオーバーレイとして構成され、
前記特徴を前記ユーザインタフェースバッファから前記スキャンアウトブロックにスキャンし、
前記特徴を使用して前記ビデオフレームを修正して、修正済みビデオフレームを生成し、
前記スキャンアウトブロックからエンコーダに前記修正済みビデオフレームを前記速度設定値でスキャンアウトする、方法。
【請求項2】
前記ビデオフレームが前記スキャンアウトブロックから前記エンコーダにスキャンアウトされるレートが、前記ビデオフレームが生成されたレートよりも高い、請求項1に記載の方法。
【請求項3】
前記最大ピクセルクロックは、前記チップセットのチップ計算設定または自己診断テストに基づくものであり、
前記速度設定値は、ビットレート設定またはフレームレート設定である、請求項1に記載の方法。
【請求項4】
前記ビデオフレームの前記修正では、
前記速度設定値で、前記スキャンアウトブロックで前記特徴と前記ビデオフレームとを組み合わせ、
前記修正済みビデオフレームを生成するために組み合わされた前記特徴及びビデオフレームに対して1つまたは複数の追加動作を実行する、請求項1に記載の方法。
【請求項5】
前記1つまたは複数の追加動作には、
DCC圧縮面を解凍し、
解像度スケーリングを行い、
色空間変換を実行し、
デガンマを実行し、
HDR拡張を実行し、
色域の再マップを実行し、
LUT形成を実行し、
トーンマッピングを行い、
ガンマブレンディングを行うことが含まれる、請求項4に記載の方法。
【請求項6】
さらに、前記エンコーダで前記修正済みビデオフレームをエンコードする、請求項1に記載の方法。
【請求項7】
クラウドゲームのコンピュータプログラムを記憶するコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
サーバでビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を有し、前記ビデオフレームはフレームバッファに記憶され、
前記フレームバッファを含むチップセットの最大ピクセルクロックを決定するためのプログラム命令を有し、
前記最大ピクセルクロックとクライアントのターゲットディスプレイの画像サイズとに基づいて、フレームレート設定を決定するためのプログラム命令を有し、
前記チップセットの速度設定値を決定するためのプログラム命令を有し、
前記フレームバッファからスキャンアウトブロックに前記ビデオフレームをスキャンするためのプログラム命令を有し、前記チップセットは前記スキャンアウトブロックを含み、
特徴処理エンジンで特徴を生成して前記特徴をユーザインタフェースバッファに記憶するためのプログラム命令を有し、前記特徴はオーバーレイとして構成され、
前記特徴を前記ユーザインタフェースバッファから前記スキャンアウトブロックにスキャンするためのプログラム命令を有し、
前記特徴を使用して前記ビデオフレームを修正して、修正済みビデオフレームを生成するプログラム命令を有し、
前記スキャンアウトブロックからエンコーダに前記修正済みビデオフレームを前記速度設定値でスキャンアウトするプログラム命令を有する、コンピュータ可読媒体。
【請求項8】
クラウドゲーム用の前記コンピュータプログラムでは、前記ビデオフレームが前記スキャンアウトブロックから前記エンコーダにスキャンアウトされるレートは、前記ビデオフレームが生成されたレートよりも高い、請求項7に記載のコンピュータ可読媒体。
【請求項9】
クラウドゲーム用の前記コンピュータプログラムでは、前記最大ピクセルクロックは、前記チップセットのチップ計算設定または自己診断テストに基づくものであり、
クラウドゲーム用の前記コンピュータプログラムでは、前記速度設定値は、ビットレートまたはフレームレート設定である、請求項7に記載のコンピュータ可読媒体。
【請求項10】
コンピュータシステムであって、
プロセッサを有し、かつ、
前記プロセッサに結合されて命令を記憶したメモリを有し、前記命令は、前記コンピュータシステムによって実行されると、クラウドゲームのための方法を前記コンピュータシステムに実行させ、前記方法では、
サーバでビデオゲームを実行するときにビデオフレームを生成し、前記ビデオフレームはフレームバッファに記憶され、
前記フレームバッファを含むチップセットの最大ピクセルクロックを決定し、
前記最大ピクセルクロックとクライアントのターゲットディスプレイの画像サイズとに基づいて、フレームレート設定を決定し、
前記チップセットの速度設定値を決定し、
前記フレームバッファからスキャンアウトブロックに前記ビデオフレームをスキャンし、前記チップセットは前記スキャンアウトブロックを含み、
特徴処理エンジンで特徴を生成し、前記特徴をユーザインタフェースバッファに記憶し、前記特徴はオーバーレイとして構成され、
前記特徴を前記ユーザインタフェースバッファから前記スキャンアウトブロックにスキャンし、
前記特徴を使用して前記ビデオフレームを修正して、修正済みビデオフレームを生成し、
前記スキャンアウトブロックからエンコーダに前記修正済みビデオフレームを前記速度設定値でスキャンアウトする、コンピュータシステム。
【請求項11】
前記方法では、前記ビデオフレームが前記スキャンアウトブロックから前記エンコーダにスキャンアウトされるレートは、前記ビデオフレームが生成されたレートよりも高い、請求項10に記載のコンピュータシステム。
【請求項12】
前記方法では、前記最大ピクセルクロックは、前記チップセットのチップ計算設定または自己診断テストに基づくものであり、
前記方法では、前記速度設定値は、ビットレートまたはフレームレート設定である、請求項10に記載のコンピュータシステム。
【請求項13】
前記方法では、前記ビデオフレームの前記修正には、
前記速度設定値で、前記スキャンアウトブロックで前記特徴と前記ビデオフレームとを組み合わせ、
前記修正済みビデオフレームを生成するために組み合わされた前記特徴及びビデオフレームに対して1つまたは複数の追加動作を実行する、請求項10に記載のコンピュータシステム。
【請求項14】
前記方法において、前記1つまたは複数の追加動作には、
DCC圧縮面を解凍し、
解像度スケーリングを行い、
色空間変換を実行し、
デガンマを実行し、
HDR拡張を実行し、
色域の再マップを実行し、
LUT形成を実行し、
トーンマッピングを行い、
ガンマブレンディングを行うことが含まれる、請求項13に記載のコンピュータシステム。
【請求項15】
前記方法では、さらに、
前記エンコーダで前記修正済みビデオフレームをエンコードする、請求項10に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ネットワークを介してコンテンツをストリーミングするように構成されたストリーミングシステムに関し、より具体的には、クラウドゲームサーバとクライアント間のレイテンシを短縮するために、クラウドゲームサーバで高速スキャンアウト動作を実行すること、及び/またはクラウドゲームサーバで早期スキャンアウト動作を実行することに関し、ビデオのクライアントでの表示のスムーズさは、クライアントへの理想的な表示時間の送信によって改善され得る。
【背景技術】
【0002】
近年、ネットワークを介して接続されたクラウドゲームサーバとクライアント間でストリーミング形式のオンラインまたはクラウドゲームを可能にするオンラインサービスが継続的に推進されている。ストリーミング形式は、オンデマンドのゲームタイトルの利用可能性、マルチプレーヤゲームのためのプレーヤ間のネットワーク機能、プレーヤ間の資産の共有、プレーヤ及び/または観客間のインスタントエクスペリエンスの共有、ある友達がビデオゲームをプレイするのを友達たちが見るのを可能にすること、友達の進行中のゲームプレイにある友達を参加させることなどにより、ますます人気が高まっている。
残念ながら、ネットワーク接続の機能と、クライアントに配信される高品質の画像をレンダリングするのに十分な応答性を備えたサーバ及びクライアントで実行される処理との制限に反して、需要も増加している。例えば、サーバで実行されるすべてのゲームアクティビティの結果は、最高のユーザエクスペリエンスを実現するために、圧縮して、低いミリ秒のレイテンシでクライアントに送り返す必要がある。
ラウンドトリップレイテンシは、ユーザのコントローラ入力からクライアントでのビデオフレームの表示までの全体的な時間として定義され得る。これには、コントローラからクライアントへの制御情報の処理と送信、クライアントからサーバへの制御情報の処理と送信、入力に応答するビデオフレームを生成するためのサーバでのその入力の使用、ビデオフレームの処理及びエンコードユニットへの転送(例えば、スキャンアウト)、ビデオフレームのエンコード、エンコード済みのビデオフレームをクライアントに返信、ビデオフレームの受信及びデコード、並びにビデオフレーム表示前のビデオフレームの任意の処理もしくはステージングを含み得る。
一方向のレイテンシは、サーバでのビデオフレームのエンコードユニットへの転送(例えば、スキャンアウト)の開始からクライアントでのビデオフレームの表示の開始までの時間で構成されるラウンドトリップレイテンシの一部として定義され得る。ラウンドトリップ及び一方向のレイテンシの一部は、データストリームが通信ネットワークを介してクライアントからサーバに、及びサーバからクライアントに送信されるのにかかる時間に関連している。別の部分は、クライアントとサーバでの処理に関連している。フレームのデコードと表示に関する高度な戦略など、これらの動作の改善により、サーバとクライアント間のラウンドトリップと一方向のレイテンシを大幅に短縮することができ、クラウドゲームサービスのユーザに高品質のエクスペリエンスを提供することができる。
【0003】
本開示の実施形態は、上記背景のもとになされたものである。
【発明の概要】
【0004】
本開示の実施形態は、ネットワークを介してコンテンツ(例えば、ゲーム)をストリーミングするように構成されたストリーミングシステムに関し、より具体的には、修正済みビデオフレームをエンコーダに送るための、高速スキャンアウト動作の実行、または次のシステムのVSYNC信号の発生前、もしくは対応するビデオフレームのフリップ時間においてなど、早期のスキャンアウトの実行に関する。
【0005】
本開示の実施形態は、クラウドゲームのための方法を開示する。サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして修正済みビデオフレームにすることで、スキャンアウトプロセスを実行する。この方法では、スキャンアウトプロセスで、修正済みビデオフレームをスキャンラインごとにサーバのエンコーダにスキャンする。この方法では、スキャンアウトプロセスで、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを、ビデオフレームの対応するフリップ時間に1つまたは複数の入力フレームバッファにスキャンすることを開始する。
【0006】
別の実施形態において、クラウドゲームのためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、サーバでビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を含む。コンピュータ可読媒体は、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして、修正済みビデオフレームにすることで、スキャンアウトプロセスを実行するためのプログラム命令を含む。コンピュータ可読媒体は、スキャンアウトプロセスで、修正済みビデオフレームをサーバのエンコーダにスキャンラインごとにスキャンするためのプログラム命令を含む。コンピュータ可読媒体は、スキャンアウトプロセスで、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを、ビデオフレームの対応するフリップ時間に1つまたは複数の入力フレームバッファにスキャンすることを開始するためのプログラム命令を含む。
【0007】
さらに別の実施形態において、コンピュータシステムは、プロセッサと、プロセッサに結合され、命令を記憶したメモリとを含み、命令は、コンピュータシステムにより実行されると、コンピュータシステムにクラウドゲームのための方法を実行させる。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして修正済みビデオフレームにすることで、スキャンアウトプロセスを実行する。この方法では、スキャンアウトプロセスで、修正済みビデオフレームをスキャンラインごとにサーバのエンコーダにスキャンする。この方法では、スキャンアウトプロセスで、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを、ビデオフレームの対応するフリップ時間に1つまたは複数の入力フレームバッファにスキャンすることを開始する。
【0008】
別の実施形態では、クラウドゲームのための方法が開示されている。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行することを含み、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始する。この方法では、圧縮されたビデオフレームをクライアントに送信する。この方法では、クライアントでビデオフレームの目標表示時間を決定する。この方法では、目標表示時間に基づいて、クライアントでビデオフレームの表示時間をスケジュールする。
【0009】
別の実施形態において、クラウドゲームのためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、サーバでビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を含む。コンピュータ可読媒体は、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行するためのプログラム命令を含み、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始する。コンピュータ可読媒体は、圧縮されたビデオフレームをクライアントに送信するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントでビデオフレームの目標表示時間を決定するためのプログラム命令を含む。コンピュータ可読媒体は、目標表示時間に基づいてビデオフレームの表示時間をクライアントでスケジュールするためのプログラム命令を含む。
【0010】
さらに別の実施形態において、コンピュータシステムは、プロセッサと、プロセッサに結合され、命令を記憶したメモリとを含み、命令は、コンピュータシステムにより実行されると、クラウドゲームのための方法をコンピュータシステムに実行させる。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行することを含み、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始する。この方法では、圧縮されたビデオフレームをクライアントに送信する。この方法では、クライアントでビデオフレームの目標表示時間を決定する。この方法では、目標表示時間に基づいて、クライアントでビデオフレームの表示時間をスケジュールする。
【0011】
別の実施形態では、クラウドゲームのための方法が開示される。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行することを含み、スキャンアウトプロセスは、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして修正済みビデオフレームにし、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始される。この方法では、圧縮された修正済みビデオフレームをクライアントに送信する。この方法では、修正済みビデオフレームの目標表示時間をクライアントで決定する。この方法では、目標表示時間に基づいて、修正済みビデオフレームの表示時間をクライアントでスケジュールする。
【0012】
別の実施形態において、クラウドゲームのためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、サーバでビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を含む。コンピュータ可読媒体は、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行するためのプログラム命令を含み、スキャンアウトプロセスは、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして修正済みビデオフレームし、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始する。
コンピュータ可読媒体は、圧縮された修正済みビデオフレームをクライアントに送信するためのプログラム命令を含む。コンピュータ可読媒体は、修正済みビデオフレームの目標表示時間をクライアントで決定するためのプログラム命令を含む。コンピュータ可読媒体は、目標表示時間に基づいて修正済みビデオフレームの表示時間をクライアントでスケジュールするためのプログラム命令を含む。
【0013】
さらに別の実施形態において、コンピュータシステムは、プロセッサと、プロセッサに結合され、命令を記憶したメモリとを含み、命令は、コンピュータシステムにより実行されると、クラウドゲームのための方法をコンピュータシステムに実行させる。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。この方法では、ビデオフレームを圧縮するように構成されたエンコーダにビデオフレームを送るためのスキャンアウトプロセスを実行し、スキャンアウトプロセスは、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと1つまたは複数のユーザインタフェース特徴とを合成及びブレンドして修正済みビデオフレームにするスキャンアウトプロセスを実行し、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始される。この方法では、圧縮された修正済みビデオフレームをクライアントに送信する。この方法では、修正済みビデオフレームの目標表示時間をクライアントで決定する。この方法では、目標表示時間に基づいて、修正済みビデオフレームの表示時間をクライアントでスケジュールする。
【0014】
別の実施形態では、クラウドゲームのための方法が開示される。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成することを含み、ビデオフレームはフレームバッファに記憶される。この方法では、スキャンアウトブロックを含むチップセットの最大ピクセルクロックを決定する。この方法では、最大ピクセルクロックとクライアントのターゲットディスプレイの画像サイズとに基づいてフレームレート設定を決定する。この方法では、チップセットの速度設定値を決定する。この方法では、ビデオフレームをフレームバッファからスキャンアウトブロックにスキャンする。この方法では、スキャンアウトブロックからエンコーダにビデオフレームを速度設定値でスキャンアウトする。
【0015】
別の実施形態において、クラウドゲームのためのコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、サーバでビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を含み、ビデオフレームはフレームバッファに記憶される。コンピュータ可読媒体は、スキャンアウトブロックを含むチップセットの最大ピクセルクロックを決定するためのプログラム命令を含む。
コンピュータ可読媒体は、最大ピクセルクロックとクライアントのターゲットディスプレイの画像サイズとに基づいてフレームレート設定を決定するためのプログラム命令を含む。コンピュータ可読媒体は、チップセットの速度設定値を決定するためのプログラム命令を含む。コンピュータ可読媒体は、フレームバッファからスキャンアウトブロックにビデオフレームをスキャンするためのプログラム命令を含む。コンピュータ可読媒体は、スキャンアウトブロックからエンコーダに速度設定値でビデオフレームをスキャンアウトするためのプログラム命令を含む。
【0016】
さらに別の実施形態において、コンピュータシステムは、プロセッサと、プロセッサに結合され、命令を記憶したメモリとを含み、メモリは、コンピュータシステムにより実行されると、クラウドゲームのための方法をコンピュータシステムに実行させる。この方法では、サーバでビデオゲームを実行するときにビデオフレームを生成することを含み、ビデオフレームはフレームバッファに記憶される。
この方法では、スキャンアウトブロックを含むチップセットの最大ピクセルクロックを決定する。この方法では、最大ピクセルクロックとクライアントのターゲットディスプレイの画像サイズとに基づいてフレームレート設定を決定する。この方法では、チップセットの速度設定値を決定する。この方法では、フレームバッファからスキャンアウトブロックにビデオフレームをスキャンする。この方法では、スキャンアウトブロックからエンコーダにビデオフレームを速度設定値でスキャンアウトする。
【0017】
本開示の他の態様は、添付図面を併用して、本開示の原理を、例を挙げて示す以下の詳細な説明から明らかになる。
【0018】
本開示は、添付図面と併せて、以下の詳細な説明を参照することにより、最も良く理解することができる。
【図面の簡単な説明】
【0019】
図1A】本開示の一実施形態による、フレーム周期の開始時のVSYNC信号の図である。
図1B】本開示の一実施形態による、VSYNC信号の周波数の図である。
図2A】本開示の一実施形態による、様々な構成において、1つまたは複数のクラウドゲームサーバと1つまたは複数のクライアントデバイスとの間のネットワークを介してゲームを提供するためのシステムの図であり、VSYNC信号を同期及びオフセットして、一方向のレイテンシを短縮することができる。
図2B】本開示の一実施形態による、2つ以上のピアデバイス間でゲームを提供するための図であり、VSYNC信号を同期及びオフセットして、コントローラ及びデバイス間の他の情報の受信の最適なタイミングを達成することができる。
図2C】本開示の一実施形態による、ソースデバイスとターゲットデバイス間のVSYNC信号の適切な同期及びオフセットから恩恵を受ける様々なネットワーク構成を示す。
図2D】本開示の一実施形態による、ソースデバイスとターゲットデバイス間のVSYNC信号の適切な同期及びオフセットから恩恵を受ける、クラウドゲームサーバと複数のクライアントとの間のマルチテナンシ構成を示す。
図3】本開示の一実施形態による、サーバ上で実行されるビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトによるクラウドゲームサーバとクライアント間の一方向のレイテンシの変動を示す。
図4】サーバ上で実行されるビデオゲームから生成されたビデオフレームをストリーミングするときのクラウドゲームサーバ及びクライアントを含むネットワーク構成を示し、サーバとクライアントのVSYNC信号は、サーバとクライアントでの動作の重複を可能にするために、また、サーバとクライアント間の一方向のレイテンシを短縮するために、同期及びオフセットされる。
図5A-1】本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからネットワークを介してコンテンツをストリーミングするとき、エンコーダに送るための高速スキャンアウト動作を実行するように構成された加速処理装置(APU)、あるいは、バス(例えば、PCIエクスプレス)を介して接続されたCPU及びGPUを示す。
図5A-2】本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからネットワークを介してコンテンツをストリーミングするとき、エンコーダに送るための高速スキャンアウト動作を実行するように構成されたチップセット540Bを示し、ユーザインタフェース特徴がゲームのレンダリング済みビデオフレームに統合される。
図5B-1】本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからのコンテンツを、ネットワークを介してクライアントにストリーミングするとき、エンコーダに送る修正済みビデオフレームを生成するために実行されるスキャンアウト動作を示す。
図5B-2】本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからのコンテンツを、ネットワークを介してクライアントにストリーミングするとき、エンコーダに送る修正済みビデオフレームを生成するために実行されるスキャンアウト動作を示す。
図5B-3】本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからのコンテンツを、ネットワークを介してクライアントにストリーミングするとき、エンコーダに送る修正済みビデオフレームを生成するために実行されるスキャンアウト動作を示す。
図5C】本開示の実施形態による、クラウドゲームサーバで実行しているビデオゲームからネットワークを介してコンテンツをストリーミングするとき、エンコーダに送るための高速スキャンアウト動作を実行するときに使用される1つまたは複数の入力フレームバッファを有する例示的なサーバ構成を示す。
図5D】本開示の実施形態による、クラウドゲームサーバで実行しているビデオゲームからネットワークを介してコンテンツをストリーミングするとき、エンコーダに送るための高速スキャンアウト動作を実行するときに使用される1つまたは複数の入力フレームバッファを有する例示的なサーバ構成を示す。
図6】本開示の一実施形態による、早期スキャンアウトプロセスを実行してエンコードプロセスを早期に開始し、それによってサーバとクライアント間の一方向のレイテンシを短縮する、クラウドゲームの方法を示すフロー図である。
図7A】本開示の一実施形態による、クラウドゲームサーバでビデオフレームを生成及び送信するためのプロセスを示し、プロセスは、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮するために、エンコーダへの高速及び/または早期のスキャンアウトを実行するように最適化される。
図7B】本開示の一実施形態による、スキャンアウトプロセスがクラウドゲームサーバで実行されるタイミングを示し、スキャンアウトは高速及び/または早期に実行され、それによって、ビデオフレームは早期にエンコーダにスキャンされて、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮することができる。
図7C】本開示の一実施形態による、ビデオフレームを早期にエンコーダにスキャンすることにより、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮することができるように、高速でスキャンアウトを実行するための期間を示す。
図8A】本開示の一実施形態による、クラウドゲームアプリケーションにおいてクライアントで表示されるビデオをスムーズにし得るクラウドゲームの方法を示すフロー図であり、サーバでの高速及び/または早期のスキャンアウト動作を実行して、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮し得る。
図8B】本開示の一実施形態による、ゲームのレンダリング済みビデオフレームを生成し、ビデオフレームは次に表示のためにクライアントに送信される、サーバでビデオゲームの実行中に実行されるサーバ及びクライアント動作のタイミング図を示す。
図9】本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイスの構成要素を示す。
【発明を実施するための形態】
【0020】
以下の詳細な説明は、説明の目的で多くの特定の詳細を含むが、当業者であれば、以下の詳細に対する多くの変形及び変更が本開示の範囲内にあることを理解するであろう。したがって、以下で説明される本開示の態様は、この説明に続く特許請求の範囲への一般性を失うことなく、また限定を課すことなく記載される。
【0021】
一般的に言えば、本開示の様々な実施形態は、メディアコンテンツをストリーミングするとき(例えば、ビデオゲームからオーディオ及びビデオをストリーミングするとき)、ソースデバイスとターゲットデバイス間のレイテンシ及び/またはレイテンシの不安定性を低減するように構成された方法及びシステムを説明する。サーバで複雑なフレーム(例えば、シーンの変更)を生成するために必要な追加の時間、サーバで複雑なフレームをエンコード/圧縮するための時間の増加、ネットワークを介した可変通信パス、及びクライアントで複雑なフレームをデコードするための時間の増加が原因で、サーバとクライアント間の一方向のレイテンシにレイテンシの不安定性が生じ得る。サーバとクライアントのクロックの違いが原因でレイテンシが不安定になることもあり、これにより、サーバとクライアントのVSYNC信号間にドリフトが生じる。
本開示の実施形態では、サーバとクライアント間の一方向のレイテンシは、クラウドゲームの表示バッファの高速スキャンアウトを実行することによって、クラウドゲームのアプリケーションで短縮することができる。さらに別の実施形態では、クラウドゲーム表示バッファの早期スキャンアウトを実行することによって、一方向のレイテンシを短縮し得る。別の実施形態では、レイテンシの問題に対処するとき、クラウドゲームアプリケーションにおけるクライアントでのビデオ表示のスムーズさは、クライアントへの理想的な表示時間の送信によって改善され得る。
【0022】
詳細には、本開示のいくつかの実施形態では、クラウドゲームアプリケーションにおける一方向のレイテンシは、エンコードプロセスを早期に開始することによって短縮され得る。例えば、クラウドゲームサーバからクライアントへのメディアコンテンツのストリーミング(例えば、ビデオゲームからのオーディオとビデオのストリーミング)に使用される特定のアーキテクチャでは、サーバ表示バッファ(複数可)のスキャンアウトは、ビデオフレームに対して追加動作を実行して1つまたは複数の層を生成し、層は次に、組み合わされて、ビデオエンコードを実行するユニットにスキャンされることを含む。高速(120Hz以上)でスキャンアウトを実行することにより、エンコードプロセスを早期に開始し、したがって一方向のレイテンシを短縮することが可能になる。
また、本開示のいくつかの実施形態では、クラウドゲームアプリケーションにおける一方向のレイテンシは、クラウドゲームサーバで早期のスキャンアウトプロセスを実行することによって短縮され得る。詳細には、クラウドゲームサーバからクライアントへのメディアコンテンツのストリーミング(例えば、ビデオゲームからのオーディオやビデオのストリーミング)に使用される特定のアーキテクチャでは、サーバで実行しているアプリケーションプログラム(例えば、ビデオゲーム)が、ビデオフレームのレンダリング完了時に、サーバ表示バッファの「フリップ」が生じるように要求する。後続のサーバVSYNC信号の発生時にスキャンアウト動作を実行する代わりに、スキャンアウト動作はフリップ時間に開始され、サーバ表示バッファ(複数可)のスキャンアウトは、ビデオフレームに対して追加動作を実行して1つまたは複数の層を生成し、層は次に組み合わされて、ビデオエンコードを実行するユニットにスキャンされる。
フリップ時間(次のVSYNCではなく)にスキャンアウトすることで、エンコードプロセスを早期に開始して、一方向のレイテンシを短縮することが可能である。クラウドゲームサーバには実際にディスプレイが取り付けられていないため、表示タイミングは影響を受けない。本開示のいくつかの実施形態では、(後続のVSYNCではなく)フリップ時間に表示バッファのサーバスキャンアウトを実行するとき、クライアントでの理想的な表示タイミングは、スキャンアウトが発生した時間と、その特定の表示バッファに関するゲームの意図(例えば、次のVSYNCを対象としていた、または、ゲームの実行が遅れ、実際には前のVSYNCを対象としていた)との両方によって決まる。戦略は、ゲームが固定フレームレートであるか可変フレームレートであるか、及び情報が暗黙(スキャンアウトタイミングから推測される)か明示的(ゲームがGPU APIを介して理想的なタイミングを提供しており、この理想的なタイミングは、VSYNCまたはフラクショナルタイム(fractional time:分数時間とも称される)であってもよい)かによって異なる。
【0023】
様々な実施形態の上記の一般的な理解により、様々な図面を参照して実施形態の例の詳細を説明する。
【0024】
本明細書全体を通して、「ゲーム」または「ビデオゲーム」または「ゲームアプリケーション」への言及は、入力コマンドの実行を通して指示される任意のタイプのインタラクティブアプリケーションを表すことを意味する。説明目的のみで、インタラクティブアプリケーションは、ゲーム、文書処理、ビデオ処理、ビデオゲーム処理などのためのアプリケーションを含む。さらに、これらの用語は、置き換え可能である。
【0025】
クラウドゲームは、サーバでビデオゲームを実行して、ゲームのレンダリング済みビデオフレームを生成し、それをクライアントに表示のために送信する。サーバとクライアントの両方での動作のタイミングは、それぞれの垂直同期(VSYNC)パラメータに関連付けられてよい。VSYNC信号がサーバ及び/またはクライアント間で適切に同期及び/またはオフセットされると、サーバで実行される動作(例えば、1つまたは複数のフレーム周期にわたるビデオフレームの生成と送信)は、クライアントで実行される動作(例えば、フレーム周期に対応する表示フレームまたはリフレッシュレートでディスプレイにビデオフレームを表示する)と同期される。
詳細には、サーバで生成されたサーバVSYNC信号とクライアントで生成されたクライアントVSYNC信号が、サーバとクライアントでの動作を同期させるために使用され得る。つまり、サーバとクライアントのVSYNC信号が同期及び/またはオフセットされるとき、サーバは、クライアントがそれらのビデオフレームの表示の仕方と同期するようにビデオフレームを生成及び送信する。
【0026】
サーバとクライアント間でメディアコンテンツをストリーミングするときにビデオフレームを生成し、それらのビデオフレームを表示するために、VSYNCシグナリングと垂直帰線区間(VBI)が組み込まれている。例えば、サーバは、対応するサーバVSYNC信号で定義された1つまたは複数のフレーム周期でゲームのレンダリング済みビデオフレームを生成しようとする(例えば、フレーム周期が16.7msの場合、フレーム周期ごとにビデオフレームを生成すると、60Hzの動作になり、2フレーム周期ごとに1つのビデオフレームを生成すると、30Hzの動作になる)、その後、そのビデオフレームをエンコードしてクライアントに送信する。クライアントでは、受信したエンコード済みビデオフレームがデコードされて表示され、クライアントは、対応するクライアントVSYNCで始まる表示用に各レンダリング済みビデオフレームを表示する。
【0027】
説明のために、図1Aは、VSYNC信号111がフレーム周期の開始をどのように示し得るかを表し、様々な動作が、サーバ及び/またはクライアントで対応するフレーム周期中に実行され得る。メディアコンテンツをストリーミングするとき、サーバはビデオフレームの生成とエンコードにサーバVSYNC信号を使用してよく、クライアントはビデオフレームの表示にクライアントVSYNC信号を使用してよい。VSYNC信号111は、図1Bに示すように、定義されたフレーム周期110に対応する定義された周波数で生成される。さらに、VBI105は、前のフレーム周期に最後のラスタラインがディスプレイに描画されてから最初のラスタライン(例えば、最上部)がディスプレイに描画されるまでの期間を定義する。図に示すように、VBI105の後、表示のためにレンダリングされたビデオフレームは、ラスタスキャンライン106によって(例えば、ラスタラインごとに左から右に)表示される。
【0028】
さらに、本開示の様々な実施形態は、メディアコンテンツ(例えば、ビデオゲームコンテンツ)をストリーミングするときなど、ソースデバイスとターゲットデバイス間の一方向のレイテンシ及び/またはレイテンシの不安定性を低減するために開示される。説明目的のみで、一方向のレイテンシ及び/またはレイテンシの不安定性を低減するための様々な実施形態が、サーバ及びクライアントのネットワーク構成内で記載されている。しかしながら、一方向のレイテンシ及び/またはレイテンシ不安定性を低減するために開示される様々な技術は、図2A図2Dに示されるように、他のネットワーク構成内、及び/またはピアツーピアネットワーク上で実施され得ることが理解される。例えば、一方向のレイテンシ及び/またはレイテンシの不安定性を低減するために開示される様々な実施形態は、様々な構成(例えば、サーバとクライアント、サーバとサーバ、サーバと複数のクライアント、サーバと複数のサーバ、クライアントとクライアント、クライアントと複数のクライアントなど)で、サーバデバイス及びクライアントデバイスの1つまたは複数の間で実装され得る。
【0029】
図2Aは、本開示の一実施形態による、様々な構成において、1つまたは複数のクラウドゲームネットワーク290及び/またはサーバ260と1つまたは複数のクライアントデバイス210との間を、ネットワーク250を介してゲームを提供するためのシステム200Aの図であり、サーバ260とクライアント210間の一方向のレイテンシを短縮するために、サーバ及びクライアントのVSYNC信号を同期及びオフセットさせることができる、及び/または動的バッファリングがクライアント上で実行される、及び/またはサーバでのエンコード及び送信動作を重複させることができる、及び/またはクライアントでの受信及びデコード動作を重複させることができる、及び/またはクライアントでのデコード及び表示動作を重複させることができる。
詳細には、システム200Aは、本開示の一実施形態による、クラウドゲームネットワーク290を介してゲームを提供し、ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、シンクライアント)からリモートで実行されている。システム200Aは、シングルプレーヤモードまたはマルチプレーヤモードのいずれかで、ネットワーク250を介してクラウドゲームネットワーク290を通して1つまたは複数のゲームをプレイする1人または複数のユーザにゲーム制御を提供してよい。
いくつかの実施形態において、クラウドゲームネットワーク290は、ホストマシンのハイパーバイザ上で実行している複数の仮想マシン(VM)を含んでよく、1つまたは複数の仮想マシンは、ホストのハイパーバイザが利用可能なハードウェアリソースを利用してゲームプロセッサモジュールを実行するように構成される。ネットワーク250は、1つまたは複数の通信技術を含み得る。いくつかの実施形態では、ネットワーク250は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
【0030】
いくつかの実施形態では、通信は、無線技術を使用して促進され得る。そのような技術には、例えば、5G無線通信技術が含まれてよい。5Gは、セルラネットワーク技術の第5世代である。5Gネットワークはデジタルセルラネットワークであり、プロバイダがカバーするサービスエリアはセルと呼ばれる小さな地理的エリアに分割されている。音と画像を表すアナログ信号は、電話でデジタル化され、アナログ-デジタルコンバータによって変換され、ビットのストリームとして送信される。
セル内のすべての5Gワイヤレスデバイスは、他のセルで再利用される周波数のプールからトランシーバによって割り当てられた周波数チャネルを介して、セル内のローカルアンテナアレイ及び低電力自動トランシーバ(送信機及び受信機)と電波で通信する。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって、電話網及びインターネットに接続される。他のセルネットワークと同様に、あるセルから別のセルに移動するモバイルデバイスは、新しいセルに自動的に転送される。当然ながら、5Gネットワークは、通信ネットワークのタイプの単に一例であり、本開示の実施形態は、前世代の無線または有線通信、並びに5Gに続く後の世代の有線または無線技術を利用してよい。
【0031】
図に示すように、クラウドゲームネットワーク290は、複数のビデオゲームへのアクセスを提供するゲームサーバ260を含む。ゲームサーバ260は、クラウドで利用可能な任意のタイプのサーバコンピューティングデバイスであってよく、1つまたは複数のホスト上で実行される1つまたは複数の仮想マシンとして構成され得る。例えば、ゲームサーバ260は、ユーザのゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理してよい。よって、複数の仮想マシンに関連付けられたゲームサーバ260の複数のゲームプロセッサは、複数のユーザのゲームプレイに関連付けられた1つまたは複数のゲームの複数のインスタンスを実行するように構成される。
そのようにして、バックエンドサーバサポートは、複数のゲームアプリケーションのゲームプレイのメディア(例えば、ビデオ、オーディオなど)のストリーミングを、対応する複数のユーザに提供する。すなわち、ゲームサーバ260は、ネットワーク250を介して、データ(例えば、対応するゲームプレイのレンダリング済み画像及び/またはフレーム)を対応するクライアントデバイス210にストリーミングして戻すように構成される。そのようにして、クライアントデバイス210によって受信及び転送されたコントローラ入力に応答して、計算の複雑なゲームアプリケーションが、バックエンドサーバで実行され得る。各サーバは、画像及び/またはフレームをレンダリングすることができ、次にそれらをエンコード(例えば、圧縮)して、対応するクライアントデバイスに表示のためにストリーミングする。
【0032】
例えば、複数のユーザは、ストリーミングメディアを受信するように構成された対応するクライアントデバイス210を使用して、通信ネットワーク250を介してクラウドゲームネットワーク290にアクセスしてよい。一実施形態では、クライアントデバイス210は、計算機能(例えば、ゲームタイトル処理エンジン211を含む)を提供するように構成されたバックエンドサーバ(例えば、クラウドゲームネットワーク290のゲームサーバ260)とのインタフェースを提供するシンクライアントとして構成され得る。
別の実施形態では、クライアントデバイス210は、ビデオゲームの少なくとも何らかのローカル処理のためのゲームタイトル処理エンジン及びゲームロジックを有して構成されてよく、バックエンドサーバで実行しているビデオゲームによって生成されるストリーミングコンテンツを受信するために、またはバックエンドサーバサポートによって提供されるその他のコンテンツのためにさらに利用され得る。ローカル処理の場合、ゲームタイトル処理エンジンは、ビデオゲームと、ビデオゲームに関連するサービスとを実行するための基本的なプロセッサベースの機能を含む。ゲームロジックは、ローカルクライアントデバイス210に記憶され、ビデオゲームを実行するために使用される。
【0033】
詳細には、対応するユーザ(図示せず)のクライアントデバイス210は、インターネットなどの通信ネットワーク250経由でゲームへのアクセスを要求するように、及びゲームサーバ260により実行されるビデオゲームによって生成される表示画像をレンダリングするように構成され、エンコード済み画像は、対応するユーザと関連した表示のためにクライアントデバイス210に配信される。例えば、ユーザは、ゲームサーバ260のゲームプロセッサ上で実行しているビデオゲームのインスタンスとクライアントデバイス210を通してインタラクトしてよい。
より詳細には、ビデオゲームのインスタンスは、ゲームタイトル処理エンジン211により実行される。ビデオゲームを実施する対応するゲームロジック(例えば、実行可能コード)215は、データストア(図示せず)を介して記憶され、アクセス可能であり、ビデオゲームを実行するために使用される。ゲームタイトル処理エンジン211は、複数のゲームロジックを使用して複数のビデオゲームをサポートすることができ、各ビデオゲームは、ユーザによって選択可能である。
【0034】
例えば、クライアントデバイス210は、ゲームプレイを駆動するために使用される入力コマンドを介するなどして、対応するユーザのゲームプレイに関連してゲームタイトル処理エンジン211とインタラクトするように構成される。詳細には、クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによりキャプチャされたジェスチャ、マウス、タッチパッドなど、様々なタイプの入力デバイスからの入力を受信してよい。クライアントデバイス210は、メモリとプロセッサモジュールとを少なくとも有する任意のタイプのコンピューティングデバイスであってよく、ネットワーク250を介してゲームサーバ260に接続することができる。
バックエンドゲームタイトル処理エンジン211は、レンダリング済み画像を生成するように構成され、レンダリング済み画像は、クライアントデバイス210に関連する対応するディスプレイに表示するためにネットワーク250を介して配信される。例えば、クラウドベースのサービスを介して、ゲームのレンダリング済み画像は、ゲームサーバ260のゲーム実行エンジン211上で実行している対応するゲームのインスタンスによって配信され得る。すなわち、クライアントデバイス210は、エンコード済み画像(例えば、ビデオゲームの実行を通して生成されたゲームのレンダリング済み画像からエンコードされた)を受信するように、且つ、ディスプレイ11にレンダリング済み画像を表示するように構成される。
一実施形態では、ディスプレイ11は、(例えば、VRコンテンツを表示する)HMDを含む。いくつかの実施形態では、レンダリング済み画像は、クラウドベースのサービスから直接、またはクライアントデバイス210(例えば、PlayStation(登録商標)Remote Play)を介して、無線または有線でスマートフォンまたはタブレットにストリーミングされ得る。
【0035】
一実施形態では、ゲームサーバ260及び/またはゲームタイトル処理エンジン211は、ゲーム及びゲームアプリケーションに関連するサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能は、2Dもしくは3Dレンダリング、物理特性、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスタ化、レイトレーシング、シャドーイング、カリング、変換、人工知能などを含む。さらに、ゲームアプリケーションのサービスは、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークの友達との通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどを含む。
【0036】
一実施形態では、クラウドゲームネットワーク290は、分散型ゲームサーバシステム及び/またはアーキテクチャである。詳細には、ゲームロジックを実行する分散型ゲームエンジンが、対応するゲームのインスタンスとして構成される。一般に、分散型ゲームエンジンは、ゲームエンジンの各機能を取り込み、多数の処理エンティティによって実行するためにそれらの機能を分散させる。個々の機能は、さらに1つまたは複数の処理エンティティにわたって分散させることができる。処理エンティティは、物理ハードウェアを含む、及び/または、仮想コンポーネントもしくは仮想マシンとして、及び/または仮想コンテナとしてなど、様々な構成で構成されてよく、コンテナは、仮想化されたオペレーティングシステム上で実行するゲームアプリケーションのインスタンスを仮想化するものであるため、仮想マシンとは異なる。
処理エンティティは、クラウドゲームネットワーク290のサーバと1つまたは複数のサーバ(計算ノード)の基礎となるハードウェアを利用及び/またはそれらに依存してよく、サーバは1つまたは複数のラックに配置され得る。様々な処理エンティティに対するそれらの機能の実行の協調、割り当て、及び管理は、分散同期層によって行われる。そのようにして、それらの機能の実行が分散同期層によって制御されて、プレーヤによるコントローラ入力に応答して、ゲームアプリケーションのメディア(例えば、ビデオフレーム、オーディオなど)を生成することが可能になる。分散同期層は、分散処理エンティティ全体で(例えば、負荷バランシングを通して)それらの機能を効率的に実行することができ、それによって、重要なゲームエンジンコンポーネント/機能が、より効率的な処理のために分散及び再構築される。
【0037】
ゲームタイトル処理エンジン211は、マルチテナンシGPU機能を実行するように構成され得る中央処理装置(CPU)及びグラフィックス処理装置(GPU)グループを含む。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行している単一のアプリケーションのグラフィックス処理を実行する。
【0038】
図2Bは、本開示の一実施形態による、2つ以上のピアデバイス間でゲームを提供するための図であり、デバイス間のコントローラ及び他の情報の受信の最適なタイミングを達成するためにVSYNC信号を同期及びオフセットすることができる。例えば、直接対決ゲームは、ネットワーク250を介して、またはピアツーピア通信(例えば、ブルートゥース(登録商標)、ローカルエリアネットワークなど)を介して直接接続された2つ以上のピアデバイスを使用して行われてよい。
【0039】
図に示すように、ゲームは、ビデオゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、ゲームコンソール)のそれぞれでローカルに実行されており、クライアントデバイス210は、ピアツーピアネットワークを介して通信する。例えば、ビデオゲームのインスタンスは、対応するクライアントデバイス210のゲームタイトル処理エンジン211によって実行されている。ビデオゲームを実施するゲームロジック215(例えば、実行可能コード)は、対応するクライアントデバイス210に記憶され、ゲームを実行するために使用される。説明目的で、ゲームロジック215は、対応するクライアントデバイス210に、ポータブルメディア(例えば光学媒体)を介して、またはネットワークを介して配信され得る(例えば、インターネットを介してゲームプロバイダからダウンロードされ得る)。
【0040】
一実施形態では、対応するクライアントデバイス210のゲームタイトル処理エンジン211は、ゲーム及びゲームアプリケーションに関連するサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能は、2Dもしくは3Dレンダリング、物理特性、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスタ化、レイトレーシング、シャドーイング、カリング、変換、人工知能などを含む。さらに、ゲームアプリケーションのサービスは、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークの友達との通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどを含む。
【0041】
クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによってキャプチャされたジェスチャ、マウス、タッチパッドなど、様々なタイプの入力デバイスから入力を受信してよい。クライアントデバイス210は、メモリ及びプロセッサモジュールを少なくとも有し、ゲームタイトル処理エンジン211によって実行されるレンダリング済み画像を生成するように、または、レンダリング済み画像をディスプレイ(例えば、ディスプレイ11、またはヘッドマウントディスプレイHMDを含むディスプレイ11等)に表示するように構成された任意のタイプのコンピューティングデバイスであってよい。
例えば、レンダリング済み画像は、ゲームプレイを駆動するために使用される入力コマンドなどを介して、対応するユーザのゲームプレイを実施するために、クライアントデバイス210上でローカルに実行しているゲームのインスタンスに関連付けられてよい。クライアントデバイス210のいくつかの例は、パーソナルコンピュータ(PC)、ゲームコンソール、ホームシアタデバイス、汎用コンピュータ、モバイルコンピューティングデバイス、タブレット、電話、または、ゲームのインスタンスを実行することができる任意の他のタイプのコンピューティングデバイスを含む。
【0042】
図2Cは、本開示の一実施形態による、図2A及び図2Bの構成を含む、ソースデバイスとターゲットデバイス間のVSYNC信号の適切な同期及びオフセットから恩恵を受ける様々なネットワーク構成を示す。詳細には、様々なネットワーク構成は、サーバとクライアント間の一方向のレイテンシ及び/またはレイテンシの変動を低減するために、サーバとクライアントのVSYNC信号の周波数の適切な整合と、サーバとクライアントのVSYNC信号のタイミングオフセットから恩恵を受ける。例えば、1つのネットワークデバイス構成は、クラウドゲームサーバ(例えば、ソース)からクライアント(ターゲット)への構成を含む。
一実施形態では、クライアントは、ウェブブラウザ内でオーディオ及びビデオ通信を提供するように構成されたウェブRTCクライアントを含み得る。別のネットワーク構成は、クライアント(例えば、ソース)からサーバ(ターゲット)への構成を含む。さらに別のネットワーク構成は、サーバ(例えば、ソース)からサーバ(例えば、ターゲット)への構成を含む。別のネットワークデバイス構成は、クライアント(例えば、ソース)からクライアント(ターゲット)への構成を含み、クライアントはそれぞれ、例えば、直接対決のゲームを提供するためのゲームコンソールであってよい。
【0043】
詳細には、VSYNC信号の整合は、サーバVSYNC信号とクライアントVSYNC信号の周波数の同期を含み得るものであり、また、一方向のレイテンシ及び/またはレイテンシの変動を低減するために、ドリフトを除去する目的で、及び/またはサーバとクライアントのVSYNC信号間の理想的な関係を維持するためにクライアントVSYNC信号とサーバVSYNC信号の間のタイミングオフセットを調整することも含み得る。適切な整合を達成するために、一実施形態では、サーバ260とクライアント210の対の間の適切な整合を実施するために、サーバのVSYNC信号を同調してもよい。
別の実施形態では、サーバ260とクライアント210の対の間の適切な整合を実施するために、クライアントVSYNC信号を同調してよい。クライアントとサーバのVSYNC信号が整合されると、サーバVSYNC信号とクライアントVSYNC信号は実質的に同じ周波数で発生し、時々、調整され得るタイミングオフセットによって互いにオフセットされる。
別の実施形態では、VSYNC信号の整合は、2つのクライアントのVSYNCの周波数を同期させることを含んでよく、ドリフトを除去する目的で、これらのVSYNC信号間のタイミングオフセットを調整すること、及び/またはコントローラ及びその他の情報の受信の最適なタイミングを達成することも含み得る。いずれかのVSYNC信号が、この整合を達成するために同調され得る。
さらに別の実施形態では、整合は、複数のサーバのVSYNCの周波数を同期させることを含んでよく、且つ、例えば、直接対決のクラウドゲームのために、サーバVSYNC信号とクライアントVSYNC信号の周波数を同期し、クライアントVSYNC信号とサーバVSYNC信号の間のタイミングオフセットを調整することも含み得る。サーバからクライアントへの構成及びクライアントからクライアントへの構成では、整合は、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期、並びにサーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットの提供の両方を含み得る。サーバからサーバへの構成では、整合は、タイミングオフセットを設定せずにサーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期を含み得る。
【0044】
図2Dは、本開示の一実施形態による、ソースデバイスとターゲットデバイス間のVSYNC信号の適切な同期及びオフセットから恩恵を受けるクラウドゲームサーバ260と1つまたは複数のクライアント210との間のマルチテナンシ構成を示す。サーバからクライアントへの構成では、整合は、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期と、サーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットの提供の両方を含み得る。マルチテナンシ構成においては、一実施形態で、サーバ260とクライアント210の対の間の適切な整合を実施するために、クライアントVSYNC信号が各クライアント210で同調される。
【0045】
例えば、グラフィックスサブシステムは、一実施形態では、マルチテナンシGPU機能を実行するように構成されてよく、1つのグラフィックスサブシステムが、複数のゲームのためのグラフィックス及び/またはレンダリングパイプラインを実装し得る。つまり、グラフィックスサブシステムは、実行されている複数のゲーム間で共有される。詳細には、ゲームタイトル処理エンジンは、一実施形態では、マルチテナンシGPU機能を実行するように構成され得るCPU及びGPUグループを含んでよく、1つのCPU及びGPUグループが複数のゲームのためのグラフィックス及び/またはレンダリングパイプラインを実装し得る。つまり、CPUグループとGPUグループは、実行されている複数のゲーム間で共有される。CPUグループ及びGPUグループは、1つまたは複数の処理デバイスとして構成することができる。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行している単一のアプリケーションのグラフィックス処理を実行する。
【0046】
図3は、サーバでビデオゲームを実行してゲームのレンダリング済みビデオフレームを生成し、それらのビデオフレームを表示のためにクライアントに送信する一般的なプロセスを示す。従来、ゲームサーバ260及びクライアント210でのいくつかの動作は、各VSYNC信号によって定義されるフレーム周期内に実行される。例えば、サーバ260は、301において、対応するサーバVSYNC信号311によって定義される1つまたは複数のフレーム周期でゲームのレンダリング済みビデオフレームの生成を試みる。ビデオフレームは、動作350で入力デバイスから配信される制御情報(例えば、ユーザの入力コマンド)、または制御情報によって駆動されないゲームロジックのいずれかに応答して、ゲームによって生成される。送信ジッタ351が、制御情報をサーバ260に送信するときに存在する場合があり、ジッタ351は、クライアントからサーバへのネットワークレイテンシの変動を測定する(例えば、入力コマンドを送信するとき)。
図に示すように、太い矢印は、制御情報をサーバ260に送信するときの現在の遅延を示しているが、ジッタのために、サーバ260での制御情報の到着時間はある範囲(例えば、点線の矢印で囲まれた範囲)を有し得る。フリップ時間309に、GPUは、対応するビデオフレームが完全に生成され、サーバ260のフレームバッファに入れられたことを示すフリップコマンドに到達する。その後、サーバ260は、スキャンアウト/スキャンイン(動作302)を実行し、スキャンアウトは、そのビデオフレームのVSYNC信号311と、サーバVSYNC信号311(VBIは分かりやすくするために省略されている)によって定義された後続のフレーム周期にわたって整合され得る。その後、ビデオフレームがエンコードされ(動作303)(例えば、VSYNC信号311の発生後にエンコードが開始され、エンコードの終わりがVSYNC信号と整合しない場合がある)、クライアント210に送信される(動作304、送信がVSYNC信号311と整合しない場合がある)。
クライアント210において、エンコード済みビデオフレームは、受信され(動作305、受信はクライアントVSYNC信号312と整合しない場合がある)、デコードされ(動作306、デコードはクライアントVSYNC信号312と整合しない場合がある)、バッファリングされ、表示される(動作307、表示の開始は、クライアントVSYNC信号312と整合され得る)。詳細には、クライアント210は、対応するクライアントVSYNC信号312の発生時に開始する表示用にレンダリングされた各ビデオフレームを表示する。
【0047】
一方向のレイテンシ315は、ビデオフレームのサーバでのエンコードユニットへの転送(例えば、スキャンアウト302)の開始から、クライアント307でのビデオフレームの表示の開始までのレイテンシとして定義され得る。つまり、一方向のレイテンシは、クライアントのバッファリングを考慮した、サーバのスキャンアウトからクライアントの表示までの時間である。個々のフレームは、スキャンアウト302の開始からデコード306の完了までのレイテンシを有し、レイテンシは、エンコード303及び送信304などのサーバ動作、サーバ260とクライアント210の間のジッタ352を伴うネットワーク送信、クライアントでの受信305の高度のばらつきが原因で、フレーム毎に異なり得る。
図に示すように、真っ直ぐな太い矢印は、対応するビデオフレームをクライアント210に送信するときの現在のレイテンシを示すが、ジッタ352のために、クライアント210でのビデオフレームの到着時間はある範囲(例えば、点線の矢印で囲まれた範囲)を有し得る。良好なプレイ体験を実現するには、一方向のレイテンシが比較的安定している(例えば、かなり一定である)ことが必要なため、従来、バッファリング320が実行され、その結果、(例えば、スキャンアウト302の開始からデコード306の完了まで)レイテンシの少ない個々のフレームが、いくつかのフレーム周期の間、遅延される。つまり、ネットワークが不安定な場合、または予測できないエンコード/デコード時間がある場合は、一方向のレイテンシを一定に保つために追加のバッファリングが必要になる。
【0048】
本開示の一実施形態によると、クラウドゲームサーバとクライアント間の一方向のレイテンシは、サーバ上で実行しているビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトによって変動し得る。すなわち、サーバVSYNC信号311及びクライアントVSYNC信号312の周波数の違いにより、クライアントVSYNC信号は、サーバ260から到着するフレームに対してドリフトする可能性がある。ドリフトは、サーバとクライアントのそれぞれのクロックで使用される水晶発振器のごくわずかな違いが原因の場合がある。さらに、本開示の実施形態は、サーバとクライアントの間で整合させるためにVSYNC信号の同期及びオフセットのうちの1つ以上を実行することによって、クライアントに動的バッファリングを設けることによって、サーバでビデオフレームのエンコード及び送信を重複させることによって、クライアントでビデオフレームの受信及びデコードを重複させることによって、並びに、クライアントでビデオフレームのデコード及び表示を重複させることによって、一方向のレイテンシを短縮する。
【0049】
図4は、本開示の実施形態による、サーバで実行しているビデオゲームから生成されたビデオフレームをストリーミングするときの高度に最適化されたクラウドゲーミングサーバ260と高度に最適化されたクライアント210を含むネットワーク構成を通したデータのフローを示し、サーバ動作及びクライアント動作を重複させることで、一方向のレイテンシを短縮し、サーバとクライアントのVSYNC信号間の同期とオフセットによって、一方向のレイテンシを短縮し、且つサーバとクライアント間の一方向のレイテンシの変動を低減する。詳細には、図4は、サーバとクライアントのVSYNC信号間の望ましい整合を示す。
一実施形態では、サーバVSYNC信号311の同調が、サーバ及びクライアントネットワーク構成などにおいて、サーバとクライアントのVSYNC信号間の適切な整合を得るために実行される。
別の実施形態では、クライアントVSYNC信号312の同調が、マルチテナントサーバからマルチクライアントネットワーク構成などにおいて、サーバとクライアントのVSYNC信号間の適切な整合を得るために実行される。説明目的で、サーバとクライアントのVSYNC信号の周波数を同期させるための、及び/または対応するクライアントとサーバのVSYNC信号間のタイミングオフセットを調整するためのサーバVSYNC信号311の同調が、図4に記載されているが、当然ながら、クライアントVSYNC信号312も同調に使用され得る。この特許出願の文脈では、「同期」とは、周波数が一致するように信号を同調することを意味すると解釈するべきであるが、位相は異なる場合があり、「オフセット」は、信号間の時間遅延、例えば、一方の信号が最大に達してからもう一方の信号が最大に達するまでの時間を意味すると解釈されるべきである。
【0050】
図に示すように、図4は、本開示の実施形態において、サーバでビデオゲームを実行してレンダリング済みビデオフレームを生成し、それらのビデオフレームを表示のためにクライアントに送信する改善されたプロセスを示す。このプロセスは、サーバとクライアントでの単一のビデオフレームの生成と表示に関して示されている。詳細には、サーバは401でゲームのレンダリング済みビデオフレームを生成する。例えば、サーバ260は、ゲームを実行するように構成されたCPU(例えば、ゲームタイトル処理エンジン211)を含む。
CPUは、ビデオフレームの1つまたは複数のドローコールを生成し、ドローコールは、グラフィックスパイプラインのサーバ260の対応するGPUによって実行するためにコマンドバッファに入れられるコマンドを含む。グラフィックスパイプラインは、シーン内のオブジェクトの頂点に対して動作して表示のためのビデオフレーム用にレンダリングされたテクスチャ値を生成する1つまたは複数のシェーダプログラムを含んでよく、動作は効率を上げるためにGPUを介して並行して実行される。フリップ時間409に、GPUは、コマンドバッファのフリップコマンドに到達し、フリップコマンドは、対応するビデオフレームが完全に生成及び/またはレンダリングされ、サーバ260のフレームバッファに入れられたことを示す。
【0051】
402で、サーバは、ゲームのレンダリング済みビデオフレームのエンコーダへのスキャンアウトを実行する。詳細には、スキャンアウトは、スキャンラインごとに、または連続するスキャンラインのグループで実行され、スキャンラインは、例えば、画面の端から画面の端までのディスプレイの単一の水平線を指す。これらのスキャンラインまたは連続するスキャンラインのグループは、スライスと呼ばれることもあり、この明細書ではスクリーンスライスと呼ばれる。詳細には、スキャンアウト402は、レンダリング済みフレームを別のフレームバッファを用いてオーバーレイすること、または別のフレームバッファからの情報でレンダリング済みフレームを囲むためにそのフレームを縮小することを含む、ゲームのレンダリング済みフレームを修正するいくつかのプロセスを含み得る。スキャンアウト402中に、修正済みビデオフレームは次に、圧縮のためにエンコーダにスキャンされる。一実施形態では、スキャンアウト402は、VSYNC信号311の発生311a時に実行される。他の実施形態では、スキャンアウト402は、フリップ時間409など、VSYNC信号311の発生前に実行され得る。
【0052】
403で、ゲームのレンダリング済みビデオフレーム(修正されている場合がある)は、エンコーダでエンコーダスライスごとにエンコードされて、1つまたは複数のエンコード済みスライスを生成する。ここで、エンコード済みスライスは、スキャンラインともスクリーンスライスとも無関係である。そのため、エンコーダは、1つまたは複数のエンコード済み(例えば、圧縮された)スライスを生成する。
一実施形態では、エンコードプロセスは、対応するビデオフレームのスキャンアウト402プロセスが完全に完了する前に開始する。さらに、エンコード403の開始及び/または終了は、サーバVSYNC信号311と整合されてもされなくてもよい。エンコード済みスライスの境界は、単一のスキャンラインに制限されず、単一のスキャンラインまたは複数のスキャンラインで構成され得る。さらに、エンコード済みスライスの終了及び/または次のエンコーダスライスの開始は、必ずしも表示画面の端で発生するわけではなく(例えば、画面の中央またはスキャンラインの中央で発生する場合がある)、よって、エンコード済みスライスは、表示画面の端から端まで完全に横断する必要はない。図に示すように、ハッシュマークを有する圧縮された「エンコード済みスライスA」を含む1つまたは複数のエンコード済みスライスは、圧縮及び/またはエンコードされ得る。
【0053】
404で、エンコード済みビデオフレームは、サーバからクライアントに送信され、送信は、エンコード済みスライスごとに生じてよく、各エンコード済みスライスは、圧縮されたエンコーダスライスである。一実施形態では、送信プロセス404は、対応するビデオフレームのエンコードプロセス403が完全に完了する前に開始する。さらに、送信404の開始及び/または終了は、サーバVSYNC信号311と整合されてもされなくてもよい。図に示すように、圧縮されたエンコード済みスライスAは、レンダリング済みビデオフレームの他の圧縮されたエンコーダスライスとは独立してクライアントに送信される。エンコーダスライスは、一度に1つずつ、または並行して送信され得る。
【0054】
405で、クライアントは、再びエンコード済みスライスごとに、圧縮されたビデオフレームを受信する。さらに、受信405の開始及び/または終了は、クライアントVSYNC信号312と整合されてもされなくてもよい。図に示すように、圧縮されたエンコード済みスライスAがクライアントによって受信される。送信ジッタ452が、サーバ260とクライアント210との間に存在する場合があり、ジッタ452は、サーバ260からクライアント210へのネットワークレイテンシの変動を測定する。ジッタ値が低いほど、接続がより安定していることを示す。図に示すように、真っ直ぐな太い矢印は、対応するビデオフレームをクライアント210に送信するときの現在のレイテンシを示すが、ジッタのために、クライアント210でのビデオフレームの到着時間にはある範囲(例えば、点線の矢印で囲まれた範囲)が存在し得る。レイテンシの変動は、エンコード403や送信404などのサーバでの1つまたは複数の動作、並びにビデオフレームをクライアント210に送信するときにレイテンシをもたらすネットワークの問題が原因の場合もある。
【0055】
406で、クライアントは、圧縮されたビデオフレームを、再びエンコード済みスライスごとにデコードし、デコード済みスライスA(ハッシュマークなしで示される)を生成し、これで、表示の準備ができる。一実施形態では、デコードプロセス406は、対応するビデオフレームの受信プロセス405が完全に完了する前に開始する。さらに、デコード406の開始及び/または終了は、クライアントVSYNC信号312と整合されてもされなくてもよい。407で、クライアントは、デコードされたレンダリング済みビデオフレームをクライアントのディスプレイに表示する。すなわち、デコード済みビデオフレームは、表示バッファに入れられ、例えば、スキャンラインごとにディスプレイデバイスにストリームアウトされる。
一実施形態では、表示プロセス407(すなわち、ディスプレイデバイスへのストリーミングアウト)は、デコードプロセス406が対応するビデオフレームに対して完全に完了した後、すなわち、デコード済みビデオフレームが表示バッファに完全に存在するようになった後に開始する。一実施形態では、表示プロセス407は、対応するビデオフレームのデコードプロセス406が完全に完了する前に開始する。つまり、ディスプレイデバイスへのストリームアウトは、デコード済みフレームバッファの一部のみが表示バッファに存在する時点で、表示バッファのアドレスから開始される。次に、表示バッファは、表示に間に合うように対応するビデオフレームの残りの部分で更新または埋められ、それによって、表示バッファの更新は、それらの部分がディスプレイにストリームアウトされる前に実行される。さらに、表示407の開始及び/または終了は、クライアントVSYNC信号312と整合される。
【0056】
一実施形態では、サーバ260とクライアント210間の一方向のレイテンシ416は、スキャンアウト402が開始されてから表示407が開始されるまでの経過時間として定義され得る。本開示の実施形態は、サーバとクライアント間のVSYNC信号を整合させて(例えば、周波数を同期し、オフセットを調整して)、サーバとクライアント間の一方向のレイテンシを短縮し、サーバとクライアント間の一方向のレイテンシの変動を低減することができる。
例えば、本開示の実施形態は、サーバVSYNC信号311とクライアントVSYNC信号312間のオフセット430に対する最適な調整を計算することができ、それによって、エンコード403及び送信404などのサーバ処理にワーストケースに近い時間が必要になった場合でも、サーバ260とクライアント210間のネットワークレイテンシがワーストケースに近い場合でも、且つ、受信405及びデコード406などのクライアント処理がワーストケース最悪に近い場合でも、デコードされたレンダリング済みビデオフレームは、表示プロセス407に間に合うように入手される。つまり、サーバVSYNCとクライアントVSYNC間の絶対オフセットを決定する必要はなく、デコードされたレンダリング済みビデオフレームが表示プロセスに間に合って入手できるようにオフセットを調整するだけで十分である。
【0057】
詳細には、サーバ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の周波数も実質的に等しいことを示している。
【0058】
サーバとクライアントのVSYNC信号の周波数の同期を維持するために、サーバVSYNC信号311のタイミングを操作してよい。例えば、サーバVSYNC信号311の垂直帰線区間(VBI)は、サーバVSYNC信号311とクライアントVSYNC信号312との間のドリフトを考慮するために、ある期間にわたって増加または短縮され得る。VBIにおける垂直ブランキング(VBLANK)ラインの操作によって、サーバVSYNC信号311の1つまたは複数のフレーム周期についてVBLANKに使用されるスキャンラインの数を調整する。
VBLANKのスキャンラインの数を少なくすると、2つのサーバVSYNC信号311の発生間の対応するフレーム周期(例えば、時間間隔)が短縮される。逆に、VBLANKのスキャンラインの数を増やすと、2つのVSYNC信号311の発生間の対応するフレーム周期(例えば、時間間隔)が増加する。このようにして、サーバVSYNC信号311の周波数が調整されて、クライアント及びサーバVSYNC信号311及び312の周波数が実質的に同じ周波数になるように整合される。また、サーバとクライアントのVSYNC信号間のオフセットは、VBIを元の値に戻す前に、VBIを短時間増減することによって調整することができる。
一実施形態では、サーバVBIが調整される。別の実施形態では、クライアントVBIが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらはそれぞれ、調整される対応するVBIを有してよい。一実施形態では、複数の接続されたデバイスはそれぞれ、(例えば、サーバデバイスのない)独立したピアデバイスであってよい。別の実施形態では、複数のデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらの何らかの組み合わせで配置された1つまたは複数のサーバデバイス及び/または1つまたは複数のクライアントデバイスを含み得る。
【0059】
あるいは、サーバのピクセルクロック(例えば、サーバのノースブリッジ/サウスブリッジコアロジックチップセットのサウスブリッジにある、または、ディスクリートGPUの場合は、独自のハードウェアを使用して単独でピクセルクロックを生成する)は、一実施形態では、サーバVSYNC信号311とクライアントVSYNC信号312の間の周波数の同期を整合に戻すために、ある期間にわたってサーバVSYNC信号311の周波数の粗同調及び/または微同調を実行するように操作され得る。
具体的には、サーバのサウスブリッジのピクセルクロックをオーバークロックまたはアンダークロックして、サーバのVSYNC信号311の全体的な周波数を調整してよい。このようにして、サーバVSYNC信号311の周波数は、クライアントVSYNC信号312とサーバVSYNC信号311の間の周波数を実質的に同じ周波数に整合させるように調整される。サーバVSYNCとクライアントVSYNC間のオフセットは、ピクセルクロックを元の値に戻す前に、クライアントサーバのピクセルクロックを短時間増減することによって調整することができる。一実施形態では、サーバのピクセルクロックが調整される。
別の実施形態では、クライアントのピクセルクロックが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらはそれぞれ、調整される対応するピクセルクロックを有してよい。一実施形態では、複数の接続されたデバイスはそれぞれ、(例えば、サーバデバイスのない)独立したピアデバイスであってよい。別の実施形態では、複数のデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらの何らかの組み合わせで配置された1つまたは複数のサーバデバイスと1つまたは複数のクライアントデバイスとを含み得る。
【0060】
図5A-1は、本開示の一実施形態による、ネットワークを介してクラウドゲームサーバで実行されるビデオゲームからコンテンツをストリーミングするとき、エンコーダに送るために高速スキャンアウト動作を実行するように構成されたチップセット540を示す。さらに、チップセット540は、次のシステムVSYNC信号が発生する前、または対応するビデオフレームのフリップ時間においてなど、早期のスキャンアウト動作を実行するように構成され得る。詳細には、図5A-1は、一実施形態において、スキャンアウトブロック550の速度が、クライアントのターゲットディスプレイに対してどのように決定されるかを示す。
【0061】
チップセット540は、最大ピクセルクロック515で動作するように構成される。ピクセルクロックは、スキャンアウトブロック550などを介して、チップセットがピクセルを処理できるレートを定義する。ピクセルクロックのレートは通常、処理可能なピクセル数を表すメガヘルツ値で表される。詳細には、ピクセルクロック計算機510は、チップ計算設定501及び/または自己診断テスト505に基づいて最大ピクセルクロック515を決定するように構成される。例えば、チップセット540は、チップ計算設定501に含まれる特定の最大ピクセルクロックで設計され得る。
しかしながら、構築後、チップセット540は、より高いピクセルクロックで動作可能な場合がある、またはチップ計算設定501から決定されるように設計されたピクセルクロックで実際に動作しない場合がある。したがって、テスト505が、自己診断ピクセルクロック505を決定するために実行され得る。ピクセルクロック計算機510は、チップ計算設定501または自己診断ピクセルクロック505から決定されるように、設計されたピクセルクロックの高い方に基づいて、チップセット540の最大ピクセルクロック515を定義するように構成され得る。説明目的で、例示的な最大ピクセルクロックは、毎秒300メガピクセル(Mpps)であってよい。
【0062】
スキャンアウトブロック550は、クライアント210のターゲットディスプレイに対応する速度で動作する。詳細には、フレームレート計算機520は、チップセット540の最大ピクセルクロック515及び要求された画像サイズ521を含む様々な入力に基づいてフレームレート設定525を決定する。要求された画像サイズ521の情報は、従来の表示値(例えば、480p、720p、1080p、4K、8Kなど)、及び他の定義された値を含む値522から取得され得る。
同じ最大ピクセルクロックに対して、クライアントのターゲットディスプレイに応じて異なるフレームレート設定が存在してよく、フレームレート設定は、最大ピクセルクロック515をターゲットディスプレイのピクセル数で割ることによって決定される。例えば、毎秒300メガピクセルの最大ピクセルクロックで、480pディスプレイのフレームレート設定(例えば、携帯電話で使用されるような約300kピクセル)は、約1000Hzである。また、毎秒300メガピクセルの同じ最大ピクセルクロックで、1080pディスプレイ(約2メガピクセル)のフレームレート設定は、約150Hzである。また、説明目的で、毎秒300メガピクセルの最大ピクセルクロックで、4kディスプレイのフレームレート設定は約38Hzである。
【0063】
フレームレート設定525は、チップセット540用にフォーマットされた速度設定値535を決定するように構成されたスキャンアウト設定コンバータ530に入力される。例えば、チップセット540は、ビットレートで動作していてもよい。一実施形態では、速度設定値535は、フレームレート設定525(例えば、1秒あたりのフレーム数)であってよい。いくつかの実施形態では、速度設定値535は、ベースフレームレートの倍数に決定され得る。例えば、速度設定値535は、30Hz、60Hz、90Hz、120Hz、150Hzなどの1秒あたり30フレーム(例えば、30Hz)の倍数に設定され得る。クライアント210のターゲットディスプレイの動作速度を決定するためにチップセット内の対応するスキャンアウトブロック550によってアクセスされるように、速度設定値535は、チップセット540のキャッシュ545に入力される。
【0064】
チップセット540は、ゲームタイトル処理エンジン211を含み、ゲームタイトル処理エンジン211は、ビデオゲームのビデオゲームロジック215を実行して、クライアント210にストリーミングバックするためのゲームのレンダリング済みビデオフレームを生成するように構成される。図に示すように、ゲームタイトル処理エンジン211は、(例えば、グラフィックスパイプラインを実装するように構成された)CPU501及びGPU502を含む。
一実施形態では、CPU501及びGPU502は、より高速な通信及び処理のために同じバスを使用してCPU及びGPUを同じチップまたはダイに統合するように構成された加速処理装置(APU)として構成される。別の実施形態では、CPU501及びGPU502は、PCI-Express、Gen-Zなどのバスを介して接続され得る。ビデオゲームの複数のゲームのレンダリング済みビデオフレームが生成され、ゲームバッファ0やゲームバッファ1などの1つまたは複数のゲームバッファを含むバッファ555(例えば、表示バッファまたはフレームバッファ)に入れられる。
ゲームバッファ0及びゲームバッファ1は、フリップ制御信号によって駆動されて、どのゲームバッファがゲームタイトル処理エンジン211から出力されるどのビデオフレームを記憶するかを決定する。ゲームタイトル処理エンジンは、ビデオゲームで定義された特定の速度で動作している。例えば、ビデオフレームは、ゲームタイトル処理エンジン211によって30Hzまたは60Hzなどで出力され得る。
【0065】
ゲームのレンダリング済みビデオフレームに含めるために、オプションで追加情報が生成され得る。詳細には、特徴生成ブロック560が、1つまたは複数の特徴生成ユニットを含み、各ユニットは、特徴を生成するように構成される。各特徴生成ユニットは、特徴処理エンジンとバッファとを含む。例えば、特徴生成ユニット560-Aは、特徴処理エンジン503を含む。一実施態様では、特徴処理エンジン503は、ゲームタイトル処理エンジン211のCPU501及びGPU502上で(例えば、他のスレッド上で)実行している。特徴処理エンジン503は、ユーザインタフェース、メッセージングなどの複数のユーザインタフェース(UX)特徴を生成するように構成され得る。
UX特徴は、一実施態様において、オーバーレイとして提示され得る。ビデオゲーム用に生成された複数のUX特徴は、UXバッファ0やUXバッファ1などの1つまたは複数のUXバッファを含むバッファ(例えば、表示バッファまたはフレームバッファ)に入れられる。UXバッファ0及びUXバッファ1は、対応するフリップ制御信号によって駆動されて、どのUXバッファが、特徴処理エンジン503から出力されるどの特徴を記憶するかを決定する。また、特徴処理エンジン503は、ビデオゲームによって定義され得る特定の速度で動作している。例えば、ビデオフレームは、30Hzまたは60Hzなどで特徴処理エンジン503によって出力され得る。特徴処理エンジン503はまた、ビデオフレームがゲームタイトル処理エンジン211によって出力され得る速度とは無関係な速度で(すなわち、30Hzまたは60Hz以外のレートなどで)動作してよい。
【0066】
バッファ555からスキャンされたゲームのレンダリング済みビデオフレーム、及び特徴生成ユニット(例えば、ユニット560-A)のバッファからスキャンされたオプションの特徴は、レートXでスキャンアウトブロック550にスキャンされる。ゲームのレンダリング済みビデオフレームを保持するゲームバッファ555及び/または特徴を保持するUXバッファをスキャンするためのレートXは、一実施態様では、情報がバッファから可能な限り迅速にスキャンアウトされるように、速度設定値535に対応しない場合がある。別の実施態様では、レートXは速度設定値535に対応する。
【0067】
前述のように、スキャンアウトブロック550は、クライアント210のターゲットディスプレイに対応する速度で動作する。複数のターゲットディスプレイ(例えば、携帯電話、テレビディスプレイ、コンピューターモニタなど)を有する複数のクライアントが存在し得る場合、複数のスキャンアウトブロックが存在してよく、それぞれが対応するディスプレイをサポートし、それぞれが異なる速度設定値で動作する。例えば、スキャンアウトブロックA(550-A)は、バッファ555からゲームのレンダリング済みビデオフレームを受信し、特徴生成ブロック560から特徴オーバーレイを受信する。
スキャンアウトブロックA(550-A)は、対応するフレームレート設定など、キャッシュA(545-A)の対応する速度設定値で動作する。したがって、ターゲットディスプレイの場合、スキャンアウトブロック550は、速度設定値によって定義されたレート(例えば、120Hz)で修正済みビデオフレームをエンコーダ570に出力する。すなわち、修正済みビデオフレームがエンコーダ570に出力されるレートは、ビデオフレームが生成及び/またはエンコードされているレートよりも高く、このレートは、スキャンアウトブロック550を含むチップセット540の最大ピクセルクロックとターゲットディスプレイの画像サイズとに基づく。
【0068】
一実施態様では、エンコーダ570は、チップセット540の一部であってよい。他の実施態様では、エンコーダ570は、チップセット540とは別個である。エンコーダ570は、クライアント210にストリーミングするために修正済みビデオフレームを圧縮するように部分的に構成される。例えば、修正済みビデオフレームは、エンコーダでスライスごとにエンコードされて、対応する修正済みビデオフレームに対して1つまたは複数のエンコード済みスライスを生成する。次に、追加の特徴オーバーレイを含む、対応する修正済みビデオフレームの1つまたは複数のエンコード済みスライスが、ネットワークを介してクライアント210のターゲットディスプレイにストリーミングされる。エンコーダは、前述のように、速度設定値とは無関係で、同期及びオフセットされたサーバ及びクライアントのVSYNC信号に関連付けられ得るレートで、1つまたは複数のエンコード済みスライスを出力してよい。例えば、1つまたは複数のエンコード済みスライスは、60Hzで出力され得る。
【0069】
図5A-2は、本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするとき、エンコーダに送るために高速スキャンアウト動作を実行するように構成されたチップセット540Bを示し、オプションのユーザインタフェース特徴がゲームのレンダリング済みビデオフレームに統合され得る。さらに、チップセット540は、次のシステムVSYNC信号が発生する前、または対応するビデオフレームのフリップ時間においてなど、早期のスキャンアウト動作を実行するように構成され得る。図5A-2に示されるいくつかの構成要素は、図5A-1の構成要素と類似しており、類似の特徴は類似の機能を有する。図5A-2と図5A-1の間の相違は、それぞれのチップセットに示されている。
詳細には、図5A-2と図5A-1の間では、図5A-2のチップセット540Bの構成は個別の特徴生成ブロックがないという点で異なる。したがって、1つまたは複数のオプションのUX特徴は、CPU501及び/またはGPU502によって生成されてよく、前述のように、バッファ555に入れられるゲームのレンダリング済みビデオフレームに統合され得る。つまり、特徴はレンダリング済みビデオフレームに統合されるため、オーバーレイとして提供される必要はない。ゲームのレンダリング済みビデオフレームは、オプションで、バッファ555からスキャンアウトブロック550にスキャンされてよく、スキャンアウトブロック550は、クライアント(複数可)の1つまたは複数のターゲットディスプレイのための1つまたは複数のスキャンアウトブロック550-Bを含む。
前述のように、対応するスキャンアウトブロック550-Bは、ターゲットディスプレイの速度で動作する。したがって、ターゲットディスプレイに対して、対応するスキャンアウトブロック550-Bは、速度設定値によって定義されたレートでビデオフレームをエンコーダ570に出力する。いくつかの実施形態では、特徴がゲームのレンダリング済みビデオフレームに統合されるので、バッファ555のみを必要とし、そのため、レンダリング済みビデオフレームは、エンコーダに直接スキャンされ、スキャンアウトブロック550をバイパスしてよい。その場合、スキャンアウト中に実行される追加動作は、例えば、CPU501及び/またはGPU502によって実行され得る。
【0070】
図5B-1は、本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してクライアントにストリーミングするとき、1つまたは複数の追加の特徴(例えば、層)をオプションで含み得るゲームのレンダリング済みビデオフレームをエンコーダに送るために実行されるスキャンアウト動作を示す。例えば、図5B-1は、図5A-1のスキャンアウトブロック550-Aの動作を示す。スキャンアウトブロックA(550-A)は、ゲームのレンダリング済みビデオフレームをスキャンラインごとに受信する。
【0071】
詳細には、スキャンアウトブロックA(550-A)は、バッファ555からゲームのレンダリング済みビデオフレームを受信し、特徴生成ブロック560から特徴オーバーレイを受信し、それらは、入力バッファ580に提供される。前述のように、スキャンアウトブロックA(550-A)は、クライアント210のターゲットディスプレイの対応するフレームレート設定など、キャッシュA(545-A)の対応する速度設定値によって動作する。例えば、ゲームの複数のレンダリング済みビデオフレームは、フリップ制御信号によって制御されるように、ゲームバッファ0及びゲームバッファ1から、スキャンアウトブロックA(550-A)の入力フレームバッファ580-Aに出力される。
【0072】
さらに、スキャンアウトブロックA(550-A)は、オプションで、1つまたは複数のUX特徴を(例えば、オーバーレイとして)受信してよい。例えば、複数のUX特徴は、対応するフリップ制御信号によって制御されるように、UXバッファ0及びUXバッファ1を含むバッファ560-Aから出力される。複数のUX特徴が、スキャンアウトブロックA(550-A)の入力フレームバッファ580-Bにスキャンされる。他の特徴オーバーレイが提供されてよく、例示的なUX特徴は、ユーザインタフェース、システムユーザインタフェース、テキスティング、メッセージング、メニュー、通信、追加のゲーム視点、eスポーツ情報などを含み得る。例えば、追加の複数のUX特徴が、対応するフリップ制御信号によって制御されるように、それぞれがUXバッファ0及びUXバッファ1を含むバッファ560A~560Nから出力され得る。説明のために、複数のUX特徴がバッファ560-Nから入力フレームバッファ580-Nに出力される。
【0073】
入力フレームバッファ580内の情報は、情報を合成するように構成されたコンバイナ585に出力される。例えば、ビデオゲームによって生成される対応するビデオフレームごとに、コンバイナ585は、入力フレームバッファ580-Aからのゲームのレンダリング済みビデオフレームと、入力フレームバッファ580-B~580-Nで提供されるオプションのUX特徴のそれぞれとを組み合わせる。
【0074】
次に、1つまたは複数のオプションのUX特徴と組み合わされたゲームのレンダリング済みビデオフレームがブロック590に提供され、ここで、追加動作を実行して、表示に適した修正済みビデオフレームを生成してよい。ブロック590のスキャンアウトプロセス中に実行される追加動作は、DCC圧縮面の解凍、ターゲットディスプレイへの解像度スケーリング、色空間変換、デガンマ、HDR拡張、色域の再マップ、LUT形成、トーンマッピング、ガンマブレンディング、ブレンディングなど、1つまたは複数の動作を含み得る。
【0075】
他の実施態様では、ブロック590におおまかに記載される追加動作が、入力フレームバッファ580のそれぞれで実行されて、修正済みビデオフレームの対応する層を生成する。例えば、入力フレームバッファは、ビデオゲームのゲームのレンダリング済みビデオフレーム、並びにユーザインタフェース(UI)、システムUI、テキスト、メッセージングなど、(例えば、オーバーレイとしての)1つまたは複数のオプションのUX特徴を記憶及び/または生成するために使用され得る。追加動作は、DCC圧縮面の解凍、解像度スケーリング、色空間変換、デガンマ、HDR拡張、色域の再マップ、LUT形成、トーンマッピング、ガンマブレンディングなどを含み得る。これらの動作が実行された後、入力フレームバッファ580の1つまたは複数の層が合成及びブレンドされ、オプションで表示バッファに入れられ、次にエンコーダにスキャンされる(例えば、表示バッファからスキャンされる)。
【0076】
したがって、ターゲットディスプレイに対して、スキャンアウトブロック550-Aは、複数の修正済みビデオフレームを速度設定値によって定義されたレート(例えば、120Hz)でエンコーダ570に出力する。すなわち、修正済みビデオフレームがエンコーダ570に出力されるレートは、ビデオフレームが生成及び/またはエンコードされているレートよりも高く、このレートは、スキャンアウトブロック550を含むチップセット540の最大ピクセルクロックとターゲットディスプレイの画像サイズとに基づく。前述のように、エンコーダ570は、修正済みビデオフレームのそれぞれを圧縮する。
例えば、対応する修正済みビデオフレームは、1つまたは複数のエンコード済みスライス(圧縮されたエンコーダスライス)に圧縮されてよく、これは、ネットワークストリーミングのためにさらにパケット化され得る。エンコード済みスライスに圧縮及び/またはパケット化された修正済みビデオフレームは、次に、バッファ580(例えば、先入れ先出しまたはFIFOバッファ)に記憶される。ストリーマ575は、エンコード済みスライスを、ネットワーク250を介してクライアント210に送信するように構成される。前述のように、ストリーマデバイスは、伝送制御プロトコル/インターネットプロトコル(TCP/IP)コンピュータネットワーキングモデルのアプリケーション層で動作するように構成され得る。
実施形態では、IPベースのネットワーク(例えば、ホーム/インターネット)を想定して、TCP/IPまたはUDPを使用してよい。例えば、クラウドゲームサービスはUDPを使用してよい。TCP/IPは、すべてのデータが到着することを保証する。ただし、「到着保証」には再送信という代償を伴い、追加のレイテンシをもたらす。他方、UDPベースのプロトコルは、最高のレイテンシパフォーマンスを提供するが、パケット損失という代償を払うことになり、これは、データ損失を招く。
【0077】
図5B-2は、本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してクライアントにストリーミングするとき、1つまたは複数の追加の特徴(例えば、層)をオプションで含み得るゲームのレンダリング済みビデオフレームをエンコーダに送るために実行されるスキャンアウト動作を示す。例えば、図5B-2は、スキャンアウトブロック550-A2の動作を示す。スキャンアウトブロックA2(550-A2)は、ゲームのレンダリング済みビデオフレームをスキャンラインごとに受信する。
図5B-2のスキャンブロック550-A2の構成は、図5B-1のスキャンブロック550-Aに類似しており、類似の特徴は、類似の機能を有する。図5B-2のスキャンアウトブロック550-A2は、コンバイナ585がないため、図5B-1のスキャンアウトブロック550-Aとは異なる。結果として、ゲームのレンダリング済みビデオフレームとUX特徴オーバーレイとは、クライアント側で合成及びブレンドされ得る。
【0078】
図に示すように、入力フレームバッファ580のそれぞれの情報は、対応するブロック590に送られ、そこで追加動作が実行される。すなわち、ブロック590におおまかに記載されている追加動作が、対応する層を生成するために、入力フレームバッファ580のそれぞれに対して実行される。追加動作は、DCC圧縮面の解凍、解像度スケーリング、色空間変換、デガンマ、HDR拡張、色域の再マップ、LUT形成、トーンマッピング、ガンマブレンディングなどを含み得る。これらの動作が実行された後、修正された1つまたは複数の層が、エンコーダ570に別個に送られる。エンコーダは、各層を個別にクライアントに配信し、クライアントは、層を合成及びブレンドして、表示用の修正済みビデオフレームを生成してよい。
【0079】
図5B-3は、本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからネットワークを介してクライアントにコンテンツをストリーミングするとき、エンコーダに送るためにゲームのレンダリング済みビデオフレームに対して行われるスキャンアウト動作を示す。例えば、図5B-3は、図5A-2のスキャンアウトブロック550Bの動作を示し、スキャンアウトブロック550-Bにはコンバイナの機能がない。スキャンアウトブロック550-Bのいくつかの構成要素は、図5B-1のスキャンアウトブロック550-Aに類似しており、類似の特徴は、類似の機能を有する。図5B-3のスキャンアウトブロック550-Bは、(例えば、合成とブレンドを実行するための)コンバイナがなく、個別の特徴生成がないため、単一の入力フレームバッファなので、図5B-1のスキャンアウトブロック550-Aとは異なる。
詳細には、スキャンアウトブロックB(550-B)は、バッファ555からスキャンラインごとにゲームのレンダリング済みビデオフレームを受信する。オプションで、ユーザインタフェース特徴が、CPU及び/またはGPUによって生成されたゲームのレンダリング済みビデオフレームに統合され得る。例えば、ゲームの複数のレンダリング済みビデオフレームは、フリップ制御信号によって制御されるように、ゲームバッファ0及びゲームバッファ1から、スキャンアウトブロックB(550-B)の入力フレームバッファ580に出力される。次に、ゲームのレンダリング済みビデオフレームはブロック590に提供され、ここで、前述のように、追加動作(例えば、DCC圧縮面の解凍、ターゲットディスプレイへの解像度スケーリング、色空間変換など)を実行して、表示に適した修正済みビデオフレームを生成してよい。オプションのUX特徴はゲームのレンダリング済みビデオフレームにすでに統合されているため、追加動作で合成及び/またはブレンドを実行する必要がない場合もある。
いくつかの実施態様では、ブロック590におおまかに記載されている追加動作は、入力フレームバッファ580で実行され得る。したがって、ターゲットディスプレイに対して、スキャンアウトブロック550-Bは、複数の修正済みビデオフレームを(例えば、対応する速度設定値によって定義されたレートで)エンコーダ570に出力する。前述のように、エンコーダ570は、修正済みビデオフレームのそれぞれを、1つまたは複数のエンコード済みスライス(圧縮されたエンコーダスライス)などに圧縮し、これらは、ネットワークストリーミングのためにさらにパケット化され得る。エンコード済みスライスに圧縮及び/またはパケット化された修正済みビデオフレームは、次に、バッファ580に記憶される。ストリーマ575は、前述のように、エンコード済みスライスを、ネットワークを介してクライアント210に送信するように構成される。
【0080】
図5C及び図5Dは、本開示の実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするとき、エンコーダに送るために高速スキャンアウト動作を実行するときに使用される1つまたは複数の入力フレームバッファを有するスキャンアウトブロックを含む例示的なサーバ構成を示す。詳細には、図5C及び図5Dは、高解像度ディスプレイまたは仮想現実(VR)ディスプレイ(例えば、ヘッドマウントディスプレイ)に表示される合成ビデオフレームを生成するために使用される1つまたは複数の入力フレームバッファを含む図5A-1のスキャンアウトブロック550-A及び/または図5A-2のスキャンアウトブロック550Bの例示的な構成を示す。一実施態様では、入力フレームバッファはハードウェアで実装され得る。
【0081】
図5Cは、高解像度ディスプレイ用の合成ビデオフレームを生成するために使用できる4つの入力フレームバッファを含むスキャンアウトブロック550-A´を示す。純粋に例示だけのために、3つの入力フレームバッファ(例えば、FB0、FB1、及びFB2)は、ビデオゲーム専用であり、ビデオフレーム、UI、eスポーツUI、及びテキスト層のうちの少なくとも1つを含む対応する層を記憶及び/または生成するために使用され得る。ビデオゲームの入力フレームバッファは、ゲーム環境内の1つまたは複数の視点からゲームのレンダリング済みビデオフレームを生成してよい。別の入力フレームバッファFB3は、システム専用であり、フレンド通知などを含むシステムオーバーレイ(例えば、UI)を生成するために使用され得る。
【0082】
図5Dは、VRディスプレイ用の合成ビデオフレームを生成するために使用できる4つの入力フレームバッファを含むスキャンアウトブロック550-A´´を示す。純粋に例示だけのために、2つの入力フレームバッファ(例えば、FB0及びFB1)は、ビデオゲーム専用であり、ゲーム環境、UI、eスポーツUI、及びテキスト層の様々な視点から取得されたビデオフレームの少なくとも1つを含む対応する層を記憶及び/または生成するために使用され得る。別の2つの入力フレームバッファ(FB2及びFB3)はシステム専用であり、フレンド通知やeスポーツUIなどを含むシステムオーバーレイ(例えば、UI)の生成に使用され得る。
【0083】
本開示の実施形態では、サーバにおいて、物理的ディスプレイがサーバに取り付けられていないため、表示要件及び/またはパラメータを考慮せずに、高速及び/または早期のスキャンアウト/スキャンインを実行してよい。詳細には、サーバは、ターゲット仮想ディスプレイに対してスキャンアウト/スキャンインを実行してよく、仮想ディスプレイは、選択された周波数(例えば、93Hz、120Hz)で動作するようにユーザ定義され得る。
【0084】
図2A図2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明とともに、図6のフロー図600は、本開示の一実施形態による、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮するために、高速及び/または早期のスキャンアウト動作を実行し得るクラウドゲームの方法を示す。
【0085】
610において、方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。例えば、サーバは、ストリーミングモードでビデオゲームを実行している場合があり、それによって、ストリーミングに使用できるグラフィックスパイプラインを使用してゲームのレンダリング済みビデオフレームを生成するために、サーバのCPUは、ユーザからの入力コマンド、またはユーザからの制御情報によって駆動されないゲームロジックに部分的に応答してビデオゲームを実行する。
詳細には、GPUグラフィックスパイプラインと連携してビデオゲームを実行するCPUは、複数のビデオフレームを生成するように構成される。クラウドゲームでは、ゲームの生成されたビデオフレームは通常、仮想ディスプレイに表示するためにレンダリングされる。サーバは、ゲームの生成されたビデオフレームのスキャンアウトプロセスで追加動作を実行してよい。例えば、1つまたは複数のオーバーレイは、スキャンアウトプロセス中など、対応するゲームの生成されるビデオフレームに追加され得る。
【0086】
620において、方法では、ビデオフレームの複数のスクリーンスライスをスキャンラインごとに1つまたは複数の入力フレームバッファにスキャンし、複数のスクリーンスライスを修正する1つまたは複数の動作を実行することによってスキャンアウトプロセスを実行する。前述のように、UX特徴(例えば、オーバーレイ)は、1つまたは複数の入力フレームバッファにスキャンされ得る。そのため、1つまたは複数の入力フレームバッファを使用して、ビデオゲームのゲームのレンダリング済みビデオフレームと、(例えば、オーバーレイとして)ユーザインタフェース(UI)、システムUI、テキスト、メッセージングなどの1つまたは複数のオプションのUX特徴とを記憶及び/または生成してよい。スキャンアウトプロセスは、オーバーレイを介して実装されたものなど、1つまたは複数のオプションのUX特徴を含むように合成及びブレンドされた修正済みビデオフレームを生成する。
一実施態様では、前述のように、(例えば、オーバーレイとして)UX特徴が最初に合成され、次に、追加動作が実行される。例えば、追加動作は、DCC圧縮面の解凍、解像度スケーリング、色空間変換、デガンマ、HDR拡張、色域の再マップ、LUT形成、トーンマッピング、ガンマブレンディングなどを含む。別の実施態様では、前述のように、合成とブレンドの前に、各UX特徴に対して追加動作が実行される。
【0087】
630において、修正済みビデオフレームが生成された後、スキャンアウトプロセスにおいて、修正済みビデオフレームの複数のスクリーンスライスが、スキャンラインごとにエンコーダにスキャンされる。そのため、ゲームの生成された修正済みビデオフレーム(例えば、オプションのUX特徴層で修正されたもの)は、クラウドゲームサーバで実行しているビデオゲームを、ネットワークを介してクライアントにストリーミングするときなどに、修正済みビデオフレームをクライアントにストリーミングする準備として、圧縮のためにエンコーダにスキャンされる。
【0088】
詳細には、640において、方法では、スキャンアウトプロセスを早期に開始する。一実施形態では、ゲームの生成されたビデオフレームの複数のスクリーンスライスは、ビデオフレームの対応するフリップ時間に1つまたは複数の入力フレームバッファにスキャンされる。つまり、サーバVSYNC信号の次の発生がスキャンアウトプロセスを開始するのを待つ代わりに、修正済みビデオフレームは、対応する入力フレームバッファに早期に(つまり、次のサーバVSYNC信号の前に)スキャンされる。
フリップ時間は、グラフィックスパイプラインでGPUによって実行されたときに、GPUがコマンドバッファで複数のコマンドの実行を終了しており、ゲームのレンダリング済みビデオフレームがサーバの表示バッファに完全にロードされたことを示すコマンドバッファのコマンドに含められてよい。そのゲームのレンダリング済みビデオフレームは、次に、スキャンアウトプロセス中に対応する入力フレームバッファにスキャンされる。さらに、1つまたは複数のオプションのUX特徴(例えば、オーバーレイ)も、UX特徴用に生成された1つまたは複数の入力フレームバッファに対応するフリップ時間にスキャンされる。
【0089】
別の実施形態では、本開示の一実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするとき、スキャンアウトプロセスが高速で実行される。例えば、スキャンアウトプロセスは、クライアントのターゲットディスプレイに対応する速度/レートで動作し、前述のように、サーバの最大ピクセルクロックとターゲットディスプレイの要求された画像サイズとに基づく。例えば、スキャンアウトプロセスは、ゲームのレンダリング済みビデオフレームと、後に合成される特徴オーバーレイとを受信することを含み、スケーリング、カラースケーリング、ブレンディングなど、追加動作が合成されたビデオフレームに対して実行され得る。
前述のように、スキャンアウトプロセスは、修正済みビデオフレームを速度設定値(例えば、120Hz)に基づくスキャンアウトレートで出力し、速度設定値は、サーバの最大ピクセルクロックとターゲットディスプレイの要求された画像サイズとに基づく。一実施態様では、速度設定値はフレームレートである。したがって、修正済みビデオフレームがエンコーダに出力されるスキャンアウトレートは、ビデオフレームが生成及び/またはエンコードされているレートよりも高くなる可能性がある。
【0090】
各修正済みビデオフレームは、1つまたは複数のエンコーダスライスに分割されてよく、その後、1つまたは複数のエンコード済みスライスとして圧縮される。詳細には、エンコーダは、修正済みビデオフレームを受信し、修正済みビデオフレームをエンコーダでスライスごとにエンコードして、1つまたは複数のエンコード済みスライスを生成する。前述のように、エンコード済みスライスの境界は、単一のスキャンラインに限定されず、単一のスキャンライン、または複数のスキャンラインから構成され得る。さらに、エンコード済みスライスの終了及び/または次のエンコード済みスライスの開始は、必ずしも表示画面の端で発生するわけではない(例えば、画面の中央またはスキャンラインの中央で発生する場合がある)。
一実施形態では、サーバ及びクライアントのVSYNC信号は同期及びオフセットされるので、エンコーダでの動作は重複する可能性がある。詳細には、エンコーダは、修正済みビデオフレームの第1のエンコード済みスライスを生成するように構成され、修正済みビデオフレームは、複数のエンコード済みスライスを含み得る。エンコーダは、修正済みビデオフレームを完全に受信する前に、第1のエンコード済みスライスの圧縮を開始するように構成され得る。
すなわち、第1のエンコード済みスライスは、修正済みビデオフレームの複数のスクリーンスライスを完全に受信する前にエンコード(例えば、圧縮)されてよく、スクリーンスライスは、スキャンラインごとに配信される。いくつかの実施形態では、プロセッサまたはハードウェアの数に応じて、複数のスライスを同時に(例えば、並行して)エンコードすることができる。例えば、一部のゲームコンソールは、4つのエンコード済みスライスを並行して生成することができる。より詳細には、ハードウェアエンコーダは、ハードウェアパイプライン化のために、複数のエンコーダスライスを並行して圧縮するように(例えば、1つまたは複数のエンコード済みスライスを生成するように)構成され得る。
【0091】
図7Aは、本開示の一実施形態による、クラウドゲームサーバで修正済みビデオフレームを生成及び送信するためのプロセスを示し、プロセスは、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮するために、エンコーダへの高速及び/または早期のスキャンアウトを実行するように最適化される。このプロセスは、サーバで追加のUX特徴(例えば、オーバーレイ)を使用して修正された単一の修正済みビデオフレームの生成と送信に関して示されている。
サーバでの動作は、動作401でのゲームのレンダリング済みビデオフレーム490の生成を含む。スキャンアウトプロセス402は、ゲームのレンダリング済みビデオフレーム490をスキャンアウトブロックの1つまたは複数の入力フレームバッファに送って、合成されるオーバーレイを生成する。すなわち、ゲームのレンダリング済みビデオフレーム490は、オプションのUX特徴(例えば、オーバーレイ)と合成される。合成されたビデオフレームに対して追加動作(例えば、ブレンディング、解像度スケーリング、色空間変換など)を実行して、修正済みビデオフレームを生成する(例えば、ゲームのレンダリング済みビデオフレームを追加のUX特徴オーバーレイを使用して修正する)。スキャンアウトプロセスでは、修正済みビデオフレームがエンコーダにスキャンされる。修正済みビデオフレームは、動作403で、エンコーダで、スライスごとにエンコードされて(例えば、圧縮を実行)、エンコード済みビデオフレームにされる。圧縮されたエンコード済みビデオフレームは、動作404でサーバからクライアントに送信される。
【0092】
前述のように、スキャンアウトプロセス402は、サーバVSYNC信号311の発生の前に早期に実行されていることが示されている。通常、スキャンアウトはサーバVSYNC信号が次に発生したときに開始する。一実施形態では、早期スキャンアウトは、フリップ時間701に実行され、フリップ時間は、前述のように、GPUがレンダリング済みフレーム490の生成を終了したときに発生する。
【0093】
早期のスキャンアウトプロセスを実行することにより、残りのサーバ動作(例えば、エンコード、送信など)も早期及び/または重複して開始し得るため、サーバとクライアント間の一方向のレイテンシを短縮し得る。詳細には、追加時間725が、早期スキャンアウトを実行することによって得られ、追加時間は、フリップ時間701とサーバのVSYNC信号の次の発生との間と定義される。その追加時間725は、エンコード403や送信404などの他の動作中に発生した不利なレイテンシの変動を相殺し得る。例えば、エンコードプロセス403がフレーム周期よりも長くかかる場合、そのエンコードプロセス403が早期に開始する(例えば、VSYNC信号で開始するように同期されない)と、得られる追加時間は、次のサーバVSYNC信号の前にビデオフレームがエンコードされるのに十分な場合がある。同様に、早期のスキャンアウト動作を実行することによって得られた追加時間が、ビデオフレームをクライアントに配信するときのレイテンシの変動(例えば、ネットワークを介した配信時間の増加)を短縮するために与えられてよい。
【0094】
図7Bは、本開示の一実施形態による、スキャンアウトプロセスがクラウドゲームサーバで実行されるタイミングを示し、スキャンアウトは高速で実行され、及び/または早期に実行され、それによって、ビデオフレームはスキャンアウトプロセスの終了時に早期にエンコーダにスキャンされて、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮することができる。通常、サーバ上で実行しているアプリケーションプログラム(例えば、ビデオゲーム)は、レンダリングが完了したときに表示バッファの「フリップ」の発生を要求する。フリップは、フレーム周期410中のフリップ時間701にフリップコマンドの実行中に発生し、フリップコマンドは、グラフィックス処理装置(GPU)によって実行される。
フリップコマンドは、アプリケーションの実行時に中央処理装置(CPU)によってコマンドバッファに入れられる複数のコマンドの1つであり、コマンドバッファ内のコマンドは、GPUによって対応するビデオフレームをレンダリングするために使用される。そのため、フリップは、GPUがコマンドバッファ内のコマンドの実行を終了してレンダリング済みビデオフレームを生成し、レンダリング済みビデオフレームがサーバの表示バッファに完全にロードされたことを示す。待機期間725があり、その後、後続のサーバVSYNC信号311fの発生時に、スキャンアウトプロセス402aが実行される。すなわち、典型的なプロセスでは、スキャンアウト402aは、待機期間725の後に実行され、表示バッファ内の修正済みビデオフレーム(例えば、オプションのUX特徴オーバーレイと合成及びブレンドされたゲームのレンダリング済みビデオフレーム)がエンコーダにスキャンされてビデオエンコードを実行する。つまり、スキャンアウトプロセスは通常、待機期間の後に次のVSYNC信号で発生する。これは、事前に表示バッファがいっぱいになっている場合でも同様である。
【0095】
本開示の実施形態は、クラウドゲームアプリケーションなどにおいて、エンコーダへの表示バッファの早期スキャンアウト402bを提供する。図7Bに示すように、スキャンアウトプロセス402bは、次のサーバVSYNC信号311fの発生時の代わりに、フリップ時間701に早期にトリガされる。これにより、エンコーダは、エンコード/圧縮のためにエンコーダに送るためのスキャンアウトを実行するために次のサーバVSYNC信号を待たずに、動作が重複する早期にエンコードを開始することができる。サーバに実際にディスプレイが取り付けられていないため、表示タイミングは影響を受けない。前述のように、複雑なビデオフレームの処理では、クライアントへの配信及び/またはクライアント側での表示の対象となる1つまたは複数のVSYNCが失われる可能性が低いため、早期のエンコードにより、サーバとクライアント間の一方向のレイテンシが短縮される。
【0096】
図7Cは、本開示の一実施形態による、ビデオフレームを早期にエンコーダにスキャンすることにより、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮することができるように、高速でスキャンアウトを実行するための期間を示す。詳細には、スキャンアウトプロセスは、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするときに高速で実行されてよく、スキャンアウトプロセスは、クライアントのターゲットディスプレイに対応する速度/レートで動作し、前述のように、サーバの最大ピクセルクロックとターゲットディスプレイの要求された画像サイズとに基づく。したがって、修正済みビデオフレームがエンコーダに出力されるスキャンアウトレートは、ビデオフレームが生成及び/またはエンコードされているレートよりも高くなる可能性がある。つまり、スキャンアウトレートは、ビデオゲームがビデオフレームを生成しているレートに対応していない場合がある。例えば、スキャンアウトレート(例えば、フレームレート設定)は、サーバでビデオゲームを実行するときにビデオフレームを生成するために使用されるサーバVSYNC信号の周波数よりも高い。
【0097】
別の実施形態では、スキャンアウト速度は、クライアントのディスプレイデバイスのリフレッシュレート(例えば、60Hzなど)に対応していない場合がある。つまり、クライアントのディスプレイデバイスの表示レートとスキャンアウト速度が同じレートでない場合がある。例えば、クライアントのディスプレイデバイスの表示レートは、60Hz、または可変リフレッシュレートなどであってよく、スキャンアウトレートは、異なるレート(例えば、120Hzなど)である。
【0098】
通常、ビデオフレームのスキャンアウトプロセスは、フレーム周期全体(例えば、60Hzで16.6ms)にわたって実行される。例えば、1つの代表的なフレーム周期410が2つのサーバVSYNC信号311cと311dの間に示されている。
本開示の実施形態では、フレーム周期全体にわたってレンダリング済みビデオフレームに対してスキャンアウトプロセスを実行する代わりに、スキャンアウトはより高いレートで実行される。処理フレームのレート(例えば、60Hz)よりも高いレート(例えば、120Hz以上)で(例えば、エンコーダへのスキャンを含む)スキャンアウトプロセスを実行することにより、エンコード403を開始する前にスキャンアウトプロセス402の終了を待つとき、またはスキャンアウト402とエンコード403が重複するときなど、エンコードプロセスを早期に開始することが可能である。例えば、スキャンアウトプロセス402は、全フレーム周期410(例えば、60Hzで16.6ms)よりも短い期間730(例えば、約8ms)にわたって実行することができる。
【0099】
場合によっては、次のサーバVSYNC信号が発生する前など、早期にエンコードを開始することができる。詳細には、エンコーダは、対応する修正済みビデオフレーム(例えば、オーバーレイとして1つまたは複数のオプションのUX特徴を使用して修正されたゲームのレンダリング済みビデオフレーム)からの最小量のデータ(例えば、16または64スキャンライン)がエンコーダに送られるとすぐに処理を開始してよく、その後、追加データがエンコーダに到着するとすぐに追加データを処理する。
複雑なビデオフレームの処理では、クライアントへの配信及び/またはクライアント側での表示の対象となる1つまたは複数のVSYNCが失われる可能性が低くなるため、一方向のレイテンシが短縮される場合がある。一方向のレイテンシは、ネットワークのジッタ及び/またはサーバでの処理時間の増加が原因の場合がある。例えば、大量のデータを含む修正済みビデオフレーム(例えば、シーンの変更)は、エンコードに複数のフレーム周期を要する場合がある。スキャンアウトプロセスが高速になると、エンコードのために残る時間が多くなり、大量のデータを含む修正済みビデオフレームは、クライアントへの配信の対象となるサーバVSYNC信号の前にエンコードプロセスを完了する可能性が高くなる。
【0100】
別の実施形態では、エンコードプロセスは、エンコード解像度をクライアントディスプレイが必要とする解像度に制限することによって、エンコードに最小限の時間を保証するようにさらに最適化されてよく、それによって、クライアントディスプレイが時間内の特定の時点で処理または要求できるよりも高い解像度のビデオフレームをエンコードして時間を無駄にすることがなくなる。
【0101】
図2A図2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260で)の詳細な説明とともに、図8Aのフロー図800Aは、本開示の一実施形態による、クラウドゲームアプリケーションで、クライアントで表示されるビデオをスムーズにし得るクラウドゲームのための方法を示し、サーバでの高速及び/または早期のスキャンアウト動作を実行して、クラウドゲームサーバとクライアント間の一方向のレイテンシを短縮してよい。
【0102】
810において、方法では、サーバでビデオゲームを実行するときにビデオフレームを生成する。例えば、クラウドゲームサーバは、ストリーミングモードでビデオゲームを実行している場合があり、それによって、CPUは、グラフィックスパイプラインを使用してゲームのレンダリング済みビデオフレームを生成するために、ユーザからの入力コマンドに応答してビデオゲームを実行する。
【0103】
サーバは、ゲームの生成されたビデオフレームに対してスキャンアウトプロセスで追加動作を実行してよい。例えば、1つまたは複数のオーバーレイは、スキャンアウトプロセス中などに、対応するゲームの生成されるビデオフレームに追加され得る。
詳細には、方法では、820でスキャンアウトプロセスを実行して、修正済みビデオフレームを生成し、ビデオフレームを圧縮するように構成されたエンコーダに送ることを含む。スキャンアウトプロセスは、1つまたは複数の入力フレームバッファに、ビデオフレームをスキャンラインごとにスキャンし、1つまたは複数のユーザインタフェース特徴をスキャンラインごとにスキャンし、ビデオフレームと、1つまたは複数のユーザインタフェース(UX)特徴とを(例えば、ユーザインタフェース(UI)、システムUI、テキスト、メッセージングなどを含むオーバーレイとして)合成及びブレンドして、修正済みビデオフレームにすることを含み、スキャンアウトプロセスは、ビデオフレームのフリップ時間に開始される。そのため、スキャンアウトプロセスは、オーバーレイを介して実装されたものなど、1つまたは複数のオプションのUX特徴を含むように合成及びブレンドされた修正済みビデオフレームを生成する。
【0104】
830において、方法では、圧縮された修正済みビデオフレームをクライアントに送信する。詳細には、各修正済みビデオフレームは、1つまたは複数のエンコーダスライスに分割されてよく、その後、1つまたは複数のエンコード済みスライスとしてエンコーダによって圧縮される。つまり、エンコーダは修正済みビデオフレームを受信し、修正済みビデオフレームをエンコーダでスライスごとにエンコードして、1つまたは複数のエンコード済みスライスを生成する。次に、これらのスライスはパケット化され、ネットワークを介してクライアントに配信される。
【0105】
840において、方法では、修正済みビデオフレームの目標表示時間をクライアントで決定する。詳細には、サーバ表示バッファのスキャンアウトが、次のサーバVSYNC信号の発生時ではなく、フリップ時間に発生すると、クライアント側の理想的な表示タイミングは、サーバでスキャンアウトが発生した時間と、特定の表示バッファ(例えば、ターゲット表示バッファVSYNC)に関するゲームの意図とに基づいて実行することができる。ゲームの意図は、フレームが次のクライアントVSYNCを対象としていたか、または、ゲームがそのフレームの処理を遅れて実行していたために実際には前のクライアントVSYNCを対象としていたかを決定する。
【0106】
850において、方法では、目標表示時間に基づいて、修正済みビデオフレームの表示時間をクライアントでスケジュールする。フレームをいつ表示するかを選択するためのクライアント側の戦略は、ゲームが固定フレームレートまたは可変フレームレートのどちらで設計されているかと、VSYNCタイミング情報が黙示的であるか明示的であるかとによって決まってよい。これについては、図8Bに関連して以下にさらに説明する。
【0107】
図8Bは、本開示の一実施形態による、サーバ260でビデオゲームの実行中に実行されて、レンダリング済みビデオフレームを生成し、その後、ビデオフレームが表示のためにクライアント210に送信されるサーバ及びクライアント動作のタイミング図を示す。クライアントは、理想的な表示時間を示す及び/または決定するために使用できるサーバで生成されたレンダリング済みビデオフレームのそれぞれに関連付けられた様々なタイミングパラメータを認識しているので、クライアントは1つまたは複数の戦略に基づいてそれらのビデオフレームをいつ表示するかを決定することができる。詳細には、サーバで生成された対応するレンダリング済みビデオフレームの理想的な表示時間は、サーバで実行しているゲームアプリケーションがいつレンダリング済みビデオフレームを表示しようとしているのかを、対象となるサーバVSYNC信号の発生を参照して、示す。対象となるサーバVSYNC信号は、特にサーバとクライアントのVSYNC信号が同期され(例えば、周波数及びタイミング)、適切なオフセットを使用して整合されるときに、対象とするクライアントVSYNC信号に変換することができる。
【0108】
サーバとクライアントのVSYNC信号間の望ましい同期と整合を図8Bに示す。詳細には、サーバえ信号311及びクライアントVSYNC信号312の周波数は、それらが同じ周波数及び対応するフレーム周期を有するように同期される。例えば、サーバVSYNC信号311のフレーム周期410は、クライアントVSYNC信号312のフレーム周期415に実質的に等しい。さらに、サーバ及びクライアントのVSYNC信号は、オフセット430で整合され得る。タイミングオフセットは、受信したビデオフレームの所定の数(例えば、99.99パーセント)がクライアントに到着し、クライアントVSYNC信号の次の適切な発生時に表示されるように、決定され得る。より詳細には、オフセットは、所定の数内で受信され、サーバとクライアント間の一方向のレイテンシの変動が最も大きいビデオフレームが、表示目的のためにクライアントVSYNC信号が次に適切に発生する直前に到着するように、設定される。適切な同期と整合により、サーバとクライアント間で変換できる、サーバで生成されたビデオフレームの理想的な表示時間の使用を可能にする。
【0109】
一実施形態では、タイミングパラメータは、対応するビデオフレームが表示の対象となる理想的な表示時間を含む。理想的な表示時間は、対象となるサーバVSYNC信号の発生を参照することができる。つまり、理想的な表示時間はタイミングパラメータで明示的に提供される。
一実施形態では、タイミングパラメータは、エンコード済みビデオフレームを配信するために使用されるパケットのうちの1つの中の何らかのメカニズムを介してサーバからクライアントに配信することができる。例えば、タイミングパラメータをパケットヘッダに追加することができる、または、タイミングパラメータは、パケットのエンコード済みフレームデータの一部であってよい。別の実施形態では、タイミングパラメータは、GPU APIを使用してデータ制御パケットを送信することによって、サーバからクライアントに配信することができる。GPU APIは、圧縮されたレンダリング済みビデオフレームの送信に使用されるのと同じデータチャネルを介して、サーバからクライアントにデータ制御パケットを送信するように構成され得る。データ制御パケットは、クライアントがどのタイプの情報が含まれているかを理解し、対応するレンダリング済みビデオフレームへの適切な参照を理解するように、フォーマットされる。
一実施態様では、GPU APIに使用される通信プロトコル、データ制御パケットのフォーマットは、ビデオゲームの対応するソフトウェア開発キット(SDK)で定義されてよく、シグナリング情報はデータ制御パケットのクライアント通知などを提供する(例えば、ヘッダで提供される、マーカ付きのデータパケットで提供される等)。一実施態様では、データ制御パケットは最小サイズであるため、エンコードプロセスをバイパスする。
【0110】
別の実施形態では、タイミングパラメータは、前述のように、サーバからクライアントに配信されるフリップ時間及びシミュレーション時間を含む。フリップ時間及びシミュレーション時間は、クライアントによって使用されて、理想的な表示時間を決定することができる。つまり、理想的な表示時間は、タイミングパラメータで黙示的に提供される。タイミングパラメータは、理想的な表示時間を推測するために使用できる他の情報を含み得る。詳細には、フリップ時間は、対応するレンダリング済みビデオフレームが送信及び/または表示の準備ができていることを示す表示バッファのフリップが発生する時を示す。
一実施形態では、スキャンアウト/スキャンインプロセスもまた、フリップ時間の早期に発生する。シミュレーション時間とは、CPU及びGPUパイプラインを介してビデオフレームをレンダリングするのにかかる時間を指す。対応するビデオフレームの理想的な表示時間の決定は、ゲームが固定フレームレートで実行されているか、または可変フレームレートで実行されているかによって異なる。
【0111】
固定フレームレートのゲームの場合、クライアントは、スキャンアウト/スキャンインタイミング(例えば、フリップ時間タイムスタンプ)及び対応するシミュレーション時間から、対象とするVSYNCタイミング情報を黙示的に決定してよい。例えば、サーバは、対応するビデオフレームのスキャンアウト/スキャンイン時間を記録してクライアントに送信する。クライアントは、スキャンアウト/スキャンインのタイミングと、対象となるサーバVSYNC信号の発生時間である対応するシミュレーション時間を推測してよく、これは、対象となるクライアントVSYNC信号の発生時間に変換することができる。クライアントは、ゲームが(例えば、GPU APIを介して)理想的な表示タイミングを提供するとき、対象となるタイミング情報を明示的に決定してもよく、これは、積分VSYNCタイミング(integral VSYNC timing)またはフラクショナルVSYNCタイミング(fractional VSYNC:VSYNCタイミングの端数とも称される)であってもよい。フラクショナルVSYNCタイミングは、フレームの処理時間がフレーム周期を超えたときに実施されてもよく、理想的な表示タイミングは、シミュレーション時間を指定するか、シミュレーション時間に基づき得る。
【0112】
可変フレームレートのゲームの場合、クライアントは、スキャンアウト/スキャンインのタイミングと対応するビデオフレームのシミュレーション時間とから、理想的な目標VSYNCタイミング情報を黙示的に決定してよい。例えば、サーバは、対応するフレームのスキャンアウト時間とシミュレーション時間とを記録してクライアントに送信する。クライアントは、スキャンアウト/スキャンインのタイミングとシミュレーション時間から、対応するビデオフレームを表示するための対象となるサーバVSYNC信号の発生がどれであるかを推測してよく、ここで、対象となるVSYNC信号は、対応する対象となるクライアントVSYNC信号の発生に変換することができる。さらに、ゲームがGPU APIを介して理想的なタイミングを提供するとき、クライアントは対象となるVSYNCタイミング情報を明示的に決定してよい。この場合、分数VSYNCタイミングは、シミュレーション時間や表示時間の提供など、ゲームによって指定され得る。
【0113】
図8Bに示すように、サーバVSYNC信号311及びクライアントVSYNC信号312は、60Hzのタイミングで発生する。サーバVSYNC信号311は、クライアントVSYNC信号312と同期され(例えば、実質的に等しい周波数)、整合される(例えば、オフセットを用いて)。例えば、サーバVSYNC信号の発生は、クライアントVSYNC信号の発生と整合させることができる。詳細には、サーバVSYNC信号311aの発生はクライアントVSYNC信号312aの発生に対応し、サーバVSYNC信号311cはクライアントVSYNC信号312cに対応し、サーバVSYNC信号311dはクライアントVSYNC信号312dに対応し、サーバVSYNC信号311eはクライアントVSYNC信号312eに対応する等である。
【0114】
説明のために、サーバ260は、30Hzで実行しているビデオゲームを実行しており、それによって、レンダリング済みビデオフレームは、(例えば、毎秒30フレーム周期に対応する)30Hzでのフレーム周期(33.33ミリ秒)中に生成される。そのため、ビデオゲームは1秒あたり最大30フレームをレンダリングする可能性がある。対応するビデオフレームの理想的な表示タイミングも示されている。
理想的な表示タイミングは、ビデオフレームを表示するゲームの意図を反映している場合がある。前述のように、理想的な表示タイミングは、各フレームのフリップ時間から決定されてよく、これも示されている。その理想的な表示時間は、クライアントによって使用されて、採用された戦略に応じてビデオフレームをいつ表示するかを決定することができる。これについては、以下に説明する。例えば、ビデオフレームAがレンダリングされ、フリップ時間0.6(例えば、60Hzで0.6/60)で表示する準備ができた。また、ビデオフレームAの理想的な表示タイミングは、サーバVSYNC信号311aの発生時の表示を目標としており、これは、クライアントVSYNC信号312aでクライアントでの表示を目標とすることに変換される。同様に、ビデオフレームBがレンダリングされ、フリップ時間2.1(例えば、60Hzで2.1/60)で表示する準備ができた。
ビデオフレームBの理想的な表示タイミングは、サーバVSYNC信号311cの発生時の表示を目標としており、これは、クライアントVSYNC信号312cでクライアントでの表示を目標とすることに変換される。また、ビデオフレームCがレンダリングされ、フリップ時間4.1(例えば、60Hzで4.1/60)で表示する準備ができた。ビデオフレームCの理想的な表示タイミングは、サーバVSYNC信号311eの発生時の表示を目標としており、これは、クライアントVSYNC信号312eでクライアントでの表示を目標とすることに変換される。また、ビデオフレームDがレンダリングされ、フリップ時間7.3(例えば、60Hzで7.3/60)で表示する準備ができた。ビデオフレームDの理想的な表示タイミングは、サーバVSYNC信号311gの発生時の表示を目標としており、これは、クライアントVSYNC信号312gでクライアントでの表示を目標とすることに変換される。
【0115】
図8Bに示される1つの問題は、ビデオフレームDが生成するのに予想よりも長くかかったため、ビデオフレームDのフリップ時間は、サーバVSYNC信号311gの目標とされた発生の後である7.3で発生する。つまり、サーバ260は、サーバVSYNC信号311gが発生する前に、ビデオフレームDのレンダリングを完了している必要がある。しかしながら、ビデオフレームDの理想的な表示時間は既知であるかまたは決定できるので、サーバがビデオフレームを生成するタイミングを逃したとしても、クライアントは依然として、理想的な表示時間(例えば、サーバVSYNC信号311g)と整合するクライアントVSYNC信号312gの発生時にビデオフレームDを表示することができる。
【0116】
図8Bに示される別の問題は、ビデオフレームB及びビデオフレームCがサーバ260で適切なタイミングで生成される(例えば、異なるサーバVSYNC信号での表示を目標とする)が、送信中に経験する追加のレイテンシのために、ビデオフレームB及びビデオフレームCは同じフレーム周期内にクライアントで受信され、それによって、同じクライアントVSYNC信号312dの発生時に両方がクライアントでの表示の対象となるように見える。例えば、送信が遅延すると、ビデオフレームBとビデオフレームCが同じフレーム周期で到着する。ただし、適切なバッファリングと、ビデオフレームBとCの両方の理想的な表示タイミングが分かっていれば、クライアントは、ゲームの意図に従う、レイテンシを優先する、スムーズさを優先する、または、可変リフレッシュレート表示用にクライアント側のVBI設定を調整するなどを含む、実装されている戦略に応じて、これらのビデオフレームをいつどのように表示するかを決定することができる。
【0117】
例えば、1つの戦略は、サーバでの実行中に決定されたゲームの意図に従うことである。意図は、ビデオフレームA、B、及びCが次のサーバVSYNC信号での表示を対象とするように、対応するビデオフレームのフリップ時間のタイミングから推測され得る。意図は、ビデオフレームDが、たとえそのVSYNC信号の後でレンダリングを終了したとしても、前のサーバVSYNC信号311eでの表示を対象とするように、ビデオゲームによって伝達されるものとして明示的に知られている場合がある。さらに、クライアントに同様に到着する(例えば、同じフレーム周期内に到着する)ビデオフレームB及びCのあいまいさは、ゲームの意図に従うことによって解決される。そのため、適切なバッファリングを使用して、クライアントはビデオフレームを60Hz(各フレームは16.66ms間、表示される)で、A-A-A-B-C-C-D-Dなどの順序で表示してよい。
【0118】
第2の戦略は、フレーム表示のスムーズさよりもレイテンシを優先することであり、それによって、最小限のバッファリング量を使用して、レイテンシを可能な限り短縮することが目標になる。つまり、ビデオフレームは、次のクライアントVSYNC信号で最新の受信ビデオフレームを表示することにより、レイテンシに迅速に対処して表示される。このように、クライアントに同様に到着する(例えば、同じフレーム周期内に到着する)ビデオフレームBとCのあいまいさは、ビデオフレームBをドロップし、次のクライアントVSYNC信号でビデオフレームCだけを表示することによって解決し得る。
これにより、表示されたビデオフレームのシーケンスでビデオフレームBがスキップされるので、表示中のフレームのスムーズさが犠牲になり、視聴者がそれに気付く場合がある。そのため、適切なバッファリングを使用して、クライアントはビデオフレームを60Hz(各フレームは16.66ms間、表示される)で、A-A-A-C-C-C-D-Dなどの順序で表示してよい。
【0119】
第3の戦略は、レイテンシよりもフレーム表示のスムーズさを優先することである。この場合、追加のレイテンシは要因ではなく、適切なバッファリングによって対処することができる。つまり、ビデオフレームは、視聴者に最高の視聴体験を提供する方法で表示される。クライアントは、ターゲットVSYNC間の時間をガイドとして使用する。例えば、Bターゲット312cとCターゲット312eの間の時間は2つのVSYNCであるため、クライアントへのBとCの到着時間に関係なく、Bは2フレームの間表示されるべきである。Cターゲット312eとDターゲット312gの間の時間は2つのVSYNCであるため、クライアントへのCとDの到着時間に関係なく、Cは2フレーム間、表示されるべきである。したがって、適切なバッファリングにより、クライアントは、60Hzで(各フレームは16.66ms間、表示される)A-A-A-B-B-C-C-D-Dなどの順序でビデオフレームを表示してよい。
【0120】
第4の戦略は、可変リフレッシュレートをサポートする表示のためにクライアント側のVBIタイミングを調整することを提供する。すなわち、可変リフレッシュレート表示は、ビデオフレームを表示するときのVBI間隔を増減して、表示のために、クライアントでレンダリングされるビデオフレームを表示するための瞬間的なフレームレートを実装することを可能にする。例えば、クライアントで表示するためにレンダリング済みビデオフレームを各クライアントVSYNC信号で表示すると、遅延したビデオフレームを待つときにビデオフレームを2回表示することが必要な場合があるが、各クライアントVSYNC信号で表示する代わりに、表示のリフレッシュレートは、表示用にレンダリングされるビデオフレームごとに動的に調整され得る。
そのため、ビデオフレームは、クライアントで表示ビデオフレームを受信、デコード、及びレンダリングするときのレイテンシの変動のために調整して表示され得る。図8Bに示す例では、ビデオフレームB及びビデオフレームCは、サーバ260で適切なタイミングで生成される(例えば、異なるサーバVSYNC信号での表示を対象にする)が、送信中に発生する追加のレイテンシのために、ビデオフレームB及びビデオフレームCが同じフレーム周期内にクライアントで受信される。
この場合、ビデオフレームBは、意図されたよりも短い期間(例えば、フレーム周期未満)表示されてよく、それによって、ビデオフレームCは、クライアントが決定し、対象とするクライアントVSYNC信号でレンダリングされ得る。例えば、ビデオフレームCは、対象とするサーバVSYNC信号の発生を有してよく、特に、サーバとクライアントのVSYNC信号が同期され(例えば、周波数及びタイミング)、適切なオフセットを使用して整合されるとき、次に、対象とするクライアントVSYNC信号に変換される。
【0121】
図9は、本開示の様々な実施形態の態様を実行するために使用できる例示的なデバイス900の構成要素を示す。例えば、図9は、本開示の実施形態による、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするとき、修正済みビデオフレームをエンコーダに送るための、高速スキャンアウト動作の実行、または次のシステムVSYNC信号の発生前もしくは対応するビデオフレームのフリップ時間においてなどの早期のスキャンアウトの実行を含む、メディアコンテンツのストリーミング及び/またはストリーミングされたメディアコンテンツの受信に適した例示的なハードウェアシステムを示す。このブロック図は、デバイス900を示し、デバイス900は、パーソナルコンピュータ、サーバコンピュータ、ゲームコンソール、モバイルデバイス、または他のデジタルデバイスを組み込むことができ、これらはそれぞれ、本発明の実施形態の実践に適している。デバイス900は、ソフトウェアアプリケーション及びオプションでオペレーティングシステムを実行するための中央処理装置(CPU)902を含む。CPU902は、1つまたは複数の同種または異種の処理コアで構成され得る。
【0122】
様々な実施形態によれば、CPU902は、1つまたは複数の処理コアを有する1つまたは複数の汎用マイクロプロセッサである。さらなる実施形態は、ゲーム実行中のグラフィックス処理のために構成されたアプリケーションの、媒体及びインタラクティブエンターテインメントアプリケーションなどの高度に並行かつ計算集約的なアプリケーションに特に適合されたマイクロプロセッサアーキテクチャを有する1つまたは複数のCPUを使用して、実装することができる。
【0123】
メモリ904は、CPU902及びGPU916が使用するアプリケーション及びデータを記憶する。ストレージ906は、アプリケーション及びデータ用の不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、かつ、固定ディスクドライブ、取り外し可能ディスクドライブ、フラッシュメモリデバイス、及びCD-ROM、DVD-ROM、Blu-ray(登録商標)、HD-DVD、または他の光学記憶デバイス、ならびに信号伝送及び記憶媒体を含み得る。ユーザ入力デバイス908は、1人または複数のユーザからのユーザ入力をデバイス900に伝達し、ユーザ入力デバイス908の例は、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルもしくはビデオレコーダ/カメラ、及び/またはマイクロフォンを含み得る。
ネットワークインタフェース909は、デバイス900が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどの広域ネットワークにわたる有線または無線通信を含み得る。オーディオプロセッサ912は、CPU902、メモリ904、及び/またはストレージ906により提供される命令及び/またはデータから、アナログまたはデジタルのオーディオ出力を生成するように適合される。CPU902、GPU916及びGPUキャッシュ918を含むグラフィックスサブシステム914、メモリ904、データストレージ906、ユーザ入力デバイス908、ネットワークインタフェース909、並びにオーディオプロセッサ912を含むデバイス900の構成要素は、1つまたは複数のデータバス922を介して接続される。
【0124】
グラフィックスサブシステム914は、データバス922及びデバイス900の構成要素とさらに接続されている。グラフィックスサブシステム914は、グラフィックス処理装置(GPU)916とグラフィックスメモリ918とを含む。グラフィックスメモリ918は、出力画像の各画素の画素データを記憶するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックスメモリ918は、GPU916と同じデバイスに統合することができ、GPU916と別個のデバイスとして接続することができ、及び/またはメモリ904内に実装することもできる。
画素データは、CPU902から直接、グラフィックスメモリ918に提供することができる。あるいは、CPU902は、所望の出力画像を定義するデータ及び/または命令をGPU916に提供し、これに基づいて、GPU916は、1つまたは複数の出力画像の画素データを生成する。所望の出力画像を定義するデータ及び/または命令は、メモリ904及び/またはグラフィックスメモリ918に記憶することができる。ある実施形態では、GPU916は、シーンの幾何学的形状、ライティング、シェーディング、テクスチャリング、モーション、及び/またはカメラパラメータを定義する命令及びデータから、出力画像の画素データを生成する3Dレンダリング機能を含む。GPU916はさらに、シェーダプログラムを実行することができる1つまたは複数のプログラム可能実行ユニットを含み得る。
【0125】
グラフィックスサブシステム914は、ディスプレイデバイス910に表示されるように、または投影システム(図示せず)によって投影されるように、グラフィックスメモリ918から画像用の画素データを定期的に出力する。ディスプレイデバイス910は、デバイス900からの信号に応答して、視覚情報を表示することができる、CRT、LCD、プラズマ、及びOLEDディスプレイを含む任意のデバイスであってよい。デバイス900は、ディスプレイデバイス910に、例えばアナログ信号またはデジタル信号を提供することができる。
【0126】
グラフィックスサブシステム914を最適化するための他の実施形態は、GPUインスタンスが複数のアプリケーション間で共有されるマルチテナンシGPU動作、及び単一のゲームをサポートする分散GPUを含み得る。グラフィックスサブシステム914は、1つまたは複数の処理デバイスとして構成することができる。
【0127】
例えば、一実施形態では、グラフィックスサブシステム914は、マルチテナンシGPU機能を実行するように構成されてよく、1つのグラフィックスサブシステムは、複数のゲームのためのグラフィックス及び/またはレンダリングパイプラインを実装することができる。つまり、グラフィックスサブシステム914は、実行されている複数のゲーム間で共有される。
【0128】
他の実施形態では、グラフィックスサブシステム914は、対応する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のそれぞれを、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。上記の実施形態及び実施態様では、これらの動作は、同じフレーム周期で(同時に並行して)、または異なるフレーム周期で(順次、並行して)実行することができる。
【0129】
したがって、本開示は、クラウドゲームサーバで実行しているビデオゲームからコンテンツを、ネットワークを介してストリーミングするとき、修正済みビデオフレームをエンコーダに送るための、高速スキャンアウト動作の実行、または次のシステムVSYNC信号の発生前もしくは対応するビデオフレームのフリップ時間においてなどの早期のスキャンアウトの実行を含む、メディアコンテンツをストリーミングするために、及び/またはストリーミングされたメディアコンテンツを受信するために構成された方法及びシステムを記載する。
【0130】
当然ながら、本明細書で定義される様々な実施形態は、本明細書に開示される様々な特徴を使用して、特定の実施態様に組み合わせられてよい、または集められてよい。したがって、提供される例は、いくつかの可能な例にすぎず、より多くの実施態様を定義するために様々な要素を組み合わせることによって可能になる様々な実施態様に限定されない。ある例では、ある実施態様は、開示されたまたは同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0131】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な家電製品、ミニコンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実践され得る。本開示の実施形態はまた、有線ベースまたは無線ネットワークを介してリンクされる遠隔処理デバイスによりタスクが行われる分散コンピューティング環境においても実践することができる。
【0132】
上記の実施形態を念頭におくと、当然ながら、本開示の実施形態は、コンピュータシステムに記憶されたデータを含む様々なコンピュータ実装の動作を使用することができる。これらの動作は、物理量の物理的操作を要する動作である。本開示の実施形態の一部を形成する、本明細書で説明される動作のうちのいずれも、有用な機械動作である。開示の実施形態はまた、これら動作を実行するためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築することができる。または、装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータであってもよい。詳細には、本明細書の教示に従って書かれたコンピュータプログラムと共に様々な汎用マシンを使用することができる、あるいは、必要な動作を実行するためにさらに特化した装置を構築するほうがより好都合な場合もある。
【0133】
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとしても具現化することができる。コンピュータ可読媒体は、データを記憶できる任意のデータストレージデバイスであり、データは後にコンピュータシステムにより読み出すことができる。コンピュータ可読媒体の例は、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスを含む。コンピュータ可読媒体は、コンピュータ可読コードが分散方式で記憶及び実行されるように、ネットワーク結合されたコンピュータシステムにわたって分散されたコンピュータ可読有形媒体を含み得る。
【0134】
方法の動作を特定の順序で記載したが、当然ながら、オーバーレイ動作の処理が所望の方法で実行される限り、動作間に他のハウスキーピング動作が実行され得る、または動作がわずかに異なる時間に生じるように動作が調整され得る、またはシステム内に動作を分散することで、処理に関連する様々な間隔で処理動作が起こることを可能にしてよい。
【0135】
上記開示は、理解を明確にするためにある程度詳細に記載したが、当然ながら、添付の特許請求の範囲内で一定の変更及び修正を実施できる。したがって、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に提供される詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で変更され得る。
図1A
図1B
図2A
図2B
図2C
図2D
図3
図4
図5A-1】
図5A-2】
図5B-1】
図5B-2】
図5B-3】
図5C
図5D
図6
図7A
図7B
図7C
図8A
図8B
図9