Merge pull request #29909 from clayjohn/gles2-light-scale
Scale vertex lit lights by environment scale
This commit is contained in:
commit
b0eeb12335
1 changed files with 35 additions and 22 deletions
|
@ -262,7 +262,7 @@ void light_compute(
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SRGB_APPROX(specular_brdf_NL)
|
SRGB_APPROX(specular_brdf_NL)
|
||||||
specular_interp += specular_brdf_NL * light_color * attenuation;
|
specular_interp += specular_brdf_NL * light_color * attenuation * (1.0 / M_PI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1641,6 +1641,15 @@ FRAGMENT_SHADER_CODE
|
||||||
|
|
||||||
#endif // defined(USE_REFLECTION_PROBE1) || defined(USE_REFLECTION_PROBE2)
|
#endif // defined(USE_REFLECTION_PROBE1) || defined(USE_REFLECTION_PROBE2)
|
||||||
|
|
||||||
|
// environment BRDF approximation
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
#if defined(DIFFUSE_TOON)
|
||||||
|
//simplify for toon, as
|
||||||
|
specular_light *= specular * metallic * albedo * 2.0;
|
||||||
|
#else
|
||||||
|
|
||||||
// scales the specular reflections, needs to be be computed before lighting happens,
|
// scales the specular reflections, needs to be be computed before lighting happens,
|
||||||
// but after environment and reflection probes are added
|
// but after environment and reflection probes are added
|
||||||
//TODO: this curve is not really designed for gammaspace, should be adjusted
|
//TODO: this curve is not really designed for gammaspace, should be adjusted
|
||||||
|
@ -1654,6 +1663,9 @@ FRAGMENT_SHADER_CODE
|
||||||
vec3 f0 = F0(metallic, specular, albedo);
|
vec3 f0 = F0(metallic, specular, albedo);
|
||||||
specular_light *= env.x * f0 + env.y;
|
specular_light *= env.x * f0 + env.y;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef USE_LIGHTMAP
|
#ifdef USE_LIGHTMAP
|
||||||
//ambient light will come entirely from lightmap is lightmap is used
|
//ambient light will come entirely from lightmap is lightmap is used
|
||||||
ambient_light = texture2D(lightmap, uv2_interp).rgb * lightmap_energy;
|
ambient_light = texture2D(lightmap, uv2_interp).rgb * lightmap_energy;
|
||||||
|
@ -2048,6 +2060,17 @@ FRAGMENT_SHADER_CODE
|
||||||
specular_light += specular_interp * specular_blob_intensity * light_att;
|
specular_light += specular_interp * specular_blob_intensity * light_att;
|
||||||
diffuse_light += diffuse_interp * albedo * light_att;
|
diffuse_light += diffuse_interp * albedo * light_att;
|
||||||
|
|
||||||
|
// Same as above, needed for VERTEX_LIGHTING or else lights are too bright
|
||||||
|
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
||||||
|
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
||||||
|
vec4 r = roughness * c0 + c1;
|
||||||
|
float ndotv = clamp(dot(normal, eye_position), 0.0, 1.0);
|
||||||
|
float a004 = min(r.x * r.x, exp2(-9.28 * ndotv)) * r.x + r.y;
|
||||||
|
vec2 env = vec2(-1.04, 1.04) * a004 + r.zw;
|
||||||
|
|
||||||
|
vec3 f0 = F0(metallic, specular, albedo);
|
||||||
|
specular_light *= env.x * f0 + env.y;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
//fragment lighting
|
//fragment lighting
|
||||||
light_compute(
|
light_compute(
|
||||||
|
@ -2115,16 +2138,6 @@ FRAGMENT_SHADER_CODE
|
||||||
diffuse_light *= 1.0 - metallic;
|
diffuse_light *= 1.0 - metallic;
|
||||||
ambient_light *= 1.0 - metallic;
|
ambient_light *= 1.0 - metallic;
|
||||||
|
|
||||||
// environment BRDF approximation
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
#if defined(DIFFUSE_TOON)
|
|
||||||
//simplify for toon, as
|
|
||||||
specular_light *= specular * metallic * albedo * 2.0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
gl_FragColor = vec4(ambient_light + diffuse_light + specular_light, alpha);
|
gl_FragColor = vec4(ambient_light + diffuse_light + specular_light, alpha);
|
||||||
|
|
||||||
//add emission if in base pass
|
//add emission if in base pass
|
||||||
|
|
Loading…
Reference in a new issue