Revert "don't blend animations for otherAvatars"

This reverts commit faa272c67c.
This commit is contained in:
Atlante45 2017-03-08 14:08:33 -08:00
parent bb03e08e16
commit 8bf9b70915
4 changed files with 39 additions and 43 deletions

View file

@ -95,6 +95,12 @@ void CauterizedModel::createCollisionRenderItemSet() {
Model::createCollisionRenderItemSet(); Model::createCollisionRenderItemSet();
} }
// Called within Model::simulate call, below.
void CauterizedModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
Model::updateRig(deltaTime, parentTransform);
_needsUpdateClusterMatrices = true;
}
void CauterizedModel::updateClusterMatrices() { void CauterizedModel::updateClusterMatrices() {
PerformanceTimer perfTimer("CauterizedModel::updateClusterMatrices"); PerformanceTimer perfTimer("CauterizedModel::updateClusterMatrices");

View file

@ -37,6 +37,7 @@ public:
void createVisibleRenderItemSet() override; void createVisibleRenderItemSet() override;
void createCollisionRenderItemSet() override; void createCollisionRenderItemSet() override;
virtual void updateRig(float deltaTime, glm::mat4 parentTransform) override;
virtual void updateClusterMatrices() override; virtual void updateClusterMatrices() override;
void updateRenderItems() override; void updateRenderItems() override;

View file

@ -166,7 +166,7 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
_rig->computeMotionAnimationState(deltaTime, position, velocity, orientation, ccState); _rig->computeMotionAnimationState(deltaTime, position, velocity, orientation, ccState);
// evaluate AnimGraph animation and update jointStates. // evaluate AnimGraph animation and update jointStates.
Model::updateRig(deltaTime, parentTransform); CauterizedModel::updateRig(deltaTime, parentTransform);
Rig::EyeParameters eyeParams; Rig::EyeParameters eyeParams;
eyeParams.worldHeadOrientation = headParams.worldHeadOrientation; eyeParams.worldHeadOrientation = headParams.worldHeadOrientation;
@ -179,7 +179,7 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
_rig->updateFromEyeParameters(eyeParams); _rig->updateFromEyeParameters(eyeParams);
} else { } else {
Model::updateRig(deltaTime, parentTransform); CauterizedModel::updateRig(deltaTime, parentTransform);
// This is a little more work than we really want. // This is a little more work than we really want.
// //

View file

@ -1307,50 +1307,39 @@ void Rig::copyJointsIntoJointData(QVector<JointData>& jointDataVec) const {
void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) { void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
PerformanceTimer perfTimer("copyJoints"); PerformanceTimer perfTimer("copyJoints");
PROFILE_RANGE(simulation_animation_detail, "copyJoints"); PROFILE_RANGE(simulation_animation_detail, "copyJoints");
if (!_animSkeleton) { if (_animSkeleton && jointDataVec.size() == (int)_internalPoseSet._relativePoses.size()) {
return; // make a vector of rotations in absolute-geometry-frame
} const AnimPoseVec& absoluteDefaultPoses = _animSkeleton->getAbsoluteDefaultPoses();
if (jointDataVec.size() != (int)_internalPoseSet._relativePoses.size()) { std::vector<glm::quat> rotations;
// animations haven't fully loaded yet. rotations.reserve(absoluteDefaultPoses.size());
_internalPoseSet._relativePoses = _animSkeleton->getRelativeDefaultPoses(); const glm::quat rigToGeometryRot(glmExtractRotation(_rigToGeometryTransform));
} for (int i = 0; i < jointDataVec.size(); i++) {
const JointData& data = jointDataVec.at(i);
if (data.rotationSet) {
// JointData rotations are in absolute rig-frame so we rotate them to absolute geometry-frame
rotations.push_back(rigToGeometryRot * data.rotation);
} else {
rotations.push_back(absoluteDefaultPoses[i].rot());
}
}
// make a vector of rotations in absolute-geometry-frame // convert rotations from absolute to parent relative.
const AnimPoseVec& absoluteDefaultPoses = _animSkeleton->getAbsoluteDefaultPoses(); _animSkeleton->convertAbsoluteRotationsToRelative(rotations);
std::vector<glm::quat> rotations;
rotations.reserve(absoluteDefaultPoses.size()); // store new relative poses
const glm::quat rigToGeometryRot(glmExtractRotation(_rigToGeometryTransform)); const AnimPoseVec& relativeDefaultPoses = _animSkeleton->getRelativeDefaultPoses();
for (int i = 0; i < jointDataVec.size(); i++) { for (int i = 0; i < jointDataVec.size(); i++) {
const JointData& data = jointDataVec.at(i); const JointData& data = jointDataVec.at(i);
if (data.rotationSet) { _internalPoseSet._relativePoses[i].scale() = Vectors::ONE;
// JointData rotations are in absolute rig-frame so we rotate them to absolute geometry-frame _internalPoseSet._relativePoses[i].rot() = rotations[i];
rotations.push_back(rigToGeometryRot * data.rotation); if (data.translationSet) {
} else { // JointData translations are in scaled relative-frame so we scale back to regular relative-frame
rotations.push_back(absoluteDefaultPoses[i].rot()); _internalPoseSet._relativePoses[i].trans() = _invGeometryOffset.scale() * data.translation;
} else {
_internalPoseSet._relativePoses[i].trans() = relativeDefaultPoses[i].trans();
}
} }
} }
// convert rotations from absolute to parent relative.
_animSkeleton->convertAbsoluteRotationsToRelative(rotations);
// store new relative poses
const AnimPoseVec& relativeDefaultPoses = _animSkeleton->getRelativeDefaultPoses();
for (int i = 0; i < jointDataVec.size(); i++) {
const JointData& data = jointDataVec.at(i);
_internalPoseSet._relativePoses[i].scale() = Vectors::ONE;
_internalPoseSet._relativePoses[i].rot() = rotations[i];
if (data.translationSet) {
// JointData translations are in scaled relative-frame so we scale back to regular relative-frame
_internalPoseSet._relativePoses[i].trans() = _invGeometryOffset.scale() * data.translation;
} else {
_internalPoseSet._relativePoses[i].trans() = relativeDefaultPoses[i].trans();
}
}
// build absolute poses and copy to externalPoseSet
buildAbsoluteRigPoses(_internalPoseSet._relativePoses, _internalPoseSet._absolutePoses);
QWriteLocker writeLock(&_externalPoseSetLock);
_externalPoseSet = _internalPoseSet;
} }
void Rig::computeAvatarBoundingCapsule( void Rig::computeAvatarBoundingCapsule(