説明

シミュレーションシステム

【課題】クライアントとサーバとの間でシミュレーション結果に生じるずれを低減できるシミュレーションシステムを提供する。
【解決手段】サーバ2がシミュレーションを実行した結果得られる1又は複数のオブジェクトの挙動に関するイベント情報を当該挙動のタイミングを示すタイミング情報とともにクライアント3に通知し、クライアント3がサーバ2から通知されるイベント情報を用いて少なくとも一部のオブジェクトの挙動に関するシミュレーションを実行するシミュレーションシステムであって、クライアント3は、サーバ2によるシミュレーションの実行より遅れたタイミングでシミュレーションを実行するとともに、タイミング情報に応じて決まるタイミングで、イベント情報に係るオブジェクトの挙動を生じさせるシミュレーションシステムである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、サーバ及びクライアントのそれぞれが1又は複数のオブジェクトの挙動に関するシミュレーションを実行するシミュレーションシステム、当該シミュレーションシステムを構成するクライアント、その制御方法、プログラム、及び情報記憶媒体に関する。
【背景技術】
【0002】
例えばオンラインゲームなどにおいては、1又は複数のオブジェクトの挙動を決定するために、物理シミュレーションなどのシミュレーション処理が実行されることがある。通常、このシミュレーションはサーバにおいて実行され、クライアントは、サーバからシミュレーション処理の実行結果を受領してユーザに提示する。この場合において、通信量を低減するなどの目的で、クライアント側でも、サーバから通知される各オブジェクトの挙動に関する情報(例えば各オブジェクトの位置や速度、加速度など)を利用しながら、少なくとも一部のオブジェクトについて、サーバが実行しているのと同様のシミュレーション処理を実行する場合がある。
【発明の開示】
【発明が解決しようとする課題】
【0003】
上記従来例の技術において、イベント情報をサーバからクライアントに通知する際に通信の遅延が生じると、サーバとクライアントとの間でシミュレーションの実行結果にずれが生じるおそれがある。例えば、サーバ側で同時期に発生した複数のイベントが、時間的にずれてクライアントに到達し、クライアント側で異なるタイミングで発生したと認識されてしまう場合や、サーバ側でイベントが発生した順序と異なる順序でイベント情報がクライアントに到達して、サーバと異なる順序でイベントが発生したと認識されてしまう場合などがあり得る。特に物理シミュレーションなどでは、このようなイベント発生タイミングに生じるずれは、たとえクライアントへのイベント情報到達時にはわずかなものであったとしても、結果としてサーバ側のシミュレーション実行結果とクライアント側のシミュレーション実行結果に大きな違いを生じさせることがある。
【0004】
図6は、このような問題の一例を示す図であって、ビリヤードゲームにおけるボールの挙動をシミュレートするシミュレーションシステムにおける、シミュレーション対象となる仮想空間(ここではビリヤードテーブルに対応している)内の状態変化を示している。具体的に、この図の例では、ビリヤードテーブル内に配置された3個のボールB1、B2及びB3をシミュレーション対象のオブジェクトとして、これら各ボールの仮想空間内における挙動を、物理シミュレーションによって演算している。また、この図の例では、各ボールがビリヤードテーブルの壁(クッション)や他のボールと衝突してその移動方向や移動速度を変化させる事象を、イベント情報Eとしてサーバからクライアントに通知することとしている。
【0005】
図6内の各矩形領域は、サーバ又はクライアントのシミュレーションによって算出される、ある時点での仮想空間の状態を示している。具体的に、紙面向かって左側の各矩形領域がサーバ側のシミュレーション結果を、右側の各矩形領域がクライアント側のシミュレーション結果を、それぞれ示している。また、各矩形領域に付された変数tの値は、仮想空間内における時間の進行を示すタイムカウンタの値であって、シミュレーション処理における時間の進行に伴って、このタイムカウンタtの値が所定時間(例えば1/30秒)ごとに1ずつ増加していく。すなわち、図6においては、図の下方に行くほど時間が進行した状態を示している。
【0006】
図6によれば、サーバ側において、t=0のタイミングで、ボールB1及びB2のそれぞれが壁に衝突して反射するイベントE1及びE2が発生している。なお、図中、ボールに付された矢印は、各時点でのボールの移動方向を示している。ここで、サーバ側で発生したイベントのうち、イベントE1は直ちにクライアントに通知され、一方でイベントE2はタイムカウンタ値1つ分の時間だけ遅れてクライアントに通知されたものとする。この場合、クライアントでは、t=0のタイミングにおいてボールB1が壁で反射し、これに遅れてt=1のタイミングでボールB2が壁で反射したものとして、その後の各ボールの動きをシミュレートする。
【0007】
図示されるように、サーバ側では、t=5のタイミングでボールB2とボールB3が衝突するイベントE3が発生する。その後、t=6のタイミングで、互いに反射したボールB2とボールB3の間をボールB1が通過している。一方、クライアントでは、ボールB2の移動開始がt=0のタイミングではなくt=1のタイミングだったために、サーバ側のシミュレーション結果と異なり、t=5のタイミングではボールB2とボールB3の衝突が発生せず、t=6のタイミングで両者の衝突が発生している。なお、ここでは、イベントE3も遅延してクライアントに到達していることとしている。そのため、t=5のタイミングでボールB2に関するサーバとクライアントとの間の状態のずれは解消されない。この結果、クライアント側では、ボールB2とボールB3が衝突するタイミングで、ボールB1もボールB2及びB3に衝突している。そのため、その後の各ボールの動きは、サーバ側とは全く異なってしまっている。このずれは、その後、各ボールが壁に衝突するなどの新たなイベントがサーバ側で発生し、クライアント側に通知されることによって解消されるが、その際におけるクライアントの表示は、ボールが突然ビリヤードテーブル内の全く別の場所に瞬間移動するなどの不自然なものになってしまう。
【0008】
本発明は上記実情を考慮してなされたものであって、その目的の一つは、クライアントとサーバとの間でシミュレーション結果に生じるずれを低減することのできるシミュレーションシステム、当該シミュレーションシステムを構成するクライアント、その制御方法、プログラム、及び情報記憶媒体を提供することにある。
【課題を解決するための手段】
【0009】
本発明に係るシミュレーションシステムは、クライアントとサーバとを含むシミュレーションシステムであって、前記サーバは、仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバシミュレーション実行手段と、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記クライアントに通知するイベント情報通知手段と、を含み、前記クライアントは、前記サーバから通知されるイベント情報を受領するイベント情報受領手段と、前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するクライアントシミュレーション実行手段と、を含み、前記クライアントシミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【0010】
上記シミュレーションシステムにおいて、前記イベント情報受領手段は、前記受領したイベント情報のそれぞれを、タイミング情報ごとに確保される複数のイベントキューのうち、当該イベント情報とともに受領したタイミング情報に対応するイベントキューに格納し、前記クライアントシミュレーション実行手段は、前記複数のイベントキューのそれぞれについて、当該イベントキューに格納された複数のイベント情報に係る前記各オブジェクトの挙動が同時期に生じるように、前記シミュレーションを実行することとしてもよい。
【0011】
また、上記シミュレーションシステムにおいて、前記クライアントは、前記1又は複数のオブジェクトのいずれかの挙動に関するユーザの指示を受け付けて、当該指示の内容を示すユーザ指示情報を前記サーバに通知するユーザ指示情報通知手段をさらに備え、前記サーバシミュレーション実行手段は、前記通知されるユーザ指示情報を前記クライアントから受け付けたタイミングで、当該ユーザ指示情報に係るオブジェクトの挙動を生じさせ、前記イベント情報通知手段は、前記通知されるユーザ指示情報に応じたオブジェクトの挙動に関するイベント情報を、当該ユーザ指示情報を前記サーバシミュレーション実行手段が受け付けたタイミングを示すタイミング情報とともに、前記クライアントに通知することとしてもよい。
【0012】
また、上記シミュレーションシステムにおいて、前記複数のイベントキューは、前記クライアントによるシミュレーションの実行が前記サーバによるシミュレーションの実行より遅れる時間に応じた数だけ確保されることとしてもよい。
【0013】
また、上記シミュレーションシステムにおいて、前記クライアントシミュレーション実行手段は、前記サーバから前記クライアントへのデータ送信の所要時間に応じて決まる時間だけ、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションの実行を前記サーバによるシミュレーションの実行より遅らせることとしてもよい。
【0014】
また、上記シミュレーションシステムにおいて、前記クライアントは、前記クライアントシミュレーション実行手段によるシミュレーションの実行結果をユーザに提示するシミュレーション結果提示手段をさらに備え、前記シミュレーション結果提示手段は、前記ユーザ指示情報通知手段が前記ユーザの指示を受け付けた場合に、前記ユーザ指示情報に係るシミュレーション結果の提示に先立って、当該受け付けた指示に応じた所定の表示を行うこととしてもよい。
【0015】
また、本発明に係るクライアントは、仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントであって、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段と、前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段と、を含み、前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【0016】
また、本発明に係るクライアントの制御方法は、仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントの制御方法であって、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領ステップと、前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行ステップと、を含み、前記シミュレーション実行ステップでは、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【0017】
また、本発明に係るプログラムは、仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントを、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段、及び前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段、として機能させるプログラムであって、前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。このプログラムは、コンピュータ読み取り可能な情報記憶媒体に記憶されてよい。
【発明を実施するための最良の形態】
【0018】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【0019】
本実施形態に係るシミュレーションシステム1は、図1に示すように、サーバ2と、複数のクライアント3と、を含んで構成されている。サーバ2と各クライアント3とは、互いにインターネット等の通信ネットワークを介して接続されている。
【0020】
サーバ2は、サーバコンピュータ等の情報処理装置であって、図1に示すように、制御部11と、記憶部12と、通信部13と、を含んで構成されている。
【0021】
制御部11は、CPU等を含んで構成され、記憶部12に格納されているプログラムに従って各種の情報処理を実行する。本実施形態において制御部11が実行する処理の具体例については、後述する。
【0022】
記憶部12は、RAMやROM等のメモリ素子、ハードディスクなどを含んで構成されており、制御部11が実行するプログラムや、各種のデータを記憶する。また、記憶部12は、制御部11のワークメモリとしても動作する。
【0023】
通信部13は、通信インタフェースであって、通信ネットワークを介して外部から到来するデータを受信し、制御部11に対して出力する。また、制御部11からの指示に従って、通信ネットワークを介して接続された他の情報処理装置に対して各種のデータを送信する。
【0024】
クライアント3は、例えば家庭用ゲーム機やパーソナルコンピュータ等の情報処理装置であって、図2に示すように、制御部21と、記憶部22と、通信部23と、操作部24と、表示部25と、を含んで構成されている。制御部21、記憶部22、及び通信部23は、それぞれ制御部11、記憶部12、及び通信部13と同様の構成であってよい。
【0025】
操作部24は、家庭用ゲーム機のコントローラやキーボード、マウス等であって、ユーザの操作指示を受け付けて、制御部11に対して出力する。また、表示部25は、家庭用テレビ受像機や液晶ディスプレイ等であって、制御部11の指示に従って、各種の情報をユーザに提示する。
【0026】
以下、本実施形態に係るシミュレーションシステム1によって実現される機能の具体例について、説明する。本実施形態では、サーバ2は、仮想空間内に配置された1又は複数のオブジェクトの挙動を、物理シミュレーション等のシミュレーション処理によって演算する。なお、シミュレーション対象となるオブジェクトは、各クライアント3のユーザによって操作可能なオブジェクトを含んでもよいし、それ以外のオブジェクトを含んでもよい。サーバ2は、シミュレーションの結果得られる各オブジェクトの挙動に関するイベント情報を、各クライアント3に通知する。クライアント3は、サーバ2から通知されたイベント情報を利用しながら、サーバ2で実行されているシミュレーション処理の少なくとも一部を実行し、その結果得られる仮想空間内における各オブジェクトの挙動を、表示部25の画面に表示するなどの方法でユーザに提示する。
【0027】
シミュレーションシステム1は、機能的に、図3に示すように、ユーザ指示通知部31と、ユーザ指示受領部32と、サーバシミュレーション実行部33と、イベント情報通知部34と、イベント情報受領部35と、クライアントシミュレーション実行部36と、シミュレーション結果提示部37と、を含んで構成されている。これらの機能のうち、ユーザ指示受領部32、サーバシミュレーション実行部33、及びイベント情報通知部34は、サーバ2の制御部11が記憶部12に格納されたプログラムを実行することによって、実現される。また、ユーザ指示通知部31、イベント情報受領部35、クライアントシミュレーション実行部36、及びシミュレーション結果提示部37は、各クライアント3の制御部21が記憶部22に格納されたプログラムを実行することによって、実現される。これらのプログラムは、インターネット等の通信ネットワークを介して提供されてもよいし、光ディスク等のコンピュータ読み取り可能な各種の情報記憶媒体に格納されて提供されてもよい。
【0028】
クライアント3のユーザ指示通知部31は、ユーザの操作部24に対する指示操作を受け付ける。具体的に、本実施形態では、シミュレーションの対象となるオブジェクトの挙動を変化させるユーザの指示を受け付けて、当該ユーザ指示の内容を示す情報(以下ではユーザメッセージという)をサーバ2に送出する。例えばユーザメッセージは、仮想空間内に配置されたいずれかのオブジェクトの現在の座標値や移動方向、移動速度などを指示する情報であってもよいし、当該オブジェクトに対して各種の動作を指示する情報であってもよい。
【0029】
なお、ユーザ指示通知部31は、ユーザから受け付けた所定の種類の指示については、その内容に応じた表示を直ちに行うために、当該指示があった旨の通知、又はサーバ2に送出したものと同様のユーザメッセージをシミュレーション結果提示部37に対して出力してもよい。このユーザの指示に応じたシミュレーション結果提示部37の処理については、後述する。
【0030】
サーバ2のユーザ指示受領部32は、各クライアント3のユーザ指示通知部31が通知するユーザメッセージを受領し、サーバシミュレーション実行部33に対して出力する。
【0031】
サーバ2のサーバシミュレーション実行部33は、ユーザ指示受領部32が受領するユーザメッセージ、及び予め規定された各種の条件を用いて、仮想空間内に配置された各オブジェクトの挙動に関するシミュレーション処理を実行する。このシミュレーション処理は、例えば物体の物理的な運動の過程や物体同士の衝突等の相互作用による影響を計算する公知の物理シミュレーションプログラムによって実現されてよい。このシミュレーション処理によって、所定の単位時間tuごとに、各オブジェクトの仮想空間内における位置や向き、移動速度、回転速度、加速度などの、各オブジェクトの挙動を示すパラメタの値が算出される。なお、この単位時間tuは、例えばクライアント2が表示画面を描画する際のフレームレートに応じた時間であってもよい。以下では、仮想空間内における時間の進行は、タイムカウンタtの値によって表されるものとする。すなわち、サーバシミュレーション実行部33は、仮想空間内の時間を単位時間tuだけ進行させるごとに、タイムカウンタtの値を1増分させるとともに、当該タイムカウンタtの値によって表される時点における各オブジェクトの状態を算出する。
【0032】
サーバシミュレーション実行部33は、シミュレーション処理の結果得られる、各オブジェクトの挙動に関する情報を、各クライアント3への通知対象となるイベント情報として、イベント情報通知部34に対して出力する。ここで、サーバシミュレーション実行部33は、各オブジェクトの挙動に関するイベント情報を、当該変化の生じるタイミングを示すタイミング情報(ここでは、変化発生時のタイムカウンタtの値)とともに出力することとする。
【0033】
出力の対象とするイベント情報は、所定の条件を満たす各オブジェクトの挙動の変化を示すものであってよい。この場合の所定の条件としては、例えば移動スピードや移動方向などの各オブジェクトの挙動に関する所定のパラメタが単位時間tuあたり所定の閾値以上変化したことを示すものなどがある。また、イベント情報出力の条件は、シミュレーションの内容に応じて定められてもよい。例えばビリヤードゲームにおけるボールの挙動をシミュレートする場合、ビリヤードのボールの挙動が大きく変化するのは、各ボールが他のボールやビリヤードテーブルのクッションに衝突した時である。このようなオブジェクト同士の相互作用に起因する事象は、わずかな数値の誤差などによって計算結果に大きな違いが生じる可能性が高い。そこで、このような事象をイベント情報として各クライアント3に送信することで、各オブジェクトの挙動に関する情報を単位時間tuごとに全て各クライアント3へ送信せずとも、各オブジェクトの挙動をクライアント3側で精度よく再現できるようになる。
【0034】
さらに、ユーザ指示によって直接オブジェクトに挙動の変化が生じる場合については、当該挙動の変化を各クライアント3に通知しないと、当該指示を行ったユーザの使用するクライアント3以外の他のクライアント3では、このような挙動の変化をシミュレーション結果に反映することができない。そこで、サーバシミュレーション実行部33は、当該挙動の変化をイベント情報として出力対象とすることとする。例えば前述したビリヤードゲームの例では、サーバシミュレーション実行部33は、ユーザ指示受領部32が受領したユーザメッセージに応じて、各ボールを新たに所定方向に所定の速さで移動させ始める場合に、当該移動の開始を示すイベント情報を出力する。
【0035】
なお、この場合において、サーバシミュレーション実行部33は、ユーザがクライアント3に対してオブジェクトの挙動に関する指示を行ったタイミングではなく、その指示の内容を示すユーザメッセージを当該クライアント3から受け付けたタイミングで、ユーザの指示に応じたオブジェクトの挙動を生じさせる。そのため、各クライアント3は、他のクライアント3を使用するユーザの指示に応じたイベント情報だけでなく、当該クライアント3自身を使用するユーザの指示に応じたオブジェクトの挙動に関する情報についても、前述の通りサーバ2に送信し、他のイベント情報と同様にサーバ2から受領することとなる。これによって、各クライアント3は、当該クライアント3自身のユーザによる指示に応じたオブジェクトの挙動と、他のクライアント3のユーザによる指示に応じたオブジェクトの挙動と、を一元的に処理することができる。
【0036】
サーバ2のイベント情報通知部34は、サーバシミュレーション実行部33が出力するイベント情報及びタイミング情報の組を、各クライアント3に対して通知する。なお、イベント情報通知部34は、サーバシミュレーション実行部33が出力するイベント情報のそれぞれを、必ずしも全てのクライアント3に対して通知せずともよい。後述するように、各クライアント3は、サーバシミュレーション実行部33が実行しているシミュレーション処理と同様のシミュレーション処理を実行するが、自分自身がユーザに提示するために必要な範囲でシミュレーション処理を実行すればよく、サーバシミュレーション実行部33が実行するシミュレーション処理の全てを実行する必要はない。そこで、イベント情報通知部34は、複数のクライアント3のそれぞれを利用するユーザに対応づけられたユーザオブジェクトの仮想空間内における配置位置や、当該クライアント3がユーザに提示する画面を生成するために仮想空間内に設定される視点位置などに基づいて、このようなユーザオブジェクトの配置位置や視点位置及びその近傍を含む所定範囲に存在するオブジェクトの挙動に関するイベント情報だけを、当該クライアント3に対して通知することとしてもよい。
【0037】
クライアント3のイベント情報受領部35は、サーバ2のイベント情報通知部34が通知する各イベント情報を受領して、記憶部22内に確保されたイベントキューに当該各イベント情報を一時的に格納する。本実施形態において、このイベントキューは、各イベントの発生タイミングを示すタイミング情報(すなわち、タイムカウンタt)の値ごとに、それぞれ独立して確保されることとする。図4は、このようなイベントキューの一例を示しており、丸印のそれぞれがイベントキューに格納された個々のイベント情報を模式的に示している。図4においては、t=0〜9までの計10個のタイムカウンタtの値のそれぞれに応じてイベントキューが確保されており、サーバ2から送信されたイベント情報のそれぞれは、当該イベント情報に関連づけられたタイムカウンタtの値に対応するイベントキュー内に格納される。
【0038】
クライアント3のクライアントシミュレーション実行部36は、イベント情報受領部35によってイベントキューに格納されたイベント情報を用いて、仮想空間内に配置されるオブジェクトのうち、少なくとも一部のオブジェクトの挙動に関して、サーバシミュレーション実行部33によって実行されるシミュレーション処理と同様のシミュレーション処理を実行する。具体的に、例えばクライアントシミュレーション実行部36は、前述したように、クライアント3に対応づけられたユーザオブジェクトの配置位置や、表示部25に表示中の表示画面を生成するために仮想空間内に設定された視点位置などの周囲の所定範囲を対象として、当該所定範囲に含まれるオブジェクトについて、サーバシミュレーション実行部33が実行している処理と同種のシミュレーション処理を実行する。なお、クライアントシミュレーション実行部36が実行するシミュレーション処理は、サーバ2側で実行されるシミュレーション処理より計算精度を落としたものであってもよい。このとき、クライアントシミュレーション実行部36は、イベントキューに格納されたイベント情報によって示される各オブジェクトの挙動が生じるように、シミュレーション処理を実行することとする。
【0039】
ただし、本実施形態では、クライアントシミュレーション実行部36は、サーバ2によるシミュレーション処理の実行より遅れたタイミングで、サーバ2によるシミュレーション処理と同様のシミュレーション処理を実行する。具体例として、実時間のある時刻Tにおいてタイムカウンタt=0における仮想空間内の各オブジェクトの挙動がサーバシミュレーション実行部33によって演算されたものとすると、クライアントシミュレーション実行部36は、当該時点Tより遅延時間dだけ遅れた時刻T+dが到来したタイミングで、同じt=0における各オブジェクトの挙動を演算する。ここで、遅延時間dは、予め定められた時間であってもよいし、例えばサーバ2からクライアント3へのデータ送信に必要な所要時間を予め計測することによって、当該計測された所要時間に応じて決定されてもよい。この場合、サーバ2は、各クライアント3との間でデータ送信の所要時間の計測を複数回実行して、その平均値や分散値に応じて遅延時間dを決定し、各クライアント3に通知してもよい。また、サーバ2に接続される各クライアント3のうち、最もデータ通信に時間がかかったクライアント3についての所要時間に応じて、遅延時間dを決定することとしてもよい。
【0040】
なお、前述したタイムカウンタごとに確保するイベントキューの数は、この遅延時間dに応じて決定される。例えば、遅延時間dを単位時間tuで除してなる数(d/tu)に応じた数だけ、それぞれタイムカウンタの値に対応するイベントキューが用意されることとする。これによって、遅延時間dに応じて決まる時間範囲にわたって、イベント情報受領部35はサーバ2から受信したイベント情報をキューイングしておくことができる。
【0041】
さらに、クライアントシミュレーション実行部36は、各イベントキューに格納された各イベント情報に係るオブジェクトの挙動を、当該イベントキューが対応づけられたタイムカウンタ値に応じて決まるタイミングで生じさせるように、シミュレーション処理を実行する。
【0042】
具体例として、実時間の時刻Tにおけるサーバ2側のシミュレーションによってタイムカウンタt=0で発生したイベント情報は、ある通信時間だけかかってクライアント3に到来する。この通信時間の最大値より長い時間を遅延時間dとすることによって、タイムカウンタt=0に関連づけられた全てのイベント情報を受信し終えるまで、クライアント3側ではt=0の時点についてのシミュレーションを開始しないようにすることができる。そして、クライアント3側でt=0の時点についてのシミュレーションを開始すべき時刻T+dになるまでの間に、クライアント3が受信したt=0時点についてのイベント情報は、全てt=0に対応するイベントキューに格納されることとなる。時刻T+dになると、クライアントシミュレーション実行部36は、このt=0に対応するイベントキューに格納された各イベント情報によって示されるイベント内容を反映しながら、各オブジェクトの挙動に関するシミュレーション処理を実行し、その結果得られる各オブジェクトの状態を示す情報(各オブジェクトのt=0における位置や向きなど)を、シミュレーション結果提示部37に対して出力する。
【0043】
また、このt=0についてのシミュレーションが実行されると、t=0のイベント情報が格納されたイベントキューの内容は不要となるので、イベント情報受領部35は、t=0に対応するイベントキューの内容を消去して、代わりに、まだイベントキューが記憶部22内に確保されていない次のタイムカウンタtの値(図4の例ではt=10)に対応するイベントキューを新たに確保する。このような処理が単位時間tuごとに繰り返されることによって、クライアント3のクライアントシミュレーション実行部36は、サーバシミュレーション実行部33に対して遅延時間dだけ遅れて、直近の過去d時間の間にサーバ2から受信したイベント情報の内容を反映しながら、サーバシミュレーション実行部33が実行したシミュレーション処理の少なくとも一部を実行することになる。
【0044】
これによって、クライアントシミュレーション実行部36は、サーバ2側のシミュレーションにおいて発生した各イベントについては、当該各イベント情報のクライアント3に対する到達時期に関わらず、サーバ2側で発生した順序及び時間間隔と同じ順序及び時間間隔で発生するものとして、シミュレーション処理を実行することができる。特に、サーバ2側で同時期に発生した複数のイベントについては、当該各イベント情報がクライアント3に到達した時期のばらつきに関わらず、同時期に発生するものとして、シミュレーション処理を実行することになる。その結果、クライアントシミュレーション実行部36は、サーバシミュレーション実行部33によるシミュレーション処理によって決定される各オブジェクトの挙動とずれを低減しつつ、各オブジェクトの挙動を再現することができる。
【0045】
クライアント3のシミュレーション結果提示部37は、クライアントシミュレーション実行部36によるシミュレーション処理の結果得られる、各オブジェクトの挙動を表す画像を、表示部25の画面に表示することによって、ユーザに提示する。具体的に、シミュレーション結果提示部37は、クライアントシミュレーション実行部36の処理結果に応じて、単位時間tuごとに表示を更新することで、サーバシミュレーション実行部33によって実行されたシミュレーション結果と同様の各オブジェクトの挙動を、ユーザに提示することができる。
【0046】
以下、本実施形態に係るシミュレーションシステム1が実行するシミュレーション処理の具体例について、図5を用いて説明する。ここでも、図6と同様に、仮想空間であるビリヤードテーブル内に3個のボールB1、B2及びB3が配置されたビリヤードゲームを例として用いる。また、紙面左側の各矩形領域がサーバ2によるシミュレーション結果を、紙面右側の各矩形利用域がクライアント3によるシミュレーション結果を、それぞれ示しているのも同様である。
【0047】
図5の例では、まずタイムカウンタt=0のタイミングにおいて、サーバ2のサーバシミュレーション実行部33は、ボールB1が壁に衝突して反射するイベントE1、及びボールB2がユーザの指示に応じて移動開始するイベントE2のそれぞれを示すイベント情報を出力する。ここで、各イベント情報のクライアント3への到達時間にはずれが生じているが、これらのイベント情報はいずれもt=0に対応するイベントキューに格納される。なお、図中における太い矢印は、t=0に対応するイベントキューへのバッファリングが行われる期間を示している。そして、サーバ2においてt=0のシミュレーションが実行された時点から遅延時間dが経過したタイミングで、クライアント3のクライアントシミュレーション実行部36は、t=0に対応するイベントキューに格納された2個のイベント情報を用いて、t=0におけるシミュレーションを実行する。これによって、クライアント3のシミュレーション処理でも、イベントE1及びE2は同時期に発生し、その後のボールの動きについても、クライアント3側で独自に実行される物理シミュレーションによって、サーバ2側のシミュレーション結果と同様に順次計算されていく。
【0048】
その後、サーバ2側において、t=5のタイミングでボールB2とボールB3が衝突するイベントE3が発生すると、当該イベント内容を示すイベント情報がクライアント3に送信される。このイベント情報も、イベントE1及びイベントE2の場合と同様に、クライアント3においてt=5に対応するイベントキューに一旦格納され、そのイベント内容はクライアントシミュレーション実行部36によるシミュレーション処理に直ちには反映されない。その後、サーバ2におけるクライアントシミュレーション実行部36がt=5についてのシミュレーション処理を実行する際に、イベントE3の内容が反映される。その結果、サーバ2側におけるシミュレーション結果と同様の結果が、クライアント3側でもt=5のタイミングにおいて発生することとなる。なお、イベント情報の到達に遅延時間d以上の時間がかかったなどの理由で、サーバ2側のシミュレーションとクライアント3側のシミュレーションとの間でずれが生じてしまった場合にも、後にサーバ2から到達するイベント情報の内容をクライアント3側のシミュレーションに反映することによって、このずれを補正することができる。
【0049】
なお、サーバ2とクライアント3との間の通信回線の状況などによって、予め設定された遅延時間dを超えてデータ送信に時間がかかってしまい、既にクライアントシミュレーション実行部36でシミュレーションが実行されてしまったタイムカウンタtの値に関連づけられたイベント情報が到来した場合には、クライアント3は、以下のような処理を実行してもよい。すなわち、イベント情報受領部35が、受領したイベント情報をイベントキューには格納せずに直ちにクライアントシミュレーション実行部36に出力し、クライアントシミュレーション実行部36は、当該イベント情報の内容を直ちに現時点で実行中のシミュレーション処理に反映することとする。さらに、クライアントシミュレーション実行部36は、遅延時間dを長くする補正を行うこととし、イベントキューを確保するタイムカウンタtの数を増やしてもよい。また、仮想空間内の時間の進み方が一時的に遅くなるように、シミュレーション処理を実行してもよい。また、複数ユーザ参加型のゲームなどにおいては、ユーザ間の公平性を担保するために、各クライアント3の遅延時間dを揃えておくほうが望ましい場合があるので、この場合には、サーバ2を介して各クライアント3に遅延時間dの補正を行う指示を行い、他のクライアント3についても同様の補正を実行させることとしてもよい。
【0050】
また、サーバ2及びクライアント3のいずれかで、処理負荷等に起因してシミュレーション処理の実行に想定以上の時間がかかってしまうと、サーバ2とクライアント3との間で、シミュレーション処理におけるタイムカウンタtの値に、予め設定された遅延時間dによるもの以外のずれが生じる場合もありえる。具体的に、サーバ2側のシミュレーションがクライアント3側のシミュレーションよりも遅れた場合、各クライアント3は、前述した遅延時間dを長くする補正と同様に、一時的に仮想空間内の時間の進み方を遅らせることとしてもよい。逆に、クライアント3側のシミュレーションがサーバ2側のシミュレーションよりも遅れた場合、まだイベントキューが確保されていないタイムカウンタ値に関連づけられたイベント情報がクライアント3に到来してしまう可能性がある。このようなイベント情報が到来した場合には、クライアント3は、このようなイベント情報を予備のイベントキューに一時的に格納するとともに、クライアントシミュレーション実行部36によるシミュレーション処理における、仮想空間内の時間の進み方を一時的に速めることとしてもよい。その後、イベントキューが確保されていないタイムカウンタ値に関連づけられたイベント情報が来なくなれば、シミュレーション処理の進行が元に戻ったと判断して、予備のイベントキューの使用を止め、仮想空間内の時間の進み方を元に戻せばよい。
【0051】
このように、以上説明した実施形態に係るシミュレーションシステム1では、クライアント3が遅延時間dの間だけサーバ2から送信されるイベント情報をキューイングしておき、イベント情報とともに通知されるタイミング情報に応じたタイミングでイベントが発生するようにサーバ2側より遅れてシミュレーションを実行することで、サーバ2とクライアント3との間で生じるシミュレーション結果のずれを低減できる。
【0052】
ただ、本実施形態に係るシミュレーションシステム1においては、シミュレーション結果提示部37がユーザに提示するシミュレーション結果の画像は、サーバ2によるシミュレーション処理の実行よりも遅延時間dの分だけ遅れることになる。そのため、例えばユーザが表示部25に表示された画像に合わせてあるタイミングで操作部24を操作し、表示されているオブジェクトに対する操作指示を行ったとしても、その内容は、遅延時間dと、当該指示の内容を示すユーザメッセージがサーバ2まで到達する通信所要時間αと、を合算した分だけ遅れてサーバ2のシミュレーション結果に反映されることとなる。
【0053】
具体例として、t=nにおけるシミュレーション結果が表示されたタイミングでユーザがオブジェクトに対する操作指示を行ったとすると、その時点においてサーバ2ではt=n+(d/tu)のタイミングに係るシミュレーション処理が実行中であることになる。そのため、当該ユーザの指示内容を示すイベント情報がクライアント3からサーバ2に通信所要時間αだけかかって到達した時には、それより後のタイミング(具体的には、t=n+(d+α)/tuのタイミング)に係るシミュレーション処理が実行されており、ユーザの指示に応じたイベントは、当該タイミングで発生したものとみなされる。つまり、t=nの時点で操作指示を行ったつもりのユーザの認識よりも、遅れて当該指示の内容が反映されることになる。
【0054】
そこで、本実施形態において、クライアント3は、ユーザにそのような遅延に起因する違和感を生じさせないようにするために、ユーザの指示に応じて、当該指示内容に応じたシミュレーション結果の提示に先立って、当該シミュレーション結果とは異なる所定の表示を行うこととしてもよい。この表示は、ユーザの指示があった時点においてシミュレーション結果提示部37が行っているシミュレーション結果の表示と重ねて行ってもよい。具体的に、ユーザ指示通知部31は、ユーザの操作部24に対する操作を受け付けると、当該操作に応じたユーザメッセージをサーバ2に送信するとともに、当該操作が所定の操作である場合には、ユーザメッセージの内容をシミュレーション結果提示部37にも出力する。シミュレーション結果提示部37は、そのユーザメッセージを受けて、当該時点でのシミュレーション結果を提示する表示画像に重ねて、所定の動画像の表示を開始する。この動画像は、遅延時間dに応じた時間の動画像であってよい。また、この動画像は、ユーザによる指示操作の対象となったオブジェクトについてのシミュレーション結果が表示されている画像内の位置に、重ねて表示されてもよい。さらに、シミュレーション結果提示部37は、当該ユーザ指示の対象となったオブジェクトに係るイベント情報が、クライアントシミュレーション実行部36のシミュレーション処理に用いられて、その結果を提示するタイミングにおいて、当該動画像の内容を変化させ、又は当該動画像の表示を終了することとしてもよい。
【0055】
具体的に、前述したビリヤードゲームの例において、ユーザがボールの移動を開始させる指示操作を行ったときの動画像の例について、説明する。この場合、クライアント3は、指示操作の内容を示すユーザメッセージをサーバ2に送出するとともに、当該指示操作の対象となったボールの位置、及びユーザの指示する方向に応じて、表示部25の画面上に移動するキュースティックを表す動画像を表示させる。このときの動画像は、キュースティックが指示対象のボールから一旦離れた後、当該ボールを撞く動きを示す動画像であってもよい。あるいは、クライアント3は、ユーザの指示を受け付けた時点では、まずキュースティックがボールから離れる向きに移動する動画像だけを所定の動画像として表示してもよい。この場合、クライアント3は、サーバ2に送出したユーザメッセージに対応するイベント情報を受領し、当該イベント情報に応じて指示されたボールの移動開始を示すシミュレーション結果を表示するタイミングで、このボールの移動開始に合わせて、さらにボールをキュースティックで撞く動きを表す動画像を表示する。このような制御によれば、ユーザが指示操作を行ってから、その内容がシミュレーション結果に反映されるまでにタイムラグが生じるにも関わらず、そのタイムラグを不自然に感じさせないような演出を、遅延時間dだけ遅れたシミュレーション処理を妨げずに、実現することができる。
【0056】
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明においてはサーバ2に対して複数のクライアント3が接続されることとしたが、クライアント3は1つだけサーバ2に接続されるのであっても構わない。また、サーバ2及びクライアント3で実行されるシミュレーションの種類も、物理シミュレーションに限らず各種のものであってよい。
【図面の簡単な説明】
【0057】
【図1】本発明の実施の形態に係るシミュレーションシステムの全体概要を示す概要図である。
【図2】本発明の実施の形態に係るクライアントの構成例を示す構成ブロック図である。
【図3】本発明の実施の形態に係るシミュレーションシステムによって実現される機能例を示す機能ブロック図である。
【図4】イベントキューの一例を示す図である。
【図5】本実施形態に係るシミュレーションシステムによるシミュレーション結果の一例を示す図である。
【図6】関連技術に係るシミュレーションシステムによるシミュレーション結果の一例を示す図である。
【符号の説明】
【0058】
1 シミュレーションシステム、2 サーバ、3 クライアント、11,21 制御部、12,22 記憶部、13,23 通信部、24 操作部、25 表示部、31 ユーザ指示通知部、32 ユーザ指示受領部、33 サーバシミュレーション実行部、34 イベント情報通知部、35 イベント情報受領部、36 クライアントシミュレーション実行部、37 シミュレーション結果提示部。

