예제 #1
0
        public static CameraMatricesExpressions GetMatricesExpressions(IEnumerable <VFXNamedExpression> expressions, VFXCoordinateSpace cameraSpace, VFXCoordinateSpace outputSpace)
        {
            var fov          = expressions.First(e => e.name == "Camera_fieldOfView");
            var aspect       = expressions.First(e => e.name == "Camera_aspectRatio");
            var near         = expressions.First(e => e.name == "Camera_nearPlane");
            var far          = expressions.First(e => e.name == "Camera_farPlane");
            var cameraMatrix = expressions.First(e => e.name == "Camera_transform");

            VFXExpression ViewToVFX = cameraMatrix.exp;

            if (cameraSpace == VFXCoordinateSpace.World && outputSpace == VFXCoordinateSpace.Local)
            {
                ViewToVFX = new VFXExpressionTransformMatrix(VFXBuiltInExpression.WorldToLocal, cameraMatrix.exp);
            }
            else if (cameraSpace == VFXCoordinateSpace.Local && outputSpace == VFXCoordinateSpace.World)
            {
                ViewToVFX = new VFXExpressionTransformMatrix(VFXBuiltInExpression.LocalToWorld, cameraMatrix.exp);
            }

            VFXExpression VFXToView  = new VFXExpressionInverseTRSMatrix(ViewToVFX);
            VFXExpression ViewToClip = VFXOperatorUtility.GetPerspectiveMatrix(fov.exp, aspect.exp, near.exp, far.exp);
            VFXExpression ClipToView = new VFXExpressionInverseMatrix(ViewToClip);

            return(new CameraMatricesExpressions()
            {
                ViewToVFX = new VFXNamedExpression(ViewToVFX, "ViewToVFX"),
                VFXToView = new VFXNamedExpression(VFXToView, "VFXToView"),
                ViewToClip = new VFXNamedExpression(ViewToClip, "ViewToClip"),
                ClipToView = new VFXNamedExpression(ClipToView, "ClipToView"),
            });
        }
        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 });
        }
예제 #3
0
        public static CameraMatricesExpressions GetMatricesExpressions(IEnumerable <VFXNamedExpression> expressions)
        {
            var fov          = expressions.First(e => e.name == "Camera_fieldOfView");
            var aspect       = expressions.First(e => e.name == "Camera_aspectRatio");
            var near         = expressions.First(e => e.name == "Camera_nearPlane");
            var far          = expressions.First(e => e.name == "Camera_farPlane");
            var cameraMatrix = expressions.First(e => e.name == "Camera_transform");

            VFXExpression ViewToVFX  = cameraMatrix.exp;
            VFXExpression VFXToView  = new VFXExpressionInverseTRSMatrix(ViewToVFX);
            VFXExpression ViewToClip = VFXOperatorUtility.GetPerspectiveMatrix(fov.exp, aspect.exp, near.exp, far.exp);
            VFXExpression ClipToView = new VFXExpressionInverseMatrix(ViewToClip);

            return(new CameraMatricesExpressions()
            {
                ViewToVFX = new VFXNamedExpression(ViewToVFX, "ViewToVFX"),
                VFXToView = new VFXNamedExpression(VFXToView, "VFXToView"),
                ViewToClip = new VFXNamedExpression(ViewToClip, "ViewToClip"),
                ClipToView = new VFXNamedExpression(ClipToView, "ClipToView"),
            });
        }