(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-20
(45)【発行日】2022-06-28
(54)【発明の名称】ソフトウェア開発におけるアドレス可能なアセット
(51)【国際特許分類】
G06F 9/445 20180101AFI20220621BHJP
A63F 13/77 20140101ALI20220621BHJP
【FI】
G06F9/445
A63F13/77
(21)【出願番号】P 2020564069
(86)(22)【出願日】2019-05-14
(86)【国際出願番号】 US2019032166
(87)【国際公開番号】W WO2019222176
(87)【国際公開日】2019-11-21
【審査請求日】2020-11-25
(32)【優先日】2018-05-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】519206586
【氏名又は名称】ユニティ アイピーアール エイピーエス
【氏名又は名称原語表記】UNITY IPR APS
(74)【代理人】
【識別番号】100105957
【氏名又は名称】恩田 誠
(74)【代理人】
【識別番号】100068755
【氏名又は名称】恩田 博宣
(74)【代理人】
【識別番号】100142907
【氏名又は名称】本田 淳
(72)【発明者】
【氏名】アンテ、ヨアヒム クリストフ
(72)【発明者】
【氏名】パーマー、スティーブン ジョセフ
(72)【発明者】
【氏名】バーズレム、ポール エミール
(72)【発明者】
【氏名】ランサー、ウィリアム デイビッド
(72)【発明者】
【氏名】カルタビアーノ、ライアン
(72)【発明者】
【氏名】シャインバーグ、ジョセフ フランクリン
【審査官】多賀 実
(56)【参考文献】
【文献】特開2002-366356(JP,A)
【文献】特開2005-182419(JP,A)
【文献】米国特許出願公開第2009/0282403(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00- 8/38
G06F 8/60- 8/77
G06F 9/44- 9/451
A63F 13/30-13/358
A63F 13/77
(57)【特許請求の範囲】
【請求項1】
ゲームアセットの複数の場所を追跡するシステムであって、
サーバーに通信可能に結合された開発者デバイスを備え、
前記開発者デバイスは、1つ以上のメモリおよび1つ以上のコンピュータプロセッサを含み、前記1つ以上のメモリは、アドレス可能アセットモジュールを含み、前記アドレス可能アセットモジュールは、複数の工程を実行するように前記1つ以上のコンピュータプロセッサを設定し、前記複数の工程は、
第1のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第1のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータを前記1つ以上のメモリまたは追加のメモリ内の場所における1つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログを前記サーバー上に作成すること、
前記第1のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第1のアセットの固有識別子であり、前記ロケーションデータは前記第1のアセットの場所の記述である、前記第1のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第1のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を含む、システム。
【請求項2】
前記アドレス可能アセットモジュールは、前記アプリケーションの実行可能なバージョンをビルドするように前記1つ以上のコンピュータプロセッサをさらに設定し、前記実行可能なバージョンは、前記カタログを示すデータを含む、請求項1に記載のシステム。
【請求項3】
前記1つ以上のファイルは、第2の場所に移動され、前記アドレス可能アセットモジュールは、前記カタログエントリー内のロケーションデータを前記第2の場所を記述するデータを用いて修正するように前記1つ以上のコンピュータプロセッサをさらに設定する、請求項1に記載のシステム。
【請求項4】
前記第1のアセットは、第2のアセットからの追加データに依存し、
前記アドレス可能アセットモジュールは、
前記追加データを前記1つ以上のメモリまたは追加のメモリ内の場所における1つ以上のファイル内に配置すること、
前記第2のアセットの追加固有アドレスを前記第1のアセットに関連付けられたカタログエントリーに追加すること、
前記追加データの場所を記述するデータを前記第1のアセットに関連付けられたエントリに追加すること、を含む複数の工程を実行するように前記1つ以上のコンピュー
タプロセッサをさらに設定する、請求項1に記載のシステム。
【請求項5】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項4に記載のシステム。
【請求項6】
前記アセットを配置することは、
前記アプリケーションの実行可能なバージョンのアセットバンドルを作成することを含み、
前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項2に記載のシステム。
【請求項7】
ゲームアセットの複数の場所を追跡するための方法であって、
開発者デバイスの1つ以上のプロセッサが、第1のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第1のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータ
を1つ以上のメモリ内の場所における1つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログ
をサーバー上に作成すること、
前記第1のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第1のアセットの固有識別子であり、前記ロケーションデータは前記第1のアセットの場所の記述である、前記第1のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第1のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を備える方法。
【請求項8】
前記
1つ以上のプロセッサが、前記アプリケーションの実行可能
なバージョンをビルドする
ことをさらに
備え、
前記実行可能なバージョンはカタログを示すデータを含む、請求項7に記載の方法。
【請求項9】
前記1つ以上のファイルは、第2の場所に移動され、
前記
1つ以上のプロセッサが、前記カタログエントリー内のロケーションデータを前記第2の場所を記述するデータを用いて修正する
ことをさらに
備える請求項7に記載の方法。
【請求項10】
前記第1のアセットは、第2のアセットからの追加データに依存し、
前記1つ以上のプロセッサが、前記追加データを前記1つ以上のメモリ内の場所における1つ以上のファイル内に配置すること、
前記1つ以上のプロセッサが、前記第2のアセットの追加固有アドレスを前記第1のアセットに関連付けられたカタログエントリーに追加すること、
前記1つ以上のプロセッサが、前記追加データの場所を記述するデータを前記第1のアセットに関連付けられたエントリに追加すること、をさらに
備える請求項7に記載の方法。
【請求項11】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項10に記載の方法。
【請求項12】
前記アセットを配置することは、
前記アプリケーションの実行可能
なバージョンのアセットバンドルを作成することを含み、
前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項8に記載の方法。
【請求項13】
一組の命令を含む非一時的なマシン可読媒体であって、
前記一組の命令は、複数の工程を実行するように1つ以上のコンピュータプロセッサを設定し、前記複数の工程は、
第1のアセットを用いてアプリケーションのコンテンツを作成することであって、前記第1のアセットは、該アセットに関連付けられた前記コンテンツの少なくとも一部分を記述するアセットデータを含む、前記アプリケーションのコンテンツを作成すること、
前記アセットデータ
を1つ以上のメモリ内の場所における1つ以上のファイル内に配置すること、
前記アプリケーションに関連付けられたカタログ
をサーバー上に作成すること、
前記第1のアセットのカタログエントリーを作成することであって、前記カタログエントリーはアドレスおよびロケーションデータを少なくとも含み、前記アドレスは前記第1のアセットの固有識別子であり、前記ロケーションデータは前記第1のアセットの場所の記述である、前記第1のアセットのカタログエントリーを作成すること、
前記アプリケーションから前記第1のアセットに関連付けられたアセットデータの要求を受信することであって、前記要求は前記アドレスを含む、前記アセットデータの要求を受信すること、
前記アドレスおよび前記カタログを用いて、前記アドレスに関連付けられた前記ロケーションデータを決定すること、
決定された前記ロケーションデータを用いて決定された場所のアセットデータを検索すること、
検索したアセットデータを前記アプリケーションに返すこと、を備える、非一時的なマシン可読媒体。
【請求項14】
前記複数の工程は、
前記アプリケーションの実行可能
なバージョンをビルドする
ことをさらに
備え、
前記実行可能なバージョンはカタログを示すデータを含む、請求項13に記載の非一時的なマシン可読媒体。
【請求項15】
前記1つ以上のファイルは、第2の場所に移動され、
前記
複数の工程は、
前記カタログエントリー内のロケーションデータを前記第2の場所を記述するデータを用いて修正する
ことをさらに
備える、請求項13に記載の非一時的なマシン可読媒体。
【請求項16】
前記第1のアセットは、第2のアセットからの追加データに依存し、
前記複数の工程は、
前記追加データを前記1つ以上のメモリ内の場所における1つ以上のファイル内に配置すること、
前記第2のアセットの追加固有アドレスを前記第1のアセットに関連付けられたカタログエントリーに追加すること、
前記追加データの場所を記述するデータを前記第1のアセットに関連付けられたエントリに追加すること、を
さらに備える、請求項13に記載の非一時的なマシン可読媒体。
【請求項17】
前記アセットデータを検索することは、
追加アドレスおよび前記カタログを用いて前記追加データの場所を決定すること、
決定された前記場所を用いて前記追加データを検索すること、
検索された前記追加データを実行中のアプリケーションに返すこと、を含む、請求項16に記載の非一時的なマシン可読媒体。
【請求項18】
前記アセットを配置することは、前記アプリケーションの実行可能
なバージョンのアセットバンドルを作成することを含み、前記アセットバンドルは、複数のアセットおよび関連するアセットデータを含む、請求項14に記載の非一時的なマシン可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本出願は、その全体が参照により本明細書に組み込まれる2018年5月14日に出願された「ソフトウェア開発におけるアドレス可能なアセットのためのシステムおよび方法」と題された米国仮出願第62/671,244号の利益を主張する。
【0002】
本開示は、ゲームおよびその他の用途における仮想アセットのデータの追跡を管理する際に使用する複数のツールに関する。
【背景技術】
【0003】
ビデオゲーム作成の世界には、ゲームの設計、構築、デプロイなど、ゲーム作成の主要なプロセスをクリエイターにガイドする多くのツールが存在する。これらのツールの多くは、初心者のコンピュータプログラマー(およびコンピュータ以外のプログラマー)がプロセス内のいくつかのステップを実行することを可能にする。しかし、(例えば、キャラクター、背景オブジェクト、武器、特殊効果等を含む)ゲームまたはその他の用途のデジタルアセットのデータをパッケージ化して追跡するという点では、デプロイメントプロセスは依然として非常に困難である。これは、ゲームがデプロイメントターゲットとして有する可能性のあるオペレーティングシステムおよびデバイスの数が多いことに起因する。
【0004】
たとえば、オペレーティングシステムおよびデバイスは、多くの場合、デジタルアセットを使用するためのさまざまなフォーマット要件を有する。また、高品質のゲームは、典型的には、多数の仮想アセットを有し、これは、デバイスメモリおよびダウンロード制限が生じる可能性があるモバイルゲームにとって問題となる。さらに、多くのゲームは、新しい仮想アセットを使用して最初にリリースされた後に進化し(例えば、異なるゲームモードの追加またはゲームレベルの追加)、仮想アセットおよび関連するデータの追跡が時間の経過とともに複雑になる。
【0005】
ゲーム開発者にとって、ゲーム時に効率的にロードできるようにゲームの複数のデジタルアセットを構造化することは困難である。1つの解決策は、複数のデジタルアセットを複数のチャンクに分け、必要なときに(たとえば、チャンク内のアセットが必要な場合に)ダウンロードすることである。デジタルアセットのチャンクを使用する場合の制限は、ゲーム開発者が複雑さを理解し、管理するために必要な高度な専門知識である。アセットのチャンクを使用するには、チャンクとその依存関係をビルド、ロード、アンロード、および管理するためのコードを作成する必要がある。(例えば、新しいアセットがゲームに追加されたときにのみチャンクを更新する)インクリメンタルビルドは確実に機能しないため、アセットが更新されるたびにチャンク内のすべてのアセットの再ビルドが必要になり、ゲーム内のアセットの数に比例して膨大な時間を要する可能性がある。これは、ゲームの複雑さが時間の経過とともに増大するため、コードのリファクタリングの原因となる可能性がある。
【図面の簡単な説明】
【0006】
本開示の例示的な実施形態の特徴および利点は、添付図面と組み合わせた以下の詳細な説明から明らかになるであろう。
【
図1】
図1は、一実施形態による、アドレス可能アセットシステムを示す概略図である。
【
図2】
図2は、一実施形態による、アドレス可能アセットシステムを使用する開発サイクルを示す概略図である。
【
図3】
図3は、一実施形態による、アドレス可能アセットシステムを使用するコンテンツ作成プロセスのフローチャートである。
【
図4】
図4は、一実施形態による、アドレス可能アセットシステムを使用するビルドプロセスのフローチャートである。
【
図5】
図5は、一実施形態による、アドレス可能アセットシステムを使用するランタイムプロセスのフローチャートである。
【
図6】
図6は、本明細書に記載される様々なハードウェアアーキテクチャと併せて使用され得る例示的なソフトウェアアーキテクチャを示すブロック図である。
【
図7】
図7は、マシン可読媒体(例えば、マシン可読記憶媒体)から命令を読み取り、本明細書で論じる方法の任意の1つまたは複数を実行するように構成された、いくつかの例示的な実施形態によるマシンの構成要素を示すブロック図である。
【発明を実施するための形態】
【0007】
添付図面全体を通して、同様の特徴は同様の参照符号によって識別されることに留意されたい。
以下の説明は、独立したまたは組み合わせた本開示の例示的な実施形態を備える例示的なシステム、方法、技術、命令シーケンス、および計算機プログラム製品を記載する。以下の説明では、説明の目的で、本発明の主題の様々な実施形態の理解を促すために、多数の具体的な詳細が述べられている。しかしながら、本発明の主題の様々な実施形態がこれらの具体的な詳細なしで実施されてもよいことは当業者には明らかであろう。
【0008】
本明細書では、アドレスを用いてゲームの複数のデジタルアセットの効率的なランタイムローディング(runtime loading)を提供するアドレス可能アセットシステム(Addressable Asset System)について説明する。アドレス可能アセットシステムは、ゲームのアセット管理を処理し、コンテンツの作成およびデプロイメント(deployment)を簡素化する。一実施形態によれば、ゲームのプレイ(例えば、ゲームコードの実行)中、アドレス可能アセットシステムは、ゲームコードによってランタイム(runtime)時にデジタルアセットに関連するアドレスを単に問い合わせ、そのアドレスに存在するデジタルアセットを記述するデータを受信することを可能にする。アドレス可能アセットシステムを使用すると、開発スタジオは(例えば、ゲーム開発の)プロジェクトのイテレーション時間(iteration time)を大幅に向上させることができ、プロジェクトの設計、コーディング、およびテストをより頻繁に行うことができるため、より高品質のゲームまたはアプリケーションが得られる。
【0009】
例示的な実施形態では、ゲームアセットの場所を追跡するための方法が開示される。コンテンツは、第1のアセットを使用してアプリケーション用に作成される。第1のアセットは、アセットに関連付けられたコンテンツの少なくとも一部分を記述するアセットデータを含む。アセットデータは、1つ以上のメモリ内の場所において1つ以上のファイル内に配置される。アプリケーションに関連付けられたカタログ(catalog)は、サーバー上に作成される。カタログエントリー(catalog entry)は、第1のアセットに対して作成される。カタログエントリーはアドレスおよびロケーションデータ(location data)を少なくとも含み、アドレスは第1のアセットの固有識別子であり、ロケーションデータは第1のアセットの場所の記述である。第1のアセットに関連付けられたアセットデータの要求がアプリケーションから受信され、要求はアドレスを含む。アドレスおよびカタログを用いてアドレスに関連付けられたロケーションデータを決定する。決定されたロケーションデータを用いて決定された場所のアセットデータを検索する。検索したアセットデータはアプリケーションに返される。
【0010】
本明細書の説明を通して使用される「環境」または「ゲーム環境」という用語は、(例えば、2Dビデオゲーム環境、2Dシミュレーション環境等の)2Dデジタル環境、(例えば、3Dゲーム環境、3Dシミュレーション環境、3Dコンテンツ作成環境、仮想現実環境等の)3Dデジタル環境、および(例えば、仮想の)デジタルコンポーネントおよび現実世界コンポーネントの両方を含む拡張現実環境を含むものと理解される。
【0011】
本明細書で使用される「ゲームオブジェクト(game object)」という用語は、環境(例えば、ゲーム環境)内の任意のデジタルオブジェクトまたはデジタル要素を含むものと理解される。ゲームオブジェクトは、キャラクター、武器、(例えば、建物、樹木、車、宝物などの)シーン要素、(例えば、地形、空などの)背景、光、カメラ、(例えば、音響的なおよび視覚的な)エフェクト、アニメーションなどを含む環境内のほとんどすべてのオブジェクトを表現できる。ゲームオブジェクトは、オブジェクトのプロパティおよび動作を定義するデータに関連付けられている。
【0012】
本明細書で使用される「アセット」、「ゲームアセット」および「デジタルアセット」という用語は、ゲームオブジェクトを記述するために使用することができるか、またはゲームまたはプロジェクトの態様を記述するために使用することができる任意のデータを含むものと理解される。たとえば、アセットは、画像、(テクスチャ、リギング(rigging)などの)3Dモデル、(例えば、シーン全体の)3Dモデルのグループ、オーディオサウンド、ビデオ、アニメーション、3Dメッシュなどのデータを含むことができる。アセットを記述するデータは、ファイル内に格納されるか、ファイルの集合内に含まれるか、圧縮されて(例えば、圧縮ファイルの)特定のファイル内に格納されるか、またはメモリ内に格納されてもよい。アセットを記述するデータを使用してランタイム時にゲーム内の1つ以上のゲームオブジェクトをインスタンス化する(instantiate)ことができる。
【0013】
本明細書の説明全体を通して、「アセットバンドル(asset bundle)」という用語は、1つまたは複数のアセットを記述するデータのグループ化を指す。データのグループ化は、ファイルまたは(zipファイルなどの)ファイルのグループ内でまたはメモリ内で行うことができる。アセットバンドル内のデータは、実行可能なゲームファイルの外部に格納され、ゲーム内でオブジェクトを作成または変更するためにランタイム時にゲームによって使用されるデータである。2つ以上のアセットバンドルは、互いに依存関係を有することができ、たとえば、アセットバンドル「A」のマテリアルを表すアセットは、アセットバンドル「B」のテクスチャを表すアセットを参照することができる。さらに、ゲームのランタイム時に、アセットバンドルは、プログラミングオブジェクト(例えば、オブジェクト指向プログラミングオブジェクト)によって表され、(例えば、実行可能ゲームファイル内から)コードを用いて対話して、特定のアセットバンドルからゲームにアセットを記述するデータをロードすることができる。アセットバンドルのプログラミングオブジェクトは、ゲーム内のオブジェクトへの場所のマッピング(例えば、アセットバンドル内のファイルへのファイルパス)を含むことができる。
【0014】
次に図面を参照すると、本発明の実施形態による、アドレス可能アセットのための非定型または非従来型の複数のコンポーネントまたは複数の工程、またはそのようなコンポーネントまたは工程の組み合わせを含むシステムおよび方法が例示されている。一実施形態によれば、
図1は、アドレスによる複数のアセットの効率的なランタイムローディングを提供するアドレス可能アセットシステム100を示している。例示的な実施形態では、アドレス可能アセットシステム100は、(例えば、ゲーム開発者、アーティスト等の)開発者130によって操作される開発者デバイス102と、ユーザー160によって操作されるユーザーデバイス162と、(例えば、セルラーネットワーク、Wi-Fiネットワーク、インターネット、有線ローカルネットワーク等の)ネットワーク150を介してネットワーク通信で結合されるコンテンツサーバー140とを含む。いくつかの実施形態では、コンテンツサーバー140は、コンテンツ配信ネットワーク(content delivery network : CDN)であり得る。ユーザーデバイス162は、(例えば、ビデオゲーム、シミュレーション、仮想現実体験、拡張現実体験等の)マルチメディア体験をユーザー160に提供することができるコンピューティングデバイスである。いくつかの実施形態では、ユーザーデバイス162は、スマートフォン、タブレットコンピュータ、および仮想現実HMD、拡張現実HMD、および混合現実HMDなどのヘッドマウントディスプレイ(head mounted display : HMD)などのモバイルコンピューティングデバイスである。いくつかの実施形態では、ユーザーデバイス162は、デスクトップコンピュータまたはゲームコンソール(game console)である。開発者デバイス102は、統合開発環境IDEまたは(例えば、Unity(登録商標)ゲームエンジンの)ゲーム開発プラットフォームを開発者130に提供することができるコンピューティングデバイスである。いくつかの実施形態では、開発者デバイス102は、スマートフォン、タブレットコンピュータ、および仮想現実HMD、拡張現実HMD、および混合現実HMDなどのヘッドマウントディスプレイ(head mounted display : HMD)などのモバイルコンピューティングデバイスである。いくつかの実施形態では、開発者デバイス102は、デスクトップコンピュータである。
【0015】
一実施形態によれば、コンテンツサーバー140は、データベース142およびサーバー144を含む。データベース142は、ユーザーデバイス162上に常駐するアプリケーション(例えば、ゲーム)によって使用される複数のアセットを含む。
【0016】
一実施形態によると、開発者デバイス102は、1つ以上の中央処理ユニット103(central processing unit : CPU)と、グラフィック処理ユニット105(graphics processing unit : GPU)と、を含む。CPU103は、任意のタイプのプロセッサであり、複数の処理要素(図示せず)を含み、メモリ101にアクセスしてそこに格納された複数の命令を検索し、そのような複数の命令を実行するプロセッサアセンブリである。そのような複数の命令の実行時に、複数の命令によって、本明細書で説明されるような一連のタスクを実行するように開発者デバイス102が実装される。メモリ101は、ランダムアクセスメモリ、読み出し専用メモリまたは書き換え可能メモリ、内部プロセッサキャッシュなどの任意のタイプのメモリデバイスとすることができる。
【0017】
また、開発者デバイス102は、例えば、キーボード又はキーパッド、マウス、ポインティングデバイス及びタッチスクリーン等の1つ以上の入力/出力デバイス108を含む。開発者デバイス102は、さらに、ビデオ、ビデオゲーム環境、統合開発環境、および仮想シミュレーション環境を含むデジタルコンテンツを開発者130に表示するように構成され得るコンピュータモニタ、タッチスクリーン、およびヘッドマウントディスプレイなどの1つ以上のディスプレイデバイス109を含む。ディスプレイデバイス109は、1つまたは複数のGPU105および任意選択的にはCPU103によって駆動または制御される。GPU105は、ディスプレイデバイス109を介した出力のレンダリングを高速化するのを支援する画像出力の態様を処理する。また、開発者デバイス102は、ネットワーク150を介して通信するための(例えば、有線または無線ネットワークアダプタの)1つ以上のネットワークデバイス107を含む。
【0018】
開発者デバイス102内のメモリ101は、ディスプレイデバイス109および1つまたは複数の入力デバイス108などの他のハードウェアと通信して開発者130にアプリケーションを提示する(例えば、CPU103またはGPU105によって実行される)ゲームエンジン104を含む(例えば、統合開発環境IDEの)アプリケーション114を格納するように構成されることができる。ゲームエンジン104は、典型的には、ユーザーにアプリケーション環境(例えば、ビデオゲームまたはシミュレーション環境)を提供するために、ゲームオブジェクトのアニメーション物理特性(animation physics)、ゲームオブジェクトの衝突検出、レンダリング、ネットワーキング、サウンド、アニメーションなどを提供する1つ以上のモジュールを含む。アプリケーション114は、本明細書で説明されるような様々なアドレス可能アセットシステム100の機能を提供するアドレス可能アセットモジュール116を含む。アプリケーション114は、ビルドマネージャ(build manager)118およびリソースマネージャ(resource manager)120を含む。ゲームエンジン104、アプリケーション114、ビルドマネージャ118、リソースマネージャ120、およびアドレス可能アセットモジュール116のそれぞれは、メモリ101内に存在し、動作中にCPU103および任意選択的にはGPU105によって実行される複数のコンピュータ実行可能命令を含む。ゲームエンジン104は、メモリ101内に存在し、ゲームエンジンのようなランタイムプログラムを作成するために動作中にCPU103および任意選択的にはGPU105によって実行される複数のコンピュータ実行可能命令を含む。アプリケーション114は、メモリ101内に存在し、IDEのようなランタイムアプリケーションを作成するために動作中にCPU103および任意選択的にはGPU105によって実行される複数のコンピュータ実行可能命令を含む。アドレス可能アセットモジュール116、ビルドマネージャ118、およびリソースマネージャ120は、ゲームエンジン104内に直接統合されるか、アプリケーション114内に統合されるか、または(例えば、プラグインの)外部のソフトウェアとして実装されてもよい。
【0019】
一実施形態によれば、ユーザーデバイス162は、(例えば、開発者デバイス102のCPU103と同様の)1つ以上の中央処理ユニット163と、(例えば、開発者デバイス102のGPU105と同様の)グラフィック処理ユニット165とを含む。CPU163は、任意のタイプのプロセッサであり、複数の処理要素(図示せず)を含み、メモリ161にアクセスしてそこに格納された複数の命令を検索し、そのような複数の命令を実行するプロセッサアセンブリである。そのような複数の命令の実行時に、複数の命令によって、本明細書で説明されるような一連のタスクを実行するようにユーザーデバイス162が実装される。メモリ161は、開発者デバイス102上のメモリ101と同様の任意のタイプのメモリデバイスであり得る。
【0020】
また、ユーザーデバイス162は、開発者デバイス102上の入力/出力デバイス108と同様の1つ以上の入力/出力デバイス168を含む。ユーザーデバイス162は、開発者デバイス102上のディスプレイデバイス109と同様であり、ビデオ、ビデオゲーム環境、および仮想シミュレーション環境を含むデジタルコンテンツをユーザー160に表示するように構成され得る1つ以上のディスプレイデバイス169をさらに含む。ディスプレイデバイス169は、1つまたは複数のGPU165および任意選択的にはCPU163によって駆動または制御される。GPU165は、ディスプレイデバイス169を介した出力のレンダリングを高速化するのを支援するグラフィック出力の態様を処理する。また、ユーザーデバイス162は、ネットワーク150を介して通信するための(例えば、有線または無線ネットワークアダプタの)1つ以上のネットワークデバイス167を含む。
【0021】
一実施形態によれば、ユーザーデバイス162内のメモリ161は、ディスプレイデバイス169および1つまたは複数の入力デバイス168などの他のハードウェアと通信してユーザー160にアプリケーションを提示する(例えば、CPU163またはGPU165によって実行される)ゲームエンジン164を含む(例えば、ビデオゲーム、シミュレーション、仮想現実体験、拡張現実体験の)アプリケーション174を格納するように構成されることができる。ゲームエンジン164は、開発者デバイス102上のゲームエンジン104と同様である。アプリケーション174は、本明細書において記載されるような様々なアドレス可能アセットシステム100の機能を提供するアドレス可能アセットモジュール166を含む。アプリケーション174は、リソースマネージャ170を含む。ゲームエンジン164、アプリケーション174、リソースマネージャ170、およびアドレス可能アセットモジュール166のそれぞれは、メモリ161内に存在し、動作中にCPU163および任意選択的にはGPU165によって実行される複数のコンピュータ実行可能命令を含む。ゲームエンジン164は、メモリ161内に存在し、ゲームエンジンのようなランタイムプログラムを作成するために動作中にCPU163および任意選択的にはGPU165によって実行される複数のコンピュータ実行可能命令を含む。アプリケーション174は、メモリ161内に存在し、ビデオゲームまたはシミュレーターのようなランタイムアプリケーションを作成するために動作中にCPU163および任意選択的にはGPU165によって実行される複数のコンピュータ実行可能命令を含む。アドレス可能アセットモジュール166およびリソースマネージャ170は、ゲームエンジン164内に直接統合されるか、アプリケーション174内に統合されるか、または(例えば、プラグインの)外部のソフトウェアとして実装されてもよい。
【0022】
一実施形態によれば、
図2には、アドレス可能アセットシステム100を使用してアプリケーションを作成するアプリケーション開発サイクル205が示されている。サイクル205の第1のプロセスは、アプリケーションコンテンツ作成200であり、ここでは、開発者130は、開発者デバイス102を使用してアプリケーション(例えば、ビデオゲーム、仮想現実体験、映像、シミュレーション等)のコンテンツを作成する。例えば、開発者130は、アプリケーション114およびその中のゲームエンジン104を使用して、複数のゲームオブジェクトを用いた3Dシーンを作成し且つ複数のゲームオブジェクトにプロパティおよび動作を割り当てることによってコンテンツを作成することができる。サイクル205の第2のプロセスは、アプリケーションビルド(application build)202であり、ここでは、(例えば、Microsoft Windows(登録商標)オペレーティングシステム、Apple(登録商標)オペレーティングシステム、Linuxオペレーティングシステム、Android(登録商標)オペレーティングシステム等を含む)オペレーティングシステム上で実行可能なスタンドアロン実行可能アプリケーションが作成される。実行可能アプリケーションは、実行可能ファイルおよび実行可能ファイルが必要とする可能性のあるその他のデータファイル(例えば、リソースファイル)を含み得る。スタンドアロン実行可能アプリケーションをビルドする場合、結果の複数のファイルはビルドターゲット(build target)のオペレーティングシステムによって異なる。たとえば、実行可能アプリケーション内の複数のファイルは、オペレーティングシステムごとに異なってもよい。サイクル205における第3のプロセスは、ランタイムプロセス204であり、ここでは、実行可能なアプリケーションがユーザーデバイス162上で動作し(例えば、実行し)、(例えば、ゲーム、仮想現実体験、映像、シミュレーション等の)アプリケーションをユーザー160に提示する。
【0023】
一実施形態によれば、
図3には、アプリケーション開発サイクル205からのアプリケーションコンテンツ作成プロセス200の複数の工程が示されている。工程300において、開発者130は、1つ以上のアセットを用いてアプリケーションのコンテンツを作成する。作成プロセスの一部として、開発者130は、アプリケーションの複数のアセットをインポートすることができ、アプリケーションの複数のアセットを作成することができる。コンテンツの作成は、(例えば、キャラクターおよび風景の)複数のゲームオブジェクト、複数のゲームレベルなどの作成を含む。工程302において、ゲームエンジン104は、(例えば、数字、アルファベット、英数字または任意の種類の文字列識別を含む)各アセットについて固有の識別(または固有のID)を生成する。固有のIDは、特定のアセットを識別する永続的な固有の識別子である。アセットを定義するデータは、1つ以上のファイルに格納される。工程304において、アドレス可能アセットシステム100を使用して、開発者130は、(例えば、モジュール116によって生成されるグラフィカルユーザーインタフェースを介して、またはモジュール116によって提供されるコードおよびアプリケーションインタフェース(API)を介して)アセットがアドレス可能であることを示す。一実施形態によれば、アドレス可能アセットは、アドレス可能アセットの容易な識別および参照のために、関連付けられた名前(例えば、文字列ラベル)を有する。いくつかの実施形態では、ラベルは、1群のアドレス可能アセットによって共有され得る。アドレス可能アセットのラベルは、複数の同様のアセットのランタイムローディングに使用できる二次識別子を提供する。例えば、ゲームは、いくつかの種類の空間ハザード(space hazard)を含み、それらは、「spaceHazards」とラベル付けされ、ラベルを入力として用いる単一のコマンド(例えば、LoadAll(“spaceHazards”))ですべてアクセスされることができる。工程306において、アドレス可能アセットモジュール116は、アセットのアドレスを提供し、そのアドレスを(例えば、ファイルパス名の)アセットデータの場所に関連付ける。一実施形態によれば、場所は、コンテンツサーバー140(例えば、コンテンツ配信ネットワーク)、リモートサーバー、およびローカルデータ記憶装置(例えば、開発者デバイス102上のローカルハードドライブ)などの物理的位置を含む。アドレスは、ランタイム時に(例えば、ゲームがプレイされるときに)効率的に検索するためにアセットを識別する。一実施形態によれば、アセットアドレスは、アセットのデータを含むファイルのファイルパス位置の文字列値に初期化される。工程308において、アドレス可能アセットモジュール116は、(例えば、開発者によって)データが移動されるとき、(例えば、データを含む1つまたは複数のファイルを追跡することによって)アセットデータの場所を追跡する。
【0024】
一実施形態によれば、
図4には、アドレス可能アセットシステム100を使用するビルドプロセス202が示されている。ビルドプロセス202の工程400において、アドレス可能アセットモジュール116は、アセットバンドルにパッケージ化されるアドレス可能アセットグループ(例えば、アドレス可能アセットのリスト)を記述するデータを受信する。例えば、開発者130は、モジュール116またはゲームエンジン114によって提供されるユーザーインタフェースを使用して、アドレス可能アセットグループを作成し得る。工程402において、ビルドマネージャ118は、アプリケーションのビルドの要求を受信する。要求は、アセットバンドルのビルド(例えば、実行可能なアプリケーションで使用できるアセットバンドルのパッケージ化されるバージョンを含むビルド)の設定を含む(例えば、開発者によって作成された)プロファイルデータを含む。ビルドプロセス202の工程402の一部として、開発者は、(例えば、グラフィカルユーザーインタフェースを介して)要求を行い、プロファイルを作成し得る。ビルドプロセス202の工程404において、アドレス可能アセットグループ内の各アセットについて、アドレス可能アセットモジュール116は、複数のアセットファイルの最新の場所(例えば、最新のファイルパス)を検索する。ビルドプロセス202の工程406において、アドレス可能アセットモジュール116は、アプリケーションに関連付けられた1つ以上のアセットバンドルを含むアプリケーションのコンテンツカタログを作成する。コンテンツカタログは、アセットアドレスのリストを含み、1つまたは複数のアセットバンドル内の各アセットは、リスト内の少なくとも1つのアセットアドレスエントリに関連付けられる。一実施形態によれば、リスト上の各アセットアドレスエントリについて、アセットを記述する複数のファイルの場所に関するデータが提供される。コンテンツカタログは、アセットアドレスと、アセットアドレスに関連付けられたアセットを記述するデータを含む少なくとも1つの場所との間のマッピングを提供する。各コンテンツカタログは、実行可能なアプリケーションに関連付けられている(例えば、実行可能アプリケーションは、それが関連付けられているコンテンツカタログを指すデータを含むことができる)。コンテンツカタログは、アセットを記述するデータをアプリケーションにロードするための複数の命令を含めることもできる。ビルドプロセス202の工程408において、アドレス可能アセットモジュール116は、アドレス可能アセットグループからのそれらの依存関係を有する複数のアセットを、要求内の複数の設定に従ってアセットバンドルにパッキングする(pack)。アドレス可能アセットモジュール116は、(例えば、複数のアセットがアドレス可能アセットモジュール116によって追跡されることによって)複数のアセットが移動されるかまたは名前を変更されても、複雑なアセット依存チェーン(complex asset dependency chains)を理解し、複数のバンドルを効率的にパッキングする。一実施形態によれば、工程408の一部として、アドレス可能アセットモジュール116は、重複する複数のアセットを分離し、ランタイム時におけるクリーンなローディング(cleaner loading)のために別個のバンドルに配置する。重複するアセットは、2つ以上のアセットの依存関係を有する単一のアセットである。一実施形態によれば、アドレス可能アセットモジュール116は、(例えば、ユーザーインタフェースメニュー、ゲームまたはアプリケーションのチュートリアル、および第1のレベルのゲームコンテンツ用の複数のアセットを含む)アセットバンドルに含まれる複数のアセットの一部分に優先順位を付ける。工程408の一部として、アドレス可能アセットモジュール116は、プロファイルに示される最大サイズ制限に基づいて複数のコンテンツビルドを分割することができる。例えば、アドレス可能アセットシステム100は、ビルドされたアプリケーション(例えば、100MB)のサイズを制限し、ゲームまたはアプリケーションのコンテンツのパッケージングを最適化し、ネットワークを介したデバイスへのデータのダウンロードを削減し、メモリへのデータのロードを削減するために、残りの複数のアセットをダウンロード可能なコンテンツとしてアセットバンドルに集めるように構成されることができる。
【0025】
一実施形態によれば、
図5には、開発サイクル205のランタイムモード204が示されており、アプリケーションは、ユーザー160にアプリケーションのランタイムバージョンを提示するためにユーザーデバイス162上にダウンロードされて実行される。アプリケーションのランタイムにおいて、アプリケーション174内のアドレス可能アセットモジュール166は、(例えば、アプリケーションによる使用のために)アセットバンドルからユーザーデバイス162上のメモリ161に複数のアセットをロードする。アドレス可能アセットシステム100は、どのアセットバンドルに1つまたは複数のアセットがあるのかまたはアセットバンドルがどこに位置しているのか(たとえば、ネットワーク上のリモートデバイスまたはローカルデバイス上)、あるいはアドレス可能アセットが開発者によって移動されたかに関わらず、コンテンツカタログ内のマッピングを使用して、ランタイム時に1つ以上のアドレス可能アセット(たとえば、複数のアセットのシーン全体)を名前(例えば、ラベルまたアドレス)によってロードすることを可能にする。アドレス可能アセットモジュール166がアドレス可能アセットの現在の場所を常に含むように、アセットロケーションの変更は、(例えば、工程308および工程406においてアドレス可能アセットモジュール116によって)コンテンツカタログ内でリアルタイムに追跡および更新される。アドレスでアセットを指定すると、複数の開発者は、ディスク、サーバー、またはコンテンツ配信ネットワーク(CDN)上のアセットのデータの場所を直接追跡するための特定のコードを記述しなくても、ランタイム時に複数のアセットをロードする複数のアプリケーションを開発できる。
【0026】
一実施形態によれば、
図5を参照すると、ランタイムモード204の工程500において、アプリケーションは、ユーザーデバイス162上で動作する(例えば、実行される)。例えば、アプリケーションは、(例えば、アプリケーション174のランタイムバージョンでゲームをプレイするために)ユーザーデバイス162を操作するユーザーによって実行されてもよい。一実施形態によれば、ランタイムモード204の工程502において、アプリケーション174は、(実行中に)アセットバンドル内からアセットを要求する。実行中のアプリケーションは、必要なアセットのアドレスを決定し、アドレス可能アセットモジュール166にアドレスを含む要求を送信する。要求は、アドレスと、(例えば、複数のアセットファイル内のアセットデータの)必要なアセットに関連付けられたデータの要求とを含む。一実施形態によれば、ランタイムモード204の工程504において、アドレス可能アセットモジュール166は、ネットワーク150を介してコンテンツサーバー140上のコンテンツカタログと通信し(例えば、要求を送信し)、アドレスに関連付けられたデータの現在の場所を決定する。一実施形態によればと、ランタイム204の工程506において、アドレス可能アセットモジュール166は、コンテンツカタログから受信した現在の場所から、必要なアセットデータを非同期的にダウンロードする。
【0027】
一実施形態によれば、アドレス可能アセットシステム100は、依存性管理を含み、コンテンツカタログは、カタログ内の各アドレスエントリに関する依存性情報(dependency information)を含む。従って、工程504および工程506の一部としてランタイムにおいて、アドレス可能アセットモジュール116は、(例えば、依存関係の場所を指定せずに)要求された任意のアドレスについての複数の依存アセットに関連するデータを受信する。例えば、アプリケーション174は、そのアドレスまたはラベルだけによってアセットを要求することができ、その複数の依存アセットに関するデータを受信する。
【0028】
一実施形態によれば、工程506における非同期ローディングでは、要求された複数のアセットおよび要求された複数のアセットの依存関係は、任意の順序でローディングするために、任意の場所(ローカル、リモートサーバー、またはCDN)に存在することができる(たとえば、同期ローディングとは異なり、依存関係を有するローカルアセットは、依存関係がローカルである必要があり、アセットのロードに続いて直接ロードされる必要がある)。実行中のアプリケーションによる使用のためにメモリへの非同期ダウンロードおよびロードを使用することによって、アドレス可能アセットシステム100は、アプリケーション174内のコードを変更することなく、複数のアセットを(例えば、ローカルのビルドグループからリモートのビルドグループへ)移動させる柔軟性を複数のユーザーに与える。アドレスと組み合わされた非同期ローディングによって、(例えば、工程302で作成される)固有のアセット識別子が場所、パッケージング、およびローディングと切り離され、これらの態様を開発サイクル205の間に変更し且つデプロイメントの必要性に適応させることを可能にする。より具体的には、アセットの場所を参照するために(例えば、アプリケーション内の)コードの変更を必要とすることなく、アプリケーションの開発サイクル205の全体において、(例えば、ローカル、リモート、生成などの)アセットの場所を変更することができる。アドレス可能アセットシステムがない場合、開発者はアセットをローカルからリモートビルドグループに移動させるときに、(例えば、追加のアセットローディングロジックを処理するために)アプリケーションコードを変更する必要がある。アドレス可能アセットシステム100は、アプリケーション174が開発者によって更新されているときに、エンドユーザーが可能な限り少ないデータを再ダウンロードすることを可能にする。アドレス可能アセットシステム100は、単純なコンテンツレイアウトの初期プロトタイプからローカルデータ、複数のサーバー、様々なプラットフォームにまたがるより複雑なコンテンツレイアウトの出荷可能製品までの容易な移行プロセスをサポートすることができる。
【0029】
一実施形態によれば、ランタイムモード204の一部として、工程520において、開発者は、アプリケーション174の1つ以上のアセットを更新する。この変更は、アセットを(例えば、ビルドプロセス202内で)何度も発生するビルドプロセスを説明する別のアセットバンドルに移動することによるかまたは(ビルドプロセス202の後に)複数のアセットバンドルファイルの物理的な場所を変更することによるアセットの場所の変更を含み得る。一実施形態によれば、工程522において、アドレス可能アセットモジュール116は、(例えば、工程520において)開発者が変更を行うと、リアルタイムでコンテンツカタログを更新する。変更されたアセットの新しい場所の情報は、アセットのアドレスに関連付けられてコンテンツカタログに記録される。
【0030】
一実施形態によれば、アドレス可能アセットシステム100は、参照カウント(reference counting)と、アプリケーション174によってもはや必要とされない場合の複数のアセットバンドルからロードされた複数のアセットの自動的なアンローディング(unloading)とを使用する。
【0031】
本開示は、方法として実施されることができ、システム、コンピュータ可読媒体、または電気的または電磁的信号において具体化されることができることに留意されたい。上記で説明され、添付の図面に示されている複数の実施形態は、例示のみを目的としている。本開示から逸脱することなく変更を行うことができることは当業者には明らかであろう。そのような変更は、可能な変形として考えられ、開示の範囲内である。
【0032】
本明細書では、ある特定の実施形態が、ロジックまたはいくつかの構成要素、モジュール、または機構を含むものとして記載されている。モジュールは、ソフトウェアモジュール(例えば、マシン可読記体または送信信号において具体化されるコード)またはハードウェアモジュールのいずれかを構築し得る。「ハードウェアモジュール」は、ある特定の動作を実施することができる有形のユニットであり、ある特定の物理的な方法で構成または配置され得る。様々な例示的な実施形態では、1つ以上のコンピュータシステム(例えば、スタンドアロンコンピュータシステム、クライアントコンピュータシステム、もしくはサーバコンピュータシステム)またはコンピュータシステムの1つ以上のハードウェアモジュール(例えば、プロセッサもしくは一群のプロセッサ)は、本明細書に記載される、ある特定の動作を実施するように動作するハードウェアモジュールとして、ソフトウェア(例えば、アプリケーションまたはアプリケーション部分)によって構成され得る。
【0033】
いくつかの実施形態では、ハードウェアモジュールは、機械的に、電子的に、またはこれらの任意の好適な組み合わせで実装され得る。例えば、ハードウェアモジュールは、ある特定の動作を実施するように永続的に構成された専用の回路または論理を含み得る。例えば、ハードウェアモジュールは、フィールドプログラム可能なゲートアレイ(FPGA)または特定用途向け集積回路(ASIC)などの専用プロセッサであり得る。ハードウェアモジュールはまた、ある特定の動作を実施するために、ソフトウェアによって一時的に構成されたプログラム可能な論理または回路を含み得る。例えば、ハードウェアモジュールは、汎用プロセッサまたは他のプログラム可能なプロセッサに包含されるソフトウェアを含み得る。ハードウェアモジュールを、専用および永続的に構成された回路、または一時的に構成された(例えば、ソフトウェアによって構成された)回路に機械的に実装する決定は、コストおよび時間の考慮によって進められ得ることが理解されよう。
【0034】
したがって、「ハードウェアモジュール」という表現は、ある特定の方法で動作するか、または本明細書に記載されるある特定の動作を実施するように、物理的に構築されるか、永続的に構成される(例えば、配線で接続される)か、または一時的に構成される(例えば、プログラムされる)実体である有形の実体を包含するように理解されるべきである。本明細書で使用される場合、「ハードウェア実装モジュール」とは、ハードウェアモジュールを指す。ハードウェアモジュールが一時的に構成される(例えば、プログラムされる)実施形態を考慮すると、ハードウェアモジュールの各々は、時間内の任意の1つのインスタンスにおいて構成またはインスタンス化される必要はない。例えば、ハードウェアモジュールが、特定用途向けプロセッサになるように、ソフトウェアによって構成された汎用プロセッサを含む場合、汎用プロセッサは、異なる時間にそれぞれ異なる特定用途向けプロセッサ(例えば、異なるハードウェアモジュールを含む)として構成され得る。したがって、ソフトウェアは、例えば、時間の1つのインスタンスにおいて特定のハードウェアモジュールを構築し、時間の異なるインスタンスにおいて異なるハードウェアモジュールを構築するように、特定の専用プロセッサ(複数可)を構成する。
【0035】
ハードウェアモジュールは、他のハードウェアモジュールに情報を提供し、他のハードウェアモジュールから情報を受信することができる。したがって、記載されるハードウェアモジュールは、通信可能に連結されていると見なされ得る。複数のハードウェアモジュールが同時に存在する場合、通信は、ハードウェアモジュールのうちの2つ以上の間で、またはそれらの中で信号伝送を介して(例えば、適切な回路およびバスを介して)達成され得る。複数のハードウェアモジュールが異なる時間において構成またはインスタンス化される実施形態では、かかるハードウェアモジュール間の通信は、例えば、複数のハードウェアモジュールがアクセス権を有するメモリ構造内の情報の記憶および検索を通じて達成され得る。例えば、1つのハードウェアモジュールは、動作を実施し、その動作の出力を通信可能に連結されたメモリデバイスに記憶することができる。次いで、さらなるハードウェアモジュールが、その後になって、メモリデバイスにアクセスして、記憶された出力を検索および処理することができる。ハードウェアモジュールはまた、入力デバイスまたは出力デバイスとの通信を開始することができ、リソースに対して動作(例えば、情報の収集)することができる。
【0036】
本明細書に記載される例示的な方法の様々な工程は、少なくとも部分的に、関連する動作を実施するように(例えば、ソフトウェアによって)一時的に構成されるか、または永続的に構成される1つ以上のプロセッサによって実施され得る。一時的または永続的に構成されるかどうかにかかわらず、かかるプロセッサは、本明細書に記載される1つ以上の動作または機能を実施するように動作するプロセッサ実装モジュールを構築し得る。本明細書で使用される場合、「プロセッサ実装モジュール」とは、1つ以上のプロセッサを使用して実装されるハードウェアモジュールを指す。
【0037】
同様に、本明細書に記載される方法は、少なくとも部分的にプロセッサ実装型であり得、特定のプロセッサ(複数可)は、ハードウェアの一例である。例えば、ある方法の工程のうちの少なくともいくつかを、1つ以上のプロセッサまたはプロセッサ実装モジュールによって実施することができる。さらに、1つ以上のプロセッサはまた、「クラウドコンピューティング」環境で、または「サービスとしてのソフトウェア」(SaaS)として関連する動作の性能をサポートするように動作し得る。例えば、動作のうちの少なくともいくつかを、(プロセッサを含むマシンの例として)一群のコンピュータによって実施することができ、これらの動作は、ネットワーク(例えば、インターネット)、および1つ以上の適切なインタフェース(例えば、アプリケーションプログラムインタフェース(API))を介してアクセス可能である。
【0038】
ある特定の動作の性能を、単一のマシン内にあるだけでなく、いくつかのマシンにわたって展開されるプロセッサ間で分散させることができる。いくつかの例示的な実施形態では、プロセッサまたはプロセッサ実装モジュールは、単一の地理的な場所(例えば、家庭環境、オフィス環境、またはサーバファーム内)に位置し得る。他の例示的な実施形態では、プロセッサまたはプロセッサ実装モジュールを、いくつかの地理的な場所にわたって分散させることができる。
【0039】
図6は、例示的なソフトウェアアーキテクチャ702を示すブロック
図700であり、ゲームエンジン701および/またはアドレス可能アセットシステム100のコンポーネントを提供するために、本明細書で説明される様々なハードウェアアーキテクチャと組み合わせて使用され得る。
図6は、ソフトウェアアーキテクチャの非限定的な例であり、本明細書に記載の機能を可能にするために他の多くのアーキテクチャが実装され得ることが理解されよう。ソフトウェアアーキテクチャ702は、とりわけ、プロセッサ810、メモリ830、および入力/出力(I/O)コンポーネント850を含む、
図7のマシン800のようなハードウェア上で実行することができる。代表的なハードウェア層704が示されており、これは、例えば、
図7のマシン800を表すことができる。代表的なハードウェア層704は、関連する実行可能命令708を有する処理ユニット706を含む。実行可能な命令708は、本明細書で説明される方法、モジュールなどの実装形態を含む、ソフトウェアアーキテクチャ702の実行可能な命令を表す。ハードウェア層704は、実行可能命令708を有するメモリ/記憶装置710も含む。ハードウェア層704は、他のハードウェア712も含み得る。
【0040】
図6の例示的アーキテクチャでは、ソフトウェアアーキテクチャ702は、各層が特定の機能を提供する層のスタックとして概念化することができる。例えば、ソフトウェアアーキテクチャ702は、オペレーティングシステム714、ライブラリ716、フレームワークまたはミドルウェア718、アプリケーション720、およびプレゼンテーション層744などの層を含むことができる。動作上、アプリケーション720または層内の他のコンポーネントは、ソフトウェアスタックを介してアプリケーションプログラミングインタフェース(API)コール(call)724を呼び出し、メッセージ726として応答を受信することができる。示された層は本質的に代表的なものであり、全てのソフトウェアアーキテクチャが全ての層を有するわけではない。例えば、いくつかのモバイルまたは特殊用途のオペレーティングシステムは、フレームワーク/ミドルウェア718を提供しないかもしれないが、他のものはそのような層を提供するかもしれない。他のソフトウェアアーキテクチャは、追加の層または異なる層を含み得る。
【0041】
オペレーティングシステム714は、ハードウェアリソースを管理し、共通のサービスを提供することができる。オペレーティングシステム714は、例えば、カーネル728、サービス730、およびドライバ732を含み得る。カーネル728は、ハードウェア層と他のソフトウェア層との間の抽象化層として機能することができる。例えば、カーネル728は、メモリ管理、プロセッサ管理(例えば、スケジューリング)、コンポーネント管理、ネットワーキング、セキュリティ設定などを担当してもよい。サービス730は、他のソフトウェア層に他の共通サービスを提供することができる。ドライバ732は、基礎となるハードウェアを制御またはインタフェースすることを担当し得る。例えば、ドライバ732は、ハードウェア構成に応じて、ディスプレイドライバ、カメラドライバ、ブルートゥース(登録商標)ドライバ、フラッシュメモリドライバ、シリアル通信ドライバ(例えば、ユニバーサルシリアルバス(USB)ドライバなど)、Wi-Fi(登録商標)ドライバ、オーディオドライバ、電源管理ドライバなどを含み得る。
【0042】
ライブラリ716は、アプリケーション720または他のコンポーネントまたは層によって利用され得る共通のインフラストラクチャを提供することができる。ライブラリ716は、典型的には、他のソフトウェアモジュールが、基礎となるオペレーティングシステム714の機能(例えば、カーネル728、サービス730、および/またはドライバ732)と直接インタフェースするよりも簡単な方法でタスクを実行することを可能にする機能を提供し得る。ライブラリ816は、メモリ割り当て機能、文字列操作機能、数学的機能などの機能を提供することができるシステムライブラリ734(例えば、C標準ライブラリ)を含むことができる。さらに、ライブラリ716は、メディアライブラリ(例えば、MPREG4、H.264、MP3、AAC、AMR、JPG、PNGなどの様々なメディアフォーマットの提示および操作をサポートするためのライブラリ)、グラフィックライブラリ(例えば、ディスプレイ上の2Dおよび3Dグラフィックコンテンツをレンダリングするために使用できるOpenGLフレームワーク)、データベースライブラリ(例えば、様々なリレーショナルデータベース機能を提供できるSQLite)、ウェブライブラリ(例えば、ウェブブラウジング機能を提供することができるWebKit)などのAPIライブラリ736を含むことができる。ライブラリ716は、アプリケーション720および他のソフトウェアコンポーネント/モジュールに、他の多くのAPIを提供するための多種多様な他のライブラリ738も含み得る。
【0043】
(ミドルウェアとも呼ばれる)フレームワーク718は、アプリケーション720および/または他のソフトウェアコンポーネント/モジュールによって使用され得るより高いレベルの共通インフラストラクチャを提供する。例えば、フレームワーク/ミドルウェア718は、様々なグラフィックユーザーインタフェース(GUI)機能、高レベルのリソース管理、高レベルの位置識別サービスなどを提供することができる。フレームワーク/ミドルウェア718は、アプリケーション720および/または他のソフトウェアコンポーネント/モジュール(それらのうちのいくつかは特定のオペレーティングシステムまたはプラットフォームに固有のもの)によって使用され得る広範囲の他のAPIを提供し得る。
【0044】
アプリケーション720は、ビルトインアプリケーション740および/またはサードパーティアプリケーション742を含む。代表的なビルトインアプリケーション740の例は、連絡先アプリケーション、ブラウザアプリケーション、ブックリーダーアプリケーション、ロケーションアプリケーション、メディアアプリケーション、メッセージングアプリケーション、および/またはゲームアプリケーションを含み得るが、それらに限定されない。サードパーティアプリケーション742は、特定のプラットフォームのベンダ以外のエンティティによるAndroid(登録商標)またはiOS(登録商標)ソフトウェア開発キット(SDK)を用いて開発されたアプリケーションを含み、iOS(登録商標)、Android(登録商標)、Windows(登録商標)フォン、または他のモバイルオペレーティングシステムなどのモバイルオペレーティングシステム上で実行されるモバイルソフトウェアであり得る。サードパーティアプリケーション742は、本明細書に記載の機能を容易にするために、オペレーティングシステム714などのモバイルオペレーティングシステムによって提供されるAPIコール724を呼び出すことができる。
【0045】
アプリケーション720は、ビルトインオペレーティングシステム機能(例えば、カーネル728、サービス730、またはドライバ732)、ライブラリ716、またはフレームワーク/ミドルウェア718を使用して、システムのユーザーと対話するためのユーザーインタフェースを作成することができる。代替的に、または追加的に、いくつかのシステムでは、ユーザーとの対話は、プレゼンテーション層744などのプレゼンテーション層を介して行われ得る。これらのシステムでは、アプリケーション/モジュールの「ロジック」は、ユーザーと対話するアプリケーション/モジュールの態様から切り離すことが可能である。
【0046】
あるソフトウェアアーキテクチャは、仮想マシンを使用する。
図6の例では、これは仮想マシン748によって示されている。仮想マシン748は、アプリケーション/モジュールがハードウェアマシン(例えば、
図7のマシン800など)上で実行されているかのように実行することができるソフトウェア環境を作成する。仮想マシン748は、ホストオペレーティングシステム(例えば、オペレーティングシステム714)によってホストされ、通常、必ずというわけではないが、仮想マシン748の動作ならびにホストオペレーティングシステム(つまり、オペレーティングシステム714)とのインタフェースを管理する仮想マシンモニタ746を有する。オペレーティングシステム(OS)750、ライブラリ752、フレームワーク754、アプリケーション756、プレゼンテーション層758などのソフトウェアアーキテクチャが仮想マシン内で実行される。仮想マシン748内で実行されるソフトウェアアーキテクチャのこれらの層は、前述の対応する層と同じでもよく、または異なっていてもよい。
【0047】
図7は、マシン可読媒体(例えば、マシン可読記憶媒体)から命令を読み取り、本明細書で論じる方法の任意の1つまたは複数を実行するように構成された、ある例示的な実施形態によるマシン800の構成要素を示すブロック図である。いくつかの実施形態では、マシン800は、開発者デバイス102およびユーザーデバイス162と同様である。具体的には、
図7は、その中でマシン800に本明細書で論じられる複数の方法のうちの任意の1つまたは複数を実行させるための命令816(例えば、ソフトウェア、プログラム、アプリケーション、アプレット、アプリ、または他の実行可能なコード)が実行され得るコンピュータシステムの例示の形態におけるマシン800の概略図を示す。したがって、命令816を使用して、本明細書に記載のモジュールまたはコンポーネントを具体化し得る。命令は、一般的なプログラムされていないマシンを、説明された方法で説明され示された機能を実行するようにプログラムされた特定のマシンに変換する。代替の実施形態では、マシン800は、スタンドアロンデバイスとして動作するか、または他のマシンに結合されてもよい(例えばネットワーク接続されてもよい)。ネットワーク化されたデプロイメントでは、マシン800は、サーバー-クライアントネットワーク環境ではサーバー機器またはクライアント機器のキャパシティで、またはピアツーピア(または分散)ネットワーク環境ではピア機器として動作することができる。マシン800は、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ(PC)、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、セットトップボックス(STB)、パーソナルデジタルアシスタント(PDA)、エンターテイメントメディアシステム、携帯電話、スマートフォン、モバイルデバイス、ウェアラブルデバイス(例えばスマートウォッチ)、スマートホームデバイス(例えばスマート電化製品)、その他のスマートデバイス、ウェブ電化製品、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、またはマシン800によってとられるべき動作を指定する命令816を順次または他の方法で実行することができる任意のマシンを含み得るが、これに限定されない。さらに、単一のマシン800のみが示されているが、「マシン」という用語は、命令816を個別にまたは共同で実行して本明細書で論じる方法のうちの任意の1つまたは複数を実行するマシンの集合も含むものと解釈されるべきである。
【0048】
マシン800は、バス802を介するなどして互いに通信するように構成され得るプロセッサ810、メモリ830、および入力/出力(I/O)コンポーネント850を含み得る。例示の実施形態では、プロセッサ810(例えば、中央処理ユニット(CPU)、縮小命令セット計算(RISC)プロセッサ、複合命令セット計算(CISC)プロセッサ、グラフィック処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、無線周波数集積回路(RFIC)、他のプロセッサ、またはそれらの任意の適切な組み合わせ)は、例えば、命令816を実行することができるプロセッサ812およびプロセッサ814を含み得る。用語「プロセッサ」は、同時に命令を実行することができる2つ以上の独立したプロセッサ(時に「コア」と呼ばれる)を含むことができるマルチコアプロセッサを含むことを意図している。
図7は、複数のプロセッサを示すが、マシン800は、単一のコアを有する単一のプロセッサ、複数のコアを有する単一のプロセッサ(例えば、マルチコアプロセッサ)、単一のコアを有する複数のプロセッサ、複数のコアを有する複数のプロセッサ、またはそれらの任意の組み合わせを含み得る。
【0049】
メモリまたは記憶装置830は、メインメモリ832、スタティックメモリまたは他のメモリなどのメモリ834、ならびに記憶装置ユニット836を含むことができ、両方ともバス802を介するなどして、プロセッサ810にアクセス可能である。記憶装置ユニット836およびメモリ832は、本明細書に記載の方法または機能のうちの任意の1つまたは複数を具体化する命令816を格納する。命令816は、マシン800によるその実行中、メモリ832内、記憶装置ユニット836内、プロセッサ810のうちの少なくとも一つ内(例えば、プロセッサのキャッシュメモリ内)、またはそれらの任意の適切な組合せ内に、完全にまたは部分的に存在し得る。従って、メモリ832、記憶装置ユニット836、およびプロセッサ810のメモリは、マシン可読媒体の例である。
【0050】
本明細書で使用される「マシン可読媒体」は、命令およびデータを一時的または恒久的に格納することができるデバイスを意味し、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、バッファメモリ、フラッシュメモリ、光学メディア、磁気メディア、キャッシュメモリ、他の種類の記憶装置(例えば、消去可能プログラマブルリードオンリーメモリ(EEPROM))および/またはそれらの任意の適切な組み合わせを含み得るが、これらに限定されない。「マシン可読媒体」という用語は、命令816を格納することができる単一の媒体または複数の媒体(例えば、集中型または分散型データベース、または関連するキャッシュおよびサーバー)を含むと解釈されるべきである。「マシン可読媒体」という用語は、マシン(例えば、マシン800)による実行のための命令(例えば、命令816)を格納することができる任意の媒体、または複数の媒体の組み合わせを含むものとし、命令は、マシン800の1つまたは複数のプロセッサ(例えば、プロセッサ810)により実行されると、マシン800に本明細書に記載の方法のうちの任意の1つまたは複数を実行させる。したがって、「マシン可読媒体」は、単一の記憶装置またはデバイス、ならびに複数の記憶装置またはデバイスを含む「クラウドベースの」記憶システムまたは記憶ネットワークを指す。「マシン可読媒体」という用語は、信号自体を除く。
【0051】
入力/出力(I/O)コンポーネント850は、入力を受信し、出力を提供し、出力を生成し、情報を送信し、情報を交換し、測定値を捕捉するなどのための多種多様な構成要素を含み得る。特定のマシンに含まれる特定の入力/出力(I/O)コンポーネント850は、マシンの種類に依存する。例えば、携帯電話などの携帯機器は、タッチ入力デバイスまたは他のそのような入力機構を含む可能性があり、ヘッドレスサーバ機器は、そのようなタッチ入力デバイスを含まない可能性が高いであろう。入力/出力(I/O)コンポーネント850は、
図7には示されていない他の多くの構成要素を含み得ることが理解されよう。入力/出力(I/O)コンポーネント850は、単に以下の説明を単純化するために機能に従ってグループ化されており、そのグループ化は決して限定的なものではない。様々な例示的実施形態では、入力/出力(I/O)コンポーネント850は、出力コンポーネント852および入力コンポーネント854を含み得る。出力コンポーネント852は、視覚的構成要素(例えば、プラズマディスプレイパネル(PDP)、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ(LCD)、プロジェクタ、または陰極線管(CRT))、音響部品(例えばスピーカ)、触覚部品(例えば振動モータ、抵抗機構)、その他の信号発生器などを含み得る。入力コンポーネント854は、英数字入力構成要素(例えば、キーボード、英数字入力を受け取るように構成されたタッチスクリーン、フォトオプティカルキーボード、または他の英数字入力構成要素)、ポイントベースの入力構成要素(例えば、マウス、タッチパッド、トラックボール、ジョイスティック、モーションセンサ、またはその他のポインティングデバイス)、触覚入力コンポーネント(例えば、物理ボタン、タッチまたはタッチジェスチャの位置または力を提供するタッチスクリーン、またはその他の触覚入力構成要素)、音声入力部品(例えば、マイク)などを含み得る。
【0052】
さらなる例示的実施形態では、入力/出力(I/O)コンポーネント850は、他の様々なコンポーネントの中で、バイオメトリックコンポーネント856、モーションコンポーネント858、環境コンポーネント860、または位置コンポーネント862を含み得る。例えば、バイオメトリックコンポーネント856は、表情(例えば、手の表情、顔の表情、声の表情、身体のジェスチャ、または目の動き)を検出し、生体信号(例えば、血圧、心拍数、体温、発汗、または脳波)を測定し、人物を識別(例えば、音声識別、網膜識別、顔識別、指紋識別、または脳波に基づく識別)する等のための構成要素を含み得る。モーションコンポーネント858は、加速度センサ構成要素(例えば、加速度計)、重力センサ構成要素、回転センサ構成要素(例えば、ジャイロスコープ)などを含み得る。環境コンポーネント860は、例えば、照明センサ構成要素(例えば、光度計)、温度センサ構成要素(例えば、周囲温度を検出する1つまたは複数の温度計)、湿度センサ構成要素、圧力センサ構成要素(例えば、気圧計)、音響センサ構成要素(例えば、背景雑音を検出する1つまたは複数のマイクロフォン)、近接センサ構成要素(例えば、近くの物体を検出する赤外線センサ)、ガスセンサ(例えば、安全のために有害ガスの濃度を検出するための、または大気中の汚染物質を測定するためのガス検出センサ)、または周囲の物理的環境に対応する標示、測定値、または信号を提供することができる他の構成要素を含み得る。位置コンポーネント862は、位置センサ構成要素(例えば、全地球測位システム(GPS)受信機部品)、高度センサ構成要素(例えば、高度が導出され得る気圧を検出する高度計または気圧計)、方位センサ構成要素(例えば、磁力計)などを含み得る。
【0053】
通信は、多種多様な技術を使用して実施することができる。入力/出力(I/O)コンポーネント850は、カップリング(coupling)882およびカップリング872を介してそれぞれマシン800をネットワーク880またはデバイス870に結合するように動作可能な通信コンポーネント864を含み得る。例えば、通信コンポーネント864は、ネットワーク880とインタフェースするためのネットワークインタフェース構成要素または他の適切なデバイスを含み得る。さらなる例では、通信コンポーネント864は、有線通信構成要素、無線通信構成要素、セルラ通信構成要素、近距離無線通信(NFC)構成要素、Bluetooth(登録商標)構成要素(例えば、Bluetooth(登録商標)LowEnergy)、Wi-Fi(登録商標)構成要素、および他のモダリティを介して通信を提供するための他の通信構成要素を含み得る。デバイス870は、他のマシンまたは多種多様な周辺デバイス(例えば、ユニバーサルシリアルバス(USB)を介して結合された周辺デバイス)のうちのいずれかであり得る。
【0054】
さらに、通信コンポーネント864は、識別子を検出するか、または識別子を検出するように動作可能なコンポーネントを含み得る。例えば、通信コンポーネント864は、RFID(Radio Frequency Identification)タグリーダーコンポーネント、NFCスマートタグ検出コンポーネント、光学リーダーコンポーネント(例えば、UPC(Universal Product Code)バーコードのような一次元バーコード、QR(Quick Response)コードのような多次元バーコード、Aztecコード、Data Matrix、Dataglyph、MaxiCode、PDF417、Ultra Code、UCC RSS-2Dバーコード、及び他の光学コードを検出するための光学センサ)、または音響検出コンポーネント(例えば、タグ付きオーディオ信号を識別するためのマイクロフォン)を含み得る。さらに、通信コンポーネント862を介して、例えば、インターネットプロトコル(IP)ジオロケーションを用いた位置、Wi-Fi(登録商標)信号三角測量を用いた位置、特定の位置を示すNFCビーコン信号の検出を用いたロケーションなどの様々な情報を取得し得る。
【0055】
この明細書全体を通して、複数の事例は、単一の事例として記述された構成要素、動作、または構造を実装することができる。1つ以上の方法の個々の工程は別個の工程として図示および説明されているが、個々の工程の1つ以上を同時に実施することができ、図示の順序で工程を実施する必要はない。例示的な構成で個別の構成要素として提示される構造および機能性は、組み合わせた構造または構成要素として実装され得る。同様に、単一の構成要素として提示されている構造および機能性は、個別の構成要素として実装され得る。これらおよび他の変形、修正、追加および改良は、本明細書中の主題の範囲内に入る。
【0056】
本明細書に示された実施形態は、当業者が開示された教示を実施することを可能にするために十分に詳細に記載されている。本開示の範囲から逸脱することなく、構造的および論理的な置換および変更を行うことができるように、他の実施形態が使用され、かつそこから導出されることが可能である。従って、詳細な説明は限定的な意味で解釈されるべきではなく、様々な実施形態の範囲は添付の特許請求の範囲とそのような特許請求の範囲が権利を与える等価物の全範囲によってのみ定義される。
【0057】
本明細書で使用されるとき、用語「または」は、包括的または排他的な意味で解釈され得る。さらに、本明細書で単一の事例として説明されているリソース、動作、または構造のために複数の事例を提供することができる。さらに、様々なリソース、動作、モジュール、エンジン、およびデータストア間の境界はいくぶん任意であり、特定の動作は特定の例示的な構成のコンテキストで示される。機能の他の割り当ても想定されており、本開示の様々な実施形態の範囲内にあり得る。一般に、例示的な構成において別々のリソースとして提示された構造および機能は、組み合わされた構造またはリソースとして実装され得る。同様に、単一のリソースとして提示された構造および機能は、別々のリソースとして実装されてもよい。これらおよび他の変形、修正、追加、および改良は、添付の特許請求の範囲によって表される本開示の実施形態の範囲内に含まれる。従って、本明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。