【特許請求の範囲】
【請求項1】
クライアントとサーバとを含むシミュレーションシステムであって、
前記サーバは、
仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバシミュレーション実行手段と、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記クライアントに通知するイベント情報通知手段と、
を含み、
前記クライアントは、
前記サーバから通知されるイベント情報を受領するイベント情報受領手段と、
前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するクライアントシミュレーション実行手段と、
を含み、
前記クライアントシミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするシミュレーションシステム。
【請求項2】
請求項1記載のシミュレーションシステムにおいて、
前記イベント情報受領手段は、前記受領したイベント情報のそれぞれを、タイミング情報ごとに確保される複数のイベントキューのうち、当該イベント情報とともに受領したタイミング情報に対応するイベントキューに格納し、
前記クライアントシミュレーション実行手段は、前記複数のイベントキューのそれぞれについて、当該イベントキューに格納された複数のイベント情報に係る前記各オブジェクトの挙動が同時期に生じるように、前記シミュレーションを実行する
ことを特徴とするシミュレーションシステム。
【請求項3】
請求項1又は2に記載のシミュレーションシステムにおいて、
前記クライアントは、前記1又は複数のオブジェクトのいずれかの挙動に関するユーザの指示を受け付けて、当該指示の内容を示すユーザ指示情報を前記サーバに通知するユーザ指示情報通知手段をさらに備え、
前記サーバシミュレーション実行手段は、前記通知されるユーザ指示情報を前記クライアントから受け付けたタイミングで、当該ユーザ指示情報に係るオブジェクトの挙動を生じさせ、
前記イベント情報通知手段は、前記通知されるユーザ指示情報に応じたオブジェクトの挙動に関するイベント情報を、当該ユーザ指示情報を前記サーバシミュレーション実行手段が受け付けたタイミングを示すタイミング情報とともに、前記クライアントに通知する
ことを特徴とするシミュレーションシステム。
【請求項4】
請求項2に記載のシミュレーションシステムにおいて、
前記複数のイベントキューは、前記クライアントによるシミュレーションの実行が前記サーバによるシミュレーションの実行より遅れる時間に応じた数だけ確保される
ことを特徴とするシミュレーションシステム。
【請求項5】
請求項1から4のいずれか一項に記載のシミュレーションシステムにおいて、
前記クライアントシミュレーション実行手段は、前記サーバから前記クライアントへのデータ送信の所要時間に応じて決まる時間だけ、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションの実行を前記サーバによるシミュレーションの実行より遅らせる
ことを特徴とするシミュレーションシステム。
【請求項6】
請求項3に記載のシミュレーションシステムにおいて、
前記クライアントは、前記クライアントシミュレーション実行手段によるシミュレーションの実行結果をユーザに提示するシミュレーション結果提示手段をさらに備え、
前記シミュレーション結果提示手段は、前記ユーザ指示情報通知手段が前記ユーザの指示を受け付けた場合に、前記ユーザ指示情報に係るシミュレーション結果の提示に先立って、当該受け付けた指示に応じた所定の表示を行う
ことを特徴とするシミュレーションシステム。
【請求項7】
仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントであって、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段と、
前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段と、
を含み、
前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするクライアント。
【請求項8】
仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントの制御方法であって、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領ステップと、
前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行ステップと、
を含み、
前記シミュレーション実行ステップでは、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするクライアントの制御方法。
【請求項9】
仮想空間に配置される1又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントを、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段、及び
前記受領したイベント情報を用いて、前記仮想空間における前記1又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段、
として機能させるプログラムであって、
前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするプログラム。
【請求項10】
請求項9記載のプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−134800(P2010−134800A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2008−311554(P2008−311554)
【出願日】平成20年12月5日(2008.12.5)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】