public override NewBlendableTransform GetBlendableTransformOnFrame(int hkxBoneIndex, float frame)
        {
            var frameRatio = frame % 1;

            frame = frame % FrameCount;
            if (frameRatio != 0)
            {
                var blendFrom = Frames[(int)Math.Floor(frame)].BoneTransforms[hkxBoneIndex];
                var blendTo   = Frames[(int)Math.Ceiling(frame)].BoneTransforms[hkxBoneIndex];
                return(NewBlendableTransform.Lerp(blendFrom, blendTo, frameRatio));
            }
            else
            {
                return(Frames[(int)frame].BoneTransforms[hkxBoneIndex]);
            }
        }
        public override NewBlendableTransform GetTransformOnFrame(int transformTrackIndex, float frame, bool enableLooping)
        {
            var frameRatio = frame % 1;

            if (enableLooping)
            {
                frame = frame % FrameCount;
            }
            else
            {
                frame = Math.Min(frame, FrameCount);
            }

            if (frameRatio != 0)
            {
                var blendFrom = Frames[(int)Math.Floor(frame)].BoneTransforms[transformTrackIndex];
                var blendTo   = Frames[(int)Math.Ceiling(frame)].BoneTransforms[transformTrackIndex];
                return(NewBlendableTransform.Lerp(blendFrom, blendTo, frameRatio));
            }
            else
            {
                return(Frames[(int)frame].BoneTransforms[transformTrackIndex]);
            }
        }