Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

バグ報告: VRM出力時に軸向きが変わる #671

Open
tabibito18 opened this issue Dec 6, 2024 · 35 comments
Open

バグ報告: VRM出力時に軸向きが変わる #671

tabibito18 opened this issue Dec 6, 2024 · 35 comments

Comments

@tabibito18
Copy link

バグについて

VRM1.0のconstraintを試しています
Blender上で組み立てて VRM出力すると ボーンがよじれるので
困っています 操作ミスなら注意点を探しています
プラグインの問題なら
VRM出力時にBlender側の骨の軸向きを加工するということはあるのでしょうか

バグの再現方法

症状の再現方法-------------------
データは別途送ります
 Blender上では拘束が機能しています
 humanの左前腕を曲げると 翼が開閉する仕組みです
 翼は平面を維持しています
ところが VRM出力すると 
 出力されたVRMファイルをunityで見ても翼がよじれてしまっています
 翼が平面ではなくガタガタになってしまいます
 Blender側のデータもVRM出力時に何らかの変化をうけたらしく
 翼がよじれてしまっています
poseをリセットすると解消します
 例えば 骨[wing2_L]を ポーズ>トランスフォーマーをクリア するとねじれが解消します
 VRM出力前にもどります
プラグインがVRM出力時にBlender側の骨の軸向きを加工するということはあるのでしょうか
ちなみに この件でアドカレで記事を書いています
https://tabibito18.hateblo.jp/entry/2024/12/02/210537
Unity上でVRM拘束を組み立てて、すでに羽ばたく翼は完成しています
続いて、blenderを使った工程を検証しています

期待する動作

 Blenderで動かす分には問題が起きていませんが 映像目的ではなくVR利用なので
 VRM出力する時点で勝手に骨がよじれないでほしいわけです
 操作ミスでしょうか 骨の組立に問題があるのでしょうか
 今回のトラブルの推測として「複数の階層にわたって複雑に拘束を組み立てると
 未知のトラブルにひっかかる」ことがありそうと予想しています
 もしoptionやら ちょっとした改善で解消する手立てがあれば教えていただきたい
 どういう条件の場合に VRM exporterの動作が怪しくなるか わかると助かります

スクリーンショット

何か参考になりそうなスクショがあれば添付してください。
キャプチャ1206_A04

PC環境情報

Windows 10 blender3.6 Addon Version 2.31.0

なにか他に書いておきたいことはこちらへ

@tabibito18 tabibito18 changed the title バグ報告: バグ報告: VRM出力時に軸向きが変わる Dec 6, 2024
@saturday06
Copy link
Owner

報告ありがとうございます!

VRM出力時に、アーマチュアを一度Tポーズ化し、出力完了時に元に戻す処理をしているのですが、それが暴走している可能性があります。調査いたします

@saturday06
Copy link
Owner

バグ再現データを受領しました。ありがとうございます!

@saturday06 saturday06 added bug Something isn't working and removed under investigation labels Dec 7, 2024
@saturday06
Copy link
Owner

先ほどリリースした最新版2.32.1で修正しました。確認お願いします!

@tabibito18
Copy link
Author

操作ミスや注意文の見逃しやoptionの問題ではなく
VRM_exporterのバグであったと認定されたと受け取りました
さっそくの対応ありがとうございます
さて、(v2.32.1)で症状を確認してみました
BlenderからVRM出力後にBlenderでは 症状がなくなり解消したかにみえますが
Cluster上では 同じ症状が続いています
Unity上でも  同じ症状が続いています 羽根がよじれています
そちらではどうでしょうか 確認お願いします

@saturday06
Copy link
Owner

saturday06 commented Dec 7, 2024

私の手元では、VRMエクスポート結果は正しくなっているように見えます。下記は、左のBlenderからエクスポートした結果を右のUnityで表示しているスクショです。

  • 左がBlender 3.6.18とVRM Add-on 2.32.1の組み合わせです。
  • 右がUnity 6000.3.29f1とUniVRM 0.128.0の組み合わせです。

細かい変化を見落としている可能性があると感じるので、その部分の指摘をいただければと思います。

また、Cluster上で動作確認もしてみたいため、転送いただいたデータから出力をしたVRMファイルを、Clusterへアップロードする許可もいただければと思います。許可を頂けた場合、アップロードごは動作確認のみの用途に使い、外部には非公開になるように気をつけます。

@tabibito18
Copy link
Author

tabibito18 commented Dec 7, 2024

「Clusterへアップロードする許可」
了解です Clusterでの動作点検してみてください

 野暮用をすませてから こちらも再点検してみます

@saturday06
Copy link
Owner

ありがとうございます!

@tabibito18
Copy link
Author

再度点検しましたが 解消していません
 環境は 以下の通り
Windows 10 blender3.6.13 Addon Version 2.32.1
追記 Unity2022.3.22.f1   UNIVRM0.128

どういうバグだったのでしょうか
推測どおりT-poseの問題だったのでしょうか
「VRM出力時に、アーマチュアを一度Tポーズ化し、出力完了時に元に戻す処理をしているのですが、
それが暴走している可能性があります。」
これだと 出力データは加工されたものが出力されていることになりますね
VRM本家にもT-poseボタンがあります 「手動でT-poseにしてもよい」とも書いています
必須でなければ optionにして選択可能にするという手もあると思います
当方はプラグインを作る能力も知識もないユーザーなので 聞き流してもらってかまいませんが
後学のために 解説いただけるとありがたいです

@tabibito18
Copy link
Author

手順に違いがあるのでしょうか
「高度なオプションを有効にする」は使っていません
特にエラーはでていません 図参照
キャプチャ1207_A12B

vrm出力するときは左腕は伸ばしています 手動でTposeにしています

@saturday06
Copy link
Owner

saturday06 commented Dec 7, 2024

ご質問にお答えします

どういうバグだったのでしょうか
推測どおりT-poseの問題だったのでしょうか

エクスポート時に、現在のポーズを保存してエクスポート後に復元する処理を実行しています。エクスポート後に復元する際に、PoseBone.matrixを復元していましたが、これをPoseBone.matrix_basis/PoseBone.location/PoseBone.rotation_mode/PoseBone.rotation_quaternion/PoseBone.rotation_euler/PoseBone.rotation_axis_angleを復元する方式に変更したところ、私の手元では正常にエクスポートされるようになりました。

しかし、tabibito18さんの手元ではバグが修正されていいないとのことなので

どういうバグだったのでしょうか

というご質問はまだ正確にお答えできない状況です。

「VRM出力時に、アーマチュアを一度Tポーズ化し、出力完了時に元に戻す処理をしているのですが、
それが暴走している可能性があります。」
これだと 出力データは加工されたものが出力されていることになりますね
VRM本家にもT-poseボタンがあります 「手動でT-poseにしてもよい」とも書いています
必須でなければ optionにして選択可能にするという手もあると思います
当方はプラグインを作る能力も知識もないユーザーなので 聞き流してもらってかまいませんが
後学のために 解説いただけるとありがたいです

tabibito18さんに転送いただいた.blendファイルでは、手動でT-poseにする設定になっていました。

そのため「一度ポーズを保存し」「その後ポーズを変更は行わず」「エクスポート処理を行い」「ポーズを復元する処理を実行」という処理を行っています。最後の工程の「ポーズを復元する処理を実行」が暴走しているという見立てでしたが、こちらを改善してもtabibito18さんのバグは修正されていないとのことなので、これが原因かはわかりません。

tabibito18さんのご提案では、Tポーズを手動設定するなら「ポーズを復元する処理を実行」は不要ではないかというものでした。一見無駄に思えるこの処理を実行する理由は、その処理のコストが小さいのと、別の設定でTポーズを設定した場合と同じソースコードを共有することで、ソースコードをシンプルに保つためです。

また、仮にtabibito18さんのご提案を採用した場合、tabibito18さんのお手元ではこのバグは発生しなかったかもしれませんが、例えば「Tポーズ自動設定」を設定した状態でtabibito18さんと同様のコンストレイントを設定している方がいたとしたら結局同じバグが発生してしまううえ、発生条件が絞られるので調査に時間がかかってしまうというのはあります。

tabibito18さんのお手元でバグが発生してしまったのは非常にお手数をおかけしてしまって申し訳ないのですが、アドオンの開発の全体的な効率でいえば、バグの発見速度が速まるという利点はありました。

ただ、本件に関しては、tabibito18さんのお手元でバグが修正されておらず、本当に「ポーズを復元する処理を実行」部分がバグの原因だったかは不明のままなので、ここまで書いた内容はまだ不正確かもしれないです。

@saturday06
Copy link
Owner

ご指定のバージョンを全て合わせてエクスポートし、Unityで読ませましたが正常にエクスポートされているように見えます

  • Windows 10
  • Blender 3.6.13
  • VRM Add-on Version 2.32.1
  • Unity 2022.3.22.f1
  • UniVRM 0.128.0

動画を撮影しましたので、何か私のほうで見落としがある場合はご指摘ください。また、バグが再現し続ける場合は、同様に動画を撮影してアップロードいただけると調査が楽になるので助かります。

out.mp4

@tabibito18
Copy link
Author

