(57)【要約】ゲームアセットの場所を追跡するための方法が開示される。コンテンツは、第１のアセットを使用してアプリケーション用に作成される。第１のアセットは、アセットに関連付けられたコンテンツの少なくとも一部分を記述するアセットデータを含む。アセットデータは、１つ以上のメモリ内の場所において１つ以上のファイル内に配置される。アプリケーションに関連付けられたカタログは、サーバー上に作成される。カタログエントリーは、第１のアセットに対して作成される。カタログエントリーは、第１のアセットを一意に識別するアドレスを含む。第１のアセットに関連付けられたアセットデータの要求がアプリケーションから受信され、要求はアドレスを含む。アドレスおよびカタログを用いてアドレスに関連付けられたロケーションデータを決定する。決定されたロケーションデータを用いて決定された場所のアセットデータを検索する。検索したアセットデータはアプリケーションに返される。
2021524098.tif 000002
【特許請求の範囲】
【請求項１】
ゲームアセットの複数の場所を追跡するシステムであって、
サーバーに通信可能に結合された開発者デバイスを備え、
前記開発者デバイスは、１つ以上のメモリおよび１つ以上のコンピュータプロセッサを含み、前記１つ以上のメモリは、アドレス可能アセットモジュールを含み、前記アドレス可能アセットモジュールは、複数の工程を実行するように前記１つ以上のコンピュータプロセッサを設定し、前記複数の工程は、
第１のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第１のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータを前記１つ以上のメモリまたは追加のメモリ内の場所における１つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログを前記サーバー上に作成すること、
前記第１のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第１のアセットの固有識別子であり、前記ロケーションデータは前記第１のアセットの場所の記述である、前記第１のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第１のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を含む、システム。
【請求項２】
前記アドレス可能アセットモジュールは、前記アプリケーションの実行可能なバージョンをビルドするように前記１つ以上のコンピュータプロセッサをさらに設定し、前記実行可能なバージョンは、前記カタログを示すデータを含む、請求項１に記載のシステム。
【請求項３】
前記１つ以上のファイルは、第２の場所に移動され、前記アドレス可能アセットモジュールは、前記カタログエントリー内のロケーションデータを前記第２の場所を記述するデータを用いて修正するように前記１つ以上のコンピュータプロセッサをさらに設定する、請求項１に記載のシステム。
【請求項４】
前記第１のアセットは、第２のアセットからの追加データに依存し、
前記アドレス可能アセットモジュールは、
前記追加データを前記１つ以上のメモリまたは追加のメモリ内の場所における１つ以上のファイル内に配置すること、
前記第２のアセットの追加固有アドレスを前記第１のアセットに関連付けられたカタログエントリーに追加すること、
前記追加データの場所を記述するデータを前記第１のアセットに関連付けられたエントリに追加すること、を含む複数の工程を実行するように前記１つ以上のコンピューティングデバイスをさらに設定する、請求項１に記載のシステム。
【請求項５】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項４に記載のシステム。
【請求項６】
前記アセットを配置することは、
前記アプリケーションの実行可能なバージョンのアセットバンドルを作成することを含み、
前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項２に記載のシステム。
【請求項７】
ゲームアセットの複数の場所を追跡するための方法であって、
開発者デバイスの１つ以上のプロセッサが、第１のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第１のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータを前記１つ以上のメモリ内の場所における１つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログを前記サーバー上に作成すること、
前記第１のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第１のアセットの固有識別子であり、前記ロケーションデータは前記第１のアセットの場所の記述である、前記第１のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第１のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を備える方法。
【請求項８】
前記アドレス可能アセットモジュールは、前記アプリケーションの実行可能バージョンをビルドするように前記１つ以上のコンピュータプロセッサをさらに設定し、前記実行可能なバージョンはカタログを示すデータを含む、請求項７に記載の方法。
【請求項９】
前記１つ以上のファイルは、第２の場所に移動され、前記アドレス可能アセットモジュールは、前記カタログエントリー内のロケーションデータを前記第２の場所を記述するデータを用いて修正するように前記１つ以上のコンピュータプロセッサをさらに設定する、請求項７に記載の方法。
【請求項１０】
前記第１のアセットは、第２のアセットからの追加データに依存し、
前記アドレス可能アセットモジュールは、
前記追加データを前記１つ以上のメモリ内の場所における１つ以上のファイル内に配置すること、
前記第２のアセットの追加固有アドレスを前記第１のアセットに関連付けられたカタログエントリーに追加すること、
前記追加データの場所を記述するデータを前記第１のアセットに関連付けられたエントリに追加すること、を含む複数の工程を実行するように前記１つ以上のコンピューティングデバイスをさらに設定する、請求項７に記載の方法。
【請求項１１】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項１０に記載の方法。
【請求項１２】
前記アセットを配置することは、
前記アプリケーションの実行可能バージョンのアセットバンドルを作成することを含み、
前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項８に記載の方法。
【請求項１３】
一組の命令を含む非一時的なマシン可読媒体であって、
前記一組の命令は、複数の工程を実行するように１つ以上のコンピュータプロセッサを設定し、前記複数の工程は、
第１のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第１のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータを前記１つ以上のメモリ内の場所における１つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログを前記サーバー上に作成すること、
前記第１のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第１のアセットの固有識別子であり、前記ロケーションデータは前記第１のアセットの場所の記述である、前記第１のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第１のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を備える、非一時的なマシン可読媒体。
【請求項１４】
前記アドレス可能アセットモジュールは、前記アプリケーションの実行可能バージョンをビルドするように前記１つ以上のコンピュータプロセッサをさらに設定し、前記実行可能なバージョンはカタログを示すデータを含む、請求項１３に記載の非一時的なマシン可読媒体。
【請求項１５】
前記１つ以上のファイルは、第２の場所に移動され、
前記アドレス可能アセットモジュールは、前記カタログエントリー内のロケーションデータを前記第２の場所を記述するデータを用いて修正するように前記１つ以上のコンピュータプロセッサをさらに設定する、請求項１３に記載の非一時的なマシン可読媒体。
【請求項１６】
前記第１のアセットは、第２のアセットからの追加データに依存し、
前記アドレス可能アセットモジュールは、
前記追加データを前記１つ以上のメモリ内の場所における１つ以上のファイル内に配置すること、
前記第２のアセットの追加固有アドレスを前記第１のアセットに関連付けられたカタログエントリーに追加すること、
前記追加データの場所を記述するデータを前記第１のアセットに関連付けられたエントリに追加すること、を含む複数の工程を実行するように前記１つ以上のコンピューティングデバイスをさらに設定する、請求項１３に記載の非一時的なマシン可読媒体。
【請求項１７】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項１６に記載の非一時的なマシン可読媒体。
【請求項１８】
前記アセットを配置することは、前記アプリケーションの実行可能バージョンのアセットバンドルを作成することを含み、前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項１４に記載の非一時的なマシン可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、その全体が参照により本明細書に組み込まれる２０１８年５月１４日に出願された「ソフトウェア開発におけるアドレス可能なアセットのためのシステムおよび方法」と題された米国仮出願第６２／６７１，２４４号の利益を主張する。
【０００２】
本開示は、ゲームおよびその他の用途における仮想アセットのデータの追跡を管理する際に使用する複数のツールに関する。
【背景技術】
【０００３】
ビデオゲーム作成の世界には、ゲームの設計、構築、デプロイなど、ゲーム作成の主要なプロセスをクリエイターにガイドする多くのツールが存在する。これらのツールの多くは、初心者のコンピュータプログラマー（およびコンピュータ以外のプログラマー）がプロセス内のいくつかのステップを実行することを可能にする。しかし、（例えば、キャラクター、背景オブジェクト、武器、特殊効果等を含む）ゲームまたはその他の用途のデジタルアセットのデータをパッケージ化して追跡するという点では、デプロイメントプロセスは依然として非常に困難である。これは、ゲームがデプロイメントターゲットとして有する可能性のあるオペレーティングシステムおよびデバイスの数が多いことに起因する。
【０００４】
たとえば、オペレーティングシステムおよびデバイスは、多くの場合、デジタルアセットを使用するためのさまざまなフォーマット要件を有する。また、高品質のゲームは、典型的には、多数の仮想アセットを有し、これは、デバイスメモリおよびダウンロード制限が生じる可能性があるモバイルゲームにとって問題となる。さらに、多くのゲームは、新しい仮想アセットを使用して最初にリリースされた後に進化し（例えば、異なるゲームモードの追加またはゲームレベルの追加）、仮想アセットおよび関連するデータの追跡が時間の経過とともに複雑になる。
【０００５】
ゲーム開発者にとって、ゲーム時に効率的にロードできるようにゲームの複数のデジタルアセットを構造化することは困難である。１つの解決策は、複数のデジタルアセットを複数のチャンクに分け、必要なときに（たとえば、チャンク内のアセットが必要な場合に）ダウンロードすることである。デジタルアセットのチャンクを使用する場合の制限は、ゲーム開発者が複雑さを理解し、管理するために必要な高度な専門知識である。アセットのチャンクを使用するには、チャンクとその依存関係をビルド、ロード、アンロード、および管理するためのコードを作成する必要がある。（例えば、新しいアセットがゲームに追加されたときにのみチャンクを更新する）インクリメンタルビルドは確実に機能しないため、アセットが更新されるたびにチャンク内のすべてのアセットの再ビルドが必要になり、ゲーム内のアセットの数に比例して膨大な時間を要する可能性がある。これは、ゲームの複雑さが時間の経過とともに増大するため、コードのリファクタリングの原因となる可能性がある。
【図面の簡単な説明】
【０００６】
本開示の例示的な実施形態の特徴および利点は、添付図面と組み合わせた以下の詳細な説明から明らかになるであろう。
【図１】図１は、一実施形態による、アドレス可能アセットシステムを示す概略図である。
【図２】図２は、一実施形態による、アドレス可能アセットシステムを使用する開発サイクルを示す概略図である。
【図３】図３は、一実施形態による、アドレス可能アセットシステムを使用するコンテンツ作成プロセスのフローチャートである。
【図４】図４は、一実施形態による、アドレス可能アセットシステムを使用するビルドプロセスのフローチャートである。
【図５】図５は、一実施形態による、アドレス可能アセットシステムを使用するランタイムプロセスのフローチャートである。
【図６】図６は、本明細書に記載される様々なハードウェアアーキテクチャと併せて使用され得る例示的なソフトウェアアーキテクチャを示すブロック図である。
【図７】図７は、マシン可読媒体（例えば、マシン可読記憶媒体）から命令を読み取り、本明細書で論じる方法の任意の１つまたは複数を実行するように構成された、いくつかの例示的な実施形態によるマシンの構成要素を示すブロック図である。
【発明を実施するための形態】
【０００７】
添付図面全体を通して、同様の特徴は同様の参照符号によって識別されることに留意されたい。
以下の説明は、独立したまたは組み合わせた本開示の例示的な実施形態を備える例示的なシステム、方法、技術、命令シーケンス、および計算機プログラム製品を記載する。以下の説明では、説明の目的で、本発明の主題の様々な実施形態の理解を促すために、多数の具体的な詳細が述べられている。しかしながら、本発明の主題の様々な実施形態がこれらの具体的な詳細なしで実施されてもよいことは当業者には明らかであろう。
【０００８】
本明細書では、アドレスを用いてゲームの複数のデジタルアセットの効率的なランタイムローディング（runtime loading）を提供するアドレス可能アセットシステム（Addressable Asset System）について説明する。アドレス可能アセットシステムは、ゲームのアセット管理を処理し、コンテンツの作成およびデプロイメント（deployment）を簡素化する。一実施形態によれば、ゲームのプレイ（例えば、ゲームコードの実行）中、アドレス可能アセットシステムは、ゲームコードによってランタイム（runtime）時にデジタルアセットに関連するアドレスを単に問い合わせ、そのアドレスに存在するデジタルアセットを記述するデータを受信することを可能にする。アドレス可能アセットシステムを使用すると、開発スタジオは（例えば、ゲーム開発の）プロジェクトのイテレーション時間（iteration time）を大幅に向上させることができ、プロジェクトの設計、コーディング、およびテストをより頻繁に行うことができるため、より高品質のゲームまたはアプリケーションが得られる。
【０００９】
例示的な実施形態では、ゲームアセットの場所を追跡するための方法が開示される。コンテンツは、第１のアセットを使用してアプリケーション用に作成される。第１のアセットは、アセットに関連付けられたコンテンツの少なくとも一部分を記述するアセットデータを含む。アセットデータは、１つ以上のメモリ内の場所において１つ以上のファイル内に配置される。アプリケーションに関連付けられたカタログ（catalog）は、サーバー上に作成される。カタログエントリー（catalog entry）は、第１のアセットに対して作成される。カタログエントリーはアドレスおよびロケーションデータ（location data）を少なくとも含み、アドレスは第１のアセットの固有識別子であり、ロケーションデータは第１のアセットの場所の記述である。第１のアセットに関連付けられたアセットデータの要求がアプリケーションから受信され、要求はアドレスを含む。アドレスおよびカタログを用いてアドレスに関連付けられたロケーションデータを決定する。決定されたロケーションデータを用いて決定された場所のアセットデータを検索する。検索したアセットデータはアプリケーションに返される。
【００１０】
本明細書の説明を通して使用される「環境」または「ゲーム環境」という用語は、（例えば、２Ｄビデオゲーム環境、２Ｄシミュレーション環境等の）２Ｄデジタル環境、（例えば、３Ｄゲーム環境、３Ｄシミュレーション環境、３Ｄコンテンツ作成環境、仮想現実環境等の）３Ｄデジタル環境、および（例えば、仮想の）デジタルコンポーネントおよび現実世界コンポーネントの両方を含む拡張現実環境を含むものと理解される。
【００１１】
本明細書で使用される「ゲームオブジェクト（game object）」という用語は、環境（例えば、ゲーム環境）内の任意のデジタルオブジェクトまたはデジタル要素を含むものと理解される。ゲームオブジェクトは、キャラクター、武器、（例えば、建物、樹木、車、宝物などの）シーン要素、（例えば、地形、空などの）背景、光、カメラ、（例えば、音響的なおよび視覚的な）エフェクト、アニメーションなどを含む環境内のほとんどすべてのオブジェクトを表現できる。ゲームオブジェクトは、オブジェクトのプロパティおよび動作を定義するデータに関連付けられている。
【００１２】
本明細書で使用される「アセット」、「ゲームアセット」および「デジタルアセット」という用語は、ゲームオブジェクトを記述するために使用することができるか、またはゲームまたはプロジェクトの態様を記述するために使用することができる任意のデータを含むものと理解される。たとえば、アセットは、画像、（テクスチャ、リギング（rigging）などの）３Ｄモデル、（例えば、シーン全体の）３Ｄモデルのグループ、オーディオサウンド、ビデオ、アニメーション、３Ｄメッシュなどのデータを含むことができる。アセットを記述するデータは、ファイル内に格納されるか、ファイルの集合内に含まれるか、圧縮されて（例えば、圧縮ファイルの）特定のファイル内に格納されるか、またはメモリ内に格納されてもよい。アセットを記述するデータを使用してランタイム時にゲーム内の１つ以上のゲームオブジェクトをインスタンス化する（instantiate）ことができる。
【００１３】
本明細書の説明全体を通して、「アセットバンドル（asset bundle）」という用語は、１つまたは複数のアセットを記述するデータのグループ化を指す。データのグループ化は、ファイルまたは（ｚｉｐファイルなどの）ファイルのグループ内でまたはメモリ内で行うことができる。アセットバンドル内のデータは、実行可能なゲームファイルの外部に格納され、ゲーム内でオブジェクトを作成または変更するためにランタイム時にゲームによって使用されるデータである。２つ以上のアセットバンドルは、互いに依存関係を有することができ、たとえば、アセットバンドル「Ａ」のマテリアルを表すアセットは、アセットバンドル「Ｂ」のテクスチャを表すアセットを参照することができる。さらに、ゲームのランタイム時に、アセットバンドルは、プログラミングオブジェクト（例えば、オブジェクト指向プログラミングオブジェクト）によって表され、（例えば、実行可能ゲームファイル内から）コードを用いて対話して、特定のアセットバンドルからゲームにアセットを記述するデータをロードすることができる。アセットバンドルのプログラミングオブジェクトは、ゲーム内のオブジェクトへの場所のマッピング（例えば、アセットバンドル内のファイルへのファイルパス）を含むことができる。
【００１４】
次に図面を参照すると、本発明の実施形態による、アドレス可能アセットのための非定型または非従来型の複数のコンポーネントまたは複数の工程、またはそのようなコンポーネントまたは工程の組み合わせを含むシステムおよび方法が例示されている。一実施形態によれば、図１は、アドレスによる複数のアセットの効率的なランタイムローディングを提供するアドレス可能アセットシステム１００を示している。例示的な実施形態では、アドレス可能アセットシステム１００は、（例えば、ゲーム開発者、アーティスト等の）開発者１３０によって操作される開発者デバイス１０２と、ユーザー１６０によって操作されるユーザーデバイス１６２と、（例えば、セルラーネットワーク、Ｗｉ−Ｆｉネットワーク、インターネット、有線ローカルネットワーク等の）ネットワーク１５０を介してネットワーク通信で結合されるコンテンツサーバー１４０とを含む。いくつかの実施形態では、コンテンツサーバー１４０は、コンテンツ配信ネットワーク（content delivery network : CDN）であり得る。ユーザーデバイス１６２は、（例えば、ビデオゲーム、シミュレーション、仮想現実体験、拡張現実体験等の）マルチメディア体験をユーザー１６０に提供することができるコンピューティングデバイスである。いくつかの実施形態では、ユーザーデバイス１６２は、スマートフォン、タブレットコンピュータ、および仮想現実ＨＭＤ、拡張現実ＨＭＤ、および混合現実ＨＭＤなどのヘッドマウントディスプレイ（head mounted display : HMD）などのモバイルコンピューティングデバイスである。いくつかの実施形態では、ユーザーデバイス１６２は、デスクトップコンピュータまたはゲームコンソール（game console）である。開発者デバイス１０２は、統合開発環境ＩＤＥまたは（例えば、Ｕｎｉｔｙ（登録商標）ゲームエンジンの）ゲーム開発プラットフォームを開発者１３０に提供することができるコンピューティングデバイスである。いくつかの実施形態では、開発者デバイス１０２は、スマートフォン、タブレットコンピュータ、および仮想現実ＨＭＤ、拡張現実ＨＭＤ、および混合現実ＨＭＤなどのヘッドマウントディスプレイ（head mounted display : HMD）などのモバイルコンピューティングデバイスである。いくつかの実施形態では、開発者デバイス１０２は、デスクトップコンピュータである。
【００１５】
一実施形態によれば、コンテンツサーバー１４０は、データベース１４２およびサーバー１４４を含む。データベース１４２は、ユーザーデバイス１６２上に常駐するアプリケーション（例えば、ゲーム）によって使用される複数のアセットを含む。
【００１６】
一実施形態によると、開発者デバイス１０２は、１つ以上の中央処理ユニット１０３（central processing unit : CPU）と、グラフィック処理ユニット１０５（graphics processing unit : GPU）と、を含む。ＣＰＵ１０３は、任意のタイプのプロセッサであり、複数の処理要素（図示せず）を含み、メモリ１０１にアクセスしてそこに格納された複数の命令を検索し、そのような複数の命令を実行するプロセッサアセンブリである。そのような複数の命令の実行時に、複数の命令によって、本明細書で説明されるような一連のタスクを実行するように開発者デバイス１０２が実装される。メモリ１０１は、ランダムアクセスメモリ、読み出し専用メモリまたは書き換え可能メモリ、内部プロセッサキャッシュなどの任意のタイプのメモリデバイスとすることができる。
【００１７】
また、開発者デバイス１０２は、例えば、キーボード又はキーパッド、マウス、ポインティングデバイス及びタッチスクリーン等の１つ以上の入力／出力デバイス１０８を含む。開発者デバイス１０２は、さらに、ビデオ、ビデオゲーム環境、統合開発環境、および仮想シミュレーション環境を含むデジタルコンテンツを開発者１３０に表示するように構成され得るコンピュータモニタ、タッチスクリーン、およびヘッドマウントディスプレイなどの１つ以上のディスプレイデバイス１０９を含む。ディスプレイデバイス１０９は、１つまたは複数のＧＰＵ１０５および任意選択的にはＣＰＵ１０３によって駆動または制御される。ＧＰＵ１０５は、ディスプレイデバイス１０９を介した出力のレンダリングを高速化するのを支援する画像出力の態様を処理する。また、開発者デバイス１０２は、ネットワーク１５０を介して通信するための（例えば、有線または無線ネットワークアダプタの）１つ以上のネットワークデバイス１０７を含む。
【００１８】
開発者デバイス１０２内のメモリ１０１は、ディスプレイデバイス１０９および１つまたは複数の入力デバイス１０８などの他のハードウェアと通信して開発者１３０にアプリケーションを提示する（例えば、ＣＰＵ１０３またはＧＰＵ１０５によって実行される）ゲームエンジン１０４を含む（例えば、統合開発環境ＩＤＥの）アプリケーション１１４を格納するように構成されることができる。ゲームエンジン１０４は、典型的には、ユーザーにアプリケーション環境（例えば、ビデオゲームまたはシミュレーション環境）を提供するために、ゲームオブジェクトのアニメーション物理特性（animation physics）、ゲームオブジェクトの衝突検出、レンダリング、ネットワーキング、サウンド、アニメーションなどを提供する１つ以上のモジュールを含む。アプリケーション１１４は、本明細書で説明されるような様々なアドレス可能アセットシステム１００の機能を提供するアドレス可能アセットモジュール１１６を含む。アプリケーション１１４は、ビルドマネージャ（build manager）１１８およびリソースマネージャ（resource manager）１２０を含む。ゲームエンジン１０４、アプリケーション１１４、ビルドマネージャ１１８、リソースマネージャ１２０、およびアドレス可能アセットモジュール１１６のそれぞれは、メモリ１０１内に存在し、動作中にＣＰＵ１０３および任意選択的にはＧＰＵ１０５によって実行される複数のコンピュータ実行可能命令を含む。ゲームエンジン１０４は、メモリ１０１内に存在し、ゲームエンジンのようなランタイムプログラムを作成するために動作中にＣＰＵ１０３および任意選択的にはＧＰＵ１０５によって実行される複数のコンピュータ実行可能命令を含む。アプリケーション１１４は、メモリ１０１内に存在し、ＩＤＥのようなランタイムアプリケーションを作成するために動作中にＣＰＵ１０３および任意選択的にはＧＰＵ１０５によって実行される複数のコンピュータ実行可能命令を含む。アドレス可能アセットモジュール１１６、ビルドマネージャ１１８、およびリソースマネージャ１２０は、ゲームエンジン１０４内に直接統合されるか、アプリケーション１１４内に統合されるか、または（例えば、プラグインの）外部のソフトウェアとして実装されてもよい。
【００１９】
一実施形態によれば、ユーザーデバイス１６２は、（例えば、開発者デバイス１０２のＣＰＵ１０３と同様の）１つ以上の中央処理ユニット１６３と、（例えば、開発者デバイス１０２のＧＰＵ１０５と同様の）グラフィック処理ユニット１６５とを含む。ＣＰＵ１６３は、任意のタイプのプロセッサであり、複数の処理要素（図示せず）を含み、メモリ１６１にアクセスしてそこに格納された複数の命令を検索し、そのような複数の命令を実行するプロセッサアセンブリである。そのような複数の命令の実行時に、複数の命令によって、本明細書で説明されるような一連のタスクを実行するようにユーザーデバイス１６２が実装される。メモリ１６１は、開発者デバイス１０２上のメモリ１０１と同様の任意のタイプのメモリデバイスであり得る。
【００２０】
また、ユーザーデバイス１６２は、開発者デバイス１０２上の入力／出力デバイス１０８と同様の１つ以上の入力／出力デバイス１６８を含む。ユーザーデバイス１６２は、開発者デバイス１０２上のディスプレイデバイス１０９と同様であり、ビデオ、ビデオゲーム環境、および仮想シミュレーション環境を含むデジタルコンテンツをユーザー１６０に表示するように構成され得る１つ以上のディスプレイデバイス１６９をさらに含む。ディスプレイデバイス１６９は、１つまたは複数のＧＰＵ１６５および任意選択的にはＣＰＵ１６３によって駆動または制御される。ＧＰＵ１６５は、ディスプレイデバイス１６９を介した出力のレンダリングを高速化するのを支援するグラフィック出力の態様を処理する。また、ユーザーデバイス１６２は、ネットワーク１５０を介して通信するための（例えば、有線または無線ネットワークアダプタの）１つ以上のネットワークデバイス１６７を含む。
【００２１】
一実施形態によれば、ユーザーデバイス１６２内のメモリ１６１は、ディスプレイデバイス１６９および１つまたは複数の入力デバイス１６８などの他のハードウェアと通信してユーザー１６０にアプリケーションを提示する（例えば、ＣＰＵ１６３またはＧＰＵ１６５によって実行される）ゲームエンジン１６４を含む（例えば、ビデオゲーム、シミュレーション、仮想現実体験、拡張現実体験の）アプリケーション１７４を格納するように構成されることができる。ゲームエンジン１６４は、開発者デバイス１０２上のゲームエンジン１０４と同様である。アプリケーション１７４は、本明細書において記載されるような様々なアドレス可能アセットシステム１００の機能を提供するアドレス可能アセットモジュール１６６を含む。アプリケーション１７４は、リソースマネージャ１７０を含む。ゲームエンジン１６４、アプリケーション１７４、リソースマネージャ１７０、およびアドレス可能アセットモジュール１６６のそれぞれは、メモリ１６１内に存在し、動作中にＣＰＵ１６３および任意選択的にはＧＰＵ１６５によって実行される複数のコンピュータ実行可能命令を含む。ゲームエンジン１６４は、メモリ１６１内に存在し、ゲームエンジンのようなランタイムプログラムを作成するために動作中にＣＰＵ１６３および任意選択的にはＧＰＵ１６５によって実行される複数のコンピュータ実行可能命令を含む。アプリケーション１７４は、メモリ１６１内に存在し、ビデオゲームまたはシミュレーターのようなランタイムアプリケーションを作成するために動作中にＣＰＵ１６３および任意選択的にはＧＰＵ１６５によって実行される複数のコンピュータ実行可能命令を含む。アドレス可能アセットモジュール１６６およびリソースマネージャ１７０は、ゲームエンジン１６４内に直接統合されるか、アプリケーション１７４内に統合されるか、または（例えば、プラグインの）外部のソフトウェアとして実装されてもよい。
【００２２】
一実施形態によれば、図２には、アドレス可能アセットシステム１００を使用してアプリケーションを作成するアプリケーション開発サイクル２０５が示されている。サイクル２０５の第１のプロセスは、アプリケーションコンテンツ作成２００であり、ここでは、開発者１３０は、開発者デバイス１０２を使用してアプリケーション（例えば、ビデオゲーム、仮想現実体験、映像、シミュレーション等）のコンテンツを作成する。例えば、開発者１３０は、アプリケーション１１４およびその中のゲームエンジン１０４を使用して、複数のゲームオブジェクトを用いた３Ｄシーンを作成し且つ複数のゲームオブジェクトにプロパティおよび動作を割り当てることによってコンテンツを作成することができる。サイクル２０５の第２のプロセスは、アプリケーションビルド（application build）２０２であり、ここでは、（例えば、Ｍｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、Ａｐｐｌｅ（登録商標）オペレーティングシステム、Ｌｉｎｕｘオペレーティングシステム、Ａｎｄｒｏｉｄ（登録商標）オペレーティングシステム等を含む）オペレーティングシステム上で実行可能なスタンドアロン実行可能アプリケーションが作成される。実行可能アプリケーションは、実行可能ファイルおよび実行可能ファイルが必要とする可能性のあるその他のデータファイル（例えば、リソースファイル）を含み得る。スタンドアロン実行可能アプリケーションをビルドする場合、結果の複数のファイルはビルドターゲット（build target）のオペレーティングシステムによって異なる。たとえば、実行可能アプリケーション内の複数のファイルは、オペレーティングシステムごとに異なってもよい。サイクル２０５における第３のプロセスは、ランタイムプロセス２０４であり、ここでは、実行可能なアプリケーションがユーザーデバイス１６２上で動作し（例えば、実行し）、（例えば、ゲーム、仮想現実体験、映像、シミュレーション等の）アプリケーションをユーザー１６０に提示する。
【００２３】
一実施形態によれば、図３には、アプリケーション開発サイクル２０５からのアプリケーションコンテンツ作成プロセス２００の複数の工程が示されている。工程３００において、開発者１３０は、１つ以上のアセットを用いてアプリケーションのコンテンツを作成する。作成プロセスの一部として、開発者１３０は、アプリケーションの複数のアセットをインポートすることができ、アプリケーションの複数のアセットを作成することができる。コンテンツの作成は、（例えば、キャラクターおよび風景の）複数のゲームオブジェクト、複数のゲームレベルなどの作成を含む。工程３０２において、ゲームエンジン１０４は、（例えば、数字、アルファベット、英数字または任意の種類の文字列識別を含む）各アセットについて固有の識別（または固有のＩＤ）を生成する。固有のＩＤは、特定のアセットを識別する永続的な固有の識別子である。アセットを定義するデータは、１つ以上のファイルに格納される。工程３０４において、アドレス可能アセットシステム１００を使用して、開発者１３０は、（例えば、モジュール１１６によって生成されるグラフィカルユーザーインタフェースを介して、またはモジュール１１６によって提供されるコードおよびアプリケーションインタフェース（ＡＰＩ）を介して）アセットがアドレス可能であることを示す。一実施形態によれば、アドレス可能アセットは、アドレス可能アセットの容易な識別および参照のために、関連付けられた名前（例えば、文字列ラベル）を有する。いくつかの実施形態では、ラベルは、１群のアドレス可能アセットによって共有され得る。アドレス可能アセットのラベルは、複数の同様のアセットのランタイムローディングに使用できる二次識別子を提供する。例えば、ゲームは、いくつかの種類の空間ハザード（space hazard）を含み、それらは、「spaceHazards」とラベル付けされ、ラベルを入力として用いる単一のコマンド（例えば、LoadAll(“spaceHazards”)）ですべてアクセスされることができる。工程３０６において、アドレス可能アセットモジュール１１６は、アセットのアドレスを提供し、そのアドレスを（例えば、ファイルパス名の）アセットデータの場所に関連付ける。一実施形態によれば、場所は、コンテンツサーバー１４０（例えば、コンテンツ配信ネットワーク）、リモートサーバー、およびローカルデータ記憶装置（例えば、開発者デバイス１０２上のローカルハードドライブ）などの物理的位置を含む。アドレスは、ランタイム時に（例えば、ゲームがプレイされるときに）効率的に検索するためにアセットを識別する。一実施形態によれば、アセットアドレスは、アセットのデータを含むファイルのファイルパス位置の文字列値に初期化される。工程３０８において、アドレス可能アセットモジュール１１６は、（例えば、開発者によって）データが移動されるとき、（例えば、データを含む１つまたは複数のファイルを追跡することによって）アセットデータの場所を追跡する。
【００２４】
一実施形態によれば、図４には、アドレス可能アセットシステム１００を使用するビルドプロセス２０２が示されている。ビルドプロセス２０２の工程４００において、アドレス可能アセットモジュール１１６は、アセットバンドルにパッケージ化されるアドレス可能アセットグループ（例えば、アドレス可能アセットのリスト）を記述するデータを受信する。例えば、開発者１３０は、モジュール１１６またはゲームエンジン１１４によって提供されるユーザーインタフェースを使用して、アドレス可能アセットグループを作成し得る。工程４０２において、ビルドマネージャ１１８は、アプリケーションのビルドの要求を受信する。要求は、アセットバンドルのビルド（例えば、実行可能なアプリケーションで使用できるアセットバンドルのパッケージ化されるバージョンを含むビルド）の設定を含む（例えば、開発者によって作成された）プロファイルデータを含む。ビルドプロセス２０２の工程４０２の一部として、開発者は、（例えば、グラフィカルユーザーインタフェースを介して）要求を行い、プロファイルを作成し得る。ビルドプロセス２０２の工程４０４において、アドレス可能アセットグループ内の各アセットについて、アドレス可能アセットモジュール１１６は、複数のアセットファイルの最新の場所（例えば、最新のファイルパス）を検索する。ビルドプロセス２０２の工程４０６において、アドレス可能アセットモジュール１１６は、アプリケーションに関連付けられた１つ以上のアセットバンドルを含むアプリケーションのコンテンツカタログを作成する。コンテンツカタログは、アセットアドレスのリストを含み、１つまたは複数のアセットバンドル内の各アセットは、リスト内の少なくとも１つのアセットアドレスエントリに関連付けられる。一実施形態によれば、リスト上の各アセットアドレスエントリについて、アセットを記述する複数のファイルの場所に関するデータが提供される。コンテンツカタログは、アセットアドレスと、アセットアドレスに関連付けられたアセットを記述するデータを含む少なくとも１つの場所との間のマッピングを提供する。各コンテンツカタログは、実行可能なアプリケーションに関連付けられている（例えば、実行可能アプリケーションは、それが関連付けられているコンテンツカタログを指すデータを含むことができる）。コンテンツカタログは、アセットを記述するデータをアプリケーションにロードするための複数の命令を含めることもできる。ビルドプロセス２０２の工程４０８において、アドレス可能アセットモジュール１１６は、アドレス可能アセットグループからのそれらの依存関係を有する複数のアセットを、要求内の複数の設定に従ってアセットバンドルにパッキングする（pack）。アドレス可能アセットモジュール１１６は、（例えば、複数のアセットがアドレス可能アセットモジュール１１６によって追跡されることによって）複数のアセットが移動されるかまたは名前を変更されても、複雑なアセット依存チェーン（complex asset dependency chains）を理解し、複数のバンドルを効率的にパッキングする。一実施形態によれば、工程４０８の一部として、アドレス可能アセットモジュール１１６は、重複する複数のアセットを分離し、ランタ���ム時におけるクリーンなローディング（cleaner loading）のために別個のバンドルに配置する。重複するアセットは、２つ以上のアセットの依存関係を有する単一のアセットである。一実施形態によれば、アドレス可能アセットモジュール１１６は、（例えば、ユーザーインタフェースメニュー、ゲームまたはアプリケーションのチュートリアル、および第１のレベルのゲームコンテンツ用の複数のアセットを含む）アセットバンドルに含まれる複数のアセットの一部分に優先順位を付ける。工程４０８の一部として、アドレス可能アセットモジュール１１６は、プロファイルに示される最大サイズ制限に基づいて複数のコンテンツビルドを分割することができる。例えば、アドレス可能アセットシステム１００は、ビルドされたアプリケーション（例えば、１００ＭＢ）のサイズを制限し、ゲームまたはアプリケーションのコンテンツのパッケージングを最適化し、ネットワークを介したデバイスへのデータのダウンロードを削減し、メモリへのデータのロードを削減するために、残りの複数のアセットをダウンロード可能なコンテンツとしてアセットバンドルに集めるように構成されることができる。
【００２５】
一実施形態によれば、図５には、開発サイクル２０５のランタイムモード２０４が示されており、アプリケーションは、ユーザー１６０にアプリケーションのランタイムバージョンを提示するためにユーザーデバイス１６２上にダウンロードされて実行される。アプリケーションのランタイムにおいて、アプリケーション１７４内のアドレス可能アセットモジュール１６６は、（例えば、アプリケーションによる使用のために）アセットバンドルからユーザーデバイス１６２上のメモリ１６１に複数のアセットをロードする。アドレス可能アセットシステム１００は、どのアセットバンドルに１つまたは複数のアセットがあるのかまたはアセットバンドルがどこに位置しているのか（たとえば、ネットワーク上のリモートデバイスまたはローカルデバイス上）、あるいはアドレス可能アセットが開発者によって移動されたかに関わらず、コンテンツカタログ内のマッピングを使用して、ランタイム時に１つ以上のアドレス可能アセット（たとえば、複数のアセットのシーン全体）を名前（例えば、ラベルまたアドレス）によってロードすることを可能にする。アドレス可能アセットモジュール１６６がアドレス可能アセットの現在の場所を常に含むように、アセットロケーションの変更は、（例えば、工程３０８および工程４０６においてアドレス可能アセットモジュール１１６によって）コンテンツカタログ内でリアルタイムに追跡および更新される。アドレスでアセットを指定すると、複数の開発者は、ディスク、サーバー、またはコンテンツ配信ネットワーク（ＣＤＮ）上のアセットのデータの場所を直接追跡するための特定のコードを記述しなくても、ランタイム時に複数のアセットをロードする複数のアプリケーションを開発できる。
【００２６】
一実施形態によれば、図５を参照すると、ランタイムモード２０４の工程５００において、アプリケーションは、ユーザーデバイス１６２上で動作する（例えば、実行される）。例えば、アプリケーションは、（例えば、アプリケーション１７４のランタイムバージョンでゲームをプレイするために）ユーザーデバイス１６２を操作するユーザーによって実行されてもよい。一実施形態によれば、ランタイムモード２０４の工程５０２において、アプリケーション１７４は、（実行中に）アセットバンドル内からアセットを要求する。実行中のアプリケーションは、必要なアセットのアドレスを決定し、アドレス可能アセットモジュール１６６にアドレスを含む要求を送信する。要求は、アドレスと、（例えば、複数のアセットファイル内のアセットデータの）必要なアセットに関連付けられたデータの要求とを含む。一実施形態によれば、ランタイムモード２０４の工程５０４において、アドレス可能アセットモジュール１６６は、ネットワーク１５０を介してコンテンツサーバー１４０上のコンテンツカタログと通信し（例えば、要求を送信し）、アドレスに関連付けられたデータの現在の場所を決定する。一実施形態によればと、ランタイム２０４の工程５０６において、アドレス可能アセットモジュール１６６は、コンテンツカタログから受信した現在の場所から、必要なアセットデータを非同期的にダウンロードする。
【００２７】
一実施形態によれば、アドレス可能アセットシステム１００は、依存性管理を含み、コンテンツカタログは、カタログ内の各アドレスエントリに関する依存性情報（dependency information）を含む。従って、工程５０４および工程５０６の一部としてランタイムにおいて、アドレス可能アセットモジュール１１６は、（例えば、依存関係の場所を指定せずに）要求された任意のアドレスについての複数の依存アセットに関連するデータを受信する。例えば、アプリケーション１７４は、そのアドレスまたはラベルだけによってアセットを要求することができ、その複数の依存アセットに関するデータを受信する。
【００２８】
一実施形態によれば、工程５０６における非同期ローディングでは、要求された複数のアセットおよび要求された複数のアセットの依存関係は、任意の順序でローディングするために、任意の場所（ローカル、リモートサーバー、またはＣＤＮ）に存在することができる（たとえば、同期ローディングとは異なり、依存関係を有するローカルアセットは、依存関係がローカルである必要があり、アセットのロードに続いて直接ロードされる必要がある）。実行中のアプリケーションによる使用のためにメモリへの非同期ダウンロードおよびロードを使用することによって、アドレス可能アセットシステム１００は、アプリケーション１７４内のコードを変更することなく、複数のアセットを（例えば、ローカルのビルドグループからリモートのビルドグループへ）移動させる柔軟性を複数のユーザーに与える。アドレスと組み合わされた非同期ローディングによって、（例えば、工程３０２で作成される）固有のアセット識別子が場所、パッケージング、およびローディングと切り離され、これらの態様を開発サイクル２０５の間に変更し且つデプロイメントの必要性に適応させることを可能にする。より具体的には、アセットの場所を参照するために（例えば、アプリケーション内の）コードの変更を必要とすることなく、アプリケーションの開発サイクル２０５の全体において、（例えば、ローカル、リモート、生成などの）アセットの場所を変更することができる。アドレス可能アセットシステムがない場合、開発者はアセットをローカルからリモートビルドグループに移動させるときに、（例えば、追加のアセットローディングロジックを処理するために）アプリケーションコードを変更する必要がある。アドレス可能アセットシステム１００は、アプリケーション１７４が開発者によって更新されているときに、エンドユーザーが可能な限り少ないデータを再ダウンロードすることを可能にする。アドレス可能アセットシステム１００は、単純なコンテンツレイアウトの初期プロトタイプからローカルデータ、複数のサーバー、様々なプラットフォームにまたがるより複雑なコンテンツレイアウトの出荷可能製品までの容易な移行プロセスをサポートすることができる。
【００２９】
一実施形態によれば、ランタイムモード２０４の一部として、工程５２０において、開発者は、アプリケーション１７４の１つ以上のアセットを更新する。この変更は、アセットを（例えば、ビルドプロセス２０２内で）何度も発生するビルドプロセスを説明する別のアセットバンドルに移動することによるかまたは（ビルドプロセス２０２の後に）複数のアセットバンドルファイルの物理的な場所を変更することによるアセットの場所の変更を含み得る。一実施形態によれば、工程５２２において、アドレス可能アセットモジュール１１６は、（例えば、工程５２０において）開発者が変更を行うと、リアルタイムでコンテンツカタログを更新する。変更されたアセットの新しい場所の情報は、アセットのアドレスに関連付けられてコンテンツカタログに記録される。
【００３０】
一実施形態によれば、アドレス可能アセットシステム１００は、参照カウント（reference counting）と、アプリケーション１７４によってもはや必要とされない場合の複数のアセットバンドルからロードされた複数のアセットの自動的なアンローディング（unloading）とを使用する。
【００３１】
本開示は、方法として実施されることができ、システム、コンピュータ可読媒体、または電気的または電磁的信号において具体化されることができることに留意されたい。上記で説明され、添付の図面に示されている複数の実施形態は、例示のみを目的としている。本開示から逸脱することなく変更を行うことができることは当業者には明らかであろう。そのような変更は、可能な変形として考えられ、開示の範囲内である。
【００３２】
本明細書では、ある特定の実施形態が、ロジックまたはいくつかの構成要素、モジュール、または機構を含むものとして記載されている。モジュールは、ソフトウェアモジュール（例えば、マシン可読記体または送信信号において具体化されるコード）またはハードウェアモジュールのいずれかを構築し得る。「ハードウェアモジュール」は、ある特定の動作を実施することができる有形のユニットであり、ある特定の物理的な方法で構成または配置され得る。様々な例示的な実施形態では、１つ以上のコンピュータシステム（例えば、スタンドアロンコンピュータシステム、クライアントコンピュータシステム、もしくはサーバコンピュータシステム）またはコンピュータシステムの１つ以上のハードウェアモジュール（例えば、プロセッサもしくは一群のプロセッサ）は、本明細書に記載される、ある特定の動作を実施するように動作するハードウェアモジュールとして、ソフトウェア（例えば、アプリケーションまたはアプリケーション部分）によって構成され得る。
【００３３】
いくつかの実施形態では、ハードウェアモジュールは、機械的に、電子的に、またはこれらの任意の好適な組み合わせで実装され得る。例えば、ハードウェアモジュールは、ある特定の動作を実施するように永続的に構成された専用の回路または論理を含み得る。例えば、ハードウェアモジュールは、フィールドプログラム可能なゲートアレイ（ＦＰＧＡ）または特定用途向け集積回路（ＡＳＩＣ）などの専用プロセッサであり得る。ハードウェアモジュールはまた、ある特定の動作を実施するために、ソフトウェアによって一時的に構成されたプログラム可能な論理または回路を含み得る。例えば、ハードウェアモジュールは、汎用プロセッサまたは他のプログラム可能なプロセッサに包含されるソフトウェアを含み得る。ハードウェアモジュールを、専用および永続的に構成された回路、または一時的に構成された（例えば、ソフトウェアによって構成された）回路に機械的に実装する決定は、コストおよび時間の考慮によって進められ得ることが理解されよう。
【００３４】
したがって、「ハードウェアモジュール」という表現は、ある特定の方法で動作するか、または本明細書に記載されるある特定の動作を実施するように、物理的に構築されるか、永続的に構成される（例えば、配線で接続される）か、または一時的に構成される（例えば、プログラムされる）実体である有形の実体を包含するように理解されるべきである。本明細書で使用される場合、「ハードウェア実装モジュール」とは、ハードウェアモジュールを指す。ハードウェアモジュールが一時的に構成される（例えば、プログラムされる）実施形態を考慮すると、ハードウェアモジュールの各々は、時間内の任意の１つのインスタンスにおいて構成またはインスタンス化される必要はない。例えば、ハードウェアモジュールが、特定用途向けプロセッサになるように、ソフトウェアによって構成された汎用プロセッサを含む場合、汎用プロセッサは、異なる時間にそれぞれ異なる特定用途向けプロセッサ（例えば、異なるハードウェアモジュールを含む）として構成され得る。したがって、ソフトウェアは、例えば、時間の１つのインスタンスにおいて特定のハードウェアモジュールを構築し、時間の異なるインスタンスにおいて異なるハードウェアモジュールを構築するように、特定の専用プロセッサ（複数可）を構成する。
【００３５】
ハードウェアモジュールは、他のハードウェアモジュールに情報を提供し、他のハードウェアモジュールから情報を受信することができる。したがって、記載されるハードウェアモジュールは、通信可能に連結されていると見なされ得る。複数のハードウェアモジュールが同時に存在する場合、通信は、ハードウェアモジュールのうちの２つ以上の間で、またはそれらの中で信号伝送を介して（例えば、適切な回路およびバスを介して）達成され得る。複数のハードウェアモジュールが異なる時間において構成またはインスタンス化される実施形態では、かかるハードウェアモジュール間の通信は、例えば、複数のハードウェアモジュールがアクセス権を有するメモリ構造内の情報の記憶および検索を通じて達成され得る。例えば、１つのハードウェアモジュールは、動作を実施し、その動作の出力を通信可能に連結されたメモリデバイスに記憶することができる。次いで、さらなるハードウェアモジュールが、その後になって、メモリデバイスにアクセスして、記憶された出力を検索および処理することができる。ハードウェアモジュールはまた、入力デバイスまたは出力デバイスとの通信を開始することができ、リソースに対して動作（例えば、情報の収集）することができる。
【００３６】
本明細書に記載される例示的な方法の様々な工程は、少なくとも部分的に、関連する動作を実施するように（例えば、ソフトウェアによって）一時的に構成されるか、または永続的に構成される１つ以上のプロセッサによって実施され得る。一時的または永続的に構成されるかどうかにかかわらず、かかるプロセッサは、本明細書に記載される１つ以上の動作または機能を実施するように動作するプロセッサ実装モジュールを構築し得る。本明細書で使用される場合、「プロセッサ実装モジュール」とは、１つ以上のプロセッサを使用して実装されるハードウェアモジュールを指す。
【００３７】
同様に、本明細書に記載される方法は、少なくとも部分的にプロセッサ実装型であり得、特定のプロセッサ（複数可）は、ハードウェアの一例である。例えば、ある方法の工程のうちの少なくともいくつかを、１つ以上のプロセッサまたはプロセッサ実装モジュールによって実施することができる。さらに、１つ以上のプロセッサはまた、「クラウドコンピューティング」環境で、または「サービスとしてのソフトウェア」（ＳａａＳ）として関連する動作の性能をサポートするように動作し得る。例えば、動作のうちの少なくともいくつかを、（プロセッサを含むマシンの例として）一群のコンピュータによって実施することができ、これらの動作は、ネットワーク（例えば、インターネット）、および１つ以上の適切なインタフェース（例えば、アプリケーションプログラムインタフェース（ＡＰＩ））を介してアクセス可能である。
【００３８】
ある特定の動作の性能を、単一のマシン内にあるだけでなく、いくつかのマシンにわたって展開されるプロセッサ間で分散させることができる。いくつかの例示的な実施形態では、プロセッサまたはプロセッサ実装モジュールは、単一の地理的な場所（例えば、家庭環境、オフィス環境、またはサーバファーム内）に位置し得る。他の例示的な実施形態では、プロセッサまたはプロセッサ実装モジュールを、いくつかの地理的な場所にわたって分散させることができる。
【００３９】
図６は、例示的なソフトウェアアーキテクチャ７０２を示すブロック図７００であり、ゲームエンジン７０１および／またはアドレス可能アセットシステム１００のコンポーネントを提供するために、本明細書で説明される様々なハードウェアアーキテクチャと組み合わせて使用され得る。図６は、ソフトウェアアーキテクチャの非限定的な例であり、本明細書に記載の機能を可能にするために他の多くのアーキテクチャが実装され得ることが理解されよう。ソフトウェアアーキテクチャ７０２は、とりわけ、プロセッサ８１０、メモリ８３０、および入力／出力（Ｉ／Ｏ）コンポーネント８５０を含む、図７のマシン８００のようなハードウェア上で実行することができる。代表的なハードウェア層７０４が示されており、これは、例えば、図７のマシン８００を表すことができる。代表的なハードウェア層７０４は、関連する実行可能命令７０８を有する処理ユニット７０６を含む。実行可能な命令７０８は、本明細書で説明される方法、モジュールなどの実装形態を含む、ソフトウェアアーキテクチャ７０２の実行可能な命令を表す。ハードウェア層７０４は、実行可能命令７０８を有するメモリ／記憶装置７１０も含む。ハードウェア層７０４は、他のハードウェア７１２も含み得る。
【００４０】
図６の例示的アーキテクチャでは、ソフトウェアアーキテクチャ７０２は、各層が特定の機能を提供する層のスタックとして概念化することができる。例えば、ソフトウェアアーキテクチャ７０２は、オペレーティングシステム７１４、ライブラリ７１６、フレームワークまたはミドルウェア７１８、アプリケーション７２０、およびプレゼンテーション層７４４などの層を含むことができる。動作上、アプリケーション７２０または層内の他のコンポーネントは、ソフトウェアスタックを介してアプリケーションプログラミングインタフェース（ＡＰＩ）コール（call）７２４を呼び出し、メッセージ７２６として応答を受信することができる。示された層は本質的に代表的なものであり、全てのソフトウェアアーキテクチャが全ての層を有するわけではない。例えば、いくつかのモバイルまたは特殊用途のオペレーティングシステムは、フレームワーク／ミドルウェア７１８を提供しないかもしれないが、他のものはそのような層を提供するかもしれない。他のソフトウェアアーキテクチャは、追加の層または異なる層を含み得る。
【００４１】
オペレーティングシステム７１４は、ハードウェアリソースを管理し、共通のサービスを提供することができる。オペレーティングシステム７１４は、例えば、カーネル７２８、サービス７３０、およびドライバ７３２を含み得る。カーネル７２８は、ハードウェア層と他のソフトウェア層との間の抽象化層として機能することができる。例えば、カーネル７２８は、メモリ管理、プロセッサ管理（例えば、スケジューリング）、コンポーネント管理、ネットワーキング、セキュリティ設定などを担当してもよい。サービス７３０は、他のソフトウェア層に他の共通サービスを提供することができる。ドライバ７３２は、基礎となるハードウェアを制御またはインタフェースすることを担当し得る。例えば、ドライバ７３２は、ハードウェア構成に応じて、ディスプレイドライバ、カメラドライバ、ブルートゥース（登録商標）ドライバ、フラッシュメモリドライバ、シリアル通信ドライバ（例えば、ユニバーサルシリアルバス（ＵＳＢ）ドライバなど）、Ｗｉ−Ｆｉ（登録商標）ドライバ、オーディオドライバ、電源管理ドライバなどを含み得る。
【００４２】
ライブラリ７１６は、アプリケーション７２０または他のコンポーネントまたは層によって利用され得る共通のインフラストラクチャを提供することができる。ライブラリ７１６は、典型的には、他のソフトウェアモジュールが、基礎となるオペレーティングシステム７１４の機能（例えば、カーネル７２８、サービス７３０、および／またはドライバ７３２）と直接インタフェースするよりも簡単な方法でタスクを実行することを可能にする機能を提供し得る。ライブラリ８１６は、メモリ割り当て機能、文字列操作機能、数学的機能などの機能を提供することができるシステムライブラリ７３４（例えば、Ｃ標準ライブラリ）を含むことができる。さらに、ライブラリ７１６は、メディアライブラリ（例えば、ＭＰＲＥＧ４、Ｈ．２６４、ＭＰ３、ＡＡＣ、ＡＭＲ、ＪＰＧ、ＰＮＧなどの様々なメディアフォーマットの提示および操作をサポートするためのライブラリ）、グラフィックライブラリ（例えば、ディスプレイ上の２Ｄおよび３Ｄグラフィックコンテンツをレンダリングするために使用できるＯｐｅｎＧＬフレームワーク）、データベースライブラリ（例えば、様々なリレーショナルデータベース機能を提供できるＳＱＬｉｔｅ）、ウェブライブラリ（例えば、ウェブブラウジング機能を提供することができるＷｅｂＫｉｔ）などのＡＰＩライブラリ７３６を含むことができる。ライブラリ７１６は、アプリケーション７２０および他のソフトウェアコンポーネント／モジュールに、他の多くのＡＰＩを提供するための多種多様な他のライブラリ７３８も含み得る。
【００４３】
（ミドルウェアとも呼ばれる）フレームワーク７１８は、アプリケーション７２０および／または他のソフトウェアコンポーネント／モジュールによって使用され得るより高いレベルの共通インフラストラクチャを提供する。例えば、フレームワーク／ミドルウェア７１８は、様々なグラフィックユーザーインタフェース（ＧＵＩ）機能、高レベルのリソース管理、高レベルの位置識別サービスなどを提供することができる。フレームワーク／ミドルウェア７１８は、アプリケーション７２０および／または他のソフトウェアコンポーネント／モジュール（それらのうちのいくつかは特定のオペレーティングシステムまたはプラットフォームに固有のもの）によって使用され得る広範囲の他のＡＰＩを提供し得る。
【００４４】
アプリケーション７２０は、ビルトインアプリケーション７４０および／またはサードパーティアプリケーション７４２を含む。代表的なビルトインアプリケーション７４０の例は、連絡先アプリケーション、ブラウザアプリケーション、ブックリーダーアプリケーション、ロケーションアプリケーション、メディアアプリケーション、メッセージングアプリケーション、および／またはゲームアプリケーションを含み得るが、それらに限定されない。サードパーティアプリケーション７４２は、特定のプラットフォームのベンダ以外のエンティティによるＡｎｄｒｏｉｄ（登録商標）またはｉＯＳ（登録商標）ソフトウェア開発キット（ＳＤＫ）を用いて開発されたアプリケーションを含み、ｉＯＳ（登録商標）、Ａｎｄｒｏｉｄ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）フォン、または他のモバイルオペレーティングシステムなどのモバイルオペレーティングシステム上で実行されるモバイルソフトウェアであり得る。サードパーティアプリケーション７４２は、本明細書に記載の機能を容易にするために、オペレーティングシステム７１４などのモバイルオペレーティングシステムによって提供されるＡＰＩコール７２４を呼び出すことができる。
【００４５】
アプリケーション７２０は、ビルトインオペレーティングシステム機能（例えば、カーネル７２８、サービス７３０、またはドライバ７３２）、ライブラリ７１６、またはフレームワーク／ミドルウェア７１８を使用して、システムのユーザーと対話するためのユーザーインタフェースを作成することができる。代替的に、または追加的に、いくつかのシステムでは、ユーザーとの対話は、プレゼンテーション層７４４などのプレゼンテーション層を介して行われ得る。これらのシステムでは、アプリケーション／モジュールの「ロジック」は、ユーザーと対話するアプリケーション／モジュールの態様から切り離すことが可能である。
【００４６】
あるソフトウェアアーキテクチャは、仮想マシンを使用する。図６の例では、これは仮想マシン７４８によって示されている。仮想マシン７４８は、アプリケーション／モジュールがハードウェアマシン（例えば、図７のマシン８００など）上で実行されているかのように実行することができるソフトウェア環境を作成する。仮想マシン７４８は、ホストオペレーティングシステム（例えば、オペレーティングシステム７１４）によってホストされ、通常、必ずというわけではないが、仮想マシン７４８の動作ならびにホストオペレーティングシステム（つまり、オペレーティングシステム７１４）とのインタフェースを管理する仮想マシンモニタ７４６を有する。オペレーティングシステム（ＯＳ）７５０、ライブラリ７５２、フレームワーク７５４、アプリケーション７５６、プレゼンテーション層７５８などのソフトウェアアーキテクチャが仮想マシン内で実行される。仮想マシン７４８内で実行されるソフトウェアアーキテクチャのこれらの層は、前述の対応する層と同じでもよく、または異なっていてもよい。
【００４７】
図７は、マシン可読媒体（例えば、マシン可読記憶媒体）から命令を読み取り、本明細書で論じる方法の任意の１つまたは複数を実行するように構成された、ある例示的な実施形態によるマシン８００の構成要素を示すブロック図である。いくつかの実施形態では、マシン８００は、開発者デバイス１０２およびユーザーデバイス１６２と同様である。具体的には、図７は、その中でマシン８００に本明細書で論じられる複数の方法のうちの任意の１つまたは複数を実行させるための命令８１６（例えば、ソフトウェア、プログラム、アプリケーション、アプレット、アプリ、または他の実行可能なコード）が実行され得るコンピュータシステムの例示の形態におけるマシン８００の概略図を示す。したがって、命令８１６を使用して、本明細書に記載のモジュールまたはコンポーネントを具体化し得る。命令は、一般的なプログラムされていないマシンを、説明された方法で説明され示された機能を実行するようにプログラムされた特定のマシンに変換する。代替の実施形態では、マシン８００は、スタンドアロンデバイスとして動作するか、または他のマシンに結合されてもよい（例えばネットワーク接続されてもよい）。ネットワーク化されたデプロイメントでは、マシン８００は、サーバー−クライアントネットワーク環境ではサーバー機器またはクライアント機器のキャパシティで、またはピアツーピア（または分散）ネットワーク環境ではピア機器として動作することができる。マシン８００は、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ（ＰＣ）、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント（ＰＤＡ）、エンターテイメントメディアシステム、携帯電話、スマートフォン、モバイルデバイス、ウェアラブルデバイス（例えばスマートウォッチ）、スマートホームデバイス（例えばスマート電化製品）、その他のスマートデバイス、ウェブ電化製品、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、またはマシン８００によってとられるべき動作を指定する命令８１６を順次または他の方法で実行することができる任意のマシンを含み得るが、これに限定されない。さらに、単一のマシン８００のみが示されているが、「マシン」という用語は、命令８１６を個別にまたは共同で実行して本明細書で論じる方法のうちの任意の１つまたは複数を実行するマシンの集合も含むものと解釈されるべきである。
【００４８】
マシン８００は、バス８０２を介するなどして互いに通信するように構成され得るプロセッサ８１０、メモリ８３０、および入力／出力（Ｉ／Ｏ）コンポーネント８５０を含み得る。例示の実施形態では、プロセッサ８１０（例えば、中央処理ユニット（ＣＰＵ）、縮小命令セット計算（ＲＩＳＣ）プロセッサ、複合命令セット計算（ＣＩＳＣ）プロセッサ、グラフィック処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、無線周波数集積回路（ＲＦＩＣ）、他のプロセッサ、またはそれらの任意の適切な組み合わせ）は、例えば、命令８１６を実行することができるプロセッサ８１２およびプロセッサ８１４を含み得る。用語「プロセッサ」は、同時に命令を実行することができる２つ以上の独立したプロセッサ（時に「コア」と呼ばれる）を含むことができるマルチコアプロセッサを含むことを意図している。図７は、複数のプロセッサを示すが、マシン８００は、単一のコアを有する単一のプロセッサ、複数のコアを有する単一のプロセッサ（例えば、マルチコアプロセッサ）、単一のコアを有する複数のプロセッサ、複数のコアを有する複数のプロセッサ、またはそれらの任意の組み合わせを含み得る。
【００４９】
メモリまたは記憶装置８３０は、メインメモリ８３２、スタティックメモリまたは他のメモリなどのメモリ８３４、ならびに記憶装置ユニット８３６を含むことができ、両方ともバス８０２を介するなどして、プロセッサ８１０にアクセス可能である。記憶装置ユニット８３６およびメモリ８３２は、本明細書に記載の方法または機能のうちの任意の１つまたは複数を具体化する命令８１６を格納する。命令８１６は、マシン８００によるその実行中、メモリ８３２内、記憶装置ユニット８３６内、プロセッサ８１０のうちの少なくとも一つ内（例えば、プロセッサのキャッシュメモリ内）、またはそれらの任意の適切な組合せ内に、完全にまたは部分的に存在し得る。従って、メモリ８３２、記憶装置ユニット８３６、およびプロセッサ８１０のメモリは、マシン可読媒体の例である。
【００５０】
本明細書で使用される「マシン可読媒体」は、命令およびデータを一時的または恒久的に格納することができるデバイスを意味し、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、バッファメモリ、フラッシュメモリ、光学メディア、磁気メディア、キャッシュメモリ、他の種類の記憶装置（例えば、消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ））および／またはそれらの任意の適切な組み合わせを含み得るが、これらに限定されない。「マシン可読媒体」という用語は、命令８１６を格納することができる単一の媒体または複数の媒体（例えば、集中型または分散型データベース、または関連するキャッシュおよびサーバー）を含むと解釈されるべきである。「マシン可読媒体」という用語は、マシン（例えば、マシン８００）による実行のための命令（例えば、命令８１６）を格納することができる任意の媒体、または複数の媒体の組み合わせを含むものとし、命令は、マシン８００の１つまたは複数のプロセッサ（例えば、プロセッサ８１０）により実行されると、マシン８００に本明細書に記載の方法のうちの任意の１つまたは複数を実行させる。したがって、「マシン可読媒体」は、単一の記憶装置またはデバイス、ならびに複数の記憶装置またはデバイスを含む「クラウドベースの」記憶システムまたは記憶ネットワークを指す。「マシン可読媒体」という用語は、信号自体を除く。
【００５１】
入力／出力（Ｉ／Ｏ）コンポーネント８５０は、入力を受信し、出力を提供し、出力を生成し、情報を送信し、情報を交換し、測定値を捕捉するなどのための多種多様な構成要素を含み得る。特定のマシンに含まれる特定の入力／出力（Ｉ／Ｏ）コンポーネント８５０は、マシンの種類に依存する。例えば、携帯電話などの携帯機器は、タッチ入力デバイスまたは他のそのような入力機構を含む可能性があり、ヘッドレスサーバ機器は、そのようなタッチ入力デバイスを含まない可能性が高いであろう。入力／出力（Ｉ／Ｏ）コンポーネント８５０は、図７には示されていない他の多くの構成要素を含み得ることが理解されよう。入力／出力（Ｉ／Ｏ）コンポーネント８５０は、単に以下の説明を単純化するために機能に従ってグループ化されており、そのグループ化は決して限定的なものではない。様々な例示的実施形態では、入力／出力（Ｉ／Ｏ）コンポーネント８５０は、出力コンポーネント８５２および入力コンポーネント８５４を含み得る。出力コンポーネント８５２は、視覚的構成要素（例えば、プラズマディスプレイパネル（ＰＤＰ）、発光ダイオード（ＬＥＤ）ディスプレイ、液晶ディスプレイ（ＬＣＤ）、プロジェクタ、または陰極線管（ＣＲＴ））、音響部品（例えばスピーカ）、触覚部品（例えば振動モータ、抵抗機構）、その他の信号発生器などを含み得る。入力コンポーネント８５４は、英数字入力構成要素（例えば、キーボード、英数字入力を受け取るように構成されたタッチスクリーン、フォトオプティカルキーボード、または他の英数字入力構成要素）、ポイントベースの入力構成要素（例えば、マウス、タッチパッド、トラックボール、ジョイスティック、モーションセンサ、またはその他のポインティングデバイス）、触覚入力コンポーネント（例えば、物理ボタン、タッチまたはタッチジェスチャの位置または力を提供するタッチスクリーン、またはその他の触覚入力構成要素）、音声入力部品（例えば、マイク）などを含み得る。
【００５２】
さらなる例示的実施形態では、入力／出力（Ｉ／Ｏ）コンポーネント８５０は、他の様々なコンポーネントの中で、バイオメトリックコンポーネント８５６、モーションコンポーネント８５８、環境コンポーネント８６０、または位置コンポーネント８６２を含み得る。例えば、バイオメトリックコンポーネント８５６は、表情（例えば、手の表情、顔の表情、声の表情、身体のジェスチャ、または目の動き）を検出し、生体信号（例えば、血圧、心拍数、体温、発汗、または脳波）を測定し、人物を識別（例えば、音声識別、網膜識別、顔識別、指紋識別、または脳波に基づく識別）する等のための構成要素を含み得る。モーションコンポーネント８５８は、加速度センサ構成要素（例えば、加速度計）、重力センサ構成要素、回転センサ構成要素（例えば、ジャイロスコープ）などを含み得る。環境コンポーネント８６０は、例えば、照明センサ構成要素（例えば、光度計）、温度センサ構成要素（例えば、周囲温度を検出する１つまたは複数の温度計）、湿度センサ構成要素、圧力センサ構成要素（例えば、気圧計）、音響センサ構成要素（例えば、背景雑音を検出する１つまたは複数のマイクロフォン）、近接センサ構成要素（例えば、近くの物体を検出する赤外線センサ）、ガスセンサ（例えば、安全のために有害ガスの濃度を検出するための、または大気中の汚染物質を測定するためのガス検出センサ）、または周囲の物理的環境に対応する標示、測定値、または信号を提供することができる他の構成要素を含み得る。位置コンポーネント８６２は、位置センサ構成要素（例えば、全地球測位システム（ＧＰＳ）受信機部品）、高度センサ構成要素（例えば、高度が導出され得る気圧を検出する高度計または気圧計）、方位センサ構成要素（例えば、磁力計）などを含み得る。
【００５３】
通信は、多種多様な技術を使用して実施することができる。入力／出力（Ｉ／Ｏ）コンポーネント８５０は、カップリング（coupling）８８２およびカップリング８７２を介してそれぞれマシン８００をネットワーク８８０またはデバイス８７０に結合するように動作可能な通信コンポーネント８６４を含み得る。例えば、通信コンポーネント８６４は、ネットワーク８８０とインタフェースするためのネットワークインタフェース構成要素または他の適切なデバイスを含み得る。さらなる例では、通信コンポーネント８６４は、有線通信構成要素、無線通信構成要素、セルラ通信構成要素、近距離無線通信（ＮＦＣ）構成要素、Ｂｌｕｅｔｏｏｔｈ（登録商標）構成要素（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）ＬｏｗＥｎｅｒｇｙ）、Ｗｉ−Ｆｉ（登録商標）構成要素、および他のモダリティを介して通信を提供するための他の通信構成要素を含み得る。デバイス８７０は、他のマシンまたは多種多様な周辺デバイス（例えば、ユニバーサルシリアルバス（ＵＳＢ）を介して結合された周辺デバイス）のうちのいずれかであり得る。
【００５４】
さらに、通信コンポーネント８６４は、識別子を検出するか、または識別子を検出するように動作可能なコンポーネントを含み得る。例えば、通信コンポーネント８６４は、ＲＦＩＤ（Radio Frequency Identification）タグリーダーコンポーネント、ＮＦＣスマートタグ検出コンポーネント、光学リーダーコンポーネント（例えば、ＵＰＣ（Universal Product Code）バーコードのような一次元バーコード、ＱＲ（Quick Response）コードのような多次元バーコード、Ａｚｔｅｃコード、Ｄａｔａ Ｍａｔｒｉｘ、Ｄａｔａｇｌｙｐｈ、ＭａｘｉＣｏｄｅ、ＰＤＦ４１７、Ｕｌｔｒａ Ｃｏｄｅ、ＵＣＣ ＲＳＳ−２Ｄバーコード、及び他の光学コードを検出するための光学センサ）、または音響検出コンポーネント（例えば、タグ付きオーディオ信号を識別するためのマイクロフォン）を含み得る。さらに、通信コンポーネント８６２を介して、例えば、インターネットプロトコル（ＩＰ）ジオロケーションを用いた位置、Ｗｉ−Ｆｉ（登録商標）信号三角測量を用いた位置、特定の位置を示すＮＦＣビーコン信号の検出を用いたロケーションなどの様々な情報を取得し得る。
【００５５】
この明細書全体を通して、複数の事例は、単一の事例として記述された構成要素、動作、または構造を実装することができる。１つ以上の方法の個々の工程は別個の工程として図示および説明されているが、個々の工程の１つ以上を同時に実施することができ、図示の順序で工程を実施する必要はない。例示的な構成で個別の構成要素として提示される構造および機能性は、組み合わせた構造または構成要素として実装され得る。同様に、単一の構成要素として提示されている構造および機能性は、個別の構成要素として実装され得る。これらおよび他の変形、修正、追加および改良は、本明細書中の主題の範囲内に入る。
【００５６】
本明細書に示された実施形態は、当業者が開示された教示を実施することを可能にするために十分に詳細に記載されている。本開示の範囲から逸脱することなく、構造的および論理的な置換および変更を行うことができるように、他の実施形態が使用され、かつそこから導出されることが可能である。従って、詳細な説明は限定的な意味で解釈されるべきではなく、様々な実施形態の範囲は添付の特許請求の範囲とそのような特許請求の範囲が権利を与える等価物の全範囲によってのみ定義される。
【００５７】
本明細書で使用されるとき、用語「または」は、包括的または排他的な意味で解釈され得る。さらに、本明細書で単一の事例として説明されているリソース、動作、または構造のために複数の事例を提供することができる。さらに、様々なリソース、動作、モジュール、エンジン、およびデータストア間の境界はいくぶん任意であり、特定の動作は特定の例示的な構成のコンテキストで示される。機能の他の割り当ても想定されており、本開示の様々な実施形態の範囲内にあり得る。一般に、例示的な構成において別々のリソースとして提示された構造および機能は、組み合わされた構造またはリソースとして実装され得る。同様に、単一のリソースとして提示された構造および機能は、別々のリソースとして実装されてもよい。これらおよび他の変形、修正、追加、および改良は、添付の特許請求の範囲によって表される本開示の実施形態の範囲内に含まれる。従って、本明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。
【図１】
2021524098.tif 000003
【図２】
2021524098.tif 000004
【図３】
2021524098.tif 000005
【図４】
2021524098.tif 000006
【図５】
2021524098.tif 000007
【図６】
2021524098.tif 000008
【図７】
2021524098.tif 000009
【国際調査報告】
2021524098.tif 000010
2021524098.tif 000011
2021524098.tif 000012