@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.
- package/CHANGELOG.md +2602 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +7 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +2 -2
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- 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.
|