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)));
        }
Exemple #3
0
        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)),
            });
        }
Exemple #5
0
        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])) });
        }
Exemple #6
0
        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 }
            };
        }
Exemple #7
0
 protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
 {
     return(new[] { VFXOperatorUtility.Saturate(inputExpression[0]) });
 }