
ブレードチャージ!ControlNetが不可能を可能にした方法

音楽:IRON ATTACK!- Star Dust 2023
こんにちは、みなさん。Einarです。
ControlNetについては、前にもブログでお話ししましたが、逃した方は、ぜひこちらの記事もチェックしてくださいね(とても興味深いですよ!)。今日は、40年前に始まった夢がついに実現したという話や、AIでとても難しいシーンを作るのに、ControlNetのすばらしさ(と少しの手間)がどう役立ったかをお伝えします。それでは、もう話はこれくらいにして、さっそく見てみましょう!
アクションシーンの難しさ:大きな問題が大きくなるとき

そう言ってましたね、ゆかちゃん。でも、それはまだ問題ですよ。 ControlNetがシーンの構成にとても役立つということは、前の記事でお話ししましたね。でも、それは複雑なシーンでも(マヤちゃんに懐中電灯を持たせるのは、なかなか大変でしたけど!)、アクションシーンやダイナミックなシーンと比べたら、まだ簡単な方ですし、武器が出てきたらもっと難しくなりますよ。
問題がどんなものか、説明させていただきます。第2章の終わりに(早く書き終えたいです…もうすぐですから!)、武志は相棒の力を借りて、「背教者」の最強技「ブレードチャージ」を、敵のイレイルに向かって放つことにしました。ブレード・チャージには2つのステップがあります。1つ目は剣を空に向けて振り上げて、エネルギーを溜めるステップです。2つ目はそのエネルギーを真っ白な光線みたいに敵にぶつけて、触れたものすべてを吹き飛ばすステップです。

この章の見せ場は、武志が剣を構えて、相棒がチャージレベルを数える場面なんです。知ってのとおり、キャラクターに武器を持たせるのはすでに大変なことですが、学習データにあまりないようなポーズは、Stable Diffusionだけではほとんどできないんです。もちろん、私が気難しいオヤジだからかもしれませんが、武志は背教者にに変身(「エクスチェンジ」)する前に剣を空中に振り上げさせてみたときの例をいくつかお見せします。これはプロンプトだけでやったもので、おそらくhires fixもしなかったと思います(だいぶ前にやったものです)。


見てのとおり、あまり上手くできていませんね。このレベルになるまでにも、何十回も何十回もやり直しました。前の記事でお話ししたように、キャラクターに何かを持たせるのは大変なことです。前回は懐中電灯でしたが、長い武器はもっと大変です。

それは、AIには武器がどういうものかという感覚がないからです。例えば、剣みたいなものを描きますが、柄が長すぎたり、ガードがぐちゃぐちゃだったり、刃が短すぎたりします。つまり、ほとんど正しく見えないんです。もちろん、前の記事で言ったように、ControlNetはこの問題に対する最適な解決策です。でも、この作業を難しくするいくつかのポイントがあります。それらについて説明します。
空に剣を掲げるシーンの作り方

まずは、シーンを作らないといけませんね。武志が見る人からちょうどいい距離にいて、空に向けた剣の全長がほぼ見えるような写真を撮ります。この作業には、CLIP STUDIO ASSETSのこのモデルと、"I LOVE LONGSWORD!!!"のアセットを使いました。ポーズは私が考えていたものとはちょっと違うので、手をもう少し高くして、剣を持てるようにしました。

それから、ControlNetに必要な画像を作り始めました。かなり複雑なシーンだったので、openpose(基本的なポーズのため)、softedge(正しい輪郭を得るため:私は「canny」よりもこっちの方がいいと思います)、depth(AIに剣が身体に対してどうなっているかを分かってもらうため)、そしてもちろん、segmentationもやりました。これは、AIに人物と剣がシーンの中で別々のものだってことを教えるためです。
最初に困ったのは、手の位置を合わせることでした: 剣の柄の部分が、武志の左目とまったく同じところに来てしまって、それで…変な結果が出ちゃいました。


そこで、構図を変えることにしました。もっと広い視野を使って、剣を武志の頭の上にしっかりと置いて、AIが他のものと間違えないようにしました(下の画像を見てください)。この構図には、openpose(ポーズのため)、softedge(輪郭のため、「pidinet」を使って)、depth(「midas」を使って)を一緒に使いました。はい、ControlNetがたくさん必要でした。それで、一枚の画像に3-4分かかりました。結果はだんだん良くなってきましたが、残念ながらまだ十分ではありませんでした。


実は、私のモデルでは、武志の髪の毛をうまく描くのが難しいんです。というか、すごく難しいんです。ほとんどの場合、 まやちゃんに似合うかもしれないボブカットみたいな髪になってしまって、武志には似合わないんです!問題は、私が使ったマネキンが…まあ、マネキンだったということです。マネキンには髪も目も(服も)ありません。武志が裸でハゲたキャラクターに見えないようにするために(前の記事を見てください。今では「My prompt is more important」を使えば効果を減らせますが)、ControlNetの重みを低く(0.3-0.4くらい)して、画像生成の途中で止める必要がありました(最後のステップ:0.3-0.5)。でも、それは逆に出力に多くの変動をもたらしました。そして、そのほとんどが…目に不快なものでした。
ガチャを待って化石になりたくなかったので、別の方法を考えました。そこで、CLIP STUDIO ASSETSサイトが助けてくれました!武志に必要なものに近い髪の毛の3Dモデルを見つけました。それを3Dモデルにつけて、最初のテストでは、重みが低くても、Xくんが髪の毛を出発点として使ってくれることがわかりました…つまり、90%以上の確率で武志が出てきて、ランダムな人ではなくなったんです!
武志さんの髪と顔の特徴をうまく生成しなくてずっと悩んでたけど、やっと解決した!まず、髪の毛付きの3Dモデルを使って、ControlNetのhedとopenposeで髪型をいつも同じにした。次に、顔の特徴を変えるとどれくらい成熟に見えるか評価した。このXYプロットは、「mature… pic.twitter.com/wBydtxhO9S
— Einar Rainhart (@EinarRainhart) June 3, 2023

これで解決したと思ったら、背景の問題がありました。segmentationを使っても(前の記事を見てください)、そこにあると思うものの大まかな領域を描かないといけません(ControlNetに変更があったので、今はもっと重要です)。そうしないと、抽象的な、またはランダムな背景になってしまいます。私は、またしても、ガチャを待ちたくなかったので、この建物の背景を3Dで手に入れて、武志の後ろに置きました。これでシーンは完成しました!

ControlNetで画像を作る

それから、前と同じようにしました。セグメンテーションを準備するとき、手で全部塗りたくなかったので、ControlNetの「ofoco」プリプロセッサーを高解像度(2000ピクセル)で使って、重要な部分を全部カバーするように手で調整しました。それから、プロンプトを設定して、「生成」を押しました!武志が遠くにいたので、顔はあまりよくなかったんです。そこで、「Attention Detailer」または「ADetailer」というすてきな拡張機能を使いました。これは自動的に顔を検出して、インペインティングをかけてくれるんです。それで、武志の顔はずっとよくなりました。

約2時間、約30回の試行錯誤の末、使えそうな画像ができました!でも、まだ問題が残っていました。余分な刃があったり、背景が合っていなかったり、武志の手に鎧がなかったりしました!


画像をピカピカにする方法
ここで、生成をやめて、自分で汚い仕事をしないといけませんでした…ほとんど。LamaCleanerというとても便利なプログラムを使いました(どうやって動くかはこの記事を見てください)。これは、モデルを使って、画像から不要な細部を消してくれるんです。Latentアップスケーラーで「hires fix」を使ったことがある人は、追加される細部のレベルが過剰なことがあることに気づいたかもしれません。LamaCleanerのおかげで、一番大きな問題のほとんどを取り除くことができました。残ったのは手と背景の一部(下を見てください)でした。

ここまで来たら、手作業しかできないところでした: 画像編集ソフトを起動して、背景と手をできるだけ修正しました(私は芸術家ではないので、精一杯やりました)。

ここで、画像は完成しました。あと一つだけ残っていました: 私が言ったように、チャージの効果も見せたかったんです。インペインティングでやるのは面倒そうだったので、またしても、CLIP STUDIO ASSETSストアからブラシを手に入れて、かっこいいと思える効果が見つかるまで試行錯誤しました。結果は下の画像にあります。

まとめ

というわけで…かなり時間がかかりました(この画像を作るのに2週間もかけちゃいました!)が、それは、完璧ではないにしても、子供の頃の夢の実現でした:武志が「本物」で特別な攻撃を使っているのを見ることができたんです。それまでは私の想像の中の一片に過ぎなかったものです。また、この記事では、AIイラストではとても難しいか不可能なことを、適切なツール(と努力)を使えば可能にできることをお見せしました。 この記事が、AIイラストを生成するときに、新しいことや違うことに挑戦するきっかけになれば嬉しいです。そして、読んで楽しんでもらえたらもっと嬉しいです。
私からの他の記事もお楽しみに(はい、この記事を書くのにも時間がかかりました!)、星光の英雄たちのキャラクターに関する新しい記事もありますよ。それではまた!
Einarでした。