VFXExpression AngleFadeSimplification(VFXExpression angleFadeExp) { angleFadeExp = angleFadeExp / VFXValue.Constant(new Vector2(180.0f, 180.0f)); var angleStart = new VFXExpressionExtractComponent(angleFadeExp, 0); var angleEnd = new VFXExpressionExtractComponent(angleFadeExp, 1); var range = new VFXExpressionMax(VFXValue.Constant(0.0001f), angleEnd - angleStart); var simplifiedAngleFade = new VFXExpressionCombine( VFXValue.Constant(1.0f) - (VFXValue.Constant(0.25f) - angleStart) / range, VFXValue.Constant(-0.25f) / range); return(simplifiedAngleFade); }
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 }); }
public void ProcessExpressionMinMax() { var a = -1.5f; var b = 0.2f; var resultA = Mathf.Min(a, b); var resultB = Mathf.Max(a, b); var value_a = new VFXValue <float>(a); var value_b = new VFXValue <float>(b); var expressionA = new VFXExpressionMin(value_a, value_b); var expressionB = new VFXExpressionMax(value_a, value_b); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpressionA = context.Compile(expressionA); var resultExpressionB = context.Compile(expressionB); Assert.AreEqual(resultA, resultExpressionA.Get <float>()); Assert.AreEqual(resultB, resultExpressionB.Get <float>()); Assert.Greater(resultExpressionB.Get <float>(), resultExpressionA.Get <float>()); }