Camera Stacking
Universal Render Pipeline (ユニバーサルレンダーパイプライン、URP) では、Camera Stacking を使用して、複数のカメラの出力をレイヤー化し、1 つの連結された出力を作成できます。Camera Stacking を使用すると、2D UI 内に 3D モデル、つまり乗物のコックピットなどのエフェクトを制作できます。
カメラスタックは 1 つの ベースカメラ と 1 つ以上の オーバーレイカメラ で構成されます。カメラスタックは、ベースカメラの出力をカメラスタック内の全カメラの連結された出力でオーバーライドします。そのため、ベースカメラの出力でできることはすべて、カメラスタックの出力でもできます。例えば、カメラスタックを特定のレンダーターゲットにレンダリングしたり、ポストプロセスエフェクトを適用したりできます。
URP は、レンダリング順序の最適化など、カメラ内でいくつかの最適化を実行して、オーバードローを減らします。しかし、カメラスタックを使用する場合、ユーザーがそれらのカメラのレンダリング順序を効果的に定義することになります。したがって、過度なオーバードローが生じるような形でカメラの順序を設定しないように注意する必要があります。URP のオーバードローの詳細については、詳細情報 を参照してください。
カメラスタックへのカメラの追加
- シーンにカメラを作成します。Render Type のデフォルトは Base であるため、カメラはベースカメラになります。
- シーンに別のカメラを作成し、そのカメラを選択します。
- カメラの Inspector で、カメラの Render Type を Overlay に変更します。
- ベースカメラを再び選択します。カメラの Inspector で、Stack セクションまでスクロールして プラス (+) ボタンをクリックし、オーバーレイカメラの名前をクリックします。
オーバーレイカメラがベースカメラのカメラスタックに含まれます。Unity は、オーバーレイカメラの出力をベースカメラの出力の上にレンダリングします。
スクリプトでカメラスタックにカメラを追加するには、ベースカメラの Universal Additional Camera Data コンポーネントの cameraStack
プロパティを次のように直接操作します。
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Add(myOverlayCamera);
カメラスタックからのカメラの削除
- 少なくとも 1 つのオーバーレイカメラを含むカメラスタックを作成します。手順については、カメラスタックへのカメラの追加 を参照してください。
- カメラスタックのベースカメラを選択します。
- カメラの Inspector で、Stack セクションまでスクロールし、削除するオーバーレイカメラの名前をクリックして マイナス (-) ボタンをクリックします。
オーバーレイカメラはシーンに残りますが、カメラスタックには含まれなくなります。
スクリプトでカメラスタックからカメラを削除するには、ベースカメラの Universal Additional Camera Data コンポーネントの cameraStack
プロパティを次のように直接操作します。
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Remove(myOverlayCamera);
カメラスタック内のカメラの順序の変更
- 複数のオーバーレイカメラを含むカメラスタックを作成します。手順については、カメラスタックへのカメラの追加 を参照してください。
- カメラスタック内のベースカメラを選択します。
- カメラの Inspector で、Stack セクションまでスクロールします。
- オーバーレイカメラの名前の横にあるハンドルを使用して、オーバーレイカメラのリストを並べ替えます。
ベースカメラはカメラスタックのベースレイヤーをレンダリングします。スタック内のオーバーレイカメラは、リストされている順に (上から順に)、ベースレイヤーの上にレンダリングします。
スクリプトでカメラスタックを並べ替えるには、ベースカメラの Universal Additional Camera Data コンポーネントの cameraStack
プロパティを直接操作します。
複数のスタックへの同一のオーバーレイカメラの追加
複数のカメラスタックにオーバーレイカメラを追加するには:
- 少なくとも 1 つのオーバーレイカメラを含むカメラスタックを作成します。手順については、カメラスタックへのカメラの追加 を参照してください。
- シーンにカメラを作成します。Render Type のデフォルトは Base であるため、カメラはベースカメラになります。
- 新しいベースカメラを選択します。
- カメラの Inspector で、Stack セクションまでスクロールして プラス (+) ボタンをクリックし、両方のカメラスタックで使用するオーバーレイカメラの名前をクリックします。
オーバーレイカメラが両方のカメラスタックでレンダリングされるようになります。
また、スクリプトでカメラスタックにカメラを追加するには、ベースカメラの Universal Additional Camera Data コンポーネントの cameraStack
プロパティを次のように直接操作します。
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Add(myOverlayCamera);