@roomle/web-sdk 3.10.0-alpha.2 → 3.10.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/lib/{BufferGeometry-Dxcf7n9V.mjs → BufferGeometry-Dj5loCTL.mjs} +2 -2
  2. package/lib/{BufferGeometry-Dxcf7n9V.mjs.map → BufferGeometry-Dj5loCTL.mjs.map} +1 -1
  3. package/lib/ConfiguratorKernel.wasm +0 -0
  4. package/lib/{GLTFExporter-kpv1e-Ks.mjs → GLTFExporter-CquK-kkI.mjs} +1 -1
  5. package/lib/{GLTFExporter-kpv1e-Ks.mjs.map → GLTFExporter-CquK-kkI.mjs.map} +1 -1
  6. package/lib/{GaussianBlurNode-CMVlBe39.mjs → GaussianBlurNode-CDYPio-x.mjs} +3 -3
  7. package/lib/{GaussianBlurNode-CMVlBe39.mjs.map → GaussianBlurNode-CDYPio-x.mjs.map} +1 -1
  8. package/lib/{Object3D-BZaiqQIE.mjs → Object3D-YXSPdGeJ.mjs} +1 -1
  9. package/lib/{Object3D-BZaiqQIE.mjs.map → Object3D-YXSPdGeJ.mjs.map} +1 -1
  10. package/lib/{PointLightHelper-fzRB58rC.mjs → PointLightHelper-g98giMRd.mjs} +4 -4
  11. package/lib/{PointLightHelper-fzRB58rC.mjs.map → PointLightHelper-g98giMRd.mjs.map} +1 -1
  12. package/lib/RoomleCore.wasm +0 -0
  13. package/lib/RoomleToolsCore.wasm +0 -0
  14. package/lib/{SpotLightHelper-D5UFwRPb.mjs → SpotLightHelper-xR8lCZau.mjs} +3 -3
  15. package/lib/{SpotLightHelper-D5UFwRPb.mjs.map → SpotLightHelper-xR8lCZau.mjs.map} +1 -1
  16. package/lib/{USDZExporter-Y0SSGr5_.mjs → USDZExporter-BMqBymZI.mjs} +2 -2
  17. package/lib/{USDZExporter-Y0SSGr5_.mjs.map → USDZExporter-BMqBymZI.mjs.map} +1 -1
  18. package/lib/{Vector4-BfZH1ecw.mjs → Vector4-CqzXUndP.mjs} +2 -2
  19. package/lib/{Vector4-BfZH1ecw.mjs.map → Vector4-CqzXUndP.mjs.map} +1 -1
  20. package/lib/{api-BXU3pZnX.mjs → api-ckpzIPty.mjs} +2 -2
  21. package/lib/{api-BXU3pZnX.mjs.map → api-ckpzIPty.mjs.map} +1 -1
  22. package/lib/{asset-loader.worker-C911tbNL.mjs → asset-loader.worker-CHyN7JB1.mjs} +1 -1
  23. package/lib/asset-loader.worker-CHyN7JB1.mjs.map +1 -0
  24. package/lib/{banana-for-scale-B_LIHI9q.mjs → banana-for-scale-Cs2s9dNp.mjs} +3 -3
  25. package/lib/{banana-for-scale-B_LIHI9q.mjs.map → banana-for-scale-Cs2s9dNp.mjs.map} +1 -1
  26. package/lib/{budgeteer.sw-D3VxiASa.mjs → budgeteer.sw-BCLEIWCW.mjs} +1 -1
  27. package/lib/budgeteer.sw-BCLEIWCW.mjs.map +1 -0
  28. package/lib/{common-utils-B9PC_rvS.mjs → common-utils-DMk5jc_R.mjs} +1 -1
  29. package/lib/{common-utils-B9PC_rvS.mjs.map → common-utils-DMk5jc_R.mjs.map} +1 -1
  30. package/lib/{component-dimensioning-5iIw1f_3.mjs → component-dimensioning-DcmDM6gV.mjs} +6 -6
  31. package/lib/{component-dimensioning-5iIw1f_3.mjs.map → component-dimensioning-DcmDM6gV.mjs.map} +1 -1
  32. package/lib/{component-raycast-helper-O27_buEg.mjs → component-raycast-helper-CXN2MHtG.mjs} +4 -4
  33. package/lib/{component-raycast-helper-O27_buEg.mjs.map → component-raycast-helper-CXN2MHtG.mjs.map} +1 -1
  34. package/lib/{configurator-BwxEIDv7.mjs → configurator-D6lTTIlU.mjs} +4 -4
  35. package/lib/{configurator-BwxEIDv7.mjs.map → configurator-D6lTTIlU.mjs.map} +1 -1
  36. package/lib/configurator-DZotRC5_.mjs +2 -0
  37. package/lib/{continuous-drawing-helper-D25YPUle.mjs → continuous-drawing-helper-BlGATN0C.mjs} +2 -2
  38. package/lib/{continuous-drawing-helper-D25YPUle.mjs.map → continuous-drawing-helper-BlGATN0C.mjs.map} +1 -1
  39. package/lib/{dat.gui.module-CZ-DIWHM.mjs → dat.gui.module-BLjoST8r.mjs} +1 -1
  40. package/lib/{dat.gui.module-CZ-DIWHM.mjs.map → dat.gui.module-BLjoST8r.mjs.map} +1 -1
  41. package/lib/{decorate-C9r0zXzz.mjs → decorate-CTUwswpM.mjs} +1 -1
  42. package/lib/{decorate-C9r0zXzz.mjs.map → decorate-CTUwswpM.mjs.map} +1 -1
  43. package/lib/dimensioning-helper-BwBj5QDM.mjs +2 -0
  44. package/lib/{dimensioning-helper-d6JA4UMr.mjs → dimensioning-helper-DMop5qcu.mjs} +4 -4
  45. package/lib/{dimensioning-helper-d6JA4UMr.mjs.map → dimensioning-helper-DMop5qcu.mjs.map} +1 -1
  46. package/lib/dist-DGov-RNo.mjs +438 -0
  47. package/lib/dist-DGov-RNo.mjs.map +1 -0
  48. package/lib/{fflate.module-CBz7CLOg.mjs → fflate.module-n0Jozp8Z.mjs} +1 -1
  49. package/lib/{fflate.module-CBz7CLOg.mjs.map → fflate.module-n0Jozp8Z.mjs.map} +1 -1
  50. package/lib/{glb-viewer-C0Et5SO6.mjs → glb-viewer-CuRDCxVq.mjs} +6 -6
  51. package/lib/{glb-viewer-C0Et5SO6.mjs.map → glb-viewer-CuRDCxVq.mjs.map} +1 -1
  52. package/lib/glb-viewer-DKWeC8wq.mjs +2 -0
  53. package/lib/{highlight-coordinator-DdQ8yNjO.mjs → highlight-coordinator-CTZ_qcde.mjs} +2 -2
  54. package/lib/{highlight-coordinator-DdQ8yNjO.mjs.map → highlight-coordinator-CTZ_qcde.mjs.map} +1 -1
  55. package/lib/{homag-intelligence-DrKayEjK.mjs → homag-intelligence-CIBPifJk.mjs} +3 -3
  56. package/lib/{homag-intelligence-DrKayEjK.mjs.map → homag-intelligence-CIBPifJk.mjs.map} +1 -1
  57. package/lib/{imos-ix-poc-export-helper-DU0ag-Lw.mjs → imos-ix-poc-export-helper-D2KaQu_v.mjs} +3 -3
  58. package/lib/{imos-ix-poc-export-helper-DU0ag-Lw.mjs.map → imos-ix-poc-export-helper-D2KaQu_v.mjs.map} +1 -1
  59. package/lib/{kernel-utils-Cj5B4fDD.mjs → kernel-utils-042AuCQh.mjs} +1 -1
  60. package/lib/{kernel-utils-Cj5B4fDD.mjs.map → kernel-utils-042AuCQh.mjs.map} +1 -1
  61. package/lib/{layer-C_JtkhdO.mjs → layer-CFAr2mK_.mjs} +1 -1
  62. package/lib/{layer-C_JtkhdO.mjs.map → layer-CFAr2mK_.mjs.map} +1 -1
  63. package/lib/{main-D2BulNeN.mjs → main-KSs3XdXO.mjs} +21603 -22104
  64. package/lib/main-KSs3XdXO.mjs.map +1 -0
  65. package/lib/{material-viewer-CZQwo8Nc.mjs → material-viewer-Ced_pruD.mjs} +6 -6
  66. package/lib/{material-viewer-CZQwo8Nc.mjs.map → material-viewer-Ced_pruD.mjs.map} +1 -1
  67. package/lib/packages-oEzg5zoT.mjs +4 -0
  68. package/lib/planner-QF8IrfPz.mjs +2 -0
  69. package/lib/{planner-OgIPgZ1m.mjs → planner-ykpwnVZa.mjs} +3 -3
  70. package/lib/{planner-OgIPgZ1m.mjs.map → planner-ykpwnVZa.mjs.map} +1 -1
  71. package/lib/{plugin-system-DlME_5b_.mjs → plugin-system-DRpL0Rer.mjs} +3 -3
  72. package/lib/{plugin-system-DlME_5b_.mjs.map → plugin-system-DRpL0Rer.mjs.map} +1 -1
  73. package/lib/rolldown-runtime-DgwB9i60.mjs +13 -0
  74. package/lib/{roomle-headless-setup-CMK-quZI.mjs → roomle-headless-setup-Cc8EAnVe.mjs} +1 -1
  75. package/lib/{roomle-headless-setup-CMK-quZI.mjs.map → roomle-headless-setup-Cc8EAnVe.mjs.map} +1 -1
  76. package/lib/roomle-headless.d.ts +69 -29
  77. package/lib/roomle-headless.js +9 -9
  78. package/lib/{roomle-renderer-DYQvV88j.mjs → roomle-renderer-BD3ZmpLS.mjs} +23 -5
  79. package/lib/roomle-renderer-BD3ZmpLS.mjs.map +1 -0
  80. package/lib/roomle-sdk.d.ts +69 -29
  81. package/lib/roomle-sdk.js +7 -7
  82. package/lib/{roomle-webgpu-renderer-5-aG3CMs.mjs → roomle-webgpu-renderer-NhCn2iM-.mjs} +386 -240
  83. package/lib/roomle-webgpu-renderer-NhCn2iM-.mjs.map +1 -0
  84. package/lib/{scene-renderer-DvXjoKHZ.mjs → scene-renderer-DbHi1plp.mjs} +367 -1467
  85. package/lib/scene-renderer-DbHi1plp.mjs.map +1 -0
  86. package/lib/{script-loader-CScqyQhc.mjs → script-loader-DKx7ZvkP.mjs} +3 -3
  87. package/lib/{script-loader-CScqyQhc.mjs.map → script-loader-DKx7ZvkP.mjs.map} +1 -1
  88. package/lib/shading-settings-BWeccIZv.mjs +1108 -0
  89. package/lib/shading-settings-BWeccIZv.mjs.map +1 -0
  90. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  91. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  92. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  93. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  94. package/lib/{stats-helper-BYi5TI_H.mjs → stats-helper-Bs79UZne.mjs} +4 -4
  95. package/lib/{stats-helper-BYi5TI_H.mjs.map → stats-helper-Bs79UZne.mjs.map} +1 -1
  96. package/lib/{three.tsl-S0OKwamA.mjs → three.tsl-Bb8l7rD7.mjs} +1 -1
  97. package/lib/{three.tsl-CAEdYyg3.mjs → three.tsl-Caqi2VRr.mjs} +2 -2
  98. package/lib/{three.tsl-CAEdYyg3.mjs.map → three.tsl-Caqi2VRr.mjs.map} +1 -1
  99. package/lib/{three.webgpu-CkP2nkXM.mjs → three.webgpu-CT4fuV2X.mjs} +1 -1
  100. package/lib/{three.webgpu-CkP2nkXM.mjs.map → three.webgpu-CT4fuV2X.mjs.map} +1 -1
  101. package/lib/{three.webgpu-qrxDA_v0.mjs → three.webgpu-CxNhl3k-.mjs} +1 -1
  102. package/lib/{threejs-utils-C4J_TZ0o.mjs → threejs-utils-E4yVZATI.mjs} +4 -4
  103. package/lib/threejs-utils-E4yVZATI.mjs.map +1 -0
  104. package/lib/{tools-core-BCkbEbim.mjs → tools-core-D4EbqT91.mjs} +3 -3
  105. package/lib/{tools-core-BCkbEbim.mjs.map → tools-core-D4EbqT91.mjs.map} +1 -1
  106. package/lib/workers-Dc-RTL8D.mjs +6 -0
  107. package/lib/{workers-HXGCmmZS.mjs.map → workers-Dc-RTL8D.mjs.map} +1 -1
  108. package/package.json +1 -1
  109. package/lib/asset-loader.worker-C911tbNL.mjs.map +0 -1
  110. package/lib/budgeteer.sw-D3VxiASa.mjs.map +0 -1
  111. package/lib/configurator-BIyxKNI0.mjs +0 -2
  112. package/lib/dimensioning-helper-pPTkh8pl.mjs +0 -2
  113. package/lib/glb-viewer-DfMzLkqg.mjs +0 -2
  114. package/lib/main-D2BulNeN.mjs.map +0 -1
  115. package/lib/packages-BtLLQZLz.mjs +0 -4
  116. package/lib/planner-BF94NrwH.mjs +0 -2
  117. package/lib/rolldown-runtime-BwvMKf85.mjs +0 -23
  118. package/lib/roomle-renderer-DYQvV88j.mjs.map +0 -1
  119. package/lib/roomle-webgpu-renderer-5-aG3CMs.mjs.map +0 -1
  120. package/lib/scene-renderer-DvXjoKHZ.mjs.map +0 -1
  121. package/lib/threejs-utils-C4J_TZ0o.mjs.map +0 -1
  122. package/lib/workers-HXGCmmZS.mjs +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shading-settings-BWeccIZv.mjs","names":[],"sources":["../../packages/common-core/src/webgl/renderer/shader-utility.ts","../../../../node_modules/three/examples/jsm/postprocessing/Pass.js","../../../../node_modules/three/examples/jsm/math/SimplexNoise.js","../../packages/common-core/src/webgl/renderer/render-utility.ts","../../packages/common-core/src/webgl/renderer/pass/pass-utility.ts","../../packages/common-core/src/webgl/renderer/shaders/ao-shader.ts","../../packages/common-core/src/webgl/renderer/pass/ao-pass.ts","../../packages/common-core/src/webgl/renderer/shading-settings.ts"],"sourcesContent":["import type { Enumify } from '#/common/src/utils/types';\nimport type {\n Blending,\n BlendingDstFactor,\n BlendingEquation,\n BlendingSrcFactor,\n OrthographicCamera,\n PerspectiveCamera,\n Texture,\n} from 'three';\nimport {\n AddEquation,\n DstAlphaFactor,\n DstColorFactor,\n Matrix3,\n Matrix4,\n NoBlending,\n ShaderMaterial,\n UniformsUtils,\n Vector2,\n Vector4,\n ZeroFactor,\n} from 'three';\n\nconst CopyTransformShader = {\n uniforms: {\n tDiffuse: { value: null as Texture | null },\n colorTransform: { value: new Matrix4() },\n colorBase: { value: new Vector4(0, 0, 0, 0) },\n multiplyChannels: { value: 0 },\n uvTransform: { value: new Matrix3() },\n },\n vertexShader: `\n varying vec2 vUv;\n uniform mat3 uvTransform;\n\n void main() {\n vUv = (uvTransform * vec3(uv, 1.0)).xy;\n gl_Position = (projectionMatrix * modelViewMatrix * vec4(position, 1.0)).xyww;\n }`,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform mat4 colorTransform;\n uniform vec4 colorBase;\n uniform float multiplyChannels;\n varying vec2 vUv;\n\n void main() {\n vec4 color = texture2D(tDiffuse, vUv);\n #if PREMULTIPLIED_ALPHA == 1\n if (color.a > 0.0) color.rgb /= color.a;\n #endif\n color = colorTransform * color + colorBase;\n color.rgb = mix(color.rgb, vec3(color.r * color.g * color.b), multiplyChannels);\n #if LINEAR_TO_SRGB == 1\n color.rgb = mix(color.rgb * 12.92, 1.055 * pow(color.rgb, vec3(0.41666)) - 0.055, step(0.0031308, color.rgb));\n #endif\n gl_FragColor = color;\n }`,\n};\n\nexport const DEFAULT_TRANSFORM: Matrix4 = new Matrix4();\n// prettier-ignore\nexport const RGB_TRANSFORM: Matrix4 = new Matrix4().set(\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 0\n);\n// prettier-ignore\nexport const ALPHA_TRANSFORM: Matrix4 = new Matrix4().set(\n 0, 0, 0, 1,\n 0, 0, 0, 1,\n 0, 0, 0, 1,\n 0, 0, 0, 0\n);\n// prettier-ignore\nexport const RED_TRANSFORM: Matrix4 = new Matrix4().set(\n 1, 0, 0, 0,\n 1, 0, 0, 0,\n 1, 0, 0, 0,\n 0, 0, 0, 1\n);\n// prettier-ignore\nexport const BLUE_TRANSFORM: Matrix4 = new Matrix4().set(\n 0, 1, 0, 0,\n 0, 1, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 0, 1\n);\n// prettier-ignore\nexport const GREEN_TRANSFORM: Matrix4 = new Matrix4().set(\n 0, 0, 1, 0,\n 0, 0, 1, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n);\n// prettier-ignore\nexport const GRAYSCALE_TRANSFORM: Matrix4 = new Matrix4().set(\n 1, 0, 0, 0,\n 1, 0, 0, 0,\n 1, 0, 0, 0,\n 0, 0, 0, 1\n);\nexport const ZERO_RGBA: Vector4 = new Vector4(0, 0, 0, 0);\nexport const ALPHA_RGBA: Vector4 = new Vector4(0, 0, 0, 1);\nexport const DEFAULT_UV_TRANSFORM: Matrix3 = new Matrix3();\n// prettier-ignore\nexport const FLIP_Y_UV_TRANSFORM: Matrix3 = new Matrix3().set(\n 1, 0, 0,\n 0, -1, 1,\n 0, 0, 1\n);\n\n// prettier-ignore\nexport const interpolationMatrix = (r: number, g: number, b: number, a: number): Matrix4 => {\n // prettier-ignore\n return new Matrix4().set(\n r, 0, 0, 1 - r,\n 0, g, 0, 1 - g,\n 0, 0, b, 1 - b,\n 0, 0, 0, a\n );\n};\n\nexport const COLOR_COPY_BLEND_MODES = {\n DEFAULT: 'default',\n ADDITIVE: 'additive',\n} as const;\n\nexport type CopyMaterialBlendMode = Enumify<typeof COLOR_COPY_BLEND_MODES>;\n\nexport interface CopyTransformMaterialParameters {\n texture?: Texture | null;\n colorTransform?: Matrix4;\n colorBase?: Vector4;\n multiplyChannels?: number;\n uvTransform?: Matrix3;\n blending?: Blending;\n blendSrc?: BlendingSrcFactor | BlendingDstFactor;\n blendDst?: BlendingDstFactor;\n blendEquation?: BlendingEquation;\n blendSrcAlpha?: BlendingSrcFactor;\n blendDstAlpha?: BlendingDstFactor;\n blendEquationAlpha?: BlendingEquation;\n}\n\nexport class CopyTransformMaterial extends ShaderMaterial {\n constructor(\n parameters?: CopyTransformMaterialParameters,\n copyBlendMode: CopyMaterialBlendMode = COLOR_COPY_BLEND_MODES.ADDITIVE,\n linearToSrgb: boolean = false,\n premultipliedALpha: boolean = false,\n ) {\n const blendingParameters =\n copyBlendMode === COLOR_COPY_BLEND_MODES.ADDITIVE\n ? {\n blendSrc: DstColorFactor,\n blendDst: ZeroFactor,\n blendEquation: AddEquation,\n blendSrcAlpha: DstAlphaFactor,\n blendDstAlpha: ZeroFactor,\n blendEquationAlpha: AddEquation,\n }\n : {};\n super({\n uniforms: UniformsUtils.clone(CopyTransformShader.uniforms),\n vertexShader: CopyTransformShader.vertexShader,\n fragmentShader: CopyTransformShader.fragmentShader,\n defines: {\n LINEAR_TO_SRGB: linearToSrgb ? 1 : 0,\n PREMULTIPLIED_ALPHA: premultipliedALpha ? 1 : 0,\n },\n transparent: true,\n depthTest: false,\n depthWrite: false,\n ...blendingParameters,\n });\n this.update(parameters);\n }\n\n public update(\n parameters?: CopyTransformMaterialParameters,\n ): CopyTransformMaterial {\n if (parameters?.texture !== undefined) {\n this.uniforms.tDiffuse.value = parameters?.texture;\n }\n if (parameters?.colorTransform !== undefined) {\n this.uniforms.colorTransform.value = parameters?.colorTransform;\n }\n if (parameters?.colorBase !== undefined) {\n this.uniforms.colorBase.value = parameters?.colorBase;\n }\n if (parameters?.multiplyChannels !== undefined) {\n this.uniforms.multiplyChannels.value = parameters?.multiplyChannels;\n }\n if (parameters?.uvTransform !== undefined) {\n this.uniforms.uvTransform.value = parameters?.uvTransform;\n }\n if (parameters?.blending !== undefined) {\n this.blending = parameters?.blending;\n }\n if (parameters?.blendSrc !== undefined) {\n this.blendSrc = parameters?.blendSrc;\n }\n if (parameters?.blendDst !== undefined) {\n this.blendDst = parameters?.blendDst;\n }\n if (parameters?.blendEquation !== undefined) {\n this.blendEquation = parameters?.blendEquation;\n }\n if (parameters?.blendSrcAlpha !== undefined) {\n this.blendSrcAlpha = parameters?.blendSrcAlpha;\n }\n if (parameters?.blendDstAlpha !== undefined) {\n this.blendDstAlpha = parameters?.blendDstAlpha;\n }\n if (parameters?.blendEquationAlpha !== undefined) {\n this.blendEquationAlpha = parameters?.blendEquationAlpha;\n }\n return this;\n }\n}\n\nexport const BlurShader = {\n uniforms: {\n tDiffuse: { value: null as Texture | null },\n rangeMin: { value: new Vector2(1.0 / 512.0, 1.0 / 512.0) },\n rangeMax: { value: new Vector2(1.0 / 512.0, 1.0 / 512.0) },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 rangeMin;\n uniform vec2 rangeMax;\n varying vec2 vUv;\n\n void main() {\n vec4 baseColor = texture2D(tDiffuse, vUv);\n vec2 blur = mix(rangeMax, rangeMin, baseColor.a);\n vec4 sum = vec4( 0.0 );\n sum += texture2D(tDiffuse, vUv - 1.0 * blur) * 0.051;\n sum += texture2D(tDiffuse, vUv - 0.75 * blur) * 0.0918;\n sum += texture2D(tDiffuse, vUv - 0.5 * blur) * 0.12245;\n sum += texture2D(tDiffuse, vUv - 0.25 * blur) * 0.1531;\n sum += baseColor * 0.1633;\n sum += texture2D(tDiffuse, vUv + 0.25 * blur) * 0.1531;\n sum += texture2D(tDiffuse, vUv + 0.5 * blur) * 0.12245;\n sum += texture2D(tDiffuse, vUv + 0.75 * blur) * 0.0918;\n sum += texture2D(tDiffuse, vUv + 1.0 * blur) * 0.051;\n gl_FragColor = sum;\n }`,\n};\n\nexport const MixShadowShader = {\n uniforms: {\n tShadow1: { value: null as Texture | null },\n tShadow2: { value: null as Texture | null },\n shadowScale1: { value: 0.5 },\n shadowScale2: { value: 0.5 },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform sampler2D tShadow1;\n uniform sampler2D tShadow2;\n uniform float shadowScale1;\n uniform float shadowScale2;\n varying vec2 vUv;\n\n void main() {\n vec4 color1 = texture2D(tShadow1, vUv);\n vec4 color2 = texture2D(tShadow2, vUv);\n gl_FragColor = color1 * shadowScale1 + color2 * shadowScale2;\n }`,\n};\n\nexport const HorizontalBlurShadowShader = {\n uniforms: {\n tDiffuse: { value: null as Texture | null },\n blur: { value: 1.0 / 512.0 },\n shadowRange: { value: new Vector2(0.1, 0.9) },\n },\n defines: {\n DEBUG_BLUR_AREA: 0,\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blur;\n uniform vec2 shadowRange;\n varying vec2 vUv;\n\n void main() {\n vec4 baseColor = texture2D(tDiffuse, vUv);\n float h = blur * step(shadowRange.x, baseColor.r) * step(baseColor.r, shadowRange.y);\n vec4 sum = vec4(0.0);\n sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n sum += baseColor * 0.1633;\n sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n #if DEBUG_BLUR_AREA == 1\n gl_FragColor = h > 0.001 ? vec4(sum.r, 0.0, 0.0, 1.0) : sum;\n #else\n gl_FragColor = min(sum, baseColor);\n #endif\n }`,\n};\n\nexport const VerticalBlurShadowShader = {\n uniforms: {\n tDiffuse: { value: null as Texture | null },\n blur: { value: 1.0 / 512.0 },\n shadowRange: { value: new Vector2(0.1, 0.9) },\n },\n defines: {\n DEBUG_BLUR_AREA: 0,\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blur;\n uniform vec2 shadowRange;\n varying vec2 vUv;\n\n void main() {\n vec4 baseColor = texture2D(tDiffuse, vUv);\n float v = blur * step(shadowRange.x, baseColor.r) * step(baseColor.r, shadowRange.y);\n vec4 sum = vec4(0.0);\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n sum += baseColor * 0.1633;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n #if DEBUG_BLUR_AREA == 1\n gl_FragColor = v > 0.001 ? vec4(sum.r, 0.0, 0.0, 1.0) : sum;\n #else\n gl_FragColor = min(sum, baseColor);\n #endif\n }`,\n};\n\nconst glslLinearDepthVertexShader = `varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`;\n\nconst glslLinearDepthFragmentShader = `uniform sampler2D tDepth;\n uniform vec4 depthFilter;\n uniform float cameraNear;\n uniform float cameraFar;\n varying vec2 vUv;\n\n #include <packing>\n\n float getLinearDepth(const in vec2 screenPosition) {\n float fragCoordZ = dot(texture2D(tDepth, screenPosition), depthFilter);\n #if PERSPECTIVE_CAMERA == 1\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n return viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\n #else\n return fragCoordZ;\n #endif\n }\n\n void main() {\n float depth = getLinearDepth(vUv);\n gl_FragColor = vec4(vec3(1.0 - depth), 1.0);\n }`;\n\nexport class LinearDepthRenderMaterial extends ShaderMaterial {\n private static _linearDepthShader: any = {\n uniforms: {\n tDepth: { value: null as Texture | null },\n depthFilter: { value: new Vector4(1, 0, 0, 0) },\n cameraNear: { value: 0.1 },\n cameraFar: { value: 1 },\n },\n defines: {\n PERSPECTIVE_CAMERA: 1,\n ALPHA_DEPTH: 0,\n },\n vertexShader: glslLinearDepthVertexShader,\n fragmentShader: glslLinearDepthFragmentShader,\n };\n\n constructor(parameters: Record<string, any>) {\n super({\n defines: Object.assign(\n {},\n LinearDepthRenderMaterial._linearDepthShader.defines,\n ),\n uniforms: UniformsUtils.clone(\n LinearDepthRenderMaterial._linearDepthShader.uniforms,\n ),\n vertexShader: LinearDepthRenderMaterial._linearDepthShader.vertexShader,\n fragmentShader:\n LinearDepthRenderMaterial._linearDepthShader.fragmentShader,\n blending: NoBlending,\n });\n this.update(parameters);\n }\n\n public update(parameters?: Record<string, any>): LinearDepthRenderMaterial {\n if (parameters?.depthTexture !== undefined) {\n this.uniforms.tDepth.value = parameters?.depthTexture;\n }\n if (parameters?.camera !== undefined) {\n const camera =\n (parameters?.camera as OrthographicCamera) ||\n (parameters?.camera as PerspectiveCamera);\n this.uniforms.cameraNear.value = camera.near;\n this.uniforms.cameraFar.value = camera.far;\n }\n if (parameters?.depthFilter !== undefined) {\n this.uniforms.depthFilter.value = parameters?.depthFilter;\n }\n return this;\n }\n}\n","import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\n/**\n * Abstract base class for all post processing passes.\n *\n * This module is only relevant for post processing with {@link WebGLRenderer}.\n *\n * @abstract\n * @three_import import { Pass } from 'three/addons/postprocessing/Pass.js';\n */\nclass Pass {\n\n\t/**\n\t * Constructs a new pass.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPass = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass is processed by the composer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass indicates to swap read and write buffer after rendering.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.needsSwap = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass clears its buffer before rendering\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clear = false;\n\n\t\t/**\n\t\t * If set to `true`, the result of the pass is rendered to screen. The last pass in the composers\n\t\t * pass chain gets automatically rendered to screen, no matter how this property is configured.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\t/**\n\t * Sets the size of the pass.\n\t *\n\t * @abstract\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( /* width, height */ ) {}\n\n\t/**\n\t * This method holds the render logic of a pass. It must be implemented in all derived classes.\n\t *\n\t * @abstract\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t *\n\t * @abstract\n\t */\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\n\n/**\n * This module is a helper for passes which need to render a full\n * screen effect which is quite common in context of post processing.\n *\n * The intended usage is to reuse a single full screen quad for rendering\n * subsequent passes by just reassigning the `material` reference.\n *\n * This module can only be used with {@link WebGLRenderer}.\n *\n * @augments Mesh\n * @three_import import { FullScreenQuad } from 'three/addons/postprocessing/Pass.js';\n */\nclass FullScreenQuad {\n\n\t/**\n\t * Constructs a new full screen quad.\n\t *\n\t * @param {?Material} material - The material to render te full screen quad with.\n\t */\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\t/**\n\t * Renders the full screen quad.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t */\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\t/**\n\t * The quad's material.\n\t *\n\t * @type {?Material}\n\t */\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n","/**\n * A utility class providing noise functions.\n *\n * The code is based on [Simplex noise demystified](https://web.archive.org/web/20210210162332/http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf)\n * by Stefan Gustavson, 2005.\n *\n * @three_import import { SimplexNoise } from 'three/addons/math/SimplexNoise.js';\n */\nclass SimplexNoise {\n\n\t/**\n\t * Constructs a new simplex noise object.\n\t *\n\t * @param {Object} [r=Math] - A math utility class that holds a `random()` method. This makes it\n\t * possible to pass in custom random number generator.\n\t */\n\tconstructor( r = Math ) {\n\n\t\tthis.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],\n\t\t\t[ 1, 0, 1 ], [ - 1, 0, 1 ], [ 1, 0, - 1 ], [ - 1, 0, - 1 ],\n\t\t\t[ 0, 1, 1 ], [ 0, - 1, 1 ], [ 0, 1, - 1 ], [ 0, - 1, - 1 ]];\n\n\t\tthis.grad4 = [[ 0, 1, 1, 1 ], [ 0, 1, 1, - 1 ], [ 0, 1, - 1, 1 ], [ 0, 1, - 1, - 1 ],\n\t\t\t[ 0, - 1, 1, 1 ], [ 0, - 1, 1, - 1 ], [ 0, - 1, - 1, 1 ], [ 0, - 1, - 1, - 1 ],\n\t\t\t[ 1, 0, 1, 1 ], [ 1, 0, 1, - 1 ], [ 1, 0, - 1, 1 ], [ 1, 0, - 1, - 1 ],\n\t\t\t[ - 1, 0, 1, 1 ], [ - 1, 0, 1, - 1 ], [ - 1, 0, - 1, 1 ], [ - 1, 0, - 1, - 1 ],\n\t\t\t[ 1, 1, 0, 1 ], [ 1, 1, 0, - 1 ], [ 1, - 1, 0, 1 ], [ 1, - 1, 0, - 1 ],\n\t\t\t[ - 1, 1, 0, 1 ], [ - 1, 1, 0, - 1 ], [ - 1, - 1, 0, 1 ], [ - 1, - 1, 0, - 1 ],\n\t\t\t[ 1, 1, 1, 0 ], [ 1, 1, - 1, 0 ], [ 1, - 1, 1, 0 ], [ 1, - 1, - 1, 0 ],\n\t\t\t[ - 1, 1, 1, 0 ], [ - 1, 1, - 1, 0 ], [ - 1, - 1, 1, 0 ], [ - 1, - 1, - 1, 0 ]];\n\n\t\tthis.p = [];\n\n\t\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t\tthis.p[ i ] = Math.floor( r.random() * 256 );\n\n\t\t}\n\n\t\t// To remove the need for index wrapping, double the permutation table length\n\t\tthis.perm = [];\n\n\t\tfor ( let i = 0; i < 512; i ++ ) {\n\n\t\t\tthis.perm[ i ] = this.p[ i & 255 ];\n\n\t\t}\n\n\t\t// A lookup table to traverse the simplex around a given point in 4D.\n\t\t// Details can be found where this table is used, in the 4D noise method.\n\t\tthis.simplex = [\n\t\t\t[ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 2, 3, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 2, 3, 0 ],\n\t\t\t[ 0, 2, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 3, 2, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 1, 2, 0, 3 ], [ 0, 0, 0, 0 ], [ 1, 3, 0, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ],\n\t\t\t[ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 0, 3, 1 ], [ 0, 0, 0, 0 ], [ 2, 1, 3, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 2, 0, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 0, 0, 0, 0 ], [ 3, 1, 2, 0 ],\n\t\t\t[ 2, 1, 0, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 1, 0, 2 ], [ 0, 0, 0, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ]];\n\n\t}\n\n\t/**\n\t * A 2D simplex noise method.\n\t *\n\t * @param {number} xin - The x coordinate.\n\t * @param {number} yin - The y coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise( xin, yin ) {\n\n\t\tlet n0; // Noise contributions from the three corners\n\t\tlet n1;\n\t\tlet n2;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F2 = 0.5 * ( Math.sqrt( 3.0 ) - 1.0 );\n\t\tconst s = ( xin + yin ) * F2; // Hairy factor for 2D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst G2 = ( 3.0 - Math.sqrt( 3.0 ) ) / 6.0;\n\t\tconst t = ( i + j ) * G2;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y) space\n\t\tconst Y0 = j - t;\n\t\tconst x0 = xin - X0; // The x,y distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\n\t\t// For the 2D case, the simplex shape is an equilateral triangle.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n\t\tlet j1;\n\t\tif ( x0 > y0 ) {\n\n\t\t\ti1 = 1; j1 = 0;\n\n\t\t\t// lower triangle, XY order: (0,0)->(1,0)->(1,1)\n\n\t\t}\telse {\n\n\t\t\ti1 = 0; j1 = 1;\n\n\t\t} // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n\n\t\t// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n\t\t// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n\t\t// c = (3-sqrt(3))/6\n\t\tconst x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\t\tconst y1 = y0 - j1 + G2;\n\t\tconst x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n\t\tconst y2 = y0 - 1.0 + 2.0 * G2;\n\t\t// Work out the hashed gradient indices of the three simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + 1 + this.perm[ jj + 1 ] ] % 12;\n\t\t// Calculate the contribution from the three corners\n\t\tlet t0 = 0.5 - x0 * x0 - y0 * y0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient\n\n\t\t}\n\n\t\tlet t1 = 0.5 - x1 * x1 - y1 * y1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot( this.grad3[ gi1 ], x1, y1 );\n\n\t\t}\n\n\t\tlet t2 = 0.5 - x2 * x2 - y2 * y2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot( this.grad3[ gi2 ], x2, y2 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to return values in the interval [-1,1].\n\t\treturn 70.0 * ( n0 + n1 + n2 );\n\n\t}\n\n\t/**\n\t * A 3D simplex noise method.\n\t *\n\t * @param {number} xin - The x coordinate.\n\t * @param {number} yin - The y coordinate.\n\t * @param {number} zin - The z coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise3d( xin, yin, zin ) {\n\n\t\tlet n0; // Noise contributions from the four corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F3 = 1.0 / 3.0;\n\t\tconst s = ( xin + yin + zin ) * F3; // Very nice and simple skew factor for 3D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst k = Math.floor( zin + s );\n\t\tconst G3 = 1.0 / 6.0; // Very nice and simple unskew factor, too\n\t\tconst t = ( i + j + k ) * G3;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst x0 = xin - X0; // The x,y,z distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\t\tconst z0 = zin - Z0;\n\n\t\t// For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second corner of simplex in (i,j,k) coords\n\n\t\tlet j1;\n\t\tlet k1;\n\t\tlet i2; // Offsets for third corner of simplex in (i,j,k) coords\n\t\tlet j2;\n\t\tlet k2;\n\t\tif ( x0 >= y0 ) {\n\n\t\t\tif ( y0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t\t// X Y Z order\n\n\t\t\t} else if ( x0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t\t// X Z Y order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t} // Z X Y order\n\n\t\t} else { // x0<y0\n\n\t\t\tif ( y0 < z0 ) {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 0; j2 = 1; k2 = 1;\n\n\t\t\t\t// Z Y X order\n\n\t\t\t} else if ( x0 < z0 ) {\n\n\t\t\t\ti1 = 0; j1 = 1; k1 = 0; i2 = 0; j2 = 1; k2 = 1;\n\n\t\t\t\t// Y Z X order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 1; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t} // Y X Z order\n\n\t\t}\n\n\t\t// A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n\t\t// a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n\t\t// a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n\t\t// c = 1/6.\n\t\tconst x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords\n\t\tconst y1 = y0 - j1 + G3;\n\t\tconst z1 = z0 - k1 + G3;\n\t\tconst x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G3;\n\t\tconst z2 = z0 - k2 + 2.0 * G3;\n\t\tconst x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords\n\t\tconst y3 = y0 - 1.0 + 3.0 * G3;\n\t\tconst z3 = z0 - 1.0 + 3.0 * G3;\n\t\t// Work out the hashed gradient indices of the four simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj + this.perm[ kk ] ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 + this.perm[ kk + k1 ] ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + i2 + this.perm[ jj + j2 + this.perm[ kk + k2 ] ] ] % 12;\n\t\tconst gi3 = this.perm[ ii + 1 + this.perm[ jj + 1 + this.perm[ kk + 1 ] ] ] % 12;\n\t\t// Calculate the contribution from the four corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot3( this.grad3[ gi0 ], x0, y0, z0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot3( this.grad3[ gi1 ], x1, y1, z1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot3( this.grad3[ gi2 ], x2, y2, z2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this._dot3( this.grad3[ gi3 ], x3, y3, z3 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to stay just inside [-1,1]\n\t\treturn 32.0 * ( n0 + n1 + n2 + n3 );\n\n\t}\n\n\t/**\n\t * A 4D simplex noise method.\n\t *\n\t * @param {number} x - The x coordinate.\n\t * @param {number} y - The y coordinate.\n\t * @param {number} z - The z coordinate.\n\t * @param {number} w - The w coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise4d( x, y, z, w ) {\n\n\t\t// For faster and easier lookups\n\t\tconst grad4 = this.grad4;\n\t\tconst simplex = this.simplex;\n\t\tconst perm = this.perm;\n\n\t\t// The skewing and unskewing factors are hairy again for the 4D case\n\t\tconst F4 = ( Math.sqrt( 5.0 ) - 1.0 ) / 4.0;\n\t\tconst G4 = ( 5.0 - Math.sqrt( 5.0 ) ) / 20.0;\n\t\tlet n0; // Noise contributions from the five corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\tlet n4;\n\t\t// Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in\n\t\tconst s = ( x + y + z + w ) * F4; // Factor for 4D skewing\n\t\tconst i = Math.floor( x + s );\n\t\tconst j = Math.floor( y + s );\n\t\tconst k = Math.floor( z + s );\n\t\tconst l = Math.floor( w + s );\n\t\tconst t = ( i + j + k + l ) * G4; // Factor for 4D unskewing\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst W0 = l - t;\n\t\tconst x0 = x - X0; // The x,y,z,w distances from the cell origin\n\t\tconst y0 = y - Y0;\n\t\tconst z0 = z - Z0;\n\t\tconst w0 = w - W0;\n\n\t\t// For the 4D case, the simplex is a 4D shape I won't even try to describe.\n\t\t// To find out which of the 24 possible simplices we're in, we need to\n\t\t// determine the magnitude ordering of x0, y0, z0 and w0.\n\t\t// The method below is a good way of finding the ordering of x,y,z,w and\n\t\t// then find the correct traversal order for the simplex we’re in.\n\t\t// First, six pair-wise comparisons are performed between each possible pair\n\t\t// of the four coordinates, and the results are used to add up binary bits\n\t\t// for an integer index.\n\t\tconst c1 = ( x0 > y0 ) ? 32 : 0;\n\t\tconst c2 = ( x0 > z0 ) ? 16 : 0;\n\t\tconst c3 = ( y0 > z0 ) ? 8 : 0;\n\t\tconst c4 = ( x0 > w0 ) ? 4 : 0;\n\t\tconst c5 = ( y0 > w0 ) ? 2 : 0;\n\t\tconst c6 = ( z0 > w0 ) ? 1 : 0;\n\t\tconst c = c1 + c2 + c3 + c4 + c5 + c6;\n\n\t\t// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n\t\t// Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w\n\t\t// impossible. Only the 24 indices which have non-zero entries make any sense.\n\t\t// We use a thresholding to set the coordinates in turn from the largest magnitude.\n\t\t// The number 3 in the \"simplex\" array is at the position of the largest coordinate.\n\t\tconst i1 = simplex[ c ][ 0 ] >= 3 ? 1 : 0;\n\t\tconst j1 = simplex[ c ][ 1 ] >= 3 ? 1 : 0;\n\t\tconst k1 = simplex[ c ][ 2 ] >= 3 ? 1 : 0;\n\t\tconst l1 = simplex[ c ][ 3 ] >= 3 ? 1 : 0;\n\t\t// The number 2 in the \"simplex\" array is at the second largest coordinate.\n\t\tconst i2 = simplex[ c ][ 0 ] >= 2 ? 1 : 0;\n\t\tconst j2 = simplex[ c ][ 1 ] >= 2 ? 1 : 0;\n\t\tconst k2 = simplex[ c ][ 2 ] >= 2 ? 1 : 0;\n\t\tconst l2 = simplex[ c ][ 3 ] >= 2 ? 1 : 0;\n\t\t// The number 1 in the \"simplex\" array is at the second smallest coordinate.\n\t\tconst i3 = simplex[ c ][ 0 ] >= 1 ? 1 : 0;\n\t\tconst j3 = simplex[ c ][ 1 ] >= 1 ? 1 : 0;\n\t\tconst k3 = simplex[ c ][ 2 ] >= 1 ? 1 : 0;\n\t\tconst l3 = simplex[ c ][ 3 ] >= 1 ? 1 : 0;\n\t\t// The fifth corner has all coordinate offsets = 1, so no need to look that up.\n\t\tconst x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n\t\tconst y1 = y0 - j1 + G4;\n\t\tconst z1 = z0 - k1 + G4;\n\t\tconst w1 = w0 - l1 + G4;\n\t\tconst x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G4;\n\t\tconst z2 = z0 - k2 + 2.0 * G4;\n\t\tconst w2 = w0 - l2 + 2.0 * G4;\n\t\tconst x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n\t\tconst y3 = y0 - j3 + 3.0 * G4;\n\t\tconst z3 = z0 - k3 + 3.0 * G4;\n\t\tconst w3 = w0 - l3 + 3.0 * G4;\n\t\tconst x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n\t\tconst y4 = y0 - 1.0 + 4.0 * G4;\n\t\tconst z4 = z0 - 1.0 + 4.0 * G4;\n\t\tconst w4 = w0 - 1.0 + 4.0 * G4;\n\t\t// Work out the hashed gradient indices of the five simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst ll = l & 255;\n\t\tconst gi0 = perm[ ii + perm[ jj + perm[ kk + perm[ ll ] ] ] ] % 32;\n\t\tconst gi1 = perm[ ii + i1 + perm[ jj + j1 + perm[ kk + k1 + perm[ ll + l1 ] ] ] ] % 32;\n\t\tconst gi2 = perm[ ii + i2 + perm[ jj + j2 + perm[ kk + k2 + perm[ ll + l2 ] ] ] ] % 32;\n\t\tconst gi3 = perm[ ii + i3 + perm[ jj + j3 + perm[ kk + k3 + perm[ ll + l3 ] ] ] ] % 32;\n\t\tconst gi4 = perm[ ii + 1 + perm[ jj + 1 + perm[ kk + 1 + perm[ ll + 1 ] ] ] ] % 32;\n\t\t// Calculate the contribution from the five corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot4( grad4[ gi0 ], x0, y0, z0, w0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot4( grad4[ gi1 ], x1, y1, z1, w1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot4( grad4[ gi2 ], x2, y2, z2, w2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this._dot4( grad4[ gi3 ], x3, y3, z3, w3 );\n\n\t\t}\n\n\t\tlet t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n\t\tif ( t4 < 0 ) n4 = 0.0;\n\t\telse {\n\n\t\t\tt4 *= t4;\n\t\t\tn4 = t4 * t4 * this._dot4( grad4[ gi4 ], x4, y4, z4, w4 );\n\n\t\t}\n\n\t\t// Sum up and scale the result to cover the range [-1,1]\n\t\treturn 27.0 * ( n0 + n1 + n2 + n3 + n4 );\n\n\t}\n\n\t// private\n\n\t_dot( g, x, y ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y;\n\n\t}\n\n\t_dot3( g, x, y, z ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;\n\n\t}\n\n\t_dot4( g, x, y, z, w ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;\n\n\t}\n\n}\n\nexport { SimplexNoise };\n","import { BlurShader } from './shader-utility';\nimport type {\n Camera,\n ColorRepresentation,\n Material,\n Matrix4,\n ShaderMaterialParameters,\n Texture,\n WebGLRenderer,\n WebGLRenderTarget,\n} from 'three';\nimport {\n Box3,\n Color,\n DataTexture,\n MathUtils,\n OrthographicCamera,\n PerspectiveCamera,\n RepeatWrapping,\n Scene,\n ShaderMaterial,\n Vector3,\n} from 'three';\nimport type { WebGPURenderer } from 'three/webgpu';\nimport { FullScreenQuad } from 'three/examples/jsm/postprocessing/Pass.js';\nimport { SimplexNoise } from 'three/examples/jsm/math/SimplexNoise.js';\n\nexport const setOrthographicViewVolumeFromBox = (\n camera: OrthographicCamera,\n viewBox: Box3,\n): void => {\n camera.left = viewBox.min.x;\n camera.right = viewBox.max.x;\n camera.bottom = viewBox.min.y;\n camera.top = viewBox.max.y;\n camera.near = Math.min(-viewBox.min.z, -viewBox.max.z);\n camera.far = Math.max(-viewBox.min.z, -viewBox.max.z);\n camera.updateProjectionMatrix();\n};\n\nexport const setPerspectiveViewVolumeFromBox = (\n camera: PerspectiveCamera,\n viewBox: Box3,\n): void => {\n const near = Math.min(-viewBox.min.z, -viewBox.max.z);\n const far = Math.max(-viewBox.min.z, -viewBox.max.z);\n if (near < 0.001) {\n return;\n }\n const halfWidth = Math.max(Math.abs(viewBox.min.x), Math.abs(viewBox.max.x));\n const halfHeight = Math.max(Math.abs(viewBox.min.y), Math.abs(viewBox.max.y));\n camera.aspect = halfWidth / halfHeight;\n camera.fov = MathUtils.radToDeg(Math.atan2(halfHeight, near) * 2);\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n};\n\nexport class SceneVolume {\n public bounds: Box3 = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1));\n public size: Vector3 = new Vector3(2, 2, 2);\n public center: Vector3 = new Vector3(0, 0, 0);\n public maxSceneDistanceFromCenter: number = Math.sqrt(3);\n public maxSceneDistanceFrom0: number = Math.sqrt(3);\n\n public updateFromBox(boundingBox: Box3): void {\n if (this.bounds !== boundingBox) {\n this.bounds.copy(boundingBox);\n }\n this.bounds.getSize(this.size);\n this.bounds.getCenter(this.center);\n this.maxSceneDistanceFromCenter = this.size.length() / 2;\n this.maxSceneDistanceFrom0 = new Vector3(\n Math.max(Math.abs(this.bounds.min.x), Math.abs(this.bounds.max.x)),\n Math.max(Math.abs(this.bounds.min.y), Math.abs(this.bounds.max.y)),\n Math.max(Math.abs(this.bounds.min.z), Math.abs(this.bounds.max.z)),\n ).length();\n }\n\n public updateCameraViewVolumeFromBounds(camera: Camera): void {\n camera.updateMatrixWorld();\n const cameraViewBounds = this.bounds\n .clone()\n .applyMatrix4(camera.matrixWorldInverse);\n if (camera instanceof OrthographicCamera) {\n setOrthographicViewVolumeFromBox(camera, cameraViewBounds);\n } else if (camera instanceof PerspectiveCamera) {\n setPerspectiveViewVolumeFromBox(camera, cameraViewBounds);\n }\n }\n\n public getNearAndFarForPerspectiveCamera(\n cameraPosition: Vector3,\n backScale: number = 1,\n ): number[] {\n const distanceFromCenter = cameraPosition.clone().sub(this.center).length();\n const near = Math.max(\n 0.01,\n distanceFromCenter - this.maxSceneDistanceFromCenter - 0.01,\n );\n const far =\n distanceFromCenter + this.maxSceneDistanceFromCenter * backScale + 0.01;\n return [near, far];\n }\n}\n\nexport class CameraUpdate {\n private _lastCameraProjection: Matrix4 | undefined;\n private _lastCameraWorld: Matrix4 | undefined;\n\n public changed(camera: Camera): boolean {\n const hasChanged =\n !this._lastCameraProjection?.equals(camera.projectionMatrix) ||\n !this._lastCameraWorld?.equals(camera.matrixWorld);\n this._lastCameraProjection = camera.projectionMatrix?.clone();\n this._lastCameraWorld = camera.matrixWorld?.clone();\n return hasChanged;\n }\n}\n\nexport const generateMagicSquare = (size: number): number[] => {\n const noiseSize =\n Math.floor(size) % 2 === 0 ? Math.floor(size) + 1 : Math.floor(size);\n const noiseSquareSize = noiseSize * noiseSize;\n const magicSquare = Array(noiseSquareSize).fill(0);\n let i = Math.floor(noiseSize / 2);\n let j = noiseSize - 1;\n for (let num = 1; num <= noiseSquareSize; ) {\n if (i === -1 && j === noiseSize) {\n j = noiseSize - 2;\n i = 0;\n } else {\n if (j === noiseSize) {\n j = 0;\n }\n if (i < 0) {\n i = noiseSize - 1;\n }\n }\n if (magicSquare[i * noiseSize + j] !== 0) {\n j -= 2;\n i++;\n continue;\n } else {\n magicSquare[i * noiseSize + j] = num++;\n }\n j++;\n i--;\n }\n return magicSquare;\n};\n\nexport const generateMagicSquareDistributedKernelRotations = (\n size: number,\n): DataTexture => {\n const simplex = new SimplexNoise();\n const noiseSize =\n Math.floor(size) % 2 === 0 ? Math.floor(size) + 1 : Math.floor(size);\n const magicSquare = generateMagicSquare(noiseSize);\n const noiseSquareSize = magicSquare.length;\n const data = new Uint8Array(noiseSquareSize * 4);\n for (let inx = 0; inx < noiseSquareSize; ++inx) {\n const iAng = magicSquare[inx];\n const angle = (2 * Math.PI * iAng) / noiseSquareSize;\n const randomVec = new Vector3(\n Math.cos(angle),\n Math.sin(angle),\n 0,\n ).normalize();\n data[inx * 4] = (randomVec.x * 0.5 + 0.5) * 255;\n data[inx * 4 + 1] = (randomVec.y * 0.5 + 0.5) * 255;\n data[inx * 4 + 2] = 127;\n data[inx * 4 + 3] =\n (simplex.noise(inx / size, inx % size) * 0.5 + 0.5) * 255;\n }\n const noiseTexture = new DataTexture(data, noiseSize, noiseSize);\n noiseTexture.wrapS = RepeatWrapping;\n noiseTexture.wrapT = RepeatWrapping;\n noiseTexture.needsUpdate = true;\n return noiseTexture;\n};\n\nexport class PassRenderer {\n private _originalClearColor = new Color();\n private _originalClearAlpha: number = 0;\n private _originalAutoClear: boolean = false;\n private _originalRenderTarget: WebGLRenderTarget | null = null;\n private _screenSpaceQuad = new FullScreenQuad(undefined);\n private _emptyScene = new Scene();\n private _defaultCamera = new PerspectiveCamera();\n\n public renderWithOverrideMaterial(\n renderer: WebGLRenderer | WebGPURenderer,\n scene: Scene,\n camera: Camera,\n overrideMaterial: Material | null,\n renderTarget: WebGLRenderTarget | null,\n clearColor?: ColorRepresentation,\n clearAlpha?: number,\n ): void {\n this._backup(renderer as WebGLRenderer);\n this._prepareRenderer(\n renderer as WebGLRenderer,\n renderTarget,\n clearColor,\n clearAlpha,\n );\n const originalOverrideMaterial = scene.overrideMaterial;\n scene.overrideMaterial = overrideMaterial;\n renderer.render(scene, camera);\n scene.overrideMaterial = originalOverrideMaterial;\n this._restore(renderer as WebGLRenderer);\n }\n\n public clear(\n renderer: WebGLRenderer | WebGPURenderer,\n renderTarget: WebGLRenderTarget | null,\n clearColor?: ColorRepresentation,\n clearAlpha?: number,\n ): void {\n this._backup(renderer as WebGLRenderer);\n this._prepareRenderer(\n renderer as WebGLRenderer,\n renderTarget,\n clearColor,\n clearAlpha,\n );\n renderer.render(this._emptyScene, this._defaultCamera);\n this._restore(renderer as WebGLRenderer);\n }\n\n public render(\n renderer: WebGLRenderer | WebGPURenderer,\n scene: Scene,\n camera: Camera,\n renderTarget: WebGLRenderTarget | null,\n clearColor?: ColorRepresentation,\n clearAlpha?: number,\n ): void {\n this._backup(renderer as WebGLRenderer);\n this._prepareRenderer(\n renderer as WebGLRenderer,\n renderTarget,\n clearColor,\n clearAlpha,\n );\n renderer.render(scene, camera);\n this._restore(renderer as WebGLRenderer);\n }\n\n public renderScreenSpace(\n renderer: WebGLRenderer | WebGPURenderer,\n passMaterial: Material,\n renderTarget: WebGLRenderTarget | null,\n clearColor?: ColorRepresentation,\n clearAlpha?: number,\n ): void {\n this._backup(renderer as WebGLRenderer);\n this._prepareRenderer(\n renderer as WebGLRenderer,\n renderTarget,\n clearColor,\n clearAlpha,\n );\n this._screenSpaceQuad.material = passMaterial;\n this._screenSpaceQuad.render(renderer as WebGLRenderer);\n this._restore(renderer as WebGLRenderer);\n }\n\n private _prepareRenderer(\n renderer: WebGLRenderer,\n renderTarget: WebGLRenderTarget | null,\n clearColor?: ColorRepresentation,\n clearAlpha?: number,\n ): void {\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n if (clearColor !== undefined && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0.0);\n renderer.clear();\n }\n }\n\n private _backup(renderer: WebGLRenderer): void {\n renderer.getClearColor(this._originalClearColor);\n this._originalClearAlpha = renderer.getClearAlpha();\n this._originalAutoClear = renderer.autoClear;\n this._originalRenderTarget = renderer.getRenderTarget();\n }\n\n private _restore(renderer: WebGLRenderer): void {\n renderer.setClearColor(this._originalClearColor);\n renderer.setClearAlpha(this._originalClearAlpha);\n renderer.setRenderTarget(this._originalRenderTarget);\n renderer.autoClear = this._originalAutoClear;\n }\n}\n\nexport class BlurPass {\n private _passRenderer: PassRenderer;\n private _blurMaterial: ShaderMaterial;\n\n constructor(\n blurShaderParameters?: ShaderMaterialParameters,\n parameters?: { passRenderer?: PassRenderer },\n ) {\n this._passRenderer = parameters?.passRenderer ?? new PassRenderer();\n this._blurMaterial = new ShaderMaterial(blurShaderParameters ?? BlurShader);\n this._blurMaterial.depthTest = false;\n }\n\n public dispose() {\n this._blurMaterial.dispose();\n }\n\n public render(\n renderer: WebGLRenderer | WebGPURenderer,\n renderTargets: WebGLRenderTarget[],\n uvMin: number[],\n uvMax: number[],\n ) {\n this._blurMaterial.uniforms.tDiffuse.value = renderTargets[0].texture;\n this._blurMaterial.uniforms.rangeMin.value.x = uvMin[0];\n this._blurMaterial.uniforms.rangeMin.value.y = 0;\n this._blurMaterial.uniforms.rangeMax.value.x = uvMax[0];\n this._blurMaterial.uniforms.rangeMax.value.y = 0;\n this._passRenderer.renderScreenSpace(\n renderer as WebGLRenderer,\n this._blurMaterial,\n renderTargets[1],\n );\n this._blurMaterial.uniforms.tDiffuse.value = renderTargets[1].texture;\n this._blurMaterial.uniforms.rangeMin.value.x = 0;\n this._blurMaterial.uniforms.rangeMin.value.y = uvMin[1];\n this._blurMaterial.uniforms.rangeMax.value.x = 0;\n this._blurMaterial.uniforms.rangeMax.value.y = uvMax[1];\n this._passRenderer.renderScreenSpace(\n renderer as WebGLRenderer,\n this._blurMaterial,\n renderTargets[2],\n );\n }\n}\n\nexport interface DenoisePass {\n get texture(): Texture | null;\n set inputTexture(texture: Texture | null);\n dispose(): void;\n setSize(width: number, height: number): void;\n render(renderer: WebGLRenderer | WebGPURenderer, camera: Camera): void;\n}\n","import type { Enumify } from '#/common/src/utils/types';\n\nexport const NORMAL_VECTOR_SOURCE_TYPES = {\n INPUT_RGB_NORMAL: 'inputRgbNormal',\n FLOAT_BUFFER_NORMAL: 'floatBufferNormal',\n CONSTANT_Z: 'constantZ',\n} as const;\n\nexport type NormalVectorSourceType = Enumify<typeof NORMAL_VECTOR_SOURCE_TYPES>;\n\nexport const DEPTH_VALUE_SOURCE_TYPES = {\n SEPARATE_BUFFER: 'separateBuffer',\n NORMAL_VECTOR_ALPHA: 'normalVectorAlpha',\n} as const;\n\nexport type DepthValueSourceType = Enumify<typeof DEPTH_VALUE_SOURCE_TYPES>;\n","import type { Enumify } from '#/common/src/utils/types';\nimport type { Texture } from 'three';\nimport { Matrix4, Vector2, Vector3, Vector4 } from 'three';\n\nexport const AO_ALGORITHMS = {\n SSAO: 0,\n SAO: 1,\n N8AO: 2,\n HBAO: 3,\n GTAO: 4,\n} as const;\n\nexport type AoAlgorithmType = Enumify<typeof AO_ALGORITHMS> | null;\n\nexport const generateAoSampleKernelInitializer = (\n samples: number,\n cosineWeighted: boolean,\n) => {\n const poissonDisk = generateAoSamples(samples, cosineWeighted);\n let glslCode = 'vec4[SAMPLES](';\n for (let i = 0; i < samples; i++) {\n const sample = poissonDisk[i];\n glslCode += `vec4(${sample.x}, ${sample.y}, ${sample.z}, ${sample.w})${\n i < samples - 1 ? ',' : ')'\n }`;\n }\n return glslCode;\n};\n\nconst generateAoSamples = (samples: number, cosineWeighted: boolean) => {\n // https://github.com/Rabbid76/research-sampling-hemisphere\n const kernel: Vector4[] = [];\n for (let sampleIndex = 0; sampleIndex < samples; sampleIndex++) {\n const spiralAngle = sampleIndex * Math.PI * (3 - Math.sqrt(5));\n const z = 0.01 + (sampleIndex / (samples - 1)) * 0.99;\n const radius = cosineWeighted ? Math.sqrt(1 - z * z) : 1 - z;\n const x = Math.cos(spiralAngle) * radius;\n const y = Math.sin(spiralAngle) * radius;\n const scaleStep = 4;\n const scaleRange = Math.floor(samples / scaleStep);\n const scaleIndex =\n Math.floor(sampleIndex / scaleStep) +\n (sampleIndex % scaleStep) * scaleRange;\n let scale = 1 - scaleIndex / samples;\n scale = 0.1 + 0.9 * scale;\n kernel.push(new Vector4(x, y, z, scale));\n }\n\n return kernel;\n};\n\nexport const AOShader = {\n name: 'AOShader',\n\n defines: {\n PERSPECTIVE_CAMERA: 1,\n SAMPLES: 16,\n SAMPLE_VECTORS: generateAoSampleKernelInitializer(16, false),\n NORMAL_VECTOR_TYPE: 1,\n DEPTH_SWIZZLING: 'x',\n AO_ALGORITHM: AO_ALGORITHMS.GTAO,\n NV_ALIGNED_SAMPLES: 1,\n SCREEN_SPACE_RADIUS: 0,\n SCREEN_SPACE_RADIUS_SCALE: 100.0,\n SCENE_CLIP_BOX: 0,\n NORMAL_VECTOR_ANTIALIAS: 2,\n DEPTH_BUFFER_ANTIALIAS: 1,\n },\n\n uniforms: {\n tNormal: { value: null as Texture | null },\n tDepth: { value: null as Texture | null },\n tNoise: { value: null as Texture | null },\n resolution: { value: new Vector2() },\n cameraNear: { value: null as Texture | null },\n cameraFar: { value: null as Texture | null },\n cameraProjectionMatrix: { value: new Matrix4() },\n cameraProjectionMatrixInverse: { value: new Matrix4() },\n cameraWorldMatrix: { value: new Matrix4() },\n radius: { value: 1 },\n distanceExponent: { value: 1 },\n thickness: { value: 1 },\n distanceFallOff: { value: 1 },\n bias: { value: 0.001 },\n scale: { value: 1 },\n sceneBoxMin: { value: new Vector3(-1, -1, -1) },\n sceneBoxMax: { value: new Vector3(1, 1, 1) },\n },\n\n vertexShader: /* glsl */ `\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n fragmentShader: /* glsl */ `\n\n\t\tvarying vec2 vUv;\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform mat4 cameraWorldMatrix;\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float thickness;\n\t\tuniform float distanceFallOff;\n\t\tuniform float bias;\n\t\tuniform float scale;\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tuniform vec3 sceneBoxMin;\n\t\t\tuniform vec3 sceneBoxMax;\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <packing>\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tconst vec4 sampleKernel[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) {\n\t\t\t#if DEPTH_BUFFER_ANTIALIAS == 1\n\t\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\t\tivec2 p = ivec2(uv * size);\n\t\t\t\tfloat d0 = texelFetch(tDepth, p, 0).DEPTH_SWIZZLING;\n\t\t\t\tvec2 depth = vec2(d0, 1.0);\n\t\t\t\tfloat d1 = texelFetch(tDepth, p + ivec2(1, 0), 0).DEPTH_SWIZZLING;\n\t\t\t\tdepth += vec2(d1, 1.0) * step(abs(d1 - d0), 0.1);\n\t\t\t\tfloat d2 = texelFetch(tDepth, p - ivec2(1, 0), 0).DEPTH_SWIZZLING;\n\t\t\t\tdepth += vec2(d2, 1.0) * step(abs(d2 - d0), 0.1);\n\t\t\t\tfloat d3 = texelFetch(tDepth, p + ivec2(0, 1), 0).DEPTH_SWIZZLING;\n\t\t\t\tdepth += vec2(d3, 1.0) * step(abs(d3 - d0), 0.1);\n\t\t\t\tfloat d4 = texelFetch(tDepth, p - ivec2(0, 1), 0).DEPTH_SWIZZLING;\n\t\t\t\tdepth += vec2(d4, 1.0) * step(abs(d4 - d0), 0.1);\n\t\t\t\treturn depth.x / depth.y;\n \t#else\n \treturn textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;\n \t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\treturn texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n vec2 size = vec2(textureSize(tDepth, 0));\n ivec2 p = ivec2(uv * size);\n float c0 = fetchDepth(p);\n float l2 = fetchDepth(p - ivec2(2, 0));\n float l1 = fetchDepth(p - ivec2(1, 0));\n float r1 = fetchDepth(p + ivec2(1, 0));\n float r2 = fetchDepth(p + ivec2(2, 0));\n float b2 = fetchDepth(p - ivec2(0, 2));\n float b1 = fetchDepth(p - ivec2(0, 1));\n float t1 = fetchDepth(p + ivec2(0, 1));\n float t2 = fetchDepth(p + ivec2(0, 2));\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n vec3 ce = getViewPosition(uv, c0).xyz;\n vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n return normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(uv);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getAntiAliasedViewNormal(const in vec2 screenPosition) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\t#if NORMAL_VECTOR_ANTIALIAS == 1\n\t\t\t\t\tvec2 uv = screenPosition;\n\t\t\t\t\tvec2 size = vec2(textureSize(tNormal, 0));\n\t\t\t\t\tivec2 p = ivec2(screenPosition * size);\n\t\t\t\t\tfloat c0 = texelFetch(tNormal, p, 0).a;\n\t\t\t\t\tfloat l2 = texelFetch(tNormal, p - ivec2(2, 0), 0).a;\n\t\t\t\t\tfloat l1 = texelFetch(tNormal, p - ivec2(1, 0), 0).a;\n\t\t\t\t\tfloat r1 = texelFetch(tNormal, p + ivec2(1, 0), 0).a;\n\t\t\t\t\tfloat r2 = texelFetch(tNormal, p + ivec2(2, 0), 0).a;\n\t\t\t\t\tfloat b2 = texelFetch(tNormal, p - ivec2(0, 2), 0).a;\n\t\t\t\t\tfloat b1 = texelFetch(tNormal, p - ivec2(0, 1), 0).a;\n\t\t\t\t\tfloat t1 = texelFetch(tNormal, p + ivec2(0, 1), 0).a;\n\t\t\t\t\tfloat t2 = texelFetch(tNormal, p + ivec2(0, 2), 0).a;\n\t\t\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t\t : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t\t : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t\t\t#elif NORMAL_VECTOR_ANTIALIAS == 2\n\t\t\t\t\tvec2 size = vec2(textureSize(tNormal, 0));\n\t\t\t\t\tivec2 p = ivec2(screenPosition * size);\n\t\t\t\t\tvec3 normalVector = texelFetch(tNormal, p, 0).xyz;\n\t\t\t\t\tnormalVector += texelFetch(tNormal, p + ivec2(1, 0), 0).xyz;\n\t\t\t\t\tnormalVector += texelFetch(tNormal, p - ivec2(1, 0), 0).xyz;\n\t\t\t\t\tnormalVector += texelFetch(tNormal, p + ivec2(0, 1), 0).xyz;\n\t\t\t\t\tnormalVector += texelFetch(tNormal, p - ivec2(0, 1), 0).xyz;\n\t\t\t\t\treturn normalize(normalVector);\n\t\t\t\t#else\n\t\t\t\t\treturn texture2D(tNormal, screenPosition).xyz;\n\t\t\t\t#endif\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, screenPosition, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(screenPosition);\n\t\t\t#endif\n\t\t }\n\n\t\tvec3 getSceneUvAndDepth(vec3 sampleViewPos) {\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleSceneDepth = getDepth(sampleUv);\n\t\t\treturn vec3(sampleUv, sampleSceneDepth);\n\t\t}\n\n\t\tfloat sinusToPlane(vec3 pointOnPlane, vec3 planeNormal, vec3 point) {\n\t\t\tvec3 delta = point - pointOnPlane;\n\t\t\tfloat sinV = dot(planeNormal, normalize(delta));\n\t\t\treturn sinV;\n\t\t}\n\n\t\tfloat getFallOff(float delta, float falloffDistance) {\n\t\t\tfloat fallOff = smoothstep(0., 1., 1. - distanceFallOff * abs(delta) / falloffDistance);\n\t\t\treturn fallOff;\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth >= 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getAntiAliasedViewNormal(vUv);\n\n\t\t\tfloat radiusToUse = radius;\n\t\t\tfloat distanceFalloffToUse = thickness;\n\t\t\t#if SCREEN_SPACE_RADIUS == 1\n\t\t\t float radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;\n\t\t\t\tradiusToUse *= radiusScale;\n\t\t\t\tdistanceFalloffToUse *= radiusScale;\n\t\t\t#endif\n\n\t\t\t#if SCENE_CLIP_BOX == 1\n\t\t\t\tvec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;\n \t\t\tfloat boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));\n\t\t\t\tif (boxDistance > radiusToUse) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t#endif\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n\n\t\t\t#if NV_ALIGNED_SAMPLES == 1\n \t\t\t\tvec3 tangent = normalize(randomVec - viewNormal * dot(randomVec, viewNormal));\n \t\t\tvec3 bitangent = cross(viewNormal, tangent);\n \t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, viewNormal);\n\t\t\t#else\n\t\t\t\tvec3 tangent = normalize(vec3(randomVec.xy, 0.));\n\t\t\t\tvec3 bitangent = vec3(-tangent.y, tangent.x, 0.);\n\t\t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));\n\t\t\t#endif\n\n\t\t#if AO_ALGORITHM == 4\n\t\t\tconst int DIRECTIONS = SAMPLES < 30 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t#elif AO_ALGORITHM == 3\n\t\t\tconst int DIRECTIONS = SAMPLES < 16 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t#else\n\t\t\tconst int DIRECTIONS = SAMPLES;\n\t\t\tconst int STEPS = 1;\n\t\t#endif\n\n\t\t\tfloat ao = 0.0, totalWeight = 0.0;\n\t\t\tfor (int i = 0; i < DIRECTIONS; ++i) {\n\n\t\t\t#if AO_ALGORITHM == 4\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);\n\t\t\t#elif AO_ALGORITHM == 3\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * 2. * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);\n\t\t\t#else\n\t\t\t\tvec4 sampleDir = sampleKernel[i];\n\t\t\t#endif\n\t\t\t\tsampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);\n\n\t\t\t\tvec3 viewDir = normalize(-viewPos.xyz);\n\t\t\t\tvec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));\n\t\t\t\tvec3 sliceTangent = cross(sliceBitangent, viewDir);\n\t\t\t\tvec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));\n\n\t\t\t#if (AO_ALGORITHM == 3 || AO_ALGORITHM == 4)\n\t\t\t\tvec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);\n\t\t\t\t#if AO_ALGORITHM == 4\n\t\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));\n\t\t\t\t#else\n\t\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice));\n\t\t\t\t#endif\n\t\t\t\tfor (int j = 0; j < STEPS; ++j) {\n\t\t\t\t\tvec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);\n\t\t\t\t\tvec3 sampleViewPos = viewPos + sampleViewOffset;\n\t\t\t#else\n\t\t\t\t\tvec3 sampleViewPos = viewPos + sampleDir.xyz * radiusToUse * pow(sampleDir.w, distanceExponent);\n\t\t\t#endif\n\n\t\t\t\t\tvec3 sampleSceneUvDepth = getSceneUvAndDepth(sampleViewPos);\n\t\t\t\t\tvec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tfloat sceneSampleDist = abs(sampleSceneViewPos.z);\n\t\t\t\t\tfloat sampleDist = abs(sampleViewPos.z);\n\n\t\t\t\t#if (AO_ALGORITHM == 3 || AO_ALGORITHM == 4)\n\t\t\t\t\t// HBAO || GTAO\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tvec2 clipRangeCheck = step(0., sampleSceneUvDepth.xy) * step(sampleSceneUvDepth.xy, vec2(1.));\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff) * clipRangeCheck.x * clipRangeCheck.y);\n\t\t\t\t\t}\n\t\t\t\t\t#if AO_ALGORITHM == 4\n\t\t\t\t\t\tsampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);\n\t\t\t\t\t\tsampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\t\tviewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\t\tvec2 clipRangeCheck = step(0., sampleSceneUvDepth.xy) * step(sampleSceneUvDepth.xy, vec2(1.));\n\t\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\t\tcosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff) * clipRangeCheck.x * clipRangeCheck.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#elif AO_ALGORITHM == 2\n\t\t\t\t\t// N8AO\n\t\t\t\t\tfloat weight = dot(viewNormal, sampleDir.xyz);\n\t\t\t\t\tfloat occlusion = weight * step(sceneSampleDist + bias, sampleDist);\n\t\t\t\t#elif AO_ALGORITHM == 1\n\t\t\t\t\t// SAO\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tfloat minResolution = 0.; // ?\n\t\t\t\t\tfloat scaledViewDist = length( viewDelta ) / scale;\n\t\t\t\t\tfloat weight = 1.;\n\t\t\t\t\tfloat occlusion = max(0., (dot(viewNormal, viewDelta) - minResolution) / scaledViewDist - bias) / (1. + scaledViewDist * scaledViewDist );\n\t\t\t\t#else\n\t\t\t\t\t// SSAO\n\t\t\t\t\tfloat weight = 1.;\n\t\t\t\t\tfloat occlusion = step(sceneSampleDist + bias, sampleDist);\n\t\t\t\t#endif\n\n\t\t#if AO_ALGORITHM == 4\n\t\t\t\t}\n\t\t\t\t// GTAO\n\t\t\t\tvec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);\n\t\t\t\tfloat nx = dot(normalInSlice, sliceTangent);\n\t\t\t\tfloat ny = dot(normalInSlice, viewDir);\n\t\t\t\tfloat nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);\n\t\t\t\tfloat nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);\n\t\t\t\tfloat occlusion = nx * nxb + ny * nyb;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\t\t\tao = clamp(ao / float(DIRECTIONS), 0., 1.);\n\t\t#elif AO_ALGORITHM == 3\n\t\t\t\t}\n\t\t\t\ttotalWeight += 1.;\n\t\t\t\tao += max(0., cosHorizons.x - max(0., cosHorizons.y));\n\t\t\t}\n\t\t\tao /= totalWeight + 1. - step(0., totalWeight);\n\t\t\tao = clamp(1. - ao, 0., 1.);\n\t\t#else\n\n\t\t\t\tfloat fallOff = getFallOff(sceneSampleDist - sampleDist, distanceFalloffToUse);\n\t\t\t\tocclusion *= fallOff;\n\t\t\t\tvec2 diff = (vUv - sampleSceneUvDepth.xy) * resolution;\n\t\t\t\tocclusion *= step(1., dot(diff, diff));\n\t\t\t\tvec2 clipRangeCheck = step(0., sampleSceneUvDepth.xy) * step(sampleSceneUvDepth.xy, vec2(1.));\n\t\t\t\tocclusion *= clipRangeCheck.x * clipRangeCheck.y;\n\t\t\t\tweight *= clipRangeCheck.x * clipRangeCheck.y;\n\t\t\t\ttotalWeight += weight;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\t\t\tao /= totalWeight + 1. - step(0., totalWeight);\n\t\t\tao = clamp(1. - ao, 0., 1.);\n\t\t#endif\n\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));\n\t\t#endif\n\t\t#if AO_ALGORITHM != 1\n\t\t\tao = pow(ao, scale);\n\t\t#endif\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`,\n};\n","import {\n generateMagicSquareDistributedKernelRotations,\n PassRenderer,\n} from '../render-utility';\nimport type {\n NormalVectorSourceType,\n DepthValueSourceType,\n} from './pass-utility';\nimport {\n NORMAL_VECTOR_SOURCE_TYPES,\n DEPTH_VALUE_SOURCE_TYPES,\n} from './pass-utility';\nimport type { AoAlgorithmType } from '../shaders/ao-shader';\nimport {\n generateAoSampleKernelInitializer,\n AO_ALGORITHMS,\n AOShader,\n} from '../shaders/ao-shader';\nimport type {\n Camera,\n OrthographicCamera,\n PerspectiveCamera,\n Scene,\n Texture,\n WebGLRenderer,\n} from 'three';\nimport {\n Box3,\n CustomBlending,\n DataTexture,\n LinearFilter,\n MinEquation,\n NearestFilter,\n OneFactor,\n RepeatWrapping,\n RGBAFormat,\n ShaderMaterial,\n UniformsUtils,\n UnsignedByteType,\n Vector3,\n WebGLRenderTarget,\n} from 'three';\nimport { SimplexNoise } from 'three/examples/jsm/math/SimplexNoise.js';\n\nexport { AO_ALGORITHMS, type AoAlgorithmType } from '../shaders/ao-shader';\n\nexport interface AORenderPassParameters {\n [key: string]: any;\n resolutionScale: number;\n algorithm: AoAlgorithmType;\n samples: number;\n radius: number;\n distanceExponent: number;\n thickness: number;\n distanceFallOff: number;\n scale: number;\n bias: number;\n screenSpaceRadius: boolean;\n}\n\nexport const defaultAORenderPassParameters: AORenderPassParameters = {\n resolutionScale: 1,\n algorithm: AO_ALGORITHMS.SSAO,\n samples: 32,\n radius: 0.25,\n distanceExponent: 2, // 1\n thickness: 0.5,\n distanceFallOff: 0.5,\n scale: 1,\n bias: 0.01,\n screenSpaceRadius: false,\n};\n\nexport interface AOPassParameters {\n aoParameters?: AORenderPassParameters;\n normalVectorSourceType?: NormalVectorSourceType;\n depthValueSourceType?: DepthValueSourceType;\n modulateRedChannel?: boolean;\n depthTexture?: Texture;\n normalTexture?: Texture;\n}\n\nexport class AORenderPass {\n public needsUpdate: boolean = true;\n public parameters: AORenderPassParameters = {\n ...defaultAORenderPassParameters,\n };\n private _width: number = 0;\n private _height: number = 0;\n private _samples: number = 0;\n private _gBufferAntiAliasing: boolean = false;\n private _normalVectorSourceType: NormalVectorSourceType =\n NORMAL_VECTOR_SOURCE_TYPES.FLOAT_BUFFER_NORMAL;\n private _depthValueSourceType: DepthValueSourceType =\n DEPTH_VALUE_SOURCE_TYPES.NORMAL_VECTOR_ALPHA;\n private _modulateRedChannel: boolean = false;\n public depthTexture: Texture | null = null;\n public normalTexture: Texture | null = null;\n private _noiseTexture: Texture | null = null;\n private _aoMaterial?: ShaderMaterial;\n private _renderTarget: WebGLRenderTarget | null = null;\n private _passRenderer: PassRenderer = new PassRenderer();\n private _sceneClipBox: Box3 = new Box3(\n new Vector3(-1, -1, -1),\n new Vector3(1, 1, 1),\n );\n private _sceneScale: number = 1;\n\n public get texture(): Texture | null {\n return this._renderTarget ? this._renderTarget?.texture : null;\n }\n\n constructor(\n width: number,\n height: number,\n samples: number,\n gBufferAntiAliasing: boolean,\n parameters?: AOPassParameters,\n ) {\n this._width = width;\n this._height = height;\n this._samples = samples;\n this._gBufferAntiAliasing = gBufferAntiAliasing;\n this._normalVectorSourceType =\n parameters?.normalVectorSourceType ||\n NORMAL_VECTOR_SOURCE_TYPES.FLOAT_BUFFER_NORMAL;\n this._depthValueSourceType =\n parameters?.depthValueSourceType ||\n DEPTH_VALUE_SOURCE_TYPES.NORMAL_VECTOR_ALPHA;\n this._modulateRedChannel = parameters?.modulateRedChannel || false;\n if (parameters?.aoParameters) {\n this.parameters = parameters.aoParameters;\n }\n if (parameters) {\n this.updateTextures(parameters);\n }\n }\n\n private _getNoiseTexture(size = 64): Texture | null {\n if (!this._noiseTexture) {\n const simplex = new SimplexNoise();\n const data = new Uint8Array(size * size * 4);\n for (let i = 0; i < size; i++) {\n for (let j = 0; j < size; j++) {\n const x = i;\n const y = j;\n\n data[(i * size + j) * 4] = (simplex.noise(x, y) + 1.0) * 127.5;\n data[(i * size + j) * 4 + 1] =\n (simplex.noise(x + size, y) + 1.0) * 127.5;\n data[(i * size + j) * 4 + 2] =\n (simplex.noise(x, y + size) + 1.0) * 127.5;\n data[(i * size + j) * 4 + 3] =\n (simplex.noise(x + size, y + size) + 1.0) * 127.5;\n }\n }\n this._noiseTexture = new DataTexture(\n data,\n size,\n size,\n RGBAFormat,\n UnsignedByteType,\n );\n this._noiseTexture.wrapS = RepeatWrapping;\n this._noiseTexture.wrapT = RepeatWrapping;\n this._noiseTexture.needsUpdate = true;\n }\n return this._noiseTexture;\n }\n\n private _getMaterial(camera: Camera, needsUpdate: boolean): ShaderMaterial {\n let updateShader = needsUpdate;\n if (!this._aoMaterial) {\n this._aoMaterial = this._newAoMaterial();\n updateShader = true;\n }\n if (updateShader) {\n this._updateShader(this._aoMaterial, camera);\n this._aoMaterial.needsUpdate = true;\n }\n this._updateUniforms(this._aoMaterial, camera, updateShader);\n return this._aoMaterial;\n }\n\n private _newAoMaterial(): ShaderMaterial {\n const aoMaterial = new ShaderMaterial({\n defines: Object.assign({}, AOShader.defines),\n uniforms: UniformsUtils.clone(AOShader.uniforms),\n vertexShader: AOShader.vertexShader,\n fragmentShader: AOShader.fragmentShader,\n depthTest: false,\n depthWrite: false,\n });\n if (this._modulateRedChannel) {\n aoMaterial.blending = CustomBlending;\n aoMaterial.blendEquation = MinEquation;\n aoMaterial.blendEquationAlpha = null;\n aoMaterial.blendSrc = OneFactor;\n aoMaterial.blendSrcAlpha = null;\n aoMaterial.blendDst = OneFactor;\n aoMaterial.blendDstAlpha = null;\n }\n aoMaterial.defines.FRAGMENT_OUTPUT = this._modulateRedChannel\n ? 'vec4(ao, 1., 1., 1.)'\n : undefined;\n //aoMaterial.uniforms.tNoise.value = this._getNoiseTexture();\n aoMaterial.uniforms.tNoise.value =\n generateMagicSquareDistributedKernelRotations(5);\n return aoMaterial;\n }\n\n private _updateShader(aoMaterial: ShaderMaterial, camera: Camera): void {\n aoMaterial.defines.PERSPECTIVE_CAMERA = (camera as PerspectiveCamera)\n .isPerspectiveCamera\n ? 1\n : 0;\n aoMaterial.defines.SAMPLES = this.parameters.samples;\n aoMaterial.defines.SAMPLE_VECTORS = generateAoSampleKernelInitializer(\n this.parameters.samples,\n this.parameters.algorithm === AO_ALGORITHMS.SSAO,\n );\n aoMaterial.defines.NORMAL_VECTOR_TYPE =\n this._normalVectorSourceType ===\n NORMAL_VECTOR_SOURCE_TYPES.FLOAT_BUFFER_NORMAL\n ? 2\n : 1;\n aoMaterial.defines.DEPTH_SWIZZLING =\n this._depthValueSourceType ===\n DEPTH_VALUE_SOURCE_TYPES.NORMAL_VECTOR_ALPHA\n ? 'a'\n : 'x';\n aoMaterial.defines.AO_ALGORITHM = this.parameters.algorithm;\n aoMaterial.defines.NV_ALIGNED_SAMPLES =\n this.parameters.algorithm === AO_ALGORITHMS.HBAO ||\n this.parameters.algorithm === AO_ALGORITHMS.GTAO\n ? 0\n : 1;\n aoMaterial.defines.SCREEN_SPACE_RADIUS = this.parameters.screenSpaceRadius\n ? 1\n : 0;\n aoMaterial.defines.SCENE_CLIP_BOX = 1;\n aoMaterial.defines.NORMAL_VECTOR_ANTIALIAS = this._gBufferAntiAliasing\n ? 2\n : 0;\n aoMaterial.defines.DEPTH_BUFFER_ANTIALIAS = this._gBufferAntiAliasing\n ? 1\n : 0;\n }\n\n private _updateUniforms(\n aoMaterial: ShaderMaterial,\n camera: Camera,\n updateShader: boolean,\n ): void {\n const sceneScale = this.parameters.screenSpaceRadius ? 1 : this._sceneScale;\n const depthTexture =\n this._depthValueSourceType ===\n DEPTH_VALUE_SOURCE_TYPES.NORMAL_VECTOR_ALPHA\n ? this.normalTexture\n : this.depthTexture;\n aoMaterial.uniforms.tNormal.value = this.normalTexture as Texture;\n aoMaterial.uniforms.tDepth.value = depthTexture;\n aoMaterial.uniforms.resolution.value.set(this._width, this._height);\n aoMaterial.uniforms.cameraProjectionMatrix.value.copy(\n camera.projectionMatrix,\n );\n aoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy(\n camera.projectionMatrixInverse,\n );\n aoMaterial.uniforms.cameraWorldMatrix.value.copy(camera.matrixWorld);\n const currentCamera = camera as PerspectiveCamera | OrthographicCamera;\n aoMaterial.uniforms.cameraNear.value = currentCamera.near;\n aoMaterial.uniforms.cameraFar.value = currentCamera.far;\n if (updateShader) {\n aoMaterial.uniforms.radius.value = this.parameters.radius * sceneScale;\n aoMaterial.uniforms.distanceExponent.value =\n this.parameters.distanceExponent;\n aoMaterial.uniforms.thickness.value =\n this.parameters.thickness * sceneScale;\n aoMaterial.uniforms.distanceFallOff.value =\n this.parameters.distanceFallOff;\n aoMaterial.uniforms.scale.value = this.parameters.scale;\n if (this._sceneClipBox) {\n aoMaterial.uniforms.sceneBoxMin.value.copy(this._sceneClipBox.min);\n aoMaterial.uniforms.sceneBoxMax.value.copy(this._sceneClipBox.max);\n }\n }\n }\n\n private _getRenderTargets(): WebGLRenderTarget {\n if (!this._renderTarget) {\n this._renderTarget = new WebGLRenderTarget(this._width, this._height, {\n samples: this._samples,\n magFilter: this._samples > 1 ? LinearFilter : NearestFilter,\n minFilter: this._samples > 1 ? LinearFilter : NearestFilter,\n });\n }\n return this._renderTarget;\n }\n\n public dispose(): void {\n this._noiseTexture?.dispose();\n this._aoMaterial?.dispose();\n this._renderTarget?.dispose();\n }\n\n public setSize(width: number, height: number): void {\n this._width = width;\n this._height = height;\n this._renderTarget?.setSize(width, height);\n this.needsUpdate = true;\n }\n\n public updateBounds(sceneClipBox: Box3, sceneScale?: number) {\n this._sceneClipBox = new Box3().copy(sceneClipBox);\n this._sceneScale = sceneScale ?? 1;\n this.needsUpdate = true;\n }\n\n public updateParameters(parameters: AORenderPassParameters) {\n for (const propertyName in parameters) {\n if (this.parameters.hasOwnProperty(propertyName)) {\n this.parameters[propertyName] = parameters[propertyName];\n this.needsUpdate = true;\n }\n }\n }\n\n public updateTextures(parameters: AOPassParameters) {\n if (parameters.depthTexture) {\n this.depthTexture = parameters.depthTexture;\n this.needsUpdate = true;\n }\n if (parameters.normalTexture) {\n this.normalTexture = parameters.normalTexture;\n this.needsUpdate = true;\n }\n }\n\n public clear(renderer: WebGLRenderer, renderTarget?: WebGLRenderTarget) {\n this._passRenderer.clear(\n renderer,\n renderTarget ? renderTarget : this._getRenderTargets(),\n 0xffffff,\n 1,\n );\n }\n\n public render(\n renderer: WebGLRenderer,\n camera: Camera,\n _scene: Scene,\n renderTarget?: WebGLRenderTarget,\n ) {\n const aoMaterial = this._getMaterial(camera, this.needsUpdate);\n this.needsUpdate = false;\n this._passRenderer.renderScreenSpace(\n renderer,\n aoMaterial,\n renderTarget ? renderTarget : this._getRenderTargets(),\n );\n }\n}\n","import { AO_ALGORITHMS } from './pass/ao-pass';\nimport type { Nullable } from '#/common/src/utils/types';\nimport type { Enumify } from '#/common/src/utils/types';\nimport { deepMerge } from '../../utils/common-utils';\n\nexport const SCENE_SHADING_TYPES = {\n DEFAULT: 'default',\n BRIGHT: 'bright',\n} as const;\n\nexport type SceneShadingType = Enumify<typeof SCENE_SHADING_TYPES>;\n\nexport interface CustomShadingParameters {\n aoIntensity?: number;\n aoExtent?: number;\n shBakedOnGround?: boolean;\n shadowIntensity?: number;\n shadowSoftening?: number;\n grReflectIntensity?: number;\n grReflectFadeOut?: number;\n}\n\nconst brightSceneShadingParameters: Record<string, any> = {\n shadowType: 'PCFShadowMap',\n shAndAoPassParameters: {\n aoIntensity: 0.3,\n shadow: {\n shadowRadius: 0.1,\n },\n ao: {\n algorithm: AO_ALGORITHMS.SSAO,\n samples: 32,\n radius: 0.02,\n distanceExponent: 2,\n thickness: 0.1,\n distanceFallOff: 1,\n bias: 0.01,\n },\n poissonDenoise: {\n iterations: 2,\n samples: 16,\n rings: 2.89,\n radius: 4,\n radiusExponent: 1.3,\n depthPhi: 2.5,\n normalPhi: 0.5,\n },\n },\n groundReflectionParameters: {\n brightness: 0.5,\n },\n};\n\ntype ObjectType = Record<string, object>;\n\nexport const mergeRendererParameters = (\n ...args: ObjectType[]\n): Nullable<ObjectType> => {\n if (args.length === 0) {\n return null;\n }\n if (args.length === 1) {\n return args[0];\n }\n let target = args[0];\n for (let i = 1; i < args.length; i++) {\n target = deepMerge(target, args[i]);\n }\n return target;\n};\n\nexport const getInteractionParameters = (\n uiInteractionMode: boolean,\n): Nullable<ObjectType> => {\n return uiInteractionMode\n ? {\n groundReflectionParameters: {\n enabled: false,\n },\n }\n : null;\n};\n\nexport const getShadingParameters = (\n shadingType: SceneShadingType,\n): Nullable<ObjectType> => {\n if (!shadingType || shadingType === SCENE_SHADING_TYPES.DEFAULT) {\n return null;\n }\n if (shadingType === SCENE_SHADING_TYPES.BRIGHT) {\n return brightSceneShadingParameters;\n }\n return null;\n};\n\nconst _clamp = (value: number): number => {\n return Math.max(0, Math.min(1, value));\n};\n\ninterface ShadingMapParameters {\n shAndAoPassParameters: {\n aoIntensity?: number;\n shadowIntensity?: number;\n ao: {\n radius?: number;\n thickness?: number;\n };\n shadow: {\n shadowRadius?: number;\n };\n };\n groundReflectionParameters: {\n enabled?: boolean;\n intensity?: number;\n fadeOutDistance?: number;\n };\n bakedGroundContactShadowParameters: {\n enabled?: boolean;\n opacity?: number;\n blurMin?: number;\n blurMax?: number;\n };\n}\n\nexport const mapCustomShadingParameters = (\n customShadingParameters: CustomShadingParameters,\n): Record<string, object> => {\n const parameters: ShadingMapParameters = {\n shAndAoPassParameters: {\n ao: {},\n shadow: {},\n },\n groundReflectionParameters: {},\n bakedGroundContactShadowParameters: {},\n };\n _mapCustomAoParameters(parameters, customShadingParameters);\n _mapCustomShadowParameters(parameters, customShadingParameters);\n _mapCustomGroundReflectionParameters(parameters, customShadingParameters);\n return parameters as unknown as Record<string, object>;\n};\n\nexport const _mapCustomAoParameters = (\n parameters: ShadingMapParameters,\n customShadingParameters: CustomShadingParameters,\n) => {\n if (customShadingParameters.aoIntensity !== undefined) {\n parameters.shAndAoPassParameters.aoIntensity = _clamp(\n customShadingParameters.aoIntensity,\n );\n }\n if (customShadingParameters.aoExtent !== undefined) {\n parameters.shAndAoPassParameters.ao.radius =\n _clamp(customShadingParameters.aoExtent) * 0.3;\n parameters.shAndAoPassParameters.ao.thickness =\n 0.1 + _clamp(customShadingParameters.aoExtent) * 0.2;\n }\n};\n\nexport const _mapCustomShadowParameters = (\n parameters: ShadingMapParameters,\n customShadingParameters: CustomShadingParameters,\n) => {\n if (customShadingParameters.shBakedOnGround) {\n parameters.bakedGroundContactShadowParameters.enabled = true;\n parameters.shAndAoPassParameters.shadowIntensity = 0;\n if (customShadingParameters.shadowIntensity !== undefined) {\n parameters.bakedGroundContactShadowParameters.opacity = _clamp(\n customShadingParameters.shadowIntensity,\n );\n }\n if (customShadingParameters.shadowIntensity !== undefined) {\n parameters.bakedGroundContactShadowParameters.blurMax =\n _clamp(customShadingParameters.shadowIntensity) * 0.1;\n parameters.bakedGroundContactShadowParameters.blurMin =\n parameters.bakedGroundContactShadowParameters.blurMax * 0.01;\n }\n } else {\n if (customShadingParameters.shBakedOnGround !== undefined) {\n parameters.bakedGroundContactShadowParameters.enabled = false;\n }\n if (customShadingParameters.shadowIntensity !== undefined) {\n parameters.shAndAoPassParameters.shadowIntensity = _clamp(\n customShadingParameters.shadowIntensity,\n );\n }\n if (customShadingParameters.shadowSoftening !== undefined) {\n parameters.shAndAoPassParameters.shadow.shadowRadius =\n 0.001 + _clamp(customShadingParameters.shadowSoftening) * 0.2;\n }\n }\n};\n\nexport const _mapCustomGroundReflectionParameters = (\n parameters: ShadingMapParameters,\n customShadingParameters: CustomShadingParameters,\n) => {\n if (customShadingParameters.grReflectIntensity !== undefined) {\n parameters.groundReflectionParameters.enabled =\n customShadingParameters.grReflectIntensity > 0;\n parameters.groundReflectionParameters.intensity = _clamp(\n customShadingParameters.grReflectIntensity,\n );\n }\n if (customShadingParameters.grReflectFadeOut !== undefined) {\n parameters.groundReflectionParameters.fadeOutDistance =\n (1 - _clamp(customShadingParameters.grReflectFadeOut)) * 4;\n }\n};\n"],"x_google_ignoreList":[1,2],"mappings":"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GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAC9H;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAC9H;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAC9H;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAC9H;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;IAAG;GAC9H;IAAE;IAAG;IAAG;IAAG;IAAG;GAAE;IAAE;IAAG;IAAG;IAAG;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"}
@@ -1 +1 @@
1
- {"name": "roomle-core-hsc", "version": "2.81.0-alpha.10" }
1
+ {"name": "roomle-core-hsc", "version": "2.81.0-alpha.11" }
@@ -1,6 +1,6 @@
1
- import { o as e, t } from "./rolldown-runtime-BwvMKf85.mjs";
2
- import { t as n } from "./scene-renderer-DvXjoKHZ.mjs";
3
- import { n as r, r as i, t as a } from "./decorate-C9r0zXzz.mjs";
1
+ import { n as e, t } from "./rolldown-runtime-DgwB9i60.mjs";
2
+ import { t as n } from "./scene-renderer-DbHi1plp.mjs";
3
+ import { n as r, r as i, t as a } from "./decorate-CTUwswpM.mjs";
4
4
  //#endregion
5
5
  //#region packages/common-core/src/utils/stats-helper.ts
6
6
  var o = /* @__PURE__ */ e((/* @__PURE__ */ t(((e, t) => {
@@ -93,4 +93,4 @@ a([i, r("design:type", Object)], s.prototype, "_cacheHolder", void 0);
93
93
  //#endregion
94
94
  export { s as default };
95
95
 
96
- //# sourceMappingURL=stats-helper-BYi5TI_H.mjs.map
96
+ //# sourceMappingURL=stats-helper-Bs79UZne.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats-helper-BYi5TI_H.mjs","names":[],"sources":["../../../../node_modules/stats.js/build/stats.min.js","../../packages/common-core/src/utils/stats-helper.ts"],"sourcesContent":["// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import inject from '../di/inject';\nimport type { Panel } from '../../../typings/stats';\nimport type CacheHolder from '../services/cache-holder';\nimport type { WebGLInfo } from 'three';\nimport Stats from 'stats.js';\nimport {\n QUALITY_LEVELS,\n type QualityLevel,\n} from '../webgl/renderer/scene-renderer';\n\nexport default class StatsHelper {\n @inject\n protected _cacheHolder: CacheHolder;\n\n private _statPanels: Stats[] = [];\n private _drawPanel: Panel; // eslint-disable-line\n private _trianglesPanel: Panel; // eslint-disable-line\n private _geometryPanel: Panel; // eslint-disable-line\n private _texturePanel: Panel; // eslint-disable-line\n private _materialPanel: Panel; // eslint-disable-line\n private _qualityPanel: Panel; // eslint-disable-line\n\n constructor() {\n this._init();\n }\n\n private _init() {\n let fpsPanel = new Stats();\n fpsPanel.showPanel(0);\n fpsPanel.dom.style.cssText =\n 'position:absolute;top:0px;left:0px;z-index:110;';\n document.body.appendChild(fpsPanel.dom);\n this._statPanels.push(fpsPanel);\n\n let memoryPanel = new Stats();\n memoryPanel.showPanel(2);\n memoryPanel.dom.style.cssText =\n 'position:absolute;top:50px;left:0px;z-index:110;';\n document.body.appendChild(memoryPanel.dom);\n this._statPanels.push(memoryPanel);\n\n let drawPanel = new Stats();\n this._drawPanel = drawPanel.addPanel(\n new Stats.Panel('draw', '#0f0', '#000'),\n );\n drawPanel.showPanel(3);\n drawPanel.dom.style.cssText =\n 'position:absolute;top:100px;left:0px;z-index:110;';\n document.body.appendChild(drawPanel.dom);\n this._statPanels.push(drawPanel);\n\n let trianglesPanel = new Stats();\n this._trianglesPanel = trianglesPanel.addPanel(\n new Stats.Panel('poly', '#0f0', '#000'),\n );\n trianglesPanel.showPanel(3);\n trianglesPanel.dom.style.cssText =\n 'position:absolute;top:150px;left:0px;z-index:110;';\n document.body.appendChild(trianglesPanel.dom);\n this._statPanels.push(trianglesPanel);\n\n let geometryPanel = new Stats();\n this._geometryPanel = geometryPanel.addPanel(\n new Stats.Panel('geo', '#f00', '#000'),\n );\n geometryPanel.showPanel(3);\n geometryPanel.dom.style.cssText =\n 'position:absolute;top:200px;left:0px;z-index:110;';\n document.body.appendChild(geometryPanel.dom);\n this._statPanels.push(geometryPanel);\n\n let texturePanel = new Stats();\n this._texturePanel = texturePanel.addPanel(\n new Stats.Panel('tex', '#f00', '#000'),\n );\n texturePanel.showPanel(3);\n texturePanel.dom.style.cssText =\n 'position:absolute;top:250px;left:0px;z-index:110;';\n document.body.appendChild(texturePanel.dom);\n this._statPanels.push(texturePanel);\n\n let materialPanel = new Stats();\n this._materialPanel = materialPanel.addPanel(\n new Stats.Panel('mat', '#f00', '#000'),\n );\n materialPanel.showPanel(3);\n materialPanel.dom.style.cssText =\n 'position:absolute;top:300px;left:0px;z-index:110;';\n document.body.appendChild(materialPanel.dom);\n this._statPanels.push(materialPanel);\n\n let qualityPanel = new Stats();\n this._qualityPanel = qualityPanel.addPanel(\n new Stats.Panel('quality', '#fff', '#000'),\n );\n qualityPanel.showPanel(3);\n qualityPanel.dom.style.cssText =\n 'position:absolute;top:350px;left:0px;z-index:110;';\n document.body.appendChild(qualityPanel.dom);\n this._statPanels.push(qualityPanel);\n }\n\n public updateRenderInfo(info: WebGLInfo) {\n if (this._drawPanel && info.render.calls > 0) {\n this._drawPanel.update(info.render.calls, 500);\n }\n if (this._trianglesPanel && info.render.triangles > 0) {\n this._trianglesPanel.update(info.render.triangles, 10000);\n }\n if (this._geometryPanel && info.memory.geometries > 0) {\n this._geometryPanel.update(info.memory.geometries, 10000);\n }\n if (this._texturePanel && info.memory.textures > 0) {\n this._texturePanel.update(info.memory.textures, 10000);\n }\n if (this._materialPanel && this._cacheHolder.materialCache.size > 0) {\n this._materialPanel.update(this._cacheHolder.materialCache.size, 1000);\n }\n\n if (this._statPanels.length > 0) {\n this._statPanels.forEach((panel) => panel.update());\n }\n }\n\n public updateQualityInfo(qualityLevel: QualityLevel) {\n if (this._qualityPanel && qualityLevel) {\n const qualityValue = Object.values(QUALITY_LEVELS).indexOf(qualityLevel);\n this._qualityPanel.update(qualityValue, 5);\n }\n }\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"stats-helper-Bs79UZne.mjs","names":[],"sources":["../../../../node_modules/stats.js/build/stats.min.js","../../packages/common-core/src/utils/stats-helper.ts"],"sourcesContent":["// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import inject from '../di/inject';\nimport type { Panel } from '../../../typings/stats';\nimport type CacheHolder from '../services/cache-holder';\nimport type { WebGLInfo } from 'three';\nimport Stats from 'stats.js';\nimport {\n QUALITY_LEVELS,\n type QualityLevel,\n} from '../webgl/renderer/scene-renderer';\n\nexport default class StatsHelper {\n @inject\n protected _cacheHolder: CacheHolder;\n\n private _statPanels: Stats[] = [];\n private _drawPanel: Panel; // eslint-disable-line\n private _trianglesPanel: Panel; // eslint-disable-line\n private _geometryPanel: Panel; // eslint-disable-line\n private _texturePanel: Panel; // eslint-disable-line\n private _materialPanel: Panel; // eslint-disable-line\n private _qualityPanel: Panel; // eslint-disable-line\n\n constructor() {\n this._init();\n }\n\n private _init() {\n let fpsPanel = new Stats();\n fpsPanel.showPanel(0);\n fpsPanel.dom.style.cssText =\n 'position:absolute;top:0px;left:0px;z-index:110;';\n document.body.appendChild(fpsPanel.dom);\n this._statPanels.push(fpsPanel);\n\n let memoryPanel = new Stats();\n memoryPanel.showPanel(2);\n memoryPanel.dom.style.cssText =\n 'position:absolute;top:50px;left:0px;z-index:110;';\n document.body.appendChild(memoryPanel.dom);\n this._statPanels.push(memoryPanel);\n\n let drawPanel = new Stats();\n this._drawPanel = drawPanel.addPanel(\n new Stats.Panel('draw', '#0f0', '#000'),\n );\n drawPanel.showPanel(3);\n drawPanel.dom.style.cssText =\n 'position:absolute;top:100px;left:0px;z-index:110;';\n document.body.appendChild(drawPanel.dom);\n this._statPanels.push(drawPanel);\n\n let trianglesPanel = new Stats();\n this._trianglesPanel = trianglesPanel.addPanel(\n new Stats.Panel('poly', '#0f0', '#000'),\n );\n trianglesPanel.showPanel(3);\n trianglesPanel.dom.style.cssText =\n 'position:absolute;top:150px;left:0px;z-index:110;';\n document.body.appendChild(trianglesPanel.dom);\n this._statPanels.push(trianglesPanel);\n\n let geometryPanel = new Stats();\n this._geometryPanel = geometryPanel.addPanel(\n new Stats.Panel('geo', '#f00', '#000'),\n );\n geometryPanel.showPanel(3);\n geometryPanel.dom.style.cssText =\n 'position:absolute;top:200px;left:0px;z-index:110;';\n document.body.appendChild(geometryPanel.dom);\n this._statPanels.push(geometryPanel);\n\n let texturePanel = new Stats();\n this._texturePanel = texturePanel.addPanel(\n new Stats.Panel('tex', '#f00', '#000'),\n );\n texturePanel.showPanel(3);\n texturePanel.dom.style.cssText =\n 'position:absolute;top:250px;left:0px;z-index:110;';\n document.body.appendChild(texturePanel.dom);\n this._statPanels.push(texturePanel);\n\n let materialPanel = new Stats();\n this._materialPanel = materialPanel.addPanel(\n new Stats.Panel('mat', '#f00', '#000'),\n );\n materialPanel.showPanel(3);\n materialPanel.dom.style.cssText =\n 'position:absolute;top:300px;left:0px;z-index:110;';\n document.body.appendChild(materialPanel.dom);\n this._statPanels.push(materialPanel);\n\n let qualityPanel = new Stats();\n this._qualityPanel = qualityPanel.addPanel(\n new Stats.Panel('quality', '#fff', '#000'),\n );\n qualityPanel.showPanel(3);\n qualityPanel.dom.style.cssText =\n 'position:absolute;top:350px;left:0px;z-index:110;';\n document.body.appendChild(qualityPanel.dom);\n this._statPanels.push(qualityPanel);\n }\n\n public updateRenderInfo(info: WebGLInfo) {\n if (this._drawPanel && info.render.calls > 0) {\n this._drawPanel.update(info.render.calls, 500);\n }\n if (this._trianglesPanel && info.render.triangles > 0) {\n this._trianglesPanel.update(info.render.triangles, 10000);\n }\n if (this._geometryPanel && info.memory.geometries > 0) {\n this._geometryPanel.update(info.memory.geometries, 10000);\n }\n if (this._texturePanel && info.memory.textures > 0) {\n this._texturePanel.update(info.memory.textures, 10000);\n }\n if (this._materialPanel && this._cacheHolder.materialCache.size > 0) {\n this._materialPanel.update(this._cacheHolder.materialCache.size, 1000);\n }\n\n if (this._statPanels.length > 0) {\n this._statPanels.forEach((panel) => panel.update());\n }\n }\n\n public updateQualityInfo(qualityLevel: QualityLevel) {\n if (this._qualityPanel && qualityLevel) {\n const qualityValue = Object.values(QUALITY_LEVELS).indexOf(qualityLevel);\n this._qualityPanel.update(qualityValue, 5);\n }\n }\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { $ as e, E as t, L as n, bt as r, ht as i, n as a, st as o } from "./three.tsl-CAEdYyg3.mjs";
1
+ import { $ as e, E as t, L as n, bt as r, ht as i, n as a, st as o } from "./three.tsl-Caqi2VRr.mjs";
2
2
  export { a as Fn, t as float, n as mix, e as reflector, o as smoothstep, i as uniform, r as vec4 };
@@ -1,4 +1,4 @@
1
- import { Un as e } from "./three.webgpu-CkP2nkXM.mjs";
1
+ import { Un as e } from "./three.webgpu-CT4fuV2X.mjs";
2
2
  e.BRDF_GGX, e.BRDF_Lambert, e.BasicPointShadowFilter, e.BasicShadowFilter;
3
3
  var t = e.Break;
4
4
  e.Const, e.Continue, e.DFGLUT, e.D_GGX, e.Discard, e.EPSILON, e.F_Schlick;
@@ -133,4 +133,4 @@ e.viewZToReversedOrthographicDepth, e.viewZToReversedPerspectiveDepth, e.viewpor
133
133
  //#endregion
134
134
  export { $, A, z as B, S as C, Ce as Ct, E as D, T as E, P as F, G, V as H, F as I, J, K, I as L, j as M, M as N, D as O, N as P, Q, L as R, x as S, Se as St, w as T, U, B as V, W, X, Y, Z, g as _, _e as _t, i as a, ae as at, y as b, be as bt, o as c, ce as ct, u as d, de as dt, ee as et, d as f, fe as ft, h as g, ge as gt, m as h, he as ht, r as i, ie as it, O as j, k, c as l, le as lt, p as m, me as mt, n, ne as nt, a as o, oe as ot, f as p, pe as pt, q, s as r, re as rt, H as s, se as st, t, te as tt, l as u, ue as ut, v, ve as vt, C as w, b as x, xe as xt, _ as y, ye as yt, R as z };
135
135
 
136
- //# sourceMappingURL=three.tsl-CAEdYyg3.mjs.map
136
+ //# sourceMappingURL=three.tsl-Caqi2VRr.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"three.tsl-CAEdYyg3.mjs","names":[],"sources":["../../../../node_modules/three/build/three.tsl.js"],"sourcesContent":["/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { TSL } from 'three/webgpu';\n\nconst BRDF_GGX = TSL.BRDF_GGX;\nconst BRDF_Lambert = TSL.BRDF_Lambert;\nconst BasicPointShadowFilter = TSL.BasicPointShadowFilter;\nconst BasicShadowFilter = TSL.BasicShadowFilter;\nconst Break = TSL.Break;\nconst Const = TSL.Const;\nconst Continue = TSL.Continue;\nconst DFGLUT = TSL.DFGLUT;\nconst D_GGX = TSL.D_GGX;\nconst Discard = TSL.Discard;\nconst EPSILON = TSL.EPSILON;\nconst F_Schlick = TSL.F_Schlick;\nconst Fn = TSL.Fn;\nconst INFINITY = TSL.INFINITY;\nconst If = TSL.If;\nconst Loop = TSL.Loop;\nconst NodeAccess = TSL.NodeAccess;\nconst NodeShaderStage = TSL.NodeShaderStage;\nconst NodeType = TSL.NodeType;\nconst NodeUpdateType = TSL.NodeUpdateType;\nconst PCFShadowFilter = TSL.PCFShadowFilter;\nconst PCFSoftShadowFilter = TSL.PCFSoftShadowFilter;\nconst PI = TSL.PI;\nconst PI2 = TSL.PI2;\nconst TWO_PI = TSL.TWO_PI;\nconst HALF_PI = TSL.HALF_PI;\nconst PointShadowFilter = TSL.PointShadowFilter;\nconst Return = TSL.Return;\nconst Schlick_to_F0 = TSL.Schlick_to_F0;\nconst ShaderNode = TSL.ShaderNode;\nconst Stack = TSL.Stack;\nconst Switch = TSL.Switch;\nconst TBNViewMatrix = TSL.TBNViewMatrix;\nconst VSMShadowFilter = TSL.VSMShadowFilter;\nconst V_GGX_SmithCorrelated = TSL.V_GGX_SmithCorrelated;\nconst Var = TSL.Var;\nconst VarIntent = TSL.VarIntent;\nconst abs = TSL.abs;\nconst acesFilmicToneMapping = TSL.acesFilmicToneMapping;\nconst acos = TSL.acos;\nconst acosh = TSL.acosh;\nconst add = TSL.add;\nconst addMethodChaining = TSL.addMethodChaining;\nconst addNodeElement = TSL.addNodeElement;\nconst agxToneMapping = TSL.agxToneMapping;\nconst all = TSL.all;\nconst alphaT = TSL.alphaT;\nconst and = TSL.and;\nconst anisotropy = TSL.anisotropy;\nconst anisotropyB = TSL.anisotropyB;\nconst anisotropyT = TSL.anisotropyT;\nconst any = TSL.any;\nconst append = TSL.append;\nconst array = TSL.array;\nconst arrayBuffer = TSL.arrayBuffer;\nconst asin = TSL.asin;\nconst asinh = TSL.asinh;\nconst assign = TSL.assign;\nconst atan = TSL.atan;\nconst atanh = TSL.atanh;\nconst atomicAdd = TSL.atomicAdd;\nconst atomicAnd = TSL.atomicAnd;\nconst atomicFunc = TSL.atomicFunc;\nconst atomicLoad = TSL.atomicLoad;\nconst atomicMax = TSL.atomicMax;\nconst atomicMin = TSL.atomicMin;\nconst atomicOr = TSL.atomicOr;\nconst atomicStore = TSL.atomicStore;\nconst atomicSub = TSL.atomicSub;\nconst atomicXor = TSL.atomicXor;\nconst attenuationColor = TSL.attenuationColor;\nconst attenuationDistance = TSL.attenuationDistance;\nconst attribute = TSL.attribute;\nconst attributeArray = TSL.attributeArray;\nconst backgroundBlurriness = TSL.backgroundBlurriness;\nconst backgroundIntensity = TSL.backgroundIntensity;\nconst backgroundRotation = TSL.backgroundRotation;\nconst batch = TSL.batch;\nconst bentNormalView = TSL.bentNormalView;\nconst billboarding = TSL.billboarding;\nconst bitAnd = TSL.bitAnd;\nconst bitNot = TSL.bitNot;\nconst bitOr = TSL.bitOr;\nconst bitXor = TSL.bitXor;\nconst bitangentGeometry = TSL.bitangentGeometry;\nconst bitangentLocal = TSL.bitangentLocal;\nconst bitangentView = TSL.bitangentView;\nconst bitangentWorld = TSL.bitangentWorld;\nconst bitcast = TSL.bitcast;\nconst blendBurn = TSL.blendBurn;\nconst blendColor = TSL.blendColor;\nconst blendDodge = TSL.blendDodge;\nconst blendOverlay = TSL.blendOverlay;\nconst blendScreen = TSL.blendScreen;\nconst blur = TSL.blur;\nconst bool = TSL.bool;\nconst buffer = TSL.buffer;\nconst bufferAttribute = TSL.bufferAttribute;\nconst bumpMap = TSL.bumpMap;\nconst builtin = TSL.builtin;\nconst builtinAOContext = TSL.builtinAOContext;\nconst builtinShadowContext = TSL.builtinShadowContext;\nconst bvec2 = TSL.bvec2;\nconst bvec3 = TSL.bvec3;\nconst bvec4 = TSL.bvec4;\nconst bypass = TSL.bypass;\nconst cache = TSL.cache;\nconst call = TSL.call;\nconst cameraFar = TSL.cameraFar;\nconst cameraIndex = TSL.cameraIndex;\nconst cameraNear = TSL.cameraNear;\nconst cameraNormalMatrix = TSL.cameraNormalMatrix;\nconst cameraPosition = TSL.cameraPosition;\nconst cameraProjectionMatrix = TSL.cameraProjectionMatrix;\nconst cameraProjectionMatrixInverse = TSL.cameraProjectionMatrixInverse;\nconst cameraViewMatrix = TSL.cameraViewMatrix;\nconst cameraViewport = TSL.cameraViewport;\nconst cameraWorldMatrix = TSL.cameraWorldMatrix;\nconst cbrt = TSL.cbrt;\nconst cdl = TSL.cdl;\nconst ceil = TSL.ceil;\nconst checker = TSL.checker;\nconst cineonToneMapping = TSL.cineonToneMapping;\nconst clamp = TSL.clamp;\nconst clearcoat = TSL.clearcoat;\nconst clearcoatNormalView = TSL.clearcoatNormalView;\nconst clearcoatRoughness = TSL.clearcoatRoughness;\nconst clipSpace = TSL.clipSpace;\nconst code = TSL.code;\nconst color = TSL.color;\nconst colorSpaceToWorking = TSL.colorSpaceToWorking;\nconst colorToDirection = TSL.colorToDirection;\nconst compute = TSL.compute;\nconst computeKernel = TSL.computeKernel;\nconst computeSkinning = TSL.computeSkinning;\nconst context = TSL.context;\nconst convert = TSL.convert;\nconst convertColorSpace = TSL.convertColorSpace;\nconst convertToTexture = TSL.convertToTexture;\nconst countLeadingZeros = TSL.countLeadingZeros;\nconst countOneBits = TSL.countOneBits;\nconst countTrailingZeros = TSL.countTrailingZeros;\nconst cos = TSL.cos;\nconst cosh = TSL.cosh;\nconst cross = TSL.cross;\nconst cubeTexture = TSL.cubeTexture;\nconst cubeTextureBase = TSL.cubeTextureBase;\nconst dFdx = TSL.dFdx;\nconst dFdy = TSL.dFdy;\nconst dashSize = TSL.dashSize;\nconst debug = TSL.debug;\nconst decrement = TSL.decrement;\nconst decrementBefore = TSL.decrementBefore;\nconst defaultBuildStages = TSL.defaultBuildStages;\nconst defaultShaderStages = TSL.defaultShaderStages;\nconst defined = TSL.defined;\nconst degrees = TSL.degrees;\nconst deltaTime = TSL.deltaTime;\nconst densityFog = TSL.densityFog;\nconst densityFogFactor = TSL.densityFogFactor;\nconst depth = TSL.depth;\nconst depthPass = TSL.depthPass;\nconst determinant = TSL.determinant;\nconst difference = TSL.difference;\nconst diffuseColor = TSL.diffuseColor;\nconst directPointLight = TSL.directPointLight;\nconst directionToColor = TSL.directionToColor;\nconst directionToFaceDirection = TSL.directionToFaceDirection;\nconst dispersion = TSL.dispersion;\nconst distance = TSL.distance;\nconst div = TSL.div;\nconst dot = TSL.dot;\nconst drawIndex = TSL.drawIndex;\nconst dynamicBufferAttribute = TSL.dynamicBufferAttribute;\nconst element = TSL.element;\nconst emissive = TSL.emissive;\nconst equal = TSL.equal;\nconst equirectUV = TSL.equirectUV;\nconst exp = TSL.exp;\nconst exp2 = TSL.exp2;\nconst exponentialHeightFogFactor = TSL.exponentialHeightFogFactor;\nconst expression = TSL.expression;\nconst faceDirection = TSL.faceDirection;\nconst faceForward = TSL.faceForward;\nconst faceforward = TSL.faceforward;\nconst float = TSL.float;\nconst floatBitsToInt = TSL.floatBitsToInt;\nconst floatBitsToUint = TSL.floatBitsToUint;\nconst floor = TSL.floor;\nconst fog = TSL.fog;\nconst fract = TSL.fract;\nconst frameGroup = TSL.frameGroup;\nconst frameId = TSL.frameId;\nconst frontFacing = TSL.frontFacing;\nconst fwidth = TSL.fwidth;\nconst gain = TSL.gain;\nconst gapSize = TSL.gapSize;\nconst getConstNodeType = TSL.getConstNodeType;\nconst getCurrentStack = TSL.getCurrentStack;\nconst getDirection = TSL.getDirection;\nconst getDistanceAttenuation = TSL.getDistanceAttenuation;\nconst getGeometryRoughness = TSL.getGeometryRoughness;\nconst getNormalFromDepth = TSL.getNormalFromDepth;\nconst interleavedGradientNoise = TSL.interleavedGradientNoise;\nconst vogelDiskSample = TSL.vogelDiskSample;\nconst getParallaxCorrectNormal = TSL.getParallaxCorrectNormal;\nconst getRoughness = TSL.getRoughness;\nconst getScreenPosition = TSL.getScreenPosition;\nconst getShIrradianceAt = TSL.getShIrradianceAt;\nconst getShadowMaterial = TSL.getShadowMaterial;\nconst getShadowRenderObjectFunction = TSL.getShadowRenderObjectFunction;\nconst getTextureIndex = TSL.getTextureIndex;\nconst getViewPosition = TSL.getViewPosition;\nconst globalId = TSL.globalId;\nconst glsl = TSL.glsl;\nconst glslFn = TSL.glslFn;\nconst grayscale = TSL.grayscale;\nconst greaterThan = TSL.greaterThan;\nconst greaterThanEqual = TSL.greaterThanEqual;\nconst hash = TSL.hash;\nconst highpModelNormalViewMatrix = TSL.highpModelNormalViewMatrix;\nconst highpModelViewMatrix = TSL.highpModelViewMatrix;\nconst hue = TSL.hue;\nconst increment = TSL.increment;\nconst incrementBefore = TSL.incrementBefore;\nconst instance = TSL.instance;\nconst instanceIndex = TSL.instanceIndex;\nconst instancedArray = TSL.instancedArray;\nconst instancedBufferAttribute = TSL.instancedBufferAttribute;\nconst instancedDynamicBufferAttribute = TSL.instancedDynamicBufferAttribute;\nconst instancedMesh = TSL.instancedMesh;\nconst int = TSL.int;\nconst intBitsToFloat = TSL.intBitsToFloat;\nconst inverse = TSL.inverse;\nconst inverseSqrt = TSL.inverseSqrt;\nconst inversesqrt = TSL.inversesqrt;\nconst invocationLocalIndex = TSL.invocationLocalIndex;\nconst invocationSubgroupIndex = TSL.invocationSubgroupIndex;\nconst ior = TSL.ior;\nconst iridescence = TSL.iridescence;\nconst iridescenceIOR = TSL.iridescenceIOR;\nconst iridescenceThickness = TSL.iridescenceThickness;\nconst ivec2 = TSL.ivec2;\nconst ivec3 = TSL.ivec3;\nconst ivec4 = TSL.ivec4;\nconst js = TSL.js;\nconst label = TSL.label;\nconst length = TSL.length;\nconst lengthSq = TSL.lengthSq;\nconst lessThan = TSL.lessThan;\nconst lessThanEqual = TSL.lessThanEqual;\nconst lightPosition = TSL.lightPosition;\nconst lightProjectionUV = TSL.lightProjectionUV;\nconst lightShadowMatrix = TSL.lightShadowMatrix;\nconst lightTargetDirection = TSL.lightTargetDirection;\nconst lightTargetPosition = TSL.lightTargetPosition;\nconst lightViewPosition = TSL.lightViewPosition;\nconst lightingContext = TSL.lightingContext;\nconst lights = TSL.lights;\nconst linearDepth = TSL.linearDepth;\nconst linearToneMapping = TSL.linearToneMapping;\nconst localId = TSL.localId;\nconst log = TSL.log;\nconst log2 = TSL.log2;\nconst logarithmicDepthToViewZ = TSL.logarithmicDepthToViewZ;\nconst luminance = TSL.luminance;\nconst mat2 = TSL.mat2;\nconst mat3 = TSL.mat3;\nconst mat4 = TSL.mat4;\nconst matcapUV = TSL.matcapUV;\nconst materialAO = TSL.materialAO;\nconst materialAlphaTest = TSL.materialAlphaTest;\nconst materialAnisotropy = TSL.materialAnisotropy;\nconst materialAnisotropyVector = TSL.materialAnisotropyVector;\nconst materialAttenuationColor = TSL.materialAttenuationColor;\nconst materialAttenuationDistance = TSL.materialAttenuationDistance;\nconst materialClearcoat = TSL.materialClearcoat;\nconst materialClearcoatNormal = TSL.materialClearcoatNormal;\nconst materialClearcoatRoughness = TSL.materialClearcoatRoughness;\nconst materialColor = TSL.materialColor;\nconst materialDispersion = TSL.materialDispersion;\nconst materialEmissive = TSL.materialEmissive;\nconst materialEnvIntensity = TSL.materialEnvIntensity;\nconst materialEnvRotation = TSL.materialEnvRotation;\nconst materialIOR = TSL.materialIOR;\nconst materialIridescence = TSL.materialIridescence;\nconst materialIridescenceIOR = TSL.materialIridescenceIOR;\nconst materialIridescenceThickness = TSL.materialIridescenceThickness;\nconst materialLightMap = TSL.materialLightMap;\nconst materialLineDashOffset = TSL.materialLineDashOffset;\nconst materialLineDashSize = TSL.materialLineDashSize;\nconst materialLineGapSize = TSL.materialLineGapSize;\nconst materialLineScale = TSL.materialLineScale;\nconst materialLineWidth = TSL.materialLineWidth;\nconst materialMetalness = TSL.materialMetalness;\nconst materialNormal = TSL.materialNormal;\nconst materialOpacity = TSL.materialOpacity;\nconst materialPointSize = TSL.materialPointSize;\nconst materialReference = TSL.materialReference;\nconst materialReflectivity = TSL.materialReflectivity;\nconst materialRefractionRatio = TSL.materialRefractionRatio;\nconst materialRotation = TSL.materialRotation;\nconst materialRoughness = TSL.materialRoughness;\nconst materialSheen = TSL.materialSheen;\nconst materialSheenRoughness = TSL.materialSheenRoughness;\nconst materialShininess = TSL.materialShininess;\nconst materialSpecular = TSL.materialSpecular;\nconst materialSpecularColor = TSL.materialSpecularColor;\nconst materialSpecularIntensity = TSL.materialSpecularIntensity;\nconst materialSpecularStrength = TSL.materialSpecularStrength;\nconst materialThickness = TSL.materialThickness;\nconst materialTransmission = TSL.materialTransmission;\nconst max = TSL.max;\nconst maxMipLevel = TSL.maxMipLevel;\nconst mediumpModelViewMatrix = TSL.mediumpModelViewMatrix;\nconst metalness = TSL.metalness;\nconst min = TSL.min;\nconst mix = TSL.mix;\nconst mixElement = TSL.mixElement;\nconst mod = TSL.mod;\nconst modInt = TSL.modInt;\nconst modelDirection = TSL.modelDirection;\nconst modelNormalMatrix = TSL.modelNormalMatrix;\nconst modelPosition = TSL.modelPosition;\nconst modelRadius = TSL.modelRadius;\nconst modelScale = TSL.modelScale;\nconst modelViewMatrix = TSL.modelViewMatrix;\nconst modelViewPosition = TSL.modelViewPosition;\nconst modelViewProjection = TSL.modelViewProjection;\nconst modelWorldMatrix = TSL.modelWorldMatrix;\nconst modelWorldMatrixInverse = TSL.modelWorldMatrixInverse;\nconst morphReference = TSL.morphReference;\nconst mrt = TSL.mrt;\nconst mul = TSL.mul;\nconst mx_aastep = TSL.mx_aastep;\nconst mx_add = TSL.mx_add;\nconst mx_atan2 = TSL.mx_atan2;\nconst mx_cell_noise_float = TSL.mx_cell_noise_float;\nconst mx_contrast = TSL.mx_contrast;\nconst mx_divide = TSL.mx_divide;\nconst mx_fractal_noise_float = TSL.mx_fractal_noise_float;\nconst mx_fractal_noise_vec2 = TSL.mx_fractal_noise_vec2;\nconst mx_fractal_noise_vec3 = TSL.mx_fractal_noise_vec3;\nconst mx_fractal_noise_vec4 = TSL.mx_fractal_noise_vec4;\nconst mx_frame = TSL.mx_frame;\nconst mx_heighttonormal = TSL.mx_heighttonormal;\nconst mx_hsvtorgb = TSL.mx_hsvtorgb;\nconst mx_ifequal = TSL.mx_ifequal;\nconst mx_ifgreater = TSL.mx_ifgreater;\nconst mx_ifgreatereq = TSL.mx_ifgreatereq;\nconst mx_invert = TSL.mx_invert;\nconst mx_modulo = TSL.mx_modulo;\nconst mx_multiply = TSL.mx_multiply;\nconst mx_noise_float = TSL.mx_noise_float;\nconst mx_noise_vec3 = TSL.mx_noise_vec3;\nconst mx_noise_vec4 = TSL.mx_noise_vec4;\nconst mx_place2d = TSL.mx_place2d;\nconst mx_power = TSL.mx_power;\nconst mx_ramp4 = TSL.mx_ramp4;\nconst mx_ramplr = TSL.mx_ramplr;\nconst mx_ramptb = TSL.mx_ramptb;\nconst mx_rgbtohsv = TSL.mx_rgbtohsv;\nconst mx_rotate2d = TSL.mx_rotate2d;\nconst mx_rotate3d = TSL.mx_rotate3d;\nconst mx_safepower = TSL.mx_safepower;\nconst mx_separate = TSL.mx_separate;\nconst mx_splitlr = TSL.mx_splitlr;\nconst mx_splittb = TSL.mx_splittb;\nconst mx_srgb_texture_to_lin_rec709 = TSL.mx_srgb_texture_to_lin_rec709;\nconst mx_subtract = TSL.mx_subtract;\nconst mx_timer = TSL.mx_timer;\nconst mx_transform_uv = TSL.mx_transform_uv;\nconst mx_unifiednoise2d = TSL.mx_unifiednoise2d;\nconst mx_unifiednoise3d = TSL.mx_unifiednoise3d;\nconst mx_worley_noise_float = TSL.mx_worley_noise_float;\nconst mx_worley_noise_vec2 = TSL.mx_worley_noise_vec2;\nconst mx_worley_noise_vec3 = TSL.mx_worley_noise_vec3;\nconst negate = TSL.negate;\nconst neutralToneMapping = TSL.neutralToneMapping;\nconst nodeArray = TSL.nodeArray;\nconst nodeImmutable = TSL.nodeImmutable;\nconst nodeObject = TSL.nodeObject;\nconst nodeObjectIntent = TSL.nodeObjectIntent;\nconst nodeObjects = TSL.nodeObjects;\nconst nodeProxy = TSL.nodeProxy;\nconst nodeProxyIntent = TSL.nodeProxyIntent;\nconst normalFlat = TSL.normalFlat;\nconst normalGeometry = TSL.normalGeometry;\nconst normalLocal = TSL.normalLocal;\nconst normalMap = TSL.normalMap;\nconst normalView = TSL.normalView;\nconst normalViewGeometry = TSL.normalViewGeometry;\nconst normalWorld = TSL.normalWorld;\nconst normalWorldGeometry = TSL.normalWorldGeometry;\nconst normalize = TSL.normalize;\nconst not = TSL.not;\nconst notEqual = TSL.notEqual;\nconst numWorkgroups = TSL.numWorkgroups;\nconst objectDirection = TSL.objectDirection;\nconst objectGroup = TSL.objectGroup;\nconst objectPosition = TSL.objectPosition;\nconst objectRadius = TSL.objectRadius;\nconst objectScale = TSL.objectScale;\nconst objectViewPosition = TSL.objectViewPosition;\nconst objectWorldMatrix = TSL.objectWorldMatrix;\nconst OnBeforeObjectUpdate = TSL.OnBeforeObjectUpdate;\nconst OnBeforeMaterialUpdate = TSL.OnBeforeMaterialUpdate;\nconst OnObjectUpdate = TSL.OnObjectUpdate;\nconst OnMaterialUpdate = TSL.OnMaterialUpdate;\nconst oneMinus = TSL.oneMinus;\nconst or = TSL.or;\nconst orthographicDepthToViewZ = TSL.orthographicDepthToViewZ;\nconst oscSawtooth = TSL.oscSawtooth;\nconst oscSine = TSL.oscSine;\nconst oscSquare = TSL.oscSquare;\nconst oscTriangle = TSL.oscTriangle;\nconst output = TSL.output;\nconst outputStruct = TSL.outputStruct;\nconst overloadingFn = TSL.overloadingFn;\nconst packHalf2x16 = TSL.packHalf2x16;\nconst packSnorm2x16 = TSL.packSnorm2x16;\nconst packUnorm2x16 = TSL.packUnorm2x16;\nconst parabola = TSL.parabola;\nconst parallaxDirection = TSL.parallaxDirection;\nconst parallaxUV = TSL.parallaxUV;\nconst parameter = TSL.parameter;\nconst pass = TSL.pass;\nconst passTexture = TSL.passTexture;\nconst pcurve = TSL.pcurve;\nconst perspectiveDepthToViewZ = TSL.perspectiveDepthToViewZ;\nconst pmremTexture = TSL.pmremTexture;\nconst pointShadow = TSL.pointShadow;\nconst pointUV = TSL.pointUV;\nconst pointWidth = TSL.pointWidth;\nconst positionGeometry = TSL.positionGeometry;\nconst positionLocal = TSL.positionLocal;\nconst positionPrevious = TSL.positionPrevious;\nconst positionView = TSL.positionView;\nconst positionViewDirection = TSL.positionViewDirection;\nconst positionWorld = TSL.positionWorld;\nconst positionWorldDirection = TSL.positionWorldDirection;\nconst posterize = TSL.posterize;\nconst pow = TSL.pow;\nconst pow2 = TSL.pow2;\nconst pow3 = TSL.pow3;\nconst pow4 = TSL.pow4;\nconst premultiplyAlpha = TSL.premultiplyAlpha;\nconst property = TSL.property;\nconst radians = TSL.radians;\nconst rand = TSL.rand;\nconst range = TSL.range;\nconst rangeFog = TSL.rangeFog;\nconst rangeFogFactor = TSL.rangeFogFactor;\nconst reciprocal = TSL.reciprocal;\nconst reference = TSL.reference;\nconst referenceBuffer = TSL.referenceBuffer;\nconst reflect = TSL.reflect;\nconst reflectVector = TSL.reflectVector;\nconst reflectView = TSL.reflectView;\nconst reflector = TSL.reflector;\nconst refract = TSL.refract;\nconst refractVector = TSL.refractVector;\nconst refractView = TSL.refractView;\nconst reinhardToneMapping = TSL.reinhardToneMapping;\nconst remap = TSL.remap;\nconst remapClamp = TSL.remapClamp;\nconst renderGroup = TSL.renderGroup;\nconst renderOutput = TSL.renderOutput;\nconst rendererReference = TSL.rendererReference;\nconst replaceDefaultUV = TSL.replaceDefaultUV;\nconst rotate = TSL.rotate;\nconst rotateUV = TSL.rotateUV;\nconst roughness = TSL.roughness;\nconst round = TSL.round;\nconst rtt = TSL.rtt;\nconst sRGBTransferEOTF = TSL.sRGBTransferEOTF;\nconst sRGBTransferOETF = TSL.sRGBTransferOETF;\nconst sample = TSL.sample;\nconst sampler = TSL.sampler;\nconst samplerComparison = TSL.samplerComparison;\nconst saturate = TSL.saturate;\nconst saturation = TSL.saturation;\nconst screen = TSL.screen;\nconst screenCoordinate = TSL.screenCoordinate;\nconst screenDPR = TSL.screenDPR;\nconst screenSize = TSL.screenSize;\nconst screenUV = TSL.screenUV;\nconst select = TSL.select;\nconst setCurrentStack = TSL.setCurrentStack;\nconst setName = TSL.setName;\nconst shaderStages = TSL.shaderStages;\nconst shadow = TSL.shadow;\nconst shadowPositionWorld = TSL.shadowPositionWorld;\nconst shapeCircle = TSL.shapeCircle;\nconst sharedUniformGroup = TSL.sharedUniformGroup;\nconst sheen = TSL.sheen;\nconst sheenRoughness = TSL.sheenRoughness;\nconst shiftLeft = TSL.shiftLeft;\nconst shiftRight = TSL.shiftRight;\nconst shininess = TSL.shininess;\nconst sign = TSL.sign;\nconst sin = TSL.sin;\nconst sinh = TSL.sinh;\nconst sinc = TSL.sinc;\nconst skinning = TSL.skinning;\nconst smoothstep = TSL.smoothstep;\nconst smoothstepElement = TSL.smoothstepElement;\nconst specularColor = TSL.specularColor;\nconst specularF90 = TSL.specularF90;\nconst spherizeUV = TSL.spherizeUV;\nconst split = TSL.split;\nconst spritesheetUV = TSL.spritesheetUV;\nconst sqrt = TSL.sqrt;\nconst stack = TSL.stack;\nconst step = TSL.step;\nconst stepElement = TSL.stepElement;\nconst storage = TSL.storage;\nconst storageBarrier = TSL.storageBarrier;\nconst storageTexture = TSL.storageTexture;\nconst string = TSL.string;\nconst struct = TSL.struct;\nconst sub = TSL.sub;\nconst subgroupAdd = TSL.subgroupAdd;\nconst subgroupAll = TSL.subgroupAll;\nconst subgroupAnd = TSL.subgroupAnd;\nconst subgroupAny = TSL.subgroupAny;\nconst subgroupBallot = TSL.subgroupBallot;\nconst subgroupBroadcast = TSL.subgroupBroadcast;\nconst subgroupBroadcastFirst = TSL.subgroupBroadcastFirst;\nconst subBuild = TSL.subBuild;\nconst subgroupElect = TSL.subgroupElect;\nconst subgroupExclusiveAdd = TSL.subgroupExclusiveAdd;\nconst subgroupExclusiveMul = TSL.subgroupExclusiveMul;\nconst subgroupInclusiveAdd = TSL.subgroupInclusiveAdd;\nconst subgroupInclusiveMul = TSL.subgroupInclusiveMul;\nconst subgroupIndex = TSL.subgroupIndex;\nconst subgroupMax = TSL.subgroupMax;\nconst subgroupMin = TSL.subgroupMin;\nconst subgroupMul = TSL.subgroupMul;\nconst subgroupOr = TSL.subgroupOr;\nconst subgroupShuffle = TSL.subgroupShuffle;\nconst subgroupShuffleDown = TSL.subgroupShuffleDown;\nconst subgroupShuffleUp = TSL.subgroupShuffleUp;\nconst subgroupShuffleXor = TSL.subgroupShuffleXor;\nconst subgroupSize = TSL.subgroupSize;\nconst subgroupXor = TSL.subgroupXor;\nconst tan = TSL.tan;\nconst tanh = TSL.tanh;\nconst tangentGeometry = TSL.tangentGeometry;\nconst tangentLocal = TSL.tangentLocal;\nconst tangentView = TSL.tangentView;\nconst tangentWorld = TSL.tangentWorld;\nconst texture = TSL.texture;\nconst texture3D = TSL.texture3D;\nconst textureBarrier = TSL.textureBarrier;\nconst textureBicubic = TSL.textureBicubic;\nconst textureBicubicLevel = TSL.textureBicubicLevel;\nconst textureCubeUV = TSL.textureCubeUV;\nconst textureLoad = TSL.textureLoad;\nconst textureSize = TSL.textureSize;\nconst textureLevel = TSL.textureLevel;\nconst textureStore = TSL.textureStore;\nconst thickness = TSL.thickness;\nconst time = TSL.time;\nconst toneMapping = TSL.toneMapping;\nconst toneMappingExposure = TSL.toneMappingExposure;\nconst toonOutlinePass = TSL.toonOutlinePass;\nconst transformDirection = TSL.transformDirection;\nconst transformNormal = TSL.transformNormal;\nconst transformNormalToView = TSL.transformNormalToView;\nconst transformedClearcoatNormalView = TSL.transformedClearcoatNormalView;\nconst transformedNormalView = TSL.transformedNormalView;\nconst transformedNormalWorld = TSL.transformedNormalWorld;\nconst transmission = TSL.transmission;\nconst transpose = TSL.transpose;\nconst triNoise3D = TSL.triNoise3D;\nconst triplanarTexture = TSL.triplanarTexture;\nconst triplanarTextures = TSL.triplanarTextures;\nconst trunc = TSL.trunc;\nconst uint = TSL.uint;\nconst uintBitsToFloat = TSL.uintBitsToFloat;\nconst uniform = TSL.uniform;\nconst uniformArray = TSL.uniformArray;\nconst uniformCubeTexture = TSL.uniformCubeTexture;\nconst uniformGroup = TSL.uniformGroup;\nconst uniformFlow = TSL.uniformFlow;\nconst uniformTexture = TSL.uniformTexture;\nconst unpackHalf2x16 = TSL.unpackHalf2x16;\nconst unpackSnorm2x16 = TSL.unpackSnorm2x16;\nconst unpackUnorm2x16 = TSL.unpackUnorm2x16;\nconst unpremultiplyAlpha = TSL.unpremultiplyAlpha;\nconst userData = TSL.userData;\nconst uv = TSL.uv;\nconst uvec2 = TSL.uvec2;\nconst uvec3 = TSL.uvec3;\nconst uvec4 = TSL.uvec4;\nconst varying = TSL.varying;\nconst varyingProperty = TSL.varyingProperty;\nconst vec2 = TSL.vec2;\nconst vec3 = TSL.vec3;\nconst vec4 = TSL.vec4;\nconst vectorComponents = TSL.vectorComponents;\nconst velocity = TSL.velocity;\nconst vertexColor = TSL.vertexColor;\nconst vertexIndex = TSL.vertexIndex;\nconst vertexStage = TSL.vertexStage;\nconst vibrance = TSL.vibrance;\nconst viewZToLogarithmicDepth = TSL.viewZToLogarithmicDepth;\nconst viewZToOrthographicDepth = TSL.viewZToOrthographicDepth;\nconst viewZToPerspectiveDepth = TSL.viewZToPerspectiveDepth;\nconst viewZToReversedOrthographicDepth = TSL.viewZToReversedOrthographicDepth;\nconst viewZToReversedPerspectiveDepth = TSL.viewZToReversedPerspectiveDepth;\nconst viewport = TSL.viewport;\nconst viewportCoordinate = TSL.viewportCoordinate;\nconst viewportDepthTexture = TSL.viewportDepthTexture;\nconst viewportLinearDepth = TSL.viewportLinearDepth;\nconst viewportMipTexture = TSL.viewportMipTexture;\nconst viewportOpaqueMipTexture = TSL.viewportOpaqueMipTexture;\nconst viewportResolution = TSL.viewportResolution;\nconst viewportSafeUV = TSL.viewportSafeUV;\nconst viewportSharedTexture = TSL.viewportSharedTexture;\nconst viewportSize = TSL.viewportSize;\nconst viewportTexture = TSL.viewportTexture;\nconst viewportUV = TSL.viewportUV;\nconst wgsl = TSL.wgsl;\nconst wgslFn = TSL.wgslFn;\nconst workgroupArray = TSL.workgroupArray;\nconst workgroupBarrier = TSL.workgroupBarrier;\nconst workgroupId = TSL.workgroupId;\nconst workingToColorSpace = TSL.workingToColorSpace;\nconst xor = TSL.xor;\n\n/*\n// Use this code to generate the export statements dynamically\n\nlet code = '';\n\nfor ( const key of Object.keys( THREE.TSL ) ) {\n\n\tcode += `export const ${ key } = TSL.${ key };\\n`;\n\n}\n\nlog( code );\n//*/\n\nexport { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PCFSoftShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, acosh, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, and, anisotropy, anisotropyB, anisotropyT, any, append, array, arrayBuffer, asin, asinh, assign, atan, atanh, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, blur, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, cosh, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDirection, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modInt, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_vec2, mx_worley_noise_vec3, negate, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, packHalf2x16, packSnorm2x16, packUnorm2x16, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, sinh, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, string, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, tanh, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureCubeUV, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackSnorm2x16, unpackUnorm2x16, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportResolution, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor };\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"three.tsl-Caqi2VRr.mjs","names":[],"sources":["../../../../node_modules/three/build/three.tsl.js"],"sourcesContent":["/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { TSL } from 'three/webgpu';\n\nconst BRDF_GGX = TSL.BRDF_GGX;\nconst BRDF_Lambert = TSL.BRDF_Lambert;\nconst BasicPointShadowFilter = TSL.BasicPointShadowFilter;\nconst BasicShadowFilter = TSL.BasicShadowFilter;\nconst Break = TSL.Break;\nconst Const = TSL.Const;\nconst Continue = TSL.Continue;\nconst DFGLUT = TSL.DFGLUT;\nconst D_GGX = TSL.D_GGX;\nconst Discard = TSL.Discard;\nconst EPSILON = TSL.EPSILON;\nconst F_Schlick = TSL.F_Schlick;\nconst Fn = TSL.Fn;\nconst INFINITY = TSL.INFINITY;\nconst If = TSL.If;\nconst Loop = TSL.Loop;\nconst NodeAccess = TSL.NodeAccess;\nconst NodeShaderStage = TSL.NodeShaderStage;\nconst NodeType = TSL.NodeType;\nconst NodeUpdateType = TSL.NodeUpdateType;\nconst PCFShadowFilter = TSL.PCFShadowFilter;\nconst PCFSoftShadowFilter = TSL.PCFSoftShadowFilter;\nconst PI = TSL.PI;\nconst PI2 = TSL.PI2;\nconst TWO_PI = TSL.TWO_PI;\nconst HALF_PI = TSL.HALF_PI;\nconst PointShadowFilter = TSL.PointShadowFilter;\nconst Return = TSL.Return;\nconst Schlick_to_F0 = TSL.Schlick_to_F0;\nconst ShaderNode = TSL.ShaderNode;\nconst Stack = TSL.Stack;\nconst Switch = TSL.Switch;\nconst TBNViewMatrix = TSL.TBNViewMatrix;\nconst VSMShadowFilter = TSL.VSMShadowFilter;\nconst V_GGX_SmithCorrelated = TSL.V_GGX_SmithCorrelated;\nconst Var = TSL.Var;\nconst VarIntent = TSL.VarIntent;\nconst abs = TSL.abs;\nconst acesFilmicToneMapping = TSL.acesFilmicToneMapping;\nconst acos = TSL.acos;\nconst acosh = TSL.acosh;\nconst add = TSL.add;\nconst addMethodChaining = TSL.addMethodChaining;\nconst addNodeElement = TSL.addNodeElement;\nconst agxToneMapping = TSL.agxToneMapping;\nconst all = TSL.all;\nconst alphaT = TSL.alphaT;\nconst and = TSL.and;\nconst anisotropy = TSL.anisotropy;\nconst anisotropyB = TSL.anisotropyB;\nconst anisotropyT = TSL.anisotropyT;\nconst any = TSL.any;\nconst append = TSL.append;\nconst array = TSL.array;\nconst arrayBuffer = TSL.arrayBuffer;\nconst asin = TSL.asin;\nconst asinh = TSL.asinh;\nconst assign = TSL.assign;\nconst atan = TSL.atan;\nconst atanh = TSL.atanh;\nconst atomicAdd = TSL.atomicAdd;\nconst atomicAnd = TSL.atomicAnd;\nconst atomicFunc = TSL.atomicFunc;\nconst atomicLoad = TSL.atomicLoad;\nconst atomicMax = TSL.atomicMax;\nconst atomicMin = TSL.atomicMin;\nconst atomicOr = TSL.atomicOr;\nconst atomicStore = TSL.atomicStore;\nconst atomicSub = TSL.atomicSub;\nconst atomicXor = TSL.atomicXor;\nconst attenuationColor = TSL.attenuationColor;\nconst attenuationDistance = TSL.attenuationDistance;\nconst attribute = TSL.attribute;\nconst attributeArray = TSL.attributeArray;\nconst backgroundBlurriness = TSL.backgroundBlurriness;\nconst backgroundIntensity = TSL.backgroundIntensity;\nconst backgroundRotation = TSL.backgroundRotation;\nconst batch = TSL.batch;\nconst bentNormalView = TSL.bentNormalView;\nconst billboarding = TSL.billboarding;\nconst bitAnd = TSL.bitAnd;\nconst bitNot = TSL.bitNot;\nconst bitOr = TSL.bitOr;\nconst bitXor = TSL.bitXor;\nconst bitangentGeometry = TSL.bitangentGeometry;\nconst bitangentLocal = TSL.bitangentLocal;\nconst bitangentView = TSL.bitangentView;\nconst bitangentWorld = TSL.bitangentWorld;\nconst bitcast = TSL.bitcast;\nconst blendBurn = TSL.blendBurn;\nconst blendColor = TSL.blendColor;\nconst blendDodge = TSL.blendDodge;\nconst blendOverlay = TSL.blendOverlay;\nconst blendScreen = TSL.blendScreen;\nconst blur = TSL.blur;\nconst bool = TSL.bool;\nconst buffer = TSL.buffer;\nconst bufferAttribute = TSL.bufferAttribute;\nconst bumpMap = TSL.bumpMap;\nconst builtin = TSL.builtin;\nconst builtinAOContext = TSL.builtinAOContext;\nconst builtinShadowContext = TSL.builtinShadowContext;\nconst bvec2 = TSL.bvec2;\nconst bvec3 = TSL.bvec3;\nconst bvec4 = TSL.bvec4;\nconst bypass = TSL.bypass;\nconst cache = TSL.cache;\nconst call = TSL.call;\nconst cameraFar = TSL.cameraFar;\nconst cameraIndex = TSL.cameraIndex;\nconst cameraNear = TSL.cameraNear;\nconst cameraNormalMatrix = TSL.cameraNormalMatrix;\nconst cameraPosition = TSL.cameraPosition;\nconst cameraProjectionMatrix = TSL.cameraProjectionMatrix;\nconst cameraProjectionMatrixInverse = TSL.cameraProjectionMatrixInverse;\nconst cameraViewMatrix = TSL.cameraViewMatrix;\nconst cameraViewport = TSL.cameraViewport;\nconst cameraWorldMatrix = TSL.cameraWorldMatrix;\nconst cbrt = TSL.cbrt;\nconst cdl = TSL.cdl;\nconst ceil = TSL.ceil;\nconst checker = TSL.checker;\nconst cineonToneMapping = TSL.cineonToneMapping;\nconst clamp = TSL.clamp;\nconst clearcoat = TSL.clearcoat;\nconst clearcoatNormalView = TSL.clearcoatNormalView;\nconst clearcoatRoughness = TSL.clearcoatRoughness;\nconst clipSpace = TSL.clipSpace;\nconst code = TSL.code;\nconst color = TSL.color;\nconst colorSpaceToWorking = TSL.colorSpaceToWorking;\nconst colorToDirection = TSL.colorToDirection;\nconst compute = TSL.compute;\nconst computeKernel = TSL.computeKernel;\nconst computeSkinning = TSL.computeSkinning;\nconst context = TSL.context;\nconst convert = TSL.convert;\nconst convertColorSpace = TSL.convertColorSpace;\nconst convertToTexture = TSL.convertToTexture;\nconst countLeadingZeros = TSL.countLeadingZeros;\nconst countOneBits = TSL.countOneBits;\nconst countTrailingZeros = TSL.countTrailingZeros;\nconst cos = TSL.cos;\nconst cosh = TSL.cosh;\nconst cross = TSL.cross;\nconst cubeTexture = TSL.cubeTexture;\nconst cubeTextureBase = TSL.cubeTextureBase;\nconst dFdx = TSL.dFdx;\nconst dFdy = TSL.dFdy;\nconst dashSize = TSL.dashSize;\nconst debug = TSL.debug;\nconst decrement = TSL.decrement;\nconst decrementBefore = TSL.decrementBefore;\nconst defaultBuildStages = TSL.defaultBuildStages;\nconst defaultShaderStages = TSL.defaultShaderStages;\nconst defined = TSL.defined;\nconst degrees = TSL.degrees;\nconst deltaTime = TSL.deltaTime;\nconst densityFog = TSL.densityFog;\nconst densityFogFactor = TSL.densityFogFactor;\nconst depth = TSL.depth;\nconst depthPass = TSL.depthPass;\nconst determinant = TSL.determinant;\nconst difference = TSL.difference;\nconst diffuseColor = TSL.diffuseColor;\nconst directPointLight = TSL.directPointLight;\nconst directionToColor = TSL.directionToColor;\nconst directionToFaceDirection = TSL.directionToFaceDirection;\nconst dispersion = TSL.dispersion;\nconst distance = TSL.distance;\nconst div = TSL.div;\nconst dot = TSL.dot;\nconst drawIndex = TSL.drawIndex;\nconst dynamicBufferAttribute = TSL.dynamicBufferAttribute;\nconst element = TSL.element;\nconst emissive = TSL.emissive;\nconst equal = TSL.equal;\nconst equirectUV = TSL.equirectUV;\nconst exp = TSL.exp;\nconst exp2 = TSL.exp2;\nconst exponentialHeightFogFactor = TSL.exponentialHeightFogFactor;\nconst expression = TSL.expression;\nconst faceDirection = TSL.faceDirection;\nconst faceForward = TSL.faceForward;\nconst faceforward = TSL.faceforward;\nconst float = TSL.float;\nconst floatBitsToInt = TSL.floatBitsToInt;\nconst floatBitsToUint = TSL.floatBitsToUint;\nconst floor = TSL.floor;\nconst fog = TSL.fog;\nconst fract = TSL.fract;\nconst frameGroup = TSL.frameGroup;\nconst frameId = TSL.frameId;\nconst frontFacing = TSL.frontFacing;\nconst fwidth = TSL.fwidth;\nconst gain = TSL.gain;\nconst gapSize = TSL.gapSize;\nconst getConstNodeType = TSL.getConstNodeType;\nconst getCurrentStack = TSL.getCurrentStack;\nconst getDirection = TSL.getDirection;\nconst getDistanceAttenuation = TSL.getDistanceAttenuation;\nconst getGeometryRoughness = TSL.getGeometryRoughness;\nconst getNormalFromDepth = TSL.getNormalFromDepth;\nconst interleavedGradientNoise = TSL.interleavedGradientNoise;\nconst vogelDiskSample = TSL.vogelDiskSample;\nconst getParallaxCorrectNormal = TSL.getParallaxCorrectNormal;\nconst getRoughness = TSL.getRoughness;\nconst getScreenPosition = TSL.getScreenPosition;\nconst getShIrradianceAt = TSL.getShIrradianceAt;\nconst getShadowMaterial = TSL.getShadowMaterial;\nconst getShadowRenderObjectFunction = TSL.getShadowRenderObjectFunction;\nconst getTextureIndex = TSL.getTextureIndex;\nconst getViewPosition = TSL.getViewPosition;\nconst globalId = TSL.globalId;\nconst glsl = TSL.glsl;\nconst glslFn = TSL.glslFn;\nconst grayscale = TSL.grayscale;\nconst greaterThan = TSL.greaterThan;\nconst greaterThanEqual = TSL.greaterThanEqual;\nconst hash = TSL.hash;\nconst highpModelNormalViewMatrix = TSL.highpModelNormalViewMatrix;\nconst highpModelViewMatrix = TSL.highpModelViewMatrix;\nconst hue = TSL.hue;\nconst increment = TSL.increment;\nconst incrementBefore = TSL.incrementBefore;\nconst instance = TSL.instance;\nconst instanceIndex = TSL.instanceIndex;\nconst instancedArray = TSL.instancedArray;\nconst instancedBufferAttribute = TSL.instancedBufferAttribute;\nconst instancedDynamicBufferAttribute = TSL.instancedDynamicBufferAttribute;\nconst instancedMesh = TSL.instancedMesh;\nconst int = TSL.int;\nconst intBitsToFloat = TSL.intBitsToFloat;\nconst inverse = TSL.inverse;\nconst inverseSqrt = TSL.inverseSqrt;\nconst inversesqrt = TSL.inversesqrt;\nconst invocationLocalIndex = TSL.invocationLocalIndex;\nconst invocationSubgroupIndex = TSL.invocationSubgroupIndex;\nconst ior = TSL.ior;\nconst iridescence = TSL.iridescence;\nconst iridescenceIOR = TSL.iridescenceIOR;\nconst iridescenceThickness = TSL.iridescenceThickness;\nconst ivec2 = TSL.ivec2;\nconst ivec3 = TSL.ivec3;\nconst ivec4 = TSL.ivec4;\nconst js = TSL.js;\nconst label = TSL.label;\nconst length = TSL.length;\nconst lengthSq = TSL.lengthSq;\nconst lessThan = TSL.lessThan;\nconst lessThanEqual = TSL.lessThanEqual;\nconst lightPosition = TSL.lightPosition;\nconst lightProjectionUV = TSL.lightProjectionUV;\nconst lightShadowMatrix = TSL.lightShadowMatrix;\nconst lightTargetDirection = TSL.lightTargetDirection;\nconst lightTargetPosition = TSL.lightTargetPosition;\nconst lightViewPosition = TSL.lightViewPosition;\nconst lightingContext = TSL.lightingContext;\nconst lights = TSL.lights;\nconst linearDepth = TSL.linearDepth;\nconst linearToneMapping = TSL.linearToneMapping;\nconst localId = TSL.localId;\nconst log = TSL.log;\nconst log2 = TSL.log2;\nconst logarithmicDepthToViewZ = TSL.logarithmicDepthToViewZ;\nconst luminance = TSL.luminance;\nconst mat2 = TSL.mat2;\nconst mat3 = TSL.mat3;\nconst mat4 = TSL.mat4;\nconst matcapUV = TSL.matcapUV;\nconst materialAO = TSL.materialAO;\nconst materialAlphaTest = TSL.materialAlphaTest;\nconst materialAnisotropy = TSL.materialAnisotropy;\nconst materialAnisotropyVector = TSL.materialAnisotropyVector;\nconst materialAttenuationColor = TSL.materialAttenuationColor;\nconst materialAttenuationDistance = TSL.materialAttenuationDistance;\nconst materialClearcoat = TSL.materialClearcoat;\nconst materialClearcoatNormal = TSL.materialClearcoatNormal;\nconst materialClearcoatRoughness = TSL.materialClearcoatRoughness;\nconst materialColor = TSL.materialColor;\nconst materialDispersion = TSL.materialDispersion;\nconst materialEmissive = TSL.materialEmissive;\nconst materialEnvIntensity = TSL.materialEnvIntensity;\nconst materialEnvRotation = TSL.materialEnvRotation;\nconst materialIOR = TSL.materialIOR;\nconst materialIridescence = TSL.materialIridescence;\nconst materialIridescenceIOR = TSL.materialIridescenceIOR;\nconst materialIridescenceThickness = TSL.materialIridescenceThickness;\nconst materialLightMap = TSL.materialLightMap;\nconst materialLineDashOffset = TSL.materialLineDashOffset;\nconst materialLineDashSize = TSL.materialLineDashSize;\nconst materialLineGapSize = TSL.materialLineGapSize;\nconst materialLineScale = TSL.materialLineScale;\nconst materialLineWidth = TSL.materialLineWidth;\nconst materialMetalness = TSL.materialMetalness;\nconst materialNormal = TSL.materialNormal;\nconst materialOpacity = TSL.materialOpacity;\nconst materialPointSize = TSL.materialPointSize;\nconst materialReference = TSL.materialReference;\nconst materialReflectivity = TSL.materialReflectivity;\nconst materialRefractionRatio = TSL.materialRefractionRatio;\nconst materialRotation = TSL.materialRotation;\nconst materialRoughness = TSL.materialRoughness;\nconst materialSheen = TSL.materialSheen;\nconst materialSheenRoughness = TSL.materialSheenRoughness;\nconst materialShininess = TSL.materialShininess;\nconst materialSpecular = TSL.materialSpecular;\nconst materialSpecularColor = TSL.materialSpecularColor;\nconst materialSpecularIntensity = TSL.materialSpecularIntensity;\nconst materialSpecularStrength = TSL.materialSpecularStrength;\nconst materialThickness = TSL.materialThickness;\nconst materialTransmission = TSL.materialTransmission;\nconst max = TSL.max;\nconst maxMipLevel = TSL.maxMipLevel;\nconst mediumpModelViewMatrix = TSL.mediumpModelViewMatrix;\nconst metalness = TSL.metalness;\nconst min = TSL.min;\nconst mix = TSL.mix;\nconst mixElement = TSL.mixElement;\nconst mod = TSL.mod;\nconst modInt = TSL.modInt;\nconst modelDirection = TSL.modelDirection;\nconst modelNormalMatrix = TSL.modelNormalMatrix;\nconst modelPosition = TSL.modelPosition;\nconst modelRadius = TSL.modelRadius;\nconst modelScale = TSL.modelScale;\nconst modelViewMatrix = TSL.modelViewMatrix;\nconst modelViewPosition = TSL.modelViewPosition;\nconst modelViewProjection = TSL.modelViewProjection;\nconst modelWorldMatrix = TSL.modelWorldMatrix;\nconst modelWorldMatrixInverse = TSL.modelWorldMatrixInverse;\nconst morphReference = TSL.morphReference;\nconst mrt = TSL.mrt;\nconst mul = TSL.mul;\nconst mx_aastep = TSL.mx_aastep;\nconst mx_add = TSL.mx_add;\nconst mx_atan2 = TSL.mx_atan2;\nconst mx_cell_noise_float = TSL.mx_cell_noise_float;\nconst mx_contrast = TSL.mx_contrast;\nconst mx_divide = TSL.mx_divide;\nconst mx_fractal_noise_float = TSL.mx_fractal_noise_float;\nconst mx_fractal_noise_vec2 = TSL.mx_fractal_noise_vec2;\nconst mx_fractal_noise_vec3 = TSL.mx_fractal_noise_vec3;\nconst mx_fractal_noise_vec4 = TSL.mx_fractal_noise_vec4;\nconst mx_frame = TSL.mx_frame;\nconst mx_heighttonormal = TSL.mx_heighttonormal;\nconst mx_hsvtorgb = TSL.mx_hsvtorgb;\nconst mx_ifequal = TSL.mx_ifequal;\nconst mx_ifgreater = TSL.mx_ifgreater;\nconst mx_ifgreatereq = TSL.mx_ifgreatereq;\nconst mx_invert = TSL.mx_invert;\nconst mx_modulo = TSL.mx_modulo;\nconst mx_multiply = TSL.mx_multiply;\nconst mx_noise_float = TSL.mx_noise_float;\nconst mx_noise_vec3 = TSL.mx_noise_vec3;\nconst mx_noise_vec4 = TSL.mx_noise_vec4;\nconst mx_place2d = TSL.mx_place2d;\nconst mx_power = TSL.mx_power;\nconst mx_ramp4 = TSL.mx_ramp4;\nconst mx_ramplr = TSL.mx_ramplr;\nconst mx_ramptb = TSL.mx_ramptb;\nconst mx_rgbtohsv = TSL.mx_rgbtohsv;\nconst mx_rotate2d = TSL.mx_rotate2d;\nconst mx_rotate3d = TSL.mx_rotate3d;\nconst mx_safepower = TSL.mx_safepower;\nconst mx_separate = TSL.mx_separate;\nconst mx_splitlr = TSL.mx_splitlr;\nconst mx_splittb = TSL.mx_splittb;\nconst mx_srgb_texture_to_lin_rec709 = TSL.mx_srgb_texture_to_lin_rec709;\nconst mx_subtract = TSL.mx_subtract;\nconst mx_timer = TSL.mx_timer;\nconst mx_transform_uv = TSL.mx_transform_uv;\nconst mx_unifiednoise2d = TSL.mx_unifiednoise2d;\nconst mx_unifiednoise3d = TSL.mx_unifiednoise3d;\nconst mx_worley_noise_float = TSL.mx_worley_noise_float;\nconst mx_worley_noise_vec2 = TSL.mx_worley_noise_vec2;\nconst mx_worley_noise_vec3 = TSL.mx_worley_noise_vec3;\nconst negate = TSL.negate;\nconst neutralToneMapping = TSL.neutralToneMapping;\nconst nodeArray = TSL.nodeArray;\nconst nodeImmutable = TSL.nodeImmutable;\nconst nodeObject = TSL.nodeObject;\nconst nodeObjectIntent = TSL.nodeObjectIntent;\nconst nodeObjects = TSL.nodeObjects;\nconst nodeProxy = TSL.nodeProxy;\nconst nodeProxyIntent = TSL.nodeProxyIntent;\nconst normalFlat = TSL.normalFlat;\nconst normalGeometry = TSL.normalGeometry;\nconst normalLocal = TSL.normalLocal;\nconst normalMap = TSL.normalMap;\nconst normalView = TSL.normalView;\nconst normalViewGeometry = TSL.normalViewGeometry;\nconst normalWorld = TSL.normalWorld;\nconst normalWorldGeometry = TSL.normalWorldGeometry;\nconst normalize = TSL.normalize;\nconst not = TSL.not;\nconst notEqual = TSL.notEqual;\nconst numWorkgroups = TSL.numWorkgroups;\nconst objectDirection = TSL.objectDirection;\nconst objectGroup = TSL.objectGroup;\nconst objectPosition = TSL.objectPosition;\nconst objectRadius = TSL.objectRadius;\nconst objectScale = TSL.objectScale;\nconst objectViewPosition = TSL.objectViewPosition;\nconst objectWorldMatrix = TSL.objectWorldMatrix;\nconst OnBeforeObjectUpdate = TSL.OnBeforeObjectUpdate;\nconst OnBeforeMaterialUpdate = TSL.OnBeforeMaterialUpdate;\nconst OnObjectUpdate = TSL.OnObjectUpdate;\nconst OnMaterialUpdate = TSL.OnMaterialUpdate;\nconst oneMinus = TSL.oneMinus;\nconst or = TSL.or;\nconst orthographicDepthToViewZ = TSL.orthographicDepthToViewZ;\nconst oscSawtooth = TSL.oscSawtooth;\nconst oscSine = TSL.oscSine;\nconst oscSquare = TSL.oscSquare;\nconst oscTriangle = TSL.oscTriangle;\nconst output = TSL.output;\nconst outputStruct = TSL.outputStruct;\nconst overloadingFn = TSL.overloadingFn;\nconst packHalf2x16 = TSL.packHalf2x16;\nconst packSnorm2x16 = TSL.packSnorm2x16;\nconst packUnorm2x16 = TSL.packUnorm2x16;\nconst parabola = TSL.parabola;\nconst parallaxDirection = TSL.parallaxDirection;\nconst parallaxUV = TSL.parallaxUV;\nconst parameter = TSL.parameter;\nconst pass = TSL.pass;\nconst passTexture = TSL.passTexture;\nconst pcurve = TSL.pcurve;\nconst perspectiveDepthToViewZ = TSL.perspectiveDepthToViewZ;\nconst pmremTexture = TSL.pmremTexture;\nconst pointShadow = TSL.pointShadow;\nconst pointUV = TSL.pointUV;\nconst pointWidth = TSL.pointWidth;\nconst positionGeometry = TSL.positionGeometry;\nconst positionLocal = TSL.positionLocal;\nconst positionPrevious = TSL.positionPrevious;\nconst positionView = TSL.positionView;\nconst positionViewDirection = TSL.positionViewDirection;\nconst positionWorld = TSL.positionWorld;\nconst positionWorldDirection = TSL.positionWorldDirection;\nconst posterize = TSL.posterize;\nconst pow = TSL.pow;\nconst pow2 = TSL.pow2;\nconst pow3 = TSL.pow3;\nconst pow4 = TSL.pow4;\nconst premultiplyAlpha = TSL.premultiplyAlpha;\nconst property = TSL.property;\nconst radians = TSL.radians;\nconst rand = TSL.rand;\nconst range = TSL.range;\nconst rangeFog = TSL.rangeFog;\nconst rangeFogFactor = TSL.rangeFogFactor;\nconst reciprocal = TSL.reciprocal;\nconst reference = TSL.reference;\nconst referenceBuffer = TSL.referenceBuffer;\nconst reflect = TSL.reflect;\nconst reflectVector = TSL.reflectVector;\nconst reflectView = TSL.reflectView;\nconst reflector = TSL.reflector;\nconst refract = TSL.refract;\nconst refractVector = TSL.refractVector;\nconst refractView = TSL.refractView;\nconst reinhardToneMapping = TSL.reinhardToneMapping;\nconst remap = TSL.remap;\nconst remapClamp = TSL.remapClamp;\nconst renderGroup = TSL.renderGroup;\nconst renderOutput = TSL.renderOutput;\nconst rendererReference = TSL.rendererReference;\nconst replaceDefaultUV = TSL.replaceDefaultUV;\nconst rotate = TSL.rotate;\nconst rotateUV = TSL.rotateUV;\nconst roughness = TSL.roughness;\nconst round = TSL.round;\nconst rtt = TSL.rtt;\nconst sRGBTransferEOTF = TSL.sRGBTransferEOTF;\nconst sRGBTransferOETF = TSL.sRGBTransferOETF;\nconst sample = TSL.sample;\nconst sampler = TSL.sampler;\nconst samplerComparison = TSL.samplerComparison;\nconst saturate = TSL.saturate;\nconst saturation = TSL.saturation;\nconst screen = TSL.screen;\nconst screenCoordinate = TSL.screenCoordinate;\nconst screenDPR = TSL.screenDPR;\nconst screenSize = TSL.screenSize;\nconst screenUV = TSL.screenUV;\nconst select = TSL.select;\nconst setCurrentStack = TSL.setCurrentStack;\nconst setName = TSL.setName;\nconst shaderStages = TSL.shaderStages;\nconst shadow = TSL.shadow;\nconst shadowPositionWorld = TSL.shadowPositionWorld;\nconst shapeCircle = TSL.shapeCircle;\nconst sharedUniformGroup = TSL.sharedUniformGroup;\nconst sheen = TSL.sheen;\nconst sheenRoughness = TSL.sheenRoughness;\nconst shiftLeft = TSL.shiftLeft;\nconst shiftRight = TSL.shiftRight;\nconst shininess = TSL.shininess;\nconst sign = TSL.sign;\nconst sin = TSL.sin;\nconst sinh = TSL.sinh;\nconst sinc = TSL.sinc;\nconst skinning = TSL.skinning;\nconst smoothstep = TSL.smoothstep;\nconst smoothstepElement = TSL.smoothstepElement;\nconst specularColor = TSL.specularColor;\nconst specularF90 = TSL.specularF90;\nconst spherizeUV = TSL.spherizeUV;\nconst split = TSL.split;\nconst spritesheetUV = TSL.spritesheetUV;\nconst sqrt = TSL.sqrt;\nconst stack = TSL.stack;\nconst step = TSL.step;\nconst stepElement = TSL.stepElement;\nconst storage = TSL.storage;\nconst storageBarrier = TSL.storageBarrier;\nconst storageTexture = TSL.storageTexture;\nconst string = TSL.string;\nconst struct = TSL.struct;\nconst sub = TSL.sub;\nconst subgroupAdd = TSL.subgroupAdd;\nconst subgroupAll = TSL.subgroupAll;\nconst subgroupAnd = TSL.subgroupAnd;\nconst subgroupAny = TSL.subgroupAny;\nconst subgroupBallot = TSL.subgroupBallot;\nconst subgroupBroadcast = TSL.subgroupBroadcast;\nconst subgroupBroadcastFirst = TSL.subgroupBroadcastFirst;\nconst subBuild = TSL.subBuild;\nconst subgroupElect = TSL.subgroupElect;\nconst subgroupExclusiveAdd = TSL.subgroupExclusiveAdd;\nconst subgroupExclusiveMul = TSL.subgroupExclusiveMul;\nconst subgroupInclusiveAdd = TSL.subgroupInclusiveAdd;\nconst subgroupInclusiveMul = TSL.subgroupInclusiveMul;\nconst subgroupIndex = TSL.subgroupIndex;\nconst subgroupMax = TSL.subgroupMax;\nconst subgroupMin = TSL.subgroupMin;\nconst subgroupMul = TSL.subgroupMul;\nconst subgroupOr = TSL.subgroupOr;\nconst subgroupShuffle = TSL.subgroupShuffle;\nconst subgroupShuffleDown = TSL.subgroupShuffleDown;\nconst subgroupShuffleUp = TSL.subgroupShuffleUp;\nconst subgroupShuffleXor = TSL.subgroupShuffleXor;\nconst subgroupSize = TSL.subgroupSize;\nconst subgroupXor = TSL.subgroupXor;\nconst tan = TSL.tan;\nconst tanh = TSL.tanh;\nconst tangentGeometry = TSL.tangentGeometry;\nconst tangentLocal = TSL.tangentLocal;\nconst tangentView = TSL.tangentView;\nconst tangentWorld = TSL.tangentWorld;\nconst texture = TSL.texture;\nconst texture3D = TSL.texture3D;\nconst textureBarrier = TSL.textureBarrier;\nconst textureBicubic = TSL.textureBicubic;\nconst textureBicubicLevel = TSL.textureBicubicLevel;\nconst textureCubeUV = TSL.textureCubeUV;\nconst textureLoad = TSL.textureLoad;\nconst textureSize = TSL.textureSize;\nconst textureLevel = TSL.textureLevel;\nconst textureStore = TSL.textureStore;\nconst thickness = TSL.thickness;\nconst time = TSL.time;\nconst toneMapping = TSL.toneMapping;\nconst toneMappingExposure = TSL.toneMappingExposure;\nconst toonOutlinePass = TSL.toonOutlinePass;\nconst transformDirection = TSL.transformDirection;\nconst transformNormal = TSL.transformNormal;\nconst transformNormalToView = TSL.transformNormalToView;\nconst transformedClearcoatNormalView = TSL.transformedClearcoatNormalView;\nconst transformedNormalView = TSL.transformedNormalView;\nconst transformedNormalWorld = TSL.transformedNormalWorld;\nconst transmission = TSL.transmission;\nconst transpose = TSL.transpose;\nconst triNoise3D = TSL.triNoise3D;\nconst triplanarTexture = TSL.triplanarTexture;\nconst triplanarTextures = TSL.triplanarTextures;\nconst trunc = TSL.trunc;\nconst uint = TSL.uint;\nconst uintBitsToFloat = TSL.uintBitsToFloat;\nconst uniform = TSL.uniform;\nconst uniformArray = TSL.uniformArray;\nconst uniformCubeTexture = TSL.uniformCubeTexture;\nconst uniformGroup = TSL.uniformGroup;\nconst uniformFlow = TSL.uniformFlow;\nconst uniformTexture = TSL.uniformTexture;\nconst unpackHalf2x16 = TSL.unpackHalf2x16;\nconst unpackSnorm2x16 = TSL.unpackSnorm2x16;\nconst unpackUnorm2x16 = TSL.unpackUnorm2x16;\nconst unpremultiplyAlpha = TSL.unpremultiplyAlpha;\nconst userData = TSL.userData;\nconst uv = TSL.uv;\nconst uvec2 = TSL.uvec2;\nconst uvec3 = TSL.uvec3;\nconst uvec4 = TSL.uvec4;\nconst varying = TSL.varying;\nconst varyingProperty = TSL.varyingProperty;\nconst vec2 = TSL.vec2;\nconst vec3 = TSL.vec3;\nconst vec4 = TSL.vec4;\nconst vectorComponents = TSL.vectorComponents;\nconst velocity = TSL.velocity;\nconst vertexColor = TSL.vertexColor;\nconst vertexIndex = TSL.vertexIndex;\nconst vertexStage = TSL.vertexStage;\nconst vibrance = TSL.vibrance;\nconst viewZToLogarithmicDepth = TSL.viewZToLogarithmicDepth;\nconst viewZToOrthographicDepth = TSL.viewZToOrthographicDepth;\nconst viewZToPerspectiveDepth = TSL.viewZToPerspectiveDepth;\nconst viewZToReversedOrthographicDepth = TSL.viewZToReversedOrthographicDepth;\nconst viewZToReversedPerspectiveDepth = TSL.viewZToReversedPerspectiveDepth;\nconst viewport = TSL.viewport;\nconst viewportCoordinate = TSL.viewportCoordinate;\nconst viewportDepthTexture = TSL.viewportDepthTexture;\nconst viewportLinearDepth = TSL.viewportLinearDepth;\nconst viewportMipTexture = TSL.viewportMipTexture;\nconst viewportOpaqueMipTexture = TSL.viewportOpaqueMipTexture;\nconst viewportResolution = TSL.viewportResolution;\nconst viewportSafeUV = TSL.viewportSafeUV;\nconst viewportSharedTexture = TSL.viewportSharedTexture;\nconst viewportSize = TSL.viewportSize;\nconst viewportTexture = TSL.viewportTexture;\nconst viewportUV = TSL.viewportUV;\nconst wgsl = TSL.wgsl;\nconst wgslFn = TSL.wgslFn;\nconst workgroupArray = TSL.workgroupArray;\nconst workgroupBarrier = TSL.workgroupBarrier;\nconst workgroupId = TSL.workgroupId;\nconst workingToColorSpace = TSL.workingToColorSpace;\nconst xor = TSL.xor;\n\n/*\n// Use this code to generate the export statements dynamically\n\nlet code = '';\n\nfor ( const key of Object.keys( THREE.TSL ) ) {\n\n\tcode += `export const ${ key } = TSL.${ key };\\n`;\n\n}\n\nlog( code );\n//*/\n\nexport { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PCFSoftShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, acosh, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, and, anisotropy, anisotropyB, anisotropyT, any, append, array, arrayBuffer, asin, asinh, assign, atan, atanh, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, blur, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, cosh, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDirection, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modInt, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_vec2, mx_worley_noise_vec3, negate, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, packHalf2x16, packSnorm2x16, packUnorm2x16, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, sinh, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, string, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, tanh, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureCubeUV, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackSnorm2x16, unpackUnorm2x16, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportResolution, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor };\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -18797,4 +18797,4 @@ var SD = new Map([[Gt, ["float16"]]]), CD = new Map([
18797
18797
  //#endregion
18798
18798
  export { sf as $, I_ as $n, e_ as $t, tr as A, Nw as An, qn as At, $l as B, a_ as Bn, Gn as Bt, Ky as C, Wc as Cn, qp as Ct, ts as D, hg as Dn, Ml as Dt, Zs as E, Yx as En, tg as Et, jw as F, qv as Fn, Ec as Ft, Yw as G, oy as Gn, ew as Gt, Zy as H, Z as Hn, QC as Ht, Gh as I, af as In, Ow as It, Pw as J, Ns as Jn, da as Jt, Mw as K, Oc as Kn, ud as Kt, Rv as L, Kv as Ln, kw as Lt, Tp as M, n_ as Mn, Dw as Mt, wu as N, On as Nn, rw as Nt, ur as O, mf as On, Tf as Ot, pc as P, nf as Pn, tw as Pt, gc as Q, ra as Qn, M_ as Qt, sc as R, ny as Rn, _p as Rt, ep as S, Iv as Sn, Cp as St, ub as T, Sx as Tn, Yh as Tt, U_ as U, GC as Un, T as Ut, ca as V, hs as Vn, Kn as Vt, tE as W, nr as Wn, $C as Wt, cr as X, Rc as Xn, Oh as Xt, Ws as Y, Py as Yn, c_ as Yt, hc as Z, Qi as Zn, Bh as Zt, Fc as _, dc as _n, Zn as _r, wc as _t, ia as a, Xv as an, Vf as ar, sT as at, rc as b, Nx as bn, Gp as bt, yc as c, Lw as cn, Nf as cr, Df as ct, Np as d, Ov as dn, jD as dr, xp as dt, Ay as en, uy as er, lf as et, df as f, cb as fn, FD as fr, _f as ft, Rs as g, xv as gn, Xn as gr, K as gt, u_ as h, ku as hn, Jn as hr, Mu as ht, er as i, cS as in, cp as ir, Fw as it, Dp as j, cg as jn, ZC as jt, rs as k, ar as kn, E as kt, _b as l, B as ln, wE as lr, bx as lt, C_ as m, ks as mn, Yn as mr, X as mt, Aw as n, Hm as nn, _s as nr, ec as nt, oa as o, dg as on, zf as or, kf as ot, g_ as p, Vw as pn, Cb as pr, m_ as pt, MD as q, Sc as qn, Tl as qt, uS as r, pS as rn, py as rr, rr as rt, Tb as s, ND as sn, Ty as sr, Pp as st, Of as t, Up as tn, us as tr, jf as tt, Mp as u, Ev as un, yE as ur, yp as ut, Bc as v, ID as vn, dr as vt, ws as w, or as wn, Zh as wt, xT as x, ag as xn, ig as xt, md as y, js as yn, Lp as yt, sr as z, o_ as zn, Tn as zt };
18799
18799
 
18800
- //# sourceMappingURL=three.webgpu-CkP2nkXM.mjs.map
18800
+ //# sourceMappingURL=three.webgpu-CT4fuV2X.mjs.map