GarnetVision
Gernet Vision は菱形12面体で構成された、没入型ディスプレイである。この菱形12面体は、その名の通り、互いに合同な12枚の菱形を組み合わせた構成になっており、没入型ディスプレイとしては、ピクセル効率・容積効率の面から、優れた形状である。
ピクセル効率とは、プロジェクタが投影するアスペクト比4:3の映像を、スクリーンに対してどれくらいの割合が有効に利用されるかというものである。スクリーンが正方形の場合だと75%、菱形だと71%となる。容積効率とは、スクリーンに囲まれている有効容積(多面体の容積)と、プロジェクタの光路のスペースとなる無効容積の総和との比を表している。スクリーンの縦の長さを1とするときの、スクリーンとプロジェクタとの距離をDとすると、立方体の場合は 0.5/D、菱形12面体の場合はおよそ0.867/Dとなる。
12面体の内部には、アクリル製の土台が設置されており、使用者はそこに立つことで、スクリーンに投影された全天周映像を見渡すことができる。
12面体ディスプレイの概要
菱形12面体は互いに合同な12枚の菱形からなっており(図1)、没入型ディスプレイとしてはピクセル効率、容積効率の点から優れた形状である。ピクセル効率とは、プロジェクタが投影するアスペクト比4:3の映像を、スクリーンに対してどれくらいの割合が有効に利用されるかというものである。スクリーンが正方形の場合だと75%、菱形だと71%となる。容積効率とは、スクリーンに囲まれている有効容積(多面体の容積)と、プロジェクタの光路のスペースとなる無効容積の総和との比を表している。スクリーンの縦の長さを1とするときの、スクリーンとプロジェクタとの距離をDとすると、立方体の場合は 0.5/D、菱形12面体の場合はおよそ0.867/Dとなる。
図1 菱形12面体
図2:菱形12面体ディスプレイの構造
図3:菱形12面体ディスプレイ
図2は菱形12面体による全立体角ディスプレイの概略図で、図3は試作された菱形12面体ディスプレイの概観である。菱形の一辺の長さは1200[mm]で、全18本のアルミアングル材を用いて菱形のフレームを構成している。フレームには菱形に切り出したトレーシングペーパーを貼り付けてあり、これをスクリーンとしている。スクリーン中央には透明アクリル製の台があり、その上に人が立ってスクリーンを一望できるようにしている。スクリーンのフレームやプロジェクタは、周りに組んである外枠によって固定されている。映像を投影するプロジェクタはカシオのFV600(画素数250000)で、各面に対して垂直かつ面の中心に光軸が来るように配置されている。投影効率を最も良い状態にするため、菱形の長辺がプロジェクタの対角になるよう、光軸周りに約36.8度だけ傾けて投影している。
各スクリーンに投影される映像は、描画用のコンピュータによって生成される。描画にはコンピュータの機種依存性の少ないOpenGLを用いている。複数のスクリーンに同時に画像を生成する方法としては、複数台のコンピュータで同期をとりながら画像を生成するのが一般的であるが、ここで利用したプロジェクタの解像度が低いことから、1台のコンピュータで12面分の映像を生成することにしている。12面分の映像は、CRT前面に取りつけられた12機のCCDカメラ(STC-540LS,画素数750000)によってNTSCに変換され、各プロジェクタに入力される。
12面体ディスプレイ用コンピュータ画像生成
この菱形12面体に計算機によるCG映像を投影するために、本ディスプレイの仕様からそれに合わせた映像を作成する。
まず、それぞれのスクリーンに対して正常な画を投影するためには、あらかじめスクリーンの位置や傾き、大きさなどを調べておく必要がある。ある1枚のスクリーンに着目すると、そのスクリーンで投影されるべき画像は、中にいる人があたかも菱形の窓を通して外を見ているような景色であればよいことになる。描画のためには、まず視線の位置、方向を決定しなければならない。そこで便宜的に図4のように各スクリーンに対して番号をふり座標系をとると、視点を12面体の中心にもってくるとき、各スクリーンの視点の回転行列は次のようになる。
図4 12面スクリーンの位置
但し、alpha=tan-1(3/4)であり、プロジェクタの光軸まわりの回転を意味する。これらを視点変換に用いることで、各スクリーンへの正しい映像が得ることができる。
次に12枚の画像を同時に生成するため、12個のビューポートをカメラの位置に合わせて設定する。
プロジェクタの解像度はおよそ320x240である。またCRTの解像度は一般に1280x1024であることから、4行3列にビューポートを並べればよいことになる。以上のことが決定された後はプログラムへの実装である。
プログラムの流れは以下のようになる。
初期化
内部状態やウインドウを初期化する。ウインドウの位置、大きさはあらかじめ微調整して定めておいた値を用いる。時間の進行
時間の進行にともなって変化する内部状態を更新する。12枚の画像の同期をとるためには、12枚分の時間進行処理を一括しておこなう必要がある。したがって描画を開始する前に仮想世界の時間や状態をここで変更し、12枚の描画が終わるまで内部状態が変更できないようにしておく。ビューポートのセット
12枚のうちの1つのビューポートを準備する。ビューポートの位置はあらかじめ微調整して定めておいた値を用いる。視点のセット
12面スクリーンのうちの1つの視点変換を前述のRを利用しておこなう。描画
内部状態に基づいたシーンを描画する。菱形の外側の投影に不必要な部分をなくすために菱形の窓も同時に描画する。映像における視点変換はここでおこなう。
12枚分の描画が終了するまで、3,4,5を繰り返す。全ての描画が終了したら2にもどって繰り返す。1回の時間の進行につき描画が12回繰り返されるため、描画に時間を要するような複雑なモデルを生成することは難しい。高速化を図るため、3,4及び5の一部の処理はOpenGLのディスプレイリストの機能を用いている。12個のビューポートにそれぞれの絵を描画している様子を図5に示す。この表示画像の正面には、4行3列で等間隔に配置したCCDカメラが配置され、12面分の映像を取り込んでいる。
図5 生成した画像
アナグリフ方式による立体視
立体視の方式で一般に用いられているのは、偏光レンズを用いた偏光方式や液晶シャッタを利用した時分割方式である。偏光方式は立体映画などに広く用いられている手法である。縦偏光と横偏光の画像を同時に映写し、観察者は左右に縦、横偏光レンズの眼鏡をつけて左右独立の映像を得ることで立体視をおこなうものである。時分割方式は左右の映像を高速に切り替え、観察者の液晶シャッタによって左右の映像を分離するもので、イベント会場でよく見られる方式である。
菱形12面体では映像の投影に液晶プロジェクタを用いているため、立体視をおこなうことを考える場合、立体視の方式の選択の幅が格段に狭くなる。まず、液晶プロジェクタでは液晶の偏向によって光をコントロールしていることから、偏向方式の立体視は不可能となる。また液晶の偏向を切り替わる速度は、時分割表示に耐えるほど高速ではないため、時分割方式を実現するのも困難である。そこで代替の方式としてアナグリフ方式の実装を試みた。アナグリフ方式は赤青レンズによって左右成分の分離をおこなうもので、児童向け雑誌の付録などによく見られる。これを実装する段階で問題になったのが、赤青映像の分離が可能かどうかである。つまり赤いフィルタを通して見る映像は青い映像しか見えてはならず、青いフィルタからは赤い映像だけを見せなければならない。この問題に対して、プロジェクタ映像に赤青のテストパターンを表示し、前述の条件を満たすように色調整を通して最も見えの良い状態を作り出した。
図6はその試行によって得られた赤(R,G,B=0.8,0.0,0.0)、青(R,G,B=0.0,0.0,0.16)による両眼映像である。
図6 アナグリフ方式による生成画像
実際にアナグリフによる立体視を呈示してみたところ、広い空間等の奥行き感は生成されることがわかった。しかしながら細かいものを呈示した場合、立体に見えるのか見えないのかわからない状態であった。これはプロジェクタの解像度が少ないため、赤青画像がつぶれてしまうことが原因であると考えられる。またスクリーンの継ぎ目の部分に視差画像が来ると、不整合が生じることもわかった。これはスクリーン中央から各面に臨むとき、視差を左右方向につけているためで、各面に対して各々の視差をつけていることに起因している。したがってこの問題を完全に解消するには、全天周の映像を球などで近似し視差を発生させる必要があるだろう。