lava.fragment.fx.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Effect } from "babylonjs";
  2. let name = 'lavaPixelShader';
  3. let shader = `precision highp float;
  4. uniform vec3 vEyePosition;
  5. uniform vec4 vDiffuseColor;
  6. varying vec3 vPositionW;
  7. uniform float time;
  8. uniform float speed;
  9. uniform float movingSpeed;
  10. uniform vec3 fogColor;
  11. uniform sampler2D noiseTexture;
  12. uniform float fogDensity;
  13. varying float noise;
  14. #ifdef NORMAL
  15. varying vec3 vNormalW;
  16. #endif
  17. #ifdef VERTEXCOLOR
  18. varying vec4 vColor;
  19. #endif
  20. #include<helperFunctions>
  21. #include<__decl__lightFragment>[0]
  22. #include<__decl__lightFragment>[1]
  23. #include<__decl__lightFragment>[2]
  24. #include<__decl__lightFragment>[3]
  25. #include<lightsFragmentFunctions>
  26. #include<shadowsFragmentFunctions>
  27. #ifdef DIFFUSE
  28. varying vec2 vDiffuseUV;
  29. uniform sampler2D diffuseSampler;
  30. uniform vec2 vDiffuseInfos;
  31. #endif
  32. #include<clipPlaneFragmentDeclaration>
  33. #include<fogFragmentDeclaration>
  34. float random( vec3 scale,float seed ){
  35. return fract( sin( dot( gl_FragCoord.xyz+seed,scale ) )*43758.5453+seed ) ;
  36. }
  37. void main(void) {
  38. #include<clipPlaneFragment>
  39. vec3 viewDirectionW=normalize(vEyePosition-vPositionW);
  40. vec4 baseColor=vec4(1.,1.,1.,1.);
  41. vec3 diffuseColor=vDiffuseColor.rgb;
  42. float alpha=vDiffuseColor.a;
  43. #ifdef DIFFUSE
  44. vec4 noiseTex=texture2D( noiseTexture,vDiffuseUV );
  45. vec2 T1=vDiffuseUV+vec2( 1.5,-1.5 )*time*0.02;
  46. vec2 T2=vDiffuseUV+vec2( -0.5,2.0 )*time*0.01*speed;
  47. T1.x+=noiseTex.x*2.0;
  48. T1.y+=noiseTex.y*2.0;
  49. T2.x-=noiseTex.y*0.2+time*0.001*movingSpeed;
  50. T2.y+=noiseTex.z*0.2+time*0.002*movingSpeed;
  51. float p=texture2D( noiseTexture,T1*3.0 ).a;
  52. vec4 lavaColor=texture2D( diffuseSampler,T2*4.0);
  53. vec4 temp=lavaColor*( vec4( p,p,p,p )*2. )+( lavaColor*lavaColor-0.1 );
  54. baseColor=temp;
  55. float depth=gl_FragCoord.z*4.0;
  56. const float LOG2=1.442695;
  57. float fogFactor=exp2(-fogDensity*fogDensity*depth*depth*LOG2 );
  58. fogFactor=1.0-clamp( fogFactor,0.0,1.0 );
  59. baseColor=mix( baseColor,vec4( fogColor,baseColor.w ),fogFactor );
  60. diffuseColor=baseColor.rgb;
  61. #ifdef ALPHATEST
  62. if (baseColor.a<0.4)
  63. discard;
  64. #endif
  65. #include<depthPrePass>
  66. baseColor.rgb*=vDiffuseInfos.y;
  67. #endif
  68. #ifdef VERTEXCOLOR
  69. baseColor.rgb*=vColor.rgb;
  70. #endif
  71. #ifdef NORMAL
  72. vec3 normalW=normalize(vNormalW);
  73. #else
  74. vec3 normalW=vec3(1.0,1.0,1.0);
  75. #endif
  76. #ifdef UNLIT
  77. vec3 diffuseBase=vec3(1.,1.,1.);
  78. #else
  79. vec3 diffuseBase=vec3(0.,0.,0.);
  80. lightingInfo info;
  81. float shadow=1.;
  82. float glossiness=0.;
  83. #include<lightFragment>[0]
  84. #include<lightFragment>[1]
  85. #include<lightFragment>[2]
  86. #include<lightFragment>[3]
  87. #endif
  88. #ifdef VERTEXALPHA
  89. alpha*=vColor.a;
  90. #endif
  91. vec3 finalDiffuse=clamp(diffuseBase*diffuseColor,0.0,1.0)*baseColor.rgb;
  92. vec4 color=vec4(finalDiffuse,alpha);
  93. #include<fogFragment>
  94. gl_FragColor=color;
  95. }`;
  96. Effect.ShadersStore[name] = shader;
  97. export { shader, name };