p1.shader 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. shader_type spatial;
  2. render_mode blend_mix,depth_draw_opaque, cull_back,diffuse_burley,specular_schlick_ggx,unshaded,shadows_disabled;
  3. uniform vec3 dir_angle;
  4. uniform sampler2D iChannel0;
  5. uniform float iTime;
  6. //credits https://www.shadertoy.com/view/Msdfz8
  7. vec3 Cloud(vec3 bgCol,vec3 rd,vec3 cloudCol,float spd)
  8. {
  9. mat2 m2 = mat2(vec2(0.60, -0.80), vec2(0.80, 0.60));
  10. vec3 col = bgCol;
  11. float t = iTime * 0.15* spd;
  12. vec2 sc =rd.xz*((3.)*40000.0)/max(rd.y,0.001);
  13. vec2 p = 0.00002*sc;
  14. float f = 0.0;
  15. float s = 0.5;
  16. float sum =0.;
  17. for(int i=0;i<5;i++){
  18. p += t;t *=1.5;
  19. f += s*textureLod( iChannel0, p/256.0, 0.0).x; p = m2*p*2.02;
  20. sum+= s;s*=0.6;
  21. }
  22. float val = f/sum;
  23. col = mix( col, cloudCol, 0.5*smoothstep(0.5,0.8,val) );
  24. return col;
  25. }
  26. // https://www.shadertoy.com/view/lt2SR1
  27. vec3 skyColor( in vec3 rd, vec3 c1, vec3 c2)
  28. {
  29. vec3 sundir = normalize( -dir_angle );
  30. float yd = min(rd.y, 0.);
  31. rd.y = max(rd.y, 0.);
  32. vec3 col = vec3(0.);
  33. col += vec3(.4, .84 - exp( -rd.y*20. )*.3, .74- exp( -rd.y*20. )*.3) * exp(-rd.y*9.); //horizont color
  34. col += c1 * (1. - exp(-rd.y*8.) ) * exp(-rd.y*.9) ;
  35. col = mix(col*1.2, vec3(.3), 1.-exp(yd*100.));
  36. col += c2 * pow( max(dot(rd,sundir),0.), 20. ) * .6;
  37. col += pow(max(dot(rd, sundir),0.), 150.0) *.15;
  38. return col;
  39. }
  40. vec3 sky(vec3 rd) {
  41. vec3 c1=vec3(.3, .5, .76); // sky color
  42. vec3 c2=vec3(1.3, 1.18, 1.35); // sun col
  43. vec3 ch=skyColor(rd,c1,c2);
  44. vec3 col=vec3(0.);
  45. if(rd.y>0.)
  46. col=Cloud(ch,rd,vec3(1.0,0.95,1.0),1.);
  47. col = mix(col, 0.68*ch, pow( 1.0-max(rd.y,0.0), 16.0));
  48. col = mix(col, ch, pow(1.0 - max(abs(rd.y)-0.025, 0.0), 4.0));
  49. return col;
  50. }
  51. void fragment() {
  52. vec3 rd=normalize(((CAMERA_MATRIX*vec4(normalize(-VERTEX),0.0)).xyz));
  53. rd=-rd;
  54. vec3 sky_col=sky(rd);
  55. ALBEDO=sky_col;
  56. //ALBEDO=ALBEDO*ALBEDO; //to use in Godot GLES3 add this color correction
  57. }