@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"temporal.js","sources":["../../src/shaders/temporal.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Views {@link Camera.TAADebug} selects between, in place of the resolved image.\r\n *\r\n * @remarks\r\n * Public because the property they name is: a setter taking a bare number whose\r\n * legal values cannot be spelled is not usable from outside the package, and the\r\n * editor already surfaces them as an enum.\r\n *\r\n * @public\r\n */\r\nexport const TAA_DEBUG_NONE = 0;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_CURRENT_COLOR = 1;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_HISTORY_COLOR = 2;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_VELOCITY = 3;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_EDGE = 4;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_ALAPH = 5;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_MOTION_VECTOR = 6;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_STRENGTH = 7;\r\n\r\nconst FLT_MIN = 0.00000001;\r\nconst FLT_MAX = 32767;\r\n/** Reinhard-space ceiling whose inverse is {@link FLT_MAX}, so clipping in\r\n * tonemapped space keeps the same linear ceiling the resolve had when it\r\n * clamped afterwards. */\r\nconst TONEMAPPED_MAX = FLT_MAX / (FLT_MAX + 1);\r\n\r\n/**\r\n * Temporal resolve implementation\r\n *\r\n * @param scope - The shader scope\r\n * @param currentColorTex - 2D texture that holds the current color\r\n * @param historyColorTex - 2D texture that holds the history color\r\n * @param currentDepthTex - 2D texture that holds the scene depth\r\n * @param motionVectorTex - 2D texture that holds the motion vector\r\n * @param prevMotionVectorTex - 2D texture that holds the previous motion vector\r\n * @param uv - Fragment uv coordinate\r\n * @param workSize - Target texture size\r\n * @param debug - Value for debugging\r\n * @returns\r\n *\r\n * @public\r\n */\r\nexport function temporalResolve(\r\n scope: PBInsideFunctionScope,\r\n currentColorTex: PBShaderExp,\r\n historyColorTex: PBShaderExp,\r\n currentDepthTex: PBShaderExp,\r\n motionVectorTex: PBShaderExp,\r\n prevMotionVectorTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n workSize: PBShaderExp,\r\n debug = TAA_DEBUG_NONE\r\n) {\r\n const pb = scope.$builder;\r\n // Defined ahead of the neighbourhood helpers because clipHistoryColor calls\r\n // reinhard: pb emits functions in definition order and GLSL requires a callee\r\n // to be declared before its caller.\r\n pb.func('reinhard', [pb.vec3('hdr')], function () {\r\n // Floor at zero: x / (1 + x) has a pole at -1, and the 3x3 neighbourhood is\r\n // sampled straight from the scene color, which an upstream effect can leave\r\n // slightly negative.\r\n this.$l.c = pb.max(this.hdr, pb.vec3(0));\r\n this.$return(pb.div(this.c, pb.add(this.c, pb.vec3(1))));\r\n });\r\n pb.func('reinhardInv', [pb.vec3('sdr')], function () {\r\n this.$return(pb.div(this.sdr, pb.sub(pb.vec3(1), this.sdr)));\r\n });\r\n pb.func('luminance', [pb.vec3('color')], function () {\r\n this.$return(pb.max(pb.dot(this.color, pb.vec3(0.299, 0.587, 0.114)), 0.0001));\r\n });\r\n pb.func('getClosestVelocity', [pb.vec2('uv'), pb.vec2('texSize')], function () {\r\n this.$l.minDepth = pb.float(1);\r\n this.$l.closestUV = this.uv;\r\n this.$l.tmpDepth = pb.float();\r\n this.$l.tmpUV = pb.vec2();\r\n for (let i = -1; i <= 1; i++) {\r\n for (let j = -1; j <= 1; j++) {\r\n this.tmpUV = pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize));\r\n this.tmpDepth = pb.textureSampleLevel(currentDepthTex, this.tmpUV, 0).r;\r\n this.$if(pb.lessThan(this.tmpDepth, this.minDepth), function () {\r\n this.minDepth = this.tmpDepth;\r\n this.closestUV = this.tmpUV;\r\n });\r\n }\r\n }\r\n this.$l.motionVector = pb.textureSampleLevel(motionVectorTex, this.closestUV, 0);\r\n this.$return(this.motionVector.xyz);\r\n });\r\n pb.func('clipAABB', [pb.vec3('aabbMin'), pb.vec3('aabbMax'), pb.vec3('p'), pb.vec3('q')], function () {\r\n this.$l.r = pb.sub(this.q, this.p);\r\n this.$l.rMax = pb.sub(this.aabbMax, this.p);\r\n this.$l.rMin = pb.sub(this.aabbMin, this.p);\r\n this.$if(pb.greaterThan(this.r.x, pb.add(this.rMax.x, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.x, this.r.x));\r\n });\r\n this.$if(pb.greaterThan(this.r.y, pb.add(this.rMax.y, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.y, this.r.y));\r\n });\r\n this.$if(pb.greaterThan(this.r.z, pb.add(this.rMax.z, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.z, this.r.z));\r\n });\r\n this.$if(pb.lessThan(this.r.x, pb.sub(this.rMin.x, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.x, this.r.x));\r\n });\r\n this.$if(pb.lessThan(this.r.y, pb.sub(this.rMin.y, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.y, this.r.y));\r\n });\r\n this.$if(pb.lessThan(this.r.z, pb.sub(this.rMin.z, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.z, this.r.z));\r\n });\r\n this.$return(pb.add(this.p, this.r));\r\n });\r\n pb.func(\r\n 'clipHistoryColor',\r\n [pb.vec2('uv'), pb.vec3('historyColor'), pb.vec2('closestVelocity'), pb.vec2('texSize')],\r\n function () {\r\n let n = 1;\r\n this.$l.colorAvg = pb.vec3(0);\r\n this.$l.colorAvg2 = pb.vec3(0);\r\n for (let i = -1; i <= 1; i++) {\r\n for (let j = -1; j <= 1; j++) {\r\n // The box is built in Reinhard space and `historyColor` arrives\r\n // tonemapped to match. Gathering it in linear HDR instead makes a\r\n // single specular texel of a few thousand, sitting next to neighbours\r\n // near 1, blow the standard deviation up until the AABB contains any\r\n // history at all -- the clip then stops constraining exactly the\r\n // pixels that flicker, which is where it is needed most.\r\n this.$l[`s${n}`] = this.reinhard(\r\n pb.textureSampleLevel(currentColorTex, pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize)), 0)\r\n .rgb\r\n );\r\n this.colorAvg = pb.add(this.colorAvg, this[`s${n}`]);\r\n this.colorAvg2 = pb.add(this.colorAvg2, pb.mul(this[`s${n}`], this[`s${n}`]));\r\n n++;\r\n }\r\n }\r\n this.colorAvg = pb.div(this.colorAvg, n - 1);\r\n this.colorAvg2 = pb.div(this.colorAvg2, n - 1);\r\n // Keep a non-zero floor: collapsing the box to the 3x3 mean while moving\r\n // discards all sub-pixel detail and turns the output into a box-filtered\r\n // jittered frame, which shimmers with the jitter phase.\r\n this.$l.boxSize = pb.mix(2.5, 0.75, pb.smoothStep(0, 0.02, pb.length(this.closestVelocity)));\r\n this.$l.dev = pb.mul(\r\n pb.sqrt(pb.abs(pb.sub(this.colorAvg2, pb.mul(this.colorAvg, this.colorAvg)))),\r\n this.boxSize\r\n );\r\n this.$l.colorMin = pb.sub(this.colorAvg, this.dev);\r\n this.$l.colorMax = pb.add(this.colorAvg, this.dev);\r\n this.$l.color = this.clipAABB(\r\n this.colorMin,\r\n this.colorMax,\r\n pb.clamp(this.colorAvg, this.colorMin, this.colorMax),\r\n this.historyColor\r\n );\r\n this.color = pb.clamp(this.color, pb.vec3(0), pb.vec3(TONEMAPPED_MAX));\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('getDisocclusionFactor', [pb.vec2('uv'), pb.vec2('velocity'), pb.vec2('texSize')], function () {\r\n this.$l.prevVelocitySample = pb.textureSampleLevel(prevMotionVectorTex, this.uv, 0);\r\n this.$l.prevVelocity = this.prevVelocitySample.xy;\r\n this.$l.disocclusion = pb.sub(\r\n pb.length(pb.mul(pb.sub(this.velocity, this.prevVelocity), this.texSize)),\r\n 2.5\r\n );\r\n this.$return(pb.clamp(pb.mul(this.disocclusion, 0.01), 0, 1));\r\n });\r\n pb.func('sampleHistoryColorCatmulRom9', [pb.vec2('uv'), pb.vec2('texSize')], function () {\r\n this.$l.samplePos = pb.mul(this.uv, this.texSize);\r\n this.$l.texPos1 = pb.add(pb.floor(pb.sub(this.samplePos, pb.vec2(0.5))), pb.vec2(0.5));\r\n this.$l.f = pb.sub(this.samplePos, this.texPos1);\r\n this.$l.w0 = pb.mul(\r\n this.f,\r\n pb.sub(pb.mul(this.f, pb.sub(pb.vec2(1), pb.mul(this.f, 0.5))), pb.vec2(0.5))\r\n );\r\n this.$l.w1 = pb.add(pb.vec2(1), pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 1.5), pb.vec2(2.5))));\r\n this.$l.w2 = pb.mul(\r\n this.f,\r\n pb.add(pb.vec2(0.5), pb.mul(this.f, pb.sub(pb.vec2(2), pb.mul(this.f, 1.5))))\r\n );\r\n this.$l.w3 = pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 0.5), pb.vec2(0.5)));\r\n this.$l.w12 = pb.add(this.w1, this.w2);\r\n this.$l.offset12 = pb.div(this.w2, pb.add(this.w1, this.w2));\r\n this.$l.texPos0 = pb.sub(this.texPos1, pb.vec2(1));\r\n this.$l.texPos3 = pb.add(this.texPos1, pb.vec2(2));\r\n this.$l.texPos12 = pb.add(this.texPos1, this.offset12);\r\n this.texPos0 = pb.div(this.texPos0, this.texSize);\r\n this.texPos3 = pb.div(this.texPos3, this.texSize);\r\n this.texPos12 = pb.div(this.texPos12, this.texSize);\r\n this.$l.result = pb.vec3(0);\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos0, 0).rgb, this.w0.x, this.w0.y)\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos12.x, this.texPos0.y), 0).rgb,\r\n this.w12.x,\r\n this.w0.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos3.x, this.texPos0.y), 0).rgb,\r\n this.w3.x,\r\n this.w0.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos0.x, this.texPos12.y), 0).rgb,\r\n this.w0.x,\r\n this.w12.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos12, 0).rgb, this.w12.x, this.w12.y)\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos3.x, this.texPos12.y), 0).rgb,\r\n this.w3.x,\r\n this.w12.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos0.x, this.texPos3.y), 0).rgb,\r\n this.w0.x,\r\n this.w3.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(\r\n pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos12.x, this.texPos3.y), 0).rgb,\r\n this.w12.x,\r\n this.w3.y\r\n )\r\n );\r\n this.result = pb.add(\r\n this.result,\r\n pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos3, 0).rgb, this.w3.x, this.w3.y)\r\n );\r\n this.$return(pb.max(this.result, pb.vec3(0)));\r\n });\r\n pb.func('temporalResolve', [pb.vec2('screenUV'), pb.vec2('texSize')], function () {\r\n this.$l.velocitySample = pb.textureSampleLevel(motionVectorTex, this.screenUV, 0);\r\n this.$l.velocity = this.velocitySample.xy;\r\n this.$l.sampleColor = pb.textureSampleLevel(currentColorTex, this.screenUV, 0).rgb;\r\n this.$if(\r\n pb.and(pb.greaterThanEqual(this.velocity.x, 5e4), pb.greaterThanEqual(this.velocity.y, 5e4)),\r\n function () {\r\n this.$return(this.sampleColor);\r\n }\r\n );\r\n // Reproject with the depth-dilated (closest) velocity so silhouette pixels\r\n // follow the foreground geometry; using the center velocity causes edge\r\n // crawling/shimmer at object boundaries.\r\n this.$l.velocityClosest = this.getClosestVelocity(this.screenUV, this.texSize);\r\n this.$l.reprojectedUV = pb.sub(this.screenUV, this.velocityClosest.xy);\r\n //this.$l.historyColor = pb.textureSampleLevel(historyColorTex, this.reprojectedUV, 0).rgb;\r\n this.$l.historyColor = this.sampleHistoryColorCatmulRom9(this.reprojectedUV, this.texSize);\r\n this.$l.blendFactor = pb.div(this.velocityClosest.z, 50000);\r\n // Tonemap, then clip -- not the other way round. The neighbourhood box is\r\n // built in Reinhard space, so the history has to be in it as well; the\r\n // resolve stays there until the final reinhardInv below.\r\n this.prevColor = this.clipHistoryColor(\r\n this.screenUV,\r\n this.reinhard(this.historyColor),\r\n this.velocityClosest.xy,\r\n this.texSize\r\n );\r\n this.$l.screenFactor = this.$choice(\r\n pb.or(\r\n pb.any(pb.lessThan(this.reprojectedUV, pb.vec2(0))),\r\n pb.any(pb.greaterThan(this.reprojectedUV, pb.vec2(1)))\r\n ),\r\n pb.float(1),\r\n pb.float(0)\r\n );\r\n this.$l.disocclusionFactor = this.getDisocclusionFactor(\r\n this.reprojectedUV,\r\n this.velocityClosest.xy,\r\n this.texSize\r\n );\r\n this.$l.alpha = pb.clamp(pb.add(this.blendFactor, this.screenFactor, this.disocclusionFactor), 0, 1);\r\n //this.alpha = 0.1;\r\n // prevColor is already tonemapped (and clipped in that space) above.\r\n this.currentColor = this.reinhard(this.sampleColor);\r\n this.$l.currentLum = this.luminance(this.currentColor);\r\n this.$l.prevLum = this.luminance(this.prevColor);\r\n // Luminance is in Reinhard space (always < 1), so a 1.001 floor makes the\r\n // denominator constant and the ratio degenerates to an absolute difference,\r\n // leaving dark-area flicker almost undamped. Use a smaller floor so the\r\n // difference stays relative.\r\n this.$l.diff = pb.div(\r\n pb.abs(pb.sub(this.currentLum, this.prevLum)),\r\n pb.max(this.currentLum, pb.max(this.prevLum, 0.2))\r\n );\r\n this.diff = pb.sub(1, this.diff);\r\n this.diff = pb.mul(this.diff, this.diff);\r\n this.alpha = pb.clamp(pb.mix(0, this.alpha, this.diff), 0.05, 1);\r\n this.$l.resolvedColor = pb.vec3();\r\n if (debug === TAA_DEBUG_CURRENT_COLOR) {\r\n this.resolvedColor = this.currentColor.rgb;\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n } else if (debug === TAA_DEBUG_HISTORY_COLOR) {\r\n this.resolvedColor = this.prevColor.rgb;\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n } else if (debug === TAA_DEBUG_EDGE) {\r\n this.resolvedColor = pb.vec3(this.screenFactor);\r\n } else if (debug === TAA_DEBUG_ALAPH) {\r\n this.resolvedColor = pb.vec3(this.alpha);\r\n } else if (debug === TAA_DEBUG_VELOCITY) {\r\n this.resolvedColor = pb.abs(pb.sub(this.sampleColor, this.historyColor));\r\n } else if (debug === TAA_DEBUG_MOTION_VECTOR) {\r\n this.resolvedColor = pb.abs(pb.mul(this.velocityClosest, 20));\r\n } else if (debug === TAA_DEBUG_STRENGTH) {\r\n this.resolvedColor = pb.vec3(this.blendFactor);\r\n } else {\r\n this.resolvedColor = pb.mix(this.prevColor.rgb, this.currentColor.rgb, this.alpha);\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n }\r\n this.$return(this.resolvedColor);\r\n });\r\n return scope.temporalResolve(uv, workSize) as PBShaderExp;\r\n}\r\n"],"names":["TAA_DEBUG_NONE","TAA_DEBUG_CURRENT_COLOR","TAA_DEBUG_HISTORY_COLOR","TAA_DEBUG_VELOCITY","TAA_DEBUG_EDGE","TAA_DEBUG_ALAPH","TAA_DEBUG_MOTION_VECTOR","TAA_DEBUG_STRENGTH","FLT_MIN","FLT_MAX","TONEMAPPED_MAX","temporalResolve","scope","currentColorTex","historyColorTex","currentDepthTex","motionVectorTex","prevMotionVectorTex","uv","workSize","debug","pb","$builder","func","vec3","$l","c","max","hdr","$return","div","add","sdr","sub","dot","color","vec2","minDepth","float","closestUV","tmpDepth","tmpUV","i","j","texSize","textureSampleLevel","r","$if","lessThan","motionVector","xyz","q","p","rMax","aabbMax","rMin","aabbMin","greaterThan","x","mul","y","z","n","colorAvg","colorAvg2","reinhard","rgb","boxSize","mix","smoothStep","length","closestVelocity","dev","sqrt","abs","colorMin","colorMax","clipAABB","clamp","historyColor","prevVelocitySample","prevVelocity","xy","disocclusion","velocity","samplePos","texPos1","floor","f","w0","w1","w2","w3","w12","offset12","texPos0","texPos3","texPos12","result","velocitySample","screenUV","sampleColor","and","greaterThanEqual","velocityClosest","getClosestVelocity","reprojectedUV","sampleHistoryColorCatmulRom9","blendFactor","prevColor","clipHistoryColor","screenFactor","$choice","or","any","disocclusionFactor","getDisocclusionFactor","alpha","currentColor","currentLum","luminance","prevLum","diff","resolvedColor","reinhardInv"],"mappings":"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"}
1
+ {"version":3,"file":"temporal.js","sources":["../../src/shaders/temporal.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Views {@link Camera.TAADebug} selects between, in place of the resolved image.\r\n *\r\n * @remarks\r\n * Public because the property they name is: a setter taking a bare number whose\r\n * legal values cannot be spelled is not usable from outside the package, and the\r\n * editor already surfaces them as an enum.\r\n *\r\n * @public\r\n */\r\nexport const TAA_DEBUG_NONE = 0;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_CURRENT_COLOR = 1;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_HISTORY_COLOR = 2;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_VELOCITY = 3;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_EDGE = 4;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_ALAPH = 5;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_MOTION_VECTOR = 6;\r\n/** {@inheritDoc TAA_DEBUG_NONE} @public */\r\nexport const TAA_DEBUG_STRENGTH = 7;\r\n\r\nconst FLT_MIN = 0.00000001;\r\nconst FLT_MAX = 32767;\r\n/** Reinhard-space ceiling whose inverse is {@link FLT_MAX}, so clipping in\r\n * tonemapped space keeps the same linear ceiling the resolve had when it\r\n * clamped afterwards. */\r\nconst TONEMAPPED_MAX = FLT_MAX / (FLT_MAX + 1);\r\n\r\n/**\r\n * Temporal resolve implementation\r\n *\r\n * @param scope - The shader scope\r\n * @param currentColorTex - 2D texture that holds the current color\r\n * @param historyColorTex - 2D texture that holds the history color\r\n * @param currentDepthTex - 2D texture that holds the scene depth\r\n * @param motionVectorTex - 2D texture that holds the motion vector\r\n * @param prevMotionVectorTex - 2D texture that holds the previous motion vector\r\n * @param uv - Fragment uv coordinate\r\n * @param workSize - Target texture size\r\n * @param debug - Value for debugging\r\n * @returns\r\n *\r\n * @public\r\n */\r\nexport function temporalResolve(\r\n scope: PBInsideFunctionScope,\r\n currentColorTex: PBShaderExp,\r\n historyColorTex: PBShaderExp,\r\n currentDepthTex: PBShaderExp,\r\n motionVectorTex: PBShaderExp,\r\n prevMotionVectorTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n workSize: PBShaderExp,\r\n debug = TAA_DEBUG_NONE\r\n) {\r\n const pb = scope.$builder;\r\n // Defined ahead of the neighbourhood helpers because clipHistoryColor calls\r\n // reinhard: pb emits functions in definition order and GLSL requires a callee\r\n // to be declared before its caller.\r\n pb.func('reinhard', [pb.vec3('hdr')], function () {\r\n // Floor at zero: x / (1 + x) has a pole at -1, and the 3x3 neighbourhood is\r\n // sampled straight from the scene color, which an upstream effect can leave\r\n // slightly negative.\r\n this.$l.c = pb.max(this.hdr, pb.vec3(0));\r\n this.$return(pb.div(this.c, pb.add(this.c, pb.vec3(1))));\r\n });\r\n pb.func('reinhardInv', [pb.vec3('sdr')], function () {\r\n this.$return(pb.div(this.sdr, pb.sub(pb.vec3(1), this.sdr)));\r\n });\r\n pb.func('luminance', [pb.vec3('color')], function () {\r\n this.$return(pb.max(pb.dot(this.color, pb.vec3(0.299, 0.587, 0.114)), 0.0001));\r\n });\r\n pb.func('getClosestVelocity', [pb.vec2('uv'), pb.vec2('texSize')], function () {\r\n this.$l.minDepth = pb.float(1);\r\n this.$l.closestUV = this.uv;\r\n this.$l.tmpDepth = pb.float();\r\n this.$l.tmpUV = pb.vec2();\r\n for (let i = -1; i <= 1; i++) {\r\n for (let j = -1; j <= 1; j++) {\r\n this.tmpUV = pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize));\r\n this.tmpDepth = pb.textureSampleLevel(currentDepthTex, this.tmpUV, 0).r;\r\n this.$if(pb.lessThan(this.tmpDepth, this.minDepth), function () {\r\n this.minDepth = this.tmpDepth;\r\n this.closestUV = this.tmpUV;\r\n });\r\n }\r\n }\r\n this.$l.motionVector = pb.textureSampleLevel(motionVectorTex, this.closestUV, 0);\r\n this.$return(this.motionVector.xyz);\r\n });\r\n pb.func('clipAABB', [pb.vec3('aabbMin'), pb.vec3('aabbMax'), pb.vec3('p'), pb.vec3('q')], function () {\r\n this.$l.r = pb.sub(this.q, this.p);\r\n this.$l.rMax = pb.sub(this.aabbMax, this.p);\r\n this.$l.rMin = pb.sub(this.aabbMin, this.p);\r\n this.$if(pb.greaterThan(this.r.x, pb.add(this.rMax.x, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.x, this.r.x));\r\n });\r\n this.$if(pb.greaterThan(this.r.y, pb.add(this.rMax.y, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.y, this.r.y));\r\n });\r\n this.$if(pb.greaterThan(this.r.z, pb.add(this.rMax.z, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMax.z, this.r.z));\r\n });\r\n this.$if(pb.lessThan(this.r.x, pb.sub(this.rMin.x, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.x, this.r.x));\r\n });\r\n this.$if(pb.lessThan(this.r.y, pb.sub(this.rMin.y, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.y, this.r.y));\r\n });\r\n this.$if(pb.lessThan(this.r.z, pb.sub(this.rMin.z, FLT_MIN)), function () {\r\n this.r = pb.mul(this.r, pb.div(this.rMin.z, this.r.z));\r\n });\r\n this.$return(pb.add(this.p, this.r));\r\n });\r\n pb.func('clipHistoryColor', [pb.vec2('uv'), pb.vec3('historyColor'), pb.vec2('texSize')], function () {\r\n let n = 1;\r\n this.$l.colorAvg = pb.vec3(0);\r\n this.$l.colorAvg2 = pb.vec3(0);\r\n for (let i = -1; i <= 1; i++) {\r\n for (let j = -1; j <= 1; j++) {\r\n // The box is built in Reinhard space and `historyColor` arrives\r\n // tonemapped to match. Gathering it in linear HDR instead makes a\r\n // single specular texel of a few thousand, sitting next to neighbours\r\n // near 1, blow the standard deviation up until the AABB contains any\r\n // history at all -- the clip then stops constraining exactly the\r\n // pixels that flicker, which is where it is needed most.\r\n this.$l[`s${n}`] = this.reinhard(\r\n pb.textureSampleLevel(currentColorTex, pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize)), 0).rgb\r\n );\r\n this.colorAvg = pb.add(this.colorAvg, this[`s${n}`]);\r\n this.colorAvg2 = pb.add(this.colorAvg2, pb.mul(this[`s${n}`], this[`s${n}`]));\r\n n++;\r\n }\r\n }\r\n this.colorAvg = pb.div(this.colorAvg, n - 1);\r\n this.colorAvg2 = pb.div(this.colorAvg2, n - 1);\r\n this.$l.dev = pb.mul(pb.sqrt(pb.abs(pb.sub(this.colorAvg2, pb.mul(this.colorAvg, this.colorAvg)))), 1.25);\r\n this.$l.colorMin = pb.sub(this.colorAvg, this.dev);\r\n this.$l.colorMax = pb.add(this.colorAvg, this.dev);\r\n this.$l.color = this.clipAABB(\r\n this.colorMin,\r\n this.colorMax,\r\n pb.clamp(this.colorAvg, this.colorMin, this.colorMax),\r\n this.historyColor\r\n );\r\n this.color = pb.clamp(this.color, pb.vec3(0), pb.vec3(TONEMAPPED_MAX));\r\n this.$return(this.color);\r\n });\r\n pb.func('getDisocclusionFactor', [pb.vec2('uv'), pb.vec2('velocity'), pb.vec2('texSize')], function () {\r\n this.$l.prevVelocitySample = pb.textureSampleLevel(prevMotionVectorTex, this.uv, 0);\r\n this.$l.prevVelocity = this.prevVelocitySample.xy;\r\n this.$l.disocclusion = pb.sub(\r\n pb.length(pb.mul(pb.sub(this.velocity, this.prevVelocity), this.texSize)),\r\n 2.5\r\n );\r\n this.$return(pb.clamp(pb.mul(this.disocclusion, 0.01), 0, 1));\r\n });\r\n pb.func('sampleHistoryColorCatmulRom9', [pb.vec2('uv'), pb.vec2('texSize')], function () {\r\n this.$l.samplePos = pb.mul(this.uv, this.texSize);\r\n this.$l.texPos1 = pb.add(pb.floor(pb.sub(this.samplePos, pb.vec2(0.5))), pb.vec2(0.5));\r\n this.$l.f = pb.sub(this.samplePos, this.texPos1);\r\n this.$l.w0 = pb.mul(\r\n this.f,\r\n pb.sub(pb.mul(this.f, pb.sub(pb.vec2(1), pb.mul(this.f, 0.5))), pb.vec2(0.5))\r\n );\r\n this.$l.w1 = pb.add(pb.vec2(1), pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 1.5), pb.vec2(2.5))));\r\n this.$l.w2 = pb.mul(\r\n this.f,\r\n pb.add(pb.vec2(0.5), pb.mul(this.f, pb.sub(pb.vec2(2), pb.mul(this.f, 1.5))))\r\n );\r\n this.$l.w3 = pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 0.5), pb.vec2(0.5)));\r\n this.$l.w12 = pb.add(this.w1, this.w2);\r\n this.$l.offset12 = pb.div(this.w2, pb.add(this.w1, this.w2));\r\n this.$l.texPos0 = pb.sub(this.texPos1, pb.vec2(1));\r\n this.$l.texPos3 = pb.add(this.texPos1, pb.vec2(2));\r\n this.$l.texPos12 = pb.add(this.texPos1, this.offset12);\r\n this.texPos0 = pb.div(this.texPos0, this.texSize);\r\n this.texPos3 = pb.div(this.texPos3, this.texSize);\r\n this.texPos12 = pb.div(this.texPos12, this.texSize);\r\n this.$l.result = pb.vec3(0);\r\n this.$l.tapMin = pb.vec3(1e30);\r\n this.$l.tapMax = pb.vec3(-1e30);\r\n const rows: [string, string][] = [\r\n ['texPos0', 'w0'],\r\n ['texPos12', 'w12'],\r\n ['texPos3', 'w3']\r\n ];\r\n for (const [py, wy] of rows) {\r\n for (const [px, wx] of rows) {\r\n this.$l.tap = pb.textureSampleLevel(historyColorTex, pb.vec2(this[px].x, this[py].y), 0).rgb;\r\n this.result = pb.add(this.result, pb.mul(this.tap, this[wx].x, this[wy].y));\r\n this.tapMin = pb.min(this.tapMin, this.tap);\r\n this.tapMax = pb.max(this.tapMax, this.tap);\r\n }\r\n }\r\n // Anti-ringing: Catmull-Rom's negative lobes scale with the contrast they straddle. Beside a\r\n // texel at the sky's output clamp (the sun disk, ~32256) a lobe of -0.07 subtracts thousands\r\n // from a sky pixel near 1; the result is floored to black, the clip box of a pixel whose\r\n // neighbourhood mixes disk and sky reaches below zero and keeps it, and the low blend weight a\r\n // large current/history difference gets holds it there -- dark specks around the disk while the\r\n // camera moves. Bounding the filter by the texels it read keeps it from inventing values.\r\n this.$return(pb.clamp(this.result, pb.max(this.tapMin, pb.vec3(0)), this.tapMax));\r\n });\r\n pb.func('temporalResolve', [pb.vec2('screenUV'), pb.vec2('texSize')], function () {\r\n this.$l.velocitySample = pb.textureSampleLevel(motionVectorTex, this.screenUV, 0);\r\n this.$l.velocity = this.velocitySample.xy;\r\n this.$l.sampleColor = pb.textureSampleLevel(currentColorTex, this.screenUV, 0).rgb;\r\n this.$if(\r\n pb.and(pb.greaterThanEqual(this.velocity.x, 5e4), pb.greaterThanEqual(this.velocity.y, 5e4)),\r\n function () {\r\n this.$return(this.sampleColor);\r\n }\r\n );\r\n // Reproject with the depth-dilated (closest) velocity so silhouette pixels\r\n // follow the foreground geometry; using the center velocity causes edge\r\n // crawling/shimmer at object boundaries.\r\n this.$l.velocityClosest = this.getClosestVelocity(this.screenUV, this.texSize);\r\n this.$l.reprojectedUV = pb.sub(this.screenUV, this.velocityClosest.xy);\r\n //this.$l.historyColor = pb.textureSampleLevel(historyColorTex, this.reprojectedUV, 0).rgb;\r\n this.$l.historyColor = this.sampleHistoryColorCatmulRom9(this.reprojectedUV, this.texSize);\r\n this.$l.blendFactor = pb.div(this.velocityClosest.z, 50000);\r\n // Tonemap, then clip -- not the other way round. The neighbourhood box is\r\n // built in Reinhard space, so the history has to be in it as well; the\r\n // resolve stays there until the final reinhardInv below.\r\n this.prevColor = this.clipHistoryColor(this.screenUV, this.reinhard(this.historyColor), this.texSize);\r\n this.$l.screenFactor = this.$choice(\r\n pb.or(\r\n pb.any(pb.lessThan(this.reprojectedUV, pb.vec2(0))),\r\n pb.any(pb.greaterThan(this.reprojectedUV, pb.vec2(1)))\r\n ),\r\n pb.float(1),\r\n pb.float(0)\r\n );\r\n this.$l.disocclusionFactor = this.getDisocclusionFactor(\r\n this.reprojectedUV,\r\n this.velocityClosest.xy,\r\n this.texSize\r\n );\r\n // prevColor is already tonemapped (and clipped in that space) above.\r\n this.currentColor = this.reinhard(this.sampleColor);\r\n this.$l.currentLum = this.luminance(this.currentColor);\r\n this.$l.prevLum = this.luminance(this.prevColor);\r\n this.$l.velocityPixels = pb.length(pb.mul(this.velocityClosest.xy, this.texSize));\r\n this.$l.alpha = pb.max(\r\n this.blendFactor,\r\n pb.mix(this.blendFactor, 0.2, pb.clamp(pb.div(this.velocityPixels, 20), 0, 1))\r\n );\r\n this.alpha = pb.max(\r\n this.alpha,\r\n pb.clamp(\r\n pb.div(pb.mul(this.prevLum, 0.01), pb.max(pb.abs(pb.sub(this.currentLum, this.prevLum)), 1e-6)),\r\n 0,\r\n 1\r\n )\r\n );\r\n // Pixels whose motion vectors carry no strength (the sky) keep a 5% floor\r\n this.alpha = pb.clamp(pb.add(pb.max(this.alpha, 0.05), this.screenFactor, this.disocclusionFactor), 0, 1);\r\n this.$l.resolvedColor = pb.vec3();\r\n if (debug === TAA_DEBUG_CURRENT_COLOR) {\r\n this.resolvedColor = this.currentColor.rgb;\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n } else if (debug === TAA_DEBUG_HISTORY_COLOR) {\r\n this.resolvedColor = this.prevColor.rgb;\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n } else if (debug === TAA_DEBUG_EDGE) {\r\n this.resolvedColor = pb.vec3(this.screenFactor);\r\n } else if (debug === TAA_DEBUG_ALAPH) {\r\n this.resolvedColor = pb.vec3(this.alpha);\r\n } else if (debug === TAA_DEBUG_VELOCITY) {\r\n this.resolvedColor = pb.abs(pb.sub(this.sampleColor, this.historyColor));\r\n } else if (debug === TAA_DEBUG_MOTION_VECTOR) {\r\n this.resolvedColor = pb.abs(pb.mul(this.velocityClosest, 20));\r\n } else if (debug === TAA_DEBUG_STRENGTH) {\r\n this.resolvedColor = pb.vec3(this.blendFactor);\r\n } else {\r\n this.resolvedColor = pb.mix(this.prevColor.rgb, this.currentColor.rgb, this.alpha);\r\n this.resolvedColor = this.reinhardInv(this.resolvedColor);\r\n }\r\n this.$return(this.resolvedColor);\r\n });\r\n return scope.temporalResolve(uv, workSize) as PBShaderExp;\r\n}\r\n"],"names":["TAA_DEBUG_NONE","TAA_DEBUG_CURRENT_COLOR","TAA_DEBUG_HISTORY_COLOR","TAA_DEBUG_VELOCITY","TAA_DEBUG_EDGE","TAA_DEBUG_ALAPH","TAA_DEBUG_MOTION_VECTOR","TAA_DEBUG_STRENGTH","FLT_MIN","FLT_MAX","TONEMAPPED_MAX","temporalResolve","scope","currentColorTex","historyColorTex","currentDepthTex","motionVectorTex","prevMotionVectorTex","uv","workSize","debug","pb","$builder","func","vec3","$l","c","max","hdr","$return","div","add","sdr","sub","dot","color","vec2","minDepth","float","closestUV","tmpDepth","tmpUV","i","j","texSize","textureSampleLevel","r","$if","lessThan","motionVector","xyz","q","p","rMax","aabbMax","rMin","aabbMin","greaterThan","x","mul","y","z","n","colorAvg","colorAvg2","reinhard","rgb","dev","sqrt","abs","colorMin","colorMax","clipAABB","clamp","historyColor","prevVelocitySample","prevVelocity","xy","disocclusion","length","velocity","samplePos","texPos1","floor","f","w0","w1","w2","w3","w12","offset12","texPos0","texPos3","texPos12","result","tapMin","tapMax","rows","py","wy","px","wx","tap","min","velocitySample","screenUV","sampleColor","and","greaterThanEqual","velocityClosest","getClosestVelocity","reprojectedUV","sampleHistoryColorCatmulRom9","blendFactor","prevColor","clipHistoryColor","screenFactor","$choice","or","any","disocclusionFactor","getDisocclusionFactor","currentColor","currentLum","luminance","prevLum","velocityPixels","alpha","mix","resolvedColor","reinhardInv"],"mappings":"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"}
@@ -64,15 +64,7 @@ function getFragCoord(scope, useComputeShader) {
64
64
  waveGenerator.setupUniforms(this, 0);
65
65
  pb.main(function() {
66
66
  this.$l.xz = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.position, 1)).xy;
67
- /*
68
- this.$l.xz = pb.mul(
69
- pb.add(
70
- this.offset,
71
- pb.mul(pb.mul(this.modelMatrix, pb.vec4(this.$inputs.position, 1)).xy, this.scale)
72
- ),
73
- this.gridScale
74
- );
75
- */ this.$l.outPos = pb.vec3();
67
+ this.$l.outPos = pb.vec3();
76
68
  this.$l.outNormal = pb.vec3();
77
69
  waveGenerator.calcVertexPositionAndNormal(this, pb.vec3(this.xz.x, this.level, this.xz.y), this.outPos, this.outNormal);
78
70
  this.$outputs.outPos = this.outPos;
@@ -104,7 +96,6 @@ function getFragCoord(scope, useComputeShader) {
104
96
  /** @internal */ function createProgramPostFFT2(useComputeShader = false, threadGroupSize, targetFormat = 'rgba32f', limit) {
105
97
  function getComputeFunc(useComputeShader, fmt) {
106
98
  return function(pb) {
107
- this.N2 = pb.float().uniform(0);
108
99
  if (useComputeShader) {
109
100
  this.output = fmt === 'rgba32f' ? pb.texStorage2DArray.rgba32float().storage(0) : pb.texStorage2DArray.rgba16float().storage(0);
110
101
  this.ifft = pb.tex2DArray().uniform(0);
@@ -126,27 +117,14 @@ function getFragCoord(scope, useComputeShader) {
126
117
  this.ifft5 = pb.tex2D().uniform(0);
127
118
  }
128
119
  }
129
- if (pb.getDevice().type === 'webgl') {
130
- this.ifftTexSize = pb.vec2().uniform(0);
131
- }
132
120
  pb.main(function() {
133
121
  this.$l.fragPos = getFragCoord(this, useComputeShader);
134
122
  this.$l.p = pb.float(pb.add(this.fragPos.x, this.fragPos.y));
135
- this.$l.s = pb.sub(pb.mul(pb.sub(1, pb.mod(this.p, 2)), 2), 1);
136
- this.$l.m = pb.mul(this.s, this.N2);
137
- if (pb.getDevice().type === 'webgl') {
138
- this.$l.uv = pb.div(pb.vec2(this.fragPos), this.ifftTexSize);
139
- if (!limit || limit === 4) {
140
- this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureSampleLevel(this.ifft0, this.uv, 0), this.m);
141
- this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureSampleLevel(this.ifft1, this.uv, 0), this.m);
142
- this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureSampleLevel(this.ifft2, this.uv, 0), this.m);
143
- this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureSampleLevel(this.ifft3, this.uv, 0), this.m);
144
- }
145
- if (!limit || limit === 2) {
146
- this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureSampleLevel(this.ifft4, this.uv, 0), this.m);
147
- this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureSampleLevel(this.ifft5, this.uv, 0), this.m);
148
- }
149
- } else if (useComputeShader) {
123
+ // (-1)^(x+y) undoes the spectrum being centred at resolution/2. The
124
+ // transform is left unnormalized (see the butterfly passes), so this
125
+ // is the only factor applied here.
126
+ this.$l.m = pb.sub(pb.mul(pb.sub(1, pb.mod(this.p, 2)), 2), 1);
127
+ if (useComputeShader) {
150
128
  this.$l.uv = pb.ivec2(this.fragPos);
151
129
  for(let i = 0; i < 6; i++){
152
130
  pb.textureArrayStore(this.output, this.$builtins.globalInvocationId.xy, i, pb.mul(pb.textureArrayLoad(this.ifft, this.uv, i, 0), this.m));
@@ -222,9 +200,6 @@ function getFragCoord(scope, useComputeShader) {
222
200
  this.h0Texture2 = pb.tex2D().uniform(0);
223
201
  }
224
202
  }
225
- if (pb.getDevice().type === 'webgl') {
226
- this.h0TexSize = pb.vec2().uniform(0);
227
- }
228
203
  this.RATIO = pb.float(0.618033989036);
229
204
  this.g = pb.float(9.81);
230
205
  const Complex = pb.defineStruct([
@@ -301,9 +276,7 @@ function getFragCoord(scope, useComputeShader) {
301
276
  this.$l.kLen = pb.length(this.k);
302
277
  this.$if(pb.greaterThan(this.kLen, 1e-6), function() {
303
278
  this.$l.w = pb.sqrt(pb.mul(this.kLen, this.g));
304
- if (pb.getDevice().type === 'webgl') {
305
- this.$l.h0Texel = pb.textureSampleLevel(this[`h0Texture${x}`], pb.div(pb.vec2(this.fragCoord), this.h0TexSize), 0);
306
- } else if (useComputeShader) {
279
+ if (useComputeShader) {
307
280
  this.$l.h0Texel = pb.textureArrayLoad(this.h0Texture, this.fragCoord, x, 0);
308
281
  } else {
309
282
  this.$l.h0Texel = pb.textureLoad(this[`h0Texture${x}`], this.fragCoord, 0);
@@ -424,26 +397,31 @@ function getFragCoord(scope, useComputeShader) {
424
397
  this.cascade0 = pb.vec4().uniform(0);
425
398
  this.cascade1 = pb.vec4().uniform(0);
426
399
  this.cascade2 = pb.vec4().uniform(0);
400
+ // Gaussian pair for k and -k. `offset` (texels) gives each cascade a noise of
401
+ // its own, so the cascades' phases are independent.
427
402
  pb.func('gauss', [
428
- pb.ivec2('fragCoord')
403
+ pb.ivec2('fragCoord'),
404
+ pb.ivec2('offset')
429
405
  ], function() {
430
- this.$l.uv = pb.div(pb.vec2(this.fragCoord), pb.float(this.resolution));
406
+ this.$l.uv = pb.div(pb.vec2(pb.add(this.fragCoord, this.offset)), pb.float(this.resolution));
407
+ this.$l.uvNeg = pb.div(pb.vec2(pb.sub(this.offset, this.fragCoord)), pb.float(this.resolution));
431
408
  this.$l.noise0 = pb.textureSampleLevel(this.noise, this.uv, 0).rg;
432
- this.$l.noise1 = pb.textureSampleLevel(this.noise, pb.neg(this.uv), 0).rg;
409
+ this.$l.noise1 = pb.textureSampleLevel(this.noise, this.uvNeg, 0).rg;
433
410
  this.$l.u0 = pb.mul(this.noise0.x, Math.PI * 2);
434
411
  this.$l.v0 = pb.sqrt(pb.mul(pb.log(this.noise0.y), -2));
435
412
  this.$l.u1 = pb.mul(this.noise1.x, Math.PI * 2);
436
413
  this.$l.v1 = pb.sqrt(pb.mul(pb.log(this.noise1.y), -2));
437
414
  this.$return(pb.vec4(pb.mul(this.v0, pb.cos(this.u0)), pb.mul(this.v0, pb.sin(this.u0)), pb.mul(this.v1, pb.cos(this.u1)), pb.mul(pb.neg(this.v1), pb.sin(this.u1))));
438
415
  });
416
+ // Phillips spectrum over the cascade's band: zero inside the square
417
+ // |kx|, |ky| < minK the larger cascades cover.
439
418
  pb.func('phillips', [
440
419
  pb.vec2('k'),
441
420
  pb.float('A'),
442
- pb.float('minK'),
443
- pb.float('maxK')
421
+ pb.float('minK')
444
422
  ], function() {
445
423
  this.$l.k2 = pb.dot(this.k, this.k);
446
- this.$if(pb.or(pb.lessThanEqual(this.k2, pb.mul(this.minK, this.minK)), pb.greaterThanEqual(this.k2, pb.mul(this.maxK, this.maxK))), function() {
424
+ this.$if(pb.all(pb.lessThan(pb.abs(this.k), pb.vec2(this.minK))), function() {
447
425
  this.$return(pb.vec4(0));
448
426
  });
449
427
  this.$l.L = pb.div(pb.dot(this.wind, this.wind), this.g);
@@ -459,15 +437,18 @@ function getFragCoord(scope, useComputeShader) {
459
437
  pb.main(function() {
460
438
  this.$l.x = pb.vec2(pb.sub(pb.ivec2(getFragCoord(this, useComputeShader)), pb.ivec2(pb.div(this.resolution, 2))));
461
439
  this.$l.k = pb.mul(pb.vec2(Math.PI * 2), this.x);
462
- this.$l.rnd = this.gauss(pb.ivec2(getFragCoord(this, useComputeShader)));
440
+ this.$l.coord = pb.ivec2(getFragCoord(this, useComputeShader));
441
+ this.$l.rnd0 = this.gauss(this.coord, pb.ivec2(0, 0));
442
+ this.$l.rnd1 = this.gauss(this.coord, pb.ivec2(73, 151));
443
+ this.$l.rnd2 = this.gauss(this.coord, pb.ivec2(157, 41));
463
444
  if (useComputeShader) {
464
- pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 0, pb.mul(this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z, this.cascade0.w), this.rnd));
465
- pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 1, pb.mul(this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z, this.cascade1.w), this.rnd));
466
- pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 2, pb.mul(this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z, this.cascade2.w), this.rnd));
445
+ pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 0, pb.mul(this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z), this.rnd0));
446
+ pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 1, pb.mul(this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z), this.rnd1));
447
+ pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 2, pb.mul(this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z), this.rnd2));
467
448
  } else {
468
- this.$outputs.spectrum0 = pb.mul(this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z, this.cascade0.w), this.rnd);
469
- this.$outputs.spectrum1 = pb.mul(this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z, this.cascade1.w), this.rnd);
470
- this.$outputs.spectrum2 = pb.mul(this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z, this.cascade2.w), this.rnd);
449
+ this.$outputs.spectrum0 = pb.mul(this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z), this.rnd0);
450
+ this.$outputs.spectrum1 = pb.mul(this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z), this.rnd1);
451
+ this.$outputs.spectrum2 = pb.mul(this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z), this.rnd2);
471
452
  }
