[UE5] よくわかれ !Unreal Engineボディカメラ入門

Post 2023年12月19日火曜日

UE5 Unreal Engine

本記事はUnreal Engine Adventカレンダー2023企画のシリーズ6の、20日目の記事になります。

最近流行りのボディカメラについて記事にしてみました。

最近Lyra専門ブログになりつつありますが、こういう記事もちょくちょく作成しますのでよろしくどうぞ……。



お約束
この記事作成にあたって使用した主なUnreal Engine バージョンUE 5.3.2

本日のゴール

なんとなくボディカメラゲームが作れるようになる


最近のボディカメラ x Unreal Engineの可能性について

2023年の4月に、ゲーム業界に衝撃が走りました。「UNRECORD」のトレーラーが発表されたからです。


ボディカメラ視点で展開されるこのゲームは、あまりにもリアルなため、フェイク動画なのではとも噂されるほどでした。

しかし、実際にUnreal Engineでの編集画面のキャプチャが出ると、現在は本当のゲームなんだと大きな期待を持たれています。

日本のスタジオでも、廃病院を舞台にしたボディカメラ視点ゲームが開発されていることが明かされました。しかもこちらはPS5でのリリースが予定されているようです。

また、これはボディカメラ視点ではありませんが、最近何かと話題の「8番出口」も一人称視点のゲームになります。

1人称視点のゲームは、実際に我々が見ている景色とほぼ同じになることから、リアル感が段違いになります。

また、Unreal EngineはMegascanを無料で使えるので、生物より無生物の方がリアルにさせやすい傾向があります。(人物も一応MetaHumanありますけど)

このため、生物が少ないゲーム=リアルにさせやすいという構図が生まれており、

我々個人開発者にとっては、低予算でありながらリアル感があるというゲームが開発しやすい、「おいしい」領域なのは間違いありません。

(とか言ってるならさっさとゲームリリースしろよというコメントは禁止)


ボディカメラに必要な要件

ボディカメラに必要な要件は、ゲームによって異なるでしょうが下記のように考えられます。

・一人称視点

・魚眼レンズのような処理

・視界の端が暗くなる処理

・画面が揺れる演出(走る時、呼吸に合わせて)

・全体的にぼやかす(ブラー)

・録画しているようなノイズを入れる

今回この基礎編ではこれらの実装を考えていきます。

まずは実装前と実装後を比較して、実装の結果を見てもらいましょう。


※一人称視点に関しては標準で実装してるので割愛


12月の無料アセットを使って実録してみた

ちょっとファンタジスティックなアセットだったので、あまり雰囲気には合ってないかもしれないです。


実践編(魚眼レンズ➕視界の端を暗くする処理)

魚眼レンズ処理をすると、カメラで撮ってる感が出ます。やりすぎると絵が崩れるので考えものですが。

こちらはポストプロセスで実装します。

参考URL : https://www.youtube.com/watch?v=5B9WKBlELfQ

ポストプロセスは、我々の液晶画面への描画前に画面全体に対して色々な加工をするという処理になります。手軽で便利ですが結構処理が重いです。

ポストプロセスボリュームをレベルに追加して、そのポストプロセスボリュームにキャラが入ってる間有効になります。

ポストプロセスボリュームはそれ単体でも、色々な効果を追加することができますが、マテリアルを適用するとさらに効果を加えられます。

まずはポストプロセスボリュームに適用するマテリアルを作成します。


右クリックからまずマテリアルを作り・・・


作成したマテリアルを開いたら、アウトプットをクリックした状態で、Material DomainをPost Processに変更します。


動画を参考にしながら、マテリアルの実装をしていきます。詳しくは割愛。黄色の四角の部分はパラメータになっています。

ちなみに0みたいな"値のノード"は1を押しながら左クリックすると出せます。更に出したノードの↓みたいなところを押すとパラメータ化もできます。

次に視界の四隅を暗くする処理です。


これは比較的シンプル。

あとはこの2つをMultiplyで足し合わせてエミッシブにつなぐだけ。

マテリアルが完成したので、マテリアルインスタンスを作ってパラメータを弄れるようにします。パラメータは適当に弄ってください。

マテリアルインスタンスをポストプロセスに設定します。


レベルにポストプロセスボリュームを配置し、配置したポストプロセスボリュームの詳細から、ポストプロセスマテリアルに追加します。


実践編(視界の端を削る)

こちらはWidgetで実装します。こちらは比較的単純で、視界の端をマスクすれば終わりです。

まずはマテリアルを作成します。先ほどとは違い、UserInterfaceを選択し、ブレンドモードはMaskedにします。

実装内容は下記を御覧ください。


ちなみに0.5 0.5みたいなベクトル値は2を押しながら左クリックすると出せます。

次にWidgetを作ります。



こんな感じで、Canvasの下にScale Box -> Imageと配置して Image の Brushに先ほど作ったマテリアルを設定します。
最後にこれを画面にAdd to Viwportすれば完成。


実践編(画面の揺れ)

いくつか方法があります。

①カメラをキャラクターの頭とかに固定して、キャラクターの移動に伴ってカメラも揺れるようにする

②CameraShakeによる実装

①が一般的な方法ですが、揺れの調整が難しいのと、ユーザー側でオフにするみたいな設定が難しいです。また、映像メイキングの場合はキャラクターにカメラをアタッチしないことがほとんどなので難しいですよね。

今回は②で実装します。キャラクターが止まってる時と走ってる時で、揺れ具合を調整したいので、キャラクターのアニメーションブループリントで実装するのが良さそうです。

まずブループリントから、Camera Shake Baseを2つ作ります。

開いてパラメータを調整します。こちらは歩いているとき用。


走るときの方はBlend in / out Timeも調整するときれいになります。

次にキャラクターのアニメーションブループリントを開きまして


Event Blueprint Update Animationに、記述を加えていきます。



まず、「IsRun」というBool変数を作りましてデフォルト値をTrueにしておきます。

スピードが400を超えたかどうかで走ってるときかそうでないかを判定、それぞれでカメラシェイクを切り替えてます。


実戦編(全体的にぼやかす、ブラー)

こちらはWidgetに標準で機能があるのでそれを使います。


Scaleの配下にブラーを入れて、Strengthをお好みの値にするだけです。簡単ですね。Add To Viewportをお忘れずに。


実戦編(ノイズを入れる)

いわゆるFilm Grainというやつです。こちらはなんとポストプロセスに標準で機能が入ってます。便利。

英語版の方はFilm Grainと検索しましょう。


ポストプロセスボリュームの、ここの設定をいじるだけで簡単にノイズを入れられます。


以上です。

今回は入門編と書きましたが、なかなか実用レベルにはなったんじゃないでしょうか?

ぷちコンの映像編も開催されますので是非使ってください。

ではまたどこかの記事で。