@woosh/meep-engine 3.60.4 → 3.60.6

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 (419) hide show
  1. package/CHANGELOG.md +2621 -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 +11 -0
  63. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  64. package/src/shade/renderer/Renderer.js +50 -6
  65. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
  66. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  67. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
  68. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  69. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  70. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  71. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  72. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  73. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +28 -45
  74. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  75. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +111 -119
  76. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +22 -3
  77. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  78. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +84 -3
  79. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts +19 -0
  80. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.js +25 -0
  82. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
  83. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
  84. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
  85. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +15 -0
  86. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -1
  87. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +38 -0
  88. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
  89. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
  91. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
  92. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
  93. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +28 -59
  94. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -1
  95. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +84 -789
  96. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
  98. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +7 -6
  99. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +12 -11
  101. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -2
  102. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -2
  103. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
  104. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
  106. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
  107. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
  111. package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
  112. package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
  113. package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
  114. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
  115. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
  116. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
  117. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
  118. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
  119. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
  120. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
  121. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  122. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
  123. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
  124. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
  125. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
  126. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
  127. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
  128. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
  129. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
  130. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
  131. package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
  136. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
  137. package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
  138. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  139. package/src/shade/renderer/material/GPUMaterialManager.d.ts +11 -1
  140. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  141. package/src/shade/renderer/material/GPUMaterialManager.js +16 -8
  142. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
  143. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  144. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
  145. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +7 -3
  146. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  147. package/src/shade/renderer/postprocess/gtao/GTAO.js +26 -13
  148. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +14 -0
  149. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  150. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +196 -68
  151. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  152. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +42 -28
  153. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  154. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +429 -414
  155. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts +16 -0
  156. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts.map +1 -0
  157. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +156 -0
  158. package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -2
  159. package/src/shade/renderer/scene/GPUSceneContext.js +5 -5
  160. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  161. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
  162. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
  163. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  164. package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
  165. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
  166. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
  167. package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
  168. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  169. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  170. package/src/shade/renderer/water/shader_water.js +22 -13
  171. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  172. package/src/shade/renderer/water/shader_water_avboit.js +7 -7
  173. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
  174. package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
  175. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
  176. package/editor/REWORK_PLAN_2026_08.md +0 -692
  177. package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
  178. package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
  179. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
  180. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
  181. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
  182. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
  183. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
  184. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
  185. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
  186. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
  187. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
  188. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
  189. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
  190. package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
  191. package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
  192. package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
  193. package/src/REVIEW_2026_08_06/adv-core.md +0 -511
  194. package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
  195. package/src/REVIEW_2026_08_06/adv-view.md +0 -446
  196. package/src/REVIEW_2026_08_06/api-core.md +0 -296
  197. package/src/REVIEW_2026_08_06/api-engine.md +0 -195
  198. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
  199. package/src/REVIEW_2026_08_06/core-binary.md +0 -348
  200. package/src/REVIEW_2026_08_06/core-collection.md +0 -376
  201. package/src/REVIEW_2026_08_06/core-math.md +0 -221
  202. package/src/REVIEW_2026_08_06/core-process.md +0 -266
  203. package/src/REVIEW_2026_08_06/core-science.md +0 -223
  204. package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
  205. package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
  206. package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
  207. package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
  208. package/src/REVIEW_2026_08_06/engine-input.md +0 -197
  209. package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
  210. package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
  211. package/src/REVIEW_2026_08_06/generation.md +0 -176
  212. package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
  213. package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
  214. package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
  215. package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
  216. package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
  217. package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
  218. package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
  219. package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
  220. package/src/REVIEW_2026_08_06/view.md +0 -667
  221. package/src/REVIEW_2026_08_06.md +0 -610
  222. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
  223. package/src/core/bvh2/bvh3/NOTES.md +0 -2
  224. package/src/core/bvh8/NOTES.md +0 -63
  225. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
  226. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
  227. package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
  228. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
  229. package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
  230. package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
  231. package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
  232. package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
  233. package/src/core/geom/3d/gjk/NOTES.md +0 -8
  234. package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
  235. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
  236. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
  237. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
  238. package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
  239. package/src/engine/REVIEW_2026_07_03.md +0 -211
  240. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
  241. package/src/engine/control/first-person/DESIGN.md +0 -658
  242. package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
  243. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
  244. package/src/engine/control/first-person/TODO.md +0 -160
  245. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
  246. package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
  247. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
  248. package/src/engine/ecs/ik/PLAN.md +0 -179
  249. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
  250. package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
  251. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
  252. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
  253. package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
  254. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
  255. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
  256. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
  257. package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
  258. package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
  259. package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
  260. package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
  261. package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
  262. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
  263. package/src/engine/network/CONGESTION_CONTROL.md +0 -87
  264. package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
  265. package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
  266. package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
  267. package/src/engine/physics/cloth/PLAN.md +0 -3056
  268. package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
  269. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
  270. package/src/engine/physics/fluid/solver/NOTES.md +0 -46
  271. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
  272. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
  273. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
  274. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
  275. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
  276. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
  277. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
  278. package/src/format/image/avif/DECISIONS.md +0 -545
  279. package/src/format/image/jpeg/NOTES.md +0 -3
  280. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
  281. package/src/generation/COORDINATES.md +0 -54
  282. package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
  283. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
  284. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
  285. package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
  286. package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
  287. package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
  288. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
  289. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
  290. package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
  291. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
  292. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
  293. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
  294. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
  295. package/src/shade/RENDERER_CONTRACT.md +0 -697
  296. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
  297. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
  298. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
  299. package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
  300. package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
  301. package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
  302. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
  303. package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
  304. package/src/shade/renderer/NOTES.md +0 -78
  305. package/src/shade/renderer/PLAN.md +0 -8
  306. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
  307. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
  308. package/src/shade/renderer/atmosphere/NOTES.md +0 -6
  309. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
  310. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
  311. package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
  312. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
  313. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
  314. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
  315. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
  316. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
  317. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
  318. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
  319. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
  320. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
  321. package/src/shade/renderer/camera/orbital/README.md +0 -81
  322. package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
  323. package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
  324. package/src/shade/renderer/camera/orbital/index.js +0 -9
  325. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
  326. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
  327. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
  328. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
  329. package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
  330. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
  331. package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
  332. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
  333. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
  334. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
  335. package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
  336. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
  337. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
  338. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
  339. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
  340. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
  341. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
  342. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
  343. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +0 -47
  344. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +0 -1
  345. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +0 -80
  346. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +0 -16
  347. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +0 -1
  348. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +0 -67
  349. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +0 -17
  350. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +0 -1
  351. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +0 -145
  352. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +0 -12
  353. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +0 -1
  354. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +0 -105
  355. package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
  356. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
  357. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
  358. package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
  359. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
  360. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
  361. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
  362. package/src/shade/renderer/hiz/NOTES.md +0 -3
  363. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
  364. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
  365. package/src/shade/renderer/light/cluster/NOTES.md +0 -11
  366. package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
  367. package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
  368. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
  369. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
  370. package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
  371. package/src/shade/renderer/particles/DESIGN.md +0 -1011
  372. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
  373. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
  374. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
  375. package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
  376. package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
  377. package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
  378. package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
  379. package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
  380. package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
  381. package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
  382. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
  383. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
  384. package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
  385. package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
  386. package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
  387. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
  388. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
  389. package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
  390. package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
  391. package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
  392. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
  393. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
  394. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
  395. package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
  396. package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
  397. package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
  398. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
  399. package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
  400. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
  401. package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
  402. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
  403. package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
  404. package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
  405. package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
  406. package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
  407. package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
  408. package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
  409. package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
  410. package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
  411. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
  412. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
  413. package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
  414. package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
  415. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
  416. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
  417. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
  418. package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
  419. package/src/shade/wgsl/NOTES.md +0 -4
