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

沢山の広告を頂いたので感謝の替わりといってはなんですが【sm32963789】
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

沢山の広告を頂いたので感謝の替わりといってはなんですが【sm32963789】

2018-03-31 04:48
  • 6
【MikuMikuDance】綺麗なドレープを描くロングスカートを物理演算で作ってみた
sm32963789
でのドレープを描く為の工夫点をいくつか解説させてください。

まず外側の剛体(ボーン)は円周方向64分割、縦方向10段

こんな感じ。一番端の床と接地する剛体は、転がりやすくするために正方形の形状。カプセルにすると逆に転がりやすくなりすぎて不自然になっちゃうんだよね。

そして次は、内側の剛体。

こっちは円周16分割、縦5段と普通のスカート程度ですね。

この2つの剛体の間に全部で5枚メッシュが入ります。



不透明のスカート本体    3層のインナーレース   2層のアウターレース

これをBDEF4ボリュームスキニング(勝手に命名)する。

こんな感じね。

あ、スクリーンショット(SS)はPMXeのpmxViewのキャプチャです。毎度ながら極北Pには感謝です。
ボーンを動かすとこんな感じに変形します。

最内側は100%内側のボーンの影響下で、最外側は同じく100%外側のボーンの影響下ですね。
しかしそれでは不透明メッシュを貫通する心配がありますので、ボーンは不透明メッシュに沿って入れます。

つまり剛体は不透明メッシュの位置に入るけどウエイトは100%じゃないよって事で。
もっともこれでも貫通してしまう恐れはありますが、内外の剛体の厚みでカバーしてるという所でしょうか。

とボーンと剛体の構造はこんな感じ。

私の作業手順はを示すと

①曲面プラグインで内側メッシュにボーン剛体ジョイントを入れる。
②ボーン剛体ジョイントを自分が適切と思う位置に移動する。
④C#スクリプトでBDEF2で塗り直す。(自分で作った)
⑤C#スクリプトで剛体ジョイントを移動する。
⑥Toro氏のジョイント剛体ローカル移動回転プラグインで調整する。
⑦裏(逆)ジョイントをC#スクリプトで入れる。(これはプラグインが有るみたい)
⑧内側だけのモデルを剛体ジョイントを調整しながら踊らせてみる。
⑨納得いくまで②から繰り返す。
⑨.① 時々うっとりループして日が暮れる┐(´д`)┌ヤレヤレ
⑩内側のウエイト情報をウエイト保存プラグインで保存しておく。
⑪曲面プラグインで外側メッシュにボーン剛体ジョイントを入れる。
⑫それを自分が適切と思う位置に移動し、ウエイト塗って剛体ジョイント移動して調整する。
⑬裏ジョイント入れて、最内と最外のメッシュだけ見える状態のモデルで踊らせてみる。
⑭剛体とジョイントの諸元を弄り踊らせてみる
⑮ 適当に⑫から繰り返す。(当たりを付ける程度。)
⑯外側のウエイト情報をウエイト保存プラグインで保存しておく。
⑰そして保存して置いた内側と外側のウエイト情報をTW_LoadWeightMerge(※)というスクリプトで2つのBDEF2ウエイト情報を1つのBDEF4に合成。
⑱剛体とジョイントの諸元を色々弄り踊らせてみる。
⑲納得いくまで⑫から繰り返す。
⑲.①やっぱりうっとりループで日が暮れる(ノ`Д´)ノ彡┻━┻
⑳完成

※一般公開されていたTW_LoadWeightをPMX用に改造し更にマージできるようにしたもの。任意のパーセントで合成できるがハードコーディングのためなど、いろいろ使い勝手に難あり。

まあ、オタク【数寄者】じゃないとできないかもなぁと我ながらしみじみ。
(あ、数寄者は原意でつかっています。現代の茶道の方々の意味ではありませんのであしからず。)

スクリプトは自分用につくったものなので、一般向けにできるほどの物ではないので一般公開はしませんが、C#が理解できる方になら差し上げますので、ご一報ください。
といっても、こういう仕様ですと言えば、作れちゃう程度の物です。


ああ、あとドレープを出したいのに出ないと同じ悩みを抱えておられる同朋に。
コツは外周の多めの分割数と可能な限り縮まない横ジョイントの設定にあります。

ジョイント、Y軸回転制限だけ±90なのを忘れずにね。
プラグインで入れた横ジョイント、ドレープを出す場合X軸角とY軸角は±90を超えるので、忘れずに90度回して。


あと剛体層上部は二層の剛体がどうしても衝突しまくりなので、非衝突の方向性で。
また貫通防止用のジョイントを別途用意、私の方法は2剛体の距離の範囲を限定するやり方。剛体Aの位置にジョイントを置いて、1つの軸(例えばZ軸)を他方の剛体に向ければいいから難しい話ではないよ。
それと縦方向のジョイントの設定で、Y軸回転は可能な限り無し(0-0)とすることかな。ドレープを描きたい一番上のジョイントで(-45-45)とかの設定にしておいて、床に触れる剛体までは(0-0)として、上までY軸回転を伝える感じにします。これで下のねじれが上まで伝わってドレープになる感じです。(なので裏ジョイントは必須)

そして布地が曲がり込んだ時にめり込まない工夫を。
私の方法は、こんな感じ。


剛体を4つのグループに分けて、自分自身のグループは衝突するようにし、他の3つのグループとは衝突しないように、且つ上下段が衝突しないようにずらす。

とてもじゃないけど人力でできることじゃないよね、
針金さんのsm11842800を思い出す。面倒な処理ほどコンピュータにやらせようとするプログラマーの性(さが)、まずはスクリプトの開発から・・・・。

では、最後に3200のジョイントを!!

裏ジョイントがあるので見た目の倍あります。

そしてレース部分のジョイントは剛体の先っぽにあるのがちょっとした工夫です。



それではMMD神のご加護がありますように(笑
良いMMDライフを


広告
×
神はアナタやw
39ヶ月前
×
>>1
南無~(^人^)
39ヶ月前
×
実際に動かしてみたいけど真似出来ませんわ・・・尊敬
39ヶ月前
×
温かいコメント有難うございます。
39ヶ月前
×
>感謝の替わりといってはなんですが

所謂、御恩と奉公、ってヤツですね!
私は広告した一人ではありませんしこの記事の恩恵も受けられそうにないですが(汗)、主から頂いたモデルならござるますのでこれから戦地に向かわねばならぬでござるな!
いざ鎌倉!!
(笑)
39ヶ月前
×
有難うございます。是非とも本懐をお遂げください(笑
39ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。