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

UE5のPCGメモ

0
Posted at

【UE5】PCGで平坦な場所だけを抽出&密集しすぎたポイントを間引く方法

Unreal Engine 5のPCG(Procedural Content Generation)を使用していて、「平らな場所だけにオブジェクトを配置したい」「ポイント同士が近すぎるから間引きたい」という場面に直面した際の解決方法をまとめました。


1. 平坦な場所だけをピックアップする

地形(Landscapeなど)の中から、傾斜のない平坦な場所だけを抽出するには、地面の法線(Normal)を元にフィルタリングするのが一番簡単です。

使用するノード

  1. Surface Sampler (またはその他のサンプラー)
  2. Normal To Density
  3. Density Filter

image.png

手順

  1. サンプラーでポイントを生成した後、Normal To Density ノードを繋ぎます。
    • このノードは、ポイントが真上を向いている(平らである)ほど Density(密度)を 1.0 に、傾斜がきついほど 0 に近づけてくれます。デフォルト設定でOKです。
  2. 次に Density Filter ノードを繋ぎます。
  3. 詳細パネルで以下のように設定します。
    • Lower Bound: 0.850.95 (1に近づけるほど「完全な平坦」のみになります)
    • Upper Bound: 1.0

これだけで、指定した平坦さのポイントのみが残ります。ノードを選択して D キーを押してデバッグ表示しながら、Lower Boundの数値を調整してみてください。


2. 罠:Densityが1なのにActorが斜めに配置されてしまう場合

フィルタリングを通過したポイントはデータ上(RollやPitch)は間違いなく水平(0度)になっています。それなのに最終的にスポーンしたActorが傾いている場合、以下の原因が考えられます。

原因と解決策:Projectionノードの順番

一番ありがちなのが、Density Filter で平らなポイントを抽出した Projection ノード(地形に沿わせる処理)を行っているケースです。
これだと、せっかく平らなポイントを選別したのに、後から地形の傾きに合わせてポイントが回転してしまいます。

👉 解決策
Projection ノードを Normal To Density の前 に配置してください。
「ポイントを地形に投影して傾きを取得する」→「傾きを元に平らな場所を判定する」という順番にすることで解決します。

※スプライン等を元にポイントを生成している場合も、スプライン自体の回転を拾っている可能性があるため、同様にProjectionを先に挟んでLandscapeの法線を正しく取得するようにします。


3. Transform等で移動したポイントを一定距離で間引く

ポイントを Transform Points などでランダムに移動させた結果、ポイント同士が近くなりすぎてしまった場合、Self Pruning ノードを使って間引くことができます。

使用するノード

  1. Bounds Modifier
  2. Self Pruning

image.png

手順

Self Pruning は「ポイントの Bounds(境界ボックス)が重なっている場合に、一方を削除する」という挙動をします。そのため、まずは間引きたい距離に合わせて Bounds を設定します。

  1. 間引きたい処理の直前に Bounds Modifier ノードを繋ぎます。
  2. 詳細パネルで以下のように設定します。
    • Bounds Mode: Set (既存のBoundsを上書き)
    • Bounds Min: (-100, -100, -100)
    • Bounds Max: (100, 100, 100)
      (※この場合、半径100の範囲内に他のポイントがあれば重なる判定になります。必要な間隔に合わせて数値を調整してください)
  3. その後に Self Pruning ノードを繋ぎます。
    • これで Bounds が重なっているポイントが自動的に間引かれます。

💡 Bounds設定時のコツ

元のデータ(特にスプライン等から生成したポイント)は、Boundsが X: -500 ~ 500 のように細長い線状になっていることがあります。そのまま Self Pruning をかけると「X方向には遠くないと消えないが、Y方向には少しでも近いと消える」という偏った間引きになってしまいます。
そのため、Bounds Modifierの Mode を Set にして、X, Y, Zを均等な立方体サイズで上書きするのが綺麗に間引くコツです。

間引いた後にActorのサイズ感がおかしくなる場合は、Self Pruning の後にもう一度 Bounds Modifier を繋いで、Boundsを元のサイズや適切なサイズに戻してあげてください。


環境

  • Unreal Engine 5
0
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
0
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?