← Back to スタジオ真榊

Pixiv Fanbox

「キャラを好きな場所に呼び出す魔法」V3インペイント活用検証

Published 01/13/2024, 04:32:58 AM · Edited 02/11/2025, 02:06:32 AM

「キャラを好きな場所に呼び出す魔法」V3インペイント活用検証

こんにちは、スタジオ真榊です。前回の記事(▼)ではNovelAIv3のインペイント機能の応用について掘り下げましたが、今回はその発展として、「背景の好きな位置にキャラクターを違和感なく呼び出し、演技を付ける」手法について検証したいと思います。



前回のおさらいとして、V3インペイントを使うと「一部しか描かれていないキャラの残りを推論する」「キャンバス内に描かれていない続きを描く(アウトペイント)」「手を修正する」などさまざまな使い方ができることがわかり、「キャラクターに正確な背景を加える」よりも「正確な背景に後からキャラクターを加える」方が有望であることもわかってきました。


前回もこの「背景にキャラを加える」についてはこのような感じ(▼)で検証しているのですが、今回取り上げるのはそれの発展形になります。


今回の手法で作ったのはこちらの作例。先に作った背景をそのまま保持しながら、そのキャンバスの中で自由にキャラクターを演技させるような効果が得られています。

このような小さな範囲にキャラを任意に呼び出して、かつ背景とも矛盾しない形で「演技」がさせられる自由度の高い手法ですので、ぜひ試してみてくださいね。なお、記事中ではクリップスタジオを使っていますが、画像編集ソフトであればフリーのものでも特に問題なく同じことが再現できるはずです。


では、さっそく見ていきましょう。


目次

・「切り貼り」や「通常インペイント」だとどうなる?

・まずは背景を作ろう

・「長方形」を切り出そう

・元のキャンバスに戻すには

・キャラクターに「演技」を付ける

・終わりに~「定点カメラ」はできるのか~



「切り貼り」や「通常インペイント」だとどうなる?

さきほどの作例を見ていただくと、この「座っている感」がとても重要なことが伝わるかと思います。それぞれのキャラクターを別々に白背景で生成して合成しようとしても、ちょうどこのソファと一致する角度になるようにするのは至難の業ですし、合成しようにも角度や影、周囲との溶け込み方が非常に不自然な形になってしまうはずです。


インペイントではどうでしょうか。無人の部屋の画像をそのままNovelAIに放り込んで、ソファのところをマスクしてインペイントしてみましょう。



最大サイズの1472x1472pxで生成してみましたが、結果はこのようになってしまいました。

これは、キャンバス全体に対してマスクした部分が非常に小さいため、高精細に描けないことが原因です。通常の生成でも、背景のモブの顔がおかしかったり、手が小さく映り込んでいるほど崩壊してしまうのと同じ現象ですね。


そうした現象を防ぐための技術として、「ADetailer」がありました。こちらの画像では、背景のつぶれてしまっているモブの顔を自動抽出して、上手に描きなおしてはめこんでいることがわかります。


▼ADetailerを知らない方はこちらを参照のこと。時間がかかりますが、小さいキャラクターが映り込む場合は非常に有用な技術かと思います。


大きいキャンバスで生成しても、小さい範囲のものはつぶれてしまう。ADetailerは小さな範囲を複数抜き出して、大きく生成したあと、小さな範囲にはめ込むことで「つぶれ」を回避している。「ならば、V3インペイントの力を使って、手動で同じことをすればいいのでは…?」という発想でできたのが今回の手法です。


まずは背景を作ろう

というわけで、キャラクターを合成する前に背景を作りましょう。ここは好みなのでなんでも構わないのですが、背景に溶け込ませる検証ですのでoutdoorよりもindoorのほうが効果がはっきりわかると思います。海や公園にたたずんでいるだけでは、通常の合成とあまり違いがわかりませんからね。


上の水星の魔女のファンアートもそうですが、今回はDALL-E3を使ってこのように描いてもらいました。


もうちょっとアニメ調の方が好みなので、何度かお願いしてこのようなものを用意しました。ちょうどいいので、このソファにキャラクターを配置することにしましょう。


