@woosh/meep-engine 3.60.4 → 3.60.5

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 (379) hide show
  1. package/CHANGELOG.md +2602 -0
  2. package/CONTRIBUTING.md +7 -0
  3. package/MIGRATION_2_TO_3.md +136 -0
  4. package/SECURITY.md +4 -0
  5. package/editor/EditorCameraNavigation.d.ts +2 -1
  6. package/editor/EditorCameraNavigation.d.ts.map +1 -1
  7. package/editor/EditorCameraNavigation.js +51 -57
  8. package/package.json +6 -2
  9. package/src/engine/EngineHarness.d.ts +3 -9
  10. package/src/engine/EngineHarness.d.ts.map +1 -1
  11. package/src/engine/EngineHarness.js +6 -8
  12. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
  13. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
  14. package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
  15. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
  16. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
  17. package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
  18. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
  19. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
  20. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
  21. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
  22. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  23. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
  24. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
  25. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
  27. package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
  28. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  29. package/src/engine/graphics/ecs/water/Water.js +8 -0
  30. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  31. package/src/engine/graphics3/WaterSystem.js +731 -734
  32. package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
  33. package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
  34. package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
  35. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
  38. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
  39. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
  40. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
  41. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
  42. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
  43. package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
  44. package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
  45. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  46. package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
  47. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
  48. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
  49. package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
  50. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
  51. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
  52. package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
  53. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
  54. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
  55. package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
  56. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
  57. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
  58. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
  59. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  60. package/src/shade/playground/water_refraction/README.md +5 -6
  61. package/src/shade/playground/water_refraction/index.html +1 -1
  62. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  63. package/src/shade/renderer/Renderer.js +7 -5
  64. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
  65. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  66. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
  67. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  68. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  69. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  70. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  71. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  72. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +2 -2
  73. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +2 -2
  74. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
  75. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  76. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
  77. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
  78. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
  79. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
  80. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
  81. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
  82. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
  83. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
  85. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  86. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
  87. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
  88. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  89. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
  90. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
  91. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  92. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
  93. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
  94. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
  96. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
  98. package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
  99. package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
  100. package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
  101. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
  102. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
  103. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
  104. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
  105. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
  106. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
  107. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
  108. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  109. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
  110. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
  111. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
  112. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
  113. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
  114. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
  115. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
  116. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
  117. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
  118. package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
  119. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
  120. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  121. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
  122. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
  123. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
  124. package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
  125. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  126. package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
  127. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  128. package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
  129. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
  130. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  131. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
  132. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  133. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
  134. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
  135. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  136. package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
  137. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
  138. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
  139. package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
  140. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  141. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  142. package/src/shade/renderer/water/shader_water.js +22 -13
  143. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  144. package/src/shade/renderer/water/shader_water_avboit.js +7 -7
  145. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
  146. package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
  147. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
  148. package/editor/REWORK_PLAN_2026_08.md +0 -692
  149. package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
  150. package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
  151. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
  152. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
  153. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
  154. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
  155. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
  156. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
  157. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
  158. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
  159. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
  160. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
  161. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
  162. package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
  163. package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
  164. package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
  165. package/src/REVIEW_2026_08_06/adv-core.md +0 -511
  166. package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
  167. package/src/REVIEW_2026_08_06/adv-view.md +0 -446
  168. package/src/REVIEW_2026_08_06/api-core.md +0 -296
  169. package/src/REVIEW_2026_08_06/api-engine.md +0 -195
  170. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
  171. package/src/REVIEW_2026_08_06/core-binary.md +0 -348
  172. package/src/REVIEW_2026_08_06/core-collection.md +0 -376
  173. package/src/REVIEW_2026_08_06/core-math.md +0 -221
  174. package/src/REVIEW_2026_08_06/core-process.md +0 -266
  175. package/src/REVIEW_2026_08_06/core-science.md +0 -223
  176. package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
  177. package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
  178. package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
  179. package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
  180. package/src/REVIEW_2026_08_06/engine-input.md +0 -197
  181. package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
  182. package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
  183. package/src/REVIEW_2026_08_06/generation.md +0 -176
  184. package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
  185. package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
  186. package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
  187. package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
  188. package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
  189. package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
  190. package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
  191. package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
  192. package/src/REVIEW_2026_08_06/view.md +0 -667
  193. package/src/REVIEW_2026_08_06.md +0 -610
  194. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
  195. package/src/core/bvh2/bvh3/NOTES.md +0 -2
  196. package/src/core/bvh8/NOTES.md +0 -63
  197. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
  198. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
  199. package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
  200. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
  201. package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
  202. package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
  203. package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
  204. package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
  205. package/src/core/geom/3d/gjk/NOTES.md +0 -8
  206. package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
  207. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
  208. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
  209. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
  210. package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
  211. package/src/engine/REVIEW_2026_07_03.md +0 -211
  212. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
  213. package/src/engine/control/first-person/DESIGN.md +0 -658
  214. package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
  215. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
  216. package/src/engine/control/first-person/TODO.md +0 -160
  217. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
  218. package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
  219. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
  220. package/src/engine/ecs/ik/PLAN.md +0 -179
  221. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
  222. package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
  223. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
  224. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
  225. package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
  226. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
  227. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
  228. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
  229. package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
  230. package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
  231. package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
  232. package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
  233. package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
  234. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
  235. package/src/engine/network/CONGESTION_CONTROL.md +0 -87
  236. package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
  237. package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
  238. package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
  239. package/src/engine/physics/cloth/PLAN.md +0 -3056
  240. package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
  241. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
  242. package/src/engine/physics/fluid/solver/NOTES.md +0 -46
  243. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
  244. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
  245. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
  246. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
  247. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
  248. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
  249. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
  250. package/src/format/image/avif/DECISIONS.md +0 -545
  251. package/src/format/image/jpeg/NOTES.md +0 -3
  252. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
  253. package/src/generation/COORDINATES.md +0 -54
  254. package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
  255. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
  256. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
  257. package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
  258. package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
  259. package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
  260. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
  261. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
  262. package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
  263. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
  264. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
  265. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
  266. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
  267. package/src/shade/RENDERER_CONTRACT.md +0 -697
  268. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
  269. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
  270. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
  271. package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
  272. package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
  273. package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
  274. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
  275. package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
  276. package/src/shade/renderer/NOTES.md +0 -78
  277. package/src/shade/renderer/PLAN.md +0 -8
  278. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
  279. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
  280. package/src/shade/renderer/atmosphere/NOTES.md +0 -6
  281. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
  282. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
  283. package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
  284. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
  285. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
  286. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
  287. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
  288. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
  289. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
  290. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
  291. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
  292. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
  293. package/src/shade/renderer/camera/orbital/README.md +0 -81
  294. package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
  295. package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
  296. package/src/shade/renderer/camera/orbital/index.js +0 -9
  297. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
  298. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
  299. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
  300. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
  301. package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
  302. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
  303. package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
  304. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
  305. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
  306. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
  307. package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
  308. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
  309. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
  310. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
  311. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
  312. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
  313. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
  314. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
  315. package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
  316. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
  317. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
  318. package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
  319. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
  320. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
  321. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
  322. package/src/shade/renderer/hiz/NOTES.md +0 -3
  323. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
  324. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
  325. package/src/shade/renderer/light/cluster/NOTES.md +0 -11
  326. package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
  327. package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
  328. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
  329. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
  330. package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
  331. package/src/shade/renderer/particles/DESIGN.md +0 -1011
  332. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
  333. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
  334. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
  335. package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
  336. package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
  337. package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
  338. package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
  339. package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
  340. package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
  341. package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
  342. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
  343. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
  344. package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
  345. package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
  346. package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
  347. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
  348. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
  349. package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
  350. package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
  351. package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
  352. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
  353. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
  354. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
  355. package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
  356. package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
  357. package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
  358. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
  359. package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
  360. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
  361. package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
  362. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
  363. package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
  364. package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
  365. package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
  366. package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
  367. package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
  368. package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
  369. package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
  370. package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
  371. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
  372. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
  373. package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
  374. package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
  375. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
  376. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
  377. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
  378. package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
  379. package/src/shade/wgsl/NOTES.md +0 -4
