Add exposure HDR lighting

This commit is contained in:
4VRDriver
2020-09-22 10:40:25 +02:00
parent 34a294dcaf
commit bbd186bca9
13 changed files with 165 additions and 43 deletions

View File

@@ -35,8 +35,6 @@ struct PointLight {
bool isActive;
vec3 position;
float K_c;
float K_l;
float K_q;
vec3 ambient;
@@ -54,8 +52,6 @@ struct SpotLight {
float innerCutOff;
float outerCutOff;
float K_c;
float K_l;
float K_q;
vec3 ambient;
@@ -77,7 +73,7 @@ void computeShading(
out vec3 ambient, out vec3 diffuse, out vec3 specular
);
float computeAttenuation(vec3 lightPos, vec3 fragPos, float K_c, float K_l, float K_q);
float computeAttenuation(vec3 lightPos, vec3 fragPos, float K_q);
void main() {
@@ -123,7 +119,7 @@ vec3 pointLightContribution(PointLight light, vec3 normal, vec3 fragPos, vec3 vi
vec3 ambient, diffuse, specular;
computeShading(light.ambient, light.diffuse, light.specular, lightDir, viewDir, normal, ambient, diffuse, specular);
float attenuation = computeAttenuation(light.position, fragPos, light.K_c, light.K_l, light.K_q);
float attenuation = computeAttenuation(light.position, fragPos, light.K_q);
ambient *= attenuation;
diffuse *= attenuation;
specular *= attenuation;
@@ -142,7 +138,7 @@ vec3 spotLightContribution(SpotLight light, vec3 normal, vec3 fragPos, vec3 view
vec3 ambient, diffuse, specular;
computeShading(light.ambient, light.diffuse, light.specular, lightDir, viewDir, normal, ambient, diffuse, specular);
float attenuation = computeAttenuation(light.position, fragPos, light.K_c, light.K_l, light.K_q);
float attenuation = computeAttenuation(light.position, fragPos, light.K_q);
ambient *= attenuation;
diffuse *= attenuation;
specular *= attenuation;
@@ -178,10 +174,10 @@ void computeShading(
}
float computeAttenuation(vec3 lightPos, vec3 fragPos, float K_c, float K_l, float K_q) {
float computeAttenuation(vec3 lightPos, vec3 fragPos, float K_q) {
float distanceLightFragment = length(lightPos - fragPos);
//return 1.0f / (K_c + K_l * distanceLightFragment + K_q * distanceLightFragment * distanceLightFragment);#
return 1.0f / (K_q * distanceLightFragment * distanceLightFragment);
}

View File

@@ -6,12 +6,17 @@ layout(location = 0) out vec4 f_color;
in vec2 v_tex_coords;
uniform float u_exposure;
uniform sampler2D u_texture;
void main() {
vec3 fragmentColor = vec3(texture2D(u_texture, v_tex_coords));
// Exposure tone mapping
fragmentColor = vec3(1.0) - exp(-fragmentColor * u_exposure);
// Gamma correction
fragmentColor = pow(fragmentColor, vec3(1.0/GAMMA));