Live2D制作における物理演算の遅延の導入

はじめまして。
イラストレーター兼Live2Dデザイナー・ディレクターとして活動しています、乃樹坂くしおと申します。

いつものアイコンで失礼つかまつる

今回、Live2D Advent Calendar 2023に参加させて頂きまして、日々Live2Dを制作して物理演算や表現に苦戦しているクリエイターの方々に少しでも役立てそうな記事を書こうと思い今回のテーマにしてみました。
もし制作の一助となりましたら幸いです。


はじめに

今回解説する手法は数ある中からピックアップしたもので、比較的わかりやすく簡易的なものを選んで説明しておりますのでご了承ください。
他にも物理演算は奥が深いので、ご自身でも色々試してみると新たな表現や設定が見えてくると思います。

また、今回はキャラクターのLive2Dモデルを参考例として出しておらず、あくまで技術観点からの記事となりますのでご了承くださいませ。


物理演算での遅延と使用例

遅延とはそのまま通常の動作タイミングから一定のずれを起こして動作にメリハリや自然感を出すものです。
今回紹介する手法ですが、多段振り子を用いたよりも制御が容易です。
使い所としては、

  • 上半身と下半身の動きに差をつけて、体のひねりを表現する。

  • 本体とは別にマスコットキャラクターがいる場合、タイミングをずらして動かす事ができる。

  • 反射光の発光を一定タイミング遅らせる。

など、使い方は色々と工夫次第で見つけることができます。
タイミングをずらすだけで色々な表現の幅を広げることができるでしょう。


遅延の設定

角度(顔)基準の遅延

まずは顔の動きに対しての遅延パラメータを作成します。
今回は連続した3つの遅延パラメータをそれぞれ以下のようにしました。

パラメータの中身はこのようになっています。
今回、最小最大値がそれぞれ「-1/0/1」と設定していますが、これは後述する物理演算の出力倍率にかかる数値であると覚えておいてください。

Deleyを増やして行く場合は、複製し都度数字を増やしていくだけです。

さて、百聞は一見に如かず。設定の前にまずは遅延の動きを見てみましょう。
赤い丸が動きの基準点(今回での角度X)なります。

入力に対して、それぞれ遅延1~3にかけてどんどん遅く動いている、また追従した動きになっていることが分かります。

また、この遅延のための振り子設定は通常の物理演算とは違い、振り子の戻りがほとんどないのが特徴です。
物理モデル設定としては、このようになっています。

揺れやすさを平均的なものに、反応速度を低く、収束の速さを最大にすることでこのような振り子を作ることができます。

Live2Dの初期設定では入力・出力設定は角度が「-10/0/10」となっていますが、「-30/0/30」に、入力に対して種別を「角度」に設定します。

ここでの振り子の倍率設定ですが、基本的にパラメータの最大最小値の数値で問題ありません。
遅延先のパラメータの中身が「-1/0/1」なら1倍、「-30/0/30」なら30倍と設定します。

遅延を加算させる場合、今回のDeleyX2、3はこれらをかけあわせて作成しています。かけあわせは入力を1つ前の遅延パラメータを指定するだけです。

かけあわせているだけですので、Deley4、5、6…と遅延をどんどん増やしていくこともできます。

詳しくはサンプルファイルを見て頂ければ構造が分かるかと思います。是非参考にしてみてください。


体の回転(体)基準の遅延

顔の角度と同様に体の回転に対しての遅延も同様に行うことができます。

体の回転パラメータに対する遅延パラメータを作成します。

先程記述した通り、今回はパラメータの最大最小値が「-30/0/30」ですので、出力倍率は30倍に設定します。
別にパラメータの最大最小値を「-1/0/1」にして1倍に設定しても大丈夫です。
ちゃんとその倍率設定で動く、という説明のために設定してあります。

動きに関しても顔の角度の遅延動作と同様の動きにまとまっています。

実際に顔の角度と体の回転の遅延の動きの比較です。
パラメータの倍率や設定が若干違いますが、動作は同じ動きを再現していますね。

このようにパラメータの最大最小値と倍率を合わせてあげることによって、同様の動きを再現させるということができます。
使用するパラメータ、または種類や用途によってこれらの設定や倍率を指定してあげるようにしましょう。


遅延X/Yなどでの組み合わせ

ここまで基本的な遅延の設定をしてきましたが、X軸の一定方向のみのものでした。
ここでは遅延1~3の強度のものをそれぞれX軸とY軸を組み合わせた遅延の動きにして視覚的にどう動きが遅延されているのかを見てみます。

このように基準となる角度X/Yに対してそれぞれの遅延が同一座標に向かって遅延した動きを行っていることが分かります。
このように基準となる動きからの遅延をX/Y、またはZやその他の任意の動きに対してつけることで、動かしたいタイミングをずらすことができ、かつ自然な動作を再現することが可能となります。


動きの向きに反対ベクトルを加えた遅延

さてここからはちょっとした応用です。
動きの向きに反対ベクトルを加えた遅延、と言われても「なんぞや?」となるでしょう。
イメージ的には動かしたい方向に対して、一瞬反対側への入力を追加してから正方向に追従し始める遅延の動き、というものです。
動きに対する「反動」をつけるみたいなことをイメージして頂ければと思います。

