Ejemplo n.º 1
0
    /// <summary>
    /// 現在の表情を適用
    /// </summary>
    private void UpdateEmotion()
    {
        if (!blendShapeProxy)
        {
            return;
        }

        if (!randomEmotion)
        {
            return;                     // 現状、ランダムが解除されていたら何もしない(戻さない)
        }
        var blendShapes = new List <KeyValuePair <BlendShapeKey, float> >();

        int index = 0;

        foreach (var shape in EmotionPresets)
        {
            float val = 0f;
            // 現在選ばれている表情のみ値を入れ、他はゼロとする
            if (index == emotionIndex)
            {
                val = emotionRate;
            }
            blendShapes.Add(new KeyValuePair <BlendShapeKey, float>(BlendShapeKey.CreateFromPreset(shape), val));
            index++;
        }
        blendShapeProxy.SetValues(blendShapes);

        UpdateUI();
    }
Ejemplo n.º 2
0
        private void OnDisable()
        {
            BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.A), 0);

            Debug.Log("teste");
            StopCoroutine(m_coroutine);
        }
Ejemplo n.º 3
0
        private void LateUpdate()
        {
            _currentAngle += _angluarVelocity * Time.deltaTime * Mathf.Deg2Rad;

            var x = Mathf.Cos(_currentAngle) * (_sphereOrbitalRadius + _orbitalRadius.value);
            var z = Mathf.Sin(_currentAngle) * (_sphereOrbitalRadius + _orbitalRadius.value);
            var y = (_sphereInitialHeight + _verticalPosition.value) + _sphereMovableRangeInVertical * Mathf.Cos(_currentAngle / 3);

            if (_lookStraightAheadToggle.isOn)
            {
                if (_vrmModel != null)
                {
                    // Make eyes static
                    if (_lookAtBone)
                    {
                        _vrmModel.GetComponent<VRMLookAtBoneApplyer>().LeftEye.Transform = null;
                        _vrmModel.GetComponent<VRMLookAtBoneApplyer>().RightEye.Transform = null;
                    }
                    else
                    {
                        _vrmModel.GetComponent<VRMLookAtBlendShapeApplyer>().m_notSetValueApply = true;

                        var blednShapeProxy = _vrmModel.GetComponent<VRMBlendShapeProxy>();
                        blednShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.LookUp), 0.0f);
                        blednShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.LookDown), 0.0f);
                        blednShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.LookLeft), 0.0f);
                        blednShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.LookRight), 0.0f);
                    }
                }
            }

            transform.localPosition = new Vector3(x, y, z);

            // Fly-through viewpoint (virtual camera)
            if (_bvhGameObject != null)
            {
                if (_vrmModel != null)
                {
                    var tLookAt = _vrmModel.GetComponent<VRMLookAtHead>().Head.position;
                    transform.LookAt(new Vector3(tLookAt.x, tLookAt.y, tLookAt.z));
                }
                else
                {
                    transform.LookAt(new Vector3(0.0f, 1.2f, 0.0f));
                }

            }
            else
            {
                transform.LookAt(new Vector3(0.0f, 1.2f, 0.0f));
            }

        } // update
 void Update()
 {
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.A), Lip_A);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.I), Lip_I);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.U), Lip_U);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.E), Lip_E);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.O), Lip_O);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), Blink);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), Expression_Joy);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), Expression_Angry);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), Expression_Sorrow);
     m_proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), Expression_Fun);
 }
Ejemplo n.º 5
0
    protected IEnumerator BlinkRoutine()
    {
        while (true)
        {
            var waitTime = Time.time + Random.value * interlavo;
            while (waitTime > Time.time)
            {
                if (Request)
                {
                    m_request = false;
                    break;
                }
                yield return(null);
            }

            // close
            var value      = 0.0f;
            var closeSpeed = 1.0f / m_closeSeconds;
            while (true)
            {
                value += Time.deltaTime * closeSpeed;
                if (value >= 1.0f)
                {
                    break;
                }

                BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), value);
                yield return(null);
            }
            BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 1.0f);

            // wait...
            yield return(new WaitForSeconds(closingTime));

            // open
            value = 1.0f;
            var openSpeed = 1.0f / m_openingSeconds;
            while (true)
            {
                value -= Time.deltaTime * openSpeed;
                if (value < 0)
                {
                    break;
                }

                BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), value);
                yield return(null);
            }
            BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 0);
        }
    }
Ejemplo n.º 6
0
    /// <summary>
    /// Sets the viseme to morph target.
    /// </summary>
    void SetVisemeToMorphTarget(OVRLipSync.Frame frame)
    {
        if (!proxy)
        {
            return;
        }

        for (int i = 0; i < visemeToBlendTargets.Length; i++)
        {
            if (visemeToBlendTargets[i] != -1)
            {
                proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset((BlendShapePreset)visemeToBlendTargets[i]), Mathf.Min(1.0f, frame.Visemes[i] * LipSyncSensitivity));
            }
        }
    }
Ejemplo n.º 7
0
        IEnumerator RoutineNest(BlendShapePreset preset, float velocity, float wait)
        {
            for (var value = 0.0f; value <= 1.0f; value += velocity)
            {
                BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(preset), value);
                yield return(null);
            }
            BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(preset), 1.0f);
            yield return(new WaitForSeconds(wait));

            for (var value = 1.0f; value >= 0; value -= velocity)
            {
                BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(preset), value);
                yield return(null);
            }
            BlendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(preset), 0);
            yield return(new WaitForSeconds(wait * 2));
        }
