@woosh/meep-engine 3.69.0 → 3.70.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 (398) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  5. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  6. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  7. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  8. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  9. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  10. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  11. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  12. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  13. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  14. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  15. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  16. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  17. package/src/core/bvh8/bvh8_depth.js +39 -0
  18. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  19. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  20. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  21. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  22. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  24. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  25. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  26. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  27. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  28. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  29. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  30. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  31. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  32. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  33. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  34. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  35. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  36. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  37. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  38. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  39. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  40. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  41. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  42. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  43. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  44. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  45. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  46. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  47. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  48. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  49. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  50. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  51. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  52. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  53. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  54. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  55. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  56. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  57. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  58. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  59. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  60. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  61. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  62. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  63. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  64. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  65. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  66. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  67. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  68. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  69. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  70. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  71. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  72. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  73. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  74. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  75. package/src/shade/playground/bvh_repro/README.md +8 -6
  76. package/src/shade/playground/bvh_repro/index.html +125 -124
  77. package/src/shade/playground/bvh_repro/main.js +259 -254
  78. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  79. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  80. package/src/shade/playground/grass_surfaces/main.js +3 -2
  81. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  82. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  83. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  84. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  85. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  86. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  87. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  88. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  89. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  90. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  91. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  92. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  93. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  94. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  95. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  96. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  97. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  98. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  99. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  100. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  101. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  102. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  103. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  104. package/src/shade/playground/water_surface/main.js +6 -3
  105. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  106. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  107. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  108. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  109. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  110. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  111. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  112. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  113. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  114. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  115. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  116. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  117. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  118. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  119. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  120. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  121. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  122. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  123. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  124. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  125. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  126. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  127. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  128. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  129. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  130. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  131. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  132. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  133. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  134. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  135. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  136. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  137. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  138. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  139. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  140. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  141. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  142. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  143. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  144. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  145. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +2 -1
  147. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  148. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  150. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  151. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  152. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  153. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  154. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  155. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  156. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  158. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  159. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  160. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  161. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  162. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  164. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  165. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  167. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  168. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  170. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  171. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  172. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  173. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  174. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  176. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  177. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  179. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  180. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  182. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  183. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  185. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  186. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  188. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  189. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  190. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  191. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  192. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  193. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  195. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  197. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  198. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  199. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  201. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  203. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  205. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  206. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  207. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  208. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  209. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  210. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  211. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  212. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  213. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  214. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  215. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  216. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  217. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  218. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  219. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  220. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  221. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  222. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  224. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  225. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  226. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  227. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  228. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  229. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  230. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  231. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  232. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  233. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  234. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  235. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  236. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  237. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  238. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  239. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  240. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  241. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  242. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  243. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  244. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  245. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  246. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  247. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  248. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  249. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  250. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  251. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  252. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  253. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  254. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  255. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  256. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  257. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  258. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  259. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  260. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  261. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  262. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  263. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  264. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  265. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  266. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  267. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  268. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  269. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  270. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  271. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  272. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  273. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  274. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  275. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  276. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  277. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  278. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  279. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  280. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  281. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  282. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  283. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  284. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  285. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  286. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  287. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  288. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  289. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  290. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  291. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  292. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  293. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  294. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  295. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  296. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  297. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  298. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  299. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  300. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  301. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  302. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  303. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  304. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  305. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  306. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  307. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  308. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  309. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  310. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  311. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  312. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  313. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  315. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  316. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  318. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  319. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  320. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  321. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  322. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  324. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  325. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  327. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  328. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  329. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  330. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  331. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  332. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  333. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  334. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  335. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  336. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  337. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  338. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  339. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  340. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  341. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  342. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  343. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  344. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  345. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  346. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  347. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  348. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  349. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  350. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  351. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  352. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  353. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  354. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  355. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  356. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  357. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  358. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  359. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  360. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  361. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  362. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  363. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  364. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  365. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  366. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  367. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  368. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  369. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  370. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  371. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  372. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  373. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  374. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  375. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  376. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  377. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  378. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  379. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  380. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  381. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  382. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  383. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  384. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  385. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  386. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  387. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  388. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  389. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  390. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  391. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  392. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  393. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  394. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  395. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  396. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  397. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  398. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -1,13 +1,13 @@
