@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
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Rect light integration with linearly transformed cosines, shared by every
3
+ * material that shades rect lights as area lights.
4
+ *
5
+ * @internal
6
+ */ const LUT_SIZE = 64;
7
+ const LUT_SCALE = (LUT_SIZE - 1) / LUT_SIZE;
8
+ const LUT_BIAS = 0.5 / LUT_SIZE;
9
+ /**
10
+ * Declares `Z_LTCIntegrateEdgeVec(v1, v2)`: the vector form factor of one
11
+ * polygon edge between two unit directions.
12
+ *
13
+ * @internal
14
+ */ function defineLTCEdgeFunctions(scope) {
15
+ const pb = scope.$builder;
16
+ pb.func('Z_LTCIntegrateEdgeVec', [
17
+ pb.vec3('v1'),
18
+ pb.vec3('v2')
19
+ ], function() {
20
+ this.$l.x = pb.dot(this.v1, this.v2);
21
+ this.$l.y = pb.abs(this.x);
22
+ this.$l.a = pb.add(0.8543985, pb.mul(pb.add(0.4965155, pb.mul(0.0145206, this.y)), this.y));
23
+ this.$l.b = pb.add(3.417594, pb.mul(pb.add(4.1616724, this.y), this.y));
24
+ this.$l.v = pb.div(this.a, this.b);
25
+ this.$l.thetaSinTheta = this.$choice(pb.greaterThan(this.x, 0), this.v, pb.sub(pb.mul(0.5, pb.inverseSqrt(pb.max(pb.sub(1, pb.mul(this.x, this.x)), 1e-7))), this.v));
26
+ this.$return(pb.mul(pb.cross(this.v1, this.v2), this.thetaSinTheta));
27
+ });
28
+ pb.func('Z_LTCClipQuadToHorizon', [
29
+ pb.vec3[5]('L').inout(),
30
+ pb.int('n').out()
31
+ ], function() {
32
+ this.$l.config = pb.int(0);
33
+ this.$if(pb.greaterThan(this.L[0].z, 0), function() {
34
+ this.config = pb.add(this.config, 1);
35
+ });
36
+ this.$if(pb.greaterThan(this.L[1].z, 0), function() {
37
+ this.config = pb.add(this.config, 2);
38
+ });
39
+ this.$if(pb.greaterThan(this.L[2].z, 0), function() {
40
+ this.config = pb.add(this.config, 4);
41
+ });
42
+ this.$if(pb.greaterThan(this.L[3].z, 0), function() {
43
+ this.config = pb.add(this.config, 8);
44
+ });
45
+ this.n = 0;
46
+ this.$if(pb.equal(this.config, 0), function() {}).$elseif(pb.equal(this.config, 1), function() {
47
+ this.n = 3;
48
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
49
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
50
+ }).$elseif(pb.equal(this.config, 2), function() {
51
+ this.n = 3;
52
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
53
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
54
+ }).$elseif(pb.equal(this.config, 3), function() {
55
+ this.n = 4;
56
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
57
+ this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
58
+ }).$elseif(pb.equal(this.config, 4), function() {
59
+ this.n = 3;
60
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
61
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
62
+ }).$elseif(pb.equal(this.config, 6), function() {
63
+ this.n = 4;
64
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
65
+ this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
66
+ }).$elseif(pb.equal(this.config, 7), function() {
67
+ this.n = 5;
68
+ this.L[4] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
69
+ this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
70
+ }).$elseif(pb.equal(this.config, 8), function() {
71
+ this.n = 3;
72
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
73
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
74
+ this.L[2] = this.L[3];
75
+ }).$elseif(pb.equal(this.config, 9), function() {
76
+ this.n = 4;
77
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
78
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
79
+ }).$elseif(pb.equal(this.config, 11), function() {
80
+ this.n = 5;
81
+ this.L[4] = this.L[3];
82
+ this.L[3] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
83
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
84
+ }).$elseif(pb.equal(this.config, 12), function() {
85
+ this.n = 4;
86
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
87
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
88
+ }).$elseif(pb.equal(this.config, 13), function() {
89
+ this.n = 5;
90
+ this.L[4] = this.L[3];
91
+ this.L[3] = this.L[2];
92
+ this.L[2] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
93
+ this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
94
+ }).$elseif(pb.equal(this.config, 14), function() {
95
+ this.n = 5;
96
+ this.L[4] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
97
+ this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
98
+ }).$elseif(pb.equal(this.config, 15), function() {
99
+ this.n = 4;
100
+ });
101
+ this.$if(pb.equal(this.n, 3), function() {
102
+ this.L[3] = this.L[0];
103
+ });
104
+ this.$if(pb.equal(this.n, 4), function() {
105
+ this.L[4] = this.L[0];
106
+ });
107
+ });
108
+ pb.func('Z_LTCEvaluateRect', [
109
+ pb.vec3('N'),
110
+ pb.vec3('V'),
111
+ pb.vec3('P'),
112
+ pb.mat3('Minv'),
113
+ pb.vec3('p0'),
114
+ pb.vec3('p1'),
115
+ pb.vec3('p2'),
116
+ pb.vec3('p3')
117
+ ], function() {
118
+ this.$l.T1 = pb.normalize(pb.sub(this.V, pb.mul(this.N, pb.dot(this.V, this.N))));
119
+ this.$l.T2 = pb.cross(this.N, this.T1);
120
+ this.$l.ltcMatrix = pb.mul(this.Minv, pb.transpose(pb.mat3(this.T1, this.T2, this.N)));
121
+ this.$l.L = pb.vec3[5]();
122
+ this.L[0] = pb.mul(this.ltcMatrix, pb.sub(this.p0, this.P));
123
+ this.L[1] = pb.mul(this.ltcMatrix, pb.sub(this.p1, this.P));
124
+ this.L[2] = pb.mul(this.ltcMatrix, pb.sub(this.p2, this.P));
125
+ this.L[3] = pb.mul(this.ltcMatrix, pb.sub(this.p3, this.P));
126
+ this.$l.n = pb.int(0);
127
+ this.Z_LTCClipQuadToHorizon(this.L, this.n);
128
+ this.$if(pb.equal(this.n, 0), function() {
129
+ this.$return(pb.vec3(0));
130
+ });
131
+ this.L[0] = pb.normalize(this.L[0]);
132
+ this.L[1] = pb.normalize(this.L[1]);
133
+ this.L[2] = pb.normalize(this.L[2]);
134
+ this.L[3] = pb.normalize(this.L[3]);
135
+ this.L[4] = pb.normalize(this.L[4]);
136
+ this.$l.sum = pb.float(0);
137
+ this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[0], this.L[1]).z);
138
+ this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[1], this.L[2]).z);
139
+ this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[2], this.L[3]).z);
140
+ this.$if(pb.greaterThanEqual(this.n, 4), function() {
141
+ this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[3], this.L[4]).z);
142
+ });
143
+ this.$if(pb.equal(this.n, 5), function() {
144
+ this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[4], this.L[0]).z);
145
+ });
146
+ this.sum = pb.max(0, this.sum);
147
+ this.$return(pb.vec3(this.sum));
148
+ });
149
+ }
150
+ /**
151
+ * The terms a material needs to shade one rect light, as
152
+ * `(specularIntegral, fresnelNorm, fresnelBias, diffuseFormFactor)`.
153
+ *
154
+ * @internal
155
+ */ function evaluateLTCRectLightTerms(scope, worldPos, normal, viewVec, roughness, posRange, axisX, axisY) {
156
+ const pb = scope.$builder;
157
+ defineLTCEdgeFunctions(scope);
158
+ pb.func('Z_LTCRectLightTerms', [
159
+ pb.vec3('worldPos'),
160
+ pb.vec3('normal'),
161
+ pb.vec3('viewVec'),
162
+ pb.float('roughness'),
163
+ pb.vec4('posRange'),
164
+ pb.vec3('ax'),
165
+ pb.vec3('ay')
166
+ ], function() {
167
+ this.$l.center = this.posRange.xyz;
168
+ this.$l.range = this.posRange.w;
169
+ this.$l.area = pb.mul(pb.length(this.ax), pb.length(this.ay), 4);
170
+ this.$if(pb.lessThanEqual(this.area, 0), function() {
171
+ this.$return(pb.vec4(0));
172
+ });
173
+ this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));
174
+ this.$l.centerToPoint = pb.sub(this.center, this.worldPos);
175
+ this.$l.dist = pb.length(this.centerToPoint);
176
+ // One-sided: the plane through the centre separates lit from unlit.
177
+ this.$if(pb.lessThanEqual(pb.dot(this.lightNormal, pb.neg(pb.normalize(this.centerToPoint))), 1e-5), function() {
178
+ this.$return(pb.vec4(0));
179
+ });
180
+ this.$l.falloff = pb.float(1);
181
+ this.$if(pb.greaterThan(this.range, 0), function() {
182
+ this.falloff = pb.sub(1, pb.smoothStep(pb.mul(this.range, 0.9), this.range, this.dist));
183
+ });
184
+ this.$l.p0 = pb.sub(pb.sub(this.center, this.ax), this.ay);
185
+ this.$l.p1 = pb.add(pb.sub(this.center, this.ay), this.ax);
186
+ this.$l.p2 = pb.add(pb.add(this.center, this.ax), this.ay);
187
+ this.$l.p3 = pb.add(pb.sub(this.center, this.ax), this.ay);
188
+ this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0.0001, 1);
189
+ this.$l.ltcRoughness = pb.max(this.roughness, 0.02);
190
+ this.$l.uv = pb.clamp(pb.add(pb.mul(pb.vec2(this.ltcRoughness, pb.sqrt(pb.max(pb.sub(1, this.NoV), 0))), LUT_SCALE), pb.vec2(LUT_BIAS)), pb.vec2(0), pb.vec2(1));
191
+ this.$l.t1 = pb.textureSampleLevel(this.zLTCMatLut, this.uv, 0);
192
+ this.$l.t2 = pb.textureSampleLevel(this.zLTCAmpLut, this.uv, 0);
193
+ this.$l.Minv = pb.mat3(pb.vec3(this.t1.x, 0, this.t1.y), pb.vec3(0, 1, 0), pb.vec3(this.t1.z, 0, this.t1.w));
194
+ this.$l.spec = this.Z_LTCEvaluateRect(this.normal, this.viewVec, this.worldPos, this.Minv, this.p0, this.p1, this.p2, this.p3).x;
195
+ this.$l.diff = this.Z_LTCEvaluateRect(this.normal, this.viewVec, this.worldPos, pb.mat3(pb.vec3(1, 0, 0), pb.vec3(0, 1, 0), pb.vec3(0, 0, 1)), this.p0, this.p1, this.p2, this.p3).x;
196
+ this.$return(pb.vec4(pb.mul(this.spec, this.falloff), this.t2.x, this.t2.y, pb.mul(this.diff, this.falloff)));
197
+ });
198
+ return pb.getGlobalScope().Z_LTCRectLightTerms(worldPos, normal, viewVec, roughness, posRange, axisX, axisY);
199
+ }
200
+
201
+ export { defineLTCEdgeFunctions, evaluateLTCRectLightTerms };
202
+ //# sourceMappingURL=ltc_rect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ltc_rect.js","sources":["../../src/shaders/ltc_rect.ts"],"sourcesContent":["import type { PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Rect light integration with linearly transformed cosines, shared by every\r\n * material that shades rect lights as area lights.\r\n *\r\n * @internal\r\n */\r\n\r\nconst LUT_SIZE = 64;\r\nconst LUT_SCALE = (LUT_SIZE - 1) / LUT_SIZE;\r\nconst LUT_BIAS = 0.5 / LUT_SIZE;\r\n\r\n/**\r\n * Declares `Z_LTCIntegrateEdgeVec(v1, v2)`: the vector form factor of one\r\n * polygon edge between two unit directions.\r\n *\r\n * @internal\r\n */\r\nexport function defineLTCEdgeFunctions(scope: PBGlobalScope | PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n pb.func('Z_LTCIntegrateEdgeVec', [pb.vec3('v1'), pb.vec3('v2')], function () {\r\n this.$l.x = pb.dot(this.v1, this.v2);\r\n this.$l.y = pb.abs(this.x);\r\n this.$l.a = pb.add(0.8543985, pb.mul(pb.add(0.4965155, pb.mul(0.0145206, this.y)), this.y));\r\n this.$l.b = pb.add(3.417594, pb.mul(pb.add(4.1616724, this.y), this.y));\r\n this.$l.v = pb.div(this.a, this.b);\r\n this.$l.thetaSinTheta = this.$choice(\r\n pb.greaterThan(this.x, 0),\r\n this.v,\r\n pb.sub(pb.mul(0.5, pb.inverseSqrt(pb.max(pb.sub(1, pb.mul(this.x, this.x)), 1e-7))), this.v)\r\n );\r\n this.$return(pb.mul(pb.cross(this.v1, this.v2), this.thetaSinTheta));\r\n });\r\n pb.func('Z_LTCClipQuadToHorizon', [pb.vec3[5]('L').inout(), pb.int('n').out()], function () {\r\n this.$l.config = pb.int(0);\r\n this.$if(pb.greaterThan(this.L[0].z, 0), function () {\r\n this.config = pb.add(this.config, 1);\r\n });\r\n this.$if(pb.greaterThan(this.L[1].z, 0), function () {\r\n this.config = pb.add(this.config, 2);\r\n });\r\n this.$if(pb.greaterThan(this.L[2].z, 0), function () {\r\n this.config = pb.add(this.config, 4);\r\n });\r\n this.$if(pb.greaterThan(this.L[3].z, 0), function () {\r\n this.config = pb.add(this.config, 8);\r\n });\r\n this.n = 0;\r\n this.$if(pb.equal(this.config, 0), function () {})\r\n .$elseif(pb.equal(this.config, 1), function () {\r\n this.n = 3;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 2), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 3), function () {\r\n this.n = 4;\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 4), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n })\r\n .$elseif(pb.equal(this.config, 6), function () {\r\n this.n = 4;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 7), function () {\r\n this.n = 5;\r\n this.L[4] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 8), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n this.L[2] = this.L[3];\r\n })\r\n .$elseif(pb.equal(this.config, 9), function () {\r\n this.n = 4;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 11), function () {\r\n this.n = 5;\r\n this.L[4] = this.L[3];\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 12), function () {\r\n this.n = 4;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n })\r\n .$elseif(pb.equal(this.config, 13), function () {\r\n this.n = 5;\r\n this.L[4] = this.L[3];\r\n this.L[3] = this.L[2];\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n })\r\n .$elseif(pb.equal(this.config, 14), function () {\r\n this.n = 5;\r\n this.L[4] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n })\r\n .$elseif(pb.equal(this.config, 15), function () {\r\n this.n = 4;\r\n });\r\n this.$if(pb.equal(this.n, 3), function () {\r\n this.L[3] = this.L[0];\r\n });\r\n this.$if(pb.equal(this.n, 4), function () {\r\n this.L[4] = this.L[0];\r\n });\r\n });\r\n pb.func(\r\n 'Z_LTCEvaluateRect',\r\n [\r\n pb.vec3('N'),\r\n pb.vec3('V'),\r\n pb.vec3('P'),\r\n pb.mat3('Minv'),\r\n pb.vec3('p0'),\r\n pb.vec3('p1'),\r\n pb.vec3('p2'),\r\n pb.vec3('p3')\r\n ],\r\n function () {\r\n this.$l.T1 = pb.normalize(pb.sub(this.V, pb.mul(this.N, pb.dot(this.V, this.N))));\r\n this.$l.T2 = pb.cross(this.N, this.T1);\r\n this.$l.ltcMatrix = pb.mul(this.Minv, pb.transpose(pb.mat3(this.T1, this.T2, this.N)));\r\n this.$l.L = pb.vec3[5]();\r\n this.L[0] = pb.mul(this.ltcMatrix, pb.sub(this.p0, this.P));\r\n this.L[1] = pb.mul(this.ltcMatrix, pb.sub(this.p1, this.P));\r\n this.L[2] = pb.mul(this.ltcMatrix, pb.sub(this.p2, this.P));\r\n this.L[3] = pb.mul(this.ltcMatrix, pb.sub(this.p3, this.P));\r\n this.$l.n = pb.int(0);\r\n this.Z_LTCClipQuadToHorizon(this.L, this.n);\r\n this.$if(pb.equal(this.n, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.L[0] = pb.normalize(this.L[0]);\r\n this.L[1] = pb.normalize(this.L[1]);\r\n this.L[2] = pb.normalize(this.L[2]);\r\n this.L[3] = pb.normalize(this.L[3]);\r\n this.L[4] = pb.normalize(this.L[4]);\r\n this.$l.sum = pb.float(0);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[0], this.L[1]).z);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[1], this.L[2]).z);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[2], this.L[3]).z);\r\n this.$if(pb.greaterThanEqual(this.n, 4), function () {\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[3], this.L[4]).z);\r\n });\r\n this.$if(pb.equal(this.n, 5), function () {\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[4], this.L[0]).z);\r\n });\r\n this.sum = pb.max(0, this.sum);\r\n this.$return(pb.vec3(this.sum));\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * The terms a material needs to shade one rect light, as\r\n * `(specularIntegral, fresnelNorm, fresnelBias, diffuseFormFactor)`.\r\n *\r\n * @internal\r\n */\r\nexport function evaluateLTCRectLightTerms(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n roughness: PBShaderExp,\r\n posRange: PBShaderExp,\r\n axisX: PBShaderExp,\r\n axisY: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n defineLTCEdgeFunctions(scope);\r\n pb.func(\r\n 'Z_LTCRectLightTerms',\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.float('roughness'),\r\n pb.vec4('posRange'),\r\n pb.vec3('ax'),\r\n pb.vec3('ay')\r\n ],\r\n function () {\r\n this.$l.center = this.posRange.xyz;\r\n this.$l.range = this.posRange.w;\r\n this.$l.area = pb.mul(pb.length(this.ax), pb.length(this.ay), 4);\r\n this.$if(pb.lessThanEqual(this.area, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));\r\n this.$l.centerToPoint = pb.sub(this.center, this.worldPos);\r\n this.$l.dist = pb.length(this.centerToPoint);\r\n // One-sided: the plane through the centre separates lit from unlit.\r\n this.$if(\r\n pb.lessThanEqual(pb.dot(this.lightNormal, pb.neg(pb.normalize(this.centerToPoint))), 1e-5),\r\n function () {\r\n this.$return(pb.vec4(0));\r\n }\r\n );\r\n this.$l.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.sub(1, pb.smoothStep(pb.mul(this.range, 0.9), this.range, this.dist));\r\n });\r\n this.$l.p0 = pb.sub(pb.sub(this.center, this.ax), this.ay);\r\n this.$l.p1 = pb.add(pb.sub(this.center, this.ay), this.ax);\r\n this.$l.p2 = pb.add(pb.add(this.center, this.ax), this.ay);\r\n this.$l.p3 = pb.add(pb.sub(this.center, this.ax), this.ay);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0.0001, 1);\r\n this.$l.ltcRoughness = pb.max(this.roughness, 0.02);\r\n this.$l.uv = pb.clamp(\r\n pb.add(\r\n pb.mul(pb.vec2(this.ltcRoughness, pb.sqrt(pb.max(pb.sub(1, this.NoV), 0))), LUT_SCALE),\r\n pb.vec2(LUT_BIAS)\r\n ),\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.t1 = pb.textureSampleLevel(this.zLTCMatLut, this.uv, 0);\r\n this.$l.t2 = pb.textureSampleLevel(this.zLTCAmpLut, this.uv, 0);\r\n this.$l.Minv = pb.mat3(\r\n pb.vec3(this.t1.x, 0, this.t1.y),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(this.t1.z, 0, this.t1.w)\r\n );\r\n this.$l.spec = this.Z_LTCEvaluateRect(\r\n this.normal,\r\n this.viewVec,\r\n this.worldPos,\r\n this.Minv,\r\n this.p0,\r\n this.p1,\r\n this.p2,\r\n this.p3\r\n ).x;\r\n this.$l.diff = this.Z_LTCEvaluateRect(\r\n this.normal,\r\n this.viewVec,\r\n this.worldPos,\r\n pb.mat3(pb.vec3(1, 0, 0), pb.vec3(0, 1, 0), pb.vec3(0, 0, 1)),\r\n this.p0,\r\n this.p1,\r\n this.p2,\r\n this.p3\r\n ).x;\r\n this.$return(\r\n pb.vec4(pb.mul(this.spec, this.falloff), this.t2.x, this.t2.y, pb.mul(this.diff, this.falloff))\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n .Z_LTCRectLightTerms(worldPos, normal, viewVec, roughness, posRange, axisX, axisY) as PBShaderExp;\r\n}\r\n"],"names":["LUT_SIZE","LUT_SCALE","LUT_BIAS","defineLTCEdgeFunctions","scope","pb","$builder","func","vec3","$l","x","dot","v1","v2","y","abs","a","add","mul","b","v","div","thetaSinTheta","$choice","greaterThan","sub","inverseSqrt","max","$return","cross","inout","int","out","config","$if","L","z","n","equal","$elseif","neg","mat3","T1","normalize","V","N","T2","ltcMatrix","Minv","transpose","p0","P","p1","p2","p3","Z_LTCClipQuadToHorizon","sum","float","Z_LTCIntegrateEdgeVec","greaterThanEqual","evaluateLTCRectLightTerms","worldPos","normal","viewVec","roughness","posRange","axisX","axisY","vec4","center","xyz","range","w","area","length","ax","ay","lessThanEqual","lightNormal","centerToPoint","dist","falloff","smoothStep","NoV","clamp","ltcRoughness","uv","vec2","sqrt","t1","textureSampleLevel","zLTCMatLut","t2","zLTCAmpLut","spec","Z_LTCEvaluateRect","diff","getGlobalScope","Z_LTCRectLightTerms"],"mappings":"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"}
@@ -252,15 +252,6 @@ import { PBPrimitiveType, PBInsideFunctionScope } from '@zephyr3d/device';
252
252
  });
