     return success
 
   _create_basic_scene: () ->
+    # Cameras!
+    @camera.position.z = 2
+
+    # Light!
+    @_directional_light = new THREE.DirectionalLight( 0xffffff, 0.75 )
+    @_directional_light.position.set(1,1,2)
+    @scene.add( @_directional_light )
+    @_directional_light.visible = @light
+
+    @_uniforms =
+      light =
+        type: 'v3'
+        value: THREE.Vector3(1,1,2)
+
+    # Models!
     shader_parameters =
+      uniforms: @_uniforms
       vertexShader: default_vertex_source
       fragmentShader: default_fragment_source
     @shader_material = new THREE.ShaderMaterial(shader_parameters)
+    # @shader_material = new THREE.MeshPhongMaterial()
 
     @geometry = new THREE.CubeGeometry(1,1,1)
+    @geometry.computeFaceNormals()
+    @geometry.computeVertexNormals()
 
     @mesh = new THREE.Mesh( @geometry, @shader_material )
     @scene.add( @mesh )
-
-    @camera.position.z = 1.5

    # Do some animation
    requestAnimationFrame(@render);

    if @animate
      @mesh.rotation.x += 2 * time_step;
      @mesh.rotation.y += 2 * time_step;

    @renderer.render(@scene, @camera);

    @_stats.end()

  _init_root: () ->
    width = $(@elem_root).width()


  update_shader: (shader_parameters) ->
    if @_validate_shader_parameters(shader_parameters)
      shader_parameters.uniforms = @_uniforms
      new_material = new THREE.ShaderMaterial(shader_parameters)
      @mesh.material = new_material
      @shader_material = new_material
