DynamicBoneでふわふわスカートを作る(基本パラメータ編)

みなさん、ふわふわスカート好きですよね。くるっと回った時に美しい動きをすると興奮を覚えますよね。私もそうです。このたびDynamicBoneでかなり良いスカートができたので、どのようにそれを作ったかを記事にしました。これを読んで、みなさんもぜひふわふわスカートを実装してください。

※考察から始めるため長いです。読みたくない方は動画とパラメータだけ見てください。

まずはふわふわさをご確認ください

うぃりあむ作「アエテリウスワンピース」の紹介動画

私の商品の紹介動画です。VRChat内でいろいろな動きをしてみたときの動画です。かなりふわふわ動いているのがわかると思います。よくClothと勘違いする人もいるくらいです。もし気に入ったら買ってね!販売ページはこちら!(宣伝)

完成したパラメータ(上記動画の改良版です)

完成したパラメータ

この記事では、このうちコライダーに関連しないパラメータの設定について解説していきます。それでは、この結果を得るまでのプロセスを追っていきましょう。

設定前の準備

【超重要】DynamicBoneのバージョンを最新版にする

2019年12月9日に1.2.1へアップデートされ、Friction(摩擦)の項目が追加されました。また、それに伴い動き方も変わっている模様です。ここで解説している動きはバージョン1.2.1を前提にしておりますので、古いバージョンを使っている方はアップデートしましょう。

ボーンの構成

スカートのボーンをすべて独立したボーンの子にすることを強く推奨します。たとえば以下のようにします。

ボーン構成の例

スカートのボーンが「Skirt」の子に入っていますね。この「Skirt」にDynamicBoneコンポーネントを追加し、RootにSkirtを指定して調整します。また、このときSkirtのヘッドの位置がスカートの中央にくるようにしましょう。
ボーンの数はそんなに考察していません。おそらく増やせば増やすほど滑らかになると思いますが、当然そのぶん重くなります。私は膝下スカートで1房あたり3本で8房、計24本で作成しました。

ウェイト

Blenderの自動ウェイトで設定しました。余計なボーンのウェイトが入っていないかどうかだけ注意しましょう。

(1月7日 19:50追記)End Lengthを設定する

FBXに入っているボーンの情報は、ヘッドの情報しかありません。そのため、末端のボーンは(「リーフボーン追加」などを行っていないかぎり)長さの情報がありません。End LengthはDynamicBone側でその末端のボーンの長さを指定するためのパラメータです。デフォルトでは0になっているため、指定する必要があります。

ボーンを均等に配置している場合、1を入力すればおおむね大丈夫だと思います。そうでない場合、スカートの裾に合わせて調整してください。

Dynamic Boneの設定

ここから本番です。

流れ

次のような手順で、最適な値を探していきます。

  1. スカートの物理的性質を考える
  2. ElasticityとDampingで変形からの戻り方を再現する
  3. Elasticity, Dampingにカーブを設定してより繊細な動きを再現する
  4. Stiffnessで可動域の制限を加える
  5. Inertで平行移動に対する変形のさせ方を指定する

手順1 スカートの物理的性質を考える

コンピュータ上で再現するのですから、まずは元になるものの性質を知っている必要があります。ここで特に考えたいのは、スカートにかかる力です。とはいってもDynamicBoneで再現できるものはたかが知れています。頭で「こんなかんじかな?」とイメージすれば十分です。今回の場合はスカートにかかる力なので、次のようなものを想像できるかと思います。

  • 重力
  • 摩擦(脚などとのもの)
  • 空気抵抗
  • 布の復元力

もちろんほかにもあると思いますが、とりあえずこれで十分でしょう。それぞれについて考えてから、合わせるとどうなるかを想像してみます。これらはスカートの生地の種類にも依存します。今回はシフォン生地のようなふわっとしたものを念頭に置いて考えてみましょう。

重力

今回考える布は軽いのでかなり弱いはずですね。

摩擦

スカートの上部は脚やパニエとこすれるのでそこそこありますね。対して裾に近いところでは特にこすれるものがないのでほぼゼロのはずです。

空気抵抗

ふわっとしたスカートの「ふわっ」はまさに空気抵抗です。なのでこれはけっこう強いと想像できます。

布の復元力

布を曲げたりひっぱったりしたときに戻る力です。やわらかい生地ならかなり弱いと考えてよいでしょう。

手順2 ElasticityとDampingで重力・摩擦・空気抵抗を再現する

ElasticityとDampingだけで「変形から戻るときにどういう動きをするか」はほとんど完全に定義されます。なので、こだわるときはこの2つをとくにしっかり吟味しましょう。これらは相互に影響するので、セットで考えます。

Elasticityは「変形から戻るときの力」です。しかし、ここではこれを重力の再現に使います。基本の形を「重力で落ち着いた形」だと捉えて、そこに戻る力だと考えると、Elasticityが重力におおむね対応すると考えることができます。さて、先ほど重力の影響はかなり小さいと考察しました。いろいろ試してみたところ、0.01未満の極めて小さい値が適切に思えました。とりあえず小さ目に0.005を入力してみましょう。