1
- import { chunk_scene_database_access } from "../../../scene/chunk_scene_database_access.js";
2
1
  import { chunk_mesh_sdf_raymarch } from "../../../geometry/sdf/chunk_mesh_sdf_raymarch.js";
3
2
  import { chunk_mesh_sdf_header } from "../../../geometry/sdf/chunk_mesh_sdf_sample.js";
3
+ import { chunk_scene_database_access } from "../../../scene/chunk_scene_database_access.js";
4
4
  import { CodeChunk } from "../../compiler/CodeChunk.js";
5
- import { BVH_NULL_NODE_DEFINITION } from "../bvh/BVH_NULL_NODE_DEFINITION.js";
6
- import { BVH_TRAVERSAL_STACK_SIZE } from "../bvh/BVH_TRAVERSAL_STACK_SIZE.js";
7
-
8
- import { chunk_aabb3_distance_to_ray } from "../geometry/aabb3/chunk_aabb3_distance_to_ray.js";
9
- import { chunk_aabb3_unsigned_distance_to_point } from "../geometry/aabb3/chunk_aabb3_unsigned_distance_to_point.js";
10
- import { chunk_array_to_aabb3 } from "../geometry/aabb3/chunk_array_to_aabb3.js";
5
+ import { chunk_first_bit_high } from "../binary/chunk_first_bit_high.js";
6
+ import { BVH8_TLAS_MAX_DEPTH } from "../bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
7
+ import { chunk_bvh8_node_intersect } from "../bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js";
8
+ import { chunk_bvh8_ray_direction_rcp } from "../bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js";
9
+ import { chunk_bvh8_tree_read } from "../bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
10
+ import { chunk_ray_get_octant_inv4 } from "../bvh/bvh8/webgpu/chunk_ray_get_octant_inv4.js";
11
11
  import { chunk_mat4_inverse } from "../geometry/mat4/chunk_mat4_inverse.js";
12
12
  import { chunk_ray_transform_m4 } from "../geometry/ray/chunk_ray_transform_m4.js";
13
13
  import { RAY_STRUCT } from "../geometry/ray/RAY_STRUCT.js";
@@ -20,8 +20,11 @@ import { F32_MAX_DEFINITION } from "../math/F32_MAX_DEFINITION.js";
20
20
  * fn scene_sdf_raymarch_hit(ray: Ray) -> SceneSDFHit // t = F32_MAX for none
