projects
/
opengl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implement IBL diffuse part
[opengl.git]
/
pbrfrag.glsl
diff --git
a/pbrfrag.glsl
b/pbrfrag.glsl
index 4421b99b6021a9e6a7da4953122bebf30bbf2499..16a9fa7a1ba6128257bff2175ee0b24a8868d407 100644
(file)
--- a/
pbrfrag.glsl
+++ b/
pbrfrag.glsl
@@
-12,6
+12,7
@@
uniform sampler2D normalMap;
uniform sampler2D metallicMap;
uniform sampler2D roughnessMap;
uniform sampler2D aoMap;
uniform sampler2D metallicMap;
uniform sampler2D roughnessMap;
uniform sampler2D aoMap;
+uniform samplerCube irradianceMap;
out vec4 fragColor;
out vec4 fragColor;
@@
-24,6
+25,10
@@
vec3 fresnelSchlick(float cosTheta, vec3 F0) {
return F0 + (1.f - F0) * pow(1.f - cosTheta, 5.f);
}
return F0 + (1.f - F0) * pow(1.f - cosTheta, 5.f);
}
+vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness) {
+ return F0 + (max(vec3(1.f - roughness), F0) - F0) * pow(1.f - cosTheta, 5.f);
+}
+
float distributionGGX(vec3 N, vec3 H, float roughness) {
float a = roughness * roughness;
float NdotH = mdot(N, H);
float distributionGGX(vec3 N, vec3 H, float roughness) {
float a = roughness * roughness;
float NdotH = mdot(N, H);
@@
-97,7
+102,9
@@
void main() {
Lo += (kD * albedo / PI + specular) * radiance * mdot(N, L);
}
Lo += (kD * albedo / PI + specular) * radiance * mdot(N, L);
}
- vec3 ambient = vec3(0.03) * albedo * ao;
+ vec3 kD = 1.f - fresnelSchlickRoughness(mdot(N, V), F0, roughness);
+ vec3 diffuse = texture(irradianceMap, N).rgb * albedo;
+ vec3 ambient = (kD * diffuse) * ao;
vec3 color = ambient + Lo;
color = color / (color + vec3(1.f)); // map to HDR
vec3 color = ambient + Lo;
color = color / (color + vec3(1.f)); // map to HDR