ノード一覧に戻る

マスク分散

mask_scatter

マスクの有効画素へ1種類または複数の重み付きスタンプを置きます。間隔・基準点・重なり順・端の回り込み・見た目を調整できます

確認済み
解説あり

入力ポート

名前説明
マスク
mask
Image
必須
スタンプの中心位置を選ぶマスクです。スタンプ本体は範囲外へはみ出す場合があります
スタンプ
stamp
Image
各点に配置する画像(未接続時は1pxドット)
スタンプ候補
stamps
List<Image>
配置ごとに選ぶ画像のリストです。接続すると単一の「スタンプ」入力より優先されます
候補の出やすさ
weights
List<Float>
各スタンプ候補の出やすさです。0でその候補を除外し、未接続なら全候補を同じ確率で使います

出力ポート

名前説明
画像
output
Image
生成された分散画像

パラメータ

名前既定値範囲説明・選択肢
count
Int
161–4096

配置するオブジェクト数

シード
seed
Int
00–99999

配置を再現するための乱数シード

配置
placement
Enum
Random

密集も起こるランダム配置か、中心間隔を保証する配置かを選びます

  • ランダムRandom
    従来どおり完全ランダムに置きます。近い位置へ固まる場合があります
  • 間隔を空けるKeepApart
    近すぎる中心を除外します。草・星・石・木の節を均等すぎず自然に散らす時に向きます
中心の最小間隔
min_distance
Float
41–512 / step 0.5

中心同士を何px以上離すかです。重なりを減らすならスタンプ幅前後から始め、個数が置けない時は下げます

左右をつなぐ
wrap_x
Bool
false

はみ出したスタンプ画素を反対側へ回します。「間隔を空ける」では左右端越しの中心間隔にも適用されます。シームレスタイル向けです

上下をつなぐ
wrap_y
Bool
false

はみ出したスタンプ画素を反対側へ回します。「間隔を空ける」では上下端越しの中心間隔にも適用されます。シームレスタイル向けです

しきい値
threshold
Float
0.50–1 / step 0.01

配置対象として扱う最小マスク値

重なり順
draw_order
Enum
GenerationOrder

スタンプが重なった部分で、どちらを手前に描くかを決めます

  • 生成順GenerationOrder
    シードから決まる生成順で重ねます。既存プロジェクトと同じ結果を保つ時はこちらです
  • 上から下BackToFrontY
    基準点が上の物から描き、下の物ほど手前に見せます。草・木・キャラクターの重なりに向きます
配置の基準点
anchor
Enum
Center

スタンプ内のどの点を、選ばれたマスク画素へ合わせるかを決めます

  • 中央Center
    画像の中央を配置点に合わせます。既存プロジェクトと同じ動作です
  • 下中央BottomCenter
    画像の下中央を配置点に合わせます。足元・幹・草の根元・小物を地面に揃える時に使います
  • 指定位置Custom
    画像左上から数えた画素位置を配置点に合わせます
基準点X
anchor_x
Int
00–4096

スタンプ左上から数えた横方向の画素位置です。0が最初の画素で、画像外の値は端へ丸められます

基準点Y
anchor_y
Int
00–4096

スタンプ左上から数えた縦方向の画素位置です。0が最初の画素で、画像外の値は端へ丸められます

Alphaを使う
alpha_enabled
Bool
true

マスクの明るさではなくアルファを使って判定

反転
invert
Bool
false

マスクの反対側の領域に分散配置

color
Color
[1,1,1,1]

スタンプ未接続時のドット色

ランダム反転
random_flip
Bool
false

スタンプごとにランダムで左右・上下反転します

ランダム回転
random_rotate
Bool
false

スタンプごとに90°単位でランダム回転します

大きさのばらつき
scale_jitter
Float
00–1 / step 0.05

スタンプごとの大きさのばらつきです(0で全部同じ大きさ)

明るさのばらつき
brightness_jitter
Float
00–1 / step 0.05

スタンプごとの明るさのばらつきです(0で全部同じ明るさ)

概要

マスクのしきい値を通った画素へスタンプを置くノードです。1枚を繰り返すだけでなく、 複数の画像を「草A 70 / 草B 20 / 花 10」のような比率で混ぜられます。中心間隔、足元を 揃える基準点、上下の重なり順、タイル端の回り込みまで1ノードで扱えます。

使い方のポイント

  • まずplacement=Randomで偶然の固まりも含む散り方を試し、草・星・石が一か所へ 集まりすぎる時だけKeepApartへ切り替える。既存プロジェクトはRandomのまま同じ結果になる
  • min_distanceは中心同士の距離。3px程度は軽い密集防止、スタンプ幅前後なら重なりを 大きく減らせる。指定個数が収まらない警告が出たら、値を下げるかマスク範囲を広げる
  • 複数素材は List Create(Image) を「スタンプ候補」へつなぐ。「候補の出やすさ」には 同じ個数の List Create(Float) をつなぐ。未接続なら均等、0ならその候補を出さない
  • 草・木・人物は anchor=BottomCenterdraw_order=BackToFrontY を組み合わせる。 根元や足元がマスク位置へ揃い、画面下側の物が自然に手前へ重なる
  • シームレスタイルは wrap_x / wrap_y を有効にする。端から出た画素が反対側へ続き、 KeepApartでは反対端どうしの中心間隔も同時に守られる
  • 自然に見せる鍵はばらつきパラメータ: random_flip + scale_jitter 0.3前後 + brightness_jitter 0.2前後で「コピペ感」が消える (random_flipは上下反転も含むため、根元を下へ固定した草・人物ではオフが無難)
  • 範囲マスクの作り方で表現が決まる: path_mask で地面の形に草を、 coordinates(Y グラデ)をしきい値で切って配置可能領域を上下に限定する、など
  • mask値は密度の重みではありません。しきい値を通った候補は同じ確率で選ばれます。 RGBの明るさを使う時は alpha_enabled=false にします
  • seedseed_range で振れば散り方のバリエーション比較ができる
  • スタンプ未接続なら1pxドット: 星空・砂利はこれで十分なことも多い
  • 重みだけを変えても位置・反転・回転・大きさは変わらない。素材比率を調整しながら 同じ構図を比較できる

関連ノード

  • path_mask — 散布範囲の定番の作り方
  • seed_range / variant_select — 散り方ガチャ
  • blend — 散布結果の背景への合成
  • path_array — ランダムではなくパスに沿った規則配置

使い方

  • 普通の使い方

    • PathMask の出力を mask に入れる
    • count で数を決める
    • seed を変えて散り方を変える
  • 密集を避ける

    • placementKeepApartへ変更する
    • 小さな星や砂利は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より画像が大きければ一部が重なります
  • KeepApartcount個を置けない時は、置けた分だけ出力してmin_distanceへ警告を表示します
  • mask内に保証されるのは中心位置だけです。大きなstampの本体はmask外へはみ出すことがあります
  • 出力サイズは入力マスク画像と同じです
  • ばらつきはすべて seed から決定論的に導出されます
  • Stamp Candidates接続時は、単一のStamp入力より候補リストが優先されます
ノード一覧に戻る
マスク分散 — PixPipeline ノード解説