Home Artists Posts Import Register

Content

こんばんは、スタジオ真榊です。先日投稿した水星の魔女イラストが珍しくいいねをたくさんもらえて、大変喜んでいます。これまで記事やAI技術に関するツイートがたまたまバズることはあったのですが、純粋にAIイラストだけの投稿がバズったのは初めてでした。もちろん超人気版権のファンアートだったからなのですが、自分が好きで作ったものが他の人にも良いと思ってもらえるのは、何とも嬉しいものですね。


先日から取り組んでいるnijijourneyとStableDiffusionの組み合わせが思った以上に効果的で、自由度が高く「AIイラストっぽくない」絵作りができるようになったと感じています。


このイラストもLoRAを個別適用したツーショットなのですが、前回のウェディングイラストとは異なり、2人が絡んでいる(一部重なっている)作品です。一人ひとりのイラストを作って合成するのではなく、最初から一つのキャンバス上で生成しているので、いろいろと試行錯誤することになりました。いろいろな失敗を通じていろいろと知見が得られたので、今回も作例紹介ということで、あらためて作り方を振り返ってみたいと思います。


参考:ウェディングイラストの作例(別々のLoRA適用イラストを合成したもの)

【作例紹介】これ、完成まで何時間? AIイラストができるまで

こんにちは、スタジオ真榊です。7月最初の投稿は「AIイラストができるまで」ということで、先日Twitterに投稿したスレッタ&ミオリネイラストの作例紹介から始めていきたいと思います。 このイラストのようにキャンバス上に複数のキャラクターがいる場合、プロンプトだけではうまく「描き分け」ができないのがAIイラスト...


NijiJourneyでイメージボードを作ろう!

さて、前回は最終回を前に念願のウェディングイラストを作ることができ、「水星の魔女」本放送も大団円を迎えました。今回のイラストは本編では得られなかった尊い栄養を得たい・・・という動機で、「夏の制服スレミオ」を作ろう!と思いついたのがきっかけです。アスティカシア学園の制服ではなく、日本の女子高校の制服をイメージした、日常の楽しさあふれるイラストにしたいと考えました。


一つ前の記事でもNijijourneyとSDを組み合わせた作例を紹介しましたが、今回も構図力と色彩、四肢の安定性に優れたNijiJourneyを使って、イラストのおおむねの構図を考えてみることにします。登下校中、JK、仲良し、楽しそう、しかも夏、ということで、二人が街中を歩きながらアイスを買い食いしているイラストに決定。


概要をつかむためのイメージボードとして、とりあえず何も考えずに思いついたプロンプトで生成していきます。本気の生成のときは英語推奨ですが、イメージをつかむための最初の「案出し」は日本語生成で全く構いません。PCの前にいなくても、スマホでぽちぽちしているだけでなんとなくこうしたイラストが生まれていきます。


プロンプト:2人の女子高校生、デート、笑顔、街中を歩いている、渋谷、アイスクリーム

大事なのは、出てきたイラストをよく見て、「良い」「良くない」を構成している要素は何なのかを見極めていくこと。例えば、↑の左下のイラストは構図的には素敵なのですが、2人の体が重なりすぎていて、あとでLoRAを適用してするにはかなり難しいことが予想されます。また、夏らしいイラストにしたいので、夕方や夜よりも昼間のイラストが望ましく、厚着しすぎているイラストは不自然に感じることもわかります。


Nijiの出してきた案をイメージボードにして、足し引きしたい要素をプロンプトで操作していきます。


もうこの時点で良い感じのものがいろいろと出てきているのですが、この下絵をもとにinpaintを駆使してイラストを作っていくことを考えると、髪の毛はできるだけ体のほうに映り込まない方がよいので、「ショートヘア」をプロンプトに加えました。


しかし、Nijiのショートヘアは意外と長い!あまり言うことを聞いてくれず、ロングヘアが多くなってしまいました。Stylize値を低くするとプロンプトの効果がアップする(指示に忠実になる)のですが、クォリティが下がる傾向にあるので、デフォルト値(何も指定しないと100)のままで進めることにします。


スレッタさんは身長170cmあるので、さらに「身長差」などをプロンプトに加えて生成していきます。


こちらの左下のイラストがビビっと来ました。

・二人の足取りがそろっていて、顔の向きからも仲良しなのが伝わってくる

・左の子の身長や服装、仕草のイメージが現代JK版ミオリネにぴったり

・制服がシンプルかつ2人でそろっていて、スカートの丈やシャツのたるみがリアル(萌え方向にデフォルメされていない)

といった点が評価ポイント。


マイナスなのは、ふたりともロングヘアだったこと。この点を最初に修正しておかなかったことで、のちのち作業が難航することになります。なにはともあれ、このイラストを原案としてイラストを作っていくことに決定しました。 (今後、記事中ではこのイラストを『下絵』と呼びます)


まずはLoRAのinpaint適用

ウェディングイラストのときはスレッタとミオリネをそれぞれ別の単独イラストとして仕上げたあと、キャンバス上で合流させるテクニックを使いましたが、今回は最初から同じキャンバス上で生成していきます。


前回と違って面倒なのが、「相当工夫しないとアップスケールを掛けられない」こと。同時に別々のキャラ再現LoRAを適用すると、どうしても低劣化したりデザインの混線が起こるので、アップスケールは必然的にLoRAなしで行うことになります。すると、どうしても主線がずれて別のキャラになってしまう。「Inpaintで画面左をアップスケール→それをまたControlnetに入れて残る右側をアップスケール」するとか、「キャラ部分だけを切り抜いて、別々に分け、別々にLoRA適用してアップスケールして合成」のようにする方法もありますが、どうするのが正解なのか分からずかなりまごつきました。


案ずるより産むがやすしということで、まずは縦768pxサイズのまま、二人の顔をInpaintで入れていくことにしましたが、本当は「下絵をLamaCreanerでショートヘアにしてからアップスケール」を先にするのが正解でした。先に縦2048pxの「アップスケール済み下絵」を得ていたほうが、その後の作業が楽なのです。最適ルートは何だったかはあとで振り返るとして、作業の過程を追っていきます。


スレッタを作ってみよう

1人目はさほど難しいことはありません。ウェディングイラストのときと同様、Inpaint Onlyで右の女の子の顔周辺を塗りつぶして、Lineartで顔の輪郭を指定し、スレッタのLoRA適用プロンプトで生成するだけです。まだ下絵段階のテストなので、768✕512サイズで生成しています。(※今後、特に断らない場合はControlモードを「ControlNet is more important」にしています)


Lineart Animeで読み込ませたのはこちらの線画。下絵をLineart Animeで線画化し、顔の向きを示す主要要素意外を黒で塗りつぶしています。



プロンプト:suletta_mercury,1girl, face,smile,serafuku, happy smile,masterpiece,extremely detailed CG,official art,high resolusion+LoRA

このように、基本的に顔や目の位置を固定しながらスレッタを生成できました。Inpaint Onlyだけで生成しようとすると、顔の大きさや向きがめちゃくちゃになってしまうので、線画指定は非常に重要なことがわかります。

線画指定を忘れるとこうなるぞ…。


さて、何度か繰り返してよさそうなSeedを見つけ、今度は高解像度補助をONにします。最近は「4x-AnimeSharp」というアニメ調イラスト向けのアップスケーラーを好んで利用しています。R-ESRGAN 4x+ Anime6Bと似た感じのアップスケーラーで、重い代わりにあまり絵柄が変化しないのが良いですね。複数枚生成しようとするとすぐCUDA out of memoryエラーが起こるのでご注意ください。

こちらのサイトで「4x-AnimeSharp」をページ内検索し、リンク先から「4x-AnimeSharp.pth」ファイルをダウンロード。SDwebUIをインストールしたフォルダ内の「models\ESRGAN」フォルダに置けば、ほかのアップスケーラーと同様に利用できるようになります。同じサイトにある「4x-UltraSharp」もおすすめです。


さて、こちらが「4x-AnimeSharp」で2倍にしたイラスト。

眉毛が細すぎてスレッタには見えませんし、ヘアバンドも低劣な感じですが、それはあとで修正しましょう。


ミオリネを作ってみよう

まずはスレミオが並んでいるところを見たかったので、これを元絵にして、今度は左の女の子の顔と髪をInpaint Onlyで塗りつぶし、新たに線画指定して生成します。やることは同じですね。


プロンプトもスレッタからミオリネに変更するのを忘れないようにしましょう。

忘れるとこうなります。


プロンプト:miorine_rembran,1girl, face,smile,naked,nude, silver hair,ahoge,happy smile with closed eyes,masterpiece,extremely detailed CG,official art,high resolusion

この角度だとショートヘアみたいに見えるのと、特徴的な前髪+アホ毛がなかなか出ないのがミオリネさんの難しいところ。ここは絶対にこだわりたいところなので、とりあえずガチャを繰り返してみました。

狂気。


とりあえず後ろ髪がちゃんと出たものを採用することにしたのですが、前髪とアホ毛はどうしてもうまくいかなかったので、自分で描くことにしました(GIF▼)


この線画を使って生成したのがこちら。破綻も出始めていますが、だんだんスレミオににじり寄ってきた感じがしますね。


さっきはスレッタの方のアップスケールをおざなりにしてしまったので、こちらのイラストを元絵にして、同じ要領でInpaint Onlyを掛けて部分アップスケールします。目を閉じているハッピー笑顔にしたかったので、「closed eyes」を入れます。また、スレッタの持っているバッグの左下に手のようなものが生まれてしまっているので、ついでに修正しました。


プロンプト:suletta_mercury,1girl, face,smile,white shirt,thick eyebrows, happy smile with closed eyes,bag,open mouth,masterpiece,extremely detailed CG,official art,high resolusion


ここまできてようやく「スレミオと言えなくはない」素材ができた感じです。このイラストは1024x1536pxになっている(768x512から2倍アップスケール)のですが、これ「中間下絵」としてアップスケールしていこう!となったところで問題が生じてきました。


これを単純にLineartAnimeで線画保持し、「Tile」などを使ってアップスケールするとします。ただ、LoRAをダブル適用すると要素が混乱するので、プロンプトはLoRAなしでアップスケールしなくてはなりません。(RegionalPrompterを使う手もありますが…)


するとどうなるかと言うと、このようにイメージから離れてしまうのですね。


線画保持しないとこんな感じ。


そこで、結局さきほどの中間下絵をもとに部位ごとに分けてアップスケールしていくことに。もう少しアニメ調にしたかったので、LoRAを使って顔アップスケール→LoRAを使わず体をアップスケール、という順に作業していきます。中間下絵のLineartも噛ましていますが、線画レベルで修正を施しました。


こちらが修正前で、


こちらが修正後です。ミオリネの目や口、スレッタのバッグなどのおかしい部分を直しています。


こちらが実際にアップスケールされていく様子。元絵→顔アップスケール→体アップスケールの順です。


で、ここまでやって気づいたのですが、この方法だと制服の統一感が出ない。やはり、最初の黒髪娘+金髪娘の「下絵」の統一感が欲しい…となってしまいます。


そこで、ここまで苦労してやってきたことをいったんぶん投げ、最初の下絵のアップスケールを試みました。NijiJourneyのプロンプトはSDでは使えないので、img2imgタブに下絵を放り込んで、「Deepbooruによる解析」で自動検出し、整えます。



プロンプト:2girls, bag, bag charm, black bag, black hair, black legwear, black neckwear, black skirt, blonde hair, building, charm \(object\), closed eyes, crepe, duffel bag, eating, food, handbag, holding, holding food, ice cream, ice cream cone, jacket, kneehighs, long hair, multiple girls, open mouth, outdoors, pleated skirt, ribbon, road, school bag, school uniform, shirt, shoulder bag, skirt, street, twintails,nice hands,perfect hand,,masterpiece,extremely detailed CG,official art,high resolusion


▼GIF

このように、Nijijourneyのデザインを残しつつ、アニメ調にアップスケールできました。これを、さきほどのスレミオを人力マージします!2枚をレイヤーで重ね、身体部分を残して、柔らかい消しゴムを掛けて顔だけを入れ替えます。


よく見ると画面左に金髪が空中浮遊していたり、スレッタの肩に黒髪が残ったりしていて、「最初にLamaCleanerでショートヘアにしてからアップスケールすべきだった」という後悔がここで現出してきますが…何はともあれ、ある程度統一感のあるアニメ調タッチでスレミオイラストができてきました。


背景作業

さて、ここから問題になるのは背景をどうするかです。当初は下絵の雑多な背景が気に入っていたので、このままアップスケールしたいと思っていたのですが、思ったよりごちゃっとしていて破綻が出まくりそうなのと、アニメ調にした人物部分と合わないこと、「夏!」という感じに欠けることなどがやっぱり気になります。


Inpaint Onlyでなんとなく背景を塗りつぶして、夏っぽいプロンプトで「背景差分」を作ってみましたが…

何やら問題がさらに広がりそうな気がしたので、こちらは早々に断念しました。

※プロンプト:city,sky,traffic light, masterpiece,extremely detailed CG,official art,high resolusion


そこで、あらためて初心に立ち返り、Nijijourneyで夏!な背景を生成したのがこちら。


プロンプト:背景、原宿、空、町並み、風景、パース


左下のイラストが構図的に馴染みそうで、また楽しいデートの雰囲気もあるので気に入り、採用することにしました。やはりNijijourneyの構図・色彩は非常に魅力的ですね。また、少ないプロンプト指定でクォリティの高いイラストを生成できるのも強みだと感じます。


合成作業

さて、あとはスレミオの前景(キャラクター部分)を切り抜く作業です。いろいろ方法はあるのですが、いつものAnime Remove Backgroundでマスクしてもらう方法を使いました。

例によって背景が少し漏れてしまっていたり、シャツの白い部分が抜けてしまっていたりするので、このままは使えません。

Clipstudioで白黒画像をマスクとして使い、間違っている部分を白いペンで塗りつぶして正確に抜き出す必要があります。


あとは前景と背景を組み合わせる楽しい作業です。Twitterでも少し話題にしたRGBずらし(色収差)のエフェクトを掛けてみたりして、いろいろ遊びました。


結局こんな感じで見にくいイラスト(▼)になってしまうのでボツりましたが、有識者のみなさんに教えていただき、このように全体に掛けるのではなく、ギラギラした光やサイバーパンクな雰囲気を出したいときなどに部分部分に掛けるとよいことが判明。エフェクトの世界は奥深い!


なかなか構図が決まらない中で、やっぱりスレミオが主人公のイラストにしたいという気持ちが高まり、試してみたのがこちらの構図。nijiでポン出しした背景を魅せたいイラストではないので、背景を大胆に省略して、スレミオの日常の幸福感をドンと出した構図にすることにしました。


修正+エフェクト編

ここまで決まったら、あとは細部を修正して背景の青と前景の淡さを馴染ませるだけです。手描きで直した部分はこんな感じ。手はかなり直しました。


ミオリネさんの目のデザインはちょっとこだわりました。目尻にちょんちょんがあるととたんにミオリネさんっぽくなるんですよね。スレッタは「アイスおいしい!楽しい!」って感じなんですけど、ミオリネさんはそんなスレッタを見てちょっと恋をしている感じにしたかったので、頬にクリスタの素材「頬赤線」を入れて紅潮させています。スレッタの口元にアイスを書き加えたのはちょっとしたお遊びですが、、こういうことがAIイラストにはなかなかできないので、少しの手間でリッチにできる工夫とも言えます。


小姑さん(キーホルダー)も以前のイラストでせっかく作ったので、急きょ登場してもらうことに、夏イラストで光が強いので、影を書き加えています。


最後に、夏の日差しの表現と背景に馴染ませるためにグロー効果を掛けています。一気に統一感が出ますね!グラデーションマップでいろいろいじってもよかったのですが、この時点で午前3時半だったので、ここで完成ということにしました。

グロー効果のやり方は今回ここでは説明しませんが、いま本を買っていろいろな仕上げエフェクトを勉強しているところなので、身につけることができたらまた記事にしたいと思っています。



結局最適解は?

このように回り道を経て未明に完成したスレミオイラストですが、分かったのは


・「最初に下絵を入念に修正してアップスケールすべき」

・「背景と前景は分けて作った方がクオリティアップにつながることもある」


ということ。前景と背景を分けてしまうと不自然になり、光源などの統一感が失われてしまうことも事実なのですが、今回のイラストが良い意味で「AIっぽくない絵」になったのは、キャンバスの四方を大胆に削ってキャラを前面に出す工夫もそうですが、背景とキャラクターをしっかり分けて個別に作ったことも影響していると感じます。もちろん色調補正やエフェクトで馴染ませる工夫も必要なのですが、これまでほど前景背景の同時生成にこだわらなくても良いのかな…と思うようになりました。


そんなわけで、正しいワークフローはこんな感じです。


・Nijijourneyでイメージボードをいろいろ作り、下絵を確定させる

・下絵に邪魔な部分があれば、この時点でLamaCleanerで修正し、SDでアップスケールしてしまう。キャンバスサイズが大きすぎると使いにくいので、下絵は最終的に長辺768pxサイズにする。

・下絵のキャラクターを、InpaintOnly+Lineartを使ってひとりずつ目的のキャラクターにしていく。ポーズや服装、表情を変えたい場合は「ポーズ差分」などの過去記事を参照のこと。

・背景を差し替える場合は、キャラクターを切り抜き、別に用意した背景と合成する。

・部分修正、加筆、エフェクトを掛けて完成!

終わりに

少し話は変わるのですが、昨日PixivFANBOX側からこんな発表がありました。



詳細はツイートの方にも書きましたが、「AIによって生成された作品やそれにまつわる技術を解説するコンテンツ」はAI生成コンテンツに該当しないと明示されました。スタジオ真榊FANBOXのような利用方法を想定したメッセージなのかなと受け止めています。


発効日は2週間後の7月25日(火)で、これ以降はコンテンツの非公開化やアカウント停止といった処分が順次行われるとのことです。ただ、例えば「技術解説コンテンツはたしかにOKだが、AIイラストをそれに使うとAI生成コンテンツになる」とか「過去の画像を全て削除して文字だけにしてください」と言われてしまう可能性もありますので、発効日にどういった連絡が来るのか注目したいと思います。


5月にAIコンテンツの排除が発表されて以降、その定義について正式なアナウンスが出るまでこんなに長く掛かったのには非常にやきもきさせられました。が、利用規約改定は法律家に相談が必要でしょうから、なかなか容易にできることではないでしょうし、そもそも「AIコンテンツとはなにか」をきちんと定義づけようという試み自体には運営側の真摯さを感じます。大量投稿系のマネタイズが問題になりましたが、例えばBoothでは(検索結果に引っかからないものの)AIイラスト集などを販売することは現時点でも可能ですので、定義と棲み分けが進んでいること自体は歓迎したいと思います。


ただ、Twitterにも書きましたが、大量一括販売系ではないきちんと手の入ったAIコンテンツも排除対象となりつつあることには、内心忸怩たる思いがあります。動画やゲーム、小説など、画像生成AIによってリッチにできるコンテンツは沢山あるはずで、そうした作品まで販売の道をなくすことは理不尽と感じています。


私は上手な絵が描けませんが、画像生成AIを使っていろんな世界を表現できると思っています。ちくちく言葉が飛んでくることの多い昨今ですが、AIを使って人々が驚くような価値のあるコンテンツを作ることがユーザーの地位向上につながると信じて、これからも研究していきますので、どうぞよろしくお願いいたします。


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

Files

Comments

z-kumagon

ここしばらく、妙に重かったり、過去のイメージからの再現でエラー吐いて止まるようになったり、Hires_fixを使うと98%から進まなくなったりしていましたが、とうとうブラックアウトするようになったので、bing様にお伺いをたてると、ドライバーのせいだと仰るので、ドライバーを4/8まで戻しました。この作業でとりあえず、異常なく動くようにはなりました。やっとまた色々試せます。

bingai

先日は初めての質問にも丁寧にお答えいただいてありがとうございました。真榊さまのこちらの手法も試してみようと思って色々自分なりに試行錯誤しているのですが、ひとつ質問させていただきたいポイントがあります。 ”1人目はさほど難しいことはありません。ウェディングイラストのときと同様、Inpaint Onlyで右の女の子の顔周辺を塗りつぶして、Lineartで顔の輪郭を指定し、スレッタのLoRA適用プロンプトで生成するだけです。まだ下絵段階のテストなので、768✕512サイズで生成しています。(※今後、特に断らない場合はControlモードを「ControlNet is more important」にしています) Lineart Animeで読み込ませたのはこちらの線画。下絵をLineart Animeで線画化し、顔の向きを示す主要要素意外を黒で塗りつぶしています” の行程ですが、これはMultiControlnetの機能を利用して、次のような流れで進めているという理解でよろしいでしょうか。 ① Unit0ではInpaint Onlyで下絵の女の子の顔を丸々塗りつぶしておく。 ② lineart機能を使って抜き出した線画の髪型の部分を(ペイントソフトなどで)黒く塗りつぶし、視線や口元などの向きだけを残した線画を作成する。それをUnit1のlineartに再度読み込ませる。 ③ Unit0とUnit1をMultiControlnetに設定した状態で、プロンプトでスレッタさんを描くように指定して生成。 この行程の流れで試してみたところ、確かに下絵の女の子の顔の構図を保ったままでスレッタさんの顔を出力できているように思えるのですが、行程の流れが合っているのか自信がありません。 もしよろしければ、この流れで問題ないかどうか教えていただけると助かります。 長々とした質問ですみません。どうぞよろしくお願いいたします。

スタジオ真榊

そうですそうです、書かれた通りのやり方です。multi controlnetという言い方は登場当時は「スゲェ!複数のCNを組み合わせられるの!?」と言う感じだったのですが、いまや当然なムードになってしまったので、「ここでmulti controlnet機能を使って…」という書き方をしていませんでした。他の記事でも、「一つ目のCNで…」みたいな言い回しをしていたらmulti controlnetを使うという意味です!

bingai

ご返信いただきありがとうございます。やり方が間違っていなかったとのことでホッとしました(^_^) Multi controlnet、使い方に慣れてきたら本当に色々なことが出来そうでワクワクですね。記事内の言い回しについても了解です! 他にも色々なネット上の解説記事を読んでいますが、真榊さんの書かれる記事がダントツに懇切丁寧ですし、何より「こういうコンセプトで作りたい」というのが一貫していて、自分でも具体的にイメージが湧いてくるので楽しいです。これからも更新楽しみにしておりますし、微力ながら引き続き支援していきたいと思います(^▽^)

スタジオ真榊

ありがとうございます~! 私が「まあこれで伝わるだろう」と考えて書いてしまいがちなのと、その記事を書いたタイミングのSDの使用感覚がどうしても作用してしまうので、初めて触る方に分かりにくい現象がときどき起きてしまうと思っています。例えば「ここを雑塗りi2iして~」とかいきなり書いちゃうと、初心者さんには「何それ?」ですものね。 もしほかにも分かりにくかったり、複数の読み取り方があったりする文章がありましたら、大変お手数ですがコメント頂けますと助かります!

bingai

こちらこそありがとうございます。また何か分からないことがありましたら質問したいと思います。どうぞよろしくお願いいたします!