Spaces:
Runtime error
Runtime error
File size: 2,556 Bytes
b6ec289 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import {
AnimationClip,
BooleanKeyframeTrack,
ColorKeyframeTrack,
NumberKeyframeTrack,
Vector3,
VectorKeyframeTrack
} from 'three';
var fps = 60
function modifiedKey(key) {
if (["eyeLookDownLeft", "eyeLookDownRight", "eyeLookInLeft", "eyeLookInRight", "eyeLookOutLeft", "eyeLookOutRight", "eyeLookUpLeft", "eyeLookUpRight"].includes(key)) {
return key
}
if (key.endsWith("Right")) {
return key.replace("Right", "_R");
}
if (key.endsWith("Left")) {
return key.replace("Left", "_L");
}
return key;
}
function createAnimation (recordedData, morphTargetDictionary, bodyPart) {
// console.log("----morphTargetDictionary", morphTargetDictionary)
if (recordedData.length != 0) {
let animation = []
for (let i = 0; i < Object.keys(morphTargetDictionary).length; i++) {
animation.push([])
}
let time = []
let finishedFrames = 0
recordedData.forEach((d, i) => {
Object.entries(d.blendshapes).forEach(([key, value]) => {
if (! (modifiedKey(key) in morphTargetDictionary)) {return};
if (key == 'mouthShrugUpper') {
value += 0.4;
}
animation[morphTargetDictionary[modifiedKey(key)]].push(value)
});
time.push(finishedFrames / fps)
finishedFrames++
})
// console.log("-----animation", animation);
let tracks = []
let flag = false;
//create morph animation
Object.entries(recordedData[0].blendshapes).forEach(([key, value]) => {
if (! (modifiedKey(key) in morphTargetDictionary)) {return};
let i = morphTargetDictionary[modifiedKey(key)]
// if (bodyPart === "HG_TeethLower") {
// if (flag === true)
// return;
// if(key === 'jawOpen') {
// let track2 = new NumberKeyframeTrack(`HG_TeethLower.morphTargetInfluences[${i}]`, time, animation[i])
// tracks.push(track2)
// flag = true
// }
// } else {
let track = new NumberKeyframeTrack(`${bodyPart}.morphTargetInfluences[${i}]`, time, animation[i])
tracks.push(track)
// }
// if (key === "jawOpen") {
// let track2 = new NumberKeyframeTrack(`HG_TeethLower.morphTargetInfluences[${i}]`, time, animation[i])
// tracks.push(track2)
// console.log("----jawOpen Track", track2);
// }
});
const clip = new AnimationClip('animation', -1, tracks);
return clip
}
return null
}
export default createAnimation; |