ノード一覧に戻る

直積組み合わせ

cartesian_product

リストまたはパレット A と B の全組み合わせを作ります

確認済み
解説あり

入力ポート

名前説明
A
a
Any
必須
1つ目の元リストまたはパレットです
B
b
Any
必須
2つ目の元リストまたはパレットです

出力ポート

名前説明
組み合わせ
entries
List<Map>
全ての { a, b } 組み合わせです
要素数
count
Int
生成した組み合わせ数です

概要

2本のリストの全組み合わせを作るノードです。「サイズ2種 × 色3種 = 6通り」の ように、多軸のバリエーション表を機械的に展開します。素材の量産 (batch_render)の前段として使うのが典型です。

使い方のポイント

  • 量産の定番構成: variant_range(強度) + seed_range(seed) → cartesian_product → batch_render。「強度5段階 × seed4個 = 20枚」が一撃で出る
  • 件数は掛け算で増える(a.len() × b.len())。3軸目が要るときは 出力をさらに別の cartesian_product に通せるが、件数の爆発に注意
  • 「対応するペアだけ」でいいなら list_zip の方が件数が増えない

関連ノード

  • list_zip — 全組み合わせではなくペア対応
  • variant_range / seed_range — 軸の候補生成
  • batch_render — 展開結果の量産先
  • list_map — 組み合わせ表の後加工

まず大事なこと

  • ListZip が「同じ番号どうし」なのに対して、CartesianProduct全組み合わせ です
  • 2 件 x 3 件なら 6 件になります

まずはこの例

次の 2 つのリストを入れます。

a = ["small", "large"]
b = ["red", "blue", "green"]

このとき entries はこうなります。

[
  { "index": 0, "a_index": 0, "b_index": 0, "a": "small", "b": "red" },
  { "index": 1, "a_index": 0, "b_index": 1, "a": "small", "b": "blue" },
  { "index": 2, "a_index": 0, "b_index": 2, "a": "small", "b": "green" },
  { "index": 3, "a_index": 1, "b_index": 0, "a": "large", "b": "red" },
  { "index": 4, "a_index": 1, "b_index": 1, "a": "large", "b": "blue" },
  { "index": 5, "a_index": 1, "b_index": 2, "a": "large", "b": "green" }
]
count = 6

後段からどう見えるか

ListMapListFilter にこの entries を入れると、

  • index
  • a_index
  • b_index
  • a
  • b

をそのまま式で使えます。

例:

a_index == 0
a + b

Variant 系との相性

abVariantRecord のリストを入れると、後段の BatchRenderab の中の snapshot を自動でまとめて使えます。
つまり、「強度候補 x seed 候補」のような多軸量産の前段として便利です。

どういう時に使うか

  • seed 候補と別パラメータ候補の全組み合わせを作りたい時
  • 2軸の候補空間を明示データとして作りたい時
  • variant 候補生成前の batch 候補テーブルを作りたい時

注意

  • a.len() * b.len() 件になるので、候補数が一気に増えます
  • PaletteList<Color> として扱います
ノード一覧に戻る
直積組み合わせ — PixPipeline ノード解説