AIでキャラクターの絵を揃える——表情差分に2週間かけて分かったこと

ゲームに使うキャラクターの絵を、AIで作りました。三面図を作り、そこから表情差分を七種類。文章にすると一行ですが、ここだけで二週間以上かかっています。

時間の大半は、絵を描くことではなく「さっきと同じ顔を、もう一度出してもらう」ことに消えました。あかりの目を直すと髪型が変わる。髪型を戻すと背景の黒板の文字が変わる。そういう堂々巡りです。

この記事は、その二週間で身についたことをまとめたものです。連載の各回に断片的に書いてきた内容を、これから同じことをやる方が最初に読めるよう、一か所に集め直しました。使ったのはChatGPT(GPT Images)ですが、考え方はどの画像生成AIでも大きくは変わらないはずです。

なぜAIはキャラクターを揃えられないのか

前提として理解しておくとよいのは、画像生成AIは「さっきの絵を覚えていて、その一部だけを描き替える」ということをしていない、という点です。毎回、渡された言葉と参考画像から、まっさらに描き直しています。

だから「目だけ直して」と頼んでも、AIにとっては絵全体を描き直す作業になります。結果として、頼んでいない髪型やポーズ、背景まで一緒に変わる。これは不具合ではなく、そういう仕組みなのだと割り切ったところから、ようやく前に進み始めました。

つまり対策は「変えないでと祈る」ことではなく、変わってしまう前提で、変わる範囲を小さく抑えることになります。以下はすべて、その一点に向かっています。

一度に直すのは一か所だけにする

いちばん効いたのは、これです。

最初は効率を考えて、Codexを使い、全キャラクターの表情差分をまとめて生成しようとしました。結果は失敗でした。どこか一枚が意図と違ったとき、どの指示が悪かったのかを切り分けられない。作り直すと今度は別の一枚が崩れる。手数は増えているのに、完成に近づいている実感がまったくありませんでした。

AIが暴走して崩れてしまった表情差分
一括生成が崩れ始めたときの実例。ここまで来ると、指示を足すほど悪化していく。

最終的に落ち着いたのは、一表情ずつチャットで直し、それが決定稿になってから次の表情に進むという、いちばん地味な進め方でした。一見遠回りですが、崩れたときに戻る場所がはっきりしているぶん、結果的にこちらのほうが速い。

画像生成に限らず、AIとの共同作業ではだいたいこれが当てはまるように思います。まとめて任せたくなる場面ほど、小さく試して確かめたほうがいい。

「修正指示以外は一切変更しないで」を毎回書く

これは必須の一文だと考えています。

「あかりの目を画像2のものにして」とだけ伝えると、AIは親切心からか、ポーズや配色まで良かれと思って調整してきます。そこに「修正指示以外のところは一切変更しないでください」を毎回添えるだけで、崩れる頻度がはっきり下がりました。

毎回というのが大事で、一度言えば以降も守ってくれる、ということはありません。会話が長くなるほど、最初の約束は薄れていきます。定型文としてコピーしておき、修正依頼のたびに貼り付けるのが確実です。

位置を揃える言葉を、固定で入れておく

表情差分では、絵柄が合っていても顔の位置が数ピクセルずれるだけで台無しになります。ゲーム中で表情を切り替えたとき、顔がガクッと動いて見えてしまうからです。

そこで、差分を作るプロンプトには次の四語を必ず入れるようにしました。

same character, same framing, same head position, transparent background

「同じキャラクター」「同じ画角」「同じ頭の位置」「背景透過」。これを入れておくと、少なくとも大きくは外れなくなります。

位置を揃えて作成した表情差分
位置を揃える語句を固定したうえで作った差分。

ただし、これでも完全には揃いません。最後の数ピクセルは、画像編集で手作業で合わせています。プロンプトで九割寄せて、残りは後処理。この割り切りは早めに持っておいたほうが、精神衛生上もよいです。

一人・一表情で試してから、横に広げる

四人分の差分を一気に作らず、まず「みゆ」の一人だけで通常・笑顔・ショックの三枚を作りました。

ここで、サイズ感、顔の位置のずれ方、ファイル名の付け方といった問題が全部出ます。それらを片付けてから他のキャラクターに広げると、同じ失敗を四回繰り返さずに済みます。逆に、いきなり全員分を作ってしまうと、後から仕様を変えたくなったときに全部作り直しになります。

ちなみに私は、ここでサイズの方針も決めました。ゲーム画面に常時出す表情差分は512×512前後、リザルト画面で大きく見せる敗北絵は1024×1024の透過PNG。用途で分けておくと、後の実装が楽になります。

プロンプトは「共通部分」と「差分」に分けて組む

