sky.glslf 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #version GLSL_VERSION
  2. /*==============================================================================
  3. VARS
  4. ==============================================================================*/
  5. #var WO_SKYTEX 0
  6. #var WO_SKYREAL 0
  7. #var WO_SKYBLEND 0
  8. #var PROCEDURAL_SKYDOME 0
  9. #var WATER_EFFECTS 0
  10. #var DISABLE_FOG 0
  11. #var WO_SKYPAPER 0
  12. #var REFLECTION_PASS REFL_PASS_NONE
  13. #var WATER_LEVEL 0.0
  14. /*============================================================================*/
  15. #include <precision_statement.glslf>
  16. #include <std.glsl>
  17. #include <color_util.glslf>
  18. uniform samplerCube u_sky;
  19. #if WATER_EFFECTS && !DISABLE_FOG && REFLECTION_PASS == REFL_PASS_NONE
  20. uniform vec3 u_camera_eye_frag;
  21. uniform vec4 u_underwater_fog_color_density;
  22. #endif
  23. #if WO_SKYBLEND && WO_SKYPAPER
  24. uniform vec4 u_sky_tex_fac; // blendfac, horizonfac, zenupfac, zendownfac
  25. uniform vec3 u_sky_tex_color;
  26. uniform float u_sky_tex_dvar;
  27. uniform vec3 u_horizon_color;
  28. uniform vec3 u_zenith_color;
  29. #endif
  30. #if WO_SKYBLEND && WO_SKYPAPER && WO_SKYTEX
  31. #include <sky_blending.glslf>
  32. #endif
  33. /*==============================================================================
  34. SHADER INTERFACE
  35. ==============================================================================*/
  36. GLSL_IN vec3 v_ray;
  37. #if !PROCEDURAL_SKYDOME && (WO_SKYTEX || WO_SKYBLEND)
  38. GLSL_IN vec2 v_texcoord;
  39. #endif
  40. //------------------------------------------------------------------------------
  41. GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
  42. /*==============================================================================
  43. MAIN
  44. ==============================================================================*/
  45. void main(void) {
  46. vec3 sky_color;
  47. vec3 ray = normalize(v_ray);
  48. #if WO_SKYBLEND && WO_SKYPAPER
  49. float blend = 0.0;
  50. # if WO_SKYREAL
  51. blend = abs(v_texcoord.y);
  52. # else
  53. blend = (v_texcoord.y + 1.0) * 0.5;
  54. # endif
  55. vec3 hor = u_horizon_color;
  56. vec3 zen = u_zenith_color;
  57. # if WO_SKYTEX
  58. vec3 view = vec3(v_texcoord, 0.0);
  59. vec4 tcol = GLSL_TEXTURE_CUBE(u_sky, ray);
  60. srgb_to_lin(tcol.rgb);
  61. sky_color = blend_sky_color(hor, zen, tcol, blend, view);
  62. # else // WO_SKYTEX
  63. sky_color = mix(hor, zen, blend);
  64. # endif
  65. #else
  66. sky_color = GLSL_TEXTURE_CUBE(u_sky, ray).rgb;
  67. srgb_to_lin(sky_color);
  68. #endif
  69. #if WATER_EFFECTS && !DISABLE_FOG && REFLECTION_PASS == REFL_PASS_NONE
  70. // apply underwater fog to the skyplane
  71. float cam_depth = WATER_LEVEL - u_camera_eye_frag.z;
  72. // color of underwater depth
  73. vec3 depth_col = vec3(0.0);
  74. vec3 fog_color = mix(u_underwater_fog_color_density.rgb, depth_col, min(-ray.z, 1.0));
  75. fog_color *= min(1.0 - min(0.03 * cam_depth, 0.8), 1.0);
  76. // fog blending factor
  77. float factor = clamp(sign(0.01 * cam_depth - ray.z), 0.0, 1.0);
  78. sky_color = mix(sky_color, fog_color, factor);
  79. #endif
  80. lin_to_srgb(sky_color);
  81. GLSL_OUT_FRAG_COLOR = vec4(sky_color, 1.0);
  82. }