2.1. 理想的な単一カメラ表現
透視投影行列を使って 3D シーンから画像を生成する場合、3D 座標から 2D 座標への変換に透視投影(中心射影)を使います。(図 2-1 参照)
単一カメラ表現では、カメラ中心から任意の距離に基準面を配置できます。ビューポートのサイズに合わせてウィンドウのコンテンツの大きさも変わります。
ビューポートに画像が表示されるとき、ビューポートとユーザー視点の角度関係がウィンドウとカメラの角度関係と同じになるのが、理想的なユーザー位置です。理想的なディスプレイに関する自由度はスケールだけです。ディスプレイが大きくなると、スクリーンから視点までの距離も比例して大きくなります。
理想的なユーザー位置は一定の距離を置いたスクリーン正面だと考えられます。この場合、左右対称の視錐体のカメラを使い、視野角 (FOV) を考慮すればよいわけです。しかし、ビューポートがスクリーン全域ではない場合は、左右非対称の視錐体が必要かもしれません。
話をシンプルにするため、次の節ではビューポートがスクリーン全体と一致することを前提とします。
しかしながら、理想的な視点位置ではないからといって表示される画像が破たんするわけではありません。この効果を芸術的に活かすことも可能です。例えば、映画では観客に伝えたい印象を考慮して理想的ではない FOV を使うことがあります。ダイナミックに FOV を変えることで特別な効果を出すことも可能です。(例:ドリーズーム)
2.2. 理想的な立体視表現
1 つのスクリーンに 2 つの画像を表示することで立体視が実現されます。1 つはユーザーの左目が見る画像で、もう 1 つは右目用です。
ユーザーの標準的なプレイ姿勢における目の位置と、仮想空間における理想的な視点位置とを合致させることで、理想的な立体視表現を行うことが可能です。
通常、スクリーンの中央正面にプレイヤーがいるものとして視点位置が設定されます。そのときの設定は左右対称となります。つまり目は中心線を挟んで左右に等間隔に位置しているといえます。(図 2-2 参照)
仮想空間における標準的な目の位置に合致する 2 つのカメラで立体視カメラは構成されます。
2 つのカメラを水平方向にずらして標準的な視聴状況でのユーザーの目の位置、FOV になるように配置することで理想的な立体視カメラを生成できます。
しかしながら、ここで 1 つ自由度が残ります。仮想のウィンドウはカメラから任意の距離に置くことができます(図 2-3 参照)。
立体視表現にあわせて、このウィンドウ位置は開発者が定めなければなりません。仮想空間のどの面がスクリーン面として適切なのか、どのオブジェクトをスクリーンの前もしくは後ろに描画するのかを決めてください。ウィンドウの深度つまり位置を変えた場合は、描画されるオブジェクトの表示サイズも変わります。
ウィンドウはベースカメラから任意の距離に置くことができます。例としてウィンドウ 1、ウィンドウ 2 を考えます。ウィンドウ 1 の場合、オブジェクトはスクリーンの後ろにあります。一方ウィンドウ 2 の場合、オブジェクトはスクリーンの前にあります。
図 2-3 のように、両カメラのウィンドウは一致しなければなりません。結果として視点方向(ウィンドウ面の法線)は同じになり、ウィンドウ面を覆う視錐台は左右非対称になります。
画面サイズに沿った標準的な視認距離により、スクリーンに覆われる FOV が決まっています。理想的な立体視を実現する場合は、カメラはこの FOV を使うべきです。
2.3. 理想的なダイナミック単一カメラ
スクリーンに対するユーザーの相対位置がわかれば、現在のユーザー位置に合致する理想的な位置の画像を算出することが可能です。この手法をダイナミックパースペクティブと呼びます。
ユーザーの正確な位置がビューポート座標系で把握できるとします。カメラを配置するため、仮想空間のウィンドウ座標系を定義する必要があります。ウィンドウは現実空間における標準の視聴位置に相当するベースカメラから生成できます。
ウィンドウは視線方向に直交する任意の位置に設定できます。ウィンドウの位置が回転の中心になるため、カメラからウィンドウの距離によって、描画されるオブジェクトの見え方が変わります。理想的なダイナミックカメラを実現するには、ユーザーの移動に合わせて、図 2-4 のダイナミックカメラの位置のようにベースカメラを回転させる必要があります。これは立体視カメラでも同じことを意味します。
2.4. 理想的なダイナミック立体視カメラ
ダイナミックな立体視カメラを開発するためには、仮想空間でのウィンドウの位置を決め、先ほどのダイナミック単一カメラの場合と同様に、ユーザーの目の位置をカメラ位置として使う必要があります。