sheen.glsl 987 B

12345678910111213141516171819202122232425262728293031323334
  1. varying vec4 Ca;
  2. varying vec4 Cd;
  3. varying vec4 Cs;
  4. varying vec4 V_eye;
  5. varying vec4 L_eye;
  6. varying vec4 N_eye;
  7. const vec3 esheen = vec3( 0.1, 0.2, 0.5 ); // Environment sheen
  8. const vec3 lsheen = vec3( 0.3, 0.4, 0.5 ); // Light sheen
  9. const vec3 gsheen = vec3( 0.4, 0.35, 0.3 ); // Glow sheen
  10. const float breathe = 0.8; // Sheen attenuation
  11. void main(void)
  12. {
  13. vec3 V = normalize(vec3(V_eye));
  14. vec3 L = normalize(vec3(L_eye));
  15. vec3 N = normalize(vec3(N_eye));
  16. float diffuse = clamp(dot(L, N), 0.0, 1.0);
  17. vec3 H = normalize(L + V);
  18. float cos = dot(N, V);
  19. float sin = sqrt(1.0-pow(cos, 2.0));
  20. vec3 specular = vec3(0.0, 0.0, 0.0);
  21. specular = specular + pow(sin, (1.0/breathe*5.0)) * dot(L, V) * vec3(Cs) * esheen;
  22. specular = specular + pow(sin, (1.0/breathe*5.0)) * dot(L, N) * vec3(Cs) * lsheen;
  23. specular = specular + pow(cos, (breathe*5.0)) * dot(L, N) * vec3(Cs) * gsheen;
  24. gl_FragColor = Ca + (Cd*diffuse) + vec4(specular, 1.0);
  25. }