情報は力ではない

UE4 とか Blender とか。

Procedural Foliage について

この記事は Unreal Engine 4 (UE4) #2 Advent Calendar 2019 の 9日目の記事です。

qiita.com

前日は、なんさんアーティストのためのマテリアル式にゅうもんでした。マテリアルで使用するベクターや Multiply、Add の意味がわかりやすく丁寧に書かれていて良い記事でした!

今回は Procedural Foliage について簡単に紹介しようと思います。 公式のクイックスタートもあるのでそちらも参照してみてください。

docs.unrealengine.com

この記事で使用している UE4 のバージョンは古いですが、4.22 です。
内容は次のような感じで進めていきます。

Procedural Foliage とは

設定したパラメータに基づいてプロシージャルに Static Mesh を配置できる機能です。
Modes パネルから選択できる Foliage ツールは手作業でレベルに Static Mesh を配置できる機能ですが、Procedural Foliage はボタン一つでプロシージャルに Static Mesh を配置できるので、サクッと森などの環境を作りたい場合に使用できるかと思います。

以下では Procedural Foliage の使い方を説明しながら森を作っていきたいと思います。

f:id:masahiro8080:20191207145817p:plain
今回作成した森

Procedural Foliage を使用する準備

Procedural Foliage は Experimental の機能なので Editor Preferences から Procedural Foliage を有効にする必要があります。
Editor Preferences を開き General から Experimental を選択し Procedural Foliage にチェックボックスにチェックを入れます。 Editor Preferences は Edit タブから開きます。

f:id:masahiro8080:20191130125026p:plain
Editor Preferences で Procedural Foliage を有効にする

以上で Procedural Foliage が使用可能になります。

Procedural Foliage 機能を使用した森の作成

Foliage Type の作成

まずはじめに Foliage ツールと同様に Foliage Type を作成します。Foliage Type は Foliage 機能で配置する Static Mesh に関する設定を行うクラスです。
Content Browser で右クリックし Miscellaneous から Foliage Type を選択します。森を作るために木の Static Mesh を配置したいので、名前は FT_Tree01 としておきます。

f:id:masahiro8080:20191130144132p:plain
Foliage Type の作成

作成した Foliage Type を開きます。一番上にある Mesh の項目に Procedural Foliage で配置したい Static Mesh を設定します。ここでは木の Static Mesh を設定しておきます。

f:id:masahiro8080:20191130183300p:plain
Mesh の項目に木の Static Mesh を設定

以上で Foliage Type に関する最低限の設定は終わりです。
他の項目は配置する Static Mesh の密度等の項目なのですが、先に Static Mesh の配置をし、その後で項目を設定していきたいと思います。

Procedural Foliage Spawner の作成

次は Procedural Foliage Spawner を作成します。Procedural Foliage Spawner は、設定したパラメータに基づいてプロシージャルに StaticMesh を配置してくれるクラスです。
Content Browser で右クリックし Miscellaneous から Procedural Foliage Spawner を選択します。森を作りたいので、名前は PFS_Forest としておきます。

f:id:masahiro8080:20191130140142p:plain
Procedural Foliage Spawner の作成

作成した Procedural Foliage Spawner を開きます。Foliage Types の + ボタンを押下し Foliage Type Object に先ほど作成した FT_Tree01 を設定します。Foliage Types は Procedural Foliage Spawner で配置する Static Mesh に関する設定です。

f:id:masahiro8080:20191130183551p:plain
Foliage Type Object に FT_Tree01 を設定

以上で Procedural Foliage Spawner の設定は終わりです。
他のパラメータについては公式リファレンス を参照してください。

Procedural Foliage による Static Mesh の配置

先ほど作成した Procedural Foliage Spawner をレベルに配置し、Static Mesh を配置します。

ちゃっと広いレベルを作成したかったのでランドスケープを使用しています。

f:id:masahiro8080:20191130183946p:plain
Landscape モードでランドスケープを作成

PFS_Forest をレベルに配置します。そのままでは小さいのでスケールを変更して大きな領域にしておきます。

f:id:masahiro8080:20191130184849p:plain
レベルに PFS_Forest を配置する

Static Mesh の配置には、PFS_Forest の Detail タブ内 Procedural Foliage カテゴリにある Resimulate ボタンを押下します。

f:id:masahiro8080:20191130185044p:plain
PFS_Forest の Procedural Foliage カテゴリ

すると Procedural Foliage Spawner の Foliage Types に設定した Static Mesh がレベル上に配置されます。

f:id:masahiro8080:20191130185204p:plain
Resimulate した結果

以上で Foliage Type に設定した Static Mesh を配置し、森を作成することが出来ました。

基本的な使い方は以上です。あとは求める背景に近づけるために、パラメータの調整や新しく Foliage Type を作成していきます。

Foliage Type の調整

配置した木の密集具合や木の大きさ等の調整は Foliage Type で行います。
Foliage Type のパラメータを変えて Procedural Foliage Spawner で Resimulate を繰り返し、求める背景に近づけていきます。

