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 });