こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのCameraコンポーネントについて知りたい!」
「Cameraコンポーネントの設定が分からない。」
というお悩みの方に向けた内容となっています。
Unityでは、ゲーム画面を映し出すための機能として、Cameraコンポーネントというものがあります。
このCameraコンポーネントは、ゲームをプレイするユーザーに見てもらう画面を決めている項目で、ゲーム内で撮影をしてその画面や映像を表示するという役割を持っています。
本物のカメラと同じように、ピントを合わせたりズームしたりなど様々な設定を行うことができます。
そこで、このページでは、UnityのCameraコンポーネントについて、どういう仕組みになっているのか、またCameraコンポーネントの設定や使い方についてまとめていきます。
- Camera(カメラ)コンポーネントとは?
- Camera(カメラ)コンポーネントの使い方
- カメラオブジェクトの作成とともに紐づけられる
- Camera(カメラ)コンポーネントの設定項目
- Render Type:カメラ映像の表示タイプを決める
- Projection:カメラ撮影の細かい設定項目を決める
- Rendering:カメラ映像の描画方法を決める
- Renderer:カメラが使用するレンダラーを指定する
- Post Processing:ポストプロセシングを使うかどうかを決める
- Anti-aliasing:アンチエイリアスの設定を行う項目
- Stop NaNs:非数(NaNs)のピクセルを黒に置き換える
- Dithering:ディザリングを行う項目
- Render Shadows:影を表示するかどうかを決める
- Priority:カメラの描画順を決める値
- Opaque Texture:描画された映像をテクスチャ加工するかどうか
- Depth Texture:カメラからの奥行き情報でテクスチャ加工するかどうか
- Culling Mask:カメラで表示するレイヤーを指定する
- Occlusion Culling:映らない範囲の映像のレンダリング処理をしない設定
- Stack:描画するOverlayカメラを選択する
- Environment:カメラの背景やVolumeとの連携を決める項目
- Output:カメラ映像の出力の設定
- カメラの移動や回転はtransformで設定できる
- まとめ
Camera(カメラ)コンポーネントとは?
Camera(カメラ)コンポーネントとは、プレイヤーに対してゲーム内の画面を表示するための役割を持っています。
もう少し詳しく言えば、Unity内で動いているゲームの中で、実際にプレイヤーが遊ぶ際に画面に表示される部分を決めているのが、このCameraコンポーネントです。
Unityで新しくプロジェクトを作成すると、初めから「Main Camera」というオブジェクトが作成されていると思います。

このMain Cameraというオブジェクトには、Cameraコンポーネントがすでに紐づいている状態なので、何も設定をしなくても最初からゲーム画面を映し出せるようになっています。

他にも、Cameraコンポーネントの設定を使って、カメラの視野を変えたり、解像度の設定を行ったりすることができます。
Camera(カメラ)コンポーネントの使い方
ここからは、Cameraコンポーネントの使い方や設定項目についてまとめていきます。
カメラオブジェクトの作成とともに紐づけられる
Cameraコンポーネントを使う際は、カメラオブジェクトを作成すると、自動的にCameraコンポーネントが紐づけられたオブジェクトが作成されます。
具体的には、ヒエラルキーウィンドウの+ボタンから「Camera」を選択します。

すると、カメラオブジェクトが作成されて、最初から配置されているカメラオブジェクトと同じく、Cameraコンポーネントが紐づけされているのが分かります。

なお、この作成されたカメラオブジェクトには、ゲーム内の音声を拾うためのAudio Listenerコンポーネントも一緒に紐づけられてきます。

Camera(カメラ)コンポーネントの設定項目
Cameraコンポーネントには、以下のように様々な設定項目があります。

3Dのデータを2Dの映像に変換するレンダリングパイプラインをどれにするかによって、Cameraコンポーネントの設定項目の一部が異なりますが、ここではUniversal Render Pipeline(URP)における設定項目を紹介していきます。
Render Type:カメラ映像の表示タイプを決める

Render Typeは、カメラの描画タイプを決めている項目で、以下の2つから選択できます。
Baseタイプのカメラの「Stack」という設定項目で、Overlayタイプのカメラを関連付けてあげることで、Overlayカメラの映像を重ねて表示することができます。
例えば、Baseタイプのカメラでの映像として、以下の白いオブジェクトだけを映るようにします。

また、別でOverlayタイプのカメラを2つ用意して、それぞれに青と赤のオブジェクトを映すようにしておきます。


そして、BaseタイプのカメラのStackにOverlayタイプのカメラを紐づけてあげることで、