@@ -1,146 +0,0 @@
1
- # GJK review notes — Johnson distance subalgorithm & robustness
2
-
3
- Notes from a 2026-06-18 research pass (capsule-vs-AABB / segment-vs-box work) on
4
- how this engine's GJK family relates to the known GJK robustness literature —
5
- chiefly the **Johnson distance subalgorithm** and its 2017 **signed-volumes**
6
- replacement. See `NOTES.md` (same dir) for the raw reference links.
7
-
8
- **TL;DR:** the specific Johnson failure mode does **not** apply here, because this
9
- engine has **no distance-returning GJK** — nothing computes the Johnson
10
- sub-distance, so there is nothing to replace. The finding is *forward-looking*:
11
- it becomes relevant the day a closest-distance-between-separated-convexes query
12
- is added (speculative contacts, conservative-advancement CCD, proximity
13
- queries). The analogous simplex-degeneracy risk in our boolean/penetration GJK is
14
- real but already mitigated by explicit floating-point-dust guards.
15
-
16
- ## What this engine actually has
17
-
18
- There are three Minkowski-difference routines here, and **none is a distance
19
- subalgorithm**:
20
-
21
- | File | Role | Simplex / sub-distance method |
22
- |---|---|---|
23
- | `gjk.js` | **Boolean** overlap test (used by `physics/queries/shape_cast.js`) | Voronoi-region simplex update via triple cross products (Kevin Moran adaptation). Returns a bool; never computes a closest point. |
24
- | `gjk_epa_penetration.js` | **Penetration** axis+depth (narrowphase convex / mesh / concave-per-triangle) | GJK builds a rank-4 origin-enclosing simplex (Voronoi-region updates), then EPA expands faces toward the closest one (Bullet `btGjkEpa2` structure). |
25
- | `mpr.js` | Penetration normal on **smooth** supports (sphere/capsule), where EPA stalls | Minkowski Portal Refinement — portal, not simplex sub-distance. |
26
-
27
- The thing the literature calls the *Johnson distance subalgorithm* — given a
28
- simplex of ≤4 points, find the closest point on it to the origin and the minimal
29
- sub-simplex (which Voronoi region the origin projects into), via recursively
30
- computed barycentric cofactors — is **absent**. Our GJK only ever asks "does the
31
- simplex enclose / has the support passed the origin?", never "what is the
32
- closest point on the simplex?". So there is no Johnson cofactor recursion and no
33
- Backup procedure in this codebase.
34
-
35
- ## The Johnson subalgorithm and why it fails
36
-
37
- In a *distance* GJK (Gilbert–Johnson–Keerthi 1988), each iteration must solve the
38
- sub-distance problem: project the origin onto the current simplex and discard the
39
- vertices not contributing to the closest feature. Johnson's method expresses the
40
- barycentric weights as ratios of determinants (Δ cofactors) built from dot
41
- products of support-point *differences*.
42
-
43
- Failure mode (the part relevant to robustness reviews): for a **near-degenerate
44
- simplex** — points nearly coincident or nearly coplanar/collinear, which GJK
45
- *naturally drives toward* as it converges on a near-contact configuration — those
46
- determinants are differences of nearly-equal products and lose most of their
47
- significant digits to **subtractive cancellation**. The algorithm then either
48
- fails to find any valid sub-simplex (the historical "Backup procedure" brute-forces
49
- all subsets as a fallback) or, worse, selects the wrong Voronoi region and returns
50
- a **wrong closest point / distance**. Net effect in practice: the distance is
51
- *under-estimated just before contact* — i.e. under-detection, the same direction
52
- of error we found in the capsule-box alternating projection.
53
-
54
- ## The 2017 fix — signed volumes (Montanari, Petrinic & Barbieri)
55
-
56
- *"Improving the GJK Algorithm for Faster and More Reliable Distance Queries
57
- Between Convex Objects"*, ACM TOG 36(3), 2017; reference impl **openGJK**
58
- (SoftwareX 2018). Both already cited in `NOTES.md`.
59
-
60
- It replaces Johnson's distance subalgorithm **and** the Backup procedure with a
61
- **signed-volumes** subalgorithm:
62
-
63
- - determines the Voronoi region by comparing **signed volumes** (determinants) of
64
- the simplex and its sub-faces, projecting onto the lowest-dimensional one that
65
- contains the origin's projection;
66
- - crucially **does not multiply together potentially small quantities**, so it is
67
- *accurate to machine precision* and, per the paper, "cannot possibly generate
68
- systems of linearly dependent equations" — **degenerate simplices are handled
69
- naturally** (they collapse to a lower-dimensional projection instead of
70
- triggering a fallback);
71
- - side benefit: ~10% faster on average, 15–30% in the contact-heavy regime.
72
-
73
- This is the single most relevant robustness upgrade for any GJK that returns a
74
- **distance**. It is *not* a drop-in change to a boolean or penetration GJK, which
75
- do not run a sub-distance step.
76
-
77
- ## Applicability to this codebase
78
-
79
- 1. **No live bug.** Nothing here runs the Johnson subalgorithm, so there is
80
- nothing to "fix". Do not retrofit signed-volumes onto `gjk.js` /
81
- `gjk_epa_penetration.js` — they have no sub-distance step to replace.
82
-
83
- 2. **The analogous risk is the Voronoi-region update**, not Johnson cofactors.
84
- `gjk.js` and the GJK phase of `gjk_epa_penetration.js` decide regions with
85
- triple-cross-products and dot products, which suffer the *same class* of
86
- cancellation on degenerate simplices. This is already mitigated deliberately:
87
- - `gjk.js` `perpendicular_to_edge()` + the exact-zero direction checks are FP-dust
88
- guards for exactly the collapsed-simplex case (see the comment block there —
89
- a wedge dot rounding a hair above zero while the triple product rounds to
90
- zero). Documented as off the hot path.
91
- - `gjk_epa_penetration.js` carries `DIR_EPS`/`EPA_EPS` floors and pool-overflow
92
- "use current best face" degradations.
93
- These are spot mitigations, not a machine-precision guarantee — but they cover
94
- the inputs the narrowphase actually feeds (the convex hulls / triangles), and
95
- the penetration path is cross-checked by MPR on smooth shapes.
96
-
97
- 3. **Signed-volumes becomes relevant when a distance query is added.** If/when the
98
- engine grows speculative/“soft” contacts that need a *separation distance*, a
99
- conservative-advancement CCD that needs closest-distance per step, or general
100
- proximity queries, implement that as a **new** signed-volumes distance GJK
101
- (port openGJK) rather than coaxing distance out of the boolean/penetration
102
- routines. Capsule primitives should keep using the closed-form contacts
103
- (`capsule_contacts.js`, now exact — see below), not GJK-with-margin.
104
-
105
- ## Related robustness notes (same review)
106
-
107
- - **EPA precision wall on flat supports.** `Triangle3D`'s support is degenerate
108
- along the face normal (all 3 vertices project equally), which stalls EPA and
109
- yields noisy depths. The narrowphase already routes sphere/box/capsule-vs-
110
- triangle through **closed-form** fast-paths in `narrowphase_step.js` for exactly
111
- this reason, and `shape_cast.js` recovers the TOI normal with **MPR** rather
112
- than EPA on smooth-vs-smooth. Good — keep new primitive pairs on closed forms.
113
- - **Capsule-as-segment-support-with-margin is intentionally NOT used here.** Jolt
114
- and PhysX-PCM collide capsules as a segment support inflated by the radius
115
- inside GJK/EPA (with bounded corner error from the shrink-margin model). This
116
- engine instead uses exact closed-form capsule contacts. That is the more
117
- accurate choice for these primitive pairs and should stay.
118
- - **Non-convergence policy.** Both `gjk.js` and `gjk_epa_penetration.js` cap at
119
- `*_MAX_ITER = 64` and treat exhaustion as *no intersection*. For well-conditioned
120
- convex inputs this is unreachable; it is a backstop against pathological input,
121
- not a correctness lever.
122
-
123
- ## Action items (low urgency — none is a known live defect)
124
-
125
- - [ ] If a separation-distance / proximity / conservative-advancement query is
126
- ever needed, port **openGJK signed-volumes** as a dedicated distance GJK.
127
- Do not extend the boolean/penetration routines for it.
128
- - [ ] (Optional, deeper) A focused robustness pass on
129
- `gjk_epa_penetration.js`'s simplex phase — confirm the degenerate-simplex
130
- guards hold under near-coplanar convex-hull inputs at scale. Out of scope
131
- for this note; flagged only because it is the nearest analog to the Johnson
132
- concern.
133
-
134
- ## References
135
-
136
- - Gilbert, Johnson, Keerthi (1988), *A Fast Procedure for Computing the Distance
137
- Between Complex Objects in Three-Dimensional Space*, IEEE J. Robotics &
138
- Automation — the original GJK + Johnson distance subalgorithm.
139
- - Montanari, Petrinic, Barbieri (2017), *Improving the GJK Algorithm…*, ACM TOG
140
- 36(3), DOI 10.1145/3072959.3083724; openGJK reference impl
141
- (github.com/MattiaMontanari/openGJK). Already in `NOTES.md`.
142
- - van den Bergen (1999), *A Fast and Robust GJK Implementation for Collision
143
- Detection of Convex Objects* — the classic robustness treatment (error bounds,
144
- the Backup procedure) that motivates the 2017 work.
145
- - Ericson, *Real-Time Collision Detection* (2005), §9.5 (GJK), Ch. 9 (EPA context).
146
- - `gjk.js` header — adapted from github.com/kevinmoran/GJK (boolean Voronoi GJK).
@@ -1,8 +0,0 @@
1
-
2
- References:
3
-
4
- * See "Improving the GJK Algorithm for Faster and More Reliable Distance Queries Between Convex Objects", Nik Petrinic 2017, method proposed here: https://www.youtube.com/watch?v=jETkRhyHOJM, DOI 10.1145/3072959.3083724
5
- * https://github.com/MattiaMontanari/openGJK
6
- * https://github.com/ghodges413/VulkanStuff/blob/031cc0a3a301b6d45f1d24670c8fcaa283501f90/Stuff18_Map/Map/code/Math/epa.cpp
7
- * [A Strange But Elegant Approach to a Surprisingly Hard Problem (GJK Algorithm)](https://www.youtube.com/watch?v=ajv46BSqcK4)
8
- * [GJK + Expanding Polytope Algorithm - Implementation and Visualization](https://www.youtube.com/watch?v=6rgiPrzqt9w)
@@ -1,135 +0,0 @@
1
- # TopoMesh retirement — done
2
-
3
- `TopoMesh`, `TopoVertex`, `TopoEdge` and `TopoTriangle` are gone, along with everything built on them.
4
- `BinaryTopology` is the engine's only mesh-topology structure.
5
-
6
- This file is what survives the plan it used to be: a migration map, for anyone who reaches for a name
7
- that is no longer there. The reasoning behind each choice is in the commit history and in the JSDoc of
8
- the replacements.
9
-
10
- ## What made this cheap
11
-
12
- Nothing outside `src/core/geom/3d/topology/` imported a `TopoMesh`-based module — the survey that
13
- preceded the deletion found zero such imports, and the one file elsewhere that named the types
14
- (`core/graph/metis/mesh_to_metis_graph.js`) had no callers of its own. Every live consumer — navmesh
15
- build, lightmap bake, meshlet build, virtual geometry, UV-tension optimisation, scene geometry
16
- optimisation, the acoustic simulator — was already on `BinaryTopology`. So there was no deprecation
17
- cycle to run and no caller to migrate: 101 files were deleted outright.
18
-
19
- ## Migration map
20
-
21
- ### The structure
22
-
23
- | Gone | Use instead |
24
- | --- | --- |
25
- | `TopoMesh` | `BinaryTopology` |
26
- | `TopoVertex` / `TopoEdge` / `TopoTriangle` | pool ids — an element *is* its id |
27
- | `TopoMesh#build` / `setVerticesFromArray` / `setFacesFromIndexArray` | `bt_mesh_from_indexed_geometry` |
28
- | `TopoMesh#setFacedUnindexed` | `bt_mesh_from_unindexed_geometry` |
29
- | `TopoMesh#createTriangle` | `bt_face_create_triangle` (or `bt_face_create` for n-gons) |
30
- | `TopoMesh#add` / `addFaceCopy` / `patchFaceEdges` | `bt_mesh_append` |
31
- | `TopoMesh#validate` | `bt_mesh_validate` / `bt_mesh_assert_valid` |
32
- | `TopoMesh#ensureEdge` | `bt_edge_get_or_create` |
33
- | `TopoMesh#mergeEdges` | `bt_mesh_fuse_duplicate_edges` |
34
- | `TopoMesh#clone` | `BinaryTopology#clone` |
35
- | `TopoMesh#getFaceByIndex` | the id is the identity — no lookup |
36
- | `TopoEdge#computeSquaredLength` | `bt_vertex_distance_to_vertex` |
37
-
38
- ### Element queries
39
-
40
- | Gone | Use instead |
41
- | --- | --- |
42
- | `query_edge_is_boundary` | `bt_edge_is_boundary` |
43
- | `query_edge_is_manifold` | `bt_edge_is_manifold` |
44
- | `query_edge_is_manifold_or_boundary` | `bt_edge_is_manifold_or_boundary` |
45
- | `query_edge_is_wire` | `bt_edge_is_wire` |
46
- | `query_edge_other_vertex` | `bt_edge_other_vertex` |
47
- | `query_edge_share_vert` | `bt_edge_shares_vertex` |
48
- | `query_vertex_in_edge` / `query_vertices_in_edge` | `bt_edge_has_vertex` |
49
- | `query_vertex_is_boundary` | `bt_vertex_is_boundary` |
50
- | `query_vertex_pair_share_face` | `bt_vertex_shares_face` |
51
- | `query_face_get_other_edges` | `bt_face_get_other_edges` |
52
- | `query_face_next_vertex` / `query_face_prev_vertex` | `loop_read_next` / `loop_read_prev` + `loop_read_vertex` |
53
- | `compare_edges` / `compareFaces` / `compareVertices` | ids sort — that *is* the ordering |
54
- | `topology_find_broken_links` / `debugValidateMesh` | `bt_mesh_validate` / `bt_mesh_assert_valid` |
55
-
56
- ### Mesh operations
57
-
58
- | Gone | Use instead |
59
- | --- | --- |
60
- | `tm_edge_kill` | `bt_edge_kill` |
61
- | `tm_edge_kill_only` | `bt_kill_only_edge` |
62
- | `tm_edge_splice` | `bt_vertex_fuse_duplicate_edges` / `bt_mesh_fuse_duplicate_edges` |
63
- | `tm_face_kill` | `bt_face_kill` |
64
- | `tm_face_kill_only` | `bt_kill_only_face` |
65
- | `tm_face_area` | `bt_face_area` (over the shared `bt_face_compute_newell_normal`) |
66
- | `tm_face_normal` / `update_topo_face_normals` | `bt_mesh_compute_face_normals` |
67
- | `tm_vertex_kill` | `bt_vertex_kill` |
68
- | `tm_vertex_kill_only` | `bt_vertex_kill_only` |
69
- | `tm_vertex_splice` | `bt_vertex_replace` + `bt_vertex_kill_only` |
70
- | `tm_vertex_compute_normal` | `bt_mesh_compute_vertex_normals` |
71
- | `tm_weld_duplicate_vertices` | `bt_merge_vertices_by_distance` |
72
- | `tm_mesh_cleanup` / `tm_edges_cleanup_empty` / `tm_vertices_cleanup_empty` | `bt_mesh_cleanup_faceless_references` |
73
- | `expandConnectivityByLocality` / `compute_topo_mesh_vertex_duplicates` | `bt_merge_vertices_by_distance` |
74
- | `mesh_flood_fill` | `bt_face_island_flood_fill` |
75
- | `compute_face_connection_weight` | `bt_face_get_edge_adjacent_faces_weighted` |
76
- | `build_face_graph_from_mesh` / `mesh_to_metis_graph` | `bt_mesh_build_face_graph` |
77
-
78
- ### Simplification
79
-
80
- The whole `simplify/` tree is replaced by `bt_mesh_simplify`, `bt_mesh_simplify_with_quadrics` and
81
- `bt_mesh_simplify_by_error`, which subsume the candidate heap, the collapse machinery and the flip
82
- guard.
83
-
84
- | Gone | Use instead |
85
- | --- | --- |
86
- | `simplifyTopoMesh` / `simplifyTopoMesh2` / `decimate_edge_collapse_snap` | `bt_mesh_simplify`, `bt_mesh_simplify_by_error` |
87
- | `collapse_edge` / `tm_edge_collapse` / `partial_edge_collapse` | `bt_edge_collapse` |
88
- | `collapse_degenerate_edge` / `collapse_all_degenerate_edges` | `bt_mesh_kill_degenerate_faces` |
89
- | `build_vertex_quadrics` / `apply_border_penalt*_to_vertex_quadrics` | `bt_mesh_compute_vertex_quadrics` |
90
- | `compute_face_normal_change_dot_product` / `tm_edge_collapse_is_degenerate_flip` | `bt_face_normal_change_dot_product` |
91
- | `EdgeCollapseCandidate` / `build_edge_collapse_candidates` / `compute_edge_collapse_cost*` | internal to `bt_mesh_simplify` |
92
-
93
- ### Bounds and geometry I/O
94
-
95
- | Gone | Use instead |
96
- | --- | --- |
97
- | `compute_topo_mesh_bounding_box` | `bt_mesh_compute_bounding_box` |
98
- | `compute_topo_mesh_bounding_sphere` | `bt_mesh_compute_bounding_sphere` |
99
- | `compute_triangle_cluster_normal_bounding_cone` | `bt_face_cluster_compute_normal_bounding_cone` |
100
- | `three_buffer_geometry_to_topo_mesh` | `bt_mesh_from_three_buffer_geometry` |
101
- | `topo_mesh_to_three_buffer_geometry` | `bt_mesh_to_three_buffer_geometry` |
102
- | — (nothing had one) | `bt_mesh_to_indexed_geometry` |
103
-
104
- ### Moved, not removed
105
-
106
- Two things in the deleted tree were never about `TopoMesh` and now live somewhere that says so:
107
-
108
- | Was | Is |
109
- | --- | --- |
110
- | `topology/simplify/quadratic/Quadric3.js` | `geom/3d/quadric/Quadric3.js` |
111
- | `topology/simplify/quadratic/quadric3_set_from_plane_through_point.js` | `geom/3d/quadric/quadric3_set_from_plane_through_point.js` |
112
- | `topology/graph_create_off_mesh_links.js` | `core/graph/graph_create_off_mesh_links.js` |
113
-
114
- ## Behaviour that changed on the way across
115
-
116
- Two replacements are not bit-identical to what they replace. Both differences are deliberate.
117
-
118
- **Vertex normals are area-weighted.** `tm_vertex_compute_normal` averaged *unit* face normals, giving
119
- every incident face an equal vote. `bt_mesh_compute_vertex_normals` accumulates Newell vectors, whose
120
- magnitude is twice the face's area. On a decimated mesh, where triangle sizes around one vertex differ
121
- by orders of magnitude, equal voting lets a cluster of slivers outvote the surface they sit on. The
122
- two agree wherever the incident faces have equal area.
123
-
124
- **Coordinates are float32.** `TopoVertex` held plain JS numbers. Anything that used to round-trip
125
- through `TopoMesh` exactly now rounds to float32 — which is what the mesh was always going to be
126
- stored as, one step earlier.
127
-
128
- ## One thing that was not ported
129
-
130
- `compute_topo_mesh_vertex_duplicates` reported which vertices are within a tolerance of each other
131
- *without* merging them. Its only two callers (`expandConnectivityByLocality` and
132
- `tm_weld_duplicate_vertices`) both wanted the merge, which `bt_merge_vertices_by_distance` does. Adding
133
- a report-only variant means either a second spatial hash alongside the one inside
134
- `bt_merge_vertices_by_distance` or refactoring that tested code for a function nothing calls. Neither
135
- is worth doing on speculation — if a caller ever needs the report, extract the grid then.