From 0a295fc258e9cdb620edd4b459630efe6dd4745f Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Fri, 14 Apr 2017 13:56:13 -0700 Subject: [PATCH 1/4] setBlendshapes will presist --- interface/src/avatar/SkeletonModel.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 1 + libraries/avatars/src/AvatarData.h | 6 ++++++ libraries/avatars/src/HeadData.cpp | 13 ++++++++++--- libraries/avatars/src/HeadData.h | 2 ++ libraries/render-utils/src/Model.cpp | 1 + 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 0c11fa456d..9f13efe3b8 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -242,7 +242,7 @@ void SkeletonModel::updateAttitude() { void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { updateAttitude(); if (fullUpdate) { - setBlendshapeCoefficients(_owningAvatar->getHead()->getBlendshapeCoefficients()); + setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); Model::simulate(deltaTime, fullUpdate); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 9802630cf5..20894104ff 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -967,6 +967,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) { const int coefficientsSize = sizeof(float) * numCoefficients; PACKET_READ_CHECK(FaceTrackerCoefficients, coefficientsSize); _headData->_blendshapeCoefficients.resize(numCoefficients); // make sure there's room for the copy! + _headData->_baseBlendshapeCoefficients.resize(numCoefficients); memcpy(_headData->_blendshapeCoefficients.data(), sourceBuffer, coefficientsSize); sourceBuffer += coefficientsSize; int numBytesRead = sourceBuffer - startSection; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 8319eb5249..79bcac5fcc 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -438,6 +438,12 @@ public: _headData->setBlendshapeCoefficients(blendshapeCoefficients); } } + + void setSummedBlendshapeCoefficients(QVector& blendshapeCoefficients) { + if (_headData) { + _headData->setSummedBlendshapeCoefficients(blendshapeCoefficients); + } + } // access to Head().set/getMousePitch (degrees) float getHeadPitch() const { return _headData->getBasePitch(); } diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 909c6a613e..59b1a209e7 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -38,7 +38,8 @@ HeadData::HeadData(AvatarData* owningAvatar) : _rightEyeBlink(0.0f), _averageLoudness(0.0f), _browAudioLift(0.0f), - _owningAvatar(owningAvatar) + _owningAvatar(owningAvatar), + _baseBlendshapeCoefficients(0, 0), { } @@ -86,17 +87,23 @@ static const QMap& getBlendshapesLookupMap() { return blendshapeLookupMap; } +const QVector& HeadData::getSummedBlendshapeCoefficients() { + for (int i = 0; i < _baseBlendshapeCoefficients.size(); i++) { + _blendshapeCoefficients[i] += _baseBlendshapeCoefficients[i]; + } + return _blendshapeCoefficients; +} void HeadData::setBlendshape(QString name, float val) { const auto& blendshapeLookupMap = getBlendshapesLookupMap(); - //Check to see if the named blendshape exists, and then set its value if it does auto it = blendshapeLookupMap.find(name); if (it != blendshapeLookupMap.end()) { if (_blendshapeCoefficients.size() <= it.value()) { _blendshapeCoefficients.resize(it.value() + 1); + _baseBlendshapeCoefficients.resize(it.value() + 1); } - _blendshapeCoefficients[it.value()] = val; + _baseBlendshapeCoefficients[it.value()] = val; } } diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index 6c468daefd..ec542fe6a1 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -59,6 +59,7 @@ public: void setBlendshape(QString name, float val); const QVector& getBlendshapeCoefficients() const { return _blendshapeCoefficients; } + const QVector& getSummedBlendshapeCoefficients(); void setBlendshapeCoefficients(const QVector& blendshapeCoefficients) { _blendshapeCoefficients = blendshapeCoefficients; } const glm::vec3& getLookAtPosition() const { return _lookAtPosition; } @@ -92,6 +93,7 @@ protected: float _browAudioLift; QVector _blendshapeCoefficients; + QVector _baseBlendshapeCoefficients; AvatarData* _owningAvatar; private: diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index c274d69af6..ec82b0f606 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -901,6 +901,7 @@ Blender::Blender(ModelPointer model, int blendNumber, const Geometry::WeakPointe } void Blender::run() { + qDebug() << "!!!!!!!!!!!!!!" << _blendshapeCoefficients; PROFILE_RANGE_EX(simulation_animation, __FUNCTION__, 0xFFFF0000, 0, { { "url", _model->getURL().toString() } }); QVector vertices, normals; if (_model) { From d215856b238f8cc896fabadf5a1ab0815eecd8f5 Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Fri, 14 Apr 2017 13:59:09 -0700 Subject: [PATCH 2/4] cleanup to blendshapes --- interface/src/avatar/SkeletonModel.cpp | 2 +- libraries/avatars/src/AvatarData.h | 6 ------ libraries/avatars/src/HeadData.cpp | 3 ++- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 9f13efe3b8..81a5bf38dc 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -242,7 +242,7 @@ void SkeletonModel::updateAttitude() { void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { updateAttitude(); if (fullUpdate) { - setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); + setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); Model::simulate(deltaTime, fullUpdate); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 79bcac5fcc..8319eb5249 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -438,12 +438,6 @@ public: _headData->setBlendshapeCoefficients(blendshapeCoefficients); } } - - void setSummedBlendshapeCoefficients(QVector& blendshapeCoefficients) { - if (_headData) { - _headData->setSummedBlendshapeCoefficients(blendshapeCoefficients); - } - } // access to Head().set/getMousePitch (degrees) float getHeadPitch() const { return _headData->getBasePitch(); } diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 59b1a209e7..6c0f0d3b5c 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -39,7 +39,7 @@ HeadData::HeadData(AvatarData* owningAvatar) : _averageLoudness(0.0f), _browAudioLift(0.0f), _owningAvatar(owningAvatar), - _baseBlendshapeCoefficients(0, 0), + _baseBlendshapeCoefficients(0, 0) { } @@ -96,6 +96,7 @@ const QVector& HeadData::getSummedBlendshapeCoefficients() { void HeadData::setBlendshape(QString name, float val) { const auto& blendshapeLookupMap = getBlendshapesLookupMap(); + //Check to see if the named blendshape exists, and then set its value if it does auto it = blendshapeLookupMap.find(name); if (it != blendshapeLookupMap.end()) { From 06c5fa05856524030e81ace3778f73e32acce8fe Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Fri, 14 Apr 2017 15:15:08 -0700 Subject: [PATCH 3/4] correctly resizing blendshapes vector --- libraries/avatars/src/HeadData.cpp | 5 ++++- libraries/render-utils/src/Model.cpp | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 6c0f0d3b5c..1e059e04ba 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -39,7 +40,7 @@ HeadData::HeadData(AvatarData* owningAvatar) : _averageLoudness(0.0f), _browAudioLift(0.0f), _owningAvatar(owningAvatar), - _baseBlendshapeCoefficients(0, 0) + _baseBlendshapeCoefficients(QVector(0, 0)) { } @@ -102,6 +103,8 @@ void HeadData::setBlendshape(QString name, float val) { if (it != blendshapeLookupMap.end()) { if (_blendshapeCoefficients.size() <= it.value()) { _blendshapeCoefficients.resize(it.value() + 1); + } + if (_baseBlendshapeCoefficients.size() <= it.value()) { _baseBlendshapeCoefficients.resize(it.value() + 1); } _baseBlendshapeCoefficients[it.value()] = val; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index ec82b0f606..c274d69af6 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -901,7 +901,6 @@ Blender::Blender(ModelPointer model, int blendNumber, const Geometry::WeakPointe } void Blender::run() { - qDebug() << "!!!!!!!!!!!!!!" << _blendshapeCoefficients; PROFILE_RANGE_EX(simulation_animation, __FUNCTION__, 0xFFFF0000, 0, { { "url", _model->getURL().toString() } }); QVector vertices, normals; if (_model) { From ffdbc12968257b527d4f3cbb2376ca9bc30bc94e Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Tue, 18 Apr 2017 12:20:03 -0700 Subject: [PATCH 4/4] copy into new vector --- libraries/avatars/src/HeadData.cpp | 23 ++++++++++++++++++----- libraries/avatars/src/HeadData.h | 1 + 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 1e059e04ba..271ce133a2 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -39,8 +39,9 @@ HeadData::HeadData(AvatarData* owningAvatar) : _rightEyeBlink(0.0f), _averageLoudness(0.0f), _browAudioLift(0.0f), - _owningAvatar(owningAvatar), - _baseBlendshapeCoefficients(QVector(0, 0)) + _baseBlendshapeCoefficients(QVector(0, 0.0f)), + _currBlendShapeCoefficients(QVector(0, 0.0f)), + _owningAvatar(owningAvatar) { } @@ -89,10 +90,22 @@ static const QMap& getBlendshapesLookupMap() { } const QVector& HeadData::getSummedBlendshapeCoefficients() { - for (int i = 0; i < _baseBlendshapeCoefficients.size(); i++) { - _blendshapeCoefficients[i] += _baseBlendshapeCoefficients[i]; + int maxSize = std::max(_baseBlendshapeCoefficients.size(), _blendshapeCoefficients.size()); + if (_currBlendShapeCoefficients.size() != maxSize) { + _currBlendShapeCoefficients.resize(maxSize); } - return _blendshapeCoefficients; + + for (int i = 0; i < maxSize; i++) { + if (i >= _baseBlendshapeCoefficients.size()) { + _currBlendShapeCoefficients[i] = _blendshapeCoefficients[i]; + } else if (i >= _blendshapeCoefficients.size()) { + _currBlendShapeCoefficients[i] = _baseBlendshapeCoefficients[i]; + } else { + _currBlendShapeCoefficients[i] = _baseBlendshapeCoefficients[i] + _blendshapeCoefficients[i]; + } + } + + return _currBlendShapeCoefficients; } void HeadData::setBlendshape(QString name, float val) { diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index ec542fe6a1..dbed0a6a65 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -94,6 +94,7 @@ protected: QVector _blendshapeCoefficients; QVector _baseBlendshapeCoefficients; + QVector _currBlendShapeCoefficients; AvatarData* _owningAvatar; private: