こんばんは、スタジオ真榊です。今夜はこれまでの差分研究の総決算として、Controlnetで表情、服装、ポーズ、背景を全て任意に変更する方法、つまりキャラクターの同一性を維持しながら全く違うイラストを作るやり方について解説していきたいと思います。
前回までの検証では、主にInpaintOnlyを活用することで、表情・服装・ポーズ・背景の差分を個別に作れることが実証できました。では、これらすべてを同時に行うにはどうしたらいいでしょうか。つまり、キャラクターの同一性が失われない最低限の情報だけを完全に保持しながら、それ以外の部分を一つ残らず全て任意に変更するということです。それも、何度も生成→入力を繰り返すのではなく、一度の生成で。

前回の記事冒頭でも紹介したこちらのイラストは、1回の生成でキャラの顔周辺以外を全て変更したものです。キャンバス上のほとんどの線が重ならないにもかかわらず、しっかり同一人物に見える出来に仕上がっているのではないでしょうか。
今回の記事では、このイラストが完成に至るまでの設定方法を詳しく紹介しつつ、さらにopenposeやwildcardなどと組み合わせる方法を検証していきます。
実験1:表情・服装・ポーズ・背景の差分を同時生成
今回はいきなりControlnet画面の設定に入るのではなく、ちょっとした下準備が必要です。具体的には、「キャラクターの線画を抜き出して、継承させたい部分以外を塗りつぶす」作業を行いましょう。
まず、元画像からキャラクター部分を抜き出すところから始めます。今回は「AnimeRemoveBackground」を使いました。上手に抜き出せたら、このように抜き出された右側の画像をドラッグし…

ブラウザの別タブで開いていたSDwebUIにもってきて、このようにControlnet画面にドロップします。Chromeの場合、ドラッグしてきた画像をタブ部分に重ねて一瞬待つと画面が切り替わります。

無事読み込めたら、プリプロセッサ「LineartAnime」に掛けて、黒背景の線画を抽出しましょう。先にキャラだけを抜き出しておけば、背景部分を塗りつぶす面倒がはぶけます。

次に、プリプロセッサプレビュー画面の右上にある「↓」ボタンからこの線画をダウンロード。そして、Clipstudioでもペイントでもなんでもよいので、下の画像のように手と頭、表情、下半身の部分を黒塗りで消してしまいましょう。残すべき部分は、キャラクター性を保持するための最低限の線だけ。ちなみに、頭の上部分を消したのは、バニーさん耳を足すためです。
ちなみに、肩や胸のラインなどを丁寧に残しておくと、ポーズのブレを防ぐことができます。また、絵心のある方はこの段階でボディラインや眉、目などを簡単に描き込んでしまっても構いません。黒目部分を消して描き直すことで視線を制御することもできます。

こちらが完成図。これをLineartAnimeモデルに読ませることで、キャラデザインの根幹をしっかり引き継ごう、というのが狙いです。
これで下準備はおしまい。
①LineartAnimeで最低限の線を固定
さきほどの線画画像を今度は左側で読み込み、プリプロセッサを「none」、モデルを「LineartAnime」に設定。言うまでもありませんが、noneに変更するのは既に抽出済みの線画だからです(プリプロセッサをLineartanimeにすると、線画からさらに線画を抽出しようとして低劣化します)
これで1つ目のControlnetは完成です。

②モデル画像を「Reference」
2つ目はこちら。以前作ったバニーさんイラストを参照(reference only)してもらいます。これは、背景の雰囲気を再現するだけでなく、バニー耳を含めた衣装のディティールを「念押し」する意味があります。参照したいモデル画像がない場合は、この手順は省略しても構いません。

③変えたい部分を「Inpaint」
3つめはこちら。「InpaintOnly+lama」で、最低限このキャラがミナさんだと印象づけられる要素を残しつつ、変えたい部分をマスクします。下半身や腕のポーズ、バニー耳部分、さらに表情も変えたいので、目と口にもマスクを加えました。これとLineartAnimeが重なることで、強力に顔周辺のデザインを固定します。

④差分元画像を「Reference」
4つめ。最後の画面では、変更元のイラストをReferenceOnlyで読み込ませました。これを入れておくことで、生成されるイラストのタッチや色合いがさきほどのバニーさん画像に引っ張られすぎることを防ぎ、あくまで「このミナさん」の別シチュエーションイラストらしくすることができます。
(※ReferenceOnlyの複数掛けは最近気付いたテクニックですが、あるイラストに引っ張られすぎることを防いだり、二つのイラストの融合に似た表現ができたりと、さらに研究できそうな分野だと感じています)

以上、すべて「Controlnet is more important」に設定することを忘れないようにしましょう。画面によってPixelPerfect(自動的に適切な解像度を選択してくれる機能)が入っていたり入っていなかったりしていますが、特に気にする必要はありません。なんとなく反射的に入れる癖があるのですが、これはLineartなど特定のプリプロセッサにしか影響しないはずです。
⑤プロンプト
最後にプロンプト。変えたい部分を全て打ち込むので長くなります。「夜の街路で恥ずかしそうにたたずんでいるバニースーツミナさん」というイメージです。
1girl, beautiful purple eyes,embarrassed,wearing bunny suit, playboy bunny, standing,(bunny ears:1.3),black Fishnet tights,black pantyhose,bow tie,white collar,cleavage,neon sign,sexy,clothes reflecting light,sexy pose,open mouth,shiny wet skin,night,entertainment district,road side,beautiful starlight,masterpiece, extremely detailed CG, official art, high resolusion,
その他、txt2image画面の設定は以下のとおり。

忘れがちなのが、目の色も指定しておく必要があること。何も指定しないと、バニーさん画像を参照して青い目になってしまいます。あとは参照させたバニーさん画像に沿って、シチュエーションの情報を盛り盛りにすればOKです。
4つのControlnetの作用により、「LineartとInpaintでキャラクターの顔周りのデザインのみを最低限保持し」、「モデル画像をreferenceして衣装のデザインを継承」、「かつ元イラストのタッチをreferenceした」全く別のイラストが生成されるはずです。
緊張しつつ生成ボタンをプッシュ…。




