]> gitweb.ps.run Git - subsurface_scattering/blobdiff - shaders/frag_irradiance.glsl
SSSSS comments
[subsurface_scattering] / shaders / frag_irradiance.glsl
index 497bdf07adc643c2bdcaebda5989ff38ffa21e63..b985acfcb50c21bf7bb33feacf06bd934f5d4f25 100644 (file)
@@ -19,6 +19,7 @@ uniform float powFactor;
 \r
 void main()\r
 {\r
+  // phong lighting\r
   vec3 norm = normalize(Normal);\r
   vec3 lightDir = normalize(lightPos - FragPos);\r
 \r
@@ -34,22 +35,20 @@ void main()
   float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);\r
   vec3 specular = specularStrength * spec * lightColor;\r
 \r
-  //float distanceToBackside = length(clamp(FragPos - Backside, vec3(0), vec3(1000)));\r
-  float distanceToBackside = length(FragPos - Backside);\r
-  //distanceToBackside = distance(Backside, LocalPos);\r
   vec3 result = (ambient + diffuse + specular) * objectColor;\r
 \r
-  if (renderState == 3)\r
-    if (distanceToBackside != 0)\r
-      //result += objectColor * pow(powBase, -pow(distanceToBackside, 2)) * transmittanceScale * (1 - diff);\r
-      result += objectColor * pow(powBase, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff);\r
-  // if (renderState == 3) {\r
-  //   //result = Backside;\r
-  //   //result = LocalPos;\r
-  //   result = vec3(distanceToBackside);\r
-  // }\r
+  // thickness\r
+  float distanceToBackside = length(FragPos - Backside);\r
 \r
+  if (renderState == 2) {\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
     \r
   FragColor = vec4(result, 1.0f);\r
-  //FragColor = vec4(vec3(distanceToBackside), 1);\r
 }\r