public static mat4 infinitePerspective(float fovy, float aspect, float zNear)
{
float range = tan(fovy / (2f)) * zNear;
float left = -range * aspect;
float right = range * aspect;
float bottom = -range;
float top = range;
var result = new mat4(0);
result[0, 0] = ((2f) * zNear) / (right - left);
result[1, 1] = ((2f) * zNear) / (top - bottom);
result[2, 2] = -(1f);
result[2, 3] = -(1f);
result[3, 2] = -(2f) * zNear;
return result;
}