21
21
  * ```
22
22
  *
23
- * The TLAS is walked nearest box first; in every instance it meets, the ray marches that geometry's
24
- * sparse field at level 0 in its local space, whose t is the world one.
23
+ * The TLAS is walked with the ray, nearer slots first by the ray's octant, and the ray is shortened
24
+ * at every hit; in every instance whose box it still reaches, the ray marches that geometry's sparse
25
+ * field at level 0 in its local space, whose t is the world one.
26
+ *
27
+ * The enclosing shader binds `tlas`, `scene_database` and the mesh SDF buffers.
25
28
  *
26
29
  * @type {CodeChunk}
27
30
  */
@@ -33,87 +36,110 @@ struct SceneSDFHit {
33
36
  mesh: u32,
34
37
  }
35
38
 
36
- fn scene_sdf_raymarch_hit(ray:${RAY_STRUCT.wgsl_ref}) -> SceneSDFHit{
37
- var node_index = tlas.root;
39
+ fn scene_sdf_raymarch_hit(ray: ${RAY_STRUCT.wgsl_ref}) -> SceneSDFHit {
40
+ // the walk has the stack to itself: a field is marched, not walked
41
+ var stack: array<vec2u, ${BVH8_TLAS_MAX_DEPTH}>;
42
+ var pointer = 0u;
38
43
 
39
- var stack:array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
40
- var pointer = 1u;
41
-
42
44
  var best: SceneSDFHit;
43
45
 
44
46
  best.t = F32_MAX;
45
-
46
- for(;pointer > 0 && pointer <= ${BVH_TRAVERSAL_STACK_SIZE};){
47
-
48
- let node = tlas.nodes[node_index];
49
-
50
- let distance_to_node = aabb_distance_to_ray(node.bounds, ray);
51
-
52
- if(distance_to_node > best.t){
53
-
54
- pointer --;
55
- node_index = stack[pointer];
56
-
57
- continue;
47
+
48
+ // shortened as hits are found
49
+ var reach_ray = ray;
50
+
51
+ let oct_inv4 = ray_get_octant_inv4(ray.direction);
52
+ let direction_rcp = bvh8_ray_direction_rcp(ray.direction);
53
+
54
+ // The group being walked: the nodes of one parent that the ray reaches and that are still to visit
55
+ // x: index of the parent's first child node
56
+ // y: | hits, by traversal priority | pad | imask |
57
+ // | 8 bits | 16 bits | 8 bits |
58
+ // The root is a group of one, already hit.
59
+ var current_group = vec2(0u, 0x80000000u);
60
+
61
+ loop {
62
+ let hits_imask = current_group.y;
63
+
64
+ // nearest of the group's remaining nodes
65
+ let child_index_offset = first_bit_high(hits_imask);
66
+ let child_index_base = current_group.x;
67
+
68
+ current_group.y &= ~(1u << child_index_offset);
69
+
70
+ if ((current_group.y & 0xff000000u) != 0u && pointer < ${BVH8_TLAS_MAX_DEPTH}u) {
71
+ // the rest of the group waits
72
+ stack[pointer] = current_group;
73
+ pointer++;
58
74
  }
59
-
60
- let child_1 = node.child_1;
61
- let child_2 = node.child_2;
62
-
63
- if(child_1 != BVH_NULL_NODE){
64
- // Intermediate node
65
-
66
- node_index = child_1;
67
-
68
- stack[ pointer ] = child_2;
69
-
70
- pointer ++;
71
-
72
- }else{
73
- pointer --;
74
- node_index = stack[pointer];
75
-
76
- // leaf, traverse BLAS
77
- // child_2 stores the user_data (mesh_id)
78
- let mesh_id = child_2;
75
+
76
+ // undo the octant ranking to get the node's slot, then count the nodes in the slots below it
77
+ let slot_index = (child_index_offset - 24u) ^ (oct_inv4 & 0xffu);
78
+ let relative_index = countOneBits(hits_imask & ~(0xffffffffu << slot_index));
79
+
80
+ let node = bvh8_tree_read_node(&tlas, child_index_base + relative_index);
81
+
82
+ let hitmask = bvh8_node_intersect(reach_ray, direction_rcp, oct_inv4, node);
83
+
84
+ current_group.x = node.data[1].x;
85
+ current_group.y = (hitmask & 0xff000000u) | (node.data[0].w >> 24u);
86
+
87
+ // one bit per instance whose box the ray reaches
88
+ var instance_hits = hitmask & 0x00ffffffu;
89
+
90
+ while (instance_hits != 0u) {
91
+ let offset = countTrailingZeros(instance_hits);
92
+
93
+ instance_hits &= instance_hits - 1u;
94
+
95
+ // a leaf's payload is the instance's meshes row
96
+ let mesh_id = bvh8_tree_read_payload(&tlas, node, offset);
79
97
 
80
98
  let mesh = scene_read_mesh(&scene_database, mesh_id);
81
- let node = scene_read_node(&scene_database, mesh.node);
99
+ let placement = scene_read_node(&scene_database, mesh.node);
82
100
 
83
101
  /*
84
102
  The ray enters the instance with its direction made unit there, so a hit's parameter
85
103
  there is in the instance's units: a stretch of the world's, the length of the world
86
104
  direction under the inverse. Over the stretch it is a world distance again.
87
105
  */
88
- let to_local = mat4_inverse(node.global);
89
- let geometry_ray = ray_transform_m4(ray, to_local);
106
+ let to_local = mat4_inverse(placement.global);
107
+ let geometry_ray = ray_transform_m4(reach_ray, to_local);
90
108
  let stretch = length((to_local * vec4<f32>(ray.direction, 0.0)).xyz);
91
109
 
92
110
  let local_t = mesh_sdf_raymarch(mesh_sdf_header(mesh.geometry), 0u, geometry_ray);
93
111
  let distance = select(local_t / stretch, -1.0, local_t < 0.0);
94
112
 
95
- if(distance < 0.0 || distance >= best.t){
113
+ if (distance < 0.0 || distance >= best.t) {
96
114
  continue;
97
115
  }
98
-
99
- // found a good hit
116
+
100
117
  best.t = distance;
101
118
  best.mesh = mesh_id;
102
-
103
-
119
+
120
+ reach_ray.tmax = distance;
121
+ }
122
+
123
+ if ((current_group.y & 0xff000000u) == 0u) {
124
+ if (pointer == 0u) {
125
+ break;
126
+ }
127
+
128
+ pointer--;
129
+ current_group = stack[pointer];
104
130
  }
105
-
106
131
  }
107
-
108
-
132
+
109
133
  return best;
110
134
  }
111
135
  `, [
112
- BVH_NULL_NODE_DEFINITION,
136
+ RAY_STRUCT.declaration_chunk,
137
+ chunk_first_bit_high,
138
+ chunk_ray_get_octant_inv4,
139
+ chunk_bvh8_node_intersect,
140
+ chunk_bvh8_ray_direction_rcp,
141
+ chunk_bvh8_tree_read,
113
142
  chunk_mat4_inverse,
114
- chunk_aabb3_distance_to_ray,
115
- chunk_aabb3_unsigned_distance_to_point,
116
- chunk_array_to_aabb3,
117
143
  chunk_ray_transform_m4,
118
144
  F32_MAX_DEFINITION,
119
145
  chunk_mesh_sdf_header,
@@ -141,4 +167,4 @@ fn scene_sdf_raymarch(ray:${RAY_STRUCT.wgsl_ref}) -> f32{
141
167
  RAY_STRUCT.declaration_chunk,
142
168
  chunk_scene_sdf_raymarch_hit,
143
169
  ]
144
- );
170
+ );
@@ -1,3 +1,18 @@
1
+ /**
2
+ * The least signed distance from a point to any instance's field:
3
+ *
4
+ * ```wgsl
5
+ * fn sdf_query_distance(position: vec3<f32>) -> f32 // F32_MAX in a scene of no instances
6
+ * ```
7
+ *
8
+ * The TLAS is walked nearest box first by the signed distance to a slot's box, which nothing under
9
+ * the slot is nearer than: an instance, or a child node, is passed by once the best found is nearer
10
+ * than its box. A node's instances are asked before its children.
11
+ *
12
+ * The enclosing shader binds `tlas` and what `mesh_sdf_query_distance` reads.
13
+ *
14
+ * @type {CodeChunk}
15
+ */
1
16
  export const chunk_sdf_query_distance: CodeChunk;
2
17
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
18
  //# sourceMappingURL=chunk_sdf_query_distance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_sdf_query_distance.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js"],"names":[],"mappings":"AASA,iDAuEE;0BA/EwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_sdf_query_distance.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;GAcG;AACH,uCAFU,SAAS,CAqGjB;0BA5HwB,6BAA6B"}
@@ -1,81 +1,126 @@
1
1
  import { chunk_mesh_sdf_query_distance } from "../../../shadow/sdf/chunk_mesh_sdf_query_distance.js";
2
2
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
- import { BVH_NULL_NODE_DEFINITION } from "../bvh/BVH_NULL_NODE_DEFINITION.js";
4
- import { BVH_TRAVERSAL_STACK_SIZE } from "../bvh/BVH_TRAVERSAL_STACK_SIZE.js";
5
- import { chunk_aabb3_signed_distance_to_point } from "../geometry/aabb3/chunk_aabb3_signed_distance_to_point.js";
6
-
7
- import { chunk_aabb3_unsigned_distance_to_point } from "../geometry/aabb3/chunk_aabb3_unsigned_distance_to_point.js";
3
+ import { BVH8_TLAS_MAX_DEPTH } from "../bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
4
+ import { chunk_bvh8_node_slot_distances } from "../bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js";
5
+ import { chunk_bvh8_tree_read } from "../bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
6
+ import { BVH8_WAITING_SLOTS_CAPACITY, chunk_bvh8_waiting_slots } from "../bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js";
7
+ import { assert } from "../../../../../core/assert.js";
8
8
  import { F32_MAX_DEFINITION } from "../math/F32_MAX_DEFINITION.js";
