X-Git-Url: https://gitweb.ps.run/subsurface_scattering/blobdiff_plain/7a181bdf261b620adb266a4f6b485a0afd1ed306..36fb27a899045de24d71d55b06648abda7547268:/shaders/frag_irradiance.glsl diff --git a/shaders/frag_irradiance.glsl b/shaders/frag_irradiance.glsl index 9e14ebe..1bcbc99 100644 --- a/shaders/frag_irradiance.glsl +++ b/shaders/frag_irradiance.glsl @@ -1,16 +1,24 @@ #version 330 core in vec3 FragPos; +in vec3 LocalPos; +in vec3 Backside; +in float BacksideIrradiance; in vec3 Normal; out vec4 FragColor; -uniform sampler2D shadowmapTexture; - uniform vec3 objectColor; uniform vec3 lightColor; uniform vec3 lightPos; uniform vec3 viewPos; +uniform float transmittanceScale; +uniform int renderState; +uniform float powBase; +uniform float powFactor; + +uniform float translucencySampleVariances[6]; +uniform vec3 translucencySampleWeights[6]; void main() { @@ -29,6 +37,30 @@ 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, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff); + // vec3 translucency = vec3(0); + // for (int i = 0; i < 6; i++) { + // translucency += objectColor * translucencySampleWeights[i] * exp(-pow(distanceToBackside, 2.0) / translucencySampleVariances[i]); + // } + + // result += translucency * transmittanceScale; + } + } + //result += objectColor * pow(powBase, -pow(distanceToBackside, 2)) * transmittanceScale * (1 - diff); + // if (renderState == 3) { + // //result = Backside; + // //result = LocalPos; + // result = vec3(distanceToBackside); + // } + + FragColor = vec4(result, 1.0f); + //FragColor = vec4(vec3(distanceToBackside), 1); }