概要
マスクのしきい値を通った画素へスタンプを置くノードです。1枚を繰り返すだけでなく、 複数の画像を「草A 70 / 草B 20 / 花 10」のような比率で混ぜられます。中心間隔、足元を 揃える基準点、上下の重なり順、タイル端の回り込みまで1ノードで扱えます。
使い方のポイント
- まず
placement=Randomで偶然の固まりも含む散り方を試し、草・星・石が一か所へ 集まりすぎる時だけKeepApartへ切り替える。既存プロジェクトはRandomのまま同じ結果になる min_distanceは中心同士の距離。3px程度は軽い密集防止、スタンプ幅前後なら重なりを 大きく減らせる。指定個数が収まらない警告が出たら、値を下げるかマスク範囲を広げる- 複数素材は
List Create(Image)を「スタンプ候補」へつなぐ。「候補の出やすさ」には 同じ個数のList Create(Float)をつなぐ。未接続なら均等、0ならその候補を出さない - 草・木・人物は
anchor=BottomCenterとdraw_order=BackToFrontYを組み合わせる。 根元や足元がマスク位置へ揃い、画面下側の物が自然に手前へ重なる - シームレスタイルは
wrap_x/wrap_yを有効にする。端から出た画素が反対側へ続き、KeepApartでは反対端どうしの中心間隔も同時に守られる - 自然に見せる鍵はばらつきパラメータ:
random_flip+scale_jitter0.3前後 +brightness_jitter0.2前後で「コピペ感」が消える (random_flipは上下反転も含むため、根元を下へ固定した草・人物ではオフが無難) - 範囲マスクの作り方で表現が決まる:
path_maskで地面の形に草を、coordinates(Y グラデ)をしきい値で切って配置可能領域を上下に限定する、など - mask値は密度の重みではありません。しきい値を通った候補は同じ確率で選ばれます。
RGBの明るさを使う時は
alpha_enabled=falseにします seedをseed_rangeで振れば散り方のバリエーション比較ができる- スタンプ未接続なら1pxドット: 星空・砂利はこれで十分なことも多い
- 重みだけを変えても位置・反転・回転・大きさは変わらない。素材比率を調整しながら 同じ構図を比較できる
関連ノード
path_mask— 散布範囲の定番の作り方seed_range/variant_select— 散り方ガチャblend— 散布結果の背景への合成path_array— ランダムではなくパスに沿った規則配置
使い方
普通の使い方
PathMaskの出力をmaskに入れるcountで数を決めるseedを変えて散り方を変える
密集を避ける
placementをKeepApartへ変更する- 小さな星や砂利は
min_distance=3〜5、草や木の節はスタンプ幅前後から試す - タイルでは
wrap_x/wrap_yを有効にすると、反対端の中心も近接扱いになり、 はみ出したスタンプ画素も反対側へ回る
複数の見た目を混ぜる
stampsへ画像リスト、weightsへ同じ個数の数値リストをつなぐ- 例:
[7, 2, 1]なら、おおよそ70% / 20% / 10%。合計を100にする必要はない - 件数不一致、負値、全て0は評価エラーになる。0は一時的に候補を外す時に便利
しきい値
0.5なら半分以上のマスク値の場所に置くPathMaskのような白+アルファのマスクなら、そのままで問題ない- 通過後の値の大小は抽選確率へ影響しない
反転
- オンにすると、塗られていない側に配置する
使用例
PathMask と組み合わせる
[MultiPathEditor] → [PathMask] → mask → [MaskScatter] → [Preview]
スタンプ未接続でドットをばらまく
[PathMask] → [MaskScatter(count:32, color:白)] → [Preview]
任意のマスク画像を使う
[PixelCanvas] → mask → [MaskScatter]
ばらつきで自然な群れを作る
草・石・星などを1つのスタンプから量産する場合:
[草スタンプ] → stamp → [MaskScatter(random_flip:on, scale_jitter:0.4, brightness_jitter:0.3)]
同じ seed なら結果は毎回同じです(決定論的)。
草2種と花を足元基準で散布する
[草A] ─┐
[草B] ─┼→ [List Create(Image)] → stamps ┐
[花] ─┘ ├→ [Mask Scatter(anchor:BottomCenter,
[7,2,1] → [List Create(Float)] → weights ┘ draw_order:BackToFrontY)]
注意事項
- 同じ中心ピクセル位置には重複して置きません
- スタンプ画像自体は重なることがあります
KeepApartが保証するのは中心間隔です。大きさのばらつきや横長スタンプでは、min_distanceより画像が大きければ一部が重なりますKeepApartでcount個を置けない時は、置けた分だけ出力してmin_distanceへ警告を表示します- mask内に保証されるのは中心位置だけです。大きなstampの本体はmask外へはみ出すことがあります
- 出力サイズは入力マスク画像と同じです
- ばらつきはすべて
seedから決定論的に導出されます Stamp Candidates接続時は、単一のStamp入力より候補リストが優先されます