Baseカメラの映像の上に、Overlayカメラの映像が表示されているのがわかります。
なお、Baseタイプのカメラはプロジェクトに1つ以上必ず必要になります。
Projection:カメラ撮影の細かい設定項目を決める

Projection:遠近感をどのように表現するかを決める

Projectionは、カメラで撮影している映像の遠近感をどのように表現するかを決める項目です。
Perspectiveは、実際に目で見たときのような表現方法で、カメラから遠いオブジェクトは小さく、カメラから近いオブジェクトは大きく描画されるため、3Dゲームでよく使われる設定です。
一方、Orthographicは、カメラとの距離に関係なくオブジェクトの大きさが一定に描画される表現方法で、2Dゲームでよく使われる設定です。
例えば、以下はPerspective設定の映像となっていて、同じ大きさの2つのオブジェクトですが、距離が離れているのが分かります。

全く同じ条件でOrthographicに変更すると、以下のように遠近感が無くなり実際のオブジェクトの大きさがそのまま表示されることになります。

Field of View Axis:カメラの視野(画角)の決め方の項目

Field of View Axisは、カメラの撮影範囲である視野(Field of View)を決めるための計算方式を選択する項目です。
Projectionの項目で「Perspective」を選択した際に表示される設定で、以下の2つから計算方法を決めることができます。

Field of View:カメラの視野角を決める項目

Field of Viewは、カメラの撮影範囲の視野角を設定する項目です。
Projectionの項目で「Perspective」を選択した際に表示される設定で、前のField of View Axisで指定した方向における視野角を設定します。
このField of Viewの値が小さければ小さいほどカメラの撮影範囲は狭くなり、オブジェクトが大きく表示されます。
また、Field of Viewの値が大きければ大きいほど撮影範囲が広くなり、オブジェクトが小さく表示されるようになります。
例えば、以下の左の映像がField of View「33」、右の映像が「96」にした場合の比較をしています。


なお、カメラワークでズームインやズームアウトする場合に、このField of Viewの値を変動することで実現できます。
Size:カメラの撮影範囲の大きさを設定する項目

Sizeは、カメラの撮影範囲の大きさを設定する項目となっています。
Projectionの項目で「Orthographic」を選択した際に表示される設定です。
このSizeの値が、大きければ大きいほど撮影範囲が広がり、小さければ小さいほど撮影範囲が狭くなります。
例えば、以下の左の映像がSize「2」、右の映像が「8」にした場合の比較をしています。


Clipping Planes:撮影を開始・停止する距離を設定

Clipping Planesは、カメラのレンダリングを開始する距離と停止する距離を設定する項目です。
もう少し簡単に言えば、カメラからどれだけ近い距離のものを撮影するか、またカメラからどれだけ遠い距離のものを撮影するかを決める項目です。
このClipping Planesの設定では、以下の「Near」と「Far」の2つの項目があります。
このNearとFarの間がカメラの撮影範囲で、カメラオブジェクトを選択した際にシーンビューに範囲が表示されます。

Nearの値を大きくすればするほど、カメラから近い距離にあるオブジェクトは、描画されなくなります。
また、Farの値を大きくすればするほど、カメラから遠い距離にあるオブジェクトも、描画されるようになります。
Physical Camera:物理カメラの設定を行う項目

Physical Cameraは物理カメラと呼ばれ、実際のカメラにある特性や性能を考慮した設定ができるようになる項目です。
Projectionの項目で「Perspective」を選択した際に表示される設定で、Physical Cameraの項目にチェックを入れることで、物理カメラのシミュレートを行うことができるようになります。
物理カメラにすることで、通常のカメラでは設定できない焦点距離やセンサーサイズなどを設定することができるようになり、よりリアルな映像で描画することができます。

なお、物理カメラの設定については、また別記事でまとめていきます。
Rendering:カメラ映像の描画方法を決める

Renderer:カメラが使用するレンダラーを指定する

Rendererは、カメラで撮影した映像の情報を処理して、画面に表示するためのレンダラーを指定する項目です。
Unityでは、ビルトインレンダラー・URP・HDRPなどのレンダラーが用意されています。
利用しているレンダーパイプラインのアセット設定で、Renderer Listに追加したレンダラーを選択できます。

Post Processing:ポストプロセシングを使うかどうかを決める

Post Processingは、カメラの映像を処理する際にポストプロセシングを使うかどうかを決める項目です。
ポストプロセシングとは、エフェクトやフィルターをカメラ映像に適用することで、画質を向上させたり、特定の効果を付けることができるようになります。
ポストプロセシングを使う場合はチェックを付けることで、シーンビューにポストプロセシングを使っているマークが表示されます。

Anti-aliasing:アンチエイリアスの設定を行う項目

