@woosh/meep-engine 3.52.0 → 3.53.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 (370) hide show
  1. package/package.json +1 -1
  2. package/src/engine/ecs/animation/Animation.d.ts +4 -25
  3. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  4. package/src/engine/ecs/animation/Animation.js +9 -41
  5. package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
  6. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  7. package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
  8. package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
  9. package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
  10. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  11. package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
  12. package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
  13. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  14. package/src/engine/graphics3/AnimationSystem.js +62 -243
  15. package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
  16. package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
  17. package/src/engine/graphics3/FoliageWindSystem.js +257 -0
  18. package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
  19. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  20. package/src/engine/graphics3/GPUFluidSystem.js +39 -1
  21. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -1
  22. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUParticleEmitterSystem.js +19 -5
  24. package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
  25. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  26. package/src/engine/graphics3/animation/AnimationClips.js +207 -10
  27. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
  28. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
  29. package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
  30. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
  31. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
  32. package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
  33. package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
  34. package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
  35. package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
  38. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  39. package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
  40. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
  41. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
  42. package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
  43. package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
  44. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
  45. package/src/engine/graphics3/prefab/Prefab.js +169 -162
  46. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
  47. package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
  48. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  49. package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
  50. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
  51. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
  52. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  53. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
  54. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  55. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
  56. package/src/engine/sound/simulation/README.md +1 -1
  57. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
  58. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
  59. package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
  60. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  61. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
  62. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
  63. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  64. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
  65. package/src/generation/foliage/FOLIAGE_DESIGN.md +318 -0
  66. package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
  67. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
  68. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
  69. package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
  70. package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
  71. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
  72. package/src/generation/foliage/asset/TreeAsset.js +111 -0
  73. package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
  74. package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
  75. package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
  76. package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
  77. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
  78. package/src/generation/foliage/asset/generate_tree.js +93 -0
  79. package/src/generation/foliage/asset/place_tree.d.ts +82 -0
  80. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
  81. package/src/generation/foliage/asset/place_tree.js +194 -0
  82. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +120 -0
  83. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
  84. package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
  85. package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
  86. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
  87. package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
  88. package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
  89. package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
  90. package/src/generation/foliage/config/CrownConfig.js +186 -0
  91. package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
  92. package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
  93. package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
  94. package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
  95. package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
  96. package/src/generation/foliage/config/FoliageCardType.js +18 -0
  97. package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
  98. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
  99. package/src/generation/foliage/config/FoliageConfig.js +283 -0
  100. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +90 -0
  101. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
  102. package/src/generation/foliage/config/FoliageMaterialConfig.js +181 -0
  103. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
  104. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
  105. package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
  106. package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
  107. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
  108. package/src/generation/foliage/config/TreeLODConfig.js +211 -0
  109. package/src/generation/foliage/config/TreePreset.d.ts +16 -0
  110. package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
  111. package/src/generation/foliage/config/TreePreset.js +17 -0
  112. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
  113. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
  114. package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
  115. package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
  116. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
  117. package/src/generation/foliage/config/TreeWindConfig.js +157 -0
  118. package/src/generation/foliage/index.d.ts +38 -0
  119. package/src/generation/foliage/index.d.ts.map +1 -0
  120. package/src/generation/foliage/index.js +43 -0
  121. package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
  122. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
  123. package/src/generation/foliage/material/make_bark_material.js +802 -0
  124. package/src/generation/foliage/material/make_foliage_material.d.ts +14 -0
  125. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
  126. package/src/generation/foliage/material/make_foliage_material.js +359 -0
  127. package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
  128. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
  129. package/src/generation/foliage/mesh/branch_collar_project.js +203 -0
  130. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
  131. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
  132. package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
  133. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +80 -0
  134. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
  135. package/src/generation/foliage/mesh/foliage_collect_attachments.js +502 -0
  136. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
  137. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
  138. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
  139. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
  140. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
  141. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1047 -0
  142. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +21 -0
  143. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
  144. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +415 -0
  145. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
  146. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
  147. package/src/generation/foliage/presets/make_tree_species_preset.js +837 -0
  148. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
  149. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
  150. package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
  151. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
  152. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
  153. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
  154. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
  155. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
  156. package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
  157. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
  158. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
  159. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
  160. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +14 -0
  161. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
  162. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +179 -0
  163. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
  164. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
  165. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1104 -0
  166. package/src/shade/playground/additive_blending/index.html +197 -0
  167. package/src/shade/playground/additive_blending/main.d.ts +2 -0
  168. package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
  169. package/src/shade/playground/additive_blending/main.js +529 -0
  170. package/src/shade/playground/foliage_wind/README.md +18 -0
  171. package/src/shade/playground/foliage_wind/foliage_world.d.ts +127 -0
  172. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
  173. package/src/shade/playground/foliage_wind/foliage_world.js +593 -0
  174. package/src/shade/playground/foliage_wind/index.html +254 -0
  175. package/src/shade/playground/foliage_wind/main.d.ts +2 -0
  176. package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
  177. package/src/shade/playground/foliage_wind/main.js +263 -0
  178. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  179. package/src/shade/renderer/Renderer.js +45 -16
  180. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  181. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  182. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  183. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  184. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  185. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  186. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  187. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  188. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  189. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  190. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  191. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  192. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  193. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  194. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  195. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  196. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  197. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  198. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  199. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  201. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  202. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  203. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  204. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  205. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  206. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  207. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  208. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  209. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  210. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  211. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  212. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  213. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  214. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  215. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  216. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  217. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  218. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  219. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  220. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  221. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  222. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  223. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +7 -0
  224. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  225. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  226. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +7 -0
  227. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  228. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  229. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  231. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  232. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  233. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  234. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  236. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  237. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  238. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  239. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  240. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +7 -0
  241. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  242. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  243. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  244. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  245. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  246. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  247. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  248. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  249. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  250. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  251. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  252. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  253. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  254. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  255. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  256. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  257. package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
  258. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  259. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +9 -4
  260. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  261. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  262. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  263. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  264. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  265. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  266. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  267. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  268. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  269. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  270. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  271. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  272. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  273. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  274. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  275. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  276. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  277. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  278. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  279. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  280. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  281. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  282. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  283. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  284. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  285. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  286. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  287. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  288. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  289. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  290. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  291. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  292. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  293. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  294. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  295. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  296. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  297. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  298. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  299. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  300. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  301. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  302. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  303. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  304. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  305. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  306. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  307. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  308. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  309. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  310. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  311. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  312. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  313. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  314. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  315. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  316. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  317. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  318. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  319. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  320. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  321. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  322. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  323. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  324. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  325. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  326. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  327. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  328. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  329. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  330. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  331. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  332. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  333. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  334. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  335. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  336. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  337. package/src/engine/graphics/render/RenderPassType.js +0 -8
  338. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  339. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  340. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  341. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  342. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  343. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  344. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  345. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  346. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  347. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  348. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  349. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  350. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  351. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  352. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  353. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  354. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  355. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  356. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  357. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  358. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  359. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  360. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  361. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  362. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  363. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  364. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  365. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  366. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  367. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  368. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  369. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  370. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
