private void Update() { //眼球運動もモード別で切り替えていく bool canUseExternalEyeJitter = _config.ControlMode == FaceControlModes.ExternalTracker && externalTrackEyeJitter.IsTracked; randomEyeJitter.IsActive = !canUseExternalEyeJitter; externalTrackEyeJitter.IsActive = canUseExternalEyeJitter; if (!_hasModel) { return; } if (_config.ShouldSkipNonMouthBlendShape) { //TODO: これ系の「非ゼロにしたいBlendShapeを明示的に切る」処理をどこに入れるか、というのは悩みどころ //ResetBlink(); return; } DefaultBlendShape.Apply(_proxy); var blinkSource = _config.ControlMode == FaceControlModes.ExternalTracker ? externalTrackerBlink.BlinkSource : (_config.ControlMode == FaceControlModes.WebCam && !PreferAutoBlinkOnWebCamTracking) ? imageBasedBlinkController.BlinkSource : autoBlink.BlinkSource; _proxy.AccumulateValue(BlinkLKey, blinkSource.Left); _proxy.AccumulateValue(BlinkRKey, blinkSource.Right); }
public void Accumulate(VRMBlendShapeProxy proxy) { if (!_hasModel) { return; } //NOTE: ここのデフォルトfunだが //「パーフェクトシンク使用中」「FaceSwitch適用中」「Word to Motion適用中」 //の3ケースでは適用されると困る。 //で、ここに書いておくと上記3ケースではそもそもAccumulateが呼ばれないため、うまく動く。 DefaultBlendShape.Apply(proxy); var blinkSource = _config.ControlMode == FaceControlModes.ExternalTracker ? externalTrackerBlink.BlinkSource : (_config.ControlMode == FaceControlModes.WebCam && !PreferAutoBlinkOnWebCamTracking) ? imageBasedBlinkController.BlinkSource : autoBlink.BlinkSource; proxy.AccumulateValue(BlinkLKey, blinkSource.Left); proxy.AccumulateValue(BlinkRKey, blinkSource.Right); }