internal void Setup(Transform transform, ILookAtEyeDirectionProvider eyeDirectionProvider, ILookAtEyeDirectionApplicable eyeDirectionApplicable)
        {
            if (ExpressionAvatar == null)
            {
#if VRM_DEVELOP
                if (m_debugCount++ == 0)
                {
                    Debug.LogWarning($"{nameof(VRM10ControllerExpression)}.{nameof(ExpressionAvatar)} is null.");
                }
#endif
                return;
            }

            Restore();

            _merger = new ExpressionMerger(ExpressionAvatar.Clips, transform);
            _keys   = ExpressionAvatar.Clips.Select(ExpressionKey.CreateFromClip).ToList();
            var oldInputWeights = _inputWeights;
            _inputWeights = _keys.ToDictionary(x => x, x => 0f);
            foreach (var key in _keys)
            {
                // remain user input weights.
                if (oldInputWeights.ContainsKey(key))
                {
                    _inputWeights[key] = oldInputWeights[key];
                }
            }
            _actualWeights          = _keys.ToDictionary(x => x, x => 0f);
            _validator              = ExpressionValidatorFactory.Create(ExpressionAvatar);
            _eyeDirectionProvider   = eyeDirectionProvider;
            _eyeDirectionApplicable = eyeDirectionApplicable;
        }
        internal void Restore()
        {
            _merger?.RestoreMaterialInitialValues();
            _merger = null;

            _eyeDirectionApplicable?.Restore();
            _eyeDirectionApplicable = null;
        }
示例#3
0
        public void OnStart(Transform transform)
        {
            if (ExpressionAvatar != null)
            {
                if (m_merger == null)
                {
                    m_merger = new ExpressionMerger(ExpressionAvatar.Clips, transform);
                }

                Accumulator.OnStart(ExpressionAvatar);
            }
        }
示例#4
0
        internal Vrm10RuntimeExpression(Vrm10Instance target, ILookAtEyeDirectionProvider eyeDirectionProvider, ILookAtEyeDirectionApplicable eyeDirectionApplicable)
        {
            Restore();

            _merger = new ExpressionMerger(target.Vrm.Expression, target.transform);
            _keys   = target.Vrm.Expression.Clips.Select(x => target.Vrm.Expression.CreateKey(x.Clip)).ToList();
            var oldInputWeights = _inputWeights;

            _inputWeights = _keys.ToDictionary(x => x, x => 0f);
            foreach (var key in _keys)
            {
                // remain user input weights.
                if (oldInputWeights.ContainsKey(key))
                {
                    _inputWeights[key] = oldInputWeights[key];
                }
            }
            _actualWeights          = _keys.ToDictionary(x => x, x => 0f);
            _validator              = ExpressionValidatorFactory.Create(target.Vrm.Expression);
            _eyeDirectionProvider   = eyeDirectionProvider;
            _eyeDirectionApplicable = eyeDirectionApplicable;
        }
        internal void Setup(VRM10Controller target, ILookAtEyeDirectionProvider eyeDirectionProvider, ILookAtEyeDirectionApplicable eyeDirectionApplicable)
        {
            Restore();

            _merger = new ExpressionMerger(Clips, target.transform);
            _keys   = Clips.Select(ExpressionKey.CreateFromClip).ToList();
            var oldInputWeights = _inputWeights;

            _inputWeights = _keys.ToDictionary(x => x, x => 0f);
            foreach (var key in _keys)
            {
                // remain user input weights.
                if (oldInputWeights.ContainsKey(key))
                {
                    _inputWeights[key] = oldInputWeights[key];
                }
            }
            _actualWeights          = _keys.ToDictionary(x => x, x => 0f);
            _validator              = ExpressionValidatorFactory.Create(this);
            _eyeDirectionProvider   = eyeDirectionProvider;
            _eyeDirectionApplicable = eyeDirectionApplicable;
        }
示例#6
0
        public void OnStart(Transform transform)
        {
            if (ExpressionAvatar != null)
            {
                if (m_merger == null)
                {
                    m_merger = new ExpressionMerger(ExpressionAvatar.Clips, transform);
                }
            }

            expressionKeyWeights = m_merger.ExpressionKeys.ToDictionary(x => x, x => 0.0f);

            m_blinkExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Blink));
            m_lookAtExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.LookUp));
            m_lookAtExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.LookDown));
            m_lookAtExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.LookLeft));
            m_lookAtExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.LookRight));
            m_mouthExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Aa));
            m_mouthExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Ih));
            m_mouthExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Ou));
            m_mouthExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Ee));
            m_mouthExpressionKeys.Add(m_merger.ExpressionKeys.FirstOrDefault(x => x.Preset == VrmLib.ExpressionPreset.Oh));
        }