主題については、明細書の結論部分に特に指摘し明確に請求する。本開示の前述および他の機能は、添付図面に関して、以下の記述および添付の請求項からより完全に明白になるだろう。これらの図は本開示に従って単に複数の実施形態を描写するものであり、したがって、その範囲の限定するものではないことを理解して、添付図面を使用して追加の特異性および詳細を用いて本開示について記述する。
以下の記述では、請求される主題について完全な理解を促すために、特定の詳細と共に、様々な例について説明している。しかし、請求される主題は、本明細書に開示した特定の詳細の一部またはそれ以上がなくても実施できることを当業者は理解されるであろう。さらに、一部の状況では、よく知られている方法、手順、システム、コンポーネント、および/または回路については、請求される主題を不必要に不明瞭にすることを避けるために詳細には記述していない。
以下の詳細な説明では、その一部を形成する添付図面について言及する。図面では、文脈において指示されていない限り、類似の記号は、典型的には類似したコンポーネントを特定するものである。詳細な説明、図、および請求項に記述した例示的な実施形態は、限定を目的とするものではない。本明細書に提示された主題の精神または範囲から逸脱することなく、他の実施形態を利用し、他の変更を行うことができる。本明細書に一般的に記述し、図に示した本開示の態様は、多種多様の異なる構成において配置、交換、結合、および設計することができ、それらすべてが明示的に意図するものであり、本開示の一部を構成していることを容易に理解されるだろう。
本開示は、とりわけ、ゲームクライアントにオンラインゲーム経験を提供することに関係する方法、デバイス、システム、およびコンピュータ可読媒体について説明している。
一部の例では、オンラインゲーム経験を提供するために、オブジェクト指向のゲームサーバシステムを提供することができる。一部の例では、オンラインゲームは、マッシブリーマルチプレイヤーオンラインゲームでもよい。一部の例では、アーキテクチャは、サーバシステムでリソースまたはサービスにそれぞれ割り当てるためにゲーム要素を提供することができる。そのようなアーキテクチャでは、ゲーム要素のモデルは、リソースまたはサービスで本質的に局所化することができるため、サーバシステムでモデルデータをほとんど移動させないことが可能であるため、サーバシステムのリソースを効率的に利用することができる。一部の例では、ゲームサーバは、サービス指向でもよいため、割り当てられたリソースまたはサービスでゲームの動作を解決できるため、同様のサーバシステムのリソース節約を達成することができる。
レンダリングタスクが必要な可能性があるという決定に応じて、ゲーム入力、ゲームのビューポート情報、および/または他の情報は、全体的にまたは部分的に、サーバの複数のリソースに供給することができる。記述したように、たとえば、サーバのリソースは、動作の解決またはゲーム要素に割り当てるか、かつ/または専用に用いることができる。一部の例では、1つまたは複数の動作解決リソースは、受信されたゲーム入力に関係するゲームの動作を解決し、ゲーム世界の状態を更新することができる。これは、サーバシステムに維持することができる。ゲーム世界の状態の更新に応じて、割り当てられたゲーム要素リソースは、ゲームクライアントに送信されるゲーム要素をレンダリングすることができる。一部の例では、割り当てられたゲーム要素リソースでレンダリングされるゲーム要素は、効率的な並列のゲームサーバアーキテクチャを提供することができる。
一部の例では、ゲームクライアントのビューポートは、ビューポートから見ることができる可能性がある1つまたは複数のゲーム要素を決定するために評価することができる。一般的に、ビューポートは、ゲーム世界の表示領域を含むことができ、また、ビューポートは、任意の適切な形状を含むことができる。一部の例では、ビューポートは、3次元シーンの2次元投影を規定することができる。一部の例では、ビューポートは、ゲームクライアントに対する表示可能な領域を含むことができる。一部のゲーム要素は、複数のゲームクライアントのビューポートに含めることができることを理解されたい。一部の例では、ゲームクライアント依存しないレンダリングに基づいて各ビューポートに対して実行される最終的なゲームクライアントに依存するレンダリングを用いて、複数のビューポートで共通して、ゲームクライアントに依存しないレンダリングを使用することができるように、ゲーム要素をレンダリングすることができる。そのような手法およびアーキテクチャは、無駄が多い反復的なゲーム要素のレンダリングを本質的に減らすことができる。本明細書に記述したシステムアーキテクチャおよび方法は、映画品質のゲーム要素を持つマッシブリーマルチプレイヤーオンラインゲームを提供することができる。
図1は、本開示の少なくとも一部の実施形態に従って配置された、オンラインゲーム経験を提供するための例示的なシステム100を示すブロック図である。図示するように、システム100は、ゲーム世界の状態120、ゲームサーバリソース130、動作解決リソース112、114、116、ゲーム要素リソース142、144、146を含むことができる。また図示するように、システム100は、1つまたは複数のゲームクライアント102、104、106と通信することができる。一般的に、システム100は、特に以下に図4を用いて記述したように、本明細書に記述した任意の適切な方法で実装することができる。システム100は、ゲームクライアント102、104、106にオンラインゲーム経験を提供するために、本明細書に記述した手法を実装することができる。
一般的に、ゲームまたはゲーム環境において、ゲーム要素はそれぞれ、システム100の対応するゲーム要素リソースに割り当てることができる。割り当てられたゲーム要素は、任意の適切なゲーム要素を含むことができる。一部の例では、本明細書にさらに記述したように、ゲーム要素は、システム100の割り当てられたゲーム要素リソース142、144、146を使用して、個々にレンダリングすることができる。一部の例では、割り当てられたゲーム要素は、ゲームキャラクタ、ゲームキャラクタの一部、ゲームオブジェクト、ゲームオブジェクトの一部、ゲームシーンの一部、またはゲームシーンなどでもよい。図示するように、ゲーム要素は、それぞれのゲーム要素リソース142、144、146に割り当てることができる。一般的に、ゲーム要素リソース142、144、146は、任意の適切なコンピューティング要素を含むことができる。一部の例では、ゲーム要素リソース142、144、146は、コンピュータ、複数のコンピュータ、サーバ、コンピュータリソース、バーチャルマシン、またはコンピュータクラスタなどを含むことができる。一部のゲーム要素は、専用のゲーム要素リソースに割り当てられない場合があることを理解されたい。一部の例では、そのようなゲーム要素は、ゲームクライアントまたはゲームサーバリソース130でレンダリングすることができる。
図示するように、一部の例では、ゲームの動作解決はそれぞれ、動作解決リソース112、114、116に割り当てることができる。一般的に、割り当てられたゲームの動作解決は、任意の適切なゲームの動作解決を含むことができる。一部の例では、本明細書にさらに記述したように、ゲームの動作解決は、システム100の動作解決リソース112、114、116を使用して、個々に処理することができる。一部の例では、割り当てられたゲームの動作解決は、戦闘解決リソース、動き解決リソース、オブジェクト解決リソース、または衝突解決リソースなどを含むことができる。図示するように、ゲームの動作解決は、それぞれの動作解決リソース112、114、116に割り当てることができる。一般的に、動作解決リソース112、114、116は、任意の適切なコンピューティング要素を含むことができる。一部の例では、動作解決リソース112、114、116は、コンピュータ、複数のコンピュータ、サーバ、コンピュータリソース、バーチャルマシン、またはコンピュータクラスタなどを含むことができる。一部のゲームの動作解決は、専用の解決動作リソースに割り当てられない場合があることを理解されたい。一部の例では、動作解決は、ゲームクライアントまたはゲームサーバリソース130でレンダリングすることができる。
図示するように、一部の例では、システム100は、ゲーム世界の状態120を含むことができる。一般的に、ゲーム世界の状態120は、提供されているオンラインゲームの状態を含むことができる。一部の例では、ゲーム世界の状態は、ゲームサーバで維持および更新することができる。一部の例では、ゲーム世界の状態120は、ゲームクライアント102、104、106に対してゲーム世界を規定することができる。一部の例では、ゲーム世界の状態は、ゲーム要素の場所、ゲーム要素の姿勢、またはゲームの照明などを含むことができる。ゲーム世界の状態120は、システム100に任意の適切な方法で実装することができる。一部の例では、ゲーム世界の状態120は、データベースとして実装することができる。図示するように、動作解決リソース112、114、116、ゲーム要素リソース142、144、146、およびゲームサーバリソース130は、ゲーム世界の状態120に通信するように結合することができる。
図示するように、ゲームクライアント102、104、106は、システム100に通信するように結合することができる。本明細書にさらに記述したように、ゲームクライアント102、104、106は、システム100にゲーム入力、ビューポート情報、および/または他の情報を提供または送信することができる。一般的に、ゲーム入力は、任意の適切なゲーム入力を含むことができる。一部の例では、ゲーム入力は、ゲーム要素の動き、ゲーム要素の選択、ゲームリソースの選択、ゲーム選択肢の選択、ゲームの動きなどを含むことができる。一般的に、ビューポート情報は、任意の適切な情報を含むことができる。一部の例では、ビューポート情報は、ゲーム世界内の場所、ゲーム世界内のビュー、ゲーム世界の座標などを含むことができる。ゲーム入力、ビューポート、および他の情報は、任意の適切な通信手法を使用してサーバ100と通信することができる。一部の例では、ゲーム入力は、オンライン通信を介してサーバ100と通信することができる。
一般的に、サーバ100で、ゲーム入力、ビューポート情報、および/または他の情報は、任意の適切なリソースまたはリソースに通信することができる。一部の例では、ゲーム入力は、ゲームサーバリソース130に通信することができる。一部の例では、ゲーム入力はゲームの動作を含むことができ、ゲーム入力のすべてまたは一部は、動作解決リソース112、114、116の1つまたは複数に通信することができる。一部の例では、ゲーム入力は、ゲーム要素への変更を含むことができ、ゲーム入力のすべてまたは一部は、ゲーム要素リソース142、144、146の1つまたは複数に通信することができる。一部の例では、ビューポート情報は、ゲーム要素リソース142、144、146の1つまたは複数に送信することができる。一部の例では、ゲーム入力は、必要なリソースにすべて提供することができる。一部の例では、ゲーム入力は、部分的に必要なリソースに提供できるため、リソースによって必要とされる情報だけを含むゲーム入力データまたは信号を送信することができる。そのような手法は、システム100内のデータ転送を減らすことができる。
記述したように、一部の例では、ゲーム入力、ビューポート情報、および/または他の情報は、動作解決リソース112、114、116の1つまたは複数に通信することができる。一般的に、1つまたは複数の動作解決リソース112、114、116は、ゲーム入力に関係するゲームの動作を処理することができ、ゲーム世界の状態120は、処理されたゲームの動作に応じて更新することができる。記述したように、動作解決リソース112、114、116は、リソースに割り当てられたゲームの動作を個々に処理することができる。一部の例では、動作解決リソース112、114、116は、必要に応じて相互に通信することができる。ゲーム世界の状態が更新されると、結果としてゲーム世界のビューが変更または更新される場合があることを理解されたい。ここで、ゲーム世界のビューは、ゲーム世界の状態の視覚的な描写または表現の場合がある。そのため、更新されたゲーム世界のビューは、1つまたは複数のゲーム要素の更新されたレンダリングを必要とする場合がある。そのような更新されたレンダリングは、更新されたゲーム世界の状態120およびゲーム世界のビューへの対応する更新に応じて、ゲーム要素リソース142、144、146で実行することができる。
本明細書にさらに記述したように、一部の例では、ゲーム世界の状態への更新によって影響を受けたゲーム要素は、更新されたレンダリングを必要とする場合がある。たとえば、ゲームクライアント102、104、106の1つまたは複数が、ゲームクライアントのビューポートからゲーム要素またはゲーム要素の一部のビューを持っている可能性がある場合、ゲーム要素は、更新されたレンダリングを必要とする場合がある。ここでビューポートは、ゲームクライアントによって見えるゲーム世界のビュー全体の領域でもよい。そのような例では、更新されたレンダリングを必要とする可能性があるゲーム要素は、割り当てられたゲーム要素リソースでレンダリングすることができる。そのようなレンダリングは、ゲームクライアントに依存しないレンダリングおよび続くゲームクライアントに依存するレンダリングを含むことができる。一部の例では、ゲームクライアントに依存しないレンダリングは、ゲーム要素のビューに依存しない可能性がある1つまたは複数のレンダリングパスを含むことができる。一部の例では、ゲームクライアントに依存するレンダリングは、ゲーム要素のビューに依存する可能性がある1つまたは複数のレンダリングパスを含むことができ、ゲームクライアントに依存するレンダリングは、ゲームクライアントに依存しないレンダリングに基づいて行うことができる。
一部の例では、ゲーム要素は、ゲームクライアント102、104、106の2つ以上によって見ることができる。そのような例では、ゲーム要素のゲームクライアントに依存しないレンダリングは、ゲーム要素リソースで一度だけ行うことができる。一部の例では、ゲーム要素の各ゲームクライアントに依存するレンダリングは、同じゲームクライアントに依存しないレンダリングに基づいて行うことができる。そのような手法は、システム100でかなりの処理リソースを節約するという長所を持つ場合がある。記述したように、ゲーム要素リソース142、144、146は、関係する割り当てられたゲーム要素のレンダリングを個々に処理することができる。一部の例では、ゲーム要素リソース142、144、146は、必要に応じて相互に通信することができる。
そのようなレンダリングおよび/または処理の手法は、ゲームクライアント102、104、106のビューポートに対して必要なすべてのゲーム要素をレンダリングするために、必要に応じてシステム100で実行することができる。一般的に、レンダリングされたゲーム要素は、任意の適切な方法でゲームクライアント102、104、106に送信することができる。一部の例では、各レンダリングされたゲーム要素は、別々に送信することができる。一部の例では、各要素のゲームクライアント特定の部分は、ゲームクライアント102、104、106に別々に送信することができる。一部の例では、1つまたは複数のレンダリングされたゲーム要素を含むレンダリングされたシーンは、合成されたシーンとして送信することができる。一部の例では、複数のレンダリングされたゲーム要素は、レンダリングされたゲーム要素の再合成に関係するメタデータと共にゲームクライアントに送信することができる。一部の例では、メタデータは、トラッキング表示条件、ラインオブサイト計算、または境界ボックストラッキングなどを含むことができる。
記述したように、本明細書に記述した手法は、ゲームクライアント102、104、106にオンラインゲーム経験を提供するために使用することができる。一般的に、記述した手法は、任意の数のゲームクライアントにゲーム経験を提供することができる。さらに、システム100は、任意の数のゲーム要素リソース142、144、146、および動作解決リソース112、114、116を含むことができる。記述したシステムおよび手法は並列化を提供できるため、システム100内で転送されるデータの量を減らすことができる。一部の例では、本明細書に記述したゲーム要素は、映画品質でレンダリングすることができる。そのような品質は、たとえば、約1GBを超えるメモリを占有する可能性があるゲームキャラクタを提供することができる。記述したシステムおよび手法は、不必要なレンダリングを排除するために、ゲームクライアントに依存しないレンダリングの再利用およびインテリジェントなレンダリング決定を用いて効率的なゲーム要素レンダリングを提供することができる。記述した手法は、特に図2に関して本明細書に詳細に記述している。
図2は、本開示の少なくとも一部の実施形態に従って配置された、オンラインゲーム経験を提供するための例示的な方法200を示す流れ図である。一般的に、方法200は、本明細書に記述したような任意の適切なデバイス、複数のデバイス、またはシステムによって実行することができる。一部の例では、方法200は、サーバシステムによって実行することができる。一部の例では、方法200は、データセンターまたはデータセンタークラスタによって実行することができる。方法200は、処理ステップ、機能操作、イベント、および/または動作として記述できる様々な機能ブロックまたは動作を説明するものであり、これらは、ハードウェア、ソフトウェア、および/またはファームウェアによって実行することができる。様々な実装において、図2に示す機能ブロックの多数の代替案を実施することができる。たとえば、請求された主題の範囲から逸脱することなく、図2に図示していない干渉動作および/または図2に図示していない追加の動作を用いることができ、かつ/または図2に示す動作の一部を排除することができる。一部の例では、図2に示す動作は、並列処理手法を使用して運用することができる。方法200は、ブロック205、210、215、220、225、230、235、240、245、250、255、および/または260の1つまたは複数によって示すような機能操作の1つまたは複数を含むことができる。方法200のプロセスは、ブロック205で開始することができる。
ブロック205「対応するゲーム要素リソースにゲーム要素を割り当てる」で、多数のゲーム要素のそれぞれは、サーバシステムの対応する多数のゲーム要素リソースに割り当てることができる。一般的に、サーバシステムは、本明細書に記述したように任意の方法で実装することができる。記述したように、割り当てられたゲーム要素は、任意の適切なゲーム要素を含むことができる。一部の例では、割り当てられたゲーム要素は、ゲームキャラクタ、ゲームキャラクタの一部、ゲームオブジェクト、ゲームオブジェクトの一部、ゲームシーンの一部、またはゲームシーンなどでもよい。ゲーム要素は、ゲーム要素リソース142、144、146など、それぞれのゲーム要素リソースに割り当てることができる。一般的に、ゲーム要素リソースは、たとえば、コンピュータ、複数のコンピュータ、サーバ、コンピュータリソース、バーチャルマシン、またはコンピュータクラスタなど、任意の適切なコンピューティング要素を含むことができる。一部のゲーム要素は、専用のゲーム要素リソースに割り当てられない場合があることを理解されたい。方法200のプロセスは、ブロック210で継続することができる。
ブロック210「レンダリングタスクが必要であることを決定する」では、サーバシステムは、レンダリングタスクが必要な可能性があると決定することができる。一般的に、サーバシステムは、任意の適切な方法でレンダリングタスクが必要であると決定することができる。一部の例では、サーバシステムは、ゲーム世界の状態への更新に基づいてレンダリングタスクが必要であると決定することができる。一部の例では、サーバシステムは、ゲーム変更に基づいてゲーム世界の状態への更新に基づいてレンダリングタスクが必要な可能性があると決定することができる。そのようなゲーム変更は、ゲームのルール、ゲームアルゴリズム、またはゲーム世界の状態に適用されるゲームからのゲーム物理学に基づいてもよい。一部の例では、サーバシステムは、タイムチックまたは時間経過など、時間の経過に基づいてレンダリングタスクが必要であると決定することができる。
一部の例では、サーバシステムはレンダリングタスクを決定することができ、サーバシステムは、ゲームクライアントから受信したゲーム入力に基づいてゲーム世界の状態へのゲーム変更に基づいて、レンダリングタスクが必要であると決定することができる。一般的に、サーバシステムは、任意の適切な方法でゲームクライアントから入力を受信することができる。一般的に、任意の数のゲームクライアントは、サーバシステムに通信するように結合することができ、任意のゲームクライアントは、サーバシステムにゲーム入力を送信することができる。一般的に、ゲーム入力は、たとえば、要求されたキャラクタの動き、要求されたキャラクタの動作、ゲームビューの変更、またはゲームトランザクションなど、任意の適切なゲーム入力の場合がある。一部の例では、多数のゲーム入力は、1つまたは複数ゲームクライアントから収集することができる。
本明細書に記述したように、一部の例では、1つのゲーム入力または多数のゲーム入力を受信することができる。一部の例では、1つまたは複数のゲーム入力は、ゲーム世界の状態を更新するために使用することができる。一般的に、ゲーム世界の状態は、ゲームサーバで維持および更新することができる。一部の例では、ゲーム世界の状態は、ゲーム要素の場所、ゲーム要素の姿勢、またはゲームの照明などを含むことができる。ゲーム世界の状態は、任意の適切な1つまたは複数の手法を使用して更新することができる。一部の例では、ゲーム世界の状態は、データベースとして維持することができ、ゲーム世界の更新は、データベース更新を含むことができる。一部の例では、ゲーム世界の状態の更新は、ゲーム入力に対する動作解決を決定することと、ゲーム世界の状態に動作解決を適用することとを含むことができる。一部の例では、ゲーム世界の状態の更新は、動作解決リソースまたはゲームサーバによって管理されているオブジェクトまたはイベントの動作を解決することを含むことができる。一部の例では、多数のゲームの動作解決のそれぞれは、サーバシステムの対応する多数の動作解決リソースに割り当てることができる。そのような例では、動作解決は、受信されたゲーム入力に関係する多数の動作解決リソースの動作解決リソースで決定することができる。一般的に、ゲームの動作解決は、任意の適切なゲームの動作解決を含むことができる。一部の例では、動作解決リソースは、戦闘解決リソース、動き解決リソース、オブジェクト解決リソース、または衝突解決リソースでもよい。方法200のプロセスは、ブロック215で継続することができる。
ブロック215「ゲームクライアントのビューポートを決定する」では、ゲームクライアントのゲーム世界のビューのビューポートを決定することができる。一般的に、ビューポートは、任意の適切な手法を使用して決定することができる。一部の例では、ゲーム世界のビューのビューポートは、ゲームクライアントからビューポートパラメータを受信することによって決定することができる。一部の例では、ゲーム世界のビューのビューポートは、サーバシステムでビューポートパラメータを生成することによって決定することができる。一部の例では、ゲーム世界のビューはゲーム世界の状態の視覚的な描写または表現の場合がある。一部の例では、ビューポートは、ゲームクライアントによって見えるゲーム世界のビュー全体の領域の場合がある。記述したように、ビューポートはゲームクライアントに関係する場合がある。一部の例では、ビューポートは、第1のゲームクライアントに関係する第1のビューポートの場合がある。方法200のプロセスは、ブロック220で継続することができる。
判定ブロック220「ゲーム要素は見えるか?」では、多数のゲーム要素のゲーム要素がビューポートから見えるかどうかを決定することができる。一般的に、任意の適切な手法を使用して、ゲーム要素がビューポートから見える可能性があるかどうかを決定することができる。一部の例では、ゲーム要素の1つまたは複数のポリゴンが、ビューポート内で見え、他のゲーム要素によって不明瞭にならない可能性があるかどうかを決定することによって、ゲーム要素がビューポートから見える可能性があるかどうかを決定することができる。ゲーム要素がビューポートから見えない場合、方法200のプロセスは、ブロック235で継続することができる。ゲーム要素がビューポートから見える場合、方法200のプロセスは、ブロック225で継続することができる。
ブロック235「ゲーム要素をレンダリングしない」では、ゲーム要素はレンダリングされない。一般的に、ゲーム要素がゲームクライアントのビューポートから見えなくてもよい場合、そのビューポートから見られるようにゲーム要素をレンダリングすることは、サーバリソースを浪費している可能性があることを理解されたい。ゲーム要素がレンダリングされなくてもよい場合、本明細書で下にさらに詳しく記述したように、方法200のプロセスは、ブロック255で継続することができる。
判定ブロック225「ゲーム要素のレンダリングは必要か?」では、ゲーム要素をレンダリングする必要があるかどうかを決定することができる。一般的に、任意の適切な手法を使用して、ゲーム要素をレンダリングする必要があるかどうかを決定することができる。一部の例では、ゲーム要素は見える可能性があるが、要素をレンダリングする必要がない可能性があるようにビューの範囲にある可能性があるため(たとえば、ビューポートにおいて小さい場合がある)、ゲーム要素をレンダリングする必要がない場合がある。一部の例では、望まれるレンダリングは以前に完了されており、サーバシステムのメモリに保存(たとえばキャッシュ)されているため、ゲーム要素をレンダリングする必要がない場合がある。ゲーム要素をレンダリングする必要がない可能性がある場合、方法200のプロセスは、ブロック235で継続することができる。ゲーム要素をレンダリングする必要がある場合、方法200のプロセスは、ブロック230で継続することができる。
記述したように、ブロック235「ゲーム要素をレンダリングしない」では、本明細書で下にさらに詳しく記述したように、ゲーム要素はレンダリングされず、方法200のプロセスはブロック255で継続することができる。
判定ブロック230「ゲームクライアントに依存しないレンダリングは必要か?」では、ゲーム要素のゲームクライアントに依存しないレンダリングが必要かどうかを決定することができる。一般的に、ゲームクライアントに依存しないレンダリングが完了しておらず、サーバシステムに保存されていない場合、ゲーム要素のゲームクライアントに依存しないレンダリングは必要な場合がある。本明細書に記述したように、方法200のプロセスは、任意の数のゲームクライアントおよび/またはゲームクライアントのビューポートに対して完了することができ、ゲーム要素は見ることができ、1つまたは複数のゲームクライアントのビューポートに対してレンダリングすることを必要とする場合がある。一般的に、ゲーム要素の第1のレンダリングに対して、ゲーム要素またはゲーム要素の一部のゲームクライアントに依存しないレンダリングが必要な場合がある。一部の例では、そのレンダリングは、サーバシステムに保存することができ、ゲーム要素の続くレンダリングに対して(他のゲームクライアントのビューポートに対して)、ゲームクライアントに依存しないレンダリングは繰り返されなくてもよく、代わりに、保存されたゲームクライアントに依存しないレンダリングを使用することができる。そのような手法により、サーバシステムでかなりの処理リソースを節約することができる。ゲームクライアントに依存しないレンダリングをレンダリングする必要がない場合、方法200のプロセスは、ブロック245で継続することができる。ゲームクライアントに依存しないレンダリングをレンダリングする必要がある場合、方法200のプロセスは、ブロック240で継続することができる。
ブロック240「ゲームクライアントに依存しないレンダリングを実行する」では、ゲーム要素のゲームクライアントに依存しないレンダリングを実行することができる。一般的に、ゲームクライアントに依存しないレンダリングは、特に図1に関して本明細書に記述したように、ゲーム要素に割り当てられたサーバリソースで完了することができる。一般的に、ゲームクライアントに依存しないレンダリングは、ゲーム要素全体、またはゲーム要素の1つまたは複数のアクティブなポリゴンに対して実行できるため、アクティブなポリゴンは、更新されたレンダリングを必要とするゲーム要素レンダリングのポリゴンを含むことができる。一部の例では、アクティブなポリゴンは、ゲームクライアントビューポートから見えるポリゴンを含むことができる。一部の例では、更新されたレンダリングを必要としない可能性があるポリゴンは、非アクティブと考えられる可能性があり、レンダリングされない可能性がある。一般的に、ゲームクライアントに依存しないレンダリングは、任意の適切な手法を使用して実行することができる。一部の例では、ゲーム要素の1つまたは複数のアクティブなポリゴンのゲームクライアントに依存しないレンダリングを実行することができる。一部の例では、ゲームクライアントに依存しないレンダリングは、複数のレンダリングパスを含むことができる。記述したように、一部の例では、ゲーム要素全体またはゲーム要素の1つまたは複数のアクティブなポリゴンのゲームクライアントに依存しないレンダリングは、サーバシステムで将来の使用のためにキャッシュすることができる。
記述したように、ゲームクライアントに依存しないレンダリングは、1つまたは複数のレンダリングパスを含むことができる。一般的に、レンダリングパスは、任意の適切なレンダリング手法を含むことができる。一部の例では、レンダリングパスは、通常のレンダリング、拡散レンダリング、鏡面レンダリング、カラーレンダリング、シャドーレンダリング、アンビエントオクルージョン(AO)レンダリング、ジオメトリレンダリング、ディスプレースメントレンダリング、ワイヤーフレームレンダリング、アルティチュードレンダリング、Z深度レンダリング、またはアルファレンダリング、などを含むことができる。一般的に、レンダリングパスの1つまたは複数を実行することができる。レンダリングパスが多ければゲーム要素レンダリングを改善できる可能性があるが、サーバシステムのリソースをより多く必要とする可能性があることを理解されたい。一部の例では、サーバシステムは、サーバリソース負荷、ゲーム要素の場所もしくは隆起(prominence)、ゲームクライアントに依存しないレンダリングの使用数、またはゲーム要素の重要性などの1つまたは複数の要素に基づいて、レンダリングパスのタイプを実行するべきかどうかを決定することができる。方法200のプロセスは、ブロック245で継続することができる。
ブロック245「ビューポートに依存するレンダリングを実行する」では、ゲーム要素全体またはゲーム要素の1つもしくは複数のアクティブなポリゴンのゲームクライアントに依存するレンダリングを実行することができる。一般的に、ゲームクライアントに依存するレンダリングは、特に図1に関して本明細書に記述したように、ゲーム要素に割り当てられたサーバリソースで完了することができる。一般的に、ゲームクライアントに依存するレンダリングはゲームクライアントに依存しないレンダリングおよびゲームクライアントのビューポートに基づいてもよい。一般的に、ゲームクライアントに依存するレンダリングは、任意の適切な手法を使用して実行することができる。一部の例では、ゲームクライアントに依存するレンダリングは、1つまたは複数のレンダリングパスを含むことができる。一般的に、レンダリングパスは、任意の適切なレンダリング手法を含むことができる。一部の例では、レンダリングパスは、通常のレンダリング、拡散レンダリング、鏡面レンダリング、カラーレンダリング、シャドーレンダリング、アンビエントオクルージョン(AO)レンダリング、ジオメトリレンダリング、ディスプレースメントレンダリング、ワイヤーフレームレンダリング、アルティチュードレンダリング、Z深度レンダリング、またはアルファレンダリングなどを含むことができる。一般的に、レンダリングパスの1つまたは複数を実行することができる。ゲームクライアントに依存しないレンダリングに関して記述したように、レンダリングパスが多ければゲーム要素レンダリングを改善できる可能性があるが、サーバシステムのリソースをより多く必要とする可能性がある。一部の例では、サーバシステムは、サーバリソース負荷、ゲーム要素の場所もしくはプロミネンス、ゲームクライアントに依存しないレンダリングの使用数、またはゲーム要素の重要性などの1つまたは複数の要素に基づいて、レンダリングパスのタイプを実行するべきかどうかを決定することができる。
一般的に、方法200のブロック240、245に関して記述した手法は、ゲームクライアントに対してゲーム要素のレンダリングを提供することができることを理解されたい。一般的に、ゲームクライアントにゲーム要素のレンダリングを提供するために、任意の手法を使用することができる。一部の例では、ゲームクライアントに依存しないレンダリングは実行されなくてもよく、ビューポートに依存するレンダリングだけを実行することができる。そのような手法により、実装を簡潔にすることができ、本明細書に記述したように並列化およびリソース割り当ての利点を提供することができる。方法200のプロセスは、ブロック250で継続することができる。
ブロック250「送信する」では、ゲーム要素またはゲーム要素の一部のレンダリングをゲームクライアントに送信することができる。一般的に、ゲーム要素またはゲーム要素の一部は、任意の適切な通信手法を使用して、ゲームクライアントに送信することができる。一部の例では、レンダリングされたゲーム要素またはゲーム要素の一部は、ゲームクライアントだけに送信することができる。そのような例では、ゲームシーンの合成は、ゲームクライアントによって完了することができる。一部の例では、ゲームクライアントは、それらのビューポートで2つ以上のゲーム要素のレンダリングを必要とする場合がある。一部の例では、2つ以上のゲーム要素は、ゲームクライアントに別々に送信することができる。一部の例では、2つ以上のゲーム要素の再合成に関係するメタデータは、2つ以上のゲーム要素のレンダリングと共にゲームクライアントに送信することができる。
一部の例では、サーバは、合成されたゲームシーンまたは合成されたゲームシーンの一部をゲームクライアントに送信することができる。一部の例では、第1のゲーム要素レンダリングが完了すると、2つ以上のゲーム要素をレンダリングできるまで、第1のゲーム要素はゲームサーバに保存することができる。一部の例では、すべてのゲーム要素のレンダリングは、同時にまたは本質的に同時に完了することができる。そのような手法では、たとえば、本明細書に記述したようにマップリデュース手法を使用して、並列処理を提供することができる。ゲームクライアントのビューポートですべてのゲーム要素のレンダリングを完了すると、ゲームシーンを合成し、ゲームクライアントに送信することができる。記述したように、一般的に、各ゲーム要素は、ゲーム要素に割り当てられた対応するゲーム要素リソースでレンダリングすることができる。一部の例では、ゲームシーンの合成は、サーバシステムのゲーム全般ゲームサーバリソースで実行することができる。一部の例では、ゲームシーンの合成は、サーバシステムのゲーム専用合成リソースで実行することができる。方法200のプロセスは、ブロック255で継続することができる。
判定ブロック255「他のゲーム要素?」では、ブロック230で他のゲーム要素を評価する必要がある可能性があるかどうかを決定することができる。一般的に、任意の適切な方法で他のゲーム要素を評価する必要がある可能性があるかどうかを決定することができる。一部の例では、ゲームクライアントのビューポートにある可能性があるゲーム要素のリストを維持することができ、ブロック220、225、230、235、240、245、および/または250に関係するプロセスを完了することができるため、各ゲーム要素にフラグを発行することができる。他のゲーム要素を評価する必要がある可能性がある場合、方法のプロセスは、ブロック220で継続することができる。他のゲーム要素を評価する必要がない可能性がある場合、そのプロセスは、判定ブロック260で継続することができる。
一部の例では、他のゲーム要素を評価する必要がある可能性がある場合、本明細書に記述したようなプロセスおよび手法は、ゲーム要素に対して本質的に繰り返すことができる。一部の例では、第1のゲーム要素を完了することができ、ブロック220に戻ったときに、第2のゲーム要素に対してプロセスを実行することができる。一部の例では、方法200のプロセスは、第2のゲーム要素が第1のビューポートから見える可能性があるかどうかを決定することができ、第2のゲーム要素が第1のビューポートから見える可能性がある場合、第2のゲーム要素に対応するゲーム要素リソースで、ビューポートに対して第2のゲーム要素のレンダリングを生成し、ゲームクライアントに第2のゲーム要素のレンダリングを送信する。
一部の例では、他のゲーム要素の評価は、第1のゲーム要素と同時にまたは本質的に同時に実行できるため、並列処理手法を利用することができる。一般的に、方法200は、任意の数のゲーム要素に対して同時にまたは本質的に同時に実行することができる。一部の例では、並列処理手法は、本明細書に記述したようにマップリデュースアーキテクチャを使用することができる。
判定ブロック260「他のゲームクライアント?」では、ブロック215で他のゲームクライアントのゲームクライアントビューポートを評価する必要がある可能性があるかどうかを決定することができる。一般的に、任意の適切な手法を使用して、他のゲームクライアントを評価する必要がある可能性があるかどうかを決定することができる。一部の例では、受信されるゲーム入力によって影響を受ける可能性があるゲームクライアントのリストを作成および/または維持することができ、ブロック215、220、225、230、235、240、245、および/または250に関係するプロセスを完了することができるため、各ゲームクライアントにフラグを発行することができる。他のゲームクライアントを評価する必要がある可能性がある場合、方法のプロセスは、ブロック215で継続することができる。他のゲーム要素を評価する必要がない可能性がある場合、プロセスは、ブロック210で継続することができる。
一部の例では、他のゲームクライアントを評価する必要がある可能性がある場合、本明細書に記述したようなプロセスおよび手法は、ゲームクライアントに対して本質的に繰り返すことができる。一部の例では、第1のゲームクライアントを完了することができ、ブロック225に戻ると、第2のゲームクライアントに対してプロセスを実行することができる。一部の例では、方法200のプロセスは、第2のゲームクライアントに対してゲーム世界のビューの第2のビューポートを決定することができる。第2のゲームクライアントに対して、ゲーム要素が第2のゲームクライアントのビューポートから見える可能性があるかどうかを決定することができる。一部の例では、第1のゲームクライアントに関して以前にレンダリングされたゲーム要素が、また、第2のゲームクライアントのビューポートから見える可能性があることを理解されたい。一部の例では、第1のゲームクライアントに関して実行されたゲームクライアントに依存しないレンダリングが保存されている可能性がある。そのような例では、ゲーム要素のゲームクライアントに依存するレンダリングは、第2のビューポートおよび以前に実行および/または保存されたゲームクライアントに依存しないレンダリングに基づいて、第2のゲームクライアントのビューポートから生成することができる。そのような手法により、サーバシステムでかなりの処理リソースを節約することができる。
一部の例では、他のゲームクライアントの評価は、第1のゲーム要素と同時にまたは本質的に同時に実行できるため、並列処理手法を利用することができる。記述したように、一般的に、方法200は、任意の数のビューポートに対して同時にまたは本質的に同時に実行することができる。一部の例では、並列処理手法は、本明細書に記述したようなマップリデュースアーキテクチャを使用することができる。そのような手法は、レンダリングタスクに必要なシステム内のデータ移動の量を減らすことによって、サーバシステムで本質的に効率的な処理を提供することができる。
他のゲームクライアントを評価する必要がない可能性がある場合、またはすべてのゲームクライアントが完了すると、方法200のプロセスは、ブロック210で継続することができ、ここでサーバシステムは、レンダリングタスクの要求を待つことができる。一般的に、レンダリングタスクが必要な可能性があるため、方法200のプロセスは何度も繰り返すことができる。
方法200のプロセスは、1つまたは複数のゲームクライアントに関係するゲームビューを完了させるためにループ内に入れ子にされたビューポートに1つまたは複数のゲーム要素のためのレンダリングを完了されるためにループに関係する入れ子にされたループを含むことを理解されたい。そのような入れ子にされたループは、必要なレンダリングタスクの各決定に対して完了することができる。そのようなレンダリングタスクは、必要なレンダリングまたはフレームレンダリングなどを規定することができる。一部の例では、そのような入れ子にされたループは、サーバシステムで効率を提供するため活用することができる。たとえば、ゲーム要素のレンダリングループは、時間の経過を通じてアクティブなゲーム要素またはポリゴンを予測することができる。一部の例では、ゲームクライアントに依存しないレンダリングとして人気のあるゲーム要素の多くの姿勢を保存またはキャッシュできるため、それらのレンダリングは、再び繰り返す必要がない場合がある。
さらに、図1に関して、および本明細書の他の場所に記述した並列アーキテクチャは、サーバシステムで効率化のために活用することができる。一般的に、方法200の図示するループおよび/または入れ子にされたループは、サーバシステムで本質的に並列に実行することができる。たとえば、ブロック215、220、225、230、235、240、245、250、255、および/または260は、並列処理手法を使用して、任意の数のビューポートおよび/またはゲームクライアントに対して、同時にまたは本質的に同時に実行することができる。一般的に、方法200の任意の連続する記述は、直列または並列の処理手法のいずれかを使用して本質的に実装することができる。
図3は、本開示の少なくとも一部の実施形態に従って配置された、オンラインゲーム経験を提供するための例示的な実装300を示すブロック図である。図示するように、実装300は、ゲーム要素リソース142、144、146、動作解決リソース112、114、116、ゲームサーバリソース、および/または本明細書に記述したようなゲーム世界の状態120を含むことができるシステム100を含むことができる。一般的に、システム100は、本明細書に記述したようなゲームクライアント(明瞭さのために図示せず)に通信するように結合することができる。図示するように、実装300は、システム100にビューポート入力310および/または動作入力320を受信することを含むことができる。一般的に、ビューポート入力310および/または動作入力320は、ゲームクライアントの1つまたは複数から受信することができ、特に図1に関して本明細書に記述したように任意の適切な入力でもよい。一部の例では、ビューポート入力310は、1つまたは複数のゲームクライアントのビューポート情報を含むことができ、動作入力320は、1つまたは複数のゲームクライアントのアクション情報を含むことができる。
図3に示すように、実装300は、収集/マップブロック330、340を含むことができる。一般的に、収集/マップブロック330は、ゲーム要素リソース142、144、146への情報を収集および/またはマッピングすることができ、収集/マップブロック340は、動作解決リソース112、114、116への情報を収集および/またはマッピングすることができる。一般的に、収集/マップブロック330、340は、任意の適切な要求に応じて、そのような収集および/またはマッピングを実行することができる。一部の例では、たとえば、要求は、ゲームサーバリソース130によって生成することができる。一般的に、収集/マップブロック330、340は、任意の適切な手法を使用して、情報を収集およびマッピングすることができる。一部の例では、収集/マップブロック330は、ゲーム要素リソース142、144、146にマッピングするために、ビューポート入力310を含むゲームクライアント(図示せず)から情報を収集することができる。一部の例では、収集/マップブロック340は、動作解決リソース112、114、116にマッピングするために、動作入力320を含むゲームクライアント(図示せず)から情報を収集することができる。一般的に、収集/マップブロック330、340は、システム100で任意の適切な方法で実装することができる。一部の例では、収集/マップブロック330、340は、システム100のゲームサーバリソースの一部または部分として実装することができる。一部の例では、収集/マップブロック330、340は、コンピュータ、多数のコンピュータ、サーバ、コンピュータリソース、バーチャルマシン、またはコンピュータクラスタなどとして実装することができる。
図3に示すように、実装300は、結合/送信ブロック350を含むことができる。一般的に、結合/送信ブロック350は、情報を結合および/または送信することができる。一部の例では、結合/送信ブロック350は、たとえば、ゲーム要素リソース142、144、146からゲーム要素のレンダリングなどの情報を結合し、ゲームクライアント(図示せず)に情報を送信することができる。一般的に、結合/送信ブロック350は、任意の適切な要求に応じて、そのような結合および/または送信を実行することができる。一部の例では、たとえば、要求はゲームサーバリソース130によって生成することができる。一般的に、結合/送信ブロック350は、任意の適切な手法を使用して、情報を結合および/または送信することができる。一部の例では、結合/送信ブロック350は、ゲーム要素リソース142、144、146からゲーム要素のレンダリングを収集することができる。一部の例では、結合/送信ブロック350は、ゲームクライアント(図示せず)に送信する。本明細書に記述したように、一部の例では、ゲーム要素のレンダリングは、合成されたシーンとして送信することができ、他の実施形態では、ゲーム要素のレンダリングは、別に送信することができる。一般的に、結合/送信ブロック350は、システム100で任意の適切な方法で実装することができる。一部の例では、結合/送信ブロック350は、ゲームサーバリソースの一部または部分として実装することができる。一部の例では、結合/送信ブロック350は、コンピュータ、多数のコンピュータ、サーバ、コンピュータリソース、バーチャルマシン、またはコンピュータクラスタなどとして実装することができる。
一般的に、収集/マップブロック340および結合/送信ブロック350は、動作解決およびゲーム要素のレンダリングのために並列処理を提供することができる。一部の例では、収集/マップブロック340および結合/送信ブロック350は、マップリデュース手法を使用して、並列処理を提供することができる。一部の例では、収集/マップブロック340および結合/送信ブロック350は、動作解決およびゲーム要素のレンダリングのために並列処理を個別に提供できるため、それらは同じタイミングおよび/または需要スケジュールになくてもよい。一部の例では、収集/マップブロック340および結合/送信ブロック350は、動作解決およびゲーム要素のレンダリングのために並列処理を提供できるため、それらは同じタイミングおよび/または需要スケジュールにあってもよい。
本明細書に記述したように、動作解決リソース112、114、116はそれぞれ、ゲームの動作に割り当てることができる。さらに、本明細書に記述したように、そのようなゲームの動作は、実装300に示すような並列処理手法を使用して実行することができる。一部の例では、事前に定めたとき、1つまたは複数の動作入力320の受信時、ゲームのルール、ゲームアルゴリズム、またはゲーム世界の状態に適用されているゲームからのゲーム物理学などに基づいてゲームの変更が必要な可能性があるなどの決定時などに、ゲーム世界の状態120への更新が必要な可能性があるという指示を決定することができる。一部の例では、ゲーム世界の状態120への更新が必要な可能性があるという指示に応じて、収集/マップブロック340は、ゲームサーバリソース130から多数の収集動作入力320および他の情報を収集し(ある場合)、動作解決リソース112、114、116に入力および/または他の情報をマッピングすることができる。一部の例では、動作解決リソース112、114、116は、入力および/または他の情報に基づいてゲームの動作を解決し、ゲーム世界の状態120に更新を提供することができる。そのような収集/マップ手法およびゲーム世界の状態の更新は、必要に応じて実施することができる。
本明細書に記述したように、ゲーム要素リソース142、144、146はそれぞれ、ゲーム要素に割り当てることができる。さらに、本明細書に記述したように、レンダリングタスクが必要な可能性があることをシステム100で決定することができる。レンダリングタスクが必要な可能性があるという決定は、たとえば、ゲーム世界の状態120への更新に基づいてもよい。特に図2に関して本明細書に記述したように、システム100は、ゲーム要素が見える可能性があるかどうかを決定し、必要に応じてゲームクライアントに依存しないレンダリングを実行し、必要に応じてゲームクライアントに依存するレンダリングを実行し、かつ/または必要に応じて完了されたゲームクライアントに依存するレンダリングを送信することができる。記述したように、そのような手法は、実装300に示すような並列処理を使用して実行することができる。一部の例では、レンダリングタスクが必要であると決定されたときに、収集/マップブロック330は、ゲームクライアント(図示せず)からもしくはシステム100内で行われた決定から、またはそれらの組み合わせから、多数のビューポート入力310を収集することができる。収集されたビューポート情報および/または他の情報は、ゲーム要素リソース142、144、146にマッピングすることができる。一部の例では、ゲーム要素リソース142、144、146は、本明細書に記述したように1つまたは複数のゲームクライアントにゲーム要素のレンダリングを提供することができる。一部の例では、ゲームクライアントに依存するレンダリングなど、ゲームクライアントのレンダリングは、結合/送信ブロック350で結合することができる。記述したように、結合されたレンダリングは、合成されたシーン、または個別のレンダリングとしてゲームクライアント(図示せず)に送信することができる。そのような収集/マップ手法および結合/送信手法は、必要に応じて繰り返すことができる。一部の例では、レンダリングタスクが必要な可能性があるたびに、それらを繰り返すことができる。
一般的に、図1、図2、および/または図3に関して記述したシステムアーキテクチャおよび方法は、任意の適切なサーバおよび/またはコンピューティングシステムで実装することができる。例示的なシステムについて、図5に関して、および本明細書の他の場所に記述している。一部の例では、本明細書に記述したようなオンラインゲームシステム、データセンター、もしくデータクラスタ、または他のシステムは、複数の物理的なサイトまたは場所を通じて実装することができる。一部の例では、オンラインゲームシステムは、複数のゲームにオンラインゲーム経験を提供するように構成することができる。
図4は、本開示の少なくとも一部の実施形態に従って配置された、例示的なコンピュータプログラム製品400を示している。コンピュータプログラム製品400は、実行されたときに、本明細書に記述したプロセスおよび方法によるオンラインゲーム経験を機械へ提供させる複数の命令を格納した機械可読の非一時的な媒体を含むことができる。コンピュータプログラム製品400は、信号伝達媒体402を含むことができる。信号伝達媒体402は、1つまたは複数のプロセッサによって実行されたときに、コンピューティングデバイスが、本明細書に記述した機能を提供できるように効果的にできる、1つまたは複数の機械可読の命令404を含むことができる。様々な例において、機械可読の命令の一部またはすべては、本明細書に記述したデバイスによって使用することができる。
一部の実装では、信号伝達媒体402は、ハードディスクドライブ、コンパクトディスク(CD)、デジタルバーサタイルディスク(DVD)、デジタルテープ、メモリなど、コンピュータ可読媒体406を包含することができるが、それらに限定されない。一部の実装では、信号伝達媒体402は、メモリ、読み取り/書き込み(R/W)CD、R/W DVDなど、記録可能な媒体408を包含することができるが、それらに限定されない。一部の実装では、信号伝達媒体402は、デジタルおよび/またはアナログの通信媒体(たとえば、光ファイバーケーブル、導波路、有線通信リンク、ワイヤレス通信リンクなど)など、通信媒体410を包含することができるが、それらに限定されない。一部の例では、信号伝達媒体402は、機械可読の非一時的な媒体を包含することができる。
図5は、本開示の少なくとも一部の実施形態に従って配置された、例示的なコンピューティングデバイス500を示すブロック図である。様々な例において、コンピューティングデバイス500は、本明細書に記述したようなオンラインゲーム経験を提供するように構成することができる。様々な例において、コンピューティングデバイス500は、本明細書に記述するようなサーバシステムとしてオンラインゲーム経験を提供するように構成することができる。一例である基本構成501では、コンピューティングデバイス500は、1つまたは複数のプロセッサ510およびシステムメモリ520を含むことができる。メモリバス530は、プロセッサ510とシステムメモリ520との間で通信するために使用することができる。
望まれる構成に依存して、プロセッサ510は、マイクロプロセッサ(μP)、マイクロコントローラ(μC)、デジタル信号プロセッサ(DSP)、またはそれらの任意の組み合わせを含む任意のタイプでもよいが、これらに限定されない。プロセッサ510は、レベル1キャッシュ511およびレベル2キャッシュ512、プロセッサコア513、およびレジスタ514など、1つまたは複数レベルのキャッシュを含むことができる。プロセッサコア513は、論理演算ユニット(ALU)、浮動小数点ユニット(FPU)、デジタル信号処理コア(DSPコア)、またはそれらの任意の組み合わせを含むことができる。メモリコントローラ515は、また、プロセッサ510と共に使用することができるか、または一部の実装では、メモリコントローラ515は、プロセッサ510の内部部品でもよい。
望まれる構成に依存して、システムメモリ520は、揮発性メモリ(RAMなど)、不揮発性メモリ(ROM、フラッシュメモリなど)、またはそれらの任意の組み合わせを含む任意のタイプでもよいが、これらに限定されない。システムメモリ520は、オペレーティングシステム521、1つまたは複数のアプリケーション522、およびプログラムデータ524を含むことができる。アプリケーション522は、本明細書に記述した機能ブロック、動作、および/または操作を含む、本明細書に記述した機能、動作、および/または操作を実行するために配置できるオンラインゲームアプリケーション523を含むことができる。プログラムデータ524は、オンラインゲームアプリケーション523で使用するためにオンラインゲームデータ525を含むことができる。一部の例示実施形態では、アプリケーション522は、オペレーティングシステム521でプログラムデータ524を用いて動作するように配置することができる。この記述した基本構成は、破線501内のそれらのコンポーネントによって図5に示している。
コンピューティングデバイス500は、基本構成501と任意の必要なデバイスおよびインターフェースとの間で通信を促進するために、追加的な特徴または機能、および追加的なインターフェースを備えることができる。たとえば、バス/インターフェースコントローラ540は、記憶装置インターフェースバス541を介して、基本構成501と1つまたは複数のデータ記憶装置550との間の通信を促進するために使用することができる。データ記憶装置550は、取外し式記憶装置551、非取外し式記憶装置552、またはそれらの組み合わせでもよい。取外し式記憶装置および非取外し式記憶装置の例を2、3挙げると、フレキシブルディスクドライブおよびハードディスクドライブ(HDD)などの磁気ディスク装置、コンパクトディスク(CD)ドライブまたはデジタルバーサタイルディスク(DVD)ドライブなどの光ディスクドライブ、ソリッドステートドライブ(SSD)、およびテープドライブなどが含まれる。例示的なコンピュータ記憶媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなど、情報を格納するための任意の方法または技術で実装された揮発性および不揮発性、取外し式および非取外し式の媒体を含むことができる。
システムメモリ520、取外し式ストレージ551、および非取外し式ストレージ552は、すべてコンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ、もしくは他のメモリ技術、CD−ROM、デジタルバーサタイルディスク(DVD)、もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置、または望まれる情報を格納するために使用でき、コンピューティングデバイス500によってアクセスできる他の媒体を含むがそれらに限定されない。任意のそのようなコンピュータ記憶媒体は、デバイス500の一部でもよい。
コンピューティングデバイス500は、また、バス/インターフェースコントローラ540を介して、様々なインターフェースデバイス(たとえば出力インターフェース、周辺インターフェース、および通信インターフェース)から基本構成501への通信を促進するためのインターフェースバス542を含むことができる。例示的な出力インターフェース560は、グラフィック処理ユニット561および音声処理ユニット562を含むことができ、これは1つまたは複数のA/Vポート563を介してディスプレイまたはスピーカなど、様々な外部デバイスと通信するように構成することができる。例示的な周辺インターフェース570は、シリアルインターフェースコントローラ571またはパラレルインターフェースコントローラ572を含むことができ、これは1つまたは複数のI/Oポート573を介して入力デバイス(たとえばキーボード、マウス、ペン、音声入力機器、タッチ入力装置など)または他の周辺機器(たとえばプリンタ、スキャナなど)など外部デバイスと通信するように構成することができる。例示的な通信インターフェース580は、ネットワークコントローラ581を含み、これは1つまたは複数の通信ポート582を介してネットワーク通信を通じて1つまたは複数のその他のコンピューティングデバイス583との通信を促進するように配置することができる。通信接続は、通信媒体の一例である。通信メディアは、典型的には、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または搬送波もしくは他の移送機構など、変調されたデータ信号の他のデータによって具体化することができ、任意の情報配送媒体を含むことができる。「変調されたデータ信号」は、信号の情報を符号化する方法で設定または変更された、1つまたは複数のその特性を持つ信号でもよい。限定を目的とせずに例を挙げると、通信メディアは、有線ネットワークまたは直接的な有線接続などの有線媒体、ならびに音響、無線周波数(RF)、赤外線(IR)、および他の無線媒体などの無線媒体を含むことができる。本明細書に使用するコンピュータ可読媒体という用語は、記憶媒体および通信媒体の両方を含むことができる。
コンピューティングデバイス500は、セル式電話、モバイル電話、タブレットデバイス、ラップトップ型コンピュータ、パーソナルデータアシスタント(PDA)、パーソナルメディアプレイヤーデバイス、ワイヤレスウェブウォッチデバイス、個人用ヘッドセットデバイス、アプリケーション固有のデバイス、または上記の機能のいずれかを含むハイブリッドデバイスなど、スモールフォームファクタのポータブル(またはモバイル)電子デバイスの一部として実装することができる。コンピューティングデバイス500は、また、ラップトップ型コンピュータおよび非ラップトップ型コンピュータの構成の両方を含むパーソナルコンピュータとして実装することができる。さらに、コンピューティングデバイス500は、ワイヤレス基地局または他のワイヤレスのシステムもしくはデバイスの一部として実装することができる。
前述の詳細な記述の一部は、コンピュータメモリなど、コンピューティングシステムのメモリ内に格納されたデータビットまたは2値デジタル信号において操作のアルゴリズムまたは記号表現に関して提示される。これらのアルゴリズム的な記述または表現は、他の当業者に仕事の本質を伝達するために、データ処理分野における当業者によって使用される手法の例である。本明細書において、および一般的に、アルゴリズムは、望ましい結果につながる首尾一貫した連続する操作または類似の処理であると考えられる。この状況において、操作または処理は、物理量の物理的な操作を含む。典型的には、必須ではないが、そのような量は、格納、転送、結合、比較、あるいは操作することができる電気的または磁気的な信号の形をとることができる。主に一般的に使用する理由から、そのような信号は、ビット、データ、値、要素、記号、キャラクタ、条件、数、数字などと呼ぶことが便利なことがあると分かっている。しかし、これらおよび同様の用語はすべて、適切な物理量に関連しており、便利なラベルにすぎないことを理解されるだろう。特に明記しない限り、以下の説明から明白なように、本明細書の全体にわたって「処理(processing)」、「コンピューティング(computing)」、「計算(calculating)」、「決定(determining)」などの用語を利用した議論は、メモリ、レジスタもしくは他の情報記憶装置、送信デバイス、またはコンピューティングデバイスのディスプレイデバイス内で物理電子的また磁気的な量として表されるデータを操作または変形するコンピューティングデバイスの動作またはプロセスを示すものであることを理解されたい。
前述の詳細な説明では、ブロック図、フローチャート、および/または例の使用によって、装置および/またはプロセスの様々な実施形態を説明してきた。そのようなブロック図、フローチャート、および/または例が1つまたは複数の機能および/または動作を含む限りにおいて、そのようなブロック図、フローチャート、または例の中のそれぞれの機能および/または動作は、広範囲のハードウェア、ソフトウェア、ファームウェア、または実質上それらのすべての組み合わせにより、個別におよび/または集合的に実装可能であることが、当業者には理解されるであろう。ある実施形態では、本明細書に記載された主題のいくつかの部分は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタルシグナルプロセッサ(DSP)、または他の集積化方式によって実装することができる。しかし、本明細書で開示された実施形態のいくつかの態様が、全体においてまたは一部において、1つまたは複数のコンピュータ上で動作する1つまたは複数のコンピュータプログラムとして(たとえば、1つまたは複数のコンピュータシステム上で動作する1つまたは複数のプログラムとして)、1つまたは複数のプロセッサ上で動作する1つまたは複数のプログラムとして(たとえば、1つまたは複数のマイクロプロセッサ上で動作する1つまたは複数のプログラムとして)、ファームウェアとして、あるいは実質上それらの任意の組み合わせとして、等価に集積回路に実装することができることを、当業者は認識するであろうし、電気回路の設計ならびに/またはソフトウェアおよび/もしくはファームウェアのコーディングが、本開示に照らして十分当業者の技能の範囲内であることを、当業者は認識するであろう。さらに、本明細書に記載された主題のメカニズムを様々な形式のプログラム製品として配布することができることを、当業者は理解するであろうし、本明細書に記載された主題の例示的な実施形態が、実際に配布を実行するために使用される信号伝達媒体の特定のタイプにかかわらず適用されることを、当業者は理解するであろう。信号伝達媒体の例には、フレキシブルディスク、ハードディスクドライブ(HDD)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、デジタルテープ、コンピュータメモリ、などの記録可能なタイプの媒体、ならびに、デジタル通信媒体および/またはアナログ通信媒体(たとえば、光ファイバケーブル、導波管、有線通信リンク、無線通信リンクなど)の通信タイプの媒体が含まれるが、それらには限定されない。
本明細書に記載された主題は、様々なコンポーネントをしばしば例示しており、これらのコンポーネントは、他の様々なコンポーネントに包含されるか、または他の様々なコンポーネントに接続される。そのように図示されたアーキテクチャは、単に例にすぎず、実際には、同じ機能を実現する多くの他のアーキテクチャが実装可能であることが理解されよう。概念的な意味で、同じ機能を実現するコンポーネントの任意の構成は、所望の機能が実現されるように効果的に「関連付け」される。したがって、特定の機能を実現するために組み合わされた、本明細書における任意の2つのコンポーネントは、アーキテクチャまたは中間のコンポーネントにかかわらず、所望の機能が実現されるように、お互いに「関連付け」されていると見ることができる。同様に、そのように関連付けされた任意の2つのコンポーネントは、所望の機能を実現するために、互いに「動作可能に接続」または「動作可能に結合」されていると見なすこともでき、そのように関連付け可能な任意の2つのコンポーネントは、所望の機能を実現するために、互いに「動作可能に結合できる」と見なすこともできる。動作可能に結合できる場合の具体例には、物理的にかみ合わせ可能な、および/もしくは物理的に相互作用するコンポーネント、ならびに/またはワイヤレスに相互作用可能な、および/もしくはワイヤレスに相互作用するコンポーネント、ならびに/または論理的に相互作用する、および/もしくは論理的に相互作用可能なコンポーネントが含まれるが、それらに限定されない。
本明細書における実質的にすべての複数形および/または単数形の用語の使用に対して、当業者は、状況および/または用途に適切なように、複数形から単数形に、および/または単数形から複数形に変換することができる。様々な単数形/複数形の置き換えは、理解しやすいように、本明細書で明確に説明することができる。
通常、本明細書において、特に添付の特許請求の範囲(たとえば、添付の特許請求の範囲の本体部)において使用される用語は、全体を通じて「オープンな(open)」用語として意図されていることが、当業者には理解されよう(たとえば、用語「含む(including)」は、「含むがそれに限定されない(including but not limited to)」と解釈されるべきであり、用語「有する(having)」は、「少なくとも有する(having at least)」と解釈されるべきであり、用語「含む(includes)」は、「含むがそれに限定されない(includes but is not limited to)」と解釈されるべきである、など)。導入される請求項で具体的な数の記載が意図される場合、そのような意図は、当該請求項において明示的に記載されることになり、そのような記載がない場合、そのような意図は存在しないことが、当業者にはさらに理解されよう。たとえば、理解の一助として、添付の特許請求の範囲は、導入句「少なくとも1つの(at least one)」および「1つまたは複数の(one or more)」を使用して請求項の記載を導くことを含む場合がある。しかし、そのような句の使用は、同一の請求項が、導入句「1つまたは複数の」または「少なくとも1つの」および「a」または「an」などの不定冠詞を含む場合であっても、不定冠詞「a」または「an」による請求項の記載の導入が、そのように導入される請求項の記載を含む任意の特定の請求項を、単に1つのそのような記載を含む発明に限定する、ということを示唆していると解釈されるべきではない(たとえば、「a」および/または「an」は、通常、「少なくとも1つの」または「1つまたは複数の」を意味すると解釈されるべきである)。同じことが、請求項の記載を導入するのに使用される定冠詞の使用にも当てはまる。また、導入される請求項の記載で具体的な数が明示的に記載されている場合でも、そのような記載は、通常、少なくとも記載された数を意味すると解釈されるべきであることが、当業者には理解されよう(たとえば、他の修飾語なしでの「2つの記載(two recitations)」の単なる記載は、通常、少なくとも2つの記載、または2つ以上の記載を意味する)。さらに、「A、BおよびC、などの少なくとも1つ」に類似の慣例表現が使用されている事例では、通常、そのような構文は、当業者がその慣例表現を理解するであろう意味で意図されている(たとえば、「A、B、およびCの少なくとも1つを有するシステム」は、Aのみ、Bのみ、Cのみ、AおよびBを共に、AおよびCを共に、BおよびCを共に、ならびに/またはA、B、およびCを共に、などを有するシステムを含むが、それに限定されない)。「A、B、またはC、などの少なくとも1つ」に類似の慣例表現が使用されている事例では、通常、そのような構文は、当業者がその慣例表現を理解するであろう意味で意図されている(たとえば、「A、B、またはCの少なくとも1つを有するシステム」は、Aのみ、Bのみ、Cのみ、AおよびBを共に、AおよびCを共に、BおよびCを共に、ならびに/またはA、B、およびCを共に、などを有するシステムを含むが、それに限定されない)。2つ以上の代替用語を提示する事実上いかなる離接する語および/または句も、明細書、特許請求の範囲、または図面のどこにあっても、当該用語の一方(one of the terms)、当該用語のいずれか(either of the terms)、または両方の用語(both terms)を含む可能性を企図すると理解されるべきであることが、当業者にはさらに理解されよう。たとえば、句「AまたはB」は、「A」または「B」あるいは「AおよびB」の可能性を含むことが理解されよう。
様々な方法およびシステムを使用して、特定の例示的な手法について本明細書に記述および図示したが、請求された主題から逸脱することなく、様々な他の変更を行えること、および等価物で代用できることを当業者は理解されるだろう。さらに、本明細書に記述した主要な概念から逸脱することなく、請求された主題の教示に特定の状況を適応させるために、多数の変更を行うことができる。したがって、請求された主題は、開示された特定の例に限定されるものではなく、そのような請求された主題は、また、添付した請求項の範囲内にあるすべての実装、およびその等価物を含むことが意図される。