@@ -1,243 +0,0 @@
1
- # Fluid review 02 — quality-gated solver upgrades
2
-
3
- Working doc for the staged execution of the 2026-06-12 fluid review. Each stage
4
- must leave `quality.spec.js` green; when a stage improves a metric its baseline
5
- is tightened in the same change. Constraints: single-core JS, real-time ECS,
6
- public API of effectors + `FluidField` frozen (state shape may change).
7
-
8
- ## Quality gate baselines (quality.spec.js)
9
-
10
- | metric | stage 0 (baseline) | stage 2 | stage 3+4 | **stage 5 (MAC)** | notes |
11
- |---|---|---|---|---|---|
12
- | projection linear residual, SOR | 1.21 | 0.67 | 0.67 | 0.92 | 8 sweeps @ 16³; RHS grew 14.5→17.8 with face differencing |
13
- | projection linear residual, PCG | 3.34e-2 | 1.16e-2 | 1.16e-2 | 1.39e-2 | iteration/tolerance-capped |
14
- | cold post-div | 11.2 | 9.1 | 9.1 | **0.91 / 1.4e-2** | SOR / PCG. Now EQUALS the linear residual: D∘G ≡ L, the operator floor is gone |
15
- | warm post-div, SOR | 9.22 | 0.70 | 0.35 | **9.6e-3** | 1000× vs stage 0 |
16
- | warm post-div, PCG | 1.84 | 0.70 | 0.35 | **3.1e-5** | |
17
- | vortex KE retention (60 steps) | 0.498 | 0.495 | 0.527 | 0.530 | sealed box, default SL+reflection |
18
- | vortex peak-ω retention | 0.606 | 0.624 | 0.725 | **0.736** | |
19
- | wall penetration (seed 8) | 5.72 | 6.96 | 6.65 | **0 (exact)** | MAC pins wall-face normal velocity outright |
20
- | scalar mass retention | 0.231 | 0.849 | 0.837 | 0.818 | residual loss = gather SL + traces through the shell |
21
- | diffusion wall leak | 16.9 | 0 | 0 | 0 | stage-1 fix holds |
22
- | sealed-box gravity max\|vy\| | 1.24 | 1.24 | 0.97 | **0.070** | near-exact hydrostatic balance |
23
- | checkerboard residual (10 steps) | 0.593 | 0.627 | 0.587 | **0.058** | pure compressive mode; collocated was blind to it |
24
- | damped gravity terminal \|v\| | — | 4.92 = analytic | 4.92 | 4.92 | bounded forcing (was unbounded growth) |
25
- | atmosphere terminal velocity | — | 8.00/8 | 8.00/8 | (8.00, −5.00) = analytic | GlobalFluidEffector wind+force+drag holds `wind + force/drag` exactly |
26
- | step() 32×8×32 / 32³ / 64³ (ms) | 1.16 / 4.38 / 54.0 | 1.44 / 5.11 / — | 1.25 / 3.91 / 42.7 | 2.56 / 7.39 / 68.5 | MAC ≈ 2× collocated: 3 lattices + cross-component carriers; levers listed under follow-ups |
27
-
28
- Perf reference (review probe, this machine): step() 32×8×32 = 1.16 ms,
29
- 32³ = 4.4 ms, 64³ = 54 ms. Division→reciprocal-table in SOR measured 14%
30
- SLOWER in V8 — do not do it.
31
-
32
- ## Stages
33
-
34
- - [x] **Stage 0 — quality gate.** `quality.spec.js`: 8 deterministic scenarios,
35
- baselines baked, runs by default (no timing). Deep sweeps stay in
36
- `bench.spec.js`.
37
- - [x] **Stage 1 — bug fixes.** (183 fluid tests green; quality gate unchanged
38
- except the leak metric dropping to exactly 0.)
39
- - Wake effector: trail advance moves out of `apply()` for transform-managed
40
- effectors (multi-field contract).
41
- - Diffusion: no-flux at solid neighbours (walls stop acting as
42
- sources/sinks); neighbour mask recomputed once at top of `step()`.
43
- - `FluidField.shift`: migrate the solid mask (zero-fill exposed cells)
44
- instead of clearing it — removes the one-tick wall-less window after every
45
- re-anchor shift.
46
- - PCG: relative-tolerance early exit (cap unchanged).
47
- - [x] **Stage 2 — boundary semantics + forcing stability.** (195 fluid tests
48
- green. New `FluidField.pressure_diag` derived buffer carries the per-cell
49
- Laplacian diagonal; mask kernel bakes both in one pass.)
50
- - Domain edges are OPEN (ghost p = 0): out-of-bounds faces count in the
51
- Laplacian diagonal and read zero pressure; solid faces stay reflecting
52
- (Neumann). Sealed boxes are built explicitly with solid cells (see
53
- `seal_box` in quality.spec.js).
54
- - PCG null-space mean-subtraction made conditional — only for fully sealed
55
- fields (open systems are non-singular; subtracting the mean there would
56
- solve a different RHS). Disconnected sealed pockets remain a documented
57
- limitation.
58
- - `velocity_damping` knob on the simulator (exponential, default 0) — the
59
- solver's only energy sink under sustained forcing; gives constant forces
60
- a terminal velocity.
61
- - New ambient-wind drive — relaxes toward a target wind velocity instead of
62
- integrating constant acceleration (no unbounded accumulation; frame-rate
63
- independent). Shipped first as a separate `AmbientWindFluidEffector`,
64
- later UNIFIED into `GlobalFluidEffector` as the `wind` + `drag` fields of
65
- the atmosphere model `dv/dt = force + drag·(wind − v)` (exact-ODE
66
- integrator, terminal velocity `wind + force/drag`) — one global effector
67
- instead of two competing ones.
68
- - [x] **Stage 3 — transport quality.** (213 tests green.)
69
- - Fused 3-channel trilinear sampler (`scs3d_sample_linear3`); generalized
70
- SL velocity kernel with separate carrier; MacCormack velocity + scalar
71
- kernels with Selle's monotone limiter; `AdvectionScheme` enum;
72
- `advection_reflection` step structure (Zehnder 2018, half-step form).
73
- - **Measured scheme matrix** (sealed vortex, ke / peak-ω retention @ 1 s;
74
- step ms @ 32×8×32):
75
- | combo | ke | ω | ms | 10 s stability |
76
- |---|---|---|---|---|
77
- | SL (Stam baseline) | 0.495 | 0.624 | 0.92 | stable |
78
- | **SL + reflection (DEFAULT)** | 0.527 | 0.725 | 1.10 | stable (peak 0.99) |
79
- | MacCormack | 0.773 | 0.640 | 1.35 | **unstable** (peak 1.91) |
80
- | MacCormack + reflection | 1.016 | 1.081 | 2.49 | **unstable** (peak 3.44) |
81
- - **Key negative finding:** on the collocated grid, MacCormack's
82
- anti-diffusive corrector amplifies the projection's operator-floor
83
- residue — transient energy growth ×1.9–3.4 within 10 s, and passive
84
- scalar total mass inflates ×1.8 in one second. Damping 0.2 does not tame
85
- it. The kernels are correct in isolation (specs); the INTERACTION with
86
- the collocated pressure floor is the problem. **MacCormack is therefore
87
- default-off and gated on MAC staggering** — this is the strongest
88
- argument yet for stage 5.
89
- - Defaults: `advection_scheme = SEMI_LAGRANGIAN`,
90
- `advection_reflection = true`. Reflection alone is a clean win: stable,
91
- +20% step cost, warm steady-state divergence halves again (0.71 → 0.35),
92
- sealed-gravity settles better (1.24 → 0.97).
93
- - [x] **Stage 4 — perf polish (bench-gated).** (219 tests green; quality gate
94
- bit-identical.)
95
- - SOR interior fast path (`mask === 63` → branch-free constant-diagonal
96
- body, no diag read): measured **37% faster** per solve at 64³, noise-level
97
- at 32×8×32, bit-identical results. Adopted.
98
- - Rejected by measurement (stage-0 probe): division → reciprocal-table in
99
- the SOR update was 14% SLOWER in V8. Recorded so nobody retries it.
100
- - `vorticity_confinement` knob (Fedkiw 2001), default off — two O(N) passes
101
- on existing scratch when enabled; pairs with `velocity_damping`.
102
- - Final step() medians (this machine): 32×8×32 = 1.25 ms, 32³ = 3.91 ms,
103
- 64³ = 42.7 ms — at 32³ and up faster than the stage-0 baseline despite
104
- reflection being on.
105
- - [x] **Stage 5 — MAC staggering migration (user-approved).** 223 tests green.
106
- - Layout: `velocity_x/y/z` are face lattices ((rx+1)·ry·rz etc.); new derived
107
- `face_solid_x/y/z` pin masks (either adjacent cell solid → face velocity is
108
- a boundary condition). `setVelocityAt`/`addVelocityAt` write both faces per
109
- axis; `sampleVelocity` interpolates per staggered lattice. Public
110
- signatures unchanged.
111
- - Kernels: new `v3_mac_*` divergence / gradient / SL + MacCormack advection
112
- (velocity + scalar) / face-solid / vorticity confinement. The pressure
113
- solvers and the mask/diag builder needed ZERO changes — stage 2's
114
- open-boundary diagonal already was the MAC system. The legacy `v3_grid_*`
115
- collocated kernels remain as standalone utilities with their specs.
116
- - Exactness confirmed by the gate: cold post-divergence == linear residual
117
- (D∘G ≡ L); wall-face penetration exactly 0; hydrostatic balance to 0.07;
118
- the compressive checkerboard is annihilated (0.59 → 0.058).
119
- - Scheme matrix on MAC: MC velocity is now long-horizon STABLE (10 s peak
120
- 0.96 vs collocated 1.9×), but (a) MC+reflection still pumps (3.6×) and
121
- (b) MC SCALAR transport still inflates mass ~1.7× — back-traces sample
122
- through solid walls and the corrector amplifies the bleed. Defaults stay
123
- SL + reflection; MacCormack documented opt-in.
124
- - Perf: 2.56 / 7.39 / 68.5 ms at 32×8×32 / 32³ / 64³ (~2× collocated). The
125
- SL kernel's cross-component carrier reconstruction was optimized from
126
- general trilinear to the exact fixed 4-tap MAC average (−31..39% step),
127
- pinned by a trilinear-reference equivalence spec.
128
-
129
- ## Phase A (post-MAC) — solid-aware traces + MacCormack default. DONE.
130
-
131
- - Back-traces (and MacCormack probes) are CLIPPED against solid cells
132
- (`v3_mac_clip_trace`, bisection); scalar samples are solid-MASKED with
133
- weight renormalization (`v3_grid_sample_scalar_masked`). Kills momentum
134
- tunnelling through thin walls (spec-pinned) and wall dye bleed.
135
- - **Negative finding, gate-corrected:** MacCormack SCALAR mass inflation
136
- (1.71×) was NOT wall sampling — bit-identical before/after the fix. It is
137
- the corrector re-adding ~double the gather bias: intrinsic
138
- non-conservation. Scalars are therefore ALWAYS semi-Lagrangian
139
- (hard-coded; `advection_scheme` selects the VELOCITY scheme only).
140
- - MC + reflection re-probed WITH clipping: still pumps (10 s peak 3.7×) —
141
- intrinsic to the pairing, stays barred.
142
- - **Defaults: `advection_scheme = MACCORMACK` (velocity),
143
- `advection_reflection = false`.** Gate: vortex KE retention 0.53 → 0.80
144
- on the default path; sealed gravity 0.070 → 0.047; warm divergence
145
- settles at 2.96e-2 / 2.8e-4 (SOR/PCG — one mid-step projection fewer than
146
- SL+refl's 9.6e-3 / 3.1e-5; still ~300× below pre-MAC).
147
- - **Perf lesson (measured 8.6×!):** V8 refuses to inline loop-bearing
148
- callees — calling `v3_mac_clip_trace` per face made the SL kernel 8.6×
149
- slower. Hot kernels now inline the straight-line "end cell solid?" test
150
- and call the bisection helper only on wall hits (performance contract
151
- documented on the helper). Final step(): MC default 2.74 ms @ 32×8×32 /
152
- 10.4 ms @ 32³; SL+refl 1.97 / 7.35.
153
-
154
- ## Phase B — FluidObstacleSystem. DONE.
155
-
156
- - `FluidObstacle` component (inflation knob) + `FluidObstacleSystem`:
157
- voxelizes each (FluidObstacle, Collider, Transform64) entity's shape into
158
- every overlapping FluidComponent's solid mask per tick, via
159
- `PosedShape3D.signed_distance_at_point` (new posed point queries on
160
- PosedShape3D, spec'd). Rigid pose — Transform64.scale ignored, matching the
161
- physics collider convention. Cell solid iff sdf(centre) <= inflation;
162
- iteration clipped to the shape AABB.
163
- - Ownership contract: with >= 1 obstacle the system clears + rebuilds EVERY
164
- field's mask each tick (moving obstacles leave no stale walls); with none
165
- it touches nothing. Register BEFORE FluidSystem.
166
- - 8 system tests incl. rotation, inflation-for-thin-walls, origin offset,
167
- broad-phase, and a same-tick FluidSystem integration check.
168
-
169
- ## Phase C — moving-solid face velocity BCs. DONE.
170
-
171
- - **Pinned faces are the wall's normal-velocity BC**, not dead storage:
172
- - `v3_mac_compute_face_solid` takes the velocity arrays and zeroes a face
173
- only on the unpinned→pinned TRANSITION (static-wall default).
174
- Pinned→pinned recomputes preserve the stored BC; pinned→unpinned keeps
175
- the wall velocity behind as the uncovered fluid's wake seed. Spec'd
176
- (`v3_mac_compute_face_solid.spec.js`).
177
- - `v3_mac_compute_divergence` reads pinned faces at face value (the
178
- face_solid params are gone) — this is the entire transmission mechanism:
179
- a stamped wall face shows up as inflow/outflow in the adjacent fluid
180
- cell and the projection does the rest.
181
- - The pressure gradient, advection, damping and effectors all SKIP pinned
182
- faces, so a stamped BC survives the whole step bit-exactly (asserted in
183
- quality 8).
184
- - `FluidObstacleSystem` second pass: per obstacle, the wall velocity is
185
- **`RigidBody.linearVelocity`** (world m/s — the obstacle tuple is the full
186
- physics tuple FluidObstacle+Collider+RigidBody+Transform64); cells it
187
- voxelized get all six face slots stamped with the grid-units velocity.
188
- The system refreshes each field's masks BEFORE stamping so the transition
189
- zeroing is consumed there and the stamped values stick through the
190
- simulator's own per-step refresh.
191
- - **Velocity source rationale** (replaced the initial Transform64-delta
192
- finite difference in the same session): pose differencing turns teleports
193
- (spawn snaps, network corrections) into one-tick air detonations — the
194
- exact failure mode BodyKind.KinematicPosition was deferred over in the
195
- contact solver. Reading the body instead: air and contacts agree on wall
196
- speed, first tick stamps (no `_prev` warm-up), no system-private pose
197
- state to lose on snapshot restore, sleeping bodies stamp nothing (solver
198
- zeroes velocities on sleep), and `angularVelocity` sits ready for the
199
- ω×r follow-up. Pose-animated colliders read as stationary walls that
200
- teleport — for air just as for contacts; movers go through
201
- KinematicVelocity/Dynamic. Teleport spec pins the no-blast contract.
202
- - **Stop transition**: a wall that stops must stamp ONE more pass (zeros)
203
- over its faces — pinned values persist by design, so without it the
204
- divergence sees phantom inflow forever (`_was_moving` flag; obstacles
205
- that never move never pay). Piston spec covers move → push → stop.
206
- - Rotation-induced surface velocity (ω × r) is NOT modelled — a spinner
207
- reads as a translating wall only (documented on the system).
208
- - Ordering contract: PhysicsSystem → FluidObstacleSystem → FluidSystem.
209
- - Gate: scenario 8 (piston slab, faces stamped +4, 10 steps) — mean u ahead
210
- 2.08 baked, wake side 2.60 sign-checked; BC face value asserted == 4
211
- after 10 steps. Static scenarios all unchanged.
212
-
213
- ## Follow-ups (ordered by leverage)
214
-
215
- 1. **Obstacle voxelization change detection** — static scenes currently pay
216
- the full clear+rebuild every tick.
217
- 2. **MC + reflection** — only via the second-order advection-reflection
218
- formulation (Narain et al. 2019, implicit-midpoint form); the naive
219
- pairing re-injects corrector overshoots (3.7×, with or without clipping).
220
- 3. **bench.spec.js MAC refresh** — the `.skip` suites run, but the
221
- per-primitive sections still measure the legacy collocated kernels.
222
- 4. **ω × r surface velocity for rotating obstacles** — needs per-cell wall
223
- velocity instead of one translation vector per obstacle; same stamping
224
- machinery, finer-grained source.
225
-
226
- ## Review findings driving this (2026-06-12 session)
227
-
228
- 1. WakeFluidEffector mutates trail state in `apply()` → second field in the
229
- same step sees a zero segment (confirmed: A=240, B=0).
230
- 2. `v3_grid_apply_diffusion` gathers from solid neighbours → dye leak 16.9/100
231
- through a wall in one step (confirmed).
232
- 3. `FluidSystem` re-anchor shifts clear solids, then step runs immediately —
233
- one tick with no walls per cell crossing.
234
- 4. Closed Neumann edges + one-sided boundary divergence: uniform body force
235
- produces zero discrete divergence → projection never opposes it → velocity
236
- grows without bound (confirmed: −5/−10/−15 over 30/60/90 steps). No damping
237
- term exists anywhere.
238
- 5. Collocated grid: compact Laplacian ≠ div∘grad → checkerboard null mode
239
- (interior div exactly 0 for ±1 mode, confirmed) + operator floor (cold
240
- post-div 11.2 of 14.5 even with exact linear solve).
241
- 6. Advection backtrace samples through/inside solids.
242
- 7. PCG always runs the full SOR-scaled iteration budget (no tolerance exit);
243
- mean-subtraction assumes a single connected fluid component.
@@ -1,46 +0,0 @@
1
- # Two generations of kernel live in here
2
-
3
- `FluidField` and `FluidSimulator` run the **`v3_mac_*`** kernels — the staggered (MAC) grid — plus the
4
- grid-generic helpers `v3_grid_apply_diffusion`, `v3_grid_solve_pressure*`,
5
- `v3_grid_compute_solid_neighbour_mask`, `v3_grid_shift_in_place`, `v3_grid_sample_scalar_masked` and the
6
- two edge-patch helpers.
7
-
8
- The **collocated** `v3_grid_advect_*` family is the previous generation of the same algorithms, on a
9
- collocated grid instead of a staggered one. It is reachable only from itself and its own specs:
10
-
11
- - `v3_grid_advect_maccormack_velocity`
12
- - `v3_grid_advect_sl_velocity` (one importer, `v3_grid_apply_advection_forward`, itself unreferenced)
13
- - `v3_grid_advect_maccormack_scalar`
14
- - `v3_grid_apply_advection_forward`
15
- - `v3_grid_apply_scalar_advection`
16
- - `v3_grid_compute_divergence`
17
- - `v3_grid_subtract_pressure_gradient`
18
- - `v3_grid_apply_vorticity_confinement`
19
-
20
- 834 lines across the eight. `v3_mac_advect_maccormack_scalar` (in `v3_mac_advect_scalar.js`) is a ninth
21
- unreferenced kernel, on the live staggering: gather-MacCormack was **measured** non-conservative for
22
- scalars and rejected, which the `AdvectionScheme` docstring records.
23
-
24
- ## Why they are still here
25
-
26
- `@woosh/meep-engine` publishes raw `src`, so an unreferenced export is public surface rather than dead
27
- code. A consumer running a collocated solver — the shape most fluid tutorials and most ported code use —
28
- wants exactly these, and they are correct for that grid.
29
-
30
- ## What to know before using one
31
-
32
- **They are not interchangeable with the MAC kernels.** The staggering is the whole difference: a
33
- collocated kernel reads and writes velocity at cell centres, a MAC one at face centres. Feeding one
34
- family's field to the other gives a half-cell-shifted velocity everywhere, which looks like excessive
35
- diffusion rather than like a bug.
36
-
37
- **The collocated MacCormack limiter is not the MAC one.** It takes its extrema from the eight
38
- surrounding taps through `v3_grid_limit8_at_indices`, over raw samples. The live MAC scalar path clips
39
- the trace (`v3_mac_clip_trace`) and samples solid-masked, so the two disagree about wall handling: near
40
- a solid boundary the collocated limiter will admit a value from inside the wall as a legitimate extremum.
41
- If a collocated solver here is ever put on a path with solid boundaries that matter, that is the gap to
42
- close first.
43
-
44
- **Two of them have MAC twins whose docstrings describe them as the replacement** —
45
- `v3_mac_compute_divergence` and the MAC pressure-gradient subtraction each say they are "the face-exact
46
- counterpart of the collocated …". Read the MAC one first if you are trying to work out which is current.