9
9
 
10
+ assert.lessThanOrEqual(BVH8_TLAS_MAX_DEPTH, BVH8_WAITING_SLOTS_CAPACITY, 'the TLAS may be deeper than the walk can keep slots for');
11
+
12
+ /**
13
+ * The least signed distance from a point to any instance's field:
14
+ *
15
+ * ```wgsl
16
+ * fn sdf_query_distance(position: vec3<f32>) -> f32 // F32_MAX in a scene of no instances
17
+ * ```
18
+ *
19
+ * The TLAS is walked nearest box first by the signed distance to a slot's box, which nothing under
20
+ * the slot is nearer than: an instance, or a child node, is passed by once the best found is nearer
21
+ * than its box. A node's instances are asked before its children.
22
+ *
23
+ * The enclosing shader binds `tlas` and what `mesh_sdf_query_distance` reads.
24
+ *
25
+ * @type {CodeChunk}
26
+ */
10
27
  export const chunk_sdf_query_distance = CodeChunk.from(
11
28
  //language=WGSL
12
29
  `
13
- fn sdf_query_distance (position: vec3<f32>) -> f32{
14
-
15
- var node_index = tlas.root;
16
-
17
-
18
- var stack:array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
19
- var pointer = 1u;
20
-
30
+ fn sdf_query_distance(position: vec3<f32>) -> f32 {
31
+ // a node an entry, and nothing under the tree to share the stack with
32
+ var stack: array<u32, ${BVH8_TLAS_MAX_DEPTH}>;
33
+ var pointer = 0u;
34
+
35
+ // the slots still to visit of each node waiting on the stack; none for a child waiting as itself
36
+ var waiting = vec4<u32>(0u);
37
+
21
38
  var best_distance = F32_MAX;
22
-
23
- for(;pointer > 0 && pointer <= ${BVH_TRAVERSAL_STACK_SIZE};){
24
-
25
- let node = tlas.nodes[node_index];
26
-
27
- let distance_to_node = aabb3_signed_distance_to_point(node.bounds, position);
28
-
29
- if(distance_to_node > best_distance){
30
-
31
- pointer --;
32
- node_index = stack[pointer];
33
-
34
- continue;
39
+
40
+ // the node being looked at, and which of its child slots are still to visit
41
+ var node_index = 0u;
42
+ var pending = 0u;
43
+ var arriving = true;
44
+
45
+ loop {
46
+ let node = bvh8_tree_read_node(&tlas, node_index);
47
+ let distances = bvh8_node_slot_signed_distances(node, position);
48
+
49
+ let imask = node.data[0].w >> 24u;
50
+
51
+ if (arriving) {
52
+ // this node's own instances first: what they find prunes its children
53
+ let runs = bvh8_node_slot_runs(node);
54
+
55
+ var run = bvh8_slot_runs_within(runs, distances, best_distance);
56
+
57
+ while (run != 0u) {
58
+ let offset = countTrailingZeros(run);
59
+
60
+ run &= run - 1u;
61
+
62
+ // a leaf's payload is the instance's meshes row
63
+ let signed_distance = mesh_sdf_query_distance(bvh8_tree_read_payload(&tlas, node, offset), position);
64
+
65
+ if (signed_distance < best_distance) {
66
+ best_distance = signed_distance;
67
+
68
+ // slots no nearer than this are done with
69
+ run &= bvh8_slot_runs_within(runs, distances, best_distance);
70
+ }
71
+ }
72
+
73
+ pending = imask;
35
74
  }
36
-
37
- let child_1 = node.child_1;
38
- let child_2 = node.child_2;
39
-
40
- if(child_1 != BVH_NULL_NODE){
41
- // Intermediate node
42
-
43
- node_index = child_1;
44
-
45
- stack[ pointer ] = child_2;
46
-
47
- pointer ++;
48
-
49
- }else{
50
- pointer --;
51
- node_index = stack[pointer];
52
-
53
- // leaf, traverse BLAS
54
- // child_2 stores the user_data (mesh_id)
55
- let mesh_id = child_2;
56
-
57
- let signed_distance = mesh_sdf_query_distance(mesh_id, position);
58
-
59
- if(signed_distance >= best_distance){
60
- continue;
75
+
76
+ // the children still to visit that are worth one
77
+ let worthwhile = bvh8_slots_within(distances, best_distance) & pending;
78
+
79
+ if (worthwhile != 0u) {
80
+ let nearest_slot = bvh8_nearest_slot_among(distances, worthwhile);
81
+
82
+ // the node's children sit in one block, in slot order
83
+ let child_block = node.data[1].x;
84
+
85
+ let later = worthwhile & ~(1u << nearest_slot);
86
+
87
+ if (later != 0u && pointer < ${BVH8_TLAS_MAX_DEPTH}u) {
88
+ let lone = (later & (later - 1u)) == 0u;
89
+
90
+ stack[pointer] = select(node_index, child_block + countOneBits(imask & (later - 1u)), lone);
91
+
92
+ pointer++;
93
+
94
+ waiting = bvh8_waiting_slots_push(waiting, select(later, 0u, lone));
61
95
  }
62
-
63
- // found a good hit
64
- best_distance = signed_distance;
65
-
66
-
96
+
97
+ node_index = child_block + countOneBits(imask & ((1u << nearest_slot) - 1u));
98
+ arriving = true;
99
+
100
+ continue;
101
+ }
102
+
103
+ // nothing more under this node: back to whatever waits
104
+ if (pointer == 0u) {
105
+ break;
67
106
  }
68
-
107
+
108
+ pointer--;
109
+
110
+ node_index = stack[pointer];
111
+ pending = bvh8_waiting_slots_latest(waiting);
112
+ arriving = pending == 0u;
113
+
114
+ waiting = bvh8_waiting_slots_pop(waiting);
69
115
  }
70
-
71
-
116
+
72
117
  return best_distance;
73
118
  }
74
119
  `, [
75
- BVH_NULL_NODE_DEFINITION,
76
- chunk_aabb3_unsigned_distance_to_point,
77
- chunk_aabb3_signed_distance_to_point,
78
120
  F32_MAX_DEFINITION,
121
+ chunk_bvh8_tree_read,
122
+ chunk_bvh8_node_slot_distances,
123
+ chunk_bvh8_waiting_slots,
79
124
  chunk_mesh_sdf_query_distance,
80
125
  ]
81
- );
126
+ );
@@ -1,3 +1,17 @@
1
+ /**
2
+ * The distance along a ray to the nearest instance's field, by `sdf_mesh_raymarch`:
3
+ *
4
+ * ```wgsl
5
+ * fn ray_query_sdf_raycast(ray: Ray) -> f32 // -1 for no hit within the ray's reach
6
+ * ```
7
+ *
8
+ * The TLAS is walked with the ray, nearer slots first by the ray's octant, and the ray is shortened
9
+ * at every hit.
10
+ *
11
+ * The enclosing shader binds `tlas` and what `sdf_mesh_raymarch` reads.
12
+ *
13
+ * @type {CodeChunk}
14
+ */
1
15
  export const chunk_ray_query_sdf_raycast: CodeChunk;