@@ -1 +1 @@
1
- {"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,2CARW,MAAM,WACN,sBAAsB,QACtB,MAAM;IAEY,SAAS,GAA3B,OAAO;IAEL,cAAc,CA+J1B;AAED;;;;;;;;;;;;;;GAcG;AACH,iDAHW,sBAAsB,YACtB,cAAc,QAiBxB;qBAxPY,OAAO,aAAa,EAAE,MAAM;qCAC5B,OAAO,qCAAqC,EAAE,sBAAsB;+BAJlD,qBAAqB"}
1
+ {"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"AA+CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,2CARW,MAAM,WACN,sBAAsB,QACtB,MAAM;IAEY,SAAS,GAA3B,OAAO;IAEL,cAAc,CA8L1B;AAED;;;;;;;;;;;;;;GAcG;AACH,iDAHW,sBAAsB,YACtB,cAAc,QAqBxB;qBA5RY,OAAO,aAAa,EAAE,MAAM;qCAC5B,OAAO,qCAAqC,EAAE,sBAAsB;+BAJlD,qBAAqB"}
@@ -1,5 +1,9 @@
1
1
  import { assert } from "../../../core/assert.js";
2
2
  import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
3
+ import { PI2 } from "../../../core/math/PI2.js";
4
+ import { seededRandom } from "../../../core/math/random/seededRandom.js";
5
+ import { FoliageWindJoint } from "../../../shade/renderer/animation/foliage/FoliageWindJoint.js";
6
+ import { FoliageWindRig } from "../../../shade/renderer/animation/foliage/FoliageWindRig.js";
3
7
  import { ShadeAnimationChannel } from "../../../shade/renderer/animation/ShadeAnimationChannel.js";
4
8
  import { ShadeAnimationClip } from "../../../shade/renderer/animation/ShadeAnimationClip.js";
5
9
  import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
@@ -13,6 +17,7 @@ import { MeshSkin } from "../../graphics/ecs/mesh-v2/MeshSkin.js";
13
17
  import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
14
18
  import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
15
19
  import { AnimationClips } from "../animation/AnimationClips.js";
20
+ import { FoliageWindRigs } from "../animation/FoliageWindRigs.js";
16
21
  import { PrefabInstance } from "./PrefabInstance.js";
17
22
 
18
23
  /**
@@ -37,6 +42,7 @@ const COMPONENT_TYPES = [
37
42
  ParentEntity,
38
43
  SerializationMetadata,
39
44
  AnimationClips,
45
+ FoliageWindRigs,
40
46
  ];
41
47
 
42
48
  /**
@@ -96,6 +102,7 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
96
102
  const PARENT = dataset.computeComponentTypeIndex(ParentEntity);
97
103
  const METADATA = dataset.computeComponentTypeIndex(SerializationMetadata);
98
104
  const CLIPS = dataset.computeComponentTypeIndex(AnimationClips);
105
+ const FOLIAGE_RIGS = dataset.computeComponentTypeIndex(FoliageWindRigs);
99
106
 
100
107
  const root_transform = dataset.getComponent(root, Transform64);
101
108
 
@@ -231,6 +238,36 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
231
238
  // then.
232
239
  dataset.addComponentToEntityByIndex(root, CLIPS, AnimationClips.from(clips));
233
240
 
241
+ if (Array.isArray(prefab.foliage_rigs) && prefab.foliage_rigs.length > 0) {
242
+ const tx = root_transform.matrix[12];
243
+ const ty = root_transform.matrix[13];
244
+ const tz = root_transform.matrix[14];
245
+ const pos_hash = Math.imul(Math.round(tx * 100), 73856093)
246
+ ^ Math.imul(Math.round(ty * 100), 19349663)
247
+ ^ Math.imul(Math.round(tz * 100), 83492791)
248
+ ^ root;
249
+ const phase_rng = seededRandom(pos_hash | 0);
250
+ const phase_offset = phase_rng() * PI2;
251
+
252
+ const rigs = prefab.foliage_rigs.map(rig => FoliageWindRig.from({
253
+ name: rig.name,
254
+ root: entities[rig.root],
255
+ weight: rig.weight,
256
+ joints: rig.joints.map(joint => FoliageWindJoint.from({
257
+ target: entities[joint.target],
258
+ branch_axis: joint.branch_axis,
259
+ compliance: joint.compliance,
260
+ natural_frequency: joint.natural_frequency,
261
+ damping_ratio: joint.damping_ratio,
262
+ max_angle: joint.max_angle,
263
+ turbulence: joint.turbulence,
264
+ phase_offset: (joint.phase_offset + phase_offset) % PI2,
265
+ })),
266
+ }));
267
+
268
+ dataset.addComponentToEntityByIndex(root, FOLIAGE_RIGS, FoliageWindRigs.from(rigs));
269
+ }
270
+
234
271
  return instance;
235
272
  }
236
273
 
@@ -253,14 +290,18 @@ export function prefab_instance_destroy(dataset, instance) {
253
290
  assert.defined(dataset, 'dataset');
254
291
  assert.defined(instance, 'instance');
255
292
 
293
+ const root = instance.root;
294
+
295
+ if (dataset.entityExists(root) && dataset.getComponent(root, FoliageWindRigs) !== undefined) {
296
+ dataset.removeComponentFromEntity(root, FoliageWindRigs);
297
+ }
298
+
256
299
  const entities = instance.entities;
257
300
 
258
301
  for (let i = entities.length - 1; i >= 1; i--) {
259
302
  dataset.removeEntity(entities[i]);
260
303
  }
261
304
 
262
- const root = instance.root;
263
-
264
305
  if (dataset.entityExists(root) && dataset.getComponent(root, AnimationClips) !== undefined) {
265
306
  dataset.removeComponentFromEntity(root, AnimationClips);
266
307
  }
@@ -31,8 +31,8 @@ fn material_surface(s: MaterialSurfaceInput) -> MaterialSurfaceOutput {
31
31
  // the terrain is an axis-aligned field in its own space: uv is a division, not a mapping
32
32
  let terrain_uv = s.position_os.xz * terrain.inv_world_size;
33
33
 
34
- let duv_dx = s.position_os_ddx.xz * terrain.inv_world_size;
35
- let duv_dy = s.position_os_ddy.xz * terrain.inv_world_size;
34
+ let duv_dx = s.position_os_ddx.xz * terrain.inv_world_size * s.gradient_bias.x;
35
+ let duv_dy = s.position_os_ddy.xz * terrain.inv_world_size * s.gradient_bias.y;
36
36
 
37
37
  var ground = terrain_splat_mix(
38
38
  layer_diffuse, layer_sampler,
@@ -15,7 +15,7 @@
15
15
  export class ContactProbeSystem extends System<any> {
16
16
  constructor();
17
17
  dependencies: (typeof TransformAttachment | typeof ContactProbe)[];
18
- components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof AnimationGraphController> | ResourceAccessSpecification<typeof Animation> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof ContactProbe>)[];
18
+ components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof AnimationClips> | ResourceAccessSpecification<typeof ContactProbe>)[];
19
19
  /**
20
20
  * @param {ContactProbe} probe
21
21
  * @param {TransformAttachment} attachment
@@ -37,8 +37,7 @@ import { ContactProbe } from "./ContactProbe.js";
37
37
  import { Transform64 } from "../../ecs/transform/Transform64.js";
38
38
  import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
39
39
  import { Collider } from "./Collider.js";
40
- import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
41
- import { Animation } from "../../ecs/animation/Animation.js";
42
40
  import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
43
41
  import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
42
+ import { AnimationClips } from "../../graphics3/animation/AnimationClips.js";
44
43
  //# sourceMappingURL=ContactProbeSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"AAsEA;;;;;;;;;;;;;GAaG;AACH;;IAEI,mEAAmD;IAEnD,2bASE;IAyCF;;;;OAIG;IACH,YAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAUhB;IAED;;;;OAIG;IACH,cAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAWhB;IAED,sCA2BC;;CAiKJ;uBA1VsB,qBAAqB;oCAER,uDAAuD;6BAY9D,mBAAmB;4BALzC,oCAAoC;4CAdC,oDAAoD;yBAkBvE,eAAe;yCAHC,uDAAuD;0BAdtE,kCAAkC;kCAC1B,oCAAoC;6BACzC,kCAAkC"}
1
+ {"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"AAqEA;;;;;;;;;;;;;GAaG;AACH;;IAEI,mEAAmD;IAEnD,iYAQE;IAyCF;;;;OAIG;IACH,YAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAUhB;IAED;;;;OAIG;IACH,cAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAWhB;IAED,sCA2BC;;CAiKJ;uBAzVsB,qBAAqB;oCAER,uDAAuD;6BAY9D,mBAAmB;4BALzC,oCAAoC;4CAbC,oDAAoD;yBAiBvE,eAAe;kCAhBN,oCAAoC;6BACzC,kCAAkC;+BAYhC,6CAA6C"}
@@ -5,7 +5,6 @@ import { SphereShape3D } from "../../../core/geom/3d/shape/SphereShape3D.js";
5
5
  import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
6
6
  import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
7
7
  import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
8
- import { Animation } from "../../ecs/animation/Animation.js";
9
8
  import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
10
9
  import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
11
10
  import { parent_entity_model_of } from "../../ecs/parent/parent_entity_model_of.js";
@@ -19,7 +18,7 @@ import {
19
18
  TRANSFORM64_SCALE_OFFSET,
20
19
  TRANSFORM64_TRANSLATION_OFFSET
21
20
  } from "../../ecs/transform/Transform64.js";
22
- import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
21
+ import { AnimationClips } from "../../graphics3/animation/AnimationClips.js";
23
22
  import { collect_entity_playbacks } from "../../graphics3/pose/collect_entity_playbacks.js";
24
23
  import { PhysicsSurfacePoint } from "../queries/PhysicsSurfacePoint.js";
25
24
  import { Collider } from "./Collider.js";
@@ -93,8 +92,7 @@ export class ContactProbeSystem extends System {
93
92
  ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read),
94
93
  ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
95
94
  ResourceAccessSpecification.from(Collider, ResourceAccessKind.Read),
96
- ResourceAccessSpecification.from(Animation, ResourceAccessKind.Read),
97
- ResourceAccessSpecification.from(AnimationGraphController, ResourceAccessKind.Read),
95
+ ResourceAccessSpecification.from(AnimationClips, ResourceAccessKind.Read),
98
96
  ];
99
97
 
100
98
  /**
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
66
66
  /**
67
67
  * @param {FluidComponent} fluid
68
68
  */
69
- static "__#462@#refresh_masks"(fluid: FluidComponent): void;
69
+ static "__#464@#refresh_masks"(fluid: FluidComponent): void;
70
70
  /**
71
71
  * @param {FluidComponent} fluid
72
72
  */
73
- static "__#462@#clear_field"(fluid: FluidComponent): void;
73
+ static "__#464@#clear_field"(fluid: FluidComponent): void;
74
74
  /**
75
75
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
76
76
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
82
82
  * @param {number} inflation world-units SDF threshold
83
83
  * @param {Float64Array} point length-3 scratch
84
84
  */
85
- static "__#462@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
85
+ static "__#464@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
86
86
  /**
87
87
  * Write the obstacle's translation velocity onto every face of every cell
88
88
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
102
102
  * @param {number} wvy
103
103
  * @param {number} wvz
104
104
  */
105
- static "__#462@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
105
+ static "__#464@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
106
106
  constructor();
107
107
  dependencies: (typeof FluidObstacle)[];
108
108
  components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof FluidObstacle> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof FluidComponent>)[];
