public static Ray GetRay(Camera cam, float s, float t, ref uint state)
        {
            Vector3 rd     = cam.LensRadius * RandUtil.RandomInUnitDisk(ref state);
            Vector3 offset = cam.U * rd.X + cam.V * rd.Y;

            return(Ray.Create(
                       cam.Origin + offset,
                       cam.LowerLeftCorner + s * cam.Horizontal + t * cam.Vertical - cam.Origin - offset));
        }