Unity2018.2から導入されたPhysical Cameraを使ってCameraコンポーネントを現実のカメラのように取り扱う方法をまとめました。
Unity2018.3.12
Physical Camera?
Unity2018.2からCameraコンポーネントにPhysical Cameraのチェックボックスが追加されました。
これにチェックを入れると、イメージセンサのサイズや焦点距離などを設定できるようになります。
イメージセンサとは現実世界のカメラに搭載されている部品の名前です。
また現実世界のカメラでは、焦点距離を変更することで画角を調整します。
つまり一言で言えば、Physical Cameraとは現実世界のカメラをシミュレーションできる機能です。
焦点距離・センササイズ・画角の基礎知識
Physical Cameraを使うためには現実のカメラの仕組みをある程度知っておく必要があります。
これについては次の記事にまとめているので必要に応じて参照してください。
Focal LengthとSensor Sizeを設定する
それでは実際にPhysical Cameraの設定値を見ていきます。
Focal LengthとSensor Sizeはそのままですが焦点距離とセンササイズを意味します。
そして焦点距離とセンササイズが決まれば画角が決まります。
これらの値を動かすとField of Viewの値が自動的に変わっていくのが確認できます。
ちなみにSensor Typeはセンササイズのプリセットです。
Lens Shift
Lens Shiftを使うとシフトレンズを使った時のような効果を得られます。
シフトレンズとはカメラのレンズの一種で、建物を撮影するときによく使われます。
例えば今高いビルのような建物を下から撮影することを考えます。
このとき、下から撮影しているので建物が歪んで見えてしまいます。
このようなケースでシフトレンズを使うと、建物を歪ませずに撮影できます。
カメラを地面と水平にしたうえでLens Shiftの値を次のように設定してみます。
するとレンダリング結果は次のようになり、建物の歪みが解消されていることが確認できます。
Gate Fit
次にGate Fitの説明をします。これは若干複雑です。
まずここでカメラのアスペクト比について考えてみます。
現実のカメラでは、アスペクト比はイメージセンサの縦横比で決まります。
そう考えるとPhysics Cameraのセンササイズによってアスペクト比が決まってきそうです。
しかしながらUnity上では、画面のアスペクト比はセンササイズに関係なく自由に設定できます。
さらに例えばモバイルプラットフォーム向けにビルドした場合、アスペクト比は端末によって変わります。
つまりPhysics Cameraにセンササイズを指定しつつ、レンダリング結果のアスペクト比も指定するということは、
アスペクト比を決定する要因が二つあるという矛盾を抱えていることになります。
じゃあどうするかというと、画面のアスペクト比は変えられないので、
画面のアスペクト比に合わせて実際にカメラが映す範囲を決める必要があります。
この合わせ方の設定がGate Fitです。
Gate FitをOverScanにすると、Physical Cameraが写す範囲が見切れないように描画範囲を決定します。
Gate FitをFillにすると、Physical Cameraが写す範囲内に収まるように描画範囲が決定されます。
VerticalとHorizontalはそれぞれPhysical Cameraの縦幅、横幅に合わせて描画範囲を決めます。