#はじめに
点群データをUE4でボクセル表示 その1につづいて、今回はテーブルの座標値と色情報をもとにBlutilityを使ってボクセルをレベルに自動で並べていきます。
完成したらボクセル市民会館を走り回ったり飛び回ったりできます!
#環境 Unreal Engine 4.22.30.8mグリッド、20000ボクセル!都城市民会館らしさが大分わかるようになった!嬉しくて飛び回っております!
— reisyu (@reisyu1) September 23, 2019
#3DDA #旧都城市民会館 #UE4 pic.twitter.com/HHAHrHuEUt
#Blutilityについて
UE4にはエディタ内でブループリントを使用して、コンテンツ制作タスクを自動化するBlutilityというものがあります。これを使って大量のキューブを並べる処理を行っていきます。Blutilityを初めて使ってみたので理解不十分なのですが、とりあえず動作はした方法ということで・・・。
今回もMozPacaさんのブログを参考にさせていただきました。
「UE4初心者が頑張ってるブログ UE4 4.20 BlutilityとEditor Scriptingを試してみる その1」
#Editor Utility BPを作成
エディタの環境設定の実験段階の中にある Editor Utility Blueprints (Blutility) にチェックを入れます。
MozPacaさんのブログに従ってコンテンツブラウザからブループリント > ブループリントユーティリティを選択と選ぼうと思ったのですが見当たりません。
ブループリントではなくEditor Utilityの中にありました。UE4のバージョンによってこのあたりの操作が異なるようです
PlaceVoxel_BU
という名前で作成。右クリックしてブループリントを編集を選択して開きます。(ダブルクリックするとBlutilityの実行画面になってしまいます)
##カスタムイベントを作成
カスタムイベントを作成し、PlaceVoxel
と名前を付け、エディタで呼び出すにチェックを入れておきます
##データテーブルを読み込む
Get Data Table Rows Names の Table に VoxelTable
を指定しテーブルの行名を配列として取得します。そこに For Each Loop と Get Data Table Rowをつなぎで各行の内容を取得するループを回します。後の整理のためにFor Each Loop の後ろに Sequence ノードをかましておきます。
##ボクセルの位置ベクトルと色情報を作成
Get Data Table Rowの外側の列ピンから引き出してVoxelTable_STRを分解を選択するとテーブルの各列の値を取り出せます。
Px,Py,PzピンをMakeVectorノードに繋いでボクセルの位置ベクトルを作成していますが、Y-up座標を、Z-up座標に変換するためPyをZに、Pzに-1を掛けてYにつなげています。さらに距離の単位をmからcmにするために100を掛けます。その結果を変数に昇格しPosVector
と名前を付けました。
Cdx,Cdy,CdzピンはMakeColorノードのR,G,Bピンに繋ぎ、その結果を変数に昇格しVoxelColor
と名前を付けました。
##ボクセルを配置
いよいよボクセルを配置していく作業です。先ほど作っておいた Sequence の Then1ピン につなげていきます
Spawn Actor from Object の Object to Use にはVoxel_BP
を選択。Locationピンには先ほど作成した変数PosVector
を繋げます。ボクセルのサイズをコントロールするfloat変数VoxelSize
を作成し、Set Actor Scale 3D のNew Scale 3Dピンに繋げます。
次にCast to Voxel_BPノードを作成し、As Voxel_BPピンからSet Voxel Colorノードを作成し、変数VoxelColor
を繋げます。
#PlaceVoxel_BUの実行
コンテンツブラウザからPlaceVoxel_BUをダブルクリックするとBlutilityを実行するウィンドウが開きます。パブリック変数Voxel Size
を指定してカスタムイベントPlaceVoxel
を実行するボタンを押します
最終的にはBlutilityを使って約20000個のボクセルを自動で配置できました!!(20000個をBlutilityで一気に処理するとエディタが落ちてしまったので5000個ずつ分けて処理しました)
#まとめ
Bultilityは超強力なツールですね!Construction Scriptと組み合わせるとプロシージャルなレベル作成の自由度が高まりそうです。試行錯誤しながら色々と活用できるようになりたい!
もっとボクセルを細かくしてみたいのですが、今回の方法ではどんどん重たいデータになってしまいそうです。アクタのマージ、スタティックメッシュへ変換、Instanced Static Meshなどを使えば軽く動かせるようになるのでしょうか?
今回のやり方は突っ込みどころ満載の内容だと思うので、こんな方法もあるよとかアドバイスをいただけると嬉しいです!
#参考
点群データをUE4でボクセル表示 その1:色を変更できるキューブを作る
「UE4初心者が頑張ってるブログ UE4 4.20 BlutilityとEditor Scriptingを試してみる その1」
旧都城市民会館の点群データが完成!