From fcc5eb9d0af9ffa31c1d76af2bcf0d53e7fad282 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 24 Sep 2014 16:37:55 -0700 Subject: [PATCH] Tuning of audio-driven mouths and brows to look better and not stay open --- interface/src/avatar/Head.cpp | 15 +++++++++++++-- interface/src/avatar/Head.h | 1 + interface/src/avatar/MyAvatar.cpp | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 20f1a59bcc..9c41cf8084 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -34,6 +34,7 @@ Head::Head(Avatar* owningAvatar) : _lastLoudness(0.0f), _longTermAverageLoudness(-1.0f), _audioAttack(0.0f), + _audioJawOpen(0.0f), _angularVelocity(0,0,0), _renderLookatVectors(false), _saccade(0.0f, 0.0f, 0.0f), @@ -157,11 +158,21 @@ void Head::simulate(float deltaTime, bool isMine, bool billboard) { } // use data to update fake Faceshift blendshape coefficients - const float JAW_OPEN_SCALE = 10.f; + const float JAW_OPEN_SCALE = 0.015f; + const float JAW_OPEN_RATE = 0.9f; + const float JAW_CLOSE_RATE = 0.90f; + float audioDelta = sqrtf(glm::max(_averageLoudness - _longTermAverageLoudness, 0.0f)) * JAW_OPEN_SCALE; + if (audioDelta > _audioJawOpen) { + _audioJawOpen += (audioDelta - _audioJawOpen) * JAW_OPEN_RATE; + } else { + _audioJawOpen *= JAW_CLOSE_RATE; + } + _audioJawOpen = glm::clamp(_audioJawOpen, 0.0f, 1.0f); + Application::getInstance()->getFaceshift()->updateFakeCoefficients(_leftEyeBlink, _rightEyeBlink, _browAudioLift, - glm::clamp(log(_averageLoudness) / JAW_OPEN_SCALE, 0.0f, 1.0f), + _audioJawOpen, _blendshapeCoefficients); } diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index a7186dc045..efcee9ed8d 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -130,6 +130,7 @@ private: float _lastLoudness; float _longTermAverageLoudness; float _audioAttack; + float _audioJawOpen; glm::vec3 _angularVelocity; bool _renderLookatVectors; glm::vec3 _saccade; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index a3fa6f525d..51f582c4f8 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -978,7 +978,7 @@ void MyAvatar::updateLookAtTargetAvatar() { howManyLookingAtMe++; // Have that avatar look directly at my camera // Philip TODO: correct to look at left/right eye - avatar->getHead()->setCorrectedLookAtPosition(Application::getInstance()->getCamera()->getPosition()); + avatar->getHead()->setCorrectedLookAtPosition(Application::getInstance()->getViewFrustum()->getPosition()); } else { avatar->getHead()->clearCorrectedLookAtPosition(); }