キャラクターを増やすときは、毎回ゼロから文章を書くのではなく、全員に共通する指定を固定しておき、そこに個別の特徴だけを足す形にしました。

実際に使ったものの一例です(宇宙船パイロットのルナ)。

modern Japanese anime style, anime key visual,
a cheerful 18 year old young adult woman,
female space pilot named Luna,
big expressive anime eyes, sharp eyes, high ponytail,
confident friendly expression, full body,
wearing a cool stylish sci-fi anime pilot uniform,
high collar fully covered, gloves, boots, holding her helmet,
modest practical design,
soft anime cel shading, clean delicate lineart,
synthwave palette of magenta violet cyan, dark space background,
not realistic, non-photorealistic,
high detail, all ages wholesome

このうち、絵柄(modern Japanese anime styleclean delicate lineart)と配色(synthwave palette of magenta violet cyan)、そして後述する全年齢向けの指定は、全キャラクター共通です。入れ替えるのは年齢・髪型・表情・服装だけ。

共通プロンプトから生成したキャラクターデザイン
共通部分を固定して生成したデザイン。配色がゲーム本編と揃う。

配色をゲーム本体(マゼンタ・バイオレット・シアン)と揃えておくと、キャラクターと画面が地続きに見えます。細かい話ですが、作品全体の印象を大きく左右する部分です。

全年齢で行くなら、最初に線を引いておく

キャラクターものは、放っておくと露出の多い方向に流れがちです。全年齢向けで公開するつもりなら、最初にその方針をプロンプトへ組み込んでおくほうが確実でした。

私は共通部分に modest practical design(控えめで実用的なデザイン)、high collar fully covered(首元まで覆う)、all ages wholesome(全年齢向け)を固定で入れ、避けたい要素はネガティブ指定にまとめています。後から直すより、最初から出さないほうがずっと楽です。

もう一点、権利まわりの話も書いておきます。作風を伝えるときに実在の作品名を出すと、それに寄りすぎた絵が出てきてしまいます。「あの作品みたいな」ではなく、その雰囲気を一般的な言葉に翻訳して伝える。上のプロンプトに固有名詞が一つもないのは、そのためです。

崩れ始めたら、責めずに原因を聞く

これは技術というより、心構えの話です。

AIは一度おかしくなると、そこからどんどん変なことをし始めます。そこで「違う」「そうじゃない」と言い続けても、まず良くなりません。私が有効だと感じたのは、いったん止めて、こう聞くことでした。

なぜこうなったのですか。こちらの意図どおりにするには、プロンプトをどう変えればよいですか。

すると、こちらの指示のどこが曖昧だったのかを説明してくれます。指示を出す側の問題だった、ということも少なくありませんでした。言うことを聞かない相手を叱るより、なぜ伝わらなかったのかを一緒に探すほうが早い。長く現場で仕事をしてきた人間としては、なんだか身に覚えのある話でもあります。

地味だけれど効く、実務上の細部

最後に、作業を始める前に決めておくとよかったことを3つ。

ファイル名の規則を先に決める。 私は miyu_lose.pngakari_lose.png のように「キャラクター名+用途」で統一しました。表情が増えるほど、どれがどれだか分からなくなります。実装するときにも、命名が揃っていれば呼び出しが機械的に書けます。

背景透過は専用ツールに任せる。 Pythonで自動処理しようとしましたが、髪の輪郭などで安定しませんでした。最終的にはCanvaに課金して処理しています。百点ではないものの、自前で粘るより圧倒的に速い。時間をかける場所を間違えないことも、個人開発では技術のうちだと思っています。

AIが苦手なことは、最初から当てにしない。 正確な三面図、複数カットで完全に同じ形状の小物。このあたりは、現状かなり苦手です。苦手なことを粘って通そうとすると、二週間が溶けます(溶かしました)。

キャラクターの三面図
三面図。これ一枚を納得のいく形にするまでにも、かなりの往復があった。

まとめ

要点をもう一度並べておきます。

  • AIは前の絵を覚えていない。変わる前提で、変わる範囲を小さくする
  • 一度に直すのは一か所だけ。一括生成は結局とおらなかった
  • 「修正指示以外は一切変更しないで」を毎回書く
  • 位置を揃える語句を固定で入れ、最後の数ピクセルは手作業で合わせる
  • 一人・一表情で試してから横に広げる
  • プロンプトは共通部分と差分に分ける。全年齢の方針は共通部分に入れる
  • 崩れたら責めずに、伝わらなかった理由を一緒に探す

二週間は、正直かかりすぎだったと思います。ただ、ここで身についたやり方は、その後の制作でずっと効いています。同じところで足踏みしている方の、いくらかでも近道になれば幸いです。

それぞれの回の詳しい経緯は、こちらに書いています。