anchor.diff:  uniform bool precomputed_gradient; // whether the gradient has been precomputed or not
   
   // computes a simplified lighting equation
  -vec3 blinn_phong(vec3 N, vec3 V, vec3 L, int light)
  +vec3 blinn(vec3 N, vec3 V, vec3 L, int light)
   {
   	// material properties
   	// you might want to put this into a bunch or uniforms
  
positive.code: 	}
  
  	vec3 V  = normalize(eye_position - frag_position);
  	for(int i=0; i<4; ++i)
  	{
  		if (light_enable[i])
  		{
  			vec3 L = normalize(light_position[i] - frag_position);
  			color_tmp.rgb += color.rgb * blinn_phong(N,V,L,i);
  		}
  	}
  
  	return vec4(color_tmp,color.a);
  }
  
  void main(void)
  
negative.code: 	// compute lighting at isosurface point
  	float val = texture3D(volume_texunit, iso_pos).r;
  
  	// compute the gradient and lighting only if the pixel is visible "enough"
  	vec3 N;
  	if (precomputed_gradient)
  