gpuRenderParticles.vertex.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Do not edit.
  2. import { ShaderStore } from "../Engines/shaderStore.js";
  3. import "./ShadersInclude/clipPlaneVertexDeclaration2.js";
  4. import "./ShadersInclude/fogVertexDeclaration.js";
  5. import "./ShadersInclude/logDepthDeclaration.js";
  6. import "./ShadersInclude/clipPlaneVertex.js";
  7. import "./ShadersInclude/fogVertex.js";
  8. import "./ShadersInclude/logDepthVertex.js";
  9. const name = "gpuRenderParticlesVertexShader";
  10. const shader = `precision highp float;uniform mat4 view;uniform mat4 projection;uniform vec2 translationPivot;uniform vec3 worldOffset;
  11. #ifdef LOCAL
  12. uniform mat4 emitterWM;
  13. #endif
  14. attribute vec3 position;attribute float age;attribute float life;attribute vec3 size;
  15. #ifndef BILLBOARD
  16. attribute vec3 initialDirection;
  17. #endif
  18. #ifdef BILLBOARDSTRETCHED
  19. attribute vec3 direction;
  20. #endif
  21. attribute float angle;
  22. #ifdef ANIMATESHEET
  23. attribute float cellIndex;
  24. #endif
  25. attribute vec2 offset;attribute vec2 uv;varying vec2 vUV;varying vec4 vColor;varying vec3 vPositionW;
  26. #if defined(BILLBOARD) && !defined(BILLBOARDY) && !defined(BILLBOARDSTRETCHED)
  27. uniform mat4 invView;
  28. #endif
  29. #include<clipPlaneVertexDeclaration2>
  30. #include<fogVertexDeclaration>
  31. #include<logDepthDeclaration>
  32. #ifdef COLORGRADIENTS
  33. uniform sampler2D colorGradientSampler;
  34. #else
  35. uniform vec4 colorDead;attribute vec4 color;
  36. #endif
  37. #ifdef ANIMATESHEET
  38. uniform vec3 sheetInfos;
  39. #endif
  40. #ifdef BILLBOARD
  41. uniform vec3 eyePosition;
  42. #endif
  43. vec3 rotate(vec3 yaxis,vec3 rotatedCorner) {vec3 xaxis=normalize(cross(vec3(0.,1.0,0.),yaxis));vec3 zaxis=normalize(cross(yaxis,xaxis));vec3 row0=vec3(xaxis.x,xaxis.y,xaxis.z);vec3 row1=vec3(yaxis.x,yaxis.y,yaxis.z);vec3 row2=vec3(zaxis.x,zaxis.y,zaxis.z);mat3 rotMatrix= mat3(row0,row1,row2);vec3 alignedCorner=rotMatrix*rotatedCorner;
  44. #ifdef LOCAL
  45. return ((emitterWM*vec4(position,1.0)).xyz+worldOffset)+alignedCorner;
  46. #else
  47. return (position+worldOffset)+alignedCorner;
  48. #endif
  49. }
  50. #ifdef BILLBOARDSTRETCHED
  51. vec3 rotateAlign(vec3 toCamera,vec3 rotatedCorner) {vec3 normalizedToCamera=normalize(toCamera);vec3 normalizedCrossDirToCamera=normalize(cross(normalize(direction),normalizedToCamera));vec3 crossProduct=normalize(cross(normalizedToCamera,normalizedCrossDirToCamera));vec3 row0=vec3(normalizedCrossDirToCamera.x,normalizedCrossDirToCamera.y,normalizedCrossDirToCamera.z);vec3 row1=vec3(crossProduct.x,crossProduct.y,crossProduct.z);vec3 row2=vec3(normalizedToCamera.x,normalizedToCamera.y,normalizedToCamera.z);mat3 rotMatrix= mat3(row0,row1,row2);vec3 alignedCorner=rotMatrix*rotatedCorner;
  52. #ifdef LOCAL
  53. return ((emitterWM*vec4(position,1.0)).xyz+worldOffset)+alignedCorner;
  54. #else
  55. return (position+worldOffset)+alignedCorner;
  56. #endif
  57. }
  58. #endif
  59. void main() {
  60. #ifdef ANIMATESHEET
  61. float rowOffset=floor(cellIndex/sheetInfos.z);float columnOffset=cellIndex-rowOffset*sheetInfos.z;vec2 uvScale=sheetInfos.xy;vec2 uvOffset=vec2(uv.x ,1.0-uv.y);vUV=(uvOffset+vec2(columnOffset,rowOffset))*uvScale;
  62. #else
  63. vUV=uv;
  64. #endif
  65. float ratio=age/life;
  66. #ifdef COLORGRADIENTS
  67. vColor=texture2D(colorGradientSampler,vec2(ratio,0));
  68. #else
  69. vColor=color*vec4(1.0-ratio)+colorDead*vec4(ratio);
  70. #endif
  71. vec2 cornerPos=(offset-translationPivot)*size.yz*size.x;
  72. #ifdef BILLBOARD
  73. vec4 rotatedCorner;rotatedCorner.w=0.;
  74. #ifdef BILLBOARDY
  75. rotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);rotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);rotatedCorner.y=0.;rotatedCorner.xz+=translationPivot;vec3 yaxis=(position+worldOffset)-eyePosition;yaxis.y=0.;vPositionW=rotate(normalize(yaxis),rotatedCorner.xyz);vec4 viewPosition=(view*vec4(vPositionW,1.0));
  76. #elif defined(BILLBOARDSTRETCHED)
  77. rotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);rotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);rotatedCorner.z=0.;rotatedCorner.xy+=translationPivot;vec3 toCamera=(position+worldOffset)-eyePosition;vPositionW=rotateAlign(toCamera,rotatedCorner.xyz);vec4 viewPosition=(view*vec4(vPositionW,1.0));
  78. #else
  79. rotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);rotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);rotatedCorner.z=0.;rotatedCorner.xy+=translationPivot;
  80. #ifdef LOCAL
  81. vec4 viewPosition=view*vec4(((emitterWM*vec4(position,1.0)).xyz+worldOffset),1.0)+rotatedCorner;
  82. #else
  83. vec4 viewPosition=view*vec4((position+worldOffset),1.0)+rotatedCorner;
  84. #endif
  85. vPositionW=(invView*viewPosition).xyz;
  86. #endif
  87. #else
  88. vec3 rotatedCorner;rotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);rotatedCorner.y=0.;rotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);rotatedCorner.xz+=translationPivot;vec3 yaxis=normalize(initialDirection);vPositionW=rotate(yaxis,rotatedCorner);vec4 viewPosition=view*vec4(vPositionW,1.0);
  89. #endif
  90. gl_Position=projection*viewPosition;
  91. #if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) || defined(FOG)
  92. vec4 worldPos=vec4(vPositionW,1.0);
  93. #endif
  94. #include<clipPlaneVertex>
  95. #include<fogVertex>
  96. #include<logDepthVertex>
  97. }`;
  98. // Sideeffect
  99. ShaderStore.ShadersStore[name] = shader;
  100. /** @internal */
  101. export const gpuRenderParticlesVertexShader = { name, shader };
  102. //# sourceMappingURL=gpuRenderParticles.vertex.js.map