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

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

▶ ゼニマックス メディア インク.の特許一覧

特許7039546繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法
<>
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図1
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図2
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図3
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図4a
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図4b
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図4c
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図5
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図6a
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図6b
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図6c
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図7
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図8
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図9
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図10
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図11
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図12
  • 特許-繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-11
(45)【発行日】2022-03-22
(54)【発明の名称】繰り返される動きベクトルキャッシングによるプレイヤ入力の動き補償のためのシステムおよび方法
(51)【国際特許分類】
   H04N 19/44 20140101AFI20220314BHJP
   H04N 19/46 20140101ALI20220314BHJP
   H04N 19/51 20140101ALI20220314BHJP
   H04N 21/238 20110101ALI20220314BHJP
   H04N 21/438 20110101ALI20220314BHJP
   A63F 13/30 20140101ALI20220314BHJP
   A63F 13/40 20140101ALI20220314BHJP
   A63F 13/50 20140101ALI20220314BHJP
【FI】
H04N19/44
H04N19/46
H04N19/51
H04N21/238
H04N21/438
A63F13/30
A63F13/40
A63F13/50
【請求項の数】 15
(21)【出願番号】P 2019239578
(22)【出願日】2019-12-27
(62)【分割の表示】P 2020507502の分割
【原出願日】2018-04-20
(65)【公開番号】P2020078080
(43)【公開日】2020-05-21
【審査請求日】2020-04-23
(31)【優先権主張番号】62/488,526
(32)【優先日】2017-04-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/634,464
(32)【優先日】2018-02-23
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/640,945
(32)【優先日】2018-03-09
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/644,164
(32)【優先日】2018-03-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】519376166
【氏名又は名称】ゼニマックス メディア インク.
【氏名又は名称原語表記】ZENIMAX MEDIA INC.
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【弁理士】
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(72)【発明者】
【氏名】コピエッツ,ミヒャエル
【審査官】鉢呂 健
(56)【参考文献】
【文献】特表2009-503921(JP,A)
【文献】特表2015-509010(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00-19/98
H04N 21/00-21/858
A63F 13/30
A63F 13/40
A63F 13/50
(57)【特許請求の範囲】
【請求項1】
き推定方法であって、
1つ以上のユーザ入力と、動きベクトル(motion vector)の1つ以上の関連する組とで構成されたルックアップテーブルをサーバがクライアントに送信する段階、
プレイヤ入力の受信時マッチングされる動きベクトルに対して前記ルックアップテーブルに質疑(query)するための命令語を、前記サーバが前記クライアントに送信する段階、
固有のタグ(unique tag)を前記ルックアップテーブルからの前記マッチングされる動きベクトルと関連させタギングされた動きベクトルをキュー(queue)に追加するための命令語を前記サーバが前記クライアントに送信する段階、
エンコードされたビデオフレームを前記固有のタグとともに前記サーバが前記クライアントに送信する段階、および
前記サーバから前記エンコードされたビデオフレームとともに受信された前記固有のタグを有する動きベクトルを、前記キューから除去するための命令語を前記サーバが前記クライアントに送信する段階
を含み、
前記サーバがクライアントに前記エンコードされたビデオフレームを送信するとき、前記クライアントは、動きを推定するために前記ビデオフレームをデコードし、前記タギングされた動きベクトルを合計した動きベクトルを、デコードした前記ビデオフレームに適用するように指示を受ける、
方法。
【請求項2】
動きベクトルの前記1つ以上の関連する組の各々は、ビデオフレームの各マクロブロックに対するベクトルを有するベクトルフィールド(vector field)である、請求項1に記載の方法。
【請求項3】
前記タギングされた動きベクトルに滑らかな関数(smoothing function)を前記クライアントが適用する段階
を含む、請求項1に記載の方法。
【請求項4】
前記ビデオフレームでタギングされていない(untagged)動きベクトルを含むマクロブロック(macroblock)にデブロッキングフィルタ(deblocking filter)を前記クライアントが適用する段階
をさらに含む、請求項1に記載の方法。
【請求項5】
タギングされた動きベクトルは、一度適用される、請求項1に記載の方法。
【請求項6】
前記サーバは、
ビットストリーム(bitstream)として、前記クライアントにデータを送信する、
請求項1に記載の方法。
【請求項7】
前記エンコードされたビデオフレームは、エントロピデコード(entropy decoding)および逆量子化(inverse quantization)を通過する、請求項1に記載の方法。
【請求項8】
前記タギングされた動きベクトルを合計した前記動きベクトルと、前記エンコードされたビデオフレームの動きベクトルとについてのブレンディングプロセス(blending process)を前記クライアントが適用する段階
をさらに含む、請求項1に記載の方法。
【請求項9】
動き推定のためのシステムであって、
ネットワークを介し、サーバは、
プレイヤ入力の受信時マッチングされる動きベクトルに対してルックアップテーブルに質疑するための命令語をクライアントに送信し、
固有のタグを前記ルックアップテーブルからの前記マッチングされる動きベクトルと関連させタギングされた動きベクトルをキューに追加するための命令語を、前記クライアントに送信し、
エンコードされたビデオフレームを前記固有のタグとともに前記クライアントに送信し、
前記サーバから前記エンコードされたビデオフレームとともに受信された前記固有のタグを有する動きベクトルを、前記キューから除去するための命令語を、前記クライアントに送信し、
前記サーバが前記クライアントに前記エンコードされたビデオフレームを送信するとき、前記クライアントは、
動きを推定するために前記ビデオフレームをデコードし、前記タギングされた動きベクトルを合計した動きベクトルを、デコードした前記ビデオフレームに適用するように指示を受ける、
システム。
【請求項10】
前記ルックアップテーブルに含まれる動きベクトルの1つの組は、ビデオフレームの1つのマクロブロックに対するベクトルを有するベクトルフィールド(vector field)である、請求項9に記載のシステム。
【請求項11】
滑らかな関数が前記タギングされた動きベクトルに適用される、請求項9に記載のシステム。
【請求項12】
デブロッキングフィルタが前記ビデオフレームでタギングされていない動きベクトルを含むマクロブロックに適用される請求項9に記載のシステム。
【請求項13】
前記サーバは、
ビットストリームとして、前記クライアントにデータを送信する、
請求項9に記載のシステム。
【請求項14】
前記エンコードされたビデオフレームは、エントロピデコードおよび逆量子化を通過する、請求項9に記載のシステム。
【請求項15】
前記タギングされた動きベクトルを合計した前記動きベクトルと、前記エンコードされたビデオフレームの動きベクトルとについて、ブレンディングプロセスが適用される、請求項9に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2017年4月21日に出願された米国仮出願第62/488,526号、2018年2月23日に出願された米国仮出願第62/634,464号、2018年3月9日に出願された米国仮出願第62/640,945号、および2018年3月16日に出願された米国仮出願第62/644,164号の利益を主張する。
【背景技術】
【0002】
サーバ側のゲームがクライアント側のプレイヤによって制御されるリモートゲーミングアプリケーションは、既存のまたはカスタマイズされたエンコーダを使用し、リアルタイムで3Dグラフィックスエンジン(graphics engine)からのビデオ出力をエンコードすることを試みていた。しかし、ビデオゲームの会話形式の特性、特に、ビデオ出力とプレイヤ入力との間のプレイヤフィードバックループ(player feedback loop)は、ゲームビデオストリーミングの待機時間(latency)が一般的なビデオストリーミングよりも極めて長い。既存のビデオコーディング方法は、エンコード時間を減らすために計算能力(computational power)を交換することができるが、その他の方法はない。エンコードプロセスをビデオレンダリングプロセスに統合するための新たな方法は、エンコード時間を著しく減らすことができる上に、計算能力を低め、エンコードされたビデオの品質を改善し、既存のハードウェアデバイスの相互運用性を維持するためにオリジナルビットストリームデータ形式(original bitstream data format)を維持するようになる。
【0003】
通常のビデオ再生とは異なり、ビデオゲームは、ビデオフィードループ(loop)に固有の(unique)プレイヤ入力が生じる。プレイヤは、入力からビデオ出力までの待機時間(latency)に極めて敏感である。このようなプレイヤ入力フィードバックループにおける長い待機時間は、サーバホストビデオゲームインスタンス(instance)が遠隔のプレイヤによって制御されるビデオゲームストリーミングアプリケーションに対して大きな障害物となる。入力からフィードバックまでの時間を減らすことができるプロセスがあれば、ユーザ経験の直接的な改善に繋がるはずである。
【0004】
ゲームストリーミング環境において、クライアントハードウェアは多様な水準の計算性能を備えるが、専用H.264ハードウェアデコーダがモバイルおよび他の低電力デバイスにおいて最も普遍的である。ハードウェアデコーダは、動き補償(motion compensation)のようなH.264コーディング標準によって通常的に行われる計算の小さな選択を実行するのに強い。専用コーディングハードウェアの強みは、クライアントの全体計算能力に関係なく、ゲームストリーミング環境において優れたプレイヤ経験を提供できるというところにある。
【0005】
ローカル(local)、すなわち、ストリーミングされない(non-streamed)レンダリングアプリケーションにおいて、ゲームエンジンは、プレイヤ入力とビデオフィードバックとの間に複数のフレームからなる待機時間を追加する。ゲームストリーミングアプリケーションではプレイヤ入力がネットワークを介してリモートサーバに伝達されなければならず、プレイヤがフィードバックを受信する前に、ビデオ出力がエンコードされて送信されてデコードされなければならないため、追加の待機時間がプレイヤ入力フィードバックサイクルに追加されざるを得ない。いくつかのプレイヤ入力に対し、クライアントは、即時に動き補償を実行してビデオフィードバックに対する結果を推定し、ネットワークの待機時間を減らすことができる。
【0006】
ビデオゲームがネットワークのクライアントによって遠隔で制御されながらサーバで実行される状況において、入力フィードバック待機時間の減少のために一部のイメージ正確度を犠牲にするために、プレイヤ入力の動き補償は、最も基本的にピクセルのグループをシフト(shift)させる技術である。このような技術は、1人称ゲームにおける、プレイヤビュー(view)の回転のような一定の動きベクトルをもたらす入力に対するプレイヤフィードバック待機時間を減らすのに強い。
【0007】
ビデオゲームにおいて、プレイヤコンテキストは、以前のプレイヤアクション、入力、および決定の結果である現在のゲーム状態によって定義される。ゲームストリーミングシステムにおいて、クライアントは、プレイヤコンテキストを認知していない。すなわち、クライアントは、ビデオ出力を受信するだけで、特定のプレイヤ入力の結果を決定するゲーム状態情報は受信しないのである。ゲーム状態情報を基盤に、固有でありながらも予測可能な動き成果(outcome)を引き起こす多様な入力がある。このような入力は、プレイヤフィードバック待機時間の減少という利点はあるが、クライアントはプレイヤコンテキスト情報を有さないため、従来のプレイヤ入力の動き補償のためにクライアントにプレキャッシングされることができない。また、プレイヤコンテキストの順列空間は、キャッシングされた、繰り返される動きベクトルのような方法によって動きベクトルを予め生成するため、極めて完全であると言える。このようなシステムおよび方法は、米国仮出願第62/488,526号、第62/634,464号、および第62/640,945号に記載されており、このすべては本明細書に統合される。ゲームサーバは、予測された動きベクトルを生成し、プレイヤコンテキストの変更によってクライアント入力の動き補償キャッシュ(cache)をアップデートすることにより、補償が成り立つ。これは、クライアントが制限されたコンテキスト従属入力のセットに対してプレイヤ入力の動き補償手法を使用することを許容し、入力フィードバック待機時間の減少をもたらす。
【0008】
米国特許第9,661,351号(‘351特許)は、サーバからクライアントデバイスへの送信の間、フレームをスキップ(skip)するためのシステムおよび方法を開示している。ここで、スキップされたフレームを検出することに応答し、クライアントデバイスは、圧縮されたビデオストリームでスキップされたフレームの代わりとなる予測されたフレームを生成し、予測されたフレームは、クライアントデバイスによってデコードされた1つ以上の以前フレームからデルタ(delta)情報を拡張させることを基盤に生成される。このような技術に対し、1つ以上の再構成されるか予測されたフレームのクライアント側のフレーム予測は、1つ以上の先行する(preceding)プレイのデータ(例えば、動きベクトル、残差(residual)など)を基盤としてスキップされたフレームの次に使用される。また、技術は、ビート割り当ておよび/または補助機能(sub feature)エンコードを優先視する。エンコードされたネットワーク抽象化層ユニット(Encoded Network Abstraction Layer Unit:NALU)は、(1)動きベクトル、および(2)残差に分割される。実際にフレームをスキップする代りに、装置は、優先順位にしたがって最小限のエンコードデータだけを送信することができる。例えば、動きの優先順位が指定されると、動きベクトルだけが送信されるようになる。少なくとも‘351特許には、サーバから送信されたルックアップテーブルを、ユーザ入力を動きベクトルとタグ(tag)にマッチングさせることに使用し、この動きベクトルを合算するクライアントデバイスは開示されていなため、本発明は‘351特許の技術よりも優れていると言える。また、‘351特許には、デコードされたフレームにおける動きを推定するために、このフレームに対するこの合算された動きベクトルを適用することは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターン(return)するのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0009】
米国特許第8,678,929号(‘929特許)は、ネットワークの会話型ゲームシステムの動作に関する。開示される方法は、2つのブレンディング(blending)方式によって共有されたグローバルオブジェクト(global object)に対してコース訂正された位置値を決定することにより、ネットワーク遅延を減少させることにフォーカスを合わせている。この特許に記載された「ブレンディング」は、ローカルコンソール(local console)からローカルプレイヤのポーズ(pose)計算を送信するネットワークシミュレーション(network simulation)段階を含む。コンソールは、ローカルおよびネットワークシミュレーションをブレンディングする。また、方法は、ローカルコンソールで共有されたグローバルオブジェクトに対する位置値を決定するのにローカルプレイヤのブレンディングされたポーズを使用することにより、共有されたグローバルオブジェクトをブレンディングする。少なくとも‘929特許には、サーバから送信されたルックアップテーブルを、ユーザ入力を動きベクトルにマッチングさせることに使用し、この動きベクトルをタギングして合算するクライアントデバイスは開示されていなため、本発明は‘929特許の技術よりも優れていると言える。また、‘929特許には、デコードされたフレームにおける動きを推定するために、このフレームに対するこの合算された動きベクトルを適用することは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0010】
米国特許第8,069,258号(‘258特許)は、マルチプレイヤシミュレーションのネットワーク支援を明白に減少させるためにローカルフレーム処理を使用することに関する。ここに記載された方法は、ローカルユーザからの入力をインタセプト(intercept)する段階、以前のゲームフレームからネットワークシミュレーションのリモートオブジェクトの状態データを決定する段階、およびネットワークシミュレーションの一部である複数のゲームシステムから非決定的(nondeterministic)オブジェクトの相互作用(interaction)を決定する段階を含む。この相互作用データは、状態データおよびローカル入力とともに、ビデオフレームのローカルシミュレーションを生成するのに使用される。このような方式により、ローカルおよびネットワークシミュレーションは、単一フレームに対して非同期的に実行されるようになり、各フレームは、ゲーム内の単一時間フェーズ(phase)に対応する。これは、ローカルシミュレーションがネットワークゲームプレイ(gameplay)中にリアルタイムでアップデートされ、ネットワークと(実質的に)同期化されるように許容する。少なくとも‘258特許には、サーバから送信されたルックアップテーブルを、ユーザ入力を動きベクトルにマッチングさせるのに使用し、この動きベクトルをタギングして合算するクライアントデバイスは開示されていないため、本発明は‘258特許の技術よりも優れていると言える。また、‘258特許には、デコードされたフレームにおける動きを推定するために、このフレームに対するこの合算された動きベクトルを適用することは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0011】
米国特許第9,665,334B2号(‘334特許)は、ディスプレイ上の結合するグラフィックスをレンダリングするために複数のプロセスと合成器(compositor)を適用するプロトコルをレンダリングするためのシステムおよび方法を開示している。この技術は次のように動作する。サーバが同時に複数のクライアントデバイスにゲームスクリーンを提供するとき、サーバにおけるレンダリングプロセッシングの計算負荷(load)は、例えば、迅速な応答性を求めるゲームコンテンツにおいて過重となる。すなわち、サーバがスクリーンを提供する複数クライアントデバイスは、サーバのレンダリング性能および求められる応答性によって制限される。これとは対照的に、各クライアントデバイスは、サーバとクライアントデバイスとの間にレンダリングプロセスを共有させるために、一般的なレンダリング性能によって実行されるプロセッシングを実行するように制御されるとき、スクリーンはより多くのクライアントデバイスに提供されることができる。また、一般的に、テクスチャマッピング(texture mapping)を適用しなくても、レンダリングされるゲームスクリーンは高い圧縮効率を有し、インターネットのようなネットワークを介してより小さな帯域幅で送信されることができる。少なくとも‘334特許には、予め決定された基準に基づいてサーバで動きベクトルを生成し、生成された動きベクトルと1つ以上のインバリデータ(invalidator)をクライアントに送信し、クライアントがこの動きベクトルとインバリデータをキャッシングすることは開示されていないため、本発明は‘334特許に記載された技術よりも優れていると言える。また、‘334特許には、サーバがユーザから入力を受信するようにクライアントに指示し、その入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせるのに使用し、このベクトルまたはインバリデータが動き補償に使用されることは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるため優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0012】
米国特許第9,736,454号(‘454特許)は、テクスチャブロック(texture block)とともに配置された深さブロック(depth block)の利用可能性を検査し、ともに配置された深さブロックの利用可能性に基づいてテクスチャブロックに対する予測方法を決定し、ともに配置された深さブロックの利用可能性に基づいてテクスチャブロックに対する第1予測ブロック(first prediction block)を導き出すことを含む、エンコードのためのシステムおよび方法を開示している。少なくとも‘454特許には、予め決定された基準に基づいてサーバで動きベクトルを生成し、生成された動きベクトルと1つ以上のインバリデータをクライアントに送信し、クライアントがこの動きベクトルとインバリデータをキャッシングすることは開示されていないため、本発明は‘454特許に記載された技術よりも優れていると言える。また、‘454特許には、サーバがユーザから入力を受信するようにクライアントに指示し、その入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせるのに使用し、このベクトルまたはインバリデータが動き補償に使用されることは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0013】
米国特許第9,705,526号(‘526特許)は、メディア(media)およびイメージアプリケーションにおけるエントロピ(entropy)エンコードのためのシステムおよび方法を開示している。その技術は、圧縮が指示されたイメージおよび/またはビデオデータのソースを受信することによって始まるシステムを開示している。また、無損失の(lossless)圧縮方式が適用される。また、予測器(predictor)/デルタ計算ユニット(delta computation unit)が入力を採択し、隣接する入力エレメント(element)間のデルタ計算を使用して入力データの余分(redundancy)を減少しようとする。さらに、この値は、圧縮されたイメージおよび/またはビデオデータを生成するために、エントロピエンコーダにおいて予め定義された統計モデリングによってエンコードされる。上述と同じように、少なくとも‘526特許には、予め決定された基準に基づいてサーバで動きベクトルを生成し、生成された動きベクトルと1つ以上のインバリデータをクライアントに送信し、クライアントがこの動きベクトルとインバリデータをキャッシングすることは開示されていないため、本発明は‘526特許に記載された技術よりも優れていると言える。また、‘526特許には、サーバがユーザから入力を受信するようにクライアントに指示し、その入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせることに使用され、このベクトルまたはインバリデータが動き補償に使用されることは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0014】
米国特許第8,873,636B2号(‘626特許)は、ゲームのローカルインスタンスを実行するユーザPCに、コーディングされたイメージデータを提供する動画(moving-image)配布(distribution)サーバ(例えば、オンラインゲームを実行するサーバ)に関する。このプロセスを具体的に実行するために、ユーザPCのCPUは、先行するフレームスクリーンで選択されたブロックと関連する動きベクトルをデコードするために参照される領域を指定する。これは、選択されたブロックと関連する動きベクトル(提供されるプレプロセッシング(pre-processing)情報に含まれたベクトル)を参照して実行され、領域のイメージを参照イメージで抽出する。他の参考文献と同じように、少なくとも‘636特許には、予め決定された基準に基づいてサーバで動きベクトルを生成し、生成された動きベクトルと1つ以上のインバリデータをクライアントに送信し、クライアントがこの動きベクトルとインバリデータをキャッシングすることは開示されていないため、本発明は‘636特許に記載された技術よりも優れていると言える。また、‘636特許には、サーバがユーザから入力を受信するようにクライアントに指示し、その入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせることに使用し、このベクトルまたはインバリデータが動き補償に使用されることは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0015】
国際公開特許第WO2009138878 A2号(‘878公報)は、多様なレンダリングされたオブジェクトの詳細レベルおよびポストフィルタリング(post-filtering)を制御しながら、中央集中式ストリーミングアプリケーションサーバで複数の会話型アプリケーションをプロセッシングおよびストリーミングすることに関する。システムにおいて、中央集中式ストリーミングアプリケーションサーバは、このビデオプレプロセッサにおいて圧縮されたストリームをデコードし、コンテンツをディスプレイするクライアントデバイスへのオーディオビジュアル(audio-visual)コンテンツの圧縮されたストリームをエンコードする前に、フレームシーケンスに空間および時間フィルタリングを実行する。中央集中式の会話型アプリケーションサーバのGPUコマンド(command)プロセッサは、ビデオエンコーダのターゲットエンコードされたフレーム内の各マクロブロック(macroblock)に対して動き補償推定を計算したりするモジュールを含む。これにもかかわらず、少なくとも‘878公報には、予め決定された基準に基づいてサーバで動きベクトルを生成し、生成された動きベクトルと1つ以上のインバリデータをクライアントに送信し、クライアントがこの動きベクトルとインバリデータをキャッシングすることは開示されていないため、本発明は‘878公報に記載された技術よりも優れていると言える。また、‘878公報には、サーバがユーザから入力を受信するようにクライアントに指示し、その入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせることに使用し、このベクトルまたはインバリデータが動き補償に使用されることは開示されていない。さらに、本発明は、入力フィードバック待機時間を減少させるのに優れており、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0016】
米国特許第9,358,466B2号(‘466特許)は、キャッシングされたデータを再使用することによってビデオゲーム性能を向上させることに関する。開示されるシステムは、使用されたデジタル資産を識別し、識別されたデジタル資産がキャッシュ(cache)内に存在するか否かを判断することにより、相異して生成されたビデオゲームミッション(mission)のキャッシュ性能に少なくとも部分的にスコア(score)を付与する。キャッシュスコアは、既にキャッシュに存在するミッションに対するデジタル資産の割合に該当するキャッシュ再使用率に基づいて計算される。キャッシュスコアを生成する他の技術は、既にキャッシュに存在するミッションに対する結合されたデジタル資産の全体サイズ、および/またはまだキャッシュに存在しないミッションに対する結合されたデジタル資産の全体サイズのようなファクタ(factor)を説明する。このような方式によってデータをキャッシングすることにより、このデータと異なる、キャッシングされていないデータはより効率的になる。少なくとも‘466特許には、繰り返される動きベクトルをキャッシングしたり、入力データから動き推定を計算したり、入力データに基づいて記録された動きベクトルライブラリ(motion vector library)をアップデートしたりするため、これにより、クライアントがサーバから実際の動きベクトルデータを受信する前に動きを開始させないために、記録された動きベクトルライブラリを使用することができることは開示されていないため、本発明は‘466特許に記載された技術よりも優れていると言える。
【0017】
米国特許第6,903,662 B2号(‘662特許)は、構成可能なコンピュータ入力デバイス、特に、迅速な応答時間を維持するために入力データをキャッシングする入力デバイスに関する。システムは、特定のキーが以前に識別されたかを確認するために、内部メモリ(またはキャッシュ)に対してキープッシュを確認することにより動作する。この後、この時点よりも前にシステムがキーと通信していなければ、システムはこのキーメモリから入力に対応するデータを検索する。この後、システムは、その内部メモリ(キャッシュ)をキーアイデンティティ(identity)とこれに対応するデータとしてアップデートする。この後、システムは、キーからの入力データをホストコンピュータに送信する。しかし、次に、システムがプッシュされた状態の同一のキーを見つければ、キーメモリから同一のスキャンコードを再検索する代りに、自体のメモリ(キャッシュ)を照会する(query)。少なくとも‘662特許には、繰り返される動きベクトルをキャッシングしたり、入力データから動き推定を計算したり、入力データに基づいて記録された動きベクトルライブラリをアップデートしたりし、これにより、クライアントがサーバから実際の動きベクトルデータを受信する前に動きを開始させるために、記録された動きベクトルライブラリを使用することができることは開示されていないため、本発明は‘622特許に記録された技術よりも優れていると言える。
【0018】
日本特許第JP6129865B2号(‘865特許)は、ゲームコンテンツデータがリアルタイムゲームプレイ中の必要時に利用可能なように、経路(path)セグメント(segment)のサブセット(subset)に対するレンダリングされたゲームコンテンツデータをローカルキャッシュにキャッシングするための、ゲームクライアントに送信するためのシステムおよび方法を開示している。少なくとも‘865特許は、繰り返される動きベクトルをキャッシングしたり、入力データから動き推定を計算したり、入力データに基づいて記録された動きベクトルライブラリをアップデートしたりし、これにより、クライアントがサーバから実際の動きベクトルデータを受信する前に動きを開始させるために、記録された動きベクトルライブラリを使用することができることは開示されていないため、本発明は‘865特許に記載された技術よりも優れていると言える。
【0019】
米国特許第9,762,919号(‘919特許)は、ブロックプロセッシングパイプライン(block processing pipeline)において参照データをキャッシングするためのシステムおよび方法を開示している。‘919特許技術は、例えば、SRAM(static random access memory)のようなローカル(パイプライン)メモリで実現されることのできるキャッシュメモリを開示しており、パイプラインの初期ステージ(stage)でマクロブロックに対して決定される動きベクトルに対応するクロマ参照データ(chroma reference data)の部分(例えば、64バイトのメモリブロック)がメモリからプレフェッチ(prefetched)される。クロマキャッシュロジック(chroma chche logic)は、キャッシュを維持することができ、パイプラインの複数のステージに拡張される。パイプラインを通過する与えられたマクロブロックの動きベクトルに対するフェッチ(fetch)は、クロマ動き補償が必要となる前に、メモリからキャッシュに繰り返されるメモリブロックを読み取るため、時間(すなわち、複数のパイプラインサイクル(cycle))を提供するクロマ動き補償ステージの以前の1つ以上のステージでクロマキャッシュロジックによって始めることができる。しかし、‘919特許も、本発明に比べると不足である。少なくとも‘919特許には、繰り返される動きベクトルをキャッシングしたり、入力データから動き推定を計算したり、入力データに基づいて記録された動きベクトルライブラリをアップデートしたりし、これにより、クライアントがサーバから実際の動きベクトルデータを受信する前に動きを開始させるために、記録された動きベクトルライブラリを使用することができることは開示されていないため、本発明は‘919特許に記載された技術よりも優れていると言える。
【0020】
このような技術における最新技術に関する説明によって明らであるが、リアルタイムゲーム環境のエンコードと関連する現在のコンピュータ技術に対する改善が、本技術分野において求められている。
【発明の概要】
【発明が解決しようとする課題】
【0021】
したがって、本発明の目的は、クライアントデバイスがユーザ入力を動きベクトルにマッチングさせるためにサーバから送信されたルックアップテーブルを使用し、この動きベクトルをタギングして合算する、動き補償手法によって待機時間を減少させるためのシステムおよび方法を開示することにある。リモートサーバがクライアントにエンコードされたビデオフレームを送信するとき、クライアントは、このビデオフレームをデコードし、このフレーム内の動きを推定するために合算された動きベクトルをデコードされたフレームに適用する。
【0022】
本発明の他の目的は、エンコードされたフレームが残差ハンドリング(residual handling)されることなくデコードされるシステムおよび方法を開示することにある。
【0023】
本発明のまた他の目的は、クライアントが1つ以上の滑らかな関数(smoothing function)をキュー内の合算されたタギングされた動きベクトルに適用する、動き補償手法によって待機時間を減少させるためのシステムおよび方法を開示することにある。
【0024】
本発明のさらに他の目的は、クライアントデバイスにおいて、動きベクトルと関連するタグは、実質的に時系列(chronological)である、動き補償手法によって待機時間を減少させるためのシステムおよび方法を開示することにある。
【0025】
本発明の目的は、予め決定された基準に基づいてサーバで動きベクトルを生成し、クライアントに生成された動きベクトルと1つ以上のインバリデータ(invalidator)を送信することにより、クライアントがこの動きベクトルとインバリデータをキャッシングする、入力フィードバック待機時間を減少させるためのシステムおよび方法を提供することにある。サーバは、ユーザから入力を受信し、この入力を動きベクトルまたはインバリデータとマッチングさせることに使用するようにクライアントに指示する。また、この比較に基づき、クライアントは、マッチングされた動きベクトルまたはインバリデータをグラフィックインタフェース(graphic interface)のエフェクト動き(effect motion)補償に適用する。
【0026】
本発明の他の目的は、動きベクトルをルックアップテーブルにキャッシングすることにより、入力フィードバック待機時間を減少させるためのシステムおよび方法を提供することにある。
【0027】
本発明のまた他の目的は、インバリデータを1つ以上のキャッシングされた動きベクトルと関連させることにより、入力フィードバック待機時間を減少させるためのシステムおよび方法を提供することにある。
【0028】
本発明のさらに他の目的は、入力が1つ以上の動きベクトルと関連するキャッシングされたインバリデータにマッチングされると、1つ以上のキャッシングされた動きベクトルを削除するようにクライアントに指示することにより、入力フィードバック待機時間を減少させるためのシステムおよび方法を提供することにある。
【0029】
本発明の目的は、クライアントに予め生成された動きベクトルライブラリ(motion vector library)を送信するサーバにおいて、繰り返される(repetitive)動きベクトルをキャッシングすることにより、待機時間を減少させるためのシステムおよび方法を開示することにある。クライアントは、動きベクトルライブラリを記録し、ユーザ入力データをモニタリングする。サーバは、入力データから動き推定を計算するようにクライアントに指示し、入力データに基づいて記録された動きベクトルライブラリをアップデートするようにクライアントに指示する。これにより、クライアントは、サーバから実際の動きベクトルデータを受信する前にグラフィックインタフェースの動きを開始させるために、記録された動きベクトルライブラリを適用する。
【0030】
本発明の他の目的は、サーバが記録された動きベクトルライブラリの適用をディスエーブルさせるためにコンテキストアップデート(context update)を送信する、繰り返される動きベクトルをキャッシングすることにより、待機時間を減少させるためのシステムおよび方法を開示することにある。
【0031】
本発明のさらに他の目的は、1つ以上のスケーリングファクタ(scaling factor)が動きベクトルライブラリに適用される、繰り返される動きベクトルをキャッシングすることにより、待機時間を減少させるためのシステムおよび方法を開示することにある。
【0032】
添付の図面は、後述する詳細な説明を参照することでより適切に理解することができるため、本発明の完全な理解およびこれによる多くの利点を容易に得ることができるであろう。
【図面の簡単な説明】
【0033】
図1】ビデオゲームがリモートクライアントの入力によって制御されながらサーバで実行される遠隔ゲームシステムを例示的に示したブロック図である。
図2】適切なプレイヤ入力に対する動き補償を適用することにより、ゲームストリーミングアプリケーションにおける入力フィードバック待機時間の減少を例示的に説明示したフローチャートである。
図3】プレイヤ入力の動き補償を利用するビデオゲームストリーミング環境のランタイム中の例示的な瞬間を例示的に示したブロック図である。
図4図3のプレイヤ入力の動き補償中のマクロブロックを例示的に示した図である。
図5】クライアントにおいてプレイヤ入力の動き補償中の動きベクトルを適用するための代案的な方法を例示的に示した図である。
図6図6a、図6b、および図6cは、プレイヤ入力の動き補償および図5に示された代案的な方法に対するブレンディング(blending)を経る例示的なマクロブロックを示した図である。
図7】予測された動きベクトルのランタイム生成を示した図である。
図8】プレイヤ入力の動き補償を目的とする予測された動きベクトルの送信およびクライアント側の記録を例示的に示したフローチャートである。
図9】予測された動きベクトルを無効にする(invalidating)例示的なプロセスを示した図である。
図10】動きベクトルライブラリを生成するための例示的な方法およびキャッシング目的のための例示的な繰り返される動きベクトルライブラリを示した図である。
図11】プレイヤ入力の動き補償のために動きベクトルライブラリをキャッシング、適用、およびアップデートするためのプロセスを例示的に示したフローチャートである。
図12】動きベクトルマッピングがアップデートされるか否かを例示的に示した図である。
図13】キャッシングされた動きベクトルの場合に、プレイヤ入力の動き補償中にマルチフレーム動きベクトルを適用するための例示的な修正を示した図である。
【発明を実施するための形態】
【0034】
図面に示す発明の好ましい実施形態を説明するにあたり、明確化のために、特定の用語に依存することがある。しかし、本発明は、このように選択された特定の用語に限定されることを意図しておらず、それぞれの特定の用語は、類似の目的を達成するために類似の方式で作動するすべての技術的等価物を含むものと理解されなければならない。本発明の好ましい実施形態は、例示の目的として記載されているが、本発明は、図面に具体的に示されていない他の形態によっても実現可能であることが理解されなければならない。
特定の類型のプレイヤ入力は、プレイヤ入力の動き補償のためのより適した候補を生成する。2つのファクタ(factor)が与えられた入力の適合性(suitability)に寄与する。入力フィードバック待機時間に対するプレイヤ敏感度(sensitivity)および相当なアーティファクト(artifact)を導入せずにプレイヤ入力の動き補償を実現するには困難がある。各入力は、適合性に対して評価される必要がある。例えば、1人称シューティングゲーム(shooter game)において、プレイヤは、マウス基盤(mouse-based)のビュー回転に極めて敏感であり、プレイヤ入力からビデオ出力まで約16msという1秒にもならないディレイ(delay)まで認識されるであろう。しかし、同じような状況において、ゲームパッド(gamepad)コントローラ基盤のビュー回転は、一般的にこれよりは遅く、プレイヤは、入力フィードバック待機時間にそれほど敏感でない。ビュー回転は、回転の反対方向にシーン(scene)をシフトさせることによって同じようにすることができるが、回転方向にイメージのエッジ(edge)に沿って好ましくないアーティファクトが存在することがある。スクリーン上の照準(aim)を調節することのような小さなビュー回転に対し、プレイヤは、エッジアーティファクトを認識できないこともある。他の例において、ドライビングゲーム(driving game)において、加速する車は、プレイヤの敏感性および/または待機時間に対する慣性(inertia)の不足によりプレイヤ入力の動き補償に対して低い優先順位となるが、ステアリング(steering)およびブレーキング(braking)入力は、プレイヤが入力フィードバック待機時間を認識するはずであるため、高い優先順位となる。
【0035】
プレイヤ入力の受信から動き出力がディスプレイされるまでの時間がプレイヤフィードバック待機時間となる。動き補償を使用することによって推定された動きは、プレイヤ入力を処理するようにサーバを待ちながら、ほぼ即時にフィードバックを提供することができる。このような方式により、プレイヤフィードバック待機時間は、ゲームストリーミングアプリケーションにおいて大きく減少される。ゲームストリーミングアプリケーションにおいてプレイヤ入力の動き補償を実現することにより、動き推定は、次の利用可能なフレームで提供されるようになる。これとは対照的に、入力がサーバに移動し、フレームを生成し、リターンされるには、複数のフレームを経るようになる。また、プレイヤ入力の動き補償は、ゲームエンジンおよびレンダラ(renderer)が複数のフレームのプレイヤフィードバック待機時間を有する既存のストリーミングされない(non-streamed)ゲームアプリケーションにおいて利点を提供することができる。
【0036】
クライアントは、スクリーン周辺のオブジェクトの移動を追跡するための適切なコンテキストを有さないであろう。プレイヤ入力の動き補償は、特定のマクロブロックまたはビデオオブジェクトの位置をクライアントが認知しない場合には適さない。例えば、二次元プラットフォームゲーム(platformer game)において、キャラクタ(character)は、左側から右側にスクリーン周辺を移動する。クライアントは、プレイヤがジャンプを入力(jump input)したとき、キャラクタがどこに位置するか認知することができない。したがって、このような場合に入力フィードバック待機時間を減少させるために、プレイヤ入力の動き補償だけが使用されることはない。
【0037】
一般的に、プレイヤ入力の動き補償のための動きベクトルは、予め生成されなければならない。プレイヤのカメラ回転のような動きに対し、動きベクトルは、ゲームが入力にどのように加重値を付与するかに基づいて計算されてよい。一例として、動きベクトルは、入力値に感度重み(sensitivity weight)を掛けたものであってよい。アニメーションの移動のような直接に計算することのできない動きに対し、動きが直接に測定されて記録されるように、アニメーションは、デベロップメント(development)中にトリガーされてよい。動きベクトルを測定することは、H.264エンコード中に実行される同一の動き推定技術によって達成されてよい。
【0038】
図1は、ビデオゲームがリモートクライアントによって制御される例示的なシステムを示した図である。このシステムにおいて、サーバ100は、ビデオゲームソフトウェア120およびビデオ出力をレンダリングするグラフィックスエンジン(graphics engine)104をホスティングする。ビデオは、コーデック(コーディングエンジンまたはエンコーダとも呼ばれる)106でエンコードされ、エンコードされたビデオデータ108はリモートクライアントに送信される。サーバアキテクチャ(server architecture)100は、グラフィックスエンジン104とコーデック106の両方の機能を支援することのできるハードウェアまたはソフトウェアのいずれかの組み合わせであってよい。図に示す例において、グラフィックスエンジン104は、例えば、複数のコンピュータ読み取り可能なメモリ112にロードされたビデオゲームソフトウェア120によって制御されるGPU110で実現されてよく、この反面、コーデック106は、ビデオエンコードソフトウェアを実行するCPU114で実現されてよい。
【0039】
リモートクライアントは、送信されたエンコードされたビデオデータ108をデコードするためのコーデック118と、プレイヤ入力の動き補償を適用するためのクライアントアプリケーション120を実行することのできるコンピュータシステム116で構成される。また、クライアントコンピュータシステム116は、ディスプレイハードウェア124を実行させるためのディスプレイコントローラ122を含む。クライアント側の入力周辺機器(peripheral)126からの入力は、クライアントアプリケーション120により、サーバ100から実行されるゲームソフトウェア102に再送信されるコントロールデータ128として変換される。また、周辺機器126からの入力は、図2でより詳細に示すように、適用するプレイヤ入力の動き補償があれば、どのようなものであるかを決定するのに使用されるであろう。
【0040】
図2は、単一(single)入力に対するプレイヤ入力の動き補償を実行するのに求められる段階を説明するためのフローチャートである。クライアントが初期化するとき、段階200において、サーバは、入力と、これと関連する動きベクトルを含むルックアップテーブルを送信する。この後、段階202において、ルックアップテーブルは、クライアントによってキャッシングされる。このような実施形態において、クライアントは、複数のストリーミングゲームの要求を満たすように一般化される。特定の実施形態において、特定のクライアントは、ゲームに対するルックアップテーブルを既に有していることがあるため、段階200および202はスキップされてよい。代案的な実現において、ゲームの特定のクライアントは、サーバからキャッシングされることなく、動きベクトルルックアップテーブルを永久的に記録することも可能である。
【0041】
段階204において、クライアントがマウス(mouse)またはゲームパッド(gamepad)コントローラのような入力デバイスからプレイヤ入力を受信すると、段階206において、クライアントアプリケーションは、キャッシングされた動きベクトルルックアップテーブルからマッチングされる入力を確認する。マッチングされるプレイヤ入力がなければ、クライアントは、追加のアクション(action)は取らずに、追加の修正なくサーバに入力を送信する。キャッシュ(cache)にマッチングされるプレイヤ入力があれば、クライアントは、プレイヤ入力の動き補償を適用する。選択的に、キャッシュは、プレイヤ入力に基づいてルックアップテーブルでエントリ(entry)を変更してよい。例えば、プレイヤが一時停止ボタン(pause button)を押すと、プレイヤが一時停止スクリーンを終えるまで、すべてのプレイヤ移動入力がディセーブル(disable)されなければならない。一実施形態において、クライアント制御ルックアップテーブルは、好ましくはクライアントにより、プレイヤが一時停止入力を選択するたびに転換される、すなわち、一時停止メニューにおける使用のための1つと、一時停止メニュー以外における使用のための1つである、2つのセットの入力を有するようになる。代案的な実施形態において、サーバは、クライアントのキャッシングされたルックアップテーブルのコンテンツを転換してよい。
【0042】
クライアントが動き補償のためのプレイヤ入力を受信すると、段階208において、クライアントは、プレイヤ入力と、これと関連する動きベクトルにタグ(tag)を追加する。段階210において、タギングされた入力は、サーバに送信される。タグは、プレイヤ入力を未来(future)フィードバックと関連させることのできる識別子(identifier)である。例えば、タグは、クライアントがプレイヤ入力の動き補償を実行するのに使用される入力を受信するたびに増加する定数(integer)であってよい。タグは、プレイヤ入力と同一のネットワークパケット(network packet)内にメタデータ(metadata)として追加されるか、入力情報と同期化されたタグ情報を維持させる類似のメッセージングパターン内で送信されてよい。段階213において、クライアントは、タギングされたタグの受信を確認する。プレイヤ入力がタギングされて送信される間、段階212において、クライアントは、キャッシングされたルックアップテーブルに含まれた動きベクトルを適用する。このような動きベクトルは、相関タグ(correlation tag)がサーバからリターンされるまで、各受信フレーム(incoming frame)に対して適用される。このような動きベクトルを適用するための方法の詳細な説明は、図3に示すとおりである。
【0043】
サーバがタギングされたプレイヤ入力を受信すると、段階214において、タギングされたプレイヤ入力は、出力フレームを生成するゲームに伝達される。この後、段階216において、ビデオイメージがエンコードされる。エンコードされたフレームがクライアントに再送信される前に、段階218において、プレイヤ入力タグがエンコードされたフレームに付与される(attached)。これは、プレイヤ入力とともに既に送信されたものと同一のタグであり、出力フレームがプレイヤ入力からの実際のビデオフィードバックを含むことを意味する。エンコードされたフレームにタグを付与することは、タグをメタデータとしてエンコードされたフレームと同一のネットワークパケットに追加することによって達成されてよい。段階220において、タギングされたエンコードされたフレームは、クライアントに再送信される。クライアントがエンコードされたフレームをタグとともに受信すると、クライアントは、そのタグを以前のプレイヤ入力の動き補償に関連させてよい。この後、段階222において、クライアントは、以前の動き補償を適用することを中断する。
【0044】
図3は、プレイヤ入力の動き補償を利用するビデオゲームストリーミング環境のランタイム中の例示的な瞬間を示した図である。段階300において、クライアントがプレイヤ入力を受信すると、段階302において、プレイヤ入力は、動きベクトルルックアップテーブルと比較される。マッチングするプレイヤ入力があれば、関連する動きベクトルがプレイヤ入力の動き補償のために使用される。段階304の固有の入力タグとして、段階306において、動きベクトルがタギングされる。このような例において、選択されたタグは、定数「1003」である。段階308において、タギングされた動きベクトルは、プレイヤ入力の動き補償のために現在使用されている他のタギングされた動きベクトルを含むキュー(queue)に追加される。
【0045】
段階320において、次のフレームは、サーバからのビットストリーム(bitstream)に到達する。段階318において、このフレームは、固有の識別子、このような場合は定数「1001」でタギングされるが、これは、フレームがタグ「1001」に対応する入力を含んですべての以前プレイヤ入力の結果動きを含むことを示す。段階322において、タグ「1001」は、このようにタギングされた入力に対して動き補償を適用することを中断できることをクライアントに指示する。この後、段階308において、タグ「1001」を有する動きベクトルは、以前のパケットが損失された場合に、キューに残っている以前のタグを有する動きベクトルとともに、タギングされた動きベクトルキューから除去される。
【0046】
段階324において、コーディングされたビデオ316は、デコードされる。一方、段階310において、段階308において、動きベクトルキュー内の残り動きのベクトルが合算される。動きベクトルは、一般的に、イメージの各マクロブロックに対するベクトルを有するベクトルフィールド(vector field)である。動きベクトルを合算するために、その結果が各マクロブロックに対するベクトルを有するベクトルフィールドになるように、ベクトルはエレメント単位(element-wise)で合算される。2つのベクトルフィールドの合計は、フィールドの各ポイント(point)に対するベクトルの合計であり、2つのセットの動きベクトルの合計は、イメージの各マクロブロックに対するベクトルの合計である。2つのベクトルの合計は、この成分(component)の成分単位の合計によって定義され、これは{u、u}+{v、v}={u+v、u+v}のように表現されてよい。このような例において、タグ「1002」および「1003」を有する2つのセットの動きベクトルは、キューに含まれる。このような2つのセットの動きベクトルは合算される。タグは実質的に時系列(chronological)であり、これは、以前のタギングされたプレイヤ入力の順序をユーザに認知させる。これは、受信フレームのリターンタグを含むことにより、ユーザがタギングされた動きベクトルを捨てることを許容する。また、上述されたタギングは、さらに複雑な方法よりも計算上において安価である。クランピングアーティファクト(clamping artifact)を防いだり、類似の導入されるアーティファクトを緩和させたりするために、選択的な滑らかな関数(smoothing function)がこの時点に適用されてよい。
【0047】
クランピングアーティファクトは、マクロブロックがオフスクリーン(offscreen)に移動し、スクリーンの端に垂直のピクセルカラーの滲みとして示されるときに、導入される。滑らかな関数の一例として、外向(outward-pointing)動きベクトルがイメージのエッジに近くなるほど、この強度(strength)を減少させるであろう。外向成分、すなわち、イメージの上側端および下側端に向かう外向ベクトルのy成分およびイメージの左側端および右側端に向かう外向ベクトルのx-成分だけを弱化させる必要がある。境界(border)に向かうベクトルに対し、境界からの距離が0に近くなるとき、ベクトル成分が0に近くなるように、ベクトル成分はエッジからの距離の二乗に掛けられてよい。このような例において、イメージの右側端に向かう外向ベクトルは{x、y}から{x×d×d、y}に変換されるはずであり、ここで、dは、エッジからの距離である。これは、イメージの境界周辺に少しのイメージ歪曲が発生する代りに、クランピングアーティファクトを緩和させるであろう。歪曲は、クランピングアーティファクトよりもプレイヤに認識され難い。
【0048】
段階324において、デコードプロセスがエンコードされたビデオフレームで完了した後、段階312において、合算された動きベクトルが動き補償に使用される。段階314において、結果ビデオが出力される。この出力はプレイヤ入力の動き補償データを含み、クライアントにディスプレイされるであろう。この出力されたフレームは、相関タグ「1003」の入力に対する動き補償を含む1番目のフレームである。また、この出力されたフレームは、クライアントがサーバから実際の動きベクトルがリターンされるのを待つ相関タグ「1002」の以前の入力に対する動き推定を含む。また、この出力されたフレームは、クライアントが既に動きを推定した相関タグ「1001」の以前の入力に対する実際の動きベクトルを含む1番目のフレームである。結果的に、3種類の動き推定状態が、この方法のこの時点に存在するようになる(新たな入力に対する新たな推定状態、実際の結果を待ち続ける推定状態、および実際の結果がクライアントに到達することによって中断された他の推定状態)。
【0049】
図4は、図3のプレイヤ入力の動き補償中の例示的なマクロブロックを示した図である。プレイヤ入力の動き補償段階は、現在フレームのマクロブロックが以前フレームのどこから移動されたものであるかを決定するのにデコードされた動きベクトルが使用されるH.264デコード中に実行されたプロセスと、その手順が類似する。プレイヤ入力の動き補償に対し、適用された動きベクトルは、プレイヤに出力ビデオをディスプレイする前に現在フレームのマクロブロックを移動させることにより、プレイヤ入力に対する未来フィードバックを推定するであろう。図4aは、図3の段階308で示した例示的なタギングされた動きベクトルからの、段階400でキュー内の2つのセットのタギングされた動きベクトルを示している。このような2つのセットは、図4bの段階402において一セットの動きベクトルを生成するために、イメージの各マクロブロックに対するベクトルの合計を取ることによって合算される。このセット内において、動きベクトルそれぞれは、現在フレームの各マクロブロックに対する推定された移動を示す。段階402で合算された動きベクトルの各ベクトルに対し、図4cの例示的なイメージの対応するマクロブロックはシフト(shift)されるであろう。一例として、マクロブロックが段階404で対応するプレイヤ入力の動きベクトルによってシフトされるが、これは図4cに示されている。例示的なイメージの各マクロブロックは、このような方式によってシフトされるであろう。図4cの例示的なイメージは、50個のマクロブロックだけを含むが、高画質イメージは数千個のマクロブロックを含むであろう。図4に示した例示的な動きベクトルは、均一な剛体運動(rigid motion)を示すが、説明されたプレイヤ入力動き補償手法は、回転、振動、または該当の技術分野において周知のスクリーン空間における他の複雑な動きを説明するために、任意の複雑度(complexity)の動きベクトルとともに使用されてよい。
【0050】
図5は、クライアントでプレイヤ入力の動き補償中に動きベクトルを適用するための代案的な方法を示した図である。この方法の特定の実施形態において、ビデオのエンコードおよびデコード間の残差(residual)をハンドリングする必要はない。マッチングするプレイヤ入力がルックアップテーブルから探索された後、段階500において関連する動きベクトルがタギングされ、図2の段階208および212に示すように、プレイヤ入力の動き補償のために使用される。次のフレームにおけるデコードプロセスの間、プレイヤ入力の動きベクトルはデコードされた動きベクトルに追加され、H.264コーディング標準によって定義された、段階502の動き補償段階に追加される。段階504において、H.264コーディング標準によって定義されたようにデブロッキングフィルタ(deblocking filter)が適用されるが、プレイヤ入力の動き補償によって修正されなかったブロックだけに適用されなければならない。段階506に示した結果出力は、プレイヤ入力の動き補償を含み、クライアントにディスプレイされるであろう。次に、段階506と段階518において、出力はバッファリングされ、次のフレームで動き補償に使用するための以前イメージとなる。図3の実施形態とは異なり、この実施形態において、タギングされたプレイヤ入力動きベクトルは1度だけ適用される。これは、段階518に示された以前イメージは、以前のタギングされた動きベクトルの合計を含むため、タギングされたプレイヤ入力の動きベクトルがキュー内のすべてのタギングされた動きベクトルと合算される必要がないことを意味する。入力の受信からビデオ出力のディスプレイまでの時間が入力フィードバック待機時間となり、これは、サーバが出力ビデオをリターンするのを待つ代りに、プレイヤ入力の動き補償を使用することによって大きく減少される。
【0051】
段階500と同時に、段階208および210に示すように、クライアントは、対応するタギングされたプレイヤ入力をサーバに送信する。図2の段階220に示すように、クライアントは、段階508に示すようなコーディングされたビデオを、同一のタグ510とともに、段階512のサーバからのビットストリームで受信する。ビデオと関連するタグ510は、プレイヤ入力の動き補償によって既に推定された実際の動きが、段階508に示すようなエンコードされたビデオで表現されるということを意味する。エンコードされたビデオは、H.264コーディング標準によって定義されたように、段階514のエントロピデコード(entropy decoding)を通過する。段階516の逆量子化(inverse quantization)および逆変換(inversetransformation)を通過する。
【0052】
上述した段階508、510、512、514、および516以前に実行された以前プレイヤ入力の動き補償段階は、エンコードされたフレームからの実際の動きベクトルがシフトされようとするマクロブロックを既にシフトさせた。したがって、実際の動きベクトルを直接に適用することは、誤ったマクロブロックをシフトさせることに繋がることになる。ビットストリームは、2つの関連するデータ(エンコードされたビデオフレームおよび相関タグ)ピース(piece)を含むであろう。エンコードされたフレームは、段階514のエントロピデコードに送信される反面、タグは、段階520のブレンディングプロセスに送信される。補償のために、段階520のブレンディングプロセスは、マッチングされた相関タグを有し、追加される実際の動きベクトルと以前に使用されたプレイヤ入力の動きベクトル50との間の差を計算することにより、訂正(correction)動きベクトルを供給する。その差は、実際の動きベクトルに相関タグに対する逆動きベクトルを追加することによって計算されてよいが、これは図6を参照しながらさらに詳しく説明する。訂正ベクトルは、段階502の動き補償のためにデコードされた動きベクトルに代わって使用される。デコードパイプライン(decoding pipeline)の残りは、段階504のデブロッキングフィルタ、段階506の次の出力ビデオフレーム、および段階518の出力バッファリングを通常とおりに続ける。このような段階は、各フレームで継続して繰り返される。一般的に、段階520のブレンディングプロセスは、逆量子化(段階514)および逆変換(段階516)後に発生するが、これは、実際の動きベクトルがこの時点まで利用可能でないためである。実際の動きベクトルが利用可能になれば、ブレンディングプロセスはこれを使用し、実際のものと推定された動きベクトルとの差を計算するであろう。
【0053】
図6は、プレイヤ入力の動き補償およびブレンディングを経る例示的なマクロブロックを示した図である。0ms時間に、プレイヤは、左側にカメラビューを回転させるために入力をする。ルックアップテーブルから「PIMC」600で示される関連するプレイヤ入力の動き補償動きベクトルが、次のフレームのすべてのマクロブロックに適用される。図6aは、右側にシフトされる例示的なマクロブロックを示している。プレイヤ入力の動き補償の結果は、次のデコードされたフレームに適用され、1秒あたり60フレームで実行されるビデオに対して16ms(一フレームの長さ)の最大入力フィードバック待機時間を発生させる。他の実施形態において、最大入力フィードバック待機時間は、1秒あたり30フレームで実行されるビデオに対して33msとなることがある。したがって、本発明は、多様なフレームレート(framerate)に動作され、最大入力フィードバック待機時間を一フレームの長さに制限するものと考えられる。タギングされたビデオがサーバからリターンされるとき、これは、図6bに示すように、サーバによってエンコードされた実際の動きベクトル602を含む。このような例に対し、コーディングされたビデオは100ms時間にリターンされるが、これは、ネットワーク待機時間によって大きく異なるであろう。実際のベクトル602は、プレイヤ入力の動き補償600で既にシフトされたマクロブロックを参照するため、実際のベクトル602は、既存のフレームに直接適用されることができない。この代わりとなる、訂正ベクトル604が、実際のベクトル602とプレイヤ入力の動きベクトル600との差を求めることによって計算される必要がある。この差は、プレイヤ入力の逆動きベクトルを実際の動きベクトルに追加することによって計算されてよい。このようなベクトルの差を求めることは、図5の段階524のブレンディングによって参照される。訂正ベクトル604が小さいほど、プレイヤ入力の動き補償方法が実際の動きベクトルを推定するのにより成功的であった。例示的なマクロブロックに対する図6cに示された結果動き608は、実際の動きベクトル602と同一である。このような例は、プレイヤ入力の動き補償がプレイヤ入力に対するビデオフィードバックをどのように推定し、16msと100msとの間の時間に対する結果をどのように示すかを示している反面、修正されていないシステムは、プレイヤ入力が受信された後、116msまでプレイヤフィードバックをディスプレイしない。
【0054】
デベロップメント(development)の間、ゲーム開発者(developer)は、どのような動きとアニメーションがランタイム間に予測された動きベクトルを送信するかを決定する必要がある。固有でありながらも予測可能な動きベクトルは、予測された動きベクトルに対する最適な候補である。範囲型の例では、ジョイント角度(joint angle)を計算するのに運動学方程式(kinematics equation)を使用するアニメーション、時間歪曲されたアニメーション、またはその他に増加するか圧縮されたアニメーションのような、エンジンによって適応的に変更されるアニメーションを含むであろう。例えば、プレイヤが提議されたレッジ(ledge)内に入ってジャンプするとき、レッジグラブ(ledge grab)アニメーションが再生される。レッジグラブアニメーションは、プレイヤの手はレッジの上にあるが、依然としてプレイヤの体に付いているように、増える。アニメーションは、定義された数のフレームで再生され、レッジの上にプレイヤを置く。このような例の開始点は、許容可能な位置と方向の範囲内で可変的である。正確なアニメーションは予め知らされないが、注文型(on-demand)ゲームエンジンによってプログラミング方式で生成されるため、このようなレッジグラブアニメーションは、予測された動きベクトルを生成するのに適した候補である。特に、クライアントは、ゲームストリーミング環境におけるプレイヤ位置に対する状況情報を有さないため、クライアントは、このアニメーションに対する動きベクトルを認知することができない。
【0055】
予測された動きベクトルは、特定のカメラ位置、小さな時間ウィンドウ、または複数の他の特定プレイヤコンテキストのような制限された状況または時間範囲に対してのみ有用である。各セットの予測された動きベクトルに対し、対応するインバリデータ(invalidator)が生成される必要がある。インバリデータは、クライアントにおいて、予測された動きベクトルが有効となった後に適用されることを防ぐために使用されてよい。特定の実施形態において、インバリデータは、ゲームコンテキストを変更するプレイヤ入力のセットであってよく、したがって、予測された動きベクトルを再生することは、これ以上可能にならない。他の実施形態において、インバリデータは、予測された動きベクトルが有効となる時間ウィンドウであってよい。また他の実施形態において、インバリデータは、無効化(invalidating)入力および時間ウィンドウの組み合わせであってよい。例えば、レッジグラブアニメーションに対して生成された予測された動きベクトルは、制限されたプレイヤ位置と方向内でのみ有効であり、これにより、インバリデータは、並進または回転移動入力を必須で含むようになるであろう。インバリデータは、予測された動きベクトル特徴のデベロップメント中に設計されて実現される必要がある。さらに、予測された動きベクトルは、動き補償のためにキャッシングされた、繰り返される動きベクトルを使用することを説明する図10図13を参照しながら後述するように、サーバから送信されたイベント(event)やメッセージによってディセーブルされるかアップデートされてよい。
【0056】
予測された動きベクトルは、予め生成されてもよいし、ランタイム中に必要に応じて生成されてもよい。例えば、制限された数の順列を有するアニメーションに対し、予測された動きベクトルは、各順列をトリガーし、動きベクトルを記録することによってオフライン(offline)で生成されてよい。特定の実施形態において、一般化されたクライアントに対し、動きベクトルは、サーバ側に記録された後、注文型でキャッシングされるようにクライアントに送信されるであろう。動きベクトルがクライアントに送信されるとき、これは、ルックアップテーブルにキャッシングされる。事前生成された予測された動きベクトルは、サーバに記録され、ゲームのランタイム中にクライアントのルックアップテーブル内にキャッシングされるように、サーバが事前生成された動きベクトルを送信することのできるゲーム読み取り可能なファイル形式で利用可能となる。逆運動学によって計算されたアニメーションのように、ランタイム中に生成されたアニメーションは、個別の数の可能なアニメーション順列がないことがあるため、事前生成されないこともある。逆運動学は、アニメーションを一セットの境界条件内に合わせのために、リアルタイムレンダリングに一般的に使用される方法である。例えば、テレビゲーム内のプレイヤキャラクタは、近くのレッジを、グラブ(grab)を要求し、境界条件は、プレイヤの手がレッジに触れる位置によって定義されるはずであり、レッジグラブアニメーションは、逆運動学によって変更されるであろう。このように適応的に変更されるアニメーションに対し、ゲームは、ランタイム中の可能なアニメーションをオフスクリーン動きベクトルイメージに推論的にレンダリングし、必要に応じて予測された動きベクトルを記録してよい。例えば、プレイヤが掴むことのできるレッジの近くにいれば、ゲームは、プレイヤが直ぐにレッジを掴むものと予想することができ、ゲームは、予測された動きベクトルを生成するようにレッジグラブアニメーションを推論的にレンダリングしてよい。ランタイム中に予測された動きベクトルが生成される必要のある適応的に変更されたアニメーションは、開発者(developer)によって予め識別される必要がある。
【0057】
プレイヤ位置追跡、スクリプティング(scripting)システム、トリガーボリューム、または経路探索(pathfinding)システムのような、プレイヤコンテキストを説明する従来のゲームシステムは、ゲームがアニメーションを推論的にレンダリングする必要があるときに、信号を送信するイベントを生成するのに使用されてよい。例えば、ゲームは、掴むことのできるレッジに対するプレイヤの接近度(proximity)を追跡し、レッジグラブアニメーションを推論的にレンダリングするようにゲームに信号を送信し、予測された動きベクトルを記録してよい。武器をピックアップしたり、レバーを上げたり、ボタンを押したりするような特定のアニメーションは、相互作用およびプレイヤ方向に対し、プレイヤ接近度に基づいて増やしたり調節されたりしてよい。このようなアニメーションは、事前生成を可能にするには極めて多くの順列を有するが、図7に示すように、ランタイム中に生成されてもよい。常に同じ方式によって発生する動きは、オフラインで生成されて記録されることもある。これらは、一般的に、トリガーされるたびに同一の割合で同じスクリーン空間に発生する動きである。このようなアニメーションに対する動きベクトルは、アニメーションのすべての可能な順列をトリガーし、ゲームで生成された動きベクトルを記録するものであっても、H.264コーデックで使用されるもののような従来の動き推定技術によって動きベクトルを生成することにより、オフラインで記録されるものであってもよい。好ましい実施形態において、図1図6を参照しながら説明したようなゲームで生成された動きベクトルは、高品質の動き推定を保障するために使用される。このようなプロセスは、デベロップメント中にいつでも発生されるが、ビルドプロセス(build process)またはミップマップ(mip-map)とディテール水準(level of details:LODs)を事前生成することのような他の従来のアセットコンディショニング(asset-conditioning)プロセスの1つの段階として、このプロセスを追加することが好ましい。アセットコンディショニングは、ゲームアセット(game asset)を人間で読み取り可能なソース形式から機械で読み取り可能形式にコンパイル(compile)するプロセスを含んでよい。例えば、ミップマップは、アーティスト生成されたテクスチャファイルを複数の解像度を含むゲームサポート形式に変換することにより、予め生成されてよい。これと同じように、ディテール水準は、アーティスト生成されたモデルファイルを複数のディテール水準を含むゲームサポート形式に変換することにより、予め生成されてよい。動きベクトル生成は、アーティスト生成されたアニメーション形式をゲームサポート形式に変換する従来のアセットコンディショニングプロセスに追加されてよい。
【0058】
図7は、オフラインまたはランタイムシナリオで動きベクトルを生成するための例示的な方法を示した図である。アニメーションは、段階700のオフスクリーン表面/イメージとしてレンダリングされてよく、動きベクトルは、即時的な使用のために記録されてよい。移動するスクリーンの部分だけがレンダリングされる必要があり、シーン(scene)の他のオブジェクトは無視されてよい。段階702に示される点線のオブジェクトと、段階704に示される実線のオブジェクトは、以前フレームと現在フレームそれぞれにおけるアニメーションオブジェクトの位置を示す。以前フレームから現在フレームへの移動は、段階706において、段階708に示される動きベクトルの形式でキャプチャされるであろう。動きベクトルは、ゲームで生成された動きベクトルからキャプチャされてもよいし、H.264コーデックで使用されるもののように従来の動き推定技術によってキャプチャされてもよい。好ましい実施形態において、図1図6を参照しながら説明したように、ゲームで生成された動きベクトルは、高品質の動きベクトルを保障するのに使用される。動きベクトルが必要なすべてのフレームに対して生成されるまで、段階700~708に示されたプロセスを繰り返すことにより、与えられたアニメーションに対して多くのフレームの予測された動きベクトルが迅速に計算されるようになる。アニメーションのすべてのフレームが生成される必要はなく、ビデオストリームに追いつくまではクライアントで再生するのに十分に生成される必要がある。生成されたフレームの最小数は、プレイヤ入力を送信するものと、クライアントで結果ビデオストリームを受信するもののディレイによって異なるはずであり、アニメーションの生成された部分の長さは、少なくともディレイの分だけ長くなければならない。予測された動きベクトルフレームは、動き推定にキャッシングされた、繰り返される動きベクトルの使用を説明する図10図13を参照しながら後述するように、再生される間、レートスケーリング(rate-scaled)されてよい。予測された動きベクトルフレームの再生がレートスケーリングされれば、ディレイと同一のアニメーションの一部に対する予測された動きベクトルの生成は、50%の再生レート-スケーリングをもたらす。アニメーションのさらに長い部分に対する動きベクトルの生成は、消極的にレートスケーリングされた再生をもたらす。
【0059】
ビデオエンコードのために使用されたマクロブロックサイズは、動きベクトルを記録するときに考慮されなければならず、マクロブロックごとに動きベクトルがなければならない。好ましい実施形態において、ゲームで生成された動きベクトルは、ピクセルあたりの(per-pixel)動きベクトルで生成され、ピクセルあたりの動きベクトルの各マクロブロックグループに対して算術平均(arithmetic mean)を求めることにより、マクロブロックあたりの(per-macroblock)動きベクトルに変換される。
【0060】
図8は、プレイヤ入力の動き補償を目的として予測された動きベクトルの送信およびクライアント側の記録を示している。ビデオゲームソフトウェアデベロップメントの間、イベントなどは、近づいてくる(upcoming)入力中心の(input-driven)コンテキストに適する(context-sensitive)信号を送信するように構成される必要がある。例えば、プレイヤがレッジグラブアニメーションを実行するときに予測された動きベクトルが利用可能となるように、ゲーム開発者は、予測された動きベクトルを送信しようとするであろう。開発者は、プレイヤが掴むことのできるレッジを、向い合って掴むことのできるレッジの範囲内にいるたびに、トリガーされるイベントを実現する。このような例において、「ゲームランタイム中のイベント受信」段階800において、プレイヤがゲームをしている間、掴むことのできるレッジに近づくとき、例示的なイベントが受信される。イベント類型は、適応的に変更されたアニメーションの場合のように、予測された動きベクトルが生成される必要があるか否か、または変更はされないが頻繁に再生されるかプレイヤコンテキストに依存するアニメーションの場合のように、予測された動きベクトルがオフラインで事前生成されたか否かを説明するであろう。このような例において、「予測された動きベクトルの生成」段階802において、レッジグラブアニメーションは、プレイヤのレッジからの距離に基づいて増加するが、これは、動きベクトルがランタイムで生成される必要があることを意味する。他の場合、「事前生成された動きベクトルを読み取る」段階804において、動きベクトルは、オフラインで生成され、保存場所から読み取られてよい。
【0061】
事前生成された動きベクトルの一例として、大きな武器倉庫の武器に転換が生じる場合が挙げられる。可能な武器転換順列の数は大多数である場合があり、この結果、動きベクトルの全体セットのキャッシングを非現実的にさせる。一般的に、動きベクトルが制限されたキャッシュ空間を過度に占めていて頻繁に使用されなくなれば、動きベクトルはプレキャッシングのための主要候補にはならない。「予測された動きベクトルとインバリデータの送信」段階806において、予測された動きベクトルは、クライアントに送信される。「予測された動きベクトルとインバリデータのキャッシング」段階808において、予測された動きベクトルは、動きベクトルルックアップテーブルに追加される。一実施形態において、無効化(invalidation)システムは、ルックアップテーブルに動きベクトルの適用をトリガーするが、この代わりに、動きベクトルをディスエーブルさせるシステムと同じように機能する。動きベクトルとインバリデータのセットが「予測された動きベクトルおよびインバリデータのキャッシング」段階808において受信されるとき、インバリデータは、無効化システムによって登録される必要がある。
【0062】
図1図6を参照しながら説明したようなプレイヤ入力の動き補償方法は、すべてのプレイヤ入力を動きベクトルルックアップテーブル内のエントリーと比較する。上述した例において、「受信されたプレイヤ入力のマッチング」段階810において、プレイヤが、レッジグラブアニメーションを始めるために求められる入力を行うとき、入力は、ルックアップテーブルに予めキャッシングされた入力とマッチングされるであろう。「プレイヤ入力の動き補償の適用」段階812において、キャッシングされた予測された動きベクトルがまだ無効化されていなければ、予測された動きベクトルが適用されるであろう。「無効化」段階814において、プレイヤ入力が予測された動きベクトルを無効にしたり、予測された動きベクトルが予め決定された時間後に満了になったり、または予測された動きベクトルが1度適用された後に満了になったりすれば、予測された動きベクトルはルックアップテーブルから除去され、適用されない。
【0063】
図9は、予測された動きベクトルセットを無効にすることのできる信号の例示的な方法を説明するための図である。無効化は、好ましくは、クライアントにキャッシングされたルックアップテーブルから一セットの予測された動きベクトルが除去される、ルックアップテーブルに対するアップデート類型である。サーバから受信されたアップデートイベントなどに応答することに加え、アップデートメカニズムは、プレイヤ入力をモニタリングし、無効化カウントダウンタイマー(countdown timer)を含んでよい。一セットの予測された動きベクトルがルックアップテーブルにキャッシングされるとき、このインバリデータがアップデート機能/メカニズムに登録されてよい。インバリデータは、ルックアップテーブルに対する無効化アップデートをトリガーするデータ信号である。ルックアップテーブルの例として、段階900に示された「ルックアップテーブル」は、以下のような3セットの予測された動きベクトルを含む(「予測されたドア(door)アニメーション」段階902に示された予測されたドアアニメーション、「予測されたレッジグラブ」段階904に示された予測されたレッジグラブアニメーション、および「予測されたキルショット(kill shot)アニメーション」段階906に示された予測されたキルショットアニメーション)。予測された動きベクトルは、1度適用された後に無効化されてよい。一例として、「予測されたドア(door)アニメーション」段階902に示された予測されたドアアニメーションは、「オープンドア入力」段階908においてプレイヤが入力を行ったとき、近くのドアを開くように適用される。これと同時に、「オープンドア入力」段階908におけるオープンドア入力の登録は解除され、「予測されたドアアニメーション」段階902に示された予測されたドアアニメーションは、「使用後の無効化」段階910においてルックアップテーブルから除去されてよい。これと同じように、他の入力も、これが適用される前に予測された動きベクトルを無効にしてよい。一例として、「予測されたレッジグラブ」段階904に示されたレッジグラブアニメーションに対する一セットの予測された動きベクトルは、レッジから制限された距離内のみで有効となる。
【0064】
プレイヤが(「ジャンプ入力」段階914に示されたジャンプ入力を使用して)レッジをグラブするためにジャンプする前に、プレイヤが「移動入力」段階912に示された移動入力を使用してレッジから遠ざかれば、「予測されたレッジグラブ」段階904に示された予測されたレッジグラブの動きベクトルが「入力に対する無効化」段階916において無効となるであろう。無効にする入力の他の例として、プレイヤがグラップリングフック(grappling hook)または予測された動きベクトルを無効にする他の移動基盤の武器を持っている場合、およびプレイヤが特殊能力を活性化させるボタンを押す場合などが挙げられてよい。無効化する入力はコンテキストによって異なるため、他のものは特定の実施形態に基づいて明らかになるであろう。また、予測された動きベクトルは、時間の経過とともに満了となってよい。一例として、キルショットのチャンスが3秒のウィンドウ中にプレイヤに提供されてよい。プレイヤが3秒のウィンドウ中に「メイレイ(melee)入力」段階918に示されたメイレイ入力を押さなかった場合、「予測されたキルショットアニメーション」段階906に示された予測されたキルショットアニメーションに対する動きベクトルは、「満了タイマーに対する無効化」段階920において無効となるであろう。予測された動きベクトルは複数のインバリデータを有してよく、その反対も可能である。例えば、予測されたレッジグラブは、移動入力が受信されるか、レッジグラブの動きベクトルが使用された後という、2つのうちの早い方により、無効化されてよい。
【0065】
図10は、動きベクトルライブラリを生成するための例示的な方法およびキャッシング目的のための例示的な繰り返される動きベクトルライブラリを示した図である。選択された動きは、実質的に反復性が高いため、これはトリガーされるたびに同一の方式によって再生されるであろう。これは、動きベクトルを予め生成し、これをライブラリとして組職化できるようにする。動きベクトルライブラリ生成は、デベロップメント中にいつでも発生するが、このプロセスをビルドプロセスまたは複数の他のアセットコンディショニングフェーズ(asset conditioning phase)の一段階として追加することが好ましいこともある。このような例において、動きベクトルライブラリは、1人称シュータにおいて利用可能なそれぞれの武器に対して生成されるであろう。「ライブラリ生成」段階1000において、第1武器に対するライブラリ生成が始まるとき、「アニメーショントリガー」段階1002において第1武器アニメーションがトリガーされ、「動きベクトル記録」段階1004において動きベクトルが記録される。動きベクトルは、ゲームで生成されてもよいし、H.264コーデックで使用されるもののような従来の動き推定技術によって生成されてもよい。好ましい実施形態において、本明細書にその全体が統合された米国仮出願第62/488,256号および第62/634,464に記載されるようなゲームで生成された動きベクトルは、高品質の動き推定を保障するために使用される。記録された動きベクトルが正確でないか正確に量子化されなければ、これがプレイヤ入力の動き補償中に使用されるときに、アーティファクトを取り入れるであろう。段階1002および1004は、動きベクトルがライブラリでそれぞれの高い反復性を有するアニメーションに対して記録されるまで繰り返される。ライブラリ生成は、すべてのライブラリが生成されるまで、段階1000で再び始まる。
【0066】
「動きベクトルライブラリ」段階1006に示された例は、1人称シューターゲームにおけるプラズマライフル武器(plasma rifle weapon)に対する、繰り返される動きベクトルライブラリの極めて単純化されたバージョンである。この例は、2つの簡単なアニメーションを含むように単純化される(段階1008に示されたプレイヤがプラズマライフルを発射するときに再生されるフィードバックアニメーションのための2フレームアニメーション、および段階1010に示されたプレイヤが前方に歩いていくときに発生するライフルのボビングモーション(bobbing motion)のための4フレームアニメーション)。一般的な実世界の環境(real-world environment)において、武器は、より多くのアニメーションを有し、そのアニメーションは4つのフレームよりも相当に長い。
【0067】
図11は、プレイヤ入力の動き補償のために動きベクトルライブラリをキャッシング、適用、およびアップデートするためのプロセスを示した図である。「始まるときの繰り返される動きベクトルライブラリの送信」段階1100において、ゲームが初期化されるとき、サーバは、クライアントに事前生成された動きベクトルライブラリを送信する。「繰り返される動きベクトルのキャッシング」段階1102において、クライアントは、メモリに、一般的にルックアップテーブルの形態で、動きベクトルライブラリを記録する。このような実施形態おいて、クライアントは、複数のストリーミングゲームの要求を提供するように一般化される。代案的な実施形態において、ゲームの特定クライアントは、サーバからの繰り返される動きベクトルをキャッシングする必要なく、動きベクトルライブラリを永久的に記録してもよい。
【0068】
この時点において、クライアントは、プレイヤ入力をモニタリングし、入力とプレイヤ入力の動き補償ルックアップテーブル内のエントリーとの比較を開始してよい。「受信されたプレイヤ入力のマッチング」段階1104において、入力がルックアップテーブル内のマッチングされたエントリーを有するとき、「プレイヤ入力の動き補償の適用」段階1106において、プレイヤ入力と関連する動きベクトルは、図1図10を参照しながら説明したような動き推定の提供に使用される。「キャッシングされた、繰り返される動きベクトルマッピングのアップデート」段階1112において、特定の入力を受信することが、ルックアップテーブルが変更されるように要求する特定の場合となることがある。ルックアップテーブルを変更する入力の例としては、キャラクタ移動、武器発射アニメーション、または他の再生関連モーションのようなプレイヤ入力をディスエーブルさせることのできる一時停止ボタンがある。動きベクトルを適用して選択的にルックアップテーブルをアップデートした後、クライアントは、プレイヤ入力をモニタリングし続けるであろう。「キャッシングされた、繰り返される動きベクトルマッピングのアップデート」段階1112において、ルックアップテーブルがアップデートされた後に挿入されるプレイヤ入力は、ルックアップテーブル内のアップデートされたエントリーと比較されるであろう。
【0069】
ゲームのランタイム中にいつでも、プレイヤに対するコンテキストの変更は、ルックアップテーブルが変更されるように要求してよい。例えば、プレイヤは、以前に保有していた武器が新たな武器に転換されるように、キャッシングされた動きライブラリを要求する武器を転換してよい。一例としては、特定のゲームイベントをモニタリングするサーバ側のゲームを示してよい。このようなイベントは、ゲームデベロップメント中に、該当の技術分野で周知の方法によって構成可能であり、ゲームの従来のメッセージングまたはイベントシステムによって送信されてよい。「ランタイム中にイベントを受信」段階1108において、実行されるゲームインスタンスがこのようなイベントのうちの1つを受信するとき、「コンテキストアップデート送信」段階1110において、メッセージが生成されてクライアントに送信されてよい。コンテキストアップデートは、プレイヤ入力とルックアップテーブルに含まれた動きベクトルとの関係を変更するゲームイベントに対して送信されてよい。コンテキストアップデートは、プレイヤ入力が一セットの動きベクトルをトリガーするものをイネーブル(enable)またはディセーブル(disable)させるか、与えられた入力と関連する動きベクトルを変更するか、そうではなければ、プレイヤ入力されたプレイヤ入力の動き補償のための動きベクトルとの関連を追加または除去してよい。「キャッシングされた、繰り返される動きベクトルマッピングのアップデート」段階1112において、メッセージがクライアントに到達するとき、ルックアップテーブルが変更されるコンテキストによって変更される。
【0070】
図12は、動きベクトルマッピングがどのようにアップデートされるかを示した図である。クライアントのキャッシュ1202に記録されたルックアップテーブル1200は、クライアントにより、与えられたプレイヤ入力と関連する動きベクトルの探索に使用される。状況による変更がプレイヤ入力の行動を変更する、ゲームのランタイム時間がある。例えば、プレイヤが前方に移動したが、壁(wall)のような移動ブロッカー(movement blocker)にぶつかれば、前方移動に対して予測された動きベクトルの適用を中断する必要が生じる。これが発生するとき、サーバは、図11の段階1110に示すように、クライアントにコンテキストアップデートを送信する。このような移動ブロッキングイベント1204が受信されるが、これは、クライアントに前方移動入力1206と対応する動きベクトル1208との連結をディセーブルさせるように信号を送信する。前方移動の動きベクトルは、サーバからの他のイベントが前方移動入力と前方移動の動きベクトルとの連結を再びイネーブルさせるまでプレイヤが前方移動入力を使用するとき、適用を中断する。このような例に対し、ゲームは、プレイヤの移動がアンブロックされる(unblocked)ときにイベントを生成し、前方入力とルックアップテーブル内の前方移動の動きベクトルとの連結を再設定するように、クライアントにコンテキストアップデートを送信する。
【0071】
他の例において、プレイヤが、プラズマライフルをショットガン(shotgun)に切り換えることが考えられる。プラズマライフルの動きベクトルライブラリ1210は、特定の発射入力1211に対応する発射動きベクトル1209とともにキャッシュに記録される。また、キャッシュは、ショットガン1212とピストル(pistol)1214を含む他の武器に対する動きベクトルライブラリを記録する。クライアントがサーバから武器転換イベント1216を受信すると、プラズマライフルの動きベクトルライブラリ1210がショットガンの動きベクトルライブラリ1212に対してルックアップテーブル1200から転換される。プレイヤ入力の動き補償が武器転換中に不適切に発生することを防ぐために、2つのイベントが、武器転換アニメーションが再生される間にプラズマライフルの動きベクトルライブラリ1210を先にディセーブルさせるように同時に使用された後、武器転換アニメーションが完了した後、2つの動きベクトルライブラリを転換してよい。
【0072】
さらに長いマルチフレーム動きベクトルに対し、最後のフレームの実際のビデオがサーバから受信されると、最後のフレームの動きベクトルが適用されるように、このアプリケーションを増加させてよい。これにより、サーバがクライアントにキャッシングされた動きベクトルが足りないとき、推定された動きに追いつくようにできるであろう。動きベクトルに対するスケーリングファクタは、再生速度スケール(playback Speed Scale)によって定義され、例示的に下記のように計算される。
【0073】
【数1】
【0074】
ここで、ディレイは、初期プレイヤ入力イベントからクライアントで実際のビデオを受信するまでの時間によって定義される。このディレイは、ネットワークを介して入力を送信するのにかかる時間、ゲームロジック、レンダリングロジック、GPUレンダリング時間、およびエンコード時間を含んでサーバで処理する時間、さらにプレイヤにビデオをリターンするためのネットワーク時間を含む。ディレイは、ゲームストリーミング環境で持続的に測定されなければならない。プレイヤ入力の動き補償の好ましい実施形態は、プレイヤ入力と実際のビデオとを関連させるために、米国仮出願第62/488,256号および第62/634,464号に記載されるように、相関タグを使用する。入力されたプレイヤ入力がサーバに送信される前に、相関タグが固有の識別子として付与される。ビデオフレームが相関タグとともにサーバからリターンされるとき、クライアントは、固有の識別子を以前の入力とマッチングさせる。これは、関連する入力に対する動き推定を中断したり、ブレンディング技術による以前の動き推定を取り消したりするように、クライアントに信号を送る。アニメーションのキャッシングされた部分の長さやキャッシングされたアニメーション時間は、キャッシングされたアニメーションのフレームの数に各フレームの長さを掛けることによって計算されてよい。
【0075】
図13において、10個のフレームを含むアニメーションの例として、100msのディレイとともに1秒あたり60フレームを実行するゲームにおいてプレイヤ入力の動き補償のために使用される。プレイヤ入力がプレイヤ入力の動き補償をトリガーするとき、再生速度スケールが下記のようにキャッシングされた動きベクトルに対して計算される。
【0076】
【数2】
【0077】
【数3】
【0078】
【数4】
【0079】
プレイヤ入力は0ms時間に受信された。動きベクトルの再生の割合は、計算された再生速度スケールによってスケーリングされる(1300)。1番目のフレームの動きベクトルは、サーバからのビデオストリーム内の利用可能な次のフレームに適用される。スケーリングされた動きベクトルフレームは、アニメーションスムーズ(animation smooth)を維持するために補間されるであろう。動きベクトルフレームは、複数のフレームにわたってスケーリングされるため、補間は与えられたフレームに適用する動きベクトルが「どれほど多いか」を計算するのに使用可能な方法である。一例として、計算された再生速度スケールに基づいて線形補間を使用してよい。この例に対し、計算された再生速度スケールは0.625であり、これは一セットの動きベクトルを1.6個のディスプレイフレームの上に増やすであろう。補間は、どれほど多くの動きベクトルを与えられたフレームに適用するかを計算するための方法である。すなわち、補間は、このセットの動きベクトルが複数のディスプレイフレームの上に増えるとき、どれほど遠くにマクロブロックを動きベクトルの下に移動させるかを計算する。第1スケーリングされた動きベクトルの一部だけが0.625の再生速度スケールと同一な、17msで第1ディスプレイフレームに適用されなければならない。33msにおける第2ディスプレイフレームに、第1スケーリングされた動きベクトルの残りが適用され、1-0.625=0.375で計算された後、第2スケーリングされたベクトルの1番目の部分が適用され、再生速度スケールから第1スケーリングされた動きベクトルの残り部分を引いた値、または0.625-0.375=0.25で計算される。50msの第3ディスプレイフレームにおいて、第2セットのスケーリングされた動きベクトルが継続して適用され、マクロブロックが動きベクトルの下に62.5%で移動する。67msの第4ディスプレイフレームにおいて、第2スケーリングされた動きベクトルの残りが適用され、1-0.25-0.625=0.125で計算され、第3スケーリングされた動きベクトルの1番目の部分が適用され、再生速度スケールから第2スケーリングされた動きベクトルの残り部分を引いた値、または0.625-0.125=0.5で計算される。スケーリングされた動きベクトルが適用されることにより、線形補間が続く。
【0080】
推定された動きの各フレームを未来の実際のビデオと関連させるために、マルチフレーム動きベクトルは、キャッシングされたアニメーションの各フレームに対する相関タグを送信してよい。
【0081】
ディレイは、クライアントとサーバとの間のネットワーク経路およびアキテクチャに大きく左右されるであろう。これは、100msディレイを使用するが、数十から数百ミリ秒(milliseconds)の間で変わる。より短いディレイがより優れたプレイヤ経験を提供するが、プレイヤ入力の動き補償手法は、特定の場合に、高いディレイ時間の影響を偽装(disguise)するのに繋がる。ディレイ1304後に、実際のビデオ1302が受信される。エッジ位置の(edge-located)サーバまたは消費者と物理的に近いサーバに対し、ディレイ時間は約30msと低い。より一般的なサーバ位置に対し、100msはさらに可能性が高い。実際のビデオはスケーリングされないため、オリジナルアニメーションの長さ1306を維持する。実際のビデオは、プレイヤ入力の動き補償手法によって適用される。
【0082】
クライアントが以前の動き補償を完璧にブレンディングすることができなければ、H.264コーディング標準がいずれかの時間的に伝播されるエラーを訂正することのできるリンダンダントスライス特徴(redundant slice feature)を提供する。H.264プロファイル設定を基盤に、各スライスは、イントラスライス(intra slice)(I-スライス)にエンコードされ、特定の周波数で回転スケジュール(rotating schedule)に送信されるであろう。イントラスライスが動きベクトルを含まないため、ブレンド動きベクトルは、実際の動きベクトルがp-スライスに到達するときだけに適用されなければならない。これは、タギングされたフレームがサーバからリターンされる前に、ブレンド動きベクトルがI-スライスに示したマクロブロックに適用されることを防ぐことができる。
【0083】
上述した説明および図面は、本発明の原理を例示するためのものに過ぎない。本発明は、好ましい実施形態によって制限されるように意図されてはならず、該当の技術分野において通常の知識を有する者にとって明白である、多様な方式で実現されるであろう。本発明の多数の応用は、該当の技術分野において通常の知識を有する者によって容易に実現されるであろう。したがって、開示された特定の例示または図に示されて説明された正確な構成と動作によって本発明を制限することは好ましくない。むしろ、すべての適切な修正および均等物が、本発明の範囲内に属するものと理解されなければならない。
【0084】
〔付記1〕
段階を含むコンピュータで実現される動き推定方法であって、
段階は、
1つ以上のユーザ入力と1つ以上の関連する動きベクトル(motion vector)で構成されたルックアップテーブルを送信する段階(前記ルックアップテーブルは、前記ルックアップテーブルをキャッシング(caching)するための命令語(instruction)とともに送信される)、
プレイヤ入力の受信時、マッチングされる動きベクトルに対して前記ルックアップテーブルに質疑(query)するための命令語を送信する段階、
固有のタグ(unique tag)を前記ルックアップテーブルからの前記マッチングされる動きベクトルと関連させるための命令語を送信し、タギングされた動きベクトルをキュー(queue)に追加する段階(前記タギングされた動きベクトルは、合算される)、
フレームを固有の識別子タグ(identifier tag)とともに送信する段階(前記タグは、前記フレームが前記プレイヤ入力と関連する動きを含む時系列地点(chronological point)を示す)、
サーバから受信されたタギングされたフレームと関連するタグを有する前記キューから動きベクトルを除去するための命令語を送信する段階
を含み、
サーバがクライアントにエンコードされたビデオフレームを送信するとき、前記クライアントは、
前記ビデオフレームをデコードし、ビデオ出力以前の動きを推定するために前記合算された動きベクトルを前記デコードされたフレームに適用するように指示を受ける、コンピュータで実現される方法。
〔付記2〕
前記エンコードされたビデオフレームは、
残差ハンドリング(residual handling)されずに、デコードされる、付記1に記載のコンピュータで実現する方法。
〔付記3〕
前記クライアントに、1つ以上の滑らかな関数(smoothing function)を前記キュー内の前記合算されたタギングされた動きベクトルに適用するように指示する段階
をさらに含む、付記1に記載のコンピュータで実現される方法。
〔付記4〕
前記動きベクトルと関連する固有のタグは、
実質的に時系列である、付記1に記載のコンピュータで実現される方法。
〔付記5〕
前記合算されたタギングされた動きベクトルは、
対応するマクロブロック(macroblock)と関連する、付記1に記載のコンピュータで実現される方法。
〔付記6〕
前記キャッシングされたルックアップテーブルは、
プレイヤ入力に基づいて修正されるように構成される、付記1に記載のコンピュータで実現される方法。
〔付記7〕
前記合算されたタギングされた動きベクトルは、
一度適用されるように構成される、付記1に記載のコンピュータで実現される方法。
〔付記8〕
前記合算されたタギングされた動きベクトルは、
任意複雑度(complexity)の動きを説明する、付記1に記載のコンピュータで実現される方法。
〔付記9〕
前記合算されたタギングされた動きベクトルは、
前記プレイヤ入力に対する未来(future)フィードバック(feedback)を推定する、付記1に記載のコンピュータで実現される方法。
〔付記10〕
前記合算されたタギングされた動きベクトルは、
H.264コーディング標準にしたがう、付記1に記載のコンピュータで実現される方法。
〔付記11〕
動き推定システムであって、
ネットワークを介し、サーバは、
プレイヤ入力の受信時、マッチングされる動きベクトルに対してルックアップテーブルに質疑するために、クライアントに命令語を送信し、
固有のタグを前記ルックアップテーブルからの前記マッチングされる動きベクトルと関連させるために、前記クライアントに命令語を送信し、タギングされた動きベクトルをキューに追加し(前記タギングされた動きベクトルは合算される)、
フレームを固有の識別子タグとともに前記クライアントに送信し(前記タグは、前記フレームが前記プレイヤ入力と関連する動きを含む時系列地点を示す)、
前記サーバから受信されたタギングされたフレームと関連するタグを有する前記キューから動きベクトルを除去するために、前記クライアントに命令語を送信し、
前記サーバが前記クライアントにエンコードされたビデオフレームを送信するとき、前記クライアントは、
前記ビデオフレームをデコードし、動きを推定するために前記合算された動きベクトルを前記デコードされたフレームに適用するように指示を受ける、システム。
〔付記12〕
前記エンコードされたビデオフレームは、
残差ハンドリングされずに、デコードされる、付記11に記載のシステム。
〔付記13〕
前記サーバは、
1つ以上の滑らかな関数(smoothing function)を前記キュー内の前記合算されたタギングされた動きベクトルに適用するように、前記クライアントにさらに指示する、付記11に記載のシステム。
〔付記14〕
前記動きベクトルと関連するタグは、
実質的に時系列である、付記11に記載のシステム。
〔付記15〕
前記合算されたタギングされた動きベクトルは、
対応するマクロブロックと関連する、付記11に記載のシステム。
〔付記16〕
前記キャッシングされたルックアップテーブルは、
プレイヤ入力に基づいて修正されるように構成される、付記11に記載のシステム。
〔付記17〕
前記合算されたタギングされた動きベクトルは、
一度適用されるように構成される、付記11に記載のシステム。
〔付記18〕
前記合算されたタギングされた動きベクトルは、
任意複雑度(complexity)の動きを説明する、付記11に記載のシステム。
〔付記19〕
前記合算されたタギングされた動きベクトルは、
前記プレイヤ入力に対する未来フィードバックを推定する、付記11に記載のシステム。
〔付記20〕
前記合算されたタギングされた動きベクトルは、
H.264コーディング標準にしたがう、付記11に記載のシステム。
〔付記21〕
段階を含む動きベクトルをキャッシングするためのコンピュータで実現される方法であって、
段階は、
サーバで1つ以上の動きベクトルを生成する段階(前記動きベクトルは、予め決定された基準に基づいて生成される)、
クライアントに前記生成された動きベクトルと1つ以上のインバリデータ(invalidator)を送信する段階(前記生成された動きベクトルとインバリデータは、前記クライアントでキャッシングされる)、
ユーザから入力を受信するために、前記クライアントに命令語を送信する段階(前記クライアントは、前記入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせるように構成される)、および
前記マッチングされた動きベクトルまたはインバリデータをグラフィックインタフェース(graphic interface)のエフェクト動き(effect motion)補償に適用するために、前記クライアントに命令語を送信する段階
を含む、方法。
〔付記22〕
前記動きベクトルは、
ルックアップテーブルにキャッシングされる、付記21に記載の方法。
〔付記23〕
前記1つ以上のインバリデータは、
1つ以上のキャッシングされた動きベクトルと関連する、付記21に記載の方法。
〔付記24〕
前記1つ以上のインバリデータは、
前記1つ以上のキャッシングされた動きベクトルをディセーブル(disable)させるように構成される、付記23に記載の方法。
〔付記25〕
入力が1つ以上の動きベクトルと関連するキャッシングされたインバリデータにマッチングされると、1つ以上のキャッシングされた動きベクトルを削除するように、前記クライアントに指示する段階
をさらに含む、付記21に記載の方法。
〔付記26〕
前記動きベクトルは、
固有であり予測可能である、付記21に記載の方法。
〔付記27〕
前記動きベクトルは、
予め(aheadoftime)またはランタイム(runtime)中に生成される、付記21に記載の方法。
〔付記28〕
前記動きベクトルは、
前記サーバに記録され、
要求時にキャッシングされるように前記クライアントに送信される、付記21に記載の方法。
〔付記29〕
前記動きベクトルは、
ゲームで生成される(game-generated)、付記21に記載の方法。
〔付記30〕
前記ゲームで生成された動きベクトルは、
ピクセルあたりの(per-pixel)動きベクトルで生成され、
マクロブロックあたりの(per-macorblock)動きベクトルに変換される、付記29に記載の方法。
〔付記31〕
動きベクトルをキャッシングするためのシステムであって、
ネットワークを介し、サーバは、
1つ以上の動きベクトルを生成し(前記動きベクトルは、予め決定された基準に基づいて生成される)、
クライアントに前記生成された動きベクトルと1つ以上のインバリデータを送信し(前記生成された動きベクトルとインバリデータは、前記クライアントでキャッシングされる)、
ユーザから入力を受信するために、前記クライアントに命令語を送信し(前記クライアントは、前記入力をキャッシングされた動きベクトルまたはインバリデータとマッチングさせるように構成される)、
前記マッチングされた動きベクトルまたはインバリデータをグラフィックインタフェース内のエフェクト動き補償に適用するために、前記クライアントに命令語を送信する、システム。
〔付記32〕
前記動きベクトルは、
ルックアップテーブルにキャッシングされる、付記31に記載のシステム。
〔付記33〕
前記1つ以上のインバリデータは、
1つ以上のキャッシングされた動きベクトルと関連する、付記31に記載のシステム。
〔付記34〕
前記1つ以上のインバリデータは、
前記1つ以上のキャッシングされた動きベクトルをディセーブルさせるように構成される、付記33に記載のシステム。
〔付記35〕
入力が1つ以上の動きベクトルと関連するキャッシングされたインバリデータにマッチングされると、1つ以上のキャッシングされた動きベクトルを削除するように、前記クライアントに指示する段階
をさらに含む、付記31に記載のシステム。
〔付記36〕
前記動きベクトルは、
固有であり予測可能である、付記31に記載のシステム。
〔付記37〕
前記動きベクトルは、
予めまたはランタイム中に生成される、付記31に記載のシステム。
〔付記38〕
前記動きベクトルは、
前記サーバに記録され、
要求時にキャッシングされるように前記クライアントに送信される、付記31に記載のシステム。
〔付記39〕
前記動きベクトルは、
ゲームで生成される、付記31に記載のシステム。
〔付記40〕
前記ゲームで生成された動きベクトルは、
ピクセルあたりの動きベクトルで生成され、
マクロブロックあたりの動きベクトルに変換される、付記39に記載のシステム。
〔付記41〕
動きベクトルをキャッシングするためのコンピュータで実現される方法であって、
サーバからクライアントに予め生成された動きベクトルライブラリ(motion vector library)を送信する段階(前記動きベクトルライブラリは、前記クライアントに記録されるように構成される)、
ユーザからの入力データをモニタリングするために、前記クライアントに命令語を送信する段階、
前記入力データから動き推定を計算するために、前記クライアントに命令語を送信する段階、および
前記入力データに基づいて前記記録された動きベクトルライブラリをアップデートするために、前記クライアントに命令語を送信する段階
を含み、
前記クライアントは、
前記サーバから実際の動きベクトルデータを受信する前にグラフィックインタフェースの動きを開始させるために、前記記録された動きベクトルライブラリを適用するように構成される、コンピュータで実現される方法。
〔付記42〕
前記記録された動きベクトルライブラリの適用をディセーブルさせるために、前記サーバから前記クライアントにコンテキストアップデート(context update)を送信する段階
をさらに含む、付記41に記載のコンピュータで実現される方法。
〔付記43〕
1つ以上のスケーリングファクタ(scaling factor)を前記動きベクトルライブラリに適用するための命令語を送信する段階
をさらに含む、付記41に記載のコンピュータで実現される方法。
〔付記44〕
前記スケーリングファクタは、
一般数学式:
【数5】
に基づいて計算される、付記3に記載のコンピュータで実現される方法。
〔付記45〕
前記生成された動きベクトルライブラリは、
複数の動きベクトルで構成される、付記41に記載のコンピュータで実現される方法。
〔付記46〕
前記動きベクトルは、
ゲームで生成される、付記45に記載のコンピュータで実現される方法。
〔付記47〕
前記生成された動きベクトルライブラリは、
前記クライアントに永久的に記録されるように構成される、付記41に記載のコンピュータで実現される方法。
〔付記48〕
前記動きベクトルライブラリは、
ビルドプロセス(buildprocess)中に生成される、付記41に記載のコンピュータに実現された方法。
〔付記49〕
前記生成された動きベクトルライブラリは、
前記ユーザからの前記入力データと関連する、付記41に記載のコンピュータに実現された方法。
〔付記50〕
前記命令語は、
相関タグ(correlation tag)で構成され、
前記相関タグは、
前記ユーザからの前記入力データと関連する、付記41に記載のコンピュータに実現された方法。
〔付記51〕
動きベクトルをキャッシングするためのシステムであって、
ネットワークを介し、サーバは、
クライアントに予め生成された動きベクトルライブラリを送信し(前記動きベクトルライブラリは、前記クライアントに記録されるように構成される)、
ユーザからの入力データをモニタリングするために、前記クライアントに命令語を送信し、
前記入力データから動き推定を計算するために、前記クライアントに命令語を送信し、
前記入力データに基づいて前記記録された動きベクトルライブラリをアップデートするために、前記クライアントに命令語を送信し、
前記クライアントは、
前記サーバから実際の動きベクトルデータを受信する前にグラフィックインタフェースの動きを開始させるために、前記記録された動きベクトルライブラリを適用するように構成される、システム。
〔付記52〕
前記記録された動きベクトルライブラリの適用をディセーブルさせるために、前記サーバから前記クライアントにコンテキストアップデートを送信する段階
をさらに含む、付記51に記載のシステム。
〔付記53〕
前記サーバは、
1つ以上のスケーリングファクタを前記動きベクトルライブラリに適用するための命令語をさらに送信する、付記51に記載のシステム。
〔付記54〕
前記スケーリングファクタは、
一般数学式:
【数6】
に基づいて計算される、付記53に記載のシステム。
〔付記55〕
前記生成された動きベクトルライブラリは、
複数の動きベクトルで構成される、付記51に記載のシステム。
〔付記56〕
前記動きベクトルは、
ゲームで生成される、付記55に記載のシステム。
〔付記57〕
前記生成された動きベクトルライブラリは、
前記クライアントに永久的に記録されるように構成される、付記51に記載のシステム。
〔付記58〕
前記動きベクトルライブラリは、
ビルドプロセス中に生成される、付記51に記載のシステム。
〔付記59〕
前記生成された動きベクトルライブラリは、
前記ユーザからの前記入力データと関連する、付記51に記載のシステム。
〔付記60〕
前記命令語は、
相関タグで構成され、
前記相関タグは、
前記ユーザからの前記入力データと関連する、付記51に記載のシステム。
図1
図2
図3
図4a
図4b
図4c
図5
図6a
図6b
図6c
図7
図8
図9
図10
図11
図12
図13