From 529b77ef314301d01ea3d57cd08df2d1057bc243 Mon Sep 17 00:00:00 2001 From: Emiliana <38952746+emilianavt@users.noreply.github.com> Date: Mon, 22 Feb 2021 22:35:10 +0100 Subject: [PATCH] Slightly optimized OpenSeeVRMDriver. --- Examples/OpenSeeVRMDriver.cs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Examples/OpenSeeVRMDriver.cs b/Examples/OpenSeeVRMDriver.cs index b5324fe..060a9f6 100644 --- a/Examples/OpenSeeVRMDriver.cs +++ b/Examples/OpenSeeVRMDriver.cs @@ -312,7 +312,9 @@ public class OpenSeeVRMDriver : MonoBehaviour { private VRMBlendShapeProxy proxy = null; private Animator animator = null; private RuntimeAnimatorController animatorController = null; + private Dictionary clearMap = new Dictionary(); private Dictionary values = new Dictionary(); + private Dictionary clipNames = new Dictionary(); private Dictionary> parameters = new Dictionary>(); private bool interpolatedPerfectSync = false; private float defaultWeight = 1f; @@ -362,7 +364,9 @@ public class OpenSeeVRMDriver : MonoBehaviour { } private void SetFloat(BlendShapeKey key, float weight, float factor) { - string name = key.Name.ToUpper(); + if (!clipNames.ContainsKey(key)) + return; + string name = clipNames[key]; weight *= factor; if (animator != null && parameters.ContainsKey(name)) { var parameter = parameters[name]; @@ -394,13 +398,12 @@ public class OpenSeeVRMDriver : MonoBehaviour { interpolatedPerfectSync = false; if (proxy != null) { foreach (var pair in proxy.GetValues()) { - proxy.ImmediatelySetValue(pair.Key, 0f); SetFloat(pair.Key, 0f); } foreach (var pair in values) { - proxy.ImmediatelySetValue(pair.Key, 0f); SetFloat(pair.Key, 0f); } + proxy.SetValues(clearMap); } values.Clear(); } @@ -430,14 +433,12 @@ public class OpenSeeVRMDriver : MonoBehaviour { found = true; } } - /*if (found) - proxy.SetValues(clearKeys);*/ clearPSBrows = false; clearPSEyes = false; clearPSMouth = false; } + proxy.SetValues(values); foreach (var pair in values) { - proxy.AccumulateValue(pair.Key, pair.Value); SetFloat(pair.Key, pair.Value, 1f); } proxy.Apply(); @@ -473,15 +474,23 @@ public class OpenSeeVRMDriver : MonoBehaviour { return; HashSet perfectSyncSet = new HashSet(perfectSyncNames); clipMap.Clear(); + clipNames.Clear(); + clearMap.Clear(); perfectSyncMap.Clear(); //perfectSyncMap.SetSmoothing(0.5f); foreach (BlendShapeClip clip in vrmBlendShapeProxy.BlendShapeAvatar.Clips) { if (clip.Preset == BlendShapePreset.Unknown && clip.BlendShapeName != null) { string name = clip.BlendShapeName.ToUpper(); clipMap.Add(name, BlendShapeKey.CreateUnknown(clip.BlendShapeName)); + clipNames.Add(BlendShapeKey.CreateUnknown(clip.BlendShapeName), name); + clearMap.Add(BlendShapeKey.CreateUnknown(clip.BlendShapeName), 0f); if (perfectSyncSet.Contains(name)) { perfectSyncSet.Remove(name); } + } else if (clip.Preset != BlendShapePreset.Unknown) { + string name = clip.BlendShapeName.ToUpper(); + clipNames.Add(BlendShapeKey.CreateFromPreset(clip.Preset), name); + clearMap.Add(BlendShapeKey.CreateFromPreset(clip.Preset), 0f); } } if (perfectSyncSet.Count < 1)