お手間をとらせて申し訳ありません
動画を見てきづいたのですが こちらとそちらの手順の違いを発見しました
blenderデータを送り直し こちらの手順動画を録画しておくることにします
[vrm出力するときは左腕は伸ばしています 手動でTposeにしています]
ここが本質的な違いかどうかわかりませんが こちらの手順を理解してもらったほうが
よいかと思います

@tabibito18
Copy link
Author

トラブルデータ VRM出力直前の状態をtwitterで送ります
前回のデータと本質的にはおなじです
VRM出力直前の状態は 左腕は伸ばしています 翼はとじています
わかりやすくするために前回は 左腕を曲げて翼をみせていたのですが
それがかえって誤解をうんでいたかもしれません

@tabibito18
Copy link
Author

@tabibito18
Copy link
Author

tabibito18 commented Dec 8, 2024

動画の説明です、Blenderで VRM出力時はヒトはTposeです 翼は閉じています
unityで読み込むと ヒトはTposeです 翼は閉じています
左腕もまっすぐ伸びています
拘束のし掛けの確認をしています playgameして 左前腕を曲げると
折りたたんでいた翼が開きます
ちなみに右前腕ではばたきます

@tabibito18
Copy link
Author

この動画では まだ問題が解消していません
羽根がよじれています

@tabibito18
Copy link
Author

Clusterにログインした画面も乗せておきます
通常の立ち姿では前腕がわずかに10度ほどまがっているので wing_barという長い棒が
直線にならずにわずかに曲がっています
左腕を操作して90度ほど曲げると wing_barがまがって 翼が広がります
キャプチャ1207_A14B

この図ではまだよじれたままです

@tabibito18
Copy link
Author

健康上の理由で脚を動かさないといけないので出かけます
他に、こちらで何か調べることがあれば言ってください

@tabibito18
Copy link
Author

添付された図の意味を考えていたところ
右側からサイドバーのVRMタブの
Humanoid>VRM T-pose でT-poseを指定できるという
機能があるのでしょうか
レスト位置で試してみたところ 結果が変わってきました
(tutorialやらどこかに書いていたとしたら
 勉強不足で申し訳ありませんでした)
確認中です

@tabibito18
Copy link
Author

Humanoidが腕をまげていようと伸ばしていようと
Humanoid>VRM T-pose>レスト位置 では同じ結果になるようです
そして よじれが起きていません  
Cluster上でも よじれが起きていません
解決したのでしょうか 確認中です

@saturday06
Copy link
Owner

動画でアップロードした通り、私の環境では「レスト位置」への変更を行わなくても、Tポーズ以外は正しいエクスポートができていたと思います。

アドオンのインストール時に何らかの原因でアドオンのデータが壊れた可能性がある気がしてきました。お手数ですが、次の手順でアドオンの再インストール・Blenderの再起動をお願いできますでしょうか?

  1. VRMアドオンを削除
  2. Blenderを再起動
  3. VRMアドオンをインストール
  4. VRMアドオンのバージョンが2.32.1になっていることを確認する
  5. Blenderを再起動
  6. VRMエクスポートをする

@tabibito18
Copy link
Author

アドオンを再インストールしてみました
そして 動画のとおりになります
なので アドオンのインストールに問題はないように思います
キャプチャ1208_A05
翼はよじれてはいません  BlenderとUnityだけでは矛盾がないようです
ですが別の問題が起きています  左腕が曲がったままになっています
T-poseでないVRMデータとなっています 
Cluster本番にVRMをuploadすると 最初から左腕がまがっていて 翼も開いたままです
 さらに左腕を操作すると 左腕はさらに奇妙に曲がってしまいます
キャプチャ1208_A06
Humanoid>VRM T-pose >現在のポーズ  ではまだ不具合があると思います

@tabibito18
Copy link
Author

理解にすれ違いがまだあるようですが
「レスト位置」というoptionを知ることができて
大変有益な収穫でした。
Tposeになっているし 
出力したVRMをimportして調べても軸向きが勝手に変化していないし
Cluster上でも期待どおりの動きになっています
これで Blenderで試作して Unityで編集続行できる目処が見えてきました
まだまだ 条件によっては トラブルがあるかもしれませんが 一歩進んだ感じです
ひとまずお礼を申し上げておきます

@tabibito18
Copy link
Author

「レスト位置」のことなどもう少しうかがいたいことがありますが
一旦休憩します

@tabibito18
Copy link
Author

メールいただいているのに気づきました
kaijin_hasibiro_089_const125A_minmize03.blend
ファイルを点検してみます

@tabibito18
Copy link
Author

downloadして確認しましたがファイルに問題なく こちらが送ったものです
よじれていないことを確認したようすを録画してみました
左手を-90度まげると翼が開き 羽根が平たい面を形成しています
アバターの拘束ギミックの操作手順に誤解があるのでしょうか ご確認ください

