(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-22
(45)【発行日】2024-01-30
(54)【発明の名称】ハイブリッドストリーミング
(51)【国際特許分類】
H04N 21/431 20110101AFI20240123BHJP
G06T 19/00 20110101ALI20240123BHJP
H04N 21/435 20110101ALI20240123BHJP
H04N 21/44 20110101ALI20240123BHJP
【FI】
H04N21/431
G06T19/00 A
H04N21/435
H04N21/44
(21)【出願番号】P 2022530272
(86)(22)【出願日】2019-12-06
(86)【国際出願番号】 US2019065097
(87)【国際公開番号】W WO2021112882
(87)【国際公開日】2021-06-10
【審査請求日】2022-07-12
(32)【優先日】2019-12-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520317055
【氏名又は名称】ロブロックス・コーポレーション
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】チェタン・アフジャ
(72)【発明者】
【氏名】ダニエル・ジー・ゲルブ
(72)【発明者】
【氏名】アンジェロ・ペッシェ
(72)【発明者】
【氏名】アダム・ミラー
【審査官】醍醐 一貴
(56)【参考文献】
【文献】特開2018-077555(JP,A)
【文献】米国特許出願公開第2002/0147987(US,A1)
【文献】米国特許出願公開第2001/0043738(US,A1)
【文献】米国特許第08872813(US,B2)
【文献】国際公開第2017/171005(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 21/00-21/858
G06T 19/00-19/20
A63F 13/30
A63F 13/52
A63F 13/60
(57)【特許請求の範囲】
【請求項1】
クライアントデバイスにおいて、前記クライアントデバイスに関連付けられた特定のバンテージポイントから見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信するステップであって、前記バックグラウンドビデオが、サーバ上でレンダリングされる、ステップと、
前記クライアントデバイスを使用して、少なくとも部分的に前記仮想環境のフォアグラウンド部分にある1つまたは複数
のオブジェクトをレンダリングするステップと、
前記クライアントデバイスを使用して、前記クライアントデバイスの現在のビューポイントと整合するように、前記受信したバックグラウンドビデオをワーピングするステップと、
前記クライアントデバイスを使用して、前記
ワーピングされたバックグラウンドビデオの少なくとも一部分と、前記1つまたは複数
のオブジェクトのうちの少なくとも1つとを
、前記現在のビューポイントと整合するコンポジットビデオに合成するステップと、
前記コンポジットビデオを出力するステップと
を含む方法。
【請求項2】
前記バックグラウンドビデオが、前記クライアントデバイスに関連付けられた前記特定のバンテージポイントの位置
における前記仮想環境のパノラマビューを含む、請求項1に記載の方法。
【請求項3】
前記バックグラウンドビデオが、3次元シーンをマッピングするためのカラーマップ情報を含む、請求項1に記載の方法。
【請求項4】
前記サーバから、前記バックグラウンドビデオに対応する補足データを受信するステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記補足データが、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含む、請求項4に記載の方法。
【請求項6】
前記合成するステップが、前記1つまたは複数
のオブジェクトを前記
ワーピングされたバックグラウンドビデオの上にオーバーレイするステップを含み、
前記方法が、前記1つまたは複数
のオブジェクトの前方あるいは前記1つまたは複数
のオブジェクトの後方にある前記バックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用するステップをさらに含む、請求項1に記載の方法。
【請求項7】
前記特定のバンテージポイントから見たビューを、カメラの位置に応じて変化した前記クライアントデバイスの前記現在のビューポイントと
整合させるためにジオメトリ情報において深度
が使用
される、請求項1に記載の方法。
【請求項8】
前記合成するステップが、それぞれの異なる距離に対応するパノラマ画像の複数のレイヤを使用して視差効果を生成するステップを含む、請求項7に記載の方法。
【請求項9】
前記コンポジットビデオを生成するステップが、前記バックグラウンドビデオ内の1つまたは複数のロケーションに対する前記1つまたは複数
のオブジェクトの配置を決定するために深度情報を使用するステップを含む、請求項1に記載の方法。
【請求項10】
ハイブリッドビデオストリーミングを実施するためのデバイスであって、前記デバイスが、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合され、命令を記憶したメモリと
を備え、前記命令は、実行されると前記1つまたは複数のプロセッサに動作を実施させ、前記動作が、
クライアントデバイスに関連付けられた特定のバンテージポイントから見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信することであって、前記バックグラウンドビデオが、サーバ上でレンダリングされる、受信することと、
少なくとも部分的に前記仮想環境のフォアグラウンド部分にある1つまたは複数
のオブジェクトをレンダリングすることと、
前記クライアントデバイスの現在のビューポイントと整合するように、前記受信したバックグラウンドビデオをワーピングすることと、
前記
ワーピングされたバックグラウンドビデオの少なくとも一部分と、前記1つまたは複数
のオブジェクトのうちの少なくとも1つとを
、前記現在のビューポイントと整合するコンポジットビデオに合成することと、
前記コンポジットビデオを出力することと
を含む、デバイス。
【請求項11】
前記バックグラウンドビデオが、前記クライアントデバイスに関連付けられた前記特定のバンテージポイントの位置
における前記仮想環境のパノラマビューを含む、請求項10に記載のデバイス。
【請求項12】
前記バックグラウンドビデオが、3次元シーンをマッピングするためのカラーマップ情報を含む、請求項10に記載のデバイス。
【請求項13】
前記動作が、前記サーバから、前記バックグラウンドビデオに対応する補足データを受信することをさらに含み、
前記補足データが、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含む、請求項10に記載のデバイス。
【請求項14】
前記合成することが、前記1つまたは複数
のオブジェクトを前記
ワーピングされたバックグラウンドビデオの上にオーバーレイすることを含み、
前記動作が、前記1つまたは複数
のオブジェクトの前方あるいは前記1つまたは複数
のオブジェクトの後方にある前記バックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用することをさらに含む、請求項10に記載のデバイス。
【請求項15】
前記合成することが、
前記特定のバンテージポイントから見たビューを、カメラの位置に応じて変化した前記クライアントデバイスの前記現在のビューポイントと
整合させるためにジオメトリ情報において深度を使用することを含む、請求項10に記載のデバイス。
【請求項16】
前記コンポジットビデオを生成することが、前記バックグラウンドビデオ内の1つまたは複数のロケーションに対する前記1つまたは複数
のオブジェクトの配置を決定するために深度情報を使用することを含む、請求項10に記載のデバイス。
【請求項17】
処理デバイスによる実行に応答して、前記処理デバイスに動作を実施させる命令を記憶した非一時的コンピュータ可読記録媒体であって、前記動作が、
クライアントデバイスに関連付けられた特定のバンテージポイントから見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信することであって、前記バックグラウンドビデオが、サーバ上でレンダリングされる、受信することと、
少なくとも部分的に前記仮想環境のフォアグラウンド部分にある1つまたは複数
のオブジェクトをレンダリングすることと、
前記クライアントデバイスの現在のビューポイントと整合するように、前記受信したバックグラウンドビデオをワーピングすることと、
前記
ワーピングされたバックグラウンドビデオの少なくとも一部分と、前記1つまたは複数
のオブジェクトのうちの少なくとも1つとを
、前記現在のビューポイントと整合するコンポジットビデオに合成することと、
前記コンポジットビデオを出力することと
を含む、非一時的コンピュータ可読記録媒体。
【請求項18】
前記バックグラウンドビデオが、前記クライアントデバイスに関連付けられた前記特定のバンテージポイントの位置
における前記仮想環境のパノラマビューを含む、請求項17に記載の非一時的コンピュータ可読記録媒体。
【請求項19】
前記バックグラウンドビデオが、3次元シーンをマッピングするためのカラーマップ情報を含む、請求項17に記載の非一時的コンピュータ可読記録媒体。
【請求項20】
前記動作が、前記サーバから、前記バックグラウンドビデオに対応する補足データを受信することをさらに含み、
前記補足データが、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含み、
前記合成することが、前記1つまたは複数
のオブジェクトを前記バックグラウンドビデオの上にオーバーレイすることを含み、
前記動作が、前記1つまたは複数
のオブジェクトの前方あるいは前記1つまたは複数
のオブジェクトの後方にある前記バックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用することをさらに含む、請求項17に記載の非一時的コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
実施形態は、一般にインタラクティブメディアシステムに関し、より詳細には、限定はしないが、コンピュータ生成のビデオなどのメディアコンテンツのハイブリッドストリーミングのための方法、システムおよびコンピュータ可読媒体に関する。
【背景技術】
【0002】
オンラインゲーミングなどのいくつかのインタラクティブメディアシステムは、サーバがレンダリングのための計算能力を有することができるが、ネットワーク接続に起因するラグ(または時間遅延)を起こしやすいことがある、クライアント-サーバアーキテクチャと、ラグをもたないことができるが、サーバのコンピューティングリソースを欠いている、クライアントデバイスとを伴う。
【0003】
いくつかのコンピュータベースのゲームは、3次元の外観を有するビデオを含み、ここで、ビデオは、バックグラウンドイメージと、3次元においてレンダリングされた1つまたは複数のフォアグラウンドオブジェクトとを含む。ラグなしの動きを提示するためにフォアグラウンドオブジェクトの変化に応答している間にレンダリングを実施するためのコンピューティングリソースに対する必要性が存在し得る。数ある中でも、上述の必要性に照らして、いくつかの実装形態が想到された。
【発明の概要】
【課題を解決するための手段】
【0004】
いくつかの実装形態は、方法を含むことができる。方法は、クライアントデバイスにおいて、クライアントデバイスに関連付けられた特定のバンテージポイント(vantage point)から見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信するステップであって、バックグラウンドビデオが、サーバ上でレンダリングされる、ステップと、クライアントデバイスを使用して、少なくとも部分的に仮想環境のフォアグラウンド部分にある1つまたは複数のレンダリングされたオブジェクトをレンダリングするステップとを含むことができる。方法はまた、クライアントデバイスを使用して、バックグラウンドビデオの少なくとも一部分および1つまたは複数のレンダリングされたオブジェクトのうちの少なくとも1つをコンポジットビデオに合成するステップと、コンポジットビデオを出力するステップとを含むことができる。
【0005】
いくつかの実装形態では、バックグラウンドビデオは、クライアントデバイスに関連付けられた特定のバンテージポイントの位置の近くに仮想環境のパノラマビューを含むことができる。いくつかの実装形態では、バックグラウンドビデオは、3次元シーンをマッピングするためのカラーマップ情報を含む。
【0006】
方法はまた、サーバから、バックグラウンドビデオに対応する補足データを受信するステップを含むことができる。いくつかの実装形態では、補足データは、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含むことができる。いくつかの実装形態では、合成するステップは、1つまたは複数のレンダリングされたオブジェクトをバックグラウンドビデオの上にオーバーレイするステップを含むことができ、方法は、1つまたは複数のレンダリングされたオブジェクトの前方あるいは1つまたは複数のレンダリングされたオブジェクトの後方にあるバックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用するステップをさらに含むことができる。いくつかの実装形態では、合成するステップは、現在のビューポイントと一致させるためにジオメトリ情報において深度を使用するステップを含むことができる。
【0007】
いくつかの実装形態では、合成するステップは、それぞれの異なる距離に対応するパノラマ画像の複数のレイヤを使用して視差効果を生成するステップを含むことができる。いくつかの実装形態では、コンポジットビデオを生成するステップは、バックグラウンドビデオ内の1つまたは複数のロケーションに対する1つまたは複数のレンダリングされたオブジェクトの配置を決定するために深度情報を使用するステップを含む。
【0008】
いくつかの実装形態は、ハイブリッドビデオストリーミングを実施するためのデバイスを含むことができ、デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されるときに動作を実施するための命令が記憶されている、1つまたは複数のプロセッサに結合されたメモリとを含むことができる。動作は、クライアントデバイスにおいて、クライアントデバイスに関連付けられた特定のバンテージポイントから見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信することであって、バックグラウンドビデオが、サーバ上でレンダリングされる、受信することと、クライアントデバイスを使用して、少なくとも部分的に仮想環境のフォアグラウンド部分にある1つまたは複数のレンダリングされたオブジェクトをレンダリングすることとを含むことができる。動作はまた、クライアントデバイスを使用して、バックグラウンドビデオの少なくとも一部分および1つまたは複数のレンダリングされたオブジェクトのうちの少なくとも1つをコンポジットビデオに合成することと、コンポジットビデオを出力することとを含むことができる。
【0009】
いくつかの実装形態では、バックグラウンドビデオは、クライアントデバイスに関連付けられた特定のバンテージポイントの位置の近くに仮想環境のパノラマビューを含むことができる。いくつかの実装形態では、バックグラウンドビデオは、3次元シーンをマッピングするためのカラーマップ情報を含む。
【0010】
動作はまた、サーバから、バックグラウンドビデオに対応する補足データを受信することを含むことができる。いくつかの実装形態では、補足データは、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含むことができる。いくつかの実装形態では、合成することは、1つまたは複数のレンダリングされたオブジェクトをバックグラウンドビデオの上にオーバーレイすることを含むことができ、動作は、1つまたは複数のレンダリングされたオブジェクトの前方あるいは1つまたは複数のレンダリングされたオブジェクトの後方にあるバックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用することをさらに含むことができる。いくつかの実装形態では、合成することは、現在のビューポイントと一致させるためにジオメトリ情報において深度を使用することを含むことができる。
【0011】
いくつかの実装形態では、合成することは、それぞれの異なる距離に対応するパノラマ画像の複数のレイヤを使用して視差効果を生成することを含むことができる。いくつかの実装形態では、コンポジットビデオを生成することは、バックグラウンドビデオ内の1つまたは複数のロケーションに対する1つまたは複数のレンダリングされたオブジェクトの配置を決定するために深度情報を使用することを含む。
【0012】
いくつかの実装形態は、処理デバイスによる実行に応答して、処理デバイスに動作を実施させる命令を備える非一時的コンピュータ可読媒体を含むことができる。動作は、クライアントデバイスにおいて、クライアントデバイスに関連付けられた特定のバンテージポイントから見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信することであって、バックグラウンドビデオが、サーバ上でレンダリングされる、受信することと、クライアントデバイスを使用して、少なくとも部分的に仮想環境のフォアグラウンド部分にある1つまたは複数のレンダリングされたオブジェクトをレンダリングすることとを含むことができる。動作はまた、クライアントデバイスを使用して、バックグラウンドビデオの少なくとも一部分および1つまたは複数のレンダリングされたオブジェクトのうちの少なくとも1つをコンポジットビデオに合成することと、コンポジットビデオを出力することとを含むことができる。
【0013】
いくつかの実装形態では、バックグラウンドビデオは、クライアントデバイスに関連付けられた特定のバンテージポイントの位置の近くに仮想環境のパノラマビューを含むことができる。いくつかの実装形態では、バックグラウンドビデオは、3次元シーンをマッピングするためのカラーマップ情報を含む。
【0014】
動作はまた、サーバから、バックグラウンドビデオに対応する補足データを受信することを含むことができる。いくつかの実装形態では、補足データは、深度バッファまたは3次元ジオメトリ情報のうちの1つまたは複数からのデータを含むことができる。いくつかの実装形態では、合成することは、1つまたは複数のレンダリングされたオブジェクトをバックグラウンドビデオの上にオーバーレイすることを含むことができ、動作は、1つまたは複数のレンダリングされたオブジェクトの前方あるいは1つまたは複数のレンダリングされたオブジェクトの後方にあるバックグラウンドビデオの部分を決定するために深度およびジオメトリ情報を使用することをさらに含むことができる。いくつかの実装形態では、合成することは、現在のビューポイントと一致させるためにジオメトリ情報において深度を使用することを含むことができる。
【0015】
いくつかの実装形態では、合成することは、それぞれの異なる距離に対応するパノラマ画像の複数のレイヤを使用して視差効果を生成することを含むことができる。いくつかの実装形態では、コンポジットビデオを生成することは、バックグラウンドビデオ内の1つまたは複数のロケーションに対する1つまたは複数のレンダリングされたオブジェクトの配置を決定するために深度情報を使用することを含む。
【図面の簡単な説明】
【0016】
【
図1】いくつかの実装形態による、オンラインゲーミングのための例示的なシステムアーキテクチャの図である。
【
図2】いくつかの実装形態による、ハイブリッドビデオストリーミングのための例示的な方法のフローチャートである。
【
図3】いくつかの実装形態による、サーバからクライアントにバックグラウンドビデオを提供するための方法のフローチャートである。
【
図4】いくつかの実装形態による、クライアントデバイスにおいてレンダリングされた1つまたは複数の3次元オブジェクトとクライアントデバイスにおいて合成される、サーバからのバックグラウンドビデオを示す図である。
【
図5A】いくつかの実装形態による、あるタイプのパノラマシーン配信フォーマットのビューを示す図である。
【
図5B】いくつかの実装形態による、別のタイプのパノラマシーン配信フォーマットのビューを示す図である。
【
図6A】いくつかの実装形態による、クライアントデバイスの現在の視点からのサーバデバイス上でレンダリングされたバックグラウンドビデオフレームを示す図である。
【
図6B】いくつかの実装形態による、クライアントにおいてレンダリングされかつ
図6Aのバックグラウンドフレームと合成された3次元オブジェクトのビデオフレームを示す図である。
【
図7A】いくつかの実装形態によるビデオフレームを示す図である。
【
図7B】いくつかの実装形態による対応する深度マップを示す図である。
【
図8A】いくつかの実装形態による深度ベースのビュー投影を示す図である。
【
図8B】いくつかの実装形態による深度ベースのビュー再投影を示す図である。
【
図9】いくつかの実装形態による例示的なコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【0017】
以下の発明を実施するための形態では、本明細書の一部分を形成する添付の図面が参照される。図面では、文脈が別段に規定しない限り、同様の記号は通常、同様のコンポーネントを識別する。発明を実施するための形態、図面、および特許請求の範囲で説明される例示的な実施形態は、限定的であることは意図されていない。本明細書で提示される主題の趣旨または範囲から逸脱することなく、他の実施形態が利用されてもよく、他の変更がなされてもよい。本明細書で概して説明され、図に示されるような本開示の態様は、多種多様な異なる構成で配置され、置換され、組み合わされ、分離され、設計され得、それらの構成のすべては、本明細書で企図される。
【0018】
オンラインゲーミングプラットフォーム(「ユーザ生成のコンテンツプラットフォーム」または「ユーザ生成のコンテンツシステム」を含むことができる)などのインタラクティブメディアアプリケーションまたはシステムは、ユーザが互いと対話するための様々な方法を提供することができる。たとえば、オンラインゲーミングプラットフォームのユーザは、共通の目的に向かって協力する、様々な仮想ゲーミングアイテムを共有する、電子メッセージを互いに送る、などを行ってもよい。オンラインゲーミングプラットフォームのユーザは、キャラクターを使用してゲームをプレイしてもよい。
【0019】
オンラインゲーミングプラットフォームはまた、プラットフォームのユーザが新しいキャラクターおよびアバターを作成し、アニメーション化することを可能にし得る。たとえば、オンラインゲーミングプラットフォームのユーザは、新しいキャラクターを作成し、設計し、カスタマイズすることを許可され得る。
【0020】
図1:システムアーキテクチャ
図1は、本開示のいくつかの実装形態による例示的なシステムアーキテクチャ100を示す。システムアーキテクチャ100(本明細書では「システム」とも呼ばれる)は、オンラインゲーミングプラットフォーム102と、第1のクライアントデバイス110(本明細書では一般に「クライアントデバイス110」と呼ばれる)と、ネットワーク122と、少なくとも1つの第2のクライアントデバイス116とを含む。オンラインゲーミングプラットフォーム102は、数ある中でも、ゲームエンジン104と、1つまたは複数のゲーム105と、グラフィックスモジュール106と、ハイブリッドストリーミングモジュール107と、データストア108とを含むことができる。クライアントデバイス110は、ゲームアプリケーション112と、ユーザインターフェース114(たとえば、オーディオ/ビデオ入力/出力デバイス)と、ハイブリッドストリーミングモジュール115とを含むことができる。クライアントデバイス116は、ゲームアプリケーション118と、ユーザインターフェース120(たとえば、オーディオ/ビデオ入力/出力デバイス)と、ハイブリッドストリーミングモジュール121とを含むことができる。ハイブリッドストリーミングモジュール115および121は、別個であり得るか、または(それぞれ)ゲームアプリケーション(112および118)と統合され得る。オンラインゲーミングプラットフォーム102内のハイブリッドストリーミングモジュール107は、別個のモジュールであり得るか、またはグラフィックスモジュール106などの別のモジュールに組み込まれ得る。オーディオ/ビデオ入力/出力デバイスは、マイクロフォン、スピーカー、ヘッドフォン、ディスプレイデバイスなどのうちの1つまたは複数を含むことができる。
【0021】
システムアーキテクチャ100は、限定ではなく、例示のために提供される。いくつかの実装形態では、システムアーキテクチャ100は、
図1に示される要素と同じ方式または異なる方式で構成された、同じ要素、より少ない要素、より多い要素、または異なる要素を含み得る。
【0022】
1つの実装形態では、ネットワーク122は、パブリックネットワーク(たとえば、インターネット)、プライベートネットワーク(たとえば、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN))、ワイヤードネットワーク(たとえば、イーサネットネットワーク)、ワイヤレスネットワーク(たとえば、802.11ネットワーク、Wi-Fi(登録商標)ネットワーク、またはワイヤレスLAN(WLAN))、セルラーネットワーク(たとえば、ロングタームエボリューション(LTE)ネットワーク)、ルータ、ハブ、スイッチ、サーバコンピュータ、またはそれらの組合せを含み得る。
【0023】
1つの実装形態では、データストア108は、非一時的コンピュータ可読メモリ(たとえば、ランダムアクセスメモリ)、キャッシュ、ドライブ(たとえば、ハードドライブ)、フラッシュドライブ、データベースシステム、またはデータを記憶することが可能な別のタイプのコンポーネントもしくはデバイスであり得る。データストア108はまた、複数のコンピューティングデバイス(たとえば、複数のサーバコンピュータ)にまたがることもある複数のストレージコンポーネント(たとえば、複数のドライブまたは複数のデータベース)を含み得る。
【0024】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、1つまたは複数のコンピューティングデバイス(たとえば、クラウドコンピューティングシステム、ラックマウントサーバ、サーバコンピュータ、物理サーバのクラスタなど)を有するサーバを含むことができる。いくつかの実装形態では、サーバは、オンラインゲーミングプラットフォーム102に含まれ得るか、独立したシステムであり得るか、または別のシステムもしくはプラットフォームの一部であり得る。
【0025】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、オンラインゲーミングプラットフォーム102上で動作を実施するために、かつオンラインゲーミングプラットフォーム102へのアクセスをユーザに提供するために使用され得る、(ラックマウントサーバ、ルータコンピュータ、サーバコンピュータ、パーソナルコンピュータ、メインフレームコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、デスクトップコンピュータなどの)1つもしくは複数のコンピューティングデバイス、データストア(たとえば、ハードディスク、メモリ、データベース)、ネットワーク、ソフトウェアコンポーネント、および/またはハードウェアコンポーネントを含み得る。オンラインゲーミングプラットフォーム102はまた、オンラインゲーミングプラットフォーム102によって提供されるコンテンツへのアクセスをユーザに提供するために使用され得る、ウェブサイト(たとえば、ウェブページ)またはアプリケーションバックエンドソフトウェアを含み得る。たとえば、ユーザは、クライアントデバイス110上のゲームアプリケーション112を使用してオンラインゲーミングプラットフォーム102にアクセスし得る。
【0026】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、ユーザ間の接続を提供するあるタイプのソーシャルネットワーク、またはユーザ(たとえば、エンドユーザまたは消費者)がオンラインゲーミングプラットフォーム102上で他のユーザと通信することを可能にするあるタイプのユーザ生成のコンテンツシステムを含み得、ここで、通信は、音声チャット(たとえば、同期および/または非同期音声通信)、ビデオチャット(たとえば、同期および/または非同期ビデオ通信)、またはテキストチャット(たとえば、同期および/または非同期テキストベース通信)を含み得る。本開示のいくつかの実装形態では、「ユーザ」は1人の個人として表され得る。しかしながら、本開示の他の実装形態は、一連のユーザまたは自動化されたソースによって制御されるエンティティである「ユーザ」(たとえば、作成ユーザ)を包含する。たとえば、ユーザ生成のコンテンツシステム内のコミュニティまたはグループとして連合された一連の個人ユーザは、「ユーザ」と見なされ得る。
【0027】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は仮想ゲーミングプラットフォームであり得る。たとえば、ゲーミングプラットフォームは、ネットワーク122を介してクライアントデバイス110を使用してゲームにアクセスし得るかまたはゲームと対話し得るユーザのコミュニティにシングルプレイヤゲームまたはマルチプレイヤゲームを提供し得る。いくつかの実装形態では、ゲーム(本明細書では「ビデオゲーム」、「オンラインゲーム」、または「仮想ゲーム」とも呼ばれる)は、たとえば、2次元(2D)ゲーム、3次元(3D)ゲーム(たとえば、ユーザ生成の3Dゲーム)、仮想現実(VR)ゲーム、または拡張現実(AR)ゲームであり得る。いくつかの実装形態では、ユーザは、他のユーザと共にゲームプレイに参加し得る。いくつかの実装形態では、ゲームは、そのゲームの他のユーザと共にリアルタイムでプレイされ得る。
【0028】
いくつかの実装形態では、ゲームプレイは、ゲーム(たとえば、105)内のクライアントデバイス(たとえば、110および/もしくは116)を使用する1人もしくは複数のプレイヤの対話、またはクライアントデバイス110もしくは116のディスプレイもしくは他のユーザインターフェース(たとえば、114/120)上での対話の提示を指すことがある。
【0029】
いくつかの実装形態では、ゲーム105は、ゲームコンテンツ(たとえば、デジタルメディアアイテム)をエンティティに提示するように構成されたソフトウェア、ファームウェアまたはハードウェアを使用して実行またはロードされ得る電子ファイルを含むことができる。いくつかの実装形態では、ゲームアプリケーション112が実行され得、ゲームエンジン104に関連してゲーム105がレンダリングされ得る。いくつかの実装形態では、ゲーム105は共通の一連の規則または共通の目的を有してもよく、ゲーム105の環境は共通の一連の規則または共通の目的を共有する。いくつかの実装形態では、異なるゲームは互いとは異なる規則または目的を有し得る。
【0030】
いくつかの実装形態では、ゲームは、複数の環境がリンクされ得る、1つまたは複数の環境(本明細書では「ゲーミング環境」または「仮想環境」とも呼ばれる)を有し得る。環境の一例は3次元(3D)環境であり得る。ゲームアプリケーション105の1つまたは複数の環境は、本明細書では「世界」または「ゲーミング世界」または「仮想世界」または「宇宙」と総称されることがある。世界の一例はゲーム105の3D世界であり得る。たとえば、ユーザは、別のユーザによって作成された別の仮想環境にリンクされる仮想環境を構築してもよい。仮想ゲームのキャラクターは、隣接する仮想環境に入るために仮想境界を越えることができる。
【0031】
3D環境または3D世界は、ゲームコンテンツを表す幾何学的データの3次元表現を提供する(または少なくとも、幾何学的データの3D表現が使用されるかどうかにかかわらず、3Dコンテンツとして現れるようにゲームコンテンツを提示する)グラフィックスを使用することに留意されたい。2D環境または2D世界は、ゲームコンテンツを表す幾何学的データの2次元表現を提供するグラフィックスを使用する。
【0032】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、1つまたは複数のゲーム105をホストすることができ、ユーザがクライアントデバイス110のゲームアプリケーション112を使用してゲーム105と対話することを可能にすることができる。オンラインゲーミングプラットフォーム102のユーザは、ゲーム105をプレイする、ゲーム105を作成する、ゲーム105と対話する、もしくはゲーム105を構築する、他のユーザと通信する、かつ/またはゲーム105のオブジェクト(たとえば、本明細書では「アイテム」または「ゲームオブジェクト」または「仮想ゲームアイテム」とも呼ばれる)を作成および構築することができる。たとえば、ユーザ生成の仮想アイテムを生成する際に、ユーザは、数ある中でも、キャラクター、キャラクターのアニメーション、キャラクターの装飾、インタラクティブゲームの1つもしくは複数の仮想環境を作成するか、またはゲーム105において使用される構造物を構築することができる。いくつかの実装形態では、ユーザは、オンラインゲーミングプラットフォーム102の他のユーザとの間で、プラットフォーム内通貨(たとえば、仮想通貨)などの仮想ゲームオブジェクトを売る、買う、または交換することができる。いくつかの実装形態では、オンラインゲーミングプラットフォーム102はゲームコンテンツをゲームアプリケーション(たとえば、112)に送信し得る。いくつかの実装形態では、ゲームコンテンツ(本明細書では「コンテンツ」とも呼ばれる)は、オンラインゲーミングプラットフォーム102またはゲームアプリケーションに関連付けられた任意のデータまたはソフトウェア命令(たとえば、ゲームオブジェクト、ゲーム、ユーザ情報、ビデオ、画像、コマンド、メディアアイテムなど)を指すことがある。いくつかの実装形態では、ゲームオブジェクト(たとえば、本明細書では「アイテム」または「オブジェクト」または「仮想ゲームアイテム」とも呼ばれる)は、オンラインゲーミングプラットフォーム102のゲームアプリケーション105またはクライアントデバイス110/116のゲームアプリケーション112もしくは118において使用される、作成される、共有される、または他の方法で描写されるオブジェクトを指すことがある。たとえば、ゲームオブジェクトは、パーツ、モデ
ル、キャラクターまたは(顔、腕、唇などのような)そのコンポーネント、道具、武器、衣類、建物、乗り物、通貨、植物、動物、前述のもののコンポーネント(たとえば、建物の窓)などを含み得る。
【0033】
ゲーム105をホストするオンラインゲーミングプラットフォーム102は、限定ではなく、例示の目的で提供されることに留意されたい。いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、1人のユーザから1人または複数の他のユーザへの通信メッセージを含むことができる1つまたは複数のメディアアイテムをホストし得る。メディアアイテムは、限定はしないが、デジタルビデオ、デジタルムービー、デジタル写真、デジタル音楽、オーディオコンテンツ、メロディー、ウェブサイトコンテンツ、ソーシャルメディアアップデート、電子ブック、電子雑誌、デジタル新聞、デジタルオーディオブック、電子ジャーナル、ウェブブログ、リアルシンプルシンジケーション(RSS:real simple syndication)フィード、電子コミックブック、ソフトウェアアプリケーションなどを含むことができる。いくつかの実装形態では、メディアアイテムは、デジタルメディアアイテムをエンティティに提示するように構成されたソフトウェア、ファームウェアまたはハードウェアを使用して実行またはロードされ得る電子ファイルであり得る。
【0034】
いくつかの実装形態では、ゲーム105は、特定のユーザもしくは特定のユーザのグループに関連付けられてもよく(たとえば、プライベートゲーム)、またはオンラインゲーミングプラットフォーム102のユーザが広く利用できるようにしてもよい(たとえば、パブリックゲーム)。いくつかの実装形態では、オンラインゲーミングプラットフォーム102が1つまたは複数のゲーム105を特定のユーザまたはユーザのグループに関連付ける場合、オンラインゲーミングプラットフォーム102は、ユーザアカウント情報(たとえば、ユーザ名およびパスワードなどのユーザアカウント識別子)を使用して特定のユーザをゲーム105に関連付けてもよい。
【0035】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102またはクライアントデバイス110は、ゲームエンジン104またはゲームアプリケーション112/118を含み得る。いくつかの実装形態では、ゲームエンジン104はゲーム105の開発または実行のために使用され得る。たとえば、ゲームエンジン104は、数ある特徴の中でも、2D、3D、VR、もしくはARグラフィックス用のレンダリングエンジン(「レンダラ」)、物理エンジン、衝突検出エンジン(および衝突応答)、サウンドエンジン、スクリプト機能、アニメーションエンジン、人工知能エンジン、ネットワークキング機能、ストリーミング機能、メモリ管理機能、スレッド機能、シーングラフ機能、またはシネマティックス用のビデオサポートを含み得る。ゲームエンジン104のコンポーネントは、ゲームを計算およびレンダリングするのを助けるコマンド(たとえば、レンダリングコマンド、衝突コマンド、アニメーションコマンド、物理コマンドなど)を生成し得る。いくつかの実装形態では、クライアントデバイス110/116のゲームアプリケーション112/118は、それぞれ、独立して、オンラインゲーミングプラットフォーム102のゲームエンジン104と共同して、またはその両方の組合せで動作してもよい。
【0036】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102とクライアントデバイス110/116の両方は、(それぞれ)ゲームエンジン(104、112、118)を実行する。ゲームエンジン104を使用するオンラインゲーミングプラットフォーム102は、ゲームエンジン機能(たとえば、物理コマンド、アニメーションコマンド、レンダリングコマンドなどを生成する)の一部もしくは全部を実施するか、またはゲームエンジン機能の一部もしくは全部をクライアントデバイス110のゲームエンジン104にオフロードしてもよい。いくつかの実装形態では、各ゲーム105は、オンラインゲーミングプラットフォーム102上で実施されるゲームエンジン機能とクライアントデバイス110および116上で実施されるゲームエンジン機能の異なる比率を有し得る。たとえば、オンラインゲーミングプラットフォーム102のゲームエンジン104は、少なくとも2つのゲームオブジェクト間での衝突がある場合に物理コマンドを生成するために使用され得るが、追加のゲームエンジン機能(たとえば、レンダリングコマンドを生成する)は、クライアントデバイス110にオフロードされ得る。いくつかの実装形態では、オンラインゲーミングプラットフォーム102上で実施されるゲームエンジン機能とクライアントデバイス110上で実施されるゲームエンジン機能の比率は、ゲームプレイ条件に基づいて(たとえば、動的に)変更され得る。たとえば、特定のゲーム105のゲームプレイに参加するユーザの数がしきい値数を超える場合、オンラインゲーミングプラットフォーム102はクライアントデバイス110または116によって以前に実施された1つまたは複数のゲームエンジン機能を実施し得る。
【0037】
たとえば、ユーザは、クライアントデバイス110および116上でゲーム105をプレイしていることがあり、制御命令(たとえば、右、左、上、下、ユーザ選択、またはキャラクター位置および速度情報などのユーザ入力)をオンラインゲーミングプラットフォーム102に送ってもよい。クライアントデバイス110および116から制御命令を受信した後に、オンラインゲーミングプラットフォーム102は、制御命令に基づいてゲームプレイ命令(たとえば、グループゲームプレイに参加するキャラクターの位置および速度情報、またはレンダリングコマンド、衝突コマンドなどのコマンドなど)をクライアントデバイス110および116に送ってもよい。たとえば、オンラインゲーミングプラットフォーム102は、クライアントデバイス110および116に対するゲームプレイ命令を生成するために、制御命令に対して(たとえば、ゲームエンジン104を使用して)1つまたは複数の論理動作を実施してもよい。他の事例では、オンラインゲーミングプラットフォーム102は、一方のクライアントデバイス110からの制御命令のうちの1つまたは複数をゲーム105に参加する他方のクライアントデバイス(たとえば、116)に渡してもよい。クライアントデバイス110および116は、ゲームプレイ命令を使用し、クライアントデバイス110および116のディスプレイ上での提示のためにゲームプレイをレンダリングしてもよい。
【0038】
いくつかの実装形態では、制御命令は、ユーザのキャラクターのゲーム内アクションを示す命令を指すことがある。たとえば、制御命令は、右、左、上、下、ユーザ選択、ジャイロスコープ位置および配向データ、力センサーデータなどのゲーム内アクションを制御するためのユーザ入力を含み得る。制御命令は、キャラクター位置および速度情報を含み得る。いくつかの実装形態では、制御命令はオンラインゲーミングプラットフォーム102に直接送られる。他の実装形態では、制御命令はクライアントデバイス110から別のクライアントデバイス(たとえば、116)に送られてもよく、ここで、その別のクライアントデバイスはローカルゲームエンジン104を使用してゲームプレイ命令を生成する。制御命令は、別のユーザからの音声通信メッセージまたは他のサウンド、たとえば、本明細書で説明されるようなオーディオ空間化技法を使用して生成された音声通信または他のサウンドをオーディオデバイス(たとえば、スピーカー、ヘッドフォンなど)上で再生するための命令を含み得る。
【0039】
いくつかの実装形態では、ゲームプレイ命令は、クライアントデバイス110(または116)がマルチプレイヤゲームなどのゲームのゲームプレイをレンダリングすることを可能にする命令を指すことがある。ゲームプレイ命令は、ユーザ入力(たとえば、制御命令)、キャラクター位置および速度情報、またはコマンド(たとえば、物理コマンド、アニメーションコマンド、レンダリングコマンド、衝突コマンドなど)のうちの1つまたは複数を含み得る。
【0040】
いくつかの実装形態では、キャラクター(または一般にゲームオブジェクト)は、ユーザが編集するのを支援するために自動的に結合するコンポーネントから組み立てられ、コンポーネントのうちの1つまたは複数はユーザによって選択され得る。1つまたは複数のキャラクター(本明細書では「アバター」または「モデル」とも呼ばれる)は、ユーザがゲーム105とのユーザの対話を容易にするためにキャラクターを制御し得る場合にユーザに関連付けられ得る。いくつかの実装形態では、キャラクターは、身体部分(たとえば、アニメーション化され得る髪、腕、脚など)および付属品(たとえば、Tシャツ、眼鏡、装飾画像、道具など)などのコンポーネントを含み得る。いくつかの実装形態では、カスタマイズ可能であるキャラクターの身体部分は、数ある中でも、頭タイプ、身体部分タイプ(腕、脚、胴体、および手)、顔タイプ、髪タイプ、および皮膚タイプを含む。いくつかの実装形態では、カスタマイズ可能である付属品は、衣類(たとえば、シャツ、ズボン、帽子、靴、眼鏡など)、武器、または他の道具を含む。いくつかの実装形態では、ユーザはまた、キャラクターのスケール(たとえば、高さ、幅、または深度)またはキャラクターのコンポーネントのスケールを制御し得る。いくつかの実装形態では、ユーザは、キャラクターのプロポーション(たとえば、ブロック状、解剖学的など)を制御し得る。いくつかの実装形態では、キャラクターはキャラクターゲームオブジェクト(たとえば、身体部分など)を含まないことがあるが、ユーザはゲーム(たとえば、レンダリングされたキャラクターゲームオブジェクトはないが、ユーザは依然としてゲーム内アクションを制御するためにキャラクターを制御するパズルゲーム)とのユーザの対話を容易にするために(キャラクターゲームオブジェクトなしの)キャラクターを制御し得ることに留意されたい。
【0041】
いくつかの実装形態では、身体部分などのコンポーネントは、ブロック、円柱、球などのプリミティブ幾何学的形状、またはウェッジ、トーラス、チューブ、チャンネルなどの何らかの他のプリミティブ形状であり得る。いくつかの実装形態では、クリエータモジュールは、オンラインゲーミングプラットフォーム102の他のユーザが閲覧または使用するためのユーザのキャラクターをパブリッシュし得る。いくつかの実装形態では、キャラクター、他のゲームオブジェクト、ゲーム105、またはゲーム環境を作成、修正、またはカスタマイズすることは、ユーザインターフェース(たとえば、開発者インターフェース)を使用してかつスクリプトありもしくはなしで(またはアプリケーションプログラミングインターフェース(API)ありもしくはなしで)、ユーザによって実施され得る。限定ではなく、例示の目的で、キャラクターは人間そっくりの形態を有するものとして説明されることに留意されたい。キャラクターは乗り物、動物、無生物オブジェクト、または他の創造的な形などの任意の形態を有し得ることにさらに留意されたい。
【0042】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、ユーザによって作成されたキャラクターをデータストア108に記憶し得る。いくつかの実装形態では、オンラインゲーミングプラットフォーム102は、ユーザに提示され得るキャラクターカタログおよびゲームカタログを維持する。いくつかの実装形態では、ゲームカタログは、オンラインゲーミングプラットフォーム102上に記憶されたゲームの画像を含む。加えて、ユーザは、選ばれたゲームに参加するために、キャラクターカタログからキャラクター(たとえば、ユーザまたは他のユーザによって作成されたキャラクター)を選択し得る。キャラクターカタログは、オンラインゲーミングプラットフォーム102上に記憶されたキャラクターの画像を含む。いくつかの実装形態では、キャラクターカタログ内のキャラクターのうちの1つまたは複数は、ユーザによって作成されているかまたはカスタマイズされていることがある。いくつかの実装形態では、選ばれたキャラクターは、キャラクターのコンポーネントのうちの1つまたは複数を定義するキャラクター設定を有し得る。
【0043】
いくつかの実装形態では、ユーザのキャラクターはコンポーネントの構成を含むことができ、ここで、コンポーネントの構成および外観ならびにより一般にはキャラクターの外観はキャラクター設定によって定義され得る。いくつかの実装形態では、ユーザのキャラクターのキャラクター設定は、少なくとも部分的にユーザによって選ばれ得る。他の実装形態では、ユーザは、デフォルトのキャラクター設定または他のユーザによって選ばれたキャラクター設定を有するキャラクターを選び得る。たとえば、ユーザは、事前定義されたキャラクター設定を有するデフォルトのキャラクターをキャラクターカタログから選んでもよく、ユーザはさらに、キャラクター設定のうちのいくつかを変更する(たとえば、カスタマイズされたロゴ付きのシャツを追加する)ことによってデフォルトのキャラクターをカスタマイズしてもよい。キャラクター設定は、オンラインゲーミングプラットフォーム102によって特定のキャラクターに関連付けられ得る。
【0044】
いくつかの実装形態では、クライアントデバイス110または116は各々、パーソナルコンピュータ(PC)、モバイルデバイス(たとえば、ラップトップ、モバイルフォン、スマートフォン、タブレットコンピュータ、またはネットブックコンピュータ)、ネットワーク接続されたテレビジョン、ゲーミングコンソールなどのコンピューティングデバイスを含み得る。いくつかの実装形態では、クライアントデバイス110または116は「ユーザデバイス」と呼ばれることもある。いくつかの実装形態では、1つまたは複数のクライアントデバイス110または116は、任意の所与の瞬間にオンラインゲーミングプラットフォーム102に接続し得る。クライアントデバイス110または116の数は、限定ではなく、例示として提供されていることに留意されたい。いくつかの実装形態では、任意の数のクライアントデバイス110または116が使用され得る。
【0045】
いくつかの実装形態では、各クライアントデバイス110または116は、それぞれ、ゲームアプリケーション112または118のインスタンスを含み得る。1つの実装形態では、ゲームアプリケーション112または118は、ユーザが、オンラインゲーミングプラットフォーム102によってホストされる仮想ゲーム内の仮想キャラクターを制御する、またはゲーム105、画像、ビデオアイテム、ウェブページ、ドキュメントなどのコンテンツを閲覧もしくはアップロードするなど、オンラインゲーミングプラットフォーム102を使用し、オンラインゲーミングプラットフォーム102と対話することを可能にし得る。1つの例では、ゲームアプリケーションは、ウェブサーバによってサービスされるコンテンツ(たとえば、仮想環境内の仮想キャラクターなど)にアクセスする、コンテンツを検索する、コンテンツを提示する、またはコンテンツをナビゲートすることができるウェブアプリケーション(たとえば、ウェブブラウザと連携して動作するアプリケーション)であり得る。別の例では、ゲームアプリケーションは、クライアントデバイス110または116上にインストールされてローカルに実行され、ユーザがオンラインゲーミングプラットフォーム102と対話することを可能にする、ネイティブアプリケーション(たとえば、モバイルアプリケーション、アプリ、またはゲーミングプログラム)であり得る。ゲームアプリケーションは、コンテンツ(たとえば、ウェブページ、メディアビューア)をレンダリングするか、コンテンツを表示するか、またはコンテンツをユーザに(たとえば、ハイブリッドストリーミングモジュール107と連携してハイブリッドストリーミングモジュール115および121を介して)提示し得る。ある実装形態では、ゲームアプリケーションはまた、ウェブページに埋め込まれる埋込み型メディアプレイヤ(たとえば、Flash(登録商標)プレイヤ)を含み得る。
【0046】
本開示の態様によれば、ゲームアプリケーションは、ユーザがコンテンツを構築し、コンテンツを作成し、コンテンツを編集し、コンテンツをオンラインゲーミングプラットフォーム102にアップロードし、ならびにオンラインゲーミングプラットフォーム102と対話する(たとえば、オンラインゲーミングプラットフォーム102によってホストされるゲーム105をプレイする)ためのオンラインゲーミングプラットフォームアプリケーションであり得る。したがって、ゲームアプリケーションは、オンラインゲーミングプラットフォーム102によってクライアントデバイス110または116に提供され得る。別の例では、ゲームアプリケーションは、サーバからダウンロードされるアプリケーションであり得る。
【0047】
いくつかの実装形態では、ユーザはゲームアプリケーションを介してオンラインゲーミングプラットフォーム102にログインし得る。ユーザは、ユーザアカウント情報(たとえば、ユーザ名およびパスワード)を提供することによってユーザアカウントにアクセスし得、ここで、ユーザアカウントは、オンラインゲーミングプラットフォーム102の1つまたは複数のゲーム105に参加するために利用可能な1つまたは複数のキャラクターに関連付けられる。
【0048】
一般に、オンラインゲーミングプラットフォーム102によって実施されるものとして1つの実装形態で説明される機能は、適切な場合、他の実装形態では、クライアントデバイス110もしくは116またはサーバによっても実施され得る。加えて、特定のコンポーネントに起因する機能は、一緒に動作する異なるコンポーネントまたは複数のコンポーネントによって実施され得る。オンラインゲーミングプラットフォーム102はまた、適切なアプリケーションプログラミングインターフェース(API)を通じて他のシステムまたはデバイスに提供されるサービスとしてアクセスされ得、したがって、ウェブサイトにおける使用に限定されない。
【0049】
いくつかの実装形態では、オンラインゲーミングプラットフォーム102はグラフィックスモジュール106を含み得る。いくつかの実装形態では、グラフィックスモジュール106は、オンラインゲーミングプラットフォーム102がグラフィックスおよびアニメーションの能力を提供することを可能にするシステム、アプリケーション、またはモジュールであり得る。いくつかの実装形態では、グラフィックスモジュール106は、
図3または
図4に示されるフローチャートに関連して以下で説明される動作のうちの1つまたは複数を実施し得る。
【0050】
図2:コンポジットビデオを生成するための方法
図2は、いくつかの実装形態による、ハイブリッドビデオストリーミングを実施するための例示的な方法200(たとえば、コンピュータで実装される方法)のフローチャートである。
【0051】
いくつかの実装形態では、方法200は、たとえば、サーバデバイスもしくはクライアントデバイス、または他のデバイス、あるいはデバイスの組合せのうちの1つまたは複数の上で実装され得る。いくつかの実装形態では、方法200の一部または全部は、
図1に示されるデバイス102もしくは110/116のうちの1つもしくは複数または
図4に示されるデバイス402もしくは408のうちの1つもしくは複数の上で、および/あるいはサーバデバイスとクライアントデバイスの両方の上で実装され得る。説明される例では、実装システムは、1つまたは複数のデジタルハードウェアプロセッサまたは処理回路構成(「プロセッサ」)と、1つまたは複数のストレージデバイスとを含む。方法200は、クライアントデバイス上で実行されるハイブリッドストリーミングモジュール(たとえば、115または121)によって実施され得る。いくつかの実装形態では、1つまたは複数のデバイスまたは設備の異なるコンポーネントは、方法200の異なるブロックまたは他の部分を実施することができる。
【0052】
いくつかの実装形態では、方法200または方法の部分は、デバイスによって自動的に開始され得る。たとえば、方法(またはその部分)は、周期的に実施され得るか、または1つもしくは複数の特定のイベントもしくは条件の発生に基づいて実施され得る。たとえば、そのようなイベントまたは条件は、クライアントデバイスがビデオゲームを実行すること、方法200を最後に実施してから所定の時間期間が満了したこと、および/またはデバイス実装方法200の設定において指定され得る1つもしくは複数の他のイベントもしくは条件が生じることを含むことができる。いくつかの実装形態では、そのような条件は、(ユーザの同意を得てデバイスまたは方法によってアクセス可能な)ユーザの記憶されたカスタム選好においてユーザによって以前に指定され得る。いくつかの例では、デバイス(サーバまたはクライアント)は、1つまたは複数のアプリケーションへのアクセスによって方法200を実施することができる。別の例では、サーバデバイスはネットワーク上でデータをクライアントに送ることができ、クライアントは方法200を全体的にまたは部分的に実施することができる。方法200はまた、サーバデバイス、1つもしくは複数のクライアントデバイス上での処理の組合せ、および/または上記の組合せを使用して実施され得る。
【0053】
処理は202において開始し、ここで、クライアントデバイスが、クライアントデバイスに関連付けられた特定のバンテージポイント(たとえば、ビデオゲーム仮想環境内の特定のロケーションにおけるユーザ、ゲームプレイヤ、またはアバターのバンテージポイント)から見た仮想環境のバックグラウンド部分に対応するバックグラウンドビデオを受信する。いくつかの実装形態では、バックグラウンドビデオは、
図3に関連して以下で説明されるように、サーバ上でレンダリングされたバックグラウンドビデオを含むことができる。いくつかの実装形態では、ビデオは(たとえば、特定のバンテージポイントからの)ゲームプレイヤのもしくはアバターの視点を通して見た環境のビュー、ゲームプレイヤのもしくはアバターの位置における環境のパノラマビュー、または3-Dシーン内のジオメトリにマッピングするためのカラー情報を含むことができる。いくつかの実装形態では、バックグラウンドビデオはまた、バックグラウンドの上のフォアグラウンドオブジェクトの配置および位置決めを支援するためにフォアグラウンドオブジェクトを処理するときに使用され得る、カラーマップデータ、深度バッファデータ、または3次元ジオメトリ情報のうちの1つまたは複数などの補足データを含むことができる。処理は204に続く。
【0054】
204において、クライアントデバイスが、少なくとも部分的に仮想環境のフォアグラウンドにある1つまたは複数のレンダリングされたオブジェクトをレンダリングする。たとえば、レンダリングされたオブジェクトは、クライアントデバイスに関連付けられたビデオゲームユーザ(またはプレイヤ)によって制御される位置または配向を有するキャラクター、乗り物、または他のオブジェクトなどの、1つまたは複数のオブジェクトを含むことができる。レンダリングされたオブジェクトはまた、クライアントデバイスに関連付けられたユーザとは異なる別のビデオゲームユーザによって制御される位置または配向を有する1つまたは複数のオブジェクトを含むことができる。レンダリングされたオブジェクトはまた、ビデオゲームによって制御される位置または配向を有する1つまたは複数のオブジェクト(たとえば、人工知能オブジェクト、乗り物、キャラクター、アバターなどの、コンピュータ制御されたオブジェクト)を含むことができる。処理は206に続く。
【0055】
206において、クライアントデバイスが、バックグラウンドビデオの少なくとも一部分および1つまたは複数のレンダリングされたオブジェクトのうちの少なくとも1つをコンポジットビデオに合成する。上記で説明された補足情報は、深度情報(たとえば、ジオメトリにおける深度)を含むことができる。バックグラウンドおよび補足データはまた、複数のレイヤ(たとえば、3-Dシーン内の異なる深度に対応するレイヤ)を含むことができる。サーバからの補足データにおいて提供される深度情報は、クライアントデバイス上でレンダリングまたは合成するときに使用され得る。
【0056】
たとえば、ローカルにレンダリングされたオブジェクト(およびその部分)は、ビデオのフレームにおいて特定の深度および位置を有することができる。深度は、ローカルにレンダリングされたオブジェクトが完全にフォアグラウンドにあるか、部分的にフォアグラウンドにあるか、またはバックグラウンドによって遮蔽されているかを決定するために、バックグラウンドビデオ内のオブジェクトの深度と比較され得る。レンダリングおよび/または合成はそれに応じて調整され得、たとえば、合成されたビデオは、オブジェクトピクセルが対応するバックグラウンドビデオピクセルよりも短いバンテージポイントからの距離(または深度)に関連付けられているかどうかに基づいて、バックグラウンドビデオまたはレンダリングされたオブジェクトの1つまたは複数のピクセル値を使用することができる。
【0057】
合成(またはコンポジット)は、限定はしないが、クライアントオブジェクトをバックグラウンドビデオの上に(すなわち、バックグラウンドビデオのフォアグラウンドに)オーバーレイすること、ビデオのどの部分がクライアントのオブジェクトの前方もしくは後方にあるかを決定するために深度およびジオメトリ情報を使用すること、またはビデオコンテンツをワーピングしてクライアントの現在のビューポイントに、より正確に一致させるために深度およびジオメトリ情報を使用すること、次いで、上記で説明された技法のうちの1つを使用してコンポジットを実施することを含む、様々な方法で実施され得る。いくつかの実装形態では、合成は、フレームごとに各フレームに対して実施され得る。各フレームにおいてレンダリングおよび合成することによって、レイテンシが最小化され得る。レンダリングおよび合成はクライアントデバイスによって実施されているので、サーバ(またはプラットフォーム)からのフレームは規則的な間隔でまたは同じ間隔でクライアントデバイスに到達しないことがある。したがって、クライアント上でレンダリングされたグラフィックスは、クライアントデバイス上での現在のレンダリングに先立って受信されたサーバからのフレーム(たとえば、より古いフレーム)と合成され得る。処理は208に続く。
【0058】
208において、クライアントデバイスがコンポジットビデオを出力する。たとえば、クライアントデバイスは、クライアントデバイスに結合されたディスプレイまたは他の出力デバイス(たとえば、外部ビデオディスプレイデバイス、仮想現実ヘッドセット、ウェアラブルディスプレイデバイス、ビデオプロジェクタなど)にコンポジットビデオを出力し得る。クライアントデバイスはまた、仮想現実(VR)能力、拡張現実(AR)能力、またはエクステンデッドリアリティ(XR)能力を含むことができ、クライアントデバイス上のレンダリング機能、合成機能、または出力機能は、クライアントデバイスのVRシステム、ARシステム、またはXRシステムと協働して駆動または動作し得る。
【0059】
ブロック202~208は全体的にもしくは部分的に繰り返され得るか、またはブロック202~208が実施される順序は、企図されるハイブリッドビデオストリーミングタスクに従って変化し得る。
【0060】
図3:バックグラウンドビデオおよび補足データを生成するためのサーバ方法
図3は、いくつかの実装形態による、サーバからクライアントにバックグラウンドビデオを提供するための例示的な方法300(たとえば、コンピュータで実装される方法)のフローチャートである。
【0061】
いくつかの実装形態では、方法300は、たとえば、サーバデバイスもしくはクライアントデバイス、または他のデバイス、あるいはデバイスの組合せのうちの1つまたは複数の上で実装され得る。いくつかの実装形態では、方法300の一部または全部は、
図1に示されるデバイス102もしくは110/116のうちの1つもしくは複数または
図4に示されるデバイス402もしくは408のうちの1つもしくは複数の上で、および/あるいはサーバデバイスとクライアントデバイスの両方の上で実装され得る。説明される例では、実装システムは、1つまたは複数のデジタルハードウェアプロセッサまたは処理回路構成(「プロセッサ」)と、1つまたは複数のストレージデバイスとを含む。方法300は、サーバまたはプラットフォームシステム(たとえば、102)上で実行されるハイブリッドストリーミングモジュール(たとえば、107)によって実施され得る。いくつかの実装形態では、1つまたは複数のデバイスまたは設備の異なるコンポーネントは、方法300の異なるブロックまたは他の部分を実施することができる。
【0062】
いくつかの実装形態では、方法300または方法の部分は、デバイスによって自動的に開始され得る。たとえば、方法(またはその部分)は、周期的に実施され得るか、または1つもしくは複数の特定のイベントもしくは条件の発生に基づいて実施され得る。たとえば、そのようなイベントまたは条件は、クライアントデバイスがビデオゲームを実行すること、方法300を最後に実施してから所定の時間期間が満了したこと、および/またはデバイス実装方法300の設定において指定され得る1つもしくは複数の他のイベントもしくは条件が生じることを含むことができる。いくつかの実装形態では、そのような条件は、(ユーザの同意を得てデバイスまたは方法によってアクセス可能な)ユーザの記憶されたカスタム選好においてユーザによって以前に指定され得る。いくつかの例では、デバイス(サーバまたはクライアント)は、1つまたは複数のアプリケーションへのアクセスによって方法300を実施することができる。別の例では、サーバデバイスはネットワーク上でデータをクライアントに送ることができ、クライアントは方法300を全体的にまたは部分的に実施することができる。方法300はまた、サーバデバイス、1つもしくは複数のクライアントデバイス上での処理の組合せ、および/または上記の組合せを使用して実施され得る。
【0063】
処理は302において開始し、ここで、バックグラウンドビデオがレンダリングされる。いくつかの実装形態では、サーバは、(たとえば、特定のバンテージポイントからの)クライアントの視点を通して見た環境のビュー、クライアントの位置の周りの環境のパノラマビュー、または3-Dシーン内のジオメトリにマッピングするためのカラー情報のうちの1つまたは複数を含むバックグラウンドビデオをレンダリングすることができる。サーバ側上でのレンダリングは、標準的なレンダリング技法または本明細書で説明されるようなハイブリッドストリーミングに特化した技法を使用して実施され得る。使用される特定の技法は、上記で説明された要因に基づき得る、サーバデバイスとクライアントデバイスとの間での処理の分割に依存する場合がある。いくつかの実装形態では、サーバはハイブリッドストリーミングのための他のレンダリング技法を含むことができる。たとえば、どのクライアントがレンダリングすることになるかについての情報をサーバが有する場合、サーバは、差分を計算し、クライアントがレンダリングすることになる部分とは異なる部分のみをレンダリングすることができる。別の例では、クライアントが表示されている環境のいくつかのコンポーネントについての高解像度データを有することを示す情報をサーバが有する場合、サーバは、環境のそれらの部分をレンダリングすることをスキップし、クライアントによって必要とされ得る部分(すなわち、高解像度でクライアントによってレンダリングされていない環境の部分)のみをレンダリングすることができる。
【0064】
別の例では、コンテンツ決定はサーバ上で行われ得る。たとえば、サーバはキャラクターモデルがクライアント上でレンダリングされると決定することができ、サーバはサーバ上でキャラクターモデルをレンダリングすることをスキップすることができる。いくつかの実装形態では、クライアントは、サーバ上で以前にレンダリングされたグラフィックスコンポーネントを再利用し得る。以前にレンダリングされたオブジェクトの再利用は、環境内のより遠くのオブジェクトが近くの位置では似ていることがあるので、これらのオブジェクトについてはうまく機能し得る。
【0065】
いくつかの実装形態では、オブジェクト全体のレンダリングの再利用が使用されないことがあるが、レンダリングを実施するために使用されるデータが再利用され得る。たとえば、照明のビューに依存しない部分が計算され、同じマップ(または環境)上のすべてのクライアントにわたって共有され得る。また、詳細度、地形、プロシージャルエフェクトなどの計算は、同じマップまたは環境内のクライアントと共有され得る。いくつかの実装形態では、サーバは、環境のレンダリングをどの程度サーバ上で実施すべきかおよびどの程度クライアントに委託すべきかを決定するために、クライアント固有のパラメータ(たとえば、クライアント上のレンダリング能力)を評価することができる。
【0066】
一般に、いくつかの実装形態では、サーバおよびクライアントは、クライアントがローカルにレンダリングしている環境の部分のサーバレンダリングをサーバが送らないように、サーバとクライアントとの間でのレンダリング責任の分割についての情報を通信することができる。合成(またはコンポジット)は、クライアントおよびサーバがどちらのデバイスがどの部分をレンダリングすることになるかを調整すると、より効率的に実施され得る。処理は304に続く。
【0067】
304において、バックグラウンドに対応する補足データが随意に生成される。いくつかの実装形態では、補足データは、バックグラウンドビデオが表す(またはマッピングされる)環境の幾何学的構成についてクライアントに通知するための追加のデータを含むことができる。追加のデータは、クライアントデバイスがコンポジット動作をより正確にかつ/または効率的に実施するのを助けることができる。
【0068】
補足データは、深度バッファデータまたは3-Dジオメトリ情報のうちの1つまたは複数を含むことができる。いくつかの実装形態では、クライアントはオブジェクトの3-Dジオメトリをすでに有していることがあり、送られるべき変換行列のみを必要とすることがある。変換行列のみを送ることによって、3-Dジオメトリデータを送る技法と比較してプロセスをより効率的にすることができる。いくつかの実装形態では、クライアントは、3-Dジオメトリデータがサーバから送られることを必要とせず、むしろ、再投影および/またはコンポジット動作を実施するための十分なジオメトリデータのみを必要とし得る。サーバは、再投影および/またはコンポジット動作を実施するために必要な最小量のジオメトリデータを計算し、したがって、サーバによって計算および転送されることが必要なデータの量を低減し得る。処理は306に続く。
【0069】
306において、サーバが、バックグラウンドビデオおよび随意に補足データをクライアントに送る。たとえば、ゲーミングプラットフォーム102は、バックグラウンドビデオおよび/または補足データをユーザデバイス110上のゲームアプリケーション112に送り得る。
【0070】
図4:ビデオ生成のためのクライアント-サーバシステム
図4は、レンダリングされたバックグラウンドビデオ404を有し、レンダリングされたバックグラウンドビデオ404をクライアントデバイス408(たとえば、クライアントデバイス110および/または116)にネットワーク406を介して送るサーバ402(たとえば、ゲーミングプラットフォーム102)を示す図である。クライアントデバイス408は、1つまたは複数のオブジェクト410(たとえば、3次元オブジェクト)をレンダリングし、1つまたは複数のオブジェクト410をレンダリングされたバックグラウンドビデオ404と合成して、コンポジットビデオ412を生成する。クライアントデバイス408は、クライアントデバイスのスクリーン、たとえば、LEDスクリーン、クライアントデバイスによって制御されるプロジェクタなどの上のユーザインターフェースにおいてコンポジットビデオを表示し得る。
【0071】
いくつかの実装形態では、サーバ402は、ビデオゲームビデオ(または他のインタラクティブメディア)を1つまたは複数のクライアントデバイス408に効率的にストリーミングする(またはレンダリングするもしくは表示する)ように構成される。本明細書で説明される技法は、従来の単純なビデオストリーミングで通常取得可能な応答性と比較して、改善された応答性を提供することができる。また、本明細書で開示される技法は、クライアントデバイス上で3-Dシーンを完全にレンダリングするだけの従来の技法によって取得され得る品質および計算リソース需要と比較して、より少ない計算リソース需要(たとえば、プロセッササイクルおよび/またはメモリ)を使用して、より高い品質のビデオ出力を提供することができる。たとえば、ローカルにレンダリングされるフォアグラウンドオブジェクトは、ローカル計算により、ユーザ入力(たとえば、左、上、または下に移動する、チルトする、など)に瞬時に(またはほぼ瞬時に)応答し得る一方で、対応するバックグラウンドはサーバから自動的に受信され、ここで、動きに起因する遠近感の小さい変化はクライアントにおいてバッファされ得るので、バックグラウンドにおける小さい遅延は許容可能である。
【0072】
また、サーバ上でバックグラウンドレンダリングを実施することは、不十分であり得る(たとえば、モバイルデバイスのより低い処理能力、限られたメモリ、限られたバッテリー電力など)クライアント側のリソースを節約するのを助けることができる。
【0073】
いくつかの実装形態は、ストレージおよび計算要件を下げることによって、従来の(たとえば、コンソール)ビデオゲームからモバイルゲームへの変換をより容易に可能にする。いくつかの実装形態は、(たとえば、ネットワークレイテンシに起因する)ラグがあり得るが、厳しいレンダリング動作(たとえば、バックグラウンドなどのビデオの大きいセクションのレンダリング)を実施するのに十分なほど強力である、サーバ上のサーバ側ストリーム(たとえば、バックグラウンドビデオ)の構成と、レンダリング限界(たとえば、プロセッサスループットおよび/またはメモリ)を有し得るが、ラグ(たとえば、ネットワークレイテンシに起因するラグ)をほとんどまたはまったくもたないことができる、サーバ側ストリームをデバイス上でレンダリングされた3-Dオブジェクトと合成することとを含むことができる。
【0074】
いくつかの実装形態では、クライアントシーンデータもストリーミングされ、このことは、クライアントがこれまでにローカルにレンダリングした可能性があるすべてのものについてのデータをクライアントが有する必要がないので、クライアント性能およびリソース利用を助けることができる。一般に、実装形態は、クライアント能力とネットワーク帯域幅との間の妥協をもたらす、サーバ処理およびクライアント処理の分割を含むことができる。クライアント能力とネットワーク帯域幅との間の企図される妥協に応じて、サーバ処理およびクライアント処理の複数の分割が可能である。
【0075】
いくつかの実装形態では、サーバとクライアントとの間での処理の分割(たとえば、どの程度のビデオがサーバ上でレンダリングされ、クライアントに送信されるか)は、利用可能なクライアント処理リソースおよびネットワーク帯域幅に基づいて決定され得る。たとえば、クライアントが限られた処理リソースを有するが、ネットワーク接続が高速である(たとえば、高い帯域幅および低いレイテンシを有する)場合、システムは、できる限りサーバ上でレンダリングし、レンダリングされたビデオをクライアントに高速ネットワーク接続を介してストリーミングし得る。別の例では、クライアントが(たとえば、フォアグラウンドと、バックグラウンドの少なくとも一部とをレンダリングするための)十分な処理リソースを有するが、ネットワーク接続が比較的遅い場合、システムは、サーバ上であまりレンダリングせず、ネットワーク上で送信されることが必要とされるデータの量を低減するためにより多くの処理をクライアントに移行し得る。
【0076】
一般に、比較的強力なクライアントおよび比較的弱いネットワーク接続を有する状況の場合には、より多くのローカルレンダリングが良い場合がある。ネットワーク帯域幅が利用可能である場合、サーバは、クライアント上であまりレンダリングしないことと引き換えに、バックグラウンドビデオをレンダリングする際により多くの処理を費やしてもよい。たとえば、パノラマ画像の複数のレイヤを有するバックグラウンドビデオを提供することによって、異なる距離に各々が割り当てられるレイヤへのバックグラウンドビデオストリームの分離は、視差効果を可能にし、オブジェクトがビデオストリーム内のカメラ(または視点)のより近くでレンダリングされる場合でも本物らしく見えることができる。
【0077】
いくつかの実装形態では、サーバとクライアントデバイスとの間でのハイブリッドストリーミング機能の分割を決定するために評価され得る要因は、どの程度のネットワーク帯域幅をビデオ専用にし得るか、どの程度の処理能力がクライアントデバイス上のレンダリングのために利用可能であるか、またはどの程度のデータがクライアントデバイス上に記憶され得るかを含むことができる。たとえば、高いクライアント処理能力が利用可能であり、低いネットワーク帯域幅が利用可能である状況では、システムは、バックグラウンドおよびフォアグラウンドオブジェクトをローカルに(すなわち、クライアントデバイス上で)レンダリングし得る。たとえば、高いクライアント処理能力および高いネットワーク帯域幅が利用可能である状況では、バックグラウンドはサーバ上でレンダリングされ得、フォアグラウンドオブジェクトはローカルにレンダリングされ、バックグラウンドと合成され得る。
【0078】
低いクライアント能力が利用可能であり、低いネットワーク帯域幅が利用可能である、別の例示的な状況では、バックグラウンドとフォアグラウンドの両方は、より低い品質でローカルにレンダリングされ得、サーバは、利用可能なネットワーク帯域幅に基づいてレンダリングを提供することができる。低いクライアント能力が利用可能であり、高いネットワーク帯域幅が利用可能である、さらに別の例示的な状況では、より多くのレンダリングがサーバ上で実施され得、クライアントデバイスは、主要なフォアグラウンドオブジェクトのみをローカルにレンダリングするために使用され得る。
【0079】
例示的な実装形態1
図5および
図6:例示的なビデオ
いくつかの実装形態では、ハイブリッドストリーミングのための1つの技法は、遠いシーン(またはバックグラウンド)のパノラマビデオをストリーミングすることを含む。パノラマシーンは、(
図5Aに示されるような)水平十字または立方フォーマット、(
図5Bに示されるような)緯度/経度フォーマットを含む様々なフォーマットで配信され得る。クライアント側では、クライアントは、(パノラマシーンフォーマットに基づいて)現在の視点からのパノラマシーンをレンダリングし、たとえば、3-Dオブジェクトをパノラマシーンバックグラウンド上にオーバーレイすることによって、ビデオを3-Dオブジェクトと合成する。
【0080】
図6Aは、いくつかの実装形態による、クライアントデバイスの現在の視点からの、クライアントデバイス上の(たとえば、
図5Aまたは
図5Bに示されるフォーマットのうちの1つにおける)パノラマビデオからレンダリングされたバックグラウンドビデオフレーム602(たとえば、静止2-d画像)を示す。
図6Bは、クライアントにおいてレンダリングされたオブジェクト604(たとえば、3次元オブジェクト)と合成された
図6Aのバックグラウンドビデオフレームを示す。
【0081】
パノラマビデオが現在のビューにワーピングされ得るので、本技法は効果的であり得る。ワーピングはカメラ回転に適合し得る。また、変換は非常に遠いオブジェクトにとっては重要な問題ではないことがある。本技法はまた、著しい視差が存在しない場合(たとえば、大半のオブジェクトが遠いオブジェクトであるとき)に生じないディスオクルージョン上でビデオストリーム内の大半のビットが使用されるので、効率的にストリーミングし得る。本技法は、シーンのバックグラウンド内の比較的遠く離れたところのオブジェクトを有するビデオストリームによく適している場合がある。本技法を用いると、依然として、ローカルに(すなわち、クライアントデバイス上で)実施されるかなりの量のレンダリングがある。
【0082】
本技法は、比較的強力なクライアントデバイスが比較的弱いネットワーク接続に結合される状況において効果的であり得る。本技法は、パノラマ画像の複数のレイヤをバックグラウンドとして提供することによって、クライアント上であまりレンダリングしないことと引き換えに、より多くの帯域幅をバックグラウンドビデオに充てるように調整され得る。異なる距離に各々が割り当てられるレイヤへのビデオストリームの分離は、視差効果を可能にし、したがって、オブジェクトをビデオストリーム内のカメラのより近くでレンダリングする場合でも本物らしく見えるようになる。
【0083】
例示的な実装形態2
図7および
図8:例示的なビデオ
カメラにより近いオブジェクトをストリーミングする場合、正確なワーピングおよびコンポジットについてより多くの情報を得るためにより多くのネットワーク帯域幅をビデオに割り振る、異なる技法が使用され得る。たとえば、ビデオが深度情報を含む場合、深度情報はサーバ側またはクライアント側上でのレンダリングのために使用され得る。
【0084】
図7Aおよび
図7Bは、それぞれ、ビデオフレームおよび対応する深度マップを示す。
図7Aは、例示の目的のための単純なシーンの図である。シーンは、3つの構造物702、704、および706と、道路708と、バックグラウンド部分710とを含む。シーンのこれらの特徴は、
図7Bに示されるような対応する深度情報を有する。深度情報は、構造物702に対応する第1の深度712と、構造物704に対応する第2の深度714と、構造物706に対応する第3の深度716と、道路708に対応する第4の深度718と、バックグラウンド部分710に対応する第5の深度720とを含むことができる。
【0085】
深度情報は、新規のカメラ位置においてビデオ内のオブジェクトがどこにあるべきかを決定するために使用され得る。次いで、この深度情報はまた、どのオブジェクトが最終的にビデオシーンの前方にあるべきかおよびどのオブジェクトが最終的にビデオシーンの後方にあるべきかを示すことによって、クライアント生成の3-Dグラフィックスとの適切なコンポジットを行うために使用され得る。深度はビデオと共にストリーミングされ得るか、または深度はすでにデバイス上にあり得、常にクライアントデバイスに記憶されたシーン全体の3-Dジオメトリの粗い表現を含むことができる。深度情報は、(たとえば、投影マッピングスタイル技法において使用するために)その上にビデオがマッピングされる、深度マップまたは一連の3-Dオブジェクトを含むことができる。
【0086】
図8Aは、画像806の行(または行の部分)内のピクセルについての深度情報802のトップダウン可視化800の図を示す。深度情報は、画像(たとえば、バックグラウンドシーンまたはパノラマシーン)内の各ピクセルについての深度値を含むことができる。深度810は、線808に沿ってマッピングされた特定のピクセルからカメラ804までの距離810を表す。
【0087】
図8Bは、画像816が新しいカメラ位置805に基づいて再投影される、深度ベースのビュー再投影801の図を示す。いくつかの実装形態では、再投影される画像は、新しい画像816の位置において深度情報をサンプリングすることによって生成され得る。サンプリング技法は光線812に沿って反復的に移動することを含むことができ、ここで、反復は新しい画像816の距離に到達するための点814として示されている。
【0088】
いくつかの実装形態では、高性能クライアント(たとえば、それぞれのしきい値を上回る処理リソースおよび/またはメモリリソースを有するクライアント)上では、ハイブリッドストリーミング技法を使用する理由がほとんどまたはまったくないことがあり得る。しかしながら、クライアントデバイスが利用可能なメモリリソース、計算リソース、および/またはGPUリソースが不十分であるとき、本明細書で説明されるハイブリッドストリーミング技法は、ビデオゲームを処理する性能および能力にとって有益であり得る。いくつかの実装形態では、クライアントは、ゲーム環境全体を記憶するには不十分なメモリを有し得る。また、いくつかの実装形態では、サーバは高解像度データを有し得るが、クライアントは低解像度データのみを有し、クライアントは一部のコンテンツを完全に喪失している可能性がある。
【0089】
いくつかの実装形態では、クライアントとサーバとの間でのビデオストリーム処理の区分(または分割)は、(クライアントまたはサーバにおける)メモリ、(クライアントまたはサーバにおける)帯域幅、(クライアントまたはサーバにおける)電力などのうちの1つまたは複数に基づいて動的に変化し得る。いくつかの実装形態は、何をすでに計算済みの最終的な形でクライアントにストリーミングするかと、何を(ストリーミングされた)ソースデータからクライアントに計算させるかとの、動的なトレードオフを含むことができる。クライアント/ネットワーク仕様は、そのバランスを決定するために使用されることになる/使用され得る。
【0090】
ハイブリッドストリーミングは、より多くのサーバCPUリソース、GPUリソース、および/または帯域幅リソースを必要とし得るので、ゲーミングプラットフォームのオペレータは、この機能に対してより多くの料金を請求し得る。いくつかの実装形態では、サーバ計算の量はいくつかの形態の支払にリンクされ得、たとえば、システムはプレミアム顧客向けの「HD」バージョンをストリーミングし得る。また、ハイブリッドストリーミングはオンラインビデオゲーム体験にすぐに飛び込むことができるという考えにリンクされるので、ユーザが最初にゲーム/世界に加わるとき、ユーザは、(たとえば、同数のローカルアセットを有する必要を低減するために)より多くのビデオストリーミングを得ることができ、アセットストリーミングが進行するにつれて(たとえば、ユーザが仮想世界内でいくらかの時間を過ごした後に)、システムはいくつかの物をレンダリングのためにローカルクライアントに移動させ得る。
【0091】
いくつかの実装形態では、何をビデオとしてストリーミングするかと、何をクライアントデバイス上でローカルに行うかとの間のバランスは、どのアイテムがレイテンシに敏感であるかに依存する場合がある。たとえば、ゲームプレイにとって重要である任意の動的なオブジェクトは、ローカルにレンダリングされるべきである。いくつかの実装形態では、開発者はこれらをローカルレンダリング専用にタグ付けし得る。
【0092】
いくつかの実装形態では、モバイルクライアントが一時的に接続性を失ったとき、システムは以前に受信されたデータからレンダリングし続けることができるが、視覚アーティファクトが現れるかつ/または時間と共に悪化することがある。たとえば、古いデータにおいてレンダリングされなかったが今では目に見えるエリアに起因して、穴が現れることがある。アーティファクトを低減するのを助けるために、穴充填および他の予測技法が使用され得る。
【0093】
いくつかの実装形態では、システムは、ネットワーク帯域幅が制限されているときには、ネットワーク条件に動的に適応し、クライアントデバイス上でより多くの動作を実施するように、高品質ネットワークが存在するときには、サーバデバイス上でより多くの動作を実施するように構成され得る。
【0094】
いくつかの実装形態では、ハイブリッドストリーミングシステムはクライアントを含み、サーバは、クライアントの各々およびサーバが閲覧パラメータに関するデータを維持し、幾何学的情報を同期させておくように構成され得る。いくつかの実装形態では、遷移は、ローカルコンポーネントとリモートコンポーネントとの間の厄介な遷移を低減するのを助けるために、レンダリング差を除いて滑らかにすることに重点が置かれ得る。
【0095】
いくつかの実装形態では、クライアントは、サーバ上で利用可能な完全な照明情報に近似しているものを有することができる。たとえば、クライアントは主光源を知る可能性があり、サーバ上でのより完全なレンダリングと比較してあまり正確ではない照明および影を計算することがある。クライアントは、その責任下でオブジェクトをサーバレンダリングの品質レベルと同様の品質レベルにまでレンダリングするのに十分な情報を有することを必要とし得る。照明および/またはレンダリング情報(たとえば、アセット、テクスチャ、または照明)は、クライアントが必要とするものについてのみ、サーバからストリーミングされ得るので、それはゲーム世界全体のサブセットである。いくつかの実装形態では、システムは世界全体についてサーバ上でグローバルに計算され得るが、所与のプレイヤの周りの物についてのみ、クライアント上でも、または代替としてクライアント上で計算され得る。
【0096】
いくつかの実装形態では、ビデオゲームは、任意の所与の時間にどんな物が重要であるかまたは重要ではないかについての様々なヒントを提供し得る。物の重要性の変化は、シーンの所与の部分をストリーミングするためにどのくらいの帯域幅を専用化するかに関してストリーミング品質を変化させる可能性がある。
【0097】
いくつかの実装形態では、同様のビューポイントを有するクライアントは、すでに計算されているストリームを共有または再利用することができる。いくつかの実装形態では、サーバ上で実施されたレンダリングが共有され得る。たとえば、照明および/または影ならびに他の効果は、ビューに依存しない方法で計算され、異なるクライアントビューのための特定の画像を作成するために再利用され得る。いくつかの実装形態は、異なるクライアントにわたる計算の償却を含むことができる。
【0098】
いくつかの実装形態では、クライアント側の入力は、サーバおよびクライアントからの物理シミュレーションと共に、クライアント用の閲覧パラメータを決定するために使用され得る。サーバでレンダリングされたデータは、クライアント閲覧パラメータ用に再レンダリングまたはワーピングされ、任意のクライアント側レンダリングとコンポジット(または合成)される。いくつかの実装形態では、サーバは常に、クライアントが見ている場所に関してクライアントに「遅れを取っている」ことがあり、これが理由で、その不均衡に適合し、ラグがないクライアントビューを提供するために、クライアント側にはサーバが送ったデータ(ビデオストリーム)を「ワーピング」するためのプロビジョンがある。
【0099】
図9:例示的なコンピューティングデバイス
図9は、本明細書で説明される1つまたは複数の特徴を実装するために使用され得る例示的なコンピューティングデバイス900のブロック図である。
図1のクライアントデバイス110および116ならびに/またはゲーミングプラットフォーム102は、
図9のコンピューティングデバイス900の形態で提供され得る。1つの例では、デバイス900は、コンピュータデバイス(たとえば、
図1の102、110、および/または116)を実装するために、かつ本明細書で説明される適切な方法実装形態を実施するために使用され得る。コンピューティングデバイス900は、任意の好適なコンピュータシステム、サーバ、または他の電子デバイスもしくはハードウェアデバイスであり得る。たとえば、コンピューティングデバイス900は、メインフレームコンピュータ、デスクトップコンピュータ、ワークステーション、ポータブルコンピュータ、または電子デバイス(ポータブルデバイス、モバイルデバイス、セルフォン、スマートフォン、タブレットコンピュータ、テレビジョン、TVセットトップボックス、携帯情報端末(PDA)、メディアプレイヤ、ゲームデバイス、ウェアラブルデバイスなど)であり得る。いくつかの実装形態では、デバイス900は、プロセッサ902と、メモリ904と、入力/出力(I/O)インターフェース906と、オーディオ/ビデオ入力/出力デバイス914とを含む。
【0100】
プロセッサ902は、プログラムコードを実行し、デバイス900の基本動作を制御するための1つまたは複数のプロセッサおよび/または処理回路であり得る。「プロセッサ」は、任意の好適なハードウェアおよび/またはソフトウェアシステムと、データ、信号または他の情報を処理する機構またはコンポーネントとを含む。プロセッサは、汎用中央処理ユニット(CPU)、複数の処理ユニット、機能を実現するための専用回路構成、または他のシステムを有するシステムを含み得る。処理は、特定の地理的ロケーションに限定されるかまたは時間的限界を有する必要はない。たとえば、プロセッサは、その機能を「リアルタイム」で、「オフライン」で、「バッチモード」で、などで実施し得る。処理の部分は、異なる(または同じ)処理システムによって異なる時間に異なるロケーションにおいて実施され得る。コンピュータは、メモリと通信している任意のプロセッサであり得る。
【0101】
メモリ904は通常、プロセッサ902がアクセスするためにデバイス900に設けられ、任意の好適なプロセッサ可読記憶媒体、たとえば、プロセッサが実行するための命令を記憶するのに好適であり、プロセッサ902とは別個に配置されたかつ/またはプロセッサ902と統合された、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気的消去可能読取り専用メモリ(EEPROM)、Flashメモリなどであり得る。メモリ904は、オペレーティングシステム908と、1つまたは複数のアプリケーション910、たとえば、ハイブリッドビデオストリーミングアプリケーションと、アプリケーションデータ912とを含む、プロセッサ902によってサーバデバイス900上で動作するソフトウェアを記憶することができる。いくつかの実装形態では、アプリケーション910は、プロセッサ902が本明細書で説明される機能、たとえば、
図3もしくは
図4の方法の一部もしくは全部、または上記で説明された例示的な実装形態1もしくは2を実施することを可能にする命令を含むことができる。
【0102】
たとえば、アプリケーション910はオーディオ空間化モジュール912を含むことができ、オーディオ空間化モジュール912は、本明細書で説明されるように、オンラインゲーミングプラットフォーム(たとえば、102)内のオーディオ空間化を提供することができる。メモリ904内のソフトウェアのうちのいずれかは、代替として任意の他の好適なストレージロケーションまたはコンピュータ可読媒体上に記憶され得る。加えて、メモリ904(および/または他の接続されたストレージデバイス)は、本明細書で説明される特徴において使用される命令およびデータを記憶することができる。メモリ904および任意の他のタイプのストレージ(磁気ディスク、光ディスク、磁気テープ、または他の有形媒体)は、「ストレージ」または「ストレージデバイス」と見なされ得る。
【0103】
I/Oインターフェース906は、サーバデバイス900を他のシステムおよびデバイスとインターフェースすることを可能にする機能を提供することができる。たとえば、ネットワーク通信デバイス、ストレージデバイス(たとえば、メモリおよび/またはデータストア108)、および入力/出力デバイスは、インターフェース906を介して通信することができる。いくつかの実装形態では、I/Oインターフェースは、入力デバイス(キーボード、ポインティングデバイス、タッチスクリーン、マイクロフォン、カメラ、スキャナなど)および/または出力デバイス(ディスプレイデバイス、スピーカーデバイス、プリンタ、モニタなど)を含むインターフェースデバイスに接続することができる。
【0104】
オーディオ/ビデオ入力/出力デバイス914は、入力としてのオーディオメッセージを受信するために使用され得るオーディオ入力デバイス(たとえば、マイクロフォンなど)、
図3のステップ308の合成されたビデオ出力などのグラフィカル出力および視覚出力を提供するために使用され得るオーディオ出力デバイス(たとえば、スピーカー、ヘッドフォンなど)および/またはディスプレイデバイスを含むことができる。
【0105】
例示を簡単にするために、
図9は、プロセッサ902、メモリ904、I/Oインターフェース906、ならびにソフトウェアブロック908および910の各々に対して1つのブロックを示す。これらのブロックは、1つもしくは複数のプロセッサもしくは処理回路構成、オペレーティングシステム、メモリ、I/Oインターフェース、アプリケーション、および/またはソフトウェアモジュールを表し得る。他の実装形態では、デバイス900は示されているコンポーネントのすべてを有しなくてもよく、かつ/または、本明細書で示されている要素の代わりにもしくはそれらに加えて他のタイプの要素を含む他の要素を有してもよい。オンラインゲーミングプラットフォーム102は本明細書のいくつかの実装形態で説明されるような動作を実施するものとして説明されているが、オンラインゲーミングプラットフォーム102もしくは同様のシステムの任意の好適なコンポーネントもしくはコンポーネントの組合せ、またはそのようなシステムに関連付けられた任意の好適な1つもしくは複数のプロセッサが、説明される動作を実施してもよい。
【0106】
ユーザ(またはクライアント)デバイスはまた、本明細書で説明される特徴を実装することができるかつ/またはそれらの特徴と共に使用され得る。例示的なユーザデバイスは、デバイス900と同様のいくつかのコンポーネント、たとえば、プロセッサ902、メモリ904、およびI/Oインターフェース906を含むコンピュータデバイスであり得る。クライアントデバイスに好適なオペレーティングシステム、ソフトウェアおよびアプリケーションは、メモリにおいて提供され、プロセッサによって使用され得る。クライアントデバイスのためのI/Oインターフェースは、ネットワーク通信デバイスに、ならびに入力および出力デバイス、たとえば、サウンドをキャプチャするためのマイクロフォン、画像もしくはビデオをキャプチャするためのカメラ、サウンドを出力するためのオーディオスピーカーデバイス、画像もしくはビデオを出力するためのディスプレイデバイス、または他の出力デバイスに接続され得る。オーディオ/ビデオ入力/出力デバイス914内のディスプレイデバイスは、たとえば、本明細書で説明されるような前処理された画像および後処理された画像を表示するためにデバイス900に接続され(またはデバイス900に含まれ)得、ここで、そのようなディスプレイデバイスは、任意の好適なディスプレイデバイス、たとえば、LCD、LED、もしくはプラズマディスプレイスクリーン、CRT、テレビジョン、モニタ、タッチスクリーン、3-Dディスプレイスクリーン、プロジェクタ、または他の視覚ディスプレイデバイスを含むことができる。いくつかの実装形態は、オーディオ出力デバイス、たとえば、テキストを話す音声出力または合成を提供することができる。
【0107】
本明細書で説明される1つまたは複数の方法(たとえば、方法200または300の1つまたは複数のステップ)は、コンピュータ上で実行され得るコンピュータプログラム命令またはコードによって実装され得る。たとえば、コードは、1つまたは複数のデジタルプロセッサ(たとえば、マイクロプロセッサまたは他の処理回路構成)によって実装され得、非一時的コンピュータ可読媒体(たとえば、記憶媒体)、たとえば、半導体またはソリッドステートメモリ、磁気テープ、リムーバブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、フラッシュメモリ、剛性磁気ディスク、光ディスク、ソリッドステートメモリドライブなどを含む、磁気記憶媒体、光記憶媒体、電磁記憶媒体、または半導体記憶媒体を含むコンピュータプログラム製品上に記憶され得る。プログラム命令はまた、たとえば、サーバ(たとえば、分散型システムおよび/またはクラウドコンピューティングシステム)から配信されるソフトウェアアズアサービス(SaaS:software as a service)の形態で、電子信号内に含まれ、電子信号として提供され得る。代替として、1つまたは複数の方法は、ハードウェア(論理ゲートなど)において、またはハードウェアおよびソフトウェアの組合せにおいて実装され得る。例示的なハードウェアは、プログラマブルプロセッサ(たとえば、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス)、汎用プロセッサ、グラフィックスプロセッサ、特定用途向け集積回路(ASIC)などであり得る。1つまたは複数の方法は、システム上で動作するアプリケーションのコンポーネントの一部として、または他のアプリケーションおよびオペレーティングシステムと連携して動作するアプリケーションもしくはソフトウェアとして実施され得る。
【0108】
本明細書で説明される1つまたは複数の方法は、任意のタイプのコンピューティングデバイス上で実行され得るスタンドアロンプログラム、ウェブブラウザ上で実行されるプログラム、モバイルコンピューティングデバイス(たとえば、セルフォン、スマートフォン、タブレットコンピュータ、ウェアラブルデバイス(リストウォッチ、アームバンド、ジュエリー、ヘッドウェア、ゴーグル、眼鏡など)、ラップトップコンピュータなど)上で実行されるモバイルアプリケーション(「アプリ」)において実行され得る。1つの例では、クライアント/サーバアーキテクチャが使用され得、たとえば、(クライアントデバイスとしての)モバイルコンピューティングデバイスが、ユーザ入力データをサーバデバイスに送り、サーバから出力用(たとえば、ディスプレイ用)の最終的な出力データを受信する。別の例では、すべての計算は、モバイルコンピューティングデバイス上のモバイルアプリ(および/または他のアプリ)内で実施され得る。別の例では、計算はモバイルコンピューティングデバイスと1つまたは複数のサーバデバイスとの間で分けられ得る。
【0109】
本明細書はその特定の実装形態に関して説明されてきたが、これらの特定の実装形態は例示的なものにすぎず、限定的なものではない。例において示される概念は、他の例および実装形態に適用され得る。
【0110】
本開示で説明される機能ブロック、動作、特徴、方法、デバイス、およびシステムは、当業者に知られているであろうシステム、デバイス、および機能ブロックの異なる組合せに統合または分割され得ることに留意されたい。任意の好適なプログラミング言語およびプログラミング技法は、特定の実装形態のルーチンを実装するために使用され得る。異なるプログラミング技法、たとえば、手続き型またはオブジェクト指向が採用されてもよい。ルーチンは、単一の処理デバイスまたは複数のプロセッサ上で実行され得る。ステップ、動作、または計算は特定の順序で提示され得るが、異なる特定の実装形態では順序が変更されてもよい。いくつかの実装形態では、本明細書では順次的として示される複数のステップまたは動作は、同時に実施されてもよい。
【符号の説明】
【0111】
100 システムアーキテクチャ
102 オンラインゲーミングプラットフォーム、デバイス
104 ゲームエンジン、ローカルゲームエンジン
105 ゲーム
106 グラフィックスモジュール
107 ハイブリッドストリーミングモジュール
108 データストア
110 第1のクライアントデバイス、クライアントデバイス、デバイス、ユーザデバイス
112 ゲームアプリケーション
114 ユーザインターフェース
115 ハイブリッドストリーミングモジュール
116 第2のクライアントデバイス、クライアントデバイス、デバイス
118 ゲームアプリケーション
120 ユーザインターフェース
121 ハイブリッドストリーミングモジュール
122 ネットワーク
200 方法、デバイス実装方法
300 方法、デバイス実装方法
402 デバイス、サーバ
404 レンダリングされたバックグラウンドビデオ
406 ネットワーク
408 デバイス、クライアントデバイス
410 オブジェクト
412 コンポジットビデオ
602 バックグラウンドビデオフレーム
604 オブジェクト
702 構造物
704 構造物
706 構造物
708 道路
710 バックグラウンド部分
712 第1の深度
714 第2の深度
716 第3の深度
718 第4の深度
720 第5の深度
800 トップダウン可視化
801 深度ベースのビュー再投影
802 深度情報
804 カメラ
805 新しいカメラ位置
806 画像
808 線
810 深度、距離
812 光線
814 点
816 画像、新しい画像
900 コンピューティングデバイス、デバイス、サーバデバイス
902 プロセッサ
904 メモリ
906 入力/出力(I/O)インターフェース、I/Oインターフェース、インターフェース
908 オペレーティングシステム、ソフトウェアブロック
910 アプリケーション、ソフトウェアブロック
912 アプリケーションデータ、オーディオ空間化モジュール
914 オーディオ/ビデオ入力/出力デバイス