LOD Bone Reduction の使い方について

いつもお世話になっております。

SkeletalMeshの LOD Bone Reduction 機能について質問させて下さい。

EngineContentのTutorialTPPモデルを使用して、以下の手順でこの機能を試用しています。

[手順A]

  • スケルトンツリー上でボーンoを選択して右クリック
  • LOD Bone Reduction
  • Remove Selected…

このとき、FMeshBoneReduction::ReduceBoneCounts内で、

以下のそれぞれの数量が、SkeletalMesh::RefSkeleton のボーン数と比べて減少していることが確認できます。

FSkeletalMeshLODModel::ActiveBoneIndices
FSkeletalMeshLODModel::RequiredBones

(FSkeletalMeshLODModel* NewModelの値を、460行目で確認)

続いて、以下の手順を行います。

[手順B]

  • スケルトンツリーから別のボーンp を選択して同様にリダクションを行い
  • FMeshBoneReduction::ReduceBoneCounts で ボーン数を確認します

すると、
ActiveBoneIndices は、手順A後の値から更に減少する一方で、
RequiredBones は、大本のボーン数(SkeletalMesh::RefSkeleton)からボーンpの分を引いた値になります。

この機能を使う狙いとして、

UAnimInstance::ParallelEvaluateAnimation などでのCPU処理負荷を減らす、というものがあると思うのですが、

ここでのボーン数は FMeshBoneReduction::RequiredBonesをもとに決まるようなので、

手順A, 手順Bを順に実行して ボーンo, p への処理がスキップされるつもりが、そうなっていない、という状況です

ボーンを選択するときに、複数選択で両方のボーンを選択すれば、目的の成果は得られるのですが、

これは何か理由があってこういう挙動になっているのでしょうか?

ご指摘ありがとうございます!

今まで全く気づかなかったのですが、確かにそのような挙動となっており、Anim Evaluationで動作するBone数が最後のLOD Bone Reductionによって上書きされていました。

修正されるばき内容かと思いますので、チケットを作成いたしました。恐縮ですが、なにか進展があるまでお待ち下さい。

UE-60491: LOD Bone Reduction overwrites RequiredBones incorrectly

ただ、ご指摘の関ReduceBoneCounts内部にて以下のようなコメントがあるため何かしら理由があるのかもしれません。

// Always restore all previously removed bones if not contained by BonesToRemove
	SkeletalMesh->CalculateRequiredBones(SkeletalMesh->GetImportedModel()->LODModels[DesiredLOD], SkeletalMesh->RefSkeleton, &BonesToRemove);

しかし、ActiveBoneIndicesとの乖離はよろしくないかと思うので上記チケットにて対応を考えていきたいと思います。

また、すでにご存知でしたら申し訳ございませんが、RequiredBones及びActiveBoneIndicesは上記の表示でも確認できますので、ご参考にしていただければ幸いです。

247052-2018-06-14-14h33-44.png