2024-12-09.09-40-05.mp4

@tabibito18
Copy link
Author

「レスト位置」を使うことで 多少は解消する工程もあることがわかりましたが
「現在のポーズ」でVRM出力できる方が望ましいでしょう
改めて VRM exporter 2.32.1の 症状を動画と文章で説明します

2024-12-09BD.mp4

動画の説明です
データは
kaijin_hasibiro_089_const125_minmize03.blend を使用しています
(kaijin_hasibiro_089_const125A_minmize03.blend  でも同じことです)
左腕を ポーズ>トランスフォームをクリア でまっすぐにします
これでhumanはT-poseになったはずです
この状態で VRM出力します(「現在のポーズ」optionを使用しています)
VRM出力直後で 羽根がよじれていません 軸向きが変化したりしていません 
2.32.1 のおかげです
しかし、本質的な解決にはなっていません
VRMをインポートしてみると 羽根がよじれています 軸向きが変化しています
・・以上の症状を土曜日さんの方で再現できるでしょうか
バグとして認定していただけるでしょうか

多腕多脚でトラブっている他の方々のつぶやきも見かけるので
この症状の追求が誰かの役に立てればいいのですが
解決はすぐにはできなくても
症状の相互理解ができたところで 一旦節目にしたいところです

@saturday06
Copy link
Owner

詳細な解説ありがとうございます!ご指摘の通りVRMインポートのほうにまだバグが残っていることを確認しました。

ただ、このあたりのデータインポートのコードは地獄みたいな状態になっているため、v2.32.1の時のような速度感での修正は難しく、だいぶ後になってしまうことをお許しください!

@saturday06
Copy link
Owner

併せて「レスト位置」と「現在のポーズ」で、完全に同じポーズにしたとしてもエクスポート結果が異なる現象も確認しました。こちらも修正いたします!

@tabibito18
Copy link
Author

症状の確認とバグの認定ありがとうございます
解決はすぐにはできなくても
この症例が誰かの役に立てれば幸いです
体を壊さないように お励みください
また、別の機会があれば 相談に乗ってやってください

@saturday06
Copy link
Owner

先ほどリリースした最新版2.32.2で修正しました。確認お願いします!

結局エクスポート側のバグのようでした。インポート側にも何かバグがある匂いがするんですが、tabibito18さんに頂いたデータに関してはエクスポートしてからインポートしても羽根がよじれなくなったことを私の手元は確認できました

@tabibito18
Copy link
Author

数週間ぐらいかかるかと思いましたが お疲れ様です
問題の解消を確認しました

  1. Blender import ねじれなしを確認
  2. Cluster本番 ねじれなしを確認
  3. Unity 上で ねじれなしを確認

もっといろいろ検証したほうがいいのですが
解消したように思われます
これでコンストレイント関係でトラブっていた事例が
解消するケースが他にもあるかもしれません
使っているのに作者の土曜日さんの名前を知らない人が多いですね
twitterで少し宣伝しておきましょう

@tabibito18
Copy link
Author

余談ですが  自分なりの解釈を書いておきます
Tposeの定義ってどうなんでしょうか
VRM1.0の Tposeボタンは humanボーンだけに働いているような気がします
humanoidだけT-poseにすればよいのではないかと思います
垂直水平のようなポーズですね
humanoidはモーションを流し込むため初期ポーズをT-poseにする必要がありますね
しかし そこに追加された人外(動物とか)や衣装や髪の毛スカートの骨は
垂直水平にする必要がないと思います
揺れモノはどうせ動くので初期ポーズはどうでもよいとして
コンストレイントは  置換でなく追加なので
offsetというか初期ポーズをデリケートに調整したいところです
なので [レストポーズ]だけでなく[現在のpose]でもVRM出力できるようになったのは
喜ばしいことです
・・・という理解ですが  聞き流してもらってかまいません
勘違い等あればご指摘していただいてもありがたいです
機会があればどこかにブログ記事にしたいと思います

どんなバグがあってどう直したのかはたぶん難しくて私にはわからないと思います
どう使えばよいのか 微調整するときに どこで何が決まるのか 
その参考になることを また 機会があればお尋ねするかもしれません
これくらいにしておきます ひとまずありがとうございました

@saturday06
Copy link
Owner

VRM 1.0のTポーズの仕様は次の文書で定義されております。

https://github.com/vrm-c/vrm-specification/blob/282edef7b8de6044d782afdab12b14bd8ccf0630/specification/VRMC_vrm-1.0/tpose.ja.md

VRM Add-on for Blenderも、そちらの定義に従いTポーズの処理を行っています。

@tabibito18
Copy link
Author

参考資料ありがとうございます

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants