1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UE5】Geometry Scripting:スプラインからBlocking Volumeを作る

Posted at

対象バージョン UE5.2.1

Geometry Scriptingを使うには、Geometry Scriptプラグインを有効にする必要があります。

はじめに

進入禁止エリアなどを作るときに Blocking Volumeアクタをええ感じに並べたりする。ところが標準のBlocking Volumeアクタは箱型なので、その「ええ感じ」が意外と難しかったりする。
一方、Geometry Scriptingを使えば、任意形状の Blocking Volumeを作ることができるので、よりええ感じなボリュームが作れるかもしれない。

Geometry Scriptingで作ったDynamic MeshからBlocking Volumeを作るには「Create New Volume from Mesh」を使う。
image.png

次の動画は、

  • ①スプラインで囲んだエリアからBlocking Volumeを生成する
  • ②スプラインに沿わせたBlocking Volumeを生成する

…を行う自作のEditor Utilityツールの動作の様子である。こうすれば「箱型」に縛られずに、任意の滑らかな形状の進入禁止エリアを作ることができそうだ。

①スプラインで囲んだエリアからBlocking Volumeを生成する

Delaunay三角形分割

まずは、スプラインを囲んだエリアをポリゴン化する方法から。「Append Triangulated Polygon」を使う。
image.png
引数「Polygon Vertices」にポリゴン化したい頂点の座標(Vector2D)を渡すと、ええ感じにポリゴン化してくれる。特筆すべきは、凸凹した形でもええ感じにポリゴン化してくれることである。つまり、凸多角形である必要がない。
image.png
ドキュメントによると、Delaunay三角形分割を行っているとのこと。

Extrude:ポリゴンの押し出し

スプラインで囲まれたエリアをポリゴン化したら、次はその図形をZ方向(上方向)に押し出して立体にする。ポリゴンの押し出しは「Apply Mesh Linear Extrude Faces」を使う。
image.png
ポリゴンの押し出しとは、次のGIF動画のような機能である。
20230903_ExtrudeTool.gif

後は、先に述べた「Create New Volume from Mesh」で、この押し出された形状からBlocking Volumeアクタを生成する。

Blueprintグラフ

Editor Utility Widgetで作っている。
ユーザーインターフェース部分はこんな感じ:
image.png
パラメータ用のDetails PanelウィジットとButtonウィジットで構成されている。

イベントグラフはこんな感じ:
SurroundedBySpline_EventGraph.jpg

この中で使われている関数 Is Mobility Staticは、選択されたアクタのRoot ComponentとSpline Componentの可動性(Mobility)が Staticかどうかを判定している。
SurroundedBySpline_IsMobilityStatic.jpg

②スプラインに沿わせたBlocking Volumeを生成する

ポリゴンのスイープ

ポリゴンのスイープとは、2Dの図形をパスに沿って引き延ばすような操作である。
例えば、長方形をスプラインに沿ってスイープすると、次のような形状になる。
image.png
これをBlocking Volumeに変換してやれば、滑らかな形状の進入禁止エリアを作ることができる。

ポリゴンのスイープには「Append Sweep Polygon」を使う。
image.png

引数「Polygon Vertices」には、スイープしたい図形の頂点の座標(Vector 2D)を渡す。上の図では四角形(4頂点)を渡している。
引数「Sweep Path」には、スイープ形状、つまりスプラインの形状を点列(Transformの列)にして渡す。

後は「Create New Volume from Mesh」で、このスイープ形状からBlocking Volumeアクタを生成すればよい。

Blueprintグラフ

こちらもEditor Utility Widgetで作っている。
ユーザーインターフェース部分はこんな感じ:
image.png
パラメータ用のDetails PanelウィジットとButtonウィジットで構成されている。

イベントグラフはこんな感じ:
AlongSpline_EventGraph.jpg

この中で使われている関数Is Mobility Staticは、選択されたアクタのRoot ComponentとSpline Componentの可動性(Mobility)が Staticかどうかを判定している。
image.png

関数Make Base Polygonは、スイープ元の長方形の頂点配列を作成する。
AlongSpline_MakeBasePolygon.jpg

関数Sample Splineは、スプライン上の点(のTransform)を一定間隔でサンプリングする。グラフ内にも書いたが、自作せずとも「Sample Spline To Transforms」という関数が標準で用意されていることに後で気づいた。
AlongSpline_SampleSpline.jpg

参考資料

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?