private double shade()
	{
		Vector poi = i.poi;
		Ray ray;
		LinkedBody lb;
		Body b;
		
		int numLights = lights.length;
		double	distance = -1.0,
				brightness = 0.0, 
				lambertian = 0.0, 
				brightnessPerLight = 1.0 / numLights;
		boolean hitSomething;
		
		for (Vector L : lights)
		{
			lambertian = L.dot(i.normal);
			if (lambertian > 0.0)
			{
				hitSomething = false;
				ray = new Ray(i.poi, L);
				lb = bodies;
				while (lb != null)
				{
					b = lb.b();
					lb = lb.next();
					distance = b.intersection(ray);
					
					if (distance > 0.0 && (b != i.body || distance > 0.00001))
					{
						lb = null;
						hitSomething = true;
					}
				}
				if (!hitSomething)
				{
					brightness += brightnessPerLight * lambertian;
				}
			}
		}
		
		brightness = Math.max(brightness, baseBrightness);
		return Math.min(1.0, brightness);
	}