uniform float powBase;\r
uniform float powFactor;\r
\r
-uniform float translucencySampleVariances[6];\r
-uniform vec3 translucencySampleWeights[6];\r
-\r
void main()\r
{\r
+ // phong lighting\r
vec3 norm = normalize(Normal);\r
vec3 lightDir = normalize(lightPos - FragPos);\r
\r
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, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff);\r
- // vec3 translucency = vec3(0);\r
- // for (int i = 0; i < 6; i++) {\r
- // translucency += objectColor * translucencySampleWeights[i] * exp(-pow(distanceToBackside, 2.0) / translucencySampleVariances[i]);\r
- // }\r
+ // thickness\r
+ float distanceToBackside = length(FragPos - Backside);\r
\r
- // result += translucency * transmittanceScale;\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
- //result += objectColor * pow(powBase, -pow(distanceToBackside, 2)) * transmittanceScale * (1 - diff);\r
- // if (renderState == 3) {\r
- // //result = Backside;\r
- // //result = LocalPos;\r
- // result = vec3(distanceToBackside);\r
- // }\r
-\r
\r
FragColor = vec4(result, 1.0f);\r
- //FragColor = vec4(vec3(distanceToBackside), 1);\r
}\r