PlotStyle like ocean waves?
You can get a little bit of sparkling by using a high Specularity
coefficient, but the result tends to look more like shiny plastic than water.
(* not a real ocean wave spectrum *)
f[x_, y_] := x/(x^2 + y^2)^(3/2)
ocean = Module[{n = 256, x, spectrum, r},
x = N@RotateRight[Range[-n, n - 2, 2], n/2];
spectrum = Quiet@Outer[f, x, x];
spectrum[[1, 1]] = 0.0;
r = RandomReal[NormalDistribution[0, 1], {n, n}] +
I RandomReal[NormalDistribution[0, 1], {n, n}];
Rescale[Re[Fourier[r spectrum]]]];
ListPlot3D[ocean, PlotRange -> {-1, 2},
PlotStyle -> {RGBColor[0.8, 0.9, 1.], Specularity[White, 200]},
Lighting -> {{"Directional", White, {0, 0, 10}}}, Mesh -> False]
Rotate it around and you'll see that M is "not there yet" as @J.M. notes. From just about any point of view, it cannot really model sunlight reflecting off the surface. (If M can, then I can't get it to.)
SeedRandom[0];
waves = With[{n = 20},
MapThread[
Sin[#1^4 First@RotationMatrix[#2] . {x, y} + #3]/(1 + #1^(8)) &,
{RandomReal[{0.2, 2.4}, n], RandomReal[{0.3, 1.2}, n],
RandomReal[2 Pi, n]}] // Total
];
col = RGBColor[0.6, 0.9, 1.];
col2 = RGBColor[1., 1., 0.8];
Plot3D[waves, {x, 0, 18}, {y, 0, 18},
PlotRange -> 8, PlotPoints -> 75,
Mesh -> None,
Filling -> Bottom, FillingStyle -> Opacity[0.2, col],
PlotStyle -> Directive[
Specularity[col2, 100],
Glow[Darker[col, 0.9]],
Opacity[0.2],
col],
Lighting -> {
{"Ambient", Darker[col, 0.35]},
{"Directional", col2, {{15, 15, 15}, {0, 0, 0}}}},
ViewPoint -> {-2.1473148110909985`, -1.9225307125696098`,
1.7728267713727204`}]
It does make me want to go to a nice, warm beach, though.
Update
One trick to get sparkle on a translucent plot is to set the opacity to 1 and then interpolate between the two images as a function of brightness. One can only do this on Image
once the lighting and view point are set, so the image cannot be rotated. (Got to work on the waves, some sort of combination of waves and @Simon's texture.)
SeedRandom[0];
waves = With[{n = 8, k = 2},
MapThread[
Sin[#1^4 First@RotationMatrix[#2] . {x, (2 y + Sin[#1^2 y/(1 + #1)])/3} + #3]/(1 + (#1 - 1/8)^(7)) &,
{RandomReal[{0.7, 1.}, k]~Join~RandomReal[{1.5, 3.0}, n - 2 k],
RandomReal[{0.8, 1.2}, k]~Join~RandomReal[{1., 1.6}, n - 2 k],
RandomReal[2 Pi, n - k]}
]~Join~
MapThread[
Sin[#1^4 First@RotationMatrix[#2] . {x, (2 y + Sin[#1 y/(1 + #1)])/3} + #3]/(5/2 + (#1)^( 4)) &,
{RandomReal[{1., 1.2}, k], RandomReal[{2.2, 2.6}, k], RandomReal[2 Pi, k]}] // Total];
col = RGBColor[0.6, 0.9, 1.];
col2 = RGBColor[1., 1., 0.8];
plot1 = Plot3D[waves, {x, 0, 18}, {y, 0, 18}, PlotRange -> 5,
PlotPoints -> 75, Mesh -> None, Filling -> Bottom,
FillingStyle -> Opacity[0.201, col],
PlotStyle -> Directive[Specularity[White, 400], Glow[Darker[col, 0.9]], Opacity[0.2], col],
Lighting -> {{"Ambient", Darker[col, 0.35]}, {"Directional", col2, {30, 30, 20}}},
AxesLabel -> {x, y, z},
ViewPoint -> {-2.1473148110909985`, -1.9225307125696098`, 1.7728267713727204`}];
img1 = Image@plot1;
img2 = Image[plot1 /. {Opacity[0.2] -> Opacity[1]}];
ixf = Compile[{{c1, _Real, 1}, {c2, _Real, 1}},
With[{t = (1 - Sqrt@Abs[1 - (Norm[c2] - 1)]; (Norm[c2] - 1))^12},
(1 - t) c1 + t*c2],
RuntimeAttributes -> {Listable}, Parallelization -> True
];
Image[ixf[ImageData@img1, ImageData@img2], Options@img2]