Stable Diffusionで「女の子の立ち絵素材」を簡単に作る方法

画像生成AIで立ち絵素材を作る方法! 画像生成AI

今回も画像生成AIに関する話題で、タイトルの通り

Stable Diffusionを使って「かわいい女の子の立ち絵素材」を簡単に作る方法

をご紹介するという内容になっています。

まず前回の記事ではStable Diffusionを使って高品質な美少女イラストを作る方法をご紹介したのですが、その記事を書く中でゲーム開発者の私としては

これだけクオリティの高いイラスを生成できるなら、せっかくだからゲームに使える立ち絵素材をAIで作りたいなぁ

と思いました。そしてしばらく研究した結果、普通にイラストを生成するのに比べれば少し手間はかかるもののAIを活用して比較的簡単に立ち絵素材を作る方法を発見しました。

そこでここでは

  1. 無料の画像生成AI「Stable Diffusion」でかわいい女の子の立ち絵イラストを生成し…
  2. その画像を高解像度・高精細化して
  3. 背景を削除して素材化する

といった手順で立ち絵素材を作る方法を丁寧にご紹介しますね。

※2023/04/21追記:
記事を書きなおし、内容を「より簡単に精細な立ち絵を作れるやり方」に改めました。

今回作る立ち絵素材のサンプル

まずはじめに今回私がサンプルとして作った立ち絵素材を掲載しておきます(サーバーの都合上縮小してありますが、実際はこの2倍のサイズです)。

今回制作した立ち絵素材の例

下記でご紹介している手順以外に加工はしておらず、よく見ると髪の毛が途中で切れてしまったりしていますが全体的にはきれいに仕上がっています。こういった立ち絵を自分で描くのはなかなか大変ですが、AIを活用することで比較的簡単に立ち絵素材を作ることができます。

画像生成AIを駆使して女の子の立ち絵素材を作る方法まとめ

ではここから先ほどのような女の子の立ち絵素材を作る方法についてご説明します。主な手順は次の3ステップです。

  1. Stable Diffusionで女の子の立ち絵を生成する
  2. 「Hires.fix」機能で改めて高解像度の画像を生成する
  3. イラストの背景を削除して素材化する

それぞれ詳しく見ていきましょう。

手順1:Stable Diffusionで女の子の立ち絵を生成する

まずは無料の画像生成AIであるStable Diffusionを使って女の子の立ち絵を生成します。ゲームと相性が良いアニメ調のイラストをStable Diffusionで生成する方法に関しては下記の記事で詳しくご紹介していますので、ここではその内容を前提とさせていただきます。

画像生成AIで「美少女イラスト」を作る方法!かわいい女の子を無限に生み出そう【Stable Diffusion】
今回は画像生成AIに関する初心者向けの話題で、タイトルの通り無料の画像生成AI「Stable Diffusion」で美少女イラストを生成するための基本的なコツをご紹介するという内容になっております。昨今の画像生成AIの進歩は凄まじく、SNS...

また、モデルは下記の記事でご紹介している「Anything」を使うものとします。

短い呪文で美少女を生成できるモデル「Anything」が便利!アニメ風イラストを手軽に作ろう【Stable Diffusion】
今回も画像生成AIに関する話題で短い呪文でハイクオリティな美少女イラストを生成できるStable Diffusionモデル「Anything」をご紹介するという内容になっています。Stable Diffusion系のモデルで美少女イラストを...

さて一番目の記事ではとりあえずかわいい美少女イラストを生成することを目指した内容になっているのですが、立ち絵素材を作るためには

  • 少なくとも女の子の膝から上が映っている画像であること(できれば全身が映っているのが望ましい)
  • 立ち姿のイラストであること
  • 切り抜きしやすいように背景がシンプルであること

といった要件を満たすようにプロンプト(=呪文)を調整する必要があります。そこでプロンプトおよびネガティブプロンプトには次のような単語を盛り込みましょう。

【プロンプト】
masterpiece, super fine illustration, extremely detailed, 1girl, flat background, full body, standing, extremely detailed face and eyes,
【ネガティブプロンプト】
flat color, flat shading, nsfw, retro style, poor quality, worst quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text

プロンプトのポイントについては、まず「flat background」によって背景をシンプルにすることが重要になります。そして立ち絵にするために「full body」および「standing」といったキーワードも必須です。

またネガティブプロンプトに関しては下記の呪文のコツ記事でご紹介しているものをそのまま使いました。

Stable Diffusionの呪文のコツ総まとめ!神絵師のような美少女イラストを生成しよう
今回も無料の画像生成AI「Stable Diffusion」に関する話題で、タイトルの通りStable Diffusionで「神絵師が描いたような美少女イラスト」を生成するための呪文のコツを具体的かつ丁寧にご紹介するという内容になっています...

この呪文を使って「512*768px」のサイズでイラストを生成すると、例えば下記のような美少女イラストが生成されました。いい感じです。

美少女イラスト(立ち絵)の例

ただし今回使用したモデルだと「1girl」と指定しても2人以上のキャラクターが出ることが多かったので、ある程度ガチャを引く必要があると思います。

手順2:「Hires.fix」機能で改めて高解像度の画像を生成する

次にこのままでは画像サイズが小さく高解像度のゲームで使うには物足りないので、Stable Diffusion web UIの「Hires.fix」という機能で改めて高解像度&高精細な画像を生成します。Hires.fixの詳しい使い方は下記の記事でご紹介していますのでそちらも併せてご覧ください。

「Hires.fix」の使い方!絵の破綻を防ぎつつ高解像度の画像を生成しよう【Stable Diffusion web UI】
今回はStable Diffuison web UIの基本機能に関する初心者向けの話題でHires.fix(高解像度補助)の使い方を丁寧にご紹介するという内容になっています。Stable Diffusion web UIで画像を生成している...

web UIには画像をきれいに「拡大」する機能もあるのですが、高精細な画像が欲しいのでここでは単純に拡大するのではなく高解像度の画像として生成し直す方法をとります。

さてここでは次のような設定でHires.fixを使い、2倍のサイズの画像を改めて生成しました。

  • プロンプト・ネガティブプロンプト:先ほどと同じ
  • シード:先ほどと同じものに固定
  • アップスケーラー:R-ESRGAN 4x+Anime6B
  • ノイズ除去強度:0.5

これで高解像度・高精細な立ち絵を得ることができました。

高解像度化した美少女イラスト(立ち絵)の例

手順3:イラストの背景を削除して素材化する

最後に先ほどアップスケールしたイラストの背景を削除して素材化します。やり方は次の2通りがあります。

  1. Rembg等の背景削除用の拡張機能を使う(無料)
  2. Photoshopで背景を削除する

どちらでも好きな方法を使ってください。Photoshopを持ってないよという方は1番目の方法が無料でできるのでお手軽です。

Rembg等の背景削除用の拡張機能を使う(無料)

まずはweb UIの拡張機能を使って背景を削除する方法です。下記の記事でご紹介している「Rembg」をはじめ背景削除用の無料の拡張機能がいくつかあるのでそれを使ってください。

画像の背景を削除する拡張機能「Rembg」の使い方【Stable Diffusion web UI】
今回はStable Diffusion web UIの拡張機能に関する話題で、タイトルの通り画像の背景を削除する拡張機能「Rembg」の使い方をご紹介するという内容になっています。Stable Diffusion web UIで画像を生成し...

Photoshopで背景を削除する方法

次にPhotoshopを使う方法ではクイック選択ツールを使った切り抜きを行います。クイック選択ツールはツールパネルの次の画像の場所にあります(ない場合は自動選択ツールのところを長押ししてみてください)。

クイック選択ツール

クイック選択ツールを選んだら、「被写体を選択」ボタンを押してみましょう。

「被写体を選択」ボタン

すると自動でかなり正確に女の子の輪郭を選択してくれます。

「被写体を選択」を実行した場合の例

次に、おそらく今の状態だと「背景」レイヤーで作業していると思うので、選択状態のまま「Ctrl+J」でレイヤーを複製しましょう。すると選択部分(つまり背景を抜いた画像)のみを複製したレイヤーが作られます。

あとは背景レイヤーを非表示にすれば立ち絵素材の完成です!忘れずにPNG形式で保存しましょう。

おわりに

以上、画像生成AIなどのツールを駆使してゲーム用の立ち絵素材を手軽に作る方法をご紹介しました。

昨今何かと物議を醸しがちな画像生成AIではありますが、うまく使えばイラストスキルがなくても簡単にクオリティの高い素材を作ることができるためゲーム開発等に役立てることができます。ぜひ上記の内容を参考にしていただき、素敵な立ち絵素材を作って頂ければと思います。

この記事が何かしら参考になれば幸いです。

