@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,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.