見出し画像

Blenderで編集したVRMアバターがPythonエラーで出力できない時の対応/ How to Resolve Python Errors When Exporting Edited VRM Avatars in Blender

追記:VRMアドオンの最新版2.32.2でエラーを回避できるようになりました


前の記事「VRMアバター着せ替えのための頭部移植」の捕捉になりますが、Blender4.2や4.3では、VRM1.0のアバター編集時、新たにメッシュを作成したり、メッシュオブジェクトをインポートで追加したりすると、Pythonエラーでエクスポートできなくなることがあります(下図:Fig1)。
The editing of VRM 1.0 avatars in Blender 4.2 and 4.3, especially when new meshes are created or additional mesh objects are imported, may lead to Python errors that hinder the export process (Fig. 1).

Fig.1
アドオンのVRMモデルのチェックではエラーが認められないものの、このようエラーメッセージを返されることがあります。メッセージの内容は知識がないので理解できていません
内容については、下記に示すテキストファイル」をダウンロードしてください

1. エラーの発生条件

VRM1.0であり、かつ、少なくともBlender4.2以上で起きるバクのようです。Blender3.6では最新アドオンを導入しても問題は起きません。VRM1.0のコンストレイントや新しいタイプのコライダーとは、どうも関係なさそうです。

このエラーは、様々な条件が重なった時に起きるようで、前の記事のVRMアバター間のHair、Faceの置き換え作業では、後から追加したArmatureに対し、結合処理を行わず、いきなり全削除した場合、出力時に上図(Fig.1)のようなエラーを返すことがわかっています。このケースでは、HairのArmatureモディファイアの設定において、対象オブジェクトを「Armature.001」から「Armature」に変更した時に発生するようです。ただし、同じように移されてきたFaceオブジェクトは上記操作を行っても、エラーは返されません。

実施環境は以下の通りです。
・Windows11
・Blender4.2.4
・VRM Add-on for Blender:v2.32.1(Blender 4.2以上用)

Hairの元々の頂点グループをすべて削除し、さらに、一緒についてきたArmatureモディファイアを一旦削除してもエラーは発生します。つまり、新たにウェイトペイントを行うため、新規にArmatureモディファイアを設定し、オブジェクトを「Armature」に設定したとたん、エラーは再発します(下図:Fig2)。

Fig.2
Hairについては、赤線のように、受け側のArmatureを指定すると、エラーでVRMファイルが出力できなくなります

2.対処法

以下、元のHairのスプリングボーンを使う予定がなく、追従してきたArmature全てを削除したい場合の対処法を示します。

それだけ行うと、出力時にエラーとなるので、Hairにある元の頂点グループを全削除した後、受け側のHeadボーンを親として、新たにウェイトペイントを全頂点に対して行います。こうすれば、エラーは返されず、VRMファイルを出力することができるようになります(たとえ1頂点でも元のウェイト情報が残っているとエラーになるようです)。

Fig.3
割り当てボタンの下にあるウェイト値は、1になっていますが、0以外の数値であれば、過去のウェイト情報は消えるようです。

手順は、上図(Fig.3)に示すように、ウェイトペイントモードで左上にある+「頂点で選択」を選び、頂点をAキーで全選択します。ナビゲーションツールバーにある「オブジェクトデータプロパティー」(緑の逆三角形のマーク)をクリックします。そして、3Dビューポート上で、Hairオブジェクトのどこか一部にウェイトをのせると、「頂点グループ」メニューに「ウェイトの割り当て」ボタンが現れ、それを押してデフォルトの1でウェイトを全頂点に割り当てます(Fig.3)。
一度この操作を行うと、以降、VRMファイルのエクスポートが可能となります。

もっとも、Hairの交換では、ウェイト情報もそのまま移動できないと、スキニングが大変面倒なことになるので、本質的な対象法は、前の記事に示したように、髪のスプリングボーンを受け側のアーマチュアに結合させることが一番効率的です。

まとめ

対症療法的な手段を紹介しましたが、VRM1.0での作業において、エクスポート時のPythonエラーは、今回の方法でだいたい解決するようです。結果からみると、外から持ち込んだメッシュのウェイト情報に関係したバグのように見えますが、編集モードで新たにメッシュを作成しただけでも発生することがあり、コードがわかる人に見てもらわないと、根本的な問題解決には至らないように思えます。

なお、今回のレポートは、2024年12月10現在で記述していますが、Blender、VRMアドオンのアップデートで、解決される可能性があります。

とにかく、面倒なことに遭遇したくないのであれば、Blender3.6の利用がおすすめです。

追記:VRMアドオンが更新され、最新版2.32.2ではエラーが回避されるようになりました。

いいなと思ったら応援しよう!