reflectionFunction.js 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Do not edit.
  2. import { ShaderStore } from "../../Engines/shaderStore.js";
  3. const name = "reflectionFunction";
  4. const shader = `vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
  5. {float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0); }
  6. vec3 computeMirroredFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
  7. {float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(1.0-s,t,0); }
  8. vec3 computeEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
  9. {vec3 cameraToVertex=normalize(worldPos.xyz-eyePosition);vec3 r=normalize(reflect(cameraToVertex,worldNormal));r=vec3(reflectionMatrix*vec4(r,0));float lon=atan(r.z,r.x);float lat=acos(r.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0);}
  10. vec3 computeSphericalCoords(vec4 worldPos,vec3 worldNormal,mat4 view,mat4 reflectionMatrix)
  11. {vec3 viewDir=normalize(vec3(view*worldPos));vec3 viewNormal=normalize(vec3(view*vec4(worldNormal,0.0)));vec3 r=reflect(viewDir,viewNormal);r=vec3(reflectionMatrix*vec4(r,0));r.z=r.z-1.0;float m=2.0*length(r);return vec3(r.x/m+0.5,1.0-r.y/m-0.5,0);}
  12. vec3 computePlanarCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
  13. {vec3 viewDir=worldPos.xyz-eyePosition;vec3 coords=normalize(reflect(viewDir,worldNormal));return vec3(reflectionMatrix*vec4(coords,1));}
  14. vec3 computeCubicCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
  15. {vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=vec3(reflectionMatrix*vec4(coords,0));
  16. #ifdef INVERTCUBICMAP
  17. coords.y*=-1.0;
  18. #endif
  19. return coords;}
  20. vec3 computeCubicLocalCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix,vec3 reflectionSize,vec3 reflectionPosition)
  21. {vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=parallaxCorrectNormal(worldPos.xyz,coords,reflectionSize,reflectionPosition);coords=vec3(reflectionMatrix*vec4(coords,0));
  22. #ifdef INVERTCUBICMAP
  23. coords.y*=-1.0;
  24. #endif
  25. return coords;}
  26. vec3 computeProjectionCoords(vec4 worldPos,mat4 view,mat4 reflectionMatrix)
  27. {return vec3(reflectionMatrix*(view*worldPos));}
  28. vec3 computeSkyBoxCoords(vec3 positionW,mat4 reflectionMatrix)
  29. {return vec3(reflectionMatrix*vec4(positionW,1.));}
  30. #ifdef REFLECTION
  31. vec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)
  32. {
  33. #ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
  34. vec3 direction=normalize(vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
  35. #endif
  36. #ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
  37. vec3 direction=normalize(vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
  38. #endif
  39. #ifdef REFLECTIONMAP_EQUIRECTANGULAR
  40. return computeEquirectangularCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
  41. #endif
  42. #ifdef REFLECTIONMAP_SPHERICAL
  43. return computeSphericalCoords(worldPos,worldNormal,view,reflectionMatrix);
  44. #endif
  45. #ifdef REFLECTIONMAP_PLANAR
  46. return computePlanarCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
  47. #endif
  48. #ifdef REFLECTIONMAP_CUBIC
  49. #ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
  50. return computeCubicLocalCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix,vReflectionSize,vReflectionPosition);
  51. #else
  52. return computeCubicCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
  53. #endif
  54. #endif
  55. #ifdef REFLECTIONMAP_PROJECTION
  56. return computeProjectionCoords(worldPos,view,reflectionMatrix);
  57. #endif
  58. #ifdef REFLECTIONMAP_SKYBOX
  59. return computeSkyBoxCoords(vPositionUVW,reflectionMatrix);
  60. #endif
  61. #ifdef REFLECTIONMAP_EXPLICIT
  62. return vec3(0,0,0);
  63. #endif
  64. }
  65. #endif
  66. `;
  67. // Sideeffect
  68. ShaderStore.IncludesShadersStore[name] = shader;
  69. /** @internal */
  70. export const reflectionFunction = { name, shader };
  71. //# sourceMappingURL=reflectionFunction.js.map