先日無事にハンドトラッキングのお披露目が終わりました
反響物凄くて有難い限りです;;頑張って作ってきてよかったなと思います!
引き続きこちらのハンドトラッキングの解説をゆっくり続けていきます。
今回は「実際にどんな動きを検知するのか」「どんなパラメータに紐づければいいのか」についてお話しします。
まずめちゃくちゃ基本的な話ですが、ハンドトラッキングの設定は左上の詳細メニューの左から3番目、人物に歯車がついたメニューから行います。
「IN」が「検知することのできる動きパラメータ」
「OUT」が「Live2Dで作ったパラメータ」です。
この二つを自由に組み合わせられるので、例えば
「手が上に上がったら肩も上げよう」とか
「手が体の前に来たら描画順が手前になるパラメータをONにしよう」みたいな応用も利きます。
青い「IN」ボタンを押すと検知可能な動きがずらーーーっと出てきます。
このうちハンドトラッキングに関わっているのは「Hand」とか「Finger」とかついてるやつですね。
実際にハンドトラッキングで使えるのは
片手ごとの動きが12個ずつで24個
両手が関わる動きが2個
の計26個です。
上から順に一つずつ解説します(長いので必要な情報を適宜流し読みしてください)
ーーーーーーーーーーーーーー
【HandLeftFound】【HandRightFound】【BothHandsFound】
bandicam 2022-11-01 14-14-14-575
「手が検知された」時に動くパラメータです。
「頬プク」パラメータと同じように、
「手が検知された瞬間に」一瞬でINの値がMinからMaxに動きます。
「Left」「Right」は片手、「Both」は両手の検知なのは何となくわかると思うんですけど、
注意して欲しいのは、この「Left」はそのままカメラから見た←手です
Live2DだとキャラからみてL・Rを命名すると思うので、恐らく紐づける手が逆になると思います。
「Both」は「両手とも検知されたときに」初めて動きます
bandicam 2022-11-07 19-56-39-667
これらのパラメータのぱっと思いつく活用法は「腕を上げるパラメータ」や「腕が上がってる差分に切り替えるパラメータ」と紐付けて「手を検知した時に瞬時に腕が上がるようにする」という感じだと思います。直接変形を付けたパラメータを紐付けると動きの切り替えが唐突過ぎますので、物理演算で紐付けた方が自然になると思います。
(物理演算についてはおいおい説明します)
【直接紐付けた動画】
bandicam 2022-11-07 19-43-23-243
【物理演算で紐付けた動画】
bandicam 2022-11-07 19-43-38-926
ちなみに今回はこの【HandLeftFound】【HandRightFound】【BothHandsFound】は使ってません。
「じゃあどうやって腕を検知しているの?」というのも後々説明します。
ーーーーーーーーーーーーーー
【HandDistance】
Distanceは「ソーシャルディスタンス」のディスタンスです。
つまり「右手と左手の距離」で動くパラメータですね。
Webカメラ画面の、右手と左手の間にある丸の距離がまさにそれです。ちなみにこれがくっつくとハンドサインにもなるみたいですね(今気づいた)
bandicam 2022-11-07 19-47-30-420
数値は、手と手が遠ざかるほど大きくなるみたいです。
bandicam 2022-11-07 19-51-59-295
上手く使えば拍手や♡手みたいな「両手を組み合わせる差分のトリガー」に出来そうですね。私は今のところは使ってません。
ーーーーーーーーーーーーーーー
【HandLeftPositionX】【HandRightPositionX】
「手のX軸(横軸)の位置」で動くパラメータです。
肩や肘の動きを入れてあげるといい感じに動くと思います。
bandicam 2022-11-07 22-05-38-702
ゆっくり動かせばある程度見切れても検知してくれるようです。
bandicam 2022-11-07 22-05-55-932
こちらの動きも、物理演算を使う事によって
「肩」「肘」の動きを上手くブレンドして出力できるようにしています。
ーーーーーーーーーーーーーーーー
【HandLeftPositionY】【HandRightPositionY】
今度はY軸(縦軸)の手の位置で動くパラメータです。
こちらに関しては少し活用が難しいですね。
AかBの動きを入れるといい感じに見えるでしょうか。
(ちなみに私は手のX軸の位置によってAかBかが切り替わるようにしています)
bandicam 2022-11-07 22-14-30-056
さらに、「IN」ボタンにある「範囲の制限」と物理演算をうまく組み合わせて、「ある一定の高さ以上の時だけ肩を上下させる」みたいなこともしています。
bandicam 2022-11-07 22-15-12-178
ーーーーーーーーーーーーーーーー
【HandLeftPositionZ】【HandRightPositionZ】
手のZ軸(前後)の位置で動くパラメータです。
先ほどのY軸の動きのBとちょっと被ってしまいますが、手をカメラに近づける動きを入れるといい感じに見えると思います。(制作難易度は高めです)
XY軸と比べるとあまり派手には動きません。気持ち程度であったら躍動感少し変わるかな、という感じです
(私は先ほどのY軸のBの動きと肩の動きを物理演算でブレンドさせて使ってます)
bandicam 2022-11-07 22-44-55-294
bandicam 2022-11-07 22-45-25-487
ーーーーーーーーーーーーーーーー
【HandLeftAngleX】【HandRightAngleX】
手を裏表にひねる動きです。作るうえでは一番難易度の高い箇所ですね。
一応ぐるりと360°分の手首の動きを検知するようになっているのですが、
実際には綺麗に動かせるのは「内回り」の180°だけです。
前回の記事でもお話ししたのですが、内回りの180°を超えると手首がギュルン!と一回転する謎のバグがあります。さらに動かそうとするとそこからは綺麗に動くのですが、如何せんこのギュルン!が違和感あり過ぎてこの手前で止めとかないとまともに見えません。
bandicam 2022-11-07 23-31-58-007
↑ここまでは綺麗に動きます
bandicam 2022-11-07 23-32-53-940
↑これ以上動かそうとすると手首がギュルン!します
bandicam 2022-11-07 23-33-48-293
↑さらに動かすことも可能ですが、境目のギュルン!の違和感があるので現実的ではないです。
bandicam 2022-11-07 23-34-07-962
↑一応外側にも少し動きますが、めっちゃバグりやすいのでこっちも現実的じゃないです(あと手首を痛めます)
bandicam 2022-11-07 23-36-15-088
数値で見るとこんな感じ。このバグはスムージングやトラッキング数値の変更、物理演算の有無は関係なさそうで今の所打つ手なしです。もし解決策知ってらっしゃる方いたら教えてください。私は割り切って「手はここからここまでしか動かさない」という感じでやってます。
ーーーーーーーーーーーーーーーー
【HandLeftAngleZ】【HandRightAngleZ】
手首の角度です。こちらも少し癖がありまして…。
前回の記事でもお伝えしたのですが、手の平を手前に向けているときは通常通り綺麗に動きます。
bandicam 2022-11-07 23-42-38-778
ところが、手の甲を手前に向けているときは反対方向に動いてしまいます。
bandicam 2022-11-07 23-43-16-935
ちなみに手を横に向けているときは一切動きません。
bandicam 2022-11-07 23-43-29-609
前回の記事の繰り返しになってしまいますが、これは「手から見た角度」を数値にしているからなんですね。手をひっくり返したら数値は反対になってしまうし、手を横にした時の↑の動きは厳密には「手の角度Y」なので動きません。
手の角度Yは未実装なのでどうしようもありませんが、手の甲を手前にした時の動きは直接補正するか物理演算で補正してやることで修正が可能です。私は物理演算で補正をかけて手の甲が手前の時だけ動きが反対になるようにしています。
bandicam 2022-11-07 23-47-06-958
(手の甲を手前にした時←側にあまり動いていないですが、実際に手首は親指側にはほとんど動かないのでこれでいいかなぁと思ってます)
bandicam 2022-11-07 23-47-36-683
数値で見るとこんな感じ。
ーーーーーーーーーーーーーーーー
【HandLeftOpen】【HandRightOpen】
手の開閉で動くパラメータです。指の区別はありません。
この図で言うと、5つの円がそれぞれの指の動きで、その下のバーがこの【Open】パラメータです。
bandicam 2022-11-07 23-53-35-961
指の区別を作るのは面倒だけど手の開閉を作りたいとかで使ってもいいし、手を握った時だけ発動する差分とか、その他色々なトリガーとして使えると思います。
私は今回は使ってません。
ーーーーーーーーーーーーーーーーーーーー
【HandLeftFinger_1_Thumb】
【HandLeftFinger_2_Index】
【HandLeftFinger_3_Middle】
【HandLeftFinger_4_Ring】
【HandLeftFinger_4_Pinky】
【HandRightFinger_1_Thumb】
【HandRightFinger_2_Index】
【HandRightFinger_3_Middle】
【HandRightFinger_4_Ring】
【HandRightFinger_4_Pinky】
出ました!指です。英語が分からない人にはチンプンカンプンだと思いますが、素直に1~5の順に「親指」「人差し指」「中指」「薬指」「小指」です。
余談ですがこれ慣れると英語の方が理にかなった名付け方な気がします。「薬指ってなんだよ薬指って」ってなりません?w
bandicam 2022-11-08 00-13-46-651
どの指も基本綺麗に動きますが、親指だけ「手を横に向けて拳を作っている状態」の時は動きが悪いので、あまり開いた状態で作ると見た目に違和感が出てしまいます。
当初は親指ももっと可動域を広くしていたのですが、手を握った時に↓のよう親指だけ飛び出た感じになってしまうんですよね。今は可動域より見た目の良さを優先してます。
bandicam 2022-11-08 00-18-50-354
パラメータは以上です!数は多いですが、多い分うまく組み合わせればとても綺麗に手を動かすことが出来ます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
最後に大事な話をします。
すでにハンドトラッキングを作ることが出来る人で、↑の解説の通りに設定を行った方は、私の手と決定的に動きが違う事に気づくと思います。
bandicam 2022-11-08 00-29-58-521
「え!トラッキング外れても腕が元に戻らないんだけど!!」
そうなんです、このままだと「トラッキングが外れた時、腕がその状態で止まって」しまいます。
この記事の最初の方に
「今回はこの【HandLeftFound】【HandRightFound】【BothHandsFound】は使ってません。
「じゃあどうやって腕を検知しているの?」というのも後々説明します。」
とお伝えしたと思いますが、厳密には
「どうやって腕を検知しない時に腕を降ろしているの?」
という質問が正しいんですね。
ここで活躍するのが、「差分」と「ハンドジェスチャー」です。
差分とハンドジェスチャーは左上の詳細メニューの一番右のボタンで行います。
差分と言えば「キラキラの目」とか「照れ顔」とか「バイバイモーション」とか、そういったONOFF差分やモーションをキー押しで使うための物、というイメージが強いと思いますが、VTSでは他にも色んな使い方が出来ます。
今回は「手を検知していない時に腕を特定の位置・形状で固定する」という条件の差分を作ります。
右側のタブの上の方にある「表情ファイルエディター」を押し
「新規表情ファイルを作成」を押します。
右側にずらーっとLive2Dで設定したパラメータが出てくると思います。
名前は適当に「←手検知」にしました。
(※本当はファイル名はアルファベットの方がいいのですが日本語でも動きます)
そして、「←手を検知していない時に固定したいパラメータ」をにチェックを入れ、バーをスライドさせて、「手を違和感なく降ろしている」ように見えるよう位置を微調整していきます。
bandicam 2022-11-08 00-41-55-751
※プリンはBAN回避に乗せてるだけですごめんww
私は肩から指先まで全てを連動させて動かしているのですべてにチェックを入れる必要がありますが、肘から先しか動かさない、という方は動かす箇所のみで大丈夫です。
うまく行ったら「セーブ」を押し、差分ファイル(exp3.json)を作ります。
ここまでの差分ファイルを作る工程は実はVTSを使わなくても出来るのですが、VTSを使った方が簡単だと思います。
次に画面右下の「+」ボタンを押して差分を作ります。
名前は適当に「←手OFF」にしました
「アクションタイプ」は「表情を切り替える」
「表情」に先ほど作った差分ファイルを入れます。
普段なら「キーコンビネーション」になにかしらのキー(ShiftとかWキーとか)を入れるのですが今回は何も入れません。
そして一番大事な「ジェスチャーのトリガー」です。「ジェスチャー」ボタンを押すと色々なハンドサインが出てくると思います。ここで設定したハンドサインをカメラに向かってすると「キーボードのキーを押した」時と同じように差分をONにすることができるんです。VTSの凄い機能の一つですね。
今回は右下の手のマークに×印がついたものを選びます。これは「手が検知されてないときにONになる」という意味です。まさに今回の条件にピッタリですね。
←手の設定なのでハンドサインの下にある「L」をクリックします。
検出までの時間はお好みですが、私は0.3弱くらいにしてます。あまりにも時間が短いと誤検知しやすくなりますゆえ!
そして、「ジェスチャーが検出されない時、表情を無効にする」これにチェックを入れます。こうすることで、手が検出されたときに自動的に差分がOFFになります。
(ちょっとややこしいけど、「「手が検出されない」のジェスチャーが検出されない時」は「手が検出される時」ってことです!w)
ジェスチャーを設定し終わったらOKを押します。
最後!キーバインド設定の「数秒間のフェード」ですが、ここの数値を変えることで「手を降ろすとき・上げる時の速度」を変えることが出来ます。
0.1の時
bandicam 2022-11-08 01-02-09-488
0.3の時
bandicam 2022-11-08 01-03-43-400
0.5の時
bandicam 2022-11-08 01-02-38-296
お披露目配信の時は「パパっと動いたほうがいい」と思い0.1にしていたのですが、全身で見ると降ろすときに少し違和感があるなと思いまして、先ほど0.3に直しました。ここの数値は人によって好みが変わると思うのでお好みで!
これで←手の固定は完了です。→手も同じようにしましょう。
bandicam 2022-11-08 01-07-05-418
今回の記事は以上です!次回からいよいよLive2Dでの制作方法について解説していきたいと思います。(大変お待たせいたしました…!)
それではまた!
たかき
2022-11-08 03:52:03 +0000 UTC