Shadow malfunction on in-game objects

When I use shadows on a "Point Light" which is near a wall (or other object), the light produces weird circle-shaped shadows on all object as soon as I set the "Range" of the light over a certain value.


Is this a bug, or am I doing something wrong here?

The objects are imported from Cinema 4d (11.5), the used Unity is 2.6 Pro and the OS where I could reproduce this problem are OSX 10.5.8 and 10.6.2. It happens on a MacBook Pro and also on a MacPro, so I think it should not be a graphics-card problem.

The settings for the light are:

Type: Point Light / Attenuate: yes / Intensity: 1 (or higher) / Range: 10 (depends on the distance between wall and light) / Spot Angle: 30 / Shadow Type: Soft Shadows / Resolution: High

This is a known issue.

It's called self-shadowing and is an inherent problem of shadow mapping. The usual way around it is to define shadow map bias, which offsets the values stored in the shadow by a small value, removing the black artifacts. The unpleasant side effect is that now the entire shadow is shifted slightly, so your objects will appear to be hovering a couple of inches above the ground (so-called peter-panning).

You can see how the bias works, if you change your lights to spot lights and play around with "Constant Bias" and "Object Size Bias" settings in the light component. Unfortunately, due to the fact that shadows for point lights are handled differently, these settings are ignored for point lights (bias has a fixed value), so you won't be able to remove the artifacts in your particular scene this way. We plan to fix this behaviour in the near future.

For your scene:

Workaround 1: Uncheck the "Cast shadows" checkbox on the mesh renderer of the floor. This should remove the artifacts completely from the floor. If you can, do the same for the ceiling and walls (this will only make sense if your scene does not go beyond the walls, but it probably does).

Workaround 2: Decrease the "Range" value of the lights as much as you can.

Funny thing is that it is 2013 now, and the problems with the self-shadowing objects on flat surfaces is still here.
Unity is a great engine overall, but it lacks some tweaks for the new era technology :confused: