public static GpuInstancedAnimationBoneFrame Lerp(GpuInstancedAnimationBoneFrame a, GpuInstancedAnimationBoneFrame b, float factor) { GpuInstancedAnimationBoneFrame frame = new GpuInstancedAnimationBoneFrame(); frame.localPosition = Vector3.Lerp(a.localPosition, b.localPosition, factor); frame.localForward = Vector3.Lerp(a.localForward, b.localForward, factor); return(frame); }
private GpuInstancedAnimationBoneFrame GetBoneFrame(int frame, int boneIndex) { int frameIndex = frame * bones.Count + boneIndex; if (frameIndex >= 0 && frameIndex < boneFrames.Count) { GpuInstancedAnimationBoneFrame blendBoneFrame = boneFrames[frameIndex]; return(blendBoneFrame); } return(new GpuInstancedAnimationBoneFrame()); }
public GpuInstancedAnimationBoneFrame GetBoneFrame(string boneName) { GpuInstancedAnimationBone bone = GetBone(boneName); if (bone != null) { int currentFrame = 0; if (mCurrentAnimationClip != null) { currentFrame = mCurrentAnimationClip.RealFrame; } GpuInstancedAnimationBoneFrame previousBoneFrame = new GpuInstancedAnimationBoneFrame(); GpuInstancedAnimationBoneFrame boneFrame = GetBoneFrame(currentFrame, bone.index); if ((mFadeBegin || mFadeEnd) && mPreviousAnimationClip != null) { previousBoneFrame = GetBoneFrame(mPreviousAnimationClip.RealFrame, bone.index); boneFrame = GpuInstancedAnimationBoneFrame.Lerp(previousBoneFrame, boneFrame, mFadeStrength); } if (mBlendAnimationClip != null) { GpuInstancedAnimationBoneFrame blendBoneFrame = GetBoneFrame(mBlendAnimationClip.RealFrame, bone.index); if ((mFadeBegin || mFadeEnd) && mPreviousAnimationClip != null) { blendBoneFrame = GpuInstancedAnimationBoneFrame.Lerp(previousBoneFrame, blendBoneFrame, mFadeStrength); } if (mBlendBegin || mBlendEnd) { blendBoneFrame = GpuInstancedAnimationBoneFrame.Lerp(boneFrame, blendBoneFrame, mBlendFadeStrength); } float blendWeight = bone.blendWeight; float factor = Mathf.Abs(1 - blendWeight - (int)blendDirection); boneFrame = GpuInstancedAnimationBoneFrame.Lerp(boneFrame, blendBoneFrame, factor); } return(boneFrame); } return(new GpuInstancedAnimationBoneFrame()); }