First of all, I’ll explain what I mean.

Here’s a picture, where on the left is the result of

`Graphics3D[Sphere[], Boxed -> False, Lighting -> {{"Directional", White, ImageScaled[{0, 0, 10}]}}, Background -> Black] `

and on the right is a photo of the full Moon.

As you can see, the modelled sphere is brightest at the centre, but the full Moon is uniform. That’s because the modelled sphere reflects light using Lambertian formula, but the Moon is not Lambertian.

There’s a (quite recent) formula, where the author gives a nice physical explanation: https://arxiv.org/ftp/arxiv/papers/1808/1808.01024.pdf. Put succintly, the Moon has backscattering: the light is reflected mostly back to the light source, and its intensity is proportional to the cosine of the angle between directions to the source and the observer. When the Moon is full, the cosine is almost 1, and we get an uniform disk.

But it gets interesting when the Moon is not full. Of course, I could wrap the sphere in a calculated Texture, but that’s quite tedious when there are several objects. Is there a way to implement it in a more general manner, as something similar to Specularity?