',b.captions&&s){var u=J("figcaption");u.id="baguetteBox-figcaption-"+t,u.innerHTML=s,l.appendChild(u)}e.appendChild(l);var c=J("img");c.onload=function(){var e=document.querySelector("#baguette-img-"+t+" .baguetteBox-spinner");l.removeChild(e),!b.async&&n&&n()},c.setAttribute("src",r),c.alt=a&&a.alt||"",b.titleTag&&s&&(c.title=s),l.appendChild(c),b.async&&n&&n()}}function X(){return M(o+1)}function D(){return M(o-1)}function M(e,t){return!n&&0<=e&&e=k.length?(b.animation&&O("right"),!1):(q(o=e,function(){z(o),V(o)}),R(),b.onChange&&b.onChange(o,k.length),!0)}function O(e){l.className="bounce-from-"+e,setTimeout(function(){l.className=""},400)}function R(){var e=100*-o+"%";"fadeIn"===b.animation?(l.style.opacity=0,setTimeout(function(){m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e,l.style.opacity=1},400)):m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e}function z(e){e-o>=b.preload||q(e+1,function(){z(e+1)})}function V(e){o-e>=b.preload||q(e-1,function(){V(e-1)})}function U(e,t,n,o){e.addEventListener?e.addEventListener(t,n,o):e.attachEvent("on"+t,function(e){(e=e||window.event).target=e.target||e.srcElement,n(e)})}function W(e,t,n,o){e.removeEventListener?e.removeEventListener(t,n,o):e.detachEvent("on"+t,n)}function G(e){return document.getElementById(e)}function J(e){return document.createElement(e)}return[].forEach||(Array.prototype.forEach=function(e,t){for(var n=0;n","http://www.w3.org/2000/svg"===(e.firstChild&&e.firstChild.namespaceURI)}(),m.passiveEvents=function i(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}(),function a(){if(r=G("baguetteBox-overlay"))return l=G("baguetteBox-slider"),u=G("previous-button"),c=G("next-button"),void(d=G("close-button"));(r=J("div")).setAttribute("role","dialog"),r.id="baguetteBox-overlay",document.getElementsByTagName("body")[0].appendChild(r),(l=J("div")).id="baguetteBox-slider",r.appendChild(l),(u=J("button")).setAttribute("type","button"),u.id="previous-button",u.setAttribute("aria-label","Previous"),u.innerHTML=m.svg?f:"<",r.appendChild(u),(c=J("button")).setAttribute("type","button"),c.id="next-button",c.setAttribute("aria-label","Next"),c.innerHTML=m.svg?g:">",r.appendChild(c),(d=J("button")).setAttribute("type","button"),d.id="close-button",d.setAttribute("aria-label","Close"),d.innerHTML=m.svg?p:"×",r.appendChild(d),u.className=c.className=d.className="baguetteBox-button",function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;U(r,"click",x),U(u,"click",E),U(c,"click",C),U(d,"click",B),U(l,"contextmenu",A),U(r,"touchstart",T,t),U(r,"touchmove",N,e),U(r,"touchend",L),U(document,"focus",P,!0)}()}(),S(e),function s(e,a){var t=document.querySelectorAll(e),n={galleries:[],nodeList:t};return w[e]=n,[].forEach.call(t,function(e){a&&a.filter&&(y=a.filter);var t=[];if(t="A"===e.tagName?[e]:e.getElementsByTagName("a"),0!==(t=[].filter.call(t,function(e){if(-1===e.className.indexOf(a&&a.ignoreClass))return y.test(e.href)})).length){var i=[];[].forEach.call(t,function(e,t){var n=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1,H(i,a),I(t)},o={eventHandler:n,imageElement:e};U(e,"click",n),i.push(o)}),n.galleries.push(i)}}),n.galleries}(e,t)},show:M,showNext:X,showPrevious:D,hide:j,destroy:function e(){!function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;W(r,"click",x),W(u,"click",E),W(c,"click",C),W(d,"click",B),W(l,"contextmenu",A),W(r,"touchstart",T,t),W(r,"touchmove",N,e),W(r,"touchend",L),W(document,"focus",P,!0)}(),function t(){for(var e in w)w.hasOwnProperty(e)&&S(e)}(),W(document,"keydown",F),document.getElementsByTagName("body")[0].removeChild(document.getElementById("baguetteBox-overlay")),w={},h=[],o=0}}})