2
16
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
17
  //# sourceMappingURL=chunk_ray_query_sdf_raycast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_ray_query_sdf_raycast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js"],"names":[],"mappings":"AAQA,oDAuEE;0BA1EwB,oCAAoC"}
1
+ {"version":3,"file":"chunk_ray_query_sdf_raycast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;GAaG;AACH,0CAFU,SAAS,CA2FjB;0BA1GwB,oCAAoC"}
@@ -1,80 +1,114 @@
1
- import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
2
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
3
- import { chunk_aabb3_intersects_ray } from "../../shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.js";
4
- import { chunk_ray_transform_m4 } from "../../shader/chunk/geometry/ray/chunk_ray_transform_m4.js";
1
+ import { chunk_first_bit_high } from "../../shader/chunk/binary/chunk_first_bit_high.js";
2
+ import { BVH8_TLAS_MAX_DEPTH } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
3
+ import { chunk_bvh8_node_intersect } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js";
4
+ import { chunk_bvh8_ray_direction_rcp } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js";
5
+ import { chunk_bvh8_tree_read } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
6
+ import { chunk_ray_get_octant_inv4 } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_ray_get_octant_inv4.js";
5
7
  import { RAY_STRUCT } from "../../shader/chunk/geometry/ray/RAY_STRUCT.js";
