【MMD】グラデーション塗りした部分の一部が飛び出てしまうときの対処法【PMXE】

MMD


こんにちは、ガタガタです。

先日、MMDモデルの髪の動きをなめらかにしたいと思い、PMXEditorで毛束に新規ボーンと剛体を設置する試みをしました。ウエイトにグラデーションをつけ、MMDでモデルを表示してみたところ……


このようになりました。トゲーッ!!

調べてみたところ、毛束のウエイトの一部が「全ての親」ボーンに乗ってしまったため、こんな現象が起こるようです。

そこで「全ての親」ウエイトの毛束の部分をすべて0にし、再度毛束にウエイトをグラデーションで乗せてみたのですが、何度繰り返しても余分なウエイトが「全ての親」に移行してしまい、同じことの繰り返しです。

私の検索力と知識が足りなかったせいですが、この現象を解決するのにたいそう時間をかけてしまったので、同じ現象に苦しんでいる方が少しでも早く解決法にたどり着けるよう、ここに書き留めておきます。

解決方法

手順1:揺らしたい毛束の頂点を選択する
手順2:「頭ボーン」に100%ウエイトを塗る
手順3:「髪ボーン」にウエイトをグラデーションで塗る

以上で解決です。おめでとう!

なぜ?

そもそもウエイトとは、「3Dモデルのこの頂点は、このボーンと関係があるんですよ」という関連性を示すために塗るものです。

毛束に新しく「髪ボーン」を設置し、毛束の頂点のウエイトを例えば髪ボーンに75%で塗ったとしましょう。すると、余った25%のウエイトは「あれ?じゃあ、残った僕たちはどこに関連付けられるの?」と路頭に迷うことになります。

今回の場合、この25%の迷えるウエイトたちが、苦肉の策として「全ての親」ボーンに逃げ込み、このような事態になったのです。

つまり、「すべての頂点について、ウエイトが合計100%にならなければいけないのに、余ったウエイトの逃げ場が指定されていなかった」ことが今回の問題だったのです。

そこで、

あらかじめ「毛束に入れた髪ボーンの、直接の親である頭ボーン」に、いったん100%でウエイトを塗る
次に、髪ボーンにグラデーションでウエイトを塗る

これで余ったウエイトたちは頭ボーンに残るようになり、毛束は「基本的には頭ボーンに連動して動くが、髪ボーンが動いたときはそれに連動する」という扱いになります。

問題の状態では、余ったウエイトが「全ての親」ボーンに乗っていたため、どれだけモデルを動かしても頂点が微動だにしなかったのですね。

以上です。MMDモデル作成の助けになれば幸いです。