@@ -186,7 +186,7 @@ keep a back-compat shim or migrate callers. Serialization (positions-only) is un
186
186
 
187
187
  ## As-built (landed)
188
188
 
189
- All four stages shipped; `bakeProbeField(index, minSpacing, rayCount, random, options)` now runs
189
+ All four stages shipped; `bakeProbeField({ index, minSpacing, rayCount, random, ... })` now runs
190
190
  **SDF grid → portal discovery → cover (portals pre-seeded) → connectivity refinement → reverb** instead of the
191
191
  blind grid. The bake REGION is derived from the scene — the occluder hull
192
192
  (`AcousticOccluderIndex.computeWorldBounds`) inflated by `2 × minSpacing` on every side — not a caller
@@ -194,8 +194,8 @@ parameter; a caller wanting a hand-picked region drops to `build_sdf_grid` + `pr
194
194
 
195
195
  - **Stage 0** `AcousticOccluderIndex.signedDistanceAt(x,y,z,maxDistance)` — union SDF via the body-AABB BVH +
196
196
  per-body `shape.signed_distance_at_point` (negative inside, clamped to `+maxDistance`).
197
- - **Grid** `build_sdf_grid(index, bounds, minSpacing, sparsenessRatio)` (`probe_sdf_grid.js`) — the SDF voxel
198
- grid (oversampled 2× below `minSpacing`, capped 256³) is built ONCE and shared by the cover and (implicitly,
197
+ - **Grid** `build_sdf_grid({ index, bounds, minSpacing, sparsenessRatio, oversample, resolutionLimit })` (`probe_sdf_grid.js`) — the SDF voxel
198
+ grid (oversampled 2× below `minSpacing`, capped 256³ by default) is built ONCE and shared by the cover and (implicitly,
199
199
  via the same `signedDistanceAt`) portal detection, so the expensive up-to-256³ SDF sweep is paid once. The
200
200
  trilinear sampler, gradient-ascent local-max, and claim-sphere helpers live here too.
201
201
  - **Stage 1** `probe_place_sdf_cover(grid, {predefined})` — SDF maximal-empty-sphere greedy cover. Erase radius
@@ -235,7 +235,7 @@ parameter; a caller wanting a hand-picked region drops to `build_sdf_grid` + `pr
235
235
  - **The grid jitter** added to the old `bakeProbeField` is now moot (no grid) and was removed in the rewrite;
