@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":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { getPackedShadowMapClearColor, getShadowMapFarthestDepth, ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport {\r\n computeShadowMapDepth,\r\n filterShadowESM,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? getPackedShadowMapClearColor(shadowMapParams.lightType)\r\n : new Vector4(farthest, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","getShadowMapFarthestDepth","lightType","format","getPackedShadowMapClearColor","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getParams","out","zero","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadowCoordDepthInRange","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":"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"}
1
+ {"version":3,"file":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { getPackedShadowMapClearColor, getShadowMapFarthestDepth, ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport {\r\n computeShadowMapDepth,\r\n filterShadowESM,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? getPackedShadowMapClearColor(shadowMapParams.lightType)\r\n : new Vector4(farthest, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1;\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","getShadowMapFarthestDepth","lightType","format","getPackedShadowMapClearColor","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getParams","out","zero","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadowCoordDepthInRange","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  import { ShadowImpl } from './shadow_impl.js';
2
- import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
3
2
  import { computeShadowMapDepth, ndcToShadowCoord, shadowCoordDepthInRange, applyShadowDepthBias, filterShadowPCF } from '../shaders/shadow.js';
4
3
  import { LIGHT_TYPE_POINT } from '../values.js';
5
4
  import { ShaderHelper } from '../material/shader/helper.js';
6
5
  import { computeShadowBiasCSM, computeShadowBias } from './shader.js';
7
- import { getDevice } from '../app/api.js';
8
- import { Vector4, REVERSE_Z } from '@zephyr3d/base';
6
+ import { Vector4 } from '@zephyr3d/base';
9
7
 
10
8
  /** @internal */ class PCFOPT extends ShadowImpl {
11
9
  _kernelSize;
@@ -38,11 +36,11 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
38
36
  return out ?? Vector4.zero();
39
37
  }
40
38
  getShadowMap(shadowMapParams) {
41
- return this.useNativeShadowMap(shadowMapParams) ? shadowMapParams.shadowMapFramebuffer.getDepthAttachment() : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];
39
+ return shadowMapParams.shadowMapFramebuffer.getDepthAttachment();
42
40
  }
43
41
  doUpdateResources(shadowMapParams) {
44
42
  shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);
45
- shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;
43
+ shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(true) || null;
46
44
  }
47
45
  postRenderShadowMap() {}
48
46
  getDepthScale() {
@@ -52,8 +50,8 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
52
50
  getShaderHash() {
53
51
  return `${this._kernelSize}`;
54
52
  }
55
- getShadowMapColorFormat(shadowMapParams) {
56
- return this.useNativeShadowMap(shadowMapParams) ? null : 'rgba8unorm';
53
+ getShadowMapColorFormat(_shadowMapParams) {
54
+ return null;
57
55
  }
58
56
  getShadowMapDepthFormat(_shadowMapParams) {
59
57
  return this.preferredShadowMapDepthFormat();
@@ -93,17 +91,11 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
93
91
  ], function() {
94
92
  if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {
95
93
  this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);
96
- if (that.useNativeShadowMap(shadowMapParams)) {
97
- this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
98
- this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));
99
- this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);
100
- this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
101
- this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
102
- } else {
103
- this.$l.distance = pb.div(pb.length(this.dir), ShaderHelper.getLightPositionAndRangeForShadow(this).w);
104
- this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.distance, this.NdotL, true);
105
- this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
106
- }
94
+ this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
95
+ this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));
96
+ this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);
97
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
98
+ this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
107
99
  } else {
108
100
  this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);
109
101
  this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);
@@ -120,59 +112,34 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
120
112
  return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);
121
113
  }
122
114
  useNativeShadowMap(_shadowMapParams) {
123
- return getDevice().type !== 'webgl';
115
+ return true;
124
116
  }
125
117
  /** @internal */ sampleShadowMap(shadowMapParams, scope, coords, z, bias) {
126
118
  const funcNameSampleShadowMap = `lib_sampleShadowMapOPT`;
127
119
  const pb = scope.$builder;
128
- const that = this;
129
120
  pb.func(funcNameSampleShadowMap, [
130
121
  pb.vec3('coords'),
131
122
  pb.float('z'),
132
123
  pb.float('bias')
133
124
  ], function() {
134
- const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';
135
- if (that.useNativeShadowMap(shadowMapParams)) {
136
- this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, applyShadowDepthBias(this, this.z, this.bias, true)), 0, 1));
137
- } else {
138
- this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);
139
- if (!floatDepthTexture) {
140
- this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
141
- }
142
- this.$l.distance = pb.sub(this.z, this.bias);
143
- this.$return(pb.step(this.distance, this.shadowTex.x));
144
- }
125
+ this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, applyShadowDepthBias(this, this.z, this.bias, true)), 0, 1));
145
126
  });
146
127
  return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias);
147
128
  }
148
129
  /** @internal */ sampleShadowMapCSM(shadowMapParams, scope, coords, split, z, bias) {
149
130
  const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMOPT';
150
131
  const pb = scope.$builder;
151
- const that = this;
152
132
  pb.func(funcNameSampleShadowMapCSM, [
153
133
  pb.vec4('coords'),
154
134
  pb.int('split'),
155
135
  pb.float('z'),
156
136
  pb.float('bias')
157
137
  ], function() {
158
- const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';
159
138
  this.$l.distance = applyShadowDepthBias(this, this.z, this.bias, true);
160
- if (that.useNativeShadowMap(shadowMapParams)) {
161
- if (shadowMapParams.shadowMap.isTexture2DArray()) {
162
- this.$return(pb.clamp(pb.textureArraySampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, this.distance), 0, 1));
163
- } else {
164
- this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance), 0, 1));
165
- }
139
+ if (shadowMapParams.shadowMap.isTexture2DArray()) {
140
+ this.$return(pb.clamp(pb.textureArraySampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, this.distance), 0, 1));
166
141
  } else {
167
- if (shadowMapParams.shadowMap.isTexture2DArray()) {
168
- this.$l.shadowTex = pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, 0);
169
- } else {
170
- this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);
171
- }
172
- if (!floatDepthTexture) {
173
- this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
174
- }
175
- this.$return(REVERSE_Z ? pb.step(this.shadowTex.x, this.distance) : pb.step(this.distance, this.shadowTex.x));
142
+ this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance), 0, 1));
176
143
  }
