(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-14
(45)【発行日】2023-09-25
(54)【発明の名称】低電力レンダリングを伴う複合現実システム
(51)【国際特許分類】
G06T 19/00 20110101AFI20230915BHJP
【FI】
G06T19/00 600
(21)【出願番号】P 2022033544
(22)【出願日】2022-03-04
(62)【分割の表示】P 2019525822の分割
【原出願日】2017-11-15
【審査請求日】2022-03-04
(32)【優先日】2016-11-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】514108838
【氏名又は名称】マジック リープ, インコーポレイテッド
【氏名又は名称原語表記】Magic Leap,Inc.
【住所又は居所原語表記】7500 W SUNRISE BLVD,PLANTATION,FL 33322 USA
(74)【代理人】
【識別番号】100078282
【氏名又は名称】山本 秀策
(74)【代理人】
【識別番号】100113413
【氏名又は名称】森下 夏樹
(74)【代理人】
【識別番号】100181674
【氏名又は名称】飯田 貴敏
(74)【代理人】
【識別番号】100181641
【氏名又は名称】石川 大輔
(74)【代理人】
【識別番号】230113332
【氏名又は名称】山本 健策
(72)【発明者】
【氏名】シンティアン リー
【審査官】村松 貴士
(56)【参考文献】
【文献】米国特許出願公開第2015/0029218(US,A1)
【文献】米国特許出願公開第2015/0229839(US,A1)
【文献】特開2010-061644(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00 - 19/20
G06F 3/01
G06F 3/048 - 3/04895
H04N 13/00 - 13/398
G09G 5/00 - 5/42
(57)【特許請求の範囲】
【請求項1】
複合現実デバイスを使用して、複合現実コンテンツを提示する方法であって、前記方法は、
物理的環境に関連付けられたセンサデータを受信することであって、前記センサデータは、1つ以上のセンサから受信される、ことと、
前記複合現実デバイスの視覚処理ユニット(VPU)が、前記センサデータを使用して、前記複合現実デバイスの姿勢を識別することと、
前記複合現実デバイスの前記姿勢を前記VPUから中央処理ユニット(CPU)に送信することと、
前記VPUが、前記物理的環境の1つ以上の特徴を前記センサデータから識別することと、
前記1つ以上の特徴を前記CPUに送信することと、
前記VPUが、前記物理的環境の1つ以上の特徴を使用して、前記物理的環境の表現を生成することと、
前記CPUが、前記物理的環境と共に提示されるべきコンテンツを決定することと、
前記コンテンツを使用して、前記物理的環境の前記表現を更新することと、
前記CPUが、前記コンテンツおよび前記物理的環境の前記更新された表現をグラフィック処理ユニット(GPU)に送信することと、
前記GPUから低電力モードで動作中の前記CPUにメッセージを送信することであって、前記メッセージは、前記低電力モードから高電力モードに遷移することを前記CPUに行わせる、ことと、
前記高電力モードから前記低電力モードに前記CPUを遷移させることと
を含む、方法。
【請求項2】
前記1つ以上のセンサは、常時オンセンサを含む、請求項1に記載の方法。
【請求項3】
前記1つ以上のセンサは、視覚センサを含む、請求項1に記載の方法。
【請求項4】
前記1つ以上のセンサは、高フレームレートで動作する、請求項1に記載の方法。
【請求項5】
前記姿勢は、将来の時間における前記複合現実デバイスの視野の予測を含む、請求項1に記載の方法。
【請求項6】
前記1つ以上の特徴は、前記物理的環境内のオブジェクトの角または縁を含む、請求項1に記載の方法。
【請求項7】
前記方法は、前記物理的環境の前記表現を生成する前に、前記低電力モードから前記高電力モードに前記CPUを遷移させることさらに含む、請求項1に記載の方法。
【請求項8】
前記表現は、3次元における前記物理的環境のコンピュータでシミュレートされた再現を含む、請求項1に記載の方法。
【請求項9】
前記物理的環境と共に提示されるべきコンテンツは、
仮想コンテンツを含む、請求項1に記載の方法。
【請求項10】
前記方法は、前記物理的環境のビュー上に前記仮想コンテンツをオーバーレイすることをさらに含む、請求項9に記載の方法。
【請求項11】
前記CPUは、前記物理的環境の前記表現に基づいて前記コンテンツを生成する、請求項1に記載の方法。
【請求項12】
前記表現を更新することは、前記コンテンツを前記表現の中に挿入することを含む、請求項1に記載の方法。
【請求項13】
前記表現を更新することは、位置情報を前記コンテンツに関連付けることを含み、前記位置情報は、前記表現に対応する、請求項1に記載の方法。
【請求項14】
前記表現は、前記コンテンツを決定することに先立って、コンテンツキャッシュ内に記憶されていない、請求項1に記載の方法。
【請求項15】
前記複合現実デバイスの前記姿勢は、前記複合現実デバイスの位置および向きを含む、請求項1に記載の方法。
【請求項16】
前記GPUは、前記デバイスから遠隔にある、請求項1に記載の方法。
【請求項17】
前記1つ以上のセンサのうちのセンサは、カメラ、加速度計、ジャイロスコープ、全地球測位システムのうちの1つである、請求項1に記載の方法。
【請求項18】
前記GPUおよび前記CPUは、前記デバイスと共に配置されている、請求項1に記載の方法。
【請求項19】
前記GPUおよび前記CPUは、バッテリパックと共に配置されている、請求項1に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連出願の引用)
本願は、米国仮特許出願第62/423,154号(2016年11月16日出願、名称「Mixed-Reality System with Reduced Power Rendering」)に対する優先権を主張し、上記出願の開示は、あらゆる目的のためにその全体が参照により本明細書に引用される。
【0002】
(背景)
複合現実は、デジタル情報を物理的環境のユーザの視野とリアルタイムで組み合わせることを含むことができる。デジタル情報は、物理的環境に定着され、デジタル情報が物理的環境内にある印象を与えることができる。複合現実を実装するために、物理的環境が分析され、デジタル情報が生成されることができる。しかしながら、現実的組み合わせを作成するために、分析と生成とは、頻繁に実施されなければならず、それは、大量の電力を消費し得る。したがって、当技術分野において、複合現実を実装するときの電力消費を低減させるための改良された方法およびシステムの必要がある。
【発明の概要】
【発明が解決しようとする課題】
【0003】
(要約)
複合現実を実装する方法、システム、およびコンピュータプログラム製品が、提供される。いくつかの例では、グラフィック処理ユニット(GPU)は、少なくとも部分的に、中央処理ユニット(CPU)の使用を取り除くことができる。そのような例では、受動状態は、CPUによって処理される必要がない予測可能なコンテンツをレンダリングすることができる。そのような例では、予測可能なコンテンツは、CPUが低電力モードにある間、GPUによってレンダリングされることができる。
【課題を解決するための手段】
【0004】
いくつかの例では、受動状態は、多くの結像決定およびレンダリング計算をGPU(CPUではなく)に任せることの意図を表し得る。GPUは、GPUが十分な出力を提供するためにより少ないデータ入力を必要とし得るので、CPUより少ない電力を消費し得る。例えば、CPUは、現在の状態の完全情報を要求し得るが、GPUは、コンテンツをレンダリングする方法(例えば、タイミング、視野限界、深度平面、コンテンツのタイプ等)のみを決定する必要があり得る。そして、GPUは、より少ないデータ入力を必要と得るので、異なるカテゴリのセンサおよびアーキテクチャが、使用されることができる。例えば、より大きいメモリバンクおよびコンポーネント統合を伴うCPUは、関わるコンピューティングサイクルに起因して、CPUの要件に対応するセンサおよびアーキテクチャのカテゴリ(コンポーネントのクラス)に限定され得る。換言すると、より高速で実施し、より少ない電力を使用することができる、センサおよびアーキテクチャのカテゴリは、CPUにあまり有用ではないこともある一方、GPUは、センサおよびアーキテクチャのそのようなカテゴリを使用し、十分な出力を提供することが可能であり得る。GPUの能力は、したがって、GPUは、CPUの単により優れたバージョンではなく、異なるカテゴリのセンサおよびアーキテクチャを有効にし得るので、異なるクラスであり得る。
【0005】
本開示の実施形態は、低減させられた電力消費を伴って複合現実を実装するために提供される。いくつかの例では、GPUは、CPUの使用の一部を取り除くことができる。そのような例では、受動電力状態が、アイドル状態とアクティブ状態との間に提供されることができる。いくつかの例では、受動状態は、GPUに、CPUによって処理される必要がない予測可能なコンテンツをレンダリングさせることができる。そのような例では、予測可能なコンテンツは、CPUが低電力モードにある間、GPUによって識別され、レンダリングされることができる。故に、本開示の実施形態は、CPUが対応するGPUより多くの電力を消費し得るので、従来の技法を用いて利用可能ではない利点を提供する。いくつかの例では、受動状態は、予測可能なコンテンツがCPUを使用せずに識別され、レンダリングされ得るという事実を利用することができる。そのような例では、受動状態は、CPUによって処理される必要がない予測可能なコンテンツをレンダリングすることができる。
【0006】
例えば、複合現実デバイスを使用して、複合現実コンテンツを提示する方法が、提供されることができる。方法は、物理的環境に関連付けられたセンサデータを取得することを含むことができる。いくつかの例では、センサデータは、1つ以上のセンサを使用して取得されることができる。方法は、視覚処理ユニット(VPU)によって、センサデータを使用して、複合現実デバイスの姿勢を決定することと、複合現実デバイスの姿勢をグラフィック処理ユニット(GPU)に送信することとをさらに含むことができる。いくつかの例では、複合現実デバイスの姿勢は、複合現実デバイスの位置および向きを含むことができる。いくつかの例では、GPUは、複合現実デバイスから遠隔にあることができる。いくつかの例では、方法は、複合現実デバイスの姿勢を中央処理ユニット(CPU)に送信することをさらに含むことができる。いくつかの例では、CPUは、方法全体を通して、低電力モードで動作中であることができる。方法は、GPUによって、姿勢に対応するコンテンツを識別することをさらに含むことができる。いくつかの例では、コンテンツは、コンテンツを識別することに先立って、GPUのキャッシュ内に記憶されることができる。方法は、GPUによって、コンテンツを物理的環境と整列させることと、整列させられたコンテンツを複合現実デバイスに送信することと、複合現実デバイスのディスプレイを使用して、整列させられたコンテンツを提示することとをさらに含むことができる。いくつかの例では、方法は、識別されたコンテンツが予測可能なコンテンツであることを決定することと、識別されたコンテンツが予測可能であることの決定に応答して、識別されたコンテンツをGPUのキャッシュから取得することとをさらに含むことができる。他の例では、方法は、識別されたコンテンツが動的コンテンツであることを決定することと、識別されたコンテンツが動的であることの決定に応答して、メッセージをCPUに送信することとをさらに含むことができる。そのような例では、メッセージは、CPUを低電力モードから高電力モードに遷移させることができる。
【0007】
別の例として、複合現実デバイスを使用して複合現実コンテンツを提示するためのシステムが、提供されることができる。システムは、複合現実デバイスと、グラフィック処理ユニット(GPU)とを含むことができ、GPUは、複合現実デバイスとともに、またはそれと別個に含まれる。いくつかの例では、複合現実デバイスは、1つ以上のセンサと、視覚処理ユニット(VPU)と、ディスプレイとを含むことができる。そのような例では、1つ以上のセンサのうちのセンサは、センサデータを捕捉するように構成されることができる。VPUは、複合現実デバイスに関連付けられた姿勢を決定するように構成されることができる。そして、姿勢は、センサデータを使用して決定されることができる。GPUは、複合現実デバイスのディスプレイによって提示されるべきコンテンツを識別し、コンテンツを物理的環境と整列させ、整列させられたコンテンツをディスプレイによって提示されるために複合現実デバイスに伝送するように構成されることができる。
【0008】
従来の技法に優る多数の利点が、本開示の方法によって達成される。例えば、本開示の実施形態は、GPUによる知覚およびグラフィックレンダリングに関する一貫した性能を維持しながら、高電力消費CPUがある期間にわたって低電力モードにあることを可能にすることによって、電力節約を提供することができる。電力節約は、視覚的更新がユーザの身体運動によってトリガされないときの電力使用が最小化され得る多くの用途(例えば、生成性ソフトウェア、ウェブブラウジング、マルチメディア相互作用)に適用することができる。そのような電力節約を用いることで、ユーザが物理的環境の一部としてデジタル情報を知覚するために不可欠である、一貫した視覚的環境が維持され得る常時オン複合現実を実装することが可能である。本開示のこれらおよび他の実施形態は、その利点および特徴の多くとともに、下記の文章および添付の図と併せてより詳細に説明される。
例えば、本願は以下の項目を提供する。
(項目1)
複合現実デバイスを使用して、複合現実コンテンツを提示する方法であって、前記方法は、
物理的環境に関連付けられたセンサデータを取得することであって、前記センサデータは、1つ以上のセンサを使用して取得される、ことと、
視覚処理ユニット(VPU)によって、前記センサデータを使用して、前記デバイスの姿勢を決定することと、
前記デバイスの前記姿勢を少なくとも1つのグラフィック処理ユニット(GPU)に送信することと、
前記少なくとも1つのGPUによって、前記デバイスの前記姿勢に対応するコンテンツを識別することと、
前記少なくとも1つのGPUによって、前記コンテンツを前記物理的環境に整列させることと、
前記整列させられたコンテンツを前記デバイスに送信することと、
ディスプレイを使用して、前記整列させられたコンテンツを提示することと
を含む、方法。
(項目2)
前記デバイスの前記姿勢は、前記デバイスの位置および向きを含む、項目1に記載の方法。
(項目3)
前記少なくとも1つのGPUは、前記デバイスから遠隔にある、項目1に記載の方法。
(項目4)
前記コンテンツは、前記コンテンツを識別することに先立って、前記少なくとも1つのGPUのキャッシュ内に記憶されている、項目1に記載の方法。
(項目5)
前記デバイスの前記姿勢を中央処理ユニット(CPU)に送信することをさらに含む、項目1に記載の方法。
(項目6)
前記CPUは、低電力モードで動作中である、項目5に記載の方法。
(項目7)
前記識別されたコンテンツが動的コンテンツであることを決定することと、 メッセージを前記CPUに送信することと
をさらに含み、
前記メッセージは、前記CPUに前記低電力モードから高電力モードに遷移させる、項目6に記載の方法。
(項目8)
前記識別されたコンテンツが予測可能なコンテンツであることを決定することと、
前記識別されたコンテンツが予測可能であることの決定に応答して、前記識別されたコンテンツを前記少なくとも1つのGPUのキャッシュから取得することと
をさらに含む、項目1に記載の方法。
(項目9)
デバイスを備えているシステムであって、前記デバイスは、
1つ以上のセンサであって、前記1つ以上のセンサのうちのセンサは、センサデータを捕捉するように構成されている、1つ以上のセンサと、
前記デバイスに関連付けられた姿勢を決定するように構成された視覚処理ユニット(VPU)であって、前記姿勢は、前記センサデータを使用して決定される、VPUと、
ディスプレイと、
少なくとも1つのグラフィック処理ユニット(GPU)と
含み、
前記少なくとも1つのGPUは、
前記姿勢を前記VPUから受信することと、
前記ディスプレイによって提示されるべきコンテンツを識別することであって、前記コンテンツは、前記姿勢に基づいて識別される、ことと、
前記コンテンツを物理的環境と整列させることと、
前記ディスプレイによって提示されるべき前記整列させられたコンテンツを前記デバイスに伝送することと
を行うように構成されている、システム。
(項目10)
前記姿勢は、前記複合現実デバイスの構成空間内にあり、前記姿勢は、前記複合現実デバイスの位置および向きを定義する、項目9に記載のシステム。
(項目11)
前記1つ以上のセンサのうちのセンサは、カメラ、加速度計、ジャイロスコープ、トーテム、および全地球測位システムのうちの1つである、項目9に記載のシステム。
(項目12)
前記少なくとも1つのGPUは、前記デバイスから遠隔にある、項目9に記載のシステム。
(項目13)
前記コンテンツは、予測可能なコンテンツである、項目9に記載のシステム。
(項目14)
前記デバイスは、前記姿勢を前記VPUから受信するように構成された中央処理ユニット(CPU)をさらに含む、項目13に記載のシステム。
(項目15)
前記CPUは、前記コンテンツが予測可能なコンテンツであることの識別に応答してバイパスされる、項目14に記載のシステム。
(項目16)
前記コンテンツは、前記コンテンツを識別することに先立って、前記少なくとも1つのGPUのキャッシュ内に記憶されている、項目9に記載のシステム。
(項目17)
非一過性機械読み取り可能な記憶媒体内に有形に具現化されるコンピュータプログラム製品であって、前記コンピュータプログラム製品は、命令を含み、前記命令は、1つ以上のプロセッサによって実行されると、
物理的環境に関連付けられたセンサデータを取得することであって、前記センサデータは、1つ以上のセンサを使用して取得される、ことと、
視覚処理ユニット(VPU)によって、前記センサデータを使用して、デバイスの姿勢を決定することと、
前記デバイスの前記姿勢を少なくとも1つのグラフィック処理ユニット(GPU)に送信することと、
前記少なくとも1つのGPUによって、前記姿勢に対応するコンテンツを識別することと、
前記少なくとも1つのGPUによって、前記コンテンツを前記物理的環境と整列させることと、
前記整列させられたコンテンツを前記デバイスに送信することと、
ディスプレイを使用して、前記整列させられたコンテンツを提示することと
を前記1つ以上のプロセッサに行わせる、コンピュータプログラム製品。
(項目18)
前記姿勢は、前記デバイスの構成空間におけるものであり、前記姿勢は、前記デバイスの位置および向きを定義する、項目17に記載のコンピュータプログラム製品。
(項目19)
前記1つ以上のセンサのうちのセンサは、カメラ、加速度計、ジャイロスコープ、トーテム、および全地球測位システムのうちの1つである、項目17に記載のコンピュータプログラム製品。
(項目20)
前記少なくとも1つのGPUは、前記デバイスから遠隔にある、項目17に記載のコンピュータプログラム製品。
(項目21)
前記命令は、前記1つ以上のプロセッサによって実行されると、
前記デバイスの前記姿勢を中央処理ユニット(CPU)に送信することを前記1つ以上のプロセッサにさらに行わせる、項目17に記載のコンピュータプログラム製品。
(項目22)
前記コンテンツは、予測可能なコンテンツであり、前記CPUは、前記コンテンツが予測可能なコンテンツであることの識別に応答してバイパスされる、項目21に記載のコンピュータプログラム製品。
(項目23)
前記コンテンツは、前記コンテンツを識別することに先立って、前記少なくとも1つのGPUのキャッシュ内に記憶されている、項目17に記載のコンピュータプログラム製品。
【0009】
例証的実施形態が、以下の図を参照して下記に詳細に説明される。
【図面の簡単な説明】
【0010】
【
図1】
図1は、一実施形態による、受動電力状態を実装するための複合現実システムの例を図示する。
【
図2】
図2は、一実施形態による、複合現実を提示するために視覚処理ユニット(VPU)によって実施されるプロセスの例を図示する。
【
図3】
図3は、一実施形態による、複合現実を提示するために中央処理ユニット(CPU)によって実施されるプロセスの例を図示する。
【
図4】
図4は、一実施形態による、複合現実デバイスを使用して動的コンテンツを提示するためのプロセスの例を図示する。
【
図5】
図5は、一実施形態による、複合現実デバイスを使用して予測可能なコンテンツを提示するためのプロセスの例を図示する。
【
図6】
図6は、一実施形態による、中央処理ユニット(CPU)のブロック図の例を図示する。
【
図7】
図7は、一実施形態による、中央処理ユニット(CPU)の内部コンポーネントのブロック図の例を図示する。
【
図8】
図8は、一実施形態による、グラフィック処理ユニット(GPU)のブロック図の例を図示する。
【
図9】
図9は、一実施形態による、単一のストリームマルチプロセッサのブロック図の例を図示する。
【
図10】
図10は、一実施形態による、視覚処理ユニット(VPU)のブロック図の例を図示する。
【発明を実施するための形態】
【0011】
(詳細な説明)
以下の説明では、説明の目的のために、本開示の実施形態の完全な理解を提供するために、具体的詳細が記載される。しかしながら、種々の実施形態は、これらの具体的詳細を伴わずに実践され得ることが明白であろう。図および説明は、制限であることを意図するものではない。
【0012】
続く説明は、例示的実施形態のみを提供し、本開示の範囲、適用性、または構成を限定することを意図するものではない。むしろ、例示的実施形態の続く説明は、当業者に例示的実施形態を実装するための実行可能説明を提供するであろう。種々の変更が添付の請求項に記載されるような本開示の精神および範囲から逸脱することなく、要素の機能および配列において行われ得ることも理解されたい。
【0013】
従来、複合現実デバイス(例えば、ウェアラブル複合現実眼鏡)は、以下の2つの状態を使用することによって、電力消費に対処する:アイドルおよびアクティブ。アイドル状態では、コンテンツは、レンダリングされない。アクティブ状態では、中央処理ユニット(CPU)が、コンテンツを決定/識別し、グラフィック処理ユニット(GPU)が、決定された/識別されたコンテンツをレンダリングする。しかしながら、この2状態システムは、大量の電力をアクティブ状態において消費し得る。
【0014】
本開示の実施形態は、より少ない電力を用いて複合現実を実装するために提供される。いくつかの例では、GPUは、CPUの使用の一部を取り除くことができる。そのような例では、受動電力状態が、アイドル状態とアクティブ状態との間に提供されることができる。受動状態では、GPUが、コンテンツを決定/識別/予測し、予測可能なコンテンツをレンダリングし、CPUは、コンテンツを決定/識別/予測しない。そのような例では、予測可能なコンテンツは、CPUが、低電力モードとも称されるアイドル/半アイドル状態にある間、GPUによって識別され、レンダリングされることができる。故に、本開示の実施形態は、CPUが対応するGPUより多くの電力を消費し得る従来の技法を用いて利用可能ではない利点を提供する。いくつかの例では、受動状態は、予測可能なコンテンツが、CPUの使用なしに、GPUによって識別され、レンダリングされることができるという事実を利用することができる。そのような例では、受動状態では、GPUは、CPUによって処理される必要がない予測可能なコンテンツをレンダリングすることができる。
【0015】
図1は、一実施形態による、受動電力状態を実装するための複合現実システムの例を図示する。複合現実システムは、物理的環境上にオーバーレイされた仮想コンテンツを含む持続的複合現実環境を提供することができる。例えば、仮想コンテンツは、物理的環境内に経時的に現れることができる。
【0016】
複合現実システムは、複合現実デバイス110を含むことができる。複合現実デバイス110は、仮想コンテンツをユーザに提示することができる。複合現実デバイス110はまた、仮想コンテンツがユーザに提示されている間、ユーザがユーザの正面の物理的環境の少なくとも一部を見ることを可能にすることもできる。いくつかの例では、仮想コンテンツは、1つ以上のディスプレイ(例えば、ディスプレイ112)を使用して、ユーザに提示されることができる。いくつかの例では、複合現実システムは、1つ以上の複合現実デバイスを含むことができる。
【0017】
いくつかの例では、複合現実デバイス110は、センサデータを生成するための1つ以上のセンサを含むことができる。センサデータは、複合現実デバイス110の姿勢(例えば、位置および/または向き)を識別するために使用されることができる。例として、センサデータは、カメラによって収集されることができ、それは、物理的環境の1つ以上の画像を提供することができる。物理的環境は、ユーザの視野内のエリアを含むことができる。いくつかの実装では、物理的環境は、ユーザの視野外のエリアを含むこともできる。そのような実装では、ユーザの視野外のエリアは、1つ以上のカメラを使用して結像されることができる。
図1に図示されるセンサは、特定の位置に位置するが、センサは、異なる位置にあることができる。加えて、より多いまたはより少ないセンサが存在することができる。
【0018】
いくつかの例では、1つ以上のセンサのうちのセンサは、常時オンセンサ114または視覚センサ116であることができる。常時オンセンサ114は、物理的環境の1つ以上の属性を検出し得る低電力センサであることができる。例えば、常時オンセンサ114は、温度センサ、圧力センサ、流量センサ、レベルセンサ、近接度センサ、変位センサ、バイオセンサ、ガスセンサ、化学センサ、加速センサ、湿度センサ、湿度センサ、速度センサ、質量センサ、傾斜センサ、力センサ、粘度センサ、または任意のそれらの組み合わせであることができる。
【0019】
いくつかの例では、常時オンセンサ114は、データが常時オンセンサ114によって生成されるレートを規定する1つ以上のデータ生成レートモード(時として、パワーモードとも称される)で動作するように設定されることができる。例えば、常時オンセンサ114は、低レートモードで動作するように設定されることができ、低レートモードは、データ生成レートが常時オンセンサ114が高レートモードで動作するように設定されているときより低いようにする。いくつかの例では、異なる常時オンセンサ114は、データを生成するために異なるレートで動作するように設定されることができる。例えば、第1の常時オンセンサは、第1のレートで動作するように設定されることができ、第2の常時オンセンサは、第2のレートで動作するように設定されることができる。そのような例では、第1のレートおよび/または第2のレートは、可変レート(例えば、経時的に変化する)であることができる。
【0020】
視覚センサ116(例えば、カメラ)は、物理的環境の画像を捕捉することができる。視覚センサ116は、画像が視覚センサ116によって捕捉されるレートを規定する1つ以上のモードで動作するように設定されることもできる。例えば、視覚センサ116は、視覚センサ116が高レートモードで動作するように設定されているときより画像捕捉レートが低いようにする低レートモードで動作するように設定されることができる。
【0021】
いくつかの例では、複合現実デバイス110は、1つ以上の組み合わせセンサ(例えば、組み合わせセンサ118)を含むことができ、それは、常時オンセンサ114と視覚センサ116との機能性を含むことができる。そのような例では、組み合わせセンサ118は、1つ以上のモードで動作するように設定されることができる。例えば、組み合わせセンサ118の第1のモードは、常時オンセンサ114の機能性に対応し得る。組み合わせセンサ118の第2のモードは、視覚センサ116の機能性に対応し得る。いくつかの例では、異なるモードは、データが取得される異なるレートを提供することができる。一例では、視覚センサ機能は、第1のモードにある間、50フレーム/秒、第2のモードにある間、5フレーム/秒のフレームレートを使用して動作することができる。別の例では、視覚センサ機能は、第2のモードでは、5フレーム/秒のフレームレートを使用して動作することができる一方、常時オンセンサ機能は、10感知/秒のレートを使用して動作することができる。
【0022】
複合現実システムは、1つ以上のプロセッサ(例えば、視覚処理ユニット(VPU)120、CPU130、および/またはGPU140)をさらに含むことができる。単一VPU120、CPU130、およびGPU140が説明されるが、1つ以上のVPU120、1つ以上のCPU130、および/または1つ以上のGPU140が使用されることができることにも留意されたい。VPU120は、複合現実デバイス110とともに含まれること、またはそれから遠隔にあることができる。いくつかの例では、VPU120は、1つ以上の電力モード(例えば、低および高)で動作するように設定されることができる。いくつかの例では、任意の電力モードで動作するVPU120は、CPU130より少ない電力を消費し得る。
【0023】
いくつかの例では、CPU130は、複合現実デバイス110とともに含まれること、またはそれから遠隔にあることができる。CPU130が、複合現実デバイス110から遠隔にあるとき、CPU130は、例えば、複合現実デバイス110のためのバッテリパックとともに位置することができる。いくつかの例では、CPU130は、VPU120および/またはGPU140より多くの電力を消費することができる。
【0024】
いくつかの例では、GPU140は、複合現実デバイス110とともに含まれること、またはそれから遠隔にあることができる。GPU140が、複合現実デバイス110から遠隔にあるとき、GPU140は、例えば、複合現実デバイス110のためのバッテリパックとともに位置することができる。いくつかの例では、GPU140は、1つ以上の電力モード(例えば、低および高)で動作するように設定されることができる。そのような例では、任意の電力モードにおけるGPU140は、CPU(例えば、CPU130)より少ない電力を消費し得る。
【0025】
いくつかの例では、VPU120は、知覚フロントエンドモジュール122を含むことができる。知覚フロントエンドモジュール122は、センサデータを複合現実デバイス110の1つ以上のセンサ(例えば、常時オンセンサ114、視覚センサ116、および/または組み合わせセンサ118)から受信することができる。知覚フロントエンドモジュール122は、センサデータを使用して、複合現実デバイス110の姿勢を識別することができる。例えば、姿勢は、常時オンセンサ114、視覚センサ116、組み合わせセンサ118、または任意のそれらの組み合わせからのデータを使用して識別されることができる。いくつかの例では、姿勢は、複合現実デバイス110の位置および/または向き(例えば、横座標、縦座標、垂直座標、ピッチ、ヨー、ロール、または任意のそれらの組み合わせ)を定義することができる。
【0026】
いくつかの例では、知覚フロントエンドモジュール122は、物理的環境の1つ以上の特徴(時として、抽出された情報とも称される)を識別することもできる。例えば、物理的環境内のオブジェクトの角または縁が、識別されることができる。物理的環境の1つ以上の特徴は、VPU120が、物理的環境の画像を送信するのではなく、1つ以上の特徴を他のプロセッサに送信することを可能にすることができる。いくつかの例では、1つ以上の特徴は、画像が含むであろうピクセル情報の全てを含む必要なく、物理的環境を記述することができる。そのような例では、1つ以上の特徴は、コンポーネント間でやりとりするための物理的環境の表現を作成するために使用されることができる。
【0027】
いくつかの例では、VPU120は、常時オン知覚モジュール124を含むこともできる。そのような例では、常時オン知覚モジュール124は、姿勢および/または1つ以上の特徴を知覚フロントエンドモジュール122から受信することができる。いくつかの例では、常時オン知覚モジュール124は、姿勢をCPU130および/またはGPU140に送信することができる。いくつかの例では、常時オン知覚モジュール124は、常時オン知覚モジュール124からの姿勢の受信に応答して、CPU130および/またはGPU140に低電力モードから高電力モードに遷移させることができる。いくつかの例では、常時オン知覚モジュール124は、1つ以上の特徴をCPU130および/またはGPU140に送信することもできる。
【0028】
いくつかの例では、知覚フロントエンドモジュール122または常時オン知覚モジュール124のいずれかの機能のうちの1つ以上のものは、VPU120の異なるコンポーネント上で生じることができる(例えば、姿勢は、常時オン知覚モジュール124によって決定されることができる)。他の例では、知覚フロントエンドモジュール122または常時オン知覚モジュール124のいずれかの機能のうちの1つ以上のものは、VPU120から遠隔のコンポーネント(例えば、モジュールまたはデバイス)上で生じることができる。
【0029】
上で説明されるように、CPU130は、複合現実デバイス110の姿勢および/または物理的環境の1つ以上の特徴を、例えば、VPU120から受信することができる。いくつかの例では、CPU130は、単独で、またはVPU120と組み合わせてのいずれかにおいて、物理的環境の表現を作成することができる。そのような例では、表現は、物理的環境の3D再現であることができる。
【0030】
いくつかの例では、CPU130は、物理的環境の表現の中に設置すべき仮想コンテンツを識別することができる。そのような例では、仮想コンテンツは、CPU130上で実行されるアプリケーションに基づいて識別されることができる。例えば、ゲームは、複合現実デバイス110を使用するユーザの体験を制御するCPU130上で実行されることができる。いくつかの例では、世界ビューが、物理的環境の表現および仮想コンテンツを含むように生成されることができる。そのような例では、世界ビューは、コンテンツが物理的環境に位置すべき場所を定義する等のために、物理的環境の表現の中に挿入される仮想コンテンツであることができる。いくつかの例では、仮想コンテンツは、3次元表現であることができる。
【0031】
いくつかの例では、CPU130は、仮想コンテンツが特定の時間に見えるべき状態を決定することができる。そのような例では、CPU130は、時間の1つ以上の指示を仮想コンテンツに関連付けることができ、GPU140は、仮想コンテンツをユーザに提示されるためにレンダリングし、複合現実デバイス110の1つ以上のディスプレイに送信すべき時間を決定することができる。
【0032】
いくつかの例では、コンテンツは、ある期間にわたって、予測可能な運動(例えば、時計、雲、湖の水面等)を有することができる。そのような例では、CPU130は、1つ以上の期間にわたって、コンテンツを識別し、生成することができる。1つ以上の期間は、予測可能なコンテンツに関連付けられることができる。例証的例では、予測可能なコンテンツは、壁上に搭載される時計であることができる。時計を表すコンテンツは、時計が複合現実デバイス110のユーザに正しい時間に現れるように、時計が再レンダリングされ得る期間(例えば、1分毎に1回)を含むことができる。いくつかの例では、デジタル情報が静的オブジェクト(例えば、テーブル)を表すとき、デジタル情報は、コンテンツをレンダリングすべき関連付けられた期間を有していない。
【0033】
いくつかの例では、CPU130は、物理的環境の表現、仮想コンテンツ、および/または世界ビューをGPU140に送信することができる。そのような例では、仮想コンテンツは、ピクセル情報の形態にあることができる。
【0034】
いくつかの例では、GPU140は、世界オペレータ142、知覚ビューモジュール144、コンテンツキャッシュ146、レンダリングモジュール148、世界相互作用モジュール152、または任意のそれらの組み合わせを含むことができる。そのような例では、コンテンツキャッシュ146は、データをCPU130から受信し(複合現実デバイス110によって提示されるべきコンテンツおよび上で説明される世界ビュー等)、および/または、VPU120から受信し(姿勢等)、受信されたデータを記憶することができる。物理的環境の表現、複合現実デバイス110によって提示されるべきコンテンツ、および/または世界ビューは、個々に、アクセス可能であり、コンテンツキャッシュ146内で消費可能であることができる。
【0035】
いくつかの例では、世界オペレータ142は、世界ビューをコンテンツキャッシュ146から要求することができる。そのような例では、コンテンツキャッシュ146は、要求に応答して、コンテンツキャッシュ146内に記憶される世界ビューを世界オペレータ142に送信することができる。他の例では、コンテンツキャッシュ146は、世界ビューを世界オペレータ142に周期的に送信し得るか、またはコンテンツキャッシュ146は、世界ビューが更新されると(例えば、CPU130によって)、世界ビューを世界オペレータ142に送信し得る。いくつかの例では、世界ビューは、複合現実デバイス110に関連付けられた物理的環境の一部のみであり得る。世界ビューが、部分的世界ビューであるとき、世界オペレータ142は、VPU120から直接受信された情報を使用して、および/またはコンテンツキャッシュ146内に記憶される他の情報から、完全世界ビューを生成することができる。
【0036】
いくつかの例では、世界オペレータモジュール142は、姿勢および/または1つ以上の特徴を常時オン知覚モジュール124から受信することができる。いくつかの例では、世界オペレータモジュール142は、姿勢および/または1つ以上の特徴に基づいて、コンテンツキャッシュ146内に記憶される世界ビューを更新することができる。
【0037】
姿勢および世界ビューを使用して、世界オペレータモジュール142は、取得すべきコンテンツを識別することができる。いくつかの例では、世界オペレータ142は、複合現実デバイス110の姿勢に対応する仮想コンテンツの姿勢を決定することもできる。例えば、複合現実デバイス110が、特定の場所で特定の方向に面しているとき、世界オペレータモジュール142は、仮想コンテンツの位置および/または向きを決定することができる。
【0038】
いくつかの例では、世界オペレータモジュール142が、コンテンツを識別すると、世界オペレータモジュール142は、コンテンツのタイプ(例えば、コンテンツが動的であるか、または予測可能であるか)を決定することもできる。
【0039】
動的コンテンツは、GPUによって動作可能な論理内で容易に捕捉されない運動を有するオブジェクトを含むことができる。いくつかの例では、動的コンテンツは、ユーザの相互作用および/または複合現実デバイス110の特定の姿勢に依存し得る。そのような例では、CPU130は、相互作用および/または姿勢を分析し、コンテンツを決定する必要があろう。いくつかの例では、動的コンテンツは、予測不可能なコンテンツを含み得る。そのような例では、動的コンテンツは、経時的に変化し得る視覚的外観を伴うコンテンツであり得る。加えて、動的コンテンツは、既存のキャッシュされたコンテンツおよび常時オン知覚モジュール124からの入力を利用して、GPU140によって効率的にレンダリングされないこともあるコンテンツを含み得、それは、世界オペレータモジュール142に提供され得る。そのような動的コンテンツの一例は、チェスゲームアプリケーションまたはメッセージングチャットアプリケーションであり得、更新のレンダリングは、遠隔ユーザの入力に依存する。動的コンテンツの別の例は、高度3D構造であり得、GPU140は、情報をコンテンツキャッシュ146内にキャッシュし、高度3D構造の位置を決定するための十分なメモリを有していないこともある。
【0040】
予測可能なコンテンツは、標準的または予測可能な移動を経時的に有するオブジェクトを含み得る。いくつかの例では、予測可能なコンテンツは、空間および時間にわたって、コンテンツキャッシュ146内の既存のキャッシュされたコンテンツおよび常時オン知覚モジュール124からの入力を用いて決定され得る視覚的外観を伴うコンテンツであり得、それは、世界オペレータモジュール142への入力として提供され得る。例えば、予測可能なコンテンツは、外部のもの(例えば、ユーザによる相互作用)ではなく、それ自体の物理的特性および物理的環境の物理的特性に依存する運動を有し得る。いくつかの例では、予測可能なコンテンツは、事前にプログラムされたその運動を有し得、その運動を決定するための余分な処理力は、不必要である。そのような例では、予測可能なコンテンツの運動は、CPU130が使用される必要がないように、コンテンツキャッシュ146内に含まれることができる。予測可能なコンテンツは、経時的運動を有していない静的コンテンツも含み得る。いくつかの例では、静的コンテンツは、依然として、複合現実デバイスの変化または更新された姿勢および静的コンテンツの姿勢から生じる静的コンテンツの向きにおける調節に従って移動し得る。
【0041】
予測可能なコンテンツの例は、時計、水流、および松明を含むことができる。予測可能なコンテンツの例を例証するために、時計の例が、説明されるであろう。時計は、静止していないが、その移動は、予測可能であり得る。実際、時計に関連付けられたピクセル情報は、コンテンツキャッシュ146内に保たれることができる。加えて、時計が移動すべき方法を識別する論理も、コンテンツキャッシュ146内に含まれることができる。いくつかの例では、論理は、1分毎の時計の針の移動に対応し得る。予測可能なコンテンツの別の例は、外部擾乱が存在しないときの湖の水面である。水面の波の特性は、単純ランダム化に基づいて再現されることができる。予測可能なコンテンツに対して、予測可能なコンテンツは、予測可能なコンテンツがユーザに表示されるべきとき、CPU130が予測可能なコンテンツに関連付けられたピクセル情報を生成する必要がないように、コンテンツキャッシュ146内に記憶されることができる。そのような例では、CPU130は、低電力モードから高電力モードに遷移する必要がなく、それによって、電力を節約する。
【0042】
いくつかの例では、コンテンツのタイプは、コンテンツが複合現実デバイス110の姿勢に対してコンテンツキャッシュ146内で特定されるかどうかを識別することによって決定されることができる。そのような例では、世界オペレータモジュール142も、コンテンツキャッシュ146が複合現実デバイス110の姿勢に対応する姿勢においてコンテンツを含むかどうかを識別することができる。世界オペレータモジュール142が、コンテンツが動的コンテンツであることを決定する場合、世界オペレータモジュール142は、動的コンテンツの状態が生成され得るように、メッセージをCPU130に送信し、CPU130に低電力モードから高電力モードに遷移させることができる。そのような例では、メッセージは、世界ビューを含むことができる。いくつかの例では、メッセージ内に含まれる世界ビューは、CPU130に、CPU130が生成する必要があるコンテンツを示すことができる。CPU130が生成する必要があるコンテンツを限定することは、CPU130が高電力モードにある時間量を短縮することができる。
【0043】
メッセージの受信に応答して、CPU130は、常時オン知覚モジュール124から受信された姿勢を分析することができる。いくつかの例では、CPU130は、世界オペレータモジュール142から受信された世界ビューを分析することもできる。姿勢および/または世界ビューを分析することによって、CPU130は、複合現実デバイス110によって提示されるべきコンテンツを決定することができる。そのような例では、CPU130は、コンテンツに関連付けられたピクセル情報を生成し、GPU140のコンテンツキャッシュ146に送信することができる。
【0044】
いくつかの例では、世界オペレータモジュール142は、世界ビューの決定が、ある時間量にわたって、または特定のエリア内において、もはや必要とされないことを決定することができる。そのような例では、世界オペレータモジュール142は、レンダリングモジュール148に、複合現実デバイス110を使用して表示されるべきピクセル情報の1つ以上のフレームを送信することができる。いくつかの例では、世界オペレータモジュール142は、レンダリングモジュール148に、1つ以上のフレームの各フレームを表示すべき時間の指示も送信することができる。そのような例では、GPU140は、世界ビューを決定し、および/またはコンテンツを向け直す必要性を回避することができる。いくつかの例では、指示は、時間および特定の姿勢の両方に対応し得る。そのような例では、時間および特定の姿勢の両方が満たされるとき、レンダリングモジュール148は、複合現実デバイス110にフレームを表示させることができる。
【0045】
いくつかの例では、世界オペレータモジュール142は、世界ビューを知覚ビューモジュール144に送信することができる。そのような例では、世界オペレータモジュール142は、複合現実デバイス110の姿勢も知覚ビューモジュール144に送信することができる。いくつかの例では、知覚ビューモジュール144は、姿勢に従ってコンテンツキャッシュ146から世界ビュー内に示されるコンテンツを取得することができる。
【0046】
いくつかの例では、知覚ビューモジュール144は、コンテンツが複合現実デバイス110によって提示されるために正しく向けられるように、姿勢に基づいて、コンテンツを修正することができる。知覚ビューモジュール144が、姿勢に対応するようにコンテンツを修正した後、修正されたコンテンツは、レンダリングモジュール148に送信されることができる。レンダリングモジュール148は、修正されたコンテンツが複合現実デバイス110を使用して表示され得る(例えば、修正されたコンテンツが物理的環境に貼り付くことを確実にする)ように、修正されたコンテンツをレンダリングすることができる。いくつかの例では、レンダリングモジュール148は、修正されたコンテンツを物理的環境の表現と整列させ、修正されたコンテンツが正しい位置にあることを確実にすることができる。
【0047】
上で説明されるように、いくつかの例では、GPU140は、世界相互作用モジュール152をさらに含むことができる。世界相互作用モジュール152は、イベント150を受信することができる。イベント150は、複合現実デバイス110によって提示されるコンテンツに影響を及ぼし得る。いくつかの例では、世界相互作用モジュール152は、処理のために、イベント150を世界オペレータモジュール142に送信することができる。上で議論されるように、姿勢は、常時オン知覚モジュール124から世界オペレータモジュール142に送信されることができる。故に、世界オペレータモジュール142によって実施される処理は、イベント150および/または姿勢を利用することができる。
【0048】
いくつかの例では、イベント150は、1つ以上のセンサ(例えば、常時オンセンサ114および/または視覚センサ116)、1つ以上の遠隔デバイス等によって受信されたデータに関連付けられたアクションに関連付けられることができる。イベントは、ジェスチャであることができる。ジェスチャは、ユーザの付属器官の運動を含むことができる(例えば、指を左から右に移動させ、スワイプ運動を示す)。1つ以上の遠隔デバイスによって受信されたデータに関連付けられたアクションの例として、トーテムからの信号も、イベント150であることができる。トーテムは、イベント150をGPU140に送信し得るデバイスであることができる。いくつかの例では、トーテムは、通信モジュール(例えば、Bluetooth(登録商標))を含むことができる。トーテムの例は、コントローラまたはモノのインターネット(IoT)デバイスである。IoTデバイスを例証するために、住宅内のアラームデバイスが、説明され得る。例えば、アラームデバイスは、ある人物が住宅の玄関先に立っていることを示し得る。アラームデバイスからの指示に基づいて、GPU140は、人物の通知を複合現実デバイス110によって表示されるためにレンダリングすることができる。
【0049】
図2は、一実施形態による、複合現実を提示するためにVPU(例えば、VPU120)によって実施されるプロセス200の例を図示する。プロセス200は、センサデータ(例えば、画像、GPS場所等)を1つ以上のセンサから受信すること(205)を含む。1つ以上のセンサが、複合現実デバイス内に含まれ得る。いくつかの例では、センサデータは、1つ以上のセンサによって生成されたデータを含むことができる。1つ以上のセンサは、常時オンセンサ114(例えば、常時オンセンサ114)、視覚センサ(例えば、視覚センサ116)、および/または組み合わせセンサ(例えば、組み合わせセンサ118)を含むことができる。いくつかの例では、センサデータは、VPUの知覚フロントエンドモジュール(例えば、知覚フロントエンドモジュール122)によって受信されることができる。いくつかの例では、1つ以上のセンサは、高電力モードで動作するように設定されることができる(例えば、視覚センサ116は、高電力モードでは高フレームレートで、低電力モードでは低フレームレートで動作することができる)。
【0050】
プロセス200は、センサデータを使用して、複合現実デバイスの姿勢を識別すること(210)をさらに含む。いくつかの例では、姿勢は、知覚フロントエンドモジュールによって生成されることができる。そのような例では、知覚フロントエンドモジュールは、姿勢を常時オン知覚モジュール(例えば、常時オン知覚モジュール124)に送信することができる。いくつかの例では、複合現実システムのコンポーネントは、処理に時間がかかり得るので、現在の時間における姿勢は、コンテンツが提示されるであろうときの姿勢と異なり得る。そのような例では、姿勢は、将来の時間に関連付けられることができる。特に、姿勢は、コンテンツが複合現実デバイスを使用して提示されるであろう時間における複合現実デバイスの視野の予測であることができる。
【0051】
プロセス200は、複合現実デバイスの姿勢をCPU(例えば、CPU130)および/またはGPU(例えば、GPU140)に送信すること(215)をさらに含む。そのような例では、姿勢は、GPUの世界オペレータモジュール(例えば、世界オペレータモジュール142)に送信されることができる。いくつかの例では、姿勢は、同時に、CPUおよびGPUに送信されることができる。他の例では、姿勢は、CPUおよびGPUのうちの一方に、次いで、他方に送信されることができる。
【0052】
プロセス200は、センサデータを使用して、物理的環境の1つ以上の特徴を識別すること(220)をさらに含む。例えば、物理的環境内のオブジェクトの角または縁が、識別されることができる。いくつかの例では、1つ以上の特徴は、姿勢に関連付けられた視野および/または視野内に含まれない1つ以上のエリアに関することができる。物理的環境の1つ以上の特徴は、VPUが、物理的環境の画像を送信するのではなく、1つ以上の特徴を他のプロセッサに送信することを可能にすることができる。いくつかの例では、1つ以上の特徴は、画像が含むであろうピクセル情報の全てを含む必要なく、物理的環境を記述することができる。そのような例では、1つ以上の特徴は、コンポーネント間でやりとりするための物理的環境の表現を作成するために使用されることができる。プロセス200は、1つ以上の特徴をCPUに送信することをさらに含む(225)。
【0053】
図3は、一実施形態による、複合現実を提示するためにCPU(例えば、CPU130)によって実施されるプロセス300の例を図示する。そのような例では、CPUは、低電力モードから高電力モードに遷移することによって始動することができる。他の例では、CPUは、すでに高電力モードにあることができる。いくつかの例では、プロセス300は、プロセス200後に続くことができる。プロセス300は、表現がGPU(例えば、GPU140)のコンテンツキャッシュ(例えば、コンテンツキャッシュ146)内に記憶されていないこと、または、複合現実デバイスを使用して提示されるべきコンテンツの初期識別がコンテンツが動的であることを示すことのいずれかを仮定し得る。
【0054】
プロセス300は、物理的環境の1つ以上の特徴および/または物理的環境の1つ以上の画像を使用して、物理的環境の表現を生成すること(330)を含む。1つ以上の特徴は、画像が含むであろうピクセル情報の全てを含む必要なく、物理的環境を記述することができる。表現は、3次元における物理的環境のコンピュータでシミュレートされた再現であることができる。いくつかの例では、CPUおよび/またはVPU(例えば、VPU120)は、表現を生成することができる。
【0055】
プロセス300は、物理的環境とともに提示されるべきコンテンツを決定すること(335)をさらに含む。いくつかの例では、コンテンツは、コンテンツが物理的環境内に現れるように、物理的環境のビュー上にオーバーレイされる仮想コンテンツであることができる。いくつかの例では、コンテンツは、CPU上で実行されるアプリケーションを使用して決定されることができる。アプリケーションは、表現および/または複合現実デバイスの姿勢に基づいて、コンテンツを決定することができる。
【0056】
プロセス300は、表現をコンテンツで更新することをさらに含む(340)。いくつかの例では、表現は、決定されたコンテンツを表現の中に挿入することによって更新されることができる。他の例では、表現は、コンテンツが正しい位置および向きで設置されるために必要とされる情報を表現内に含むことができるように、表現に対応する位置情報をコンテンツに関連付けることによって更新されることができる。
【0057】
プロセス300は、コンテンツおよび更新された表現をGPUに送信すること(345)をさらに含む。いくつかの例では、CPUは、コンテンツをGPUに送信することができる。そのような例では、コンテンツは、GPUが複合現実デバイスのためのコンテンツをレンダリングすることを可能にし得るピクセル情報であることができる。プロセス300は、CPUを低電力モードに遷移させること(350)をさらに含む。いくつかの例では、CPUは、コンテンツおよび更新された表現が送信されることに応答して、低電力モードに遷移することができる。
【0058】
図4は、複合現実デバイス(例えば、複合現実デバイス110)を使用して動的コンテンツを提示するためのプロセス400の例を図示する。プロセス400の開始時、CPU(例えば、CPU130)および/またはVPU(例えば、VPU120)は、低電力モードで動作するように設定されることができる。
【0059】
プロセス400は、デバイスの姿勢(例えば、複合現実デバイス)を受信すること(405)を含む。いくつかの例では、姿勢は、GPU(例えば、GPU140)の世界オペレータモジュール(例えば、世界オペレータ142)によって受信されることができる。そのような例では、姿勢は、VPUから受信されることができる。いくつかの例では、姿勢は、上で説明されるように、複合現実デバイスの周囲の物理的環境のセンサデータを使用して識別されることができる。そのような例では、姿勢は、複合現実デバイスの向きおよび/または場所であることができる。
【0060】
プロセス400は、物理的環境の表現を取得することをさらに含む(410)。いくつかの例では、世界オペレータモジュールは、表現を取得することができる。そのような例では、物理的環境の表現は、GPUのコンテンツキャッシュ(例えば、コンテンツキャッシュ146)内に記憶されることができる。いくつかの例では、表現は、上で説明される更新された表現であることができる。
【0061】
プロセス400は、複合現実デバイスによって提示されるべきコンテンツを識別すること(415)をさらに含む。いくつかの例では、識別は、GPUの世界オペレータモジュールおよび/または知覚ビューモジュール(例えば、知覚ビューモジュール144)によって実施されることができる。識別は、姿勢に対応する表現の一部を決定することを含むことができる。例えば、複合現実デバイスの視野は、表現の一部であることができる。そのような例では、姿勢は、複合現実デバイスが面している方向を示すことができる。
【0062】
表現の一部が識別されると、世界オペレータモジュールおよび/または知覚ビューモジュールは、表現の一部内にあるコンテンツを識別することができる。世界オペレータモジュールが、コンテンツを識別する場合、世界オペレータモジュールは、コンテンツの1つ以上の指示と、コンテンツに関する姿勢または複合現実デバイスの姿勢のいずれかとを知覚ビューモジュールに送信することができる。知覚ビューモジュールがコンテンツを識別する場合、知覚ビューモジュールは、コンテンツを識別するために、表現および/または姿勢を受信していることができる。
【0063】
プロセス400は、コンテンツが動的であることを決定すること(420)をさらに含む。いくつかの例では、コンテンツは、表現内に含まれる1つ以上の指示に基づいて、動的であると決定されることができる。他の例では、コンテンツは、コンテンツがコンテンツキャッシュ内で見つかるかどうかに基づいて、動的であると決定されることができる。いくつかの例では、コンテンツが動的であると決定することは、世界相互作用が生じたかどうかを決定することに基づくことができる。そのような例では、世界相互作用(例えば、イベント150)は、GPUの世界相互作用モジュール(例えば、世界相互作用モジュール152)によって受信され、識別されることができる。世界相互作用が生じた場合、コンテンツは、動的であると決定されることができる。
【0064】
プロセス400は、メッセージをCPUに送信すること(425)をさらに含む。いくつかの例では、メッセージは、コンテンツが動的であることの決定に応答して、送信されることができる。いくつかの例では、メッセージは、表現および/または姿勢を含むことができる。いくつかの例では、メッセージは、CPUに、提示されるべきコンテンツを決定することと、コンテンツをGPUに送信することとを含む
図3に説明される1つ以上のステップを実施させることができる。
【0065】
プロセス400は、コンテンツをGPUによって受信すること(430)をさらに含む。いくつかの例では、コンテンツは、コンテンツキャッシュによって受信されることができる。そのような例では、コンテンツは、CPUによって決定されることができる。いくつかの例では、コンテンツがコンテンツキャッシュによって受信された後、知覚ビューモジュールは、コンテンツをコンテンツキャッシュから取得することができる。いくつかの例では、コンテンツは、コンテンツの指示をコンテンツキャッシュに送信することによって取得されることができる。そのような例では、指示は、コンテンツの姿勢を含むことができる。他の例では、コンテンツは、デフォルト姿勢におけるコンテンツの3次元表現であることができる。そのような例では、知覚ビューモジュールは、コンテンツの姿勢を変化させ、複合現実デバイスの姿勢に対応させることができる。いくつかの例では、知覚ビューモジュールは、第1のコンテンツと第2のコンテンツとの間の正しいオクルージョン、および第1のコンテンツと物理的環境との間の正しいオクルージョンを確実にすることもできる。オクルージョンは、物理的環境内のオブジェクトが、少なくとも部分的に、物理的環境上にオーバーレイされるためのコンテンツのビューを遮断するであろう時間を記述することができる。
【0066】
プロセス400は、コンテンツを物理的環境の表現に整列させること(435)をさらに含む。整列は、コンテンツが表現に対応する位置に現れるように、コンテンツを複合現実デバイスの視野内に位置付けることを含むことができる。言い換えると、整列は、コンテンツを物理的環境に対して追随させることができる。いくつかの例では、整列は、GPUのレンダリングモジュール(例えば、レンダリングモジュール148)によって実施されることができる。プロセス400は、整列させられたコンテンツを複合現実デバイスに送信すること(440)と、複合現実デバイスを使用して整列させられたコンテンツを提示すること(445)とをさらに含む。
【0067】
図5は、一実施形態による、複合現実デバイスを使用して予測可能なコンテンツを提示するためのプロセス500の例を図示する。プロセス500は、複合現実デバイスを提供することを含む。複合現実デバイスは、VPU(例えば、VPU120)と、1つ以上のセンサ(例えば、常時オンセンサ114、視覚センサ116、および/または組み合わせセンサ118)と、ディスプレイとを含むことができる(505)。いくつかの例では、センサは、カメラ、加速度計、ジャイロスコープ、トーテム、または全地球測位システムであることができる。その他のセンサも、使用されることができる。
【0068】
プロセス500は、物理的環境に関連付けられたセンサデータを取得すること(510)をさらに含む。いくつかの例では、センサデータは、常時オンセンサ(例えば、常時オンセンサ114)、視覚センサ(例えば、視覚センサ116)、組み合わせセンサ(例えば、組み合わせセンサ118)、または任意のそれらの組み合わせから受信されることができる。いくつかの例では、センサデータは、VPUの知覚フロントエンドモジュール(例えば、知覚フロントエンドモジュール122)によって取得されることができる。
【0069】
プロセス500は、センサデータを使用して、複合現実デバイスの姿勢を決定すること(515)をさらに含む。いくつかの例では、姿勢は、複合現実デバイスの構成空間内におけるものであることができる。そのような例では、姿勢は、複合現実デバイスの位置および向きを定義することができる。
【0070】
プロセス500は、複合現実デバイスの姿勢をGPU(例えば、GPU140)に送信すること(520)をさらに含む。いくつかの例では、GPUは、デバイスから遠隔にあることができる。プロセス500は、姿勢に対応するコンテンツおよび/または物理的環境の表現を識別すること(525)をさらに含む。いくつかの例では、コンテンツは、予測可能なコンテンツであることを識別されることができる。そのような例では、コンテンツは、表現内の1つ以上のインジケータに基づいて、予測可能なコンテンツであることを識別されることができる。他の例では、コンテンツは、GPUによって識別されることに先立って、コンテンツがGPUのコンテンツキャッシュ(例えば、コンテンツキャッシュ146)内に記憶されているかどうかに基づいて、予測可能なコンテンツであることを識別されることができる。
【0071】
いくつかの例では、表現は、コンテンツがレンダリングされるべきではないことを示し得る。そのような例では、ステップ530-540は、スキップされることができる。加えて、いくつかの例では、決定は、コンテンツが提示されるべきではない持続時間から行われることができる。そのような例では、持続時間は、時間的または空間的であることができる。
【0072】
コンテンツが提示されるべきではないときを例証するために、居間に居るユーザのユースケースが、説明され得る。ユーザが洗面所に歩いて行くとき、次の10メートルに、デジタルコンテンツが存在しないであろうと決定が行われ得る。その時間中、10メートルを過ぎたかどうかを決定するために必要とされるもの以外の全てが、アイドルであることができる。
【0073】
プロセス500は、コンテンツを物理的環境の表現に整列させること(530)と、整列させられたコンテンツを複合現実デバイスに送信すること(535)と、複合現実デバイスを使用して、整列させられたコンテンツを提示すること(540)とをさらに含む。いくつかの例では、コンテンツを整列させることは、複合現実デバイスの姿勢に対してコンテンツを表示する向きを決定することと、コンテンツを表示するための向きに基づいて、コンテンツを修正することとを含むことができる。いくつかの例では、コンテンツは、GPUの知覚ビューモジュール(例えば、知覚ビューモジュール144)によって修正されることができる。修正は、コンテンツを表示のために正しい向きであるように構成することを含むことができる。
【0074】
いくつかの例では、VPUは、センサデータがより低速のレートで受信され得ることを決定することができる。そのような例では、1つ以上のセンサは、低電力モードで動作するように設定されることができる。いくつかの例では、VPUは、1つ以上のセンサを低電力モードに設定することができる。いくつかの例では、1つ以上のセンサの低電力モードは、1つ以上のセンサのうちのセンサに、より少ない頻度で(より低いレートで)データを生成させることができる。いくつかの例では、1つ以上のセンサの低電力モードは、1つ以上のセンサのうちのセンサに、データを生成させないことができる。加えて、いくつかの例では、1つ以上のセンサのうちのセンサの組は、センサの組が必要とされないとき、アイドルであることができる。
【0075】
図5に図示される具体的ステップは、一実施形態による、複合現実デバイスを使用して複合現実コンテンツを提示する特定の方法を提供することを理解されたい。ステップの他のシーケンスも、代替実施形態に従って実施され得る。例えば、本開示の代替実施形態は、異なる順序で上で概略されたステップを実施し得る。さらに、
図5に図示される個々のステップは、個々のステップの必要に応じて種々のシーケンスで実施され得る複数のサブステップを含み得る。さらに、追加のステップが、特定の用途に応じて追加または除去され得る。当業者は、多くの変形例、修正、および代替を認識するであろう。
【0076】
プロセス200、300、400、および500は、論理フロー図として図示され、その動作は、ハードウェア、コンピュータ命令、またはそれらの組み合わせ内に実装され得る動作のシーケンスを表す。コンピュータ命令のコンテキストでは、動作は、1つ以上のプロセッサによって実行されると、列挙される動作を実施する1つ以上のコンピュータ読み取り可能な記憶媒体上に記憶されるコンピュータ実行可能命令を表す。概して、コンピュータ実行可能命令は、特定の機能を実施する、または特定のデータタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。動作が説明される順序は、限定として解釈されることを意図するものではなく、任意の数の説明される動作が、プロセスを実装するために、任意の順序で、および/または並行して組み合わせられることができる。
【0077】
加えて、プロセス200、300、400、および500は、実行可能命令で構成された1つ以上のコンピュータシステムの制御下で実施され得、1つ以上のプロセッサ上で集合的に実行されるコード(例えば、実行可能命令、1つ以上のコンピュータプログラム、または1つ以上のアプリケーション)として、ハードウェアによって、またはそれらの組み合わせによって、実装され得る。コードは、例えば、1つ以上のプロセッサによって実行可能な1つ以上の命令を備えているコンピュータプログラムの形態において、コンピュータ読み取り可能な記憶媒体上に記憶され得る。コンピュータ読み取り可能な記憶媒体は、非一過性であり得る。
【0078】
図6-10は、種々の実施形態による、複合現実システムのコンポーネントの可能な構成を説明する。可能な構成は、各構成の具体的詳細を提供するが、当業者は、本開示がコンポーネントのための他の構成も対象とすることを認識するであろう。
【0079】
図6は、一実施形態による、中央処理ユニット(CPU)600のブロック図の例を図示する。CPU600は、ローカルおよび/または外部メモリ内に記憶されるソフトウェア命令を実行することができる。CPU600は、制御コンポーネント(例えば、制御コンポーネント608)、1つ以上の機能ユニット(例えば、機能ユニット604)、メモリ(例えば、キャッシュ612およびランダムアクセスメモリ(RAM)616)、または任意のそれらの組み合わせのうちの少なくとも1つ以上のものを含むことができる。制御コンポーネント608は、入力および出力(I/O)、命令スケジューリング、デコード、ロード/記憶動作、およびCPU600に関する情報のやりとりを制御することによって、CPU600の動作を指示することができる。加えて、制御コンポーネント608は、内部時計および機能ユニット604(例えば、同期機能ユニット)を使用したタイミング信号の生成を通して、命令の処理を調整することができる。
【0080】
機能ユニット604は、CPU600の基本機能性を表すことができる。いくつかの例では、機能ユニット604は、ソフトウェア命令によって支持されるような動作および/または計算を実施するユニットであることができ、タイプおよび能力が変動し得る。例えば、機能ユニット604は、算術論理ユニット(ALU)、浮動点ユニット(FPU)、メモリインターフェースユニット等であることができる。ALUは、1つ以上の基本算術および/またはビット演算を1つ以上の整数ベースの2進数に実施することができる。対照的に、FPUは、1つ以上の算術および/またはビット演算を1つ以上の浮動小数点数(例えば、実数の近似)に実施することができる。メモリインターフェースユニットは、制御コンポーネント608にRAMまたはハードディスクドライブ(HDD)等の外部メモリおよびキャッシュ612およびRAM616等のオンボードメモリへのインターフェースを提供することができる。いくつかの例では、機能ユニット604は、同種の組の1つ以上のALU、1つ以上のFPU、1つ以上のメモリインターフェースユニット等を含むことができる。他の例では、機能ユニット604は、限定ではないが、2つのALU、FPU、およびメモリインターフェースユニット等の異なるタイプの前述の機能ユニットの任意の組み合わせを含むことができる。概して、CPU600は、一般的実行ユニットであって、短待ち時間を伴い、任意のタイプの命令を実行するように動作可能であることができる。さらに、CPU600は、4つの機能ユニット604を描写するが、CPU600は、本開示の精神および範囲から逸脱することなく、任意の数の機能ユニット604を含むことができる。
【0081】
いくつかの例では、機能ユニット604は、持続的メモリ(例えば、RAM616)内に記憶されるプログラム命令を処理することができない。そのような例では、制御コンポーネント608は、CPU600の命令セットアーキテクチャに従って、メモリ内に記憶されるソフトウェア命令をデコードし、1つ以上の個々のオペレータ、オペランド、および/または制御信号を機能ユニットに渡すことができる。例えば、制御コンポーネント608は、命令セットアーキテクチャに従って、ソフトウェア命令を分析し、オペレータに対応する1つ以上のビットおよび1つ以上のビットによって定義されたオペレータ(例えば、加算、減算等)を決定することができる。制御コンポーネント608は、オペランドおよび/または制御信号のために動作することもできる。いくつかの例では、命令セットアーキテクチャは、固定長命令(例えば、全ての命令は、同じ数のビットを有する)を要求し得る。しかしながら、ある他の例では、制御コンポーネント608は、可変長命令(例えば、第1の命令は、第2の命令と比較して、異なる数のビットを含むことができる)をデコードするように動作可能であることができる。命令セットアーキテクチャが、可変命令長を有効にするとき、命令は、複数のバイトを含むことができ、他の命令より多いまたはより少ないバイトを含むことができる。例えば、第1の命令は、4バイト(すなわち、32ビット)を含むことができ、第2の命令は、2バイト(すなわち、16バイト)を含むことができる。制御コンポーネント608は、最後のバイト内の特別なキャラクタを認識することによって、可変命令の終了を識別することができる。CPU600は、ソフトウェア命令を適切にデコードおよび/または実行するために、命令セットアーキテクチャに従って、命令を予期することができる。
【0082】
ALUおよびFPUは、2つのオペランド、オペレータ、および少なくとも1つの制御信号(タイミング信号等)を表す少なくとも4つの入力を含むことができる。タイミング信号は、制御コンポーネント608が、機能ユニットが入力を処理する時間を管理することを可能にすることができる。例えば、制御コンポーネント608は、タイミング信号を使用して、同時に、特定の順序において、非同期して、またはソフトウェア命令もしくは制御コンポーネント608によって必要とされ得るような任意の他の様式において、ALU(または他の機能ユニット)を動作させることができる。ALUまたはFPUは、算術演算の結果および少なくとも1つの制御信号を出力することができる。出力制御信号は、CPU600のステータスを示すことができ、後続算出においてALUまたはFPUによって(入力として)使用される関連演算のために別のALUに渡されること、またはレジスタ内に記憶されることができる。例えば、出力信号は、算術結果が、負、ゼロ、またはオーバーフロー(例えば、演算が、大きすぎて機能ユニットによって表すことができない数をもたらした)であったことを示すことができる。
【0083】
制御コンポーネント608は、命令をメモリ(例えば、キャッシュ612およびRAM616)からフェッチすること、デコードすること、および/またはスケジュールすることができる。制御コンポーネント608は、命令パイプラインを動作させ、1つ以上のデコードされた命令を各機能ユニット上で並列または半並列様式でスケジュールすることができる。例えば、以下の3つの算出、すなわち、x=5+6、y=1+2、z=x+yを有するソフトウェアプログラムは、少なくとも部分的に並行して実行されることができる。x=5+6およびy=1+2は、互いに依存しないので、xおよびy算出の両方は、並行して実行されることができる。しかし、z算出は、最初の2つの方程式が実行を完了するまで待たなければならない。命令パイプラインは、全て3つの命令をスケジュールし、それらをわずか2つのサイクルで完了させ得る。制御コンポーネント608は、命令のスケジューリングを管理し、一度に動作している機能ユニットの数を最大化し、それによって、最終結果を生成するために必要である総時間を最小化することができる。
【0084】
いくつかの例では、制御コンポーネント608の一般的フローは、1つ以上の命令をメモリからフェッチすることと、1つ以上の命令をデコードおよび解析することと、命令スケジュールを展開すること(例えば、命令パイプラインを通して)と、命令スケジュールに従って1つ以上のタイミング信号とともに処理するために、1つ以上の命令を1つ以上の機能ユニット604に渡すことと、結果を1つ以上の機能ユニット604から受信することと、結果をメモリ内に戻し記憶することとを含むことができる。
【0085】
制御コンポーネント608は、後続命令を処理する前、中間結果および1つ以上のデコードされた命令をキャッシュ612またはRAM616内に記憶することができる。しかしながら、制御コンポーネント608は、メモリ階層に従って、データを記憶することができ、それは、記憶されるデータのタイプに応じて、1つの形態のメモリを別の形態のメモリより優先させ得る。いくつかの例では、キャッシュ612は、キャッシュ612と制御コンポーネント608および1つ以上の機能ユニット604の近接度に起因して、より低いコスト(例えば、待ち時間および電力)を有することができる。そのような例では、制御コンポーネント608は、データが差し迫ってまたは頻繁にロードされるとき、RAM616よりキャッシュ612を優先させることができる。キャッシュ612は、有限かつ貴重であり得るので、直ちに要求されないこともあるデータは、RAM616または外部不揮発性メモリ(図示せず)内に記憶され得る。例えば、上記の算出例および単一のみのALUの場合。制御コンポーネント608は、第1の算出(例えば、x=5+6)をフェッチし、処理するためにそれをALUに渡し、結果をキャッシュ612に返すことができる。制御コンポーネント608は、次いで、第2の算出(例えば、y=1+2)をALUに渡し、第2の下位算出の結果をキャッシュ612内に記憶し、次いで、最後の算出(例えば、z=x+y)を第1および第2の算出からの結果とともにフェッチし得る。最後の命令の結果は、完了された命令を表し、直ちに必要とされないこともあり、したがって、RAM616内または不揮発性メモリ内に外部で記録され得る。
【0086】
キャッシュ612は、1つ以上のロードおよび記憶動作のために低減させられた待ち時間を提供する任意のランダムアクセスメモリであることができる。例えば、キャッシュ612は、静的ランダムアクセスメモリ(SRAM)であることができる。いくつかの例では、CPU600は、複数のコア(例えば、2つのコア、4つのコア、8つのコア、またはそれを上回るコア)を含むことができ、各コアは、制御コンポーネント(例えば、制御コンポーネント608)と、1つ以上の機能ユニット(例えば、機能ユニット604)と、キャッシュ(例えば、キャッシュ612)とを含むことができる。そのような例では、CPU600は、複数のコアによって共有され得る全体的キャッシュ(図示せず)をさらに含むことができる。
【0087】
いくつかの例では、キャッシュ612は、1つ以上のレベル(例えば、L1、L2、L3、およびL4)を含むことができ、ここで、L1キャッシュは、最短アクセス待ち時間を有し、L4キャッシュは、最長アクセス待ち時間を有する。いくつかの例では、L1キャッシュは、CPU600の他のコアによって共有されず、特定のCPUコア専門であるキャッシュ612を表すことができる。そのような例では、L2-L4キャッシュは、CPU600の複数のコア間で共有される全体的キャッシュの一部であることができる。L4キャッシュは、CPU600の内部または外部にあることができ、動的RAM(DRAM)または内蔵動的RAM(eDRAM)等のSRAMまたは任意の他のタイプのRAMを含むことができる。CPU600は、種々のレベルを伴うキャッシュメモリを含む1つまたは任意の数のコアおよび任意の数またはタイプのメモリを含むことができる。
【0088】
図7は、一実施形態による、CPU700の内部コンポーネント(例えば、
図6のCPU600)のブロック図の例を図示する。上で述べられたように、CPU700の一般的フローは、フェッチすること、デコードすること、および実行することであり得る。命令を実行するプロセスは、プログラムカウンタ708を用いて開始することができ、プログラムカウンタ708は、プログラム内の1つ以上の命令のための実行の順序を制御することができる。プログラムカウンタ708の現在のプログラムカウンタ値は、実行されるべき命令のアドレス場所であることができる。現在のプログラムカウンタ値は、メモリインターフェース716に渡されることができ、メモリインターフェース716は、CPU700の内部および/または外部メモリへのアクセスを有効にすることができる。メモリインターフェース716は、メモリ728内のプログラムカウンタ値に関連付けられたアドレスにアクセスし、命令を命令レジスタ704に渡すことができる。メモリ728は、揮発性および/または不揮発性メモリであり得る。命令レジスタ704は、短アクセス待ち時間を伴う短期メモリ(
図6のキャッシュ612等)であることができる。命令レジスタ704は、命令を機能ユニット720に渡すこと、または、命令がデコードされる必要がある場合、それを命令デコーダ712に渡すことができる。
【0089】
命令デコーダ712は、CPU700の命令セットアーキテクチャに従って、機能ユニット720の実行を管理することができる。命令デコーダ712は、1つ以上のビットから成る2進数を命令レジスタ704から取り込み、第1のオペランド、第2のオペランド、オペレータ、および記憶場所に対応するビットを識別することができる。命令セットアーキテクチャのタイプは、異なり得、それぞれ、異なる規定に従い得る。例えば、縮小命令セットコンピューティング(RISC)アーキテクチャ(命令長は、32ビットである)において定数を変数に加算する命令のために、最初の6ビットは、オペレータ(例えば、この例では、加算)に対応し得、次の5ビットは、結果の記憶アドレスに対応し得、次の5ビットは、第1のオペランドに対応し得、最後の16ビットは、定数に対応し得る。命令デコーダ712は、オペレータ、1つ以上のオペランド、および命令の他の側面が特定の順序で現れることを予期することができる。命令デコーダ712は、命令セットアーキテクチャが命令デコーダ712に既知であることを所与として、任意の命令セットアーキテクチャ上で動作することができる。オペレータおよびオペランドは、デコードされると、機能ユニット720に渡されることができ、機能ユニット720は、動作を実行することができる。
【0090】
機能ユニット720(例えば、ALU、FPU等)は、入力を命令デコーダ712から受信し、出力を生成することができる。出力が、命令の結論を表す場合、出力は、出力をメモリインターフェース716(出力をメモリ728内に記憶する)に、または出力が後続命令によって使用される場合、命令レジスタ704に渡すことができる。命令が不完全である場合、機能ユニット720の出力は、結果をアキュムレータ724に渡すことができる。アキュムレータ724は、中間算術および論理を記憶するレジスタであることができる。アキュムレータ724は、機能ユニット720の複数回の通過を要求する1つ以上の動作のために、機能ユニット720の出力を蓄積することができる。機能ユニット720の各反復は、それが後続反復において機能ユニット720によって再使用され得るようにアキュムレータ724に渡されることができるか、または、完了すると、記憶のためにメモリインターフェース716に渡されることができる。例えば、ALUが、命令y=5^2を実行する場合、ALUは、命令をy=5+5+5+5+5として処理することができる。しかしながら、ALUは、オペランドあたり2つのオペレータのみをとることができるので、ALUは、加算演算を4回実行することができる。そのような例では、ALUは、10+5を2回目の反復で、15+5を3回目の反復で、および20+5を最後の反復で処理することができる。最終結果(すなわち、25)に到達すると、アキュムレータからの出力は、メモリ728内に記憶されることができる。機能ユニット720およびアキュムレータ724は、2進演算においてシフト加算を使用して、乗算を処理することもできる。機能ユニット720が、演算の最後の反復を処理すると、結果は、メモリ728に渡されることができる。
【0091】
命令が完了すると、プログラムカウンタ708は、プログラムカウンタ値が次の命令のメモリアドレスと等しくなるように、命令セットアーキテクチャに従って、命令の長さ(例えば、16ビット、32ビット等)だけインクリメントされることができる。プログラムカウンタ708は、次いで、プログラムが完了するまで、その次の命令をメモリインターフェース716を通してロードし、上で説明されるプロセスを継続することができる。
【0092】
図8は、一実施形態による、グラフィック処理ユニット(GPU)800のブロック図の例を図示する。GPUは、本開示全体を通して具体的に述べられたが、VPUが、いくつかの例では、GPUの機能性に取って代わるために使用されることができることに留意されたい。いくつかの例では、GPU800は、マイクロプロセッサであることができる。そのような例では、GPU800の独特のアーキテクチャが、CPU(例えば、CPU600/700)と異なるプロセス能力を提供することができる。CPU600/700とGPU800との間の差異は、各ハードウェア要素の最適化に関し得る。CPU600/700は、大量のキャッシュ612を使用することによって、短待ち時間(フェッチから実行まで)を伴って、スレッド(例えば、全体的プログラムの別々のサブプログラム)を実行するように設計されることができる。対照的に、GPU800は、多数の類似命令を並行して実行するように設計されることができる。例えば、GPU800は、16のストリーミングマルチプロセッサ(SM)816を含むことができ、各SM816は、スレッドのブロックを別のSM816と並行して実行することができる。いくつかの例では、GPU800は、SM816の数と等しいスレッドのブロックの数を一度に実行することができる。いくつかの例では、GPU800は、多数の反復的演算を実行することにより長けており、並列SM816の有効性を最大化することができる。GPU800は、多くのSM816を含むことができる。16のSM816が、
図8に示されるが、GPU800は、任意の数のSM816を含み得る。
【0093】
いくつかの例では、各SMは、レベル2(L2)キャッシュ812を共有することができる。L2キャッシュ812を共有することによって、第1のSM816は、第1のSM816および第2のSM816が並行して実行するとき、第2のSM816の中間結果を使用することができる。L2キャッシュ812は、短待ち時間ロード/記憶動作を有効にし、データが異なるSM816間でやりとりされることを可能にすることができる。
【0094】
いくつかの例では、1つ以上のメモリコントローラ(例えば、メモリコントローラ804)は、ホストインターフェース808を通して、SM816と、L2キャッシュ812と、外部デバイスまたはシステム(図示せず)との間のインターフェースを提供することができる。メモリコントローラ804は、より少ないまたは無期限に使用されるデータの記憶のために、L2キャッシュ812のものより長い待ち時間を伴うランダムアクセスメモリ(RAM)を含むことができる。例えば、メモリコントローラ804は、限定ではないが、DRAM、SRAM、eDRAM等、または任意のそれらの組み合わせを含むことができる。いくつかの例では、メモリコントローラ804は、任意のメモリを含まず、むしろ、GPU800が、RAM、読み取り専用メモリ(ROM)、HDD、フラッシュメモリ等の外部揮発性および/または不揮発性メモリにアクセスすることを可能にし得る。加えて、メモリコントローラ804は、ホストインターフェース808を通して、GPU800の外部のハードウェアまたはソフトウェアから内部RAMまたはL2キャッシュ812へのアクセスを促進することができる。
【0095】
いくつかの例では、GPU800によって実行される命令は、
図6のCPU600または
図7のCPU700、視覚処理ユニット(VPU)(
図10に描写される)、または外部メモリ(例えば、RAM、ROM、HDD、フラッシュメモリ等)等の外部ソースから受信されることができる。ホストインターフェース808は、インターフェースを提供することによって、外部ソースアクセスをGPU800のコンピューティングリソースに提供することができる。ホストインターフェース808から受信された情報は、メモリコントローラ804に渡されることができ、それは、必要に応じて、関連データをL2キャッシュ812または個々のSM816のいずれかに渡すことができる。
【0096】
GPU800は、多数のスレッドを並行して実行可能であることによって、CPU(例えば、CPU600/700)のアーキテクチャと異なり得る。メモリコントローラ804は、ソフトウェア命令に従ってSM816上で実行される同時スレッドを管理および調整することができる。例えば、GPU800は、1080pビデオの単一フレームを更新するタスクが課され得る。そのような例では、GPU800は、各フレームのピクセル(2,073,600ピクセルを含み得る)のためのピクセル値を計算する必要があり得る。そのような命令のために、GPU800は、2百万回にわたってピクセルに対して同じ計算を解決しなければならない。メモリコントローラ804は、単一タスクにおいて、スレッド(例えば、1つ以上のスレッド)のブロックを区別することによって、GPU800の同時処理能力を活用することができ、各SM816は、スレッドのブロックを並行して実行する。複数のSM816の並列処理能力を活用することによって、GPU800は、フレームレート1~240フレーム/秒(またはある他のフレームレート)を伴うビデオをシームレスにレンダリングするための計算を提供することができる。
【0097】
いくつかの例では、GPU800は、値を変化させたフレームの部分のみを更新することによって、電力を節約することができる。例えば、第1のフレームの一部が、黒色であり、第2のフレームの同じ部分が、同じ色である場合、GPU800は、変化していないフレームの部分のための値を計算および更新することにリソースを費やす必要はない。そのような例では、デルタ(フレーム間の差異)のみが、処理される必要がある。メモリコントローラ804は、SM816上で実行されるスレッドを調整し、GPU800の並列処理能力をもたらし、GPU800が各フレームを更新し、フレームレートに従ってフレームを表示することを可能にすることができる。いくつかの例では、メモリコントローラ804は、多くのSM816上で実行される個々のスレッドを管理する単一統合スレッドを表す、ギガスレッドと同様に動作することができる。いくつかの例では、GPU800は、グラフィックを処理するために特化されたCPUであることができる。
【0098】
図9は、一実施形態による、単一のストリーミングマルチプロセッサ900(
図8のストリーミングマルチプロセッサ816等)のブロック図の例を図示する。単一のSM900は、複数の実行ブロック(例えば、制御コンポーネント、キャッシュ、および1つ以上の機能ユニットは、単一の実行ブロックであることができる)を含むことができ、各実行ブロックは、単一のスレッドを実行することができる。
図9は、4つの実行ブロック、すなわち、制御コンポーネント904、キャッシュ908、および機能ユニット912を含む第1のブロックと、制御コンポーネント916、キャッシュ920、および機能ユニット924を含む第2のブロックと、制御コンポーネント928、キャッシュ932、および機能ユニット936を含む第3のブロックと、制御コンポーネント940、キャッシュ944、および機能ユニット948を含む第4のブロックとを描写する。SMは、任意の数の実行ブロックを含むことができる。いくつかの例では、単一のSM900は、スレッドのブロック内の各スレッドを実行ブロックに割り当てることによって、スレッドのブロックを実行することができる。そのような例では、スレッドの各ブロックは、並行して実行され、単一のスレッドが実行されるためにかかる時間内で完了することができる。いくつかの例では、実行ブロックのキャッシュのメモリ容量は、限定され得る(例えば、キャッシュ908は、キャッシュ952より小さくあり得、キャッシュ952は、
図8のL2キャッシュ812より小さくあり得る)。実行ブロックのキャッシュは、各機能ユニット(例えば、FU912)に渡される1つ以上のオペレータ、オペランド、タイミングおよび/またはステータス信号、または任意のそれらの組み合わせを記憶することができる。実行ブロックのキャッシュは、各機能ユニットからの結果(中間または最終)も記憶することができる。制御コンポーネント(
図6の制御コンポーネント608に類似する)は、フェッチ、デコード、および実行の命令実行サイクルに従うことができる。制御コンポーネント608は、そのキャッシュ(すなわち、キャッシュ908、920、932、944)内の1つ以上の命令をフェッチし、単一のSM900によって利用される命令セットアーキテクチャに従って、1つ以上の命令をデコードすることができる。任意の命令セットアーキテクチャが、制御内のデコーダが命令セットアーキテクチャをデコードするための対応するデコード能力を有することを所与として、実行ブロックによって採用されることができる。制御コンポーネントは、デコードされた命令を制御コンポーネントに関連付けられた機能ユニットに渡すことができる。例えば、制御コンポーネント904は、1つ以上のデコードされた命令を機能ユニット912に渡すことができる一方、制御コンポーネント916は、1つ以上のデコードされた命令を機能ユニット924に渡すことができる等となる。
【0099】
命令の組の結果(1つ以上の機能ユニットによってデコードおよび実行されると)は、キャッシュ952に渡される前、実行ユニットのローカルキャッシュ内に記憶されることができる。いくつかの例では、キャッシュ908、920、932、および944は、各キャッシュが他の実行ブロック間で共有されないので、レベル1(L1)キャッシュを表し得る。そのような例では、キャッシュ952は、多くの実行ブロック間で共有され得るので、レベル2(L2)キャッシュを表し得る。例えば、ホストインターフェース956は、スレッドブロックを
図8のメモリコントローラ804から受信し、分配に先立って、対応するスレッドをキャッシュ952内に記憶することができる。いくつかの例では、スレッドのブロックの各スレッドは、各実行ブロックに分配されることができる。いくつかの例では、スレッドのブロックは、単一のSM900内の実行ブロックの数と同じ数またはより少ないスレッドを含むことができる。スレッドの各ブロックのための実行時間は、最長の個々のスレッドの実行時間と等しくあり得る。他の例では、スレッドのブロックは、単一のSM900が実行ブロックを有するより多くのスレッドを含むことができる。そのような例では、単一のSM900は、例えば、最短スレッドと最長スレッドとを同じ実行ブロック上で実行させるようにスケジュールすることによって実行時間を最小化する様式で、実行ブロック間のスレッドをスケジュールすることができる。
【0100】
完了されたスレッドの結果は、キャッシュ952内に記憶され、続いて、メモリコントローラ804に渡されるように、ホストインターフェース956に渡されることができる。いくつかの例では、各スレッドの中間結果は、各スレッドが完了するにつれて、ホストインターフェース956を通して渡されることができる。他の例では、単一のSM900は、スレッドの各全体ブロックの結果をメモリコントローラ804に渡す前、スレッドのブロック全体が完了するまで待つことができる。
【0101】
図10は、1つ以上のセンサ(例えば、常時オンセンサ114、視覚センサ116、組み合わせセンサ118、ビデオおよび静止カメラ、加速度計、光の時間等)からの入力を管理するための視覚処理ユニット(VPU)1000のブロック図の例を図示する。VPUは、本開示全体を通して具体的に述べられたが、GPUが、いくつかの例では、VPUの機能性に取って代わるために使用されることができることに留意されたい。VPU1000は、命令を並行して処理するためのプロセッサのアレイを含むことができる。プロセッサのアレイは、個々のオペランドではなく、1つ以上の命令をデータセット全体に一度に実行することによって、大量の未加工データを処理するように動作可能であることができる。いくつかの例では、プロセッサのアレイのプロセッサは、ベクトル超長命令語(VLIW)プロセッサ1004であることができる。ベクトルVLIWプロセッサ1004は、CPU(例えば、
図6のCPU600)が処理し得るスカラー(例えば、単数データ)ではなく、ベクトルと呼ばれる1つ以上のデータのアレイに動作することができる。加えて、ベクトルVLIWプロセッサ1004は、VLIW命令セットアーキテクチャを使用することができ、各命令長は、64ビットまたはより大きくあり得る。いくつかの例では、VLIW命令セットアーキテクチャは、命令が可変ビット長を有し得る可変VLIWアーキテクチャであることができる。いくつかの例では、プロセッサのアレイは、
図9によって描写され、GPU800によって使用されるもの等の単一のSMであることができる。
【0102】
プロセッサのアレイのプロセッサは、内部キャッシュメモリ、メモリアレイ1008、L2キャッシュ1036、または任意のそれらの組み合わせを含むことができる。メモリアレイ1008は、RAM(例えば、DRAM、SRAM等)から成る大量の相互接続されたノードを表すことができ、それらは、プロセッサのアレイの各プロセッサ、1つ以上の視覚ハードウェアアクセラレータ1012、および1つ以上の低減させられた命令セットコンピューティング(RISC)プロセッサ(例えば、RISC1 1028およびRISC2 1032)のための共有メモリの大規模バンクとして動作する。いくつかの例では、プロセッサのアレイは、緊密に結合されたアドレス空間を使用して、ロード待ち時間を低減させ、記憶を増加させることができる。いくつかの例では、1つ以上の視覚ハードウェアアクセラレータ1012は、特定のタイプの計算のために特に設計された特殊ハードウェア要素であり、それによって、プロセッサのアレイのプロセッサへの特定のタイプの計算の負荷を低減させることができる。ハードウェアアクセラレータ(例えば、1つ以上の視覚ハードウェアアクセラレータ1012)は、1つ以上の特定の命令の高速処理を提供することができる。いくつかの例では、ハードウェアアクセラレータは、プロセッサが1つ以上の特定の命令を実行するために低速であり得る(または別様に特定の命令タイプのために準好適である)とき、プロセッサのアレイのプロセッサによって1つ以上の特定の命令を実行するよりも好ましくあり得る。いくつかの例では、VPU1000は、処理の一部をプロセッサのアレイからオフロードする20ものハードウェアアクセラレータを含むことができる。いくつかの例では、1つ以上の視覚ハードウェアアクセラレータは、プロセッサのアレイを通して、RISCプロセッサによって制御されることができる。
【0103】
バス1040が、プロセッサのアレイ、L2キャッシュ1036、RISC1 1028、RISC2 1032、および1つ以上のインターフェース1020を接続することができる。L2キャッシュ1036は、プロセッサのアレイ、RISC1 1028、およびRISC2 1032間の共有メモリを表すことができる。加えて、1つ以上のインターフェース1020は、VPU1000のプロセッサのうちの1つ以上のものを用いて処理するために、入力/出力(I/O)インターフェース1024からの外部データをL2キャッシュ1036内に記憶することができる。いくつかの例では、RISC1 1028およびRISC2 1032の各々は、VPU1000のサブコンポーネントを制御する縮小命令セットコンピューティングプロセッサであることができる。例えば、RISC1 1028は、1つ以上の視覚ハードウェアアクセラレータ1012を管理することができる一方、RISC2 1032は、I/Oインターフェース1024および任意の接続されるセンサ(例えば、カメラおよびセンサ)を管理することができる。
【0104】
いくつかの例では、VPU1000の制御は、分権化されることができ、RISC1 1028および/またはRISC2 1032が、I/Oインターフェース1024、周辺機器、および1つ以上の視覚ハードウェアアクセラレータ1012を管理することができる。いくつかの例では、単一のRISCプロセッサが、RISC1 1028およびRISC2 1032の両方の役割を担うことによって、VPU1000を管理することができる。1つ以上の外部センサが、RISCプロセッサによって管理されることができ、VPU1000のニーズを果たすために、制御されることができる。いくつかの例では、VPU1000は、1つ以上の外部センサのセンサがデータを入力するレートを修正することができる。例えば、VPU1000は、カメラがビデオを捕捉するレートを改変することによって、カメラの電力消費を低減させることができる。別の例に対して、VPU1000は、それが24フレーム/秒を捕捉するように、60フレーム/秒を捕捉可能であるカメラを管理することができる。いくつかの例では、VPU1000は、フレームレート、または限定ではないが、カメラ、加速度計、トーテム、場所センサ、ジェスチャセンサ等を含む任意の接続されるセンサのデータ捕捉レートを低減または増加させることができる。
【0105】
いくつかの例では、1つ以上のインターフェース1020は、1つ以上の有線プロトコルおよび/または1つ以上の無線プロトコル上で動作することができる。例えば、1つ以上のインターフェース1020は、ユニバーサルシリアルバス(USB)(例えば、USB2.0、USB3.0、USB OTG等)、Joint Test Action Group(JTAG)、Ethernet(登録商標)、ユニバーサル非同期送受信機(UART)、SDモード(SDIO)等を通して、1つ以上の外部ソースに接続することができる。加えて、1つ以上のインターフェース1020は、限定ではないが、LCD、共通中間フォーマット(CIF)、NAL等の種々のディスプレイタイプのデータ交換を有効にすることができる。VPU1000は、加えて、モバイル産業プロセッサインターフェース(MIPI)1016を使用して、1つ以上の外部デバイス(例えば、CPU600、GPU800、および/またはセンサ)のための1つ以上のインターフェースを提供することができる。MIPI 1016は、1つ以上の独立通信レーン(例えば、12)を含むことができる。MIPI 1016は、I/Oインターフェース1024から1つ以上の視覚ハードウェアアクセラレータ1012への接続を提供することができる。接続された外部デバイス(センサ等)は、I/Oインターフェース1024から1つ以上の視覚ハードウェアアクセラレータ1012への短待ち時間パススルーを有することができる。I/Oインターフェース1024は、データを1つ以上の外部デバイス(例えば、CPU600、GPU800、および/またはセンサ)およびVPU1000へおよびそこから渡すことができる。
【0106】
いくつかの例では、VPU1000は、視覚的入力を処理するために特化したCPUであることができる。加えて、VPU1000は、
図10の例示的ハードウェア要素に従って描写されるが、VPU1000は、GPUの類似または同じハードウェア要素(
図8および9に関連して描写および説明されるようなGPU800等)を含むことができる。いくつかの例では、VPU1000によって実施される1つ以上の動作は、GPU800によって実施されることができる。
【0107】
説明される特徴は、デジタル電子回路内、またはコンピュータハードウェア、ファームウェア、ソフトウェア、もしくはそれらの組み合わせ内に実装されることができる。装置は、プログラマブルプロセッサによる実行のために、情報キャリア、例えば、機械読み取り可能な記憶デバイス内に有形に具現化されるコンピュータプログラム製品内に実装されることができ、方法ステップは、入力データに動作し、出力を発生させることによって、説明される実装の機能を実施するための命令のプログラムを実行するプログラマブルプロセッサによって実施されることができる。説明される特徴は、有利には、データ記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信し、データおよび命令をそれに伝送するために結合される少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能である1つ以上のコンピュータプログラム内に実装されることができる。コンピュータプログラムは、直接または間接的に、コンピュータ内で使用され、あるアクティビティを実施する、またはある結果を生じさせ得る命令の組である。コンピュータプログラムは、コンパイルまたは解釈言語を含む任意の形態のプログラミング言語で書き込まれることができ、独立型プログラムとして、またはモジュール、構成要素、サブルーチン、もしくはコンピューティング環境において使用するために好適な他のユニットとして含む任意の形態で展開されることができる。
【0108】
命令のプログラムの実行のための好適なプロセッサは、一例として、汎用および特殊目的マイクロプロセッサの両方ならびに任意の種類のコンピュータの単独プロセッサまたは複数のプロセッサのうちの1つを含む。概して、プロセッサは、命令およびデータを読み取り専用メモリまたはランダムアクセスメモリまたは両方から受信するであろう。コンピュータの不可欠な要素は、命令を実行するためのプロセッサならびに命令およびデータを記憶するための1つ以上のメモリである。概して、コンピュータは、データファイルを記憶するための1つ以上の大容量記憶デバイスも含むか、またはそれと通信するように動作可能に結合されるであろう。そのようなデバイスは、内部ハードディスクおよび取り外し可能なディスク、光磁気ディスク、および光ディスク等の磁気ディスクを含む。コンピュータプログラム命令およびデータを有形に具現化するために好適な記憶デバイスは、あらゆる形態の不揮発性メモリを含み、一例として、半導体メモリデバイス、例えば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスクおよび取り外し可能なディスク、光磁気ディスク、ならびにCD-ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、ASIC(特定用途向け集積回路)によって補完される、またはその中に組み込まれることができる。
【0109】
ユーザとの相互作用を提供するために、特徴が、情報をユーザに表示するためのCRT(ブラウン管)、LCD(液晶ディスプレイ)、LED(発光ダイオード)モニタ等のディスプレイデバイスと、ユーザが入力をコンピュータに提供し得るマウスまたはトラックボール等のキーボードおよびポインティングデバイスとを有するコンピュータ上に実装されることができる。
【0110】
特徴は、データサーバ等のバックエンドコンポーネントを含む、またはアプリケーションサーバまたはインターネットサーバ等のミドルウェアコンポーネントを含む、またはグラフィカルユーザインターフェースまたはインターネットブラウザを有するクライアントコンピュータ等のフロントエンドコンポーネントを含む、またはそれらの任意の組み合わせを含むコンピュータシステム内に実装されることができる。システムのコンポーネントは、通信ネットワーク等の任意の形態または媒体のデジタルデータ通信によって接続されることができる。通信ネットワークの例は、LAN、WAN、ならびにインターネットを形成するコンピュータおよびネットワークを含む。
【0111】
コンピュータシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、概して、互いから遠隔であり、典型的には、説明されるもの等のネットワークを通して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で起動し、クライアント-サーバ関係を互いに有するコンピュータプログラムによって生じる。いくつかの実装が、上で詳細に説明されたが、他の修正も、可能である。
【0112】
加えて、図に描写される論理フローは、望ましい結果を達成するために、示される特定の順序またはシーケンシャル順序を要求しない。加えて、他のステップが、提供され得る、またはステップは、説明されるフローから排除され得、他の構成要素が、説明されるシステムに追加される、またはそこから除去され得る。故に、他の実装も、以下の請求項の範囲内である。
【0113】
コンポーネントが、ある動作を実施するように構成されるように説明される場合、そのような構成は、例えば、動作を実施するための電子回路または他のハードウェアを設計することによって、動作を実施するようにプログラマブル電子回路(例えば、マイクロプロセッサ、または他の好適な電子回路)をプログラムすることによって、または任意のそれらの組み合わせによって、遂行されることができる。
【0114】
本開示のいくつかの実施形態が、説明される。それにもかかわらず、種々の修正が本開示の精神および範囲から逸脱することなく行われ得ることを理解されたい。