とはいえ、ソファをインペイントで塗りつぶしてもさきほどのようにぐちゃぐちゃになってしまうことは分かり切っているので、「手動ADetailer」の手法を行います。


「長方形」を切り出そう

この背景から「1:1.5」の比率の長方形を切り出して、インペイント元にします。詳しくはあとで説明しますが、これはNovelAIにおけるキャンバスサイズがこの比率になっているためです。


クリスタでは「長方形選択ツール」でこのように「縦横指定」すればOK。「キャンバスサイズを選択範囲に合わせる」でキャラクターがいるべき場所を切り出しました。


こんな感じです。キャラが収まるギリギリに切り出すのがポイントです。


NAIで読み込み、「描いてマスクを追加する」でこのようにマスクします。ここも、キャラクターが収まるべきところをギリギリに塗りつぶすのがコツです。大きすぎるとキャラクターも大きく描かれますし、意図しないポーズになってしまうことがあります。


プロンプトはこちら。ただ座っているのもつまらないので、この背景に漂う穏やかな午後の空気を表現するため、ソファでうたたねしている設定とします。


1girl,solo,{{{lying on sofa,sleeping}}},red glasses,long ponytail,short sleeves,navy pleated skirt, shiny skin,detailed black pantyhose,black hair,large white ribbon on hair, [[ai-generated]],{{{ amazing quality, very aesthetic}}}, anime coloring, flat color, dot nose,red tie,small breasts


サイズは「縦・大」(1536x1024px)にします。ここで、さきほど切り出したサイズと縦横の比率が一致することがとても重要なわけです。ここが少しでも違っていると、縦か横に間延びした画像になってしまい、もとの全体背景にうまく戻すことができなくなります。最大サイズにするのは、できるだけ美しい画像を出したいためですね。Opusプランの方は「普通」で何度か0Anlasガチャをしてから、好みのSeed値で大サイズで生成するのが経済的と思います。


できたのがこちら。

塗りつぶしたサイズによって、収まる人物のサイズも可変しますし、マスク内の背景はもとの背景から変容してしまいます。ある程度は許容できますが、変容するはずがないものが変容する、たとえばソファの形状が変わってしまう場合は「ガチャし直し」をすることになります。


元のキャンバスに戻すには

画像を保存したら、さきほどクリスタで切り出したこちらの選択範囲におさめてあげましょう。


そのまま貼ると、NAIインペイントの際にサイズが大きくなっているので、このようにズレてしまいます。さきに張り付け用の画像を開いてから「解像度を変更」して、切り出したときのサイズに縮小してから、あらためて貼りましょう。


サイズを調整するとこのようになります。一見いいようですが、ローテーブルのところをよく見ていただくと、切り出したときの線が縦にはっきり残ってしまっていますね。これはNAIでインペイントをしたとき、設定をマスク外が多少変容しても構わない「元画像を加える」にしていたため、マスク外も少し変容してしまっているのが主な原因です。また、NAI上で画像を拡大するときに、元画像とわずかな端数分縦横の縮尺変化も起こっているので、完全にピッタリはまることはありません。


そこで、上に張り付けた画像の不自然な部分を「柔らかい」大きめの消しゴムで消してなじませることにします。


このようになりました。ここは難しいポイントで、妙にぼんやりした部分や切れ目が残っていると興ざめですので、ブラシサイズを調整しながらなじませてあげましょう。


全体図で見るとこのような感じ。タッチやカラーが周囲と違うように見える場合は調整してもよいでしょう。


今回は「細目」のテクスチャを全体に貼った上、「仕上げグラデーション」でわずかに青いグラデーションを掛けて色調を合わせました。ついでに画像統合した後、複製レイヤーを作り、「上のレイヤーの彩度を下げて淡くし、ガウスぼかしを掛けます。最後にミナちゃんの周辺や手前の被写体だけ消しゴムを掛けることで、このように不要な部分の彩度を下げつつぼかして、そちらに最初に目がいかないように視線誘導の意図を出しています。(このあたりの仕上げ手法は次回以降特集したいと思っています)


