Image Based PBR Material with SSR




Material:
MaterialParameters {
Color Diffuse : 1 1 1 1
Texture2D DiffuseMap
Texture2D NormalMap
TextureCubeMap RefMap
Float Metallic : 0
Texture2D MetallicMap
Float Roughness : 0.8
Texture2D RoughnessMap
Texture2D LightMap

	Texture2D GlowMap
	//SSR
	Boolean UseSSR
}

SSR:
MaterialParameters {
Int NumSamples
Int NumSamplesDepth
Texture2D Texture
Texture2D DepthTexture
Texture2D ViewNormal
Texture2D MaterialData
Vector3 FrustumCorner
Vector2 FrustumNearFar
}

8 Likes

How does this exactly work?

what is “Image Based PBR” ? how does it differ from regular PBR or IBL ?

the SSR is an impressive achievement but no mention of the EnvMaps also being used ?

what are the artefacts we are seeing in the top centre of the model ? is it simply incorrect normals or something more ?

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.