ここでは今回設定したパラメータの一部をざっくりと説明していきます。各パラメータに関しては Procedural Foliage Spawner 同様、公式リファレンス を参照してください。

Placement セクション

Placement セクションでは配置に関するパラメータを設定します。
垂直位置のばらつきや地面に対して垂直に Static Mesh を配置するか、ピッチの角度のばらつきを設定できます。今回は Z Offset で少し垂直位置が下がっている木があるようにしてみたり Random Pitch Angle で少し傾いた木があるように設定しました。

f:id:masahiro8080:20191207155626p:plain
Placement セクション

Collision セクション

Collision セクションでは配置する Foliage Type 同士の重なりに関するパラメータを設定します。
今から配置しようとしている Foliage Type の半径内と他の Foliage Type の半径内が重なった際、ルールや優先度によりどちらかが削除されることになりますが、その半径をここでは設定できます。半径は Collision Radius と Shade Radius の2つを設定できます。今回は Collision Radius を少し変更している程度であまり意味があって変更したわけではないです。

f:id:masahiro8080:20191207160241p:plain
Collision セクション

Clustering セクション

Clustering セクションでは密度や年齢に関するパラメータを設定します。
何世代まで配置するかや配置しようとする Static Mesh の密度、そのばらつきを設定できます。Num Steps は 0 だと最初の世代のみが配置されます。Initial Seed Density は種の密度を設定します。密にしたい場合は大きめの値を設定します。Spread Variance は種のばらつきを設定します。今回は、Num Steps を 5 に設定し、6世代まで配置できるようにしています。また Spread Variance を少し大きめに設定しています。

f:id:masahiro8080:20191207164817p:plain
Clustering セクション

Growth セクション

Growth セクションは年齢による成長に関するパラメータを設定します。
Collision セクション で設定した Shade Radius を無視できるようにしたり、最大の年齢を設定できます。Can Grow in Shade と Spawns in Shade をともに true にすることにより Shade Radius を無視できます。今回は、Max Age や Procedural Scale を変更してみています。

f:id:masahiro8080:20191207170259p:plain
Growth セクション

Instance Settings セクション

Instance Settings セクションでは配置された Static Mesh に関するパラメータを設定します。
Mesh を配置する際のおなじみの設定がほとんどかと思います。今回は Collision Presets を No Collision にしていますが、コリジョンが必要な場合はここで適切なコリジョンに設定します。

f:id:masahiro8080:20191207170730p:plain
Instance Settings セクション

複数の Foliage Type の設定と配置

木の Foliage Type を調整した結果、このような感じになりました(途中で Exponential Height Fog を配置しました)。

f:id:masahiro8080:20191207185605p:plain
途中結果

今は木だけですので、地面に草や石も生やしてみます。

今回は草用と石用の Procedural Foliage Spawner を新しく作成しました。草や石の Foliage Type を作成し、それぞれに Procedural Foliage Spawner に設定しています。これらも木の場合と同様にレベルに配置し、Resimulate します。

f:id:masahiro8080:20191207185150p:plain
草の Procedural Foliage Spawner

もしかしたら、一つの Procedural Foliage Spawner に木や草、石をまとめてもよいのかもしれないのですが納得のいく配置が出来なかったので今回は Procedural Foliage Spawner を複数に分けています。

Static Mesh の配置の抑制

ここまでで次のような感じになりました。
ここで画像の手前から真ん中の辺りに向かって道のようにしたいと思いました。その部分に配置されている花や草が邪魔なので、その部分には配置されないように設定します。

f:id:masahiro8080:20191207171800p:plain
ここまでで作成した森

Procedural Foliage Spawner を配置した範囲の中で Static Mesh を配置したくないという領域がある場合には Procedural Foliage Blocking Volume を使用します。Modes パネルで Procedural Foliage Blocking Volume を検索し Procedural Foliage Spawner の中で Static Mesh を配置したくない場所に配置します。

f:id:masahiro8080:20191201140706p:plain
Procedural Foliage Blocking Volume の配置

あとは Procedural Foliage Spawner 側で Resimulate を押下するだけです。押下すると Procedural Foliage Blocking Volume を配置した部分は Static Mesh が配置されなくなります。

f:id:masahiro8080:20191201140946p:plain
Procedural Foliage Blocking Volume 配置後の Resimulate 結果

この機能を使用し、道のような部分を作成しました。

f:id:masahiro8080:20191207172432p:plain
Procedural Foliage Blocking Volume を配置し、Resimulate

どことなく物足りなさを感じたので、倒れた木を一つ配置して(これは手作業)完成としました。

f:id:masahiro8080:20191207145817p:plain
完成

おわりに

以上で Procedural Foliage についての説明は終わりになります。
Procedural Foliage は、まだ Experimental の機能ということで今後どうなっていくのか楽しみです。 ここまでお読みいただいてありがとうございました。

明日は、@suihanki さんの「VRネタで何か一発」です。

参考

How To Create And Use Procedural Foliage Volumes - UE4 Tutorial Open World ツールのプロパティ リファレンス