tex_skybox.glslf 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #version GLSL_VERSION
  2. #var WO_SKYTEX 0
  3. #var WO_SKYREAL 0
  4. #var WO_SKYBLEND 0
  5. #var WO_SKYPAPER 0
  6. #include <precision_statement.glslf>
  7. #include <std.glsl>
  8. #include <color_util.glslf>
  9. GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
  10. GLSL_IN vec3 v_ray;
  11. GLSL_IN vec2 v_texcoord;
  12. #if WO_SKYTEX
  13. uniform samplerCube u_sky_texture;
  14. #endif
  15. uniform vec4 u_sky_tex_fac; // blendfac, horizonfac, zenupfac, zendownfac
  16. uniform vec3 u_sky_tex_color;
  17. uniform float u_sky_tex_dvar;
  18. uniform vec3 u_horizon_color;
  19. uniform vec3 u_zenith_color;
  20. #if WO_SKYTEX
  21. #include <sky_blending.glslf>
  22. #endif
  23. void main(void) {
  24. vec3 ray = normalize(v_ray);
  25. vec3 sky_color;
  26. // shadeSkyView
  27. // skip skyflag
  28. float blend = 0.0;
  29. #if WO_SKYPAPER
  30. # if WO_SKYTEX
  31. sky_color = GLSL_TEXTURE_CUBE(u_sky_texture, ray).xyz;
  32. srgb_to_lin(sky_color);
  33. # else
  34. sky_color = vec3(1.0);
  35. # endif
  36. #else
  37. # if WO_SKYBLEND
  38. float alpha = acos(ray.z);
  39. # if WO_SKYREAL
  40. blend = abs(alpha * INV_PI - 0.5) * 2.0;
  41. # else
  42. blend = 1.0 - alpha * INV_PI;
  43. # endif
  44. # endif
  45. vec3 hor = u_horizon_color;
  46. vec3 zen = u_zenith_color;
  47. # if WO_SKYTEX
  48. vec4 tcol = GLSL_TEXTURE_CUBE(u_sky_texture, ray);
  49. srgb_to_lin(tcol.rgb);
  50. vec3 view = vec3(v_ray.xy, 0.0);
  51. sky_color = blend_sky_color(hor, zen, tcol, blend, view);
  52. # else // WO_SKYTEX
  53. # if WO_SKYBLEND
  54. sky_color = mix(hor, zen, blend);
  55. # else
  56. sky_color = hor;
  57. # endif
  58. # endif
  59. #endif
  60. lin_to_srgb(sky_color);
  61. GLSL_OUT_FRAG_COLOR = vec4(sky_color, 1.0);
  62. }