AIで立ち絵の服装差分~ゲーム素材作成~
■前置き
立ち絵髪差分は色々と空いた時間に試行錯誤しているが、力技でえいやと何点か作ったけれど、どうもコレといった成果が出ないので気分転換に服差分を出してみることに。けど、簡単にできるっしょと思いつついざやってみようとなると躓いた点が幾つかあるので、髪差分への発展も期待を込めて手順を綴っておこうと思う。最も、一日ポチポチと試した成果程度の話なので、そこは色々と注意されたし。
□環境
Stable Diffusion Forgeを使用。SD系なら基本は一緒(多分)。
元々の裸体な絵はkuronekoAnimemixV10で出力、今回の元の立ち絵となる水着や服差分についてはkakigori_V30を使用。アニメ系ならまあ何でも良いと思う。リアル寄りになるほど手間が増える可能性アリ。
拡張機能はkatanukiを使用。
Loraは記事内にて。というか元絵の出力の方の記事では使っていますが、それ以降は(基本)使いません。
強いて言うならEasyNegative(これはLoraじゃないけれど)等のクオリティを上げるものを各々使えば良いかと思います。
画像ソフトはGIMPで行きますが、基本レイヤー使えれば大体OK。
■元絵の出力
は、基本的に以前の記事を参照オネシャス(マネキンの作成云々の部分)。
katanukiで透過画像を出力するところまでやりましょう。
今回用意した絵は前回の流用で、
こんな感じで水着を着ていますが、実際は裸の全身絵でやってます。ムフフな意味はなく、水着差分や一部肌が露出するような服(今時流行ってるのか知らないが、ヘソ出しの服とか)を着せるときなんかにしっかり裸の素体を用意したほうがベネ。後、単純にしっかりとボディラインを線で描いている方が服を着た後の仕上がりもそれに沿って描いてくれる風に思うので。多分気の所為。
■ガチャの前の準備
□そもそも差分を作るに当たって
先ずはSDやGIMPで何か作業をする前に、一体どんな服装差分を作ろうとしているのか、それを頭の中で一旦整理した方が良いです。
シャツを出力するのか? ジャンパー? スカート? ズボン? ワンピース? ――と、そういった”作りたいモノリスト”を一旦整理しましょう。
自分の一連のnote記事は基本的に”ゲーム素材として使える立ち絵差分”を目的としているので、背景とか他の体パーツとの重なりとか考えず服装さえ変われば良い、という差分出力の方法とは色々と勝手が違ってきます。
例えばIMGtoIMGのInpaint機能で体だけを塗って適当に服装差分を出力すると、パッと見できの良い画像が一発で出ました。が、これを元の絵に”服装だけ抜き出して”着せるとなると問題が多々発生します。
諸々の設定にもよりますが、上の絵で示した様な簡単な設定で差分を出力しようとすると凡その場合、”姿勢(ポージング)”が変わってしまい体の輪郭からはみ出した服が生成されてしまいます。
(これが単に一枚絵として使う素材であれば、変わった姿勢ごと切り抜いて置き換えてしまえば解決するのですが)
そして、一見して素材に使えそうじゃね? といったボディラインに沿った風な絵が出力されたとしても、多くの場合は”ボディラインよりも内側に服の外側が描かれてしまう”場合が多発します。(上の絵で言えば、向かって右の太ももの様な”逆はみ出し”をイメージしてもらえれば判りやすいです)
加えて、今回は服装差分の出力しか紹介しませんが、キャラの立ち絵という特性上髪差分や表情差分との重なりを考えなければいけません。
そうした点を踏まえて”何処に描かせ、何を保護すべきか”を事前にしっかり考える必要がある訳です。
と色々難点を挙げ連ねた後で言うのもなんですが、以前の髪差分記事なんかでちらっと触れましたが”服装差分は他に比べて圧倒的に作成が楽”です。理由は単純で”他のレイヤーと重ならない”――とまでは言わずとも、圧倒的に重なりが少なく、重なったとしても誤魔化しが容易なレイヤーであるからです。
さて、今回の記事では”ワンピース(dress)、シャツ、スカート"の三点を作る体で進めます。これらが作れれば他の服装も応用でどうにでも出来ると思うので。
その三点の中でも先ずは当面”シャツだけ出力する”前提で話を進めます。
シャツ、と一言で言っても色々あります。長袖、半袖、七分袖。首周りも色々。それこそ先にもちらっと触れたようにギャルファッション風にヘソ出しなんてのもあるでしょう。
出力するに当たってシャツを作ると一言で済ますのではなく”極力どういったモノを出力したいかを絞る”のが結果的に手間が減ります。
心情的にはざっくり”シャツを着せて”とだけ指示して色々なシャツを出力して貰うのが楽ですし、そうした方法を取れなくも無いですが、結果的には手間が増えると思います。
今回は”半袖のラウンドネック”なシャツを目標(ラウンドネック=よく有る丸く開いた首元のヤツ、多分)にしましょう。
□画像ソフトでの編集開始
さて、そろそろ作業に移りましょう。一先ず用意した元絵の画像を画像ソフトへ取り込み、その上に空のレイヤーを二つ新規に作成。
□「保護領域」を考える
先ずは比較的簡単に作れる(場合によるが)保護領域。
この領域は”絶対に元絵から崩してほしくない領域”を指定します。
例えばこんな風に”顔と手は必ず元の絵を保って欲しい”とするならその部分を”黒で塗りつぶします”。そしてその後”その他の領域を白で塗りつぶします”。これで保護領域は完了。
シャツに関しては絶対に保護しないとダメ、という程の領域は多くありません。強いて言うなら”長袖の場合は手、タートルネックの場合は顎のライン周り、等と保護”は意識すべきかと思います。こうした場合は袖元や襟元のラインにも関わってくるので”ある程度仕上がりのラインを意識した保護”をすべきでしょう。
萌え袖(やひとつ上の男)なんかは難しい所です。手(或いは腕、なんなら体全体のポーズ)がどういった姿勢を取っているかにも左右されますから、場合によっては差分作成が難しい場合もあります。最も”多少手の形が変わっても問題ないよ”という場合は、いっそ”服差分に手も含めてしまう”のも手段です。この場合、手は現状の画像生成AIにおいて弱点とも言える部位なので手間(画像生成の試行回数)が凄いことになりますが。
今回、シャツとスカート――つまり上半身と下半身の服装を別けて出力する方法を取っていますが、その場合に”スカートの領域を予め保護しておくべきか?”は難しい所です。が、恐らくスカートの領域は保護せず進めたほうが良いと思います。今回進める方法では下半身も何かしらの服(例えば下着を勝手に履かせたり)が描かれるケースが多いですが、大体切り出す段階で上手いこと切り抜けます。逆にしっかりと保護領域を指定してしまうとスッパリその部分が切れたような絵が出力されるケースもあります。そうなると見栄えに影響する場合もあるので、やはり今回の様な場合は保護せず進めるのが良いかと思います。
他のレイヤーに影響しそうな場合において保護すべきか否かの考え方として”レイヤーが上か下か”を一つの判断基準にして良いと思います。
(個々人のファッションスタイル等にもよりますが)一般的に上半身の服は下半身の服よりも上のレイヤーになると思うので、その場合下のレイヤーである下半身の保護というのはしない、といった風です。
最も今回の様なシャツの場合、所謂下半身の服へ”シャツIN”させる様なレイヤーで構成しようと考えている場合は下半身部分の保護を考えても良いでしょう。その辺りは各自の作りたい物の条件に応じて対応してください。
最後に白黒のマスク画像をPNGで出力しておきましょう。
そこまでしたら保護領域レイヤーは一旦非表示にしておいて大丈夫です。消しても良いですが……後々流用できたりするので残しておくのがベネです。
□「描画領域」を考える
さて、次は”シャツが描かれる範囲を指定する”手順です。
「描く領域を指定する」「保護する領域を指定する」
「両方」やらなくっちゃあならないってのが「AI絵」のつらいところだな
……と、まあ実際これを同時に両方やるのは一手間いります。
画像ソフトのレイヤーを”元絵”に切り替えましょう。そして領域選択ツール等を使って一旦透過部分を全指定します。
続いて使っているツールによって名称等は違いますが”選択>選択範囲の縮小”等で範囲を2~3程度減らします。その後”選択範囲の反転”。
現状、体全体を覆うように選択していますがそれを”シャツを描きたい部分だけ選択”しましょう。具体的に言うと”投げ縄ツール等で範囲を削る”というのが一つの手段。もう一つは”一旦選択範囲で塗りつぶしてそこから消していく”のがもう一つの手段。そうでなければ範囲選択などせず”最初からゴリゴリ塗りつぶす”でも良いです。
手塗りしても良いのなら何故面倒な範囲選択の手順を踏んだのか、というと”ボディラインよりもいくらか広い範囲を確実に指定する”為です。
ここでしっかりと指定をしていないと、最初の方で挙げた”ボディラインよりも内側に服の外側が描かれてしまう”事態が多発する為です。ここさえしっかりと踏まえていればどんな手段で範囲を指定しても問題ありません。
最終的にこの様にベタっと色を塗ってしまいましょう。ここで塗った色が最終的な服装の色になるので注意。また、ここでは描画領域レイヤーに塗りましょう。元絵に塗っても良いのですが、レイヤー別け出来るものはなんでもレイヤーに別けたほうが後々便利ですので。実際、スカートの段階でチラっと使う予定です。
(余談というか、より良いものを作れる可能性が? という余地として、この描画領域のレイヤーをGIMPで言うところのレイヤーのモード等を使って上手く元絵と合成する事で、例えば”バストサイズやライン、姿勢等をより高い確率で維持したまま服を着る”なんて事も可能かもしれません。時間がアレで試していませんが)
で、この色を何にするか、という話なのですが。どうせゲーム素材として使うならゲーム側でカラースケール弄って色変えれるよね? という前提で考えた場合は青に統一した方が良さそうです。青は肌色と凡そ反対色だから、という程度の理由ですが。
ただゲーム側でカラースケールを弄る前提にする場合、切り抜きの際にしっかりと服”だけ”を切り抜いてやる必要があるので、その辺りは各自取捨選択してください。逆にカラースケール云々を用いない場合、切り抜きはある程度アバウトに行うことが出来ますが、その分生成された絵の色でしかゲーム内で扱うことは出来ません。
最後に一番下に”背景レイヤー”を追加して背景を今塗った色と同色且つ多少明暗の差をつけて塗りつぶします。
どの程度差をつけるか? 明か暗か? はなんとも言えませんが、付かず離れず、けれど境界はしっかり視認できる程度にするのが良さそうです。
ここで全く違う色――或いは透過したままでも問題ないのですが、その場合”指定した範囲をはみ出した描画が極端に減る”ので、ある程度寄せた色がいいと感じます。シャツ程度であれば少々指定より広く描画されても問題ありませんので。
ここまで来れば画像ソフトにおける下準備は完了!
出来た画像――上のレイヤーから”描画領域・元絵・背景”――を一枚のPNGとして出力しておきましょう。
■画像生成の義
□SD側の準備
先ずはSDを起動した後、img2img>Inpaint uploadタブと開く。
開いた後に画像をそれぞれ”上が描画領域、下が保護領域”の画像をD&Dで投げ入れる。
投げ入れたら下の方に有る出力する画像サイズを三角定規アイコン等を使って元画像と同じに設定しましょう。
次にMask blurの値を任意に設定します。
シャツ程度であれば保護領域とかち合う部分も少ないのでデフォルトの4でも問題は少ないですが、シビアになりそうであれば0~2程度に設定します。
次にちょっと下にあるDenoising strengthの値を0.5~0.6程度に設定しましょう。
この値はどの程度元絵から崩すか、という値になります。大きくすればそれだけ幅広いデザインの服を描いてくれますが、その分”姿勢の変更”や”内側へのはみ出し”等が増える事に留意。実際は0.51~0.55辺りが良いかと思います。この辺りはCheckpointやVAE、各々入れたLora、そして何を描かせるかにも影響されると思われるので、この後試しながら適時調整を入れましょう。
ちなみに0.40辺りからほぼ元絵のまま出力されます。シャツの場合はピチっとした肌着、とかならギリギリ使える範囲のものも出ます(それでも陰影がショボイ等使うには向かない)が、そこまで下げる必要は通常少ないでしょう。
プロンプトこと呪文に関してですが、単に”shirt”とだけ入れても十分な出力が望めます。一応半袖なら”short-sleeved shirt”と入れるのが間違いないかとは思います。長袖であれば”long-sleeved shirt”とする方がより確実に長袖として描いてくれます。
後は好みに応じて詳細な呪文やEasyNegative、Lora等を入れれば良いでしょう。
ここまで来れば大枠での設定は完了です。
□出力開始
先ずはサンプリング数は最低限のままで一枚ずつ出力を繰り返してみましょう。
この時点で姿勢等が大きく崩れる画像が数多く出力される場合は何か良くない工程を踏んできた可能性が高いです。打率の良し悪しは人によって体感は有ると思いますが、今回自分の場合だと”デザインはさておき使えるか否か”であれば八割以上は使える画像が出力されています。
何かしら良くない工程があった場合……元絵のデザインからして問題がある(ポージングのクセが強すぎる等の)場合はツライですが、幾つかステップを戻って修正していきましょう。
ある程度悪くないと思える画像が出力された場合、一度画像ソフトへ取り込んで元画像と比較してみましょう。この時に見るべきは”元画像より内側へ食い込んでいないか”が主です。katanukiで透過するとより判りやすくなるかと思います。
現時点でここの打率が十分高いようなら、いよいよ本番です。
サンプリング数50の設定で一発勝負、12枚出力した結果がこちら。
……うん、そうなんだ。胸のデカさが安定しないんだ。その辺りは最悪描画領域を描く時にバストラインに併せて陰影をつけるとか、上で述べた余談的な手法でとか色々と手はあると思うが、今回は数撃ちゃ当たるんだよ、的な方法をもって解決とさせてもらいたい。……胸のサイズに拘らなければ別に大体使える素材だしね!
で、大量に出力した後は画像の一覧を眺めて取捨選択の時間な訳だが、その前に予め”katanukiで出力した全画像を透過”することをおすすめする。意外と同系色の背景にしている影響で微妙な透過になっている部分も多いので、見える印象がガラリと変わるケースがある為。そしてこの後の切り抜き作業でどうせ切り抜くから、というのもある。
これ、という画像を決めたらそれらの画像をSDの出力先とは別に移動させるなりして次の切り抜きの手順へ進もう。
■服の切り抜き
と、大見出しを立てたが、この辺りはぶっちゃけ自分が態々解説する箇所は少ない。ぶっちゃけレタッチ関係の記事をググってもらったほうが色々捗るとは思う。ので、ある程度の要所だけを説明。
先ずはゴリゴリと投げ縄ツールで服を範囲選択します。力技です。
今回は先に述べたゲーム中でのカラースケールにある程度対応することを意識した切り抜きをした。
先ずカラースケール云々を抜きに共通して”透過部分はゴリッとはみ出してOK”です。
次に他の部位と隣接した領域はカラースケールを意識するなら”ギリギリ境界ではなく、服の主線をなぞる位を意識して指定”すると良い気がします。対してカラースケールを意識しない場合、多少であればはみ出てもOKです。
このはみ出してOKというのは”元絵と同系色、且つ他の下部レイヤーと被らない”場合に限定されます。
例えば上の画像の場合、下着を履いているのでその境界はカラースケール意識の時と同様にギリギリを攻め、首元なんかは多少はみ出してもOK、となります。腕は元絵と微妙なズレが起きている可能性があるため、極力しっかりと切り取ったほうが良いかもです。
一つの指針として元絵、透過部分、服、と三要素が重なっているような箇所は極力しっかり切り取ったほうが良いと思います。
次に(ソフトによって表記が異なりますが)”選択>境界をぼかす”で1~3ピクセル程度選択範囲をぼかしましょう。
そうしたら指定した範囲を新たなレイヤーへコピペ。
次にこのままだと背景と服を同系色にした影響かkatanukiの時点で微妙に服が透けているのでそこを修正します。
透過部分をファジー選択等で選択して、”選択>選択範囲の反転”、”選択>選択範囲の縮小”で2~3ピクセル縮小。その後下にレイヤーを一つ追加して描画領域で塗った服の色で範囲を塗りつぶします。その後、切り抜いた服レイヤーと結合。
するとこんな風になるはずです。見た感じ境界部分等もいい感じに見えるのですが――
――元絵と重ねると若干微妙な部分があります。
今回の場合だと首元周りと腰回りの二点。この辺はもう、完全にレタッチ技術の手法になるので詳しい修正方法は省きますが――
微妙に修正。基本は不要な部分は投げ縄>ぼかし>切り取りです。
数ピクセルの”内側への食い込み”なら最悪”周りから適当にぼかしコピペして貼り付け”という強硬策もあります。上の例には挙げませんでしたが、向かって右の腰回りが数ピクセル食い込んでいたのでそれで修正しました。
最終的な結果が今感じですが、どうでしょうか? それらしく出来てるとは思います。今回作ったのが単にシャツなので(その中でも出来るだけ”動的”なものを選んだが)見栄えは微妙かもしれませんが、少なくとも服差分として機能は十全に果たしていると思います。
これにてシャツの切り抜き――つまり服差分の完成です!
スカート、ワンピースも解説すると言ったな……?
ありゃ、嘘――にするつもりは無いが、気がついたらこんな時間になっていたので今日はここまで。
明日(というか今日)以降、ちょっと仕事がごたつく(天気次第で出る出ないな話になる内容なので微妙だが)ので、それ次第でできるだけ早く書きたく思う所存。
最も今回説明した手法がほぼ全て。後は応用で凡その服装の出力は出来ます。
ただ、例えばシャツとスカートの重なり部分に関してとか、ちょろっとポイントがあったりすると思うので、その辺りを書けたら、と思ってます。
……おかしいなぁ。一時とかその辺りにには最低でもここまで書けてるハズだったのに。
この記事が気に入ったらサポートをしてみませんか?