(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-21
(54)【発明の名称】部分的なメッセージ解析を使用したルーティング
(51)【国際特許分類】
H04L 45/74 20220101AFI20240614BHJP
H04L 12/22 20060101ALI20240614BHJP
【FI】
H04L45/74
H04L12/22
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023578960
(86)(22)【出願日】2022-06-21
(85)【翻訳文提出日】2024-02-21
(86)【国際出願番号】 IB2022055730
(87)【国際公開番号】W WO2022269477
(87)【国際公開日】2022-12-29
(32)【優先日】2021-06-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】519087723
【氏名又は名称】ナイアンティック, インコーポレイテッド
【氏名又は名称原語表記】NIANTIC,INC.
【住所又は居所原語表記】One Ferry Building,Suite 200 San Francisco,CA 94111 United States of America
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ピアウ ナー
(72)【発明者】
【氏名】リナーナ ヤコビ
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA02
5K030GA15
5K030HD03
5K030LB05
(57)【要約】
メッセージルータは、メッセージを部分的に復号して、メッセージをルーティングする方法を判定する。メッセージルータは、メッセージのエンベロープタイプを示すエンベロープ識別子を含むための候補フィールドとしてメッセージのフィールドを識別する。メッセージのエンベロープタイプは、メッセージをルーティングする場所等の情報がメッセージ内のどこに格納されているかを示す。メッセージルータは、候補フィールドがエンベロープ識別子を含むかどうかを判定するために候補フィールドを復号しようとし、エンベロープ識別子を含む候補ファイルに応答し、メッセージルータは、メッセージのエンベロープタイプを判定する。メッセージルータは、エンベロープタイプに従ってメッセージをルーティングする。
【特許請求の範囲】
【請求項1】
ネットワーク内でメッセージをルーティングするための方法であって、前記方法は、
メッセージルータで前記メッセージを受信することと、
エンベロープ識別子を含む候補フィールドとして前記メッセージのフィールドを識別することであって、前記エンベロープ識別子は、前記メッセージのエンベロープタイプを示すことと、
前記候補フィールドを復号して、前記候補フィールドが前記エンベロープ識別子を含むかどうかを判定することと、
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの前記エンベロープタイプを判定することと、
前記エンベロープタイプに従って前記メッセージをルーティングすることと、を含む、方法。
【請求項2】
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別することは、
前記フィールドが長さで区切られているかどうかを判定することと、
前記フィールドが長さで区切られていることに応答し、前記フィールドを前記候補フィールドとして選択することと、を含む、
請求項1に記載の方法。
【請求項3】
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別する前に、前記メッセージ内の第2のフィールドが長さで区切られたフィールドではないと判定することと、
前記第2のフィールドを復号することなく、前記第2のフィールドを転送バッファに書き込むことと、をさらに含む、請求項2に記載の方法。
【請求項4】
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの残りを前記転送バッファに書き込むことをさらに含む、請求項3に記載の方法。
【請求項5】
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別する前に、前記メッセージ内の第3のフィールドが長さで区切られたフィールドではないと判定することと、
前記第3のフィールドを復号して、前記第3のフィールドが前記エンベロープ識別子を含むかどうかを判定することと、
前記エンベロープ識別子を含まない前記第3のフィールドに応答し、前記第3のフィールドを転送バッファに書き込むことと、をさらに含む、請求項2に記載の方法。
【請求項6】
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの残りを前記転送バッファに書き込むことをさらに含む、請求項5に記載の方法。
【請求項7】
前記フィールドが長さで区切られているかどうかの判定は、開始バイトを復号することを含む、請求項2に記載の方法。
【請求項8】
前記エンベロープ識別子は、前記メッセージにおけるどのバイトがルーティング情報に対応するかを示す、請求項1に記載の方法。
【請求項9】
前記メッセージをルーティングすることは、前記メッセージからペイロードを抽出し、前記メッセージの残りのフィールドを転送することなく、前記ペイロードをネットワーク内の宛先に転送することを含む、請求項1に記載の方法。
【請求項10】
命令を格納した非一時的なコンピュータ読み取り可能な記憶媒体であって、前記命令は、プロセッサによって実行されたとき、前記プロセッサに、
メッセージルータでメッセージを受信することと、
エンベロープ識別子を含むための候補フィールドとして前記メッセージのフィールドを識別することであって、前記エンベロープ識別子は、前記メッセージのエンベロープタイプを示すことと、
前記候補フィールドを復号して、前記候補フィールドが前記エンベロープ識別子を含むかどうかを判定することと、
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの前記エンベロープタイプを判定することと、
前記エンベロープタイプに従って前記メッセージをルーティングすることと、を含む動作を実行させる、
非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項11】
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別することは、
前記フィールドが長さで区切られているかどうかを判定することと、
前記フィールドが長さで区切られていることに応答し、前記フィールドを前記候補フィールドとして選択することと、を含む、
請求項10に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項12】
前記動作は、
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別する前に、前記メッセージ内の第2のフィールドが長さで区切られたフィールドではないと判定することと、
前記第2のフィールドを復号することなく、前記第2のフィールドを転送バッファに書き込むことと、をさらに含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項13】
前記動作は、
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの残りを前記転送バッファに書き込むことをさらに含む、請求項12に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項14】
前記動作は、
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別する前に、前記メッセージ内の第3のフィールドが長さで区切られたフィールドではないと判定することと、
前記第3のフィールドを復号して、前記第3のフィールドが前記エンベロープ識別子を含むかどうかを判定することと、
前記エンベロープ識別子を含まない前記第3のフィールドに応答し、前記第3のフィールドを転送バッファに書き込むことと、をさらに含む、
請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項15】
前記動作は、
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの残りを前記転送バッファに書き込むことをさらに含む、請求項14に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項16】
前記フィールドが長さで区切られているかどうかの判定は、開始バイトをデコードすることを含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項17】
前記エンベロープ識別子は、前記メッセージにおけるどのバイトがルーティング情報に対応するかを示す、請求項10に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項18】
前記メッセージをルーティングすることは、前記メッセージからペイロードを抽出し、前記メッセージの残りのフィールドを転送することなく、前記ペイロードをネットワーク内の宛先に転送することを含む、請求項10に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項19】
メッセージルータであって、
前記メッセージルータに接続されたクライアントデバイスのリストを格納したローカルデータストアと、
ルーティングモジュールであって、
前記メッセージルータでメッセージを受信することと、
エンベロープ識別子を含む候補フィールドとして前記メッセージのフィールドを識別することであって、前記エンベロープ識別子は、前記メッセージのエンベロープタイプを示すことと、
前記候補フィールドを復号して、前記候補フィールドが前記エンベロープ識別子を含むかどうかを判定することと、
前記エンベロープ識別子を含む前記候補フィールドに応答して、前記メッセージの前記エンベロープタイプを判定することと、
前記エンベロープタイプに従って前記メッセージをルーティングすることと、を含む動作を実行するように構成された、ルーティングモジュールと、を含む、
メッセージルータ。
【請求項20】
前記エンベロープ識別子を含む前記候補フィールドとして前記フィールドを識別することは、
前記フィールドが長さで区切られているかどうかを判定することと、
前記フィールドが長さで区切られていることに応答し、前記フィールドを前記候補フィールドとして選択することと、を含む、
請求項19に記載のメッセージルータ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、メッセージルーティングに関し、特に、コンピュータネットワーク内のメッセージを復号化及びルーティングする方法に関する。
【背景技術】
【0002】
関連出願に対する相互参照
本出願は、参照により援用される、2021年6月21日に出願された米国仮出願第63/213,088号の利益を主張する。
【0003】
コンピュータネットワークは、インターネット等のデータを交換するコンピューティングデバイスの相互接続されたセットである。データを含むメッセージの交換は、アプリケーションの状態を維持することが適切にルーティングされる拡張現実アプリケーションを含むいくつかのアプリケーションに対して行われ得る。しかしながら、異なるメッセージは、ルーティング情報がメッセージ内の異なる位置に配置されることをもたらす異なるフォーマットを有し得る。タイプおよびルーティングデータを識別するためにメッセージを完全にデコードすると、かなりの量の処理時間がかかり、データフローに遅延が導入され、アプリケーションのパフォーマンスに悪影響を及ぼす可能性がある。
【発明の概要】
【0004】
拡張現実(AR)システムは、コンピュータ生成コンテンツで現実世界のビューを補完する。ARを並行現実ゲームに組み込むことは、現実世界と仮想世界との間の統合を改善し得る。ARはまた、プレイヤが対話する共有されたゲーム体験に参加する機会を提供することによって、プレイヤ間の対話性を高め得る。たとえば、戦車バトルゲームでは、プレイヤは現実世界の場所で仮想戦車をナビゲートし、互いの戦車を破壊しようとし得る。タンクの移動は、現実世界の地理によって制限され得る(例えば、タンクは、川を通ってよりゆっくりと移動する、道路上でより速く移動する、壁を通って移動することができない等)。
【0005】
既存のARセッション技術は、すべてのタイプのメッセージをどのようにルーティングするかを判定することができないメッセージルータを使用し得る。例えば、プロトコルバッファ等のいくつかのメッセージは、メッセージの種類を記述するメタデータを含まず、どのメッセージルータがメッセージをルーティングする方法を判定する必要があるかを記述する。メッセージルータがルーティングのためにメッセージを完全にデコードしようとした場合、メッセージルータは、メッセージをデコードし、ARセッションの待ち時間を増加させ、ARセッションに接続されているユーザに目に見える遅延を引き起こす。同様の問題は、メッセージが複数の形式でネットワークを介して送信される他のユースケースにも存在する。
【0006】
この及び他の問題は、メッセージルータでのルーティング中にメッセージを部分的に復号することによって対処され得る。待ち時間は、メッセージを適切にルーティングする方法を判定するためにメッセージの必要な部分のみを復号することによって低減され得る。これは、メッセージを正しい受信者にルーティングするだけでなく、メッセージルータでの下位互換性を維持することにも有利である。
【0007】
一実施形態では、ネットワーク内でメッセージをルーティングするための方法は、セルタワー、中間ノード、または他のネットワーク接続等のメッセージルータでメッセージを受信することを含む。メッセージは、エンベロープ及びペイロード内の1つ以上のフィールドを含み得る。メッセージルータは、メッセージのエンベロープタイプを示すエンベロープ識別子を含むための候補フィールドとしてメッセージのフィールドを識別する。メッセージルータは、フィールドがエンベロープ識別子を含むかどうかを判定するためにフィールドを復号しようとする。メッセージルータがエンベロープタイプを判定または候補フィールドを識別できない場合、メッセージルータは、エンベロープ識別子を識別するためにメッセージのフィールドを順次検査する。フィールドにエンベロープ識別子が含まれている場合、メッセージルータは、メッセージのルーティング方法を示すメッセージのエンベロープタイプを判定し、メッセージルータは、エンベロープタイプに従ってメッセージをルーティングする。
【0008】
説明される方法を使用するルーティングメッセージの1つの利点は、メッセージルータがメッセージエンベロープを既存のプロトコルバッファに改造し得ることである。したがって、メッセージエンベロープを有するメッセージが、そのような方法によってルーティング可能であるようにプロトコルで設計されていなくても、メッセージルータは、これらのメッセージにメッセージエンベロープを追加してもよく、その結果、メッセージルータは、ルーティングのための方法を採用してもよい。
【図面の簡単な説明】
【0009】
【
図1】一実施形態による、メッセージルータのための環境を示す図である。
【
図2】一実施形態による、エンベロープ及びペイロードを含むメッセージを示す図である。
【
図3】一実施形態による、
図1のメッセージルータを示すブロック図である。
【
図4】一実施形態による、エンベロープ識別子に基づいてメッセージをルーティングするためのプロセスを示す図である。
【
図5】一実施形態による、
図1に示されるコンピュータネットワーク内での使用に適した例示的なコンピュータを示す高レベルのブロック図である。
【発明を実施するための形態】
【0010】
詳細な説明
図面および以下の説明は、例示のみを目的として特定の実施形態を説明する。当業者は、以下の説明から、説明された原理から逸脱することなく、構造および方法の代替実施形態を採用することができることを容易に認識するであろう。ここでいくつかの実施形態を参照し、その例を添付の図に示す。類似または同様の機能を示すために、実行可能な限り、類似または同様の参照番号が、図で使用されることに留意されたい。要素が共通の数字を共有し、その後に別の文字が続く場合、これは要素が類似または同様であることを示す。数字だけが、そのような要素の任意の1つまたは任意の組み合わせを指す。
【0011】
コンピューティング環境の例
図1は、一実施形態による、メッセージルータ130のための環境100(本明細書でコンピュータネットワークとも称される)を示す。図は、明確化のためにブロック図を使用する簡略化された例を示す。環境100は、2つのクライアント110a及び110B、サーバ120、及びメッセージルータ130を含む。他の実施形態では、環境100は、追加のクライアント110、サーバ120、メッセージルータ130、または他のネットワークノード等のより少ない、追加の、または他のコンポーネントを含み得る。例えば、メッセージルータ130がセルタワーにあるように示されているが、環境100は、メッセージルータ130等として1つ以上のWiFiルータを使用するローカルエリアネットワーク(LAN)であり得る。別の例では、サーバ120は、並行現実ゲームをホストするゲームサーバであり得る。クライアント110は、プレイヤがパラレルリアリティゲームの他のプレイヤと対話するときに、ゲームサーバ120と通信し、並行現実ゲーム中に互いに通信し得る。
【0012】
クライアント110は、パーソナルコンピュータ、ラップトップ、タブレットコンピュータ、スマートフォン等のコンピューティングデバイスである。クライアント110は、メッセージルータ130を介してメッセージを通信し得る。サーバ120は、同様に、メッセージを送受信することができるコンピューティングデバイスであってもよい。クライアント110及びサーバ120は、互いにメッセージを送信し得る。一実施形態では、各クライアント110は、ローカルARモジュールを含み、サーバ120は、マスタARモジュールを含む。各ローカルARモジュールは、他のクライアント110上のローカルARモジュール、またはサーバ120上のマスタARモジュールにARデータを通信する。
【0013】
サーバ120は、情報を受信及び送信するためにクライアント110間の接続を確立するコンピューティングデバイスであり得る。例えば、サーバ120は、メッセージルータ130を介してルーティングされるメッセージを受信及び送信してもよい。いくつかの実施形態では、サーバ120は、様々なクライアント110によってプレイされる並行現実ゲームをホストするゲームサーバである。ゲームサーバ120は、プレイヤプロファイル、ゲーム状態、マップ(実在および仮想)、ならびに並列現実ゲームに関連する他の情報を格納し得る。
【0014】
メッセージルータ130は、クライアント110及びサーバ120等のエンドノードのための中間ノードとして機能するネットワークノードである。上述したように、他の実施形態では、環境100は、メッセージルータ130を置き換えるか、またはそれに加えて、メッセージの同様のルーティングを可能にする他のネットワークノードを含み得る。メッセージルータ130は、メッセージが通信され得る範囲を増加させる。例えば、クライアント110Aは、メッセージルータ130にメッセージを送信してもよく、メッセージルータ130は、メッセージルータ130なしでクライアント110Bと通信することができなかったであろうクライアント110Bにメッセージを送信してもよい。
【0015】
一実施形態では、クライアント110の通信は、サーバ120またはピアツーピア(P2P)を介してルーティングされ得る。サーバ120を介してルーティングされた通信は、メッセージルータ130を介して第1のクライアント110Aからサーバ120に行き、次いでメッセージルータ130を介して第2のクライアント110Bに戻り得る。対照的に、P2P通信は、第1のクライアント110Aからメッセージルータ130に直接行き得る。いくつかの場合では、通信は、信号ブースタ等の他の中間デバイスを通過し得ることに留意されたい。本明細書で使用される場合、通信は、サーバ120を通過することなくターゲットクライアント110Bにルーティングされる場合、P2Pと見なされる。例えば、ターゲットクライアント110Bが送信クライアント110Aと同じメッセージルータ130に接続され、そうでなければサーバ120を介してルーティングされる場合、メッセージはP2Pで送信され得る。別の実施形態では、クライアント110は、P2Pを使用して全体的に通信する。
【0016】
一実施形態では、クライアント110は、(例えば、サーバ120でホストされ、伝送制御プロトコル{TCP}を介して通信される)調整サービスを使用して、IPアドレスを同期させる。次いで、クライアント110は、パブリックに面したIPアドレスまたはローカルエリアネットワーク(LAN)を使用して(例えば、ユーザデータグラムプロトコル{UDP}を介して)通信し得る。例えば、第1のクライアント110Aは、ローカルAR共有環境に参加するためにTCPを介して調整サービスに要求を送信し得る。調整サービスは、(例えば、同じメッセージルータ130を介して)AR環境に接続された第2のクライアント110BのIPアドレスを第1のクライアント110Aに提供し得る。調整サービスはまた、第1のクライアントのIPアドレスを第2のクライアント110Bに提供してもよいし、第1のクライアント110Aが(コーディネーションサービスによって提供される)第2のクライアントのIPアドレスを使用して直接提供されてもよい。いくつかの実施形態では、調整サービスは、第2のクライアントのIPアドレスが提供される前に、第2のクライアント110Bに、第1のクライアント110Aを承認するよう促してもよい(例えば、ユーザ確認を要求するか、または第1のクライアント110Aと接続するために承認されたクライアント110のリストをチェックすることによって)。
【0017】
図2は、一実施形態による、エンベロープ210及びペイロード220を含むメッセージ200を示す図である。メッセージ200のエンベロープ210は、1つまたは複数の識別子(または「ID」)を含み、それぞれがエンベロープ210内の別個のフィールドに格納される。各識別子は、メッセージのエンベロープタイプ、またはメッセージを送信した、またはメッセージを受信することを意図したアプリケーション、サーバ、またはプレイヤ等、メッセージに関する情報を示し得る。メッセージ200のエンベロープタイプは、以下でさらに説明されるように、メッセージ200のどのバイトがルーティング情報に対応するかに関する情報に関連付けられ得る。
図2のメッセージ200は、第1のフィールドにエンベロープID212、第2のフィールドにアプリケーションID214、第3のフィールドにサーバID216、及び第4のフィールドにプレイヤID218を含む。いくつかの実施形態では、メッセージ200は、
図2に示される順序以外の様々な順序で様々なタイプの任意の数の識別子(例えば、クライアントID)を含み得る。例えば、メッセージ200は、第1のフィールドにクライアントID、第2のフィールドにエンベロープID212、及びサーバID216を含み得、プレイヤID218をまったく含み得ない。
【0018】
エンベロープ識別子212は、メッセージ200のエンベロープタイプを示してもよく、したがって、メッセージ200のフィールド内のどのバイトがルーティング情報に対応するかについての情報と関連付け得る。例えば、この情報は、メッセージルータ130がルーティング情報にアクセスするために情報を取得するためにクエリし得るインデックスまたはデータストアに格納され得る。エンベロープ識別子212は、長さで区切られたフィールドにある。長さで区切られたフィールドは、フィールドの長さを示す値をフィールドの先頭に含む。したがって、メッセージ200のフィールドが長さで区切られているかどうかを判定することによって、メッセージルータ130は、フィールドがルーティング情報に関連付けられたエンベロープ識別子212を含む候補になり得るかどうかを判定する。フィールドが長さ区切られていない場合、メッセージルータ130は、それがエンベロープ識別子212を含まないと判定し得る。
【0019】
一実施形態では、メッセージルータ130は、クライアント110A、クライアント110B、またはサーバ120からメッセージ200を受信し、各メッセージ200をどのようにルーティングするかを判定する。例えば、メッセージルータ130は、エンベロープタイプを示すエンベロープ識別子212を含むための候補としてメッセージ200のフィールドを識別する。メッセージルータ130は、メッセージ200の第1のフィールドを評価して、フィールドが長さで区切られているかどうかを判定し得る。メッセージルータ130は、連続した順序で第1のフィールドからメッセージ200の1つまたは複数のフィールドを評価し得る。メッセージルータ130は、第1のフィールドが長さで区切られていないと判断すると、第1のフィールドを内部転送バッファに書き込み、メッセージ200の次のフィールドを評価し得る。メッセージルータ130は、フィールドが長さで区切られているかどうかをチェックし、チェックされたフィールドを転送バッファに送信し、メッセージルータ130がメッセージ200内の長さで区切られたフィールドを発見するまで次のフィールドを評価することによって反復し得る。
【0020】
第1のフィールド(または反復後の後続のフィールド)が長さ区切りであるという判定に応答して、メッセージルータ130は、フィールドを候補フィールドとして選択する。メッセージルータ130は、フィールドがエンベロープ識別子212を含むかどうかを判定するためにフィールドを復号しようとする。メッセージルータ130がフィールドを有効なエンベロープ識別子に復号することができない場合、それは、フィールドを転送バッファに書き込み、次のフィールドを処理する(例えば、次のフィールド長さが区切られているかどうかを判定することによって、及びそうである場合、それが有効なエンベロープ識別子に復号することができるかどうかによって)。メッセージルータ130が、フィールドが有効なエンベロープ識別子212を含むと判定する場合、メッセージルータ130は、エンベロープ識別子212を使用してメッセージ200のエンベロープタイプを判定する。メッセージルータ130は、エンベロープタイプを使用してメッセージ200をルーティングし得る。特に、メッセージルータ130は、エンベロープタイプによって示されるメッセージ200内の位置または複数の位置からルーティング情報を抽出し、メッセージの残りを転送バッファに書き込み、ルーティング情報を使用して、メッセージの一部またはすべてを環境100内の宛先に転送し得る。例えば、メッセージルータ130は、メッセージ200全体、ペイロード220のみ、またはメッセージ内のフィールドのいくつかの他のサブセットを転送し得る。このプロセスは、以下の
図4に関連してさらに説明される。
【0021】
中間ノードの例
図3は、メッセージルータ130の一実施形態を示すブロック図である。示される実施形態では、メッセージルータ130は、ルーティングモジュール310、データ取り込みモジュール320、AR環境モジュール330、マップ処理モジュール340、権限チェックモジュール350、及びローカルデータストア360を含む。メッセージルータ130はまた、データを交換するためにサーバ120及びクライアント110への接続を確立するためのハードウェア及びファームウェアまたはソフトウェア(図示せず)を含む。例えば、メッセージルータ130は、無線接続(例えば、4Gまたは5G)を使用して、光ファイバーまたは他の有線インターネット接続およびクライアント110を介してサーバ120に接続し得る。他の実施形態では、メッセージルータ130は、異なるまたは追加のコンポーネントを含み得る。さらに、機能は、説明した方法とは異なる方法で、要素間に分散されてもよい。
【0022】
ルーティングモジュール310は、メッセージ200を受信し、それらのメッセージを1つ以上の受信者デバイス(例えば、クライアント110及びサーバ120)に送信する。一実施形態では、ルーティングモジュール310は、クライアント110からメッセージ200を受信し、
図4を参照して説明した方法を使用して、受信したメッセージをどこに送信するかを判定する。ルーティングモジュール310はまた、特定のクライアント110またはメッセージルータ130に接続されているすべてのクライアント110のいずれかにアドレス指定されたサーバ120からメッセージを受信し得る。ルーティングモジュール310は、メッセージ200を、それらがアドレス指定されているクライアント110またはサーバ120に転送し、ルーティングモジュール310は、プレイヤID218、サーバID216、またはクライアントIDから識別し得る。
【0023】
データ取り込みモジュール320は、メッセージルータ130が接続されたクライアント110を介してプレイヤに共有AR体験を提供するために使用する1つまたは複数のソースからデータを受信する。一実施形態では、データ取り込みモジュール320は、(例えば、サードパーティサービスから)実世界の状況に関するリアルタイムまたは実質的にリアルタイムの情報を受信する。例えば、データ取り込みモジュール320は、定期的に(例えば、毎時)、メッセージルータ130を取り囲む地理的領域内の気象条件を示す気象サービスから気象データを受信し得る。他の例として、データ取り込みモジュール320は、公園、博物館、または他の公共空間の営業時間を取得し得る。さらに他の例として、データ取り込みモジュール320は、メッセージルータ130を取り囲む地理的領域内の道路上を走行している車両の数を示す交通データを受信し得る。現実世界の条件に関するそのような情報は、仮想世界と現実世界との間の相乗効果を改善するために使用され得る。
【0024】
AR環境モジュール330は、メッセージルータ130を取り囲む地理的領域内のプレイヤが共有AR体験に従事し得るAR環境を管理する。一実施形態では、クライアント110は、ARゲームを実行している間にメッセージルータ130に接続し、AR環境モジュール330は、クライアントをゲームのAR環境に接続する。メッセージルータ130に接続するゲームのすべてのプレイヤは、単一のAR環境を共有してもよく、またはプレイヤは、複数のAR環境間で分割されてもよい。例えば、特定のAR環境に最大数のプレイヤが存在し得る(例えば、10、20、100等)。複数のAR環境が存在する場合、新たに接続するクライアント110は、ランダムにセッション内に配置されてもよく、またはクライアントは、プレイヤが参加するセッションを選択することを可能にするためのユーザインタフェース(UI)を提供してもよい。したがって、プレイヤは、友人と共にAR環境に従事することを選択してもよい。いくつかの実施形態では、プレイヤは、アクセスが保護されている(例えば、参加するためにパスワードまたはコードを必要とする)プライベートAR環境を確立し得る。
【0025】
様々な実施形態では、ARオブジェクト(例えば、生物、車両等)が現実世界の特徴と相互作用するように見える(例えば、それらを通過するのではなく障害物を飛び越える)ことを可能にするために、AR環境モジュール330は、接続されたクライアント110に、クライアントの近接における現実世界を表す(例えば、ローカルデータストア360に格納される)マップデータを提供する。AR環境モジュール330は、クライアント110の位置データ(例えば、GPS位置)を受信し、クライアントを取り囲む地理的領域(例えば、クライアントの現在位置の閾値距離内)のマップデータを提供し得る。
【0026】
受信されたマップデータは、現実世界の1つまたは複数の表現を含み得る。例えば、マップデータは、ポイントクラウドモデル、平面マッチングモデル、ラインマッチングモデル、地理情報システム(GIS)モデル、建物認識モデル、景観認識モデル等を含み得る。マップデータはまた、異なる詳細レベルで所定のタイプの複数の表現を含み得る。例えば、マップデータは、それぞれが異なる数の点を含む2つ以上のポイントクラウドモデルを含み得る。
【0027】
クライアント110は、マップデータを1つまたは複数のセンサによって収集されたデータと比較し、クライアントの位置を絞り込でてもよい。例えば、クライアント110上のカメラによって撮影されている画像をポイントクラウドモデルにマッピングすることによって、クライアントの位置及び向きが(例えば、1センチメートル及び0.1度以内に)正確に判定され得る。クライアント110は、プレイヤによって取られる任意のアクション(例えば、撮影、対話する仮想アイテムの選択、仮想アイテムのドロップ等)と共に、判定された位置及び向きをAR環境モジュール330に提供する。したがって、AR環境モジュール330は、AR環境に従事するすべてのプレイヤについてゲームのステータスを更新し得る。
【0028】
マップ処理モジュール340は、現在の状態(例えば、データ取り込みモジュール320からのデータ)に基づいてマップデータを更新する。実世界は静的ではないため、ローカルデータストア360内のマップデータは、現在の実世界の状況を表さない場合がある。たとえば、バーモント州の同じ公園トレイルは、季節によって見た目が大きく異なる場合がある。夏には、トレイルが澄んでいて、周囲の木々が葉に覆われ得る。対照的に、冬には雪の漂流によって小道が塞がれ、木々がむき出しになり得る。マップ処理モジュール340は、そのような変化を近似するようにマップデータを変換し得る。
【0029】
一実施形態では、マップ処理モジュール340は、現在の状態データを取得して変換を識別し、その変換をマップデータに適用する。異なる条件に対する変換は、ヒューリスティックルールによって定義されてもよく、訓練された機械学習モデルの形をとってもよく、または両方のアプローチの組み合わせを使用してもよい。例えば、マップ処理モジュール340は、現在の気象条件データを受信し、現在の気象条件の変換を選択し、その変換をマップデータに適用し得る。あるいは、マップ処理モジュール340は、変換されたマップを事前に計算し、それらを(例えば、ローカルデータストア360内に)格納し得る。この場合、クライアント110がメッセージルータ130に接続すると、マップ処理モジュールは現在の状況を判断し、マップデータの適切な事前計算バージョンを選択し、そのバージョンをクライアントに提供する。
【0030】
権限チェックモジュール350は、異なるクライアント110のゲーム状態間の同期を維持する。一実施形態では、権限チェックモジュール350は、クライアント110から受信したゲームアクションが、AR環境モジュール330によって維持されるゲーム状態と一致することを確認する。例えば、2人のプレイヤの両方が同じゲーム内アイテムをピックアップしようとする場合、権限チェックモジュール350は、(例えば、要求に関連付けられたタイムスタンプに基づいて)どのプレイヤがアイテムを受け取るかを判定する。
【0031】
権限チェックモジュール350はまた、AR環境の状態(中間ノード状態)のそのコピーとサーバ120によって維持されるマスタ状態との間の同期を維持し得る。一実施形態では、権限チェックモジュール350は、定期的に(例えば、1~10秒ごとに)、AR環境の状態に関するグローバルアップデートをサーバ120から受信する。権限チェックモジュール350は、これらの更新を中間ノード状態と比較し、任意の不一致を解決する。例えば、アイテムをピックアップするプレイヤの要求が権限チェックモジュール350によって最初に承認されたが、サーバ120からのゲーム更新によって、プレイヤがアイテムをピックアップしようとする前に、そのアイテムが他のプレイヤによってピックアップされた(または他の方法で利用できなくなった)ことが示された場合、権限チェックモジュール350は、そのアイテムをプレイヤのインベントリから削除すべきであることを示す更新をプレイヤのクライアント110に送信し得る。
【0032】
このプロセスは、異なるメッセージルータ130によって提供されるカバレッジ間の境界に近い位置にあるクライアント110に値を提供し得る。この場合、異なるメッセージルータ130に接続されたプレイヤは、両方とも同じ仮想要素と対話し得る。したがって、各個々のメッセージルータ130は、要素との衝突する対話を最初に承認し得るが、サーバ120は、衝突を検出し、衝突を解決するために更新を送信する(例えば、メッセージルータ130のうちの1つに、アクションの初期承認を取り消し、それに応じてそのローカル状態を更新するように指示する)。
【0033】
ローカルデータストア360は、メッセージルータ130によって使用されるデータを格納するように構成された1つ以上の非一時的なコンピュータ可読媒体である。一実施形態では、格納されたデータは、マップデータ、現在の状態データ、現在(または最近)接続されたクライアント110のリスト、地理的地域のゲーム状態のローカルコピー等を含み得る。ローカルデータストア360は、単一のエンティティとして示されているが、データは、複数の記憶媒体にわたって分割され得る。さらに、データのいくつかは、通信ネットワークの他の場所に格納され、リモートでアクセスされ得る。例えば、メッセージルータ130は、必要に応じて(例えば、サードパーティサーバから)リモートで現在の状態データにアクセスし得る。
【0034】
方法の例示
図4は、一実施形態による、エンベロープ識別子212に基づいてメッセージ200をルーティングするためのプロセス400を示す。メッセージルータ130は、エンベロープ210及びペイロード220を含み得て、それぞれが1バイト以上の1つ以上のフィールドを含むメッセージ200を受信する405。メッセージ200は、現実世界におけるプレイヤの位置がゲーム世界におけるそれらの位置と相関する並行現実ゲームに関連付けられたもの等、共有AR環境で発生したアクションを説明し得る。メッセージルータ130は、セルタワーまたは
図1の環境100に接続された別のネットワークノード等の中間ノードであり得る。メッセージ200は、クライアント110B等のクライアントデバイス110、またはサーバ120等の別のネットワークノードからメッセージルータ130に送信され得る。
【0035】
メッセージルータ130は、エンベロープ識別子212を含むための候補フィールドとしてメッセージ200のフィールドを識別する。エンベロープ識別子212は、メッセージ200のどのフィールドまたはバイトが特定の情報に対応するかを示す。例えば、エンベロープ識別子212は、メッセージ200の第1のフィールドがプレイヤ識別子218を含み、メッセージ200の第2のフィールドがアプリケーション識別子214を含むことを示し得る。別の例では、エンベロープ識別子212は、メッセージ200のエンベロープタイプを示し得て、エンベロープタイプによって示されるメッセージ200内のフィールドまたは複数のフィールドからルーティング情報を抽出するために使用され得る。
【0036】
様々な実施形態では、エンベロープ識別子212を含むフィールドを識別するために、メッセージルータ130は、フィールド長さが区切られているかどうかを判定し415、これによって候補フィールドを識別するために、メッセージ200の1つ以上のフィールドを分析する410。メッセージルータ130は、開始から終了まで順次、一度に1つのフィールドでメッセージを分析し得る410。あるいは、メッセージルータ130は、例えば、メッセージ200のフィールドの位置、バイト数、長さ等に基づいて、他の順序でフィールドを分析し得る410。
【0037】
どのフィールドを分析し、どのような順序で判定するために使用される正確なアプローチにかかわらず、メッセージルータ130は、第1のフィールドが長さで区切られているかどうかを判定するために分析される第1のフィールドの開始バイトを復号し得る415。第1のフィールドが長さで区切られている場合、メッセージルータ130は、第1のフィールドを候補フィールドとして選択する。逆に、長さが区切られていないフィールドには、エンベロープ識別子を含めることはできない。したがって、フィールドが長さで区切られていない場合、メッセージルータ130は、フィールドを候補フィールドとして選択せず、代わりに、フィールドを復号しようとすることなく、フィールドを転送バッファに書き込む。次いで、メッセージルータは、メッセージ200の次の(連続した)フィールドを分析して410、それがエンベロープ識別子212を含むための候補であるかどうかを判定する。例えば、エンベロープ識別子を含むための候補フィールドとしてフィールドを識別する前に、メッセージルータ130は、前のフィールド(例えば、メッセージ200の候補フィールドの前)の長さが区切られていないと判定し、前のフィールドを復号することなく、前のフィールドを転送バッファに書き込み得る。
【0038】
メッセージルータ130は、候補フィールドを復号化し420、フィールドがエンベロープ識別子212を含むかどうかを判定しようとする。一実施形態では、メッセージルータ130は、候補フィールド内のデータを識別子のインデックスと比較して、データが有効なメッセージタイプを識別するかどうかを判定する。あるいは、エンベロープ識別子212は、所定のコード(例えば、指定された文字列)を含み得るため、メッセージルータ130は、候補フィールド内のデータが所定のコードを含むかどうかを判定することによって、候補フィールドがエンベロープ識別子212であるかどうかを判定し得る。
【0039】
候補フィールドがエンベロープ識別子212を含むかどうかを判定するために使用される方法にかかわらず、候補フィールドがエンベロープ識別子を含まない場合、メッセージルータ130は、候補フィールドを転送バッファに書き込み、別のフィールド(例えば、メッセージ200の次のフィールド)の分析に進み410、新しい候補フィールドを判定する。対照的に、メッセージルータ130が候補フィールド内のエンベロープ識別子212を識別することが可能である場合430、メッセージルータ130は次いで、エンベロープ識別子212に基づいてメッセージ200のエンベロープタイプを判定する。例えば、メッセージルータ130は、エンベロープ識別子212に関連付けられたエンベロープタイプについて、ローカルデータストア360に格納されたインデックスをクエリし得る。エンベロープタイプは、例えば、メッセージのどのバイト(またはフィールド)がメッセージ200のルーティング情報に対応するかを含む、メッセージ200のエンベロープ210の構造を示す。判定されたエンベロープタイプに基づいて、メッセージルータ130は、ルーティング情報を取得し得る。いくつかの実施形態では、メッセージルータ130は、メッセージの残り(例えば、候補及び候補の後のフィールド)を転送バッファに書き込んでもよい。メッセージルータ130は、エンベロープタイプによって示されるルーティング情報に基づいてメッセージ200をルーティングする440。メッセージ200をルーティング440するために、メッセージルータ130は、フィールドのサブセット(例えば、ペイロード220)をメッセージ200から抽出し、抽出されたフィールドのみを環境100内の宛先(例えば、クライアント110、サーバ120等)に転送し得る。
【0040】
図4に示されるプロセス400は、メッセージルータ130のパフォーマンスを改善し得る。例えば、従来のメッセージルータは、ルーティング情報を識別するために完全なメッセージを逆シリアル化する必要がある場合がある。これは、メッセージルータ130でメモリ及び処理リソースを消費し、メッセージルータ130のパフォーマンスに影響を与え得る(例えば、ランタイムメモリページングまたは利用可能なメモリの欠如等による)。対照的に、プロセス400は、完全なメッセージが受信される前に、フラグメントで送信されるメッセージの処理を開始する。メッセージルータ130は、部分的に受信されたメッセージ(メッセージフラグメント)からメッセージルーティングに使用されるフィールドをフェッチし、メッセージの残りのフラグメントを受信する前にルーティング決定を判定し得る。すべてのフラグメントが受信された場合でも、メッセージルータ130は、最初に完全なメッセージを再構築することなく、ルーティング情報を識別し得る。
【0041】
メッセージルータ130はまた、多数の方法でルーティングのためのメッセージを修正し得る。一実施形態では、メッセージルータ130は、1つ以上の宛先に送信するために、メッセージから2つ以上のシリアライズされた内部データ構造を分割し得る。別の実施形態では、メッセージルータ130は、埋め込みアプリケーションプログラミングインタフェース(API)キーを調整することによって、またはメッセージをトレースするためにメッセージにコンテキストを追加することによって等、ルーティングのためのメッセージからフィールドを追加または削除し得る。さらに別の実施形態では、メッセージルータ130は、メッセージのスキーマを変更し得る。例えば、メッセージルータ130は、メッセージの宛先が多地域アーキテクチャをサポートしないシステムである場合、メッセージ(または他のコンテキスト情報)の送信者の地理的位置をメッセージに追加し得る。
【0042】
プロセス400は、メッセージをルーティングするための有利な方法を提供する。メッセージルータ130は、メッセージエンベロープ210を既存のプロトコルバッファに改造し得る。したがって、メッセージエンベロープを有するメッセージが、そのような方法によってルーティング可能であるようにプロトコルで設計されていなくても、メッセージルータは、これらのメッセージにメッセージエンベロープを追加してもよく、その結果、メッセージルータは、ルーティングのための方法を採用してもよい。
【0043】
図4のプロセス400は、他のプレイヤがリアルタイムで回避またはキャッチする光のボールを互いに投げる並行現実ゲームに組み込まれる例示的な共有AR環境に関連してさらに図示され得る。この例では、クライアント110Bに関連付けられた送信側プレイヤが、クライアント110Aに関連付けられたターゲットプレイヤに光のボールを投げるとき、クライアント110Bは、アクションを記述するメッセージ200を作成する(例えば、光のボールを投げる)。アクションはプレイヤ間であるため、クライアント110Bは、メッセージ200において、クライアント110Aのターゲットプレイヤのためのプレイヤ識別子218を示す。クライアント110Bは、メッセージ200をメッセージルータ130に送信し、メッセージルータ130は、メッセージ200をどのようにルーティングするかを判定する440。メッセージルータ130は、メッセージ200のフィールドを順次検査して長さで区切られたフィールドを見つけ、長さで区切られたフィールドを復号化し420、フィールド内のエンベロープ識別子212を識別しようとする430。メッセージルータ130がフィールドを復号420することができない場合、メッセージルータ130は、メッセージルータ130がエンベロープ識別子212を有するフィールドを見つけるまで、フィールドを順次検査し続ける。メッセージルータ130は、エンベロープ識別子212に基づいてエンベロープタイプを判定し、ターゲットプレイヤのクライアント110Aのエンベロープタイプに基づいて、メッセージをルーティングする。クライアント110Aは、メッセージ200のペイロード220からのデータを共有AR環境のローカル状態に統合する(例えば、送信プレイヤがそれらに光のボールを投げたことをターゲットプレイヤに示す)。メッセージタイプを識別する(したがってルーティング情報を識別する)ためにメッセージ200を完全に復号化しないことによって、待ち時間を低減し得る。
【0044】
図5は、一実施形態による、
図1に示されるコンピュータネットワーク内での使用に適した例示的なコンピュータを示す高レベルのブロック図である。例示的なコンピュータ500は、チップセット504に結合された少なくとも1つのプロセッサ502を含む。チップセット504は、メモリコントローラハブ520および入力/出力(I/O)コントローラハブ522を含む。メモリ506及びグラフィックスアダプタ512は、メモリコントローラハブ520に結合され、ディスプレイ518は、グラフィックスアダプタ512に結合される。ストレージデバイス508、キーボード510、ポインティングデバイス514、及びネットワークアダプタ516は、I/Oコントローラハブ522に結合される。コンピュータ500の他の実施形態は、異なるアーキテクチャを有する。
【0045】
図5に示す実施形態では、ストレージデバイス508は、ハードドライブ、コンパクトディスク読み取り専用メモリ(CD-ROM)、DVD、またはソリッドステートメモリデバイス等の非一時的なコンピュータ可読記憶媒体である。メモリ506は、プロセッサ502によって使用される命令およびデータを保持する。ポインティングデバイス514は、マウス、トラックボール、タッチスクリーン、または他のタイプのポインティングデバイスであり、コンピュータシステム500にデータを入力するためにキーボード510(オンスクリーンキーボードでもよい)と組み合わせて使用される。グラフィックスアダプタ512は、ディスプレイデバイス518上に画像および他の情報を表示する。ネットワークアダプタ516は、コンピュータシステム500を1つまたは複数のコンピュータネットワークに接続する。
【0046】
図1のエンティティによって使用されるコンピュータのタイプは、実施形態およびこのエンティティによって必要とする処理能力に応じて異なり得る。たとえば、サーバ120には、説明されている機能を提供するために連携して動作する複数のブレードサーバを含む分散データベースシステムが含まれ得る。さらに、コンピュータに、キーボード510、グラフィックスアダプタ512、およびディスプレイ518等、上記のコンポーネントの一部を欠いてもよい。
【0047】
当業者は、記載された概念から逸脱することなく、本明細書に開示された装置および技術の多数の使用および変更並びに逸脱を行い得る。例えば、本開示で図示または説明されるコンポーネントまたは特徴は、図示または説明されるロケーション、設定、またはコンテキストに限定されない。本開示による装置の例は、先行する図の1つ以上を参照して説明したコンポーネント、のすべて、よりも少ないコンポーネント、または、と異なるコンポーネントを含み得る。したがって、本開示は、本明細書に記載された特定の実施態様に限定されるものではなく、むしろ、添付の特許請求の範囲およびその均等物と一致する可能な限り広い範囲が与えられるべきである。
【0048】
追加的な考慮事項
実施形態の前述の説明は、例示の目的で提示されており、網羅的であること、または開示された正確な形態に特許権を限定することを意図していない。当業者は、上記の開示に照らして多くの修正および変更が可能であることを理解し得る。
【0049】
情報に対する演算のアルゴリズムおよび記号表現の観点から、実施形態を説明している。これらのアルゴリズムの説明および表現は、データ処理技術の当業者が、その作業の内容を他の当業者に効果的に伝えるために一般的に使用されている。これらの演算は、機能的、計算的、または論理的に説明されている一方で、コンピュータプログラム、または等価電気回路、マイクロコード等によって実装されると理解される。さらに、普遍性を消失することなく、時にはこれらの演算の配置をモジュールと称すると便利であることが分かる。説明される操作およびそれらに関連するモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせで具現化され得る。
【0050】
本明細書で説明されるいずれかのステップ、演算、またはプロセスは、単独または他のデバイスと組み合わせることで、1つもしくはそれ以上のハードウェアまたはソフトウェアモジュールを用いて実行または実装され得る。一実施形態において、ソフトウェアモジュールは、コンピュータプログラムコードを含むコンピュータ可読媒体を含むコンピュータプログラム製品を用いて実装され、これは、説明されるステップ、操作、またはプロセスのいずれかまたはすべてを実行するためにコンピュータプロセッサによって実行されることが可能である。
【0051】
実施形態は、また、本明細書の演算を実行するための装置に関連し得る。本装置は、要求される目的のために特別に構築されてよく、及び/または、コンピュータに格納されるコンピュータプログラムによって、選択的に起動されるか、または再構成される汎用コンピューティングデバイスを備えてもよい。このようなコンピュータプログラムは、コンピュータシステムバスに結合され得る、非一時的な有形のコンピュータ可読記憶媒体、または電子命令を格納することに適する任意のタイプの媒体に格納され得る。さらに、本明細書において参照される任意のコンピューティングシステムは、単一のプロセッサを含んでもよく、または計算能力を高めるための複数のプロセッサ設計を採用するアーキテクチャであってもよい。
【0052】
実施形態は、また、本明細書で説明されるコンピューティングプロセスによって生成される製品に関連し得る。このような製品は、コンピューティングプロセスから生じる情報から構成されてもよく、その情報は、非一時的な有形のコンピュータ可読記憶媒体に格納され、本明細書で説明されるコンピュータプログラム製品または他のデータとの組み合わせの任意の実施形態を含んでもよい。
【0053】
本明細書で使用される場合、「一つの実施形態」または「一実施形態」への言及は、その実施形態に関連して説明される特定の要素、特徴、構造、または特性が少なくとも一実施形態に含まれることを意味する。本明細書の様々な箇所に現れる「一実施形態において」という語句は、必ずしもすべてが同じ実施形態を指しているとは限らない。同様に、要素または構成要素の前にある「a」または「an」の使用は、単に便宜上のために行われる。この説明は、それ以外の意味であることが明らかでない限り、要素または構成要素のうちの1つまたは複数が存在することを意味すると理解されるべきである。
【0054】
値が「約」または「実質的に」(またはそれらの派生物)として説明される場合、文脈から別の意味が明らかでない限り、そのような値は正確な+/-10%と解釈されるべきである。例から、「約10」は、「9から11の間」を意味する。
【0055】
本明細書で使用される場合、用語「備える」、「備えること」、「含む」、「含むこと」、「有する」、「有すること」、またはそれらの他の変形は、非排他的な包含をカバーすることを意図している。例えば、要素のリストから構成されるプロセス、方法、成形品、又は装置は、必ずしもそれらの要素のみに限定されるものではなく、明示的に列挙されていない、又はそのようなプロセス、方法、成形品、又は装置に固有の他の要素を含み得る。さらに、反対のことが明確に述べられていない限り、「または」は排他的またはではなく、包括的なまたはを指す。例えば、条件AまたはBは、以下のいずれか1つによって満たされる。Aは真(または存在する)およびBは偽(または存在しない)、Aは偽(または存在しない)およびBは真(または存在する)、ならびに、AおよびBの両方が真(または存在する)。
【0056】
本開示を読むと、当業者は、記載された技術およびアプローチを採用するために使用され得るさらなる代替の構造および機能設計を理解するであろう。したがって、特定の実施形態及び用途が例示及び説明されているが、説明された主題は、開示された正確な構造及び構成要素に限定されないことを理解されたい。保護の範囲は、以下の特許請求の範囲によってのみ制限されるべきである。
【0057】
最後に、明細書において用いられる文言は、主に読み易さおよび教育目的のために選択されており、本特許権を描写または制限するために選択されていないことがある。従って、特許権の範囲は、この詳細な説明ではなく、これに基づく出願で発行される特許請求の範囲によって限定されることを意図している。したがって、実施形態の開示は、以下の特許請求の範囲に記載される特許権の範囲を例示することを意図するものであり、限定することを意図するものではない。
【国際調査報告】