PCGを使ってLevel作成

PCGを使って島を作ります。

プラグインの導入

編集 > プラグインでWaterにチェックを入れて再起動。
エラーが出るかと思いますので「DefaultEngine.ini にエントリを追加しますか?」をクリック。

編集 > プラグインでProcedural Content Generation Frameworkにチェックを入れて再起動。いわゆるPCGです。

空のレベルを作成

ファイル > 新規レベル > 空のレベルを作成。

環境ライト ミキサー

ウィンドウ > 環境ライト ミキサーを開く。
これは超簡単に空とライトを揃えられるものです。
「スカイライトを作成」「大気ライトを作成」「Sky Atmosphereを作成」「ボリュメトリック クラウドを作成」「ハイトフォグを作成」全部クリックする。

ビューポートでCtrl(右側)+Lで太陽の向きが調整できます。

ランドスケープの作成

上メニューの「選択モード」をクリックしてランドスケープモードに切り替える。
ランドスケープはデフォルトのまま「作成」をクリック。

海の追加

選択モードに戻す。

+アイコンをクリックして、全てのクラス > Water Body Oceanを選択。
位置を調整します。アウトライナーのWaterBodyOceanを選択して、詳細の位置を全て0.0にする。

スプラインポイントで島の形を作る
アウトライナーのWaterBodyOceanを選択し、ビューポートのスプラインポイント(白い線の点)を移動させて島を変形させる。白い線で右クリックすればスプラインポイントを追加できます。

Curl Noiseで島の輪郭をギザギザにする
アウトライナーのWaterBodyOceanを選択し、詳細のTerrain > Water Heightmap Settings > Effects > Curl NoiseのCurl 1AmountCurl 2Amountで島の輪郭をギザギザにできます。
値は0.1とか0.2で十分です。

ランドスケープモード

再びランドスケープモードに戻す。

ランドスケープウィンドウのEdit LayersにWaterとLayerがあります。名前の変更が可能です。LayerをMainにしました。

スカルプト
ランドスケープでスカルプトを選択し、ビューポートで島の中心部を少しだけ盛り上げます。
Shiftを押しながらクリックすると盛り下げられます。
ブラシ設定 > ブラシサイズでブラシの大きさを変更できます。
スムージング
ランドスケープでスムージングを選択し、ビューポートで島の凸凹をスムーズに調整できます。

アウトライナーのWaterBodyOceanを選択し、詳細のTerrain > Water Heightmap Settings > Falloff Settingsの
Falloff Angleを下げれば山の角度が下がって滑らかになります。
Edge Offsetを上げれば海沿いの平らな砂浜の範囲が広くなります。ここをマイナスにすれば、海沿いが平らではなくなります。

地面のマテリアル

Quixel BridgeでBRIGHT DESERT SAND (sjzkfega)をダウンロードしました。

アウトライナーでLandscapeを選択し、詳細のランドスケープ > ランドスケープマテリアルにMI_Bright_Desert_Sand_sjzkfega_2Kをドラッグ&ドロップするだけで適用できます。

マーケットプレイスでtropical Vegetation: Banana Plantsをダウンロードしました。

コンテンツブラウザで右クリックしてPCG > PCGグラフを選択。名前はPCG_Testにしました。

PCG_Testの編集
ノードを組む

Inputのvを押して開く。
Landscapeから線を伸ばしてSurface Samplerを配置。
Surface Samplerを選択した状態でデバッグ > Debugにチェックを入れる。
コンテンツブラウザにあるPCG_Testをドラッグ&ドロップでビューポートに配置。

Surface SamplerのOutから線を伸ばしてTransform Pointsを配置。
Transform Pointsを選択した状態で設定 > Rotation MaxのZを360にする。Minが0ですから0~360度までランダムに配置されるようになります。
Surface SamplerのDebugのチェックを外して、Transform PointsのDebugのチェックを入れて確認。