177
144
  });
178
145
  return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias);
@@ -1 +1 @@
1
- {"version":3,"file":"pcf_opt.js","sources":["../../src/shadow/pcf_opt.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport {\r\n applyShadowDepthBias,\r\n computeShadowMapDepth,\r\n filterShadowPCF,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { REVERSE_Z, Vector4 } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFOPT extends ShadowImpl {\r\n protected _kernelSize: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(kernelSize?: number) {\r\n super();\r\n this._kernelSize = kernelSize ?? 5;\r\n this._shadowSampler = null;\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n this._kernelSize = val;\r\n }\r\n getType() {\r\n return 'pcf-opt' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._kernelSize;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer!.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return 1;\r\n }\r\n setDepthScale(_val: number) {}\r\n getShaderHash() {\r\n return `${this._kernelSize}`;\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n return this.useNativeShadowMap(shadowMapParams) ? null : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return this.preferredShadowMapDepthFormat();\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.split\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return getDevice().type !== 'webgl';\r\n }\r\n /** @internal */\r\n sampleShadowMap(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMapOPT`;\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameSampleShadowMap, [pb.vec3('coords'), pb.float('z'), pb.float('bias')], function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n applyShadowDepthBias(this, this.z, this.bias, true)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMOPT';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.distance = applyShadowDepthBias(this, this.z, this.bias, true);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, this.distance) : pb.step(this.distance, this.shadowTex.x)\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFOPT","ShadowImpl","_kernelSize","_shadowSampler","kernelSize","val","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","getParams","out","Vector4","zero","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","getShadowMapDepthFormat","preferredShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","shadowCoordDepthInRange","z","shadow","$if","shadowBias","computeShadowBiasCSM","applyShadowDepthBias","filterShadowPCF","lightType","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","sub","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","max","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","length","getDevice","type","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","clamp","textureSampleCompareLevel","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel","textureArraySampleLevel","REVERSE_Z"],"mappings":";;;;;;;;;AAkBA,iBACO,MAAMA,MAAeC,SAAAA,UAAAA,CAAAA;IAChBC,WAAoB;IACpBC,cAAyC;AACnD,IAAA,WAAA,CAAYC,UAAmB,CAAE;QAC/B,KAAK,EAAA;QACL,IAAI,CAACF,WAAW,GAAGE,UAAc,IAAA,CAAA;QACjC,IAAI,CAACD,cAAc,GAAG,IAAA;AACxB;AACA,IAAA,IAAIC,UAAa,GAAA;QACf,OAAO,IAAI,CAACF,WAAW;AACzB;IACA,IAAIE,UAAAA,CAAWC,GAAG,EAAE;AAClBA,QAAAA,GAAAA,GAAMA,QAAQ,CAAKA,IAAAA,GAAAA,KAAQ,CAAKA,IAAAA,GAAAA,KAAQ,IAAI,CAAIA,GAAAA,GAAAA;QAChD,IAAI,CAACH,WAAW,GAAGG,GAAAA;AACrB;IACAC,OAAU,GAAA;QACR,OAAO,SAAA;AACT;IACAC,OAAU,GAAA;QACR,IAAI,CAACJ,cAAc,GAAG,IAAA;AACxB;IACAK,aAAgB,GAAA;QACd,OAAO,KAAA;AACT;AACAC,IAAAA,kBAAAA,CAAmBC,gBAAiC,EAAE;QACpD,OAAO,IAAI,CAACR,WAAW;AACzB;AACAS,IAAAA,SAAAA,CAAUC,GAAa,EAAE;QACvB,OAAOA,GAAAA,IAAOC,QAAQC,IAAI,EAAA;AAC5B;AACAC,IAAAA,YAAAA,CAAaC,eAAgC,EAAE;AAC7C,QAAA,OACE,IAAI,CAACC,kBAAkB,CAACD,eAAAA,CAAAA,GACpBA,gBAAgBE,oBAAoB,CAAEC,kBAAkB,EAAA,GACxDH,gBAAgBE,oBAAoB,CAAEE,mBAAmB,EAAE,CAAC,CAAE,CAAA;AAEtE;AACAC,IAAAA,iBAAAA,CAAkBL,eAAgC,EAAE;AAClDA,QAAAA,eAAAA,CAAgBM,SAAS,GAAG,IAAI,CAACP,YAAY,CAACC,eAAAA,CAAAA;QAC9CA,eAAgBO,CAAAA,gBAAgB,GAC9BP,eAAAA,CAAgBM,SAAS,EAAEE,kBAAkB,IAAI,CAACP,kBAAkB,CAACD,eAAqB,CAAA,CAAA,IAAA,IAAA;AAC9F;AACAS,IAAAA,mBAAAA,GAAsB;IACtBC,aAAgB,GAAA;QACd,OAAO,CAAA;AACT;IACAC,aAAcC,CAAAA,IAAY,EAAE;IAC5BC,aAAgB,GAAA;AACd,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC3B,WAAW,CAAE,CAAA;AAC9B;AACA4B,IAAAA,uBAAAA,CAAwBd,eAAgC,EAA2B;AACjF,QAAA,OAAO,IAAI,CAACC,kBAAkB,CAACD,mBAAmB,IAAO,GAAA,YAAA;AAC3D;AACAe,IAAAA,uBAAAA,CAAwBrB,gBAAiC,EAAiB;QACxE,OAAO,IAAI,CAACsB,6BAA6B,EAAA;AAC3C;AACAC,IAAAA,qBAAAA,CACEjB,eAAgC,EAChCkB,KAA4B,EAC5BC,QAAqB,EACrB;AACA,QAAA,OAAOF,sBAAsBC,KAAOC,EAAAA,QAAAA,EAAUnB,eAAgBM,CAAAA,SAAS,CAAEc,MAAM,CAAA;AACjF;IACAC,gBACErB,CAAAA,eAAgC,EAChCkB,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClBC,KAAkB,EAClB;AACA,QAAA,MAAMC,wBAA2B,GAAA,sBAAA;QACjC,MAAMC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CACLJ,wBACA,EAAA;AAACC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA,CAAA;AAAUL,YAAAA,EAAAA,CAAGM,GAAG,CAAC,OAAA;SAAS,EAC7D,WAAA;AACE,YAAA,IAAI,CAACC,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;YACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,YAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACkB,GAAG,CAAC,IAAI,CAACX,QAAQ,EAAE,WAAA;AACtB,gBAAA,IAAI,CAACL,EAAE,CAACiB,UAAU,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAAC5B,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;AACtE,gBAAA,IAAI,CAACU,WAAW,CAACa,CAAC,GAAGK,qBAAqB,IAAI,EAAE,IAAI,CAAClB,WAAW,CAACa,CAAC,EAAE,IAAI,CAACG,UAAU,EAAE,IAAA,CAAA;gBACrF,IAAI,CAACF,MAAM,GAAGK,eAAAA,CACZ,IAAI,EACJrD,eAAAA,CAAgBsD,SAAS,EACzBtD,eAAgBM,CAAAA,SAAS,CAAEc,MAAM,EACjCQ,IAAK1C,CAAAA,WAAW,EAChB,IAAI,CAACgD,WAAW,EAChB,IAAI,CAACV,KAAK,CAAA;AAEd,aAAA,CAAA;AACA,YAAA,IAAI,CAAC+B,OAAO,CAAC,IAAI,CAACP,MAAM,CAAA;AAC1B,SAAA,CAAA;AAEF,QAAA,OAAOtB,GAAG8B,cAAc,EAAE,CAAC/B,wBAAyB,CAAA,CAACH,cAAcC,KAAOC,EAAAA,KAAAA,CAAAA;AAC5E;AACAiC,IAAAA,aAAAA,CACEzD,eAAgC,EAChCkB,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClB;AACA,QAAA,MAAMmC,qBAAwB,GAAA,mBAAA;QAC9B,MAAMhC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAAC6B,qBAAuB,EAAA;AAAChC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA;SAAS,EAAE,WAAA;YAC3E,IAAI/B,eAAAA,CAAgBsD,SAAS,KAAKK,gBAAkB,EAAA;AAClD,gBAAA,IAAI,CAAC1B,EAAE,CAAC2B,GAAG,GAAGlC,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAACvC,YAAY,CAACwC,GAAG,EAAEC,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAEF,GAAG,CAAA;gBACpG,IAAIlC,IAAAA,CAAK3B,kBAAkB,CAACD,eAAkB,CAAA,EAAA;oBAC5C,IAAI,CAACiC,EAAE,CAACgC,OAAO,GAAGF,aAAaG,qBAAqB,CAAC,IAAI,CAAA,CAAEC,EAAE;AAC7D,oBAAA,IAAI,CAAClC,EAAE,CAACmC,IAAI,GAAG1C,GAAG2C,GAAG,CAAC3C,EAAG2C,CAAAA,GAAG,CAAC3C,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAACV,GAAG,CAACjB,CAAC,CAAA,EAAGjB,GAAG4C,GAAG,CAAC,IAAI,CAACV,GAAG,CAACf,CAAC,CAAInB,CAAAA,EAAAA,EAAAA,CAAG4C,GAAG,CAAC,IAAI,CAACV,GAAG,CAACb,CAAC,CAAA,CAAA;AACvF,oBAAA,IAAI,CAACd,EAAE,CAACsC,QAAQ,GAAGR,aAAaS,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAACJ,IAAI,EAAE,IAAI,CAACH,OAAO,CAAA;AACpF,oBAAA,IAAI,CAAChC,EAAE,CAACiB,UAAU,GAAGuB,iBAAAA,CACnBzE,eAAgBsD,CAAAA,SAAS,EACzB,IAAI,EACJ5B,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACiC,IAAI,EAAEL,YAAaC,CAAAA,iCAAiC,CAAC,IAAI,CAAE5B,CAAAA,CAAC,CACxE,EAAA,IAAI,CAACb,KAAK,EACV,IAAA,CAAA;AAEF,oBAAA,IAAI,CAACgC,OAAO,CAAC3B,KAAK8C,eAAe,CAAC1E,iBAAiB,IAAI,EAAE,IAAI,CAAC4D,GAAG,EAAE,IAAI,CAACW,QAAQ,EAAE,IAAI,CAACrB,UAAU,CAAA,CAAA;iBAC5F,MAAA;oBACL,IAAI,CAACjB,EAAE,CAACsC,QAAQ,GAAG7C,EAAGS,CAAAA,GAAG,CACvBT,EAAGiD,CAAAA,MAAM,CAAC,IAAI,CAACf,GAAG,CAClBG,EAAAA,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAE5B,CAAC,CAAA;AAExD,oBAAA,IAAI,CAACH,EAAE,CAACiB,UAAU,GAAGuB,iBAAAA,CACnBzE,gBAAgBsD,SAAS,EACzB,IAAI,EACJ,IAAI,CAACiB,QAAQ,EACb,IAAI,CAAChD,KAAK,EACV,IAAA,CAAA;AAEF,oBAAA,IAAI,CAACgC,OAAO,CAAC3B,KAAK8C,eAAe,CAAC1E,iBAAiB,IAAI,EAAE,IAAI,CAAC4D,GAAG,EAAE,IAAI,CAACW,QAAQ,EAAE,IAAI,CAACrB,UAAU,CAAA,CAAA;AACnG;aACK,MAAA;AACL,gBAAA,IAAI,CAACjB,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;gBACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,gBAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,gBAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;AAC1B,gBAAA,IAAI,CAACkB,GAAG,CAAC,IAAI,CAACX,QAAQ,EAAE,WAAA;oBACtB,IAAI,CAACL,EAAE,CAACiB,UAAU,GAAGuB,iBACnBzE,CAAAA,eAAAA,CAAgBsD,SAAS,EACzB,IAAI,EACJ,IAAI,CAACpB,WAAW,CAACa,CAAC,EAClB,IAAI,CAACxB,KAAK,EACV,KAAA,CAAA;AAEF,oBAAA,IAAI,CAACW,WAAW,CAACa,CAAC,GAAGK,qBAAqB,IAAI,EAAE,IAAI,CAAClB,WAAW,CAACa,CAAC,EAAE,IAAI,CAACG,UAAU,EAAE,IAAA,CAAA;AACrF,oBAAA,IAAI,CAACF,MAAM,GAAGK,gBACZ,IAAI,EACJrD,gBAAgBsD,SAAS,EACzBtD,gBAAgBM,SAAS,CAAEc,MAAM,EACjCQ,IAAAA,CAAK1C,WAAW,EAChB,IAAI,CAACgD,WAAW,CAAA;AAEpB,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACqB,OAAO,CAAC,IAAI,CAACP,MAAM,CAAA;AAC1B;AACF,SAAA,CAAA;AACA,QAAA,OAAOtB,GAAG8B,cAAc,EAAE,CAACE,qBAAAA,CAAsB,CAACpC,YAAcC,EAAAA,KAAAA,CAAAA;AAClE;AACAtB,IAAAA,kBAAAA,CAAmBP,gBAAiC,EAAE;QACpD,OAAOkF,SAAAA,EAAAA,CAAYC,IAAI,KAAK,OAAA;AAC9B;qBAEAH,eACE1E,CAAAA,eAAgC,EAChCkB,KAA4B,EAC5B4D,MAAmB,EACnB/B,CAAc,EACdgC,IAAiB,EACjB;QACA,MAAMC,uBAAAA,GAA0B,CAAC,sBAAsB,CAAC;QACxD,MAAMtD,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAACmD,uBAAyB,EAAA;AAACtD,YAAAA,EAAAA,CAAGuD,IAAI,CAAC,QAAA,CAAA;AAAWvD,YAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,YAAAA,EAAAA,CAAGK,KAAK,CAAC,MAAA;SAAQ,EAAE,WAAA;AACrF,YAAA,MAAMmD,iBAAoBlF,GAAAA,eAAAA,CAAgBM,SAAS,CAAEc,MAAM,KAAK,YAAA;YAChE,IAAIQ,IAAAA,CAAK3B,kBAAkB,CAACD,eAAkB,CAAA,EAAA;AAC5C,gBAAA,IAAI,CAACuD,OAAO,CACV7B,EAAAA,CAAGyD,KAAK,CACNzD,EAAG0D,CAAAA,yBAAyB,CAC1BrB,YAAAA,CAAahE,YAAY,CAAC,IAAI,CAC9B,EAAA,IAAI,CAAC+E,MAAM,EACX1B,oBAAAA,CAAqB,IAAI,EAAE,IAAI,CAACL,CAAC,EAAE,IAAI,CAACgC,IAAI,EAAE,QAEhD,CACA,EAAA,CAAA,CAAA,CAAA;aAGC,MAAA;AACL,gBAAA,IAAI,CAAC9C,EAAE,CAACoD,SAAS,GAAG3D,GAAG4D,kBAAkB,CAACvB,YAAahE,CAAAA,YAAY,CAAC,IAAI,CAAA,EAAG,IAAI,CAAC+E,MAAM,EAAE,CAAA,CAAA;AACxF,gBAAA,IAAI,CAACI,iBAAmB,EAAA;oBACtB,IAAI,CAACG,SAAS,CAAC1C,CAAC,GAAG4C,8BAA8B,IAAI,EAAE,IAAI,CAACF,SAAS,CAAA;AACvE;AACA,gBAAA,IAAI,CAACpD,EAAE,CAACsC,QAAQ,GAAG7C,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACd,CAAC,EAAE,IAAI,CAACgC,IAAI,CAAA;AAC3C,gBAAA,IAAI,CAACxB,OAAO,CAAC7B,EAAAA,CAAG8D,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE,IAAI,CAACc,SAAS,CAAC1C,CAAC,CAAA,CAAA;AACtD;AACF,SAAA,CAAA;AACA,QAAA,OAAOjB,GAAG8B,cAAc,EAAE,CAACwB,uBAAwB,CAAA,CAACF,QAAQ/B,CAAGgC,EAAAA,IAAAA,CAAAA;AACjE;AACA,qBACAU,kBAAAA,CACEzF,eAAgC,EAChCkB,KAA4B,EAC5B4D,MAAmB,EACnBtD,KAAkB,EAClBuB,CAAc,EACdgC,IAAiB,EACjB;AACA,QAAA,MAAMW,0BAA6B,GAAA,2BAAA;QACnC,MAAMhE,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CACL6D,0BACA,EAAA;AAAChE,YAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,YAAAA,EAAAA,CAAGM,GAAG,CAAC,OAAA,CAAA;AAAUN,YAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,YAAAA,EAAAA,CAAGK,KAAK,CAAC,MAAA;SAAQ,EACrE,WAAA;AACE,YAAA,MAAMmD,iBAAoBlF,GAAAA,eAAAA,CAAgBM,SAAS,CAAEc,MAAM,KAAK,YAAA;AAChE,YAAA,IAAI,CAACa,EAAE,CAACsC,QAAQ,GAAGnB,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAACL,CAAC,EAAE,IAAI,CAACgC,IAAI,EAAE,IAAA,CAAA;YACjE,IAAInD,IAAAA,CAAK3B,kBAAkB,CAACD,eAAkB,CAAA,EAAA;AAC5C,gBAAA,IAAIA,eAAgBM,CAAAA,SAAS,CAAEqF,gBAAgB,EAAI,EAAA;AACjD,oBAAA,IAAI,CAACpC,OAAO,CACV7B,EAAAA,CAAGyD,KAAK,CACNzD,EAAGkE,CAAAA,8BAA8B,CAC/B7B,YAAAA,CAAahE,YAAY,CAAC,IAAI,CAAA,EAC9B,IAAI,CAAC+E,MAAM,CAACX,EAAE,EACd,IAAI,CAAC3C,KAAK,EACV,IAAI,CAAC+C,QAAQ,CAAA,EAEf,CACA,EAAA,CAAA,CAAA,CAAA;iBAGC,MAAA;oBACL,IAAI,CAAChB,OAAO,CACV7B,EAAGyD,CAAAA,KAAK,CACNzD,EAAG0D,CAAAA,yBAAyB,CAACrB,YAAAA,CAAahE,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC+E,MAAM,CAACX,EAAE,EAAE,IAAI,CAACI,QAAQ,CAAA,EAC3F,CACA,EAAA,CAAA,CAAA,CAAA;AAGN;aACK,MAAA;AACL,gBAAA,IAAIvE,eAAgBM,CAAAA,SAAS,CAAEqF,gBAAgB,EAAI,EAAA;oBACjD,IAAI,CAAC1D,EAAE,CAACoD,SAAS,GAAG3D,EAAGmE,CAAAA,uBAAuB,CAC5C9B,YAAAA,CAAahE,YAAY,CAAC,IAAI,CAC9B,EAAA,IAAI,CAAC+E,MAAM,CAACX,EAAE,EACd,IAAI,CAAC3C,KAAK,EACV,CAAA,CAAA;iBAEG,MAAA;AACL,oBAAA,IAAI,CAACS,EAAE,CAACoD,SAAS,GAAG3D,EAAAA,CAAG4D,kBAAkB,CAACvB,YAAAA,CAAahE,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC+E,MAAM,CAACX,EAAE,EAAE,CAAA,CAAA;AAC7F;AACA,gBAAA,IAAI,CAACe,iBAAmB,EAAA;oBACtB,IAAI,CAACG,SAAS,CAAC1C,CAAC,GAAG4C,8BAA8B,IAAI,EAAE,IAAI,CAACF,SAAS,CAAA;AACvE;AACA,gBAAA,IAAI,CAAC9B,OAAO,CACVuC,SAAAA,GAAYpE,EAAG8D,CAAAA,IAAI,CAAC,IAAI,CAACH,SAAS,CAAC1C,CAAC,EAAE,IAAI,CAAC4B,QAAQ,CAAI7C,GAAAA,EAAAA,CAAG8D,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE,IAAI,CAACc,SAAS,CAAC1C,CAAC,CAAA,CAAA;AAElG;AACF,SAAA,CAAA;QAEF,OAAOjB,EAAAA,CAAG8B,cAAc,EAAE,CAACkC,2BAA2B,CAACZ,MAAAA,EAAQtD,OAAOuB,CAAGgC,EAAAA,IAAAA,CAAAA;AAC3E;AACF;;;;"}
1
+ {"version":3,"file":"pcf_opt.js","sources":["../../src/shadow/pcf_opt.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport {\r\n applyShadowDepthBias,\r\n computeShadowMapDepth,\r\n filterShadowPCF,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFOPT extends ShadowImpl {\r\n protected _kernelSize: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(kernelSize?: number) {\r\n super();\r\n this._kernelSize = kernelSize ?? 5;\r\n this._shadowSampler = null;\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n this._kernelSize = val;\r\n }\r\n getType() {\r\n return 'pcf-opt' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._kernelSize;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return shadowMapParams.shadowMapFramebuffer!.getDepthAttachment() as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(true) || null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return 1;\r\n }\r\n setDepthScale(_val: number) {}\r\n getShaderHash() {\r\n return `${this._kernelSize}`;\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n return null;\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return this.preferredShadowMapDepthFormat();\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.split\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return true;\r\n }\r\n /** @internal */\r\n sampleShadowMap(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMapOPT`;\r\n const pb = scope.$builder;\r\n pb.func(funcNameSampleShadowMap, [pb.vec3('coords'), pb.float('z'), pb.float('bias')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n applyShadowDepthBias(this, this.z, this.bias, true)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMOPT';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n this.$l.distance = applyShadowDepthBias(this, this.z, this.bias, true);\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFOPT","ShadowImpl","_kernelSize","_shadowSampler","kernelSize","val","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","getParams","out","Vector4","zero","getShadowMap","shadowMapParams","shadowMapFramebuffer","getDepthAttachment","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","getShadowMapDepthFormat","preferredShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","shadowCoordDepthInRange","z","shadow","$if","shadowBias","computeShadowBiasCSM","applyShadowDepthBias","filterShadowPCF","lightType","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","sub","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","max","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","useNativeShadowMap","coords","bias","funcNameSampleShadowMap","vec3","clamp","textureSampleCompareLevel","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel"],"mappings":";;;;;;;AAgBA,iBACO,MAAMA,MAAeC,SAAAA,UAAAA,CAAAA;IAChBC,WAAoB;IACpBC,cAAyC;AACnD,IAAA,WAAA,CAAYC,UAAmB,CAAE;QAC/B,KAAK,EAAA;QACL,IAAI,CAACF,WAAW,GAAGE,UAAc,IAAA,CAAA;QACjC,IAAI,CAACD,cAAc,GAAG,IAAA;AACxB;AACA,IAAA,IAAIC,UAAa,GAAA;QACf,OAAO,IAAI,CAACF,WAAW;AACzB;IACA,IAAIE,UAAAA,CAAWC,GAAG,EAAE;AAClBA,QAAAA,GAAAA,GAAMA,QAAQ,CAAKA,IAAAA,GAAAA,KAAQ,CAAKA,IAAAA,GAAAA,KAAQ,IAAI,CAAIA,GAAAA,GAAAA;QAChD,IAAI,CAACH,WAAW,GAAGG,GAAAA;AACrB;IACAC,OAAU,GAAA;QACR,OAAO,SAAA;AACT;IACAC,OAAU,GAAA;QACR,IAAI,CAACJ,cAAc,GAAG,IAAA;AACxB;IACAK,aAAgB,GAAA;QACd,OAAO,KAAA;AACT;AACAC,IAAAA,kBAAAA,CAAmBC,gBAAiC,EAAE;QACpD,OAAO,IAAI,CAACR,WAAW;AACzB;AACAS,IAAAA,SAAAA,CAAUC,GAAa,EAAE;QACvB,OAAOA,GAAAA,IAAOC,QAAQC,IAAI,EAAA;AAC5B;AACAC,IAAAA,YAAAA,CAAaC,eAAgC,EAAE;QAC7C,OAAOA,eAAAA,CAAgBC,oBAAoB,CAAEC,kBAAkB,EAAA;AACjE;AACAC,IAAAA,iBAAAA,CAAkBH,eAAgC,EAAE;AAClDA,QAAAA,eAAAA,CAAgBI,SAAS,GAAG,IAAI,CAACL,YAAY,CAACC,eAAAA,CAAAA;AAC9CA,QAAAA,eAAAA,CAAgBK,gBAAgB,GAAGL,eAAAA,CAAgBI,SAAS,EAAEE,kBAAkB,IAAS,CAAA,IAAA,IAAA;AAC3F;AACAC,IAAAA,mBAAAA,GAAsB;IACtBC,aAAgB,GAAA;QACd,OAAO,CAAA;AACT;IACAC,aAAcC,CAAAA,IAAY,EAAE;IAC5BC,aAAgB,GAAA;AACd,QAAA,OAAO,CAAG,EAAA,IAAI,CAACzB,WAAW,CAAE,CAAA;AAC9B;AACA0B,IAAAA,uBAAAA,CAAwBlB,gBAAiC,EAA2B;QAClF,OAAO,IAAA;AACT;AACAmB,IAAAA,uBAAAA,CAAwBnB,gBAAiC,EAAiB;QACxE,OAAO,IAAI,CAACoB,6BAA6B,EAAA;AAC3C;AACAC,IAAAA,qBAAAA,CACEf,eAAgC,EAChCgB,KAA4B,EAC5BC,QAAqB,EACrB;AACA,QAAA,OAAOF,sBAAsBC,KAAOC,EAAAA,QAAAA,EAAUjB,eAAgBI,CAAAA,SAAS,CAAEc,MAAM,CAAA;AACjF;IACAC,gBACEnB,CAAAA,eAAgC,EAChCgB,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClBC,KAAkB,EAClB;AACA,QAAA,MAAMC,wBAA2B,GAAA,sBAAA;QACjC,MAAMC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CACLJ,wBACA,EAAA;AAACC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA,CAAA;AAAUL,YAAAA,EAAAA,CAAGM,GAAG,CAAC,OAAA;SAAS,EAC7D,WAAA;AACE,YAAA,IAAI,CAACC,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;YACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,YAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACkB,GAAG,CAAC,IAAI,CAACX,QAAQ,EAAE,WAAA;AACtB,gBAAA,IAAI,CAACL,EAAE,CAACiB,UAAU,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAAC5B,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;AACtE,gBAAA,IAAI,CAACU,WAAW,CAACa,CAAC,GAAGK,qBAAqB,IAAI,EAAE,IAAI,CAAClB,WAAW,CAACa,CAAC,EAAE,IAAI,CAACG,UAAU,EAAE,IAAA,CAAA;gBACrF,IAAI,CAACF,MAAM,GAAGK,eAAAA,CACZ,IAAI,EACJnD,eAAAA,CAAgBoD,SAAS,EACzBpD,eAAgBI,CAAAA,SAAS,CAAEc,MAAM,EACjCQ,IAAKxC,CAAAA,WAAW,EAChB,IAAI,CAAC8C,WAAW,EAChB,IAAI,CAACV,KAAK,CAAA;AAEd,aAAA,CAAA;AACA,YAAA,IAAI,CAAC+B,OAAO,CAAC,IAAI,CAACP,MAAM,CAAA;AAC1B,SAAA,CAAA;AAEF,QAAA,OAAOtB,GAAG8B,cAAc,EAAE,CAAC/B,wBAAyB,CAAA,CAACH,cAAcC,KAAOC,EAAAA,KAAAA,CAAAA;AAC5E;AACAiC,IAAAA,aAAAA,CACEvD,eAAgC,EAChCgB,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClB;AACA,QAAA,MAAMmC,qBAAwB,GAAA,mBAAA;QAC9B,MAAMhC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAAC6B,qBAAuB,EAAA;AAAChC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA;SAAS,EAAE,WAAA;YAC3E,IAAI7B,eAAAA,CAAgBoD,SAAS,KAAKK,gBAAkB,EAAA;AAClD,gBAAA,IAAI,CAAC1B,EAAE,CAAC2B,GAAG,GAAGlC,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAACvC,YAAY,CAACwC,GAAG,EAAEC,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAEF,GAAG,CAAA;gBACpG,IAAI,CAAC7B,EAAE,CAACgC,OAAO,GAAGF,aAAaG,qBAAqB,CAAC,IAAI,CAAA,CAAEC,EAAE;AAC7D,gBAAA,IAAI,CAAClC,EAAE,CAACmC,IAAI,GAAG1C,GAAG2C,GAAG,CAAC3C,EAAG2C,CAAAA,GAAG,CAAC3C,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAACV,GAAG,CAACjB,CAAC,CAAA,EAAGjB,GAAG4C,GAAG,CAAC,IAAI,CAACV,GAAG,CAACf,CAAC,CAAInB,CAAAA,EAAAA,EAAAA,CAAG4C,GAAG,CAAC,IAAI,CAACV,GAAG,CAACb,CAAC,CAAA,CAAA;AACvF,gBAAA,IAAI,CAACd,EAAE,CAACsC,QAAQ,GAAGR,aAAaS,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAACJ,IAAI,EAAE,IAAI,CAACH,OAAO,CAAA;AACpF,gBAAA,IAAI,CAAChC,EAAE,CAACiB,UAAU,GAAGuB,iBAAAA,CACnBvE,eAAgBoD,CAAAA,SAAS,EACzB,IAAI,EACJ5B,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACiC,IAAI,EAAEL,YAAaC,CAAAA,iCAAiC,CAAC,IAAI,CAAE5B,CAAAA,CAAC,CACxE,EAAA,IAAI,CAACb,KAAK,EACV,IAAA,CAAA;AAEF,gBAAA,IAAI,CAACgC,OAAO,CAAC3B,KAAK8C,eAAe,CAACxE,iBAAiB,IAAI,EAAE,IAAI,CAAC0D,GAAG,EAAE,IAAI,CAACW,QAAQ,EAAE,IAAI,CAACrB,UAAU,CAAA,CAAA;aAC5F,MAAA;AACL,gBAAA,IAAI,CAACjB,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;gBACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,gBAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,gBAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;AAC1B,gBAAA,IAAI,CAACkB,GAAG,CAAC,IAAI,CAACX,QAAQ,EAAE,WAAA;oBACtB,IAAI,CAACL,EAAE,CAACiB,UAAU,GAAGuB,iBACnBvE,CAAAA,eAAAA,CAAgBoD,SAAS,EACzB,IAAI,EACJ,IAAI,CAACpB,WAAW,CAACa,CAAC,EAClB,IAAI,CAACxB,KAAK,EACV,KAAA,CAAA;AAEF,oBAAA,IAAI,CAACW,WAAW,CAACa,CAAC,GAAGK,qBAAqB,IAAI,EAAE,IAAI,CAAClB,WAAW,CAACa,CAAC,EAAE,IAAI,CAACG,UAAU,EAAE,IAAA,CAAA;AACrF,oBAAA,IAAI,CAACF,MAAM,GAAGK,gBACZ,IAAI,EACJnD,gBAAgBoD,SAAS,EACzBpD,gBAAgBI,SAAS,CAAEc,MAAM,EACjCQ,IAAAA,CAAKxC,WAAW,EAChB,IAAI,CAAC8C,WAAW,CAAA;AAEpB,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACqB,OAAO,CAAC,IAAI,CAACP,MAAM,CAAA;AAC1B;AACF,SAAA,CAAA;AACA,QAAA,OAAOtB,GAAG8B,cAAc,EAAE,CAACE,qBAAAA,CAAsB,CAACpC,YAAcC,EAAAA,KAAAA,CAAAA;AAClE;AACAoD,IAAAA,kBAAAA,CAAmB/E,gBAAiC,EAAE;QACpD,OAAO,IAAA;AACT;qBAEA8E,eACExE,CAAAA,eAAgC,EAChCgB,KAA4B,EAC5B0D,MAAmB,EACnB7B,CAAc,EACd8B,IAAiB,EACjB;QACA,MAAMC,uBAAAA,GAA0B,CAAC,sBAAsB,CAAC;QACxD,MAAMpD,EAAAA,GAAKR,MAAMS,QAAQ;QACzBD,EAAGG,CAAAA,IAAI,CAACiD,uBAAyB,EAAA;AAACpD,YAAAA,EAAAA,CAAGqD,IAAI,CAAC,QAAA,CAAA;AAAWrD,YAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,YAAAA,EAAAA,CAAGK,KAAK,CAAC,MAAA;SAAQ,EAAE,WAAA;AACrF,YAAA,IAAI,CAACwB,OAAO,CACV7B,EAAAA,CAAGsD,KAAK,CACNtD,EAAGuD,CAAAA,yBAAyB,CAC1BlB,YAAAA,CAAa9D,YAAY,CAAC,IAAI,CAC9B,EAAA,IAAI,CAAC2E,MAAM,EACXxB,oBAAAA,CAAqB,IAAI,EAAE,IAAI,CAACL,CAAC,EAAE,IAAI,CAAC8B,IAAI,EAAE,QAEhD,CACA,EAAA,CAAA,CAAA,CAAA;AAGN,SAAA,CAAA;AACA,QAAA,OAAOnD,GAAG8B,cAAc,EAAE,CAACsB,uBAAwB,CAAA,CAACF,QAAQ7B,CAAG8B,EAAAA,IAAAA,CAAAA;AACjE;AACA,qBACAK,kBAAAA,CACEhF,eAAgC,EAChCgB,KAA4B,EAC5B0D,MAAmB,EACnBpD,KAAkB,EAClBuB,CAAc,EACd8B,IAAiB,EACjB;AACA,QAAA,MAAMM,0BAA6B,GAAA,2BAAA;QACnC,MAAMzD,EAAAA,GAAKR,MAAMS,QAAQ;QACzBD,EAAGG,CAAAA,IAAI,CACLsD,0BACA,EAAA;AAACzD,YAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,YAAAA,EAAAA,CAAGM,GAAG,CAAC,OAAA,CAAA;AAAUN,YAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,YAAAA,EAAAA,CAAGK,KAAK,CAAC,MAAA;SAAQ,EACrE,WAAA;AACE,YAAA,IAAI,CAACE,EAAE,CAACsC,QAAQ,GAAGnB,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAACL,CAAC,EAAE,IAAI,CAAC8B,IAAI,EAAE,IAAA,CAAA;AACjE,YAAA,IAAI3E,eAAgBI,CAAAA,SAAS,CAAE8E,gBAAgB,EAAI,EAAA;AACjD,gBAAA,IAAI,CAAC7B,OAAO,CACV7B,EAAAA,CAAGsD,KAAK,CACNtD,EAAG2D,CAAAA,8BAA8B,CAC/BtB,YAAAA,CAAa9D,YAAY,CAAC,IAAI,CAAA,EAC9B,IAAI,CAAC2E,MAAM,CAACT,EAAE,EACd,IAAI,CAAC3C,KAAK,EACV,IAAI,CAAC+C,QAAQ,CAAA,EAEf,CACA,EAAA,CAAA,CAAA,CAAA;aAGC,MAAA;gBACL,IAAI,CAAChB,OAAO,CACV7B,EAAGsD,CAAAA,KAAK,CACNtD,EAAGuD,CAAAA,yBAAyB,CAAClB,YAAAA,CAAa9D,YAAY,CAAC,IAAI,CAAG,EAAA,IAAI,CAAC2E,MAAM,CAACT,EAAE,EAAE,IAAI,CAACI,QAAQ,CAAA,EAC3F,CACA,EAAA,CAAA,CAAA,CAAA;AAGN;AACF,SAAA,CAAA;QAEF,OAAO7C,EAAAA,CAAG8B,cAAc,EAAE,CAAC2B,2BAA2B,CAACP,MAAAA,EAAQpD,OAAOuB,CAAG8B,EAAAA,IAAAA,CAAAA;AAC3E;AACF;;;;"}
@@ -1,11 +1,9 @@
1
1
  import { ShadowImpl } from './shadow_impl.js';
2
2
  import { computeShadowMapDepth, ndcToShadowCoord, shadowCoordDepthInRange, applyShadowDepthBias, filterShadowPCF } from '../shaders/shadow.js';
3
- import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
4
3
  import { LIGHT_TYPE_POINT } from '../values.js';
5
4
  import { ShaderHelper } from '../material/shader/helper.js';
6
5
  import { computeShadowBiasCSM, computeShadowBias } from './shader.js';
7
- import { getDevice } from '../app/api.js';
8
- import { Vector4, REVERSE_Z } from '@zephyr3d/base';
6
+ import { Vector4 } from '@zephyr3d/base';
9
7
 
10
8
  /** @internal */ class PCFPD extends ShadowImpl {
11
9
  static SHADER_VERSION = 3;
@@ -49,11 +47,11 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
49
47
  return Math.max(this._sampleRadius + 1, this.getPCFKernelSize());
50
48
  }
51
49
  getShadowMap(shadowMapParams) {
52
- return this.useNativeShadowMap(shadowMapParams) ? shadowMapParams.shadowMapFramebuffer.getDepthAttachment() : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];
50
+ return shadowMapParams.shadowMapFramebuffer.getDepthAttachment();
53
51
  }
54
52
  doUpdateResources(shadowMapParams) {
55
53
  shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);
56
- shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;
54
+ shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(true) || null;
57
55
  }
58
56
  postRenderShadowMap() {}
59
57
  getDepthScale() {
@@ -65,13 +63,8 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
65
63
  getShaderHash() {
66
64
  return `${PCFPD.SHADER_VERSION}-${this._tapCount}-${this._sampleRadius}`;
67
65
  }
68
- getShadowMapColorFormat(shadowMapParams) {
69
- if (this.useNativeShadowMap(shadowMapParams)) {
70
- return null;
71
- } else {
72
- const device = getDevice();
73
- return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? device.type === 'webgl' ? 'rgba16f' : 'r16f' : device.getDeviceCaps().textureCaps.supportFloatColorBuffer ? device.type === 'webgl' ? 'rgba32f' : 'r32f' : 'rgba8unorm';
74
- }
66
+ getShadowMapColorFormat(_shadowMapParams) {
67
+ return null;
75
68
  }
76
69
  getShadowMapDepthFormat(_shadowMapParams) {
77
70
  return this.preferredShadowMapDepthFormat();
@@ -112,17 +105,11 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
112
105
  ], function() {
113
106
  if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {
114
107
  this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);
115
- if (that.useNativeShadowMap(shadowMapParams)) {
116
- this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
117
- this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));
118
- this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);
119
- this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
120
- this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
121
- } else {
122
- this.$l.distance = pb.div(pb.length(this.dir), ShaderHelper.getLightPositionAndRangeForShadow(this).w);
123
- this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.distance, this.NdotL, true);
124
- this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
125
- }
108
+ this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
109
+ this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));
110
+ this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);
111
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
112
+ this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
126
113
  } else {
127
114
  this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);
128
115
  this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);
@@ -139,59 +126,34 @@ import { Vector4, REVERSE_Z } from '@zephyr3d/base';
139
126
  return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);
140
127
  }
141
128
  useNativeShadowMap(_shadowMapParams) {
142
- return getDevice().type !== 'webgl';
129
+ return true;
143
130
  }
144
131
  /** @internal */ sampleShadowMap(shadowMapParams, scope, coords, z, bias) {
145
132
  const funcNameSampleShadowMap = 'lib_sampleShadowMapPD';
146
133
  const pb = scope.$builder;
147
- const that = this;
148
134
  pb.func(funcNameSampleShadowMap, [
149
135
  pb.vec3('coords'),
150
136
  pb.float('z'),
151
137
  pb.float('bias')
152
138
  ], function() {
153
- const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';
154
- if (that.useNativeShadowMap(shadowMapParams)) {
155
- this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, applyShadowDepthBias(this, this.z, this.bias, true)), 0, 1));
156
- } else {
157
- this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);
158
- if (!floatDepthTexture) {
159
- this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
160
- }
161
- this.$l.distance = pb.sub(this.z, this.bias);
162
- this.$return(pb.step(this.distance, this.shadowTex.x));
163
- }
139
+ this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, applyShadowDepthBias(this, this.z, this.bias, true)), 0, 1));
164
140
  });
165
141
  return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias);
166
142
  }
167
143
  /** @internal */ sampleShadowMapCSM(shadowMapParams, scope, coords, split, z, bias) {
168
144
  const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMPD';
169
145
  const pb = scope.$builder;
170
- const that = this;
171
146
  pb.func(funcNameSampleShadowMapCSM, [
172
147
  pb.vec4('coords'),
173
148
  pb.int('split'),
174
149
  pb.float('z'),
175
150
  pb.float('bias')
176
151
  ], function() {
177
- const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';
178
152
  this.$l.distance = applyShadowDepthBias(this, this.z, this.bias, true);
179
- if (that.useNativeShadowMap(shadowMapParams)) {
180
- if (shadowMapParams.shadowMap.isTexture2DArray()) {
181
- this.$return(pb.clamp(pb.textureArraySampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, this.distance), 0, 1));
182
- } else {
183
- this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance), 0, 1));
184
- }
153
+ if (shadowMapParams.shadowMap.isTexture2DArray()) {
154
+ this.$return(pb.clamp(pb.textureArraySampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, this.distance), 0, 1));
185
155
  } else {
186
- if (shadowMapParams.shadowMap.isTexture2DArray()) {
187
- this.$l.shadowTex = pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.split, 0);
188
- } else {
189
- this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);
190
- }
191
- if (!floatDepthTexture) {
192
- this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
193
- }
194
- this.$return(REVERSE_Z ? pb.step(this.shadowTex.x, this.distance) : pb.step(this.distance, this.shadowTex.x));
156
+ this.$return(pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance), 0, 1));
195
157
  }
196
158
  });
197
159
  return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias);