Shuvit game master repo. http://shuvit.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wind_vertex_lighting.frag 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. varying vec3 frontLighting;
  2. varying vec3 backLighting;
  3. varying vec3 frontSpecular;
  4. varying vec3 backSpecular;
  5. varying vec3 eyePos;
  6. varying vec2 texCoord;
  7. uniform vec3 ambientColor;
  8. uniform float emission;
  9. uniform sampler2D diffuse1;
  10. uniform vec2 scale1;
  11. uniform float mistEnable;
  12. uniform float mistStart;
  13. uniform float mistDistance;
  14. uniform float mistIntensity;
  15. uniform float mistType;
  16. uniform vec3 mistColor;
  17. // ########################################Functions########################################
  18. float linearrgb_to_srgb(float c)
  19. {
  20. if(c < 0.0031308)
  21. return (c < 0.0) ? 0.0: c * 12.92;
  22. else
  23. return 1.055 * pow(c, 1.0/2.4) - 0.055;
  24. }
  25. float srgb_to_linearrgb(float c)
  26. {
  27. if(c < 0.04045)
  28. return (c < 0.0) ? 0.0: c * (1.0 / 12.92);
  29. else
  30. return pow((c + 0.055)*(1.0/1.055), 2.4);
  31. }
  32. vec3 linearrgb_to_srgb(vec3 col_from)
  33. {
  34. vec3 col_to;
  35. col_to.r = linearrgb_to_srgb(col_from.r);
  36. col_to.g = linearrgb_to_srgb(col_from.g);
  37. col_to.b = linearrgb_to_srgb(col_from.b);
  38. return col_to;
  39. }
  40. vec3 srgb_to_linearrgb(vec3 col_from)
  41. {
  42. vec3 col_to;
  43. col_to.r = srgb_to_linearrgb(col_from.r);
  44. col_to.g = srgb_to_linearrgb(col_from.g);
  45. col_to.b = srgb_to_linearrgb(col_from.b);
  46. return col_to;
  47. }
  48. vec3 shade_mist_blend(vec3 co, float enable, float miststa, float mistdist, float misttype, float intensity, vec3 col1, vec3 col2)
  49. {
  50. float mist = 0.0;
  51. if(enable == 1.0)
  52. {
  53. float fac, zcor;
  54. zcor = (gl_ProjectionMatrix[3][3] == 0.0)? length(co): -co[2];
  55. fac = clamp((zcor - miststa) / mistdist, 0.0, 1.0);
  56. if(misttype == 0.0) fac *= fac;
  57. else if(misttype == 1.0);
  58. else fac = sqrt(fac);
  59. mist = 1.0 - (1.0 - fac) * (1.0 - intensity);
  60. }
  61. float mixFac = clamp(mist, 0.0, 1.0);
  62. vec3 result = mix(col1, col2, mixFac);
  63. return result;
  64. }
  65. // ########################################Main-Function########################################
  66. void main()
  67. {
  68. vec2 ofs = (1.0 - scale1) / 2.0;
  69. vec4 dif1 = texture2D(diffuse1, texCoord*scale1+ofs);
  70. dif1.rgb = srgb_to_linearrgb(dif1.rgb);
  71. vec4 color = dif1;
  72. if (gl_FrontFacing)
  73. {
  74. color.rgb = (emission * dif1.rgb) + ambientColor + (frontLighting * dif1.rgb) + frontSpecular;
  75. }
  76. else
  77. {
  78. color.rgb = (emission * dif1.rgb) + ambientColor + (backLighting * dif1.rgb) + backSpecular;
  79. }
  80. color.rgb = shade_mist_blend(eyePos, mistEnable, mistStart, mistDistance, mistType, mistIntensity, color.rgb, mistColor);
  81. color.rgb = linearrgb_to_srgb(color.rgb);
  82. gl_FragColor = color;
  83. }