@zephyr3d/scene 0.9.27 → 0.10.0

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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -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 { DEPTH_FARTHEST, REVERSE_Z } from '@zephyr3d/base';\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 * Whether the shadow-space depth compared by a filter is the device depth\r\n * (direction flips under reverse-Z) or a linear distance encoding\r\n * (direction independent). Directional/rect receivers use the light\r\n * projection device depth; point uses distance/range and spot a linear\r\n * view-depth encoding.\r\n * @internal\r\n */\r\nexport function isDeviceDepthShadow(lightType: number): boolean {\r\n return lightType !== LIGHT_TYPE_POINT && lightType !== LIGHT_TYPE_SPOT;\r\n}\r\n\r\n/**\r\n * Maps the shadow-space NDC position to shadow map coordinates: xy to\r\n * [0, 1] texture space, depth to the device depth range. Under standard-Z\r\n * all components map from GL [-1, 1]; under reverse-Z the depth is already\r\n * zero-to-one and passes through.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec4(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z, ndc.w)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * vec3 variant of {@link ndcToShadowCoord}.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord3(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec3(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * Whether a shadow map device depth lies within the far bound of the\r\n * shadow projection (\"not beyond the shadow far plane\").\r\n * @internal\r\n */\r\nexport function shadowCoordDepthInRange(scope: PBInsideFunctionScope, z: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? pb.greaterThanEqual(z, 0) : pb.lessThanEqual(z, 1);\r\n}\r\n\r\n/**\r\n * Applies a depth bias that moves the receiver towards the light in the\r\n * encoding of the compared shadow depth.\r\n * @internal\r\n */\r\nexport function applyShadowDepthBias(\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n bias: PBShaderExp,\r\n deviceEncoded: boolean\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z && deviceEncoded ? pb.add(z, bias) : pb.sub(z, bias);\r\n}\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\n/** @internal */\r\nexport function getProgressivePoissonDiscSample(\r\n scope: PBInsideFunctionScope,\r\n index: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (pb.getDevice().type === 'webgl') {\r\n const funcName = 'lib_getProgressivePoissonDiscSampleWebGL1';\r\n pb.func(funcName, [pb.int('index')], function () {\r\n for (let i = 0; i < PCF_POISSON_DISC.length; i++) {\r\n const sample = PCF_POISSON_DISC[(i * 19) % PCF_POISSON_DISC.length];\r\n this.$if(pb.equal(this.index, i), function () {\r\n this.$return(pb.vec2(sample[0], sample[1]));\r\n });\r\n }\r\n this.$return(pb.vec2(PCF_POISSON_DISC[0][0], PCF_POISSON_DISC[0][1]));\r\n });\r\n return pb.getGlobalScope()[funcName](index) as PBShaderExp;\r\n }\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((sample) => pb.vec2(sample[0], sample[1]));\r\n }\r\n return pb\r\n .getGlobalScope()\r\n .PCSSpdSamples.at(pb.mod(pb.mul(index, 19), PCF_POISSON_DISC.length)) as PBShaderExp;\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.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 // At grazing incidence the shadow-space footprint of a pixel collapses and\r\n // this determinant tends to zero, so the gradient blows up (and flips sign\r\n // across neighbouring pixels). Rather than clamp the fallout downstream,\r\n // report \"no usable plane\" and let the caller fall back to the constant\r\n // depth bias plus normal offset.\r\n this.$l.det = pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x));\r\n this.$if(pb.lessThan(pb.abs(this.det), 1e-8), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.uv = pb.div(this.uv, this.det);\r\n // `.z` used to carry a scalar \"static bias\" capped at a hardcoded 0.01.\r\n // That constant came from a Unity shader operating on perspective (non\r\n // linear) shadow depth; for a directional light's orthographic camera the\r\n // depth is linear, so 0.01 means 1% of the whole depth range - metres of\r\n // world-space push on a typical scene, which is what produced the light\r\n // leaks around the terminator. Constant depth bias plus normal offset cover\r\n // this properly now, so only the plane gradient survives.\r\n this.$return(pb.vec3(this.uv, 0));\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 // Receiver and stored depth are device-encoded here; under reverse-Z\r\n // \"lit\" means receiver depth >= stored depth.\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, sampleDepth) : pb.step(sampleDepth, this.shadowTex.x)\r\n );\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 // directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers convert to a linear encoding beforehand.\r\n this.$return(\r\n REVERSE_Z && isDeviceDepthShadow(lightType)\r\n ? pb.step(this.shadowTex.x, this.z)\r\n : pb.step(this.z, this.shadowTex.x)\r\n );\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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 // out-of-bounds samples read as \"farthest\" (no blocker); farthest is\r\n // DEPTH_FARTHEST for device-encoded depth, 1 for linear encodings\r\n this.$l.depth = pb.float(deviceEncoded ? DEPTH_FARTHEST : 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 deviceEncoded: boolean\r\n) {\r\n // Lit when the stored depth is farther than the receiver; farther means a\r\n // smaller value for device-encoded depth under reverse-Z.\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcName = flip ? 'lib_compareShadowDepthPCSSRev' : '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 = flip\r\n ? pb.sub(this.compareDepth, this.sampleDepth)\r\n : 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 deviceEncoded: boolean,\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}_${\r\n cascade ? 1 : 0\r\n }${REVERSE_Z && deviceEncoded ? '_rev' : ''}`;\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 deviceEncoded,\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(\r\n this,\r\n this.sampleDepth,\r\n this.tapCompareDepth,\r\n this.transitionWidth,\r\n deviceEncoded\r\n )\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, false)\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\r\n const pb = scope.$builder;\r\n const webgl1 = pb.getDevice().type === 'webgl';\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, webgl1 ? PCF_POISSON_DISC.length : this.tapCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.tapCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n // Blocker when the sample is closer to the light than the receiver;\r\n // device-encoded depth mirrors the difference under reverse-Z.\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 REVERSE_Z && deviceEncoded\r\n ? pb.sub(this.texCoord.z, this.sampleDepth)\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 const webgl1 = pb.getDevice().type === 'webgl';\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, webgl1 ? PCF_POISSON_DISC.length : this.tapCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.tapCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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(\r\n scope: PBInsideFunctionScope,\r\n distance: PBShaderExp,\r\n occluder: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcNameChebyshevUpperBound = flip ? 'lib_chebyshevUpperBoundRev' : '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 // The one-sided Chebyshev bound applies when the receiver is farther\r\n // than the mean occluder depth; variance and squared difference are\r\n // invariant under the reverse-Z d -> 1-d mirror, only the side test\r\n // flips.\r\n this.$l.test = flip ? pb.step(this.moments.x, this.distance) : 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 false\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 isDeviceDepthShadow(lightType)\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 const deviceEncoded = isDeviceDepthShadow(lightType);\r\n if (depthBias) {\r\n this.depth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.min(1, pb.add(this.depth, this.depthBias))\r\n : pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n // ESM expects exp(k * (occluder - receiver)) with depth growing away\r\n // from the light; device-encoded depth grows towards the light under\r\n // reverse-Z, so the difference is mirrored.\r\n this.$l.shadow =\r\n REVERSE_Z && deviceEncoded\r\n ? logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(pb.mul(depthScale, this.depth), this.shadowTex.x))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.depth, this.shadowTex.x)))), 0, 1)\r\n : 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/**\r\n * Fixed-kernel PCF.\r\n *\r\n * @remarks\r\n * Unlike {@link filterShadowPCSS} and {@link filterShadowPoissonDisc}, this\r\n * filter never applied the receiver plane depth gradient per tap - it only used\r\n * the scalar `.z` guard, which has been removed (see\r\n * {@link computeReceiverPlaneDepthBias}). Over a kernel this narrow the plane\r\n * correction is worth little, and the constant depth bias plus normal offset\r\n * cover the receiver slope, so the parameter is gone rather than left inert.\r\n * @internal\r\n */\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 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 [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\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.getGlobalScope()[funcNameFilterShadowPCF](texCoord, ...(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 const webgl1 = pb.getDevice().type === 'webgl';\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 (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(\r\n pb.float('i'),\r\n 0,\r\n webgl1 ? PCF_POISSON_DISC.length : this.PCSSfilterSampleCount,\r\n function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.PCSSfilterSampleCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 );\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 // Directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers and their stored depth use a linear encoding.\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n this.$l.lightDepth = this.texCoord.z;\r\n // The scalar `.z` guard is gone (see computeReceiverPlaneDepthBias); the\r\n // per-tap plane gradient below is the part that was ever load bearing.\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 deviceEncoded,\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 // Penumbra estimation (receiver - blocker) / blocker; for device\r\n // depth under reverse-Z apply the d -> 1-d mirror of the expression.\r\n this.$l.penumbra =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.div(\r\n pb.max(pb.sub(this.blocker.x, this.lightDepth), 0),\r\n pb.max(pb.sub(1, this.blocker.x), 0.0001)\r\n )\r\n : pb.div(pb.max(pb.sub(this.lightDepth, this.blocker.x), 0), pb.max(this.blocker.x, 0.0001));\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, webgl1 ? PCF_POISSON_DISC.length : this.PCSSfilterSampleCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.PCSSfilterSampleCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\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 // The scalar `.z` guard is gone (see computeReceiverPlaneDepthBias); the\r\n // per-tap plane gradient below is the part that was ever load bearing.\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":["isDeviceDepthShadow","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","ndcToShadowCoord","scope","ndc","pb","$builder","REVERSE_Z","vec4","add","mul","xy","vec2","z","w","ndcToShadowCoord3","vec3","shadowCoordDepthInRange","greaterThanEqual","lessThanEqual","applyShadowDepthBias","bias","deviceEncoded","sub","PCF_POISSON_DISC","getProgressivePoissonDiscSample","index","getDevice","type","funcName","func","int","i","length","sample","$if","equal","$return","getGlobalScope","PCSSpdSamples","map","at","mod","getPCSSRotationMatrix","sampleCoord","temporalJitter","$l","frame","float","ShaderHelper","getFramestamp","randomAngle","smoothNoise3D","Math","PI","randomBase","cos","sin","mat2","x","y","neg","getShadowMapTexelSize","div","getShadowCameraParams","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","getLightTypeForShadow","or","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","lightSpacePos","getLightViewMatrixForShadow","xyz","getLightPositionAndRangeForShadow","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","uv","det","lessThan","abs","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","sampleDepth","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","DEPTH_FARTHEST","sampleInside","all","bvec4","boundsPadding","zw","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","flip","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","dot","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","webgl1","blockerDepthSum","blockerCount","duv","blockerWeight","$for","$break","$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","nearFar","nonLinearDepthToLinearNormalized","min","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","blockerTransitionWidth","up","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"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 { DEPTH_FARTHEST, REVERSE_Z } from '@zephyr3d/base';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, 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\n\r\n/**\r\n * Whether the shadow-space depth compared by a filter is the device depth\r\n * (direction flips under reverse-Z) or a linear distance encoding\r\n * (direction independent). Directional/rect receivers use the light\r\n * projection device depth; point uses distance/range and spot a linear\r\n * view-depth encoding.\r\n * @internal\r\n */\r\nexport function isDeviceDepthShadow(lightType: number): boolean {\r\n return lightType !== LIGHT_TYPE_POINT && lightType !== LIGHT_TYPE_SPOT;\r\n}\r\n\r\n/**\r\n * Maps the shadow-space NDC position to shadow map coordinates: xy to\r\n * [0, 1] texture space, depth to the device depth range. Under standard-Z\r\n * all components map from GL [-1, 1]; under reverse-Z the depth is already\r\n * zero-to-one and passes through.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec4(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z, ndc.w)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * vec3 variant of {@link ndcToShadowCoord}.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord3(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec3(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * Whether a shadow map device depth lies within the far bound of the\r\n * shadow projection (\"not beyond the shadow far plane\").\r\n * @internal\r\n */\r\nexport function shadowCoordDepthInRange(scope: PBInsideFunctionScope, z: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? pb.greaterThanEqual(z, 0) : pb.lessThanEqual(z, 1);\r\n}\r\n\r\n/**\r\n * Applies a depth bias that moves the receiver towards the light in the\r\n * encoding of the compared shadow depth.\r\n * @internal\r\n */\r\nexport function applyShadowDepthBias(\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n bias: PBShaderExp,\r\n deviceEncoded: boolean\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z && deviceEncoded ? pb.add(z, bias) : pb.sub(z, bias);\r\n}\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\n/** @internal */\r\nexport function getProgressivePoissonDiscSample(\r\n scope: PBInsideFunctionScope,\r\n index: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((sample) => pb.vec2(sample[0], sample[1]));\r\n }\r\n return pb\r\n .getGlobalScope()\r\n .PCSSpdSamples.at(pb.mod(pb.mul(index, 19), PCF_POISSON_DISC.length)) as PBShaderExp;\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(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), 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 .$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.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 // At grazing incidence the shadow-space footprint of a pixel collapses and\r\n // this determinant tends to zero, so the gradient blows up (and flips sign\r\n // across neighbouring pixels). Rather than clamp the fallout downstream,\r\n // report \"no usable plane\" and let the caller fall back to the constant\r\n // depth bias plus normal offset.\r\n this.$l.det = pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x));\r\n this.$if(pb.lessThan(pb.abs(this.det), 1e-8), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.uv = pb.div(this.uv, this.det);\r\n // `.z` used to carry a scalar \"static bias\" capped at a hardcoded 0.01.\r\n // That constant came from a Unity shader operating on perspective (non\r\n // linear) shadow depth; for a directional light's orthographic camera the\r\n // depth is linear, so 0.01 means 1% of the whole depth range - metres of\r\n // world-space push on a typical scene, which is what produced the light\r\n // leaks around the terminator. Constant depth bias plus normal offset cover\r\n // this properly now, so only the plane gradient survives.\r\n this.$return(pb.vec3(this.uv, 0));\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\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 = cascade\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 // Receiver and stored depth are device-encoded here; under reverse-Z\r\n // \"lit\" means receiver depth >= stored depth.\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, sampleDepth) : pb.step(sampleDepth, this.shadowTex.x)\r\n );\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\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 = cascade\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 // directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers convert to a linear encoding beforehand.\r\n this.$return(\r\n REVERSE_Z && isDeviceDepthShadow(lightType)\r\n ? pb.step(this.shadowTex.x, this.z)\r\n : pb.step(this.z, this.shadowTex.x)\r\n );\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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 // out-of-bounds samples read as \"farthest\" (no blocker); farthest is\r\n // DEPTH_FARTHEST for device-encoded depth, 1 for linear encodings\r\n this.$l.depth = pb.float(deviceEncoded ? DEPTH_FARTHEST : 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 = cascade\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 deviceEncoded: boolean\r\n) {\r\n // Lit when the stored depth is farther than the receiver; farther means a\r\n // smaller value for device-encoded depth under reverse-Z.\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcName = flip ? 'lib_compareShadowDepthPCSSRev' : '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 = flip\r\n ? pb.sub(this.compareDepth, this.sampleDepth)\r\n : 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 deviceEncoded: boolean,\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}_${\r\n cascade ? 1 : 0\r\n }${REVERSE_Z && deviceEncoded ? '_rev' : ''}`;\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 deviceEncoded,\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(\r\n this,\r\n this.sampleDepth,\r\n this.tapCompareDepth,\r\n this.transitionWidth,\r\n deviceEncoded\r\n )\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 plane: PBShaderExp,\r\n depthParams: 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 pb.vec4('plane'),\r\n pb.vec2('depthParams')\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 // Each sub-tap reads its own texel, so each is compared against the\r\n // receiver there - see pointReceiverPlaneDepth.\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(\r\n this,\r\n this.sampleDepth,\r\n pointReceiverPlaneDepth(this, this.sampleDir, this.plane, this.compareDepth, this.depthParams),\r\n this.transitionWidth,\r\n false\r\n )\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 [funcName](dir, compareDepth, texelSize, tangent, bitangent, plane, depthParams) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n // Blocker when the sample is closer to the light than the receiver;\r\n // device-encoded depth mirrors the difference under reverse-Z.\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 REVERSE_Z && deviceEncoded\r\n ? pb.sub(this.texCoord.z, this.sampleDepth)\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\n/**\r\n * Normalized radial depth of the receiver's plane along a cube tap direction.\r\n *\r\n * @remarks\r\n * The cube counterpart of `computeReceiverPlaneDepthBias`. A cube map stores\r\n * distance from the light, so across a filter kernel the receiver's own depth\r\n * changes with direction - on any plane not facing the light head-on, and\r\n * even on one that does, since radial distance to a plane grows off its\r\n * normal. Comparing every tap against the centre's depth makes the receiver\r\n * occlude itself on one side of the kernel, which at PCSS kernel sizes turns a\r\n * wide penumbra into a flat plateau of false shadow that snaps to fully lit\r\n * where the blocker search runs out.\r\n *\r\n * Along the tap itself rather than at a texel centre, because the cube is\r\n * sampled bilinearly: what a tap reads is the stored plane depths interpolated\r\n * to its direction, which matches the plane there to second order.\r\n *\r\n * `plane` is the receiver's light-space plane as `(normal, dot(p, normal))` for\r\n * the light-to-receiver vector `p`; a zero normal, a tap parallel to the plane\r\n * or one that would meet it behind the light fall back to `centerDepth`.\r\n * `depthParams` is `(1 / range, depth bias)`.\r\n *\r\n * @internal\r\n */\r\nfunction pointReceiverPlaneDepth(\r\n scope: PBInsideFunctionScope,\r\n dir: PBShaderExp,\r\n plane: PBShaderExp,\r\n centerDepth: PBShaderExp,\r\n depthParams: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'lib_pointReceiverPlaneDepth',\r\n [pb.vec3('dir'), pb.vec4('plane'), pb.float('centerDepth'), pb.vec2('depthParams')],\r\n function () {\r\n this.$l.denom = pb.dot(this.dir, this.plane.xyz);\r\n this.$if(pb.lessThan(pb.abs(this.denom), 1e-8), function () {\r\n this.$return(this.centerDepth);\r\n });\r\n // Where the ray meets the plane, as a distance along it. `dir` need not be\r\n // unit length: the parameter scales inversely with it.\r\n this.$l.t = pb.div(this.plane.w, this.denom);\r\n this.$if(pb.lessThanEqual(this.t, 0), function () {\r\n this.$return(this.centerDepth);\r\n });\r\n this.$return(pb.sub(pb.mul(this.t, pb.length(this.dir), this.depthParams.x), this.depthParams.y));\r\n }\r\n );\r\n return pb.getGlobalScope().lib_pointReceiverPlaneDepth(dir, plane, centerDepth, depthParams) 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 plane: PBShaderExp,\r\n depthParams: 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 pb.vec4('plane'),\r\n pb.vec2('depthParams')\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(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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(\r\n this.sampleDepth,\r\n pointReceiverPlaneDepth(this, this.sampleDir, this.plane, this.compareDepth, this.depthParams)\r\n )\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, plane, depthParams) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(\r\n scope: PBInsideFunctionScope,\r\n distance: PBShaderExp,\r\n occluder: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcNameChebyshevUpperBound = flip ? 'lib_chebyshevUpperBoundRev' : '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 // The one-sided Chebyshev bound applies when the receiver is farther\r\n // than the mean occluder depth; variance and squared difference are\r\n // invariant under the reverse-Z d -> 1-d mirror, only the side test\r\n // flips.\r\n this.$l.test = flip ? pb.step(this.moments.x, this.distance) : 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 false\r\n )\r\n );\r\n } else {\r\n if (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 isDeviceDepthShadow(lightType)\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) {\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 const deviceEncoded = isDeviceDepthShadow(lightType);\r\n if (depthBias) {\r\n this.depth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.min(1, pb.add(this.depth, this.depthBias))\r\n : pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n // ESM expects exp(k * (occluder - receiver)) with depth growing away\r\n // from the light; device-encoded depth grows towards the light under\r\n // reverse-Z, so the difference is mirrored.\r\n this.$l.shadow =\r\n REVERSE_Z && deviceEncoded\r\n ? logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(pb.mul(depthScale, this.depth), this.shadowTex.x))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.depth, this.shadowTex.x)))), 0, 1)\r\n : 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/**\r\n * Fixed-kernel PCF.\r\n *\r\n * @remarks\r\n * Unlike {@link filterShadowPCSS} and {@link filterShadowPoissonDisc}, this\r\n * filter never applied the receiver plane depth gradient per tap - it only used\r\n * the scalar `.z` guard, which has been removed (see\r\n * {@link computeReceiverPlaneDepthBias}). Over a kernel this narrow the plane\r\n * correction is worth little, and the constant depth bias plus normal offset\r\n * cover the receiver slope, so the parameter is gone rather than left inert.\r\n * @internal\r\n */\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 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 [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\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.getGlobalScope()[funcNameFilterShadowPCF](texCoord, ...(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 // A negative light radius is a physical source radius in world units rather\r\n // than a size in texels - see PCSS.physicalLightRadius. Only the cube\r\n // branch below reads it that way; the search itself spans the whole filter\r\n // budget either way.\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.notEqual(this.PCSSlightRadius, 0),\r\n pb.max(pb.abs(this.PCSSlightRadius), this.PCSSmaxFilterRadius),\r\n 0\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 // For cube maps the receiver-plane slot carries the receiver's light-space\r\n // plane normal rather than a depth gradient; see pointReceiverPlaneDepth.\r\n this.$l.receiverPlane = pb.vec4(0);\r\n this.$l.depthParams = pb.vec2(0);\r\n if (receiverPlaneDepthBias) {\r\n this.$l.invRange = pb.div(1, ShaderHelper.getLightPositionAndRangeForShadow(this).w);\r\n this.receiverPlane = pb.vec4(\r\n this.receiverPlaneDepthBias,\r\n pb.dot(this.texCoord.xyz, this.receiverPlaneDepthBias)\r\n );\r\n // The receiver's own bias, plus one shadow texel's footprint at the\r\n // receiver. The point light's depth bias is sized to a texel at the near\r\n // plane, a small fraction of one here; with the slope handled by the\r\n // plane, what remains to cover is bilinear interpolation error and the\r\n // storage format's rounding - half a float's relative precision is\r\n // 2^-11, below a texel's angular size of 2 / size for any map up to\r\n // 2048 - and without it the comparison flips texel by texel wherever\r\n // the plane's depth barely changes, which is right under the light:\r\n // rings of isolated black pixels there.\r\n this.depthParams = pb.vec2(\r\n this.invRange,\r\n pb.add(\r\n pb.sub(pb.mul(pb.length(this.texCoord.xyz), this.invRange), this.lightDepth),\r\n pb.mul(this.lightDepth, this.shadowMapTexelSize)\r\n )\r\n );\r\n }\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 this.receiverPlane,\r\n this.depthParams\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 // With a physical source radius R, the penumbra at the receiver is\r\n // R * (dr - db) / db wide, and seen from the light that is an angle of\r\n // penumbra * R / dr - which is what an offset on the unit-length sample\r\n // direction measures. So the light's size in texels follows the\r\n // receiver's distance, instead of being one fixed texel count that\r\n // over-blurs near the light and under-blurs far from it.\r\n this.$l.receiverDistance = pb.max(\r\n pb.mul(this.lightDepth, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0.0001\r\n );\r\n this.$l.lightRadiusTexels = this.$choice(\r\n pb.lessThan(this.PCSSlightRadius, 0),\r\n pb.div(pb.div(pb.neg(this.PCSSlightRadius), this.receiverDistance), this.shadowMapTexelSize),\r\n this.PCSSlightRadius\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.lightRadiusTexels), 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(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 this.receiverPlane,\r\n this.depthParams\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 // Directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers and their stored depth use a linear encoding.\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n this.$l.lightDepth = this.texCoord.z;\r\n // The scalar `.z` guard is gone (see computeReceiverPlaneDepthBias); the\r\n // per-tap plane gradient below is the part that was ever load bearing.\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\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 deviceEncoded,\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 // Penumbra estimation (receiver - blocker) / blocker; for device\r\n // depth under reverse-Z apply the d -> 1-d mirror of the expression.\r\n this.$l.penumbra =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.div(\r\n pb.max(pb.sub(this.blocker.x, this.lightDepth), 0),\r\n pb.max(pb.sub(1, this.blocker.x), 0.0001)\r\n )\r\n : pb.div(pb.max(pb.sub(this.lightDepth, this.blocker.x), 0), pb.max(this.blocker.x, 0.0001));\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(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\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 // The scalar `.z` guard is gone (see computeReceiverPlaneDepthBias); the\r\n // per-tap plane gradient below is the part that was ever load bearing.\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":["isDeviceDepthShadow","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","ndcToShadowCoord","scope","ndc","pb","$builder","REVERSE_Z","vec4","add","mul","xy","vec2","z","w","ndcToShadowCoord3","vec3","shadowCoordDepthInRange","greaterThanEqual","lessThanEqual","applyShadowDepthBias","bias","deviceEncoded","sub","PCF_POISSON_DISC","getProgressivePoissonDiscSample","index","getGlobalScope","PCSSpdSamples","map","sample","at","mod","length","getPCSSRotationMatrix","sampleCoord","temporalJitter","funcName","func","$l","frame","float","ShaderHelper","getFramestamp","randomAngle","smoothNoise3D","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getShadowMapTexelSize","div","getShadowCameraParams","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","getLightTypeForShadow","$if","equal","LIGHT_TYPE_DIRECTIONAL","$elseif","lightSpacePos","getLightViewMatrixForShadow","xyz","getLightPositionAndRangeForShadow","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","uv","det","lessThan","abs","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","DEPTH_FARTHEST","sampleInside","all","bvec4","boundsPadding","zw","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","flip","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","dot","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","plane","depthParams","sampleDir","normalize","pointReceiverPlaneDepth","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","i","$choice","greaterThan","centerDepth","denom","t","lib_pointReceiverPlaneDepth","findPointBlockerPCSS","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","nearFar","nonLinearDepthToLinearNormalized","min","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","blockerTransitionWidth","up","cross","receiverPlane","invRange","blocker","penumbra","receiverDistance","lightRadiusTexels","filterRadius","samplePointDir","sampleBounds"],"mappings":"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"}