I didn’t create different degree blur. And use envMap to make cube reflection. Not use EnvironmentCamera.
A fake blur is like this(roughness is 1).
vec3 textureBlured(samplerCube tex, vec3 tc) {
vec3 r = textureAVG(tex, vec3(1.0, 0.0, 0.0));
vec3 t = textureAVG(tex, vec3(0.0, 1.0, 0.0));
vec3 f = textureAVG(tex, vec3(0.0, 0.0, 1.0));
vec3 l = textureAVG(tex, vec3(-1.0, 0.0, 0.0));
vec3 b = textureAVG(tex, vec3(0.0, -1.0, 0.0));
vec3 a = textureAVG(tex, vec3(0.0, 0.0, -1.0));
float kr = dot(tc, vec3(1.0, 0.0, 0.0)) * 0.5 + 0.5;
float kt = dot(tc, vec3(0.0, 1.0, 0.0)) * 0.5 + 0.5;
float kf = dot(tc, vec3(0.0, 0.0, 1.0)) * 0.5 + 0.5;
float kl = 1.0 - kr;
float kb = 1.0 - kt;
float ka = 1.0 - kf;
kr = somestep(kr);
kt = somestep(kt);
kf = somestep(kf);
kl = somestep(kl);
kb = somestep(kb);
ka = somestep(ka);
float d;
vec3 ret;
ret = f * kf;
d = kf;
ret += a * ka;
d += ka;
ret += l * kl;
d += kl;
ret += r * kr;
d += kr;
ret += t * kt;
d += kt;
ret += b * kb;
d += kb;
return ret / d;
}
And then to do is to change the weight by roughness and fresnel.
vec3 finalRef = mix(ref, blurRef, (1.0 - fresnel) * roughness);
SSR have nothing to do with EnvMap.
These are the pictures that I use.