イラストを用いたアバター表現の動作域向上
当記事は、生成AIなんでも展示会 Vol.2にて展示したアバター表現システムの概要をまとめたものです。また、同イベントにて配布した資料とほぼ同じ内容となります。
Talking Head Anime 3について
以前よりTalking Head Anime 3 を用いたイラストアバター動作に取り組んでいました。
これは主にイラストの表情を変化させるAIのモデルとなっています。
※変化に対応したパラメータは次の通り
Talking Head Anime 3で指定可能なパラメータ一覧
眉毛 6種×2(左右)
まぶた 6種×2(左右)
瞳 4種 大きさ×2(左右)、X軸、Y軸
口の形 11種 あ、い、う、え、お、△ぐち、ニヤリ、
口角上げ×2(左右)、口角下げ×2(左右)
顔向き 3種(X,Y,Z)
身体 2種(Y,Z)
呼吸 1種
髪の毛の揺れ表現
Talking Head Anime 3単体では表現できないものとして、髪の毛をはじめとした揺れ物の表現があります。
髪の毛やリボンなどが揺れるとちょっとした動きでも目を引くので動かせると楽しそうです。
Talking Head Anime 3のモデルはより細かくは複数に分かれており、様々な出力が得られますが、この中から主に次の情報の出力を用いて、それに手を加えることで揺れ物の表現に挑戦しました。
①表情のみを変化させた出力
②顔・体の動きの量(元の位置からの変位)を表す出力
次のようにして、単体で用いるよりも表現幅を広げる試みをしています。
イラストを荒いメッシュに分割し、ばね・ダンパ・質点の格子として簡易的な物理シミュレーションとして計算をします。
②の出力のうち、前髪の辺りの点の変位を取得し、各格子点の揺れを演算します。
演算した揺れの変位量を指定した範囲でマスクし、②の変位量と足し合わせます。
①の表情変化出力イラストを、3の変位量によって変形させて動かします。
今後へのポイント
前後関係が正確ではないので、揺れた際に隠れる部分、隙間が出来る部分について表現が崩れがちで、深度推定などと組み合わせて重なり方を工夫できると面白そうです。
3で用いている領域マスクが今のところは手作業での作成が必要なので、セグメント分けを自動化できると応用が広がりそうです。
StreamDiffusionとの組み合わせによる腕の動きの表現
イラスト調のアバターを動かす手法の1つとして、3Dアバターを動かして、それをStreamDiffusionを用いて変換するということができます。GPUによっては~数十fps程度が出せますが、事前の3Dモデルの作りこみがある程度必要です。大きく変化させると崩れやすかったり、表情の反映がしにくくなったりします。
変化元として、Talking Head Anime 3で表情を変化させたイラストを用いた場合を試してみました。イラストから正確に一部パーツだけ変形させるのは難しいのですが、その点をStreamDiffusionでの生成を通すことで補完することを意図しています。また必要な変化を抑えることで崩れにくくなればと考えています。
上腕、前腕の領域マスクと関節位置の指定を用意します。
モーションキャプチャから肩関節、肘関節の回転を取得します。今回はモーションキャプチャには XR-Animator(内部はMediapipe)、データのやり取りにはVMC Protocolを使用しています。
取得した関節の回転に合わせてイラストを回転させ、変位量を計算します。
⇒(点群を回転行列を用いて3次元空間で回転させる処理)3の変位量を腕の領域でマスクしてTalking Head Anime 3の出力と合わせ、出力画像を得ます。
得られた画像をStreamDiffusionにおくり、生成処理をおこないます。変化は浅めにしています。
今後へのポイント
元のイラストを変形させるときの精度向上のアプローチが考えられます。腕部分を3D化出来れば回転させたときの厚みの表現などがつぶれにくくなりそうです。
StreamDiffusionを通した際のディティールの変化を抑えるため、元イラストのLoRAを簡単に作れる仕組みができるとより崩れにくく出来るのではないかと考えています。
変換の際フレームごとにちらつきが生じやすい場合があり、これを抑えるには出力結果を数フレーム分(直前1フレームのみだと出力が暴れやすいため2フレーム以上がよさそう)入力に重ねると改善される場合があります。重ね具合によってはアーティファクトが生じやすくなりますが、可能性は広がりそうです。
☆各種リンク
𝕏 :https://x.com/pale_color
note :https://note.com/pale_color
GitLab:https://gitlab.com/pale_color