無駄なモーションマトリクスの計算がある

(以下は、サポート担当の Carmichael Euan によるコメントを翻訳したものです。)

お世話になっております。

はい、ご指摘のとおり、無駄を省ける部分が確かにあります。特に、VectorMatrixMultiply の呼び出しについて検討してみると、Hide されたボーンの計算はスキップすることができます。これらのボーンは、親のトランスフォームをスケール 0 で取るだけなので、余計な乗算の必要はありません。この問題につきましては、開発チームが修正できるように、Epic 内部で運用されている JIRA のチケットを作成したいと思います。

また、ReferenceToLocal がメッシュのすべてのボーンを含んでいる件 (現在のメッシュ LOD のためのボーンだけではなく) につきましては、意図されたものだと私は理解しております。このデータはモーション ベクターの計算に使用されるため、複数のフレームにわたって有効である必要があります。もし現在の LOD のボーンだけを保持しているのであれば、LOD が変わったときやボーンの数が変化したときに問題が生じることになります。メッシュのすべてのボーンを保存しておくことによって、そのような問題が回避することが可能です。そうは申しましても、もっと効率的なやり方があるかもしれませんので、この件につきましても JIRA のチケットに記載したいと思います。

しかし、ExtraRequiredBoneIndices につきましては、冗長な VectorMatrixMultiply の呼び出しは行っていないはずです。と申しますのも、配列 RequiredBoneSets (これには LOD.ActiveBoneIndices と ExtraRequiredBoneIndices が含まれています) をループで回している間に、ReferenceToLocal で同じボーン インデックスに書き込まれ、その後にすべてのボーンについて VectorMatrixMultiply が呼び出されているからです。つまり、LOD.ActiveBoneIndices と ExtraRequiredBoneIndices で重複するボーンがあっても、重複して VectorMatrixMultiply が呼び出されることはないはずです。

私に何か見落としがあれば、教えていただけますと幸いです。