Ejemplo n.º 8
0
        static void OnDefaultBlend(OVRLipSync.Frame frame, VRMBlendShapeProxy vrmBlendShapeProxy)
        {
            var visemes = new float[visemeToBlendTargets.Length];

            Array.Copy(frame.Visemes, (int)OVRLipSync.Viseme.aa, visemes, 1, visemes.Length - 1);
            visemes[0] = frame.Visemes[(int)OVRLipSync.Viseme.sil];
            var sum = visemes.Sum();

            if (sum <= float.Epsilon)
            {
                visemes[0] = 1;
            }
            else
            {
                for (int i = 0; i < visemes.Length; ++i)
                {
                    visemes[i] /= sum;
                }
            }
            for (int i = 0; i < visemes.Length; ++i)
            {
                vrmBlendShapeProxy.AccumulateValue(BlendShapeKey.CreateFromPreset(visemeToBlendTargets[i]), visemes[i]);
            }
        }
Ejemplo n.º 9
0
 private static BlendShapeKey CreateKey(string name) =>
 _presets.ContainsKey(name)
         ? BlendShapeKey.CreateFromPreset(_presets[name])
         : BlendShapeKey.CreateUnknown(name);
Ejemplo n.º 10
0
 public void MixPresets(string presetName, BlendShapePreset[] presets, float[] values)
 {
     MixPresets(presetName, presets.Select(d => BlendShapeKey.CreateFromPreset(d)).ToArray(), values);
 }
Ejemplo n.º 11
0
 public void SetFace(BlendShapePreset preset, float strength, bool stopBlink)
 {
     SetFace(BlendShapeKey.CreateFromPreset(preset), strength, stopBlink);
 }
Ejemplo n.º 12
0
    /// <summary>
    /// まばたき
    /// </summary>
    private void Blink()
    {
        if (!blendShapeProxy)
        {
            return;
        }

        float now = Time.timeSinceLevelLoad;
        float span;

        BlendShapeKey blinkShapeKey = BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink);

        // 表情が笑顔の時は目が閉じられるため、まばたきは無効とする
        if (EmotionPresets[emotionIndex] == BlendShapePreset.Joy)
        {
            blinkState = BlinkState.None;
            blendShapeProxy.ImmediatelySetValue(blinkShapeKey, 0f);
        }

        // まばたきの状態遷移
        switch (blinkState)
        {
        case BlinkState.Closing:
            span = now - lastBlinkTime;
            if (span > BlinkTime)
            {
                blinkState = BlinkState.Opening;
                blendShapeProxy.ImmediatelySetValue(blinkShapeKey, 1f);
            }
            else
            {
                blendShapeProxy.ImmediatelySetValue(blinkShapeKey, (span / BlinkTime));
            }
            break;

        case BlinkState.Opening:
            span = now - lastBlinkTime - BlinkTime;
            if (span > BlinkTime)
            {
                blinkState = BlinkState.None;
                blendShapeProxy.ImmediatelySetValue(blinkShapeKey, 0f);
            }
            else
            {
                blendShapeProxy.ImmediatelySetValue(blinkShapeKey, (1f - span) / BlinkTime);
            }
            break;

        default:
            if (now >= nextBlinkTime)
            {
                lastBlinkTime = now;
                if (Random.value < 0.2f)
                {
                    nextBlinkTime = now;        // 20%の確率で連続まばたき
                }
                else
                {
                    nextBlinkTime = now + Random.Range(1f, 10f);
                }
                blinkState = BlinkState.Closing;
            }
            break;
        }
    }
Ejemplo n.º 13
0
 void SetOpenEyes()
 {
     proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 0f);
 }
Ejemplo n.º 14
0
 void SetHalfCloseEyes()
 {
     proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 0.7f);
 }
        void Update()
        {
            if (openSeeExpression == null || vrmBlendShapeProxy == null)
            {
                return;
            }
            float rightEyeOpen = 1f;
            float leftEyeOpen  = 1f;

            if (openSee != null)
            {
                var openSeeData = openSee.trackingData;
                if (openSeeData == null || openSeeData.Length < 1)
                {
                    return;
                }
                int idx = -1;
                int i   = 0;
                foreach (var item in openSeeData)
                {
                    if (item.id == openSeeExpression.faceId)
                    {
                        idx = i;
                    }
                    i++;
                }
                if (idx > -1)
                {
                    rightEyeOpen = openSeeData[idx].rightEyeOpen;
                    leftEyeOpen  = openSeeData[idx].leftEyeOpen;
                }
            }
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Neutral), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_R), 0f);
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_L), 0f);
            if (openSeeExpression.expression == expressionFun)
            {
                vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), 1f);
                return;
            }
            else if (openSeeExpression.expression == expressionSorrow)
            {
                vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), 1f);
                return;
            }
            else if (openSeeExpression.expression == expressionAngry)
            {
                vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 1f);
                return;
            }
            else if (openSeeExpression.expression == expressionJoy)
            {
                vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 1f);
                return;
            }
            else
            {
                /*if (rightEyeOpen < 0.05) {
                 *  vrmBlendShapeProxy.ImmediatelySetValue(new BlendShapeKey(BlendShapePreset.Blink_R), 1f);
                 * }
                 * if (leftEyeOpen < 0.05) {
                 *  vrmBlendShapeProxy.ImmediatelySetValue(new BlendShapeKey(BlendShapePreset.Blink_L), 1f);
                 * }*/
            }
            vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Neutral), 1f);
        }