以下の説明では、ある具体的詳細が、種々の開示される実施形態の完全な理解を提供するために記載される。しかしながら、当業者は、実施形態が、これらの具体的詳細のうちの1つ以上のものを伴わずに、または他の方法、コンポーネント、材料等を用いて、実践されてもよいことを認識するであろう。他のインスタンスでは、コンピュータシステム、サーバコンピュータ、および/または通信ネットワークと関連付けられる、周知の構造は、実施形態の説明を不必要に曖昧にすることを回避するために、示されていない、または詳細に説明されていない。
文脈によって別様に要求されない限り、続く明細書および請求項全体を通して、単語「comprise(~を備える)」および「comprises(~を備える)」および「comprising(~を備える)」等のその変形例は、非制限的包含的意味において、「限定ではないが、~を含む」ものとして解釈されるものとすることに留意されたい。
さらに、本明細書全体を通して、「一実施形態」または「ある実施形態」の言及は、実施形態に関連して説明される特定の特徴、構造、または特性が、少なくとも一実施形態に含まれることを意味することに留意されたい。したがって、本明細書全体を通した種々の場所における、語句「一実施形態では」または「ある実施形態では」の表出は、必ずしも、全て同一実施形態を参照するわけではない。さらに、特定の特徴、構造、または特性は、1つ以上の実施形態では、任意の好適な様式において組み合わせられてもよい。さらに、本明細書および添付の請求項で使用されるように、単数形「a」、「an」、および「the」は、文脈によって別様に明確に記載されない限り、複数の参照を含む。また、用語「または」は、概して、文脈によって別様に明確に記載されない限り、「および/または」を含む、その意味において採用されることに留意されたい。
種々の技法は、種々の実施形態では、仮想現実(「VR」)、拡張現実(「AR」)、複合現実(「MR」)、および/またはエクステンデッドリアリティ(「XR」)システム(集合的に、「XRシステム」と称される)を用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示することを対象とする。
これらの種々の実施形態では、VRシステムは、仮想現実またはコンピュータシミュレートされた現実内で没入型の体験を提供するように考案および構成される。仮想現実システムは、例えば、現実ヘッドセットを使用して、シミュレートされたものであるが、実環境を複製する、または想像上の世界を作成する、現実的音、画像、および他の感覚を生成する、コンピュータ技術を採用する。ARシステムは、その要素が、音、ビデオ、グラフィック、または感覚データ(例えば、GPSデータ等)等のコンピュータ生成感覚入力によって拡張(または補完)される、物理的実世界環境のライブ、直接、または間接ビューを提供するように考案および構成される。拡張現実は、物理的実世界環境の上に存在するため、本明細書に説明されるARシステムは、ユーザがユーザの通常生活内で与えられるものと同程度の自由度を提供する。本明細書に説明されるMRシステムは、ハイブリッド現実を提供し、実および仮想世界をマージし、物理的およびデジタルオブジェクトが、共存し、リアルタイムまたはほぼリアルタイム(例えば、信号伝送、処理時間における時間差等を考慮するために)で相互作用する、新しい環境および可視化を生産する。本明細書に提供されるMRシステムは、新しい画像が、少なくともある程度、物理的世界内に実際にあるものと相互作用することが可能であるような方法において、新しい画像を実空間内に提供する。説明されるMRシステムの特性のうちの1つは、合成コンテンツおよび実世界コンテンツが、リアルタイムまたはほぼリアルタイムで(例えば、信号伝送、処理時間における時間差等を考慮するために)、相互に反応することが可能であることである。本明細書に提供されるエクステンデッドリアリティまたはXRシステムは、コンピュータ技術およびデバイス(例えば、ウェアラブル電子機器等)によって生成される、あらゆるまたはほぼあらゆる現実および仮想の組み合わせられた環境およびヒューマンマシン相互作用を提供する。本明細書に提供されるエクステンデッドリアリティシステムは、ARシステム、VRシステム、およびMRシステムのようなあらゆるまたはほぼあらゆる描写形態を提供するように考案および/または構成される。いくつかの実施形態では、用語「XR」は、全3つの現実(AR、VR、MR)を1つの用語下で合体させる、包括語として使用される。
いくつかの実施形態では、本システムは、少なくとも、複合現実装置と、ブラウザエンジンと、ユニバースブラウザエンジンとを含み、ウェブサイトと相互作用する。これらの実施形態のうちのいくつかでは、ウェブサイトの開発者は、本明細書に説明される1つ以上の実施形態に関するアプリケーションプログラミングインターフェース(API)のセットを、ウェブサイトのコードの中に組み込んでもよく、APIの本セットは、ブラウザと通信し、ウェブページの位置および回転を取得および設定する。開発者は、開発者が、エンドユーザに、APIの本セットを通して知覚することを所望するであろう、位置および回転データ(例えば、x-、y-、およびz-座標)をウェブページの3次元空間内に設定してもよい。
いくつかの他の実施形態では、APIの前述のセット内のいくつかまたは全てのAPIは、ウェブページの画像データを仮想コンテンツとしてユーザの眼に投影する、複合現実システムの一部である、ブラウザエンジンおよび/またはユニバースブラウザエンジン内にホストされる、またはそれによってローカルで参照されてもよい。APIの本セットは、例えば、ウェブページのための3次元位置データを設定および取得する、第1のAPIと、ウェブページのための3次元回転データを設定および取得する、第2のAPIとを含んでもよい。用語「ウェブページ」および「ウェブページパネル」は、本願では、同義的に使用され得るが、厳密には、ウェブページパネルは、ウェブページまたはその一部がそのコンテンツを表示するためのブラウザウィンドウ内の2および/または3次元領域を含むことに留意されたい。
例示的ユースケースは、複合現実システムのユーザが、ブラウザを開き、ウェブサイトのURLまたは検索基準を指定されたフィールド内で打ち込む、シナリオを含む。本明細書に説明される種々の実施形態は、ユニバースブラウザエンジンが、ブラウザエンジンと連動して機能し、特定のウェブページのためのHTMLコードに基づいて、仮想3次元空間内の個々のウェブページの回転および/または位置を調節することを可能にする。
より具体的には、前述の実施例では、ユーザが、ユーザの複合現実システム内でブラウザを立ち上げると、ブラウザは、ウェブサイトとユニバースエンジンとの間の中間体として作用する。ブラウザエンジンは、いくつかの実施形態では、記憶された位置および回転データを使用することによって、要求されるウェブページのための位置および回転データ(例えば、x-、y-、およびz-座標)を更新する。これらの実施形態のうちのいくつかでは、ユニバースブラウザエンジンは、ウェブページパネルの位置および回転データをブラウザエンジン内に記憶してもよい(ウェブページを表示するために)。Chromium’s Blinkが、ブラウザエンジンとして使用される、ある実施例では、ユニバースブラウザエンジンは、位置および回転データをRenderWidgetクラス内に記憶してもよい。
ブラウザエンジンを用いて、位置および回転データを記憶する目的のうちの1つは、ブラウザが、例えば、位置および/または回転データをユニバースブラウザから取得することからのさらなる遅延を伴わずに、ウェブサイトを形成するウェブページを位置付けるおよび/または回転させるための要求に応答して、本最も最近キャッシュされた位置および回転データをウェブサイトに迅速に通信し得ることである。RenderWidgetは、Chromiumプロジェクト、WebKit等内のクラスであって、抽象インターフェース(例えば、仮想3次元空間内の2次元ウィンドウまたは3次元ボリューム)を複合現実ディスプレイ内に実装し、入力イベントを受信し、コンテンツをその中にペイントまたはレンダリングする。
ウェブページの開発者が、ウェブページのための位置および回転データをすでに設定している、いくつかの実施形態では、ブラウザエンジンは、ウェブページのための位置および回転データが、レンダリングされるように設定し、位置および回転データを、複合現実システムの一部であって、ユーザとインターフェースをとる、ユニバースブラウザエンジンにパスしてもよい。ブラウザエンジンおよびユニバースブラウザエンジンは、位置および回転データを同期させてもよい。ブラウザエンジンは、次いで、関数コールを呼び出し、位置および回転データを使用することによって、ウェブページをレンダリングしてもよい。
いくつかの実施形態では、ユーザはさらに、例えば、ディスプレイ上のウェブページまたはウェブページパネルと関連付けられる、位置付けハンドルおよび/または回転ハンドルを操作することにより、例えば、3次元仮想空間内のディスプレイ(例えば、後により詳細に説明されるであろう、プリズム)上のウェブページパネルまたはさらにウェブページを再位置付けおよび/または回転させることによって、ウェブページパネルを操作してもよい。これらの実施形態では、ユーザは、ウェブページの位置および/または回転を事実上変化させ、ユニバースブラウザエンジンはまた、新しい位置および/または回転データをブラウザエンジンと同期させてもよい。
いくつかの実施形態では、複合現実システムは、ブラウザエンジンによって所望のウェブページをレンダリングする前に、プレースホルダ(例えば、部分的または完全境界を伴う、中実または半透明境界ボックスまたは透明境界ボックス)を仮想3次元空間内に表示してもよい。いくつかの他の実施形態では、所望のウェブページのミニビューが、ウェブページの完全レンダリングの前に、最初に、仮想3次元空間に提示されてもよい。さらにいくつかの他の実施形態では、ウェブページは、開発者またはエンドユーザのいずれかによる、任意の変更が、ウェブページの位置および/または回転を変化させるために実施される前に、仮想3次元空間内に、3次元座標とともに、完全にレンダリングおよび表示されてもよい。
種々の実施形態が、ここで、当業者が本発明を実践することを可能にするように、本発明の例証的実施例として提供される、図面を参照して、詳細に説明されるであろう。着目すべきこととして、下記の図および実施例は、本発明の範囲を限定することを意味するものではない。本発明のある要素は、部分的または完全に、公知のコンポーネント(または方法またはプロセス)を使用して実装され得る場合、本発明の理解のために必要なそのような公知のコンポーネント(または方法またはプロセス)のそれらの部分のみが、説明され、そのような公知のコンポーネント(または方法またはプロセス)の他の部分の詳細な説明は、本発明を不明瞭にしないように、省略されるであろう。さらに、種々の実施形態は、例証として本明細書で参照されるコンポーネントの現在および将来的公知の均等物を包含する。
図1Aは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するために、ウェブサイトと相互作用する、簡略化されたシステムの高レベルブロック図を図示する。より具体的には、ユニバースブラウザエンジン106Aが、ウェブページの位置および回転データをブラウザエンジン104Aに伝送し、そのようなデータをブラウザエンジン104A内に記憶し得る。ユニバースブラウザエンジン(例えば、106A)は、ラップトップまたはデスクトップコンピュータのディスプレイ画面上に表示される2Dウィンドウを管理するためにラップトップまたはデスクトップコンピュータ上で起動する、2Dウィンドウマネージャに類似する、3Dウィンドウマネージャとしての役割を果たし得る。
ユニバースブラウザエンジンと連動して機能する、ユニバースブラウザエンジンまたはアプリケーション(例えば、106A)はまた、複合現実システムを介して、ユーザのランドスケープ内の仮想コンテンツの生成、設置、および表示を管理する。ブラウザエンジン104Aが、ウェブサイト102Aのウェブページまたはその中のコンテンツを表示するために初期化すると(例えば、ユーザが、ブラウザを立ち上げると)、ブラウザ102Aは、ウェブサイトが、位置および回転データをクライアントのブラウザに設定し、位置および回転データをクライアントブラウザ(108A)から取得することの両方を行うようにコーディングされる、APIのセットを組み込むようにコーディングされるとき、ウェブページの位置および回転データが、ブラウザエンジン104Aによってレンダリングされるように設定してもよい。
いくつかの実施形態では、ユニバースブラウザエンジンは、3Dウィンドウマネージャの機能を提供し、表示されるべき仮想コンテンツ(例えば、方法および場所)、およびより詳細に説明されるであろう、プリズムがエクステンデッドリアリティシステムのために生成されるべき方法および場所を管理する。例えば、ユニバースブラウザエンジンは、持続機能性を提供してもよい。非限定的実施例として、ユーザの台所のカウンタ上に設置されたエンティティ(例えば、ソフトウェアアプリケーションまたはそのインスタンス、仮想オブジェクト等)は、ユーザがエンティティの設置を変化させない限り、かつそれまで、台所のカウンタ上に現れ得る。ユーザは、いくつかの実施形態では、システムが、オン/オフにされる度に、またはユーザが、部屋から退出し、戻って来る度に、エンティティを再び立ち上げる必要がなくてもよい。これらの実施形態では、ユニバースブラウザエンジンは、プリズム情報またはデータをパス可能世界内に記憶し、ユニバースブラウザエンジンは、ユーザが、エクステンデッドリアリティシステムを使用し、ユーザの台所内のエンティティアプリケーションに近接近する度に、ユーザの台所上に設置されたエンティティを再開してもよい。
ユニバースブラウザエンジンはまた、ユニバースブラウザエンジンを含む、XRシステムのユーザに対して、ソフトウェアアプリケーション(またはそのインスタンス)の状態を維持または変化させてもよい。例えば、アプリケーションは、任意の明示的ユーザアクションを要求せずに、自動的に、開始、中断/一時停止、および/または再開してもよい。これは、アプリケーションの動作状態を変化させるために、ユーザ相互作用(例えば、ユーザが「閉じる」ボタンをクリックする)が要求される、2Dウィンドウマネージャと対照的である。本側面は、アプリケーションの状態を変化させるために、ユーザ相互作用(例えば、ユーザがアプリケーションの「閉じる」ボタンをクリックする)を要求する、他のウィンドウマネージャとも異なる。また、他のウィンドウと異なり、3Dプリズム(またはさらに、その中にプリズムが常駐する、3D仮想空間)は、双方向およびプライベートの両方であってもよい。例えば、ユニバースブラウザエンジンは、プリズム(または3D仮想空間)のプライバシおよび双方向特徴の両方を有効にしてもよい。対照的に、従来のウィンドウは、双方向またはプライベートのいずれかであって、双方向およびプライベートの両方であることができない。
ブラウザエンジンは、多くの場合、HTMLおよび/またはウェブページの他のリソースをユーザのデバイス(例えば、複合現実ヘッドセット)上の双方向視覚的表現に変換すること等のタスクを実施する、ウェブブラウザのソフトウェアコンポーネントである。以下の説明は、ChromiumまたはChromiumベースのブラウザを参照し得るが、他のブラウザ(例えば、MozillaのFirefox、AppleのSafari、MicrosoftのEdgeおよびInternet Explorer、GoogleのChrome、Opera、3Dブラウザ等)もまた、検討され、その個別のブラウザエンジンに対応する、異なるブラウザと完全に等しい効果を伴う、技法にも適用される(例えば、MozillaのためのGecko、SafariのためのWebKit、ChromiumのためのBlink、Chromiumベースのブラウザ、MicrosoftのEdge、およびOpera、およびInternet ExplorerのためのTrident等)
ブラウザエンジン104Aは、直上で述べられたブラウザまたは任意のカスタムブラウザ(例えば、3Dブラウザ)等の任意の公的に入手可能なブラウザを含んでもよい。ブラウザエンジン104Aの機能のうちの1つは、例えば、ウェブページのための位置および回転データを用いて、HTMLドキュメントおよびウェブページの他のリソースをユーザのデバイス上の双方向視覚的表現に変換する、ウェブサイトまたはユニバースブラウザエンジン106Aのいずれかによって提供される位置および回転データを使用して、視覚的表現のためのグラフィカル座標を計算する、プリズム(またはその一部)をペイントまたはレンダリングすること等を含む、機能を提供することである。
本明細書に説明されるウェブページを管理および表示するための1つ以上の実施形態に関するAPIの本セットは、ポータブルオペレーティングシステムインターフェース(POSIX)API規格に準拠し、プラットフォームまたはオペレーティングシステムから独立して、空間コンピューティング機能性を提供する、APIを含んでもよい。APIの本セットは、上記で前述されるように、いくつかの実施形態では、ウェブサイトのコードの中に組み込まれてもよく、および/またはいくつかの他の実施形態では、複合現実システム上に常駐する、オペレーティングシステムまたはソフトウェアアプリケーションの一部の中に統合されてもよい。
APIの本セットは、ウェブサイト102Aと、ブラウザエンジン104Aと、ユニバースブラウザエンジン106Aとの間で位置および回転データを設定および取得するだけではなく、また、オペレーティングシステムとソフトウェアアプリケーションとの間のランタイム層および1つ以上の3Dエンジンとも併せて(またはオペレーティングシステムサービス層とソフトウェアアプリケーションとの間では、より精密に)機能する。本ランタイム層は、ライブラリ、アプリケーション、サービス等を含み、下層複合現実システムのための高度なグラフィカルユーザインターフェース、および3次元平行移動および回転変換、材料および骨格3Dモデルアニメーションを伴う3Dモデル、2Dスプライトアニメーション、空間コンピューティングのための高忠実性空間化テキストレンダリング、2Dおよびサウンドフィールドオーディオ、2Dおよび立体視ビデオ、剛体衝突物理学、リアルタイム粒子FX、入力イベントおよび触知制御、手のジェスチャ、発話認識および発話/テキスト変換、オブジェクト、照明、陰影、および実世界オクルージョンをレンダリングするためのリアルタイム空間コンピューティング技術等の種々のコンピューティング機能性を提供する(単独で、または3Dエンジンと併せてのいずれかで)。
例えば、本ランタイム層は、仮想オブジェクト、ブラウザウィンドウ、レンダリングされたウェブページ等、または任意のその属性(例えば、ディスプレイ座標、サイズ、形状、遠近感、照明効果等)が、ユーザによって現実またはほぼ現実であるように現れる、またはそのように知覚されるように、仮想3次元空間内に表示される、例えば、プリズム(後に説明されるであろう)、仮想オブジェクト、ブラウザウィンドウ、レンダリングされたウェブページ等に適用され得る、3次元平行移動および回転変換のセットを含んでもよい。これらの変換についてのさらなる詳細は、下記の図2E-2Iを参照して後に説明されるであろう。
図1Aに戻ると、APIのセットを用いて、ウェブサイト102Aは、ブラウザエンジン104Aから位置および/または回転要求を送信してもよい(112A)。この場合、ブラウザエンジン104Aは、直近の位置および回転データをウェブサイトに伝送してもよい(114A)。上記に説明されるように、ユニバースブラウザエンジン106Aは、ブラウザエンジン104Aが、例えば、そのような位置および回転データをユニバースブラウザエンジン106Aから取得することからの付加的遅延を伴わずに、ウェブサイト102Aからのそのような要求に応答し得るように、ブラウザエンジン104A内に、またはそれを用いて(例えば、ブラウザエンジン104Aによってアクセス可能なキャッシュ内に)、位置および回転データを記憶してもよい。
最新位置および回転データをウェブサイト102Aに返すことに加え(114A)、ブラウザエンジン104Aは、位置および回転データを、単独で、またはレンダリングされたウェブページとともにのいずれかで、ユニバースブラウザエンジン106Aに伝送してもよい(110A)。ユニバースブラウザエンジン106Aは、部分的または全体的に、110Aを介して受信された位置および回転データに基づいて、プリズム(またはそのより小さい仮想3Dボリューム)を作成または識別し、ユニバースブラウザエンジン106Aは、位置および回転データ(116A)をブラウザエンジン(104A)と同期させる。ユニバースブラウザエンジン106Aは、ブラウザエンジン104Aをコールし、その本来の機能、ライブラリ、および/またはAPI(例えば、ChromiumまたはWebKitにおけるRenderWidget、OpenGL API、OpenGL ES2.0API等、Almost Native Graphics Layer Engine、Direct3D API、WebGL、Gfx API等、またはそれらの任意の組み合わせ)を呼び出し、表示のために、位置および回転データに基づいて、ウェブページのコンテンツをプリズムまたはその一部内にレンダリングしてもよい。
いくつかの実施形態では、ユニバースブラウザエンジンは、オペレーティングシステムスタック内のオペレーティングシステムコアおよびオペレーティングシステムサービスの上方で起動される、1つ以上の3Dエンジンを呼び出し、3Dコンテンツをレンダリングしてもよい。これらの1つ以上の3Dエンジンは、3Dおよび/または2Dグラフィックのための任意のカスタム3Dエンジンである、グラフィック処理ユニット(GPU)の抽象化層を提供する、商業的または公的に入手可能な3Dエンジン(例えば、Unreal Engine4、Unreal Engine3、CryEngine V、Unity 3D、Source Engine、Source Engine2等)を含んでもよい。これらの実施形態のうちのいくつかでは、複合現実システムは、3Dエンジン全体を組み込む必要はない。むしろ、複合現実システムは、レンダリングエンジンまたはレンダリングAPI、物理法則をエミュレートするための物理学エンジン、JavaScript(登録商標)スクリプト等のスクリプトを解析および実行するためのスクリプトエンジン、メモリ管理モジュール、および/またはスレッドモジュール等のより小さい部分を組み込んでもよい。いくつかの実施形態では、本明細書に説明される複合現実システムは、2Dコンテンツをレンダリングするためのレンダラと、3Dグラフィックをレンダリングするための別個のレンダラとを呼び出してもよい。
ユーザはさらに、複合現実システムを通して、仮想3D空間内に表示されるウェブページの位置および/または回転を改変してもよい。例えば、ユーザは、それぞれ、表示されるウェブページ、そのためのプレースホルダ、またはウェブページのミニプレビューバージョンを位置付け、回転させることと関連付けられる、ソフトウェアハンドルを握持することによって、表示されるウェブページ、そのためのプレースホルダ、またはウェブページのミニプレビューバージョンを自由に移動および/または回転させてもよい。ウェブページの位置および/または回転データは、したがって、修正され、ユニバースブラウザエンジン106Aはさらに、位置および/または回転データをブラウザエンジン104Aと同期させてもよい(116A)。その時点で、ブラウザエンジン104Aは、次いで、オリジナル位置および/または回転データと本修正された位置および/または回転データを置換する。
図1Bは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するために、ウェブサイトと相互作用する、簡略化されたシステムの別の高レベルブロック図を図示する。より具体的には、図1Bは、いくつかの実施形態における、ウェブページのためのブラウザパネル102Bと、ブラウザエンジン104Bと、ユニバースブラウザエンジン106Bとの間の相互作用と、ブラウザ102B、ブラウザエンジン104B、およびユニバースブラウザエンジン106Bによって実施される、個別のタスクおよび機能とを図示する。ブラウザまたはウェブブラウザは、ウェブリソース(例えば、個々のウェブページ、画像、ビデオ等)が、統一資源ロケータによって識別され、ウェブブラウザが、これらのウェブリソースをウェブサーバから読み出し、それらをユーザのデバイス上に表示することを可能にする、ワールドワイドウェブに関する情報にアクセスするためのソフトウェアアプリケーションである。ブラウザエンジンは、HTMLおよび/またはウェブページの他のリソースをユーザのデバイス(例えば、複合現実ヘッドセット)上の双方向視覚的表現に変換すること等のタスクを実施する、ウェブブラウザのソフトウェアコンポーネントである。本明細書に説明される種々の実施形態は、開発者およびユーザが、少なくとも、APIの前述のセットと、複合現実システムと、ソフトウェアアプリケーションおよびライブラリ(例えば、ユニバースブラウザエンジン)とを使用することによって、インターネットコンテンツを管理および表示し、ウェブリソースを利用するために、任意の公的または商業的に利用可能なブラウザおよびその個別のエンジンを活用する。
ウェブサイトは、着目ウェブページまたはウェブページのパネルのための位置、回転、および/またはスケールデータを設定し得(102B)、現在のウェブページの現在の位置、回転、および/またはスケールをさらに要求し得る(102B)。ウェブページの開発者が、ある位置、回転、および/またはスケールデータを含む、ある様式において、着目ウェブページを提示することを所望している場合がある、いくつかの実施形態では、ウェブサイトはさらに、そのような位置、回転、および/またはスケールデータをブラウザに送信してもよい(102B)。
いくつかの実施形態では、ブラウザが、コンテンツをインターネットから表示するために立ち上げられると、ブラウザは、初期化し、ウェブサイトのウェブページまたはその中のコンテンツをレンダリングおよび表示する(104B)。ブラウザはまた、ブラウザエンジンによってレンダリングされるべきウェブページの位置および回転データを送信し得る(104B)。例えば、ウェブサイトが、位置および回転データをクライアントのブラウザに設定し、位置および回転データをクライアントブラウザから取得することの両方を行うようにコーディングされる、APIの前述のセットを組み込むようにコーディングされるとき、ブラウザは、本位置および回転データをウェブサイトから受信し、ウェブパネルがコンテンツをウェブサイトから表示するために、位置および回転データを設定してもよい。
ブラウザは、ウェブページのためのウェブパネルのための変換、位置データ、および/または回転データをリセットしてもよい(104B)。例えば、ブラウザは、ウェブページパネルのための3D変換(例えば、3D平行移動変換、3D回転変換、および/または3Dスケーリング変換)をデフォルト値または状態にリセットしてもよい。デフォルト値または状態は、一実施形態では、レンダラ(例えば、WebKitおよびChromiumのためのRenderWidget)によってアクセス可能な非一過性メモリ(例えば、キャッシュメモリ)内に記憶されてもよい。ブラウザは、位置および/または回転要求をウェブサイトからそのブラウザエンジンに中継してもよい(104B)。ブラウザエンジンは、複合現実システム内に常駐する、ウェブサイトとユニバースブラウザエンジンとの間の中間体として作用する。ウェブページの位置および回転データパネルが、前述の非一過性メモリ内に記憶される、いくつかの実施形態では、ブラウザまたはそのブラウザエンジンは、例えば、ユニバースブラウザエンジンからのそのようなデータを取得することからの付加的遅延を伴わずに、ウェブサイトからの位置および/または回転要求に迅速に応答し得る。ブラウザエンジンによってアクセス可能な本位置および回転データは、ウェブサイトまたはブラウザがデータまたはその一部を変化させるとき、同期されてもよい。加えて、または代替として、ブラウザエンジンによってアクセス可能な本位置および回転データは、ブラウザによって、初期化およびリセットされてもよい。いくつかの実施形態では、本位置および回転データは、位置および回転データのためのウェブサイトの要求(102B参照)によって更新されてもよい。ブラウザエンジンが、位置および/または回転データをウェブサイトから受信する、いくつかの実施形態では、ブラウザエンジンはさらに、データをブラウザにパスしてもよい。
ブラウザはまた、単独で、またはレンダリングされたコンテンツ(例えば、ウェブページ)とともにのいずれかで、位置および回転データをユニバースブラウザエンジン(104B)に送信してもよい。ユニバースブラウザエンジンは、少なくとも部分的に、ブラウザエンジンからの位置および回転データに基づいて、レンダリングされたウェブページを表示するために、実世界3D空間に対応し得る、仮想3D空間内に仮想境界を有する、3D仮想ボリューム(例えば、プリズム)を作成してもよい。加えて、または代替として、いくつかの実施形態は、ユーザに、複合現実システムによって作成された仮想3D空間内にレンダリングされたウェブページ(またはコンテンツ)を操作する能力を提供してもよい。
ユーザは、したがって、変換の新しいセットがレンダリングされたウェブページに適用される必要があるように、仮想3D空間内にレンダリングされたウェブページを移動および/または回転させてもよい。複合現実システムのオペレーティングシステムは、ランタイム層および3Dエンジンを含み、少なくとも部分的に、ブラウザエンジンから受信された位置および回転データに基づいて、変換の新しいセットをレンダリングされたウェブページに適用してもよい。変換の新しいセットが、適用された後、ユニバースブラウザエンジンはまた、新しい位置および回転データをブラウザエンジン(106B)に返信し、その中の前の位置および回転データを更新してもよい。
ブラウザが、初期化すると、またはユーザが、レンダリングされたウェブページを操作し、故に、位置および/または回転データを変化させると、ブラウザエンジンは、位置および回転データを、利用可能である場合、ユニバースブラウザエンジンから受信し得る(104B)。ブラウザエンジンは、したがって、非一過性メモリ(例えば、キャッシュ)内に記憶される位置および/または回転データを、ユニバースブラウザエンジンから受信され、例えば、キャッシュメモリ内に記憶される、リフレッシュされた位置および/または回転データで更新し得る(104B)。ブラウザエンジンはまた、ウェブページパネルのための位置および回転データを設定してもよい(104B)。ウェブページの開発者が、ウェブページの位置および回転を設定している(例えば、開発者が、オンラインチェスゲームを表示するウェブページの回転を設定している)、ある実施例では、ブラウザはまた、ウェブサイトから受信された位置および回転データに従って、ウェブページパネルの位置および回転データを設定してもよい。
加えて、ブラウザエンジンは、ユニバースブラウザエンジンが、複合現実システムを介してレンダリングされたウェブページを提示するための仮想3D空間(例えば、プリズム)を決定し得る(例えば、新しいものを作成する、または既存のものから識別することによって)ように、位置および回転データをユニバースブラウザエンジンに送信してもよい(104B)。ユーザが、レンダリングされたウェブページをさらに操作する能力を提供される、いくつかの実施形態では、ブラウザエンジンは、レンダリングされたウェブページの位置および回転データをユニバースブラウザエンジンに提供してもよく、これは、ひいては、ユーザがレンダリングされたウェブページを操作するためのソフトウェアハンドルを提供し、対応する変換を実施し、ユーザの操作に応答してもよい。
ユニバースブラウザエンジンはまた、106Bにおいて、ユーザが、仮想3D空間(例えば、1つ以上のプリズム)内のウェブページおよび他のコンテンツおよび/またはリソースを管理および表示するための高度なグラフィカルユーザインターフェースおよび機能性を提供するために、オペレーティングシステム、オペレーティングシステムサービス、ランタイムアプリケーションおよびライブラリのセット、1つ以上の3Dエンジン、および複合現実システムのアプリケーションのスイートを含む、またはそれと連動して機能する。例えば、ユニバースブラウザエンジンの機能のうちの1つは、ウェブページ(または他の仮想コンテンツ)の位置および回転データをブラウザエンジンに提供することである(104B)。ユニバースブラウザエンジンはまた、直近の位置および/または回転データが、ブラウザエンジンにプッシュされる(ユニバースブラウザエンジンから)、またはユニバースブラウザエンジンからプルされ得る(ブラウザエンジンによって)ように、直近の位置および/または回転データをブラウザエンジンと同期させる(106B)。
図1C-1Eは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示する際に使用され得る、例示的ブラウザエンジンおよびユニバースブラウザエンジンのためのさらなる詳細なブロック図を図示する。より具体的には、図1Cは、いくつかの実施形態における、仮想3D空間(例えば、プリズム)内のウェブページパネルの3D位置および/または回転データを設定するための簡略化された擬似コードを図示する。これらの実施形態では、擬似コードは、Chromiumのためのコードの類似セットに基づくが、他のウェブブラウザのためのコードもまた、検討され、完全に等しい効果を伴って、本明細書に説明される技法に適用されることができる。
例えば、ブラウザエンジン100Cは、102Cにおいて、Window.VirtualWorld.3DPositionand/orWindow.VirtualWorld.3DRotationを実行し、ユニバースブラウザエンジン内のウェブページパネルの3D位置および/または回転データを設定するためのプロセスを初期化してもよい。Window.VirtualWorld.3DPositionおよびWindow.VirtualWorld.3DRotationは、例えば、OpenGL Mathematics(GLM)(または任意の他の数学ライブラリ)を利用して、部分的または全体的に、2Dまたは3D空間内の2Dおよび3Dエンティティのための3D位置データ、3D回転データ、スケール、および1つ以上の変換に基づいて、ウェブページパネルの位置データを設定および取得してもよい(例えば、擬似コード「glm::vec3old_pos(0.0f)」、「glm::quatrotation(glm::vec3(0.0f))」、「glm::vec3scale(1.0f)」、および「glm::mat4transform=web_container_->getCurrentVolumeTransform()」によって)および回転データ(例えば、擬似コード「glm::vec3position(0.0f)」、「glm::quatold_rot(glm::vec3(0.0f))」、「glm::vec3scale(1.0f)」、および「glm::mat4transform=web_container_->getCurrentVolumeTransform()”」によって)。擬似コード、プログラミング言語、および種々のクラス、変数等の名称は、本願では、例証および解説目的のために使用され、同じまたは実質的に類似目的を果たす、任意の他の好適なプログラミング言語、名称等もまた、検討され、また、そのような目的を達成するために使用されてもよいことに留意されたい。
ブラウザエンジン100Cはさらに、104Cにおいて、ウェブページパネルの位置データおよび/または回転データ(図示せず)を設定および取得するために、VirtualWorld::Set3DPositionを実行してもよく、VirtualWorldは、インプロセスである、フレームのためのBlink(Chromiumのためのブラウザエンジン)内のクラスである。図1Cは、回転データではなく、位置データを設定および決定する実施例を図示し、回転データを設定および決定することは、対応するコードを用いて、同じまたは実質的に類似様式において行われてもよいことに留意されたい。いくつかの実施形態では、ブラウザエンジンはまた、他のレンダラプロセス内に常駐する、プロキシのためのRemoteDomWindow(ドキュメントオブジェクトまたはウィジェットを有していない)を含んでもよい。構成概念VirtualWorld::3DPositionは、例えば、Gfx(CSE20211のための単純グラフィックライブラリ)またはGfx-rs等の低レベルグラフィック抽象化層(例えば、「gfx::Point3fpos(x-coordinate, y-coordinate, z-coordinate)」、「gfx::Point3f rot(x-rotation, y-rotation, z-rotation)」、「gfx::Point3F rot=local_frame_client->GetVirtualWorldRotation()」、または「gfx::Point3Fflat_rot{-M_PI_2,0.0f, 0.0f}」等を介して)を使用して、位置および/または回転データを取得および設定してもよい。
ブラウザエンジン100Cはさらに、LocalFrameClientImpl::Set3DPosition(106C)、RenderFrameImpl:Set3DPosition(108C)を実行し、プロセス間通信(IPC)メッセージ-FrameHostMsg_Set3DPositionを送信してもよい。構成概念RenderFrameImpl:Set3DPositionは、RenderWidget::Set3DPositionをコールし、IPCメッセージを送信するために使用されてもよい。構成概念LocalFrameClientImpl::Set3DPositionは、C++LocalFrameClientImpl.cppから導出され、例えば、GfxまたはGfx-rs等の低レベルグラフィック抽象化層および位置および回転データを使用して、クライアントフレームのための位置および/または回転を設定および取得する。LocalFrameClientImpl::Set3DPositionは、以下の擬似コードを用いて、ウェブページパネルの位置および回転データを取得および設定するために実装されてもよい。
構成概念RenderFrameImpl::Set3DPositionは、C++RenderFrameImpl.cppから導出され、Gfxおよび位置および/または回転データに基づいて、レンダラ(例えば、ChromiumベースのブラウザのためのRenderWidget)を呼び出し、フレームをブラウザエンジン(例えば、ChromiumベースのブラウザのためのBlink)に戻すように構成される。ブラウザエンジン100Cはまた、112Cにおいて、RenderWidget::Set3DPositionを実行することによって、レンダラを呼び出し、3D位置および回転データ(例えば、ウェブページの開発者によって設定される位置および回転データ)に従って、着目ウェブページのコンテンツを「ペイント」またはレンダリングしてもよい。より具体的には、レンダラプロセスRenderWidgetは、グルーインターフェース(例えば、WebWidgetDelegate)を使用して、抽象インターフェースをグルーインターフェース内に実装してもよい。本抽象インターフェースは、例えば、2Dウィンドウまたは3Dボリュームをディスプレイ空間内に含み、入力イベントを受信し、コンテンツをその中にレンダリングしてもよい。補助ディスプレイアイテム(例えば、オプションのリストを示す上/下矢印を伴う選択ボックス、タブ、ポップアップウィンドウ、ナビゲーションコマンド等)がレンダリングされるべき、これらの実施形態のうちのいくつかでは、ブラウザエンジン100Cはさらに、そのようなディスプレイアイテムのために、別のレンダリングプロセス(例えば、RenderView)を実行してもよい。
ChromiumまたはChromiumベースのブラウザが使用される、いくつかの実施形態では、ブラウザエンジン100Cは、そのレンダリングシステム(「ビュー」)を使用して、ウェブページをレンダリングし、ユーザインターフェースは、レンダリング、レイアウト、およびイベントハンドリングに関与する、「ビュー」と呼ばれる、コンポーネントのツリーとして構築される。コンポーネントのツリー内の各ビューは、その独自の境界を有し、ユーザインターフェースの異なるコンポーネントを表し、ウィジェット(本来の2Dウィンドウまたは3Dボリューム)は、そのようなツリーのルートに位置する。いくつかの実施形態は、位置および位置データを用いて、仮想3D空間(または2Dウィンドウ)を作成し、仮想3D空間(または2Dウィンドウ)をRootViewにパスし、次いで、イベントをツリーの中に伝搬する。いくつかのディスプレイアイテムは、本来のウィジェットを表示およびサイズ調整するための方法を把握する、特殊な種類のビュー内にホストされる、オペレーティングシステムの制御を使用して、レンダリングされてもよい。これらのディスプレイアイテムは、例えば、ボタン、テーブル、ラジオボタン、チェックボックス、テキストフィールド、他の制御等を含む。コンポーネントのそのようなツリーについてのさらなる詳細は、図2G-2Iを参照して下記に説明される。
ブラウザエンジンはさらに、少なくとも部分的に、位置および回転データに基づいて、「delegate_->Set3DPosition(position)」および「delegate_->Set3DPosition(position)」を使用する、WebContentsImpl::OnSet3DPosition(114C)、CefBrowserHostImpl::Set3DPosition(116C)を実行する。ブラウザエンジンはさらに、CEF(Chromium Embedded Framework)とユニバースブラウザエンジンとの間のカスタム相互作用を可能にする、ユニバースブラウザエンジン特有インターフェースを用いて、CefUniverseBrowserEnginePrivateHandler::OnSet3DWebPagePosition(118C)を実行する。CEFベースのアプリケーションは、CEFを初期化し、CEFメッセージループを起動するためのエントリポイント、プロセス特有のコールバックをハンドリングするためのCEFApp派生クラス、ブラウザ-インスタンス特有のコールバック(例えば、ブラウザ寿命、コンテキストメニュー、ダイアログ、ディスプレイ通知、ドラッグイベント、注目イベント、キーボードイベント等に関するコールバック)をハンドリングするためのCEFClient派生クラス、CefBrowserHost::CreateBrowser()によって作成された1つ以上のCEFBrowserインスタンス等のコンポーネントを含んでもよい。
ブラウザエンジン100Cはさらに、構成概念CefBrowserHostImpl::Set3DPosition(116C)およびCefBrowserHostImpl::Set3DRotationを実行し、ハンドラを決定してもよい(例えば、「CefRefPtr<CefUniverseBrowserEnginePrivateHandler>handler=client_->GetUniverseBrowserEnginePrivateHandler()」および「handler->OnSetVirtualWebPagePosition(this, position.x(), position.y(), position.z())」、「handler->OnSetVirtualWebPageRotation(this, rotation.x(), rotation.y(), rotation.z())を用いて)。ブラウザエンジンはまた、パブリック関数CefUniverseBrowserEnginePrivateHandler::OnSet3DWebPagePositionおよびCefUniverseBrowserEnginePrivateHandler::OnSet3DWebPageRotationを実行し、ウェブページパネルの3D位置および回転を設定してもよい。
ユニバースブラウザエンジン126Cは、ブラウザエンジン100Cから受信された3D位置および回転データを用いて、ClientHandler::OnSet3DWebPagePositionおよびClientHandler::OnSet3DWebPageRotation(120C)、Browser::OnSet3DWebPagePositionおよびBrowser::OnSet3DWebPageRotation(122C)、およびBrowserWindow::OnSet3DWebPagePositionandBrowserWindow::OnSet3DWebPageRotation(124C)を実行してもよい。ClientHandlerは、ルールを定義するための手段(例えば、ブラウザ内で評価され、往復遅延または待ち時間を低減させ得る、宣言条件およびアクション)を提供するために、サーバへのコールバックを必要とせずに、ブラウザ内で起動する、イベントハンドラを含む。ClientHandlerはまた、GLM(OpenGL Mathematics)を使用して、仮想3D空間(例えば、プリズム)内のウェブページ位置および回転を設定することを委任してもよい。
図1Dは、図1Cにおける前述のブロックのうちのいくつかの間の通信を図示し、ブラウザエンジン100Cにおいて、仮想3D空間(例えば、プリズム)内の3D位置および/または回転データをユニバースブラウザエンジン126Cから取得する方法を図示する。下向き矢印は、実行のシーケンスおよび/または実行結果のパスを示し、上向き矢印は、値の戻りを示す。
これらの実施形態では、ブラウザエンジン100Cは、上記の図1Cを参照して説明されるものと同様に、102Cにおいて、Window.VirtualWorld.3DPositionおよび/またはWindow.VirtualWorld.3DRotationを実行し、ユニバースブラウザエンジン内でウェブページパネルの3D位置および/または回転データを設定するためのプロセスを初期化してもよい。さらに、ブラウザエンジン100Cはさらに、104Cにおいて、ウェブページパネルの位置データおよび/または回転データ(図示せず)を設定および取得するために、VirtualWorld::Set3DPositionを実行してもよく、VirtualWorldは、プラットフォームのXRデバイスのうちの1つを表す、クラスである。図1Dは、回転データではなく、位置データを設定および決定する実施例を図示し、回転データを設定および決定することは、対応するコードを用いて、同じまたは実質的に類似様式において行われてもよいことに留意されたい。
図1Cに図示されるブラウザエンジン100Cと異なり、図1Dにおけるブラウザエンジン100Cはさらに、LocalFrameClientImpl::Get3DPosition(102D)およびRenderFrameImpl:Set3DPosition(104D)を実行してもよい。図1Cの説明と同様に、構成概念RenderFrameImpl:Get3DPositionは、RenderWidget::Get3DPositionをコールし、IPCメッセージを送信し、および/またはVirtualWorld::3DPositionに対する値を返し、位置および/または配向データを返すために使用されてもよい。図1CにおけるLocalFrameClientImpl::Get3DPositionのような構成概念LocalFrameClientImpl::Get3DPositionは、C++LocalFrameClientImpl.cppから導出され、例えば、GfxまたはGfx-rs等の低レベルグラフィック抽象化層を位置および回転データとして使用して、クライアントフレームのための位置および/または回転を設定および取得してもよい。
図1CにおけるRenderWidget::Set3DPositionのように、ブラウザエンジン100Cはまた、106Dにおいて、RenderWidget::Get3DPositionを実行することによって、レンダラを呼び出し、位置および/または配向データ(例えば、ウェブページの位置および/または配向データ)をRenderFrameImpl::Get3DPosition(104D)に返し、さらに、3D位置および回転データ(例えば、ウェブページの開発者によって設定される位置および回転データ)に従って、着目ウェブページのコンテンツを「ペイント」またはレンダリングしてもよい。いくつかの実施形態では、レンダラプロセスRenderWidgetは、グルーインターフェース(例えば、WebWidgetDelegate)を使用して、抽象インターフェースをグルーインターフェース内に実装してもよい。本抽象インターフェースは、例えば、2Dウィンドウまたは3Dボリュームをディスプレイ空間内に含み、入力イベントを受信し、コンテンツをその中にレンダリングしてもよい。補助ディスプレイアイテム(例えば、オプションのリストを示す上/下矢印を伴う選択ボックス、タブ、ポップアップウィンドウ、ナビゲーションコマンド等)がレンダリングされるべき、これらの実施形態のうちのいくつかでは、ブラウザエンジン100Cはさらに、そのようなディスプレイアイテムのために、別のレンダリングプロセス(例えば、RenderView)を実行してもよい。
図1Eは、いくつかの実施形態における、ブラウザエンジンとユニバースブラウザエンジンとの間で3D位置および回転データを同期させるための擬似コードを伴う、簡略化されたブロック図を図示する。例えば、仮想3D空間内のウェブページは、修正され得る(例えば、仮想3D空間内でウェブページを移動および回転させた、ユーザによって)。図1Eにおけるブロック図は、ウェブページの直近の3D位置および回転データがブラウザエンジン100Eとユニバースブラウザエンジン126Eとの間で同期される、方法を図示する。図1Eはまた、ユニバースブラウザエンジン126Eが、ブラウザの初期化に応じて、位置および回転データをブラウザエンジン100Eに送信する、実施形態を図示し得る。
図1Eに図示されるように、ユニバースブラウザエンジン126Eは、初期化されると(120E)、またはウェブページの修正された3D位置および/または回転データ(図示せず)の受信に応じて、ウェブページのボリューム、レンダリングされたブラウザ、および/またはプリズムの変換をリセットしてもよい(122E)。3D位置および回転データは、次いで、ブラウザエンジン100Eにパスされ、ブラウザエンジン100Eは、CefBrowserView::UpdateCached3DPositionおよびCefBrowserView::UpdateCached3DRotationを実行する(102E)。ブラウザエンジン100Eはさらに、RenderWidgetHostImpl::UpdateCached3DPositionおよびRenderWidgetHostImpl::UpdateCached3DRotationを実行し、位置および/または回転データをユニバースブラウザエンジン126Eからの直近の位置および/または回転データで更新する。
いくつかの実施形態では、ユニバースブラウザエンジン126Eはまた、121Eにおいて、ウェブコンテンツ変換が変更されているかどうかをチェックしてもよい。ユニバースブラウザエンジン126Eは、ヘッダファイル-「void ChekIfWebContentTransformChanged();」内に対応するクラス定義を伴う、以下の例示的コード/擬似コードを実行し、ウェブコンテンツ変換が変更されているかどうかを決定してもよい。
上記の実施例では、「cef_window」が、存在しない場合、いくつかの実施形態は、付加的動作を実施せずに、変換の初期化されない値を留保する。さらに、コードセグメント「if(std::abs(pDiff[i])>0.0001f)...」は、関連変換が有意に変化しているかどうかを決定するための条件付きステートメントを示す。
ユニバースブラウザエンジンは、システム(例えば、ARシステム)によるカーソル位置確認応答が、実際のカーソル位置と同一または異なるかどうかを決定し、クラス定義「virtual void UpdateLoop(float/
*delta
*”);」を伴う仮想3次元空間内のステージおよび3Dボリュームを更新してもよい。
いくつかの実施形態では、閾値が、更新が、前述の2つのカーソル位置間の相違が閾値を下回るときに実施されないであろうように、「デルタ」に関して決定されてもよい。いくつかの実施形態は、「content_view_->CheckIfWebContentTransformChanged();」を用いて、ノード変換変化をプールし、ステージおよび分離したボリューム位置を更新する。
ブラウザエンジン100Eはさらに、IPC(プロセス間通信)メッセージ(例えば、ViewMsg_UpdateCached3DPosition、ViewMsg_UpdateCached3DRotation等)を送信し、RenderWidget::OnUPdateCached3DPositionおよびRenderWidget::OnUPdateCached3DRotation(108E)およびRenderWidget::Set3DPositionおよびRenderWidget::Set3DRotation(110E)を実行する。
いくつかの実施形態では、ユニバースブラウザエンジン126Eは、3D位置および回転データを、ブラウザエンジン100Eによってアクセス可能な非一過性コンピュータ可読媒体(例えば、キャッシュメモリ)内に記憶してもよい。ユニバースブラウザエンジン126Eおよびブラウザエンジン100Eは、したがって、仮想3D空間内のウェブページパネルの位置および/または回転が修正される度に同期される。ウェブページがロードを開始する度に、RenderWidget内の位置および回転変数を初期化およびリセットするために、ウェブページパネルの変換は、デフォルトにリセットされ、RenderWidget内の記憶された値は、同様に更新されるであろう。
図1Fは、1つ以上の実施形態における、ユニバースブラウザプリズムの簡略化された実施例を図示する。本実施例では、2つのユニバースブラウザプリズム(または単に、プリズム)100Fおよび102Fが、複合現実デバイスを装着しているユーザ104Fのために、仮想3D空間内で作成される。プリズム100Fおよび102Fは、直角プリズムとして現れるが、プリズムは、任意の形状およびサイズ(例えば、円柱、立方体、球体、四面体等、またはさらに不規則的3Dボリューム)であってもよいことに留意されたい。
プリズムは、仮想コンテンツが、その中にレンダリングおよび表示される、3次元立体空間である。プリズムは、エクステンデッドリアリティシステムによって提供される仮想3D空間内に存在し、エクステンデッドリアリティシステムによって提供される仮想3D空間は、いくつかの実施形態では、1つを上回るプリズムを含んでもよい。いくつかの実施形態では、1つ以上のプリズムは、実世界(例えば、ユーザの環境)内に設置され、したがって、プリズムのための1つ以上の実世界場所を提供してもよい。これらの実施形態のうちのいくつかでは、1つ以上のプリズムは、1つ以上のオブジェクト(例えば、物理的オブジェクト、仮想オブジェクト等)、1つ以上の2次元表面(例えば、物理的オブジェクトの表面、仮想オブジェクトの表面等)、および/または1つ以上の1次元点(例えば、物理的オブジェクトの頂点、仮想オブジェクトの表面等)に対して、実世界内に設置されてもよい。いくつかの実施形態では、単一ソフトウェアアプリケーションは、1つを上回るプリズムに対応してもよい。いくつかの実施形態では、単一アプリケーションは、単一プリズムに対応する。
いくつかの実施形態では、プリズムは、いくつかの実施形態における、エクステンデッドリアリティシステムのユーザの現在の場所のためのマルチアプリケーションシーングラフのサブツリーを表し得る。ユーザの現在の場所に以前に展開された1つ以上のプリズムを読み出すことは、1つ以上のプリズムに関するインスタンスデータを外部データベース、例えば、(例えば、クラウド環境内のパス可能世界モデルを記憶する、データベース)から読み出し、ローカルデータベース(例えば、外部に記憶されるパス可能世界モデルのより小さい部分を備える、内部パス可能世界モデルデータベース)を1つ以上のプリズムに関するインスタンスデータで再構成することを含んでもよい
これらの実施形態のうちのいくつかでは、プリズムに関するインスタンスデータは、プリズムを定義する、1つ以上のプリズムプロパティのデータ構造を含む。プリズムプロパティは、例えば、場所、配向、範囲幅、範囲高さ、範囲深度、アンカタイプ、および/またはアンカ位置のうちの少なくとも1つを備えてもよい。加えて、または代替として、プリズムに関するインスタンスデータは、アプリケーションによってプリズムの中に以前にレンダリングされた仮想コンテンツの状態情報等の1つ以上のアプリケーション特有プロパティのキー/値ペアを含んでもよい。いくつかの実施形態では、データは、外部データベースが必要とされないように、ローカルで全体的に記憶されてもよい。
プリズムは、いくつかの実施形態では、作成に応じて、固定および/または調節可能境界を伴う、3D境界空間を含むが、より低い次元を有する、退化された3Dプリズムもまた、検討される。プリズムは、生成されると、XRシステムの仮想3D空間および/またはユーザの環境内の場所または実世界内のいずれかの任意の場所に位置付けられてもよい(例えば、ユニバースブラウザエンジンまたはそのインスタンスによって)。プリズムの境界は、少なくとも部分的に、プリズム内にレンダリングされるべきコンテンツのサイズまたは範囲に基づいて、システム(例えば、ユニバースブラウザエンジン)によって、ユーザによって、および/またはウェブページの開発者によって定義されてもよい。いくつかの実施形態では、XRシステム(例えば、そのユニバースブラウザエンジン)のみが、XRシステム上のプリズムの境界を作成および/または調節してもよい。プリズムの境界は、いくつかの実施形態では、表示されてもよい(例えば、グラフィック的に強調解除された様式において)。いくつかの他の実施形態では、プリズムの境界は、表示されない。
プリズムの境界は、その中に仮想コンテンツおよび/またはレンダリングされたコンテンツが作成され得る、空間を定義する。プリズムの境界はまた、いくつかの実施形態では、ウェブページパネルが移動および回転され得る、場所および量を制約してもよい。例えば、ウェブページパネルが、ウェブページパネルの少なくとも一部がプリズムの外側に来るように、位置付けられる、回転される、および/またはスケーリングされることになるとき、本システム(例えば、ユニバースブラウザエンジン)は、そのような位置付け、回転、および/またはスケーリングを防止してもよい。
いくつかの実施形態では、本システムは、ウェブページパネルを、いくつかの実施形態における、オリジナルの位置付け、回転、またはスケーリング要求に応答して、オリジナル位置、回転、またはスケールに最も近いまたは近い、次の可能性として考えられる位置に位置付け、回転させ、および/またはスケーリングしてもよい。これらの実施形態のうちのいくつかでは、本システムは、本次の可能性として考えられる位置、回転、またはスケールの残影画像またはフレームを示し、随意に、オリジナル位置、回転、またはスケールは、ウェブページパネルの少なくとも一部がプリズムの外側に来る結果をもたらし得ることを示す、メッセージを表示してもよい。
アプリケーションは、少なくとも部分的に、ユニバースブラウザエンジンを介して、グラフィックをプリズムの中にレンダリングしてもよい。いくつかの実施形態では、ユニバースブラウザエンジンは、シーングラフをレンダリングし、および/またはプリズムの位置付け、回転、スケール等の完全制御を有する。さらに、ユニバースブラウザエンジンは、1つ以上のプリズムを、壁、表面等の物理的オブジェクトに結び付け、プリズムを、本明細書に説明される複数のXRシステムユーザ間で共有され得る、パス可能世界に登録する能力を提供してもよい。
加えて、または代替として、ユニバースブラウザエンジンは、複数のXRシステムユーザ間でのコンテンツの共有を制御してもよい。いくつかの実施形態では、ユニバースブラウザエンジンはまた、プリズムを管理してもよい。例えば、ユニバースブラウザエンジンは、プリズムを作成し、1つ以上の物理的オブジェクトに対する位置付けおよび/またはスナッピングルールを管理し、ユーザインターフェース制御(例えば、「閉じる」ボタン、アクションバー、ナビゲーションパネル等)を提供し、プリズムの記録またはデータ(例えば、どのアプリケーションがどのプリズムを所有または呼び出すか、プリズムを設置すべき場所、プリズムがアンカされる方法-身体中心、世界固定等)を追跡してもよい。
いくつかの実施形態では、プリズム挙動は、部分的または全体的に、1つ以上のアンカに基づいてもよい。いくつかの実施形態では、プリズム挙動は、部分的に、位置付け、回転、および/またはスケーリング(例えば、ユーザ相互作用を通した、ウェブページコンテンツまたはプリズム自体のユーザ設置、ウェブページパネルの開発者による位置付け、回転、および/またはスケーリング等)および/または身体動態(例えば、ビルボード表示、身体中心、遅延頭部固定等)に基づいてもよい。プリズムは、いくつかの実施形態では、3D仮想空間内で移動してもよい。これらの実施形態のうちのいくつかでは、ユニバースブラウザエンジンは、プリズムの移動(例えば、ユーザ/身体中心へのビルボード表示、遅延ビルボード表示、移動時の揺動、衝突バウンス等)を追跡し、プリズムの移動を管理してもよい。
加えて、または代替として、ブラウザ、ウェブページパネル、および任意の他の仮想コンテンツを含む、プリズムは、対応する変換をプリズムに適用することによって、多くの異なる方法において変換されてもよい。例えば、プリズムは、仮想3D空間内で移動、回転、スケーリング、および/またはモーフィングされることができる。いくつかの実施形態では、変換のセットが、ウェブページ、ウェブページパネル、ブラウザウィンドウ、およびプリズム等の変換のために提供される。いくつかの実施形態では、機能性のセットを有する、プリズムが、自動的に作成されてもよい。機能性のセットは、いくつかの実施形態では、例えば、プリズムのために許容される最小および/または最大サイズ、および/またはプリズムをサイズ変更するためのアスペクト比を備えてもよい。機能性のセットは、仮想または物理的3D空間環境内のプリズムとオブジェクト(例えば、仮想オブジェクト、物理的オブジェクト等)との間の関連付けを備えてもよい。付加的仮想コンテンツが、1つ以上の付加的プリズムの中にレンダリングされてもよく、各仮想コンテンツは、いくつかの実施形態では、別個のプリズムの中にレンダリングされてもよい、またはいくつかの他の実施形態では、2つ以上の仮想コンテンツが、同一プリズムの中にレンダリングされてもよい。
プリズムは、いくつかの実施形態では、完全に透明であって、したがって、ユーザに不可視であってもよい、またはいくつかの他の実施形態では、半透明であって、したがって、ユーザに可視であってもよい。ブラウザウィンドウ内に表示される、従来のウェブページと異なり、ブラウザウィンドウは、仮想3D空間内に示す、またはそこから隠すように、構成可能であってもよい(例えば、ユニバースブラウザエンジンを介して)。いくつかの実施形態では、ブラウザウィンドウは、隠され、したがって、ユーザに不可視であってもよいが、いくつかのブラウザ制御(例えば、ナビゲーション、アドレスバー、ホームアイコン、リロードアイコン、ブックマークバー、ステータスバー等)は、依然として、仮想3D空間内でユーザに可視であってもよい。これらのブラウザ制御は、いくつかの実施形態では、対応するウェブページとともに、平行移動、回転、変換されるように表示されてもよい、またはいくつかの他の実施形態では、対応するウェブページから独立して表示されてもよい。
いくつかの実施形態では、プリズムは、仮想3D空間内の他のプリズムと重複しなくてもよい。プリズムは、異なるソフトウェアアプリケーションが、相互に、および/またはオプションのリストから選択された1つ以上のアプリケーション特有特徴と適切に相互作用することを確実にするための1つ以上の普遍的特徴を備えてもよい。
いくつかの実施形態では、プリズムの頂点(106F)が、ユーザが、その中で仮想オブジェクトまたはレンダリングされたウェブページが、平行移動または回転され得る、プリズムの区切りを認知するように、強調解除された様式(例えば、低減された明度等)でユーザに表示されてもよい。例えば、ウェブページまたはウェブページパネルの一部がプリズムによって定義された区切り外に該当するように、ウェブページまたはウェブページパネルが、平行移動または回転される、いくつかの実施形態では、本システムは、それにかかわらず、依然として、プリズム内にある、ウェブページまたはウェブページパネルの残りの部分を表示するが、プリズムの区切りの外側に該当する、ウェブページの部分を表示しなくてもよい。いくつかの他の実施形態では、複合現実システムは、ウェブページまたはウェブページパネル全体が、自由に平行移動、回転、または変換されるが、プリズムの境界の区切りに従い得るように、ウェブページまたはウェブページパネルの平行移動、回転、および変換を限る。
図1Fに図示されるように、仮想3D空間は、1つ以上のプリズムを含んでもよい。さらに、プリズムはまた、いくつかの実施形態では、プリズムが、1つ以上の他のプリズムの親と見なされ得るように、1つ以上の他のプリズムを含むことができる。これらの実施形態のうちのいくつかでは、プリズムツリー構造が、構築されてもよく、各ノードは、プリズムを表し、2つの接続されるノード間の縁は、これらの2つの接続されるノード間の親-子関係を表す。2つのプリズムは、相互に重複するように、またはさらに、一方のプリズムを他方のプリズム内に全体的に含ませるように、移動されることができる。2つのプリズム間の包含的関係は、これらの2つのプリズム間に親子関係が存在することを示す場合とそうではない場合があるが、複合現実システムは、ユーザが、2つのプリズム間の親-子関係を規定するように構成されることができる。さらに、第1のプリズムは、親-子関係が存在するために、第2のプリズム内に全体的に含まれる必要がある場合とそうではない場合がある。いくつかの実施形態では、全ての子プリズムは、親プリズムおよびその子プリズムが、ともに変換、平行移動、回転されるように、親プリズムに適用されている、または適用されることになる、変換、平行移動、および回転を継承する。
図1G-1Iは、いくつかの実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示する、いくつかの簡略化された実施例の投影されたビューを図示する。図1Gは、物理的環境内の床116Gの上方の物理的オブジェクト(例えば、机)118Gに対する、物理的ユーザの環境114G内に作成される、3D直角プリズム100Gの側面図を図示する。複合現実システムは、本明細書に説明される種々の技法を適用し、ウェブページ106Gをプリズム100G内に表示してもよい。
上記に説明されるように、ウェブブラウザウィンドウのディスプレイは、図1Gにおいて抑制され、したがって、ブラウザウィンドウは、ユーザ114Gに不可視である。ブラウザの制御(104G)は、それにかかわらず、ユーザ114Gがブラウザの挙動を制御するために、ユーザに表示されてもよい。加えて、アプリケーションの名称または他の識別(例えば、ブラウザの名称、ウェブページの名称または識別等)102Gもまた、プリズム100G内または外のいずれかにレンダリングされてもよい。いくつかの実施形態では、102Gは、プリズム100Gとある関係(例えば、固定された相対的場所または親-子関係等)を伴う、別個のプリズム内に含有されてもよい。
複合現実ヘッドセット115Gを用いて、ユーザは、複合現実ヘッドセット115Gを介してユーザ114Gの眼に投影される、ウェブページ106Gおよびブラウザ制御104G等の仮想コンテンツを視認することを可能にされる。複合現実システムまたはそのコンポーネント(例えば、ユニバースブラウザエンジン)はさらに、ユーザが、仮想3D空間内のプリズム100G、ブラウザウィンドウ(隠蔽される)、ウェブページ106G、制御104G等を平行移動、回転、スケーリング、および変換するために、平行移動ハンドル112G、回転ハンドル108Gおよび110G、スケールハンドル(図示せず)、または1つ以上の他の変換ハンドル(図示せず)を提供してもよい。
図1Hは、ユーザ114Gが、図1Gにおけるウェブページおよび制御を下向きかつ第1の傾けられる配向(102Hおよび104H)に移動および回転させる、シナリオを図示する。ウェブページおよび制御は、プリズム100G内で完全360度方式において、別個またはともに、移動、回転、変換されてもよく、図1Hは、ウェブページおよび制御が、ともに移動および回転されることを図示する。例えば、ウェブページおよび制御を下方に移動させ、上方に傾斜させるのではなく、ウェブページおよび制御は、上方に移動され、下向きに回転され、図1Hにおける106Hおよび108Hとして示される構成に終着してもよい。
図1Iは、複合現実ヘッドセット115Gを装着しているユーザ114Gが、ウェブページ104Iおよび制御102Iが、机118Gの上部に静止して現れるように、図1Gにおけるウェブページおよび制御を下向きかつ第1の配向(102Iおよび104I)に移動および回転させる、シナリオを図示する。ユーザ114Gはまた、ウェブページ108Iおよび制御106Iが、ユーザ114Gの上方に着座して現れるように、ウェブページおよび制御を上向きに第2の配向(106Iおよび108I)に移動させてもよい。ウェブページおよび制御は、プリズム100G内で完全360度方式において、別個またはともに、移動、回転、変換されてもよく、図1Iは、ウェブページ(104Iおよび108I)および制御が、ともに移動および回転され得る(106Iおよび102I)ことを図示する。図1Iはさらに、制御104Gが、ユーザ114Gによって別個に操作され得る、構成を図示する。
図1J-1Lは、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示する、3つの簡略化された実施例を図示する。図1Jは、3D仮想空間内でウェブページを管理および表示するための本明細書に説明される種々の技法の用途の実動実施例を図示する。本実施例では、開発者102Jは、チェスボード104Jが、複合現実システムによってユーザの眼に投影されると、開発者またはユーザ102Jの視野106J内の正しい目線で机またはテーブル(図示せず)上に着座して現れるように、チェスボード104Jを回転および移動させるように、ウェブページをコーディングしてもよい。
本実施例はさらに、チェスボードの平面ウェブページビュー(または他の3D透視ビュー)が、仮想3D空間内でユーザ102Jに元々提示されている、シナリオを図示し得る。ユーザ102Jは、本明細書に説明される技法を使用して、例えば、位置付けおよび回転ハンドル(図示せず)を操作することによって、ウェブページ104Jを所望の位置および/または配向に移動および/または回転させてもよい。ウェブページおよびそのウェブサイトによって提供される、ウェブリソース(例えば、プレーヤ毎に、16個のチェスの駒)を用いることで、複合現実システムは、ユーザ102Jが、ユーザの手、トーテム、またはコントローラ(108J)のいずれかを使用して、ユーザ102Jが所望するにつれて、位置付けられ、および/または回転されている、仮想3Dのチェスの駒をチェスボード104J上に設置することを可能にし得る。本実施例では、ウェブページ、ブラウザウィンドウ、およびプリズムの境界は、抑制され(例えば、隠され)、これらの境界は、ユーザに不可視であることに留意されたい。本実施例では、親-子関係が、仮想3Dのチェスの駒が、ウェブページ内に表示されるチェスボード104Jとともに変換、平行移動、および回転されるように、チェスボード104J(親)とチェスの駒110J(子)の仮想3Dモデルとの間に作成されてもよい。
図1Kは、本3D仮想空間内のウェブページを管理および表示するための明細書に説明される種々の技法の用途の別の実動実施例を図示する。本実施例では、開発者102Jは、マップ104Jが、複合現実システムによって建築者の眼に投影されると、建築者102Jの視野106J内の正しい目線(例えば、水平)内の机またはテーブル(図示せず)上に着座して現れるように、開発計画の近隣を示すマップ104Mを回転および移動させるように、ウェブページをコーディングしてもよい。
加えて、開発者102Jは、本明細書に説明される技法を使用して、ウェブページ104J(故に、その中に表示されるマップ)を所望の位置および/または配向に移動および/または回転させてもよい。開発者は、開発者の手、トーテム、またはコントローラ(104K)を使用することにより、3Dの仮想オフィスビル106Kをマップ内の正しい場所上に移動および回転させることによって、開発者によって構築される、または他のリソースから提供される、オフィスビル106Kの仮想3Dモデルを位置付けてもよい。開発者はさらに、木々112K、オフィスビル108K、車両110K等の他の仮想3Dモデルをマップ上に取り込み、計画展開または3Dナビゲーションのための仮想3D計画または3Dマップを構築してもよい。
少なくともいくつかの仮想オブジェクトがマップ上に取り込まれると、開発者はさらに、マップを示す、ウェブページを回転させてもよい。例えば、オフィスビル108Kがマップ上に取り込まれると、これらの2つのオフィスビル108Kは、マップの一部に対して開発者のビューを遮断し得る。本実施例では、開発者はさらに、開発者がさらに、他の仮想オブジェクトを遮断された部分上に取り込むために、遮断された部分が、開発者に暴露されるように、マップを回転させてもよい。図1Jに図示される実施例と同様に、親-子関係がまた、仮想オブジェクトが、ウェブページ内に表示されるマップ102Kとともに、変換、平行移動、および回転されるように、マップ102K(親)と仮想3Dオブジェクト106K、108K、および110K(子)との間に作成されてもよい。
図1Lは、3D仮想空間内のウェブページを管理および表示するための本明細書に説明される種々の技法の用途の別の実動実施例を図示する。本実施例では、複合現実ヘッドセット(図示せず)を装着しているユーザ102Lは、ユーザの視野104L内に、例えば、ブラウザのブックマークツールバーからレンダリングされる、または本明細書に説明される複合現実システムのユニバースブラウザエンジンによって提供され得る、ウェブサイトアイコン106Lの随意のアレイまたは立ち上げパッド(またはランチャ)を含む、プリズム100Lを提示されてもよい。ユーザは、例えば、手のジェスチャ、音声コマンド等を介して、個別のアイコンを用いて、対応するウェブサイトのホームウェブページを立ち上げてもよい。
本実施例はさらに、ユーザが、主に、図1Kに図示され、上記に説明されるように、開発者の手、トーテム、またはコントローラ122Lを用いて、3D仮想オブジェクト(例えば、124L)を取り込むことによって、仮想開発計画または3Dマップ108L上で作業し得ることを図示する。ユーザ102Lはまた、いくつかの他のウェブページ(例えば、ストリーミングビデオウェブページ110L、オンライン辞書ウェブページ112L、ソーシャルメディアウェブページ114L、オンラインwikiウェブページ116L、電子メールクライアント118L等)を開き、さらに、本明細書に説明される技法を使用することによって、これらのウェブページをプリズム100L内のユーザの所望の位置および配向に操作および配列してもよい。
図1J-1Lに図示される実施例から分かり得るように、種々の仮想コンテンツが、仮想3D空間内の対応するウェブページの移動および回転に起因して、複数の深度面または焦点面を横断して表示されてもよい。本明細書に説明される複合現実システムは、複数の深度面または焦点面とその可変焦点化機構を併用することによって、これらの仮想コンテンツをレンダリングする能力を提供する。複合現実システムについてのさらなる詳細は、本願の第1の段落で参照される米国特許出願に説明される。
図1Mは、1つ以上の実施形態における、例示的ユーザ物理的環境と、複合現実システムを用いて、仮想3D内のウェブページおよびウェブリソースを管理および表示するためのシステムアーキテクチャとを図示する。代表的環境100は、頭部搭載型システム160を通してユーザ103によって視認されるようなユーザのランドスケープ110を含む。ユーザのランドスケープ110は、ユーザ設置コンテンツが実世界の上部に合成され得る、世界の3Dビューである。代表的環境100はさらに、ネットワーク(図示せず)に動作可能に結合されるプロセッサ170を介して、ユニバースアプリケーションまたはユニバースブラウザエンジン130にアクセスすることを含む。
プロセッサ170は、頭部搭載型システム160と別個の隔離されたコンポーネントとして示されるが、代替実施形態では、プロセッサ170は、頭部搭載型システム160の1つ以上のコンポーネントと統合されてもよく、および/または、例えば、コンピューティングネットワーク(図示せず)および外部記憶デバイス150にアクセスするためのネットワーク等の代表的環境100内の他のシステムコンポーネントの中に統合されてもよい。いくつかの実施形態では、プロセッサ170は、ネットワークに接続されなくてもよい。プロセッサ170は、頭部搭載型システム160、ローカル記憶デバイス137、アプリケーション140、コンピューティングネットワーク、および/または外部記憶デバイス150から受信されたビデオ、オーディオ、および/または他のデータ(例えば、深度カメラデータ)等の情報を受信および処理するためのソフトウェア(例えば、ユニバースアプリケーションまたはユニバースブラウザエンジン130)とともに構成されてもよい。
ユニバースアプリケーションまたはユニバースブラウザエンジン130は、例えば、デスクトップコンピュータのディスプレイ画面上に表示される2Dウィンドウを管理するためのデスクトップコンピュータ上で起動する2Dウィンドウマネージャに類似する、3Dウィンドウマネージャであってもよい。しかしながら、ユニバースアプリケーションまたはユニバースブラウザエンジン130(以降、簡略化のために、「ユニバース」と称され得る)は、3D空間環境内への仮想コンテンツ115の作成、設置、および表示、およびユーザのランドスケープ110内に表示される複数の仮想コンテンツ115間の相互作用を管理する。アプリケーション140からの仮想コンテンツ115は、以降、プリズム113と称され得る、境界されたボリュームおよび/または3Dウィンドウ等の1つ以上の3Dウィンドウディスプレイ管理ユニットの内側において、ユーザ103に提示される。
境界されたボリューム/3Dウィンドウ/プリズム113は、空間内に位置付けられ、配向され得る、空間の長方形、立方体、円筒形、または任意の他の形状ボリュームであってもよい。プリズム113は、コンテンツ(例えば、仮想コンテンツ)がその中にレンダリング/表示されるための境界を有する、立体ディスプレイ空間であってもよく、境界は、表示されない。いくつかの実施形態では、境界は、表示されてもよい。プリズム113は、標準的基礎レベルの相互作用およびアプリケーションのコンテンツおよびその設置の制御を提示してもよい。プリズム113は、マルチアプリケーションシーングラフのサブツリーを表してもよく、これは、ユニバースブラウザエンジン130の内側に内蔵されてもよい、またはユニバースラウザエンジンの外部であるが、それによってアクセスされてもよい。シーングラフは、ベクトルベースのグラフィック、編集アプリケーション、および現代のゲーム用ソフトウェアによって一般に使用される、一般的データ構造であって、これは、グラフィカルシーンの論理、および多くの場合(必ずしもではないが)、空間表現を配列する。シーングラフは、コンテンツが、位置付けられ、その構造内で相互に対して変換される方法を定義する、データ構造と見なされ得る。アプリケーション140は、コンテンツをその中に設置するためのプリズム113のインスタンスを与えられる。アプリケーションは、相対的設置アルゴリズムおよび恣意的変換を使用して、2D/3Dコンテンツをプリズム113内にレンダリングし得るが、ユニバースラウザエンジン(130)は、依然として、最終的には、コンテンツ抽出等の総合的相互作用パターンの管理を担い得る。複数のアプリケーションが、ユニバースブラウザエンジン(130)に、プリズム113を介して、プリズム113を分離するプロセス境界をレンダリングし得る。アプリケーションプロセスあたりn数の境界されたボリューム/プリズム113が存在し得るが、これは、明示的に、アプリケーション毎に1つのみのプロセスが境界されたボリューム/プリズム113毎に起動し得る、n:1関係であるが、それぞれ、その独自の境界されたボリューム/プリズム113を伴って起動する、m数のプロセスが存在してもよい。
ユニバースブラウザエンジン(130)は、2Dおよび/または3Dコンテンツのためのプリズム/分散型シーングラフアプローチを使用して動作する。ユニバースブラウザエンジンのシーングラフの一部は、レンダリングするためのアプリケーション毎に留保される。アプリケーション、例えば、ランチャメニュー、ランドスケープ、または身体中心アプリケーションゾーン(全て下記により詳細に説明される)との各相互作用は、マルチアプリケーションシーングラフを通して行われてもよい。各アプリケーションは、シーングラフのサブツリーを表す、1~N個の直角プリズムを配分されてもよい。プリズムは、クライアント側アプリケーションによって配分されず、代わりに、例えば、ユーザが、コントローラ上のボタンをクリックすることによって、新しいアプリケーションをランドスケープ内に開くとき、ユニバースブラウザエンジン(130)の内側のユーザの相互作用を通して作成される。いくつかの実施形態では、アプリケーションは、プリズムをユニバースブラウザエンジン(130)から要求し得るが、要求は、否認され得る。いくつかの実施形態では、アプリケーションが、新しいプリズムを要求し、許可される場合、アプリケーションは、新しいプリズムのみをその他のプリズムのうちの1つに対して変換し得る。
ユニバースブラウザエンジン(130)は、アプリケーション140からの仮想コンテンツ115をプリズム113と呼ばれるオブジェクト内に備える。各アプリケーションプロセスまたはインスタンスは、その仮想コンテンツをその独自の個々のプリズム113またはプリズムのセットの中にレンダリングしてもよい。ユニバースブラウザエンジン(130)は、プリズム113が表示される、時として、ランドスケープと呼ばれる、世界空間を管理する。いくつかの実施形態では、ユニバースブラウザエンジン(130)は、アプリケーションを壁および表面に結び付け、プリズムを空間内の恣意的場所に設置し、それらを複合現実システムの世界データベースに登録し、および/または複合現実システムの複数のユーザ間でのコンテンツの共有を制御するための能力を提供する。
いくつかの実施形態では、プリズム113の目的は、挙動およびコンテンツのレンダリングおよび表示の制御を提供することである。ウィンドウが、2Dウィンドウ内の2Dコンテンツの場所、メニュー構造、および表示を定義するために使用され得る、2Dディスプレイと同様に、3D仮想ディスプレイでは、プリズムは、複合現実システム(例えば、ユニバースブラウザエンジン(130))が、例えば、コンテンツ場所、3Dウィンドウ挙動、および/またはメニュー構造に関連する制御を3Dコンテンツの表示の周囲にラップすることを可能にする。例えば、制御は、少なくとも、仮想コンテンツをユーザのランドスケープ110内の特定の場所に設置すること、仮想コンテンツをランドスケープ110から除去すること、仮想コンテンツをコピーするおよび/またはコピーを異なる場所に設置すること等を含んでもよい。いくつかの実施形態では、プリズムは、ユーザによって、かつユーザによってのみ、作成および破棄されてもよい。これは、提供されるインターフェースの乱用を制御することに役立ち、ユーザがユーザのコンテンツの制御を維持することに役立てるために明示的に行われてもよい。
加えて、いくつかの実施形態では、アプリケーション140は、そのボリュームがランドスケープ内に設置された場所を把握せず、それらが存在することのみを把握する。いくつかの実施形態では、アプリケーションは、1つ以上のプリズムを要求してもよく、要求は、許可される場合とそうではない場合がある。新しいプリズムが、作成された後、ユーザは、位置を変化させてもよく、および/またはアプリケーションは、新しいプリズムをアプリケーションと関連付けられた現在の既存のプリズムに対して自動的に位置付けてもよい。いくつかの実施形態では、ユニバースブラウザエンジンのサービスを利用して、3Dコンテンツ(例えば、合成された3Dコンテンツ)をユニバースブラウザエンジンプロセスの中にレンダリングする、各アプリケーション140は、最初に、リスナをユニバースブラウザエンジンに登録することが要求されてもよい。本リスナは、アプリケーション140に、ユーザ移動およびそれらのプリズムとのユーザ相互作用に基づいて、レンダリングプリズムの作成および破棄を知らせるために使用されてもよい。リスナは、メッセージをプロセス間通信システムから受信する、インターフェースオブジェクトである。例えば、Android(登録商標)オペレーティングシステムでは、リスナは、Android Binderインターフェースを通してメッセージを受信する、オブジェクトである。しかしながら、任意のIPCシステムが、Binderが常時使用されないように使用されてもよい。
いくつかの実施形態では、プリズムは、以下の相互作用、すなわち、(1)ユーザが、コンテンツを抽出可能ノード(下記でさらに開示される)から抽出した、(2)ユーザが、アプリケーションをランチャから開始した、(3)ユーザが、ユーザが見るための許可を有する、アプリケーションの設置されたインスタンスを含む、近傍のパス可能世界マップタイルをダウンロードした、(4)ユーザが、パス可能世界オブジェクト認識装置インフラストラクチャが、所与のアプリケーションがそのためのコンテンツをレンダリングしなければならないことを検出した、オブジェクトを含む、近傍のパス可能世界マップタイルをダウンロードした、および/または(5)ユーザは、異なるアプリケーション内でハンドリングされなければならない、ディスパッチを別のアプリケーションからトリガしたことのうちから作成されてもよい。いくつかの実施形態では、パス可能世界モデルは、ユーザが、ユーザの世界の断片(例えば、周囲環境、相互作用等)を別のユーザに効果的にパスすることを可能にする。
抽出可能コンテンツは、入力デバイスを使用して、プリズムから外に引き出され、ランドスケープ内に設置され得る、プリズムの内側のコンテンツ(限定ではないが、アイコン、3Dアイコン、テキストディスプレイ内の単語、および/または画像を含む)である。例えば、プリズムは、販売のためのランニング用シューズを示す、ウェブページを表示する場合がある。ランニング用シューズを抽出するために、シューズは、入力デバイスを用いて、選択され、「引き出される」ことができる。新しいプリズムが、シューズを表す3Dモデルを用いて作成され、そのプリズムは、オリジナルプリズムから外に、ユーザに向かって移動するであろう。任意の他のプリズムのように、ユーザは、入力デバイスを使用して、シューズを含有する新しいプリズムをランドスケープの3D空間内で移動、拡大、収縮、または回転させてもよい。抽出可能ノードは、抽出され得るものとしてタグ付けされている、プリズムのシーングラフ内のノードである。ユニバースブラウザエンジンでは、コンテンツを抽出することは、抽出可能ノードを選択し、入力デバイスを使用して、コンテンツをプリズムから外に引き出すことを意味する。本引き出しを開始するための入力は、6自由度ポインティングデバイスを抽出可能コンテンツに照準し、入力デバイス上のトリガを引動させることであり得る。
各ユーザの個別の個々の複合現実システム(例えば、複合現実デバイス)は、ユーザが、環境を通して通過する、またはその中に内在するにつれて、情報を捕捉し、これは、パス可能世界モデルを生産するための複合現実システムプロセスである。パス可能世界に関するさらなる詳細は、2014年3月11日に出願され、「SYSTEM AND METHOD FOR AUGMENTED AND VIRTUAL REALITY」と題された、米国特許出願第14/205,126号(参照することによって前述に組み込まれている)に説明される。個々の複合現実システムは、パス可能世界モデルを、クラウドと称される、共通または共有データ集合に通信またはパスしてもよい。個々の複合現実システムは、直接またはクラウドを介してのいずれかにおいて、パス可能世界モデルを他のユーザに通信またはパスしてもよい。パス可能世界モデルは、本質的に、少なくともユーザの視野を包含する、情報を効率的に通信またはパスする能力を提供する。一実施形態では、本システムは、パス可能世界を作成するために、姿勢および配向情報および上記に説明される収集された3D点を使用する。
いくつかの実施形態では、パス可能世界モデルは、ユーザがコンテンツ(例えば、仮想および/または物理的コンテンツ)と実世界を統合する能力を可能にする。パス可能世界システムは、クラウドネットワーク、パス可能世界モデル、オブジェクト認識装置のセット、およびデータベース(例えば、外部データベース150)に接続することが可能である、1つ以上の複合現実システムまたは複合現実ユーザデバイスを含んでもよい。パス可能世界モデルは、情報を複合現実ユーザデバイスから受信し、また、データをネットワークを通してそれらに伝送するように構成されてもよい。例えば、ユーザからの入力に基づいて、パス可能世界の断片は、1人のユーザから別のユーザにパスされてもよい。パス可能世界モデルは、それに基づいて、複合現実システムが、仮想世界をクラウド上に構築、更新、および増強し、仮想世界の断片を種々のユーザに効果的にパスすることが可能である、画像の集合、点、および他の情報(例えば、実世界情報)と見なされ得る。例えば、複合現実ユーザデバイスから収集された実世界点のセットが、パス可能世界モデル内で収集されてもよい。種々のオブジェクト認識装置が、パス可能世界モデルを通してクローリングし、オブジェクト、タグ画像等を認識し、意味論情報をオブジェクトに結び付けてもよい。パス可能世界モデルは、データベースを使用して、その世界の知識を増強し、意味論情報を結び付け、パス可能世界と関連付けられたデータを記憶してもよい。
ユーザに可視であるが、その制御アプリケーションが現在インストールされていない、プリズムの場合、ユニバースブラウザエンジンは、それと相互作用されると、ユーザにそのアプリケーションのためのアプリケーションストアページをリダイレクトする、そのアプリケーションのための一時的プレースホルダをレンダリングしてもよい。いくつかの実施形態では、プリズムは、類似相互作用、すなわち、(1)ユーザが、パス可能世界マップタイルから、アプリケーションの設置されたインスタンスが揮発性メモリからアンロードされる(すなわち、除去される)まで十分に遠ざかった、(2)ユーザが、アプリケーションの設置されたインスタンスを破棄した、および/または(3)アプリケーションは、プリズムが閉じられることを要求したことで破棄されてもよい。
いくつかの実施形態では、アプリケーションのためのプリズムが、可視ではない、および/またはロードされていない場合、それらのプリズムと関連付けられたプロセスは、一時停止または終了されてもよい。いったんそのアプリケーションのための設置されたプリズムが、再び可視となると、プロセスは、再開されてもよい。プリズムはまた、隠蔽されてもよいが、いくつかの実施形態では、これは、ユニバースブラウザエンジンおよびユーザの要請を受けてのみ発生してもよい。いくつかの実施形態では、複数のプリズムが、同一の正確な場所に設置されてもよい。そのような実施形態では、ユニバースブラウザエンジンは、設置されたプリズムの1つのインスタンスのみを一度に1つの場所に示し、ユーザがその場所内の次の可視要素(例えば、プリズム)に「スワイプ」する等のユーザ相互作用が検出されるまで、プリズム(およびその関連付けられたコンテンツ)の可視性を隠蔽することによって、レンダリングを管理してもよい。
いくつかの実施形態では、各プリズム113は、プリズム113のプロパティにアクセスし、メッシュ、テクスチャ、動画等の共有リソースのためのシーングラフサブツリー内にコンテンツを登録するための方法を用いて、ボリュームリスナインターフェースを介して、アプリケーション140にエクスポーズされてもよい。いくつかの実施形態では、アプリケーション140は、所与のプリズム113が3D空間内に設置される場所を把握しないため、ボリュームリスナインターフェースは、アクセッサメソッドを、例えば、手中心、ランドスケープ内に固定、身体中心等、所与のプリズムがユニバースブラウザエンジン内に存在する場所を定義することに役立つ、ヒントのセットに提供してもよい。これらのプロパティは、加えて、プリズムの予期される挙動を規定し、ユーザ、アプリケーション140、またはユニバースブラウザエンジンのいずれかによって、限定された方式で制御されてもよい。所与のプリズムは、アプリケーションが所有する別のプリズムに対して位置付けられることができる。アプリケーションは、そのアプリケーションからのプリズムが設置されている間、プリズムがともにスナップすべき(その境界ボリュームの両側が接する)ことを規定することができる。加えて、プリズムは、キー/値データ記憶のためのAPIを提供してもよい。これらのキー/値ペアのうちのいくつかは、権限が付与されたアプリケーションによってのみ書込可能である。
いくつかの実施形態では、アプリケーション140は、ユーザのランドスケープ110内においてユーザ103に表示されるべきコンテンツを提供する、クライアントソフトウェアアプリケーションである。例えば、アプリケーション140は、ビデオストリーミングアプリケーションであってもよく、ビデオデータは、2D平面表面上に表示されるようにユーザにストリーミングされてもよい。別の実施例として、アプリケーション140は、ユーザにとって穏やかで幸せかつ安らかであった過去の時間周期を示し得る、物理的オブジェクトの3D結像を提供する、Halcyonアプリケーションであってもよい。アプリケーション140は、ユーザがユーザのランドスケープ110内に含むことを所望し得る、コンテンツを提供する。ユニバースブラウザエンジンは、プリズム113を介して、アプリケーション140によって生成されたコンテンツの設置および管理を管理する。
非没入型のアプリケーションが、ユーザのランドスケープ110内で実行される/立ち上げられると、そのコンテンツ(例えば、仮想コンテンツ)は、プリズム113の内側にレンダリングされる。非没入型のアプリケーションは、コンテンツを、1つ以上の他のアプリケーションと同時に、共有3D環境内に起動および/または表示することが可能である、アプリケーションであってもよい。仮想コンテンツは、プリズム内に含有されてもよいが、ユーザは、依然として、例えば、オブジェクト上にかざす、それをクリックする等、仮想コンテンツと相互作用してもよい。プリズム113はまた、アプリケーション140の表示されるコンテンツを境界してもよく、したがって、異なるアプリケーション140は、相互またはユーザのランドスケープ110内の他のオブジェクトに干渉しない。プリズム113はまた、ユーザの視野外またはそこからあまりに遠く離れている、アプリケーション140からの仮想コンテンツを中断、一時停止、および/または最小限にするために有用な抽象化を提供してもよい。
プリズム113は、別のプリズムへのスナップまたはアンカを含め、ユーザのランドスケープ110内の種々のオブジェクトにアンカされる/結び付けられる/ピン固定されてもよい。例えば、仮想コンテンツ115(例えば、ビデオストリーミングアプリケーションからのビデオ115a)を表示する、プリズム113aは、垂直壁117aにアンカされてもよい。別の実施例として、Halcyonアプリケーションからの3Dツリー115bを表示する、プリズム113bは、図1では、テーブル117bにアンカされるように示される。さらに、プリズム113は、ユーザ103に対してアンカされてもよく(例えば、身体中心)、仮想コンテンツ115を表示する、プリズム113は、ユーザの身体が移動するにつれて、プリズム113がユーザの身体の移動に対して移動するように、ユーザの身体にアンカされてもよい。身体中心コンテンツは、ユーザに追従し、ユーザと位置的に一致したままである、平面、メッシュ等のアプリケーションコンテンツであってもよい。例えば、ユーザに追従するが、ランドスケープ110ではなく、ユーザの背骨に対して存在する、小ダイアログボックスである。加えて、プリズム113はまた、ユーザのランドスケープ110内に表示される、仮想ディスプレイモニタ等の仮想オブジェクトにアンカされてもよい。プリズム113は、下記に開示される、異なる方法においてアンカされてもよい。
ユニバースブラウザエンジンは、ユーザのためのプリズム113のプロパティおよび特性を記憶するために、ローカルデータベース137を含んでもよい。記憶されたプリズム情報は、ユーザのランドスケープ110内でユーザによってアクティブ化される、プリズムを含んでもよい。ローカルデータベース137は、クラウドまたは外部記憶設備内に常駐し得る、外部データベース150に動作可能に結合されてもよい。外部データベース150は、ユーザおよび他のユーザの複合現実環境についての情報を維持する、持続的データベースであってもよい。
例えば、ユーザが、新しいアプリケーションを立ち上げ、仮想コンテンツをユーザの物理的環境内に表示するにつれて、ローカルデータベース137は、ユニバースブラウザエンジンによって作成され、特定の場所に設置される、プリズムに対応する情報を記憶してもよく、アプリケーション140は、コンテンツをユーザのランドスケープ110内に表示されるようにプリズム113の中にレンダリングしてもよい。ローカルデータベース137内に記憶される、プリズム113、仮想コンテンツ115、およびアプリケーション140に対応する情報は、持続的記憶のために、外部データベース150と同期されてもよい。
いくつかの実施形態では、持続的記憶は、複合現実システムがオフにされると、ローカルデータベース137内に記憶されるデータが、消去される、削除される、または非持続性となり得るため、重要であり得る。したがって、ユーザが、複合現実システムをオンにすると、ユニバースブラウザエンジンは、複合現実システムがオフにされることに先立って、外部データベース150と同期し、ユーザ103およびユーザのランドスケープ110に対応するローカルデータベース137のインスタンスを読み出してもよい。ローカルデータベース137は、外部データベース150のインスタンスであってもよく、ローカルデータベース137のインスタンスは、ユーザ103およびユーザの現在の環境に関連する情報を含む。外部データベース150は、加えて、他のユーザ、複数のユーザ、経時的に同一ユーザ、および/または他の環境のローカルデータベースのインスタンスを記憶してもよい。外部データベース150は、仮想コンテンツを複合現実システムの複数のユーザ間で管理および共有するために使用される、情報を含有してもよい一方、ローカルデータベース137は、ユーザ103に対応する情報を記憶および維持する。
ユニバースブラウザエンジンは、アプリケーション140が仮想コンテンツ115をユーザのランドスケープ110上にレンダリングする必要がある度に、アプリケーション140のためのプリズム113を作成してもよい。いくつかの実施形態では、ユニバースブラウザエンジンによって作成されたプリズム113は、アプリケーション140が、表示のために、仮想コンテンツをレンダリングすることに焦点を当てることを可能にする一方、ユニバースブラウザエンジンは、アプリケーション140によってプリズムの境界内に表示される仮想コンテンツ115を有するプリズム113の設置および表示を作成および管理することに焦点を当てる。
ユーザのランドスケープ110内に表示される、アプリケーション140によってレンダリングされた各仮想コンテンツ115は、単一プリズム113内に表示されてもよい。例えば、アプリケーション140が、2つの仮想コンテンツ(例えば、115aおよび115b)をユーザのランドスケープ110内に表示されるようにレンダリングする必要がある場合、アプリケーション140は、2つの仮想コンテンツ115aおよび115bをレンダリングしてもよい。仮想コンテンツ115は、レンダリングされた仮想コンテンツのみを含むため、ユニバースブラウザエンジンは、それぞれ、仮想コンテンツ115aおよび115bのそれぞれに対応するためのプリズム113aおよび113bを作成してもよい。プリズム113は、仮想コンテンツ115の3Dウィンドウ管理プロパティおよび特性を含み、ユニバースブラウザエンジンが、プリズム113の内側の仮想コンテンツ115およびユーザのランドスケープ110内へのプリズム113の設置および表示を管理することを可能にしてもよい。
ユニバースブラウザエンジンは、ユーザ103が複合現実デバイスをオンにするとユーザ103に見える、第1のアプリケーションであってもよい。ユニバースブラウザエンジンは、少なくとも、(1)ユーザの世界ランドスケープをレンダリングすること、(2)平面アプリケーションの2Dウィンドウ管理および3Dウィンドウ(例えば、プリズム)管理、(3)アプリケーションランチャメニューを表示および実行すること、(4)ユーザが仮想コンテンツをユーザのランドスケープ110の中に設置することを可能にすること、および/または(5)ユーザのランドスケープ110内のプリズム113のディスプレイの異なる状態を管理することに関与してもよい。
頭部搭載型システム160は、ユーザ103の眼の正面に位置付けられる、ディスプレイシステム(例えば、ユーザインターフェース)と、頭部搭載型システムに結合され、ユーザの外耳道に隣接して位置付けられる、スピーカと、ユーザ感知システムと、環境感知システムと、プロセッサと(全て示されてない)を含む、複合現実頭部搭載型システムであってもよい。頭部搭載型システム160は、ユーザ103に、デジタル世界と相互作用し、それを体験するためのディスプレイシステム(例えば、ユーザインターフェース)を提示する。そのような相互作用は、ユーザおよびデジタル世界と、代表的環境100とインターフェースをとる1人以上の他のユーザと、デジタルおよび物理的世界内のオブジェクトとを伴ってもよい。
ユーザインターフェースは、ユーザインターフェースを通して、ユーザ入力を介して、仮想コンテンツを視認する、選択する、位置付ける、および管理することを含んでもよい。ユーザインターフェースは、触覚的インターフェースデバイス、キーボード、マウス、ジョイスティック、運動捕捉コントローラ、光学追跡デバイス、オーディオ入力デバイス、スマートフォン、タブレット、または頭部搭載型システム160のうちの少なくとも1つまたはそれらの組み合わせであってもよい。触覚的インターフェースデバイスは、人間が身体感覚および移動を通してコンピュータと相互作用することを可能にする、デバイスである。触覚的とは、アクションを実施する、またはコンピューティングデバイス上で処理するための触知的フィードバックまたは他の身体感覚を包含する、人間とコンピュータの相互作用技術のタイプを指す。
触覚的コントローラの実施例は、トーテム(図示せず)であってもよい。いくつかの実施形態では、トーテムは、ヘッドセット160に対するその位置および配向を追跡する、ハンドヘルドコントローラである。本実施例では、トーテムは、ユーザが、トーテムを上または下に移動させることによって、(球状シェル上の)高度および方位角においてプリズムを移動させ得る、6自由度(6DOFまたは自由度)コントローラであってもよい。いくつかの実施形態では、オブジェクトをより近くまたはより遠くに移動させるために、ユーザは、トーテム上のジョイスティックを使用して、プリズムを「押動」または「引動」させてもよい、または、単に、トーテムを前方または後方に移動させてもよい。これは、シェルの半径を変化させる効果を有し得る。いくつかの実施形態では、トーテム上の2つのボタンは、プリズムを拡大または収縮させ得る。いくつかの実施形態では、トーテム自体を回転させることは、プリズムを回転させ得る。他のトーテム操作および構成が、使用されてもよく、上記に説明される実施形態に限定されるべきではない。
ユーザ感知システムは、ある特徴、特性、または頭部搭載型システム160を装着しているユーザ103に関連する情報を検出するように動作可能である、1つ以上のセンサ162を含んでもよい。例えば、いくつかの実施形態では、センサ162は、例えば、以下、すなわち、縮瞳/散瞳、各瞳孔の角度測定/位置付け、真球度、(眼形状が経時的に変化するにつれた)眼形状、および他の解剖学的データのうちの1つ以上のもの等のユーザ103のリアルタイム光学特性/測定を検出することが可能なカメラまたは光学検出/走査回路を含んでもよい。本データは、頭部搭載型システム160によってユーザの視認体験を向上させるために使用され得る、情報(例えば、ユーザの視覚的集光点)を提供してもよい、またはそれを計算するために使用されてもよい。
環境感知システムは、データをユーザのランドスケープ110から取得するための1つ以上のセンサ164を含んでもよい。センサ164によって検出されたオブジェクトまたは情報は、入力として、頭部搭載型システム160に提供されてもよい。いくつかの実施形態では、本入力は、仮想世界とのユーザ相互作用を表し得る。例えば、机(例えば、テーブル188)上の仮想キーボードを視認している、ユーザ(例えば、ユーザ103)が、ユーザが仮想キーボード上でタイプしているかのように、その指を用いて、ジェスチャし得る。指移動の運動は、センサ164によって捕捉され、頭部搭載型システム160に、入力として提供されてもよく、入力は、仮想世界を変化させる、または新しい仮想オブジェクトを作成するために使用されてもよい。
センサ164は、例えば、概して、例えば、持続的および/または断続的に投影された赤外線構造化光を通して、シーン情報を捕捉および解釈するために、外向きに面したカメラまたはスキャナを含んでもよい。環境感知システムは、静的オブジェクト、動的オブジェクト、人々、ジェスチャおよび種々の照明、大気および音響条件等を含む、ローカル環境からの1つ以上の要素を検出および登録することによって、ユーザ103の周囲のユーザのランドスケープ110の1つ以上の要素をマッピングするために使用されてもよい。したがって、いくつかの実施形態では、環境感知システムは、ローカルコンピューティングシステム(例えば、プロセッサ170)に内蔵され、センサ164によって検出された1つ以上のオブジェクトまたは情報をデジタル的に再構築するように動作可能である、画像ベースの3D再構築ソフトウェアを含んでもよい。
いくつかの実施形態では、環境感知システムは、以下、すなわち、運動捕捉データ(ジェスチャ認識を含む)、深度感知、顔認識、オブジェクト認識、一意のオブジェクト特徴認識、音声/オーディオ認識および処理、音響源位置特定、雑音低減、赤外線または類似レーザ投影、およびモノクロおよび/またはカラーCMOSセンサ(または他の類似センサ)、視野センサ、および種々の他の光学向上センサのうちの1つ以上のものを提供する。環境感知システムは、上記に議論されるもの以外の他のコンポーネントを含んでもよいことを理解されたい。
上記に述べられたように、プロセッサ170は、いくつかの実施形態では、頭部搭載型システム160の他のコンポーネントと統合される、代表的環境100のシステムの他のコンポーネントと統合されてもよい、または図1に示されるように、隔離されたデバイス(ウェアラブルまたはユーザ103から別個)であってもよい。プロセッサ170は、物理的有線接続を通して、または、例えば、モバイルネットワーク接続(セルラー電話およびデータネットワークを含む)、Wi-Fi、Bluetooth(登録商標)、または任意の他の無線接続プロトコル等の無線接続を通して、頭部搭載型システム160の種々のコンポーネントに接続されてもよい。プロセッサ170は、メモリモジュール、統合および/または付加的グラフィック処理ユニット、無線および/または有線インターネットコネクティビティ、およびソース(例えば、コンピューティングネットワークおよび頭部搭載型システム160からのユーザ感知システムおよび環境感知システム)からのデータを画像およびオーディオデータに変換することが可能なコーデックおよび/またはファームウェアを含んでもよく、画像/ビデオおよびオーディオは、ユーザインターフェース(図示せず)を介して、ユーザ103に提示されてもよい。
プロセッサ170は、頭部搭載型システム160の種々のコンポーネントのためのデータ処理および頭部搭載型システム160とユニバースブラウザエンジン、外部データベース150等のソフトウェアアプリケーションとの間のデータ交換をハンドリングする。例えば、プロセッサ170は、ユーザ103と、ソフトウェアアプリケーションを含む、コンピューティングネットワークとの間のデータストリーミングをバッファおよび処理するために使用され、それによって、平滑で、連続し、かつ高忠実性のユーザ体験をもたらしてもよい。プロセッサ170は、プログラムコード命令のセットを実行するように構成されてもよい。プロセッサ170は、プログラムコード命令のセットを保持するためのメモリを含んでもよく、その中で、プログラムコード命令のセットは、仮想コンテンツを立体ディスプレイ空間内に表示することによって、仮想コンテンツを利用可能な3D表示可能空間のサブセット内に表示するためのプログラムコードを備え、立体ディスプレイ空間の境界は、表示されない。いくつかの実施形態では、プロセッサは、動作可能に結合される、2つ以上のプロセッサであってもよい。
いくつかの実施形態では、複合現実システムは、プリズムに、アプリケーションによるディスプレイカスタマイズの構成のために事前に承認されたオプションのリストからの普遍特徴およびアプリケーション選択/アプリケーション特有特徴を割り当てるように構成されてもよい。例えば、普遍特徴は、異なるアプリケーションがともに良好に相互作用することを確実にする。普遍特徴のいくつかの実施例は、最大/最小サイズ、非重複プリズム(衝突挙動からの一時的重複を除外する)、プリズムの境界の外側でのコンテンツの非表示、アプリケーションがセンサまたは感知可能情報にアクセスすることを所望する場合、アプリケーションがユーザからの許可を必要とすることを含んでもよい。アプリケーション選択/アプリケーション特有特徴は、最適化されたアプリケーション体験をもたらす。
アプリケーション選択/アプリケーション特有特徴は、最大/最小サイズ(システムからの限界内)、デフォルトサイズ(システムからの限界内)、身体動態のタイプ(例えば、下記に議論される、非固定/世界固定、ビルボード表示、エッジビルボード表示、追従/消極的頭部固定、外部センサに基づく追従、フェーディング)、子プリズムスポーン場所、子頭部姿勢ハイライト、子プリズム関係挙動、表面上挙動、独立変換制御、リサイジング対スケーリング、アイドル状態タイムアウト、衝突挙動、アプリケーションにアクセスするための許可/パスワード等を含んでもよい。別の実施形態では、複合現実システムは、仮想コンテンツを1つ以上のプリズムの中に表示するように構成されてもよく、1つ以上のプリズムは、いくつかの実施形態では、相互に重複しない。
いくつかの実施形態では、1つ以上のプリズムは、具体的相互作用を提供するために、重複してもよい。いくつかの実施形態では、1つ以上のプリズムは、重複してもよいが、同一アプリケーションからの他のプリズムとのみ重複する。別の実施形態では、複合現実システムは、少なくとも部分的に、ユーザに対するプリズムの相対的位置および場所に基づいて、プリズムの状態を変化させるように構成されてもよい。別の実施形態では、複合現実システムは、アプリケーション内のコンテンツ作成を管理し、別個のアプリケーション内のコンテンツディスプレイを管理するように構成されてもよい。別の実施形態では、複合現実システムは、コンテンツをプリズムの中に提供し、同時に、プリズムを複合現実環境内に設置するであろう、アプリケーションを開くように構成されてもよい。
いくつかの実施形態では、複合現実システムは、場所、配向、および範囲データを仮想コンテンツをプリズム内に表示するためのプリズムに割り当てるように構成されてもよく、仮想コンテンツは、3D仮想コンテンツである。いくつかの実施形態では、複合現実システムは、ランチャアプリケーションを複合現実環境内の実世界オブジェクトにピン固定するように構成されてもよい。いくつかの実施形態では、複合現実システムは、挙動タイプを各プリズムに割り当てるように構成されてもよく、挙動タイプは、世界固定、ビルボード表示、エッジビルボード表示、追従頭部固定、外部センサに基づく追従、またはフェーディング(下記により詳細に説明される)のうちの少なくとも1つを備える。いくつかの実施形態では、複合現実システムは、ランチャアプリケーションの設置された場所に特有の最も使用されるコンテンツまたはアプリケーションを識別し、その結果、アプリケーションを、例えば、最も頻繁に使用されるものから最も使用されないものに並べ替えるように構成されてもよい。別の実施形態では、複合現実システムは、お気に入りアプリケーションを設置されたランチャアプリケーションに表示するように構成されてもよく、お気に入りアプリケーションは、少なくとも部分的に、設置されたランチャの場所に対するコンテキストに基づく。
図1Nは、1つ以上の実施形態による、複合現実システムを用いて、3次元空間内のウェブページおよびウエブリソースを管理および表示するためのシステムアーキテクチャを示す。システム100Nは、ユニバースまたはユニバースブラウザエンジン130と、アプリケーション140と、アイコングリッドアプリケーション160Nと、ステータスバーアプリ170Nと、ソーシャルパネルアプリ180Nと、ストアパネルアプリ190Nとを含む。これらのアプリケーションは、基本レベルのアプリケーションをシステム100N上に表し得る、しかしながら、いくつかの実施形態では、より多いまたはより少ないアプリケーションが、システム100Nの一部であってもよい。
上記の図1Mに議論されるように、ユニバースブラウザエンジンは、従来のコンピュータデスクトップシステム等内の2Dウィンドウを管理する、2Dウィンドウマネージャに類似する、3Dウィンドウ(例えば、プリズム)マネージャと見なされ得る。図1Nは、図1Mからのユニバースブラウザエンジンのさらなる詳細を提供し得る。ここでは、ユニバースブラウザエンジン130はまた、ユニバースサーバ105Nと、ローダボリューム110Nと、二次UIボリューム120Nと、ユニバースクライアント125Nと、ランチャアプリケーション130と、ユニバースサーバ105Nとを含んでもよい。ユニバースサーバ105Nは、マルチ並列処理のためのマルチスレッド式処理環境内のユニバースブラウザエンジンの処理スレッドであってもよい。
ローダボリューム110Nは、ユニバースブラウザエンジンが、仮想コンテンツをユーザのランドスケープ110内に表示するためのプリズムを作成する間、ユーザに表示される、プレースホルダボリュームである。例えば、ユニバースブラウザエンジンが、プリズムを設定し、仮想コンテンツをプリズムの中にレンダリングするためのアプリケーションを開始する間、ユーザが、ユーザのランドスケープ110内の特定の場所、例えば、ユーザのランドスケープ110の垂直壁上に表示するためのアプリケーションを選択すると、ユニバースブラウザエンジンは、ローダボリューム110Nをプレースホルダボリュームとしてのデフォルトアイコンとともに表示し、ユーザに、ユニバースブラウザエンジンが表示のためのプリズムを設定中であることを示してもよい。いったんアプリケーションが、仮想コンテンツをユーザのランドスケープ内への表示のためにプリズムの中にレンダリングすることを終了すると、ローダボリューム110Nは、レンダリングされた仮想コンテンツを含有する、実際のプリズムと置換される。
いくつかの実施形態では、ユニバースブラウザエンジンが、仮想コンテンツを表示するためのアプリケーションを開始する間、ユーザ103は、ローダボリューム110Nを所望の異なる場所に移動させてもよい。いくつかの実施形態では、ユーザは、ローダボリューム110Nを、最初に選択されたローダボリューム/プリズムの場所と異なる、場所に移動させてもよい。いったんユニバースブラウザエンジンが、プリズムを作成することを終了し、アプリケーションが、仮想コンテンツをプリズムの中にレンダリングすると、ユニバースブラウザエンジンは、ローダボリューム110Nを置換してもよく、ユーザが、ローダボリューム110Nを設置する度に、プリズムは、仮想コンテンツを表示してもよい。
二次UIボリューム120Nは、プリズム(例えば、その「親プリズム」)が作成されると作成され得る、別のプリズムである。二次UIボリューム120Nは、ユーザのために、プリズムの普遍インターフェースを提供する。例えば、二次UIボリューム120Nは、二次UIボリューム120Nが、プリズムを管理する(例えば、閉じる/除去する、共有する、追従する、プリズムのコンテンツのスクリーンショットを撮影する等)ための機構を提供するため、ウィンドウ装飾と見なされ得る。プリズムが、作成されると、プリズムがランチャの一部ではない(ランチャアプリケーションが、二次UIボリュームを有していなくてもよい)場合、二次UIボリューム120Nが、プリズムのために作成されてもよい。二次UIボリューム120Nは、ユーザがプリズムと相互作用し、それを管理するために、閉じる/除去する、共有する、追従する、スクリーンショット等のグラフィカルユーザインターフェースアイコンを表示するための空間/ボリュームを提供する。二次UIボリューム120Nは、親プリズムに関連付けられ、親プリズムとグループ化されてもよい。二次UIボリューム120N寿命は、それが関連付けられる親プリズム寿命が終了すると、終了する。
いくつかの実施形態では、二次UIボリューム120Nは、少なくとも3つの状態、すなわち、(1)親プリズムの焦点がずれているとき、何も表示しない、(2)親プリズムが合焦しているとき、コンポーネントの「可視名」を表示する、および(3)具体的ユーザ相互作用、例えば、ハンドヘルドコントローラ(例えば、トーテムまたは他の好適なユーザ相互作用コントローラ)のホームボタンがある秒数にわたって保持されたことが検出されると、アプリケーションメニューオプションアイコンの「カルーセル」を表示することであって、カルーセルは、アイコンの集合を表示し、そのうちの1つは、プリズムを閉じるための大「X」アイコンであってもよいことを有してもよい。いくつかの実施形態では、二次UIボリューム120Nは、その親プリズムを介して、入力を受信する。換言すると、親プリズムは、二次UIボリューム120Nが、そのカルーセルを表示するかどうか、したがって、親プリズムが、ユーザ入力を二次UIにリダイレクトするかどうかを決定してもよい。二次UIボリューム120Nのカルーセルは、下記に開示される。
いくつかの実施形態では、ランチャは、複合現実システムのためのデフォルト「ホーム」メニューであってもよい。ランチャは、コンテンツの複数のパネルをシステムステータスバーとともにまとめてもよい。各パネルは、異なるコンテンツタイプを表してもよい。アプリケーションは、ランチャから引き出され、迅速な復帰のために、ランドスケープの中にピン固定されてもよい。ランチャ自体も、場所毎のカスタマイズおよび/または迅速アクセスのために、ランドスケープの中に設置されてもよい。
ランチャ130Nは、ユーザに、新しいアプリケーションをユーザのランドスケープ110の中に立ち上げる能力を提供する。ランチャ130Nは、パネルと呼ばれる、一連の身体中心プリズムから成る、アプリケーションであってもよい。パネルは、垂直および水平にスクロール可能であってもよく、ユーザは、例えば、スワイプ運動を用いて、パネル間で切り替えてもよい。いくつかの実施形態では、1つのパネル(例えば、中心パネル)が、一度に可視であってもよく、その2つの近傍パネルが、プレースホルダパネルとしてその側面において可視である。ユーザが、次のパネルにスワイプすると、プレースホルダパネルは、拡張し、完全パネルを示してもよい。パネルは、アイコングリッドアプリケーション160Nと、ソーシャルパネル180Nと、ストアパネル190Nとを含んでもよい。いくつかの実施形態では、ユーザが、次のパネルにスワイプすると、パネル自体は、移動または変化しないが、代わりに、異なるパネル内のコンテンツ(例えば、アイコン)が、中心パネル(例えば、アクティブパネル)内および外に動画化されてもよい。さらに、アプリケーションは、下記にさらに議論される、場所毎のカスタマイズのために、ランチャ130Nから引き出され、ユーザのランドスケープ110の中にピン固定されてもよい。
いくつかの実施形態では、アプリケーション140(図1M)は、各アプリケーション140上の一元型レンダリングサービスクライアント150Nを介して、ユニバースブラウザエンジンと通信してもよい。一元型レンダリングサービスクライアント150Nは、ユニバースブラウザエンジン130内のユニバースサーバ105Nと通信してもよい。一元型レンダリングサービスクライアント150Nは、ユーザのランドスケープ内への表示のためのコンテンツを生成する、アプリケーション140および他のアプリケーションが、ユニバースサーバ150Nを介してユニバースブラウザエンジンと通信することを可能にする、一元型レンダリングシステムのクライアントサービスであってもよい。
ユニバースサーバ150Nは、ユニバースブラウザエンジンが、ユーザのランドスケープ内に表示されるためのユニバースブラウザエンジンコンテンツを提供する、アプリケーションと通信することを可能にする、一元型レンダリングシステムのサービスを備えてもよい。いくつかの実施形態では、通信は、データをレンダリングする以上のこと、例えば、データを入力する、セキュリティ権限を要求する、仮想キーボードの表示または非表示を要求すること等を備えてもよい。
いくつかの実施形態では、一元型レンダリングシステムは、複数のアプリケーションから単一ディスプレイ上(例えば、複合現実システムにおけるユーザのランドスケープ内)に表示されるためのグラフィカルデータを受信するためのハードウェアおよびソフトウェアリソース専用のシステムであってもよい。一元型レンダリングシステムは、複数のアプリケーション140からのグラフィカルデータをシーングラフ等の「一元型」データ構造に組み合わせ、これは、ディスプレイに、複数のアプリケーションからのグラフィカルデータを現実的および効率的様式において反映させるシーンをレンダリングするために使用され得る。一元型レンダリングシステムを達成するために、いくつかの実施形態では、アプリケーションは、クライアントプリズム(例えば、図1Nからのクライアントプリズム115N)と呼ばれる、プリズムのローカル表現に変更を行ってもよい。これらの変更は、次いで、ユニバースサーバ105Nに送信され、サーバプリズム内に記憶されてもよい。一元型レンダリングシステムは、次いで、更新されたデータをサーバプリズム内にレンダリングしてもよい。一元型レンダリングシステムは、以降、「Cali」または「Kali」システムと称され得る。ユニバースブラウザエンジンは、例えば、ユニバースブラウザエンジンが実世界内のプリズムを管理し得るため、Caliサーバの拡張バージョンと見なされ得る。
いくつかの実施形態では、ユニバースブラウザエンジンのための仮想コンテンツ(例えば、図1Mにおける115aまたは115b、図1Oにおける115)を作成する、各アプリケーション140は、個別のアプリケーション140のそれぞれ上にインストールされる、一元型レンダリングサービスクライアント150N(以降、「Caliクライアント」と称され得る)を介して、一元型レンダリングシステムおよびユニバースブラウザエンジンと通信する。さらなる情報は、「CENTRALIZED RENDERING」と題され、2017年3月30日に出願され、参照することによってその全体として本明細書に組み込まれる、関連米国仮特許出願第62/479,134号に開示され得る。一元型レンダリングシステムは、複数の異なるアプリケーションからの仮想コンテンツが適切に分析および処理されることを確実にし、必要な場合、仮想コンテンツが現実的様式においてユーザに表示されることを確実にすることによって、ユーザの体験を改良する。いくつかの実施形態では、ユニバースブラウザエンジンは、プリズムを管理すること等の付加的機能性を伴う、Caliサーバのインスタンスである。いくつかの実施形態では、クライアントプリズムは、クライアントボリュームのインスタンスであって、サーバプリズムは、サーバボリュームのインスタンスであって、アプリケーションオプションディスプレイをもたらす、プリズムがそのコンテンツをロードする間、ローダボリュームを表示する、他のプリズムと衝突させる、および変換ツリーの一部となる能力等、付加的機能性を伴う。
クライアントプリズム115N-aおよびクライアントプリズム115N-bは、アプリケーション140によって生成され、ユーザのランドスケープ内に表示されるためにCaliクライアント115N-aによってユニバースサーバ105Nに送信される、仮想コンテンツを備える。いくつかの実施形態では、アプリケーション140が、仮想コンテンツ115N-aおよび115N-bに変更を行うにつれて、仮想コンテンツへの変更は、クライアントプリズム115Nからユニバースサーバ105Nに通信され、その情報は、対応するサーバプリズムデータ構造(例えば、図1M-1Nにおける113aまたは113bまたは図1Oにおける113)内のユニバースブラウザエンジンの内側に記憶される。いくつかの実施形態では、アプリケーション140は、仮想コンテンツ115N-aが表示されるユーザのランドスケープ内の場所を把握しない。ユニバースブラウザエンジンは、クライアントプリズム115N-aに関連付けられた対応するサーバプリズム113aを介して、仮想コンテンツ115N-aの表示場所を管理してもよい(例えば、一元型レンダリングシステムによって処理された後の仮想コンテンツ115a)。
アプリケーション140は、ユニバースサーバ105Nにアクセスすることによって、新しいプリズムを要求してもよい。いくつかの実施形態では、ユニバースサーバ105Nは、ユーザのランドスケープ110内への表示のために仮想コンテンツを提供する、アプリケーションからの一元型レンダリングサービスクライアント150Nと通信する、ユニバースブラウザエンジン内のソフトウェアモジュールであってもよい。例えば、ユーザが、アプリケーションを立ち上げ、アプリケーションからの仮想コンテンツをユーザのランドスケープ内に表示することを所望するとき、アプリケーションは、ユーザのランドスケープ内にアンカされ得るプリズム内に表示されるための仮想コンテンツを、一元型レンダリングサービスクライアントを介して、ユニバースブラウザエンジンに、すなわち、アプリケーションから、ユニバースブラウザエンジン上のユニバースブラウザエンジン一元型レンダリングサービスに提供してもよい。
いくつかの実施形態では、アイコングリッドアプリケーション160Nは、最近のアプリケーションセクション(図示せず)および/または一般的アプリケーションセクション(図示せず)を備えてもよい。一般的アプリケーションセクションは、複合現実システム上にインストールされる各アプリケーションを表す、アイコンを備える。一般的アプリケーションセクションは、最初に、パッケージマネージャ(図示せず)へのコールが取り込まれ、インストールされたパッケージのリストを決定し得る。アイコンは、アプリケーション毎に、各パッケージ内に追加される。パッケージマネージャが、ユニバースブラウザエンジンに、パッケージインストールおよびアンインストールを通知すると、アイコングリッドアプリケーション160Nは、適宜、そのアイコンを調節する。パッケージマネージャサービスは、アプリケーションのインストールを管理し、その名称、アイコングラフィック、セキュリティ許可、実行可能ファイル、およびデータファイル等のそれらのアプリケーションについての情報を維持する。
最近のアイコンセクションは、最初に、ディスク上のログから再構築され、次いで、他のサービスからのコールによって更新されてもよい。パッケージ名は、ライフサイクルサービスが、ランチャに、アプリケーション開始イベントを通知すると、パッケージマネージャが、ランチャに、パッケージアンインストールイベントを通知すると、ディスクにログ付けされ得る。ユーザは、アイコンを選定し、立ち上げる、またはアイコンを抽出し、ランドスケープの中に設置することによって、アイコングリッドアプリケーション260と相互作用してもよい。
ライフサイクルサービスは、アプリケーションの開始、停止、スリープへの移行、およびウェイクアップのプロセスを管理する、一元型サービスであってもよい。ライフサイクルサービスはまた、アプリケーションが予想外に終了(クラッシュ)するときを把握する。これらのイベントのいずれかが発生すると、サービスのリスナは、通知され、ユニバースブラウザエンジンは、リスナのうちの1つである。ユニバースブラウザエンジンは、本サービスにアクセスし、アプリケーションを開始、停止、スリープ、およびウェイクアップする。いくつかの実施形態では、ライフサイクルサービスは、複合現実システム内で起動するアプリケーションプロセスのライフサイクルを制御するためのアプリケーションプログラミングインターフェース(API)を提供する。ライフサイクルサービスは、新しいプロセスをスポーンし、許可のセットを用いて、アプリケーションバイナリを起動し、APIをアプリケーションによって実装される所定のインターフェース上にコールし、そのライフサイクルを制御してもよい。ライフサイクルサービスはまた、リスナインターフェースを提供し、それを通して、他のモジュールは、開始/停止/一時停止/再開されるアプリケーションを追跡してもよい。ライフサイクルサービスは、ランチャまたはユニバースブラウザエンジンと別個のプログラムであってもよい。いくつかの実施形態では、ライフサイクルサービスは、ミドルウェアであってもよい。
いくつかの実施形態では、図1Nに示されるように、アイコングリッドアプリケーション160Nは、一元型レンダリングサービスクライアント250bと、クライアントプリズム115N-cとを備える。上記に議論されるように、いくつかの実施形態では、コンテンツをユーザのランドスケープ内に表示する、アプリケーションは、ユニバースサーバ105Nと通信する、一元型レンダリングサービスクライアント150Nを介して、そのコンテンツをユニバースブラウザエンジンに送信してもよい。ここでは、ランチャメニューのために複合現実システム上にインストールされたアプリケーションのアイコンを提供する、アイコングリッドアプリケーション160Nは、ユーザのランドスケープ内への表示のためのコンテンツを提供する、同様に任意の他のアプリケーションである。しかしながら、いくつかの実施形態では、アイコングリッドアプリケーション内のアイコンは、ユーザによって選択されると、ユニバースブラウザエンジンに、新しいアプリケーションを立ち上げ、始動させるように命令してもよく、その時点で、新しいアプリケーションは、ユニバースブラウザエンジンに、アプリケーションが新しいプリズムの中に表示されるためのコンテンツを提供し得るように、新しいプリズムを作成する(例えば、ユニバースサーバ105Nを通して)ことを要求してもよい。アプリケーションが、すでに実行している場合、ユニバースブラウザエンジンは、アプリケーションに、新しいプリズムを開くように要求してもよい。
ステータスバーアプリケーション170Nは、複合現実システムのためのステータスインジケータを備える。ステータスインジケータおよびステータスバーアプリケーション170Nは、ユーザによって調節可能ではない場合がある。ステータスインジケータは、最初に、Wi-Fiサービスを動作および維持するための第1のサービス、Bluetooth(登録商標)サービスを維持するための第2のサービス、およびステータスのための第3のサービスにクエリすることによって、取り込まれてもよい。これらのサービスが、ステータスバーアプリケーション170Nに、更新されたステータスを通知すると、ステータスバーは、適宜、調節してもよい。ステータスバーは、それらがシステム内の任意の場所から迅速かつ効率的に反応し得る、ユーザ迅速グランサブル情報を提供する。いくつかの実施形態では、ステータスバーは、ランチャの上方に表示されてもよい。ステータスバー内の4つの主要なセクションは、(1)グローバル検索、(2)通知、(3)迅速設定、および(4)電源であってもよい。音楽、電話、共有等、付加的一時的セクションが、必要に応じて、ステータスバーに追加されてもよい。
ユーザが、ランチャメニュー内にあるとき、ステータスバーは、グランサブルアイコンに簡約される。ユーザが、上部までスワイプすると、動画をトリガし得、ステータスバーは、拡張し得る。ステータスバーは、ユーザが、ランチャパネルを通して、左および右にスワイプし得る間、ランチャの上方に留まり得る。ステータスバーが、ハイライトされると、拡張し、前方に動画化し得る。サブ選択ハイライトが、デフォルトによって、例えば、グローバル検索上の左に現れ得る。より緊急コンテンツ(例えば、最近の通知、低バッテリ等)を有する、他のセクションが存在する場合、サブ選択ハイライトが、代わりに、そのセクション上に現れ得る。
ソーシャルパネルアプリケーション180Nは、ユーザが相互作用し得る、一連の連絡先から成ってもよい。ソーシャルパネルは、最初に、利用可能な連絡先のための連絡先サービスへのコールを取り込まれてもよい。各連絡先は、ソーシャルパネルに追加され、ユーザにアイコンとして表示されてもよい。ソーシャルパネルアプリケーション280が、新しい連絡先、更新された連絡先、除去された連絡先イベントを受信すると、ソーシャルパネルアプリケーション180Nは、適宜、その連絡先情報を調節してもよい。ユーザは、連絡先アイコンをクリックし、オプションメニューを利用可能な種々の連絡先プロバイダとともにポップアップさせることによって、連絡先アイコンと相互作用してもよい。ユーザが、プロバイダを選択すると、ランチャアプリケーションは、連絡先の情報を用いて、関連付けられたアプリケーションを開始してもよい。
ストアパネルアプリケーション190Nは、ユーザが、複合現実システムのためのアプリケーション140を検索、ダウンロード、およびインストールすることを可能にしてもよい。ユーザが、アプリケーションをダウンロードおよびインストールすることを要求すると、ランチャアプリケーション130Nは、ユーザの識別を識別照合サービス(図示せず)を用いて照合してもよく、次いで、パッケージマネージャを用いて、アプリケーションをインストールしてもよい。ライフサイクルサービスは、ユーザがアプリケーションをパネルから開始する場合、呼び出されてもよい。いくつかの実施形態では、ランチャ内の各パネルは、1つのランチャアプリケーションとしての代わりに、別個のアプリケーションとして機能してもよい。
いくつかの実施形態では、ユニバースクライアント125Nは、ユニバースブラウザエンジンに特有のコンテンツをレンダリングする。ユニバースサーバ105Nは、第三者アプリケーションをレンダリングしない。これは、プリズム内のコンテンツが、ユニバースサーバ105Nではなく、ユニバースクライアント125Nによってのみレンダリングされ得るためである。したがって、無限遠プリズム、ローダボリューム/プリズム、および/または二次UI(ユーザインターフェース)プリズムをレンダリングするために、サーバのためのそれらの特定のタイプのコンテンツをレンダリングするための作業が、ユニバースクライアント125Nに委任される必要があり得る。無限遠プリズムは、例えば、2つのプリズムが衝突するとき、ユニバースによって、付加的グラフィックをプリズムの周囲にレンダリングするために使用されてもよい。無限遠プリズムは、下記にさらに議論される。ローダプリズムおよび二次UIプリズムでは、ユニバースサーバ105Nとユニバースクライアント125Nとの間に、ある機能性を協調させるための具体的通信が存在し得る。
例えば、ユニバースサーバ105Nは、アプリケーションがロードを終了したことを伝えられ得る。ユニバースサーバ105Nは、次いで、クライアント側ローダプリズムに、アプリケーションを現在ロードされていることを通知してもよい。ローダプリズムは、動画を示すことによって、アプリケーションがロードを終了したことのイベントに反応する必要があるであろう。いったんクライアント側ローダプリズムが、動画を示すことを終了すると、ローダプリズムは、ユニバースサーバ105Nに、動画化を終了したことを通知してもよい。次いで、ユニバースサーバ105Nは、ローダプリズムを退けさせ、ローダプリズムを破棄し、ローダプリズムの代わりに、アプリプリズムをレンダリングされた動画で表示することによって、ローダプリズムが動画化を終了したことの通知に反応し得る。開示された内容は、単に、ユニバースクライアント125Nが機能し得る方法の一実施例である。当業者は、ユニバースクライアント125Nがユニバースブラウザエンジン130を補助し得るときの他の実施例が存在し得ることを理解し得る。
図1Oは、1つ以上の実施形態による、ユニバースブラウザプリズムの実施例を示す。アプリケーションコンテンツは、プリズムと呼ばれる、1つ以上の境界ボリュームの内側においてユーザに提示される。上記に議論されるように、非没入型のアプリケーションが、複合現実システム内で実行されるとき、そのコンテンツは、プリズムの内側にレンダリングされる。プリズムのプロパティおよび特性は、ユニバースブラウザエンジンがユーザのランドスケープ内のプリズムを一貫して管理することを可能にする。
プリズム113のボリューム空間は、図1Oにおける破線で示されるように、クリアかつ決定的境界を有してもよい。境界は、プリズム113の境界内にのみ表示されるための仮想コンテンツ115のための境界ボリュームを提供する。プリズムの境界は、プリズム内に表示されるアプリケーションからのコンテンツが、プリズム外およびユーザのランドスケープの中にオーバーフローする、すなわち、はみ出ないように防止する。プリズム113の境界は、ユーザにプリズム113内に表示される仮想コンテンツ115が見えるとき、ユーザに表示されなくてもよい。これは、ユーザのランドスケープ内への3Dコンテンツの現実的表示を維持するために、仮想コンテンツ115を境界するプリズムの境界を示さないことが重要であるため、重要な特徴である。当業者は、仮想コンテンツが、より現実的方法において、ユーザのランドスケープ内に表示されるように、仮想コンテンツ115の周囲にラップする、プリズムの境界を表示しないことの重要性を理解する。2Dウィンドウとは対照的に、2Dウィンドウの境界線および境界は、概して、表示され、したがって、2Dウィンドウを表示するコンピュータのユーザは、1つの2Dウィンドウ内のコンテンツと別の2Dウィンドウからのコンテンツを明確に区別し得る。しかしながら、いくつかの実施形態では、例えば、1つ以上のアプリケーションに関する問題をトラブルシュートすることに役立てるために、プリズムの境界を少なくとも一時的に表示することが有利であり得る。
アプリケーションは、ユニバースブラウザエンジンによって、コンテンツをその中に設置するためのプリズム113のインスタンスを与えられる。アプリケーションは、相対的設置アルゴリズムおよび/または恣意的変換を使用して、2Dおよび/または3Dコンテンツをプリズム113内にレンダリングしてもよいが、ユニバースブラウザエンジンは、依然として、最終的には、コンテンツ抽出等の総合的相互作用パターンの管理を担う。複数のアプリケーションは、プリズム113を介して、ユニバースブラウザエンジンに、プリズムを分離するプロセス境界をレンダリングし得る。
ユニバースブラウザエンジン内に配分される各プリズムは、調節され得る、関連付けられたキー/値プロパティのセットを有し、挙動の種々のビットを決定する、または所与のプリズムが存在する理由についての情報を伝達してもよい。いくつかのプロパティは、通常アプリケーションに関しては、読取専用であるが、プライベートAPIを伴うアプリケーションに関して、これらのプロパティは、書込可能である。プリズム113は、プリズムプロパティ110Oと、アプリケーション特有プロパティ120Oと、仮想コンテンツ115とを備えてもよい。加えて、いくつかのプリズム113は、ユーザに付加的プリズム管理オプションを提供するための二次UIボリューム130Oを備える。しかしながら、いくつかの実施形態では、プリズムは、例えば、これらの他のタイプのプリズム(例えば、ランチャメニュープリズム)が、二次UIボリューム130Oによって提供される特徴を要求し得ないため、二次UIボリューム130Oを有していなくてもよい。プリズムの境界のように、二次UIボリューム130Oは、同様に、ユーザに表示されなくてもよい。ユーザが、プリズムに変更を行うことを所望すると、ユーザは、プリズムのUI制御を二次UIボリュームのボリューム空間内に表示する、アプリケーションオプションメニューを表示するための要求を開始してもよい。
それらが保持する、アプリケーションに応じて、プリズムは、そのコンテンツのための適切なフィードバックおよび挙動を与えるために、異なるプロパティを要求し得る。アプリケーションデベロッパは、そのアプリケーションを作成するとき、そのプリズムのためのいくつかの事前にプログラムされたオプションから選択してもよく、したがって、そのコンテンツは、その選好に基づいて、正しく表され得る。下記は、これらのオプションのうちのいくつかの実施例である。
プリズムプロパティ110Oは、少なくとも部分的に、プリズムを定義し、ユニバースブラウザエンジンが、ユーザのランドスケープ内のプリズムを管理および維持することを可能にする。例えば、プリズムプロパティ110Oは、デフォルトサイズ、最大サイズ、最小サイズ、アンカ/設置タイプ(例えば、ビルボード表示等に対するオプション)、アンカタイプに対する所与のプリズムの挙動、アンカ場所、子プリズムスポーン場所、子頭部姿勢ハイライト、表面上挙動、独立変換制御、リサイジング対リスケーリングインジケータ、アイドル状態タイムアウト変数等のうちの1つ以上のものを含んでもよい。プリズムプロパティ110Oは、ユニバースブラウザエンジンに、ユーザのランドスケープ内のそれぞれおよび全てのプリズムを追跡および管理する能力をもたらす。単一アプリケーションにユーザのランドスケープ内に表示される仮想コンテンツ管理させることは、ユーザのランドスケープ内に表示されるコンテンツが一貫し、かつ信頼性がある様式において表示されることを保証する。プリズムプロパティ110Oのうちのいくつかはさらに、下記に開示される。
最大、最小、およびデフォルトサイズ:アプリケーションは、アプリケーションデベロッパによって規定された上側および下側境界を有してもよい(随意に、ユニバースブラウザエンジンからの付加的限界を伴う)。加えて、アプリケーションデベロッパは、アプリケーションが最初に立ち上げられるとき、デフォルトサイズを有してもよい。
移動シーケンスの間のビルボード表示するためのオプション:あるオブジェクト(例えば、平面にあるコンテンツ)は、移動シーケンスの間、ユーザに向かってビルボード表示を行い、視認性およびより少ない管理を促すことは、道理にかなっている。例えば、平面表面上に表示されるあるコンテンツは、具体的場所および/またはオブジェクトに対して位置付けられ得るが、その配向は、平面表面上に表示されるコンテンツが、常時、平面表面上に表示されるコンテンツを視認するユーザの方向に面するように、自動的に算出される。他の随意の身体動態挙動も、同様に、これに追加され得る。
子プリズムスポーン場所:プリズムは、子をスポーンし、フレキシブルなレイアウトを作成してもよい。アプリケーションデベロッパは、その中に子が親プリズムに対してスポーンし得る、場所の応答性範囲を決定することが可能であるべきである。子頭部姿勢ハイライト:アプリケーションは、子プリズム上の頭部姿勢ハイライトが別個のハイライトとして取り扱われ得るかどうか、または1つのユニットとして全ての子/親プリズムをハイライトし続けるかどうかを選定することが可能であり得る。
子プリズム関係挙動:プリズムは、その子プリズムが、平行移動、回転、およびスケーリングにおいて、それらにアンカされ得るかどうかを決定し、また、子プリズムが主要なプリズムを遮断するであろうかどうかを選定してもよい。
表面上挙動:プリズムは、表面にスナップされ、その表面にクエリし、それらがサイズ/スケール変化を所望するかどうかを決定してもよい。表面が、空間を有する場合、プリズムは、表面の全てまたはあるパーセンテージに適合するようにリサイジングし、ユーザの視野(FOV)に組み入れてもよい。
独立変換制御:アプリケーションは、その平行移動、回転、およびスケーリングの独立制御を要求してもよい。これは、アプリケーションが、それ自体を移動および変換することを可能にし得る。
リサイジング対スケーリング:いくつかのアプリケーションは、そのコンテンツのみをスケーリングする代わりに、その境界をリサイジングするように選定してもよい。これは、より多くのコンテンツがその境界内に表示されるように適応し得る。これは、既存のコンピュータ2Dウィンドウのように機能し得る。
アイドル状態タイムアウト:アプリケーションは、そのアイドル状態になるまでにかかる時間を選定することが可能であり得る。これは、アプリケーションが、視野外にある場合でも、コンテンツを再生し続けることを所望し得る状況をハンドリングし得る。例えば、ライブビデオを表示する、アプリケーションは、ユーザが一時的に目を逸らす場合でも、コンテンツを表示し、オーディオを再生し続けることを所望してもよい。
アプリケーション特有プロパティ120Oは、プリズム毎にアプリケーション特有状態情報を記憶する、キー/値ペアのリストであってもよい。キー/値ペアのリストは、アプリケーションに特有であって、キー/値ペアは、プリズム内に表示またはレンダリングされている、アプリケーションのコンテンツの状態情報を提供する。キー/値ペアのリストは、プリズムの中にレンダリングするアプリケーションに応じて、プリズム毎に異なってもよい。例えば、アプリケーションが、ビデオストリーミングアプリケーションである場合、いくつかのキー/値ペアは、ビデオ名、ビデオの視聴最大時間、ビデオを表示するためのアスペクト比等を含んでもよい。
プリズムプロパティ110Oおよびアプリケーション特有プロパティ120Oの両方が、プリズム毎に、ローカルデータベース137のデータ構造内に記憶されてもよい。プリズムデータは、ユーザは、複合現実システムを動作させ、プリズムと相互作用している間、常に更新される。上記に議論されるように、ローカルデータベース137のプリズムインスタンスデータは、周期的ベースで外部データベース150と同期することによって、持続されてもよい。いくつかの実施形態では、ローカルデータベース137および外部データベース150は、近リアルタイムで同期されてもよい。
ユーザが、ユニバースブラウザエンジン内のアプリケーションを立ち上げるとき、ユーザは、プリズムをランチャメニューから外に引き出し、結果として生じるボリュームを空間の中に設置してもよい。アプリケーションアイコンをクリックする等のアプリケーションを立ち上げる他の方法も、使用されてもよい。いくつかの実施形態では、ユーザは、コントローラ/入力デバイス(例えば、トーテム)を上または下に移動させることによって、プリズムを(球状シェル上の)高度および方位角に移動させてもよい。オブジェクトをより近くまたはより遠くに移動させるために、ユーザは、トーテム上のジョイスティックを使用して、プリズムを「押動」または「引動」させてもよい、またはユーザの指をトーテムのタッチセンサ式部分にわたってスライドさせてもよい。これは、シェルの半径を変化させる効果を有する。いくつかの実施形態では、トーテム上の2つのボタンは、プリズムを拡大または収縮させ得る。最後に、トーテム自体を回転させることは、プリズムを回転させ得る。これは、トーテムが6自由度(DOF)を有し得ると仮定する。これは、例えば、VR絵画アプリケーションにおいて使用される種類の制御と一致するが、トーテムは、任意の好適なユーザ入力デバイスであり得る。
いくつかの実施形態では、プリズムは、それらが他のプリズムと完全または部分的に交差するようにそれ自体が設置されることを可能にし得ない。プリズムは全く交差し得ないか、または正確に同一場所(アンカ点)に内在しない/能動的に表示され得ないかのいずれかであるが、プリズムは、下記に議論されるように、物理学目的のために、わずかのみ重複し得ることを例外とする。1つを上回るプリズムが、正確に同一場所に設置される場合、アクティブアプリケーションは、表示されてもよく、正確に同一場所にアンカされる他のアプリケーションは、隠蔽されてもよい。ユーザは、例えば、ボリューム内に表示されるドットによって、複数のアプリケーションがある場所に存在することが分かり得る。例えば、3つのプリズム/アプリケーションが、特定のスポットに存在する場合、3つのドットが存在し得る。ユーザが、3つのうちのアプリケーション#2を視認する場合、第2のドットが、明化され得る一方、他のドットは、暗化され得る。ユーザは、次いで、異なるアプリケーションを通して、スワイプまたはスクロールしてもよい。グラフィックは、切り替わってもよく、ドットは、更新され(例えば、アクティブドットを明化することによって)、現在アクティブであるアプリケーションを示してもよい。
いくつかの実施形態では、いくつかのプリズムは、同一アンカ場所に共同設置されてもよい。一見すると、これは、奇妙に思え得る。アプリケーションをユーザのランドスケープ内に設置するために利用可能なあらゆる3D空間の中で、それらを同一スポット内に設置する理由とは?例えば、仮想ボードゲームをプレーするためのユーザのお気に入りの場所は、台所のテーブル上であり得る。朝、ユーザは、朝食を食べている間、「Ticket To Ride」をプレーすることを好み得る。しかし、ユーザが、仕事から帰宅時、ユーザは、「Risk」をコンピュータと対戦することを好み得る。ユーザは、同一スポット内に位置する、複数のボードゲームを有し、必要時、それらを切り替え得る。
いくつかの実施形態では、プリズムは、空間内の恣意的場所に設置されてもよい。この場合、プリズムは、立方体/長方形ボリュームの中心点によってアンカされてもよい。しかし、(例えば、設置の間)プリズムが、ランドスケープ内の水平表面の近傍に移動される場合、プリズムは、表面にスナップするように試み得る。アンカ点は、次いで、プリズムの底部平面の中心となり得る。同様に、プリズムが、垂直表面(例えば、壁)に向かって移動される場合、それにスナップするように試み得、アンカ点は、垂直表面の隣にある、プリズムの側面となり得る。
アンカ点の目的は、プリズムがアンカされる表面を相互に貫通しないように、プリズムを設置することであり得る。アンカ点はまた、アンカされるオブジェクトとともに移動してもよい。複数のプリズムが、同一場所を共有するとき、その場所は、アンカ点であり得、その個別のボリュームの中心点ではない。アプリケーションは、それらが位置する場所を把握せず、把握する必要がないが、アプリケーションは、その個別のプリズムに尋ね、個別のプリズムがアンカされている方法を確認してもよい。アプリケーションはまた、有効であるアンカタイプを規定してもよい。例えば、Halcyonを垂直表面にアンカすることは、道理にかなっていない。
アプリケーションのためのコンテンツ(グラフィック)は全て、プリズムのボリューム内に含有されてもよい。ユニバースブラウザエンジンは、プリズム外に延在するグラフィックを自動的にマスクアウトしてもよい。アプリケーションは、世界内の他のアプリケーションについて把握していないため、ユニバースブラウザエンジンは、異なるアプリケーションの異なるプリズム間で発生する、相互作用を管理してもよい。
プリズムを設置するためのユーザインターフェース設計は、プリズムが設置状態において移動されている間、プリズムが物理的方法において上下揺するように要求してもよい(紐上のオブジェクトのように)。異なるアプリケーションが所望することになる物理的挙動の種類を予測することを試みる代わりに、プリズムは、設置されている間、移動情報をアプリケーションにフィードしてもよい(バインダインターフェースを通して)。アプリケーションは、次いで、適切に挙動し得る。
また、それらが設置されるにつれて、プリズム間にも物理的挙動が存在してもよい。これは、アプリケーションの物性実装をオーバライドし得、アプリケーションは、移動データの受信を停止し得る。プリズムは、最初に、交差に抵抗し得る。ユーザが、2つのプリズムを同一場所の中に押動させ続ける場合、プリズムは、交差するプリズムのアンカ場所にスナップし得る。これは、弾力があって(例えば、相互に相互作用する石鹸の泡に類似する)、物理学に大まかに基づくように行われ得る。
オーディオエミッタが、子ノードとしてアプリケーションのシーングラフ内に設置されてもよい。これらのノードは、ルートノード変換にローカルであってもよい。したがって、プリズムは、移動されてもよく、プリズムの移動は、アプリケーションがオーディオノードの変換を更新することを要求しない。ユニバースブラウザエンジンは、オーディオエミッタから世界空間への最終変換に関与し得る。プリズムはまた、オーディオノードをその境界に制約することに関与し得る。アプリケーションは、オーディオをその個別のプリズム外の点から放出し得ない。
いくつかの実施形態では、オーディオを空間化することが望ましくない場合がある。例えば、ユーザが、仮想テレビ(TV)を壁上に設置し、TV画像上に合焦する場合、TVのオーディオは、修正を伴わずに、ユーザに提供されてもよい。これは、より良好なオーディオ体験をユーザに提供する可能性が高い。周囲音の場合、オーディオ信号は、空間情報をすでに有する。音は、TVに対する最適場所に設置された仮想スピーカから放出されてもよい。
いくつかの実施形態では、ユーザによるオーディオ強度を制御するためのボタン押下に応じて、ユニバースブラウザエンジンは、頭部姿勢をチェックし、ユーザが見ているプリズムを決定し、音量アップまたは音量ダウンイベントを対応するプリズムに送信してもよい。プリズムは、その情報をプリズム内で起動されているアプリケーションに転送してもよく、アプリケーションは、それを解釈する方法を決定し得る。ランドスケープ内に合焦されているアプリケーションが存在しない場合、音量ボタン設定は、グローバル音量を調節してもよい。
いくつかの実施形態では、従来の2Dウィンドウとプリズム113との間の1つの差異は、2Dウィンドウでは、2Dウィンドウの境界を設定する境界線が、2Dウィンドウの境界線外のコンテンツから離れてコンテンツを2Dウィンドウ内に含有するための具体的境界線を提供するために、ユーザによって見えるように意図されることである。しかしながら、いくつかの実施形態では、3Dウィンドウ(例えば、プリズム113)の境界線は、不可視であるように意図される。ユーザに、全てのプリズムの輪郭(例えば、境界線)が見え得る場合、「現実」であるような錯覚を破壊し、その境界線が表示されるプリズム内に表示される仮想コンテンツは、現実である代わりに、コンピューティング/デジタル/仮想コンテンツのように現れるであろう。いくつかの実施形態では、境界線は、例えば、必要に応じて、ユーザ操作を有効にするために表示されてもよい。
別の差異は、2Dウィンドウが、一般に、ユーザによって制御および/またはと相互作用されるように意図されることである。例えば、閉じるボタンは、常時、従来の2Dウィンドウの右上角に現れ得る、またはメニューバーは、2Dウィンドウの上部境界線に表示され得る。しかしながら、プリズムでは、ユーザは、概して、プリズムおよびその境界と相互作用しない。代わりに、二次メニュー(例えば、アプリオプションメニュー)が、ユーザがオプションのリストからプリズムを制御および管理/操作するために、一時的にプルダウンされ得る。
さらに、2Dウィンドウは、その周囲から独立する。例えば、コンピュータ画面上に表示される内容は、ユーザが画面を移動させる場合、自動的に変化しない。しかしながら、プリズムは、実世界とのコンテキスト内に設置される必要がある。例えば、各プリズムは、(1)壁、テーブル等の実環境内のオブジェクト、(2)プリズムがアンカするための背景またはキャンバスを提供するために作成された仮想オブジェクト、および/または(3)ユーザに対して、実世界の中に設置されてもよい。いくつかの実施形態では、プリズムは、パス可能世界および実世界とのコンテキスト内に設置されてもよい。
なおもさらに、いくつかの実施形態では、プリズムは、相互に重複/相互貫通することを可能にされ得ないが、プリズムが物理学目的のためにわずかのみ重複し得ることを例外とする。例えば、いくつかの実施形態では、2つ以上のプリズム内の仮想コンテンツが、衝突するとき、仮想コンテンツは、それらが相互に衝突するように現れるとき、2つの仮想コンテンツ間でバウンスを示すように現れてもよい。ここでは、プリズムは、2つの仮想コンテンツ間のバウンスの効果を作成するために、わずかのみ重複してもよい。いくつかの実施形態では、2つ以上のプリズムのための境界ボックスが、衝突するとき、プリズム、故に、プリズムのコンテンツは、バウンスするように現れてもよい。
しかしながら、コンピュータ上の2Dウィンドウは、重複し、多くの場合、2Dウィンドウは、相互の上にカスケード表示され、ユーザのビューから相互を隠蔽し得る。いくつかの実施形態では、2つのプリズムが、ユーザのランドスケープ110内の同一場所にアンカされる場合、プリズムのうちの1つは、表示され得る一方、他のプリズムは、ディスプレイから最小限にされ、アイコンまたはテキストまたは画像(または任意の他の視覚的インジケータ)が、ユーザに、別のプリズムが正確に同一場所にアンカされていることを示すために表示される。いくつかの実施形態では、無限遠プリズムが、付加的グラフィックを、例えば、それらが衝突するとき、プリズムの周囲にレンダリングするために実装されてもよい。いくつかの実施形態では、無限遠プリズムは、その境界が無限遠に設定される、プリズムであってもよい。
例えば、2つのプリズムが、衝突するほど近接する場合、ユニバースブラウザエンジンは、光彩を2つのプリズム間の空間の領域内にレンダリングしてもよい。これらの例外をハンドリングするために、ユニバースブラウザエンジンは、2つのプリズム、ユーザの視野全体(ユーザに現在見え得る内容)、ユーザの動眼視野全体(動き回る場合、ユーザに見え得る内容)等の周囲の/それを囲繞する全ての空間を包含し得る、無限遠プリズムを作成してもよい。これは、ユニバースブラウザエンジンが、グラフィックを2つのプリズム間の任意の場所に引き出すことを可能にし得る。いくつかの実施形態では、無限遠プリズムは、いかようにも、衝突しない、または相互作用し得ない。いくつかの実施形態では、無限遠プリズムは、二次UI等を有していない。いくつかの実施形態では、ユニバースブラウザエンジンのみが、無限遠プリズムへのアクセスを有してもよい。無限遠プリズムは、ユニバースブラウザエンジン初期化時に作成されてもよく、ユニバースブラウザエンジンがシャットダウンするまで、常時存在してもよい。第2の実施例では、無限遠プリズムは、キャラクタ(例えば、アバタ、パーソナルアシスタント、蝶、動物等)を他のランドスケープアプリ間で移動させ、例えば、各アプリケーションの内容および/またはアプリケーションの使用方法をユーザに説明するために有用であり得る。
図1Pは、1つ以上の実施形態における、ウェブページを表示し、ウェブページパネルの位置および/または回転データをデフォルトにリセットするためのブラウザの初期化の実施例を図示する。本実施例では、ブラウザ(104P)は、初期化し、着目ウェブページをロードする(102P)。ブラウザ(104P)は、158Pにおいて、デフォルト位置および回転データをブラウザエンジン(104P)に伝送する、ユニバースブラウザエンジン(106P)と連動して機能する。ユニバースブラウザエンジン(106P)はさらに、156Pにおいて、ウェブページのためのウェブページパネルの位置および回転データをリセットする。ブラウザエンジン(104P)は、160Pにおいて、デフォルト位置および回転データをユニバースブラウザエンジンから受信し、デフォルト位置および回転データを非一過性コンピュータ可読媒体(108P)内に記憶する。
図1Qは、1つ以上の実施形態における、GET要求を用いた、ウェブページパネルの位置および/または回転データの決定の実施例を図示する。本実施例では、着目ウェブページ(102Q)が、108Qにおいて、例えば、ユーザの入力に応答して、またはあるイベント等によってトリガされる、ブラウザによってウェブページをロードすることに応じて、ウェブページパネルのための位置および回転データを取得するための要求をブラウザまたはブラウザエンジン(104Q)に発行するようにコーディングされ得るときに該当する。ブラウザまたはブラウザエンジン(104Q)は、110Qにおいて、位置および/または回転データを非一過性コンピュータ可読媒体(106Q)から取得してもよい。ブラウザまたはブラウザエンジン(104Q)は、次いで、112Qにおいて、非一過性コンピュータ可読媒体(106Q)からの本位置および/または回転データをウェブページに返してもよい。
図1Rは、1つ以上の実施形態における、SET要求を用いた、ウェブページパネルの位置および/または回転データの決定の実施例を図示する。本実施例では、着目ウェブページ(102R)が、152Rにおいて、ブラウザによってウェブページをロードすることに応じて、ウェブページパネルのための位置および回転データを設定するための要求をブラウザまたはブラウザエンジン(104R)に発行するようにコーディングされ得るときに該当する。位置および/または回転データの受信に応じて、ブラウザまたはブラウザエンジン(104R)は、154Rにおいて、非一過性コンピュータ可読記憶媒体108R(例えば、キャッシュ)内に以前に記憶された位置および/または回転データを更新してもよい。
ブラウザまたはブラウザエンジン(104R)はさらに、156Rにおいて、受信された位置および/または回転データを、SET要求とともに、ユニバースブラウザエンジン(106R)にパスしてもよい。ブラウザまたはブラウザエンジン(104R)は、次いで、非一過性コンピュータ可読媒体(108R)からの本位置および/または回転データをウェブページに返してもよい。SET要求を充足させるために、ユニバースブラウザエンジン106Rは、110Rにおいて、SET要求とともに受信され、158Rに伝送される、位置および/または回転データを使用することによって、ウェブページパネルの位置および/または回転データを設定してもよい。
図1S-1Xおよび2J-2Mを参照して説明される実施形態のうちの少なくともいくつかは、ウェブページ開発者が、ウェブページの位置ではなく、ウェブページの配向(例えば、1つ以上の軸を中心とした回転)を操作(例えば、設定、調節等)することを可能にするための技術を提供する。これらの実施形態のうちのいくつかでは、開発者は、ウェブページを、ユーザの基準フレームに対して、水平配向または垂直配向(それらの間の任意の他の角度ではなく)に設定するように限定される。いくつかの他の実施形態では、開発者は、ウェブページを水平配向または垂直配向およびそれらの間の任意の他の所定の角度に設定するように限定され得る。これらのウェブページの位置の操作は、例えば、本明細書に説明されるユニバースブラウザエンジンによって提供され得るが、ウェブページ開発者には提供されない。これらの実施形態では、ウェブページは、例えば、本明細書に説明されるユニバースブラウザエンジンによって決定された位置から開始する。ウェブページの開発者へのウェブページの配向を操作する能力の提供、および、例えば、ユニバースブラウザエンジンによる、ウェブページの位置および配向の両方を操作する能力を用いることで、これらの実施形態はまた、本明細書に提供されるXRシステムのユーザが、ウェブページの位置および配向の両方を操作することを可能にする技術を提供し得る。
より具体的には、図1Sは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するために、ウェブサイトと相互作用する、簡略化されたシステムの高レベルブロック図を図示する。より具体的には、ユニバースブラウザエンジン106Sは、ウェブページの配向データをブラウザエンジン104Sに伝送し、そのようなデータをブラウザエンジン104S内に記憶し得る。ユニバースブラウザエンジン(例えば、106S)は、ラップトップまたはデスクトップコンピュータのディスプレイ画面上に表示される2Dウィンドウを管理するためにラップトップまたはデスクトップコンピュータ上で起動する、2Dウィンドウマネージャに類似する、3Dウィンドウマネージャとしての役割を果たし得る。ユニバースブラウザエンジンと連動して機能する、ユニバースブラウザアプリケーションはまた、複合現実システムを介して、ユーザのランドスケープ内の仮想コンテンツの生成、設置、および表示を管理する。ブラウザエンジン104Sが、ウェブサイト102Sのウェブページまたはその中のコンテンツを表示するために、初期化すると(例えば、ユーザが、ブラウザを立ち上げる、またはウェブサイトをロード/訪問すると)、ブラウザ102Sは、ウェブサイトが、配向データをクライアントのブラウザに設定し、クライアントブラウザ(108S)からの配向データを取得することの両方を行うようにコーディングされる、APIのセットを組み込むようにコーディングされているとき、ウェブページの配向データがブラウザエンジン104Sによってレンダリングされるように設定してもよい。
ブラウザエンジンは、多くの場合、HTMLおよび/またはウェブページの他のリソースをユーザのデバイス(例えば、複合現実ヘッドセット)上の双方向視覚的表現に変換すること等のタスクを実施する、ウェブブラウザのソフトウェアコンポーネントである。以下の説明は、ChromiumまたはChromiumベースのブラウザを参照し得るが、他のブラウザ(例えば、MozillaのFirefox、AppleのSafari、MicrosoftのEdgeおよびInternet Explorer、GoogleのChromium、Opera、3Dブラウザ等)もまた、検討され、本技法は、完全に等しい効果を伴って、その個別のブラウザエンジン(例えば、MozillaのためのGecko、SafariのためのWebKit、ChromiumのためのBlink、Chromiumベースのブラウザ、MicrosoftのEdge、およびOpera、およびInternet ExplorerのためのTrident等)に対応する、異なるブラウザに適用される。
ブラウザエンジン104Sは、直上に述べられたブラウザまたは任意のカスタムブラウザ(例えば、3Dブラウザ)等の任意の公的に入手可能なブラウザを含んでもよい。ブラウザエンジン104Sの機能のうちの1つは、例えば、ウェブページのための配向データを用いて、HTMLドキュメントおよびウェブページの他のリソースをユーザのデバイス上の双方向視覚的表現に変換する、ウェブサイトまたはユニバースブラウザエンジン106Sのいずれかによって提供される配向データを使用して、視覚的表現のためのグラフィカル座標を計算する、プリズム(またはその一部)をペイントまたはレンダリングすること等を含む、機能を提供することである。
本明細書に説明されるウェブページを管理および表示するための1つ以上の実施形態に関するAPIの本セットは、ポータブルオペレーティングシステムインターフェース(POSIX)API規格に準拠し、プラットフォームまたはオペレーティングシステムから独立して、空間コンピューティング機能性を提供する、APIを含んでもよい。APIの本セットは、いくつかの実施形態では、上記に前述されるようなウェブサイトのコードの中に組み込まれてもよく、および/またはいくつかの他の実施形態では、複合現実システム上に常駐する、オペレーティングシステムまたはソフトウェアアプリケーションの一部の中に統合されてもよい。
APIの本セットは、ウェブサイト102Sと、ブラウザエンジン104Sと、ユニバースブラウザエンジン106Sとの間で配向データを設定および取得するだけではなく、また、オペレーティングシステムとソフトウェアアプリケーションとの間のランタイム層および1つ以上の3Dエンジンとも併せて(またはオペレーティングシステムサービス層とソフトウェアアプリケーションとの間では、より精密に)機能する。本ランタイム層は、ライブラリ、アプリケーション、サービス等を含み、下層複合現実システムのための高度なグラフィカルユーザインターフェース、および3次元平行移動および回転変換、材料および骨格3Dモデルアニメーションを伴う3Dモデル、2Dスプライトアニメーション、空間コンピューティングのための高忠実性空間化テキストレンダリング、2Dおよびサウンドフィールドオーディオ、2Dおよび立体視ビデオ、剛体衝突物理学、リアルタイム粒子FX、入力イベントおよび触知制御、手のジェスチャ、発話認識および発話/テキスト変換、オブジェクト、照明、陰影、および実世界オクルージョンをレンダリングするためのリアルタイム空間コンピューティング技術等の種々のコンピューティング機能性を提供する(単独で、または3Dエンジンと併せてのいずれかで)。
例えば、本ランタイム層は、仮想オブジェクト、ブラウザ ウィンドウ、レンダリングされたウェブページ等、または任意のその属性(例えば、ディスプレイ座標、サイズ、形状、遠近感、照明効果等)が、ユーザによって現実またはほぼ現実であるように現れる、またはそのように知覚されるように、仮想3次元空間内に表示される、例えば、プリズム(後に説明されるであろう)、仮想オブジェクト、ブラウザウィンドウ、レンダリングされたウェブページ等に適用され得る、3次元平行移動および回転変換のセットを含んでもよい。
図1Sに戻ると、APIのセットを用いて、ウェブサイト102Sは、ブラウザエンジン104Sから配向のための要求を送信してもよい(112S)。この場合、ブラウザエンジン104Sは、直近の配向データをウェブサイトに伝送してもよい(114S)。上記に説明されるように、ユニバースブラウザエンジン106Sは、ブラウザエンジン104Sが、例えば、そのような配向データをユニバースブラウザエンジン106Sから取得することからの付加的遅延を伴わずに、ウェブサイト102Sからのそのような要求に応答し得るように、ブラウザエンジン104S内に、またはそれを用いて(例えば、ブラウザエンジン104Sによってアクセス可能なキャッシュ内に)、配向データを記憶してもよい。
最新配向データをウェブサイト102Sに返すことに加え(114S)、ブラウザエンジン104Sは、配向データ(110S)を、単独で、またはレンダリングされたウェブページとともにのいずれかで、ユニバースブラウザエンジン106Sに伝送してもよい。ユニバースブラウザエンジン106Sは、110Sを介して受信された配向データに基づいて、プリズム(またはそのより小さいボリューム)を作成または識別し、ユニバースブラウザエンジン106Sは、配向データ(116S)をブラウザエンジン(104S)と同期させる。ユニバースブラウザエンジン106Sは、ブラウザエンジン104Sをコールし、その本来の機能、ライブラリ、および/またはAPI(例えば、ChromiumまたはWebKitにおけるRenderWidget、OpenGL API、OpenGL ES2.0API等、Almost Native Graphics Layer Engine、Direct3D API、WebGL、Gfx API等、またはそれらの任意の組み合わせ)を呼び出し、表示のために、配向データに基づいて、ウェブページのコンテンツをプリズムまたはその一部内にレンダリングしてもよい。
いくつかの実施形態では、ユニバースブラウザエンジン106Sは、オペレーティングシステムスタック内のオペレーティングシステムコアおよびオペレーティングシステムサービスの上方で起動される、1つ以上の3Dエンジンを呼び出し、3Dコンテンツをレンダリングしてもよい。これらの1つ以上の3Dエンジンは、3Dおよび/または2Dグラフィックのための任意のカスタム3Dエンジンである、グラフィック処理ユニット(GPU)の抽象化層を提供する、商業的または公的に入手可能な3Dエンジン(例えば、Unreal Engine4、Unreal Engine3、CryEngine V、Unity 3D Source Engine、Source Engine2等)を含んでもよい。これらの実施形態のうちのいくつかでは、複合現実システムは、3Dエンジン全体を組み込む必要はない。むしろ、複合現実システムは、レンダリングエンジンまたはレンダリングAPI、物理法則をエミュレートするための物理学エンジン、JavaScript(登録商標)スクリプト等のスクリプトを解析および実行するためのスクリプトエンジン、メモリ管理モジュール、および/またはスレッドモジュール等のより小さい部分を組み込んでもよい。いくつかの実施形態では、本明細書に説明される複合現実システムは、2Dコンテンツをレンダリングするためのレンダラと、3Dグラフィックをレンダリングするための別個のレンダラとを呼び出してもよい。
ユーザはさらに、複合現実システムを通して、仮想3D空間内に表示されるウェブページの配向を改変してもよい。例えば、ユーザは、それぞれ、表示されるウェブページ、そのためのプレースホルダ、またはウェブページのミニプレビューバージョンを配向することと関連付けられる、ソフトウェアハンドルを握持することによって、表示されるウェブページ、そのためのプレースホルダ、またはウェブページのミニプレビューバージョンを自由に移動および/または回転させてもよい。ウェブページの配向データは、したがって、修正され、ユニバースブラウザエンジン106Sはさらに、配向データをブラウザエンジン104Sと同期させてもよい(116S)。その時点で、ブラウザエンジン104Sは、次いで、オリジナル配向データと本修正された配向データを置換する。
図1S-1Xおよび2J-2Mを参照して説明されるいくつかの実施形態では、ウェブページまたはそのパネルの配向データは、いくつかの実施形態では、位置付けおよび配向データの両方を含み得るが、配向データは、いくつかの他の実施形態では、位置付けデータではなく、配向のみを含み得ることに留意されたい。さらに、配向データは、配向データが、位置付けデータおよび配向データの両方を含む、それらの実施形態では、位置付けデータ、配向データのいずれか、または位置付けおよび配向データの両方を指し得ることに留意されたい。配向データが、配向データ(例えば、1つ以上の軸を中心とした回転)のみを含む、いくつかの実施形態では、これらの実施形態は、ウェブページ開発者に、ウェブページの位置ではなく、配向を操作(例えば、設定、変更等)する能力を提供する。いくつかの実施形態では、ウェブページの開発者は、例えば、Window.VirtualWorld.PositionおよびWindow.VirtualWorld.rotationを使用し、ウェブページパネルの現在の位置および回転を取得してもよく、開発者はさらに、例えば、Window.VirtualWorld.Position=newDomPoint(x,y,z)およびWindow.VirtualWorld.rotation=newDomPoint(x,y,z)を使用して、それぞれ、位置および回転を設定してもよい。
図1Tは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するために、ウェブサイトと相互作用する、簡略化されたシステムの別の高レベルブロック図を図示する。より具体的には、図1Tは、いくつかの実施形態における、ウェブページのためのブラウザパネル102Tと、ブラウザエンジン104Tと、ユニバースブラウザエンジン106Tとの間の相互作用と、ブラウザ102T、ブラウザエンジン104T、およびユニバースブラウザエンジン106Tによって実施される個別のタスクおよび機能とを図示する。ブラウザまたはウェブブラウザは、ウェブリソース(例えば、個々のウェブページ、画像、ビデオ等)が、統一資源ロケータによって識別され、ウェブブラウザが、これらのウェブリソースをウェブサーバから読み出し、それらをユーザのデバイス上に表示することを可能にする、ワールドワイドウェブに関する情報にアクセスするためのソフトウェアアプリケーションである。
ブラウザエンジン(例えば、104T)は、HTMLおよび/またはウェブページの他のリソースをユーザのデバイス(例えば、複合現実ヘッドセット)上の双方向視覚的表現に変換すること等のタスクを実施する、ウェブブラウザのソフトウェアコンポーネントである。本明細書に説明される種々の実施形態は、開発者およびユーザが、少なくとも、APIの前述のセットと、複合現実システムと、ソフトウェアアプリケーションおよびライブラリ(例えば、ユニバースブラウザエンジン)とを使用することによって、インターネットコンテンツを管理および表示し、ウェブリソースを利用するために、任意の公的または商業的に利用可能なブラウザおよびその個別のエンジンを活用する。
ウェブサイトは、着目ウェブページまたはウェブページのパネルのための配向データを設定し得(102T)、現在のウェブページの現在の配向をさらに要求し得る(102T)。ウェブページの開発者が、ある配向データを含む、ある様式において、着目ウェブページを提示することを所望している場合がある、いくつかの実施形態では、ウェブサイトはさらに、そのような配向データをブラウザに送信してもよい(102T)。
いくつかの実施形態では、ブラウザが、コンテンツをインターネットから表示するために立ち上げられる、または初期化されると、ブラウザは、初期化し、ウェブサイトのウェブページまたはその中のコンテンツをレンダリングおよび表示する(104T)。ブラウザはまた、ブラウザエンジンによってレンダリングされるべきウェブページの配向データを送信してもよい(104T)。例えば、ウェブサイトが、配向データをクライアントのブラウザに設定し、配向データをクライアントブラウザから取得することの両方を行うようにコーディングされる、APIの前述のセットを組み込むようにコーディングされるとき、ブラウザは、本配向データをウェブサイトから受信し、ウェブパネルがコンテンツをウェブサイトから表示するために、配向データを設定してもよい。
ブラウザは、ウェブページのためのウェブパネルのための変換、配向データをリセットしてもよい(104T)。例えば、ブラウザは、ウェブページパネルのための3D変換(例えば、3D平行移動変換、3D回転変換、および/または3Dスケーリング変換)をデフォルト値または状態にリセットしてもよい。デフォルト値または状態は、一実施形態では、レンダラ(例えば、WebKitおよびChromiumのためのRenderWidget)によってアクセス可能な非一過性メモリ(例えば、キャッシュメモリ)内に記憶されてもよい。ブラウザは、配向のための要求をウェブサイトからそのブラウザエンジンに中継してもよい(104T)。ブラウザエンジンは、エクステンデッドリアリティ(XR)システム内に常駐する、ウェブサイトとユニバースブラウザエンジンとの間の中間体として作用する。
ウェブページパネルの配向データが、前述の非一過性メモリ内に記憶される、いくつかの実施形態では、ブラウザまたはそのブラウザエンジンは、例えば、ユニバースブラウザエンジンからのそのようなデータを取得することからの付加的遅延を伴わずに、ウェブサイトからの配向データのための要求に迅速に応答し得る。ブラウザエンジンによってアクセス可能な本配向データは、ウェブサイトまたはブラウザがデータまたはその一部を変化させるとき、同期されてもよい。加えて、または代替として、ブラウザエンジンによってアクセス可能な本配向データは、ブラウザによって、初期化およびリセットされてもよい。いくつかの実施形態では、本配向データは、配向データのためのウェブサイトの要求(102T参照)によって更新されてもよい。ブラウザエンジンが、配向データをウェブサイトから受信する、いくつかの実施形態では、ブラウザエンジンはさらに、データをブラウザにパスしてもよい。
ブラウザはまた、単独で、またはレンダリングされたコンテンツ(例えば、ウェブページ)とともにのいずれかで、配向データをユニバースブラウザエンジン(104T)に送信してもよい。ユニバースブラウザエンジンは、少なくとも部分的に、ブラウザエンジンからの配向データに基づいて、レンダリングされたウェブページを表示するために、3D仮想ボリューム(例えば、プリズム)を作成してもよい。加えて、または代替として、いくつかの実施形態は、ユーザに、エクステンデッドリアリティ(XR)システムによって作成された仮想3D空間内にレンダリングされたウェブページ(またはコンテンツ)を操作する能力を提供してもよい。
ユーザは、したがって、変換の新しいセットがレンダリングされたウェブページに適用される必要があるように、仮想3D空間内にレンダリングされたウェブページを移動および/または回転させてもよい。エクステンデッドリアリティシステムのオペレーティングシステムは、ランタイム層および3Dエンジンを含み、少なくとも部分的に、ブラウザエンジンから受信された配向データに基づいて、1つ以上の変換の新しいセットをレンダリングされたウェブページに適用してもよい。1つ以上の変換の新しいセットが、適用された後、ユニバースブラウザエンジンはまた、新しい配向データをブラウザエンジンに返信し(106T)、その中の前の配向データを更新してもよい。
ブラウザが、初期化すると、またはユーザが、レンダリングされたウェブページを操作し、故に、配向データを変化させると、ブラウザエンジンは、配向データを、利用可能である場合、ユニバースブラウザエンジンから受信し得る(104T)。ブラウザエンジンは、したがって、非一過性メモリ(例えば、キャッシュ)内に記憶される配向データを、ユニバースブラウザエンジンから受信され(104T)、例えば、キャッシュメモリ内に記憶される、リフレッシュされた配向データで更新し得る。ブラウザエンジンはまた、ウェブページパネルのための配向データを設定してもよい(104T)。ウェブページの開発者が、ウェブページの配向を設定している(例えば、開発者が、オンラインチェスゲームを表示するウェブページの位置および/または回転を設定している)、ある実施例では、ブラウザはまた、ウェブサイトから受信された配向データに従って、ウェブページパネルの配向データを設定してもよい。
ユーザが、プリズム内に表示されるウェブページパネルの位置を改変することを可能にされる、いくつかの実施形態では、ユニバースブラウザエンジンは、非一過性メモリ(例えば、キャッシュ)内に記憶される位置データを、ウェブページパネルの位置のユーザ操作に基づいて、例えば、キャッシュメモリ内に記憶される、位置データで更新してもよい。ユニバースブラウザエンジンはまた、ウェブページパネルのための位置データを設定してもよい(104T)。
加えて、ブラウザエンジンは、ユニバースブラウザエンジンが、エクステンデッドリアリティシステムを介してレンダリングされたウェブページを提示するために、仮想3D空間(例えば、プリズム)を決定し得る(例えば、新しいものを作成する、または既存のものから識別することによって)ように、配向データをユニバースブラウザエンジンに送信してもよい(104T)。ユーザが、レンダリングされたウェブページをさらに操作する能力を提供される、いくつかの実施形態では、ブラウザエンジンは、レンダリングされたウェブページの配向データをユニバースブラウザエンジンに提供してもよく、これは、ひいては、ユーザがレンダリングされたウェブページを操作するためのソフトウェアハンドルを提供し、対応する変換を実施し、ユーザの操作に応答してもよい。
ユニバースブラウザエンジンはまた、106Tにおいて、ユーザが、仮想3D空間(例えば、1つ以上のプリズム)内のウェブページおよび他のコンテンツおよび/またはリソースを管理および表示するための高度なグラフィカルユーザインターフェースおよび機能性を提供するために、オペレーティングシステム、1つ以上のオペレーティングシステムサービス、1つ以上のランタイムアプリケーションおよびライブラリのセット、1つ以上の3Dエンジン、およびエクステンデッドリアリティシステムのアプリケーションのスイートを含む、またはそれと連動して機能してもよい。例えば、ユニバースブラウザエンジンの機能のうちの1つは、ウェブページの(または他の仮想コンテンツ)の配向データ(および/または位置データ)をブラウザエンジン(104T)に提供することである。ユニバースブラウザエンジンはまた、直近の配向データが、ブラウザエンジンにプッシュされる(ユニバースブラウザエンジンから)、またはユニバースブラウザエンジンからプルされ得る(ブラウザエンジンによって)ように、直近の配向データ(および/または位置データ)を、ブラウザエンジンと同期させる(106B)。
図1U-1Wは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示する際に使用され得る、例示的ブラウザエンジンおよびユニバースブラウザエンジンのさらなる詳細なブロック図を図示する。より具体的には、図1Uは、いくつかの実施形態における、仮想3D空間(例えば、プリズム)内のウェブページパネルの3D配向データを設定するための簡略化された擬似コードを図示する。これらの実施形態では、擬似コードは、Chromiumのためのコードの類似セットに基づくが、他のウェブブラウザのためのコードもまた、検討され、完全に等しい効果を伴って、本明細書に説明される技法に適用されることができる。
例えば、ブラウザエンジン100Uは、102Uにおいて、Window.VirtualWorld.Orientationを実行し、ユニバースブラウザエンジン内のウェブページパネルの配向データを設定するためのプロセスを初期化する。いくつかの実施形態では、Window.VirtualWorld.Orientationは、例えば、OpenGL Mathematics(GLM)(または任意の他の数学ライブラリ)またはCSE20211(Gfx)のための単純グラフィックライブラリを利用して、部分的または全体的に、2Dまたは3D空間内の2Dおよび3Dエンティティのための配向データおよび1つ以上の変換に基づいて、ウェブページパネルの配向データを設定および取得してもよい(例えば、擬似コード「glm::vec3old_pos(0.0f)」、「glm::quat rotation(glm::vec3(0.0f))」、「glm::vec3 scale(1.0f)」、およびGLMにおける「glm::mat4 transform=web_container_->getCurrentVolumeTransform()」または「gfx::Point3F rot=local_frame_client->GetVirtualWorldRotation()」、またはGfxにおける「gfx::Point3F flat_rot{-M_PI_2,0.0f, 0.0f}」によって)。ウェブページ開発者が、ウェブページパネルの位置ではなく、0度~90度の回転のみを選定するように操作(例えば、設定、改変等)することを可能にされる、いくつかの他の実施形態では、Window.VirtualWorld.Orientationは、ブラウザエンジン内に列挙されるタイプ(「enum」)として定義される、入力(例えば、ストリング「flat」または「upright」)を受け取り得る。これらの実施形態のうちのいくつかでは、ユニバースブラウザエンジンは、列挙されるタイプの入力をGLMタイプに変換し、データをウェブページパネルに設定してもよい。例えば、入力が平坦ウェブページパネルを示す、ある場合には、ウェブページパネルの回転は、{-M_PI_2,0.0f, 0.0f}に設定され得る。別の実施例として、入力が、直立ウェブページパネルを示す、ある場合には、ウェブページパネルの回転は、{0,0,0}に設定され得る。擬似コード、プログラミング言語、および種々のクラス、変数等の名称は、本願では、例証および解説目的のために使用され、同じまたは実質的に類似目的を果たす、任意の他の好適なプログラミング言語、名称等もまた、検討され、また、そのような目的を達成するために使用されてもよいことに留意されたい。以下は、関数宣言を含むためにヘッダファイルの一部内に実装される、前述の説明のための例示的コードセグメントであるが、他の類似または均等物実装もまた、検討されており、したがって、使用され得ることに留意されたい。
ブラウザエンジン100Uはさらに、LocalFrameClientImpl::SetOrientation(106U)(またはLocalFrameClient*)、RenderFrameImpl:SetOrientation(108U)を実行し、上記に説明されるように、または本明細書に説明されるVirtualWorld::setOrientation、RenderFrameHost*、WebLocalFrameImpl*とともに、プロセス間通信(IPC)メッセージ-FrameHostMsg_SetOrientationを送信してもよい。構成概念RenderFrameImpl:SetOrientationは、RenderWidget::SetOrientationをコールし、IPCメッセージを送信するために使用されてもよい。構成概念LocalFrameClientImpl::SetOrientationは、C++LocalFrameClientImpl.cppから導出され、例えば、GfxまたはGfx-rs等の低レベルグラフィック抽象化層および配向データを使用して、クライアントフレームのための配向データを設定および取得する。
構成概念RenderFrameImpl::SetOrientationは、C++RenderFrameImpl.cppから導出され、Gfxおよび配向データに基づいて、レンダラ(例えば、RenderWidget for Chromiumベースのブラウザ)を呼び出し、フレームをブラウザエンジン(例えば、ChromiumベースのブラウザのためのBlink)に返信するように構成されてもよい。ブラウザエンジン100Uはまた、112Uにおいて、少なくとも、RenderWidget::SetOrientationを実行することによって、レンダラまたはレンダリングプロセスを呼び出し、ウェブページパネルのためのRenderWidgetクラス内に記憶される配向データ(例えば、キャッシュメモリ内に記憶される配向値)を更新してもよい。別個のコンテンツレンダリングプロセスがさらに、実行またはトリガされ、1つ以上のプロセス(例えば、1つ以上のレンダリング機能)によって、3D配向データに従って、着目ウェブページのコンテンツを「ペイント」またはレンダリングするように実行してもよい。より具体的には、レンダラプロセスRenderWidgetは、グルーインターフェース(例えば、WebWidgetDelegate)を使用して、抽象インターフェースをグルーインターフェース内に実装してもよい。本抽象インターフェースは、例えば、2Dウィンドウまたは3Dボリュームをディスプレイ空間内に含み、入力イベントを受信し、コンテンツをその中にレンダリングしてもよい。補助ディスプレイアイテム(例えば、オプションのリストを示す上/下矢印を伴う選択ボックス、タブ、ポップアップウィンドウ、ナビゲーションコマンド等)がレンダリングされるべき、これらの実施形態のうちのいくつかでは、ブラウザエンジン100Uはさらに、そのようなディスプレイアイテムのために、別のレンダリングプロセス(例えば、RenderView)を実行してもよい。
前述のヘッダファイルは、下記に列挙されるようないくつかの例示的コードを用いて拡張され得るが、他の類似または均等物コードもまた、検討されており、したがって、類似目的を達成するために使用されてもよい。
以下の節は、フレームをレンダリングするためのいくつかの例示的コードを含むが、他の類似または均等物コードもまた、検討されており、したがって、類似目的を達成するために使用されてもよい。
以下は、配向を取得するためのいくつかの例示的コードを含むが、他の類似または均等物実装もまた、検討されており、したがって、使用され得ることに留意されたい。
以下は、配向を設定するためのいくつかの例示的コードを含むが、他の類似または均等物実装もまた、検討されており、したがって、使用され得ることに留意されたい。
ChromiumまたはChromiumベースのブラウザが使用される、いくつかの実施形態では、ブラウザエンジン100Uは、そのレンダリングシステム(「ビュー」)を使用して、ウェブページをレンダリングし、ユーザインターフェースは、レンダリング、レイアウト、およびイベントハンドリングに関与する、「ビュー」と呼ばれる、コンポーネントのツリーとして構築される。コンポーネントのツリー内の各ビューは、その独自の境界を有し、ユーザインターフェースの異なるコンポーネントを表し、ウィジェット(本来の2Dウィンドウまたは3Dボリューム)は、そのようなツリーのルートに位置する。
いくつかの実施形態は、配向データを用いて、仮想3D空間(または2Dウィンドウ)を作成し、仮想3D空間(または2Dウィンドウ)をRootViewにパスし、次いで、イベントをツリーの中に伝搬する。いくつかのディスプレイアイテムは、本来のウィジェットを表示およびサイズ調整するための方法を把握する、特殊な種類のビュー内にホストされる、オペレーティングシステムの制御を使用して、レンダリングされてもよい。これらのディスプレイアイテムは、例えば、ボタン、テーブル、ラジオボタン、チェックボックス、テキストフィールド、他の制御等を含む。コンポーネントのそのようなツリーについてのさらなる詳細は、図2G-2Iを参照して下記に説明される。
ブラウザエンジンはさらに、少なくとも部分的に、配向データに基づいて、「delegate_->SetOrientation(orientation)」および「delegate_->SetOrientation(orientation)」を使用する、WebContentsImpl::OnSetOrientation(114U)、CefBrowserHostImpl::SetOrientation(116U)を実行してもよい。ブラウザエンジンはさらに、CEF(Chromium Embedded Framework)とユニバースブラウザエンジンとの間のカスタム相互作用を可能にする、ユニバースブラウザエンジン特有インターフェースを用いて、CefUniverseBrowserEnginePrivateHandler::OnSetPageOrientation(118U)を実行する。CEFベースのアプリケーションは、CEFを初期化し、CEFメッセージループを起動するためのエントリポイント、プロセス特有のコールバックをハンドリングするためのCEFApp派生クラス、ブラウザ-インスタンス特有のコールバック(例えば、ブラウザ寿命、コンテキストメニュー、ダイアログ、ディスプレイ通知、ドラッグイベント、注目イベント、キーボードイベント等に関するコールバック)をハンドリングするためのCEFClient派生クラス、CefBrowserHost::CreateBrowser()によって作成された1つ以上のCEFBrowserインスタンス等のコンポーネントを含んでもよい。
ブラウザエンジン100Uはさらに、構成概念CefBrowserHostImpl::SetOrientation(116U)およびCefBrowserHostImpl::SetOrientationを実行し(例えば、ブラウザホスト実装内で)、ハンドラを決定してもよい(例えば、「CefRefPtr<CefUniverseBrowserEnginePrivateHandler>handler=client_->GetUniverseBrowserEnginePrivateHandler()」および「handler->OnSetPageOrientation(this, orientation)」を用いて)。配向は、vector3タイプである場合とそうではない場合があることに留意されたい。例えば、配向は、「flat」、「upright」等の列挙されるタイプ(「enum」)であってもよい。配向が、vector3タイプである、いくつかの実施形態では、「handler->OnSetPageOrientation(this, orientation.x(), orientation.y(), orientation.z())」が、使用されてもよい。ブラウザエンジンはまた、パブリック関数CefUniverseBrowserEnginePrivateHandler::OnSetPageOrientationを実行し、ウェブページパネルの3D配向を設定してもよい。
ユニバースブラウザエンジン126Uは、ブラウザエンジン100Uから受信された3D配向データを用いて、ClientHandler::OnSetPageOrientation(120U)、Browser::OnSetPageOrientation(122U)、およびBrowserWindow::OnSetPageOrientationおよびBrowserWindow::OnSetPageOrientation(124U)を実行してもよい。ClientHandlerは、ルールを定義するための手段(例えば、ブラウザ内で評価され、往復遅延または待ち時間を低減させ得る、宣言条件およびアクション)を提供するために、サーバへのコールバックを必要とせずに、ブラウザ内で起動する、イベントハンドラを含む。ClientHandlerはまた、GLM(OpenGL Mathematics)を使用して、仮想3D空間(例えば、プリズム)内のウェブページ配向を設定することを委任してもよい。
図1Vは、図1Vにおける前述のブロックのうちのいくつかの間の通信を図示し、ブラウザエンジン100Vにおいて、仮想3D空間(例えば、プリズム)内の3D配向データをユニバースブラウザエンジン126Cから取得する方法を図示する。下向き矢印は、実行のシーケンスおよび/または実行結果のパスを示し、上向き矢印は、値の戻りを示す。
これらの実施形態では、ブラウザエンジン100Vは、上記の図1Uを参照して説明されるものと同様に、102Vにおいて、Window.VirtualWorld.Orientationを実行し、ユニバースブラウザエンジン内でウェブページパネルの3D配向データを設定するためのプロセスを初期化してもよい。図1Vは、別のタイプの配向データではなく、1つのタイプの配向(例えば、位置データでではなく、回転データ)を設定および決定する実施例を図示し、本別のタイプの配向データを設定および決定することは、対応するコードを用いて、同じまたは実質的に類似様式において行われてもよいことに留意されたい。
図1Uに図示されるブラウザエンジン100Uと異なり、図1Vにおけるブラウザエンジン100Cはさらに、LocalFrameClientImpl::GetOrientation(106V)およびRenderFrameImpl:GetOrientation(108V)を実行してもよい。図1Uの説明と同様に、構成概念RenderFrameImpl:GetOrientation(108V)は、RenderWidget::GetOrientation(112V)をコールし、値をWindow.VirtualWorld::orientationに返し、配向データを返すために使用されてもよい。図1UにおけるLocalFrameClientImpl::GetOrientationのような構成概念LocalFrameClientImpl::GetOrientationは、C++LocalFrameClientImpl.cppから導出され、例えば、GfxまたはGfx-rs等の低レベルグラフィック抽象化層および配向データを使用して、クライアントフレームのための配向を設定および取得してもよい。
図1UにおけるRenderWidget::SetOrientationのように、ブラウザエンジン100Vはまた、106Vにおいて、RenderWidget::GetOrientationを実行することによって、配向データにクエリし、配向データ(例えば、ウェブページの配向データ)をRenderFrameImpl::GetOrientation(104V)に返し、さらに、配向データを、Window.VirtualWorld.Orientationコールをトリガする、ウェブページに返してもよい。いくつかの実施形態では、レンダラプロセスRenderWidgetは、グルーインターフェース(例えば、WebWidgetDelegate)を使用して、抽象インターフェースをグルーインターフェース内に実装してもよい。本抽象インターフェースは、例えば、2Dウィンドウまたは3Dボリュームをディスプレイ空間内に含み、入力イベントを受信し、コンテンツをその中にレンダリングしてもよい。補助ディスプレイアイテム(例えば、オプションのリストを示す上/下矢印を伴う選択ボックス、タブ、ポップアップウィンドウ、ナビゲーションコマンド等)がレンダリングされるべき、これらの実施形態のうちのいくつかでは、ブラウザエンジン100Vはさらに、そのようなディスプレイアイテムのために、別のレンダリングプロセス(例えば、RenderView)を実行してもよい。
図1Wは、いくつかの実施形態における、ブラウザエンジンとユニバースブラウザエンジンとの間で3D配向データを同期させるための擬似コードを伴う、簡略化されたブロック図を図示する。例えば、仮想3D空間内のウェブページは、修正され得る(例えば、仮想3D空間内でウェブページを移動および回転させた、ユーザによって)。図1Wにおけるブロック図は、ウェブページの直近の3D配向データが、ブラウザエンジン100Wとユニバースブラウザエンジン126Wとの間で同期される、方法を図示する。図1Wはまた、ユニバースブラウザエンジン126Wが、ブラウザの初期化に応じて、配向データをブラウザエンジン100Wに送信する、実施形態を図示し得る。
図1Wに図示されるように、ユニバースブラウザエンジン126Wは、初期化されると(120W)、またはウェブページの修正された3D配向データ(図示せず)の受信に応じて、ウェブページのボリューム、レンダリングされたブラウザ、および/またはプリズム(122W)の変換をリセットしてもよい。3D配向データは、次いで、ブラウザエンジン100Wにパスされ、ブラウザエンジン100Wは、CefBrowserView::UpdateCachedOrientation(102W)を実行する。ブラウザエンジン100Wはさらに、RenderWidgetHostImpl::UpdateCachedOrientationを実行し、配向データをユニバースブラウザエンジン126Wからの直近の配向データで更新する。
ブラウザエンジン100Wはさらに、IPC(プロセス間通信)メッセージ(例えば、ViewMsg_UpdateCachedOrientation、ViewMsg_UpdateCachedOrientation等)を送信し、RenderWidget::OnUPdateCachedOrientation(108W)およびRenderWidget::SetOrientation(110W)を実行する。
いくつかの実施形態では、ユニバースブラウザエンジン126Wは、3D配向データをブラウザエンジン100Wによってアクセス可能な非一過性コンピュータ可読媒体(例えば、キャッシュメモリ)内に記憶してもよい。ユニバースブラウザエンジン126Wおよびブラウザエンジン100Wは、したがって、仮想3D空間内のウェブページパネルの配向が修正される度に、同期される。ウェブページがロードを開始する度に、RenderWidget内の配向変数を初期化およびリセットするために、ウェブページパネルの変換は、デフォルトにリセットされ、RenderWidget内の記憶された値は、同様に更新されるであろう。
図1Xは、1つ以上の実施形態における、SET要求を用いた、ウェブページパネルの配向データの決定の実施例を図示する。本実施例では、着目ウェブページ(102X)が、152Xにおいて、ブラウザによってウェブページをロードすることに応じて、ウェブページパネルのための配向データを設定するための要求をブラウザまたはブラウザエンジン(104X)に発行するようにコーディングされ得るときに該当する。配向データの受信に応じて、ブラウザまたはブラウザエンジン(104X)は、154Xにおいて、非一過性コンピュータ可読記憶媒体108X(例えば、キャッシュ)内に以前に記憶された配向データを更新してもよい。
ブラウザまたはブラウザエンジン(104X)はさらに、156Xにおいて、受信された配向データを、SET要求とともに、ユニバースブラウザエンジン(106X)にパスしてもよい。SET要求を充足させるために、ユニバースブラウザエンジン106Xは、110Xにおいて、SET要求とともに受信され、158Xに伝送される、配向データを使用することによって、ウェブページパネルの配向データを設定してもよい。
図1Y-1AAは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示する際に使用され得る、例示的ブラウザエンジンおよびユニバースブラウザエンジンのさらなる詳細なブロック図を図示する。より具体的には、図1Yは、いくつかの実施形態における、仮想3D空間(例えば、プリズム)内のウェブページパネルの3D配向更新のための例示的フローを図示する。これらの実施形態では、例示的フローは、Chromiumのためのコードの類似セットに基づくが、他のウェブブラウザのコードもまた、検討され、完全に等しい効果を伴って、本明細書に説明される技法に適用されることができる。BrowserWindowでは、ウェブコンテンツ平面が、入力配向値を用いて更新された後、ContentView::OnPageOrientationChangedが、コールされるであろう。さらに、CEFを通して、イベントが、ページ配向変更が完了されたことを通知するためにディスパッチされるであろう。JavaScript(登録商標)が使用される、いくつかの実施形態では、ユニバースブラウザエンジン126Yは、ページ配向イベントをリッスンし、コールバックをコールしてもよい。
図1Yは、ブラウザエンジン100Yからユニバースブラウザエンジン126Yへのウェブページ変換更新のための例示的フローを図示する。例示的フローは、上記に説明される図1Cに図示されるものに類似する。より具体的には、ブラウザエンジン100Yは、JavaScript(登録商標)関数コール「Window.VirtualWorld.Orientation」を呼び出し、または実行し、図1Yに図示されるプロセスフローを初期化してもよい。ブラウザエンジン100Y側では、
図1CにおけるWindow.VirtualWorld.3DPositionおよびWindow.VirtualWorld.3DRotationのように、図1Yにおける「Window.VirtualWorld.Orientation」および/または「VirtualWorld」等のプロセスは、例えば、OpenGLMathematics(GLM)(または任意の他の数学ライブラリ)を利用して、部分的または全体的に、2Dまたは3D空間内の2Dおよび3Dエンティティのための3D位置データ、3D回転データ、スケール、および1つ以上の変換に基づいて、ウェブページパネルの位置データを設定および取得してもよい(例えば、擬似コード「glm::vec3old_pos(0.0f)」、「glm::quatrotation(glm::vec3(0.0f))」、「glm::vec3scale(1.0f)」、および「glm::mat4transform=web_container_->getCurrentVolumeTransform()」によって)および回転データ(例えば、擬似コード「glm::vec3position(0.0f)」、「glm::quatold_rot(glm::vec3(0.0f))」、「glm::vec3scale(1.0f)」、および「glm::mat4transform=web_container_->getCurrentVolumeTransform()”」によって)。
擬似コード、プログラミング言語、および種々のクラス、変数等の名称は、本願では、例証および解説目的のために使用され、同じまたは実質的に類似目的を果たす、任意の他の好適なプログラミング言語、名称等もまた、検討され、また、そのような目的を達成するために使用されてもよいことに留意されたい。加えて、さらに、図1Yは、ウェブページパネルの配向(例えば、回転)のみを設定することを図示するが、位置変更、スケール変更等の他のウェブページパネル変換もまた、類似技法を使用して組み込まれ得ることに留意されたい。
ブラウザエンジン100Cはさらに、図1Yでは、ウェブページパネルの位置、回転、および/またはスケールデータ(図示せず)を設定および取得するために、図1CにおけるVirtualWorld::Set3DPositionに類似する、VirtualWorld::setOrientationを実行してもよい。
ブラウザエンジン126Yはさらに、図1Yに図示される、LocalFrameClientImpl::SetPageOrientation、RenderFrameImpl::SetPageOrientation、およびRenderWidget::SetRotationを実行してもよい。ブラウザエンジン100Yは、例えば、図1Yに図示される、SendIPCMessage::FrameHostMsg_SetPageOrientationを実行する、または呼び出すことによって、メッセージ(例えば、プロセス間通信(IPC)メッセージ)を送信してもよい。構成概念RenderFrameImpl:SetPageOrientationは、関数RenderWidget::SetOrientationをコールし、SendIPCMessage::FrameHostMsg_SetPageOrientationを介して、IPCメッセージを送信するために使用されてもよい。構成概念LocalFrameClientImpl::SetPageOrientationは、C++LocalFrameClientImpl.cppから導出され、例えば、GfxまたはGfx-rs等の低レベルグラフィック抽象化層および位置および回転データを使用して、クライアントフレームのための位置および/または回転を設定および取得する。LocalFrameClientImpl::SetPageOrientationは、以下の擬似コードを用いて、ウェブページパネルの配向データを取得および設定するために実装されてもよい。
構成概念RenderFrameImpl::SetPageOrientationは、C++RenderFrameImpl.cppから導出され、レンダラ(例えば、ChromiumベースのブラウザのためのRenderWidget)および位置および/または回転データを呼び出し、フレームをブラウザエンジン(例えば、ChromiumベースのブラウザのためのBlink)に返信するように構成されてもよい。
ブラウザエンジン100Yはまた、RenderWidget::SetRotationを実行することによって、レンダラを呼び出し、3D位置、回転、および/またはスケールデータ(例えば、ウェブページパネルの開発者によって設定される位置および回転データ)に従って、着目ウェブページを「ペイント」またはレンダリングしてもよい。より具体的には、レンダラプロセスRenderWidgetは、グルーインターフェース(例えば、WebWidgetDelegate)を使用して、抽象インターフェースをグルーインターフェース内に実装してもよい。本抽象インターフェースは、例えば、2Dウィンドウまたは3Dボリュームをディスプレイ空間内に含み、入力イベントを受信し、コンテンツをその中にレンダリングしてもよい。補助ディスプレイアイテム(例えば、オプションのリストを示す、上/下矢印を伴う選択ボックス、タブ、ポップアップウィンドウ、ナビゲーションコマンド等)がレンダリングされるべき、これらの実施形態のうちのいくつかでは、ブラウザエンジン100Yはさらに、そのようなディスプレイアイテムのために、別のレンダリングプロセス(例えば、RenderView)を実行してもよい。
ChromiumまたはChromiumベースのブラウザが使用される、いくつかの実施形態では、ブラウザエンジン100Yは、そのレンダリングシステム(「ビュー」)を使用して、ウェブページをレンダリングし、ユーザインターフェースは、レンダリング、レイアウト、およびイベントハンドリングに関与する、「ビュー」と呼ばれる、コンポーネントのツリーとして構築される。コンポーネントのツリー内の各ビューは、その独自の境界を有し、ユーザインターフェースの異なるコンポーネントを表し、ウィジェット(本来の2Dウィンドウまたは3Dボリューム)は、そのようなツリーのルートに位置する。いくつかの実施形態は、位置および位置データを用いて、仮想3D空間(または2Dウィンドウ)を作成し、仮想3D空間(または2Dウィンドウ)をRootViewにパスし、次いで、イベントをツリーの中に伝搬する。いくつかのディスプレイアイテムは、本来のウィジェットを表示およびサイズ調整するための方法を把握する、特殊な種類のビュー内にホストされる、オペレーティングシステムの制御を使用して、レンダリングされてもよい。これらのディスプレイアイテムは、例えば、ボタン、テーブル、ラジオボタン、チェックボックス、テキストフィールド、他の制御等を含む。コンポーネントのそのようなツリーについてのさらなる詳細は、図2G-2Iを参照して下記に説明される。
ブラウザエンジンはさらに、少なくとも部分的に、位置、回転、および/またはスケールデータに基づいて、WebContentsImpl::OnSetPageOrientationおよびCefBrowserHostImpl::SetPageOrientationを実行する。
ブラウザエンジン100Yはさらに、CefPrivateHandler::OnSetPageOrientationを実行し、CEF(Chromium Embedded Framework)とユニバースブラウザエンジンとの間のカスタム相互作用を可能にする、ユニバースブラウザエンジン(126Y)特有インターフェースと通信する。CEFベースのアプリケーションは、CEFを初期化し、CEFメッセージループを起動するためのエントリポイント、プロセス特有のコールバックをハンドリングするためのCEFApp派生クラス、ブラウザ-インスタンス特有のコールバック(例えば、ブラウザ寿命、コンテキストメニュー、ダイアログ、ディスプレイ通知、ドラッグイベント、注目イベント、キーボードイベント等に関するコールバック)をハンドリングするためのCEFClient派生クラス、CefBrowserHost::CreateBrowser()によって作成された1つ以上のCEFBrowserインスタンス等のコンポーネントを含んでもよい。
図1Zは、ユニバースブラウザエンジン126Yからブラウザエンジン100Yへのウェブページ変換更新のための例示的フローを図示する。ユニバースブラウザエンジン126Yが、ウェブページ変換が生じたことを決定すると、ブラウザエンジン100Yは、以下の例示的コードおよびヘッダファイル内の宣言「virtualvoidOnMLPageOrientationChanged()=0;」を用いて、「CefBrowserView::OnPageOrientationChanged」を実行してもよい。ブラウザエンジンがウェブページ変換を認知すると、ブラウザエンジン100Yはさらに、対応するヘッダファイル内の宣言「void OnMLPageOrientationChanged()override;void OnMLPageOrientationChanged()override;」を用いて、「CefBrowserViewImpl::OnPageOrientationChanged」を実行する、または呼び出してもよい。
ブラウザエンジン100Yは、次いで、ウェブページ変換が生じたことが決定されると、ホスト実装のために、以下の例示的コードと対応するヘッダファイル内の「virtual void OnMLPageOrientationChanged()=0;」を併用して、「RenderBrowserViewImpl::OnPageOrientationChanged」および「RenderWidgetHostImpl::OnPageOrientationChanged」を実行してもよい。
ブラウザエンジン100Yは、次いで、「SendMessage::ViewMsg_PageOrientationChanged」を実行し、または呼び出し、以下の例示的コードを使用することによって、メッセージ(例えば、プロセス間メッセージまたはIPC)を送信してもよい。
いったんウェブページ変換が変化したことが決定されると、ブラウザエンジンは、以下の例示的コードおよび対応するヘッダファイル内の「698IPC_MESSAGE_HANDLER(ViewMsg_MLPageOrientationChanged, OnMLPageOrientationChanged)」を有する、「RenderWidget::OnPageOrientationChanged」を実行してもよい。
ブラウザエンジン100Yはさらに、「Document::DispatchEvent」を実行し、ウェブページ変換のためのイベントをディスパッチしてもよい。JavaScript(登録商標)「document.addEventListener(“pageorientaion,callback)」は、位置の変化、回転、および/またはスケール(ウェブページ変換)が、ブラウザエンジン100Yの側で完了したことを示す、コールバックを開始する。
図1AAは、いくつかの実施形態における、仮想3D空間(例えば、プリズム)内のウェブページパネルの3D配向更新のためのユニバースブラウザエンジン(126Y)の一部を例示的フローにおいて図示する。ブラウザエンジン(例えば、100Y)からのウェブページパネル変換(例えば、ウェブページパネルの位置、配向、またはスケールの変化)の受信に応じて、ユニバースブラウザエンジン126Yはさらに、構成概念ClientHandler::OnSetPageOrientation(102AA)を実行し、ハンドラを決定してもよい(例えば、「CefRefPtr<CefUniverseBrowserEnginePrivateHandler>handler=client_->GetUniverseBrowserEnginePrivateHandler()」および「handler->OnSetVirtualWebPagePosition(this, position.x(), position.y(), position.z())」、「handler->OnSetVirtualWebPageRotation(this, rotation.x(), rotation.y(), rotation.z())”を用いて)。
ユニバースブラウザエンジン126Yはさらに、ブラウザエンジン100Yから受信された3D位置、回転、および/またはスケールデータを用いて、Browser::OnSetPageOrientation(104AA)およびBrowserWindow::OnSetPageOrientationを実行してもよい。ClientHandlerは、ルールを定義するための手段(例えば、ブラウザ内で評価され、往復遅延または待ち時間を低減させ得る、宣言条件およびアクション)を提供するために、サーバへのコールバックを必要とせずに、ブラウザ内で起動する、イベントハンドラを含む。ClientHandlerはまた、GLM(OpenGL Mathematics)を使用して、仮想3D空間(例えば、プリズム)内のウェブページ位置および回転を設定することを委任してもよい。
図1AB-1ACは、いくつかの実施形態における、イベントディスパッチフローのための例示的高レベルフロー図を図示する。より具体的には、図1AB-1ACに図示されるイベントディスパッチフローは、SynchronizeVisualPropertiesを通して進む。さらに、BrowserWindowBase::RenderLoopが、周期的に、または繰り返し、ウェブページ平面の変換(例えば、位置、回転、および/またはスケール等)が変化したかどうかを決定するためにチェックする。BrowserWindowBase::RenderLoopが、ウェブページ平面の変換が変化したことを決定する場合、変化された変換イベントは、JavaScript(登録商標)ドキュメントに伝搬されるであろう。
いくつかの実施形態では、以下の例示的コードが、対応するヘッダファイル内のクラス定義「virtual void UpdateLoop(float/
*delta
*/);」とともに、ユニバースブラウザエンジン(126AB)のためのBrowserWindowBase::UpdateLoop(102AB)のために使用されてもよい。
いくつかの実施形態では、以下の例示的コードがまた、対応するヘッダファイル内のクラス定義「virtual void UpdateLoop(float/
*delta
*/);」とともに、ユニバースブラウザエンジン(126AB)のためのBrowserWindowBase::UpdateLoop(102AB)のために実行され、または呼び出され、ウェブノード変換変化をポーリングし、ステージおよび分離されたボリューム位置を更新された状態に保ってもよい。
いくつかの実施形態では、以下の例示的コードが、対応するヘッダファイル内のクラス定義「void CheckIfWebContentTransformChanged();」とともに、ユニバースブラウザエンジン(126AB)のためのWebContentsView::CheckWEbContentTransformChanged(104AB)のために使用されてもよい。
関数CEFWindow(106AB)は、対応するヘッダファイル内の「virtual void WebContentTransformChanged()=0;」に対応し得る。さらに、ブラウザエンジン100ABはさらに、ウェブコンテンツ変換(例えば、位置、回転、および/またはスケール)が変化したことが決定されるとき、対応するヘッダファイル内の「void OnWebContentTransformChanged()override;」とともに、以下の例示的コードを用いて、関数RenderWidgetHostViewAura::OnWebContentTransformChanged()(114B)を実行してもよい。
さらに、ブラウザエンジン100ABはさらに、ウェブコンテンツ変換(例えば、位置、回転、および/またはスケール)が変化したことが決定されるとき、対応するヘッダファイル内の「void WebContentTransformChangedWebContent();」とともに、以下の例示的コードを用いて、Widget関数(108AB)を実行してもよい。
さらに、ブラウザエンジン100ABはさらに、ウェブコンテンツ変換(例えば、位置、回転、および/またはスケール)が変化したことが決定されるとき、対応するヘッダファイル内の「void WebContentTransformChanged() override;」とともに、以下の例示的コードを用いて、関数DesktopNativeWidgetAura::WebContentTransformChanged()(110AB)を実行してもよい。
さらに、ブラウザエンジン100ABはさらに、ウェブコンテンツ変換(例えば、位置、回転、および/またはスケール)が変化したことが決定されるとき、対応するヘッダファイル内の「void WebContentTransformChanged() override;」とともに、以下の例示的コードを用いて、関数DesktopWindowTreeHostVirtualWorld::WebContentTransformChanged()(112AB)を実行してもよい。
ブラウザエンジン(100AB)は、いくつかの実施形態では、主要なフレームをサポートするウィジェットのためのRenderWidget機能を実行してもよい。いくつかの他の実施形態では、ブラウザエンジン(100AB)は、遠隔の主要なフレームをサポートするウィジェットのためのRenderView機能を呼び出してもよい。以下の例示的コードは、例えば、116ABおよび118ABにおける関数RenderWidgetのために使用されてもよい。以下の例示的コードにおける「SetIsFullscreen(params.is_fullscreen_granted);」は、ビューポートサイズを変化させずに、フル画面モードを有効にすることに留意されたい。
さらに、ブラウザエンジン100ABはさらに、ウェブコンテンツ変換(例えば、位置、回転、および/またはスケール)が変化したことが決定されるとき、対応するヘッダファイル内の「void SendPageOrientationChangeEvent()override;」とともに、以下の例示的コードを用いて、関数WebLocalFrameImpl(120AB)を実行してもよい。
ブラウザエンジン100ABは、「ドキュメント」機能(122AB)を実行し、イベントをディスパッチし、ページ配向変化が完了されたことを通知してもよい。加えて、または代替として、ブラウザエンジン100ABは、JavaScript(登録商標)機能「Document.addEventListener」を実行し、ページ配向変化イベントをリッスンしてもよい(124AB)。
図2Aは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するプロセスのための高レベルブロック図を図示する。これらの実施形態では、ブラウザエンジンは、202Aにおいて、ウェブページのための3次元(3D)変換(例えば、位置、回転、またはスケールの変化)のための入力を受信し得る。いくつかの実施形態では、入力は、着目ウェブページの提示を要求する複合現実システムのユーザ、またはウェブページがある様式(例えば、位置、配向/回転、またはスケール)で提示されることを好む、したがって、コーディングする、ウェブページ開発者による入力を含んでもよい。いくつかの他の実施形態では、入力は、位置および回転データのための要求を含んでもよい。例えば、位置および回転データ(またはさらにいくつかの実施形態では、スケールデータ)のための要求は、いくつかの実施形態では、着目ウェブページのウェブサイトによって発行されてもよい。例えば、ウェブページの開発者は、アプリケーションプログラミングインターフェース(例えば、上記に説明されるWindow.VirtualWorld.3DPosition APIおよびWindow.VirtualWorld.3DRotation API)を着目ウェブページのコードの中に組み込んでもよい。
直上で説明されるように、入力は、いくつかの実施形態では、例えば、仮想3D空間内に提示されるとき、ウェブページを、ある位置に、および/またはある回転を伴って、表すことを好む、開発者から生じ得る。これらまたは他の実施形態のうちのいくつかでは、入力は、複合現実システムによって作成された仮想3D空間内での、あるウェブページ、以前に訪問された同一ウェブページ、または同一ウェブサイトからの、または随意に、他のウェブサイト等からの他のウェブページのユーザの操作から生じ得る。例えば、ウェブページは、ユーザのために、開かれ、仮想3D空間内に表示され得、ユーザは、仮想3D空間内のウェブページの位置および/または回転を調節してもよい。これらの実施形態のうちのいくつかでは、類似技法がさらに、ウェブページのためのウェブブラウザまたはその中にウェブページがレンダリングされるプリズムを操作するために適用されてもよい。ユーザは、ウェブページ表現を仮想3D空間内で自由に位置付け、回転させてもよく、そのような位置付けおよび回転の唯一の制約は、プリズムの境界を含む。いくつかの実施形態では、そのような位置および回転はまた、随意に、ウェブページ表現および仮想オブジェクトが、現実のように現れる、またはそのように知覚されるように、ウェブページ表現と仮想3D空間内の1つ以上の他の物理的および/または仮想オブジェクトとの間の衝突および/または重複動態によって制約されてもよい。
ブラウザエンジン(例えば、Blink、Gecko、WebKit、Trident等)は、独立型コンピュータプログラムではない。むしろ、ブラウザエンジンは、ウェブページのリソース(例えば、HTMLドキュメント等)を双方向視覚的表現に変換する、ウェブブラウザのソフトウェアコンポーネントである。ブラウザエンジンのために一般に使用される、他の用語は、例えば、カスケードスタイルシート(CSS)内のルールに基づいて、視覚的表現のためのグラフィカル座標を計算することによる、レイアウトエンジン、レンダリングエンジン等を含む。
その名前が示唆するように、ブラウザエンジンは、ウェブページのためのレイアウトおよびレンダリングを実施し、セキュリティポリシを施行し、ページスクリプトにエクスポーズされる、DOM(ドキュメントオブジェクトモデル)データ構造を実装する。ブラウザエンジンはまた、ハイパーリンクおよびウェブフォームをハンドリングしてもよい。いくつかの実施形態では、ブラウザエンジンは、JavaScript(登録商標)コードの実行のために、別の専用スクリプトエンジンを利用する。ウェブブラウザのための少なくとも前述の機能を実施することに加え、ブラウザエンジンはまた、電子メールクライアント、ソフトウェアアプリケーションのための他のフレームワーク(例えば、GoogleのElectron Framework)等の他のソフトウェアプログラムのための同じまたは実質的に類似機能を実施してもよい。
ブラウザエンジンは、204Aにおいて、位置および回転データを決定し、3D位置および/または回転要求に応答してもよい。いくつかの実施形態では、ブラウザエンジンは、直近の位置および回転データをブラウザエンジンによってアクセス可能な非一過性コンピュータ可読媒体(例えば、キャッシュメモリ)内に記憶してもよい。そのような位置および回転データは、位置および/または回転データが修正される(例えば、仮想3D空間内に表示されるウェブページをさらに移動、回転、または変換させる、ユーザによって)度に、複合現実システムのユニバースブラウザエンジンによって送信されてもよい。
ウェブブラウザが、ウェブページをレンダリングおよび表示するために初期化すると、そのブラウザエンジンは、そのような位置および/または回転要求に、例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ(例えば、Chromiumベースのブラウザ内のRenderWidgetクラス内)内に記憶される、位置および回転データで応答してもよい。いったん位置および/または回転データが、修正されると、ブラウザエンジンは、その記憶された位置および/または回転データを、更新された位置および/または回転データでリフレッシュする、またはユニバースブラウザエンジンからの位置および/または回転データに更新してもよい。直近の位置および回転データを用いることで、ブラウザエンジンは、ウェブページのコンテンツをレンダリングし(例えば、RenderWidgetクラスをコールすることによって)、例えば、直近の位置および回転データと、レンダリングされたコンテンツのレイアウトを統制するルール(例えば、カスケードスタイルシート)とを使用して、レンダリングされたコンテンツのためのグラフィカル座標を計算してもよい。
複合現実システムのユニバースブラウザエンジンは、206Aにおいて、ひいては、1つ以上の複合現実ソフトウェアモジュールおよび/またはハードウェア機構を呼び出し、ウェブページを仮想3D空間内に表示する、ブラウザエンジンを呼び出してもよい。例えば、仮想3D空間内(例えば、プリズム内)へのウェブページの回転および位置付けに応じて、ウェブページの仮想3D表現は、複数の深度面または複数の焦点面を横断して及び得る。複合現実システムは、例えば、その切替可能な焦点面または可変焦点化機構を利用して、3D位置および回転データに基づいて、ウェブページの仮想3D表現をレンダリングしてもよい。複合現実システムについてのさらなる詳細は、本願の第1の段落に参照される米国特許出願に説明される。いくつかの実施形態では、複合現実機構の本呼出は、ブラウザ(例えば、Chromium)および/またはブラウザエンジン(例えば、ChromiumのためのBlink)を介して行われてもよい。例えば、ブラウザ(またはそのブラウザエンジン)は、位置および/または回転データ(またはさらに随意に、スケールデータ)をウェブページパネルに適用し、複合現実機構を呼び出し、仮想3Dコンテンツを表示してもよい。
図2Bは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するプロセスのためのさらなる詳細なブロック図を図示する。ウェブページを開くための命令(例えば、ユーザがリンクをクリックすることによって、ユーザが検索基準を検索フィールド内に打ち込むことによって、ウェブサイトのためのURLを打ち込むことによって等)に応答して、ウェブブラウザまたはウェブページパネルは、202Bにおいて、立ち上げられる。ユニバースブラウザエンジンは、位置および回転データが、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶され得る、または非一過性コンピュータ可読媒体内の位置および回転データが、リフレッシュされ得るように、位置および回転データをウェブブラウザのブラウザエンジンに送信してもよい。ブラウザエンジンは、次いで、受信された位置および回転データを、例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ内にキャッシュまたは記憶してもよい。位置および回転データが、ブラウザエンジンによってアクセス可能な非一過性コンピュータ可読メモリ(例えば、キャッシュ)内に記憶されている、いくつかの実施形態では、非一過性コンピュータ可読メモリ内に記憶される、記憶された位置および回転データは、ユニバースブラウザエンジンからの位置および回転データによって初期化されてもよい。
ウェブページは、204Bにおいて、随意に、位置および回転要求をブラウザエンジンに送信してもよい。例えば、ウェブページの開発者は、ウェブページが、初期化に応じて、またはその直後、位置および/または回転要求をブラウザエンジンに送信するように、アプリケーションプログラミングインターフェース(API)のセット(例えば、上記に説明されるWindow.VirtualWorld.3DPosition APIおよびWindow.VirtualWorld.3DRotation API)をウェブページのコードの中に組み込んでもよい。ウェブページの開発者が、ウェブページをある位置および/または回転で表すことを所望し得る、いくつかの実施形態では、ウェブページはまた、APIのセットを利用して、位置および回転データをブラウザエンジンに通信することによって、位置および回転データを設定してもよい。これらの実施形態のうちのいくつかでは、ウェブページは、ユーザ入力(例えば、ユーザがリンクをクリックする、ユーザが検索基準を検索フィールド内に打ち込む、ユーザがウェブサイトのためのURLを打ち込む等)に応答して、ブラウザエンジンからウェブページペーンの位置および/または回転データを取得してもよい。
ウェブページからの随意の位置および/または回転要求に応答して、ブラウザエンジンは、206Bにおいて、要求に、例えば、複合現実システムのユニバースブラウザエンジンからのそのような位置および回転データを取得することからのさらなる遅延を伴わずに、ブラウザエンジンによってアクセス可能な非一過性コンピュータ可読媒体内に記憶される直近の位置および回転データで応答してもよい。直近の位置および回転データが、利用不可能である場合(例えば、初めて初期化された複合現実システムに関して、または他の理由から)、ブラウザエンジンは、ウェブページからのそのような要求に、デフォルト位置および回転データで応答してもよい。
ブラウザエンジンはまた、208Bにおいて、位置および回転データをユニバースブラウザエンジンに伝送してもよい。例えば、いくつかの実施形態は、ユーザに、仮想3D空間内のウェブページの表現を位置付け、および/または回転させる能力を提供してもよい。GET要求が受信される、いくつかの実施形態では、ブラウザエンジンは、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶されている、位置および回転データを、ウェブページに返す。ユニバースブラウザエンジンは、位置および回転データをウェブブラウザのブラウザエンジンから受信し、複合現実システムの他のモジュール(例えば、上記に説明されるランタイム層、オペレーティングシステムサービス層、1つ以上の3Dエンジン、または1つ以上のソフトウェアアプリケーション等)および他のハードウェアおよびそのソフトウェアコンポーネントを呼び出し、ユーザが、仮想3D空間(例えば、プリズム)内のウェブページの表現を自由に位置付け、および/または回転させることを可能にする。いくつかの実施形態では、206Bは、ウェブページが位置および/または回転データを取得する(「GET」)と実行され、208Bは、ウェブページが位置および/または回転データを決定する(「SET」)と実行される。
ユニバースブラウザエンジンは、いくつかの実施形態では、210Bにおいて、ブラウザエンジンからの位置および回転データの受信に応じて、ウェブページのための位置および回転データを更新する。SET要求が、新しい位置および/または回転データのために受信される、いくつかの他の実施形態では、新しい位置および/または回転データは、ブラウザエンジンのための非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶されてもよく、さらに、ユニバースブラウザエンジンにパスされてもよい。ユニバースブラウザエンジンはさらに、位置および/または回転データが更新されたかどうかを決定する。例えば、ユーザによるウェブページ表現の任意の位置付けおよび回転は、位置および/または回転データを修正し得る。ユニバースブラウザエンジンが、位置および/または回転データが変化したことを決定する場合、ユニバースブラウザエンジンは、212Bにおいて、位置および/または回転データを更新し、位置および/または回転データの最新バージョンをブラウザエンジンに送信してもよい。ブラウザエンジンは、次いで、ひいては、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶される位置および/または回転データを、位置および/または回転データの最新バージョンとともに記憶してもよい。
位置および/または回転データの最新バージョンの受信に応じて、ブラウザエンジンはさらに、いくつかの実施形態では、ウェブページのコンテンツのグラフィカル座標を計算し、ウェブページのコンテンツをレンダリングしてもよい。ウェブページパネルは、次いで、少なくとも部分的に、位置および/または回転データの最新バージョンに基づいて、平行移動、回転、スケーリング、または別様に変換されてもよい。ブラウザエンジンは、これらの実施形態では、214Bにおいて、次いで、レンダリングされたコンテンツをユニバースブラウザエンジンにパスしてもよく、これは、ひいては、複合現実システムの種々のソフトウェアおよびハードウェアモジュールを呼び出し、レンダリングされたコンテンツの表現を仮想3D空間内に生成し、レンダリングされたコンテンツの表現を、仮想3D空間内の平行移動、回転、スケーリング、または別様に変換されたウェブページパネル内でユーザに表示する。
いくつかの他の実施形態では、ブラウザエンジンは、ブラウザエンジンのキャッシュ内に記憶される位置および回転データを用いて、ウェブページのコンテンツをレンダリングし、レンダリングされたコンテンツおよび位置および回転データをユニバースブラウザエンジンに伝送する。ユニバースブラウザエンジンは、レンダリングされたコンテンツをソフトウェアオブジェクトとして取り扱い、ユーザが、ウェブページのレンダリングされたコンテンツを位置付け、および/または回転させることを可能にする。いったんユーザが、ウェブページ表現の位置および/または回転を決定すると、ユニバースブラウザエンジンは、位置および回転データを更新し、例えば、変換およびレンダリングモジュールを呼び出し、ソフトウェアオブジェクトのためのウェブページの更新された表現を仮想3D空間内に生成し、ウェブページの更新された表現をユーザに提示する。これらの実施形態のうちのいくつかでは、複合現実システムは、ユーザが仮想3D空間内のウェブページの位置および/または回転を変化させる間、ユーザの操作とウェブページの表示との間に知覚可能な遅れを伴わずに、ほぼリアルタイム方式で、ウェブページを仮想3D空間内に表示し得る(214B)。
図2Cは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するために利用され得る、ユニバースプリズムを識別または作成するための高レベルブロック図を図示する。上記に説明されるように、プリズムは、1つ以上の3次元行列とともに平行移動、回転、および/または変換され得る、境界を伴う、3次元空間を含む。プリズムを定義する、3次元空間はまた、低減された次元であってもよい。例えば、プリズムは、3次元空間から低減された2次元(またはさらに1次元)面積を含んでもよい。図2Cに図示される、これらの実施形態では、プリズムは、202Cにおいて、部分的または全体的に、ユーザの1つ以上の挙動タイプ、プリズム、またはプリズム内にレンダリングされるべきコンテンツに基づいて、識別(既存の場合)または作成されてもよい。
いくつかの実施形態では、これらの1つ以上の挙動タイプは、例えば、世界固定、ビルボード表示、エッジビルボード表示、追従頭部固定、外部センサに基づく追従、またはフェーディング等を含む。ビルボード表示タイプの挙動は、ユーザ、ユーザの頭部、および/またはユーザの眼の移動シーケンスの間、ユーザに向かって(例えば、向かって面して)ビルボード表示し、仮想オブジェクトの視認性を向上させ、かつ移動シーケンスにおいて仮想オブジェクトおよび/またはプリズムを管理するユーザの労力を低減させるような方法において、あるオブジェクトを表示することにより実用的である、ルール、制約、要件、または選好を含む。例えば、平面仮想オブジェクト(例えば、ある情報を表示するウェブページ)は、平面仮想オブジェクトが、ユーザの移動シーケンスの間、ユーザに面するように、平面仮想オブジェクトを物理的環境に対してプリズム内で自動的に平行移動、回転、および/または変換させることによって、位置付けられ、配向され得る。プリズムは、したがって、202Cにおいて、本タイプの挙動に適応するように作成または識別されてもよい。
エッジビルボード表示タイプの挙動は、ユーザが、ある事前に定義された斜め角度において、仮想コンテンツを視認するであろう場合、またはそのとき、複合現実システムのユーザに向かって、平行移動、回転、または変換を開始するが、仮想コンテンツは、そのような平行移動、回転、または変換が、斜め視認角度によってトリガされる前は、定常のままである。世界固定タイプの挙動は、ユーザまたは仮想オブジェクトの任意の動的側面に適応せずに、プリズムを固定する。
追従頭部固定タイプの挙動では、1つ以上の仮想オブジェクト(例えば、ウェブページパネル、ウェブブラウザのための制御等)は、これらの1つ以上の仮想オブジェクトが、ユーザの頭部に対して固定されて現れ、したがって、ユーザの頭部移動とともに移動するような方法において、平行移動、回転、および/または変換され得る。同様に、追従身体固定タイプの挙動、追従眼固定タイプの挙動、および1つ以上の外部センサに基づく追従も存在し得る。そのような1つ以上の仮想オブジェクトを表示するためのプリズムは、これらのタイプの挙動に適応するために、識別(既存の場合)または新しく作成されてもよい(非既存の場合)。
フェーディングタイプの挙動では、仮想オブジェクトは、規定された距離において、分解または消失し始め得る(例えば、複合現実システムが、仮想オブジェクトのレンダリングを停止する)。いくつかの実施形態では、仮想オブジェクトは、平滑にフェーディングアウトする一方、仮想オブジェクトは、いくつかの他の実施形態では、急激に消失する。別のタイプの挙動は、別のプリズムの、仮想空間内のアンカ場所等の別のオブジェクトに対するプリズムの挙動を含む。例えば、プリズムは、物理的オブジェクト(例えば、壁、机、床、天井等)の表面の上部に生成または設置され得る。
関係タイプの挙動は、別のプリズムに関連したプリズムの挙動を含む。例えば、第2のプリズムが、第1のプリズムと子-親関係を維持するために生成または設置され得、第1のプリズムは、第2のプリズムの親である。これらの2つのプリズムは、同一変換を用いて、平行移動、回転、および/または変換され得る。そのような親-子プリズムの実施例は、親プリズムが、平行移動、回転、または変換されると、子プリズムもまた、親プリズムとともに、平行移動、回転、または変換するように、ウェブページのための親プリズムと、ウェブブラウザ制御のための子プリズムとを含み得るが、これらの2つのプリズムはまた、上記に説明されるように、独立して、平行移動、回転、および/または変換されてもよい。
別のタイプの挙動は、衝突および重複挙動を含む。本タイプの挙動は、衝突の発生に応じて、2つのプリズムが相互に重複し得るかどうか等、2つのプリズムが挙動する方法を統制する。例えば、本タイプは、2つのプリズム間の衝突を許可または防止し、かつ許可される場合、これらの2つのプリズム間で可能にされる重複の量を決め得る。衝突および重複が、本タイプの挙動によって防止され得る、いくつかの実施形態では、ユーザは、1つ以上のプリズムを平行移動、回転、または変換し続けることによって(例えば、プリズムを操作し続けることによって、衝突/重複についてのメッセージを無視することによって等)、そのようなルールをオーバライドしてもよく、複合現実システムは、したがって、そのようなルールのオーバライドを考慮し、プリズムが相互に衝突または重複することを可能にしてもよい。プリズムは、したがって、少なくとも部分的に、前述のタイプの挙動に基づいて、識別または生成されてもよい。
ウェブブラウザおよびそのブラウザエンジンは、204Cから開始されてもよい。ウェブブラウザは、新しいアプリケーションを開く、検索基準を打ち込む、URLを打ち込む、またはクリックする(手のジェスチャを用いて、コントローラを使用して、音声コマンドを用いて、等)、ランチャとの相互作用等、ユーザアクションまたはユニバースブラウザエンジンとの相互作用に応答して、開始されてもよく、ウェブブラウザおよびウェブエンジンは、204Cにおいて、サービスを用いて開始されてもよい。
ユニバースブラウザエンジンは、プリズムと、随意に、2Dおよび/または3Dコンテンツのための分散型シーングラフとを使用して、また、ウェブページのコンテンツをレンダリングするためのブラウザエンジン(および随意に、複合現実システムのランタイム層、1つ以上の3Dエンジン、ライブラリ等の他のサービス)を使用して、動作する。分散型シーングラフは、ベクトルベースのグラフィック、編集アプリケーション、およびゲーム用ソフトウェア等によって使用され得る、データ構造であって、例えば、相対的設置アルゴリズムおよび/または恣意的変換を使用して、グラフィカル場面の論理表現(および随意に、空間表現)を配列する。シーングラフは、コンテンツがその構造内で相互に対して配列および変換される方法を定義し得る。
加えて、1つを上回るソフトウェアアプリケーション(例えば、ウェブブラウザ、電子メールクライアント等)も、同様にユニバースブラウザエンジンによって管理される、仮想3D空間の中にレンダリングされてもよい。1つ以上のプリズムは、ソフトウェアアプリケーション毎に配分され得るため、ソフトウェアアプリケーションのためのこれらの1つ以上のプリズムは、分散型シーングラフのサブツリーを構成し得る。さらに、プリズムは、ユーザアクションまたは相互作用を介して、またはアプリケーションによって作成されてもよい。例えば、ソフトウェアアプリケーションが、プリズムの生成を要求し得るが、ユニバースブラウザエンジンが、そのような要求を拒否してもよい。任意の他の具体的ソフトウェアコンポーネントではなく、ユニバースブラウザエンジンが、プリズムの管理および生成に関与する。ウェブブラウザ(またはそのブラウザエンジン)の一意の識別が、206Cにおいて、例えば、パッケージマネージャサービスによって決定されてもよい。同様に、ユニバースブラウザエンジンもまた、ウェブブラウザ(またはそのブラウザエンジン)の一意の識別を決定してもよい。
そのためにプリズムが作成または設置されることになる、ウェブブラウザ(またはそのブラウザエンジン)は、208Cにおいて、リスナをユニバースブラウザエンジンに登録してもよい。リスナは、メッセージまたは通信を受信する、インターフェースオブジェクトを含む。例えば、リスナは、IPC(プロセス間通信)メッセージを、またはAndroid(登録商標)システムの場合、Android Binderインターフェースから受信してもよい。リスナは、ウェブブラウザ(またはそのブラウザエンジン)に、部分的または全体的に、プリズムに対するユーザの移動または相互作用に基づいて、プリズムの生成および破壊を知らせるために使用されてもよい。
ユニバースブラウザエンジンは、次いで、210Cにおいて、プリズムとリスナを関連付け、212Cにおいて、前述の一意の識別を使用することによって、プリズムをウェブブラウザ(またはそのブラウザエンジン)に割り当ててもよい。ユニバースブラウザエンジンは、次いで、214Cにおいて、前述のシーングラフを使用することによって、プリズムを複合現実システムの3D仮想空間または3D表示可能空間内に設置してもよい。いくつかの実施形態では、ユニバースブラウザエンジンは、部分的に、3D仮想または表示可能空間の中にレンダリングされることになる、ウェブページ(またはウェブページパネル)の位置および回転データに基づいて、プリズムを3D空間内に設置してもよい。
図2Dは、いくつかの実施形態による、ウェブページを開き、ユニバースブラウザプリズム内に設置するための高レベルブロック図を図示する。これらの実施形態では、複合現実システムは、202Dにおいて、インターネットからのコンテンツへのユーザの関心を示す、第1のユーザ入力を受信し得る。第1のユーザ入力は、例えば、コンテンツをインターネット上の抽出可能ノード(例えば、そのウェブページ内に抽出可能コンテンツを提供するウェブサイト)から抽出するためのユーザのアクションを含んでもよい。第1のユーザ入力は、ソフトウェアアプリケーション(例えば、ウェブブラウザ、電子メールクライアント等)を開始する、ユーザアクションまたは相互作用(例えば、コントローラをクリックすることによって、手のジェスチャによって、音声コマンドを介して等)を含んでもよい。第1のユーザ入力はまた、ユーザが、別のソフトウェアアプリケーションからのディスパッチをトリガすることを含んでもよく、ディスパッチは、異なるアプリケーションによってハンドリングされなければならない。例えば、ユーザは、ソーシャルメディアページ内のリンクをクリックしてもよく(コントローラを用いて、手のジェスチャを介して、または音声コマンドを使用して)、リンクは、ウェブブラウザによってハンドリングされることになる。
第1のユーザ入力に応答して、ソフトウェアアプリケーション(例えば、ウェブブラウザ)が、204Dにおいて、立ち上げられ、着目コンテンツを生成し得る。例えば、ユニバースブラウザエンジンが、ユーザが、検索基準を、複合現実システムによって生成され仮想3D空間内にも提供される、検索フィールド内に打ち込むことに応答して、ウェブブラウザ(およびそのブラウザエンジン)を立ち上げ得る。プリズムが、206Dにおいて、着目コンテンツを表示するために決定され得る。例えば、ユニバースブラウザエンジンは、第1のユーザ入力に応答して、着目コンテンツを表示するために、既存のプリズムを決定する、または新しいプリズムを生成し得る。
着目コンテンツのミニプレビューが、随意に、208Dにおいて、仮想3D空間内に、詳細を殆ど伴わずに、または判別可能/読みやすい詳細を全く伴わずに、生成されてもよい。いくつかの実施形態では、ミニプレビュープリズムが、208Dにおいて、生成され、ユーザに表示されてもよく、ミニプレビュープリズムは、着目コンテンツのミニプレビューを含む場合とそうではない場合がある。コンテンツのミニプレビューおよび/またはミニプレビュープリズムは、ユーザが、ミニプレビューコンテンツまたはミニプレビュープリズムを再位置付け、回転、および/または変換させるべきかどうかを決定し得るように、着目コンテンツがレンダリングされる前に、生成され、ユーザに提示されてもよい。
第2のユーザ入力が、210Dにおいて受信され得る。第2のユーザ入力は、プリズム、ミニプレビュープリズム、コンテンツ、またはミニプレビューコンテンツが、平行移動、回転、および/または変換されるべきかどうかと、該当する場合、プリズム、ミニプレビュープリズム、コンテンツ、またはミニプレビューコンテンツが、平行移動、回転、および/または変換されるべき量とを示す。例えば、ユニバースブラウザエンジンは、ユーザが、プリズムまたは着目コンテンツを平行移動、回転、および/または変換させるであろうかどうかを決定してもよい。決定が、肯定である場合、ユニバースブラウザエンジンはさらに、少なくとも部分的に、第2のユーザ入力(例えば、ユーザが、コンテンツまたはウェブページを新しい位置および新しい配向に移動および回転させる)に基づいて、そのような平行移動、回転、および/または変換の範囲を決定してもよい。
上記に説明されるように、ユニバースブラウザエンジンは、ブラウザエンジンと連動して機能し、着目コンテンツが完全にレンダリングされる前に、最初に、ミニプレビュープリズムまたはウェブページのミニプレビューをユーザに表示してもよい。いったんユーザが、ミニプレビューコンテンツまたはミニプレビュープリズムの平行移動、回転、および/または変換を終了すると、新しい位置および回転データが、ブラウザエンジンに返信されてもよく、これは、ひいては、グラフィカル座標を計算し、着目コンテンツを、少なくとも計算されたグラフィカル座標を用いてレンダリングする。いくつかの他の実施形態では、ユニバースブラウザエンジンおよびブラウザエンジンは、着目コンテンツをレンダリングし、ユーザに表示し、ユーザは、続いて、レンダリングされた着目コンテンツを平行移動、回転、および/または変換させてもよい。ユニバースブラウザエンジンは、同様に、平行移動、回転、および/または変換から生じる新しい位置および/または回転データをブラウザエンジンに返信し、これは、ひいては、その記憶された位置および/または回転データを更新する。着目コンテンツは、次いで、212Dにおいて、少なくとも部分的に、第2のユーザ入力に基づいてプリズム内に表示されてもよい。
図2Eは、1つ以上の実施形態における、ユニバースブラウザプリズム内のソフトウェアオブジェクトを変換するための高レベルブロック図を図示する。ウェブページまたはウェブページパネルが、202Eにおいて、変換ツリー構造から識別され得る。変換ツリー構造は、複数のノードを有する、シーングラフを含んでもよく、各ノードは、プリズムに対応する、移動可能ローカル空間を提供する。プリズムはまた、部分的または全体的に、変換ツリー構造内のプリズムに関する階層構造に基づいて、1つ以上の変換を受けるべき変換ツリー構造内のノードであってもよい。
変換ツリー構造はまた、プリズムではない、ノードを含んでもよい。むしろ、これらのノードは、コンテンツをグループ化するために使用されてもよい、または中間変換(例えば、スケーリング、平行移動、回転等)として使用されてもよい。例えば、ノードのグループは、変換のセットが、1つのノードに適用されると、グループ内の残りのノードもまた、ノードとともに変換されるように、同一変換のセットを受け得る。
202Eにおいて識別されたウェブページの1つ以上の親が、204Eにおいて、変換ツリー構造から識別され得る。変換ツリー構造内のノードは、ゼロ以上の子ノードを有し得るが、最大で1つの親を有し得る。いくつかの実施形態では、プリズムは、対応する変換ツリー構造内にヌル親およびゼロ子を伴って、初期化されてもよい。本変換ツリー構造は、続いて、続いてプリズムの中にレンダリングされる、コンテンツに基づいて、より多くのノードとともに取り込まれてもよい。変換ツリー構造内の親ノードの子ノードは、親ノードが受ける、変換を継承する。
いくつかの実施形態では、変換ツリー構造内のルートノードは、ルートノード変換に対応し、これは、プリズムの変換に適用されると、ルートノード変換にローカルのノードの変換を更新することを要求しない。例えば、オーディオコンテンツを表すノードは、オーディオ信号が、プリズム内に制約され、プリズムが変換されるときでも、プリズムの外側のから放出するように知覚されないように、ルートノード変換にローカルであってもよい。いくつかの実施形態では、子ノードは、その親ノードを変化させ得るが、子ノードは、子ノードが、その親ノードの変化を開始するために、異なる変換のセットを受けるために所望または要求されない限り、変化後、その現在の位置または配向を変化させない。例えば、ユーザに面した子プリズムは、その親プリズムを新しい親プリズムに変化させ得る。それにもかかわらず、変化は、子プリズムが、変化後も、ユーザに面し続けるように、子プリズムの位置および回転を変化させない。
ユニバースブラウザエンジンが、206Eにおいて、ウェブページまたはウェブページパネルの位置および/または回転データをブラウザエンジンから受信し得る。そのような位置および/または回転データは、いくつかの実施形態では、単独で、またはいくつかの他の実施形態では、他のデータの一部として(例えば、ブラウザエンジンによってレンダリングされたウェブページの一部として)、直接、ブラウザエンジンから、位置および/または回転データとして受信されてもよい。ユニバースブラウザエンジンは、ユーザが、ウェブページまたはそのパネルを操作(例えば、平行移動、回転、および/または変換)することを可能にするように、ウェブページの位置および回転データをブラウザエンジンから受信する。
上記に説明されるように、ユニバースブラウザエンジンは、3D空間環境内の仮想コンテンツの作成、設置、および表示を管理するが、ユニバースブラウザエンジンは、いくつかの実施形態では、ブラウザエンジンが、そのような位置および/または回転データをユニバースブラウザエンジンから要求することによって、さらに遅延を伴わずに、ウェブページからの位置および/または回転要求に迅速に応答し得るように、位置および回転データをブラウザエンジン内(例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ内)に記憶してもよい。いくつかの他の実施形態では、ユニバースブラウザエンジンはまた、位置および回転データを、ユニバースブラウザエンジンによってアクセス可能な別の非一過性コンピュータ可読媒体内に記憶してもよく、位置および回転データの2つのコピーは、位置および/または回転データが変化する度に同期される。
ユニバースブラウザエンジンはさらに、208Eにおいて、ウェブページのための位置および/または回転入力を受信し得る。例えば、ユーザは、ウェブページまたはそのパネルを平行移動、回転、および/または変換させ、したがって、ウェブページのための位置および/または回転データのための入力を提供し得る。ユニバースブラウザエンジンは、210Eにおいて、少なくとも部分的に、208Eにおいて受信された位置および/または回転入力に基づいて、ウェブページまたはその一部(例えば、ウェブページのための制御、サブパネル等)のための位置および/または回転データを決定し得る。ウェブページまたはその一部(例えば、ウェブページのより小さい部分)は、別様に明示的に説明されない限り、本願では同義的に使用され得ることに留意されたい。位置および/または回転入力が、ウェブページ(またはそのパネル)の位置および/または回転データを修正するため、ユニバースブラウザエンジンは、212Eにおいて、その位置および/または回転データと、ブラウザエンジン内に記憶された対応するデータを同期させ得る。いくつかの実施形態では、ユニバースブラウザエンジンは、位置および回転データ全体をブラウザエンジンと同期させる。いくつかの他の実施形態では、ユニバースブラウザエンジンは、その位置および回転データに対する変化を追跡し、その独自の位置および回転データとブラウザエンジン内の対応するデータとの間のデルタのみを同期させる。
ブラウザエンジンは、更新された位置および/または回転データをユニバースブラウザエンジンから受信し、レンダリングされるべきコンテンツのグラフィカル座標を計算し、レンダラプロセス(例えば、BlinkまたはWebKitのためのRenderWidget)を呼び出すことによって、コンテンツをレンダリングする。ユニバースブラウザエンジンは、次いで、214Eにおいて、ブラウザエンジンおよび複合現実システムと連動して機能し、少なくともウェブページの位置および回転データを使用して、レンダリングされたコンテンツをプリズム内に表示し得る。
図2Fは、いくつかの実施形態による、図2Eに図示されるブロック図の一部についてのさらなる詳細を図示する。より具体的には、図2Fは、210Eにおいて、部分的または全体的に、図2Eの208Eにおいて受信された位置および/または回転入力に基づいて、ウェブページのための回転および/または回転データを決定することについてのさらなる詳細を図示する。これらの実施形態では、変換のセットが、随意に、202Fにおいて、該当する場合、ウェブページの親に関して、識別され得る。いくつかの他の実施形態では、ブラウザエンジンは、位置および/または回転データを識別し得、ユニバースブラウザエンジンは、202Fにおいて、位置および/または回転データを、ウェブページの親(またはその一部)の変換のセットを識別せずに、直接、位置および/または回転データ単独の形態において、または他のデータ(例えば、レンダリングされたウェブページ)の一部としてのいずれかで、ブラウザエンジンから識別し得る。変換のセットの変換特性が、204Fにおいて、部分的または全体的に、208Eにおいて受信された位置および/または回転入力に基づいて、ウェブページのために識別され得る。変換特性は、例えば、ウェブページのための所望または要求される変換(例えば、ウェブページの開発者によって想定される、所望または要求される変換)、ウェブページを表すノードの親、ウェブページまたはその中にウェブページがレンダリングされるプリズムの挙動のタイプ、その中にウェブページがレンダリングされるプリズムの特性(例えば、範囲、衝突特性、重複/交点特性等)、またはそれらの任意の組み合わせを含んでもよい。
いくつかの実施形態では、位置および/または回転入力は、変換ツリー構造内のウェブページを表す、ノードに関する親-子関係の変化を含んでもよい。例えば、位置および/または回転入力は、ウェブページのためのノードの親を変化させ得る。一般に、親ノードに適用される変換のセットはまた、親ノードの子ノードにも適用される。いくつかの実施形態では、子ノードの親を変化させることは、必ずしも、子ノードに適用される変換を変化させるとは限らない。例えば、ウェブページが、追従頭部固定(または追従眼固定)タイプの挙動で提示される場合、ウェブページを表す子ノードの親を変化させることは、親ノードに適用される変換の親セットが、本タイプの挙動によってオーバライドされ得るため、ウェブページに適用される変換のセットを変化させない場合がある。
ウェブページのための位置および/または回転入力が、206Fにおいて、識別され得る。例えば、ユーザは、206Fにおいて、ウェブページまたはそのパネルを平行移動、回転、および/または変換させ、したがって、ウェブページのための位置および/または回転入力を提供し得る。上記に説明されるように、位置および/または回転入力は、変換ツリー構造のノード構造の変化を含んでもよい。例えば、ウェブページを表すノードが、その親および/または子として、1つ以上のノードに追加される、またはそこから除去され得る。
ウェブページを表すノードの親を変化させることは、ウェブページを表すノードに適用される変換のセットを変化させる場合とそうではない場合がある。例えば、世界変換が、変換ツリー構造内の全てのノードに適用される、いくつかの実施形態では、ウェブページを表すノードの親を変化させることは、それにもかかわらず、ノードおよび変換ツリー構造内の他のノードに適用される、世界変換を変化させない場合がある。別の実施例として、ウェブページが、追従頭部固定挙動タイプに従って、ユーザに面して提示されるべき場合、本挙動タイプは、これらの1つ以上の他の変換が、ノードに適用されないように、追従頭部固定挙動タイプに干渉し得る、1つ以上の他の変換をオーバライドし得る。
ウェブページのための変換のセットが、208Fにおいて、少なくとも部分的に、例えば、位置および/または回転入力、親のための変換のセット、または204Fにおいて識別されたウェブページのための変換特性のうちの1つ以上のものに基づいて、決定され得る。いくつかの実施形態では、変換ツリー構造内のウェブページを表すノードは、仮想3D空間内のウェブページ(またはそのパネル)の範囲、ウェブページのための1つ以上のローカル変換、ウェブページの回転を統制する3D回転行列、ローカル変換に対応するスケーリング係数、ウェブページの位置ベクトル、1つ以上のローカル/世界変換、またはローカル/世界スケールのうちの1つ以上のものを含む、またはそれに対応してもよい。
ローカル変換は、変換ツリー構造内のウェブページを表すノードの親ノードに適用される、変換を含む。ウェブページを表すノードが、親ノードを有していない、いくつかの実施形態では、世界変換(一般的またはデフォルト空間から、その中にウェブページがレンダリングされる、ローカルプリズムい)が、ローカル変換に割り当てられてもよい。ノードが、上記に説明される複数の要素(例えば、複数の変換)を含む、またはそれに対応する、いくつかの実施形態では、ローカル変換が、これらの複数の要素を連続的に適用することによって、決定されてもよい。例えば、ウェブページのノードが、平行移動変換、スケーリング変換、および回転変換を受ける場合、ローカル変換は、以下の象徴的表現、すなわち、ローカル変換=平行移動*回転行列*スケーリングであると決定される。本ローカル変換は、ウェブページに適用されると、スケーリング係数に従って、ウェブページをスケーリングし(例えば、3つの軸間の非均一スケーリングが、サポートされ得る)、回転行列に従って、スケーリングされたウェブページを回転させ、次いで、平行移動行列に従って、スケーリングされ、回転されたウェブページを移動させる。
いくつかの実施形態では、OpenGL Mathematics(GLM)が、ウェブページのための変換を遂行するために使用され得るが、他の数学ライブラリはまた、それを遂行するために使用されてもよい。以下の例示的コードは、ウェブページの変換を遂行するためのGLMの使用を実証する。
上記のコードでは、「TransformNode::getCurrentVolumeTransform()」が、ウェブページパネルの変換を取得するために使用され得、他のコードセグメントが、ウェブページパネルの変換を設定するために使用され得る。加えて、以下の例示的コードが、ウェブページパネルの変換を位置および回転に分解するために使用され得るが、他の類似または均等物実装もまた、検討されており、また、同じまたは実質的に類似目的を達成するために使用され得ることに留意されたい。
208Fにおいて決定されたウェブページのための変換のセットを用いることで、ウェブページ(またはそのパネル)のための位置および回転データが、210Fにおいて、変換のセットをウェブページに適用することによって決定され得る。位置および回転データを用いることで、ブラウザエンジンは、レンダリングされるべきコンテンツのグラフィカル座標を計算し、レンダラ(例えば、RenderWidgetまたは他のレンダラ)を呼び出し、コンテンツをレンダリングし得る。レンダリングされたコンテンツは、次いで、212Fにおいて、全体または部分的に、位置および回転データに基づいて、プリズム内に表示され得る。
図2G-2Iは、任意のノードが、任意の様式においてグループ化され得、対応する変換が、ノードのそのようなグループ化から生じる親-子関係に依存し得る、実施形態を図示する。図2G-2Iに図示されるこれらの実施例は、いくつかの実施形態では、種々の変換ツリーを含み、ツリーをグループ化し、および/または新しいグループを作成する。例えば、図2Gにおける変換ツリー200Gに関して、本実施形態は、現在、別個の変換ツリーである、ノードA(202G)およびノードE(210G)をともにグループ化することを図示する。決定が、最初に、ノードA(202G)またはノードE(210G)が、すでにグループ内にあるかどうかに関して行われ得る。現在、ノードA(202G)またはノードE(210G)のいずれも、グループ-親を有しておらず、したがって、いずれも、グループ内にない。したがって、グループルートが、作成されてもよい。
図2Hでは、グループルート202Hを有する、グループツリー1022が、作成される。ノードA(202G)およびノードE(210G)のグループ親が、図2Hに描写されるように、グループルート202Hに割り当てられる。さらに、決定が、ノードE(210G)がノードA(202G)の先祖(または親)であるかどうかを決定するために行われる。ノードE(210G)は、ノードA(202G)が親を有していないため、ノードA(202G)の先祖ではない。加えて、別の決定が、ノードA(202G)がノードE(210G)の先祖(または親)であるかどうかを決定するために行われ得る。同様に、ノードA(202G)は、ノードE(210E)が親を有していないため、ノードE(210G)の先祖ではない。
図2Iは、本開示のいくつかの実施形態による、サンプル計算を図示する。いくつかの実施形態では、グループ内に属するノードに直接適用される、任意の変換は、グループをそれとともに変換し得る。グループノードに行われる間接変換は、グループを変換させ得ない。例えば、親ノードが、グループ内になく、その子が、グループ内にあって、親が、変換される場合、子のグループ内のノードは、子の変換が変化する場合でも、それとともに変換しない。グループ全体の移動が所望される場合、親は、グループに追加されるべきである。グループに適用するための変換を計算するために、使用するための変換は、グループルートの各直系の子に適用されなければならない。
図2Iに描写されるような所与の変換ツリー200Gおよびグループツリー200Hに関して、本実施形態は、変換をノードA(202G)に適用する。ノードA(202G)は、グループツリー200H内に属するため、ノードC(206G)、D(208G)、およびE(210G)は、ノードA(202G)とともに変換されることが予期される。加えて、グループ内に属さない、ノードB(204G)もまた、ノードA(202G)の子であるため、グループとともに変換しなければならない。ノードA(202G)の新世界行列は、Maw’として示され得、Maw’は、「matrix a world new」を表す。ノードA(202G)の旧世界行列は、Mawとして示され得、Mawは、「matrix a world old」を表す。Maw’を得るためにノードA(202G)に適用するための行列は、Mgwとして示され得、Mgwは、「matrix group world」を表す。目標のうちの1つは、ノードAの世界行列に適用されると、ノードAの新しい行列に等しくなるであろう、グループルート(Mgw)に設定するための行列を決定することである。本同一行列は、グループルートの他の直系の子にも適用され得る。
図2Jは、1つ以上の実施形態における、エクステンデッドリアリティシステムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するプロセスのための高レベルブロック図を図示する。これらの実施形態では、ブラウザエンジンは、202Jにおいて、ウェブページのための3次元(3D)配向のための入力を受信し得る。いくつかの実施形態では、入力は、着目ウェブページの提示を要求する、複合現実システムのユーザ、またはウェブページがある様式で提示されることを好む、したがって、コーディングする、ウェブページ開発者による、入力を含んでもよい。いくつかの他の実施形態では、入力は、配向データのための要求を含んでもよい。例えば、配向データ(例えば、いくつかの実施形態では、位置付けデータ、回転データ、および/またはさらにスケールデータ)のための要求が、いくつかの実施形態では、着目ウェブページのウェブサイトによって発行され得る。例えば、ウェブページの開発者は、アプリケーションプログラミングインターフェース(例えば、上記に説明されるWindow.VirtualWorld.Orientation API)を着目ウェブページのコードの中に組み込んでもよい。
直上で説明されるように、入力は、いくつかの実施形態では、例えば、仮想3D空間内に提示されるとき、ウェブページを、ある配向(例えば、ある回転)で表すことを好む、開発者から生じ得る。これらまたは他の実施形態のうちのいくつかでは、入力は、複合現実システムによって作成された仮想3D空間内での、あるウェブページ、以前に訪問された同一ウェブページ、または同一ウェブサイトからの、または随意に、他のウェブサイト等からの他のウェブページのユーザの操作から生じ得る。
例えば、ウェブページは、ユーザのために、開かれ、仮想3D空間内に表示され得、ユーザは、仮想3D空間内のウェブページの配向を調節してもよい。これらの実施形態のうちのいくつかでは、類似技法がさらに、ウェブページのためのウェブブラウザまたはその中にウェブページがレンダリングされるプリズムを操作するために適用されてもよい。ユーザは、例えば、ユニバースブラウザエンジンおよび/またはウェブページ開発者によって提供されるように、仮想3D空間内のウェブページ表現の配向を自由に調節してもよく、そのような配向操作に関する制約は、例えば、プリズムの境界、許容可能配向値、許容可能配向範囲等を含む。いくつかの実施形態では、そのような配向はまた、随意に、ウェブページ表現および仮想オブジェクトが、現実のように現れる、またはそのように知覚されるように、ウェブページ表現と仮想3D空間内の1つ以上の他の物理的および/または仮想オブジェクトとの間の衝突および/または重複動態によって制約されてもよい。
ブラウザエンジン(例えば、Blink、Gecko、WebKit、Trident等)は、独立型コンピュータプログラムではない。むしろ、ブラウザエンジンは、ウェブページのリソース(例えば、HTMLドキュメント等)を双方向視覚的表現に変換する、ウェブブラウザのソフトウェアコンポーネントである。ブラウザエンジンのために一般に使用される、他の用語は、例えば、カスケードスタイルシート(CSS)内のルールに基づいて、視覚的表現のためのグラフィカル座標を計算することによる、レイアウトエンジン、レンダリングエンジン等を含む。
その名前が示唆するように、ブラウザエンジンは、ウェブページのためのレイアウトおよびレンダリングを実施し、セキュリティポリシを施行し、ページスクリプトにエクスポーズされる、DOM(ドキュメントオブジェクトモデル)データ構造を実装する。ブラウザエンジンはまた、ハイパーリンクおよびウェブフォームをハンドリングしてもよい。いくつかの実施形態では、ブラウザエンジンは、JavaScript(登録商標)コードの実行のために、別の専用スクリプトエンジンを利用する。ウェブブラウザのための少なくとも前述の機能を実施することに加え、ブラウザエンジンはまた、電子メールクライアント、ソフトウェアアプリケーションのための他のフレームワーク(例えば、GoogleのElectron Framework)等の他のソフトウェアプログラムのための同じまたは実質的に類似機能を実施してもよい。
ブラウザエンジンは、204Jにおいて、配向データを決定し、3D配向または3D配向操作のための要求に応答してもよい。いくつかの実施形態では、ブラウザエンジンは、直近の配向データをブラウザエンジンによってアクセス可能な非一過性コンピュータ可読媒体(例えば、キャッシュメモリ)内に記憶してもよい。そのような配向データは、配向データが修正される(例えば、仮想3D空間内に表示されるウェブページをさらに移動、回転、または変換させる、ユーザによって)度に、複合現実システムのユニバースブラウザエンジンによって送信されてもよい。
ウェブブラウザが、ウェブページをレンダリングおよび表示するために初期化すると、そのブラウザエンジンは、配向のためのそのような要求に、例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ(例えば、Chromiumベースのブラウザ内のRenderWidgetクラス内)内に記憶される、配向データで応答してもよい。いったん配向データが、修正されると、ブラウザエンジンは、その記憶された配向データを、更新された配向データでリフレッシュする、またはユニバースブラウザエンジンからの配向データに更新してもよい。直近の配向データを用いることで、ブラウザエンジンは、ウェブページのコンテンツをレンダリングし(例えば、RenderWidgetクラスをコールすることによって)、例えば、直近の配向データと、レンダリングされたコンテンツのレイアウトを統制するルール(例えば、カスケードスタイルシート)とを使用して、レンダリングされたコンテンツのためのグラフィカル座標を計算してもよい。
複合現実システムのユニバースブラウザエンジンは、206Jにおいて、ひいては、1つ以上の複合現実ソフトウェアモジュールおよび/またはハードウェア機構を呼び出し、ウェブページを仮想3D空間内に表示する、ブラウザエンジンを呼び出してもよい。例えば、仮想3D空間内(例えば、プリズム内)へのウェブページの配向に応じて、ウェブページの仮想3D表現は、複数の深度面または複数の焦点面を横断して及び得る。エクステンデッドリアリティシステムは、例えば、その切替可能な焦点面または可変焦点化機構を利用して、3D配向データに基づいて、ウェブページの仮想3D表現をレンダリングしてもよい。
エクステンデッドリアリティシステムについてのさらなる詳細は、本願の第1の段落に参照される米国特許出願に説明される。いくつかの実施形態では、複合現実機構の本呼出は、ブラウザ(例えば、Chromium)および/またはブラウザエンジン(例えば、ChromiumのためのBlink)を介して行われてもよい。例えば、ブラウザ(またはそのブラウザエンジン)は、配向データ(またはさらに随意に、スケールデータ)をウェブページパネルに適用し、複合現実機構を呼び出し、仮想3Dコンテンツを表示してもよい。
図2Kは、1つ以上の実施形態における、複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するプロセスのためのさらなる詳細なブロック図を図示する。ウェブページを開くための命令(例えば、ユーザがリンクをクリックすることによって、ユーザが検索基準を検索フィールド内に打ち込むことによって、ウェブサイトのためのURLを打ち込むことによって等)に応答して、ウェブブラウザまたはウェブページパネルは、202Kにおいて、立ち上げられる。
ユニバースブラウザエンジンは、配向データが、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶され得る、または非一過性コンピュータ可読媒体内の配向データが、リフレッシュされ得るように、配向データをウェブブラウザのブラウザエンジンに送信してもよい。ブラウザエンジンは、次いで、受信された配向データを、例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ内にキャッシュまたは記憶してもよい。配向データが、ブラウザエンジンによってアクセス可能な非一過性コンピュータ可読メモリ(例えば、キャッシュ)内に記憶されている、いくつかの実施形態では、非一過性コンピュータ可読メモリ内に記憶される、記憶された配向データは、ユニバースブラウザエンジンからの配向データによって初期化されてもよい。
ウェブページは、随意に、204Kにおいて、配向要求をブラウザエンジンに送信してもよい。例えば、ウェブページの開発者は、ウェブページが、初期化に応じて、またはその直後、配向データ要求をブラウザエンジンに送信するように、アプリケーションプログラミングインターフェース(API)のセット(例えば、上記に説明されるWindow.VirtualWorld.Orientation API)をウェブページのコードの中に組み込んでもよい。ウェブページの開発者が、ウェブページをある配向で表すことを所望し得る、いくつかの実施形態では、ウェブページはまた、APIのセットを利用して、配向データをブラウザエンジンに通信することによって、配向データを設定してもよい。これらの実施形態のうちのいくつかでは、ウェブページは、ユーザ入力(例えば、ユーザがリンクをクリックする、ユーザが検索基準を検索フィールド内に打ち込む、ユーザがウェブサイトのためのURLを打ち込む等)に応答して、ブラウザエンジンからウェブページペーンの配向データを取得してもよい。
ウェブページを表示するウェブページからの随意の配向要求に応答して、ブラウザエンジンは、206Kにおいて、要求に、例えば、複合現実システムのユニバースブラウザエンジンからのそのような配向データを取得することからのさらなる遅延を伴わずに、ブラウザエンジンによってアクセス可能な非一過性コンピュータ可読媒体内に記憶される直近の配向データで応答してもよい。直近の配向データが、利用不可能である場合(例えば、初めて初期化された複合現実システムに関して、または他の理由から)、ブラウザエンジンは、ウェブページからのそのような要求に、デフォルト配向データで応答してもよい。
ブラウザエンジンはまた、208Kにおいて、配向データをユニバースブラウザエンジンに伝送してもよい。例えば、いくつかの実施形態は、ユーザに、仮想3D空間内のウェブページの表現を配向する能力を提供してもよい。GET要求が受信される、いくつかの実施形態では、ブラウザエンジンは、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶されている、配向データを、ウェブページに返す。
ユニバースブラウザエンジンは、配向データをウェブブラウザのブラウザエンジンから受信し、複合現実システムの他のモジュール(例えば、上記に説明されるランタイム層、オペレーティングシステムサービス層、1つ以上の3Dエンジン、または1つ以上のソフトウェアアプリケーション等)および他のハードウェアおよびそのソフトウェアコンポーネントを呼び出し、ユーザが、仮想3D空間(例えば、プリズム)内のウェブページの表現のための3D配向を自由に調節することを可能にする。いくつかの実施形態では、206Kは、ウェブページが配向データを取得する(「GET」)と実行され、208Kは、ウェブページが配向データを決定する(「SET」)と実行される。
ユニバースブラウザエンジンは、いくつかの実施形態では、210Kにおいて、ブラウザエンジンからの配向データの受信に応じて、ウェブページのための配向データを更新する。SET要求が、新しい配向データのために受信される、いくつかの他の実施形態では、新しい配向データは、ブラウザエンジンのための非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶されてもよく、さらに、ユニバースブラウザエンジンにパスされてもよい。ユニバースブラウザエンジンはさらに、配向データが更新されたかどうかを決定する。
例えば、ユーザによるウェブページ表現の任意の配向は、配向データを修正し得る。ユニバースブラウザエンジンが、配向データが変化したことを決定する場合、ユニバースブラウザエンジンは、212Kにおいて、配向データを更新し、配向データの最新バージョンをブラウザエンジンに送信してもよい。ブラウザエンジンは、次いで、ひいては、非一過性コンピュータ可読媒体(例えば、キャッシュ)内に記憶される配向データを、配向データの最新バージョンとともに記憶してもよい。
配向データの最新バージョンの受信に応じて、ブラウザエンジンはさらに、いくつかの実施形態では、ウェブページのコンテンツのグラフィカル座標を計算し、ウェブページのコンテンツをレンダリングしてもよい。ウェブページパネルは、次いで、少なくとも部分的に、配向データの最新バージョンに基づいて、平行移動、回転、スケーリング、または別様に変換されてもよい。ブラウザエンジンは、これらの実施形態では、次いで、214Kにおいて、次いで、レンダリングされたコンテンツをユニバースブラウザエンジンにパスしてもよく、これは、ひいては、複合現実システムの種々のソフトウェアおよびハードウェアモジュールを呼び出し、レンダリングされたコンテンツの表現を仮想3D空間内に生成し、レンダリングされたコンテンツの表現を、仮想3D空間内の平行移動、回転、スケーリング、または別様に変換されたウェブページパネル内でユーザに表示する。
いくつかの他の実施形態では、ブラウザエンジンは、ブラウザエンジンのキャッシュ内に記憶される配向データを用いて、ウェブページのコンテンツをレンダリングし、レンダリングされたコンテンツおよび配向データをユニバースブラウザエンジンに伝送する。ユニバースブラウザエンジンは、レンダリングされたコンテンツをソフトウェアオブジェクトとして取り扱い、ユーザが、ウェブページのレンダリングされたコンテンツの3D配向を調節することを可能にする。
いったんユーザが、ウェブページ表現の配向を決定すると、ユニバースブラウザエンジンは、配向データを更新し、例えば、変換およびレンダリングモジュールを呼び出し、ソフトウェアオブジェクトのためのウェブページの更新された表現を仮想3D空間内に生成し、ウェブページの更新された表現をユーザに提示する。これらの実施形態のうちのいくつかでは、複合現実システムは、ユーザが仮想3D空間内のウェブページの位置および/または回転を変化させる間、ユーザの操作とウェブページの表示との間に知覚可能な遅れを伴わずに、ほぼリアルタイム方式で、ウェブページを仮想3D空間内に表示し得る(214K)。
図2Lは、1つ以上の実施形態における、ユニバースブラウザプリズム内でソフトウェアオブジェクトを変換するための高レベルブロック図を図示する。ウェブページまたはウェブページパネルは、202Lにおいて、変換ツリー構造から識別され得る。変換ツリー構造は、複数のノードを有する、シーングラフを含んでもよく、各ノードは、プリズムに対応する、移動可能ローカル空間を提供する。プリズムはまた、部分的または全体的に、変換ツリー構造内のプリズムに関する階層構造に基づいて、1つ以上の変換を受けるべき変換ツリー構造内のノードであってもよい。
変換ツリー構造はまた、プリズムではない、ノードを含んでもよい。むしろ、これらのノードは、コンテンツをグループ化するために使用されてもよい、または中間変換(例えば、スケーリング、平行移動、回転等)として使用されてもよい。例えば、ノードのグループは、変換のセットが、1つのノードに適用されると、グループ内の残りのノードもまた、ノードとともに変換されるように、同一変換のセットを受け得る。
202Lにおいて識別されたウェブページの1つ以上の親が、204Lにおいて、変換ツリー構造から識別され得る。変換ツリー構造内のノードは、ゼロ以上の子ノードを有し得るが、最大で1つの親を有し得る。いくつかの実施形態では、プリズムは、対応する変換ツリー構造内にヌル親およびゼロ子を伴って、初期化されてもよい。本変換ツリー構造は、続いて、続いてプリズムの中にレンダリングされる、コンテンツに基づいて、より多くのノードとともに取り込まれてもよい。変換ツリー構造内の親ノードの子ノードは、親ノードが受ける、変換を継承する。
いくつかの実施形態では、変換ツリー構造内のルートノードは、ルートノード変換に対応し、これは、プリズムの変換に適用されると、ルートノード変換にローカルのノードの変換を更新することを要求しない。例えば、オーディオコンテンツを表すノードは、オーディオ信号が、プリズム内に制約され、プリズムが変換されるときでも、プリズムの外側から放出するように知覚されないように、ルートノード変換にローカルであってもよい。
いくつかの実施形態では、子ノードは、その親ノードを変化させ得るが、子ノードは、子ノードが、その親ノードの変化を開始するために、異なる変換のセットを受けるために所望または要求されない限り、変化後、その現在の位置または配向を変化させない。例えば、ユーザに面した子プリズムは、その親プリズムを新しい親プリズムに変化させ得る。それにもかかわらず、変化は、子プリズムが、変化後も、ユーザに面し続けるように、子プリズムの位置および回転を変化させない。
ユニバースブラウザエンジンが、206Lにおいて、ウェブページまたはウェブページパネルの配向データをブラウザエンジンから受信し得る。そのような配向データは、いくつかの実施形態では、単独で、またはいくつかの他の実施形態では、他のデータの一部として(例えば、ブラウザエンジンによってレンダリングされたウェブページの一部として)、直接、ブラウザエンジンから、配向データとして受信されてもよい。ユニバースブラウザエンジンは、ユーザが、ウェブページまたはそのパネルを操作(例えば、平行移動、回転、および/または変換)することを可能にするように、ウェブページの配向データをブラウザエンジンから受信する。
上記に説明されるように、ユニバースブラウザエンジンは、3D空間環境内の仮想コンテンツの作成、設置、および表示を管理するが、ユニバースブラウザエンジンは、いくつかの実施形態では、ブラウザエンジンが、そのような配向データをユニバースブラウザエンジンから要求することによって、さらに遅延を伴わずに、ウェブページからの配向要求に迅速に応答し得るように、配向データをブラウザエンジン内(例えば、ブラウザエンジンによってアクセス可能なキャッシュメモリ内)に記憶してもよい。いくつかの他の実施形態では、ユニバースブラウザエンジンはまた、配向データを、ユニバースブラウザエンジンによってアクセス可能な別の非一過性コンピュータ可読媒体内に記憶してもよく、配向データの2つのコピーは、配向データが変化する度に同期される。
ユニバースブラウザエンジンはさらに、208Lにおいて、ウェブページのための配向入力を受信し得る。例えば、ユーザは、ウェブページまたはそのパネルを平行移動、回転、および/または変換させ、したがって、ウェブページのための配向データのための入力を提供し得る。ユニバースブラウザエンジンは、210Lにおいて、少なくとも部分的に、208Lにおいて受信された配向入力に基づいて、ウェブページまたはその一部(例えば、ウェブページのための制御、サブパネル等)のための配向データを決定し得る。ウェブページまたはその一部(例えば、ウェブページのより小さい部分)は、別様に明示的に説明されない限り、本願では同義的に使用され得ることに留意されたい。
配向入力が、ウェブページ(またはそのパネル)の配向データを修正するため、ユニバースブラウザエンジンは、212Lにおいて、その配向データと、ブラウザエンジン内に記憶された対応するデータを同期させ得る。いくつかの実施形態では、ユニバースブラウザエンジンは、配向データ全体をブラウザエンジンと同期させる。いくつかの他の実施形態では、ユニバースブラウザエンジンは、その配向データに対する変化を追跡し、その独自の配向データとブラウザエンジン内の対応するデータとの間のデルタのみを同期させる。
ブラウザエンジンは、更新された配向データをユニバースブラウザエンジンから受信し、レンダリングされるべきコンテンツのグラフィカル座標を計算し、レンダラプロセス(例えば、BlinkまたはWebKitのためのRenderWidget)を呼び出すことによって、コンテンツをレンダリングする。ユニバースブラウザエンジンは、次いで、214Lにおいて、ブラウザエンジンおよび複合現実システムと連動して機能し、少なくともウェブページの配向データを使用して、レンダリングされたコンテンツをプリズム内に表示し得る。
図2Mは、いくつかの実施形態による、図2Lに図示されるブロック図の一部についてのさらなる詳細を図示する。より具体的には、図2Mは、210Lにおいて、部分的または全体的に、図2Lの208Lにおいて受信された配向入力に基づいて、ウェブページのための配向データを決定することについてのさらなる詳細を図示する。これらの実施形態では、変換のセットは、随意に、202Mにおいて、該当する場合、ウェブページの親に関して、識別され得る。いくつかの他の実施形態では、ブラウザエンジンは、配向データを識別し得、およびユニバースブラウザエンジンは、202Mにおいて、配向データを、ウェブページの親(またはその一部)の変換のセットを識別せずに、直接、配向データ単独の形態において、または他のデータ(例えば、レンダリングされたウェブページ)の一部としてのいずれかで、ブラウザエンジンから識別し得る。
変換のセットの変換特性が、204Mにおいて、部分的または全体的に、208Lにおいて受信された配向入力に基づいて、ウェブページのために識別され得る。変換特性は、例えば、ウェブページのための所望または要求される変換(例えば、ウェブページの開発者によって想定される、所望または要求される変換)、ウェブページを表すノードの親、ウェブページまたはその中にウェブページがレンダリングされるプリズムの挙動のタイプ、その中にウェブページがレンダリングされるプリズムの特性(例えば、範囲、衝突特性、重複/交点特性等)、またはそれらの任意の組み合わせを含んでもよい。
いくつかの実施形態では、配向入力は、変換ツリー構造内のウェブページを表す、ノードに関する親-子関係の変化を含んでもよい。例えば、配向入力は、ウェブページのためのノードの親を変化させ得る。一般に、親ノードに適用される変換のセットはまた、親ノードの子ノードにも適用される。いくつかの実施形態では、子ノードの親を変化させることは、必ずしも、子ノードに適用される変換を変化させるとは限らない。例えば、ウェブページが、追従頭部固定(または追従眼固定)タイプの挙動で提示される場合、ウェブページを表す子ノードの親を変化させることは、親ノードに適用される変換の親セットが、本タイプの挙動によってオーバライドされ得るため、ウェブページに適用される変換のセットを変化させない場合がある。
ウェブページのための配向入力が、206Mにおいて、識別され得る。例えば、ユーザは、206Mにおいて、ウェブページまたはそのパネルを平行移動、回転、および/または変換させ、したがって、ウェブページのための配向入力を提供し得る。上記に説明されるように、配向入力は、変換ツリー構造のノード構造の変化を含んでもよい。例えば、ウェブページを表すノードが、その親および/または子として、1つ以上のノードに追加される、またはそこから除去され得る。
ウェブページを表すノードの親を変化させることは、ウェブページを表すノードに適用される変換のセットを変化させる場合とそうではない場合がある。例えば、世界変換が、変換ツリー構造内の全てのノードに適用される、いくつかの実施形態では、ウェブページを表すノードの親を変化させることは、それにもかかわらず、ノードおよび変換ツリー構造内の他のノードに適用される、世界変換を変化させない場合がある。別の実施例として、ウェブページが、追従頭部固定挙動タイプに従って、ユーザに面して提示されるべき場合、本挙動タイプは、これらの1つ以上の他の変換が、ノードに適用されないように、追従頭部固定挙動タイプに干渉し得る、1つ以上の他の変換をオーバライドし得る。
ウェブページのための変換のセットが、208Mにおいて、少なくとも部分的に、例えば、配向入力、親のための変換のセット、または204Mにおいて識別されたウェブページのための変換特性のうちの1つ以上のものに基づいて、決定され得る。いくつかの実施形態では、変換ツリー構造内のウェブページを表すノードは、仮想3D空間内のウェブページ(またはそのパネル)の範囲、ウェブページのための1つ以上のローカル変換、ウェブページの回転を統制する3D回転行列、ローカル変換に対応するスケーリング係数、ウェブページの配向ベクトル(ウェブページの位置付けられるおよび/または配向を示す配向ベクトル)、1つ以上のローカル/世界変換、またはローカル/世界スケールのうちの1つ以上のものを含む、またはそれに対応してもよい。
ローカル変換は、変換ツリー構造内のウェブページを表すノードの親ノードに適用される、変換を含む。ウェブページを表すノードが、親ノードを有していない、いくつかの実施形態では、世界変換(一般的またはデフォルト空間から、その中にウェブページがレンダリングされる、ローカルプリズム)が、ローカル変換に割り当てられてもよい。ノードが、上記に説明される複数の要素(例えば、複数の変換)を含む、またはそれに対応する、いくつかの実施形態では、ローカル変換が、これらの複数の要素を連続的に適用することによって、決定されてもよい。
例えば、ウェブページのノードが、平行移動変換、スケーリング変換、および回転変換を受ける場合、ローカル変換は、以下の象徴的表現、すなわち、ローカル変換=平行移動*回転行列*スケーリングであると決定され得る。本ローカル変換は、ウェブページに適用されると、スケーリング係数に従って、ウェブページをスケーリングし(例えば、3つの軸間の非均一スケーリングが、サポートされ得る)、回転行列に従って、スケーリングされたウェブページを回転させ、次いで、平行移動行列に従って、スケーリングされ、回転されたウェブページを移動させる。
いくつかの実施形態では、OpenGL Mathematics(GLM)が、ウェブページのための変換を遂行するために使用され得るが、他の数学ライブラリはまた、それを遂行するために使用されてもよい。以下の擬似コードは、ウェブページの変換を遂行するためのGLMの使用を実証する。
208Mにおいて決定されたウェブページのための変換のセットを用いることで、ウェブページ(またはそのパネル)のための配向データが、210Mにおいて、変換のセットをウェブページに適用することによって決定され得る。配向データを用いることで、ブラウザエンジンは、レンダリングされるべきコンテンツのグラフィカル座標を計算し、レンダラ(例えば、RenderWidgetまたは他のレンダラ)を呼び出し、コンテンツをレンダリングし得る。レンダリングされたコンテンツは、次いで、212Mにおいて、全体または部分的に、配向データに基づいて、プリズム内に表示され得る。
図2Nは、いくつかの実施形態における、例示的レンダリングプロセスおよび例示的ブラウザプロセスの簡略化された高レベルアーキテクチャアーキテクチャ略図を図示する。これらの実施形態では、レンダリングプロセス202Nは、ウェブページ204Nのインスタンスと、ウェブブラウザレンダラ206Nのインスタンスとを含む。ウェブブラウザレンダラは、いくつかの実施形態では、ウェブページパネルの現在の位置および/または回転データを、例えば、キャッシュメモリ内にキャッシュし得る。ウェブブラウザレンダラ206Nは、218Nにおいて、現在の位置および/または回転データをウェブページ204Nに返し得る。ウェブページはまた、216Nにおいて、位置および/または回転データをウェブブラウザレンダラ206Nから取得し得る。さらに、ウェブページはまた、214Nにおいて、ウェブブラウザレンダラ206Nのための位置および/または回転データを設定し得る。
ウェブブラウザレンダラ206Nは、ブラウザ210Mに動作可能に結合され、位置および/または回転を設定するために、通信(例えば、1つ以上のプロセス間通信またはIPCメッセージ)をウェブブラウザ210Mに送信し得る。例えば、ウェブブラウザレンダラ206Nは、220Nにおいて、ウェブページパネルの3D位置を設定するために、FrameHostMsg_SetVirtualPositionをブラウザエンジン210Nに送信し得、および/またはウェブページパネルの3D回転を設定するために、FrameHostMsg_SetVirtualRotationをブラウザエンジン210Nに送信し得る。さらに、ブラウザエンジン210Nはまた、ウェブページパネルの位置および/または回転データを更新するために、通信(例えば、1つ以上のプロセス間通信またはIPCメッセージ)をウェブブラウザレンダラ206Nに送信し得る。例えば、ブラウザエンジン210NNは、222Nにおいて、キャッシュされたウェブページパネルの3D位置を更新するために、ViewMsg_UpdateCachedVirtualPositionをウェブブラウザレンダラ206Nに送信し得、および/またはキャッシュされたウェブページパネルの3D回転を更新するために、ViewMsg_UpdateCachedVirtualRotationをブラウザレンダラ206Nに送信し得る。
ブラウザエンジン210Nはまた、224Nにおいて、ユニバースブラウザエンジン212Nに動作可能に結合され、ウェブページパネルのための位置および/または回転データを設定し得る。ユニバースブラウザエンジン212Nはまた、226Nにおいて、ウェブページパネルの位置および/または回転データを初期化または更新し、ウェブページパネルの位置および/または回転データをブラウザエンジン210Nに通信し得る。例えば、ユーザは、ウェブページパネルの位置および/または回転を変化させてもよい。ウェブページのパネルの位置および/または回転のユーザ操作に応答して、ユニバースブラウザエンジン212Nは、226Nにおいて、ウェブページパネルの位置および/または回転データをブラウザエンジン210Nに送信し得る。別の実施例として、ユニバースブラウザエンジン212Nは、226Nにおいて、ある位置および回転データを用いて、ウェブページパネルを初期化し、本位置および回転データをブラウザエンジン210Nに通信し得る。
システムアーキテクチャ概要
図3は、その上に複合現実システムを用いて、3次元仮想空間内のウェブページおよびウェブリソースを管理および表示するための方法が、実装され得る、コンピュータ化されたシステムを図示する。コンピュータシステム300は、プロセッサ307、システムメモリ308(例えば、RAM)、静的記憶デバイス309(例えば、ROM)、ディスクドライブ310(例えば、磁気または光学)、通信インターフェース314(例えば、モデムまたはEthernet(登録商標)カード)、ディスプレイ311(例えば、CRTまたはLCD)、入力デバイス312(例えば、キーボード)、およびカーソル制御(図示せず)等の相互接続サブシステムおよびデバイスである、情報を通信するためのバス306または他の通信モジュールを含む。例証的コンピューティングシステム300は、インターネットを介して、普遍的オンデマンドベースで、構成可能コンピュータ処理リソース(例えば、コンピュータネットワーク、サーバ、記憶装置、アプリケーション、サービス等)およびデータの共有プールを他のコンピュータおよびデバイスに提供する、インターネットベースのコンピューティングプラットフォームを含んでもよい。例えば、コンピューティングシステム300は、いくつかの実施形態では、クラウドコンピューティングプラットフォームを含んでもよい、またはその一部であってもよい。
一実施形態によると、コンピュータシステム300は、1つ以上のプロセッサまたはプロセッサコア307が、システムメモリ308内に含有される1つ以上の命令の1つ以上のシーケンスを実行することによって、具体的動作を実施する。そのような命令は、システムメモリ308の中に、静的記憶デバイス309またはディスクドライブ310等の別のコンピュータ可読/使用可能記憶媒体から読み取られてもよい。代替実施形態では、有線回路網が、本発明を実装するためのソフトウェア命令の代わりに、またはそれと組み合わせて、使用されてもよい。したがって、本発明の実施形態は、ハードウェア回路網および/またはソフトウェアの任意の具体的組み合わせに限定されない。一実施形態では、用語「論理」は、本発明の全部または一部を実装するために使用される、ソフトウェアまたはハードウェアの任意の組み合わせを意味するものとする。
先行段落に説明されるような種々のアクションまたはプロセスは、1つ以上のプロセッサ、1つ以上のプロセッサコア、またはそれらの組み合わせ307を使用することによって実施されてもよく、1つ以上のプロセッサ、1つ以上のプロセッサコア、またはそれらの組み合わせは、1つ以上のスレッドを実行する。例えば、決定、識別、同期、グラフィカル座標の計算、レンダリング、変換、平行移動、回転、ソフトウェアオブジェクトの生成、設置、割当、関連付け等の種々の行為は、1つ以上のプロセッサ、1つ以上のプロセッサコア、またはそれらの組み合わせによって実施されてもよい。
本明細書で使用されるような用語「コンピュータ可読記憶媒体」または「コンピュータ使用可能記憶媒体」は、実行のために、プロセッサ307に命令を提供することに関与する、任意の非一過性媒体を指す。そのような媒体は、限定ではないが、不揮発性媒体および揮発性媒体を含む、多くの形態をとり得る。不揮発性媒体は、例えば、ディスクドライブ310等の光学または磁気ディスクを含む。揮発性媒体は、システムメモリ308等の動的メモリを含む。一般的形態のコンピュータ可読記憶媒体は、例えば、電気機械的ディスクドライブ(フロッピー(登録商標)ディスク、フレキシブルディスク、またはハードディスク等)、フラッシュベース、RAMベース(SRAM、DRAM、SDRAM、DDR、MRAM等)、または任意の他のソリッドステートドライブ(SSD)、磁気テープ、任意の他の磁気または磁気光学媒体、CD-ROM、任意の他の光学媒体、孔のパターンを伴う任意の他の物理的媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップまたはカートリッジ、またはそこからコンピュータが読み取り得る、任意の他の媒体を含む。
本発明のある実施形態では、本発明を実践するための命令のシーケンスの実行は、単一コンピュータシステム300によって実施される。他の実施形態によると、通信リンク315(例えば、LAN、PTSN、または無線ネットワーク)によって結合される、2つ以上のコンピュータシステム300が、相互に協調して、本発明を実践するための命令のシーケンスを実施してもよい。
コンピュータシステム300は、プログラム(例えば、アプリケーションコード)を含む、メッセージ、データ、および命令を、通信リンク315および通信インターフェース314を通して、伝送および受信してもよい。受信されたプログラムコードは、受信されるにつれて、プロセッサ307によって実行され、および/または後の実行のために、ディスクドライブ310または他の不揮発性記憶装置内に記憶されてもよい。ある実施形態では、コンピュータシステム300は、データ記憶システム331、例えば、コンピュータシステム300によって容易にアクセス可能なデータベース332を含む、データ記憶システム331と連動する。コンピュータシステム300は、データインターフェース333を通して、データ記憶システム331と通信する。バス306(例えば、メモリバス、システムバス、データバス等)に結合される、データインターフェース333は、種々のタイプの信号情報、例えば、命令、メッセージ、およびデータを表す、データストリームを含む、電気、電磁、または光学信号を伝送および受信する。本発明の実施形態では、データインターフェース333の機能は、通信インターフェース314によって実施されてもよい。
いくつかの実施形態は、メモリ内に記憶され、プロセッサによって実行されると、プロセッサに、行為のセットを実施させる、その上に記憶される命令のシーケンスを有する、非一過性コンピュータ可読媒体を対象とし、行為のセットは、ブラウザエンジンにおいて、ウェブページまたはそのためのウェブページパネルのための3次元(3D)変換のための入力を受信することと、入力に応答して、少なくとも、エクステンデッドリアリティシステムのマイクロプロセッサに結合される、ブラウザエンジンによって、少なくとも部分的に、ウェブページまたはそのためのウェブページパネルの3D変換に基づいて、ウェブページのための3D変換データを決定することであって、3D変換は、ウェブページまたはそのためのウェブページパネルの3D位置、回転、またはスケールの変化を備える、ことと、少なくとも、エクステンデッドリアリティシステムのブラウザエンジンに結合される、ユニバースブラウザエンジンによって、少なくとも部分的に、3D変換データに基づいて、ウェブページのコンテンツを仮想3D空間内に提示することとを含む。
これらの実施形態のうちのいくつかでは、行為のセットはさらに、ブラウザエンジンにおいて、仮想3D空間内に表示されるべきウェブページを識別することであって、仮想3D空間は、仮想3次元ボリュームを有する、ことと、ブラウザエンジンによって、3D変換データをブラウザエンジンによってアクセス可能な非一過性コンピュータ可読媒体内に記憶することと、ブラウザエンジンからの3D変換データをユニバースブラウザエンジンに伝送することとを含む。
すぐ上の実施形態のうちのいくつかでは、行為のセットはさらに、ブラウザエンジンからの3D変換データをユニバースブラウザエンジンに伝送することと、ユニバースブラウザエンジンにおいて、ウェブページまたはそのためのウェブページパネルの3D位置、回転、またはスケールの変化を受信することと、ユニバースブラウザエンジンによって、3D変換データを更新された3D変換データに更新し、ブラウザエンジンにアクセス可能な3D変換データと、更新された3D変換データを同期させることとを含む。
加えて、または代替として、行為のセットはさらに、ウェブページまたはウェブページをホストするウェブサイトから、ウェブページのための3D変換のための入力を受信することであって、ウェブページの境界は、仮想3D空間内で表示または抑制されるように構成可能である、ウェブブラウザアプリケーションインスタンスによって制約される、こと、ユーザから、ウェブページのための3D変換のための入力を受信することであって、ウェブページの境界は、仮想3D空間内で表示または抑制されるように構成可能である、ウェブブラウザによって制約される、こと、またはウェブページのコードから、ウェブページのための3D変換のための入力を識別することであって、ウェブページの開発者は、ブラウザエンジンによって表示されるべきウェブページの3D位置、回転、またはスケールを制約する、ことのうちの少なくとも1つを含む。
いくつかの実施形態では、行為のセットはさらに、ウェブページまたはそのためのウェブページパネルのための変換ツリー構造および変換ツリー構造内のノードを識別することと、ノードが変換ツリー構造内に親ノードを有するかどうかを決定することと、ブラウザエンジンから、ウェブページまたはウェブページパネルのための3D位置、回転、またはスケールデータを受信することと、ウェブページまたはウェブページパネルのための3D位置、回転、またはスケール入力をユニバースブラウザエンジンから受信することとを含む。
加えて、または代替として、行為のセットはさらに、ブラウザエンジンにおいて、ウェブページまたはウェブページパネルの3D位置、回転、またはスケールに関するデータをウェブサイトから受信することと、ブラウザエンジンからユニバースブラウザエンジンに、ウェブページまたはウェブページパネルの3D位置、回転、またはスケールに関するデータまたは3D変換データを伝送することとを含む。
すぐ上の実施形態のうちのいくつかでは、行為のセットはさらに、ユニバースブラウザエンジンにおいて、既存のプリズムを決定する、または新しいプリズムを仮想3D空間内に生成することと、ユニバースブラウザエンジンにおいて、データまたは3D変換データを更新された3D変換データに修正することと、ブラウザエンジンによって決定された3D変換データと更新された3D変換データを同期させることとを含む。
前述の明細書では、本発明は、その具体的実施形態を参照して説明された。しかしながら、種々の修正および変更が、本発明のより広い精神および範囲から逸脱することなく、そこに行われてもよいことが、明白となるであろう。例えば、上記に説明されるプロセスフローは、プロセスアクションの特定の順序を参照して説明される。しかしながら、説明されるプロセスアクションの多くの順序は、本発明の範囲または動作に影響を及ぼすことなく、変更されてもよい。明細書および図面は、故に、限定的ではなく、例証的意味と見なされるべきである。