(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-27
(45)【発行日】2023-12-05
(54)【発明の名称】アプリケーションレンダリング性能に基づく予測およびスロットル調整
(51)【国際特許分類】
G06T 15/20 20110101AFI20231128BHJP
H04N 5/66 20060101ALI20231128BHJP
G02B 27/02 20060101ALI20231128BHJP
【FI】
G06T15/20 500
H04N5/66 Z
G02B27/02 Z
(21)【出願番号】P 2021506489
(86)(22)【出願日】2019-08-06
(86)【国際出願番号】 US2019045290
(87)【国際公開番号】W WO2020033396
(87)【国際公開日】2020-02-13
【審査請求日】2022-07-29
(32)【優先日】2018-08-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】517160525
【氏名又は名称】バルブ コーポレーション
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】ライビー、アーロン
(72)【発明者】
【氏名】ヴラコス、アレックス
【審査官】渡部 幸和
(56)【参考文献】
【文献】特開2017-215875(JP,A)
【文献】特開2017-097122(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/20
H04N 5/66
G02B 27/02
(57)【特許請求の範囲】
【請求項1】
第1の予測レベルに設定された予測レベルを使用してヘッドマウントディスプレイ(HMD)に一連のフレームのうちの複数の第1のフレームをレンダリングすることであって、前記複数の第1のフレームのうちの第1のフレームに対して、前記第1の予測レベルに基づいて第1の将来の時間に対する前記HMDの姿勢データを1以上のプロセッサに予測させることを含むことと、
アプリケーションのレンダリング性能に関する第1の統計を決定することと、
少なくとも部分的に前記第1の統計に基づいて、前記予測レベルを前記第1の予測レベルから第2の予測レベルに変更することと、
前記第2の予測レベルに設定された前記予測レベルを使用して前記HMDに前記一連のフレームのうちの複数の第2のフレームをレンダリングすることであって、前記複数の第2のフレームのうちの第2のフレームに対して、前記第2の予測レベルに基づいて第2の将来の時間に対する前記HMDの前記姿勢データを前記1以上のプロセッサに予測させることを含むことと、
を具備する方法。
【請求項2】
前記予測レベルを変更することは、前記予測レベルを上げることを具備し、
前記方法は、
前記アプリケーションの前記レンダリング性能に関する第2の統計であって、前記第1の統計と異なる前記第2の統計を決定することと、
少なくとも部分的に前記第2の統計に基づいて、前記予測レベルを前記第2の予測レベルから前記第1の予測レベルに下げることと、
前記第1の予測レベルに設定された前記予測レベルを使用して前記HMDに前記一連のフレームのうちの複数の第3のフレームをレンダリングすることと、
をさらに具備する、請求項1の方法。
【請求項3】
前記第1の統計は、少なくとも部分的に、前記アプリケーションが前記複数の第1のフレームのうちの少なくとも1つをレンダリングし終えるのにかかった時間に基づいている、請求項1の方法。
【請求項4】
前記複数の第1のフレームは、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のフレームが前記HMDに1以上の対応する第1の画像を提示するために第1の標的回数使用されるように標的化されるように、前記第1のスロットルレベルは、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートを前記1以上のプロセッサにスロットルさせる、請求項1の方法。
【請求項5】
前記予測レベルを変更することに同期して、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに変更することをさらに具備する、請求項4の方法。
【請求項6】
前記予測レベルを変更することは、前記予測レベルを上げることを具備し、前記方法は、前記予測レベルを上げた後に、
前記アプリケーションの前記レンダリング性能に関する第2の統計であって、前記第1の統計と異なる前記第2の統計を決定することと、
少なくとも部分的に前記第2の統計に基づいて、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに下げることと、
をさらに具備する、請求項4の方法。
【請求項7】
前記第2の統計は、少なくとも部分的に、前記複数の第2のフレームのうちの少なくとも1つが前記HMDに1以上の対応する第2の画像を提示するために使用された回数に基づいている、請求項6の方法。
【請求項8】
前記第1の将来の時間は、前記第1のフレームに対する前記姿勢データを予測する第1の時間に関連する、請求項1の方法。
【請求項9】
1以上のプロセッサと、
前記1以上のプロセッサによって実行されると、前記1以上のプロセッサに、
第1の予測レベルに設定された予測レベルを使用してヘッドマウントディスプレイ(HMD)に一連のフレームのうちの複数の第1のフレームをレンダリングさせて、前記複数の第1のフレームのうちの第1のフレームに対して、前記第1の予測レベルに基づいて第1の将来の時間に対する前記HMDの姿勢データを予測させ、
アプリケーションのレンダリング性能に関する第1の統計を決定させ、
少なくとも部分的に前記第1の統計に基づいて、前記予測レベルを前記第1の予測レベルから第2の予測レベルに変更させ、
前記第2の予測レベルに設定された前記予測レベルを使用して前記HMDに前記一連のフレームのうちの複数の第2のフレームをレンダリングさせ、前記複数の第2のフレームのうちの第2のフレームに対して、前記第2の予測レベルに基づいて第2の将来の時間に対する前記HMDの前記姿勢データを予測させる、
コンピュータ実行可能命令を格納するメモリと、
を具備するシステム。
【請求項10】
前記第1の統計は、少なくとも部分的に、前記アプリケーションが前記複数の第1のフレームのうちの少なくとも1つをレンダリングし終えるのにかかった時間に基づいている、請求項9のシステム。
【請求項11】
前記複数の第1のフレームは、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のフレームが前記HMDに1以上の対応する第1の画像を提示するために第1の標的回数使用されるように標的化されるように、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせる、請求項9のシステム。
【請求項12】
前記コンピュータ実行可能命令は、前記1以上のプロセッサによって実行されると、前記1以上のプロセッサに、さらに、前記予測レベルを変更することに同期して、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに変更させる、
請求項11のシステム。
【請求項13】
前記予測レベルを変更することは、前記
予測レベルを下げることを具備し、前記予測レベルおよび前記スロットルレベルは、同じスケールを使用して独立して調整可能であり、
前記コンピュータ実行可能命令は、前記1以上のプロセッサによって実行されると、前記1以上のプロセッサに、さらに、
前記予測レベルおよび前記スロットルレベルが前記同じスケールで同じレベルに設定されていないことを決定させ、
前記
予測レベルを下げることは、少なくとも部分的に、前記予測レベルおよび前記スロットルレベルが前記同じレベルに設定されていないことを決定することに基づいて、前記
スロットルレベルを下げることなく、発生する、
請求項11のシステム。
【請求項14】
前記第1の将来の時間は、前記第1のフレームに対する前記姿勢データを予測する第1の時間に対する、将来の垂直同期(VSync)間隔の第1の標的数に対応する時間である、請求項9のシステム。
【請求項15】
第1のスロットルレベルに設定されたスロットルレベルを使用してヘッドマウントディスプレイ(HMD)に一連のフレームのうちの複数の第1のフレームをレンダリングすることであって、前記複数の第1のフレームのうちの第1のフレームが前記HMDに1以上の対応する第1の画像を提示するために第1の標的回数使用されるように標的化されるように、前記第1のスロットルレベルは、1以上のプロセッサに、前記HMDのリフレッシュレートに対してアプリケーションのフレームレートをスロットルさせることと、
前記アプリケーションのレンダリング性能に関する第1の統計を決定することと、
少なくとも部分的に第1の統計に基づいて、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに変更することと、
前記第2のスロットルレベルに設定された前記スロットルレベルを使用して前記HMDに前記一連のフレームのうちの複数の第2のフレームをレンダリングすることであって、
前記複数の第2のフレームのうちの第2のフレームが前記HMDに対応する第2の画像を提示するために第2の標的回数使用されるように標的化されるように、前記第2のスロットルレベルは、前記1以上のプロセッサに、前記HMDのリフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルさせることと、
を具備する方法。
【請求項16】
前記
スロットルレベルを変更することは前記
スロットルレベルを上げることを具備し、前記第2の標的回数は前記第1の標的回数より大きく、前記方法は、
前記アプリケーションの前記レンダリング性能に関する第2の統計であって、前記第1の統計と異なる前記第2の統計を決定することと、
少なくとも部分的に前記第2の統計に基づいて、前記スロットルレベルを前記第2のスロットルレベルから前記第1のスロットルレベルに下げることと、
前記第1のスロットルレベルに設定された前記スロットルレベルを使用して前記HMDに前記一連のフレームのうちの複数の第3のフレームをレンダリングすることと、
をさらに具備する、請求項15の方法。
【請求項17】
前記第1の統計は、少なくとも部分的に、前記複数の第1のフレームが前記HMDに前記対応する第1の画像のうちの複数の画像を提示するために使用された回数に基づいている、請求項15の方法。
【請求項18】
前記複数の第1のフレームは、第1の予測レベルに設定された予測レベルを使用してレンダリングされ、前記第1のフレームに対して、前記1以上のプロセッサに、前記第1の予測レベルに基づいて第1の将来の時間に対する前記HMDの姿勢データを予測させることを含む、請求項15の方法。
【請求項19】
前記スロットルレベルを変更することに同期して、前記予測レベルを前記第1の予測レベルから第2の予測レベルに変更することをさらに具備する、請求項18の方法。
【請求項20】
前記スロットルレベルを変更することは前記スロットルレベルを上げることを具備し、前記第2の標的回数は前記第1の標的回数より大きく、前記方法は、前記スロットルレベルを上げた後に、
前記アプリケーションの前記レンダリング性能に関する第2の統計であって、前記第1の統計と異なる前記第2の統計を決定することと、
少なくとも部分的に前記第2の統計に基づいて、前記予測レベルを前記第1の予測レベルか
ら第2の予測レベルに上げることと、
をさらに具備する請求項18の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
本出願は、2018年8月6日出願の「PREDICTION AND THROTTLING ADJUSTMENTS BASED ON APPLICATION RENDERING PERFORMANCE」と題された米国特許出願第16/056,277号の優先権を主張するPCT出願であり、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0002】
バーチャルリアリティ(VR)システムは、ビデオゲーム業界の内外の両方で使用されている。VRヘッドセットに内蔵されているようなVRシステム用ディスプレイは、通常、VRアプリケーションに好適である最小リフレッシュレートで動作する。例えば、90ヘルツ(Hz)はVRディスプレイの一般的なリフレッシュレートである。「ライブレンダリング」シナリオでは、ビデオゲームなどのグラフィックベースのアプリケーションは、ディスプレイのリフレッシュレートに適合するフレームレートでレンダリングするためのフレームを出力する。つまり、アプリケーションから受信された新しいフレーム(本明細書では「実際のフレーム」と称する)は、画面が更新されるたびに表示される。そのようなライブレンダリングシナリオは、多くの場合、アプリケーションが「フレームレートに達する」または「フレームレートにヒットする」と称される。
【0003】
実際には、アプリケーションは、様々な理由で常にフレームレートに達するとは限らない。例えば、アプリケーションがフレームを断続的にドロップする場合があり、および/またはアプリケーションが一時的により遅いレートでフレームを出力する場合がある(例えば、理想的なフレームレートが90フレーム/秒の場合は45フレーム/秒)。アプリケーションがフレームレートに達していない状況では、「回転のみの再投影」と呼ばれる技術が、ユーザの頭部の回転を考慮するように、欠落しているフレームを再投影されたフレームで置き換えるために使用され得、これは、アプリケーションがフレームレートに達しているかのようにユーザに見せる。例えば、再投影しない場合、アプリケーションからのフレームレートが不足すると、ゲーム内でスタッタまたはヒッチが発生する場合がある。ユーザが仮想環境に完全に没入しているVRアプリケーションでは、アプリケーションがフレームレートに達しておらず、欠落しているフレームを補償するための再投影が存在しない場合、ユーザは、不快になり得る。したがって、再投影は、アプリケーションがフレームレートに達していないときにユーザ体験をより良好にすることを可能にする技術である。アプリケーションが理想的なフレームレートの半分でフレームを出力している例を検討する(例えば、90フレーム/秒が理想的なフレームレートである場合は、45フレーム/秒)。この例では、直近でレンダリングされた実際のフレームの画素データを使用して、シーンを変換する再投影されたフレームを作成し(例えば、回転および再投影の計算を通して)、再投影されたシーンをユーザの現在の頭の配向に適合させることで、1つおきにフレームを再投影させることができる。これは、ユーザの頭部の回転を考慮して予想されるやり方でシーンが動いているようにユーザに見えるようにする。
【0004】
回転のみの再投影は、ゲーム内のスタッタまたはヒッチを軽減するが、少なくとも、低持続性ディスプレイを使用するVRシステム(例えば、ディスプレイがフレーム時間のうちのごくわずかな間、照明される場合)では、頭部の回転中に、回転のみの再投影自体の望ましくない視覚的アーティファクトを生成する。例えば、回転のみの再投影は、頭部の回転を考慮するが、フレーム間でシーン内を移動またはアニメ化するオブジェクトを考慮しない。これは、移動しているかまたはアニメ化しているオブジェクトに関して、「ジャダ」と呼ばれる望ましくない視覚的アーティファクトを発生させ得る。ジャダは、移動しているオブジェクト(例えば、画面上を移動する弾丸またはボール)が2つの場所の間で(またはそれ自体から離れて)フレーム間で跳ね返るように見える、「ダブルゴースト効果」をユーザに知覚させる。したがって、再投影が使用されている間にユーザがその頭を回転させると、シーン内の任意の移動またはアニメ化しているオブジェクトがジャダすることになる。アプリケーションのレンダリング性能が予測不可能であるため、アプリケーションのフレームレートは、量を変えることによって、およびランダムな時間で、ディスプレイの垂直同期(VSync)信号と位相が同じである、および異なる傾向があり、上記の移動しているオブジェクトのジャダは、視認しているユーザにとって不安定で、かつ耐えられないものなり得る。
【0005】
本明細書では、これらのシステムおよび他のシステムを改善および強化するための技術的解決法を提供する。
【図面の簡単な説明】
【0006】
詳細な説明を、添付の図面を参照して説明する。図では、参照番号の左端の数字は、参照番号が最初に現れる図を指す。異なる図における同じ参照番号の使用は、類似または同一の構成要素または機能を示す。
【
図1】アプリケーションのレンダリング性能に基づいて予測レベルおよびスロットルレベルを調整するための例示的な技術を例示する図である。
【
図2】アプリケーションのレンダリング性能に関連する統計を記憶するために使用され得る例示的なリングバッファを概念的に例示する図であり、統計は、予測およびスロットルレベルを調整するか否か、およびいつ調整するかを決定するために使用可能である。
【
図3A】本明細書に開示される実施形態による、ヘッドマウントディスプレイ(HMD)上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセスのフロー図を例示する。
【
図3B】本明細書に開示される実施形態による、ヘッドマウントディスプレイ(HMD)上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセスのフロー図を例示する。
【
図4】本明細書に開示される実施形態による、HMD上にフレームをレンダリングしている間に、予測およびスロットルレベルを下げるか否か、およびいつ下げるかを決定するための例示的なプロセスのフロー図である。
【
図5】本明細書に開示される技術が実装され得る、VRヘッドセットなどのウェアラブルデバイスの例示的な構成要素を例示する。
【発明を実施するための形態】
【0007】
本明細書では、とりわけ、アプリケーションのレンダリング性能に基づいて、フレームがヘッドマウントディスプレイ(HMD)にレンダリングされるときに、予測レベルおよびスロットルレベルを調整する技術が説明される。予測レベルおよびスロットルレベルの調整は、アプリケーションの性能が低下したとき(例えば、アプリケーションがフレームレートに達していないとき)、HMD上に提示される画像に現れ得る望ましくない視覚的アーティファクトを軽減する。
【0008】
HMDは、ユーザが仮想現実(VR)環境または拡張現実(AR)環境に没入する目的で、ユーザによって着用され得る。HMDの1つ以上のディスプレイパネルは、アプリケーション(例えば、ビデオゲーム)によって出力されたフレームに基づいて画像をレンダリングし、これらの画像は、HMDに含まれる光学系を通してユーザに表示され、ユーザは、ユーザがVRまたはAR環境に没入しているかのように画像を知覚する。このように、HMDは、「再投影」と呼ばれる技術を利用して、フレームレートに達していないアプリケーションを補償し得る。例えば、再投影されたフレームは、実際のフレーム間でレンダリングされて理想的なフレームレートを達成し得、各再投影されたフレームは、アプリケーションから受信された最近レンダリングされた実際のフレーム(最も直近にレンダリングされた実際のフレーム)の画素データを使用して生成され得る。再投影されたフレームでは、以前の実際のフレームでレンダリングされたシーンが、ユーザの頭部の回転を考慮したやり方で変換される(例えば、回転および再投影の計算を通して)。アプリケーションのレンダリング性能が特定の点まで、および/または不規則に低下した場合、ジャダなどの望ましくない視覚的アーティファクトが、視認しているユーザが耐えることができない様式で現れ得る。
【0009】
本明細書では、予測レベルおよびスロットルレベルへのリアルタイム調整(上または下)を通じて、望ましくない視覚的アーティファクトを軽減するための技術が説明される。予測レベルは、どのくらい遠い将来における、HMDの姿勢のセット(姿勢データ)が予測されるかに関する。例えば、アプリケーションがフレームレートに達しているとき、フレームのレンダリングに使用する姿勢データをアプリケーションに提供する、コンポジタは、HMDの姿勢データを、姿勢データを予測する時間に対する、将来の2つの垂直同期(VSync)間隔に対応する時間について予測し得る。したがって、予測レベルは、この基本予測レベルから1つのVSync間隔の増分で上げられ得、そのため、コンポジタは、将来の3つのVSync間隔、将来の4つのVSync間隔などの、将来の姿勢データを予測することができる。これはまた、アプリケーションがレンダリングしようとしている所与のフレームの姿勢データをコンポジタが予測する将来までのフレーム数を調整することとして考えられ得る。したがって、アプリケーションがフレームレートに達しているとき、コンポジタは、将来までの1フレーム先の姿勢データを予測し得、予測レベルがその基本予測レベルから上げられた場合、コンポジタは、将来までの2フレーム先、将来までの3フレーム先などの姿勢データを予測し得る。
【0010】
このように予測レベルを調整するための例示的な理由は、次のとおりである。アプリケーションがフレームレートに達していない(例えば、各フレームをレンダリングするために複数のVSync間隔をとる)場合)、個々のフレームは、ユーザに画像を表示するために複数回使用される。さらに、予測された時間以外の時間にフレームを表示することは、コンポジタに、ジャダを軽減するために再投影を使用させる。しかしながら、再投影は、フレーム間のシーン内で移動またはアニメ化するオブジェクトを考慮しないため、予測は、この前後関係での再投影の使用によって引き起こされる望ましくない視覚的アーティファクトを軽減することを助ける。例示的な例では、フレームがレンダリングするために2つのVSync間隔をとる場合、ほとんどの場合、フレームもまた、ユーザに画像を表示するために2回使用されることになる。予測された姿勢が、個々のフレームターゲットを1回レンダリングするために使用されたため、その時間は、フレームがユーザに画像を提示するために使用される2回のうちの1回に対してのみ正しい。とはいえ、使用される両方の時間で時間が正しくない可能性がある。例えば、所与のフレームの姿勢データが将来の1つのVSync間隔で予測され、かつアプリケーションがフレームをレンダリングするために2つのVSync間隔をとった場合、フレームは、2つの再投影されたフレームを生成するために2回使用されることになる。予測レベルを上げて、将来の1つの追加のVSync間隔(例えば、2つのVSync間隔)で姿勢データを予測することによって、姿勢データは、フレームが使用される初回に正しいことになり、このシナリオでは、フレームは、単一の再投影されたフレームに対して1回(2回ではなく)使用されることになる。
【0011】
スロットルレベルは、アプリケーションのフレームレートがどの程度スロットルされるかに関する。例えば、アプリケーションがフレームレートに達しているとき、コンポジタは、アプリケーションのフレームレートをスロットルして、HMDのリフレッシュレート(例えば、90Hz)と一致させ得る。したがって、スロットルレベルは、この基本スロットルレベルから段階的に上げられ得、そのため、コンポジタは、アプリケーションのフレームレートをHMDのリフレッシュレートの半分、HMDのリフレッシュレートの3分の1などにスロットするなど、アプリケーションのフレームレートをますますスロットルする。これはまた、アプリケーションからの各実際のフレームがHMD上に画像を提示する回数を調整することとして考えられ得る。したがって、アプリケーションがフレームレートに達しているとき、コンポジタは、アプリケーションによって出力された各フレーム(例えば、各実際のフレーム)を1回使用して、対応する画像をHMD上に提示する。スロットルレベルがその基本スロットルレベルから上げられた場合、コンポジタは、HMD上に複数の対応する画像を提示するために、各実際のフレームを2回、3回など使用し得る。例えば、アプリケーションのフレームレートがHMDのリフレッシュレートの半分にスロットルされている場合、アプリケーションからの個々のフレームは、2回使用され得、そのうちの少なくとも1回は、アプリケーションによって出力された実際のフレーム間のギャップを埋める再投影されたフレームを生成するために使用される。
【0012】
このようにスロットルレベルを調整するための例示的な理由は、次のとおりである。ほとんどのアプリケーションは、可変フレームデルタを特に良好に取り扱わず、それらを正しく取り扱ったとしても、ユーザ体験は、生成されたフレームが時間的に等間隔である場合に、より良好であり、全体的に平滑な体験を生み出す。しかしながら、フレームがレンダリングするために1つよりもわずかに多いVSync間隔をとる状態が間に存在する。この状態でも、ほとんどのフレームが依然として1回表示される。しかしながら、このカスケードは、単一のフレームが2回表示され、かつサイクルが再開するまで、各フレームの終了を少し遅らせる。これらの複数回表示されるフレームについて、アプリケーションのスロットルを即座に開始するよりもカスケードを可能にする方が、ユーザ体験がより良好である閾値が存在する。したがって、スロットルレベルを上げることは、この閾値が超えたときに役立つ。
【0013】
例示的なプロセスでは、一連のフレームのうちの第1のフレームが、第1の予測レベルに設定された予測レベルおよび第1のスロットルレベルに設定されたスロットルレベルを使用して、HMD上にレンダリングされる。第1の予測レベルは、HMDのコンポジタに、HMDの姿勢データを、第1のフレームの個々のフレームの姿勢データを予測する時間に対する、将来のVSync間隔の第1の標的数(例えば、2つのVSync間隔)に対応する時間について予測させる。次いで、コンポジタは、第1のフレームの過去のN個のレンダリングされたフレーム(Nは、任意の好適な数)の中から、遅延フレームの数が、遅延フレームの閾値数を満たすかまたは超えるか否かを決定し得る。ここで、遅延フレームは、HMDのグラフィックスプロセッシングユニット(GPU)を使用してレンダリングを終了するために、アプリケーション用のVSync間隔の第1の標的数よりも多くを要したフレームである。遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えた場合、コンポジタは、予測レベルを第1の予測レベルから第2のより大きい予測レベルに上げ得、一連のフレームのうちの第2のフレームが、その後、第2の予測レベルに設定された予測レベルを使用してレンダリングされる。第2の予測レベルは、第1の予測レベルと比較して、コンポジタに、より遠い将来の時間の姿勢データを予測させ得る。例えば、第2の予測レベルでは、コンポジタは、VSync間隔の第1の標的数(例えば、2つのVSync間隔)よりも大きい、将来の、3つのVSync間隔などの、VSync間隔の第2の標的数に対応する時間の姿勢データを予測し得る。
【0014】
スロットルレベルは、予測レベルの上昇とは独立して、または予測レベルの上昇と同期して上げられ得る。スロットルレベルが予測レベルの上昇とは独立して上げられるとき、スロットルレベルは、過去のM個のレンダリングされたフレーム(Mは、任意の好適な数)の中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えることの決定に基づいて、上げられ得る。ここで、過剰提示されたフレームは、現在のスロットルレベルの標的回数よりも多く使用されたフレームである。例えば、第1のスロットルレベルは、コンポジタに、アプリケーションのフレームレートをHMDのリフレッシュレートと一致させるようにスロットルさせ得、このことは、個々のフレームが、HMD上に対応する画像を提示するために、1回(第1の標的回数)使用されるように標的化されることを意味する。このシナリオでは、過剰提示されたフレームは、HMD上に対応する画像を提示するために2回以上多く(第1の標的回数よりも多く)使用されたフレームである。スロットルレベルは、過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えることの決定に基づいて、第1のスロットルレベルから第2のスロットルレベルに上げられ得、それによって、コンポジタに、アプリケーションのフレームレートをHMDのリフレッシュレートの数分の1(例えば、リフレッシュレートの半分)にスロットルさせる。そうでなければ、スロットルレベルは、予測レベルが上げられるときにいつでも、予測レベルと同期して上げられ得る。
【0015】
予測レベルは、フレームが少なくとも1つのVSync間隔だけ現在の予測よりも速くレンダリングを終了したという意味で「早期に」、アプリケーションが過去のP個の連続的にレンダリングされたフレーム(Pは、任意の好適な数)のレンダリングを終了した場合に、下げられ得る。例えば、現在の予測レベルが、コンポジタに将来までの3つ先のVSync間隔のHMDの姿勢データを予測させる第2の予測レベルに設定されている場合、フレームは、アプリケーションが2つのVSync間隔未満でフレームのレンダリングを終了した場合に、早期にレンダリングを終了したとみなされる。スロットルレベルは、スロットルレベルが予測レベルと等しい限り、予測レベルの低下と同期して下げられ得、そうでなければ、スロットルレベルは、スロットルレベルが予測レベル未満である場合、そのままになる。
【0016】
本明細書では、本明細書に開示される技術およびプロセスを実装するように構成されたシステム、例えば、ディスプレイシステム(例えば、HMD)を含むシステム、ならびに本明細書に開示される技術およびプロセスを実装するためのコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体もまた、開示される。本明細書に開示される技術およびシステムは、例として、ビデオゲームアプリケーション、特にVRゲームアプリケーションの文脈で議論されているが、本明細書に説明される技術およびシステムは、非限定的に、非VRアプリケーション(例えば、ARアプリケーション)、および/または産業機械アプリケーション、防衛アプリケーション、ロボットアプリケーションなどの非ゲームアプリケーションを含む、他のアプリケーションに利益を提供し得ることを理解されたい。
【0017】
図1は、アプリケーションのレンダリング性能に基づいて予測レベルおよびスロットルレベルを調整するための例示的な技術を例示する図である。
図1は、ユーザ102によって着用されたヘッドマウントディスプレイ(HMD)100を図示する。HMD100は、開示された技術を実装し得る例示的な「ディスプレイシステム」であるが、「ディスプレイシステム」の他のタイプおよび/または実装が、本明細書に説明される技術から利益を得ることができる。
図1の例のHMD100は、ステレオペアのディスプレイパネルの左ディスプレイパネルおよび右ディスプレイパネルなどの、複数のディスプレイパネルを含み得る。これらのディスプレイパネルは、HMD100を着用しているユーザ102によって視認可能である一連の画像フレーム(以下、「フレーム」と呼ぶ)を提示するために使用され得る。例は、2パネルHMD100を用いて説明されているが、HMD100は、単一のディスプレイパネルまたは3つ以上のディスプレイパネルを含み得ることを理解されたい。したがって、「ディスプレイパネル」という用語は、本明細書に使用される際、2パネルHMD100の一対のディスプレイパネルのいずれかのディスプレイパネルを指し得るか、または任意の数のディスプレイパネル(例えば、単一パネルHMD100またはマルチパネルHMD100)を有するHMD100の単一のディスプレイパネルを指し得る。2パネルHMD100では、ステレオフレームバッファは、例えば、HMD100の両方のディスプレイパネル上で2160×1200ピクセル(例えば、ディスプレイパネルあたり1080×1200ピクセル)をレンダリングし得る。
【0018】
HMD100は、HMD100のディスプレイパネル(複数可)上でのフレームの提示中に発光要素を利用して光を放出する発光ディスプレイなど、任意の好適なタイプのディスプレイ技術を利用するディスプレイパネルを含み得る。一例として、HMD100のディスプレイパネルは、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、無機発光ダイオード(ILED)ディスプレイ、またはHMDアプリケーションに対して好適なディスプレイ技術を利用する任意の他の好適なタイプのディスプレイを含み得る。いくつかの実施形態では、HMD100のディスプレイシステムは、低持続性ディスプレイシステムであり得、これは、発光要素が、ディスプレイパネル上に画像をレンダリングするために使用される各フレームに対して、フレーム時間のごく一部(例えば、11.11msのフレーム時間のうちの約1ミリ秒(ms))の間、光を放出することを意味する。
【0019】
HMD100は、VRゲームシステムで使用するためなど、VRシステムで使用するためのVRヘッドセットを表し得る。しかしながら、HMD100は、追加的に、または代替的に、ARアプリケーションで使用するためのARヘッドセットとして実装され得る。ARでは、ユーザ102は、実世界環境上に重ね合わされた仮想オブジェクトを見るが、VRでは、ユーザ102は、実世界環境を見ることはなく、HMD100のディスプレイパネルおよび光学系(例えば、レンズ)を介して知覚されるような仮想環境に完全に没入する。本明細書で説明する例は、主にVRベースのHMD100に関係するが、HMD100は、VRアプリケーションでの実装に限定されないことを理解されたい。
【0020】
一般に、HMD100自体、またはHMD100と関連付けられ、かつそれに連結されたコンピューティングデバイス(例えば、パーソナルコンピュータ(PC)、ゲームコンソールなど)などの、コンピューティングデバイス上で実行されるアプリケーション104は、一連のフレーム106(1)、106(2)、106(3)など(まとめて106)を出力するように構成され得る。一連のフレーム106は、最終的に、HMD100のディスプレイパネル(複数可)上にレンダリングされる。いくつかの実施形態では、フレーム106がHMD100のディスプレイパネル上にレンダリングされる前に標的にレンダリングされ得るように、オフスクリーンレンダリングが利用される。したがって、「レンダリング」は、本明細書に使用される際、ディスプレイ以外の標的への、ディスプレイ自体におけるレンダリングの前のレンダリング、および/またはディスプレイ上でのレンダリング(例えば、異なる標的へのオフスクリーンレンダリングなしの、またはその後の)
【0021】
図1の例は、グラフィックスプロセッシングユニット(GPU)タイムライン108上の3つの例示的なフレーム106(1)、106(2)、および106(3)を図示して、レンダリングを終了するフレーム106とHMD100の垂直同期(VSync)信号110との間でタイミングがどのように変化し得るかを例示する。ここで、アプリケーション104は、GPUタイムライン108上で左から右に、順番に、最初にフレーム106(1)、次いで、フレーム106(2)、次いで、フレーム106(3)をレンダリングする。GPUタイムライン108はまた、各VSync間隔116の終端に向かって、HMD100のコンポジタ114のレンダリング作業負荷112も示す。
【0022】
一般に、HMD100のディスプレイシステムは、ディスプレイ関連のイベントをディスプレイのリフレッシュサイクルに同期させるためにVSync信号110を利用し得る。例えば、HMD100が90Hzのリフレッシュレートを有する場合、VSync信号110は、1秒間に90回のレートでパルス送信する。90Hzのリフレッシュレートでは、VSync間隔116は、約11.11msの長さである。90HzのHMD100のVSync間隔116は、11ms間隔と呼ばれることがあるが、VSync間隔116は、90Hzディスプレイシステムの場合、1000ミリ秒÷90として計算され得、VSync間隔116の境界におけるVSync信号110(1)は、HMD100のディスプレイパネルのフラッシュを表し(例えば、パネルがオンになり、ユーザ102が画像を見たとき)、これは、
図1がVSync信号110をGPUタイムライン108上の瞬間的な時点として例示しているにもかかわらず、フレームレートと比較して非常に短いある期間、またはVSync間隔116の時間にわたって発生し得る。
【0023】
図1に示されるフレーム106は、ビデオゲームアプリケーションまたは任意の他のタイプのグラフィックスベースアプリケーションを表し得るアプリケーション104から出力されるという意味で「実際の」フレームを表すことを意味する。アプリケーション104は、個々のフレーム106をレンダリングするために画素データをフレームバッファに出力するグラフィックスパイプラインで実行され得る。各フレーム106の画素データは、いくつかの実施形態では、画素ごとの値(例えば、色値)の2次元配列を含み得る。いくつかの実施形態では、画素データは、深度値などの追加のデータまたはメタデータをさらに含む。いくつかの実施形態では、画素データは、単一の色およびアルファ値のセットによって表される各画素のデータを含み得る(例えば、赤チャネルの1つの色値、緑チャネルの1つの色値、青チャネルの1つの色値、および1つ以上のアルファチャネルの1つ以上の値)。この画素データは、フレームバッファに出力されて、HMD100のディスプレイパネル(複数可)上の画像に所望の視覚効果を提示し得る。
【0024】
実行中、HMD100のヘッドトラッキングモジュールは、HMD100の位置および姿勢に関するデータを生成し得る。コンポジタ114は、将来のある時点におけるHMD100の姿勢データ(例えば、姿勢のセット)を予測し、この予測された姿勢データをアプリケーション104に提供して、ユーザ102の予測された頭部の位置/姿勢に従って、一連のフレーム106内の次のフレーム106をどのようにレンダリングするかに関してアプリケーション104に通知するように構成される。コンポジタ114が、HMD100の現在の姿勢の代わりに、将来のHMD100の姿勢データを予測する理由は、所与のフレーム106(アプリケーション104がフレームレートに達していると仮定する)が、将来のある時点でHMD100のディスプレイパネル(複数可)上の画像として実際に提示されることになるためである(例えば、姿勢データがアプリケーション104に提供された時の約25ms後の時間)。すなわち、所与のフレーム106に対応する画素データを有するディスプレイは、そのフレーム106をレンダリングするために姿勢データがアプリケーション104に提供された約25ms後に、そのフレーム106に対する光子を実際に放出する。姿勢データを事前にアプリケーション104に提供することは、ユーザ104がオブジェクト(静止および移動しているオブジェクトの両方)を含む仮想環境を見回しているとユーザ104に信じさせるやり方で、アプリケーション104がHMD100上で画像をレンダリングするための画素データを出力することを可能にする。アプリケーションがフレームレートに達している場合、静止および移動しているオブジェクトの両方が、ユーザ102の頭部の動きと共に、予想される様式で、シーン内で移動するように知覚される。
【0025】
HMD100のグラフィックスロジックは、非同期であってもよく、または同期であってもよい。非同期システムでは、コンポジタ114は、HMD100のGPU上のアプリケーション104とは別個に(別個の非同期スレッド上で)実行される。例えば、コンポジタ114は、フレーム106(1)をレンダリングするための姿勢データ(VSync3 110(3)に予測される)をアプリケーション104に提供し得る。コンポジタの作業負荷112(1)が開始する前にアプリケーション104がレンダリングを終了すると仮定すると、コンポジタ114は、アプリケーション104からフレーム106(1)(例えば、左右の画像フレーム)を受け取り、HMD100のディスプレイパネル上へのバックバッファ内にフレーム106を歪ませるように構成される。例えば、コンポジタ114は、アプリケーション104によって出力されたフレーム106(1)に基づいて、HMD100上に最終画像をレンダリングする前に、色収差、パネルマスキングなどを実施し得る。コンポジタ114は、高優先度コンテキストモードで実行し得、これは、コンポジタ114がその次の作業負荷112(1)を開始する時間になると、GPUドライバは、コンポジタ114がアプリケーション104をプリエンプトすることを可能にする(例えば、アプリケーション104が依然としてフレーム106をレンダリングしている場合、アプリケーション104がレンダリングすることを中断させる、および/またはアプリケーション104が次のフレーム106のレンダリングを開始することを防止する)ことを意味する。コンポジタ114は、アプリケーション104で何が起こっているかにかかわらず、その作業112を行うために、各VSync間隔116の終端にタイムスロット(平均で最大1ms)を割り当て得る。したがって、全てのVSync信号110において、コンポジタ114は、コンポジタ114がアプリケーション106から取得し得る最良のフレーム106(例えば、フレッシュ/新しいフレーム106、または以前にレンダリングされたフレーム106のいずれか)を取得するという意味で「何か」をレンダリングし、コンポジタ114は、そのフレーム106と関連付けられた画素データを使用して、HMD100のディスプレイパネル(複数可)上に出力するために画素データをフレームバッファに入れる。
【0026】
いくつかの実施形態では、コンポジタ114は、定数バッファ内の現在の値のコピーを作成して、どのフレーム106を次のVSync信号110におけるレンダリングに使用するかを決定し得る。すなわち、コンポジタ114は、定数バッファ内の値に対応するフレーム106を取得し、フレーム106がどのVSync信号110を標的化したかを決定し、次に来るVSync信号110と同じでない場合、コンポジタ114は、再投影を利用して、フレーム106の画素データを修正して、次のVSync信号110について予測された姿勢データと一致させる。各VSync間隔116に対する異なる画素データを出力するコンポジタ114の機能は、どのような場合でも、アプリケーション104がフレームレートに達していないときに、全てを「ライブ」に保ち、HMD100上にレンダリングされた画像がひどくヒッチしないように保つ機構である。
【0027】
図1の例では、アプリケーション104がフレーム106(0)(図示せず)のレンダリングをちょうど終了し、フレーム106(1)のレンダリングを開始する準備ができている場合を考える。この時点で、アプリケーション104は、フレーム106(1)のレンダリングに使用するために、コンポジタ114から姿勢データを受信するための関数を呼び出し得る。コンポジタは、第1のレベルに設定された現在の予測レベル(例えば、予測レベル=0)において、第1のフレーム106(1)の姿勢データを予測する時間に対する、将来の2つのVSync間隔116であり得る、将来のVSync間隔116の第1の標的数に対応する時間について、HMD100の姿勢データを予測する。例えば、コンポジタ114は、VSync3 110(3)に対応する時点におけるHMD100の予測された将来の姿勢に従って、HMD100の姿勢データを予測し得る。例えば、106(1)は、VSync2 110(2)でスキャンアウトを開始し得、ディスプレイパネル(複数可)が証明される前にHMD100のディスプレイパネル(複数可)に読み込むためにさらに別の完全なVSync間隔116を要し得る。ディスプレイパネル(複数可)から放出された光子がディスプレイ内にスキャンアウトされているとき(短い整定期間の後)にVSync間隔116のサブセットにわたって上から下にスキャンすることを意味するローリング照明(グローバル点滅照明の代わりに)ディスプレイをHMD100が使用する場合、コンポジタ114は、スキャンアウト期間の中間点に対応する時間のHMD100の姿勢データを予測し得、それにより、ユーザの視野の中心にある要素が最も安定する。
【0028】
アプリケーション104は、この姿勢データを使用して、姿勢データに従ってフレーム106(1)をレンダリングし得る。アプリケーション104は、コンポジタ114が以前のフレーム106(0)(図示せず)の作業112(0)を終了するとすぐに、フレーム106(1)のレンダリングを開始し得る。あるいは、HMD100のGPUが複数の計算リソースをサポートする同期システムでは、コンポジタ114は、第1の計算リソース上でその作業112を実施し得、アプリケーション104は、コンポジタ114がその作業112を実施している間に、第2の計算リソース上でレンダリングを開始し得る。いずれの場合でも、
図1は、コンポジタ作業112(1)がVSync2 110(2)にヒットするようにスケジュールされた時間の前に、アプリケーション104がフレーム106(1)のレンダリングを終了する例を示している。アプリケーション104は、フレーム106(1)のレンダリングを終了すると、GPU上の定数バッファ内の単一の整数を増分し得る。この定数バッファは、最も直近にレンダリングされたフレーム106に対応するいくつかのフレーム(例えば、0、1、および2の整数を含む3つのフレーム)のデータを記憶し得る。コンポジタ114は、定数バッファ内の整数の値に基づいて、使用する準備ができている最新のフレームを取得し得る。コンポジタ114は、整数値のコピーを作成し、コピーされたインデックス値を用いて定数バッファを維持し、コピーされたインデックス値は、コンポジタ作業負荷112(1)に使用され、フレーム106(1)は、標的化されたVSync2 110(2)の前にレンダリングを終了される。
【0029】
コンポジタ114がその作業112(1)を終えると、コンポジタ114は、定数バッファをHMD100のCPUにコピーし得、このことは、定数バッファインデックスに対応するフレーム106(1)がVSync2 110(2)でレンダリングされたことをHMD100のCPUが決定することを可能にする。このようにして、コンポジタ114は、フレーム106(1)のレンダリングを終了するためにアプリケーション104が要したVSync間隔116の数を120においてトラッキングすることによって、118においてアプリケーションのレンダリング性能を監視し得る。この場合、アプリケーション116は、フレーム106(1)をレンダリングするために1つのVSync間隔116を要した。コンポジタ114はまた、フレーム106(1)がHMD100上に1つまたは複数の画像を提示するために使用された回数を122においてトラッキングすることによって、118においてアプリケーションのレンダリング性能を監視し得る。この場合、フレーム106(1)は、HMD100上に2つの対応する画像を提示するために2回使用される。これは、コンポジタ114がVSync3 110(3)の間にその作業112(2)を実施するためのスケジュールされた時間の前に、アプリケーション104が、次のフレーム106(2)のレンダリングを終了しなかったためであり、その結果、コンポジタ114は、フレーム106(1)に対応する定数バッファから最新の値を取得し、フレーム106(1)がVSync2 110(2)に標的化されたことを決定し、再投影を実装して、再投影変換を使用してフレーム106(1)の画素データを修正して、VSync3 110(3)について予測された姿勢データ用に調整されたVSync3 110(3)における再投影されたフレーム(フレーム106(1)に基づいて)をレンダリングする。次のVSync間隔116では、コンポジタ114がその作業112(3)を開始するとき、コンポジタ114は、フレーム106(2)に対応する定数バッファから最新の整数値を取得し得、フレーム106(2)がVSync3 110(3)に標的化されたことを決定し得、再投影されたフレーム(フレーム106(2)に基づいて)をVSync4 110(4)で生成し得る。
【0030】
これは、一連のフレーム106がレンダリングされるときに継続し得、コンポジタ114は、アプリケーション104から出力されたフレーム106に基づいて、HMD100上でどのように画素データを提示するかを決定する。このようにして、コンポジタ114は、118においてアプリケーションレンダリング性能を継続的に監視し得、ブロック120および122に示されるものなどの統計をトラッキングし得る。
【0031】
124では、コンポジタ114は、ブロック120および122でトラッキングされた統計から決定される、アプリケーション104のレンダリング性能に従って、予測レベル126および/またはスロットルレベル128を調整し得る。
図1の例は、どのように予測レベル126およびスロットルレベル128が、同じスケール(例えば、第1のレベル、第2のレベル、第3のレベル、および第4のレベルを表す0から3)を使用して独立して調整可能であり得るかを示す。このように、予測レベル126が第1のレベル(例えば、0)に設定され、スロットルレベル128が第1のレベル(例えば、0)に設定される場合、予測レベル126およびスロットルレベル128は、同じレベルに設定されるとみなされる。これらのレベルは、第1のレベル(例えば、0)が最小レベルを表し、レベルが第2のレベル(例えば、1)に、次いで、第3のレベル(例えば、2)に、次いで、第4のレベル(例えば、3)に増分され得るように、増分され得、第4のレベルは、予測レベル126およびスロットルレベル128がそれを超えて上がることができない最大レベルを表し得る。しかしながら、最大レベルの形態での制限は、任意であり、予測レベル126およびスロットルレベル128は、理論的には、基本レベルから無限の数のより高いレベルに調整可能であり得ることを理解されたい。とはいえ、実際には、予測レベル126を上げる能力は、HMD100センサ(トラッキング方法など)および人類生物学の制約を考慮して、将来を効果的に予測する能力によって本質的に制限される。これは、VSync間隔116の関数でもある(例えば、より高いネイティブフレームレートのHMD100は、より短いVSync間隔116を有し、このことは、同様の予測限界を達成するためのより高い最大値を結果的にもたらす)。
【0032】
上述のように、予測レベル126は、どのくらい遠い将来における、HMD100の姿勢のセット(姿勢データ)が予測されるかに関する。例えば、予測レベル126が第1のレベル(例えば、0)に設定されると、コンポジタ114は、HMD100の姿勢データを、姿勢データを予測する時間に対する、将来の2つのVSync間隔116に対応する時間について予測し得る。
図1の例では、これは、コンポジタ114が、VSync3 110(3)に対応する時間の姿勢データを予測し、フレーム106(1)をレンダリングするためにその姿勢データをアプリケーション104に提供し得ることを意味する。スロットルレベル128は、アプリケーション104のフレームレートがどの程度スロットルされるかに関係する。例えば、スロットルレベル128が第1のレベル(例えば、0)に設定されるとき、コンポジタ114は、HMDのリフレッシュレート(例えば、90Hz)と一致するようにアプリケーション104のフレームレートをスロットルし得る。これらのレベルは、姿勢データをさらに予測し、アプリケーション104をより大きい程度、スロットルするために、レベル0からレベル1、2、および3に段階的に上げられ得る。例えば、予測レベル126を第1のレベル(例えば、0)から第2のレベル(例えば、1)に上げることは、コンポジタ114に、3つのVSync間隔116などの、将来のVSync間隔116の増加した数に対応する時間についてHMD100の姿勢データを予測させ得る。
図1の例では、これは、コンポジタ114が、VSync4 110(4)に対応する時間の姿勢データを予測し、フレーム106(1)をレンダリングするためにその姿勢データをアプリケーション104に提供し得ることを意味する。スロットルに関して、第1のスロットルレベル(例えば、0)から第2のスロットルレベル(例えば、1)への上昇は、コンポジタ114に、アプリケーション104のフレームレートを、HMD100のリフレッシュレートの数分の1(例えば、リフレッシュレートの半分)にスロットルさせ得る。90HzのHMD100について、これは、第2のスロットルレベル(例えば、1)がアプリケーションを45フレーム/秒にスロットルし得ることを意味する。これが行われると、コンポジタは、アプリケーション104がより早い時間における姿勢データを要求している場合でも、アプリケーション104への要求された姿勢データのアプリケーション104への供給を遅延させ得、それによって、アプリケーション104に、そのフレーム出力を、アプリケーション104がより容易に間に合い得る予測可能なフレームレートまで低速化することを強いる。
【0033】
図2は、
図1のブロック120および122でトラッキングされるように説明された統計などの、アプリケーション104のレンダリング性能に関する統計を記憶するために使用され得る例示的なリングバッファ200(1)、200(2)、および200(3)を概念的に例示する図である。すなわち、リングバッファ200、またはそのことに関する任意のタイプのメモリまたはストレージ要素は、他の統計の中でも、アプリケーション104が各フレーム106のレンダリングを終了するために要したVSync間隔116の数、および各フレーム106がHMD100上に1つ以上の対応する画像を提示するために使用された回数をトラッキングするために使用され得る。これらの統計を用いて、コンポジタ114は、レンダリングされたフレーム106のうちのどの程度の数が「遅延フレーム」であるか、レンダリングされたフレーム106のうちのどの程度の数が「過剰提示されたフレーム」であるか、および/またはレンダリングされたフレーム106のうちのどの程度の数が「早期フレーム」であるかを決定し得る。これらの決定は、予測レベル126およびスロットルレベル128を独立して調整するか否か、およびいつ調整するかを決定するための3つの例示的な規則(規則#1、規則#2、および規則#3)と共に使用され得る。
【0034】
規則#1は、予測レベル126を1だけ増分して上げるか否か、およびいつ上げるかを決定するために使用される。ここで、例示的な規則#1は、最新の5つのレンダリングされたフレーム106の中から2つが「遅延フレーム」である場合、予測レベル126を1だけ増分して上げることを指示する。「遅延フレーム」は、HMD100のGPUを使用してレンダリングを終了するために、アプリケーション104用のVSync間隔116の標的数よりも多くを要したフレーム106である。例えば、予測レベル126が第1のレベル(例えば、0)に現在設定されている場合、VSync間隔116の標的数は、1つのVSync間隔116であり得、このことは、アプリケーション104が1つのVSync間隔116内で各フレーム106のレンダリングを終了すると考えられていることを意味する。このシナリオでは、アプリケーション104が1つのVSync間隔116内でフレーム106のレンダリングを終了しない場合、そのフレーム106は「遅延フレーム」とみなされる。同様に、予測レベル126が第2のレベル(例えば、1)に現在設定されている場合、VSync間隔116の標的数は、2つのVSync間隔116であり得、このことは、アプリケーション104が2つのVSync間隔116内で各フレーム106のレンダリングを終了すると考えられていることを意味する。したがって、フレームの遅延は、レンダリングを終了することになる、VSync間隔116の標的数に関するものである。
図2の例では、例示的な規則#1は、単なる例であり、他の比率が利用されてもよい。したがって、規則#1は、一般に、過去のN個のレンダリングされたフレームの中から、遅延フレームの数が遅延フレームの閾値数を満たすかまたは超える場合、予測レベル126を1だけ増分して上げるように記述され得る。ここでの例は、過去の5つのレンダリングされたフレームの中から2つである。
【0035】
規則#2は、スロットルレベル128を1だけ増分して上げるか否か、およびいつ上げるかを決定するために使用される。ここで、例示的な規則#2は、最新の20個のレンダリングされたフレーム106の中から3つが「過剰提示されたフレーム」である場合、スロットルレベル128を1だけ増分して上げることを指示する。「過剰提示されたフレーム」、過剰提示されたフレームは、HMD100上に複数の対応する画像を提示するために標的回数よりも多く使用されたフレーム106である。例えば、スロットルレベル128が第1のレベル(例えば、0)に現在設定されている場合、アプリケーション104のフレームレートがHMD100のリフレッシュレートと一致するようにスロットルされるため、各フレームが使用されるべき標的回数は、1回であり得、各フレーム106は、VSync間隔116あたり1回使用されるように標的化される。このシナリオでは、アプリケーション104がフレームレートに達しておらず、所与のフレーム106が2回使用される場合(1回は、フレッシュフレームとして、1回は、再投影されたフレームのために)、そのフレーム106は「過剰提示されたフレーム」とみなされる。同様に、スロットルレベル128が第2のレベル(例えば、1)に現在設定されているとき、アプリケーション104のフレームレートがHMD100のリフレッシュレートの半分にスロットルされているため、各フレームが使用されるべき標的回数は、2回であり得る。
図2の例では、例示的な規則#2は、単なる例であり、他の比率が利用されてもよい。したがって、規則#2は、一般に、過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超える場合、予測レベル128を1だけ増分して上げるように記述され得る。ここでの例は、過去の20個のレンダリングされたフレームの中から3つである。
【0036】
規則#3は、予測レベル126を1だけ増分して下げるか否か、およびいつ下げるかを決定するために使用される。ここで、例示的な規則#3は、最新の30個の連続的にレンダリングされたフレームが「早期フレーム」である場合、予測レベル126を1だけ増分して下げることを指示する。「早期フレーム」は、アプリケーション104が、少なくとも1つのVSync間隔116だけ現在の予測を上回るという意味で、早期にレンダリングを終了したフレーム106である。例えば、予測レベル126が第2のレベル(例えば、1)に現在設定されている場合、アプリケーション104は、3つのVSync間隔116内で各フレーム106のレンダリングを終了するように標的化される。このシナリオでは、アプリケーション104がHMD100のGPUを使用して所与のフレーム106のレンダリングを終了するために2つ以下のVSync間隔116を要する場合、そのフレーム106は「早期フレーム」とみなされる。所定の数のレンダリングされたフレーム(過去のP個の連続的にレンダリングされたフレーム)がこの基準を満たす場合、アプリケーション104は、予測レベル126の低下を正当化するために十分良好に実施しているとみなされる。ここでの例は、過去の30個の連続的にレンダリングされたフレームであるが、任意の好適な数が規則#3に利用され得る。
【0037】
本明細書に記載のプロセスは、ロジックフローグラフ内のブロックの集合として例解され、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせ(つまり、ロジック)に実装することができる一連の動作を表す。ソフトウェアの文脈において、ブロックは、1つ以上のプロセッサによって実行されると、列挙された動作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。動作が説明される順序は、限定として解釈されることを意図するものではなく、説明される任意の数のブロックは、プロセスを実装するために任意の順序で、および/または並列に組み合わせることができる。
【0038】
図3Aおよび3Bは、本明細書に開示される実施形態による、HMD上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセス300のフロー図を例示する。考察目的で、プロセス300を前の図を参照して説明する。
【0039】
302において、HMD100のロジック(例えば、コンポジタ114を含むロジック)は、第1のレベルに設定された予測レベル126および第1のレベルに設定されたスロットルレベル128(すなわち、予測レベル126およびスロットルレベル128は、同じスケールを使用して同じレベルに設定される)を使用して、HMD100上の一連のフレーム106の第1のフレーム106をレンダリングし得る。HMD100の起動時には、この同じレベルが最小レベルであり得る。この場合、最小スロットルレベル(例えば、0)は、コンポジタ114に、アプリケーション104のフレームレートをスロットルさせて、HMD100のリフレッシュレートと一致させ、その結果、第1のフレームの個々のフレームは、HMD100上に対応する画像を提示するために1回使用されるように標的化される。一例では、最小スロットルレベル128は、90HzのHMD100と一致するように、アプリケーション104のフレームレートを90フレーム/秒にスロットルし得る。最小予測レベル126は、コンポジタ114に、HMD100の姿勢データを、第1のフレーム106の個々のフレームの姿勢データを予測する時間に対する、将来の2つのVSync間隔116に対応する時間について予測させ得る。予測レベル126およびスロットルレベル128がブロック302において最小レベル(例えば、レベル1)に現在設定されていないとき、異なる標的が一連のフレーム106をレンダリングするために利用され得る。すなわち、第1の予測レベル(例えば、1)に設定された予測レベル126では、コンポジタ114は、将来のVSync間隔116の第1の標的数(例えば、将来の2つのVSync間隔)に対応する時間のHMD100の姿勢データを予測し得る。第1のスロットルレベル(例えば、1)に設定されたスロットルレベル128では、コンポジタ114は、HMD100のリフレッシュレートに対してアプリケーション104のフレームレートをスロットルし得、そのため、第1の名声の個々のものが、HMD100上に複数の対応する画像を表示するために、第1の標的回数(例えば、2回)使用されるように標的化される。アプリケーション104がHMD100のリフレッシュレートの半分にスロットルされている場合、標的回数は、「2」である。いずれの場合でも、予測レベル126およびスロットルレベル128が、どのレベルであるかにかかわらず、同じレベルに設定されていることをコンポジタ114が決定した場合、ロジックは、ブロック302から進み得る。
【0040】
304では、予測レベル126(またはスロットルレベル128)が最大レベル(例えば、4)まで上げられたか否かに関して決定が行われ得る。予測レベル126(またはスロットルレベル128)が最大に達した場合、プロセス300は、ブロック304からの「はい」のルートに従って、レベル126および128をそれ以上上げることなく、ブロック302における第1のフレームのレンダリングを繰り返し得る。一方、予測レベル126(またはスロットルレベル128)がその最大レベルまで上げられていない場合、プロセス300は、ブロック304からブロック306への「NO」のルートに従い得る。
【0041】
306では、コンポジタ114は、第1のフレームがブロック302においてレンダリングされる際に、第1のフレームと関連付けられた第1の統計をトラッキングし、これらの第1の統計をメモリ(例えば、1つ以上のリングバッファ200)に記憶し得る。このようにして、レンダリングされたフレームの履歴は、例えば、ブロック308によって示されるように、アプリケーション104が各フレーム106のレンダリングを終了するために要したVSync間隔116の数、ブロック310によって示されるように、各フレームがHMD100上に画像(複数可)を提示するために使用された回数に関する統計、および可能な追加の統計と共に維持され得る。
【0042】
312では、ブロック306においてトラッキングおよび記憶された第1の統計に少なくとも部分的に基づいて、コンポジタ114は、過去のN個のレンダリングされたフレーム106の中から遅延フレームの数を決定し得、Nは、任意の好適な数である。N=5の場合、ブロック312における決定は、それらの過去の5つのレンダリングされたフレームの中から遅延フレームの数を計数することであり得る。
【0043】
314では、コンポジタ114は、ブロック312において計数された遅延フレームの数が、遅延フレームの閾値数を満たすかまたは超えるか否かを決定し得る。一例では、遅延フレームの閾値数は、2つの遅延フレームであり得、それにより、過去の5つのレンダリングされたフレームの中から2つが遅延フレームであった場合、ブロック314において閾値が満たされる。繰り返しになるが、「遅延フレーム」は、HMD100のGPUを使用してレンダリングを終了するために、アプリケーション104用のVSync間隔116の標的数よりも多くを要したフレームであり、標的数は、現在の予測レベル126に基づく。第1の予測レベル(例えば、0)の場合、VSync間隔116の標的数は、1つのVSync間隔116であり得、そのため、2つ以上のVSync間隔116でレンダリングを終了した、いかなるフレームも、ブロック312および314において遅延フレームとみなされる。ブロック314において閾値が満たされない場合、プロセス300は、ブロック314から「NO」のルートに従って、予測レベル126またはスロットルレベル128を上げずに、ブロック302において一連のフレーム106のレンダリングを繰り返し得る。しかしながら、ブロック312において計数された遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えることをコンポジタ114が決定した場合、プロセス300は、ブロック314からブロック316への「はい」のルートに従い得る。
【0044】
316では、コンポジタ114は、動き平滑化が有効化されているか否かを決定し得る。「動き平滑化」は、本明細書に使用される際、GPUのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に第1のフレームの少なくともサブセットの画素データを修正する、グラフィックス処理技術を指し得る。したがって、レンダリング前にGPUからの動きベクトルを使用してフレームを修正する特徴が有効化されている場合、プロセス300は、ブロック316からブロック318への「はい」のルートに従い得る。
【0045】
318では、コンポジタ114は、予測レベル126およびスロットルレベル128の両方を同期して1だけ増分して上げ得る。すなわち、予測レベル126は、第1の予測レベルから第2の予測レベルに上げられ得、スロットルレベル128は、予測レベル126の上昇と同期して、第1のスロットルレベルから第2のスロットルレベルに上げられ得る。「同期して」は、この文脈で使用される際、必ずしも同時を意味するのではなく、「共に」を意味するか、またはスロットルレベル128を上げるか否かについて独立した決定を行わないことを意味する。言い換えると、スロットルレベル128は、動き平滑化が有効化されるときはいつでも、予測レベル126と共に上げられる。
【0046】
320では、コンポジタ114は、第1のフレームと関連付けられた第1の統計を維持するメモリ(例えば、1つ以上のリングバッファ200)を消去(例えば、メモリからデータを削除)し得、プロセス300は、ブロック302に戻ることによって繰り返し、ブロック302では、一連のフレーム106の第2のフレームがHMD100上にレンダリングされ、このときには、上げられた予測レベルに設定された予測レベル126および上げられたスロットルレベルに設定されたスロットルレベル128を使用する。例えば、予測レベル126およびスロットルレベル128が同期して第1のレベル(例えば、0)から第2のレベル(例えば、1)に上げられた場合、ブロック320の後のブロック302においてレンダリングされる第2のフレームは、将来のVSync間隔116の第2の標的数(例えば、3つのVSync間隔)に対応する時間のHMD100の姿勢データを予測するコンポジタ114によってレンダリングされ得、アプリケーション104のフレームレートは、ブロック302においてレンダリングされた第2のフレームの個々のフレームが、HMD100上に対応する画像を提示するために第2の標的回数(例えば、2回)使用されるように標的化されるように、HMD100のリフレッシュレートに対してスロットルされ得る。リングバッファ(複数可)200を消去することに加えて、コンポジタ114がアプリケーション104に生成するように命令する次のフレームIDがトラッキングされ得る。これは、リングバッファ(複数可)200が、トラッキングされたフレームIDを有するフレームで開始する第2の統計のトラッキングを開始することを可能にする。これは、ブロック318において予測レベル126およびスロットルレベル128を変更した後に既に処理中の他のフレームが無視されるように、行われ得る(すなわち、適用される新しい値を有していなかったフレームが無視される)。
【0047】
ブロック316に戻ると、ブロック316において動き平滑化が無効化されていると決定された場合、過去のN個のレンダリングされたフレームにわたって遅延フレームの閾値数が計数された後、プロセス300は、ブロック316からブロック322への「NO」のルートに従い得る。プロセス300は、決定ブロック316における動作を実施せずに実施されてもよい(すなわち、ブロック316は、プロセス300から省略されてもよい)ことを理解されたい。したがって、いくつかの実施形態では、プロセス300は、ブロック316、318、および320に関して説明された動作を実施せずに、ブロック314からブロック322への「はい」のルートに直接従ってもよい。
【0048】
322では、コンポジタ114は、スロットルレベル128を増分せずに、予測レベル126を1だけ増分して上げ得る。例えば、予測レベル126が、第1の予測レベルから第2の予測レベルに上げられ得、スロットルレベル128が、第1のスロットルレベルに留まり得る。
【0049】
324では、コンポジタ114は、第1のフレームと関連付けられた第1の統計を維持するメモリ(例えば、1つ以上のリングバッファ200)を消去(例えば、メモリからデータを削除)し得、プロセス300は、
図3Aおよび3Bのオフページ参照「A」によって示されるように、
図3Bに進む。リングバッファ(複数可)200を消去することに加えて、コンポジタ114がアプリケーション104に生成するように命令する次のフレームIDがトラッキングされ得る。これは、リングバッファ(複数可)200が、トラッキングされたフレームIDを有するフレームで開始する第2の統計のトラッキングを開始することを可能にする。これは、ブロック322において予測レベル126を変更した後に既に処理中の他のフレームが無視されるように、行われ得る(すなわち、適用される新しい値を有していなかったフレームが無視される)。
【0050】
326では、一連のフレーム106の第2のフレームがHMD100上にレンダリングされ、このときには、上げられた予測レベルに設定された予測レベル126および変更されていないままのスロットルレベル128を使用する。例えば、予測レベル126が、第1の予測レベル(例えば、0)から第2の予測レベル(例えば、1)に上げられた場合、ブロック324の後のブロック326においてレンダリングされる第2のフレームは、将来のVSync間隔116の第2の標的数(例えば、3つのVSync間隔)に対応する時間のHMD100の姿勢データを予測するコンポジタ114によってレンダリングされ得る。一方、変更されていないスロットルレベル128によると、アプリケーション104のフレームレートは、アプリケーション104のフレームレートがHMD100のリフレッシュレートと一致するように、HMD100のリフレッシュレートに対してスロットルされ続け得、第2のフレームのうちの個々のフレームは、依然として、HMD100上に対応する画像を提示するために、第1の標的回数(例えば、1回)使用されるように標的化される。
【0051】
328では、コンポジタ114は、第2のフレームがブロック326においてレンダリングされる際に、第2のフレームと関連付けられた第2の統計をトラッキングし得、これらの第2の統計をメモリ(例えば、予測レベルの上昇前に古いデータが消去された、1つ以上のリングバッファ200)内に記憶し得る。これらの第2の統計は、非限定的に、ブロック330によって示されるように、アプリケーション104が各フレーム106のレンダリングを終了するために要したVSync間隔116の数、ブロック332によって示されるように、各フレーム106がHMD100上に画像(複数可)を提示するために使用された回数に関する統計、および可能な追加の統計と共に維持され得る。
【0052】
334では、ブロック328においてトラッキングおよび記憶された第2の統計に少なくとも部分的に基づいて、コンポジタ114は、過去のM個のレンダリングされたフレームの中から過剰提示されたフレームの数を決定し得、Mは、任意の好適な数である。M=20の場合、ブロック334における決定は、それらの過去20回のレンダリングされたフレームの中から過剰提示されたフレームの数を計数することであり得る。
【0053】
336では、コンポジタ114は、ブロック334において計数された過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えるか否かを決定し得る。一例では、過剰提示されたフレームの閾値数は、3つの過剰提示されたフレームであり得、それにより、過去の20個のレンダリングされたフレームの中から3つが過剰提示されたフレームであった場合、ブロック336において閾値が満たされる。繰り返しになるが、「過剰提示されたフレーム」は、HMD100上に複数の対応する画像を提示するために標的回数よりも多く使用されたフレームであり、標的回数は、現在のスロットルレベル128に基づく。第1のスロットルレベル(例えば、0)の場合、標的回数は、一度(1回)であり得るため、HMD100上に複数の対応する画像を提示するために2回以上多く使用されたフレームは、ブロック334および336において、過剰提示されたフレームとみなされる。ブロック336において閾値が満たされない場合、プロセス300は、ブロック336から「NO」のルートに従って、スロットルレベル128を上げずに、ブロック326において一連のフレーム106のレンダリングを繰り返し得る。しかしながら、ブロック334において計数された過剰提示されたフレームの数が過剰提示されたフレームの閾値数を満たすかまたは超えることをコンポジタ114が決定した場合、プロセス300は、ブロック336からブロック338への「はい」のルートに従い得る。
【0054】
338では、コンポジタ114は、予測レベル126を増分せずに、スロットルレベル128を1だけ増分して上げ得る。例えば、スロットルレベル128は、第1のスロットルレベルから第2のスロットルレベルに上がり得、予測レベル126は、その既存のレベルのままであり得、このことは、予測レベル126およびスロットルレベル128が同じレベル(例えば、1)にされることを意味する。
【0055】
340では、コンポジタ114は、第2のフレームと関連付けられた第2の統計を維持するメモリ(例えば、1つ以上のリングバッファ200)を消去(例えば、メモリからデータを削除)し得、プロセス300は、
図3Aおよび3Bのオフページ参照「B」によって示されるように、
図3Aに進む。したがって、プロセス300は、アプリケーション104のレンダリング性能に応じて、予測レベル126およびスロットルレベル128を増分して、潜在的に最大レベルまで繰り返し得る。例えば、予測レベル126およびスロットルレベル128が1だけ増分された後、一連のフレーム106の第2または第3のフレームは、ブロック302においてレンダリングされ得、ロジックは、反復して、予測レベル126を上げるか、または予測レベル126およびスロットルレベル128の両方を同期して上げるかを決定し得る。
【0056】
図4は、本明細書に開示される実施形態による、HMD100上にフレームをレンダリングしている間に、予測およびスロットルレベルを下げるか否か、およびいつ下げるかを決定するための例示的なプロセス400のフロー図である。考察目的で、プロセス400を前の図を参照して説明する。
【0057】
402では、コンポジタ114は、十分な数のフレームが早期に連続的にレンダリングされたか否かを決定し得る。すなわち、コンポジタ114は、402では、過去のP個の連続的にレンダリングされたフレーム(Pは、任意の好適な数である)が、レンダリングを終了するために、アプリケーション104用の特定の時間量(VSync間隔116に関して)以下を要したか否かを決定し得る。ここで、一定の時間量は、現在の予測レベル126に基づく。例えば、予測レベル126が既に第1の予測レベル(例えば、1)に上げられており、コンポジタ114が将来の3つのVSync間隔116に対応する時間についてHMD100の姿勢データを予測している場合、早期フレームは、アプリケーション104が2つのVSync間隔116内でレンダリングを終了したフレームである。同様に、予測レベル126が第2の予測レベル(例えば、2)にあり、コンポジタ114が将来の4つのVSync間隔116に対応する時間についてHMD100の姿勢データを予測している場合、早期フレームは、アプリケーション104が3つのVSync間隔116内でレンダリングを終了したフレームである。ブロック402において、連続的にレンダリングされた早期フレームの十分な数が存在していないことが決定された場合、プロセス400は、ブロック402から「NO」のルートに従って、十分な数の早期フレームが連続的にレンダリングされたか否かの決定を繰り返し得る。十分な数(例えば、過去のP個のフレーム)が早期に連続的にレンダリングされるとすぐに、プロセス400は、ブロック402からブロック404への「はい」のルートに従い得る。
【0058】
404では、コンポジタ114は、予測レベル126およびスロットルレベル128が同じレベルに現在設定されている(例えば、両方とも第3のレベル、2に設定されている)か否かを決定し得る。予測レベル126およびスロットルレベル128が同じレベルに現在設定されている場合、プロセス400は、ブロック404からブロック406への「はい」のルートに従い得る。
【0059】
406では、コンポジタ114は、予測レベル126およびスロットルレベル128の両方を同期して1だけ減分して下げ得る。すなわち、予測レベル126は、第3の予測レベルから第2の予測レベルに下げられ得、スロットルレベル128は、予測レベルの低下と同期して、第3のスロットルレベルから第2のスロットルレベルに下げられ得る。
【0060】
ブロック404に戻ると、予測レベル126およびスロットルレベル128が同じレベルに現在設定されていない(例えば、スロットルレベル128が現在の予測レベル128より1つ低いレベルに設定されている)場合、プロセス400は、ブロック404からブロック408への「NO」のルートに従い得る。
【0061】
408では、コンポジタ114は、スロットルレベル128を下げずに、予測レベル126を1だけ減分して下げ得る。例えば、予測レベル126は、第3の予測レベルから第2の予測レベルに下げられ得、このことは、予測レベル126およびスロットルレベル128が同じレベルにされることを意味する。このように、スロットルレベル128は、予測レベル126と共に、それらが同じレベルに設定されている場合、下がる。
【0062】
図5は、具現化され得る本明細書に開示される実施形態による、VRヘッドセットなどのHMD500の例示的な構成要素を例示する。HMD500は、前の図で参照したHMD100と同一または同様であり得、したがって、
図5に示されるHMD500の構成要素は、HMD100に実装され得る。HMD500は、ユーザ102によって(例えば、ユーザ102の頭部に)着用されることになるスタンドアロンデバイスとして実装され得る。いくつかの実施形態では、HMD500は、ユーザ102が、ユーザ102の頭部の周囲に収まるようにサイズ決めされる固設機構(例えば、調整可能バンド)を使用して、HMD500をユーザの頭部に固設することを可能にすることなどによって、頭部に装着可能であり得る。いくつかの実施形態では、HMD500は、ニアアイまたはニアツーアイディスプレイ(複数可)を含む仮想現実(VR)または拡張現実(AR)ヘッドセットを含む。したがって、「ウェアラブルデバイス」、「ウェアラブル電子デバイス」、「VRヘッドセット」、「ARヘッドセット」、および「ヘッドマウントディスプレイ(HMD)」という用語は、本明細書では互換的に使用されて、
図5のデバイス500を指し得る。しかしながら、これらのタイプのデバイスは、HMD500の単なる例であることが理解されるべきであり、HMD500は、様々な他の形態因子で実装され得ることを理解されたい。
【0063】
例示された実装では、HMD500は、1つ以上のプロセッサ502およびメモリ504(例えば、コンピュータ可読媒体504)を含む。いくつかの実装では、プロセッサ(複数可)502は、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)(複数可)503、CPUおよびGPU503の両方、マイクロプロセッサ、デジタルシグナルプロセッサ、または当該技術分野で公知の他の処理ユニットもしくは構成要素を含み得る。代替的に、または追加的に、本明細書で機能的に説明される機能は、少なくとも部分的に、1つまたは複数のハードウェアロジック構成要素によって実施され得る。例えば、非限定的に、使用され得るハードウェアロジック構成要素の例示的なタイプは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブルロジックデバイス(CPLD)などを含み得る。加えて、プロセッサ(複数可)502の各々は、プログラムモジュール、プログラムデータ、および/または1つ以上のオペレーティングシステムも記憶し得る、独自のローカルメモリを保有し得る。
【0064】
メモリ504は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報の記憶のための任意の方法または技術で実装される、揮発性および不揮発性メモリ、着脱可能および着脱不能媒体を含み得る。そのようなメモリは、これらに限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、RAIDストレージシステム、または所望の情報を記憶するために使用することができ、かつコンピューティングデバイスからアクセスすることができる任意の他の媒体を含む。メモリ504は、コンピュータ可読記憶媒体(「CRSM」)として実装され得、これは、メモリ502に記憶された命令を実行するためにプロセッサ(複数可)502によってアクセス可能な任意の利用可能な物理媒体であり得る。1つの基本的な実装では、CRSMには、ランダムアクセスメモリ(「RAM」)およびフラッシュメモリを含んでもよい。他の実装では、CRSMは、限定されるものではないが、読み出し専用メモリ(「ROM」)、電気的消去可能プログラム可能読み出し専用メモリ(「EEPROM」)、または所望の情報を記憶するために使用され得、かつプロセッサ(複数可)502によってアクセスされ得る、任意の他の有形媒体を含み得る。
【0065】
一般に、HMD500は、本明細書に説明される技術、機能、および/または動作を実装するように構成されるロジック(例えば、ソフトウェア、ハードウェア、および/またはファームウェアなど)を含み得る。コンピュータ可読媒体504は、命令、データストアなどの、様々なモジュールを含むものとして示され、これらのモジュールは、本明細書に説明される技術、機能、および/または動作を実施するためにプロセッサ(複数可)502上で実行するように構成され得る。コンピュータ可読媒体504に記憶され、かつプロセッサ(複数可)502上で実行可能なものとして、数個の例示的な機能モジュールが示されているが、同じ機能が、代替的に、ハードウェア、ファームウェア内に、またはシステムオンチップ(SOC)および/もしくは他のロジックとして実装されてもよい。
【0066】
オペレーティングシステムモジュール506は、他のモジュールの便宜のために、HMD500内でHMD500に連結されたハードウェアを管理するように構成され得る。加えて、いくつかの事例では、HMD500は、メモリ504に記憶されているか、または別様にHMD500にアクセス可能な1つ以上のアプリケーション104を含み得る。この実装では、アプリケーション(複数可)104は、ゲームアプリケーション510を含む。しかしながら、HMD500は、任意の数またはタイプのアプリケーションを含み得、ここに示される特定の例に限定されない。ゲームアプリケーション510は、ユーザ102によってプレイ可能であるビデオベースのインタラクティブゲーム(例えば、VRゲーム)のゲームプレイを開始し、HMD500のディスプレイパネル上にレンダリングされるべきフレーム(例えば、実際のフレーム106)を出力するように構成され得る。コンポジタ114は、HMD500の他のロジックと組み合わせて、アプリケーション104のレンダリング性能に基づいて、予測レベル126およびスロットルレベル128を調整するために、本明細書に説明される技術を実施するように構成され得る。
【0067】
一般に、HMD500は、入力デバイス512および出力デバイス514を有する。入力デバイス512は、制御ボタンを含み得る。いくつかの実装では、1つ以上のマイクロフォンが、ユーザ音声入力などのオーディオ入力を受信するための入力デバイス512として機能し得る。いくつかの実装では、1つ以上のカメラまたは他のタイプのセンサ(例えば、慣性測定ユニット(IMU))が、ユーザ102の手および/または頭部の動きなどの、ジェスチャ入力を受信するための入力デバイス512として機能し得る。いくつかの実施形態では、追加の入力デバイス512が、キーボード、キーパッド、マウス、タッチスクリーン、ジョイスティックなどの形態で提供され得る。他の実施形態では、HMD500は、キーボード、キーパッド、または他の同様の形態の機械的入力を省略してもよい。代わりに、HMD500は、入力デバイス512の比較的単純な形態、ネットワークインターフェース(無線または有線ベース)、電源、および処理/メモリ機能で実装され得る。例えば、1つ以上の入力構成要素の限定されたセット(例えば、構成を開始する、電源をオン/オフするなどのための専用ボタン)が用いられ得、HMD500は、その後に使用され得る。一実装では、入力デバイス(複数可)512は、音量を増加/減少させるための基本的な音量制御ボタン(複数可)、ならびに電源およびリセットボタンなどの制御機構を含み得る。
【0068】
出力デバイス514は、ディスプレイ516を含み得、これは、1つ以上のディスプレイパネル(例えば、ディスプレイパネルのステレオペア)を含み得る。出力デバイス514は、非限定的に、ライト要素(例えば、LED)、触覚感覚を生み出すためのバイブレータ、スピーカ(複数可)(例えば、ヘッドフォン)などをさらに含み得る。例えば、電源がオンになっているときなどの状態を示すための単純な光要素(例えば、LED)も存在し得る。
【0069】
HMD500は、ネットワークへの無線接続を容易にするために、アンテナ520に連結された無線ユニット518をさらに含み得る。無線ユニット518は、Wi-Fi、Bluetooth、無線周波数(RF)などの、様々な無線技術のうちの1つ以上を実装し得る。HMD500は、ネットワーク、接続された周辺デバイス(PC、ゲームコンソールなどを含む)、または他の無線ネットワークと通信するプラグインネットワークデバイスへの有線接続を容易にするための物理ポートをさらに含み得ることを理解されたい。
【0070】
HMD500は、1つ以上の光学要素を使用して、電子ディスプレイ(複数可)516からユーザの眼(複数可)に光を向ける光学サブシステム522をさらに含み得る。光学サブシステム522は、非限定的に、アパーチャ、レンズ(例えば、フレネルレンズ、凸レンズ、凹レンズなど)、フィルタなどを含む、異なる光学要素の様々なタイプおよび組み合わせを含み得る。いくつかの実施形態では、光学サブシステム522内の1つ以上の光学要素は、反射防止コーティングなどの1つ以上のコーティングを有し得る。光学サブシステム522による画像光の拡大は、電子ディスプレイ(複数可)516が、より大型のディスプレイよりも物理的により小型で、軽量で、より低消費電力であることを可能にする。さらに、画像光の拡大は、表示されたコンテンツ(例えば、画像)の視野(FOV)を増加させ得る。例えば、表示されたコンテンツのFOVは、表示されたコンテンツが、ユーザのFOVのほぼすべて(例えば、対角120~150度)、場合によってはすべてを使用して提示されるようなものである。ARアプリケーションは、より狭いFOV(例えば、約40度のFOV)を有していてもよい。光学サブシステム522は、非限定的に、樽型歪み、ピンクッション歪み、縦色収差、横色収差、球面収差、コマ収差、像面湾曲、非点収差などの、1つ以上の光学誤差を補正するように設計され得る。いくつかの実施形態では、表示のために電子ディスプレイ(複数可)516に提供されるコンテンツは、事前に歪められており、光学サブシステム522は、コンテンツに基づいて生成された、電子ディスプレイ(複数可)516からの画像光を受光するときにその歪みを補正する。
【0071】
HMD500は、動き、位置、および配向データを生成するために使用されるセンサなどの、1つ以上のセンサ524をさらに含み得る。これらのセンサ524は、ジャイロスコープ、加速度計、磁力計、ビデオカメラ、カラーセンサ、または他の動き、位置、および配向センサであり得るか、またはそれらを含み得る。センサ524はまた、動き、位置、および配向データを生成するためにカメラまたはカラーセンサによって外部から視認され得る一連の能動または受動マーカなどの、センサの二次的部分を含み得る。例えば、VRヘッドセットは、その外部に、外部カメラで見たとき、または光(例えば、赤外光または可視光)で照らしたときに、反射器またはライト(例えば、赤外光または可視光)などの複数のマーカを含み得、動き、位置、および配向データを生成するために、ソフトウェアによる解釈のための1つ以上の基準点を提供し得る。HMD500は、HMD500の環境内の基地局によって投影または散布される光(例えば、赤外光または可視光)に対して感応性である光センサを含み得る。
【0072】
一例では、センサ(複数可)524は、慣性測定ユニット(IMU)526を含み得る。IMU526は、加速度計、ジャイロスコープ、磁力計、および/または動きの検出、IMU526と関連付けられた誤差の補正、もしくはそれらのいくつかの組み合わせに好適な他のセンサから受信された測定信号に基づいて、較正データを生成する電子デバイスであり得る。測定信号に基づいて、IMU526などの、そのような動きベースのセンサは、HMD500の初期位置に対するHMD500の推定された位置を示す較正データを生成し得る。例えば、複数の加速度計が並進運動(前方/後方、上/下、左/右)を測定し、複数のジャイロスコープが回転運動(例えば、ピッチ、ヨー、ロール)を測定してもよい。IMU526は、例えば、測定信号を迅速にサンプリングし、サンプリングされたデータからHMD500の推定された位置を計算し得る。例えば、IMU526は、経時的に加速度計から受信された測定信号を統合して速度ベクトルを推定し得、経時的に速度ベクトルを統合して、HMD500上の基準点の推定された位置を決定する。基準点は、HMD500の位置を説明するために使用され得る点である。基準点は、一般に、空間内の点として定義され得るが、様々な実施形態では、基準点は、HMD500内の点(例えば、IMU526の中心)として定義される。代替的に、IMU526は、サンプリングされた測定信号を外部コンソール(または他のコンピューティングデバイス)に提供し、外部コンソールが較正データを決定する。
【0073】
センサ524は、センサデータを高速で提供するために、比較的高い周波数で動作し得る。例えば、センサデータは、1000Hzの速度(または1ミリ秒ごとに1つのセンサ読み取り)で生成され得る。このようにして、1秒間に1000回の読み取りが行われる。センサがこの速度で(またはそれ以上の速度で)これだけのデータを生成する場合、動きを予測するために使用されるデータセットは、数十ミリ秒ほどの比較的短い期間でも非常に大きくなる。
【0074】
言及されるように、いくつかの実施形態では、センサ524は、3D空間内のHMD500の位置および/または配向、姿勢などをトラッキングする目的で、HMD500の環境内の基地局によって放出される光に対して感応性である光センサを含み得る。位置および/または配向の計算は、光パルスのタイミング特性、およびセンサ524によって検出される光の有無に基づき得る。
【0075】
HMD500は、アイトラッキングモジュール528をさらに含み得る。HMD500の内部のカメラまたは他の光学センサは、ユーザの眼の画像情報を捕捉し得、アイトラッキングモジュール528は、捕捉された情報を使用して、ねじれおよび回転の大きさ(すなわち、ロール、ピッチ、およびヨー)ならびに各眼の注視方向を含む、瞳孔間距離、眼間距離、HMD500に対する各眼の3次元(3D)位置を決定し得る(例えば、歪み調整の目的で)。一例では、赤外光が、HMD500内で放出され、各眼から反射される。反射光は、HMD500のカメラによって受光または検出され、各眼によって反射された赤外光の変化から眼球回転を抽出するために分析される。ユーザ102の眼をトラッキングするための多くの方法が、アイトラッキングモジュール528によって使用され得る。したがって、アイトラッキングモジュール528は、各眼の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)をトラッキングし得、トラッキングされた量の少なくともサブセットが、注視点(すなわち、ユーザが見ている仮想シーン内の3D場所または位置)を推定するためにユーザ102の2つの眼から組み合わせられ得る。例えば、アイトラッキングモジュール528は、過去の測定値からの情報、ユーザ102の頭部の位置を識別する測定値、および電子ディスプレイ(複数可)516によって提示されるシーンを記述する3D情報を統合し得る。したがって、ユーザ102の眼の位置および配向の情報は、ユーザ102が見ている、HMD500によって提示された仮想シーン内の注視点を決定するために使用される。
【0076】
HMD500は、ヘッドトラッキングモジュール530をさらに含み得る。ヘッドトラッキングモジュール530は、上記のように、センサ524のうちの1つ以上を利用して、ユーザ102の頭部の回転を含む頭部の動きをトラッキングし得る。例えば、ヘッドトラッキングモジュール530は、HMD500の最大6自由度(すなわち、3D位置、ロール、ピッチ、およびヨー)をトラッキングし得る。これらの計算は、一連のフレーム106のフレーム106ごとに行われ得るため、アプリケーション104は、頭部の位置および配向に応じて、次のフレーム106(再投影されたフレーム104の場合でも)内でシーンをどのようにレンダリングするかを決定し得る。いくつかの実施形態では、ヘッドトラッキングモジュール530および/またはヘッドトラッキングモジュール530を使用するコンポジタ114は、現在および/または過去のデータに基づいて、HMD500の将来の位置および/または配向を予測するように構成される。これは、ユーザ102がディスプレイ(複数可)516上で光(したがって、画像)を実際に見る前に、アプリケーションがフレーム106をレンダリングするように求められるためである。したがって、次のフレーム106は、フレーム106をレンダリングする前のおよそ25~30ミリ秒(ms)などのより早い時点で行われた、頭部の位置および/または配向のこの将来の予測に基づいて、レンダリングすることができる。ヘッドトラッキングモジュール530によって提供される回転データは、任意の好適な測定単位で、HMD500の回転方向およびHMD500の回転量の両方を決定するために使用され得る。例えば、回転方向は、左、右、上、および下に対応する正または負の水平方向および正または負の垂直方向の観点で単純化されて出力され得る。回転量は、度、ラジアンなどの単位であり得る。角速度が、HMD500の回転速度を決定するために計算されてもよい。
【0077】
主題は構造的特徴に特有の言語で説明されているが、添付の特許請求の範囲に定義された主題は、必ずしも説明された特定の特徴に限定されるものではないことを理解されたい。むしろ、特定の特徴は、特許請求の範囲を実装する例解的な形態として開示されている。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1]
方法であって、
最小スロットルレベルおよび最小予測レベルを使用して、ヘッドマウントディスプレイ(HMD)に一連のフレームのうちの第1のフレームをレンダリングすることであって、前記最小スロットルレベルが、前記HMDのコンポジタに、アプリケーションのフレームレートをスロットルさせて、前記HMDのリフレッシュレートと一致させ、それにより、前記第1のフレームの個々のフレームが前記HMD上に対応する画像を提示するために1回使用されるように標的化され、前記最小予測レベルが、前記HMDの前記コンポジタに、前記HMDの姿勢データを、前記第1のフレームの前記個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期(VSync)間隔の第1の標的数に対応する時間について予測させる、レンダリングすることと、
前記第1のフレームのうちの過去のN個のレンダリングされたフレームの中から遅延フレームの数を決定することであって、遅延フレームが、前記HMDのグラフィックスプロセッシングユニット(GPU)を使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の第1の標的数よりも多くを要したフレームである、決定することと、
前記遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えることを決定することと、
前記最小予測レベルを中間予測レベルに上げることと、
前記最小スロットルレベルおよび前記中間予測レベルを使用して、前記HMD上に前記一連のフレームのうちの第2のフレームをレンダリングすることであって、前記中間予測レベルが、前記HMDの前記コンポジタに、前記HMDの前記姿勢データを、前記第2のフレームの個々のフレームの姿勢データを予測する時間に対する、将来のVSync間隔の第2の標的数に対応する時間について予測させる、レンダリングすることと、
前記第2のフレームのうちの過去のM個のレンダリングされたフレームの中から過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記HMD上に複数の対応する画像を提示するために2回以上多く使用されたフレームである、決定することと、
過剰提示されたフレームの前記数が、過剰提示されたフレームの閾値数を満たすかまたは超えることを決定することと、
前記最小スロットルレベルを中間スロットルレベルに上げることと、
前記中間スロットルレベルおよび前記中間予測レベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることであって、前記中間スロットルレベルが、前記HMDの前記コンポジタに、前記アプリケーションの前記フレームレートを前記HMDの前記リフレッシュレートの半分にスロットルさせ、それにより、前記第3のフレームの個々のフレームが、前記HMD上に対応する画像を提示するために2回使用されるように標的化される、レンダリングすることと、を含む、方法。
[2]
前記最小予測レベルを前記中間予測レベルに上げた後に、および前記第2のフレームをレンダリングする前に、前記第1のフレームと関連付けられた第1の統計を維持した1つ以上のリングバッファを消去することをさらに含む、[1]の方法。
[3]
前記第3のフレームのうちの過去のP個の連続的にレンダリングされたフレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の前記第1の標的数以下を要したことを決定することと、
前記中間予測レベルを前記最小予測レベルに下げることと、
前記最小予測レベルへの前記中間予測レベルの低下と同期して、前記中間スロットルレベルを前記最小スロットルレベルに下げることと、
前記最小予測レベルおよび前記最小スロットルレベルを使用して、前記HMD上に前記一連のフレームのうちの第4のフレームをレンダリングすることと、をさらに含む、[1]の方法。
[4]
方法であって、
第1の予測レベルに設定された予測レベルを使用して、一連のフレームのうちの第1のフレームをヘッドマウントディスプレイ(HMD)にレンダリングすることであって、前記第1の予測レベルが、前記HMDのコンポジタに、前記HMDの姿勢データを、前記第1のフレームの個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期(VSync)間隔の第1の標的数に対応する時間について予測させる、レンダリングすることと、
前記第1のフレームのうちの過去のN個のレンダリングされたフレームの中から、遅延フレームの閾値数を満たすかまたは超える遅延フレームの数を決定することであって、遅延フレームが、前記HMDのグラフィックスプロセッシングユニット(GPU)を使用してレンダリングを終了するために、アプリケーションのVSync間隔の第1の標的数よりも多くを要したフレームである、決定することと、
前記予測レベルを前記第1の予測レベルから第2の予測レベルに上げることと、
前記第2の予測レベルに設定された前記予測レベルを使用して前記HMD上に前記一連のフレームのうちの第2のフレームをレンダリングすることであって、前記第2の予測レベルが、前記HMDの前記コンポジタに、前記HMDの前記姿勢データを、前記第2のフレームの個々のフレームの前記姿勢データを予測する時間に対し、将来のVSync間隔の第2の標的数に対応する時間について予測させ、VSync間隔の前記第2の標的回数がVSync間隔の前記第1の標的回数を超える、レンダリングすることと、を含む、方法。
[5]
前記第1のフレームが、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のスロットルレベルが、前記コンポジタに、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化され、前記方法は、前記予測レベルを前記第1の予測レベルから前記第2の予測レベルに上げた後に、
前記第2のフレームのうちの過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの閾値数を満たすかまたは超える過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記HMD上に複数の対応する画像を提示するために第1の標的回数よりも多く使用されたフレームである、決定することと、
前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のスロットルレベルに設定された前記スロットルレベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることであって、前記第2のスロットルレベルが、前記コンポジタに、前記HMDの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルさせ、それにより、前記第3のフレームの個々のフレームが、前記HMD上に対応する画像を提示するために第2の標的回数使用されるように標的化され、前記第2の標的回数が、前記第1の標的回数を超える、レンダリングすることと、をさらに含む、[4]の方法。
[6]
前記予測レベルを前記第1の予測レベルから前記第2の予測レベルに上げた後、および前記第2のフレームをレンダリングする前に、前記第1のフレームと関連付けられた第1の統計をメモリから削除することをさらに含む、[5]の方法。
[7]
前記メモリから前記第1の統計を削除した後に、
前記第2のフレームと関連付けられた第2の統計を前記メモリに記憶することをさらに含み、
前記第2のフレームのうちの前記過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの前記閾値数を満たすかまたは超える過剰提示されたフレームの前記数を決定することが、前記メモリに記憶された前記第2の統計に少なくとも部分的に基づく、[6]の方法。
[8]
前記第1のフレームが、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のスロットルレベルが、前記コンポジタに、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化され、前記方法は、前記予測レベルを前記第1の予測レベルから前記第2の予測レベルに上げる前に、
動き平滑化が有効化されていることを決定することであって、動き平滑化が、前記GPUのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に前記第1のフレームの少なくともサブセットの画素データを修正する、決定することと、
前記第1の予測レベルから前記第2の予測レベルへの前記予測レベルの前記上昇と同期して、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のスロットルレベルに設定された前記スロットルレベルを使用して、前記第2のフレームをレンダリングすることであって、前記第2のスロットルレベルが、前記コンポジタに、前記HMDの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルさせ、それにより、前記第3のフレームの個々のフレームが、前記HMD上に対応する画像を提示するために第2の標的回数使用されるように標的化され、前記第2の標的回数が、前記第1の標的回数を超える、レンダリングすることと、をさらに含む、[4]の方法。
[9]
前記第1のフレームが、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のスロットルレベルが、前記コンポジタに、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化され、前記予測レベルおよび前記スロットルレベルが、同じスケールを使用して独立して調整可能であり、前記方法は、
前記予測レベルおよび前記スロットルレベルが、前記同じスケール上で同じレベルに設定されることを決定することをさらに含み、
前記予測レベルを上げることは、前記予測レベルおよび前記スロットルレベルが前記同じレベルに設定されることを決定することに応答して発生する、[4]の方法。
[10]
前記予測レベルが最大レベルまで上昇していないことを決定することをさらに含み、
前記予測レベルを上げることは、前記予測レベルが前記最大レベルまで上昇していないことを決定することに応答して発生する、[4]の方法。
[11]
前記予測レベルを上げた後に、
前記第2フレームのうちの過去のP個の連続的にレンダリングされたフレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の前記第1の標的数以下を要したことを決定することと、
前記予測レベルを前記第2の予測レベルから前記第1の予測レベルに下げることと、
前記第1の予測レベルに設定された前記予測レベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることと、をさらに含む、[4]の方法。
[12]
前記第1のフレームが、第1のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第1のスロットルレベルが、前記コンポジタに、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化され、前記方法は、
前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のフレームのうちの過去のP個の連続的にレンダリングされたフレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の前記第1の標的数以下を要したことを決定することと、
前記予測レベルを前記第2の予測レベルから前記第1の予測レベルに下げることと、
前記第2の予測レベルから前記第1の予測レベルへの前記予測レベルの前記低下と同期して、前記スロットルレベルを前記第2のスロットルレベルから第1のスロットルレベルに下げることと、
前記第1の予測レベルに設定された前記予測レベルおよび前記第1のスロットルレベルに設定された前記スロットルレベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることと、をさらに含む、[4]の方法。
[13]
ヘッドマウントディスプレイ(HMD)であって、
グラフィックスプロセッシングユニット(GPU)と、
前記HMDのメモリに記憶されたコンポジタと、を備え、前記コンポジタは、
第1の予測レベルに設定された予測レベルを使用して、一連のフレームのうちの第1のフレームをレンダリングして、前記HMDの姿勢データを、前記第1のフレームの個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期(VSync)間隔の第1の標的数に対応する時間について予測することと、
前記第1のフレームのうちの過去のN個のレンダリングされたフレームの中から、遅延フレームの閾値数を満たすかまたは超える遅延フレームの数を決定することであって、遅延フレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、アプリケーションのVSync間隔の第1の標的数よりも多くを要したフレームである、決定することと、
前記予測レベルを前記第1の予測レベルから第2の予測レベルに上げることと、
前記第2の予測レベルに設定された前記予測レベルを使用して、前記HMD上に前記一連のフレームのうちの第2のフレームをレンダリングして、前記HMDの前記姿勢データを、前記第2のフレームの個々のフレームの前記姿勢データを予測する時間に対し、VSync間隔の第2の標的回数が、VSync間隔の第1の標的回数を超える、将来のVSync間隔の第2の標的数に対応する時間について予測することと、を行う、HMD。
[14]
前記コンポジタが、
第1のスロットルレベルに設定されたスロットルレベルを使用して、前記第1のフレームをレンダリングして、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化される、スロットルすることと、
前記第2のフレームのうちの過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの閾値数を満たすかまたは超える過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記HMD上に複数の対応する画像を提示するために第1の標的回数よりも多く使用されたフレームである、決定することと、
前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のスロットルレベルに設定された前記スロットルレベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングして、前記HMDの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルすることであって、それにより、前記第3のフレームの個々のフレームが、前記HMD上に対応する画像を提示するために第2の標的回数使用されるように標的化され、前記第2の標的回数が、前記第1の標的回数を超える、スロットルすることと、を行うようにさらに構成される、[13]のHMD。
[15]
前記コンポジタが、
メモリから前記第1のフレームと関連付けられた第1の統計を削除するようにさらに構成されており、前記メモリから前記第1の統計を削除することが、前記予測レベルを前記第1の予測レベルから前記第2の予測レベルに上げた後、および前記第2のフレームをレンダリングする前に発生する、[14]のHMD。
[16]
前記コンポジタが、
前記メモリから前記第1の統計を削除した後に、前記第2のフレームと関連付けられた第2の統計を前記メモリに記憶するようにさらに構成されており、
前記第2のフレームのうちの前記過去のM個のレンダリングされたフレームの中から、過剰提示されたフレームの前記閾値数を満たすかまたは超える過剰提示されたフレームの前記数を決定することが、前記メモリに記憶された前記第2の統計に少なくとも部分的に基づく、[15]のHMD。
[17]
前記コンポジタが、
第1のスロットルレベルに設定されたスロットルレベルを使用して、前記第1のフレームをレンダリングして、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化される、スロットルすることと、
動き平滑化が有効化されていることを決定することであって、動き平滑化が、前記GPUのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に前記第1のフレームの少なくともサブセットの画素データを修正する、決定することと、
前記第1の予測レベルから前記第2の予測レベルに前記予測レベルを上げることと同期して、前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のスロットルレベルに設定された前記スロットルレベルを使用して、前記第2のフレームをレンダリングして、前記HMDの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルすることであって、それにより、前記第2のフレームの個々のフレームが、前記HMD上に対応する画像を提示するために第2の標的回数使用されるように標的化され、前記第2の標的回数が、前記第1の標的回数を超える、スロットルすることと、を行うようにさらに構成される、[13]のHMD。
[18]
前記予測レベルが、前記第1のレベル、前記第2のレベル、第3のレベル、および第4のレベルを含む4つの異なる増分レベル間で調整可能であり、前記第1のレベルが、最小レベルであり、前記第4のレベルが、最大レベルである、[13]のHMD。
[19]
前記コンポジタが、
前記第2のフレームのうちの過去のP個の連続的にレンダリングされたフレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の前記第1の標的数以下を要したことを決定することと、
前記予測レベルを前記第2の予測レベルから前記第1の予測レベルに下げることと、
前記第1の予測レベルに設定された前記予測レベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることと、を行うようにさらに構成される、[13]のHMD。
[20]
前記コンポジタが、
第1のスロットルレベルに設定されたスロットルレベルを使用して、前記第1のフレームをレンダリングして、前記HMDのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第1のフレームの個々のフレームが、前記HMD上に1つ以上の対応する画像を提示するために第1の標的回数使用されるように標的化される、スロットルすることと、
前記スロットルレベルを前記第1のスロットルレベルから第2のスロットルレベルに上げることと、
前記第2のフレームのうちの過去のP個の連続的にレンダリングされたフレームが、前記HMDの前記GPUを使用してレンダリングを終了するために、前記アプリケーション用のVSync間隔の前記第1の標的数以下を要したことを決定することと、
前記予測レベルを前記第2の予測レベルから前記第1の予測レベルに下げることと、
前記第2の予測レベルから前記第1の予測レベルに前記予測レベルを下げることと同期して、前記スロットルレベルを前記第2のスロットルレベルから第1のスロットルレベルに下げることと、
前記第1の予測レベルに設定された前記予測レベルおよび前記第1のスロットルレベルに設定された前記スロットルレベルを使用して、前記HMD上に前記一連のフレームのうちの第3のフレームをレンダリングすることと、を行うようにさらに構成される、[13]のHMD。