本発明の実施の形態について図面を参照しながら説明する。本発明の第1の実施の形態に係るシミュレーションシステムは、図1に示すように、ユーザ端末1と、相互通信制御装置2と、複数の個別シミュレータ3とを含んで構成され、これらは相互にネットワークを介して接続されている。
以下では、説明のために、ユーザが仮想的な都市空間内を移動する例を想定し、ユーザオブジェクトと、ユーザ以外のオブジェクトとしての車オブジェクト、建物オブジェクト、池オブジェクト、道路オブジェクト、鳥オブジェクト、及び都市内の池などに生息する魚オブジェクトが都市空間内の予め定められた領域をそれぞれ移動しているものとする。例えばユーザオブジェクトは、人であり、仮想都市空間内の地上付近で、歩道、横断歩道、または都市内の公園の陸地部分などを移動可能であると規定されている。また車オブジェクトは、地上付近で車道を移動可能であると規定される。さらに、鳥オブジェクトは、仮想都市空間内で、池の深部などを除く、地面上方全体ないし、池の所定深さまでを移動可能であると規定される。魚オブジェクトは、池内部を移動可能と規定される。なお、建物や池、道路などのオブジェクトは移動しないオブジェクトとしてユーザ端末1と個別シミュレータ3との間で、その配置位置に係る情報が保持されている。
ユーザ端末1は、一般的なパーソナルコンピュータを用いて実現できる。このユーザ端末1では、後に述べるように、ユーザオブジェクトが管理される。
個別シミュレータ3は、それぞれ、特定の種類のオブジェクトを管理する。例えば、第1の個別シミュレータ3aは車オブジェクトの移動をシミュレートして管理し、第2の個別シミュレータ3bは、鳥オブジェクトの移動をシミュレートして管理し、第3の個別シミュレータ3cは、魚オブジェクトの移動をシミュレートして管理する。
各個別シミュレータ3は、サーバコンピュータであり、図2に例示するように制御部31と、記憶部32と、通信部33とを含んで構成される。ここで制御部31は、CPU等のプログラム制御デバイスであり、記憶部32に格納されているプログラムに従って、担当する少なくとも一つのオブジェクトの移動をシミュレートする。また、制御部31は、シミュレート対象であるオブジェクトのうち、予め定めた条件(通知条件)を満足するオブジェクトの情報を選択的に、相互通信制御装置2に対して通知する。この処理については、後に詳しく述べる。
さらにこの制御部31は、指定された領域内に含まれるオブジェクトのリストを送出する処理(オブジェクト検索処理)を行う。
記憶部32は、メモリ素子などを含んで構成され、これら制御部31によって実行される各処理に関わるプログラムを格納している。また、この記憶部32は、各処理で用いるパラメータ情報等を格納している。さらに記憶部32は、制御部31のワークメモリとしても動作する。
通信部33は、ネットワークインタフェース等であり、制御部31から入力される指示に従い、指定された送信先に対し指定された情報を、ネットワークを介して送出する。また、この通信部33は、ネットワークを介して受信される情報を、制御部31に出力する。
相互通信制御装置2は、サーバーコンピュータ等で実現でき、図3に示すように制御部21と、記憶部22と、通信部23とを含んで構成される。ここで制御部21は、CPU等であり、記憶部22に格納されているプログラムに従って処理を行う。
記憶部22は、メモリ素子などを含んで構成され、各処理に関わるプログラムを格納している。また、この記憶部22には、制御部21の処理で用いるパラメータ情報が格納されている。さらにこの記憶部22は、制御部21のワークメモリとしても動作する。
通信部23は、ネットワークインタフェース等であり、制御部21から入力される指示に従い、指定された送信先に対し指定された情報を、ネットワークを介して送出する。また、この通信部23は、ネットワークを介して受信される情報を、制御部21に出力する。
本実施の形態のシミュレータシステムは、上述の構成を備えてなり、機能的には図5に示すように、ユーザ端末1におけるユーザオブジェクト管理部41と、ユーザ視野表示部42と、相互通信制御装置2における相互通信制御部51と、検索処理部52と、依存関係判断部53と、衝突判定部54と、依存関係データベース55と、各個別シミュレータ3におけるシミュレーションエンジン部61と、オブジェクトデータ記憶部62と、通知判定部63とを含んで構成される。
ユーザオブジェクト管理部41は、ユーザによるユーザオブジェクトの移動操作を受けて、ユーザオブジェクトの仮想空間内の位置を更新する。ここでユーザ端末1は、ユーザによる移動操作のときに、移動可能であると予め定められた領域の外へユーザオブジェクトが移動しないよう、ユーザの操作を制限する。例えば、歩道から車道へ移動する指示操作が行われた場合、当該車道部分が横断歩道であるか否かを判断し、横断歩道でなければ、無視して移動を行わない。
ユーザ視野表示部42は、ユーザの視野範囲に係る情報を相互通信制御装置2に送信し、相互通信制御装置2から当該視野範囲に含まれる他のオブジェクトの情報を受信し、ディスプレイ等に表示する。
相互通信制御部51は、個別シミュレータ3からオブジェクトの情報の通知を受けると、当該通知されたオブジェクトの情報と、オブジェクト種別(あるいは通知元の個別シミュレータ3を特定する情報)とを関連づけて、通知データベースとして記憶部22に格納する。
検索処理部52は、ユーザ端末1から受信される指示に従い、ユーザの視野範囲に属するオブジェクトの情報を、各個別シミュレータにオブジェクト検索処理を行わせて取得し、当該取得したオブジェクトの情報をユーザ端末1に送出する。
依存関係判断部53は、記憶部22に格納された通知データベースと依存関係データベース55とを参照し、実行するべき処理が依存関係データベース55に定められている場合は、当該定められた処理(例えば衝突判定処理)の実行を開始する旨の指示を出力する。
衝突判定部54は、依存関係判断部53が衝突判定処理の実行を開始する旨の指示を出力したときに、記憶部22に格納された通知データベースを参照して、種別の異なるオブジェクト間で相互作用を考慮したシミュレートを行うべきか否かを判断し、相互作用を考慮したシミュレートを行うべきと判断したときに、当該相互作用に係るオブジェクトをそれぞれ管理する個別シミュレータ3に対して、相互作用の相手となるオブジェクトに関する情報を出力して、相互作用に係る処理を実行するよう要求する。
本実施の形態では、これら依存関係判断部53と衝突判定部54とにより、本発明の相互処理実行手段が実現される。
依存関係データベース55は、保持手段としての記憶部22に格納されており、図4に示すように、少なくとも一つのオブジェクト種別(または当該少なくとも一つの種別のオブジェクトをそれぞれ管理する個別シミュレータ3を特定する情報)R1,R2…と、実行するべき処理の内容を特定する情報Pとを関連づけたものである。
各個別シミュレータ3におけるシミュレーションエンジン部61は、シミュレート対象であるオブジェクトの挙動(移動など)をそれぞれシミュレートする。ここでは、シミュレーションエンジン部61は、シミュレートの対象となるオブジェクトの各々にオブジェクト識別子を付し、それぞれの所定時間(1ステップ)後の移動位置を、シミュレートして演算し、当該移動位置などシミュレートに関わる情報を各オブジェクトの識別子に関連づけて、オブジェクトデータベースに格納する。
例えば、鳥オブジェクトや魚オブジェクトの移動は、群れの挙動をシミュレートする処理によって行われる。具体的な例としては、集まりやすさや、離れやすさ、集中対象の位置、忌避対象の位置等のシミュレートパラメータ情報に基づいてシミュレートを行う。ここで集中対象とは、より近くに寄ろうとする対象(オブジェクト)であり、例えば鳥であれば捕食対象としての魚が集中対象の一例となる。また、忌避対象とは、より離れようとする対象(オブジェクト)であれば、例えば魚であれば、捕食者である鳥が忌避対象の一例となる。このような群れの挙動をシミュレートする処理では、これらのシミュレートパラメータ情報を利用して、群れに属する各個体(個々のオブジェクト)の次のステップでの移動位置を演算する。
また、このシミュレーションエンジン部61は、管理しているオブジェクトの種類に応じて定められる移動以外の挙動に係る処理を実行する。例えば、鳥オブジェクトについては、所定範囲内に所在する魚オブジェクトを捕食するか否かを決定する処理を実行する。
さらにシミュレーションエンジン部61は、相互作用に係る処理を実行するべき旨の指示を、衝突判定部54から受けると、当該指示とともに受信されるオブジェクトの情報を利用して、シミュレートの処理を続ける。
例えば魚オブジェクトにおいては、忌避対象である鳥オブジェクトの位置情報を、相互作用の相手となるオブジェクトに関する情報として受信し、当該位置情報を忌避対象の位置情報として設定してシミュレーションを続行すればよい。
オブジェクトデータ記憶部62は、個々のシミュレート対象である各オブジェクトごとに、位置に関する情報を記憶部22に格納して保持させる。
通知判定部63は、本発明の選択通知手段に相当し、管理しているオブジェクトのうち、所与の通知条件を満足するものがあれば、当該通知条件を満足するオブジェクトの情報を相互通信制御部2に送信する処理(通知処理)を実行する。ここで通知条件は、パラメータ情報として記憶部33に格納しておく。この通知条件は例えば、仮想空間内におけるオブジェクトの所在領域に関わる条件とする。具体例として鳥オブジェクトにおいては、捕食対象のいる池の範囲であって、地上所定高さ未満の領域(捕食対象たる魚を捉えて捕食可能として設定される領域)に所在するオブジェクトを通知対象とするとの条件を定める。
次に、本実施の形態のシミュレーションシステムの動作例を説明する。以下の動作例では、車オブジェクトの挙動をシミュレートする個別シミュレータ3aと、鳥オブジェクトの挙動をシミュレートする個別シミュレータ3bと魚オブジェクトの挙動をシミュレートする個別シミュレータ3cとがネットワークを介して接続され、仮想都市空間内のオブジェクトを管理している場合を例として説明する。
このとき、鳥と車、魚と車とは相互作用がないが、鳥と魚との間には、鳥が魚を捕食するという関係を仮想的に設定しておくとする。この捕食関係を設定するため、鳥が魚を捕食可能な領域に入ったこと、例えば、池の上空ないし池の内部であって、地上所定高さ未満の領域にある鳥オブジェクトを通知対象とする、との通知条件を定めて、個別シミュレータ3bの記憶部32に設定する。
また、魚オブジェクトに関しても、池の水面から、別途定められた深さDまでの領域に存在する魚オブジェクトを通知対象とする、との通知条件を定め、個別シミュレータ3cの記憶部32に設定しておく。
なお、車オブジェクトは、ユーザオブジェクトなどの人オブジェクトとの間で相互作用をすることがある(衝突など)が、ここでは人オブジェクトの移動可能範囲は、歩道または横断歩道のみと制限され、車オブジェクトの移動可能範囲は車道のみと制限されている。このため、人オブジェクトと車オブジェクトとの相互作用は、各種別のオブジェクトの移動可能範囲が交差する領域である、横断歩道のみとなる。そこで、車オブジェクトを管理する個別シミュレータ3aには、横断歩道内に進入している車オブジェクトを通知の対象とする、との通知条件を設定しておく。同様に、人オブジェクトを管理する側には、横断歩道内に進入した人オブジェクトを通知の対象とするとの通知条件を設定しておく。つまり、ここではユーザ端末1に対し、ユーザオブジェクトが横断歩道内に進入したときに、通知を行うよう設定しておく。
さらに、相互通信制御装置2の依存関係データベース55には、図4に例示したように、鳥オブジェクトを管理する個別シミュレータ3bを特定する情報と、魚オブジェクトを管理する個別シミュレータ3cを特定する情報とをキーとして、このキーに関連づけて、通知されている(通知データベースに格納された)魚オブジェクトの情報を個別シミュレータ3bに対して送出して、捕食するか否かを判断させる処理を行わせる旨の、処理規定情報としての依存関係エントリー(以下、区別のため捕食関係エントリーと呼ぶ)を設定しておく。
この動作例においては、図6に示すように、各個別シミュレータ3a、3b、3cは、それぞれが担当する種別のオブジェクトについて、予め定められたアルゴリズムでの挙動シミュレーションを行って、各オブジェクトの移動位置を逐次変化させている(S1a,S1b,S1c)。例えば鳥オブジェクトを担当する個別シミュレータ3bでは、群れをシミュレートするアルゴリズム(基礎的なものとして例えばReynolds, C. W. (1987) Flocks, Herds, and Schools: A Distributed Behavioral Model, in Computer Graphics, 21(4) (SIGGRAPH '87 Conference Proceedings) pages 25-34.)を用いて個々の鳥オブジェクトが仮想的な都市空間を飛来する状況をシミュレートする。
また、各個別シミュレータ3は、この移動の処理において、シミュレートの対象としているオブジェクト(一般に複数)のうち、設定された通知条件を満足するオブジェクトがあるか否かを判断する(S2a,S2b,S2c)。例えば鳥オブジェクトを管理する個別シミュレータ3bは、通知条件として設定された、池の上空ないし池の内部であって、地上所定高さ未満の領域に移動した鳥オブジェクト(通知対象)があるか否かを調べ、通知対象となる鳥オブジェクトがあれば、当該通知対象となった鳥オブジェクトの情報として、予め定められている情報、例えば通知対象となった鳥オブジェクトの位置の情報を相互通信制御装置2に送信して通知する(S3)。
相互通信制御装置2の相互通信制御部51は、当該通知された情報を受信し、個別シミュレータ3bを特定する情報と、通知された情報とを関連づけた通知データベースを記憶部22に格納する。
そして相互通信制御装置2の依存関係判断部53が、記憶部22に格納された依存関係データベース55を参照し、依存関係データベース55において設定されている各依存関係エントリーのキーとなる情報に含まれるすべての個別シミュレータ3から通知がされているか否かを、通知データベースを参照して調べる。これにより、実行するべき処理が依存関係データベース55に定められているか否かを判断する(S4)。
この例の段階では、魚オブジェクトを管理する個別シミュレータ3cから魚オブジェクトの通知を受けていない、つまり個別シミュレータ3cにおける魚オブジェクトの挙動シミュレートの現状から、池の水面から深さDまでの範囲にいる魚オブジェクトがない状態なので、通知データベースには鳥オブジェクトに係る個別シミュレータ3bを特定する情報が格納されているだけである。このため、依存関係データベース55に設定されている捕食関係エントリーのキーに含まれる各個別シミュレータ3b,3cからの通知がされていないことと判断され、処理S1に戻って次のステップでのシミュレーションが実行される。このとき、相互通信制御装置2は、通知データベースを記憶部22から削除する。
各個別シミュレータ3が、再び、次のステップでの移動の処理を行い(S5)、シミュレートの対象としているオブジェクト(一般に複数)のうち、設定された通知条件を満足するオブジェクトがあるか否かを判断する(S6)。ここで、個別シミュレータ3bが、通知対象となる鳥オブジェクトがあったとして、当該通知対象となった鳥オブジェクトの情報として例えば通知対象となった鳥オブジェクトの位置の情報を相互通信制御装置2に送信して再び通知する(S7)とする。
また、魚オブジェクトを管理する個別シミュレータ3cが、池の水面から設定された深さDまでの範囲に移動した魚オブジェクトを見いだした場合、当該魚オブジェクトを通知対象とし、当該通知対象となった魚オブジェクトの情報として例えば通知対象となった魚オブジェクトを特定する情報(当該魚オブジェクトの識別子等)や、その位置の情報を相互通信制御装置2に送信し、通知をする(S8)。
これらの通知を受けた相互通信制御装置2の相互通信制御部51は、当該通知された情報を受信し、個別シミュレータ3b、3cを特定する情報と、それぞれから通知された情報とを関連づけた通知データベースを記憶部22に格納する。
そして相互通信制御装置2の依存関係判断部53が、実行するべき処理が依存関係データベース55に定められているか否かを判断する(S9)。ここでは、通知データベースに個別シミュレータ3b、3cを特定する情報の双方が格納されているので、捕食関係エントリーのキーに含まれるすべての個別シミュレータ3を特定する情報が通知データベースに格納されていると判断され、衝突判定部54により当該キーに関連づけられた処理が実行される。既に述べたように、ここでの例では、通知データベースに格納された魚オブジェクトの情報を個別シミュレータ3bに対して送出して、捕食するか否かを判断させる処理を行わせることとなる(S10)。
個別シミュレータ3bのシミュレーションエンジン部61では、通知対象となった鳥が、ここで相互通信制御装置2から受信した魚オブジェクトを捕食する挙動を行うか否かを例えば乱数値や、所定のシミュレーション用のパラメータ(空腹パラメータなど)に応じて判断し(S11)、当該判断の結果を相互通信制御装置2に送出する(S12)。例えば、捕食したとする場合は、捕食した魚オブジェクトの識別子を相互通信制御装置2に送出し、捕食しなかったとする場合は、その旨を相互通信制御装置2に送出する。
相互通信制御装置2の衝突判定部54は、そして依存関係に係る処理の結果を個別シミュレータ3へ報知する。ここでは、受信した判断結果の情報から捕食がされたか否かを調べ、捕食がされた場合には、捕食された魚オブジェクトの識別子を個別シミュレータ3cに送出して、当該識別子で識別される魚オブジェクトをオブジェクトデータベースから削除させる(S13)。また相互通信制御装置2は、捕食の結果、通知対象となっていた魚オブジェクトのうち、捕食されたとされる魚オブジェクトが消失した旨の情報を個別シミュレータ3bへ送信する(S14)。
以下、各個別シミュレータ3が、またそれぞれの管理するオブジェクトの挙動をシミュレートする処理から繰り返して実行する。
本実施の形態によると、鳥オブジェクトを管理する個別シミュレータ3bと、魚オブジェクトを管理する個別シミュレータ3cとは、それぞれの管理するオブジェクトが仮想空間内で相互作用を行い得る程度として予め定められた範囲に進入しない限り、他のオブジェクトに関わる情報を受信することがなく、従って相互作用のシミュレートの処理を実行する必要がない。これによりシミュレートの処理負担を軽減することができる。
また、図6の例にあるように、相互作用の設定のない、オブジェクト間(車と魚、車と鳥)では、情報の送受も行われない。つまり、通知対象となった鳥オブジェクトがあっても、車オブジェクトの挙動をシミュレートする個別シミュレータ3aに対しては当該鳥オブジェクトの情報は送信されることがない。これにより、通信負担をも軽減できる。
なお、ここでは各オブジェクトの挙動についてのシミュレーションを進めるごとに毎回、通知データベースを削除し、新たに通知を受けて通知データベースを更新することとしたが、各個別シミュレータにおいて前回通知した通知対象と、今回通知するべき通知対象とに変化が生じたときに、当該変化(通知データベースに追加するべきオブジェクトの情報と、通知データベースから削除するべきオブジェクトの情報と)を相互通信制御装置2に通知するようにしてもよい。このようにすれば、通知対象に変化のない間は、毎回通知を行う必要がなくなり、通信負荷を軽減できる。
また、ここではそれぞれの個別シミュレータ3に、予め通知条件が設定されている場合を例として述べたが、次に説明するように通知条件は事前に設定されていなくてもよい。
例えば上述の例において、魚オブジェクトを管理する個別シミュレータ3cには、通知対象を定める深さDの情報が事前に設定されているとしたが、この深さDの情報を当初、D=0、すなわち水面上にいる魚オブジェクトを通知対象とすることとしておくなど、一般的には通知が行われない条件としておき、相互通信制御装置2において、特定の個別シミュレータ3からの通知があったことを条件としてこの深さDの情報を、D=d(d>0)と個別シミュレータ3cに設定させて、深さdまでの魚オブジェクトを通知させるようにしてもよい。
すなわちこの場合は、鳥オブジェクトを管理する個別シミュレータ3bを特定する情報をキーとして、このキーに関連づけて魚オブジェクトを管理する個別シミュレータ3cに対し、深さDの情報をD=d(d>0)と設定させる処理を行わせる旨を設定した依存関係エントリー(以下、区別のため深度設定エントリーと呼ぶ)を、依存関係データベース55に格納しておく。
こうすると、上記図6に示した処理S4の段階において、相互通信制御装置2の依存関係判断部53が実行するべき処理が依存関係データベース55に定められているか否かを判断するにあたり、当該段階で通知データベースには鳥オブジェクトに係る個別シミュレータ3bを特定する情報が格納されているので、深度設定エントリーのキーに含まれるすべての情報が通知データベースに格納されていることとなり、相互通信制御装置2は、魚オブジェクトを管理する個別シミュレータ3cに対し、深さDの情報をD=d(d>0)と設定するよう指示する。
この指示を受けて個別シミュレータ3cは、深さDの情報をdに設定し、池の水面から当該設定された深さD=dまでの範囲に存在する魚オブジェクトがあるか否かを調べる。ここでかかる魚オブジェクトがあれば、当該魚オブジェクトを通知対象とし、例えば当該通知対象となった魚オブジェクトを特定する情報(当該魚オブジェクトの識別子等)や、その位置の情報を相互通信制御装置2に送信し通知する。
相互通信制御装置2は当該通知された情報を受信して、個別シミュレータ3cを特定する情報と、通知された情報とを関連づけて通知データベースに追加して格納する。そして相互通信制御装置2の依存関係判断部53が、実行するべき処理が依存関係データベース55に定められているか否かを判断する。この段階では、通知データベースに個別シミュレータ3b、3cを特定する情報の双方が格納されているので、捕食関係エントリーに係る、図6の処理S10以下の処理が実行され、通知データベースに格納された魚オブジェクトの情報を個別シミュレータ3bに対して送出して、捕食するか否かを判断させる処理を行わせる。
なお、ここまでは説明を簡易にするために、依存関係データベース55には、鳥と魚との間の捕食関係に係る依存関係エントリーが格納されている例を示したが、依存関係エントリーはこれだけに限られず、例えば、人オブジェクトと車オブジェクトとの依存関係として、衝突判断や、忌避行動(車オブジェクトは、人オブジェクトがいなくなるまで停止するなど)のパラメータ設定等を行わせてもよい。
さらに本実施の形態では、ユーザ端末1は所定のタイミングごとに、ユーザオブジェクトからの視野範囲に属するオブジェクトの情報を取得して表示する。すなわちユーザ端末1のユーザ視野表示部42が、ユーザの視野範囲に係る情報(ユーザの視野範囲を画定する仮想空間内の領域を表す情報)を相互通信制御装置2に送信する。
相互通信制御装置2の検索処理部52は、このユーザ端末1から受信される情報で画定される視野範囲内のオブジェクトの情報を各個別シミュレータ3に送出して、各個別シミュレータ3に対してオブジェクト検索処理を行わせる。各個別シミュレータ3では、相互通信制御装置2から指定された領域内に含まれるオブジェクトのリストを送出する。このオブジェクトのリストは、オブジェクトの外観を定める情報やオブジェクトの位置に係る情報等を列挙したものである。
相互通信制御装置2は、各個別シミュレータ3から受信されるオブジェクトのリストをユーザ端末1に送出する。ユーザ端末1では、こうして相互通信制御装置2からユーザ視野範囲に含まれる他の(ユーザオブジェクト以外の)オブジェクトの情報を受信し、ディスプレイ等に表示する。
なお、ユーザ端末1がシミュレーションの1ステップごとに各オブジェクトの位置の情報を取得して表示することとすると、オブジェクトの数が増大したときにその通信負担が大きくなってしまう。そこで、ユーザ端末1は、予め定めたタイミング決定ルールに基づいて定められる同期タイミングにおいてユーザオブジェクトからの視野範囲に属するオブジェクトの情報を取得することとしてもよい。この場合、ユーザ端末1は、当該同期タイミング以外の時点では、最後に受信したオブジェクトの情報に基づいて、表示の時点でのオブジェクトの位置などの挙動を予測して、その結果を表示する。
つまりこの例では、ユーザ端末1は、図5に示した例に代えて図7に示すように、機能的にはユーザオブジェクト管理部41と、ユーザ視野表示部42′と、同期部43と、シミュレート結果予測部44とを備えてなる。
ユーザ視野表示部42′は、ユーザの視野範囲に存在するオブジェクトのリストとして図示しないメモリに格納している、シミュレート結果の予測情報(オブジェクトの予測情報)に基づいて、当該視野範囲に含まれる他のオブジェクトの情報をディスプレイ等に表示する。
同期部43は、予め定めたタイミング決定ルールに基づいて同期タイミングを定め、当該同期タイミングにおいて、ユーザの視野範囲を画定する情報とともに当該視野範囲に含まれるオブジェクトの情報を要求する指示を相互通信制御装置2に送信し、相互通信制御装置2から当該視野範囲に含まれる他のオブジェクトの情報を受信してメモリに格納する。
シミュレート結果予測部44は、シミュレーションの1ステップに係る時間ごとに、同期部43によってメモリに格納されたオブジェクトの情報を利用して、各オブジェクトの挙動(シミュレーション結果)を予測して、メモリに格納されているオブジェクトの予測情報を更新する。
ここではシミュレート結果予測部44は例えば、カルマンフィルタ等を用いて、同期部43が取得した実際のシミュレート結果によって予測値を補正しながら、オブジェクトの位置等の情報の予測を行う。
このようにユーザ端末1が他のオブジェクトの位置を予測して表示することで、他のオブジェクトの位置の情報を常時取得する必要がなくなり、通信負担を軽減できる。
また、個別シミュレータ3によっては、ユーザオブジェクトの位置等の情報を利用して、担当しているオブジェクトの挙動をシミュレートするものもある。例えば、ユーザのペットなどのオブジェクトを担当する個別シミュレータ3があれば、ユーザオブジェクトの位置に応じて、当該ペットの位置をシミュレートする必要が生じる。
そこで当該個別シミュレータ3は、ユーザオブジェクトの位置の情報を提供するようユーザ端末1に通知しておく。そしてユーザ端末1は、当該通知の元となった個別シミュレータ3に対して、ユーザオブジェクトの情報を送出する。この場合も、シミュレーションの1ステップごとにユーザオブジェクトの情報を送出するのではなく、予め定めたタイミング決定ルールに基づいて定められる同期タイミングにおいてのみ、ユーザオブジェクトの情報を送出するようにしてもよい。
ユーザオブジェクトの情報を受信する個別シミュレータ3は、この場合、同期タイミングにて受信したユーザオブジェクトの情報を記憶部32に格納し、同期タイミング外のステップにおいては、ユーザオブジェクトの移動位置等を記憶している情報を元に予測し、当該予測の結果に基づいてオブジェクトの挙動をシミュレートする。この際のユーザオブジェクトの移動位置の予測もまた、例えばカルマンフィルタ等を用いて行うことができる。
なお、これらの例において同期タイミングを定めるタイミング決定ルールは、例えば、最後に同期してからの経過時間や、ユーザオブジェクトの移動速度、他のオブジェクトの移動速度等に応じて定めることができる。例えば最後に同期してからの経過時間が一定の時間に達するごとに同期タイミングを定めてもよい(この場合は一定の間隔で同期が行われる)し、ユーザオブジェクトの移動速度や他のオブジェクトの移動速度が高速になればなるほど短く設定される時間しきい値を演算し、最後に同期してからの経過時間が演算した時間しきい値を越えるときに同期タイミングを定めてもよい。
さらに、同期タイミングは、相互通信制御装置2によって定めてもよい。この場合において、相互通信制御装置2は、ユーザ端末1から受信するユーザの視野範囲の情報を用いて、各個別シミュレータ3に対して、当該視野範囲内に存在するオブジェクトがあるか否かを問い合わせる。
各個別シミュレータ3は、指定された視野範囲内に存在するオブジェクトがあるか否かをそれぞれ判断し、視野範囲内に存在するオブジェクトがある場合は、その旨を相互通信制御装置2に対して送出する。相互通信制御装置2は、視野範囲内に存在するオブジェクトがある旨の回答を送出した個別シミュレータ3を特定する情報のリストを記憶する。この情報のリスト(以下、対象シミュレータリストと呼ぶ)は、所定のタイミングごとに、例えば定期的に更新する。
相互通信制御装置2は、当初(初期化時)には、記憶しているリストの情報で特定されるすべての個別シミュレータ3に対して視野範囲内に存在するオブジェクトの情報を要求する(上述の検索処理)。そして、各個別シミュレータ3が送出するオブジェクトのリストを取得して、ユーザ端末1へ送信する。
また、相互通信制御装置2は、対象シミュレータリストに新規に追加される個別シミュレータ3があれば、当該新規に追加された個別シミュレータ3に対しては、ユーザオブジェクトの視野範囲内に存在するオブジェクトの情報を要求する(上述の検索処理)。そして、個別シミュレータ3が送出するオブジェクトのリストを取得して、ユーザ端末1へ送信する。
相互通信制御装置2は、これらのように個別シミュレータ3からオブジェクトの情報を受信すると、図示しない時計部からデータを取得した時点を表すタイムスタンプ情報を取得し、各個別シミュレータ3から受信したデータ量と当該タイムスタンプ情報とを、各個別シミュレータ3を特定する情報に関連づけて、受信データ量データベースとして記憶部22に格納しておく。
ユーザ端末1は、表示を更新する際に、相互通信制御装置2に対してその旨を表す信号(表示更新信号)を送出する。
相互通信制御装置2は、ユーザ端末1から表示更新信号を受信した時点で、個別シミュレータ3がシミュレートを行って次のステップにおけるオブジェクトの位置の演算を完了するまでの時間(余裕時間)を調べる。
そして当該余裕時間内に取得可能なデータ量を取得可能データ量として演算する。相互通信制御装置2は、記憶部22に格納した受信データ量データベースを参照し、当該演算した取得可能データ量以下のデータ量に関連づけられ、かつ、対象シミュレータリストに含まれる個別シミュレータ3を特定する情報を予備的に選択する。
そして予備的に選択した個別シミュレータ3を特定する情報のうち、最も古いタイムスタンプ情報に関連づけられている個別シミュレータ3を特定する情報を一つ選択する。なお、最も古いタイムスタンプ情報に関連づけられている個別シミュレータ3を特定する情報が複数あれば、ランダムにそのうちの一つを選択してもよい。
なお、相互通信制御装置2において、依存関係データベース55内の依存関係エントリーに登録された処理を行った場合、当該依存関係エントリーに複数の個別シミュレータ3を特定する情報(または複数の個別シミュレータ3に係るオブジェクトを特定する情報)が含まれていたときには、依存関係エントリーに登録された処理の結果を、当該複数の個別シミュレータ3に一斉に報知する必要が生じる。そうでないと、ユーザ端末1において表示するシミュレーションの結果に矛盾が生じる可能性がある場合があるからである。
そこでこうした場合、個別シミュレータ3の各々についてのデータ量だけでなく、一斉に同期する必要のある個別シミュレータ3の群について、当該群に属する個別シミュレータ3の各々に関連づけて、受信データ量データベースに登録されているデータ量の値を取得し、群に属する個別シミュレータ3の各々に関連して記録されているデータ量の値を合算して、群全体でのデータ量の値を演算し、群を特定する情報(例えば群に属する複数の個別シミュレータ3を特定する情報のリスト)に関連づけて、当該群について演算した群全体でのデータ量の値を受信データ量データベースに格納しておく。
相互通信制御装置2は、余裕時間内に取得可能なデータ量を取得可能データ量として演算し、記憶部22に格納した受信データ量データベースから、当該演算した取得可能データ量以下のデータ量に関連づけられ、かつ、対象シミュレータリストに含まれる個別シミュレータ3を特定する情報または群を特定する情報を予備的に選択する。
以下、予備的に選択した個別シミュレータ3を特定する情報または群を特定する情報のうちから、一つを所定の条件に従って選択する。この選択の条件は、例えば群についてのタイムスタンプ情報を、当該群に属する個別シミュレータ3のそれぞれに関連づけられたタイムスタンプ情報のうち、最も古いものとしておき、最も古いタイムスタンプ情報に関連づけられている個別シミュレータ3を特定する情報または群を特定する情報を選択する条件であってもよいし、ランダムに一つを選択する条件であってもよい。
これにより、群単位での同期も可能となり、ユーザ端末1にて表示されるシミュレーションの結果に矛盾が生じないようにすることができる。
相互通信制御装置2は、最終的に選択した情報で特定される個別シミュレータ3に対して、ユーザオブジェクトの視野範囲内に存在するオブジェクトの情報を要求する(上述の検索処理)。そして、個別シミュレータ3が送出するオブジェクトのリストを取得して、ユーザ端末1へ送信する。そして相互通信制御装置2は、図示しない時計部からデータを取得した時点を表すタイムスタンプ情報を取得し、上記最終的に選択した個別シミュレータ3から受信したデータ量と当該タイムスタンプ情報とを、個別シミュレータ3を特定する情報に関連づけて格納し、受信データ量データベースの内容を更新する。
また、ユーザ端末1は、相互通信制御装置2からオブジェクトのシミュレート結果に係る情報を受信するごとに、同期タイミングが到来したと判断して、ユーザオブジェクトの情報を、相互通信制御装置2へ送出する。
なお、個別シミュレータ3は、相互通信制御装置2に対してオブジェクトのリストを送出するときに、個別シミュレータ3内で予測しているユーザオブジェクトの位置などの情報を併せて送出してもよい。相互通信制御装置2は、受信したユーザオブジェクトの予測された情報をユーザ端末1へ送出し、ユーザ端末1では、この予測されている情報と、現実にユーザの操作によって変化したユーザオブジェクトの情報とを比較して、例えば予測された位置と現実の位置とが予め定めたしきい値以上に離れている場合に、ユーザオブジェクトの情報を、相互通信制御装置2へ送出するようにしてもよい。
相互通信制御装置2は、上記最終的に選択した個別シミュレータ3に対して、受信したユーザオブジェクトの情報を送出する。ユーザオブジェクトの情報を受信した個別シミュレータ3は、当該ユーザオブジェクトの情報を記憶部32に格納して、以降のシミュレーションに利用する。
この例によると、ユーザ端末1と、相互通信制御装置2が選択した個別シミュレータ3とが時間をおいて同期しており(図8のステップ(a))、ユーザ端末1側では、最後の同期で取得したオブジェクトの移動を予測しつつ表示を行っており(図8のステップ(b))、同様に個別シミュレータ3側でもユーザオブジェクトの移動を予測してオブジェクトの挙動をシミュレートしており(図8のステップ(c))、次の同期が行われた際には、それぞれ受信したオブジェクトの情報やユーザオブジェクトの情報に基づいて予測の結果を補正していく(図8のステップ(d))。これにより、同期を毎ステップごとに行う必要がなくなり、通信負担を軽減できる。
なお、ここまでの説明において、オブジェクトの情報(ユーザオブジェクトの情報を含む)は、相互通信制御装置2を介して送受しているものとしていたが、当該オブジェクトの情報は、ユーザ端末1と、個別シミュレータ3との間で直接的に授受しても構わない。
次に、本発明の第2の実施の形態に係るシミュレーションシステムについて説明する。この第2の実施の形態に係るシミュレーションシステムは、図9に示すように、ユーザ端末1と、複数の個別シミュレータ3とを含んで構成される。これらは相互にネットワークを介して接続されている。
この実施の形態では、ユーザ端末1は図7に示したものと同様に、機能的にはユーザオブジェクト管理部41と、ユーザ視野表示部42′と、同期部43と、シミュレート結果予測部44とを備えてなる。
この例では同期部43は、予め定めたタイミング決定ルールに基づいて同期タイミングを定め、当該同期タイミングにおいて、ユーザの視野範囲を画定する情報とともに当該視野範囲に含まれるオブジェクトの情報を要求する指示を各個別シミュレータ3へ送信し、各個別シミュレータ3から当該視野範囲に含まれる他のオブジェクトの情報を受信してメモリに格納する。
また、シミュレート結果予測部44は、シミュレーションの1ステップに係る時間ごとに、同期部43によってメモリに格納されたオブジェクトの情報を利用して、各オブジェクトの挙動(シミュレーション結果)を予測して、メモリに格納されているオブジェクトの予測情報を更新する。
ここではシミュレート結果予測部44は例えば、カルマンフィルタ等を用いて、同期部43が取得した実際のシミュレート結果によって予測値を補正しながら、オブジェクトの位置等の情報の予測を行う。
このようにユーザ端末1が他のオブジェクトの位置を予測して表示することで、他のオブジェクトの位置の情報を常時取得する必要がなくなり、通信負担を軽減できる。
またユーザオブジェクトの情報を利用する個別シミュレータ3は、ユーザオブジェクトの位置の情報を提供するようユーザ端末1に通知しておく。そしてユーザ端末1は、当該通知の元となった個別シミュレータ3に対して直接、ユーザオブジェクトの情報を送出する。
なお、この場合も、シミュレーションの1ステップごとにユーザオブジェクトの情報を送出するのではなく、予め定めたタイミング決定ルールに基づいて定められる同期タイミングにおいてのみ、ユーザオブジェクトの情報を送出するようにしてもよい。この場合、個別シミュレータ3は、同期タイミングにて受信したユーザオブジェクトの情報を記憶部32に格納し、同期タイミング外のステップにおいては、ユーザオブジェクトの移動位置等を記憶している情報を元に予測し、当該予測の結果に基づいてオブジェクトの挙動をシミュレートする。この際のユーザオブジェクトの移動位置の予測もまた、例えばカルマンフィルタ等を用いて行うことができる。
なお、これらの例において同期タイミングを定めるタイミング決定ルールは、例えば、最後に同期してからの経過時間や、ユーザオブジェクトの移動速度、他のオブジェクトの移動速度等に応じて定めることができる。例えば最後に同期してからの経過時間が一定の時間に達するごとに同期タイミングを定めてもよい(この場合は一定の間隔で同期が行われる)し、ユーザオブジェクトの移動速度や他のオブジェクトの移動速度が高速になればなるほど短く設定される時間しきい値を演算し、最後に同期してからの経過時間が演算した時間しきい値を越えるときに同期タイミングを定めてもよい。
さらに同期タイミングにおいては、すべての個別シミュレータ3との間で同期を行う必要は必ずしもない。例えばユーザ端末1は、ユーザオブジェクトの視野範囲の情報を用いて、各個別シミュレータ3に対して、当該視野範囲内に存在するオブジェクトがあるか否かを問い合わせる。
各個別シミュレータ3は、指定された視野範囲内に存在するオブジェクトがあるか否かをそれぞれ判断し、視野範囲内に存在するオブジェクトがある場合は、その旨をユーザ端末1に対して送出する。ユーザ端末1は、視野範囲内に存在するオブジェクトがある旨の回答を送出した個別シミュレータ3を特定する情報のリストを記憶する。この情報のリスト(以下、対象シミュレータリストと呼ぶ)は、所定のタイミングごとに、例えば定期的に更新する。
ユーザ端末1は、当初(初期化時)には、記憶しているリストの情報で特定されるすべての個別シミュレータ3に対して視野範囲内に存在するオブジェクトの情報を要求する。そして、各個別シミュレータ3はユーザオブジェクトの視野範囲内にあるオブジェクトのリストを生成して、ユーザ端末1へ送信する。
また、ユーザ端末1は、対象シミュレータリストに新規に追加される個別シミュレータ3があれば、当該新規に追加された個別シミュレータ3に対しては、ユーザオブジェクトの視野範囲内に存在するオブジェクトの情報を要求する(上述の検索処理)。そして、各個別シミュレータ3はユーザオブジェクトの視野範囲内にあるオブジェクトのリストを生成して、ユーザ端末1へ送信する。
ユーザ端末1では、これらのように個別シミュレータ3からオブジェクトの情報を受信すると、図示しない時計部からデータを取得した時点を表すタイムスタンプ情報を取得し、各個別シミュレータ3から受信したデータ量と当該タイムスタンプ情報とを、各個別シミュレータ3を特定する情報に関連づけて、受信データ量データベースとして記憶しておく。
ユーザ端末1は、同期タイミングが到来したと判断した時点から、個別シミュレータ3がシミュレートを行って次のステップにおけるオブジェクトの位置の演算を完了するまでの時間(余裕時間)を調べる。そして当該余裕時間内に取得可能なデータ量を取得可能データ量として演算する。
ユーザ端末1は、記憶している受信データ量データベースを参照し、当該演算した取得可能データ量以下のデータ量に関連づけられ、かつ、対象シミュレータリストに含まれる個別シミュレータ3を特定する情報を予備的に選択する。
そして予備的に選択した個別シミュレータ3を特定する情報のうち、最も古いタイムスタンプ情報に関連づけられている個別シミュレータ3を特定する情報を一つ選択する。なお、最も古いタイムスタンプ情報に関連づけられている個別シミュレータ3を特定する情報が複数あれば、ランダムにそのうちの一つを選択してもよい。
ユーザ端末1は、最終的に選択した情報で特定される個別シミュレータ3に対して、ユーザオブジェクトの視野範囲内に存在するオブジェクトの情報を要求する。そして、当該個別シミュレータ3が送出するオブジェクトのリストを取得する。そして図示しない時計部からデータを取得した時点を表すタイムスタンプ情報を取得し、上記最終的に選択した個別シミュレータ3から受信したデータ量と当該タイムスタンプ情報とを、個別シミュレータ3を特定する情報に関連づけて格納し、受信データ量データベースの内容を更新する。
また、ユーザ端末1は、少なくとも一つの個別シミュレータ3からオブジェクトのシミュレート結果に係る情報を受信するごとに、同期タイミングが到来したと判断して、当該受信した情報の送信元である個別シミュレータ3に対して、ユーザオブジェクトの情報を送出する。
なお、個別シミュレータ3は、相互通信制御装置2に対してオブジェクトのリストを送出するときに、個別シミュレータ3内で予測しているユーザオブジェクトの位置などの情報を併せて送出してもよい。ユーザ端末1では、この予測されている情報と、現実にユーザの操作によって変化したユーザオブジェクトの情報とを比較して、例えば予測された位置と現実の位置とが予め定めたしきい値以上に離れている場合に、ユーザオブジェクトの情報を、個別シミュレータ3へ送出するようにしてもよい。
ユーザオブジェクトの情報を受信した個別シミュレータ3は、当該ユーザオブジェクトの情報を記憶部32に格納して、以降のシミュレーションに利用する。
この例によると、第1の実施の形態におけるのと同様に、ユーザ端末1と、当該ユーザ端末1が選択した個別シミュレータ3とが時間をおいて同期しており(図8のステップ(a))、ユーザ端末1側では、最後の同期で取得したオブジェクトの移動を予測しつつ表示を行っており(図8のステップ(b))、同様に個別シミュレータ3側でもユーザオブジェクトの移動を予測してオブジェクトの挙動をシミュレートしており(図8のステップ(c))、次の同期が行われた際には、それぞれ受信したオブジェクトの情報やユーザオブジェクトの情報に基づいて予測の結果を補正していく(図8のステップ(d))。これにより、同期を毎ステップごとに行う必要がなくなり、通信負担を軽減できる。
さらに、ここまでの説明においては、ユーザ端末1と、相互通信制御装置2と、個別シミュレータ3とをそれぞれ別体のコンピュータ装置によって実現し、相互にネットワークを介して接続する例について述べたが、本発明の実施形態は、これらに限られるものではない。例えば、ユーザ端末1と、相互通信制御装置2と、個別シミュレータ3とを一体のコンピュータ装置で構成しても構わない。また、別の例では、相互通信制御装置2と個別シミュレータ3とを一体のコンピュータ装置で構成し、ユーザ端末1との間で通信可能に接続してもよい。このとき、制御部21と制御部31、記憶部22と記憶部32、通信部23と通信部33とは、コンピュータ装置内で共通のものであってもよいし、別のハードウエア(例えばマルチプロセッサの場合、制御部21と制御部31とは各個別のプロセッサとすることができる)であってもよい。なお、ユーザ端末1と、相互通信制御装置2と、個別シミュレータ3とを一体のコンピュータ装置で構成した場合、プロセッサを、ユーザ端末1と、相互通信制御装置2と、個別シミュレータ3とのそれぞれとして機能させるプログラムが、コンピュータ可読な記憶媒体としての記憶部22または記憶部32に格納される。同様に、相互通信制御装置2と、個別シミュレータ3とを一体のコンピュータ装置で構成した場合、プロセッサを、相互通信制御装置2と、個別シミュレータ3とのそれぞれとして機能させるプログラムが、コンピュータ可読な記憶媒体としての記憶部22または記憶部32に格納されることとなる。
これらの場合、相互通信制御装置2や個別シミュレータ3を実現するコンピュータ装置は、相互通信制御装置2としてのプロセスや、個別シミュレータ3としての複数のプロセスを並列的に動作させる。また、ユーザ端末1も一体の装置で実現する場合は、ユーザ端末1としてのプロセスも並列的に動作させる。この並列動作については、種々の方法を採用できるが、複数のプロセッサ(プログラム制御デバイス)を備えたコンピュータ装置であれば、クラスタシステムやグリッド、各プロセッサ間を仮想的なネットワークで接続した態様など、種々の構成で実現できる。
これらのように、ユーザ端末1と、相互通信制御装置2と、個別シミュレータ3とを一体のコンピュータ装置で実現する場合も、相互通信制御装置2と個別シミュレータ3とを一体のコンピュータ装置で実現し、ユーザ端末1との間で通信可能に接続する場合も、各個別シミュレータ3としての動作のうちで、通知対象となるオブジェクトがあるか否かを調べ、通知対象となるオブジェクトがあれば、相互通信制御装置2のプロセスへ、当該オブジェクトの情報を出力する。相互通信制御装置2としてのプロセスでは、当該オブジェクトの情報の入力を受けて、各オブジェクトの情報を出力した個別シミュレータ3を特定する情報(プログラムの実行プロセスIDなど)に関連づけて、各オブジェクトの情報を記録し、当該記録した情報と、依存関係データベースとを参照して、実行するべき処理があるか否かを調べ、実行するべき処理があれば、当該処理を実行してその結果を、当該処理に関連づけて依存関係データベースに記録されている個別シミュレータ3としてのプロセスに出力する。
また、これらの場合であっても、相互通信制御装置2が管理する複数の個別シミュレータ3の一部は、ネットワークを介して他のコンピュータ装置において実行されていてもよい。この場合、相互通信制御装置2として機能させるプログラムに、他のコンピュータ装置からオブジェクトに係る情報を受信して保持し、依存関係の判断に供するプログラムモジュールと、依存関係に関わる処理の結果を、他のコンピュータ装置へ送出する処理に係るプログラムモジュールとを含む。
1 ユーザ端末、2 相互通信制御装置、3 個別シミュレータ、21,31 制御部、22,32 記憶部、23,33 通信部、41 ユーザオブジェクト管理部、42 ユーザ視野表示部、51 相互通信制御部、52 検索処理部、53 依存関係判断部、54 衝突判定部、55 依存関係データベース、61 シミュレーションエンジン部、62 オブジェクトデータ記憶部、63 通知判定部。