概要
「同じグラフからパラメータ違いを一括生成する」量産の中核ノードです。
variant_range などが作る候補リストを1件ずつグラフに適用して評価し、
色違い・シード違い・角度違いの画像群を1枚のスプライトシートにまとめます。
PixPipeline の強みであるバリエーション量産はこのノードで形になります。
まず大事なこと
- このノードは、
itemsに入ってきた候補を 1 件ずつ適用して画像を作る ノードです - 時間方向の反復をする
AnimationRenderとは違い、こちらは 候補方向の反復 です
何が起きるか
考え方はこうです。
itemsから 1 件選ぶ- その snapshot を graph に当てる
image入力の結果を 1 枚レンダリングする- それを全件ぶん繰り返す
- 全件が成功した時だけ
framesとspritesheetを確定する
1件でも評価に失敗した場合は部分結果を返さず、バッチ全体が失敗します。
出力の見方
| 出力 | 何が入るか | どう使うか |
|---|---|---|
records |
実際に使った候補一覧 | 候補の記録確認 |
frames |
1 件ごとの画像一覧 | 個別フレーム確認 |
spritesheet |
frames をまとめたシート |
再生・保存・書き出し |
count |
正規化した候補数(全件成功時) | 全体件数確認 |
frame_count |
シートのフレーム数 | metadata 確認 |
まずはこの例
たとえば次の graph を作ります。
PixelCanvasBrightnessVariantRangeBatchRender
設定:
VariantRange.key = strengthVariantRange.start = 0VariantRange.end = 1VariantRange.count = 5Brightnessの強度パラメータを変数strengthに bindPixelCanvas.image -> Brightness.image -> BatchRender.imageVariantRange.variants -> BatchRender.items
このとき VariantRange 側の候補はこうです。
[
{ "snapshot": { "values": { "strength": 0.0 } } },
{ "snapshot": { "values": { "strength": 0.25 } } },
{ "snapshot": { "values": { "strength": 0.5 } } },
{ "snapshot": { "values": { "strength": 0.75 } } },
{ "snapshot": { "values": { "strength": 1.0 } } }
]
BatchRender はこれを 1 件ずつ graph に当てるので、明るさ違いの画像 5 枚が作られます。
records
[
{ "name": "strength=0.000", "snapshot": { "values": { "strength": 0.0 } } },
{ "name": "strength=0.250", "snapshot": { "values": { "strength": 0.25 } } },
{ "name": "strength=0.500", "snapshot": { "values": { "strength": 0.5 } } },
{ "name": "strength=0.750", "snapshot": { "values": { "strength": 0.75 } } },
{ "name": "strength=1.000", "snapshot": { "values": { "strength": 1.0 } } }
]
frames
[
"<Image strength=0.0>",
"<Image strength=0.25>",
"<Image strength=0.5>",
"<Image strength=0.75>",
"<Image strength=1.0>"
]
count / frame_count
count = 5
frame_count = 5
2軸の組み合わせ例
CartesianProduct を前段に置くと、2軸の候補をそのまま batch できます。
例:
VariantRange(key=strength, start=0, end=1, count=3)SeedRange(key=seed, start=10, count=2, step=1)CartesianProductBatchRender
このとき組み合わせ数は 3 x 2 = 6 件です。
BatchRender は CartesianProduct の中に入っている snapshot をまとめて、実際にはこういう候補として扱います。
{
"snapshot": {
"values": {
"strength": 0.0,
"seed": 10
}
}
}
snapshot key の当て先
snapshot key は次の形式で graph へ当てます。
- variable-bound param の変数IDまたは変数名
variable_refノードのID・変数ID・変数名nodeId:paramId形式の direct param
初心者向けには、まず 変数名に合わせる のが一番分かりやすいです。
direct param は、graph内に実在するフロントエンドのノードIDとパラメータIDを
大文字小文字も含めて正確に nodeId:paramId と書いた時だけ適用されます。
よくある失敗
- 全フレーム同じ画像になる: snapshot の key がグラフのどこにも当たっていない。
変数名(または
nodeId:paramId)とVariantRange.keyが一致しているか確認する animation_renderと混同する: あちらは時間方向(同じ設定で全フレーム)、 こちらは候補方向(1候補=1枚)。歩きアニメの色違い量産のように両方必要な場合は 組み合わせて使う- フレームサイズがバラつく: 上流に
solid_render等がある場合はframe_mode = FixedCanvasにして寸法を固定する(8方向素材の例を参照) - 1件だけ失敗した: Batch Render はall-or-nothingです。成功分だけを返さず、 失敗した候補を直してから全件を再評価します
注意
- 各項目は
VariantRecordに正規化されてから使われます ListZip/CartesianProductが返すMapもそのまま渡せますindex/a_index/b_indexのような bookkeeping key は自動で無視します- 異なる組み合わせ軸が同じsnapshot keyを書いた場合は、暗黙に上書きせず エラーになります。どちらを採用するか明示的に統合してください
Solid 8方向素材
Solid Render のカメラ方位角を45度刻みで量産する時は、VariantRange から direct param key を作るのが最短です。
設定例:
Solid RenderノードID:renderVariantRange.key = render:azimuthVariantRange.start = 0VariantRange.end = 315VariantRange.count = 8Solid Render.frame_mode = FixedCanvasSolid Render.camera_angle_snap = 45BatchRender.columns = 8
BatchRender は各 snapshot を1件ずつ graph に当てるため、8方向の画像を同じフレームサイズでまとめられます。
関連ノード
variant_range/seed_range— 候補リストの生成元(このノードとほぼセット)cartesian_product— 2軸(色×シード等)の組み合わせ候補を作るbatch_export— フレーム群をファイルとして書き出すanimation_render— 時間方向の反復(アニメーション)はこちら