(57)【要約】【課題】  三次元モデルを複数の視点から描画して三次元映像を提示する装置において、視差が過剰に発生することを防ぎつつ、必要な対象物の映像についての立体感や、映像としての立体性の強い印象を保持する。【解決手段】  描画対象のディスプレイ面からの飛び出し量に合わせて、三次元モデルの頂点をレンダリングする仮想カメラの位置を制御することにより、各視点位置の映像として非透視投影の映像を作成し、提示する。また、この制御のため三次元モデルの部分毎内に重み付けのパラメータを組み込み、立体感の提示を細かく制御できるようにする。【選択図】  図１０
2006293792.tif 000002
【特許請求の範囲】
【請求項１】
予め設定された複数視点の位置を示す情報を格納する記憶装置と、
前記情報に基づいて、立体映像を作成する演算装置を備え、
前記演算装置は、描画されるモデルの各部分に対して所定の計算に基づいて生成した異なるパラメータの射影変換を適用することで各視点位置用の二次元画像をそれぞれ作成し、
前記それぞれの画像を視点毎に切り替えて表示する立体映像生成装置。
【請求項２】
前記所定の計算とは、モデルの各部分に登録された重み付けと、頂点のディスプレイ平面からの飛び出し量の積を求めることである、請求項１記載の立体映像生成装置。
【請求項３】
前記演算装置は、前記積に応じて、前記複数視点に対応付けられた画像間の視差の量を狭める、請求項２記載の立体映像生成装置。
【請求項４】
前記演算装置は、前記積に応じて、各モデルの視差を狭める割合を、視点からの奥行き距離の逆数に比例させる、請求項２記載の立体映像生成装置。
【請求項５】
前記演算装置は、モデルの直線部分に対しては変換後も直線性を保つように射影パラメータを選定した、請求項４記載の立体映像生成装置。
【請求項６】
前記演算装置は、前記積に応じて、各視点に対応づけられた画像間の視差の量を一定にとどめつつ、モデルの飛び出し部分の箇所を描画する、請求項２記載の立体映像生成装置。
【請求項７】
前記演算装置は、切り替え情報に基づいて、描画の仕方を変更する、請求項２乃至６記載の立体映像生成装置。
【請求項８】
外部機器と接続するI/Fと、
プログラムと情報を格納する記憶装置と、
画像を外部に出力する画像出力装置と、
前記プログラムを実行するCPUを備え、
前記情報は、予め設定された複数視点の位置を示す情報を含み、
前記プログラムは、前記情報に基づいて、モデルの各部分に対して所定の計算に基づいて生成した異なるパラメータをモデル部分毎に適用した射影変換を用いて二次元画像の作成する部分を備える、立体映像生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、立体映像を作成して提示する装置に関する。
【背景技術】
【０００２】
立体映像を作成する技術では、ディスプレイを通じて、観察者の両目に微妙に異なる映像を投影したり、目の位置を動かしたときに異なる映像が見えるようにしたりすることで、立体感を提示する。
【０００３】
立体映像を提示するためには、ディスプレイの前面に複数の視点位置を想定し、それぞれの視点位置から見た映像を作成しなければならない。このように視点位置が異なった際に各視点で見える映像の間に生まれる差は視差と呼ばれる。このような原理に基づいて三次元モデルを立体映像として提示し、その立体映像を視聴する装置において、利用者が疲労を感じる場合がある。特に裸眼立体視の手法などを用いた際には、各視点に送り出す画像の情報を十分に分離することができない場合が多く、そのような立体ディスプレイでは画像間の視差が大きく異なる映像、すなわち飛び出し量の大きな映像が提示しにくい。
【０００４】
このため、視差の量のみを一定のルールで制御することにより疲労度の少ない映像を作成する技術がある（特許文献１参照）。
【０００５】
【特許文献１】特開平１１−３５５８０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１の技術では、画面内に存在する背景と前景などに、はなはだしく奥行き距離の違うオブジェクトが混じっていた場合には、これらのオブジェクト間の奥行きに起因する視差が強調されるため、過度な視差を削減しつつオブジェクト自身の立体性などを十分に観察する事は困難である。例えば、図２の例のように、視点位置200に対して、遠い背景201と主要オブジェクト202、さらに近景の203などがあった場合には、主要オブジェクト202にあわせて視差の量を均等に制御してしまうと、遠景201や近景203に過剰な視差が発生してしまう。一方で遠景201と近景203の視差を一定以内に収めようとすると、肝心な主要オブジェクト202には形状としての立体感がなくなってしまう。また、平面に背景をマッピングするなどの処理を行った場合、仮想視点位置を動かすウォークスルー処理を行う際に、移動できる範囲が限定されてしまう。
【課題を解決するための手段】
【０００７】
前記課題を解決するため、本稿における立体映像生成装置は、予め設定された複数視点の位置を示す情報を格納する記憶装置と、前記情報に基づいて、立体映像を作成する演算装置を備え、前記演算装置は、モデルの各部分に対して所定の計算に基づいて生成した異なるパラメータをモデル部分毎に適用した射影変換を用いて二次元画像の作成する。
【発明の効果】
【０００８】
本発明によれば、立体画像の各部分に対して通常の射影行列では不可能な誇張や視差の制御が行われる。
【発明を実施するための最良の形態】
【０００９】
以下に図面を用い、本発明の実施例について説明する。
【実施例１】
【００１０】
図１０は、飛び出した部分の視差が過剰になることを抑制するために、飛び出しの量に応じて仮想カメラの間隔を狭めて視差を減少させるという本実施例の効果の内容を示す図である。
【００１１】
三次元モデルの描画対象物1000を、視点位置1002と視点位置1003から見た映像をディスプレイに相当するスクリーン平面1001上に描画するとき、描画する頂点位置1006とスクリーン平面との距離1005に応じて、1002と1003の内分点1004を設定し、1003の視点位置の代わりに1004の視点位置で描画を行う。また、その際に画面上に連続して描画するモデルに対して視差量の逆転が起こらないように内分点1004の設定に制約条件が施される。
【００１２】
図24は、実施例１を適用して得られる効果を示す表示画像の例を示す図である。図2401のように人間が手前に手を差し出している様子を、視差をつけて描画している。図2402は、手を前面に出して制止している様子を、それぞれの各部分に視差をわりあてた二つの視点用の画像を実線と点線で表現している。この飛び出した手の部分につけられている視差の量が、映像表示系で表現可能な立体感の許容量を超えている場合、本実施例を用いて図2403における指の図のように視差を上限の範囲内に抑制する。
【００１３】
また、実施例１と実施例３で示すように、接合部分での滑らかさを重視して内分点の選択を行う場合と、モデルの直線部分を直線のままで表現するために内分点の選択方法の二種類が存在する。実施例４で述べられる方式においては、これらの内分点の選択方式をオブジェクトの各部分ごとに選択して混合する効果が実現される。
【００１４】
図４を用いて、第１の実施例について説明する。立体映像生成装置400は、視点の位置に応じて異なる絵を提示するディスプレイ（画像提示部分）401、ディスプレイ401に転送する映像を生成する情報処理装置402、映像の内容を制御するインタフェース部403とからなる。410〜412はディスプレイ401がその設計時に想定している視点の位置を示すものである。これらの各位置に対して異なる映像が提示される。
【００１５】
このような視点毎の映像を視点毎に分離して提示する手法として、前述のように多くの既存発明がある。図１の104〜106はディスプレイ100がその設計時に想定している視点の位置を示す図である。立体表示系ではこれらの各視点の位置に対して異なる映像111〜113を作成し、これをディスプレイ100の設計に合わせて合成した映像を作成する。ディスプレイ上に重なって表示された101〜103のような映像は、前述の方式に合わせて分離され、それぞれ視点位置104〜106からのみ観察されるようになる。既存の様々な立体表示系のうちのいずれの手法を用いる場合にも、図１の104〜106のようにディスプレイの可視位置に複数の視点位置を想定して、そこに投影する各映像110〜113を作成したものを合成加工して投影する。
【００１６】
視点位置420は、410〜412の各三次元位置座標の空間平均を取ったものでこれらの視点を代表するものである。ただし、420の点として中央値や重み付け平均など算術平均以外の値を用いることもできる。この視点位置420を、各視点の位置を扱う際の代表点として計算に用いる。以降の記述では、410〜412を多眼視点位置(R)、420は中央視点位置(R)と呼ぶ。これらの位置は、実空間上の三次元直交座標の位置を用いてあらわされる。この直交座標系は、ディスプレイ401面（またはその延長平面）上に原点(0,0,0)が存在し、中央視点位置が(0,0,1)となるように定められたものである。
【００１７】
図５は、画像作成処理を行う情報処理装置402の構造を示す図である。
CPU(中央演算処理装置)501は、記憶装置502に記録されているプログラムを、主記憶装置504に読み出して実行する。そして、後述の三次元表示情報512とフレーム画像513の更新を行い、それらの内容を画像出力装置505へと出力する。
【００１８】
記憶装置504は、OS510、実行プログラム511、三次元表示情報512、フレーム画像513、合成プログラム514等を格納する。
【００１９】
OS510は、ＣＰＵの汎用的な処理を行うための共通プログラムであり、実行プログラム511は、CPU501が情報処理を行うためのプログラムである。
【００２０】
三次元表示情報511は、三次元モデルに関する情報、予め設定された複数視点の位置を示す情報、光源位置の情報、霧などの特殊効果の情報等、三次元表示をするために必要な情報であるが、これらに限定されるものではない。
【００２１】
画像フレーム513は、CPU501の計算によって構築される描画映像であり、ディスプレイ401が想定している視点位置410〜412の数と同じ数だけの画像データから構成される。
【００２２】
合成プログラム514は、ディスプレイ401の画像表示方式に合わせて作成されたプログラムであり、例えば、画像フレーム513を、ディスプレイ401が必要とする入力形式に変換・合成し、画像出力装置505を通じてディスプレイ401にデータを転送するための機能が備えられている。
【００２３】
尚、記憶装置504は、一般に磁気ディスクであるが、光ディスク等、他の記憶媒体を用いてもよい。
【００２４】
I/F部503は、ユーザの命令を受け取る入力機器403との間の入力および出力データをやり取りするために必要なデータを転送する。
【００２５】
画像出力装置505は、画像をディスプレイ401に表示する装置である。この装置内のデータは一定時間ごとに画像信号として変換され、ディスプレイ401上に送られる。
【００２６】
CPU501が実行する合成プログラム514の内容は、ディスプレイ401の実装によって異なる。両眼視差を提示するために最も多く用いられている手法が、選択的に映像を通すフィルタ機能を持ったメガネなどを用いて両眼に２種類の異なった映像を与える方法である。この方式には偏光フィルタを用いて映像を分離するものや、赤と青の異なる光を吸収する色分離フィルタを用いて分離するもの、または時分割で左右の画像を切り替えて表示して分離をするものなどがある。一方で、裸眼立体視と呼ばれるものは特殊なメガネなどを用いずに、空間上の位置に応じて異なった色情報を与える仕掛けをディスプレイ側の機構として設けたものである。この種類の立体視としては、パララックスバリヤ法や、レンチキュラレンズを用いるもの、細かいレンズを敷き詰めるレンズアレイ方式などが有名である。
【００２７】
本実施例ではレンズアレイ方式に対しての例を挙げるが、本実施例の視点数や視点位置を変更することにより、他種類の立体投影手法にも適応可能である。
【００２８】
本実施例が想定するレンズアレイを用いた裸眼立体視方式の場合には、各画素とその上に存在するレンズとの相対位置関係に応じて適切なフレームからの画素をサンプリングして配置する。このような裸眼立体視以外の手法を用いる場合の例を挙げると、赤青フィルタを用いた２眼式の提示装置が用いられている場合には、各画素の色情報について赤成分と青成分を二つの画像から合成する方法がとられるし、時系列フィルタを用いた２眼式の提示装置においては、２つの視点位置の画像が表示毎に切り替えて送信される方法がとられる。本実施例は、このような合成の前段階として複数視点位置毎の画像（またはそのための色情報のサンプリング手法）を制御・構築することを対象としており、この各画像を合成して立体提示部分に送る際にどのような手法を用いるかには依存しない。
【００２９】
図６は、ユーザからの入力を受け付けるインタフェース部403を示す図である。このインタフェース部の各入力装置部分601〜604の実装にはタッチパネル、ボタン、レバーなどの既存の入力方法を使用し、これらの入力装置からの情報はデジタル信号として情報処理装置402が受信することが出来る。601は仮想空間内で視点の位置を変更するための３自由度の入力装置であり、602は視点の角度を変更するための３自由度の入力装置である。また、603は飛び出しの遠近感を制御するための１自由度の入力装置である。また、604は入力装置603の補佐をする入力装置であり、制御可能な整数個のパラメータのうち、入力装置603によってどのパラメータを操作しているかを選択するための切り替えスイッチである。各入力装置が制御する内容については、本実施例の特徴的動作に関連しており、後述の実施例の動作フローにしたがって解説を行う。
【００３０】
図７は、立体映像での表示対象となる３次元データと視点位置、またその配置関係を示す図である。以降の解説では、これらの立体データと配置データ同士の関係を、仮想空間700と呼ぶ。701〜704は、多数の三角形で構成された三次元モデルのデータを示している。このモデルデータはあらかじめ作成され、外部記憶装置504に保存されている。これらの幾何学形状を構成する各三角形では、別に用意されたテクスチャと呼ばれる画像を参照して、色情報が決定される。モデルの各部分がこのテクスチャ画像のどこからサンプリングデータを採取するかを決定するため、各頂点にはUV値と呼ばれる値が用意される。
【００３１】
720は仮想空間内の視点の位置を示すデータである。この視点位置は、ディスプレイ前面での中央視点位置(R)に対応するものである。以後、仮想空間上のこの位置を中央視点位置(V)と呼ぶ。
【００３２】
また、710〜712は視点位置410〜412に対応する仮想空間上の視点位置を示すアイコンである。これらを多眼視点位置(V)と呼ぶ。これらの多眼視点位置(R)に対応する多眼視点位置(V)は、多眼視点位置(R)と同一の値をとり、浮動点小数で構成される三次元ベクトルの配列として外部記憶内に保存されている。以降では、この配列の値をp_eと表記する。ただし、eは多眼視点位置(V)を判別するためのインデックス値である。
【００３３】
図８は、三次元モデルのデータ構造を示す図である。モデルデータ800はヘッダ部分801と形状データ部分からなる。ヘッダ部分には参照するテクスチャ画像の情報(802)が記載されている。モデルの形状は三角形データの構造体803のリストによって表現されている。この各三角形は図8の804〜806のように３つの頂点データの組によって構成される。一つの頂点データ804には、三次元位置情報810、UV座標値811、後の計算で用いられるテンポラリ領域813、重み付け値のデータ812が含まれている。位置情報は、頂点の位置を示す三次元ベクトルである。UV座標値はその頂点がテクスチャ画像内のどこに対応しているかを示す二次元ベクトル値である。また、812に保存される値ksは、遠近法の強調作業に用いられる値であり、頂点の視差制御値と呼ぶ。このデータの利用方法は後述の実施例の動作手順にしたがって述べる。
【００３４】
図９はモデルの管理情報をあらわすデータの構造を示す図である。これは、三次元モデルデータを仮想空間700に配置する情報がまとめられたデータであり、このデータが保持する三次元モデルへの参照ポインタは901に保存される。この901が示すオブジェクトは、平行移動量を示す三次元ベクトルデータと、回転行列のデータとに基づいて、仮想空間内に配置される。領域905にはローカルな位置情報t_p、領域907にはグローバルな位置情報ts_pを表現するベクトルが収められ、領域904にはローカルな回転情報R_p、領域906にはグローバルな位置情報Rs_pを表現するベクトルが収められる。ただし、ここでpはオブジェクトの番号を示す符号である。また、w, k, w_0, dという四つの値からなる変数領域が用意されている。これらは後述のインタラクティブな操作によって制御される、遠近法の重み付け処理を行うためのパラメータデータであり、それぞれ、重み付け値、モデルの視差制御量、重み付け値の希望値、ディスプレイ深度と呼称する。
【００３５】
また、これらの管理情報の全体は、図９のデータ構造体をノードとした木構造として、外部記憶装置504に保存される。データ902は、このノードの親となるノードを参照するためのアドレス情報であり、データ903は、このノードの子となるノードを参照するためのアドレス情報である。この木構造はモデルの仮想空間700上の配置関係により定められる。仮想空間700で接触している二つのモデルの間には親子関係があり、ノードmがノードnの親であることは、モデルnがモデルmの上に配置されていることを示す。モデルm上にモデルnが配置されている場合、モデルmとモデルnの接合点t_nはモデルmのローカル座標系の三次元ベクトルで表現される位置情報である。またモデルmの回転情報はモデルmの座標においての３ｘ３の三次元回転行列R_nで示される。本実施例では、モデルmとモデルnは、モデルnの原点(0,0,0)とモデルm上のnモデルnの配置点t_nが接触しており、モデルnの三次元座標x_nは、モデルmの座標においてはx_m=R_n・x_n+t_nと表現可能である。
【００３６】
また、この木構造のルートとなるデータが記憶装置502に保存される。このデータをルートノードと呼ぶ。ルートノードは三次元位置情報ts_0と三次元回転行列Rs_0、拡大比率aを持ち、子のデータを参照するアドレス情報を持つ。ルートノードの直接の子ノードの座標系における位置ベクトルxは中央視点位置(V)の座標系においては、a(Rs_0・x+ts_0)と表現される。このルートノードによって定められる座標系が、シーン全体の座標系であり、以降、グローバル座標系と呼ぶ。このグローバル座標系は、座標データts_0によって定められるシーンの中心を原点(0,0,0)とし、中心視点位置(V)の点を(0,0,-1)とする直交座標系である。入力系601と602による視点位置の移動と回転操作は、このシーンの中心位置と中心視点位置(V)を制御することで実現される。
【００３７】
ここで、シーンとは、ある視点位置から見たモデルによって構築された仮想世界の風景のことを示す。
【００３８】
図１１は、本実施例の動作の順序を示すフロー図である。
【００３９】
CPU501は、各種データの初期化作業を行う（工程1101）。即ち、各データの初期値を外部記憶装置604から主記憶装置602に読み込む。ここで読みこまれるデータ512は、幾何形状のデータ800とその制御情報900、多眼視点位置(V)を表現する三次元ベクトルデータp_eの配列である。また、ルートノードの初期状態の情報を作成するため、三次元位置情報t_00と三次元回転行列R_00、拡大比率a0を読み込み、数１のような計算を行い、ルートノードの構造体に保存する。ただし数１において、a_0 R_00は行列R_00を定数a_0倍する操作をさし、左矢印は代入操作をさす。
【００４０】
【数１】
2006293792.tif 000003
また、CPU501は、工程1101において、前述の中央視点位置(V)および多眼視点位置(V)のそれぞれについて、プロジェクション行列P_eを作成し、該データを主記憶装置504上に保存する。ただし、ここでeは主記憶502上の配列変数からデータを参照するためのインデックスの値であり、0は中央視点位置(V)、1からeMaxまでが多眼視点位置(V)のそれぞれの値を示す。中心視点位置(V)における画像を作成するための射影変換行列の初期値を数２を用いて計算し、該データを主記憶装置504上に保存する。ここで、f_x, f_yは三次元直交座標で計られたディスプレイ面の縦横の値であり、p_0xとp_0yはそれぞれ、同座標系においてのディスプレイの中心位置を示す座標値である。
【００４１】
【数２】
2006293792.tif 000004
また、CPU501は、各多眼視点位置(V)のe番目の要素が三次元ベクトルp_e=[p_ex, p_ey, p_ez]で示されるとき、この視点の画像を作成するための射影変換行列の初期値は数３のように計算し、主記憶装置504上に保存する。f_x, f_yは前述同様の三次元直交座標で計られたディスプレイ面の縦横の値であり、p_0xとp_0yはそれぞれ、同座標系において多眼視点位置(V)のディスプレイの中心位置を示す座標値である。
【００４２】
【数３】
2006293792.tif 000005
本実施例は、工程1102から工程1107までの作業を繰り返すことにより、三次元映像の表示を継続しつづける。
【００４３】
CPU501は、入力装置403から送られてきたデータを用いて、視点位置データと遠近パラメータの更新を行う（工程1102）。入力装置601から送られてくる３自由度の信号を三つの変数v_1,v_2,v_3として受信する。ただし、v_x, v_y, v_zは0を中心として絶対値が一定値vmax以下になる数値である。ただし、rmaxは視点制御の移動速度の限界値である。これらの値を用いてシーン座標を作成するデータの情報を数４のように書き換える。
【００４４】
【数４】
2006293792.tif 000006
また、CPU501は、入力装置602から送られてくる３自由度の信号を三つの変数r_1,r_2,r_3として受信する。ただし、r_1, r_2, は0を中心として、その絶対値が視点制御の回転速度の限界値rmax以下になる小数の数値であり、r_3は0.5<r_3<2.0となる範囲の数値である。これらの値を用いてシーン座標の回転行列R_0の要素を数５のように書き換える。
【００４５】
【数５】
2006293792.tif 000007
また、入力装置603から送られてくる１自由度の信号をw2とする。ただし、w2は浮動小数値であり0.5<r_3<2.0となる範囲の数値である。また入力装置604から送られてくる整数値をw3とする。これらの値を用いて各シーンノードのw0の値を数６のように更新する。ただし、w0_iはシーンノードi番のw0変数の値を示すものとする。
【００４６】
【数６】
2006293792.tif 000008
工程1103は各モデルに対して幾何情報変換の前処理を行う工程であり、CPU501は、データ512の各頂点について、現在のシーン座標系での位置を計算する。この前処理工程1103で行う処理の内容を図１２のフロー図として示す。
【００４７】
CPU501は、未選択のノードを選択する（工程1201）。この際、ルートノードの参照アドレスから順にシーンの木構造を再帰的に辿ってノードを選択する。このような再帰的に木構造をたどる順序の選択に関してはいくつかの異なった既存手法があるが、親が子よりも先に呼び出されるという条件を満たす、適切な手法を用いるものとする。このように選択されたノードに対して工程1202〜1205の処理を行う。選択されたノードの番号を変数iに代入し、データ領域902に記載されている選択されたノードiの親の番号を変数jに代入する。
【００４８】
CPU501は、選択されたノードが示すモデルM_iに対して、グローバル回転行列Rs_iを計算する（工程1202）。親の座標系のグローバル回転行列Rs_jと、モデルのローカル回転行列R_iについて、この積の値を数７のように計算し、その結果をこのモデルM_iのグローバル回転行列Rs_iとして、構造体900の903の位置に記録する。
【００４９】
【数７】
2006293792.tif 000009
CPU501は、親モデルのグローバル原点中心位置Ts_jと、子モデルのローカル位置座標t_iと、親モデルのグローバル回転行列Rs_jから、数８を計算し、その値をこのモデルのグローバル原点中心位置Ts_iとして、構造体900の変数904に保存する（工程1203）。
【００５０】
【数８】
2006293792.tif 000010
CPU501は、視差量の逆転が起こらないように、モデルの各種の射影行列制御の値を計算する（工程1204）。親モデルのディスプレイ深度d_jと視差制御値k_j、このモデルの重み付け値の希望値w0_iから、数９を計算して重み付け値w_iを設定する。得られた値を、このモデルの視差制御量k_iとして、構造体900のデータ905に保存する。
【００５１】
【数９】
2006293792.tif 000011
続いてCPU501は、モデルiのディスプレイ深度として、数１０を計算する。ただし、(R_j・t_i).zはR_j・t_iで得られる三次元ベクトルのz座標の値をとる操作である。このd_iをモデルのディスプレイ深度として、構造体900のデータ905に保存する。
【００５２】
【数１０】
2006293792.tif 000012
また、CPU501は、モデルiの視差制御量k_iとして、数１１の計算を行う。数１１によって得られた値を、このモデルの視差制御量k_iとして、構造体900のデータ905に保存する。
【００５３】
【数１１】
2006293792.tif 000013
以上で工程1204の計算が終了する。
【００５４】
シーンの木構造に未選択のノードがある場合には、CPU501は、工程1201にもどってノードを選択し、そのノードに対して再び工程1202 〜1204を行う。全ノードについて工程1202 〜1204処理が終わった場合、工程1103は終了し、工程1104に進む。
【００５５】
工程1104は各モデルの三次元幾何学形状を二次元画像として描画する工程である。この工程1104の処理内容を図１３のフロー図に基づいて記述する。
【００５６】
CPU501は、シーンモデルを管理する木構造から、未選択のモデルを一つ選択する（工程1301）。この際、ルートノードの参照アドレスから順にシーンの木構造を再帰的に辿ってノードを選択する。このノードの番号を変数iに代入する。このモデル以下ではモデルM_iと呼ぶ。また、モデルM_iの親ノード番号jを読み込み、この親ノードがさすモデルをM_jとする。モデルM_jの三角形データの個数を変数pMaxにセットする。また、変数pを0にリセットする。
【００５７】
CPU501は、モデルのデータ構造体の三角形データ領域からp番目の要素を選択する（工程1302）。これを三角形D_pとする。変数kを0にリセットする。
【００５８】
CPU501は、D_pの頂点のk番目の頂点の位置座標を選択する（工程1303）。これをv_kと呼ぶ。CPU501は、このv_kについて、２次元画像内の対応する座標u_kを決定するために、工程1304〜工程1308の計算を行う。
【００５９】
CPU501は、頂点データv_kに対する前処理を行う（工程1303）。親モデルのシーン回転行列Rs_j、親モデルの原点中心位置Ts_j、親モデルのディスプレイ深度d_j、モデルの重み付け値w_iを読み込む。頂点v_kのグローバル位置ベクトルを計算するため、このモデルのグローバル位置ベクトルTs_iと、グローバル回転行列Rs_j、およびこの頂点のローカル位置ベクトルv_kを用いて、数１２の計算を行う。数１２によって得られた値vs_kをこのシーンのグローバル位置ベクトルとして領域813に保存する。
【００６０】
【数１２】
2006293792.tif 000014
また、CPU501は、モデルM_iの視点調整値k_iと、グローバル回転行列Rs_iこの頂点の視点調整値k_を求める。ただし、(Rs_j・v_k ).z はRs_j・v_kを計算し、そのz成分をとる操作を数１３に示す。
【００６１】
【数１３】
2006293792.tif 000015
CPU501は、変数eを初期値の0にリセットして工程1304を行う。CPU501は、多眼視点位置(V)のうちから、未選択の射影変換行列P_eを選択する（工程1304）。ただし、eは視点位置を判別する符号である。また、このP_eに対応するフレーム領域F[e]を選択する。このフレームは、視点位置eから仮想空間700を観察した映像に相当する画像を描画するためのメモリ領域として用いられる。
【００６２】
CPU501は、計算された値ks_kを用いて、数１４のように射影行列P'_kを計算する（工程1305）。
【００６３】
【数１４】
2006293792.tif 000016
図１４は、この計算によって得られる効果を示す図である。
変換行列P'_kはオブジェクトのz成分の変動に従い、P_0(1402)とP_i(1403)の間を動く仮想カメラ1404に相当する射影変換である。このP'_kがP_iからP_0に近づくことにより、視点間の視差の量が制御される。また、数９で上限を定めたことにより奥行き方向の変動に対して、視差量が逆転して見えることがない。
【００６４】
CPU501は、三つの頂点k=0,1,2に対して、二次元座標上の位置u_kを数１５のように計算する（工程1305）。
【００６５】
【数１５】
2006293792.tif 000017
CPU501は、計算された３つの頂点に囲まれる区間について、色の塗りつぶし作業を行う（工程1306）。頂点v_kのuv情報を読み込む。テクスチャ画像のうち(u,v)に相当する点から色情報をサンプリングして、この頂点の色情報とする。塗りつぶされる領域の各ピクセルに対して、画像からのサンプリングを行う。この作業工程については、UVマッピングとして広く知られている手法を用いる。また、この作業の際に三角形の法線ベクトルを求めて、その視点位置と光源位置からの角度に応じて明るさを制御する手法を用いる場合には、公知の各種手法を使用することが出来る。また、この際に、描画対象となっている三角形よりも手前にある三角形がすでに描画されている場合には、描画を行わない。この判定にはＺバッファ法などの広く知られている手法を用いる。
【００６６】
CPU501は、視点位置のパラメータeに対してループの終了判定を行う（工程1307）。変数eが変数eMax以下であるとき、視点位置を示す射影行列のリストに、未だ描画の終わっていないものがあので、eの値を1増加させて、工程1306に戻って次の視点位置を選択し、三角形の描画を行う。変数eが変数eMaxより大きい場合、全ての視点位置に対して処理が終わっているので、工程1308に進む。
【００６７】
CPU501は、三角形選択のパラメータpに対してループの終了判定を行う（工程1308）。変数pが変数pMax以下である場合、未だ描画の終わっていない三角形がある。変数pの値を1増加させ、工程1302に戻って次の三角形を選択し、工程1302〜1307の処理を実行して三角形の描画を行う。変数pが変数pMaxより大きい場合、全ての三角形の描画が終了していると判断し、工程1309に進む。
【００６８】
CPU501は、選択されたモデルM_iの全三角形を描画したのち、工程1309で全ての木構造をたどり終わっているかのチェックを行う。未だ描画の終わっていないモデルがある場合、工程1301に戻って次の視点位置を選択して、モデルの描画を行う。
【００６９】
以上の工程1301〜1309を終了すると、各視点位置からの画像を示すフレームに、画像が格納される。この時点で工程1104の処理が終了する。
【００７０】
CPU501は、あらかじめ登録されたルーチン514の手法を用いて各視点位置のフレームの画像513を統合する（工程1105）。この処理に関しては、立体映像の表示手法に依存する内容であり、既存の手法を用いる。
【００７１】
CPU501は、工程1105において統合された映像情報を画像出力装置505に送信し、立体映像の提示を行う（工程1106）。
【００７２】
以上で１フレーム分の映像が提示される。CPU501は、所定の時刻が過ぎるまで待機し、CPU内臓のタイマから割り込み処理がかかった時点で、工程1102に戻って再び次のフレームの描画を行う（工程1107）。
【００７３】
以上の実施例により、中央視点位置から視聴したときの描画印象を変更しないままで、立体表示映像の過剰な視差の発生を抑制することが可能となる。
【実施例２】
【００７４】
図１４を用いて、第２の実施例について説明する。この実施例においては、提示されるオブジェクト1400に対してその重み付け値にしたがって、射影変換における仮想カメラのパラメータ1402, 1403を、仮想カメラとオブジェクトの距離を変えてその内分点1404, 1405に置いた場合の射影変換を用いて描画することで、スクリーン平面状での視差を一定に保ったままで奥行き方向に対して誇張された遠近感を伴った映像を生成する。この変換によって、スクリーン平面1401上での視差の量を変更しないまま、表示されるモデルのうちディスプレイ面から飛び出しているモデルの描画サイズを大きく誇張して表示することが可能となる。
【００７５】
図３は、人間の手の部分が飛び出して感じるように視差をつけた画像の図である。左上の図301と右上の図302は、どちらも手を前面に出して制止している様子を示しており、左上301は前に飛び出している部分の遠近法表現が誇張されて大きく描画されている。左下303と右下304は、それぞれの各部分に同一量の視差をわりあてた様子を実線と点線で示している。本実施例を用いた場合の表示結果は、図303における指の図のようになる。このように、スクリーン面上の映像の視差の量が同一であっても、サイズ、表示面積が大きいオブジェクトについてはマッチングを取ることが比較的容易になる。
【００７６】
この実施例の実現方式は実施例１と類似しているため、実施例１と異なる部分においてのみ記述を行う。
【００７７】
図１５はj番目のモデルの配置情報を保存するデータ構造であり、実施例１における図9に相当する。実施例１との差異として、この構造体には、射影行列P_ejと三次元ベクトルp_ejとが多眼視点位置(V)の個数eMax個分保存する領域が用意されている。ただP_ejはモデルjをレンダリングする際の多眼視点eの射影行列であり、p_ejはモデルjをレンダリングする際の多眼視点eの位置を示す三次元ベクトルである。
【００７８】
図１６は本実施例の動作の順序を示すフロー図である。1601〜1602, 1605〜1607においては、実施例１の1101〜1102, 1105〜1107動作とほぼ同一の内容であるため、説明は省略する。
【００７９】
図１７は、工程1603に対応する前処理工程の処理内容を示すフロー図である。
【００８０】
CPU501は、各頂点について、現在のシーン座標系での位置を計算する（工程1603）。ルートノードの参照アドレスから順にシーンの木構造を再帰的に辿っていき、未選択のノードを選択する(工程1701)。選択されたノードに対して工程1702〜1706の処理を行う。以降このノードの番号をi、このノードの親の番号をjとする。
【００８１】
CPU501は、選択されたノードが示すモデルiのシーン座標系上の位置を計算する（工程1703）。親の座標系のグローバル回転行列Rs_jと、モデルの回転行列R_iの積Rs_j・R_iの値を計算し、このモデル座標系のグローバル回転行列Rs_iとして、メモリ領域903に保存する。
【００８２】
CPU501は、モデルiのグローバル原点中心位置Ts_jを求める（工程1704）。この工程は工程1204と共通処理である。
【００８３】
CPU501は、変数eを0からeMaxまで変化させ、e番目の視点位置について、パラメータを作成する（工程1704〜1706）。Eの初期値として0をセットする。
【００８４】
CPU501は、親モデルの仮想カメラ位置p_ejとこのモデルのグローバル移動ベクトルts_i、重み付け値w_iを用いて、モデルiをレンダリングする場合の仮想カメラの視点位置p_eiを数１６のように計算する（工程1704）。得られた値ｐ_eiを、このモデルの視点位置eに対応する仮想カメラ位置として、構造体900のデータ905のe番目の要素に保存する。
【００８５】
【数１６】
2006293792.tif 000018
CPU501は、このときの射影行列P_eiを計算する（工程1705）。親ノードjが数１７のように保存されているとき、これらの値f_xj, f_yj, q_xj, q_yjを用いて、射影行列P_eiを数１８に従って計算し、計算結果をモデルiにおける視点データのe番目の要素として1508に保存する。
【００８６】
【数１７】
2006293792.tif 000019
【００８７】
【数１８】
2006293792.tif 000020
CPU501は、視点位置に関するループの終了判定を行う（工程1706）。eがeMax以下であれば、eを一つ増やして工程1704〜1706を繰り返す。eがeMaxに達した場合、工程1707に進む。
【００８８】
CPU501は、木構造の巡回に関するループの終了判定を行う（工程1707）。シーンの木構造に未選択のノードがある場合には、工程1201にもどってノードを選択し、そのノードに対して再び工程1702 〜1706を行う。全ノードについて工程1702 〜1706の処理が終わった場合、前処理工程1603は終了し、工程1604に進む。
【００８９】
図１８はレンダリング処理を行う工程を示したフロー図である。実施例１との作業内容の違いは工程1805の計算処理に現れる。モデルM_iの頂点データのグローバル位置座標値vs_kに対し、視点eにおける二次元画像位置を計算するために、モデルM_iに保存された射影行列P_eiを用いて数１９のように計算を行い、値をu_kとしてそれ以降の計算に用いる。
【００９０】
【数１９】
2006293792.tif 000021
それ以外の処理に関しては、実施例１の方法に準じる。
【００９１】
以上の実施例により、中央視点位置から視聴したときの描画印象を変更しないままで、立体表示映像の遠近感を誇張し、視差のある映像間の認識のマッチングを取りやすくすることが可能となる。
【実施例３】
【００９２】
次に、第３の実施例について説明する。実施例１において、工程1305の処理において数９を数２０のように変更し、工程1305の数１３を数２１のように変更することにより、モデル内で直線をなしている要素が直線のままとなるように変換することが出来る。ただし、(Rs_i・v_k).zは、行列Rs_iと三次元ベクトルv_kの積を計算し、そのz成分を取る操作結果を示す。
【００９３】
【数２０】
2006293792.tif 000022
【００９４】
【数２１】
2006293792.tif 000023
それ以外の処理に関しては、実施例１の方法に準じる。
【００９５】
以上の実施例により、中央視点位置から視聴したときの描画印象を変更せず、直線成分の多いモデルに対しても直線性を保ったままで、立体表示映像の過剰な視差の発生を抑制することが可能となる。
【実施例４】
【００９６】
次に、第４の実施例について説明する。この実施例においては、関節部分とアニメーション情報を伴ったオブジェクトの各部分をその重み付けにしたがって、奥行き方向に対して非線形な視差を伴った立体映像を生成することができる。
【００９７】
図１９にこの実施例に使われる三次元モデルの頂点データの例を示す。実施例１で挙げた構造体804とは、各頂点データv_kに木構造のノードを参照するための番号sn_kと重み付け値sw_kが２組用意されている点において異なる。これらはモデルの各頂点がどのノードからの変形情報を受け取るかを示すノード番号と重み付けの値である。ただし、ノード番号は木構造の各要素に振られた通し番号と対応する整数値であり、重み付け値sw_kは合計1となる浮動小数値である。このような重み付けデータの作成手法は、スキン、スキンメッシュなどと呼ばれ広く知られるコンピュータグラフィックの技法に準じる。
【００９８】
これらのモデルを用いてシーンを構成する木構造のノードの例を図２０に示す。これは、実施例１での図９に相当するデータである。シーンを構成する木構造の各ノードは、モデルを参照アドレスに相当するものを用意せず、かわりにノード番号が振られている。この構造体は配列上に配置され、このノード番号によってデータを参照できる。また、構造体には一ビットのフラグc_kが存在する。このフラグが真であった場合には、このノードでは実施例１の数１３の方法による変換を行い、このフラグが偽であった場合には、このノードでは実施例３の数２１の方法を用いた変換を行う。
【００９９】
図２１は、本実施例の動作の順序を示すフロー図である。2101〜2103, 2105〜2107においては、実施例１の1101〜1103, 1105〜1107動作とほぼ同一の内容であるため、説明は省略する。
【０１００】
図２２は、工程2104に対応する描画処理工程の処理内容を示すフロー図である。実施例１との違いは工程2201と2205に現れる。CPU501は、シーンツリーから順にモデルをたどる代わりに、モデル構造体の配列を先頭から順に選択していく（工程2201）。また、工程2205の二次元座標の計算処理における処理内容を図２３に示す。
【０１０１】
CPU501は、工程2301〜2308では、実施例１の工程1305に相当する処理を行う。工程2301ではK番目の頂点データに記載されているノード参照番号sn_k1,  sn_k2と、重み付け値 sw_k1, sw_k2を読み込み、数２２の計算を行う。
【０１０２】
【数２２】
2006293792.tif 000024
CPU501は、工程2302でモデルi のフラグc_iが真であるかどうかの判定を行い、真であった場合には、実施例１の手法を用いて射影行列P_ejを計算するため、工程2303で数１３の計算を行う。ノード のフラグc_kが偽であった場合には、実施例３の手法を用いて射影行列P_ejを計算するため、工程2304で数２１の計算を行う。
【０１０３】
得られたks_kの値を用いて、このP'eの値を用いて、数２３の計算を行いP“eを求める。
【０１０４】
【数２３】
2006293792.tif 000025
CPU501は、このP“eの値を用いて数２４の計算を行い、三次元頂点ベクトルv_kの値から二次元頂点ベクトルu_kを作成する。
【０１０５】
【数２４】
2006293792.tif 000026
以上の処理をk=0,1,2について繰り返して行うことで、三次元ベクトルの三角形を二次元画像のベクトルに変換する処理工程2205が終了する。
【０１０６】
この処理以外の処理は実施例１に準じる。
【０１０７】
以上の実施例により、中央視点位置から視聴したときの描画印象を変更しないままで、実施例１と実施例３の効果を混在させ、かつモデルの関節部分については滑らかなパラメータ切り替えの印象を維持したままで、立体表示映像の過剰な視差の発生を抑制することが可能となる。
【実施例５】
【０１０８】
前期実施例の各方法はインタラクティブに映像を作成する手段についての説明であるが、本発明はインタラクティブな利用に限定されるものではない。これらの出力結果を動画として保存して再生することや、結果を一枚の絵として印刷物を作成するなどの使用方法に用いることもできる。
【図面の簡単な説明】
【０１０９】
【図１】立体ディスプレイと視点位置の関係を示す図。
【図２】遠距離と近距離のオブジェクトの関係を示す図。
【図３】視差とオブジェクトの大きさの関係を示す図。
【図４】実施例１の装置の図。
【図５】情報処理装置の図。
【図６】実施例１のユーザインタフェース部を示す図。
【図７】立体ディスプレイによって提示される仮想空間を示す図。
【図８】実施例１の三次元モデルのデータ構造を示す図。
【図９】実施例１の三次元モデルの管理情報をあらわすデータ構造を示す図。
【図１０】実施例１における視差量の制御内容を示す図。
【図１１】実施例１の動作順序を示すフロー図。
【図１２】実施例１の描画前処理工程を示すフロー図。
【図１３】実施例１の描画処理工程を示すフロー図。
【図１４】実施例２における射影変換の制御内容を示す図。
【図１５】実施例２の三次元モデルの管理情報をあらわすデータ構造を示す図。
【図１６】実施例２の動作順序を示すフロー図。
【図１７】実施例２の描画前処理工程を示すフロー図。
【図１８】実施例２の描画処理工程を示すフロー図。
【図１９】実施例３の三次元モデルの頂点データ構造を示す図。
【図２０】実施例３の三次元モデルの管理情報をあらわすデータ構造を示す図。
【図２１】実施例３の動作順序を示すフロー図。
【図２２】実施例３の描画処理工程を示すフロー図。
【図２３】実施例３の射影変換の処理工程を示すフロー図。
【図２４】実施例１を適用して得られる効果を示す表示画像の例を示す図。
【符号の説明】
【０１１０】
400・・・立体映像生成装置、401・・・ディスプレイ、402・・・情報処理装置、403・・・インタフェース部、410〜412・・・利用者の理想的視点位置のひとつ、420・・・利用者の視点位置の代表位置、501・・・CPU、502・・・主記憶装置、503・・・I/F、504・・・記憶装置、505・・・画像出力装置、510・・・OS、511・・・実行プログラム、512・・・三次元表示情報、513・・・フレーム画像、514・・・合成プログラム、1000 描画対象のオブジェクト、1001・・・描画面、1002・・・中心視点位置(V)の仮想カメラ、1003・・・多眼視点位置(V)の仮想カメラ、1004・・・視差補正後の仮想カメラ、1005・・・描画中の頂点の立体映像の奥行き情報、1006・・・描画対象の頂点の位置、1400・・・描画対象のオブジェクト、1402・・・中心視点位置(V)の仮想カメラ、1403・・・多眼視点位置(V)の仮想カメラ、1404・・・視差補正後の中心視点位置(V)の仮想カメラ、1405・・・視差補正後の多眼視点位置(V)の仮想カメラ、1406・・・描画対象の頂点の位置、1407・・・オブジェクトのローカル座標での原点位置。
【図１】
2006293792.tif 000027
【図２】
2006293792.tif 000028
【図３】
2006293792.tif 000029
【図４】
2006293792.tif 000030
【図５】
2006293792.tif 000031
【図６】
2006293792.tif 000032
【図７】
2006293792.tif 000033
【図８】
2006293792.tif 000034
【図９】
2006293792.tif 000035
【図１０】
2006293792.tif 000036
【図１１】
2006293792.tif 000037
【図１２】
2006293792.tif 000038
【図１３】
2006293792.tif 000039
【図１４】
2006293792.tif 000040
【図１５】
2006293792.tif 000041
【図１６】
2006293792.tif 000042
【図１７】
2006293792.tif 000043
【図１８】
2006293792.tif 000044
【図１９】
2006293792.tif 000045
【図２０】
2006293792.tif 000046
【図２１】
2006293792.tif 000047
【図２２】
2006293792.tif 000048
【図２３】
2006293792.tif 000049
【図２４】
2006293792.tif 000050