anchor.diff:        (m.material as ShaderMaterial).afterBinding = (ShaderMaterial material, Mesh mesh, Matrix4 worldMatrix) {
           graphicsDevice.bindTexture("GgxDFV", ggx);
           graphicsDevice.bindTexture("diffuseSampler", diffuseTexture);
  -        if(bumpTexture != null) {
  +        if (bumpTexture != null) {
             graphicsDevice.bindTexture("bumpSampler", bumpTexture);
           }
           graphicsDevice.bindInt("type", type);
  
positive.code:     controllers.children.add(roughnessSlider);
      controllers.children.add(new html.BRElement());
  
      var specualrSlider = new html.RangeInputElement();
      specualrSlider.id = "roughness";
      specualrSlider.min = "0";
      specualrSlider.max = "3";
      specualrSlider.step = "0.01";
      specualrSlider.value = specualerColor.toString();
      specualrSlider.onChange.listen((e) {
        specualerColor = double.parse(specualrSlider.value);
      });
      controllers.children.add(_labelFor(specualrSlider, "Specualer(0~3)"));
      controllers.children.add(new html.BRElement());
      controllers.children.add(specualrSlider);
      controllers.children.add(new html.BRElement());
  
      _loadModel(urls.first);
  
negative.code: 
  
  // TODO :
  //  http://www.filmicworlds.com/2014/04/21/optimizing-ggx-shaders-with-dotlh/
  //  http://www.filmicworlds.com/images/ggx-opt/optimized-ggx.hlsl
  //  http://seblagarde.wordpress.com/2011/08/17/hello-world/
  
  class TestPhysicallyBasedLighting extends Scene {
    TestPhysicallyBasedLighting(Camera camera) : super(camera);
  