]> gitweb.ps.run Git - subsurface_scattering/blobdiff - shaders/frag_irradiance.glsl
add PDF and exes
[subsurface_scattering] / shaders / frag_irradiance.glsl
index 9e14ebe2e2da8dd07e31d4cb92b71abe40cfdd6f..2a7edec2f333696d2227f8f5a11458f2087e9de9 100644 (file)
@@ -1,19 +1,25 @@
 #version 330 core\r
 \r
 in vec3 FragPos;\r
+in vec3 LocalPos;\r
+in vec3 Backside;\r
+in float BacksideIrradiance;\r
 in vec3 Normal;\r
 \r
 out vec4 FragColor;\r
 \r
-uniform sampler2D shadowmapTexture;\r
-\r
 uniform vec3 objectColor;\r
 uniform vec3 lightColor;\r
 uniform vec3 lightPos;\r
 uniform vec3 viewPos;\r
+uniform float transmittanceScale;\r
+uniform int renderState;\r
+uniform float powBase;\r
+uniform float powFactor;\r
 \r
 void main()\r
 {\r
+  // phong lighting\r
   vec3 norm = normalize(Normal);\r
   vec3 lightDir = normalize(lightPos - FragPos);\r
 \r
@@ -30,5 +36,17 @@ void main()
   vec3 specular = specularStrength * spec * lightColor;\r
 \r
   vec3 result = (ambient + diffuse + specular) * objectColor;\r
+\r
+  // thickness\r
+  float distanceToBackside = length(FragPos - Backside);\r
+\r
+  if (distanceToBackside != 0) {\r
+    // add translucency by amplifying color inverse to the thickness\r
+    // (1 - diff) is part of the irradiance term,\r
+    // if the light hits the object straight at 90°\r
+    // most light is received\r
+    result += objectColor * pow(powBase, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff);\r
+  }\r
+    \r
   FragColor = vec4(result, 1.0f);\r
 }\r