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>()); }
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>()); }
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 }); }