AIで2Dゲーム用スプライトを作る #1
こんな感じの動かせるキャラクタースプライトをローカル環境の生成AIで作る話です。


■ はじめに
みなさん SCAIL-2 というAIモデルをご存じでしょうか。動画の動きを任意のキャラクターにマネさせる事が出来るという凄いやつです。

なかなかいい精度でモーションコピーしてるんですよね。技術的な理屈はよく分かりませんが、やっている事は ロトスコープ にすごく似ているように感じます。数年前に チカっとチカ千花っ♡ がバズってたのが懐かしいです。っていうかもう7年前…? やば。
ゲームの世界ではカラテカやプリンスオブペルシャなんかがロトスコープの技法を使っている事で有名なのではないでしょうか。ロトスコープがゲームに使えるという事は、もしかしたらSCAIL-2もゲームに使えるんじゃないか? 元になるキャラクターの絵もAIで作ればゼロからスプライトを生み出せるのでは? しかも無料で? いけるんかこれ? どうなんだ? というわけで実際に試してみた、というお話になります。
ということで色々試してみた結果 "とりあえず動かせる" というレベルになった気がするので、自分用のメモを兼ねて何をしたかを記録しておこうと思います。
■ 具体的な流れ
見た目担当のキャラクター画像を作る (Illustrious + QwenImageEdit)
3Dの素体を作る (Pixal3D + AccuRig)
3D素体でモーションを再生して録画 (モーションはMixamoから拝借)
録画した動きに 1 のキャラクターを乗っける (SCAIL-2)
ピクセルアート化 (PixelOE)
上記の流れで進めるのが今のところベストかな、と思います。が、AIの進化が早すぎてすぐに陳腐化してしまう恐れもあったり無かったり。
基本的に ComfyUI を利用してAIを動かします。
■ リファレンス画像の作成
というわけで、さっそく見た目担当の画像を作っていきます。今回は検証用に Civitai の公式?キャラクター CivChan を使います。

このCivChanをベースに、ゲームっぽく2~3頭身くらいにデフォルメしようと思います。デフォルメ用のLoRAは Shantae Sprites style を使います。
▼ 正面画像を作る
ComfyUIで生成していきます。
checkpointはIllustrious系の Nova Anime XL を使います(深い理由はナシ)。

「civchan, chibi, full body, ...
ninniku, yasai, karame, abura, ... (嘘)」
生成ガチャの回数を減らすため ControlNet(OpenPose) で姿勢+体型を固定しましたが、これは不要だったかも知れません。
ということで出来た画像が ↓ これ。

▼ 別の角度の画像を作る
キャラクターの向きを変更した画像を作るため QwenImageEdit-2511 を使います。角度を変えるプロンプトは https://note.com/comfyakp/n/n3668cc6fcd4e を参考にさせていただきました。


「Change to back view (180 degree), 背面视图(180度), eye level. Her maid outfit features a large, diamond-shaped cutout on the back, revealing her skin.」
背中側のデザインがちゃんと反映されるかの確認用に四角く穴を開けて肌を見せてます。

「Change to right side view (90 degree), 右侧视图(90度), eye level. Do not alter the body proportions from the image1.」

「Change to front-right view (45 degree),右前视图(45度),eye level. Do not alter the body proportions from the image1.」

「Change to back-right view (135 degree), 右后视图(135度). Her left eye is slightly visible. As shown in Image 2, her back is visible, and the back of her maid outfit is cut low. Do not alter the body proportions from the image1.」
Image2に背面画像を渡し、背中のデザインを反映させてます。
こんな感じでしょうか。左右は反転コピーして使います。
▼ 背景除去
画像が揃ったので不要な背景を RGBA = (0, 255, 0, 0) で塗り潰して除去します。G=255にする理由はアルファが使えない場合でも背景部分を分かりやすくするためです (そんなに重要ではない)。

複数のアルゴリズムを重ね掛けしたほうが綺麗になる気がしたので BiRefNet-general, BiRefNet-toonout を組み合わせています。妙に複雑なフローになってしまった... 背景を消したい場面ってけっこう多いんですけど未だに正解が分かってません。
▼ リファレンス画像完成

ここまででリファレンス画像の完成です。
※実際はもう少し増やしてますが割愛します。腕を下げたバージョンとか、足を閉じたバージョンとかも QwenImageEdit で作ってます。Qwenの編集能力が高すぎてヤバい。
今回はここまで。
次回、モーションを動かすための3Dモデルを作っていきます。