472
453
  });
473
454
  };
@@ -521,9 +502,6 @@ function getFragCoord(scope, useComputeShader) {
521
502
  }
522
503
  }
523
504
  this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);
524
- if (pb.getDevice().type === 'webgl') {
525
- this.texSize = pb.vec4().uniform(0);
526
- }
527
505
  this.phase = pb.int().uniform(0);
528
506
  const Complex = pb.defineStruct([
529
507
  pb.float('re'),
@@ -541,12 +519,6 @@ function getFragCoord(scope, useComputeShader) {
541
519
  ], function() {
542
520
  this.$return(Complex(pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)), pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))));
543
521
  });
544
- pb.func('scale', [
545
- Complex('a'),
546
- pb.float('v')
547
- ], function() {
548
- this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));
549
- });
550
522
  for(let x = 0; x <= 5; x++){
551
523
  if (x < 4 && limit === 2) {
552
524
  continue;
@@ -558,10 +530,7 @@ function getFragCoord(scope, useComputeShader) {
558
530
  pb.vec4('texelButt'),
559
531
  pb.int('x')
560
532
  ], function() {
561
- if (pb.getDevice().type === 'webgl') {
562
- this.$l.texelA = pb.textureSampleLevel(this[`spectrum${x}`], pb.div(pb.vec2(pb.float(this.x), this.texelButt.b), this.texSize.xy), 0);
563
- this.$l.texelB = pb.textureSampleLevel(this[`spectrum${x}`], pb.div(pb.vec2(pb.float(this.x), this.texelButt.a), this.texSize.xy), 0);
564
- } else if (useComputeShader) {
533
+ if (useComputeShader) {
565
534
  this.$l.texelA = pb.textureArrayLoad(this.spectrum, pb.ivec2(this.x, pb.int(this.texelButt.b)), x, 0);
566
535
  this.$l.texelB = pb.textureArrayLoad(this.spectrum, pb.ivec2(this.x, pb.int(this.texelButt.a)), x, 0);
567
536
  } else {
@@ -571,21 +540,19 @@ function getFragCoord(scope, useComputeShader) {
571
540
  this.$l.w = Complex(this.texelButt.r, this.texelButt.g);
572
541
  this.$l.a1 = Complex(this.texelA.x, this.texelA.y);
573
542
  this.$l.b1 = Complex(this.texelB.x, this.texelB.y);
574
- this.$l.r1 = this.scale(this.add(this.a1, this.mul(this.b1, this.w)), 0.5);
543
+ // Unnormalized butterfly: per-stage 0.5 scaling would push fp16
544
+ // intermediates into the subnormal range; unscaled they stay at metre scale.
545
+ this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));
575
546
  this.$l.a2 = Complex(this.texelA.z, this.texelA.w);
576
547
  this.$l.b2 = Complex(this.texelB.z, this.texelB.w);
577
- this.$l.r2 = this.scale(this.add(this.a2, this.mul(this.b2, this.w)), 0.5);
548
+ this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));
578
549
  this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));
579
550
  });
580
551
  }
581
552
  pb.main(function() {
582
553
  this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);
583
554
  this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);
584
- if (pb.getDevice().type === 'webgl') {
585
- this.$l.texelButt = pb.textureSampleLevel(this.butterfly, pb.div(pb.vec2(pb.float(this.phase), pb.float(this.y)), this.texSize.zw), 0);
586
- } else {
587
- this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.y), 0);
588
- }
555
+ this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.y), 0);
589
556
  if (useComputeShader) {
590
557
  pb.textureArrayStore(this.ifft, this.$builtins.globalInvocationId.xy, 0, this.twiddle0(this.texelButt, this.x));
591
558
  pb.textureArrayStore(this.ifft, this.$builtins.globalInvocationId.xy, 1, this.twiddle1(this.texelButt, this.x));
@@ -658,9 +625,6 @@ function getFragCoord(scope, useComputeShader) {
658
625
  }
659
626
  this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);
660
627
  this.phase = pb.int().uniform(0);
661
- if (pb.getDevice().type === 'webgl') {
662
- this.texSize = pb.vec4().uniform(0);
663
- }
664
628
  const Complex = pb.defineStruct([
665
629
  pb.float('re'),
666
630
  pb.float('im')
@@ -677,12 +641,6 @@ function getFragCoord(scope, useComputeShader) {
677
641
  ], function() {
678
642
  this.$return(Complex(pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)), pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))));
679
643
  });
680
- pb.func('scale', [
681
- Complex('a'),
682
- pb.float('v')
683
- ], function() {
684
- this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));
685
- });
686
644
  for(let x = 0; x <= 5; x++){
687
645
  if (x < 4 && limit === 2) {
688
646
  continue;
@@ -694,10 +652,7 @@ function getFragCoord(scope, useComputeShader) {
694
652
  pb.vec4('texelButt'),
695
653
  pb.int('y')
696
654
  ], function() {
697
- if (pb.getDevice().type === 'webgl') {
698
- this.$l.texelA = pb.textureSampleLevel(this[`spectrum${x}`], pb.div(pb.vec2(this.texelButt.b, pb.float(this.y)), this.texSize.xy), 0);
699
- this.$l.texelB = pb.textureSampleLevel(this[`spectrum${x}`], pb.div(pb.vec2(this.texelButt.a, pb.float(this.y)), this.texSize.xy), 0);
700
- } else if (useComputeShader) {
655
+ if (useComputeShader) {
701
656
  this.$l.texelA = pb.textureArrayLoad(this.spectrum, pb.ivec2(pb.int(this.texelButt.b), this.y), x, 0);
702
657
  this.$l.texelB = pb.textureArrayLoad(this.spectrum, pb.ivec2(pb.int(this.texelButt.a), this.y), x, 0);
703
658
  } else {
@@ -707,21 +662,19 @@ function getFragCoord(scope, useComputeShader) {
707
662
  this.$l.w = Complex(this.texelButt.r, this.texelButt.g);
708
663
  this.$l.a1 = Complex(this.texelA.x, this.texelA.y);
709
664
  this.$l.b1 = Complex(this.texelB.x, this.texelB.y);
710
- this.$l.r1 = this.scale(this.add(this.a1, this.mul(this.b1, this.w)), 0.5);
665
+ // Unnormalized butterfly: per-stage 0.5 scaling would push fp16
666
+ // intermediates into the subnormal range; unscaled they stay at metre scale.
667
+ this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));
711
668
  this.$l.a2 = Complex(this.texelA.z, this.texelA.w);
712
669
  this.$l.b2 = Complex(this.texelB.z, this.texelB.w);
713
- this.$l.r2 = this.scale(this.add(this.a2, this.mul(this.b2, this.w)), 0.5);
670
+ this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));
714
671
  this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));
715
672
  });
716
673
  }
717
674
  pb.main(function() {
718
675
  this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);
719
676
  this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);
720
- if (pb.getDevice().type === 'webgl') {
721
- this.$l.texelButt = pb.textureSampleLevel(this.butterfly, pb.div(pb.vec2(pb.float(this.phase), pb.float(this.x)), this.texSize.zw), 0);
722
- } else {
723
- this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.x), 0);
724
- }
677
+ this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.x), 0);
725
678
  if (useComputeShader) {
726
679
  pb.textureArrayStore(this.ifft, this.$builtins.globalInvocationId.xy, 0, this.twiddle0(this.texelButt, this.y));
727
680
  pb.textureArrayStore(this.ifft, this.$builtins.globalInvocationId.xy, 1, this.twiddle1(this.texelButt, this.y));