@zephyr3d/scene 0.9.26 → 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 (506) 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 +146 -30
  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 +300 -56
  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 +177 -3
  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 +178 -200
  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 +30475 -19865
  109. package/dist/index.js +67 -12
  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/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"noise.js","sources":["../../src/shaders/noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Generate random float value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash11(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash11';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.x = pb.fract(pb.mul(this.p, 0.1031));\r\n this.x = pb.mul(this.x, pb.add(this.x, 33.33));\r\n this.x = pb.mul(this.x, pb.add(this.x, this.x));\r\n this.$return(pb.fract(this.x));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash21(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash21';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash31(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash31';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.zyx, pb.vec3(31.32))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash12(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash12';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash22(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash22';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash32(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash32';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash13(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash13';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash23(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash23';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p.xyx));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash33(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash33';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate uniform distributed white noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function whiteNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_whiteNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.dot(this.p, pb.vec2(12.9898, 78.233))), 43758.5453)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate value noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function valueNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_valueNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.i = pb.floor(this.p);\r\n this.$l.f = pb.fract(this.p);\r\n this.f = pb.mul(this.f, this.f, pb.sub(pb.vec2(3), pb.mul(this.f, 2)));\r\n this.$l.c0 = this.i;\r\n this.$l.c1 = pb.add(this.i, pb.vec2(1, 0));\r\n this.$l.c2 = pb.add(this.i, pb.vec2(0, 1));\r\n this.$l.c3 = pb.add(this.i, pb.vec2(1));\r\n this.$l.r0 = whiteNoise(this, this.c0);\r\n this.$l.r1 = whiteNoise(this, this.c1);\r\n this.$l.r2 = whiteNoise(this, this.c2);\r\n this.$l.r3 = whiteNoise(this, this.c3);\r\n this.$return(pb.mix(pb.mix(this.r0, this.r1, this.f.x), pb.mix(this.r2, this.r3, this.f.x), this.f.y));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function gradient(scope: PBInsideFunctionScope, p: PBShaderExp, t: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gradient2f';\r\n pb.func(funcName, [pb.vec2('p'), pb.float('t')], function () {\r\n this.$l.rand = hash21(this, this.p);\r\n this.$l.angle = pb.mul(pb.add(this.t, Math.PI * 2), this.rand);\r\n this.$return(pb.vec2(pb.cos(this.angle), pb.sin(this.angle)));\r\n });\r\n return scope[funcName](p, t) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 2d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise2D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n return perlinNoise3D(scope, scope.$builder.vec3(p, 0));\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 3d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcNameNoise = 'Z_perlinNoise3D';\r\n pb.func(funcNameNoise, [pb.vec3('p')], function () {\r\n this.i = pb.floor(this.p.xy);\r\n this.f = pb.sub(this.p.xy, this.i);\r\n this.u = pb.mul(this.f, this.f, pb.sub(3, pb.mul(this.f, 2)));\r\n this.h1 = gradient(this, this.i, this.p.z);\r\n this.h2 = gradient(this, pb.add(this.i, pb.vec2(1, 0)), this.p.z);\r\n this.h3 = gradient(this, pb.add(this.i, pb.vec2(0, 1)), this.p.z);\r\n this.h4 = gradient(this, pb.add(this.i, pb.vec2(1, 1)), this.p.z);\r\n this.$l.tl = pb.dot(this.h1, this.f);\r\n this.$l.tr = pb.dot(this.h2, pb.sub(this.f, pb.vec2(1, 0)));\r\n this.$l.bl = pb.dot(this.h3, pb.sub(this.f, pb.vec2(0, 1)));\r\n this.$l.br = pb.dot(this.h4, pb.sub(this.f, pb.vec2(1, 1)));\r\n this.$l.noise = pb.mix(pb.mix(this.tl, this.tr, this.u.x), pb.mix(this.bl, this.br, this.u.x), this.u.y);\r\n this.noise = pb.add(pb.mul(this.noise, 0.5), 0.5);\r\n this.$return(this.noise);\r\n });\r\n return scope[funcNameNoise](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * worley 3d noise\r\n *\r\n * @param scope - current shader scope\r\n * @param uv - uv coordinate\r\n * @param freq - frequency\r\n *\r\n * @returns worley noise value\r\n *\r\n * @public\r\n */\r\nexport function worleyNoise(scope: PBInsideFunctionScope, uv: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcNameHash = 'Z_worleyHash';\r\n // https://www.shadertoy.com/view/4sc3z2\r\n pb.func(funcNameHash, [pb.vec3('p')], function () {\r\n if (1) {\r\n this.$l.mod3 = pb.vec3(0.1031, 0.11369, 0.13787);\r\n this.$l.p3 = pb.fract(pb.mul(this.p, this.mod3));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yxz, pb.vec3(19.19))));\r\n this.$return(\r\n pb.sub(\r\n pb.mul(\r\n pb.fract(\r\n pb.vec3(\r\n pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z),\r\n pb.mul(pb.add(this.p3.x, this.p3.z), this.p3.y),\r\n pb.mul(pb.add(this.p3.y, this.p3.z), this.p3.x)\r\n )\r\n ),\r\n 2\r\n ),\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.UI0 = pb.uint(1597334673);\r\n this.$l.UI1 = pb.uint(3812015801);\r\n this.$l.UI2 = pb.uvec2(this.UI0, this.UI1);\r\n this.$l.UI3 = pb.uvec3(this.UI0, this.UI1, pb.uint(2798796415));\r\n this.$l.UIF = pb.div(1, pb.float(pb.uint(0xffffffff)));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(this.p)), this.UI3);\r\n this.q = pb.mul(pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z), this.UI3);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), this.UIF, 2), pb.vec3(1)));\r\n }\r\n });\r\n const funcNameNoise = 'Z_worleyNoise';\r\n pb.func(funcNameNoise, [pb.vec3('uv'), pb.float('freq')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n\r\n if (1 /* tilable */) {\r\n this.$l.h = pb.add(\r\n pb.mul(this[funcNameHash](pb.mod(pb.add(this.id, this.offset), pb.vec3(this.freq))), 0.4),\r\n pb.vec3(0.3)\r\n );\r\n } else {\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](pb.add(this.id, this.offset)), 0.4), pb.vec3(0.3));\r\n }\r\n this.h = pb.add(this.h, this.offset);\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcNameNoise](uv, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate worley FBM\r\n *\r\n * @param scope - current shader scope\r\n * @param p - noise coordinate\r\n * @param freq - frequency\r\n * @returns worley FBM value\r\n *\r\n * @public\r\n */\r\nexport function worleyFBM(scope: PBInsideFunctionScope, p: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_worleyFBM';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq')], function () {\r\n this.$l.n1 = worleyNoise(this, pb.mul(this.p, this.freq), this.freq);\r\n this.$l.n2 = worleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2));\r\n this.$l.n3 = worleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4));\r\n this.$l.fbm = pb.add(pb.mul(this.n1, 0.625), pb.mul(this.n2, 0.25), pb.mul(this.n3, 0.125));\r\n this.$return(pb.max(pb.sub(pb.mul(this.fbm, 1.1), pb.vec3(0.1)), pb.vec3(0)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function noise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_noise3d';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.$l.p3 = pb.add(this.p3, pb.vec3(pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33)))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate smooth 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function smoothNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_smoothNoise3D';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.cell = pb.floor(this.p);\r\n this.$l.local = pb.fract(this.p);\r\n this.$l.local = pb.mul(this.local, pb.mul(this.local, pb.sub(pb.vec3(3), pb.mul(this.local, 2))));\r\n this.$l.ldb = noise3D(this, this.cell);\r\n this.$l.rdb = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 0)));\r\n this.$l.ldf = noise3D(this, pb.add(this.cell, pb.vec3(0, 0, 1)));\r\n this.$l.rdf = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 1)));\r\n this.$l.lub = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 0)));\r\n this.$l.rub = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 0)));\r\n this.$l.luf = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 1)));\r\n this.$l.ruf = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.mix(\r\n pb.mix(\r\n pb.mix(this.ldb, this.rdb, this.local.x),\r\n pb.mix(this.ldf, this.rdf, this.local.x),\r\n this.local.z\r\n ),\r\n pb.mix(\r\n pb.mix(this.lub, this.rub, this.local.x),\r\n pb.mix(this.luf, this.ruf, this.local.x),\r\n this.local.z\r\n ),\r\n this.local.y\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Calculate interleaved gradient noise\r\n *\r\n * @param scope - current shader scope\r\n * @param c - 2d position at where to calculate noise\r\n * @returns noise value\r\n *\r\n * @public\r\n */\r\nexport function interleavedGradientNoise(scope: PBInsideFunctionScope, c: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const x = 0.06711056;\r\n const y = 0.00583715;\r\n const z = 52.9829189;\r\n return pb.fract(pb.mul(z, pb.fract(pb.dot(c, pb.vec2(x, y))))) as PBShaderExp;\r\n}\r\n"],"names":["hash11","scope","p","pb","$builder","funcName","func","float","$l","x","fract","mul","add","$return","hash21","vec2","p3","xyx","dot","yzx","vec3","y","z","hash31","zyx","hash12","xx","yz","zy","hash22","hash32","hash13","xxy","yzz","hash23","hash33","whiteNoise","sin","valueNoise","i","floor","f","sub","c0","c1","c2","c3","r0","r1","r2","r3","mix","gradient","t","rand","angle","Math","PI","cos","perlinNoise2D","perlinNoise3D","funcNameNoise","xy","u","h1","h2","h3","h4","tl","tr","bl","br","noise","worleyNoise","uv","freq","funcNameHash","mod3","yxz","id","minDist","$for","int","offset","h","mod","d","min","getGlobalScope","worleyFBM","n1","n2","n3","fbm","max","noise3D","smoothNoise3D","cell","local","ldb","rdb","ldf","rdf","lub","rub","luf","ruf","interleavedGradientNoise","c"],"mappings":"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"}