253
253
  return pb.getGlobalScope()[funcName](color);
254
254
  }
255
- /** @internal */ function fetchNormalizedFloatForDevice(scope, tex, uv, level) {
256
- const pb = scope.$builder;
257
- const texel = level === undefined || level === null ? pb.textureSample(tex, uv) : pb.textureSampleLevel(tex, uv, level);
258
- if (pb.getDevice().type === 'webgl') {
259
- return decodeNormalizedFloatFromRGBA(scope, texel);
260
- } else {
261
- return texel;
262
- }
263
- }
264
255
 
265
- export { decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, fetchNormalizedFloatForDevice, gammaToLinear, linearToGamma };
256
+ export { decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, gammaToLinear, linearToGamma };
266
257
  //# sourceMappingURL=misc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sources":["../../src/shaders/misc.ts"],"sourcesContent":["import type { PBShaderExp } from '@zephyr3d/device';\r\nimport { PBInsideFunctionScope, PBPrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_DecodeFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.pack = pb.floor(pb.add(pb.mul(this.value, 255), 0.5));\r\n\r\n // Extract bits\r\n this.$l.bitSign = pb.float(pb.greaterThan(this.pack.x, 127.0));\r\n this.$l.bitExpn = pb.float(pb.greaterThan(this.pack.y, 127.0));\r\n this.pack.x = pb.sub(this.pack.x, pb.mul(this.bitSign, 128));\r\n this.pack.y = pb.sub(this.pack.y, pb.mul(this.bitExpn, 128));\r\n\r\n // Compute parts of number\r\n this.$l.exponent = pb.add(pb.mul(this.pack.x, 2.0), this.bitExpn);\r\n this.exponent = pb.pow(2.0, pb.sub(this.exponent, 127.0));\r\n this.$l.mantissa = pb.float(1.0);\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.w, 8388608.0));\r\n\r\n // Return result\r\n this.$return(pb.mul(pb.sub(1.0, pb.mul(this.bitSign, 2)), this.exponent, this.mantissa));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_EncodeFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.floatMax = pb.mul(1.70141184, pb.pow(10, 38));\r\n this.$l.floatMin = pb.mul(1.17549435, pb.pow(10, -38));\r\n this.$l.absvalue = pb.abs(this.value);\r\n this.$if(pb.lessThanEqual(this.absvalue, this.floatMin), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$if(pb.greaterThanEqual(this.value, this.floatMax), function () {\r\n this.$return(pb.vec4(127 / 255, 128 / 255, 0, 0));\r\n });\r\n this.$if(pb.lessThanEqual(this.value, pb.neg(this.floatMax)), function () {\r\n this.$return(pb.vec4(1, 128 / 255, 0, 0));\r\n });\r\n this.$l.pack = pb.vec4(0);\r\n\r\n // Compute Exponent and Mantissa\r\n this.$l.exponent = pb.floor(pb.log2(this.absvalue));\r\n this.$l.mantissa = pb.sub(pb.mul(this.absvalue, pb.pow(2.0, pb.neg(this.exponent))), 1.0);\r\n\r\n // Pack Mantissa into bytes\r\n this.pack.y = pb.floor(pb.mul(this.mantissa, 128.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.pack.z = pb.floor(pb.mul(this.mantissa, 32768.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.pack.w = pb.floor(pb.mul(this.mantissa, 8388608.0));\r\n\r\n // Pack Sing and Exponent into bytes\r\n this.$l.expbias = pb.add(this.exponent, 127.0);\r\n this.pack.x = pb.add(this.pack.x, pb.floor(pb.div(this.expbias, 2.0)));\r\n this.expbias = pb.sub(this.expbias, pb.mul(this.pack.x, 2.0));\r\n this.pack.y = pb.add(this.pack.y, pb.mul(pb.floor(this.expbias), 128.0));\r\n this.pack.x = pb.add(this.pack.x, pb.mul(128.0, pb.float(pb.lessThan(this.value, 0)))); // Sign\r\n this.$return(pb.div(pb.floor(pb.add(this.pack, pb.vec4(0.5))), 255.0));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeNormalizedFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeNormalizedFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeNormalizedFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_decodeNormalizedFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.bitShift = pb.vec4(1 / (256 * 256 * 256), 1 / (256 * 256), 1 / 256, 1);\r\n this.$return(pb.dot(this.value, this.bitShift));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeNormalizedFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeNormalizedFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.bitShift = pb.vec4(256 * 256 * 256, 256 * 256, 256, 1);\r\n this.$l.bitMask = pb.vec4(0, 1 / 256, 1 / 256, 1 / 256);\r\n this.$l.t = pb.fract(pb.mul(this.value, this.bitShift));\r\n this.$return(pb.sub(this.t, pb.mul(this.t.xxyz, this.bitMask)));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes two half floats into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - The first half float to be encode\r\n * @param b - The second half float to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encode2HalfToRGBA(\r\n scope: PBInsideFunctionScope,\r\n a: PBShaderExp | number,\r\n b: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encode2HalfToRGBA';\r\n pb.func(funcName, [pb.float('a'), pb.float('b')], function () {\r\n this.$l.t = pb.vec4(this.a, pb.fract(pb.mul(this.a, 255)), this.b, pb.fract(pb.mul(this.b, 255)));\r\n this.$return(\r\n pb.vec4(\r\n pb.sub(this.t.x, pb.div(this.t.y, 255)),\r\n this.t.y,\r\n pb.sub(this.t.z, pb.div(this.t.w, 255)),\r\n this.t.w\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](a, b) as PBShaderExp;\r\n}\r\n/**\r\n * Decodes two half floats that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns A vec2 that contains the two half floats\r\n *\r\n * @public\r\n */\r\nexport function decode2HalfFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decode2HalfFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$return(\r\n pb.vec2(\r\n pb.add(this.value.x, pb.div(this.value.y, 255)),\r\n pb.add(this.value.z, pb.div(this.value.w, 255))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a color value into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgb - The color value to be encoded\r\n * @param maxRange - The max range of color components\r\n * @returns The encoded RGBA value\r\n *\r\n * @public\r\n */\r\nexport function encodeRGBM(scope: PBInsideFunctionScope, rgb: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeRGBM';\r\n pb.func(funcName, [pb.vec3('rgb'), pb.float('range')], function () {\r\n this.$l.maxRGB = pb.max(this.rgb.r, pb.max(this.rgb.g, this.rgb.b));\r\n this.$l.M = pb.div(this.maxRGB, this.range);\r\n this.M = pb.div(pb.ceil(pb.mul(this.M, 255)), 255);\r\n this.$return(pb.vec4(pb.div(this.rgb, pb.mul(this.M, this.range)), this.M));\r\n });\r\n return pb.getGlobalScope()[funcName](rgb, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes color value that was encoded into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgbm - The RGBM to be decoded\r\n * @param maxRange - The max range of color components\r\n * @returns The decoded RGB color value\r\n *\r\n * @public\r\n */\r\nexport function decodeRGBM(scope: PBInsideFunctionScope, rgbm: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decodeRGBM';\r\n pb.func(funcName, [pb.vec4('rgbm'), pb.float('range')], function () {\r\n this.$return(pb.mul(this.rgbm.rgb, this.rgbm.a, this.range));\r\n });\r\n return pb.getGlobalScope()[funcName](rgbm, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from gamma space to linear space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The linear space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function gammaToLinear(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gammaToLinear';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\r\n this.$return(\r\n pb.mul(\r\n this.color,\r\n pb.add(\r\n pb.mul(this.color, pb.add(pb.mul(this.color, 0.305306011), pb.vec3(0.682171111))),\r\n pb.vec3(0.012522878)\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from linear space to gamma space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The gamma space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function linearToGamma(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_linearToGamma';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Almost perfect version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // C_srgb_2 = max(1.055 * pow(C_lin, 0.416666667) - 0.055, 0);\r\n this.$return(\r\n pb.max(pb.sub(pb.mul(pb.pow(this.color, pb.vec3(0.416666667)), 1.055), pb.vec3(0.055)), pb.vec3(0))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function fetchNormalizedFloatForDevice(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level?: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const texel =\r\n level === undefined || level === null ? pb.textureSample(tex, uv) : pb.textureSampleLevel(tex, uv, level);\r\n if (pb.getDevice().type === 'webgl') {\r\n return decodeNormalizedFloatFromRGBA(scope, texel);\r\n } else {\r\n return texel;\r\n }\r\n}\r\n"],"names":["decodeFloatFromRGBA","scope","value","pb","$builder","$typeinfo","isPrimitiveType","primitiveType","PBPrimitiveType","F32VEC4","Error","PBInsideFunctionScope","funcName","func","vec4","$l","pack","floor","add","mul","bitSign","float","greaterThan","x","bitExpn","y","sub","exponent","pow","mantissa","div","z","w","$return","encodeFloatToRGBA","floatMax","floatMin","absvalue","abs","$if","lessThanEqual","greaterThanEqual","neg","log2","expbias","lessThan","getGlobalScope","decodeNormalizedFloatFromRGBA","bitShift","dot","encodeNormalizedFloatToRGBA","bitMask","t","fract","xxyz","encode2HalfToRGBA","a","b","decode2HalfFromRGBA","vec2","encodeRGBM","rgb","maxRange","vec3","maxRGB","max","r","g","M","range","ceil","decodeRGBM","rgbm","gammaToLinear","color","linearToGamma","fetchNormalizedFloatForDevice","tex","uv","level","texel","undefined","textureSample","textureSampleLevel","getDevice","type"],"mappings":";;AAGA;;;;;;;;AAQC,IACM,SAASA,mBAAoBC,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAClF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,IACE,CAACF,KAAAA,IACD,CAACA,KAAAA,CAAMG,SAAS,CAACC,eAAe,EAChCJ,IAAAA,KAAAA,CAAMG,SAAS,CAACE,aAAa,KAAKC,eAAAA,CAAgBC,OAAO,EACzD;AACA,QAAA,MAAM,IAAIC,KAAM,CAAA,2DAAA,CAAA;AAClB;AACA,IAAA,IAAI,CAACT,KAAS,IAAA,EAAEA,KAAAA,YAAiBU,qBAAoB,CAAI,EAAA;AACvD,QAAA,MAAM,IAAID,KACR,CAAA,gGAAA,CAAA;AAEJ;AACA,IAAA,MAAME,QAAW,GAAA,uBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;AACpC,QAAA,IAAI,CAACC,EAAE,CAACC,IAAI,GAAGb,EAAAA,CAAGc,KAAK,CAACd,EAAAA,CAAGe,GAAG,CAACf,GAAGgB,GAAG,CAAC,IAAI,CAACjB,KAAK,EAAE,GAAM,CAAA,EAAA,GAAA,CAAA,CAAA;;AAGxD,QAAA,IAAI,CAACa,EAAE,CAACK,OAAO,GAAGjB,GAAGkB,KAAK,CAAClB,EAAGmB,CAAAA,WAAW,CAAC,IAAI,CAACN,IAAI,CAACO,CAAC,EAAE,KAAA,CAAA,CAAA;AACvD,QAAA,IAAI,CAACR,EAAE,CAACS,OAAO,GAAGrB,GAAGkB,KAAK,CAAClB,EAAGmB,CAAAA,WAAW,CAAC,IAAI,CAACN,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;QACvD,IAAI,CAACT,IAAI,CAACO,CAAC,GAAGpB,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,CAACO,CAAC,EAAEpB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACC,OAAO,EAAE,GAAA,CAAA,CAAA;QACvD,IAAI,CAACJ,IAAI,CAACS,CAAC,GAAGtB,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,CAACS,CAAC,EAAEtB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACK,OAAO,EAAE,GAAA,CAAA,CAAA;;QAGvD,IAAI,CAACT,EAAE,CAACY,QAAQ,GAAGxB,EAAGe,CAAAA,GAAG,CAACf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACH,IAAI,CAACO,CAAC,EAAE,GAAM,CAAA,EAAA,IAAI,CAACC,OAAO,CAAA;AAChE,QAAA,IAAI,CAACG,QAAQ,GAAGxB,EAAAA,CAAGyB,GAAG,CAAC,GAAKzB,EAAAA,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACC,QAAQ,EAAE,KAAA,CAAA,CAAA;AAClD,QAAA,IAAI,CAACZ,EAAE,CAACc,QAAQ,GAAG1B,EAAAA,CAAGkB,KAAK,CAAC,GAAA,CAAA;AAC5B,QAAA,IAAI,CAACQ,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACI,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACe,CAAC,EAAE,OAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACF,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACgB,CAAC,EAAE,SAAA,CAAA,CAAA;;QAG1D,IAAI,CAACC,OAAO,CAAC9B,EAAGgB,CAAAA,GAAG,CAAChB,EAAGuB,CAAAA,GAAG,CAAC,GAAA,EAAKvB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACC,OAAO,EAAE,CAAK,CAAA,CAAA,EAAA,IAAI,CAACO,QAAQ,EAAE,IAAI,CAACE,QAAQ,CAAA,CAAA;AACxF,KAAA,CAAA;IACA,OAAO5B,KAAK,CAACW,QAAAA,CAAS,CAACV,KAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASgC,iBAAkBjC,CAAAA,KAA4B,EAAEC,KAA2B,EAAA;IACzF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,qBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;AACrC,QAAA,IAAI,CAACN,EAAE,CAACoB,QAAQ,GAAGhC,EAAAA,CAAGgB,GAAG,CAAC,UAAYhB,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,EAAI,EAAA,EAAA,CAAA,CAAA;AACjD,QAAA,IAAI,CAACb,EAAE,CAACqB,QAAQ,GAAGjC,EAAAA,CAAGgB,GAAG,CAAC,UAAYhB,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,GAAC,CAAA,CAAA;QAClD,IAAI,CAACb,EAAE,CAACsB,QAAQ,GAAGlC,GAAGmC,GAAG,CAAC,IAAI,CAACpC,KAAK,CAAA;AACpC,QAAA,IAAI,CAACqC,GAAG,CAACpC,EAAAA,CAAGqC,aAAa,CAAC,IAAI,CAACH,QAAQ,EAAE,IAAI,CAACD,QAAQ,CAAG,EAAA,WAAA;AACvD,YAAA,IAAI,CAACH,OAAO,CAAC9B,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,SAAA,CAAA;AACA,QAAA,IAAI,CAACyB,GAAG,CAACpC,EAAAA,CAAGsC,gBAAgB,CAAC,IAAI,CAACvC,KAAK,EAAE,IAAI,CAACiC,QAAQ,CAAG,EAAA,WAAA;YACvD,IAAI,CAACF,OAAO,CAAC9B,EAAGW,CAAAA,IAAI,CAAC,GAAM,GAAA,GAAA,EAAK,GAAM,GAAA,GAAA,EAAK,CAAG,EAAA,CAAA,CAAA,CAAA;AAChD,SAAA,CAAA;AACA,QAAA,IAAI,CAACyB,GAAG,CAACpC,EAAGqC,CAAAA,aAAa,CAAC,IAAI,CAACtC,KAAK,EAAEC,GAAGuC,GAAG,CAAC,IAAI,CAACP,QAAQ,CAAI,CAAA,EAAA,WAAA;YAC5D,IAAI,CAACF,OAAO,CAAC9B,EAAAA,CAAGW,IAAI,CAAC,CAAA,EAAG,GAAM,GAAA,GAAA,EAAK,CAAG,EAAA,CAAA,CAAA,CAAA;AACxC,SAAA,CAAA;AACA,QAAA,IAAI,CAACC,EAAE,CAACC,IAAI,GAAGb,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA;;AAGvB,QAAA,IAAI,CAACC,EAAE,CAACY,QAAQ,GAAGxB,EAAAA,CAAGc,KAAK,CAACd,EAAGwC,CAAAA,IAAI,CAAC,IAAI,CAACN,QAAQ,CAAA,CAAA;QACjD,IAAI,CAACtB,EAAE,CAACc,QAAQ,GAAG1B,GAAGuB,GAAG,CAACvB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACkB,QAAQ,EAAElC,EAAGyB,CAAAA,GAAG,CAAC,GAAA,EAAKzB,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACf,QAAQ,CAAK,CAAA,CAAA,EAAA,GAAA,CAAA;;AAGrF,QAAA,IAAI,CAACX,IAAI,CAACS,CAAC,GAAGtB,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,KAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACA,QAAQ,GAAG1B,GAAGuB,GAAG,CAAC,IAAI,CAACG,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACT,IAAI,CAACe,CAAC,GAAG5B,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,OAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACA,QAAQ,GAAG1B,GAAGuB,GAAG,CAAC,IAAI,CAACG,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACe,CAAC,EAAE,OAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACf,IAAI,CAACgB,CAAC,GAAG7B,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,SAAA,CAAA,CAAA;;QAG7C,IAAI,CAACd,EAAE,CAAC6B,OAAO,GAAGzC,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACS,QAAQ,EAAE,KAAA,CAAA;QACxC,IAAI,CAACX,IAAI,CAACO,CAAC,GAAGpB,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,IAAI,CAACO,CAAC,EAAEpB,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACc,OAAO,EAAE,GAAA,CAAA,CAAA,CAAA;AAChE,QAAA,IAAI,CAACA,OAAO,GAAGzC,GAAGuB,GAAG,CAAC,IAAI,CAACkB,OAAO,EAAEzC,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACH,IAAI,CAACO,CAAC,EAAE,GAAA,CAAA,CAAA;QACxD,IAAI,CAACP,IAAI,CAACS,CAAC,GAAGtB,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,IAAI,CAACS,CAAC,EAAEtB,EAAGgB,CAAAA,GAAG,CAAChB,EAAAA,CAAGc,KAAK,CAAC,IAAI,CAAC2B,OAAO,CAAG,EAAA,KAAA,CAAA,CAAA;AACjE,QAAA,IAAI,CAAC5B,IAAI,CAACO,CAAC,GAAGpB,EAAAA,CAAGe,GAAG,CAAC,IAAI,CAACF,IAAI,CAACO,CAAC,EAAEpB,EAAGgB,CAAAA,GAAG,CAAC,KAAA,EAAOhB,EAAGkB,CAAAA,KAAK,CAAClB,EAAAA,CAAG0C,QAAQ,CAAC,IAAI,CAAC3C,KAAK,EAAE;AACjF,QAAA,IAAI,CAAC+B,OAAO,CAAC9B,GAAG2B,GAAG,CAAC3B,GAAGc,KAAK,CAACd,GAAGe,GAAG,CAAC,IAAI,CAACF,IAAI,EAAEb,EAAGW,CAAAA,IAAI,CAAC,GAAQ,CAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA;AACjE,KAAA,CAAA;AACA,IAAA,OAAOX,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;AAQC,IACM,SAAS6C,6BAA8B9C,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAC5F,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,IACE,CAACF,KAAAA,IACD,CAACA,KAAAA,CAAMG,SAAS,CAACC,eAAe,EAChCJ,IAAAA,KAAAA,CAAMG,SAAS,CAACE,aAAa,KAAKC,eAAAA,CAAgBC,OAAO,EACzD;AACA,QAAA,MAAM,IAAIC,KAAM,CAAA,qEAAA,CAAA;AAClB;AACA,IAAA,IAAI,CAACT,KAAS,IAAA,EAAEA,KAAAA,YAAiBU,qBAAoB,CAAI,EAAA;AACvD,QAAA,MAAM,IAAID,KACR,CAAA,0GAAA,CAAA;AAEJ;AACA,IAAA,MAAME,QAAW,GAAA,iCAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;QACpC,IAAI,CAACC,EAAE,CAACiC,QAAQ,GAAG7C,EAAGW,CAAAA,IAAI,CAAC,CAAK,IAAA,MAAM,GAAM,GAAA,GAAE,GAAI,CAAK,IAAA,MAAM,GAAE,CAAA,EAAI,IAAI,GAAK,EAAA,CAAA,CAAA;AAC5E,QAAA,IAAI,CAACmB,OAAO,CAAC9B,EAAAA,CAAG8C,GAAG,CAAC,IAAI,CAAC/C,KAAK,EAAE,IAAI,CAAC8C,QAAQ,CAAA,CAAA;AAC/C,KAAA,CAAA;IACA,OAAO/C,KAAK,CAACW,QAAAA,CAAS,CAACV,KAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASgD,2BAA4BjD,CAAAA,KAA4B,EAAEC,KAA2B,EAAA;IACnG,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,+BAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;AACrC,QAAA,IAAI,CAACN,EAAE,CAACiC,QAAQ,GAAG7C,EAAAA,CAAGW,IAAI,CAAC,GAAM,GAAA,GAAA,GAAM,GAAK,EAAA,GAAA,GAAM,KAAK,GAAK,EAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACC,EAAE,CAACoC,OAAO,GAAGhD,EAAAA,CAAGW,IAAI,CAAC,CAAG,EAAA,CAAA,GAAI,GAAK,EAAA,CAAA,GAAI,KAAK,CAAI,GAAA,GAAA,CAAA;AACnD,QAAA,IAAI,CAACC,EAAE,CAACqC,CAAC,GAAGjD,GAAGkD,KAAK,CAAClD,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACjB,KAAK,EAAE,IAAI,CAAC8C,QAAQ,CAAA,CAAA;QACrD,IAAI,CAACf,OAAO,CAAC9B,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAEjD,GAAGgB,GAAG,CAAC,IAAI,CAACiC,CAAC,CAACE,IAAI,EAAE,IAAI,CAACH,OAAO,CAAA,CAAA,CAAA;AAC9D,KAAA,CAAA;AACA,IAAA,OAAOhD,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;;AASC,IACM,SAASqD,iBAAAA,CACdtD,KAA4B,EAC5BuD,CAAuB,EACvBC,CAAuB,EAAA;IAEvB,MAAMtD,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,qBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,GAAA,CAAA;AAAMlB,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AAChD,QAAA,IAAI,CAACN,EAAE,CAACqC,CAAC,GAAGjD,GAAGW,IAAI,CAAC,IAAI,CAAC0C,CAAC,EAAErD,EAAAA,CAAGkD,KAAK,CAAClD,GAAGgB,GAAG,CAAC,IAAI,CAACqC,CAAC,EAAE,GAAA,CAAA,CAAA,EAAO,IAAI,CAACC,CAAC,EAAEtD,EAAAA,CAAGkD,KAAK,CAAClD,GAAGgB,GAAG,CAAC,IAAI,CAACsC,CAAC,EAAE,GAAA,CAAA,CAAA,CAAA;QAC3F,IAAI,CAACxB,OAAO,CACV9B,EAAGW,CAAAA,IAAI,CACLX,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,CAAC7B,CAAC,EAAEpB,EAAG2B,CAAAA,GAAG,CAAC,IAAI,CAACsB,CAAC,CAAC3B,CAAC,EAAE,GAAA,CAAA,CAAA,EAClC,IAAI,CAAC2B,CAAC,CAAC3B,CAAC,EACRtB,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAAC0B,CAAC,CAACrB,CAAC,EAAE5B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACsB,CAAC,CAACpB,CAAC,EAAE,GAAA,CAAA,CAAA,EAClC,IAAI,CAACoB,CAAC,CAACpB,CAAC,CAAA,CAAA;AAGd,KAAA,CAAA;AACA,IAAA,OAAO7B,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAAC4C,CAAGC,EAAAA,CAAAA,CAAAA;AAC1C;AACA;;;;;;;;AAQC,IACM,SAASC,mBAAoBzD,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAClF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,uBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;AACpC,QAAA,IAAI,CAACmB,OAAO,CACV9B,GAAGwD,IAAI,CACLxD,GAAGe,GAAG,CAAC,IAAI,CAAChB,KAAK,CAACqB,CAAC,EAAEpB,GAAG2B,GAAG,CAAC,IAAI,CAAC5B,KAAK,CAACuB,CAAC,EAAE,GAC1CtB,CAAAA,CAAAA,EAAAA,EAAAA,CAAGe,GAAG,CAAC,IAAI,CAAChB,KAAK,CAAC6B,CAAC,EAAE5B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAAC5B,KAAK,CAAC8B,CAAC,EAAE,GAAA,CAAA,CAAA,CAAA,CAAA;AAGhD,KAAA,CAAA;AACA,IAAA,OAAO7B,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;;AASC,IACM,SAAS0D,UAAAA,CAAW3D,KAA4B,EAAE4D,GAAgB,EAAEC,QAA8B,EAAA;IACvG,MAAM3D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,cAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,KAAA,CAAA;AAAQ5D,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;QACrD,IAAI,CAACN,EAAE,CAACiD,MAAM,GAAG7D,EAAG8D,CAAAA,GAAG,CAAC,IAAI,CAACJ,GAAG,CAACK,CAAC,EAAE/D,EAAAA,CAAG8D,GAAG,CAAC,IAAI,CAACJ,GAAG,CAACM,CAAC,EAAE,IAAI,CAACN,GAAG,CAACJ,CAAC,CAAA,CAAA;AACjE,QAAA,IAAI,CAAC1C,EAAE,CAACqD,CAAC,GAAGjE,EAAG2B,CAAAA,GAAG,CAAC,IAAI,CAACkC,MAAM,EAAE,IAAI,CAACK,KAAK,CAAA;AAC1C,QAAA,IAAI,CAACD,CAAC,GAAGjE,EAAG2B,CAAAA,GAAG,CAAC3B,EAAGmE,CAAAA,IAAI,CAACnE,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,GAAO,CAAA,CAAA,EAAA,GAAA,CAAA;QAC9C,IAAI,CAACnC,OAAO,CAAC9B,EAAGW,CAAAA,IAAI,CAACX,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAAC+B,GAAG,EAAE1D,GAAGgB,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA,EAAI,IAAI,CAACD,CAAC,CAAA,CAAA;AAC3E,KAAA,CAAA;AACA,IAAA,OAAOjE,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAACiD,GAAKC,EAAAA,QAAAA,CAAAA;AAC5C;AAEA;;;;;;;;;AASC,IACM,SAASS,UAAAA,CAAWtE,KAA4B,EAAEuE,IAAiB,EAAEV,QAA8B,EAAA;IACxG,MAAM3D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,cAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,MAAA,CAAA;AAASX,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;QACtD,IAAI,CAACY,OAAO,CAAC9B,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACqD,IAAI,CAACX,GAAG,EAAE,IAAI,CAACW,IAAI,CAAChB,CAAC,EAAE,IAAI,CAACa,KAAK,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOlE,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAAC4D,IAAMV,EAAAA,QAAAA,CAAAA;AAC7C;AAEA;;;;;;;;AAQC,IACM,SAASW,aAAcxE,CAAAA,KAA4B,EAAEyE,KAAkB,EAAA;IAC5E,MAAMvE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,iBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;;;AAGpC,QAAA,IAAI,CAAC9B,OAAO,CACV9B,EAAGgB,CAAAA,GAAG,CACJ,IAAI,CAACuD,KAAK,EACVvE,GAAGe,GAAG,CACJf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACuD,KAAK,EAAEvE,GAAGe,GAAG,CAACf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACuD,KAAK,EAAE,cAAcvE,EAAG4D,CAAAA,IAAI,CAAC,WACnE5D,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,WAAA,CAAA,CAAA,CAAA,CAAA;AAIhB,KAAA,CAAA;AACA,IAAA,OAAO5D,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAAC8D,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;AAQC,IACM,SAASC,aAAc1E,CAAAA,KAA4B,EAAEyE,KAAkB,EAAA;IAC5E,MAAMvE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,iBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;;;AAGpC,QAAA,IAAI,CAAC9B,OAAO,CACV9B,EAAAA,CAAG8D,GAAG,CAAC9D,EAAGuB,CAAAA,GAAG,CAACvB,EAAAA,CAAGgB,GAAG,CAAChB,GAAGyB,GAAG,CAAC,IAAI,CAAC8C,KAAK,EAAEvE,EAAG4D,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAA,EAAe,KAAQ5D,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,KAAS5D,CAAAA,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AAEpG,KAAA,CAAA;AACA,IAAA,OAAO5D,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAAC8D,KAAAA,CAAAA;AACvC;AAEA,iBACO,SAASE,6BACd3E,CAAAA,KAA4B,EAC5B4E,GAAgB,EAChBC,EAAe,EACfC,KAA4B,EAAA;IAE5B,MAAM5E,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAM4E,KACJD,GAAAA,KAAAA,KAAUE,SAAaF,IAAAA,KAAAA,KAAU,OAAO5E,EAAG+E,CAAAA,aAAa,CAACL,GAAAA,EAAKC,EAAM3E,CAAAA,GAAAA,EAAAA,CAAGgF,kBAAkB,CAACN,KAAKC,EAAIC,EAAAA,KAAAA,CAAAA;AACrG,IAAA,IAAI5E,EAAGiF,CAAAA,SAAS,EAAGC,CAAAA,IAAI,KAAK,OAAS,EAAA;AACnC,QAAA,OAAOtC,8BAA8B9C,KAAO+E,EAAAA,KAAAA,CAAAA;KACvC,MAAA;QACL,OAAOA,KAAAA;AACT;AACF;;;;"}
1
+ {"version":3,"file":"misc.js","sources":["../../src/shaders/misc.ts"],"sourcesContent":["import type { PBShaderExp } from '@zephyr3d/device';\r\nimport { PBInsideFunctionScope, PBPrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_DecodeFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.pack = pb.floor(pb.add(pb.mul(this.value, 255), 0.5));\r\n\r\n // Extract bits\r\n this.$l.bitSign = pb.float(pb.greaterThan(this.pack.x, 127.0));\r\n this.$l.bitExpn = pb.float(pb.greaterThan(this.pack.y, 127.0));\r\n this.pack.x = pb.sub(this.pack.x, pb.mul(this.bitSign, 128));\r\n this.pack.y = pb.sub(this.pack.y, pb.mul(this.bitExpn, 128));\r\n\r\n // Compute parts of number\r\n this.$l.exponent = pb.add(pb.mul(this.pack.x, 2.0), this.bitExpn);\r\n this.exponent = pb.pow(2.0, pb.sub(this.exponent, 127.0));\r\n this.$l.mantissa = pb.float(1.0);\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.w, 8388608.0));\r\n\r\n // Return result\r\n this.$return(pb.mul(pb.sub(1.0, pb.mul(this.bitSign, 2)), this.exponent, this.mantissa));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_EncodeFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.floatMax = pb.mul(1.70141184, pb.pow(10, 38));\r\n this.$l.floatMin = pb.mul(1.17549435, pb.pow(10, -38));\r\n this.$l.absvalue = pb.abs(this.value);\r\n this.$if(pb.lessThanEqual(this.absvalue, this.floatMin), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$if(pb.greaterThanEqual(this.value, this.floatMax), function () {\r\n this.$return(pb.vec4(127 / 255, 128 / 255, 0, 0));\r\n });\r\n this.$if(pb.lessThanEqual(this.value, pb.neg(this.floatMax)), function () {\r\n this.$return(pb.vec4(1, 128 / 255, 0, 0));\r\n });\r\n this.$l.pack = pb.vec4(0);\r\n\r\n // Compute Exponent and Mantissa\r\n this.$l.exponent = pb.floor(pb.log2(this.absvalue));\r\n this.$l.mantissa = pb.sub(pb.mul(this.absvalue, pb.pow(2.0, pb.neg(this.exponent))), 1.0);\r\n\r\n // Pack Mantissa into bytes\r\n this.pack.y = pb.floor(pb.mul(this.mantissa, 128.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.pack.z = pb.floor(pb.mul(this.mantissa, 32768.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.pack.w = pb.floor(pb.mul(this.mantissa, 8388608.0));\r\n\r\n // Pack Sing and Exponent into bytes\r\n this.$l.expbias = pb.add(this.exponent, 127.0);\r\n this.pack.x = pb.add(this.pack.x, pb.floor(pb.div(this.expbias, 2.0)));\r\n this.expbias = pb.sub(this.expbias, pb.mul(this.pack.x, 2.0));\r\n this.pack.y = pb.add(this.pack.y, pb.mul(pb.floor(this.expbias), 128.0));\r\n this.pack.x = pb.add(this.pack.x, pb.mul(128.0, pb.float(pb.lessThan(this.value, 0)))); // Sign\r\n this.$return(pb.div(pb.floor(pb.add(this.pack, pb.vec4(0.5))), 255.0));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeNormalizedFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeNormalizedFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeNormalizedFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_decodeNormalizedFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.bitShift = pb.vec4(1 / (256 * 256 * 256), 1 / (256 * 256), 1 / 256, 1);\r\n this.$return(pb.dot(this.value, this.bitShift));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeNormalizedFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeNormalizedFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.bitShift = pb.vec4(256 * 256 * 256, 256 * 256, 256, 1);\r\n this.$l.bitMask = pb.vec4(0, 1 / 256, 1 / 256, 1 / 256);\r\n this.$l.t = pb.fract(pb.mul(this.value, this.bitShift));\r\n this.$return(pb.sub(this.t, pb.mul(this.t.xxyz, this.bitMask)));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes two half floats into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - The first half float to be encode\r\n * @param b - The second half float to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encode2HalfToRGBA(\r\n scope: PBInsideFunctionScope,\r\n a: PBShaderExp | number,\r\n b: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encode2HalfToRGBA';\r\n pb.func(funcName, [pb.float('a'), pb.float('b')], function () {\r\n this.$l.t = pb.vec4(this.a, pb.fract(pb.mul(this.a, 255)), this.b, pb.fract(pb.mul(this.b, 255)));\r\n this.$return(\r\n pb.vec4(\r\n pb.sub(this.t.x, pb.div(this.t.y, 255)),\r\n this.t.y,\r\n pb.sub(this.t.z, pb.div(this.t.w, 255)),\r\n this.t.w\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](a, b) as PBShaderExp;\r\n}\r\n/**\r\n * Decodes two half floats that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns A vec2 that contains the two half floats\r\n *\r\n * @public\r\n */\r\nexport function decode2HalfFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decode2HalfFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$return(\r\n pb.vec2(\r\n pb.add(this.value.x, pb.div(this.value.y, 255)),\r\n pb.add(this.value.z, pb.div(this.value.w, 255))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a color value into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgb - The color value to be encoded\r\n * @param maxRange - The max range of color components\r\n * @returns The encoded RGBA value\r\n *\r\n * @public\r\n */\r\nexport function encodeRGBM(scope: PBInsideFunctionScope, rgb: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeRGBM';\r\n pb.func(funcName, [pb.vec3('rgb'), pb.float('range')], function () {\r\n this.$l.maxRGB = pb.max(this.rgb.r, pb.max(this.rgb.g, this.rgb.b));\r\n this.$l.M = pb.div(this.maxRGB, this.range);\r\n this.M = pb.div(pb.ceil(pb.mul(this.M, 255)), 255);\r\n this.$return(pb.vec4(pb.div(this.rgb, pb.mul(this.M, this.range)), this.M));\r\n });\r\n return pb.getGlobalScope()[funcName](rgb, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes color value that was encoded into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgbm - The RGBM to be decoded\r\n * @param maxRange - The max range of color components\r\n * @returns The decoded RGB color value\r\n *\r\n * @public\r\n */\r\nexport function decodeRGBM(scope: PBInsideFunctionScope, rgbm: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decodeRGBM';\r\n pb.func(funcName, [pb.vec4('rgbm'), pb.float('range')], function () {\r\n this.$return(pb.mul(this.rgbm.rgb, this.rgbm.a, this.range));\r\n });\r\n return pb.getGlobalScope()[funcName](rgbm, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from gamma space to linear space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The linear space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function gammaToLinear(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gammaToLinear';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\r\n this.$return(\r\n pb.mul(\r\n this.color,\r\n pb.add(\r\n pb.mul(this.color, pb.add(pb.mul(this.color, 0.305306011), pb.vec3(0.682171111))),\r\n pb.vec3(0.012522878)\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from linear space to gamma space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The gamma space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function linearToGamma(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_linearToGamma';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Almost perfect version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // C_srgb_2 = max(1.055 * pow(C_lin, 0.416666667) - 0.055, 0);\r\n this.$return(\r\n pb.max(pb.sub(pb.mul(pb.pow(this.color, pb.vec3(0.416666667)), 1.055), pb.vec3(0.055)), pb.vec3(0))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n"],"names":["decodeFloatFromRGBA","scope","value","pb","$builder","$typeinfo","isPrimitiveType","primitiveType","PBPrimitiveType","F32VEC4","Error","PBInsideFunctionScope","funcName","func","vec4","$l","pack","floor","add","mul","bitSign","float","greaterThan","x","bitExpn","y","sub","exponent","pow","mantissa","div","z","w","$return","encodeFloatToRGBA","floatMax","floatMin","absvalue","abs","$if","lessThanEqual","greaterThanEqual","neg","log2","expbias","lessThan","getGlobalScope","decodeNormalizedFloatFromRGBA","bitShift","dot","encodeNormalizedFloatToRGBA","bitMask","t","fract","xxyz","encode2HalfToRGBA","a","b","decode2HalfFromRGBA","vec2","encodeRGBM","rgb","maxRange","vec3","maxRGB","max","r","g","M","range","ceil","decodeRGBM","rgbm","gammaToLinear","color","linearToGamma"],"mappings":";;AAGA;;;;;;;;AAQC,IACM,SAASA,mBAAoBC,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAClF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,IACE,CAACF,KAAAA,IACD,CAACA,KAAAA,CAAMG,SAAS,CAACC,eAAe,EAChCJ,IAAAA,KAAAA,CAAMG,SAAS,CAACE,aAAa,KAAKC,eAAAA,CAAgBC,OAAO,EACzD;AACA,QAAA,MAAM,IAAIC,KAAM,CAAA,2DAAA,CAAA;AAClB;AACA,IAAA,IAAI,CAACT,KAAS,IAAA,EAAEA,KAAAA,YAAiBU,qBAAoB,CAAI,EAAA;AACvD,QAAA,MAAM,IAAID,KACR,CAAA,gGAAA,CAAA;AAEJ;AACA,IAAA,MAAME,QAAW,GAAA,uBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;AACpC,QAAA,IAAI,CAACC,EAAE,CAACC,IAAI,GAAGb,EAAAA,CAAGc,KAAK,CAACd,EAAAA,CAAGe,GAAG,CAACf,GAAGgB,GAAG,CAAC,IAAI,CAACjB,KAAK,EAAE,GAAM,CAAA,EAAA,GAAA,CAAA,CAAA;;AAGxD,QAAA,IAAI,CAACa,EAAE,CAACK,OAAO,GAAGjB,GAAGkB,KAAK,CAAClB,EAAGmB,CAAAA,WAAW,CAAC,IAAI,CAACN,IAAI,CAACO,CAAC,EAAE,KAAA,CAAA,CAAA;AACvD,QAAA,IAAI,CAACR,EAAE,CAACS,OAAO,GAAGrB,GAAGkB,KAAK,CAAClB,EAAGmB,CAAAA,WAAW,CAAC,IAAI,CAACN,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;QACvD,IAAI,CAACT,IAAI,CAACO,CAAC,GAAGpB,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,CAACO,CAAC,EAAEpB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACC,OAAO,EAAE,GAAA,CAAA,CAAA;QACvD,IAAI,CAACJ,IAAI,CAACS,CAAC,GAAGtB,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,CAACS,CAAC,EAAEtB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACK,OAAO,EAAE,GAAA,CAAA,CAAA;;QAGvD,IAAI,CAACT,EAAE,CAACY,QAAQ,GAAGxB,EAAGe,CAAAA,GAAG,CAACf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACH,IAAI,CAACO,CAAC,EAAE,GAAM,CAAA,EAAA,IAAI,CAACC,OAAO,CAAA;AAChE,QAAA,IAAI,CAACG,QAAQ,GAAGxB,EAAAA,CAAGyB,GAAG,CAAC,GAAKzB,EAAAA,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACC,QAAQ,EAAE,KAAA,CAAA,CAAA;AAClD,QAAA,IAAI,CAACZ,EAAE,CAACc,QAAQ,GAAG1B,EAAAA,CAAGkB,KAAK,CAAC,GAAA,CAAA;AAC5B,QAAA,IAAI,CAACQ,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACI,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACe,CAAC,EAAE,OAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACF,QAAQ,GAAG1B,GAAGe,GAAG,CAAC,IAAI,CAACW,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACgB,CAAC,EAAE,SAAA,CAAA,CAAA;;QAG1D,IAAI,CAACC,OAAO,CAAC9B,EAAGgB,CAAAA,GAAG,CAAChB,EAAGuB,CAAAA,GAAG,CAAC,GAAA,EAAKvB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACC,OAAO,EAAE,CAAK,CAAA,CAAA,EAAA,IAAI,CAACO,QAAQ,EAAE,IAAI,CAACE,QAAQ,CAAA,CAAA;AACxF,KAAA,CAAA;IACA,OAAO5B,KAAK,CAACW,QAAAA,CAAS,CAACV,KAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASgC,iBAAkBjC,CAAAA,KAA4B,EAAEC,KAA2B,EAAA;IACzF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,qBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;AACrC,QAAA,IAAI,CAACN,EAAE,CAACoB,QAAQ,GAAGhC,EAAAA,CAAGgB,GAAG,CAAC,UAAYhB,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,EAAI,EAAA,EAAA,CAAA,CAAA;AACjD,QAAA,IAAI,CAACb,EAAE,CAACqB,QAAQ,GAAGjC,EAAAA,CAAGgB,GAAG,CAAC,UAAYhB,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,GAAC,CAAA,CAAA;QAClD,IAAI,CAACb,EAAE,CAACsB,QAAQ,GAAGlC,GAAGmC,GAAG,CAAC,IAAI,CAACpC,KAAK,CAAA;AACpC,QAAA,IAAI,CAACqC,GAAG,CAACpC,EAAAA,CAAGqC,aAAa,CAAC,IAAI,CAACH,QAAQ,EAAE,IAAI,CAACD,QAAQ,CAAG,EAAA,WAAA;AACvD,YAAA,IAAI,CAACH,OAAO,CAAC9B,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,SAAA,CAAA;AACA,QAAA,IAAI,CAACyB,GAAG,CAACpC,EAAAA,CAAGsC,gBAAgB,CAAC,IAAI,CAACvC,KAAK,EAAE,IAAI,CAACiC,QAAQ,CAAG,EAAA,WAAA;YACvD,IAAI,CAACF,OAAO,CAAC9B,EAAGW,CAAAA,IAAI,CAAC,GAAM,GAAA,GAAA,EAAK,GAAM,GAAA,GAAA,EAAK,CAAG,EAAA,CAAA,CAAA,CAAA;AAChD,SAAA,CAAA;AACA,QAAA,IAAI,CAACyB,GAAG,CAACpC,EAAGqC,CAAAA,aAAa,CAAC,IAAI,CAACtC,KAAK,EAAEC,GAAGuC,GAAG,CAAC,IAAI,CAACP,QAAQ,CAAI,CAAA,EAAA,WAAA;YAC5D,IAAI,CAACF,OAAO,CAAC9B,EAAAA,CAAGW,IAAI,CAAC,CAAA,EAAG,GAAM,GAAA,GAAA,EAAK,CAAG,EAAA,CAAA,CAAA,CAAA;AACxC,SAAA,CAAA;AACA,QAAA,IAAI,CAACC,EAAE,CAACC,IAAI,GAAGb,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA;;AAGvB,QAAA,IAAI,CAACC,EAAE,CAACY,QAAQ,GAAGxB,EAAAA,CAAGc,KAAK,CAACd,EAAGwC,CAAAA,IAAI,CAAC,IAAI,CAACN,QAAQ,CAAA,CAAA;QACjD,IAAI,CAACtB,EAAE,CAACc,QAAQ,GAAG1B,GAAGuB,GAAG,CAACvB,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACkB,QAAQ,EAAElC,EAAGyB,CAAAA,GAAG,CAAC,GAAA,EAAKzB,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACf,QAAQ,CAAK,CAAA,CAAA,EAAA,GAAA,CAAA;;AAGrF,QAAA,IAAI,CAACX,IAAI,CAACS,CAAC,GAAGtB,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,KAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACA,QAAQ,GAAG1B,GAAGuB,GAAG,CAAC,IAAI,CAACG,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACS,CAAC,EAAE,KAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACT,IAAI,CAACe,CAAC,GAAG5B,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,OAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACA,QAAQ,GAAG1B,GAAGuB,GAAG,CAAC,IAAI,CAACG,QAAQ,EAAE1B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACd,IAAI,CAACe,CAAC,EAAE,OAAA,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACf,IAAI,CAACgB,CAAC,GAAG7B,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACU,QAAQ,EAAE,SAAA,CAAA,CAAA;;QAG7C,IAAI,CAACd,EAAE,CAAC6B,OAAO,GAAGzC,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACS,QAAQ,EAAE,KAAA,CAAA;QACxC,IAAI,CAACX,IAAI,CAACO,CAAC,GAAGpB,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,IAAI,CAACO,CAAC,EAAEpB,EAAGc,CAAAA,KAAK,CAACd,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACc,OAAO,EAAE,GAAA,CAAA,CAAA,CAAA;AAChE,QAAA,IAAI,CAACA,OAAO,GAAGzC,GAAGuB,GAAG,CAAC,IAAI,CAACkB,OAAO,EAAEzC,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACH,IAAI,CAACO,CAAC,EAAE,GAAA,CAAA,CAAA;QACxD,IAAI,CAACP,IAAI,CAACS,CAAC,GAAGtB,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,IAAI,CAACS,CAAC,EAAEtB,EAAGgB,CAAAA,GAAG,CAAChB,EAAAA,CAAGc,KAAK,CAAC,IAAI,CAAC2B,OAAO,CAAG,EAAA,KAAA,CAAA,CAAA;AACjE,QAAA,IAAI,CAAC5B,IAAI,CAACO,CAAC,GAAGpB,EAAAA,CAAGe,GAAG,CAAC,IAAI,CAACF,IAAI,CAACO,CAAC,EAAEpB,EAAGgB,CAAAA,GAAG,CAAC,KAAA,EAAOhB,EAAGkB,CAAAA,KAAK,CAAClB,EAAAA,CAAG0C,QAAQ,CAAC,IAAI,CAAC3C,KAAK,EAAE;AACjF,QAAA,IAAI,CAAC+B,OAAO,CAAC9B,GAAG2B,GAAG,CAAC3B,GAAGc,KAAK,CAACd,GAAGe,GAAG,CAAC,IAAI,CAACF,IAAI,EAAEb,EAAGW,CAAAA,IAAI,CAAC,GAAQ,CAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA;AACjE,KAAA,CAAA;AACA,IAAA,OAAOX,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;AAQC,IACM,SAAS6C,6BAA8B9C,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAC5F,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,IACE,CAACF,KAAAA,IACD,CAACA,KAAAA,CAAMG,SAAS,CAACC,eAAe,EAChCJ,IAAAA,KAAAA,CAAMG,SAAS,CAACE,aAAa,KAAKC,eAAAA,CAAgBC,OAAO,EACzD;AACA,QAAA,MAAM,IAAIC,KAAM,CAAA,qEAAA,CAAA;AAClB;AACA,IAAA,IAAI,CAACT,KAAS,IAAA,EAAEA,KAAAA,YAAiBU,qBAAoB,CAAI,EAAA;AACvD,QAAA,MAAM,IAAID,KACR,CAAA,0GAAA,CAAA;AAEJ;AACA,IAAA,MAAME,QAAW,GAAA,iCAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;QACpC,IAAI,CAACC,EAAE,CAACiC,QAAQ,GAAG7C,EAAGW,CAAAA,IAAI,CAAC,CAAK,IAAA,MAAM,GAAM,GAAA,GAAE,GAAI,CAAK,IAAA,MAAM,GAAE,CAAA,EAAI,IAAI,GAAK,EAAA,CAAA,CAAA;AAC5E,QAAA,IAAI,CAACmB,OAAO,CAAC9B,EAAAA,CAAG8C,GAAG,CAAC,IAAI,CAAC/C,KAAK,EAAE,IAAI,CAAC8C,QAAQ,CAAA,CAAA;AAC/C,KAAA,CAAA;IACA,OAAO/C,KAAK,CAACW,QAAAA,CAAS,CAACV,KAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASgD,2BAA4BjD,CAAAA,KAA4B,EAAEC,KAA2B,EAAA;IACnG,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,+BAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;AACrC,QAAA,IAAI,CAACN,EAAE,CAACiC,QAAQ,GAAG7C,EAAAA,CAAGW,IAAI,CAAC,GAAM,GAAA,GAAA,GAAM,GAAK,EAAA,GAAA,GAAM,KAAK,GAAK,EAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACC,EAAE,CAACoC,OAAO,GAAGhD,EAAAA,CAAGW,IAAI,CAAC,CAAG,EAAA,CAAA,GAAI,GAAK,EAAA,CAAA,GAAI,KAAK,CAAI,GAAA,GAAA,CAAA;AACnD,QAAA,IAAI,CAACC,EAAE,CAACqC,CAAC,GAAGjD,GAAGkD,KAAK,CAAClD,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACjB,KAAK,EAAE,IAAI,CAAC8C,QAAQ,CAAA,CAAA;QACrD,IAAI,CAACf,OAAO,CAAC9B,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAEjD,GAAGgB,GAAG,CAAC,IAAI,CAACiC,CAAC,CAACE,IAAI,EAAE,IAAI,CAACH,OAAO,CAAA,CAAA,CAAA;AAC9D,KAAA,CAAA;AACA,IAAA,OAAOhD,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;;AASC,IACM,SAASqD,iBAAAA,CACdtD,KAA4B,EAC5BuD,CAAuB,EACvBC,CAAuB,EAAA;IAEvB,MAAMtD,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,qBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,GAAA,CAAA;AAAMlB,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AAChD,QAAA,IAAI,CAACN,EAAE,CAACqC,CAAC,GAAGjD,GAAGW,IAAI,CAAC,IAAI,CAAC0C,CAAC,EAAErD,EAAAA,CAAGkD,KAAK,CAAClD,GAAGgB,GAAG,CAAC,IAAI,CAACqC,CAAC,EAAE,GAAA,CAAA,CAAA,EAAO,IAAI,CAACC,CAAC,EAAEtD,EAAAA,CAAGkD,KAAK,CAAClD,GAAGgB,GAAG,CAAC,IAAI,CAACsC,CAAC,EAAE,GAAA,CAAA,CAAA,CAAA;QAC3F,IAAI,CAACxB,OAAO,CACV9B,EAAGW,CAAAA,IAAI,CACLX,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,CAAC7B,CAAC,EAAEpB,EAAG2B,CAAAA,GAAG,CAAC,IAAI,CAACsB,CAAC,CAAC3B,CAAC,EAAE,GAAA,CAAA,CAAA,EAClC,IAAI,CAAC2B,CAAC,CAAC3B,CAAC,EACRtB,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAAC0B,CAAC,CAACrB,CAAC,EAAE5B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAACsB,CAAC,CAACpB,CAAC,EAAE,GAAA,CAAA,CAAA,EAClC,IAAI,CAACoB,CAAC,CAACpB,CAAC,CAAA,CAAA;AAGd,KAAA,CAAA;AACA,IAAA,OAAO7B,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAAC4C,CAAGC,EAAAA,CAAAA,CAAAA;AAC1C;AACA;;;;;;;;AAQC,IACM,SAASC,mBAAoBzD,CAAAA,KAA4B,EAAEC,KAAkB,EAAA;IAClF,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,uBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;AACpC,QAAA,IAAI,CAACmB,OAAO,CACV9B,GAAGwD,IAAI,CACLxD,GAAGe,GAAG,CAAC,IAAI,CAAChB,KAAK,CAACqB,CAAC,EAAEpB,GAAG2B,GAAG,CAAC,IAAI,CAAC5B,KAAK,CAACuB,CAAC,EAAE,GAC1CtB,CAAAA,CAAAA,EAAAA,EAAAA,CAAGe,GAAG,CAAC,IAAI,CAAChB,KAAK,CAAC6B,CAAC,EAAE5B,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAAC5B,KAAK,CAAC8B,CAAC,EAAE,GAAA,CAAA,CAAA,CAAA,CAAA;AAGhD,KAAA,CAAA;AACA,IAAA,OAAO7B,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAACV,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;;AASC,IACM,SAAS0D,UAAAA,CAAW3D,KAA4B,EAAE4D,GAAgB,EAAEC,QAA8B,EAAA;IACvG,MAAM3D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,cAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,KAAA,CAAA;AAAQ5D,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;QACrD,IAAI,CAACN,EAAE,CAACiD,MAAM,GAAG7D,EAAG8D,CAAAA,GAAG,CAAC,IAAI,CAACJ,GAAG,CAACK,CAAC,EAAE/D,EAAAA,CAAG8D,GAAG,CAAC,IAAI,CAACJ,GAAG,CAACM,CAAC,EAAE,IAAI,CAACN,GAAG,CAACJ,CAAC,CAAA,CAAA;AACjE,QAAA,IAAI,CAAC1C,EAAE,CAACqD,CAAC,GAAGjE,EAAG2B,CAAAA,GAAG,CAAC,IAAI,CAACkC,MAAM,EAAE,IAAI,CAACK,KAAK,CAAA;AAC1C,QAAA,IAAI,CAACD,CAAC,GAAGjE,EAAG2B,CAAAA,GAAG,CAAC3B,EAAGmE,CAAAA,IAAI,CAACnE,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,GAAO,CAAA,CAAA,EAAA,GAAA,CAAA;QAC9C,IAAI,CAACnC,OAAO,CAAC9B,EAAGW,CAAAA,IAAI,CAACX,EAAAA,CAAG2B,GAAG,CAAC,IAAI,CAAC+B,GAAG,EAAE1D,GAAGgB,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA,EAAI,IAAI,CAACD,CAAC,CAAA,CAAA;AAC3E,KAAA,CAAA;AACA,IAAA,OAAOjE,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAACiD,GAAKC,EAAAA,QAAAA,CAAAA;AAC5C;AAEA;;;;;;;;;AASC,IACM,SAASS,UAAAA,CAAWtE,KAA4B,EAAEuE,IAAiB,EAAEV,QAA8B,EAAA;IACxG,MAAM3D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,cAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAGW,IAAI,CAAC,MAAA,CAAA;AAASX,QAAAA,EAAAA,CAAGkB,KAAK,CAAC,OAAA;KAAS,EAAE,WAAA;QACtD,IAAI,CAACY,OAAO,CAAC9B,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACqD,IAAI,CAACX,GAAG,EAAE,IAAI,CAACW,IAAI,CAAChB,CAAC,EAAE,IAAI,CAACa,KAAK,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOlE,GAAG2C,cAAc,EAAE,CAAClC,QAAAA,CAAS,CAAC4D,IAAMV,EAAAA,QAAAA,CAAAA;AAC7C;AAEA;;;;;;;;AAQC,IACM,SAASW,aAAcxE,CAAAA,KAA4B,EAAEyE,KAAkB,EAAA;IAC5E,MAAMvE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,iBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;;;AAGpC,QAAA,IAAI,CAAC9B,OAAO,CACV9B,EAAGgB,CAAAA,GAAG,CACJ,IAAI,CAACuD,KAAK,EACVvE,GAAGe,GAAG,CACJf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACuD,KAAK,EAAEvE,GAAGe,GAAG,CAACf,EAAGgB,CAAAA,GAAG,CAAC,IAAI,CAACuD,KAAK,EAAE,cAAcvE,EAAG4D,CAAAA,IAAI,CAAC,WACnE5D,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,WAAA,CAAA,CAAA,CAAA,CAAA;AAIhB,KAAA,CAAA;AACA,IAAA,OAAO5D,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAAC8D,KAAAA,CAAAA;AACvC;AAEA;;;;;;;;AAQC,IACM,SAASC,aAAc1E,CAAAA,KAA4B,EAAEyE,KAAkB,EAAA;IAC5E,MAAMvE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMQ,QAAW,GAAA,iBAAA;IACjBT,EAAGU,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACT,QAAAA,EAAAA,CAAG4D,IAAI,CAAC,OAAA;KAAS,EAAE,WAAA;;;AAGpC,QAAA,IAAI,CAAC9B,OAAO,CACV9B,EAAAA,CAAG8D,GAAG,CAAC9D,EAAGuB,CAAAA,GAAG,CAACvB,EAAAA,CAAGgB,GAAG,CAAChB,GAAGyB,GAAG,CAAC,IAAI,CAAC8C,KAAK,EAAEvE,EAAG4D,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAA,EAAe,KAAQ5D,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,KAAS5D,CAAAA,CAAAA,EAAAA,EAAAA,CAAG4D,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AAEpG,KAAA,CAAA;AACA,IAAA,OAAO5D,EAAG2C,CAAAA,cAAc,EAAE,CAAClC,SAAS,CAAC8D,KAAAA,CAAAA;AACvC;;;;"}
@@ -326,7 +326,11 @@
326
326
  this.$for(pb.int('z'), -1, 2, function() {
327
327
  this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));
328
328
  {
329
- this.$l.h = pb.add(pb.mul(this[funcNameHash](pb.mod(pb.add(this.id, this.offset), pb.vec3(this.freq))), 0.4), pb.vec3(0.3));
329
+ // Floored wrap: pb.mod is WGSL's truncated `%` on WebGPU, which leaves the neighbour
330
+ // cell -1 at -1 instead of freq - 1 and breaks the tiling
331
+ this.$l.cell = pb.add(this.id, this.offset);
332
+ this.cell = pb.sub(this.cell, pb.mul(pb.vec3(this.freq), pb.floor(pb.div(this.cell, pb.vec3(this.freq)))));
333
+ this.$l.h = pb.add(pb.mul(this[funcNameHash](this.cell), 0.4), pb.vec3(0.3));
330
334
  }
331
335
  this.h = pb.add(this.h, this.offset);
332
336
  this.$l.d = pb.sub(this.p, this.h);