Anti-aliasing(アンチエイリアス)は、カメラで撮影している映像をより滑らかにして描画することができる項目です。
前のPost Processingの設定を基にしているので、Anti-aliasingを使う場合は、Post Processingにチェックが入っている必要があります。
Anti-aliasingは、以下の4つから選ぶことができます。
例えば、以下の左の画像はアンチエイリアス処理を行わず、右の画像は「FXAA」によるアンチエイリアス処理を行っています。


球体の端のギザギザ部分が少し滑らかになっているのがわかります。
Stop NaNs:非数(NaNs)のピクセルを黒に置き換える

Stop NaNsは、非数(NaNs)のピクセルが発生した際に、黒いピクセルに置き換えるかどうかを決める項目です。
例えば、シェーダーなどによって未定義となる非数(NaN)が生成されてしまった際などに処理が行われるようになります。
Dithering:ディザリングを行う項目

Dithering(ディザリング)とは、意図的に映像に少量のノイズを加えることで、より自然に見せるための描画手法です。
映像などのグラデーションでは、バンディングと呼ばれる縞模様が現れてしまうことがあり、ディザリングを使うことでこのバンディングを抑制する効果があります。
Render Shadows:影を表示するかどうかを決める

Render Shadowsは、画面上に影を表示して描画するかどうかを決める項目です。
このRender Shadowsは、デフォルトでチェックが入っている状態で、チェックを外すと画面内に影が表示されなくなります。
以下の左の画像はRender Shadowsをオン、右の画像はRender Shadowsをオフにしていて、影の表示が異なるのが分かります。


Priority:カメラの描画順を決める値

Priorityは、複数のカメラオブジェクトがある際に、どのカメラを順番に描画するかを決めている項目です。
このPriorityは、-100から100までの数値を入力することができ、数値が小さいカメラの上に数値が大きいカメラが描画されることになります。
Opaque Texture:描画された映像をテクスチャ加工するかどうか

Opaque Textureは、カメラで描画した画像のコピーのことを指していて、このOpaque Textureを生成することで、シェーダーなどでテクスチャ加工することができます。
このOpaque Textureは、以下の3つから選ぶことができます。
Depth Texture:カメラからの奥行き情報でテクスチャ加工するかどうか

Depth Textureは、カメラからの奥行き・深度のデータを持っている画像のことを指していて、このDepth Textureを生成することで、シェーダーを使って奥行きによってテクスチャ加工をかけることができるようになります。
このDepth Textureは、深度テクスチャとも呼ばれ、以下の3つから選ぶことができます。
Culling Mask:カメラで表示するレイヤーを指定する

Culling Maskは、そのカメラで映像を表示するレイヤーを指定することができる項目です。
特定のオブジェクトをカメラの映像で描かれないようにしたい場合、レイヤーを指定してチェックを外してあげることで取り除くことができます。
デフォルトでは、このCulling Maskは「Everything」になっています。
Occlusion Culling:映らない範囲の映像のレンダリング処理をしない設定

Occlusion Cullingは、そのカメラで手前に表示されているオブジェクトによって、奥のオブジェクトが映らない場合に、その映らない範囲のレンダリング処理を行わないようにする設定です。
このOcclusion Cullingは、デフォルトでチェックが入っていて、オンにしておくことで映らないオブジェクトを描画しないようにするので、パフォーマンスの向上に繋がります。
Stack:描画するOverlayカメラを選択する

Stackは、Render Typeの項目で「Base」カメラを選択している場合に表示され、描画させたい「Overlay」カメラを選択することができます。
ここで選択したOverlayカメラは、Baseカメラの上に映像が重ねて表示されるようになります。
また、Stackでは複数のOverlayカメラを選択することができます。
ドラッグ&ドロップでそれぞれのOverlayカメラの描画順を変更することができ、上から順番に描画されていくことになるので、一番下のOverlayカメラの映像が一番手前に表示されるようになります。

Environment:カメラの背景やVolumeとの連携を決める項目

Background Type:何もない部分(背景)をどう表示するかを設定する

Background Typeは、カメラで撮影したときにオブジェクトなどが表示されていない部分、つまりカメラの背景をどのように表示するかを決めることができます。
このBackground Typeでは、以下の3つから選択することができます。
なお、Skyboxは自分で好みのものにカスタマイズすることができます。
Update Mode:Volumeを更新する方法を設定

Update Modeは、Volumeコンポーネントのエフェクト効果の更新方法を設定することができる項目です。
Update Modeでは、以下の3つから選択することができます。
Volume Mask:影響を与えるVolumeのレイヤーを選択する

