ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

スカート剛体について(備忘録)
閉じる
閉じる

スカート剛体について(備忘録)

2015-08-16 12:49


    スカートの剛体・ジョイント設定をするにあたり、MMDモデル作成のど初心者であった私は、そもそも剛体・ジョイントとは何ぞや・・・・から勉強を始めました。。。^^;;;

    以下はわたしが勉強した過程で得た知識の備忘録です。
    少し間が空くとパラメーター設定の仕方とか忘れちゃうので・・><


    <剛体の設定>

    ■剛体とは
    MMD上で髪の毛やスカートのヒラヒラした動きをモーション(ボーン)設定で再現するのは非常に大変(根性があれば無理ではないかも・・?)なのですが、「物理演算」というMMDが髪の毛やスカートの挙動を内部で自動で演算してくれるありがたい機能があります。

    その時、MMDは髪の毛やスカートのモデルに対して直接挙動を計算するのではなく、「剛体」と呼ばれる専用のオブジェクトに対する動きを計算します。
    よって、MMD上で物理演算をONにすると、この「剛体」が計算された挙動で動いていることになります。
    (実際にはMMD上で剛体は直接見えませんが・・^^;;)

    それでは何故、剛体の動きに合わせて髪の毛やスカートが動いているかというと、各剛体に対してどのモデルを追従して動かすかという関連付けが行われています。
    例えば、布ようにヒラヒラと動く剛体Aに対して、実際にモデル上のスカートのどの部分を追従させて動かすのかを指定します。
    この範囲指定のことをウェイト設定と呼びます。(ボーンに対するウェイト設定と同じと考えていいかと思います・・・)

    モデルに対して範囲を指定していくので、「ウェイトを塗る」と表現することもあります・・^^
    ウェイトの範囲をアンカーと呼ばれるオブジェクトで囲んでいく「アンカー法」もあるのですが今回は割愛で・・・
    (・・個人的にはアンカー法の方がメタセコで慣れてるので好きです^^)


    より自然なスカートのヒラヒラを再現するために、剛体の数、位置、物質特性(後述)を設定していくことになります。。。


    ■剛体の物質特性
    剛体については、動かそうとしている物体の物質特性(重いのか軽いものなのか、羽のように空気抵抗を受け易いのか、よく弾むものか・・)を主に設定していきます。

    剛体が実際にどう動くか、どう回転するか・・などの動きの特性は後述する「ジョイント」と呼ばれるもので設定します。

    剛体の物質特性については、具体的には以下の5つのパラメーター(質量、移動減衰、回転減衰、反発力、摩擦力)を設定します。

    ■質量
    剛体の重さ(質量)となります。
    0.0 ~ 1.0の範囲で設定する。
    軽い 0.0 ← → 1.0 重く なります。
    剛体を上下方向に多段に繋げている場合は、先端側の剛体ほど軽く(小さい値)にしておいた方が良い(らしい)。
    先端の方が重いと、重さに引っ張られて下にモデルが伸びる場合がある(らしい)。(ジョイントの設定にもよりますが・^^;)
    また、剛体の大きさとも関わりがあり、質量が同じ値でも剛体の大きさによって挙動がかわる。
    同じ質量でも剛体が大きいと、動かすにはより大きな力が必要。
    (みくだん様のサイトでは、上記の特性により質量というよりは密度であると表現していた。)
    なので、決まった値は無く、自分のモデルの剛体の大きさ等に合わせて値を試して調整するしかない・T T

    ■移動減衰
    剛体が移動した時に、その動き(加速や慣性)を減衰(低減)させる値を設定する。
    通常は 0.0 ~ 1.0 の範囲で設定する。
    (一応1.0以上の値も設定できるが、設定すると剛体が動きに追従しなくなることもあるので普通はしない)
    普通に動く 0.0 ← → 1.0 動きが悪く(じわじわ動く)なる。
    1.0に近づくほど急激に影響が大きくなる(らしい)ので、減衰を効かせたい時は0.995とかにするといい(らしい)。
    でもサイトによっては減衰率(0~100%)(0.1で10%の減衰、0.5で50%の減衰)と考えてよい・・・ある。(どっちだ・・)
    スカートをふんわりさせたい時は1.0に近い値(0.995)辺りにするといい(らしい)。
    実際のところは、自分のモデルに値を入れてみて動きを確認するしかない・・T T
    (上記の重量設定によってもふんわり感は変わるので・・)

    ■回転減衰
    移動減衰は剛体が移動した際の減衰(率)だが、回転減衰は剛体が回転した際の減衰(率)となる。
    通常は 0.0 ~ 1.0 の範囲で設定する。
    普通に動く 0.0 ← → 1.0 動きが悪く(じわじわ動く)なる。
    この辺りの特性は移動減衰と同じなので、移動減衰と同じぐらいの値にしておけばいいじゃないかと思われる(たぶん)
     
    ■反発力
    剛体同士がぶつかった時の反発力(跳ね返り)の値となる。
    0.0 ~ 1.0の範囲で設定する。
    跳ね返らない 0.0 ← → 1.0 同じ場所まで跳ね返って戻ってくる
    スカートの剛体設定では常に0.0にしておくことが多い(みたい)

    ■摩擦力
    剛体同士が擦りあったときの摩擦力の値となる。
    通常は 0.0 ~ 1.0 の範囲で設定する。
    ツルツル 0.0 ← → 1.0 ゴムの表面みたいに動かなくなる
    摩擦力もスカートの剛体設定では常に0.0にしておくことが多い(です)。


    <ジョイントの設定>

    ■ジョイントとは

    剛体と剛体を繋げるための楔みたいなモノです。

     「接続元の剛体」 - 「ジョイント」 - 「接続先の剛体」が1セット。

    イメージとしては、接続元の剛体は固定されて、ジョイントで繋がれた「接続先の剛体」がぶら下がってプラプラしてる感じ。
    (文字だけだと分かりづらいですね・・すみません・・)
    このプラプラしてる動きを「ジョイント」の設定(「移動制限」、「回転制限」、ばね挙動の「移動・回転制限」)で制限していく(イメージ)。

    上記が1セットなので、1つの「ジョイント」に対して必ず「接続元の剛体」と「接続先の剛体」を設定する必要があります。
    よくある話ですが、剛体をジョイントで繋げていないとバラバラ死体になったり、頭が地面に落下したり、ミニスカートがロングスカートになったり、無限に広がっていったりします。
    ・・・・全部ありました。。。(白目)


    髪の毛やスカートでは、通常は剛体を多段に設置することが多いので、上記の1セットを数珠繋ぎにしていきます。

     「剛体1」-「ジョイントA」-「剛体2」-「ジョイントB」-「剛体3」

    文字なので横に書いてますが、実際には髪の毛やスカートに合わせて縦方向に繋げていきます。

    数珠繋ぎの場合は、基本的には1つ上の剛体が接続元の剛体となります。

     「剛体1(剛体2に対する接続元)」-「ジョイントA」-「剛体2(剛体3に対する接続元)」-「ジョイントB」-「剛体3」


    ■スカートの剛体、ジョイントの設置

    実際にスカートに対して、どのように剛体・ジョイントを設置していくかを考えてみます。。

    スカートで考えると、下半身ボーンに追従する剛体を一個用意して、スカート用の剛体をぶら下げてヒラヒラさせる・・・みたいなイメージになるかと思います。
    (現実の服で考えると、下半身剛体がベルトで、そのベルトにスカートの布(剛体)をぶら下げていく・・・・イメージでしょうか・・^^;?)


     「下半身の剛体」-「ジョイント」-「スカート剛体1」-「ジョイント」-「スカート剛体2」・・・・


    基本的には、スカートのモデルに対して剛体の段数を増やせば自然な動きに近づくので、ロングスカートでは剛体の段数が比較的多く、ミニスカートでは段数は比較的に少なくなるかと思います。

    人によって理想とするスカートの動きは違ってくるので、あくまで比較的にですが・・・^^;
    (さらに、モデルのポリゴン割りも絡んでくるので、単純に段数を多くすれば自然な動きになってくれるとも限らないのが難しいところです・・・T T;)


    この、縦方向の数珠繋ぎ

     「下半身の剛体」-「ジョイント」-「スカート剛体1」-「ジョイント」-「スカート剛体2」・・・・

    を1セットとし、スカートをぐるっと一周するように複数個配置していきます。


    今回のかよちんはスカート短い方なのですが、剛体とジョイントの数はけっこうな数となります・・・白目)


    ■スカート突き抜け問題

    縦方向の数珠繋ぎセットを並べただけでは、スカートから足が突き抜ける「突き抜け問題」が頻発します。

    数珠繋ぎセットは各々がバラバラにぶら下がっているだけなので、暖簾を押しのけるように隙間から足が飛び出る感じです。。。


    なので、この足の突き抜けを防ぐために、縦の数珠繋ぎセット同士を横から繋ぎ止める「横ジョイント」と呼ばれる方式が良く使われている(ようです)。

    数珠繋ぎ剛体に対して、横方向に隣り合っている剛体同士をさらにジョイントで繋いで固定します。。

    はい・・さらにジョイントの数が増えることになります・・・・・さらに白目)


    この横ジョイントを追加するとジョイントの数が洒落にならないくらい増大します。。単純にほぼ倍。。

    他の方のモデルを見て研究していた時は、膨大の数のジョイントが並んでいるのを見て・・・

      「マジか・・こんなにジョイント作っていくの無理っすよ・・・・」

    と、途方に暮れていました。。。


    実際にPMXエディタを使ってみると分かると思うのですが、剛体やらジョイントを綺麗に並べるのは、少しの数でも大変なのです。。

    整然と並んでいる剛体やらジョイントを見て

      「いや・・・これは人間技じゃねぇ・・・・」

    と思ってネット探してみたら、やはりありました。。。神ツールが・・・・!!!

    ※でも神ツールが開発されるまでは、ホントに何週間もかけて全て自力設定していたようです。。。。すごい。。)

    「曲面自動設定プラグイン」と呼ばれるツールです。


    ■曲面自動設定プラグイン

    神ツールです。(以上)

    何でもかんでも神神言うなと言われるご時勢ですが・・・これは正真正銘の神ツールです。
    それ以外の言葉が出てきません。

    指定したモデル(スカートや髪の毛)(主に円筒形に近いもの)に対して、指定した分割数で剛体、ジョイント、ボーン、ウェイトを自動で生成してくれます・・!!!!!!!!

    すごいです・・・・!!!

    初めて使った時はホンキで感動しました。

    MMDモデラーさんにとってはあまりにメジャーすぎて今さら感満載ですが、ど初心者の私は存在すら知りませんでした・><

    スカートの剛体調整でホンキで挫折しかけてた私には、本当に後光が差してるように見えたですよ・・・・・><

    まだ完全に調整できたわけではありませんが、このツールのおかげでなんとかスカートもそれっぽく調整できそうです。
    (・・理想のヒラヒラ・フワフワを再現するのはまだまだ調整が必要ですが・・・・)

    私が紹介しなくても色んな所で紹介され尽くしてると思いますが、一応サイト様もご紹介です。
      

    <ホームページ>
     梟の巣様:http://kurorat.blog.fc2.com/

    ※おまけ
     わたしもハマったのですが、PMD/PMXエディタ起動時に読み込みエラーとなる場合は、プラグインdll(PMDESurfaceEditor(0139) or (0217).dll)のプロパティから「ブロック解除」してみてください。

    使い方については、とっても詳しい説明が付属しているのでそちらを参照してください。。爆)
    いあ、説明がめんどいとか書いてる時間が無いとかそんなんjyん・・略)


    ■ジョイントのパラメータ設定

    神ツールのおかげで、剛体・ジョイントの設置まではほぼ自動でできるのですが、ジョイントのパラメーター設定については自力で行う必要があります。

    これはこれで思考錯誤の連続です・・・・両目白目)

    セオリーっぽいものもあるにはあるみたいですが、基本的には実際のジョイントにパラメーターを突っ込んでみて、色々試してみるしかないですね・・・

    セオリーっぽいもについて、一応調べた限りを箇条書きに・・

    ・多段ジョイントとしている場合は、ジョイントの移動量は接続元剛体(一個上の剛体)を基準とした移動量となる。
    ・ひとつ上の剛体が移動している場合は、その位置を基準した移動量となる。
    ・なので、多段剛体では最下段の剛体の移動量は最上段からの移動量が積み重なっていくことを頭に入れておく。

    ・ジョイントの移動・回転制限のx,y,zの軸の向きは、ジョイントのローカル軸に追従する。
    ・ジョイント自体を回転している場合は、ローカル軸も一緒に回転していることを頭に入れておく。
    神ツールで生成されたジョイントは剛体の向きに合わせて回転されている(ローカル軸も回転している)ので、x,y,z方向は全て同じ基準で設定できるので楽・・
    ・なので、同じ段は全て選択して一括で同じパラメーター値を設定できる・・やはり神だ・・・

    ・縦方向の数珠繋ぎジョイントは、回転制限のみ設定する(移動制限は全て0とする)(した方が良い場合が多い)
    ・特に+y方向に移動制限を設定するとスカートが下に伸びる(剛体の重量設定にもよるが)

    ・横ジョイントに対してのみ移動制限(x,y,zそれぞれ-0.5~0.5ぐらい?)を設定する。
    ・これを設定しないとフワフワ感が全くなくなくゴムみたいなスカートになる。

    ・横ジョイントの回転制限の値は縦方向より多めにしておいた方が良い(っぽい?)

    ・回転制限のy軸方向の動きはスカートではあまり意味が無いので、値は小さめ(もしくは0でも良い?)にしておいた方がよい。

    ・ばねの移動・回転制限は必要なら設定
    ・設定する際は大きめの値(50~200とか)で一気に変えた方が効果が分かり易い。
    ・しかし設定しすぎると、スカートがプルプル震える原因になるので控えめに・・・・

    ・スカートのプルプルがひどい場合は、スカート用の剛体を全て同じグループに設定して、お互いを非衝突グループに設定しておく。
    ・上記のばねの設定がの値が大きい場合は、非衝突にしても完全にプルプルが消えない場合がある。(というか消えない。)

    ・ミニスカートに多いが、足(モモ)の剛体がスカートの剛体を完全に突き抜けると、スカートが内側にめり込んで戻ってこれなくなる。
    ・その場合はスカート剛体の厚みを多くしておき、モモ剛体がスカート剛体より外側に行かないようにすれば防げる(かなり厚くすれば・・)
    ・でも剛体をあまり分厚くすると、スカートの自然な動きに影響する場合があるので最終手段とした方がよい・・・

    ・横ジョイントを使用したスカートの動きが不自然となる原因は、多段ジョイント+横ジョイントにした際に影響する剛体の動きの伝播が特殊であることが影響している(??????)。
    ・その場合は、現在のジョイントと同じ位置に一個ずつジョイントを追加、剛体の接続を真逆とすると伝播特性を打ち消しあって自然な動きとなる(らしい・・)(2重ジョイントと言うらしい・・・・)
    ・2重ジョイントの仕組み・・・・難しいので、詳細はPMXエディタの解説本を読んでください。。。投げ)

    ・ジョイント設定は移動・回転制限ばかりに目がいってしまいがちだが、接続先の剛体に対する位置もかなり重要。
    ・ジョイントの位置がおかしいといくら調整しても狙った動きにならない場合がある。

    ・パラメーター、接続位置をいくら調整してもどうしても狙った動きにならないときは、大人しくモデルのポリゴン割りやウェイト割りを見直した方が早い場合がある・・・白目)

      
    ■2重ジョイントの設定方法

    ただでさえ膨大な数のジョイントですが、さらに横ジョイントの数が倍になります。。
    まずは現在設置してある横ジョイントについて、同じ位置にもう1個ジョイントを複製していけばよいのですが、これも手作業で行っていくのはかなり面倒です。

    そこで、PMXエディタにあるパラメーター値のCSVファイル出力機能を利用して、一旦CSVファイルにして、出力したファイルをメモ帳なりExcelなりで編集した方が楽です。

    <設定手順>
    ・PMXエディタの「Joint」タブで横ジョイントを全て選択状態とする。
    ・右クリックして「CSVファイルへ保存」を選択し、CSVファイルへ保存する。
    ・CSVファイルをメモ帳とかExcelで開いて、名前の部分を変更する。
    ・元の名前から変わっていれば良いので、頭に"_"付けたりしておけばよい。
    ・ここで接続元と接続先の剛体を入れ替えておいてもいいです。
    ・再び、PMXエディタに戻り、右クリック「CSVファイルから追加/更新」を選択。
    ・ここで、先ほど修正したCSVファイルを指定する。
    ・「Joint」に"_"付きのジョイントが追加される。
    ・接続元の剛体と接続先の剛体を入れ替える(まだの場合)。


    今回のかよちんのスカートでは、横ジョイントと2重ジョイントまで設置したら最終的にこうなりましたww



     
    MMDの本や色々なサイト様で独学しただけなので、ここ間違ってるよ~とか、ここはこうした方が良いよ~みたいなアドバイスがありましたらドシドシお願いします・・

    最後に参考にさせて頂いたサイト様の紹介です。
    より正確で詳しい情報は以下のサイト様の説明を参考にして頂いた方が良いかと思います~

    <みくだん様>
    http://mikudan.blog120.fc2.com/blog-entry-317.html

    <MMDモデル物理セットアップ wiki>
    http://www10.atwiki.jp/mmdphysics/pages/16.html

    <書籍>
    「PさんのためのPMDエディタの本」

    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。