【Blender】オブジェクトを円形の領域にランダム配置しつつ、中心が密で、周囲にいくほど疎にする方法
日本庭園で芝生とか落ち葉とかを、ある程度まとまった単位でメッシュを作って、UE5にStatic Meshとして入れておきたいときにやったことです。
BlenderでGeometry Nodesを普通にランダム配置すると
これだとUE5上でPCGなどを使って配置したときに、やっぱり違和感があるんですよね。密集した芝生が、いきなり何もなくなるし、円形にランダムに植生していると、遠くから見たときに円形だってわかっちゃうんですね
あーそういうある程度円形風にまとまった芝生のStatic Meshを使ってるんだな、と。
そうじゃなくてもっと自然なひとかたまりのメッシュにしたいなと。
そうなると中心が密で、周囲が疎のランダム生成が必要になってきます
やりかた
Geometry Nodesで、今時点でこんなかんじです。シンプル円形メッシュの領域内にランダムなPointsを生成して、そこにMeshをInstanceする。
シンプルにやってる方であればおおよそこの作りだと思います。

ここで改善をひとつ。
[Distribute Points on Faces]ノードを[Random]から[Poisson Disk]にかえましょう。するとInputが変わります。
このPoisson Diskは普通だったら「メッシュ同士が重なってほしくない場合」によく使われるものですが、ポイントはそこじゃなくてInputの「Density Factor」です。こいつで配置確率を変えてやれる点がポイントです。
ここまで来ると閃く人も多いと思いますが、「つまり中央付近だったら高確率にして、中央から離れるほど低確率にすればいい」ことになります。
じゃあそういうノードを作ってみましょう。
まずはできるだけシンプルに行きたいので「自分の生成位置と中央との距離」でやってしまいます。つまり[Math]の[Distance]を使います。
[Distance]ノードのOutの[Value]を使います。ここからはやり方がいくつかあります。
1.MathのSubtract: 1 - Valueにする方法。Value Aは1.0固定にして、Value BにDistanceの結果をセットする。
2.Map Range: Distanceが1よりも大きくなる場合はこっち使ってもいいと思います。
3.Float Curveを使う: より多様な制御ができます。基本的にはin=0がout=1となって、in=1がout=0になるようなカーブにします。つまり右下りのカーブだということですね。

あとの調整は[Distribute Points on Faces]ノードの[Seed]値でやるのがおすすめ。
いい感じにバラけました。
