Exemple #1
0
        private void InitializeMachineFor(AnimatorStateMachine machine, string proxyParam, string liveParam, string handParam, string clipPath)
        {
            var waiting = machine.AddState("Waiting", SharedLayerUtils.GridPosition(1, 1));

            waiting.timeParameter       = proxyParam;
            waiting.timeParameterActive = true;
            waiting.motion             = AssetDatabase.LoadAssetAtPath <AnimationClip>(clipPath);
            waiting.speed              = 1;
            waiting.writeDefaultValues = _writeDefaultsForAnimatedAnimatorParameterStates;

            var listening = machine.AddState("Listening", SharedLayerUtils.GridPosition(1, 2));

            listening.timeParameter       = liveParam;
            listening.timeParameterActive = true;
            listening.motion             = AssetDatabase.LoadAssetAtPath <AnimationClip>(clipPath);
            listening.speed              = 1;
            listening.writeDefaultValues = _writeDefaultsForAnimatedAnimatorParameterStates;

            var toListening = waiting.AddTransition(listening);

            SetupTransition(toListening);
            toListening.AddCondition(AnimatorConditionMode.Equals, 1, handParam);

            var toWaiting = listening.AddTransition(waiting);

            SetupTransition(toWaiting);
            toWaiting.AddCondition(AnimatorConditionMode.NotEqual, 1, handParam);
        }
Exemple #2
0
        private AnimatorState CreateSuspendState(AnimatorStateMachine machine, AnimationClip emptyClip)
        {
            var enableBlinking = machine.AddState("SuspendBlinking", SharedLayerUtils.GridPosition(1, 1));

            enableBlinking.motion             = emptyClip;
            enableBlinking.writeDefaultValues = _writeDefaultsForLogicalStates;
            return(enableBlinking);
        }
        public void Create()
        {
            EditorUtility.DisplayProgressBar("GestureCombo", "Clearing lipsync override layer", 0f);
            var machine = ReinitializeLayer();

            if (!_manifestBindings.Any(manifest => manifest.Manifest.RequiresLimitedLipsync()))
            {
                return;
            }

            var none = machine.AddState("None", SharedLayerUtils.GridPosition(0, 0));

            none.motion             = _emptyClip;
            none.writeDefaultValues = false;

            var noneTransition = machine.AddAnyStateTransition(none);

            SetupLipsyncTransition(noneTransition);
            noneTransition.canTransitionToSelf = false;
            noneTransition.duration            = _limitedLipsync.transitionDuration;
            noneTransition.AddCondition(AnimatorConditionMode.Less, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide");

            _assetContainer.RemoveAssetsStartingWith("zAutogeneratedLipsync_", typeof(AnimationClip));
            var regularVisemeClips = CreateRegularClips();
            var wideVisemeClips    = CreateWideClips();

            AssetContainer.GlobalSave();
            for (var visemeNumber = 0; visemeNumber < wideVisemeClips.Count; visemeNumber++)
            {
                var state = machine.AddState("Wide " + visemeNumber, SharedLayerUtils.GridPosition(4, 2 + visemeNumber));
                state.motion             = wideVisemeClips[visemeNumber];
                state.writeDefaultValues = _writeDefaultsForLipsyncBlendshapes;

                var transition = machine.AddAnyStateTransition(state);
                SetupLipsyncTransition(transition);
                transition.canTransitionToSelf = false;
                transition.duration            = _limitedLipsync.transitionDuration * FindVisemeTransitionTweak(visemeNumber);
                transition.AddCondition(AnimatorConditionMode.Equals, visemeNumber, "Viseme");
                transition.AddCondition(AnimatorConditionMode.Greater, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide");
            }
            for (var visemeNumber = 0; visemeNumber < regularVisemeClips.Count; visemeNumber++)
            {
                var state = machine.AddState("Regular " + visemeNumber, SharedLayerUtils.GridPosition(-4, 2 + visemeNumber));
                state.motion             = regularVisemeClips[visemeNumber];
                state.writeDefaultValues = _writeDefaultsForLipsyncBlendshapes;

                var transition = machine.AddAnyStateTransition(state);
                SetupLipsyncTransition(transition);
                transition.canTransitionToSelf = false;
                transition.duration            = _limitedLipsync.transitionDuration * FindVisemeTransitionTweak(visemeNumber);
                transition.AddCondition(AnimatorConditionMode.Equals, visemeNumber, "Viseme");
                transition.AddCondition(AnimatorConditionMode.Less, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide");
            }
        }
        public void Create()
        {
            EditorUtility.DisplayProgressBar("GestureCombo", "Clearing expressions layer", 0f);
            var machine = ReinitializeLayer();

            var defaultState = machine.AddState("Default", SharedLayerUtils.GridPosition(-1, -1));

            defaultState.motion             = _emptyClip;
            defaultState.writeDefaultValues = _conflictPrevention.ShouldWriteDefaults;

            if (_activityStageName != null)
            {
                CreateTransitionWhenActivityIsOutOfBounds(machine, defaultState);
            }

            var activityManifests = _manifestBindings;

            EditorUtility.DisplayProgressBar("GestureCombo", "Generating animations", 0f);
            _assetContainer.RemoveAssetsStartingWith("zAutogeneratedExp" + _animInfix + "_", typeof(AnimationClip));
            _assetContainer.RemoveAssetsStartingWith("zAutogeneratedPup" + _animInfix + "_", typeof(BlendTree));
            activityManifests = new AnimationNeutralizer(
                activityManifests,
                _compilerConflictFxLayerMode,
                _compilerIgnoreParamList,
                _compilerFallbackParamList,
                _blinkBlendshapes,
                _assetContainer,
                _conflictPrevention.ShouldGenerateExhaustiveAnimations,
                _emptyClip,
                Feature(FeatureToggles.DoNotFixSingleKeyframes)
                ).NeutralizeManifestAnimations();

            // The blend tree auto weight corrector assumes that all of the Manifests' blend trees have been autogenerated.
            // This remains true as long as the Animation Neutralizer is executed before this.
            activityManifests = new CgeBlendTreeAutoWeightCorrector(activityManifests, _useGestureWeightCorrection, _useSmoothing, _assetContainer)
                                .MutateAndCorrectExistingBlendTrees();

            foreach (var parameter in AllParametersUsedByManifests(activityManifests))
            {
                SharedLayerUtils.CreateParamIfNotExists(_animatorController, parameter, AnimatorControllerParameterType.Float);
            }

            var combinator = new IntermediateCombinator(activityManifests);

            new GestureCExpressionCombiner(
                _animatorController,
                machine,
                combinator.IntermediateToTransition,
                _activityStageName,
                _conflictPrevention.ShouldWriteDefaults,
                _useGestureWeightCorrection,
                _useSmoothing
                ).Populate();
        }
Exemple #5
0
        private AnimatorState CreateBlinkingState(AnimatorStateMachine machine, VRC_AnimatorTrackingControl.TrackingType type,
                                                  AnimationClip emptyClip)
        {
            var enableBlinking = machine.AddState(type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? "EnableBlinking" : "DisableBlinking", SharedLayerUtils.GridPosition(type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? 0 : 2, 3));

            enableBlinking.motion             = emptyClip;
            enableBlinking.writeDefaultValues = _writeDefaultsForLogicalStates;
            var tracking = enableBlinking.AddStateMachineBehaviour <VRCAnimatorTrackingControl>();

            tracking.trackingEyes = type;
            return(enableBlinking);
        }