mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 00:56:45 +02:00
Working on blendshape coefficients.
This commit is contained in:
parent
9c4143e1be
commit
e97a912d97
3 changed files with 26 additions and 17 deletions
|
@ -62,24 +62,20 @@ void Head::simulate(float deltaTime, bool isMine) {
|
||||||
|
|
||||||
// Update audio trailing average for rendering facial animations
|
// Update audio trailing average for rendering facial animations
|
||||||
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
||||||
|
Visage* visage = Application::getInstance()->getVisage();
|
||||||
if (isMine) {
|
if (isMine) {
|
||||||
_isFaceshiftConnected = faceshift->isActive();
|
_isFaceshiftConnected = false;
|
||||||
|
if (faceshift->isActive()) {
|
||||||
|
_blendshapeCoefficients = faceshift->getBlendshapeCoefficients();
|
||||||
|
_isFaceshiftConnected = true;
|
||||||
|
|
||||||
|
} else if (visage->isActive()) {
|
||||||
|
_blendshapeCoefficients = visage->getBlendshapeCoefficients();
|
||||||
|
_isFaceshiftConnected = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMine && faceshift->isActive()) {
|
if (!_isFaceshiftConnected) {
|
||||||
const float EYE_OPEN_SCALE = 0.5f;
|
|
||||||
_leftEyeBlink = faceshift->getLeftBlink() - EYE_OPEN_SCALE * faceshift->getLeftEyeOpen();
|
|
||||||
_rightEyeBlink = faceshift->getRightBlink() - EYE_OPEN_SCALE * faceshift->getRightEyeOpen();
|
|
||||||
|
|
||||||
// set these values based on how they'll be used. if we use faceshift in the long term, we'll want a complete
|
|
||||||
// mapping between their blendshape coefficients and our avatar features
|
|
||||||
const float MOUTH_SIZE_SCALE = 2500.0f;
|
|
||||||
_averageLoudness = faceshift->getMouthSize() * faceshift->getMouthSize() * MOUTH_SIZE_SCALE;
|
|
||||||
const float BROW_HEIGHT_SCALE = 0.005f;
|
|
||||||
_browAudioLift = faceshift->getBrowUpCenter() * BROW_HEIGHT_SCALE;
|
|
||||||
_blendshapeCoefficients = faceshift->getBlendshapeCoefficients();
|
|
||||||
|
|
||||||
} else if (!_isFaceshiftConnected) {
|
|
||||||
// Update eye saccades
|
// Update eye saccades
|
||||||
const float AVERAGE_MICROSACCADE_INTERVAL = 0.50f;
|
const float AVERAGE_MICROSACCADE_INTERVAL = 0.50f;
|
||||||
const float AVERAGE_SACCADE_INTERVAL = 4.0f;
|
const float AVERAGE_SACCADE_INTERVAL = 4.0f;
|
||||||
|
|
|
@ -67,8 +67,15 @@ void Visage::update() {
|
||||||
_headRotation = glm::quat(glm::vec3(-_data->faceRotation[0], -_data->faceRotation[1], _data->faceRotation[2]));
|
_headRotation = glm::quat(glm::vec3(-_data->faceRotation[0], -_data->faceRotation[1], _data->faceRotation[2]));
|
||||||
_headTranslation = (glm::vec3(_data->faceTranslation[0], _data->faceTranslation[1], _data->faceTranslation[2]) -
|
_headTranslation = (glm::vec3(_data->faceTranslation[0], _data->faceTranslation[1], _data->faceTranslation[2]) -
|
||||||
_headOrigin) * TRANSLATION_SCALE;
|
_headOrigin) * TRANSLATION_SCALE;
|
||||||
_estimatedEyePitch = glm::degrees(_data->gazeDirection[1]);
|
_estimatedEyePitch = glm::degrees(-_data->gazeDirection[1]);
|
||||||
_estimatedEyeYaw = glm::degrees(_data->gazeDirection[0]);
|
_estimatedEyeYaw = glm::degrees(-_data->gazeDirection[0]);
|
||||||
|
|
||||||
|
for (int i = 0; i < _data->actionUnitCount; i++) {
|
||||||
|
if (!_data->actionUnitsUsed[i]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
qDebug() << _data->actionUnitsNames[i] << _data->actionUnits[i];
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#ifndef __interface__Visage__
|
#ifndef __interface__Visage__
|
||||||
#define __interface__Visage__
|
#define __interface__Visage__
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/quaternion.hpp>
|
#include <glm/gtc/quaternion.hpp>
|
||||||
|
|
||||||
|
@ -32,6 +34,8 @@ public:
|
||||||
float getEstimatedEyePitch() const { return _estimatedEyePitch; }
|
float getEstimatedEyePitch() const { return _estimatedEyePitch; }
|
||||||
float getEstimatedEyeYaw() const { return _estimatedEyeYaw; }
|
float getEstimatedEyeYaw() const { return _estimatedEyeYaw; }
|
||||||
|
|
||||||
|
const std::vector<float>& getBlendshapeCoefficients() const { return _blendshapeCoefficients; }
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
|
@ -48,6 +52,8 @@ private:
|
||||||
|
|
||||||
float _estimatedEyePitch;
|
float _estimatedEyePitch;
|
||||||
float _estimatedEyeYaw;
|
float _estimatedEyeYaw;
|
||||||
|
|
||||||
|
std::vector<float> _blendshapeCoefficients;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* defined(__interface__Visage__) */
|
#endif /* defined(__interface__Visage__) */
|
||||||
|
|
Loading…
Reference in a new issue