@zephyr3d/scene 0.9.27 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global_sdf.js","sources":["../../../src/render/sdf/global_sdf.ts"],"sourcesContent":["import type { BindGroup, GPUDataBuffer, GPUProgram, Texture2D, Texture3D } from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { getDefaultTexture2D } from '../../utility/blueprint/material/texture';\r\nimport type { ClipmapTerrain } from '../../scene/terrain-cm/terrain-cm';\r\nimport {\r\n declareGlobalSDFUniforms,\r\n GLOBAL_SDF_LEVELS,\r\n GLOBAL_SDF_PARAMS,\r\n GLOBAL_SDF_TEXTURE,\r\n GLOBAL_SDF_BRICK,\r\n GLOBAL_SDF_TAGS,\r\n GLOBAL_SDF_TAG_NOT_COVERED,\r\n declareDynamicSDFUniforms,\r\n MAX_DYNAMIC_SDF_INSTANCES,\r\n SDF_ATLAS_TEXTURE,\r\n SDF_DYNAMIC_INFO,\r\n SDF_DYNAMIC_INSTANCES,\r\n SDF_INSTANCE_VEC4S,\r\n globalSDFFormat,\r\n isGlobalSDFFilterable,\r\n sampleInstancesSDF,\r\n sampleSceneSDF\r\n} from '../../shaders/sdf';\r\nimport type { SceneSDF, SDFInstance } from './scene_sdf';\r\nimport type { MeshSDFAtlas } from './sdf_atlas';\r\nimport { SDFWaterlineSource, WaterlineField } from './waterline';\r\nimport { buildSDFProgram, getSDFProgramErrors } from './sdf_programs';\r\nimport { sampleInstanceMaterial } from '../../shaders/gi';\r\nimport type { VoxelAtlasSlot } from '../gi/voxel_atlas';\r\nimport { RenderGraphExecutor } from '../rendergraph/executor';\r\n\r\n/** Voxels along a brick edge, the unit of compositing. */\r\nconst BRICK = GLOBAL_SDF_BRICK;\r\n/** vec4s per brick in the brick buffer. */\r\nconst BRICK_VEC4S = 3;\r\n/** Most points per {@link GlobalSDF.queryDistances} call. */\r\nconst MAX_QUERY_POINTS = 4096;\r\n\r\n/**\r\n * Writes an instance in the layout of {@link SDF_INSTANCE_VEC4S}: world-to-local rows, field box\r\n * with voxel size and world scale, atlas slot with the two-sided half thickness (half a field\r\n * voxel in world units; -1 for one-sided). The scale is the smallest axis scale so scaled field\r\n * values never overshoot under non-uniform scale.\r\n */\r\nfunction packSDFInstance(inst: SDFInstance, atlas: MeshSDFAtlas, out: Float32Array, offset: number) {\r\n const header = inst.asset!.header!;\r\n const slot = atlas.getSlot(inst.asset!)!;\r\n const inv = inst.mesh.invWorldMatrix;\r\n const m = inst.mesh.worldMatrix;\r\n const scale = Math.min(\r\n Math.hypot(m.m00, m.m10, m.m20),\r\n Math.hypot(m.m01, m.m11, m.m21),\r\n Math.hypot(m.m02, m.m12, m.m22)\r\n );\r\n out.set([inv.m00, inv.m01, inv.m02, inv.m03], offset);\r\n out.set([inv.m10, inv.m11, inv.m12, inv.m13], offset + 4);\r\n out.set([inv.m20, inv.m21, inv.m22, inv.m23], offset + 8);\r\n out.set([...header.boxMin, header.voxelSize], offset + 12);\r\n out.set([...header.boxMax, scale], offset + 16);\r\n out.set([...slot.offset, header.twoSided ? 0.5 * header.voxelSize * scale : -1], offset + 20);\r\n}\r\n\r\n/**\r\n * Settings of a {@link GlobalSDF}.\r\n * @public\r\n */\r\nexport interface GlobalSDFOptions {\r\n /** Clipmap levels, each twice the voxel size of the previous. Default 4. */\r\n levels?: number;\r\n /** Voxels per axis of every level, a multiple of 8. Default 128. */\r\n resolution?: number;\r\n /** Voxel size of the finest level in world units. Default 0.25. */\r\n baseVoxelSize?: number;\r\n /** Distances are kept within this many voxels of a level; farther is the next level's job. Default 4. */\r\n bandVoxels?: number;\r\n /** Bricks composited per frame. Default 512. */\r\n brickBudget?: number;\r\n}\r\n\r\n/**\r\n * Counters of a {@link GlobalSDF}.\r\n * @public\r\n */\r\nexport interface GlobalSDFStats {\r\n levels: number;\r\n resolution: number;\r\n voxelSizes: number[];\r\n /** World position of each level's window minimum. */\r\n origins: [number, number, number][];\r\n dirtyBricks: number;\r\n /** Bricks composited by the last update. */\r\n lastBricks: number;\r\n totalBricks: number;\r\n terrain: boolean;\r\n /** Waterline grids built so far, 0 while none was asked for. */\r\n waterlineRebuilds: number;\r\n}\r\n\r\nconst tmpDirtyMin = new Vector3();\r\nconst tmpDirtyMax = new Vector3();\r\n\r\n/**\r\n * Material sources and targets for compositing materials alongside the field, provided by the\r\n * voxel scene. The output clipmaps (albedo rgba8unorm, emissive rgba16float) use the field's\r\n * layout at half its resolution.\r\n * @public\r\n */\r\nexport interface GlobalSDFMaterials {\r\n readonly atlasAlbedo: Texture3D;\r\n readonly atlasEmissive: Texture3D;\r\n readonly atlasSize: [number, number, number];\r\n readonly albedo: Texture3D;\r\n readonly emissive: Texture3D;\r\n getSlot(inst: SDFInstance): Nullable<VoxelAtlasSlot>;\r\n}\r\n\r\n/**\r\n * Camera-centred clipmap of signed distance (`levels` cubes of `resolution`³ voxels, each level\r\n * doubling the voxel size), composited on the GPU from the static instances of a {@link SceneSDF}\r\n * and the terrain height map. WebGPU only.\r\n *\r\n * Levels are toroidally addressed (world voxel `v` at texel `v mod resolution`) and updated\r\n * incrementally in dirty 8³ bricks, a budget per frame, coarsest level first. Distances are\r\n * clamped to a band of a few voxels per level; {@link sampleGlobalSDF} falls back to coarser\r\n * levels outside it.\r\n *\r\n * @public\r\n */\r\nexport class GlobalSDF {\r\n readonly levels: number;\r\n readonly resolution: number;\r\n readonly baseVoxelSize: number;\r\n readonly bandVoxels: number;\r\n brickBudget: number;\r\n private readonly _sdf: SceneSDF;\r\n private _texture: Nullable<Texture3D>;\r\n private _tags: Nullable<Texture3D>;\r\n /** Window minimum of each level in voxels of that level; null before the first update. */\r\n private readonly _origins: Nullable<[number, number, number]>[];\r\n /** Dirty bricks of each level, keyed by world brick coordinates. */\r\n private readonly _dirty: Set<string>[];\r\n private _lastBricks: number;\r\n private _freshBricks: Float32Array<ArrayBuffer>;\r\n private _freshCount: number;\r\n private _totalBricks: number;\r\n private _terrain: Nullable<ClipmapTerrain>;\r\n private _terrainVersion: number;\r\n private _program: Nullable<GPUProgram>;\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _instanceBuffer: Nullable<GPUDataBuffer>;\r\n private _brickBuffer: Nullable<GPUDataBuffer>;\r\n private _indexBuffer: Nullable<GPUDataBuffer>;\r\n private _materialBuffer: Nullable<GPUDataBuffer>;\r\n private _materials: Nullable<GlobalSDFMaterials>;\r\n private _dummyHeightMap: Nullable<Texture2D>;\r\n private _queryProgram: Nullable<GPUProgram>;\r\n private _queryBindGroup: Nullable<BindGroup>;\r\n private _queryPoints: Nullable<GPUDataBuffer>;\r\n private _queryOutput: Nullable<Texture2D>;\r\n private _queryChain: Promise<unknown>;\r\n private readonly _levelInfo: Float32Array<ArrayBuffer>;\r\n private readonly _dynamicData: Float32Array<ArrayBuffer>;\r\n private readonly _dynamicInfo: Vector4;\r\n private _waterline: Nullable<WaterlineField>;\r\n private _contentVersion: number;\r\n private _staticVersion: number;\r\n private _prevDynamic: Float32Array;\r\n private readonly _params: Vector4;\r\n constructor(sdf: SceneSDF, options?: GlobalSDFOptions) {\r\n this._sdf = sdf;\r\n this.levels = Math.max(1, Math.min(8, Math.floor(options?.levels ?? 4)));\r\n this.resolution = Math.max(BRICK * 2, Math.ceil((options?.resolution ?? 128) / BRICK) * BRICK);\r\n this.baseVoxelSize = Math.max(1e-3, options?.baseVoxelSize ?? 0.25);\r\n this.bandVoxels = Math.max(1, options?.bandVoxels ?? 4);\r\n this.brickBudget = Math.max(1, Math.floor(options?.brickBudget ?? 512));\r\n this._texture = null;\r\n this._tags = null;\r\n this._origins = new Array(this.levels).fill(null);\r\n this._dirty = Array.from({ length: this.levels }, () => new Set<string>());\r\n this._lastBricks = 0;\r\n this._freshBricks = new Float32Array(this.brickBudget * 4);\r\n this._freshCount = 0;\r\n this._totalBricks = 0;\r\n this._terrain = null;\r\n this._terrainVersion = -1;\r\n this._program = null;\r\n this._bindGroup = null;\r\n this._instanceBuffer = null;\r\n this._brickBuffer = null;\r\n this._indexBuffer = null;\r\n this._materialBuffer = null;\r\n this._materials = null;\r\n this._dummyHeightMap = null;\r\n this._queryProgram = null;\r\n this._queryBindGroup = null;\r\n this._queryPoints = null;\r\n this._queryOutput = null;\r\n this._queryChain = Promise.resolve();\r\n this._levelInfo = new Float32Array(this.levels * 4);\r\n this._dynamicData = new Float32Array(MAX_DYNAMIC_SDF_INSTANCES * SDF_INSTANCE_VEC4S * 4);\r\n this._dynamicInfo = new Vector4();\r\n this._waterline = null;\r\n this._contentVersion = 0;\r\n this._staticVersion = 0;\r\n this._prevDynamic = new Float32Array(this._dynamicData.length + 1);\r\n this._params = new Vector4(this.resolution, this.levels, this.bandVoxels, 0);\r\n }\r\n /** True on a device that can build the field. */\r\n static isSupported() {\r\n return getDevice().type === 'webgpu';\r\n }\r\n /**\r\n * The levels stacked along z in {@link globalSDFFormat}, `resolution + 1` slices each; the last\r\n * copies the first so filtering wraps across the toroidal seam in z as repeat does in x and y.\r\n */\r\n get texture() {\r\n if (!this._texture) {\r\n const n = this.resolution;\r\n this._texture = getDevice().createTexture3D(globalSDFFormat(), n, n, (n + 1) * this.levels, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n this._texture.name = '@GlobalSDF';\r\n }\r\n return this._texture;\r\n }\r\n /**\r\n * One texel per brick, levels stacked along z: (world brick x, y, z, 1) of\r\n * the brick last composited there. Starts all zero, which no brick matches.\r\n */\r\n get tags() {\r\n if (!this._tags) {\r\n const nb = this.resolution / BRICK;\r\n this._tags = getDevice().createTexture3D('rgba32f', nb, nb, nb * this.levels, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n this._tags.name = '@GlobalSDFTags';\r\n }\r\n return this._tags;\r\n }\r\n /**\r\n * Bricks whose materials the last update composited, for immediate voxel lighting: per brick\r\n * (first material voxel within its level, level), `count` of them.\r\n */\r\n get freshMaterialBricks() {\r\n return { data: this._freshBricks, count: this._freshCount };\r\n }\r\n /** Voxel size of a level in world units. */\r\n voxelSize(level: number) {\r\n return this.baseVoxelSize * 2 ** level;\r\n }\r\n /** (window origin in voxels, voxel size) per level, the `levels` uniform of {@link sampleGlobalSDF}. */\r\n get levelInfo() {\r\n return this._levelInfo;\r\n }\r\n /**\r\n * (resolution, levels, band voxels, current mask), the `params` uniform of\r\n * {@link sampleGlobalSDF}; bit i of the mask set when every brick of level i\r\n * is composited for its window, so readers can skip the tag checks there.\r\n */\r\n get params() {\r\n return this._params;\r\n }\r\n /**\r\n * Horizontal distance to the waterline at a water level, for shoreline\r\n * effects; built on demand, see {@link WaterlineField.request}.\r\n */\r\n get waterline() {\r\n if (!this._waterline) {\r\n this._waterline = new WaterlineField(new SDFWaterlineSource(this));\r\n }\r\n return this._waterline;\r\n }\r\n /**\r\n * Increments whenever the field may have changed (dirty region, bricks composited, dynamic\r\n * instances moved), so derived data such as the waterline can skip rebuilding.\r\n */\r\n get contentVersion() {\r\n return this._contentVersion;\r\n }\r\n /** As {@link GlobalSDF.contentVersion}, but for the clipmap only (static geometry and terrain). */\r\n get staticVersion() {\r\n return this._staticVersion;\r\n }\r\n /** Dynamic instances merged at query time this frame. */\r\n get dynamicCount() {\r\n return this._dynamicInfo.x;\r\n }\r\n /**\r\n * The materials composited alongside the distances, or null for distances\r\n * alone. Changing it rebuilds the whole field.\r\n */\r\n get materials() {\r\n return this._materials;\r\n }\r\n set materials(val: Nullable<GlobalSDFMaterials>) {\r\n if (val !== this._materials) {\r\n this._materials = val;\r\n this._program?.dispose();\r\n this._program = null;\r\n this._bindGroup?.dispose();\r\n this._bindGroup = null;\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Binds the field for {@link sampleSceneSDF} in a program that declared the\r\n * global and the dynamic uniforms.\r\n */\r\n applyBindGroup(bindGroup: BindGroup) {\r\n const atlas = this._sdf.atlas;\r\n bindGroup.setTexture(SDF_ATLAS_TEXTURE, atlas.texture, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue(SDF_DYNAMIC_INSTANCES, this._dynamicData);\r\n bindGroup.setValue(SDF_DYNAMIC_INFO, this._dynamicInfo);\r\n // Read with textureLoad, but the unfilterable binding still has a sampler\r\n // slot, which a filtering sampler fails to validate against\r\n bindGroup.setTexture(\r\n GLOBAL_SDF_TEXTURE,\r\n this.texture,\r\n fetchSampler(isGlobalSDFFilterable() ? 'repeat_linear_nomip' : 'clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture(GLOBAL_SDF_TAGS, this.tags, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue(GLOBAL_SDF_LEVELS, this._levelInfo);\r\n bindGroup.setValue(GLOBAL_SDF_PARAMS, this._params);\r\n }\r\n getStats(): GlobalSDFStats {\r\n let dirty = 0;\r\n for (const set of this._dirty) {\r\n dirty += set.size;\r\n }\r\n return {\r\n levels: this.levels,\r\n resolution: this.resolution,\r\n voxelSizes: Array.from({ length: this.levels }, (_, i) => this.voxelSize(i)),\r\n origins: this._origins.map((o, i) =>\r\n o ? (o.map((v) => v * this.voxelSize(i)) as [number, number, number]) : [0, 0, 0]\r\n ),\r\n dirtyBricks: dirty,\r\n lastBricks: this._lastBricks,\r\n totalBricks: this._totalBricks,\r\n terrain: !!this._terrain,\r\n waterlineRebuilds: this._waterline?.rebuilds ?? 0\r\n };\r\n }\r\n /** Shader compile errors of the composite and query programs, for diagnosis. */\r\n getProgramErrors() {\r\n return getSDFProgramErrors();\r\n }\r\n /** Marks every brick within band reach of a world box for rebuilding. */\r\n markDirty(min: Vector3, max: Vector3) {\r\n this._contentVersion++;\r\n this._staticVersion++;\r\n for (let level = 0; level < this.levels; level++) {\r\n const origin = this._origins[level];\r\n if (!origin) {\r\n continue;\r\n }\r\n const vs = this.voxelSize(level);\r\n const reach = this.bandVoxels * vs;\r\n const b = BRICK * vs;\r\n const lo = [min.x - reach, min.y - reach, min.z - reach].map((v) => Math.floor(v / b));\r\n const hi = [max.x + reach, max.y + reach, max.z + reach].map((v) => Math.floor(v / b));\r\n const wlo = origin.map((v) => v / BRICK);\r\n const whi = wlo.map((v) => v + this.resolution / BRICK - 1);\r\n for (let z = Math.max(lo[2], wlo[2]); z <= Math.min(hi[2], whi[2]); z++) {\r\n for (let y = Math.max(lo[1], wlo[1]); y <= Math.min(hi[1], whi[1]); y++) {\r\n for (let x = Math.max(lo[0], wlo[0]); x <= Math.min(hi[0], whi[0]); x++) {\r\n this._dirty[level].add(`${x},${y},${z}`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Marks everything for rebuilding. */\r\n invalidate() {\r\n for (let level = 0; level < this.levels; level++) {\r\n this._origins[level] = null;\r\n this._dirty[level].clear();\r\n }\r\n }\r\n /**\r\n * Follows the camera and composites up to {@link GlobalSDF.brickBudget} dirty\r\n * bricks. Called by the scene field once a frame, after its atlas uploads.\r\n */\r\n update(cameraPos: Vector3, terrain: Nullable<ClipmapTerrain>) {\r\n if (terrain !== this._terrain || (terrain && terrain.heightVersion !== this._terrainVersion)) {\r\n const old = this._terrain;\r\n this._terrain = terrain;\r\n this._terrainVersion = terrain?.heightVersion ?? -1;\r\n for (const t of [old, terrain]) {\r\n const box = t?.getWorldBoundingVolume()?.toAABB();\r\n if (box) {\r\n this.markDirty(box.minPoint, box.maxPoint);\r\n }\r\n }\r\n }\r\n if (this._materials && terrain) {\r\n // Recapture the terrain albedo where it changed and recomposite the materials there\r\n const rect = terrain.giAlbedo.update();\r\n const box = rect ? terrain.getWorldBoundingVolume()?.toAABB() : null;\r\n if (rect && box) {\r\n this.markDirty(\r\n tmpDirtyMin.setXYZ(rect[0], box.minPoint.y, rect[1]),\r\n tmpDirtyMax.setXYZ(rect[2], box.maxPoint.y, rect[3])\r\n );\r\n }\r\n }\r\n for (let level = 0; level < this.levels; level++) {\r\n this.moveWindow(level, cameraPos);\r\n }\r\n this.composite();\r\n // Levels with nothing left to composite hold their whole window\r\n let current = 0;\r\n for (let level = 0; level < this.levels; level++) {\r\n if (this._origins[level] && this._dirty[level].size === 0) {\r\n current |= 1 << level;\r\n }\r\n }\r\n this._params.w = current;\r\n this.gatherDynamic(cameraPos);\r\n if (this._waterline) {\r\n RenderGraphExecutor.profileScope('Waterline', () => this._waterline!.update(cameraPos));\r\n }\r\n }\r\n /** Packs the ready dynamic instances nearest the camera for query-time merging. @internal */\r\n private gatherDynamic(cameraPos: Vector3) {\r\n const reach = this.resolution * 0.5 * this.voxelSize(this.levels - 1);\r\n const near: { inst: SDFInstance; d: number }[] = [];\r\n for (const inst of this._sdf.instances) {\r\n if (inst.mode === 'dynamic' && this._sdf.isReady(inst)) {\r\n const lo = inst.bounds.minPoint;\r\n const hi = inst.bounds.maxPoint;\r\n const d = Math.hypot(\r\n Math.max(lo.x - cameraPos.x, 0, cameraPos.x - hi.x),\r\n Math.max(lo.y - cameraPos.y, 0, cameraPos.y - hi.y),\r\n Math.max(lo.z - cameraPos.z, 0, cameraPos.z - hi.z)\r\n );\r\n if (d <= reach) {\r\n near.push({ inst, d });\r\n }\r\n }\r\n }\r\n near.sort((a, b) => a.d - b.d);\r\n const count = Math.min(near.length, MAX_DYNAMIC_SDF_INSTANCES);\r\n const atlas = this._sdf.atlas;\r\n for (let i = 0; i < count; i++) {\r\n packSDFInstance(near[i].inst, atlas, this._dynamicData, i * SDF_INSTANCE_VEC4S * 4);\r\n }\r\n this._dynamicInfo.setXYZW(count, 1 / atlas.size[0], 1 / atlas.size[1], 1 / atlas.size[2]);\r\n // Changed when an instance moved or the set changed\r\n const used = count * SDF_INSTANCE_VEC4S * 4;\r\n let changed = this._prevDynamic[0] !== count;\r\n for (let i = 0; i < used && !changed; i++) {\r\n changed = this._prevDynamic[i + 1] !== this._dynamicData[i];\r\n }\r\n if (changed) {\r\n this._prevDynamic[0] = count;\r\n this._prevDynamic.set(this._dynamicData.subarray(0, used), 1);\r\n this._contentVersion++;\r\n }\r\n }\r\n /**\r\n * Signed distances at world positions, read back from the GPU; resolves a\r\n * frame or two later. For tools and gameplay queries, not per-frame use.\r\n */\r\n queryDistances(points: Vector3[]): Promise<Float32Array> {\r\n const run = async () => {\r\n const n = Math.min(points.length, MAX_QUERY_POINTS);\r\n const out = new Float32Array(points.length);\r\n if (n === 0 || !this._texture) {\r\n return out;\r\n }\r\n const device = getDevice();\r\n const pixels = new Float32Array(MAX_QUERY_POINTS);\r\n // Recorded at the start of a frame, like the water surface queries:\r\n // outside one the dispatch has no command stream to land in\r\n await device.runNextFrameAsync(async () => {\r\n if (!this._queryProgram) {\r\n this._queryProgram = this.createQueryProgram();\r\n this._queryBindGroup = device.createBindGroup(this._queryProgram.bindGroupLayouts[0]);\r\n this._queryPoints = device.createBuffer(MAX_QUERY_POINTS * 16, { usage: 'uniform', storage: true });\r\n this._queryOutput = device.createTexture2D('r32f', MAX_QUERY_POINTS, 1, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n }\r\n const data = new Float32Array(MAX_QUERY_POINTS * 4);\r\n for (let i = 0; i < n; i++) {\r\n data[i * 4] = points[i].x;\r\n data[i * 4 + 1] = points[i].y;\r\n data[i * 4 + 2] = points[i].z;\r\n }\r\n this._queryPoints!.bufferSubData(0, data);\r\n const bg = this._queryBindGroup!;\r\n bg.setBuffer('points', this._queryPoints!);\r\n bg.setTexture('result', this._queryOutput!);\r\n bg.setValue('count', new Vector4(n, 0, 0, 0));\r\n this.applyBindGroup(bg);\r\n device.setProgram(this._queryProgram);\r\n device.setBindGroup(0, bg);\r\n device.compute(Math.ceil(n / 64), 1, 1);\r\n // The copy for the readback is recorded right after the dispatch, and\r\n // flushed so it does not wait behind the frame's own passes\r\n const read = this._queryOutput!.readPixels(0, 0, MAX_QUERY_POINTS, 1, 0, 0, pixels);\r\n device.flush();\r\n await read;\r\n });\r\n out.set(pixels.subarray(0, n));\r\n return out;\r\n };\r\n const next = this._queryChain.then(run, run);\r\n this._queryChain = next.catch(() => undefined);\r\n return next;\r\n }\r\n dispose() {\r\n this._waterline?.dispose();\r\n this._waterline = null;\r\n this._texture?.dispose();\r\n this._texture = null;\r\n this._tags?.dispose();\r\n this._tags = null;\r\n this._instanceBuffer?.dispose();\r\n this._brickBuffer?.dispose();\r\n this._indexBuffer?.dispose();\r\n this._materialBuffer?.dispose();\r\n this._dummyHeightMap?.dispose();\r\n this._queryPoints?.dispose();\r\n this._queryOutput?.dispose();\r\n this._bindGroup?.dispose();\r\n this._queryBindGroup?.dispose();\r\n this._instanceBuffer = this._brickBuffer = this._indexBuffer = this._queryPoints = null;\r\n this._materialBuffer = null;\r\n this._dummyHeightMap = this._queryOutput = null;\r\n this._bindGroup = this._queryBindGroup = null;\r\n this.invalidate();\r\n }\r\n /** Re-centres a level on the camera, dirtying the bricks that entered. @internal */\r\n private moveWindow(level: number, cameraPos: Vector3) {\r\n const vs = this.voxelSize(level);\r\n const n = this.resolution;\r\n const nb = n / BRICK;\r\n // Snapped to bricks so a brick always maps to one contiguous block of texels\r\n const next: [number, number, number] = [cameraPos.x, cameraPos.y, cameraPos.z].map(\r\n (c) => (Math.floor(c / (vs * BRICK)) - nb / 2) * BRICK\r\n ) as [number, number, number];\r\n const prev = this._origins[level];\r\n if (prev && prev[0] === next[0] && prev[1] === next[1] && prev[2] === next[2]) {\r\n return;\r\n }\r\n this._origins[level] = next;\r\n this._levelInfo.set([next[0], next[1], next[2], vs], level * 4);\r\n const lo = next.map((v) => v / BRICK);\r\n const plo = prev?.map((v) => v / BRICK);\r\n const dirty = this._dirty[level];\r\n // Drop dirty bricks that left the window\r\n for (const key of dirty) {\r\n const [x, y, z] = key.split(',').map(Number);\r\n if (x < lo[0] || y < lo[1] || z < lo[2] || x >= lo[0] + nb || y >= lo[1] + nb || z >= lo[2] + nb) {\r\n dirty.delete(key);\r\n }\r\n }\r\n for (let z = lo[2]; z < lo[2] + nb; z++) {\r\n for (let y = lo[1]; y < lo[1] + nb; y++) {\r\n for (let x = lo[0]; x < lo[0] + nb; x++) {\r\n const inPrev =\r\n plo &&\r\n x >= plo[0] &&\r\n y >= plo[1] &&\r\n z >= plo[2] &&\r\n x < plo[0] + nb &&\r\n y < plo[1] + nb &&\r\n z < plo[2] + nb;\r\n if (!inPrev) {\r\n dirty.add(`${x},${y},${z}`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Composites a budget of dirty bricks in one dispatch. @internal */\r\n private composite() {\r\n // Coarse levels first: a coarse answer everywhere beats a fine one somewhere\r\n const batch: { level: number; x: number; y: number; z: number }[] = [];\r\n for (let level = this.levels - 1; level >= 0 && batch.length < this.brickBudget; level--) {\r\n const dirty = this._dirty[level];\r\n for (const key of dirty) {\r\n if (batch.length >= this.brickBudget) {\r\n break;\r\n }\r\n const [x, y, z] = key.split(',').map(Number);\r\n batch.push({ level, x, y, z });\r\n dirty.delete(key);\r\n }\r\n }\r\n this._lastBricks = batch.length;\r\n this._freshCount = 0;\r\n // The budget can be raised at run time\r\n if (this._freshBricks.length < batch.length * 4) {\r\n this._freshBricks = new Float32Array(batch.length * 4);\r\n }\r\n if (batch.length === 0) {\r\n return;\r\n }\r\n this._contentVersion++;\r\n this._staticVersion++;\r\n this._totalBricks += batch.length;\r\n // Static instances whose field is on the GPU\r\n const instances: SDFInstance[] = [];\r\n for (const inst of this._sdf.instances) {\r\n if (inst.mode === 'static' && this._sdf.isReady(inst)) {\r\n instances.push(inst);\r\n }\r\n }\r\n const atlas = this._sdf.atlas;\r\n const instData = new Float32Array(Math.max(1, instances.length) * SDF_INSTANCE_VEC4S * 4);\r\n instances.forEach((inst, i) => packSDFInstance(inst, atlas, instData, i * SDF_INSTANCE_VEC4S * 4));\r\n // Per brick: the instances whose bounds come within band reach of it\r\n const brickData = new Float32Array(batch.length * BRICK_VEC4S * 4);\r\n const indices: number[] = [];\r\n const terrainBox = this._terrain?.getWorldBoundingVolume()?.toAABB() ?? null;\r\n const region = this._terrain?.worldRegion ?? null;\r\n const n = this.resolution;\r\n batch.forEach((brick, b) => {\r\n const vs = this.voxelSize(brick.level);\r\n const reach = this.bandVoxels * vs;\r\n const size = BRICK * vs;\r\n const min = [brick.x * size - reach, brick.y * size - reach, brick.z * size - reach];\r\n const max = [min[0] + size + 2 * reach, min[1] + size + 2 * reach, min[2] + size + 2 * reach];\r\n const start = indices.length;\r\n // Whether a two-sided mesh comes near, which narrows the trace's surface\r\n // expand in the brick (see SDF_NOT_COVERED_EXPAND_SCALE)\r\n let twoSided = false;\r\n instances.forEach((inst, i) => {\r\n const lo = inst.bounds.minPoint;\r\n const hi = inst.bounds.maxPoint;\r\n if (\r\n lo.x <= max[0] &&\r\n hi.x >= min[0] &&\r\n lo.y <= max[1] &&\r\n hi.y >= min[1] &&\r\n lo.z <= max[2] &&\r\n hi.z >= min[2]\r\n ) {\r\n indices.push(i);\r\n twoSided ||= !!inst.asset!.header!.twoSided;\r\n }\r\n });\r\n const terrainHit =\r\n !!terrainBox &&\r\n !!region &&\r\n terrainBox.minPoint.y <= max[1] &&\r\n terrainBox.maxPoint.y >= min[1] &&\r\n region.x <= max[0] &&\r\n region.z >= min[0] &&\r\n region.y <= max[2] &&\r\n region.w >= min[2];\r\n const wrap = (v: number) => (((v * BRICK) % n) + n) % n;\r\n const o = b * BRICK_VEC4S * 4;\r\n brickData.set([brick.x * BRICK, brick.y * BRICK, brick.z * BRICK, vs], o);\r\n if (this._materials) {\r\n // Material voxels are 2³ field voxels\r\n this._freshBricks.set(\r\n [wrap(brick.x) / 2, wrap(brick.y) / 2, wrap(brick.z) / 2, brick.level],\r\n this._freshCount++ * 4\r\n );\r\n }\r\n brickData.set([wrap(brick.x), wrap(brick.y), wrap(brick.z) + brick.level * n, start], o + 4);\r\n // y: bit 0 the terrain comes near, bit 1 a two-sided mesh does\r\n brickData.set(\r\n [indices.length - start, (terrainHit ? 1 : 0) + (twoSided ? 2 : 0), reach, brick.level],\r\n o + 8\r\n );\r\n });\r\n const device = getDevice();\r\n const program = this.getProgram();\r\n const bg = this._bindGroup!;\r\n this._instanceBuffer = this.ensureBuffer(this._instanceBuffer, instData.byteLength);\r\n this._instanceBuffer.bufferSubData(0, instData);\r\n this._brickBuffer = this.ensureBuffer(this._brickBuffer, brickData.byteLength);\r\n this._brickBuffer.bufferSubData(0, brickData);\r\n const indexData = new Uint32Array(Math.max(4, indices.length));\r\n indexData.set(indices);\r\n this._indexBuffer = this.ensureBuffer(this._indexBuffer, indexData.byteLength);\r\n this._indexBuffer.bufferSubData(0, indexData);\r\n bg.setBuffer('instances', this._instanceBuffer);\r\n bg.setBuffer('bricks', this._brickBuffer);\r\n bg.setBuffer('indices', this._indexBuffer);\r\n const materials = this._materials;\r\n if (materials) {\r\n // Per instance: (atlas slot offset, 1 when resident), (slot resolution, 0)\r\n const matData = new Float32Array(Math.max(1, instances.length) * 8);\r\n instances.forEach((inst, i) => {\r\n const slot = materials.getSlot(inst);\r\n if (slot) {\r\n matData.set([slot.offset[0], slot.offset[1], slot.offset[2], 1], i * 8);\r\n matData.set([slot.resolution[0], slot.resolution[1], slot.resolution[2], 0], i * 8 + 4);\r\n }\r\n });\r\n this._materialBuffer = this.ensureBuffer(this._materialBuffer, matData.byteLength);\r\n this._materialBuffer.bufferSubData(0, matData);\r\n bg.setBuffer('materialSlots', this._materialBuffer);\r\n bg.setTexture('matAlbedoAtlas', materials.atlasAlbedo, fetchSampler('clamp_linear_nomip'));\r\n // RGBE must not be filtered\r\n bg.setTexture('matEmissiveAtlas', materials.atlasEmissive, fetchSampler('clamp_nearest_nomip'));\r\n const s = materials.atlasSize;\r\n bg.setValue('matAtlasInvSize', new Vector4(1 / s[0], 1 / s[1], 1 / s[2], 0));\r\n const terrainAlbedo = this._terrain?.giAlbedo.texture ?? null;\r\n bg.setTexture('terrainAlbedo', terrainAlbedo ?? getDefaultTexture2D(), fetchSampler('clamp_linear'));\r\n bg.setValue(\r\n 'terrainAlbedoSize',\r\n new Vector4(terrainAlbedo?.width ?? 1, terrainAlbedo?.height ?? 1, 0, 0)\r\n );\r\n bg.setTexture('albedoOut', materials.albedo);\r\n bg.setTexture('emissiveOut', materials.emissive);\r\n }\r\n bg.setTexture('atlas', atlas.texture, fetchSampler('clamp_linear_nomip'));\r\n bg.setValue('atlasInvSize', new Vector4(1 / atlas.size[0], 1 / atlas.size[1], 1 / atlas.size[2], 0));\r\n const terrain = this._terrain;\r\n const heightMap = terrain?.heightMap ?? null;\r\n bg.setTexture('heightMap', heightMap ?? this.getDummyHeightMap(), fetchSampler('clamp_linear_nomip'));\r\n if (terrain && heightMap && region) {\r\n bg.setValue('terrainRegion', new Vector4(region.x, region.y, region.z, region.w));\r\n bg.setValue(\r\n 'terrainParams',\r\n new Vector4(\r\n Math.abs(terrain.scale.y),\r\n terrain.worldMatrix.m13,\r\n 1 / heightMap.width,\r\n 1 / heightMap.height\r\n )\r\n );\r\n } else {\r\n bg.setValue('terrainRegion', new Vector4(0, 0, 1, 1));\r\n bg.setValue('terrainParams', new Vector4(0, 0, 1, 1));\r\n }\r\n bg.setTexture('field', this.texture);\r\n bg.setTexture('tagsOut', this.tags);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bg);\r\n device.compute(batch.length * 8, 1, 1);\r\n }\r\n /** @internal */\r\n private ensureBuffer(buffer: Nullable<GPUDataBuffer>, bytes: number) {\r\n if (buffer && buffer.byteLength >= bytes) {\r\n return buffer;\r\n }\r\n buffer?.dispose();\r\n // Grow by 1.5x to avoid per-frame reallocation; whole vec4s since the storage binding covers\r\n // the whole buffer\r\n return getDevice().createBuffer(Math.max(256, Math.ceil((bytes * 1.5) / 16) * 16), {\r\n usage: 'uniform',\r\n storage: true\r\n })!;\r\n }\r\n /** @internal */\r\n private getDummyHeightMap() {\r\n if (!this._dummyHeightMap) {\r\n this._dummyHeightMap = getDevice().createTexture2D('r16f', 1, 1, { mipmapping: false })!;\r\n }\r\n return this._dummyHeightMap;\r\n }\r\n /** @internal */\r\n private getProgram() {\r\n if (!this._program) {\r\n const device = getDevice();\r\n const materials = !!this._materials;\r\n const fieldRes = this.resolution;\r\n this._program = buildSDFProgram({\r\n label: materials ? 'GlobalSDFCompositeMaterials' : 'GlobalSDFComposite',\r\n workgroupSize: [4, 4, 4],\r\n compute(pb) {\r\n this.instances = pb.vec4[0]().storageBufferReadonly(0);\r\n this.bricks = pb.vec4[0]().storageBufferReadonly(0);\r\n this.indices = pb.uint[0]().storageBufferReadonly(0);\r\n this.atlas = pb.tex3D().uniform(0);\r\n this.atlasInvSize = pb.vec4().uniform(0);\r\n this.heightMap = pb.tex2D().uniform(0);\r\n this.terrainRegion = pb.vec4().uniform(0);\r\n // (height scale, world y, 1 / width, 1 / height)\r\n this.terrainParams = pb.vec4().uniform(0);\r\n this.field =\r\n globalSDFFormat() === 'r16f'\r\n ? pb.texStorage3D.r16float().storage(0)\r\n : pb.texStorage3D.r32float().storage(0);\r\n this.tagsOut = pb.texStorage3D.rgba32float().storage(0);\r\n if (materials) {\r\n this.materialSlots = pb.vec4[0]().storageBufferReadonly(0);\r\n this.matAlbedoAtlas = pb.tex3D().uniform(0);\r\n this.matEmissiveAtlas = pb.tex3D().uniform(0);\r\n this.matAtlasInvSize = pb.vec4().uniform(0);\r\n // Top-down capture of the terrain material albedo, see TerrainGIAlbedo\r\n this.terrainAlbedo = pb.tex2D().uniform(0);\r\n // (capture width, capture height, 0, 0)\r\n this.terrainAlbedoSize = pb.vec4().uniform(0);\r\n this.albedoOut = pb.texStorage3D.rgba8unorm().storage(0);\r\n this.emissiveOut = pb.texStorage3D.rgba16float().storage(0);\r\n }\r\n pb.func('terrainHeight', [pb.vec2('xz')], function () {\r\n this.$l.uv = pb.div(\r\n pb.sub(this.xz, this.terrainRegion.xy),\r\n pb.sub(this.terrainRegion.zw, this.terrainRegion.xy)\r\n );\r\n this.$return(\r\n pb.add(\r\n pb.mul(pb.textureSampleLevel(this.heightMap, this.uv, 0).r, this.terrainParams.x),\r\n this.terrainParams.y\r\n )\r\n );\r\n });\r\n pb.main(function () {\r\n this.$l.brick = pb.div(this.$builtins.workGroupId.x, 8);\r\n this.$l.sub = pb.sub(this.$builtins.workGroupId.x, pb.mul(this.brick, 8));\r\n this.$l.local = pb.add(\r\n pb.mul(pb.uvec3(pb.mod(this.sub, 2), pb.mod(pb.div(this.sub, 2), 2), pb.div(this.sub, 4)), 4),\r\n this.$builtins.localInvocationId\r\n );\r\n this.$l.b0 = this.bricks.at(pb.mul(this.brick, BRICK_VEC4S));\r\n this.$l.b1 = this.bricks.at(pb.add(pb.mul(this.brick, BRICK_VEC4S), 1));\r\n this.$l.b2 = this.bricks.at(pb.add(pb.mul(this.brick, BRICK_VEC4S), 2));\r\n this.$l.vs = this.b0.w;\r\n this.$l.band = this.b2.z;\r\n this.$l.p = pb.mul(pb.add(this.b0.xyz, pb.add(pb.vec3(this.local), pb.vec3(0.5))), this.vs);\r\n this.$l.d = this.band;\r\n this.$l.start = pb.uint(this.b1.w);\r\n this.$l.count = pb.uint(this.b2.x);\r\n this.d = sampleInstancesSDF(\r\n this,\r\n this.p,\r\n this.count,\r\n this.d,\r\n (scope, k) => pb.mul(scope.indices.at(pb.add(scope.start, k)), SDF_INSTANCE_VEC4S),\r\n (scope, i) => scope.instances.at(i),\r\n this.atlas,\r\n this.atlasInvSize.xyz,\r\n pb.mul(this.vs, 0.5)\r\n );\r\n this.$l.flags = pb.uint(this.b2.y);\r\n this.$l.terrainD = this.band;\r\n this.$if(pb.notEqual(pb.compAnd(this.flags, pb.uint(1)), pb.uint(0)), function () {\r\n this.$l.inRegion = pb.and(\r\n pb.all(pb.greaterThanEqual(this.p.xz, this.terrainRegion.xy)),\r\n pb.all(pb.lessThanEqual(this.p.xz, this.terrainRegion.zw))\r\n );\r\n this.$if(this.inRegion, function () {\r\n this.$l.h = this.terrainHeight(this.p.xz);\r\n // Central differences one height map texel apart, in world units\r\n this.$l.cell = pb.mul(\r\n pb.sub(this.terrainRegion.zw, this.terrainRegion.xy),\r\n this.terrainParams.zw\r\n );\r\n this.$l.hx = pb.sub(\r\n this.terrainHeight(pb.add(this.p.xz, pb.vec2(this.cell.x, 0))),\r\n this.terrainHeight(pb.sub(this.p.xz, pb.vec2(this.cell.x, 0)))\r\n );\r\n this.$l.hz = pb.sub(\r\n this.terrainHeight(pb.add(this.p.xz, pb.vec2(0, this.cell.y))),\r\n this.terrainHeight(pb.sub(this.p.xz, pb.vec2(0, this.cell.y)))\r\n );\r\n this.$l.grad = pb.div(pb.vec2(this.hx, this.hz), pb.mul(this.cell, 2));\r\n // Height above the surface over the slope: exact on a plane\r\n this.terrainD = pb.min(\r\n this.terrainD,\r\n pb.div(pb.sub(this.p.y, this.h), pb.sqrt(pb.add(1, pb.dot(this.grad, this.grad))))\r\n );\r\n });\r\n });\r\n this.d = pb.clamp(pb.min(this.d, this.terrainD), pb.neg(this.band), this.band);\r\n // b1 addresses the level as `resolution` slices; the field has one more each\r\n this.$l.level = pb.uint(this.b2.w);\r\n this.$l.ft = pb.add(pb.uvec3(this.b1.xyz), this.local);\r\n this.ft.z = pb.add(this.ft.z, this.level);\r\n pb.textureStore(this.field, this.ft, pb.vec4(this.d, 0, 0, 0));\r\n // The first slice of the window again past the last, the seam the filter crosses\r\n this.$l.res = pb.uint(fieldRes);\r\n this.$if(\r\n pb.and(pb.equal(this.local.z, 0), pb.equal(pb.uint(this.b1.z), pb.mul(this.level, this.res))),\r\n function () {\r\n pb.textureStore(\r\n this.field,\r\n pb.uvec3(this.ft.x, this.ft.y, pb.add(pb.mul(this.level, pb.add(this.res, 1)), this.res)),\r\n pb.vec4(this.d, 0, 0, 0)\r\n );\r\n }\r\n );\r\n // Tag the brick with its world brick coords (visible to readers next pass); alpha\r\n // flags two-sided meshes\r\n this.$if(\r\n pb.and(pb.equal(this.sub, 0), pb.equal(this.$builtins.localInvocationId, pb.uvec3(0))),\r\n function () {\r\n pb.textureStore(\r\n this.tagsOut,\r\n pb.div(pb.uvec3(this.b1.xyz), BRICK),\r\n pb.vec4(\r\n pb.div(this.b0.xyz, BRICK),\r\n this.$choice(\r\n pb.notEqual(pb.compAnd(this.flags, pb.uint(2)), pb.uint(0)),\r\n pb.float(GLOBAL_SDF_TAG_NOT_COVERED),\r\n pb.float(1)\r\n )\r\n )\r\n );\r\n }\r\n );\r\n if (materials) {\r\n // Material voxels are 2³ field voxels: the even-corner thread writes it, sampled at\r\n // its centre from the nearest instance (or the terrain where nearer)\r\n this.$if(pb.equal(pb.mod(this.local, pb.uvec3(2)), pb.uvec3(0)), function () {\r\n this.$l.pc = pb.add(this.p, pb.vec3(pb.mul(this.vs, 0.5)));\r\n this.$l.bestK = pb.int(-1);\r\n this.$l.instD = sampleInstancesSDF(\r\n this,\r\n this.pc,\r\n this.count,\r\n this.band,\r\n (scope, k) => pb.mul(scope.indices.at(pb.add(scope.start, k)), SDF_INSTANCE_VEC4S),\r\n (scope, i) => scope.instances.at(i),\r\n this.atlas,\r\n this.atlasInvSize.xyz,\r\n pb.mul(this.vs, 0.5),\r\n 'bestK'\r\n );\r\n this.$l.terrainWins = pb.and(\r\n pb.lessThan(this.terrainD, this.band),\r\n pb.lessThan(this.terrainD, this.instD)\r\n );\r\n this.$l.useInst = pb.and(\r\n pb.greaterThanEqual(this.bestK, 0),\r\n pb.lessThan(this.instD, this.band),\r\n pb.not(this.terrainWins)\r\n );\r\n this.$l.idx = this.$choice(\r\n this.useInst,\r\n this.indices.at(pb.add(this.start, pb.uint(pb.max(this.bestK, 0)))),\r\n pb.uint(0)\r\n );\r\n this.$l.ibase = pb.mul(this.idx, SDF_INSTANCE_VEC4S);\r\n this.$l.mr0 = this.instances.at(this.ibase);\r\n this.$l.mr1 = this.instances.at(pb.add(this.ibase, 1));\r\n this.$l.mr2 = this.instances.at(pb.add(this.ibase, 2));\r\n this.$l.mbmin = this.instances.at(pb.add(this.ibase, 3));\r\n this.$l.mbmax = this.instances.at(pb.add(this.ibase, 4));\r\n this.$l.mslot = this.instances.at(pb.add(this.ibase, 5));\r\n this.$l.matSlot = this.$choice(\r\n this.useInst,\r\n this.materialSlots.at(pb.mul(this.idx, 2)),\r\n pb.vec4(0)\r\n );\r\n this.$l.matRes = this.materialSlots.at(pb.add(pb.mul(this.idx, 2), 1));\r\n this.$l.pc4 = pb.vec4(this.pc, 1);\r\n this.$l.lp = pb.vec3(\r\n pb.dot(this.mr0, this.pc4),\r\n pb.dot(this.mr1, this.pc4),\r\n pb.dot(this.mr2, this.pc4)\r\n );\r\n sampleInstanceMaterial(\r\n this,\r\n this.lp,\r\n this.mbmin,\r\n this.mbmax,\r\n this.mslot,\r\n this.matSlot,\r\n this.matRes,\r\n this.atlas,\r\n this.atlasInvSize.xyz,\r\n this.matAlbedoAtlas,\r\n this.matEmissiveAtlas,\r\n this.matAtlasInvSize.xyz,\r\n 'outAlbedo',\r\n 'outEmissive'\r\n );\r\n this.$if(this.terrainWins, function () {\r\n // The capture's mip whose texels match the material voxel (two field voxels),\r\n // so coarse levels read the average over their footprint\r\n this.$l.tregion = pb.sub(this.terrainRegion.zw, this.terrainRegion.xy);\r\n this.$l.tuv = pb.div(pb.sub(this.pc.xz, this.terrainRegion.xy), this.tregion);\r\n this.$l.ttexel = pb.max(\r\n pb.div(this.tregion.x, this.terrainAlbedoSize.x),\r\n pb.div(this.tregion.y, this.terrainAlbedoSize.y)\r\n );\r\n this.$l.tlod = pb.max(pb.log2(pb.div(pb.mul(this.vs, 2), this.ttexel)), 0);\r\n this.outAlbedo = pb.vec4(\r\n pb.textureSampleLevel(this.terrainAlbedo, this.tuv, this.tlod).rgb,\r\n 1\r\n );\r\n this.outEmissive = pb.vec3(0);\r\n });\r\n this.$l.ct = pb.div(pb.add(pb.uvec3(this.b1.xyz), this.local), pb.uvec3(2));\r\n pb.textureStore(this.albedoOut, this.ct, this.outAlbedo);\r\n pb.textureStore(this.emissiveOut, this.ct, pb.vec4(this.outEmissive, 0));\r\n });\r\n }\r\n });\r\n }\r\n })!;\r\n this._bindGroup = device.createBindGroup(this._program.bindGroupLayouts[0]);\r\n }\r\n return this._program;\r\n }\r\n /** @internal */\r\n private createQueryProgram() {\r\n const levels = this.levels;\r\n return buildSDFProgram({\r\n label: 'GlobalSDFQuery',\r\n workgroupSize: [64, 1, 1],\r\n compute(pb) {\r\n this.points = pb.vec4[0]().storageBufferReadonly(0);\r\n this.count = pb.vec4().uniform(0);\r\n this.result = pb.texStorage2D.r32float().storage(0);\r\n declareGlobalSDFUniforms(this, 0, levels);\r\n declareDynamicSDFUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.i = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.i, pb.uint(this.count.x)), function () {\r\n this.$l.d = sampleSceneSDF(this, this.points.at(this.i).xyz, levels);\r\n pb.textureStore(this.result, pb.uvec2(this.i, 0), pb.vec4(this.d, 0, 0, 0));\r\n });\r\n });\r\n }\r\n })!;\r\n }\r\n}\r\n"],"names":["BRICK","GLOBAL_SDF_BRICK","BRICK_VEC4S","MAX_QUERY_POINTS","packSDFInstance","inst","atlas","out","offset","header","asset","slot","getSlot","inv","mesh","invWorldMatrix","m","worldMatrix","scale","Math","min","hypot","m00","m10","m20","m01","m11","m21","m02","m12","m22","set","m03","m13","m23","boxMin","voxelSize","boxMax","twoSided","tmpDirtyMin","Vector3","tmpDirtyMax","GlobalSDF","levels","resolution","baseVoxelSize","bandVoxels","brickBudget","_sdf","_texture","_tags","_lastBricks","_freshBricks","_freshCount","_totalBricks","_terrain","_terrainVersion","_program","_bindGroup","_instanceBuffer","_brickBuffer","_indexBuffer","_materialBuffer","_materials","_dummyHeightMap","_queryProgram","_queryBindGroup","_queryPoints","_queryOutput","_queryChain","_levelInfo","_dynamicData","_dynamicInfo","_waterline","_contentVersion","_staticVersion","_prevDynamic","_params","sdf","options","max","floor","ceil","_origins","Array","fill","_dirty","from","length","Set","Float32Array","Promise","resolve","MAX_DYNAMIC_SDF_INSTANCES","SDF_INSTANCE_VEC4S","Vector4","isSupported","getDevice","type","texture","n","createTexture3D","globalSDFFormat","mipmapping","writable","name","tags","nb","freshMaterialBricks","data","count","level","levelInfo","params","waterline","WaterlineField","SDFWaterlineSource","contentVersion","staticVersion","dynamicCount","x","materials","val","dispose","invalidate","applyBindGroup","bindGroup","setTexture","SDF_ATLAS_TEXTURE","fetchSampler","setValue","SDF_DYNAMIC_INSTANCES","SDF_DYNAMIC_INFO","GLOBAL_SDF_TEXTURE","isGlobalSDFFilterable","GLOBAL_SDF_TAGS","GLOBAL_SDF_LEVELS","GLOBAL_SDF_PARAMS","getStats","dirty","size","voxelSizes","_","i","origins","map","o","v","dirtyBricks","lastBricks","totalBricks","terrain","waterlineRebuilds","rebuilds","getProgramErrors","getSDFProgramErrors","markDirty","origin","vs","reach","b","lo","y","z","hi","wlo","whi","add","clear","update","cameraPos","heightVersion","old","t","box","getWorldBoundingVolume","toAABB","minPoint","maxPoint","rect","giAlbedo","setXYZ","moveWindow","composite","current","w","gatherDynamic","RenderGraphExecutor","profileScope","near","instances","mode","isReady","bounds","d","push","sort","a","setXYZW","used","changed","subarray","queryDistances","points","run","device","pixels","runNextFrameAsync","createQueryProgram","createBindGroup","bindGroupLayouts","createBuffer","usage","storage","createTexture2D","bufferSubData","bg","setBuffer","setProgram","setBindGroup","compute","read","readPixels","flush","next","then","catch","undefined","c","prev","plo","key","split","Number","delete","inPrev","batch","instData","forEach","brickData","indices","terrainBox","region","worldRegion","brick","start","terrainHit","wrap","program","getProgram","ensureBuffer","byteLength","indexData","Uint32Array","matData","atlasAlbedo","atlasEmissive","s","atlasSize","terrainAlbedo","getDefaultTexture2D","width","height","albedo","emissive","heightMap","getDummyHeightMap","abs","buffer","bytes","fieldRes","buildSDFProgram","label","workgroupSize","pb","vec4","storageBufferReadonly","bricks","uint","tex3D","uniform","atlasInvSize","tex2D","terrainRegion","terrainParams","field","texStorage3D","r16float","r32float","tagsOut","rgba32float","materialSlots","matAlbedoAtlas","matEmissiveAtlas","matAtlasInvSize","terrainAlbedoSize","albedoOut","rgba8unorm","emissiveOut","rgba16float","func","vec2","$l","uv","div","sub","xz","xy","zw","$return","mul","textureSampleLevel","r","main","$builtins","workGroupId","local","uvec3","mod","localInvocationId","b0","at","b1","b2","band","p","xyz","vec3","sampleInstancesSDF","scope","k","flags","terrainD","$if","notEqual","compAnd","inRegion","and","all","greaterThanEqual","lessThanEqual","h","terrainHeight","cell","hx","hz","grad","sqrt","dot","clamp","neg","ft","textureStore","res","equal","$choice","float","GLOBAL_SDF_TAG_NOT_COVERED","pc","bestK","int","instD","terrainWins","lessThan","useInst","not","idx","ibase","mr0","mr1","mr2","mbmin","mbmax","mslot","matSlot","matRes","pc4","lp","sampleInstanceMaterial","tregion","tuv","ttexel","tlod","log2","outAlbedo","rgb","outEmissive","ct","result","texStorage2D","declareGlobalSDFUniforms","declareDynamicSDFUniforms","globalInvocationId","sampleSceneSDF","uvec2"],"mappings":"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"}