236
236
  the cover's gradient-ascended points are already general-position for the Delaunay base.
237
237
 
238
- Knobs (all in `options`, JSDoc'd): `sparsenessRatio`, `maxRefineFactor`, `corridorReachFactor`,
238
+ Knobs (all top-level parameters in `bakeProbeField`, JSDoc'd): `sdfSparsenessRatio`, `sdfOversample`, `sdfResolutionLimit`, `maxRefineFactor`, `corridorReachFactor`,
239
239
  `maxRefineRounds`, `detectPortals` (default true), `constrictionFactor`, `portalFloorRatio`. Tests:
240
240
  `core/signedDistanceAt.spec.js`, `probe/probe_place_sdf_cover.spec.js`, `probe/probe_refine_connectivity.spec.js`,
241
241
  `probe/probe_detect_portals.spec.js`, `probe/probe_densify_portals.spec.js`, the end-to-end
@@ -141,7 +141,7 @@ import { seededRandom } from "../../../core/math/random/seededRandom.js";
141
141
 
142
142
  // OFFLINE: place probes over the scene (the bake region is derived from the occluder hull) and bake each
143
143
  // probe's per-band RT60. minSpacing is the density knob (smaller = denser).
144
- const probes = bakeProbeField(sim.occluderIndex, /*minSpacing*/ 8, /*rayCount*/ 256, seededRandom(1));
144
+ const probes = bakeProbeField({ index: sim.occluderIndex, minSpacing: 8, rayCount: 256, random: seededRandom(1) });
145
145
  const json = probes.toJSON(); // serialize, ship as an asset
146
146
 
147
147
  // RUNTIME: an acoustic-owned reverb bus driven by the listener's nearest probe
@@ -29,16 +29,30 @@
29
29
  *
30
30
  * The `minSpacing` hint drives the initial cover/fit; only connectivity refinement may go finer.
31
31
  *
32
- * @param {AcousticOccluderIndex} index the acoustic scene (its occluder hull defines the bake region)
33
- * @param {number} minSpacing target/min probe spacing — the density hint (smaller = denser)
34
- * @param {number} rayCount rays per probe (reverb estimate quality)
35
- * @param {function():number} random seeded RNG (reverb bake)
36
- * @param {{sparsenessRatio?: number, maxRefineFactor?: number, corridorReachFactor?: number, maxRefineRounds?: number, detectPortals?: boolean, constrictionFactor?: number, portalFloorRatio?: number}} [options]
37
- * `detectPortals` (default true) toggles the portal discovery + densification stages.
32
+ * @param {Object} options
33
+ * @param {AcousticOccluderIndex} options.index the acoustic scene (its occluder hull defines the bake region)
34
+ * @param {number} options.minSpacing target/min probe spacing — the density hint (smaller = denser)
35
+ * @param {number} options.rayCount rays per probe (reverb estimate quality)
36
+ * @param {function():number} options.random seeded RNG (reverb bake)
37
+ * @param {number} [options.sdfSparsenessRatio]
38
+ * @param {number} [options.sdfOversample]
39
+ * @param {number} [options.sdfResolutionLimit]
40
+ * @param {number} [options.maxRefineFactor]
41
+ * @param {number} [options.corridorReachFactor]
42
+ * @param {number} [options.maxRefineRounds]
43
+ * @param {boolean} [options.detectPortals] (default true) toggles the portal discovery + densification stages
44
+ * @param {number} [options.constrictionFactor]
45
+ * @param {number} [options.portalFloorRatio]
38
46
  * @returns {AcousticProbeField}
39
47
  */
40
- export function bakeProbeField(index: AcousticOccluderIndex, minSpacing: number, rayCount: number, random: () => number, options?: {
41
- sparsenessRatio?: number;
48
+ export function bakeProbeField({ index, minSpacing, rayCount, random, sdfSparsenessRatio, sdfOversample, sdfResolutionLimit, maxRefineFactor, corridorReachFactor, maxRefineRounds, detectPortals, constrictionFactor, portalFloorRatio, }: {
49
+ index: AcousticOccluderIndex;
50
+ minSpacing: number;
51
+ rayCount: number;
52
+ random: () => number;
53
+ sdfSparsenessRatio?: number;
54
+ sdfOversample?: number;
55
+ sdfResolutionLimit?: number;
42
56
  maxRefineFactor?: number;
43
57
  corridorReachFactor?: number;
44
58
  maxRefineRounds?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"bakeProbeField.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeField.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,yEAPW,MAAM,YACN,MAAM,gBACK,MAAM,YACjB;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAC,GAE3L,kBAAkB,CA+E9B;mCAtJkC,yBAAyB"}
1
+ {"version":3,"file":"bakeProbeField.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeField.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH;IAf0C,KAAK;IACpB,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACqB,MAAM,QAAtB,MAAM;IACA,kBAAkB,GAAnC,MAAM;IACW,aAAa,GAA9B,MAAM;IACW,kBAAkB,GAAnC,MAAM;IACW,eAAe,GAAhC,MAAM;IACW,mBAAmB,GAApC,MAAM;IACW,eAAe,GAAhC,MAAM;IACY,aAAa,GAA/B,OAAO;IACU,kBAAkB,GAAnC,MAAM;IACW,gBAAgB,GAAjC,MAAM;IACJ,kBAAkB,CAyG9B;mCAxLkC,yBAAyB"}
@@ -65,15 +65,37 @@ const LOBE_SCRATCH = new Float32Array(MAX_LOBES * LOBE_STRIDE);
65
65
  *
66
66
  * The `minSpacing` hint drives the initial cover/fit; only connectivity refinement may go finer.
67
67
  *
68
- * @param {AcousticOccluderIndex} index the acoustic scene (its occluder hull defines the bake region)
69
- * @param {number} minSpacing target/min probe spacing — the density hint (smaller = denser)
70
- * @param {number} rayCount rays per probe (reverb estimate quality)
71
- * @param {function():number} random seeded RNG (reverb bake)
72
- * @param {{sparsenessRatio?: number, maxRefineFactor?: number, corridorReachFactor?: number, maxRefineRounds?: number, detectPortals?: boolean, constrictionFactor?: number, portalFloorRatio?: number}} [options]
73
- * `detectPortals` (default true) toggles the portal discovery + densification stages.
68
+ * @param {Object} options
69
+ * @param {AcousticOccluderIndex} options.index the acoustic scene (its occluder hull defines the bake region)
70
+ * @param {number} options.minSpacing target/min probe spacing — the density hint (smaller = denser)
71
+ * @param {number} options.rayCount rays per probe (reverb estimate quality)
72
+ * @param {function():number} options.random seeded RNG (reverb bake)
73
+ * @param {number} [options.sdfSparsenessRatio]
74
+ * @param {number} [options.sdfOversample]
75
+ * @param {number} [options.sdfResolutionLimit]
76
+ * @param {number} [options.maxRefineFactor]
77
+ * @param {number} [options.corridorReachFactor]
78
+ * @param {number} [options.maxRefineRounds]
79
+ * @param {boolean} [options.detectPortals] (default true) toggles the portal discovery + densification stages
80
+ * @param {number} [options.constrictionFactor]
81
+ * @param {number} [options.portalFloorRatio]
74
82
  * @returns {AcousticProbeField}
75
83
  */
76
- export function bakeProbeField(index, minSpacing, rayCount, random, options = {}) {
84
+ export function bakeProbeField({
85
+ index,
86
+ minSpacing,
87
+ rayCount,
88
+ random,
89
+ sdfSparsenessRatio,
90
+ sdfOversample,
91
+ sdfResolutionLimit,
92
+ maxRefineFactor,
93
+ corridorReachFactor,
94
+ maxRefineRounds = DEFAULT_MAX_REFINE_ROUNDS,
95
+ detectPortals = true,
96
+ constrictionFactor,
97
+ portalFloorRatio,
98
+ }) {
77
99
  // Derive the bake region from the scene: the occluder hull + a spacing-scaled margin. No occluders →
78
100
  // nothing to cover → an empty field.
79
101
  if (index.computeWorldBounds(HULL) === 0) {
@@ -87,16 +109,26 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
87
109
 
88
110
  // The SDF grid is the expensive part (up to 256³ signedDistanceAt queries); build it once and reuse it for
89
111
  // both the provisional and the final cover.
90
- const grid = build_sdf_grid(index, bounds, minSpacing, options.sparsenessRatio);
112
+ const grid = build_sdf_grid({
113
+ index,
114
+ bounds,
115
+ minSpacing,
116
+ sparsenessRatio: sdfSparsenessRatio,
117
+ oversample: sdfOversample,
118
+ resolutionLimit: sdfResolutionLimit,
119
+ });
91
120
 
92
121
  // 1. Portal discovery — a provisional cover + visibility resolves the openings (a doorway is sub-voxel, so
93
122
  // it is found from the graph's BVH visibility rays, not the grid), then detect each opening's throat.
94
123
  const provisional = new AcousticProbeField();
95
124
  placeProbes(provisional, probe_place_sdf_cover(grid));
96
125
  bakeVisibility(provisional, index);
97
- const portals = options.detectPortals === false
126
+ const portals = !detectPortals
98
127
  ? NO_PORTALS
99
- : probe_detect_portals(provisional, index, minSpacing, options);
128
+ : probe_detect_portals(provisional, index, minSpacing, {
129
+ constrictionFactor,
130
+ portalFloorRatio,
131
+ });
100
132
 
101
133
  // 2. Final cover — re-place with the portal throats PRE-SEEDED so they carve the SDF (no redundant cover
102
134
  // probe lands on them) and lead the probe list (indices [0, portalCount)). Densify the visibility around
@@ -115,9 +147,11 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
115
147
 
116
148
  // 3. Connectivity refinement — thread bends/throats so a visible probe chain spans every acoustic path.
117
149
  // Inserted waypoints append AFTER the cover, so the portals stay at [0, portalCount).
118
- const maxRounds = options.maxRefineRounds ?? DEFAULT_MAX_REFINE_ROUNDS;
119
- for (let round = 0; round < maxRounds; round++) {
120
- const waypoints = probe_refine_connectivity(index, field, minSpacing, options);
150
+ for (let round = 0; round < maxRefineRounds; round++) {
151
+ const waypoints = probe_refine_connectivity(index, field, minSpacing, {
152
+ maxRefineFactor,
153
+ corridorReachFactor,
154
+ });
121
155
  if (waypoints.length === 0) {
122
156
  break;
123
157
  }
@@ -152,14 +186,25 @@ export function bakeProbeField(index, minSpacing, rayCount, random, options = {}
152
186
  return field;
153
187
  }
154
188
 
155
- /** Append a flat `[x,y,z, …]` list of positions to the field as probes. */
189
+ /**
190
+ * Append a flat `[x,y,z, …]` list of positions to the field as probes.
191
+ *
192
+ * @param {AcousticProbeField} field
193
+ * @param {ArrayLike<number>} positions
194
+ * @returns {void}
195
+ */
156
196
  function placeProbes(field, positions) {
157
197
  for (let i = 0; i < positions.length; i += 3) {
158
198
  field.setProbePosition(field.size, positions[i], positions[i + 1], positions[i + 2]);
159
199
  }
160
200
  }
161
201
 
162
- /** The index range `[0, count)` — the indices of the pre-seeded portal probes (placed first). */
202
+ /**
203
+ * The index range `[0, count)` — the indices of the pre-seeded portal probes (placed first).
204
+ *
205
+ * @param {number} count
206
+ * @returns {Uint32Array}
207
+ */
163
208
  function indexRange(count) {
164
209
  const out = new Uint32Array(count);
165
210
  for (let i = 0; i < count; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"bakeProbeReflectors.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeReflectors.js"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;GAaG;AACH,qEARW,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,YACN,MAAM,YACN,YAAY,GACV,MAAM,CA+DlB;AA9FD,0BAAoB"}
1
+ {"version":3,"file":"bakeProbeReflectors.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/bakeProbeReflectors.js"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;GAaG;AACH,qEARW,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,YACN,MAAM,YACN,YAAY,GACV,MAAM,CAsDlB;AAnFD,0BAAoB"}
@@ -1,5 +1,12 @@
1
1
  import { Ray3 } from "../../../../core/geom/3d/ray/Ray3.js";
2
2
  import { sphere_fibonacci_point } from "../../../../core/geom/3d/sphere/sphere_fibonacci_point.js";
3
+ import { v3_add } from "../../../../core/geom/vec3/v3_add.js";
4
+ import { v3_add_array } from "../../../../core/geom/vec3/v3_add_array.js";
5
+ import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
6
+ import { v3_length } from "../../../../core/geom/vec3/v3_length.js";
7
+ import { v3_normalize_array } from "../../../../core/geom/vec3/v3_normalize_array.js";
8
+ import { v3_scale_array } from "../../../../core/geom/vec3/v3_scale_array.js";
9
+ import { v3_set } from "../../../../core/geom/vec3/v3_set.js";
3
10
  import { RayHit } from "../core/RayHit.js";
4
11
  import { LOBE_STRIDE } from "./acoustic_probe_transfer.js";
5
12
 
@@ -24,9 +31,7 @@ const RAY = new Ray3();
24
31
  const HIT = new RayHit();
25
32
  const FIB = [0, 0, 0];
26
33
  // per-cluster accumulators (summed normal, summed per-band ρ, sample count)
27
- const C_NX = new Float32Array(MAX_LOBES);
28
- const C_NY = new Float32Array(MAX_LOBES);
29
- const C_NZ = new Float32Array(MAX_LOBES);
34
+ const C_NORMAL = new Float32Array(MAX_LOBES * 3);
30
35
  const C_RHO = new Float32Array(MAX_LOBES * 3);
31
36
  const C_COUNT = new Float32Array(MAX_LOBES);
32
37
 
@@ -59,15 +64,14 @@ export function bakeProbeReflectors(index, x, y, z, radius, rayCount, outLobes)
59
64
  }
60
65
 
61
66
  const nx = HIT.normal[0], ny = HIT.normal[1], nz = HIT.normal[2];
62
- const a = HIT.material.absorption;
63
- const r0 = 1 - a[0], r1 = 1 - a[1], r2 = 1 - a[2]; // per-band reflectivity
64
67
 
65
68
  // assign to the first cluster whose mean normal agrees within CLUSTER_COS, else open a new one
66
69
  let c = -1;
67
70
  for (let k = 0; k < nClusters; k++) {
68
- const sx = C_NX[k], sy = C_NY[k], sz = C_NZ[k];
69
- const slen = Math.sqrt(sx * sx + sy * sy + sz * sz);
70
- if (slen > 0 && (nx * sx + ny * sy + nz * sz) / slen > CLUSTER_COS) {
71
+ const k3 = k * 3;
72
+ const sx = C_NORMAL[k3], sy = C_NORMAL[k3 + 1], sz = C_NORMAL[k3 + 2];
73
+ const slen = v3_length(sx, sy, sz);
74
+ if (slen > 0 && v3_dot(nx, ny, nz, sx, sy, sz) / slen > CLUSTER_COS) {
71
75
  c = k;
72
76
  break;
73
77
  }
@@ -77,31 +81,23 @@ export function bakeProbeReflectors(index, x, y, z, radius, rayCount, outLobes)
77
81
  continue; // cluster budget exhausted — drop the extra reflector
78
82
  }
79
83
  c = nClusters++;
80
- C_NX[c] = 0; C_NY[c] = 0; C_NZ[c] = 0;
81
- C_RHO[c * 3] = 0; C_RHO[c * 3 + 1] = 0; C_RHO[c * 3 + 2] = 0;
84
+ v3_set(C_NORMAL, c * 3, 0, 0, 0);
85
+ v3_set(C_RHO, c * 3, 0, 0, 0);
82
86
  C_COUNT[c] = 0;
83
87
  }
84
88
 
85
- C_NX[c] += nx; C_NY[c] += ny; C_NZ[c] += nz;
86
- C_RHO[c * 3] += r0; C_RHO[c * 3 + 1] += r1; C_RHO[c * 3 + 2] += r2;
89
+ const a = HIT.material.absorption;
90
+ v3_add_array(C_NORMAL, c * 3, HIT.normal, 0);
91
+ v3_add(C_RHO, c * 3, 1 - a[0], 1 - a[1], 1 - a[2]); // per-band reflectivity
87
92
  C_COUNT[c]++;
88
93
  }
89
94
 
90
95
  // finalize each cluster into a lobe: unit mean normal + mean reflectivity
91
96
  for (let k = 0; k < nClusters; k++) {
92
- const cnt = C_COUNT[k];
93
- const sx = C_NX[k], sy = C_NY[k], sz = C_NZ[k];
94
- const slen = Math.sqrt(sx * sx + sy * sy + sz * sz);
95
- const inv = slen > 0 ? 1 / slen : 0;
96
-
97
97
  const b = k * LOBE_STRIDE;
98
- outLobes[b] = sx * inv;
99
- outLobes[b + 1] = sy * inv;
100
- outLobes[b + 2] = sz * inv;
98
+ v3_normalize_array(outLobes, b, C_NORMAL, k * 3);
101
99
  outLobes[b + 3] = LOBE_LAMBDA;
102
- outLobes[b + 4] = C_RHO[k * 3] / cnt;
103
- outLobes[b + 5] = C_RHO[k * 3 + 1] / cnt;
104
- outLobes[b + 6] = C_RHO[k * 3 + 2] / cnt;
100
+ v3_scale_array(outLobes, b + 4, C_RHO, k * 3, 1 / C_COUNT[k]);
105
101
  }
106
102
 
107
103
  return nClusters;
@@ -15,20 +15,48 @@
15
15
  */
16
16
  /**
17
17
  * Build a signed distance field on a voxel grid over `bounds` by sampling
18
- * {@link AcousticOccluderIndex#signedDistanceAt}. The grid is finer than `minSpacing` (by {@link OVERSAMPLE})
19
- * so it resolves sub-spacing features, and capped at {@link RESOLUTION_LIMIT}³.
18
+ * {@link AcousticOccluderIndex#signedDistanceAt}. The grid is finer than `minSpacing` (by `oversample`,
19
+ * default {@link DEFAULT_OVERSAMPLE}) so it resolves sub-spacing features, and capped at `resolutionLimit`³
20
+ * (default {@link DEFAULT_RESOLUTION_LIMIT}³).
20
21
  *
21
- * @param {AcousticOccluderIndex} index the acoustic scene
22
- * @param {number[]} bounds `[x0,y0,z0,x1,y1,z1]`
23
- * @param {number} minSpacing the probe spacing hint
24
- * @param {number} [sparsenessRatio]
22
+ * @param {Object} options
23
+ * @param {AcousticOccluderIndex} options.index the acoustic scene
24
+ * @param {number[]} options.bounds `[x0,y0,z0,x1,y1,z1]`
25
+ * @param {number} options.minSpacing the probe spacing hint
26
+ * @param {number} [options.sparsenessRatio]
27
+ * @param {number} [options.oversample]
28
+ * @param {number} [options.resolutionLimit]
25
29
  * @returns {SdfGrid}
26
30
  */
27
- export function build_sdf_grid(index: AcousticOccluderIndex, bounds: number[], minSpacing: number, sparsenessRatio?: number): SdfGrid;
28
- /** World position of the (fractional) voxel coordinate `(fx,fy,fz)`, written into `out`. */
29
- export function grid_voxel_to_world(grid: any, out: any, fx: any, fy: any, fz: any): void;
30
- /** SDF at a WORLD position via trilinear interpolation of the grid (edge-clamped). */
31
- export function grid_sample_world(grid: any, x: any, y: any, z: any): number;
31
+ export function build_sdf_grid({ index, bounds, minSpacing, sparsenessRatio, oversample, resolutionLimit, }: {
32
+ index: AcousticOccluderIndex;
33
+ bounds: number[];
34
+ minSpacing: number;
35
+ sparsenessRatio?: number;
36
+ oversample?: number;
37
+ resolutionLimit?: number;
38
+ }): SdfGrid;
39
+ /**
40
+ * World position of the (fractional) voxel coordinate `(fx,fy,fz)`, written into `out`.
41
+ *
42
+ * @param {SdfGrid} grid
43
+ * @param {number[]|Float32Array} out `[x,y,z]` written here
44
+ * @param {number} fx
45
+ * @param {number} fy
46
+ * @param {number} fz
47
+ * @returns {void}
48
+ */
49
+ export function grid_voxel_to_world(grid: SdfGrid, out: number[] | Float32Array, fx: number, fy: number, fz: number): void;
50
+ /**
51
+ * SDF at a WORLD position via trilinear interpolation of the grid (edge-clamped).
52
+ *
53
+ * @param {SdfGrid} grid
54
+ * @param {number} x
55
+ * @param {number} y
56
+ * @param {number} z
57
+ * @returns {number}
58
+ */
59
+ export function grid_sample_world(grid: SdfGrid, x: number, y: number, z: number): number;
32
60
  /**
33
61
  * Trilinear sample of the SDF grid at fractional voxel coordinates (edge-clamped).
34
62
  *
@@ -36,22 +64,40 @@ export function grid_sample_world(grid: any, x: any, y: any, z: any): number;
36
64
  * {@link scs3d_sample_linear} samples — so the interpolation is delegated rather than re-derived here.
37
65
  * (Same clamp semantics: clamping the COORDINATE into `[0, res-1]` and clamping the two sample INDICES
38
66
  * agree on every input, including out-of-range coordinates, where both collapse to the edge voxel.)
67
+ *
68
+ * @param {SdfGrid} grid
69
+ * @param {number} x
70
+ * @param {number} y
71
+ * @param {number} z
72
+ * @returns {number}
39
73
  */
40
- export function grid_sample_trilinear(grid: any, x: any, y: any, z: any): number;
74
+ export function grid_sample_trilinear(grid: SdfGrid, x: number, y: number, z: number): number;
41
75
  /**
42
76
  * Gradient-ascend a voxel to the local SDF maximum (the most-open sub-voxel point), written into `out` as a
43
77
  * fractional voxel coordinate clamped to within ½ voxel of the start. Central-difference gradient on the
44
78
  * trilinearly-sampled SDF; the gradient is not normalised, so steps shrink near the maximum.
79
+ *
80
+ * @param {number[]|Float32Array} out `[fx,fy,fz]` written here
81
+ * @param {SdfGrid} grid
82
+ * @param {number} vx
83
+ * @param {number} vy
84
+ * @param {number} vz
85
+ * @returns {void}
45
86
  */
46
- export function grid_local_maximum(out: any, grid: any, vx: any, vy: any, vz: any): void;
87
+ export function grid_local_maximum(out: number[] | Float32Array, grid: SdfGrid, vx: number, vy: number, vz: number): void;
47
88
  /**
48
89
  * Mark every voxel whose centre is within `radius` of the world point `(px,py,pz)` as claimed. O((radius/voxel)³)
49
90
  * per call. A degenerate axis (`vs===0`, a zero-extent bake region) claims all its coincident layers.
91
+ *
92
+ * @param {Uint8Array} claimed per-voxel claimed flags (`total` elements)
93
+ * @param {SdfGrid} grid
94
+ * @param {number} px
95
+ * @param {number} py
96
+ * @param {number} pz
97
+ * @param {number} radius
98
+ * @returns {void}
50
99
  */
51
- export function grid_claim_sphere(claimed: any, grid: any, px: any, py: any, pz: any, radius: any): void;
52
- export const OVERSAMPLE: 2;
53
- export const RESOLUTION_LIMIT: 256;
54
- export const DEFAULT_SPARSENESS_RATIO: 4;
100
+ export function grid_claim_sphere(claimed: Uint8Array, grid: SdfGrid, px: number, py: number, pz: number, radius: number): void;
55
101
  /**
56
102
  * A signed distance field sampled on a regular voxel grid over a bake region. Shared by the placement cover
57
103
  * ({@link probe_place_sdf_cover }) and portal detection ({@link probe_detect_portals }) so the expensive
@@ -1 +1 @@
1
- {"version":3,"file":"probe_sdf_grid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/probe_sdf_grid.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;GAUG;AACH,qEALW,MAAM,EAAE,cACR,MAAM,oBACN,MAAM,GACJ,OAAO,CA8CnB;AAED,4FAA4F;AAC5F,0FAIC;AAED,sFAAsF;AACtF,6EAKC;AAED;;;;;;;GAOG;AACH,iFAEC;AAED;;;;GAIG;AACH,yFAqBC;AAED;;;GAGG;AACH,yGAuBC;AArKD,2BAA4B;AAE5B,mCAAoC;AAGpC,yCAA0C;;;;;;;;;;SAW5B,YAAY;QACZ,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;;;;aAClD,MAAM;;;;WAA6B,MAAM;QACzC,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;QAClD,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;SAClD,MAAM;SAAiB,MAAM;;;;SAAiB,MAAM;gBACpD,MAAM;;;;gBAAwB,MAAM;;;;oBACpC,MAAM"}
1
+ {"version":3,"file":"probe_sdf_grid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/simulation/probe/probe_sdf_grid.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAR0C,KAAK;IAClB,MAAM,EAAxB,MAAM,EAAE;IACQ,UAAU,EAA1B,MAAM;IACW,eAAe,GAAhC,MAAM;IACW,UAAU,GAA3B,MAAM;IACW,eAAe,GAAhC,MAAM;IACJ,OAAO,CAsDnB;AAED;;;;;;;;;GASG;AACH,0CAPW,OAAO,OACP,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAMhB;AAED;;;;;;;;GAQG;AACH,wCANW,OAAO,KACP,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAOlB;AAED;;;;;;;;;;;;;GAaG;AACH,4CANW,OAAO,KACP,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;GAWG;AACH,wCAPW,MAAM,EAAE,GAAC,YAAY,QACrB,OAAO,MACP,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAuBhB;AAED;;;;;;;;;;;GAWG;AACH,2CARW,UAAU,QACV,OAAO,MACP,MAAM,MACN,MAAM,MACN,MAAM,UACN,MAAM,GACJ,IAAI,CAyBhB;;;;;;;;;;SAvMa,YAAY;QACZ,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;;;;aAClD,MAAM;;;;WAA6B,MAAM;QACzC,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;QAClD,MAAM;QAAgB,MAAM;;;;QAAgB,MAAM;SAClD,MAAM;SAAiB,MAAM;;;;SAAiB,MAAM;gBACpD,MAAM;;;;gBAAwB,MAAM;;;;oBACpC,MAAM"}