PavilionDV7の雑多なやつ

Qiitaから移行しました。UE4に関する記事から興味のあることまで色々書きます。

【UE5】Mass AIでTrafficシステムを動かしてみる - Part2 車両を出す

はじめに

【UE5】Mass AIでTrafficシステムを動かしてみる - Part1 表示するまで からの続き。

Wheeled VehicleとStatic Meshをセットアップして、3段階(High、Mid、Low)のLODを正しく機能させる。

Part 1から追記する形を取る
使用しているUE5バージョン : UE 5.0.1

1. Wheeled Vehicleのセットアップ

Content Browserにて[Content -> Vehicle Template -> Blueprints -> Sports Car]にある[SportsCar_Pawn]を複製する。名前を[BP_High_Res_Vehicle]に変更する。


BP_High_Res_Vehicleブループリントを開き、Event Graphにあるノードをすべて削除する。

ComponentsにあるMesh(VehicleMesh)以外のコンポーネントも削除する。

[Vehicle Movement Component]を選択し、詳細パネルにある[Vehicle Input -> Requires Controller for Inputs]のチェックを外す。


上部にあるバーの[Class Settings]をクリック。詳細パネルの[Interfaces][Mass Traffic Vehicle Control Interface]を追加する。

My Blueprintパネルの[Interfaces -> Mass Traffic -> Traffic Vehicle -> Set Vehicle Inputs]をダブルクリックする。Event GraphにSet Vehicle Inputsノードが追加される。

Set Vehicle Inputsで次のようにノードを組む。

2. Part 1の6番で作成したData Assetを編集する

該当のData Assetを開き[Traffic Vehicle Visualization]を次のように変更する。

  • High Res Template Actor : [BP_High_Res_Vehicle]
  • LOD Representation -> High : [High Res Spawned Actor]

続いて[Traffic Vehicle Simulation]を次のように変更する。

  • Half Length : [260]
  • Half Width: [120]
  • Front Axle X : [130]
  • RearAxle X : [-130]
  • Physics Vehicle Template Actor : [BP_High_Res_Vehicle]

3. 動作確認

道幅が狭くカーブで頻繁に事故るが、Wheeled Vehicleは問題なくスポーンされ、カメラから離れるとPart 1で作ったBP_Low_Res_Vehicleに切り替わる様子が確認できる。

4. Instanced Static Meshを表示する前準備

4-1. MassUpdateISMProcessorの設定を変更する

ツールバーから[Edit -> Project Settings]でProject Settingsを開く。検索バーに[MassUpdateISM]と打ち[Module Settings -> Mass Entity -> Processor CDOs -> Index[84] -> Auto Register with Processing Phases]のチェックを外す。

4-1. Instanced Static Mesh用のマテリアルを作成する

Content Browserを右クリックし[Material]をクリック。名前を[M_Mass_StaticMesh]とする。


M_Mass_StaticMeshを開き詳細パネルの検索バーに[Instanced]と入力し[Used with Instanced Static Meshes]にチェックを入れる。

次のようなノードを組む。

PerInstanceCustomDataノードは特に何かを設定する必要はない。

この箇所は非常におまじないめいていて奇妙な感じがする。やっていることは恐らくGPGPU(GPUを使った汎用的な演算処理)を利用し車両のカラーを変更したりするため。City SampleではPerInstancedCustomDataから車両のカラーを決定したり、ウィンカーの明滅といった処理で使っていた。(詳細は追っていないので興味のある方は是非覗いてみる事をおすすめ)

少し脱線するがInstanced Static MeshとマテリアルのCustom Dataを利用したGPGPUについていくつかの記事を貼っておく。

InstancedStaticMeshとCustomDataとTextureで大量オブジェクト (UE4 Advent Calendar 2020) - ながむしメモ

【UE4】Custom Data Valueを利用してブループリントからマテリアルにランダム値を渡したい – 建築グラビア

UE4でゆうなまを作りたい 第2回 - Qiita

5. Data Assetを編集する

[Traffic Vehicle Visualization][Static Mesh Instance Desc]を展開。+ボタンを押し、次のように設定する。


  • Mesh : [SM_Ramp](ここは何でも良い。とりあえず頂点数が少ないやつを選んでおく)
  • Material Overrides -> Index[0] : [M_Mass_StaticMesh]

続いて、Params -> LOD Representationを展開しLowに[Static Mesh Instance]を設定する。

6. 動作確認

新しくWheeled Vehicle、Static Meshがスポーンされ、カメラから遠くなるとStatic Meshに切り替わる様子がわかる。

プロジェクトのダウンロード

https://1drv.ms/u/s!Au-8FqgREBKZjwRmpj5KS14aYXmA?e=mgVFUk

このパートの公開に伴いPart 1で公開していたプロジェクトデータは非公開にする。

おまけ1. Half LengthやHalf Widthの測り方

2番で設定したHalf LengthやHalf Widthに設定した数値は以下の長さを表す。画像は車両メッシュを真下から写したもの。(このプロパティの詳細な説明はHalf LengthやHalf Widthをマウスオーバーしたときに表示されるパネルに書かれている)

Half LengthやHalf Widthは車両の中心から最も遠い距離を入力する。

具体的な計測方法は車両メッシュコンポーネントの子としてScene Componentを追加し座標を[X:0 ,Y:0, Z:0]に設定する。この地点を車両の中心位置とする。Half Lengthを測りたいときは、追加したScene ComponentをそのままX軸に沿って動かし、車両の端に位置したときのX座標がHalf Lengthになる。

この記事ではHalf Lengthを260と少し大きめに取った。 同じ要領でHalf WidthやFront Axle Xを測定する。

おまけ2. Mass Trafficの設定

[Project Settings -> Mass -> Mass Traffic]ではTrafficシステムの設定をいじることが出来る。Speed Limitsではレーンに設定したTagsに応じて速度制限を設ける事が出来る。次の画像は直線では早く、カーブや交差点では遅いスピードになるようにしてみた。(あまり効いてる感じはしない...)

他にも車両の速度(これはVehicle Movement Componentとは別)を設定したりも出来る。色々触ってみると面白いかも。

おまけ3. アサーションによるエディタクラッシュ

4番で行った各設定やマテリアルのおまじないの内、どれか1つでも欠けると次のようにCustom Dataに関するアサーションによってエディタがクラッシュする。(画像赤枠に注目)

これはエディタのプレイ直後に現れるので、同様のアサーションで引っかかっていれば再度設定忘れやマテリアルの設定忘れ(特にUsed with Instanced Static Meshのチェック忘れ)を確認する。