diff --git a/projects/voxelization/resources/shaders/shader.frag b/projects/voxelization/resources/shaders/shader.frag
index a09aa27936fc3658d302d884fd0b090f5652ea95..13a9fa3d03a6d9ffac9d9ce541073378d3cd66c1 100644
--- a/projects/voxelization/resources/shaders/shader.frag
+++ b/projects/voxelization/resources/shaders/shader.frag
@@ -57,6 +57,17 @@ float interleavedGradientNoise(vec2 uv){
     return fract(magic.z * fract(dot(uv, magic.xy)));
 }
 
+// from: https://www.unrealengine.com/en-US/blog/physically-based-shading-on-mobile
+vec3 EnvBRDFApprox(vec3 SpecularColor, float Roughness, float NoV )
+{
+	const vec4 c0 = { -1, -0.0275, -0.572, 0.022 };
+	const vec4 c1 = { 1, 0.0425, 1.04, -0.04 };
+	vec4 r = Roughness * c0 + c1;
+	float a004 = min( r.x * r.x, exp2( -9.28 * NoV ) ) * r.x + r.y;
+	vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;
+	return SpecularColor * AB.x + AB.y;
+}
+
 void main()	{
 
     vec3 albedoTexel    = texture(sampler2D(albedoTexture, textureSampler), passUV).rgb;
@@ -81,11 +92,10 @@ void main()	{
     vec3 V  = normalize(cameraPos - passPos);
     
     float NoL = clamp(dot(N, L), 0, 1);    
-    float NoV = clamp(dot(N, V), 0, 1);
-    
-    vec3 sunSpecular = cookTorrance(f0, r, N, V, L);
+    float NoV = clamp(abs(dot(N, V)), 0, 1);
     
-    vec3 sun        = lightInfo.sunStrength * lightInfo.sunColor * NoL;
+    vec3 sunSpecular    = cookTorrance(f0, r, N, V, L);
+    vec3 sun            = lightInfo.sunStrength * lightInfo.sunColor * NoL;
     
     float   noise           = 2 * pi * interleavedGradientNoise(gl_FragCoord.xy);
     vec2    shadowOffset    = 0.05f * vec2(sin(noise), cos(noise)) / textureSize(sampler2D(shadowMap, shadowMapSampler), 0);
@@ -109,7 +119,7 @@ void main()	{
     offsetTraceStart            += R * interleavedGradientNoise(gl_FragCoord.xy) * 0.5;
     vec3 specularTrace          = voxelConeTrace(R, offsetTraceStart, reflectionConeAngle, voxelTexture, voxelSampler, voxelInfo);
     specularTrace               *= clamp(dot(N, R), 0, 1);
-    vec3 reflectionBRDF         = cookTorrance(f0, r, N, V, R);
+    vec3 reflectionBRDF         = EnvBRDFApprox(f0, r, NoV); 
     
 	outColor = 
         (diffuse + sunSpecular) * sun + 
diff --git a/projects/voxelization/resources/shaders/voxel.inc b/projects/voxelization/resources/shaders/voxel.inc
index a22ea032ccd371f9f131aa007a2b793b2e6091c0..6133ca7cfc52ca77cb70fb8c2cc0e83ef6da4016 100644
--- a/projects/voxelization/resources/shaders/voxel.inc
+++ b/projects/voxelization/resources/shaders/voxel.inc
@@ -149,10 +149,8 @@ vec3 voxelConeTrace(vec3 direction, vec3 startPosition, float coneAngleRadian, t
         color               += (1 - a) * voxelSample.rgb;
         a                   += (1 - a) * voxelSample.a;
         
-        float minStepSize   = 1.5f;
+        float minStepSize   = 1.f;
         d                   += max(coneDiameter, minStepSize);
-        samplePos           = startPosition + d * direction;
-        sampleUV            = worldToVoxelCoordinates(samplePos, voxelInfo);
     }
     return color;
 }