まじかる☆しげぽん

Results 7 comments of まじかる☆しげぽん

エクスポート時に独自にTポーズ化を行うことはできるのですが、そもそもモデルのローカル軸を消してしまう仕様が元のモデルの持つローカル軸の破壊的仕様と感じました。 その為、ローカル軸を維持した上で正規化処理した軸情報(回転値を0にするという情報)はVRMの拡張情報として持ってほしいという要望になります。 この仕様ですと、例えばGLTF化した際に元モデルのローカル軸は破壊されることなく他環境に持って行った際にVRMの拡張情報を参照してHumanoid設定を行うことができます。 また、VRMデータをGLTFとして参照する場合もローカル軸が破壊されていないデータを参照することができます。 その為、Humanoidを扱えないような環境で読み込む場合もローカル軸の再設定を行うという処理も不要になります。 現状、UnityのHumanoidは元のFBXのローカル軸を破壊せず維持した状態で持っています。 それと同様の仕様になってほしいです。

>モデルにローカル軸情報を持たせることは、正規化(というより仕様準拠化)-Tpose化による上記利便性を失わせることになります。 これは、ローカル軸情報を持つ上で正規化した情報を別に持つ(VRMの拡張として保持する)ことで解決することだと思いますが、その仕様ではダメな問題はあるでしょうか? 例えば、Mayaでは「回転」情報とは別にボーンのローカル軸情報を持つ「ジョイントの方向(ボーンの軸の向き)」というのを保持しています。 そのように、モデルのボーン情報が本来持ってるローカル軸は維持してVRMの拡張情報として正規化した情報を別に持てばいいのではないかと考えます。

VRMの利用想定がアバターのみでなく、今後色々な活用法をされるときにオリジナルのデータが持つローカル軸を維持するということはそのオリジナルデータの理想の状態を保証することができます。 例えば、一番問題に感じてるのはボーンの軸の向きに関わらずワールド方向にボーンが向いているという点です。 これは3Dデータとしては、基本的にこのようなデータを作成しません。 理由は、ローカル軸データを持っていないと曲がる方向の情報を失うためGLTFなど対応ソフトで読み込んだ場合、モーションを付けれるような状態ではないためです。 その為に、GLTFとしてはローカル軸方向を保持したモデル製作者が意図した最低限の状態を保持してその上でVRMに最適化されたデータが付加されるというのが理想だと考えているためです。 また、現在Tポーズ化はUnityのアバター生成のTポーズ化に依存しており完全な正規化が行えているわけではなくHumanoid依存の正規化になっているためです。(この点はVRMschema側ではなくUniVRM側で議論する問題だと思いますが) ここでいう完全な正規化というのは、ボーンの向きがワールド方向と一致していることを指します。(↓このように) 例えば、UniVRMで正規化後、背骨が湾曲してるのに対しジョイント方向がワールドの向きを向いているこの状態がおかしい状態です。(完全な正規化を行うなら人体の基礎ボーンの回転値を一度0値にしボーンの向きと軸の向きを一致させた状態が正しい正規化かと思います) 今後Unity以外でのVRMの利用を考えると、Humanoidに依存した正規化処理より元データ構造を保持してその上で、VRMに必要な情報を持たせるというのがエコシステムとして理想と感じます。 以上が、ローカル軸を維持した状態であって欲しい理由となります。

画像サイズ小さくしておきました。 Tポーズの正規化の件についてはUniVRMの方にissueを立てたいと思います。

UniVRMの方でissueを立てる前に検証を行ったところ、純粋に全身の基本ボーンの回転値を0にしてHumanoidをセットアップしモーションを適用するとキャラの印象が大きく異なってしまうことが分かりました。 (これは、Humanoidに変換したモーションがマッスル値の差分データとして持っているからだと思います) 単純に正規化時に回転を全て0にしてギズモと軸の方向を一致する方法では難しそうでした。 FBXにHumanoidを適用してアバターを生成した場合、元のローカル軸は維持されています。恐らくHumanoidシステムは元の情報を維持してHumanoidシステムをラップ(バインド)する形で実現していると思います。 上記でも書きましたが、VRMが今後モーションキャプチャー環境だけに限らず幅広い使われ方が行われると想定するとローカル軸の維持が必要と思われるので、ベイクして焼き付けてしまうのではなくこのように維持される構造になってほしいです。

