It was a shock to me when I found that in Graphics3D a surface is always transparent to the light sources:
lightSources = {{"Directional", Red, Scaled[{1/2, 1, 1}]},
{"Directional", Green, Scaled[{1, 1/2, 1}]},
{"Directional", Blue, Scaled[{0, 0, 0}]}};
Show[Plot3D[Sin[x y], {x, 0, Pi}, {y, 0, Pi},
Lighting -> lightSources],
Graphics3D[{PointSize[Large],
Point[lightSources[[All, 3]],
VertexColors -> lightSources[[All, 2]]]}]]

One can see the surface on the right is blue-illumunated although this surface is completely shaded from the blue light source located at the point {0,0,-1}.
I feel such rendering is unacceptable. Is it possible to produce shadows in Mathematica?
UPDATE
To clear up: by "shadows" I mean that the surfaces on the scene must not be transparent to the light sources (or, better, their transparency could be defined by a user). I need not drop shadows shown in the linked threads: (1), (2).