KineFXを用いて作業をしてFBXCharacterOutput SOPでFBXを書き出した際に、ゲームエンジン上でFBXを確認すると一部のBlendShapeの挙動が元のFBXと異なり正常な挙動をしていない現象が発生しました。(使用しているゲームエンジンはUnityです。)
この現象が発生するデータやブレンドシェイプを洗出して見たところ、中間形状(in between shape)を含んだブレンドシェイプで発生している事が分かりました。
試しにHoudini上で中間形状を含むブレンドシェイプを持つジオメトリを作成してFBXCharacterOutput SOPからFBXを書き出してみたところ、ゲームエンジン上では中間形状を無視したモーフィングがされているような挙動をしていました。
添付した動画が、Houdini上でのブレンドシェイプの挙動と、Unity上でのブレンドシェイプの挙動を撮影したものです。Houdini上だとウェイとが0.5の時点でぐにゃっと曲がった形状になり1.0で球体になっていますが、Unity上だと0.5の中間形状が反映されずに直接1.0の球体になるように補間されています。
こちらのドキュメントを読みつつ試行錯誤をしたつもりですが、何か設定のし忘れやワークアラウンド的な回避作法などご存知の方がいらっしゃれば教えて頂けますと大変助かります。
https://www.sidefx.com/ja/docs/houdini/character/kinefx/blendshapes.html [www.sidefx.com]
業務の都合上該当するFBXを共有する事が出来ませんが、上記のテスト時に作成したhipファイルを共有致します。
ブレンドシェイプを持ったFBXを作成して書き出すミニマルなサンプルで、検証に不必要なノードは含まれていないです。
In between shapeを含むブレンドシェイプを持ったFBXの書き出し
1262 1 1-
- HarukaKajita
- Member
- 2 posts
- Joined: 5月 2019
- オフライン
-
- HarukaKajita
- Member
- 2 posts
- Joined: 5月 2019
- オフライン
こちらの件ですが、投稿後の検証にてUnity側の問題である可能性が高い事が分かりました。
投稿して昨日の今日で恐縮ですが、Unity側で解決すべき問題なのでこちらの投稿は解決とさせて頂きます。
詳細を以下にまとめます。今後同じ問題に困った方の参考になれば幸いです。
UnityがFBXをインポートする際にUnity独自のMeshアセットが自動で作成されます。このMeshアセットに中間形状を含むブレンドシェイプの情報が格納されていましたが、実際にブレンドシェイプの動作を確認すると適切に中間形状がスキップされたような挙動でした。C#スクリプトからMeshアセット内の情報にアクセスして詳細を確かめてみると、ブレンドシェイプのフレームの順番が不適切な順になっていました。Meshをコピーしてフレームの順番を適切に修正する処理を施してみると、Houdini上でのブレンドシェイプと同じ挙動になりました。
また、Houdiniから書き出すジオメトリに含まれるPackedGeometry(ブレンドシェイプ)の順番をSort SOPなどで変えてみると、Unityが自動で作成するブレンドシェイプの挙動も変わりましたが、正しい挙動ではなく以前とは異なる意図していない挙動でした。この時、Meshアセットに含まれるブレンドシェイプのウェイトの値がインポート時に全て100になっていました。
これらの結果から、UnityがMeshアセット生成時にブレンドシェイプの情報を正しく設定出来ていない可能性が高いのではないかと結論付けました。
投稿して昨日の今日で恐縮ですが、Unity側で解決すべき問題なのでこちらの投稿は解決とさせて頂きます。
詳細を以下にまとめます。今後同じ問題に困った方の参考になれば幸いです。
UnityがFBXをインポートする際にUnity独自のMeshアセットが自動で作成されます。このMeshアセットに中間形状を含むブレンドシェイプの情報が格納されていましたが、実際にブレンドシェイプの動作を確認すると適切に中間形状がスキップされたような挙動でした。C#スクリプトからMeshアセット内の情報にアクセスして詳細を確かめてみると、ブレンドシェイプのフレームの順番が不適切な順になっていました。Meshをコピーしてフレームの順番を適切に修正する処理を施してみると、Houdini上でのブレンドシェイプと同じ挙動になりました。
また、Houdiniから書き出すジオメトリに含まれるPackedGeometry(ブレンドシェイプ)の順番をSort SOPなどで変えてみると、Unityが自動で作成するブレンドシェイプの挙動も変わりましたが、正しい挙動ではなく以前とは異なる意図していない挙動でした。この時、Meshアセットに含まれるブレンドシェイプのウェイトの値がインポート時に全て100になっていました。
これらの結果から、UnityがMeshアセット生成時にブレンドシェイプの情報を正しく設定出来ていない可能性が高いのではないかと結論付けました。
-
- Quick Links