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