text: /**
   * @author alteredq / http://alteredqualia.com/
   *
   * Normal map shader
   * - compute normals from heightmap
   */
  
  var THREE = require('three');
  
  function NormalMapShader() {
  
  	return {
  
  	uniforms: {
  
  		heightMap:  { value: null },
  		resolution: { value: new THREE.Vector2( 512, 512 ) },
  		scale:      { value: new THREE.Vector2( 1, 1 ) },
  		height:     { value: 0.05 }
  
  	},
  
  	vertexShader: `
  
  		varying vec2 vUv;
  
  		void main() {
  
  			vUv = uv;
  			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  
  		}
  
  	`,
  
  	fragmentShader: `
  
  		uniform float height;
  		uniform vec2 resolution;
  		uniform sampler2D heightMap;
  
  		varying vec2 vUv;
  
  		void main() {
  
  			float val = texture2D( heightMap, vUv ).x;
  
  			float valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;
  			float valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;
  
  			gl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height  ) ) + 0.5 ), 1.0 );
  
  		}
  
  	`
  	}
  
  };
  
  module.exports = NormalMapShader;
  