🕌

Blender+ControlNetを用いたアニメーションの作り方

2023/03/18に公開

この記事で得られるもの

  • Blenderを使ってControlNetに読み込ませるボーン動画を作る方法
  • sd-webui-controlnetをつかってアニメーションを作る方法

必要となる前提知識

  • stable-diffusion-webuiを使って、txt2imageでイラストを作成することができる
  • controlnetを使って、生成するイラストの構図制御ができる

用意するもの

  • Blender (3.3.1)
  • stable-diffusion-webui
  • sd-webui-controlnet

AIアニメーションの作り方

入力データの作成

準備

まず初めに、Controlnetへの入力データとなる動画データを生成します。
作業を始める前に、以下のリンクからBlenderで読み込めるopenposeライクのモデルをダウンロードします。
https://toyxyz.gumroad.com/l/ciojz

価格設定欄に購入希望金額を入力(0円から入力できるので、無料で入手可能)し、購入希望をクリック。メールアドレス入力欄が表示されるので入力し、OpenposeBoneをダウンロード。
ダウンロードしたZIPファイルを展開したら、Blenderを起動します。
起動後、左上のFileタブからOpenを選択し、先ほど展開したフォルダを指定して「Openpose_bone_01.blend」を選択し、開きます。
以下の画面が表示されたら成功です。

モーションの付与

続いて、ボーンにモーションを付与します。
今回は元動画を参考に、走るモーションを付与していきます。
まずは、Layoutタブの直下にあるプルダウンから、PoseModeを選択します(デフォルトはObjectMode)

動かしたい部分をクリックすると、このように青、緑、赤の線が表示されます。
(ホイールボタンを押しながらマウスを動かすと視点移動ができます)

この線に沿ってボーンを動かすことができるので、ボーンを動かして走っているポーズを作ります。
また、十字マークを選択することで、前後左右にボーンの一部を動かす事も出来ます。

このようなポーズができたら完成です。

続いて、こちらの記事( https://note.com/info_/n/ndccf33cd8975 ) を参考にし、ボーンに動きを付けていきます。

まずは、タイムラインを表示します。

つづいて、ボーン全体を選択した状態で左クリックをし、表示されるメニュー画面からInsert Keyframe → Location&Rotation を選択し、0フレームにキーを打ち込みます。

その後、0フレームに打ち込んだキーをコピー(Ctrl+C)し、タイムハンドルを50フレームに移動して貼り付け(Ctrl+V)ます。

そのままタイムハンドルを25フレームに移動させて、反転したポーズを貼り付け(Ctrl+Shift+V)ます。

動作を確認します。
まずは書き出す動画の設定を行います。
右ウィンドウの印刷マークのボタンを押し、FrameRangeを設定します。
Frame Startを1, Endを50, Stepを1に設定します。

再生ボタンを押して、動きを見てみましょう。


まだ動作が不安定なので、キーを追加して動作を整えていきます。

それでは、動画を書き出していきます。
アウトプットのフォーマットを「FFmpeg Video」に設定します。

続いて、カメラを設定します。
Object Modeに変更し、「Shift + A」を押してカメラを追加します。

カメラボタンを押すことで、いまカメラに画面がどのように映っているかを確認できるので、随時確認しながら作ったアニメーションが映るようにカメラの場所や向きを移動します。

今回はあまりこだわりませんが、カメラを動かす事でより動きを付けたりなどいろいろ工夫ができます。
(参考 https://yuki3dcg.com/3dcg/blender-how-to-move-the-camera-along-a-path/)

カメラの位置が定まったら、動画の書き出しをします。

画面右上から、Render → Render Animationを選択。
自動的にレンダリングが始まるので、しばらく待機した後動画が書き出されているかを確認します。
今回はこのような感じになりました。

ここまでで、入力動画の準備が整いました。

Control Netを使ったアニメーション作成

まずは、ControlNetを導入します。
stable-diffusion-webui(Automatic1111)を開き、Extensionsタブを開きます。

controlnet-webuiのGithubリンク(https://github.com/Mikubill/sd-webui-controlnet.git)
を入力し、インストールボタンをクリック。

インストールが完了すると、installedタブにControlNetが表示されます。

確認ができたら、画像を生成していきます。

プロンプトを入力していきましょう。
この時、なるべく複雑な絵にならないようにプロンプトで制御することで、生成される動画にちらつきを抑えることできます。

続いて、Seedの設定をします。
Seed値を固定することで、プロンプトでの制御と同様に生成される動画のちらつきを抑えることができます。

次に、ControlNetの設定を行います。
ControlNetを開き、Enableにチェックを入れ、Modelを選択しましょう。
今回はOpenPoseを利用します。

いよいよ動画を生成していきます。
画面一番下にあるScriptタブから、Controlnet m2mを選択し、先ほど作った動画をアップロードします。

Durationは1枚のフレームを表示する時間をミリ秒単位で調整できるので、ゆっくり画像を動かしたい場合は大きめの値を設定してもらえればと思います。

準備ができたら、Generateボタンをクリック。
PCスペックにもよりますが、私が使っているRTX3060(12GB)だと2秒の動画を作るのに大体10分程度かかります(入力した動画のフレームレートによる)

処理が完了すると、Generateボタンの下に出力結果がGIFとして出力されます。
(めちゃくちゃ骨折してる…)

長くなってしまったので、よりクオリティの高い動画を生成する方法は別途書き起こそうと思います。
すぐにいろいろ試してみたい人は、
@toyxyzさんのツイート
https://twitter.com/toyxyz3/status/1632731437941268481?s=20
が参考になるので、確認してみてもらえればと思います!

Discussion