Пример #1
0
        public void ProcessExpressionAbs()
        {
            var a       = -1.5f;
            var b       = 0.0f;
            var c       = 0.2f;
            var resultA = Mathf.Abs(a);
            var resultB = Mathf.Abs(b);
            var resultC = Mathf.Abs(c);

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

            var absExpressionA = new VFXExpressionAbs(value_a);
            var absExpressionB = new VFXExpressionAbs(value_b);
            var absExpressionC = new VFXExpressionAbs(value_c);

            var context     = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation);
            var expressionA = context.Compile(absExpressionA);
            var expressionB = context.Compile(absExpressionB);
            var expressionC = context.Compile(absExpressionC);

            Assert.AreEqual(resultA, expressionA.Get <float>());
            Assert.AreEqual(resultB, expressionB.Get <float>());
            Assert.AreEqual(resultC, expressionC.Get <float>());
        }
Пример #2
0
        protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            // abs(frac(x*F))
            var res = new VFXExpressionAbs(VFXOperatorUtility.Frac(inputExpression[0] * inputExpression[1]));

            return(new[] { VFXOperatorUtility.Lerp(inputExpression[2], inputExpression[3], res) });
        }
        public void ProcessOperatorAbsInt([ValueSource("ProcessOperatorAbsInt_a")] int a)
        {
            var r       = Mathf.Abs(a);
            var value_a = new VFXValue <int>(a);

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

            Assert.AreEqual(r, resultExpression.Get <int>());
        }
Пример #4
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 });
        }