@zephyr3d/editor 0.3.8 → 0.3.9

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 (137) hide show
  1. package/dist/assets/{index-BZ1L8ggE.js → index-CO6yA4Rj.js} +313 -11
  2. package/dist/assistant/zephyr-types-index.json +13834 -11679
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgpu.js +1 -1
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_device.js +2 -2
  7. package/dist/modules/zephyr3d_device.js.map +1 -1
  8. package/dist/modules/zephyr3d_scene.js +2325 -515
  9. package/dist/modules/zephyr3d_scene.js.map +1 -1
  10. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +1 -1
  11. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  12. package/dist/vendor/zephyr3d/device/dist/device.js +2 -2
  13. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  14. package/dist/vendor/zephyr3d/scene/dist/app/engine.js +3 -1
  15. package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
  16. package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js +1 -0
  17. package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js.map +1 -1
  18. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +87 -0
  19. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  20. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +158 -4
  21. package/dist/vendor/zephyr3d/scene/dist/index.js +3 -0
  22. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  23. package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js +8 -1
  24. package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js.map +1 -1
  25. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +6 -0
  26. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
  27. package/dist/vendor/zephyr3d/scene/dist/material/skin.js +263 -0
  28. package/dist/vendor/zephyr3d/scene/dist/material/skin.js.map +1 -0
  29. package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js +3 -0
  30. package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js.map +1 -1
  31. package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js +194 -0
  32. package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js.map +1 -0
  33. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +26 -49
  34. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
  35. package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js +1 -0
  36. package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js.map +1 -1
  37. package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js +2 -40
  38. package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js.map +1 -1
  39. package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js.map +1 -1
  41. package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js +1 -0
  42. package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js.map +1 -1
  43. package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js +1 -0
  44. package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js +1 -0
  46. package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js +1 -0
  48. package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +4 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js +1 -0
  52. package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js.map +1 -1
  53. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +1 -0
  54. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
  55. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js +12 -5
  56. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  57. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +78 -8
  58. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  59. package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js +1 -0
  60. package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js.map +1 -1
  61. package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js +1 -0
  62. package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js.map +1 -1
  63. package/dist/vendor/zephyr3d/scene/dist/scene/environment.js +1 -0
  64. package/dist/vendor/zephyr3d/scene/dist/scene/environment.js.map +1 -1
  65. package/dist/vendor/zephyr3d/scene/dist/scene/light.js +158 -154
  66. package/dist/vendor/zephyr3d/scene/dist/scene/light.js.map +1 -1
  67. package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js +1 -0
  68. package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js.map +1 -1
  69. package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js +1 -0
  70. package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js.map +1 -1
  71. package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js +1 -0
  72. package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js.map +1 -1
  73. package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js +1 -0
  74. package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js.map +1 -1
  75. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  76. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  77. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js +1 -0
  78. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js.map +1 -1
  79. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js +1 -0
  80. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  81. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js +1 -0
  82. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  83. package/dist/vendor/zephyr3d/scene/dist/scene/water.js +1 -0
  84. package/dist/vendor/zephyr3d/scene/dist/scene/water.js.map +1 -1
  85. package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js +617 -1
  86. package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js.map +1 -1
  87. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -0
  88. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
  89. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js +1 -0
  90. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js.map +1 -1
  91. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js +1 -0
  92. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js.map +1 -1
  93. package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js +182 -0
  94. package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js.map +1 -0
  95. package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js +1 -0
  96. package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js.map +1 -1
  97. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_impl.js.map +1 -1
  98. package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js +183 -105
  99. package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js.map +1 -1
  100. package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js +1 -0
  101. package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js.map +1 -1
  102. package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js +1 -0
  103. package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js.map +1 -1
  104. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +3 -1
  105. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  106. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +1 -0
  107. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  108. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js +1 -0
  109. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js.map +1 -1
  110. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +122 -0
  111. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  112. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js +1 -0
  113. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js.map +1 -1
  114. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js +102 -21
  115. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js.map +1 -1
  116. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js +195 -3
  117. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js.map +1 -1
  118. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js +1 -0
  119. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  120. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +1 -0
  121. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
  122. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js +1 -0
  123. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js.map +1 -1
  124. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js +1 -0
  125. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js.map +1 -1
  126. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js +1 -0
  127. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
  128. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js +1 -0
  129. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js.map +1 -1
  130. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js +1 -0
  131. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js.map +1 -1
  132. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js +1 -0
  133. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js.map +1 -1
  134. package/dist/vendor/zephyr3d/scene/dist/values.js +1 -0
  135. package/dist/vendor/zephyr3d/scene/dist/values.js.map +1 -1
  136. package/electron/main.cjs +30 -6
  137. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(sampleDepth, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(scope: PBInsideFunctionScope, distance: PBShaderExp, occluder: PBShaderExp) {\r\n const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n this.$l.test = pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n if (depthBias) {\r\n this.depth = pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n this.$l.shadow = logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["getShadowMapTexelSize","scope","$builder","div","ShaderHelper","getShadowCameraParams","z","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","pb","func","vec3","hasDepthChannel","$return","vec4","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","$l","depth","float","lightType","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","LIGHT_TYPE_POINT","lightSpacePos","mul","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","w","$else","neg","encodeNormalizedFloatToRGBA","getGlobalScope","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","vec2","sub","y","x","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","funcName","nativeShadowMap","int","sampleDepth","add","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","shadow","coverage","invCoverage","max","moments","xy","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","LIGHT_TYPE_SPOT","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","receiverPlaneDepthBias","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3"],"mappings":"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"}
1
+ {"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getPCSSRotationMatrix(\r\n scope: PBInsideFunctionScope,\r\n sampleCoord: PBShaderExp,\r\n temporalJitter: boolean\r\n) {\r\n const funcName = `lib_getPCSSRotationMatrix_${temporalJitter ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec2('sampleCoord')], function () {\r\n if (temporalJitter) {\r\n this.$l.frame = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), pb.mul(this.frame, 0.61803398875))),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(\r\n pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x)\r\n );\r\n } else {\r\n this.$return(pb.mat2(0.8660254, 0.5, -0.5, 0.8660254));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(sampleDepth, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowDepthPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.vec4('bounds'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.depth = pb.float(1);\r\n this.$l.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.coords.x, this.bounds.x),\r\n pb.lessThanEqual(this.coords.x, this.bounds.z),\r\n pb.greaterThanEqual(this.coords.y, this.bounds.y),\r\n pb.lessThanEqual(this.coords.y, this.bounds.w)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n this.$l.boundsPadding = pb.mul(\r\n pb.sub(this.bounds.zw, this.bounds.xy),\r\n getShadowMapTexelSize(this),\r\n 0.5\r\n );\r\n this.$l.sampleCoord = pb.clamp(\r\n this.coords,\r\n pb.add(this.bounds.xy, this.boundsPadding),\r\n pb.sub(this.bounds.zw, this.boundsPadding)\r\n );\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, 0);\r\n this.depth =\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x;\r\n });\r\n this.$return(this.depth);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, bounds, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowDepthPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec3('dir')], function () {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);\r\n this.$return(\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](dir) as PBShaderExp;\r\n}\r\n\r\nfunction compareShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n sampleDepth: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n transitionWidth: PBShaderExp\r\n) {\r\n const funcName = 'lib_compareShadowDepthPCSS';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.float('sampleDepth'), pb.float('compareDepth'), pb.float('transitionWidth')],\r\n function () {\r\n this.$l.depthDelta = pb.sub(this.sampleDepth, this.compareDepth);\r\n this.$return(pb.smoothStep(pb.neg(this.transitionWidth), this.transitionWidth, this.depthDelta));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](sampleDepth, compareDepth, transitionWidth) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowPCFPCSS_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('coords'),\r\n pb.vec4('bounds'),\r\n pb.float('compareDepth'),\r\n pb.vec2('texelSize'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.texelSize), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.tapCompareDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.tapCoord = pb.add(this.coords, this.offset);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.tapCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.tapCompareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.compareDepth, pb.dot(this.offset, this.receiverPlaneDepthBias.xy))\r\n : this.compareDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.tapCompareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](pos, bounds, compareDepth, texelSize, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowPCFPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('texelSize'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.offset.x), pb.mul(this.bitangent, this.offset.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.compareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](dir, compareDepth, texelSize, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n texCoord: PBShaderExp,\r\n bounds: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_findBlockerPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec4('texCoord'),\r\n pb.vec4('bounds'),\r\n pb.vec2('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.texCoord.z)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](texCoord, bounds, searchRadius, tapCount, transitionWidth, matrix, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction findPointBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_findPointBlockerPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.compareDepth)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](dir, compareDepth, searchRadius, tapCount, transitionWidth, matrix, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(scope: PBInsideFunctionScope, distance: PBShaderExp, occluder: PBShaderExp) {\r\n const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n this.$l.test = pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n if (depthBias) {\r\n this.depth = pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n this.$l.shadow = logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCSS(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n temporalJitter = true,\r\n numCascades = 1\r\n) {\r\n const funcNameFilterShadowPCSS = `lib_filterShadowPCSS_${lightType}_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}_${temporalJitter ? 1 : 0}_${numCascades}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCSS,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.PCSSblockerSampleCount = ShaderHelper.getShadowImplParams(this).y;\r\n this.$l.PCSSfilterSampleCount = ShaderHelper.getShadowImplParams(this).z;\r\n this.$l.PCSSlightRadius = ShaderHelper.getShadowImplParams(this).x;\r\n this.$l.PCSSmaxFilterRadius = ShaderHelper.getShadowImplParams(this).w;\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.greaterThan(this.PCSSlightRadius, 0),\r\n pb.max(this.PCSSlightRadius, this.PCSSmaxFilterRadius),\r\n 0\r\n );\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((s) => pb.vec2(s[0], s[1]));\r\n }\r\n\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.lightDepth = this.texCoord.w;\r\n this.$l.sampleDir = pb.normalize(this.texCoord.xyz);\r\n this.$l.shadowMapTexelSize = pb.mul(getShadowMapTexelSize(this), 2);\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.sampleDir.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = pb.float(1 / 65535);\r\n this.$l.up = this.$choice(\r\n pb.lessThan(pb.abs(this.sampleDir.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.sampleDir));\r\n this.$l.bitangent = pb.cross(this.sampleDir, this.tangent);\r\n this.$l.blocker = findPointBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n this.sampleDir,\r\n this.lightDepth,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.tangent,\r\n this.bitangent\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.samplePointDir = pb.vec3();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.samplePointDir = pb.normalize(\r\n pb.add(\r\n this.sampleDir,\r\n pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y))\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n samplePointShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.samplePointDir,\r\n this.lightDepth,\r\n this.shadowMapTexelSize,\r\n this.tangent,\r\n this.bitangent\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n return;\r\n }\r\n\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\r\n if (cascade && getDevice().type === 'webgl' && numCascades > 1) {\r\n const numCols = numCascades > 1 ? 2 : 1;\r\n const numRows = numCascades > 2 ? 2 : 1;\r\n this.$l.cascadeIndex = pb.float(this.cascade);\r\n this.$l.cascadeCol = pb.mod(this.cascadeIndex, 2);\r\n this.$l.cascadeRow = pb.floor(pb.mul(this.cascadeIndex, 0.5));\r\n this.sampleBounds = pb.vec4(\r\n pb.mul(this.cascadeCol, 1 / numCols),\r\n pb.mul(this.cascadeRow, 1 / numRows),\r\n pb.mul(pb.add(this.cascadeCol, 1), 1 / numCols),\r\n pb.mul(pb.add(this.cascadeRow, 1), 1 / numRows)\r\n );\r\n }\r\n this.$l.shadowMapTexelSize = pb.mul(\r\n pb.sub(this.sampleBounds.zw, this.sampleBounds.xy),\r\n getShadowMapTexelSize(this)\r\n );\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.searchRadius), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n\r\n this.$l.blocker = findBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n pb.vec4(this.texCoord.xy, this.lightDepth, this.texCoord.w),\r\n this.sampleBounds,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.cascade\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.compareDepth = pb.float();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.compareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.sampleBounds,\r\n this.compareDepth,\r\n this.shadowMapTexelSize,\r\n this.receiverPlaneDepthBias,\r\n this.cascade\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCSS\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["PCF_POISSON_DISC","getPCSSRotationMatrix","scope","sampleCoord","temporalJitter","funcName","pb","$builder","func","vec2","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","mul","smoothNoise3D","vec3","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","z","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","vec4","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","lightType","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","LIGHT_TYPE_POINT","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","w","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","sub","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","add","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","sampleInside","all","bvec4","greaterThanEqual","lessThanEqual","boundsPadding","zw","xy","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","PCSSpdSamples","at","i","$choice","greaterThan","findPointBlockerPCSS","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","LIGHT_TYPE_SPOT","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3","filterShadowPCSS","numCascades","funcNameFilterShadowPCSS","PCSSblockerSampleCount","getShadowImplParams","PCSSfilterSampleCount","PCSSlightRadius","PCSSmaxFilterRadius","PCSSsearchRadius","map","s","blockerTransitionWidth","up","lessThan","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"mappings":"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"}
@@ -268,6 +268,7 @@ class BlurBlitter extends GaussianBlurBlitter {
268
268
  getShaderHash() {
269
269
  return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;
270
270
  }
271
+ getParams() {}
271
272
  getShadowMapColorFormat(_shadowMapParams) {
272
273
  const device = getDevice();
273
274
  return device.getDeviceCaps().textureCaps.supportFloatColorBuffer && device.getDeviceCaps().textureCaps.supportLinearFloatTexture ? device.type === 'webgl' ? 'rgba32f' : 'rg32f' : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer && device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture ? device.type === 'webgl' ? 'rgba16f' : 'rg16f' : 'rgba8unorm';