annotate sdr/vein.p.glsl @ 5:aab0d8ea21cd
normalmap and sortof subsurface shader
author |
John Tsiombikas <nuclear@member.fsf.org> |
date |
Sun, 22 Apr 2012 06:26:08 +0300 |
parents |
c6a6a64df6de |
children |
2723dc026c4f |
rev |
line source |
nuclear@4
|
1 uniform sampler2D tex_norm;
|
nuclear@5
|
2 uniform vec3 fog_col;
|
nuclear@4
|
3
|
nuclear@3
|
4 varying vec3 vpos, vnorm;
|
nuclear@3
|
5 varying vec3 ldir, vdir;
|
nuclear@3
|
6
|
nuclear@5
|
7 const float fog_dens = 0.075;
|
nuclear@5
|
8
|
nuclear@5
|
9 float fog(float dist);
|
nuclear@5
|
10
|
nuclear@3
|
11 void main()
|
nuclear@3
|
12 {
|
nuclear@4
|
13 vec3 tnorm = texture2D(tex_norm, gl_TexCoord[0].st).xyz * 2.0 - 1.0;
|
nuclear@4
|
14 vec3 n = normalize(tnorm);
|
nuclear@3
|
15 vec3 v = normalize(vdir);
|
nuclear@4
|
16 vec3 l = v;//normalize(ldir);
|
nuclear@3
|
17 vec3 h = normalize(l + v);
|
nuclear@3
|
18
|
nuclear@4
|
19 vec3 diff = vec3(0.8, 0.25, 0.2) * (1.0 - max(dot(l, n), 0.0));
|
nuclear@4
|
20 vec3 spec = 0.5 * vec3(0.9, 0.4, 0.3) * pow(max(dot(h, n), 0.0), 10.0);
|
nuclear@3
|
21
|
nuclear@5
|
22 vec3 color = mix(fog_col, diff + spec, fog(vpos.z));
|
nuclear@5
|
23
|
nuclear@5
|
24 gl_FragColor = vec4(color, 1.0);
|
nuclear@3
|
25 }
|
nuclear@5
|
26
|
nuclear@5
|
27 #define LOG2E 1.442695
|
nuclear@5
|
28 float fog(float dist)
|
nuclear@5
|
29 {
|
nuclear@5
|
30 return clamp(exp2(-fog_dens * fog_dens * dist * dist * LOG2E), 0.0, 1.0);
|
nuclear@5
|
31 }
|