>一点確認させていただきたいのですが、その2体に当てたポーズはそれぞれそれ専用に設定したモーションデータでしょうか?それとも同じデータでしょうか? 2体に当てたモーションデータは、Humanoidモーション化した同じデータです。 ■左側 人体の女性の背骨の湾曲に沿ってボーンが入ってる状態でHumanoidのFoce-Tポーズ化した状態 下記に該当する状態 > 公開されているVroidのデフォルトTposeは人間が(普遍的な・見栄えよく)Tposeした時の姿勢をボーン初期姿勢として持っていると認識しています。 ■右側 上記データの背骨が湾曲している回転値を0値にし背骨をまっすぐにする処理を事前に行ったデータです、それをFace-Tポーズ化した状態 状態としては、この仕様に準拠した状態です。仰ってる通り自然な姿勢からは逆に曲がる状態ですね。 >仕様Tpose 背骨が真っすぐ(自然な姿勢からは逆に曲がっていると言える? 足の骨がY軸(縦)に並行(解剖学的に言えば下に行くほど骨関節-回転軸は後ろに下がるはずでは? この状態、もう一点問題がありました。 足の回転値が0値にすることにより、膝が伸び切った時にがくがくなる現象が起きました。 >という、人間として少し不自然な姿勢(モデリングできないので書籍頼みの知識です))から、キャリブレーション時のようなTposeを取っているときの姿勢への差分をポーズモーションへ適応しないと差異が出るのは当然と思います。 通常はこのように回転値をすべて取り除く正規化を行っても、その背骨も含めた自然な初期ポーズを取るモーションを作成し、Genericで適用した場合はそれらのキーが反映されるのでちゃんた自然なポーズになります。 今回、Humanoidシステムをベースとしてポーズが適用されており。 Humanoidシステムは、初期ポーズからの差分データに変換さるようなのでFace-Tポーズしていた際に人間として背骨が湾曲していても、その状態を維持してモーションが適用されるようです。 >ここに、仕様Tposeはモーションデータを作るときに留意すべき初期姿勢状態であるというDocumentationが必要でないか、というissueが考えられます。 現在の仕様が、「背骨が真っすぐ」が仕様となっている場合、上記現象がおきるため「背骨が真っすぐ」ではキャラの印象が上記のように損ねるのでHumanoidでは「人として自然な状態のTポーズ」になっていれば問題ない、逆にそれを真っすぐにするとキャラ性を損ねる問題があるのが分かりました。 それは別issueかもしれません。

@ousttrue >なので、ローカル軸がグローバル軸と一致するようにT-Poseにしてください。 これを行ったところ、以下のようになりました。 ローカル軸とグローバル軸を一致するTポーズを行うのはキャラの体形を損なうためその対応では行えません。 これは実際に、このようなデータを手元で作っていただくと分かると思います。 1.左側の状態が現状のセットアップデータ 2.中央が女性らしい形状を維持して垂直にボーンを入れる場合 3.右がVRM的にローカル軸とワールド軸を合わせたいならモデルも垂直にする状態 2.は曲がる位置がモデルに対しておかしいので基本的にこのようなボーンの入れ方はしません 3.今回、正規化処理で全ボーンの回転値を抜いて完全なTポーズとして3の状態を作ってみました。 その結果がこちらになります。 右側が3の状態で、Humanoidでポーズを反映した場合Force-Tポーズを行った状態では自然なTポーズ状態に対してポーズが適用される仕様のためかボーンを棒立ちにしたらポーズも棒立ち状態になってしまいました。 例えば、キャラの体形を女性らしいS字を保ってボーンをワールドとローカル軸が一致する場所に配置したら曲がる基点がおかしいことになります。(実際のモデルの骨を通る位置から外れた位置になったりするでしょう) その為、通常はこのようにキャラの姿勢に対応する位置にボーンを配置します。 ローカル軸とグローバル軸を一致するには寸胴な体形のキャラしか作れないことになっていしまいます。 さらに、Unityでとの話になっていますがVRMとしては今後Unity外での利用も考えられますのでUnity基準で仕様を考えない方が良いかと思います。 その為に、GLTF的には元のオブジェクトが保持しているローカル軸を保持してその上でVRMの正規化を別の情報として持つ処理を行ってほしいです。 FBXをHumanoidでセットアップしても元のローカル軸が消えないように、そのFBXを他の環境に持っていってもオリジナルのローカル軸は非破壊でそれに対する処理を行うことができます。 現状ですが、VRMにした時点でローカル軸がUnityのHumanoidに依存したForce-Tポーズに対してワールド軸に正規化されてしまうのでローカル軸の破壊的処理が入っているのが問題だと感じております。