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.

EllipsoidElectricMaterial.glsl 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. uniform vec4 color;
  2. uniform float speed;
  3. #define pi 3.1415926535
  4. #define PI2RAD 0.01745329252
  5. #define TWO_PI (2. * PI)
  6. float rands(float p){
  7. return fract(sin(p) * 10000.0);
  8. }
  9. float noise(vec2 p){
  10. float time = fract( czm_frameNumber * speed / 1000.0);
  11. float t = time / 20000.0;
  12. if(t > 1.0) t -= floor(t);
  13. return rands(p.x * 14. + p.y * sin(t) * 0.5);
  14. }
  15. vec2 sw(vec2 p){
  16. return vec2(floor(p.x), floor(p.y));
  17. }
  18. vec2 se(vec2 p){
  19. return vec2(ceil(p.x), floor(p.y));
  20. }
  21. vec2 nw(vec2 p){
  22. return vec2(floor(p.x), ceil(p.y));
  23. }
  24. vec2 ne(vec2 p){
  25. return vec2(ceil(p.x), ceil(p.y));
  26. }
  27. float smoothNoise(vec2 p){
  28. vec2 inter = smoothstep(0.0, 1.0, fract(p));
  29. float s = mix(noise(sw(p)), noise(se(p)), inter.x);
  30. float n = mix(noise(nw(p)), noise(ne(p)), inter.x);
  31. return mix(s, n, inter.y);
  32. }
  33. float fbm(vec2 p){
  34. float z = 2.0;
  35. float rz = 0.0;
  36. vec2 bp = p;
  37. for(float i = 1.0; i < 6.0; i++){
  38. rz += abs((smoothNoise(p) - 0.5)* 2.0) / z;
  39. z *= 2.0;
  40. p *= 2.0;
  41. }
  42. return rz;
  43. }
  44. czm_material czm_getMaterial(czm_materialInput materialInput)
  45. {
  46. czm_material material = czm_getDefaultMaterial(materialInput);
  47. vec2 st = materialInput.st;
  48. vec2 st2 = materialInput.st;
  49. float time = fract( czm_frameNumber * speed / 1000.0);
  50. if (st.t < 0.5) {
  51. discard;
  52. }
  53. st *= 4.;
  54. float rz = fbm(st);
  55. st /= exp(mod( time * 2.0, pi));
  56. rz *= pow(15., 0.9);
  57. vec4 temp = vec4(0);
  58. temp = mix( color / rz, vec4(color.rgb, 0.1), 0.2);
  59. if (st2.s < 0.05) {
  60. temp = mix(vec4(color.rgb, 0.1), temp, st2.s / 0.05);
  61. }
  62. if (st2.s > 0.95){
  63. temp = mix(temp, vec4(color.rgb, 0.1), (st2.s - 0.95) / 0.05);
  64. }
  65. material.diffuse = temp.rgb;
  66. material.alpha = temp.a * 2.0;
  67. return material;
  68. }