LoginSignup
1
1

More than 3 years have passed since last update.

点群データをUE4でボクセル表示 その2:Blutilityでボクセルを配置する

Last updated at Posted at 2019-09-23

はじめに

点群データをUE4でボクセル表示 その1につづいて、今回はテーブルの座標値と色情報をもとにBlutilityを使ってボクセルをレベルに自動で並べていきます。
完成したらボクセル市民会館を走り回ったり飛び回ったりできます!

環境

Unreal Engine 4.22.3

Blutilityについて

UE4にはエディタ内でブループリントを使用して、コンテンツ制作タスクを自動化するBlutilityというものがあります。これを使って大量のキューブを並べる処理を行っていきます。Blutilityを初めて使ってみたので理解不十分なのですが、とりあえず動作はした方法ということで・・・。
今回もMozPacaさんのブログを参考にさせていただきました。
「UE4初心者が頑張ってるブログ UE4 4.20 BlutilityとEditor Scriptingを試してみる その1

Editor Utility BPを作成

エディタの環境設定の実験段階の中にある Editor Utility Blueprints (Blutility) にチェックを入れます。
image.png

MozPacaさんのブログに従ってコンテンツブラウザからブループリント > ブループリントユーティリティを選択と選ぼうと思ったのですが見当たりません。
image.png

ブループリントではなくEditor Utilityの中にありました。UE4のバージョンによってこのあたりの操作が異なるようです
image.png

GlobalEditorUtilityBaseを選択して、
image.png

PlaceVoxel_BUという名前で作成。右クリックしてブループリントを編集を選択して開きます。(ダブルクリックするとBlutilityの実行画面になってしまいます)
image.png

カスタムイベントを作成

カスタムイベントを作成し、PlaceVoxelと名前を付け、エディタで呼び出すにチェックを入れておきます
image.png

データテーブルを読み込む

Get Data Table Rows Names の Table に VoxelTableを指定しテーブルの行名を配列として取得します。そこに For Each Loop と Get Data Table Rowをつなぎで各行の内容を取得するループを回します。後の整理のためにFor Each Loop の後ろに Sequence ノードをかましておきます。
image.png

ボクセルの位置ベクトルと色情報を作成

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と名前を付けました。
image.png

ボクセルを配置

いよいよボクセルを配置していく作業です。先ほど作っておいた 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を繋げます。
image.png

PlaceVoxel_BU が完成しました
image.png

PlaceVoxel_BUの実行

コンテンツブラウザからPlaceVoxel_BUをダブルクリックするとBlutilityを実行するウィンドウが開きます。パブリック変数Voxel Sizeを指定してカスタムイベントPlaceVoxelを実行するボタンを押します
image.png

最終的にはBlutilityを使って約20000個のボクセルを自動で配置できました!!(20000個をBlutilityで一気に処理するとエディタが落ちてしまったので5000個ずつ分けて処理しました)
image.png

まとめ

Bultilityは超強力なツールですね!Construction Scriptと組み合わせるとプロシージャルなレベル作成の自由度が高まりそうです。試行錯誤しながら色々と活用できるようになりたい!

もっとボクセルを細かくしてみたいのですが、今回の方法ではどんどん重たいデータになってしまいそうです。アクタのマージ、スタティックメッシュへ変換、Instanced Static Meshなどを使えば軽く動かせるようになるのでしょうか?

今回のやり方は突っ込みどころ満載の内容だと思うので、こんな方法もあるよとかアドバイスをいただけると嬉しいです!

参考

点群データをUE4でボクセル表示 その1:色を変更できるキューブを作る
「UE4初心者が頑張ってるブログ UE4 4.20 BlutilityとEditor Scriptingを試してみる その1
旧都城市民会館の点群データが完成!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1