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 }); }
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"), }); }