code: function GLTFLightsExtension( json ) {
  
  		this.name = EXTENSIONS.KHR_LIGHTS;
  
  		this.lights = {};
  
  		var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};
  		var lights = extension.lights || {};
  
  		for ( var lightId in lights ) {
  
  			var light = lights[ lightId ];
  			var lightNode;
  
  			var color = new THREE.Color().fromArray( light.color );
  
  			switch ( light.type ) {
  
  				case 'directional':
  					lightNode = new THREE.DirectionalLight( color );
  					lightNode.target.position.set( 0, 0, 1 );
  					lightNode.add( lightNode.target );
  					break;
  
  				case 'point':
  					lightNode = new THREE.PointLight( color );
  					break;
  
  				case 'spot':
  					lightNode = new THREE.SpotLight( color );
  					// Handle spotlight properties.
  					light.spot = light.spot || {};
  					light.spot.innerConeAngle = light.spot.innerConeAngle !== undefined ? light.spot.innerConeAngle : 0;
  					light.spot.outerConeAngle = light.spot.outerConeAngle !== undefined ? light.spot.outerConeAngle : Math.PI / 4.0;
  					lightNode.angle = light.spot.outerConeAngle;
  					lightNode.penumbra = 1.0 - light.spot.innerConeAngle / light.spot.outerConeAngle;
  					lightNode.target.position.set( 0, 0, 1 );
  					lightNode.add( lightNode.target );
  					break;
  
  				case 'ambient':
  					lightNode = new THREE.AmbientLight( color );
  					break;
  
  			}
  
  			if ( lightNode ) {
  
  				lightNode.decay = 2;
  
  				if ( light.intensity !== undefined ) {
  
  					lightNode.intensity = light.intensity;
  
  				}
  
  				lightNode.name = light.name || ( 'light_' + lightId );
  				this.lights[ lightId ] = lightNode;
  
  			}
  
  		}
  
  	}
docs: Lights Extension
  
  Specification: PENDING