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_color.frag 2.5KB

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