Version: 2019.4
言語: 日本語
複数のカメラを使用する
カメラのテクニック

物理カメラの使用

カメラコンポーネント の Physical Camera (物理カメラ) プロパティは、Unity カメラで現実世界のカメラ形式のシミュレーションを行います。これは、現実世界のカメラを模倣した 3D モデリングアプリケーションからカメラ情報をインポートするのに便利です。

Unity はほとんどの 3D モデリングアプリケーションの物理カメラ設定と同じ設定を提供します。カメラが見ているものを制御する主な 2 つのプロパティは、Focal Length (焦点距離) と Sensor Size (センサーサイズ) です。

  • Focal Length: センサーとカメラレンズ間の距離。垂直方向の有効視野 (FOV) を決定します。Unity カメラが Physical Camera モードのとき、Focal Length を変更すると FOV もそれに応じて変更されます。Focal Length が短くなると FOV が大きくなり、その逆もまたしかりです。

    カメラの Focal Length (焦点距離)、FOV、Sensor Size (センサーサイズ) の関係
    カメラの Focal Length (焦点距離)、FOV、Sensor Size (センサーサイズ) の関係
  • Sensor Size: 画像をキャプチャーするセンサーの幅と高さ。これらは物理カメラのアスペクト比を決定します。現実世界のカメラ形式に対応したいくつかのプリセットのセンサーサイズから選択するか、または、カスタムサイズを設定できます。ゲームビューに設定したときに、センサーのアスペクト比がレンダリングされたアスペクト比と異なる場合、レンダリングされた画像に対してカメラ画像を一致させる方法を制御できます (後述の Gate Fit の情報を参照)。

レンズシフト

Lens Shift (レンズシフト) は、カメラのレンズをセンサーから水平方向と垂直方向にオフセットします。これにより、焦点の中心を変更したり、レンダリングされたフレーム内の対象を、歪みの少ない、または歪みのない状態で再配置できます。

このテクニックは建築写真でよく見られます。例えば、高い建物をキャプチャーしたい場合は、カメラを回転させることができます。しかし、それは画像を歪ませ、2 本の垂直線が収束するように見えます。

建物の上部を撮影するためにカメラを回転させると、垂直線が収束するように見える原因になります
建物の上部を撮影するためにカメラを回転させると、垂直線が収束するように見える原因になります

カメラを回転させる代わりにレンズを上に移動すると、建物の上部を含むように画像の構図を変えることができ、しかも 2 本の垂直線がまっすぐにとどまります (収束しません)。

Y 軸に沿ってレンズを移動すると、焦点の中心は移動しますが、垂直線は真っ直ぐなままです
Y 軸に沿ってレンズを移動すると、焦点の中心は移動しますが、垂直線は真っ直ぐなままです

同様に、水平のレンズシフトを使用して、カメラを回転させることによって歪みを生じることなく、幅の広いオブジェクトをキャプチャできます。

(上段) 建物をフレームに収めるためにカメラを回転させると、水平線が収束します。(下段) 代わりに、レンズを水平方向に移動して、画像を再度フレームに収めると、水平線は真っ直ぐに保たれます (収束しません)。
(上段) 建物をフレームに収めるためにカメラを回転させると、水平線が収束します。(下段) 代わりに、レンズを水平方向に移動して、画像を再度フレームに収めると、水平線は真っ直ぐに保たれます (収束しません)。

レンズシフトと錐台の傾き

レンズシフトの 1 つの副作用は、カメラの 視錐台 を斜めにしていることです。つまり、カメラの中心線と錐台の間の角度は、1 方の角度がもう 1 方の角度よりも小さくなります。

上図は、Y 軸のレンズシフトを行う前 (左) と行った後 (右) のカメラ錐台を示しています。レンズを上に移動すると錐台が斜めになります。
上図は、Y 軸のレンズシフトを行う前 (左) と行った後 (右) のカメラ錐台を示しています。レンズを上に移動すると錐台が斜めになります。

これを使用して、透視に基づいた視覚エフェクトを作成できます。例えば、レースゲームでは、遠近感を地面に対して近くに保ちたい場合があります。レンズシフトは、スクリプティングなしに斜め錐台を達成する方法です。

詳細については、斜めの錐台の使用を参照してください。

Gate Fit

Camera コンポーネントの Gate Fit プロパティは、ゲームビューと物理カメラセンサーが異なるアスペクト比を持つ場合の動作を決定します。

Physical Camera モードでは、カメラに 2 つの “ゲート” があります。

  • Aspect ドロップダウンメニューで設定した解像度に応じて、ゲームビューでレンダリングされるエリアを “解像度ゲート” と呼びます。

  • Sensor Size プロパティの定義に応じて、カメラが実際に見るエリアを “フィルムゲート” と呼びます。

2 つのゲートのアスペクト比が異なるときの解像度ゲートとフィルムゲートの例
2 つのゲートのアスペクト比が異なるときの解像度ゲートとフィルムゲートの例

2 つのゲートのアスペクト比が異なる場合、Unity は解像度ゲートをフィルムゲートに “フィット” (一致) させます。いくつかのフィットモードがありますが、それらはすべて 3 つの結果のうちのいずれかになります。

  • トリミング: フィッティング後にフィルムゲートが解像度ゲートを超える場合、ゲームビューはカメラ画像のアスペクト比にフィットする最大限の画像をレンダリングし、残りは除きます。
  • オーバースキャン: フィッティング後にフィルムゲートが解像度ゲートを超える場合でも、ゲームビューはカメラの FOV の外側にあるシーン部分のレンダリング計算を実行します。
  • 伸縮: ゲームビューは、カメラの画像全体をレンダリングし、カメラ画像のアスペクト比に合わせて水平方向または垂直方向に伸縮します。

