カメラスタッキングについて

こんにちは小さな塩です。
前回、Unityのポストプロセスを使うことでシーンのクオリティが上がったり、表現の幅が広がったりすると紹介しました。

前回の記事はこちら

1枚の画像としてはあのままでもよかったのですが、弊社ではメタバースを制作しているので、画面内でなにかしらアクションを起こせるようにしなければなりません。
そのため、「ここでアクションが起こせるよ!」と分かるようにUIをシーン上に配置していきます。

画像左上にあるUI(橙色の!マーク)をシーン上に配置したのですが、白飛びしてしまい悪目立ちしていますね。
ポストプロセスはカメラで映る画面全体に加工がかかってしまうので、UIも同じように加工がかかってしまいます。

それを解決するために「カメラスタッキング」という機能を使います。

今回はレンダーパイプラインをURPにしているため、以降紹介する手順はURPを使った際の操作手順になります。

カメラスタッキング

カメラスタッキングとは複数のカメラを重ねて1つのカメラのように描画する機能です。
1つのカメラはワールドを映す用、もう1つのカメラはUIを映す用にし、この2つのカメラを最終的に1画面で映すといった感じです。

では実際にUnityで一連の流れを行っていこうと思います。

まずはワールド用とUI用で2つレイヤーを作成します。
分かりやすくするために名前を「Layer_A」→ワールド用、「Layer_B」→UI用とします。
ワールドとUIをそれぞれ作成したレイヤーに変更しておきましょう。

ポストプロセスは前回の記事で紹介したものと同じものを使用していきます。Global Volumeのレイヤー部分を「Volume」から先ほど作成した「Layer_A」に変更しておきます。

次にカメラを2つ作成します。
こちらも分かりやすくするために名前を「Camera_A」→ワールド用、「Camera_B」→UI用とします。
2つのカメラの位置、角度が違う場合1画面で映す際にずれてしまうので注意してください。
最初に2つ作成した段階で「Camera_B」を「Camera_A」の子オブジェクトにしておくと、ずれることもなく後からの調整も簡単です。

まずは「Camera_A」の設定から行っていきます。
レンダータイプは「基本」のままで、レンダリングの項目内にあるカリングマスクから「Layer_B」のみ選択を外します。

環境の項目内にあるボリュームマスクから「Layer_A」を選択します。

こうするとシーン上ではUIが映っていますがカメラ上ではUIは映っておらず、ポストプロセスがかかっているだけの状態になります。

次に「Camera_B」の設定を行います。
こちらはレンダータイプを「Overlay」に変更し、「深度を消去」のチェックを外します。

レンダリングの項目内にあるカリングマスクから「Layer_B」のみ選択します。
他のものは全て未選択状態にしましょう。

環境の項目内にあるボリュームマスクは「Nothing」にしておきます。

そして「Camera_A」の方に戻り、スタックの「+」から「Camera_B」を選択すると…

無事UIにポストプロセスがかからず白飛びすることもなくなりました。

今回UIのポストプロセスをなしにしましたが、UIだけ個別でポストプロセスをかけることもできます。
他にもワールドとUIを分けるだけではなく、ワールド内のモデルに個別でポストプロセスをかけたい場合などにも使うことができます。
用途に応じて使い分けて更にシーン全体のクオリティを上げていきましょう。

↓「メタバース×JP スターターパック版」リンク↓
https://comfort-inc.co.jp/lp_meta/lp_metaverse_starter-pack.html

フォーム

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です