ニコニコ
ユーザーブロマガは2021年10月7日をもちましてサービスを終了いたしました。
このページは皆さまから投票いただいた記事を保存したものです。

くぅ&みぃのブロマガ

【Tips】MMDモデルの物理演算設定 ~ジョイント編~

2015-08-24 22:01:15

くぅ&みぃの配布物一覧に戻る

※個人の理解まとめなので、間違っている部分もあるかもしれないと思って
 読んでくださいませ。

1.ジョイントの基本

ジョイントとは、その名前の通り、剛体と剛体をつなぐものです。

プラモデルのジョイントパーツ、扉の蝶番、ブレスレットの糸……、そんな感じのものだと
イメージしてください。とりあえずは。

前回のTips記事「MMDモデルの物理演算設定 ~剛体編~」で、
剛体には、①ボーンに追従して動く剛体②物理演算で動かす剛体があると説明しました。
前回の記事が未読の方は、そちらを先に読まれるのをおすすめします。

この「物理演算で動かす剛体」の動きを制御するのが、ジョイントの大きな役目です。

鉄則として、物理演算剛体は、ボーン追従剛体につなげましょう。

モデルの頭の剛体は、頭ボーンのモーションに合わせて動く、ボーン追従剛体ですね?
そして、髪の毛の剛体は、ゆらゆら勝手に揺れて欲しいので、物理演算剛体です。
ここまではOK。

では、ジョイントを設定せずにその通りに剛体設定をすればどうなるか。

重力に従って、髪の毛の剛体が地面に落ちます
髪の毛ボーンが頭ボーンの子ボーンだろうと、おかまいなしです。落ちてしまうのです。

それを防ぐには、髪の毛の剛体をちゃんと頭の剛体と繋いでおかないといけません。
その仕事をするのがジョイントです。

(1)接続剛体Aと接続剛体B


ジョイントは、「接続剛体A」と「接続剛体B」をつなげます。
1つのジョイントで、2つを超える数の剛体をつなげることは出来ません。

プルダウンから、それぞれ接続したい剛体を選べばOKです。

今の例だと、接続剛体Aが頭の剛体、接続剛体Bが髪の毛の剛体になります。

とりあえず、ボーン追従剛体がA物理演算剛体がBに来ます。
長い髪の毛など、物理演算剛体同士をつなぐ場合は、ひとまずは、ボーン追従剛体に近い方の
剛体をA、遠い方の剛体をBにしてどんどん繋いでいきましょう。
 ※裏ジョイントについては後で説明します。

物理演算剛体の全てが、ジョイントをたどっていけばどこかのボーン追従剛体につながって
いる状態にしてください。
でないと、地面に転がった悲しい忘れ物になります;

(2)ジョイントの位置/回転


ここの入力欄で、ジョイント自身の位置と回転角度を設定します。

基本的には、接続剛体Bになる剛体の関連ボーンの位置が、ジョイントの
位置になるようにすることが多いです。
だいたいそこが、接続剛体Bが接続剛体Aから ぶら下がっている部分になるので。

そこで便利なのが、入力欄の右側にある「←ボーン位置取得」ボタン!

先に、ボタンの下にあるプルダウンでボーンを選んでから、このボタンを押すと、
選んだボーンの位置情報を、そのままジョイントの位置情報に上書きしてくれます。
ボーン自体には回転角度の情報がありませんので、取得できるのは位置情報のみです。

なお、ジョイントの角度は、すぐ後で説明する制限設定と深く関わる重要な項目ですので、
気を遣って設定します。
まだよく分からないときは、回転しないままで置いておくほうが分かりやすいです。

(3)ジョイント制限設定


はい! 来ました! ここ重要です!!
ジョイントの要、ひいては物理演算設定の要です!!

 ◆移動制限
 接続剛体Bが、接続剛体Aからどちらの方向にどれくらいの距離、近付いたり離れたりする
 ことが出来るのかを設定する項目です。

たとえば、移動制限のxの項目に「-1」-「2」と入力すれば、接続剛体Bは初期位置より
x軸方向に1だけ接続剛体Aに近付くことができますし、反対に初期位置よりx軸方向に
2だけ接続剛体Aから遠ざかることができます。
その間ならどこでも移動できます。
要するに、接続剛体Bは、x軸方向で距離3の分だけ自由に移動することが出来ます。

ここに「0」-「0」と入力すれば、理論的には接続剛体を移動させないことが出来ます。
 頭の剛体と髪の毛の剛体については、髪の毛の剛体が初期位置から動いて頭に近付いたり
 遠ざかったりすると、髪の毛が伸び縮みしてしまって不都合ですよね?
 そんなときには、移動制限を「0」-「0」と入力しましょう!
ですがMMDの仕様として、ここに「0」-「0」と入力してあっても、誤差程度に移動します。
   ↓
完全に移動をなくしたい場合、剛体の設定を「物理+ボーン位置合わせ」にしておく必要が
あります。
まあ、髪の毛なら、誤差程度なら動いても問題なかったりするので、ボーン位置合わせに
するか否かはお好みで。


この移動制限の設定項目の、x、y、z軸は、ジョイント自体が回転していると、
それと同じだけ回転します。
 ←ここ重要

ジョイントが回転していないのであれば、
  x軸方向 → モデルにとって左右の方向 (向かって右がプラス)
  y軸方向 → モデルにとって上下の方向 (上がプラス)
  z軸方向 → モデルにとって前後の方向 (奥がプラス)
です。
これは、ボーン位置などの数値と同じなので分かると思います。

ジョイントが回転しているとこれが動くので、多少分かりづらくなります。


 ◆回転制限
 接続剛体Bが接続剛体Aに対して、どちらの方向にどれくらい回転することができるのかを
 設定する項目です。

たとえば、回転制限のxの項目に「-45」-「90」と入力すれば、接続剛体Bは
初期位置を基準(0度)として、x軸方向に-45度から90度の範囲で自由に回転できます。

回転角度に制限を設けたくない場合は、「-180」-「180」と入力するのがいいようです
「-360」-「360」と入力すると、MMD内での計算が混乱して意図した動きになりません。


ポリゴンには「ねじれて壊れる方向」が存在するので、その「ねじれて壊れる方向」の
回転制限は厳しく(「0」-「0」か、「-5」-「5」くらいまでに)しておきましょう。
 ※ねじれて壊れる方向とは
  →曲がるストローを縦向きに置いたとき、前後(x軸)と左右(z軸)には
   無理なく曲がります。
   ですが、ストローをひねる向き(y軸)は、かなり無理がある動きになりますよね?
   ストローにとってはy軸が鬼門なのです。
   同様に、実は首ポリゴンにとってはy軸回転が鬼門です。
   腕ポリゴンにとっては、x軸のひねりが難しいのもよく知られているかと思います。


この
回転制限の設定項目の、x、y、z軸は、ジョイント自体が回転していると、
それと同じだけ回転します。
 ←ここ重要

この回転制限を設定するとき、それぞれの回転軸のプラス・マイナスを正確に
設定するのは極めて重要ですが、少し分かりにくい部分でもあります。

ジョイントを回転していないのであれば、それぞれのプラス・マイナスはこうなります↓



  x軸回転 → x軸をつまんでコマのように回すときの回転(前転・後転)
   鉄棒の前回りがプラスで、逆上がりがマイナス
  y軸回転 → y軸をつまんでコマのように回すときの回転(まさしくコマ)
   軸が伸びている方向から見て、反時計回りがプラスで、時計回りがマイナス
  z軸回転 → z軸をつまんでコマのとうに回すときの回転(側転)
   軸が伸びている方向から見て、時計回りがプラスで、反時計回りがマイナス

ん? y軸回転とz軸回転で、プラスとマイナスの説明が逆じゃない?? と思った方、
鋭いですね! そうなんです、逆なんです!
(x軸回転については、この図を作るときに間違えて、軸が伸びている方向と逆側からの
 図を作ってしまいました。理論的にはy軸と同じになります)

これには割と深い訳があるのですが、ざっくりと言えば、MMDの仕様です!
MMDさんはz軸の伸びる方向がちょっと不思議なのです。


とりあえずですね、うだうだ言っても、平面の図を見せても分かりにくいと思ったので、
この図を作るときに使った、
回転方向のプラス・マイナスと矢印の書いてあるモデルのデータを
置いておきます!

(X軸回転、Y軸回転などの文字や謎の人型は書かれていない状態のモデルです)
  →https://bowlroll.net/file/79348

ちょっと小さいモデルですが、好きなサイズにしてお使い下さい。
 ※このモデルは、どるるPのジョイント軸可視化プラグインに同梱されている
  「軸っぽいモデル」の改造モデルです。


 ◆ジョイントを回転させたほうがいい場合

ジョイントを回転させると、移動制限や回転制限の基準となる軸が動いて分かりづらくなる、
というのは事実ですが、ジョイントを回転させたほうがいい場合というものも存在します。

たとえば、スカートの場合。
モデルの真正面、真後ろ、真横については、回転制限設定をするのは比較的やりやすいです。
真正面なら、x軸方向マイナスがスカートが広がる方向、プラスがスカートが足に近付く
方向になるので。
しかし、斜め前や斜め後ろの場合はどうでしょうか?
スカートが広がる方向、をうまく表現しづらいですよね?
ですが、スカートは前も斜めも均等に広がって欲しい!
 ↓
そんなとき、ジョイントを回転させましょう!
具体的には、前・横・後ろのどこか自分のやりやすいところで、いい感じのジョイント設定を
ひとつ作ります。
そうしたら、そのジョイントを複製して、場所を合わせつつ回転させていけばいいのです。

まあ、あくまで説明のための例ですけどね。
スカートの設定といえば、言わずと知れた、くろら様の神プラグイン
「曲面自動設定プラグイン」の独壇場ですもの!
 (曲面自動設定プラグインのダウンロード先→https://bowlroll.net/file/14991

このプラグインは、スカートなどの曲面ポリゴンに合わせて、
ボーンを配置し、自動でウエイトを設定し、剛体・ジョイントも一括設定してくれる
プラグインです。控えめに言って神です。
いつもお世話になっております。


 ◆回転したジョイントの軸方向をチェックする方法

曲面自動設定プラグインで作ったジョイントの設定を書き直したり、過去の自分がやった
どう回転したか分からないジョイントの設定を書き直したりしたいとき、基準となる軸方向が
分からないと大変ですよね?

そんなとき、役に立つのが、どるるPの「Joint軸可視化プラグイン」です!
ジョイントを選択してこのプラグインを実行すると、そのジョイントの軸方向を示す材質を
追加してくれます。
 (Joint軸可視化プラグインのダウンロード先→sm18498224
 ※裏ジョイント作成プラグインに同梱されています。

そして実はですね、上のほうで置いておいた、回転方向のプラス・マイナス矢印モデルは、
この「Joint軸可視化プラグイン」と組み合わせて使うことができる仕様にしています。
元々のプラグインではx、y、zの軸のみを追加するのですが、回転方向のプラス・マイナスも
一緒に分かった方が分かりやすいかなー、と。
Joint軸可視化プラグインのフォルダの中にある「axis.pmx」を別の名前にしておいて、
上で配布している「axis.pmx」と「axis.png」をJoint軸可視化プラグインのフォルダの
中に入れると、ジョイントの回転方向に合わせて、軸方向と回転方向を示すモデルが
挿入されるはずです。
もしよかったらお使い下さい。


(3)ばね設定


ここに入れる数値が大きいほど、物理演算で揺れたとき、ばねのように反対側に揺れ戻しが
起こります。

ばねの値が大きいと、移動ならバネそのものの、しばらくびょんびょん動く感じの動き、
回転なら叩くと跳ね返ってくるサンドバック的な動きになる、とイメージしていただければ。

スカートなどで、ばねを0ではなく少し(10くらい? 剛体の質量による)入れておくと、
回転の余韻で逆回転したりします。



2.裏ジョイント

ジョイントは、剛体と剛体をつなぐもの、なのですが、ちょっとばかり癖があります。

現実世界で、長いリボンがあったとき、それを右端から持ち上げても、左端から
持ち上げても、大して挙動は変わりませんよね?

ですが、MMDのジョイントは「どちらからつないであるか」で挙動が変わります。

イメージしやすいようにざっくりと言うと、
ジョイントさんは、接続剛体Aに乗っていて、そこから接続剛体Bを一生懸命動かします。
(ジョイントは接続剛体Aの関連ボーンの動きに合わせて動きます)
接続剛体Bが勝手に動いても、ジョイントさんがそれに合わせて接続剛体Aを動かすことは
しません。
ジョイントさんは、もー、言うこと聞いてよB剛体! って思ってるだけです。

あくまで接続剛体Aに合わせて接続剛体Bを動かすのであって、
基本的に、接続剛体Bから接続剛体Aを動かすことはしません

つまり、髪の毛の根本→毛先、という順番でジョイントがつながっている場合、
根本に合わせて毛先は動きますが、毛先のほうの動きに合わせて根本の方が動くという
ことはないのです。

ですから、毛先のほうが、腕などに当たって持ち上がったとき、上手くそれが
根本側の剛体に伝わらずに破綻してしまうことがあります。

それを防ぐことが出来るのが、裏ジョイントです!



裏ジョイントについては↑の動画で解説されているのですが、何せ応用編なので、
少し取っつきにくいかもしれません。

要するに、接続剛体Aと接続剛体Bを逆にしたジョイントをもう一つ作ってしまえば、
どちらの剛体からでもお互いに動きが伝わるようになって、破綻しなくなるよね
というのが、裏ジョイントの発想なのです。

つなぐ順番が逆になるので、移動・回転制限の数値のプラスマイナスが~、という
難しい話もあるのですが、そこはあっさりと便利ツールに頼ってしまいましょう!

紹介するのは、どるるPの「裏Joint作成プラグイン」
ここのジョイント、裏ジョイントも欲しいなーと思うジョイントを選択して
プラグインを実行するだけで、裏ジョイントを作ってくれます♪
 (裏Joint作成プラグインのダウンロード先→sm18498224

ジョイント設定の数値をいじったら、裏ジョイントの数値も変えないと
いけないので、よく分からないなら一度作った裏ジョイントを削除して、
もう一度このプラグインで裏ジョイントを作り直した方が間違いがないです。


 ◆裏ジョイントの使いどころ

裏ジョイントは「物理演算剛体が長く連なっているところ」に使うのが効果的です。
長い髪の毛、ロングスカートの縦ジョイントなどですね。

逆に裏ジョイントが必要ないのは、剛体の動きが逆側から伝わる必要がない、
「ボーン追従剛体と物理演算剛体がつながっているところ」です。
髪の毛やスカートでも、最上段のジョイントは、裏ジョイントを作っても無意味です。
ボーン追従剛体の動きが、物理演算剛体のせいで変わるなんてことは起きませんから。
あと、「物理演算剛体が、ジョイントで丸くつながっているところ」も、あまり
裏ジョイントの必要性がありません。
具体的にはスカートの横ジョイントですね。
これは、物理演算の剛体同士がジョイントでぐるっとつながっていることで、
めぐりめぐって動きが伝わっていくからです。


3.多重ジョイント

先ほども書きましたが、ジョイントさんは、接続剛体Aに乗っていて、そこから
接続剛体Bを一生懸命動かします。
はい、一生懸命なのです。
ジョイントさんも完璧なわけではなくて、たまに上手くいかないのです。
制限をかけたはずなのに、剛体がどこかに飛んでいってしまったりするのです。

……というわけで、困ります

だから、この一生懸命なジョイントさんを助けてあげよう!
一つで無理なら、もっと増やしてあげようじゃないか!!
それが、多重ジョイントです。



私は、WYKPさんのこちらの動画で配布されている布モデルで、多重ジョイントの
存在を初めて知りました。

作り方は簡単。
ジョイントをクリップボードに複製して、メモ帳か何かに貼り付けて、
ジョイント名だけ少し書き変えて元のモデルに挿入するだけ!
(私はジョイント名の最初に+をつけてます。多重ジョイントをたくさん入れると、
 ++とか+++みたいになっていきます)

多重ジョイントは元のジョイントを複製したものなので、全く同じ設定の
ジョイントなのですが、増えていけば増えていくほど、ジョイントによる制限が
厳密になっていきます
検算を重ねる感じですかね。

使いどころとしては、他と比べてモーションが激しくなりやすい手・腕あたりに
物理演算のものをつけるとき、がおすすめです。
ジョイントが1つだと、振り回されてどうしてもあらぬところに飛んでいって
しまうので。



ジョイント編のまとめとしては、こんな感じでしょうか?
結局どんな風にジョイント制限の数値を入れたらいいのか、みたいな実践編は
長くなりそうなので、今回はこの辺りで。

この情報が、皆様の素敵なMMDライフの一助となりましたら幸いです。

みぃ  .


くぅ&みぃの配布物一覧に戻る
投稿者:

くぅ

プロフィールページ