シーンビューでゲートを表示しそれらがどのようにフィットしているかを見るには、カメラを選択し視錐台を見ます。解像度ゲートはカメラのファークリップ面です。フィルムゲートは、錐台の底の 2 番目の矩形です。

上の例では、カメラの視錐台の底にある外側の矩形 (A) が解像度ゲート。内側の矩形 (B) がフィルムゲート。
上の例では、カメラの視錐台の底にある外側の矩形 (A) が解像度ゲート。内側の矩形 (B) がフィルムゲート。

Gate Fit モード

Gate Fit モードの選択に応じて、Unity が解像度ゲート (つまりカメラの視錐台) のサイズを変更する方法が決まります。フィルムゲートは常に同じサイズのままです。

以下は、各 Gate Fit モードの詳細についての説明です。

Vertical

Gate Fit を Vertical に設定すると、Unity は解像度ゲートをフィルムゲートの高さ (Y 軸) に合わせます。センサーの幅 (Sensor Size > X) を変更しても、レンダリングされた画像には影響しません。

センサーのアスペクト比がゲームビューのアスペクト比より大きい場合は、レンダリングされた画像の側面がトリミングされます。

Gate Fit を Vertical に設定: 解像度ゲートのアスペクト比は 0.66:1 (600 x 900 ピクセル) です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。赤い領域は、Unity がゲームビューでトリミングする部分を示しています。
Gate Fit を Vertical に設定: 解像度ゲートのアスペクト比は 0.66:1 (600 x 900 ピクセル) です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。赤い領域は、Unity がゲームビューでトリミングする部分を示しています。

センサーのアスペクト比がゲームビューのアスペクト比よりも小さい場合、Unity はレンダリングされた画像の両側にオーバースキャンします。

Gate Fit を Vertical に設定: 解像度ゲートのアスペクト比は 16:9 です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。緑色の領域は、Unity がゲームビューで画像をオーバースキャンしている部分を示しています。
Gate Fit を Vertical に設定: 解像度ゲートのアスペクト比は 16:9 です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。緑色の領域は、Unity がゲームビューで画像をオーバースキャンしている部分を示しています。

Horizontal

Gate Fit を Horizontal に設定すると、Unity は解像度ゲートをフィルムゲートの幅 (X 軸) に合わせます。センサーの高さ (Sensor Size > Y) を変更しても、レンダリングされた画像には影響しません。

センサーのアスペクト比がゲームビューのアスペクト比よりも大きい場合、Unity はレンダリングされた画像の上下にオーバースキャンします。

Gate Fit を Horizontal に設定: 解像度ゲートのアスペクト比は 0.66:1 (600 x 900 ピクセル) です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。緑色の領域は、Unity がゲームビューでオーバースキャンする画像を示しています。
Gate Fit を Horizontal に設定: 解像度ゲートのアスペクト比は 0.66:1 (600 x 900 ピクセル) です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。緑色の領域は、Unity がゲームビューでオーバースキャンする画像を示しています。

センサーのアスペクト比がゲームビューのアスペクト比よりも小さい場合、Unity はレンダリングされた画像の上下をトリミングします。

Gate Fit を Horizontal に設定: 解像度ゲートのアスペクト比は 16:9 です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。赤い領域は、Unity がゲームビューで画像をトリミングする部分を示しています。
Gate Fit を Horizontal に設定: 解像度ゲートのアスペクト比は 16:9 です。フィルムゲートのアスペクト比は 1.37:1 (16mm) です。赤い領域は、Unity がゲームビューで画像をトリミングする部分を示しています。

None

Gate Fit を None に設定すると、Unity は解像度ゲートをフィルムゲートの幅と高さ (X 軸と Y 軸) に合わせます。Unity はレンダリングされた画像をゲームビューのアスペクト比に合わせて伸縮させます。

ゲートフィットなし。カメラは 1.37:1 (16mm) のフィルムゲートアスペクト比を使用し、画像を水平方向に伸ばしてゲームビューのアスペクト比 16:9 に合わせ (左) 、画像を垂直方向に伸ばしてゲームビューのアスペクト比 0.66:1 に合わせます (右)。
ゲートフィットなし。カメラは 1.37:1 (16mm) のフィルムゲートアスペクト比を使用し、画像を水平方向に伸ばしてゲームビューのアスペクト比 16:9 に合わせ (左) 、画像を垂直方向に伸ばしてゲームビューのアスペクト比 0.66:1 に合わせます (右)。

Fill と Overscan

Gate Fit を Fill または Overscan に設定すると、解像度ゲートとフィルムゲートのアスペクト比に応じて、Unity は自動的に垂直か水平方向いずれかへ合わせます。

  • Fill は解像度ゲートをフィルムゲートの小さい方の軸に合わせ、カメラ画像の残りの部分をトリミングします。
  • Overscan は、解像度ゲートをフィルムゲートの大きい方の軸に合わせ、カメラ画像の境界の外側の部分をオーバースキャンします。

  • 2018–10–05 修正されたページ

  • Physical Camera オプションは2018.2 で追加 NewIn20182

  • Gate Fit オプションは Unity 2018.3 で追加

複数のカメラを使用する
カメラのテクニック