(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-01
(45)【発行日】2023-12-11
(54)【発明の名称】再投影フレームのモーションスムージング
(51)【国際特許分類】
H04N 5/66 20060101AFI20231204BHJP
G09G 5/00 20060101ALI20231204BHJP
G09G 5/02 20060101ALI20231204BHJP
G02B 27/02 20060101ALI20231204BHJP
H04N 5/64 20060101ALI20231204BHJP
【FI】
H04N5/66 Z
G09G5/00 510G
G09G5/00 550H
G09G5/00 550C
G09G5/00 530D
G09G5/02 B
G02B27/02 Z
H04N5/64 511A
(21)【出願番号】P 2021519155
(86)(22)【出願日】2019-09-27
(86)【国際出願番号】 US2019053528
(87)【国際公開番号】W WO2020076526
(87)【国際公開日】2020-04-16
【審査請求日】2022-09-22
(32)【優先日】2018-10-09
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】517160525
【氏名又は名称】バルブ コーポレーション
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】ヴラコス、アレックス
(72)【発明者】
【氏名】ライビー、アーロン
【審査官】佐野 潤一
(56)【参考文献】
【文献】米国特許出願公開第2019/0045213(US,A1)
【文献】米国特許出願公開第2014/0307787(US,A1)
【文献】米国特許出願公開第2007/0035706(US,A1)
【文献】米国特許出願公開第2018/0041768(US,A1)
【文献】特開平07-222155(JP,A)
【文献】特開2012-073350(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 5/66
H04N 5/64
H04N 13/00
H04N 21/00
G09G 5/00
G02B 27/02
G06T 1/00- 5/00
G06T 15/00-19/00
(57)【特許請求の範囲】
【請求項1】
方法であって、
ヘッドマウントディスプレイ(HMD)のグラフィックスプロセッシングユニット(GPU)への入力として、
アプリケーションから受信した第1のフレームに関連付けられた第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームに関連付けられた第2のピクセルデータと、を提供することであって、
前記第2のフレームが、最後にレンダリングされたフレームであり、前記第1のフレームが、前記第2のフレームの前にレンダリングされたものであることと、
前記GPUから、前記第1のピクセルデータと前記第2のピクセルデータとの間の比較に少なくとも部分的に基づいて、前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信することと、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成することと、
前記再投影フレームのレンダリングメッシュを生成することであって、前記レンダリングメッシュが、前記動きベクトルの配列の解像度と一致する解像度で複数の頂点を有するテッセレーションされたメッシュを含むことと、
前記動きベクトルの配列の中の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記非ゼロ動きベクトルの方向の前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動することと、
前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得することと、
前記変更された第3ピクセルデータに少なくとも部分的に基づいて、前記HMDのディスプレイパネルに前記再投影フレームをレンダリングすることと、を備える、方法。
【請求項2】
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータが前記フレームバッファに出力され、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータが前記フレームバッファに出力され、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、請求項1に記載の方法。
【請求項3】
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ディスプレイパネルの1つ以上の端部にあるピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの一部および前記第2のピクセルデータの一部を提供することを備える、請求項1に記載の方法。
【請求項4】
前記第1のピクセルデータの一部および前記第2のピクセルデータの一部が、それぞれ、前記ディスプレイパネルの周辺にレンダリングされたパネルマスクに対応するデータを表し、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のピクセルデータを変更して、前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得することであって、前記変更された第1のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記第2のピクセルデータを変更して、前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得することであって、前記変更された第2のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記変更された第1のピクセルデータの一部を前記変更された第2のピクセルデータの一部と組み合わせて、前記パネルマスクに対応する共通のピクセル値を有するピクセルのサブセットを判定することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの特定の部分および第2のピクセルデータの特定の部分を提供することを備える、請求項1に記載の方法。
【請求項5】
方法であって、
グラフィックスプロセッシングユニット(GPU)への入力として、
アプリケーションから受信した第1のフレームであって、過去にレンダリングされた前記第1のフレームに関連付けられた第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームであって、前記第1のフレームの後に過去にレンダリングされた前記第2のフレームに関連付けられた第2のピクセルデータと、を提供することと、
前記GPUから、前記第1のピクセルデータおよび前記第2のピクセルデータに少なくとも部分的に基づいて前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信することと、
前記動きベクトルの配列にオーバーレイされた減衰テクスチャを生成することと、
前記減衰テクスチャを使用して前記動きベクトルの配列の1つ以上の動きベクトルの大きさを減少させて、動きベクトルの変更された配列を取得することと、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成することと、
前記動きベクトルの
変更された配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得することと、
前記変更された第3のピクセルデータに少なくとも部分的に基づいて、ディスプレイ上に前記再投影フレームをレンダリングすることと、を備える、方法。
【請求項6】
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータが前記フレームバッファに出力され、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータが前記フレームバッファに出力され、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、請求項5に記載の方法。
【請求項7】
さらに、
前記再投影フレームのレンダリングメッシュを生成することであって、前記レンダリングメッシュが、複数の頂点を有するテッセレーションされたメッシュを含むことと、
前記動きベクトルの
変更された配列の中の非ゼロの動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動する
ことと、を備え、
前記動きベクトルの
変更された配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータのピクセル値を移動して、前記再投影フレームの前記変更された第3のピクセルデータを取得することを備える、請求項5に記載の方法。
【請求項8】
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得するために前記第1のピクセルデータ、または
前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得するために前記第2のピクセルデータ、のうちの少なくとも1つを変更することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、前記変更された第1のピクセルデータまたは前記変更された第2のピクセルデータのうちの少なくとも1つを提供することを備える、請求項5に記載の方法。
【請求項9】
前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記GPUへの前記入力として、それぞれが前記ディスプレイの1つ以上の端部にあるピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの一部および前記第2のピクセルデータの一部を提供することを備える、請求項5に記載の方法。
【請求項10】
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記第1のピクセルデータの一部および前記第2のピクセルデータの一部が、それぞれ、前記HMDのディスプレイパネルの周辺にレンダリングされたパネルマスクに対応するデータを表し、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のピクセルデータを変更して、前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得することであって、前記変更された第1のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記第2のピクセルデータを変更して、前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得することであって、前記変更された第2のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記変更された第1のピクセルデータの一部を前記変更された第2のピクセルデータの一部と組み合わせて、前記パネルマスクに対応する共通のピクセル値を有するピクセルのサブセットを判定することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの特定の部分および第2のピクセルデータの特定の部分を提供することを備える、請求項5に記載の方法。
【請求項11】
さらに、
前記動きベクトルの配列の大きさを閾値の大きさと比較することと、
前記動きベクトルの配列の動きベクトルのサブセットが前記閾値の大きさよりも大きい大きさを有することを判定することと、
前記動きベクトルのサブセットの大きさを減らして、
前記動きベクトルの変更された配列を取得することと、
を備える、請求項5に記載の方法。
【請求項12】
前記第1のフレームおよび前記第2のフレームが、一連のフレームにおいて連続してレンダリングされた、請求項5に記載の方法。
【請求項13】
前記第1のピクセルデータが、第1の彩度データを含み、前記第2のピクセルデータが、第2の彩度データを含み、前記動きベクトルの配列が、前記第1の彩度データおよび前記第2の彩度データに少なくとも部分的に基づいて前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第1の配列であり、前記方法が、さらに、
前記GPUへの第2の入力として、
前記第1のフレームに関連付けられた第1の輝度データと、
前記第2のフレームに関連付けられた第2の輝度データと、を提供することと、
前記GPUから、前記第1の輝度データおよび前記第2の輝度データに少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信することと、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列の分析に基づいて、前記動きベクトルの第1の配列または前記動きベクトルの第2の配列の1つを動きベクトルの選択された配列として選択することと、を備え、
前記第3のピクセルデータを変更するために使用される前記動きベクトルの
変更された配列が、前記動きベクトルの選択された配列
に基づいている、請求項5に記載の方法。
【請求項14】
前記動きベクトルの配列が動きベクトルの第1の配列であり、前記方法が、さらに、
第1の回転量だけ前記第1のフレームを回転させて第1の回転フレームを取得することと、
第2の回転量だけ前記第2のフレームを回転させて第2の回転フレームを取得することと、
前記GPUへの第2の入力として、
前記第1の回転フレームに関連付けられた第3のピクセルデータと、
前記第2の回転フレームに関連付けられた第4のピクセルデータと、を提供することと、
前記GPUから、前記第3のピクセルデータおよび前記第4のピクセルデータに少なくとも部分的に基づいて、動きベクトルの第2の配列を受信することと、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列における動きベクトルの方向または大きさの少なくとも1つの差異を判定することと、
前記差異に少なくとも部分的に基づいて動きベクトルの最終配列を生成することと、を備え、
前記第3のピクセルデータを変更するために使用される前記動きベクトルの変更された配列が、前記動きベクトルの最終配列
に基づいている、請求項5に記載の方法。
【請求項15】
前記動きベクトルの配列が、第1の解像度での動きベクトルの第1の配列であり、前記方法が、さらに、
前記動きベクトルの第1の配列に少なくとも部分的に基づいて、前記ディスプレイにまたがる画像領域の第1の部分における動きの欠如を検出することと、
前記動きベクトルの第1の配列に少なくとも部分的に基づいて、前記画像領域の第2の部分におけるオブジェクトの動きを検出することと、
前記GPUへの追加入力として、
前記画像領域の前記第1の部分に対応する前記第1のピクセルデータの第1の部分と、
前記画像領域の前記第1の部分に対応する前記第2のピクセルデータの第1の部分と、
前記画像領域の前記第2の部分に対応する前記第1のピクセルデータの第2の部分と、
前記画像領域の前記第2の部分に対応する前記第2のピクセルデータの第2の部分と、を提供することと、
前記GPUから、前記第1のピクセルデータの前記第1の部分および前記第2のピクセルデータの前記第1の部分に少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信することであって、前記動きベクトルの第2の配列が、前記第1の解像度よりも高い解像度である第2の解像度で生成されることと、
前記GPUから、前記第1のピクセルデータの前記第2の部分および前記第2のピクセルデータの前記第2の部分に少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第3の配列を受信することであって、前記動きベクトルの第3の配列が、前記第2の解像度よりも低い解像度である第3の解像度で生成されることと、を備え、
前記第3のピクセルデータを変更するために使用される前記動きベクトルの変更された配列が、前記動きベクトルの第2の配列および前記動きベクトルの第3の配列
に基づいて前記第3のピクセルデータを変更することを備える、請求項5に記載の方法。
【請求項16】
前記第3のピクセルデータを変更することが、さらに、深度バッファを利用して、前記変更された第3のピクセルデータのフレームバッファのピクセル値の最終セットを判定することを備える、請求項5に記載の方法。
【請求項17】
システムであって、
ディスプレイと、
グラフィックスプロセッシングユニット(GPU)と、
ロジックであって、
前記GPUへの入力として、
アプリケーションから受信した第1のフレームに関連付けられた第1のピクセルデータであって、前記第1のフレームが、以前にレンダリングされている、第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームに関連付けられた第2のピクセルデータであって、前記第2のフレームが、前記第1のフレームの後に以前にレンダリングされている、第2のピクセルデータと、を提供し、
前記GPUから、前記第1のピクセルデータおよび前記第2のピクセルデータに少なくとも部分的に基づいて前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信し、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成し、
前記再投影フレームのレンダリングメッシュを生成し、
前記動きベクトルの配列のうちの非ゼロの動きベクトルに少なくとも部分的に基づいて、移動した頂点として、前記レンダリングメッシュのうちの異なる位置に前記レンダリングメッシュの頂点を移動し、
前記レンダリングメッシュの前記移動した頂点に少なくとも部分的に基づいて前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得し、
前記変更された第3のピクセルデータに少なくとも部分的に基づいて、前記ディスプレイ上に前記再投影フレームをレンダリングする、ように構成されたロジックと、を備える、システム。
【請求項18】
前記ロジックが、さらに、
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータを前記フレームバッファに出力し、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、
前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータを前記フレームバッファに出力し、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、ように構成されている、請求項
17に記載のシステム。
【請求項19】
前記レンダリングメッシュ
は、
前記頂点を含む複数の頂点を有するテッセレーションされたメッシュ
と、
(i)前記非ゼロの動きベクトルの方向に、および(ii)前記非ゼロの動きベクトルの大きさに対応する量だけ移動される、
前記頂点と、
前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータのピクセル値を移動して、前記再投影フレームの前記変更された第3のピクセルデータを取得することを備える、
前記レンダリングメッシュの前記移動された頂点に少なくとも部分的に基づいて前記第3のピクセルデータを変更することと、を含む、請求項
17に記載のシステム。
【請求項20】
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記ロジックが、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定し、
前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得するために前記第1のピクセルデータ、または
前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得するために前記第2のピクセルデータ、のうちの少なくとも1つを変更するように構成されており、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、前記変更された第1のピクセルデータまたは前記変更された第2のピクセルデータのうちの少なくとも1つを提供することを備える、請求項
17に記載のシステム。
【請求項21】
前記ロジックが、さらに、
前記第1のピクセルデータと前記第2のピクセルデータとの間の色ピクセル値を比較して、前記動きベクトルの配列内の個々の動きベクトルに対応する個々の色差値を判定し、
閾値色差よりも小さい色差値に関連付けられている動きベクトルのサブセットを判定し、
前記動きベクトルのサブセットの大きさをゼロに減らして、動きベクトルの変更された配列を取得する、ように構成されており、
前記
非ゼロの動きベクトルの配列に少なくとも部分的に基づいて
前記レンダリングメッシュの前記頂点を移動することが、前記動きベクトルの変更された配列
のうちの非ゼロの動きベクトルに基づいて前記第3のピクセルデータを変更することを備える、請求項
17に記載のシステム。
【請求項22】
前記第1のピクセルデータが、第1の彩度データを含み、前記第2のピクセルデータが、第2の彩度データを含み、前記動きベクトルの配列が、前記第1の彩度データおよび前記第2の彩度データに少なくとも部分的に基づいて前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第1の配列であり、前記ロジックが、さらに、
前記GPUへの第2の入力として、
前記第1のフレームに関連付けられた第1の輝度データと、
前記第2のフレームに関連付けられた第2の輝度データと、を提供し、
前記GPUから、前記第1の輝度データおよび前記第2の輝度データに少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信し、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列の分析に基づいて、前記動きベクトルの第1の配列または前記動きベクトルの第2の配列の1つを動きベクトルの選択された配列として選択するように構成されており、
前記レンダリングメッシュの前記頂点を移動するために使用される前記
非ゼロの動きベクトルの配列が、
非ゼロの動きベクトルのうちの前記動きベクトルの選択された配列を含む、請求項
17に記載のシステム。
【請求項23】
前記ロジックが、さらに、
動きベクトルの変更された配列を取得するために前記動きベクトルの配列に対するスカラー中央値フィルタ、または
前記動きベクトルの変更された配列を取得するために前記動きベクトルの配列に対する平均最大ぼかしフィルタ、のうちの少なくとも1つを適用するように構成されており、
前記
非ゼロの動きベクトル
に少なくとも部分的に基づいて
前記レンダリングメッシュの前記頂点を移動することが、前記動きベクトルの変更された配列
のうちの非ゼロの動きベクトルに基づいて前記第3のピクセルデータを変更することを備える、請求項
17に記載のシステム。
【請求項24】
前記第1のピクセルデータと前記第2のピクセルデータとの間の色ピクセル値を比較して、前記動きベクトルの配列内の個々の動きベクトルに対応する個々の色差値を決定することと、
閾値色差未満の色差値に関連付けられた動きベクトルのサブセットを決定し、
前記動きベクトルのサブセットの大きさをゼロまで減少させて、前記動きベクトルの変更された配列を取得することと、をさらに含む、請求項5に記載の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
これは、2018年10月9日に出願された「再投影フレームのモーションスムージング」というタイトルの米国特許出願第16/155,686号の優先権を主張するPCT出願であり、参照によりその全体が本明細書に組み込まれる。
【技術分野】
【0002】
[背景技術]
仮想現実(VR)システムは、ビデオゲーム業界の内外の双方で使用されている。VRヘッドセットに内蔵されているようなVRシステム用ディスプレイは、通常、VRアプリケーションに好適である最小リフレッシュレートで動作する。例えば、90ヘルツ(Hz)は、VRディスプレイの一般的なリフレッシュレートである。「ライブレンダリング」シナリオでは、ビデオゲームなどのグラフィックベースのアプリケーションは、ディスプレイのリフレッシュレートに適合するフレームレートでレンダリングするためのフレームを出力する。つまり、アプリケーションから受信された新たなフレーム(本明細書では「実際のフレーム」と称する)は、画面がリフレッシュされるたびに表示される。このようなライブレンダリングシナリオは、アプリケーションが「フレームレートに達した」と称されることがよくある。
【0003】
実際には、様々な理由でアプリケーションは常にフレームレートに達するとは限らない。例えば、アプリケーションがフレームを断続的にドロップする場合があり、および/またはアプリケーションが一時的により遅いレートでフレームを出力する場合がある(例えば、理想的なフレームレートが90フレーム/秒の場合は45フレーム/秒)。アプリケーションがフレームレートに達していない状況では、「回転のみの再投影」と呼ばれる技術を使用して、ユーザの頭部回転を考慮するように、欠落しているフレームを再投影フレームで置き換えることができ、それによってユーザにはアプリケーションがフレームレートに達しているかのように見える。例えば、再投影しない場合、アプリケーションからのフレームレートが不足すると、ゲーム内でスタッタまたはヒッチが発生する場合がある。ユーザが仮想環境に完全に没入しているVRアプリケーションでは、アプリケーションがフレームレートに達せず、欠落したフレームを補うための再投影がない場合、ユーザは不快になる可能性がある。したがって、再投影は、アプリケーションがフレームレートに達していないときにユーザ体験をより良好にする技術である。アプリケーションが理想的なフレームレートの半分でフレームを出力している例を検討する(例えば、90フレーム/秒が理想的なフレームレートである場合は、45フレーム/秒)。この例では、最も直近にレンダリングされた実際のフレームの画素データを使用して、シーンを変換する再投影フレームを作成し(例えば、回転および再投影の計算を通して)、再投影されたシーンをユーザの現在の頭の向きに適合させることで、1つおきにフレームを再投影させることができる。これにより、フレームレートに達しないアプリケーションを補うために再投影フレームが使用されているときでも、ユーザの頭部が回転した場合に、予想通りにシーンが動いているようにユーザには見える。
【0004】
回転のみの再投影はゲーム内のスタッタまたはヒッチを防止するが、少なくとも低持続性ディスプレイを使用するVRシステム(例えば、ディスプレイがフレーム時間のうちのごく僅かな間照光されている場合)では、頭部回転中にそれ自体の望ましくない視覚的アーティファクトを生成する。例えば、回転のみの再投影は、頭部の回転を考慮するが、フレーム間でシーン内を移動またはアニメ化する仮想オブジェクトを考慮しない。これは、移動しているかまたはアニメ化しているオブジェクトに関して、「ジャダー」と呼ばれる望ましくない視覚的アーティファクトを発生させる可能性がある。ジャダーは、移動しているオブジェクト(例えば、画面上を移動する弾丸またはボール)が2つの場所の間で(またはそれ自体から離れて)フレーム間で跳ね返るように見える、「ダブルゴースト効果」をユーザに知覚させる。したがって、再投影が使用されている間にユーザがその頭を回転させると、シーン内の任意の移動またはアニメ化しているオブジェクトがジャダーすることになる。
【0005】
本明細書では、これらのシステムおよび他のシステムを改善および強化するための技術的解決法を提供する。
【0006】
詳細な説明を、添付の図面を参照して説明する。図では、参照符号の左端の数字は、参照符号が最初に現れる図を指す。異なる図における同じ参照符号の使用は、類似または同一の構成要素または機能を示す。
【図面の簡単な説明】
【0007】
【
図1】
図1は、ヘッドマウントディスプレイ(HMD)などのディスプレイ上にフレームをレンダリングするために再投影が使用されているときに、シーン内のオブジェクトの移動またはアニメーション化を説明するための例示的なモーションスムージング技術を示す図である。
【0008】
【
図2】
図2は、例示的なレンダリングメッシュと、再投影フレームのモーションスムージングにおいてレンダリングメッシュがどのように使用されることができるかを示す図である。
【0009】
【
図3】
図3は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部としてグラフィックス処理ユニット(GPU)によって生成された動きベクトルを使用して再投影フレームを生成するための例示的なプロセスのフロー図である。
【0010】
【
図4】
図4は、本明細書に開示される実施形態にかかる、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセスのフロー図である。
【0011】
【
図5】
図5は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームのいくつかのピクセルデータを除外し、ピクセルデータの残りの部分を動きベクトル推定のためのGPUへの入力として提供するための例示的なプロセスのフロー図である。
【0012】
【
図6】
図6は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームのピクセルデータを位置合わせし、以前にレンダリングされたフレームのピクセルデータのパネルマスク部分を除外し、ピクセルデータの残りの部分を動きベクトル推定のためのGPUへの入力として提供するための例示的なプロセスのフロー図である。
【0013】
【
図7】
図7は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを閾値化するための例示的なプロセスのフロー図である。
【0014】
【
図8】
図8は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを減衰させるための例示的なプロセスのフロー図である。
【0015】
【
図9】
図9は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを減衰させるために使用されることができる減衰テクスチャを生成するための例示的なプロセスのフロー図である。
【0016】
【
図10】
図10は、本明細書に開示される実施形態にかかる、結果として生じる動きベクトルのセットがモーションスムージング技術の一部として再投影フレームを生成するために使用される前に、色変化がほとんどまたは全くない領域に対応する動きベクトルをゼロにするための例示的なプロセスのフロー図である。
【0017】
【
図11】
図11は、本明細書に開示される実施形態にかかる、結果として生じる動きベクトルのセットがモーションスムージング技術の一部として再投影フレームを生成するために使用される前に、1つ以上のフィルタを使用して動きベクトル場を「クリーンアップ」するための例示的なプロセス1100のフロー図である。
【0018】
【
図12】
図12は、本明細書に開示される実施形態にかかる、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームを回転させるための例示的なプロセスのフロー図である。
【0019】
【
図13】
図13は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームの輝度データおよび彩度データに基づいて生成される動きベクトルの配列の間で選択するための例示的なプロセスのフロー図である。
【0020】
【
図14】
図14は、本明細書に開示される実施形態にかかる、動きベクトルの複数の配列を取得し、アレイ間の差異を判定し、モーションスムージングについて判定された差異に基づいて動きベクトルの最終配列を生成するための例示的なプロセスのフロー図である。
【0021】
【
図15】
図15は、本明細書に開示される実施形態にかかる、画像領域の異なる部分について異なる解像度で動きベクトルの複数の配列を取得するための例示的なプロセスのフロー図である。
【0022】
【
図16】
図16は、本明細書に開示される技術が実装されることがきる、VRヘッドセットなどのウェアラブルデバイスの例示的な構成要素を示している。
【発明を実施するための形態】
【0023】
本明細書には、とりわけ、ヘッドマウントディスプレイ(HMD)などのディスプレイ上にフレームをレンダリングするために再投影が使用されているときに、シーン内のオブジェクトの移動またはアニメーション化を説明するモーションスムージング技術が記載される。本明細書に記載されるモーションスムージング技術は、オブジェクトを移動またはアニメーション化するための前述のジャダーアーティファクトなど、オブジェクトを移動またはアニメーション化することに関して望ましくない視覚的アーティファクトを軽減する。HMDは、ディスプレイ上に画像をレンダリングするときに開示されたモーションスムージング技術を実装することができるディスプレイの例示的なタイプである。HMDは、ユーザが仮想現実(VR)環境または拡張現実(AR)環境に没入する目的で、ユーザによって着用されることができる。HMDの1つ以上のディスプレイパネルは、アプリケーション(例えば、ビデオゲーム)によって出力されたフレームに基づいて画像をレンダリングし、これらの画像は、HMDに含まれる光学系を通してユーザに表示され、ユーザがVRまたはAR環境に没入しているかのようにユーザに画像を知覚させる。
【0024】
記載されるように、HMDは、「再投影」と呼ばれる技術を利用して、フレームレートに達していないアプリケーションを補償することができる。例えば、再投影フレームは、実際のフレーム間でレンダリングされて理想的なフレームレートを達成することができ、各再投影フレームは、アプリケーションから受信された最近レンダリングされた実際のフレーム(例えば、最も直近にレンダリングされた実際のフレーム)の画素データを使用して生成されることができる。再投影フレームでは、以前の実際のフレームでレンダリングされたシーンが、ユーザの頭部の回転を考慮したやり方で変換される(例えば、回転および再投影の計算を介して)。
【0025】
本明細書には、フレーム間を移動またはアニメーション化するオブジェクトの動きをさらに説明する再投影フレームを生成するために使用されるモーションスムージング技術が記載される。本明細書に記載されるモーションスムージング技術は、コンピュータビジョンアルゴリズムを使用して、動きベクトルの形態で複数のフレームにわたるオブジェクトの動き(例えば、方向および大きさ)を推定する。動きベクトルは、グラフィックスプロセッシングユニット(GPU)のビデオ符号化器(例えば、ビデオ符号化チップ)を使用して取得されることができる。例えば、GPUのビデオ符号化器は、以前にレンダリングされた複数のフレームのピクセルデータを分析して、動きベクトルの配列を生成することができ、これらの動きベクトルを使用して、再投影フレームのピクセルデータをオブジェクトの移動またはアニメーション化を説明する方法で変更することができる。別の言い方をすれば、GPUから受信した動きベクトルを使用して、移動するオブジェクトのジャダーが軽減されるようにオブジェクトがレンダリングされる再投影フレーム内のどこに配置されるべきかを(以前にレンダリングされたフレーム内のオブジェクトの動きから)外挿推定することができる。
【0026】
例示的なモーションスムージングプロセスでは、第1のフレームおよび第2のフレームに関連する第1のピクセルデータおよび第2のピクセルデータは、それぞれ、グラフィックスプロセッシングユニット(GPU)への入力として提供されることができる。第1のフレームおよび第2のフレームは、アプリケーションから受信され、過去にレンダリングされることができる(例えば、アプリケーションから最近レンダリングされた2つの実際のフレーム)。GPUのビデオ符号化器は、入力ピクセルデータを処理して動きベクトルの配列を生成することができる。第3のピクセルデータは、第2のフレームに関連する第2のピクセルデータに少なくとも部分的に基づいて、再投影フレーム(将来のレンダリングされるフレームである)に対して生成されることができ、この第3のピクセルデータは、GPUから受信した動きベクトルの配列に少なくとも部分的に基づいて、さらに変更されることができる。再投影フレームのこの変更された第3のピクセルデータは、シーン内のオブジェクトの移動またはアニメーション化に関するジャダーを排除しない場合であっても軽減するために、「モーションスムージング」される。そして、モーションスムージングされた再投影フレームは、変更された第3のピクセルデータに少なくとも部分的に基づいてディスプレイにレンダリングされ、アプリケーションがフレームレートに達していない場合であっても、オブジェクトがシーン内で期待通りに移動またはアニメーション化される、よりリアルな表示エクスペリエンスを提供することができる。したがって、GPUから受信した動きベクトルの配列は、第1のピクセルデータおよび第2のピクセルデータをフレームバッファに出力した後、変更された第3のピクセルデータがフレームバッファに出力されるため、将来のフレーム(再投影フレーム)に外挿推定するために使用される。このようにして、第1のフレームは、第2のフレームの前にレンダリングされ、第2のフレームは、再投影フレームの前にレンダリングされる。この外挿技術は、フレーム間の補間と対比されることができ、本明細書に記載される技術およびシステムは、フレーム間を補間するために動きベクトルを使用するのではなく、GPUから受信した動きベクトルを使用して将来のフレームに外挿することに関係することを理解されたい。
【0027】
本明細書には、例えば、ディスプレイシステム(例えば、HMD)を含むシステムなど、本明細書に開示される技術およびプロセスを実装するように構成されたシステム、ならびに本明細書に開示される技術およびプロセスを実装するためのコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体が開示される。本明細書に開示される技術およびシステムは、例として、ビデオゲームアプリケーション、特にVRゲームアプリケーションの文脈で議論されているが、本明細書に記載される技術およびシステムは、非限定的に、非VRアプリケーション(例えば、ARアプリケーション)、および/または産業機械アプリケーション、防衛アプリケーション、ロボットアプリケーションなどの非ゲームアプリケーションを含む、他のアプリケーションに利益を提供することができることを理解されたい。
【0028】
図1は、ヘッドマウントディスプレイ(HMD)100などのディスプレイ上にフレームをレンダリングするために再投影が使用されているときに、シーン内のオブジェクトの移動またはアニメーション化を説明するための例示的なモーションスムージング技術を示す図である。HMD100は、開示されたモーションスムージング技術を実装することができる例示的な「ディスプレイシステム」として本明細書に提示されるが、「ディスプレイシステム」の他のタイプおよび/または実装は、本明細書に記載のモーションスムージング技術を実装することができることを理解されたい。したがって、本明細書における「HMD」への任意の言及は、HMDが本明細書に記載された技術を実装するための単なる例示的なタイプのディスプレイであることが理解されるべきであるが、「ディスプレイ」または「ディスプレイシステム」という用語によって置き換えることができることを理解されたい。
【0029】
図1の例のHMD100は、ステレオペアのディスプレイパネルの左ディスプレイパネルおよび右ディスプレイパネルなどの、複数のディスプレイパネルを含むことができる。これらのディスプレイパネルは、HMD100を着用しているユーザ102によって視認可能である一連の画像フレーム(以下、「フレーム」と呼ぶ)を提示するために使用されることができる。例は、2パネルHMD100を用いて説明されているが、HMD100は、単一のディスプレイパネルまたは3つ以上のディスプレイパネルを含むことができることを理解されたい。したがって、「ディスプレイパネル」という用語は、本明細書に使用される際、2パネルHMD100の一対のディスプレイパネルのいずれかのディスプレイパネルを指すことができるか、または任意の数のディスプレイパネル(例えば、単一パネルHMD100またはマルチパネルHMD100)を有するHMD100の単一のディスプレイパネルを指すことができる。2パネルHMD100では、ステレオフレームバッファは、例えば、HMD100の双方のディスプレイパネル上で2160×1200ピクセル(例えば、ディスプレイパネルあたり1080×1200ピクセル)をレンダリングすることができる。
【0030】
HMD100は、HMD100のディスプレイパネル(複数可)上でのフレームの提示中に発光要素を利用して光を放出する発光ディスプレイなど、任意の好適なタイプのディスプレイ技術を利用するディスプレイパネルを含むことができる。一例として、HMD100のディスプレイパネルは、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、無機発光ダイオード(ILED)ディスプレイ、またはHMDアプリケーションに対して好適なディスプレイ技術を利用する任意の他の好適なタイプのディスプレイを含むことができる。
【0031】
HMD100は、VRゲームシステムで使用するためなど、VRシステムで使用するためのVRヘッドセットを表すことができる。しかしながら、HMD100は、追加的に、または代替的に、ARアプリケーションで使用するためのARヘッドセットとして実装されることができる。ARでは、ユーザ102は、実世界環境上に重ね合わされた仮想オブジェクトを見るが、VRでは、ユーザ102は、実世界環境を見ることはなく、HMD100のディスプレイパネルおよび光学系(例えば、レンズ)を介して知覚されるような仮想環境に完全に没入する。本明細書に記載される例は、主にVRベースのHMD100に関係するが、HMD100は、VRアプリケーションでの実装に限定されないことを理解されたい。
【0032】
一般に、-HMD100自体、またはHMD100に関連付けられ、かつ結合されたコンピューティングデバイス(例えば、パーソナルコンピュータ(PC)、ゲームコンソールなど)などの-コンピューティングデバイス上で実行されるアプリケーションは、HMD100のディスプレイパネル(複数可)上に最終的にレンダリングされる一連のフレーム104を出力するように構成されることができる。いくつかの実施形態では、フレーム104がHMD100のディスプレイパネル上にレンダリングされる前に標的にレンダリングされることができるように、オフスクリーンレンダリングが利用される。したがって、「レンダリング」は、本明細書に使用される際、ディスプレイ以外の標的への、ディスプレイ自体におけるレンダリングの前のレンダリング、および/またはディスプレイ上でのレンダリング(例えば、異なる標的へのオフスクリーンレンダリングなしの、またはその後の)を含むことができる。
【0033】
図1の例は、一連のフレーム104として順番にレンダリングされる3つの例示的なフレーム104(1)、104(2)、および104(3)を示している。
図1の例では、オブジェクト106は、フレーム104(1)~104(3)の過程で、シーンを左方向に(すなわち、右から左に)移動していることが示されている。フレーム104(2)および104(3)内のオブジェクト106の破線の輪郭は、オブジェクト106が以前にレンダリングされたフレーム104内に配置された場所を表す。ここでは、フレーム104(1)が最初にレンダリングされ、次にフレーム104(2)が2番目にレンダリングされ、次にフレーム104(3)が3番目にレンダリングされる。
【0034】
一連のフレーム104内のフレーム104の少なくともいくつかは、ビデオゲームアプリケーションなどのアプリケーション、または任意の他のタイプのグラフィックスベースのアプリケーションから出力されるという意味で、「実際の」フレームとすることができる。アプリケーションは、個々のフレーム104をレンダリングするためにピクセルデータ108をフレームバッファに出力するグラフィックスパイプラインで実行されることができる。ピクセルデータ108は、いくつかの実施形態では、ピクセルごとの値(例えば、色値)の2次元配列を含むことができる。いくつかの実施形態では、ピクセルデータ108は、さらに、深度値、輝度値などの追加のデータまたはメタデータを含む。いくつかの実施形態では、ピクセルデータ108は、単一の色およびアルファ値のセット(例えば、赤チャネルの1つの色値、緑チャネルの1つの色値、青チャネルの1つの色値、および1つ以上のアルファチャネルの1つ以上の値)によって表される各ピクセルのデータを含むことができる。このピクセルデータ108は、フレームバッファに出力されて、HMD100のディスプレイパネル(複数可)上の画像に所望の視覚効果を提示することができる。
【0035】
実行時に、HMD100の頭部追跡モジュールは、ユーザ102の頭部位置/姿勢に応じて、一連のフレーム104内の次のフレーム104をどのようにレンダリングするかについてアプリケーションに通知するためにアプリケーションに提供されるHMD100の位置および姿勢に関するデータを生成することができる。これは、オブジェクト(移動オブジェクト106などの、静的および移動オブジェクトの双方)を含む仮想環境を見回しているとユーザ104に信じさせるやり方で、アプリケーションがHMD100上で画像をレンダリングするためにピクセルデータ108を出力することを可能にする。アプリケーションがフレームレートに達している場合、静的および移動オブジェクトの双方が、ユーザ102の頭部の動きとともに、予想される様式で、シーン内で移動するように知覚される。本明細書に記載されるモーションスムージング技術は、移動オブジェクトに関して同様の視覚が達成されるように、フレームレートに達しないアプリケーションを補償する方法である。
【0036】
図1の例では、第1のフレーム104(1)は、アプリケーションから受信される第1の「実際の」フレームを表すことができ、第2のフレーム104(2)は、アプリケーションから受信されかつ第1のフレーム104(1)の後にレンダリングされる第2の「実際の」フレームを表すことができ、第3のフレーム104(3)は、第2のフレーム104(2)に関連するピクセルデータ108(2)から生成される再投影フレームを表すことができる。したがって、
図1の「第3のフレーム104(3)」は、本明細書では「再投影フレーム104(3)」と呼ばれることもある。HMD100は、一連のフレーム104を処理することができ、第1のフレーム104(1)および第2のフレーム104(2)をレンダリングした後、HMD100のロジックは、グラフィックスプロセッシングユニット(GPU)110(例えば、HMD100のGPU110)への入力として、第1のフレーム104(1)に関連する第1のピクセルデータ108(1)、および第2のフレーム104(2)に関連する第2のピクセルデータ108(2)を提供するように構成されることができる。
【0037】
GPU110のビデオ符号化器(例えば、ビデオ符号化チップ)は、GPU110に入力された第1のピクセルデータ108(1)および第2のピクセルデータ108(2)に基づいて動きベクトル112の配列を生成することができる。動きベクトル112の配列を生成するために、GPU110のビデオ符号化器は、入力として提供された各フレーム104のピクセルデータ108間のピクセルごとの値(例えば、輝度値)を比較することができる。追加的に、または代替的に、GPU110のビデオ符号化器は、入力として提供された各フレーム104のピクセルデータ108の間のマクロブロック(例えば、16ピクセルのブロック(すなわち、4×4ピクセルのマクロブロック)、64ピクセルのブロック(すなわち、8×8ピクセルのマクロブロック))を比較することができる。このようにして、GPU110は、任意の適切な解像度で、フレーム104の対の間でピクセルデータ108の一部を比較することができる。いくつかの実施形態では、入力ピクセルデータ108(1)および108(2)は、ダウンサンプリングされたフレームをGPU110に入力するために、より低い解像度にダウンサンプリングされる。
【0038】
GPU110から出力される動きベクトル112の配列は、本明細書では「動きベクトル場112」と呼ばれることがある。この動きベクトル場112はまた、任意の適切な解像度で出力されることができるか、および/または任意の適切な解像度にダウンサンプリング/アップサンプリングされることができる。例えば、動きベクトル112の配列は、ピクセルごとに単一の動きベクトル112、ピクセルのグループごとに単一の動きベクトル112(例えば、4×4マクロブロック、8×8マクロブロック、ピクセルの任意の成形パッチなどについての1つの動きベクトル112)、または所与のフレーム104の全てのピクセルに対する単一の動きベクトル112でさえも含むことができる。一般に、動きベクトル112は、方向のXおよびY成分、および大きさ(通常、2D矢印の長さによって表される)を有する2次元(2D)矢印である。動きベクトル112の大きさは、XおよびY成分方向の双方のピクセル数など、任意の適切な測定単位で指定されることができる。
【0039】
GPU110のビデオ符号化器による入力ピクセルデータ108の比較に基づいて、第2のフレーム104(2)の一部が第1のフレーム104(1)の一部(例えば、その閾値輝度値内で)に類似している場合、および各フレーム104内の同様の部分が所定距離(例えば、XおよびY成分方向のピクセル数)だけオフセットされる場合、これは、動きベクトル112の配列に含まれる動きベクトル112によって表されることができる。フレーム104(1)および104(2)内のオブジェクト106に対応するピクセル値が、GPU110のビデオ符号化器によって類似(例えば、ピクセルデータ108のピクセル値に基づくいくつかの類似性メトリックを満たす部分の一致)であると判定される例を考える。このオブジェクト106の動きベクトル112は、オブジェクト106の動きと同じ方向を指す方向を有することができ、または動きベクトル112は、オブジェクト106の動きの方向とは反対の方向を指すことができる。換言すれば、動きベクトル112は、後続のフレーム104(2)内のオブジェクト106の位置からオフセットされた、前のフレーム104(1)内のオブジェクト106の位置を参照する方向を指すことができる。したがって、動きベクトル112は、第2のフレーム104(2)の座標から第1のフレーム104(1)の座標へのオフセットを提供する。オフセットは、オブジェクト106などの移動またはアニメーション化するオブジェクトに関して、第1のフレーム104(1)の画像から第2のフレーム104(2)の画像への変換を記述する。
【0040】
前述のように、
図1の第3のフレーム104(3)は、再投影フレームを表すことができ、これは、第3のフレーム104(3)のピクセルデータ108(3)が、以前にレンダリングされた実際のフレーム(この場合、第2のフレーム104(2))に関連するピクセルデータ108(2)から導出されることができることを意味する。換言すれば、再投影フレーム104(3)のピクセルデータ108(3)は、アプリケーション(例えば、ビデオゲームアプリケーション)から受信されるのではなく、アプリケーションによって生成されたフレームのピクセルデータ108から生成され、また、アプリケーションがフレームレートに達していないときに、欠落しているフレームのギャップを「埋める」ために使用される。この場合、再投影フレーム104(3)のピクセルデータ108(3)は、
図1の例では、第2のフレーム104(2)が再投影フレーム104(3)の前に最も直近にレンダリングされたフレーム104であるため、第2のフレーム104(2)に関連するピクセルデータ108(2)から生成される。いくつかの実施形態では、回転および再投影変換が計算され、再投影フレームについての第3のピクセルデータ108(3)を生成するために、第2のフレーム104(2)に関連する第2のピクセルデータ108(2)を変更するために使用されることができ、これは、第2のフレーム104(2)がレンダリングされてからHMD100の回転を説明するような方法で、第2のフレーム104(2)でレンダリングされたシーンを効果的に回転、変換、および/または移動する。例えば、ユーザ102は、この頭部の動きに合わせてシーンが提示されるように、再投影フレーム104(3)の第3のピクセルデータ108(3)の生成において説明される第2のフレーム104(2)がレンダリングされるときから自身の頭部を回転させることができる。
【0041】
そして、
図1のモーションスムージング技術は、動きベクトル112の配列に少なくとも部分的に基づいて第3のピクセルデータ108(3)を変更して、再投影フレーム104(3)の変更された第3のピクセルデータ108(3)’を取得する。いくつかの実施形態では、変更された第3のピクセルデータ108(3)’への第3のピクセルデータ108(3)のこの変更は、第3のピクセルデータ108(3)のピクセル値を、特定のピクセルまたはピクセルのグループに対応する非ゼロ動きベクトル112に基づいて異なる位置に移動することを含む。移動は、方向および量によって行うことができる(例えば、水平(+/-)および垂直(+/-)方向に複数のピクセルを移動する)。次に、再投影フレーム104(3)は、変更された第3のピクセルデータ108(3)’に少なくとも部分的に基づいて、ディスプレイ上に(例えば、HMD100のディスプレイパネル上に)レンダリングされる。したがって、動きベクトル112(以前にレンダリングされた実際のフレーム104(1)および104(2)のピクセルデータ108から生成された動きベクトル112)に基づいて変更された、再投影フレーム104(3)は、オブジェクト106を予想される位置にレンダリングするために「モーションスムージング」される。
【0042】
図2は、例示的なレンダリングメッシュ200と、再投影フレームのモーションスムージングにおいてレンダリングメッシュ200がどのように使用されることができるかを示す図である。例えば、GPU110によって出力された動きベクトル112の配列に基づいて、レンダリングメッシュ200を使用して、
図1の再投影フレーム104(3)の第3のピクセルデータ108(3)を変更することができる。この例では、HMD100のロジックは、レンダリングメッシュ200を生成することができ、レンダリングメッシュ200の頂点202は、動きベクトル112の配列にしたがって移動することができる。例えば、頂点202は、非ゼロの動きベクトル112の方向に、そして非ゼロの動きベクトル112の大きさに対応する量だけ移動されることができる。例えば、
図1に示される左方向に移動するオブジェクト106を例として取り上げると、動きベクトル112は、レンダリングメッシュ200の文脈で適用されて、頂点202を左(または負のX)方向に特定の数のピクセル(動きベクトル112の大きさに対応する)だけ移動させることができる。
【0043】
レンダリングメッシュ200は、複数の頂点202(1)、202(2)、・・・、202(N)(まとめて202)を有するテッセレーションメッシュとして示されている。レンダリングメッシュ200のテッセレーションは、任意の適切な幾何学的パターンとすることができる。
図2の例示的なレンダリングメッシュ200は、三角形204の繰り返しパターンとして示されているが、正方形(「四角形」と呼ばれることもある)、六角形(例えば、ハニカムパターン)などを含むがこれらに限定されない任意の適切な幾何学的形状がレンダリングメッシュ200に使用されることができる。この例では、正方形(または四角形)の左下隅から正方形(または四角形)の右上隅までの対角線を使用して、特定の方向を有する繰り返し三角形204のレンダリングメッシュ200を作成する。
図2に示される向きの代わりに、正方形(または四角形)の左上隅から正方形(または四角形)の右下隅までの対角線を使用して、正方形(または四角形)を三角形204に分割することによって、レンダリングメッシュ200の異なる向きを作成することができる。いくつかの実施形態では、これらの異なる向きの混合はまた、正方形(または四角形)の左下隅から正方形(または四角形)の右上隅までの対角線を使用して1つおきの正方形を分割し、正方形(または四角形)の左上隅から正方形(または四角形)の右下隅までの対角線を使用して、その間の正方形を分割することなどによって、単一のレンダリングメッシュ200に使用されることもできる。いくつかの実施形態では、HMD100のロジックは、GPU110から受信した動きベクトル場112に基づいて、これらの複数の向きのうちのどの向きをレンダリングメッシュ200の生成に使用するかを動的に判定するように構成されることができる。これは、レンダリングメッシュ200内の幾何学的形状(例えば、三角形204)に最適な向きを選択するために行われることができ、これは、最も滑らかに見え、モーションスムージングされた画像をもたらす。
【0044】
レンダリングメッシュ200はまた、任意の適切な解像度で生成されることができる。例えば、最高解像度のレンダリングメッシュ200は、ピクセルごとに2つの隣接する三角形204とすることができ、ここで、各正方形(または四角形)は、単一のピクセルにマッピングされる。より低い解像度は、16ピクセルのグループなど、ピクセルのグループごとに2つの隣接する三角形204とすることができる。あるいは、ピクセルは、任意の適切な解像度でレンダリングメッシュ200の頂点202にマッピングされることができる。例えば、各頂点202は、最高の解像度で単一のピクセルに関連付けられることができるか、または各頂点202は、より低い解像度で16ピクセルのグループなどのピクセルのグループに関連付けられることができる。いくつかの実施形態では、レンダリングメッシュ200の解像度は、動きベクトル112の配列内の単一の動きベクトル112が頂点202または正方形(または四角形)(例えば、2つの隣接する三角形204)にマッピングするように、動きベクトル112の配列の解像度と同じ解像度である。レンダリングメッシュ200と動きベクトル112の配列との間の一致する解像度を達成することは、GPU110から、レンダリングメッシュ200の解像度と一致する特定の解像度で動きベクトル112の配列を要求すること、動きベクトル112の配列をダウンサンプリングまたはアップサンプリングして、レンダリングメッシュ200と解像度を一致させること、またはGPU110によって出力される動きベクトル112の配列の解像度に一致する解像度でレンダリングメッシュ200を生成することなどによって、様々な方法で達成されることができる。
【0045】
図2は、4つの非ゼロ動きベクトル112(1)、112(2)、112(3)、および112(4)が、レンダリングメッシュ200の4つの頂点202に対応する例を示している。これらの4つの動きベクトル112(1)~(4)は、
図1に示される移動オブジェクト106に基づいてGPU110が検出した動きベクトル112に対応することができる。したがって、例示的な動きベクトル112(1)~(4)は、オブジェクト106の方向性運動に対応する左方向を指すことができるが、前述のように、方向性は、オブジェクト106の方向性運動の方向性と反対(例えば、右方向)とすることができる。動きベクトル112の方向性は、モーションスムージングアルゴリズムにおいて考慮されて、ピクセルデータ108を所望の方向に変更することができる。動きベクトル112の場が4つの例示的な動きベクトル112(1)~(4)を含み、動きベクトル112の配列内の残りの動きベクトル112の全てがゼロベクトルである基本的な例を考える。この例では、再投影フレーム104(3)のピクセルデータ108(3)は、移動された頂点206(1)、206(2)、206(3)、および206(4)としてレンダリングメッシュ200内の異なる位置(
図2の下部に示されている)に非ゼロの動きベクトル112(1)~(4)に対応する頂点202を移動することによって、非ゼロの動きベクトル112(1)~(4)に基づいて変更されることができる。
図2の下部は、モーションスムージングが適用された後のレンダリングメッシュ200を示しており、移動された頂点206(1)~(4)は、モーションスムージング前の頂点202の位置と比較して、レンダリングメッシュ200内の異なる位置にある。動きベクトル112がこのように適用されると、移動された頂点206(1)~(4)は、レンダリングメッシュ200内の幾何学的形状(例えば、三角形204)の特定の部分を引き伸ばすまたは歪めることなどにより、レンダリングメッシュ200の1つ以上の部分を歪ませる。
図2の例では、
図2の下部に示されるように、三角形204のいくつかは、モーションスムージングの結果として引き伸ばされて、引き伸ばされた三角形208を作成する。移動された頂点206(1)~(4)に対応する(再投影フレーム104(3)のピクセルデータ108(3)の)ピクセル値は、レンダリングメッシュ200内で移動された頂点206(1)~(4)の位置に対応する異なるピクセル位置にレンダリングされる。移動された頂点206(1)~(4)と移動されていない頂点202との間のピクセル位置は、(例えば、移動された頂点206(1)~(4)と移動されていない頂点202との間のピクセル値を補間することによってなど、勾配を適用することによって)混合されることができる。いくつかの実施形態では、深度バッファを利用して、再投影フレーム104(3)の変更されたピクセルデータ108(3)’のフレームバッファに出力されるピクセル値の最終セットを判定することができる。すなわち、動きベクトル112をレンダリングメッシュ200に適用した結果として、移動された頂点206(1)~(4)に対応する画像内の位置に複数のピクセル値が存在することができる。この場合、「より遠い」(より大きな)深度値に関連付けられているその位置に別のピクセル値をレンダリングする代わりに、「より近い」(より小さな)深度値に関連付けられているピクセル値をレンダリングすることができる。
【0046】
本明細書に記載のプロセスは、ロジックフローグラフ内のブロックの集合として示され、これは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせ(すなわち、ロジック)に実装されることができる一連の動作を表す。ソフトウェアの文脈において、ブロックは、1つ以上のプロセッサによって実行されると、記載された動作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。動作が記載される順序は、限定として解釈されることを意図するものではなく、記載される任意の数のブロックは、プロセスを実装するために任意の順序で、および/または並列に組み合わせることができる。
【0047】
図3は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部としてGPUによって生成された動きベクトルを使用して再投影フレームを生成するための例示的なプロセス300のフロー図である。考察目的で、プロセス300が前の図を参照して記載される。
【0048】
302において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。例えば、2つの最近レンダリングされたフレーム104に関連するピクセルデータ108は、GPU110(例えば、HMD100のGPU110)への入力として提供されることができる。これらのフレーム104は、過去にレンダリングされた第1のフレーム104(1)、および第1のフレーム104(1)の後に過去にレンダリングされた第2のフレーム104(2)などのアプリケーション(例えば、ビデオゲームアプリケーション)から受信した実際のフレームとすることができる。したがって、第2のフレーム104(2)は、アプリケーションから受信された最後にレンダリングされたフレームを表すことができ、ブロック302において入力として提供されるピクセルデータ108は、連続してレンダリングされたフレームのピクセルデータ108である必要はないが、第1のフレーム104(1)および第2のフレーム104(2)は、一連のフレーム104において連続してレンダリングされることができる。例えば、中間フレーム104は、第1のフレーム104(1)と第2のフレーム104(2)との間にレンダリングされることができ、ブロック302において入力として提供されるピクセルデータ108は、第1のフレーム104(1)および第2のフレーム104(2)に関係することができる。
【0049】
304において、動きベクトル112の配列がGPU110から受信されることができる。ブロック304において受信された動きベクトル112の配列は、第1のフレーム104(1)に関連する第1のピクセルデータ108(1)および第2のフレーム104(2)に関連する第2のピクセルデータ108(2)に少なくとも部分的に基づいて(例えば、第1のピクセルデータ108(1)と第2のピクセルデータ108(2)との間の比較に基づいて)、GPU110のビデオ符号化器によって生成されることができる。GPU110のビデオ符号化器は、比較されたピクセル値間の差が閾値の差よりも小さいかどうかを判定することなどによって、ピクセル値(またはピクセル値のグループ)間の類似性を探す適切なコンピュータビジョンおよび/またはビデオ符号化アルゴリズムを使用するように構成されることができる。そのような類似性メトリック内の全ては、2つのフレーム104の間でピクセルデータ108に一致すると見なされることができる。
【0050】
306において、ロジックは、第2のフレーム104(2)の第2のピクセルデータ108(2)に少なくとも部分的に基づいて、再投影フレーム104(3)の第3のピクセルデータ108(3)を生成することができる。この場合、第2のフレーム104(2)は、再投影フレーム104(3)の直前にレンダリングされたフレーム104を表す。
【0051】
308において、ロジックは、動きベクトル112の配列に少なくとも部分的に基づいて第3のピクセルデータ108(3)を変更して、再投影フレーム104(3)の変更された第3のピクセルデータ108(3)’を取得することができる。サブブロック310および312によって示されるように、再投影フレーム104(3)のピクセルデータ108(3)の変更は、レンダリングメッシュ200を利用することができる。
【0052】
したがって、310において、ロジックは、再投影フレーム104(3)のレンダリングメッシュ200を生成することができる。レンダリングメッシュ200は、複数の頂点202を有するテッセレーションメッシュを含むことができる。いくつかの実施形態では、レンダリングメッシュ200の解像度は、動きベクトル112とレンダリングメッシュ200の「要素」(例えば、レンダリングメッシュ200の頂点202、レンダリングメッシュ200の正方形(または四角形)などの要素)との間に1対1の対応が存在するように、動きベクトル112の配列の解像度と一致することができる。動きベクトル場112とレンダリングメッシュ200との間の一致する解像度を取得することは、GPU110が特定の解像度で動きベクトル場112を出力することを要求する、動きベクトル場112の解像度をダウンサンプリングまたはアップサンプリングする、および/またはGPU110によって出力された動きベクトル場112の解像度と一致する解像度でレンダリングメッシュ200を生成するなど、本明細書に記載の技術のいずれかを含むことができる。
【0053】
312において、ロジックは、レンダリングメッシュ200の(複数の頂点202のうちの)頂点202を、移動された頂点206としてレンダリングメッシュ200内の異なる位置に移動させることができる。頂点202は、(i)非ゼロの動きベクトル112の方向に、および(ii)非ゼロの動きベクトル112の大きさに対応する量だけ移動されることができる。したがって、ブロック308における第3のピクセルデータ108(3)の変更は、例えば、再投影フレーム104(3)の変更された第3のピクセルデータ108(3)’を取得するために移動された頂点206にしたがって第3のピクセルデータ108(3)のピクセル値を移動することなどによって、レンダリングメッシュ200の移動された頂点206にしたがうことができる。例えば、第3のピクセルデータ108(3)のピクセル値は、レンダリングメッシュ200内の移動された頂点206にしたがって、変更された第3のピクセルデータ108(3)内の新たな位置に対して4ピクセル左に、そして4ピクセル上に移動されることができる。
【0054】
いくつかの実施形態では、ブロック302において入力された以前にレンダリングされたフレーム104の異なるセットに基づいてブロック304において複数の動きベクトル場112を受信することができ、再投影フレームについてのブロック308におけるモーションスムージングにおいて使用するための複数の動きベクトル場112に基づいて、追加の動き関連パラメータを判定することができる。例えば、ブロック304において受信された動きベクトル112の配列をもたらす前の2つのフレーム104(1)および104(2)に加えて、
図3のアルゴリズムは、いくつかの実施形態では、入力として第1のフレーム104(1)および第1のフレーム104(1)の前にレンダリングされた「ゼロ番目の」フレーム104(0)をGPU110に提供し、その異なるペアの入力フレーム104に基づいて動きベクトル112の追加の配列を受信することなどによって、1つ以上の追加のフレームに戻ることができる。次に、動きベクトルの複数の配列を比較して、フレーム間を移動しているオブジェクトの加速度などの動き関連パラメータを判定することができ、これらの動き関連パラメータは、モーションスムージング調整に関してピクセル値を多かれ少なかれ移動させるように、第3のピクセルデータ108(3)に適用される最終的な動きベクトル112の大きさを変更(例えば、増加/減少)することなどによってブロック308において適用されることができる。
【0055】
314において、ロジックは、変更された第3のピクセルデータ108(3)’に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD100のディスプレイパネル上)に再投影フレーム104(3)をレンダリングすることができる。ブロック314においてレンダリングされる結果として生じる再投影フレーム104(3)は、GPU110から受信された動きベクトル112にしたがって第3のピクセルデータ108(3)の変更によって「モーションスムージング」される。GPU110は、1つ以上のGPU110を表すことができることを理解されたい。例えば、複数のGPU110を利用して、HMD100のステレオディスプレイパネル上に所与のフレーム104をレンダリングすることができ、これらのGPU110に入力されるフレーム104のピクセルデータ108は、それに応じて分割されることができる(例えば、ピクセルデータ108の左半分は、第1のGPU110への入力として提供されることができ、ピクセルデータ108の右半分は、第2のGPU110への入力として提供されることができる)。
【0056】
図4は、本明細書に開示される実施形態にかかる、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームのピクセルデータを位置合わせするための例示的なプロセス400のフロー図である。考察目的で、プロセス400は、前の図を参照して記載される。さらにまた、
図3および
図4のオフページ参照「A」によって示されるように、プロセス400は、
図3のブロック304における動作の前に実行される動作を表すことができ、プロセス400は、いくつかの実施形態では、ブロック304~314の動作を継続することができる。
【0057】
402において、HMD100のロジックは、HMD100の頭部追跡モジュールによって提供される回転データに基づいて、HMD100が、ピクセルデータ108がGPU110に入力として提供される以前にレンダリングされたフレーム104をレンダリングする間に、第1の方向から第2の方向に回転したことを判定する。これは、
図1の例に示されており、ユーザ102は、時間t1と時間t2との間で頭部を右方向に回転させたものとして示され、これは、第1のフレーム104(1)および第2のフレーム104(2)をレンダリングする時間に対応することを意味する。連続するフレーム104の間の
図1に示される回転量は、説明のために誇張されている。
【0058】
404において、以前にレンダリングされたフレーム104は、それらのフレーム104のピクセルデータ108がGPU110への入力として提供される前に位置合わせされることができる。これは、フレーム104間のHMD100の移動のために行われ、これにより、オブジェクト(静止オブジェクトおよび移動オブジェクトの双方)が2つのフレーム104(1)および104(2)をレンダリングする過程で位置間を移動した可能性がある。1つのフレーム104(1)を他のフレーム104(2)と位置合わせすることにより、またはその逆により、シーン内の特定の静的オブジェクトを表すピクセルデータ108は、一般に、静的オブジェクトに対応するピクセルデータ108が、GPU110のビデオ符号化器によって移動オブジェクトと間違えられないように、2つのフレーム104(1)および104(2)の間のほぼ同じ位置に移動されることができる。ブロック404における位置合わせは、以下のうちの少なくとも1つを変更することを含むことができる:(i)第2のフレーム104(2)をレンダリングするときにHMD100の第2の向きを有する第1のフレーム104(1)内のシーンを位置合わせする変更された第1のピクセルデータ408(1)を取得するための第1のピクセルデータ108(1)(第1のフレーム104(1)に関連する)、または(ii)第1のフレーム104(1)をレンダリングするときに第2のフレーム104(2)内のシーンをHMD100の第1の向きに位置合わせする変更された第2のピクセルデータを取得するための第2のピクセルデータ108(2)(第2のフレーム104(2)に関連する)。
図4の下部の図は、前者の場合を示している-第1のピクセルデータ108(1)が変更されて、第1のフレーム104(1)内のシーンをHMD100の第2の向きに位置合わせする変更された第1のピクセルデータ408(1)を取得する。しかしながら、第1のピクセルデータ108(1)または第2のピクセルデータ108(2)のいずれかが、位置合わせの目的で変更されることができることが理解されるべきである。
【0059】
406において、ロジックは、GPU110への入力として、以前にレンダリングされたフレーム104の1つの変更されたピクセルデータおよび他のフレーム104の元のピクセルデータ108を提供することができる。
図4の図に示される例は、GPU110への入力として、変更された第1のピクセルデータ408(1)および元の第2のピクセルデータ108(2)を提供することを示している。前述のように、プロセス400は、ブロック406からプロセス300のブロック304まで継続することができる(オフページ参照「A」によって示されるように)。したがって、動きベクトル112の配列は、ブロック406においてGPU110への入力として提供されたピクセルデータに基づいて、ブロック304においてGPU110から受信されることができ、
図3のモーションスムージングアルゴリズムの残りの動作は、モーションスムージングされた再投影フレーム104(3)をレンダリングするために実行されることができる。
【0060】
図5は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームのいくつかのピクセルデータを除外し、ピクセルデータの残りの部分を動きベクトル推定のためのGPUへの入力として提供するための例示的なプロセス500のフロー図である。考察目的で、プロセス500は、前の図を参照して記載される。さらにまた、
図3および
図5のオフページ参照「A」によって示されるように、プロセス500は、
図3のブロック304における動作の前に実行される動作を表すことができ、プロセス500は、いくつかの実施形態では、ブロック304~314の動作を継続することができる。
【0061】
502において、HMD100のロジックは、HMD100の頭部追跡モジュールによって提供される回転データに基づいて、HMD100が、GPU110に入力として提供される以前にレンダリングされたフレーム104をレンダリングする間に、第1の方向から第2の方向に回転したことを判定する。以前にレンダリングされたフレーム104は、
図1に示される第1のフレーム104(1)および第2のフレーム104(2)とすることができる。
【0062】
504において、ロジックは、利用可能なピクセルデータ108の一部をGPU110への入力として提供することができる。GPU110への入力として提供される利用可能なピクセルデータ108の部分は、例えば、それぞれがHMD100のディスプレイパネルの1つ以上のエッジにあるピクセルのサブセット以外のピクセルに対応する第1のピクセルデータ108(1)の部分506(1)および第2のピクセルデータ108(2)の部分506(2)を含むことができる。例えば、
図5に示されるように、GPU110への入力として提供されるピクセルデータ108の部分506は、ディスプレイパネル(
図5に黒で示される)の左端および右端にあるピクセルデータ108の残りの部分を除外する。換言すれば、ディスプレイパネルの左端および右端のピクセルデータ108は、GPU110に提供されないため、GPU110は、その動き推定努力を、ディスプレイパネルの左端と右端との間のピクセルデータ108の中央部分506に集中させる。正および/または負の垂直方向のHMD100回転の場合、ピクセルデータ108の除外された部分は、画像の上端および下端とすることができる。いずれにせよ、画像の端部でピクセルデータ108の一部を除外し、ピクセルデータ108の残りの部分506をGPU110に排他的に提供することは、事実上、画像の端部においてゼロ動きベクトル112をもたらし、これは、それがなければ移動オブジェクト106の特徴ではない外れ値動きベクトル112をもたらす可能性がある望ましくない視覚的アーティファクトが画像の端部の近くに現れる状況において有用とすることができる。前述のように、プロセス500は、ブロック504からプロセス300のブロック304まで継続することができ、ブロック504においてGPU110への入力として提供されるピクセルデータに基づいて、動きベクトル112の配列がGPU110から受信され、
図3のモーションスムージングアルゴリズムは、モーションスムージングされた再投影フレーム104(3)をレンダリングするために実行されることができる。
【0063】
図6は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームのピクセルデータを位置合わせし、以前にレンダリングされたフレームのピクセルデータのパネルマスク部分を除外し、ピクセルデータの残りの部分を動きベクトル推定のためのGPUへの入力として提供するための例示的なプロセス600のフロー図である。考察目的で、プロセス600は、前の図を参照して記載される。さらにまた、
図3および
図6のオフページ参照「A」によって示されるように、プロセス600は、
図3のブロック304における動作の前に実行される動作を表すことができ、プロセス600は、いくつかの実施形態では、ブロック304~314の動作を継続することができる。
【0064】
602において、HMD100のロジックは、HMD100の頭部追跡モジュールによって提供される回転データに基づいて、HMD100が、GPU110に入力として提供される以前にレンダリングされたフレーム104をレンダリングする間に、第1の方向から第2の方向に回転したことを判定する。以前にレンダリングされたフレームは、
図1に示される第1のフレーム104(1)および第2のフレーム104(2)とすることができる。
【0065】
604において、ロジックは、第1のフレーム104(1)に関連する第1のピクセルデータ108(1)を変更して、第1のフレーム104(1)内のシーンをHMD100の第2の向きに位置合わせする変更された第1のピクセルデータ608(1)を取得することができる。
図6の例では、第1のピクセルデータ108(1)の一部は、各フレームによってHMD100のディスプレイパネルの周辺にレンダリングされたパネルマスク(黒で示される)に対応するデータを表す。したがって、変更された第1のピクセルデータ608(1)のパネルマスク部分614(1)(すなわち、
図6に黒で示されている部分)は、変更された第1のピクセルデータ608(1)のパネルマスクに対応するデータを表す。
【0066】
606において、ロジックは、第2のフレーム104(2)に関連する第2のピクセルデータ108(2)を変更して、第2のフレーム内のシーンをHMD100の第1の向きに位置合わせする変更された第2のピクセルデータ608(2)を取得することができる。この場合も、第2のピクセルデータ108(2)の一部は、各フレームによってHMD100のディスプレイパネルの周辺にレンダリングされたパネルマスク(黒で示されている)に対応するデータを表す。したがって、変更された第2のピクセルデータ608(2)のパネルマスク部分614(2)(すなわち、
図6に黒で示されている部分)は、変更された第2のピクセルデータ608(2)のパネルマスクに対応するデータを表す。
【0067】
610において、ロジックは、変更された第1のピクセルデータ608(1)のパネルマスク部分614(1)を変更された第2のピクセルデータ608(2)のパネルマスク部分614(2)と組み合わせて、パネルマスク616に対応する共通の値を有するピクセルのサブセットを判定することができる。これは、ある種のベン図と考えることができ、パネルマスク616に対応するピクセルのサブセットは、変更された第1のピクセルデータ608(1)および変更された第2のピクセルデータ608(2)における変更されたパネルマスクの結合バージョンである。
【0068】
612において、ロジックは、GPU110への入力として、それぞれがパネルマスク616に対応するピクセルのサブセット以外のピクセルに対応する第1のピクセルデータ108(1)の特定の部分(例えば、中央部分)および第2のピクセルデータ108(2)の特定の部分(例えば、中央部分)を提供することができる。これは、GPU110が、パネルマスク616のピクセルによってカバーされる以前にレンダリングされた各フレーム内のピクセルデータ108の部分の動き推定を無視することを可能にし、GPU110は、その動き推定の努力を中央の各フレーム104のピクセルデータ108の非パネルマスク部分に集中させることができる。前述のように、プロセス600は、ブロック612からプロセス300のブロック304まで継続することができ、ブロック612においてGPU110への入力として提供されるピクセルデータに基づいて、動きベクトル112の配列がGPU110から受信され、
図3のモーションスムージングアルゴリズムは、モーションスムージングされた再投影フレーム104(3)をレンダリングするために実行されることができる。
【0069】
図7は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを閾値化するための例示的なプロセス700のフロー図である。考察目的で、プロセス700が前の図を参照して記載される。
【0070】
702において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。ブロック702において実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0071】
704において、ロジックは、GPU110から動きベクトル112の配列を受信することができる。ブロック704において実行される動作は、プロセス300のブロック304に関して説明されたものと同様とすることができる。
【0072】
706において、ロジックは、動きベクトル112の配列内の個々の動きベクトルの大きさ(または長さ)を第1の閾値の大きさと比較して、第1の閾値の大きさよりも大きい大きさを有する動きベクトル112の第1のサブセットを判定することができる。第1の閾値の大きさは、仮想オブジェクト106の動きまたはアニメーション以外のものであるフレーム間の変化を表すことができる、大きな大きさの外れ値動きベクトル112のこのサブセットの影響を軽減するために利用されることができる。異常に大きな動きベクトルは、様々な理由で発生することができる。GPU110は、第2のフレーム104(2)の右上のピクセルが第1のフレーム104(1)の左下のピクセルと十分に類似していることを発見することができ、この動きベクトル112がフレーム104間の仮想オブジェクト106の動きまたはアニメーションを表さない場合であっても、結果として生じる動きベクトル112を、配列内の他の動きベクトル112と比較して比較的大きな大きさで出力することができる。場合によっては、ビデオゲームは、シーンがフレーム104間で劇的に変化する異なる位置にユーザがテレポートすることを可能にし、GPU110のビデオ符号化器によって大きな動きベクトル112を生成させることができる。これらの場合、および他の場合には、これらの大きな動きベクトル112を閾値化することが有用とすることができる。
【0073】
707において、複数の以前にレンダリングされたフレーム104が第1のフレーム104(1)および第2のフレーム104(2)を含む場合、ロジックは、第1のフレーム104(1)がレンダリングされた第1の時間と第2のフレーム104(2)がレンダリングされた第2の時間との間の期間(またはギャップ)を判定することができる。
【0074】
709において、ブロック706における比較において使用される第1の閾値の大きさは、第1の時間と第2の時間との間の期間に少なくとも部分的に基づいて選択されることができる。例示的な例では、単位時間あたりのユーザの視点からの移動度で測定される第1の閾値の大きさは、2つのフレーム104(1)と104(2)との間の11.1ミリ秒の時間あたり6度の移動である。したがって、2つのフレーム104(1)および104(2)が離れている時間が長いほど、第1の閾値の大きさが大きくなり、したがって、動きベクトル112がより長く(大きさで)許容される。これは、特定の速度を超えるモーションが発生すると、モーションスムージングが効果的でなくなり、(例えば、シーンの一部を「スイミー」に見せることによって)実際に視覚的なアーティファクトが発生する可能性があるためである。
【0075】
708において、ロジックは、大きさが第1の閾値の大きさで制限されるように、第1の閾値の大きさよりも大きい大きさを有すると判定された動きベクトル112の第1のサブセットの大きさを減少させることができる。これは、動きベクトル112の第1の変更された配列を作成する。換言すれば、第1の閾値の大きさを超える動きベクトル112について、ロジックは、動きベクトル112の第1の変更された配列が第1の閾値の大きさ以下の大きさを含みかつ第1の閾値の大きさよりも大きい大きさを含まないように、それらの動きベクトル112の大きさを第1の閾値の大きさに制限(または限定)するように構成される。いくつかの実施形態では、動きベクトル112の大きさを第1の閾値の大きさで制限し、モーションスムージングのために非ゼロの動きベクトルの全てを使用する代わりに、ロジックは、モーションスムージングにおいて全く使用されないように、第1の閾値の大きさと一致するまたはそれを超える大きさを有する動きベクトル112の第1のサブセットを破棄することができる。
【0076】
710において、ロジックは、動きベクトル112の配列内の個々の動きベクトルの大きさ(または長さ)を第2の閾値の大きさと比較して、第2の閾値の大きさよりも小さい大きさを有する動きベクトル112の第2のサブセットを判定することができる。第2の閾値の大きさは、低い大きさの外れ値動きベクトル112のこのサブセットの影響を軽減するために利用されることができ、これは、正確ではあるが、絶対的なゼロの動きの程度まで正確ではない、ユーザの一定の頭部の動きおよび/または頭部の追跡によって引き起こされることが多いフレーム間の変化を表すことができる。このため、GPU110の出力は、長さゼロの動きベクトル112を提供することはめったにない。むしろ、上記のように、周囲の頭部の動きおよび/または追跡ジッタのために、GPU110の出力がかなりの量のノイズを有することがより一般的である。換言すれば、2つの連続するフレーム間のピクセルが100%一致することはめったにない。例示的な例では、動きのピクセルで測定される第2の閾値の大きさは、動きの2ピクセルの閾値である。この例では、動きの大きさ(または長さ)が2ピクセル未満の動きベクトルは、低い大きさの外れ値ベクトルと見なされる。
【0077】
712において、ロジックは、第2の閾値の大きさよりも小さい大きさを有すると判定された動きベクトル112の第2のサブセットの大きさ(例えば、動きの2ピクセル未満の長さを有する低い大きさの外れ値動きベクトル)をゼロの長さ/大きさに減少させることができる。これは、第2の閾値の大きさよりも小さい大きさの動きベクトルを含まない動きベクトル112の第2の変更された配列を作成する。これは、本明細書では、動きベクトル112に小さな不感帯を適用することと呼ばれることがある。
【0078】
714において、ロジックは、第1の閾値の大きさで制限された大きさを有しかつ第2の閾値よりも小さい大きさの動きベクトル112がない動きベクトル112の第2の変更された配列に基づいて、再投影フレームのピクセルデータ108(3)を変更することができる。いくつかの実施形態では、例えば、動きベクトルの第1のサブセットが第1の閾値の大きさで制限される代わりに破棄される場合、動きベクトル112の破棄された第1のサブセット以外の動きベクトル112の残りのサブセットは、ブロック714において再投影フレームについてのピクセルデータ108(3)を変更するために使用される。ピクセルデータ108(3)の変更は、本明細書に記載された技術のいずれかを含むことができる(例えば、プロセス300のブロック308~312を参照して記載されたもの)。
【0079】
716において、ロジックは、再投影フレーム104(3)の変更されたピクセルデータ108(3)に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD100のディスプレイパネル上)に再投影フレーム104(3)をレンダリングすることができる。ブロック716において実行される動作は、プロセス300のブロック314に関して説明されたものと同様とすることができる。
【0080】
図8は、本明細書に開示される実施形態にかかる、モーションスムージング技術の一部として再投影フレームを生成するために使用される前に、GPUから出力される動きベクトルを減衰させるための例示的なプロセス800のフロー図である。考察目的で、プロセス800が前の図を参照して記載される。
【0081】
802において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。ブロック802において実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0082】
804において、ロジックは、GPU110から動きベクトル112の配列を受信することができる。ブロック804において実行される動作は、プロセス300のブロック304に関して説明されたものと同様とすることができる。
【0083】
806において、ロジックは、動きベクトル112の個々のものの大きさを減衰させる(例えば、短縮、減少など)目的で、動きベクトル112の配列上にオーバーレイされた減衰テクスチャを生成することができる(例えば、それらの動きベクトル112の品質に対する低い信頼がある場合)。減衰テクスチャは、減衰テクスチャが複数のテクセル(例えば、テクセルのグリッド)を含むように、任意の適切な解像度で生成されることができる。減衰テクスチャの解像度は、複数の動きベクトルが減衰テクスチャの個々のテクセル内にあるように、動きベクトル112の配列の解像度よりも低い解像度とすることができる。一例では、減衰テクスチャは、ユーザの視野(FOV)の中心のテクセルが約6度×6度(水平および垂直)であるような解像度を有することができる。テクセルあたりの度数が減衰テクスチャ全体で一定ではない可能性があるため、テクセルあたりの解像度(水平および垂直)は、概算とすることができる。例えば、HMD100のFOVは、面積がおよそ100度×100度(例えば、プラスマイナス約10度)に及ぶことができる。解像度が減衰テクスチャのテクセルごとに変化するが、解像度が約6~10度×6~10度のテクセルを提供するように、減衰テクスチャは、非線形投影行列に基づいて生成されることができる。さらにまた、減衰テクスチャの各テクセルには、減衰値を割り当てることができる(例えば、0.0から1.0の範囲内)。所与のテクセルに割り当てられた減衰値は、そのテクセル内の動きベクトル112の大きさが減少(短縮)される量を制御する。例えば、1.0の減衰値は、減衰なしに対応することができ、したがって、1.0の減衰値を動きベクトル112に適用することは、その大きさの観点から動きベクトル112がそのままである(例えば、減少しない、短縮されないなど)ことを意味する。しかしながら、0.0の減衰値は、完全な減衰に対応することができ、したがって、0.0の減衰値を動きベクトル112に適用することは、動きベクトル112がその大きさに関してゼロに減少することを意味する。0.0から1.0の間の減衰値は、部分的な減衰に対応することができ、したがって、例えば0.5の減衰値を動きベクトル112に適用することは、動きベクトルが元の長さ(大きさ)の50%(半分)に減少することを意味する。したがって、減衰テクスチャは、動きベクトル112の大きさを減少(短縮)することができるが、動きベクトル112の大きさを増加(延長)することはできない。
【0084】
図8は、2つの連続してレンダリングされたフレーム104の間の画面の下部の輝度(または色)の突然の変化に基づいてブロック808において生成されることができる例示的な減衰テクスチャ807を示している。例えば、ビデオゲームをプレイしている間、HMD100のユーザは、ハンドヘルドコントローラ上のボタンを選択することができ、これにより、次のレンダリングされたフレーム104の画面の下半分に大きな青いメッシュを出現させる。この例示的なシナリオでは、GPU110は、このフレーム104および以前にレンダリングされたフレーム104を入力として処理するときに、シーンの上部にレンダリングされた空のピクセルを、画面の下半分にある大きな青いメッシュのピクセルの輝度値に最も一致する輝度値で見つけることができる。これにより、GPU110は、シーンの下部に突然非常に大きさが大きく、シーン内の実際の動きを表さない動きベクトル112を有する動きベクトル場112を出力する。例示的な減衰テクスチャ807では、白色のテクセルは、1.0の減衰値を表すことができる一方で、黒色のテクセルは、0.0の減衰値を表すことができ、灰色のテクセルのテクセルは、0.0から1.0までの減衰値を表すことができる。
【0085】
808において、ロジックは、ブロック806において生成された減衰テクスチャを使用して、動きベクトル112の配列内の個々の動きベクトルの大きさを減少(例えば、スケールダウン)することができる(例えば、減衰テクスチャの減衰値を使用して減衰値に対応する量だけ動きベクトル112の大きさを減少させる)。これは、減衰テクスチャにおいて1.0未満の少なくとも1つの減衰値を仮定して、動きベクトル112の変更された配列を作成する。目的は、フレーム104間で閾値量を超えて変化した動きベクトル112を縮小することであり、これは、これらの動きベクトル112がシーン内の実際の動きを表さず、動きを表すと誤解されるべきではないことを示している可能性が最も高い。減衰テクスチャは、単一のフレーム内でそれらの領域の動きベクトルが(大きさの観点で)極端である画面の領域を見つけるために使用され、これは、動きベクトルが実際の動きを表すと信頼できないこと、またはそれらがシーン内の実際の動きを表す場合、そのような動きがモーションスムージングには速すぎて、とにかく顕著な影響を与えることができず、これらの動きベクトルを使用してモーションスムージングを試みるよりも、ゼロ動きベクトルを使用することが好ましいことのいずれかを示す。ディスプレイのリフレッシュレートが通常90Hzほどであり、フレーム間のその短時間で非常に遠くに何かを移動させることが困難であるため、現実的には、フレームごとに動きがある場合は常に、動きは、通常、以前のフレームとそれほど変わらない。したがって、多くの場合、減衰テクスチャによって減衰されたこれらの極端な動きベクトル112は、実際の動きを表さない。
【0086】
サブブロック809によって示されるように、いくつかの実施形態では、ブロック808において減衰テクスチャを使用して動きベクトルの大きさを減少させることは、減衰テクスチャを使用して動きベクトルの大きさを減少させる前に、減衰テクスチャに最小N×Nフィルタを適用することを含むことができる。ここで、Nは、任意の適切な数とすることができる。N=3は、最小3×3フィルタ(すなわち、3×3ブロックのテクセル)を使用する。N=3の例を使用して、ブロック809において減衰テクスチャに最小3×3フィルタを適用する際に、ロジックは、減衰テクスチャ807からテクセルごとに、対応するテクセルを中心とするテクセルの各3×3ブロック(例えば、対応するテクセルとその8つの隣接するテクセルとを含むテクセルのブロック)の9つの減衰値のうちの最小値をフェッチすることができる。非ゼロの減衰値が割り当てられているが、隣接するテクセルにゼロの減衰値が割り当てられている減衰テクスチャの任意の対応するテクセルが対応するテクセルの減衰値ゼロをその対応するテクセルの対応する動きベクトルに適用され、それによって、対応するテクセルが減衰テクスチャ807において非ゼロの減衰値を割り当てられているにもかかわらず、対応するテクセルの動きベクトルをゼロに減少させるため、ブロック809においてこの最小N×Nフィルタを適用することは、通常、さらに多くの動きベクトル112をゼロにする。換言すれば、隣接するテクセルにゼロの減衰値が割り当てられた場合、減衰テクスチャの所与のテクセル内の動きベクトル112はゼロにされ、これは、隣接するテクセルが多くの大きな大きさの動きベクトルを有することを意味する。
図8は、最小N×Nフィルタを減衰テクスチャ807に適用した結果である例示的な減衰テクスチャ811を示している。結果として得られる減衰テクスチャ811は、減衰テクスチャ807よりも多くの黒色のテクセルを含み、これは、結果として生じる減衰テクスチャ811を使用して、より多くの動きベクトルがゼロにされることを意味する。
【0087】
810において、ロジックは、減衰テクスチャにおいて1.0未満の減衰値に対しておそらくいくつかの大きさが減衰された動きベクトル112の変更された配列に基づいて、再投影フレームのピクセルデータ108(3)を変更することができる。ピクセルデータ108(3)の変更は、本明細書に記載された技術のいずれかを含むことができる(例えば、プロセス300のブロック308~312を参照して記載されたもの)。
【0088】
812において、ロジックは、再投影フレーム104(3)の変更されたピクセルデータ108(3)に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD100のディスプレイパネル上)に再投影フレーム104(3)をレンダリングすることができる。ブロック812において実行される動作は、プロセス300のブロック314に関して説明されたものと同様とすることができる。
【0089】
図9は、本明細書に開示される実施形態にかかる、
図8のプロセス800を参照して説明された減衰テクスチャなどの減衰テクスチャを生成するための例示的なプロセス900のフロー図である。したがって、プロセス900は、プロセス800のブロック806において減衰テクスチャを生成するために実行されることができる動作のサブプロセスを表すことができる。考察目的で、プロセス900が前の図を参照して記載される。
【0090】
902において、GPU110のビデオ符号化器によって生成された動きベクトル112の配列を受信した後、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、動きベクトル112の複数の以前に取得された配列に少なくとも部分的に基づいて、減衰テクスチャの各テクセルのデルタベクトルのセットを判定することができる。例えば、動きベクトル112の配列の履歴は、一連のフレームが処理されるときに維持されることができ、動きベクトル112の最後の2つの配列(例えば、動きベクトル112の2つの最新の配列)は、ブロック902におけるデルタベクトル(例えば、2つの配列内の対応する動きベクトルの対の間の差(例えば、大きさに関して)を示す差ベクトル)のセットを判定するために比較されることができる。
【0091】
904において、ロジックは、閾値の大きさよりも大きい大きさを有する減衰テクスチャの各テクセル内のデルタベクトルのパーセンテージを計算することができる。例えば、ロジックは、ブロック904において、減衰テクスチャの所与のテクセル内のデルタベクトルを評価し、テクセル内の「外れ値」ベクトルを、閾値の大きさよりも大きいデルタ(例えば、大きさ)を有するデルタベクトルとして識別し、テクセル内の外れ値ベクトルのパーセンテージを計算することができる。フレームあたり(または11.1ミリ秒の時間あたり)約3度の移動/動き(ユーザの視点から)の閾値など、ブロック904において「外れ値」ベクトルを識別する目的で、任意の適切な閾値を使用することができる。換言すれば、ブロック904において使用される閾値は、
図7のプロセス700のブロック707および709を参照して上述したように、第1のフレーム104(1)がレンダリングされた第1の時間と第2のフレーム104(2)がレンダリングされた第2の時間との間の期間(またはギャップ)に基づくことができる。
【0092】
906において、ロジックは、減衰テクスチャの各テクセルについて、「外れ値」デルタベクトルであるテクセル内のデルタベクトルのパーセンテージが、25%などの閾値パーセンテージを満たすか、または超えるかどうかを判定することができる。ブロック906において、「外れ値」デルタベクトルであるテクセル内のデルタベクトルのパーセンテージが閾値パーセンテージを満たすかまたは超える場合、プロセス900は、ブロック906からブロック908への「はい」ルートをたどることができる。
【0093】
908において、ロジックは、閾値パーセンテージを満たすかまたは超える「外れ値」デルタベクトルの数を有するテクセルについて、減衰値をゼロとして計算することができる。換言すれば、ロジックは、所与のテクセルのデルタベクトルの特定の量(例えば、25%以上)が最大長よりも大きい場合、そのテクセルの減衰値をゼロとして計算することができる。プロセス800に記載されているように、ゼロの減衰値を所与のテクセル内の動きベクトル112に適用すると、それらの動きベクトル112の大きさをゼロに減少させる(例えば、そのテクセル内の動きベクトルを完全に減衰させる)。
【0094】
906において、「外れ値」デルタベクトルの閾値パーセンテージ未満を有するテクセルについて、プロセス900は、ブロック906からブロック910への「いいえ」ルートをたどることができ、ロジックは、ブロック904において、それらのテクセルの減衰値を、計算されたパーセンテージに少なくとも部分的に基づく減衰値として計算することができる。例えば、特定のテクセルの閾値の大きさよりも大きいデルタベクトルのパーセンテージが閾値のパーセンテージ(例えば、25%)よりも小さい場合、減衰値は、閾値パーセンテージよりも小さい値の範囲内で計算されるパーセンテージ(例えば、0%~25%の範囲内)に線形にマッピングされる値として設定されることができる。ブロック910において計算された減衰値は、(減衰テクスチャが動きベクトル場112に適用されるとき)ゼロ化されていない残りのベクトルのノイズを低減するのに効果的である。
【0095】
912において、計算された減衰値は、以前にレンダリングされたフレーム104に基づいて、そのテクセルの既存の減衰値と比較されることができる。減衰値がブロック912の既存の値よりも小さい場合、プロセス900は、ブロック912からブロック914への「はい」ルートをたどることができ、テクセルの減衰値は、ブロック908または910において計算された減衰値に設定される。例えば、以前のフレームの減衰テクスチャのそのテクセルに減衰がなかった場合、既存の減衰値は、1.0に等しくすることができ、ブロック908または910において計算された新たな減衰値が1.0未満である場合、この例では、減衰値は、所与のテクセル内の動きベクトルを減衰させるために、新たに計算された減衰値に設定される。
【0096】
912において、計算された減衰値が問題のテクセルの既存の値以上である場合、プロセス900は、ブロック912からブロック916への「いいえ」ルートをたどることができ、既存の減衰値は、時間とともに減衰なしに対応する最大減衰値(例えば、1.0)に向かって増加する。例えば、状況によってはフレームごとに変化する不規則な動きベクトルが発生する可能性があるため、新たな減衰値は、減衰テクスチャのテクセルの以前の(古い)減衰値と「混合」されることができ、これは、計算された減衰値がその期間のテクセルの既存の減衰値を決して下回らないと仮定すると、減衰値が一定期間(例えば、1秒の期間)にわたって減衰なしに増加することを意味する。
【0097】
図10は、本明細書に開示される実施形態にかかる、結果として生じる動きベクトルのセットがモーションスムージング技術の一部として再投影フレームを生成するために使用される前に、色変化がほとんどまたは全くない領域に対応する動きベクトルをゼロにするための例示的なプロセス1000のフロー図である。考察目的で、プロセス1000が前の図を参照して記載される。
【0098】
1002において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。ブロック1002において実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0099】
1004において、ロジックは、GPU110から動きベクトル112の配列を受信することができる。ブロック1004で実行される動作は、プロセス300のブロック304に関して説明されたものと同様とすることができる。
【0100】
1006において、ロジックは、GPU110に入力された複数の以前にレンダリングされたフレーム104の間で(RGBベクトルに関して)色ピクセル値を比較して、動きベクトル112の配列内の動きベクトルごとの色差値を判定することができる。これらの色差値は、閾値色差と比較され、それらの色差値が閾値色差よりも小さいため、フレーム間の色変化がほとんどまたは全くないものに関連する動きベクトル112のサブセットを判定することができる。いくつかの実施形態では、ロジックは、RGBピクセル値をベクトルとして扱う。次に、色の差異(例えば、デルタベクトル)を判定するために、以前にレンダリングされたフレーム104間の対応するRGBベクトルが比較される。動きベクトル112の配列内の各動きベクトル112は、ピクセルのブロック(例えば、ピクセルの8×8ブロック)に対応することができるため、そのような色比較は、フレーム104間のピクセルの8×8ブロック内のいくつかのまたは全てのRGBピクセル値を比較することによって、動きベクトルごとに実行されることができる。いくつかの実施形態では、ロジックは、特定の動きベクトル112に関連付けられているフレーム104間の色変化の量(例えば、色差値)を判定するために、単一の動きベクトル112に対応するピクセルの各8×8ブロック内のピクセルの他の全ての行およびピクセルの他の全ての列の色値を比較する。したがって、所与の動きベクトル112に対応するピクセルのブロックに関して、フレーム間の色比較は、処理リソースを節約するために、対応するピクセルのブロック内のピクセルの一部(例えば、25%)を比較することを含むことができる。
【0101】
1008において、ロジックは、色差値が閾値色差よりも小さい動きベクトル112のサブセットの大きさをゼロの長さ/大きさまで減少させることができる。これは、以前にレンダリングされたフレーム間で色の変化がほとんどまたは全くなかったシーンの領域にいかなる動きベクトルも含まない動きベクトル112の変更された配列を作成する(ゼロ動き色差と呼ばれることもある)。これは、例えば、テキストが単色の背景の前にある場合に、テキストが端部の周りでぼやけたり波打ったりして見えるのを防ぐのに役立つことができる。また、シーン内のライトやその他のユーザインターフェース要素が徐々に明るくなったり暗くなったりするたびに、視覚的に邪魔なアーティファクトが表示されるのを防ぐのにも役立つことができる。
【0102】
1010において、ロジックは、動きベクトル112の変更された配列に基づいて、再投影フレームのピクセルデータ108(3)を変更することができ、これは、色が以前にレンダリングされたフレーム104間で実質的に同じである領域に動きベクトル112をもはや含まない。ピクセルデータ108(3)の変更は、本明細書に記載された技術のいずれかを含むことができる(例えば、プロセス300のブロック308~312を参照して記載されたもの)。
【0103】
1012において、ロジックは、再投影フレーム104(3)の変更されたピクセルデータ108(3)に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD100のディスプレイパネル上)に再投影フレーム104(3)をレンダリングすることができる。ブロック1012において実行される動作は、プロセス300のブロック314に関して説明されたものと同様とすることができる。
【0104】
図11は、本明細書に開示される実施形態にかかる、結果として生じる動きベクトルのセットがモーションスムージング技術の一部として再投影フレームを生成するために使用される前に、1つ以上のフィルタを使用して動きベクトル場を「クリーンアップ」するための例示的なプロセス1100のフロー図である。考察目的で、プロセス1100が前の図を参照して記載される。
【0105】
1102において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。ブロック1102で実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0106】
1104において、ロジックは、GPU110から動きベクトル112の配列を受信することができる。ブロック1104で実行される動作は、プロセス300のブロック304に関して説明されたものと同様とすることができる。
【0107】
1106において、ロジックは、N×Nスカラー中央値フィルタを動きベクトル112の配列に適用して、動きベクトル112の第1の変更された配列を取得することができる。ここで、Nは、5×5スカラー中央値フィルタを適用するN=5などの任意の適切な数とすることができる。N=5の例では、選択された動きベクトルを囲む動きベクトル112の5×5のセットを見ることによって、動きベクトル112の配列内の各動きベクトルに5×5スカラー中央値フィルタが適用される。選択された動きベクトルの場合、選択されたベクトルを囲む5×5の領域は、25個の動きベクトルを有する。選択された動きベクトルに適用されるスカラー中央値フィルタは、中央値x成分値(25個のx成分値のうち)と中央値y成分値(25個のy成分値のうち)とを計算した後、中央値x成分値と中央値y成分値とを合成し、スカラー中央値ベクトルを取得し、選択された動きベクトルは、スカラー中央値ベクトルに置き換えられることができる。このプロセスは、動きベクトル112の配列内の各ベクトルに対して反復する。この場合も、Nに任意の適切な値が使用されることができ、N=5は、単なる例である。ブロック1106においてスカラー中央値フィルタを適用することは、動きベクトル場112のノイズを低減し、外れ値の動きベクトルを除去するのに役立つ。ブロック1106においてスカラー中央値フィルタを使用することはまた、より計算集約的であるより複雑な距離アルゴリズムに依存するであろう、ベクトル中央値フィルタなどのより複雑なフィルタを適用するよりも計算的に速い。
【0108】
1108において、ロジックは、M×M平均最大ぼかしフィルタを動きベクトル112の第1の変更された配列に適用して、動きベクトル112の第2の変更された配列を取得することができる。ここで、Mは、3×3の平均最大ぼかしフィルタを適用するであろう、M=3などの任意の適切な数とすることができる。平均最大ぼかしフィルタは、2つの別々のフィルタ(平均ベクトルフィルタおよび最大長ベクトルフィルタ)を独立して適用し、次に、これら2つの、独立して適用されたフィルタから結果のベクトルのベクトル平均を取得する。M=3を使用する例では、選択された動きベクトルを囲む動きベクトル112の3×3セットを見ることによって、3×3の平均最大ぼかしフィルタが動きベクトル112の配列内の各動きベクトルに適用される。選択された動きベクトルの場合、選択されたベクトルを囲む3×3の領域は、9つの動きベクトルを有する。最初に、選択された動きベクトルに平均ベクトルフィルタが適用され、平均x成分値(9つのx成分値のうち)と平均y成分値(9つのy成分値のうち)とが計算され、次に、平均x成分値と平均y成分値とを合成して平均ベクトルを取得する。次に、最大長のベクトルフィルタが、選択された動きベクトルに独立して適用され、これは、(9つの動きベクトルのうち)最長のベクトルを判定する。次に、平均ベクトルと最長ベクトルのベクトル平均をとることによって結果のベクトルが判定され、選択された動きベクトルは、結果のベクトルに置き換えられることができる。このプロセスは、動きベクトル112の配列内の各ベクトルに対して反復する。この場合も、Mに任意の適切な値が使用されることができ、M=3は、単なる例である。ブロック1108において平均最大ぼかしフィルタを適用することは、動きベクトルのグループのサブエリアにおける不連続性を除去する平滑化された動きベクトル場を提供する。いくつかの実施形態では、ブロック1108において平均最大ぼかしフィルタを適用することは、本明細書に記載されるように、動きベクトル場112がモーションスムージングに使用される前の動きベクトル場112に対する最後の「クリーンアップ」ステップである。例えば、動きベクトルの閾値化、減衰テクスチャの使用、色差がほとんどまたは全くない領域のベクトルのゼロ化など、本明細書に記載の他の技術と組み合わせて使用される場合、これらの様々な動作は、平均最大ぼかしフィルタを適用する前に実行されることができる。
【0109】
1110において、ロジックは、フィルタリングされた動きベクトルを有する動きベクトル112の変更された配列に基づいて、再投影フレームのピクセルデータ108(3)を変更することができる。ピクセルデータ108(3)の変更は、本明細書に記載された技術のいずれかを含むことができる(例えば、プロセス300のブロック308~312を参照して記載されたもの)。
【0110】
1112において、ロジックは、再投影フレーム104(3)の変更されたピクセルデータ108(3)に少なくとも部分的に基づいて、ディスプレイ上(例えば、HMD100のディスプレイパネル上)に再投影フレーム104(3)をレンダリングすることができる。ブロック1112において実行される動作は、プロセス300のブロック314に関して説明されたものと同様とすることができる。
【0111】
図7~
図11のプロセスに記載された様々な技術(GPU110によって出力される動きベクトル場を変更するための様々な技術)は、任意の組み合わせおよび/または任意の順序で使用されることができることが理解されるべきである。例えば、
図7を参照して記載された技術は、
図8および
図9を参照して記載された技術と組み合わせて使用されることができ、これらの技術のいくつかまたは全ては、
図10を参照して記載された技術と組み合わせて使用されることができ、これらの技術のいくつかまたは全ては、
図11を参照して記載された技術と組み合わせて使用されることができる。すなわち、最適化された動きベクトル場を取得するロバストな技術は、動きベクトル場のロバストな変更においてともに
図7~
図11を参照して記載された技術の全てを利用することができる。
【0112】
図12は、本明細書に開示される実施形態にかかる、ピクセルデータが動きベクトル推定のためにGPUに入力される前に、以前にレンダリングされたフレームを回転させるための例示的なプロセス1200のフロー図である。考察目的で、プロセス1200が前の図を参照して記載される。
【0113】
1202において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、ピクセルデータ108がGPU110への入力として提供される複数の以前にレンダリングされたフレーム104のうちの第1のフレーム104(1)を所定回転量だけ回転させて、第1の回転フレーム1204(1)を取得することができる。
【0114】
1206において、ロジックは、複数の以前にレンダリングされたフレーム104のうちの第2のフレーム104(2)を所定回転量だけ回転させて、第2の回転フレーム1204(2)を取得することができる。
【0115】
1208において、ロジックは、GPU110への入力として、回転されたフレーム1204(1)および1204(2)のピクセルデータを提供することができる。プロセス1200は、プロセス300のブロック1208からブロック304まで継続することができる(オフページ参照「A」によって示されるように)。したがって、動きベクトル112の配列は、ブロック1208においてGPU110への入力として提供されたピクセルデータに基づいて、ブロック304においてGPU110から受信されることができ、
図3のモーションスムージングアルゴリズムの残りの動作は、モーションスムージングされた再投影フレーム104(3)をレンダリングするために実行されることができる。
【0116】
プロセス1200は、シーン内の水平および/または垂直の建築上の端部の影響が、移動またはアニメーション化するオブジェクトを真に表していない「奇妙な」動きベクトルを引き起こすのを軽減することができる。複数の以前にレンダリングされたフレーム104(1)および104(2)は、それぞれ、ブロック1202および1206で同じ回転量だけ回転されることができるか、または各フレーム104(1)および104(2)は、ブロック1202および1206で異なる回転量だけ回転されることができる。いくつかの実施形態では、ブロック1202および1206における各フレームの回転量は事前定義されている(例えば、入力フレーム104(1)および104(2)を45度回転させる)。フレーム104(1)および104(2)を45度回転させると、シーン内の水平および垂直端部が斜めに配向されることができ、その結果、これらの斜め端部は、多くの「奇妙な」動きベクトルをGPU110のビデオ符号化器によって生成させることができる。いくつかの実施形態では、ブロック1202および1206での各フレームの回転量は、各フレーム104のランダムな回転量とすることができる。これは、45度に位置合わせすることができる任意の端部を一時的に非表示にすることができる。
【0117】
図13は、本明細書に開示される実施形態にかかる、以前にレンダリングされたフレームの輝度データおよび彩度データに基づいて生成される動きベクトルの配列の間で選択するための例示的なプロセス1300のフロー図である。考察目的で、プロセス1300が前の図を参照して記載される。さらにまた、
図3および
図13のオフページ参照「B」によって示されるように、プロセス1300は、
図3のブロック306における動作の前に実行される動作を表すことができ、プロセス1300は、いくつかの実施形態では、ブロック306~314の動作を継続することができる。
【0118】
1302において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連する輝度データを提供することができる。例えば、第1のフレーム104(1)に関連付けられた第1のピクセルデータ108(1)は、第1の輝度データ、第1の彩度データ、および/または追加のタイプのデータを含むことができる。同様に、第2のフレーム104(2)に関連付けられた第2のピクセルデータ108(2)は、第2の輝度データ、第2の彩度データなどの同様のタイプのデータを含むことができる。したがって、第1の輝度データおよび第2の輝度データは、ブロック1302においてGPU110への入力として提供されることができる。
【0119】
1304において、ロジックは、GPU110から、第1の輝度データおよび第2の輝度データに少なくとも部分的に基づいてGPU110のビデオ符号化器によって生成された動きベクトル112の第1の配列を受信することができる。
【0120】
1306において、ロジックは、GPU110への入力として、第1のフレーム104(1)に関連付けられた第1の彩度データおよび第2のフレーム104(2)に関連付けられた第2の彩度データを提供することができる。
【0121】
1308において、ロジックは、GPU110から、第1の彩度データおよび第2の彩度データに少なくとも部分的に基づいてGPU110のビデオ符号化器によって生成された動きベクトル112の第2の配列を受信することができる。
【0122】
1310において、ロジックは、動きベクトル112の第1の配列および動きベクトル112の第2の配列の分析に基づいて、動きベクトル112の第1の配列または動きベクトル112の第2の配列のうちの1つを動きベクトルの選択された配列として選択することができる。例えば、選択アルゴリズムは、例として、動きベクトル112の各フィールド内の動きベクトル112の大きさおよび/または方向に基づいて、最も不規則でないものを選択することができる。例えば、明るい点滅光(例えば、仮想爆発)が第2のフレーム104(2)で発生する場合、輝度データは、GPU110に、ある閾値の大きさを超える大きさの動きベクトル112を出力させることができるが、以前にレンダリングされた同じフレーム104は、GPU110に、非常に大きな大きさのそのような動きベクトルを含まない動きベクトル112を出力させることができる。この場合、彩度データから生成された動きベクトル112の配列は、ブロック1310において選択されることができる。これは、選択アルゴリズムの一例に過ぎず、他のアルゴリズムが使用されることもできる。前述のように、プロセス1300は、プロセス300のブロック1310からブロック306まで継続することができ、再投影フレーム104(3)のピクセルデータ108(3)は、ブロック1310からの動きベクトル112の選択された配列に基づいて変更される。
【0123】
図14は、本明細書に開示される実施形態にかかる、動きベクトルの複数の配列を取得し、アレイ間の差異を判定し、モーションスムージングについて判定された差異に基づいて動きベクトルの最終配列を生成するための例示的なプロセス1400のフロー図である。考察目的で、プロセス1400が前の図を参照して記載される。さらにまた、
図3および
図14のオフページ参照「B」によって示されるように、プロセス1400は、
図3のブロック306における動作の前に実行される動作を表すことができ、プロセス1400は、いくつかの実施形態では、ブロック306~314の動作を継続することができる。
【0124】
1402において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連する第1のピクセルデータ108(1)を提供することができる。ブロック1402で実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0125】
1404において、ロジックは、ブロック1402において入力として提供された第1のピクセルデータ108(1)に基づいて、GPU110から動きベクトルの第1の配列112(1)を受信することができる。
【0126】
1406において、ロジックは、GPU110への入力として、以前にレンダリングされたフレーム104に関連する第2のピクセルデータ108を提供することができる。
【0127】
1408において、ロジックは、GPU110から、第2のピクセルデータ108(2)に少なくとも部分的に基づいて、動きベクトルの第2の配列112(2)を受信することができる。
【0128】
1410において、ロジックは、第1の配列112(1)と第2の配列112(2)との間の動きベクトル112の方向および/または大きさの差異を判定することができる。例えば、第1の配列112(1)の動きベクトル112と第2の配列112(2)の対応する動きベクトル112との間で比較を行って、動きベクトルの方向または大きさのいずれかまたは双方に関して動きベクトルが異なるかどうかを判定することができ、そうである場合には、それらが異なる量を判定することができる。
【0129】
1412において、ロジックは、ブロック1410において判定されるように、動きベクトルの第1の配列112(1)または動きベクトルの第2の配列112(2)との間の差異に少なくとも部分的に基づいて、動きベクトル112の最終配列を生成することができる。例えば、動きベクトル112の最終配列は、第1の配列112(1)または第2の配列112(2)内の動きベクトルの個々のものを減衰させることから、または各配列112(1)および112(2)の対応する動きベクトルの平均を表す平均化された動きベクトルを減衰することから生じる動きベクトルのセットを表すことができる。前述のように、プロセス1400は、ブロック1412からプロセス300のブロック306まで継続することができ、再投影フレーム104(3)のピクセルデータ108(3)は、ブロック1412において生成された動きベクトル112の最終配列に基づいて変更される。
【0130】
プロセス1400がどのように使用されることができるかの例示的な例として、動きベクトルの第1の配列112(1)が、それらの元の(「y-up」)向きにおける入力フレーム104(1)および104(2)のピクセルデータ108に基づいてブロック1404において受信され、動きベクトルの第2の配列112(2)が、45度回転された入力フレーム104(1)および104(2)のピクセルデータ108に基づいてブロック1408において受信される例を考える。入力画像フレーム104を回転させるこの概念は、
図10を参照して説明された。したがって、この例示的な例では、第1のフレーム104(1)および第2のフレーム104(2)のピクセルデータ108は、動きベクトルの第1の配列112(1)を生成するためにブロック1402において入力として提供されることができ、第1の回転フレーム1004(1)および第2の回転フレーム1004(2)のピクセルデータ108は、動きベクトルの第2の配列112(2)を生成するためにブロック1406において入力として提供されることができる。この例示的な例では、動きベクトルの2つの配列112(1)および112(2)は、再位置合わせされ(例えば、第2の配列112(2)を逆方向に45度回転させることによって)、次に比較されて、配列112(1)および112(2)の双方の対応するベクトル間の角度の差異(方向)および/または長さの差異(大きさ)を調べることによって不一致を判定することができる。実際の動き(例えば、シーン内のオブジェクトの移動またはアニメーション化)が、回転した入力フレーム104に対して非常に類似した動きベクトルの配列を生成することができる一方で、誤って検出された動きが、動きベクトルの非常に異なる配列を生成することができる場合があり得る。この例示的な例では、動きベクトル112の最終配列は、各配列112(1)および112(2)内の2つの対応するベクトルの平均の長さを2つの正規化されたベクトルの内積によって減衰させることによって、ブロック1412において生成されることができる。いくつかの実施形態では、
図8および
図9を参照して説明したもののような減衰テクスチャは、ブロック1412において利用されて、最終配列を生成することができる。例えば、プロセス900のブロック902において判定されたデルタベクトルのセットは、ブロック1404において受信された動きベクトルの第1の配列112(1)とブロック1408において受信された動きベクトルの第2の配列112(2)との間のデルタに基づくことができ、結果として生じる減衰テクスチャは、ブロック1412において使用されて、第1の配列112(1)、第2の配列112(2)、または2つの配列112(1)および112(2)との間のベクトルの組み合わせ(例えば、平均)を減衰させることができる。
【0131】
プロセス1400が使用されることができる方法の別の例示的な例として、複数の以前にレンダリングされたフレーム104の入力テクスチャに対して第1のミップレベル(ミップマップレベル)が生成され、この第1のミップレベルについての対応するピクセルデータ108がブロック1402においてGPU110への入力として提供されて動きベクトルの第1の配列112(1)を生成する例を考える。一方、第2のミップレベルは、複数の以前にレンダリングされたフレーム104の入力テクスチャに対して生成されることができ、この第2のミップレベルに対応するピクセルデータ108は、動きベクトルの第2の配列112(2)を生成するためにブロック1406においてGPU110への入力として提供されることができる。これは、さらに、任意の数のミップレベルに対して実行されて、任意の数の対応する動きベクトルの配列を生成することもできる。いくつかの実施形態では、ブロック1410の前に3つまたは4つの動きベクトル112の配列が受信されるように、入力テクスチャの3つまたは4つのミップレベルが生成されることができる。いくつかの実施形態では、各ミップレベルは、前のミップレベルの幅および高さの半分である(例えば、面積の25%)。ブロック1410において、この例示的な例では、異なるミップレベルから生成された配列112のペア間の差異が判定されることができ、ブロック1412において、判定された差異に基づいて動きベクトル112の最終配列が生成されることができる。例えば、ロジックは、異なるミップレベルの動きベクトル112の複数の配列にわたる異常を検出することができ、異常な動きベクトルを減衰させる(例えば、ゼロに減少させる)ことができる。入力フレーム104の異なるミップレベルを使用して動きベクトル112の異なる配列を生成するこの例は、シーン内に繰り返しパターンの広い領域(例えば、壁紙)があり、移動またはアニメーション化するオブジェクトがない場合であっても、GPU110のビデオ符号化器が動きベクトルの解像度に対する繰り返しパターンの周波数に起因して動きが多いと考えて、大きな動きベクトルを多く生成する可能性がある状況において役立つことができる。したがって、プロセス1400は、異なるミップレベルの動きベクトル112の配列を生成するために使用される場合、繰り返しパターンの異なる周波数にわたる異常を検出するのに役立つことができ、検出される場合、減衰テクスチャを使用して、それらの動きベクトル112を減衰する(例えば、ゼロにする)ことができる。
【0132】
プロセス1400が使用されることができる方法のさらに別の例として、複数の配列112(1)および112(2)が異なる解像度で取得され、その差異が、ブロック1410において、第1の配列112(1)内の単一の動きベクトルを、第2の配列112(2)内の複数の対応する動きベクトルと(例えば、方向および/または大きさに関して、第2の配列112(2)内の複数の対応する動きベクトルの平均と)比較することによって判定される例を考える。異なる解像度で動きベクトル112の配列を使用すると、ブロック1412において、動きベクトルの最終配列を生成するのに有用な差異を生み出すことができる。
【0133】
図15は、本明細書に開示される実施形態にかかる、画像領域の異なる部分について異なる解像度で動きベクトルの複数の配列を取得するための例示的なプロセス1500のフロー図である。考察目的で、プロセス1500が前の図を参照して記載される。さらにまた、
図3および
図15のオフページ参照「B」によって示されるように、プロセス1500は、
図3のブロック306における動作の前に実行される動作を表すことができ、プロセス1500は、いくつかの実施形態では、ブロック306~314の動作を継続することができる。
【0134】
1502において、ディスプレイシステムのロジック(例えば、HMD100のロジック)は、GPU110への入力として、以前にレンダリングされたフレーム104に関連するピクセルデータ108を提供することができる。ブロック1502で実行される動作は、プロセス300のブロック302に関して説明されたものと同様とすることができる。
【0135】
1504において、ロジックは、GPU110から動きベクトルの第1の配列112(1)を受信することができ、動きベクトルの第1の配列112(1)は、第1の解像度で受信されるか、さもなければ第1の解像度にアップサンプリングまたはダウンサンプリングされる。
【0136】
1506において、ロジックは、動きベクトルの第1の配列112(1)に少なくとも部分的に基づいて、ディスプレイにまたがる画像領域1505の第1の部分1505(A)における動きの欠如を検出することができ、動きベクトルの第1の配列112(1)に少なくとも部分的に基づいて、画像領域1505の第2の部分1505(B)内のオブジェクト106の動きを検出することができる。例えば、非ゼロの動きベクトルは、画像領域1505の右半分で検出されることができる一方で、画像領域1505の左半分は、非ゼロの動きベクトルのないゼロ値の動きベクトルを含むことができる。
【0137】
1508において、ロジックは、GPU110への入力として、第1のピクセルデータ108(1)の第1の部分(第1のフレーム104(1)に関連する)および第2のピクセルデータ108(2)の第1の部分(第2のフレーム104(2)に関連する)を提供することができる。第1のピクセルデータ108(1)の第1の部分および第2のピクセルデータ108(2)の第1の部分は、それぞれ、ブロック1506において動きの欠如が検出された画像領域1505の第1の部分1505(A)に対応することができる。
【0138】
1510において、ロジックは、GPU110から、第1のピクセルデータ108(1)の第1の部分および第2のピクセルデータ108(2)の第1の部分に少なくとも部分的に基づいて、GPU110のビデオ符号化器によって生成された動きベクトルの第2の配列112(2)を受信することができる。動きベクトルのこの第2の配列112(2)は、動きベクトルの第1の配列112(1)の第1の解像度よりも高い解像度である第2の解像度で生成されることができる。動きの欠如が検出された画像領域1505の第1の部分1505(A)についてより高い解像度の動きベクトル場112(2)を取得することは、より高い解像度での動きベクトル場112(2)が大規模な動きが検出されなかった画像領域1505の第1の部分1505(A)における小規模な動きを検出するのに役立つことができるという概念に基づくことができる。
【0139】
1512において、ロジックは、GPU110への入力として、第1のピクセルデータ108(1)の第2の部分(第1のフレーム104(1)に関連する)および第2のピクセルデータ108(2)の第2の部分(第2のフレーム104(2)に関連する)を提供することができる。第1のピクセルデータ108(1)の第2の部分および第2のピクセルデータ108(2)の第2の部分は、それぞれ、ブロック1506においてオブジェクト106の動きが検出された画像領域1505の第2の部分1505(B)に対応することができる。
【0140】
1514において、ロジックは、GPU110から、第1のピクセルデータ108(1)の第2の部分および第2のピクセルデータ108(2)の第2の部分に少なくとも部分的に基づいて、GPU110のビデオ符号化器によって生成された動きベクトルの第3の配列112(3)を受信することができる。動きベクトルのこの第3の配列112(3)は、動きベクトルの第2の配列112(2)の第2の解像度よりも低い解像度である第3の解像度で生成されることができる。動きが検出された画像領域1005の第2の部分1005(B)のこの比較的低解像度の動きベクトル場112(3)は、第1の動きベクトル場112(1)の第1の解像度で大規模な動きが既に検出されている画像領域1505の第2の部分1505(B)の動きを検出するために高解像度の動きベクトル場が必要なくてもよいという概念に基づくことができる。
【0141】
1516において、ロジックは、モーションスムージングのために、動きベクトルの第2の配列112(2)および動きベクトルの第3の配列112(2)を使用することができる。プロセス1500は、ブロック1516からプロセス300のブロック306まで継続することができ、再投影フレーム104(3)のピクセルデータ108(3)は、ブロック1516からの動きベクトル112に基づいて変更される。一例では、モーションスムージングのためにブロック1516において動きベクトルの複数の配列を使用することは、プロセス1400のブロック1412を参照して説明された動作を含むことができる。
【0142】
図16は、具現化されることができる本明細書に開示される実施形態にかかる、VRヘッドセットなどのHMD1600の例示的な構成要素を示している。HMD1600は、前の図で参照したHMD100と同一または同様とすることができ、したがって、
図16に示されるHMD1600の構成要素は、HMD100に実装されることができる。HMD1600は、ユーザ102によって(例えば、ユーザ102の頭部に)着用されることになるスタンドアロンデバイスとして実装されることができる。いくつかの実施形態では、HMD1600は、ユーザ102が、ユーザ102の頭部の周囲に収まるようにサイズ決めされる固設機構(例えば、調整可能バンド)を使用して、HMD1600をユーザの頭部に固設することを可能にすることなどによって、頭部に装着可能とすることができる。いくつかの実施形態では、HMD1600は、ニアアイまたはニアツーアイディスプレイ(複数可)を含む仮想現実(VR)または拡張現実(AR)ヘッドセットを含む。したがって、「ウェアラブルデバイス」、「ウェアラブル電子デバイス」、「VRヘッドセット」、「ARヘッドセット」、および「ヘッドマウントディスプレイ(HMD)」という用語は、本明細書では互換的に使用されて、
図16のデバイス1600を指すことができる。しかしながら、これらのタイプのデバイスは、HMD1600の単なる例であることが理解されるべきであり、HMD1600は、様々な他の形態因子で実装されることができることを理解されたい。
【0143】
例示された実装では、HMD1600は、1つ以上のプロセッサ1602およびメモリ1604(例えば、コンピュータ可読媒体1604)を含む。いくつかの実装では、プロセッサ(複数可)1602は、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)(複数可)110、CPUおよびGPU110の双方、マイクロプロセッサ、デジタルシグナルプロセッサ、または当該技術分野で公知の他の処理ユニットもしくは構成要素を含むことができる。代替的に、または追加的に、本明細書で機能的に説明される機能は、少なくとも部分的に、1つ以上のハードウェアロジック構成要素によって実施されることができる。例えば、限定されるものではないが、使用できるハードウェアロジック構成要素の例示的なタイプは、フィールドプログラマブルゲート配列(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システム・オン・チップシステム(SOC)、コンプレックスプログラマブルロジック装置(CPLD)などを含む。さらに、各プロセッサ1602は、プログラムモジュール、プログラムデータ、および/または1つ以上のオペレーティングシステムも記憶することができる独自のローカルメモリを有することができる。
【0144】
メモリ1604は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報の記憶のための任意の方法または技術で実装される、揮発性および不揮発性メモリ、着脱可能および着脱不能媒体を含むことができる。そのようなメモリは、これらに限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)もしくは他の光メモリ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、RAIDストレージシステム、または所望の情報を記憶するために使用することができ、かつコンピューティングデバイスからアクセスすることができる任意の他の媒体を含む。メモリ1604は、コンピュータ可読記憶媒体(「CRSM」)として実装され得、これは、メモリ1604に記憶された命令を実行するためにプロセッサ(複数可)1602によってアクセス可能な任意の利用可能な物理媒体とすることができる。1つの基本的な実装形態では、CRSMは、ランダムアクセスメモリ(「RAM」)およびフラッシュメモリを含んでもよい。他の実装形態において、CRSMは、これらに限定されるものではないが、読み取り専用メモリ(「ROM」)、電気的に消去可能なプログラム可能な読み取り専用メモリ(「EEPROM」)、または所望の情報を記憶するために使用することができ、かつプロセッサ(複数可)1602によってアクセスすることができる任意の他の有形媒体を含むことができる。
【0145】
一般に、HMD1600は、本明細書に説明される技術、機能、および/または動作を実装するように構成されるロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)を含むことができる。コンピュータ可読媒体1604は、命令、データストアなどの、様々なモジュールを含むものとして示され、これらのモジュールは、本明細書に説明される技術、機能、および/または動作を実施するためにプロセッサ(複数可)1602上で実行するように構成されることができる。コンピュータ可読媒体1604に記憶され、かつプロセッサ(複数可)1602上で実行可能なものとして、数個の例示的な機能モジュールが示されているが、同じ機能が、代替的に、ハードウェア、ファームウェア内に、またはシステムオンチップ(SOC)および/もしくは他のロジックとして実装されてもよい。
【0146】
オペレーティングシステムモジュール1606は、他のモジュールの便宜のために、HMD1600内でHMD1600に連結されたハードウェアを管理するように構成されることができる。さらに、いくつかの事例では、HMD1600は、メモリ1604に記憶されているか、または別様にHMD1600にアクセス可能な1つ以上のアプリケーション1608を含むことができる。この実装では、アプリケーション(複数可)1608は、ゲームアプリケーション1610を含む。しかしながら、HMD1600は、任意の数またはタイプのアプリケーションを含んでもよく、ここに示される特定の例に限定されない。ゲームアプリケーション1610は、ユーザ102によってプレイ可能であるビデオベースのインタラクティブゲーム(例えば、VRゲーム)のゲームプレイを開始し、HMD1600のディスプレイパネル上にレンダリングされるべきフレーム(例えば、実際のフレーム104)を出力するように構成されることができる。合成器1611は、HMD1600の他のロジックと組み合わせて、本明細書に記載のモーションスムージング技術を実行して、モーションスムージングされた再投影フレーム104をレンダリングするように構成されることができる。
【0147】
一般に、HMD1600は、入力デバイス1612および出力デバイス1614を有する。入力デバイス1612は、制御ボタンを含むことができる。いくつかの実装では、1つ以上のマイクロフォンが、ユーザ音声入力などのオーディオ入力を受信するための入力デバイス1612として機能することができる。いくつかの実装では、1つ以上のカメラまたは他のタイプのセンサ(例えば、慣性測定ユニット(IMU))が、ユーザ102の手および/または頭部の動きなどの、ジェスチャ入力を受信するための入力デバイス1612として機能することができる。いくつかの実施形態では、追加の入力デバイス1612が、キーボード、キーパッド、マウス、タッチスクリーン、ジョイスティックなどの形態で提供されることができる。他の実施形態では、HMD1600は、キーボード、キーパッド、または他の同様の形態の機械的入力を省略してもよい。代わりに、HMD1600は、入力デバイス1612の比較的単純な形態、ネットワークインターフェース(無線または有線ベース)、電源、および処理/メモリ機能で実装されることができる。例えば、1つ以上の入力構成要素の限定されたセット(例えば、構成を開始する、電源をオン/オフするなどのための専用ボタン)が用いられることができ、HMD1600は、その後に使用されることができる。一実装では、入力デバイス(複数可)1612は、音量を増加/減少させるための基本的な音量制御ボタン(複数可)、ならびに電源およびリセットボタンなどの制御機構を含むことができる。
【0148】
出力デバイス1614は、ディスプレイ1616を含むことができ、これは、1つ以上のディスプレイパネル(例えば、ディスプレイパネルのステレオペア)を含むことができる。出力デバイス1614は、非限定的に、ライト要素(例えば、LED)、触覚感覚を生み出すためのバイブレータ、スピーカ(複数可)(例えば、ヘッドフォン)などをさらに含むことができる。例えば、電源がオンになっているときなどの状態を示すための単純な光要素(例えば、LED)も存在することができる。
【0149】
HMD1600は、ネットワークへの無線接続を容易にするために、アンテナ1620に連結された無線ユニット1618をさらに含むことができる。無線ユニット1618は、Wi-Fi、Bluetooth、無線周波数(RF)などの、様々な無線技術のうちの1つ以上を実装することができる。HMD1600は、ネットワーク、接続された周辺デバイス(PC、ゲームコンソールなどを含む)、または他の無線ネットワークと通信するプラグインネットワークデバイスへの有線接続を容易にするための物理ポートをさらに含むことができることを理解されたい。
【0150】
HMD1600は、1つ以上の光学要素を使用して、電子ディスプレイ(複数可)1616からユーザの眼(複数可)に光を向ける光学サブシステム1622をさらに含むことができる。光学サブシステム1622は、非限定的に、アパーチャ、レンズ(例えば、フレネルレンズ、凸レンズ、凹レンズなど)、フィルタなどを含む、異なる光学要素の様々なタイプおよび組み合わせを含むことができる。いくつかの実施形態では、光学サブシステム1622内の1つ以上の光学要素は、反射防止コーティングなどの1つ以上のコーティングを有することができる。光学サブシステム1622による画像光の拡大は、電子ディスプレイ(複数可)1616が、より大型のディスプレイよりも物理的により小型で、軽量で、より低消費電力であることを可能にする。さらに、画像光の拡大は、表示されたコンテンツ(例えば、画像)の視野(FOV)を増加させることができる。例えば、表示されたコンテンツのFOVは、表示されたコンテンツが、ユーザのFOVのほぼ全て(例えば、対角120~150度)、場合によっては全てを使用して提示されるようなものである。ARアプリケーションは、より狭いFOV(例えば、約40度のFOV)を有していてもよい。光学サブシステム1622は、非限定的に、樽型歪み、ピンクッション歪み、縦色収差、横色収差、球面収差、コマ収差、像面湾曲、非点収差などの、1つ以上の光学誤差を補正するように設計されることができる。いくつかの実施形態では、表示のために電子ディスプレイ(複数可)1616に提供されるコンテンツは、事前に歪められており、光学サブシステム1622は、コンテンツに基づいて生成された、電子ディスプレイ(複数可)1616からの画像光を受光するときにその歪みを補正する。
【0151】
HMD1600は、動き、位置、および配向データを生成するために使用されるセンサなどの、1つ以上のセンサ1624をさらに含むことができる。これらのセンサ1624は、ジャイロスコープ、加速度計、磁力計、ビデオカメラ、カラーセンサ、または他の動き、位置、および配向センサとすることができるか、またはそれらを含むことができる。センサ1624はまた、動き、位置、および配向データを生成するためにカメラまたはカラーセンサによって外部から視認されることができる一連の能動または受動マーカなどの、センサの二次的部分を含むことができる。例えば、VRヘッドセットは、その外部に、外部カメラで見たとき、または光(例えば、赤外光または可視光)で照らしたときに、反射器またはライト(例えば、赤外光または可視光)などの複数のマーカを含むことができ、動き、位置、および配向データを生成するために、ソフトウェアによる解釈のための1つ以上の基準点を提供することができる。HMD1600は、HMD1600の環境内の基地局によって投影または散布される光(例えば、赤外光または可視光)に対して感応性である光センサを含むことができる。
【0152】
一例では、センサ(複数可)1624は、慣性測定ユニット(IMU)1626を含むことができる。IMU1126は、加速度計、ジャイロスコープ、磁力計、および/または動きの検出、IMU1626と関連付けられた誤差の補正、もしくはそれらのいくつかの組み合わせに好適な他のセンサから受信された測定信号に基づいて、較正データを生成する電子デバイスとすることができる。測定信号に基づいて、IMU1626などの、そのような動きベースのセンサは、HMD1600の初期位置に対するHMD1600の推定された位置を示す較正データを生成することができる。例えば、複数の加速度計が並進運動(前方/後方、上/下、左/右)を測定し、複数のジャイロスコープが回転運動(例えば、ピッチ、ヨー、ロール)を測定してもよい。IMU1626は、例えば、測定信号を迅速にサンプリングし、サンプリングされたデータからHMD1600の推定された位置を計算することができる。例えば、IMU1626は、経時的に加速度計から受信された測定信号を統合して速度ベクトルを推定することができ、経時的に速度ベクトルを統合して、HMD1600上の基準点の推定された位置を判定する。基準点は、HMD1600の位置を説明するために使用されることができる点である。基準点は、一般に、空間内の点として定義されることができるが、様々な実施形態では、基準点は、HMD1600内の点(例えば、IMU1626の中心)として定義される。代替的に、IMU1626は、サンプリングされた測定信号を外部コンソール(または他のコンピューティングデバイス)に提供し、外部コンソールが較正データを判定する。
【0153】
センサ1624は、センサデータを高速で提供するために、比較的高い周波数で動作することができる。例えば、センサデータは、1000Hzのレート(または1ミリ秒ごとに1つのセンサ読み取り)で生成されることができる。このようにして、1秒間に1000回の読み取りが行われる。センサがこの速度で(またはそれ以上の速度で)これだけのデータを生成する場合、動きを予測するために使用されるデータセットは、数十ミリ秒ほどの比較的短い期間でも非常に大きくなる。
【0154】
言及されるように、いくつかの実施形態では、センサ1624は、3D空間内のHMD1600の位置および/または配向、姿勢などを追跡する目的で、HMD1600の環境内の基地局によって放出される光に対して感応性である光センサを含むことができる。位置および/または配向の計算は、光パルスのタイミング特性、およびセンサ1624によって検出される光の有無に基づくことができる。
【0155】
HMD1600は、眼追跡モジュール1628をさらに含むことができる。HMD1600の内部のカメラまたは他の光学センサは、ユーザの眼の画像情報を捕捉することができ、眼追跡モジュール1628は、捕捉された情報を使用して、ねじれおよび回転の大きさ(すなわち、ロール、ピッチ、およびヨー)ならびに各眼の注視方向を含む、瞳孔間距離、眼間距離、HMD1600に対する各眼の3次元(3D)位置を判定することができる(例えば、歪み調整の目的で)。一例では、赤外光が、HMD1600内で放出され、各眼から反射される。反射光は、HMD1600のカメラによって受光または検出され、各眼によって反射された赤外光の変化から眼球回転を抽出するために分析される。ユーザ102の眼を追跡するための多くの方法が、眼追跡モジュール1628によって使用されることができる。したがって、眼追跡モジュール1628は、各眼の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)を追跡することができ、追跡された量の少なくともサブセットが、注視点(すなわち、ユーザが見ている仮想シーン内の3D場所または位置)を推定するためにユーザ102の2つの眼から組み合わせられることができる。例えば、眼追跡モジュール1628は、過去の測定値からの情報、ユーザ102の頭部の位置を識別する測定値、および電子ディスプレイ(複数可)1616によって提示されるシーンを記述する3D情報を統合することができる。したがって、ユーザ102の眼の位置および配向の情報は、ユーザ102が見ている、HMD1600によって提示された仮想シーン内の注視点を判定するために使用される。
【0156】
HMD1600は、頭部追跡モジュール1630をさらに含むことができる。頭部追跡モジュール1630は、上記のように、センサ1624のうちの1つ以上を利用して、ユーザ102の頭部の回転を含む頭部の動きを追跡することができる。例えば、頭部追跡モジュール1630は、HMD1600の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)を追跡することができる。これらの計算は、一連のフレーム104のフレーム104ごとに行われることができるため、アプリケーション1608は、頭部の位置および配向に応じて、次のフレーム104(再投影フレーム104の場合でも)内でシーンをどのようにレンダリングするかを判定することができる。いくつかの実施形態では、頭部追跡モジュール1630は、現在および/または過去のデータに基づいて、HMD1600の将来の位置および/または配向を予測するように構成されている。これは、ユーザ102がディスプレイ(複数可)1616上で光(したがって、画像)を実際に見る前に、アプリケーションがフレーム104をレンダリングするように求められるためである。したがって、次のフレーム104は、フレーム104をレンダリングする前のおよそ25~30ミリ秒(ms)などのより早い時点で行われた、頭部の位置および/または配向のこの将来の予測に基づいて、レンダリングされることができる。頭部追跡モジュール1630によって提供される回転データは、任意の好適な測定単位で、HMD1600の回転方向およびHMD1600の回転量の双方を判定するために使用されることができる。例えば、回転方向は、左、右、上、および下に対応する正または負の水平方向および正または負の垂直方向の観点で単純化されて出力されることができる。回転量は、度、ラジアンなどの単位であり得る。角速度が、HMD1600の回転速度を判定するために計算されてもよい。
【0157】
本主題は構造的特徴に特有の言語で説明されているが、添付の特許請求の範囲に定義された主題は、必ずしも説明された特定の特徴に限定されるものではないことを理解されたい。むしろ、特定の特徴は、特許請求の範囲を実装する例解的な形態として開示される。
以下に、本出願の当初の特許請求の範囲に記載された発明を付記する。
[1]
方法であって、
ヘッドマウントディスプレイ(HMD)のグラフィックスプロセッシングユニット(GPU)への入力として、
アプリケーションから受信した第1のフレームに関連付けられた第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームに関連付けられた第2のピクセルデータと、を提供することであって、
前記第2のフレームが、最後にレンダリングされたフレームであり、前記第1のフレームが、前記第2のフレームの前にレンダリングされたものであることと、
前記GPUから、前記第1のピクセルデータと前記第2のピクセルデータとの間の比較に少なくとも部分的に基づいて、前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信することと、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成することと、
前記再投影フレームのレンダリングメッシュを生成することであって、前記レンダリングメッシュが、前記動きベクトルの配列の解像度と一致する解像度で複数の頂点を有するテッセレーションされたメッシュを含むことと、
前記動きベクトルの配列の中の非ゼロ動きベクトルに少なくとも部分的に基づいて、前記非ゼロ動きベクトルの方向の前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動することと、
前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得することと、
前記変更された第3ピクセルデータに少なくとも部分的に基づいて、前記HMDのディスプレイパネルに前記再投影フレームをレンダリングすることと、を備える、方法。
[2]
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータが前記フレームバッファに出力され、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータが前記フレームバッファに出力され、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、[1]に記載の方法。
[3]
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ディスプレイパネルの1つ以上の端部にあるピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの一部および前記第2のピクセルデータの一部を提供することを備える、[1]に記載の方法。
[4]
前記第1のピクセルデータの一部および前記第2のピクセルデータの一部が、それぞれ、前記ディスプレイパネルの周辺にレンダリングされたパネルマスクに対応するデータを表し、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のピクセルデータを変更して、前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得することであって、前記変更された第1のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記第2のピクセルデータを変更して、前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得することであって、前記変更された第2のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記変更された第1のピクセルデータの一部を前記変更された第2のピクセルデータの一部と組み合わせて、前記パネルマスクに対応する共通のピクセル値を有するピクセルのサブセットを判定することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの特定の部分および第2のピクセルデータの特定の部分を提供することを備える、[1]に記載の方法。
[5]
方法であって、
グラフィックスプロセッシングユニット(GPU)への入力として、
アプリケーションから受信した第1のフレームであって、過去にレンダリングされた前記第1のフレームに関連付けられた第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームであって、前記第1のフレームの後に過去にレンダリングされた前記第2のフレームに関連付けられた第2のピクセルデータと、を提供することと、
前記GPUから、前記第1のピクセルデータおよび前記第2のピクセルデータに少なくとも部分的に基づいて前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信することと、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成することと、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得することと、
前記変更された第3のピクセルデータに少なくとも部分的に基づいて、ディスプレイ上に前記再投影フレームをレンダリングすることと、を備える、方法。
[6]
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータが前記フレームバッファに出力され、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータが前記フレームバッファに出力され、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、[5]に記載の方法。
[7]
さらに、
前記再投影フレームのレンダリングメッシュを生成することであって、前記レンダリングメッシュが、複数の頂点を有するテッセレーションされたメッシュを含むことと、
前記動きベクトルの配列の中の非ゼロの動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動することであって、前記頂点が、(i)前記非ゼロの動きベクトルの方向に、および(ii)非ゼロの動きベクトルの大きさに対応する量だけ移動されることと、を備え、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータのピクセル値を移動して、前記再投影フレームの前記変更された第3のピクセルデータを取得することを備える、[5]に記載の方法。
[8]
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得するために前記第1のピクセルデータ、または
前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得するために前記第2のピクセルデータ、のうちの少なくとも1つを変更することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、前記変更された第1のピクセルデータまたは前記変更された第2のピクセルデータのうちの少なくとも1つを提供することを備える、[5]に記載の方法。
[9]
前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記GPUへの前記入力として、それぞれが前記ディスプレイの1つ以上の端部にあるピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの一部および前記第2のピクセルデータの一部を提供することを備える、[5]に記載の方法。
[10]
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記第1のピクセルデータの一部および前記第2のピクセルデータの一部が、それぞれ、前記HMDのディスプレイパネルの周辺にレンダリングされたパネルマスクに対応するデータを表し、前記方法が、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定することと、
前記第1のピクセルデータを変更して、前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得することであって、前記変更された第1のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記第2のピクセルデータを変更して、前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得することであって、前記変更された第2のピクセルデータの一部が、前記パネルマスクに対応するデータを表すことと、
前記変更された第1のピクセルデータの一部を前記変更された第2のピクセルデータの一部と組み合わせて、前記パネルマスクに対応する共通のピクセル値を有するピクセルのサブセットを判定することと、を備え、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、それぞれが前記ピクセルのサブセット以外のピクセルに対応する前記第1のピクセルデータの特定の部分および第2のピクセルデータの特定の部分を提供することを備える、[5]に記載の方法。
[11]
さらに、
前記動きベクトルの配列の大きさを閾値の大きさと比較することと、
前記動きベクトルの配列の動きベクトルのサブセットが前記閾値の大きさよりも大きい大きさを有することを判定することと、
前記動きベクトルのサブセットの大きさを減らして、動きベクトルの変更された配列を取得することと、を備え、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの変更された配列に基づいて前記第3のピクセルデータを変更することを備える、[5]に記載の方法。
[12]
前記第1のフレームおよび前記第2のフレームが、一連のフレームにおいて連続してレンダリングされた、[5]に記載の方法。
[13]
前記第1のピクセルデータが、第1の彩度データを含み、前記第2のピクセルデータが、第2の彩度データを含み、前記動きベクトルの配列が、前記第1の彩度データおよび前記第2の彩度データに少なくとも部分的に基づいて前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第1の配列であり、前記方法が、さらに、
前記GPUへの第2の入力として、
前記第1のフレームに関連付けられた第1の輝度データと、
前記第2のフレームに関連付けられた第2の輝度データと、を提供することと、
前記GPUから、前記第1の輝度データおよび前記第2の輝度データに少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信することと、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列の分析に基づいて、前記動きベクトルの第1の配列または前記動きベクトルの第2の配列の1つを動きベクトルの選択された配列として選択することと、を備え、
前記第3のピクセルデータを変更するために使用される前記動きベクトルの配列が、前記動きベクトルの選択された配列を含む、[5]に記載の方法。
[14]
前記動きベクトルの配列が動きベクトルの第1の配列であり、前記方法が、さらに、
第1の回転量だけ前記第1のフレームを回転させて第1の回転フレームを取得することと、
第2の回転量だけ前記第2のフレームを回転させて第2の回転フレームを取得することと、
前記GPUへの第2の入力として、
前記第1の回転フレームに関連付けられた第3のピクセルデータと、
前記第2の回転フレームに関連付けられた第4のピクセルデータと、を提供することと、
前記GPUから、前記第3のピクセルデータおよび前記第4のピクセルデータに少なくとも部分的に基づいて、動きベクトルの第2の配列を受信することと、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列における動きベクトルの方向または大きさの少なくとも1つの差異を判定することと、
前記差異に少なくとも部分的に基づいて動きベクトルの最終配列を生成することと、を備え、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの最終配列に少なくとも部分的に基づいている、[5]に記載の方法。
[15]
前記動きベクトルの配列が、第1の解像度での動きベクトルの第1の配列であり、前記方法が、さらに、
前記動きベクトルの第1の配列に少なくとも部分的に基づいて、前記ディスプレイにまたがる画像領域の第1の部分における動きの欠如を検出することと、
前記動きベクトルの第1の配列に少なくとも部分的に基づいて、前記画像領域の第2の部分におけるオブジェクトの動きを検出することと、
前記GPUへの追加入力として、
前記画像領域の前記第1の部分に対応する前記第1のピクセルデータの第1の部分と、
前記画像領域の前記第1の部分に対応する前記第2のピクセルデータの第1の部分と、
前記画像領域の前記第2の部分に対応する前記第1のピクセルデータの第2の部分と、
前記画像領域の前記第2の部分に対応する前記第2のピクセルデータの第2の部分と、を提供することと、
前記GPUから、前記第1のピクセルデータの前記第1の部分および前記第2のピクセルデータの前記第1の部分に少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信することであって、前記動きベクトルの第2の配列が、前記第1の解像度よりも高い解像度である第2の解像度で生成されることと、
前記GPUから、前記第1のピクセルデータの前記第2の部分および前記第2のピクセルデータの前記第2の部分に少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第3の配列を受信することであって、前記動きベクトルの第3の配列が、前記第2の解像度よりも低い解像度である第3の解像度で生成されることと、を備え、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの第2の配列および前記動きベクトルの第3の配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することを備える、[5]に記載の方法。
[16]
前記第3のピクセルデータを変更することが、さらに、深度バッファを利用して、前記変更された第3のピクセルデータのフレームバッファのピクセル値の最終セットを判定することを備える、[5]に記載の方法。
[17]
さらに、
前記動きベクトルの配列にオーバーレイされた減衰テクスチャを生成することと、
前記減衰テクスチャを使用して前記動きベクトルの配列の1つ以上の動きベクトルの大きさを減少させて、動きベクトルの変更された配列を取得することと、を備え、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの変更された配列に基づいて前記第3のピクセルデータを変更することを備える、[5]に記載の方法。
[18]
システムであって、
ディスプレイと、
グラフィックスプロセッシングユニット(GPU)と、
ロジックであって、
前記GPUへの入力として、
アプリケーションから受信した第1のフレームに関連付けられた第1のピクセルデータであって、前記第1のフレームが、以前にレンダリングされている、第1のピクセルデータと、
前記アプリケーションから受信した第2のフレームに関連付けられた第2のピクセルデータであって、前記第2のフレームが、前記第1のフレームの後に以前にレンダリングされている、第2のピクセルデータと、を提供し、
前記GPUから、前記第1のピクセルデータおよび前記第2のピクセルデータに少なくとも部分的に基づいて前記GPUのビデオ符号化器によって生成された動きベクトルの配列を受信し、
前記第2のピクセルデータに少なくとも部分的に基づいて、再投影フレームの第3のピクセルデータを生成し、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更して、前記再投影フレームの変更された第3のピクセルデータを取得し、
前記変更された第3のピクセルデータに少なくとも部分的に基づいて、前記ディスプレイ上に前記再投影フレームをレンダリングする、ように構成されたロジックと、を備える、システム。
[19]
前記ロジックが、さらに、
前記第2のピクセルデータがフレームバッファに出力される前に、前記第1のピクセルデータを前記フレームバッファに出力し、前記第1のフレームを前記第2のフレームの前にレンダリングさせ、
前記変更された第3のピクセルデータが前記フレームバッファに出力される前に、前記第2のピクセルデータを前記フレームバッファに出力し、前記第2のフレームを前記再投影フレームの前にレンダリングさせる、ように構成されている、[18]に記載のシステム。
[20]
前記ロジックが、さらに、
前記再投影フレームのレンダリングメッシュであって、複数の頂点を有するテッセレーションされたメッシュを含む前記レンダリングメッシュを生成し、
前記動きベクトルの配列の中の非ゼロの動きベクトルに少なくとも部分的に基づいて、前記複数の頂点のうちの頂点を、移動された頂点として前記レンダリングメッシュ内の異なる位置に移動し、前記頂点が、(i)前記非ゼロの動きベクトルの方向に、および(ii)前記非ゼロの動きベクトルの大きさに対応する量だけ移動される、ように構成されており、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記レンダリングメッシュの前記移動された頂点にしたがって前記第3のピクセルデータのピクセル値を移動して、前記再投影フレームの前記変更された第3のピクセルデータを取得することを備える、[18]に記載のシステム。
[21]
前記ディスプレイがヘッドマウントディスプレイ(HMD)であり、前記ロジックが、さらに、
前記HMDの頭部追跡モジュールによって提供される回転データに基づいて、前記HMDが前記第1のフレームのレンダリングと前記第2のフレームのレンダリングとの間で第1の向きから第2の向きに回転したことを判定し、
前記第1のフレーム内のシーンを前記HMDの前記第2の向きに位置合わせする変更された第1のピクセルデータを取得するために前記第1のピクセルデータ、または
前記第2のフレーム内のシーンを前記HMDの前記第1の向きに位置合わせする変更された第2のピクセルデータを取得するために前記第2のピクセルデータ、のうちの少なくとも1つを変更するように構成されており、
前記HMDの前記GPUへの前記入力として、前記第1のピクセルデータおよび前記第2のピクセルデータを提供することが、前記HMDの前記GPUへの前記入力として、前記変更された第1のピクセルデータまたは前記変更された第2のピクセルデータのうちの少なくとも1つを提供することを備える、[18]に記載のシステム。
[22]
前記ロジックが、さらに、
前記第1のピクセルデータと前記第2のピクセルデータとの間の色ピクセル値を比較して、前記動きベクトルの配列内の個々の動きベクトルに対応する個々の色差値を判定し、
閾値色差よりも小さい色差値に関連付けられている動きベクトルのサブセットを判定し、
前記動きベクトルのサブセットの大きさをゼロに減らして、動きベクトルの変更された配列を取得する、ように構成されており、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの変更された配列に基づいて前記第3のピクセルデータを変更することを備える、[18]に記載のシステム。
[23]
前記第1のピクセルデータが、第1の彩度データを含み、前記第2のピクセルデータが、第2の彩度データを含み、前記動きベクトルの配列が、前記第1の彩度データおよび前記第2の彩度データに少なくとも部分的に基づいて前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第1の配列であり、前記ロジックが、さらに、
前記GPUへの第2の入力として、
前記第1のフレームに関連付けられた第1の輝度データと、
前記第2のフレームに関連付けられた第2の輝度データと、を提供し、
前記GPUから、前記第1の輝度データおよび前記第2の輝度データに少なくとも部分的に基づいて、前記GPUの前記ビデオ符号化器によって生成された動きベクトルの第2の配列を受信し、
前記動きベクトルの第1の配列および前記動きベクトルの第2の配列の分析に基づいて、前記動きベクトルの第1の配列または前記動きベクトルの第2の配列の1つを動きベクトルの選択された配列として選択するように構成されており、
前記第3のピクセルデータを変更するために使用される前記動きベクトルの配列が、前記動きベクトルの選択された配列を含む、[18]に記載のシステム。
[24]
前記ロジックが、さらに、
動きベクトルの変更された配列を取得するために前記動きベクトルの配列に対するスカラー中央値フィルタ、または
前記動きベクトルの変更された配列を取得するために前記動きベクトルの配列に対する平均最大ぼかしフィルタ、のうちの少なくとも1つを適用するように構成されており、
前記動きベクトルの配列に少なくとも部分的に基づいて前記第3のピクセルデータを変更することが、前記動きベクトルの変更された配列に基づいて前記第3のピクセルデータを変更することを備える、[18]に記載のシステム。