RotationのXYは-10~10にして、Scale(XYZ)を1.5~2.3にする。
Transform PointsのOutから線を伸ばしてStatic Mesh Spawnerを配置。
Static Mesh Spawnerを選択し、選択 > Mesh Entriesを+して5つにする。
インデックス[0]を開き、Descriptorも開く。
Static Meshにbanana_01_01を指定。
インデックス[1]~[4]にもStatic Meshを指定します。

Transform PointsのDebugのチェックを外してビューポートで確認。
InputのLandscapeは、例えば45度の坂ならオブジェクトも45度に近い傾きで配置される。Landscape Heightは坂でも垂直に近い形でオブジェクトが配置されます。
Surface SamplerのPoint Per Squared Meterを減らすとキューブの数が減ります。Point Extentsでキューブの大きさを変更できます。大木のような大きなものを配置する時はキューブを大きくしておいた方が良いです。
今回はPCGグラフをドラッグ&ドロップで配置しましたが、ボリューム > PCGVolumeを配置して、その詳細からPCGグラフを指定する方法もあります。
ビューポートでPCG_Testのスケールを大きくして島全体を覆う。
ノードを組む

Surface SamplerのOutから線を伸ばしてPoint Filterを配置。そのInsideFilterからTransform Pointsのinに繋げる。
Point Filterを選択した状態で、
Operator: >
Target Attribute: $Position.Z
Use Constant Threshold: True
Type: Float
Float Value: 120
にする。
ビューポートで確認。

Quixel BridgeでWILD GRASS (vlkhcbxia)をダウンロードしました。

ノードを組む

Surface SamplerからStatic Mesh Spawnerまでを複製。
Surface SamplerのSeedを適当に変更する。木と同じSeedだと木と重なって配置されるためです。
Transform PointsのScale(XYZ)を2.5~3.2にする
Static Mesh Spawnerを選択し、選択 > Mesh Entriesを削除してから+して3つにする。
インデックス[*]を開き、Descriptorも開き、Static Meshを指定。
フォリッジで調整
選択モードからフォリッジモードに切り替える。
ブラシサイズを1024にする。
草を3つ選択。
ペインティング > Scale Xの最小を2.5、最大を3.2にする。
ペイントモードで草を配置していく。

一通りペイントしたら、ブラシサイズ256、ペイント密度を0.1にしてShiftキーを押しながらクリックして草を消して調整。

その他

Copy Points
Targetの周りに、Sourceを表示するものです。
大きな木をTargetに繋いで、Sourceに草を繋いで木の周りに生やしたりできます。

Create Points Grid
碁盤の目のような配置にできます。

Density Filter
密度フィルターです。Lower Boundを0.9、Upper Boundを1.0にするとスカスカになります。
黒が0、白が1ですから、Surface Samplerのデバッグで白のキューブしか表示されない状態。

Density Noise
ランダムで密度を設定できます。例えばCreate Points Gridは密度が統一されていますが、Density Noiseを繋げれば密度をバラバラにできます。

Get Spline Data
Levelにスプラインを配置してタグを登録していれば、Get Spline Dataでスプラインの範囲内(On Interior)だけに生成させたり、スプライン上(OnSpline)に生成させたりできる。
生成する時はGet Spline DataSpline SamplerStatic Mesh Spawnerと繋ぐ。
Get Spline DataSpline SamplerDifferenceと繋いで消すこともできます。

Normal To Density
平地ではDensityを1(白)、急斜面では0(黒)にしてくれます。
このノードの後にDensity Filterを使えば、斜面に草木を生やさないようにすることができます。

Point Filter
地面のマテリアルを指定してフィルターをかけられます。

Self Pruning
重なり合っているキューブは非表示になります。
木と木が不自然に重なっている時などは、このノードを通す。

Spawn Actor
スタティックメッシュではなくアクターを生成します。

コメント

タイトルとURLをコピーしました