白チャイカ作った時にヤバイ級トラブルインシデントに遭遇、今後のインストラクションとして記す次第。

 

 

落ちるンです

白チャイカ公開後、白チャイカをMMDに読み込んだ後にモーションを再生すると強制終了するというタレコミを頂いて、わりと致命的な不具合にびびりながら動作テスト。

そしたらもう、慈悲は無いとばかりに落ちたわ。強制終了ね。胃が痛くなったわ。

余談:
ウェイトミスとか、モーフが抜けとか、そんなチャチなもんじゃあ断じてねえ。もっと恐ろしいものの片鱗を味わったぜ…

 

普段はMikuMikuMovingの方を使っててて、テストもそっちメインなの。MikuMikuDanceは読み込みしてちゃんと表示されるかくらいしか確認してなかったのが問題の発見を遅らせてしまった要因ね。

 

 

 

原因

今回の問題の原因は、剛体のサイズ指定にマイナス値が入っていたというものだったわ。

PmxEditor や MikuMikuMoving、それと MikuMikuDance でも剛体表示した際はちゃんと表示されてるし、PmxEditor でも「PMXデータの状態検証」でも警告は出てなかった(検証対象に含まれていなかった)から、うっかり見落とすのも仕方ないんじゃね? と。

 

何かの拍子にマイナス値を入力してしまって、そのまま剛体の調整が終わってしまったら、多分、二度と注目する事の無いパラメータだから、そういうヤバイ事例があるって事を意識しないと今後も同じミスをしてしまいそうだわね。

 

 

症状

サイズ指定にマイナス値が入っていた場合、先に述べたようにMMDが強制終了するんだけど、これは物理演算をしている時に起こるみたいね。

MMDの物理をOFFにすると強制終了しなくなるわ。

ちなみに、モーション再生中に強制終了するのが見つかった時の再現条件だったけど、実際は再生中以外でも物理演算していれば強制終了することを検証中に何度か確認しているわ。

強制終了のタイミングは、マイナス値の入っている剛体が他の剛体に衝突した時のようなんだけど、簡易なモデルを作ったテストでは再現できなかったのね。

単純に、マイナス値が入っていれば必ず落ちるというわけでもなさそう。

 

白チャイカモデルでも検証のために剛体やジョイントを減らしたりしていたら強制終了のタイミングがまばらになったり、なかなか強制終了しなくなったりしたから、実際にはマイナス値が入っているというだけでは不具合は起きないのかもしれないわね。

ただ、マイナス値は物理演算の仕様としては不適切な値だから、不具合が出なくてもマイナス値を設定してしまわないように注意が必要ね。

いつ問題が出てくるかわからないし、出てからだと原因を探すのも一苦労よ。

 

 

不具合の特定方法

以下の条件に当てはまったら、マイナス値が入っている可能性があるわ。

  1. 物理演算対応のモデルを使ってモーションを再生している時にMMDが強制終了する事がある。
  2. MMDのメニュー「物理演算」→「演算しない」をONにしてモーションを再生した場合は強制終了しない。
    ※10分以上のループ再生を推奨

 

 

 

おまけ:当時の様子(一部)

 

タレコミいただいて確認。強制終了コワイ!

とりあえずpmxファイルの中身を再確認して、余計な設定とかもろもろ削除。MMDは余計な事すると不機嫌になるのです。

要素ごとの検証で、モーフとか剛体とか削って動作確認してた時。

VisualStudioのデバッガー使えば何かわかるんじゃね? と。
とりあえず、プログラム内の同じ場所で発生するのはわかった。

デバッグ中のチャメシ・インシデント。地味につらい。

問題が発生する状況をシンプルにすると原因を特定しやすくなるんデス。

だいぶ減らした剛体とジョイントの中身を改めて確認した時、それは見つかったのです。(でも画像は上半身)

最終的に、2カ所はいってた。まさかのマイナス値である。

 


↓ランキングに参加してます↓
ブログランキング・にほんブログ村へ
人気ブログランキングへ