helperFunctions.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Do not edit.
  2. import { ShaderStore } from "../../Engines/shaderStore.js";
  3. const name = "helperFunctions";
  4. const shader = `const float PI=3.1415926535897932384626433832795;const float RECIPROCAL_PI=0.3183098861837907;const float RECIPROCAL_PI2=0.15915494309189535;const float HALF_MIN=5.96046448e-08;
  5. const float LinearEncodePowerApprox=2.2;const float GammaEncodePowerApprox=1.0/LinearEncodePowerApprox;const vec3 LuminanceEncodeApprox=vec3(0.2126,0.7152,0.0722);const float Epsilon=0.0000001;
  6. #define saturate(x) clamp(x,0.0,1.0)
  7. #define absEps(x) abs(x)+Epsilon
  8. #define maxEps(x) max(x,Epsilon)
  9. #define saturateEps(x) clamp(x,Epsilon,1.0)
  10. mat3 transposeMat3(mat3 inMatrix) {vec3 i0=inMatrix[0];vec3 i1=inMatrix[1];vec3 i2=inMatrix[2];mat3 outMatrix=mat3(
  11. vec3(i0.x,i1.x,i2.x),
  12. vec3(i0.y,i1.y,i2.y),
  13. vec3(i0.z,i1.z,i2.z)
  14. );return outMatrix;}
  15. mat3 inverseMat3(mat3 inMatrix) {float a00=inMatrix[0][0],a01=inMatrix[0][1],a02=inMatrix[0][2];float a10=inMatrix[1][0],a11=inMatrix[1][1],a12=inMatrix[1][2];float a20=inMatrix[2][0],a21=inMatrix[2][1],a22=inMatrix[2][2];float b01=a22*a11-a12*a21;float b11=-a22*a10+a12*a20;float b21=a21*a10-a11*a20;float det=a00*b01+a01*b11+a02*b21;return mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),
  16. b11,(a22*a00-a02*a20),(-a12*a00+a02*a10),
  17. b21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;}
  18. #if USE_EXACT_SRGB_CONVERSIONS
  19. vec3 toLinearSpaceExact(vec3 color)
  20. {vec3 nearZeroSection=0.0773993808*color;vec3 remainingSection=pow(0.947867299*(color+vec3(0.055)),vec3(2.4));
  21. #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
  22. return mix(remainingSection,nearZeroSection,lessThanEqual(color,vec3(0.04045)));
  23. #else
  24. return
  25. vec3(
  26. color.r<=0.04045 ? nearZeroSection.r : remainingSection.r,
  27. color.g<=0.04045 ? nearZeroSection.g : remainingSection.g,
  28. color.b<=0.04045 ? nearZeroSection.b : remainingSection.b);
  29. #endif
  30. }
  31. vec3 toGammaSpaceExact(vec3 color)
  32. {vec3 nearZeroSection=12.92*color;vec3 remainingSection=1.055*pow(color,vec3(0.41666))-vec3(0.055);
  33. #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
  34. return mix(remainingSection,nearZeroSection,lessThanEqual(color,vec3(0.0031308)));
  35. #else
  36. return
  37. vec3(
  38. color.r<=0.0031308 ? nearZeroSection.r : remainingSection.r,
  39. color.g<=0.0031308 ? nearZeroSection.g : remainingSection.g,
  40. color.b<=0.0031308 ? nearZeroSection.b : remainingSection.b);
  41. #endif
  42. }
  43. #endif
  44. float toLinearSpace(float color)
  45. {
  46. #if USE_EXACT_SRGB_CONVERSIONS
  47. float nearZeroSection=0.0773993808*color;float remainingSection=pow(0.947867299*(color+0.055),2.4);return color<=0.04045 ? nearZeroSection : remainingSection;
  48. #else
  49. return pow(color,LinearEncodePowerApprox);
  50. #endif
  51. }
  52. vec3 toLinearSpace(vec3 color)
  53. {
  54. #if USE_EXACT_SRGB_CONVERSIONS
  55. return toLinearSpaceExact(color);
  56. #else
  57. return pow(color,vec3(LinearEncodePowerApprox));
  58. #endif
  59. }
  60. vec4 toLinearSpace(vec4 color)
  61. {
  62. #if USE_EXACT_SRGB_CONVERSIONS
  63. return vec4(toLinearSpaceExact(color.rgb),color.a);
  64. #else
  65. return vec4(pow(color.rgb,vec3(LinearEncodePowerApprox)),color.a);
  66. #endif
  67. }
  68. float toGammaSpace(float color)
  69. {
  70. #if USE_EXACT_SRGB_CONVERSIONS
  71. float nearZeroSection=12.92*color;float remainingSection=1.055*pow(color,0.41666)-0.055;return color<=0.0031308 ? nearZeroSection : remainingSection;
  72. #else
  73. return pow(color,GammaEncodePowerApprox);
  74. #endif
  75. }
  76. vec3 toGammaSpace(vec3 color)
  77. {
  78. #if USE_EXACT_SRGB_CONVERSIONS
  79. return toGammaSpaceExact(color);
  80. #else
  81. return pow(color,vec3(GammaEncodePowerApprox));
  82. #endif
  83. }
  84. vec4 toGammaSpace(vec4 color)
  85. {
  86. #if USE_EXACT_SRGB_CONVERSIONS
  87. return vec4(toGammaSpaceExact(color.rgb),color.a);
  88. #else
  89. return vec4(pow(color.rgb,vec3(GammaEncodePowerApprox)),color.a);
  90. #endif
  91. }
  92. float square(float value)
  93. {return value*value;}
  94. vec3 square(vec3 value)
  95. {return value*value;}
  96. float pow5(float value) {float sq=value*value;return sq*sq*value;}
  97. float getLuminance(vec3 color)
  98. {return clamp(dot(color,LuminanceEncodeApprox),0.,1.);}
  99. float getRand(vec2 seed) {return fract(sin(dot(seed.xy ,vec2(12.9898,78.233)))*43758.5453);}
  100. float dither(vec2 seed,float varianceAmount) {float rand=getRand(seed);float normVariance=varianceAmount/255.0;float dither=mix(-normVariance,normVariance,rand);return dither;}
  101. const float rgbdMaxRange=255.0;vec4 toRGBD(vec3 color) {float maxRGB=maxEps(max(color.r,max(color.g,color.b)));float D =max(rgbdMaxRange/maxRGB,1.);D =clamp(floor(D)/255.0,0.,1.);vec3 rgb=color.rgb*D;rgb=toGammaSpace(rgb);return vec4(clamp(rgb,0.,1.),D); }
  102. vec3 fromRGBD(vec4 rgbd) {rgbd.rgb=toLinearSpace(rgbd.rgb);return rgbd.rgb/rgbd.a;}
  103. vec3 parallaxCorrectNormal( vec3 vertexPos,vec3 origVec,vec3 cubeSize,vec3 cubePos ) {vec3 invOrigVec=vec3(1.0,1.0,1.0)/origVec;vec3 halfSize=cubeSize*0.5;vec3 intersecAtMaxPlane=(cubePos+halfSize-vertexPos)*invOrigVec;vec3 intersecAtMinPlane=(cubePos-halfSize-vertexPos)*invOrigVec;vec3 largestIntersec=max(intersecAtMaxPlane,intersecAtMinPlane);float distance=min(min(largestIntersec.x,largestIntersec.y),largestIntersec.z);vec3 intersectPositionWS=vertexPos+origVec*distance;return intersectPositionWS-cubePos;}
  104. `;
  105. // Sideeffect
  106. ShaderStore.IncludesShadersStore[name] = shader;
  107. /** @internal */
  108. export const helperFunctions = { name, shader };
  109. //# sourceMappingURL=helperFunctions.js.map