What is the problem?

### 9.9.1 What is the problem?

There is a peculiar problem with smooth triangles which shows as a lighting artifact in certain cases. This can happen in individual smooth triangles, meshes with smooth triangles and smooth heightfields. The problem also manifests itself when using the slope pattern in the same situation. This image shows the two cases:

Lighting and slope pattern artifacts in a smooth triangle

The source code of this image is the following:

    camera { right x*4 location <0,1,-5> look_at 0 angle 35 }
    light_source { y*100, 1 }
    light_source { -y*100, x }

    smooth_triangle
    { <-.5,0,-1>,<-1,1,-1>, <.5,0,-1>,<1,1,-1>, <0,0,1>,<0,1,1>
      pigment { rgb 1 }
      translate -x*.6
    }
    smooth_triangle
    { <-.5,0,-1>,<-1,1,-1>, <.5,0,-1>,<1,1,-1>, <0,0,1>,<0,1,1>
      pigment { slope y color_map { [0 rgb z][1 rgb x+y] } }
      finish { ambient 1 }
      translate x*.6
    }

The triangle at the left is a regular smooth triangle which is illuminated by a white light source from above. There's also a red light source illuminating the triangle from below. As you can see, the farther part of the triangle is wrongly illuminated as red. No part of the triangle should be illuminated by the red light source because the upper side of the triangle is nowhere facing down.

The triangle at the right is the same smooth triangle with a slope pattern applied to it, which goes from blue (in the negative y direction) to yellow (in the positive y direction). Lighting has been eliminated by specifying a high ambient. As all the parts of the upper side of the triangle are pointing upwards, the whole triangle should be colored with shades of yellow, but as you can see, the same farther part is wrongly colored blue.

(If you guessed that the problem happens when the normal vector of the triangle is pointing away from the camera, then you guessed right.)