diff --git a/libraries/pbrlib/genglsl/lib/mx_pre_convolve_environment.glsl b/libraries/pbrlib/genglsl/lib/mx_pre_convolve_environment.glsl
index f7d1112afb..7c6d3f01b3 100644
--- a/libraries/pbrlib/genglsl/lib/mx_pre_convolve_environment.glsl
+++ b/libraries/pbrlib/genglsl/lib/mx_pre_convolve_environment.glsl
@@ -2,8 +2,33 @@
 
 vec3 mx_pre_convolve_environment()
 {
-    vec2 uv = gl_FragCoord.xy / vec2(2048.0, 1024.0);
+    vec2 uv = gl_FragCoord.xy * pow(2.0, (float)$convolutionMipLevel) / vec2(2048.0, 1024.0);
     // vec2 ggxDirAlbedo = mx_ggx_dir_albedo(uv.x, uv.y, vec3(1, 0, 0), vec3(0, 1, 0)).xy;
-    return textureLod($envRadiance, uv, 0).rgb * vec3(uv, 0.0);
+    vec3 col = vec3(0, 0, 0);
+    switch ($convolutionMipLevel)
+    {
+        case 0:
+            col = vec3(1.0, 0.0, 0.0);
+            break;
+        case 1:
+            col = vec3(0.0, 1.0, 0.0);
+            break;
+        case 2:
+            col = vec3(0.0, 0.0, 1.0);
+            break;
+        case 3:
+            col = vec3(1.0, 0.0, 1.0);
+            break;
+        case 4:
+            col = vec3(1.0, 1.0, 0.0);
+            break;
+        case 5:
+            col = vec3(0.0, 1.0, 1.0);
+            break;
+        case 6:
+            col = vec3(1.0, 1.0, 1.0);
+            break;
+    }
+    return textureLod($envRadiance, uv, 0).rgb * col;
     // return vec3(uv, 0.0);
 }
diff --git a/source/MaterialXGenShader/HwShaderGenerator.cpp b/source/MaterialXGenShader/HwShaderGenerator.cpp
index 42dae6219b..426093e801 100644
--- a/source/MaterialXGenShader/HwShaderGenerator.cpp
+++ b/source/MaterialXGenShader/HwShaderGenerator.cpp
@@ -68,6 +68,7 @@ const string T_SHADOW_MAP                     = "$shadowMap";
 const string T_SHADOW_MATRIX                  = "$shadowMatrix";
 const string T_VERTEX_DATA_INSTANCE           = "$vd";
 const string T_LIGHT_DATA_INSTANCE            = "$lightData";
+const string T_CONVOLUTION_MIP_LEVEL          = "$convolutionMipLevel";
 
 const string IN_POSITION                      = "i_position";
 const string IN_NORMAL                        = "i_normal";
@@ -123,6 +124,7 @@ const string SHADOW_MATRIX                    = "u_shadowMatrix";
 const string VERTEX_DATA_INSTANCE             = "vd";
 const string LIGHT_DATA_INSTANCE              = "u_lightData";
 const string LIGHT_DATA_MAX_LIGHT_SOURCES     = "MAX_LIGHT_SOURCES";
+const string CONVOLUTION_MIP_LEVEL            = "u_convolutionMipLevel";
 
 const string VERTEX_INPUTS                    = "VertexInputs";
 const string VERTEX_DATA                      = "VertexData";
@@ -222,6 +224,7 @@ HwShaderGenerator::HwShaderGenerator(SyntaxPtr syntax) :
     _tokenSubstitutions[HW::T_AMB_OCC_GAIN] = HW::AMB_OCC_GAIN;
     _tokenSubstitutions[HW::T_VERTEX_DATA_INSTANCE] = HW::VERTEX_DATA_INSTANCE;
     _tokenSubstitutions[HW::T_LIGHT_DATA_INSTANCE] = HW::LIGHT_DATA_INSTANCE;
+    _tokenSubstitutions[HW::T_CONVOLUTION_MIP_LEVEL] = HW::CONVOLUTION_MIP_LEVEL;
 
     // Setup closure contexts for defining closure functions
     //
@@ -363,6 +366,7 @@ ShaderPtr HwShaderGenerator::createShader(const string& name, ElementPtr element
     if (context.getOptions().hwWriteEnvPreConvolution)
     {
         psPrivateUniforms->add(Type::FILENAME, HW::T_ENV_RADIANCE);
+        psPrivateUniforms->add(Type::INTEGER, HW::T_CONVOLUTION_MIP_LEVEL, Value::createValue<int>(1));
     }
 
     // Create uniforms for the published graph interface
diff --git a/source/MaterialXGenShader/HwShaderGenerator.h b/source/MaterialXGenShader/HwShaderGenerator.h
index 66d60dc68a..5ac05ad542 100644
--- a/source/MaterialXGenShader/HwShaderGenerator.h
+++ b/source/MaterialXGenShader/HwShaderGenerator.h
@@ -135,6 +135,7 @@ extern MX_GENSHADER_API const string T_SHADOW_MAP;
 extern MX_GENSHADER_API const string T_SHADOW_MATRIX;
 extern MX_GENSHADER_API const string T_VERTEX_DATA_INSTANCE;
 extern MX_GENSHADER_API const string T_LIGHT_DATA_INSTANCE;
+extern MX_GENSHADER_API const string T_CONVOLUTION_MIP_LEVEL;
 
 /// Default names for identifiers.
 /// Replacing above tokens in final code.
@@ -192,6 +193,7 @@ extern MX_GENSHADER_API const string SHADOW_MATRIX;
 extern MX_GENSHADER_API const string VERTEX_DATA_INSTANCE;
 extern MX_GENSHADER_API const string LIGHT_DATA_INSTANCE;
 extern MX_GENSHADER_API const string LIGHT_DATA_MAX_LIGHT_SOURCES;
+extern MX_GENSHADER_API const string CONVOLUTION_MIP_LEVEL;
 
 /// Variable blocks names.
 extern MX_GENSHADER_API const string VERTEX_INPUTS;    // Geometric inputs for vertex stage.
diff --git a/source/MaterialXView/RenderPipelineMetal.mm b/source/MaterialXView/RenderPipelineMetal.mm
index 4c9e1e073e..fb2612a01c 100644
--- a/source/MaterialXView/RenderPipelineMetal.mm
+++ b/source/MaterialXView/RenderPipelineMetal.mm
@@ -218,6 +218,7 @@
 
         framebuffer->bind(desc);
         material->bindShader();
+        material->getProgram()->bindUniform(mx::HW::CONVOLUTION_MIP_LEVEL, mx::Value::createValue(i));
 
         material->getProgram()->prepareUsedResources(
                         MTL(renderCmdEncoder),