パラメータは以下のように設定をしています。「kai」となっていますが、うまい単語が思いつかず発展形という意味の改をつけている感じです。

特に体の回転のときの設定値となんら変わりません。
今回はLive2Dに加え、VtubeStudio(トラッキングソフト)への設定が必要となります。

◆Live2D側のパラメーター設定

任意の角度、体の回転を複製し、VtubeStudio側用のパラメーターを空で作成します。今回はX軸のものを作成しました。

基本となるパラメータの設定はそのままコピーして問題ありません。分かりやすいようIDには末尾に「VTS」などをつけると良いでしょう。

物理演算に反動をつける場合、今作ったパラメータを入力設定に対して「位置X」に追加します。

また、振り子設定の反応速度を今までの数値から「0.1」へ増大させます。

それ以外の設定は基本のなった先程までの物理演算の遅延設定で問題ありません。
では早速実際の動きを見てみましょう。
動きを見てみると正方向の動きに対して、動き始め時に反対側への動きが加わっていることがわかります。

このように正方向に動く反対側への動きを反動として付与することができ、例えば体の動きに反動をつけたい時や、アクセサリーに反動の動きをつけたいときなど(例えば揺れやすいネックレスなど分かりやすくて良いです)につけると現実に少し動きを近づけることができます。

◆VtubeStudio(トラッキングソフト)側のパラメーター設定

さて、Live2D側では設定として動く用意になりましたが、このままではトラッキングソフト側で同様の動きにすることができません。
ですのでVtubeStudio側での設定を行います。

VtubeStudioの設定項目にあるパラメーター関連の設定を選択します。

動かす時に使用しているそれぞれのFaceAngle、またはFacePositionの設定をコピーし、先程Live2D側で作成した専用のパラメーターをコピーして使用します。

これで事前準備が完了です。
この準備を行うことで、トラッキングソフト上でモデルを動かした場合にも、物理演算プレビュー時と同様の反動の動きをつけることできます。

実際に顔のトラッキングで動かしてみたサンプルです。

このように動きに対して反動がちゃんと反映されていることがわかります。
中々設定をコピーして同じ動きに対して反動をつける、なんてしませんからね。
これを見つけた時はちょっと嬉しくなりました。


おまけ

ここまで見て頂きありがとうございます。
おまけではありますが、ちょっと応用した小ネタを追記しますので普段の中に取り入れてみてはいかがでしょうか。

呼吸パラメータを用いたIdlingMotionを使用しない自動モーション

上記の遅延パラメータを用いた応用として、呼吸パラメータに連動させたIdleモーションを用いずに動きをつける手法を紹介します。

まず呼吸パラメータは基本的に、VtubeStudioなどでIdleモーションなどの設定によらず常に一定間隔で動き続けるパラメータです。
その設定によらずに常時動き続けるパラメータを利用することによって、Motionファイルを設定することなくモーションをつけることができます。
主に羽や翼のあるキャラクター、装飾が動き続けるもの、浮遊するマスコットがなどに使用すると良い感じになります。

今回用したパラメータこれらのパラメータです。
BreathDeleyとBreathAoutXは呼吸の直接の遅延パラメータで、内容は同じものです。
今回分けて考えたほうが分かりやすいので分けていますが、特に一緒にしてしまっても構いません。

パラメータの中身の設定です。遅延用の「-1/0/1」パラメータです。

先程の顔の角度、体の回転と同様の物理演算の遅延設定をそれぞれのBreathDeleyへ設定します。
すると以下のように常時パラメータが呼吸に合わせて動き始めます。

BreathAutoXとBreathDeley2~4をそれぞれかけ合わせると以下のように、強度によって楕円状の動きを作ることができます。
もっと円形状に動きを近づけたい場合、遅延をかけあわせてあげるだけでどんどん動きを大きくつけることができます。

例えば、BreathAutoXを羽X軸の動き、をBreathDeley*を羽Z軸の動きの動きにパラメータ設定してあげることで、羽を自動的に動かすことが可能となります。
他にも色々使い道、応用はありますので色々と試してみてください。


設定ファイル配布

今回使用した遅延に関するパラメータのテストファイルを頒布いたします。
是非活用してみてください。

VtubeStudio用にテストで使用する場合は、通常のLive2Dモデル同様に出力してインポート、設定がある項目はその設定を行うことで同様の動きを再現することができます。
今回は主にLive2D側の物理演算での設定を紹介することが目的ですので、そちらの出力ファイルが必要な場合はご自身で出力して設定してみてください。


おわり

今回「Live2D Advent Calendar 2023(#Live2Dアドカレ2023)」という、年末のアドカレというものに参加してみましたが、中々説明するのは難しいですね。
このような記事を書くのは数年前に初心者向けのLive2Dキャラクターモデリングの指南書を出版して以来だったので、ちょっと緊張しました。
今回ちょこっと小出しな感じでしたが、遅延に関して触れてない方はちょっと新鮮な情報だったのではないかな、と思います。
少しでもLive2Dを作る上での動きの悩みが晴れるクリエイターが減ったり、色々な工夫をし表現の幅を広げるクリエイターが増えることを願うばかりです。

それでは皆様、良い年末を、良いクリエイティブを。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?