Landscapeあれこれ 後編
Landscapeの話の後編は植生の設定方法です。
前編で作成したLandscapeに植物等を配置していこうと思います。
植物のたぐいを配置する上で問題になるのはアクターを大量に置くのは難しいという点です。
アクターとして1つ1つ置くのは作業的にも厳しいですし、何より速度面に問題が出ます。
1つ1つのメッシュを描画する場合、よく言われるDrawCall数が増えてしまうのが原因の1つです。
しかし、草や木などは大量に描画する必要がある一方でそれほど多くのユニークなメッシュである必要もなかったりします。
サイズや配置した時の角度が少し違うだけでも割と別のものに見えます。
この手の自然物は3種類くらいのメッシュがランダムに配置されているだけでも十分だったりします。
そこで、同じメッシュをいっぺんに大量に描画する方法が求められます。
それがインスタンス化メッシュです。
1つのメッシュを複数配置する際にインスタンス化をしておくと1回のDrawCallで描画が可能です。
もちろんポリゴン数などの問題はあるものの、DrawCallを減らすことで描画コストを大幅に下げることが出来ます。
UE4ではこのインスタンス化メッシュを利用する代表格としてFoliageが存在します。
名前の通り植生に主に使われますが、小さな石や瓦礫のようなものにも使用可能でしょう。
今回はこれを実現するFoliageツールと、似たような機能を持つGrassツールについて解説します。
まずはFoliageツールですが、こちらはモードの中に [フォリッジ] モードが存在しています。
植物の葉っぱのアイコンがそれです。
このモードにはまず [フォリッジタイプ] を追加する必要があります。
追加できるのは StaticMesh で、SkeletalMesh は追加できません。
追加するには [フォリッジタイプの追加] ボタンを押すか、StaticMesh をドラッグ&ドロップすればOKです。
お前、植物じゃないだろ的なものまで追加されていますが気にしたら負けです。
あとはペイントツールと同様に配置したい場所にペイントしていくだけですが、いくつか設定をした方がいい物があります。
各フォリッジタイプを選択すると下の部分にパラメータが表示されます。
これらを設定することで配置されるメッシュのサイズや配置時の密度などの設定ができます。
よく使うであろう設定は以下のものでしょうか。
- Density / 1Kuu
1000x1000 UnrealUnit範囲での配置数
大きければその分密度が増します
- Radius
メッシュ1つ1つの間の距離
大きくすると配置がまばらになります
- Scale関係
スケーリングの方法とランダムに決定されるスケール値を指定できます
- Align to Normal
配置された面の法線にメッシュを整列させるかどうか
- Ground Slope Angle
どの程度の角度の坂まで配置されるかどうか
最小値と最大値の範囲の坂にまで配置され、それ以外では配置されません
- Cull Distance
メッシュが非表示になる距離
この距離間から外にでると自動的にオパシティマスクによる擬似半透明処理で消えていきます
もちろん範囲内に入れば擬似半透明処理で出現します
- コリジョンプリセット
衝突判定を取る場合のプリセット
![ue362.jpg](https://cdn-ak.f.st-hatena.com/images/fotolife/m/monsho/20171022/20171022124714.jpg)
これらの内、Painting以外のパラメータはアセットとして保存できます。
保存したい場合は各フォリッジタイプのアイコンにマウスオーバーした際に表示される保存アイコン(フロッピーディスクのアイコン)をクリックして名前を決定すればOKです。
このアセットはフォリッジタイプというアセットになり、次回からはフォリッジタイプとしてこのアセットも追加することが出来るようになります。
ペイント時には有効にしたいメッシュ、無効にしたいメッシュがあるかもしれません。
このようなときはアイコンをダブルクリックするかマウスオーバー時の左上のチェックを外しましょう。
外されたアイコンはグレーアウトしてペイント時に配置されないようになります。
Foliageツールのペイントは左クリックで配置、Shift+左クリックで削除が可能です。
色を塗る感覚でペイントするのが大変楽しいので自分の思うように塗り塗りしていきましょう。
もしも配置したあとに大きさや密度が気に入らない場合は [Reapply] を利用しましょう。
各フォリッジタイプのチェックした項目だけをペイントした部分において再調整を行うことが出来ます。
ちょっと密度が濃すぎたから減らそう、とか、サイズが大きすぎたので小さくしようとかはこのツールで行えます。
金属の箱のサイズのランダム性を追加し、密度を減らすとこんな感じになります。
いちいち消去しなくても修正できるのが便利ですね。
さて、続きからはUE4.8で追加されたGrassツールについて解説します。
UE4.8で追加されたGrassツールはFoliageツールとは違ってある特定範囲に自動的に植生を配置する機能です。
Foliageツールのようにペイントは出来ませんが、例えばLandscapeの草地の上に草をとにかくランダムで配置したい、という場合に便利です。
一旦Foliageツールで配置したメッシュを削除し、Grassツールでの配置を行ってみましょう。
Grassツールを利用するにはまず [ランドスケープ グラスタイプ] というアセットを作る必要があります。
[新規追加] → [その他] → [ランドスケープ グラスタイプ] で作成できます。
作成したらダブルクリックしてエディタを立ち上げましょう。
設定できるのは配置するメッシュと各メッシュの配置に関するパラメータ(密度など)です。
今回は草と何故か椅子を配置してみます。
作成したアセットはどこに設定するのか?
これは大変わかりにくいですが、なんとマテリアルです。
通常は存在していない出力項目として [Landscape Grass Output] というノードが存在します。
このノードの詳細パネルでグラスタイプアセットを設定することが出来ます。
複数設定することも出来ますが、今回は先ほど作成したアセットを設定します。
この出力ピンだけのノードは何も設定しないとエラーになります。
つなげるのは [Landscape Layer Sample] というノードです。
このノードをつなげるとマテリアルのコンパイルが正常に終了しますが、それだけでは何も変化がありません。
適用するには詳細パネルで [Parameter Name] を設定する必要があります。
ここに設定するパラメータ名とは何でしょうか?それは、[Landscape Layer Blend] で作成したレイヤーです。
前回、SoilとGrassというレイヤーを作成しましたが、そのうちのGrassにアセットを適用してみましょう。
設定したらコンパイルします。その結果はこちら。
見ての通り、Grassレイヤーでペイントした部分にグラスタイプアセットが適用されているのがわかるでしょう。
この状態でGrassレイヤーをペイントすると、当然ペイントした部分にもアセットが適用されます。
複数のグラスタイプを設定する場合は [Landscape Grass Output] のピンを追加して、同様に [Landscape Layer Sample] を設定します。
1つのレイヤーに複数のグラスタイプを設定することは可能ですが、複数のレイヤーに同一のグラスタイプアセットを設定することは出来ないようです。
Grassツールの利点はいくつかあります。
まず、特定のマテリアルレイヤーだけに植生を設定することが出来るという点です。
Foliageツールでは草地にだけ草を植えたいと思うと、ペイント時に気をつけながらペイントする必要があります。
Grassツールではこの辺りをエンジンが自動的に設定してくれるので、マテリアルペイントだけをしっかりやれば良くなります。
また、グラスタイプアセットを変更することで密度の変更などが簡単に、リアルタイムに確認できます。
Foliageツールではペイントをしてやる必要があるので手間としてはGrassツールの方がかからないでしょう。
しかし欠点も同時に存在しています。
同じ草地ではあるけど、一部はまばらに、一部は密度を高めに設定したい、という要求には答えられません。
草がまばらな草地と草が生い茂った草地をそれぞれ別のマテリアルレイヤーとして設定することで回避は可能ですが、そのような設定が多く必要になるとレイヤー数も多くなってくるので手間が増えます。
また、設定可能な項目が少ないです。
例えばスケール値のランダム性はGrassツールでは設定できません。
草や小さな石のようなサイズのランダム性がなくてもそれっぽく見えるものに使用するのが一般的で、比較的大きな木などに使用するのはオススメできません。
コリジョンが設定できないというのも欠点でしょう。
メッシュにコリジョンが存在したとしてもGrassツールで配置したメッシュにはコリジョンが設定されません。
その点でも大きなソリッドモデルには使用しづらいですね。
FoliageツールにしろGrassツールにしろ、動的なものには使えないので注意してください。
銃で撃ったら壊れる箱などはこれらのツールで配置できません。
ダイナミックではないマテリアルアニメーション(Timeノードを使ったりとか)は可能です。
インスタンスごとにランダム値を設定したいという場合のために [Per Instance Random] というノードもあるので、色を少し変化させるとかも可能です。
このランダムを利用することでGrassツールでのサイズ変更も可能かもしれませんね。
というわけで、前後編に分けたLandscape周りの話はこれで終了です。
細かな部分で面白そうなものがあったらまた紹介します。