こちらが完成図。寝ているキャラから「zzz..」はもう古いかもしれないけど、なんとなく入れてみました笑


キャラクターに「演技」を付ける

ところで、冒頭で紹介した「水星の魔女」のファンアートでは、一枚で終わりではなく、このようにキャラクターに演技を付けることができていましたね。


これはどうしているかというと、さきほどの手順でできたイラストをさらに次のインペイント元にして、次々に動かしていっているわけです。


①「ソファを切り出してスレッタちゃんを座らせる▶背景に合成」

②「キッチンを切り出してミオリネさんを立たせる▶背景に合成」で1枚目を作り、


③「スレッタさんの座っているソファ周辺を切り出してミオリネさんを隣に座らせる▶また背景に合成」で2枚目。


④「2人が座っているソファを切り出して上半身だけをインペイントしてキスさせる」で終わりです。


例えば、さっきのイラストもこのようにインペイントしてプロンプトを変えれば…


びっくりして飛び起きた風に変えることもできます。体の一部をマスク外に残しておくことで、その部分と矛盾のないかたちにマスク内部を描いてもらえるわけですね。


上の画像は手がおかしなことになっているので、何度かガチャをやりなおして複数の画像の「いいとこどり」をすることもできます。これは胸から下がいい感じなので、


2枚を重ねてさっきの「柔らかい」消しゴムで上手に消す手法で組み合わせられます。


あとは髪型がおかしいので、適当に塗りつぶして「1girl,ponytail+クオリティ」タグで生成していくことになります。加筆したほうが早いこともありますが、インペイントでできるだけ理想形に肉薄したほうがずっと効率的です。

ところで、この画像はキャラクターが描かれるべき部分がキャンバス全体の6分の1以下で、これでも切り出しサイズが大きすぎたと感じています。NAI機能の「Enhance(強化)」でより綺麗にしてもいいのですが、そうするとキャラ以外のインテリアが変容してしまうので、ソファ部の上をもっと狭い範囲でピンポイントに切り出したほうがよかったな、というのが教訓です。


同じ方法でインペイントを重ねていくと、このようなことができます。それぞれ、1:1.5の比率で背景を切り出してインペイントしてから戻す方法で重ねています。これは一枚絵としてまとめてしまっていますが、たとえば背景画像全体を見せるのではなく、それぞれをコマのようにしてしまえば、1枚の大きな背景画像から一貫性を感じるコマ割りができるのではないかなと思います。

例えば奥のミナちゃんがコーヒーを持っていますが、次のコマで寝ているミナちゃんを置くときに、テーブルの上にそのコーヒーカップが置かれていたらストーリー性を感じます。例えばドアを開くとか、テレビがつくとか、人物に限らない細かな「演技」をAI絵につけていく手法としてさらにいろいろ発展ができるのではないかなと期待しています。


終わりに~「定点カメラ」はできるのか~

そもそもこの実験を思い立ったのは、以前からFANBOXをお読みの方はご存じと思いますが、成人向け漫画でよくある「定点カメラ」表現が簡単にできるからなのですね。

背景を固定しつつキャラクターに演技をつけることができるので、根気はいるかもしれませんが、思った通りの位置に思った通りのポーズでキャラクターを呼び出すことは可能はなず。「できるかな?じゃない、やるんだよ」の精神です。



こちらの投稿もV3インペイントの能力をフルに使って作ったファンイラストです。ワークフローのGIF動画を見ていただけると分かるのですが、こちらは背景にキャラを呼び出すアプローチではなく、逆に一枚絵をもとに拡張につぐ拡張で絵作りをしていく発想です。


「背景▶人物の順の方が有望」と前回も書きましたが、必ずしもそれが正しいわけではなく、いくつもメソッドを用意しておいて、描きたいイラストの方向性によって柔軟に変えていくことが大事なのかなと思います。今回の記事では「演技を付ける」というおよそAIイラストらしからぬ単語も飛び出しましたが、キャラがどちらを見ているか、何を指さしているか、どんなことを言っていそうかなどを想像して、視線や指の位置、他のキャラとの絡み方を作っていくと、より意図のはっきりした絵になってくるのがこちらのイラストを作っていてよくわかりました。


