this.geometry = new THREE.SphereGeometry(this.planet_radius, this.planet_geom_segments, this.planet_geom_rings);
this.geometry.computeTangents();
this.shader = THREE.ShaderUtils.lib.normal;
this.uniforms = THREE.UniformsUtils.clone(this.shader.uniforms);
this.uniforms.tNormal.value = THREE.ImageUtils.loadTexture(this.planet_normals_texture);
this.uniforms.uNormalScale.value.x = 1.5;
this.uniforms.uNormalScale.value.y = 1.5;
this.uniforms.tDiffuse.value = planet_surface_texture;
this.uniforms.tSpecular.value = THREE.ImageUtils.loadTexture(this.planet_specular_texture);
this.uniforms.enableAO.value = false;
this.uniforms.enableDiffuse.value = true;
this.uniforms.enableSpecular.value = true;
this.uniforms.uDiffuseColor.value.setHex(0xffffff);
this.uniforms.uSpecularColor.value.setHex(0x0000ff);
this.uniforms.uAmbientColor.value.setHex(0xffffff);
this.uniforms.uShininess.value = 99;
this.uniforms.uDiffuseColor.value.convertGammaToLinear();
this.uniforms.uSpecularColor.value.convertGammaToLinear();
this.uniforms.uAmbientColor.value.convertGammaToLinear();
this.surface_material = new THREE.ShaderMaterial({
fragmentShader: this.shader.fragmentShader,
vertexShader: this.shader.vertexShader,
uniforms: this.uniforms,
lights: true
});