お世話になっております。
同じスケルトンを使用しているスケルタルメッシュで、ボーン数の多いメッシュAとボーン数の少ないメッシュBがあります。
メッシュBにメッシュAをリーダーポーズに設定し(メッシュBがフォロワー)その状態で
コンソールコマンド「Show Bones」を実行すると配列のアクセス違反でクラッシュしました。
コールスタックを添付しました。
FSkeletalMeshSceneProxy::DebugDrawSkeletonで、メッシュBのときに取得できるComponentSpaceTransformsの内容が
リーダーであるメッシュAのものになっており、配列分処理しようとするのですがメッシュBはボーン数が少ないので、
メッシュBのRefSkeletonが持つボーンの情報にアクセスしようとするとアクセス違反が発生します。
ComponentSpaceTransformsはFSkinnedMeshSceneProxyDynamicDataのコンストラクタでリーダーポーズが設定されている場合は
リーダーのComponentSpaceTransformsを設定しておりました。
例えばメッシュAが体でメッシュBが靴。の様なシチュエーションで、靴のメッシュのボーン数は最低限にしたいと考えております。
確認できておりませんが以前は同じ構成でもShow Bonesでクラッシュすることはなかったと思います。
この症状はバグでしょうか?仕様でしょうか?また症状を回避する方法や対策などはございませんでしょうか?
よろしくお願い致します。
コールスタックで弊社バグデータベースを検索してみましたがshow BonesおよびにDebugDrawSkeletonを含んだバグを見つけることが出来ませんでした。
そこで一般的なモジュラーキャラクターアセットでアクターを構成し、SetLeaderPoseComponentでポーズの同期設定を適用したあと、Show Bones によるデバッグ表示を行ってみましたが
クラッシュを再現することが出来ませんでした。
クラッシュの状況で一つ伺いたい点がございます。
同じスケルトンを使用しているスケルタルメッシュであれば、それぞれのスケルタルメッシュのRefSkeletonは同じものを指すかと思いますが、
それぞれのスケルタルメッシュのRefSkeletonの持つボーンの情報に差がございますか?
以下のスクリーンショットは検証に利用したモジュラーキャラクターの下半身のメッシュを開いたときのツリーの表示ですが、メッシュBにおいてはこのようなグレーアウトしたボーン自体が元のメッシュに比べて少ない状態ということでしょうか?
[Image Removed]
もし可能であれば再現プロジェクトの形で問題のアセットをご用意いただけると大変スムーズかと思います。ご検討ください。
**> Mutable Sampleの「SK_Jacket_A」をメッシュA(Leader)と「SK_Pants」をメッシュBとして検証しましたが、ボーンへのウェイトの有無に違いはあれどボーン自体は同じ本数が入っている様でした。メタ情報もボーン数は270本で同じでした。**
> 問題が起きているメッシュのボーン数はメッシュA(Leader)が233本、メッシュBが47本と異なります。
> Leader Poseを使用するうえでこういったボーン数の違いがあると良くないでしょうか?
はい。同じスケルトンを共有している同じボーン数のスケルタルメッシュをLeaderPoseで利用してください。
公式ドキュメントにも「リーダー ボーンの子メッシュ オブジェクトは、完全に一致する構造体を含むサブセットである必要があることにも注意してください。他の追加のジョイントを含めたり、ジョイントを省略したりすることはできません。」と説明がございます。
>同じスケルトンを使用しているスケルタルメッシュであれば、それぞれのスケルタルメッシュのRefSkeletonは同じものを指すかと思いますが、
>それぞれのスケルタルメッシュのRefSkeletonの持つボーンの情報に差がございますか?
スケルトンは同じですが、RefSkeletonの内容は異なっていました。それはLeader Poseを使用しない場合でも同様でした。
>メッシュBにおいてはこのようなグレーアウトしたボーン自体が元のメッシュに比べて少ない状態ということでしょうか?
はい。メッシュAとメッシュBではグレーアウトされているボーンが異なります。数もメッシュBが少ない状態でした。
>もし可能であれば再現プロジェクトの形で問題のアセットをご用意いただけると大変スムーズかと思います。ご検討ください。
プロジェクトの事情で今問題が発生しているアセットでの再現プロジェクトをご用意することが出来ません。
お手数ですが御社で確認して頂いた際の「一般的なモジュラーキャラクターアセット」を教えて頂けますでしょうか?
もしそのアセットで再現できましたら、そのプロジェクトはお渡し出来るかと思います。
バニラのUE5.6.1に問題のメッシュを移行して同様の検証を行いましたがクラッシュしました。
Mutable Sampleで同様の検証を行ったときはクラッシュはしませんでした。
Mutable Sampleの「SK_Jacket_A」をメッシュA(Leader)と「SK_Pants」をメッシュBとして検証しましたが、ボーンへのウェイトの有無に違いはあれどボーン自体は同じ本数が入っている様でした。メタ情報もボーン数は270本で同じでした。
問題が起きているメッシュのボーン数はメッシュA(Leader)が233本、メッシュBが47本と異なります。
Leader Poseを使用するうえでこういったボーン数の違いがあると良くないでしょうか?
今のところ「Show Bones」以外の場面では問題は発生しておりませんが、Leader Poseを使う上で問題になるようでしたら対応を返答したいと思います。
確認ありがとうございます。承知しました。
ボーン情報は同じものが出力される様に対応させて頂きます。