StableDiffusion でキャラクターの絵を描く時に、スポーツの最中の写真のような絵を描きたい場合、それに合わせて絵を出力するのは難しいです。
それをデッサン人形で形作って、それ通りに出力できると簡単ですよね。
今回はそんな棒人間でキャラの動きを表現してから、それに合わせた絵の出力を行います。
特に走っていたり何か動いている最中だと、それを平面的な絵から作成するのは初心者には難しいので、是非この三次元で棒人間を描ける「3D openpose」を使ってみてください。
結果
・3次元で棒人間を生成するため、通常のOpenposeよりも躍動感のある素体が作れる
・生成する絵のサイズが小さいとうまく反映されないことがある
・同時に保存出来るdepthなどを並用すると手足の崩れが少ない絵を出力出来る
この記事を読むと
三次元の棒人間を生成することができ、その構図に合わせた画像を生成することが出来るようになります。
※記事内に広告が含まれています。
「3D openpose」とは?
「3D openpose」の機能は、openposeで棒人間を書く機能を、三次元的に描画することが可能になった拡張機能です。
openposeでは二次元的に棒人間の関節を動かすだけだったので、奥行を持った絵を描くのは難しいです。
それに対して構図以外にも画角も決めれるのが3D openposeの良い点です。
3Dツールを使用するため、触り始めるハードルが高いかもしれませんが、ほとんどマウス操作だけ行えるので触り始めると簡単に弄ることが出来ます。
「3D openpose」のインストール
1.「Extensions」タブからAvailableを開きます。
2.「Load from」ボタンを押して、拡張機能リストを表示します。
3.拡張機能リストの中から「3D Openpose Editor」を選択し、「Install」ボタンを押します。
4.「Apply and restart UI」 ボタンをクリックして適用して再起動します。
再起動後に「3D Openpose」タブが表示されていれば準備完了です。
【検証】実際に線画から描いてみた
棒人間を3D Editorで作成後、それを元に画像を生成していきます。
「3D openpose」棒人間の準備
絵を描くための棒人間を3D Editorで作成していきます。
1.動かしたい関節を左クリックします。
2.出てきた移動用の球の線をクリックします。
3.ドラッグしたまま動かして関節に連なる人体を動かします。
関節部分の球は4色程度に、球の中で線が色分けされます。
色ごとに縦横奥行など各方向に動かすための線なので、向かせたい方向に動かします。
各操作は下記になります。
動作 | 挙動 |
左クリック (関節上) | その関節をどう動かすかを決めるための、 回転球の表示 |
右クリック (ボーン上) | ショートカットメニュー表示 |
左クリックしながらマウス移動 | 視点の回転 |
右クリックしながらマウス移動 | 上下左右の移動 |
ホイールアクション | 画面の拡大縮小 |
今回は走っている最中をイメージして作成していきます。
5分程度で作成してみましたが、そんなに悪くはないのではないでしょうか?
マラソンのゴール直前などを描きたい時は、もっと体を前傾させてみてもいいかもしれません。
実際にこの構図で出力していきますが、一点注意しなくてはならないことがあります。
それは生成される画像は右下赤枠の、黒い背景の画像が出力されるということです。
そのため、頑張って手足を良い感じの角度に変更しても、拡大して上半身しか映っていないと、足の構図を描くことが出来ません。
そのため全身を描きたい場合は、下記のように全身が映るようにしてください。
また生成する画像のサイズが、最終的に作成する画像と同じになるように設定してください。
構図の準備が出来たら、画面上の「生成する」を押します。
すると右下に、棒人間と手足がdepth,normal,cannyが出力されます。
それぞれの画像をクリックして画像をダウンロードします。
「Send to ControlNet」タブで、各々の出力を各ControlNetへ送ることが出来ますが、ControlNetのVerが「3D Openpose Editor」とあっていないとうまく反映されません。
その場合は手動で反映させれば、問題ありません。
「3D openpose」ControlNetの準備
「img2img」で作成すると元の絵に影響を受けてしまうので、元絵がない場合は「txt2img」の方が良いかもしれません。
プロンプトやmethodの準備が出来たら、ControlNetで下記の設定を行います。
また先ほど生成した棒人間をimageに読み込ませます。
対象 | 選択 |
ControlType | All or Openpose |
Preprocessor | None |
Model | control_openpose-fp16 |
「Control Weight」はControlNETの寄与度を決める値なのですが、1のままだと今回選択した棒人間の画像にリソースを割きすぎてしまい、他が上手く描かれない可能性があります。
0.5ぐらいから初めて徐々に上げてみると良いでしょう。
生成してみて上手く棒人間と同じ構図にならなければControl Modeを「ControlNet is more important」に変更してみましょう。
またプロンプトに作った構図に関する記述があるか確認しましょう。
全て準備できたら「generate」ボタンで画像を生成します。
出力結果
上記の3Dを使用して、下記の画像を出力してみました。
3D Editorで出した棒人間の画角とは若干ずれていますが、走っている様子が分かる画像が出力されました。
プロンプトとControl Weightによって、理想の画像にすることが出来ますので、是非色々と試してみてください。
また同時に保存出来るdepthなどを並用することで、手足の変形を防ぐことが出来ますが、画像のサイズが小さいとうまくいかないで注意してください。
反省点
成功した点
1.躍動感のある画像を出力できた
走っている様子が、手足の向きが違和感なく出力できたのは良い点でした。
失敗した点
1.各値の理想値を見つけられなかった。
プロンプトとControlNetの兼ね合いが難しく、うまく人の形に生成できない画像も多かったです。
2.出力サイズが小さかった。
全体的に1024×1024ぐらいで生成した方が、手足の造形含めて良かったかもしれないです。
3.棒人間をもう少し引き気味で出力した方が、背景を色々と変えられたかも。
背景に対して人の割合を下げた方が、ノイズの除去が良い感じに働くかもしれません。もう少し検証が必要な部分です。
OpenPoseと3D OpenPoseの比較
OpenPoseと3D OpenPoseでどちらを使用するとよいか、結果に差異があるか等は下記ブログにまとめてありますので、良ければご覧ください。
出力結果による比較
機能や使いやすさによる比較
まとめ
今回は『3D openpose』を使用して、棒人間から絵を描く方法について紹介しました。
改めて3行でまとめると…
・3次元で棒人間を生成するため、通常のOpenposeよりも躍動感のある素体が作れる
・生成する絵のサイズが小さいとうまく反映されないことがある
・同時に保存出来るdepthなどを並用すると手足の崩れが少ない絵を出力出来る
手足の向きや位置の微妙な調整を、口頭で上手く伝えられる人は少ないです。
現実でも写真撮る時など中々難しいですよね。
そんな時に3D Openposeを使用することで、手軽にキャラの構図を決めることが出来ます。
是非この機能を使って、プロンプトだけでは再現出来なかった様々な構図の絵をたくさん描いてみて下さい!
StableDiffusionにお勧めのグラボ
ここまでの記事を読んでStableDiffusionを始めてみたいと思ったけど、どれを買ったか良いか分からない人向けに私の使っているグラボを紹介します。
私が使用しているグラボはNVIDIA GeForce RTX3060 搭載 グラフィックボード GDDR6 12GBになります。
StableDiffusionで絵を生成するときは、PCのCPUやメモリよりもグラボの性能が重要です。
StableDiffusionではVRAMが12GB以上であることが推奨されていますが、普通のゲーム用のグラボでは8GBのものが多いです。
経験上、一回のプロンプトで一発で望みの絵が出ることは少なく、10枚ぐらい出力してそこから近づけていく作業をします。
しかしVRAMが低いと1枚を生成する時間が長くなってしまいます(完全にVRAM依存ではないですが)
1枚の生成する時間が長いと、最終的なゴールまでの時間も多くかかってしまうので、推奨要領である12GBのグラボを買うことをお勧めします。
VRAMが低い=一度に計算できる数が少ない=生成速度が遅い
そのため解像度の高い絵を生成するのに時間がかかるだけでなく、生成できない可能性もあります(2GBや4GBなど)
Controlnet等、拡張機能を複数使用する場合やLora等の学習を行う場合は、より顕著にVRAMの差が出ます。
そのため単純にAIで出力してみたい。というだけでなく、その一歩先で色々やってみたい方は是非12GB以上を購入してみてください。
ちょっと試すだけなら、下記のような無料AI画像生成サービスを使うのも良いです。
コメント