6
8
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
9
  import { chunk_sdf_mesh_raymarch } from "./chunk_sdf_mesh_raymarch.js";
8
10
 
11
+ /**
12
+ * The distance along a ray to the nearest instance's field, by `sdf_mesh_raymarch`:
13
+ *
14
+ * ```wgsl
15
+ * fn ray_query_sdf_raycast(ray: Ray) -> f32 // -1 for no hit within the ray's reach
16
+ * ```
17
+ *
18
+ * The TLAS is walked with the ray, nearer slots first by the ray's octant, and the ray is shortened
19
+ * at every hit.
20
+ *
21
+ * The enclosing shader binds `tlas` and what `sdf_mesh_raymarch` reads.
22
+ *
23
+ * @type {CodeChunk}
24
+ */
9
25
  export const chunk_ray_query_sdf_raycast = CodeChunk.from(
10
26
  //language=WGSL
11
27
  `
12
- fn ray_query_sdf_raycast( in_ray: ${RAY_STRUCT.wgsl_ref} ) -> f32 {
13
- var stack = array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>();
14
-
15
- let direction_rcp = 1.0 / in_ray.direction;
16
-
17
- var node_index = tlas.root;
18
- var pointer = 1u;
19
-
28
+ fn ray_query_sdf_raycast(in_ray: ${RAY_STRUCT.wgsl_ref}) -> f32 {
29
+ // the walk has the stack to itself: a field is marched, not walked
30
+ var stack: array<vec2u, ${BVH8_TLAS_MAX_DEPTH}>;
31
+ var pointer = 0u;
32
+
33
+ // shortened as hits are found
20
34
  var _ray = in_ray;
21
-
22
- for(;pointer > 0 && pointer <= ${BVH_TRAVERSAL_STACK_SIZE};){
23
-
24
- let node = tlas.nodes[node_index];
25
-
26
- if(!aabb3_intersects_ray(node.bounds, _ray.origin, direction_rcp, _ray.tmax)){
27
-
28
- pointer --;
29
- node_index = stack[pointer];
30
-
31
- continue;
35
+
36
+ let oct_inv4 = ray_get_octant_inv4(in_ray.direction);
37
+ let direction_rcp = bvh8_ray_direction_rcp(in_ray.direction);
38
+
39
+ // The group being walked: the nodes of one parent that the ray reaches and that are still to visit
40
+ // x: index of the parent's first child node
41
+ // y: | hits, by traversal priority | pad | imask |
42
+ // | 8 bits | 16 bits | 8 bits |
43
+ // The root is a group of one, already hit.
44
+ var current_group = vec2(0u, 0x80000000u);
45
+
46
+ loop {
47
+ let hits_imask = current_group.y;
48
+
49
+ // nearest of the group's remaining nodes
50
+ let child_index_offset = first_bit_high(hits_imask);
51
+ let child_index_base = current_group.x;
52
+
53
+ current_group.y &= ~(1u << child_index_offset);
54
+
55
+ if ((current_group.y & 0xff000000u) != 0u && pointer < ${BVH8_TLAS_MAX_DEPTH}u) {
56
+ // the rest of the group waits
57
+ stack[pointer] = current_group;
58
+ pointer++;
32
59
  }
33
-
34
- let child_1 = node.child_1;
35
- let child_2 = node.child_2;
36
-
37
- if(child_1 != BVH_NULL_NODE){
38
- // Intermediate node
39
-
40
- node_index = child_1;
41
-
42
- stack[ pointer ] = child_2;
43
-
44
- pointer ++;
45
-
46
-
47
- }else{
48
-
49
- pointer --;
50
- node_index = stack[pointer];
51
-
52
- // leaf, traverse BLAS
53
- // child_2 stores the user_data (mesh_id)
54
-
55
- let distance = sdf_mesh_raymarch(_ray, child_2);
56
-
57
- if(distance >= _ray.tmin && distance < _ray.tmax){
60
+
61
+ // undo the octant ranking to get the node's slot, then count the nodes in the slots below it
62
+ let slot_index = (child_index_offset - 24u) ^ (oct_inv4 & 0xffu);
63
+ let relative_index = countOneBits(hits_imask & ~(0xffffffffu << slot_index));
64
+
65
+ let node = bvh8_tree_read_node(&tlas, child_index_base + relative_index);
66
+
67
+ let hitmask = bvh8_node_intersect(_ray, direction_rcp, oct_inv4, node);
68
+
69
+ current_group.x = node.data[1].x;
70
+ current_group.y = (hitmask & 0xff000000u) | (node.data[0].w >> 24u);
71
+
72
+ // one bit per instance whose box the ray reaches
73
+ var instance_hits = hitmask & 0x00ffffffu;
74
+
75
+ while (instance_hits != 0u) {
76
+ let offset = countTrailingZeros(instance_hits);
77
+
78
+ instance_hits &= instance_hits - 1u;
79
+
80
+ // a leaf's payload is the instance's meshes row
81
+ let distance = sdf_mesh_raymarch(_ray, bvh8_tree_read_payload(&tlas, node, offset));
82
+
83
+ if (distance >= 0.0 && distance < _ray.tmax) {
58
84
  _ray.tmax = distance;
59
85
  }
60
-
61
86
  }
62
-
87
+
88
+ if ((current_group.y & 0xff000000u) == 0u) {
89
+ if (pointer == 0u) {
90
+ break;
91
+ }
92
+
93
+ pointer--;
94
+ current_group = stack[pointer];
95
+ }
63
96
  }
64
-
65
- if(_ray.tmax < in_ray.tmax){
97
+
98
+ if (_ray.tmax < in_ray.tmax) {
66
99
  // got a hit
67
100
  return _ray.tmax;
68
101
  }
69
-
70
- return -1;
102
+
103
+ return -1.0;
71
104
  }
72
105
  `, [
73
-
74
106
  RAY_STRUCT.declaration_chunk,
75
- BVH_NULL_NODE_DEFINITION,
76
- chunk_ray_transform_m4,
77
- chunk_aabb3_intersects_ray,
78
- chunk_sdf_mesh_raymarch
107
+ chunk_first_bit_high,
108
+ chunk_ray_get_octant_inv4,
109
+ chunk_bvh8_node_intersect,
110
+ chunk_bvh8_ray_direction_rcp,
111
+ chunk_bvh8_tree_read,
112
+ chunk_sdf_mesh_raymarch,
79
113
  ]
80
- );
114
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"graph_draw_sdf_shadows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js"],"names":[],"mappings":"AA8HA;;;;;;;;;;GAUG;AACH;IAR+B,KAAK;IACD,IAAI;IACZ,WAAW,EAA3B,MAAM;IACU,SAAS,EAAzB,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACU,sBAAsB,EAAtC,MAAM;IACJ,MAAM,CAgGlB;AApHD,kDASG;4BAjGyB,6BAA6B"}
1
+ {"version":3,"file":"graph_draw_sdf_shadows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js"],"names":[],"mappings":"AA8HA;;;;;;;;;;GAUG;AACH;IAR+B,KAAK;IACD,IAAI;IACZ,WAAW,EAA3B,MAAM;IACU,SAAS,EAAzB,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACU,sBAAsB,EAAtC,MAAM;IACJ,MAAM,CAgGlB;AApHD,kDASG;4BAlGyB,6BAA6B"}