Пример #1
0
        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);
        }
Пример #2
0
        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);
        }