Esempio n. 1
0
        protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            VFXExpression lineDelta  = (inputExpression[1] - inputExpression[0]);
            VFXExpression lineLength = new VFXExpressionMax(VFXOperatorUtility.Dot(lineDelta, lineDelta), VFXValue.Constant(Mathf.Epsilon));
            VFXExpression t          = VFXOperatorUtility.Dot(inputExpression[2] - inputExpression[0], lineDelta);

            t = VFXOperatorUtility.Clamp(t / lineLength, VFXValue.Constant(0.0f), VFXValue.Constant(1.0f));

            VFXExpression pointOnLine  = (inputExpression[0] + VFXOperatorUtility.CastFloat(t, lineDelta.valueType) * lineDelta);
            VFXExpression lineDistance = VFXOperatorUtility.Distance(inputExpression[2], pointOnLine);

            return(new VFXExpression[] { pointOnLine, lineDistance });
        }
Esempio n. 2
0
        protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            // https://thebookofshaders.com/edit.php#05/cubicpulse.frag
            // x0 = clamp(x, c - w, c + w)
            // 1.0 - (abs(x0 - c) / w)^2 * (3.0 - 2.0 * abs(x0 - c) / w)

            //first, clamp the input
            var clamp_x = VFXOperatorUtility.Clamp(inputExpression[0], inputExpression[1] - inputExpression[2], inputExpression[1] + inputExpression[2]);

            var a   = new VFXExpressionAbs(clamp_x - inputExpression[1]) / inputExpression[2];
            var b   = new VFXValue <float>(3.0f) - new VFXExpressionMul(new VFXValue <float>(2.0f), a);
            var res = new VFXValue <float>(1.0f) - a * a * b;

            return(new[] { res });
        }
Esempio n. 3
0
        protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            VFXExpression input;

            if (Clamp)
            {
                input = VFXOperatorUtility.Clamp(inputExpression[0], inputExpression[1], inputExpression[2]);
            }
            else
            {
                input = inputExpression[0];
            }

            return(new[] { VFXOperatorUtility.Fit(input, inputExpression[1], inputExpression[2], inputExpression[3], inputExpression[4]) });
        }
        public void ProcessOperatorClamp()
        {
            var a      = -1.5f;
            var b      = 0.2f;
            var c      = 0.3f;
            var result = Mathf.Clamp(a, b, c);

            var value_a = new VFXValue <float>(a);
            var value_b = new VFXValue <float>(b);
            var value_c = new VFXValue <float>(c);

            var expression = VFXOperatorUtility.Clamp(value_a, value_b, value_c);

            var context          = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation);
            var resultExpression = context.Compile(expression);

            Assert.AreEqual(result, resultExpression.Get <float>());
        }
Esempio n. 5
0
        protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            VFXExpression clamped = VFXOperatorUtility.Clamp(inputExpression[0], inputExpression[1], inputExpression[2]);

            return(new[] { VFXOperatorUtility.Fit(clamped, inputExpression[1], inputExpression[2], inputExpression[3], inputExpression[4]) });
        }
Esempio n. 6
0
 protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
 {
     return(new[] { VFXOperatorUtility.Clamp(inputExpression[0], inputExpression[1], inputExpression[2], false) });
 }