詳細な説明
以下に本開示の非限定的な例について詳細に述べるが、それらの例は添付の図面に示されている。これらの例を、同様の参照番号は同様の要素を指す図面を参照して以下に説明する。同様の参照番号が示されている場合、対応する説明は繰返さない。興味のある読者は、同様の要素の説明については以前に述べた図面を参照されたい。
拡張現実(AR)システムは、ユーザを囲んでいる物理的空間のユーザの知覚にコンピュータ生成コンテンツを挿入するシステムを含む。コンピュータ生成コンテンツは、ラベル、テキスト情報、画像、スプライト、および3次元エンティティを含み得る。いくつかの実装例では、コンテンツは娯楽目的で、教育目的で、または情報提供を目的として挿入される。
ARシステムの一例は、カメラとディスプレイ装置とを含むスマートフォンなどの携帯型電子機器である。携帯型電子機器はカメラを用いて画像を取込み、カメラによって取込まれた画像の上に重畳されるコンピュータ生成コンテンツを含むAR画像をディスプレイ装置上に表示し得る。
ARシステムの別の例として、ユーザが装着するヘッドマウントディスプレイ(head-mounted display:HMD)がある。HMDは、ユーザの目の前に位置決めされるディスプレイ装置を含む。たとえば、HMDは、ユーザにはディスプレイ装置が表示するコンテンツしか見えないようにユーザの視野全体を遮る場合がある。いくつかの例では、ディスプレイ装置は、ユーザの片目に1つずつ見える、2つの異なる画像を表示するように構成される。たとえば、視差によって3次元のシーンの感覚を生じさせるために、一方の画像のコンテンツの少なくとも一部は他方の画像内の同じコンテンツに対してややオフセットしている場合がある。いくつかの実装例では、HMDはチャンバを含み、このチャンバの中に、HMDを介して携帯型電子機器のディスプレイ装置を見ることができるように、スマートフォンなどの携帯型電子機器が配置され得る。
ARシステムの別の例として、HMDの装着中にユーザが物理的空間を見ることができるHMDがある。当該HMDは、ユーザの視野の上に重畳されるコンピュータ生成コンテンツを表示するマイクロディスプレイ装置を含み得る。たとえば、当該HMDは、物理的空間からの光がユーザの目に届くことを可能にしつつ、マイクロディスプレイ装置が表示する画像をユーザの目に向けて反射する結合器を含む、少なくとも部分的に透明なバイザーを含み得る。
コンピュータ生成コンテンツが画像に挿入されると、コンテンツがより現実的に見えるようにコンテンツの周りにまたは下に影が生成され得る。たとえば、3次元モデルは、大面積の頭上の光源によって生成されたように見えるソフトな影を用いてレンダリングされ得る。ポイントライト/ディレクショナルライトの場所に関する情報は物理的空間では入手不可能な場合があるため、これらのソフトな影は、ポイントライト/ディレクショナルライトで生成され得るハードな影よりも好ましい場合がある。
ARシステムは、24フレーム/秒(FPS)、30FPS、60FPS、またはその他の速度などの高速でリアルタイムでユーザに表示される画像をリフレッシュする必要があり得る。影を生成する旧来の技法では、物理的空間におけるライティングを判別または推定する必要があり得る。しかし、画像からシーン内のライティングを判別または推定することは、非常に多くの計算(またはプロセッササイクル)を必要とし得るため、許容可能なフレームレートでARシステム上でリアルタイムで行なうことはできない。旧来の技法の中には、環境におけるライティングについての事前情報を必要とするものもあるが、当該情報はARシステムが用いられる環境の多くでは入手不可能であり得る。本明細書にさらに記載する技法は、旧来の技法よりも少ないプロセッササイクルを用いつつ、環境ライティングの事前知識を必要とせずに、現実感があるように挿入コンテンツについて影を生成することを可能にする。さらに、本明細書に記載の技法が必要とする処理サイクルの数が減るので、これらの技法は、旧来の技法が必要とするよりも少ない電力を用いつつ、取込み画像/映像に現実感があるようにコンテンツを挿入することを可能にし得る。挿入コンテンツについてライティングを推定して影を提供するのに必要な電力のこのような減少は、電池式のモバイル機器を含むARシステムにおいて特に重要であり得る。
ARシステムの一例は、ユーザを囲んでいる物理的空間の画像を取込む。当該システムは次に、画像内の地面または床などの表面平面を識別し、コンテンツを挿入すべき場所を決定し得る。たとえば、当該システムは、コンテンツのためのスクリーン上の場所を示すユーザ入力を受信してもよい。コンテンツは、ユーザによって示された場所に、またはユーザによって示された場所の下の、識別された表面平面上の場所に配置されてもよい。コンテンツは、たとえば、骨格アニメーションモデルを用いてアニメーション化される3次元モデルを含んでもよい。骨格アニメーションモデルは、メッシュと、メッシュをアニメーション化して位置決めするために用いられる接続された1組の骨格関節(スケルトンまたはリグと称され得る)とを含んでもよい。骨格関節は3次元座標として表わされてもよい。いくつかの実装例では、3次元座標は骨格アニメーションモデルの共通の始点に関して定義される。骨格アニメーションモデルはまた、関節同士を接続するセグメントを規定する接続データを格納してもよい。これらセグメントは骨格の骨と類似していてもよい。関節同士を接続するセグメントは、関節の少なくともいくつかの周りに動いてもよいし、または回転してもよい。これらの動きによって、骨格アニメーションモデルの外面メッシュの対応する変化が生じてもよい。セグメントが動くまたは回転すると、接続された関節およびセグメントも動いてもよいし、または回転してもよい。いくつかの実装例では、関節(たとえば骨格関節)は骨格アニメーションモデルの関節の近似であり得る。いくつかの実装例では、1つ以上の関節はコンテンツ(たとえばオブジェクト)の長手方向部材同士の交差点にあり得るか、または当該交差点を含み得る。いくつかの実装例では、骨格はフレームであり得るか、またはフレームと称され得る。
次に、システムは、コンテンツに基づいて表面平面上にバウンディングボックスおよび影中心点(たとえば影中間点)を生成してもよい。たとえば、バウンディングボックスは、コンテンツ(または平面上の関節の投影)と関連付けられた骨格アニメーションモデルのすべての関節を取囲む表面平面上の矩形状であってもよい。影中心点は関節の質量中心であってもよい。たとえば、質量中心は、関節の位置(または関節が表面平面上に投影された後の関節の位置)を平均することによって計算されてもよい。いくつかの実装例では、質量中心はおおよその質量中心であり得る。関節は等しく重み付けされてもよいし、表面平面からの距離などのその他の因子に基づいて重み付けされてもよい。いくつかの実装例では、バウンディングボックスおよび影中心点を生成するためにすべての関節を用いるわけではない。たとえば、いくつかの実装例では、挿入コンテンツは、バウンディングボックスおよび影中心点を生成する際に用いるべき関節のサブセット(すなわち関節ホワイトリスト)を識別してもよい。いくつかの実装例では、挿入コンテンツは、バウンディングボックスおよび影中心点を生成する際に除外すべき関節のサブセット(すなわち関節ブラックリスト)を識別してもよい。たとえば、挿入コンテンツは、関節ブラックリストまたは関節ホワイトリストを含むデータ構造と関連付けられてもよい。挿入コンテンツの骨格関節の各々は、(たとえばバウンディングボックスおよび影中心点を生成する際に)影を生成するためにその関節を用いるべきか否かを示すブール値を含んでもよい。
バウンディングボックスおよび影中心点に基づいて、表面平面上にシャドウポリゴンが生成されてもよい。シャドウポリゴンはさまざまな形状を有してもよい。たとえば、シャドウポリゴンは、バウンディングボックス内に収まり、かつ影中心点で交差する第1および第2の軸を含む楕円形状を有してもよい。本説明の大半は楕円形状に関するが、形状は任意の種類の長円形状であり得る。
レンダリング時、シャドウポリゴンは透明度値(たとえばアルファ値)でシェーディングされてもよい。透明度値は、影中心点からの距離とともに増加する(すなわち、シャドウポリゴンは影中心点から離れるにつれてさらに透明になり、したがってさらに見えにくくなる)。いくつかの例では、透明度値は影中心点からの距離に基づいて非線形的に増加する。シャドウポリゴンは次に、第1の影エンティティとして挿入すべきコンテンツの後ろに配置され得る。
これに加えて、またはこれに代えて、挿入すべきコンテンツについて第2の影エンティティが生成され得る。上述の第1の影エンティティは、求めた影中心点の場所からラジアルフォールオフを有する単一の影を生成してもよい。この第2の影エンティティは、骨格アニメーションモデルの関節に基づいて不均一な形状を有してもよい。いくつかの実装例は第1の影エンティティを含み、いくつかの実装例は第2の影エンティティを含み、いくつかの実装例は第1の影エンティティおよび第2の影エンティティの双方を含む。
第2の影エンティティを生成するために、いくつかの実装例では、挿入すべきコンテンツの場所の下の表面平面上に第2のシャドウポリゴンが生成される。たとえば、第2のシャドウポリゴンは、骨格アニメーションモデルの関節(または選択された関節のサブセット)のバウンディングボックスと同じ形状を有する矩形であってもよい。第2のシャドウポリゴンは、16本の辺、または、8本、10本、12本、14本、15本、17本、もしくは18本などのその他の数の辺を有するポリゴンを含んでもよい。その他の本数の辺も可能である。いくつかの実装例では、ポリゴンの辺はバウンディングボックス内に収まる楕円に近似する。
次に、コンテンツの選択が識別されてもよい。いくつかの実装例では、当該選択はコンテンツのすべてまたはコンテンツの一部を含む。たとえば、コンテンツの選択は、コンテンツと関連付けられた骨格アニメーションモデルの関節の25%を含んでもよい。この25%は、関節の最低の25%(すなわち、垂直寸法に沿って最低の位置値を有する関節の25%)として、または表面平面に最も近い関節の25%として選択されてもよい。いくつかの実装例では、25%の代わりに異なる閾値を用いて関節が選択される。たとえば、いくつかの実装例では、閾値は10%、20%、30%、33%、40%、50%、または別の値であってもよい。また、当該選択は、10,20,50,100などの選択すべき関節の数、または別の関節の数に基づいていてもよい。いくつかの実装例では、選択された関節にフェードアウト因子が割当てられてもよい。フェードアウト因子は、もう少しで選択されなかった関節ほど高くなる。たとえば、表面平面までの距離に基づいて関節の25%が選択される場合、表面平面から最も遠い選択関節は最高のフェードアウト値を有してもよい。フェードアウト値は、関節が連続フレーム中に選択および非選択にされる際に起こり得るポッピングアーティファクトを防止するために、一部の関節の影への寄与を制限してもよい。関節の選択はまた、挿入コンテンツと関連付けられたデータ構造に格納されている値に基づいていてもよい。たとえば、データ構造は、影を生成する際に使用から除外すべきいくつかの関節を識別してもよい。この場合、閾値割合または閾値数の関節が非除外関節から識別されてもよい。
関節には半径値が割当てられてもよく、半径値を用いて関節の影寄与を計算してもよい。いくつかの実装例では、選択関節のすべてに同じ半径値が割当てられる。あるいは、関節は、モデルの特性に対応するさまざまな半径値を有してもよい(たとえば、他の関節から最も遠い関節は他の関節よりも大きい半径を有してもよい)。たとえば、大きい半径値を有する関節は、生成される影に大きく寄与し得る。いくつかの実装例では、いくつかの関節の半径値は、それらの関節が影に寄与しないようにゼロに設定される。
次に、影強度(影マグニチュードとも称され得る)が第2のシャドウポリゴンの画素毎に計算されてもよい。たとえば、影強度はレンダリング時に計算されてもよい。画素値は、選択関節の各々から最大の影寄与を選択することによって計算されてもよい。その他の実装例では、画素値は、選択関節の影寄与を平均するまたは合計することによって選択される。
各関節について、特定の画素への影寄与は、距離因子および仰角因子などの複数の因子に基づいていてもよい。たとえば、影寄与は、距離因子と仰角因子とを組合せることによって求められてもよい。いくつかの実装例では、距離因子は、画素に対する関節の幾何学的な立体角に対応する(すなわち、関節によって範囲が定まる空間に対応する)。いくつかの実装例では、立体角は、関節までの距離で割った関節の半径の商の逆正接に比例する値として計算される。いくつかの実装例では、距離因子は立体角に近似し、関節の半径に、シーン内の画素の場所から関節までの距離を加えた合計で割った関節の半径の商として計算される。立体角のこの近似は、逆正接関数を用いて立体角を計算するよりもプロセッササイクルが少なくて済み得る。いくつかの実装例では、仰角因子は、画素から関節までのベクトルと、第2のシャドウポリゴンの法線ベクトルとの投影に基づいている。たとえば、いくつかの実装例では、仰角因子は以下の式を用いて計算される。
式中、Nは表面平面の面法線であり、Vは画素から関節までの単位ベクトルであり、rは関節の半径であり、dは画素から関節までの距離であり、fは関節のフェードアウト値である。
影強度が画素毎に計算されると、ガンマ関数を適用して影強度を正規化してもよい。たとえば、ガンマ関数は、影強度を、過度に暗い領域を有することなく中間調を強める正規化値に再マッピングしてもよい。さらに、滑らかなラジアルフォールオフを第2のシャドウポリゴンに適用して、ポリゴンの境界におけるハードな影のエッジを取除いてもよい。滑らかなラジアルフォールオフは、第1のシャドウポリゴンについて説明したのと同様の態様で適用してもよい。
次に、挿入されたコンテンツおよび1つ以上の生成された影エンティティがユーザに提示されてもよい(たとえば、ユーザを囲んでいる物理的空間の取込み画像の上に重畳されてもよい、ユーザの視野内に配置された光結合器の上に投影/表示されてもよい、等)。いくつかの実装例では、上述の第1および第2の影エンティティは互いに混合されるかそうでなければ組合される。たとえば、第1および第2の影エンティティに対応するポリゴン同士は、画素毎に第1もしくは第2の影エンティティから低い透明度値を選択して用いることによって、または当該値を別の方法で組合せることによって、各画素のレンダリング時に組合されてもよい。本明細書中の多くの例は透明度値(またはアルファ値)に言及しているが、その他の実装例も可能である。たとえば、いくつかの実装例では透明度値ではなく影強度が計算される。影強度は、透明度値/アルファ値に関して説明される影エンティティの不透明度に比例することになる(たとえば、影強度は影エンティティ/ポリゴンの透明度が最低であるときに最高となり、影強度は影エンティティ/ポリゴンの透明度が最高であるときに最低となる)。これらの実装例では、部分的に透明な暗色のポリゴンを画像の上に重畳する代わりに、影強度を用いて画像を変更する。たとえば、画素の値に1を掛けて影強度を引いてもよく、影強度は0から1の値を有する。このように、影強度が増加するにつれて画素値は暗くなる。いくつかの実装例では、画素値は画素の色を含み得る。
本明細書に記載の多くの例は視覚コンテンツをAR環境に挿入するARシステムに関するが、コンテンツは本明細書に記載の技法を用いてその他のシステムにも挿入されてもよい。たとえば、本明細書に記載の技法を用いてコンテンツを画像または映像に挿入してもよい。
図1は、実装例に係るシステム100を示すブロック図である。システム100は、システム100のユーザ用の拡張現実(AR)環境を生成する。いくつかの実装例では、システム100は、コンピューティングデバイス102と、ヘッドマウントディスプレイデバイス(HMD)104と、ARコンテンツソース106とを含む。ネットワーク108も図示されており、これを介してコンピューティングデバイス102はARコンテンツソース106と通信を行なってもよい。
コンピューティングデバイス102は、メモリ110と、プロセッサアセンブリ112と、通信モジュール114と、センサシステム116と、ディスプレイ装置118とを含んでもよい。メモリ110は、ARアプリケーション120と、ARコンテンツ122と、画像バッファ124と、画像分析器126と、コンテンツ分析器128と、影エンジン130とを含んでもよい。コンピューティングデバイス102はまた、無線通信プロトコルを用いてコンピューティングデバイス102と通信を行なうコントローラなどのさまざまなユーザ入力コンポーネント(図示せず)を含んでもよい。いくつかの実装例では、コンピューティングデバイス102は、HMD104を介してユーザにARコンテンツを提供または出力するように構成され得るモバイル機器(たとえばスマートフォン)である。たとえば、コンピューティングデバイス102とHMD104とは、有線接続(たとえば、ユニバーサル・シリアル・バス(USB)ケーブル)を介して、または、無線通信プロトコル(たとえば、任意のWiFiプロトコル、任意のBlueTooth(登録商標)プロトコル、Zigbee(登録商標)など)を介して通信を行なってもよい。いくつかの実装例では、コンピューティングデバイス102は、HMD104のコンポーネントであり、HMD104の筐体の中に収容されてもよい。
メモリ110は、1つ以上の非一時的なコンピュータ可読記憶媒体を含み得る。メモリ110は、ユーザ用のAR環境を生成するために使用できる命令とデータとを格納してもよい。
プロセッサアセンブリ112は、AR環境を生成することに関連するさまざまなタスクを実行するための、メモリ110に格納された命令など、命令を実行可能な1つ以上のデバイスを含む。たとえば、プロセッサアセンブリ112は、CPU(central processing unit)および/またはGPU(graphics processor unit)を含んでもよい。たとえば、GPUが存在する場合、影を生成することまたは影を表わすポリゴンをシェーディングすることなど、いくつかの画像/映像レンダリングタスクをCPUからGPUに肩代わりさせてもよい。
通信モジュール114は、ARコンテンツソース106など、他のコンピューティングデバイスと通信を行なうための1つ以上のデバイスを含む。通信モジュール114は、ネットワーク108など、無線または有線ネットワークを介して通信を行なってもよい。
センサシステム116は、カメラアセンブリ132など、さまざまなセンサを含んでもよい。センサシステム116の実装例はまた、たとえば、慣性運動装置(inertial motion unit:IMU)134、光センサ、音声センサ、画像センサ、距離センサおよび/もしくは近接センサ、静電容量型センサなどの接触センサ、タイマ、ならびに/またはその他のセンサおよび/もしくはセンサのさまざまな組合せを含む、その他のセンサを含んでもよい。
IMU134は、コンピューティングデバイス102および/またはHMD104の動作、動き、および/または加速度を検出する。IMU134は、たとえば、加速度計、ジャイロスコープ、磁力計、およびその他のそのようなセンサなど、さまざまな異なる種類のセンサを含んでもよい。IMU134に含まれるセンサが提供するデータに基づいて、HMD104の位置および向きを検出および追跡してもよい。HMD104の検出された位置および向きによって、システムは、ユーザの視線方向および頭部の動きを検出および追跡でき得る。
いくつかの実装例では、ARアプリケーションは、センサシステム116を用いて、物理的空間内のユーザの場所および向きを判断してもよく、ならびに/または物理的空間内の特徴もしくは物体を認識してもよい。
カメラアセンブリ132は、コンピューティングデバイス102の周りの物理的空間の画像および/または映像を取込む。カメラアセンブリ132は1つ以上のカメラを含んでもよい。カメラアセンブリ132は赤外線カメラをさらに含んでもよい。
ARアプリケーション120は、HMDならびに/または、ディスプレイ装置118、スピーカ、および/もしくはその他の出力装置などのコンピューティングデバイス102の1つ以上の出力装置を介してARコンテンツをユーザに提示または提供してもよい。いくつかの実装例では、ARアプリケーション120はメモリ110に格納された命令を含み、当該命令は、プロセッサアセンブリ112によって実行されると、プロセッサアセンブリ112に本明細書に記載の動作を行なわせる。たとえば、ARアプリケーション120は、たとえば、ARコンテンツ122および/またはARコンテンツソース106から受信したARコンテンツなど、ARコンテンツに基づいてユーザ用にAR環境を生成および提示してもよい。ARコンテンツ122は、HMD104においてユーザの視野の一部に表示され得る画像または映像などのコンテンツを含んでもよい。AR環境はまた、物理的(現実世界)環境および物理的(現実世界)エンティティの少なくとも一部を含んでも良い。たとえば、影は、ユーザが位置している物理的空間にコンテンツがより良く適合するように生成されてもよい。コンテンツは、物理的空間のさまざまな部分を重畳するオブジェクトを含んでもよい。コンテンツは、平坦な画像としてまたは3次元(3D)オブジェクトとしてレンダリングされてもよい。3Dオブジェクトは、ポリゴンメッシュとして表わされる1つ以上のオブジェクトを含んでもよい。ポリゴンメッシュは、色および画像などのさまざまな表面テクスチャと関連付けられてもよい。
ARアプリケーション120は、画像バッファ124、画像分析器126、コンテンツ分析器128、および影エンジン130を用いて、ARコンテンツ122に基づいてHMD104を介して表示するための画像を生成してもよい。たとえば、カメラアセンブリ132によって取込まれた1つ以上の画像が画像バッファ124に格納されてもよい。いくつかの実装例では、画像バッファ124は1つ以上の画像を格納するように構成されているメモリ110の領域である。いくつかの実装例では、コンピューティングデバイス102は、カメラアセンブリ132によって取込まれた画像をテクスチャとして画像バッファ124内に格納する。これに代えて、またはこれに加えて、画像バッファは、GPU上の専用のランダムアクセスメモリ(RAM)など、プロセッサアセンブリ112と一体型の記憶場所をさらに含んでもよい。
画像分析器126は、コンテンツがその上に位置決めされ得る表面平面の場所など、画像のさまざまな特性を求めてもよい。いくつかの実装例では、表面平面は、地面、床、または挿入すべきコンテンツなどのオブジェクトがその上に配置され得るその他の表面に対応する実質的に水平な平面である。
ARアプリケーション120はコンテンツを挿入すべき場所を決定してもよい。たとえば、ARアプリケーションは、コンテンツを挿入するための場所を識別するようにユーザを促してから、コンテンツのためのスクリーン上の場所を示すユーザ入力を受信してもよい。ARアプリケーションは、そのユーザ入力に基づいて、挿入コンテンツの場所を決定してもよい。たとえば、コンテンツが挿入される場所はユーザによって示された場所であってもよい。いくつかの実装例では、当該場所は、ユーザによって示された場所を、画像内の床または地面などの表面に対応する平面にマッピングすることによって(たとえば、ユーザによって示された場所の下にある画像分析器126によって識別された平面上の場所を見つけることによって)決定される。当該場所はまた、カメラアセンブリによって取込まれた以前の画像内のコンテンツについて決定された場所に基づいて決定されてもよい(たとえば、ARアプリケーションは、コンテンツに、画像内に取込まれた物理的空間内に識別される表面を横切って移動させてもよい)。
コンテンツ分析器128は次に、決定された場所で挿入すべきコンテンツのさまざまな特性を求めてもよい。たとえば、コンテンツは、3Dモデル、および関節を含む骨格アニメーションモデルと関連付けられてもよい。骨格アニメーションモデルは3Dモデルの内部に配置されてもよく、骨格の一部またはすべての周りの3Dモデルの一部の動きを可能にしてもよい。一例として、コンテンツ分析器128は、骨格アニメーションモデルの関節の少なくともいくつかの場所に基づいて、表面平面上のバウンディングボックスおよび影中心点を求めてもよい。たとえば、骨格関節は表面平面上に投影されてもよい。少なくともいくつかの実施形態では、関節は、(たとえば、関節の3D位置の高さ成分(すなわち、表面がX−Z面に平行である場合はY成分)を捨てることによって、または高さ成分を平面の高さと等しく設定することによって)頭上の光源から生じたように見える影を生成するために頭上の位置から投影される。いくつかの実装例では、すべての関節を用いてバウンディングボックスが生成されて影中心点が識別される。いくつかの実装例では、関節のサブセットを用いてバウンディングボックスが生成されて影中心点が識別される(たとえば、挿入コンテンツは使用すべきまたは除外すべき関節を識別してもよい)。いくつかの実装例では、影中心点はオブジェクトの中心になくてもよい。
バウンディングボックスは、投影された関節をすべて含む表面上の矩形であってもよい。少なくともいくつかの実装例では、当該矩形は3D座標系の軸と並んでいる(たとえば、表面がX−Z面に平行である場合は、当該矩形の辺はX軸またはZ軸のいずれかと並んでいる)。
影中心点はさまざまな方法で求めることができる。たとえば、影中心点は、投影された関節の空間的な中点であり得る。影中心点は、投影された関節の質量中心(すなわち、投影された関節の平均位置)として計算することもできる。いくつかの実装例では、質量中心を計算する目的で関節に重みが割当てられてもよい。たとえば、重みは表面からの距離に基づいて割当てられ得る(たとえば、表面に近い関節は表面から遠い関節よりも高い重みを有する)。
コンテンツ分析器128はまた、複数の関節を選択して複数の選択関節を生成してもよい。たとえば、コンテンツ分析器128は、表面平面までの距離に基づいて、予め定められた割合の関節を選択してもよい。いくつかの実装例では、予め定められた割合は25%であるが、その他の予め定められた割合も使用可能である。これに加えて、またはこれに代えて、予め定められた量の関節が選択され得る。いくつかの実装例では、すべての関節が選択される。また、関節のサブセットが選択されてもよい。いくつかの実装例では、関節のサブセットは、挿入コンテンツと関連付けられたデータ構造に基づいて選択される。有益なことに、関節のサブセットを選択することによって、影を生成するために用いられるプロセッササイクルの量が減少し得る。コンテンツ分析器128はまた、選択関節にフェードアウト値を割当ててもよい。たとえば、関節のフェードアウト値は、関節と表面平面との間の距離に比例してもよい。コンテンツ分析器はまた、選択関節に半径値を割当ててもよい。いくつかの実装例では、選択関節の各々に同じ半径値が割当てられる。たとえば、半径値はコンテンツのサイズに基づいて求められてもよい(たとえば、半径は、コンテンツの最長寸法など、1つの寸法における予め定められた割合のサイズのコンテンツであってもよい)。さらに、選択関節に異なる半径値が割当てられてもよい。これらの実装例では、半径値は、選択関節から骨格モデル内の次に最も近い関節までの距離に基づいていてもよい。
影エンジン130は、挿入すべきコンテンツについて1つ以上の影を生成してもよい。いくつかの実装例では、影エンジン130は、コンテンツ分析器128によって求められたバウンディングボックスおよび影中心点に基づいて第1のシャドウポリゴンを生成する。第1のシャドウポリゴンは、暗色(たとえば黒色)と、影中心点からの距離に基づいて変化する透明度値とを有してもよい。いくつかの実装例では、透明度値は、中心点からの距離に基づいて非線形フォールオフを適用することによって求められる。非線形フォールオフによって、ポリゴンの中心に近い画素は低い透明度値を有し、ポリゴンのエッジに近い画素は高い透明度値を有し得る。少なくともいくつかの実装例では、ポリゴンのエッジ上の画素は完全に透明である。
影エンジン130はまた、選択関節に少なくとも部分的に基づいてシェーディングされる第2のシャドウポリゴンを生成してもよい。たとえば、第2のシャドウポリゴンの各画素は、選択関節に対する当該画素のさまざまな特性に基づいて定まる影強度に従ってシェーディングされてもよい。たとえば、影寄与値は、第2のシャドウポリゴンの特定の画素および特定の選択関節に対して計算されてもよい。影寄与値は、特定の画素に対する特定の選択関節の距離およびオーバーヘッド角(仰角としても知られている)に基いていてもよい(すなわち、より近いおよび/またはより直接的に画素の頭上にある選択関節は、より遠いおよび/またはより間接的に頭上にある選択関節よりも大きく影に寄与する)。さらに、影寄与値は、選択関節に割当てられたフェードアウト値に基づいて減少してもよい(またはそうでなければスケール変更されてもよい)(すなわち、フェードアウト値が高い選択関節は、他のすべてのことが同一であるなら、フェードアウト値が低い選択関節よりも影寄与値が低くなる)。
影エンジン130は次に、選択関節からの影寄与同士を組合せて、第2のシャドウポリゴンの特定の画素についての影強度値を生成してもよい。たとえば、影寄与値同士は、影寄与から最大値を選択することによって組合されてもよい。あるいは、影寄与値同士は、影寄与値の少なくともいくつかを合計または平均することによって組合されてもよい。
影エンジン130は次に、第1のシャドウポリゴンと第2のシャドウポリゴンとを組合せてもよい。第1のシャドウポリゴンに関して述べた透明度値および第2のシャドウポリゴンに関して述べた影強度は、一般に互いの逆数である。たとえば、ある透明度値を最大透明度値(たとえば1.0)から引いて影強度値を生成してもよく、逆の場合も同様である。いくつかの実装例では、第1のシャドウポリゴンからの第1の影強度と第2のシャドウポリゴンからの第2の影強度とが、第1の影強度の二乗と第2の影強度の二乗との和の平方根を取ることによって組合される。
いくつかの実装例では、影エンジン130はその他の技法を用いて影を生成してもよい。たとえば、影エンジン130は影マップを用いて影を生成してもよい。影マップを生成する技法の一例が、Williams, Lance. “Casting Curved Shadows on Curved Surfaces.” ACM Siggraph Computer Graphics, Vol. 12, No. 3, ACM, 1978に記載されている。影マップによって生成された影は、第1のシャドウポリゴンおよび第2のシャドウポリゴンの1つ以上と組合されてもよい。いくつかの実装例では、影マップを用いて生成された影は、挿入コンテンツまでの距離に基づいて影を重み付けすることによって、第1のシャドウポリゴンおよび第2のシャドウポリゴンの1つ以上と組合される。たとえば、挿入コンテンツがカメラアセンブリ132に近い場合は、影マップを用いて生成された影は重く重み付けされてもよい。挿入コンテンツがカメラアセンブリ132から遠い場合は、(たとえば、影マップを用いて生成された影の代わりになるために)第1のシャドウポリゴンまたは第2のシャドウポリゴンに大きい重みが与えられてもよい。さらに、影を生成するその他の技法が用いられて同様に組合され(重み付けされ)てもよい。いくつかの実装例では、本明細書に記載のシャドーイング技法が影マップと組合されて、全体的により現実的な全体的な影が生成され得る。
いくつかの実装例では、画像分析器126、コンテンツ分析器128、および影エンジン130はメモリ110に格納された命令を含んでもよく、当該命令は、プロセッサアセンブリ112によって実行されると、プロセッサアセンブリ112に本明細書に記載の動作を行なわせて、(たとえばHMD104を介して)ユーザに表示される1つのまたは一連の画像を生成させる。
ARアプリケーション120は、カメラアセンブリ132、IMU134、および/またはセンサシステム116のその他のコンポーネントから受信した入力に基づいて、AR環境を更新してもよい。たとえば、IMU134は、コンピューティングデバイス102および/またはHMD104の動作、動き、および/または加速度を検出してもよい。IMU134は、たとえば、加速度計、ジャイロスコープ、磁力計、およびその他のそのようなセンサなど、さまざまな異なる種類のセンサを含んでもよい。HMD104の位置および向きは、IMU134に含まれるセンサが提供するデータに基づいて検出および追跡されてもよい。HMD104の検出された位置および向きによって、システムは、物理的空間内のユーザの位置および向きを検出および追跡でき得る。検出された位置および向きに基づいて、ARアプリケーション120は、AR環境を更新し、環境内のユーザの変更された向きおよび/または位置を反映してもよい。
図1ではコンピューティングデバイス102とHMD104とは別個のデバイスとして示されているが、いくつかの実装例では、コンピューティングデバイス102がHMD104を含んでもよい。いくつかの実装例では、図1に示されるように、コンピューティングデバイス102はケーブルを介してHMD104と通信を行なう。たとえば、コンピューティングデバイス102は、映像信号および/または音声信号を、ユーザに表示するためにHMD104に送信してもよく、HMD104は、動作情報、位置情報、および/または向き情報をコンピューティングデバイス102に送信してもよい。
ARコンテンツソース106は、ARコンテンツを生成および出力してもよく、ARコンテンツは、コンピューティングデバイス102など、1つ以上のコンピューティングデバイスに、ネットワーク108を介して配布または送られてもよい。実装例では、ARコンテンツは、3次元シーンおよび/または画像を含む。さらに、ARコンテンツは、1つ以上のコンピューティングデバイスにストリーム配信または配布される音声信号/映像信号を含んでもよい。ARコンテンツはまた、コンピューティングデバイス102上で実行されて3Dシーン、音声信号、および/または映像信号を生成するARアプリケーションを含んでもよい。
ネットワーク108は、インターネット、ローカルエリアネットワーク(local area network:LAN)、ワイヤレスローカルエリアネットワーク(wireless local area network:WLAN)、および/またはその他のネットワークであってもよい。コンピューティングデバイス102は、たとえば、音声信号/映像信号を受信してもよく、音声信号/映像信号は、説明的な実装例におけるARコンテンツの一部として、ネットワークを介して提供されてもよい。
図2は、ユーザがHMD104の一例を通してAR環境202を体験している物理的空間200の一例の三人称視点図である。AR環境202は、コンピューティングデバイス102のARアプリケーション120によって生成され、HMD104を通してユーザに表示される。
AR環境202は、物理的空間200の画像上に表示される挿入コンテンツ204を含む。この例では、コンテンツ204は、AR環境202における床の表現上に影206を生成している亀である。この影は本明細書に記載の技法に従って生成される。
いくつかの実装例では、AR環境202は、単一画像として、またはユーザの視野の実質的にすべてを占める一対の立体画像としてユーザに提供され、HMD104を介してユーザに表示される。その他の実装例では、AR環境は、ユーザの視野の少なくとも一部を占める少なくとも部分的に透明な結合器上に挿入コンテンツ204および生成された影206を表示/投影することによって、ユーザに提供される。たとえば、HMD104の一部は透明であってもよく、ユーザがHMD104の装着中にこれらの一部を通して物理的空間200を見ることができるようにしてもよい。
図3Aおよび図3Bは、たとえば図2のユーザが装着しているHMD104などのHMD300の一例の斜視図であり、図3Cは、HMD300を制御するおよび/またはHMD300と対話するためのハンドヘルド電子機器302をの一例を示す。
ハンドヘルド電子機器302は、機器302の内部部品を受ける筐体303と、ユーザがアクセスできる、筐体303の外側のユーザインターフェイス304とを含んでもよい。ユーザインターフェイス304は、ユーザのタッチ入力を受けるように構成されたタッチセンシティブ面306を含んでもよい。ユーザインターフェイス304はまた、たとえば、作動ボタン、ノブ、ジョイスティックなどの、ユーザが操作するその他の部品を含んでもよい。いくつかの実装例では、ユーザインターフェイス304の少なくとも一部はタッチスクリーンとして構成されてもよく、ユーザインターフェイス304のその一部は、ユーザインターフェイス項目をユーザに表示するように、かつタッチセンシティブ面306上でユーザからのタッチ入力を受けるように構成される。ハンドヘルド電子機器302はまた、たとえば、ユーザインターフェイス304において受信したユーザ入力に応答して、筐体303のポートを通って、たとえばビームまたは光線などを選択的に発光するように構成された光源308を含んでもよい。
HMD300は、フレーム320に結合された筐体310を含んでもよく、さらに、たとえばヘッドフォンに搭載されたスピーカを含む音声出力装置330がフレーム320に結合されている。図3Bでは、筐体310の前部310aは、筐体310に収容されている部品の一部が見えるように、筐体310の基部310bから回転させている。ディスプレイ340が、筐体310の前部310aの内部に面する側に装着されてもよい。レンズ350が、筐体310の内部において、前部310aが筐体310の基部310bに対して閉じられた位置にあるときにユーザの目とディスプレイ340との間になるように搭載されてもよい。いくつかの実装例では、HMD300は、さまざまなセンサを含む検知システム360と、プロセッサ390およびHMD300の操作を容易にするさまざまな制御システム装置を含む制御システム370とを含んでもよい。
いくつかの実装例では、HMD300は、静止画および動画を取込むためのカメラ380を含んでもよい。カメラ380によって取込まれた画像は、現実世界、または拡張環境に対する物理的空間におけるユーザおよび/もしくはハンドヘルド電子機器302の物理的な位置の追跡を助けるために用いられてもよく、ならびに/またはユーザに対してパススルーモードでディスプレイ340に表示することで、ユーザが、HMD300を外すことなく、そうでなければHMD300の構成を変更して筐体310を動かしてユーザの視線から外すことなく、拡張環境を一時的に出て物理的環境に戻ることができるようにしてもよい。
たとえば、いくつかの実装例では、検知システム360は、たとえば、加速度計、ジャイロスコープ、磁力計、およびその他のそのようなセンサなど、さまざまな異なる種類のセンサを含む慣性計測装置(inertial measurement unit:IMU)362を含んでもよい。IMU362に含まれるセンサが提供するデータに基づいて、HMD300の位置および向きを検出および追跡してもよい。HMD300の検出された位置および向きによって、システムは、ユーザの視線方向および頭部の動きを検出および追跡でき得る。
いくつかの実装例では、HMD300は、ユーザの目線を検出および追跡するための視線追跡装置365を含んでもよい。視線追跡装置365は、たとえば瞳孔など、たとえばユーザの目の特定の部分など、ユーザの目の画像を取込んで、ユーザの視線の方向および動きを検出および追跡するための、たとえば1つの画像センサ365Aまたは複数の画像センサ365Aを含んでもよい。いくつかの実装例では、HMD300は、検出された視線が、没入型仮想体験における対応する対話に変換されるユーザ入力として処理されるように構成されてもよい。
いくつかの実装例では、HMD300は、筐体310のチャンバの内部に着脱可能に配置されるスマートフォンなどの携帯型電子機器を含む。たとえば、ディスプレイ340およびカメラ380は携帯型電子機器によって提供されてもよい。チャンバを(図3Aに示されるように)閉じると、ユーザが各目で(携帯型電子機器によって提供される)ディスプレイ340の少なくとも一部を見ることができるように、ディスプレイ340がレンズ350と並ぶ。カメラ380は、HMD300の携帯型電子機器が筐体310内に配置されている間に画像を取込むことができるように、筐体310の開口と並んでもよい。
図4は、携帯型電子機器402の一例を介してAR環境202を体験しているユーザの概略図である。携帯型電子機器402はコンピューティングデバイス102の一例である。携帯型電子機器402はスマートフォン、タブレット、またはその他の種類の携帯型コンピューティングデバイスであってもよい。この例では、ユーザは携帯型電子機器のディスプレイ装置418を介してAR環境を体験している。たとえば、ディスプレイ装置418は画像および/または映像を表示可能なスクリーンを含んでもよい。
図5は、本明細書に記載の実装例に従う、挿入コンテンツについて影を生成する方法500の一例の図である。この方法500は、たとえばコンピューティングデバイス102によって行なわれてユーザ用のAR環境を提供してもよい。
動作502において、画像を受信する。画像を受信することは、カメラアセンブリ132などのカメラアセンブリで画像を取込むことを含んでもよい。画像を受信することは、記憶場所に格納されている以前に取込まれた画像にアクセスすることを含んでもよい。画像はまた、ネットワークを介してアクセス可能なサーバなど、別のコンピューティングデバイスから受信してもよい。
動作504において、画像内で表面平面を識別する。表面平面はさまざまな画像処理技術を用いて識別されてもよい。たとえば、表面平面は、画像の実質的に平面の領域を識別することによって識別されてもよい。いくつかの実装例では、表面平面は、複数の画像(たとえば、物理的空間の映像ストリームからの一連の画像)の分析に基づいて生成されてもよい。表面平面は、地面、床、またはその上にオブジェクトが配置され得るその他の表面(たとえばテーブル、カウンター、棚)に対応してもよい。
動作506において、挿入すべきコンテンツの場所を決定する。いくつかの実装例では、挿入すべきコンテンツはARコンテンツである。少なくともいくつかの実装例では、コンテンツはポリゴンメッシュなどの1つ以上の3次元モデルを含む。ポリゴンメッシュは、互いに接続された複数の骨格関節を含む骨格アニメーションモデルと関連付けられてもよい。骨格モデルによって、関節の少なくともいくつかの周りの動きまたは回転が可能になってもよい。これらの動きによって、ポリゴンメッシュの一部の対応する動きまたは変形が生じてもよい。
挿入すべきコンテンツの場所は、たとえば、受信した画像内に実質的に平面の表面を識別し、識別した表面上にコンテンツを位置決めすることによって決定されてもよい。挿入すべきコンテンツの場所はまた、少なくとも部分的にユーザ入力によって決定されてもよい。たとえば、ユーザは、コンテンツを挿入すべき画像内の場所を識別してもよい。いくつかの実装例では、コンテンツは、ユーザによって識別された場所に対応する水平面上の場所(たとえば、コンテンツが当該平面上に位置決めされるようにユーザによって識別された位置の下の場所)に配置されてもよい。コンテンツの場所はまた、以前の画像(すなわち、カメラアセンブリによって取込まれた映像の以前のフレーム)内のコンテンツの場所に基づいて決定されてもよい。たとえば、コンテンツは物理的空間に対して動き回ってもよい(たとえば、図2に示されるコンピュータで生成された亀の画像コンテンツは、床を這うように進んでもよい)。
動作508において、関節に基づいてコンテンツのためのバウンディングボックスを生成する。関節は、動作504において識別された表面平面上に上から投影されてもよい。いくつかの実装例では、関節の3D位置の垂直成分を無視してバウンディングボックスを計算してもよい。いくつかの実装例では、バウンディングボックスは関節を境界付ける(囲む)四辺形である。バウンディングボックスは、たとえば矩形であってもよい。いくつかの実装例では、関節のサブセットを用いてバウンディングボックスが求められる。たとえば、挿入コンテンツは、バウンディングボックスを生成するために使用すべきまたは使用から除外すべき関節のいくつかを識別するデータ構造と関連付けられてもよい。
動作510において、関節に基づいて影中心点の場所を求める。たとえば、影中心点の場所は、表面平面上に投影された関節の位置に基づいて求められる。いくつかの実装例では、影中心点は関節の空間的な中点である。いくつかの実装例では、影中心点は点の質量中心として計算される。たとえば、関節は等しく重み付けされてもよく、中心点の場所は関節の位置を平均することによって求められる。いくつかの実装例では、関節は表面平面からの距離(たとえば高さ)に基づいて重み付けされ、中心点の場所は関節の位置の重み付け平均として求められる。(少なくとも動作508に関して上述した)バウンディングボックスを生成することと同様に、いくつかの実装例では、関節のサブセットを用いて影中心点の場所を求めてもよい。
動作512において、バウンディングボックスおよび影中心点に基づいて表面平面上に影エンティティを生成する。たとえば、影エンティティは、バウンディングボックスによって取囲まれるポリゴンであってもよい。少なくともいくつかの実装例では、影エンティティは、影中心点で交差する第1の軸および第2の軸を有する楕円形状のポリゴンである。楕円形状のポリゴンは、0本、1本、または2本の対称軸を有してもよい。いくつかの実装例では、矩形ポリゴンなど、その他の形状を有するポリゴンが用いられてもよい。さらに、当業者によって理解されるように、楕円形状のポリゴンは一般に、楕円に近似するように配置される複数の直線を用いて表わされる。
動作514において、影中心点に基づいて求めた画素値を用いて影エンティティをレンダリングする。いくつかの実装例では、影エンティティの画素は、黒色などの暗色でレンダリングされ、変化する透明度(たとえばアルファ値)を有する。画素の透明度値は、画素と中心点との間の距離に基づいて求められてもよい。いくつかの実装例では、透明度値はまた、画素値からポリゴンのエッジまでの距離に基づいている。たとえば、透明度値は、影中心点からポリゴンのエッジまでの距離の割合として表わされる画素の場所に基づくラジアルフォールオフ関数を用いて求められてもよい。いくつかの実装例では、ポリゴンのエッジ上の画素(100%)は完全に透明になり、影中心点にある画素(0%)は完全に不透明になる。いくつかの実装例では、ラジアルフォールオフは線形である。その他の実装例では、ラジアルフォールオフは非線形である。たとえば、ポリゴンエッジまでの経路の50%未満にある画素については、影エンティティが実質的に不透明であるように透明度値が低くなり得るが、ポリゴンエッジまでの経路の50%を超えるところにある画素は、透明度が急激に増加する。いくつかの実装例では、画素値は画素の色を含み得る。
影エンティティがレンダリングされると、挿入コンテンツが影の前に追加され得る。そして、影エンティティおよび挿入コンテンツの双方が動作502において受信した画像の上に重畳されて拡張画像が生成され得る。そして拡張画像はユーザに表示されて拡張環境を提供し得る。さらに、レンダリングされた影エンティティおよび挿入コンテンツは透明な結合器表面上に投影されてもよく、当該表面上で物理的空間のユーザの視野上に表示されることになる。この例では、レンダリングされた影エンティティの前に挿入コンテンツを追加することを記載しているが、いくつかの実装例では、挿入コンテンツおよび影エンティティは共にレンダリングされ、見えるようになる影エンティティの部分のみが実際にレンダリングされる。
図6は、本明細書に記載の実装例に従う、挿入コンテンツについて影を生成する方法600の一例の図である。この方法600は、たとえばコンピューティングデバイス102によって行なわれてユーザ用のAR環境を提供してもよい。
動作602において、画像を取込む。たとえば、画像は、コンピューティングデバイス102などのコンピューティングデバイスのカメラアセンブリによって取込まれてもよい。取込まれた画像はテクスチャとして画像バッファ124に格納されてもよい。画像700の一例を図7Aに示す。
動作604において、画像内で表面平面を識別する。上述のように、表面平面は画像内の地面または床に対応してもよい。画像700内に識別された表面平面702の一例を図7Aに示す。
動作606において、挿入されるコンテンツのための場所を決定する。いくつかの実装例では、コンテンツは、複数の関節を有する骨格によって少なくとも部分的に規定されるポリゴンメッシュを含む。上述のように、当該場所は、ユーザ入力、表面平面の場所、および/または以前の画像内のコンテンツの場所に基づくなど、さまざまな方法で決定されてもよい。図7Bは、画像700の上に重畳された、決定された場所の一例におけるコンテンツ704の一例を示す。図7Cは表面平面702上のコンテンツ704を上面図から示し、図7Dは関節708を含む骨格706を示す。
動作608において、複数の関節に基づいてコンテンツのためのバウンディングボックスを表面平面上に生成する。上述のように、バウンディングボックスは、関節のすべてまたは実質的にすべてを境界付ける(含む)表面平面(たとえばX−Z面)上の矩形であってもよい。図7Eは、関節708を境界付ける表面平面702上のバウンディングボックス710の一例を示す。上述のように、挿入コンテンツと関連付けられたデータ構造は、バウンディングボックスを生成する際に含めるべきまたは使用から除外すべき関節のサブセットを識別してもよい。
動作610において、複数の関節に基づいて表面平面上の質量中心の場所を求める。上述のように、関節は等しく重み付けされてもよく、質量中心は関節の平均位置として求められる。あるいは、関節は、表面平面の上方の距離など、さまざまな因子によって重み付けされてもよい。図7Eは、関節708の質量中心の場所として求められる表面平面702上の影中心点712の一例を示す。いくつかの実装例では、挿入コンテンツと関連付けられたデータ構造が、関節についての重み付け値を提供してもよいし、または質量中心を求める際に含めるべきもしくは使用から除外すべき関節のサブセットを識別してもよい。
動作612において、バウンディングボックスおよび質量中心の場所に基づいて、楕円形状のシャドウポリゴンを表面平面上に生成する。上述のように、楕円はバウンディングボックスの中に収まるようにサイズ決めされてもよく、質量中心の場所で交差する第1の軸および第2の軸を有してもよい。図7Fは楕円形状の(たとえば長円形状の)シャドウポリゴン714の一例を示す。
動作614において、質量中心の場所からのラジアルフォールオフに基づく透明度値を用いてシャドウポリゴンをレンダリングする。上述のように、ラジアルフォールオフは線形でも非線形でもよい。図7Gはレンダリングされた楕円形状のシャドウポリゴン716の一例を示す。
動作616において、レンダリングされたシャドウポリゴンの前にコンテンツを挿入する。影エンティティおよび挿入コンテンツの双方が動作602において取込まれた画像の上に重畳されて拡張画像が生成され得る。拡張画像750の一例を図7Hに示す。拡張画像750は、画像700の上に重畳されたコンテンツ704およびレンダリングされた楕円形状のシャドウポリゴン716を含む。
図8は、本明細書に記載の実装例に従う、挿入コンテンツについて影を生成する方法800の一例の図である。この方法800は、たとえばコンピューティングデバイス102によって行なわれてユーザ用のAR環境を提供してもよい。
動作802において、画像を取込む。たとえば、画像は、コンピューティングデバイス102などのコンピューティングデバイスのカメラアセンブリによって取込まれてもよい。取込まれた画像はテクスチャとして画像バッファ124に格納されてもよい。画像700の一例が図7Aに示されており、図9A〜図9Iに示される残りの例のためのベースとして用いられる。
動作804において、画像内で表面平面を識別する。上述のように、表面平面は画像内の地面または床に対応してもよい。画像700内に識別された表面平面902の一例を図9Aに示す。
動作806において、挿入されるコンテンツのための場所を決定する。いくつかの実装例では、コンテンツは、複数の関節を有する骨格によって少なくとも部分的に規定されるポリゴンメッシュを含む。上述のように、当該場所は、ユーザ入力、表面平面の場所、および/または以前の画像内のコンテンツの場所に基づくなど、さまざまな方法で決定されてもよい。図9Aは、画像700の上に重畳された、決定された場所の一例におけるコンテンツ904の一例を示す(図7Aでは画像700を挿入コンテンツなしで見ることができる)。図9Aには、動作812に関してさらに説明するシャドウポリゴン906も示されている。図9Bはコンテンツ904と関連付けられた骨格908を示す。骨格908は関節910を含む。
動作808において、複数の関節のうちの少なくともいくつかの関節を選択して複数の選択関節を生成する。図9Bは複数の選択関節914を識別する領域912を示す。この例では、関節は表面平面902までの距離に基づいて選択されている。いくつかの実装例では、関節は挿入コンテンツと関連付けられたデータ構造に基づいて選択される。たとえば、データ構造は、選択すべきまたは(たとえばこれらの関節が影に寄与しないように)選択すべきでないいくつかの関節を識別してもよい。
動作810において、複数の選択関節にフェードアウト値を割当てる。フェードアウト値は表面平面902からの距離に基づいていてもよい。図9Cは、表面平面902に対する複数の選択関節914の側面図を示す。示されるように、フェードアウト値は表面平面902からの距離が増加するにつれて増加する。
動作812において、コンテンツに基づいて表面平面上にシャドウポリゴンを生成する。シャドウポリゴンは多くの方法で生成されてもよい。たとえば、シャドウポリゴンは矩形であってもよく、骨格モデルの複数の関節全体のバウンディングボックスに基づいてサイズ決めされてもよい。シャドウポリゴンはまた、閉じた楕円のような形状を形成するように配置された、たとえば16本の辺から形成されたより丸みのある形状を有してもよい。シャドウポリゴン906の一例を図9Aのコンテンツ904の下に示す。
動作814において、シャドウポリゴンの画素について選択関節から影寄与値を求める。いくつかの実装例では、影寄与値は、各画素について選択関節毎に計算される。上述したように、特定の画素に対する特定の選択関節の影寄与値は、特定の選択関節のフェードアウト値、特定の選択関節から特定の画素までの距離、および選択画素に対する特定の選択関節の仰角など、さまざまな因子に基づき得る。図9Dは、シャドウポリゴン906からの画素916aおよび916bの一例を示す。図9Dには、複数の選択関節914からの選択関節914aおよび914bも示されている。
図9Eは、選択関節914aおよび914bに対する画素916aについての距離値およびオーバーヘッド角の概略例を示す。この例では、線918aaの長さは画素916aから選択関節914aまでの距離に対応し、線918abの長さは画素916aから選択関節914bまでの距離に対応する。この例には、シャドウポリゴン906の法線Nと(画素916aと選択関節914bとの間の)線918aaとの間のオーバーヘッド角Θaa、および法線Nと(画素916aと選択関節914bとの間の)線918abとの間のオーバーヘッド角Θabも示されている。
同様に、図9Fは、選択関節914aおよび914bに対する画素916bについての距離値およびオーバーヘッド角の概略例を示す。この例では、線918baの長さは画素916bから選択関節914aまでの距離に対応し、線918bbの長さは画素916bから選択関節914bまでの距離に対応する。この例には、シャドウポリゴン906の法線Nと(画素916bと選択関節914aとの間の)線918baとの間のオーバーヘッド角Θba、および法線Nと(画素916bと選択関節914bとの間の)線918bbとの間のオーバーヘッド角Θbbも示されている。
いくつかの実装例では、特定の選択画素に対する特定の選択関節の影寄与値は、距離に基づく値(たとえば、上述のような距離の逆数、立体角計算、または立体角計算の近似)と、オーバーヘッド角に基づく値(たとえば、いくつかの実装例では、特定の選択関節のフェードアウト値によってスケール変更されるオーバーヘッド角のコサイン値)との合計などの組合せに基づいている。
図9D〜図9Eの例はポリゴン906上の2つの画素と選択関節914のうちの2つとの間の影寄与値に関するが、これは図面を明確にするために過ぎない。上述のように、少なくともいくつかの実装例では、影寄与値はポリゴン906の各画素と各選択関節との間で求められる。いくつかの実装例では、GPUのレンダリングパイプライン内のシェーダが、影寄与値を求めるために必要な計算の少なくとも一部を行なってもよい。
動作816において、選択関節からの影寄与値同士を組合せて画素についての影強度値を生成する。影寄与値同士はさまざまな方法で組合されてもよい。たとえば、影寄与値同士は、特定の画素についての最大の影寄与を、その特定の画素についての各選択関節から影寄与値から選択することによって組合されてもよい。図9Gはポリゴン906の一例を示しており、画素916aおよび916bは影強度値の一例に基づいてシェーディングされている。
動作818において、影強度値を正規化する。たとえば、影強度値は、ガンマ関数を用いて所望の影プロファイルに正規化されてもよい。ガンマ関数は、動作816において求めた影強度値を、中間調の影を強調して暗い影を減少させる分布にマッピングしてもよい。
動作820において、正規化した影強度値にラジアルフォールオフを適用して、調整された影強度値を生成する。正規化した影強度値に適用されるラジアルフォールオフは線形でも非線形でもよい。ラジアルフォールオフによって、影の強さがシャドウポリゴンのエッジにおいて減少し得る。図9Hは、調整された影強度値をシャドウポリゴン906に適用することに基づく、レンダリングされたシャドウポリゴン930の一例を示す。
動作822において、影強度値を用いてシャドウポリゴンをレンダリングしてもよい。次に、影エンティティおよび挿入コンテンツの双方が動作802において取込まれた画像の上に重畳されて、拡張画像が生成され得る。拡張画像950の一例を図9Iに示す。拡張画像950は、画像700の上に重畳されたコンテンツ904およびレンダリングされたシャドウポリゴン930を含む。図9Iの例に示されるように、レンダリングされたシャドウポリゴン930は、選択された影関節に近接していることに基づいて、さらに暗い影領域を含む。
上述のように、影を生成する方法800は、それぞれ図5および図6で説明した方法500または方法600と組合せることができる。たとえば、レンダリングされたシャドウポリゴン930を、(図7Gからの)レンダリングされた楕円形状のシャドウポリゴン716と組合せて、組合されたシャドウポリゴンを生成することができる。
図10は、本明細書に記載の技法とともに用いられ得るコンピュータデバイス1000およびモバイルコンピュータデバイス1050の一例を示す。コンピューティングデバイス1000は、プロセッサ1002と、メモリ1004と、記憶装置1006と、メモリ1004および高速拡張ポート1010に接続する高速インターフェイス1008と、低速バス1014および記憶装置1006に接続する低速インターフェイス1012とを含む。コンポーネント1002,1004,1006,1008,1010および1012の各々は、さまざまなバスを使用して相互接続されており、共通のマザーボード上にまたはその他の態様で適宜搭載されてもよい。プロセッサ1002は、コンピューティングデバイス1000内で実行される命令を処理可能であり、当該命令は、GUIのためのグラフィカル情報を、高速インターフェイス1008に結合されたディスプレイ1016などの外部入出力デバイス上に表示するために、メモリ1004内または記憶装置1006上に格納された命令を含む。その他の実装例では、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数のタイプのメモリとともに適宜使用されてもよい。また、複数のコンピューティングデバイス1000が接続されてもよく、各デバイスは(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)必要な動作の一部を提供する。
メモリ1004は、情報をコンピューティングデバイス1000内に格納する。一実装例では、メモリ1004は1つまたは複数の揮発性メモリユニットである。別の実装例では、メモリ1004は1つまたは複数の不揮発性メモリユニットである。メモリ1004はまた、磁気ディスクまたは光ディスクといった別の形態のコンピュータ可読媒体であってもよい。
記憶装置1006は、コンピューティングデバイス1000のための大容量記憶を提供可能である。一実装例では、記憶装置1006は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくはその他の同様のソリッドステートメモリデバイス、または、ストレージエリアネットワークもしくはその他の構成におけるデバイスを含むデバイスのアレイといった、コンピュータ可読媒体であってもよいし、当該コンピュータ可読媒体を含んでもよい。コンピュータプログラムプロダクトが情報担体において有形に具体化され得る。コンピュータプログラムプロダクトはまた、実行されると上述の方法のような1つ以上の方法を行なう命令を含んでもよい。情報担体は、メモリ1004、記憶装置1006、またはプロセッサ1002上のメモリといった、コンピュータ可読媒体または機械可読媒体である。
高速コントローラ1008はコンピューティングデバイス1000のための帯域幅集約的な動作を管理するのに対して、低速コントローラ1012はより低い帯域幅集約的な動作を管理する。機能のそのような割当ては例示にすぎない。一実装例では、高速コントローラ1008は、メモリ1004、ディスプレイ1016に(たとえば、グラフィックスプロセッサまたはアクセラレータを介して)、および、さまざまな拡張カード(図示せず)を受付け得る高速拡張ポート1010に結合される。この実装例では、低速コントローラ1012は、記憶装置1006および低速拡張ポート1014に結合される。さまざまな通信ポート(たとえば、USB、Bluetooth、Ethernet(登録商標)、無線Ethernet)を含み得る低速拡張ポートは、キーボード、ポインティングデバイス、スキャナなどの1つ以上の入出力デバイスに、または、スイッチもしくはルータなどのネットワーキングデバイスに、たとえばネットワークアダプタを介して結合されてもよい。
コンピューティングデバイス1000は、図に示すように多くの異なる形態で実現されてもよい。たとえばそれは、標準サーバ1020として、またはそのようなサーバのグループで複数回実現されてもよい。それはまた、ラックサーバシステム1024の一部として実現されてもよい。加えて、それは、ラップトップコンピュータ1022などのパーソナルコンピュータにおいて実現されてもよい。これに代えて、コンピューティングデバイス1000からのコンポーネントは、デバイス1050などのモバイル機器(図示せず)におけるその他のコンポーネントと組合されてもよい。そのようなデバイスの各々は、コンピューティングデバイス1000,1050のうちの1つ以上を含んでもよく、システム全体が、互いに通信する複数のコンピューティングデバイス1000,1050で構成されてもよい。
コンピューティングデバイス1050は、数あるコンポーネントの中でも特に、プロセッサ1052と、メモリ1064と、ディスプレイ1054などの入出力デバイスと、通信インターフェイス1066と、送受信機1068とを含む。デバイス1050にはまた、追加の格納を提供するために、マイクロドライブまたはその他のデバイスなどの記憶装置が設けられてもよい。コンポーネント1050,1052,1064,1054,1066および1068の各々は、さまざまなバスを使用して相互接続されており、当該コンポーネントのうちのいくつかは、共通のマザーボード上にまたはその他の態様で適宜搭載されてもよい。
プロセッサ1052は、メモリ1064に格納された命令を含む、コンピューティングデバイス1050内の命令を実行可能である。プロセッサは、別個の複数のアナログプロセッサおよびデジタルプロセッサを含むチップのチップセットとして実現されてもよい。プロセッサは、たとえば、ユーザインターフェイス、デバイス1050が実行するアプリケーション、およびデバイス1050による無線通信の制御といった、デバイス1050のその他のコンポーネント同士の連携を提供してもよい。
プロセッサ1052は、ディスプレイ1054に結合された制御インターフェイス1058およびディスプレイインターフェイス1056を介してユーザと通信を行なってもよい。ディスプレイ1054は、たとえば、TFT LCD(Thin-Film-Transistor Liquid Crystal Display:薄膜トランジスタ液晶ディスプレイ)、またはOLED(Organic Light Emitting Diode:有機発光ダイオード)ディスプレイ、またはその他の適切なディスプレイ技術であってもよい。ディスプレイインターフェイス1056は、ディスプレイ1054を駆動してグラフィカル情報およびその他の情報をユーザに提示するための適切な回路を含んでもよい。制御インターフェイス1058は、ユーザからコマンドを受信し、それらをプロセッサ1052に送出するために変換してもよい。加えて、デバイス1050とその他のデバイスとの近接通信を可能にするように、外部インターフェイス1062がプロセッサ1052と通信した状態で提供されてもよい。外部インターフェイス1062は、たとえば、いくつかの実装例では有線通信を提供してもよく、またはその他の実装例では無線通信を提供してもよく、また複数のインターフェイスが使用されてもよい。
メモリ1064は、情報をコンピューティングデバイス1050内に格納する。メモリ1064は、1つもしくは複数のコンピュータ可読媒体、1つもしくは複数の揮発性メモリユニット、または、1つもしくは複数の不揮発性メモリユニット、の1つ以上として実現され得る。拡張メモリ1074も提供されて、拡張インターフェイス1072を介してデバイス1050に接続されてもよく、拡張インターフェイス1072は、たとえばSIMM(Single In-Line Memory Module)カードインターフェイスを含んでもよい。そのような拡張メモリ1074は、デバイス1050に余分の格納スペースを提供してもよく、または、デバイス1050のためのアプリケーションもしくはその他の情報も格納してもよい。具体的には、拡張メモリ1074は、上述のプロセスを実行または補足するための命令を含んでもよく、セキュアな情報も含んでもよい。このため、たとえば、拡張メモリ1074はデバイス1050のためのセキュリティモジュールとして提供されてもよく、デバイス1050のセキュアな使用を許可する命令でプログラムされてもよい。加えて、ハッキング不可能な態様でSIMMカード上に識別情報を乗せるといったように、セキュアなアプリケーションが追加情報とともにSIMMカードを介して提供されてもよい。
メモリはたとえば、以下に述べるように、フラッシュメモリおよび/またはNVRAMメモリを含んでもよい。一実装例では、コンピュータプログラムプロダクトが情報担体において有形に具体化される。コンピュータプログラムプロダクトは、実行されると上述の方法のような1つ以上の方法を行なう命令を含む。情報担体は、メモリ1064、拡張メモリ1074、またはプロセッサ1052上のメモリといった、コンピュータ可読媒体または機械可読媒体であり、たとえば送受信機1068または外部インターフェイス1062を通して受信され得る。
デバイス1050は、必要に応じてデジタル信号処理回路を含み得る通信インターフェイス1066を通して無線通信を行なってもよい。通信インターフェイス1066は、とりわけ、GSM(登録商標)音声通話、SMS、EMS、またはMMSメッセージング、CDMA、TDMA、PDC、WCDMA(登録商標)、CDMA2000、またはGPRSといった、さまざまなモードまたはプロトコル下での通信を提供してもよい。そのような通信は、たとえば、無線周波数送受信機1068を介して生じてもよい。加えて、Bluetooth、Wi−Fi、またはその他のそのような送受信機(図示せず)を使用するなどして、短距離通信が生じてもよい。加えて、GPS(Global Positioning System:全地球測位システム)受信機モジュール1070が、追加のナビゲーション関連および位置関連の無線データをデバイス1050に提供してもよく、このデータは、デバイス1050上で実行されるアプリケーションによって適宜使用されてもよい。
デバイス1050はまた、ユーザから口頭情報を受信してそれを使用可能なデジタル情報に変換し得る音声コーデック1060を使用して、音声通信を行なってもよい。音声コーデック1060は同様に、たとえばデバイス1050のハンドセットにおいて、スピーカを介すなどして、ユーザに聞こえる音を生成してもよい。そのような音は、音声電話からの音声を含んでもよく、録音された音(たとえば、音声メッセージ、音楽ファイルなど)を含んでもよく、またデバイス1050上で動作するアプリケーションが生成する音を含んでもよい。
コンピューティングデバイス1050は、図に示すように多くの異なる形態で実現されてもよい。たとえばそれは、携帯電話1080として実現されてもよい。それはまた、スマートフォン1082、携帯情報端末、またはその他の同様のモバイル機器の一部として実現されてもよい。
本明細書に記載のシステムおよび技法のさまざまな実装例は、デジタル電子回路、集積回路、特別設計されたASIC(application specific integrated circuit:特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合せにおいて実現され得る。これらのさまざまな実装例は、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムにおける実装例を含み得る。このプロセッサは専用であっても汎用であってもよく、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信するとともに、これらにデータおよび命令を送信するように結合されてもよい。
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても公知)は、プログラマブルプロセッサのための機械命令を含んでおり、高レベル手続き型言語および/もしくはオブジェクト指向プログラミング言語で、ならびに/またはアセンブリ/機械言語で実現され得る。本明細書において使用する「機械可読媒体」「コンピュータ可読媒体」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(Programmable Logic Device:PLD))を指し、機械命令を機械可読信号として受信する機械可読媒体を含む。「機械可読信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
ユーザとの対話を提供するために、本明細書に記載のシステムおよび技法は、情報をユーザに表示するためのディスプレイ装置(LED(発光ダイオード)、またはOLED(有機LED)、もしくはLCD(液晶ディスプレイ)モニタ/スクリーン)と、ユーザが入力をコンピュータに提供できるようにするキーボードおよびポインティングデバイス(たとえば、マウスまたはトラックボール)とを有するコンピュータ上で実現され得る。その他の種類のデバイスを使用してユーザとの対話を提供することもできる。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であり得る。ユーザからの入力は、音響入力、音声入力、または触覚入力を含む任意の形態で受信され得る。
本明細書に記載のシステムおよび技法は、(たとえばデータサーバとしての)バックエンドコンポーネントを含む、またはミドルウェアコンポーネント(たとえばアプリケーションサーバ)を含む、またはフロントエンドコンポーネント(たとえば、ユーザが本明細書に記載のシステムおよび技法の実装例と対話できるようにするグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータ)を含む、または、そのようなバックエンドコンポーネント、ミドルウェアコンポーネント、もしくはフロントエンドコンポーネントの任意の組合せを含む、コンピューティングシステムにおいて実現され得る。システムのコンポーネントは、任意の形態または媒体のデジタルデータ通信(たとえば通信ネットワーク)によって相互接続され得る。通信ネットワークの例として、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、およびインターネットがある。
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは一般に互いにリモートであり、典型的には通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。
いくつかの実装例では、図10に示されるコンピューティングデバイスは、ARヘッドセット/HMDデバイス1090とインターフェイス接続して物理的空間の内部の挿入コンテンツを見るための拡張環境を生成するセンサを含み得る。たとえば、図10に示されるコンピューティングデバイス1050またはその他のコンピューティングデバイス上に含まれる1つ以上のセンサは、入力をARヘッドセット1090に提供し得、または一般に、入力をAR空間に提供し得る。センサは、タッチスクリーン、加速度計、ジャイロスコープ、圧力センサ、生体認証センサ、温度センサ、湿度センサ、および周囲光センサを含み得るものの、それらに限定されない。コンピューティングデバイス1050はこれらのセンサを使用して、AR空間におけるコンピューティングデバイスの絶対位置および/または検出された回転を判断可能である。当該位置および/または回転は次に、AR空間への入力として使用され得る。たとえば、コンピューティングデバイス1050は、コントローラ、レーザポインタ、キーボード、武器などの仮想オブジェクトとしてAR空間に組込まれてもよい。AR空間に組込まれた場合のコンピューティングデバイス/仮想オブジェクトのユーザによる位置付けは、ユーザが、AR空間において仮想オブジェクトをある態様で見るようにコンピューティングデバイスを位置付けることを可能にし得る。たとえば、仮想オブジェクトがレーザポインタを表わす場合、ユーザは、コンピューティングデバイスを、実際のレーザポインタであるかのように操作することができる。ユーザはコンピューティングデバイスをたとえば左右に、上下に、円形に動かして、レーザポインタを使用するのと同様の態様でデバイスを使用することができる。
いくつかの実装例では、コンピューティングデバイス1050上に含まれるまたはコンピューティングデバイス1050に接続される1つ以上の入力デバイスは、AR空間への入力として使用され得る。入力デバイスは、タッチスクリーン、キーボード、1つ以上のボタン、トラックパッド、タッチパッド、ポインティングデバイス、マウス、トラックボール、ジョイスティック、カメラ、マイク、入力機能性を有するイヤホンもしくは小型イヤホン、ゲーミングコントローラ、またはその他の接続可能な入力デバイスを含み得るものの、それらに限定されない。コンピューティングデバイスがAR空間に組込まれた場合にコンピューティングデバイス1050上に含まれる入力デバイスと対話するユーザは、特定のアクションをAR空間に生じさせることができる。
いくつかの実装例では、コンピューティングデバイス1050のタッチスクリーンは、AR空間においてタッチパッドとしてレンダリングされ得る。ユーザは、コンピューティングデバイス1050のタッチスクリーンと対話することができる。対話は、たとえばARヘッドセット1090において、AR空間におけるレンダリングされたタッチパッド上の動きとしてレンダリングされる。レンダリングされた動きは、AR空間において仮想オブジェクトを制御することができる。
いくつかの実装例では、コンピューティングデバイス1050上に含まれる1つ以上の出力デバイスは、AR空間においてARヘッドセット1090のユーザに出力および/またはフィードバックを提供することができる。出力およびフィードバックは、視覚、触覚、または音声によるものであり得る。出力および/またはフィードバックは、振動、1つ以上のライトまたはストロボをオンオフすることもしくは点滅および/または明滅させること、アラームを鳴らすこと、チャイムを鳴らすこと、歌を演奏すること、ならびに音声ファイルを演奏することを含み得るものの、それらに限定されない。出力デバイスは、振動モータ、振動コイル、圧電デバイス、静電デバイス、発光ダイオード(LED)、ストロボ、およびスピーカを含み得るものの、それらに限定されない。
いくつかの実装例では、コンピューティングデバイス1050は、コンピュータが生成した3D環境において別のオブジェクトのように見えてもよい。ユーザによるコンピューティングデバイス1050との対話(たとえば、タッチスクリーンを回転させること、振動させること、タッチスクリーンに触れること、指でタッチスクリーンをスワイプすること)は、AR空間におけるオブジェクトとの対話と解釈され得る。AR空間におけるレーザポインタの例では、コンピューティングデバイス1050は、コンピュータが生成した3D環境において仮想レーザポインタのように見える。ユーザがコンピューティングデバイス1050を操作すると、ユーザはAR空間においてレーザポインタの動きを見る。ユーザは、コンピューティングデバイス1050上またはARヘッドセット1090上で、AR環境におけるコンピューティングデバイス1050との対話からフィードバックを受信する。
いくつかの実装例では、コンピューティングデバイス1050はタッチスクリーンを含んでもよい。たとえば、ユーザは、タッチスクリーン上で生じることを模倣してAR空間内で生じさせることができる特定のやり方で、タッチスクリーンと対話することができる。たとえば、ユーザは、つまむ(pinching)タイプの動きを用いて、タッチスクリーン上に表示されているコンテンツの大きさを変えてもよい。このタッチスクリーン上におけるつまむタイプの動きは、AR空間内で提供されている情報の大きさを変えることができる。別の例において、コンピューティングデバイスは、コンピュータによって生成された3D環境における仮想ブックとしてレンダリングされてもよい。AR空間では、このブックのページがAR空間に表示され、ユーザの指でタッチスクリーンをスワイプすることは、仮想ブックのページを裏返す/めくることと解釈され得る。各ページを裏返す/めくると、ページの内容が変わるのが見え、それに加えて、本のページを裏返す音などの音声フィードバックがユーザに提供されてもよい。
いくつかの実装例では、コンピューティングデバイスに加えて1つ以上の入力デバイス(たとえばマウス、キーボード)が、コンピュータが生成した3D環境においてレンダリングされ得る。レンダリングされた入力デバイス(たとえば、レンダリングされたマウス、レンダリングされたキーボード)は、AR空間においてオブジェクトを制御するために、AR空間においてレンダリングされたとして使用され得る。
コンピューティングデバイス1000は、さまざまな形態のデジタルコンピュータおよびデバイスを表わすよう意図されている。これらのデジタルコンピュータおよびデバイスは、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、およびその他の適切なコンピュータを含むものの、それらに限定されない。コンピューティングデバイス1050は、携帯情報端末、携帯電話、スマートフォン、およびその他の同様のコンピューティングデバイスといった、さまざまな形態のモバイル機器を表わすよう意図されている。ここに示すコンポーネント、それらの接続および関係、ならびにそれらの機能は、単なる例示であるよう意図されており、本文書に記載のおよび/または特許請求の範囲に記載の本発明の実装例を限定するよう意図されてはいない。
多くの実施形態を説明してきた。しかしながら、明細書の精神および範囲から逸脱することなくさまざまな変形がなされ得ることが理解されるであろう。
加えて、図面に示す論理フローは、所望の結果を達成するために、示された特定の順序または順番を必要としない。加えて、説明されたフローに対してその他のステップが提供されてもよく、またはステップが除去されてもよく、説明されたシステムに対してその他のコンポーネントが追加されてもよく、または除去されてもよい。したがって、その他の実施形態は以下の特許請求の範囲内にある。
本明細書に記載の通り、記載されている実装例の特定の特徴を説明してきたが、ここで、当業者は、数多くの変形、代替形、変更、および均等物を想到するであろう。したがって、以下の特許請求の範囲が、すべてのこのような変形および変更を実装例の範囲に含まれるとしてカバーすることを意図していることが、理解されるであろう。これらの実装例は限定ではなく専ら例示を目的として示されており形態および詳細事項にさまざまな変更を加えることができることが、理解されねばならない。本明細書に記載の装置および/または方法はいずれの部分も、相互に相容れない組合せを除いて、何らかの組合せが可能である。本明細書に記載の実装例は、記載されているさまざまな実装例の機能、構成要素および/または特徴のさまざまな組合せおよび/または下位の組合せを含み得る。