Blender で適当な人物モデルを使ってアニメーションを作り、Stable Diffusion のimg2img機能を使って実写風動画が作れるのか、ちょっと実験してみました。
使ったモデルは↓この丸坊主のローポリで、img2imgで右の顔になります。髪の毛も生やせることが分かったので、案外使えるんじゃないかということになりました。
尚、本当は EbSynth を使いたかったのですが、Paperspace での使い方が分からなかったのでそれに頼らずどこまで出来るを見ていきます。
1.動画をimg2img処理する流れ
やり方は主に、①動画のまま一括処理させるか、②1フレーム毎の画像にばらしてから処理するかに分かれます。①の場合は専用のアドオンが必要なので、今回は②の画像に分割してから処理を選択しました。
Blender で下のような簡単なアニメーションを作り、アニメーションレンダリングして画像1枚1枚にします。
次にそれらの画像をimg2imgのバッチ処理ですべて加工します。
最後に出力された画像を統合して動画にします。今回はAviUtlの機能を使って動画化しました。
2.まずは元から完成された動画をimg2imgしてみる
Blender の前に、普通の実写動画をimg2imgしてみてどの程度きれいに出来るのか試してみました。使う動画はこちら。
こちらの動画はフリーの動画素材を扱う以下のサイトで取得しました。
ポジティブプロンプトには「Girl」と顔を変更するLoRAのみを設定し、ネガティブプロンプトは普段使っているものを入れます。Seed は固定。Denoising Strength はとりあえず0.45にしてみました。
その他、Controlnet 1.1 を2つ使います。
1つ目は Softedge の HED を強度0.25で使用。
2つ目は Reference only で、あらかじめLoRAで出しておいた顔を入れます。
出来上がったものを動画に再構成し、元動画と比較したものが下の動画になります。
上下に分かれている上側が変換後、下側が元動画です。
目のちらつきが鬱陶しいですが、Softedge と Reference only だけでも結構きれいに出せることが分かりました。
更に3パターン動画を作りました。
先ほど作った動画を①として、
② ①をSoftedge(強度0.35)と TemporalNet(強度0.6)で出力
③ 元動画を Softedge(強度0.5)と adetailer(ここで顔LoRA指定)で出力
④ 元動画を TemporalNet(強度0.75)と adetailer(ここで顔LoRA指定)で出力
というパターンです。
ただし TemporalNet に関してはモデルをセットして loopback wave script にチェックを入れただけなので精度が悪いです。現時点でちゃんとしたやり方が分からないのです。
3.Blender で作った動画から変換する
記事の序盤で紹介した方法で、動画を変換していきます。
粗いですがローポリのモデルでも結構できる感触です。
この処理された連番をさらに同じ方法で均し、同時に区間ごとに笑顔等のプロンプトを追加したりしていくと、以下のようになります。
EbSynth が使えればもっと滑らかになると思うのですが、使えないものは仕方ありません。
でもけっこう人間らしくなってきたのではないでしょうか。ただ表情を加える処理は面倒ですね。Blender 側で表情を変える作業も面倒なので、どちらの効率が良いかは微妙なところです。
次に、チラつき要素を極力排除するため、Blender から出力する画像の背景を白にし、img2imgでの出力も髪の毛や服無し(プロンプトは Girl のみ)にしてみます。
この状態で TemporalNet(強度:0.6)と adetailer(顔LoRA指定)でどこまでチラつかないかを試してみました。
やはりチラつきますね。TemporalNet の正しい使い方だれか教えて……。
0 件のコメント:
コメントを投稿