(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-18
(54)【発明の名称】宣言的グラフィックスサーバを使用して画像をレンダリングすること
(51)【国際特許分類】
G06T 15/00 20110101AFI20221111BHJP
G06F 3/01 20060101ALI20221111BHJP
【FI】
G06T15/00 501
G06F3/01 510
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022500498
(86)(22)【出願日】2020-09-03
(85)【翻訳文提出日】2022-03-02
(86)【国際出願番号】 US2020049288
(87)【国際公開番号】W WO2021061371
(87)【国際公開日】2021-04-01
(32)【優先日】2019-09-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】515046968
【氏名又は名称】メタ プラットフォームズ テクノロジーズ, リミテッド ライアビリティ カンパニー
【氏名又は名称原語表記】META PLATFORMS TECHNOLOGIES, LLC
(74)【代理人】
【識別番号】110002974
【氏名又は名称】弁理士法人World IP
(72)【発明者】
【氏名】コンスタブル, ベンジャミン チャールズ
(72)【発明者】
【氏名】テイトレバウム, デーヴィッド
【テーマコード(参考)】
5B080
5E555
【Fターム(参考)】
5B080AA13
5B080AA17
5B080BA00
5B080CA01
5B080FA00
5B080GA00
5E555AA64
5E555BA02
5E555BB02
5E555BC04
5E555BE16
5E555CA44
5E555CB66
5E555CC22
5E555DB53
5E555DB57
5E555DC30
5E555FA00
(57)【要約】
一実施形態では、オペレーティングシステム内でオブジェクトをレンダリングするための方法が、オペレーティングシステム上で実行するアプリケーションから複数のデータ構造を受信することを含む。各データ構造が、オペレーティングシステムのユーザに表示されるべきボリューム空間内の1つまたは複数のオブジェクトの宣言的定義を含む。オペレーティングシステムは、各データ構造の宣言的定義を含むレンダーグラフを生成することができ、各データ構造に関連するオブジェクトの画像が、レンダーグラフとボリューム空間に対するユーザの姿勢とに基づいてレンダリングされることを引き起こすことができる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
オペレーティングシステムによって、前記オペレーティングシステム上で実行する複数のアプリケーションから複数のデータ構造を受信することであって、前記複数のデータ構造の各々が、前記オペレーティングシステムのユーザに表示されるべきボリューム空間内の1つまたは複数のオブジェクトの宣言的定義を含む、複数のデータ構造を受信することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々の前記宣言的定義を含むレンダーグラフを生成することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの姿勢とに基づいてレンダリングされることを引き起こすことと
を含む、方法。
【請求項2】
前記オペレーティングシステムによって、前記複数のアプリケーションのうちの少なくとも1つがスリープモードにある間に前記ユーザの第2の姿勢を決定することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の第2の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの前記第2の姿勢とに基づいてレンダリングされることを引き起こすことと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記複数のデータ構造が、複数のプロセス間通信(IPC)チャネルを介して前記複数のアプリケーションから受信される、請求項1または2に記載の方法。
【請求項4】
前記オペレーティングシステムが、
マイクロカーネルと、
前記複数のデータ構造の各々の前記宣言的定義を含む前記レンダーグラフを生成するように構成された宣言的グラフィックスサーバと
を含む、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、前記1つまたは複数のオブジェクトに関連するアセットへの参照を含む、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、
子ノードのリストと、
1つまたは複数のコマンドリストと、
前記1つまたは複数のオブジェクトに関連する変形と
を含む、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記ユーザの前記姿勢が、前記ユーザによって装着される1つまたは複数のセンサーによって生成された頭部追跡情報からなる、請求項1から6のいずれか一項に記載の方法。
【請求項8】
ソフトウェアを具現する1つまたは複数のコンピュータ可読非一時的記憶媒体であって、前記ソフトウェアは、実行されたとき、
オペレーティングシステムによって、前記オペレーティングシステム上で実行する複数のアプリケーションから複数のデータ構造を受信することであって、前記複数のデータ構造の各々が、前記オペレーティングシステムのユーザに表示されるべきボリューム空間内の1つまたは複数のオブジェクトの宣言的定義を含む、複数のデータ構造を受信することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々の前記宣言的定義を含むレンダーグラフを生成することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの姿勢とに基づいてレンダリングされることを引き起こすことと
を行うように動作可能である、1つまたは複数のコンピュータ可読非一時的記憶媒体。
【請求項9】
前記ソフトウェアは、実行されたとき、
前記オペレーティングシステムによって、前記複数のアプリケーションのうちの少なくとも1つがスリープモードにある間に前記ユーザの第2の姿勢を決定することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の第2の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの前記第2の姿勢とに基づいてレンダリングされることを引き起こすことと
を行うようにさらに動作可能である、請求項8に記載の媒体。
【請求項10】
前記複数のデータ構造が、複数のプロセス間通信(IPC)チャネルを介して前記複数のアプリケーションから受信される、請求項8または9に記載の媒体。
【請求項11】
前記オペレーティングシステムが、
マイクロカーネルと、
前記複数のデータ構造の各々の前記宣言的定義を含む前記レンダーグラフを生成するように構成された宣言的グラフィックスサーバと
を含み、および/または好ましくは、前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、前記1つまたは複数のオブジェクトに関連するアセットへの参照を含み、および/または好ましくは、前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、
子ノードのリストと、
1つまたは複数のコマンドリストと、
前記1つまたは複数のオブジェクトに関連する変形と
を含む、請求項8から10のいずれか一項に記載の媒体。
【請求項12】
前記ユーザの前記姿勢が、前記ユーザによって装着される1つまたは複数のセンサーによって生成された頭部追跡情報からなる、請求項8から11のいずれか一項に記載の媒体。
【請求項13】
1つまたは複数のプロセッサと、
前記プロセッサのうちの1つまたは複数に結合され、命令を含む、1つまたは複数のコンピュータ可読非一時的記憶媒体と
を備えるシステムであって、前記命令は、前記プロセッサのうちの1つまたは複数によって実行されたとき、前記システムに、
オペレーティングシステムによって、前記オペレーティングシステム上で実行する複数のアプリケーションから複数のデータ構造を受信することであって、前記複数のデータ構造の各々が、前記オペレーティングシステムのユーザに表示されるべきボリューム空間内の1つまたは複数のオブジェクトの宣言的定義を含む、複数のデータ構造を受信することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々の前記宣言的定義を含むレンダーグラフを生成することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの姿勢とに基づいてレンダリングされることを引き起こすことと
を行わせるように動作可能である、システム。
【請求項14】
前記プロセッサは、前記命令を実行したとき、
前記オペレーティングシステムによって、前記複数のアプリケーションのうちの少なくとも1つがスリープモードにある間に前記ユーザの第2の姿勢を決定することと、
前記オペレーティングシステムによって、前記複数のデータ構造の各々に関連する前記1つまたは複数のオブジェクトの1つまたは複数の第2の画像が、前記レンダーグラフと前記ボリューム空間に対する前記ユーザの前記第2の姿勢とに基づいてレンダリングされることを引き起こすことと
を行うようにさらに動作可能である、請求項13に記載のシステム。
【請求項15】
前記複数のデータ構造が、複数のプロセス間通信(IPC)チャネルを介して前記複数のアプリケーションから受信され、および/または好ましくは、前記オペレーティングシステムが、
マイクロカーネルと、
前記複数のデータ構造の各々の前記宣言的定義を含む前記レンダーグラフを生成するように構成された宣言的グラフィックスサーバと
を含み、および/または好ましくは、前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、前記1つまたは複数のオブジェクトに関連するアセットへの参照を含み、および/または好ましくは、前記レンダーグラフが1つまたは複数のノードを含み、前記1つまたは複数のノードのうちの少なくとも1つが、
子ノードのリストと、
1つまたは複数のコマンドリストと、
前記1つまたは複数のオブジェクトに関連する変形と
を含む、請求項13または14に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、コンピューティングデバイスのオペレーティングシステムに関する。
【背景技術】
【0002】
2次元(2D)オブジェクトを2D空間内に表示するように設計された従来のオペレーティングシステムは、一般に、各々、オブジェクトのそれぞれの2Dフレームバッファを作成する、アプリケーションを含む。次いで、たとえば、ウィンドウマネージャなどのシステムソフトウェアが、各アプリケーションによって作成された2Dフレームバッファをユーザのためのまとまりのある(cohesive)2Dディスプレイに置くことができる。この手法は、2Dディスプレイでは、アプリケーションによって作成される2Dフレームバッファが、一般にユーザの向きまたは視点の変化に応答して変化することを必要とされないという点で、十分であり得る。しかしながら、3次元(3D)オブジェクトを、たとえば、人工現実環境など、3D空間内に表示するように設計されたオペレーティングシステムでは、その空間内のオブジェクトは、ユーザが3D環境と対話するとき、更新された外観または視点を必要とし得る。一般的なソリューションは、各アプリケーションが、各更新に適応する新しいオブジェクト、たとえば、そのオブジェクトについての新しいフレームバッファを反復して作成することを必要とすることであり得、オペレーティングシステムは、次いで、その新しいオブジェクトを更新された3D環境に置く。しかしながら、そのようなソリューションは、アプリケーションが、更新されたコンテンツを提供するために継続的に稼働することを必要とし、さらに、新しいフレームバッファが記憶され、メモリから読み取られることを必要とするので、電力消費に関して非実用的である。作成される新しいフレームバッファの数を低減するために、そのようなソリューションは、アプリケーションがグラフィックス処理ユニットフレームバッファの単一のセットを共有することを可能にし得る。しかしながら、これは、各アプリケーションが他のアプリケーションの出力へのアクセスを有し得るので、固有のセキュリティリスクをもたらす。さらに、アプリケーションが独立してグラフィックス処理ユニットと通信するオペレーティングシステムは、稼働している間に互いに不足状態にある(starve)かまたはグラフィックス処理ユニットを奪い得る。これは、3D環境内のレイテンシを引き起こすことがある。
【発明の概要】
【0003】
特定の実施形態では、オペレーティングシステムが、グラフィックスレンダリングに関してサービスクライアントに対して宣言的(declarative)グラフィックスサーバを採用し得る。クライアントは、各々、宣言的グラフィックスサーバによってレンダリングされるべき1つまたは複数のオブジェクトを記述する(describe)、オペレーティングシステム中で稼働するアプリケーションであり得る。各アプリケーションは、宣言的グラフィックスサーバライブラリをインスタンス化し得、各アプリケーションは、宣言的グラフィックスサーバライブラリを使用して、ユーザが人工現実環境におけるオブジェクトと対話するとき、オブジェクトがユーザにどのように見えるべきであるかを記述する、オブジェクト(たとえば、2Dオブジェクト、3Dオブジェクト、ストリングなど)の宣言的定義からなるデータ構造を構築することができる。各アプリケーションは、プロセス間通信チャネルを介して宣言的グラフィックスサーバにそのアプリケーションのデータ構造(たとえば、シーングラフ)を非同期的に送信することができ、データ構造は、たとえば、画像、ビデオオブジェクト、および/またはメッシュなど、追加のアセットを含み得る。
【0004】
特定の実施形態では、宣言的グラフィックスサーバは、次いで、各アプリケーションから受信されたデータ構造からなる、n進木の形態のレンダーグラフを構築し得る。レンダーグラフにおける各ノードは、オブジェクトの宣言的定義を含み得る。宣言的グラフィックスサーバは、各ノードをトラバースすることと、グラフィックス処理ユニットに、ノードによって定義されたオブジェクトをレンダリングするように命令することと、ユーザが姿勢を変化させるかまたはさもなければオブジェクトと対話するとき、オブジェクトの外観がどのように変化することになるかを記述することとによって、レンダーグラフを処理し得る。レンダーグラフが処理されると、各アプリケーションによって記述されるオブジェクトのコンポジットが、人工現実環境においてユーザのために表示され得る。さらに、オブジェクトは、アプリケーションからの追加のデータ構造を必要とすることなしに、ユーザの姿勢に基づいて外観が変化し得る。これは、各アプリケーションが、オブジェクトを記述するデータ構造を宣言的グラフィックスサーバに提供することができ、したがって、宣言的グラフィックスサーバが、グラフィックス処理ユニットに、アプリケーションに代わってオブジェクトをレンダリングするように命令することができるという点で、最小電力消費を提供する。したがって、アプリケーションは、いくつかのイベントが行われ得るまで、低電力モード(たとえば、スリープモード)に入れられ得る。
【0005】
本明細書で説明される主題の発明的態様は、オペレーティングシステムによって、オペレーティングシステム上で実行する複数のアプリケーションから複数のデータ構造を受信することであって、複数のデータ構造の各々が、オペレーティングシステムのユーザに表示されるべきボリューム空間内の1つまたは複数のオブジェクトの宣言的定義を含む、複数のデータ構造を受信することと、オペレーティングシステムによって、複数のデータ構造の各々の宣言的定義を含むレンダーグラフを生成することと、オペレーティングシステムによって、複数のデータ構造の各々に関連する1つまたは複数のオブジェクトの1つまたは複数の画像が、レンダーグラフとボリューム空間に対するユーザの姿勢とに基づいてレンダリングされることを引き起こすこととを行うためのシステム、方法、およびコンピュータ可読非一時的記憶媒体において具現され得る。
【0006】
開示される実施形態のうちの1つまたは複数では、システム、方法、およびコンピュータ可読非一時的記憶媒体は、オペレーティングシステムによって、複数のアプリケーションのうちの少なくとも1つがスリープモードにある間にユーザの第2の姿勢を決定することと、オペレーティングシステムによって、複数のデータ構造の各々に関連する1つまたは複数のオブジェクトの1つまたは複数の第2の画像が、レンダーグラフとボリューム空間に対するユーザの第2の姿勢とに基づいてレンダリングされることを引き起こすこととをさらに含む。
【0007】
開示される実施形態のうちの1つまたは複数では、複数のデータ構造は、複数のプロセス間通信(IPC)チャネルを介して複数のアプリケーションから受信される。
【0008】
開示される実施形態のうちの1つまたは複数では、オペレーティングシステムは、マイクロカーネルと、複数のデータ構造の各々の宣言的定義を含むレンダーグラフを生成するように構成された宣言的グラフィックスサーバとを含む。
【0009】
開示される実施形態のうちの1つまたは複数では、レンダーグラフは1つまたは複数のノードを含み、1つまたは複数のノードのうちの少なくとも1つは、1つまたは複数のオブジェクトに関連するアセットへの参照を含む。
【0010】
開示される実施形態のうちの1つまたは複数では、レンダーグラフは1つまたは複数のノードを含み、1つまたは複数のノードのうちの少なくとも1つは、子ノードのリストと、1つまたは複数のコマンドリストと、1つまたは複数のオブジェクトに関連する変形(transform)とを含む。
【0011】
開示される実施形態のうちの1つまたは複数では、ユーザの姿勢は、ユーザによって装着される1つまたは複数のセンサーによって生成された頭部追跡情報からなる。
【0012】
本明細書で開示される実施形態は例にすぎず、本開示の範囲はそれらに限定されない。特定の実施形態は、本明細書で開示される実施形態の構成要素、要素、特徴、機能、動作、またはステップのすべてを含むか、いくつかを含むか、またはいずれをも含まないことがある。本発明による実施形態は、特に、方法、記憶媒体、システムおよびコンピュータプログラム製品を対象とする添付の特許請求の範囲で開示され、1つの請求項カテゴリー、たとえば、方法において述べられた任意の特徴は、別の請求項カテゴリー、たとえば、システムにおいても請求され得る。添付の特許請求の範囲における従属関係または参照は、形式的理由で選定されるにすぎない。ただし、前の請求項への意図的な参照(特に複数の従属関係)から生じる主題も請求され得、その結果、請求項とその特徴との任意の組合せが、開示され、添付の特許請求の範囲で選定された従属関係にかかわらず請求され得る。請求され得る主題は、添付の特許請求の範囲に記載の特徴の組合せだけでなく、特許請求の範囲における特徴の任意の他の組合せをも含み、特許請求の範囲において述べられた各特徴は、特許請求の範囲における任意の他の特徴または他の特徴の組合せと組み合わせられ得る。さらに、本明細書で説明または示される実施形態および特徴のいずれも、別個の請求項において、ならびに/あるいは、本明細書で説明もしくは示される任意の実施形態もしくは特徴との、または添付の特許請求の範囲の特徴のいずれかとの任意の組合せで請求され得る。
【0013】
本発明の実施形態は、人工現実システムを含むか、または人工現実システムに関連して実装され得る。人工現実は、ユーザへの提示の前に何らかの様式で調整された形式の現実であり、これは、たとえば、仮想現実(VR)、拡張現実(AR)、複合現実(MR)、ハイブリッド現実、あるいはそれらの何らかの組合せおよび/または派生物を含み得る。人工現実コンテンツは、完全に生成されたコンテンツ、またはキャプチャされたコンテンツ(たとえば、現実世界の写真)と組み合わせられた生成されたコンテンツを含み得る。人工現実コンテンツは、ビデオ、オーディオ、触覚フィードバック、またはそれらの何らかの組合せを含み得、それらのいずれも、単一のチャネルまたは複数のチャネルにおいて提示され得る(観察者に3次元効果をもたらすステレオビデオなど)。さらに、いくつかの実施形態では、人工現実は、たとえば、人工現実におけるコンテンツを作成するために使用される、および/または人工現実において使用される(たとえば、人工現実におけるアクティビティを実施する)アプリケーション、製品、アクセサリ、サービス、またはそれらの何らかの組合せに関連し得る。人工現実コンテンツを提供する人工現実システムは、ホストコンピュータシステムに接続されたヘッドマウントディスプレイ(HMD)、スタンドアロンHMD、モバイルデバイスまたはコンピューティングシステム、あるいは、1人または複数の観察者に人工現実コンテンツを提供することが可能な任意の他のハードウェアプラットフォームを含む、様々なプラットフォーム上に実装され得る。
【図面の簡単な説明】
【0014】
【
図1A】2次元(2D)ディスプレイの場合の3次元(3D)レンダリングとのユーザ対話の例示的な使用事例を示す図である。
【
図1B】2次元(2D)ディスプレイの場合の3次元(3D)レンダリングとのユーザ対話の例示的な使用事例を示す図である。
【
図1C】3次元(3D)空間内の3Dレンダリングとのユーザ対話の例示的な使用事例を示す図である。
【
図1D】3次元(3D)空間内の3Dレンダリングとのユーザ対話の例示的な使用事例を示す図である。
【
図2】宣言的グラフィックスサーバが動作する例示的なシステム環境を示す図である。
【
図3】レンダーグラフを生成するための例示的なプロセスを示す図である。
【
図4】オブジェクトがボリューム空間においてレンダリングされることを引き起こすための例示的な方法を示す図である。
【
図5】例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【0015】
図1Aおよび
図1Bは、2次元(2D)ディスプレイの場合の3次元(3D)レンダリングとのユーザ対話の例示的な使用事例を示す。
図1Aに示されている例では、オペレーティングシステムのユーザ110が、オブジェクト100Aに関して左位置からオブジェクト100Aの3Dレンダリングを観察している。(たとえば、HMDのスクリーンなどの)2Dスクリーン100B上にレンダリングされ、表示される画像は、特定の向きにおいてユーザ110に表示される。
図1Bでは、ユーザ110は姿勢を変化させており、オブジェクト100Aに関して右位置からオブジェクト100Aの3Dレンダリングを観察している。しかしながら、2Dスクリーン100B上にレンダリングされ、表示される画像は、その画像が
図1Aに示されている左位置から前に表示されたのと同じ位置に表示される。すなわち、2Dスクリーン100B上に表示されるオブジェクト100Aは、ユーザの110の姿勢の変化に鑑みて向きを変化させない。これは、2次元(2D)オブジェクトを2D空間内に表示するように設計された従来のオペレーティングシステムによくあることであり得、従来のオペレーティングシステムは、各々、オブジェクトのそれぞれの2Dフレームバッファを作成する、アプリケーションを採用する。さらに、そのようなオペレーティングシステムは、たとえば、ウィンドウマネージャなどのシステムソフトウェアを採用し得、次いで、システムソフトウェアは、各アプリケーションによって作成された2Dフレームバッファをユーザのためのまとまりのある2Dディスプレイに置くことができる。この手法は、2Dディスプレイでは、アプリケーションによって作成される2Dフレームバッファが、一般にユーザの向きまたは視点の変化に応答して変化することを必要とされないという点で、十分であり得る。
【0016】
図1Cおよび
図1Dは、3次元(3D)空間内の3Dレンダリングとのユーザ対話の例示的な使用事例を示す。
図1Cに示されている例では、オペレーティングシステムのユーザ110が、オブジェクト100Cに関して左位置から3Dオブジェクト100Cを観察している。ユーザ110のためにレンダリングされ、表示される3D画像100Dは、ユーザ110の視点を考慮する。すなわち、3Dオブジェクト100Cは、ユーザ110が3D環境において3Dオブジェクト100Cを観察し得るように3Dオブジェクト100Cが見えるように表示される。
図1Dでは、ユーザ110は姿勢を変化させており、3Dオブジェクト100Cに関して右位置から3Dオブジェクト100Cを観察している。ここで、ユーザ110のためにレンダリングされ、表示される3D画像100Dは、同じく、3D環境におけるユーザ110の視点を考慮する。一般に、3次元(3D)オブジェクトを、たとえば、人工現実環境など、3D空間内に表示するように設計されたオペレーティングシステムは、ユーザが3D環境と対話するとき、更新された外観または視点を必要とし得る。1つのソリューションは、各アプリケーションが、各更新に適応する新しいオブジェクトを反復して作成することを必要とすることであり得、オペレーティングシステムは、次いで、その新しいオブジェクトを更新された3D環境に置く。しかしながら、そのようなソリューションは、アプリケーションが、更新されたコンテンツを提供するために継続的に稼働することを必要とし、さらに、新しいフレームバッファが記憶され、メモリから読み取られることを必要とするので、電力消費に関して非実用的である。さらに、独立してグラフィックス処理ユニットと通信するアプリケーションは、稼働している間に互いに不足状態にあるかまたはグラフィックス処理ユニットを奪い得る。これは、3D環境内のレイテンシを引き起こすことがある。さらに、そのようなソリューションは、アプリケーションが、プロセス間のメモリアクセスおよび/またはデータ転送を低減するためにそのアプリケーションのフレームバッファを同じバッファに書き込むことを可能にし得、これは、各アプリケーションが別のアプリケーションのコンテンツへのアクセスを有し得るので、固有のセキュリティリスクをもたらす。
【0017】
図2は、宣言的グラフィックスサーバが動作する例示的なシステム環境を示す。
図2に示されている例では、システム環境120は、(本明細書ではまとめて「アプリケーション210」と呼ばれる)アプリケーション210-1~210-Nと、宣言的グラフィックスサーバ(DGS:declarative graphics server)230と、マイクロカーネル260とを含む。各アプリケーション210は、DGSライブラリ220を含む。アプリケーション210は、各アプリケーションがそのアプリケーション自体のプロセス200内で実行するように、(本明細書ではまとめて「プロセス200」と呼ばれる)プロセス200-1~200-Nにおいて実行する。DGS230およびマイクロカーネル260は、オペレーティングシステム(OS)280内で動作する。他の実施形態では、システム環境120は、オペレーティングシステムを管理するのに好適な追加の構成要素、より少数の構成要素、または構成要素の任意の組合せを含み得る。
【0018】
OS280は、ハードウェアおよびソフトウェアリソースを管理し、システム環境120のアプリケーション210のための共通サービスを提供する、システムソフトウェアである。OS280は、システム全体による最小電力消費を維持しながら、画像が3Dまたは「ボリューム」空間内にリアルタイムで人工現実(たとえば、VR、AR、MRなど)のためにレンダリングされ得るシステムをサポートする。
図2に示されている実施形態では、OS280は、OS280を実装するために必要とされる最小ソフトウェアからなるマイクロカーネル260を採用する。
図2に示されている実施形態では、OS280は、カーネル空間において低レベルのアドレス空間管理とスレッド管理とプロセス間通信(IPC)とを実施するためのマイクロカーネル260を含む。OS280の他の機能(たとえば、デバイスドライバ、ファイルシステム、I/Oデバイスなど)は、ユーザ空間において管理され得る。マイクロカーネル260アーキテクチャは、個々の構成要素が、必要とされる場合、交換、再ロード、および/または修正され得る、増加されたモジュラリティをOS280に与える。さらに、OS280のモジュラー構造は、OS280内のシステムセキュリティを増加させ、必要なときにのみ構成要素が使用されるので、システム全体の電力消費を減少させることができる。さらに、モジュラー構造は、ユーザ空間中で稼働する構成要素(たとえば、アプリケーション210)の障害が必ずしもOS280をクラッシュさせるとは限らないので、システムクラッシュを防ぎ得る。時々、本開示は、マイクロカーネルオペレーティングシステムのコンテキストにおいて実装される様々なシステムおよび方法に言及するが、説明されるシステムおよび方法は、異なるカーネル構成をもつオペレーティングシステムに適用可能であることを理解されたい。一実施形態では、OS280は、OS280全体がカーネル空間において動作するモノリシックカーネルアーキテクチャを採用し得る。別の実施形態では、OS280は、マイクロカーネル設計とモノリシックカーネル設計の両方の要素からなるハイブリッドカーネルを採用し得る。
【0019】
アプリケーション210は、ボリューム空間においてユーザのためにレンダリングされるべきオブジェクト(たとえば、人工現実オブジェクト)を記述する、OS280中で稼働するクライアントである。アプリケーション210は、たとえば、2Dオブジェクト、3Dオブジェクト、およびストリングなど、オブジェクトを記述する宣言的モデルからなるデータ構造(たとえば、アレイ、リスト、n進木など)を含み得る。たとえば、1つのアプリケーションは、ユーザが、ボリューム空間内でキオスクと対話し得るように、ユーザのためにレンダリングされるべきキオスクの3Dモデルを記述し得る。アプリケーション210は、アプリケーション210のレンダリングが他のアプリケーションからの出力と共存することになり、アプリケーション210のレンダリングをOS280プロセスによって管理されることになるという点で、非排他的である。マイクロカーネル260アーキテクチャ内のものなど、一実施形態では、OS280中で稼働するアプリケーション210は、ユーザ対話から切り離されたバックグラウンドプロセス(たとえば、デーモンまたはマイクロカーネルサーバ)としてユーザ空間において実行し得る。別の実施形態では、アプリケーション210は、ユーザに表示されるユーザインターフェースなどを介して、ユーザ対話を受信し得、その対話に基づいてオブジェクトのデータ構造において記述されるオブジェクトを修正することができる。
【0020】
一実施形態では、システム環境120におけるアプリケーション210は、異なるパブリッシャー(publisher)によって提供され得、ここで、各アプリケーション210は、異なる機能性をユーザに提供する。たとえば、方向アプリケーションは、ユーザがたどることになるラインによって指定された仮想経路を表示することによって、(たとえば、都市またはビジネス施設を通して)方向をユーザに提供し得る。仮想経路は、ユーザが(たとえば、スタンドアロンHMDのLCDスクリーンなどの)ディスプレイデバイスを通して現在観察しているもののARオーバーレイとして、ユーザに提示され得る。別の例では、スケジューリングアプリケーションは、ユーザが、しきい値時間期間の間、バス停留所または駅に近接していること、あるいはバス停留所または駅を見ていることに応答して、公共輸送についてのスケジュールをユーザに提供し得る。スケジューリング情報は、スケジューリング情報がユーザのビューを妨害しないようにディスプレイデバイスの下側部分内でユーザに表示され得る。アプリケーション210の他の例は、メッセージングアプリケーション、気象アプリケーション、ビジネスまたはサービスのためのレビューアプリケーション、ユーザのバイオメトリクスを表示する健康関連アプリケーションなどを含むことができる。一実施形態では、各アプリケーション210は、様々なパブリッシャーからソーシングされ得る。別の実施形態では、システム環境120における各アプリケーション210は、単一のプロプライエタリパブリッシャーからソーシングされ得る。また別の実施形態では、システム環境120におけるアプリケーション210は、上記で説明された複数のパブリッシャー、単一のパブリッシャー、またはパブリッシャーの任意の組合せからソーシングされ得る。
【0021】
一実施形態では、アプリケーション210中に含まれているデータ構造は、ユーザに表示されるべき写真またはビデオなど、様々なアセットを記述し得る。たとえば、アプリケーション210は、各アプリケーション210から2Dオブジェクトと3Dオブジェクトとのコンポジットレンダリング中に含まれるべきビデオオブジェクトを記述し得る。アプリケーション210は、ビデオオブジェクトをストリームにシリアライズするか、またはさもなければ符号化し得、したがって、DGS230は、(たとえば、IPCチャネル240を介して)ストリームを受信し、ユーザへの提示のためにビデオオブジェクトをデシリアライズするか、またはさもなければ復号し得る。一実施形態では、アプリケーション210は、さらに、ビデオに関連するコマンド(たとえば、開始、停止、シークなど)をDGSに送り得る。たとえば、ユーザは、ビデオオブジェクトとともにユーザに表示され得るアプリケーションに関連するコマンドを、ユーザインターフェースを介して生成し得る。DGSは、アプリケーション210からコマンドを受信し、それに応じてGPUと通信して、表示のためにビデオオブジェクトのフレームをキューイングし得る。このようにして、アプリケーション210は、2Dオブジェクトおよび3Dオブジェクトに加えて、表示のために様々なメディアアセットを記述することができる。
【0022】
各アプリケーション210は、アプリケーション210自体のプロセス200を含む。各プロセス200は、1つまたは多くのスレッドによって実行されているアプリケーション210のインスタンスである。インスタンスは、アプリケーション210のためのプログラムコードとそのアクティビティとを含んでいる。各プロセス200は、命令をコンカレントに実行する実行の複数のスレッドからなり得る。アプリケーション210は、命令の受動的集合であるが、プロセス200は、それらの命令の実際の実行である。システム環境120において実行する各プロセス200は、他のプロセス200から切り離される。たとえば、
図2に示されているプロセス200-1とプロセス200-2とは、OS280においてコンカレントに実行するが、それらのプロセスが、実行している間にプログラムコードまたは他のそのようなアプリケーション210リソースを共有しないように、互いから切り離されたままであり得る。
【0023】
一実施形態では、各アプリケーション210は、そのアプリケーションがボリューム空間において(たとえば、人工現実において)ユーザに表示されるべき2Dオブジェクトおよび3Dオブジェクトの宣言的定義を構築するために使用し得る、DGSライブラリ220を含む。宣言的定義は、宣言的プログラミングパラダイム(たとえば、HTML、XML、CSSなど)を使用してオブジェクトの2Dモデルおよび3Dモデルを表し得、宣言的プログラミングパラダイムは、DGS230へのその制御フローを記述することなしに計算の論理を表現する。すなわち、アプリケーションは、命令型プログラミングパラダイムの関数、メソッド、または他のリソースを通して(たとえば、C++またはJavaScriptを使用して)ユーザのためにオブジェクトを描画するのではなく、オブジェクトがどのようにユーザに見えることになるかを宣言的に記述するために、DGSライブラリ220を使用し得る。OS280中で稼働するアプリケーション210は、信頼できるレンダリング特性を維持しながら電力消費を最小限に抑えるために宣言的グラフィックを使用する。一実施形態では、DGSライブラリ220は、構成データ、サブルーチン、クラス、値、タイプ仕様など、不揮発性リソースの集合を含み得、アプリケーション210は、不揮発性リソースの集合を使用して、それらのデータ構造を、それらが処理され得るように、DGS230によって予想されるデータ構造フォーマットまたはスキーマにマッピングし得る。
【0024】
IPCチャネル240は、ハンドルを使用して参照される2つのエンドポイントをもつ双方向のバッファされた通信チャネルである。各アプリケーション210は、アプリケーション210自体のそれぞれのIPCチャネル240を使用してDGS230と通信することができる。特に、各アプリケーション210は、IPCチャネル240を使用して、オブジェクトの宣言的定義を含むデータ構造(たとえば、n進木データ構造)をDGS230に送信し得る。アプリケーション210は、データ構造が表示のために必要とされるとき、またはデータ構造内のデータが(たとえば、ユーザによって)修正されたことに応答して、非同期的にデータ構造をDGS230に送信し得る。一実施形態では、IPCチャネル240は、バイトサイズのメッセージとハンドルのセットとの転送を可能にする。他の実施形態では、IPCチャネルは、転送のためにより大きい、またはより小さいメッセージサイズを可能にし得る。
【0025】
一実施形態では、DGS230は、ユーザのためにオブジェクトをレンダリングするためにOS280によって使用されるサーバである。特に、DGS230は、(たとえば、IPCチャネル240を介して)システム環境120において各アプリケーション210から2Dオブジェクトおよび3Dオブジェクトを記述するデータ構造を受信することができ、受信されたデータ構造のコンポジットを表すために、メモリにおける構造、または「レンダーグラフ」を生成することができる。DGS230は、レンダーグラフを処理し、グラフィックス処理ユニット(GPU)に、アプリケーション210に代わってレンダーグラフにおいて記述された2Dオブジェクトおよび3Dオブジェクトをレンダリングするように命令し得る。DGS230は、各アプリケーション210がGPUを制御することを試みることを必要とするのではなく、直接GPUと通信すること(たとえば、GPUにオブジェクトをレンダリングするように指令すること)によって、システム環境120全体の電力消費を最小限に抑える。さらに、レンダーグラフは、2Dオブジェクトおよび3Dオブジェクトがボリューム環境において複数の視点からユーザにどのように見えるべきであるかという宣言的定義からなるので、DGS230は、レンダーグラフを生成し、一度記憶することができる。すなわち、レンダーグラフは、ユーザが姿勢を変化させたこと(たとえば、歩くこと、かがむこと、頭部を動かすこと/傾けることなど)に応答した、アプリケーション210からの追加のデータ構造を必要としない。ここで、アプリケーション210またはプロセス200は、たとえば、アプリケーション210またはプロセス200がしきい値時間期間の間非アクティブであった場合、低電力モードに置かれ得る。これは、さらに、低電力モードにあるアプリケーション210がサイクルを消費しないという点でシステム環境120全体の電力消費を最小限に抑える。アプリケーション210は、いくつかのイベントが行われ得るまで、低電力モードのままであり得る。アプリケーション210は、いくつかのイベントに応答してデータ構造をDGS230に送信することを再開するために低電力モードを出得る。一例では、アプリケーション210は、アプリケーション210が3Dオブジェクトの外観を向上させ得るように、ユーザが3Dオブジェクトの視野に入ったことに応答して、低電力モードを出るか、または「起動」し得る。別の例では、電子メールアプリケーションなどのアプリケーション210は、電子メールなど、ユーザに表示されるべきネットワーク上でのメッセージを受信したことに応答して起動し得る。一実施形態では、アプリケーション210は、アプリケーション210のデータ構造内のデータを修正するユーザ入力を受信したことに応答して起動し得る。
【0026】
DGS230は、アプリケーション210から受信された各データ構造からなるレンダーグラフを生成する。一実施形態では、受信された各データ構造は、n進木データ構造フォーマットのものある。別の実施形態では、DGS230は、アプリケーション210から受信されたデータ構造中に含まれるデータに基づいてn進木データ構造を構築することができる。たとえば、DGS230は、受信されたデータ構造から1つまたは複数のオブジェクトの宣言的定義を抽出し、1つまたは複数のオブジェクトの各々が、そのオブジェクト自体のノードによって表されるように、宣言的定義を含むn進木データ構造を構築し得る。DGS230は、n進木データ構造が、GPUによってレンダリングされるべきオブジェクトの階層を形成するように、n進木データ構造のコンポジットとしてレンダーグラフをアセンブルすることができる。
【0027】
レンダーグラフにおける各n進木データ構造は、ノードからなる。たとえば、DGS230は、アプリケーション210から受信されたデータ構造において記述される1つのオブジェクトを、ルートノードによって記述されるように指定し、オブジェクトを記述する様々な属性をルートノードの子ノードに指定し得る。たとえば、ルートノードが、概して、家の3Dモデルを記述し得、ルートノードの各子ノードが、ドアおよび窓など、家の追加の属性を記述し得る。一実施形態では、各ノードは、子ノードのリストと、コマンドリストと、ノードによって記述されるオブジェクトに関連する変形(transformation)データとを含む。子ノードの各リストは、メモリに記憶された左の子へのポインタと右の子へのポインタとを含み得る。DGS230は、n進木データ構造によって記述される1つまたは複数のオブジェクトがレンダリングされるまで、n進木データ構造を含む各左の子ノードおよび右の子ノードにアクセスし、その子ノードをレンダリングするために子ノードのリストを使用し得る。各コマンドリストは、ノードによって記述されるオブジェクトを描画するための命令を含み得る。一実施形態では、DGS230は、GPUに、GPUがオブジェクト(たとえば、2Dオブジェクト、3Dオブジェクト、ストリングなど)をどのように描画することになるかに関して命令するために、コマンドリスト中に含まれる様々な関数およびメソッドを使用し得る。コマンドリストは、アプリケーション210によって、(たとえば、DGSライブラリを使用して)メソッドコールにおいてDGS230に送信され得るデータブロブにシリアライズされ得る。DGS230は、次いで、レンダーグラフにおける各ノードを処理するとき、コマンドリストをデシリアライズし得る。各ノード中に含まれる変形データは、GPUに、ユーザの姿勢に応答してオブジェクトの外観がどのように変形することになるかを示す(たとえば、並進およびスケーリングデータ)。たとえば、ユーザがボリューム空間において3Dオブジェクトにより近くに移動する場合、変形データは、GPUに、ユーザが3Dオブジェクトにより近いという錯覚を伝達するために3Dオブジェクトのスケールを増加させるように命令し得る。
【0028】
DGS230は、各ルートノードがそのルートノードの子ノードの前にレンダリングされるような階層的順序でレンダーグラフを処理することができる。一実施形態では、DGS230は、レンダーグラフにわたる深さ優先トラバーサル(depth-first traversal)を使用して、レンダーグラフを処理し得る。各ノードは、そのノードが記述するオブジェクトをレンダリングするために、そのノードの宣言的データが使用され得るように処理され得る。たとえば、DGS230は、GPUによって描画されるべき矩形の各コーナーを定義するパラメータを有する「drawRect()」関数を含むコマンドリストを有するノードを処理し得る。DGS230は、ノードが処理されているときにこの関数を呼び出し、GPUがパラメータに従ってユーザのために矩形をレンダリングし得るようにパラメータをGPUに受け渡し得る。同様に、DGS230は、オブジェクトがユーザのためにレンダリングされるまで、ノードについてのコマンドリスト中に含まれる任意の他の関数を呼び出し得る。さらに、ノードを処理しながら、DGS230は、ノード中に含まれる変形データを使用して、ユーザの姿勢の変化に応答して、ノードによって記述されるオブジェクトがどのように変形することになるかに関して、GPUに命令することができる。レンダーグラフ処理は、
図3に関してさらに詳細に説明される。
【0029】
一実施形態では、GPUは、DGS230によって生成されたレンダーグラフに基づいてユーザに表示されるべき各オブジェクトをレンダリングし得る。GPUは、並列処理アーキテクチャを使用してオブジェクト(たとえば、2D、3D、ストリングなど)をレンダリングすることができる。一実施形態では、GPUは、(たとえば、コマンドリストを介して)DGS230から、GPUに、オブジェクトをどのように描画すべきかを命令するコマンドを受信することができる。たとえば、GPUは、頂点のリストを含む多角形を記述する描画コマンドをDGS230から受信し得る。リスト中の各頂点は、(たとえば、x、y、およびz座標を含む)ボリューム空間におけるポイントを表し得る。GPUは、多角形の輪郭が完成するまで、各頂点をプロットし、輪郭を、ユーザのために表示され得るピクセルに変換することによって、多角形をラスタライズし得る。さらに、GPUは、ユーザの姿勢に関して多角形を変形させ得る(たとえば、移動すること、回転することなど)。GPUは、レンダーグラフにおける各ノードについてDGS230によって提供される変形データに基づいて変形を実施することができる。
【0030】
図3は、レンダーグラフを生成するための例示的なプロセスを示す。
図3に示されている例では、アプリケーション210-1および210-2は、両方とも、拡張現実(AR)環境内でユーザのためにレンダリングされるべき2Dオブジェクトと3Dオブジェクトとストリングとを記述するn進木データ構造を含む。アプリケーション210-1は、ノードA~Fからなるn進木データ構造を含む。アプリケーション210-2は、ノードG~Jからなるn進木データ構造を含む。DGS230は、レンダーグラフ300を含む。レンダーグラフ300では、アプリケーション210-1および210-2から受信されたn進木データ構造は、ノードAおよびノードGが、それぞれ、ルートノード310の左の子および右の子であるように、ルートノード310に子としてリンクされている。一実施形態では、ルートノード310は、オブジェクトがレンダリングされることになるボリューム空間を記述するためにOS280によって提供され得る。たとえば、ルートノード310は、2Dオブジェクトと3Dオブジェクトとストリングとが描画され得る仮想エリアを提供する空の3D空間を定義し得る。別の実施形態では、ルートノード310は、レンダーグラフ300が構築されたとき、DGS230によって生成され得る。
【0031】
図3に示されている例では、アプリケーション210-1のn進木データ構造は、2Dオブジェクトと3Dオブジェクトとストリングとのコンポジションを含む、ビジネス施設においてユーザに表示されるべき情報キオスクの3Dモデルを記述し得る。ルートノードAは、キオスクの一般的な3Dフレームを記述し、(たとえば、コマンドリスト中で記述されるように)その形状を定義するボリューム空間内のポイントを含むキオスクの態様を定義し、(たとえば、変形データによって記述されるように)ユーザの姿勢の変化に応答してキオスクの外観がどのように変化することになるかを記述し、(たとえば、子ノードのリストによって記述されるように)キオスク上に含まれ得る追加のオブジェクトのリストを含み得る。同様に、ノードB(すなわち、ルートノードAの左の子)は、ユーザが、ビジネス施設に関連する情報にアクセスするためにユーザインターフェースと対話し得るように、情報キオスクの前面に配置されるべき2Dユーザインターフェースを記述し得る。ノードBはまた、ユーザインターフェースの形状を定義し、ユーザの姿勢の変化に応答してユーザインターフェースの外観がどのように変化することになるかを記述し、ユーザインターフェース上にレンダリングされ得る追加のオブジェクトのリストを含み得る。ノードD(すなわち、ノードBの左の子)は、ノードBによって記述される2Dユーザインターフェースの一部分上に配置されるべきビジネス施設の3Dマップを定義し得る。ここで、ノードDは、ユーザインターフェースと同様の形状を定義し、ユーザの、姿勢の変化に応答して3Dマップの外観がどのように変化することになるかを記述し得る。しかしながら、ノードDは、3Dマップ上に含めるべき追加のオブジェクトを、その子ノードの不在によって示されるように、ポイントしない。同様に、ノードEは、ノードBによって記述される2Dユーザインターフェース上に配置されるべきカーディナル方向を表示する2Dコンパスを記述し得るが、2Dコンパス上に含めるべき追加のオブジェクトを、その子ノードの不在を仮定すれば、定義しない。さらに、ノードCは、情報キオスクの前面の上側部分上に配置されるべき2D表面を定義し得、ノードDは、ノードCによって記述される2D表面上に配置されるべきテキスト「情報キオスク」を含むストリングを定義し得る。
図3に示されている例では、アプリケーション210-1は、IPCチャネル240-1を介してDGS230にn進木データ構造を送信するためにDGSライブラリ220を使用することができる。
【0032】
図3に示されている例では、アプリケーション210-2のn進木データ構造は、上記で説明された情報キオスクに近接したビジネス施設のユーザに表示されるべきインベントリキオスクの3Dモデルを記述し得る。情報キオスクと同様に、インベントリキオスクは、ボリューム空間においてユーザのために表示される2Dオブジェクトと3Dオブジェクトとのコンポジションを含み得る。ルートノードGは、ルートノードAと同様の様式でキオスクの一般的な3Dフレームを記述し得る。ノードI(ルートノードGの右の子)は、ユーザが、ビジネス施設におけるアイテムのインベントリに関連する情報にアクセスするためにユーザインターフェースと対話し得るように、インベントリキオスクの前面に配置されるべき2Dユーザインターフェースを記述し得る。ノードBと同様に、ノードIはまた、(たとえば、コマンドリスト中で記述されるように)ユーザインターフェースの形状を定義し、(たとえば、変形データによって記述されるように)ユーザの姿勢の変化に応答してユーザインターフェースの外観がどのように変化することになるかを記述し得る。しかしながら、ノードIは、2Dユーザインターフェース上に含めるべき追加のオブジェクトを、その子ノードの不在によって示されるように、ポイントしない。ノードH(ルートノードGの左の子)は、インベントリキオスクの前面の上側部分上に配置されるべき2D表面を定義し得、ノードJは、ノードHによって記述される2D表面上に配置されるべきテキスト「インベントリキオスク」を含むストリングを定義し得る。
図3に示されている例では、アプリケーション210-2は、IPCチャネル240-2を介してDGS230にn進木データ構造を送信するためにDGSライブラリ220を使用することができる。
【0033】
DGS230は、アプリケーション210-1および210-2からn進木データ構造を受信し、n進木データ構造とルートノード310の両方からなるレンダーグラフ300を構築することができる。
図3に示されているように、DGS230は、レンダーグラフ300を構築するとき、ルートノード310の左の子としてルートノードAを配置することができる。同様に、DGS230は、ルートノード310の右の子としてルートノードGを配置することができる。レンダーグラフ300が構築され、メモリに記憶されると、DGS230は、深さ優先順序においてレンダーグラフ300における各ノードを処理することができる。DGS230は、ルートノード310を処理することによって開始することができる。特に、DGS230は、ルートノード310から、その子ノード(たとえば、ノードAおよびノードG)のリストとその変形データとそのコマンドリストとを含む宣言的データを抽出することができる。DGS230は、GPUに、ルートノード310によって記述される3D空間がユーザにどのように見えることになるかに関して命令するために、コマンドリスト中のコマンドを使用することができる。DGS230は、GPUに、ユーザが空間全体にわたって移動したとき、ルートノード310によって記述される3D空間の外観がどのように変化することになるかに関して命令するために、ルートノード310中に含まれる変形データを使用することができる。DGS230は、DGS230が、レンダーグラフ300を処理し続けることができるようにノードAへのポインタを識別するために、ルートノード310中に含まれる子リストを使用することができる。DGS230は、メモリ中のノードAの位置を特定し、そのノード中に含まれる宣言的データを処理し始めるために、ノードAへのポインタを使用することができる。特に、DGS230は、GPUに、情報キオスクがユーザにどのように見えることになるかに関して命令するために、コマンドリスト中のコマンドを使用し得る。DGS230は、GPUに、ユーザが姿勢を変化させたとき、情報キオスクの外観がどのように変化することになるかに関して命令するために、ノードA中に含まれる変形データを使用することができる。さらに、DGS230は、メモリ中のノードBへのポインタとノードCへのポインタとを識別するために、ノードA中に含まれる子リストを使用することができる。次に、DGS230は、上記で説明されたように、ルートノード310およびノードAと同様にノードBを処理し始めるために(ノードA中に含まれる)ノードBへのポインタを使用し得る。DGS230は、次いで、レンダーグラフ300が完全に処理され、GPUが、3D空間内に情報キオスクとインベントリキオスクとのコンポジット画像をレンダリングするまで、ノードD、E、C、F、G、H、J、およびIを処理することによってレンダーグラフ300をトラバースし続け得る。
【0034】
図4は、オブジェクトがボリューム空間においてレンダリングされることを引き起こすための例示的な方法400を示す。本方法は、ステップ410において開始し得、オペレーティングシステムが、オペレーティングシステム上で実行するアプリケーションから複数のデータ構造を受信する。各データ構造が、オペレーティングシステムのユーザに表示されるべきボリューム空間内のオブジェクトの宣言的定義を含む。ステップ420において、オペレーティングシステムは、各データ構造において受信された宣言的定義を含むレンダーグラフを生成する。ステップ430において、オペレーティングシステムは、各データ構造に関連するオブジェクトの画像がレンダリングされることを引き起こす。オブジェクトは、レンダーグラフとボリューム空間に対するユーザの姿勢とに基づいてレンダリングされる。
【0035】
特定の実施形態は、適切な場合、
図4の方法の1つまたは複数のステップを繰り返し得る。本開示は、
図4の方法の特定のステップを、特定の順序で行われるものとして説明し、示すが、本開示は、
図4の方法の任意の好適なステップが任意の好適な順序で行われることを企図する。その上、本開示は、
図4の方法の特定のステップを含む、オブジェクトがボリューム空間においてレンダリングされることを引き起こすための例示的な方法を説明し、示すが、本開示は、適切な場合、
図4の方法のステップのすべてを含むか、いくつかを含むか、またはいずれも含まないことがある、任意の好適なステップを含む、オブジェクトがボリューム空間においてレンダリングされることを引き起こすための任意の好適な方法を企図する。さらに、本開示は、
図4の方法の特定のステップを行う特定の構成要素、デバイス、またはシステムを説明し、示すが、本開示は、
図4の方法の任意の好適なステップを行う任意の好適な構成要素、デバイス、またはシステムの任意の好適な組合せを企図する。
【0036】
図5は、例示的なコンピュータシステム500を示す。特定の実施形態では、1つまたは複数のコンピュータシステム500は、本明細書で説明または示される1つまたは複数の方法の1つまたは複数のステップを実施する。特定の実施形態では、1つまたは複数のコンピュータシステム500は、本明細書で説明または示される機能性を提供する。特定の実施形態では、1つまたは複数のコンピュータシステム500上で稼働しているソフトウェアは、本明細書で説明または示される1つまたは複数の方法の1つまたは複数のステップを実施するか、あるいは本明細書で説明または示される機能性を提供する。特定の実施形態は、1つまたは複数のコンピュータシステム500の1つまたは複数の部分を含む。本明細書では、コンピュータシステムへの言及は、適切な場合、コンピューティングデバイスを包含し得、その逆も同様である。その上、コンピュータシステムへの言及は、適切な場合、1つまたは複数のコンピュータシステムを包含し得る。
【0037】
本開示は、任意の好適な数のコンピュータシステム500を企図する。本開示は、任意の好適な物理的形態をとるコンピュータシステム500を企図する。限定としてではなく例として、コンピュータシステム500は、組込み型コンピュータシステム、システムオンチップ(SOC)、(たとえば、コンピュータオンモジュール(COM)またはシステムオンモジュール(SOM)などの)シングルボードコンピュータシステム(SBC)、デスクトップコンピュータシステム、ラップトップまたはノートブックコンピュータシステム、対話型キオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、携帯情報端末(PDA)、サーバ、タブレットコンピュータシステム、拡張/仮想現実デバイス、あるいはこれらのうちの2つまたはそれ以上の組合せであり得る。適切な場合、コンピュータシステム500は、1つまたは複数のコンピュータシステム500を含むか、単一または分散型であるか、複数のロケーションにわたるか、複数のマシンにわたるか、複数のデータセンターにわたるか、あるいは1つまたは複数のネットワーク中の1つまたは複数のクラウド構成要素を含み得るクラウド中に常駐し得る。適切な場合、1つまたは複数のコンピュータシステム500は、実質的な空間的または時間的制限なしに、本明細書で説明または示される1つまたは複数の方法の1つまたは複数のステップを実施し得る。限定としてではなく一例として、1つまたは複数のコンピュータシステム500は、リアルタイムでまたはバッチモードで、本明細書で説明または示される1つまたは複数の方法の1つまたは複数のステップを実施し得る。1つまたは複数のコンピュータシステム500は、適切な場合、異なる時間においてまたは異なるロケーションにおいて、本明細書で説明または示される1つまたは複数の方法の1つまたは複数のステップを実施し得る。
【0038】
特定の実施形態では、コンピュータシステム500は、プロセッサ502と、メモリ504と、ストレージ506と、入出力(I/O)インターフェース508と、通信インターフェース510と、バス512とを含む。本開示は、特定の配置において特定の数の特定の構成要素を有する特定のコンピュータシステムを説明し、示すが、本開示は、任意の好適な配置において任意の好適な数の任意の好適な構成要素を有する任意の好適なコンピュータシステムを企図する。
【0039】
特定の実施形態では、プロセッサ502は、コンピュータプログラムを作り上げる命令など、命令を実行するためのハードウェアを含む。限定としてではなく一例として、命令を実行するために、プロセッサ502は、内部レジスタ、内部キャッシュ、メモリ504、またはストレージ506から命令を取り出し(またはフェッチし)、それらの命令を復号および実行し、次いで、内部レジスタ、内部キャッシュ、メモリ504、またはストレージ506に1つまたは複数の結果を書き込み得る。特定の実施形態では、プロセッサ502は、データ、命令、またはアドレスのための1つまたは複数の内部キャッシュを含み得る。本開示は、適切な場合、任意の好適な数の任意の好適な内部キャッシュを含むプロセッサ502を企図する。限定としてではなく一例として、プロセッサ502は、1つまたは複数の命令キャッシュと、1つまたは複数のデータキャッシュと、1つまたは複数のトランスレーションルックアサイドバッファ(TLB)とを含み得る。命令キャッシュ中の命令は、メモリ504またはストレージ506中の命令のコピーであり得、命令キャッシュは、プロセッサ502によるそれらの命令の取出しを高速化し得る。データキャッシュ中のデータは、プロセッサ502において実行する命令が動作する対象のメモリ504またはストレージ506中のデータのコピー、プロセッサ502において実行する後続の命令によるアクセスのための、またはメモリ504もしくはストレージ506に書き込むための、プロセッサ502において実行された前の命令の結果、あるいは他の好適なデータであり得る。データキャッシュは、プロセッサ502による読取りまたは書込み動作を高速化し得る。TLBは、プロセッサ502のための仮想アドレストランスレーション(virtual-address translation)を高速化し得る。特定の実施形態では、プロセッサ502は、データ、命令、またはアドレスのための1つまたは複数の内部レジスタを含み得る。本開示は、適切な場合、任意の好適な数の任意の好適な内部レジスタを含むプロセッサ502を企図する。適切な場合、プロセッサ502は、1つまたは複数の算術論理ユニット(ALU)を含むか、マルチコアプロセッサであるか、または1つまたは複数のプロセッサ502を含み得る。本開示は、特定のプロセッサを説明し、示すが、本開示は任意の好適なプロセッサを企図する。
【0040】
特定の実施形態では、メモリ504は、プロセッサ502が実行するための命令、またはプロセッサ502が動作する対象のデータを記憶するためのメインメモリを含む。限定としてではなく一例として、コンピュータシステム500は、ストレージ506または(たとえば、別のコンピュータシステム500などの)別のソースからメモリ504に命令をロードし得る。プロセッサ502は、次いで、メモリ504から内部レジスタまたは内部キャッシュに命令をロードし得る。命令を実行するために、プロセッサ502は、内部レジスタまたは内部キャッシュから命令を取り出し、それらの命令を復号し得る。命令の実行中またはその後に、プロセッサ502は、(中間結果または最終結果であり得る)1つまたは複数の結果を内部レジスタまたは内部キャッシュに書き込み得る。プロセッサ502は、次いで、メモリ504にそれらの結果のうちの1つまたは複数を書き込み得る。特定の実施形態では、プロセッサ502は、1つまたは複数の内部レジスタまたは内部キャッシュ中の、あるいは(ストレージ506または他の場所とは対照的な)メモリ504中の命令のみを実行し、1つまたは複数の内部レジスタまたは内部キャッシュ中の、あるいは(ストレージ506または他の場所とは対照的な)メモリ504中のデータのみに対して動作する。(アドレスバスおよびデータバスを各々含み得る)1つまたは複数のメモリバスが、プロセッサ502をメモリ504に結合し得る。バス512は、以下で説明されるように、1つまたは複数のメモリバスを含み得る。特定の実施形態では、1つまたは複数のメモリ管理ユニット(MMU)が、プロセッサ502とメモリ504との間に常駐し、プロセッサ502によって要求されるメモリ504へのアクセスを可能にする。特定の実施形態では、メモリ504は、ランダムアクセスメモリ(RAM)を含む。このRAMは、適切な場合、揮発性メモリであり得る。適切な場合、このRAMは、ダイナミックRAM(DRAM)またはスタティックRAM(SRAM)であり得る。その上、適切な場合、このRAMは、シングルポートまたはマルチポートRAMであり得る。本開示は、任意の好適なRAMを企図する。メモリ504は、適切な場合、1つまたは複数のメモリ504を含み得る。本開示は、特定のメモリを説明し、示すが、本開示は任意の好適なメモリを企図する。
【0041】
特定の実施形態では、ストレージ506は、データまたは命令のための大容量ストレージを含む。限定としてではなく一例として、ストレージ506は、ハードディスクドライブ(HDD)、フロッピーディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、またはユニバーサルシリアルバス(USB)ドライブ、あるいはこれらのうちの2つまたはそれ以上の組合せを含み得る。ストレージ506は、適切な場合、リムーバブルまたは非リムーバブル(または固定)媒体を含み得る。ストレージ506は、適切な場合、コンピュータシステム500の内部または外部にあり得る。特定の実施形態では、ストレージ506は、不揮発性ソリッドステートメモリである。特定の実施形態では、ストレージ506は、読取り専用メモリ(ROM)を含む。適切な場合、このROMは、マスクプログラムROM、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、電気的書き換え可能ROM(EAROM)、またはフラッシュメモリ、あるいはこれらのうちの2つまたはそれ以上の組合せであり得る。本開示は、任意の好適な物理的形態をとる大容量ストレージ506を企図する。ストレージ506は、適切な場合、プロセッサ502とストレージ506との間の通信を可能にする1つまたは複数のストレージ制御ユニットを含み得る。適切な場合、ストレージ506は、1つまたは複数のストレージ506を含み得る。本開示は、特定のストレージを説明し、示すが、本開示は任意の好適なストレージを企図する。
【0042】
特定の実施形態では、I/Oインターフェース508は、コンピュータシステム500と1つまたは複数のI/Oデバイスとの間の通信のための1つまたは複数のインターフェースを提供する、ハードウェア、ソフトウェア、またはその両方を含む。コンピュータシステム500は、適切な場合、これらのI/Oデバイスのうちの1つまたは複数を含み得る。これらのI/Oデバイスのうちの1つまたは複数は、人とコンピュータシステム500との間の通信を可能にし得る。限定としてではなく一例として、I/Oデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカー、スチールカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、別の好適なI/Oデバイス、またはこれらのうちの2つまたはそれ以上の組合せを含み得る。I/Oデバイスは1つまたは複数のセンサーを含み得る。本開示は、任意の好適なI/Oデバイスと、それらのI/Oデバイスのための任意の好適なI/Oインターフェース508とを企図する。適切な場合、I/Oインターフェース508は、プロセッサ502がこれらのI/Oデバイスのうちの1つまたは複数を駆動することを可能にする1つまたは複数のデバイスまたはソフトウェアドライバを含み得る。I/Oインターフェース508は、適切な場合、1つまたは複数のI/Oインターフェース508を含み得る。本開示は、特定のI/Oインターフェースを説明し、示すが、本開示は任意の好適なI/Oインターフェースを企図する。
【0043】
特定の実施形態では、通信インターフェース510は、コンピュータシステム500と、1つまたは複数の他のコンピュータシステム500または1つまたは複数のネットワークとの間の(たとえば、パケットベース通信などの)通信のための1つまたは複数のインターフェースを提供する、ハードウェア、ソフトウェア、またはその両方を含む。限定としてではなく一例として、通信インターフェース510は、イーサネットまたは他のワイヤベースネットワークと通信するためのネットワークインターフェースコントローラ(NIC)またはネットワークアダプタ、あるいはWI-FIネットワークなどのワイヤレスネットワークと通信するためのワイヤレスNIC(WNIC)またはワイヤレスアダプタを含み得る。本開示は、任意の好適なネットワークと、そのネットワークのための任意の好適な通信インターフェース510とを企図する。限定としてではなく一例として、コンピュータシステム500は、アドホックネットワーク、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、またはインターネットの1つまたは複数の部分、あるいはこれらのうちの2つまたはそれ以上の組合せと通信し得る。これらのネットワークのうちの1つまたは複数の1つまたは複数の部分は、ワイヤードまたはワイヤレスであり得る。一例として、コンピュータシステム500は、(たとえば、BLUETOOTH WPANなどの)ワイヤレスPAN(WPAN)、WI-FIネットワーク、WI-MAXネットワーク、(たとえば、モバイル通信用グローバルシステム(GSM)ネットワークなどの)セルラー電話ネットワーク、または他の好適なワイヤレスネットワーク、あるいはこれらのうちの2つまたはそれ以上の組合せと通信し得る。コンピュータシステム500は、適切な場合、これらのネットワークのいずれかのための任意の好適な通信インターフェース510を含み得る。通信インターフェース510は、適切な場合、1つまたは複数の通信インターフェース510を含み得る。本開示は、特定の通信インターフェースを説明し、示すが、本開示は任意の好適な通信インターフェースを企図する。
【0044】
特定の実施形態では、バス512は、コンピュータシステム500の構成要素を互いに結合する、ハードウェア、ソフトウェア、またはその両方を含む。限定としてではなく一例として、バス512は、アクセラレーテッドグラフィックスポート(AGP)または他のグラフィックスバス、拡張業界標準アーキテクチャ(EISA)バス、フロントサイドバス(FSB)、HYPERTRANSPORT(HT)相互接続、業界標準アーキテクチャ(ISA)バス、INFINIBAND相互接続、ローピンカウント(LPC)バス、メモリバス、マイクロチャネルアーキテクチャ(MCA)バス、周辺構成要素相互接続(PCI)バス、PCI-Express(PCIe)バス、シリアルアドバンストテクノロジーアタッチメント(SATA)バス、ビデオエレクトロニクス規格協会ローカル(VLB)バス、または別の好適なバス、あるいはこれらのうちの2つまたはそれ以上の組合せを含み得る。バス512は、適切な場合、1つまたは複数のバス512を含み得る。本開示は、特定のバスを説明し、示すが、本開示は任意の好適なバスまたは相互接続を企図する。
【0045】
本明細書では、1つまたは複数のコンピュータ可読非一時的記憶媒体は、適切な場合、(たとえば、フィールドプログラマブルゲートアレイ(FPGA)または特定用途向けIC(ASIC)などの)1つまたは複数の半導体ベースまたは他の集積回路(IC)、ハードディスクドライブ(HDD)、ハイブリッドハードドライブ(HHD)、光ディスク、光ディスクドライブ(ODD)、光磁気ディスク、光磁気ドライブ、フロッピーディスケット、フロッピーディスクドライブ(FDD)、磁気テープ、ソリッドステートドライブ(SSD)、RAMドライブ、セキュアデジタルカードまたはドライブ、任意の他の好適なコンピュータ可読非一時的記憶媒体、あるいはこれらのうちの2つまたはそれ以上の任意の好適な組合せを含み得る。コンピュータ可読非一時的記憶媒体は、適切な場合、揮発性、不揮発性、または揮発性と不揮発性との組合せであり得る。
【0046】
本明細書では、「または」は、明確に別段に指示されていない限り、またはコンテキストによって別段に指示されていない限り、包括的であり、排他的ではない。したがって、本明細書では、「AまたはB」は、明確に別段に指示されていない限り、またはコンテキストによって別段に指示されていない限り、「A、B、またはその両方」を意味する。その上、「および」は、明確に別段に指示されていない限り、またはコンテキストによって別段に指示されていない限り、共同と個別の両方である。したがって、本明細書では、「AおよびB」は、明確に別段に指示されていない限り、またはコンテキストによって別段に指示されていない限り、「共同でまたは個別に、AおよびB」を意味する。
【0047】
本開示の範囲は、当業者が理解するであろう、本明細書で説明または示される例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。本開示の範囲は、本明細書で説明または示される例示的な実施形態に限定されない。その上、本開示は、本明細書のそれぞれの実施形態を、特定の構成要素、要素、特徴、機能、動作、またはステップを含むものとして説明し、示すが、これらの実施形態のいずれも、当業者が理解するであろう、本明細書のどこかに説明または示される構成要素、要素、特徴、機能、動作、またはステップのうちのいずれかの任意の組合せまたは置換を含み得る。さらに、特定の機能を実施するように適応されるか、構成されるか、実施することが可能であるか、実施するように設定されるか、実施することが可能にされるか、実施するように動作可能であるか、または実施するように動作する、装置またはシステムあるいは装置またはシステムの構成要素に対する添付の特許請求の範囲における参照は、その装置、システム、または構成要素が、そのように適応されるか、構成されるか、可能であるか、設定されるか、可能にされるか、動作可能であるか、または動作する限り、その装置、システム、構成要素またはその特定の機能が、アクティブにされるか、オンにされるか、またはロック解除されるか否かにかかわらず、その装置、システム、構成要素を包含する。さらに、本開示は、特定の実施形態を、特定の利点を提供するものとして説明するかまたは示すが、特定の実施形態は、これらの利点のいずれをも提供しないか、いくつかを提供するか、またはすべてを提供し得る。
【国際調査報告】