以下、図面を参照しながら、本発明の第1の実施形態について説明する。
図1は、第1の実施形態における情報処理システムのシステム構成の一例を示す図である。図1に示す情報処理システムは、複合現実感技術(以下、MR技術という。)を用いた、複数の拠点のユーザに同一の仮想空間を閲覧・共有させるためのシステムである。情報処理システムは、クライアント装置101にHMD102が相互にデータ通信可能に接続される複数のMRシステムを含み、各MRシステムのクライアント装置101は、ネットワークを介してサーバ装置103と通信可能に接続されている。クライアント装置101とHMD102との接続は、有線接続であってもよいし、無線接続であってもよい。また、情報処理システムに含まれるMRシステムはいくつ存在してもよい。本実施形態では、クライアント装置101−1とHMD102−1とが接続されるMRシステムと、クライアント装置101−2とHMD102−2とが接続されるMRシステムと、その他複数のMRシステムとを含む情報処理システムとして説明を行う。また、MRシステムは部屋ごとに設けてもよいし、同一の部屋に設けてもよいため、本実施形態では拠点ごとに設けるものとして説明するがこれに限定されない。尚、図1のシステム上に接続される各種端末の構成は一例であり、用途や目的に応じて様々な構成例がある。
クライアント装置101は、汎用的なコンピュータである。クライアント装置101は、HMD102で撮影(撮像)された現実空間の画像(以下、現実空間画像という。)と、クライアント装置101で生成された仮想空間の画像(以下、仮想空間画像という。)とを重畳する。こうして生成された画像(以下、複合現実画像という。)を、HMD102に送信する。尚、MR技術に関しては従来技術を用いるため、詳細な説明は省略する。また、クライアント装置101は、パーソナルコンピュータであってもよいし、サーバのような大型のコンピュータであってもよい。更には、携帯電話やタブレット端末といった携帯端末であってもよい。コンピュータの種類は特に問わない。また、拠点ごとにクライアント装置101を設置せず、1台のクライアント装置101で処理するようにしてもよい。すなわち、1台のクライアント装置101が本実施形態における各MRシステムを構築してもよい。更には、クライアント装置101が設置される場所は特に問わない。
HMD102は、ヘッドマウントディスプレイである。HMD102は、ユーザの頭部に装着する装置であり、右目用と左目用のビデオカメラと、右目用と左目用のディスプレイを備えている。HMD102は、HMD102のビデオカメラで撮影された現実空間画像をクライアント装置101に送信する。そして、クライアント装置101から複合現実画像を受信し、ディスプレイに表示する。HMD102では、右目用と左目用のディスプレイを設けているので、視差によって立体感を得ることができる。尚、HMD102で撮影する現実空間画像とHMD102で表示する複合現実画像は、動画(映像)が望ましいが、所定の間隔で撮影された静止画であってもよい。また、スマートフォンのようにディスプレイとビデオカメラがハードウェアの前面と背面に設置されている装置を、ヘッドマウントディスプレイの代用としてもよい。
図2は、各拠点のMRシステムのシステム構成の一例を示す図である。前述した通り、クライアント装置101はHMD102と通信可能に接続されている。更に、クライアント装置101には赤外線カメラ202が接続されている。赤外線カメラ202は、赤外線を用いた光学式のセンサである。赤外線カメラ202は、現実空間に赤外線を照射し、現実空間の物体で反射した赤外線を撮影することにより、赤外線カメラ202が定義する座標系における、現実空間の物体の位置及び姿勢を特定する。この赤外線カメラ202を用いて、現実空間におけるHMD102(すなわちユーザ)の位置及び姿勢(向きや傾き、視線の方向等。以下、同じ。)を特定する。HMD102には、オプティカルマーカ201という赤外線を反射する物体を備えており、赤外線カメラ202はこのオプティカルマーカ201で反射した赤外線を撮影することで、HMD102の位置及び姿勢を特定できるようになっている。ユーザがどのような位置や姿勢であっても、当該ユーザが装着するHMD102のオプティカルマーカ201を撮影または検知できるように、MRシステムでは赤外線カメラ202を複数台設置することが望ましい。また、位置及び姿勢を特定可能なHMD102は、赤外線カメラ202の撮影範囲に存在するHMD102である。
尚、本実施形態においては、現実空間におけるHMD102の位置及び姿勢を特定するために、赤外線カメラ202を用いるが、HMD102の現実空間における位置及び姿勢を特定できるのであれば、これに限らない。例えば、磁気センサを用いてもよいし、HMD102が撮影した画像を解析して位置及び姿勢を特定してもよい。
図3は、クライアント装置101とHMD102の各ハードウェア構成の一例を示す図である。
CPU301は、システムバス304に接続される各デバイスやコントローラを統括的に制御する。
また、ROM302あるいは外部メモリ311には、CPU301の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステムが記憶されている。更には、各種装置の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。RAM303は、CPU301の主メモリ、ワークエリア等として機能する。
CPU301は、処理の実行に際して必要なプログラム等をRAM303にロードして、プログラムを実行することで各種動作を実現するものである。
また、入力コントローラ(入力C)305は、キーボードやマウス等のポインティングデバイス(入力デバイス310)からの入力を制御する。
クライアント装置101のビデオコントローラ(VC)306は、HMD102が備える右目・左目ディスプレイ322やディスプレイ312等の表示器への表示を制御する。右目・左目ディスプレイ322に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて出力される。また、右目・左目ディスプレイ322は、右目用のディスプレイと左目用のディスプレイとから構成されている。また、ディスプレイ312は、液晶ディスプレイ等であり、右目・左目ディスプレイ322と同様の表示、または仮想空間を操作するためのGUI(Graphical User Interface)が表示される。
メモリコントローラ(MC)307は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶する外部メモリ311(記憶手段)へのアクセスを制御する。外部メモリ311は、例えばハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等がある。
通信I/Fコントローラ(通信I/FC)308は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。特に、クライアント装置101の通信I/Fコントローラ308は、赤外線カメラ202との通信も制御する。
クライアント装置101の汎用バス309は、クライアント装置101に接続されるHMD102の右目・左目ビデオカメラ321で撮影した画像を取り込むために使用される。右目・左目ビデオカメラ321からは、外部入力端子(例えば、IEEE1394端子)を用いて入力される。また、右目・左目ビデオカメラ321は、右目用のビデオカメラと左目用のビデオカメラとから構成されている。
尚、CPU301は、例えばRAM303内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ上での表示を可能としている。また、CPU301は、ディスプレイ上の不図示のマウスカーソル等でのユーザ指示を可能とする。
本発明のクライアント装置101が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ311に記録されており、必要に応じてRAM303にロードされることによりCPU301によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ311に格納されている。
図4は、サーバ装置103のハードウェア構成を示す図である。尚、図4に示すハードウェア構成はあくまで一例である。
CPU401は、システムバス404に接続される各デバイスやコントローラを統括的に制御する。
また、ROM402あるいは外部メモリ411には、CPU401の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステムプログラムが記憶されている。また外部メモリ411には、サーバ装置103が実行する機能を実現するために必要な各種プログラム等が記憶されている。RAM403は、CPU401の主メモリ、ワークエリア等として機能する。
CPU401は、処理の実行に際して必要なプログラム等をRAM403にロードして、プログラムを実行することで各種動作を実現するものである。
また、入力コントローラ405は、キーボードやマウス等のポインティングデバイスといった入力デバイス409からの入力を制御する。
ビデオコントローラ406は、ディスプレイ412等の表示器への表示を制御する。表示器はCRTや液晶ディスプレイでも構わない。
メモリコントローラ407は、ハードディスクやフレキシブルディスク或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ411へのアクセスを制御する。外部メモリ411(記憶手段)は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶する。
通信I/Fコントローラ408は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。
尚、CPU401は、例えばRAM403内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ412上での表示を可能としている。また、CPU401は、ディスプレイ412上の不図示のマウスカーソル等でのユーザ指示を可能とする。
本発明のサーバ装置103が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ411に記録されている。この各種プログラム等は必要に応じてRAM403にロードされることによりCPU401によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ411に格納されている。
図5は、クライアント装置101とサーバ装置103の機能構成を示す機能構成図である。尚、図5のクライアント装置101とサーバ装置103の機能構成は一例であり、用途や目的に応じて様々な構成例がある。
クライアント装置101は機能部として、通信制御部501と、位置姿勢取得部502と、位置姿勢特定部503と、現実空間画像取得部504と、仮想空間生成部505と、仮想空間画像取得部506と、複合現実画像生成部507とを備える。また、表示制御部508と、記憶部509と、オブジェクト制御部510と、視点制御部511と、スケール設定部512とを備える。
通信制御部501は、クライアント装置101と通信可能なHMD102と赤外線カメラ202との各種情報の送受信を行う機能部である。通信制御部501は、前述したビデオコントローラ306、通信I/Fコントローラ308、汎用バス309等を通じてこれらの装置と情報の送受信を行う。また、通信制御部501は、他のクライアント装置101とサーバ装置103との各種情報の送受信も行う。
位置姿勢取得部502は、オプティカルマーカ201を備える装置の現実空間における位置及び姿勢(向き)を示す情報を赤外線カメラ202から取得する機能部である。本実施形態では、HMD102がオプティカルマーカ201を備えているため、位置姿勢取得部502は赤外線カメラ202が解析した、現実空間におけるHMD102の位置及び姿勢(HMD102を装着しているユーザの位置及び姿勢。以下同じ。)を示す情報を取得する。また、位置姿勢取得部502は、現実空間画像取得部504で右目・左目ビデオカメラ321から取得した右目用の現実空間画像と左目用の現実空間画像とを用いて、三角測量等の方法により、現実空間の物体の位置及び姿勢を特定することもできる。
位置姿勢特定部503は、位置姿勢取得部502で取得した、現実空間におけるHMD102の位置及び姿勢(向き)に対応する仮想空間上の位置及び姿勢(向き)を特定する機能部である。現実空間の座標系(赤外線カメラ202の座標系)と仮想空間の座標系とはあらかじめキャリブレーションがなされており、現実空間と仮想空間とが対応付けられている。つまり、この対応付けに基づいて現実空間におけるHMD102の位置及び姿勢に対応する仮想空間上の位置及び姿勢を特定する。
現実空間画像取得部504は、HMD102の右目・左目ビデオカメラ321で撮影された現実空間画像を取得する機能部である。
仮想空間生成部505は、クライアント装置101の外部メモリ311に記憶されている情報に基づいて仮想空間を生成する機能部である。仮想空間はクライアント装置101の内部に生成される仮想的な空間であるので、その空間の形や大きさに関する情報が外部メモリ311に記憶されており、これに基づいて仮想空間を生成する。仮想空間には三次元モデルからなるオブジェクトを配置可能である。オブジェクトはオブジェクト制御部510によって配置される。
仮想空間画像取得部506は、仮想空間生成部505で生成した仮想空間の画像を取得する機能部である。仮想空間画像取得部506が仮想空間の画像を取得する場合には、位置姿勢特定部503で特定した仮想空間におけるHMD102の位置及び姿勢に基づいて視点制御部511が仮想空間上の視点を設定する。そして、当該視点から見た場合の仮想空間画像を生成し、これを取得する。この視点に仮想的なカメラを設置し、仮想空間を撮像するようにすればよい。すなわちレンダリングする。
複合現実画像生成部507は、現実空間画像取得部504で取得した現実空間画像に仮想空間画像取得部506で取得した仮想空間画像を重畳することにより、複合現実画像を生成する機能部である。
表示制御部508は、クライアント装置101に接続されたHMD102の右目・左目ディスプレイ322やクライアント装置101に接続されたディスプレイ312における各種情報の表示制御を行う機能部である。特に、複合現実画像生成部507で生成された複合現実画像をHMD102の右目・左目ディスプレイ322に表示させる機能を有する。
記憶部509は、後述する各種テーブルの情報や仮想空間を生成するための情報、オブジェクト等の情報を記憶するための機能部である。必要に応じて、情報の追加・更新・削除を行う。本実施形態においては、共通の仮想空間やオブジェクトが各クライアント装置101の記憶部509で記憶されるものとして説明を行う。
オブジェクト制御部510は、三次元モデルからなるオブジェクトを仮想空間に配置するための機能部である。仮想空間が生成された場合には、あらかじめ定義された位置及び姿勢でオブジェクトを配置する。必要に応じて、配置されたオブジェクトを異なる位置及び姿勢で再配置する。
視点制御部511は、現実空間に存在するユーザの位置及び姿勢に基づいて、仮想空間に当該ユーザの視点を設定するための機能部である。現実空間に存在するユーザの位置及び姿勢は、すなわちHMD102の位置及び姿勢である。そのため、HMD102が備えるオプティカルマーカ201の位置及び姿勢を位置姿勢取得部502が取得し、位置姿勢特定部503によって仮想空間における位置及び姿勢を特定し、その特定した位置及び姿勢に基づいてユーザの視点を仮想空間に設定する。また、視点制御部511は、仮想空間における視点の高さを変更したり、視点を移動したりすることも可能である。
スケール設定部512は、仮想空間に設定される視点の高さや視点の移動量を変更するためのスケール情報をユーザごとに設定するための機能部である。スケール設定部512は、ユーザごとに受け付けたスケール情報を、当該ユーザと対応づけて管理する。スケール情報は、ユーザから指定されたパラメータであり、具体的には倍率を示す。例えば、スケール情報が“2”である場合には2倍を示すので、仮想空間に設定される視点の高さを通常の2倍の高さに設定することになる。
次にサーバ装置103は機能部として、通信制御部531と、記憶部532とを備える。
通信制御部531は、サーバ装置103と通信可能なクライアント装置101と各種情報の送受信を行う機能部である。通信制御部531は、前述した通信I/Fコントローラ308を通じてクライアント装置101と情報の送受信を行う。
記憶部532は、後述する各種テーブル等の情報を記憶するための機能部である。必要に応じて、情報の追加・更新・削除を行う。
次に、クライアント装置101−1から仮想空間を配信し、各クライアント装置101で仮想空間を設定する処理の流れについて、図6に示すフローチャートを用いて説明する。
ステップS601では、クライアント装置101−1のCPU301は、記憶部509の機能によりクライアント装置101−1の外部メモリ311に記憶された仮想空間情報を取得する。仮想空間情報とは、仮想空間を生成するための各種情報のことである。具体的には、仮想空間の形やその大きさ、また配置するオブジェクトやその配置場所といった、仮想空間を形作るために必要な情報である。この仮想空間情報は、クライアント装置101にインストールされている専用のCADアプリケーションで作成することが可能である。しかしながら、すべてのクライアント装置101にこの専用のアプリケーションがインストールされているとは限らない。そこで、後述するステップS602において、生成した仮想空間情報を他のクライアント装置101に配布、すなわち送信する。
ステップS602では、クライアント装置101−1のCPU301は、通信制御部501の機能により、ステップS601で取得した仮想空間情報をサーバ装置103に送信する。
ステップS603では、クライアント装置101−1のCPU301は、仮想空間生成部505の機能により、ステップS601で取得した仮想空間情報を用いて、仮想空間を生成する(仮想空間生成手段)。生成される仮想空間は、仮想空間情報が示す形や大きさの仮想空間であり、更には仮想空間情報が示すオブジェクトが仮想空間上に配置される。クライアント装置101−1には、MR体験をするための専用のビューワアプリケーションがインストールされており、このビューワアプリケーションによって仮想空間が生成される。すなわち、仮想空間情報を作成するためには、CADアプリケーションが必要であり、仮想空間を生成するためには、ビューワアプリケーションが必要となる。
ステップS604では、クライアント装置101−1のCPU301は、視点制御部511の機能により、ステップS604で生成された仮想空間上にユーザの視点を設定する(視点設定手段)。クライアント装置101−1と通信可能なHMD102−1を装着するユーザの視点の高さに基づいて、仮想空間に当該ユーザの視点を設定する。図7は、ステップS604で仮想空間上に視点が設定された場合を示す図である。図7(b)に示すように、現実空間に存在するユーザの視点702(すなわち、HMD102の位置)の座標が、(0,150,0)であった場合、図7(a)に示すように仮想空間上の座標(0,150,0)の位置に、当該ユーザの視点701を設定する。
ステップS605では、クライアント装置101−1のCPU301は、HMD102−1を介してユーザに対して複合現実感を体験させるべく、複合現実感提示処理を実行する。複合現実感提示処理の詳細は、後述する図11に示す。
一方、ステップS606では、サーバ装置103のCPU401は、通信制御部531の機能により、ステップS602でクライアント装置101−1から送信された仮想空間情報を受信する。そして、ステップS607では、サーバ装置103のCPU401は、通信制御部531の機能により、ステップS606で受信した仮想空間情報を、サーバ装置103が通信可能なクライアント装置101に送信する。ここで、ステップS606で受信した仮想空間情報の送信元であるクライアント装置101−1には、仮想空間情報を送信する必要がないので、送信しないことが望ましい。
ステップS608では、クライアント装置101−2のCPU301は、通信制御部501の機能により、ステップS607でサーバ装置103から送信された仮想空間情報を受信する。そして、受信した仮想空間情報をクライアント装置101−2の外部メモリ311に記憶する。
ステップS609では、クライアント装置101−2のCPU301は、仮想空間生成部505の機能により、ステップS608で受信した仮想空間情報を用いて、仮想空間を生成する(仮想空間生成手段)。仮想空間の生成については、ステップS603と同様である。これにより、いずれのクライアント装置101においても、同じ仮想空間が生成されることになる。また、クライアント装置101にCADアプリケーションがインストールされていないと自身で仮想空間情報を作成・編集することはできないが、他のクライアント装置101から仮想空間情報を受信することでCADアプリケーションが不要となる。ただし、CADアプリケーションがインストールされていなければ、仮想空間の大きさや形、オブジェクトの配置位置を変更することはできない。すなわち、クライアント装置101ごとに異なる大きさや形の仮想空間とすることはできない。
ステップS610では、クライアント装置101−2のCPU301は、視点制御部511の機能により、ステップS609で生成された仮想空間上にユーザの視点を設定する(視点設定手段)。視点の設定についてもステップS604と同様である。
ステップS611では、クライアント装置101−2のCPU301は、HMD102−2を介してユーザに対して複合現実感を体験させるべく、複合現実感提示処理を実行する。複合現実感提示処理の詳細は、後述する図11に示す。
このように、あるクライアント装置101から他のクライアント装置101に仮想空間情報を配信することで、いずれのクライアント装置101においても同じ仮想空間を生成することが可能となる。また、各クライアント装置101は、生成した共通の仮想空間を用いて各ユーザに複合現実感を体験させることが可能となる。
次に、ユーザごとにスケールを設定する処理の流れについて、図8に示すフローチャートを用いて説明する。
図8に示す一連の処理は、図6に示す一連の処理とは別のプロセスとして実行されるものである。そのため、どのようなタイミングで実行されてもよい。つまり、後述する図11の複合現実感提示処理を行っている間であっても、リアルタイムに任意の倍率にスケール情報を変更することが可能である。
ステップS801では、クライアント装置101のCPU301は、表示制御部508の機能により、図9に示すようなスケール設定画面900をディスプレイ312に表示する。そして、スケール設定画面900が備える入力フォームやボタンに対する入力を受け付ける。
スケール設定画面900は、スケール情報を設定するための画面である。スケール設定画面900は、スケール情報を入力するための入力フォーム901と、入力フォームに入力されたスケール情報を保存するための設定ボタン902等を備える。入力フォーム901には、スケール情報、すなわち倍率を入力するための入力フォームと、変更後の視点の高さを入力するための入力フォームとを備える。ユーザはラジオボタンによって、これらのいずれかを選択し、パラメータを入力する。
入力フォーム901にパラメータが入力された状態で設定ボタン902の押下を検知すると、ステップS802では、クライアント装置101のCPU301は、記憶部509の機能により、入力フォーム901に入力されたパラメータを取得する。そして、取得したパラメータをスケール情報として、ユーザ設定スケール情報1000(図10参照)に格納する。ここで、倍率を入力するための入力フォームに入力された場合には、入力された倍率をそのままユーザ設定スケール情報1000に格納する。一方、変更後の視点の高さを入力するための入力フォームに入力された場合には、仮想空間における現在のユーザの視点の高さと、入力された高さとに基づいて倍率を算出し、算出した倍率をユーザ設定スケール情報1000に格納する。すなわち、「入力された高さ÷現在のユーザの視点の高さ」で算出すればよい(パラメータ算出手段)。算出方法はこれに限らない。
ステップS803では、クライアント装置101のCPU301は、通信制御部501の機能により、ステップS802でユーザ設定スケール情報1000に格納したスケール情報をサーバ装置103に送信する。
ステップS804では、サーバ装置103のCPU401は、通信制御部531の機能により、ステップS803でクライアント装置101から送信されたスケール情報を受信する。そして、ステップS805では、サーバ装置103のCPU401は、記憶部532の機能により、ステップS804で受信したスケール情報を、図10に示すクライアント情報テーブル1020に格納する。
クライアント情報テーブル1020は、サーバ装置103の外部メモリ411に記憶されるデータテーブルである。クライアント情報テーブル1020は、クライアントID1021と、接続先情報1022と、スケール情報1023と、仮想空間位置姿勢情報1024とを備える。尚、クライアント情報テーブル1020が備える各項目はあくまで一例であり、これに限らない。
クライアントID1021は、クライアント装置101ごとに割り振られる一意な識別情報が格納される項目である。接続先情報1022は、クライアント装置101の接続先を示すIPアドレス等の情報が格納される項目である。スケール情報1023は、クライアント装置101で設定されたスケール情報が格納される項目である。仮想空間位置姿勢情報1024は、クライアント装置101で設定した、仮想空間におけるユーザの位置及び姿勢を示す情報が格納される項目である。
ステップS804では、クライアント情報テーブル1020にスケール情報を格納する際に、新たにレコードを作成し、クライアントID1021を発行する。そして、スケール情報の送信元であるクライアント装置101のIPアドレス等を接続先情報1022に格納し、更に受信したスケール情報をスケール情報1023に格納する。
本実施形態では、1台のクライアント装置101につき1台のHMD102が接続されているため、このHMD102を装着するユーザとクライアント装置101とが対応づくことになる。すなわち、クライアント装置101に設定したスケール情報は、クライアント装置101に接続されたHMD102を装着するユーザに対応するスケール情報である。よって、情報処理システムは、ユーザごとにスケール情報の設定を受け付けて、これを保存することになる。そして、サーバ装置103は各ユーザのスケール情報をクライアント情報テーブル1020で管理する。
次に、複合現実感提示処理の詳細について、図11に示すフローチャートを用いて説明する。
ステップS1101では、クライアント装置101のCPU301は、現実空間画像取得部504の機能により、HMD102の右目・左目ビデオカメラ321から現実空間画像を取得し、これをRAM303に記憶する。
ステップS1102では、クライアント装置101のCPU301は、位置姿勢取得部502の機能により、クライアント装置101と通信可能なHMD102の現実空間における位置及び姿勢を示す情報を取得し、RAM303に記憶する(向き取得手段)。前述した通り、HMD102が備えるオプティカルマーカ201を赤外線カメラ202が検知することで特定した位置及び姿勢を示す情報を、赤外線カメラ202から取得する。そして、図10に示す設定情報テーブル1010の現在位置姿勢情報1012に格納する。すでに現在位置姿勢情報1012が格納されている場合には、格納されている位置及び姿勢を示す情報を前位置姿勢情報1013にコピーし、新たに取得した位置及び姿勢を示す情報を現在位置姿勢情報1012に上書きする。また、仮想空間位置姿勢情報1014に格納されている姿勢の情報を、取得した現実空間における姿勢の情報で上書きする(向き変更手段)。
例えば、1フレーム前は図7(b)の視点702の位置であり、現在のフレームは図12の視点1201の位置である場合には、前位置姿勢情報1013に座標(0,150,0)、現在位置姿勢情報1012に座標(100,150,0)が格納される。尚、ここでいうフレームとは、HMD102に表示する映像のコマのことである。
設定情報テーブル1010は、クライアント装置101の外部メモリ311に記憶されるデータテーブルである。設定情報テーブル1010は、スケール情報1011と、現在位置姿勢情報1012と、前位置姿勢情報1013と、仮想空間位置姿勢情報1014とを備える。
スケール情報1011は、仮想空間をユーザが閲覧する際のスケール感を示す倍率が格納される項目である。現在位置姿勢情報1012は、現在のフレームにおけるユーザの位置及び姿勢を示す情報が格納される項目である。前位置姿勢情報1013は、1つ前のフレームにおけるユーザの位置及び姿勢を示す情報が格納される項目である。仮想空間位置姿勢情報1014は、仮想空間におけるユーザの位置及び姿勢を示す情報が格納される項目である。仮想空間位置姿勢情報1014には初期値として、前述したステップS604及びステップS610で設定された位置及び姿勢を示す情報が格納される。
ステップS1103では、クライアント装置101のCPU301は、位置姿勢特定部503の機能により、現実空間におけるHMD102の移動量を算出する。より具体的には、1フレーム前の時点で取得したHMD102の現実空間における位置(前位置姿勢情報1013)と、現時点で取得したHMD102の位置(現在位置姿勢情報1012)とを用いて、どのくらい移動したのかを算出(取得)する(移動量取得手段)。例えば、1フレーム前の時点は図7(b)の視点702の位置(座標(0,150,0))で、現時点では図12に示す視点1201の位置(座標(100,150,0))だった場合、X軸方向に100cm移動していることがわかる。よって、この100cmを現実空間におけるHMD102の移動量とする。二点間の距離は例えば、三平方の定理等によって算出してもよい。算出方法は特に問わない。
ステップS1104では、クライアント装置101のCPU301は、ユーザごとにスケール設定を行うべく、スケール設定処理を実行する。スケール設定処理の詳細は、後述する図16に示す。スケール設定処理を実行することで、設定情報テーブル1010のスケール情報1011に倍率が格納される。
ステップS1105では、クライアント装置101のCPU301は、視点制御部511の機能により、仮想空間に設定されたユーザの視点の高さを、ステップS1104で設定した当該ユーザに対応するスケール情報に応じて変更する(視点変更手段)。そして、変更後の視点の位置を示す情報で、1フレーム前の情報が格納されている仮想空間位置姿勢情報1014の位置を示す情報を上書きする。より具体的には、図7(a)に示すように、仮想空間におけるユーザの視点1201が座標(0,150,0)だった場合、垂直座標に対してスケール情報の値を乗算する。すなわち、本実施形態における垂直座標はY座標であるので、Y座標である“150”に例えば当該ユーザに対応するスケール情報1011の値である“10”を乗算する。その結果、図13に示すように、ユーザの視点1301は座標(0,1500,0)となる。
ステップS1106では、クライアント装置101のCPU301は、視点制御部511の機能により、ステップS1103で算出した移動量とステップS1104で設定した当該ユーザに対応するスケール情報とを用いて、仮想空間上の視点の移動量を算出する。すなわち、ステップS1103で算出した移動量にスケール情報1011の値を乗算することで、仮想空間上の視点の移動量を算出する(移動量決定手段)。
ステップS1107では、クライアント装置101のCPU301は、視点制御部511の機能により、ステップS1106で算出した移動量を用いて、仮想空間上のユーザの視点を移動する(視点移動手段)。すなわち、視点の高さを変更した後の仮想空間上のユーザの視点の位置を示す情報は仮想空間位置姿勢情報1014に格納されているので、この位置に算出した移動量を加算する。例えば、図13に示すように、高さを変更した後のユーザの視点1301の座標は、(0,1500,0)である。これに、ステップS1103で算出した移動量(X軸方向に100cm)にスケール情報1011(例えば、“10”)を乗算して、1フレーム前の仮想空間における視点の位置に加算する。つまり、現実空間ではX軸方向に100cmしか移動していないが、仮想空間ではその10倍の1000cm移動することになる。よって、図14の視点1401に示すように、この視点1401の座標は、(1000,1500,0)となる。このようにして、スケールに応じた高さと移動量で仮想空間におけるユーザの視点を移動させる。これをクライアント装置101ごとに実行することで、ユーザごとに設定されたスケール情報に応じた視点の高さに変更でき、更には当該スケール情報に応じた移動量で仮想空間を移動することが可能となる。
そして、あくまでスケール情報を用いるのは仮想空間におけるユーザの視点の位置に対する変更だけであり、その視点の向き(姿勢)に対してはスケール情報を適用しない。例えば、ユーザの頭が右に90度回転した場合に、この回転角度にスケール情報が示す値を乗算してしまうと、意図しない方向を向いてしまうことになる。これを防ぐために、現実空間においてユーザの視点の向きが移動した場合であっても、この移動量にはスケール情報を乗算しない。
ステップS1108では、クライアント装置101のCPU301は、通信制御部501の機能により、クライアント装置101に記憶された仮想空間位置姿勢情報1014とスケール情報1011とをサーバ装置103に送信する。送信する仮想空間位置姿勢情報1014は、ステップS1105で視点の高さが変更され、ステップS1107で視点が移動されたものである。また、送信するスケール情報1011は、ステップS1104で設定されたものである。
ステップS1109では、サーバ装置103のCPU401は、通信制御部531の機能により、クライアント装置101から送信された仮想空間位置姿勢情報1014とスケール情報1011とを受信する。受信した仮想空間位置姿勢情報1014とスケール情報1011とは、クライアント情報テーブル1020の仮想空間位置姿勢情報1024とスケール情報1023とにそれぞれ上書きする。ここで更新するレコードは、各情報の送信元であるクライアント装置101に対応するレコードである。
ステップS1110では、サーバ装置103のCPU401は、通信制御部531の機能により、クライアント情報テーブル1020の各レコード(以下、クライアント情報という。)を、送信元のクライアント装置101に対して送信する。
ステップS1111では、サーバ装置103のCPU301は、通信制御部501の機能により、サーバ装置103から送信されたクライアント情報を受信する。
ステップS1112では、サーバ装置103のCPU301は、オブジェクト制御部510の機能により、他のユーザを示すアバターを仮想空間上に配置する(三次元モデル配置手段)。ステップS1111で受信したクライアント情報には、他のクライアント装置101が管理している仮想空間位置姿勢情報1014とスケール情報1011とが含まれている。これを利用することで、仮想空間上に他のユーザを示す三次元モデルであるアバターを配置する。より具体的には、受信したクライアント情報に含まれる仮想空間位置姿勢情報1024が示す位置及び姿勢で仮想空間上に他のユーザの視点を設定し、その視点が頭の位置となるようアバターを配置する。そしてこのアバターの大きさをスケール情報1023が示す倍率で拡大または縮小する(サイズ変更手段)。このとき頭の位置は固定しておく。また、他のユーザのアバターだけを仮想空間に配置することが望ましい。自分のアバターまでも仮想空間に配置してしまうと、アバターの形状によってはアバターを示す三次元モデルによって視界を遮られる可能性があるためである。
このようにすることで、同一の仮想空間を共有している他のユーザがどこにいるのか、更にはそのユーザがどういうスケール感で仮想空間を閲覧しているのかを把握することができるようになる。図15は、アバターを配置した場合の様子を示す。スケール情報が10倍の他のユーザのアバターを仮想空間に配置すると、図15の1501に示すような三次元モデルが仮想空間上に表示される。一方、スケール情報が1倍の他のユーザのアバターを仮想空間に配置すると、図15の1502に示すような三次元モデルが仮想空間上に配置される。このように、アバターの大きさをスケール情報に応じて調整することで、俯瞰的に仮想空間を見ているのか、等身大で仮想空間を見ているのかといった状況を把握することが可能となる。
ステップS1113では、クライアント装置101のCPU301は、仮想空間画像取得部506の機能により、仮想空間を撮像することにより仮想空間画像を取得し、これをRAM303等に記憶する。すなわち、仮想空間位置姿勢情報1014が示す視点から見た仮想空間を撮像する(レンダリングする)。これにより仮想空間画像を生成し、これをRAM303等に記憶する。尚、HMD102の右目・左目ディスプレイ322のそれぞれに表示するために右目用の仮想空間画像と左目用の仮想空間画像の2枚を取得する。
ステップS1114では、クライアント装置101のCPU301は、複合現実画像生成部507の機能により、ステップS1101で取得した現実空間画像とステップS1113で取得した仮想空間画像とをRAM303等から読み出す。そして、当該現実空間画像に当該仮想空間画像を重畳し、複合現実画像を生成する。生成した複合現実画像はRAM303等に記憶する。尚、前述した通り、現実空間画像と仮想空間画像とは右目用と左目用の2枚ずつがRAM303等に記憶されているので、右目用の現実空間画像に右目用の仮想空間画像を重畳し、左目用の現実空間画像に左目用の仮想空間画像を重畳する。
ステップS1115では、クライアント装置101のCPU301は、表示制御部508の機能により、ステップS1116で生成した複合現実画像をRAM303等から読み出す。そして、ビデオコントローラ306を通じてHMD102の右目・左目ディスプレイ322に表示する(仮想空間提示手段)。RAM303等に記憶された複合現実画像は、右目用と左目用の2枚が存在する。そのため、右目用の複合現実画像を右目・左目ディスプレイ322の右目のディスプレイに表示するよう制御し、左目用の複合現実画像を右目・左目ディスプレイ322の左目のディスプレイに表示するよう制御する。
ステップS1116では、クライアント装置101のCPU301は、HMD102を装着しているユーザに複合現実感を提示する処理の終了指示があったか否かを判定する。例えば、前述したステップS1101乃至ステップS1115の処理を実行するクライアント装置101のアプリケーションの停止指示や終了指示があったか否かを判定する。終了指示があったと判定した場合には、本一連の処理を終了する。終了指示があったと判定しなかった場合、すなわち終了指示がなかった場合にはステップS1101に処理を戻し、終了指示があるまでステップS1101乃至ステップS1115の処理を繰り返す。このように、繰り返しステップS1101乃至ステップS1115の処理を実行することで、リアルタイムに情報を更新して提示することができる。
次に、スケール設定処理の詳細について、図16に示すフローチャートを用いて説明する。
ステップS1601では、クライアント装置101のCPU301は、記憶部509の機能により、仮想空間位置姿勢情報1014を参照する。
ステップS1602では、クライアント装置101のCPU301は、オブジェクト制御部510の機能により、仮想空間位置姿勢情報1014が示すユーザの視点の位置が、仮想空間に配置されたいずれかのオブジェクトの内部であるか否かを判定する。ユーザの視点の位置である座標と、オブジェクトを取り囲むバウンディングボックスとを比較することで、ユーザの視点の位置が、オブジェクトの内部であるか否かを判定する。オブジェクトの内部であると判定されると、ユーザの視点の位置に応じて仮想空間に配置されるオブジェクトが選択される。バウンディングボックスの座標は、図10に示すオブジェクト情報テーブル1030のバウンディングボックス1033で管理されている。
オブジェクト情報テーブル1030は、クライアント装置101の外部メモリ311で記憶されているデータテーブルである。オブジェクト情報テーブル1030は、図6で前述した仮想空間情報に含まれる情報である。オブジェクトID1031は、オブジェクトごとに割り振られる一意な識別情報が格納されている項目である。オブジェクト固有スケール情報1032は、オブジェクトごとに対応するスケール情報が格納されている項目である。バウンディングボックス1033は、オブジェクトを囲む直方体の座標が格納されている項目である。
このバウンディングボックス1033が示す座標の範囲にユーザの視点が位置しているのであれば、オブジェクトの内部であると判定される。ユーザの視点の位置がいずれかのオブジェクトの内部であると判定した場合には、ステップS1604に処理を進める。ユーザの視点の位置がいずれかのオブジェクトの内部でないと判定した場合には、ステップS1603に処理を進める。
ステップS1603では、クライアント装置101のCPU301は、スケール設定部512の機能により、ユーザ設定スケール情報1000に格納されている倍率を取得し、RAM303に保存する。
一方、ステップS1604では、クライアント装置101のCPU301は、オブジェクト制御部510の機能により、ユーザの視点が内部にあるとされたオブジェクトに対応するスケール情報が存在するか否かを判定する。オブジェクトに対応するスケール情報は、当該オブジェクトのオブジェクト固有スケール情報1032を参照し、ここに倍率が格納されていれば、オブジェクトに対応するスケール情報が存在すると判定する。ユーザの視点が内部にあるとされたオブジェクトに対応するスケール情報が存在すると判定した場合には、ステップS1605に処理を進める。ユーザの視点が内部にあるとされたオブジェクトに対応するスケール情報が存在しないと判定した場合には、ステップS1603に処理を進める。
ステップS1605では、クライアント装置101のCPU301は、スケール設定部512の機能により、ユーザの視点が内部にあるとされたオブジェクトに対応するスケール情報を、オブジェクト固有スケール情報1032から取得する。すなわち、このオブジェクト固有スケール情報1032に格納されている倍率を取得し、RAM303に保存する。
ステップS1606では、クライアント装置101のCPU301は、スケール設定部512の機能により、ステップS1603またはステップS1605でRAM303に保存したスケール情報で、スケール情報1011を上書きする。
図17は、ユーザの視点がオブジェクトの内部に存在する場合の一例を示す。スケール情報1011が“10”倍のユーザが1501である。このユーザが家の内部を見るために自身の視点をオブジェクトの内部に移動させると、バウンディングボックス1701と視点の位置とを比較する。これにより、ユーザの視点がオブジェクトの内部に存在すると判定されると、このオブジェクトが選択され、選択された当該オブジェクトに対応するオブジェクト固有スケール情報1032が取得できる。図17の場合には、オブジェクト固有スケール情報1032として“1”倍が取得できたとする。そうすると、このパラメータをスケール情報1011に設定される。この設定されたスケール情報1011を用いて、視点の高さを調整すると、1702に示すようなスケール感になる。このように、ユーザが接触したオブジェクトに対応するスケール情報で、当該ユーザの視点の高さや移動量を変更することが可能となるので、例えば建築物の内部を閲覧する際にスケール設定画面900を介してスケールを設定する必要がなくなる。すなわち、オブジェクトに接触するだけで自動的にスケールを変更することが可能となる。
次に、第2の実施形態について説明する。第2の実施形態は、第1の実施形態における図16の変形例である。第1の実施形態では、ユーザの視点がオブジェクトの内部に存在するか否かを判定したが、第2の実施形態ではオブジェクトが存在する領域に視点が存在するか否かによって、スケールの調整を行う判定する仕組みである。ここでいう領域とは平面領域のことであり、建築物でいえば土地の部分に相当する。つまり、その建築物が配置されている土地の部分に入ると、ユーザが建築物の中を覗き込むことなく、その建築物に対応するスケール情報が取得できるものである。以下、この説明を行う。
第2の実施形態は、第1の実施形態における図16の変形例であることから、図16及び図10のオブジェクト情報テーブル1030以外の図については、第1の実施形態と同様であるので説明を省略する。
第2の実施形態における、スケール設定処理の詳細について、図18に示すフローチャートを用いて説明する。第2の実施形態におけるスケール設定処理は、第1の実施形態と同様に、図11のステップS1104における処理である。
ステップS1801では、クライアント装置101のCPU301は、記憶部509の機能により、仮想空間位置姿勢情報1014を参照する。
ステップS1802では、クライアント装置101のCPU301は、オブジェクト制御部510の機能により、仮想空間位置姿勢情報1014が示すユーザの視点の位置が、仮想空間に配置されたいずれかのオブジェクトの領域内であるか否かを判定する。ユーザの視点の位置である座標(例えば、X座標とZ座標)と、オブジェクトが配置された領域(例えば、XZ平面)を比較することで、ユーザの視点の位置が、オブジェクトの領域内であるか否かを判定する。ユーザの視点の位置がオブジェクトの領域内であると判定された場合には、ステップS1805に処理を進める。ユーザの視点の位置がオブジェクトの領域内でないと判定した場合には、ステップS1803に処理を進める。
ステップS1803では、クライアント装置101のCPU301は、スケール設定部512の機能により、変数Flgに“0”を代入する。変数Flgは視点がいずれかのオブジェクトの領域内にあり、当該オブジェクトに対応するスケール情報を用いてユーザの視点が調整されているか否かを示すフラグである。
ステップS1804では、クライアント装置101のCPU301は、スケール設定部512の機能により、ユーザ設定スケール情報1000に格納されている倍率を取得し、RAM303に保存する。
一方、ステップS1805では、クライアント装置101のCPU301は、オブジェクト制御部510の機能により、ユーザの視点が領域内にあるとされたオブジェクトに対応するスケール情報が存在するか否かを判定する。オブジェクトに対応するスケール情報は、当該オブジェクトのオブジェクト固有スケール情報1032を参照し、ここに倍率が格納されていれば、オブジェクトに対応するスケール情報が存在すると判定する。ユーザの視点が領域内にあるとされたオブジェクトに対応するスケール情報が存在すると判定した場合には、ステップS1806に処理を進める。ユーザの視点が領域内にあるとされたオブジェクトに対応するスケール情報が存在しないと判定した場合には、ステップS1803に処理を進める。
ステップS1806では、クライアント装置101のCPU301は、スケール設定部512の機能により、変数Flgが“0”であるか否かを判定する。変数Flgが“0”であると判定された場合には、ステップS1807に処理を進める。変数Flgが“1”であると判定された場合には、ステップS1810に処理を進める。
ステップS1807では、クライアント装置101のCPU301は、スケール設定部512の機能により、ユーザの視点が領域内にあるとされたオブジェクトに、スケール適用方向1931が存在するか否かを判定する。スケール適用方向1931は、図19に示すオブジェクト情報テーブル1030の項目である。第2の実施形態におけるオブジェクト情報テーブル1030は、第1の実施形態で備えていたバウンディングボックス1033の代わりに、このスケール適用方向1931を新たに備えている。スケール適用方向1931は、オブジェクト固有スケール情報1032を適用すべき方向を示す情報が格納される項目である。ユーザの視点が領域内にあるとされたオブジェクトに、スケール適用方向1931が存在すると判定した場合には、ステップS1808に処理を進める。ユーザの視点が領域内にあるとされたオブジェクトに、スケール適用方向1931が存在しない(スケール適用方向1931が“NULL”である)と判定した場合には、ステップS1809に処理を進める。
ステップS1808では、クライアント装置101のCPU301は、オブジェクト制御部510の機能により、ユーザの視点が領域内にあるとされたオブジェクトのスケール適用方向1931と、当該視点の移動方向とが合致するか否かを判定する。つまりスケール適用方向1931という所定の条件を満たすか否かを判定する。スケール適用方向1931は、ある程度幅を持った方向である。そのため、スケール適用方向1931と視点の移動方向とが同様の移動方向であればよい。ユーザの視点が領域内にあるとされたオブジェクトのスケール適用方向1931と、当該視点の移動方向とが合致すると判定した場合には、ステップS1809に処理を進める。ユーザの視点が領域内にあるとされたオブジェクトのスケール適用方向1931と、当該視点の移動方向とが合致しないと判定しなかった場合には、ステップS1803に処理を進める。
ステップS1809では、クライアント装置101のCPU301は、スケール設定部512の機能により、変数Flgに“1”を代入する。
ステップS1810では、クライアント装置101のCPU301は、スケール設定部512の機能により、ユーザの視点が領域内にあるとされたオブジェクトに対応するスケール情報を、オブジェクト固有スケール情報1032から取得する。すなわち、このオブジェクト固有スケール情報1032に格納されている倍率を取得し、RAM303に保存する。
ステップS1811では、クライアント装置101のCPU301は、スケール設定部512の機能により、ステップS1804またはステップS1810でRAM303に保存したスケール情報で、スケール情報1011を上書きする。このようにして、ユーザの視点の位置がオブジェクトの配置された領域内にあるか否かに応じて、当該オブジェクトのスケール情報とユーザが設定したスケール情報のいずれかを適用することが可能となる。
例えば、図20に示すように仮想空間でユーザ2001が歩き回っている際に、建築物のオブジェクトが配置された領域に視点が移動したとする。この場合に、このオブジェクトに対応するオブジェクト固有スケール情報1032を取得し、スケール情報1011に設定する。つまり、ユーザはオブジェクトが配置された領域内に移動するだけで、そのオブジェクトに設定されたスケール感により、当該オブジェクトを閲覧することができる。
また、図21に示すように、オブジェクトが配置された領域にどの方向から侵入したのかによって、オブジェクト固有スケール情報1032を適用するのか否かを決定することができる。例えば、オブジェクトのスケール適用方向1931が“180度±60度”であった場合を想定する。当該オブジェクトの120度から240度の範囲の方向からユーザが侵入した場合(2102)には、オブジェクト固有スケール情報1032をスケール情報1011に設定する(図21の例で言えば、10倍から1倍にする)。こうして設定されると、図20のユーザ2001は、2002に示すように視点の位置が変更される。しかし、これ以外の方向から進入した場合(2101)は、元のスケール情報のままとなる(図21の例で言えば、10倍のままとなる)。このように、オブジェクト固有スケール情報1032を適用する方向を制限することにより、オブジェクトが配置された領域に意図せず侵入してしまった場合であっても、オブジェクト固有スケール情報1032が適用されずに済むという効果がある。
以上説明したように、仮想空間におけるユーザの視点の高さを変更した場合でも、ユーザごとの適切な移動量で仮想空間を移動することが可能となる。
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
したがって、本発明の機能処理をコンピュータで実現(実行可能と)するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。