private void InitializeMachineFor(Machinist machine, string proxyParam, string smoothingParam, string zeroClip, string oneClip)
        {
            var proxyTree = InterpolationTree(proxyParam, zeroClip, oneClip);

            RegisterBlendTreeAsAsset(_animatorController, proxyTree);

            var smoothingTree = InterpolationTree(smoothingParam, zeroClip, oneClip);

            RegisterBlendTreeAsAsset(_animatorController, smoothingTree);

            var factorTree = new BlendTree
            {
                name                   = "autoBT_Factor_" + proxyParam + "",
                blendParameter         = SharedLayerUtils.HaiGestureComboSmoothingFactor,
                blendType              = BlendTreeType.Simple1D,
                minThreshold           = 0,
                maxThreshold           = 1,
                useAutomaticThresholds = true,
                children               = new[]
                {
                    new ChildMotion {
                        motion = proxyTree, timeScale = 1, threshold = 0
                    },
                    new ChildMotion {
                        motion = smoothingTree, timeScale = 1, threshold = 1
                    }
                },
                hideFlags = HideFlags.HideInHierarchy
            };

            RegisterBlendTreeAsAsset(_animatorController, factorTree);

            machine.NewState("Interpolating", 1, 1)
            .WithAnimation(factorTree)
            .WithWriteDefaultsSetTo(_writeDefaultsForAnimatedAnimatorParameterStates)
            .Drives(new FloatParameterist(SharedLayerUtils.HaiGestureComboSmoothingFactor), DefaultSmoothingFactor);
        }