anchor.diff:        device.bindColor3(Semantics.emissiveColor, emissiveColor);
       }
   
  +    if (scene.lightsEnabled) {
  +      var lights = scene._lights;
  +      for (var i = 0; i < lights.length && i < Light.MAX_LIGHTS; i++) {
  +        var light = lights[i];
  +        light.bind(device.ctx, shader, i);
  +        var diffuse = light.diffuse.scaled(light.intensity);
  +        // [color + range]
  +        device.bindFloat4("vLightDiffuse${i}", diffuse.red, diffuse.green, diffuse.blue, light.range);
  +        device.bindColor3("vLightSpecular${i}", light.specular.scaled(light.intensity));
  +      }
  +    }
  +
  +    var skeleton = mesh.skeleton;
  +    if (skeleton != null) {
  +      skeleton.updateMatrix();
  +      device.bindMatrix4List(Semantics.jointMat, skeleton.jointMatrices);
  +    }
  +
       device.bindFloat("uAlbedo", albedo);
       device.bindFloat("uRoughess", roughness);
       device.bindFloat("uReflectivity", reflectivity);
  
positive.code:   bool ready([Mesh mesh]) {
      if (mesh == null) return false;
  
      if (diffuseTexture != null && !diffuseTexture.ready) return false;
  
      if (bumpTexture != null && !bumpTexture.ready) return false;
  
      if (technique.pass.shader == null) {
        technique.pass.shader = new Shader(Orange.instance.graphicsDevice.ctx, SHADER_PHYSICALLY_BASED_VS, SHADER_PHYSICALLY_BASED_FS, common: "");
      }
      return technique.pass.shader.ready;
    }
  