目次
1)複数の Cinemachine Brain
分割画面のマルチプレイヤーゲームや、ピクチャインピクチャエフェクト(例:監視カメラ)の作成などのために、複数のカメラをシーン内に用意する必要がある場合があります。Cinemachine が Brain コンポーネントを通じてすべての Camera を制御しているように見えますが、シーン内に複数の Brain を配置し、それぞれの Brain に一連の Virtual Camera を制御させる方法があります。
この場合、キャラクターの顔に向いた補助的な Camera を使用して、RenderTexture へのレンダリングを行うだけで、UI にビデオフィードを表示することができます。このビデオフィードにもう少し特色を加えるには、Cinemachine を使用してキャラクターの顔がフレーム内に収まるようにします。

この設定は非常に単純です。Unity Camera を 2 つ作成し、それぞれに Cinemachine Brain をアタッチします。その後、必要な分だけ Virtual Camera を作成します。

Brain に作成した Virtual Camera の一部のみを認識させるには、次の 3 つの手順を実行するだけです。
- 特定の Camera に影響を与える Virtual Camera を固有のレイヤー(たとえば「Characters」)に配置します。
- そのレイヤーをレンダリングするように、その Camera のカリングマスクを設定します。
- そのレイヤーを除外するように、他の Camera のカリングマスクを設定します。
注意していただきたいのは、このプロセスで Camera のカリングマスクを使用していても、それに応じてレンダリングを変更する必要はない、ということです。Unity では 31 個のレイヤーを使用できますが、Virtual Camera を配置するために作成するレイヤーは 1 つだけでかまいません。
このプロセス全体は、以下のビデオでもまとめられています。
2)さまざまなワールドアップ軸
Cinemachine は、ワールドアップ軸が存在するという想定の下に動作します。デフォルトでは Y 軸がワールドアップ軸となっています。Cinemachine では、この軸を基準として使用することで、どのようなカメラの動きが禁止されているかを認識します。たとえば、対象を真下から見上げたり、真上から見下ろしたりすることはありません(本物のカメラはこのような動きはしないですからね!)。
2D Camera(Orthographic としてマークされた Camera)の場合、Cinemachine の動作は異なり、カメラは地面、つまり、この場合は X 軸と Z 軸という残り 2 つの軸で構成される平面の上しか動けないように制限されます。
ただし、このワールドアップ軸とそれに対応する平面を別のものと合わせなければならない場合もあります。たとえば、2D 物理演算を使用するゲームを開発していて、ゲームプレイに XY 平面を使用しなければならない場合です。その場合には、角度を付けてこの平面をカメラに映したいものではないでしょうか。例として次の図ではカメラ平面を少し傾けています。

これを行うには、Cinemachine Brain の「World Up Override」プロパティーにトランスフォームを割り当てるだけです。空のゲームオブジェクトを作成して、それをマニピュレーターとして使用すると、そのオブジェクトを回転させて試して、自分の Cinemachine 設定にとって適切なワールドアップの方向を見つけることができます。
3)ポストプロセッシングの賢い利用法
Cinemachine は、ポストプロセッシングスタック v1 と v2 のどちらとも連動します。ただし、Cinemachine と組み合わせて使用する場合、v2 はボリュームベースのシステムであり、いくつかの便利なテクニックを利用できるため、v2 の方が適しています。
組み合わせて使用する場合、エフェクトを次の 2 つのカテゴリに分けることをお勧めします。
- すべてのショットに影響する共通のエフェクト
- 1 つのショット(Cinemachine 用語では Virtual Camera)に特有のエフェクト
一般的に、アンビエントオクルージョン(AO)、カラーグレーディング、グレインなど、スタイルに関するエフェクトは通常、1 つ目のグループに属します。このようなスタイルは、ゲームやフィルム全体を通じて一貫したものに保つ必要があるからです。一方、被写界深度、レンズの歪み、色収差など、カメラの物理プロパティーをシミュレーションするエフェクトは、Virtual Camera に設定するのが適しています。ただし、これらは絶対に遵守しなければならないルールというわけではありません。
たとえば、以下の例では、非常にローカルなポストプロセッシングボリュームを使用して、古い監視カメラのレンズを通じて見たかのような印象を実現しています。

これを実現するには、Virtual Camera 自体に「Is Global」とマークされていない Post Process Volume を用意して、コライダーを追加するだけです。通常、とても小さな(半径 0.05 くらいの)Sphere Collider を使用して、ゲームプレイ中にカメラが誤ってこのボリュームに入らないようにします。
具体的には、以下のように、Virtual Camera、Post Process Volume、および Collider を同じオブジェクト上に設定します。

その後、必要なエフェクトすべてを追加します。該当するチェックボックスをオンにして、メインプロフィールのエフェクトをオーバーライドすることもできます。チェックボックスをオンにしない場合、そのプロパティーは基本値(通常はグローバルボリュームの値)のままになることに注意してください。オンにすると、そのボリュームに対してのみ、値がオーバーライドされます。
4)ドリーズームエフェクトを作成する
最後に、ちょっとしたシネマトグラフィーテクニックを紹介します。「ドリーズーム」エフェクトを見たことはあるでしょうか。このエフェクトは、1958 年に Alfred Hitchcock 監督の映画『めまい』で先駆的に使われ、それ以降、多数の映画で利用されるようになりました。
画面上では、キャラクターと背景の間の空間が広くなったり狭くなったりしているように見えます。非常に格好良いテクニックで、Cinemachine を使えば、ごく簡単に再現できます。
以下の例をご覧ください。ゲームプレイの途中でトリガーが設定されています。

このエフェクトを作成するには、まず、設定が同じ 2 つの Virtual Camera を用意します。その後、一方の Virtual Camera を引いて、「Field of View」の値を減少させます。タイムラインか「Priority」を使用して 2 つの Virtual Camera をブレンドすると、ドリーズームエフェクトが実現します。
このエフェクトは、透視投影カメラを使わないと機能しません。平行投影カメラではうまくいかないことに注意してください。