diff --git a/examples/webgl_materials_variations_physical2.html b/examples/webgl_materials_variations_physical2.html
new file mode 100644
index 00000000000000..47b7ddb6d7974e
--- /dev/null
+++ b/examples/webgl_materials_variations_physical2.html
@@ -0,0 +1,250 @@
+
+
+
+ three.js webgl - materials
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl
index d9471ded079e2e..81d6b55a6da2f8 100644
--- a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl
+++ b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl
@@ -1,6 +1,8 @@
-#ifdef USE_ENVMAP
+#if defined( USE_ENVMAP ) || defined( PHYSICAL )
uniform float reflectivity;
+#endif
+#ifdef USE_ENVMAP
#ifdef ENVMAP_TYPE_CUBE
uniform samplerCube envMap;
#else
diff --git a/src/renderers/shaders/ShaderChunk/lights_pars.glsl b/src/renderers/shaders/ShaderChunk/lights_pars.glsl
index 67abcf6127d239..050fac92b17ea3 100644
--- a/src/renderers/shaders/ShaderChunk/lights_pars.glsl
+++ b/src/renderers/shaders/ShaderChunk/lights_pars.glsl
@@ -159,7 +159,7 @@ uniform vec3 ambientLightColor;
envMapColor.rgb = inputToLinear( envMapColor.rgb );
- return envMapColor.rgb * reflectivity;
+ return envMapColor.rgb;
}
diff --git a/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl b/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl
index 66f6591150b329..75cbe1bf47e728 100644
--- a/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl
+++ b/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl
@@ -1,4 +1,4 @@
PhysicalMaterial material;
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
material.specularRoughness = roughnessFactor * 0.5 + 0.5; // disney's remapping of [ 0, 1 ] roughness to [ 0.5, 1 ]
-material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
+material.specularColor = mix( vec3( 0.08 ) * reflectivity, diffuseColor.rgb, metalnessFactor );