@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,66 +0,0 @@
1
- /**
2
- * Tunable "feel" parameters for the orbital camera, shared by the control core
3
- * ({@link OrbitalCameraRig}) and the input adapter ({@link OrbitalCameraInput}).
4
- * One frozen source of truth so the two layers can never disagree.
5
- *
6
- * The model is **direct drive + release momentum** (a "throw", like Google Earth
7
- * / Cesium), NOT a smoothed-target spring. While dragging, the camera follows
8
- * input 1:1 (no lag, fully responsive). On release the recent input velocity is
9
- * carried forward and decays exponentially — the weighty follow-through. See
10
- * {@link MomentumAxis}.
11
- *
12
- * Defaults grounded in the competitor survey:
13
- * - `momentumDecayHalfLife` ≈ Cesium spin inertia (tau 2.5 → half-life 0.28 s).
14
- * - `velocityWindow` ≈ Mapbox's 160 ms release-velocity window (a touch shorter).
15
- * - `zoomStep` 0.9 multiplicative per notch ≈ three.js `pow(0.95, zoomSpeed)`.
16
- */
17
- export const ORBITAL_CAMERA_FEEL_DEFAULTS = Object.freeze({
18
- // ── momentum / inertia (rotate + pan) ───────────────────────────────────
19
- // false → motion stops the instant input ends (direct, zero-inertia; the
20
- // Maya/CAD "precision" feel).
21
- momentumEnabled: true,
22
- // seconds for the coast velocity to halve. Larger = longer, heavier glide.
23
- momentumDecayHalfLife: 0.10,
24
- // seconds of recent input averaged to derive the throw velocity on release.
25
- // Averaging (vs. taking the last frame) rejects a single jittery final frame.
26
- velocityWindow: 0.10,
27
- // below this angular speed (rad/s) the coast snaps to rest. Pan scales this
28
- // by the orbit distance so the stop feels the same at any zoom.
29
- momentumStopSpeed: 0.012,
30
-
31
- // ── input mapping ───────────────────────────────────────────────────────
32
- rotateSpeed: 1.0, // gain on pointer-pixels → radians
33
- panSpeed: 1.0, // gain on pan drag
34
- zoomStep: 0.9, // multiplicative distance factor per wheel notch (direct/instant)
35
- invertWheel: false,
36
-
37
- // ── orbit limits ────────────────────────────────────────────────────────
38
- minPolar: 1e-6, // pitch clamp (radians), keep off the exact poles
39
- maxPolar: Math.PI - 1e-6,
40
-
41
- // ── programmatic framing glide (flyTo); 0 = instant snap ────────────────
42
- flyToDuration: 0.35,
43
-
44
- // ── dt safety ───────────────────────────────────────────────────────────
45
- maxDt: 0.1, // clamp tab-hitch / first-frame spikes (seconds)
46
- });
47
-
48
- /**
49
- * Merge overrides over the defaults to produce a controller config.
50
- * @param {Partial<typeof ORBITAL_CAMERA_FEEL_DEFAULTS>} [overrides]
51
- * @returns {typeof ORBITAL_CAMERA_FEEL_DEFAULTS}
52
- */
53
- export function createOrbitalCameraConfig(overrides = {}) {
54
- return { ...ORBITAL_CAMERA_FEEL_DEFAULTS, ...overrides };
55
- }
56
-
57
- /**
58
- * Ready-made "Precision" profile: no inertia — the camera stops the instant you
59
- * release (direct mouse-delta control, can stop on a pixel), the Maya/CAD
60
- * convention.
61
- * @param {Partial<typeof ORBITAL_CAMERA_FEEL_DEFAULTS>} [overrides]
62
- * @returns {typeof ORBITAL_CAMERA_FEEL_DEFAULTS}
63
- */
64
- export function createPrecisionProfile(overrides = {}) {
65
- return createOrbitalCameraConfig({ momentumEnabled: false, ...overrides });
66
- }
@@ -1,98 +0,0 @@
1
- /**
2
- * The INPUT ADAPTER for the orbital camera. Translates pointer/keyboard events
3
- * into {@link OrbitalCameraRig} intents — no camera state, no kinematics. Input
4
- * and control stay decoupled, so the rig is testable with plain numbers and this
5
- * adapter is testable by firing synthetic signals at injected fake devices.
6
- *
7
- * A drag is a bracketed gesture: `dragStart` engages the rig (rotate or pan,
8
- * chosen by which button is down), each `drag` applies a delta directly (1:1),
9
- * and `dragEnd` releases — handing the rig the recent velocity so it can throw.
10
- * Continuous WASD is sampled per frame from {@link update}.
11
- *
12
- * @author Alex Goldring (orbital rework)
13
- * @copyright Company Named Limited (c) 2026
14
- */
15
- export class OrbitalCameraInput {
16
- /**
17
- * @param {object} deps
18
- * @param {import("./OrbitalCameraRig.js").OrbitalCameraRig} deps.rig
19
- * @param {import("../../../../engine/input/devices/PointerDevice.js").PointerDevice} deps.pointer
20
- * @param {import("../../../../engine/input/devices/KeyboardDevice.js").default} deps.keyboard
21
- * @param {{ clientHeight: number }} deps.viewport pixel→angle scaling source (canvas/DOM element)
22
- * @param {{ fov: number }} deps.lens vertical fov in radians (e.g. the PerspectiveCamera)
23
- * @param {object} deps.config shared feel config
24
- */
25
- constructor({ rig, pointer, keyboard, viewport, lens, config }: {
26
- rig: import("./OrbitalCameraRig.js").OrbitalCameraRig;
27
- pointer: import("../../../../engine/input/devices/PointerDevice.js").PointerDevice;
28
- keyboard: import("../../../../engine/input/devices/KeyboardDevice.js").default;
29
- viewport: {
30
- clientHeight: number;
31
- };
32
- lens: {
33
- fov: number;
34
- };
35
- config: object;
36
- });
37
- rig: import("./OrbitalCameraRig.js").OrbitalCameraRig;
38
- pointer: import("../../../../engine/input/devices/PointerDevice.js").PointerDevice;
39
- keyboard: import("../../../../engine/input/devices/KeyboardDevice.js").default;
40
- viewport: {
41
- clientHeight: number;
42
- };
43
- lens: {
44
- fov: number;
45
- };
46
- config: any;
47
- _connected: boolean;
48
- /** @type {'rotate'|'pan'|null} active gesture */
49
- _mode: 'rotate' | 'pan' | null;
50
- _onDragStart: any;
51
- _onDrag: any;
52
- _onDragEnd: any;
53
- _onWheel: any;
54
- _onPinch: any;
55
- _onCancel: any;
56
- _cancelTarget: Element;
57
- /** Subscribe to device signals. Idempotent. */
58
- connect(): void;
59
- /** Unsubscribe. Releases any in-flight gesture so the rig doesn't hang engaged. */
60
- disconnect(): void;
61
- /**
62
- * Sample continuous (held-key) input. Called once per frame with the frame dt.
63
- * @param {number} dt seconds
64
- */
65
- update(dt: number): void;
66
- _handleDragStart(): void;
67
- /**
68
- * @param {{x:number,y:number}} position
69
- * @param {{x:number,y:number}} _origin
70
- * @param {{x:number,y:number}} lastPosition
71
- */
72
- _handleDrag(position: {
73
- x: number;
74
- y: number;
75
- }, _origin: {
76
- x: number;
77
- y: number;
78
- }, lastPosition: {
79
- x: number;
80
- y: number;
81
- }): void;
82
- _handleDragEnd(): void;
83
- _endGesture(): void;
84
- _cancelGesture(): void;
85
- /** @param {{x:number,y:number,z:number}} delta wheel delta (meep normalizes to signs) */
86
- _handleWheel(delta: {
87
- x: number;
88
- y: number;
89
- z: number;
90
- }): void;
91
- /**
92
- * Forward-compatible pinch handler. `scale` is the finger-spread ratio
93
- * (>1 spreading = zoom in). Inert until meep dispatches on.pinch.
94
- * @param {number} scale
95
- */
96
- _handlePinch(scale: number): void;
97
- }
98
- //# sourceMappingURL=OrbitalCameraInput.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrbitalCameraInput.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/camera/orbital/OrbitalCameraInput.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH;IACI;;;;;;;;OAQG;IACH;QAPkE,GAAG,EAA1D,OAAO,uBAAuB,EAAE,gBAAgB;QACgC,OAAO,EAAvF,OAAO,mDAAmD,EAAE,aAAa;QACE,QAAQ,EAAnF,OAAO,oDAAoD,EAAE,OAAO;QACrC,QAAQ,EAAvC;YAAE,YAAY,EAAE,MAAM,CAAA;SAAE;QACF,IAAI,EAA1B;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE;QACF,MAAM,EAAnB,MAAM;OAqBhB;IAlBG,sDAAc;IACd,mFAAsB;IACtB,+EAAwB;IACxB;sBARuB,MAAM;MAQL;IACxB;aARc,MAAM;MAQJ;IAChB,YAAoB;IAEpB,oBAAuB;IACvB,iDAAiD;IACjD,OADW,QAAQ,GAAC,KAAK,GAAC,IAAI,CACb;IAEjB,kBAAoD;IACpD,aAA0C;IAC1C,gBAAgD;IAChD,cAA4C;IAC5C,cAA4C;IAC5C,eAA+C;IAC/C,uBAAyB;IAG7B,+CAA+C;IAC/C,gBAgBC;IAED,mFAAmF;IACnF,mBAgBC;IAED;;;OAGG;IACH,WAFW,MAAM,QAShB;IAID,yBAQC;IAED;;;;OAIG;IACH,sBAJW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,WACnB;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,gBACnB;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAe7B;IAED,uBAEC;IAED,oBAOC;IAED,uBAMC;IAID,yFAAyF;IACzF,oBADY;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAmBvC;IAED;;;;OAIG;IACH,oBAFW,MAAM,QAOhB;CACJ"}
@@ -1,184 +0,0 @@
1
- /**
2
- * The INPUT ADAPTER for the orbital camera. Translates pointer/keyboard events
3
- * into {@link OrbitalCameraRig} intents — no camera state, no kinematics. Input
4
- * and control stay decoupled, so the rig is testable with plain numbers and this
5
- * adapter is testable by firing synthetic signals at injected fake devices.
6
- *
7
- * A drag is a bracketed gesture: `dragStart` engages the rig (rotate or pan,
8
- * chosen by which button is down), each `drag` applies a delta directly (1:1),
9
- * and `dragEnd` releases — handing the rig the recent velocity so it can throw.
10
- * Continuous WASD is sampled per frame from {@link update}.
11
- *
12
- * @author Alex Goldring (orbital rework)
13
- * @copyright Company Named Limited (c) 2026
14
- */
15
- export class OrbitalCameraInput {
16
- /**
17
- * @param {object} deps
18
- * @param {import("./OrbitalCameraRig.js").OrbitalCameraRig} deps.rig
19
- * @param {import("../../../../engine/input/devices/PointerDevice.js").PointerDevice} deps.pointer
20
- * @param {import("../../../../engine/input/devices/KeyboardDevice.js").default} deps.keyboard
21
- * @param {{ clientHeight: number }} deps.viewport pixel→angle scaling source (canvas/DOM element)
22
- * @param {{ fov: number }} deps.lens vertical fov in radians (e.g. the PerspectiveCamera)
23
- * @param {object} deps.config shared feel config
24
- */
25
- constructor({ rig, pointer, keyboard, viewport, lens, config }) {
26
- this.rig = rig;
27
- this.pointer = pointer;
28
- this.keyboard = keyboard;
29
- this.viewport = viewport;
30
- this.lens = lens;
31
- this.config = config;
32
-
33
- this._connected = false;
34
- /** @type {'rotate'|'pan'|null} active gesture */
35
- this._mode = null;
36
-
37
- this._onDragStart = this._handleDragStart.bind(this);
38
- this._onDrag = this._handleDrag.bind(this);
39
- this._onDragEnd = this._handleDragEnd.bind(this);
40
- this._onWheel = this._handleWheel.bind(this);
41
- this._onPinch = this._handlePinch.bind(this);
42
- this._onCancel = this._cancelGesture.bind(this);
43
- this._cancelTarget = null;
44
- }
45
-
46
- /** Subscribe to device signals. Idempotent. */
47
- connect() {
48
- if (this._connected) {
49
- return;
50
- }
51
- this._connected = true;
52
-
53
- this.pointer.on.dragStart.add(this._onDragStart);
54
- this.pointer.on.drag.add(this._onDrag);
55
- this.pointer.on.dragEnd.add(this._onDragEnd);
56
- this.pointer.on.wheel.add(this._onWheel);
57
- // meep declares on.pinch but does not yet dispatch it (touch users get
58
- // single-pointer rotate via drag). Wired so pinch works once it lands.
59
- this.pointer.on.pinch.add(this._onPinch);
60
- this._cancelTarget = this.pointer.domElement;
61
- this._cancelTarget.addEventListener("pointercancel", this._onCancel);
62
- window.addEventListener("blur", this._onCancel);
63
- }
64
-
65
- /** Unsubscribe. Releases any in-flight gesture so the rig doesn't hang engaged. */
66
- disconnect() {
67
- if (!this._connected) {
68
- return;
69
- }
70
- this._connected = false;
71
-
72
- this.pointer.on.dragStart.remove(this._onDragStart);
73
- this.pointer.on.drag.remove(this._onDrag);
74
- this.pointer.on.dragEnd.remove(this._onDragEnd);
75
- this.pointer.on.wheel.remove(this._onWheel);
76
- this.pointer.on.pinch.remove(this._onPinch);
77
- this._cancelTarget.removeEventListener("pointercancel", this._onCancel);
78
- this._cancelTarget = null;
79
- window.removeEventListener("blur", this._onCancel);
80
-
81
- this._endGesture();
82
- }
83
-
84
- /**
85
- * Sample continuous (held-key) input. Called once per frame with the frame dt.
86
- * @param {number} dt seconds
87
- */
88
- update(dt) {
89
- const keys = this.keyboard.keys;
90
- const z = (keys.w?.is_down ? 1 : 0) + (keys.s?.is_down ? -1 : 0);
91
- const x = (keys.a?.is_down ? 1 : 0) + (keys.d?.is_down ? -1 : 0);
92
- if (x !== 0 || z !== 0) {
93
- this.rig.truckLocal(x, z, dt);
94
- }
95
- }
96
-
97
- // ── gesture lifecycle ────────────────────────────────────────────────────
98
-
99
- _handleDragStart() {
100
- // pick the gesture by which button is held when the drag begins
101
- this._mode = this.pointer.mouseButtonRight?.is_down ? "pan" : "rotate";
102
- if (this._mode === "pan") {
103
- this.rig.engagePan();
104
- } else {
105
- this.rig.engageRotate();
106
- }
107
- }
108
-
109
- /**
110
- * @param {{x:number,y:number}} position
111
- * @param {{x:number,y:number}} _origin
112
- * @param {{x:number,y:number}} lastPosition
113
- */
114
- _handleDrag(position, _origin, lastPosition) {
115
- if (this._mode === null) {
116
- return;
117
- }
118
- const dx = lastPosition.x - position.x;
119
- const dy = lastPosition.y - position.y;
120
-
121
- if (this._mode === "pan") {
122
- this.rig.panScreen(dx * this.config.panSpeed, dy * this.config.panSpeed, this.viewport.clientHeight, this.lens.fov);
123
- } else {
124
- const scale = (this.config.rotateSpeed * Math.PI * 2) / this.viewport.clientHeight;
125
- this.rig.rotate(dy * scale, dx * scale); // dPhi from vertical, dTheta from horizontal
126
- }
127
- }
128
-
129
- _handleDragEnd() {
130
- this._endGesture();
131
- }
132
-
133
- _endGesture() {
134
- if (this._mode === "pan") {
135
- this.rig.disengagePan();
136
- } else if (this._mode === "rotate") {
137
- this.rig.disengageRotate();
138
- }
139
- this._mode = null;
140
- }
141
-
142
- _cancelGesture() {
143
- if (this._mode === null) {
144
- return;
145
- }
146
- this.rig.cancelGesture();
147
- this._mode = null;
148
- }
149
-
150
- // ── zoom ─────────────────────────────────────────────────────────────────
151
-
152
- /** @param {{x:number,y:number,z:number}} delta wheel delta (meep normalizes to signs) */
153
- _handleWheel(delta) {
154
- let max = delta.x;
155
- if (Math.abs(delta.y) > Math.abs(max)) {
156
- max = delta.y;
157
- }
158
- if (Math.abs(delta.z) > Math.abs(max)) {
159
- max = delta.z;
160
- }
161
- if (max === 0) {
162
- return;
163
- }
164
-
165
- let s = Math.sign(max);
166
- if (this.config.invertWheel) {
167
- s = -s;
168
- }
169
- // scroll down (s>0) → factor>1 → zoom out; multiplicative = scale-uniform
170
- this.rig.dolly(Math.pow(this.config.zoomStep, -s));
171
- }
172
-
173
- /**
174
- * Forward-compatible pinch handler. `scale` is the finger-spread ratio
175
- * (>1 spreading = zoom in). Inert until meep dispatches on.pinch.
176
- * @param {number} scale
177
- */
178
- _handlePinch(scale) {
179
- if (typeof scale !== "number" || !(scale > 0)) {
180
- return;
181
- }
182
- this.rig.dolly(1 / scale);
183
- }
184
- }
@@ -1,175 +0,0 @@
1
- /**
2
- * The CONTROL CORE of the orbital camera — pure kinematics with no knowledge of
3
- * the DOM, input devices, or a wall clock. Drive it with intents, advance it
4
- * with an explicit `dt`, read a {@link Transform} back out. Unit testable with
5
- * plain numbers (see `OrbitalCameraRig.spec.js`).
6
- *
7
- * Feel model: **direct drive + release momentum** (a "throw"), via
8
- * {@link MomentumAxis}. A drag is bracketed by `engageRotate`/`disengageRotate`
9
- * (or pan); between them the orbit angles / target follow input 1:1 — no lag.
10
- * On disengage the recent input velocity is carried forward and decays to a
11
- * weighty stop. This is the Google-Earth/Cesium feel, not a spring chasing a
12
- * goal. Set `config.momentumEnabled = false` for an instant stop (precision).
13
- *
14
- * Zoom is applied directly (multiplicative, instant) — wheel notches are
15
- * discrete impulses, so there is nothing to "catch up" and no lag to hide.
16
- *
17
- * @author Alex Goldring (orbital rework)
18
- * @copyright Company Named Limited (c) 2026
19
- */
20
- export class OrbitalCameraRig {
21
- /**
22
- * @param {object} [options]
23
- * @param {ReturnType<typeof createOrbitalCameraConfig>} [options.config]
24
- * @param {NumericInterval} [options.distanceLimits]
25
- * @param {number} [options.movementSpeedScale]
26
- */
27
- constructor({ config, distanceLimits, movementSpeedScale }?: {
28
- config?: ReturnType<typeof createOrbitalCameraConfig>;
29
- distanceLimits?: NumericInterval;
30
- movementSpeedScale?: number;
31
- });
32
- config: Readonly<{
33
- momentumEnabled: true;
34
- momentumDecayHalfLife: 0.1;
35
- velocityWindow: 0.1;
36
- momentumStopSpeed: 0.012; /**
37
- * @param {object} [options]
38
- * @param {ReturnType<typeof createOrbitalCameraConfig>} [options.config]
39
- * @param {NumericInterval} [options.distanceLimits]
40
- * @param {number} [options.movementSpeedScale]
41
- */
42
- rotateSpeed: 1;
43
- panSpeed: 1;
44
- zoomStep: 0.9;
45
- invertWheel: false;
46
- minPolar: 0.000001;
47
- maxPolar: number;
48
- flyToDuration: 0.35;
49
- maxDt: 0.1;
50
- }>;
51
- distanceLimits: NumericInterval;
52
- movementSpeedScale: number;
53
- _phi: MomentumAxis;
54
- _theta: MomentumAxis;
55
- _tx: MomentumAxis;
56
- _ty: MomentumAxis;
57
- _tz: MomentumAxis;
58
- distance: number;
59
- _directDirty: boolean;
60
- _fly: {
61
- phi0: number;
62
- theta0: number;
63
- dist0: number;
64
- tx0: number;
65
- ty0: number;
66
- tz0: number;
67
- phi1: number;
68
- theta1: any;
69
- dist1: number;
70
- tx1: number;
71
- ty1: number;
72
- tz1: number;
73
- t: number;
74
- };
75
- _basisTransform: Transform64;
76
- _scratchTransform: Transform64;
77
- _scratchTarget: Vector3;
78
- /** Begin an orbit drag (pointer down). Cancels any coast/fly and takes direct control. */
79
- engageRotate(): void;
80
- /**
81
- * Apply an orbit delta directly (1:1). `dPhi` pitches (clamped to the polar
82
- * range), `dTheta` yaws. Radians.
83
- * @param {number} dPhi
84
- * @param {number} dTheta
85
- */
86
- rotate(dPhi: number, dTheta: number): void;
87
- /** End the orbit drag (pointer up): throw with the recent input velocity (or stop dead). */
88
- disengageRotate(): void;
89
- /** Begin a pan drag (pointer down, pan button). */
90
- engagePan(): void;
91
- /**
92
- * Screen-space pan: drag the target in the current view plane, directly (1:1).
93
- * `dx`/`dy` are pointer-pixel deltas (sign: last − current, "grab the world").
94
- * @param {number} dx pixels
95
- * @param {number} dy pixels
96
- * @param {number} viewportHeight pixels
97
- * @param {number} fov vertical fov, radians
98
- */
99
- panScreen(dx: number, dy: number, viewportHeight: number, fov: number): void;
100
- /** End the pan drag: throw the target with the recent velocity (or stop dead). */
101
- disengagePan(): void;
102
- /** Abort direct control without throwing, retaining the last applied pose. */
103
- cancelGesture(): void;
104
- /**
105
- * Multiplicative zoom, applied directly. `factor < 1` zooms in, `> 1` out.
106
- * Scale-uniform and clamped to {@link distanceLimits}.
107
- * @param {number} factor
108
- */
109
- dolly(factor: number): void;
110
- /** Set the zoom distance directly (world units), clamped. */
111
- setDistance(distance: any): void;
112
- /**
113
- * Keyboard fly: move the target in the camera-local XZ plane (directly).
114
- * `x` strafe (±1), `z` forward/back (±1); speed scales with
115
- * {@link movementSpeedScale} and zoom-out, integrated over `dt`.
116
- * @param {number} x
117
- * @param {number} z
118
- * @param {number} dt seconds
119
- */
120
- truckLocal(x: number, z: number, dt: number): void;
121
- /**
122
- * Point the camera at `to` from `from`. Instant by default (snap), or an
123
- * eased glide over `config.flyToDuration` when `animate` is true.
124
- * @param {Vector3} from eye position
125
- * @param {Vector3} to look-at target
126
- * @param {object} [opts]
127
- * @param {boolean} [opts.animate=false]
128
- */
129
- frameTo(from: Vector3, to: Vector3, { animate }?: {
130
- animate?: boolean;
131
- }): void;
132
- /**
133
- * Advance one frame. Returns whether the pose changed (so the caller can skip
134
- * a redundant transform write when the camera is fully at rest).
135
- * @param {number} dt seconds
136
- * @returns {boolean}
137
- */
138
- update(dt: number): boolean;
139
- /**
140
- * Write the current pose into `out` (position + look rotation), preserving
141
- * its scale. Returns `out`.
142
- * @param {Transform} out
143
- * @returns {Transform}
144
- */
145
- composeTransform(out: Transform): Transform;
146
- get phi(): number;
147
- get theta(): number;
148
- /** True when nothing is engaged, coasting, or flying. */
149
- get isAtRest(): boolean;
150
- /**
151
- * Current target. Writes into `out` if given (no allocation), else a shared
152
- * scratch vector — copy it if you need to retain it.
153
- * @param {Vector3} [out]
154
- * @returns {Vector3}
155
- */
156
- getTarget(out?: Vector3): Vector3;
157
- _advanceFly(dt: any): boolean;
158
- _deriveOrbit(from: any, to: any): {
159
- phi: number;
160
- theta: number;
161
- distance: number;
162
- };
163
- _currentTarget(): Vector3;
164
- /** Matrix of the current pose, for deriving the pan/truck view basis. */
165
- _currentBasisMatrix(): Float64Array;
166
- _poseToTransform(out: any, phi: any, theta: any, radius: any, target: any): void;
167
- /** Representative of `target` angle nearest `current` (shortest arc). */
168
- _shortestAzimuth(target: any, current: any): any;
169
- }
170
- import { NumericInterval } from "../../../../core/math/interval/NumericInterval.js";
171
- import { MomentumAxis } from "./MomentumAxis.js";
172
- import { Transform64 } from "../../../../engine/ecs/transform/Transform64.js";
173
- import Vector3 from "../../../../core/geom/Vector3.js";
174
- import { createOrbitalCameraConfig } from "./OrbitalCameraConfig.js";
175
- //# sourceMappingURL=OrbitalCameraRig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrbitalCameraRig.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/camera/orbital/OrbitalCameraRig.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IACI;;;;;OAKG;IACH;QAJkE,MAAM,GAA7D,WAAW,gCAAgC,CAAC;QAClB,cAAc,GAAxC,eAAe;QACE,kBAAkB,GAAnC,MAAM;OA4BhB;IAzBG;;;;kCAPJ;;;;;WAKG;;;;;;;;;OAEqB;IACpB,gCAAsE;IACtE,2BAA4C;IAG5C,mBAAyC;IACzC,qBAAiC;IACjC,kBAA8B;IAC9B,kBAA8B;IAC9B,kBAA8B;IAG9B,iBAAiB;IAIjB,sBAAyB;IAGzB;;;;;;;;;;;;;;MAAgB;IAGhB,6BAAwC;IACxC,+BAA0C;IAC1C,wBAAmC;IAOvC,0FAA0F;IAC1F,qBAIC;IAED;;;;;OAKG;IACH,aAHW,MAAM,UACN,MAAM,QAKhB;IAED,4FAA4F;IAC5F,wBAGC;IAMD,mDAAmD;IACnD,kBAKC;IAED;;;;;;;OAOG;IACH,cALW,MAAM,MACN,MAAM,kBACN,MAAM,OACN,MAAM,QAsBhB;IAED,kFAAkF;IAClF,qBAMC;IAED,8EAA8E;IAC9E,sBAQC;IAMD;;;;OAIG;IACH,cAFW,MAAM,QAQhB;IAED,6DAA6D;IAC7D,iCAGC;IAED;;;;;;;OAOG;IACH,cAJW,MAAM,KACN,MAAM,MACN,MAAM,QAuBhB;IAMD;;;;;;;OAOG;IACH,cALW,OAAO,MACP,OAAO;QAEQ,OAAO,GAAtB,OAAO;aAyBjB;IAMD;;;;;OAKG;IACH,WAHW,MAAM,GACJ,OAAO,CAoCnB;IAED;;;;;OAKG;IACH,4CASC;IAID,kBAAqC;IACrC,oBAAyC;IACzC,yDAAyD;IACzD,wBAQC;IAED;;;;;OAKG;IACH,gBAHW,OAAO,GACL,OAAO,CAMnB;IAMD,8BAiBC;IAED;;;;MAaC;IAED,0BAGC;IAED,yEAAyE;IACzE,oCAOC;IAED,iFAYC;IAED,yEAAyE;IACzE,iDAIC;CACJ;gCAtZ+B,mDAAmD;6BAGtD,mBAAmB;4BADpB,iDAAiD;oBADzD,kCAAkC;0CAGZ,0BAA0B"}