public void ProcessExpressionTRSToMatrix() { var t = new Vector3(0.2f, 0.3f, 0.4f); var r = new Vector3(0.5f, 0.6f, 0.7f); var s = new Vector3(0.8f, 0.9f, 1.0f); var q = Quaternion.Euler(r); Matrix4x4 result = new Matrix4x4(); result.SetTRS(t, q, s); var value_t = new VFXValue <Vector3>(t); var value_r = new VFXValue <Vector3>(r); var value_s = new VFXValue <Vector3>(s); var expressionA = new VFXExpressionTRSToMatrix(new VFXExpression[] { value_t, value_r, value_s }); var expressionB = new VFXExpressionExtractPositionFromMatrix(expressionA); var expressionC = new VFXExpressionExtractAnglesFromMatrix(expressionA); var expressionD = new VFXExpressionExtractScaleFromMatrix(expressionA); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpressionA = context.Compile(expressionA); var resultExpressionB = context.Compile(expressionB); var resultExpressionC = context.Compile(expressionC); var resultExpressionD = context.Compile(expressionD); Assert.AreEqual(result, resultExpressionA.Get <Matrix4x4>()); Assert.AreEqual((t - resultExpressionB.Get <Vector3>()).magnitude, 0.0f, 0.01f); Assert.AreEqual((r - resultExpressionC.Get <Vector3>()).magnitude, 0.0f, 0.01f); Assert.AreEqual((s - resultExpressionD.Get <Vector3>()).magnitude, 0.0f, 0.01f); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var scale = new VFXExpressionExtractScaleFromMatrix(inputExpression[0]); var radius = inputExpression[1]; return(new VFXExpression[] { VFXOperatorUtility.SphereVolume(radius, scale) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var scale = new VFXExpressionExtractScaleFromMatrix(inputExpression[0]); var majorRadius = inputExpression[1]; var minorRadius = inputExpression[2]; return(new VFXExpression[] { VFXOperatorUtility.TorusVolume(majorRadius, minorRadius, scale) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var scale = new VFXExpressionExtractScaleFromMatrix(inputExpression[0]); var baseRadius = inputExpression[1]; var topRadius = inputExpression[2]; var height = inputExpression[3]; return(new VFXExpression[] { VFXOperatorUtility.ConeVolume(baseRadius, topRadius, height, scale) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { VFXExpression inverseTRS = new VFXExpressionInverseTRSMatrix(inputExpression[1]); VFXExpression scale = new VFXExpressionExtractScaleFromMatrix(inputExpression[1]); VFXExpression uvw = new VFXExpressionTransformPosition(inverseTRS, inputExpression[2]) + VFXValue.Constant(new Vector3(0.5f, 0.5f, 0.5f)); VFXExpression distanceExpr = new VFXExpressionSampleSDF(inputExpression[0], uvw, scale, inputExpression[3]); VFXExpression directionExpr = new VFXExpressionSampleSDFNormal(inputExpression[0], inverseTRS, uvw, inputExpression[3]) * VFXValue.Constant(new Vector3(-1.0f, -1.0f, -1.0f)); return(new[] { distanceExpr, directionExpr }); }