(57)【要約】【課題】クライアントとサーバとの間でシミュレーション結果に生じるずれを低減できるシミュレーションシステムを提供する。【解決手段】サーバ２がシミュレーションを実行した結果得られる１又は複数のオブジェクトの挙動に関するイベント情報を当該挙動のタイミングを示すタイミング情報とともにクライアント３に通知し、クライアント３がサーバ２から通知されるイベント情報を用いて少なくとも一部のオブジェクトの挙動に関するシミュレーションを実行するシミュレーションシステムであって、クライアント３は、サーバ２によるシミュレーションの実行より遅れたタイミングでシミュレーションを実行するとともに、タイミング情報に応じて決まるタイミングで、イベント情報に係るオブジェクトの挙動を生じさせるシミュレーションシステムである。【選択図】図３
2010134800.tif 000002
【特許請求の範囲】
【請求項１】
クライアントとサーバとを含むシミュレーションシステムであって、
前記サーバは、
仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバシミュレーション実行手段と、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記クライアントに通知するイベント情報通知手段と、
を含み、
前記クライアントは、
前記サーバから通知されるイベント情報を受領するイベント情報受領手段と、
前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するクライアントシミュレーション実行手段と、
を含み、
前記クライアントシミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするシミュレーションシステム。
【請求項２】
請求項１記載のシミュレーションシステムにおいて、
前記イベント情報受領手段は、前記受領したイベント情報のそれぞれを、タイミング情報ごとに確保される複数のイベントキューのうち、当該イベント情報とともに受領したタイミング情報に対応するイベントキューに格納し、
前記クライアントシミュレーション実行手段は、前記複数のイベントキューのそれぞれについて、当該イベントキューに格納された複数のイベント情報に係る前記各オブジェクトの挙動が同時期に生じるように、前記シミュレーションを実行する
ことを特徴とするシミュレーションシステム。
【請求項３】
請求項１又は２に記載のシミュレーションシステムにおいて、
前記クライアントは、前記１又は複数のオブジェクトのいずれかの挙動に関するユーザの指示を受け付けて、当該指示の内容を示すユーザ指示情報を前記サーバに通知するユーザ指示情報通知手段をさらに備え、
前記サーバシミュレーション実行手段は、前記通知されるユーザ指示情報を前記クライアントから受け付けたタイミングで、当該ユーザ指示情報に係るオブジェクトの挙動を生じさせ、
前記イベント情報通知手段は、前記通知されるユーザ指示情報に応じたオブジェクトの挙動に関するイベント情報を、当該ユーザ指示情報を前記サーバシミュレーション実行手段が受け付けたタイミングを示すタイミング情報とともに、前記クライアントに通知する
ことを特徴とするシミュレーションシステム。
【請求項４】
請求項２に記載のシミュレーションシステムにおいて、
前記複数のイベントキューは、前記クライアントによるシミュレーションの実行が前記サーバによるシミュレーションの実行より遅れる時間に応じた数だけ確保される
ことを特徴とするシミュレーションシステム。
【請求項５】
請求項１から４のいずれか一項に記載のシミュレーションシステムにおいて、
前記クライアントシミュレーション実行手段は、前記サーバから前記クライアントへのデータ送信の所要時間に応じて決まる時間だけ、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションの実行を前記サーバによるシミュレーションの実行より遅らせる
ことを特徴とするシミュレーションシステム。
【請求項６】
請求項３に記載のシミュレーションシステムにおいて、
前記クライアントは、前記クライアントシミュレーション実行手段によるシミュレーションの実行結果をユーザに提示するシミュレーション結果提示手段をさらに備え、
前記シミュレーション結果提示手段は、前記ユーザ指示情報通知手段が前記ユーザの指示を受け付けた場合に、前記ユーザ指示情報に係るシミュレーション結果の提示に先立って、当該受け付けた指示に応じた所定の表示を行う
ことを特徴とするシミュレーションシステム。
【請求項７】
仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントであって、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段と、
前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段と、
を含み、
前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするクライアント。
【請求項８】
仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントの制御方法であって、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領ステップと、
前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行ステップと、
を含み、
前記シミュレーション実行ステップでは、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするクライアントの制御方法。
【請求項９】
仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントを、
前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段、及び
前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段、
として機能させるプログラムであって、
前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせる
ことを特徴とするプログラム。
【請求項１０】
請求項９記載のプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ及びクライアントのそれぞれが１又は複数のオブジェクトの挙動に関するシミュレーションを実行するシミュレーションシステム、当該シミュレーションシステムを構成するクライアント、その制御方法、プログラム、及び情報記憶媒体に関する。
【背景技術】
【０００２】
例えばオンラインゲームなどにおいては、１又は複数のオブジェクトの挙動を決定するために、物理シミュレーションなどのシミュレーション処理が実行されることがある。通常、このシミュレーションはサーバにおいて実行され、クライアントは、サーバからシミュレーション処理の実行結果を受領してユーザに提示する。この場合において、通信量を低減するなどの目的で、クライアント側でも、サーバから通知される各オブジェクトの挙動に関する情報（例えば各オブジェクトの位置や速度、加速度など）を利用しながら、少なくとも一部のオブジェクトについて、サーバが実行しているのと同様のシミュレーション処理を実行する場合がある。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記従来例の技術において、イベント情報をサーバからクライアントに通知する際に通信の遅延が生じると、サーバとクライアントとの間でシミュレーションの実行結果にずれが生じるおそれがある。例えば、サーバ側で同時期に発生した複数のイベントが、時間的にずれてクライアントに到達し、クライアント側で異なるタイミングで発生したと認識されてしまう場合や、サーバ側でイベントが発生した順序と異なる順序でイベント情報がクライアントに到達して、サーバと異なる順序でイベントが発生したと認識されてしまう場合などがあり得る。特に物理シミュレーションなどでは、このようなイベント発生タイミングに生じるずれは、たとえクライアントへのイベント情報到達時にはわずかなものであったとしても、結果としてサーバ側のシミュレーション実行結果とクライアント側のシミュレーション実行結果に大きな違いを生じさせることがある。
【０００４】
図６は、このような問題の一例を示す図であって、ビリヤードゲームにおけるボールの挙動をシミュレートするシミュレーションシステムにおける、シミュレーション対象となる仮想空間（ここではビリヤードテーブルに対応している）内の状態変化を示している。具体的に、この図の例では、ビリヤードテーブル内に配置された３個のボールＢ１、Ｂ２及びＢ３をシミュレーション対象のオブジェクトとして、これら各ボールの仮想空間内における挙動を、物理シミュレーションによって演算している。また、この図の例では、各ボールがビリヤードテーブルの壁（クッション）や他のボールと衝突してその移動方向や移動速度を変化させる事象を、イベント情報Ｅとしてサーバからクライアントに通知することとしている。
【０００５】
図６内の各矩形領域は、サーバ又はクライアントのシミュレーションによって算出される、ある時点での仮想空間の状態を示している。具体的に、紙面向かって左側の各矩形領域がサーバ側のシミュレーション結果を、右側の各矩形領域がクライアント側のシミュレーション結果を、それぞれ示している。また、各矩形領域に付された変数ｔの値は、仮想空間内における時間の進行を示すタイムカウンタの値であって、シミュレーション処理における時間の進行に伴って、このタイムカウンタｔの値が所定時間（例えば１／３０秒）ごとに１ずつ増加していく。すなわち、図６においては、図の下方に行くほど時間が進行した状態を示している。
【０００６】
図６によれば、サーバ側において、ｔ＝０のタイミングで、ボールＢ１及びＢ２のそれぞれが壁に衝突して反射するイベントＥ１及びＥ２が発生している。なお、図中、ボールに付された矢印は、各時点でのボールの移動方向を示している。ここで、サーバ側で発生したイベントのうち、イベントＥ１は直ちにクライアントに通知され、一方でイベントＥ２はタイムカウンタ値１つ分の時間だけ遅れてクライアントに通知されたものとする。この場合、クライアントでは、ｔ＝０のタイミングにおいてボールＢ１が壁で反射し、これに遅れてｔ＝１のタイミングでボールＢ２が壁で反射したものとして、その後の各ボールの動きをシミュレートする。
【０００７】
図示されるように、サーバ側では、ｔ＝５のタイミングでボールＢ２とボールＢ３が衝突するイベントＥ３が発生する。その後、ｔ＝６のタイミングで、互いに反射したボールＢ２とボールＢ３の間をボールＢ１が通過している。一方、クライアントでは、ボールＢ２の移動開始がｔ＝０のタイミングではなくｔ＝１のタイミングだったために、サーバ側のシミュレーション結果と異なり、ｔ＝５のタイミングではボールＢ２とボールＢ３の衝突が発生せず、ｔ＝６のタイミングで両者の衝突が発生している。なお、ここでは、イベントＥ３も遅延してクライアントに到達していることとしている。そのため、ｔ＝５のタイミングでボールＢ２に関するサーバとクライアントとの間の状態のずれは解消されない。この結果、クライアント側では、ボールＢ２とボールＢ３が衝突するタイミングで、ボールＢ１もボールＢ２及びＢ３に衝突している。そのため、その後の各ボールの動きは、サーバ側とは全く異なってしまっている。このずれは、その後、各ボールが壁に衝突するなどの新たなイベントがサーバ側で発生し、クライアント側に通知されることによって解消されるが、その際におけるクライアントの表示は、ボールが突然ビリヤードテーブル内の全く別の場所に瞬間移動するなどの不自然なものになってしまう。
【０００８】
本発明は上記実情を考慮してなされたものであって、その目的の一つは、クライアントとサーバとの間でシミュレーション結果に生じるずれを低減することのできるシミュレーションシステム、当該シミュレーションシステムを構成するクライアント、その制御方法、プログラム、及び情報記憶媒体を提供することにある。
【課題を解決するための手段】
【０００９】
本発明に係るシミュレーションシステムは、クライアントとサーバとを含むシミュレーションシステムであって、前記サーバは、仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバシミュレーション実行手段と、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記クライアントに通知するイベント情報通知手段と、を含み、前記クライアントは、前記サーバから通知されるイベント情報を受領するイベント情報受領手段と、前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するクライアントシミュレーション実行手段と、を含み、前記クライアントシミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【００１０】
上記シミュレーションシステムにおいて、前記イベント情報受領手段は、前記受領したイベント情報のそれぞれを、タイミング情報ごとに確保される複数のイベントキューのうち、当該イベント情報とともに受領したタイミング情報に対応するイベントキューに格納し、前記クライアントシミュレーション実行手段は、前記複数のイベントキューのそれぞれについて、当該イベントキューに格納された複数のイベント情報に係る前記各オブジェクトの挙動が同時期に生じるように、前記シミュレーションを実行することとしてもよい。
【００１１】
また、上記シミュレーションシステムにおいて、前記クライアントは、前記１又は複数のオブジェクトのいずれかの挙動に関するユーザの指示を受け付けて、当該指示の内容を示すユーザ指示情報を前記サーバに通知するユーザ指示情報通知手段をさらに備え、前記サーバシミュレーション実行手段は、前記通知されるユーザ指示情報を前記クライアントから受け付けたタイミングで、当該ユーザ指示情報に係るオブジェクトの挙動を生じさせ、前記イベント情報通知手段は、前記通知されるユーザ指示情報に応じたオブジェクトの挙動に関するイベント情報を、当該ユーザ指示情報を前記サーバシミュレーション実行手段が受け付けたタイミングを示すタイミング情報とともに、前記クライアントに通知することとしてもよい。
【００１２】
また、上記シミュレーションシステムにおいて、前記複数のイベントキューは、前記クライアントによるシミュレーションの実行が前記サーバによるシミュレーションの実行より遅れる時間に応じた数だけ確保されることとしてもよい。
【００１３】
また、上記シミュレーションシステムにおいて、前記クライアントシミュレーション実行手段は、前記サーバから前記クライアントへのデータ送信の所要時間に応じて決まる時間だけ、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションの実行を前記サーバによるシミュレーションの実行より遅らせることとしてもよい。
【００１４】
また、上記シミュレーションシステムにおいて、前記クライアントは、前記クライアントシミュレーション実行手段によるシミュレーションの実行結果をユーザに提示するシミュレーション結果提示手段をさらに備え、前記シミュレーション結果提示手段は、前記ユーザ指示情報通知手段が前記ユーザの指示を受け付けた場合に、前記ユーザ指示情報に係るシミュレーション結果の提示に先立って、当該受け付けた指示に応じた所定の表示を行うこととしてもよい。
【００１５】
また、本発明に係るクライアントは、仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントであって、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段と、前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段と、を含み、前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【００１６】
また、本発明に係るクライアントの制御方法は、仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントの制御方法であって、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領ステップと、前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行ステップと、を含み、前記シミュレーション実行ステップでは、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。
【００１７】
また、本発明に係るプログラムは、仮想空間に配置される１又は複数のオブジェクトの挙動に関するシミュレーションを実行するサーバと接続されるクライアントを、前記シミュレーションの結果得られる、前記各オブジェクトの挙動に関するイベント情報を、当該挙動のタイミングを示すタイミング情報とともに前記サーバから受領するイベント情報受領手段、及び前記受領したイベント情報を用いて、前記仮想空間における前記１又は複数のオブジェクトの少なくとも一部の挙動に関するシミュレーションを実行するシミュレーション実行手段、として機能させるプログラムであって、前記シミュレーション実行手段は、前記少なくとも一部のオブジェクトの挙動に関するシミュレーションを、前記サーバによるシミュレーションの実行より遅れたタイミングで実行するとともに、前記イベント情報とともに通知されるタイミング情報に応じて決まるタイミングで、当該イベント情報に係る前記各オブジェクトの挙動を生じさせることを特徴とする。このプログラムは、コンピュータ読み取り可能な情報記憶媒体に記憶されてよい。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００１９】
本実施形態に係るシミュレーションシステム１は、図１に示すように、サーバ２と、複数のクライアント３と、を含んで構成されている。サーバ２と各クライアント３とは、互いにインターネット等の通信ネットワークを介して接続されている。
【００２０】
サーバ２は、サーバコンピュータ等の情報処理装置であって、図１に示すように、制御部１１と、記憶部１２と、通信部１３と、を含んで構成されている。
【００２１】
制御部１１は、ＣＰＵ等を含んで構成され、記憶部１２に格納されているプログラムに従って各種の情報処理を実行する。本実施形態において制御部１１が実行する処理の具体例については、後述する。
【００２２】
記憶部１２は、ＲＡＭやＲＯＭ等のメモリ素子、ハードディスクなどを含んで構成されており、制御部１１が実行するプログラムや、各種のデータを記憶する。また、記憶部１２は、制御部１１のワークメモリとしても動作する。
【００２３】
通信部１３は、通信インタフェースであって、通信ネットワークを介して外部から到来するデータを受信し、制御部１１に対して出力する。また、制御部１１からの指示に従って、通信ネットワークを介して接続された他の情報処理装置に対して各種のデータを送信する。
【００２４】
クライアント３は、例えば家庭用ゲーム機やパーソナルコンピュータ等の情報処理装置であって、図２に示すように、制御部２１と、記憶部２２と、通信部２３と、操作部２４と、表示部２５と、を含んで構成されている。制御部２１、記憶部２２、及び通信部２３は、それぞれ制御部１１、記憶部１２、及び通信部１３と同様の構成であってよい。
【００２５】
操作部２４は、家庭用ゲーム機のコントローラやキーボード、マウス等であって、ユーザの操作指示を受け付けて、制御部１１に対して出力する。また、表示部２５は、家庭用テレビ受像機や液晶ディスプレイ等であって、制御部１１の指示に従って、各種の情報をユーザに提示する。
【００２６】
以下、本実施形態に係るシミュレーションシステム１によって実現される機能の具体例について、説明する。本実施形態では、サーバ２は、仮想空間内に配置された１又は複数のオブジェクトの挙動を、物理シミュレーション等のシミュレーション処理によって演算する。なお、シミュレーション対象となるオブジェクトは、各クライアント３のユーザによって操作可能なオブジェクトを含んでもよいし、それ以外のオブジェクトを含んでもよい。サーバ２は、シミュレーションの結果得られる各オブジェクトの挙動に関するイベント情報を、各クライアント３に通知する。クライアント３は、サーバ２から通知されたイベント情報を利用しながら、サーバ２で実行されているシミュレーション処理の少なくとも一部を実行し、その結果得られる仮想空間内における各オブジェクトの挙動を、表示部２５の画面に表示するなどの方法でユーザに提示する。
【００２７】
シミュレーションシステム１は、機能的に、図３に示すように、ユーザ指示通知部３１と、ユーザ指示受領部３２と、サーバシミュレーション実行部３３と、イベント情報通知部３４と、イベント情報受領部３５と、クライアントシミュレーション実行部３６と、シミュレーション結果提示部３７と、を含んで構成されている。これらの機能のうち、ユーザ指示受領部３２、サーバシミュレーション実行部３３、及びイベント情報通知部３４は、サーバ２の制御部１１が記憶部１２に格納されたプログラムを実行することによって、実現される。また、ユーザ指示通知部３１、イベント情報受領部３５、クライアントシミュレーション実行部３６、及びシミュレーション結果提示部３７は、各クライアント３の制御部２１が記憶部２２に格納されたプログラムを実行することによって、実現される。これらのプログラムは、インターネット等の通信ネットワークを介して提供されてもよいし、光ディスク等のコンピュータ読み取り可能な各種の情報記憶媒体に格納されて提供されてもよい。
【００２８】
クライアント３のユーザ指示通知部３１は、ユーザの操作部２４に対する指示操作を受け付ける。具体的に、本実施形態では、シミュレーションの対象となるオブジェクトの挙動を変化させるユーザの指示を受け付けて、当該ユーザ指示の内容を示す情報（以下ではユーザメッセージという）をサーバ２に送出する。例えばユーザメッセージは、仮想空間内に配置されたいずれかのオブジェクトの現在の座標値や移動方向、移動速度などを指示する情報であってもよいし、当該オブジェクトに対して各種の動作を指示する情報であってもよい。
【００２９】
なお、ユーザ指示通知部３１は、ユーザから受け付けた所定の種類の指示については、その内容に応じた表示を直ちに行うために、当該指示があった旨の通知、又はサーバ２に送出したものと同様のユーザメッセージをシミュレーション結果提示部３７に対して出力してもよい。このユーザの指示に応じたシミュレーション結果提示部３７の処理については、後述する。
【００３０】
サーバ２のユーザ指示受領部３２は、各クライアント３のユーザ指示通知部３１が通知するユーザメッセージを受領し、サーバシミュレーション実行部３３に対して出力する。
【００３１】
サーバ２のサーバシミュレーション実行部３３は、ユーザ指示受領部３２が受領するユーザメッセージ、及び予め規定された各種の条件を用いて、仮想空間内に配置された各オブジェクトの挙動に関するシミュレーション処理を実行する。このシミュレーション処理は、例えば物体の物理的な運動の過程や物体同士の衝突等の相互作用による影響を計算する公知の物理シミュレーションプログラムによって実現されてよい。このシミュレーション処理によって、所定の単位時間ｔｕごとに、各オブジェクトの仮想空間内における位置や向き、移動速度、回転速度、加速度などの、各オブジェクトの挙動を示すパラメタの値が算出される。なお、この単位時間ｔｕは、例えばクライアント２が表示画面を描画する際のフレームレートに応じた時間であってもよい。以下では、仮想空間内における時間の進行は、タイムカウンタｔの値によって表されるものとする。すなわち、サーバシミュレーション実行部３３は、仮想空間内の時間を単位時間ｔｕだけ進行させるごとに、タイムカウンタｔの値を１増分させるとともに、当該タイムカウンタｔの値によって表される時点における各オブジェクトの状態を算出する。
【００３２】
サーバシミュレーション実行部３３は、シミュレーション処理の結果得られる、各オブジェクトの挙動に関する情報を、各クライアント３への通知対象となるイベント情報として、イベント情報通知部３４に対して出力する。ここで、サーバシミュレーション実行部３３は、各オブジェクトの挙動に関するイベント情報を、当該変化の生じるタイミングを示すタイミング情報（ここでは、変化発生時のタイムカウンタｔの値）とともに出力することとする。
【００３３】
出力の対象とするイベント情報は、所定の条件を満たす各オブジェクトの挙動の変化を示すものであってよい。この場合の所定の条件としては、例えば移動スピードや移動方向などの各オブジェクトの挙動に関する所定のパラメタが単位時間ｔｕあたり所定の閾値以上変化したことを示すものなどがある。また、イベント情報出力の条件は、シミュレーションの内容に応じて定められてもよい。例えばビリヤードゲームにおけるボールの挙動をシミュレートする場合、ビリヤードのボールの挙動が大きく変化するのは、各ボールが他のボールやビリヤードテーブルのクッションに衝突した時である。このようなオブジェクト同士の相互作用に起因する事象は、わずかな数値の誤差などによって計算結果に大きな違いが生じる可能性が高い。そこで、このような事象をイベント情報として各クライアント３に送信することで、各オブジェクトの挙動に関する情報を単位時間ｔｕごとに全て各クライアント３へ送信せずとも、各オブジェクトの挙動をクライアント３側で精度よく再現できるようになる。
【００３４】
さらに、ユーザ指示によって直接オブジェクトに挙動の変化が生じる場合については、当該挙動の変化を各クライアント３に通知しないと、当該指示を行ったユーザの使用するクライアント３以外の他のクライアント３では、このような挙動の変化をシミュレーション結果に反映することができない。そこで、サーバシミュレーション実行部３３は、当該挙動の変化をイベント情報として出力対象とすることとする。例えば前述したビリヤードゲームの例では、サーバシミュレーション実行部３３は、ユーザ指示受領部３２が受領したユーザメッセージに応じて、各ボールを新たに所定方向に所定の速さで移動させ始める場合に、当該移動の開始を示すイベント情報を出力する。
【００３５】
なお、この場合において、サーバシミュレーション実行部３３は、ユーザがクライアント３に対してオブジェクトの挙動に関する指示を行ったタイミングではなく、その指示の内容を示すユーザメッセージを当該クライアント３から受け付けたタイミングで、ユーザの指示に応じたオブジェクトの挙動を生じさせる。そのため、各クライアント３は、他のクライアント３を使用するユーザの指示に応じたイベント情報だけでなく、当該クライアント３自身を使用するユーザの指示に応じたオブジェクトの挙動に関する情報についても、前述の通りサーバ２に送信し、他のイベント情報と同様にサーバ２から受領することとなる。これによって、各クライアント３は、当該クライアント３自身のユーザによる指示に応じたオブジェクトの挙動と、他のクライアント３のユーザによる指示に応じたオブジェクトの挙動と、を一元的に処理することができる。
【００３６】
サーバ２のイベント情報通知部３４は、サーバシミュレーション実行部３３が出力するイベント情報及びタイミング情報の組を、各クライアント３に対して通知する。なお、イベント情報通知部３４は、サーバシミュレーション実行部３３が出力するイベント情報のそれぞれを、必ずしも全てのクライアント３に対して通知せずともよい。後述するように、各クライアント３は、サーバシミュレーション実行部３３が実行しているシミュレーション処理と同様のシミュレーション処理を実行するが、自分自身がユーザに提示するために必要な範囲でシミュレーション処理を実行すればよく、サーバシミュレーション実行部３３が実行するシミュレーション処理の全てを実行する必要はない。そこで、イベント情報通知部３４は、複数のクライアント３のそれぞれを利用するユーザに対応づけられたユーザオブジェクトの仮想空間内における配置位置や、当該クライアント３がユーザに提示する画面を生成するために仮想空間内に設定される視点位置などに基づいて、このようなユーザオブジェクトの配置位置や視点位置及びその近傍を含む所定範囲に存在するオブジェクトの挙動に関するイベント情報だけを、当該クライアント３に対して通知することとしてもよい。
【００３７】
クライアント３のイベント情報受領部３５は、サーバ２のイベント情報通知部３４が通知する各イベント情報を受領して、記憶部２２内に確保されたイベントキューに当該各イベント情報を一時的に格納する。本実施形態において、このイベントキューは、各イベントの発生タイミングを示すタイミング情報（すなわち、タイムカウンタｔ）の値ごとに、それぞれ独立して確保されることとする。図４は、このようなイベントキューの一例を示しており、丸印のそれぞれがイベントキューに格納された個々のイベント情報を模式的に示している。図４においては、ｔ＝０〜９までの計１０個のタイムカウンタｔの値のそれぞれに応じてイベントキューが確保されており、サーバ２から送信されたイベント情報のそれぞれは、当該イベント情報に関連づけられたタイムカウンタｔの値に対応するイベントキュー内に格納される。
【００３８】
クライアント３のクライアントシミュレーション実行部３６は、イベント情報受領部３５によってイベントキューに格納されたイベント情報を用いて、仮想空間内に配置されるオブジェクトのうち、少なくとも一部のオブジェクトの挙動に関して、サーバシミュレーション実行部３３によって実行されるシミュレーション処理と同様のシミュレーション処理を実行する。具体的に、例えばクライアントシミュレーション実行部３６は、前述したように、クライアント３に対応づけられたユーザオブジェクトの配置位置や、表示部２５に表示中の表示画面を生成するために仮想空間内に設定された視点位置などの周囲の所定範囲を対象として、当該所定範囲に含まれるオブジェクトについて、サーバシミュレーション実行部３３が実行している処理と同種のシミュレーション処理を実行する。なお、クライアントシミュレーション実行部３６が実行するシミュレーション処理は、サーバ２側で実行されるシミュレーション処理より計算精度を落としたものであってもよい。このとき、クライアントシミュレーション実行部３６は、イベントキューに格納されたイベント情報によって示される各オブジェクトの挙動が生じるように、シミュレーション処理を実行することとする。
【００３９】
ただし、本実施形態では、クライアントシミュレーション実行部３６は、サーバ２によるシミュレーション処理の実行より遅れたタイミングで、サーバ２によるシミュレーション処理と同様のシミュレーション処理を実行する。具体例として、実時間のある時刻Ｔにおいてタイムカウンタｔ＝０における仮想空間内の各オブジェクトの挙動がサーバシミュレーション実行部３３によって演算されたものとすると、クライアントシミュレーション実行部３６は、当該時点Ｔより遅延時間ｄだけ遅れた時刻Ｔ＋ｄが到来したタイミングで、同じｔ＝０における各オブジェクトの挙動を演算する。ここで、遅延時間ｄは、予め定められた時間であってもよいし、例えばサーバ２からクライアント３へのデータ送信に必要な所要時間を予め計測することによって、当該計測された所要時間に応じて決定されてもよい。この場合、サーバ２は、各クライアント３との間でデータ送信の所要時間の計測を複数回実行して、その平均値や分散値に応じて遅延時間ｄを決定し、各クライアント３に通知してもよい。また、サーバ２に接続される各クライアント３のうち、最もデータ通信に時間がかかったクライアント３についての所要時間に応じて、遅延時間ｄを決定することとしてもよい。
【００４０】
なお、前述したタイムカウンタごとに確保するイベントキューの数は、この遅延時間ｄに応じて決定される。例えば、遅延時間ｄを単位時間ｔｕで除してなる数（ｄ／ｔｕ）に応じた数だけ、それぞれタイムカウンタの値に対応するイベントキューが用意されることとする。これによって、遅延時間ｄに応じて決まる時間範囲にわたって、イベント情報受領部３５はサーバ２から受信したイベント情報をキューイングしておくことができる。
【００４１】
さらに、クライアントシミュレーション実行部３６は、各イベントキューに格納された各イベント情報に係るオブジェクトの挙動を、当該イベントキューが対応づけられたタイムカウンタ値に応じて決まるタイミングで生じさせるように、シミュレーション処理を実行する。
【００４２】
具体例として、実時間の時刻Ｔにおけるサーバ２側のシミュレーションによってタイムカウンタｔ＝０で発生したイベント情報は、ある通信時間だけかかってクライアント３に到来する。この通信時間の最大値より長い時間を遅延時間ｄとすることによって、タイムカウンタｔ＝０に関連づけられた全てのイベント情報を受信し終えるまで、クライアント３側ではｔ＝０の時点についてのシミュレーションを開始しないようにすることができる。そして、クライアント３側でｔ＝０の時点についてのシミュレーションを開始すべき時刻Ｔ＋ｄになるまでの間に、クライアント３が受信したｔ＝０時点についてのイベント情報は、全てｔ＝０に対応するイベントキューに格納されることとなる。時刻Ｔ＋ｄになると、クライアントシミュレーション実行部３６は、このｔ＝０に対応するイベントキューに格納された各イベント情報によって示されるイベント内容を反映しながら、各オブジェクトの挙動に関するシミュレーション処理を実行し、その結果得られる各オブジェクトの状態を示す情報（各オブジェクトのｔ＝０における位置や向きなど）を、シミュレーション結果提示部３７に対して出力する。
【００４３】
また、このｔ＝０についてのシミュレーションが実行されると、ｔ＝０のイベント情報が格納されたイベントキューの内容は不要となるので、イベント情報受領部３５は、ｔ＝０に対応するイベントキューの内容を消去して、代わりに、まだイベントキューが記憶部２２内に確保されていない次のタイムカウンタｔの値（図４の例ではｔ＝１０）に対応するイベントキューを新たに確保する。このような処理が単位時間ｔｕごとに繰り返されることによって、クライアント３のクライアントシミュレーション実行部３６は、サーバシミュレーション実行部３３に対して遅延時間ｄだけ遅れて、直近の過去ｄ時間の間にサーバ２から受信したイベント情報の内容を反映しながら、サーバシミュレーション実行部３３が実行したシミュレーション処理の少なくとも一部を実行することになる。
【００４４】
これによって、クライアントシミュレーション実行部３６は、サーバ２側のシミュレーションにおいて発生した各イベントについては、当該各イベント情報のクライアント３に対する到達時期に関わらず、サーバ２側で発生した順序及び時間間隔と同じ順序及び時間間隔で発生するものとして、シミュレーション処理を実行することができる。特に、サーバ２側で同時期に発生した複数のイベントについては、当該各イベント情報がクライアント３に到達した時期のばらつきに関わらず、同時期に発生するものとして、シミュレーション処理を実行することになる。その結果、クライアントシミュレーション実行部３６は、サーバシミュレーション実行部３３によるシミュレーション処理によって決定される各オブジェクトの挙動とずれを低減しつつ、各オブジェクトの挙動を再現することができる。
【００４５】
クライアント３のシミュレーション結果提示部３７は、クライアントシミュレーション実行部３６によるシミュレーション処理の結果得られる、各オブジェクトの挙動を表す画像を、表示部２５の画面に表示することによって、ユーザに提示する。具体的に、シミュレーション結果提示部３７は、クライアントシミュレーション実行部３６の処理結果に応じて、単位時間ｔｕごとに表示を更新することで、サーバシミュレーション実行部３３によって実行されたシミュレーション結果と同様の各オブジェクトの挙動を、ユーザに提示することができる。
【００４６】
以下、本実施形態に係るシミュレーションシステム１が実行するシミュレーション処理の具体例について、図５を用いて説明する。ここでも、図６と同様に、仮想空間であるビリヤードテーブル内に３個のボールＢ１、Ｂ２及びＢ３が配置されたビリヤードゲームを例として用いる。また、紙面左側の各矩形領域がサーバ２によるシミュレーション結果を、紙面右側の各矩形利用域がクライアント３によるシミュレーション結果を、それぞれ示しているのも同様である。
【００４７】
図５の例では、まずタイムカウンタｔ＝０のタイミングにおいて、サーバ２のサーバシミュレーション実行部３３は、ボールＢ１が壁に衝突して反射するイベントＥ１、及びボールＢ２がユーザの指示に応じて移動開始するイベントＥ２のそれぞれを示すイベント情報を出力する。ここで、各イベント情報のクライアント３への到達時間にはずれが生じているが、これらのイベント情報はいずれもｔ＝０に対応するイベントキューに格納される。なお、図中における太い矢印は、ｔ＝０に対応するイベントキューへのバッファリングが行われる期間を示している。そして、サーバ２においてｔ＝０のシミュレーションが実行された時点から遅延時間ｄが経過したタイミングで、クライアント３のクライアントシミュレーション実行部３６は、ｔ＝０に対応するイベントキューに格納された２個のイベント情報を用いて、ｔ＝０におけるシミュレーションを実行する。これによって、クライアント３のシミュレーション処理でも、イベントＥ１及びＥ２は同時期に発生し、その後のボールの動きについても、クライアント３側で独自に実行される物理シミュレーションによって、サーバ２側のシミュレーション結果と同様に順次計算されていく。
【００４８】
その後、サーバ２側において、ｔ＝５のタイミングでボールＢ２とボールＢ３が衝突するイベントＥ３が発生すると、当該イベント内容を示すイベント情報がクライアント３に送信される。このイベント情報も、イベントＥ１及びイベントＥ２の場合と同様に、クライアント３においてｔ＝５に対応するイベントキューに一旦格納され、そのイベント内容はクライアントシミュレーション実行部３６によるシミュレーション処理に直ちには反映されない。その後、サーバ２におけるクライアントシミュレーション実行部３６がｔ＝５についてのシミュレーション処理を実行する際に、イベントＥ３の内容が反映される。その結果、サーバ２側におけるシミュレーション結果と同様の結果が、クライアント３側でもｔ＝５のタイミングにおいて発生することとなる。なお、イベント情報の到達に遅延時間ｄ以上の時間がかかったなどの理由で、サーバ２側のシミュレーションとクライアント３側のシミュレーションとの間でずれが生じてしまった場合にも、後にサーバ２から到達するイベント情報の内容をクライアント３側のシミュレーションに反映することによって、このずれを補正することができる。
【００４９】
なお、サーバ２とクライアント３との間の通信回線の状況などによって、予め設定された遅延時間ｄを超えてデータ送信に時間がかかってしまい、既にクライアントシミュレーション実行部３６でシミュレーションが実行されてしまったタイムカウンタｔの値に関連づけられたイベント情報が到来した場合には、クライアント３は、以下のような処理を実行してもよい。すなわち、イベント情報受領部３５が、受領したイベント情報をイベントキューには格納せずに直ちにクライアントシミュレーション実行部３６に出力し、クライアントシミュレーション実行部３６は、当該イベント情報の内容を直ちに現時点で実行中のシミュレーション処理に反映することとする。さらに、クライアントシミュレーション実行部３６は、遅延時間ｄを長くする補正を行うこととし、イベントキューを確保するタイムカウンタｔの数を増やしてもよい。また、仮想空間内の時間の進み方が一時的に遅くなるように、シミュレーション処理を実行してもよい。また、複数ユーザ参加型のゲームなどにおいては、ユーザ間の公平性を担保するために、各クライアント３の遅延時間ｄを揃えておくほうが望ましい場合があるので、この場合には、サーバ２を介して各クライアント３に遅延時間ｄの補正を行う指示を行い、他のクライアント３についても同様の補正を実行させることとしてもよい。
【００５０】
また、サーバ２及びクライアント３のいずれかで、処理負荷等に起因してシミュレーション処理の実行に想定以上の時間がかかってしまうと、サーバ２とクライアント３との間で、シミュレーション処理におけるタイムカウンタｔの値に、予め設定された遅延時間ｄによるもの以外のずれが生じる場合もありえる。具体的に、サーバ２側のシミュレーションがクライアント３側のシミュレーションよりも遅れた場合、各クライアント３は、前述した遅延時間ｄを長くする補正と同様に、一時的に仮想空間内の時間の進み方を遅らせることとしてもよい。逆に、クライアント３側のシミュレーションがサーバ２側のシミュレーションよりも遅れた場合、まだイベントキューが確保されていないタイムカウンタ値に関連づけられたイベント情報がクライアント３に到来してしまう可能性がある。このようなイベント情報が到来した場合には、クライアント３は、このようなイベント情報を予備のイベントキューに一時的に格納するとともに、クライアントシミュレーション実行部３６によるシミュレーション処理における、仮想空間内の時間の進み方を一時的に速めることとしてもよい。その後、イベントキューが確保されていないタイムカウンタ値に関連づけられたイベント情報が来なくなれば、シミュレーション処理の進行が元に戻ったと判断して、予備のイベントキューの使用を止め、仮想空間内の時間の進み方を元に戻せばよい。
【００５１】
このように、以上説明した実施形態に係るシミュレーションシステム１では、クライアント３が遅延時間ｄの間だけサーバ２から送信されるイベント情報をキューイングしておき、イベント情報とともに通知されるタイミング情報に応じたタイミングでイベントが発生するようにサーバ２側より遅れてシミュレーションを実行することで、サーバ２とクライアント３との間で生じるシミュレーション結果のずれを低減できる。
【００５２】
ただ、本実施形態に係るシミュレーションシステム１においては、シミュレーション結果提示部３７がユーザに提示するシミュレーション結果の画像は、サーバ２によるシミュレーション処理の実行よりも遅延時間ｄの分だけ遅れることになる。そのため、例えばユーザが表示部２５に表示された画像に合わせてあるタイミングで操作部２４を操作し、表示されているオブジェクトに対する操作指示を行ったとしても、その内容は、遅延時間ｄと、当該指示の内容を示すユーザメッセージがサーバ２まで到達する通信所要時間αと、を合算した分だけ遅れてサーバ２のシミュレーション結果に反映されることとなる。
【００５３】
具体例として、ｔ＝ｎにおけるシミュレーション結果が表示されたタイミングでユーザがオブジェクトに対する操作指示を行ったとすると、その時点においてサーバ２ではｔ＝ｎ＋（ｄ／ｔｕ）のタイミングに係るシミュレーション処理が実行中であることになる。そのため、当該ユーザの指示内容を示すイベント情報がクライアント３からサーバ２に通信所要時間αだけかかって到達した時には、それより後のタイミング（具体的には、ｔ＝ｎ＋（ｄ＋α）／ｔｕのタイミング）に係るシミュレーション処理が実行されており、ユーザの指示に応じたイベントは、当該タイミングで発生したものとみなされる。つまり、ｔ＝ｎの時点で操作指示を行ったつもりのユーザの認識よりも、遅れて当該指示の内容が反映されることになる。
【００５４】
そこで、本実施形態において、クライアント３は、ユーザにそのような遅延に起因する違和感を生じさせないようにするために、ユーザの指示に応じて、当該指示内容に応じたシミュレーション結果の提示に先立って、当該シミュレーション結果とは異なる所定の表示を行うこととしてもよい。この表示は、ユーザの指示があった時点においてシミュレーション結果提示部３７が行っているシミュレーション結果の表示と重ねて行ってもよい。具体的に、ユーザ指示通知部３１は、ユーザの操作部２４に対する操作を受け付けると、当該操作に応じたユーザメッセージをサーバ２に送信するとともに、当該操作が所定の操作である場合には、ユーザメッセージの内容をシミュレーション結果提示部３７にも出力する。シミュレーション結果提示部３７は、そのユーザメッセージを受けて、当該時点でのシミュレーション結果を提示する表示画像に重ねて、所定の動画像の表示を開始する。この動画像は、遅延時間ｄに応じた時間の動画像であってよい。また、この動画像は、ユーザによる指示操作の対象となったオブジェクトについてのシミュレーション結果が表示されている画像内の位置に、重ねて表示されてもよい。さらに、シミュレーション結果提示部３７は、当該ユーザ指示の対象となったオブジェクトに係るイベント情報が、クライアントシミュレーション実行部３６のシミュレーション処理に用いられて、その結果を提示するタイミングにおいて、当該動画像の内容を変化させ、又は当該動画像の表示を終了することとしてもよい。
【００５５】
具体的に、前述したビリヤードゲームの例において、ユーザがボールの移動を開始させる指示操作を行ったときの動画像の例について、説明する。この場合、クライアント３は、指示操作の内容を示すユーザメッセージをサーバ２に送出するとともに、当該指示操作の対象となったボールの位置、及びユーザの指示する方向に応じて、表示部２５の画面上に移動するキュースティックを表す動画像を表示させる。このときの動画像は、キュースティックが指示対象のボールから一旦離れた後、当該ボールを撞く動きを示す動画像であってもよい。あるいは、クライアント３は、ユーザの指示を受け付けた時点では、まずキュースティックがボールから離れる向きに移動する動画像だけを所定の動画像として表示してもよい。この場合、クライアント３は、サーバ２に送出したユーザメッセージに対応するイベント情報を受領し、当該イベント情報に応じて指示されたボールの移動開始を示すシミュレーション結果を表示するタイミングで、このボールの移動開始に合わせて、さらにボールをキュースティックで撞く動きを表す動画像を表示する。このような制御によれば、ユーザが指示操作を行ってから、その内容がシミュレーション結果に反映されるまでにタイムラグが生じるにも関わらず、そのタイムラグを不自然に感じさせないような演出を、遅延時間ｄだけ遅れたシミュレーション処理を妨げずに、実現することができる。
【００５６】
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明においてはサーバ２に対して複数のクライアント３が接続されることとしたが、クライアント３は１つだけサーバ２に接続されるのであっても構わない。また、サーバ２及びクライアント３で実行されるシミュレーションの種類も、物理シミュレーションに限らず各種のものであってよい。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施の形態に係るシミュレーションシステムの全体概要を示す概要図である。
【図２】本発明の実施の形態に係るクライアントの構成例を示す構成ブロック図である。
【図３】本発明の実施の形態に係るシミュレーションシステムによって実現される機能例を示す機能ブロック図である。
【図４】イベントキューの一例を示す図である。
【図５】本実施形態に係るシミュレーションシステムによるシミュレーション結果の一例を示す図である。
【図６】関連技術に係るシミュレーションシステムによるシミュレーション結果の一例を示す図である。
【符号の説明】
【００５８】
１  シミュレーションシステム、２  サーバ、３  クライアント、１１，２１  制御部、１２，２２  記憶部、１３，２３  通信部、２４  操作部、２５  表示部、３１  ユーザ指示通知部、３２  ユーザ指示受領部、３３  サーバシミュレーション実行部、３４  イベント情報通知部、３５  イベント情報受領部、３６  クライアントシミュレーション実行部、３７  シミュレーション結果提示部。
【図１】
2010134800.tif 000003
【図２】
2010134800.tif 000004
【図３】
2010134800.tif 000005
【図４】
2010134800.tif 000006
【図５】
2010134800.tif 000007
【図６】
2010134800.tif 000008