Volume Maskは、そのカメラに対して影響を与えるVolumeレイヤーを選択することができる項目です。
このVolume Maskで選択したVolumeレイヤーのエフェクトだけが、そのカメラで描画することができます。
Volume Trigger:Volumeが適用されるトリガーを設定する

Volume Triggerは、Volumeコンポーネントのエフェクト効果を付けるトリガーを決めている項目です。
ここで指定したオブジェクトが、Volumeのコライダー領域に入った場合、そのVolumeの設定が適用されるようになります。
なお、Volume Triggerを指定しない場合は、そのカメラ自体がトリガーとなります。
Output:カメラ映像の出力の設定

Output Texture:Render Textureにレンダリングする

カメラの映像を画面ではなく、Render Texture(レンダーテクスチャ)に描画したい場合にOutput Textureを設定します。
Output Textureの項目に、すでに作成しているRender Textureをドラッグ&ドロップすることで、そのカメラの映像がRender Textureに描画されるようになります。
例えば、以下のようにカメラで撮影している映像があります。

この映像をレンダーテクスチャに描画させることで、以下のように「Quad」などのオブジェクトに映像を映し出すことができるようになります。

Target Display:どのディスプレイに表示させるかを決める

Target Displayは、マルチディスプレイを使用する際に、そのカメラでの映像をどのディスプレイに表示させるかを決める項目です。
ディスプレイは全部で8つが最大となり、それぞれのカメラごとに変更することができます。
Target Eye:VRの時にどちらの目にレンダリングするかを決める

Target Eyeは、VRゲームを作る際に使用する項目で、このカメラで撮影した映像を左目と右目のどちらにレンダリングするかを決めています。
VR以外のゲームでは、デフォルトの「Both」のままで良いと思います。
Viewport Rect:画面のどこにカメラ映像を表示するかを決める

Viewport Rectは、カメラの映像を画面のどの部分に描画するかをビューポート座標で決めることができる項目です。
ビューポート座標は、画面の左下を(0,0)、画面の右上を(1,1)とした座標で、「X」と「Y」に0~1までの値を設定して、カメラ映像の描画位置を決められます。
また、「W」と「H」は描画する画面の大きさを表していて、Wが画面の幅、Hが画面の高さとして、カメラ映像の大きさを0~1までで指定することができます。
HDR Rendering:HDRレンダリングをするかどうかを決める

HDR Renderingは、HDR(High Dynamic Range)を使ってレンダリングするかどうかを決める項目です。
HDRとは、通常よりも明るさの幅を広げることで、白飛びや黒潰れを防ぐことができ、より豊かな表現を行うことができる技術です。
HDR Renderingの設定では、以下の2つから選択することができます。
MSAA:MSAAを有効にするかどうかを決める設定

MSAAはマルチサンプリングアンチエイリアスの略で、MSAA手法でアンチエイリアスを行うかどうかを決める設定です。
このMSAAとは、画像の端のピクセルを分割して、それぞれの色から平均化したものでアンチエイリアス処理を行う手法です。
MSAAでの設定は、以下の2つから選択することができます。
URP Dynamic Resolution:動的解像度を使用するかどうかを決める

URP Dynamic Resolutionは、そのカメラの映像に動的解像度を適用するかどうかを決めている項目です。
動的解像度とは、ゲームのパフォーマンスに合わせて、レンダリングする解像度を動的に変更する処理のことで、GPU の負荷を軽減できる設定です。
フレームレートが低下するような場合などに、動的解像度を使うことで、フレームレートの維持に繋がります。
カメラの移動や回転はtransformで設定できる
カメラを移動したり、カメラの向きを変更したりする場合は、これまで紹介したCameraコンポーネントではなく、カメラオブジェクトのTransformコンポーネントで行います。
例えば、カメラを移動する場合は、そのカメラオブジェクトに対して、Translateメソッドで移動処理を行うことが可能です。
また、カメラの向きを変える場合は、Rotateメソッドで簡単に回転させることができます。
なお、簡単なカメラワークについては以下の記事でまとめていますので、参考にしてみてください。
まとめ
このページでは、Unityで画面を映すのに使うCamera(カメラ)コンポーネントについて、どういう仕組みなのか、使い方や設定項目までをまとめていきましたが、いかがでしたでしょうか?
Cameraコンポーネントは、ゲーム内の映像を画面などに描画するための役割を持っているコンポーネントです。
このCameraコンポーネントを使うことで、より細かい表現やフィルターなどを通して映像を表示することができます。
また、非常に細かい設定ができるのもCameraコンポーネントの特徴なので、一つ一つ使っていきながら覚えていきましょう。
最後までお読みいただきまして、ありがとうございました!
コメント