以下、添付図面を参照し、本発明の実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の1つである。
[第1の実施形態]
本実施形態に係るシステムは、HMD等の頭部装着型表示装置を自身の頭部に装着した複数人のユーザ(体験者)に対し、現実空間と仮想空間との合成空間である複合現実空間の画像を提示する、いわゆる複合現実空間提示システムである。
先ず、本実施形態に係る複合現実空間提示システムの構成例について、図1を用いて説明する。
拠点1には、サーバ200、PC(パーソナルコンピュータ)100a〜100c、HMD101a〜101c、光学式センサ104a〜104bが設置されており、これらの機器は拠点1におけるローカルエリアネットワーク152に接続されている。
拠点2には、PC100d〜100f、HMD101d〜101f、光学式センサ104c〜104dが設置されており、これらの機器は拠点2におけるローカルエリアネットワーク151に接続されている。
拠点1及び拠点2はそれぞれ、現実空間において互いに異なる領域であり、例えば、同じ建物内における一方の部屋と他方の部屋、ある建物の部屋と別の建物の部屋等、第1の拠点と該第1の拠点から離間した第2の拠点のそれぞれに対応する。もちろん、第1の拠点及び第2の拠点の定義はこれらに限るものではない。
また、ローカルエリアネットワーク151及びローカルエリアネットワーク152はネットワーク150に接続されており、拠点1に属する機器と拠点2に属する機器とはネットワーク150を介して互いにデータ通信が可能なように構成されている。
ここで、以下の説明において、HMD101a〜101fのそれぞれに共通する説明を行う際には、HMD101a〜101fをまとめてHMD101と表記する。つまり、HMD101についての説明は、HMD101a〜101fの何れにも当てはまるものとする。同様に、PC100a〜100fのそれぞれに共通する説明を行う際には、PC100a〜100fをまとめてPC100と表記する。つまり、PC100についての説明は、PC100a〜100fの何れにも当てはまるものとする。同様に、光学式センサ104a〜104dのそれぞれに共通する説明を行う際には、光学式センサ104a〜104dをまとめて光学式センサ104と表記する。つまり、光学式センサ104についての説明は、光学式センサ104a〜104dの何れにも当てはまるものとする。また、HMD101a〜101fのそれぞれに取り付けられている光学式マーカ103a〜103fについても同様に、光学式マーカ103a〜103fのそれぞれに共通する説明を行う際には、光学式マーカ103a〜103fをまとめて光学式マーカ103と表記する。つまり、光学式マーカ103についての説明は、光学式マーカ103a〜103fの何れにも当てはまるものとする。
次に、HMD101及びPC100のハードウェア構成例について、図2のブロック図を用いて説明する。なお、図2に示したHMD101及びPC100のハードウェア構成は、HMD101及びPC100が行うものとして後述する各処理を実現可能な構成の一例であり、HMD101及びPC100のハードウェア構成は、図2に示した構成に限らない。
先ずHMD101のハードウェア構成について説明する。右目・左目ビデオカメラ221は、現実空間の動画像を撮像する右目用のビデオカメラと左目用のビデオカメラとを有し、それぞれ、HMD101を自身の頭部に装着するユーザの右目及び左目に提供する現実空間の画像(動画像における各フレームの画像)を撮像するためのものである。右目・左目ビデオカメラ221が撮像した各フレームの画像(現実空間の画像)は順次、PC100に対して送出される。
右目・左目ディスプレイ222は、右目用のディスプレイと左目用のディスプレイとを有し、それぞれは、HMD101を自身の頭部に装着したユーザの右目及び左目の眼前に位置するようにHMD101に取り付けられており、PC100から送出された画像や文字を表示する。
次に、PC100のハードウェア構成について説明する。
汎用バス212は、右目・左目ビデオカメラ221から送出された各フレームの画像を受信し、該受信した画像を外部メモリ211に書き込むべく、該受信した画像をメモリコントローラ207に対して送出する。右目・左目ビデオカメラ221からは、外部入力端子(例えば、IEEE1394端子)を用いてデータを受信する。
CPU201は、ROM202やRAM203に格納されているコンピュータプログラムやデータを用いて処理を実行する。これによりCPU201は、PC100全体の動作制御を行うと共に、PC100が行うものとして後述する各処理を実行若しくは制御する。
ROM202には、BIOS(Basic Input / OutputSystem)などが格納されている。
RAM203は、外部メモリ211からロードされたコンピュータプログラムやデータ、通信I/F(インターフェース)コントローラ208を介して外部から受信したデータ、を格納するためのエリアを有する。更にRAM203は、CPU201が各種の処理を実行する際に用いるワークエリアを有する。すなわちRAM203は、各種のエリアを適宜提供することができる。
ビデオコントローラ206は、右目・左目ディスプレイ222やディスプレイ210への映像(画像や文字)の出力制御を行うものであり、右目・左目ディスプレイ222に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて映像出力を行う。
ディスプレイ210は、CRTや液晶画面などにより構成されており、CPU201による処理結果を画像や文字などでもって表示することができる。
入力コントローラ205は、入力デバイス209からの入力をCPU201に通知するなどの入力制御を行う。
入力デバイス209は、キーボードやマウスなどのユーザインターフェースにより構成されており、ユーザが操作することで各種の指示をCPU201に対して入力することができる。なお、入力デバイス209としてタッチパネル画面を用いても良い。なお、タッチパネル画面は、マルチタッチスクリーンなどの、複数の指でタッチされた位置を検出することが可能なタッチパネル画面であってもよいこととする。
メモリコントローラ207は、外部メモリ211への情報の読み書きを制御する。より詳しくは、メモリコントローラ207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するHDD(ハードディスクドライブ)やフレキシブルディスク或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ211へのアクセスを制御する。
外部メモリ211は、上記の通り、HDD等のメモリ装置であり、外部メモリ211には、OS(オペレーティングシステム)や、PC100が行うものとして後述する各処理をCPU201に実行若しくは制御させるためのコンピュータプログラムやデータが保存されている。外部メモリ211に保存されているデータには、以下の説明において予め作成されたデータとして後述するものや、既知の情報として後述するものが含まれている。外部メモリ211に保存されているコンピュータプログラムやデータは、CPU201による制御に従ってRAM203にロードされ、CPU201による処理対象となる。
通信I/Fコントローラ208は、ネットワーク(ネットワーク150,151,152等)を介して外部の機器との間でTCP/IPを用いたインターネット通信等のデータ通信を行う。また、通信I/Fコントローラ208は、ギガビットイーサネット(登録商標)等を通じて光学式センサ104との通信も制御する。
光学式センサ104は、HMD101に取り付けられた光学式マーカ103を測定し、該測定の結果をPC100に対して出力する。PC100は光学式センサ104による測定結果を用いて光学式マーカ103の位置姿勢を求める。光学式センサ104を用いた光学式マーカ103の位置姿勢測定技術については周知であるため、これに係る説明は省略する。光学式センサ104からPC100に対して出力された光学式マーカ103の測定結果は、通信I/Fコントローラ208を介して外部メモリ211に保存される。
汎用バス212、CPU201、ROM202、RAM203、ビデオコントローラ206、入力コントローラ205、メモリコントローラ207、通信I/Fコントローラ208は何れも、システムバス204に接続されている。
本実施形態では説明を簡単にするために、サーバ200もPC100と同じハードウェア構成(図2)を有するものとする。しかし、サーバ200のハードウェア構成は、図2のPC100の構成に限らない。
次に、サーバ200及びPC100の機能構成例について、図3のブロック図を用いて説明する。図3においてサーバ200の機能部として示した機能部(301〜308)はハードウェアで実装しても良いが、ソフトウェア(コンピュータプログラム)で実装しても良い。後者の場合、このコンピュータプログラムは、サーバ200の外部メモリ211に保存されており、RAM203にロードされた後、CPU201により実行されることで対応する機能部の機能を実現する。また、図3においてPC100の機能部として示した機能部(311〜321)はハードウェアで実装しても良いが、ソフトウェア(コンピュータプログラム)で実装しても良い。後者の場合、このコンピュータプログラムは、PC100の外部メモリ211に保存されており、RAM203にロードされた後、CPU201により実行されることで対応する機能部の機能を実現する。
先ず、サーバ200の機能部(301〜308)について説明する。
通信制御部301は、PC100との間のデータ通信に係る制御を行う。
HMD情報管理部302は、HMD101a〜101fのそれぞれに係る情報が登録されたHMD情報を外部メモリ211において管理する。HMD情報の構成例を図11(a)に示す。図11(a)に示すHMD情報1110は、HMDID1111、拠点ID1112,位置1113、姿勢1114を含む。
HMDID1111は、HMD101a〜101fのそれぞれに固有のIDである。拠点ID1112は、HMD101a〜101fのそれぞれが移動可能な空間(拠点)に固有のIDである。位置1113は、HMD101a〜101fのそれぞれの位置であり、姿勢1114は、HMD101a〜101fのそれぞれの姿勢である。
図11(a)のHMD情報1110によれば、HMDID1111=HMD111のHMDは、拠点ID=Aに対応する部分現実空間内を移動可能なHMDであり、現在の位置は(X,Y,Z)、姿勢は(α、β、γ)である。HMDID1111=HMD222のHMDは、拠点ID=Aに対応する部分現実空間内を移動可能なHMDであり、現在の位置は(X,Y,Z)、姿勢は(α、β、γ)である。HMDID1111=HMD333のHMDは、拠点ID=Bに対応する部分現実空間内を移動可能なHMDであり、現在の位置は(X,Y,Z)、姿勢は(α、β、γ)である。つまり、図11(a)のHMD情報1110によれば、HMDID1111がHMD111のHMDとHMDID1111がHMD222のHMDとは同じ部分現実空間(拠点ID=Aの部分現実空間)内に属するHMDであることが分かる。また、図11(a)のHMD情報1110によれば、HMDID1111がHMD111のHMDとHMDID1111がHMD333のHMDとは異なる部分現実空間(前者は拠点ID=Aの部分現実空間、後者は拠点ID=Bの部分現実空間)内に属するHMDであることが分かる。
図3に戻って、次に、HMD情報送信部303は、HMD情報管理部302によって管理されているHMD情報1110をPC100a〜100fのそれぞれに対して送信する。
位置情報受信部304は、PC100a〜100fのそれぞれから送信されるHMD101a〜101fのHMDID1111、拠点ID1131、位置1113、姿勢1125を受信する。上記のHMD情報管理部302は、このようにしてPC100a〜100fから送信されたHMD101a〜101fのそれぞれのHMDID1111、拠点ID1131、位置1113、姿勢1125を登録したものをHMD情報1110として管理している。
モデルデータ管理部305は、サーバ200が管理する仮想空間を構成する各仮想物体に係る情報が登録されたモデル情報を外部メモリ211において管理する。モデル情報の構成例を図11(b)に示す。図11(b)に示すモデル情報1120は、モデルID1121、モデル名1122、ファイルパス1123、位置1124、姿勢1125を含む。
モデルID1121は、各仮想物体に固有のIDである。モデル名1122は、各仮想物体の描画データ、例えば、仮想物体がポリゴンで構成されている場合には、各ポリゴンの頂点のインデックスや座標、該ポリゴンの法線ベクトル等の幾何データやテクスチャデータを含むファイルのファイル名である。ファイルパス1123は、各仮想物体の描画データのファイルのパス(サーバ200の外部メモリ211におけるパス)である。位置1124は、各仮想物体の位置であり、姿勢1125は各仮想物体の姿勢である。
また、モデルデータ管理部305は、HMD101a〜101fのそれぞれについて、第1のアバター及び第2のアバターの描画データを外部メモリ211にて管理している。アバターとは、HMD101の位置姿勢に応じて配置する仮想物体であり、第1のアバターと第2のアバターとは外見が異なるアバターである。描画データの詳細は上記の通りである。モデルデータ管理部305は、HMD101と、該HMD101に対応する第1のアバター及び第2のアバターと、を関連づけて外部メモリ211で管理している。例えば、第1のアバター及び第2のアバターの描画データを、対応するHMD101のHMDID1111と関連づけて管理している。
図3に戻って、次に、モデルデータ送信部306は、モデルデータ管理部305によって管理されているモデル情報1120の各モデルID1121について、該モデルID1121に対応するモデル名1122及びファイルパス1123で特定される描画データ、位置1124及び姿勢1125を、PC100a〜100fのそれぞれに対して送信する。更にモデルデータ送信部306は、HMD情報管理部302によって管理されているHMD情報1110の各HMDID1111について、該HMDID1111に対応する第1のアバター及び第2のアバターの描画データを、PC100a〜100fに対して送信する。
拠点情報管理部307は、各拠点に係る情報が登録された拠点情報を外部メモリ211にて管理している。拠点情報の構成例を図11(c)に示す。図11(c)に示す拠点情報1130は、拠点ID1131、範囲座標数1132、範囲座標1133〜1142、を含む。
拠点ID1131は、各拠点に固有のIDである。範囲座標数1132は、各拠点(部分現実空間)を構成する頂点の数である。例えば、直方体の形状を有する拠点に対応する範囲座標数1132は「8」である(拠点として真四角の部屋を想定した場合、部屋の角にあたる頂点の数として8とし、後述の通りその8点の座標を記憶している)。範囲座標1133〜1142は、該頂点の座標である。図11(c)では、10個の範囲座標が登録されており、拠点IDによっては最大10個の頂点で構成される多面体の拠点を表現可能である。
拠点情報1130は、予め作成してサーバ200の外部メモリ211に登録しておいても良いし、PC100a〜100fのそれぞれから、HMD101a〜101fが属する拠点の拠点ID1131、範囲座標数1132、範囲座標を収集することで作成しても良い。
図3に戻って、次に、拠点情報送信部308は、拠点情報管理部307によって管理されている拠点情報1130を、PC100a〜100fのそれぞれに対して送信する。
次に、PC100の機能部(311〜321)について説明する。
通信制御部311は、サーバ200との間のデータ通信に係る制御を行う。
位置情報送信部312は、HMD101のHMDID1111、拠点ID1112、位置1113、姿勢1114をサーバ200に対して送信する。HMD101のHMDID1111及び拠点ID1112については最初の一度だけ送信し、位置1113及び姿勢1114については定期的若しくは不定期的に送信するようにしても良い。
HMD情報受信部313は、サーバ200から送信されるHMD情報1110を受信する。
モデルデータ受信部314は、サーバ200から送信される仮想物体(第1のアバター及び第2のアバターを含む)の描画データや、仮想物体(第1のアバター及び第2のアバター以外)の位置姿勢を受信する。
モデルデータ表示部315は、HMD101が撮像した現実空間の画像に対して、アバター以外の仮想物体の画像を合成する処理を行う。
アバター表示部316は、HMD101が撮像した現実空間の画像に対して、アバターの画像を合成する処理を行う。
拠点情報受信部319は、サーバ200から送信された拠点情報1130を受信する。 拠点情報管理部317は、拠点情報受信部319が受信した拠点情報1130を外部メモリ211にて管理する。
仮想空間判定部320は、自拠点とは異なる他の拠点に属する他HMD101の位置に対応する対応位置が自拠点の範囲を超えているか否かを判断する。
アイコン表示部321は、自HMD101の位置が、他の拠点の範囲を超えている場合には、その旨を自HMD101に表示させる。
次に、PC100の外部メモリ211におけるソフトウェア構成例について、図4を用いて説明する。外部メモリ211には、オペレーティングシステム401、グラフィックエンジン402、複合現実感プラットフォーム403(MRプラットフォームともいう)、複合現実感アプリケーション404(MRアプリケーションやビューアアプリケーションともいう)が保存されており、その実行制御はCPU201によって行われている。
オペレーティングシステム401は、HMD101に対する入出力を制御し、右目・左目ビデオカメラ221から入力インターフェースを介して得られた現実空間の撮像画像を複合現実感プラットフォーム403へ受け渡す。また、オペレーティングシステム401は、グラフィックエンジン402で描画された複合現実空間の画像を、出力インターフェースを介して、ディスプレイ210や右目・左目ディスプレイ222へ出力する。
グラフィックエンジン402は、サーバ200から受信した描画データに基づいて仮想物体の画像を生成し、該生成した仮想物体の画像を現実空間の撮像画像上に重畳させた複合現実空間の画像を生成する。描画に利用するエンジンは、例えば、OpenGLやDirectXなどの広く利用されているグラフィックエンジンでも、独自に開発したグラフィックエンジンでもよい。なお、本実施形態ではグラフィックライブラリとしてOpenGLを利用するものとする。
複合現実感プラットフォーム403は、例えば、右目・左目ビデオカメラ221が撮像した二次元マーカの位置を取得することでHMD101の位置姿勢を特定し、現実空間と仮想空間との位置合わせを行う。なお、位置姿勢や位置合わせの技術は、既知の技術として開示されている、特開2002−32784号公報、特開2006−072903号公報、特開2007−166427号公報等を用いて実現することが可能である。なお、二次元マーカを使用せずに、HMD101に位置センサを備え、この位置センサを用いて三角測量により計測された位置をもとに、HMD101の位置や姿勢を特定して実現することも可能である。本実施形態の場合は、光学式センサ104を用いてHMD101の位置姿勢を取得する。
複合現実感アプリケーション404は、複合現実感プラットフォーム403からHMD101の位置姿勢、仮想物体の形状の情報、位置姿勢の情報を受け付け、グラフィックエンジン402に対して、仮想物体の描画命令を発行する。この時、OpenGLのAPIを用いて、描画する仮想物体の識別情報、位置姿勢の情報を設定した命令を発行する。
次に、HMD101の位置姿勢に応じた複合現実空間の画像をHMD101に提供するために、HMD101及びPC100のそれぞれが行う処理について、図5のフローチャートを用いて説明する。なお、図5のフローチャートに従った処理は、1フレーム分の複合現実空間の画像をHMD101に提供するための処理である。然るに、図5のフローチャートに従った処理を繰り返すことで、HMD101に複数フレームの複合現実空間の画像を提供することができる。
ステップS502では、右目・左目ビデオカメラ221は現実空間を撮像し、ステップS503では、右目・左目ビデオカメラ221は、ステップS502において撮像した現実空間の撮像画像(現実画像)をPC100に対して送信する。
ステップS504では、CPU201は、HMD101から送信された現実空間の撮像画像を汎用バス212を介して受信し、ステップS505では、CPU201はメモリコントローラ207を制御して、この受信した現実空間の撮像画像を外部メモリ211に保存する。
ステップS506では、CPU201は、光学式センサ104から送信された光学式マーカ103の測定結果を通信I/Fコントローラ208を介して受信し、該受信した測定結果に基づいて、光学式マーカ103の位置姿勢を求める。そしてCPU201は、求めた光学式マーカ103の位置姿勢にバイアスを加えることで、右目・左目ビデオカメラ221の位置姿勢を求める。このバイアスは、光学式マーカ103と右目・左目ビデオカメラ221との位置関係を示すものである。HMD101の位置姿勢とは、右目・左目ビデオカメラ221の位置姿勢であり、以下では視点の位置姿勢とも称する場合がある。
ステップS507では、CPU201は、ステップS506において求めた右目・左目ビデオカメラ221の位置姿勢を外部メモリ211に保存する。
ステップS508では、CPU201は、サーバ200から受信済みの描画データを用いて仮想物体を構築し、該構築した仮想物体をサーバ200から該仮想物体について受信した位置姿勢でもって仮想空間中に配置する。そしてCPU201は、ステップS507で外部メモリ211に保存した右目・左目ビデオカメラ221の位置姿勢を有する視点から見える該仮想物体の画像を、仮想物体画像(図11(d)の描画データ1151)として生成する。図11(d)において描画データ情報1150は、描画データ1151とメタデータ(描画データ1151に係る情報群)とを含むものである。規定の位置姿勢を有する視点から見える仮想物体の画像を生成するための技術については周知であるため、これに係る説明は省略する。
そして更にCPU201は、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に、上記生成した仮想物体画像を重畳させた画像を複合現実空間の画像(MR画像:図11(e)の画像データ1161)として生成する。図11(e)において画像情報1160は、画像データ1161とメタデータ(画像データ1161に係る情報群)とを含むものである。
なお、ステップS508における複合現実空間の画像生成処理は、後述する処理によって適宜制御される。
ステップS509では、CPU201はビデオコントローラ206を制御して、ステップS508において生成した複合現実空間の画像をディスプレイ210及び右目・左目ディスプレイ222に対して出力する。
ステップS510では、右目・左目ディスプレイ222は、ステップS509においてPC100から送信された複合現実空間の画像を受信し、ステップS511では、右目・左目ディスプレイ222は、ステップS510で受信した複合現実空間の画像を表示する。これによりHMD101を自身の頭部に装着したユーザの右目及び左目の眼前には、自身の位置姿勢に応じた複合現実空間の画像が提示されることになる。
次に、サーバ200の電源をオンにするなどしてサーバ200を起動させた際にサーバ200にて行われる起動処理について、図6のフローチャートに従って説明する。図6のフローチャートは、サーバ200が行う起動処理のうち、本実施形態に係る一部の処理を抜粋したものであり、サーバ200が行う起動処理の全てを示したものではない。
サーバ200が起動すると(ステップS601)、ステップS602では、サーバ200のCPU201は、外部メモリ211に保存しているモデル情報1120をRAM203にロードする。ステップS604では、サーバ200のCPU201は、PC100が行っている「サーバ200との接続処理」の完了を待機する。「サーバ200との接続処理」が完了すると、ステップS605では、サーバ200のCPU201は、各PC100から送信された情報(HMDID1111、拠点ID1112、位置1113、姿勢1114)を受信し、受信したこれらの情報を登録したHMD情報1110を生成する。
次に、PC100の電源をオンにするなどしてPC100を起動させた際にPC100にて行われる起動処理について、図7のフローチャートに従って説明する。図7のフローチャートは、PC100が行う起動処理のうち、本実施形態に係る一部の処理を抜粋したものであり、PC100が行う起動処理の全てを示したものではない。
PC100が起動すると(ステップS701)、ステップS702では、CPU201は、サーバ200に送信する対象となるHMDID1111、拠点ID1131を外部メモリ211からRAM203にロードする。位置1113及び姿勢1114についてはCPU201は、この時点で光学式マーカ103から取得したものを送信対象の情報としてRAM203にロードする。もちろん、この時点における位置1113及び姿勢1114としてデフォルトの値を用いても構わない。また、この時点では位置1113及び姿勢1114は送信しなくても良い。
また、上記の拠点情報1130をPC100a〜100fから収集した情報に基づいてサーバ200が生成するのであれば、サーバ200への送信対象となる情報に、拠点ID1131、範囲座標数1132、範囲座標1133〜1142を含めても良い。
ステップS703ではCPU201は、通信I/Fコントローラ208を制御して、サーバ200とデータ通信が可能となるように、サーバ200に対する接続処理を行う。この接続処理が完了すると、ステップS704では、CPU201は、通信I/Fコントローラ208を制御して、ステップS702においてRAM203にロードした送信対象の情報を、サーバ200に対して送信する。
次に、PC100から定期的若しくは不定期的にHMD101の位置姿勢をサーバ200に対して送信する場合におけるPC100とサーバ200のそれぞれが行う処理について、図8のフローチャートを用いて説明する。
ステップS802では、CPU201は、通信I/Fコントローラ208を介して取得した光学式センサ104による測定結果である画像を用いて、光学式マーカ103の位置姿勢を求める。そしてCPU201は、求めた光学式マーカ103の位置姿勢に上記のバイアスを加えることで、右目・左目ビデオカメラ221の位置姿勢(位置情報)を求める。右目・左目ディスプレイ222の位置姿勢を求めるための手法については、光学式マーカ103及び光学式センサ104を用いた手法に限らない。
ステップS803では、CPU201は通信I/Fコントローラ208を制御して、ステップS802において求めた位置情報をサーバ200に対して送信する。
ステップS804では、サーバ200のCPU201は、ステップS803においてPC100から送信された位置情報を受信し、ステップS805では、サーバ200のCPU201は、ステップS804において受信した位置情報をHMD情報1110に登録する。例えば、サーバ200のCPU201は、HMDID1111がHMD111のHMDから受信した位置情報のうち位置については位置1113において対応する行に上書きし、姿勢については姿勢1114において対応する行に上書きする。これにより、HMD情報1110には、HMD101a〜101fのそれぞれについて常に最新の位置姿勢が登録されていることになる。そしてサーバ200は、このようなHMD情報1110をPC100a〜100fのそれぞれに対して定期的に配信するので、PC100a〜100fは自身に接続されているHMD101だけでなく、他のHMD101の位置姿勢をも取得することができる。
次に、現実空間の画像上に、他のHMD101(他のユーザ)を表すアバターや、アバター以外の仮想物体を重畳させるためにPC100及びサーバ200のそれぞれが行う処理について、図9のフローチャートに従って説明する。なお、PC100が行う処理(ステップS902、ステップS904〜S913)のうち一部(例えば、ステップS904〜S913)の処理については、図5のフローチャートにおけるPC100の処理と並行して行われるようにしても良い。ステップS904〜S913の処理は、上記のステップS508における複合現実空間の画像の生成の過程で、現実空間の撮像画像上に更に仮想物体/アバターの画像を重畳させるための制御処理に係るものである。
ステップS901では、サーバ200のCPU201は、モデル情報1120の各モデルID1121について、該モデルID1121に対応するモデル名1122及びファイルパス1123で特定される仮想物体の描画データ、該仮想物体の位置1124及び姿勢1125を、PC100に対して送信する。なお、サーバ200は、PC100ごとに、該PC100に接続されているHMD101の位置姿勢や画角などに応じて決まる視界に入る仮想物体を特定し、該特定した仮想物体の描画データ、位置姿勢をPC100に対して送信するようにしても良い。これは以下のアバターについても同様である。
更にサーバ200のCPU201は、HMD情報1110の各HMDID1111について、該HMDID1111に対応する第1のアバター及び第2のアバターの描画データを、PC100a〜100fに対して送信する。
ステップS902では、PC100のCPU201は、ステップS901においてサーバ200から送信された描画データ及び位置姿勢を通信I/Fコントローラ208を介して受信し、メモリコントローラ207を制御して、該受信した描画データ及び位置姿勢を外部メモリ211に保存する。
ステップS903では、サーバ200のCPU201は、HMD情報1110及び拠点情報1130をPC100に対して送信する。
ステップS904では、PC100のCPU201は、ステップS903においてサーバ200から送信されたHMD情報1110及び拠点情報1130を通信I/Fコントローラ208を介して受信し、メモリコントローラ207を制御して、該受信したHMD情報1110及び拠点情報1130を外部メモリ211に保存する。
そしてPC100のCPU201は、ステップS905〜S907の処理を、アバター以外のそれぞれの仮想物体について行う。ステップS905以降の説明では、PC100aにおける処理について説明するが、この説明はPC100b〜100fについても同様である。
ステップS905では、PC100aのCPU201は先ず、HMD101aのHMDID1111と関連づけてHMD情報1110に登録されている拠点ID1112を特定する。つまり、HMD101aが移動可能な拠点の拠点ID1112を特定する。そしてCPU201は、拠点情報1130において該拠点ID1112に対応する範囲座標1133〜1142のうち先頭から範囲座標数1132だけ取得し、該取得した範囲座標を頂点とする空間(仮想部分空間)を規定する。この規定した仮想部分空間が、「HMD101aが移動可能な拠点を表す空間」である。然るに、「HMD101aが移動可能な拠点を表す空間」を得ることができるのであれば、そのための処理は上記の処理に限らない。
そしてPC100aのCPU201は、アバター以外の仮想物体のうち未選択の1つを選択仮想物体とし、該選択仮想物体についてステップS902で受信した位置が、上記の仮想部分空間内の位置であるのか否かを判断する。選択仮想物体の位置はサーバ200側で適宜更新されても良く、その場合、ステップS902で受信した位置とは移動先の位置となる。
この判断の結果、選択仮想物体についてステップS902で受信した位置が仮想部分空間内の位置であれば、処理はステップS907に進み、選択仮想物体についてステップS902で受信した位置が仮想部分空間外の位置であれば、処理はステップS906に進む。
ステップS907では、PC100aのCPU201は、選択仮想物体の描画データに基づいて選択仮想物体を構築し、該構築した選択仮想物体を該選択仮想物体の位置姿勢でもって仮想空間中に配置し、HMD101aの位置姿勢を有する視点から見た該選択仮想物体の画像を生成する。そしてPC100aのCPU201は、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させる。
一方、ステップS906では、PC100aのCPU201は、選択仮想物体の描画データに基づいて選択仮想物体を構築し、該構築した選択仮想物体を該選択仮想物体の位置姿勢でもって仮想空間中に配置し、HMD101aの位置姿勢を有する視点から見た該選択仮想物体の画像を生成する。そしてPC100aのCPU201は、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させるのであるが、その際、選択仮想物体の画像を囲む規定サイズの枠内で該選択仮想物体を除く領域の色を規定の色(例えば赤)にする(図16)。赤い背景の仮想物体が見えているということは、自分が赤いところには行けないことがわかる。
つまり、HMD101aの属する拠点内に配置可能な仮想物体と配置不可能な仮想物体とを異なる表示形態でもって表示するようにしている。然るに、ステップS906における選択仮想物体の画像の表示形態については、ステップS907における選択仮想物体の画像の表示形態と区別できれば、特定の表示形態に限らない。つまり、仮想物体そのものを加工したり、他の仮想物体に切り替えたりするようにしても良いし、仮想物体の画像を現実空間の撮像画像に重畳した後で、該仮想物体の画像に対して画像処理を施すようにしても良い。
そしてPC100のCPU201は、ステップS908〜S911の処理を、HMD101a〜101fのそれぞれについて行う。
ステップS908では、PC100aのCPU201は、HMD情報1110におけるそれぞれのHMDID1111のうち未選択のHMDID1111(HMD101a以外のHMDID1111)を選択HMDIDとして選択し、該選択HMDIDに対応する拠点ID1112が、HMD101aに対応する拠点ID1112と同じであるか否かを判断する。つまり、HMD101a以外のそれぞれのHMD(HMD101b〜101f)が、HMD101aと同じ拠点に属するものであるのか否かを判断する。
この判断の結果、選択HMDIDに対応する拠点ID1112が、HMD101aに対応する拠点ID1112と同じであれば、処理はステップS908に戻る。一方、選択HMDIDに対応する拠点ID1112が、HMD101aに対応する拠点ID1112と同じでなければ、処理はステップS909に進む。
ステップS909では、PC100aのCPU201は、選択HMDID1111に対応する位置1113が、上記のステップS905において規定した仮想部分空間内の位置であるのか否かを判断する。つまり、HMD101a以外のそれぞれのHMD(HMD101b〜101f)の位置に対応する、HMD101aが属する拠点を基準とするローカル座標系における対応位置が、該拠点内の位置であるのか否かを判断する。
この判断の結果、選択HMDID1111に対応する位置1113が仮想部分空間内の位置であれば、処理はステップS910に進み、選択HMDID1111に対応する位置1113が仮想部分空間外の位置であれば、処理はステップS911に進む。
ステップS910では、PC100aのCPU201は、第1のアバター及び第2のアバターのうち、仮想部分空間内に位置していることを表すアバター(移動可能用のアバターであり、ここでは第1のアバターとする)の描画データに基づいて該第1のアバターを構築する。そしてPC100aのCPU201は、この構築した第1のアバターを、選択HMDID1111に対応する位置1113、姿勢1114で仮想空間(HMD101aが属する拠点を基準とする座標系を有する仮想空間であり、仮想部分空間もこの座標系に従っている)中に配置し、該配置した第1のアバターを、HMD101aの位置姿勢を有する視点から見た画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させる。
ステップS911では、PC100aのCPU201は、第1のアバター及び第2のアバターのうち、仮想部分空間外に位置していることを表すアバター(移動不可能用のアバターであり、ここでは第2のアバターとする)の描画データに基づいて該第2のアバターを構築する。そしてPC100aのCPU201は、この構築した第2のアバターを、選択HMDID1111に対応する位置1113、姿勢1114で仮想空間(HMD101aが属する拠点を基準とする座標系を有する仮想空間であり、仮想部分空間もこの座標系に従っている)中に配置し、該配置した第2のアバターを、HMD101aの位置姿勢を有する視点から見た画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させる。
処理がステップS912に進む時点では、アバターを除く仮想物体を、仮想部分空間に属するものと属さないものとで異なる表示形態で表示し、HMD101aと同じ拠点に属するHMD101の位置姿勢にはアバターを表示せず、HMD101aと異なる拠点に属するHMD101の位置姿勢にはアバターを表示している(図14)。これにより、他の拠点(異なる体験エリア)のHMD(撮像装置)のユーザと、同じ拠点のユーザとを識別させることが可能となり、複数拠点を連携した体験でのコミュニケーションをしやすくすることができる。なお、HMD101aと同じ拠点に属するHMDの位置姿勢に、該HMDがHMD101aと同じ拠点に属する旨を伝えるアバターを表示するようにしても良い。また、HMD101aと異なる拠点に属するHMD101のうち仮想部分空間に属するものと属さないものとでアバターの表示形態を変えている。
また、第1のアバター及び第2のアバターの2つを設けることに限らず、例えば、第2のアバターは予め作成されたものではなく、必要時にPC100側で第1のアバターから生成しても良い。例えば、第1のアバターの色や透明度、形状を変更したものを第2のアバターとして生成して使用しても良い。
ステップS912では、PC100aのCPU201は、HMD情報1110に登録されているそれぞれの拠点ID1112について、拠点情報1130において該拠点ID1112に対応する範囲座標数1132及び範囲座標1133〜1142を用いて上記のようにして仮想部分空間を規定する。つまり、拠点ID1131ごとに、対応する仮想部分空間を規定する。そしてPC100aのCPU201は、HMD101aの位置1113が、この規定した全ての仮想部分空間内の位置であるのか否かを判断する。
この判断の結果、HMD101aの位置1113が、規定した全ての仮想部分空間内の位置である場合には、図9のフローチャートに従った処理は完了する。一方、規定した全ての仮想部分空間のうち、HMD101aの位置1113を含まない仮想部分空間が1つ以上存在した場合には、処理はステップS913に進む。
ステップS913では、PC100aのCPU201は、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に、エラーを示すアイコン(図15)を重畳させる。このようなアイコン表示することで、他の拠点の人が、自分の位置にこれないことがわかる。これにより、自拠点と他拠点、ユーザの位置によりユーザの位置が異常であることが識別できる。
なお、ステップS913では、エラーを示すアイコンを表示する代わりに、若しくは加えて音を発生してHMD101aのユーザにエラーを通知しても良いし、エラーの通知方法や通知先は特定の通知方法、特定の通知先に限らない。
ここで、以上説明したPC100は、以下に示す画像処理装置の一例に過ぎない。この画像処理装置は、現実空間において第1の領域を基準とする第1のローカル座標系において、該第1の領域とは異なる第2の領域を基準とする第2のローカル座標系における第2の位置に対応する第1の位置が、該第1の領域内の位置であるか否かを判断する。そして画像処理装置は、第1の位置に配置した仮想物体の画像が上記判断結果に応じた表示形態で表示されるように、第1の領域内を移動可能な第1の頭部装着型表示装置の位置姿勢に応じて生成し、該生成した画像を第1の頭部装着型表示装置に出力する。
[第2の実施形態]
以下では第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとする。本実施形態では、図9のフローチャートにおいて、ステップS905〜S911の処理の代わりに、図10のフローチャートに従った処理を行う。図10のフローチャートにおける各ステップにおける処理の主体は何れも、PC100aのCPU201であるとする。
ステップS1001では、CPU201は、拠点情報1130におけるそれぞれの拠点ID1131について上記の方法でもって仮想部分空間を生成する。そしてCPU201は、生成した全ての仮想部分空間で重複する重複領域(部分空間:最小拠点)を特定し、該特定した部分空間の頂点座標を求める。
ステップS1002では、CPU201は、ステップS1001で特定した部分空間を表すモデルを生成する。例えば、部分空間の頂点間を線分で結んだ、部分空間のワイヤーフレームモデルを生成する。そしてCPU201は、このワイヤーフレームモデルを、HMD101aの位置姿勢を有する視点から見た画像を生成し、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳する。
ステップS1003では、CPU201は、上記のステップS905と同様に、HMD101aのHMDID1111と関連づけてHMD情報1110に登録されている拠点ID1131に対応する範囲座標1133〜1142のうち先頭から範囲座標数1132だけ取得し、該取得した範囲座標間を線分で結んだ、仮想部分空間のワイヤーフレームモデルを生成する。そしてCPU201は、この生成したワイヤーフレームモデルを、HMD101aの位置姿勢を有する視点から見た画像を生成し、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳する(図17,18)。なお、本実施形態では、床(平面)に対応する位置に2次元で破線や実線を描画するようにしているが、床や壁や天井(空間)に対応する位置に最小の空間を示すよう、破線や実線を描画してもよい。
なお、ステップS1002で生成するワイヤーフレームモデルとステップS1003で生成するワイヤーフレームモデルとは、それぞれで色や線分のパターンを変える等、それぞれのワイヤーフレームモデルが視覚的に区別できる(識別可能)ようにする。
ステップS1004では、CPU201は、上記のステップS907と同様の処理を行う。すなわち、CPU201は、アバターを除く全ての仮想物体について、該仮想物体の画像を生成し、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させる。
ステップS1005では、CPU201は、上記のステップS910と同様の処理を行う。すなわち、CPU201は、第1のアバター及び第2のアバターのうち、仮想部分空間内に位置していることを表すアバター(移動可能用のアバターであり、ここでは第1のアバターとする)の画像を生成し、該生成した画像を、ステップS505において外部メモリ211に保存した現実空間の撮像画像上に重畳させる。
ここで、第1の実施形態及び第2の実施形態に関して、複数拠点で仮想空間を共有するイメージについて説明する。
図12では、拠点1にはユーザ1251,1252,1253が位置しており、仮想物体1290が配置されている。一方、拠点2には、ユーザ1254,1255が位置しており、仮想物体1290が配置されている。ここで、拠点1と拠点2とで仮想空間を共有するために、1203に示す如く、拠点1には存在しないユーザ1255の代わりにアバター1280を配置し、拠点1には存在しないユーザ1254の代わりにアバター1281を配置することで、別拠点のユーザがあたかも同じ空間に存在するように見せることができる。
次に、図12において拠点2の空間が拠点1の空間よりも狭いケースについて説明する。図13では、拠点1にはユーザ1351,1352,1353が位置しており、仮想物体1390が配置されている。一方、拠点2には、ユーザ1354,1355が位置しており、仮想物体1390が配置されている。広さの違う拠点間で仮想空間を共有した場合に、1303ではより広い拠点である拠点1の側から仮想空間のイメージを、1304ではより狭い拠点である拠点2からみた仮想空間のイメージを表す。1304で示す如く、より狭い拠点2では自拠点では移動する事ができる実線で囲まれた範囲の外に移動する事ができないが、別拠点のユーザ1353や仮想物体1391は移動できない位置にいる事が分かる。
次に、図14を参照して、複数拠点で実空間の広さが異なる場合により狭い拠点のユーザの視界から見る課題について説明する。図14の1401は図13のユーザ1355のHMD101から見える視界を示す。拠点2では移動できない範囲にいるユーザ1353のアバター1410(ユーザ1351,1352のアバターはそれぞれアバター1411,1412)や仮想物体1391を確認できるが、他のアバターや仮想物体と区別して表示しないと、誤ってその位置に移動しようとして、例えば自拠点の部屋の壁にぶつかるなど危険な場合がある。この課題を解決するための制御のイメージが後述する図16である。
図15の1501は図13の拠点1のユーザ1353のHMD101から見える視界を示す。ユーザ1353の位置は拠点2では移動できない位置にいることになり、その旨をアイコン(「!」が付された三角形のアイコン)を用いて通知する例である。この例ではエラーアイコンを表示しているが、音と鳴らすなど別の方法で通知することも可能である。
図16の1601は拠点2のユーザ1355のHMD101から見える視界を示す。拠点2では移動できない範囲にいるユーザ1353のアバター1410や仮想物体1391を他のアバターや仮想物体と区別をつけて表示をすると、ユーザ1355は移動できない位置にアバターや仮想物体があることに気づくので、誤ってその位置に移動する事がない。
図17の1701は図13の拠点2のユーザ1355のHMD101から見える視界を示す。自拠点で移動可能な境界に実線を、図19で説明する最小拠点の境界に破線を現実画像に重畳する。拠点2では移動できない範囲にいるユーザ1353のアバター1410や仮想物体1391は実線の外側にあるので、ユーザ1355はユーザ1353のアバター1410や仮想物体1391の位置には移動できない事に気が付く。そのため、誤ってその位置に移動する事がない。
図18の1801は図13の拠点1のユーザ1353のHMD101から見える視界を示す。図13のユーザ1353の位置は拠点2では移動できない位置にいる事になり、その事を通知する例である。図17と同様に自拠点で移動可能な境界に実線を、図19で説明する最小拠点の境界を示す破線を現実画像に重畳することで、ユーザ1353は自身のいる位置は他の拠点では移動できない位置付近にいる事に気づく、また仮想物体1391の位置も他の拠点では移動できない位置にある事に気づく。
図19は3つの拠点で仮想空間を共有する場合について示している。1901は拠点1を示す。1902は拠点2を示す。1903は拠点3を示す。1904は拠点1、2、3を重ね合わせたイメージを示す。全ての拠点が重なる部分を最小拠点と定義する。最小拠点は全ての拠点のユーザが移動可能な範囲である事を示す。なお、図19では拠点を2次元としているが、図11の拠点情報1130で示している通り、拠点の範囲は3次元で表現してもよい。
以上説明したように、本実施形態によれば、仮想物体の共有時にそれぞれの現実空間のユーザの位置に応じて、ユーザの移動における異常発生状態(他の現実空間のユーザが移動できないこと)を通知することができる。
他拠点(他のユーザの体験場所)と自身の拠点(体験場所)の大きさが異なる場合に、体験時の危険が及ぶため、他拠点のユーザの位置や自身の位置に応じて、移動による異常を通知することで、危険を回避することが可能となる。
また、体験時に拠点と位置によりユーザに異常を通知することで、他の体験場所のユーザとの円滑なコミュニケーションを維持することが可能となる。(他の体験場所のユーザが移動できないにも関わらず、「こっちに来て、仮想CGを見て」といった不要な指示が減る)
例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
例えば、図2に示すPC100の構成を全て備えるHMD101が、自機の機能をCPU201で実行して、上述した実施形態においてPC100の実行するものとして説明した処理の全てを、実行するようにしてもよい。
[第3の実施形態]
第1,2の実施形態では、HMD101はビデオシースルー方式のHMDであるとしたが、光学シースルー方式のHMDを用いても良い。この場合、現実空間の撮像画像の撮像及びPC100への入力は行われず、PC100側では仮想空間画像を生成すると、この生成した仮想空間画像をHMDに対して出力することになる。
また、第1〜3の実施形態の一部若しくは全部を適宜組み合わせて新たな構成を構成しても良いし、第1〜3の実施形態の一部若しくは全部を選択的に使用する新たな構成を構成しても良い。
[その他の実施形態]
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記録媒体は本発明を構成することになる。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク、ソリッドステートドライブ等を用いることができる。
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。