X-Git-Url: https://gitweb.ps.run/subsurface_scattering/blobdiff_plain/a0fdc6d882a1755d0b0607ba3d9bb55e7f8ac006..refs/heads/main:/shaders/frag_irradiance.glsl diff --git a/shaders/frag_irradiance.glsl b/shaders/frag_irradiance.glsl index 497bdf0..2a7edec 100644 --- a/shaders/frag_irradiance.glsl +++ b/shaders/frag_irradiance.glsl @@ -19,6 +19,7 @@ uniform float powFactor; void main() { + // phong lighting vec3 norm = normalize(Normal); vec3 lightDir = normalize(lightPos - FragPos); @@ -34,22 +35,18 @@ void main() float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32); vec3 specular = specularStrength * spec * lightColor; - //float distanceToBackside = length(clamp(FragPos - Backside, vec3(0), vec3(1000))); - float distanceToBackside = length(FragPos - Backside); - //distanceToBackside = distance(Backside, LocalPos); vec3 result = (ambient + diffuse + specular) * objectColor; - if (renderState == 3) - if (distanceToBackside != 0) - //result += objectColor * pow(powBase, -pow(distanceToBackside, 2)) * transmittanceScale * (1 - diff); - result += objectColor * pow(powBase, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff); - // if (renderState == 3) { - // //result = Backside; - // //result = LocalPos; - // result = vec3(distanceToBackside); - // } + // thickness + float distanceToBackside = length(FragPos - Backside); + if (distanceToBackside != 0) { + // add translucency by amplifying color inverse to the thickness + // (1 - diff) is part of the irradiance term, + // if the light hits the object straight at 90° + // most light is received + result += objectColor * pow(powBase, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff); + } FragColor = vec4(result, 1.0f); - //FragColor = vec4(vec3(distanceToBackside), 1); }