JP2004013326A - 画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 - Google Patents
画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 Download PDFInfo
- Publication number
- JP2004013326A JP2004013326A JP2002163179A JP2002163179A JP2004013326A JP 2004013326 A JP2004013326 A JP 2004013326A JP 2002163179 A JP2002163179 A JP 2002163179A JP 2002163179 A JP2002163179 A JP 2002163179A JP 2004013326 A JP2004013326 A JP 2004013326A
- Authority
- JP
- Japan
- Prior art keywords
- viewpoint
- user
- viewpoint position
- image
- sensitivity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
- Position Input By Displaying (AREA)
Abstract
【課題】ヘッドマウントディスプレイを利用した仮想空間を体感するシステムにおいて、注視しようとする、もしくは注視されるべきオブジェクトに対し視点位置の感度を変更することで、容易にそのオブジェクトの詳細を認識し得る環境を提供する。
【解決手段】ユーザに装着するためのヘッドマウントディスプレイ101に、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置において、ユーザの前記視点位置を互いに異なる感度で検出する構成を用意しておき、そのいずれかを選択し、選択した感度で得られた視点位置に従いヘッドマウントディスプレイ101に表示すべき像を生成し、表示させる。
【選択図】 図1
【解決手段】ユーザに装着するためのヘッドマウントディスプレイ101に、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置において、ユーザの前記視点位置を互いに異なる感度で検出する構成を用意しておき、そのいずれかを選択し、選択した感度で得られた視点位置に従いヘッドマウントディスプレイ101に表示すべき像を生成し、表示させる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明はヘッドマウントディスプレイに3次元の仮想空間の像を表示させることで、仮想現実感を提供する画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体に関するものである。
【0002】
【従来の技術】
近年、コンピュータグラフィックス(以下CG)を利用して仮想現実感を提供するシステムが普及し始めている。そのような仮想現実感生成システムでは、仮想的な三次元空間の画像を、リアルタイムCGを使って生成することにより仮想現実感を実現している。CG画像の表示にヘッドマウントディスプレイ(以下HMD)を利用した方法は、臨場感のある仮想現実感を安価に実現できる方法として普及している。また、視点を検出するためのセンサをユーザに取り付け、視点変化をトラッキングし、その情報をCG画像生成時の視点情報に反映させれば、ユーザの視点変化に追従したCG画像を生成することができる。これによって、よりリアリティのある仮想現実感が提供できる。ユーザの視点情報を検出する方法には、磁気式位置センサを頭部に取り付け、頭部位置の運動をトラッキングする方法や、眼球画像を解析し眼球運動をトラッキングする方法、及びそれらを複合した方法などが知られている。
【0003】
【発明が解決しようとする課題】
前述のような仮想現実感生成システムでは、ユーザの視点変化に応答してCG計算の視点設定を変化させるわけであるが、このユーザ視点変化への応答は適度な感度を持たせて行う必要がある。なぜなら、ユーザ視点変化への応答感度が鈍感であるとユーザに不快感を与えるからである。また、頭部運動トラッキングの場合、ユーザは自分が見ようとする方向に頭を動かしても、その動作に応じた変化、すなわち現実世界で期待される視界の変化がHMD上の表示部に直ちに現れない。よって、一般には、視点運動への応答感度は敏感である方が好ましい。
【0004】
ところで、HMDを用いることでもって実空間では到底達成できないような体感をユーザーに与えることが可能になることに対しても着目したい。その一つとして、仮想空間におけるオブジェクトをズームインし(オブジェクトに対して空間的に接近する拡大ではなく、光学的に拡大するのと等価の拡大の場合)て見ることであろう。
【0005】
かかる機能を実現する場合にも、ユーザの視点変化に応答して、CGの視点設定を変更することになるが、ズームインした場合、すなわち、視点位置に応じた視野内にあるオブジェクトを拡大して生成し、それをHMDが備えるディスプレイ部に表示する場合、視点位置が多少変化しただけでも、着目したい、或いは着目しているオブジェクト(或いはその一部)が視野から外れる、或いは外れやすくなることである。ちょうど、望遠鏡を手で持って観察する場合、「手ぶれ」により、目的とする対象物が視界から外れる場合に似ている。これをHMDを用いた仮想空間に当てはめるのは、或る意味で現実感の再現するためと考えてもよいが、「手ぶれ」そのものは人間の意図に反するものである以上、仮想空間上ではむしろ再現しない方が良い。
【0006】
以上はズームイン機能と視点運動の応答感度との対応で述べたが、ズームインを除外した視点運動の応答感度に起因する問題点も存在する。
【0007】
例えば、ユーザが仮想空間中に置かれた「看板」等の文字情報を注視した場合、ユーザ視点変化への応答感度が敏感であると、頭部の微小運動によって画像がぶれ、文字情報が読み取り難い。視点変化に敏感であっても、その変化検出の精度が人間ほど高くないし、描画速度(フレーム数/単位時間)にも限界があることが、その大きな理由である。
【0008】
以上のように、HMDを用いる場合、本来はユーザの視点検出の感度が高いことが望ましいものの、場合によっては逆にそれがマイナス要因となることが理解できよう。
【0009】
本発明はかかる問題点に鑑みなされたものであり、その目的とするところは、ヘッドマウントディスプレイを採用し、仮想空間の像を視点変化に応じてCG技術により生成する際、視点変化の応答感度を少なくとも2種類持たせることで、仮想現実感をより快適なものとすることを可能ならしめる画像処理装置及び方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体を提供しようとするものである。
【0010】
【課題を解決するための手段】
かかる課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、
ユーザに装着するためのヘッドマウントディスプレイに、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置であって、
ユーザの前記視点位置を、互いに異なる感度で検出する複数の視点位置検出手段と、
前記複数の視点位置検出手段のいずれかを選択する選択手段とを備える。
【0011】
【本発明の実施の形態】
以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
【0012】
<第1の実施形態>
仮想現実感生成システムでは、ユーザの視点変化に応答してCG計算の視点設定を変化させる。この時、ユーザ視点変化への応答は適度な感度を持たせて行う必要がある。ここで、ユーザ視点変化への応答感度が鈍感であると、ユーザに不快感を与える。例えば、頭部運動トラッキングの場合、ユーザが、自分が見ようとする方向に頭を動かした場合、もし、応答感度が鈍感であると、その動作に応じた変化、すなわち現実世界で期待される視界の変化がHMD上に直ちに現れなくなる。これでは、仮想現実感の質が低下させるだけである。従って、通常の表示においてが、ユーザ視点変化への応答感度は敏感である方が好ましい。
【0013】
ところが、前述したズーム機能を実現した場合、ズームイン(拡大)した状態では、ユーザ視点変化への応答感度が敏感であると、逆に、これが問題になる。何故なら、ズームイン状態では、視点の微小な運動が拡大され視界がぶれるからである。すなわち、現実世界で望遠鏡を見た場合の「手ぶれ」に相当する状況が発生する。
【0014】
この「手ぶれ」現象自体も現実感の再現と考えることもできるが、通常、ユーザが物体にズームイン(光学的な拡大である)を行うというのは、その物体を詳細に観察したいという意志の現れである。したがって、ズームイン状態では「手ぶれ」を抑えるよう動作させることがユーザにとっては好ましい。「手ぶれ」を抑えるためには、ユーザ視点変化への応答感度を鈍くする必要がある。よって、ズームイン状態ではユーザ視点変化への応答感度を鈍くした方が好ましい。
【0015】
このように、ユーザ視点変化への応答感度はユーザが通常観察をしているか拡大観察をしているかに応じて決める必要がある。
【0016】
ところが、これまでの仮想現実感生成システムでは、ユーザ視点運動への応答感度が常に一定であり、上記のようなズームインに適用させることはできない。そこで、本実施形態では、かかる問題点を解決すること、換言すれば、ユーザ視点変化への応答感度を通常観察か拡大観察かに応じて切り替え、それに基づくCG画像生成を行うことにより、ユーザの体感する仮想現実感をより快適なものにすることに成功する例を説明する。
【0017】
以下、本発明の第一の実施形態について図1〜図6を用いて説明する。
【0018】
[全体構成]
図1は本実施形態の装置構成の概念図である。
【0019】
コンピュータ103はCG画像を生成し、その映像はヘッドマウントディスプレイ(HMD)101に出力される。ユーザはHMD101を装着し、HMD101内に設けられたディスプレイを介して、コンピュータ103から出力される映像を見ることで、仮想空間として体験することになる。この時、ユーザは手元に置かれたキーボード106、または何らかのコントローラを操作し、必要に応じて拡大観察を行う。
【0020】
本実施形態では、ユーザの視点(位置、方向)を検知する方法として、頭部位置変化を磁気式位置センサによって検知する方法を用いる。磁気式位置センサは製品(例えば、ポヒマス社製品など)が存在し、公知の機器であるため詳細な説明は省略する。磁気式位置センサは磁場を生成するトランスミッタ105、誘導電流を検出するレシーバ102、および制御用のコントローラ104から構成される。レシーバはユーザの頭部に装着され、トランスミッタはレシーバとの相対位置を考慮して、適度な位置に配置される。レシーバには、トランスミッタに対するレシーバの相対変位に応じた電流が発生し、コントローラではこれを解析し、位置データを算出する。コントローラはコンピュータに接続され、位置データがコンピュータに送られる。コントローラとコンピュータ間のデータ通信にはシリアル通信が用いられる。以後、頭部位置検出用磁気式位置センサを単に位置センサとよぶ。
【0021】
なお、ユーザの視点変化の検出方法は磁気式位置センサに限らずとも、超音波センサや光センサで頭部位置の検出を行ってもよい。また、眼球画像の解析によって眼球運動を検出し、視点変化を検出する方法や、眼球運動検出法と頭部位置検出法の両方を組み合わせても構わないので、上記例に限定されるものではない。
【0022】
[コンピュータの構成]
図2は本実施形態に使われるコンピュータ103の構成を示したものである。コンピュータ103の記憶装置204には、本実施形態の仮想現実感を生成するためのプログラムが格納される。また、仮想空間を構成する三次元空間における物体データ等もコンピュータの記憶装置204に格納される。この三次元物体データとは、頂点座標情報と、各頂点の連結によって定義されるポリゴン情報から構成されるデータである。記憶装置204に格納されたプログラムはコンピュータのCPU202によって実行され、画像メモリ205にCG画像が生成される。ただし、最近のコンピュータでは、CG画像をCPUによってのみ生成するのではなく、専用のハードウェア(ハードウェアT&Lのグラフィックエンジンプロセッサ等)を併用して生成する場合が多い。206はそのようなCG画像生成専用のハードウェアである。画像メモリ205に生成されたCG画像は、コンピュータに接続されたHMD101に出力される。コンピュータには周辺機器としてキーボード106やマウス209が接続され、ユーザとコンピュータの対話に利用される。コンピュータのシリアル通信装置203には位置センサのコントローラ104が接続され、位置センサからの位置データがコンピュータに取り込まれる。
【0023】
実施形態では、キーボード106は、図1に示したように、HMD101を装着するユーザが拡大率を入力する手段として用いるものとしている。ただし、一般に、コンピュータの入力デバイスとして用いられるキーボードのような多数のキーが設けられる必要はなく、数種類(拡大率の大小を設定するので少なくとも2つ程度)でよい。また、キーボードとコンピュータとは、有線で通信するものとしているが、その間のケーブルが邪魔になることを考えれば、無線で通信するようにしてもよい。要するに、ズームイン<−>ズームアウトの操作が簡便にできることが望ましい。
【0024】
[処理手順の説明]
以下、図3乃至図4のフローチャートは本実施形態の処理手順を説明する。
【0025】
図3は本実施形態の処理手順を表すメインのフローチャートである。
【0026】
処理全体にわたり使用する変数として、現在の感度設定を記憶する「感度」変数、観察対象の拡大率を表す「拡大率」変数を用意する。これら変数は、不図示のRAMに予め確保されるものである。
【0027】
プログラムが開始されると、ステップS301の初期化処理を行い、ステップS302において終了要求が発生するまで、ステップS303からステップS308までの処理を繰り返す。ステップS302における終了要求とは、ユーザがキーボードやマウスを使ってプログラムの終了を要求すること行われる。
【0028】
ステップS303からステップS308までの処理が一フレーム分(一時刻分)のCG画像生成の処理単位である。この処理単位が繰り返されることによって、ユーザ視点に応じてリアルタイムに変化する仮想空間の映像が生成される。
【0029】
ステップS301の初期化処理では、「感度」変数を「高感度」に設定し、平均化バッファ初期化処理を行う。平均化バッファ初期化処理の説明は後述の平均化処理にて行う。「拡大率」変数の値は「1」に設定する。なお、ここで言う「1」は、実空間との差がないことを示すもので「等倍」に相当するものである。
【0030】
ステップS304では、ズーム操作処理を行う。図4はこのズーム操作処理のサブルーチンを示している。図3のメインフローチャートから、図4のズーム操作処理サブルーチンが繰り返し呼ばれることによって、ズーム操作が行われる。まず、キーボード106の特定のキー(ズームインキーとする)が初めて押された瞬間、拡大観察が開始される。この時、「感度」変数を低感度に変更し(ステップS403)、平均化バッファ初期化処理を行い(ステップS404)、拡大率を増加させる(ステップS405)。以後、ズームキーが押され続けている間は、ステップS403、S404はスキップされ、拡大率の増加が行われる。拡大率には最大値(リミッタ)が設定されており、この最大値を越えた場合は最大値に固定する(ステップS407)。ズームキーが初めて離された瞬間、拡大観察を止め通常観察に戻る。この時、「感度」変数を高感度に設定し(ステップS409)、拡大率を「1」に戻す(ステップS410)。
【0031】
さて、ステップS304では、位置センサコントローラから送られてくる位置データを読み取る。位置データが無い場合、視点変更に関わる処理を全てスキップし、ステップS308に進んでCG画像描画処理を行う。視点変化が無い場合(位置データが無い場合)にも、CG画像を再描画する理由は、例えば、物体をアニメーションさせるような場合、CG画像の変更要因が視点変化以外にも存在するからである。もし、視点変化以外にCG画像の変更要因が無い場合は、CG画像描画処理もスキップしてよい。すなわち、ステップS305からステップS302に戻ってよい。
【0032】
位置センサコントローラから送られてくる位置データのデータパケットには、位置センサレシーバのトランスミッタに対する変位情報が記され、次の6成分のデータが順番に並んでいる。
【0033】
レシーバのトランスミッタに対する並進成分のX座標、Y座標、およびZ座標、レシーバのトランスミッタに対する回転を表す第一回転角、第二回転角、および第三回転角である。ただし、この三つの回転角は、X軸、Y軸、およびZ軸周りのオイラー角で表現される。
【0034】
ステップS306では、現在の「感度」変数の値を調べ、「高感度」の場合は何もせずステップS308に進み、「低感度」の場合はステップS307の平均化処理を行い、位置データを修正した後、ステップS308に進む。
【0035】
平均化処理は位置データの持つ時間的高周波成分を落とし、視点変化への応答感度を下げることである。それ故、「低感度」が設定されている場合には、現在の上記6成分のデータを含め、過去n回のデータの平均値を算出するようにする(そのため、過去のn回分のデータを記憶保持するようにする)。
【0036】
位置センサコントローラ自体が平均化処理の機能を持つようにしても良い。位置センサコントローラの平均化機能を使う場合、コントローラの出力データは、平均化済みデータ、または直接データどちらかなので、ステップS306、307はスキップしてよい。その代わり、「感度」変数を「低感度」、または「高感度」へ切り替える処理に対応して、コントローラの動作モードを「平均化処理有効」、または「平均化処理無効」にそれぞれ切り替える。
【0037】
[平均化処理]
ここで、ステップS307にて行われる平均化処理の説明を行う。
【0038】
位置データの平均化は、並進、回転の6成分それぞれについて、過去に蓄積された複数のデータを平均化することによって行う。この平均化処理は各6成分について同様であるので、特定の一成分についてのみ説明する。
【0039】
過去のデータを蓄積するためには蓄積用バッファを設けておく。このバッファは終端を先端につないだ、いわゆるリングバッファ構造を持つ。これに加え、データの蓄積数を表す変数「データ蓄積数」と、最新のデータがリングバッファの何処に置かれているかを示す変数である「最新データインデックス」を設ける。平均化にはN個のデータを使用するものとする。このNを大きくとることによって感度は下がり、逆に小さくとれば感度が上がる。Nは希望の感度が得られるよう適度な値にとればよい。蓄積用リングバッファはN個のデータを保持する大きさを持つ。
【0040】
図3のステップS301の初期化処理、または後述の感度切り替えサブルーチンから呼ばれる平均化バッファ初期化処理では、「データ蓄積数」を「0」に設定し、また「最新データインデックス」がバッファの先頭を指すように設定する。
【0041】
平均化処理は次のように行われる。
【0042】
まず、最新のデータが入力されると、「データ蓄積数」がゼロでない場合に限り、「最新データインデックス」を、現在指しているデータの次のデータを指すように変える。ただし、この変更で「最新データインデックス」がバッファの末尾以降を指す場合は、バッファの先頭を指すように変更する。次に、「最新データインデックス」の指す位置にデータを書き込み、さらに、「データ蓄積数」がNに満たない場合に限り「データ蓄積数」を一増やす。次に、リングバッファの「最新データインデックス」の指す位置から、「データ蓄積数」分のデータをリングバッファ逆方向に向けて読み出し、それらの平均値を求める。そして、求めた平均値を低感度モードでの修正されたデータと見なす。以上の処理を位置データの6成分全てにわたって行い、位置データを修正する。
【0043】
以上、平均化処理の説明を終わり、図3のフローチャートの説明に戻る。
【0044】
[CG画像生成]
ステップS308では、CG画像生成に関わる処理を行う。リアルタイムにCG画像を生成する場合、通常、レンダリングエンジンとよばれるCG専用のハードウェア、またはソフトウェアを利用することが多い。本実施形態でもそのようなレンダリングエンジンを使用する。その場合、CG画像生成の処理は、レンダリングエンジンに対する動作設定の処理と、レンダリングエンジンによる描画処理の実行によって行われる。
【0045】
ここで、CG画像生成における描画方法と視点設定の方法について概要を説明しておく。図6は、CG計算により三次元物体データを二次元画像化、すなわち可視化する方法を示している。CG計算のアルゴリズムは複数存在するが、ここではリアルタイムレンダリングとよばれる分野で広く用いられているポリゴン単位の計算方法(以降、ポリゴンレンダリング)を取り上げる。ポリゴンレンダリングは、物体を構成する(または定義する)各ポリゴンに対し、図5に示したステップS502〜505の工程を施すことによって行われる。
【0046】
まず、絶対的空間、いわゆるワールド座標系に配置されたポリゴンデータを取得し(ステップS501)、視点に相対な空間、いわゆるカメラ座標系に変換する(ステップS502)(この変換を以後、ワールド/カメラ座標変換とする)。なお、ここで言う「カメラ座標系」が物理的なカメラを有することを意味するものではなく、仮想的な視点位置にカメラを設置したと仮定することを意味するものである。実施形態の場合、HMDがユーザの視点位置でもあるので、ここで言うカメラ座標系はHMDから見た座標系と言っても良いであろう。
【0047】
続いて、ポリゴンに陰影を付けるための照明計算を行う(ステップS1503)を行う。
【0048】
続いて、三次元座標から二次元座標への投影変換と画素座標へのマッピング(ステップS1504)を行う。この時、ポリゴンの三次元座標には投影行列による変換が施され、視体積へのクリッピングと投影処理が行われる。また、ビューポート変換によって投影面上の座標が実際の描画画素座標へマッピングされる。
【0049】
最後に、ポリゴン像の塗りつぶし、すなわちラスタライズ処理(ステップS1505)を施し、最終的にポリゴンのレンダリング画像を得、表示のために出力する(ステップS506)。
【0050】
これらの各工程の内容は広く知られたものであり、また、レンダリングエンジンによって実行されるものであるため、本発明の視点変更や画像拡大に関わる部分以外、詳細な説明は省略する。
【0051】
レンダリングエンジンによって描画を行う場合、レンダリングエンジンに対する動作設定を描画に先立ち行い、その後、レンダリングエンジンに描画を実行させる。本発明に関わるレンダリングエンジンへの動作設定は次の二つである。
・動作設定1:
ステップS502の計算を定義するワールド/カメラ座標変換の設定。これによって、CG画像の視点の変更が実現される。
・動作設定2:
ステップS504の投影変換を定義する射影行列とビューポート変換の設定。これによって、CG画像の視野角の変更が実現される。
【0052】
まず、「動作設定1」のワールド/カメラ座標変換の変更について説明する。
【0053】
CGの一般的な考え方では、先に説明したように、レンダリング視点を決める要因を、実世界のメカニズムと対応させ、カメラという概念で表現する。ワールド座標系からカメラ座標系への座標変換は、ワールド座標系にカメラ(カメラ座標系)がどのように配置されているか、という情報で表現できる。カメラの配置はカメラの位置と回転によって表現できる。よって、ワールド/カメラ座標変換は希望する視点に置かれたカメラの位置と回転情報から計算される。
【0054】
[ワールド/カメラ座標変換の計算方法]
ワールド/カメラ座標変換は通常、同次座標を用いて表される。すなわち、ワールド座標系の任意の一点(x, y, z,1)は、ワールド/カメラ座標変換によって、対応するカメラ座標系の一点(x’, y’, z’,1)に変換され、式1のように表すことができる。式1の、m11〜m33の3×3部分行列は回転成分を表しており、この部分をRwcとする。また、式1のTx、Ty、Tzは並進成分を表している。
【0055】
【数1】
【0056】
ワールド/カメラ座標変換の逆変換である、カメラ座標系からワールド座標系への変換、すなわちカメラ/ワールド座標変換も式1と同様な形式として、式2で表すことができる。ここで、式2のRcwはワールド座標におけるカメラの回転を表しており、(Cx,Cy,Cz)はカメラの位置を表している。
【0057】
【数2】
【0058】
カメラの位置と回転情報からワールド/カメラ座標変換を計算するには、一旦、カメラ/ワールド座標変換を求め、その逆変換を求めることによって行う。通常、カメラの回転は、ワールド座標で表現される回転軸とその周りの回転の回転角で表現される。今、回転軸を(X,Y,Z)とし、回転角をθラジアンとすると、カメラ/ワールド座標変換行列の回転成分Rcwは、式3で計算される。カメラの回転が複数の回転の合成である場合は、個々の回転に対応した式3の行列を全て掛け合わせればよい。
【0059】
【数3】
【0060】
式3のワールド/カメラ座標変換行列のRwcは、Rcwの逆行列として求まるが、ここではRcwが回転成分しか持たないので、単にRcwの転置行列をRwcとすればよい。すなわち、式4でRwcが求まる。
【0061】
【数4】
【0062】
Rwcが求まれば、ワールド座標におけるカメラの位置(Cx,Cy,Cz)から、式1のTx、Ty、Tzが式5によって求められる。
【0063】
【数5】
【0064】
次に、「動作設定2」の画像拡大に関わる投影変換の変更について説明する。
【0065】
三次元空間から二次元投影面への投影変換が射影行列によって決められる。射影行列は、式1と同様、4次同次座標に作用する4×4の行列として次のように定義される。
【0066】
【数6】
【0067】
ここで、rは投影面右端のX座標、lは投影面左端のX座標、tは投影面上端のY座標、bは投影面下端のY座標、nは近クリップ面のZ座標、およびfは遠クリップ面のZ座標を表す。また、投影面の幅wと高さhは式6のr、l、t、bとそれぞれ次の関係にある。
w=r−l
h=t−b
本実施形態では、通常よく行われるように、視体積ピラミッドを視軸に関して対称にとる。すると、式6のr、l、t、bは単純に投影面の幅wと高さhから次のように決まる。
r= w÷2 (式7)
l=−w÷2
t= h÷2
b=−h÷2
なお、式6のfとnは視野の深度方向の領域を、希望する程度に制限するよう適度な値に設定すればよい。
【0068】
一方、ビューポート変換は投影面がどのように画像にマッピングされるかを定義するものであり、希望する画像領域の縦横の大きさを指定することによって設定が行われる。本発明では表示される画像領域の大きさは固定にするので、ビューポート変換の設定はプログラム開始時に一度設定すればよい。画像領域の大きさは適度な大きさにとればよい。
【0069】
CG画像自体の大きさは固定であるが、射影行列の視野角に関連する部分を変更することによって、CG画像の描画対象を拡大することができる。図6はこの状況を説明する概念図である。図6の上段には、異なる視野角での投影処理を上から見た図を示してある。図6の中段、下段には視野角の大きい場合と小さい場合の投影像をそれぞれ示してある。図6からわかるように、投影面の幅wと高さhを縮小することにより、描画対象の画像が拡大される。
【0070】
描画対象の拡大を表すパラメータをM(M≧1)とし、通常サイズの画像を得る場合の投影面の幅と高さが、それぞれw0、h0であったとする。この時、描画対象をM倍程度に拡大するには、次の式8によりr、l、t、bを決め、式6の射影行列を設定すればよい。
r= w0÷M÷2 (式8)
l=−w0÷M÷2
t= h0÷M÷2
b=−h0÷M÷2
以上、カメラの位置、回転情報からワールド/カメラ座標変換を変更する方法と、視界画像の拡大率に応じて投影行列を変更する方法を説明した。
【0071】
再び、図3のフローチャートの説明に戻る。
【0072】
ステップS308では、まず、センサからの位置データに基づき、前記、ワールド/カメラ座標変換の計算方法で示した方法でワールド/カメラ座標変換を計算し、レンダリングエンジンに適用する。この時、カメラ/ワールド座標変換行列の回転行列は、位置データの三つのオイラー角それぞれについて式3の計算を行い、三つの行列を掛け算すればよい。また、位置データの並進成分は式2または式5の(Cx,Cy,Cz)として使用すればよい。ただし、並進成分に関しては、CG空間を表す論理的な長さ単位に適合するよう、適度なスケール変換を施して使用する。
【0073】
続いて、現在設定されている「拡大率」を式8のMとし、式8と式6により射影行列を求めレンダリングエンジン適用する。最後にレンダリングエンジンによる描画を実行し、レンダリング画像を得る。ステップS308における描画処理が終わると、次のCG画像を生成すべく、ステップS302にもどりステップS303〜S308までの一連の処理を繰り返す。
【0074】
以上説明したように本実施形態によれば、HMDを用いる場合、操作者の視点位置変化に敏感に応答するモードと、それより鈍感にするモードを、ズームインするか否かに応じて切り替えることにより、より快適な仮想現実感をユーザに与えることが可能となる。
【0075】
なお、上記実施形態では、視点位置変化に対する感度を2種類とし、ズームインする/しないの2状態に対応づける例を説明したが、ズームイン倍率及び視点位置変化に対する感度をそれぞれ多段階にし、各ズーム倍率に応じて視点位置変化に対する感度を調整するようにしても良い。
【0076】
最新の視点位置に関する情報を仮にF0(上記のように6つのデータで構成される)とし、時間的にN回前のタイミングでのデータをFNと表現し、感度を示す変数Mを定義したとき、F0〜FMの加算平均を算出するようにすればよい。すなわち、拡大率に応じて変化する、或いは、変化するように設定する変数Mを定義し、時系列に得られる視点位置データの、変数Mで示される個数の平均値を採用することで、感度を調整する。この場合、Mの値が小さいほど感度が高い、換言すれば、Mの値が大きいほど感度が低いことを示すことになる。
【0077】
なお、位置センサコントローラ104が、制御指示コマンドに与えることで、視点変化の応答感度を変化させる手段を有する場合には、それを採用することで実現できるので、上記実施形態によって本発明が限定されるものではない。
【0078】
また、場合によっては、1つの共通な位置センサコントラを活用するのではなく、ユーザに、感度が異なる複数の視線位置装置を装着するようにしても構わないであろう。
【0079】
ただし、ユーザに装着する装置は少ないほうが良いし、感度が固定の既存の位置センサコントローラを使用することを考慮すれば、上の如く、単純な平均算出処理で実現するとコスト的に有利である。
【0080】
以上説明したように、本第1の実施形態によれば、視点追従型の仮想現実感を生成する場合において、拡大観察時に追従感度が適切に設定された快適な仮想現実感を提供することが可能になる。
【0081】
<第2の実施形態>
上記第1の実施形態では、ズームインに応じて視点位置の応答感度を調整するものであったが、倍率が固定の場合であっても、その応答感度が高いことに起因する問題点がある。それは、例えば、仮想空間内に「看板」等が表示されている場合において、それを注視する場合である。ユーザの視点位置の変化に対して感度が高いと、ユーザの頭部の微小運動に応じて画像がぶれてしまい、文字情報が読みにくくなる。
【0082】
そこで、本第2の実施形態では、これを解決する例を説明する。なお、説明を簡単なものとするため、システムの構成及びコンピュータの構成は、上記の第1の実施形態における図1、図2と同様であるものとし、その説明は省略する。また、基本的には、第1の実施形態と同様、視点位置変化に対する感度を変更するものであり、重複する部分も存在するが、動作や処理手順についてはその重複部分を省略せず、改めて説明することとする。また、後述するように、本第2の実施形態の場合、HMDを使用中、そのユーザはキーボード108を操作する必要がない。
【0083】
[処理手順の説明]
図7〜図10のフローチャートは本第2の実施形態の処理手順を表している。以下、同図を用いて本第2の実施形態の処理手順を説明する。
【0084】
図7は本第2の実施形態の処理手順を表すメインのフローチャートである。
【0085】
プログラムが開始されると、ステップS1301の初期化処理を行い、ステップS1302において終了要求が発生するまで、ステップS1304からS1311までの処理を繰り返す。ステップS1302における終了要求とは、ユーザがキーボードやマウスを使ってプログラムの終了を要求することである。
【0086】
ステップS1304からS1311までの処理が一フレーム分(一時刻分)のCG画像生成の処理単位である。この処理単位が繰り返されることによって、ユーザ視点に応じてリアルタイムに変化する仮想空間の映像が生成される。
【0087】
ステップS1301の初期化処理では、「感度」変数を「高感度」に設定し、平均化バッファ初期化処理を行う。平均化バッファ初期化処理の説明は後述の平均化処理で行う。
【0088】
ステップS1304では、位置センサコントローラから送られてくる位置データを読み取る。位置データが無い場合、視点変更に関わる処理を全てスキップし、ステップS1311に進んでCG画像描画処理を行う。視点変化が無い場合(位置データが無い場合)にも、CG画像を再描画する理由は、例えば、物体をアニメーションさせるような場合、CG画像の変更要因が視点変化以外にも存在するからである。もし、視点変化以外にCG画像の変更要因が無い場合は、CG画像描画処理もスキップしてよい。すなわち、ステップS1305からS1302に戻ってよい。
【0089】
位置センサコントローラから送られてくる位置データのデータパケットには、位置センサレシーバのトランスミッタに対する変位情報が記され、次の6成分のデータが順番に並んでいる。
【0090】
すなわち、レシーバのトランスミッタに対する並進成分のX座標、Y座標、およびZ座標、レシーバのトランスミッタに対する回転を表す第一回転角、第二回転角、および第三回転角である。ただし、この三つの回転角は、X軸、Y軸、およびZ軸周りのオイラー角で表現される。
【0091】
ステップS1306では、現在の「感度」変数の値を調べ、「高感度」の場合は何もせずステップS1308に進み、「低感度」の場合はステップS1307の平均化処理を行い、位置データを修正した後ステップS1308に進む。
【0092】
平均化処理は位置データの持つ時間的高周波成分を落とし、視点変化への応答感度を下げることである。位置センサコントローラ自体が平均化処理の機能を持つ場合もある。その場合は、コントローラが出力するデータは、既に平均化されたもの、または平均化されていないものどちらかなので、ステップS1306、1307はスキップしてよい。その代わり、後述のステップS1309の「感度切り替え処理」において、コントローラの動作モードを「平均化処理有効」、または「平均化処理無効」のどちらかに切り替える。
【0093】
[平均化処理]
ここで、ステップS1307にて行われる平均化処理の説明を行う。
【0094】
位置データの平均化は、並進、回転の6成分それぞれについて、過去に蓄積された複数のデータを平均化することによって行う。この平均化処理は各6成分について同様であるので、特定の一成分についてのみ説明する。
【0095】
過去のデータを蓄積するためには蓄積用バッファを設けておく。このバッファは終端を先端につないだ、いわゆるリングバッファ構造を持つ。これに加え、データの蓄積数を表す変数「データ蓄積数」と、最新のデータがリングバッファの何処に置かれているかを示す変数である「最新データインデックス」を設ける。平均化にはN個の視点位置データを使用するものとする。このNを大きくとることによって感度は下がり、逆に小さくとれば感度が上がる。Nは希望の感度が得られるよう適度な値にとればよい。蓄積用リングバッファはN個のデータを保持する大きさを持つ。
【0096】
図7のステップS1301の初期化処理、または後述の感度切り替えサブルーチンから呼ばれる平均化バッファ初期化処理では、「データ蓄積数」を「0」に設定し、また「最新データインデックス」がバッファの先頭を指すように設定する。具体的な、平均化処理は次のように行われる。
【0097】
まず、最新のデータが入力されると、「データ蓄積数」がゼロでない場合に限り、「最新データインデックス」を、現在指しているデータの次のデータを指すように変える。ただし、この変更で「最新データインデックス」がバッファの末尾以降を指す場合は、バッファの先頭を指すように変更する。次に、「最新データインデックス」の指す位置にデータを書き込み、さらに、「データ蓄積数」がNに満たない場合に限り「データ蓄積数」を一増やす。次に、リングバッファの「最新データインデックス」の指す位置から、「データ蓄積数」分のデータをリングバッファ逆方向に向けて読み出し、それらの平均値を求める。そして、求めた平均値を低感度モードでの修正されたデータと見なす。以上の処理を位置データの6成分全てにわたって行い、位置データを修正する。
【0098】
以上、平均化処理の説明を終わり、図7のフローチャートの説明に戻る。
【0099】
ステップS1308では、位置センサから取得した位置データ、または修正された位置データを用い視線判別処理を行う。ここで、図8を用いて視線判別処理の説明を行う。図8は視線判別処理のサブルーチンを表すフローチャートである。
【0100】
ステップS1401の初期化処理では、まず、「視線判別結果」変数の値を「低感度領域と交差なし」に初期化しておく。また「旧視点交差点間距離」変数の値を十分大きな値に設定しておく。
【0101】
ステップS1402以降の処理では、三次元空間中に含まれる物体全てにわたり、視線交差に関する評価を行う。ただし、空間中に含まれる全ての物体を評価しなくとも、いわゆるオクトツリーなどの方法を使い、視野に含まれる可能性のある物体を選別し、その選別された物体に対してのみ評価を行うと処理が早く完了し、フレームレートを上げることができる。
【0102】
ステップS1402にて、未処理の評価物体を選び、未処理の評価物体が無くなるまで、ステップS1404〜S1406を繰り返す。
【0103】
ステップS1404では、評価物体が視線に交差するかを判別する。視線と物体の交差判定は、CG分野ではよく知られた計算方法であるため、簡単に説明する。
【0104】
物体(その情報は記憶手段204に記憶されている)はポリゴンから構成されているため、視線と物体の交差判定を行うには、物体を構成する全てのポリゴンにわたり、視線との交差判定を行えばよい。ポリゴンと視線の交差判定は三次元多角形と三次元直線の交差を判定すればよい。この多角形と直線の交差点の計算、または交差判定方法に関する計算方法は、数学的によく知られており説明は省略する。視線の幾何学的情報は位置センサの位置データ、または修正後の位置データから決まる。すなわち、位置データの位置情報から視線直線原点が決まり、位置データの回転情報から視線直線の方向が決まり、直線が特定される。
【0105】
なお、リアルタイムにCG画像を生成する場合は、レンダリングエンジンとよばれるCG画像生成専用のハードウェア、またはソフトウェアを利用する場合がほとんどであるが、そのようなレンダリングエンジンは通常、ポリゴンと視線の交差判定機能を備えている。よって、そのようなレンダリングエンジンの機能を利用して視線と物体の交差判定を行ってもよい。
【0106】
ステップS1404の交差判定の結果、評価物体が視線に交差しない場合は、ステップS1402に戻る。交差する場合は、その交差点と視点との距離を求め「新視点交差点間距離」とする。そして、「新視点交差点間距離」が「旧視点交差点間距離」より小さければ、「新視点交差点間距離」を新たに「旧視点交差点間距離」に設定し、現在の評価物体を「視線交差物体」に設定する。「新視点交差点間距離」が「旧視点交差点間距離」より大きければ何もせずステップS1402に戻る。
【0107】
ステップS1402において、未処理の評価物体が無くなるとステップS1407に進む。ステップS1407では、「視線交差物体」が存在しなければサブルーチンを終了し、存在すればステップS1408に進む。
【0108】
ステップS1408では、「視線交差物体」が低感度動作を適用する物体か、そうでないかを判別する。判別は、物体データに予め与えられた感度に関わる情報を基に行う。例えば、物体が文字の書かれたものである場合は、「低感度物体」という情報を、その物体データに予め与えておき、物体が文字の書かれたものでない場合は、「高感度物体」という情報をその物体データに予め与えておく。
【0109】
「視線交差物体」が低感度物体である場合に限り、ステップS1409において、「視線判別結果」の値を「低感度領域と交差あり」に設定しサブルーチンを終了する。
【0110】
以上、視線判別処理サブルーチンの説明を終わり、図7のフローチャートの説明に戻る。
【0111】
[感度切り替え処理]
図7におけるステップS1308の処理が終わると、その結果、すなわち図8の「視線判別結果」の値に基づき、ステップS1309の感度切り替え処理を行う。
【0112】
図9は感度切り替え処理(S1309)のサブルーチンを表すフローチャートである。
【0113】
感度の切り替えは、現在の「感度」変数が「低感度」、かつ「視線判別結果」が「低感度領域と交差なし」であった場合は、「感度」変数を高感度に設定する。また、現在の「感度」変数が「高感度」、かつ「視線判別結果」が「低感度領域と交差あり」であった場合は、「感度」変数を低感度に設定し、さらに平均化バッファ初期化処理を行う。なお、平均化処理として、位置センサコントローラ自体が持つ平均化処理機能を使う場合は、上記、「感度」変数の変更に応じて、コントローラに制御信号を送り動作モードを切り替える。すなわち、低感度から高感度への切り替え時には、動作モードを「平均化処理無効」に、高感度から低感度への切り替え時には、動作モードを「平均化処理有効」に切り替える。
【0114】
以上、感度切り替え処理サブルーチンの説明を終わり、図7のフローチャートの説明に戻る。
【0115】
[CG画像生成]
ステップS1309の感度切り替え処理が終わると、ステップS1310へ進み、CG画像生成に関わる処理を行う。CG画像生成の処理は視点設定を行う処理ステップS1310と、その視点設定に従ってCG画像を描画(レンダリング)する処理ステップS1311に分けることができるが、その処理内容は第1の実施形態で説明した図5と同様であるので、その説明は省略する。ただし、本第2の実施形態ではズームイン(拡大)は考慮していない(考慮しても構わない)ので、式6を除く、式1乃至式5に関する記載に則って行われる点に注意されたい。
【0116】
以上、カメラの位置、回転情報からワールド/カメラ座標変換を求める方法や、その座標変換を使ってCG画像の描画を行うと、図7のステップS1310に進むことになる。
【0117】
ステップS1310では、センサからの位置データを、前記ワールド/カメラ座標変換の計算方法で示した方法でワールド/カメラ座標変換に適用する。この時、カメラ/ワールド座標変換行列の回転行列は、位置データの三つのオイラー角それぞれについて式3の計算を行い、三つの行列を掛け算すればよい。また、位置データの並進成分は式2または式5の(Cx,Cy,Cz)として使用すればよい。ただし、並進成分に関しては、CG空間を表す論理的な長さ単位に適合するよう、適度なスケール変換を施して使用する。
【0118】
ステップS1311では、ステップS1310で設定されたワールド/カメラ座標変換を使い、図5で示したレンダリング処理を行う。
【0119】
そして、ステップS311が終わると、次のCG画像を生成すべく、ステップS1302にもどり、S1304からS1311までの一連の処理を繰り返ことになる。
【0120】
以上説明した処理によって、本第2の実施形態によれば、仮想空間におけるオブジェクト毎に、視点位置変化に対する感度が高い、低いという属性を予め与えておき、視線感度を、HMDによる視線と交差するオブジェクトに依存して決定することができるようになる。従って、仮想空間内の文字等が描かれたオブジェクトに低感度を示す情報を予め設定しておいた場合、そのオブジェクトが視野内にある限りは視点変化に鈍感なものとなり、容易に文字を読むことも可能となる。
【0121】
<第3の実施形態>
なお、上記第2の実施形態は、ユーザ視点変化への応答感度を、ユーザの視点変化応じて自動的に切り替えるものであった。しかし、応答感度の切り替えはユーザが意図的に切り替えるようにしてもよい。この場合を第3の実施形態として説明する。
【0122】
この場合、図7のステップS1308とS1309が削除され、代わりにステップS1303の位置に手動感度切り替え処理が加えられるようにする。図10は手動感度切り替え処理のサブルーチンを説明する図である。以下、手動感度切り替え処理についてのみ説明する。
【0123】
図10のステップS1701において、ユーザからのキーボード等から感度指定入力があった場合はS1702進み、入力がない場合は何もしない。ユーザの感度指定入力とは、ユーザが高感度動作、または低感度動作の要求を、キーボードやマウスなどの入力装置を利用して行うことである。従って、システム構成は、図1に示すように、ユーザ(HMDを装着するユーザ)は、手元に指示入力手段を持つようにする。
【0124】
ステップS1702以降は感度指定に応じた処理を行うわけであるが、その処理内容は第2の実施形態の感度切り替え処理(図9)にほとんど等しい。図9のステップS1501がステップS1702の判別処理に置き換わり、S1501の判別結果「低感度領域と交差あり」と「低感度領域と交差なし」が、S1702の判別結果「低感度指定」と「高感度指定」にそれぞれ置き換わるのみである。
【0125】
以上説明したように、各実施形態によれば、注視しようとする、もしくは注視されるべきオブジェクトに対しては、視点位置の感度を低くすることで、容易にそのオブジェクトの詳細や文字等を認識し得る環境を提供できるようになる。
【0126】
具体的には、第1の実施形態にしたがえば、HMDを介して見えるオブジェクトを拡大して見ることへの指示に連動して視点位置変化が鈍感になるので、操作者にとっては、そのオブジェクト(或いはその一部)が視野から外れるということが起こりにくくなる。
【0127】
また、第2の実施形態に従えば、仮想空間内に配置されるオブジェクトと視線とが交差する場合に、視点位置変化の感度がそのオブジェクトの属性に応じて自動的に切り換わることになり、例えば、オブジェクト上に文字が描かれている場合にあっては容易にその文字を認識することも可能になる。
【0128】
また、第3の実施形態によれば、仮想空間内におけるオブジェクトに対し、ユーザーが注視したいとの要求に応じて、視点位置の変化に対する感度を下げることで、そのオブジェクトを楽な姿勢で注視することが可能となる。
【0129】
なお、上記各実施形態を互いに組み合わせても構わない。例えば、第1、第2の実施形態を組み合わせると、高感度として設定されたオブジェクトを拡大すると自動的に、低感度状態にさせることもできるようなるし、ユーザの拡大しなくても、ユーザの指示によって低感度モードにして注視することも可能になる。
【0130】
また、上記各実施形態での説明から明らかなように、本発明は、HMD等の特定のハードウェアを必要とするものの、その主要処理はコンピュータ103によるソフトウェアでもって実現できる。従って、本発明はコンピュータプログラムをもその範疇とするものである。更に、通常、コンピュータプログラムはフロッピー(R)ディスクやCDROM等を可搬性のコンピュータ可読記憶媒体に格納されており、その媒体をコンピュータにセットしてコピー或いはインストールすることで実行可能となるわけであるから、かかるコンピュータ可読記憶媒体も本発明の範疇に含まれることは明らかである。
【0131】
【発明の効果】
以上説明したように本発明によれば、ヘッドマウントディスプレイを利用した仮想空間を体感するシステムにおいて、注視しようとする、もしくは注視されるべきオブジェクトに対し視点位置の感度を低くすることで、容易にそのオブジェクトの詳細を認識し得る環境を提供できるようになる。
【図面の簡単な説明】
【図1】実施形態の構成を表す概念図である。
【図2】実施形態に使用されるコンピュータ及びその周辺装置のブロック構成図である。
【図3】第1の実施形態のメイン処理手順を説明するフローチャートである。
【図4】第1の実施形態のズーム処理サブルーチンを説明するフローチャートである。
【図5】実施形態におけるCG計算の概要を表すフローチャートである。
【図6】投影条件と物体像の大きさの関係を表す概念図である。
【図7】第2の実施形態のメイン処理手順を説明するフローチャートである。
【図8】第2の実施形態の視線判別処理サブルーチンを説明するフローチャートである。
【図9】第2の実施形態における感度切り替え処理サブルーチンを示すフローチャートである。
【図10】第3の実施形態における感度切り替え処理サブルーチンを示すフローチャートである。
【発明の属する技術分野】
本発明はヘッドマウントディスプレイに3次元の仮想空間の像を表示させることで、仮想現実感を提供する画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体に関するものである。
【0002】
【従来の技術】
近年、コンピュータグラフィックス(以下CG)を利用して仮想現実感を提供するシステムが普及し始めている。そのような仮想現実感生成システムでは、仮想的な三次元空間の画像を、リアルタイムCGを使って生成することにより仮想現実感を実現している。CG画像の表示にヘッドマウントディスプレイ(以下HMD)を利用した方法は、臨場感のある仮想現実感を安価に実現できる方法として普及している。また、視点を検出するためのセンサをユーザに取り付け、視点変化をトラッキングし、その情報をCG画像生成時の視点情報に反映させれば、ユーザの視点変化に追従したCG画像を生成することができる。これによって、よりリアリティのある仮想現実感が提供できる。ユーザの視点情報を検出する方法には、磁気式位置センサを頭部に取り付け、頭部位置の運動をトラッキングする方法や、眼球画像を解析し眼球運動をトラッキングする方法、及びそれらを複合した方法などが知られている。
【0003】
【発明が解決しようとする課題】
前述のような仮想現実感生成システムでは、ユーザの視点変化に応答してCG計算の視点設定を変化させるわけであるが、このユーザ視点変化への応答は適度な感度を持たせて行う必要がある。なぜなら、ユーザ視点変化への応答感度が鈍感であるとユーザに不快感を与えるからである。また、頭部運動トラッキングの場合、ユーザは自分が見ようとする方向に頭を動かしても、その動作に応じた変化、すなわち現実世界で期待される視界の変化がHMD上の表示部に直ちに現れない。よって、一般には、視点運動への応答感度は敏感である方が好ましい。
【0004】
ところで、HMDを用いることでもって実空間では到底達成できないような体感をユーザーに与えることが可能になることに対しても着目したい。その一つとして、仮想空間におけるオブジェクトをズームインし(オブジェクトに対して空間的に接近する拡大ではなく、光学的に拡大するのと等価の拡大の場合)て見ることであろう。
【0005】
かかる機能を実現する場合にも、ユーザの視点変化に応答して、CGの視点設定を変更することになるが、ズームインした場合、すなわち、視点位置に応じた視野内にあるオブジェクトを拡大して生成し、それをHMDが備えるディスプレイ部に表示する場合、視点位置が多少変化しただけでも、着目したい、或いは着目しているオブジェクト(或いはその一部)が視野から外れる、或いは外れやすくなることである。ちょうど、望遠鏡を手で持って観察する場合、「手ぶれ」により、目的とする対象物が視界から外れる場合に似ている。これをHMDを用いた仮想空間に当てはめるのは、或る意味で現実感の再現するためと考えてもよいが、「手ぶれ」そのものは人間の意図に反するものである以上、仮想空間上ではむしろ再現しない方が良い。
【0006】
以上はズームイン機能と視点運動の応答感度との対応で述べたが、ズームインを除外した視点運動の応答感度に起因する問題点も存在する。
【0007】
例えば、ユーザが仮想空間中に置かれた「看板」等の文字情報を注視した場合、ユーザ視点変化への応答感度が敏感であると、頭部の微小運動によって画像がぶれ、文字情報が読み取り難い。視点変化に敏感であっても、その変化検出の精度が人間ほど高くないし、描画速度(フレーム数/単位時間)にも限界があることが、その大きな理由である。
【0008】
以上のように、HMDを用いる場合、本来はユーザの視点検出の感度が高いことが望ましいものの、場合によっては逆にそれがマイナス要因となることが理解できよう。
【0009】
本発明はかかる問題点に鑑みなされたものであり、その目的とするところは、ヘッドマウントディスプレイを採用し、仮想空間の像を視点変化に応じてCG技術により生成する際、視点変化の応答感度を少なくとも2種類持たせることで、仮想現実感をより快適なものとすることを可能ならしめる画像処理装置及び方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体を提供しようとするものである。
【0010】
【課題を解決するための手段】
かかる課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、
ユーザに装着するためのヘッドマウントディスプレイに、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置であって、
ユーザの前記視点位置を、互いに異なる感度で検出する複数の視点位置検出手段と、
前記複数の視点位置検出手段のいずれかを選択する選択手段とを備える。
【0011】
【本発明の実施の形態】
以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
【0012】
<第1の実施形態>
仮想現実感生成システムでは、ユーザの視点変化に応答してCG計算の視点設定を変化させる。この時、ユーザ視点変化への応答は適度な感度を持たせて行う必要がある。ここで、ユーザ視点変化への応答感度が鈍感であると、ユーザに不快感を与える。例えば、頭部運動トラッキングの場合、ユーザが、自分が見ようとする方向に頭を動かした場合、もし、応答感度が鈍感であると、その動作に応じた変化、すなわち現実世界で期待される視界の変化がHMD上に直ちに現れなくなる。これでは、仮想現実感の質が低下させるだけである。従って、通常の表示においてが、ユーザ視点変化への応答感度は敏感である方が好ましい。
【0013】
ところが、前述したズーム機能を実現した場合、ズームイン(拡大)した状態では、ユーザ視点変化への応答感度が敏感であると、逆に、これが問題になる。何故なら、ズームイン状態では、視点の微小な運動が拡大され視界がぶれるからである。すなわち、現実世界で望遠鏡を見た場合の「手ぶれ」に相当する状況が発生する。
【0014】
この「手ぶれ」現象自体も現実感の再現と考えることもできるが、通常、ユーザが物体にズームイン(光学的な拡大である)を行うというのは、その物体を詳細に観察したいという意志の現れである。したがって、ズームイン状態では「手ぶれ」を抑えるよう動作させることがユーザにとっては好ましい。「手ぶれ」を抑えるためには、ユーザ視点変化への応答感度を鈍くする必要がある。よって、ズームイン状態ではユーザ視点変化への応答感度を鈍くした方が好ましい。
【0015】
このように、ユーザ視点変化への応答感度はユーザが通常観察をしているか拡大観察をしているかに応じて決める必要がある。
【0016】
ところが、これまでの仮想現実感生成システムでは、ユーザ視点運動への応答感度が常に一定であり、上記のようなズームインに適用させることはできない。そこで、本実施形態では、かかる問題点を解決すること、換言すれば、ユーザ視点変化への応答感度を通常観察か拡大観察かに応じて切り替え、それに基づくCG画像生成を行うことにより、ユーザの体感する仮想現実感をより快適なものにすることに成功する例を説明する。
【0017】
以下、本発明の第一の実施形態について図1〜図6を用いて説明する。
【0018】
[全体構成]
図1は本実施形態の装置構成の概念図である。
【0019】
コンピュータ103はCG画像を生成し、その映像はヘッドマウントディスプレイ(HMD)101に出力される。ユーザはHMD101を装着し、HMD101内に設けられたディスプレイを介して、コンピュータ103から出力される映像を見ることで、仮想空間として体験することになる。この時、ユーザは手元に置かれたキーボード106、または何らかのコントローラを操作し、必要に応じて拡大観察を行う。
【0020】
本実施形態では、ユーザの視点(位置、方向)を検知する方法として、頭部位置変化を磁気式位置センサによって検知する方法を用いる。磁気式位置センサは製品(例えば、ポヒマス社製品など)が存在し、公知の機器であるため詳細な説明は省略する。磁気式位置センサは磁場を生成するトランスミッタ105、誘導電流を検出するレシーバ102、および制御用のコントローラ104から構成される。レシーバはユーザの頭部に装着され、トランスミッタはレシーバとの相対位置を考慮して、適度な位置に配置される。レシーバには、トランスミッタに対するレシーバの相対変位に応じた電流が発生し、コントローラではこれを解析し、位置データを算出する。コントローラはコンピュータに接続され、位置データがコンピュータに送られる。コントローラとコンピュータ間のデータ通信にはシリアル通信が用いられる。以後、頭部位置検出用磁気式位置センサを単に位置センサとよぶ。
【0021】
なお、ユーザの視点変化の検出方法は磁気式位置センサに限らずとも、超音波センサや光センサで頭部位置の検出を行ってもよい。また、眼球画像の解析によって眼球運動を検出し、視点変化を検出する方法や、眼球運動検出法と頭部位置検出法の両方を組み合わせても構わないので、上記例に限定されるものではない。
【0022】
[コンピュータの構成]
図2は本実施形態に使われるコンピュータ103の構成を示したものである。コンピュータ103の記憶装置204には、本実施形態の仮想現実感を生成するためのプログラムが格納される。また、仮想空間を構成する三次元空間における物体データ等もコンピュータの記憶装置204に格納される。この三次元物体データとは、頂点座標情報と、各頂点の連結によって定義されるポリゴン情報から構成されるデータである。記憶装置204に格納されたプログラムはコンピュータのCPU202によって実行され、画像メモリ205にCG画像が生成される。ただし、最近のコンピュータでは、CG画像をCPUによってのみ生成するのではなく、専用のハードウェア(ハードウェアT&Lのグラフィックエンジンプロセッサ等)を併用して生成する場合が多い。206はそのようなCG画像生成専用のハードウェアである。画像メモリ205に生成されたCG画像は、コンピュータに接続されたHMD101に出力される。コンピュータには周辺機器としてキーボード106やマウス209が接続され、ユーザとコンピュータの対話に利用される。コンピュータのシリアル通信装置203には位置センサのコントローラ104が接続され、位置センサからの位置データがコンピュータに取り込まれる。
【0023】
実施形態では、キーボード106は、図1に示したように、HMD101を装着するユーザが拡大率を入力する手段として用いるものとしている。ただし、一般に、コンピュータの入力デバイスとして用いられるキーボードのような多数のキーが設けられる必要はなく、数種類(拡大率の大小を設定するので少なくとも2つ程度)でよい。また、キーボードとコンピュータとは、有線で通信するものとしているが、その間のケーブルが邪魔になることを考えれば、無線で通信するようにしてもよい。要するに、ズームイン<−>ズームアウトの操作が簡便にできることが望ましい。
【0024】
[処理手順の説明]
以下、図3乃至図4のフローチャートは本実施形態の処理手順を説明する。
【0025】
図3は本実施形態の処理手順を表すメインのフローチャートである。
【0026】
処理全体にわたり使用する変数として、現在の感度設定を記憶する「感度」変数、観察対象の拡大率を表す「拡大率」変数を用意する。これら変数は、不図示のRAMに予め確保されるものである。
【0027】
プログラムが開始されると、ステップS301の初期化処理を行い、ステップS302において終了要求が発生するまで、ステップS303からステップS308までの処理を繰り返す。ステップS302における終了要求とは、ユーザがキーボードやマウスを使ってプログラムの終了を要求すること行われる。
【0028】
ステップS303からステップS308までの処理が一フレーム分(一時刻分)のCG画像生成の処理単位である。この処理単位が繰り返されることによって、ユーザ視点に応じてリアルタイムに変化する仮想空間の映像が生成される。
【0029】
ステップS301の初期化処理では、「感度」変数を「高感度」に設定し、平均化バッファ初期化処理を行う。平均化バッファ初期化処理の説明は後述の平均化処理にて行う。「拡大率」変数の値は「1」に設定する。なお、ここで言う「1」は、実空間との差がないことを示すもので「等倍」に相当するものである。
【0030】
ステップS304では、ズーム操作処理を行う。図4はこのズーム操作処理のサブルーチンを示している。図3のメインフローチャートから、図4のズーム操作処理サブルーチンが繰り返し呼ばれることによって、ズーム操作が行われる。まず、キーボード106の特定のキー(ズームインキーとする)が初めて押された瞬間、拡大観察が開始される。この時、「感度」変数を低感度に変更し(ステップS403)、平均化バッファ初期化処理を行い(ステップS404)、拡大率を増加させる(ステップS405)。以後、ズームキーが押され続けている間は、ステップS403、S404はスキップされ、拡大率の増加が行われる。拡大率には最大値(リミッタ)が設定されており、この最大値を越えた場合は最大値に固定する(ステップS407)。ズームキーが初めて離された瞬間、拡大観察を止め通常観察に戻る。この時、「感度」変数を高感度に設定し(ステップS409)、拡大率を「1」に戻す(ステップS410)。
【0031】
さて、ステップS304では、位置センサコントローラから送られてくる位置データを読み取る。位置データが無い場合、視点変更に関わる処理を全てスキップし、ステップS308に進んでCG画像描画処理を行う。視点変化が無い場合(位置データが無い場合)にも、CG画像を再描画する理由は、例えば、物体をアニメーションさせるような場合、CG画像の変更要因が視点変化以外にも存在するからである。もし、視点変化以外にCG画像の変更要因が無い場合は、CG画像描画処理もスキップしてよい。すなわち、ステップS305からステップS302に戻ってよい。
【0032】
位置センサコントローラから送られてくる位置データのデータパケットには、位置センサレシーバのトランスミッタに対する変位情報が記され、次の6成分のデータが順番に並んでいる。
【0033】
レシーバのトランスミッタに対する並進成分のX座標、Y座標、およびZ座標、レシーバのトランスミッタに対する回転を表す第一回転角、第二回転角、および第三回転角である。ただし、この三つの回転角は、X軸、Y軸、およびZ軸周りのオイラー角で表現される。
【0034】
ステップS306では、現在の「感度」変数の値を調べ、「高感度」の場合は何もせずステップS308に進み、「低感度」の場合はステップS307の平均化処理を行い、位置データを修正した後、ステップS308に進む。
【0035】
平均化処理は位置データの持つ時間的高周波成分を落とし、視点変化への応答感度を下げることである。それ故、「低感度」が設定されている場合には、現在の上記6成分のデータを含め、過去n回のデータの平均値を算出するようにする(そのため、過去のn回分のデータを記憶保持するようにする)。
【0036】
位置センサコントローラ自体が平均化処理の機能を持つようにしても良い。位置センサコントローラの平均化機能を使う場合、コントローラの出力データは、平均化済みデータ、または直接データどちらかなので、ステップS306、307はスキップしてよい。その代わり、「感度」変数を「低感度」、または「高感度」へ切り替える処理に対応して、コントローラの動作モードを「平均化処理有効」、または「平均化処理無効」にそれぞれ切り替える。
【0037】
[平均化処理]
ここで、ステップS307にて行われる平均化処理の説明を行う。
【0038】
位置データの平均化は、並進、回転の6成分それぞれについて、過去に蓄積された複数のデータを平均化することによって行う。この平均化処理は各6成分について同様であるので、特定の一成分についてのみ説明する。
【0039】
過去のデータを蓄積するためには蓄積用バッファを設けておく。このバッファは終端を先端につないだ、いわゆるリングバッファ構造を持つ。これに加え、データの蓄積数を表す変数「データ蓄積数」と、最新のデータがリングバッファの何処に置かれているかを示す変数である「最新データインデックス」を設ける。平均化にはN個のデータを使用するものとする。このNを大きくとることによって感度は下がり、逆に小さくとれば感度が上がる。Nは希望の感度が得られるよう適度な値にとればよい。蓄積用リングバッファはN個のデータを保持する大きさを持つ。
【0040】
図3のステップS301の初期化処理、または後述の感度切り替えサブルーチンから呼ばれる平均化バッファ初期化処理では、「データ蓄積数」を「0」に設定し、また「最新データインデックス」がバッファの先頭を指すように設定する。
【0041】
平均化処理は次のように行われる。
【0042】
まず、最新のデータが入力されると、「データ蓄積数」がゼロでない場合に限り、「最新データインデックス」を、現在指しているデータの次のデータを指すように変える。ただし、この変更で「最新データインデックス」がバッファの末尾以降を指す場合は、バッファの先頭を指すように変更する。次に、「最新データインデックス」の指す位置にデータを書き込み、さらに、「データ蓄積数」がNに満たない場合に限り「データ蓄積数」を一増やす。次に、リングバッファの「最新データインデックス」の指す位置から、「データ蓄積数」分のデータをリングバッファ逆方向に向けて読み出し、それらの平均値を求める。そして、求めた平均値を低感度モードでの修正されたデータと見なす。以上の処理を位置データの6成分全てにわたって行い、位置データを修正する。
【0043】
以上、平均化処理の説明を終わり、図3のフローチャートの説明に戻る。
【0044】
[CG画像生成]
ステップS308では、CG画像生成に関わる処理を行う。リアルタイムにCG画像を生成する場合、通常、レンダリングエンジンとよばれるCG専用のハードウェア、またはソフトウェアを利用することが多い。本実施形態でもそのようなレンダリングエンジンを使用する。その場合、CG画像生成の処理は、レンダリングエンジンに対する動作設定の処理と、レンダリングエンジンによる描画処理の実行によって行われる。
【0045】
ここで、CG画像生成における描画方法と視点設定の方法について概要を説明しておく。図6は、CG計算により三次元物体データを二次元画像化、すなわち可視化する方法を示している。CG計算のアルゴリズムは複数存在するが、ここではリアルタイムレンダリングとよばれる分野で広く用いられているポリゴン単位の計算方法(以降、ポリゴンレンダリング)を取り上げる。ポリゴンレンダリングは、物体を構成する(または定義する)各ポリゴンに対し、図5に示したステップS502〜505の工程を施すことによって行われる。
【0046】
まず、絶対的空間、いわゆるワールド座標系に配置されたポリゴンデータを取得し(ステップS501)、視点に相対な空間、いわゆるカメラ座標系に変換する(ステップS502)(この変換を以後、ワールド/カメラ座標変換とする)。なお、ここで言う「カメラ座標系」が物理的なカメラを有することを意味するものではなく、仮想的な視点位置にカメラを設置したと仮定することを意味するものである。実施形態の場合、HMDがユーザの視点位置でもあるので、ここで言うカメラ座標系はHMDから見た座標系と言っても良いであろう。
【0047】
続いて、ポリゴンに陰影を付けるための照明計算を行う(ステップS1503)を行う。
【0048】
続いて、三次元座標から二次元座標への投影変換と画素座標へのマッピング(ステップS1504)を行う。この時、ポリゴンの三次元座標には投影行列による変換が施され、視体積へのクリッピングと投影処理が行われる。また、ビューポート変換によって投影面上の座標が実際の描画画素座標へマッピングされる。
【0049】
最後に、ポリゴン像の塗りつぶし、すなわちラスタライズ処理(ステップS1505)を施し、最終的にポリゴンのレンダリング画像を得、表示のために出力する(ステップS506)。
【0050】
これらの各工程の内容は広く知られたものであり、また、レンダリングエンジンによって実行されるものであるため、本発明の視点変更や画像拡大に関わる部分以外、詳細な説明は省略する。
【0051】
レンダリングエンジンによって描画を行う場合、レンダリングエンジンに対する動作設定を描画に先立ち行い、その後、レンダリングエンジンに描画を実行させる。本発明に関わるレンダリングエンジンへの動作設定は次の二つである。
・動作設定1:
ステップS502の計算を定義するワールド/カメラ座標変換の設定。これによって、CG画像の視点の変更が実現される。
・動作設定2:
ステップS504の投影変換を定義する射影行列とビューポート変換の設定。これによって、CG画像の視野角の変更が実現される。
【0052】
まず、「動作設定1」のワールド/カメラ座標変換の変更について説明する。
【0053】
CGの一般的な考え方では、先に説明したように、レンダリング視点を決める要因を、実世界のメカニズムと対応させ、カメラという概念で表現する。ワールド座標系からカメラ座標系への座標変換は、ワールド座標系にカメラ(カメラ座標系)がどのように配置されているか、という情報で表現できる。カメラの配置はカメラの位置と回転によって表現できる。よって、ワールド/カメラ座標変換は希望する視点に置かれたカメラの位置と回転情報から計算される。
【0054】
[ワールド/カメラ座標変換の計算方法]
ワールド/カメラ座標変換は通常、同次座標を用いて表される。すなわち、ワールド座標系の任意の一点(x, y, z,1)は、ワールド/カメラ座標変換によって、対応するカメラ座標系の一点(x’, y’, z’,1)に変換され、式1のように表すことができる。式1の、m11〜m33の3×3部分行列は回転成分を表しており、この部分をRwcとする。また、式1のTx、Ty、Tzは並進成分を表している。
【0055】
【数1】
【0056】
ワールド/カメラ座標変換の逆変換である、カメラ座標系からワールド座標系への変換、すなわちカメラ/ワールド座標変換も式1と同様な形式として、式2で表すことができる。ここで、式2のRcwはワールド座標におけるカメラの回転を表しており、(Cx,Cy,Cz)はカメラの位置を表している。
【0057】
【数2】
【0058】
カメラの位置と回転情報からワールド/カメラ座標変換を計算するには、一旦、カメラ/ワールド座標変換を求め、その逆変換を求めることによって行う。通常、カメラの回転は、ワールド座標で表現される回転軸とその周りの回転の回転角で表現される。今、回転軸を(X,Y,Z)とし、回転角をθラジアンとすると、カメラ/ワールド座標変換行列の回転成分Rcwは、式3で計算される。カメラの回転が複数の回転の合成である場合は、個々の回転に対応した式3の行列を全て掛け合わせればよい。
【0059】
【数3】
【0060】
式3のワールド/カメラ座標変換行列のRwcは、Rcwの逆行列として求まるが、ここではRcwが回転成分しか持たないので、単にRcwの転置行列をRwcとすればよい。すなわち、式4でRwcが求まる。
【0061】
【数4】
【0062】
Rwcが求まれば、ワールド座標におけるカメラの位置(Cx,Cy,Cz)から、式1のTx、Ty、Tzが式5によって求められる。
【0063】
【数5】
【0064】
次に、「動作設定2」の画像拡大に関わる投影変換の変更について説明する。
【0065】
三次元空間から二次元投影面への投影変換が射影行列によって決められる。射影行列は、式1と同様、4次同次座標に作用する4×4の行列として次のように定義される。
【0066】
【数6】
【0067】
ここで、rは投影面右端のX座標、lは投影面左端のX座標、tは投影面上端のY座標、bは投影面下端のY座標、nは近クリップ面のZ座標、およびfは遠クリップ面のZ座標を表す。また、投影面の幅wと高さhは式6のr、l、t、bとそれぞれ次の関係にある。
w=r−l
h=t−b
本実施形態では、通常よく行われるように、視体積ピラミッドを視軸に関して対称にとる。すると、式6のr、l、t、bは単純に投影面の幅wと高さhから次のように決まる。
r= w÷2 (式7)
l=−w÷2
t= h÷2
b=−h÷2
なお、式6のfとnは視野の深度方向の領域を、希望する程度に制限するよう適度な値に設定すればよい。
【0068】
一方、ビューポート変換は投影面がどのように画像にマッピングされるかを定義するものであり、希望する画像領域の縦横の大きさを指定することによって設定が行われる。本発明では表示される画像領域の大きさは固定にするので、ビューポート変換の設定はプログラム開始時に一度設定すればよい。画像領域の大きさは適度な大きさにとればよい。
【0069】
CG画像自体の大きさは固定であるが、射影行列の視野角に関連する部分を変更することによって、CG画像の描画対象を拡大することができる。図6はこの状況を説明する概念図である。図6の上段には、異なる視野角での投影処理を上から見た図を示してある。図6の中段、下段には視野角の大きい場合と小さい場合の投影像をそれぞれ示してある。図6からわかるように、投影面の幅wと高さhを縮小することにより、描画対象の画像が拡大される。
【0070】
描画対象の拡大を表すパラメータをM(M≧1)とし、通常サイズの画像を得る場合の投影面の幅と高さが、それぞれw0、h0であったとする。この時、描画対象をM倍程度に拡大するには、次の式8によりr、l、t、bを決め、式6の射影行列を設定すればよい。
r= w0÷M÷2 (式8)
l=−w0÷M÷2
t= h0÷M÷2
b=−h0÷M÷2
以上、カメラの位置、回転情報からワールド/カメラ座標変換を変更する方法と、視界画像の拡大率に応じて投影行列を変更する方法を説明した。
【0071】
再び、図3のフローチャートの説明に戻る。
【0072】
ステップS308では、まず、センサからの位置データに基づき、前記、ワールド/カメラ座標変換の計算方法で示した方法でワールド/カメラ座標変換を計算し、レンダリングエンジンに適用する。この時、カメラ/ワールド座標変換行列の回転行列は、位置データの三つのオイラー角それぞれについて式3の計算を行い、三つの行列を掛け算すればよい。また、位置データの並進成分は式2または式5の(Cx,Cy,Cz)として使用すればよい。ただし、並進成分に関しては、CG空間を表す論理的な長さ単位に適合するよう、適度なスケール変換を施して使用する。
【0073】
続いて、現在設定されている「拡大率」を式8のMとし、式8と式6により射影行列を求めレンダリングエンジン適用する。最後にレンダリングエンジンによる描画を実行し、レンダリング画像を得る。ステップS308における描画処理が終わると、次のCG画像を生成すべく、ステップS302にもどりステップS303〜S308までの一連の処理を繰り返す。
【0074】
以上説明したように本実施形態によれば、HMDを用いる場合、操作者の視点位置変化に敏感に応答するモードと、それより鈍感にするモードを、ズームインするか否かに応じて切り替えることにより、より快適な仮想現実感をユーザに与えることが可能となる。
【0075】
なお、上記実施形態では、視点位置変化に対する感度を2種類とし、ズームインする/しないの2状態に対応づける例を説明したが、ズームイン倍率及び視点位置変化に対する感度をそれぞれ多段階にし、各ズーム倍率に応じて視点位置変化に対する感度を調整するようにしても良い。
【0076】
最新の視点位置に関する情報を仮にF0(上記のように6つのデータで構成される)とし、時間的にN回前のタイミングでのデータをFNと表現し、感度を示す変数Mを定義したとき、F0〜FMの加算平均を算出するようにすればよい。すなわち、拡大率に応じて変化する、或いは、変化するように設定する変数Mを定義し、時系列に得られる視点位置データの、変数Mで示される個数の平均値を採用することで、感度を調整する。この場合、Mの値が小さいほど感度が高い、換言すれば、Mの値が大きいほど感度が低いことを示すことになる。
【0077】
なお、位置センサコントローラ104が、制御指示コマンドに与えることで、視点変化の応答感度を変化させる手段を有する場合には、それを採用することで実現できるので、上記実施形態によって本発明が限定されるものではない。
【0078】
また、場合によっては、1つの共通な位置センサコントラを活用するのではなく、ユーザに、感度が異なる複数の視線位置装置を装着するようにしても構わないであろう。
【0079】
ただし、ユーザに装着する装置は少ないほうが良いし、感度が固定の既存の位置センサコントローラを使用することを考慮すれば、上の如く、単純な平均算出処理で実現するとコスト的に有利である。
【0080】
以上説明したように、本第1の実施形態によれば、視点追従型の仮想現実感を生成する場合において、拡大観察時に追従感度が適切に設定された快適な仮想現実感を提供することが可能になる。
【0081】
<第2の実施形態>
上記第1の実施形態では、ズームインに応じて視点位置の応答感度を調整するものであったが、倍率が固定の場合であっても、その応答感度が高いことに起因する問題点がある。それは、例えば、仮想空間内に「看板」等が表示されている場合において、それを注視する場合である。ユーザの視点位置の変化に対して感度が高いと、ユーザの頭部の微小運動に応じて画像がぶれてしまい、文字情報が読みにくくなる。
【0082】
そこで、本第2の実施形態では、これを解決する例を説明する。なお、説明を簡単なものとするため、システムの構成及びコンピュータの構成は、上記の第1の実施形態における図1、図2と同様であるものとし、その説明は省略する。また、基本的には、第1の実施形態と同様、視点位置変化に対する感度を変更するものであり、重複する部分も存在するが、動作や処理手順についてはその重複部分を省略せず、改めて説明することとする。また、後述するように、本第2の実施形態の場合、HMDを使用中、そのユーザはキーボード108を操作する必要がない。
【0083】
[処理手順の説明]
図7〜図10のフローチャートは本第2の実施形態の処理手順を表している。以下、同図を用いて本第2の実施形態の処理手順を説明する。
【0084】
図7は本第2の実施形態の処理手順を表すメインのフローチャートである。
【0085】
プログラムが開始されると、ステップS1301の初期化処理を行い、ステップS1302において終了要求が発生するまで、ステップS1304からS1311までの処理を繰り返す。ステップS1302における終了要求とは、ユーザがキーボードやマウスを使ってプログラムの終了を要求することである。
【0086】
ステップS1304からS1311までの処理が一フレーム分(一時刻分)のCG画像生成の処理単位である。この処理単位が繰り返されることによって、ユーザ視点に応じてリアルタイムに変化する仮想空間の映像が生成される。
【0087】
ステップS1301の初期化処理では、「感度」変数を「高感度」に設定し、平均化バッファ初期化処理を行う。平均化バッファ初期化処理の説明は後述の平均化処理で行う。
【0088】
ステップS1304では、位置センサコントローラから送られてくる位置データを読み取る。位置データが無い場合、視点変更に関わる処理を全てスキップし、ステップS1311に進んでCG画像描画処理を行う。視点変化が無い場合(位置データが無い場合)にも、CG画像を再描画する理由は、例えば、物体をアニメーションさせるような場合、CG画像の変更要因が視点変化以外にも存在するからである。もし、視点変化以外にCG画像の変更要因が無い場合は、CG画像描画処理もスキップしてよい。すなわち、ステップS1305からS1302に戻ってよい。
【0089】
位置センサコントローラから送られてくる位置データのデータパケットには、位置センサレシーバのトランスミッタに対する変位情報が記され、次の6成分のデータが順番に並んでいる。
【0090】
すなわち、レシーバのトランスミッタに対する並進成分のX座標、Y座標、およびZ座標、レシーバのトランスミッタに対する回転を表す第一回転角、第二回転角、および第三回転角である。ただし、この三つの回転角は、X軸、Y軸、およびZ軸周りのオイラー角で表現される。
【0091】
ステップS1306では、現在の「感度」変数の値を調べ、「高感度」の場合は何もせずステップS1308に進み、「低感度」の場合はステップS1307の平均化処理を行い、位置データを修正した後ステップS1308に進む。
【0092】
平均化処理は位置データの持つ時間的高周波成分を落とし、視点変化への応答感度を下げることである。位置センサコントローラ自体が平均化処理の機能を持つ場合もある。その場合は、コントローラが出力するデータは、既に平均化されたもの、または平均化されていないものどちらかなので、ステップS1306、1307はスキップしてよい。その代わり、後述のステップS1309の「感度切り替え処理」において、コントローラの動作モードを「平均化処理有効」、または「平均化処理無効」のどちらかに切り替える。
【0093】
[平均化処理]
ここで、ステップS1307にて行われる平均化処理の説明を行う。
【0094】
位置データの平均化は、並進、回転の6成分それぞれについて、過去に蓄積された複数のデータを平均化することによって行う。この平均化処理は各6成分について同様であるので、特定の一成分についてのみ説明する。
【0095】
過去のデータを蓄積するためには蓄積用バッファを設けておく。このバッファは終端を先端につないだ、いわゆるリングバッファ構造を持つ。これに加え、データの蓄積数を表す変数「データ蓄積数」と、最新のデータがリングバッファの何処に置かれているかを示す変数である「最新データインデックス」を設ける。平均化にはN個の視点位置データを使用するものとする。このNを大きくとることによって感度は下がり、逆に小さくとれば感度が上がる。Nは希望の感度が得られるよう適度な値にとればよい。蓄積用リングバッファはN個のデータを保持する大きさを持つ。
【0096】
図7のステップS1301の初期化処理、または後述の感度切り替えサブルーチンから呼ばれる平均化バッファ初期化処理では、「データ蓄積数」を「0」に設定し、また「最新データインデックス」がバッファの先頭を指すように設定する。具体的な、平均化処理は次のように行われる。
【0097】
まず、最新のデータが入力されると、「データ蓄積数」がゼロでない場合に限り、「最新データインデックス」を、現在指しているデータの次のデータを指すように変える。ただし、この変更で「最新データインデックス」がバッファの末尾以降を指す場合は、バッファの先頭を指すように変更する。次に、「最新データインデックス」の指す位置にデータを書き込み、さらに、「データ蓄積数」がNに満たない場合に限り「データ蓄積数」を一増やす。次に、リングバッファの「最新データインデックス」の指す位置から、「データ蓄積数」分のデータをリングバッファ逆方向に向けて読み出し、それらの平均値を求める。そして、求めた平均値を低感度モードでの修正されたデータと見なす。以上の処理を位置データの6成分全てにわたって行い、位置データを修正する。
【0098】
以上、平均化処理の説明を終わり、図7のフローチャートの説明に戻る。
【0099】
ステップS1308では、位置センサから取得した位置データ、または修正された位置データを用い視線判別処理を行う。ここで、図8を用いて視線判別処理の説明を行う。図8は視線判別処理のサブルーチンを表すフローチャートである。
【0100】
ステップS1401の初期化処理では、まず、「視線判別結果」変数の値を「低感度領域と交差なし」に初期化しておく。また「旧視点交差点間距離」変数の値を十分大きな値に設定しておく。
【0101】
ステップS1402以降の処理では、三次元空間中に含まれる物体全てにわたり、視線交差に関する評価を行う。ただし、空間中に含まれる全ての物体を評価しなくとも、いわゆるオクトツリーなどの方法を使い、視野に含まれる可能性のある物体を選別し、その選別された物体に対してのみ評価を行うと処理が早く完了し、フレームレートを上げることができる。
【0102】
ステップS1402にて、未処理の評価物体を選び、未処理の評価物体が無くなるまで、ステップS1404〜S1406を繰り返す。
【0103】
ステップS1404では、評価物体が視線に交差するかを判別する。視線と物体の交差判定は、CG分野ではよく知られた計算方法であるため、簡単に説明する。
【0104】
物体(その情報は記憶手段204に記憶されている)はポリゴンから構成されているため、視線と物体の交差判定を行うには、物体を構成する全てのポリゴンにわたり、視線との交差判定を行えばよい。ポリゴンと視線の交差判定は三次元多角形と三次元直線の交差を判定すればよい。この多角形と直線の交差点の計算、または交差判定方法に関する計算方法は、数学的によく知られており説明は省略する。視線の幾何学的情報は位置センサの位置データ、または修正後の位置データから決まる。すなわち、位置データの位置情報から視線直線原点が決まり、位置データの回転情報から視線直線の方向が決まり、直線が特定される。
【0105】
なお、リアルタイムにCG画像を生成する場合は、レンダリングエンジンとよばれるCG画像生成専用のハードウェア、またはソフトウェアを利用する場合がほとんどであるが、そのようなレンダリングエンジンは通常、ポリゴンと視線の交差判定機能を備えている。よって、そのようなレンダリングエンジンの機能を利用して視線と物体の交差判定を行ってもよい。
【0106】
ステップS1404の交差判定の結果、評価物体が視線に交差しない場合は、ステップS1402に戻る。交差する場合は、その交差点と視点との距離を求め「新視点交差点間距離」とする。そして、「新視点交差点間距離」が「旧視点交差点間距離」より小さければ、「新視点交差点間距離」を新たに「旧視点交差点間距離」に設定し、現在の評価物体を「視線交差物体」に設定する。「新視点交差点間距離」が「旧視点交差点間距離」より大きければ何もせずステップS1402に戻る。
【0107】
ステップS1402において、未処理の評価物体が無くなるとステップS1407に進む。ステップS1407では、「視線交差物体」が存在しなければサブルーチンを終了し、存在すればステップS1408に進む。
【0108】
ステップS1408では、「視線交差物体」が低感度動作を適用する物体か、そうでないかを判別する。判別は、物体データに予め与えられた感度に関わる情報を基に行う。例えば、物体が文字の書かれたものである場合は、「低感度物体」という情報を、その物体データに予め与えておき、物体が文字の書かれたものでない場合は、「高感度物体」という情報をその物体データに予め与えておく。
【0109】
「視線交差物体」が低感度物体である場合に限り、ステップS1409において、「視線判別結果」の値を「低感度領域と交差あり」に設定しサブルーチンを終了する。
【0110】
以上、視線判別処理サブルーチンの説明を終わり、図7のフローチャートの説明に戻る。
【0111】
[感度切り替え処理]
図7におけるステップS1308の処理が終わると、その結果、すなわち図8の「視線判別結果」の値に基づき、ステップS1309の感度切り替え処理を行う。
【0112】
図9は感度切り替え処理(S1309)のサブルーチンを表すフローチャートである。
【0113】
感度の切り替えは、現在の「感度」変数が「低感度」、かつ「視線判別結果」が「低感度領域と交差なし」であった場合は、「感度」変数を高感度に設定する。また、現在の「感度」変数が「高感度」、かつ「視線判別結果」が「低感度領域と交差あり」であった場合は、「感度」変数を低感度に設定し、さらに平均化バッファ初期化処理を行う。なお、平均化処理として、位置センサコントローラ自体が持つ平均化処理機能を使う場合は、上記、「感度」変数の変更に応じて、コントローラに制御信号を送り動作モードを切り替える。すなわち、低感度から高感度への切り替え時には、動作モードを「平均化処理無効」に、高感度から低感度への切り替え時には、動作モードを「平均化処理有効」に切り替える。
【0114】
以上、感度切り替え処理サブルーチンの説明を終わり、図7のフローチャートの説明に戻る。
【0115】
[CG画像生成]
ステップS1309の感度切り替え処理が終わると、ステップS1310へ進み、CG画像生成に関わる処理を行う。CG画像生成の処理は視点設定を行う処理ステップS1310と、その視点設定に従ってCG画像を描画(レンダリング)する処理ステップS1311に分けることができるが、その処理内容は第1の実施形態で説明した図5と同様であるので、その説明は省略する。ただし、本第2の実施形態ではズームイン(拡大)は考慮していない(考慮しても構わない)ので、式6を除く、式1乃至式5に関する記載に則って行われる点に注意されたい。
【0116】
以上、カメラの位置、回転情報からワールド/カメラ座標変換を求める方法や、その座標変換を使ってCG画像の描画を行うと、図7のステップS1310に進むことになる。
【0117】
ステップS1310では、センサからの位置データを、前記ワールド/カメラ座標変換の計算方法で示した方法でワールド/カメラ座標変換に適用する。この時、カメラ/ワールド座標変換行列の回転行列は、位置データの三つのオイラー角それぞれについて式3の計算を行い、三つの行列を掛け算すればよい。また、位置データの並進成分は式2または式5の(Cx,Cy,Cz)として使用すればよい。ただし、並進成分に関しては、CG空間を表す論理的な長さ単位に適合するよう、適度なスケール変換を施して使用する。
【0118】
ステップS1311では、ステップS1310で設定されたワールド/カメラ座標変換を使い、図5で示したレンダリング処理を行う。
【0119】
そして、ステップS311が終わると、次のCG画像を生成すべく、ステップS1302にもどり、S1304からS1311までの一連の処理を繰り返ことになる。
【0120】
以上説明した処理によって、本第2の実施形態によれば、仮想空間におけるオブジェクト毎に、視点位置変化に対する感度が高い、低いという属性を予め与えておき、視線感度を、HMDによる視線と交差するオブジェクトに依存して決定することができるようになる。従って、仮想空間内の文字等が描かれたオブジェクトに低感度を示す情報を予め設定しておいた場合、そのオブジェクトが視野内にある限りは視点変化に鈍感なものとなり、容易に文字を読むことも可能となる。
【0121】
<第3の実施形態>
なお、上記第2の実施形態は、ユーザ視点変化への応答感度を、ユーザの視点変化応じて自動的に切り替えるものであった。しかし、応答感度の切り替えはユーザが意図的に切り替えるようにしてもよい。この場合を第3の実施形態として説明する。
【0122】
この場合、図7のステップS1308とS1309が削除され、代わりにステップS1303の位置に手動感度切り替え処理が加えられるようにする。図10は手動感度切り替え処理のサブルーチンを説明する図である。以下、手動感度切り替え処理についてのみ説明する。
【0123】
図10のステップS1701において、ユーザからのキーボード等から感度指定入力があった場合はS1702進み、入力がない場合は何もしない。ユーザの感度指定入力とは、ユーザが高感度動作、または低感度動作の要求を、キーボードやマウスなどの入力装置を利用して行うことである。従って、システム構成は、図1に示すように、ユーザ(HMDを装着するユーザ)は、手元に指示入力手段を持つようにする。
【0124】
ステップS1702以降は感度指定に応じた処理を行うわけであるが、その処理内容は第2の実施形態の感度切り替え処理(図9)にほとんど等しい。図9のステップS1501がステップS1702の判別処理に置き換わり、S1501の判別結果「低感度領域と交差あり」と「低感度領域と交差なし」が、S1702の判別結果「低感度指定」と「高感度指定」にそれぞれ置き換わるのみである。
【0125】
以上説明したように、各実施形態によれば、注視しようとする、もしくは注視されるべきオブジェクトに対しては、視点位置の感度を低くすることで、容易にそのオブジェクトの詳細や文字等を認識し得る環境を提供できるようになる。
【0126】
具体的には、第1の実施形態にしたがえば、HMDを介して見えるオブジェクトを拡大して見ることへの指示に連動して視点位置変化が鈍感になるので、操作者にとっては、そのオブジェクト(或いはその一部)が視野から外れるということが起こりにくくなる。
【0127】
また、第2の実施形態に従えば、仮想空間内に配置されるオブジェクトと視線とが交差する場合に、視点位置変化の感度がそのオブジェクトの属性に応じて自動的に切り換わることになり、例えば、オブジェクト上に文字が描かれている場合にあっては容易にその文字を認識することも可能になる。
【0128】
また、第3の実施形態によれば、仮想空間内におけるオブジェクトに対し、ユーザーが注視したいとの要求に応じて、視点位置の変化に対する感度を下げることで、そのオブジェクトを楽な姿勢で注視することが可能となる。
【0129】
なお、上記各実施形態を互いに組み合わせても構わない。例えば、第1、第2の実施形態を組み合わせると、高感度として設定されたオブジェクトを拡大すると自動的に、低感度状態にさせることもできるようなるし、ユーザの拡大しなくても、ユーザの指示によって低感度モードにして注視することも可能になる。
【0130】
また、上記各実施形態での説明から明らかなように、本発明は、HMD等の特定のハードウェアを必要とするものの、その主要処理はコンピュータ103によるソフトウェアでもって実現できる。従って、本発明はコンピュータプログラムをもその範疇とするものである。更に、通常、コンピュータプログラムはフロッピー(R)ディスクやCDROM等を可搬性のコンピュータ可読記憶媒体に格納されており、その媒体をコンピュータにセットしてコピー或いはインストールすることで実行可能となるわけであるから、かかるコンピュータ可読記憶媒体も本発明の範疇に含まれることは明らかである。
【0131】
【発明の効果】
以上説明したように本発明によれば、ヘッドマウントディスプレイを利用した仮想空間を体感するシステムにおいて、注視しようとする、もしくは注視されるべきオブジェクトに対し視点位置の感度を低くすることで、容易にそのオブジェクトの詳細を認識し得る環境を提供できるようになる。
【図面の簡単な説明】
【図1】実施形態の構成を表す概念図である。
【図2】実施形態に使用されるコンピュータ及びその周辺装置のブロック構成図である。
【図3】第1の実施形態のメイン処理手順を説明するフローチャートである。
【図4】第1の実施形態のズーム処理サブルーチンを説明するフローチャートである。
【図5】実施形態におけるCG計算の概要を表すフローチャートである。
【図6】投影条件と物体像の大きさの関係を表す概念図である。
【図7】第2の実施形態のメイン処理手順を説明するフローチャートである。
【図8】第2の実施形態の視線判別処理サブルーチンを説明するフローチャートである。
【図9】第2の実施形態における感度切り替え処理サブルーチンを示すフローチャートである。
【図10】第3の実施形態における感度切り替え処理サブルーチンを示すフローチャートである。
Claims (11)
- ユーザに装着するためのヘッドマウントディスプレイに、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置であって、
ユーザの前記視点位置を、互いに異なる感度で検出する複数の視点位置検出手段と、
前記複数の視点位置検出手段のいずれかを選択する選択手段と
を備えることを特徴とする画像処理装置。 - 前記複数の視点位置検出手段の1つは、ユーザに装着する共通の視点位置検出装置で得られる視点位置情報のうち最新の1つの視点位置情報を採用した手段であり、
他の視点位置検出手段は、前記視点位置検出装置より時系列に得られる所定数の視点位置情報の平均値を算出する手段であることを特徴とする請求項1に記載の画像処理装置。 - 更に、前記ヘッドマウントディスプレイに表示する像の拡大を指示する指示手段を備え、
前記選択手段は、前記指示手段による指示内容に応じて前記複数の視点位置検出手段の1つを選択することを特徴とする請求項1又は2に記載の画像処理装置。 - 更に、前記仮想空間内に配置されるオブジェクト像を生成するため、各オブジェクト毎に、それぞれのオブジェク像を生成するための情報と、視点位置の感度を制御する属性情報とを記憶する記憶手段と、
検出した視点位置に従い、前記ヘッドマウントディスプレイに表示させるべき視野内に存在するオブジェクトの属性情報を判定する判定手段と
を備え、前記選択手段は、前記判定手段の判定結果に従って前記複数の視点位置検出手段の1つを選択することを特徴とする請求項1又は2に記載の画像処理装置。 - 前記選択手段は、所定のマニュアル指示手段による指示に従って、前記複数の視点位置検出手段の1つを選択することを特徴とする請求項1又は2に記載の画像処理装置。
- ユーザに装着するためのヘッドマウントディスプレイに、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置の制御方法であって、
ユーザの前記視点位置を、互いに異なる感度で検出する複数の視点位置検出工程と、
前記複数の視点位置検出工程のいずれかを選択する選択工程と
を備えることを特徴とする画像処理装置の制御方法。 - ユーザに装着するためのヘッドマウントディスプレイに、ユーザの視点位置に従って生成した仮想空間の像を表示させる画像処理装置用のコンピュータプログラムであって、
ユーザの前記視点位置を、互いに異なる感度で検出する複数の視点位置検出手段と、
前記複数の視点位置検出手段のいずれかを選択する選択手段と
として機能することを特徴とするコンピュータプログラム。 - 請求項7に記載のコンピュータプログラムを格納することを特徴とするコンピュータ可読記憶媒体。
- ユーザの視点情報をセンサを用いて検出し、該視点情報に応じて画像を生成し、表示させる情報処理方法において、
前記センサによって検出された視点情報に対する応答感度を設定し、
前記設定された応答感度および前記センサによって検出された視点情報から視点情報を求め、
前記視点情報を用いて前記画像を生成することを特徴とする情報処理方法。 - 前記応答感度は、拡大率に応じて設定されることを特徴とする請求項9記載の情報処理方法。
- 前記応答感度は、ユーザが着目するオブジェクトに基づき設定されることを特徴とする請求項9記載の情報処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002163179A JP2004013326A (ja) | 2002-06-04 | 2002-06-04 | 画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002163179A JP2004013326A (ja) | 2002-06-04 | 2002-06-04 | 画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004013326A true JP2004013326A (ja) | 2004-01-15 |
Family
ID=30431726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002163179A Withdrawn JP2004013326A (ja) | 2002-06-04 | 2002-06-04 | 画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004013326A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010107072A1 (ja) * | 2009-03-18 | 2010-09-23 | ブラザー工業株式会社 | ヘッドマウントディスプレイ |
JP2017228300A (ja) * | 2017-07-13 | 2017-12-28 | ソニー株式会社 | 画像表示装置、ヘッドマウントディスプレイ、情報表示装置、表示処理方法及びプログラム |
US10115235B2 (en) | 2015-07-14 | 2018-10-30 | Colopl, Inc. | Method for controlling head mounted display, and system for implemeting the method |
WO2019078033A1 (ja) * | 2017-10-20 | 2019-04-25 | ソニー株式会社 | 再生装置および方法、並びに、生成装置および方法 |
-
2002
- 2002-06-04 JP JP2002163179A patent/JP2004013326A/ja not_active Withdrawn
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010107072A1 (ja) * | 2009-03-18 | 2010-09-23 | ブラザー工業株式会社 | ヘッドマウントディスプレイ |
JP2010218405A (ja) * | 2009-03-18 | 2010-09-30 | Brother Ind Ltd | ヘッドマウントディスプレイ |
US10115235B2 (en) | 2015-07-14 | 2018-10-30 | Colopl, Inc. | Method for controlling head mounted display, and system for implemeting the method |
JP2017228300A (ja) * | 2017-07-13 | 2017-12-28 | ソニー株式会社 | 画像表示装置、ヘッドマウントディスプレイ、情報表示装置、表示処理方法及びプログラム |
WO2019078033A1 (ja) * | 2017-10-20 | 2019-04-25 | ソニー株式会社 | 再生装置および方法、並びに、生成装置および方法 |
US11270413B2 (en) | 2017-10-20 | 2022-03-08 | Sony Corporation | Playback apparatus and method, and generation apparatus and method |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4533087B2 (ja) | 画像処理方法、画像処理装置 | |
US10853918B2 (en) | Foveal adaptation of temporal anti-aliasing | |
US7952594B2 (en) | Information processing method, information processing apparatus, and image sensing apparatus | |
JP4883774B2 (ja) | 情報処理装置及びその制御方法、プログラム | |
JP5966510B2 (ja) | 情報処理システム | |
JP5724543B2 (ja) | 端末装置、オブジェクト制御方法及びプログラム | |
KR101892735B1 (ko) | 직관적인 상호작용 장치 및 방법 | |
WO2021044745A1 (ja) | 表示処理装置、表示処理方法及び記録媒体 | |
JP7480388B2 (ja) | ヘッドマウント情報処理装置 | |
WO2017169273A1 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
JP2020004325A (ja) | 画像処理装置、画像処理方法およびプログラム | |
JP6723743B2 (ja) | 情報処理装置、情報処理方法、およびプログラム | |
US20240062489A1 (en) | Indicating a Position of an Occluded Physical Object | |
US20210037225A1 (en) | Method of modifying an image on a computational device | |
WO2017169272A1 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
JP2004013326A (ja) | 画像処理装置及びその制御方法、並びにコンピュータプログラム及びコンピュータ可読記憶媒体 | |
JP2005025563A (ja) | 仮想現実感生成方法 | |
US11353953B2 (en) | Method of modifying an image on a computational device | |
KR102132406B1 (ko) | 디스플레이 장치 및 그의 제어 방법 | |
US9959637B2 (en) | Method and apparatus for processing border of computer figure to be merged into background image | |
JP4217661B2 (ja) | 画像処理方法、画像処理装置 | |
JP7287172B2 (ja) | 表示制御装置、表示制御方法、及びプログラム | |
JP2006343954A (ja) | 画像処理方法、画像処理装置 | |
US11983810B1 (en) | Projection based hair rendering | |
JPH11175758A (ja) | 立体表示方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20050906 |