anchor.diff:    RenderProgram prg = phase.createProgram(createShader());
   
     Illumination illumination = new Illumination();
  -  illumination.AddLight(new SpotLight("spot", posLight, posLight, colDiffuse,
  -      colSpecular, 50.0, 0.95, 2.0, 25.0));
  -
  +  if (false) {
  +    illumination.AddLight(new SpotLight("spot", posLight, dirLight, colDiffuse,
  +        colSpecular, range, angle, 2.0, glossiness));
  +  } else {
  +    illumination.AddLight(new DirectionalLight(
  +        "dir", dirLight, colDiffuse, colSpecular, glossiness));
  +  }
     Material lightSourceMat = new Material("light")
       ..SetUniform(uColor, colYellow);
     Node shapePointLight = new Node(
  
positive.code:         ${vNormal} = ${uNormalMatrix} * ${aNormal};
          """
        ]),
      new ShaderObject("LightBlinnPhongF")
        ..AddVaryingVars([vVertexPosition, vNormal, vTextureCoordinates])
        ..AddUniformVars([uLightDescs, uLightTypes])
        ..AddUniformVars([uEyePosition, uColor])
  
negative.code:   ];
  }
  
  final VM.Vector3 colSkin = new VM.Vector3(0.333, 0.157, 0.067);
  //const VM.Vector3 colGray = new VM.Vector3(0.2, 0.2, 0.2);
  final VM.Vector3 posLight = new VM.Vector3(0.5, 0.5, 0.0);
  final VM.Vector3 dirLight = new VM.Vector3(-1.0, -1.0, 0.0);
  final VM.Vector3 colYellow = new VM.Vector3(1.0, 1.0, 0.0);
  final VM.Vector3 colDiffuse = new VM.Vector3.all(0.3);
  final VM.Vector3 colSpecular = new VM.Vector3.all(0.133);
  
  final double glossiness = 2.0;
  final double range = 50.0;
  final double angle = MATH.PI / 5.0;
  
  void main() {
    StatsFps fps =
  