(57)【要約】  本明細書では、アプリケーションのレンダリング性能に基づいて、フレームがヘッドマウントディスプレイ（ＨＭＤ）にレンダリングされるときに、予測レベルおよびスロットルレベルを調整する技術が説明される。過去のＮ個のレンダリングされたフレーム（Ｎは、任意の好適な数）の中から、遅延フレームの数が、遅延フレームの閾値数を満たすかまたは超えた場合、予測レベルが上げられ、このことは、ＨＭＤのコンポジタに、より遠くの将来のＨＭＤの姿勢データを予測させる。スロットルレベルは、予測レベルの上昇とは独立して、またはそれと同期して上げられて、コンポジタに、アプリケーションのフレームレートをスロットルさせ得る（例えば、ＨＭＤのリフレッシュレートの数分の１に）。特定の数の連続的にレンダリングされたフレームが早期にレンダリングを終了した場合、予測レベル（および同じレベルの場合、スロットルレベル）が下げられ得る。【選択図】図１
2021533498.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
最小スロットルレベルおよび最小予測レベルを使用して、ヘッドマウントディスプレイ（ＨＭＤ）に一連のフレームのうちの第１のフレームをレンダリングすることであって、前記最小スロットルレベルが、前記ＨＭＤのコンポジタに、アプリケーションのフレームレートをスロットルさせて、前記ＨＭＤのリフレッシュレートと一致させ、それにより、前記第１のフレームの個々のフレームが前記ＨＭＤ上に対応する画像を提示するために１回使用されるように標的化され、前記最小予測レベルが、前記ＨＭＤの前記コンポジタに、前記ＨＭＤの姿勢データを、前記第１のフレームの前記個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期（ＶＳｙｎｃ）間隔の第１の標的数に対応する時間について予測させる、レンダリングすることと、
前記第１のフレームのうちの過去のＮ個のレンダリングされたフレームの中から遅延フレームの数を決定することであって、遅延フレームが、前記ＨＭＤのグラフィックスプロセッシングユニット（ＧＰＵ）を使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の第１の標的数よりも多くを要したフレームである、決定することと、
前記遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えることを決定することと、
前記最小予測レベルを中間予測レベルに上げることと、
前記最小スロットルレベルおよび前記中間予測レベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第２のフレームをレンダリングすることであって、前記中間予測レベルが、前記ＨＭＤの前記コンポジタに、前記ＨＭＤの前記姿勢データを、前記第２のフレームの個々のフレームの姿勢データを予測する時間に対する、将来のＶＳｙｎｃ間隔の第２の標的数に対応する時間について予測させる、レンダリングすることと、
前記第２のフレームのうちの過去のＭ個のレンダリングされたフレームの中から過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記ＨＭＤ上に複数の対応する画像を提示するために２回以上多く使用されたフレームである、決定することと、
過剰提示されたフレームの前記数が、過剰提示されたフレームの閾値数を満たすかまたは超えることを決定することと、
前記最小スロットルレベルを中間スロットルレベルに上げることと、
前記中間スロットルレベルおよび前記中間予測レベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることであって、前記中間スロットルレベルが、前記ＨＭＤの前記コンポジタに、前記アプリケーションの前記フレームレートを前記ＨＭＤの前記リフレッシュレートの半分にスロットルさせ、それにより、前記第３のフレームの個々のフレームが、前記ＨＭＤ上に対応する画像を提示するために２回使用されるように標的化される、レンダリングすることと、を含む、方法。
【請求項２】
前記最小予測レベルを前記中間予測レベルに上げた後に、および前記第２のフレームをレンダリングする前に、前記第１のフレームと関連付けられた第１の統計を維持した１つ以上のリングバッファを消去することをさらに含む、請求項１に記載の方法。
【請求項３】
前記第３のフレームのうちの過去のＰ個の連続的にレンダリングされたフレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の前記第１の標的数以下を要したことを決定することと、
前記中間予測レベルを前記最小予測レベルに下げることと、
前記最小予測レベルへの前記中間予測レベルの低下と同期して、前記中間スロットルレベルを前記最小スロットルレベルに下げることと、
前記最小予測レベルおよび前記最小スロットルレベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第４のフレームをレンダリングすることと、をさらに含む、請求項１に記載の方法。
【請求項４】
方法であって、
第１の予測レベルに設定された予測レベルを使用して、一連のフレームのうちの第１のフレームをヘッドマウントディスプレイ（ＨＭＤ）にレンダリングすることであって、前記第１の予測レベルが、前記ＨＭＤのコンポジタに、前記ＨＭＤの姿勢データを、前記第１のフレームの個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期（ＶＳｙｎｃ）間隔の第１の標的数に対応する時間について予測させる、レンダリングすることと、
前記第１のフレームのうちの過去のＮ個のレンダリングされたフレームの中から、遅延フレームの閾値数を満たすかまたは超える遅延フレームの数を決定することであって、遅延フレームが、前記ＨＭＤのグラフィックスプロセッシングユニット（ＧＰＵ）を使用してレンダリングを終了するために、アプリケーションのＶＳｙｎｃ間隔の第１の標的数よりも多くを要したフレームである、決定することと、
前記予測レベルを前記第１の予測レベルから第２の予測レベルに上げることと、
前記第２の予測レベルに設定された前記予測レベルを使用して前記ＨＭＤ上に前記一連のフレームのうちの第２のフレームをレンダリングすることであって、前記第２の予測レベルが、前記ＨＭＤの前記コンポジタに、前記ＨＭＤの前記姿勢データを、前記第２のフレームの個々のフレームの前記姿勢データを予測する時間に対し、将来のＶＳｙｎｃ間隔の第２の標的数に対応する時間について予測させ、ＶＳｙｎｃ間隔の前記第２の標的回数がＶＳｙｎｃ間隔の前記第１の標的回数を超える、レンダリングすることと、を含む、方法。
【請求項５】
前記第１のフレームが、第１のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第１のスロットルレベルが、前記コンポジタに、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化され、前記方法は、前記予測レベルを前記第１の予測レベルから前記第２の予測レベルに上げた後に、
前記第２のフレームのうちの過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの閾値数を満たすかまたは超える過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記ＨＭＤ上に複数の対応する画像を提示するために第１の標的回数よりも多く使用されたフレームである、決定することと、
前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のスロットルレベルに設定された前記スロットルレベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることであって、前記第２のスロットルレベルが、前記コンポジタに、前記ＨＭＤの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルさせ、それにより、前記第３のフレームの個々のフレームが、前記ＨＭＤ上に対応する画像を提示するために第２の標的回数使用されるように標的化され、前記第２の標的回数が、前記第１の標的回数を超える、レンダリングすることと、をさらに含む、請求項４に記載の方法。
【請求項６】
前記予測レベルを前記第１の予測レベルから前記第２の予測レベルに上げた後、および前記第２のフレームをレンダリングする前に、前記第１のフレームと関連付けられた第１の統計をメモリから削除することをさらに含む、請求項５に記載の方法。
【請求項７】
前記メモリから前記第１の統計を削除した後に、
前記第２のフレームと関連付けられた第２の統計を前記メモリに記憶することをさらに含み、
前記第２のフレームのうちの前記過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの前記閾値数を満たすかまたは超える過剰提示されたフレームの前記数を決定することが、前記メモリに記憶された前記第２の統計に少なくとも部分的に基づく、請求項６に記載の方法。
【請求項８】
前記第１のフレームが、第１のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第１のスロットルレベルが、前記コンポジタに、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化され、前記方法は、前記予測レベルを前記第１の予測レベルから前記第２の予測レベルに上げる前に、
動き平滑化が有効化されていることを決定することであって、動き平滑化が、前記ＧＰＵのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に前記第１のフレームの少なくともサブセットの画素データを修正する、決定することと、
前記第１の予測レベルから前記第２の予測レベルへの前記予測レベルの前記上昇と同期して、前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のスロットルレベルに設定された前記スロットルレベルを使用して、前記第２のフレームをレンダリングすることであって、前記第２のスロットルレベルが、前記コンポジタに、前記ＨＭＤの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルさせ、それにより、前記第３のフレームの個々のフレームが、前記ＨＭＤ上に対応する画像を提示するために第２の標的回数使用されるように標的化され、前記第２の標的回数が、前記第１の標的回数を超える、レンダリングすることと、をさらに含む、請求項４に記載の方法。
【請求項９】
前記第１のフレームが、第１のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第１のスロットルレベルが、前記コンポジタに、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化され、前記予測レベルおよび前記スロットルレベルが、同じスケールを使用して独立して調整可能であり、前記方法は、
前記予測レベルおよび前記スロットルレベルが、前記同じスケール上で同じレベルに設定されることを決定することをさらに含み、
前記予測レベルを上げることは、前記予測レベルおよび前記スロットルレベルが前記同じレベルに設定されることを決定することに応答して発生する、請求項４に記載の方法。
【請求項１０】
前記予測レベルが最大レベルまで上昇していないことを決定することをさらに含み、
前記予測レベルを上げることは、前記予測レベルが前記最大レベルまで上昇していないことを決定することに応答して発生する、請求項４に記載の方法。
【請求項１１】
前記予測レベルを上げた後に、
前記第２フレームのうちの過去のＰ個の連続的にレンダリングされたフレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の前記第１の標的数以下を要したことを決定することと、
前記予測レベルを前記第２の予測レベルから前記第１の予測レベルに下げることと、
前記第１の予測レベルに設定された前記予測レベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることと、をさらに含む、請求項４に記載の方法。
【請求項１２】
前記第１のフレームが、第１のスロットルレベルに設定されたスロットルレベルを使用してレンダリングされ、前記第１のスロットルレベルが、前記コンポジタに、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルさせ、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化され、前記方法は、
前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のフレームのうちの過去のＰ個の連続的にレンダリングされたフレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の前記第１の標的数以下を要したことを決定することと、
前記予測レベルを前記第２の予測レベルから前記第１の予測レベルに下げることと、
前記第２の予測レベルから前記第１の予測レベルへの前記予測レベルの前記低下と同期して、前記スロットルレベルを前記第２のスロットルレベルから第１のスロットルレベルに下げることと、
前記第１の予測レベルに設定された前記予測レベルおよび前記第１のスロットルレベルに設定された前記スロットルレベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることと、をさらに含む、請求項４に記載の方法。
【請求項１３】
ヘッドマウントディスプレイ（ＨＭＤ）であって、
グラフィックスプロセッシングユニット（ＧＰＵ）と、
前記ＨＭＤのメモリに記憶されたコンポジタと、を備え、前記コンポジタは、
第１の予測レベルに設定された予測レベルを使用して、一連のフレームのうちの第１のフレームをレンダリングして、前記ＨＭＤの姿勢データを、前記第１のフレームの個々のフレームの前記姿勢データを予測する時間に対する、将来の垂直同期（ＶＳｙｎｃ）間隔の第１の標的数に対応する時間について予測することと、
前記第１のフレームのうちの過去のＮ個のレンダリングされたフレームの中から、遅延フレームの閾値数を満たすかまたは超える遅延フレームの数を決定することであって、遅延フレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、アプリケーションのＶＳｙｎｃ間隔の第１の標的数よりも多くを要したフレームである、決定することと、
前記予測レベルを前記第１の予測レベルから第２の予測レベルに上げることと、
前記第２の予測レベルに設定された前記予測レベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第２のフレームをレンダリングして、前記ＨＭＤの前記姿勢データを、前記第２のフレームの個々のフレームの前記姿勢データを予測する時間に対し、ＶＳｙｎｃ間隔の第２の標的回数が、ＶＳｙｎｃ間隔の第１の標的回数を超える、将来のＶＳｙｎｃ間隔の第２の標的数に対応する時間について予測することと、を行う、ＨＭＤ。
【請求項１４】
前記コンポジタが、
第１のスロットルレベルに設定されたスロットルレベルを使用して、前記第１のフレームをレンダリングして、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化される、スロットルすることと、
前記第２のフレームのうちの過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの閾値数を満たすかまたは超える過剰提示されたフレームの数を決定することであって、過剰提示されたフレームが、前記ＨＭＤ上に複数の対応する画像を提示するために第１の標的回数よりも多く使用されたフレームである、決定することと、
前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のスロットルレベルに設定された前記スロットルレベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングして、前記ＨＭＤの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルすることであって、それにより、前記第３のフレームの個々のフレームが、前記ＨＭＤ上に対応する画像を提示するために第２の標的回数使用されるように標的化され、前記第２の標的回数が、前記第１の標的回数を超える、スロットルすることと、を行うようにさらに構成される、請求項１３に記載のＨＭＤ。
【請求項１５】
前記コンポジタが、
メモリから前記第１のフレームと関連付けられた第１の統計を削除するようにさらに構成されており、前記メモリから前記第１の統計を削除することが、前記予測レベルを前記第１の予測レベルから前記第２の予測レベルに上げた後、および前記第２のフレームをレンダリングする前に発生する、請求項１４に記載のＨＭＤ。
【請求項１６】
前記コンポジタが、
前記メモリから前記第１の統計を削除した後に、前記第２のフレームと関連付けられた第２の統計を前記メモリに記憶するようにさらに構成されており、
前記第２のフレームのうちの前記過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの前記閾値数を満たすかまたは超える過剰提示されたフレームの前記数を決定することが、前記メモリに記憶された前記第２の統計に少なくとも部分的に基づく、請求項１５に記載のＨＭＤ。
【請求項１７】
前記コンポジタが、
第１のスロットルレベルに設定されたスロットルレベルを使用して、前記第１のフレームをレンダリングして、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化される、スロットルすることと、
動き平滑化が有効化されていることを決定することであって、動き平滑化が、前記ＧＰＵのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に前記第１のフレームの少なくともサブセットの画素データを修正する、決定することと、
前記第１の予測レベルから前記第２の予測レベルに前記予測レベルを上げることと同期して、前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のスロットルレベルに設定された前記スロットルレベルを使用して、前記第２のフレームをレンダリングして、前記ＨＭＤの前記リフレッシュレートに対して前記アプリケーションの前記フレームレートをスロットルすることであって、それにより、前記第２のフレームの個々のフレームが、前記ＨＭＤ上に対応する画像を提示するために第２の標的回数使用されるように標的化され、前記第２の標的回数が、前記第１の標的回数を超える、スロットルすることと、を行うようにさらに構成される、請求項１３に記載のＨＭＤ。
【請求項１８】
前記予測レベルが、前記第１のレベル、前記第２のレベル、第３のレベル、および第４のレベルを含む４つの異なる増分レベル間で調整可能であり、前記第１のレベルが、最小レベルであり、前記第４のレベルが、最大レベルである、請求項１３に記載のＨＭＤ。
【請求項１９】
前記コンポジタが、
前記第２のフレームのうちの過去のＰ個の連続的にレンダリングされたフレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の前記第１の標的数以下を要したことを決定することと、
前記予測レベルを前記第２の予測レベルから前記第１の予測レベルに下げることと、
前記第１の予測レベルに設定された前記予測レベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることと、を行うようにさらに構成される、請求項１３に記載のＨＭＤ。
【請求項２０】
前記コンポジタが、
第１のスロットルレベルに設定されたスロットルレベルを使用して、前記第１のフレームをレンダリングして、前記ＨＭＤのリフレッシュレートに対して前記アプリケーションのフレームレートをスロットルすることであって、それにより、前記第１のフレームの個々のフレームが、前記ＨＭＤ上に１つ以上の対応する画像を提示するために第１の標的回数使用されるように標的化される、スロットルすることと、
前記スロットルレベルを前記第１のスロットルレベルから第２のスロットルレベルに上げることと、
前記第２のフレームのうちの過去のＰ個の連続的にレンダリングされたフレームが、前記ＨＭＤの前記ＧＰＵを使用してレンダリングを終了するために、前記アプリケーション用のＶＳｙｎｃ間隔の前記第１の標的数以下を要したことを決定することと、
前記予測レベルを前記第２の予測レベルから前記第１の予測レベルに下げることと、
前記第２の予測レベルから前記第１の予測レベルに前記予測レベルを下げることと同期して、前記スロットルレベルを前記第２のスロットルレベルから第１のスロットルレベルに下げることと、
前記第１の予測レベルに設定された前記予測レベルおよび前記第１のスロットルレベルに設定された前記スロットルレベルを使用して、前記ＨＭＤ上に前記一連のフレームのうちの第３のフレームをレンダリングすることと、を行うようにさらに構成される、請求項１３に記載のＨＭＤ。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
本出願は、２０１８年８月６日出願の「ＰＲＥＤＩＣＴＩＯＮ  ＡＮＤ  ＴＨＲＯＴＴＬＩＮＧ  ＡＤＪＵＳＴＭＥＮＴＳ  ＢＡＳＥＤ  ＯＮ  ＡＰＰＬＩＣＡＴＩＯＮ  ＲＥＮＤＥＲＩＮＧ  ＰＥＲＦＯＲＭＡＮＣＥ」と題された米国特許出願第１６／０５６，２７７号の優先権を主張するＰＣＴ出願であり、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００２】
バーチャルリアリティ（ＶＲ）システムは、ビデオゲーム業界の内外の両方で使用されている。ＶＲヘッドセットに内蔵されているようなＶＲシステム用ディスプレイは、通常、ＶＲアプリケーションに好適である最小リフレッシュレートで動作する。例えば、９０ヘルツ（Ｈｚ）はＶＲディスプレイの一般的なリフレッシュレートである。「ライブレンダリング」シナリオでは、ビデオゲームなどのグラフィックベースのアプリケーションは、ディスプレイのリフレッシュレートに適合するフレームレートでレンダリングするためのフレームを出力する。つまり、アプリケーションから受信された新しいフレーム（本明細書では「実際のフレーム」と称する）は、画面が更新されるたびに表示される。そのようなライブレンダリングシナリオは、多くの場合、アプリケーションが「フレームレートに達する」または「フレームレートにヒットする」と称される。
【０００３】
実際には、アプリケーションは、様々な理由で常にフレームレートに達するとは限らない。例えば、アプリケーションがフレームを断続的にドロップする場合があり、および／またはアプリケーションが一時的により遅いレートでフレームを出力する場合がある（例えば、理想的なフレームレートが９０フレーム／秒の場合は４５フレーム／秒）。アプリケーションがフレームレートに達していない状況では、「回転のみの再投影」と呼ばれる技術が、ユーザの頭部の回転を考慮するように、欠落しているフレームを再投影されたフレームで置き換えるために使用され得、これは、アプリケーションがフレームレートに達しているかのようにユーザに見せる。例えば、再投影しない場合、アプリケーションからのフレームレートが不足すると、ゲーム内でスタッタまたはヒッチが発生する場合がある。ユーザが仮想環境に完全に没入しているＶＲアプリケーションでは、アプリケーションがフレームレートに達しておらず、欠落しているフレームを補償するための再投影が存在しない場合、ユーザは、不快になり得る。したがって、再投影は、アプリケーションがフレームレートに達していないときにユーザ体験をより良好にすることを可能にする技術である。アプリケーションが理想的なフレームレートの半分でフレームを出力している例を検討する（例えば、９０フレーム／秒が理想的なフレームレートである場合は、４５フレーム／秒）。この例では、直近でレンダリングされた実際のフレームの画素データを使用して、シーンを変換する再投影されたフレームを作成し（例えば、回転および再投影の計算を通して）、再投影されたシーンをユーザの現在の頭の配向に適合させることで、１つおきにフレームを再投影させることができる。これは、ユーザの頭部の回転を考慮して予想されるやり方でシーンが動いているようにユーザに見えるようにする。
【０００４】
回転のみの再投影は、ゲーム内のスタッタまたはヒッチを軽減するが、少なくとも、低持続性ディスプレイを使用するＶＲシステム（例えば、ディスプレイがフレーム時間のうちのごくわずかな間、照明される場合）では、頭部の回転中に、回転のみの再投影自体の望ましくない視覚的アーティファクトを生成する。例えば、回転のみの再投影は、頭部の回転を考慮するが、フレーム間でシーン内を移動またはアニメ化するオブジェクトを考慮しない。これは、移動しているかまたはアニメ化しているオブジェクトに関して、「ジャダ」と呼ばれる望ましくない視覚的アーティファクトを発生させ得る。ジャダは、移動しているオブジェクト（例えば、画面上を移動する弾丸またはボール）が２つの場所の間で（またはそれ自体から離れて）フレーム間で跳ね返るように見える、「ダブルゴースト効果」をユーザに知覚させる。したがって、再投影が使用されている間にユーザがその頭を回転させると、シーン内の任意の移動またはアニメ化しているオブジェクトがジャダすることになる。アプリケーションのレンダリング性能が予測不可能であるため、アプリケーションのフレームレートは、量を変えることによって、およびランダムな時間で、ディスプレイの垂直同期（ＶＳｙｎｃ）信号と位相が同じである、および異なる傾向があり、上記の移動しているオブジェクトのジャダは、視認しているユーザにとって不安定で、かつ耐えられないものなり得る。
【０００５】
本明細書では、これらのシステムおよび他のシステムを改善および強化するための技術的解決法を提供する。
【図面の簡単な説明】
【０００６】
詳細な説明を、添付の図面を参照して説明する。図では、参照番号の左端の数字は、参照番号が最初に現れる図を指す。異なる図における同じ参照番号の使用は、類似または同一の構成要素または機能を示す。
【図１】アプリケーションのレンダリング性能に基づいて予測レベルおよびスロットルレベルを調整するための例示的な技術を例示する図である。
【図２】アプリケーションのレンダリング性能に関連する統計を記憶するために使用され得る例示的なリングバッファを概念的に例示する図であり、統計は、予測およびスロットルレベルを調整するか否か、およびいつ調整するかを決定するために使用可能である。
【図３Ａ】本明細書に開示される実施形態による、ヘッドマウントディスプレイ（ＨＭＤ）上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセスのフロー図を例示する。
【図３Ｂ】本明細書に開示される実施形態による、ヘッドマウントディスプレイ（ＨＭＤ）上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセスのフロー図を例示する。
【図４】本明細書に開示される実施形態による、ＨＭＤ上にフレームをレンダリングしている間に、予測およびスロットルレベルを下げるか否か、およびいつ下げるかを決定するための例示的なプロセスのフロー図である。
【図５】本明細書に開示される技術が実装され得る、ＶＲヘッドセットなどのウェアラブルデバイスの例示的な構成要素を例示する。
【発明を実施するための形態】
【０００７】
本明細書では、とりわけ、アプリケーションのレンダリング性能に基づいて、フレームがヘッドマウントディスプレイ（ＨＭＤ）にレンダリングされるときに、予測レベルおよびスロットルレベルを調整する技術が説明される。予測レベルおよびスロットルレベルの調整は、アプリケーションの性能が低下したとき（例えば、アプリケーションがフレームレートに達していないとき）、ＨＭＤ上に提示される画像に現れ得る望ましくない視覚的アーティファクトを軽減する。
【０００８】
ＨＭＤは、ユーザが仮想現実（ＶＲ）環境または拡張現実（ＡＲ）環境に没入する目的で、ユーザによって着用され得る。ＨＭＤの１つ以上のディスプレイパネルは、アプリケーション（例えば、ビデオゲーム）によって出力されたフレームに基づいて画像をレンダリングし、これらの画像は、ＨＭＤに含まれる光学系を通してユーザに表示され、ユーザは、ユーザがＶＲまたはＡＲ環境に没入しているかのように画像を知覚する。このように、ＨＭＤは、「再投影」と呼ばれる技術を利用して、フレームレートに達していないアプリケーションを補償し得る。例えば、再投影されたフレームは、実際のフレーム間でレンダリングされて理想的なフレームレートを達成し得、各再投影されたフレームは、アプリケーションから受信された最近レンダリングされた実際のフレーム（最も直近にレンダリングされた実際のフレーム）の画素データを使用して生成され得る。再投影されたフレームでは、以前の実際のフレームでレンダリングされたシーンが、ユーザの頭部の回転を考慮したやり方で変換される（例えば、回転および再投影の計算を通して）。アプリケーションのレンダリング性能が特定の点まで、および／または不規則に低下した場合、ジャダなどの望ましくない視覚的アーティファクトが、視認しているユーザが耐えることができない様式で現れ得る。
【０００９】
本明細書では、予測レベルおよびスロットルレベルへのリアルタイム調整（上または下）を通じて、望ましくない視覚的アーティファクトを軽減するための技術が説明される。予測レベルは、どのくらい遠い将来における、ＨＭＤの姿勢のセット（姿勢データ）が予測されるかに関する。例えば、アプリケーションがフレームレートに達しているとき、フレームのレンダリングに使用する姿勢データをアプリケーションに提供する、コンポジタは、ＨＭＤの姿勢データを、姿勢データを予測する時間に対する、将来の２つの垂直同期（ＶＳｙｎｃ）間隔に対応する時間について予測し得る。したがって、予測レベルは、この基本予測レベルから１つのＶＳｙｎｃ間隔の増分で上げられ得、そのため、コンポジタは、将来の３つのＶＳｙｎｃ間隔、将来の４つのＶＳｙｎｃ間隔などの、将来の姿勢データを予測することができる。これはまた、アプリケーションがレンダリングしようとしている所与のフレームの姿勢データをコンポジタが予測する将来までのフレーム数を調整することとして考えられ得る。したがって、アプリケーションがフレームレートに達しているとき、コンポジタは、将来までの１フレーム先の姿勢データを予測し得、予測レベルがその基本予測レベルから上げられた場合、コンポジタは、将来までの２フレーム先、将来までの３フレーム先などの姿勢データを予測し得る。
【００１０】
このように予測レベルを調整するための例示的な理由は、次のとおりである。アプリケーションがフレームレートに達していない（例えば、各フレームをレンダリングするために複数のＶＳｙｎｃ間隔をとる）場合）、個々のフレームは、ユーザに画像を表示するために複数回使用される。さらに、予測された時間以外の時間にフレームを表示することは、コンポジタに、ジャダを軽減するために再投影を使用させる。しかしながら、再投影は、フレーム間のシーン内で移動またはアニメ化するオブジェクトを考慮しないため、予測は、この前後関係での再投影の使用によって引き起こされる望ましくない視覚的アーティファクトを軽減することを助ける。例示的な例では、フレームがレンダリングするために２つのＶＳｙｎｃ間隔をとる場合、ほとんどの場合、フレームもまた、ユーザに画像を表示するために２回使用されることになる。予測された姿勢が、個々のフレームターゲットを１回レンダリングするために使用されたため、その時間は、フレームがユーザに画像を提示するために使用される２回のうちの１回に対してのみ正しい。とはいえ、使用される両方の時間で時間が正しくない可能性がある。例えば、所与のフレームの姿勢データが将来の１つのＶＳｙｎｃ間隔で予測され、かつアプリケーションがフレームをレンダリングするために２つのＶＳｙｎｃ間隔をとった場合、フレームは、２つの再投影されたフレームを生成するために２回使用されることになる。予測レベルを上げて、将来の１つの追加のＶＳｙｎｃ間隔（例えば、２つのＶＳｙｎｃ間隔）で姿勢データを予測することによって、姿勢データは、フレームが使用される初回に正しいことになり、このシナリオでは、フレームは、単一の再投影されたフレームに対して１回（２回ではなく）使用されることになる。
【００１１】
スロットルレベルは、アプリケーションのフレームレートがどの程度スロットルされるかに関する。例えば、アプリケーションがフレームレートに達しているとき、コンポジタは、アプリケーションのフレームレートをスロットルして、ＨＭＤのリフレッシュレート（例えば、９０Ｈｚ）と一致させ得る。したがって、スロットルレベルは、この基本スロットルレベルから段階的に上げられ得、そのため、コンポジタは、アプリケーションのフレームレートをＨＭＤのリフレッシュレートの半分、ＨＭＤのリフレッシュレートの３分の１などにスロットするなど、アプリケーションのフレームレートをますますスロットルする。これはまた、アプリケーションからの各実際のフレームがＨＭＤ上に画像を提示する回数を調整することとして考えられ得る。したがって、アプリケーションがフレームレートに達しているとき、コンポジタは、アプリケーションによって出力された各フレーム（例えば、各実際のフレーム）を１回使用して、対応する画像をＨＭＤ上に提示する。スロットルレベルがその基本スロットルレベルから上げられた場合、コンポジタは、ＨＭＤ上に複数の対応する画像を提示するために、各実際のフレームを２回、３回など使用し得る。例えば、アプリケーションのフレームレートがＨＭＤのリフレッシュレートの半分にスロットルされている場合、アプリケーションからの個々のフレームは、２回使用され得、そのうちの少なくとも１回は、アプリケーションによって出力された実際のフレーム間のギャップを埋める再投影されたフレームを生成するために使用される。
【００１２】
このようにスロットルレベルを調整するための例示的な理由は、次のとおりである。ほとんどのアプリケーションは、可変フレームデルタを特に良好に取り扱わず、それらを正しく取り扱ったとしても、ユーザ体験は、生成されたフレームが時間的に等間隔である場合に、より良好であり、全体的に平滑な体験を生み出す。しかしながら、フレームがレンダリングするために１つよりもわずかに多いＶＳｙｎｃ間隔をとる状態が間に存在する。この状態でも、ほとんどのフレームが依然として１回表示される。しかしながら、このカスケードは、単一のフレームが２回表示され、かつサイクルが再開するまで、各フレームの終了を少し遅らせる。これらの複数回表示されるフレームについて、アプリケーションのスロットルを即座に開始するよりもカスケードを可能にする方が、ユーザ体験がより良好である閾値が存在する。したがって、スロットルレベルを上げることは、この閾値が超えたときに役立つ。
【００１３】
例示的なプロセスでは、一連のフレームのうちの第１のフレームが、第１の予測レベルに設定された予測レベルおよび第１のスロットルレベルに設定されたスロットルレベルを使用して、ＨＭＤ上にレンダリングされる。第１の予測レベルは、ＨＭＤのコンポジタに、ＨＭＤの姿勢データを、第１のフレームの個々のフレームの姿勢データを予測する時間に対する、将来のＶＳｙｎｃ間隔の第１の標的数（例えば、２つのＶＳｙｎｃ間隔）に対応する時間について予測させる。次いで、コンポジタは、第１のフレームの過去のＮ個のレンダリングされたフレーム（Ｎは、任意の好適な数）の中から、遅延フレームの数が、遅延フレームの閾値数を満たすかまたは超えるか否かを決定し得る。ここで、遅延フレームは、ＨＭＤのグラフィックスプロセッシングユニット（ＧＰＵ）を使用してレンダリングを終了するために、アプリケーション用のＶＳｙｎｃ間隔の第１の標的数よりも多くを要したフレームである。遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えた場合、コンポジタは、予測レベルを第１の予測レベルから第２のより大きい予測レベルに上げ得、一連のフレームのうちの第２のフレームが、その後、第２の予測レベルに設定された予測レベルを使用してレンダリングされる。第２の予測レベルは、第１の予測レベルと比較して、コンポジタに、より遠い将来の時間の姿勢データを予測させ得る。例えば、第２の予測レベルでは、コンポジタは、ＶＳｙｎｃ間隔の第１の標的数（例えば、２つのＶＳｙｎｃ間隔）よりも大きい、将来の、３つのＶＳｙｎｃ間隔などの、ＶＳｙｎｃ間隔の第２の標的数に対応する時間の姿勢データを予測し得る。
【００１４】
スロットルレベルは、予測レベルの上昇とは独立して、または予測レベルの上昇と同期して上げられ得る。スロットルレベルが予測レベルの上昇とは独立して上げられるとき、スロットルレベルは、過去のＭ個のレンダリングされたフレーム（Ｍは、任意の好適な数）の中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えることの決定に基づいて、上げられ得る。ここで、過剰提示されたフレームは、現在のスロットルレベルの標的回数よりも多く使用されたフレームである。例えば、第１のスロットルレベルは、コンポジタに、アプリケーションのフレームレートをＨＭＤのリフレッシュレートと一致させるようにスロットルさせ得、このことは、個々のフレームが、ＨＭＤ上に対応する画像を提示するために、１回（第１の標的回数）使用されるように標的化されることを意味する。このシナリオでは、過剰提示されたフレームは、ＨＭＤ上に対応する画像を提示するために２回以上多く（第１の標的回数よりも多く）使用されたフレームである。スロットルレベルは、過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えることの決定に基づいて、第１のスロットルレベルから第２のスロットルレベルに上げられ得、それによって、コンポジタに、アプリケーションのフレームレートをＨＭＤのリフレッシュレートの数分の１（例えば、リフレッシュレートの半分）にスロットルさせる。そうでなければ、スロットルレベルは、予測レベルが上げられるときにいつでも、予測レベルと同期して上げられ得る。
【００１５】
予測レベルは、フレームが少なくとも１つのＶＳｙｎｃ間隔だけ現在の予測よりも速くレンダリングを終了したという意味で「早期に」、アプリケーションが過去のＰ個の連続的にレンダリングされたフレーム（Ｐは、任意の好適な数）のレンダリングを終了した場合に、下げられ得る。例えば、現在の予測レベルが、コンポジタに将来までの３つ先のＶＳｙｎｃ間隔のＨＭＤの姿勢データを予測させる第２の予測レベルに設定されている場合、フレームは、アプリケーションが２つのＶＳｙｎｃ間隔未満でフレームのレンダリングを終了した場合に、早期にレンダリングを終了したとみなされる。スロットルレベルは、スロットルレベルが予測レベルと等しい限り、予測レベルの低下と同期して下げられ得、そうでなければ、スロットルレベルは、スロットルレベルが予測レベル未満である場合、そのままになる。
【００１６】
本明細書では、本明細書に開示される技術およびプロセスを実装するように構成されたシステム、例えば、ディスプレイシステム（例えば、ＨＭＤ）を含むシステム、ならびに本明細書に開示される技術およびプロセスを実装するためのコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体もまた、開示される。本明細書に開示される技術およびシステムは、例として、ビデオゲームアプリケーション、特にＶＲゲームアプリケーションの文脈で議論されているが、本明細書に説明される技術およびシステムは、非限定的に、非ＶＲアプリケーション（例えば、ＡＲアプリケーション）、および／または産業機械アプリケーション、防衛アプリケーション、ロボットアプリケーションなどの非ゲームアプリケーションを含む、他のアプリケーションに利益を提供し得ることを理解されたい。
【００１７】
図１は、アプリケーションのレンダリング性能に基づいて予測レベルおよびスロットルレベルを調整するための例示的な技術を例示する図である。図１は、ユーザ１０２によって着用されたヘッドマウントディスプレイ（ＨＭＤ）１００を図示する。ＨＭＤ１００は、開示された技術を実装し得る例示的な「ディスプレイシステム」であるが、「ディスプレイシステム」の他のタイプおよび／または実装が、本明細書に説明される技術から利益を得ることができる。図１の例のＨＭＤ１００は、ステレオペアのディスプレイパネルの左ディスプレイパネルおよび右ディスプレイパネルなどの、複数のディスプレイパネルを含み得る。これらのディスプレイパネルは、ＨＭＤ１００を着用しているユーザ１０２によって視認可能である一連の画像フレーム（以下、「フレーム」と呼ぶ）を提示するために使用され得る。例は、２パネルＨＭＤ１００を用いて説明されているが、ＨＭＤ１００は、単一のディスプレイパネルまたは３つ以上のディスプレイパネルを含み得ることを理解されたい。したがって、「ディスプレイパネル」という用語は、本明細書に使用される際、２パネルＨＭＤ１００の一対のディスプレイパネルのいずれかのディスプレイパネルを指し得るか、または任意の数のディスプレイパネル（例えば、単一パネルＨＭＤ１００またはマルチパネルＨＭＤ１００）を有するＨＭＤ１００の単一のディスプレイパネルを指し得る。２パネルＨＭＤ１００では、ステレオフレームバッファは、例えば、ＨＭＤ１００の両方のディスプレイパネル上で２１６０×１２００ピクセル（例えば、ディスプレイパネルあたり１０８０×１２００ピクセル）をレンダリングし得る。
【００１８】
ＨＭＤ１００は、ＨＭＤ１００のディスプレイパネル（複数可）上でのフレームの提示中に発光要素を利用して光を放出する発光ディスプレイなど、任意の好適なタイプのディスプレイ技術を利用するディスプレイパネルを含み得る。一例として、ＨＭＤ１００のディスプレイパネルは、液晶ディスプレイ（ＬＣＤ）、有機発光ダイオード（ＯＬＥＤ）ディスプレイ、無機発光ダイオード（ＩＬＥＤ）ディスプレイ、またはＨＭＤアプリケーションに対して好適なディスプレイ技術を利用する任意の他の好適なタイプのディスプレイを含み得る。いくつかの実施形態では、ＨＭＤ１００のディスプレイシステムは、低持続性ディスプレイシステムであり得、これは、発光要素が、ディスプレイパネル上に画像をレンダリングするために使用される各フレームに対して、フレーム時間のごく一部（例えば、１１．１１ｍｓのフレーム時間のうちの約１ミリ秒（ｍｓ））の間、光を放出することを意味する。
【００１９】
ＨＭＤ１００は、ＶＲゲームシステムで使用するためなど、ＶＲシステムで使用するためのＶＲヘッドセットを表し得る。しかしながら、ＨＭＤ１００は、追加的に、または代替的に、ＡＲアプリケーションで使用するためのＡＲヘッドセットとして実装され得る。ＡＲでは、ユーザ１０２は、実世界環境上に重ね合わされた仮想オブジェクトを見るが、ＶＲでは、ユーザ１０２は、実世界環境を見ることはなく、ＨＭＤ１００のディスプレイパネルおよび光学系（例えば、レンズ）を介して知覚されるような仮想環境に完全に没入する。本明細書で説明する例は、主にＶＲベースのＨＭＤ１００に関係するが、ＨＭＤ１００は、ＶＲアプリケーションでの実装に限定されないことを理解されたい。
【００２０】
一般に、ＨＭＤ１００自体、またはＨＭＤ１００と関連付けられ、かつそれに連結されたコンピューティングデバイス（例えば、パーソナルコンピュータ（ＰＣ）、ゲームコンソールなど）などの、コンピューティングデバイス上で実行されるアプリケーション１０４は、一連のフレーム１０６（１）、１０６（２）、１０６（３）など（まとめて１０６）を出力するように構成され得る。一連のフレーム１０６は、最終的に、ＨＭＤ１００のディスプレイパネル（複数可）上にレンダリングされる。いくつかの実施形態では、フレーム１０６がＨＭＤ１００のディスプレイパネル上にレンダリングされる前に標的にレンダリングされ得るように、オフスクリーンレンダリングが利用される。したがって、「レンダリング」は、本明細書に使用される際、ディスプレイ以外の標的への、ディスプレイ自体におけるレンダリングの前のレンダリング、および／またはディスプレイ上でのレンダリング（例えば、異なる標的へのオフスクリーンレンダリングなしの、またはその後の）
【００２１】
図１の例は、グラフィックスプロセッシングユニット（ＧＰＵ）タイムライン１０８上の３つの例示的なフレーム１０６（１）、１０６（２）、および１０６（３）を図示して、レンダリングを終了するフレーム１０６とＨＭＤ１００の垂直同期（ＶＳｙｎｃ）信号１１０との間でタイミングがどのように変化し得るかを例示する。ここで、アプリケーション１０４は、ＧＰＵタイムライン１０８上で左から右に、順番に、最初にフレーム１０６（１）、次いで、フレーム１０６（２）、次いで、フレーム１０６（３）をレンダリングする。ＧＰＵタイムライン１０８はまた、各ＶＳｙｎｃ間隔１１６の終端に向かって、ＨＭＤ１００のコンポジタ１１４のレンダリング作業負荷１１２も示す。
【００２２】
一般に、ＨＭＤ１００のディスプレイシステムは、ディスプレイ関連のイベントをディスプレイのリフレッシュサイクルに同期させるためにＶＳｙｎｃ信号１１０を利用し得る。例えば、ＨＭＤ１００が９０Ｈｚのリフレッシュレートを有する場合、ＶＳｙｎｃ信号１１０は、１秒間に９０回のレートでパルス送信する。９０Ｈｚのリフレッシュレートでは、ＶＳｙｎｃ間隔１１６は、約１１．１１ｍｓの長さである。９０ＨｚのＨＭＤ１００のＶＳｙｎｃ間隔１１６は、１１ｍｓ間隔と呼ばれることがあるが、ＶＳｙｎｃ間隔１１６は、９０Ｈｚディスプレイシステムの場合、１０００ミリ秒÷９０として計算され得、ＶＳｙｎｃ間隔１１６の境界におけるＶＳｙｎｃ信号１１０（１）は、ＨＭＤ１００のディスプレイパネルのフラッシュを表し（例えば、パネルがオンになり、ユーザ１０２が画像を見たとき）、これは、図１がＶＳｙｎｃ信号１１０をＧＰＵタイムライン１０８上の瞬間的な時点として例示しているにもかかわらず、フレームレートと比較して非常に短いある期間、またはＶＳｙｎｃ間隔１１６の時間にわたって発生し得る。
【００２３】
図１に示されるフレーム１０６は、ビデオゲームアプリケーションまたは任意の他のタイプのグラフィックスベースアプリケーションを表し得るアプリケーション１０４から出力されるという意味で「実際の」フレームを表すことを意味する。アプリケーション１０４は、個々のフレーム１０６をレンダリングするために画素データをフレームバッファに出力するグラフィックスパイプラインで実行され得る。各フレーム１０６の画素データは、いくつかの実施形態では、画素ごとの値（例えば、色値）の２次元配列を含み得る。いくつかの実施形態では、画素データは、深度値などの追加のデータまたはメタデータをさらに含む。いくつかの実施形態では、画素データは、単一の色およびアルファ値のセットによって表される各画素のデータを含み得る（例えば、赤チャネルの１つの色値、緑チャネルの１つの色値、青チャネルの１つの色値、および１つ以上のアルファチャネルの１つ以上の値）。この画素データは、フレームバッファに出力されて、ＨＭＤ１００のディスプレイパネル（複数可）上の画像に所望の視覚効果を提示し得る。
【００２４】
実行中、ＨＭＤ１００のヘッドトラッキングモジュールは、ＨＭＤ１００の位置および姿勢に関するデータを生成し得る。コンポジタ１１４は、将来のある時点におけるＨＭＤ１００の姿勢データ（例えば、姿勢のセット）を予測し、この予測された姿勢データをアプリケーション１０４に提供して、ユーザ１０２の予測された頭部の位置／姿勢に従って、一連のフレーム１０６内の次のフレーム１０６をどのようにレンダリングするかに関してアプリケーション１０４に通知するように構成される。コンポジタ１１４が、ＨＭＤ１００の現在の姿勢の代わりに、将来のＨＭＤ１００の姿勢データを予測する理由は、所与のフレーム１０６（アプリケーション１０４がフレームレートに達していると仮定する）が、将来のある時点でＨＭＤ１００のディスプレイパネル（複数可）上の画像として実際に提示されることになるためである（例えば、姿勢データがアプリケーション１０４に提供された時の約２５ｍｓ後の時間）。すなわち、所与のフレーム１０６に対応する画素データを有するディスプレイは、そのフレーム１０６をレンダリングするために姿勢データがアプリケーション１０４に提供された約２５ｍｓ後に、そのフレーム１０６に対する光子を実際に放出する。姿勢データを事前にアプリケーション１０４に提供することは、ユーザ１０４がオブジェクト（静止および移動しているオブジェクトの両方）を含む仮想環境を見回しているとユーザ１０４に信じさせるやり方で、アプリケーション１０４がＨＭＤ１００上で画像をレンダリングするための画素データを出力することを可能にする。アプリケーションがフレームレートに達している場合、静止および移動しているオブジェクトの両方が、ユーザ１０２の頭部の動きと共に、予想される様式で、シーン内で移動するように知覚される。
【００２５】
ＨＭＤ１００のグラフィックスロジックは、非同期であってもよく、または同期であってもよい。非同期システムでは、コンポジタ１１４は、ＨＭＤ１００のＧＰＵ上のアプリケーション１０４とは別個に（別個の非同期スレッド上で）実行される。例えば、コンポジタ１１４は、フレーム１０６（１）をレンダリングするための姿勢データ（ＶＳｙｎｃ３  １１０（３）に予測される）をアプリケーション１０４に提供し得る。コンポジタの作業負荷１１２（１）が開始する前にアプリケーション１０４がレンダリングを終了すると仮定すると、コンポジタ１１４は、アプリケーション１０４からフレーム１０６（１）（例えば、左右の画像フレーム）を受け取り、ＨＭＤ１００のディスプレイパネル上へのバックバッファ内にフレーム１０６を歪ませるように構成される。例えば、コンポジタ１１４は、アプリケーション１０４によって出力されたフレーム１０６（１）に基づいて、ＨＭＤ１００上に最終画像をレンダリングする前に、色収差、パネルマスキングなどを実施し得る。コンポジタ１１４は、高優先度コンテキストモードで実行し得、これは、コンポジタ１１４がその次の作業負荷１１２（１）を開始する時間になると、ＧＰＵドライバは、コンポジタ１１４がアプリケーション１０４をプリエンプトすることを可能にする（例えば、アプリケーション１０４が依然としてフレーム１０６をレンダリングしている場合、アプリケーション１０４がレンダリングすることを中断させる、および／またはアプリケーション１０４が次のフレーム１０６のレンダリングを開始することを防止する）ことを意味する。コンポジタ１１４は、アプリケーション１０４で何が起こっているかにかかわらず、その作業１１２を行うために、各ＶＳｙｎｃ間隔１１６の終端にタイムスロット（平均で最大１ｍｓ）を割り当て得る。したがって、全てのＶＳｙｎｃ信号１１０において、コンポジタ１１４は、コンポジタ１１４がアプリケーション１０６から取得し得る最良のフレーム１０６（例えば、フレッシュ／新しいフレーム１０６、または以前にレンダリングされたフレーム１０６のいずれか）を取得するという意味で「何か」をレンダリングし、コンポジタ１１４は、そのフレーム１０６と関連付けられた画素データを使用して、ＨＭＤ１００のディスプレイパネル（複数可）上に出力するために画素データをフレームバッファに入れる。
【００２６】
いくつかの実施形態では、コンポジタ１１４は、定数バッファ内の現在の値のコピーを作成して、どのフレーム１０６を次のＶＳｙｎｃ信号１１０におけるレンダリングに使用するかを決定し得る。すなわち、コンポジタ１１４は、定数バッファ内の値に対応するフレーム１０６を取得し、フレーム１０６がどのＶＳｙｎｃ信号１１０を標的化したかを決定し、次に来るＶＳｙｎｃ信号１１０と同じでない場合、コンポジタ１１４は、再投影を利用して、フレーム１０６の画素データを修正して、次のＶＳｙｎｃ信号１１０について予測された姿勢データと一致させる。各ＶＳｙｎｃ間隔１１６に対する異なる画素データを出力するコンポジタ１１４の機能は、どのような場合でも、アプリケーション１０４がフレームレートに達していないときに、全てを「ライブ」に保ち、ＨＭＤ１００上にレンダリングされた画像がひどくヒッチしないように保つ機構である。
【００２７】
図１の例では、アプリケーション１０４がフレーム１０６（０）（図示せず）のレンダリングをちょうど終了し、フレーム１０６（１）のレンダリングを開始する準備ができている場合を考える。この時点で、アプリケーション１０４は、フレーム１０６（１）のレンダリングに使用するために、コンポジタ１１４から姿勢データを受信するための関数を呼び出し得る。コンポジタは、第１のレベルに設定された現在の予測レベル（例えば、予測レベル＝０）において、第１のフレーム１０６（１）の姿勢データを予測する時間に対する、将来の２つのＶＳｙｎｃ間隔１１６であり得る、将来のＶＳｙｎｃ間隔１１６の第１の標的数に対応する時間について、ＨＭＤ１００の姿勢データを予測する。例えば、コンポジタ１１４は、ＶＳｙｎｃ３  １１０（３）に対応する時点におけるＨＭＤ１００の予測された将来の姿勢に従って、ＨＭＤ１００の姿勢データを予測し得る。例えば、１０６（１）は、ＶＳｙｎｃ２  １１０（２）でスキャンアウトを開始し得、ディスプレイパネル（複数可）が証明される前にＨＭＤ１００のディスプレイパネル（複数可）に読み込むためにさらに別の完全なＶＳｙｎｃ間隔１１６を要し得る。ディスプレイパネル（複数可）から放出された光子がディスプレイ内にスキャンアウトされているとき（短い整定期間の後）にＶＳｙｎｃ間隔１１６のサブセットにわたって上から下にスキャンすることを意味するローリング照明（グローバル点滅照明の代わりに）ディスプレイをＨＭＤ１００が使用する場合、コンポジタ１１４は、スキャンアウト期間の中間点に対応する時間のＨＭＤ１００の姿勢データを予測し得、それにより、ユーザの視野の中心にある要素が最も安定する。
【００２８】
アプリケーション１０４は、この姿勢データを使用して、姿勢データに従ってフレーム１０６（１）をレンダリングし得る。アプリケーション１０４は、コンポジタ１１４が以前のフレーム１０６（０）（図示せず）の作業１１２（０）を終了するとすぐに、フレーム１０６（１）のレンダリングを開始し得る。あるいは、ＨＭＤ１００のＧＰＵが複数の計算リソースをサポートする同期システムでは、コンポジタ１１４は、第１の計算リソース上でその作業１１２を実施し得、アプリケーション１０４は、コンポジタ１１４がその作業１１２を実施している間に、第２の計算リソース上でレンダリングを開始し得る。いずれの場合でも、図１は、コンポジタ作業１１２（１）がＶＳｙｎｃ２  １１０（２）にヒットするようにスケジュールされた時間の前に、アプリケーション１０４がフレーム１０６（１）のレンダリングを終了する例を示している。アプリケーション１０４は、フレーム１０６（１）のレンダリングを終了すると、ＧＰＵ上の定数バッファ内の単一の整数を増分し得る。この定数バッファは、最も直近にレンダリングされたフレーム１０６に対応するいくつかのフレーム（例えば、０、１、および２の整数を含む３つのフレーム）のデータを記憶し得る。コンポジタ１１４は、定数バッファ内の整数の値に基づいて、使用する準備ができている最新のフレームを取得し得る。コンポジタ１１４は、整数値のコピーを作成し、コピーされたインデックス値を用いて定数バッファを維持し、コピーされたインデックス値は、コンポジタ作業負荷１１２（１）に使用され、フレーム１０６（１）は、標的化されたＶＳｙｎｃ２  １１０（２）の前にレンダリングを終了される。
【００２９】
コンポジタ１１４がその作業１１２（１）を終えると、コンポジタ１１４は、定数バッファをＨＭＤ１００のＣＰＵにコピーし得、このことは、定数バッファインデックスに対応するフレーム１０６（１）がＶＳｙｎｃ２  １１０（２）でレンダリングされたことをＨＭＤ１００のＣＰＵが決定することを可能にする。このようにして、コンポジタ１１４は、フレーム１０６（１）のレンダリングを終了するためにアプリケーション１０４が要したＶＳｙｎｃ間隔１１６の数を１２０においてトラッキングすることによって、１１８においてアプリケーションのレンダリング性能を監視し得る。この場合、アプリケーション１１６は、フレーム１０６（１）をレンダリングするために１つのＶＳｙｎｃ間隔１１６を要した。コンポジタ１１４はまた、フレーム１０６（１）がＨＭＤ１００上に１つまたは複数の画像を提示するために使用された回数を１２２においてトラッキングすることによって、１１８においてアプリケーションのレンダリング性能を監視し得る。この場合、フレーム１０６（１）は、ＨＭＤ１００上に２つの対応する画像を提示するために２回使用される。これは、コンポジタ１１４がＶＳｙｎｃ３  １１０（３）の間にその作業１１２（２）を実施するためのスケジュールされた時間の前に、アプリケーション１０４が、次のフレーム１０６（２）のレンダリングを終了しなかったためであり、その結果、コンポジタ１１４は、フレーム１０６（１）に対応する定数バッファから最新の値を取得し、フレーム１０６（１）がＶＳｙｎｃ２  １１０（２）に標的化されたことを決定し、再投影を実装して、再投影変換を使用してフレーム１０６（１）の画素データを修正して、ＶＳｙｎｃ３  １１０（３）について予測された姿勢データ用に調整されたＶＳｙｎｃ３  １１０（３）における再投影されたフレーム（フレーム１０６（１）に基づいて）をレンダリングする。次のＶＳｙｎｃ間隔１１６では、コンポジタ１１４がその作業１１２（３）を開始するとき、コンポジタ１１４は、フレーム１０６（２）に対応する定数バッファから最新の整数値を取得し得、フレーム１０６（２）がＶＳｙｎｃ３  １１０（３）に標的化されたことを決定し得、再投影されたフレーム（フレーム１０６（２）に基づいて）をＶＳｙｎｃ４  １１０（４）で生成し得る。
【００３０】
これは、一連のフレーム１０６がレンダリングされるときに継続し得、コンポジタ１１４は、アプリケーション１０４から出力されたフレーム１０６に基づいて、ＨＭＤ１００上でどのように画素データを提示するかを決定する。このようにして、コンポジタ１１４は、１１８においてアプリケーションレンダリング性能を継続的に監視し得、ブロック１２０および１２２に示されるものなどの統計をトラッキングし得る。
【００３１】
１２４では、コンポジタ１１４は、ブロック１２０および１２２でトラッキングされた統計から決定される、アプリケーション１０４のレンダリング性能に従って、予測レベル１２６および／またはスロットルレベル１２８を調整し得る。図１の例は、どのように予測レベル１２６およびスロットルレベル１２８が、同じスケール（例えば、第１のレベル、第２のレベル、第３のレベル、および第４のレベルを表す０から３）を使用して独立して調整可能であり得るかを示す。このように、予測レベル１２６が第１のレベル（例えば、０）に設定され、スロットルレベル１２８が第１のレベル（例えば、０）に設定される場合、予測レベル１２６およびスロットルレベル１２８は、同じレベルに設定されるとみなされる。これらのレベルは、第１のレベル（例えば、０）が最小レベルを表し、レベルが第２のレベル（例えば、１）に、次いで、第３のレベル（例えば、２）に、次いで、第４のレベル（例えば、３）に増分され得るように、増分され得、第４のレベルは、予測レベル１２６およびスロットルレベル１２８がそれを超えて上がることができない最大レベルを表し得る。しかしながら、最大レベルの形態での制限は、任意であり、予測レベル１２６およびスロットルレベル１２８は、理論的には、基本レベルから無限の数のより高いレベルに調整可能であり得ることを理解されたい。とはいえ、実際には、予測レベル１２６を上げる能力は、ＨＭＤ１００センサ（トラッキング方法など）および人類生物学の制約を考慮して、将来を効果的に予測する能力によって本質的に制限される。これは、ＶＳｙｎｃ間隔１１６の関数でもある（例えば、より高いネイティブフレームレートのＨＭＤ１００は、より短いＶＳｙｎｃ間隔１１６を有し、このことは、同様の予測限界を達成するためのより高い最大値を結果的にもたらす）。
【００３２】
上述のように、予測レベル１２６は、どのくらい遠い将来における、ＨＭＤ１００の姿勢のセット（姿勢データ）が予測されるかに関する。例えば、予測レベル１２６が第１のレベル（例えば、０）に設定されると、コンポジタ１１４は、ＨＭＤ１００の姿勢データを、姿勢データを予測する時間に対する、将来の２つのＶＳｙｎｃ間隔１１６に対応する時間について予測し得る。図１の例では、これは、コンポジタ１１４が、ＶＳｙｎｃ３  １１０（３）に対応する時間の姿勢データを予測し、フレーム１０６（１）をレンダリングするためにその姿勢データをアプリケーション１０４に提供し得ることを意味する。スロットルレベル１２８は、アプリケーション１０４のフレームレートがどの程度スロットルされるかに関係する。例えば、スロットルレベル１２８が第１のレベル（例えば、０）に設定されるとき、コンポジタ１１４は、ＨＭＤのリフレッシュレート（例えば、９０Ｈｚ）と一致するようにアプリケーション１０４のフレームレートをスロットルし得る。これらのレベルは、姿勢データをさらに予測し、アプリケーション１０４をより大きい程度、スロットルするために、レベル０からレベル１、２、および３に段階的に上げられ得る。例えば、予測レベル１２６を第１のレベル（例えば、０）から第２のレベル（例えば、１）に上げることは、コンポジタ１１４に、３つのＶＳｙｎｃ間隔１１６などの、将来のＶＳｙｎｃ間隔１１６の増加した数に対応する時間についてＨＭＤ１００の姿勢データを予測させ得る。図１の例では、これは、コンポジタ１１４が、ＶＳｙｎｃ４  １１０（４）に対応する時間の姿勢データを予測し、フレーム１０６（１）をレンダリングするためにその姿勢データをアプリケーション１０４に提供し得ることを意味する。スロットルに関して、第１のスロットルレベル（例えば、０）から第２のスロットルレベル（例えば、１）への上昇は、コンポジタ１１４に、アプリケーション１０４のフレームレートを、ＨＭＤ１００のリフレッシュレートの数分の１（例えば、リフレッシュレートの半分）にスロットルさせ得る。９０ＨｚのＨＭＤ１００について、これは、第２のスロットルレベル（例えば、１）がアプリケーションを４５フレーム／秒にスロットルし得ることを意味する。これが行われると、コンポジタは、アプリケーション１０４がより早い時間における姿勢データを要求している場合でも、アプリケーション１０４への要求された姿勢データのアプリケーション１０４への供給を遅延させ得、それによって、アプリケーション１０４に、そのフレーム出力を、アプリケーション１０４がより容易に間に合い得る予測可能なフレームレートまで低速化することを強いる。
【００３３】
図２は、図１のブロック１２０および１２２でトラッキングされるように説明された統計などの、アプリケーション１０４のレンダリング性能に関する統計を記憶するために使用され得る例示的なリングバッファ２００（１）、２００（２）、および２００（３）を概念的に例示する図である。すなわち、リングバッファ２００、またはそのことに関する任意のタイプのメモリまたはストレージ要素は、他の統計の中でも、アプリケーション１０４が各フレーム１０６のレンダリングを終了するために要したＶＳｙｎｃ間隔１１６の数、および各フレーム１０６がＨＭＤ１００上に１つ以上の対応する画像を提示するために使用された回数をトラッキングするために使用され得る。これらの統計を用いて、コンポジタ１１４は、レンダリングされたフレーム１０６のうちのどの程度の数が「遅延フレーム」であるか、レンダリングされたフレーム１０６のうちのどの程度の数が「過剰提示されたフレーム」であるか、および／またはレンダリングされたフレーム１０６のうちのどの程度の数が「早期フレーム」であるかを決定し得る。これらの決定は、予測レベル１２６およびスロットルレベル１２８を独立して調整するか否か、およびいつ調整するかを決定するための３つの例示的な規則（規則＃１、規則＃２、および規則＃３）と共に使用され得る。
【００３４】
規則＃１は、予測レベル１２６を１だけ増分して上げるか否か、およびいつ上げるかを決定するために使用される。ここで、例示的な規則＃１は、最新の５つのレンダリングされたフレーム１０６の中から２つが「遅延フレーム」である場合、予測レベル１２６を１だけ増分して上げることを指示する。「遅延フレーム」は、ＨＭＤ１００のＧＰＵを使用してレンダリングを終了するために、アプリケーション１０４用のＶＳｙｎｃ間隔１１６の標的数よりも多くを要したフレーム１０６である。例えば、予測レベル１２６が第１のレベル（例えば、０）に現在設定されている場合、ＶＳｙｎｃ間隔１１６の標的数は、１つのＶＳｙｎｃ間隔１１６であり得、このことは、アプリケーション１０４が１つのＶＳｙｎｃ間隔１１６内で各フレーム１０６のレンダリングを終了すると考えられていることを意味する。このシナリオでは、アプリケーション１０４が１つのＶＳｙｎｃ間隔１１６内でフレーム１０６のレンダリングを終了しない場合、そのフレーム１０６は「遅延フレーム」とみなされる。同様に、予測レベル１２６が第２のレベル（例えば、１）に現在設定されている場合、ＶＳｙｎｃ間隔１１６の標的数は、２つのＶＳｙｎｃ間隔１１６であり得、このことは、アプリケーション１０４が２つのＶＳｙｎｃ間隔１１６内で各フレーム１０６のレンダリングを終了すると考えられていることを意味する。したがって、フレームの遅延は、レンダリングを終了することになる、ＶＳｙｎｃ間隔１１６の標的数に関するものである。図２の例では、例示的な規則＃１は、単なる例であり、他の比率が利用されてもよい。したがって、規則＃１は、一般に、過去のＮ個のレンダリングされたフレームの中から、遅延フレームの数が遅延フレームの閾値数を満たすかまたは超える場合、予測レベル１２６を１だけ増分して上げるように記述され得る。ここでの例は、過去の５つのレンダリングされたフレームの中から２つである。
【００３５】
規則＃２は、スロットルレベル１２８を１だけ増分して上げるか否か、およびいつ上げるかを決定するために使用される。ここで、例示的な規則＃２は、最新の２０個のレンダリングされたフレーム１０６の中から３つが「過剰提示されたフレーム」である場合、スロットルレベル１２８を１だけ増分して上げることを指示する。「過剰提示されたフレーム」、過剰提示されたフレームは、ＨＭＤ１００上に複数の対応する画像を提示するために標的回数よりも多く使用されたフレーム１０６である。例えば、スロットルレベル１２８が第１のレベル（例えば、０）に現在設定されている場合、アプリケーション１０４のフレームレートがＨＭＤ１００のリフレッシュレートと一致するようにスロットルされるため、各フレームが使用されるべき標的回数は、１回であり得、各フレーム１０６は、ＶＳｙｎｃ間隔１１６あたり１回使用されるように標的化される。このシナリオでは、アプリケーション１０４がフレームレートに達しておらず、所与のフレーム１０６が２回使用される場合（１回は、フレッシュフレームとして、１回は、再投影されたフレームのために）、そのフレーム１０６は「過剰提示されたフレーム」とみなされる。同様に、スロットルレベル１２８が第２のレベル（例えば、１）に現在設定されているとき、アプリケーション１０４のフレームレートがＨＭＤ１００のリフレッシュレートの半分にスロットルされているため、各フレームが使用されるべき標的回数は、２回であり得る。図２の例では、例示的な規則＃２は、単なる例であり、他の比率が利用されてもよい。したがって、規則＃２は、一般に、過去のＭ個のレンダリングされたフレームの中から、過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超える場合、予測レベル１２８を１だけ増分して上げるように記述され得る。ここでの例は、過去の２０個のレンダリングされたフレームの中から３つである。
【００３６】
規則＃３は、予測レベル１２６を１だけ増分して下げるか否か、およびいつ下げるかを決定するために使用される。ここで、例示的な規則＃３は、最新の３０個の連続的にレンダリングされたフレームが「早期フレーム」である場合、予測レベル１２６を１だけ増分して下げることを指示する。「早期フレーム」は、アプリケーション１０４が、少なくとも１つのＶＳｙｎｃ間隔１１６だけ現在の予測を上回るという意味で、早期にレンダリングを終了したフレーム１０６である。例えば、予測レベル１２６が第２のレベル（例えば、１）に現在設定されている場合、アプリケーション１０４は、３つのＶＳｙｎｃ間隔１１６内で各フレーム１０６のレンダリングを終了するように標的化される。このシナリオでは、アプリケーション１０４がＨＭＤ１００のＧＰＵを使用して所与のフレーム１０６のレンダリングを終了するために２つ以下のＶＳｙｎｃ間隔１１６を要する場合、そのフレーム１０６は「早期フレーム」とみなされる。所定の数のレンダリングされたフレーム（過去のＰ個の連続的にレンダリングされたフレーム）がこの基準を満たす場合、アプリケーション１０４は、予測レベル１２６の低下を正当化するために十分良好に実施しているとみなされる。ここでの例は、過去の３０個の連続的にレンダリングされたフレームであるが、任意の好適な数が規則＃３に利用され得る。
【００３７】
本明細書に記載のプロセスは、ロジックフローグラフ内のブロックの集合として例解され、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせ（つまり、ロジック）に実装することができる一連の動作を表す。ソフトウェアの文脈において、ブロックは、１つ以上のプロセッサによって実行されると、列挙された動作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。動作が説明される順序は、限定として解釈されることを意図するものではなく、説明される任意の数のブロックは、プロセスを実装するために任意の順序で、および／または並列に組み合わせることができる。
【００３８】
図３Ａおよび３Ｂは、本明細書に開示される実施形態による、ＨＭＤ上にフレームをレンダリングしている間に、予測およびスロットルレベルを上げるか否か、およびいつ上げるかを決定するための例示的なプロセス３００のフロー図を例示する。考察目的で、プロセス３００を前の図を参照して説明する。
【００３９】
３０２において、ＨＭＤ１００のロジック（例えば、コンポジタ１１４を含むロジック）は、第１のレベルに設定された予測レベル１２６および第１のレベルに設定されたスロットルレベル１２８（すなわち、予測レベル１２６およびスロットルレベル１２８は、同じスケールを使用して同じレベルに設定される）を使用して、ＨＭＤ１００上の一連のフレーム１０６の第１のフレーム１０６をレンダリングし得る。ＨＭＤ１００の起動時には、この同じレベルが最小レベルであり得る。この場合、最小スロットルレベル（例えば、０）は、コンポジタ１１４に、アプリケーション１０４のフレームレートをスロットルさせて、ＨＭＤ１００のリフレッシュレートと一致させ、その結果、第１のフレームの個々のフレームは、ＨＭＤ１００上に対応する画像を提示するために１回使用されるように標的化される。一例では、最小スロットルレベル１２８は、９０ＨｚのＨＭＤ１００と一致するように、アプリケーション１０４のフレームレートを９０フレーム／秒にスロットルし得る。最小予測レベル１２６は、コンポジタ１１４に、ＨＭＤ１００の姿勢データを、第１のフレーム１０６の個々のフレームの姿勢データを予測する時間に対する、将来の２つのＶＳｙｎｃ間隔１１６に対応する時間について予測させ得る。予測レベル１２６およびスロットルレベル１２８がブロック３０２において最小レベル（例えば、レベル１）に現在設定されていないとき、異なる標的が一連のフレーム１０６をレンダリングするために利用され得る。すなわち、第１の予測レベル（例えば、１）に設定された予測レベル１２６では、コンポジタ１１４は、将来のＶＳｙｎｃ間隔１１６の第１の標的数（例えば、将来の２つのＶＳｙｎｃ間隔）に対応する時間のＨＭＤ１００の姿勢データを予測し得る。第１のスロットルレベル（例えば、１）に設定されたスロットルレベル１２８では、コンポジタ１１４は、ＨＭＤ１００のリフレッシュレートに対してアプリケーション１０４のフレームレートをスロットルし得、そのため、第１の名声の個々のものが、ＨＭＤ１００上に複数の対応する画像を表示するために、第１の標的回数（例えば、２回）使用されるように標的化される。アプリケーション１０４がＨＭＤ１００のリフレッシュレートの半分にスロットルされている場合、標的回数は、「２」である。いずれの場合でも、予測レベル１２６およびスロットルレベル１２８が、どのレベルであるかにかかわらず、同じレベルに設定されていることをコンポジタ１１４が決定した場合、ロジックは、ブロック３０２から進み得る。
【００４０】
３０４では、予測レベル１２６（またはスロットルレベル１２８）が最大レベル（例えば、４）まで上げられたか否かに関して決定が行われ得る。予測レベル１２６（またはスロットルレベル１２８）が最大に達した場合、プロセス３００は、ブロック３０４からの「はい」のルートに従って、レベル１２６および１２８をそれ以上上げることなく、ブロック３０２における第１のフレームのレンダリングを繰り返し得る。一方、予測レベル１２６（またはスロットルレベル１２８）がその最大レベルまで上げられていない場合、プロセス３００は、ブロック３０４からブロック３０６への「ＮＯ」のルートに従い得る。
【００４１】
３０６では、コンポジタ１１４は、第１のフレームがブロック３０２においてレンダリングされる際に、第１のフレームと関連付けられた第１の統計をトラッキングし、これらの第１の統計をメモリ（例えば、１つ以上のリングバッファ２００）に記憶し得る。このようにして、レンダリングされたフレームの履歴は、例えば、ブロック３０８によって示されるように、アプリケーション１０４が各フレーム１０６のレンダリングを終了するために要したＶＳｙｎｃ間隔１１６の数、ブロック３１０によって示されるように、各フレームがＨＭＤ１００上に画像（複数可）を提示するために使用された回数に関する統計、および可能な追加の統計と共に維持され得る。
【００４２】
３１２では、ブロック３０６においてトラッキングおよび記憶された第１の統計に少なくとも部分的に基づいて、コンポジタ１１４は、過去のＮ個のレンダリングされたフレーム１０６の中から遅延フレームの数を決定し得、Ｎは、任意の好適な数である。Ｎ＝５の場合、ブロック３１２における決定は、それらの過去の５つのレンダリングされたフレームの中から遅延フレームの数を計数することであり得る。
【００４３】
３１４では、コンポジタ１１４は、ブロック３１２において計数された遅延フレームの数が、遅延フレームの閾値数を満たすかまたは超えるか否かを決定し得る。一例では、遅延フレームの閾値数は、２つの遅延フレームであり得、それにより、過去の５つのレンダリングされたフレームの中から２つが遅延フレームであった場合、ブロック３１４において閾値が満たされる。繰り返しになるが、「遅延フレーム」は、ＨＭＤ１００のＧＰＵを使用してレンダリングを終了するために、アプリケーション１０４用のＶＳｙｎｃ間隔１１６の標的数よりも多くを要したフレームであり、標的数は、現在の予測レベル１２６に基づく。第１の予測レベル（例えば、０）の場合、ＶＳｙｎｃ間隔１１６の標的数は、１つのＶＳｙｎｃ間隔１１６であり得、そのため、２つ以上のＶＳｙｎｃ間隔１１６でレンダリングを終了した、いかなるフレームも、ブロック３１２および３１４において遅延フレームとみなされる。ブロック３１４において閾値が満たされない場合、プロセス３００は、ブロック３１４から「ＮＯ」のルートに従って、予測レベル１２６またはスロットルレベル１２８を上げずに、ブロック３０２において一連のフレーム１０６のレンダリングを繰り返し得る。しかしながら、ブロック３１２において計数された遅延フレームの数が遅延フレームの閾値数を満たすかまたは超えることをコンポジタ１１４が決定した場合、プロセス３００は、ブロック３１４からブロック３１６への「はい」のルートに従い得る。
【００４４】
３１６では、コンポジタ１１４は、動き平滑化が有効化されているか否かを決定し得る。「動き平滑化」は、本明細書に使用される際、ＧＰＵのビデオエンコーダによって生成された動きベクトルを使用して、レンダリング前に第１のフレームの少なくともサブセットの画素データを修正する、グラフィックス処理技術を指し得る。したがって、レンダリング前にＧＰＵからの動きベクトルを使用してフレームを修正する特徴が有効化されている場合、プロセス３００は、ブロック３１６からブロック３１８への「はい」のルートに従い得る。
【００４５】
３１８では、コンポジタ１１４は、予測レベル１２６およびスロットルレベル１２８の両方を同期して１だけ増分して上げ得る。すなわち、予測レベル１２６は、第１の予測レベルから第２の予測レベルに上げられ得、スロットルレベル１２８は、予測レベル１２６の上昇と同期して、第１のスロットルレベルから第２のスロットルレベルに上げられ得る。「同期して」は、この文脈で使用される際、必ずしも同時を意味するのではなく、「共に」を意味するか、またはスロットルレベル１２８を上げるか否かについて独立した決定を行わないことを意味する。言い換えると、スロットルレベル１２８は、動き平滑化が有効化されるときはいつでも、予測レベル１２６と共に上げられる。
【００４６】
３２０では、コンポジタ１１４は、第１のフレームと関連付けられた第１の統計を維持するメモリ（例えば、１つ以上のリングバッファ２００）を消去（例えば、メモリからデータを削除）し得、プロセス３００は、ブロック３０２に戻ることによって繰り返し、ブロック３０２では、一連のフレーム１０６の第２のフレームがＨＭＤ１００上にレンダリングされ、このときには、上げられた予測レベルに設定された予測レベル１２６および上げられたスロットルレベルに設定されたスロットルレベル１２８を使用する。例えば、予測レベル１２６およびスロットルレベル１２８が同期して第１のレベル（例えば、０）から第２のレベル（例えば、１）に上げられた場合、ブロック３２０の後のブロック３０２においてレンダリングされる第２のフレームは、将来のＶＳｙｎｃ間隔１１６の第２の標的数（例えば、３つのＶＳｙｎｃ間隔）に対応する時間のＨＭＤ１００の姿勢データを予測するコンポジタ１１４によってレンダリングされ得、アプリケーション１０４のフレームレートは、ブロック３０２においてレンダリングされた第２のフレームの個々のフレームが、ＨＭＤ１００上に対応する画像を提示するために第２の標的回数（例えば、２回）使用されるように標的化されるように、ＨＭＤ１００のリフレッシュレートに対してスロットルされ得る。リングバッファ（複数可）２００を消去することに加えて、コンポジタ１１４がアプリケーション１０４に生成するように命令する次のフレームＩＤがトラッキングされ得る。これは、リングバッファ（複数可）２００が、トラッキングされたフレームＩＤを有するフレームで開始する第２の統計のトラッキングを開始することを可能にする。これは、ブロック３１８において予測レベル１２６およびスロットルレベル１２８を変更した後に既に処理中の他のフレームが無視されるように、行われ得る（すなわち、適用される新しい値を有していなかったフレームが無視される）。
【００４７】
ブロック３１６に戻ると、ブロック３１６において動き平滑化が無効化されていると決定された場合、過去のＮ個のレンダリングされたフレームにわたって遅延フレームの閾値数が計数された後、プロセス３００は、ブロック３１６からブロック３２２への「ＮＯ」のルートに従い得る。プロセス３００は、決定ブロック３１６における動作を実施せずに実施されてもよい（すなわち、ブロック３１６は、プロセス３００から省略されてもよい）ことを理解されたい。したがって、いくつかの実施形態では、プロセス３００は、ブロック３１６、３１８、および３２０に関して説明された動作を実施せずに、ブロック３１４からブロック３２２への「はい」のルートに直接従ってもよい。
【００４８】
３２２では、コンポジタ１１４は、スロットルレベル１２８を増分せずに、予測レベル１２６を１だけ増分して上げ得る。例えば、予測レベル１２６が、第１の予測レベルから第２の予測レベルに上げられ得、スロットルレベル１２８が、第１のスロットルレベルに留まり得る。
【００４９】
３２４では、コンポジタ１１４は、第１のフレームと関連付けられた第１の統計を維持するメモリ（例えば、１つ以上のリングバッファ２００）を消去（例えば、メモリからデータを削除）し得、プロセス３００は、図３Ａおよび３Ｂのオフページ参照「Ａ」によって示されるように、図３Ｂに進む。リングバッファ（複数可）２００を消去することに加えて、コンポジタ１１４がアプリケーション１０４に生成するように命令する次のフレームＩＤがトラッキングされ得る。これは、リングバッファ（複数可）２００が、トラッキングされたフレームＩＤを有するフレームで開始する第２の統計のトラッキングを開始することを可能にする。これは、ブロック３２２において予測レベル１２６を変更した後に既に処理中の他のフレームが無視されるように、行われ得る（すなわち、適用される新しい値を有していなかったフレームが無視される）。
【００５０】
３２６では、一連のフレーム１０６の第２のフレームがＨＭＤ１００上にレンダリングされ、このときには、上げられた予測レベルに設定された予測レベル１２６および変更されていないままのスロットルレベル１２８を使用する。例えば、予測レベル１２６が、第１の予測レベル（例えば、０）から第２の予測レベル（例えば、１）に上げられた場合、ブロック３２４の後のブロック３２６においてレンダリングされる第２のフレームは、将来のＶＳｙｎｃ間隔１１６の第２の標的数（例えば、３つのＶＳｙｎｃ間隔）に対応する時間のＨＭＤ１００の姿勢データを予測するコンポジタ１１４によってレンダリングされ得る。一方、変更されていないスロットルレベル１２８によると、アプリケーション１０４のフレームレートは、アプリケーション１０４のフレームレートがＨＭＤ１００のリフレッシュレートと一致するように、ＨＭＤ１００のリフレッシュレートに対してスロットルされ続け得、第２のフレームのうちの個々のフレームは、依然として、ＨＭＤ１００上に対応する画像を提示するために、第１の標的回数（例えば、１回）使用されるように標的化される。
【００５１】
３２８では、コンポジタ１１４は、第２のフレームがブロック３２６においてレンダリングされる際に、第２のフレームと関連付けられた第２の統計をトラッキングし得、これらの第２の統計をメモリ（例えば、予測レベルの上昇前に古いデータが消去された、１つ以上のリングバッファ２００）内に記憶し得る。これらの第２の統計は、非限定的に、ブロック３３０によって示されるように、アプリケーション１０４が各フレーム１０６のレンダリングを終了するために要したＶＳｙｎｃ間隔１１６の数、ブロック３３２によって示されるように、各フレーム１０６がＨＭＤ１００上に画像（複数可）を提示するために使用された回数に関する統計、および可能な追加の統計と共に維持され得る。
【００５２】
３３４では、ブロック３２８においてトラッキングおよび記憶された第２の統計に少なくとも部分的に基づいて、コンポジタ１１４は、過去のＭ個のレンダリングされたフレームの中から過剰提示されたフレームの数を決定し得、Ｍは、任意の好適な数である。Ｍ＝２０の場合、ブロック３３４における決定は、それらの過去２０回のレンダリングされたフレームの中から過剰提示されたフレームの数を計数することであり得る。
【００５３】
３３６では、コンポジタ１１４は、ブロック３３４において計数された過剰提示されたフレームの数が、過剰提示されたフレームの閾値数を満たすかまたは超えるか否かを決定し得る。一例では、過剰提示されたフレームの閾値数は、３つの過剰提示されたフレームであり得、それにより、過去の２０個のレンダリングされたフレームの中から３つが過剰提示されたフレームであった場合、ブロック３３６において閾値が満たされる。繰り返しになるが、「過剰提示されたフレーム」は、ＨＭＤ１００上に複数の対応する画像を提示するために標的回数よりも多く使用されたフレームであり、標的回数は、現在のスロットルレベル１２８に基づく。第１のスロットルレベル（例えば、０）の場合、標的回数は、一度（１回）であり得るため、ＨＭＤ１００上に複数の対応する画像を提示するために２回以上多く使用されたフレームは、ブロック３３４および３３６において、過剰提示されたフレームとみなされる。ブロック３３６において閾値が満たされない場合、プロセス３００は、ブロック３３６から「ＮＯ」のルートに従って、スロットルレベル１２８を上げずに、ブロック３２６において一連のフレーム１０６のレンダリングを繰り返し得る。しかしながら、ブロック３３４において計数された過剰提示されたフレームの数が過剰提示されたフレームの閾値数を満たすかまたは超えることをコンポジタ１１４が決定した場合、プロセス３００は、ブロック３３６からブロック３３８への「はい」のルートに従い得る。
【００５４】
３３８では、コンポジタ１１４は、予測レベル１２６を増分せずに、スロットルレベル１２８を１だけ増分して上げ得る。例えば、スロットルレベル１２８は、第１のスロットルレベルから第２のスロットルレベルに上がり得、予測レベル１２６は、その既存のレベルのままであり得、このことは、予測レベル１２６およびスロットルレベル１２８が同じレベル（例えば、１）にされることを意味する。
【００５５】
３４０では、コンポジタ１１４は、第２のフレームと関連付けられた第２の統計を維持するメモリ（例えば、１つ以上のリングバッファ２００）を消去（例えば、メモリからデータを削除）し得、プロセス３００は、図３Ａおよび３Ｂのオフページ参照「Ｂ」によって示されるように、図３Ａに進む。したがって、プロセス３００は、アプリケーション１０４のレンダリング性能に応じて、予測レベル１２６およびスロットルレベル１２８を増分して、潜在的に最大レベルまで繰り返し得る。例えば、予測レベル１２６およびスロットルレベル１２８が１だけ増分された後、一連のフレーム１０６の第２または第３のフレームは、ブロック３０２においてレンダリングされ得、ロジックは、反復して、予測レベル１２６を上げるか、または予測レベル１２６およびスロットルレベル１２８の両方を同期して上げるかを決定し得る。
【００５６】
図４は、本明細書に開示される実施形態による、ＨＭＤ１００上にフレームをレンダリングしている間に、予測およびスロットルレベルを下げるか否か、およびいつ下げるかを決定するための例示的なプロセス４００のフロー図である。考察目的で、プロセス４００を前の図を参照して説明する。
【００５７】
４０２では、コンポジタ１１４は、十分な数のフレームが早期に連続的にレンダリングされたか否かを決定し得る。すなわち、コンポジタ１１４は、４０２では、過去のＰ個の連続的にレンダリングされたフレーム（Ｐは、任意の好適な数である）が、レンダリングを終了するために、アプリケーション１０４用の特定の時間量（ＶＳｙｎｃ間隔１１６に関して）以下を要したか否かを決定し得る。ここで、一定の時間量は、現在の予測レベル１２６に基づく。例えば、予測レベル１２６が既に第１の予測レベル（例えば、１）に上げられており、コンポジタ１１４が将来の３つのＶＳｙｎｃ間隔１１６に対応する時間についてＨＭＤ１００の姿勢データを予測している場合、早期フレームは、アプリケーション１０４が２つのＶＳｙｎｃ間隔１１６内でレンダリングを終了したフレームである。同様に、予測レベル１２６が第２の予測レベル（例えば、２）にあり、コンポジタ１１４が将来の４つのＶＳｙｎｃ間隔１１６に対応する時間についてＨＭＤ１００の姿勢データを予測している場合、早期フレームは、アプリケーション１０４が３つのＶＳｙｎｃ間隔１１６内でレンダリングを終了したフレームである。ブロック４０２において、連続的にレンダリングされた早期フレームの十分な数が存在していないことが決定された場合、プロセス４００は、ブロック４０２から「ＮＯ」のルートに従って、十分な数の早期フレームが連続的にレンダリングされたか否かの決定を繰り返し得る。十分な数（例えば、過去のＰ個のフレーム）が早期に連続的にレンダリングされるとすぐに、プロセス４００は、ブロック４０２からブロック４０４への「はい」のルートに従い得る。
【００５８】
４０４では、コンポジタ１１４は、予測レベル１２６およびスロットルレベル１２８が同じレベルに現在設定されている（例えば、両方とも第３のレベル、２に設定されている）か否かを決定し得る。予測レベル１２６およびスロットルレベル１２８が同じレベルに現在設定されている場合、プロセス４００は、ブロック４０４からブロック４０６への「はい」のルートに従い得る。
【００５９】
４０６では、コンポジタ１１４は、予測レベル１２６およびスロットルレベル１２８の両方を同期して１だけ減分して下げ得る。すなわち、予測レベル１２６は、第３の予測レベルから第２の予測レベルに下げられ得、スロットルレベル１２８は、予測レベルの低下と同期して、第３のスロットルレベルから第２のスロットルレベルに下げられ得る。
【００６０】
ブロック４０４に戻ると、予測レベル１２６およびスロットルレベル１２８が同じレベルに現在設定されていない（例えば、スロットルレベル１２８が現在の予測レベル１２８より１つ低いレベルに設定されている）場合、プロセス４００は、ブロック４０４からブロック４０８への「ＮＯ」のルートに従い得る。
【００６１】
４０８では、コンポジタ１１４は、スロットルレベル１２８を下げずに、予測レベル１２６を１だけ減分して下げ得る。例えば、予測レベル１２６は、第３の予測レベルから第２の予測レベルに下げられ得、このことは、予測レベル１２６およびスロットルレベル１２８が同じレベルにされることを意味する。このように、スロットルレベル１２８は、予測レベル１２６と共に、それらが同じレベルに設定されている場合、下がる。
【００６２】
図５は、具現化され得る本明細書に開示される実施形態による、ＶＲヘッドセットなどのＨＭＤ５００の例示的な構成要素を例示する。ＨＭＤ５００は、前の図で参照したＨＭＤ１００と同一または同様であり得、したがって、図５に示されるＨＭＤ５００の構成要素は、ＨＭＤ１００に実装され得る。ＨＭＤ５００は、ユーザ１０２によって（例えば、ユーザ１０２の頭部に）着用されることになるスタンドアロンデバイスとして実装され得る。いくつかの実施形態では、ＨＭＤ５００は、ユーザ１０２が、ユーザ１０２の頭部の周囲に収まるようにサイズ決めされる固設機構（例えば、調整可能バンド）を使用して、ＨＭＤ５００をユーザの頭部に固設することを可能にすることなどによって、頭部に装着可能であり得る。いくつかの実施形態では、ＨＭＤ５００は、ニアアイまたはニアツーアイディスプレイ（複数可）を含む仮想現実（ＶＲ）または拡張現実（ＡＲ）ヘッドセットを含む。したがって、「ウェアラブルデバイス」、「ウェアラブル電子デバイス」、「ＶＲヘッドセット」、「ＡＲヘッドセット」、および「ヘッドマウントディスプレイ（ＨＭＤ）」という用語は、本明細書では互換的に使用されて、図５のデバイス５００を指し得る。しかしながら、これらのタイプのデバイスは、ＨＭＤ５００の単なる例であることが理解されるべきであり、ＨＭＤ５００は、様々な他の形態因子で実装され得ることを理解されたい。
【００６３】
例示された実装では、ＨＭＤ５００は、１つ以上のプロセッサ５０２およびメモリ５０４（例えば、コンピュータ可読媒体５０４）を含む。いくつかの実装では、プロセッサ（複数可）５０２は、中央処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）（複数可）５０３、ＣＰＵおよびＧＰＵ５０３の両方、マイクロプロセッサ、デジタルシグナルプロセッサ、または当該技術分野で公知の他の処理ユニットもしくは構成要素を含み得る。代替的に、または追加的に、本明細書で機能的に説明される機能は、少なくとも部分的に、１つまたは複数のハードウェアロジック構成要素によって実施され得る。例えば、非限定的に、使用され得るハードウェアロジック構成要素の例示的なタイプは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）などを含み得る。加えて、プロセッサ（複数可）５０２の各々は、プログラムモジュール、プログラムデータ、および／または１つ以上のオペレーティングシステムも記憶し得る、独自のローカルメモリを保有し得る。
【００６４】
メモリ５０４は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報の記憶のための任意の方法または技術で実装される、揮発性および不揮発性メモリ、着脱可能および着脱不能媒体を含み得る。そのようなメモリは、これらに限定されるものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、ＲＡＩＤストレージシステム、または所望の情報を記憶するために使用することができ、かつコンピューティングデバイスからアクセスすることができる任意の他の媒体を含む。メモリ５０４は、コンピュータ可読記憶媒体（「ＣＲＳＭ」）として実装され得、これは、メモリ５０２に記憶された命令を実行するためにプロセッサ（複数可）５０２によってアクセス可能な任意の利用可能な物理媒体であり得る。１つの基本的な実装では、ＣＲＳＭには、ランダムアクセスメモリ（「ＲＡＭ」）およびフラッシュメモリを含んでもよい。他の実装では、ＣＲＳＭは、限定されるものではないが、読み出し専用メモリ（「ＲＯＭ」）、電気的消去可能プログラム可能読み出し専用メモリ（「ＥＥＰＲＯＭ」）、または所望の情報を記憶するために使用され得、かつプロセッサ（複数可）５０２によってアクセスされ得る、任意の他の有形媒体を含み得る。
【００６５】
一般に、ＨＭＤ５００は、本明細書に説明される技術、機能、および／または動作を実装するように構成されるロジック（例えば、ソフトウェア、ハードウェア、および／またはファームウェアなど）を含み得る。コンピュータ可読媒体５０４は、命令、データストアなどの、様々なモジュールを含むものとして示され、これらのモジュールは、本明細書に説明される技術、機能、および／または動作を実施するためにプロセッサ（複数可）５０２上で実行するように構成され得る。コンピュータ可読媒体５０４に記憶され、かつプロセッサ（複数可）５０２上で実行可能なものとして、数個の例示的な機能モジュールが示されているが、同じ機能が、代替的に、ハードウェア、ファームウェア内に、またはシステムオンチップ（ＳＯＣ）および／もしくは他のロジックとして実装されてもよい。
【００６６】
オペレーティングシステムモジュール５０６は、他のモジュールの便宜のために、ＨＭＤ５００内でＨＭＤ５００に連結されたハードウェアを管理するように構成され得る。加えて、いくつかの事例では、ＨＭＤ５００は、メモリ５０４に記憶されているか、または別様にＨＭＤ５００にアクセス可能な１つ以上のアプリケーション１０４を含み得る。この実装では、アプリケーション（複数可）１０４は、ゲームアプリケーション５１０を含む。しかしながら、ＨＭＤ５００は、任意の数またはタイプのアプリケーションを含み得、ここに示される特定の例に限定されない。ゲームアプリケーション５１０は、ユーザ１０２によってプレイ可能であるビデオベースのインタラクティブゲーム（例えば、ＶＲゲーム）のゲームプレイを開始し、ＨＭＤ５００のディスプレイパネル上にレンダリングされるべきフレーム（例えば、実際のフレーム１０６）を出力するように構成され得る。コンポジタ１１４は、ＨＭＤ５００の他のロジックと組み合わせて、アプリケーション１０４のレンダリング性能に基づいて、予測レベル１２６およびスロットルレベル１２８を調整するために、本明細書に説明される技術を実施するように構成され得る。
【００６７】
一般に、ＨＭＤ５００は、入力デバイス５１２および出力デバイス５１４を有する。入力デバイス５１２は、制御ボタンを含み得る。いくつかの実装では、１つ以上のマイクロフォンが、ユーザ音声入力などのオーディオ入力を受信するための入力デバイス５１２として機能し得る。いくつかの実装では、１つ以上のカメラまたは他のタイプのセンサ（例えば、慣性測定ユニット（ＩＭＵ））が、ユーザ１０２の手および／または頭部の動きなどの、ジェスチャ入力を受信するための入力デバイス５１２として機能し得る。いくつかの実施形態では、追加の入力デバイス５１２が、キーボード、キーパッド、マウス、タッチスクリーン、ジョイスティックなどの形態で提供され得る。他の実施形態では、ＨＭＤ５００は、キーボード、キーパッド、または他の同様の形態の機械的入力を省略してもよい。代わりに、ＨＭＤ５００は、入力デバイス５１２の比較的単純な形態、ネットワークインターフェース（無線または有線ベース）、電源、および処理／メモリ機能で実装され得る。例えば、１つ以上の入力構成要素の限定されたセット（例えば、構成を開始する、電源をオン／オフするなどのための専用ボタン）が用いられ得、ＨＭＤ５００は、その後に使用され得る。一実装では、入力デバイス（複数可）５１２は、音量を増加／減少させるための基本的な音量制御ボタン（複数可）、ならびに電源およびリセットボタンなどの制御機構を含み得る。
【００６８】
出力デバイス５１４は、ディスプレイ５１６を含み得、これは、１つ以上のディスプレイパネル（例えば、ディスプレイパネルのステレオペア）を含み得る。出力デバイス５１４は、非限定的に、ライト要素（例えば、ＬＥＤ）、触覚感覚を生み出すためのバイブレータ、スピーカ（複数可）（例えば、ヘッドフォン）などをさらに含み得る。例えば、電源がオンになっているときなどの状態を示すための単純な光要素（例えば、ＬＥＤ）も存在し得る。
【００６９】
ＨＭＤ５００は、ネットワークへの無線接続を容易にするために、アンテナ５２０に連結された無線ユニット５１８をさらに含み得る。無線ユニット５１８は、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ、無線周波数（ＲＦ）などの、様々な無線技術のうちの１つ以上を実装し得る。ＨＭＤ５００は、ネットワーク、接続された周辺デバイス（ＰＣ、ゲームコンソールなどを含む）、または他の無線ネットワークと通信するプラグインネットワークデバイスへの有線接続を容易にするための物理ポートをさらに含み得ることを理解されたい。
【００７０】
ＨＭＤ５００は、１つ以上の光学要素を使用して、電子ディスプレイ（複数可）５１６からユーザの眼（複数可）に光を向ける光学サブシステム５２２をさらに含み得る。光学サブシステム５２２は、非限定的に、アパーチャ、レンズ（例えば、フレネルレンズ、凸レンズ、凹レンズなど）、フィルタなどを含む、異なる光学要素の様々なタイプおよび組み合わせを含み得る。いくつかの実施形態では、光学サブシステム５２２内の１つ以上の光学要素は、反射防止コーティングなどの１つ以上のコーティングを有し得る。光学サブシステム５２２による画像光の拡大は、電子ディスプレイ（複数可）５１６が、より大型のディスプレイよりも物理的により小型で、軽量で、より低消費電力であることを可能にする。さらに、画像光の拡大は、表示されたコンテンツ（例えば、画像）の視野（ＦＯＶ）を増加させ得る。例えば、表示されたコンテンツのＦＯＶは、表示されたコンテンツが、ユーザのＦＯＶのほぼすべて（例えば、対角１２０〜１５０度）、場合によってはすべてを使用して提示されるようなものである。ＡＲアプリケーションは、より狭いＦＯＶ（例えば、約４０度のＦＯＶ）を有していてもよい。光学サブシステム５２２は、非限定的に、樽型歪み、ピンクッション歪み、縦色収差、横色収差、球面収差、コマ収差、像面湾曲、非点収差などの、１つ以上の光学誤差を補正するように設計され得る。いくつかの実施形態では、表示のために電子ディスプレイ（複数可）５１６に提供されるコンテンツは、事前に歪められており、光学サブシステム５２２は、コンテンツに基づいて生成された、電子ディスプレイ（複数可）５１６からの画像光を受光するときにその歪みを補正する。
【００７１】
ＨＭＤ５００は、動き、位置、および配向データを生成するために使用されるセンサなどの、１つ以上のセンサ５２４をさらに含み得る。これらのセンサ５２４は、ジャイロスコープ、加速度計、磁力計、ビデオカメラ、カラーセンサ、または他の動き、位置、および配向センサであり得るか、またはそれらを含み得る。センサ５２４はまた、動き、位置、および配向データを生成するためにカメラまたはカラーセンサによって外部から視認され得る一連の能動または受動マーカなどの、センサの二次的部分を含み得る。例えば、ＶＲヘッドセットは、その外部に、外部カメラで見たとき、または光（例えば、赤外光または可視光）で照らしたときに、反射器またはライト（例えば、赤外光または可視光）などの複数のマーカを含み得、動き、位置、および配向データを生成するために、ソフトウェアによる解釈のための１つ以上の基準点を提供し得る。ＨＭＤ５００は、ＨＭＤ５００の環境内の基地局によって投影または散布される光（例えば、赤外光または可視光）に対して感応性である光センサを含み得る。
【００７２】
一例では、センサ（複数可）５２４は、慣性測定ユニット（ＩＭＵ）５２６を含み得る。ＩＭＵ５２６は、加速度計、ジャイロスコープ、磁力計、および／または動きの検出、ＩＭＵ５２６と関連付けられた誤差の補正、もしくはそれらのいくつかの組み合わせに好適な他のセンサから受信された測定信号に基づいて、較正データを生成する電子デバイスであり得る。測定信号に基づいて、ＩＭＵ５２６などの、そのような動きベースのセンサは、ＨＭＤ５００の初期位置に対するＨＭＤ５００の推定された位置を示す較正データを生成し得る。例えば、複数の加速度計が並進運動（前方／後方、上／下、左／右）を測定し、複数のジャイロスコープが回転運動（例えば、ピッチ、ヨー、ロール）を測定してもよい。ＩＭＵ５２６は、例えば、測定信号を迅速にサンプリングし、サンプリングされたデータからＨＭＤ５００の推定された位置を計算し得る。例えば、ＩＭＵ５２６は、経時的に加速度計から受信された測定信号を統合して速度ベクトルを推定し得、経時的に速度ベクトルを統合して、ＨＭＤ５００上の基準点の推定された位置を決定する。基準点は、ＨＭＤ５００の位置を説明するために使用され得る点である。基準点は、一般に、空間内の点として定義され得るが、様々な実施形態では、基準点は、ＨＭＤ５００内の点（例えば、ＩＭＵ５２６の中心）として定義される。代替的に、ＩＭＵ５２６は、サンプリングされた測定信号を外部コンソール（または他のコンピューティングデバイス）に提供し、外部コンソールが較正データを決定する。
【００７３】
センサ５２４は、センサデータを高速で提供するために、比較的高い周波数で動作し得る。例えば、センサデータは、１０００Ｈｚの速度（または１ミリ秒ごとに１つのセンサ読み取り）で生成され得る。このようにして、１秒間に１０００回の読み取りが行われる。センサがこの速度で（またはそれ以上の速度で）これだけのデータを生成する場合、動きを予測するために使用されるデータセットは、数十ミリ秒ほどの比較的短い期間でも非常に大きくなる。
【００７４】
言及されるように、いくつかの実施形態では、センサ５２４は、３Ｄ空間内のＨＭＤ５００の位置および／または配向、姿勢などをトラッキングする目的で、ＨＭＤ５００の環境内の基地局によって放出される光に対して感応性である光センサを含み得る。位置および／または配向の計算は、光パルスのタイミング特性、およびセンサ５２４によって検出される光の有無に基づき得る。
【００７５】
ＨＭＤ５００は、アイトラッキングモジュール５２８をさらに含み得る。ＨＭＤ５００の内部のカメラまたは他の光学センサは、ユーザの眼の画像情報を捕捉し得、アイトラッキングモジュール５２８は、捕捉された情報を使用して、ねじれおよび回転の大きさ（すなわち、ロール、ピッチ、およびヨー）ならびに各眼の注視方向を含む、瞳孔間距離、眼間距離、ＨＭＤ５００に対する各眼の３次元（３Ｄ）位置を決定し得る（例えば、歪み調整の目的で）。一例では、赤外光が、ＨＭＤ５００内で放出され、各眼から反射される。反射光は、ＨＭＤ５００のカメラによって受光または検出され、各眼によって反射された赤外光の変化から眼球回転を抽出するために分析される。ユーザ１０２の眼をトラッキングするための多くの方法が、アイトラッキングモジュール５２８によって使用され得る。したがって、アイトラッキングモジュール５２８は、各眼の最大６自由度（すなわち、３Ｄ位置、ロール、ピッチ、およびヨー）をトラッキングし得、トラッキングされた量の少なくともサブセットが、注視点（すなわち、ユーザが見ている仮想シーン内の３Ｄ場所または位置）を推定するためにユーザ１０２の２つの眼から組み合わせられ得る。例えば、アイトラッキングモジュール５２８は、過去の測定値からの情報、ユーザ１０２の頭部の位置を識別する測定値、および電子ディスプレイ（複数可）５１６によって提示されるシーンを記述する３Ｄ情報を統合し得る。したがって、ユーザ１０２の眼の位置および配向の情報は、ユーザ１０２が見ている、ＨＭＤ５００によって提示された仮想シーン内の注視点を決定するために使用される。
【００７６】
ＨＭＤ５００は、ヘッドトラッキングモジュール５３０をさらに含み得る。ヘッドトラッキングモジュール５３０は、上記のように、センサ５２４のうちの１つ以上を利用して、ユーザ１０２の頭部の回転を含む頭部の動きをトラッキングし得る。例えば、ヘッドトラッキングモジュール５３０は、ＨＭＤ５００の最大６自由度（すなわち、３Ｄ位置、ロール、ピッチ、およびヨー）をトラッキングし得る。これらの計算は、一連のフレーム１０６のフレーム１０６ごとに行われ得るため、アプリケーション１０４は、頭部の位置および配向に応じて、次のフレーム１０６（再投影されたフレーム１０４の場合でも）内でシーンをどのようにレンダリングするかを決定し得る。いくつかの実施形態では、ヘッドトラッキングモジュール５３０および／またはヘッドトラッキングモジュール５３０を使用するコンポジタ１１４は、現在および／または過去のデータに基づいて、ＨＭＤ５００の将来の位置および／または配向を予測するように構成される。これは、ユーザ１０２がディスプレイ（複数可）５１６上で光（したがって、画像）を実際に見る前に、アプリケーションがフレーム１０６をレンダリングするように求められるためである。したがって、次のフレーム１０６は、フレーム１０６をレンダリングする前のおよそ２５〜３０ミリ秒（ｍｓ）などのより早い時点で行われた、頭部の位置および／または配向のこの将来の予測に基づいて、レンダリングすることができる。ヘッドトラッキングモジュール５３０によって提供される回転データは、任意の好適な測定単位で、ＨＭＤ５００の回転方向およびＨＭＤ５００の回転量の両方を決定するために使用され得る。例えば、回転方向は、左、右、上、および下に対応する正または負の水平方向および正または負の垂直方向の観点で単純化されて出力され得る。回転量は、度、ラジアンなどの単位であり得る。角速度が、ＨＭＤ５００の回転速度を決定するために計算されてもよい。
【００７７】
主題は構造的特徴に特有の言語で説明されているが、添付の特許請求の範囲に定義された主題は、必ずしも説明された特定の特徴に限定されるものではないことを理解されたい。むしろ、特定の特徴は、特許請求の範囲を実装する例解的な形態として開示されている。
【図１】
2021533498.tif 000003
【図２】
2021533498.tif 000004
【図３Ａ】
2021533498.tif 000005
【図３Ｂ】
2021533498.tif 000006
【図４】
2021533498.tif 000007
【図５】
2021533498.tif 000008
【国際調査報告】
2021533498.tif 000009