public void ProcessOperatorSaturate() { var a = -1.5f; var b = 0.2f; var c = 1.3f; var resultA = Mathf.Clamp(a, 0.0f, 1.0f); var resultB = Mathf.Clamp(b, 0.0f, 1.0f); var resultC = Mathf.Clamp(c, 0.0f, 1.0f); var value_a = new VFXValue <float>(a); var value_b = new VFXValue <float>(b); var value_c = new VFXValue <float>(c); var expressionA = VFXOperatorUtility.Saturate(value_a); var expressionB = VFXOperatorUtility.Saturate(value_b); var expressionC = VFXOperatorUtility.Saturate(value_c); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpressionA = context.Compile(expressionA); var resultExpressionB = context.Compile(expressionB); var resultExpressionC = context.Compile(expressionC); Assert.AreEqual(resultA, resultExpressionA.Get <float>()); Assert.AreEqual(resultB, resultExpressionB.Get <float>()); Assert.AreEqual(resultC, resultExpressionC.Get <float>()); }
protected VFXExpression CalculateVolumeFactor(PositionMode positionMode, int radiusIndex, int thicknessIndex) { VFXExpression factor = VFXValue.Constant(0.0f); switch (positionMode) { case PositionMode.Surface: factor = VFXValue.Constant(0.0f); break; case PositionMode.Volume: factor = VFXValue.Constant(1.0f); break; case PositionMode.ThicknessAbsolute: case PositionMode.ThicknessRelative: { var thickness = inputSlots[thicknessIndex].GetExpression(); if (positionMode == PositionMode.ThicknessAbsolute) { var radius = inputSlots[radiusIndex][1].GetExpression(); thickness = thickness / radius; } factor = VFXOperatorUtility.Saturate(thickness); break; } } return(new VFXExpressionPow(VFXValue.Constant(1.0f) - factor, VFXValue.Constant(thicknessDimensions))); }
protected VFXExpression CalculateVolumeFactor(PositionMode positionMode, VFXExpression radius, VFXExpression thickness) { VFXExpression factor = VFXValue.Constant(0.0f); switch (positionMode) { case PositionMode.Surface: factor = VFXValue.Constant(0.0f); break; case PositionMode.Volume: factor = VFXValue.Constant(1.0f); break; case PositionMode.ThicknessAbsolute: case PositionMode.ThicknessRelative: { if (positionMode == PositionMode.ThicknessAbsolute) { thickness = thickness / radius; } factor = VFXOperatorUtility.Saturate(thickness); break; } } return(new VFXExpressionPow(VFXValue.Constant(1.0f) - factor, VFXValue.Constant(thicknessDimensions))); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { return(new[] { VFXOperatorUtility.Saturate(VFXOperatorUtility.Ceil(inputExpression[0] - inputExpression[1])), // TODO : It would be nice to have inverted step output (1 if below threshold), but we need to be able to define multiple FloatN output slots. //VFXOperatorUtility.Clamp( new VFXExpressionFloor(inputExpression[0])-inputExpression[1], VFXValue.Constant(0.0f), VFXValue.Constant(1.0f)), }); }
protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var type = inputExpression[0].valueType; VFXExpression input; if (Clamp) { input = VFXOperatorUtility.Saturate(inputExpression[0]); } else { input = inputExpression[0]; } return(new[] { VFXOperatorUtility.Mad(input, VFXOperatorUtility.TwoExpression[type], VFXOperatorUtility.Negate(VFXOperatorUtility.OneExpression[type])) }); }
protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var type = inputExpression[0].valueType; var half = VFXOperatorUtility.HalfExpression[type]; var expression = VFXOperatorUtility.Mad(inputExpression[0], half, half); if (Clamp) { return new[] { VFXOperatorUtility.Saturate(expression) } } ; else { return new[] { expression } }; }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { return(new[] { VFXOperatorUtility.Saturate(inputExpression[0]) }); }