diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-04-26 00:48:26 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-04-26 00:51:05 +0300 |
commit | 82686f0a0c2c1d5c42b07288935440aea4713cad (patch) | |
tree | b9b750c1849c2446d420deb14b229e792d5bb594 /source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | |
parent | bb75b0bcbcea35fe32e439c8f3e618b66f5110cf (diff) |
Eevee: World default shader.
- Use uniform color world for the world probe.
- Refactored the Fresnel expression to be better with Area Lights.
- Squared the roughness for default materials.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl index dca3c99453e..7a0a7b8da91 100644 --- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl @@ -37,30 +37,30 @@ out vec4 fragColor; #define HEMI 3.0 #define AREA 4.0 -float light_diffuse(LightData ld, ShadingData sd) +vec3 light_diffuse(LightData ld, ShadingData sd, vec3 albedo) { if (ld.l_type == SUN) { - return direct_diffuse_sun(ld, sd); + return direct_diffuse_sun(ld, sd) * albedo; } else if (ld.l_type == AREA) { - return direct_diffuse_rectangle(ld, sd); + return direct_diffuse_rectangle(ld, sd) * albedo; } else { - return direct_diffuse_sphere(ld, sd); + return direct_diffuse_sphere(ld, sd) * albedo; } } -float light_specular(LightData ld, ShadingData sd, float roughness) +vec3 light_specular(LightData ld, ShadingData sd, float roughness, vec3 f0) { if (ld.l_type == SUN) { - return direct_ggx_point(sd, roughness); + return direct_ggx_point(sd, roughness, f0); } else if (ld.l_type == AREA) { - return direct_ggx_rectangle(ld, sd, roughness); + return direct_ggx_rectangle(ld, sd, roughness, f0); } else { - // return direct_ggx_point(sd, roughness); - return direct_ggx_sphere(ld, sd, roughness); + // return direct_ggx_point(sd, roughness, f0); + return direct_ggx_sphere(ld, sd, roughness, f0); } } @@ -254,11 +254,10 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness) light_common(ld, sd); float vis = light_visibility(ld, sd); - float spec = light_specular(ld, sd, roughness); - float diff = light_diffuse(ld, sd); - vec3 fresnel = light_fresnel(ld, sd, f0); + vec3 spec = light_specular(ld, sd, roughness, f0); + vec3 diff = light_diffuse(ld, sd, albedo); - radiance += vis * (albedo * diff + fresnel * spec) * ld.l_color; + radiance += vis * (diff + spec) * ld.l_color; } /* Envmaps */ |