]> gitweb.ps.run Git - subsurface_scattering/blob - shaders/frag_irradiance.glsl
pre cleanup
[subsurface_scattering] / shaders / frag_irradiance.glsl
1 #version 330 core\r
2 \r
3 in vec3 FragPos;\r
4 in vec3 LocalPos;\r
5 in vec3 Backside;\r
6 in float BacksideIrradiance;\r
7 in vec3 Normal;\r
8 \r
9 out vec4 FragColor;\r
10 \r
11 uniform vec3 objectColor;\r
12 uniform vec3 lightColor;\r
13 uniform vec3 lightPos;\r
14 uniform vec3 viewPos;\r
15 uniform float transmittanceScale;\r
16 uniform int renderState;\r
17 uniform float powBase;\r
18 uniform float powFactor;\r
19 \r
20 uniform float translucencySampleVariances[6];\r
21 uniform vec3 translucencySampleWeights[6];\r
22 \r
23 void main()\r
24 {\r
25   vec3 norm = normalize(Normal);\r
26   vec3 lightDir = normalize(lightPos - FragPos);\r
27 \r
28   float diff = max(dot(norm, lightDir), 0.0);\r
29   vec3 diffuse = diff * lightColor;\r
30 \r
31   float ambientStrength = 0.1;\r
32   vec3 ambient = ambientStrength * lightColor;\r
33 \r
34   float specularStrength = 0.5;\r
35   vec3 viewDir = normalize(viewPos - FragPos);\r
36   vec3 reflectDir = reflect(-lightDir, norm);\r
37   float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);\r
38   vec3 specular = specularStrength * spec * lightColor;\r
39 \r
40   //float distanceToBackside = length(clamp(FragPos - Backside, vec3(0), vec3(1000)));\r
41   float distanceToBackside = length(FragPos - Backside);\r
42   //distanceToBackside = distance(Backside, LocalPos);\r
43   vec3 result = (ambient + diffuse + specular) * objectColor;\r
44 \r
45   if (renderState == 3) {\r
46     if (distanceToBackside != 0) {\r
47       result += objectColor * pow(powBase, powFactor / pow(distanceToBackside, 0.6)) * transmittanceScale * (1 - diff);\r
48       // vec3 translucency = vec3(0);\r
49       // for (int i = 0; i < 6; i++) {\r
50       //   translucency += objectColor * translucencySampleWeights[i] * exp(-pow(distanceToBackside, 2.0) / translucencySampleVariances[i]);\r
51       // }\r
52 \r
53       // result += translucency * transmittanceScale;\r
54     }\r
55   }\r
56       //result += objectColor * pow(powBase, -pow(distanceToBackside, 2)) * transmittanceScale * (1 - diff);\r
57   // if (renderState == 3) {\r
58   //   //result = Backside;\r
59   //   //result = LocalPos;\r
60   //   result = vec3(distanceToBackside);\r
61   // }\r
62 \r
63     \r
64   FragColor = vec4(result, 1.0f);\r
65   //FragColor = vec4(vec3(distanceToBackside), 1);\r
66 }\r