(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
ゲームにおけるいかなるポイントでも進行中のゲームステートをセーブし、その後のいずれかの時にゲームの同じポイントでゲームを再開するためのシステム及び方法に関するいくつかの例示の実施形態を次に記載する。本発明は、本明細書に記載される特有の詳細の一部または全てがなくても実施され得ることは当業者に明らかであろう。
【0017】
クラウドゲーミングは、極めて人気のあるゲーミング環境である。クラウドゲーミングによって単独プレイヤー及び複数プレイヤーのゲームプレイが可能になり、またユーザが、リッチインタラクティブコンテンツを含むゲームならびに実体験のように感じる三次元(3D)グラフィックなどの複雑でコンテンツリッチなゲームをプレイすることも可能になる。そのようなコンテンツリッチなゲームは、専用プロセッサ、コプロセッサ及びグラフィックプロセッサを有し、複雑で高性能であり、多くの場合極めて特化されたコンピュータを必要とする。クラウドゲーミングはまた、性能の低下を回避するために待ち時間を短縮し、待ち時間を監視するように十分に設計されたサーバプロセスも必要とする。付け足される利点として、クラウドゲーミングによって、ユーザがさらにずっと簡素なクライアントコンピュータにおいてコンテンツリッチなゲームをプレイすることが可能になる。一例として、ユーザは、ローカルネットワーク及び/またはインターネットを介してクラウドゲーミングシステムと通信することが可能なタブレット、スマートフォンまたは他の手持ち式コンピューティングデバイスを利用してクラウドゲーミングシステム上でゲームをプレイすることができる。
【0018】
クラウドゲーミング環境において、未来の何らかの不明確な時点でゲームに戻るために、特定のゲームセッションをユーザのためにオープンな状態に単に維持し続けることは、実用的なオプションではない。特定のゲームセッションをユーザに対してオープンな状態に無期限に維持することは、クラウドゲーミングプロバイダにとってコストがかさむことになる。このようなコストには、クラウドゲームコンソールによる電力の使用を含み、別のユーザが同じゲームコンソールを利用することを妨げることになる。一実施形態においてクラウドゲーミングシステムは、ゲームセッション毎にユーザに専用のゲームコンソール(例えばクラウドゲーミングサーバによって管理される)を割り当てることができる。これにより、以前のユーザがゲームコンソールを使用するように割り当てられなければ、同一のゲームコンソールを第2のユーザに割り当てることもできる。ある期間にわたって複数のユーザが1つのゲームコンソールを共有するが、彼らは時間内の同一ポイントにおいて同一のゲームコンソールを使用することはない。
【0019】
開示されるクラウドゲーミングステートセーブ、再開及び転送技術により、ユーザが選択するゲームプレイにおいていつでも自分のゲームプレイセッションを中断することがユーザにとって可能になる。そのシーンの後で、ユーザのゲームステートが記憶され、その後ユーザのクラウドゲームコンソールが別のユーザに対して解放される。クラウドゲーミングステートセーブ、再開及び転送技術は、ユーザの割り当てられたゲームコンソールの使用をゲーミングサーバが別のユーザに転送することができるので、エネルギーを節約する。
【0020】
ユーザが自分のゲームを再開する準備が整ったとき、ユーザのセーブされたゲームステートが取り出され、同一のまたは異なるクラウドゲームコンソールにロードされる。ユーザはその後、自分のゲームプレイを自分が中断したのと同じポイントで再開することができる。ユーザは、同一または異なるクライアントデバイスを利用して自分のゲームステートを再開することができる。ユーザは、同一または異なるクラウドゲーミングデータセンターを利用して自分のゲームステートを再開することができる。ユーザは、世界の地理的に様々な地域から自分のゲームステートを再開することができる。
【0021】
開示されるクラウドゲーミングステートセーブ、再開及び転送技術は、他の用途も同様に有する。例えば、ユーザのゲーミングセッションが他のユーザの間で共有されることで、他のユーザが同一のゲーミングセッションを体験することが可能になる、または場合によって他のユーザ(別の離れた場所におり、クラウドゲーミングサービスに接続される人)を助けることも可能になる。一例として、第1のユーザがゲームプレイを中断し、ゲームステートデータを第2のユーザに渡し、(例えば共有する)、第2のユーザが第1のユーザにとって難しい戦闘を完了し、その後ゲームを再び中断し、新たなゲームステートデータを第1のユーザに渡して戻す。1つの実施形態では、ユーザは、コントローラ上の共有ボタンまたはオプションを選択する、あるいは他のユーザが接続してセーブしたゲームステートを共有することができる。開示されるクラウドゲーミングステートセーブ、再開及び転送技術は、多くの他の用途も同様に有する。ユーザがゲームステートを共有する場合、共有物を受け取ったユーザが、クラウドゲーミングシステムによって別のゲームコンソール(すなわち共有するユーザのゲームコンソールとは異なる)に割り当てられる場合ある。各々の共有の前に、その状況がセーブされ、その状況が開始される際、ユーザがその時々でどのゲームコンソールに割り当てられるかに応じて、それが同一のゲームコンソール上で再開される場合、または別のゲームコンソール上で再開される場合がある。
【0022】
図1は、本開示の実施形態を実施するための簡素化されたクラウドゲーミングシステム100である。クラウドゲーミングシステム100は、クラウドコントローラ130と、複数のゲームコンソール112A−nと、1つまたは複数のゲームコンソールマネージャ113とストレージサーバ110とを含む。クラウドコントローラ130、複数のゲームコンソール112A−n、1つまたは複数のゲームコンソールマネージャ113及びストレージサーバ110は、1つまたは複数のデータセンター111、115、117に配置することができる。クラウドコントローラ130、複数のゲームコンソール112A−n及びストレージサーバ110は、ローカルエリアネットワーク104A、104B、104C及び/またはインターネット102によって一緒に結合されている。複数のゲームコンソール112A−n及びゲームコンソールマネージャ113は、1つのデータセンター115内に共同に配置される、または2つ以上のデータセンターの間で分散される場合もある。
【0023】
1つまたは複数のゲームコンソールマネージャ113が、ゲームコンソール112A−nの各々のラック内に含まれてよい。ゲームコンソールマネージャ113は、1つまたは複数のハードウェア及び/またはソフトウェアアーキテクチャに応じて1つまたは複数のゲームコンソール112A−nを管理する。ゲームコンソールマネージャ113は、ネットワーク接続115及び/または任意選択の汎用入出力、ユニバーサルシリアルバスまたはゲームコンソールに対する電力を活性化するための等価な制御接続を利用してゲームコンソール112A−nに物理的に接続される。ゲームコンソールマネージャ113は任意選択で、割り当てられたゲームコンソールとユーザのクライアントデバイスの間にストリーミングセッションを設定し、これを管理するといった追加の役割を含むことができる。
【0024】
ローカルストレージサーバ116が任意選択で1つまたは複数のゲームコンソール112A−nと共に同一のデータセンター115内に共同に配置される場合もある。ローカルストレージサーバ116は、複数のゲームコンソール112A−n及び/またはクラウドコントローラ130によって利用される、またはそこから受信したデータ116Aを保管することができる。データセンター111、115、117は、地理的に隔てられる場合がある。一例として第1のデータセンター111と第3のデータセンター117をカリフォルニア州、ロスアンジェルスに配置することができ、第2のデータセンター115を、スウェーデン、ストックホルムに配置することもできる。
【0025】
クラウドコントローラ130及び/またはゲームコンソールマネージャ113は、複数のゲーム及び複数のゲームコンソール112A−nの1つまたは複数に対してダウンロードされ得る他のアプリケーションを保管するためにゲームデータベース132を含む。クラウドコントローラ130はまた認証マネージャ135も含む。認証マネージャ135は、第1のユーザが正当なアカウント、及びクラウドゲーミングシステム100に対して認証されたアクセス権を有するかを判定する。第1のユーザのアカウント情報はユーザアカウントデータベース133に含まれる。1つまたは複数の実施形態では、クラウドコントローラ130はまたステートマネージャ134を含むこともできる。ステートマネージャ134はまた、ゲームコンソール112A−nの各々に含まれるステートマネージャクライアント144と共に機能して、開始される際、各々のゲームコンソールに関するゲームステートデータをキャプチャする。
【0026】
ストレージサーバ110は、クラウドゲーミングシステム100に関するストレージ施設を提供する。ストレージサーバ110は、クラウドゲーミングシステム100によって必要とされ得るように、ユーザのステートデータ114’などのデータを保管するための1つまたは複数のストレージデバイス110A、110Bを含む。1つまたは複数のストレージデバイス110A、110Bは、任意の好適な記憶媒体であってよく、例えばハードディスクドライブ、ソリッドステートドライブまたは光学ドライブなどであって良い。
【0027】
ゲームコンソール112A−nの各々は、ハードウェアレイヤ143と、ハードウェアレイヤの上に重なるオペレーティングシステムレイヤ142とを含む。アプリケーションレイヤ141がオペレーティングシステムレイヤ142の上に重なる。アプリケーションレイヤ141は、ゲームコンソール112A上で稼働するゲーム及び他のアプリケーションを含む。ハードウェアレイヤは、メインプロセッサ145、コプロセッサ146、グラフィックプロセッサ(GPU)147、メモリシステム148、入出力システム149、ネットワークインターフェースカード150、ならびにゲームコンソール112Aの作動に必要とされ得る多くの他の物理的周辺機器及び仮想周辺機器を含む。メインプロセッサ145、コプロセッサ146、グラフィックプロセッサ(GPU)147、メモリシステム148、入出力システム149、ネットワークインターフェースカード150、他の周辺機器は1つまたは複数のデータバス151によって一緒に結合される。
【0028】
少なくとも1つの実施形態では、オペレーションシステムレイヤ142は、ステートマネージャクライアント144を含む。他の実施形態では、ステートマネージャクライアント144は、アプリケーションレイヤ141内の1つまたは複数のアプリケーションの中に含まれる場合もある。ステートマネージャクライアント144はまた、オペレーションシステムレイヤ142及びアプリケーションレイヤ141の両方に常駐する部分を有するように実装される場合もある。ステートマネージャクライアント144は、開始される際、ゲームコンソール112Aのゲームステートデータ114をキャプチャすることができる。キャプチャされたゲームステートデータ114は、ローカルストレージサーバ116及び/またはストレージサーバ110内にゲームステートデータ114’として保管することができる。保管されたゲームステートデータ114’の保管場所は、ユーザアカウントデータベース133内の第1のユーザアカウント情報に加えるためにクラウドコントローラに提供される。
【0029】
クライアントデバイス122A、122Bは、インターネット102またはローカルネットワーク104A−Cを介してクラウドゲーミングシステム100に対するアクセス権を与える。クライアントデバイス122A、122Bは、インターネット102またはローカルネットワーク104A−Cにアクセスすることが可能な任意の好適なプラットフォームであって良い。一例として、クライアントデバイス122A、122Bは、パーソナルコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、手持ち式ゲーミングデバイス、手持ち式コンピューティングデバイス、例えばタブレットコンピュータまたはスマートフォンなど、あるいは任意の他のコンピューティングプラットフォームであって良い。第1のクライアントコンピューティングデバイス122A及び第2のクライアントコンピューティングデバイス122Bは、複数の異なる地理的に離れた場所で使用することができる。一例として、第1のクライアントコンピューティングデバイス122Aは、自分の家で、オフィスで、及び旅行中でも第1のユーザによってインターネット102及びクラウドゲーミングシステム100にアクセスするのに使用されるタブレットコンピュータであって良い。同様に第2のクライアントコンピューティングデバイス122Bは、自分の家で、オフィスでまたはインターネットアクセス権を有する他の場所でインターネット102及びクラウドゲーミングシステム100にアクセスすることが可能なノートブックコンピュータであって良い。
【0030】
一実施形態では、第1のユーザは、第1のクライアントコンピューティングデバイス122Aを使用してインターネット102を介してクラウドコントローラ130にアクセスすることができる。認証マネージャ135が、第1のユーザを認証し、第1のユーザに許されたアクセスレベルを判定する。クラウドコントローラ130及び/またはゲームコンソールマネージャ113が、第1のユーザを現在のクラウドゲーミングセッションに関してゲームコンソールA 112Aに割り当て、ゲーム及びアプリケーションデータベース132からの認証されたアプリケーション及びゲームを含む認証されたアクセスレベルを提供する。クラウドコントローラ130及び/またはゲームコンソールマネージャ113はまた、ゲーム及びアプリケーションデータベース132から割り当てられたゲームコンソールA 112Aに認証済みのゲーム及び他のアプリケーションを転送することもできる。一実施形態では、割り当てられたゲームコンソールA 112Aは、ゲーム及びアプリケーションデータベース132にアクセスして認証済みのゲーム及び他のアプリケーションを割り当てられたゲームコンソールAに転送することができる。
【0031】
開示されるクラウドステートセーブ、再開及び転送技術はとりわけ、クラウドゲーミング目的に有益であるが、その理由は、ゲームステートを中断し復元することに伴う大量のデータが存在するためである。クラウドゲーミングシステム100は、開示されるクラウドゲーミングステートセーブ、再開及び転送技術に十分に適するが、その理由は、クラウドゲーミングシステムが、高速ネットワーク104A−Cを利用して世界中に接続された何千ものゲーミングコンソール112A−nを含むためである。
【0032】
クラウドゲーミングステートセーブ、再開及び転送技術及び方法の多数の実施形態が本明細書に開示される。1つの手法は、フルハードウェアステートデータまたはフルアプリケーションステートデータの少なくとも一方をゲームコンソール間で転送することである。以下は、クラウドゲーミングステートセーブ、再開及び転送機構がどのように機能することができるかの記述である。ハードウェアステートデータ及びアプリケーションステートデータのコピーをどのように作成するかの詳細な記述も提供される。
【0033】
クラウドゲーミングステートセーブ、再開及び転送機構は、1つのゲームコンソールから別のゲームコンソールへのゲームステートデータの転送を可能にする。
図2Aは、本開示の実施形態を実施するために、クラウドゲーミングステートセーブ、再開及び転送機構において実行される方法工程200の簡素化された概要を示すフローチャートである。工程205において、第1のユーザが、クラウドゲーミングシステム100におけるゲームコンソール112A上でゲームをプレイしている。工程210において、第1のユーザがゲームにおける選択された中断ポイントでゲームを中断することを選択する。選択された中断ポイントは、事前定義されたゲームの中断ポイント以外のゲームにおけるいかなるポイントでもよい。クラウドゲーミングシステム100はまた、1つまたは複数のクラウドゲーミングシステム管理の理由によりユーザのゲームを自動的に中断する場合もある。一例として、クラウドコントローラ130が、所定の活動しない時間制限を超える時間にわたって第1のユーザからの活動を検出しない場合、またはクラウドコントローラが、第1のユーザのクライアントデバイス112Aからのネットワークの切り離しを検出した場合などである。
【0034】
一実施形態において、クラウドコントローラは、利用可能なゲーム及び利用可能なゲームサーバを認知しているが、容量の理由により、クライアントデバイス112A−Bとの継続的なインタラクションの管理は、典型的には、割り当てられたゲームコンソールおよび/またはゲームコンソールマネージャにおけるストリーミングソフトウェアに依存している。ゲームコンソールマネージャ、割り当てられたゲームコンソールまたはクライアントデバイスは、アクティブではないことを判定することができる。ユーザがアクティブでないことは、例えば所定の時間にわたってボタンが押されないことなどによってクライアントデバイスによって判定することができる。ゲームコンソールマネージャ及び/または割り当てられたゲームコンソールも同様にユーザがアクティブではないことを識別することができる。一例として、クライアントデバイスが所定の時間にわたるユーザがアクティブではないことを検出した場合、クライアントデバイスは、割り当てられたゲームコンソール及び/またはゲームコンソールマネージャに切断メッセージを送信する。この切断メッセージはまた、例えばユーザが全く活動していないなどの切断メッセージに関する理由を含む場合もある。割り当てられたゲームコンソール及び/またはゲームコンソールマネージャがこの切断メッセージを受信すると、ゲームを停止する、ユーザデータを保管する、ゲームステートデータをキャプチャするなどのストリーミングセッションの残りの部分を停止するようなプロセスが開始される。一実施形態では、切断メッセージは割り当てられたゲームコンソール及び/またはゲームコンソールマネージャにおけるストリーミングソフトウェアによって受信され、このストリーミングソフトウェアが、ゲームコンソールマネージャに対して停止メッセージを発行し、ゲームコンソールマネージャが停止プロセスを管理する。
【0035】
ユーザの切断は最終的に、そのアーキテクチャに応じてクラウドコントローラに通知される場合もある。一実施形態において、クラウドコントローラは、ユーザが現在ストリーミング中であるかどうかを監視または追跡することができる(例えば課金目的で)、あるいはユーザが2つ以上の場所から自分のセーブしたデータにアクセスする場合、データの破損が生じる可能性があるため、ユーザが何度もストリーミングするのを阻止することもできる。
【0036】
第1のユーザのゲームステートデータが工程215においてキャプチャされ保管される。第1のユーザのゲームステートデータがキャプチャされ保管された後、ゲームコンソール112Aを第2のユーザのために解放することができる。ゲームステートデータは、ハードウェアステートデータ及び/またはアプリケーションステートデータを含む。ゲームステートデータはまた、ゲームの選択した中断ポイントでゲームを再構築するのに必要であり得る履歴依存データ及びプロセスデータも含んでいる。履歴依存データ及びプロセスデータは、選択された中断ポイントで再開することが可能な実行可能なゲーミングアプリケーションを形成するのに必要な一時的メタデータ及びユーザインタラクティブなヒストリカルメタデータを含むデータ構造の形態であって良い。一時的メタデータ及びユーザインタラクティブヒストリカルメタデータの例には、カラーデータ、テクスチャデータ、頂点データ、フラグメンテーションデータ、アートアセット、ドローイングデータ、シェーディングデータ、ライティングデータ及びその他などのグラフィックデータが含まれる。一時的メタデータ及びユーザインタラクティブなヒストリカルメタデータはまた、種々のバッファ及びキャッシュのコンテンツ及びステートならびにゲームのオペレーションを連携させるのに必要な種々のカウンター及びタイマーの状況も含むことができる。ゲームステートデータをキャプチャすることはまた、第1のユーザの選択した中断ポイントでゲームにおけるそのシーンの現在の画像を取り込むことを含むこともできる。
【0037】
しばらくしてから、工程220において、第1のユーザが中断したゲームを再開することを選び、保管した第1のユーザのゲームステートデータがキャプチャされ、割り当てられたゲームコンソールにロードされ、行程225において、ゲームの中断ポイントでゲームが再開される。ユーザは、最初にユーザがそのゲームと共に元々使用していたものと同一のゲームコンソール112Aにおいてゲームを再開することができる。あるいは第1のユーザは、別のゲームコンソール112Bにおいてゲームを再開することもできる。第1のユーザはまた、第2のユーザが第1のユーザのゲームステートデータにアクセスすることを認証することで、第2のユーザが第1のユーザの中断したゲームを再開することを可能にすることもできる。ゲームの再開には、選択したゲームコンソール上にゲームステートデータを適用することが含まれる。ゲームステートデータは、選択された中断ポイントで再開することが可能な実行可能なゲーミングアプリケーションを形成するのに必要な一時的メタデータ及びユーザインタラクティブなヒストリカルメタデータを含むデータ構造を含むことができる。
【0038】
図2Bは、本開示の実施形態を実施するための、ユーザのクラウドゲーミングシステムダッシュボード250の簡素化された図式のユーザインターフェースである。クラウドゲーミングシステムダッシュボード250は、新たなゲームを選択するためのオプション252と、ゲーミングトーナメントにおけるユーザの現在の順位を調査するためのオプション254と、ユーザのゲーミング履歴を見直すためのオプション256と、ユーザの友達を更新するためのオプション258と、他のオプション260及びユーザアカウントを更新するためのオプション262とを含む。オプションの各々は、選択したオプションを実行するためにユーザを対応するスクリーンに移動する。
【0039】
クラウドゲーミングシステムダッシュボード250はまた、中断したゲームメニュー270も含むことができる。中断したゲームメニュー270は、中断したゲーム及び中断したゲームを再開または削除するためのオプションのリストを含む。ユーザは、2つ以上の中断したゲームを有することができ、いつでも及び自分が選んだ何らかの理由のためにゲームを中断することができることに留意されたい。表示されるメニューオプションを選択するためのポインター280もクラウドゲーミングシステムダッシュボード250スクリーンに示される。
【0040】
クラウドゲーミングステートセーブ、再開及び転送は、キャプチャを提供し、一つのゲームコンソールから別のゲームコンソールへのユーザのゲームステートの転送を可能にする。ユーザのゲームステートは、ユーザがゲームを中断したときのユーザのゲームコンソールのハードウェアステートデータ及び/またはアプリケーションステートデータの一方または両方を含むことができる。
【0041】
図2Cは、ゲームAのセーブしたステートを共有するための機能290がユーザに与えられた一例を示す。システムはまた、ユーザがボブ292と共にセーブしたゲームステートのデータをセーブし、その後、ボブによって行われた何らかのセーブされた中断ポイントまたは状況から292を再開するための能力が備わっている。また、ボブが特定のレベルを完了しセーブする、またはそのレベルが完了したことをユーザに知らせ、これにより次のレベルの再開を可能にすることも可能である。さらに
図2Cには、ゲームBにおける中断ポイントの履歴情報294をセーブするためのオプションが示される。ユーザが複数回中断した場合、ユーザは、最後にセーブした中断ポイントのみではなく、このようなそれより前の中断ポイントで再開することも可能である。いくつかの実施形態において、ストレージスペースにセーブする履歴の目的で特定の数の中断ポイントがセーブされる、またはユーザにセーブした中断ポイントをダウンロードする能力が備わっている場合もある。さらにユーザは、2人以上のユーザと中断ポイントを共有することが可能な場合もある。例えばユーザは、複数のユーザ(例えば友達)とゲームAにおける中断ポイントを共有することで、特定のレベルにおいて最高点を得点し、最高のトロフィーを獲得するなどした人を知ることもできる。その後ユーザは、どの友達の中断ポイントから引き継ぎたいか、またはどの友達の中断ポイントから再開したいかを選択することができる。
【0042】
図3は、本開示の実施形態を実施するためのクラウドゲーミングステートセーブ、再開及び転送において行われる方法工程300を示すフローチャートである。工程305において、第1のユーザがクラウドゲーミングシステムクラウドコントローラ130にアクセスする。認証マネージャ135が、ユーザアカウントデータベース133に問い合わせ、第1のユーザのログインアクセス情報をユーザアカウントデータベース133内の第1のユーザのアカウント情報と比べることによって、このユーザが有効なアカウント及び第1のユーザの認証済みのアクセス権を有することを確認する。第1のユーザは、クライアントデバイス122Aを介してクラウドコントローラにアクセスすることができる。
【0043】
クラウドコントローラ130が、工程310において第1のユーザをゲームコンソール112Aに割り当てる。一実施形態では、第1のユーザのゲームコンソール112Aへの割り当ては、第1のユーザの予め中断したゲームのいずれかを割り当てられたゲームコンソール112Aに自動的にロードすることを含むことができる。第1のユーザのゲームコンソール112Aへの割り当てはまた、第1のユーザのクラウドゲーミングシステムダッシュボード250スクリーンの表示を含むことができる。一実施形態では、ゲームコンソールマネージャが、第1のユーザをゲームコンソール112Aに割り当てる場合もある。クラウドコントローラが認証を行い、ゲームコンソールマネージャがゲームコンソールを始動し(例えば電力を印加する)、ゲームデータ、ユーザデータ、ゲームステートデータなどの任意の必要とされるデータを転送し、割り当てられたゲームコンソールに対してログインシーケンスを作動させる。あるいは割り当てられたゲームコンソールは、ゲームデータ、ユーザデータ、ゲームステートデータなどの任意の必要とされるデータを、ユーザデータ及び/またはゲームコンソールマネージャ及び/またはクラウドコントローラ130によって指示される対応する保管場所から取り出すこともできる。
【0044】
工程315において、第1のユーザがゲームまたはアプリケーションを選択し、割り当てられたゲームコンソール112A上で実行する。割り当てられたゲームコンソール112Aは、1つまたは複数のクラウドゲーミングサーバにおける多くのゲームコンソールのうちの1つであってよい。一実施形態では、第1のユーザの割り当てられたゲームコンソール112Aは、ゲームコンソールの特定のタイムシェアに限定される場合もあり、この場合第1のユーザは、割り当てられたゲームコンソール112Aの稼働時間の一部のみに配分される。ゲームコンソール112Aは、1つまたは複数のタイムシェアを提供することができ、タイムシェアの各々は、それぞれのユーザに割り当てることができるため、複数のユーザが同時に1つのゲームコンソールを利用することが可能になる。
【0045】
工程320において、そのアプリケーションにおける所定の中断ポイント以外の特定のポイントでゲームにおいて中断が開始される。例えば第1のユーザは、中断リクエストを開始して自分のストリーミングゲームセッションを中断することができる。あるいはクラウドコントローラ130が、事前選択された不活動時間制限を超える第1のユーザによる不活動のために中断を開始することもできる。コストの理由のために、クラウドコントローラ130が自動的に第1のユーザのゲームコンソール112Aを中断することで、第1のユーザのゲームコンソールを解放し、第2のユーザが利用できるようにすることができる。第1のユーザは、クラウドコントローラ130及び第1のユーザの割り当てられたゲームコンソール112Aの一方またはその両方に対して中断リクエストを通知することによって中断を開始することができる。上記に指摘したように、中断工程は、割り当てられたゲームコンソール、ゲームコンソールマネージャ、クラウドコントローラ130及びストリーミングソフトウェアの中で分配されて良い。
【0046】
工程325において、割り当てられたゲームコンソール112Aの第1のユーザの現在のゲームステートデータ114がキャプチャされる。キャプチャされた第1のユーザのゲームステートデータ114は、ハードウェアステートデータまたはアプリケーションステートデータ、あるいはハードウェアステートデータとアプリケーションステートデータの両方であって良い。ハードウェアステートデータ及びアプリケーションステートデータならびにハードウェアステートデータ及びアプリケーションステートデータのための方法及びシステムを以下でより詳細に記載する。
【0047】
工程330において、キャプチャされた第1のユーザのゲームステートデータ114が後に取り出すために保管される。上記に記載したように、キャプチャされた第1のユーザのゲームステートデータ114は、保管されるゲームステートデータ114’としてローカルストレージサーバ116及び/またはストレージサーバ110に保管することができる。ストレージサーバ110及びローカルストレージサーバ116は、複数のゲームコンソール及び/または複数のユーザに関してゲームステートデータを効率的に保管することができる。工程335において、第1のユーザの保管されたステートデータ114’の場所が、ユーザアカウントデータベース133における第1のユーザのアカウントデータに対応付けられる。これにより第1のユーザのアカウント情報が、第1のユーザの中断したゲームステートデータの保管場所を含むことが可能になる。
【0048】
しばらくしてから、工程340において、上記の工程320においてそれが中断されたポイントで第1のユーザの中断したゲームを再開するためのリクエストが開始される。再開リクエストは、第1のユーザまたは認証済みの第2のユーザから発生する場合がある。第1のユーザまたは認証済みの第2のユーザは、ゲームコンソール112Bなどの割り当てられたゲームコンソールを介して再開リクエストを発行することができる。
【0049】
第1のユーザが自分の最初のゲーミングセッションをログオフさせる場合、あるいはクラウドコントローラが最初のゲーミングセッションを終わらせる、あるいは第1のユーザがクラウドコントローラ130またはゲームコンソールマネージャ113または割り当てられたゲームコンソールへのネットワーク接続における遮断を感じた場合など、それ以外の方法で自分の最初のゲーミングセッションが中断された場合、このとき第1のユーザは、上記の工程305において記載したようにクラウドゲーミングサービスにアクセスし直すことが要求され、特定のゲームコンソールが割り当てられて良い。第1のユーザにゲームコンソール112Bを割り当てられると、1つまたは複数の第1のユーザの中断したゲームが自動的に割り当てられたゲームコンソールにロードされて良い。第1のユーザがゲームコンソール112Bに割り当てられ、第1のユーザの中断したゲームの1つが割り当てられたゲームコンソールにロードされる際、割り当てられたゲームコンソールは、中断したゲームを再開する準備が整ったことの指示を第1のユーザに対して提供し、上記の工程320においてゲームが中断されたポイントで中断したゲームを再開するためのアクセス権を第1のユーザに与えることができる。
【0050】
第1のユーザはまた、保管したゲームステートデータ114’を共有または送信することができる、あるいはそうでなければ上記に記載したように第2のユーザに対して保管したステートゲームデータ114’に対するアクセス権を認証することもできる。ゲームを再開するためのリクエストは、例えばゲームコンソール112Bなどの割り当てられたゲームコンソールからクラウドコントローラ130において受信される。
【0051】
再開リクエストを受信すると、クラウドコントローラ130は、第1のユーザのアカウント情報をユーザアカウントデータベース133に問い合わせ、工程345において、ユーザの中断したゲームに関して保管した第1のユーザのステートデータ114’の保管場所を特定する。クラウドコントローラ130及び/またはゲームコンソールマネージャ113は、保管した第1のユーザのゲームステートデータ114’を取り出し、工程250において保管した第1のユーザのゲームステートデータ114’をリクエストするゲームコンソール112Bに送信する。工程355において、リクエストするゲームコンソール112Bは、保管した第1のユーザのゲームステートデータ114’を受信する。
【0052】
工程360において、リクエストするゲームコンソール112Bは、保管した第1のユーザのゲームステートデータ114’を適用して、再開後のゲームステートデータ114”を生成し、中断ポイントでゲームを再構築する。中断ポイントにおけるゲームの再構築は、リクエストするゲームコンソール112Bをゲームコンソール112Aと同等な構成にし、そのゲームを上記の工程320においてゲームが中断されたときと同等な構成にする。中断ポイントにおけるゲームの再構築は、リクエストするゲームコンソール112Bにおける複数のそれぞれの態様及び場所に再開後のゲームステートデータのそれぞれの部分を読み込むことを含むことができる。一例として、中断ポイントにおけるゲームの再構築は、ゲームが中断されたポイントでゲームを再構築するのに必須であり得る全ての履歴依存データ及びプロセスデータを読み込むことを含むことができる。ゲームを再構築するのに必須であり得る依存データ及びプロセスデータの例には、カラーデータ、テクスチャデータ、頂点データ、フラグメンテーションデータ、アートアセット、ドローイングデータ、シェーディングデータ、ライティングデータ及びその他などのグラフィックデータが含まれる。依存データ及びプロセスデータはまた、種々のバッファ及びキャッシュのコンテンツ及びステート、ならびにゲームのオペレーションを連携させるのに必要な種々のカウンター及びタイマーの状況も含むことができる。中断されたポイントにおけるゲームの再構築はまた、第1のユーザの選択した中断ポイントでそのゲームにおけるそのシーンのキャプチャされた画像を表示することも含むことができる。
【0053】
工程370において、上記の工程320においてゲームが中断されたのと同じポイントで、第1のユーザのゲームがゲームコンソール112Bにおいて再開され、方法工程を終えることができる。
【0054】
ゲームのステートデータは、アプリケーションステートデータ及び/またはハードウェアステートデータの形態で表すことができる。アプリケーションステートデータ及びハードウェアステートデータの各々のキャプチャ及び再開は、以下で考察するようにクラウドゲーミングステートセーブ、再開及び転送に関してその独自の問題を抱える。
【0055】
アプリケーションステートデータ
コンピュータは、1つまたは複数のプロセッサ、メモリ、ならびにグラフィックプロセッサユニット(GPU)、サウンドカード、キーボード及び他の周辺機器などの入出力周辺機器で構成された1つのハードウェアである。コンピュータが稼働するタスクはコンピュータプログラムまたはアプリケーションである。コンピュータプロセッサは、これらのアプリケーションコードを実行し、I/Oに基づいて決定を行う、例えばキーボードボタンを押すことで、ディスプレイ上にビデオフレームを出力することができる。
【0056】
アプリケーションステートデータは、ハードウェアステートデータに属する場合がある。このアプリケーションの使用をバッファするメモリは、RAMチップまたはスワップファイル内の最終的な領域、例えばハードディスクドライブまたはソリッドステートドライブである。プロセッサは、アプリケーションに関する命令を命令キャッシュに記憶し、データをプロセッサレジスタ、データキャッシュまたはRAMに取り込む/記憶する。実行する際、各々のコンピュータアプリケーションは、対応するアプリケーションステートデータを有する。アプリケーションステートデータは、
オープンファイルハンドル
オープンソケット形態のネットワーク接続
パイプ
アプリケーションによって利用されるメモリバッファのステート
命令カウンター
タイマー、
の形態である。
【0057】
一例として、アプリケーションステートデータは、信号、スレッド、ファイル記述子、仮想メモリマッピング、スレッドローカルストレージ、スレッド、プロセスID、ユーザID、グループID、パイプ、ソケット及びその他を含むことができる。アプリケーションステートデータはまた、ゲームによって占拠されるGPUリソースなどのオペレーティングシステムレベルコンセプトを含むこともできる。ゲームは、テクスチャー、ジオメトリバッファ、実行するためのGPUに対するシェーダ命令及びその他などのリソースを認識している。テクスチャーはGPUメモリに記憶され、シェーダ命令はGPUメモリにロードされ、実行中は命令キャッシュにロードされ、最終的にはマッチング命令ポインタが存在する。
【0058】
上記の
図3を再び参照すると、ゲームまたはアプリケーションは、上記の
図3の工程320において中断が開始される際、一時停止される。工程325において、アプリケーションステートデータをキャプチャすることによってゲームステートデータが取り込まれる。アプリケーションステートデータは、仮想メモリマッピング、取り出しファイル記述子などを含む。一実施形態では、アプリケーションの中からデバッガに似た機能を利用して仮想メモリマッピング、回収ファイル記述子などをキャプチャすることもできる。
【0059】
アプリケーションステートデータの一部はまた、例えば/proc/<proccess id>アプリケーションからのLinux(登録商標)オペレーティングシステムにおいて外部から獲得することもできる。アプリケーションステートデータの一例はオープンファイルであってよく、これに関してアプリケーションは数値であるファイル記述子を有する。数値であるファイル記述子は、ファイルに関する識別子としてファイル読み取り/書き込みコールにおいて使用される。このような状況を復元するために、アプリケーションに正確な数値ファイル記述子が与えられる必要がある。一例として、Linux(登録商標)オペレーティングシステムにおいて数値ファイル記述子は、
‐original_file_descriptor=42
‐file_descriptor=open("/path/to/file",..)
‐dup2(file_descriptor,original_file_descriptor)、
などの擬似コードによってキャプチャすることができる。
【0060】
またLinux(登録商標)オペレーティングシステム上でネーム空間を利用して他のタイプのアプリケーションステートデータ、例えばプロセスID(PID)、ユーザID、グループID、ネットワークレイアウト及びその他が仮想化される場合もある。仮想化されたプロセスID(PID)、ユーザID、グループID、ネットワークレイアウトなどによって、サンドボックス/コンテナ環境を形成することが可能になり、この中にシステムの一部を隠すことができ、そこでPID、ユーザID及びその他のオペレーティングシステムレベルリソースを再形成することができる。
【0061】
キャプチャされたアプリケーションステートデータはその後、
図3の工程360において、同一または異なるコンピュータシステム上で、例えばゲームコンソール112B上で、同一のアプリケーションステートデータを再形成するのに利用することができる。アプリケーションまたはゲームを再開するのに使用されるゲームコンソール112B内のそれぞれの場所に種々のアプリケーションステートデータを配置することができる。ネットワークバッファのコンテンツをオペレーティングシステムにおいて再形成することができる。あるいは、以下に記載するハードウェア割り込みと同様にネットワークバッファを安全な回復ポイントまでドレインすることもできる。この方法において、ユーザは、上記の工程320においてアプリケーションまたはゲームが中断されたポイントでアプリケーションを再開することが可能である。
【0062】
ハードウェアステートデータ
ハードウェアステートデータは、ユーザがアプリケーションの中断を選択した場合など、アプリケーションの実行中に中断されたコンピュータの動作状況を含む。コンピュータの現在の動作状況は所定の時間において静止され、その結果コンピュータのハードウェア、例えばプロセッサ、RAM、全ての周辺機器、GPU、サウンドカード、ネットワークカードなども静止される。このようなハードウェアステートデータのキャプチャ、及びその後キャプチャされたハードウェアステートデータを別のコンピュータに適用することによって、ユーザが、第1のコンピュータにおいてアプリケーションを中断した場所でアプリケーションを再開することが可能になる。
【0063】
エミュレータは、コンピュータのハードウェアをソフトウェアにおいて完璧に模倣するアプリケーションである。エミュレータは、例えば廃れてしまったコンピュータまたはゲームコンソールなどの極めて古いコンピュータまたはゲームコンソールからのレガシーアプリケーションをより最近生産されたコンピュータシステム上で稼働するのに利用されることが多い。より最近生産さたコンピュータシステムは、ハードウェアの不適合性により、エミュレータアプリケーションなしではレガシーアプリケーションと適合することができないため、より最近作られたコンピュータシステムは、レガシーアプリケーションを稼働することができない。
【0064】
ハードウェアステートデータを動作中の任意の選択されたポイントでセーブするために、エミュレータは、エミュレートされたコンピュータ用のエミュレートされたハードウェアステートデータを、例えば特定のファイルにセーブすることができる。エミュレートされたハードウェアステートデータは、エミュレートされたデバイスに関する全てのメモリ、周辺機器の状況をキャプチャすること、及びエミュレートされたコンピュータに関するその他において現在実行される命令のアドレスを記憶する。エミュレートされたコンピュータは、上記に記載するようにエミュレータアプリケーションにおいて完璧に実現され、これによりエミュレータアプリケーションのアプリケーションステートデータをキャプチャする。
【0065】
仮想マシンステートは、エミュレートされたハードウェアステートデータと同様である。クラウドゲーミング、ハードウェアステートデータのキャプチャ、転送及び再開の文脈において、エミュレータに関する1つの問題は、複数の仮想ゲームマシンの間でエミュレートされたハードウェアステートデータを共有することである。
【0066】
典型的には、例えばウェブサーバ、データベースサーバ、Eメールサーバなどのサーバアプリケーションは、例えばサーバマシンなどの物理的サーバハードウェア上で稼働する。サーバマシンは、高性能の中央処理装置(CPU)及び大量のメモリを含み、これらによって複数のサーバアプリケーションを並行して稼働することが可能になる。プロセッサ、メモリ、データバスなどのコンピュータハードウェアはより高性能になっており、サーバ稼働時間及びセキュリティがよりいっそう重大かつ重要になってきている。
【0067】
サーバアプリケーションは典型的には、仮想化されたサーバハードウェア上で稼働する。そのような例では、高性能のサーバプロセッサが存在し、これが仮想アプリケーションを稼働する。仮想アプリケーションによって複数の仮想マシンを生み出すことが可能になる。各々の仮想マシンは別々に動作するエミュレートされたコンピュータハードウェアである。各々の仮想マシンは、例えばネットワークカード、記憶デバイスなどのその独自の仮想または物理的周辺機器のセットを含む。各々の仮想マシンはその独自のオペレーティングシステムを稼働することができる。仮想マシンの各々におけるオペレーティングシステムは、他の仮想マシンと異なる場合があり、例えば複数の仮想マシンを稼働するLinux(登録商標)物理マシン、異なるWindowsのバージョンを稼働する仮想マシンの各々または他の好適なコンピュータオペレーティングシステムなど物理的マシンのオペレーティングシステムと異なる場合もある。
【0068】
例えばウェブサーバ、データベースサーバ、Eメールサーバなどの各々のサーバアプリケーションは典型的には、安全性の隔離の理由でその独自の仮想マシンに割り当てられる。一般にエミュレータなどの仮想マシンは、ソフトウェアコンセプトであり、エミュレータと同様の方法で中断させることができ、また仮想マシンステートは、仮想アプリケーションのアプリケーションステートデータとしてキャプチャすることができる。
【0069】
仮想マシンステートはその後、第2の仮想マシンに転送することができる。第2の仮想マシンは、場合によって異なる物理的コンポーネントを利用して異なる物理的サーバ上で稼働することができるが、但しこのような物理的コンポーネントは、仮想周辺機器デバイス及び仮想マシンの仮想プロセッサが理由で問題にはならない。
【0070】
仮想マシンステートは、一種のアプリケーションステートデータとみなすことができる。コンピュータシステム間での仮想マシンステートの転送は、仮想マシンのマイグレーションと呼ばれ、サーバの世界では共通の特徴である。
【0071】
仮想マシンのマイグレーションに対する最近の拡張は、ライブマイグレーションと呼ばれ、サーバの信頼性を高める。例えば仮想データベースサーバは、物理的ハードウェアが機能していないこと、例えばメモリエラー、ハードディスク読み取りエラーなどを検知し、異なるサーバハードウェア上にホストされる別の同一の仮想データベースサーバへの仮想データベースサーバのマイグレーションを起動する。ライブマイグレーションは、いかなるクライアントも切り離さずに、数秒以下のダウンタイムのみを利用して行うことができる。
【0072】
残念なことに仮想マシンの全ての周辺機器は、仮想マシンのマイグレーションが正確に機能するために仮想周辺機器でなければならない。仮想マシンのマイグレーションが、物理的周辺機器のマイグレーションをサポートすることはない。第1のゲームコンソールのハードウェアステートデータを第2のゲームコンソールにマイグレーションするには、物理的周辺機器のマイグレーションを必要とするため仮想マシンマイグレーションは、この目的には適さない。
【0073】
コンテンツリッチでインタラクティブなゲーミング環境を生み出すためにゲームコンソールハードウェアに必要とされる複雑さのために、ゲームコンソールは容易にまたは効率的にエミュレートまたは仮想化することができない。ユーザは特有のゲームコンソールに割り当てられ、ユーザの選択したゲームが割り当てられたゲームコンソールのハードウェアによって実行される。よってエミュレーション及び仮想化が、ハードウェアステートデータを一種のアプリケーションステートデータとしてキャプチャするために必要とされる機能を与えることはない。
【0074】
上記に記載したように、ハードウェアマイグレーションは、コンピュータ及びそのコンピュータに関する周辺機器の関連するハードウェアステートデータのキャプチャを必要とする。それぞれの周辺機器に関するデバイスドライバは、システムが休止状態に入る際、周辺機器に関する関連するハードウェアステートデータをキャプチャするように尋ねられ、システムメモリにそのような状況を記憶する。システムに再度電源が入れられると、全てのメモリステートがディスクから復元され、周辺機器ドライバもまた、例えばGPUに関する3Dテクスチャーを含むバッファなどの何らかのハードウェアステートデータを復元するように指示される。
【0075】
一実施形態では、ゲームコンソール112Aは、上記の
図1に示されるようにメインプロセッサ145と、コプロセッサ146とを含む。ユーザが上記の工程320においてゲームコンソール112Aを中断することを選択したとき、メインプロセッサ145は現在の動作(複数可)を静止させることができる。工程325において、コプロセッサ146は、メインプロセッサ145、バッファ、グラフィックプロセッサ147、メモリシステム148、入出力システム149、ネットワークインターフェースカード150及び他の周辺機器に対して、それぞれの現在の状況を判断し、ハードウェアステートデータをキャプチャするように問い合わせを行うことができる。あるいはオペレーティングシステムと共にまたはその一部として作動するアプリケーションが中断し、バッファ、グラフィックプロセッサ147、メモリシステム148、入出力システム149、ネットワークインターフェースカード150及び他の周辺機器に問い合わせを行う場合もある。
【0076】
第1のゲームコンソール112Aから第2のゲームコンソール112Bへのゲームコンソールハードウェアステートデータのマイグレーションをサポートするには、たとえ第2のゲームコンソール112Bが第1のゲームコンソール112Aと同じコンポーネント及び周辺機器を含んでいたとしても特別の措置を必要とする。例えばゲームコンソール112A、112Bの各々における周辺機器は、異なる内部シリアル番号を有するため、何らかの再構成を必要とする場合がある。別の例は、さらなる再構成を必要とするネットワークデバイスのMACアドレスである。
【0077】
さらに第2のゲームコンソール112Bが、第1のゲームコンソール112Aと異なるネットワーク環境にある場合がある。異なるネットワーク環境は、異なるネットワーク設定を利用する可能性があり、よってゲームコンソールのハードウェアステートデータのマイグレーションもまたネットワークを十分に再構成することを必要とする。ゲームコンソールのハードウェアステートデータのマイグレーションはまた、第1のゲームコンソール112Aと第2のゲームコンソール112Bの間の地理的な格差に関して再構成する必要がある場合もある。一例として、第1のゲームコンソール112Aと異なる地理的地域にある第2のゲームコンソール112Bへの転送は、時間帯の変更、言語の変更、及び場合によって稼働中のゲームで使用される言語への変更さえも必要となる場合がある。
【0078】
第2のゲームコンソール112Bはまた、第1のゲームコンソール112Aと異なるハードウェア改訂版を有する場合があり、これは様々な再初期化を必要とする場合がある。例えば第2のゲームコンソール112Bが、例えばより小さな半導体プロセスにおけるより新しいハードウェア改訂版であり、より電力効率がよい場合があり、第1のゲームコンソール112Aとは異なる電力及び冷却環境を必要とすることになる。
【0079】
単一のアプリケーションのライブマイグレーションはかなり新しい分野である。1つの手法により、アプリケーションを中断することが可能になり、その後にアプリケーションステートデータ、例えばファイルハンドル、ソケット、メモリステート及び上記に記載したような他の種類のアプリケーションステートデータのキャプチャが続く。再開する際、同一のファイル記述子が、アプリケーションが中断されたときと同一条件に復元される。ネットワーク接続、タイマー、相互排除及び他の種類の状況も復元される。3Dゲームアプリケーションは、GPUに常駐するバッファの形態のハードウェアステートデータに依拠している。これ以前の手法は、それぞれのハードウェアステートデータをキャプチャは行わず、3Dゲームのアプリケーションステートデータ転送に関して必要とされる。この文脈において、ハードウェアステートデータは、アプリケーションの代わりにハードウェアに保管された任意のデータまたは状況を指す。例えばGPUメモリにおけるバッファは地理的またはテクスチャーデータを含み、メモリバッファはハードディスク上にゲームデータファイルを含む。アプリケーションは典型的には、オペレーティングシステムカーネルまたはデバイスドライバによって提供されるソフトウェア抽象化レイヤを介してそのようなハードウェアステートデータにアクセスする。そのような抽象化の例は、最終的に記憶装置の頂部にあるレイヤであるディスク上のファイルに対するファイル記述子、GPU側のバッファ及びグラフィックコンテクストを表すファイル記述子であって良い。時には性能の理由で、アプリケーションが直接ハードウェアバッファにアクセスする場合もある。ハードウェアバッファへの直接のアクセスは、デバイスドライバによって誘導されて良い。
【0080】
ハードウェアステートデータをキャプチャするための1つの手法では、アプリケーションを中断し、中断されたハードウェアステートデータにリンクされたソフトウェア抽象化機構がキャプチャされる。ソフトウェア抽象化機構がファイル記述子である場合、このファイル記述子を使用して対応するハードウェアステートデータを捜すことができる。ファイル記述子はデバイスドライバ/OSカーネルコンセプトであることが多いため、対応するデバイスドライバは、その対応付けられたハードウェアステートデータを取り出すための方法を公開する必要がある。アプリケーションのないところで全てのハードウェアステートデータを識別するプロセスは相当困難であり得る。
【0081】
ハードウェアステートデータの例には、種々のレジスタ、フィフォバッファ、命令キャッシュ(CPU及びGPUの両方における)、データキャッシュ(CPU/GPU)、RAM、CPU及びGPU上のプログラムカウンター(複数可)/命令ポインター(複数可)が含まれる。GPU命令は、シェーダアプリケーション用である。
【0082】
ハードウェアステートデータはまた、移行状況関連情報も含んでいる。例えばハードウェアは、割り込み信号を発する場合がある。この割り込み信号は再生させることができる、またはバッファがバッファの現在のコンテンツをドレインし、その後既知の安全な回復状況においてこのバッファをリロードする場合もある。一実施形態では、ハードウェアが、何らかの要求待ちまたはスケジュール設定された処理を終わらせることが許可される場合がある。その後割り込みを利用して、新たな処理を起動する、または特定の処理の完了を報告することができる。ハードウェアが処理で忙しい場合、そのような割り込み信号はハードウェア以外で再生することもでき、ハードウェアが何らかの継続中の処理に関して割り込み信号を待っている場合に備えて、ハードウェアはリジューム中の処理を完了することはできない。一部の処理は、キャプチャするための移行状態がより少ない場合もある。一実施形態では、ゲーム操作は、継続中の移行状態が最小になる、または選択した閾値を下回り、その後割り込みなどのより少ない移行ハードウェア状況となるまで継続することができ、ゲームを再開する際の再構築のために命令カウンタが必要とされてよい。
【0083】
別の手法は、アプリケーションからの支援を得ることである。アプリケーションを中断する代わりに、アプリケーションはサスペンド信号を送信することができ、この信号がアプリケーションが全ての内部状況をディスクに記憶するようにさせ、これによりそれが何らかの必要なハードウェアステートデータを回復させることを可能にする。アプリケーションを再開する際、回復を行うのはアプリケーションの仕事である。この利点は、アプリケーションがハードウェアステートデータが実際に何をキャプチャする必要があるのかを知っていることである。ハードウェアステートデータのかなりの部分は、そのゲームファイルからデータをリロードすることによって大抵回復することができる。ゲームはまた、回復を管理することもでき、例えばオンラインクラウドコントローラへのネットワーク接続を低下させることもできる。
【0084】
アプリケーションステートデータまたはハードウェアステートデータの転送を介する回復とは無関係に、オンラインゲーム切断、ユーザとゲームコンソールのタイムゾーンの調節、ユーザに対する適切な言語の選択及びゲームタイマーの再開を含めた付加的な再開態様がある。ゲームは、内部のゲームタイミングに関して高精度の常に向上するタイマーを利用することが多い。再開後、このようなタイマーは、それらがそれ以前に一時停止されたのと全く同時刻で再始動させる必要があり、そうでなければゲームが誤った決定を行う可能性があり、例えばゲームのキャラクタが、壁の中で動けなくなったり、死んだりする可能性がある。オペレーティングシステムがこのようなことを管理することができるか、またはまだ管理できないかによって、ソフトウェアの変更が必要とされる。上記に記載したように、工程350以下参照において、再開を成功させるために適切なアプリケーションまたはゲーム及び全てのサポートするデータファイルが必要とされる。
【0085】
図4は、本発明の種々の実施形態によるゲームシステム400のブロック図である。ゲームシステム400は、ネットワーク415を介して1つまたは複数のクライアント410にビデオストリームを提供するように構成される。ゲームシステム400は典型的には、ビデオサーバシステム420と、任意選択のゲームサーバ425とを含む。ビデオサーバシステム420は、1つまたは複数のクライアント410に最小限のサービスの質でビデオストリームを提供するように構成される。例えばビデオサーバシステム420は、ビデオゲームにおける視野の状況を変えるゲームコマンドを受信し、更新されたビデオストリームをクライアント410に提供することで最低限の時間のずれでこのような変更を反映することができる。ビデオサーバシステム420は、多様な種類の代替のビデオフォーマットでビデオストリームを提供するように構成されて良く、これにはまだ規定されないフォーマットも含まれる。さらにビデオストリームは、多様な種類のフレーム率でユーザに提示するように構成されたビデオフレームを含むことができる。典型的なフレーム率は、毎秒30フレーム、毎秒60フレーム、及び毎秒420フレームである。これより大きなまたは小さなフレーム率も、本発明の代替の実施形態に含まれる。
【0086】
クライアント410は、ここでは個別に410A、410Bなどと呼ばれ、頭部装着型ディスプレイ、端末、パーソナルコンピュータ、ゲームコンソール、タブレットコンピュータ、電話、セットトップボックス、キオスク、無線デバイス、デジタルパッド、スタンドアローンデバイス、手持ち式ゲームプレイデバイスなどを含んでよい。典型的にはクライアント410は、エンコードされたビデオストリームを受信し、このビデオストリームをデコードし、結果のビデオをユーザ、例えばゲームのプレイヤに提示するように構成される。エンコードされたビデオストリームを受信する及び/またはビデオストリームをデコードするプロセスは典型的には、クライアントの受信バッファに個々のビデオフレームを格納することを含む。ビデオストリームは、クライアント410に一体式のディスプレイ上で、あるいはモニターまたはテレビジョンなどの別個のデバイス上でユーザに提示される。クライアント410は任意選択で、2人以上のゲームプレイヤをサポートするように構成される。例えば、ゲームコンソールは、2人、3人、4人またはそれ以上の同時に存在するプレイヤをサポートするように構成される場合もある。これらのプレイヤの各々は、別々のビデオストリームを受信することができる、あるいは1つのビデオストリームが、各々のプレイヤのために特別に生成された、例えば各々のプレイヤの視点に基づいて生成されたフレームの領域を含む場合もある。クライアント410は任意選択で地理的に分散される。ゲームシステム400に含まれるクライアントの数は、1または2から数千、数万またはそれ以上まで広く変動する可能性がある。本明細書で使用される際、「ゲームプレイヤ」という用語は、ゲームをプレイする人を指すのに使用され、「ゲームプレイイングデバイス」という用語は、ゲームをプレイするのに使用されるデバイスを指すのに使用される。一部の実施形態では、ゲームプレイイングデバイスは、ユーザにゲーム体験を配信するために共同する複数のコンピューティングデバイスを指す場合もある。例えばゲームコンソール及びHMDは、ビデオサーバシステム420と共同してHMDを通して見られるゲームを配信することができる。一実施形態では、ゲームコンソールがビデオサーバシステム420からビデオストリームを受信し、ゲームコンソールが、レンダリングのためにHMDにビデオストリームを転送する、またはビデオストリームを更新する。
【0087】
クライアント410は、ネットワーク415を介してビデオストリームを受信するように構成される。ネットワーク415は、いずれのタイプの通信ネットワークでもよく、これには電話網、インターネット、無線ネットワーク、パワーラインネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、プライベートネットワークなどが含まれる。典型的な実施形態では、ビデオストリームは、TCP/IPまたはUDP/IPなどの標準プロトコルを介して通信される。あるいはビデオストリームは独自の標準を介して通信される。
【0088】
クライアント410の典型的な一例は、プロセッサ、不揮発性メモリ、ディスプレイ、デコーディングロジック、ネットワーク通信性能及び入力デバイスを備えるパーソナルコンピュータである。デコーディングロジックには、コンピュータ可読媒体に記憶されるハードウェア、ファームウェア及び/またはソフトウェアが含まれて良い。ビデオストリームをデコードする(及びエンコードする)ためのシステムは、当分野でよく知られており、使用される特定のエンコーディングスキームに応じて変化する。
【0089】
クライアント410は場合によって、但し不可欠ではなく、受信したビデオを修正するように構成されたシステムを含む。例えばクライアントは、さらなるレンダリング、1つのビデオ画像を別のビデオ画像に重ね合わせる、ビデオ画像をトリミングするなどを行うように構成されて良い。例えばクライアント410は、種々のタイプのビデオフレーム、例えばI−フレーム、P−フレーム及びB−フレームなどを受信し、これらのフレームをユーザに対して表示するための画像に処理するように構成されて良い。いくつかの実施形態において、クライアント410の構成要素は、さらなるレンダリング、シェーディング、3−Dへの変換などの作業をビデオストリームに対して行うように構成される。クライアント410の構成要素は任意選択で2つ以上の音声またはビデオストリームを受信するように構成される。クライアント410の入力装置には、例えば片手のゲームコントローラ、両手のゲームコントローラ、ジェスチャ認識システム、注視認識システム、音声認識システム、キーボード、ジョイスティック、指示デバイス、力フィードバックデバイス、モーション及び/またはロケーション感知デバイス、マウス、タッチスクリーン、神経インターフェース、カメラ、まだ開発されない入力デバイスなどが含まれて良い。
【0090】
クライアント410によって受信されるビデオストリーム(及び任意選択で音声ストリーム)は、ビデオサーバシステム420によって生成され提供される。本明細書の別の場所でさらに記載するように、このようなビデオストリームは、ビデオフレームを含む。(及び音声ストリームは音声フレームを含む)。ビデオフレームは、ユーザに表示される画像に意味を成すように貢献するように構成される(例えばそれらが適切なデータ構造内にピクセル情報を含む)。本明細書で使用される際、「ビデオフレーム」という用語は、ユーザに示される画像に貢献する、例えば作用するように構成された影響力のある情報を含むフレームを指すのに使用される。「ビデオフレーム」に関する本明細書の教示の大半は「音声フレーム」にも適用することができる。
【0091】
クライアント410は典型的には、ユーザからの入力を受信するように構成される。このような入力には、ビデオゲームステートを変更する、またはそうでなければゲームプレイに影響を与えるように構成されたゲームコマンドが含まれる。ゲームコマンドは、入力デバイスを利用して受信することができる、及び/またはクライアント410上で実行中の演算命令によって自動的に生成される場合もある。受信されたゲームコマンドは、クライアント410からネットワーク415を介してビデオサーバシステム420及び/またはビデオサーバ425に伝達される。例えばいくつかの実施形態において、ゲームコマンドは、ビデオサーバシステム420を介してゲームサーバ425に伝達される。いくつかの実施形態において、ゲームコマンドの別々のコピーがクライアント410からゲームサーバ425及びビデオサーバシステム420に伝達される。ゲームコマンドの伝達は任意選択で、コマンドの同一性に左右される。ゲームコマンドは任意選択で、クライアント410Aに音声またはビデオストリームを提供するのに使用される様々なルートまたは通信チャネルを介しててクライアント410Aから伝達される。ゲームサーバ425は、上記に記載したようにクラウドコントローラ130及び/またはゲームマネージャ113の一部を含む場合もあることを理解されたい。
【0092】
ゲームサーバ425は任意選択でビデオサーバシステム420と異なるエンティティによって操作される。例えばゲームサーバ425は、マルチプレイヤゲームの発行元によって操作される場合がある。この例ではビデオサーバシステム420は任意選択でゲームサーバ425によってクライアントとして捉えられ、任意選択でゲームサーバ425の視点から従来技術のゲームエンジンを実行中の従来技術のクライアントであるように見えるように構成される。ビデオサーバシステム420とゲームサーバ425の間の通信は、任意選択でネットワーク415を介して行われる。したがってゲームサーバ425は、複数のクライアントにゲームステート情報を送信する従来技術のマルチプレイヤゲームサーバであって良く、これらのクライアントの1つがゲームサーバシステム420である。ビデオサーバシステム420は、ゲームサーバ425の複数のインスタンスと同時に通信するように構成されて良い。例えばビデオサーバシステム420は、異なるユーザに複数の異なるビデオゲームを提供するように構成することができる。このような異なるビデオゲームの各々は、異なるゲームサーバ425によってサポートされる及び/または異なるエンティティによって公開される場合がある。いくつかの実施形態において、ビデオサーバシステム420の複数の地理的に分散したインスタンスが、複数の異なるユーザにゲームビデオを提供するように構成される。ビデオサーバシステム420のこれらのインスタンスの各々は、ゲームサーバ425の同一のインスタンスと通信することができる。ビデオサーバシステム420と1つまたは複数のゲームサーバ425の間の通信は、任意選択で専用の通信チャネルを介して行われる。例えばビデオサーバシステム420は、これら2つのシステム間の通信に専用の高帯域チャネルを介してゲームサーバ425に接続されて良い。
【0093】
ビデオサーバシステム420は少なくとも1つのビデオソース430、I/O装置445、プロセッサ450及び非一時的ストレージ455を備える。ビデオサーバシステム420は、1つのコンピューティングデバイスを含む、または複数のコンピューティングデバイスの間に分配される場合がある。このようなコンピューティングデバイスは任意選択で、ローカルエリアネットワークなどの通信システムを介して接続される。
【0094】
ビデオソース430は、例えば、ストリーミングビデオまたは動画を形成する一連のビデオフレームなどのビデオストリームを提供するように構成される。いくつかの実施形態において、ビデオソース430は、ビデオゲームエンジン及びレンダリングロジックを含む。ビデオゲームエンジンは、プレイヤからゲームコマンドを受信し、受信したコマンドに基づいてビデオゲームのその状況のコピーを維持するように構成される。このようなゲームステートは、ゲーム環境における対象の位置ならびに典型的には視点を含む。ゲームステートはまた、対象の特性、画像、色及び/またはテクスチャーも含む場合もある。ゲームステートは典型的には、ゲームルール、ならびに例えば移動する、回転する、攻撃する、集中する、対話する、利用するなどのゲームコマンドに基づいて維持される。ゲームエンジンの一部は任意選択でゲームサーバ425内に配置される。ゲームサーバ425は、地理的に分散したクライアントを利用する複数のプレイヤから受信したゲームコマンドに基づいてゲームのステートのコピーを維持することができる。このようなケースでは、ゲームステートは、ゲームサーバ425によってビデオソース430に提供され、ここにゲームステートのコピーが保管され、レンダリングが行われる。ゲームサーバ425は、ネットワーク415を介してクライアント410から直接ゲームコマンドを受信する、及び/またはビデオサーバシステム420を介してゲームコマンドを受信する場合もある。
【0095】
ビデオソース430は典型的には、ストレージ455などのコンピュータ可読媒体に記憶された、例えばハードウェア、ファームウェア及び/またはソフトウェアなどのレンダリングロジックを含む。このようなレンダリングロジックは、ゲームステートに基づいてビデオストリームのビデオフレームを形成するように構成される。レンダリングロジックの全てまたは一部は任意選択で、グラフィック処理装置(GPU)内に配置される。レンダリングロジックは典型的には、対象間の三次元の空間関係を決定する、及び/またはゲームステート及び視点に基づいて適切なテクスチャーなどを適用するように構成された処理ステージを含む。レンダリングロジックは、クライアント410に伝達する前に通常エンコードされる生ビデオを生成する。例えば生ビデオは、Adobe Flash(登録商標)標準、.wav、H.264、H.263、On2、VP6、VC−1、WMA、Huffyuv、Lagarith、MPG−x.Xvid.FFmpeg、x264、VP6−8、realvideo、mp3などに従ってエンコードされて良い。エンコーディングプロセスは、リモートデバイス上のデコーダに送達するために任意選択でひとまとめにされたビデオストリームを生成する。このビデオストリームは、フレームサイズ及びフレーム率によって特徴付けられる。典型的なフレームサイズには、800x600、1280x720(例えば720p)、1024x768が含まれるが、任意の他のフレームサイズも使用されて良い。フレーム率は、1秒当たりのビデオフレームの数である。ビデオストリームは、異なるタイプのビデオフレームを含むことができる。例えば、H.264標準は、「P」フレームと「I」フレームを含む。I−フレームは、ディスプレイデバイス上の全てのマクロブロック/ピクセルを更新するための情報を含むのに対して、P−フレームはそのサブセットを更新するための情報を含む。P−フレームは典型的にはI−フレームよりデータサイズが小さい。本明細書で使用される際、「フレームサイズ」という用語は、フレーム内のピクセルの数を指すことを意味する。「フレームデータサイズ」という用語は、フレームを記憶するのに必要とされるバイトの数を指すのに使用される。
【0096】
他の実施形態において、ビデオソース430は、カメラなどのビデオ記録デバイスを含む。このカメラは、コンピュータゲームのビデオストリームに含まれて良い時間遅れのビデオまたはライブビデオを生成するのに使用されて良い。結果として生じるビデオストリームは任意選択で、レンダリングした画像とスチールカメラまたはビデオカメラを利用して記録された画像の両方を含む。ビデオソース430はまた、ビデオストリームに含まれるように予め記憶されたビデオを記憶するように構成されたストレージデバイスを含んでよい。ビデオソース430はまた、対象、例えば人間の動作または位置を検出するように構成されたモーションまたは位置感知デバイスと、検出された動作及び/または位置に基づいてゲームステートを特定するまたはビデオを生成するように構成されたロジックとを含む場合もある。
【0097】
ビデオソース430は任意選択で、他のビデオに置かれるように構成されたオーバレイを提供するように構成される。例えばこのようなオーバレイは、コマンドインターフェース、ログイン命令、ゲームプレイヤに対するメッセージ、他のゲームプレイヤの画像、他のゲームプレイヤの配信ビデオ(例えばウェブカメラビデオ)を含んでよい。クライアント410Aがタッチスクリーンインターフェースまたは注視検出インターフェースを含む実施形態では、オーバーレイは、仮想キーボード、ジョイスティック、タッチパッドなどを含む場合がある。オーバレイの一例では、プレイヤの音声が音声ストリームに重ねられる。ビデオソース430は任意選択で1つまたは複数の音源をさらに含む。
【0098】
ビデオサーバシステム420が2人以上のプレイヤからの入力に基づいてゲームステートを維持するように構成される実施形態では、各々のプレイヤは、位置及び見る方向を含む異なる視点を有する場合がある。ビデオソース430は任意選択で、それぞれの視点に基づいて各々のプレイヤに対して別々のビデオストリームを提供するように構成される。さらにビデオソース430は、クライアント410の各々に対して異なるフレームサイズ、フレームデータサイズ及び/またはエンコーディングを提供するように構成される。ビデオソース430は任意選択で3−Dビデオを提供するように構成される。
【0099】
I/O装置445はビデオサーバシステム420のために、ビデオ、コマンド、情報に関するリクエスト、ゲームステート、注視情報、デバイスモーション、デバイスの位置、ユーザモーション、クライアントの同一性、プレイヤの同一性、ゲームコマンド、セキュリティ情報、音声などを送受信するように構成される。I/O装置445は典型的には、ネットワークカードまたはモデムなどの通信ハードウェアを含む。I/O装置445は、ゲームサーバ425、ネットワーク415及び/またはクライアント410と通信するように構成される
【0100】
プロセッサ450は、本明細書で考察されるビデオサーバシステム420の種々のコンポーネントの中に含まれる例えばソフトウェアなどのロジックを実行するように構成される。例えばプロセッサ450は、ビデオソース430、ゲームサーバ425及び/またはクライアントクォリファイア(Client Qualifier)460の機能を果たすために、ソフトウェア命令によってプログラムされて良い。ビデオサーバシステム420は任意選択で、プロセッサ450の2つ以上のインスタンスを含む。プロセッサ450はまた、ビデオサーバシステム420によって受信されたコマンドを実行するため、または本明細書で考察されるゲームシステム400の種々の要素の動作を連携して働かせるために、ソフトウェア命令によってプログラムされて良い。プロセッサ450は1つまたは複数のハードウェアデバイスを含んで良い。プロセッサ450は電子プロセッサである。
【0101】
ストレージ455は、非一時的なアナログ及び/またはデジタルデバイスを含む。例えばストレージ455は、ビデオフレームを格納するように構成されたアナログストレージデバイスを含むことができる。ストレージ455は、例えばハードディスク、光学ディスクまたはソリッドステートストレージなどのコンピュータ可読デジタルストレージを含む場合もある。ストレージ415は、ビデオフレーム、疑似フレーム、ビデオフレームと疑似フレームの両方を含むビデオストリーム、音声ストリームなどを記憶するように構成される(例えば適切なデータ構造またはフィルシステムを介して)。ストレージ455は任意選択で複数のデバイスの間で分散される。いくつかの実施形態において、ストレージ455は、本明細書の別の場所で考察されるビデオソース430のソフトウェアコンポーネントを保管するように構成される。このようなコンポーネントは、必要に応じて使えるように設定されるように準備されたフォーマットで保管されて良い。
【0102】
ビデオサーバシステム420は任意選択で、クライアントクォリファイア460をさらに備える。クライアントクォリファイア460は、例えばクライアント410Aまたは410Bなどのクライアントの能力をリモートで判定するように構成される。このような能力は、クライアント410A自体の能力だけでなく、クライアント410Aとビデオサーバシステム420の間の1つまたは複数の通信チャネルの能力の両方を含むことができる。例えばクライアントクォリファイア460は、ネットワーク415を介して通信チャネルをテストするように構成されて良い。
【0103】
クライアントクォリファイア460は、クライアント410Aの能力を手動でまたは自動的に判定する(例えば知る)ことができる。手動の判定には、クライアント410Aのユーザとの通信、及びユーザに能力を提供するように頼むことが含まれる。例えばいくつかの実施形態において、クライアントクォリファイア460は、クライアント410Aのブラウザ内の画像、テキストなどを表示するように構成される。一実施形態において、クライアント410Aは、ブラウザを含むHMDである。別の実施形態において、クライアント410Aは、ブラウザを有するゲームコンソールであり、ブラウザはHMD上に表示することができる。表示される対象は、ユーザが、クライアント410Aのオペレーティングシステム、プロセッサ、ビデオデコーダタイプ、ネットワーク接続のタイプ、ディスプレイ解像度などの情報を入力することをリクエストする。ユーザによって入力されたこの情報は、クライアントクォリファイア460に戻るように伝達される。
【0104】
自動判定は、例えばクライアント410A上での特定のエージェントの実行及び/またはクライアント410Aへのテストビデオの送信によって行われて良い。エージェントは、演算命令、例えばウェブページに埋め込まれた、またはアドオンとしてインストールされたジャバスクリプトを有することができる。エージェントは任意選択でクライアントクォリファイア460によって提供される。種々の実施形態において、エージェントは、クライアント410Aの処理力、クライアント410Aのデコーディング及び表示力、遅延時間の確実性及びクライアント410Aとビデオサーバシステム420間の通信チャネルの帯域幅、クライアント410Aの表示タイプ、クライアント410A上に提示されるファイヤウォール、クライアント410Aのハードウェア、クライアント410A上で実行中のソフトウェア、クライアント410A内のレジストリエントリなどを突き止めることができる。
【0105】
クライアントクォリファイア460は、コンピュータ可読媒体に記憶されたハードウェア、ファームウェア及び/またはソフトウェアを含む。クライアントクォリファイア460は任意選択でビデオサーバシステム420の1つまたは複数の他の要素から隔たった特定のコンピューティングデバイス上に配置される。例えばいくつかの実施形態において、クライアントクォリファイア460は、クライアント410とビデオサーバシステム420の2つ以上のインスタンスの間の通信チャネルの特徴を判定するように構成される。このような実施形態では、クライアントクォリファイアが見いだした情報を使用して、ビデオサーバシステム420のどのインスタンスがクライアント410の1つに対してストリームビデオを送達するのに最適であるかを判定することができる。
【0106】
本発明の実施形態は、手持ち式デバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな家庭用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含めた種々のコンピュータシステム構成によって実施することができる。本発明はまた、有線式または無線ネットワークを介して結合されたリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実施することもできる。
【0107】
上記の実施形態を念頭において、本発明は、コンピュータシステムに記憶されたデータに関連して様々なコンピュータ実装演算を用いることができることを理解されたい。このような演算は、物理量の物理的な操作を必要とする。本発明の一部を形成する本明細書に記載される演算のいずれもマシン操作に有益である。本発明は、このような演算を実行するためのデバイスまたは装置に関する。このような装置は、必要とされる目的のために特別に構築することができる、または装置は、コンピュータ内に記憶されたコンピュータプログラムによって選択的に始動されるまたは構成された汎用コンピュータである場合もある。詳細には、様々な汎用マシンを、本明細書における教示に従って書かれたコンピュータプログラムと共に使用することができる、または必要とされる演算を実行するためにより特化された装置を構築することがより簡便である場合もる。
【0108】
本発明はまた、コンピュータ可読媒体上のコンピュータ可読コードとして具現化される場合もある。コンピュータ可読媒体は、データを記憶することができる何らかのデータストレージデバイスであり、このデータはコンピュータシステムによってその後読み取ることができる。コンピュータ可読媒体の例には、ハードディスク、ネットワーク接続ストレージ(NAS)、リードオンリーメモリ、ランダムアクセスメモリ、CD−ROM、CD−R、CD−RW、磁気テープならびに他の光学及び非光学データストレージデバイスが含まれる。コンピュータ可読媒体は、ネットワーク接続されたコンピュータシステム上に分散されたコンピュータ可読有形媒体を含むことができることにより、コンピュータ可読コードは、分散式に記憶され実行される。
【0109】
これらの方法工程は特有の順序で記載されるが、他のハウスキーピング工程がこれらの工程の間に行われる場合がある、あるいは工程がわずかに異なる時間に行われるように調整される場合、またはオーバーレイ演算の処理が所望される方法で行われる限り、この処理に関連する様々なインターバルで工程の処理作業が行われることを可能にする特定のシステム内に分散される場合もあることを理解されたい。
【0110】
理解を明確にする目的で上述の発明を一部の詳細において記載してきたが、添付の特許請求の範囲の範囲内で特定の変更及び修正を実施することができることは明らかであろう。したがって本実施形態は、限定ではなく、例示とみなすべきであり、また本発明は、本明細書に提示される詳細に限定されるものではなく、記載される実施形態の範囲及び均等物の範囲内で修正される場合がある。