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

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

▶ バルブ コーポレーションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-27
(45)【発行日】2025-01-14
(54)【発明の名称】分散システムにおける動き平滑化
(51)【国際特許分類】
   G06T 19/00 20110101AFI20250106BHJP
【FI】
G06T19/00 A
【請求項の数】 20
(21)【出願番号】P 2022548609
(86)(22)【出願日】2021-02-12
(65)【公表番号】
(43)【公表日】2023-03-30
(86)【国際出願番号】 US2021017967
(87)【国際公開番号】W WO2021163570
(87)【国際公開日】2021-08-19
【審査請求日】2024-01-29
(31)【優先権主張番号】16/792,080
(32)【優先日】2020-02-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】517160525
【氏名又は名称】バルブ コーポレーション
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】ライビー、アーロン
【審査官】渡部 幸和
(56)【参考文献】
【文献】特表2019-506015(JP,A)
【文献】米国特許出願公開第2018/0220119(US,A1)
【文献】米国特許第09978180(US,B2)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 19/00
(57)【特許請求の範囲】
【請求項1】
ヘッドマウントディスプレイ(HMD)であって、
1つ以上のディスプレイパネルと、
プロセッサと、
コンピュータ実行可能命令を記憶するメモリと、を備え、前記命令が、前記プロセッサによって実行されると、前記HMDに、
前記HMDに通信可能に連結されたホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記圧縮されたピクセルデータを解凍してピクセルデータを取得することと、
レンダリングメッシュを生成することと、なお、前記レンダリングメッシュはテッセレーションメッシュを含む、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記レンダリングメッシュの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、
前記ピクセルデータを修正して、修正されたピクセルデータを取得することであって、前記ピクセルデータが、
前記HMDの予測姿勢、および
前記移動された頂点、なお、前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することが、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、に少なくとも部分的に基づいて修正される、取得することと、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記1つ以上のディスプレイパネル上に画像を提示することと、を行わせる、HMD。
【請求項2】
前記頂点が、
前記非ゼロ動きベクトルの方向に、かつ
前記非ゼロ動きベクトルの大きさに対応する量だけ、移動される、請求項に記載のHMD。
【請求項3】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記HMDに、さらに、符号化されたデータストリームから前記動きベクトルアレイを抽出させる、請求項1に記載のHMD。
【請求項4】
前記ホストコンピュータが、前記HMDに無線で連結され、
前記動きベクトルアレイが、前記ホストコンピュータから無線で受信される、請求項1に記載のHMD。
【請求項5】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記HMDに、
さらに、前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得させ、
記ピクセルデータを修正することが、前記修正された動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することを含む、請求項1に記載のHMD。
【請求項6】
方法であって、
ヘッドマウントディスプレイ(HMD)によって、ホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記HMDによって、前記圧縮されたピクセルデータを解凍して、ピクセルデータを取得することと、
前記HMDによってレンダリングメッシュを生成することと、なお、前記レンダリングメッシュはテッセレーションメッシュを含む、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記レンダリングメッシュの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、
前記HMDによって、前記移動された頂点に少なくとも部分的に基づいて前記ピクセルデータを修正して、修正されたピクセルデータを取得することと、なお、前記移動された複数の頂点に少なくとも部分的に基づく前記ピクセルデータの前記修正が、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記HMDの1つ以上のディスプレイパネル上に画像を提示することと、を含む、方法。
【請求項7】
前記ピクセルデータの前記修正の前に、
前記HMDのメモリ内の前記ピクセルデータをキャッシュされたピクセルデータとしてキャッシュすることと、
前記キャッシュされたピクセルデータが、前記HMDに利用可能な最後に解凍されたピクセルデータを表すことを決定することと、
前記HMDの前記メモリから前記キャッシュされたピクセルデータを取り出すことと、をさらに含む、請求項に記載の方法。
【請求項8】
前記動きベクトルアレイを符号化されたデータストリームから抽出することをさらに含む、請求項に記載の方法。
【請求項9】
前記画像の前記提示の前に、
前記HMDによって、前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって、前記ピクセルデータを生成するために使用された前記HMDの予測姿勢を示す姿勢データを受信することをさらに含み、
前記ピクセルデータの前記修正が、前記HMDの前記予測姿勢と更新された姿勢の予測との間の比較にさらに少なくとも部分的に基づいている、請求項に記載の方法。
【請求項10】
前記画像の前記提示の前に、
前記HMDによって、前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって出力されるZバッファデータを表す深度データを受信することをさらに含み、
前記ピクセルデータの前記修正が、前記深度データにさらに少なくとも部分的に基づいている、請求項に記載の方法。
【請求項11】
前記HMDによって、前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得することをさらに含み、
記ピクセルデータの前記修正が、前記修正された動きベクトルアレイに基づいて、前記ピクセルデータを修正することを含む、請求項に記載の方法。
【請求項12】
ディスプレイシステムであって、
1つ以上のディスプレイパネルと、
プロセッサと、
コンピュータ実行可能命令を記憶するメモリと、を備え、前記命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、
ホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記圧縮されたピクセルデータを解凍してピクセルデータを取得することと、
レンダリングメッシュを生成することと、なお、前記レンダリングメッシュはテッセレーションメッシュを含む、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記レンダリングメッシュの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、
前記移動された頂点に少なくとも部分的に基づいて前記ピクセルデータを修正して、修正されたピクセルデータを取得することと、なお、前記移動された複数の頂点に少なくとも部分的に基づく前記ピクセルデータの前記修正が、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記1つ以上のディスプレイパネル上に画像を提示することと、を行わせる、ディスプレイシステム。
【請求項13】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ピクセルデータを修正する前に、前記ディスプレイシステムに、
前記メモリ内の前記ピクセルデータを、キャッシュされたピクセルデータとしてキャッシュすることと、
前記キャッシュされたピクセルデータが、前記ディスプレイシステムに利用可能な最後に解凍されたピクセルデータを表すことを決定することと、
前記メモリから前記キャッシュされたピクセルデータを取り出すことと、を行わせる、請求項12に記載のディスプレイシステム。
【請求項14】
前記ホストコンピュータが、前記ディスプレイシステムに無線で連結され、
前記動きベクトルアレイが、前記ホストコンピュータから無線で受信される、請求項12に記載のディスプレイシステム。
【請求項15】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記画像を提示する前に、前記ディスプレイシステムに、
前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって出力されるZバッファデータを表す深度データを受信させ、
前記ピクセルデータを修正することが、前記深度データにさらに少なくとも部分的に基づいている、請求項12に記載のディスプレイシステム。
【請求項16】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、
前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得させ、
記ピクセルデータを前記修正することが、前記修正された動きベクトルアレイに基づいて前記ピクセルデータを修正することを含む、請求項12に記載のディスプレイシステム。
【請求項17】
前記ディスプレイシステムが、仮想現実(VR)ヘッドセットまたは拡張現実(AR)ヘッドセットのうちの少なくとも1つを含む、請求項12に記載のディスプレイシステム。
【請求項18】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、さらに、符号化されたデータストリームから前記動きベクトルアレイを抽出させる、請求項12に記載のディスプレイシステム。
【請求項19】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記画像を提示する前に、前記HMDに、
前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって出力されるZバッファデータを表す深度データを受信させ、
前記ピクセルデータを修正することが、前記深度データにさらに少なくとも部分的に基づいている、請求項1に記載のHMD。
【請求項20】
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ピクセルデータを修正する前に、前記HMDに、
前記メモリ内の前記ピクセルデータを、キャッシュされたピクセルデータとしてキャッシュすることと、
前記キャッシュされたピクセルデータが、前記HMDに利用可能な最後に解凍されたピクセルデータを表すことを決定することと、
前記メモリから前記キャッシュされたピクセルデータを取り出すことと、を行わせる、請求項1に記載のHMD。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2020年2月14日に出願された「MOTION SMOOTHING IN A DISTRIBUTED SYSTEM」と題する同時係属の本発明の譲受人に譲渡された米国特許出願第16/792,080号の優先権を主張するPCT出願であり、当該米国特許出願は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0002】
仮想現実(VR)システムは、ビデオゲーム業界の内部および外部の両方で使用されている。VRシステムは、オールインワン(またはスタンドアロン)VRヘッドセットとして、または分散システムとしてセットアップされ得る。分散セットアップでは、VRヘッドセットは、物理的にテザリングされるか、またはホストコンピュータに無線で接続され得る。この分散セットアップでは、ホストコンピュータは、通常、フレームを出力するビデオゲームなどのグラフィックスベースのアプリケーションを実行し、VRヘッドセットは、フレームがホストコンピュータからストリーミングされるときにフレームを表示する。このタイプのセットアップは、ホストコンピュータの高演算能力を活用して、「シンクライアント」デバイスのように機能する軽量のVRヘッドセットに高品質の画像を表示する。さらに、VRヘッドセットに内蔵されているようなVRシステム用ディスプレイは、通常、VRアプリケーションに好適である最小リフレッシュレートで動作する。例えば、90ヘルツ(Hz)はVRディスプレイの一般的なリフレッシュレートである。「ライブレンダリング」シナリオでは、グラフィックスベースのアプリケーションは、ディスプレイのリフレッシュレートに適合するフレームレートでレンダリングするためのフレームを出力する。このシナリオでは、十分なデータ転送レートでフレームがホストコンピュータからVRヘッドセットに転送されていると仮定すると、画面がリフレッシュされるたびに、アプリケーションによって出力される新しいフレーム(本明細書では「実際のフレーム」と称する)が表示され得る。そのようなライブレンダリングシナリオは、多くの場合、アプリケーションが「フレームレートに到達する」と称される。
【0003】
実際には、アプリケーションは、様々な理由で常にフレームレートに到達するとは限らない。例えば、アプリケーションがフレームを断続的にドロップする場合があり、および/またはアプリケーションが一時的により遅いレートでフレームを出力する場合がある(例えば、理想的なフレームレートが1秒当たり90フレームの場合は1秒当たり45フレーム)。さらに、分散システムでは、ネットワークの混雑は、ホストコンピュータからVRヘッドセットにデータが転送されるレートにおけるレイテンシをもたらし得る。これらの状況では、「回転のみの再投影」と呼ばれる技術が、ユーザの頭部の回転を考慮するように、欠落しているフレームを再投影フレームで置き換えるために使用され得、これは、欠落しているフレームがないかのようにユーザに見せる。例えば、再投影しない場合、アプリケーションからのフレームレートが不足する、またはフレームがVRヘッドセットに遅れて到着すると、ゲーム内でスタッタまたはヒッチが発生する場合がある。ユーザが仮想環境に完全に没入しているVRアプリケーションでは、フレームが欠落し、欠落しているフレームを補償するための再投影が存在しない場合、ユーザは、不快になり得る。したがって、再投影は、フレームが欠落したときにユーザ体験をより良好にすることを可能にする技術である。アプリケーションが理想的なフレームレートの半分でフレームを出力している例を検討する(例えば、理想的なフレームレートが1秒当たり90フレームの場合は1秒当たり45フレーム)。この例では、最後にレンダリングされた実際のフレームのピクセルデータを使用して、シーンを変換する再投影フレームを作成し(例えば、回転および再投影の計算を通して)、再投影シーンをユーザの現在の頭部の向きに一致させることで、1つおきにフレームを再投影させることができる。これは、再投影フレームが欠損フレームを補償するために使用される場合でさえも、ユーザの頭部の回転を考慮して予想される方式でシーンが移動しているようにユーザに見えるようにする。
【0004】
回転のみの再投影は、ゲーム内のスタッタまたはヒッチを防止するが、少なくとも、低持続性ディスプレイを使用するVRシステム(例えば、ディスプレイがフレーム時間のうちのごくわずかな間、点灯される場合)では、頭部の回転中に、回転のみの再投影自体の望ましくない視覚的アーチファクトを生成する。例えば、回転のみの再投影は、頭部の回転を考慮するが、フレーム間でシーン内を移動するかまたは動く仮想オブジェクトを考慮しない。これは、移動しているかまたは動いているオブジェクトに関して、「ジャダー」と呼ばれる望ましくない視覚的アーチファクトを発生させ得る。ジャダーは、移動しているオブジェクト(例えば、画面上を移動する弾丸またはボール)が2つの位置の間で(またはそれ自体から離れて)フレーム間で跳ね返るように見える、「ダブルゴースト効果」をユーザに知覚させる。したがって、再投影が使用されている間にユーザがその頭部を回転させると、シーン内で任意に移動しているかまたは動いているオブジェクトがジャダーすることになる。
【0005】
本明細書では、これらのシステムおよび他のシステムを改善および強化するための技術的解決法を提供する。
【図面の簡単な説明】
【0006】
詳細な説明を、添付の図面を参照して説明する。各図において、参照番号の左端数字は、参照番号が最初に現れる図を識別する。異なる図における同じ参照番号の使用は、類似または同一の構成要素または特徴を示す。
【0007】
図1】本明細書に開示される実施形態による、フレームが、ヘッドマウントディスプレイ(HMD)に通信可能に連結されたホストコンピュータ上で実行されるアプリケーションによって出力されるときに、HMD上にフレームをレンダリングするための例示的なプロセスのフロー図である。図1は、シーン内で移動しているかまたは動いているオブジェクトを考慮するために再投影中に実装され得る動き平滑化技術を示す。
図2】本明細書に開示される実施形態による、ホストコンピュータおよびHMDのそれぞれのレンダリングワークロードを示す2つの例示的なタイムラインを示す図である。
図3】再投影がHMDなどのディスプレイ上のフレームをレンダリングするために使用されているときに、シーン内で移動しているかまたは動いているオブジェクトを考慮するための例示的な動き平滑化技術を示す図である。
図4】例示的なレンダリングメッシュ、および再投影フレームの動き平滑化にレンダリングメッシュをどのように使用することができるかを示す図である。
図5】本明細書に開示される実施形態による、動き平滑化技術の一部としてグラフィックスプロセッシングユニット(GPU)によって生成される動きベクトルを使用して再投影フレームを生成するための例示的なプロセスのフロー図である。
図6】本明細書に開示される実施形態による、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセスのフロー図である。
図7】本明細書に開示される実施形態による、以前にレンダリングされたフレームのいくつかのピクセルデータを除外し、動きベクトル推定のためにGPUへの入力としてピクセルデータの残りの部分を提供するための例示的なプロセスのフロー図である。
図8】本明細書に開示される実施形態による、以前にレンダリングされたフレームのピクセルデータのパネルマスク部分を除外し、動きベクトル推定のためにGPUへの入力としてピクセルデータの残りの部分を提供する、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセスのフロー図である。
図9】本明細書に開示される実施形態による、動き平滑化技術の一部として再投影フレームを生成するために使用される前にGPUから出力される動きベクトルを閾値化するための例示的なプロセスのフロー図である。
図10】本明細書に開示される実施形態による、動き平滑化技術の一部として再投影フレームを生成するために使用される前にGPUから出力される動きベクトルを減衰させるための例示的なプロセスのフロー図である。
図11】本明細書に開示される実施形態による、減衰テクスチャを生成するための例示的なプロセスのフロー図であり、減衰テクスチャは、動き平滑化技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを減衰させるために使用され得る。
図12】本明細書に開示される実施形態による、結果として生じる動きベクトルのセットが動き平滑化技術の一部として再投影フレームを生成するために使用される前に、ほとんどまたはまったくない色変化の領域に対応する動きベクトルをゼロ化するための例示的なプロセスのフロー図である。
図13】本明細書に開示される実施形態による、結果として生じる動きベクトルのセットが動き平滑化技術の一部として再投影フレームを生成するために使用される前に、1つ以上のフィルタを使用して動きベクトル場を「クリーンアップする」ための例示的なプロセスのフロー図である。
図14】本明細書に開示される実施形態による、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームを回転させるための例示的なプロセスのフロー図である。
図15】本明細書に開示される実施形態による、以前にレンダリングされたフレームのルマデータおよびクロマデータに基づいて生成される動きベクトルアレイ間で選択するための例示的なプロセスのフロー図である。
図16】本明細書に開示される実施形態による、動きベクトルの複数のアレイを取得し、アレイ間の差を決定し、動き平滑化のための決定された差に基づいて最終的な動きベクトルアレイを生成するための例示的なプロセスのフロー図である。
図17】本明細書に開示される実施形態による、画像領域の異なる部分について異なる解像度で複数の動きベクトルアレイを取得するための例示的なプロセスのフロー図である。
図18A】本明細書に開示される実施形態による、HMDおよびホストコンピュータを利用するシステムの2つの代替的なセットアップを示す。
図18B】本明細書に開示される実施形態による、HMDおよびホストコンピュータを利用するシステムの2つの代替的なセットアップを示す。
図19】本明細書に開示される技術が実装され得る、VRヘッドセットなどの装着用デバイスの例示的なコンポーネントを示す。
図20】本明細書に開示される技術が実装され得る、ホストコンピュータの例示的なコンポーネントを示す。
【発明を実施するための形態】
【0008】
本明細書には、とりわけ、分散システムのディスプレイ上でフレームをレンダリングするときに、シーン内を移動しているかまたは動いているオブジェクトを考慮するための動き平滑化技術が記載されている。本明細書に記載される動き平滑化技術は、移動しているかまたは動いているオブジェクトの前述のジャダーアーチファクトなど、移動しているかまたは動いているオブジェクトに関して望ましくない視覚的アーチファクトを軽減する。ヘッドマウントディスプレイ(HMD)は、ディスプレイ上に画像をレンダリングするときに開示された動き平滑化技術を実装することができるディスプレイまたはディスプレイシステムの例示的なタイプである。HMDは、ユーザが仮想現実(VR)環境または拡張現実(AR)環境に没入する目的で、ユーザによって装着され得る。HMDなどのディスプレイまたはディスプレイシステムは、ホストコンピュータから分離され得るが、なおもこれに通信可能に連結され得る。アプリケーション(例えば、ビデオゲーム)は、ホストコンピュータ上で実行され、一連のフレームの個々のフレームについてのピクセルデータを生成する。ピクセルデータは、フレームごとにHMDに送信され、HMDの1つ以上のディスプレイパネルは、受信したピクセルデータに基づいて画像をレンダリングする。これらの画像は、HMDに含まれる光学系を通してユーザによって視認され、ユーザに、ユーザがVRまたはAR環境に没入しているかのように画像を知覚させる。
【0009】
記載されるように、HMDなどのディスプレイシステムは、「再投影」と呼ばれる技術を利用して、フレームレートに達していないアプリケーションを補償することができる。例えば、再投影フレームは、実際のフレーム間でレンダリングされて理想的なフレームレートを達成し得、各再投影フレームは、ホストコンピュータ上で実行されているアプリケーションによって出力された最近にレンダリングされた実際のフレーム(例えば、最後にレンダリングされた実際のフレーム)からのピクセルデータを使用して生成され得る。再投影フレームでは、以前の実際のフレームでレンダリングされたシーンが、ユーザの頭部の回転を考慮した方式で変換される(例えば、回転および再投影の計算を通して)。
【0010】
本明細書には、フレーム間で移動するかまたは動くオブジェクトの動きをさらに考慮する方式で、フレームのピクセルデータを修正するために分散システムで使用可能な動き平滑化技術が記載される。本明細書に記載される動き平滑化技術は、コンピュータビジョンアルゴリズムを使用して、動きベクトルの形態で複数のフレームにわたるオブジェクトの動き(例えば、方向および大きさ)を推定する。例えば、動きベクトルアレイは、ピクセルデータがHMDなどのディスプレイシステムに送信される前に、ピクセルデータを圧縮する結果(例えば、副産物として)として、ホストコンピュータによって生成され得る。したがって、動きベクトルアレイは、少なくとも一連のフレーム内のいくつかのフレームについて、圧縮されたピクセルデータを表し得る。用例では、ホストコンピュータ上のグラフィックス処理ユニット(GPU)のビデオエンコーダ(例えば、ビデオ符号化チップ)は、複数の以前にレンダリングされたフレームのピクセルデータを分析して、所与のフレームの圧縮されたピクセルデータを表す動きベクトルアレイを生成し得る。動きベクトルは、HMDに送信され得、動きベクトルを使用して解凍されたピクセルデータを取得することに加えて、動きベクトルは、HMDによって、移動しているかまたは動いているオブジェクトを考慮する方式で解凍されたピクセルデータを修正するためにも使用され得る。別の言い方をすれば、ホストコンピュータから受信した動きベクトルをHMD上で使用して、移動するオブジェクトのジャダーが軽減されるようにオブジェクトがレンダリングされる(例えば、再投影される)フレーム内のどこに位置するべきかを(以前にレンダリングされたフレーム内のオブジェクトの動きから)外挿することができる。
【0011】
例示的な動き平滑化プロセスでは、関連付けられたピクセルデータは、ホストコンピュータ上で圧縮され得る。ホストコンピュータ上のグラフィックス処理ユニット(GPU)のビデオエンコーダは、ピクセルデータを圧縮するために使用され得る。ピクセルデータを圧縮する結果として、ビデオエンコーダは、圧縮されたピクセルデータを表す動きベクトルアレイを生成し得る。ホストコンピュータは、動きベクトルアレイをHMDなどのディスプレイシステムに送信し得る。いくつかの実施形態では、ホストコンピュータは、HMDに無線で連結され得るが、本明細書では有線接続も企図される。HMDは、ホストコンピュータから、動きベクトルアレイを受信し得る。HMDは、圧縮された第1のピクセルデータを解凍して、ピクセルデータ(または、解凍もしくは復号アルゴリズムを使用したピクセルデータの近似値)を取得し得る。HMDはさらに、ホストコンピュータから受信した動きベクトルアレイに少なくとも部分的に基づいてピクセルデータを修正し、修正されたピクセルデータを取得し得る。この修正されたピクセルデータは、シーン内で移動しているかまたは動いているオブジェクトに関するいかなるジャダーも、排除しないとしても、軽減するために、「動き平滑化」される。次いで、動き平滑化フレームは、修正されたピクセルデータに少なくとも部分的に基づいて、HMDのディスプレイパネル上に画像を提示することによってレンダリングされ得る。
【0012】
本明細書に記載される動き平滑化技術は、フレームが欠落した場合でも、予想される様式で、オブジェクトがシーン内で移動するかまたは動く、より現実的で、より高忠実な視聴体験を提供する。前述のように、アプリケーションがフレームレートに到達できなかった場合、ネットワークの渋滞が発生した場合、または他の理由の可能性がある場合、フレームは欠落し得る。したがって、本明細書に記載される動き平滑化技術は、フレームが時々欠落する可能性がある場合に、分散システム内の高忠実度のユーザ体験を維持することによって、これらの発生を補償する。動き平滑化技術はまた、フレームが欠落しないとき(すなわち、フレームがHMDでタイムリーな様式で受信されるとき)のライブレンダリングシナリオにおいても、フレームの送信における固有のレイテンシを補償する。さらに、無線の実装形態において、本明細書に記載される技術は、HMDにより多くのコンポーネントを追加する必要がなく、無線HMDにおける動き平滑化補正を可能にし、それによって、今日市場に出回っている多くのオールインワン(またはスタンドアロン)ヘッドセットと比較して、高温になりすぎず、装着しやすい軽量ヘッドセットを可能にする。さらに、本明細書に記載される技術およびシステムは、ホストコンピュータからHMDにデータを圧縮および送信するためにすでに生成された動きベクトルを活用することができ、これは、HMD上の再投影フレームの動き平滑化のための動きベクトルを使用する際に追加の輸送コストがないことを意味する。
【0013】
修正された第2のピクセルデータは、第1のピクセルデータをフレームバッファに出力した後にHMD上のフレームバッファに出力されるため、ホストコンピュータから受信された動きベクトルアレイは、HMDによって将来のフレーム(例えば、再投影フレーム)に外挿するために使用され得ることを理解されたい。このようにして、本明細書に記載される例では、第1のフレームは、再投影フレームの前にレンダリングされる。この外挿技術は、フレーム間の内挿と対比され得、本明細書に説明される技術およびシステムは、フレーム間に内挿するために動きベクトルを使用するのではなく、ホストコンピュータから受信した動きベクトルを使用して将来のフレームに外挿することに関係することを理解されたい。
【0014】
本明細書では、本明細書に開示される技術およびプロセスを実装するように構成されたシステム、例えば、ディスプレイシステム(例えば、HMD)を含むシステム、ならびに本明細書に開示される技術およびプロセスを実装するためのコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体もまた、開示される。本明細書に開示される技術およびシステムは、例として、ビデオゲームアプリケーション、特にVRゲームアプリケーションの文脈で議論されているが、本明細書に説明される技術およびシステムは、非限定的に、非VRアプリケーション(例えば、ARアプリケーション)、および/または産業機械アプリケーション、防衛アプリケーション、ロボットアプリケーションなどの非ゲームアプリケーションを含む、他のアプリケーションに利益を提供し得ることを理解されたい。さらに、HMDは、画像を表示するためのディスプレイシステムの例として提供されるが、他のタイプのディスプレイシステムは、ホストコンピュータからビデオコンテンツをストリーミングするハンドヘルドディスプレイデバイス、比較的大型の壁掛け式ディスプレイシステム、またはビルボード式ディスプレイシステムなど、本明細書に説明される動き平滑化技術から利益を得ることができることを理解されたい。
【0015】
本明細書に記載のプロセスは、ロジックフローグラフ内のブロックの集合として例解され、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせ(つまり、ロジック)に実装することができる一連の動作を表す。ソフトウェアの文脈では、ブロックは、コンピュータ実行可能命令を表し、コンピュータ実行可能命令は、1つ以上のプロセッサによって実行されると、列挙された動作を実行する。一般に、コンピュータ実行可能命令は、特定の機能を実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が記載される順序は、限定として解釈されることを意図するものではなく、任意のいくつかの記載されたブロックは、プロセスを実装するために任意の順序でおよび/または並行して組み合わされ得る。
【0016】
図1は、本明細書に開示される実施形態による、(ユーザ104によって装着される)ヘッドマウントディスプレイ(HMD)102上にフレームをレンダリングするための例示的なプロセス100のフロー図であり、フレームは、HMD102に通信可能に連結されるホストコンピュータ106上で実行されるアプリケーションによって出力される。図1は、シーン内で移動しているかまたは動いているオブジェクトを考慮するために再投影中に実装され得る動き平滑化技術を示す。
【0017】
図1の上部において、HMD102は、ユーザ104によって装着されているように示され、ホストコンピュータ106は、HMD102に通信可能に連結されているように示されている。例えば、ホストコンピュータ106は、これらに限定されないが、パーソナルコンピュータ(PC)、ラップトップコンピュータ、デスクトップコンピュータ、ポータブルデジタルアシスタント(PDA)、モバイルフォン、タブレットコンピュータ、セットトップボックス、ゲームコンソール、サーバコンピュータ、ウェアラブルコンピュータ(例えば、スマートウォッチなど)、またはデータを送受信することができる任意の他の電子デバイスを含む、任意のタイプのコンピューティングデバイスおよび/または任意の数のコンピューティングデバイスとして実装することができる。
【0018】
ホストコンピュータ106およびHMD102は、アプリケーション(例えば、ビデオゲーム)を実行し、ディスプレイ上に関連付けられた画像をレンダリングするための分散システムを集合的に表す。いくつかの実施形態では、ホストコンピュータ106は、HMD102を装着するユーザ104の世帯など、HMD102と同じ環境に併置され得る。代替的に、ホストコンピュータ106は、HMD102の地理的位置に関して遠隔地理的位置に位置するサーバコンピュータの形態でホストコンピュータ106など、HMD102に関して遠隔に位置することができる。リモートホストコンピュータ106の実装形態では、ホストコンピュータ106は、インターネットなどの広域ネットワークを介してHMD102に通信可能に連結され得る。ローカルホストコンピュータ106の実装形態では、ホストコンピュータ106は、HMD102と環境(例えば、世帯)内に併置され得、それによって、ホストコンピュータ106およびHMD102は、直接的に、または仲介ネットワークデバイスを介してローカルエリアネットワーク(LAN)を通して通信可能に一緒に連結され得る。
【0019】
一緒に通信可能に連結されることによって、HMD102およびホストコンピュータ106は、HMD102のディスプレイパネル上に対応する画像を提示するために使用されるピクセルデータを生成することによって、所与のフレームをレンダリングするために協働的に一緒に働くように構成されている。ホストコンピュータ106およびHMD102は、無線および/または有線接続を介して通信可能に一緒に連結され得る。例えば、デバイス102/106は、Wi-Fi、Bluetooth(登録商標)、無線周波数(RF)、および/または任意の他の好適な無線プロトコルを使用してデータを交換することができる。追加的または代替的に、デバイス102/106は、それらの間のデータ転送のための有線接続を容易にするための1つ以上の物理ポートを含み得る。
【0020】
HMD102は、開示された動き平滑化技術を実装し得る例示的な「ディスプレイシステム」として本明細書に提示されるが、「ディスプレイシステム」の他のタイプおよび/または実装形態が、本明細書に説明される動き平滑化技術を実装し得ることを理解されたい。したがって、HMDは、本明細書に記載される技術を実装するための単なる例示的なタイプのディスプレイまたはディスプレイシステムであることを理解されたいが、本明細書における「HMD」への任意の言及は、用語「ディスプレイ」または「ディスプレイシステム」で置き換えられ得ることを理解されたい。いくつかの例では、HMD102は、VRゲームシステムで使用するためなど、VRシステムで使用するためのVRヘッドセットを表し得る。しかしながら、HMD102は、追加的に、または代替的に、ARアプリケーションで使用するためのARヘッドセット、またはゲーム関連ではない(例えば、産業アプリケーション)VRおよび/またはARアプリケーションで使用可能なヘッドセットとして実装され得る。ARでは、ユーザ104は、実世界環境上に重ね合わされた仮想オブジェクトを見るが、VRでは、ユーザ104は、典型的には実世界環境を見ることはなく、HMD102のディスプレイパネルおよび光学系(例えば、レンズ)を介して知覚されるような仮想環境に完全に没入する。一部のVRシステムでは、ユーザ104の現実世界の環境のパススルー画像は、仮想画像と併せて表示されて、VRシステム内に拡張VR環境を作成し得、それによって、VR環境は、現実世界の画像で拡張される(例えば、仮想世界上にオーバーレイされる)ことを理解されたい。本明細書で説明する例は、主にVRベースのHMD102に関係するが、HMD102は、VRアプリケーションでの実装形態に限定されないことを理解されたい。
【0021】
さらに、HMD102は、ディスプレイパネルのステレオ対のうちの左ディスプレイパネルおよび右ディスプレイパネルなどの、単一のディスプレイパネルまたは複数のディスプレイパネルを含み得る。HMD102の1つ以上のディスプレイパネルは、HMD102を装着しているユーザ104によって視認可能である一連の画像フレーム(本明細書では、「フレーム」と称される)を提示するために使用され得る。HMD102は、任意の数のディスプレイパネル(例えば、3つ以上のディスプレイパネル、一対のディスプレイパネル、または単一のディスプレイパネル)を含み得ることを理解されたい。したがって、「ディスプレイパネル」という用語は、本明細書で単数形で使用される際、2パネルHMD102の一対のディスプレイパネルのいずれかのディスプレイパネルを指し得るか、または任意の数のディスプレイパネル(例えば、単一パネルHMD102またはマルチパネルHMD102)を有するHMD102の単一のディスプレイパネルを指し得る。2パネルHMD102では、ステレオフレームバッファは、例えば、HMD102の両方のディスプレイパネル上で2160×1200ピクセル(例えば、ディスプレイパネル当たり1080×1200ピクセル)をレンダリングし得る。
【0022】
さらに、HMD102のディスプレイパネルは、ディスプレイパネル上でのフレームの提示中に発光素子(例えば、発光ダイオード(LED))を利用して光を放出する発光ディスプレイなど、任意の好適なタイプのディスプレイ技術を利用し得る。例として、HMD102のディスプレイパネルは、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、無機発光ダイオード(ILED)ディスプレイ、またはHMDアプリケーションのための任意の他の好適なタイプのディスプレイ技術を含み得る。
【0023】
HMD102のディスプレイパネルは、固定リフレッシュレートまたはリフレッシュレートの範囲にわたって動的に変化する可変リフレッシュレートであり得る90ヘルツ(Hz)リフレッシュレートなどの任意の好適なリフレッシュレートで動作し得る。ディスプレイの「リフレッシュレート」は、ディスプレイが画面を再描画する1秒当たりの回数である。1秒当たりに表示されるフレームの数は、固定リフレッシュレートをした場合、ディスプレイのリフレッシュレートによって制限され得る。したがって、一連のフレームは、一連のフレームのうちの1つのフレームが画面の更新ごとに表示されるように、処理され(例えば、レンダリングされ)、ディスプレイ上に画像として表示され得る。すなわち、HMD102上に一連の画像を提示するために、HMD102のディスプレイパネルは、一連のフレーム内で、ディスプレイのリフレッシュレートでフレーム間に遷移し得、画面のリフレッシュごとにピクセルを点灯させる。いくつかの実施形態では、フレームレートを抑制することができ、および/またはアプリケーションがターゲットフレームレートに到達することができず、および/またはネットワークの混雑は、データ送信にレイテンシをもたらし得る。これらのシナリオでは、再投影フレーム(本明細書では「幻のフレーム」と称されることもある)は、アプリケーションレンダリングされたフレーム(本明細書では「実際のフレーム」と称されることもある)の間に挿入することができる。
【0024】
概して、ホストコンピュータ106上で実行するアプリケーションは、グラフィックスベースのアプリケーション(例えば、ビデオゲーム)であり得る。アプリケーションは、HMD102のディスプレイパネル上に画像を提示するために使用され得る一連のフレームを出力するように構成される。例えば、アプリケーションは、一連のフレームに関するピクセルデータを生成し得、ピクセルデータは、HMD102のディスプレイパネル上に対応する画像を提示するために使用される。いくつかの実施形態では、フレームがHMD100のディスプレイパネル上にレンダリングされる前にターゲットにレンダリングされ得るように、画面外レンダリングが利用される。したがって、「レンダリング」は、本明細書で使用される際、ディスプレイ以外のターゲットへのレンダリングおよびディスプレイ自体へのレンダリングの前、および/またはディスプレイへのレンダリング(例えば、異なるターゲットへの画面外レンダリングを伴わずに、またはその後に)を含むことができる。
【0025】
ここでプロセス100を参照すると、112において、ホストコンピュータ106のロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)は、ホストコンピュータ106上で実行されているアプリケーションから、一連のフレームの第1のフレームのピクセルデータを取得(または受信)し得る。ピクセルデータは、HMD102のディスプレイパネルのピクセルアレイ内の個々のピクセルのためのピクセル値を含み得る。実行中のアプリケーションから取得されるピクセルデータはいくつかの実施形態では、ピクセルごとの値(例えば、色値)の二次元アレイを含み得る。いくつかの実施形態では、ピクセルデータは、深度値、輝度値などの追加のデータまたはメタデータをさらに含む。いくつかの実施形態では、ピクセルデータは、色およびアルファ値の単一のセットによって表される各ピクセルのデータを含み得る(例えば、赤チャネルの1つの色値、緑チャネルの1つの色値、青チャネルの1つの色値、および1つ以上のアルファチャネルの1つ以上の値)。
【0026】
いくつかの実施形態では、ホストコンピュータ106は、まず、HMD102から頭部追跡データを受信してもよく、これは、フレームについてのピクセルデータを生成するためのHMD102の予測姿勢を決定するために使用されてもよい。すなわち、ホストコンピュータ106は、HMD102から受信した頭部追跡データを使用して、アプリケーションによってレンダリングされることになるフレームに対してHMD102のディスプレイパネルの発光素子が点灯する時間にHMD102があるであろう予測姿勢を示す姿勢データを生成し得る。例えば、HMD102の頭部追跡システムは、HMD102の最大6自由度(例えば、三次元(3D)位置、ロール、ピッチ、およびヨー)を追跡するように構成され得、これは、HMD102の予測姿勢(例えば、HMD102の将来の姿勢に起因する予測頭部移動を考慮する)を決定するために、頭部追跡データとしてホストコンピュータ106に送信され得る。したがって、予測姿勢を示す姿勢データは、フレームをレンダリングするためのアプリケーションへの入力として提供され得、アプリケーションは、姿勢データに基づいてピクセルデータを出力し得る。例えば、アプリケーションは、姿勢データを受信するための関数を呼び出し得、要求された姿勢データ(フレームの目標点灯時間に予測される)は、アプリケーションが姿勢データに従ってフレームをレンダリングすることができるようにアプリケーションに提供され得、これは、シーンをレンダリングするために使用される仮想カメラの姿勢に対応する。
【0027】
いくつかの実施形態では、アプリケーションは、フレームおよび/または余分なピクセルデータ(本明細書では「境界外ピクセルデータ」または「追加のピクセルデータ」と称されることがある)のための深度データ(例えば、Zバッファデータ)を生成するようにさらに指示され得、それに応答して、ブロック112において、ホストコンピュータ106のロジックは、上述したピクセルデータに加えて、アプリケーションから深度データおよび/またはフレームに関連付けられている余分なピクセルデータを取得し得る。アプリケーションによって出力される深度バッファ(またはZバッファ)からなどの深度データは、シーン内の閉塞されたオブジェクトを示し得る。したがって、深度データは、とりわけ、シーン内のオブジェクトの視差を調整するために使用され得る(例えば、世界空間で遠く離れている船は、クローズアップオブジェクトが同じ頭部の移動で動くほど頭部の移動で動かない場合がある)。シーン内の仮想オブジェクトに対応するピクセルの深度を知ることは、HMD102への再投影中にそのような視差を調整する方法を知ることに役立つ。深度情報を知ることはまた、HMD102の回転に基づくだけでなく、空間内のHMD102の並進に基づいて、シーンを歪めることも可能にする。いかなる深度データも伴わずに、システムは、約2メートルの平均深度を仮定し得る。しかしながら、シーン内の平均深度のより良い推定値を提供する任意の好適な深度の解像度は、HMD102上で再投影を実行する際に有益であり得、利用可能な帯域幅に含まれ得る深度の解像度が高いほど、HMD102上でより良い再投影調整を行うことができる。とはいっても、低解像度の深度データを送信することで、低レイテンシなどの利点がある場合もある。深度データの解像度がHMD102上の再投影調整を改善するのに好適である限り、深度データを含むことが有益であり得る。
【0028】
アプリケーションによって出力される余分なピクセルデータは、HMD102のディスプレイパネルのピクセルのアレイの境界の外側に余分なピクセル値を含み得る。例えば、HMD102のディスプレイパネルが2160×1200ピクセルのアレイを有する場合、ブロック112において取得されたピクセルデータは、ピクセルの2160×1200アレイ内のピクセル値に対応し得、一方で、余分なピクセルデータは、2160×1200アレイの境界の外側にあるピクセルに対応し得る。したがって、ピクセルデータおよび余分なピクセルデータは、例えば、2400×1400ピクセルのより大きなアレイなどのより多くの数のピクセル値を構成し得る。ターゲットよりも大きいビューでレンダリングする能力は、視野(FOV)のいかなる効果的な減少も伴わずに、ディスプレイ領域の周辺の周りにパネルマスクを適用することを可能にし得る。
【0029】
114において、ホストコンピュータ106のロジックは、ブロック112においてアプリケーションから取得されたピクセルデータを圧縮し得る。ブロック114においてピクセルデータを圧縮するための例示的な理由は、ホストコンピュータ106とHMD102との間のデータ接続の帯域幅の制限に起因する。例えば、所望のフレームレート(例えば、90Hz以上のフレームレート)でフレームを表示するために割り当てられた時間量で非圧縮ピクセルデータ(例えば、ファイル)を送信するのに十分な帯域幅がないことが多い。圧縮は、(ピクセルデータを圧縮しないことと比較して)エンドツーエンドのグラフィックスパイプラインにある程度のレイテンシを導入するが、ピクセルデータを圧縮するためのこの追加の時間は、姿勢予測に考慮され得、圧縮のためにもたらされたレイテンシを考慮するためにHMD102上で調整が行われ得る。
【0030】
いくつかの実施形態では、ブロック114において実行される圧縮は、ピクセルデータのフォーマットを変更することを伴う。例えば、ブロック114における圧縮は、H.265および/またはMPEG-Hパート2と称されることもある、高効率ビデオコーディング(HEVC)および/またはHEVCの拡張などのビデオ圧縮規格を利用し得る。HEVCは、ブロック114において利用され得るビデオ圧縮規格の例であるが、ブロック114においてピクセルデータを圧縮するために、他の好適なビデオ圧縮規格を利用できることを理解されたい。HEVCは、ピクセルデータを圧縮するために動き推定を利用し、帯域幅の制約が存在するシステムにおいて非圧縮ピクセルデータよりも少ないデータを送信し、かつ圧縮データが受信側(例えば、HMD102において)で元の非圧縮データを近似するのに十分であるという目標を有する。ブロック114における圧縮動作において利用される動き推定の一部として、動きベクトルアレイが生成され得、これは、サブブロック116において示される。概して、「動きベクトル」は、方向のためのXおよびY成分、ならびに大きさ(通常は、2D矢印の長さによって表される)を有する二次元(2D)矢印である。動きベクトルの大きさは、XおよびY成分方向の両方でのピクセル数など、任意の好適な測定単位で指定され得る。いくつかの例では、ホストコンピュータ106のGPUのビデオエンコーダ(例えば、ビデオ符号化チップ)は、ブロック112において取得された第1のピクセルデータに基づいて、および1つ以上の他のフレーム(例えば、以前にレンダリングされたフレーム)のピクセルデータに基づいて、サブブロック116において動きベクトルアレイを生成し得る。サブブロック116において動きベクトルアレイを生成するために、ビデオエンコーダは、圧縮アルゴリズムに従って、ビデオエンコーダが分析することを課せられる各フレームのピクセルデータ間でピクセルごとの値(例えば、輝度値)を比較し得る。追加的に、または代替的に、ビデオエンコーダは、圧縮アルゴリズムに従って、マクロブロック(例えば、16ピクセルのブロック(すなわち、4×4ピクセルのマクロブロック)、64ピクセルのブロック(すなわち、8×8ピクセルのマクロブロック)、4096ピクセルのブロック(すなわち、64×64ピクセルのマクロブロックなど))を、ビデオエンコーダが分析することを課される各フレームのピクセルデータ間で比較し得る。ホストコンピュータ106のGPUは、圧縮動作の一部として、任意の好適な解像度で一対のフレーム間のピクセルデータの部分を比較し得る。
【0031】
HEVCを含む多くのビデオ圧縮アルゴリズムでは、Iフレーム、Pフレーム、およびBフレームなどの異なるタイプのフレームがあり得る。Iフレームは、解凍中にフレームを再構築するのに十分なデータを含むという意味で、自立することができる。このため、Iフレームは、PフレームおよびBフレームと比較して、比較的大量のデータを含み、最も圧縮性が低い。Pフレームは、元のピクセルデータを圧縮し、次いで解凍し、再構築するために以前のフレーム(例えば、参照フレーム)からのデータを使用する。Pフレームは、動きベクトルの形態など、前のフレームとの差を符号化するため、Pフレームは、Iフレームと比較して相対的に小さい。Bフレームの「B」は双方向を表し、これは、Bフレームが元のピクセルデータを圧縮し、次いで解凍し、そして再構築するために、先行するフレームと将来のフレームとの両方を使用することを意味する。Iフレームは相対的大きいため、Iフレームを送信するインスタンスは、本開示において減少または最小化され得る。しかしながら、いくつかのシナリオでは、ホストコンピュータ106とHMD102との間で無線接続が一時的に失われ、その後再確立される場合など、Iフレームを送信することが有益である場合がある。いずれの場合でも、共通の一連のフレームは、Iフレームから始まり、一連のPフレームが続くことがある。ブロック114におけるPフレームの圧縮は、画像のブロックが参照フレーム内のそれらの位置に対して新しいフレーム内で移動した場所に関して、参照フレーム(例えば、Iフレーム、および/または先行するPフレームなど)との差を符号化することを伴い得る。これらの相違は、サブブロック116において生成された動きベクトルによって表され得る。
【0032】
さらに、114において、図6のプロセス600を参照してより詳細に説明されるように、ホストコンピュータ106のロジックは、それらのフレームに関するピクセルデータがホストコンピュータ106のGPUへの入力として提供される前に、圧縮に使用されるフレームを位置合わせし得る(または別様に修正し得る)。これは、複数の連続したフレームをレンダリングする過程でオブジェクト(静止しているオブジェクトおよび移動しているオブジェクトの両方)が位置間を移動させられ得る、フレーム間のHMD102の移動のために行うことができる。一方のフレームを他方のフレームに位置合わせすることによって、またはその逆によって、または両方のフレームを互いに位置合わせするように調整することによって、シーン内の特定の静止しているオブジェクトを表すピクセルデータを、静止しているオブジェクトに対応するピクセルデータが、GPUのビデオエンコーダによって移動しているオブジェクトと誤認されないように、2つのフレーム間の概ね同じ位置に移動させることができる。ブロック114において実行される位置合わせは、頭部の移動に起因する動きベクトル内の差分(または差)を減少させるために、フレーム(例えば、フレームのピクセルデータ)のうちの一方または両方に対する回転再投影修正を含み得る。動きベクトルの差分(または差)のこの減少は、本明細書に記載するように、ホストコンピュータ106からHMD102に動きベクトルを送信する際の帯域幅の減少の追加の利点を提供し得る。したがって、修正されたピクセルデータは、サブブロック116において動きベクトルを生成するときに、ブロック114における圧縮のためのGPUへの入力として提供され得る。
【0033】
118において、ホストコンピュータ106は、圧縮されたピクセルデータ110(1)を含み得るデータ110をHMD102に送信し得る。Pフレームに関して上述したように、圧縮されたピクセルデータ110(1)のほとんどの時間は、サブブロック116において生成された動きベクトル110(2)のアレイの形態で送信され得る。すなわち、一連のPフレームについて、動きベクトルアレイ110(2)は、圧縮されたピクセルデータを表し得る。しかしながら、IフレームがHMD102に送信される場合、圧縮されたピクセルデータ110(1)は、動きベクトルを含まない場合がある。ブロック118において送信されたデータ110は、フレームのピクセルデータ110(1)を生成するためにアプリケーションによって使用される姿勢データ110(3)をさらに含み得る。いくつかの実施形態では、ブロック118において送信されたデータ110は、姿勢データ110(3)を省略し得、および/またはデータ110は、深度データ110(4)、余分なピクセルデータ(例えば、HMD102のディスプレイパネルの境界の外側にある)、視差閉塞データ、および/またはキューブマップデータ(例えば、HMD102が、いかなるデータも有さない暗いピクセルを提示すること以外の他の選択肢を有するように、急激かつ大規模な頭部移動のためのもの)などの追加データを含み得る。データ110は、ブロック118において、無線で、有線接続を介して、広域ネットワークなどを介してなど、実装形態に応じて様々な方式でHMD102に送信され得る。いくつかの実施形態では、データ110の一部または全部は、圧縮されたピクセルデータ110(1)、例えば、動きベクトル110(2)とともに、符号化されたデータストリームの一部として、帯域内または帯域外に送信され得る。例えば、姿勢データ110(3)、深度データ110(4)、および/または追加データは、動きベクトル110(2)などの圧縮されたピクセルデータ110(1)から帯域外に送信され得る。
【0034】
120において、HMD102は、限定されないが、動きベクトル110(2)(受信時に、圧縮されたピクセルデータを表す)、姿勢データ110(3)、および/または深度データ110(4)などの、圧縮されたピクセルデータ110(1)を含むデータ110をホストコンピュータ106から受信し得る。
【0035】
122において、HMD102のロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)は、例えば、動きベクトル110(2)および参照フレーム(例えば、以前のフレームのピクセルデータ110(1))を使用することによってなど、圧縮されたピクセルデータ110(1)を解凍して、アプリケーションによって出力されるフレームのピクセルデータ、または少なくとも元のピクセルデータの近似を取得し得る。ブロック122において圧縮されたピクセルデータを解凍することは、HEVCアルゴリズムなどの解凍または復号アルゴリズムを使用し得る。さらに、サブブロック124によって示されるように、例えば、少なくとも動きベクトル110(2)が圧縮されたピクセルデータ110(1)を表す場合(例えば、Pフレームに対して)、HMD102のロジックは、例えば、符号化されたデータストリーム(例えば、HEVCストリーム)からなど、データストリームから動きベクトル110(2)を抽出し得る。解凍されたピクセルデータ110(1)、動きベクトル110(2)、および場合によっては追加のデータ(例えば、姿勢データ110(3)、深度データ110(4)など)は、HMD102のメモリにキャッシュされ得、その結果、追加のデータは、再投影フレームをレンダリングする際、および/または将来のデータを解凍する際に使用するためなど、後の時点でアクセスされ得る。ブロック120~124は、フレームがホストコンピュータ106から継続的に受信されるにつれて反復し得ることを理解されたい。データ110は、ある期間HMD102のメモリ内に維持(例えば、キャッシュ)され得、その後、データ110は、将来のデータ110を記憶するための空間を作るために破棄され得ることを理解されたい。
【0036】
126において、HMD102のロジックは、HMD102のディスプレイパネル上に画像を提示する際に使用するために、解凍されたピクセルデータ110(1)などの最新の解凍データ110を取り出し得る。例えば、データ110がブロック120において受信され、ブロック122において解凍されると、ブロック126における取り出し動作は、HMD102のメモリに記憶されているキャッシュされたピクセルデータ110(1)が、HMD10に利用可能な最後に解凍されたピクセルデータを表すと決定し得、HMD102のロジックは、最後に解凍されたデータ、例えば、最後に受信された動きベクトル110(2)を解凍することから取得されたピクセルデータ110(1)をメモリから取り出し得る。用例では、HMD102が90Hzのリフレッシュレートで動作している場合、フレームは、およそ11.11ミリ秒ごとに1回表示されることになる。この文脈では、HMD102が最後のフレームが表示されてからの最後の11.11ミリ秒で新しいデータを受信および解凍した場合、新しい解凍されたピクセルデータ110(1)は、次のフレームをレンダリングするために使用され得る。一方、最後のフレームが表示されてからの最後の11.11ミリ秒間にHMD102が新しいデータを受信および解凍していない場合、最後にレンダリングされたフレームのピクセルデータ110(1)を次のフレームのレンダリングに使用してもよい。
【0037】
128において、HMD102のロジックは、HMD102の予測姿勢に少なくとも部分的に基づいて、フレームのピクセルデータを修正して、フレームの修正されたピクセルデータを取得し得る。例えば、HMD102のロジックは、ブロック126において取り出されたピクセルデータを生成するためにアプリケーションによって使用されたHMD102の元の予測姿勢と、フレームの点灯時間により近い時間にHMD102のロジックによって予測された更新された姿勢との比較に基づいて、ピクセルデータに調整を適用し得る。この比較は、アプリケーションがフレームをレンダリングした時点での元の姿勢予測と、ディスプレイパネル上にフレームをレンダリングする前のHMD102における更新された姿勢予測との間の差分(または差)を明らかにし得、ブロック118において適用される調整は、この差分を補償するために(例えば、2つの姿勢決定の間の差分に応じて、ピクセルデータをある方向にもしくは別の方向にシフトおよび/または回転させることによって)回転計算を含み得る。
【0038】
さらに、128において、HMD102のロジックはまた、ブロック124において抽出され、ブロック126において取り出された動きベクトル110(2)のアレイに少なくとも部分的に基づいて、フレームのピクセルデータを修正し得る。ブロック128における修正の結果、再投影フレームの修正されたピクセルデータが取得される。本開示は、「実際の」フレームと再投影(または、「幻の」フレーム)との間の区別を行うが、この区別は、HMD102上での提示の前に、実際のフレームがしばしばブロック128で調整/修正されないことを暗示することを意図しない。すなわち、HMD上で提示されたフレームは、「実際の」フレームと「幻の」フレームとの両方でブロック128において実行され得る修正動作に起因して、合成されている(すなわち、ホストコンピュータ106上で実行されているアプリケーションによって出力された元のフレームと同じではない)と考えることができる。この意味で、ブロック128において修正されるすべてのフレームは、本明細書で使用されるように、「再投影」フレームであると考えることができる。ピクセルデータが修正されるかどうか、および/またはブロック128において修正される程度は、システムの動作性能に依存する。例えば、アプリケーションによって出力されるすべてのフレームがHMD102においてタイムリーに受信されるライブレンダリングシナリオにおいて、すべてがそれと同じように進む場合、元の姿勢予測と更新された姿勢予測との間の差分は、ゼロではないにしても、それに近いものとなり、この場合、ブロック128において適用される修正は、もしあれば、最終的な出力に影響をほとんどまたはまったく及ぼさない場合がある。しかしながら、アプリケーションがフレームレートに到達できなかった、またはネットワーク渋滞に起因してフレームが遅れて到着するか、もしくは転送中にドロップされるシナリオでは、ブロック128においてピクセルデータ110(1)に適用される修正は、元の姿勢予測と更新された姿勢予測との間のより大きな差分を補償するために有意であり得る。以下でより詳細に説明するように、動きベクトル110(2)に基づく再投影フレームのピクセルデータの修正は、レンダリングメッシュを利用し得る。例えば、レンダリングメッシュは、再投影フレームに対して生成され得る。レンダリングメッシュは、複数の頂点を有するテッセレーションメッシュを含み得、レンダリングメッシュの頂点は、移動された頂点としてレンダリングメッシュ内の異なる位置に移動され得る(例えば、頂点を(i)非ゼロ動きベクトル110(2)の方向に移動させることによって、および(ii)非ゼロ動きベクトル110(2)の大きさに対応する量だけ移動させることによって)。したがって、ブロック128におけるピクセルデータの修正は、再投影フレームの修正されたピクセルデータを取り出すために、ブロック126において取得されたピクセルデータのピクセル値を移動させることなどによって、レンダリングメッシュの移動された頂点に従って行われ得る。例えば、ピクセル値は、レンダリングメッシュ内の移動された頂点に従って、修正されたピクセルデータ内の新しい位置に、左へ4ピクセル、および上へ4ピクセル移動され得る。いくつかの実施形態では、修正された動きベクトル110(2)をピクセルデータに適用する前に、動きベクトル110(2)が修正され得る。例えば、以下でより詳細に説明されるように、フィルタ(例えば、N×Nスカラーメディアンフィルタ、M×M平均最大ぼかしフィルタなど)を動きベクトルアレイ110(2)に適用し得、動きベクトルの修正されたアレイを取得し得、動きベクトルの修正された(例えば、フィルタリングされた)アレイを使用して、ブロック128においてピクセルデータを修正し得る。
【0039】
さらに、128において、HMD102のロジックはまた、ブロック126において取り出された深度データ110(4)に少なくとも部分的に基づいて、フレームのピクセルデータを修正し得る。深度データ110(4)は、ブロック128において、とりわけ、シーン内のオブジェクトの視差を調整するために使用され得る(例えば、世界空間で遠く離れている船は、クローズアップオブジェクトが同じ頭部の移動で動くほど頭部の移動で動かない場合がある)。シーン内の仮想オブジェクトに対応するピクセルの深度を知ることは、HMD102への再投影中にそのような視差を調整する方法を知ることに役立つ。深度情報を知ることはまた、HMD102の回転だけでなく、空間内のHMD102の並進に基づいて、シーンを歪めることも可能にする。深度データ110(4)がホストコンピュータ106から受信されない場合、HMD102のロジックは、約2メートルの平均深度を想定し得る。
【0040】
130において、画像は、修正されたピクセルデータに少なくとも部分的に基づいて、HMD102のディスプレイパネル上に提示され得る。例えば、HMD102のロジックは、修正されたピクセルデータをフレームバッファに出力し得、フレームバッファに出力された修正されたピクセルデータに基づいて、画像をHMD102のディスプレイパネルに提示させ得る。これは、修正されたピクセルデータをHMD102のディスプレイパネルにスキャンアウトし、ディスプレイパネルの発光素子を点灯させて、ディスプレイパネル上のピクセルを点灯させることを伴い得る。一対のディスプレイパネルを有するHMD102に関して、この修正されたピクセルデータは、一対のディスプレイパネル上に表示されることになる一対の画像を表すフレームに対応し得、それに応じて、ステレオフレームバッファに出力され、スキャンアウトされ得る。再投影フレームに対応する結果として生じる画像は、動きベクトル110(2)に従ってピクセルデータの修正によって「動き平滑化」される。
【0041】
図2は、本明細書に開示される実施形態による、2つの例示的なタイムライン200(1)および200(2)を示す図であり、ホストコンピュータ106およびHMD102のそれぞれのレンダリングワークロードを示している。図2の例は、ホストコンピュータ106と関連付けられた第1のタイムライン200(1)に関して、フレーム「F」、フレーム「F+1」、およびフレーム「F+2」の3つの例示的なフレームを描いている。この第1のタイムライン200(1)は、ホストコンピュータ106のGPUを使用して、ホストコンピュータ106上で実行されるアプリケーションによって、フレームをどのように直列にレンダリングすることができるかを示す。ここで、アプリケーションは、第1のタイムライン200(1)上で左から右に、順番に、フレームF、次いで、フレームF+1、さらに次いで、フレームF+2をレンダリングする。第1のタイムライン200(1)上の楕円は、アプリケーションが実行を続けるにつれて、任意の数のフレームに対してこれが継続され得ることを示す。第1のタイムライン200(1)はまた、水平タイムライン200(1)に直交するように向けられた垂直線によって、アプリケーションがターゲットフレームレート(例えば、垂直線が約11.11ミリ秒だけ分離される90Hzのフレームレート)をターゲットにしていることを暗示する。図2の例では、ホストコンピュータ106上で実行されているアプリケーションは、たまたまフレームFおよびF+1上でターゲットフレームレートに到達しているが、アプリケーションはフレームF+2のフレームターゲットフレームレートに到達しない。例えば、フレームF+2のシーンが、多数の移動しているオブジェクトもしくは複雑なテクスチャを含む場合があり、これらの複雑さ、および/もしくは他の理由により、アプリケーションは、フレームF+2をレンダリングするために割り当てられた時間よりも長い時間を要する。ホストコンピュータ106は、HMD102の移動に関する頭部追跡データ208を受信して、タイムライン200(1)上の各フレームをレンダリングするためのHMD102の予測姿勢を決定し得る。
【0042】
HMD102に関連付けられている図2の第2のタイムライン200(2)は、個々のフレームのHMD102のレンダリングワークロード202(a)、202(b)、および202(c)を示している。所与のフレームのHMD102の個々のレンダリングワークロード202は、HMD102のディスプレイパネル上に最終的な画像が提示される前に、ピクセルデータ110(1)に適用される調整を表し得る。そのような調整は、HMD102上に最終画像をレンダリングする前に、ピクセルデータ110(1)に適用される、幾何学的歪み、色収差、頭部移動などのための調整を含み得るが、これらに限定されない。フレームFおよびF+1について、これらの調整は、ホストコンピュータ106上で実行されるアプリケーションによって生成されたピクセルデータに適用され、これらの調整のうちの少なくともいくつかは、HMD102の元の予測姿勢と、HMD102の更新された姿勢の予測との間の差分を考慮することによって、ホストコンピュータ106から受信された姿勢データ110(3)を利用し得る。したがって、第2のタイムライン200(2)のフレームFおよびF+1は、ライブレンダリング状況中にアプリケーションからリアルタイムで出力されるピクセルデータ110(1)の修正バージョンであるという意味で「実際の」フレームの修正バージョンを表すことを意味する。対照的に、フレームF+2をレンダリングするために、HMD102は、先行するフレームの姿勢予測およびHMD102によって行われた更新された姿勢予測に基づいて再投影(または「幻の」)フレームを生成するために、先行するフレームについて以前に受信されたピクセルデータ110(1)(例えば、フレームF+1のピクセルデータ110(1))を使用し得る。さらに、レンダリングワークロード202(c)は、フレームF+1のデータ110とともに受信した動きベクトル110(2)に基づいて、フレームF+1からのピクセルデータを修正して、本明細書に記載するように、フレームF+2を「動き平滑化」することを含み得る。いずれにせよ、レンダリングワークロード202の結果は、フレームバッファ(例えば、ステレオフレームバッファ)に出力され得る修正されたピクセルデータの生成である。本明細書において、「実際の」フレームと「幻の」フレームとの間のこの区別は、実際のフレームがHMD102上で調整されないことを暗示することを意味するものではなく、この意味で、HMD側で生成されたフレームはすべて、効果的に合成される(すなわち、ホストコンピュータ106上で実行されるアプリケーションによって出力される元のフレームと同じではない)。
【0043】
図2の第2のタイムライン200(2)はまた、各フレームのスキャンアウト時間204(a)、204(b)、および204(c)、ならびに各フレームの点灯時間206(a)、206(b)、および206(c)を示す。所与のフレームのためのスキャンアウト時間204の間に、(修正されたピクセルデータの)ピクセル値のサブセットは、ディスプレイポート(例えば、高解像度マルチメディアインターフェース(HDMI)(登録商標))を介してHMD102のディスプレイパネルにスキャンアウトされ、所与のフレームのための点灯時間206の間に、HMD102のディスプレイパネルの発光素子は、ディスプレイパネルのピクセルを点灯させるために点灯される。図2は、LCDパネルとともに使用されて、HMD102のリフレッシュレートでディスプレイパネルの発光素子から光を同時に放出し得る、グローバルフラッシュタイプのディスプレイ駆動方式の例を示している。用例では、HMD102が90Hzのリフレッシュレートで動作している場合、各フレームの点灯時間206は、およそ11.11ミリ秒で分離され得る。
【0044】
図3は、再投影がHMD102などのディスプレイ上のフレームをレンダリングするために使用されているときに、シーン内で移動しているかまたは動いているオブジェクトを考慮するための例示的な動き平滑化技術を示す図である。図3の例は、一連のフレーム300として順番にレンダリングされることになる3つの例示的なフレーム300(1)、300(2)、および300(3)を描いている。図3の例では、オブジェクト302は、フレーム300(1)~300(3)の過程にわたって左方向(すなわち、右から左へ)にシーンを横切って移動していることが示されている。フレーム300(2)および300(3)のオブジェクト302の点線輪郭は、以前にレンダリングされたフレーム300にオブジェクト302が位置していた場所を表している。ここで、フレーム300(1)は、最初にレンダリングされ、次いで、フレーム300(2)は、2番目にレンダリングされ、次いで、フレーム300(3)は、3番目にレンダリングされる。
【0045】
一連のフレーム300のフレーム300のうちの少なくともいくつかは、それらがビデオゲームアプリケーション、またはフレーム300のピクセルデータに基づいてHMD102上に対応する画像を提示するのに十分な時間内に任意の他のタイプのグラフィックスベースアプリケーションなどのアプリケーションから出力されるという意味で「実際の」フレームであり得る。アプリケーションは、個々のフレーム300をレンダリングするためにピクセルデータ110(1)をフレームバッファに出力するグラフィックスパイプラインで実行され得る。
【0046】
実行中、HMD102の頭部追跡モジュールは、ユーザの104の頭部姿勢に従って一連のフレーム300の次のフレーム300をどのようにレンダリングするかに関してアプリケーションに知らせるために、アプリケーションを実行するホストコンピュータ106に提供されるHMD102の位置および向き(姿勢)についてのデータを生成し得る。これは、ユーザ104がオブジェクト(移動オブジェクト302などの静止しているオブジェクトと移動しているオブジェクトとの両方)を含む仮想環境を見回しているとユーザ104に信じさせる方式で、アプリケーションがHMD102上で画像をレンダリングするためのピクセルデータ110(1)を出力することを可能にする。アプリケーションがフレームレートに到達している場合、静止および移動しているオブジェクトの両方が、ユーザ104の頭部の動きとともに、予想される様式で、シーン内で移動するように知覚される。本明細書に記載される動き平滑化技術は、フレームレートに到達しなかったアプリケーションを補償して、移動しているオブジェクトに関して同様の視覚的知覚が達成されるようにする方式である。
【0047】
図3の例では、第1のフレーム300(1)は、アプリケーションから受信される第1の「実際の」フレームを表し得、第2のフレーム300(2)は、アプリケーションから受信され、第1のフレーム300(1)の後にレンダリングされる第2の「実際の」フレームを表し得、第3のフレーム300(3)は、第2のフレーム300(2)に関連付けられているピクセルデータ110(1)(2)から生成される再投影フレームを表し得る。したがって、図3における「第3のフレーム300(3)」は、本明細書において「再投影フレーム300(3)」と称されることもある。図3の例では、第2のフレーム300(2)(フレーム2)を圧縮するために、ホストコンピュータ106のロジックは、ホストコンピュータ106のグラフィックスプロセッシングユニット(GPU)304への入力として、第1のフレーム300(1)に関連付けられている第1のピクセルデータ110(1)(1)および第2のフレーム300(2)に関連付けられている第2のピクセルデータ110(1)(2)を提供し得る。
【0048】
GPU304のビデオエンコーダ(例えば、ビデオ符号化チップ)は、GPU304に入力された第1のピクセルデータ110(1)(1)および第2のピクセルデータ110(1)(2)に基づいて、動きベクトル110(2)(2)のアレイを生成し得る。動きベクトル110(2)(2)のアレイを生成するために、GPU304のビデオエンコーダは、入力として提供された各フレーム300のピクセルデータ110(1)間のピクセルごとの値(例えば、輝度値)を比較し得る。追加的に、または代替的に、GPU304のビデオエンコーダは、入力として提供された各フレーム300のピクセルデータ110(1)の間のマクロブロック(例えば、16ピクセルのブロック(すなわち、4×4ピクセルのマクロブロック)、64ピクセルのブロック(すなわち、8×8ピクセルのマクロブロック))を比較し得る。このようにして、GPU304は、任意の好適な解像度で、一対のフレーム300間のピクセルデータ110(1)の部分を比較し得る。いくつかの実施形態では、入力ピクセルデータ110(1)(1)および110(1)(2)は、GPU304にダウンサンプリングされたフレームを入力するために、より低い解像度にダウンサンプリングされる。いくつかの実施形態では、動きベクトル110(2)(2)は、HEVCアルゴリズムなどの任意の好適な圧縮アルゴリズムに従って生成される。
【0049】
GPU304から出力される動きベクトル110(2)(2)のアレイは、本明細書では「動きベクトル場」と呼ばれることがある。この動きベクトル場110(2)(2)はまた、任意の好適な解像度で出力され得、および/またはダウンサンプリング/アップサンプリングされ得る。例えば、動きベクトルアレイ110(2)(2)は、ピクセルごとの単一の動きベクトル、ピクセルのグループごとの単一の動きベクトル(例えば、4×4のマクロブロックについての1つの動きベクトル、8×8のマクロブロック、ピクセルの任意の形状のパッチなど)、または所与のフレーム300のすべてのピクセルについての単一の動きベクトルを含み得る。
【0050】
GPU304のビデオエンコーダによる入力ピクセルデータ110(1)の比較に基づいて、第2のフレーム300(2)の一部分が第1のフレーム300(1)の一部分に類似している場合(例えば、閾値輝度値内で)、および各フレーム300内の類似した部分が距離(例えば、XおよびY成分方向のピクセル数)でオフセットされる場合、これは、動きベクトル110(2)(2)のアレイに含まれる動きベクトルによって表すことができる。フレーム300(1)および300(2)内のオブジェクト302に対応するピクセル値が、GPU304のビデオエンコーダによって類似していると決定される(例えば、ピクセルデータ110(1)内のピクセル値に基づいて、いくつかの類似性メトリックを満たす一致部分)例を考える。このオブジェクト302の動きベクトルは、オブジェクト302の移動と同じ方向を指す方向を有し得、または動きベクトルは、オブジェクト302の移動の方向と反対方向を指し得る。言い換えれば、動きベクトルは、後続のフレーム300(2)におけるオブジェクト302の位置からオフセットされた、以前のフレーム300(1)におけるオブジェクト302の位置を参照する方向を指し得る。したがって、アレイ110(2)(2)内の動きベクトルは、第2のフレーム300(2)内の座標から第1のフレーム300(1)内の座標へのオフセットを提供する。オフセットは、オブジェクト302などのオブジェクトを移動させるかまたは動かすことに関して、第1のフレーム300(1)の画像から第2のフレーム300(2)の画像への変換を説明している。
【0051】
上述したように、図3の第3のフレーム300(3)は、再投影フレームを表し得、これは、第3のフレーム300(3)に関するピクセルデータ110(1)(3)が、以前にレンダリングされた実際のフレーム(この場合、第2のフレーム300(2))に関連付けられているピクセルデータ110(1)(2)から導出され得ることを意味する。言い換えれば、再投影フレーム300(3)のピクセルデータ110(1)(3)は、ホストコンピュータ106からリアルタイムで受信されるのではなく、アプリケーション生成フレームのピクセルデータ110(1)から生成され、アプリケーションがフレームレートに到達していないとき、および/またはネットワーク渋滞が発生したときに、欠落しているフレームの間隔を「埋める」ために使用される。この場合、図3の例では、第2のフレーム300(2)は、再投影フレーム300(3)の前に最後にレンダリングされたフレーム300であるため、再投影フレーム300(3)に関するピクセルデータ110(1)(3)は、第2のフレーム300(2)に関連付けられたピクセルデータ110(1)(2)から生成される。いくつかの実施形態では、回転および再投影変換は、再投影フレーム300(3)の第3のピクセルデータ110(1)(3)を生成するために、第2のフレーム300(2)に関連付けられている第2のピクセルデータ110(1)(2)を修正するために計算および使用され得、第2のフレーム300(2)がレンダリングされたときからHMD102の回転を考慮するような様式で、第2のフレーム300(2)内でレンダリングされたシーンを効果的に回転させ、並進させ、および/または他の方法で移動させる。例えば、ユーザ104は、第2のフレーム300(2)がレンダリングされた時点から自身の頭部を回転させ得、これは、シーンがこの頭部の移動に従って提示されるように、再投影フレーム300(3)の第3のピクセルデータ110(1)(3)の生成に考慮される。
【0052】
次いで、図3の動き平滑化技術は、第2のフレーム300(2)と関連付けられてホストコンピュータ106から受信された動きベクトル110(2)(2)のアレイに少なくとも部分的に基づいて、第3のピクセルデータ110(1)(3)を修正し、再投影フレーム300(3)の修正された第3のピクセルデータ110(1)(3)’を取得する。いくつかの実施形態では、修正された第3のピクセルデータ110(1)(3)への第3のピクセルデータ110(1)(3)のこの修正は、特定のピクセルまたはピクセルのグループに対応する非ゼロ動きベクトル110(2)(2)に基づいて、第3のピクセルデータ110(1)(3)のピクセル値を異なる位置に移動させることを含む。移動は、一定の方向、および一定の量(例えば、水平方向(+/-)方向および垂直方向(+/-)方向にいくつかのピクセルを移動させる)であり得る。次いで、再投影フレーム300(3)は、修正された第3のピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、ディスプレイ(例えば、HMD102のディスプレイパネル)上でレンダリングされる。したがって、再投影フレーム300(3)は、動きベクトル110(2)(2)(動きベクトル110(2)(2)は、第2のフレーム300(2)のピクセルデータ110(1)(2)を圧縮する結果(例えば、副産物)として、以前に受信された(および/または以前にレンダリングされた)実際のフレーム300(1)および300(2)のピクセルデータ110から生成された)に基づいて修正され、オブジェクト302を予想される位置にレンダリングするために「動き平滑化」される。
【0053】
図4は、レンダリングメッシュ400の例、ならびに再投影フレームの動き平滑化にレンダリングメッシュ400をどのように使用することができるかを示す図である。例えば、レンダリングメッシュ400は、ホストコンピュータ106のGPU304によって出力された動きベクトル110(2)のアレイに基づいて、図3の再投影フレーム300(3)のための第3のピクセルデータ110(1)(3)を修正するために、HMD102によって使用され得る。この例では、HMD102のロジックは、レンダリングメッシュ400を生成し得、レンダリングメッシュ400の頂点402は、動きベクトル110(2)のアレイに従って移動され得る。例えば、頂点402は、非ゼロ動きベクトル404の方向に、および非ゼロ動きベクトル404の大きさに対応する量だけ移動され得る。例えば、図3に示される左方向に移動するオブジェクト302を例にとると、動きベクトル404は、レンダリングメッシュ400のコンテキストで適用されて、頂点402を特定の数のピクセル(動きベクトル404の大きさに対応する)を左方向(または負のX方向)に移動させ得る。
【0054】
レンダリングメッシュ400は、複数の頂点402(1)、402(2)、…、402(N)(まとめて402)を有するテッセレーションメッシュとして示される。レンダリングメッシュ400のテッセレーションは、任意の好適な幾何学的パターンであり得る。図4のレンダリングメッシュ400の例は、三角形406の繰り返しパターンとして示されるが、任意の好適な幾何学的形状は、正方形(「四角形」と称されることがある)、六角形(例えば、ハニカムパターンの場合)などを含むが、これらに限定されない、レンダリングメッシュ400のために使用され得る。この例では、正方形(または四角形)の左下隅から正方形(または四角形)の右上隅までの対角線は、特定の向きを有する繰り返し三角形406のレンダリングメッシュ400を作成するために使用される。レンダリングメッシュ400の異なる向きは、図4に示される向きの代わりに、正方形(または四角形)の左上隅から正方形(または四角形)の右下隅までの対角線を使用して、正方形(または四角形)を三角形406に分割することによって作成され得る。いくつかの実施形態では、これらの異なる向きの混合物はまた、正方形(または四角形)の左下隅から正方形(または四角形)の右上隅までの対角線を使用して他のすべての正方形を分割し、正方形(または四角形)の左上隅から正方形(または四角形)の右下隅までの対角線を使用して間の正方形を分割するなどによって、単一のレンダリングメッシュ400のために使用され得る。いくつかの実施形態では、HMD102のロジックは、ホストコンピュータ106から受信した動きベクトル場110(2)に基づいて、レンダリングメッシュ400の生成に使用する、これらの複数の向きのうちどの向きを使用するかを動的に決定するように構成され得る。これは、レンダリングメッシュ400内の幾何学的形状(例えば、三角形406)に最良の向きを選択するために行われ得、これは、最も滑らかに見え、動き平滑化された画像をもたらす。
【0055】
レンダリングメッシュ400はまた、任意の好適な解像度で生成され得る。例えば、最高解像度のレンダリングメッシュ400は、ピクセル当たり2つの隣接する三角形406であり得、各正方形(または四角形)は、単一のピクセルにマッピングされる。より低い解像度は、16ピクセルのグループなどのピクセルのグループごとに2つの隣接する三角形406であり得る。あるいは、ピクセルは、任意の好適な解像度でレンダリングメッシュ400の頂点402にマッピングされ得る。例えば、各頂点402は、最高解像度で単一のピクセルに関連付けられ得、または各頂点402は、より低い解像度で、16ピクセルのグループなどのピクセルのグループに関連付けられ得る。いくつかの実施形態では、レンダリングメッシュ400の解像度は、動きベクトル110(2)のアレイにおける単一の動きベクトル404が頂点402または正方形(もしくは四角形)(例えば、2つの隣接する三角形406)にマッピングするように、動きベクトル110(2)のアレイの解像度と同じ解像度である。レンダリングメッシュ400と動きベクトルアレイ110(2)との間の一致解像度を達成することは、例えば、GPU304から、レンダリングメッシュ400の解像度に一致する特定の解像度で動きベクトルアレイ110(2)を要求することによって、レンダリングメッシュ400として解像度に一致するように動きベクトルアレイ110(2)をダウンサンプリングもしくはアップサンプリングすることによって、またはホストコンピュータ106から受信される動きベクトルアレイ110(2)の解像度に一致する解像度でレンダリングメッシュ400を生成することによってなど、様々な方法で達成され得る。
【0056】
図4は、4つの非ゼロ動きベクトル404(1)、404(2)、404(3)、および404(4)がレンダリングメッシュ400の4つの頂点402に対応する例を示している。これらの4つの動きベクトル404(1)~(4)は、図3に描かれる移動しているオブジェクト302に基づいてGPU304が検出した動きベクトルに対応し得る。したがって、例示的な動きベクトル404(1)~(4)は、オブジェクト302の方向性の動きに対応する左方向を指し得るが、上述したように、方向性は、オブジェクト302の方向性の動きの方向とは反対(例えば、右方向)であり得る。動きベクトル404の方向性は、動き平滑化アルゴリズムにおいて、ピクセルデータ110(1)を所望の方向に修正するために考慮され得る。動きベクトル110(2)の場が4つの例示的な動きベクトル404(1)~(4)を含み、動きベクトル110(2)のアレイの残りの動きベクトルのすべてがゼロベクトルである基本的な例を考える。この例では、再投影フレーム300(3)のピクセルデータ110(1)(3)は、頂点408(1)、408(2)、408(3)、および408(4)(図4の下部に示される)が移動するにつれて、非ゼロ動きベクトル404(1)~(4)に対応する頂点402をレンダリングメッシュ400内の異なる位置に移動させることによって、非ゼロ動きベクトル404(1)~(4)に基づいて修正され得る。図4の下部は、動き平滑化が適用された後のレンダリングメッシュ400を示しており、移動された頂点408(1)~(4)は、動き平滑化の前の頂点402の位置と比較して、レンダリングメッシュ400内の異なる位置にある。このようにして動きベクトル404(1)~(4)が適用されるとき、移動された頂点408(1)~(4)は、レンダリングメッシュ400内の幾何学的形状(例えば、三角形406)のうちの特定のものを引き伸ばすこと、または歪めることなどによって、レンダリングメッシュ400の1つ以上の部分を歪ませる。図4の例では、図4の下部に示されるように、引き伸ばされた三角形410を作成するための動き平滑化の結果として、三角形406のいくつかが引き伸ばされる。移動された頂点408(1)~(4)に対応する(再投影フレーム300(3)のピクセルデータ110(1)(3)の)ピクセル値は、レンダリングメッシュ200内の移動された頂点408(1)~(4)の位置に対応する異なるピクセル位置でレンダリングされる。移動された頂点206(1)~(4)と移動されていない頂点402との間のピクセル位置は、(例えば、移動された頂点408(1)~(4)と移動されていない頂点402との間のピクセル値を内挿するなどによって、勾配を適用することによって)混合され得る。いくつかの実施形態では、深度バッファを利用して、再投影フレーム300(3)の修正されたピクセルデータ110(1)(3)’のフレームバッファに出力される最終的なピクセル値のセットを決定し得る。すなわち、動きベクトル404(1)~(4)をレンダリングメッシュ400に適用した結果、移動された頂点408(1)~(4)に対応する画像内の位置に複数のピクセル値が存在し得る。この場合、「より近い」(より小さい)深度値に関連付けられているピクセル値のいずれかは、「より遠い」(より大きい)深度値に関連付けられているその位置で別のピクセル値をレンダリングする代わりにレンダリングされ得る。
【0057】
図5は、本明細書に開示される実施形態による、動き平滑化技術の一部としてグラフィックスプロセッシングユニット(GPU)によって生成される動きベクトルを使用して再投影フレームを生成するための例示的なプロセス500のフロー図である。考察を目的として、プロセス500は、以前の図を参照して説明される。
【0058】
502において、ホストコンピュータ106のロジックは、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。例えば、2つの最後にレンダリングされたフレーム300に関連付けられているピクセルデータ110(1)は、圧縮されたピクセルデータ110(1)の送信前にピクセルデータ110(1)を圧縮するための圧縮アルゴリズムの一部としてGPU304への入力として提供され得る。これらのフレーム300は、過去にレンダリングされた第1のフレーム300(1)、および第1のフレーム300(1)の後にレンダリングされた第2のフレーム300(2)などのアプリケーション(例えば、ビデオゲームアプリケーション)から受信された実際のフレームであり得る。したがって、第2のフレーム300(2)は、ホストコンピュータ106上で実行中のアプリケーションによって出力された最後にレンダリングされたフレームを表し得、第1のフレーム300(1)および第2のフレーム300(2)は、一連のフレーム300内でアプリケーションによって連続して出力され得るが、ブロック502において入力として提供されるピクセルデータ110(1)は、連続してレンダリングされたフレームのピクセルデータ110(1)である必要はない。例えば、中間フレーム300は、第1のフレーム300(1)と第2のフレーム300(2)との間でレンダリングされ得、ブロック502において入力として提供されるピクセルデータ110(1)は、第1のフレーム300(1)および第2のフレーム300(2)に関連し得る。
【0059】
504において、動きベクトルアレイ110(2)は、GPU304から受信され得る。ブロック504において受信された動きベクトル110(2)のアレイは、第1のフレーム300(1)に関連付けられた第1のピクセルデータ110(1)(1)および第2のフレーム300(2)に関連付けられた第2のピクセルデータ110(1)(2)に少なくとも部分的に基づいて(例えば、第1のピクセルデータ110(1)(1)と第2のピクセルデータ110(1)(2)との間の比較に基づいて)、GPU304のビデオエンコーダによって生成され得る。GPU304のビデオエンコーダは、例えば、比較されたピクセル値間の差が閾値差よりも小さいどうかを決定することによってなど、ピクセル値(またはピクセル値のグループ)間の類似性を探す好適なコンピュータビジョンおよび/またはビデオ符号化アルゴリズム(例えば、HEVC)を使用するように構成され得る。そのような類似性メトリック内のいずれも、2つのフレーム300間で一致するピクセルデータ110(1)であると考えられ得る。
【0060】
506において、HMD102のロジックは、第2のフレーム300(2)の第2のピクセルデータ110(1)(2)に少なくとも部分的に基づいて、再投影フレーム300(3)の第3のピクセルデータ110(1)(3)を生成し得る。この場合、第2のフレーム300(2)は、再投影フレーム300(3)の直前のレンダリングされたフレームを表す。例えば、ブロック504と506との間で、HMD102は、第2のフレーム300(2)の圧縮された第2のピクセルデータ110(1)(2)を受信し、ピクセルデータ110(1)(2)を解凍し、HMD102の更新された姿勢予測を考慮するためにピクセルデータ110(1)(2)を修正し、第2のフレーム300(2)のHMD102上に画像を提示し得、ブロック506において、HMD102は、次のフレームとして再投影フレーム300(3)をレンダリングする準備をしている。
【0061】
508において、HMD102のロジックは、再投影フレーム300(3)の修正された第3のピクセルデータ110(1)(3)’を取得するために、動きベクトル110(2)(2)のアレイに少なくとも部分的に基づいて、第3のピクセルデータ110(1)(3)を修正し得る。サブブロック510および512によって示されるように、再投影フレーム300(3)のピクセルデータ110(1)(3)の修正は、レンダリングメッシュ400を利用し得る。
【0062】
したがって、510において、HMD102のロジックは、再投影フレーム300(3)のレンダリングメッシュ400を生成し得る。レンダリングメッシュ400は、複数の頂点402を有するテッセレーションメッシュを含み得る。いくつかの実施形態では、レンダリングメッシュ400の解像度は、動きベクトル404とレンダリングメッシュ400の「要素」(例えば、レンダリングメッシュ400の頂点402、レンダリングメッシュ400の正方形(または四角形)などの要素)との間に1対1の対応があるように、動きベクトルアレイ110(2)(2)の解像度と一致し得る。動きベクトル場110(2)(2)とレンダリングメッシュ400との間の一致解像度を取得することは、GPU304が特定の解像度で動きベクトル場110(2)(2)を出力することを要求すること、動きベクトル場110(2)(2)の解像度をダウンサンプリングもしくはアップサンプリングすること、および/またはGPU304によって出力される動きベクトル場110(2)(2)の解像度に一致する解像度でレンダリングメッシュ400を生成することなど、本明細書に記載される技術のいずれかを含み得る。
【0063】
512において、ロジックは、レンダリングメッシュ400の(複数の頂点402の)頂点402を、頂点408が移動するにつれて、レンダリングメッシュ400内の異なる位置に移動させ得る。頂点402は、(i)非ゼロ動きベクトル404の方向に、および(ii)非ゼロ動きベクトル404の大きさに対応する量だけ移動され得る。したがって、ブロック508における第3のピクセルデータ110(1)(3)の修正は、例えば、再投影フレーム300(3)の修正された第3のピクセルデータ110(1)(3)’を取得するために、移動された頂点408に従って第3のピクセルデータ110(1)(3)のピクセル値を移動させることによって、レンダリングメッシュ400の移動された頂点408に従って行われ得る。例えば、第3のピクセルデータ110(1)(3)のピクセル値は、レンダリングメッシュ400内の移動された頂点408に従って、修正された第3のピクセルデータ110(1)(3)内の新しい位置に、左側に4ピクセル、および上方に4ピクセル移動され得る。
【0064】
いくつかの実施形態では、複数の動きベクトル場110(2)は、ブロック502において入力された以前にレンダリングされたフレーム300の異なるセットに基づいてブロック504において受信され得、追加の動き関連パラメータは、ブロック508における再投影フレームの動き平滑化で使用するために複数の動きベクトル場110(2)に基づいて決定され得る。例えば、ブロック504において受信された動きベクトル110(2)(2)のアレイをもたらす前の2つのフレーム300(1)および300(2)に加えて、図5のアルゴリズムは、いくつかの実施形態では、GPU304への入力として第1のフレーム300(1)および第1のフレーム300(1)の前にレンダリングされた「ゼロ番目の」フレーム300(0)を提供し、その異なる一対の入力フレーム300に基づいて、追加の動きベクトル110(2)のアレイを受信することなどによって、1つ以上の追加のフレームを戻してもよい。次いで、動きベクトルの複数のアレイを比較して、フレーム間で動いているオブジェクトの加速度などの動き関連パラメータを決定してもよく、これらの動き関連パラメータは、動き平滑化調整に関してピクセル値を多かれ少なかれ移動させるように、第3のピクセルデータ110(1)(3)に適用される最終動きベクトル404の大きさを修正(例えば、増加/減少)することなどによって、ブロック508に適用され得る。
【0065】
514において、HMD102のロジックは、修正された第3のピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、再投影フレーム300(3)をディスプレイ上(例えば、HMD102のディスプレイパネル上)にレンダリングし得る。ブロック514においてレンダリングされる結果として生じる再投影フレーム300(3)は、GPU304から受信された動きベクトル110(2)に従って、第3のピクセルデータ110(1)(3)の修正によって「動き平滑化」される。GPU304が1つ以上のGPU304を表し得ることを理解されたい。例えば、複数のGPU304は、HMD102のステレオディスプレイパネル上に所与のフレーム300をレンダリングするために利用され得、これらのGPU304に入力されるフレーム300のピクセルデータ110(1)は、それに応じて分割され得る(例えば、ピクセルデータ110(1)の左半分は、第1のGPU304への入力として提供され得、ピクセルデータ110(1)の右半分は、第2のGPU304への入力として提供され得る)。
【0066】
図6は、本明細書に開示される実施形態による、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセス600のフロー図である。考察を目的として、プロセス600は、以前の図を参照して説明される。さらに、図5および図6のページ外参照「A」によって示されるように、プロセス600は、図5のブロック504における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック504~514の動作を継続し得る。
【0067】
602において、ロジック(例えば、ホストコンピュータ106のロジック)は、HMD102から受信した回転データに基づいて、HMD102が、以前にレンダリングされたフレーム300をレンダリングする間に第1の向きから第2の向きに回転したと決定し得、そのピクセルデータ110(1)は、GPU304への入力として提供される。例えば、ユーザ104は、第1のフレーム300(1)および第2のフレーム300(2)をレンダリングする時間に対応し得る、時間t1と時間t2との間で右方向に頭部を回転させ得る。
【0068】
604において、以前にレンダリングされたフレーム300は、それらのフレーム300のピクセルデータ110(1)がホストコンピュータ106のGPU304への入力として提供される前に位置合わせされ得る。これは、2つのフレーム300(1)および300(2)をレンダリングする過程でオブジェクト(静止しているオブジェクトおよび移動しているオブジェクトの両方)を位置間で移動させ得る、フレーム300間のHMD102の移動のために行われる。一方のフレーム300(1)を他方のフレーム300(2)に位置合わせすることによって、またはその逆によって、シーン内の特定の静止しているオブジェクトを表すピクセルデータ110(1)を、静止しているオブジェクトに対応するピクセルデータ110(1)が、GPU304のビデオエンコーダによって移動しているオブジェクトと間違われないように、2つのフレーム300(1)と300(2)との間の概ね同じ位置に移動させることができる。ブロック604における位置合わせは、(i)第2のフレーム300(2)をレンダリングする時間に、第1のフレーム300(1)内のシーンをHMD102の第2の向きに位置合わせする修正された第1のピクセルデータ610(1)(1)を取得するための第1のピクセルデータ110(1)(1)(第1のフレーム300(1)に関連付けられている)、または(ii)第1のフレーム300(1)をレンダリングする時間に、第2のフレーム300(2)内のシーンをHMD102の第1の方向に位置合わせさせる修正された第2のピクセルデータを取得するための第2のピクセルデータ110(1)(2)(第2のフレーム300(2)に関連付けられている)のうちの少なくとも1つを修正することを含み得る。図6の下部の図は、前者の場合を示しており、第1のピクセルデータ110(1)(1)は、第1のフレーム300(1)内のシーンをHMD102の第2の向きに位置合わせする修正された第1のピクセルデータ610(1)(1)を取得するように修正される。しかしながら、第1のピクセルデータ110(1)(1)または第2のピクセルデータ110(1)(2)のいずれかは、位置合わせ目的のために修正され得ることを理解されたい。ブロック604における位置合わせは、頭部の移動に起因する動きベクトル110(2)内の差分を減少させるために、フレームのピクセルデータのうちの一方または両方に対する回転再投影修正を含み得る。動きベクトル110(2)内の差分のこの減少は、本明細書に記載するように、ホストコンピュータ106からHMD102に動きベクトル110(2)を送信する際の帯域幅の減少という追加の利点を提供し得る。
【0069】
606において、ホストコンピュータ106のロジックは、以前にレンダリングされたフレーム300のうちの1つの修正されたピクセルデータ、およびGPU304への入力として他のフレーム300の元のピクセルデータ110(1)を提供し得る。図6の図に示される例は、修正された第1のピクセルデータ610(1)(1)および元の第2のピクセルデータ110(1)(2)をGPU304への入力として提供することを描いている。述べたように、プロセス600は、プロセス500のブロック606からブロック504まで継続し得る(ページ外参照「A」によって示されるように)。したがって、ブロック606においてGPU304への入力として提供されるピクセルデータに基づいて、ブロック504においてGPU304から動きベクトルアレイ110(2)を受信し得、図5の動き平滑化アルゴリズムの残りの動作を実行して、動き平滑化される再投影フレーム300(3)をレンダリングし得る。
【0070】
図7は、本明細書に開示される実施形態による、以前にレンダリングされたフレームのいくつかのピクセルデータを除外し、動きベクトル推定のためにGPUへの入力としてピクセルデータの残りの部分を提供するための例示的なプロセス700のフロー図である。考察を目的として、プロセス700は、以前の図を参照して説明される。さらに、図5および図7のページ外参照「A」によって示されるように、プロセス700は、図5のブロック504における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック504~514の動作を継続し得る。
【0071】
702において、ロジック(例えば、ホストコンピュータ106のロジック)は、HMD102から受信した回転データに基づいて、HMD102が、GPU304への入力として提供されることになる以前にレンダリングされた(例えば、ピクセルデータの圧縮のために)フレーム300をレンダリングする間に第1の向きから第2の向きに回転したと決定し得る。以前にレンダリングされたフレーム300は、図3に示される第1のフレーム300(1)および第2のフレーム300(2)であり得る。
【0072】
704において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として利用可能なピクセルデータ110(1)の一部分を提供し得る。GPU304への入力として提供される利用可能なピクセルデータ110(1)の部分は、例えば、第1のピクセルデータ110(1)(1)の一部分706(1)および第2のピクセルデータ110(1)(2)の一部分706(2)を含み得、各々、HMD102のディスプレイパネルの1つ以上のエッジにおけるピクセルのサブセット以外のピクセルに対応する。例えば、図7に示すように、GPU304への入力として提供されるピクセルデータ110(1)の部分706は、ディスプレイパネルの左右のエッジ(図7に黒色で示される)でのピクセルデータ110(1)の残りの部分を除外する。言い換えれば、ディスプレイパネルの左右エッジにおけるピクセルデータ110(1)は、GPU304が、ディスプレイパネルの左右エッジ間のピクセルデータ110(1)の中心部分706に動き推定努力を集中させるように、GPU304に提供されない。正および/または負の垂直方向におけるHMD102の回転のために、ピクセルデータ110(1)の除外された部分は、画像の上端および下端であり得る。いずれにしても、画像のエッジでピクセルデータ110(1)の一部分を除外し、ピクセルデータ110(1)の残りの部分706をGPU304に排他的に提供することは、画像のエッジで効果的にゼロ動きベクトル404を結果として生じ得、これは、不要な視覚的アーチファクトが画像のエッジ付近で顕現し、それが別様には移動しているオブジェクト302の特徴ではない外れ値動きベクトル404を結果として生じる可能性がある状況で有用であり得る。述べたように、プロセス700は、ブロック704においてGPU304への入力として提供されるピクセルデータに基づいて、動きベクトルアレイ110(2)がGPU304から受信される、プロセス500のブロック704からブロック504まで続行し得、図5の動き平滑化アルゴリズムは、動きが平滑化される再投影フレーム300(3)をレンダリングするために実行され得る。
【0073】
図8は、本明細書に開示される実施形態による、以前にレンダリングされたフレームのピクセルデータのパネルマスク部分を除外し、動きベクトル推定のためにGPUへの入力としてピクセルデータの残りの部分を提供する、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセス800のフロー図である。考察を目的として、プロセス800は、以前の図を参照して説明される。さらに、図5および図8のページ外参照「A」によって示されるように、プロセス800は、図5のブロック504における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック504~514の動作を継続し得る。
【0074】
802において、ロジック(例えば、ホストコンピュータ106のロジック)は、HMD102から受信した回転データに基づいて、HMD102が、GPU304への入力として提供されることになる以前にレンダリングされたフレーム300をレンダリングする間に第1の向きから第2の向きに回転したと決定し得る。以前にレンダリングされたフレームは、図3に示される第1のフレーム300(1)および第2のフレーム300(2)であり得る。
【0075】
804において、ロジック(例えば、ホストコンピュータ106のロジック)は、第1のフレーム300(1)に関連付けられている第1のピクセルデータ110(1)(1)を修正して、第1のフレーム300(1)のシーンをHMD102の第2の方向に位置合わせする修正された第1のピクセルデータ808(1)を取得し得る。図8の例では、第1のピクセルデータ110(1)(1)の一部分は、HMD102のディスプレイパネルの周辺においてレンダリングされたパネルマスク(黒色で示される)に対応するデータを各フレームで表している。したがって、修正された第1のピクセルデータ808(1)のパネルマスク部分814(1)(すなわち、図8の黒色で示される部分)は、修正された第1のピクセルデータ808(1)のパネルマスクに対応するデータを表している。述べたように、アプリケーションは、フレームをレンダリングするときに余分なピクセルデータを生成するように指示され得、余分なピクセルデータはパネルマスクに対応する。この方式では、パネルマスクを適用する際のFOVの効果的な低減はない。
【0076】
806において、ロジック(例えば、ホストコンピュータ106のロジック)は、第2のフレーム300(2)に関連付けられている第2のピクセルデータ110(1)(2)を修正して、第2のフレーム内のシーンをHMD102の第1の向きに位置合わせする修正された第2のピクセルデータ808(2)を取得し得る。ここでも、第2のピクセルデータ110(1)(2)の一部分は、HMD102のディスプレイパネルの周辺においてレンダリングされたパネルマスク(黒色で示される)に対応するデータを各フレームで表している。したがって、修正された第2のピクセルデータ808(2)のパネルマスク部分814(2)(すなわち、図8の黒色の部分)は、修正された第2のピクセルデータ808(2)のパネルマスクに対応するデータを表している。
【0077】
810において、ロジック(例えば、ホストコンピュータ106のロジック)は、修正された第1のピクセルデータ808(1)のパネルマスク部分814(1)を修正された第2のピクセルデータ808(2)のパネルマスク部分814(2)と組み合わせて、パネルマスク816に対応する共通値を有するピクセルのサブセットを決定し得る。これは、一種のベン図と考えることができ、パネルマスク816に対応するピクセルのサブセットは、修正された第1のピクセルデータ808(1)および修正された第2のピクセルデータ808(2)における修正されたパネルマスクの組み合わされたバージョンである。
【0078】
812において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、各々がパネルマスク816に対応するピクセルのサブセット以外のピクセルに対応する第1のピクセルデータ110(1)(1)の特定の部分(例えば、中心部分)および第2のピクセルデータ110(1)(2)の特定の部分(例えば、中心部分)を提供し得る。これは、GPU304が、パネルマスク816ピクセルによって覆われている各々の以前にレンダリングされたフレーム内のピクセルデータ110(1)の部分の動き推定を無視することを可能にし、GPU304は、その動き推定の努力を、各フレーム300のピクセルデータ110(1)の中心、非パネルマスク部分に集中させることができる。述べたように、プロセス800は、ブロック812においてGPU304への入力として提供されるピクセルデータに基づいて、動きベクトルアレイ110(2)がGPU304から受信される、プロセス500のブロック812からブロック504まで続行し得、図5の動き平滑化アルゴリズムは、動きが平滑化される再投影フレーム300(3)をレンダリングするために実行され得る。
【0079】
図9は、本明細書に開示される実施形態による、動き平滑化技術の一部として再投影フレームを生成するために使用される前にGPUから出力される動きベクトルを閾値化するための例示的なプロセス900のフロー図である。考察を目的として、プロセス900は、以前の図を参照して説明される。
【0080】
902において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。ブロック902において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0081】
904において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から動きベクトルアレイ110(2)を受信し得る。ブロック904において実行される動作は、プロセス500のブロック504に関して説明される動作と同様であり得る。
【0082】
906において、ロジック(例えば、ホストコンピュータ106からの動きベクトル110(2)の受信後のHMD102のロジック)は、動きベクトル110(2)のアレイ内の個々の動きベクトルの大きさ(または長さ)を第1の閾値の大きさと比較して、第1の閾値の大きさよりも大きい大きさを有する動きベクトル110(2)の第1のサブセットを決定し得る。第1の閾値の大きさは、仮想オブジェクト302の移動または動き以外の何かであるフレーム間の変化を表すことができる高い大きさの外れ値動きベクトル110(2)のこのサブセットの影響を軽減するために利用され得る。異常に高い大きさの動きベクトルは、様々な理由で生じ得る。GPU304は、第2のフレーム300(2)の右上のピクセルが、第1のフレーム300(1)の左下のピクセルに十分に類似していることを見出し得、この動きベクトル404がフレーム300間の仮想オブジェクト302の移動または動きを表すものではないにもかかわらず、アレイ内の他の動きベクトル404と比較して比較的高い大きさで結果として生じる動きベクトル404を出力し得る。場合によっては、ビデオゲームは、ユーザがフレーム300間でシーンが激しく変化する異なる位置にテレポートすることを可能にし得、大きな動きベクトル404をGPU304のビデオエンコーダによって生成させる。これらおよび他の場合において、これらの大きな動きベクトル404を閾値化することは有用であり得る。
【0083】
907において、複数の以前にレンダリングされたフレーム300が第1のフレーム300(1)および第2のフレーム300(2)を含む場合、ロジック(例えば、HMD102のロジック)は、第1のフレーム300(1)がレンダリングされた第1の時間と、第2のフレーム300(2)がレンダリングされた第2の時間との間の期間(または間隔)を決定し得る。
【0084】
909において、ブロック906における比較で使用される第1の閾値の大きさは、第1の時間と第2の時間との間の時間周期に少なくとも部分的に基づいて選択され得る。用例では、単位時間当たりのユーザの視点からの移動度で測定された第1の閾値の大きさは、2つのフレーム300(1)と300(2)との間の時間の11.11ミリ秒当たりの移動度6である。したがって、2つのフレーム300(1)および300(2)が離れている時間が長いほど、第1の閾値の大きさが大きくなり、したがって、動きベクトル110(2)は(大きさが)許容されるだけ長くなる。これは、ある速度を超えた動きがあると、動き平滑化がそれほど効果的でない場合があり、実際に有害な視覚的アーチファクト(例えば、シーンの一部を「泳いでいる」ように見せることによって)を引き起こす場合があるためである。
【0085】
908において、ロジック(例えば、HMD102のロジック)は、第1の閾値の大きさよりも大きい大きさを有すると決定された動きベクトル110(2)の第1のサブセットの大きさを減少させ得、その結果、大きさは、第1の閾値の大きさで制限される。これは、第1の修正された動きベクトルアレイ110(2)を作成する。言い換えれば、第1の閾値の大きさを超えるそれらの動きベクトル110(2)について、ロジックは、動きベクトル110(2)の第1の修正されたアレイが第1の閾値の大きさ以下の大きさを含み、第1の閾値の大きさより大きい大きさを含まないように、それらの動きベクトル110(2)の大きさを第1の閾値の大きさに制限(または限定)するように構成される。いくつかの実施形態では、第1の閾値の大きさで動きベクトル110(2)の大きさを制限し、動き平滑化のために非ゼロ動きベクトルのすべてを使用する代わりに、ロジックは、第1の閾値の大きさを満たすかまたは超える大きさを有する動きベクトル110(2)の第1のサブセットを破棄することができ、これにより、それらは動き平滑化において全く使用されない。
【0086】
910において、ロジック(例えば、HMD102のロジック)は、動きベクトル110(2)のアレイにおける個々の動きベクトルの大きさ(または長さ)を第2の閾値の大きさと比較して、第2の閾値の大きさよりも小さい大きさを有する動きベクトル110(2)の第2のサブセットを決定し得る。第2の閾値の大きさは、低い大きさの外れ値の動きベクトル404のこのサブセットの影響を軽減するために利用され得、これは、ユーザの一定の頭部の移動によってしばしば引き起こされるフレーム間の変化、および/または正確であるが絶対ゼロ度の動きまで正確ではない頭部追跡を表し得る。このため、GPU304の出力は、ゼロ長の動きベクトル404を提供することはほとんどない。むしろ、上述のように、GPU304の出力は、周囲の頭部の動きおよび/または追跡ジッタに起因するかなりの量のノイズを有することがより一般的である。言い換えれば、2つの連続したフレーム間のピクセルは、100%一致することは稀である。用例では、動きのピクセルで測定される第2の閾値の大きさは、動きの2ピクセルの閾値である。この例では、2ピクセル未満の動きの大きさ(または長さ)を有する任意の動きベクトルは、低い大きさの外れ値ベクトルであると考えられる。
【0087】
912において、ロジック(例えば、HMD102のロジック)は、第2の閾値よりも小さい大きさを有すると決定された動きベクトル110(2)の第2のサブセットの大きさ(例えば、2ピクセルよりも小さい動きの長さを有する低い大きさの外れ値動きベクトル)をゼロの長さ/大きさに減少させ得る。これは、第2の閾値の大きさよりも小さい大きさを有する任意の動きベクトルを含まない第2の修正された動きベクトルアレイ110(2)を作成する。これは、本明細書では、動きベクトル110(2)に小さなデッドゾーンを適用すると称されることもある。
【0088】
914において、ロジック(例えば、HMD102のロジック)は、第1の閾値の大きさで制限された大きさを有する動きベクトル110(2)の第2の修正されたアレイに基づいて、および第2の閾値よりも小さい大きさを有するいかなる動きベクトル404も伴わずに、再投影フレームのピクセルデータ110(1)(3)を修正し得る。いくつかの実施形態では、第1の閾値の大きさで制限される代わりに、第1の動きベクトルのサブセットが破棄される場合などに、ブロック914において、破棄された動きベクトルの第1のサブセット110(2)以外の動きベクトルの残りのサブセット110(2)は、再投影フレームのピクセルデータ110(1)(3)を修正するために使用される。ピクセルデータ110(1)(3)の修正は、本明細書に記載されている技術(例えば、プロセス500のブロック508~512を参照して記載されているもの)のいずれかを含み得る。
【0089】
916において、ロジック(例えば、HMD102のロジック)は、再投影レーム300(3)の修正されたピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD102のディスプレイパネル上)における再投影フレーム300(3)をレンダリングし得る。ブロック916において実行される動作は、プロセス500のブロック514に関して説明される動作と同様であり得る。
【0090】
図10は、本明細書に開示される実施形態による、動き平滑化技術の一部として再投影フレームを生成するために使用される前にGPUから出力される動きベクトルを減衰させるための例示的なプロセス1000のフロー図である。考察を目的として、プロセス1000は、以前の図を参照して説明される。
【0091】
1002において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。ブロック1002において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0092】
1002において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から動きベクトルアレイ110(2)を受信し得る。ブロック1004において実行される動作は、プロセス500のブロック504に関して説明される動作と同様であり得る。
【0093】
1006において、ロジック(例えば、ホストコンピュータ106からの動きベクトル110(2)を受信した後のHMD102のロジック)は、動きベクトル110(2)の個々のものの大きさを減衰(例えば、短縮、減少など)する目的で、動きベクトル110(2)のアレイ上にオーバーレイされた減衰テクスチャを生成し得る(例えば、それらの動きベクトル110(2)の品質に低い信頼性がある場合)。減衰テクスチャは、減衰テクスチャが複数のテクセル(例えば、テクセルのグリッド)を含むように、任意の好適な解像度で生成され得る。減衰テクスチャの解像度は、複数の動きベクトルが減衰テクスチャの個々のテクセル内にあるように、動きベクトルアレイ110(2)の解像度よりも低い解像度であり得る。例では、減衰テクスチャは、ユーザの視野(FOV)の中心にあるテクセルが約6度×6度(水平および垂直)であるような解像度を有することができる。テクセル当たりの度数は減衰テクスチャ全体で一定でない場合があるので、テクセル当たりの解像度(水平方向および垂直方向)はおおよそのものであってよい。例えば、HMD102のFOVは、領域においておよそ100度×100度(例えば、プラスまたはマイナス約10度)に及ぶことがある。減衰テクスチャは、解像度が減衰テクスチャのテクセルごとに変化するが、解像度がおおよそ6~10度×6~10度であるテクセルを提供するように、非線形投影行列に基づいて生成され得る。さらに、減衰テクスチャの各テクセルは、減衰値を割り当てられ得る(例えば、0.0~1.0の範囲内)。所与のテクセルに割り当てられた減衰値は、そのテクセルにおける動きベクトル404の大きさが減少(短縮)される量を制御する。例えば、1.0の減衰値は、減衰しないことに対応し得るので、1.0の減衰値を動きベクトル404に適用することは、動きベクトル404をその大きさに関してそのまま(例えば、減少させない、短縮させないなど)にしておくことを意味する。しかしながら、0.0の減衰値は、完全な減衰に対応し得るので、0.0の減衰値を動きベクトル404に適用することは、動きベクトル404がその大きさに関してゼロに減少することを意味する。0.0~1.0の減衰値は、部分的な減衰に対応し得るので、例えば、0.5の減衰値を動きベクトル404に適用することは、動きベクトルが、その元の長さ(大きさ)の50%(半分)に減少することを意味する。したがって、減衰テクスチャは、動きベクトル404の大きさを減少(短縮)することができるが、動きベクトル404の大きさを増大(延長)することはできない。
【0094】
図10は、2つの連続してレンダリングされたフレーム300の間の画面の下部における輝度(または色)の急激な変化に基づいてブロック1006において生成され得る、例示的な減衰テクスチャ1007を示している。例えば、ビデオゲームをプレイしている間、HMD102のユーザは、ハンドヘルドコントローラ上で、次のレンダリングされたフレーム300上の画面の下半分に大きな青色のメッシュを出現させるボタンを選択し得る。この例示的なシナリオでは、GPU304は、このフレーム300および以前にレンダリングされたフレーム300を入力として処理するときに、画面の下半分の大きな青色のメッシュ内のピクセルの輝度値に最も一致する輝度値を有する、シーンの上部でレンダリングされる空のピクセルを見つけることができる。この結果、GPU304は、大きさが突然非常に大きくなり、シーン内の実際の動きを表さないシーンの下部の動きベクトル404を有する動きベクトル場110(2)を出力することになる。例示的な減衰テクスチャ1007では、白色のテクセルは、1.0の減衰値を表し得る一方で、黒色のテクセルは、0.0の減衰値を表し得、濃淡のある灰色のテクセルは、0.0~1.0の減衰値を表し得る。
【0095】
1008において、ロジック(例えば、HMD102のロジック)は、ブロック1006において生成された減衰テクスチャを使用して(例えば、減衰値に対応する量だけ動きベクトル110(2)の大きさを減少させるために減衰テクスチャの減衰値を使用して)動きベクトル110(2)のアレイにおける個々の動きベクトル404の大きさを減少させ得る(例えば、スケールダウンし得る)。これは、減衰テクスチャにおける1.0未満の少なくとも1つの減衰値を仮定して、修正された動きベクトルアレイ110(2)を作成する。その目的は、フレーム300の間で閾値量を超えて変化した動きベクトル404をスケールダウンすることであり、これは、これらの動きベクトル404がシーン内の実際の動きを表しておらず、動きを表していると勘違いしてはいけないことを最もよく示している。減衰テクスチャは、それらの領域内の動きベクトルが単一のフレーム内で極端である(その大きさに関して)画面の領域を見つけるために使用され、これは、動きベクトルが実際の動きを表すために信頼できないことを示し、または、それらがシーン内の実際の動きを表す場合、そのような動きはとにかく動き平滑化が目立った影響を有するには速すぎ、それらの動きベクトルを使用して動き平滑化を試みるよりゼロ動きベクトルを有することが好ましいことを示している。現実的には、フレーム間で動きがある場合、ディスプレイのリフレッシュレートは通常90Hz程度であり、フレーム間のその短い時間で何かが大きく動くことは難しいので、動きは通常、以前のフレームとそれほど大きく変わらない。したがって、多くの場合、減衰テクスチャによって減衰されたこれらの極端な動きベクトル404は、実際の動きを表さない。
【0096】
サブブロック1009によって示されるように、いくつかの実施形態では、ブロック1008において減衰テクスチャを使用して動きベクトルの大きさを減少させることは、減衰テクスチャを使用して動きベクトルの大きさを減少させる前に、最小N×Nフィルタを減衰テクスチャに適用することを含み得る。式中、Nは任意の好適な数であり得る。N=3は、最低3×3のフィルタ(すなわち、3×3ブロックのテクセル)を使用する。N=3の例を使用して、ブロック1009において最小3×3フィルタを減衰テクスチャに適用する際に、ロジック(例えば、HMD102のロジック)は、減衰テクスチャ1007からテクセル単位で、対応するテクセル(例えば、対応するテクセルおよびその8つの隣接するテクセルを含むテクセルのブロック)を中心とするテクセルの各3×3ブロックにおける9個の減衰値のうちの最小値を取得し得る。ブロック1009においてこの最小N×Nフィルタを適用すると、通常、非ゼロ減衰値が割り当てられているが、隣接するテクセルがゼロの減衰値を割り当てられている減衰テクスチャの任意の対応するテクセルが、その対応するテクセルが減衰テクスチャ1007において非ゼロ減衰値を割り当てられているにもかかわらず、その対応するテクセルの対応する動きベクトルにゼロの減衰値を適用し、それによって対応するテクセルの動きベクトルをゼロに減少させることになるため、より多くの動きベクトル404をゼロ化させることになる。言い換えれば、減衰テクスチャの所与のテクセル内の動きベクトル404は、隣接するテクセルにゼロの減衰値が割り当てられている場合、ゼロ化され、これは、隣接するテクセルが多くの高い大きさの動きベクトルを有することを意味する。図10は、最小N×Nフィルタを減衰テクスチャ1007に適用した結果である例示的な減衰テクスチャ1011を示している。結果として生じる減衰テクスチャ1011は、減衰テクスチャ1007よりも多くの黒色のテクセルを含み、これは、結果として生じる減衰テクスチャ1011を使用してより多くの動きベクトルがゼロ化されることを意味する。
【0097】
1010において、ロジック(例えば、HMD102のロジック)は、減衰テクスチャ内の1.0よりも小さい減衰値について減衰されたおそらくいくつかの大きさを伴う、修正された動きベクトルアレイ110(2)に基づいて、再投影フレームのピクセルデータ110(1)(3)を修正し得る。ピクセルデータ110(1)(3)の修正は、本明細書に記載されている技術(例えば、プロセス500のブロック508~512を参照して記載されているもの)のいずれかを含み得る。
【0098】
1012において、ロジック(例えば、HMD102のロジック)は、再投影レーム300(3)の修正されたピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD102のディスプレイパネル上)における再投影フレーム300(3)をレンダリングし得る。ブロック1012において実行される動作は、プロセス500のブロック514に関して説明される動作と同様であり得る。
【0099】
図11は、本明細書に開示される実施形態による、減衰テクスチャを生成するための例示的なプロセス1100のフロー図であり、減衰テクスチャは、動き平滑化技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを減衰させるために使用され得る。したがって、プロセス1100は、プロセス1000のブロック1006において減衰テクスチャを生成するために実行され得る動作のサブプロセスを表し得る。考察を目的として、プロセス1100は、以前の図を参照して説明される。
【0100】
1102において、ホストコンピュータ106から動きベクトルアレイ110(2)を受信した後、HMD102のロジックは、動きベクトル110(2)の複数の以前に取得されたアレイに少なくとも部分的に基づいて、減衰テクスチャの各テクセルについての差分ベクトルのセットを決定し得る。例えば、動きベクトル110(2)のアレイの履歴は、一連のフレームが処理されるにつれて維持され得、動きベクトル110(2)の最後の2つのアレイ(例えば、動きベクトル110(2)の最後2つのアレイ)は、ブロック1102における差分ベクトルのセット(例えば、2つのアレイにおける対応する動きベクトルの対間の差(例えば、大きさに関して)を示す異なるベクトル)を決定するために比較され得る。
【0101】
1104において、ロジック(例えば、HMD102のロジック)は、閾値の大きさよりも大きい大きさを有する減衰テクスチャの各テクセル内の差分ベクトルのパーセンテージを計算し得る。例えば、ブロック1104において、ロジックは、減衰テクスチャの所与のテクセル内の差分ベクトルを評価し、テクセル内の「外れ値」ベクトルを、閾値の大きさよりも大きい差分(例えば、大きさ)を有するそれらの差分ベクトルとして識別し、テクセル内の外れ値ベクトルのパーセンテージを計算し得る。ブロック1104において「外れ値」ベクトルを識別する目的のために、任意の好適な閾値、例えば、フレーム当たり(または時間11.11ミリ秒当たり)約3度の移動/動き(ユーザの視点から)の閾値を使用することができる。言い換えれば、ブロック1104において使用される閾値は、図9のプロセス900のブロック907および909を参照して上述したように、第1のフレーム300(1)がレンダリングされたときの第1の時間と、第2のフレーム300(2)がレンダリングされたときの第2の時間との間の時間周期(または間隔)に基づき得る。
【0102】
1106において、ロジック(例えば、HMD102のロジック)は、減衰テクスチャの各テクセルについて、「外れ値」差分ベクトルであるテクセル内の差分ベクトルのパーセンテージが、25%などの閾値パーセンテージを満たすかまたはそれを超えるかを決定し得る。ブロック1106において、「外れ値」差分ベクトルであるテクセル内の差分ベクトルのパーセンテージが閾値パーセンテージを満たすかまたは超える場合、プロセス1100は、ブロック1106からブロック1108への「はい」経路をたどり得る。
【0103】
1108において、ロジック(例えば、HMD102のロジック)は、閾値パーセンテージを満たすかまたは超えるいくつかの「外れ値」差分ベクトルを有するテクセルについて、減衰値をゼロとして計算し得る。言い換えれば、ロジックは、ある特定の量(例えば、25%以上)の差分ベクトルが最大長さよりも大きい場合、所与のテクセルの減衰値をゼロとして計算し得る。プロセス1000に記載されるように、ゼロの減衰値を所与のテクセル内の動きベクトル404に適用することは、それらの動きベクトル404の大きさをゼロに減少させる(例えば、そのテクセル内の動きベクトルを完全に減衰させるために)。
【0104】
1106において、「外れ値」差分ベクトルの閾値パーセンテージ未満を有するテクセルについて、プロセス1100は、ブロック1106からブロック1110への「いいえ」経路をたどり得、ロジックは、ブロック1104において計算されたパーセンテージに少なくとも部分的に基づいている減衰値として、それらのテクセルの減衰値を計算し得る。例えば、所与のテクセルの閾値の大きさよりも大きい大きさを有する差分ベクトルのパーセンテージが、閾値パーセンテージ未満(例えば、25%)である場合、減衰値は、閾値パーセンテージ未満の値の範囲内(例えば、0%~25%の範囲内)で計算されたパーセンテージに線形にマッピングする値として設定され得る。ブロック1110において計算された減衰値は、ゼロ化されていない残りのベクトル内のノイズを減少させるために、(減衰テクスチャが動きベクトル場110(2)に適用されたときに)有効である。
【0105】
1112において、計算された減衰値は、以前にレンダリングされたフレーム300に基づいて、そのテクセルの既存の減衰値と比較され得る。ブロック1112において減衰値が既存の値未満である場合、プロセス1100は、ブロック1112からブロック1114への「はい」経路をたどり得、そこでテクセルの減衰値は、ブロック1108または1110で計算された減衰値に設定される。例えば、以前のフレーム内の減衰テクスチャのそのテクセルに対する減衰がなかった場合、既存の減衰値は1.0に等しくてもよく、ブロック1108または1110において計算された新しい減衰値が1.0未満である場合、この例では、減衰値は、所与のテクスチャ内の動きベクトルを減衰させるために新たに計算された減衰値に設定される。
【0106】
1112において、計算された減衰値が問題のテクセルの既存の値以上である場合、プロセス1100は、ブロック1112からブロック1116への「いいえ」経路に従い得、既存の減衰値は、減衰がないことに対応する最大減衰値(例えば、1.0)に向かって経時的に増分される。例えば、いくつかの状況は、フレーム間で変化する不規則な動きベクトルを引き起こす可能性があるため、新しい減衰値は、減衰テクスチャのテクセルの以前の(古い)減衰値の上に「混合」され得、これは、計算された減衰値が、その期間にわたってテクセルの既存の減衰値よりも決して小さくないと仮定して、減衰値が、ある期間にわたって(例えば、1秒の期間にわたって)増分的に増加して減衰がなくなることを意味する。
【0107】
図12は、本明細書に開示される実施形態による、結果として生じる動きベクトルのセットが動き平滑化技術の一部として再投影フレームを生成するために使用される前に、色変化がほとんどまたはまったくない領域に対応する動きベクトルをゼロ化するための例示的なプロセス1200のフロー図である。考察を目的として、プロセス1200は、以前の図を参照して説明される。
【0108】
1202において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。ブロック1202において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0109】
1204において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から動きベクトルアレイ110(2)を受信し得る。ブロック1204において実行される動作は、プロセス500のブロック504に関して説明される動作と同様であり得る。
【0110】
1206において、ロジック(例えば、ホストコンピュータ106から動きベクトル110(2)を受信した後のHMD102のロジック)は、動きベクトル110(2)のアレイにおける動きベクトルごとの色差値を決定するために、GPU304に入力された複数の以前にレンダリングされたフレーム300の間で色ピクセル値(RGBベクトルに関して)を比較し得る。これらの色差値は、閾値色差と比較されて、それらの色差値が閾値色差よりも小さいため、フレーム間の色変化がほとんどまたはまったくないことに関連付けられている動きベクトル110(2)のサブセットを決定し得る。いくつかの実施形態では、ロジックは、RGBピクセル値をベクトルとして扱う。次いで、色の差(例えば、差分ベクトル)を決定するために、以前にレンダリングされたフレーム300間の対応するRGBベクトルを比較する。動きベクトル110(2)のアレイ内の各動きベクトル404は、ピクセルのブロック(例えば、8×8ピクセルのブロック)に対応し得るため、このような色比較は、フレーム300間の8×8ピクセルのブロック内のRGBピクセル値の一部または全部を比較することによって、動きベクトルベースで実行され得る。いくつかの実施形態では、ロジック(例えば、HMD102のロジック)は、フレーム300間の色変化の量(例えば、色差値)を決定するために、単一の動きベクトル404に対応する、ピクセルの各8×8ブロック内のピクセルの他の行ごとおよび他の列ごとの色値を比較し、色変化の量は、特定の動きベクトル404に関連付けられている。したがって、所与の動きベクトル110(2)に対応するピクセルのブロックに関して、フレーム間の色比較は、処理リソースを保存するために、対応するピクセルのブロック内のピクセルの一部分(例えば、25%)を比較することを伴い得る。
【0111】
1208において、ロジック(例えば、HMD102のロジック)は、色差値が閾値色差未満である、動きベクトル110(2)のサブセットの大きさをゼロの長さ/大きさに減少させ得る。これは、以前にレンダリングされたフレーム間で色変化がほとんどまたはまったくなかったシーンの領域内の任意の動きベクトルを含まない、修正された動きベクトルアレイ110(2)を作成する(ゼロ動き色差と呼ばれることもある)。例えば、テキストが単色の背景の前にあるときに、テキストがぼんやりして見えたり、エッジの周りがねじれて見えたりするのを防ぐのに役立ち得る。また、シーン内の点灯または他のユーザインターフェース要素が徐々に明るくなったり暗くなったりするようにみえる、視覚障害を引き起こすアーチファクトを防ぐのにも役立ち得る。
【0112】
1210において、ロジック(例えば、HMD102のロジック)は、修正された動きベクトル110(2)のアレイに基づいて再投影フレームについてのピクセルデータ110(1)(3)を修正し得、修正された動きベクトル110(2)は、色が以前にレンダリングされたフレーム300間で効果的に同じである領域において任意の動きベクトル404をもはや含まない。ピクセルデータ110(1)(3)の修正は、本明細書に記載されている技術(例えば、プロセス500のブロック508~512を参照して記載されているもの)のいずれかを含み得る。
【0113】
1212において、ロジック(例えば、HMD102のロジック)は、再投影レーム300(3)の修正されたピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD102のディスプレイパネル上)における再投影フレーム300(3)をレンダリングし得る。ブロック1212において実行される動作は、プロセス500のブロック514に関して説明される動作と同様であり得る。
【0114】
図13は、本明細書に開示される実施形態による、結果として生じる動きベクトルのセットが動き平滑化技術の一部として再投影フレームを生成するために使用される前に、1つ以上のフィルタを使用して動きベクトル場を「クリーンアップする」ための例示的なプロセス1300のフロー図である。考察を目的として、プロセス1300は、以前の図を参照して説明される。
【0115】
1302において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。ブロック1302において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0116】
1304において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から動きベクトルアレイ110(2)を受信し得る。ブロック1304において実行される動作は、プロセス500のブロック504に関して説明される動作と同様であり得る。
【0117】
1306において、ロジック(例えば、ホストコンピュータ106から動きベクトル110(2)を受信した後のHMD102のロジック)は、N×Nスカラーメディアンフィルタを動きベクトル110(2)のアレイに適用して、動きベクトル110(2)の第1の修正されたアレイを取得し得る。式中、Nは、5×5のスカラーメディアンフィルタを適用するN=5などの任意の好適な数であり得る。N=5の例では、5×5スカラーメディアンフィルタは、選択された動きベクトルを取り囲む5×5の動きベクトルのセット110(2)を見ることによって、動きベクトル110(2)のアレイ内の各動きベクトルに適用される。選択された動きベクトルについて、選択されたベクトルを囲む5×5の領域は、25個の動きベクトルを有する。選択された動きベクトルに適用されるスカラーメディアンフィルタは、(25のx成分値のうちの)中央x成分値、および(25のy成分値のうちの)中央y成分値を計算し、次いで、中央x成分値と中央y成分値とを組み合わせて、スカラー中央値ベクトルを取得し、選択された動きベクトルは、スカラーメディアンベクトルで置き換えられ得る。このプロセスは、動きベクトル110(2)のアレイ内の各ベクトルについて反復する。ここでも、Nに関する任意の適切な値を使用することができ、N=5は単なる例である。ブロック1306においてスカラーメディアンフィルタを適用することは、動きベクトル場110(2)内のノイズを低減し、外れ値動きベクトルを除去するのに役立つ。ブロック1306においてスカラーメディアンフィルタを使用することはまた、より計算集約的であるより複雑な距離アルゴリズムに依拠するベクトルメディアンフィルタなどのより複雑なフィルタを適用するよりも計算上高速である。
【0118】
1308において、ロジック(例えば、HMD102のロジック)は、M×M平均最大ぼかしフィルタを動きベクトル110(2)の第1の修正されたアレイに適用して、動きベクトル110(2)の第2の修正されたアレイを取得し得る。式中、Mは、3×3平均最大ぼかしフィルタを適用するM=3などの任意の好適な数であり得る。平均最大ぼかしフィルタは、独立して2つの別個のフィルタ(平均ベクトルフィルタおよび最大長ベクトルフィルタ)を適用し、次いで、これらの2つの独立して適用されたフィルタから得られたベクトルのベクトル平均を取得する。M=3を使用する例では、3×3平均最大ぼかしフィルタは、選択された動きベクトルを取り囲む3×3セットの動きベクトル110(2)を見ることによって、動きベクトル110(2)のアレイ内の各動きベクトルに適用される。選択された動きベクトルについて、選択されたベクトルを囲む3×3の領域は、9個の動きベクトルを有する。まず、平均ベクトルフィルタを選択された動きベクトルに適用し、(9個のx成分値のうちの)平均x成分値、および(9個のy成分値のうちの)平均y成分値を計算し、次いで、平均x成分値と平均y成分値とを組み合わせて平均ベクトルを取得する。次に、最大長ベクトルフィルタが、(9個の動きベクトルのうちの)最長ベクトルを決定する、選択された動きベクトルに独立して適用される。次いで、結果として生じるベクトルは、平均ベクトルおよび最長ベクトルのベクトル平均を取ることによって決定され、選択された動きベクトルは、結果として生じるベクトルに置き換えられ得る。このプロセスは、動きベクトル110(2)のアレイ内の各ベクトルについて反復する。ここでも、Mに関する任意の好適な値を使用することができ、M=3は単なる例である。ブロック1308において平均最大ぼかしフィルタを適用することは、動きベクトルのグループのサブエリア内の不連続を除去する平滑化された動きベクトル場を提供する。いくつかの実施形態では、ブロック1308において平均最大ぼかしフィルタを適用することは、本明細書に記載するように、動きベクトル場110(2)が動き平滑化に使用される前に、動きベクトル場110(2)上での最終的な「クリーンアップ」ステップである。例えば、動きベクトルの閾値化、減衰テクスチャの使用、色差がほとんどまたはまったくない領域におけるベクトルのゼロ化など、本明細書に記載する他の技術と組み合わせて使用される場合、これらの様々な動作は、平均最大ぼかしフィルタを適用する前に実行され得る。
【0119】
1310において、ロジック(例えば、HMD102のロジック)は、フィルタリングされた動きベクトルを用いて修正された動きベクトルアレイ110(2)に基づいて、再投影フレームのピクセルデータ110(1)(3)を修正し得る。ピクセルデータ110(1)(3)の修正は、本明細書に記載されている技術(例えば、プロセス500のブロック508~512を参照して記載されているもの)のいずれかを含み得る。
【0120】
1312において、ロジック(例えば、HMD102のロジック)は、再投影レーム300(3)の修正されたピクセルデータ110(1)(3)’に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD102のディスプレイパネル上)における再投影フレーム300(3)をレンダリングし得る。ブロック1312において実行される動作は、プロセス500のブロック514に関して説明される動作と同様であり得る。
【0121】
図9図13のプロセスで説明される様々な技術(GPU304によって出力される動きベクトル場を修正する様々な技術)は、任意の組み合わせおよび/または任意の順序で使用され得ることを理解されたい。例えば、図9を参照して説明した技術は、図10および図11を参照して説明した技術と組み合わせて使用することができ、それらの技術の一部または全部は、図12を参照して説明した技術と組み合わせて使用することができ、それらの技術の一部または全部は、図13を参照して説明した技術と組み合わせて使用することができる。すなわち、最適化された動きベクトル場を取得する堅牢な技術は、動きベクトル場の堅牢な修正において、図9図13を参照して一緒に記載される技術のすべてを利用し得る。さらに、ホストコンピュータ106および通信可能に連結されたHMD102を含む分散システムにおいて、図9図13のプロセスに説明された様々な技術(GPU304によって出力される動きベクトル場を修正する様々な技術)の一部または全部が、ホストコンピュータ106上で実行され得ることを理解されたい。例えば、ホストコンピュータ106は、(例えば、減衰テクスチャを使用して)動きベクトルを閾値化し、かつ/または、修正された動きベクトルアレイを動き平滑化で使用するためにHMD102に送信する前に、フィルタを動きベクトルに適用するように構成され得る。このシナリオでは、修正された動きベクトルアレイ110(2)は、圧縮されたピクセルデータ110(1)から帯域外に送信され得、かつ/または修正された動きベクトルアレイ110(2)内のゼロ動きベクトルは、動きベクトルをHMD102に送信する前に動きベクトルデータを圧縮するようにランレングス符号化され得る。
【0122】
図14は、本明細書に開示される実施形態による、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームを回転させるための例示的なプロセス1400のフロー図である。考察を目的として、プロセス1400は、以前の図を参照して説明される。
【0123】
1402において、ロジック(例えば、ホストコンピュータ106のロジック)は、ピクセルデータ110(1)がGPU304への入力として提供されることになる複数の以前にレンダリングされたフレーム300のうちの第1のフレーム300(1)を、第1の回転されたフレーム1404(1)を取得するための回転量だけ回転させ得る。
【0124】
1406において、ロジック(例えば、ホストコンピュータ106のロジック)は、複数の以前にレンダリングされたフレーム300のうちの第2のフレーム300(2)を、第2の回転されたフレーム1404(2)を取得するための回転量だけ回転させ得る。
【0125】
1408において、ロジック(例えば、ホストコンピュータ106のロジック)は、回転されたフレーム1404(1)および1404(2)のピクセルデータをGPU304への入力として提供し得る。プロセス1400は、プロセス500のブロック1408からブロック504まで継続し得る(ページ外参照「A」によって示されるように)。したがって、ブロック1408においてGPU304への入力として提供されるピクセルデータに基づいて、ブロック504においてGPU304から動きベクトルアレイ110(2)を受信し得、図5の動き平滑化アルゴリズムの残りの動作を実行して、動き平滑化される再投影フレーム300(3)をレンダリングし得る。
【0126】
プロセス1400は、移動しているかまたは動いているオブジェクトを真に表していない「奇妙な」動きベクトルを引き起こすことから、シーン内の水平および/または垂直のアーキテクチャのエッジの効果を軽減し得る。複数の以前にレンダリングされたフレーム300(1)および300(2)は、ブロック1402および1406で同じ量の回転だけ回転され得、または各フレーム300(1)および300(2)は、ブロック1402および1406においてそれぞれ異なる量の回転だけ回転され得る。いくつかの実施形態では、ブロック1402および1406における各フレームの回転量は、事前定義される(例えば、入力フレーム300(1)および入力フレーム300(2)を45度回転させる)。フレーム300(1)および300(2)を45度回転させることにより、シーン内の水平および垂直エッジが斜めに向けられ得、その結果、これらの斜めのエッジは、GPU304のビデオエンコーダによって生成されるそれほど多くの「奇妙な」動きベクトルを引き起こさないことがある。いくつかの実施形態では、ブロック1402および1406における各フレームの回転量は、各フレーム300のためのランダムな回転量であり得る。これは、45度に位置合わせされ得る任意のエッジを一時的に隠し得る。
【0127】
図15は、本明細書に開示される実施形態による、以前にレンダリングされたフレームのルマデータおよびクロマデータに基づいて生成される動きベクトルアレイ間を選択するための例示的なプロセス1500のフロー図である。考察を目的として、プロセス1500は、以前の図を参照して説明される。さらに、図5および図15のページ外参照「B」によって示されるように、プロセス1500は、図5のブロック506における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック506~514の動作を続行し得る。
【0128】
1502において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300に関連付けられているルマデータを提供し得る。例えば、第1のフレーム300(1)に関連付けられている第1のピクセルデータ110(1)(1)は、第1のルマデータ、第1のクロマデータ、および/または追加のタイプのデータを含み得る。同様に、第2のフレーム300(2)に関連付けられている第2のピクセルデータ110(1)(2)は、第2のルマデータ、第2のクロマデータなどの類似のタイプのデータを含み得る。したがって、ブロック1502において、第1のルマデータおよび第2のルマデータは、GPU304への入力として提供され得る。
【0129】
1504において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から、第1のルマデータおよび第2のルマデータに少なくとも部分的に基づいて、GPU304のビデオエンコーダによって生成された第1の動きベクトルアレイ110(2)を受信し得る。
【0130】
1506において、ロジック(例えば、ホストコンピュータ106のロジック)は、第1のフレーム300(1)に関連付けられている第1のクロマデータおよび第2のフレーム300(2)に関連付けられた第2のクロマデータをGPU304への入力として提供し得る。
【0131】
1508において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から、第1のクロマデータおよび第2のクロマデータに少なくとも部分的に基づいて、GPU304のビデオエンコーダによって生成された第2の動きベクトルアレイ110(2)を受信し得る。
【0132】
1510において、ロジック(例えば、ホストコンピュータ106のロジック、または動きベクトル110(2)の複数のアレイを受信した後のHMD102のロジック)は、動きベクトル110(2)の第1のアレイおよび動きベクトル110(2)の第2のアレイの分析に基づいて、動きベクトル110(2)の第1のアレイまたは動きベクトル110(2)の第2のアレイのうちの1つを選択し得る。例えば、選択アルゴリズムは、動きベクトル110(3)の各場における動きベクトル110(2)の大きさおよび/または方向に基づいて、例として、最も不規則でないものを選択し得る。例えば、第2のフレーム300(2)内で明るい点滅光(例えば、仮想爆発)が発生するとき、ルマデータは、GPU304に、ある程度の閾値の大きさを超える大きさで動きベクトル110(2)を出力させ得、一方、同じ以前にレンダリングされたフレーム300のクロマデータは、GPU304に、極めて大きな大きさを有するそのような動きベクトルを含まない動きベクトル110(2)を出力させ得る。この場合、ブロック1510において、クロマデータから生成された動きベクトル110(2)のアレイが選択され得る。これは、選択アルゴリズムの1つの例に過ぎず、他のものが使用されてもよい。述べたように、プロセス1500は、再投影フレーム300(3)のピクセルデータ110(1)(3)が、ブロック1510からの動きベクトル110(2)の選択されたアレイに基づいて修正される、プロセス500のブロック1510からブロック506に続行し得る。
【0133】
図16は、本明細書に開示される実施形態による、動きベクトルの複数のアレイを取得し、アレイ間の差を決定し、動き平滑化のための決定された差に基づいて最終的な動きベクトルアレイを生成するための例示的なプロセス1600のフロー図である。考察を目的として、プロセス1600は、以前の図を参照して説明される。さらに、図5および図16のページ外参照「B」によって示されるように、プロセス1600は、図5のブロック506における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック506~514の動作を続行し得る。
【0134】
1602において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300に関連付けられている第1のピクセルデータ110(1)(1)を提供し得る。ブロック1602において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0135】
1604において、ロジック(例えば、ホストコンピュータ106のロジック)は、ブロック1602において入力として提供された第1のピクセルデータ110(1)(1)に基づいて、GPU304から第1の動きベクトルアレイ110(2)を受信し得る。
【0136】
1606において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300に関連付けられている第2のピクセルデータ110(1)(2)を提供し得る。
【0137】
1608において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から、第2のピクセルデータ110(1)(2)に少なくとも部分的に基づいて、第2の動きベクトルアレイ110(2)を受信し得る。
【0138】
1610において、ロジック(例えば、ホストコンピュータ106のロジック、またはホストコンピュータ106から動きベクトル110(2)のアレイを受信した後のHMD102のロジック)は、第1のアレイ110(2)と第2のアレイ110(2)との間の動きベクトル110(2)の方向および/または大きさの違いを決定し得る。例えば、第1のアレイ110(2)の動きベクトル404と、第2のアレイ110(2)の対応する動きベクトル404との間で比較を行い、動きベクトルが、動きベクトルの方向または大きさのいずれかまたは両方に関して異なるかどうか、およびその場合、それらが異なるだけの量を決定し得る。
【0139】
1612において、ロジック(例えば、ホストコンピュータ106のロジック、またはHMD102のロジック)は、ブロック1610において決定されるように、動きベクトル110(2)の第1のアレイと動きベクトル110(2)の第2のアレイとの間の差に少なくとも部分的に基づいて、動きベクトル110(2)の最終アレイを生成し得る。例えば、動きベクトル110(2)の最終アレイは、第1のアレイ110(2)または第2のアレイ110(2)内の動きベクトルの個々のものを減衰させることから生じる、または各アレイ110(2)内の対応する動きベクトルの平均を表す平均動きベクトルを減衰させることから生じる動きベクトルのセットを表し得る。述べたように、プロセス1600は、ブロック1612において生成された動きベクトル110(2)の最終アレイに基づいて、再投影フレーム300(3)のピクセルデータ110(1)(3)が修正されるプロセス500のブロック1612からブロック506に続行し得る。
【0140】
プロセス1600がどのように使用され得るかの用例として、第1の動きベクトルアレイ110(2)が、入力フレーム300(1)および300(2)のピクセルデータ110(1)に基づいて、それらの元の(「y上」)向きでブロック1604において受信され、第2の動きベクトルアレイ110(2)が、45度回転された入力フレーム300(1)および300(2)のピクセルデータ110(1)に基づいてブロック1608において受信される例を考える。入力画像フレーム300を回転させるこの概念は、図14を参照して説明された。したがって、この用例では、第1のフレーム300(1)および第2のフレーム300(2)のピクセルデータ110(1)は、第1の動きベクトルアレイ110(2)を生成するためにブロック1602において入力として提供され得、第1の回転されたフレーム1404(1)および第2の回転されたフレーム1404(2)のピクセルデータ110(1)は、第2の動きベクトルアレイ110(2)を生成するためにブロック1606において入力として提供され得る。この用例では、2つの動きベクトルアレイ110(2)は、(例えば、第2のアレイ110(2)を逆方向に45度回転させることによって)再位置合わせされ得、次いで、両方のアレイ110(2)における対応するベクトル間の角度差(方向)および/または長さ差(大きさ)を見ることによって不一致を決定するために比較され得る。実際の動き(例えば、シーン内で移動しているかまたは動いているオブジェクト)は、回転された入力フレーム300に対して非常に類似した動きベクトルアレイを生成し得る一方で、誤って検出された動きは、非常に異なる動きベクトルアレイを生成し得る場合があり得る。この用例では、最終的な動きベクトルアレイ110(2)は、ブロック1612において、2つの正規化されたベクトルのドット積によって各アレイ110(2)における2つの対応するベクトルの平均の長さを減衰させることによって生成され得る。いくつかの実施形態では、図10および図11を参照して説明されるもののような減衰テクスチャは、ブロック1612において利用されて、最終的なアレイを生成し得る。例えば、プロセス1100のブロック1102において決定された差分ベクトルのセットは、ブロック1604において受信された動きベクトル110(2)の第1のアレイと、ブロック1608において受信された動きベクトル110(2)の第2のアレイとの間の差分に基づき得、結果として生じる減衰テクスチャは、ブロック1612において、第1のアレイ110(2)、第2のアレイ110(2)、または2つのアレイ110(2)間のベクトルの組み合わせ(例えば、平均)を減衰させるために使用され得る。
【0141】
プロセス1600がどのように使用され得るかの別の用例として、複数の以前にレンダリングされたフレーム300の入力テクスチャのために第1のミップレベル(ミップマップレベル)が生成され、この第1のミップレベルのための対応するピクセルデータ110(1)が、ブロック1602において、動きベクトル110(2)の第1のアレイを生成するためにGPU304への入力として提供される例を考える。一方、第2のミップレベルは、複数の以前にレンダリングされたフレーム300の入力テクスチャに対して生成され得、この第2のミップレベルに対する対応するピクセルデータ110(1)は、第2の動きベクトルアレイ110(2)を生成するためにブロック1606でGPU304への入力として提供され得る。これは、任意の数の動きベクトルの対応するアレイを生成する任意の数のミップレベルに対しても行うことができる。いくつかの実施形態では、3つまたは4つの動きベクトルアレイ110(2)がブロック1610の前に受信されるように、入力テクスチャの3つまたは4つのミップレベルを生成することができる。いくつかの実施形態では、各ミップレベルは、以前のミップレベルの幅および高さの半分(例えば、面積の25%)である。ブロック1610において、この用例では、異なるミップレベルから生成されたアレイ110(2)の対間の差が決定され得、ブロック1612において、決定された差に基づいて、最終的な動きベクトルアレイ110(2)が生成され得る。例えば、ロジックは、異なるミップレベルについての複数の動きベクトルアレイ110(2)にわたる異常を検出し得、異常な動きベクトルを減衰させる(例えば、ゼロに減少させる)ことができる。入力フレーム300の異なるミップレベルを使用して異なる動きベクトルアレイ110(2)を生成するというこの例は、シーン内に繰り返しパターンの大きな領域(例えば、壁紙)が存在し、GPU304のビデオエンコーダが、移動しているかまたは動いているオブジェクトが存在しないにもかかわらず、動きベクトル解像度に対する繰り返しパターンの頻度に起因して多くの動きがあることを考慮して、多くの高い大きさの動きベクトルを生成し得る状況において役立ち得る。したがって、プロセス1600は、異なるミップレベルの動きベクトル110(2)のアレイを生成するために使用されるとき、繰り返しパターンの異なる周波数にわたる異常を検出するのに役立ち得、検出されると、減衰テクスチャを使用して、それらの動きベクトル110(2)を減衰させる(例えば、ゼロ化する)ことができる。
【0142】
プロセス1600がどのように使用され得るかのさらに別の例として、複数のアレイ110(2)が異なる解像度で取得され、ブロック1610において、第1のアレイ110(2)内の単一の動きベクトルを、第2のアレイ110(2)内の複数の対応する動きベクトルと比較することによって(例えば、第2のアレイ110(2)内の複数の対応する動きベクトルの方向および/または大きさに関して平均と比較することによって)差が決定される例を考える。異なる解像度で動きベクトルアレイ110(2)を使用することは、ブロック1612において動きベクトルの最終的なアレイを生成するために有用な差をもたらし得る。
【0143】
図17は、本明細書に開示される実施形態による、画像領域の異なる部分について異なる解像度で複数の動きベクトルアレイを取得するための例示的なプロセス1700のフロー図である。考察を目的として、プロセス1700は、以前の図を参照して説明される。さらに、図5および図17のページ外参照「B」によって示されるように、プロセス1700は、図5のブロック506における動作の前に実行される動作を表し得、プロセス500は、いくつかの実施形態では、ブロック506~514の動作を続行し得る。
【0144】
1702において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、以前にレンダリングされたフレーム300と関連付けられているピクセルデータ110(1)を提供し得る。ブロック1702において実行される動作は、プロセス500のブロック502に関して説明される動作と同様であり得る。
【0145】
1704において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から第1の動きベクトルアレイ110(2)(1)を受信し得、第1の動きベクトルアレイ110(2)(1)は、第1の解像度で受信されるか、または別様に、第1の解像度にアップサンプリングまたはダウンサンプリングされる。
【0146】
1706において、ロジック(例えば、ホストコンピュータ106のロジック)は、動きベクトル110(2)(1)の第1のアレイに少なくとも部分的に基づいて、ディスプレイにわたる画像領域1705の第1の部分1705(A)内の動きの不在を検出し得、動きベクトル110(2)(1)の第1のアレイに少なくとも部分的に基づいて、画像領域1705の第2の部分1705(B)内のオブジェクト302の動きを検出し得る。例えば、非ゼロ動きベクトルは、画像領域1705の右半分で検出され得、一方、画像領域1705の左半分は、任意の非ゼロ動きベクトルを含まないゼロ値の動きベクトルを含み得る。
【0147】
1708において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、第1のピクセルデータ110(1)(1)(第1のフレーム300(1)に関連付けられている)の第1の部分および第2のピクセルデータ110(1)(2)(第2のフレーム300(2)に関連付けられている)の第1の部分を提供し得る。第1のピクセルデータ110(1)(1)の第1の部分および第2のピクセルデータ110(1)(2)の第1の部分は、各々、ブロック1706において動きのないことが検出された画像領域1705の第1の部分1705(A)に対応し得る。
【0148】
1710において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から、第1のピクセルデータ110(1)(1)の第1の部分および第2のピクセルデータ110(1)(2)の第1の部分に少なくとも部分的に基づいて、GPU304のビデオエンコーダによって生成された第2の動きベクトルアレイ110(2)(2)を受信し得る。この第2のアレイの動きベクトル110(2)(2)は、第1のアレイの動きベクトル110(2)(1)の第1の解像度よりも高い第2の解像度で生成され得る。動きの不在が検出された画像領域1705の第1の部分1705(A)についてのより高い解像度の動きベクトル場110(2)(2)を取得することは、より高い解像度での動きベクトル場110(2)(2)が、大規模な移動が検出されなかった画像領域1705の第1の部分1705(A)の小規模な移動を検出するのに役立ち得るという考えに基づき得る。
【0149】
1712において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304への入力として、第1のピクセルデータ110(1)(1)(第1のフレーム300(1)に関連付けられている)の第2の部分および第2のピクセルデータ110(1)(2)(第2のフレーム300(2)に関連付けられている)の第2の部分を提供し得る。第1のピクセルデータ110(1)(1)の第2の部分および第2のピクセルデータ110(1)(2)の第2の部分は、各々、ブロック1706においてオブジェクト302の動きが検出された画像領域1705の第2の部分1705(B)に対応し得る。
【0150】
1714において、ロジック(例えば、ホストコンピュータ106のロジック)は、GPU304から、第1のピクセルデータ110(1)(1)の第2の部分および第2のピクセルデータ110(1)(2)の第2の部分に少なくとも部分的に基づいて、GPU304のビデオエンコーダによって生成された第3の動きベクトルアレイ110(2)(3)を受信し得る。この第3の動きベクトルアレイ110(2)(3)は、第2の動きベクトルアレイ110(2)(2)の第2の解像度よりも低い解像度である第3の解像度で生成され得る。動きが検出された画像領域1705の第2の部分1705(B)に対するこの比較的低解像度の動きベクトル場110(2)(3)は、第1の動きベクトル場110(2)(1)の第1の解像度ですでに大規模な移動が検出された画像領域1705の第2の部分1705(B)の移動を検出するために、より高い解像度の動きベクトル場が必要でない場合があるという考えに基づき得る。
【0151】
1716において、ロジック(例えば、ホストコンピュータ106のロジック、またはホストコンピュータ106からの動きベクトルアレイ110(2)を受信した後のHMD102のロジック)は、動き平滑化のために動きベクトルの第2のアレイ110(2)(2)および動きベクトルの第3のアレイ110(2)(3)を使用し得る。プロセス1700は、再投影フレーム300(3)のピクセルデータ110(1)(3)は、ブロック1716からの動きベクトル110(2)に基づいて修正される、ブロック1716からプロセス500のブロック506に続行し得る。例では、動き平滑化のためにブロック1716で動きベクトルの複数のアレイを使用することは、プロセス1600のブロック1612を参照して説明される動作を含み得る。
【0152】
図18Aおよび図18Bは、本明細書に開示される実施形態による、HMD102およびホストコンピュータ106を利用するシステムの2つの代替的なセットアップを示す。図1に描かれているように、例示的な実装形態は、ホストコンピュータ106が、ユーザ104によって装着されるHMD102と環境内に併置される。例えば、ホストコンピュータ106は、ホストコンピュータ106がHMD102と同じ部屋または異なる部屋に位置しているかどうかにかかわらず、ユーザ104がハウス内でHMD102を使用している間、ユーザ104のハウス内に位置し得る。代替的に、モバイルコンピューティングデバイス(例えば、タブレットまたはラップトップ)の形態のホストコンピュータ106は、ユーザ104の背面のバックパック内で運ばれてもよく、それによって、より大きなモビリティを可能にする。例えば、ユーザ104は、そのようなシステムを使用しながら、公共の公園内に位置することができる。
【0153】
図18Aは、ホストコンピュータ106が、HMD102に対して地理的に離れた場所に位置する1つ以上のサーバコンピュータを表す、代替の実装形態を示している。この場合、HMD102は、無線AP(WAP)、基地局などのアクセスポイント(AP)1800を介してホストコンピュータ106に通信可能に連結され得る。用例では、データは、ホストコンピュータ106とHMD102との間で、AP1800を介して、例えばインターネットを介してデータをストリーミングすることによって、交換される(例えば、ストリーミングされる)。
【0154】
図18Bは、ホストコンピュータ106が、ラップトップまたはタブレットコンピュータなどの中間コンピューティングデバイス1802を介してHMD102に通信可能に連結される、さらに別の代替の実装形態を示している。図18A図18Bとの間の差は、図18AのAP1800が、レンダリングを行わないデータルーティングデバイスとして単純に作用し得、一方で、図18Bの中間コンピューティングデバイス1802は、レンダリングワークロードの一部分を実行し得る。すなわち、ホストコンピュータ106とHMD102との間でレンダリングワークロードを分岐させる代わりに、レンダリングワークロードは、ホストコンピュータ106、中間コンピューティングデバイス1802、およびHMD102といった3つのデバイスなどの3つ以上のデバイスの間で区分けされ得る。図18Bのシナリオにおいて、ホストコンピュータ106は、本明細書に記載されるように、ピクセルデータ110(1)を生成し得、中間コンピューティングデバイス1802は、ピクセルデータ110(1)を修正するためのレンダリング動作の第1のセットを実行し得、HMD102は、修正されたピクセルデータを修正するためのレンダリング動作の最終セットを実行し得る。
【0155】
図19は、本明細書に開示される実施形態による、HMD1900の例示的なコンポーネントを示しており、例えば、VRヘッドセットが埋め込まれ得る。HMD102は、ユーザ104によって(例えば、ユーザ104の頭部に)装着されることになるデバイスとして実装され得る。いくつかの実施形態では、HMD102は、ユーザ104が、ユーザ104の頭部の周囲に収まるようにサイズ決めされる固設機構(例えば、調整可能バンド)を使用して、HMD102をユーザの頭部に固設することを可能にすることなどによって、頭部に装着可能であり得る。いくつかの実施形態では、HMD102は、ニアアイまたはニアツーアイディスプレイを含む仮想現実(VR)または拡張現実(AR)ヘッドセットを含む。したがって、「ウェアラブルデバイス」、「ウェアラブル電子デバイス」、「VRヘッドセット」、「ARヘッドセット」、および「ヘッドマウントディスプレイ(HMD)」という用語は、本明細書では互換的に使用されて、デバイス102を指し得る。しかしながら、これらのタイプのデバイスは、HMD102の単なる例であることを理解されたい、HMD102は、様々な他のフォームファクタで実装され得ることを理解されたい。
【0156】
例示された実装形態では、HMD102は、1つ以上のプロセッサ1900およびメモリ1902(例えば、コンピュータ可読媒体1902)を含む。いくつかの実装形態では、プロセッサ1900は、中央処理装置(CPU)、GPU1900(1)、CPUおよびGPU1900(1)の両方、マイクロプロセッサ、デジタル信号プロセッサ、または当該技術分野で既知の他の処理ユニットもしくは構成要素を含み得る。代替的にまたは追加的に、本明細書に記載されている機能性は、1つ以上のハードウェアロジックコンポーネントによって、少なくとも部分的に実行することができる。例えば、非限定的に、使用され得るハードウェアロジックコンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、複合プログラマブル論理デバイス(CPLD)などが挙げられる。加えて、プロセッサ1900の各々は、プログラムモジュール、プログラムデータ、および/または1つ以上のオペレーティングシステムも記憶し得る、その独自のローカルメモリを保有し得る。
【0157】
メモリ1902は、揮発性および不揮発性メモリ、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装された取り外し可能および取り外し不可能な媒体が挙げられ得る。そのようなメモリとしては、限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多目的ディスク(DVD)もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、RAIDストレージシステム、または所望の情報を記憶するために使用され得、コンピューティングデバイスによってアクセスされ得る、任意の他の媒体が挙げられる。メモリ1902は、コンピュータ可読記憶媒体(「CRSM」)として実装され得、それは、メモリ1902上に記憶された命令を実行するために、プロセッサ1900によってアクセス可能である任意の利用可能な物理媒体であってもよい。1つの基本的な実装形態では、CRSMは、ランダムアクセスメモリ(「RAM」)およびフラッシュメモリを含み得る。他の実装形態では、CRSMには、読み出し専用メモリ(「ROM」)、電気的に消去可能なプログラマブル読み出し専用メモリ(「EEPROM」)、または所望の情報を記憶するために使用され得、プロセッサ1900によってアクセスされ得る、任意の他の有形媒体が含まれ得るが、これらに限定されない。
【0158】
一般に、HMD102は、本明細書に説明される技術、機能、および/または動作を実装するように構成されるロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)を含み得る。コンピュータ可読媒体1902は、命令、データストアなどの、様々なモジュールを含むものとして示され、これらのモジュールは、本明細書に説明される技術、機能、および/または動作を実施するためにプロセッサ1900上で実行するように構成され得る。コンピュータ可読媒体1902に記憶され、かつプロセッサ1900上で実行可能なものとして、数個の例示的な機能モジュールが示されているが、同じ機能が、代替的に、ハードウェア、ファームウェア内に、またはシステムオンチップ(SOC)および/もしくは他のロジックとして実装されてもよい。
【0159】
オペレーティングシステムモジュール1904は、他のモジュールの便宜のために、HMD102内に連結されたハードウェアを管理するように構成され得る。加えて、いくつかの事例では、HMD102は、メモリ1902に記憶されているか、またはさもなければHMD102にアクセス可能な1つ以上のアプリケーション1906を含み得る。この実装では、アプリケーション1906は、ゲームアプリケーション1908を含む。しかしながら、HMD102は、任意の数またはタイプのアプリケーションを含み得、ここに示される特定の例に限定されない。コンポジタ1910は、HMD102の他のロジックと組み合わせて、動きが平滑化され、再投影フレーム300をレンダリングするために、本明細書に説明記載される動き平滑化技術を実行するように構成され得る。
【0160】
一般的に、HMD102は、入力デバイス1912および出力デバイス1914を有する。入力デバイス1912は、制御ボタンを含み得る。いくつかの実装形態では、1つ以上のマイクロフォンが、ユーザ音声入力などのオーディオ入力を受信するための入力デバイス1912として機能し得る。いくつかの実装形態では、1つ以上のカメラまたは他のタイプのセンサ(例えば、慣性測定ユニット(IMU))が、ユーザ104の手および/または頭部の動きなどの、ジェスチャ入力を受信するための入力デバイス1912として機能し得る。いくつかの実施形態において、追加の入力デバイス1912が、キーボード、キーパッド、マウス、タッチスクリーン、ジョイスティックなどの形態で提供され得る。他の実施形態において、HMD102は、キーボード、キーパッド、または他の同様の形態の機械的入力を省略してもよい。代わりに、HMD102は、入力デバイス1912の比較的単純な形態、ネットワークインターフェース(無線または有線ベース)、電源、および処理/メモリ機能で実装され得る。例えば、1つ以上の入力部品の限定されたセット(例えば、構成を開始する、電源をオン/オフするなどのための専用ボタン)が用いられ得、HMD102は、その後に使用され得る。一実装形態では、入力デバイス1912は、音量を増加/減少させるための基本的な音量制御ボタン、ならびに電源およびリセットボタンなどの制御機構を含み得る。
【0161】
出力デバイス1914は、ディスプレイ1916を含み得、これは、1つ以上のディスプレイパネル(例えば、ディスプレイパネルのステレオ対)を含み得る。出力デバイス1914は、非限定的に、発光素子(例えば、LED)、触覚感覚を生み出すためのバイブレータ、および/またはスピーカ(例えば、ヘッドフォン)などをさらに含み得る。例えば、電源がオンであるときなどの状態を示すための単純な発光素子(例えば、LED)も存在し得る。
【0162】
HMD102は、ネットワークへの無線接続を容易にするために、アンテナ1920に連結された無線ユニット1918をさらに含み得る。無線ユニット1918は、Wi-Fi、Bluetooth(登録商標)、無線周波数(RF)などの、様々な無線技術のうちの1つ以上を実装し得る。HMD102は、ネットワーク、接続された周辺機器(PC、ゲームコンソールなどのホストコンピュータ106を含む)、または他の無線ネットワークと通信するプラグインネットワークデバイスへの有線接続を容易にするための物理ポートをさらに含み得ることを理解されたい。
【0163】
HMD102は、1つ以上の光学要素を使用して、電子ディスプレイ1916からユーザの眼に光を向ける光学サブシステム1922をさらに含み得る。光学サブシステム1922は、非限定的に、アパーチャ、レンズ(例えば、フレネルレンズ、凸レンズ、凹レンズなど)、フィルタなどを含む、異なる光学素子の様々なタイプおよび組み合わせを含み得る。いくつかの実施形態では、光学サブシステム1922内の1つ以上の光学要素は、反射防止コーティングなどの1つ以上のコーティングを有し得る。光学サブシステム1922による画像光の拡大は、電子ディスプレイ1916が、より大型のディスプレイよりも物理的により小型で、軽量で、より低消費電力であることを可能にする。加えて、画像光の拡大は、表示されたコンテンツ(例えば、画像)の視野(FOV)を増加させ得る。例えば、表示されたコンテンツのFOVは、表示されたコンテンツが、ユーザのFOVのほぼすべて(例えば、対角120~150度)、場合によってはすべてを使用して提示されるようなものである。ARアプリケーションは、より狭いFOV(例えば、約40度のFOV)を有していてもよい。光学サブシステム1922は、非限定的に、樽型歪み、ピンクッション歪み、長手方向色収差、横収差、球面収差、像面湾曲、非点収差などの、1つ以上の光学誤差を補正するように設計され得る。いくつかの実施形態では、表示のために電子ディスプレイ1916に提供されるコンテンツは、事前に歪められており、光学サブシステム1922は、コンテンツに基づいて生成された、電子ディスプレイ1916からの画像光を受光する場合にその歪みを補正する。
【0164】
HMD102は、動き、位置、および方向データを生成するために使用されるセンサなどの、1つ以上のセンサ1924をさらに含み得る。これらのセンサ1924は、ジャイロスコープ、加速度計、磁力計、ビデオカメラ、カラーセンサ、または他の動き、位置、および方向センサであり得るか、またはそれらを含み得る。センサ1924はまた、動き、位置、および方向データを生成するためにカメラまたはカラーセンサによって外部から視認され得る一連の能動または受動マーカなどの、センサのサブ部分を含み得る。例えば、VRヘッドセットは、その外部に、外部カメラで見た場合、または光(例えば、赤外光または可視光)で照らした場合に、反射器または光(例えば、赤外光または可視光)などの複数のマーカを含み得、動き、位置、および方向データを生成するために、ソフトウェアによる解釈のための1つ以上の基準点を提供し得る。HMD102は、HMD102の環境内の基地局によって投影または散布される光(例えば、赤外光または可視光)に対して感応性である光センサを含み得る。
【0165】
一例では、センサ1924は、慣性測定ユニット(IMU)1926を含み得る。IMU1926は、加速度計、ジャイロスコープ、磁力計、および/もしくは動きの検出、IMU1926と関連付けられた誤差の補正、またはそれらのいくつかの組み合わせに好適な他のセンサから受信された測定信号に基づいて、較正データを生成する電子デバイスであり得る。測定信号に基づいて、IMU1926のような、そのような動きベースのセンサは、HMD102の初期位置に対するHMD102の推定された位置を示す較正データを生成し得る。例えば、複数の加速度計が並進運動(前方/後方、上/下、左/右)を測定し、複数のジャイロスコープが回転運動(例えば、ピッチ、ヨー、およびロール)を測定してもよい。IMU1926は、例えば、測定信号を迅速にサンプリングし、サンプリングされたデータからHMD102の推定された位置を計算し得る。例えば、IMU1926は、経時的に加速度計から受信された測定信号を統合して速度ベクトルを推定し得、経時的に速度ベクトルを統合して、HMD102上の基準点の推定された位置を決定する。基準点は、HMD1900の位置を説明するために使用され得る点である。基準点は、一般的に、空間内の点として定義され得るが、様々な実施形態では、基準点は、HMD102内の点(例えば、IMU1926の中心)として定義される。代替的に、IMU1926は、サンプリングされた測定信号を外部コンソール(または他のコンピューティングデバイス)に提供し、外部コンソールが較正データを決定する。
【0166】
センサ1924は、センサデータを高レートで提供するために、比較的高い周波数で動作し得る。例えば、センサデータは、1000Hzのレート(または1ミリ秒ごとに1つのセンサの読み取り)で生成され得る。このようにして、1秒間に1000回の読み取りが行われる。センサがこの速度で(またはそれ以上の速度で)これだけのデータを生成する場合、動きを予測するために使用されるデータセットは、数十ミリ秒ほどの比較的短い期間でも非常に大きくなる。
【0167】
言及されるように、いくつかの実施形態では、センサ1924は、3D空間内のHMD102の位置および/または方向、姿勢などを追跡する目的で、HMD102の環境内の基地局によって放出される光に対して感応性である光センサを含み得る。位置および/または方向の計算は、光パルスのタイミング特性、およびセンサ1924によって検出される光の有無に基づき得る。
【0168】
HMD102は、眼追跡モジュール1928をさらに含み得る。HMD102の内部のカメラまたは他の光学センサは、ユーザの眼の画像情報を捕捉し得、眼追跡モジュール1928は、捕捉された情報を使用して、ねじれおよび回転の大きさ(すなわち、ロール、ピッチ、およびヨー)ならびに各眼の注視方向を含む、瞳孔間距離、HMD102に対する各眼の3次元(3D)位置を決定し得る(例えば、歪み調整の目的で)。一例では、赤外光が、HMD102内で放出され、各眼から反射される。反射光は、HMD102のカメラによって受光または検出され、各眼によって反射された赤外光の変化から眼球回転を抽出するために分析される。ユーザ104の眼を追跡するための多くの方法が、眼追跡モジュール1928によって使用され得る。したがって、眼追跡モジュール1928は、各眼の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)を追跡し得、追跡された量の少なくともサブセットが、注視点(すなわち、ユーザが見ている仮想シーン内の3D場所または位置)を推定するためにユーザ104の2つの眼から組み合わせられ得る。例えば、眼追跡モジュール1928は、過去の測定値からの情報、ユーザ104の頭部の位置を識別する測定値、および電子ディスプレイ1916によって提示されるシーンを記述する3D情報を統合し得る。したがって、ユーザ104の眼の位置および向きの情報は、ユーザ104が見ている、HMD102によって提示された仮想シーン内の注視点を決定するために使用される。
【0169】
HMD102は、頭部追跡モジュール1930をさらに含み得る。頭部追跡モジュール1930は、上述のように、センサ1924のうちの1つ以上を利用して、ユーザ104の頭部の回転を含む頭部の動きを追跡し得る。例えば、頭部追跡モジュール1930は、HMD102の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)を追跡し得る。これらの計算は、一連のフレーム300のすべてのフレーム300において行われ得るため、アプリケーション(例えば、ビデオゲーム)は、次のフレーム300内でシーンをどのようにレンダリングするかを決定し得、かつ/またはコンポジタ1910は、頭部の位置および向きに応じて、再投影フレーム300をどのようにレンダリングするかを決定し得る。いくつかの実施形態では、頭部追跡モジュール1930は、現在および/または過去のデータに基づいて、HMD102の将来の位置および/または配向を予測するように構成される。これは、ユーザ104がディスプレイ1916上で光(したがって、画像)を実際に見る前に、アプリケーションがフレーム300をレンダリングするように求められるためである。したがって、次のフレーム300は、フレーム300をレンダリングする前のおよそ25~30ミリ秒(ms)などのより早い時点で行われた、頭部の位置および/または配向のこの将来の予測に基づいて、レンダリングすることができる。ホストコンピュータ106がHMD102に通信可能に(例えば、無線で)連結される分散システムでは、頭部姿勢の将来の予測は、ネットワークレイテンシ、圧縮動作などを考慮するために、フレーム300の点灯時間の30ms以上前に行われ得る。頭部追跡モジュール1930によって提供される回転データは、任意の好適な測定単位で、HMD102の回転方向およびHMD102の回転量の両方を決定するために使用され得る。例えば、回転方向は、左、右、上、および下に対応する正または負の水平方向および正または負の垂直方向の観点で単純化されて出力され得る。回転量は、度、ラジアンなどの単位であり得る。角速度が、HMD102の回転速度を決定するために計算されてもよい。
【0170】
図20は、本明細書に開示される技術が実装され得る、ホストコンピュータ106の例示的なコンポーネントを示す。例示された実装形態では、ホストコンピュータ106は、1つ以上のプロセッサ2000およびメモリ2002(例えば、コンピュータ可読媒体2002)を含む。いくつかの実装形態では、プロセッサ2000は、CPU、GPU304、CPUおよびGPU304の両方、マイクロプロセッサ、デジタルシグナルプロセッサ、または当該技術分野で既知の他の処理ユニットもしくはコンポーネントを含み得る。代替的にまたは追加的に、本明細書に記載されている機能性は、1つ以上のハードウェアロジックコンポーネントによって、少なくとも部分的に実行することができる。例えば、非限定的に、使用することができる例示的なタイプのハードウェアロジックコンポーネントとしては、FPGA、ASIC、ASSP、SOC、CPLDなどが挙げられる。加えて、プロセッサ2000の各々は、プログラムモジュール、プログラムデータ、および/または1つ以上のオペレーティングシステムも記憶し得る、その独自のローカルメモリを保有し得る。
【0171】
メモリ2002は、揮発性および不揮発性メモリ、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装された取り外し可能および取り外し不可能な媒体が挙げられ得る。そのようなメモリは、これらに限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、DVD、もしくは他の光メモリ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、RAIDストレージシステム、または所望の情報を記憶するために使用することができ、かつコンピューティングデバイスからアクセスすることができる任意の他の媒体を含む。メモリ2002は、CRSMとして実装され得、それは、メモリ2002上に記憶された命令を実行するために、プロセッサ2000によってアクセス可能である任意の利用可能な物理媒体であってもよい。1つの基本的な実装形態では、CRSMには、RAMおよびフラッシュメモリを含み得る。他の実装形態では、CRSMには、ROM、EEPROM、または所望の情報を記憶するために使用され得、プロセッサ2000によってアクセスされ得る、任意の他の有形媒体が含まれ得るが、これらに限定されない。
【0172】
一般に、ホストコンピュータ106は、本明細書に説明される技術、機能、および/または動作を実装するように構成されるロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)を含み得る。コンピュータ可読媒体2002は、命令、データストアなどの、様々なモジュールを含むものとして示され、これらのモジュールは、本明細書に説明される技術、機能、および/または動作を実施するためにプロセッサ2000上で実行するように構成され得る。オペレーティングシステム2004、ビデオゲーム(またはゲームアプリ2010)などのアプリケーション2008を含むビデオゲームクライアント2006、およびレンダリングコンポーネント2012の形態の例示的な機能モジュールが、コンピュータ可読媒体2002に記憶され、プロセッサ2000上で実行可能であるように示される。いくつかの実施形態では、追加のまたは異なる機能モジュールが、コンピュータ可読媒体2002に記憶され、かつプロセッサ2000上で実行可能であり得る。
【0173】
オペレーティングシステム2004は、他のモジュールの利益のために、ホストコンピュータ106内の、およびホストコンピュータ106に連結されたハードウェアを管理するように構成され得る。このビデオゲームクライアント2006は、ビデオゲーム(またはビデオゲームプログラム)などのプログラムを起動および実行するように構成されている実行可能クライアントアプリケーションを表し得る。言い替えると、ビデオゲームクライアント2006には、HMD102およびホストコンピュータ106を含むシステム上でビデオゲームをプレイするために使用可能なゲームソフトウェアが含まれ得る。ビデオゲームクライアント2006がインストールされた状態で、ホストコンピュータ106は、コンピュータネットワーク(例えば、インターネット)経由で遠隔システムからビデオゲームを受信(例えば、ダウンロード、ストリーミングなど)し、ビデオゲームクライアント2006を介してビデオゲームを実行するための能力を有し得る。この目的のために、ホストコンピュータ106上でのダウンロードおよび実行のために別々に購入することができる直接購入モデル、サブスクリプションベースモデル、ビデオゲームがある期間のレンタルまたはリースされるコンテンツ配信モデルなどの任意のタイプのコンテンツ配信モデルを利用することができる。したがって、ホストコンピュータ106は、ビデオゲームライブラリ2014内に、1つ以上のビデオゲームを含み得る。これらのビデオゲームは、ビデオゲームクライアント2006をロードすることによって、取り出され、そして実行され得る。例では、ユーザ104は、ビデオゲームクライアント2006をロードし、ビデオゲームを選択してビデオゲームの実行を開始することによって、購入してビデオゲームライブラリ2014にダウンロードした複数のビデオゲームのうちの1つをプレイすることを選択し得る。ビデオゲームクライアント2006は、ユーザが資格情報(例えば、ユーザアカウント、パスワードなど)を使用してビデオゲームサービスにログインすることを可能にし得る。
【0174】
ホストコンピュータ106上で実行するアプリケーション2008は、グラフィックスベースのアプリケーション2008(例えば、ビデオゲーム2010)であり得る。アプリケーション2008は、一連のフレームに関するピクセルデータを生成するように構成され、ピクセルデータは、最終的に、HMD102のディスプレイパネル1916上に対応する画像を提示するために使用される。ランタイム中、所与のフレームについて、レンダリングコンポーネント2012は、フレームのための予測「点灯時間」を決定し得る。フレームのためのこの予測「点灯時間」は、HMD102のディスプレイパネル1916の発光素子がフレームのために点灯する時間を表す。この予測は、とりわけ、ホストコンピュータ106とHMD102との間の無線通信リンクの固有のレイテンシ、ならびにフレームバッファからのピクセルの予測されるレンダリング時間および/または既知のスキャンアウト時間を考慮することができる。言い換えれば、無線通信リンクについての予測は、有線通信リンクについての予測とは異なり得る。例えば、レンダリングコンポーネント2012は、有線通信リンクの場合、将来の第1の時間量である点灯時間を予測し得る(例えば、将来の約22ミリ秒)が、一方で、レンダリングコンポーネント2012は、無線通信リンクの場合、無線接続に対して有線接続を介してデータを転送するときのレイテンシの固有の違いに起因して、将来の第2の、より大きな時間量である点灯時間を予測し得る(例えば、将来の約44ミリ秒)。
【0175】
本明細書で説明したように、ホストコンピュータ106は、HMD102から、HMD102の頭部追跡ジュール1930によって生成された頭部追跡データ208を受信することもできる。この頭部追跡データ208は、ターゲットフレームレートおよび/またはHMD102のリフレッシュレートに対応する周波数などの任意の適切な周波数、または1000Hz(または1ミリ秒ごとの1つのセンサの読み取り)などの異なる(例えば、より速い)周波数で生成および/または送信され得る。レンダリングコンポーネント2012は、頭部追跡データ208に少なくとも部分的に基づいて、HMD102が予測点灯時間に存在する予測姿勢を決定するように構成されている。次いで、レンダリングコンポーネント2012は、予測姿勢に基づいてフレームをレンダリングする(例えば、フレームについてピクセルデータを生成する)ために、予測姿勢を示す姿勢データを実行アプリケーション2008に提供し得、レンダリングコンポーネント2012は、アプリケーション2008から、フレーム300と関連付けられたピクセルデータ110(1)を取得し得る。
【0176】
ホストコンピュータ106は、ネットワークおよび/またはHMD102などの第2のデバイスへの無線接続を容易にするために、アンテナ2020に連結された無線ユニット2018を含むが、これらに限定されない、通信インターフェース2016をさらに含み得る。無線ユニット2018は、Wi-Fi、Bluetooth(登録商標)、無線周波数(RF)などの、様々な無線技術のうちの1つ以上を実装し得る。ホストコンピュータ106は、ネットワークおよび/またはHMD102などの第2のデバイスへの有線接続を容易にする物理ポートをさらに含み得ることを理解されたい。
【0177】
一般的に、ホストコンピュータ106は、入力デバイス2022および出力デバイス2024を有する。入力デバイス2022は、キーボード、キーパッド、マウス、タッチスクリーン、ジョイスティック、制御ボタン、マイク、カメラなどを含み得る。出力デバイス2024は、非限定的に、ディスプレイ、発光素子(例えば、LED)、触覚感覚を生み出すためのバイブレータ、スピーカ(例えば、ヘッドフォン)などを含み得る。いくつかの実施形態では、HMD102上に実装されていると示されているコンポーネントのサブセットは、ホストコンピュータ106またはHMD102から分離された別のコンピューティングデバイス上に実装され得、かつ/またはホストコンピュータ106上に実装されていると示されているコンポーネントのサブセットは、HMD102またはホストコンピュータ106から分離された別のコンピューティングデバイス上に実装され得ることを理解されたい。
【0178】
本主題は、構造的特徴に固有の言語で説明されているが、添付の特許請求の範囲で定義された主題が必ずしも説明された特定の特徴に限定されないことを理解されたい。むしろ、特定の特徴は、特許請求の範囲を実装する例示的な形態として開示される。
以下に、本願出願時の特許請求の範囲に記載された発明を付記する。
[1]
ヘッドマウントディスプレイ(HMD)であって、
1つ以上のディスプレイパネルと、
プロセッサと、
コンピュータ実行可能命令を記憶するメモリと、を備え、前記命令が、前記プロセッサによって実行されると、前記HMDに、
前記HMDに通信可能に連結されたホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記圧縮されたピクセルデータを解凍してピクセルデータを取得することと、
前記ピクセルデータを修正して、修正されたピクセルデータを取得することであって、前記ピクセルデータが、
前記HMDの予測姿勢、および
前記動きベクトルアレイ、に少なくとも部分的に基づいて修正される、取得することと、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記1つ以上のディスプレイパネル上に画像を提示することと、を行わせる、HMD。
[2]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記HMDに、
複数の頂点を有するテッセレーションメッシュを含むレンダリングメッシュを生成することと、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、をさらに行わせ、
前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することが、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、[1]に記載のHMD。
[3]
前記頂点が、
前記非ゼロ動きベクトルの方向に、かつ
前記非ゼロ動きベクトルの大きさに対応する量だけ、移動される、[2]に記載のHMD。
[4]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記HMDに、さらに、符号化されたデータストリームから前記動きベクトルアレイを抽出させる、[1]に記載のHMD。
[5]
前記ホストコンピュータが、前記HMDに無線で連結され、
前記動きベクトルアレイが、前記ホストコンピュータから無線で受信される、[1]に記載のHMD。
[6]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記HMDに、
さらに、前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得させ、
前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することが、前記修正された動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することを含む、[1]に記載のHMD。
[7]
方法であって、
ヘッドマウントディスプレイ(HMD)によって、ホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記HMDによって、前記圧縮されたピクセルデータを解凍して、ピクセルデータを取得することと、
前記HMDによって、前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正して、修正されたピクセルデータを取得することと、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記HMDの1つ以上のディスプレイパネル上に画像を提示することと、を含む、方法。
[8]
前記ピクセルデータの前記修正の前に、
前記HMDのメモリ内の前記ピクセルデータをキャッシュされたピクセルデータとしてキャッシュすることと、
前記キャッシュされたピクセルデータが、前記HMDに利用可能な最後に解凍されたピクセルデータを表すことを決定することと、
前記HMDの前記メモリから前記キャッシュされたピクセルデータを取り出すことと、をさらに含む、[7]に記載の方法。
[9]
前記HMDによって、複数の頂点を有するテッセレーションメッシュを含むレンダリングメッシュを生成することと、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、をさらに含み、
前記動きベクトルアレイに少なくとも部分的に基づく前記ピクセルデータの前記修正が、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、[7]に記載の方法。
[10]
前記動きベクトルアレイを符号化されたデータストリームから抽出することをさらに含む、[7]に記載の方法。
[11]
前記画像の前記提示の前に、
前記HMDによって、前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって、前記ピクセルデータを生成するために使用された前記HMDの予測姿勢を示す姿勢データを受信することをさらに含み、
前記ピクセルデータの前記修正が、前記HMDの前記予測姿勢と更新された姿勢の予測との間の比較にさらに少なくとも部分的に基づいている、[7]に記載の方法。
[12]
前記画像の前記提示の前に、
前記HMDによって、前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって出力されるZバッファデータを表す深度データを受信することをさらに含み、
前記ピクセルデータの前記修正が、前記深度データにさらに少なくとも部分的に基づいている、[7]に記載の方法。
[13]
前記HMDによって、前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得することをさらに含み、
前記動きベクトルアレイに少なくとも部分的に基づく前記ピクセルデータの前記修正が、前記修正された動きベクトルアレイに基づいて、前記ピクセルデータを修正することを含む、[7]に記載の方法。
[14]
ディスプレイシステムであって、
1つ以上のディスプレイパネルと、
プロセッサと、
コンピュータ実行可能命令を記憶するメモリと、を備え、前記命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、
ホストコンピュータから、圧縮されたピクセルデータを表す動きベクトルアレイを受信することと、
前記圧縮された第1のピクセルデータを解凍してピクセルデータを取得することと、
前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正して、修正されたピクセルデータを取得することと、
前記修正されたピクセルデータに少なくとも部分的に基づいて、前記1つ以上のディスプレイパネル上に画像を提示することと、を行わせる、ディスプレイシステム。
[15]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ピクセルデータを修正する前に、前記ディスプレイシステムに、
前記メモリ内の前記ピクセルデータを、キャッシュされたピクセルデータとしてキャッシュすることと、
前記キャッシュされたピクセルデータが、前記HMDに利用可能な最後に解凍されたピクセルデータを表すことを決定することと、
前記メモリから前記キャッシュされたピクセルデータを取り出すことと、を行わせる、[14]に記載のディスプレイシステム。
[16]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、
複数の頂点を有するテッセレーションメッシュを含むレンダリングメッシュを生成することと、
前記動きベクトルアレイ間の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動させることと、を行わせ、
前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを修正することが、前記レンダリングメッシュの前記移動された頂点に従って前記ピクセルデータのピクセル値を移動させて、前記修正されたピクセルデータを取得することを含む、[14]に記載のディスプレイシステム。
[17]
前記ホストコンピュータが、前記ディスプレイシステムに無線で連結され、
前記動きベクトルアレイが、前記ホストコンピュータから無線で受信される、[14]に記載のディスプレイシステム。
[18]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記画像を提示する前に、前記ディスプレイシステムに、
前記ホストコンピュータから、前記ホストコンピュータ上で実行されるアプリケーションによって出力されるZバッファデータを表す深度データを受信させ、
前記ピクセルデータを修正することが、前記深度データにさらに少なくとも部分的に基づいている、[14]に記載のディスプレイシステム。
[19]
前記コンピュータ実行可能命令が、前記プロセッサによって実行されると、前記ディスプレイシステムに、
前記動きベクトルアレイにフィルタを適用して、修正された動きベクトルアレイを取得させ、
前記動きベクトルアレイに少なくとも部分的に基づいて前記ピクセルデータを前記修正することが、前記修正された動きベクトルアレイに基づいて前記ピクセルデータを修正することを含む、[14]に記載のディスプレイシステム。
[20]
前記ディスプレイシステムが、仮想現実(VR)ヘッドセットまたは拡張現実(AR)ヘッドセットのうちの少なくとも1つを含む、[14]に記載のディスプレイシステム。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18A
図18B
図19
図20