diff --git a/Assets/VRM10/Runtime/Components/Expression/MorphTargetBindingMerger/MorphTargetBindingMerger2.cs b/Assets/VRM10/Runtime/Components/Expression/MorphTargetBindingMerger/MorphTargetBindingMerger2.cs index 95e305f3a..9441ba8b9 100644 --- a/Assets/VRM10/Runtime/Components/Expression/MorphTargetBindingMerger/MorphTargetBindingMerger2.cs +++ b/Assets/VRM10/Runtime/Components/Expression/MorphTargetBindingMerger/MorphTargetBindingMerger2.cs @@ -5,16 +5,26 @@ using UnityEngine; namespace UniVRM10 { + /// + /// Optimized implementation of MorphTarget binding merger. + /// + /// Dictionary を使用すると、その GetEnumerator()(foreach) や get/set を 100,1000 オーダーで呼び出すことになる。 + /// するとモバイル環境ではかなりの定常負荷になってしまうため、その使用を避けて実装する。 + /// internal sealed class MorphTargetBindingMerger2 { private readonly ExpressionKey[] _keyOrder; - // NOTE: Dictionary Access is very slow. So we use this only. private readonly Dictionary _keyIndexReverseMap = new(ExpressionKey.Comparer); - // NOTE: idx dimension0: _keyOrder, idx dimension1: no specific order - private readonly RuntimeMorphTargetBinding[][] _bindings; + /// + /// index access with [_keyOrder][*] + /// + private readonly RuntimeMorphTargetBinding[][] _bindings; private readonly MorphTargetIdentifier[] _morphTargetOrder; - // NOTE: idx: _morphTargetOrder + + /// + /// index access with [_morphTargetOrder] + /// private readonly float?[] _accumulatedWeights; public MorphTargetBindingMerger2(Dictionary expressions, Transform modelRoot)