Suppose you have a flat surface with normal n going through point p0 and a directional light with direction dir, then the shadow of a point p onto this surface can be calculated according to
proj[p0_, n_, dir_][p_] := p - (p - p0).Normalize[n]/dir.Normalize[n] dir
Suppose you have a shape created with a ParametricPlot3D, for example
pt[r_, ph_, th_] := {r Cos[ph] Sin[th], r Sin[ph] Sin[th], r Cos[th]}
rf[ph_, th_] := 3/2 + 2 Cos[2 th] Sin[ph]^2
shape = ParametricPlot3D[pt[rf[ph, th], ph, th], {ph, 0, 2 Pi}, {th, 0, Pi},
Mesh -> False]
Then the shadow of this shape could be calculated according to
shdw = With[{p0 = {0, 0, -4}, n = {0, 0, 1}, dir = {1, 0, -1}},
ParametricPlot3D[proj[p0, n, dir][pt[rf[ph, th], ph, th]],
{ph, 0, 2 Pi}, {th, 0, Pi}, Mesh -> False, PlotStyle -> Black]];
Show[shape, shdw, PlotRange -> All]

To get blurry edges on the shadow you could do something like this
With[{p0 = {0, 0, -4}, n = {0, 0, 1}, dir = {1/3, 1/2, -1},
plotr = {{-8, 8}, {-8, 8}, {-5, 4}}},
(* blurred image of shadow to be used as a texture *)
tex = Blur[Rasterize[
ParametricPlot[proj[p0, n, dir][pt[rf[ph, th], ph, th]][[;; 2]],
{ph, 0, 2 Pi}, {th, 0, Pi},
Mesh -> False,
PlotStyle -> {Black, Opacity[1]},
Axes -> False, Frame -> False,
PlotRange -> plotr[[;; 2]],
Background -> None],
Background -> None], 10];
shdw = Graphics3D[{Texture[ImageData[tex]], EdgeForm[],
Polygon[
p0 + RotationTransform[{{0, 0, 1}, n}][Flatten[{#, 0}]] & /@
Tuples[plotr[[;; 2]]][[{1, 2, 4, 3}]],
VertexTextureCoordinates -> Tuples[{0, 1}, 2][[{1, 2, 4, 3}]]]}];
Show[shdw, shape,
Lighting -> {{"Directional", White, {0, -1, 1}}},
PlotRange -> plotr,
Axes -> False]]
]

Similar to István's solutions, I'm using a blurred rasterized image of the projected shape as a texture for the surface on which the shadow is projected. To get a transparent texture I'm using ImageData[tex] as the texture rather than tex itself. To get the scaling right when applying the texture, I'm using the same PlotRange for tex as for the polygon.
Shadow[]in the packageGraphics`Graphics3D`. You might want to look into it. – 0x4A4D♦ Jan 29 '12 at 12:01