| name | carve-sprite |
| description | 3 面図 (正面・右向き・背面の立ち絵を横に並べた 1 枚) から、4 方向の歩きスプライト (sprite.json + gallery の PNG/GIF) を機械で彫り出す。キャラの歩き 4 方向が要るとき、立ち絵 1 枚はあるが向きと歩きコマを増やしたいとき、AI 画像生成の出力をゲームで使えるスプライトにしたいときに使う。 |
carve-sprite — 3 面図から 4 方向の歩きを彫り出す
絵は描かない。 供給された絵から立体を彫り出し (visual hull)、腕と脚を
立体のまま振って 4 方向へ描き直す。だから止まった絵は元の絵と 1 画素も
違わないし、歩きは 4 方向で辻褄が合う。
使い方
python3 $(ENGINE)/bin/carve/carve.py 三面図.png --id 名前 --size 32x48
ENGINE はこのゲームの Makefile の ENGINE ?= と同じ場所。実行した
ディレクトリの assets/chars/名前.sprite.json と gallery/名前/
(各向きの PNG + walk.gif) に書き出す。コマは idle / walk_l / walk_r。
下絵の条件
- 1 枚に、左から 正面・右向き・背面 の順で横に並べる(右向きの 4 体目が
あっても良い。左向きは右向きの鏡映で作られる)
- 背景はベタ 1 色か市松。図柄と紛らわしい模様は不可
- 直立した人型。持ち物は片手に 1 つまで (どちらの手かは色で自動判定)
- 拡大済みの絵でよい (格子は自動で推定しない。外接枠を升目へ落とす)
体型が合わないとき (--profile)
頭でっかち・足が短いキャラは、切る位置を JSON で渡す。数字は 2 つで足りる
ことが多い。正面の絵の行ごとの幅を見て、くびれ (首) と腕の終わり (腰) の
高さを全身に対する割合で書く:
{ "headRatio": 0.46, "hipRatio": 0.72 }
headRatio 首のくびれの高さ (ここから上は曲げない)
hipRatio 腕の終わり = 脚の始まり
"tool": "none" 持ち物なしと明示 (スカートの裾などを持ち物と
誤検出したときに)
reach 振り幅 (既定 3)。動きが大げさ/物足りないとき
出力の検査の読み方
ツールが毎回自分で検査して数字を出す。全部緑になってから使う:
投影の一致 … ずれ 0px — 止まった絵が元の絵と一致 (背面だけは
背面図にしか無い形のぶん残差が出る。~100px なら正常)
右の鏡映と 位置ずれ 0px 色違い 0px — 左右の向きが完全な対
接地 46 が全コマ同じ — 歩いても床にめり込まない
塊 [1, 1, 1] — 千切れが無い
仕上がりは python3 $(ENGINE)/bin/lint-sprite.py と lint-anim.py にも
かける (既定 16 色は lint の上限に合わせてある)。
できないこと
- 背面図にしかない形 (うなじの髪など) は出ない — 背面はほぼ正面の鏡映
- 腕がめくれて現れる場所の色は「見えている所の続き」からの推測
- 歩き以外の動き (振り下ろし等) は未昇格
出来上がりの絵が画風に合わないときは、sprite.json を手で直してよい
(機械の出力は下書き。正典はあくまで sprite.json の方)。