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

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

> Hideされたボーンに関してですが、完全に計算されないというのであればそちらの方が軽くなりますので良いと思います。その場合親のスケール0をかける必要もなくZeroMatrixで良いと思います。

Hide されたボーンが、親のトランスフォームを (スケール ゼロで) 取るように設定する必要があります。そうしなければ、キャラクターのスキニングが最初の Hide されたボーンでまずいことになってしまうからです。そのため、以下のコードは残念ながら依然として必要となります。

ReferenceToLocal[ThisBoneIndex] = ReferenceToLocal[ParentIndex].ApplyScale(0.f);

> アプリ側でHideしたボーンから座標を取得するために残されていた可能性があるかなと思いました。そのためこちらに関しては現状と同じようにHideしたボーンの更新もやってしまってよいのではと自分は思っております。

Hide されたボーンのトランスフォームは更新されないため、ユーザーがメッシュの Hide されたボーンのトランスフォームを取得しようとすると、最後にアニメートされた位置でのものとなります。そのようなユースケースがあるとは思えませんので、Hide されたボーンにおける VectorMatrixMultiply の呼び出しは削除しても問題ないと考えております。

> LOD.ActiveBoneIndices と ExtraRequiredBoneIndices に重複したボーンがあった場合、ReferenceToLocal[ThisBoneIndex]の同じ計算が2度行われるということを伝えたかったのです。

おっしゃるとおりです。その場合、ReferenceToLocal が同じボーンに対して 2 回計算される可能性があります。これは、VectorMatrixMultiply の呼び出しに比べると比較的小さな問題だとは思いますが、開発チームの情報に含めておきます。この関数全体は、再実装してより効率的なものにすることができる可能性がありますが、この種の変更には常にリスクがともないます。

> NeedsUpdateBoneIndcies … 最終的にReferenceToLocalが更新された骨のみVectorMatrixMultiplyする

この NeedsUpdateBoneIndices を生成するための修正には、親またはリーダーコンポーネントによって制御されているボーンが含まれていません。もしも Leader Pose Component を使用している場合は、そのことによってまずいことになってしまいます。その場合は、なお VectorMatrixMultiply をそれらのボーンで呼び出す必要があります。たとえ、それらのボーンが親コンポーネントによって制御されているとしてもです。