そういう、モデルなんです。

ビジネスモデル、3Dモデル、設計図、模型などの現状と動向を考察、関連書籍の紹介

VRM アバターの衣服の袖口がすぼみ、まばたくと顔や腕メッシュが飛ぶ(解決)

VRM アバター再生ソフト VMagicMirror と VRM Add-on for Blender の両方を最新版に更新した上で、VRM 1.0 仕様で VRM アバターを出力させるようにしたら、あっさり治った。最新バージョン万歳。

VRM アバターの衣服の袖口がすぼみ、まばたくと顔や腕メッシュが飛ぶ

Character Creator 4 (CC4)  で CC3 Base+ または ActorBUILD のモデルを作成し、Blender から VRM へ出力して VMagicMirror で表示したときに、以下のような障害が発生した。

  • 手首のメッシュがすぼまっている
  • またばきすると顔が飛び出したり、腕・手首が瞬間移動したりする

手首のメッシュがすぼまっている障害

衣服の袖口に手のひらボーンのウェイトがのっているので、手のひらのボーンをX軸中心に捻ると衣服が引っ張られてキャンディラッパー現象になる。

VMagicMirror がマウス・キーボードの位置付近に手首を表示させるさいに、腕~手首にかけてのジョイントチェーンに強めの捻りが入り、それに釣られて衣服の袖口のメッシュもねじり巻かれ、衣服の袖口がすぼまったものと推測した。

オブジェクトデータプロパティ > 頂点グループ のウェイトペイントを表示

よくよく確認すると、肩口の部分もキャンディラッパーになっていた。
つまり肩から手首にかけての腕周りジョイントチェーンが全て怪しい。

さらに念のため、先日作成した別のモデルの様子をあらためて確認してみた。このモデルには半袖シャツを着せているのだが、手首それ自体がすぼまっており、同じくキャンディラッパーになっていた。つまり衣服の袖口に限った話ではない。

手のひらの「IKをロック」をしてみたが効果なし(失敗)

手のひらの X軸回転を禁止するつもりで、手のひらの「IKをロック」X を有効にしてみたが効果は無かった。

手のひら以外のボーン全てに同じような IK の設定をすることも考えたが、面倒くさそうだったのでやらなかった。

VRM アバター再生ソフト VMagicMirror を最新版のバージョン 3.0.1 に更新(解決)

VMagicMirror v3.0.0 の変更ログ Change Log に

アバターの体格によっては、上腕~ひじの動きがかなり変になってしまう

という記述を見つけた。さらに V3.0.1 では

修正: 一部アバターで腕がねじれやすくなっていた問題を対策しました。

とあったので、これまでバージョン 2.0.11 を試用していたがアンインストールし、最新版のバージョン 3.0.1 に切り替えた。

するとキャンディラッパー現象が軽減されてほとんど目立たなくなった。

またばきすると顔や腕のメッシュが瞬間移動する障害

先日作成したモデルでは、髪・瞳・眼球・睫毛など半透明(アルファ成分)を含む身体部位のメッシュ・マテリアルの出力に関連した問題を概ね解決した。

tombi-aburage.hatenablog.jp

しかし、まばたき一つしないモデルでは面白くないので、ブレンドシェイププロキシを設定することにした。

Character Creator 4  では、まばたきのブレンドシェイプキーが予め用意されていて、新たに制作する必要がなく楽なので、まずは左眼まばたきと右目まばたきのブレンドシェイププロキシを割り当ててみた。

まばたきはするけど、まばたきと同時にメッシュが瞬間移動する

まばたきするたびに顔や腕メッシュが飛んで、肉体が爆散する。

メッシュを構成する頂点群の座標が直接移動しているのか、ボーンが動いており間接的に移動しているのかは見分けがつかないのだが、兎に角まばたきのタイミングで、顔面のメッシュや手首・腕あたりのメッシュが別の位置に瞬間移動しては、元の位置に戻ってくるという怪奇現象となっていた。

切り分けてみたところでは、

  • ブレンドシェイププロキシを1つも設定していない VRM アバターでは、この問題は発生しない
  • ブレンドシェイププロキシを1つでも設定すると、それがまばたきではないモーフの場合であっても、この問題は発生する

と分かった。

ブレンドシェイプキーが設定されているメッシュ(頂点)を編集すると、原理上ブレンドシェイプ(頂点モーフ)が破綻するのは先日の予習で理解していたので、もちろんメッシュは何もいじっていない。

また Blender 上では、Character Creator が標準で出力したブレンドシェイプキーの値をどのように操作しようと、何ら爆散・破綻は発生しない。

流石にこれは自分のせいではなくて、VRM 出力コンバータやVRM アバター再生ソフトの障害だろうと推測した。

VRM 出力コンバータ  VRM Add-on for Blender を最新版に更新する

だいぶ前のバージョンを使っていたので、とりあえず何も考えず最新版に更新した。
しかしそれだけでは解決しなかった。

VRM 1.0 で出力するように変更したら解決した(解決)

VRM アバター再生ソフト VMagicMirror と VRM Add-on for Blender  の両方を最新版に更新したが、それだけでは解決しなかった。

いろいろググっていると、VRM コンソーシアムの有識者たちが過去に VRM 仕様自体の改訂の議論をしており、VRM 1.0 が 2022/9下旬に策定されたと知った。

ついさっきまで VMagicMirror はバージョン 2.0.11 を試用しており、したがって VRM 0.x で VRM アバターを出力していたのだが、v3.0.1 は VRM 1.0 に対応したようなので、VRM Add-on for Blender からVRM 1.0 仕様で  VRM アバターを出力させるようにしたら、メッシュ爆散問題は解決した。

VRM : VRM 1.0 仕様での出力を指定

しかし新たに、瞳が表示されず白目を剥く問題が発生した

一難去ってまた一難。

VRM 0.0 の出力では、眼球周りは問題なく表示されていたのだが、VRM 1.0 での出力にすると、黒目(瞳) Cornea が出力されなくなった。

Blender では当然出力されているのだが、VMagicMirror で VRM アバターを表示させると白目の部分しか出力されず、黒目が表示されない。

黒目(瞳)のテクスチャか、半透明(アルファ)絡みの問題だと思い込んでしまったため、たっぷり 3日間ほどハマってしまった。

問題個所(眼球周り)以外のメッシュを非表示にして VRM アバターに出力しないように抑制した上で、VMagicMirror でカメラ位置をフリーにして目玉を裏から観察した後、思わず、うめいてしまった。「こいつ、後ろに目がついている!」

結論としては、

  • 瞳は出力(表示)されていたが、眼球が180度ひっくり返っていただけ
  • VRM 出力後に目玉のウラ側を確認しなかったため、気づくのが遅れた

というお粗末な話だった。思い込みというのは恐ろしい...

眼球の反転の治し方(解決)

Character Creator 4 のフェイシャルボーン(顔面リグ)は、眼球(視線)ボーンの方向が VRM の視線ボーンと 180度正反対であり後ろ前になっている。その影響で目玉メッシュが釣られて裏返ったように思えた。

対策としては、Character Creator 4 のフェイシャルボーン(顔面リグ)は、VRM アバターのスケルトンリグの一部としては使わない(割り当てない)ようにすればよい。

VMagicMirror : 目玉だけ出力して動作確認することもできる
  • Character Creator 4 のフェイシャルボーン(顔面リグ)にもともと含まれている眼球(視線)ボーン CC_Base_L/R_Eye をスケルトンアニメーションに使用することは金輪際止める方針とする
    頭部 Head より上のボーンは標準化されておらず、CC4 如きが標準というわけでもないので、VRM 仕様のほうに合わせにいく
  • 眼球の暗がり EyeOcculusion のメッシュは非表示にする
    これを VRM に出力すると、白目・瞳の出力が隠されてしまうため、瞳どころか白目すら出力されない
  • これらの代わりに、左右の眼球ボーンを Blender で新しく追加する
    編集 Edit モードでアーマチュアを変更。顔面ボーン CC_Base_FacialBone から押し出し [e] で、左右の視線ボーンを別に作り、VRM モデルが想定する視線ボーンのあるべき位置・方向に配置する

     

    CC_Base_FacialBone 配下に左右の目玉ボーンを自分で追加する

     

  • いま作った左右の視線ボーンに、目玉メッシュが連動するようにする
    • 目玉メッシュに対して、先ほど作った視線ボーンと全く同じ名前の頂点グループを定義する
    • 左目の頂点グループには左目の頂点全て、右目の頂点グループには右目の頂点全てを割り当てる
  • VRMオプションボーンに、いま作った左右の視線ボーンを割り当てる
    「ボーンの自動割り当て」を行うと Eye の部分には  CC_Base_L/R_Eye が自動で入るのだが、これを自作の視線ボーンに差し替える*1

    VRM : VRMオプションボーン - Eye への割り当て

試行錯誤の結果、概ねこのような措置で、目玉反転が治った。

VMagicMirror での VRM ロード中エラーは無視してよい

VMagicMirror を最新バージョンにしたところ、VRM 1.0 仕様で出力できるようになって幾つかのトラブルが解消したが、そのかわりに毎回、

VRMのロード中にエラーが発生しました
繰り返しエラーが発生(以下略)

というエラーが表示されるようになった。

VMagicMirror : VRM のロード中にエラーが発生しました

VRM ライセンスの画面が表示されなくなっただけのようで、特に副作用はなさそうなので放置とする。

後日、最新版に更新したところ、この障害も修正されていた。作者さん早い。

*1:この設定欄の動作は怪しい部分があり、入力値を変更すると、たまに片目もしくは両目が全く何も表示されない事象となることがある。視線ボーンから作り直せば治ったりするが不安定だった