ヘッドマウントディスプレイを装着するユーザのための人工現実シーンを生成するためのシステムおよび方法が記載される。レンダリングの責任分担(rendering responsibilities)が、少なくとも一次レンダリングコンポーネントとヘッドマウントディスプレイのディスプレイエンジンとの間で分割されるように、システムは多数のレンダリングコンポーネントを備えてもよい。一次レンダリングコンポーネントは、プリミティブの解釈やシェーディングなどの計算量の多いグラフィックスレンダリングステージを、典型的なインタラクティブグラフィックスレンダリングの範囲内で期待される出力で処理しうる。一次レンダリングコンポーネントは、1つまたは複数の特殊化されたオブジェクトプリミティブ(本明細書では「サーフェス」とも称される)を出力することができ、あるいは、人工現実シーン内の1つまたは複数のオブジェクトプリミティブの位置およびテクスチャデータを含む、ディスプレイエンジンによってそのようなサーフェスに、作られた画像を出力することができる。ディスプレイエンジンは、オブジェクトプリミティブを受信し、視聴者の視界の変化を反映するように、および/またはディスプレイデバイス特性に適応するように、それらの外観を更新および精細化し、レンダリングを終了し、結果をユーザに表示するための準備を行うことができる。
ディスプレイエンジンは、表示される画像をレンダリングする際の特定のステップを処理するため、複数のハードウェアブロックを有する複数のステージを備えることができる。ディスプレイエンジンは、オブジェクトプリミティブおよび任意の付随するレンダリング命令を受信する制御ブロックを備えることができる。制御ブロックは、ディスプレイエンジンの他のブロックによって使用される1つまたは複数の共有メモリを準備することができる。制御ブロックは、1つまたは複数のメモリへのテクスチャデータのロードを容易にすることができる。制御ブロックは、グラフィックスレンダリングパイプラインを初期化する命令を含む、ディスプレイエンジンの他のブロックに命令を提供してもよい。
ディスプレイエンジンは、人工現実シーンにおけるオブジェクトプリミティブの最初の可視性を決定する変換ブロックを備えることができる。変換ブロックは、オブジェクトプリミティブを再サンプリングするため、人工現実シーンを見るユーザの視点からレイキャスティングを実行してもよい。変換ブロックは、ディスプレイによって引き起こされる1つまたは複数の効果を近似または補正するため、レイキャスティングにおいて使用される光線を歪ませうる。これらの効果は、ディスプレイに使用される1つまたは複数のレンズでのワーピング効果から生じる1つまたは複数の幾何学的歪みを含みうる。変換ブロックは、任意の光線がシーン内のオブジェクトプリミティブと交差するかどうかを決定し、任意の光線-オブジェクトプリミティブの交差に関する位置情報をビュー座標空間からオブジェクトプリミティブのテクスチャ座標空間に変換することができる。
ディスプレイエンジンは、ディスプレイの1つまたは複数のピクセルについてのピクセルカラー値を効率的に決定するピクセルブロックを含んでもよい。ピクセルブロックは、変換ブロックから交差情報(例えば、投射光線とオブジェクトプリミティブとの間の交差)を受信することができる。ピクセルブロックは、オブジェクトプリミティブに関連付けられたテクスチャデータを参照して、ピクセルカラー値のうちの1つまたは複数についてバイリニア補間を実行することができる。
ディスプレイエンジンは、ピクセルカラー値を受信し、ディスプレイへの出力のためにピクセルカラー値を最終決定するディスプレイブロックを含んでもよい。ディスプレイブロックは、ピクセルカラー値を、ディスプレイによって必要とされるフォーマットまたは配列に変換することができる。ディスプレイブロックは、1つまたは複数の輝度補正効果を適用してもよい。輝度補正効果は、知覚符号化またはディザリングのような画像の品質を改善する技術を含みうる。輝度補正効果は、ディスプレイおよびそのコンポーネントがどのように製造されるか、または画像がどのようにユーザに表示されるかによって引き起こされる、ディスプレイの不規則性に対処し、補正することができる。
本発明の実施形態は、人工現実システムを含んでよく、または、人工現実システムと関連して実装されてよい。人工現実は、ユーザに提示される前に何らかの方法で調整された現実の一形態であり、例えば、仮想現実(VR)、拡張現実(AR)、複合現実(MR)、ハイブリッド現実、またはこれらの何らかの組み合わせおよび/または派生物を含みうる。人工現実コンテンツは、完全に生成されたコンテンツ、または、捕捉されたコンテンツ(例えば、現実世界の写真)と組み合わされて生成されたコンテンツを含みうる。人工現実コンテンツは、ビデオ、音声、触感フィードバック、またはこれらの何らかの組み合わせを含んでよく、これらのいずれかが、単一チャネルまたは複数のチャネル(視聴者に対して3次元効果を生成するステレオビデオなど)で提示されうる。加えて、いくつかの実施形態では、例えば人工現実のコンテンツを作り出すために使用される、および/または人工現実で使用される(例えば、人工現実でアクティビティを実施する)、アプリケーション、製品、アクセサリ、サービス、またはこれらの何らかの組み合わせに、人工現実は関連付けられうる。人工現実コンテンツを提供する人工現実システムは、ホストコンピュータシステムに接続されたヘッドマウントディスプレイ(HMD)、スタンドアロンHMD、モバイルデバイスまたはコンピューティングシステム、あるいは人工現実コンテンツを一人または複数の視聴者に提供することが可能なその他の任意のハードウェアプラットフォームを含む、様々なプラットフォームで実装されうる。
本書で開示している実施形態は例にすぎず、この開示の範囲がそれらに限定されるわけではない。特定の実施形態は、本明細書に開示された実施形態のコンポーネント、要素、特徴、機能、動作、またはステップのすべて、いくつかを含んでよく、あるいは全く含まなくてもよい。本発明による実施形態は、方法、記憶媒体、システム、およびコンピュータプログラム製品を対象とした添付の特許請求の範囲内に具体的に開示され、1つの請求項カテゴリ内で記載される任意の特徴、例えば、方法は、別の請求項カテゴリ、例えば、システムにおいても同様に特許請求されうる。添付の特許請求の範囲における従属関係または前に戻る参照は、形式上の理由でのみ選択されている。しかし、先行する請求項のいずれかを意図的に戻り参照すること(特に複数従属)によりもたらされる主題はいずれも、同様に特許請求されてよく、これにより、付随する特許請求の範囲において選択される従属とは無関係に、請求項およびその特徴の任意の組み合わせが開示され、かつ特許請求されうる。特許請求されうる主題は、付随する特許請求の範囲に明示されている特徴の組み合わせだけでなく、特許請求の範囲における他の特徴の組み合わせのいずれをも含み、特許請求の範囲で言及されている特徴の各々は、特許請求の範囲における他の特徴または他の特徴同士の組み合わせのうちの任意のものと組み合わされうる。さらに、本書で説明または描写されている実施形態および特徴はいずれも、別個の請求項で、および/または、本書で説明もしくは描写されている実施形態もしくは特徴のいずれかとの任意の組み合わせ、または付随する特許請求の範囲の特徴のいずれかとの任意の組み合わせで、特許請求されうる。
本発明の一態様によれば、コンピューティングシステムによって、人工現実シーンの1つまたは複数のサーフェスにアクセスすることであって、1つまたは複数のサーフェスが、第1のレートでレンダリングされた人工現実シーンの1つまたは複数の画像に基づいて、かつ第1の観察位置に基づいて生成される、1つまたは複数のサーフェスにアクセスすることと、第1のレートよりも高い第2のレートでサブフレームを生成することであって、サブフレームの各々は、第2の観察位置を決定することによって生成される、サブフレームを生成することと、第2の観察位置から人工現実シーンの1つまたは複数のサーフェスの可視性を決定することと、決定された1つまたは複数のサーフェスの可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成することと、表示のためにサブフレームのカラー値を提供することと、を含む方法が提供される。
第2の観察位置から人工現実シーンの1つまたは複数のサーフェスの可視性を決定することは、好ましくは、第2の観察位置に基づいて人工現実シーンに投射するための光線を生成することと、光線に幾何学的変換を適用して、光線のそれぞれの軌跡を人工現実シーンの中へ修正することと、修正された光線の軌跡に基づいて、人工現実シーンの1つまたは複数のサーフェスと光線との交点を決定することとを含む。
1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成することは、好ましくは、交点の座標を交差面のサーフェステクスチャのサーフェス座標にマッピングすることと、サーフェス座標において交差面のサーフェステクスチャデータからカラー値にアクセスすることと、交点に基づいてアクセスされたカラー値を補間することとを含む。
1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成することは、いくつかの実施形態では、カラー値に1つまたは複数のグラフィック調整を適用することを含むことができ、グラフィック調整は、輝度調整、ディザリング、中心窩レンダリング、または知覚圧縮レンダリングを含む。
いくつかの実施形態では、光線は、ディスプレイシステムのピクセルに対応しうる。
光線は、ディスプレイシステムのピクセルのカラーチャネルに対応しうる。
好ましくは、1つまたは複数のサーフェスは、サーフェスのテクスチャデータと、人工現実シーンにおけるサーフェスの位置のロケーションデータとを含む。
人工現実シーンの1つまたは複数の画像は、好ましくは、コンピューティングシステムとは異なるの別のコンピューティングシステムによってレンダリングされる。
好ましくは、コンピューティングシステムは、他のコンピューティングシステムと無線通信状態にある。
コンピューティングシステムは、ヘッドマウントディスプレイユニットに組み込まれることが好ましい。
コンピューティングシステムは、好ましくは、サブフレームを生成するためのディスプレイエンジンを備え、ディスプレイエンジンは、第2の観察位置からの1つまたは複数のサーフェスの可視性を決定するための変換ブロックと、カラー値の補間を実行するためのピクセルブロックと、カラー値にグラフィック調整を適用するためのディスプレイブロックとを備える。
第2の観察位置は、好ましくは、視線追跡コンポーネント、または動作追跡コンポーネントから受信したデータに基づいて決定される。
本発明のさらなる態様によれば、動作可能なソフトウェアを具現化する、1つまたは複数のコンピュータ可読非一時記憶媒体が提供される。動作可能なソフトウェアは、実行されると、人工現実シーンの1つまたは複数のサーフェスであって、第1のレートでレンダリングされた人工現実シーンの1つまたは複数の画像に基づいて、かつ第1の観察位置に基づいて生成された、1つまたは複数のサーフェスにアクセスし、第2の観察位置を決定することと、第2の観察位置から人工現実シーンの1つまたは複数の可視性を決定することと、1つまたは複数のサーフェスに決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成することと、ディスプレイにサブフレームのカラー値を提供することとによって、各々のサブフレームが生成される、第1のレートよりも高い第2のレートでサブフレームを生成する。
ソフトウェアは、好ましくは、第2の観察位置からの人工現実シーンの1つまたは複数のサーフェスの可視性を決定するように動作可能であってよく、さらに、第2の観察位置に基づいて人工現実シーンに投射するための光線を生成し、光線に幾何学的変換を適用して、光線のそれぞれの軌跡を人工現実シーンに修正し、光線の修正された軌跡に基づいて、人工現実シーンにおいて光線と1つまたは複数のサーフェスとの交点を決定するように動作可能である。
いくつかの実施形態では、ソフトウェアは、1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成するように動作可能であってよく、さらに、交点の座標を交差面のサーフェステクスチャのサーフェス座標にマッピングし、サーフェス座標における交差面のサーフェステクスチャデータからカラー値にアクセスし、交点に基づいてアクセスされたカラー値を補間するように動作可能である。
好ましくは、ソフトウェアは、1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成するように動作可能であり、さらに、カラー値に1つまたは複数のグラフィック調整を適用するように動作可能であり、グラフィック調整は、輝度調整、ディザリング、中心窩レンダリング、または知覚圧縮レンダリングを含む。
本発明のさらなる態様によれば、1つまたは複数のプロセッサと、プロセッサのうちの1つまたは複数に連結され、プロセッサのうちの1つまたは複数によって実行されると動作可能な命令を備えるシステムが提供される。命令によって、システムは、人工現実シーンの1つまたは複数のサーフェスであって、第1のレートでレンダリングされた人工現実シーンの1つまたは複数の画像に基づいて、かつ第1の観察位置に基づいて生成される、1つまたは複数のサーフェスにアクセスし、第1のレートよりも高い第2のレートでサブフレームを生成し、サブフレームの各々は、第2の観察位置を決定することと、第2の観察位置から人工現実シーンの1つまたは複数のサーフェスの可視性を決定することと、決定された1つまたは複数のサーフェスの可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値を生成することと、表示のためにサブフレームのカラー値を提供することとによって生成される。
好ましくは、命令は、システムに、第2の観察位置からの人工現実シーンの1つまたは複数のサーフェスの可視性を決定させるように、動作可能であり、さらに命令は、プロセッサのうちの1つまたは複数によって実行されるとき、システムに、第2の観察位置に基づいて人工現実シーンに投射するための光線を生成させ、光線のそれぞれの軌跡を人工現実シーンに修正するように光線に対して幾何学的変換を適用させ、光線の修正された軌跡に基づいて、人工現実シーンにおいて光線と1つまたは複数のサーフェスとの交点を決定させるように、動作可能である。
いくつかの実施形態では、命令は、1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値をシステムに生成させるように、動作可能であってもよく、さらに命令は、プロセッサのうちの1つまたは複数によって実行されるとき、交点の座標を交差面のサーフェステクスチャのサーフェス座標にマッピングすること、サーフェス座標における交差面のサーフェステクスチャデータのカラー値にアクセスすること、アクセスされたカラー値を交点に基づいて補間することを、システムに行わせるように、動作可能である。
いくつかの実施形態では、命令は、1つまたは複数のサーフェスの決定された可視性に基づいて、ディスプレイの出力位置に対応するサブフレームのカラー値をシステムに生成させるように、動作可能であってよく、さらに命令は、プロセッサのうちの1つまたは複数によって実行されると、輝度調整、ディザリング、中心窩レンダリング、または知覚圧縮レンダリングを含む1つまたは複数のグラフィック調整をカラー値に適用することをシステムに行わせるように、動作可能である。
本発明の任意の態様の特徴は、適切な場合、他の態様のいずれかのうちの1つまたは複数と組み合わせることができることが理解されるであろう。
人工現実デバイスは、デジタルシーンを作成すること、または現実世界のビュー上にコンピュータ生成画像を重ね合わせることを伴うので、人工現実デバイスは、設計者およびエンジニアが新しい形態の情報、娯楽、または共同作業の方法を提供するためのプラットフォームを提供する。例えば、人工現実デバイスは、ユーザが遠く離れていても、見た目には直接会ってコミュニケーションすること、あるいは、目立たない方法でユーザの周囲の環境をユーザに知らせることによってユーザを支援することを可能にしうる。人工現実体験は、しばしばカスタマイズされうるので、人工現実によるユーザ体験は、十分な明確さおよび利便性を与えられれば、極めて個人的で、非常に魅力的なものになりうる。
人工現実体験が人間の能力を増強することができる1つの方法は、拡張現実または複合現実におけるように、現実世界に追加されたコンピュータ生成画像および/またはテキストを用いることである。この単純な原理から、様々な説得力のある利用例を考えることができる。現実世界のオブジェクトを記述するラベル(例えば、テキスト、象形文字など)または画像は、現実世界の空間内に固定されてもよいし(例えば、街路標識として機能するか、または自転車専用道路のライブマップを提供する位置認識ラベル)、または現実世界のオブジェクトが空間を通って移動するときにそれに固定される画像(例えば、バスが経路上を進むときに、経路や乗車率に関する詳細情報を提供するためにバスに追加されるラベル)であってもよい。ラベルは、ユーザが見知らぬ都市を移動する(例えば、最も近いトイレまでのウェイポイント(waypoint)を作成する)のを支援するために、あるいは、群衆(例えば、別のユーザに固定された社会的に認知しうるウェイポイント)の中にいる友人を見つけ出すのを支援するために使用することもできる。検討に価する他の経験は、現実世界のオブジェクトとの対話に基づくものになろう。例えば、ユーザは、ビデオを再生し、自分自身のみ、または共有された拡張空間へのアクセスを有する他者に見えるようにすることができる、壁またはスクリーン上にビデオを「投影」することができる。別の例として、ユーザは、コンピュータが生成したテキストを物理的オブジェクトに固定して、拡張現実の本または雑誌として機能させることができる。コンテンツは、オブジェクトに対して表示することができ(ユーザが拡張現実とは別に物理的資産を許可する)、またはユーザに対して固定された関係で表示すること(例えば、ビューの片隅にチュートリアルビデオを常時再生すること)ができる。提示された媒体は、ユーザに対してカスタマイズすることができ、その結果、同一のコンテンツ表示空間は、同一の物理的な空間を見ている各人に関連するコンテンツになりうる。別の例として、ユーザは、アイコンを「タッチ」することによって、またはコンピュータ生成画像を手動で「操作」することによって、コンピュータ生成グラフィックスと対話しうる。これらのグラフィックスは、プロジェクトに従事する複数のユーザに示すことができ、チームコラボレーションの機会を可能にする(例えば、リアルタイムで共に建物内の3次元デジタルプロトタイプで作業する複数の建築家)。
使用を容易にするために、コンピュータで生成されたグラフィックスを出力するディスプレイは、直感的で、常にアクセス可能で、控えめなものである必要がある。高精細な人工現実グラフィックスをユーザに表示する1つのアプローチが、ヘッドマウントディスプレイである。ユーザは、コンピュータグラフィックスディスプレイを表示することができる、バイザ、ヘッドセット、または眼鏡などの装置を装着する。拡張現実または複合現実の体験では、物理的な世界と並べて、またはその上にコンピュータグラフィックスを見せることができる。しかしながら、これらのコンピュータグラフィックスのレンダリングは計算集約的である。したがって、ほとんどの場合、レンダリングは、ヘッドマウント型ディスプレイに通信可能に接続された強力なコンピュータによって(例えば、ケーブルまたはBluetoothなどの無線通信プロトコルを介して)実行される。そのような構成では、ヘッドマウントディスプレイは、かさばるコード、帯域幅および電力制限、熱の制約、ならびに他の関連する制約によって制限される。しかし、これらの制約の限界は緩和されている。日中の装着には十分に快適かつ効率的で、高度なグラフィックを表示するのに十分に強力なヘッドマウントディスプレイが現在開発されている。
見かけの表示サイズに影響を与えることなく実際の表示サイズを縮小するために使用される技術の1つは、スキャニングディスプレイとして知られている。スキャニングディスプレイでは、複数のより小さな画像が組み合わされて、より大きな合成画像を形成する。スキャニングディスプレイは、光源光、反射器を含む1つまたは複数のスキャニング素子、および画像光を生成および出力する光学系を使用する。出力画像光は、ユーザの眼に出力されてもよい。光源光は、発光ダイオード(LED)などのエミッタによって供給されてもよい。例えば、光源は、2560×1440のLEDのアレイであってもよい。反射器は、スキャニング素子に取り付けられた任意の適切な反射面であってよい。特定の実施形態では、スキャニング素子は、1つまたは複数のマイクロエレクトロメカニカルシステム(MEMS)コンポーネントを用いて駆動されるスキャニングミラーであってもよい。光学系は、光の焦点を合わせ、方向を変え、そのほか光を増強するために使用されるレンズを備えることができる。スキャニング素子は、光導波コンポーネントによって処理される光源光を、ディスプレイ描画レートを最適化するためにエミッタによって使用される生成パターンに対応する特定のパターンでユーザの眼に出力させることができる。例えば、すべてのエミッタは一度にアクティブである必要はないため、さまざまな他の要因に加えて、スキャニングディスプレイは、同じエミッタで構成される従来のディスプレイよりも、実行に要する電力が少なく、発熱を低減しうる。スキャニング素子および光学系に使用される材料の品質のおかげもあって、重量も低減しうる。スキャニングディスプレイを使用した結果の一つとして、例えば、電力、重量、および熱効率と引き換えに、スキャニングディスプレイは、従来のディスプレイに対して意図されていた画像を、従来のディスプレイに提示するのと同じように完全には表示できないことがある。画像の幾何学的ワーピングや色の歪み、具体的には輝度などに、不均一な歪みが生じることがある。本明細書でさらに説明するように、ディスプレイに渡される前に歪みを打ち消し、歪みがない効果を生み出すため、これらの歪みは、表示されるグラフィックスを後処理することによって補正される。本開示では、特定の方法によるディスプレイについて説明しているが、本開示は任意の適切なディスプレイを想定している。
人工現実(例えば、AR、VR、MR)技術は、その登場以来、AR/VR/MRシーンのユーザの視界(perspective)における急な変化に応答してAR/VR/MRオブジェクトをレンダリングする際の待ち時間の問題に悩まされてきた。没入型環境を作り出すためには、ユーザは、シーンを見る際に頭部を動かせることが必要で、環境は、ユーザに提示されるビューを調整することで即座に応答することが必要になることがある。頭部が動くたびに、シーンでのユーザの視界はわずかに変化しうる。このような頭部の動きは小さいが、突発的で予測が(不可能ではないとしても)困難なことがある。解決しなければならない問題は、頭部の動きが急に発生し、頭部の動きに伴って発生する視界の変化を考慮するためにシーンのビューが迅速に修正される必要があることである。これが十分に迅速に行われない場合には、結果として生じる待ち時間によって、ユーザは、仮想現実酔いまたは不快感、あるいは少なくとも、体験の没入型特性に対する混乱をもたらしうる感覚的不調和(sensory dissonance)を感じる可能性がある。視界におけるこれらの変化に対処するためにビュー全体を再レンダリングすることは、リソース集約的であり、比較的低いフレームレート(例えば、60Hz、すなわち1/60秒毎に1回)でのみ可能になりうる。その結果、十分に速い(例えば、200Hz、1/200秒毎に1回の)ペースでの視界の変化を考慮し、ユーザが待ち時間を認知することを防止し、それによって感覚的不調和を回避または十分に低減するため、シーン全体の再レンダリングによってシーンを修正することは実現可能ではないかもしれない。1つの解決策は、シーン内のオブジェクトの特定のビューを表す「サーフェス」、特別に構成されたオブジェクトプリミティブを生成し、それを用いて作業することを含み、サーフェスは、視界の変化の結果として、移動/平行移動、傾斜、拡大縮小、変形、またはその他の方式で1つのユニットとして外観が共に変化することが予想される複数のオブジェクトに対応する。ビュー全体を再レンダリングする代わりに、コンピューティングシステムは、変化した視界からこれらのサーフェスを単純に再サンプリングし、変化した視界から対応するオブジェクトがどのように見えるかを近似することができる。この方法は、基本的に効率のよい便法であり、必要とされる処理を大幅に低減しうるため、ビューは迅速に更新され、待ち時間は十分に短縮されることが保証される。サーフェスの再サンプリングは、ビュー全体の再レンダリングとは異なり、HMDのコンピューティングシステムの比較的限られた処理能力で、割り当てられた時間内(例えば、1/200秒)にビューを修正するために使用できるほど十分に効率的でありうる。この修正に関わる時間的スケールは非常に小さく、HMDから物理的に分離されたより強力なシステムに修正を実行させることは実現不可能になりうる。なぜなら、HMDは、HMDの現在の位置および向きに関する情報を送り、別個のシステムが新しいビューをレンダリングするのを待ち、次いで別個のシステムから新しいビューを受信しなければならないためである。サーフェスを単純に再サンプリングすることにより、修正はHMD上で完全に実行可能となり、処理を高速化する。
図1は、人工現実グラフィックスレンダリングおよびディスプレイシステム100を示す。特定の実施形態では、レンダリングおよびディスプレイシステム100は、予約レンダリングコンポーネント110を有する。予約レンダリングコンポーネント110は、補足レンダリングを実行するために使用される遠隔レンダリングコンポーネントであってもよく、あるいは、より少ないインタラクティブ性の要件で準備することができる事前レンダリング要素であってもよい。例えば、予約レンダリングコンポーネント110は、ストリーミングビデオまたは他の非インタラクティブコンポーネントの事前レンダリングを処理するクラウドコンピューティングネットワークまたはローカルエリアネットワークを介して提供されるレンダリングサーバであってもよい。ユーザは、自分自身の予約レンダリングコンポーネント110を提供してもよく、あるいは予約レンダリングコンポーネント110へのアクセスをサブスクリプションプランの一部として取得してもよい。予約レンダリングコンポーネントは、無線で、または一次レンダリングコンポーネント120への1つまたは複数の有線接続を介して通信することができる。一次レンダリングコンポーネント120は、ラップトップまたはデスクトップコンピュータ、ビデオゲームコンソール、または他の適切なローカルグラフィックスレンダリングシステムなどのスタンドアロンデバイス、あるいは、携帯電話、タブレット、または他の適切なコンパクトグラフィックスレンダリングシステムなど、ユーザの身体に容易に装着できるデバイスであってもよい。予約レンダリングコンポーネント110および/または一次レンダリングコンポーネント120は、典型的なレンダリングパイプラインのいくつかのプロセスを実行することができる。特定の実施形態では、一次レンダリングコンポーネント120は、複数のポリゴンにより定義される3次元(「3D」)モデル、ならびに、毎秒60フレームまでまたはそれを超えるフレームリフレッシュレートをサポートするのに十分なレンダリング命令に基づいてインタラクティブグラフィックをレンダリングすることができる。
一次レンダリングコンポーネント120は、レンダリング要求に対して、一次レンダリングデータを受信することができる。一次レンダリングデータは、2次元または3次元モデル、テクスチャ、およびコンピュータ生成画像をレンダリングするための命令、ならびに他の適切な情報を含むことができる。一次レンダリングコンポーネント120は、受信した一次リレンダリングデータに基づいて、人工現実シーンの外観(aspects)をレンダリングするための初期ステップを実行することができる。例えば、一次レンダリングコンポーネント120は、レイトレーシング、ラスタライゼーション、または他の適切な技法を使用して可視性計算を実行して、仮想シーン内の仮想オブジェクトのどの3Dモデルのどのポリゴンが、ディスプレイのどのピクセルを通して見ることができるかを決定することができる。可視性の決定に基づいて、一次レンダリングコンポーネント120は、シェーディング計算を実行して、各ピクセルの適切な色を決定することができる。特定の実施形態では、一次レンダリングコンポーネント120は、毎秒30フレームのレート、または同様のレートで、予約レンダリングコンポーネント110から圧縮されたまたは圧縮解除されたストリーミングビデオデータを受信することができる。一次レンダリングコンポーネント120は、予約レンダリングコンポーネント110から受信したデータを、初期レンダリングステップによって生成されたデータと組み合わせてもよい。
特定の実施形態では、ディスプレイエンジン150により使用される1つまたは複数の特殊化されたオブジェクトプリミティブ、例えば、「サーフェス」が生成される。一実施例として、一次レンダリングコンポーネント120は、典型的なレンダリングパイプラインにおけるように、3Dモデルから2D画像を最初にレンダリングすることによって、サーフェスを生成することができる。次いで、一次レンダリングコンポーネント120は、付加的な後処理方法を使用して2D画像からサーフェスを生成することができる。別の実施例として、一次レンダリングコンポーネント120は、3Dモデルからサーフェスを直接出力し、2D画像のレンダリングのみを対象とした余分なステップを排除することができる。別の実施例として、一次レンダリングコンポーネント120は、3Dモデルから2D画像をディスプレイエンジン150に出力することができる。ディスプレイエンジン150は、2D画像に基づく付加的な後処理方法を用いてサーフェスを生成することができる。
サーフェスは、人工現実シーンの1つまたは複数の仮想オブジェクトをレンダリングするのに有用な情報を含みうる。情報は、仮想カメラ/ビューワに対するビュー空間の座標系で指定された、シーン内のサーフェスの位置および/または位置データを含むことができる(代替的に、サーフェスの位置は、ワールド空間座標系などの任意の他の適切な座標系で指定することもできる)。サーフェスは、1つまたは複数のテクセルアレイによって表されるテクスチャデータをさらに含むことができる。したがって、特定の実施形態では、「サーフェス」は、シーン内のその位置を指定するための変換行列を有する矩形テクスチャと見なすことができる。テクセルアレイ内の各テクセルは、テクセルアレイ内にカラー情報および2D座標(例えば、(u,v)座標で指定される)を有することができる。特定の実施形態では、各テクセルのカラー情報は、いくつかのカラーチャネル(例えば、赤、緑、および青)の強度と、テクセルの透明度レベル(例えば、完全に透明、完全に不透明、またはその間のどこか)を示すアルファ情報とを示す。他の実施形態では、テクセルのカラー情報は、透明度レベルを別個に指定することなく、赤、緑、および青の強度を示すことができる。この場合、各色の値に、テクセルの関連する透明度レベルを事前に乗算することができる(例えば、テクセルが0のアルファレベルで完全に透明である場合、そのテクセルの赤、緑、および青の値はすべて、0アルファレベルを乗算することによってゼロにされる)。
サーフェスのテクスチャデータは、標準的なグラフィックレンダリングパイプラインの結果に基づいて生成することができ、3次元シーン内の視聴者の視界に基づいて、ディスプレイまたは画像のピクセルによって表示されるべき色を最適に決定する技法を具現化する。特定の実施形態では、ディスプレイエンジン150は、(例えば、200~300ヘルツでフレームを出力するために)性能要求を満たすことができるように、シーンにおける十分な単純性を保証するために処理するサーフェスの数(例えば、最大16のサーフェスまたは任意の他の適切な数のサーフェス)を制限する。したがって、人工現実シーン内の特定の仮想オブジェクトは、任意の適切な規則に従ってグループ化することができる。各サーフェスは、(例えば、ユーザの頭部上のHMDが異なる位置および/または向きに移動することに起因する)シーンのユーザの視界の変化の結果として、移動/平行移動、傾斜、拡大縮小、変形、またはその他の方式で1つのユニットとして外観が共に変化することが予想される、シーン内の1つまたは複数のオブジェクトの表現であってもよい。一例としては(これに限定するものではないが)、人物のアバターおよびアバターが着用する帽子は、人物および帽子が移動/平行移動、傾斜、拡大縮小、変形、またはその他の方式で1つのユニットとして外観が共に変化しうると判断される場合には、1つのサーフェスに対応してもよい。特定の実施形態では、サーフェスは、シーンのユーザの視界が変化するときに、単一のユニットとしての外観の移動/平行移動、傾斜、拡大縮小、変形、もしくは外観の変化が予想される点(例えば、オブジェクトを構成する点)の組に対応する。
一次レンダリングコンポーネント120は、1つまたは複数の有線または無線接続を介してヘッドマウントディスプレイユニット130と通信することができる。特定の実施形態では、ユーザは、ユーザのニーズに基づいて、一次レンダリングコンポーネント120およびヘッドマウントディスプレイユニット130がどのように通信するかを選択することができる。ヘッドマウントディスプレイユニット130は、一次レンダリングコンポーネント120から、サーフェスおよび他のレンダリング命令などのデータを受信するように構成されうる。ヘッドマウントディスプレイユニット130は、受信したデータに基づいて、人工現実シーンをユーザに表示するように準備することができる。特定の実施形態では、ヘッドマウントディスプレイユニット130は、ディスプレイエンジン150および1つまたは複数のディスプレイ170を備えることができる。特定の実施形態では、ディスプレイ170は、必要なすべてのエミッタ、スキャニング素子、および光学系を含むスキャニングディスプレイであってもよい。ヘッドマウントディスプレイユニット130は、ここには示されていないが、人工シーンのレンダリングおよび表示を容易にする追加のコンポーネントをさらに備えることができる。これらは、追加の画像処理コンポーネント、アイトラッキングコンポーネント、熱検出コンポーネント、任意の他の適切なコンポーネント、またはそれらの任意の組合せを含むことができる。本開示では、特定の方法によるレンダリングコンポーネントについて説明しているが、本開示は任意の適切なレンダリングコンポーネントを想定している。
特定の実施形態では、ヘッドマウントディスプレイのディスプレイエンジン150およびディスプレイ170は、特に、高速なフレーム表示またはリフレッシュレートを可能にするように構成されうる。典型的なインタラクティブグラフィックスレンダリングシステムでは、ターゲットフレームレートは毎秒60フレーム程度になりうる。これは、従来のシステムでは、画像が鮮明で滑らかな動画として見えるのに十分であるが、人工現実には十分でない場合がある。人工現実体験の没入型の特性、およびディスプレイのヘッドマウント型の特性およびユーザの眼への近接性によってさらに悪化するために、人工現実レンダリングおよびディスプレイシステム100は、ユーザの視点および/または動き(例えば、頭部および/または眼の動き)の変化に応答して画像を表示するために、はるかに高いフレーム表示レート、例えば、毎秒200~300フレームを上回るフレーム表示レートを目標としてもよい。これが十分に迅速に行われない場合には、結果として生じる待ち時間によって、ユーザは、仮想現実酔いまたは不快感をもたらしうる感覚的不調和(sensory dissonance)を感じる可能性がある。特定の実施形態では、人工現実レンダリングおよびディスプレイシステム100は、ユーザの眼の動きを追跡し、それに反応することができる。眼の動きに反応するときにスムーズなビデオを提供するために、システム100は、特に集中した期間内には、より高い表示レート、例えば毎秒800フレームまでのバーストを目標としてもよい。
システム全体は、これらの高速表示速度ベンチマークを念頭に置いて構成されてもよい。毎秒200フレームの目標フレームレートは、5ミリ秒毎に1フレームにほぼ等しい。ワイヤレスまたは有線接続を介して強力なグラフィックプロセッサに移動データを伝送し、グラフィックプロセッサからのレンダリングデータを更新すると、かなりの時間が失われる。したがって、ヘッドマウントユニットでは、少なくとも一定量のグラフィックスの準備を行い、伝送で失われる時間を短縮しなければならない。しかしながら、ヘッドマウントディスプレイユニット130には、ユーザの快適性のため順守しなければならない、重量、電力、および空間の制約がある。これらの重量、電力、および空間の制約は、ヘッドマウントディスプレイユニット130に利用可能なコンポーネントおよび計算能力を制限する。実際に、従来のアプローチを使用すると、長期間の装着に適したヘッドマウントディスプレイユニット130で利用可能なコンポーネントは、適切な照明を有するポリゴンを含む3Dモデルの人工現実感シーンを、没入型体験に必要な毎秒200フレームは言うに及ばず、毎秒60フレームでもレンダリングすることができない。
この問題を解決するため、強力な一次レンダリングコンポーネント120は、毎秒約60フレームでサーフェスを生成するのに必要な複雑なグラフィックス生成作業を実行することができる。ヘッドマウントディスプレイユニット130のディスプレイエンジン150は、一次レンダリングコンポーネント120からの更新の間のユーザの動きに基づいて、一次レンダリングコンポーネント120が生成するものを調整または再サンプリングするのに十分強力なハードウェアコンポーネントを備えることができる。ディスプレイエンジン150は、一次レンダリングコンポーネント120の出力を再処理し、一次レンダリングコンポーネント120が表示のために別のフレームを準備するまで一次レンダリングコンポーネント120の出力をワーピングし、または他の方法で調整するため、ユーザの移動によってもたらされる視界の変化に迅速に応答することができる。例えば、一次レンダリングコンポーネント120は、説明したように、典型的なレート、例えば、毎秒約60フレームで、3Dシーン内の仮想オブジェクトの2D画像をレンダリングすることができる。2D画像は、サーフェスを生成するために使用されてもよい。各サーフェスは、一次レンダリングコンポーネント120によって実行される複雑な照明効果、遮蔽決定、および他のレンダリング技法の実装の結果を含む、視聴者に対するサーフェスの3D位置を示す位置情報と、それらが表す仮想オブジェクトのテクスチャ情報とを含むことができる。一次レンダリングコンポーネント120は、サーフェスをディスプレイエンジン150に送ることができる。次いで、ディスプレイエンジン150は、例えば、ユーザの位置および/または向きに関する更新された情報を使用して、現在のユーザの視界からサーフェスを再サンプリングし、ディスプレイの特性に適応するようにサーフェスをワーピングすることができる。シーンの単純化された形状(サーフェスの使用による)は、他の最適化技術と共に、ディスプレイエンジン150が、所望の目標レート(例えば、毎秒200フレームを超えるレート)で人工シーンを精緻化し、レンダリングするタスクを実行することを可能にする。したがって、一次レンダリングコンポーネント120は、1/60秒毎にユーザの動きに正確なサーフェスを準備するが、ディスプレイエンジン150は、出力を再サンプリングして、1/200秒毎にグラフィックの位置を精緻化し、一次レンダリングコンポーネント120のフレームレートによって生成されたギャップを埋めることができる。これにより、快適な機器を提供しながら、コンピュータ生成グラフィックスのスムーズでシームレスな移動で、ユーザに高品質の人工現実体験をもたらすことができる。
図2は、ディスプレイエンジン150のシステム図を示す。ディスプレイエンジン150は、4つのタイプのトップレベルブロックを備えることができる。図2に示すように、これらのブロックは、制御ブロック200、変換ブロック300、ピクセルブロック400、およびディスプレイブロック500を含んでもよい。ディスプレイエンジン150のコンポーネントのうちの1つまたは複数は、1つまたは複数の高速バス、共有メモリ、または任意の他の適切な方法を介して通信するように構成されうる。図2に示されるように、ディスプレイエンジン150の制御ブロック200は、変換ブロック300、ピクセルブロック400、およびディスプレイブロック500と通信するように構成されうる。特定の実施形態では、ディスプレイエンジン150の各パイプラインは、別個のディスプレイ170が表示するための画像の準備専用であってもよい。各ディスプレイ170は、ユーザの左眼および右眼にそれぞれ画像を表示するように構成されてもよい。本明細書でさらに詳細に説明するように、この通信は、データならびに制御信号、割り込み、および他の命令を含みうる。2つのパイプラインは、他のパイプラインとは独立して動作することができる。
特定の実施形態では、制御ブロック200は、一次レンダリングコンポーネント120から入力データストリーム205を受信し、ディスプレイエンジン150におけるパイプラインを初期化して、表示のためのレンダリングを終了する。特定の実施形態では、入力データストリーム205は、一次レンダリングコンポーネント120からのデータおよび制御パケットを含む。データおよび制御パケットは、テクスチャデータおよび位置データならびに追加のレンダリング命令を含む1つまたは複数のサーフェスなどの情報を含むことができる。制御ブロック200は、必要に応じて、ディスプレイエンジン150の1つまたは複数の他のブロックにデータを配信することができる。制御ブロック200は、表示されるべき1つまたは複数のフレームのためのパイプライン処理を開始することができる。特定の実施形態では、ヘッドマウントディスプレイユニット130は、複数のディスプレイエンジン150を備え、各々は、それ自身の制御ブロック200を備える。
特定の実施形態では、変換ブロック300は、人工現実シーンに表示されるサーフェスの初期可視性情報を決定しうる。一般的に、変換ブロック300は、ディスプレイ上のピクセル位置から光線を投射し、フィルタコマンド(例えば、バイリニア補間または他のタイプの補間技術に基づくフィルタリング)を生成して、ピクセルブロック400に送ることができる。変換ブロック300は、(例えば、慣性測定ユニット、アイトラッカー、および/または、自己位置推定と環境地図作成の同時実行(SLAM)などの任意の適切な追跡/位置決めアルゴリズムを使用して決定される)ユーザの現在の視点から、サーフェスが位置決めされ、ピクセルブロック400に送る結果を生成しうる人工シーンへの、レイキャスティングを行ってもよい。
一般的に、特定の実施形態によれば、変換ブロック300は各々、4ステージパイプラインを備えることができる。変換ブロック300のステージは、以下のように進行しうる。レイキャスタは、タイルと称される1つまたは複数の位置合わせされたピクセルのアレイ(例えば、各タイルは、16×16の位置合わせされたピクセルを含みうる)に対応する光線束を発することができる。光線束は、人工現実シーンに入る前に、1つまたは複数の歪みメッシュに従ってワーピングされてもよい。歪みメッシュは、少なくとも、ヘッドマウントディスプレイ130のディスプレイ170から生じる幾何学的歪み効果を補正するように構成することができる。変換ブロック300は、各タイルの境界ボックスを各サーフェスの境界ボックスと比較することによって、各光線束がシーン内のサーフェスと交差するかどうかを決定することができる。光線束がサーフェスと交差しない場合、それは破棄されてもよい。タイル-サーフェスの交点が検出され、対応するタイル-サーフェスペア395がピクセルブロック400に渡される。
一般的に、特定の実施形態によれば、ピクセルブロック400は、タイル-サーフェスペア395からカラー値を決定し、ピクセルカラー値を生成する。各ピクセルのカラー値は、制御ブロック200によって受信され、記憶されたサーフェスのテクスチャデータから(例えば、入力データストリーム205の一部として)サンプリングされる。ピクセルブロック400は、変換ブロック300からタイル-サーフェスペア395を受信し、バイリニアフィルタリングを予定する。各タイル-サーフェスペア395について、ピクセルブロック400は、投影されたタイルがサーフェスと交差する場所に対応するカラー値を使用して、タイル内のピクセルについてのカラー情報をサンプリングしてもよい。特定の実施形態では、ピクセルブロック400は、各ピクセルに対して赤、緑および青のカラーコンポーネントを別々に処理する。次いで、ピクセルブロック400は、ピクセルカラー値495をディスプレイブロック500に出力してもよい。
一般的に、ディスプレイブロック500は、ピクセルブロック400からピクセルカラー値495を受信し、ディスプレイのスキャンライン出力により適するようにデータのフォーマットを変換し、ピクセルカラー値495に1つまたは複数の輝度補正を適用し、ディスプレイ170に出力するためにピクセルカラー値495を準備することができる。ディスプレイブロック500は、ピクセルブロック400によって生成されたタイル順のピクセルカラー値495を、ディスプレイ170によって必要とされうるスキャンライン順または行順のデータに変換しうる。輝度補正は、必要な任意の輝度補正、ガンママッピング、およびディザリングを含んでもよい。ディスプレイブロック500は、補正されたピクセルカラー値などのピクセル出力595を、ディスプレイ170に直接提供してもよく、あるいは、ピクセル出力595を、さまざまなフォーマットでディスプレイエンジン150の外部のブロックに提供してもよい。例えば、ヘッドマウントディスプレイユニット130は、バックエンドカラー処理をさらにカスタマイズするため、ディスプレイへのより広いインターフェースをサポートするため、あるいはディスプレイの速度または忠実度を最適化するために、追加のハードウェアまたはソフトウェアを備えることができる。
制御ブロック200、変換ブロック300、ピクセルブロック400、およびディスプレイブロック500に関するさらなる詳細については、制御ブロック200から説明を開始する。特定の実施形態では、制御ブロック200は、一次レンダリングコンポーネント120から入力データストリーム205を受信し、ディスプレイエンジン150におけるパイプラインを初期化して、ユーザの現在の視点に基づいて人工現実のサーフェスを再サンプリングまたは補正する。特定の実施形態では、制御ブロック200は、一次レンダリングコンポーネント120から制御パケットを受信する。制御パケットは、人工現実シーンにおいてレンダリングされるテクスチャデータおよび位置データ(例えば、変換行列によって定義されるような)を有する1つまたは複数のサーフェスを含むことができる。
図3は、特定の実施形態による例示的な制御ブロック200のアーキテクチャを示す。特定の実施形態では、制御ブロック200は、ローカルメモリ235を有するマイクロコントローラ230を含んでもよい。ローカルメモリ235は、一次レンダリングコンポーネント120から制御ブロック200によって受信されるデータのバッファとして機能してもよい。制御ブロック200は、ディスプレイエンジン150の1つまたは複数の他のブロックによってアクセス可能な共有メモリ240を含んでもよい。共有メモリ240は、各フレームのピクセルカラー値を準備する間に、他のブロックによって使用されるデータを記憶するために使用されてもよい。一例として、変換ブロック300は、そのパイプライン動作の一部として、事前に計算された値(例えば、変換ブロック300がアクティブでない間に計算された値)に依拠することができる。同様に、ディスプレイブロック500は、ディスプレイブロック500がアクティブでない間に計算された値に依拠してもよい。これらの値は、共有メモリ240に記憶されうる。特定の実施形態では、マイクロコントローラ230は、フレームが処理されてディスプレイ170に出力された後、または、適用可能な場合には、フレームの特定の部分のデータが次のブロックに送られた後など、他のブロックがアクティブでない間にのみ、共有メモリ240に書き込みうる。この構成により、同一フレーム内で一貫性のない結果を回避することができる。同様に、ステータスおよびパフォーマンスの更新は、他のブロックがアクティブでない間に、例えば、フレーム間の期間に、またはマイクロコントローラ230がパイプラインを停止するコマンドを発行した後にのみ実行されてもよい。特定の実施形態では、共有メモリ240は、特定のブロックによる使用のために確保されるセクションを有してもよい。マイクロコントローラ230は、ディスプレイエンジン150の特定のブロックがアクティブでないときにのみ、共有メモリ240の当該セクションに書き込むことができる。本開示は、特定の方法でマイクロコントローラおよび共有メモリを説明するが、本開示は、任意の適切な方法でマイクロコントローラおよび共有メモリを想定している。
制御ブロック200は、ピクセルブロック400によって使用されるテクスチャデータを記憶するテクセルメモリ220をさらに含んでもよい。テクセルメモリ220は、専用メモリコントローラ210を有してもよい。特定の実施形態では、サーフェスに関連するテクスチャアレイは、メモリコントローラ210を介してテクセルメモリ220に直接書き込まれうる。例えば、マイクロコントローラ230およびメモリコントローラ210は共に、ヘッドマウントディスプレイユニット130のネットワークファブリックに接続されてもよく、このネットワークファブリックは次に、一次レンダリングコンポーネント120に通信可能に連結されてもよい。このように、マイクロコントローラ230がテクセルアレイのセンダによる転送を設定した後(例えば、一次レンダリングコンポーネント120)、センダは入力データストリーム205によってメモリコントローラ210を介してテクセルアレイをテクセルメモリ220に書き込むことができる。マイクロコントローラ230は、テクスチャデータの入力を制御することもできる。特定の実施形態では、メモリコントローラ210は、フレーム間の期間中だけテクセルメモリ220に記憶されたデータを更新してもよく、またはピクセルブロック400がアクティブでない間だけテクセルメモリ220に記憶されたデータを更新してもよい。
特定の実施形態では、テクセルメモリ220は、複数の読み出し要求に並列に応答するように構成される。テクセルメモリ220およびメモリコントローラ210は、ピクセルブロック400からのメモリ読み出し要求を構文解析し、要求されたデータを包含するメモリのサブセットのみを読み出すように構成されうる。一例として、テクセルメモリ220内のデータは、64ビットワードに分割される256ビット幅の論理バンクに記憶されてもよい。メモリ読み出し要求を受信すると、メモリコントローラ210は、256ビット論理バンク全体を読み出すのではなく、それらの64ビットワードのうちどれが必要かを判断し、それらのワードのみを読み出すことができる。この方法で読み出しを実行すると、読み出し要求の送信とその後のデータの受信に使用されるバス上のトラフィックが減少しうる。これはまた、実行される読み出しの回数全体を減らすことによって、電力使用量を減らすことができる。
特定の実施形態では、メモリコントローラは、1つまたは複数の優先順位方式に従って、テクセルメモリ220へのアクセスに優先順位を付けることができる。例えば、メモリコントローラ210は、メモリへの書き込み(例えば、一次レンダリングコンポーネント120からの書き込み)を最も高い優先順位で処理してもよい。メモリコントローラ210は、次に高い優先順位を有するピクセルブロック400からの読み出し要求を処理し、他のアクセス要求(例えば、高速通信バス250上の要求)を最も低い優先順位で処理する。特定の実施形態では、テクセルメモリ220に記憶されたテクセルデータは、読み出し時間、その後の処理時間、電力使用量、および発熱を低減するように特に構成されたパターンに従って記憶される。特定の実施形態では、テクセルメモリ220およびメモリコントローラ210は、複数の適切なカラーフォーマットをサポートし、サイズは、手元のアプリケーションに応じて変化する。例えば、カラーフォーマットは、RGBまたはRGBA指定カラーを含むことができ、任意の適切なサイズを含むことができる。本開示では、特定の方法でテクセルメモリについて説明しているが、本開示は任意の適切なテクセルメモリを想定している。
特定の実施形態では、制御ブロック200による通信は、複数のコンポーネントが通信する高速バス250上で実行されうる。マイクロコントローラ230、メモリコントローラ210、および共有メモリ240は、高速バス250に接続することができる。変換ブロック300、ピクセルブロック400、およびディスプレイブロック500のコンポーネントは、高速バス250に接続して、これらのブロックのコンポーネントがマイクロコントローラ230および共有メモリ240と通信できるようにすることもできる。高速バスは、他のコンポーネントに接続することもできる。特定の実施形態では、マイクロコントローラ230は、ディスプレイエンジン150の1つまたは複数のコンポーネントと通信するための1つまたは複数の専用バスを有する。
特定の実施形態では、制御ブロック200は、一次レンダリングコンポーネント、ヘッドマウントディスプレイユニット130の1つまたは複数の他のコンポーネント、ディスプレイエンジン150の1つまたは複数の他のコンポーネント、または人工現実グラフィックレンダリングおよびディスプレイシステム100の任意の他の適切なコンポーネントからの割り込みを受信し、処理するように構成されうる。割り込みは、ディスプレイエンジン150の特定のブロックに、または一般にディスプレイエンジン150に、高い優先順位のコマンドを提供するために発行されうる。一例であって、限定されるものではないが、制御ブロック200のマイクロコントローラ210は、ウェイクアップ割り込みを受信するように構成されてもよい。ウェイクアップ割り込みは、マイクロコントローラ210に、ディスプレイエンジン150の各ブロックによって実行されるブートシーケンスを開始させることができる。別の例として、マイクロコントローラ210は、ディスプレイエンジン150のブロックからエラー割り込みを受信するように構成されてもよい。エラー割り込みは、ディスプレイエンジン150が遭遇した障害を示すことができる。制御ブロックのマイクロコントローラ210は、必要に応じて、是正措置(例えば、ログまたはディスプレイにデバッグ情報を出力する、障害状態ルートに入る、または任意の他の適切な是正措置)をとるように構成されてもよい。別の例として、マイクロコントローラ210は、停止割り込みを受信するように構成されてもよい。停止割り込みを受信すると、マイクロコントローラ210は、レンダリングパイプラインの実行を停止し、シャットダウンまたは一時停止ルーチンに入るコマンドを発行することができる。本開示は、特定の割り込みおよびコマンドを説明しているが、本開示は、任意の適切な割り込みおよびコマンドを想定している。
図4は、実施例の変換ブロック300のアーキテクチャを示す。変換ブロック300は、レイキャスタ310、メッシュワープブロック320およびワープメモリ325、境界比較ブロック330および境界メモリ335、ならびに変換エンジン340および変換メモリ345を含む。いくつかの実施形態では、ワープメモリ325、境界メモリ335、および変換メモリ345の一部または全部は、これらのメモリによって使用されるために割り当てられた制御ブロック200の共有メモリ240の一部分であってもよい。いくつかの実施形態では、ワープメモリ325、境界メモリ335、および変換メモリ345の各々は、変換ブロック300の関連ブロックによって使用されるデータを記憶するための個別の専用メモリであってもよい。これらのメモリに記憶されたデータは、制御ブロック200のマイクロコントローラ230によって受信されてもよく、制御ブロック200のマイクロコントローラ240によって生成されてもよく、または以下のデータの説明によって明らかになるように、任意の他の適切な方法で供給されてもよい。特定の実施形態では、変換ブロック300は、付加的なステージおよび付随する構造を含みうる。
特定の実施形態では、変換ブロック300は、ディスプレイにより表示されるべきサーフェスの初期の可視性情報を決定しうる。変換ブロック300は、人工現実感シーンを見るユーザの(例えば、運動センサデータ、視線追跡データ、および/または追跡/位置決めアルゴリズムを使用して決定される)視点から、レイキャスティングを実行してもよい。変換ブロック300の結果は、ピクセルブロック400に送られてもよい。特定の実施形態では、ディスプレイエンジン150は、複数の変換ブロック300を有する。第1の変換ブロック300のブロックは、第2の変換ブロック300内のブロックの状態とは無関係に進むことができる。
変換ブロックパイプラインは、1つまたは複数のサーフェスに関連付けられた位置データに基づいて人工現実シーンへのレイキャスティングを実行するレイキャスタ310を含んでもよい。一般的に、レイキャスティングは、人工現実シーンにおける仮想オブジェクトの一次可視性を決定するための技術である。コンピューティングデバイスは、シーン内の光の粒子の挙動をシミュレートすることを目的として、視点から発せられる光線を仮想シーンに送る。光線が到達する仮想オブジェクトの色は、表示されるピクセルの色に起因する。このように、レイキャスティングは、レイトレーシングとして知られる技術に関連しているが、1つ異なる点がある。レイトレーシングが多くの場合、1つまたは複数の反射による光線の追跡を含んでいるのに対して、レイキャスティングはそうではない。レイキャスティングでは、光線の「追跡」に関連する計算は、光線が第1の仮想オブジェクトと交差したことを検出すると終了する。
図7は、シーンのビュー内に表示される(例えば、ポリゴンからなる3Dモデルによって定義される)仮想オブジェクトの視覚情報および位置情報を決定するための第1のレイキャスティング処理を示す。シーンの「ビュー」は、例えば、ヘッドマウントディスプレイユニット130の現在の位置および向きに基づいて決定されうる、シーンのユーザの視界を指してもよい。オブジェクトがビュー内にどのように表示されるかをより良く理解するには、視点(例えば、シーンを見ているユーザの視点を表すことができる「仮想カメラ」)からスクリーン上のピクセルに放射される多数の仮想光線を想像することが有用である。一例としては(これに限定するものではないが)、図7を参照すると、仮想光線730は、視点720から放射され、スクリーン710のピクセル715と交差する。別の例としては(これに限定するものではないが)、仮想光線760はピクセル770と交差しうる。1つまたは複数の仮想光線は、本明細書で「レイキャスティング処理」と称されるものを使用して、スクリーンのピクセルのすべて(または一部)に対して繰り返し投射され、各ピクセルが表示すべきもの(例えば、ピクセルの色および透明度)を決定することができる。コンピューティングシステムは、レイキャスティング処理を実行し、仮想光線の各々が仮想オブジェクトと交差するかどうかを決定し、仮想光線が仮想オブジェクト上のどこと交差するかをさらに決定することができる。一例としては(これに限定するものではないが)、仮想光線730は、交点755でオブジェクト750(例えば、AR時計)と交差する。この例では、コンピューティングシステムは、光線730もピクセル715でスクリーン710と交差するので、ピクセル715が交点755に関連付けられていると決定することができる。別の例としては(これに限定するものではないが)、仮想光線760はピクセル750と交差しなくてもよい。この例では、コンピューティングシステムは、ピクセル715をオブジェクト750に関連付けるべきではないと決定することができる。このレイキャスティング処理の使用は、所与のビュー内で見ることができるオブジェクト(またはその一部)を決定するために使用されうるので、本明細書では「可視性テスト」と称されることがある。レイキャスティング処理は、最終的に、スクリーンのピクセルを、シーンのビューに対して見ることができる任意のオブジェクト上の交点に関連付けるために使用されうる。
図4の説明に戻ると、変換ブロック300のレイキャスタ310は、人工現実シーンに送られる光線を準備する責任を負う。本明細書に記載のように、ディスプレイエンジン150と共に使用されるとき、レンダリングタスクの大部分は、一次レンダリングコンポーネント120によって達成され、ほとんどのオブジェクトの遮蔽およびシェーディングの詳細を含む。一次レンダリングコンポーネント120によって実行されるレンダリングタスクの結果は、各サーフェスの位置データおよびテクスチャデータに取り込まれる。そして、レイキャスタ310によって実行されるレイキャスティング(例えば、サーフェスの集合に対してレイキャスティングを実行する)は、ディスプレイエンジン150によって達成されうる忠実度を制限しない。特定のレイキャスティング構成では、多くの光線、例えば、表示される各ピクセルに対応する1つの光線、またはサブピクセルさえも使用することができる。光線の経路は、光線が仮想オブジェクトに接触するか、またはある閾値距離を超えるまで追跡される。例えば、閾値は、光線が移動した距離、計算に費やされた時間量、または任意の他の適切な測定基準に基づくことができる。閾値を超えた場合、光線は仮想オブジェクトに衝突しておらず、デフォルト値はその光線によるものと決定される。光線が仮想オブジェクトに当たった場合、仮想オブジェクトの色は多くの場合、光線によるものである。いくつかの実施態様では、光線に対応するピクセルの色は、光線に起因する値に基づいて決定される。
上述のように、可視性を決定するためには、光線は、ディスプレイ内の各ピクセルに対して投射されてもよい。しかしながら、これは、疎なサーフェスを有するシーンは、多くの光線が全く交差しない結果となる可能性があるので、計算的に効率的ではない可能性がある。したがって、特定の実施形態では、レイキャスタ310は、その代わりに、より大きなサンプリング実装面積を一度に調べることができるように、ピクセルの集合からの光線束またはビームをシーン内に投射することができる。概念的には、光線束がいずれのサーフェスとも交差しない場合、光線束内の任意の光線はどのサーフェスとも交差しない。この観察に基づいて、光線束がサーフェスと交差しないことが決定されると、光線束が投射されるピクセルに関しては、そのサーフェスに対してさらなる処理を実行する必要はない。一方、光線束がサーフェスと交差する場合、レイキャスタ310は、光線束に関連する各ピクセルに関しては、より細かいサンプリングを行ってもよい。特定の実施形態では、光線束は、ピクセル集合のユニットから投射されてもよい。例えば、光線束がキャストされる位置合わせされたピクセルのユニットは、本明細書では、「タイル」と称されうる。例えば、各タイルは、ディスプレイの16×16ピクセルの整列ブロックであってもよい。タイルの位置は、タイルの4つのコーナー、中心点およびエッジまでの距離、数式、任意の他の適切な方法、またはこれらの任意の組合せを指定することなど、任意の適切な方式に基づいて指定することができる。特定の実施形態では、タイルから投射される光線束は、タイルの4つのコーナーから投射される4つの光線によって画定することができる。したがって、光線の位置は、ディスプレイのピクセル座標空間(例えば、変換ブロック300に関連付けられた左眼ディスプレイ170または右眼ディスプレイ170などの、図4で「ディスプレイ空間」と呼ばれる、特定のディスプレイのビュー空間内の(x,y)ピクセル位置)内で指定されうる。
特定の実施形態では、ディスプレイのピクセルは、整列されたタイルの行に分割される。レイキャスタ310は、ディスプレイ内のタイルの各々に対して光線束を投射してもよい。特定の実施形態では、レイキャスタは、次の行に移動する前に、タイルの水平方向の行内のすべてのタイルに対して個々の光線束を投射する(代替的に、スキャンラインの順序が垂直である場合には、シーケンスは、タイルの垂直方向の列に基づいてもよい)。
特定の実施形態では、レイキャスタ310は、光線束に優先順位を付けてもよい。一例として、レイキャスタ310は、個々のタイルを処理するために予想される時間の量に基づく順序で、タイルのための光線束を準備してもよい。例えば、スキャニングディスプレイによって表示される画像は、色収差として知られる効果を示すことがあり、ディスプレイのエッジ付近の色の赤、緑、および青の成分は、ディスプレイの中心付近の色に対して同期していない。この効果は以下でより詳細に説明される。この効果を補正する作業のため、ディスプレイのエッジ付近のタイルを処理することは、ディスプレイの中心付近のタイルよりも、(例えば、メモリからテクセルアレイを読み取るために)多くの読み取り帯域幅を必要とし、および/または長い処理時間を要することがある。例えば、色収差を考慮するために各カラーコンポーネント(例えば、赤、緑、または青)について別々の光線束が投影される実施形態では、各色の光線束の交差位置が異なることがあり、別々のテクスチャ領域をメモリから取り出すことが必要になる(例えば、3つの別々のメモリ読み出しを必要とする)ことを意味する。色収差がさほど顕著でないディスプレイの中心に近いタイルの場合、同じテクスチャ領域を使用して、赤、緑、および青の3つの光線束すべての色を計算することができる(たとえば、1つのメモリ読み出ししか必要としない)。この情報に基づいて、レイキャスタ310は、(例えば、エッジにより近い)より遅いタイルの光線束と、(例えば、中心により近い)より速いタイルの光線束とを交互に準備してもよい。たとえば、1行に160個のタイルがある場合には、次のタイル順序は、必要とされる平均テクセル読み出し帯域幅を0,80,1,81,2,82のように均等にする(各数字は、160個のタイルの行におけるタイルの順序に対応する)。
変換ブロック300の次のブロックでは、メッシュワープ320は、光線に1つまたは複数の「ワープ」または「歪み」メッシュを適用して、それらの個々の軌跡を指定することができる。歪みメッシュは、例えば、カメラまたはディスプレイのレンズの効果をシミュレートまたは補正するように選択されてもよい。上述のスキャニングディスプレイ装置には多くの利点があるが、いくつかの欠点もある。これらの欠点のいくつかは、従来のまたは理想的なディスプレイ上の画像と比較したときに、画像の歪みの形で現れる。レンズを通してシーンを覗き込むカメラに例えると、これらの歪みの多くは、カメラレンズによって光が曲げられることで生じるワーピングまたは幾何学的歪みの形をとる。
図8は、シーンの視点からの表示用にサーフェスをポストワーピングまたは再サンプリングするための第2のレイキャスティング処理の例示的な概念化を示す。特定の実施形態では、1つまたは複数のサーフェスは、シーンに関連する3D仮想空間内の特定の位置にそれらを配置する位置情報を含む。一例としては(これに限定するものではないが)、図8を参照すると、サーフェス850は、関連する位置情報に基づいて、図示された位置に配置されてもよい。この例では、サーフェスは、視聴者に対して様々な深さを有する3D時計を描くように見えることがあるが(例えば、9時の領域は、3時の領域よりも視聴者から離れて見えることがある)、サーフェスは、特定の実施形態では、視聴者に面している平坦なサーフェスであることがある(例えば、少なくとも最初に視点が変化する前に、その法線ベクトルは視聴者の方向を指している)。オブジェクトの任意の視覚的表現は、サーフェスのテクスチャデータの一部として記憶されてもよい。
特定の実施形態では、サーフェスの各テクセルは、それがどこに配置されるべきかを特定する関連の位置情報を有する。レイキャスティング処理は、レイキャスタ310によって実行されうる。一例としては(これに限定するものではないが)、図8を参照すると、仮想光線830は、視点820から放射され、スクリーン810のピクセル815(例えば、ヘッドマウントディスプレイ130の2つのアイピースのうちの1つのディスプレイ170)と交差する。別の例としては(これに限定するものではないが)、仮想光線860はピクセル870と交差しうる。特定の実施形態では、変換ブロック300のメッシュワープブロック320は、ヘッドマウントディスプレイユニット130の光学構造(例えば、ヘッドマウントディスプレイユニット130のレンズの光学効果)によって導入される歪みおよび/または他の収差(例えば、色収差)を説明することができる。歪み/収差は、数学的に補正することができる。この補正は、図8に示されるように、仮想光線(例えば、仮想光線830、仮想光線860)が、歪み/収差を説明するために数学的に進路補正する歪みメッシュ840を、仮想光線が通って進むプロセスとして概念的に表されてもよい。一例としては(これに限定するものではないが)、(歪み/収差を説明するための進路補正に続いて)仮想光線830は、交点855でサーフェス850と交差することがある。別の例としては(これに限定するものではないが)、仮想光線860は(歪み/収差を説明するための進路補正に続いて)、サーフェス850または他のサーフェスと交差しないことがある。
特定の実施形態では、変換ブロック300のメッシュワープ320は、光線に1つまたは複数の歪みメッシュを適用して対抗し、例えば、これらの幾何学的歪みを補正することができる。歪みの1つのタイプとして、色収差が知られている。色収差とは、レンズから出る光が分散され、レンズによって異なる波長(例えば、色)の光が、異なる焦点に集束される、光学的な効果を指す。光線の赤の成分は、緑または青の成分とは異なる屈折角を有しうる。この効果により、カラー縞を有するぼやけた画像が生成される。この効果は、レンズの物理的特性によるもので、比較的安価な材料がレンズに使用される場合に生じうる。スキャニングディスプレイ装置のスキャニング素子および光学系は、より安価で軽量な材料を使用する可能性があるため、スキャニングディスプレイにはこの効果が現れることがある。色収差の効果は、異なるハードウェアコンポーネントを使用するのではなく、歪みメッシュを適用することによって補正することができる。異なる色の光線は異なる振舞いをするため、特定の実施形態では、異なる色で別々に光線を投射し(例えば、各ピクセルから赤、緑、および青の3色の光線が投射されてもよい)、異なる波長での異なる屈折特性を考慮して、別々に定義された歪みメッシュを適用してもよい。特定の実施形態では、異なる色に対して別々の歪みメッシュを定義するのではなく、赤の成分および青の成分について色収差を補正するための歪曲メッシュを、緑の成分からのオフセットとして規定してもよい。
色収差に対処するために定義される歪みメッシュは、ディスプレイ170の想定される色収差特性および/またはユーザの眼の相対注視方向(例えば、アイトラッカーによって決定されるような)を反転するように構成されてもよい。レイキャスタ310によって人工現実感シーンに送られる光線に歪みメッシュが適用されると、赤、緑、および青の光線の角度が変化することがある。特定の実施形態では、赤、緑、および青の光線の間の変化の程度は、ディスプレイ内の光線の位置に応じてそれ自体変化することがある。ディスプレイの中心付近の変動の程度は、存在しないこともあるが、1つまたは複数のエッジ付近での変動の程度は、比較的大きく、容易に検出されることがある。補間が歪みメッシュのすべての値を計算する効率的な方法になるように、変動は滑らかに変化してもよい。いくつかの実施形態では、この変動は、直接較正を要する程度になることもある。値は、ワンタイム較正イベントの一部としてあらかじめ計算され、共有メモリ240またはワープメモリ325に記憶され、デバイスが使用されている間に適用されてもよい。ただし、レンズおよびディスプレイの特性は熱によって変化する場合があり、歪みメッシュの値は、かなりの熱が検出された場合には調整が必要になることがある。
別のタイプの歪みは、レンズ歪みまたはスキャニング歪みとして知られている。この歪みは、レンズが完全に一様でないために、生ずることがある。レンズ後方のサーフェスを横切って眼をスキャンすると、ある場所から次の場所まで光の屈折角にわずかな変動がありうる。多くの場合、レイキャスティングに使用されるようなレンズのシミュレーションは、一様であると仮定される。この歪みを考慮できないと、スキャニングディスプレイで使用される光に変則的な挙動を引き起こす可能性があり、これは、比較的安価な材料をスキャニングディスプレイの一部として使用する際の効果を増大させることがある。特定の実施形態では、レイキャスタ310からの光線は、レンズ歪みの効果を反転させるために歪められてもよく、使用者が見たときに完全に一様なレンズとなる見かけ上の効果を生み出す。いくつかの実施形態では、この効果は、レンズが使用によって著しく変化することはないと仮定することができるので、製造中に較正されうる。いくつかの実施形態では、レンズは、損傷を受けたり、その装着時にわずかにシフトしたり、熱のために塑性変形が生じたり、または多くの他の種類の永久変形が生じたりすることがある。レンズの歪みを補正するため、歪みメッシュは、レンズの歪みに応じて修正されることがある。さらに、レンズの歪みの効果は、レンズを撓ませることがある熱などの効果により、使用中に悪化することがある。歪みメッシュは、この効果を補正するために頻繁な再較正を必要とすることがある。
別のタイプの歪みは、画像がスキャニングディスプレイ装置上にどのように表示されるかに関するもので、ローリングシャッタと呼ばれる。スキャニングディスプレイ装置のピクセルは、一斉に表示されるわけではない。代わりに、これらは、スキャニングパターンに続いてディスプレイに「書き込まれる」。例えば、ディスプレイの行全体のすべてのピクセルは、次の行に下降する前に書き込まれてもよい。これを容易にするために、ディスプレイエンジン150は、別の行に下降する前に、ピクセルの設定された行のピクセルカラー値を決定することもできる。ディスプレイエンジン150は、高速フレームリフレッシュレートを提供するように設計されているが、フルフレームが出力される前に、人工現実シーンが変化する可能性は依然としてある。これは、ローリングシャッタ効果のような効果が生み出すことがある。この効果を打ち消すために、歪みメッシュが計算されてもよい。歪みメッシュは、フレームの各行が変換エンジンによって処理された後に更新されて、次の入力行に備えることができる。
他の歪みは、ディスプレイの製造方法に関連する。1つの歪みは、ダイ不整合と呼ばれる。スキャニングディスプレイに使用されるエミッタを含むディスプレイは、整列されたLEDのパネルを含む。緻密なLEDパネルの製造は困難なため、パネルは指定された許容誤差の範囲内でのみ位置合わせされる。LEDの2つのパネルの位置合わせは、たとえ2つのピクセルを超える可能性のある許容誤差の範囲内で垂直方向に不整合となっている場合でも許容可能とみなされうる。このため、各エミッタディスプレイがいくつかの不整合パネルで構成される可能性がある。したがって、ピクセルの間隔および位置合わせは、理想的な表示、すなわち人工的なシーンが構築されるモデルに従って、均等にまたは正しく分散されない場合がある。ダイ不整合を補正するために、歪みメッシュを生成して、ディスプレイ内のピクセルの外観を一様にすることができる。一例として、各カラーチャネル(例えば、赤、緑、および青)のLEDは、単一のパネルに合成されるときには、あるいは、結果として得られる画像が表示のために合成されるときには、位置合わせされなくてもよい。この不整合は、2つの重なり合うピクセルが同じ座標番号によって識別されないことがある場合のようなものになりうる。例えば、表示される同一ピクセルについて、赤色パネル内のLEDは座標位置(10,10)によって参照されてもよく、一方、青色パネル内の同じ物理位置のLEDは、座標位置(11,12)によって参照されてもよい。ディスプレイエンジンによって適用される歪みメッシュは、これらの位置合わせ誤差を補正しうる。別の例として、不整合はLEDパネルの方向によって生じることがある。例えば、第1のLEDパネルは、同じ複合パネル(または複合画像)内の第2のLEDパネルと比較したときに、回転を示すことがある。この効果は、「クロッキング」と呼ばれることがある。ディスプレイエンジンによって適用される歪みメッシュは、回転不整合から生じる位置決め誤差を補正することができる。このアプローチは、重大なハードウェア不整合誤差を補正し、製造コストおよび許容誤差に対する要件を大幅に単純化することができる。したがって、歪みメッシュは、レイキャスタ310によって送られる光線の角度を変えて、いかなる原因であっても、ダイ不整合の効果を打ち消すのに十分なようにリダイレクトすることができる。特定の実施形態では、不整合は使用に伴って著しく変化することはないと仮定できるため、この効果は、製造中に較正されてもよい。
別の歪みは、ディスプレイ170内のLEDの位置に関する。必要な数のLEDを組み込み、品質を最大化するために、LEDの奇数列および偶数列は、ディスプレイの垂直軸に沿ってわずかに異なる位置に配置されてもよい。この歪みを「奇数/偶数列歪み」と呼ぶ。ダイ不整合と同様に、この特定の歪みを歪みメッシュで補正して、効果を打ち消すことができる。LEDの奇数列および偶数列の垂直方向の位置合わせは、使用しても変化しにくいので、歪みメッシュは較正手順中に生成されてもよい。
また、歪みは、可変焦点レンズに対応するように調整されたシミュレートされたレンズの焦点を調整することによって導入されてもよい。特定の実施形態では、ヘッドマウントディスプレイユニット170のディスプレイ170は、可動プラットフォーム上に取り付けられてもよい。これにより、ディスプレイ170は、ユーザの焦点面がシフトするにつれて調整が可能となり、ディスプレイの忠実度およびユーザの快適性を改善することができる。ただし、ディスプレイが移動すると、以前に計算された歪みメッシュで補正された効果がシフトすることがありうる。そのため、ディスプレイの移動のたびに、歪みメッシュの調整が必要になることがある。同様に、スキャニングディスプレイ内の光学システムは、同じ効果を生み出すように変更されてもよく、同様の解決策を必要とする。さらに、焦点面を変化させると、それ自体の歪みが発生する可能性があり、これは歪みメッシュによって補正されうる。
ディスプレイを見ている間の眼の動きによって、別のタイプの歪みが引き起こされることがある。眼は素早く動き、シーン内のユーザの視界をシフトさせることがある。素早い眼球運動によって、眼で検出された画像が引き裂かれることがあるため、歪みが引き起こされることがある。この効果は、少なくとも、眼球運動に基づく歪みが、ディスプレイだけではなく、見ている眼自体における効果に基づきうるという点で、ローリングシャッタ効果とは異なる。上述のように、ヘッドマウントディスプレイユニット130は、視線追跡カメラおよび付属のソフトウェアを含む視線追跡コンポーネントを備えてもよい。視線追跡情報は、制御ブロック200または変換ブロック300に渡されてもよい。視線追跡情報は、例えば、眼の加速度を検出することによって、眼の動きを予測し、ユーザが経験しうる歪みの程度を決定するために使用されうる。素早い眼球運動の幾何学的歪み効果に対抗する歪みメッシュを計算することができる。
上述の幾何学的歪み、および任意の他の幾何学的歪みを補正するために、変換ブロック300のメッシュワープブロック320は、光線に1つまたは複数の歪みメッシュを適用して、人工現実シーンへの光線の軌跡を定義することができる。特定の実施形態では、歪みメッシュはあらかじめ計算され、変換ブロック300のワープメモリ325に記憶される。歪みメッシュは、メッシュワープブロック320が適用されるたびに歪みメッシュを生成しないという意味で、事前に計算されている。代わりに、これらは、様々な入力に基づいて、1つまたは複数の他のコンポーネントによって生成されてもよい。いくつかの歪みメッシュは、較正手順の間など、1回あるいはは少なくともまれにしか計算する必要がないという意味で、静的でありうる。例えば、ダイ不整合または奇数/偶数列の歪みを修正する歪みメッシュを生成するためには、正確な歪みの度合を一回だけ決定する必要があるが、これは、デバイスが使用されるにつれて歪みが大きく変化する可能性が低いからである。他の歪みは、使用に基づいてあらかじめ計算され適用されたメッシュの集合を使用して補正することができる。例えば、レンズまたはスキャニング歪みを補正するための歪みメッシュ、またはローリングシャッタによって導入された歪みをあらかじめ計算することができ、メッシュワープブロック320または変換ブロック300の別の適切なコンポーネントは、使用する適切な歪みメッシュを選択してもよい。
他の歪みメッシュは、フレームが一次レンダリングコンポーネント120によってレンダリングされるたびに、ディスプレイエンジン150によってレンダリングされるフレームごとに1回、あるいは、場合によってはさらに頻繁に、更新される必要がありうるという意味で、動的にありうる。例えば、可変焦点レンズのレンズの動きを修正するために導入される歪みは、可変焦点レンズが調節されるときはいつでも更新が必要となることがある。特定の実施形態では、歪みメッシュは、特定のレンズ構成(例えば、最も近い可能な位置に1つ、最も遠い位置に別の1つ)についてあらかじめ計算されてもよい。レンズの実際の位置(可変焦点レンズのレンズ調整コントローラから入手可能なデータ)に基づいて、ピクセル当たりの歪み値は、あらかじめ計算された最も近い位置および最も遠い位置の歪みメッシュによって指定されるように、当該のピクセルについてあらかじめ計算された歪み値を補間することによって計算されうる。次いで、補間された歪み値は、光線が投射されるときに光線を歪ませるために使用されうる。動的歪みメッシュのもう1つの例は、眼の動きによって生じる歪みを補正するために使用される。ユーザの眼がディスプレイ(例えば、左眼ディスプレイ170および右眼ディスプレイ170)に対して移動するにつれて、各ディスプレイに対する歪みメッシュは、眼の動きまたは焦点シフトが検出されるたびに更新される必要がありうる。各歪みメッシュに対する調整は、ディスプレイに対するユーザの眼の凝視に基づいて計算されてもよい。
特定の実施形態では、これらの歪みメッシュの各々は、計算され、ワープメモリ325に記憶されうる。これらはまた、単一の歪みメッシュに結合され、ワープメモリ325に記憶されてもよい。特定の実施形態では、歪みメッシュは、制御ブロック200のマイクロコントローラ230によってワープメモリ325にロードされる1つまたは複数のルックアップテーブルから構成されうる。ルックアップテーブルは、タイルの個々のピクセルに対応する光線の歪みの程度を指定する1つまたは複数のエントリを含みうる。例えば、ルックアップテーブルの値は、タイルのコーナーピクセルに対応する光線の歪みの程度を指定することができる。ワープブロック320は、これらのコーナーの値から、内部光線または光線束全体に適用される歪み値を補間することができる。別の例として、ルックアップテーブルの値は、タイル内のすべてのピクセルに対応する光線の歪みの程度を指定することができる。次に、ワープブロック320は、ワープメモリ325から読み出された光線の歪み値を適用することができる。特定の実施形態では、ルックアップテーブルは、単一のカラーチャネルに対応する光線束の歪み値を指定し、他の色に対応する光線束の歪み値からのカラーオフセットを指定する。例えば、ルックアップテーブルは、緑のカラーチャネルの光線束の歪み値を指定することができる。緑の歪み値からのオフセットは、赤および青のカラーチャネルについても指定されうる。したがって、歪みメッシュ値は、ワープメモリ325から一度取り出され、3つの光線束に適用されてもよい。いくつかの実施形態では、メッシュワープブロック320は、適用される歪みメッシュまたはメッシュを直接計算することができる。本開示は、特定の方法で歪みメッシュについて説明しているが、本開示は、歪みメッシュの任意の適切な方法を想定している。
変換ブロック300の境界比較ブロック330では、ワープ後の光線束がシーンに投射され、光線束に対応するタイルがシーン内のサーフェスと交差するかどうかが決定される。特定の実施形態では、一次レンダリングコンポーネント120から制御ブロック200によって受信されたサーフェスは、規定された境界または境界関数(例えば、サーフェスの1つのコーナーに対するビュー空間における最小のx座標およびy座標、反対のコーナーに対するビュー空間における最大のx座標およびy座標)を使用してサーフェスの寸法および位置を指定してもよい。各サーフェスの境界情報は、制御ブロック200によってあらかじめ計算され、変換ブロック300の境界メモリ335に記憶されてもよい。タイルがサーフェスと交差するかどうかを決定するために、光線束はサーフェスが配置されているビュー空間を横断することがある。特定の実施形態では、各光線束は、それぞれの境界が交差するかどうかを決定するために、各サーフェスに対して1つずつテストされる。特定の実施形態では、シーンのサーフェスは、深さ方向に記憶され、視点により近いサーフェスは、より近いサーフェスとの交差が最初にテストされるように、データ構造内で最初に設定される。光線束がシーンを通過する際に、各サーフェスの境界を投影された光線束の境界と比較することができる。この境界比較を実行する際に、他の効率が使用されてもよい。光線束がどのサーフェスとも交差していないと決定された場合には、光線束は破棄されてもよく、対応するタイルは、デフォルト値または同等であることを示すフラグと関連付けられてもよい。デフォルト値は、指定された背景テクスチャ、単色、無色、任意の他の適切なデフォルト値、またはこれらの任意の組み合わせであってもよい。タイルがサーフェスと交差したと決定された場合には、タイル-サーフェスペア(例えば、タイルの識別子とサーフェスの識別子)が変換エンジン340に渡される。タイル-サーフェスペアと交点の座標は、ビュー空間座標系で指定されてもよい。
変換ブロック300の変換エンジン340は、タイル-サーフェスペアにおけるタイルの座標を、ビュー座標空間(例えば、視聴者に対する3D座標空間)から、サーフェスのテクスチャ座標空間(例えば、テクスチャ内の2D座標空間)に変換する。レンダリングパイプラインにおける座標の共通理解では、変換エンジン340は、変換メモリ345に記憶された座標空間情報を使用して、タイルがサーフェスと交差する場所の座標を、ビュー空間(例えば、(x,y)座標)からサーフェスのテクスチャの(u,v)座標に変換する。例えば、変換エンジン340は、タイルの4つのコーナーをサーフェス座標空間に変換することができる。いくつかの実施形態では、変換エンジン340は、変換を直接計算してもよい。タイル-サーフェスペア395に関連するデータは次に、それぞれのピクセルブロック400に渡される。タイル-サーフェスペアをピクセルブロック400に渡す際には、変換ブロック300は、(x,y)座標から(u,v)座標への変換値(差分値を含む)、他の色の光線束の交差位置に関するテクスチャ空間内のオフセット値(例えば、指定された絶対(u,v)座標が緑のコンポーネントのためのものである場合、緑に対して定義された、赤のためのuとvのオフセットおよび/または青のためのuとvのオフセットに関する追加情報も送ることができる)、行のすべてのタイルが処理されたことを示す行の終わりフラグ、任意の他の適切なパラメータ、あるいは、これらの任意の組合せ、を含む追加のパラメータを渡すこともできる。本開示は、特定の方法で座標変換について説明しているが、本開示は、座標変換の任意の適切な方法を想定している。
ピクセルブロック400は、タイル-サーフェスペア395を変換ブロック300から受信し、各タイル内のサンプル位置でバイリニア補間を行い、タイル内の各ピクセルについてのピクセルカラー値を決定することができる。例示的なピクセルブロック400のアーキテクチャを図5に示す。ピクセルブロック400は、データを受信してバイリニア補間を予定するバッファマネージャ410を含むことができる。ピクセルブロックは、カラー値の各コンポーネントに対するカラーフィルタブロック、例えば、赤フィルタブロック420、緑フィルタブロック430、および青フィルタブロック440を更に含むことができる。3つのカラーコンポーネントは、少なくとも色収差の可能性のために、別々に処理されてもよい。図5に示す例示的なピクセルブロックでは、バッファマネージャ410は、特定のメモリアドレスを参照することによって、テクセルメモリ220に読み出し要求415を発行することができる。テクセルメモリ220は、フィルタブロック420、430、440のテクセルバッファ422、432、442に、それぞれ、対応するデータ(例えば、それぞれ16ビットサイズの16テクセルに対応する、クロックサイクル当たり256ビットの単位で)をロードすることができる。特定の実施形態では、フィルタブロックは、テクセルメモリ220、または図5に示されていないピクセルブロック400の他のコンポーネントから随意に読み出すことができる。
図5のピクセルブロックでは、バッファマネージャ410は、変換ブロック300から、タイルが交差するサーフェスを示すタイル-サーフェスペア395を受信することができる。補間のためのサンプルをスケジューリングする前に、バッファマネージャ410は、関連するサーフェスデータ(すなわち、テクセルメモリ220からのテクセルアレイの関連部分およびカラーチャネル)を、赤フィルタブロック420、緑フィルタブロック430、および青フィルタブロック440の各々の内部のバッファにロードすることができる。バッファマネージャ410は、変換ブロック300によって決定されるように、各カラーコンポーネントについて、投影されたタイルとサーフェスとの間の交点を包含するテクスチャ空間内の控えめな(conservative)境界ボックスを計算することによって、どのテクセルアレイが関連するかを決定することができる。次に、これらの境界ボックスを使用して、3つのフィルタブロック420、430、440のいずれかがサーフェスのテクセルアレイのどの部分を必要とするかを決定する。バッファマネージャ410は、適切なメモリアドレス415を参照することによって、サーフェスのテクセルアレイの必要な部分をテクセルメモリ220に要求する。テクセルメモリ220は、関連するフィルタブロックのテクセルバッファ422、432、442に必要な部分をロードする。特定の実施形態では、テクセルバッファ422、432、442にロードされるデータの必要な部分は、タイル内の各サンプル位置に対する色を(例えば、バイリニア補間により)決定するのに十分であろう。例えば、32×32テクセルに関連する適切なカラーデータは、対応するカラーフィルタブロック420、430、440にロードされる。
色収差を含む特定の歪みに応じて、バッファマネージャ410は、フィルタブロック420、430、440のニーズを満たすために、テクセルメモリ220から1つまたは複数の個別の要求を行うことが必要な場合がある。最小の色収差を有する場合には、テクセルメモリ220からの(例えば、16テクセルの16ビットカラー情報に対応する256ビットワードの)1回の読み出し要求が、3つのフィルタブロック420、430、440のすべてで使用されてもよい(例えば、読み出しデータは、これらの各バッファに並列にロードされてもよい)。大きな色収差(例えば、16ピクセルを超える)を有する場合、バッファマネージャ410は、それらのニーズに応じて、フィルタブロック420、430、440のためのテクセルアレイの個別の組を要求することが必要な場合がある(例えば、バッファマネージャ410は、3つのフィルタブロックのための3つの別個の読み出し要求をそれぞれ実行することが必要な場合がある)。したがって、色収差は、テクセルメモリ220から必要とされる読取り帯域幅の最大3倍のばらつき(variance)を引き起こすことがある。変換ブロック300のレイキャスタ310は、高い色収差が予測される(例えば、スクリーンのエッジに沿った)タイルを、低い色収差が予測されるタイル(例えば、スクリーンの中心付近のタイル)でインタリーブするため、この変動が制御され、テクセルメモリ220およびピクセルブロック400の帯域幅の必要性が均等にされるか、負荷分散される。これは、ピクセルブロック400をビジーに保つために必要なメモリ帯域幅を減少させる。本開示は、特定の方法でバッファマネージャについて説明しているが、本開示は、任意の適切なバッファマネージャを想定している。
特定の実施形態では、所与のタイル-サーフェスペアに対して、バッファマネージャ410は、フィルタリングを開始させる前に、タイル内の各サンプル位置に必要なサーフェスデータの一部をロードしてもよい。特定の実施形態では、これは、そのタイル-サーフェスペアのサンプルを処理する前に、タイルに必要なすべてのテクセルをロードすることによって行うことができる。そうするための例示的な工程は、以下の通りであってよい。タイル-サーフェスペアに関連付けられたデータが与えられると、ピクセルブロック400は、各カラーコンポーネントのための投影タイルがテクスチャ空間内のサーフェスと交差する場所について、控えめな境界ボックスを計算することができる。3つのテクセルバッファ422、432、442のすべてにおいて空間が利用可能になると、バッファマネージャ410は、テクセルメモリ220から読み出し要求を発行して、タイル内のサンプル位置(例えば、16×16サンプル)のカラー値を決定するのに必要なテクセルデータを取得することができる。特定の実施形態では、境界ボックス内の必要なデータ(例えば、32×32テクセル)は、4×4テクセルの組の順次読み出しによって取得される。次に、取り出された4×4テクセルの各組は、カラーサンプリングのために4×4テクセルの特定の組を必要とする各フィルタブロックのテクセルバッファにロードされてもよい。
各タイルに対するカラーサンプリングは、サンプルステッパブロックによって管理されてもよい。変換ブロック300からのタイル-サーフェスデータ395に基づいて、サンプルステッパブロックは、特定の色(例えば、緑色)についての投影タイルのコーナーがサーフェスと交差する場所の(u,v)テクスチャ座標を決定することができる。投影タイルの実装面積(コーナーの(u,v)座標で定義される)内で、サンプルステッパは、補間(例えば、テクスチャ座標空間内でワープされた投影タイルが、平行四辺形である必要はないインクリメンタルバイリニア補間)をコーナー座標に適用することによって、タイル内の複数(例えば、16×16)のサンプル位置((u,v)テクスチャ空間で指定される)を決定することができる。次いで、サンプルステッパは、16×16サンプルを通過し、(スクリーン空間内の2×2ブロックのピクセルに対応する)2×2ブロックのサンプルのためのフィルタコマンドを発行してもよい。4つのサンプルは、並列にフィルタリングされてもよい。各サンプルに対するフィルタリングは、バイリニア補間または点サンプリングを使用して実行されてもよい。
特定の実施形態では、赤フィルタブロック420は、その内部バッファに記憶されたサーフェスおよびタイルデータによってバイリニア補間を実行する。サーフェスに対応するテクセルアレイは、テクセルメモリから受信され、1つまたは複数のテクセルバッファ422に記憶されてもよい。テクセルバッファ422は、関連する(u,v)座標の値をシフトすることによって、テクセルアレイ内のテクセルを分割することができる。テクセルデータは、テクセルメモリ220からの読み出しがテクセルバッファ422に書き込まれると、テクセルデータがテクセルの整列されたブロックに分割されるように、テクセルメモリ220に記憶されてもよい。テクセルデータは次に、各テクセルバッファ422に記憶され、補間のために整列されたテクセルの任意のブロックを提供する。4つの整列されたピクセル位置は、1つまたは複数のピクセルバッファ424からサンプリングすることによって、並列にサンプリングされてもよい。ピクセルバッファ424は、テクスチャ空間(例えば、(u,v)座標)内のタイルからサンプル位置の2×2ブロックを生成する。テクセルバッファ422およびピクセルバッファ424は、バイリニア補間を実行するために使用される。バイリニア補間は、ディスプレイブロック500へのピクセル出力595の一部として提供される、赤のピクセルカラー値427の2×2ブロックをもたらしうる。
特定の実施形態では、(例えば、バイリニア補間の代わりに単一点サンプリングを使用して)品質ではなく、速度を最適化するため、あるいは電力消費を低減するため、付加的な方策が採用されてもよい。バイリニア補間のための他の最適化も想定される。例えば、バッファマネージャ410は、(変換ブロック300によって供給される)サブタイルを使用して、タイル位置がサーフェスと交差しないこと、したがって、その位置においてバイリニア補間が必要でないと決定することができる。赤フィルタブロック420は、結果として得られるピクセルカラー値427を、ディスプレイブロック500のための指定されたメモリ位置に出力する。緑フィルタブロック430および青フィルタブロック440は、ピクセルバッファ434および444にそれぞれ記憶された同じピクセル値を用いて、それぞれのカラーチャネルに関して、テクセルバッファ432および442にそれぞれ記憶されたテクセル値に演算を行うことによって、本質的に同じように機能する。緑フィルタブロック430は、緑ピクセルカラー値437をディスプレイブロック500に出力してもよい。青フィルタブロック440は、青ピクセルカラー値447をディスプレイブロック500に出力してもよい。バッファマネージャ410は、テクセルメモリ220からの読み出しを低減するために、フィルタブロック間の情報(アルファカラーチャネル値など)の共有をサポートしてもよい。本開示は、特定の方法でバイリニア補間について説明しているが、本開示は、バイリニア補間の任意の適切な方法を想定している。
特定の実施形態では、アイトラッカーは、制御ブロック200を介して、ユーザの焦点または凝視点をディスプレイエンジン150に報告する。ピクセルブロック400は、この情報を使用して、ユーザの焦点から離れたピクセルカラー値よりも高い忠実度でユーザの焦点に対応するピクセルカラー値を生成することができる。この技術は、中心窩レンダリングとして知られている。中心窩レンダリングにより、ディスプレイエンジン150は、すべてのピクセルカラー値を同じ忠実度でレンダリングするのではなく、ユーザが気付く可能性が高いピクセル位置を優先することで、とりわけ、レンダリング時間、エネルギーコストを節約し、熱生成を低減することができる。ピクセルブロック400は、実行されている中心窩レンダリングのタイプに基づいて、複数の種類の中心窩パターンを生成することができる。例えば、そのようなパターンの1つは、中心窩リングと呼ばれるもので、ピクセル位置に明確な品質遷移点が存在し、焦点から遠くに移動する。ピクセルブロックは、これらのリング間で必要とされる品質レベルを補間しうる。ピクセルブロックは、結果として得られるパターンを8ビット中心窩パターン450としてディスプレイブロックに出力し、そのパターンを中心窩パターンメモリ525に記憶することができる。本開示は、特定の方法で中心窩レンダリングについて説明しているが、本開示は、任意の適切な方法での中心窩レンダリングを想定している。
特定の実施形態では、ディスプレイブロック500は、ピクセルブロック400からピクセルカラー値495を受信し(例えば、タイルバッファに蓄積され)、ピクセルカラー値495に1つまたは複数の輝度補正を適用し、ディスプレイ170へ出力するためピクセルカラー値495を準備する。ピクセルカラー値495がディスプレイブロック500によって受信されると、それらは、タイル順に、例えば、整列された赤、緑、および青のカラー値の2×2ブロックで受信されてもよい。これは、ピクセルブロック400が、次のタイル上に移動する前に、1つのタイル内の2×2ピクセル(16×16ピクセルを含んでもよい)について、ピクセルカラーを順次出力してもよいからである。ディスプレイ170(スキャニングディスプレイであってもよい)によって使用されるピクセルカラー値495を出力するために、ピクセルカラー値495は、スキャンライン順に読み出されてもよい。また、ディスプレイブロック500は、1つまたは複数の輝度補正をピクセルカラー値495に適用して、表示品質をさらに向上させてもよい。ディスプレイブロック500の例のアーキテクチャを図6に示す。
表示のためにピクセルカラー値495を準備する第1のステップは、ピクセルブロック400から受信したピクセルカラーデータ495を一連の行バッファ500に記憶することである。行バッファ500は、ピクセルバッファメモリ510、ワードおよびタイルメタデータメモリ515、ならびに中心窩パターンメモリ525を含む。ピクセルバッファメモリ510は、ディスプレイ170の全幅に対して2行のタイルを保持する。例えば、各タイルが16×16ピクセルであり、ディスプレイが2560ピクセル幅である構成では、ピクセルバッファメモリ510は32×2560ピクセルを保持する。ピクセルバッファメモリ510の構成は、ディスプレイ170の特定のスキャンライン方向に応じて変化してもよく、例えば、スキャンライン方向が垂直であり、高さが1440ピクセルである場合、ピクセルバッファメモリは、1440×32ピクセルを保持しうる。ピクセルバッファメモリ510内の各ピクセルは、36ビットカラー値(例えば、赤、緑、および青のカラーチャネルのための12ビット値)によって表されてもよい。特定の実施形態では、ピクセルバッファメモリ510は、ピクセルブロック400によって計算されたフルカラー精度を記憶してもよい。特定の実施形態では、ピクセルバッファメモリ510は、ピクセルバッファメモリ510のメモリ要件を低減するために、知覚符号化などの圧縮を使用する。行バッファ505は、ワードおよびタイルメタデータメモリ515を含みうる。メタデータメモリ515は、ピクセルブロック400から受信したメタデータをピクセルカラー値495に、または別個の出力として記憶することができる。メタデータは、ピクセルブロック400によって書き込まれなかったピクセルのブロック、またはカラー値を含まないタイルを示すことができ(例えば、タイルから投射された光線束がサーフェスと交差しなかったため)、これは、ピクセルカラー値が生成されなかったために表示される必要のないピクセル上の無駄な帯域幅および/または計算を低減することができる。行バッファ505はまた、ピクセルブロック400によって生成され、ピクセルバッファメモリ510内のタイルに関連付けられた8ビット中心窩パターン450を記憶する中心窩パターンメモリ525を含むことができる。
特定の実施形態では、行バッファ505は、タイルの2つの行(例えば、16×16ピクセルを表す各タイル)、関連するメタデータ、および中心窩パターンをそれぞれ記憶するように構成されたダブルバッファを有する。ピクセルブロック400は、他のバッファ内のピクセルがディスプレイ170に出力されている間に、1つのバッファに書き込むことができる。出力が完了すると(例えば、現在の出力バッファ内のすべてのピクセルが出力されると)、ディスプレイブロック500は、2つのバッファの役割を交換することができる。例えば、ピクセルを出力するために以前に使用されたバッファは、ここで書き込まれ、新しいピクセルデータを受信するために以前に使用された他のバッファは、これらのピクセルをディスプレイに出力する。
特定の実施形態では、ピクセルカラー値495は、整列されたピクセルの2×2ブロックでピクセルブロック400から受信される(例えば、タイルバッファに蓄積される)。ディスプレイブロック500は、2×2ブロックの整列された対を、ピクセルバッファメモリ510への単一の4×4書き込みに統合する。ピクセルブロック400から2×2クワッドの高いスループットがある場合、これらは通常、整列されたペアである。これにより、単一のメモリアクセスポートは読み出しと書き込みの両方に使用可能となる。
ピクセルバッファメモリ510内のメモリは、データがタイル順に書き込まれ、行順に読み出されるように配置されてもよい。ピクセルカラーデータは、8×1ピクセルでピクセルバッファメモリから輝度補正ブロック540に読み出される。ピクセルバッファメモリ510は、2つのバンク、すなわちバンクAおよびバンクBに編成することができる。偶数行では、バンクAは最初の4つのピクセルを記憶し、バンクBに4つのピクセルが続き、以下同様となる。奇数行では、最初の4つのピクセルがバンクBに記憶され、続いて4つのピクセルがバンクAに記憶され、以下同様となる。その結果、各整列された4×2書き込みおよび各整列された8×1読み出しは、バンクAからの4×1ピクセルおよびバンクBからの4×1ピクセルにアクセスする。このメモリ書き込みおよび読み出しパターンは、ピクセルバッファメモリ510をタイル順書き込みから行順読み出しに変換する。本開示は、特定の方法でピクセル順序を変換することを説明しているが、本開示は、任意の適切な方法でピクセルカラー順序を変換することを想定している。
ピクセルシーケンサ530は、メタデータメモリ515からタイル有効性データを読み取ることができる。ピクセルシーケンサ530は、ピクセルカラー値がピクセルバッファメモリ510から読み出される順序を決定することができる。特定の実施形態では、ピクセルシーケンサ530によって、8×1ピクセルは処理のために輝度補正ブロック540に読み込まれてもよい。8×1ピクセルは、クロックサイクルあたり2つのピクセルが読み出されてもよく(例えば、各ピクセルが3つの12ビットカラーチャネルデータを有する場合、クロックサイクルあたり72ビットが読み出されるであろう)、これは輝度補正ブロック540に読み出される8×1ピクセルに対して、合計4つのクロックサイクルが使用されうることを意味する。
特定の実施形態では、ピクセルシーケンサ530は、ピクセル指向モードで動作してもよい。このモードでは、すべてのピクセルがピクセルバッファメモリ510から読み出され、輝度補正ブロック540に送られる。このピクセル指向モードでは、ピクセルシーケンサ530によって、16個のピクセルカラー値のブロックは、ピクセルバッファメモリ510内の2つの異なる位置から、交互に読み出される。最初に、ピクセルシーケンサ530によって、16個のピクセルカラー値は、行の開始位置のタイルから輝度補正ブロック540へ読み出される。次に、ピクセルシーケンサ530によって、16個のピクセルカラー値は、行の中央から始まるタイルから読み出される。行全体が読み出されるまで、これら2つの開始位置から交互に行う。ピクセル指向モードは、スキャニングディスプレイ装置のためにディスプレイ170によって使用されるピクセルカラー値ロードパターンを収容するために、この順序を使用してもよい。
特定の実施形態では、ピクセルシーケンサ530は、タイル指向モードで動作してもよい。このモードでは、ピクセルシーケンサは、ピクセルバッファメモリ510から読み出されたピクセルカラー値に対応するワードおよびタイルメタデータメモリ515からタイル有効性メタデータを読み出し、メタデータに従って有効とマークされたタイルに対応するピクセルカラー値だけが輝度補正ブロック540に読み込まれるようにする。特定の実施形態では、ワードおよびタイルメタデータメモリ515は、行内のタイルのタイル有効ビットを記憶するために、特定のメモリアドレスを指定することができる。例えば、各タイルが16×16ピクセルで、かつディスプレイが2560ピクセル幅である構成では、1行に160個のタイルがある。このように、メタデータメモリ515は、160ビットを指定して、それらの対応するタイルが有効であるかどうかを示すことができる。160個のタイル有効性ビットは、そこに記憶されたビットが読み出されるときに(例えば、「偽」または「0」のバイナリ値で)クリアされてもよい。次いで、各タイル有効性ビットは、そのタイル有効性ビットに関連付けられたタイルに対応するピクセルバッファメモリ510に任意のピクセルデータが書き込まれるときに、「有効」(例えば、「真」は「1」のバイナリ値)として設定されてもよい。例えば、2×2ピクセルブロックが160タイルの行の10番目のタイルに関連する場合、対応するタイル有効性ビットは、その2×2ピクセルブロックがピクセルバッファメモリ510に書き込まれるときに「真」に設定される。タイルのピクセルデータがピクセルバッファメモリ510にロードされない場合には、そのタイルのタイル有効性ビットは「偽」の値を保持する。
特定の実施形態では、ピクセルシーケンサ530は、一度に1行ずつピクセルデータを処理しうる。タイルの行(例えば、160タイル)がピクセルバッファメモリ510にロードされた後、ピクセルシーケンサ530は、タイルの行の開始から終了までの順序で、ワードおよびタイルメタデータメモリ515および中心窩パターンメモリ525にそれぞれ格納されたタイル有効性および中心窩パターンデータなどのすべてのメタデータを読み取ることができる。これらの値は、集められ、ピクセル出力ブロック550に送られ、その結果、下流のデバイス(例えば、ディスプレイ170および/またはフィールドプログラマブルゲートアレイ)は、どのタイルが有効または無効であるかを知り、それに応じて、入力ピクセル値を整理することになろう。例えば、ピクセル出力ブロック550が、1クロックあたり72ビットを送信するように(例えば、2ピクセル分のデータがクロック毎に送信されうるように)構成されている場合、ピクセルシーケンサ530は、8つのタイルのメタデータを(例えば、タイル有効性のための1ビットおよび8ビット中心窩パターンを含む、1タイルあたり9ビットのメタデータを用いて)アセンブルし、アセンブルされたデータをディスプレイ170または他のダウンストリームデバイスに送信するようにピクセル出力ブロック550に命令することができる。ピクセルシーケンサ530は、160個のタイルのうちのどれが有効であり、どれが有効でないかをダウンストリームデバイスが知るように、160個のタイルすべてに対するメタデータが送信されるまで、このプロセスを繰り返すことができる。次いで、ピクセルシーケンサ530は、ピクセルカラー値(例えば、一度に2つのピクセルまたは72ビット)が、ピクセルバッファメモリ510から明るさ補正ブロック540に読み込まれるようにする(例えば、ピクセルシーケンサ530は、明るさ補正ブロック540に、どのピクセルをピクセルバッファメモリ510から読み出すかを通知してもよい)。しかしながら、有効とマークされたタイルに対応するピクセルカラー値に対してのみこれを行う。処理された後、ピクセルデータは下流の装置に出力される。下流の装置は、どのタイルが有効または無効であるかを知っているため、それに応じて入力ピクセルデータを編成することができる。例えば、タイル有効性データは、第1のタイル(各々16×16ピクセルを表す)が無効であり、同じ行内の次のタイルが有効であることを示す場合、下流の装置は、それが受け取る16ピクセルの第1の組が、第1のタイル(無効タイル)ではなく第2のタイル(有効タイル)に属することを理解する。本開示は、特定の方法でピクセルシーケンサについて説明しているが、本開示は、任意の適切なピクセルシーケンサを想定している。
輝度補正ブロック540は、ピクセルカラー値がピクセル出力ブロック550に送られる前に、ピクセルカラー値に1つまたは複数の輝度補正およびディスプレイ調整を適用する。これらのディスプレイ調整には、歪みを修正するためのディザリング、中心窩処理(foveation)、知覚符号化、あるいはは1つまたは複数の輝度補正メッシュが含まれる。特定の実施形態では、輝度補正メッシュは、フレーム全体、ピクセル(例えば、タイル)の行または整列されたブロックなどのフレームのサブセクション、個々のピクセルカラー値、またはこれらの任意の組み合わせに基づいて最適なカラー値を生成するように選択される各ピクセルカラー値に対するスカラー値を含んでもよい。
輝度歪みの1つのタイプは、導波管補正として知られている。特定の実施形態では、ディスプレイ170に使用されるレンズ、例えば、スキャニングディスプレイの光学系のレンズは、レンズの面全体にわたって滑らかなばらつきを示すことがある。この効果は、スキャニングディスプレイのエミッタとして使用されうるLEDパネルにも見られる。したがって、ユーザがディスプレイの異なる部分を見るとき、レンズのばらつきは、眼の動きによって導入される他の歪みを考慮しても、輝度のわずかな変化を引き起こすことがありうる。レンズ面全体にわたる滑らかなばらつきは、使用時には変化しにくいため、このタイプの歪みは、事前に測定して、較正することができる。しかしながら、スキャニングディスプレイ装置を含む特定のディスプレイでは、熱が、大幅な熱塑性変形によって、レンズにさらなるワーピングを引き起こすことがある。導波路補正を適用するための輝度補正メッシュは、あらかじめ(例えば、較正手順中に)計算されてもよく、あるいは、他の何らかの熱の効果が検出されるときに、動的に計算されてもよい。
別のタイプの輝度歪みは、LED列補正として知られている。特定の実施形態では、ディスプレイ内のLEDの各列の輝度、またはスキャニングディスプレイのエミッタ内のLEDは、わずかに変化しうる。言い換えるならば、(少なくともこの効果で測定される)輝度は、ディスプレイを垂直に横切るときは一定であるが、ディスプレイを水平に横切るときは列ごとに異なることがある。典型的には、多くのLEDパネルがこの効果を示しうるが、LEDは相当に高い密度で詰め込まれ、かつ、相当に離れた距離から観察すると、眼は輝度レベルを混合するため、このばらつきを検出することは困難になりうる。ヘッドマウントディスプレイは、ユーザに極めて近接しているので、このばらつきはより容易に検出されうる。したがって、LEDの各列は、ユーザに示される画像が変化する列輝度レベルをマスクするように補正を必要とする場合がある。実施しうる補正に対する1つのアプローチは、各列を示された最大値または最小値に合わせて拡大縮小すること、すなわち、最も明るい列または最も暗い列に合わせて拡大縮小することである。LEDパネルに損傷がなければ、輝度のばらつきが時間とともに大きく変化する可能性は低いため、この補正は較正手順中に決定可能である。
別のタイプの輝度の歪みは、電力と色の指示が与えられたときに、LEDがどのように発光するかに関連している。ディスプレイエンジンは、高いフレームリフレッシュレートを可能にするように構成されるため、LEDのパルスオフセットによって導入される遅延に注意を払わなければならない。LEDのパルスオフセットとは、LEDに電力が供給されてから、LEDが最高輝度になるまでの時間量を意味する。LEDが最高輝度から完全に電源が切れるまでの時間量も同様に考慮される。一部のLEDでは、これはオフから最高輝度まで正弦曲線に従うが、他のパターンも想定される。特定の実施形態では、輝度補正メッシュの較正の難しさを軽減するため、各LEDがほぼ同様のパルスオフセット時間を有すると仮定してもよい。しかしながら、いくつかの実施形態では、パルスオフセットは、例えば、表示されるべき特定の色、製造上の差(許容誤差内であっても)、ディスプレイ内のLEDの位置、および多くの他の要因に応じて、異なる場合がある。しかしながら、この輝度補正は、効果が使用に伴って大幅に変化することはないため、静的に計算できる可能性が高い。
発生しうる別の輝度の歪みは、ピクセルカラー値に関する情報がどのように表現されるか、そして具体的には、輝度値がどのように記憶されるかに関係する。特定の実施形態では、個々のLED(またはそのドライバ)は、8ビットまでの色輝度情報を受け入れ、色輝度における幅広い表現を可能にする。ディスプレイエンジン150は、表示用のフレームを高速かつ効率的に処理することを目的としており、いくつかの実施形態では、ピクセルカラー値は、完全な8ビットの色輝度情報(例えば、最大256の異なる輝度値)を含むことができない場合がある。例えば、生成されるピクセルカラー値は、5ビットの色輝度情報(例えば、最大32の異なる輝度値)のみを含み、可能な輝度値の87.5%減となることがある。したがって、輝度値をシフトして、可能な値のより繊細な表現にするため、歪みメッシュが必要となることがある。このメッシュは、あらかじめ計算されうるが、ピクセルカラー値の表現フォーマットに基づいて変化することがある。ディスプレイエンジンは、表現の範囲との互換性を想定しているため、同じフレームまたは行のピクセルに対してさえ、複数の輝度補正メッシュを決定する必要がありうる。
輝度補正メッシュが適用されうる他の効果は、付加的な画像後処理技術に関する。そのような技術の1つがディザリングである。ディザリングは、信号の値を平滑化する目的で、信号にランダム化フィルタを適用することを含む。画像処理では、輝度と色の彩度値を滑らかにするため、ディザリングが使用されることがある。形式的には、ディザリングは、少ない情報で色を表現しようとすることで生じる色の輝度の量子化を滑らかにする。これにより、色や輝度のバンディングなど、特定の種類のパターンが画像内に生じるのを防止する。ディザリングはまた、色分布の滑らかさも改善しうる。多数のディザリングアルゴリズムが考案され、輝度補正メッシュで実現可能となっている。輝度補正メッシュは、表示のために準備されているフレーム(またはフレームの一部)に基づいて決定されてもよい。例えば、1つの色が他の色よりもかなり大量にあるフレーム、あるいは、多数の異なる色ではなく、類似の色がかなり大量にあるフレームに対しては、様々な程度のディザリングが必要となることがある。
別の後処理補正は、sRGBまたは知覚圧縮として知られている。人間の眼は線形の物体では輝度を感じない。すなわち、2つの輝度レベル間で知覚される輝度のばらつきは、必ずしも輝度の実際のばらつきと等しくはならない。特に、人間の眼は、明るい色よりも暗い色をより明確に識別するようにできている。これに関連して、輝度に関して所望の知覚変化が起こるようにするためには、人間の眼は輝度の初期値に応じて、実際の輝度の異なる変化に曝されることが必要になる場合がある。sRGBと呼ばれる色の規格は、等しい知覚ステップと等しい線形光ステップとの間をマッピングする伝達関数を指定する。この符号化により、同じ情報量で記憶され、知覚的に区別される強度を最大化することができる。線形光値(linear light values)とsRGB値との間の変換は、輝度補正メッシュで符号化され、sRGB圧縮でまだ表現されていないすべてのピクセルカラー値に適用されうる離散関数で表現されうる。本開示は、特定の方法で輝度補正を説明しているが、本開示は、任意の適切な方法で輝度補正を想定している。
別の効果は、中心窩レンダリングとして知られている。中心窩レンダリングでは、ディスプレイエンジン150は、眼がユーザの焦点または注視点、あるいはその近傍にあるときには、特徴を詳細に確認することができるが、焦点からの距離が減少するにつれて詳細を確認することがより困難になる、という事実を利用することができる。上述のように、アイトラッカーは、制御ブロック200を介してユーザの焦点をディスプレイエンジン150に報告することができる。次に、ピクセルブロック400は、この情報を使用して、ユーザの焦点に対応するピクセルカラー値を、ユーザの焦点から離れたピクセルカラー値よりも高い忠実度でレンダリングすることができる。結果として得られるパターンは、ディスプレイブロック500によって受け取られ、中心窩パターンメモリ525に中心窩パターンとして記憶されてもよい。中心窩パターンは、ピクセルブロック400によって直接ディスプレイブロックに渡されてもよく、制御ブロック200の共有メモリ240に渡されてもよく、マイクロコントローラ230または何らかの他のコンポーネントによって計算されてもよく、または任意の他の適切な方法で生成されてもよい。ディスプレイブロック500は、表示のために準備されているときに、ピクセルカラー値のために使用される忠実度をさらに制御するために、中心窩パターンを使用してもよい。中心窩レンダリングは、ユーザの焦点からより遠いピクセル位置に対応するピクセルカラー値に適用される明るさ補正の程度を低減するために使用されうる。これは、例えば、中心窩リング間の品質の程度を補間することによって、連続的に、あるいは、例えば、ピクセルがある距離を超える場合には、特定のレンダリング品質の程度を選択する閾値に基づいて、指定されてもよい。
輝度補正ブロック540は、輝度メッシュメモリ545から1つまたは複数の輝度補正メッシュを読み出すことができる。輝度メッシュメモリは、制御ブロック200のマイクロコントローラ210によってロードされた1つまたは複数の輝度補正メッシュを含んでもよい。輝度補正メッシュは、16×16タイルの各コーナーピクセルに対して記憶されるスカラー輝度補正値を含みうる。輝度補正ブロック540は、これらのコーナーの値を使用して、内部ピクセルに対する値を補間してもよい。特定の実施形態では、輝度補正メッシュは、タイルの各ピクセルまたはディスプレイ全体について、スカラー輝度補正値を指定することができる。輝度補正ブロック540は、輝度補正メッシュからの適切な値に、ピクセルバッファメモリ510から受け取ったピクセルカラー値を乗じることによって、ピクセルカラー値の最終強度を決定してもよい。この処理は、ピクセルカラー値の各カラーチャネルに対して別々に実行されてもよい(例えば、赤のカラーチャネルに対して1回、緑のカラーチャネルに対して1回、青のカラーチャネルに対して1回)。例えば、ピクセルPr、Pg、Pbの赤、緑、および青のカラーチャネルに対する輝度補正値Br、Bg、Bbを指定する輝度補正メッシュが与えられると、赤のチャネルに対する最終ピクセルカラー値Pr’は、式Pr’=Pr×Brによって求めることができる。緑および青のカラーチャネルは、同様の方法によって求めることができる。本開示は、輝度補正メッシュおよびピクセルカラー値が与えられた場合に、最終ピクセルカラー値を決定するための任意の適切な方法を想定している。
輝度補正メッシュが適用された後、得られたピクセルカラー値がピクセル出力ブロック550に送られる。ピクセル出力ブロック550は、ディスプレイモードに従って、ディスプレイ170、ディスプレイ用のドライバ、または必要に応じて追加のコンポーネントにピクセルカラー値を送ることができる。一例として、ピクセル出力ブロック550は、スキャニングディスプレイ装置の動作を容易にするため、特定の順序でピクセルカラー値を送ることができる。このモードでは、ピクセル出力ブロック550は、最初に、ディスプレイの左エッジに対応するピクセルカラー値をディスプレイの中心を通して送り、次いで、各行が完了すると、ディスプレイの右エッジに対応するピクセルカラー値を中心に送り、上から下に移動してもよい。任意の他の適切な表示パターンも想定される。一例として、ピクセル出力ブロック550は、追加のコンポーネントの動作を容易にするために、特定のフォーマットでピクセルカラー値を送ってもよい。ピクセル出力ブロック550は、後続するピクセルカラー値に対応するタイルを記述する情報を有するヘッダを送信してもよい。ピクセル出力ブロック550は、ディスプレイ170または他のコンポーネントの要件が指示することができるように、様々なピクセルカラー値フォーマットオプションをサポートすることができる。例えば、追加のコンポーネントは、バックエンドカラー処理をカスタマイズするために、あるいは、ディスプレイの速度または忠実度を最適化するためのより広いインターフェースをサポートするために使用される個別のチップを備えてもよい。本開示は、特定の方法で出力ピクセルについて説明しているが、本開示は、任意の適切な方法で出力ピクセルを想定している。
図9は、人工現実システム100のディスプレイエンジン150を使用してグラフィックスを生成するための例示的な方法900を示す。この方法は、ステップ910から始まり、ディスプレイエンジン150の制御ブロック200は、一次レンダリングコンポーネント120から1つまたは複数のサーフェスを受け取ることができる。サーフェスは、3Dモデルを使用して(例えば、ポリゴンベースのレンダリング技法を使用して)レンダリングされた2D画像から、また、特定の視点(例えば、時間t0におけるユーザの視点)から生成された、人工現実シーンにおけるサーフェスのための位置データおよびテクスチャデータを指定するオブジェクトプリミティブであってもよい。制御ブロック200は、サーフェステクスチャデータ(例えば、1つまたは複数のテクセルアレイ)を、メモリコントローラを介してテクセルメモリ220にロードすることができる。制御ブロック200は、他のグラフィックス生成制御データを受信し、そのデータを共有メモリ240に記憶することができる。制御ブロック200は、ディスプレイエンジン150によるグラフィックス生成を開始することができる。ステップ930において、ディスプレイエンジン150の変換ブロック300は、ディスプレイ170の1つまたは複数のピクセルに対応する光線(または光線束)とサーフェスとの交点に対応するタイル-サーフェスペアを決定することができる。変換ブロック200は、整列されたピクセルのアレイ(「タイル」)に対して生成された光線束を使用して、レイキャスティングを実行してもよい。光線は、ユーザの更新された現在の視点から(例えば、上述の時間t0の後の時間t1に)投射されてもよい。変換ブロック300は、光線束を人工現実感シーンに投射すること、および光線束がサーフェスと交差するかどうかを決定することによって、サーフェスの可視性を決定しうる。変換ブロック300は、ピクセルブロック400が使用するためにタイル-サーフェスペアを準備してもよい。ステップ940では、ディスプレイエンジン150のピクセルブロック400は、タイル-サーフェスペア内のサーフェスのサーフェステクスチャデータを使用して、ディスプレイ170のピクセルについてのピクセルカラー値を生成してもよい。ピクセルブロック400は、サーフェスに関連するタイルアレイの整列したテクセルを読み出すことができる。ピクセルブロック400は、これらのテクセルを特定のピクセル値と関連付け、テクセルカラー値上でバイリニア補間を行って、ピクセルカラー値を決定してもよい。ステップ950では、ディスプレイエンジン150のディスプレイブロック500は、ディスプレイ170の各ピクセルについてピクセル出力値を生成してもよい。ディスプレイブロック500は、ディスプレイ170により必要に応じて、ピクセルカラー値を並べ替えることができる。ステップ960では、ディスプレイエンジン150は、ディスプレイ170(スキャニングディスプレイなど)を介してユーザに表示するための出力ピクセル値を提供することができる。ステップ970では、ディスプレイエンジン150の制御ブロック200は、一次レンダリングコンポーネント120から更新されたサーフェスを受け取ったかどうかを決定することができる。受け取っていない場合には、制御ブロック200は、ディスプレイエンジン150をステップ930に戻し、現在のユーザ視点を使用するのではなく、(例えば、時間t0に関連付けられた)古いサーフェスデータを使用して、グラフィックス生成を繰り返させることができる。例えば、制御ブロック200は、タイル-サーフェスペア、ピクセルカラー値、およびピクセル出力の再計算を必要とするユーザ視点または位置情報を受け取ることができる。この処理は、新しいサーフェスが受信される(例えば、時間t0に関連付けられたサーフェスからいくつかのフレームが生成された後の時間tn)まで反復されうる。新しいサーフェスが受信された後、制御ブロック200は、ディスプレイエンジン150をステップ910に戻し、更新されたサーフェスデータを再び使用してグラフィックス生成処理とすることができる。特定の実施形態は、必要に応じて、図9の方法の1つまたは複数のステップを反復してもよい。本開示は、図9の方法の特定のステップを特定の順序で発生するものとして説明し、例示しているが、本開示は、任意の適切な順序で発生する図9の方法の任意の適切なステップを想定している。さらに、本開示は、図9の方法の特定のステップを実行する特定のコンポーネント、デバイス、またはシステムについて説明し、例示しているが、本開示は、図9の方法の任意の適切なステップを実行する任意の適切なコンポーネント、デバイス、またはシステムの、任意の適切な組み合わせを想定している。
図10は、ディスプレイエンジン150を使用して仮想シーン内のサーフェスの可視性を決定するための例示的な方法1000を示す。この方法は、ステップ1010から始まり、ディスプレイエンジン150の変換ブロック300のレイキャスタ310は、ディスプレイ170の位置合わせされたピクセルのアレイ(「タイル」)に対応する1つまたは複数の光線を準備することができる。例えば、レイキャスタ310は、タイルの1つまたは複数のピクセル、またはタイルの4つのコーナーに対応する光線束、またはタイル全体に対応する単一の光線を準備してもよい。ステップ1020では、レイキャスタ310は、1つまたは複数のサーフェスを含む人工現実シーンに光線を投射することができる。レイキャスタ310は、ユーザの視点から始まるディスプレイ170に対応するスクリーンを通して光線を投射してもよい。ステップ1030では、変換ブロック300のワープブロック320は、仮想シーン内への個々の光線の軌跡を指定するために、各投射光線に1つまたは複数の歪みメッシュを適用してもよい。歪みメッシュは、ディスプレイ170の製造または設計の結果として生じうる1つまたは複数の幾何学的歪みを補正するように構成されてもよい。歪みメッシュは、光線が受けるべき歪みの程度を示す、ワープメモリ325または共有メモリ240に記憶されたルックアップテーブルを含みうる。歪みメッシュは、光線束のコーナーの光線の歪みの程度を指定することができる。歪みメッシュは、特定のカラーチャネルに関連する光線の歪みの程度と、他のカラーチャネルのオフセットを指定してもよい。ステップ1040では、変換ブロック300の境界比較ブロック330が、各投射光線束が人工現実感シーン内のサーフェスと交差するかどうかを決定してもよい。境界比較ブロック330は、光線束によって表されるタイルの境界ボックスをサーフェスの境界ボックスと比較することができる。光線束がサーフェスと交差しない(例えば、これらの境界ボックスが交差しない)場合、ステップ1050では、変換ブロック300は、光線束に関連付けられたタイルを破棄してもよい(例えば、破棄されたタイルのピクセル値を処理しない)。光線束がサーフェスと交差する場合、ステップ1060では、境界比較ブロック330は、交差面を光線束によって表されるタイルと関連付けてもよい。境界比較ブロック330は、交点の位置を決定しうる。ステップ1070では、変換ブロック300の変換エンジン340は、ビュー空間座標系からの交点の位置を、タイル-サーフェスペアのサーフェスのテクスチャの座標系に変換してもよい。特定の実施形態は、必要に応じて、図10の方法の1つまたは複数のステップを反復してもよい。本開示は、図10の方法の特定のステップを特定の順序で発生するものとして説明し、例示しているが、本開示は、任意の適切な順序で発生する図10の方法の任意の適切なステップを想定している。しかも、本開示は、図10の方法の特定のステップを含む仮想シーンでサーフェスの可視性を決定するための例示的な方法について説明し、例示しているが、本開示は、任意の適切なステップを含む仮想シーンでサーフェスの可視性を決定するための任意の適切な方法を想定しており、かかる任意の適切なステップは適宜、図10の方法のステップのうちのすべて、もしくは一部を含むことも、いずれをも含まないこともある。さらに、本開示は、図10の方法の特定のステップを実行する特定のコンポーネント、デバイス、またはシステムについて説明し、例示しているが、本開示は、図10の方法の任意の適切なステップを実行する任意の適切なコンポーネント、デバイス、またはシステムの、任意の適切な組み合わせを想定している。
図11は、ディスプレイエンジン150による出力のためにピクセルカラー値を準備するための例示的な方法1100を示す。この方法は、ステップ1110から始まり、ディスプレイエンジン150のディスプレイブロック500は、ピクセルカラー値を受け取ることができる。例えば、ディスプレイブロック500は、ディスプレイエンジン150のピクセルブロック400からピクセルカラー値を受け取ってもよい。ステップ1120では、ディスプレイブロック500は、ピクセルカラー値を1つまたは複数の行バッファ505にロードしうる。特定の実施形態では、ディスプレイブロック500は、ピクセルカラー値を2行ピクセルバッファメモリ510にロードしてもよい。ディスプレイブロック500は、ピクセルカラー値に関連する追加のデータを、ワードおよびタイルメタデータメモリ515および中心窩パターンメモリ525などの関連する2行バッファに書き込むことができる。値が行バッファ505にロードされるとき、これらはタイル順であってもよい(例えば、値は依然として16×16ピクセルの配列を反映する)。ステップ1130では、ピクセルカラー値(および、オプションとして、他の関連データ)は、スキャンライン指向の順で行バッファ505から読み出されてもよい。ディスプレイ170は、単一フレームとしてすべて一緒になるのではなく、特定のパターン(例えば、ピクセル行ごと)で提示されるべきピクセルカラー値を必要とするスキャニングディスプレイであってもよい。ピクセルカラー値は、このパターンを反映する方法で読み取ることができる(例えば、次へ進む前に行上のすべてのピクセルカラー値を読み取る)。ステップ1140では、ピクセルシーケンサ530は、どのピクセルシーケンシングモードが使用されているかを決定することができる。ピクセルシーケンシングモードは、どのようにピクセルカラー値がディスプレイ170に提示されるべきかについての追加の詳細を決定することができる。ピクセルシーケンシングモードがピクセル指向モードである場合には、ステップ1150では、ピクセルシーケンサ530は、有効な関連ピクセルカラー値が存在するかどうかにかかわらず、ディスプレイのすべてのピクセルについての値が輝度補正ブロック540に読み込まれるようにしてもよい。ピクセルシーケンシングモードがタイル指向モードである場合には、ステップ1160で、ピクセルシーケンサは、タイルメタデータメモリ515からタイルメタデータを読み取り、行バッファ505にロードされた各タイルが有効ピクセルカラー値を含んでいたかどうかを決定することができる。所与のタイルが有効なピクセルカラー値を欠く場合には、ピクセルシーケンサ530は、ピクセルを読み出すときに、そのタイルのピクセルをバイパスして、ピクセルメモリ510を形成してもよい。
ステップ1170では、ピクセルシーケンサ530は、ピクセルについてのピクセルカラー値が、ディスプレイブロック500によって出力される(例えば、有効タイルに関連するピクセル)が、ディスプレイブロック500の輝度補正ブロック540に読み込まれるようにしてもよい。輝度補正ブロック540は、ピクセルカラー値に1つまたは複数の輝度補正メッシュを適用してもよい。輝度補正メッシュは、輝度メッシュメモリ545に記憶されたアレイまたはルックアップテーブルであってよく、これは、選択されたタイル(またはディスプレイ)の1つまたは複数のピクセルに対するスカラー値を含み、そのピクセルを最適な輝度に調整する。たとえば、輝度補正メッシュは、タイルのコーナーピクセルの輝度補正値を指定してもよい。次いで、輝度補正ブロック540は、タイルの内側ピクセルに適用されるべき輝度補正値を、それらが輝度補正ブロック540に読み込まれるにつれて補間してもよい。輝度補正メッシュは、カラーチャネルベースで値を指定してもよい(例えば、ピクセルカラー値の赤のチャネルに1つの値、緑のチャネルに1つの値、青のチャネルに1つの値)。輝度補正ブロック540は、各チャネルに対して輝度補正値を適用してもよい。ピクセルに対して輝度補正値を適用するため、輝度補正ブロック540は、ピクセルカラー値に輝度補正値を乗算してもよい。結果として得られるピクセルカラーは、ピクセル出力値である。輝度補正ブロック540は、ピクセル出力値をピクセル出力ブロック550に送ってもよい。ステップ1180では、ピクセル出力ブロック550は、ピクセル出力値を終了し、ピクセルカラー値をディスプレイ170に提供してもよい。特定の実施形態は、必要に応じて、図11の方法の1つまたは複数のステップを反復してもよい。本開示は、図11の方法の特定のステップを特定の順序で発生するものとして説明し、例示しているが、本開示は、任意の適切な順序で発生する図11の方法の任意の適切なステップを想定している。しかも、本開示は、図11の方法の特定のステップを含む出力のためのピクセルカラー値を準備する例示的な方法について説明し、例示しているが、本開示は、任意の適切なステップを含む出力のためのピクセルカラー値を準備する任意の適切な方法を想定しており、これらのステップは、必要に応じて、図11の方法のステップのすべて、もしくは一部を含むことも、いずれをも含まないこともある。さらに、本開示は、図11の方法の特定のステップを実行する特定のコンポーネント、デバイス、またはシステムについて説明し、例示しているが、本開示は、図11の方法の任意の適切なステップを実行する任意の適切なコンポーネント、デバイス、またはシステムの、任意の適切な組み合わせを想定している。
図12は、例示的なコンピュータシステム1200を示す。特定の実施形態では、1つまたは複数のコンピュータシステム1200が、本明細書で説明し、例示している1つまたは複数の方法の1つまたは複数のステップを実施する。特定の実施形態では、1つまたは複数のコンピュータシステム1200は、本明細書で説明し、例示している機能を提供する。特定の実施形態では、1つまたは複数のコンピュータシステム1200上で動作するソフトウェアは、本明細書で説明し、例示している1つまたは複数の方法の1つまたは複数のステップを実施するか、または本明細書で説明し、例示している機能を提供する。特定の実施形態は、1つまたは複数のコンピュータシステム1200の1つまたは複数の部分を含む。本書では、コンピュータシステムへの言及は、必要に応じて、コンピューティングデバイスを包含してよく、また、その逆もありうる。しかも、1つのコンピュータシステムへの言及は、必要に応じて、1つまたは複数のコンピュータシステムを包含しうる。
本開示は、任意の適切な数のコンピュータシステム1200を想定している。本開示は、任意の適切な物理的形態をとるコンピュータシステム1200を想定している。一例として、限定するものではないが、コンピュータシステム1200は、組み込み型コンピュータシステム、システムオンチップ(SOC)、シングルボードコンピュータシステム(SBC)(例えば、コンピュータオンモジュール(COM)やシステムオンモジュール(SOM)など)、デスクトップコンピュータシステム、ラップトップコンピュータシステム、もしくはノートブックコンピュータシステム、インタラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、携帯情報端末(PDA)、サーバ、タブレットコンピュータシステム、拡張現実/仮想現実デバイス、またはこれらのうちの2つ以上の組み合わせ、でありうる。必要に応じて、コンピュータシステム1200は、1つまたは複数のコンピュータシステム1200を含みうるか、一体型もしくは分散型でありうるか、複数の位置にわたって存在するか、複数のマシンにわたって存在するか、複数のデータセンターにわたって存在するか、またはクラウド(1つまたは複数のネットワーク内の1つまたは複数のクラウドコンポーネントを含みうる)内に常駐しうる。必要に応じて、1つまたは複数のコンピュータシステム1200は、実質的な空間的制限または時間的制限なしに、本明細書で説明し、例示している1つまたは複数の方法の1つまたは複数のステップを実施しうる。一例としては(これに限定するものではないが)、1つまたは複数のコンピュータシステム1200は、リアルタイムまたはバッチモードで、本明細書で説明し、例示している1つまたは複数の方法の1つまたは複数のステップを実施しうる。1つまたは複数のコンピュータシステム1200は、本明細書で説明し、例示している1つまたは複数の方法の1つまたは複数のステップを、必要に応じて、別々の時間または別々の場所において実施しうる。
特定の実施形態では、コンピュータシステム1200は、プロセッサ1202、メモリ1204、記憶装置1206、入出力(I/O)インターフェース1208、通信インターフェース1210、およびバス1212を含む。本開示は、特定の構成で、特定の数の特定のコンポーネントを有する特定のコンピュータシステムについて説明し、例示しているが、本開示は、任意の適切な構成で、任意の適切な数の任意の適切なコンポーネントを有する任意の適切なコンピュータシステムを想定している。
特定の実施形態では、プロセッサ1202は、コンピュータプログラムを構成するような命令を実行するためのハードウェアを含む。一例としては(これに限定するものではないが)、プロセッサ1202は、命令を実行するために、内部レジスタから、内部キャッシュから、メモリ1204から、またはストレージ1206から、命令を読み出す(またはフェッチする)こと、命令を復号して実行すること、次いで内部レジスタ、内部キャッシュ、メモリ1204、またはストレージ1206に1つまたは複数の結果を書き込むことが、可能である。特定の実施形態では、プロセッサ1202は、データ、命令、またはアドレスのための1つまたは複数の内部キャッシュを含みうる。本開示は、必要に応じて、任意の適切な数の任意の適切な内部キャッシュを含むプロセッサ1202を想定している。一例としては(これに限定するものではないが)、プロセッサ1202は、1つまたは複数の命令キャッシュ、1つまたは複数のデータキャッシュ、および1つまたは複数の変換ルックアサイドバッファ(TLB)を含みうる。命令キャッシュ内の命令は、メモリ1204またはストレージ1206における命令のコピーであってよく、命令キャッシュは、プロセッサ1202によるこれらの命令の読み出しを加速させうる。データキャッシュ内のデータは、プロセッサ1202で実行される命令のためのメモリ1204またはストレージ1206内のデータのコピーであってよく、プロセッサ1202で実行される後続の命令によるアクセスのために、またはメモリ1204またはストレージ1206への書き込みのためにプロセッサ1202で実行される前の命令の結果であってよく、あるいは他の適切なデータであってもよい。データキャッシュは、プロセッサ1202による読み取り動作または書き込み動作を加速させうる。TLBは、プロセッサ1202の仮想アドレス変換を加速させうる。特定の実施形態では、プロセッサ1202は、データ、命令、またはアドレスのための1つまたは複数の内部レジスタを含みうる。本開示は、必要に応じて、任意の適切な数の任意の適切な内部レジスタを含むプロセッサ1202を想定している。必要に応じて、プロセッサ1202は、1つまたは複数の算術論理演算ユニット(ALU)を含みうるか、マルチコアプロセッサでありうるか、あるいは1つまたは複数のプロセッサ1202を含みうる。本開示は、特定のプロセッサについて説明し、例示しているが、本開示は、任意の適切なプロセッサを想定している。
特定の実施形態では、メモリ1204は、プロセッサ1202が実行する命令、またはプロセッサ1202が動作するためのデータを記憶するためのメインメモリを含む。一例としては(これに限定するものではないが)、コンピュータシステム1200は、ストレージ1206または別のソース(例えば別のコンピュータシステム1200など)からメモリ1204に命令をロードしうる。プロセッサ1202は次いで、メモリ1204から内部レジスタまたは内部キャッシュに、命令をローディングしうる。プロセッサ1202は、命令を実行するため、内部レジスタまたは内部キャッシュから命令を読み出し、これらの命令を復号しうる。プロセッサ1202は、命令の実行中または実行後に、1つまたは複数の結果(中間結果であっても、最終結果であってもよい)を内部レジスタまたは内部キャッシュに書き込みうる。プロセッサ1202は次いで、これらの結果のうちの1つまたは複数をメモリ1204に書き込みうる。特定の実施形態では、プロセッサ1202は、(ストレージ1206またはそれ以外の格納場所とは対照的に)1つまたは複数の内部レジスタまたは内部キャッシュ内、あるいはメモリ1204内の命令のみを実行し、かつ、(ストレージ1206またはそれ以外の格納場所とは対照的に)1つまたは複数の内部レジスタまたは内部キャッシュ内、あるいはメモリ1204内のデータ上でのみ動作する。1つまたは複数のメモリバス(その各々がアドレスバスおよびデータバスを含みうる)が、プロセッサ1202とメモリ1204とを連結しうる。バス1212は、後述するように、1つまたは複数のメモリバスを含みうる。特定の実施形態では、1つまたは複数のメモリ管理ユニット(MMU)が、プロセッサ1202とメモリ1204との間に常駐し、プロセッサ1202によって要求されるメモリ1204へのアクセスを容易にする。特定の実施形態では、メモリ1204は、ランダムアクセスメモリ(RAM)を含む。このRAMは、必要に応じて、揮発性メモリであってもよい。このRAMは、必要に応じて、ダイナミックRAM(DRAM)であっても、スタティックRAM(SRAM)であってもよい。さらに、このRAMは、必要に応じて、シングルポートRAMであっても、マルチポートRAMであってもよい。本開示は、任意の適切なRAMを想定している。メモリ1204は、必要に応じて、1つまたは複数のメモリ1204を含みうる。本開示は、特定のメモリについて説明し、例示しているが、本開示は、任意の適切なメモリを想定している。
特定の実施形態では、ストレージ1206は、データまたは命令のための大容量ストレージを含む。一例としては(これに限定するものではないが)、ストレージ1206は、ハードディスクドライブ(HDD)、フロッピーディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、もしくはユニバーサルシリアルバス(USB)ドライブ、またはこれらのうちの2つ以上の組み合わせ、を含みうる。ストレージ1206は、必要に応じて、着脱可能または着脱不可(すなわち固定式)の媒体を含みうる。ストレージ1206は、必要に応じて、コンピュータシステム1200の内部にあっても、外部にあってもよい。特定の実施形態では、ストレージ1206は、不揮発性のソリッドステートメモリである。特定の実施形態では、ストレージ1206は、読み出し専用メモリ(ROM)を含む。このROMは、必要に応じて、マスクプログラムROM、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、電気的可変ROM(EAROM)、もしくはフラッシュメモリ、またはこれらのうちの2つ以上の組み合わせ、でありうる。本開示は、任意の適切な物理的形態をとる大容量ストレージ1206を想定している。ストレージ1206は、必要に応じて、プロセッサ1202とストレージ1206との間の通信を容易にする1つまたは複数のストレージ制御ユニットを含みうる。ストレージ1206は、必要に応じて、1つまたは複数のストレージ1206を含みうる。本開示は、特定のストレージについて説明し、例示しているが、本開示は、任意の適切なストレージを想定している。
特定の実施形態では、I/Oインターフェース1208は、コンピュータシステム1200と1つまたは複数のI/Oデバイスとの間の通信のための1つまたは複数のインターフェースを提供する、ハードウェア、ソフトウェア、またはその両方を含む。コンピュータシステム1200は、必要に応じて、これらのI/Oデバイスのうちの1つまたは複数を含みうる。これらのI/Oデバイスのうちの1つまたは複数は、人とコンピュータシステム1200との間の通信を可能にしうる。一例としては(これに限定するものではないが)、I/Oデバイスは、キーボード、キーパッド、マイク、モニタ、マウス、プリンタ、スキャナ、スピーカー、静止カメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、その他の適切なI/Oデバイス、またはこれらのうちの2つ以上の組み合わせ、を含みうる。I/Oデバイスは、1つまたは複数のセンサを含みうる。本開示は、任意の適切なI/Oデバイス、および任意の適切なI/Oデバイスのための任意の適切なI/Oインターフェース1208を想定している。I/Oインターフェース1208は、必要に応じて、プロセッサ1202がこれらのI/Oデバイスのうちの1つまたは複数を駆動することを可能にする、1つまたは複数のデバイスまたはソフトウェアドライバを含みうる。I/Oインターフェース1208は、必要に応じて、1つまたは複数のI/Oインターフェース1208を含みうる。本開示は、特定のI/Oインターフェースについて説明し、例示しているが、本開示は、任意の適切なI/Oインターフェースを想定している。
特定の実施形態では、通信インターフェース1210は、コンピュータシステム1200と、1つまたは複数の別のコンピュータシステム1200もしくは1つまたは複数のネットワークとの間の通信(例えばパケットベースの通信など)のための1つまたは複数のインターフェースを提供する、ハードウェア、ソフトウェア、またはその両方を含む。一例としては(これに限定するものではないが)、通信インターフェース1210は、イーサネットまたは別の有線ベースのネットワークと通信するためのネットワークインターフェースコントローラ(NIC)またはネットワークアダプタ、あるいは無線ネットワーク(WI-FIネットワークなど)と通信するための無線NIC(WNIC)または無線アダプタを含みうる。本開示は、任意の適切なネットワーク、および任意の適切なネットワークのための任意の適切な通信インターフェース1210を想定している。一例としては(これに限定するものではないが)、コンピュータシステム1200は、アドホックネットワーク、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、あるいはインターネットの1つまたは複数の部分、またはこれらのうちの2つ以上の組み合わせ、と通信しうる。これらのネットワークのうちの1つまたは複数のうちの1つまたは複数の部分は、有線であっても、無線であってもよい。一例としては、コンピュータシステム1200は、無線PAN (WPAN) (例えば、BLUETOOTH WPANなど)、WI-FIネットワーク、WI-MAXネットワーク、携帯電話ネットワーク(例えば、Global System for Mobile Communications(GSM)ネットワークなど)、あるいはその他の適切な無線ネットワーク、またはこれらのうちの2つ以上の組み合わせ、と通信しうる。コンピュータシステム1200は、必要に応じて、これらのネットワークのうちの任意のもののための任意の適切な通信インターフェース1210を含みうる。通信インターフェース1210は、必要に応じて、1つまたは複数の通信インターフェース1210を含みうる。本開示は、特定の通信インターフェースについて説明し、例示しているが、本開示は、任意の適切な通信インターフェースを想定している。
特定の実施形態では、バス1212は、コンピュータシステム1200のコンポーネントを互いに連結するハードウェア、ソフトウェア、またはその両方を含む。一例としては(これに限定するものではないが)、バス1212は、高速グラフィックスポート(AGP)またはその他のグラフィックスバス、拡張業界標準アーキテクチャ(EISA)バス、フロントサイドバス(FSB)、ハイパートランスポート(HT)相互接続、業界標準アーキテクチャ(ISA)バス、INFINIBAND相互接続、ローピンカウント(LPC)バス、メモリバス、マイクロチャネルアーキテクチャ(MCA)バス、周辺コンポーネント相互接続(PCI)バス、PCI-Express(PCIe)バス、シリアルアドバンストテクノロジアタッチメント(SATA)バス、ビデオエレクトロニクス規格協会ローカル(VLB)バス、あるいはその他の適切なバス、またはこれらのうちの2つ以上の組み合わせ、を含みうる。バス1212は、必要に応じて、1つまたは複数のバス1212を含みうる。本開示は、特定のバスについて説明し、例示しているが、本開示は、任意の適切なバスまたは相互接続を想定している。
本明細書では、コンピュータ可読非一時記憶媒体は、1つまたは複数の半導体ベースまたは他の集積回路(IC)(たとえば、フィールドプログラマブルゲートアレイ(FPGA)または特定用途向けIC(ASIC)など)、ハードディスクドライブ(HDD)、ハイブリッドハードドライブ(HHD)、光ディスク、光ディスクドライブ(ODD)、光磁気ディスク、光磁気ドライブ、フロッピーディスケット、フロッピーディスクドライブ(FDD)、磁気テープ、ソリッドステートドライブ(SSD)、RAMドライブ、SECURE DIGITALカードまたはドライブ、任意の他の適切なコンピュータ可読非一時記憶媒体、あるいは、必要に応じて、これらの2つ以上の任意の適切な組合せを含むことができる。非一時コンピュータ可読記憶媒体は、必要に応じて、揮発性、不揮発性、または揮発性と不揮発性の組み合わせであってもよい。
本明細書では、「または」は、特に明示的に示されていない限り、または文脈によって特に示されていない限り、包括的であり、排他的ではない。したがって、本書では、「AまたはB(A or B)」は、明示的に別様の指示がない限り、または文脈によって別様に指示されない限り、「A、B、またはその両方」を意味する。さらに、「および(and)」は、明示的に別様の指示がない限り、または文脈によって別様に指示されない限り、連携と個別の両方の意味がある。したがって、本明細書では、「AおよびB」は、特に明示的に示されていない限り、または文脈によって特に示されていない限り、「AおよびBが、連携してまたは個別に」を意味する。
本開示の範囲は、当業者であれば理解するであろう、本明細書に記載または図示された例示的な実施形態に対するすべての変更、置換、変形、変更、および修正を包含する。本開示の範囲は、本明細書で説明または図示された例示的な実施形態に限定されるわけではない。しかも、この開示は、本明細書の実施形態のそれぞれを、特定のコンポーネント、要素、特徴、機能、動作、またはステップを含むものとして説明し、例示しているが、これらの実施形態はいずれも、当業者であれば理解するであろう、本明細書の何処かで説明または例示しているコンポーネント、要素、特徴、機能、動作、またはステップのうちのいずれかの任意の組み合わせまた順列を含みうる。さらに、添付の特許請求の範囲において、特定の機能を実行するように適合され、配置され、可能にされ、構成され、有効にされ、動作可能にされ、あるいは稼働される装置またはシステム、もしくは装置またはシステムの構成要素に関する言及は、当該の装置、システム、または構成要素が適合され、配置され、可能にされ、構成され、有効にされ、動作可能にされ、あるいは稼働される限り、その特定の機能が起動され、オンにされ、またはロック解除されるかどうかにかかわらず、当該の装置、システム、構成要素を包含する。加えて、本開示は、特定の実施形態が特定の利点を提供するものとして説明または例示しているが、特定の実施形態は、これらの利点のいずれをも提供しないことも、一部またはすべてを提供することもある。