1
+ {"version":3,"file":"noise.js","sources":["../../src/shaders/noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Generate random float value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash11(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash11';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.x = pb.fract(pb.mul(this.p, 0.1031));\r\n this.x = pb.mul(this.x, pb.add(this.x, 33.33));\r\n this.x = pb.mul(this.x, pb.add(this.x, this.x));\r\n this.$return(pb.fract(this.x));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash21(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash21';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash31(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash31';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.zyx, pb.vec3(31.32))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash12(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash12';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash22(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash22';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash32(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash32';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash13(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash13';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash23(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash23';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p.xyx));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash33(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash33';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate uniform distributed white noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function whiteNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_whiteNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.dot(this.p, pb.vec2(12.9898, 78.233))), 43758.5453)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate value noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function valueNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_valueNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.i = pb.floor(this.p);\r\n this.$l.f = pb.fract(this.p);\r\n this.f = pb.mul(this.f, this.f, pb.sub(pb.vec2(3), pb.mul(this.f, 2)));\r\n this.$l.c0 = this.i;\r\n this.$l.c1 = pb.add(this.i, pb.vec2(1, 0));\r\n this.$l.c2 = pb.add(this.i, pb.vec2(0, 1));\r\n this.$l.c3 = pb.add(this.i, pb.vec2(1));\r\n this.$l.r0 = whiteNoise(this, this.c0);\r\n this.$l.r1 = whiteNoise(this, this.c1);\r\n this.$l.r2 = whiteNoise(this, this.c2);\r\n this.$l.r3 = whiteNoise(this, this.c3);\r\n this.$return(pb.mix(pb.mix(this.r0, this.r1, this.f.x), pb.mix(this.r2, this.r3, this.f.x), this.f.y));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function gradient(scope: PBInsideFunctionScope, p: PBShaderExp, t: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gradient2f';\r\n pb.func(funcName, [pb.vec2('p'), pb.float('t')], function () {\r\n this.$l.rand = hash21(this, this.p);\r\n this.$l.angle = pb.mul(pb.add(this.t, Math.PI * 2), this.rand);\r\n this.$return(pb.vec2(pb.cos(this.angle), pb.sin(this.angle)));\r\n });\r\n return scope[funcName](p, t) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 2d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise2D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n return perlinNoise3D(scope, scope.$builder.vec3(p, 0));\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 3d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcNameNoise = 'Z_perlinNoise3D';\r\n pb.func(funcNameNoise, [pb.vec3('p')], function () {\r\n this.i = pb.floor(this.p.xy);\r\n this.f = pb.sub(this.p.xy, this.i);\r\n this.u = pb.mul(this.f, this.f, pb.sub(3, pb.mul(this.f, 2)));\r\n this.h1 = gradient(this, this.i, this.p.z);\r\n this.h2 = gradient(this, pb.add(this.i, pb.vec2(1, 0)), this.p.z);\r\n this.h3 = gradient(this, pb.add(this.i, pb.vec2(0, 1)), this.p.z);\r\n this.h4 = gradient(this, pb.add(this.i, pb.vec2(1, 1)), this.p.z);\r\n this.$l.tl = pb.dot(this.h1, this.f);\r\n this.$l.tr = pb.dot(this.h2, pb.sub(this.f, pb.vec2(1, 0)));\r\n this.$l.bl = pb.dot(this.h3, pb.sub(this.f, pb.vec2(0, 1)));\r\n this.$l.br = pb.dot(this.h4, pb.sub(this.f, pb.vec2(1, 1)));\r\n this.$l.noise = pb.mix(pb.mix(this.tl, this.tr, this.u.x), pb.mix(this.bl, this.br, this.u.x), this.u.y);\r\n this.noise = pb.add(pb.mul(this.noise, 0.5), 0.5);\r\n this.$return(this.noise);\r\n });\r\n return scope[funcNameNoise](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * worley 3d noise\r\n *\r\n * @param scope - current shader scope\r\n * @param uv - uv coordinate\r\n * @param freq - frequency\r\n *\r\n * @returns worley noise value\r\n *\r\n * @public\r\n */\r\nexport function worleyNoise(scope: PBInsideFunctionScope, uv: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcNameHash = 'Z_worleyHash';\r\n // https://www.shadertoy.com/view/4sc3z2\r\n pb.func(funcNameHash, [pb.vec3('p')], function () {\r\n if (1) {\r\n this.$l.mod3 = pb.vec3(0.1031, 0.11369, 0.13787);\r\n this.$l.p3 = pb.fract(pb.mul(this.p, this.mod3));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yxz, pb.vec3(19.19))));\r\n this.$return(\r\n pb.sub(\r\n pb.mul(\r\n pb.fract(\r\n pb.vec3(\r\n pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z),\r\n pb.mul(pb.add(this.p3.x, this.p3.z), this.p3.y),\r\n pb.mul(pb.add(this.p3.y, this.p3.z), this.p3.x)\r\n )\r\n ),\r\n 2\r\n ),\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.UI0 = pb.uint(1597334673);\r\n this.$l.UI1 = pb.uint(3812015801);\r\n this.$l.UI2 = pb.uvec2(this.UI0, this.UI1);\r\n this.$l.UI3 = pb.uvec3(this.UI0, this.UI1, pb.uint(2798796415));\r\n this.$l.UIF = pb.div(1, pb.float(pb.uint(0xffffffff)));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(this.p)), this.UI3);\r\n this.q = pb.mul(pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z), this.UI3);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), this.UIF, 2), pb.vec3(1)));\r\n }\r\n });\r\n const funcNameNoise = 'Z_worleyNoise';\r\n pb.func(funcNameNoise, [pb.vec3('uv'), pb.float('freq')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n\r\n if (1 /* tilable */) {\r\n // Floored wrap: pb.mod is WGSL's truncated `%` on WebGPU, which leaves the neighbour\r\n // cell -1 at -1 instead of freq - 1 and breaks the tiling\r\n this.$l.cell = pb.add(this.id, this.offset);\r\n this.cell = pb.sub(\r\n this.cell,\r\n pb.mul(pb.vec3(this.freq), pb.floor(pb.div(this.cell, pb.vec3(this.freq))))\r\n );\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](this.cell), 0.4), pb.vec3(0.3));\r\n } else {\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](pb.add(this.id, this.offset)), 0.4), pb.vec3(0.3));\r\n }\r\n this.h = pb.add(this.h, this.offset);\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcNameNoise](uv, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate worley FBM\r\n *\r\n * @param scope - current shader scope\r\n * @param p - noise coordinate\r\n * @param freq - frequency\r\n * @returns worley FBM value\r\n *\r\n * @public\r\n */\r\nexport function worleyFBM(scope: PBInsideFunctionScope, p: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_worleyFBM';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq')], function () {\r\n this.$l.n1 = worleyNoise(this, pb.mul(this.p, this.freq), this.freq);\r\n this.$l.n2 = worleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2));\r\n this.$l.n3 = worleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4));\r\n this.$l.fbm = pb.add(pb.mul(this.n1, 0.625), pb.mul(this.n2, 0.25), pb.mul(this.n3, 0.125));\r\n this.$return(pb.max(pb.sub(pb.mul(this.fbm, 1.1), pb.vec3(0.1)), pb.vec3(0)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function noise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_noise3d';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.$l.p3 = pb.add(this.p3, pb.vec3(pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33)))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate smooth 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function smoothNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_smoothNoise3D';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.cell = pb.floor(this.p);\r\n this.$l.local = pb.fract(this.p);\r\n this.$l.local = pb.mul(this.local, pb.mul(this.local, pb.sub(pb.vec3(3), pb.mul(this.local, 2))));\r\n this.$l.ldb = noise3D(this, this.cell);\r\n this.$l.rdb = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 0)));\r\n this.$l.ldf = noise3D(this, pb.add(this.cell, pb.vec3(0, 0, 1)));\r\n this.$l.rdf = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 1)));\r\n this.$l.lub = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 0)));\r\n this.$l.rub = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 0)));\r\n this.$l.luf = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 1)));\r\n this.$l.ruf = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.mix(\r\n pb.mix(\r\n pb.mix(this.ldb, this.rdb, this.local.x),\r\n pb.mix(this.ldf, this.rdf, this.local.x),\r\n this.local.z\r\n ),\r\n pb.mix(\r\n pb.mix(this.lub, this.rub, this.local.x),\r\n pb.mix(this.luf, this.ruf, this.local.x),\r\n this.local.z\r\n ),\r\n this.local.y\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Calculate interleaved gradient noise\r\n *\r\n * @param scope - current shader scope\r\n * @param c - 2d position at where to calculate noise\r\n * @returns noise value\r\n *\r\n * @public\r\n */\r\nexport function interleavedGradientNoise(scope: PBInsideFunctionScope, c: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const x = 0.06711056;\r\n const y = 0.00583715;\r\n const z = 52.9829189;\r\n return pb.fract(pb.mul(z, pb.fract(pb.dot(c, pb.vec2(x, y))))) as PBShaderExp;\r\n}\r\n"],"names":["hash11","scope","p","pb","$builder","funcName","func","float","$l","x","fract","mul","add","$return","hash21","vec2","p3","xyx","dot","yzx","vec3","y","z","hash31","zyx","hash12","xx","yz","zy","hash22","hash32","hash13","xxy","yzz","hash23","hash33","whiteNoise","sin","valueNoise","i","floor","f","sub","c0","c1","c2","c3","r0","r1","r2","r3","mix","gradient","t","rand","angle","Math","PI","cos","perlinNoise2D","perlinNoise3D","funcNameNoise","xy","u","h1","h2","h3","h4","tl","tr","bl","br","noise","worleyNoise","uv","freq","funcNameHash","mod3","yxz","id","minDist","$for","int","offset","cell","div","h","d","min","getGlobalScope","worleyFBM","n1","n2","n3","fbm","max","noise3D","smoothNoise3D","local","ldb","rdb","ldf","rdf","lub","rub","luf","ruf","interleavedGradientNoise","c"],"mappings":"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"}
@@ -0,0 +1,309 @@
1
+ import { getSamplerOptions } from '../utility/misc.js';
2
+
3
+ /**
4
+ * Uniform names of the probe volume, see {@link declareProbeUniforms}.
5
+ * @internal
6
+ */ const PROBE_IRRADIANCE = 'zProbeIrradiance';
7
+ /** @internal */ const PROBE_VISIBILITY = 'zProbeVisibility';
8
+ /** @internal */ const PROBE_DATA = 'zProbeData';
9
+ /** @internal */ const PROBE_PARAMS = 'zProbeParams';
10
+ /** Most clipmap levels of a probe volume. @internal */ const PROBE_MAX_LEVELS = 4;
11
+ /** vec4s of {@link PROBE_PARAMS}. @internal */ const PROBE_PARAM_VEC4S = 3 + 2 * PROBE_MAX_LEVELS;
12
+ /**
13
+ * Declares the probe volume uniforms.
14
+ *
15
+ * - irradiance: rgba16f atlas of octahedral tiles, `irrTexels`² each with a one-texel border;
16
+ * rgb E/π at the fixed cache exposure (getGICacheExposure), a = cosine-weighted sky visibility.
17
+ * - visibility: rgba16f atlas of `visTexels`² tiles, (mean distance, mean squared distance).
18
+ * - data: storage buffer, one vec4 per probe (relocation offset, state); writable when `writable`.
19
+ * - params[0]: (levels, tiles per atlas row, irrTexels, visTexels),
20
+ * params[1]: (irradiance atlas size, visibility atlas size),
21
+ * params[2]: (read scale = GI intensity, normal bias, view bias, max ray distance),
22
+ * params[3 + 2l]: (world index of level l's first probe, spacing),
23
+ * params[4 + 2l]: (probes per axis of level l, first tile).
24
+ *
25
+ * Levels are camera-centred clipmap windows addressed toroidally by world index; tile index
26
+ * (also indexing `data`) = first tile + `x + nx (y + ny z)` of the texel.
27
+ * @internal
28
+ */ function declareProbeUniforms(scope, group, writable = false) {
29
+ const pb = scope.$builder;
30
+ // Static sampler so both share one sampler binding on WebGPU (texture-heavy materials
31
+ // such as water are near the 16-sampler limit)
32
+ scope[PROBE_IRRADIANCE] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));
33
+ scope[PROBE_VISIBILITY] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));
34
+ scope[PROBE_DATA] = writable ? pb.vec4[0]().storageBuffer(group) : pb.vec4[0]().storageBufferReadonly(group);
35
+ scope[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(group);
36
+ }
37
+ /** (world index of the level's first probe, spacing). @internal */ function probeLevelOrigin(scope, level) {
38
+ const pb = scope.$builder;
39
+ return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 3));
40
+ }
41
+ /** (probes per axis, first tile) of a level. @internal */ function probeLevelGrid(scope, level) {
42
+ const pb = scope.$builder;
43
+ return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 4));
44
+ }
45
+ /** Octahedral encoding of a unit vector to [-1, 1]² (Cigolle et al. 2014). @internal */ function octEncode(scope, v) {
46
+ const pb = scope.$builder;
47
+ const funcName = 'Z_octEncode';
48
+ pb.func(funcName, [
49
+ pb.vec3('v')
50
+ ], function() {
51
+ this.$l.l1 = pb.add(pb.abs(this.v.x), pb.abs(this.v.y), pb.abs(this.v.z));
52
+ this.$l.p = pb.div(this.v.xy, pb.max(this.l1, 1e-6));
53
+ this.$l.sgn = pb.vec2(this.$choice(pb.greaterThanEqual(this.p.x, 0), pb.float(1), pb.float(-1)), this.$choice(pb.greaterThanEqual(this.p.y, 0), pb.float(1), pb.float(-1)));
54
+ this.$return(this.$choice(pb.lessThan(this.v.z, 0), pb.mul(pb.sub(pb.vec2(1), pb.abs(this.p.yx)), this.sgn), this.p));
55
+ });
56
+ return scope[funcName](v);
57
+ }
58
+ /** Inverse of {@link octEncode}. @internal */ function octDecode(scope, uv) {
59
+ const pb = scope.$builder;
60
+ const funcName = 'Z_octDecode';
61
+ pb.func(funcName, [
62
+ pb.vec2('uv')
63
+ ], function() {
64
+ this.$l.v = pb.vec3(this.uv.x, this.uv.y, pb.sub(pb.sub(1, pb.abs(this.uv.x)), pb.abs(this.uv.y)));
65
+ this.$l.sgn = pb.vec2(this.$choice(pb.greaterThanEqual(this.v.x, 0), pb.float(1), pb.float(-1)), this.$choice(pb.greaterThanEqual(this.v.y, 0), pb.float(1), pb.float(-1)));
66
+ this.$if(pb.lessThan(this.v.z, 0), function() {
67
+ this.v = pb.vec3(pb.mul(pb.sub(pb.vec2(1), pb.abs(this.v.yx)), this.sgn), this.v.z);
68
+ });
69
+ this.$return(pb.normalize(this.v));
70
+ });
71
+ return scope[funcName](uv);
72
+ }
73
+ /** The i-th of n directions of a spherical Fibonacci set. @internal */ function sphericalFibonacci(scope, i, n) {
74
+ const pb = scope.$builder;
75
+ const funcName = 'Z_sphericalFibonacci';
76
+ pb.func(funcName, [
77
+ pb.float('i'),
78
+ pb.float('n')
79
+ ], function() {
80
+ this.$l.phi = pb.mul(pb.fract(pb.mul(this.i, 0.6180339887498949)), 2 * Math.PI);
81
+ this.$l.z = pb.sub(1, pb.div(pb.add(pb.mul(this.i, 2), 1), this.n));
82
+ this.$l.r = pb.sqrt(pb.max(pb.sub(1, pb.mul(this.z, this.z)), 0));
83
+ this.$return(pb.vec3(pb.mul(pb.cos(this.phi), this.r), pb.mul(pb.sin(this.phi), this.r), this.z));
84
+ });
85
+ return scope[funcName](i, n);
86
+ }
87
+ /** Rotates a vector by a unit quaternion (xyz, w). @internal */ function quatRotate(scope, q, v) {
88
+ const pb = scope.$builder;
89
+ const funcName = 'Z_quatRotate';
90
+ pb.func(funcName, [
91
+ pb.vec4('q'),
92
+ pb.vec3('v')
93
+ ], function() {
94
+ this.$l.t = pb.mul(pb.cross(this.q.xyz, this.v), 2);
95
+ this.$return(pb.add(this.v, pb.mul(this.t, this.q.w), pb.cross(this.q.xyz, this.t)));
96
+ });
97
+ return scope[funcName](q, v);
98
+ }
99
+ /** Tile index of a probe from its level and texel. @internal */ function probeTileIndex(scope, level, texel) {
100
+ const pb = scope.$builder;
101
+ const funcName = 'Z_probeTileIndex';
102
+ pb.func(funcName, [
103
+ pb.int('level'),
104
+ pb.ivec3('t')
105
+ ], function() {
106
+ this.$l.g = probeLevelGrid(this, this.level);
107
+ this.$return(pb.add(pb.int(this.g.w), this.t.x, pb.mul(pb.int(this.g.x), pb.add(this.t.y, pb.mul(pb.int(this.g.y), this.t.z)))));
108
+ });
109
+ return scope[funcName](level, texel);
110
+ }
111
+ /** Texel of a probe from its level and tile index. @internal */ function probeTexelFromIndex(scope, level, index) {
112
+ const pb = scope.$builder;
113
+ const funcName = 'Z_probeTexelFromIndex';
114
+ pb.func(funcName, [
115
+ pb.int('level'),
116
+ pb.int('i')
117
+ ], function() {
118
+ this.$l.g = probeLevelGrid(this, this.level);
119
+ this.$l.nx = pb.int(this.g.x);
120
+ this.$l.ny = pb.int(this.g.y);
121
+ this.$l.local = pb.sub(this.i, pb.int(this.g.w));
122
+ this.$l.x = pb.mod(this.local, this.nx);
123
+ this.$l.yz = pb.div(this.local, this.nx);
124
+ this.$return(pb.ivec3(this.x, pb.mod(this.yz, this.ny), pb.div(this.yz, this.ny)));
125
+ });
126
+ return scope[funcName](level, index);
127
+ }
128
+ /** World index of the probe at a toroidal texel of a level. @internal */ function probeWorldFromTexel(scope, level, texel) {
129
+ const pb = scope.$builder;
130
+ const funcName = 'Z_probeWorldFromTexel';
131
+ pb.func(funcName, [
132
+ pb.int('level'),
133
+ pb.ivec3('t')
134
+ ], function() {
135
+ this.$l.o = pb.ivec3(probeLevelOrigin(this, this.level).xyz);
136
+ this.$l.n = pb.ivec3(probeLevelGrid(this, this.level).xyz);
137
+ this.$return(pb.add(this.o, pb.mod(pb.add(pb.mod(pb.sub(this.t, this.o), this.n), this.n), this.n)));
138
+ });
139
+ return scope[funcName](level, texel);
140
+ }
141
+ /** Texel of the probe of a level at a world index. @internal */ function probeTexelFromWorld(scope, level, world) {
142
+ const pb = scope.$builder;
143
+ const n = pb.ivec3(probeLevelGrid(scope, level).xyz);
144
+ return pb.mod(pb.add(pb.mod(world, n), n), n);
145
+ }
146
+ /** World position of a probe: world index times level spacing plus relocation offset. @internal */ function probePosition(scope, level, world, data) {
147
+ const pb = scope.$builder;
148
+ return pb.add(pb.mul(pb.vec3(world), probeLevelOrigin(scope, level).w), data.xyz);
149
+ }
150
+ /** Texel origin of a probe's tile in an atlas of `texels`² tiles. @internal */ function probeTileOrigin(scope, index, texels) {
151
+ const pb = scope.$builder;
152
+ const cols = pb.int(scope[PROBE_PARAMS].at(0).y);
153
+ return pb.mul(pb.ivec2(pb.mod(index, cols), pb.div(index, cols)), pb.int(texels));
154
+ }
155
+ /**
156
+ * Bilinear sample of a probe's tile in a direction; border texels make the filter wrap.
157
+ * @internal
158
+ */ function sampleProbeTile(scope, tex, index, texels, texSize, dir) {
159
+ const pb = scope.$builder;
160
+ const funcName = `Z_sampleProbeTile_${tex.$str}`;
161
+ pb.func(funcName, [
162
+ pb.int('index'),
163
+ pb.float('texels'),
164
+ pb.vec2('texSize'),
165
+ pb.vec3('dir')
166
+ ], function() {
167
+ this.$l.origin = pb.vec2(probeTileOrigin(this, this.index, this.texels));
168
+ this.$l.oct = pb.add(pb.mul(octEncode(this, this.dir), 0.5), pb.vec2(0.5));
169
+ this.$l.uv = pb.div(pb.add(this.origin, pb.vec2(1), pb.mul(this.oct, pb.sub(this.texels, 2))), this.texSize);
170
+ this.$return(pb.textureSampleLevel(tex, this.uv, 0));
171
+ });
172
+ return scope[funcName](index, texels, texSize, dir);
173
+ }
174
+ /**
175
+ * Probe state in data.w: 0 = no data (never updated or just reactivated), 1 = updated,
176
+ * {@link PROBE_STATE_INACTIVE} = buried in geometry.
177
+ * @internal
178
+ */ const PROBE_STATE_INACTIVE = 2;
179
+ /** True for a probe whose maps a surface may read. @internal */ function probeActive(scope, data) {
180
+ const pb = scope.$builder;
181
+ return pb.and(pb.greaterThan(data.w, 0.5), pb.lessThan(data.w, PROBE_STATE_INACTIVE - 0.5));
182
+ }
183
+ /**
184
+ * Irradiance from one volume level: the eight surrounding probes weighted by trilinear,
185
+ * wrap-facing and Chebyshev visibility (DDGI). Returns (irradiance, weight sum); sum 0 when
186
+ * outside the window or no probe is active.
187
+ * @internal
188
+ */ function sampleProbeLevel(scope, level, p, biased, n, sky) {
189
+ const pb = scope.$builder;
190
+ const funcName = sky ? 'Z_sampleProbeLevelSky' : 'Z_sampleProbeLevel';
191
+ pb.func(funcName, [
192
+ pb.int('level'),
193
+ pb.vec3('p'),
194
+ pb.vec3('biased'),
195
+ pb.vec3('n')
196
+ ], function() {
197
+ this.$l.p0 = this[PROBE_PARAMS].at(0);
198
+ this.$l.p1 = this[PROBE_PARAMS].at(1);
199
+ this.$l.lo = probeLevelOrigin(this, this.level);
200
+ this.$l.lg = probeLevelGrid(this, this.level);
201
+ this.$l.spacing = this.lo.w;
202
+ this.$l.origin = pb.ivec3(this.lo.xyz);
203
+ this.$l.n3 = pb.ivec3(this.lg.xyz);
204
+ this.$l.g = pb.sub(pb.div(this.biased, this.spacing), pb.vec3(this.origin));
205
+ this.$l.sum = pb.vec3(0);
206
+ this.$l.wsum = pb.float(0);
207
+ this.$l.inside = pb.and(pb.all(pb.greaterThanEqual(this.g, pb.vec3(0))), pb.all(pb.lessThanEqual(this.g, pb.sub(pb.vec3(this.n3), pb.vec3(1)))));
208
+ this.$if(this.inside, function() {
209
+ this.$l.base = pb.ivec3(pb.clamp(pb.floor(this.g), pb.vec3(0), pb.sub(pb.vec3(this.n3), pb.vec3(2))));
210
+ this.$l.alpha = pb.clamp(pb.sub(this.g, pb.vec3(this.base)), pb.vec3(0), pb.vec3(1));
211
+ for(let i = 0; i < 8; i++){
212
+ const off = [
213
+ i & 1,
214
+ i >> 1 & 1,
215
+ i >> 2 & 1
216
+ ];
217
+ this.$l[`w${i}`] = pb.add(this.origin, this.base, pb.ivec3(off[0], off[1], off[2]));
218
+ this.$l[`t${i}`] = probeTexelFromWorld(this, this.level, this[`w${i}`]);
219
+ this.$l[`i${i}`] = probeTileIndex(this, this.level, this[`t${i}`]);
220
+ this.$l[`d${i}`] = this[PROBE_DATA].at(this[`i${i}`]);
221
+ // Skip inactive (buried) probes (Majercik et al. 2021, probe classification)
222
+ this.$if(probeActive(this, this[`d${i}`]), function() {
223
+ this.$l.pp = probePosition(this, this.level, this[`w${i}`], this[`d${i}`]);
224
+ this.$l.tri = pb.mul(off[0] ? this.alpha.x : pb.sub(1, this.alpha.x), off[1] ? this.alpha.y : pb.sub(1, this.alpha.y), off[2] ? this.alpha.z : pb.sub(1, this.alpha.z));
225
+ this.$l.dirToProbe = pb.normalize(pb.sub(this.pp, this.p));
226
+ // Wrap shading: a probe behind the surface still contributes a little
227
+ this.$l.wrap = pb.mul(pb.add(pb.dot(this.dirToProbe, this.n), 1), 0.5);
228
+ this.$l.w = pb.add(pb.mul(this.wrap, this.wrap), 0.2);
229
+ // Chebyshev visibility of the point as the probe sees the surface
230
+ this.$l.toBiased = pb.sub(this.biased, this.pp);
231
+ this.$l.dist = pb.length(this.toBiased);
232
+ this.$l.vis = sampleProbeTile(this, this[PROBE_VISIBILITY], this[`i${i}`], this.p0.w, this.p1.zw, pb.div(this.toBiased, pb.max(this.dist, 1e-6)));
233
+ this.$l.mean = this.vis.x;
234
+ this.$l.variance = pb.abs(pb.sub(pb.mul(this.mean, this.mean), this.vis.y));
235
+ this.$if(pb.greaterThan(this.dist, this.mean), function() {
236
+ this.$l.dd = pb.sub(this.dist, this.mean);
237
+ this.$l.cheb = pb.div(this.variance, pb.add(this.variance, pb.mul(this.dd, this.dd)));
238
+ this.w = pb.mul(this.w, pb.max(pb.mul(this.cheb, this.cheb, this.cheb), 0.05));
239
+ });
240
+ // Crush tiny weights to avoid noise from a nearly-blocked probe
241
+ this.$if(pb.lessThan(this.w, 0.2), function() {
242
+ this.w = pb.mul(this.w, pb.div(pb.mul(this.w, this.w), 0.04));
243
+ });
244
+ this.w = pb.mul(this.w, this.tri);
245
+ this.$l.irr = sampleProbeTile(this, this[PROBE_IRRADIANCE], this[`i${i}`], this.p0.z, this.p1.xy, this.n);
246
+ this.sum = pb.add(this.sum, pb.mul(sky ? pb.vec3(this.irr.a) : this.irr.rgb, this.w));
247
+ this.wsum = pb.add(this.wsum, this.w);
248
+ });
249
+ }
250
+ });
251
+ this.$return(pb.vec4(pb.div(this.sum, pb.max(this.wsum, 1e-5)), this.wsum));
252
+ });
253
+ return scope[funcName](level, p, biased, n);
254
+ }
255
+ /**
256
+ * Probe volume irradiance (E/π, rgb) at a surface; `a` = 1 if any probe answered. The finest
257
+ * level holding the point answers, fading to the next over the outer 0.5-2.5 probe spacings of
258
+ * its window. DDGI (Majercik et al., JCGT 2019, §4);
259
+ *
260
+ * Normal/view biases of params[2] are in probe spacings, scaled per level; the view bias fades
261
+ * out within one spacing of the viewer. `toViewer` runs from point to viewer; feedback mode
262
+ * applies the full view bias.
263
+ *
264
+ * Modes: `surface` applies the read scale; `feedback` returns the stored value for the next
265
+ * voxel bounce; `sky` interpolates sky visibility (0..1) with the same weights.
266
+ * @internal
267
+ */ function sampleProbeIrradiance(scope, worldPos, normal, toViewer, mode = 'surface') {
268
+ const pb = scope.$builder;
269
+ const funcName = mode === 'surface' ? 'Z_sampleProbeIrradiance' : mode === 'feedback' ? 'Z_sampleProbeIrradianceFeedback' : 'Z_sampleProbeSkyVisibility';
270
+ pb.func(funcName, [
271
+ pb.vec3('p'),
272
+ pb.vec3('n'),
273
+ pb.vec3('toViewer')
274
+ ], function() {
275
+ this.$l.p0 = this[PROBE_PARAMS].at(0);
276
+ this.$l.p2 = this[PROBE_PARAMS].at(2);
277
+ this.$l.levels = pb.int(this.p0.x);
278
+ this.$l.viewDist = pb.length(this.toViewer);
279
+ this.$l.v = pb.div(this.toViewer, pb.max(this.viewDist, 1e-6));
280
+ this.$l.acc = pb.vec3(0);
281
+ this.$l.accW = pb.float(0);
282
+ this.$for(pb.int('l'), 0, PROBE_MAX_LEVELS, function() {
283
+ this.$if(pb.or(pb.greaterThanEqual(this.l, this.levels), pb.greaterThanEqual(this.accW, 0.999)), function() {
284
+ this.$break();
285
+ });
286
+ this.$l.lo = probeLevelOrigin(this, this.l);
287
+ this.$l.viewFade = mode === 'feedback' ? pb.float(1) : pb.clamp(pb.div(this.viewDist, this.lo.w), 0, 1);
288
+ this.$l.biased = pb.add(this.p, pb.mul(pb.add(pb.mul(this.n, this.p2.y), pb.mul(this.v, this.p2.z, this.viewFade)), this.lo.w));
289
+ this.$l.s = sampleProbeLevel(this, this.l, this.p, this.biased, this.n, mode === 'sky');
290
+ this.$if(pb.greaterThan(this.s.a, 1e-5), function() {
291
+ // Distance in probes to the window edge
292
+ this.$l.lg = probeLevelGrid(this, this.l);
293
+ this.$l.g = pb.sub(pb.div(this.biased, this.lo.w), this.lo.xyz);
294
+ this.$l.edge = pb.min(this.g, pb.sub(pb.sub(this.lg.xyz, pb.vec3(1)), this.g));
295
+ this.$l.t = pb.smoothStep(0.5, 2.5, pb.min(pb.min(this.edge.x, this.edge.y), this.edge.z));
296
+ this.$l.share = pb.mul(this.t, pb.sub(1, this.accW));
297
+ this.acc = pb.add(this.acc, pb.mul(this.s.rgb, this.share));
298
+ this.accW = pb.add(this.accW, this.share);
299
+ });
300
+ });
301
+ this.$l.valid = this.$choice(pb.greaterThan(this.accW, 1e-4), pb.float(1), pb.float(0));
302
+ this.$l.e = pb.div(this.acc, pb.max(this.accW, 1e-4));
303
+ this.$return(pb.vec4(mode === 'surface' ? pb.mul(this.e, this.p2.x) : this.e, this.valid));
304
+ });
305
+ return scope[funcName](worldPos, normal, toViewer);
306
+ }
307
+
308
+ export { PROBE_DATA, PROBE_IRRADIANCE, PROBE_MAX_LEVELS, PROBE_PARAMS, PROBE_PARAM_VEC4S, PROBE_STATE_INACTIVE, PROBE_VISIBILITY, declareProbeUniforms, octDecode, octEncode, probeActive, probeLevelGrid, probeLevelOrigin, probePosition, probeTexelFromIndex, probeTexelFromWorld, probeTileIndex, probeTileOrigin, probeWorldFromTexel, quatRotate, sampleProbeIrradiance, sampleProbeTile, sphericalFibonacci };
309
+ //# sourceMappingURL=probes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probes.js","sources":["../../src/shaders/probes.ts"],"sourcesContent":["import type { PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { getSamplerOptions } from '../utility/misc';\r\n\r\n/**\r\n * Uniform names of the probe volume, see {@link declareProbeUniforms}.\r\n * @internal\r\n */\r\nexport const PROBE_IRRADIANCE = 'zProbeIrradiance';\r\n/** @internal */\r\nexport const PROBE_VISIBILITY = 'zProbeVisibility';\r\n/** @internal */\r\nexport const PROBE_DATA = 'zProbeData';\r\n/** @internal */\r\nexport const PROBE_PARAMS = 'zProbeParams';\r\n/** Most clipmap levels of a probe volume. @internal */\r\nexport const PROBE_MAX_LEVELS = 4;\r\n/** vec4s of {@link PROBE_PARAMS}. @internal */\r\nexport const PROBE_PARAM_VEC4S = 3 + 2 * PROBE_MAX_LEVELS;\r\n\r\n/**\r\n * Declares the probe volume uniforms.\r\n *\r\n * - irradiance: rgba16f atlas of octahedral tiles, `irrTexels`² each with a one-texel border;\r\n * rgb E/π at the fixed cache exposure (getGICacheExposure), a = cosine-weighted sky visibility.\r\n * - visibility: rgba16f atlas of `visTexels`² tiles, (mean distance, mean squared distance).\r\n * - data: storage buffer, one vec4 per probe (relocation offset, state); writable when `writable`.\r\n * - params[0]: (levels, tiles per atlas row, irrTexels, visTexels),\r\n * params[1]: (irradiance atlas size, visibility atlas size),\r\n * params[2]: (read scale = GI intensity, normal bias, view bias, max ray distance),\r\n * params[3 + 2l]: (world index of level l's first probe, spacing),\r\n * params[4 + 2l]: (probes per axis of level l, first tile).\r\n *\r\n * Levels are camera-centred clipmap windows addressed toroidally by world index; tile index\r\n * (also indexing `data`) = first tile + `x + nx (y + ny z)` of the texel.\r\n * @internal\r\n */\r\nexport function declareProbeUniforms(scope: PBGlobalScope, group: number, writable = false) {\r\n const pb = scope.$builder;\r\n // Static sampler so both share one sampler binding on WebGPU (texture-heavy materials\r\n // such as water are near the 16-sampler limit)\r\n scope[PROBE_IRRADIANCE] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[PROBE_VISIBILITY] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[PROBE_DATA] = writable\r\n ? pb.vec4[0]().storageBuffer(group)\r\n : pb.vec4[0]().storageBufferReadonly(group);\r\n scope[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(group);\r\n}\r\n\r\n/** (world index of the level's first probe, spacing). @internal */\r\nexport function probeLevelOrigin(scope: PBInsideFunctionScope, level: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 3)) as PBShaderExp;\r\n}\r\n\r\n/** (probes per axis, first tile) of a level. @internal */\r\nexport function probeLevelGrid(scope: PBInsideFunctionScope, level: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 4)) as PBShaderExp;\r\n}\r\n\r\n/** Octahedral encoding of a unit vector to [-1, 1]² (Cigolle et al. 2014). @internal */\r\nexport function octEncode(scope: PBInsideFunctionScope, v: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_octEncode';\r\n pb.func(funcName, [pb.vec3('v')], function () {\r\n this.$l.l1 = pb.add(pb.abs(this.v.x), pb.abs(this.v.y), pb.abs(this.v.z));\r\n this.$l.p = pb.div(this.v.xy, pb.max(this.l1, 1e-6));\r\n this.$l.sgn = pb.vec2(\r\n this.$choice(pb.greaterThanEqual(this.p.x, 0), pb.float(1), pb.float(-1)),\r\n this.$choice(pb.greaterThanEqual(this.p.y, 0), pb.float(1), pb.float(-1))\r\n );\r\n this.$return(\r\n this.$choice(pb.lessThan(this.v.z, 0), pb.mul(pb.sub(pb.vec2(1), pb.abs(this.p.yx)), this.sgn), this.p)\r\n );\r\n });\r\n return scope[funcName](v) as PBShaderExp;\r\n}\r\n\r\n/** Inverse of {@link octEncode}. @internal */\r\nexport function octDecode(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_octDecode';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.v = pb.vec3(this.uv.x, this.uv.y, pb.sub(pb.sub(1, pb.abs(this.uv.x)), pb.abs(this.uv.y)));\r\n this.$l.sgn = pb.vec2(\r\n this.$choice(pb.greaterThanEqual(this.v.x, 0), pb.float(1), pb.float(-1)),\r\n this.$choice(pb.greaterThanEqual(this.v.y, 0), pb.float(1), pb.float(-1))\r\n );\r\n this.$if(pb.lessThan(this.v.z, 0), function () {\r\n this.v = pb.vec3(pb.mul(pb.sub(pb.vec2(1), pb.abs(this.v.yx)), this.sgn), this.v.z);\r\n });\r\n this.$return(pb.normalize(this.v));\r\n });\r\n return scope[funcName](uv) as PBShaderExp;\r\n}\r\n\r\n/** The i-th of n directions of a spherical Fibonacci set. @internal */\r\nexport function sphericalFibonacci(scope: PBInsideFunctionScope, i: PBShaderExp, n: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_sphericalFibonacci';\r\n pb.func(funcName, [pb.float('i'), pb.float('n')], function () {\r\n this.$l.phi = pb.mul(pb.fract(pb.mul(this.i, 0.6180339887498949)), 2 * Math.PI);\r\n this.$l.z = pb.sub(1, pb.div(pb.add(pb.mul(this.i, 2), 1), this.n));\r\n this.$l.r = pb.sqrt(pb.max(pb.sub(1, pb.mul(this.z, this.z)), 0));\r\n this.$return(pb.vec3(pb.mul(pb.cos(this.phi), this.r), pb.mul(pb.sin(this.phi), this.r), this.z));\r\n });\r\n return scope[funcName](i, n) as PBShaderExp;\r\n}\r\n\r\n/** Rotates a vector by a unit quaternion (xyz, w). @internal */\r\nexport function quatRotate(scope: PBInsideFunctionScope, q: PBShaderExp, v: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_quatRotate';\r\n pb.func(funcName, [pb.vec4('q'), pb.vec3('v')], function () {\r\n this.$l.t = pb.mul(pb.cross(this.q.xyz, this.v), 2);\r\n this.$return(pb.add(this.v, pb.mul(this.t, this.q.w), pb.cross(this.q.xyz, this.t)));\r\n });\r\n return scope[funcName](q, v) as PBShaderExp;\r\n}\r\n\r\n/** Tile index of a probe from its level and texel. @internal */\r\nexport function probeTileIndex(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n texel: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeTileIndex';\r\n pb.func(funcName, [pb.int('level'), pb.ivec3('t')], function () {\r\n this.$l.g = probeLevelGrid(this, this.level);\r\n this.$return(\r\n pb.add(\r\n pb.int(this.g.w),\r\n this.t.x,\r\n pb.mul(pb.int(this.g.x), pb.add(this.t.y, pb.mul(pb.int(this.g.y), this.t.z)))\r\n )\r\n );\r\n });\r\n return scope[funcName](level, texel) as PBShaderExp;\r\n}\r\n\r\n/** Texel of a probe from its level and tile index. @internal */\r\nexport function probeTexelFromIndex(scope: PBInsideFunctionScope, level: PBShaderExp, index: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeTexelFromIndex';\r\n pb.func(funcName, [pb.int('level'), pb.int('i')], function () {\r\n this.$l.g = probeLevelGrid(this, this.level);\r\n this.$l.nx = pb.int(this.g.x);\r\n this.$l.ny = pb.int(this.g.y);\r\n this.$l.local = pb.sub(this.i, pb.int(this.g.w));\r\n this.$l.x = pb.mod(this.local, this.nx);\r\n this.$l.yz = pb.div(this.local, this.nx);\r\n this.$return(pb.ivec3(this.x, pb.mod(this.yz, this.ny), pb.div(this.yz, this.ny)));\r\n });\r\n return scope[funcName](level, index) as PBShaderExp;\r\n}\r\n\r\n/** World index of the probe at a toroidal texel of a level. @internal */\r\nexport function probeWorldFromTexel(scope: PBInsideFunctionScope, level: PBShaderExp, texel: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeWorldFromTexel';\r\n pb.func(funcName, [pb.int('level'), pb.ivec3('t')], function () {\r\n this.$l.o = pb.ivec3(probeLevelOrigin(this, this.level).xyz);\r\n this.$l.n = pb.ivec3(probeLevelGrid(this, this.level).xyz);\r\n this.$return(pb.add(this.o, pb.mod(pb.add(pb.mod(pb.sub(this.t, this.o), this.n), this.n), this.n)));\r\n });\r\n return scope[funcName](level, texel) as PBShaderExp;\r\n}\r\n\r\n/** Texel of the probe of a level at a world index. @internal */\r\nexport function probeTexelFromWorld(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n world: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const n = pb.ivec3(probeLevelGrid(scope, level).xyz);\r\n return pb.mod(pb.add(pb.mod(world, n), n), n) as PBShaderExp;\r\n}\r\n\r\n/** World position of a probe: world index times level spacing plus relocation offset. @internal */\r\nexport function probePosition(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n world: PBShaderExp,\r\n data: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n return pb.add(pb.mul(pb.vec3(world), probeLevelOrigin(scope, level).w), data.xyz) as PBShaderExp;\r\n}\r\n\r\n/** Texel origin of a probe's tile in an atlas of `texels`² tiles. @internal */\r\nexport function probeTileOrigin(scope: PBInsideFunctionScope, index: PBShaderExp, texels: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const cols = pb.int(scope[PROBE_PARAMS].at(0).y);\r\n return pb.mul(pb.ivec2(pb.mod(index, cols), pb.div(index, cols)), pb.int(texels)) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Bilinear sample of a probe's tile in a direction; border texels make the filter wrap.\r\n * @internal\r\n */\r\nexport function sampleProbeTile(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n index: PBShaderExp,\r\n texels: PBShaderExp,\r\n texSize: PBShaderExp,\r\n dir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_sampleProbeTile_${tex.$str}`;\r\n pb.func(funcName, [pb.int('index'), pb.float('texels'), pb.vec2('texSize'), pb.vec3('dir')], function () {\r\n this.$l.origin = pb.vec2(probeTileOrigin(this, this.index, this.texels));\r\n this.$l.oct = pb.add(pb.mul(octEncode(this, this.dir), 0.5), pb.vec2(0.5));\r\n this.$l.uv = pb.div(\r\n pb.add(this.origin, pb.vec2(1), pb.mul(this.oct, pb.sub(this.texels, 2))),\r\n this.texSize\r\n );\r\n this.$return(pb.textureSampleLevel(tex, this.uv, 0));\r\n });\r\n return scope[funcName](index, texels, texSize, dir) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Probe state in data.w: 0 = no data (never updated or just reactivated), 1 = updated,\r\n * {@link PROBE_STATE_INACTIVE} = buried in geometry.\r\n * @internal\r\n */\r\nexport const PROBE_STATE_INACTIVE = 2;\r\n\r\n/** True for a probe whose maps a surface may read. @internal */\r\nexport function probeActive(scope: PBInsideFunctionScope, data: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.and(pb.greaterThan(data.w, 0.5), pb.lessThan(data.w, PROBE_STATE_INACTIVE - 0.5)) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Irradiance from one volume level: the eight surrounding probes weighted by trilinear,\r\n * wrap-facing and Chebyshev visibility (DDGI). Returns (irradiance, weight sum); sum 0 when\r\n * outside the window or no probe is active.\r\n * @internal\r\n */\r\nfunction sampleProbeLevel(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp,\r\n p: PBShaderExp,\r\n biased: PBShaderExp,\r\n n: PBShaderExp,\r\n sky: boolean\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = sky ? 'Z_sampleProbeLevelSky' : 'Z_sampleProbeLevel';\r\n pb.func(funcName, [pb.int('level'), pb.vec3('p'), pb.vec3('biased'), pb.vec3('n')], function () {\r\n this.$l.p0 = this[PROBE_PARAMS].at(0);\r\n this.$l.p1 = this[PROBE_PARAMS].at(1);\r\n this.$l.lo = probeLevelOrigin(this, this.level);\r\n this.$l.lg = probeLevelGrid(this, this.level);\r\n this.$l.spacing = this.lo.w;\r\n this.$l.origin = pb.ivec3(this.lo.xyz);\r\n this.$l.n3 = pb.ivec3(this.lg.xyz);\r\n this.$l.g = pb.sub(pb.div(this.biased, this.spacing), pb.vec3(this.origin));\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.wsum = pb.float(0);\r\n this.$l.inside = pb.and(\r\n pb.all(pb.greaterThanEqual(this.g, pb.vec3(0))),\r\n pb.all(pb.lessThanEqual(this.g, pb.sub(pb.vec3(this.n3), pb.vec3(1))))\r\n );\r\n this.$if(this.inside, function () {\r\n this.$l.base = pb.ivec3(pb.clamp(pb.floor(this.g), pb.vec3(0), pb.sub(pb.vec3(this.n3), pb.vec3(2))));\r\n this.$l.alpha = pb.clamp(pb.sub(this.g, pb.vec3(this.base)), pb.vec3(0), pb.vec3(1));\r\n for (let i = 0; i < 8; i++) {\r\n const off = [i & 1, (i >> 1) & 1, (i >> 2) & 1];\r\n this.$l[`w${i}`] = pb.add(this.origin, this.base, pb.ivec3(off[0], off[1], off[2]));\r\n this.$l[`t${i}`] = probeTexelFromWorld(this, this.level, this[`w${i}`]);\r\n this.$l[`i${i}`] = probeTileIndex(this, this.level, this[`t${i}`]);\r\n this.$l[`d${i}`] = this[PROBE_DATA].at(this[`i${i}`]);\r\n // Skip inactive (buried) probes (Majercik et al. 2021, probe classification)\r\n this.$if(probeActive(this, this[`d${i}`]), function () {\r\n this.$l.pp = probePosition(this, this.level, this[`w${i}`], this[`d${i}`]);\r\n this.$l.tri = pb.mul(\r\n off[0] ? this.alpha.x : pb.sub(1, this.alpha.x),\r\n off[1] ? this.alpha.y : pb.sub(1, this.alpha.y),\r\n off[2] ? this.alpha.z : pb.sub(1, this.alpha.z)\r\n );\r\n this.$l.dirToProbe = pb.normalize(pb.sub(this.pp, this.p));\r\n // Wrap shading: a probe behind the surface still contributes a little\r\n this.$l.wrap = pb.mul(pb.add(pb.dot(this.dirToProbe, this.n), 1), 0.5);\r\n this.$l.w = pb.add(pb.mul(this.wrap, this.wrap), 0.2);\r\n // Chebyshev visibility of the point as the probe sees the surface\r\n this.$l.toBiased = pb.sub(this.biased, this.pp);\r\n this.$l.dist = pb.length(this.toBiased);\r\n this.$l.vis = sampleProbeTile(\r\n this,\r\n this[PROBE_VISIBILITY],\r\n this[`i${i}`],\r\n this.p0.w,\r\n this.p1.zw,\r\n pb.div(this.toBiased, pb.max(this.dist, 1e-6))\r\n );\r\n this.$l.mean = this.vis.x;\r\n this.$l.variance = pb.abs(pb.sub(pb.mul(this.mean, this.mean), this.vis.y));\r\n this.$if(pb.greaterThan(this.dist, this.mean), function () {\r\n this.$l.dd = pb.sub(this.dist, this.mean);\r\n this.$l.cheb = pb.div(this.variance, pb.add(this.variance, pb.mul(this.dd, this.dd)));\r\n this.w = pb.mul(this.w, pb.max(pb.mul(this.cheb, this.cheb, this.cheb), 0.05));\r\n });\r\n // Crush tiny weights to avoid noise from a nearly-blocked probe\r\n this.$if(pb.lessThan(this.w, 0.2), function () {\r\n this.w = pb.mul(this.w, pb.div(pb.mul(this.w, this.w), 0.04));\r\n });\r\n this.w = pb.mul(this.w, this.tri);\r\n this.$l.irr = sampleProbeTile(\r\n this,\r\n this[PROBE_IRRADIANCE],\r\n this[`i${i}`],\r\n this.p0.z,\r\n this.p1.xy,\r\n this.n\r\n );\r\n this.sum = pb.add(this.sum, pb.mul(sky ? pb.vec3(this.irr.a) : this.irr.rgb, this.w));\r\n this.wsum = pb.add(this.wsum, this.w);\r\n });\r\n }\r\n });\r\n this.$return(pb.vec4(pb.div(this.sum, pb.max(this.wsum, 1e-5)), this.wsum));\r\n });\r\n return scope[funcName](level, p, biased, n) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Probe volume irradiance (E/π, rgb) at a surface; `a` = 1 if any probe answered. The finest\r\n * level holding the point answers, fading to the next over the outer 0.5-2.5 probe spacings of\r\n * its window. DDGI (Majercik et al., JCGT 2019, §4);\r\n *\r\n * Normal/view biases of params[2] are in probe spacings, scaled per level; the view bias fades\r\n * out within one spacing of the viewer. `toViewer` runs from point to viewer; feedback mode\r\n * applies the full view bias.\r\n *\r\n * Modes: `surface` applies the read scale; `feedback` returns the stored value for the next\r\n * voxel bounce; `sky` interpolates sky visibility (0..1) with the same weights.\r\n * @internal\r\n */\r\nexport function sampleProbeIrradiance(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n toViewer: PBShaderExp,\r\n mode: 'surface' | 'feedback' | 'sky' = 'surface'\r\n) {\r\n const pb = scope.$builder;\r\n const funcName =\r\n mode === 'surface'\r\n ? 'Z_sampleProbeIrradiance'\r\n : mode === 'feedback'\r\n ? 'Z_sampleProbeIrradianceFeedback'\r\n : 'Z_sampleProbeSkyVisibility';\r\n pb.func(funcName, [pb.vec3('p'), pb.vec3('n'), pb.vec3('toViewer')], function () {\r\n this.$l.p0 = this[PROBE_PARAMS].at(0);\r\n this.$l.p2 = this[PROBE_PARAMS].at(2);\r\n this.$l.levels = pb.int(this.p0.x);\r\n this.$l.viewDist = pb.length(this.toViewer);\r\n this.$l.v = pb.div(this.toViewer, pb.max(this.viewDist, 1e-6));\r\n this.$l.acc = pb.vec3(0);\r\n this.$l.accW = pb.float(0);\r\n this.$for(pb.int('l'), 0, PROBE_MAX_LEVELS, function () {\r\n this.$if(\r\n pb.or(pb.greaterThanEqual(this.l, this.levels), pb.greaterThanEqual(this.accW, 0.999)),\r\n function () {\r\n this.$break();\r\n }\r\n );\r\n this.$l.lo = probeLevelOrigin(this, this.l);\r\n this.$l.viewFade = mode === 'feedback' ? pb.float(1) : pb.clamp(pb.div(this.viewDist, this.lo.w), 0, 1);\r\n this.$l.biased = pb.add(\r\n this.p,\r\n pb.mul(pb.add(pb.mul(this.n, this.p2.y), pb.mul(this.v, this.p2.z, this.viewFade)), this.lo.w)\r\n );\r\n this.$l.s = sampleProbeLevel(this, this.l, this.p, this.biased, this.n, mode === 'sky');\r\n this.$if(pb.greaterThan(this.s.a, 1e-5), function () {\r\n // Distance in probes to the window edge\r\n this.$l.lg = probeLevelGrid(this, this.l);\r\n this.$l.g = pb.sub(pb.div(this.biased, this.lo.w), this.lo.xyz);\r\n this.$l.edge = pb.min(this.g, pb.sub(pb.sub(this.lg.xyz, pb.vec3(1)), this.g));\r\n this.$l.t = pb.smoothStep(0.5, 2.5, pb.min(pb.min(this.edge.x, this.edge.y), this.edge.z));\r\n this.$l.share = pb.mul(this.t, pb.sub(1, this.accW));\r\n this.acc = pb.add(this.acc, pb.mul(this.s.rgb, this.share));\r\n this.accW = pb.add(this.accW, this.share);\r\n });\r\n });\r\n this.$l.valid = this.$choice(pb.greaterThan(this.accW, 1e-4), pb.float(1), pb.float(0));\r\n this.$l.e = pb.div(this.acc, pb.max(this.accW, 1e-4));\r\n this.$return(pb.vec4(mode === 'surface' ? pb.mul(this.e, this.p2.x) : this.e, this.valid));\r\n });\r\n return scope[funcName](worldPos, normal, toViewer) as PBShaderExp;\r\n}\r\n"],"names":["PROBE_IRRADIANCE","PROBE_VISIBILITY","PROBE_DATA","PROBE_PARAMS","PROBE_MAX_LEVELS","PROBE_PARAM_VEC4S","declareProbeUniforms","scope","group","writable","pb","$builder","tex2D","uniform","withSampler","getSamplerOptions","vec4","storageBuffer","storageBufferReadonly","probeLevelOrigin","level","at","add","mul","int","probeLevelGrid","octEncode","v","funcName","func","vec3","$l","l1","abs","x","y","z","p","div","xy","max","sgn","vec2","$choice","greaterThanEqual","float","$return","lessThan","sub","yx","octDecode","uv","$if","normalize","sphericalFibonacci","i","n","phi","fract","Math","PI","r","sqrt","cos","sin","quatRotate","q","t","cross","xyz","w","probeTileIndex","texel","ivec3","g","probeTexelFromIndex","index","nx","ny","local","mod","yz","probeWorldFromTexel","o","probeTexelFromWorld","world","probePosition","data","probeTileOrigin","texels","cols","ivec2","sampleProbeTile","tex","texSize","dir","$str","origin","oct","textureSampleLevel","PROBE_STATE_INACTIVE","probeActive","and","greaterThan","sampleProbeLevel","biased","sky","p0","p1","lo","lg","spacing","n3","sum","wsum","inside","all","lessThanEqual","base","clamp","floor","alpha","off","pp","tri","dirToProbe","wrap","dot","toBiased","dist","length","vis","zw","mean","variance","dd","cheb","irr","a","rgb","sampleProbeIrradiance","worldPos","normal","toViewer","mode","p2","levels","viewDist","acc","accW","$for","or","l","$break","viewFade","s","edge","min","smoothStep","share","valid","e"],"mappings":"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"}