【Blender2.9】エラー解決方法:ボーンヒートウェイトエラーを解決!

Blender

こんにちは!

Blenderでの3DCG制作を勉強中のUEDAです。

今回は〔自動のウエイトで〕で発生するボーンヒートウエイトエラーについてまとめていきます。

このエラーをクリアしないとfbx出力できないので、Unityでvrm出力することができません。

〔VRChat〕や〔3tene〕でモデルを使うためにはこれを解決することが重要です。

あまり発生しないようなことを見かけましたが、VRoidモデルの改変ではよくなりました。

もちろんそれ以外でも出ることはあるので、お役に立てれば嬉しいです。

ボーンヒートウエイトエラーとは?

〔自動ウエイトで〕を使用すると「ボーンヒートウェイト:一つ以上のボーンで解決に失敗しました」と、このようなテキストボックスが画面の右下に出てきます。

これはアーマチュアとモデルを〔自動のウエイトで〕でペアレント化した際に、何かしらの原因で上手くペアレント化できていない時に発生します。

画面上ではペアレント化が上手くいっているように見えますが、ボーンを動かしてみるとおかしくなっている部分が出てきます。

後々ウエイト付けやvrmにする場合のFBX出力でのエラーの原因になります。

FBX出力の際には、こんな長文のエラーに悩まされました。

この文の意味は全く分かりませんが、ボーンヒートエラーをなくせばFBX出力も問題なくできています。

原因箇所の特定

〔自動のウエイトで〕を使うにあたって、作ったオブジェクトが統合しているかと思います。

このままではエラーが起きている部分が分からないので、オブジェクトを細かくして原因を突き止めていきましょう。

この時にモデルを複製して、エラーの原因を探る用を作りましょう。

マテリアルごとに分離

オブジェクトを分離する方法として、〔マテリアルで〕というのがボタン一つで簡単に分離できるのでオススメです。

編集モードで分離したいオブジェクトを全選択して、ショートカットキーの”P”で〔マテリアルで〕を実行します。

これでマテリアル毎にオブジェクトを分離することができました。

ペアレント化

続いては分離したオブジェクト毎に使用するアーマチュアとペアレント化しましょう。

1つずつやっていくと、先ほどとは違い〔自動ウエイトで〕が成功するオブジェクトが出てきます。

そのオブジェクトはエラーの原因でなく、最初と同じようにエラーが出たオブジェクトに原因があります。

今回使用しているモデルでは靴のみにエラーが出たので原因はこのオブジェクト内にあるようです。

シームで分離

今回の場合はUV展開させていたので、シームごとに分離させると更に詳細に原因の箇所を突き止めることができます。(リンク選択/L)

エラー原因を解決

複数オブジェクトからなるモデルの中からエラーの原因となっている箇所を見つけることができました。

エラーの原因としては以下のものが上げられようですね。

原因実行方法
メッシュの重なり・メッシュを移動させて重ならないようにする
非多様体・〔特徴で全選択〕→〔Non Mainfold〕で選択される箇所の削除

・閉じていないメッシュや不連続なメッシュなど

重複頂点・全選択からマージ(M)を実行
アーマチュアの拡縮を適用・アーマチュアに適用(Ctrl + A)を実行
メッシュのスムージング・編集モードで〔頂点〕→〔頂点をスムーズに〕で実行

・形状が変わるので注意

法線の再計算・面の向きがすべて青になるように変更

・法線の再計算(Shift+N)かノーマル(Alt + N)

以下のサイトを参考に列挙してみました。

おもちゃラボ 【Blender】ボーンヒートウェイトのエラーが出たときに試す5つの解決策

dskjal ボーンヒートウェイト:一つ以上のボーンで解決に失敗しました(failed to find solution for one or more bones)の原因

重複頂点、法線の再計算なんかはモデリング中に気を付けつつ作業する癖をつけるとよいですね。

vrmとか関係なしに通常のモデリングでも気にするべき範囲かと思います。

メッシュの重なりに関しては髪を頭に刺して作るので重なりはあまり関係ないように感じます。

ですがメッシュを移動させて解消したという記事も見たので、なるだけならないように調整しましょう。

これでも無理!

先ほどエラーの原因があるオブジェクトとして靴をシームでも分離しました。

ですがシームで分離して、それぞれのオブジェクトではエラーは発生しなくなりました。

なのでつなぎ目の部分に異常があるのだという推測もむなしく、紹介した方法を全部試したのにエラーが直らないので非常に遺憾です。

靴の足を入れる部分が閉じていないのでそこが原因と疑いましたが関係ありませんでした。

そこで試した方法として、〔By Distance〕を使ってより近い距離同士の頂点を”0.0007m”でマージするとエラーが出なくなりました。

若干形状が変わりましたが、気にならない程度でした。

「パーツ毎の場合にエラーが起きず、つなぎ目にマージとスムージングをかけてもダメ、全部くっつけた状態でマージの距離を変更したらエラーが出なくなる。」

これの意味が結局分かりませんでした。でも出来たので良しとしましょう。

まとめ

今回の靴の場合は結果的にエラーをクリアすることができました。

理屈は分かりませんでしたが、エラー箇所を見つけてしまえば今回の方法をローラー作戦でどうにかなるのかなと思います。

他の方法でエラーを解決したという方がいたらぜひ教えてください。

コメント

タイトルとURLをコピーしました