How to get a matrix that simulates behaviour of function Camera.WorldToScreenPoint? I need to be able to calculate Screen position of certain points being given their world position inside Compute Shader.

c#:

```
Matrix4x4 matrixVP = myCamera.projectionMatrix * myCamera.worldToCameraMatrix; //multipication order matters
Vector4 clipCoord = matrixVP.MultiplyPoint(myWorldXYZW);
```

notice, you can now check `clipCoord.w`

and if its -1, then you know the vertex will NOT be seen by the camera

```
Vector4 perspectiveCoord = clipCoord / clipCoord.w; //goes from -1 to 1 on each axis and z is 0 to 1, w is now 1
```

What we’ve done is taken frustum-shaped volume and shrunken it into a cube.

now, you need to take your `perspectiveCoord.xy`

and re-specify it relative to bot left corner (u said u need screen space)

```
perspectiveCoord = perspectiveCoord*0.5 + 0.5;
perspectiveCoord *= new Vector4(myCamera.width, myCamera.height,1,1);//screen space coord (bot left 0,0 top right 1920, 1080 or other resolution which u have)
```

@ColinAmuzo you don’t need to divide by w component as MultiplyPoint is already taking care of that

public Vector3 MultiplyPoint (Vector3 point)

{

Vector3 result = default(Vector3);

result.x = m00 * point.x + m01 * point.y + m02 * point.z + m03;

result.y = m10 * point.x + m11 * point.y + m12 * point.z + m13;

result.z = m20 * point.x + m21 * point.y + m22 * point.z + m23;

float num = m30 * point.x + m31 * point.y + m32 * point.z + m33;

num = 1f / num; ////check this line

result.x *= num;

result.y *= num;

result.z *= num;

return result;

}

clipCoord is already normalized from -1 to 1 for x and y you only need to multiply it with screen width and height to get screen coordinate