I believe there is a way to generate a curved gradient of high quality. This kind of shading is currently unavailable to tikz/pgf, but the library pgfplots
which is built on top of it can generate them.

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide axis,
x=1pt,y=1pt]
\addplot[patch,
patch type=biquadratic,
shader=interp,
colormap={bw}{gray=(1) gray=(0.7)},
nodes near coords=\coordindex,
point meta=explicit,
]
coordinates
{
(3,-36) [0] % 0: lower left corner
(626,-41) [0] % 1: lower right corner
(604,-10) [1] % 2: upper right corner
(40,-17) [1] % 3: upper left corner
%
(236,-180) [0] % 4: lower middle
(617,-25) [0] % 5: right middle
(240,-140) [0] % 6: upper middle
(23,-27) [0] % 7: left middle
%
(238,-160) [0] % 8: middle
};
\end{axis}
\end{tikzpicture}
\end{document}
Here, we have a hidden axis of pgfplots
which contains a shaded surface plot. This, in turn, makes use of patch type=biquadratic
which is one of many supported curved gradients. A biquadratic
patch is defined by 9 points in a particular ordering: first coordinates of vertexes, then coordinates of mid points, then coordinate of center as illustrated by the nodes near coords
instruction. The color values are provided explicitly in square brackets after each coordinate (this is the effect of point meta=explicit
).
Note that I chose to use a colormap
here, that means the color values are actually scalar values which are mapped into the colormap={bw}{gray=(1) gray=(0.7)}
. This mapping strategy easily allows to customize the gradient. For example, the default colormap
configured by pgfplots
yields the following output (i.e. if you uncomment colormap=...
):

The downside of my approach is that pgfplots
is meant to visualize data, so it involves more work to integrate such a shading seamlessly into a tikzpicture
(there is a section about TikZ Interoperability in the pgfplots
manual).
Note that the coordinates above came from an image program: I made a screenshot of your picture and used gimp to read the pixel coordinates.
The approach to use patch
plots with shader=interp
allows to define shaded gradients with smooth but complicated geometries easily. In addition, multiple of these shadings can be placed next to each other (by providing another set of 9 coordinates). There are also shadings which accept bezier coordinates, triangular patches, or bicubic ones, compare the documentation of "Patch plots" in pgfplots
.