BPでメッシュ作成(プロシージャルメッシュ)

概要:アクタにProcedualMeshコンポーネントを追加し、BPで配列でメッシュデータを用意して、CreateMeshSection。作成されたメッシュはStaticMeshとして保存もできる。
f:id:hat0xAA:20190310164230j:plain
以下詳細

手順

1) アクタにProcedualMeshコンポーネントを追加する

2) メッシュを定義するデータを用意する

3) ConstructionScriptでCreateMeshSectionノードを実行する
f:id:hat0xAA:20190310164309j:plain

CreateMeshSectionノードに渡すメッシュデータの仕様

Vertices 座標値の配列。すべての頂点を書いておく。先頭が0番の頂点。セクションごとに0番からになる。
Triangles 整数値の配列。頂点の番号3つ1組で三角形を定義する。順番で面の向きが変わる。
UV0 カラー値の配列。対応する頂点のUV値。UV0の先頭の値はVerticesの先頭の頂点に対応する。

セクションindex

セクションindexを変えると別のメッシュとしてあつかわれる。
すでに作成されたメッシュと同じセクションindexでCreateMeshSectionをやり直すとメッシュを書き換えることができる。
マテリアルのセットはセクションindex毎に行う必要がある。
f:id:hat0xAA:20190310172152j:plain

作成したメッシュはスタティックメッシュのアセットとして保存できる

ProcedualMeshを作成するアクタをレベル上に配置してメッシュ作成を実行した状態で、そのアクタのProcedualMeshコンポーネントを選択すると、詳細に"Create StaticMesh"ボタンが表示されるのでこれを実行するとスタティックメッシュのアセットとして保存できる。
f:id:hat0xAA:20190310172747j:plainf:id:hat0xAA:20190310172755j:plain

ProcedualMeshは作成も遅く、メモリを大きく消費し、配置したレベルの保存にも時間がかかるので複雑な物はスタティックメッシュ化すると効率的に利用できるようになる。

例)13万tri.のメッシュ作成の場合
ProcedualMeshだと
作成:6秒
配置したレベルの保存:18秒
umapサイズ:100MB

これをスタティックメッシュ化すると
保存はすぐ終わり、umapのファイルサイズは0.6MB
と劇的に改善できた。