次にDamping摩擦・空気抵抗に対応した力を再現します。Elasticityだけだと、振り子やバネのようなびよんびよんした動きになってしまいます。なのでDampingとの兼ね合いで、布っぽい動きになるように調整します。Dampingを高くすれば高くするほど、変形からゆっくり戻ります。まずは0.05から始めてみましょう。

さて、Elasticity = 0.005、Damping = 0.05で動かしてみましょう。キャラクター全体を横に回転させて、スカートの揺れを確認します。ここでは、Hipsボーンを回転させています。

Elasticity = 0.005、Damping = 0.05

たぶんスカートがやわらかすぎる、動きすぎると感じると思います。大きく動かしたときにスカートが貫通していますが、それは手順5で調整するので、いまは無視して大丈夫です。ここから値をそれぞれわずかに変えて、いい感じになる値を探していきます。
基本は以下の操作の繰り返しで、好みの動きを探していきます。 

  1. Elasticityの値を変える   
    • スカートを固くしたいならElasticityを上げる   
    • スカートを柔らかくしたいならElasticityを下げる 
  2. Dampingを調整して自然な動きにする   
    • スカートが暴れるならDampingを上げる
    • スカートの戻りが遅すぎるならDampingを下げる

以下にいくつか設定例を示します。Elasticity、Dampingそれぞれ、やわらかすぎスカート~固すぎスカートの範囲に収まるかと思います。いろいろ調整してみてください。

やわらかすぎスカート(Elasticity = 0.005, Damping = 0.05)
固すぎスカート(Elasticity = 0.05, Damping = 0.3)
個人的いいかんじスカート(Elasticity = 0.007, Damping=0.06)

手順3 Elasticity, Dampingにカーブを設定してより繊細な動きを再現する(オプション)

(あんまり正しくないことがわかったので削除しました)

手順4 Stiffnessで可動域の制限を加える

先ほどの例だと、スカートの一番上のボーンも大きく動き、肌を貫通することもありました。なので、Stiffnessを使用して一番上のボーンはほとんど動かないようにしてしまいます。具体的には以下のようにします。

  • Stiffnessを0.95にする。
  • カーブを以下のような形状にする
Stiffness Distrib.をこのようにする

真ん中の縦線の位置を調整して、スカートの上部だけが制限されるようにしましょう。

手順5 Inertで平行移動に対する変形のさせ方を指定する

InertもDampingと同様に空気抵抗・摩擦に対応する力です。ただし、Inertはキャラクターが移動したときのみ適用されます。どういうことか見てみましょう。先ほどはキャラクターを回転させて動きをチェックしていましたが、今度は平行移動させてみます。速めに移動させてみましょう。すると、以下のようにスカートが貫通してしまいます。

ぱんつが見えるため幽狐さんを起用しております

VRChat内での移動も速いので、同様のことが起こります。これはちょっとまずいですね。なので、Inertは大きめの値を指定しましょう。まったく動かないのも不自然なので、0.9ぐらいにしてみましょう。Inertを変更したあとは以下のようになります。

Inert=0.9

完成!

調整完了後のスカート

お疲れ様です。これでふわふわスカートはあなたのものです。存分にふわふわさせてフレンドを興奮させてください!
また、ここまでのプロセスはスカート以外のものに置き換えても使えます。DynamicBoneを使いこなそう!

おまけ

おまけ①:カーブの操作方法

カーブの操作方法になじみがない人も多いと思うので、ちょっとだけ紹介します。基本は点をつまんで動かしたり、途中に点を追加したりして調整します。手順3に出てきた非連続なカーブは以下のように作成しています。

非連続カーブを作る手順

おまけ②:Distrib. のグラフの横軸の意味

0をRoot、1を最も長い経路のTailとしたときの、Rootからの経路の長さだと思われます。唯一視覚的に値が見えるRadius Distrib.を利用して、わかりやすくしてみます。Radius Distrib.に以下のカーブを指定してみます。このようにすれば、横軸の右にいくほど、ボーンの球が大きくなるはずです。

Radius Distrib. にカーブを設定

これを実験用につくったボーンに適用してみました。すると、以下のようになりました。

Rootから遠いほどRadiusが大きくなっている

Rootから遠い場所ほど、球が大きくなっていますね。また、使用されている値は各ボーンのヘッドの部分のみです。なので極端な話、次のようにして全部特定の値にすることも可能です。

距離ごとに細かく設定

結果は以下のようになります。

一番下の段の中で、真ん中だけ小さくできる

「完全固定」ができるStiffnessと組み合わせるなどすれば、けっこう応用幅が広がりそうです。

投稿者プロフィール

うぃりあむ
うぃりあむバーチャル職人
バーチャル職人うぃりあむ。
アンティーク風の小物や服を作る。

動画制作を行っております。
販売するアバターや商品の紹介動画などを承っております。ご依頼があればまずTwitter DMにてどうぞ。

Dynamic Bone調整技術者。