GIF動画の途中で視線が不自然(指さす方向を見ていない)だったのを直していますが、こうした細かなところが重要なのだなと分かり、学びの多い一枚になりました。腕を絡ませたり、キスをさせたり、本当に昔は夢のようだったことが簡単にできるようになってきたと感じています。


というわけで、本日はこのあたりでおしまいです。「AI絵なんてど真ん中に微笑んでる女の子がいるやつばっかり」と言われるのが悔しいので、一生懸命意図のある絵を目指してやってきたのですが、NovelAIの進化のおかげでcontrolnetでもできなかった絵作りがどんどんできてきたように思え、とても嬉しく思っています。もっともっと自分の創意工夫を込めた絵が作れるように、今年も頑張っていきたいです!


それではまた近いうちに。スタジオ真榊でした。



Attachments (25)

SzqU1dez3oGS3RM5S4qlxkVV.jpeg

SzqU1dez3oGS3RM5S4qlxkVV.jpeg

y0dzPMFP4yx8lkVrnurMtqnT.png

y0dzPMFP4yx8lkVrnurMtqnT.png

x00eKRZfjc7zGBRQZZHhTob8.png

x00eKRZfjc7zGBRQZZHhTob8.png

mxlt5QK6t1GipNN4ds2aa921.png

mxlt5QK6t1GipNN4ds2aa921.png

keNwfY1dmco2BlKibfvL9aWu.png

keNwfY1dmco2BlKibfvL9aWu.png

ktzJCwW1d2TTLhocqTSDpiRf.png

ktzJCwW1d2TTLhocqTSDpiRf.png

NmcR1FpnAl34DKEaFHiN9uwT.png

NmcR1FpnAl34DKEaFHiN9uwT.png

ieFznkEoRDpLwr9JMVY3n6Ry.png

ieFznkEoRDpLwr9JMVY3n6Ry.png

xSJMeHnl52HoVT6JksfU45We.png

xSJMeHnl52HoVT6JksfU45We.png

PBUDyyp7GaUXVGp3cHN826Se.png

PBUDyyp7GaUXVGp3cHN826Se.png

5fu8KLSNPvFnxaiZQsmN7VDo.png

5fu8KLSNPvFnxaiZQsmN7VDo.png

ug3yNULGtIIUnpa4mYaGqyHN.png

ug3yNULGtIIUnpa4mYaGqyHN.png

mXdktSfLtD856kZjcAHHmaJc.png

mXdktSfLtD856kZjcAHHmaJc.png

0oMh5rHSQJgvg8rR05eZVYV6.png

0oMh5rHSQJgvg8rR05eZVYV6.png

M1v8DryMBqWO8gcRirP6Yrls.png

M1v8DryMBqWO8gcRirP6Yrls.png

npCzQMR2AF5vRcf8SiRDQnlM.png

npCzQMR2AF5vRcf8SiRDQnlM.png

YDT2sk5ogM8KM01PLeGCuYco.png

YDT2sk5ogM8KM01PLeGCuYco.png

lNxQw25wos4i7HTdisqA1ipa.jpeg

lNxQw25wos4i7HTdisqA1ipa.jpeg

QRdelm2FuPRoK0K0KUvNScFs.png

QRdelm2FuPRoK0K0KUvNScFs.png

kNBwDpUKhqnypQDeMGgcCMl8.png

kNBwDpUKhqnypQDeMGgcCMl8.png

4R9Mh1tCNpk1M3YeuF4kZpzi.png

4R9Mh1tCNpk1M3YeuF4kZpzi.png

wdlvWAfDSGFaKVRR09SBxulT.png

wdlvWAfDSGFaKVRR09SBxulT.png

rm2DNGUQCVu7jplNjI9bKN9O.png

rm2DNGUQCVu7jplNjI9bKN9O.png

CsVY51g5QISRvxXBexVKWgV0.png

CsVY51g5QISRvxXBexVKWgV0.png

l1xPphX1kd0oEbU4BYVF80JS.png

l1xPphX1kd0oEbU4BYVF80JS.png