@woosh/meep-engine 3.39.0 → 3.41.0

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 (561) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
  4. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
  5. package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
  6. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
  7. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
  8. package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
  9. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
  10. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
  11. package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
  12. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
  13. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
  14. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
  15. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
  16. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
  17. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
  18. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
  19. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
  20. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
  21. package/src/engine/EngineHarness.d.ts.map +1 -1
  22. package/src/engine/EngineHarness.js +17 -4
  23. package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
  24. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  25. package/src/engine/animation/curve/AnimationCurve.js +6 -1
  26. package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
  27. package/src/engine/ecs/EntityManager.d.ts +9 -1
  28. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  29. package/src/engine/ecs/EntityManager.js +26 -27
  30. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
  31. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
  32. package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
  33. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
  34. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
  35. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
  36. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
  37. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
  38. package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
  39. package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
  40. package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
  41. package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
  42. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
  43. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
  44. package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
  45. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
  46. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
  47. package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
  48. package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
  49. package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
  50. package/src/engine/ecs/ik/IKGoal.js +83 -0
  51. package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
  52. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
  53. package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
  54. package/src/engine/ecs/ik/PLAN.md +179 -0
  55. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  56. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  57. package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
  58. package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
  59. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
  60. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  61. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +5 -2
  62. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
  63. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
  64. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
  65. package/src/engine/ecs/transform/T64WorldCache.js +139 -139
  66. package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
  67. package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
  68. package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
  69. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
  70. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
  71. package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
  72. package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
  73. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  74. package/src/engine/graphics/ecs/water/Water.js +100 -110
  75. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  76. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
  77. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
  78. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
  79. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
  80. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
  81. package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
  82. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
  83. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
  84. package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
  85. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  86. package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
  87. package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
  88. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  89. package/src/engine/graphics3/AnimationSystem.js +360 -352
  90. package/src/engine/graphics3/WaterSystem.d.ts +21 -74
  91. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  92. package/src/engine/graphics3/WaterSystem.js +174 -367
  93. package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
  94. package/src/engine/physics/cloth/PLAN.md +16 -1
  95. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
  96. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  97. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
  98. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
  99. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  100. package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
  101. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
  102. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  103. package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
  104. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  105. package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
  106. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
  107. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  108. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
  109. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
  110. package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
  111. package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
  112. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  113. package/src/engine/physics/constraint/solve_constraints.js +1 -83
  114. package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
  115. package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
  116. package/src/engine/physics/ecs/ContactProbe.js +103 -0
  117. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
  118. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
  119. package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
  120. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
  121. package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
  122. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  123. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
  124. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
  125. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
  126. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
  127. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
  128. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
  129. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
  130. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
  131. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
  132. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
  133. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
  134. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
  135. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
  136. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
  137. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
  138. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
  139. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
  140. package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
  141. package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
  142. package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
  143. package/src/format/image/avif/api/convert_to_rgba.js +10 -9
  144. package/src/format/image/avif/api/decode_avif.d.ts +2 -2
  145. package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
  146. package/src/format/image/avif/api/decode_avif.js +1 -1
  147. package/src/shade/playground/ssr_reprojection/README.md +111 -103
  148. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
  149. package/src/shade/playground/ssr_reprojection/index.html +80 -79
  150. package/src/shade/playground/ssr_reprojection/main.js +256 -247
  151. package/src/shade/playground/ssr_variance/capture.js +96 -96
  152. package/src/shade/playground/ssr_variance/reference.js +78 -78
  153. package/src/shade/playground/vsm/README.md +96 -0
  154. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
  155. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
  156. package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
  157. package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
  158. package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
  159. package/src/shade/playground/vsm/clipmap_panel.js +138 -0
  160. package/src/shade/playground/vsm/index.html +170 -0
  161. package/src/shade/playground/vsm/main.d.ts +2 -0
  162. package/src/shade/playground/vsm/main.d.ts.map +1 -0
  163. package/src/shade/playground/vsm/main.js +389 -0
  164. package/src/shade/playground/vsm/scenes.d.ts +52 -0
  165. package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
  166. package/src/shade/playground/vsm/scenes.js +320 -0
  167. package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
  168. package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
  169. package/src/shade/playground/vsm/verify_vsm.js +305 -0
  170. package/src/shade/playground/water_refraction/README.md +57 -9
  171. package/src/shade/playground/water_refraction/main.js +12 -3
  172. package/src/shade/playground/water_refraction/world.d.ts +1 -0
  173. package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
  174. package/src/shade/playground/water_refraction/world.js +15 -5
  175. package/src/shade/renderer/Renderer.d.ts +19 -0
  176. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  177. package/src/shade/renderer/Renderer.js +72 -1
  178. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
  179. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
  180. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +18 -4
  181. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  182. package/src/shade/renderer/animation/GPUAnimationManager.js +269 -23
  183. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
  184. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  185. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
  186. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  187. package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
  188. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
  189. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
  190. package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
  191. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
  192. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  193. package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
  194. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
  195. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  196. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
  197. package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
  198. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
  199. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
  201. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
  202. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  203. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
  204. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
  205. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  206. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
  207. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
  208. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
  209. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
  210. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
  211. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
  212. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  213. package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
  214. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  215. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
  216. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  217. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
  218. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
  219. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
  220. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
  221. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
  222. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
  223. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  224. package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
  225. package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
  226. package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
  227. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
  228. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
  229. package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
  230. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
  231. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  232. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
  233. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
  234. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
  235. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  236. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
  237. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  238. package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
  239. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
  240. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
  241. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
  242. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
  243. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
  244. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
  245. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  246. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
  247. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
  248. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
  249. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
  250. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
  251. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
  252. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
  253. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
  254. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
  255. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
  256. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
  257. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  258. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
  259. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
  260. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  261. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
  262. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
  263. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
  264. package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
  265. package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
  266. package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
  267. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
  268. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  269. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
  270. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
  271. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  272. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
  273. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
  274. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
  275. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
  276. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  277. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
  278. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
  279. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  280. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
  281. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
  282. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
  283. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
  284. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
  285. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
  286. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
  287. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
  288. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
  289. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
  290. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
  291. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  292. package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
  293. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
  294. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
  295. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
  296. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
  297. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
  298. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
  299. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
  300. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
  301. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
  302. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
  303. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
  304. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
  305. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
  306. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  307. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
  308. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
  309. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  310. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
  311. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
  312. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  313. package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
  314. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
  315. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
  316. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
  317. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
  318. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  319. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
  320. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
  321. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
  322. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
  323. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
  324. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
  325. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
  326. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
  327. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
  328. package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
  329. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
  330. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
  331. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
  332. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
  333. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
  334. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
  335. package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
  336. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
  337. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
  338. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
  339. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
  340. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
  341. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
  342. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
  343. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
  344. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
  345. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
  346. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
  347. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
  348. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
  349. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
  350. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
  351. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
  352. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
  353. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
  354. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
  355. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  356. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
  357. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
  358. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
  359. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
  360. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
  361. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
  362. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
  363. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
  364. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
  365. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
  366. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
  367. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
  368. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
  369. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
  370. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
  371. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
  372. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
  373. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
  374. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
  375. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
  376. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
  377. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
  378. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
  379. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
  380. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
  381. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
  382. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
  383. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
  384. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
  385. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
  386. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
  387. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
  388. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
  389. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
  390. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
  391. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
  392. package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
  393. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
  394. package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
  395. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
  396. package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
  397. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
  398. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
  399. package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
  400. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
  401. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
  402. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
  403. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
  404. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
  405. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
  406. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
  407. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
  408. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
  409. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
  410. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  411. package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
  412. package/src/shade/renderer/water/chunk_water_transport.js +3 -3
  413. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
  414. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  415. package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
  416. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
  417. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
  418. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
  419. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
  420. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
  421. package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
  422. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
  423. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
  424. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
  425. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
  426. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
  427. package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
  428. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
  429. package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
  430. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
  431. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -74
  432. package/src/shade/renderer/water/shader_water.d.ts +1 -1
  433. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  434. package/src/shade/renderer/water/shader_water.js +490 -406
  435. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
  436. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
  437. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
  438. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
  439. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
  440. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
  441. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
  442. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
  443. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
  444. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
  445. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
  446. package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
  447. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
  448. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
  449. package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
  450. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
  451. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
  452. package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
  453. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
  454. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
  455. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
  456. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
  457. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
  458. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
  459. package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
  460. package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
  461. package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
  462. package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
  463. package/src/engine/ecs/ik/IKConstraint.js +0 -95
  464. package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
  465. package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
  466. package/src/engine/ecs/ik/IKProblem.js +0 -58
  467. package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
  468. package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
  469. package/src/engine/ecs/ik/IKSolver.js +0 -9
  470. package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
  471. package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
  472. package/src/engine/ecs/ik/InverseKinematics.js +0 -119
  473. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
  474. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
  475. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
  476. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
  477. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
  478. package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
  479. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
  480. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
  481. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
  482. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
  483. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
  484. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
  485. package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
  486. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
  487. package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
  488. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
  489. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
  490. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
  491. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
  492. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
  493. package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
  494. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
  495. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
  496. package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
  497. package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
  498. package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
  499. package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
  500. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
  501. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
  502. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
  503. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
  504. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
  505. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
  506. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
  507. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
  508. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
  509. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
  510. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
  511. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
  512. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
  513. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
  514. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
  515. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
  516. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
  517. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
  518. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
  519. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
  520. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
  521. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
  522. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
  523. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
  524. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
  525. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
  526. package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
  527. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
  528. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
  529. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
  530. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
  531. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
  532. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
  533. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
  534. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
  535. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
  536. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
  537. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
  538. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
  539. package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
  540. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
  541. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
  542. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
  543. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
  544. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
  545. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
  546. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
  547. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
  548. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
  549. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
  550. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
  551. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
  552. package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
  553. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
  554. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
  555. package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
  556. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
  557. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
  558. package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
  559. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
  560. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
  561. package/src/shade/renderer/water/surface/water_surface_grid_indices.js +0 -39
@@ -0,0 +1,179 @@
1
+ # IK — trees, goals on bones, joints and contacts from physics
2
+
3
+ > Revision 5, 2026-10-06. **S1–S4 are implemented** (2026-10-06); S5 is later. What implementing
4
+ > it measured or decided beyond this text is in §9. The solver (§2) was accepted at revision 2. Revisions 3–5 settle the components, limits, contacts and clip-driven bones. Each
5
+ > revision went through an adversarial review. Numbers come from one-off probes outside the repo,
6
+ > and every stage re-pins what it relies on with a failing spec first.
7
+
8
+ ## 1. Where it stands (master `c01c0ebbd`)
9
+
10
+ - `physics/inverse_kinematics/fabrik/` solves one chain, and nothing calls it.
11
+ - The ECS IK (`2BIK`, `1BSA`) reads name-keyed `IKConstraint` lists on an `InverseKinematics`
12
+ component, and probes `Terrain` directly.
13
+ - **Holds** (`gpu_authority_hold`): a CPU writer takes a joint's `TransformAttachment`. The
14
+ animation manager mutes every clip binding that names the joint, and `t64_evaluate_world` /
15
+ `T64WorldCache` read the held offset. Cloth uses this.
16
+ - `two_joint_ik` takes the knee's hinge. The CPU pose twin matches the GPU resolve.
17
+
18
+ ## 2. Solver: frame FABRIK over a tree
19
+
20
+ **Unchanged.**
21
+ - Every solved joint is a frame: rigid offsets to its children, with its rotation fitted inward
22
+ (from its old position) and outward. With one child this is the paper's pull.
23
+ - Fits start from the carried rotation, so nothing drifts.
24
+ - A goal's path runs from its effector to its `chain_root`. A link carries the weight of the goals
25
+ whose path holds both ends, and a `chain_root` takes rotation, never position.
26
+ - The target is `lerp(carried, goal, w)`. Weight 0 gives the same pose as no goal, and the result is
27
+ continuous in `w`.
28
+ - Two-bone paths use `two_joint_ik`. Twist is held from the animated pose, and the effector's
29
+ rotation is slerped toward the goal after the solve.
30
+ - Worst error at 16 iterations is 0.005–1.34 mm across the probe cases. The paper's point branches
31
+ miss by 8–49 mm once written back.
32
+
33
+ ## 3. Components: on the bones, limits from physics
34
+
35
+ Data lives on the entity it describes, and the tree is the `TransformAttachment` hierarchy. Meep's
36
+ own rig setup puts these components on the bones when the instance is created.
37
+
38
+ **`IKGoal`, on the effector bone.**
39
+
40
+ | field | meaning |
41
+ |---|---|
42
+ | `target` | entity id. Its world pose is the goal. |
43
+ | `chain_root` | entity id, an ancestor-or-self of the effector: the highest bone this goal rotates |
44
+ | `position_weight`, `rotation_weight` | 0..1 |
45
+
46
+ - References are fixed while attached.
47
+ - The goal removes itself when its target or any joint on its path is destroyed, as
48
+ `TransformAttachment` does when its parent dies.
49
+ - A rejected goal holds nothing. Rejection is a real branch plus an assert, because asserts are
50
+ stripped in production. A goal is rejected for:
51
+ - a `chain_root` that is not an ancestor-or-self of the effector;
52
+ - a target hanging below its own path;
53
+ - a two-bone path whose knee has no bend side.
54
+ - A target hanging below *another* goal's joints in the same tree (a grip on a weapon held by the
55
+ other hand) is read from the solver's current frames on every iteration. Convergence is measured
56
+ in S4.
57
+ - Across groups, dependencies order the solves, and a cycle rejects both groups.
58
+
59
+ **Joint limits are the physics `Joint` on the bone.** Physics already has this as a 6-DOF
60
+ description (PhysX D6): per-axis `DofMode`, limits, `localBasisA/B`, and two entity ids.
61
+ - On a bone, `entityA` is the parent bone and `entityB` is the bone itself.
62
+ - Asserted at link:
63
+ - `entityA` equals `TransformAttachment.parent`;
64
+ - `localBasisA = rest_local · localBasisB`;
65
+ - `swingTwist` is on. Without it, physics measures angles as 2 sin(θ/2), so limits above 114.6°
66
+ never engage and physics and IK would disagree.
67
+ - **Hinge** (`asHinge`) gives the knee's `mid_axis`. Its bend side comes from asymmetric limits.
68
+ - **Cone-twist** gives twist on X and separate Y/Z swing, and IK clamps to the same box physics
69
+ allows.
70
+ - IK ignores anchors, linear DOFs, SPRING and MOTOR.
71
+ - **Shared maths.** `swing_twist_error*` moves from `physics/constraint/solve_constraints.js` to
72
+ `core/geom/3d/quaternion/`; the clamp is new.
73
+ - **Contract.** Physics simulates a `Joint` only when both sides have a body (or `JOINT_WORLD`).
74
+ Otherwise it is a kinematic limit. Nothing observes `Joint` today.
75
+
76
+ **Solver settings** (`max_iterations`, `tolerance`) belong to the system.
77
+
78
+ ## 4. Contacts come from physics
79
+
80
+ A foot is a joint, the ground is a collider, and contact points are physics' job. IK probes
81
+ nothing: today's terrain prober goes, and nothing here touches `Terrain` or `ClingToTerrain`.
82
+
83
+ - **A goal that should touch a surface** gets its target from a physics query: a ray or shape cast
84
+ (`PhysicsSystem.raycast`, `shapeCast`) from a reference the rig provides, returning a
85
+ `PhysicsSurfacePoint` (position, normal, entity).
86
+ - **The component lives in the physics package.** It is a generic contact-probe component that
87
+ places its entity at the hit and aligns it to the normal. It knows nothing about IK or feet, so
88
+ footsteps, decals and AI can use it too. Physics has no query component today;
89
+ `PhysicsSurfacePoint` was written with "a ground sensor" in mind.
90
+ - **Its contract:**
91
+ - it exact-evaluates a GPU-composed reference through `T64WorldCache`;
92
+ - it writes its own attachment offset;
93
+ - it skips the character's own colliders (same `ParentEntity` root);
94
+ - it runs in `update`, before IK;
95
+ - its reference must not be held by IK, or the target would chase IK's output (asserted by the
96
+ IK side, §3).
97
+ - Pelvis lowering comes later.
98
+
99
+ ## 5. Bones a clip drives: IK holds them
100
+
101
+ Downstream code (`t64_evaluate_world`, `T64WorldCache`, sockets, cloth anchors, the GPU hierarchy)
102
+ reads the held offset exactly as it reads cloth's, and never learns that IK exists.
103
+
104
+ - **Link:** hold `TransformAttachment` on every joint of the path, capture the offsets, and write the
105
+ evaluated base pose at once, so no frame shows the bind pose.
106
+ - **Every tick:** write each held joint's full local: translation, rotation and scale, since a hold
107
+ mutes every channel. The base comes from `pose_evaluate_local`, never from a held offset.
108
+ - **Unlink:** write the captured offset back, then unhold, guarded by `entityExists`.
109
+ - **One holder per joint:** IK on a cloth-held joint trips the existing assert.
110
+ - **Cost:** 37 / 127 / 531 µs per character per tick at 2 / 8 / 30 registered clips (34 levels),
111
+ because every level scans every channel of every clip.
112
+ - **Ordering:** IK declares what it reads, `Animation` and `AnimationGraphController`. The drivers
113
+ declare that they write them. With the scheduler fixed (below), IK then runs after the drivers.
114
+ Cloth needs no order against IK: it runs in `fixedUpdate` on the previous update's consistent
115
+ state.
116
+
117
+ ## 6. Prerequisites (separate tasks)
118
+
119
+ 1. **Holds: LANDED** (`84f2f7267`, `c01c0ebbd`). A clip that binds during a hold takes the rest the holder
120
+ leaves when the hold ends, and that offset reaches the row.
121
+ 2. **Pose evaluator:** index channels by target (the cost row above). Sockets and cloth gain too.
122
+ 3. **Scheduler:** a system that reads X and writes Y sorts before the writer of X. Measured with
123
+ synthetic components: Producer (X) and Consumer (X → Y) order as `Consumer > Producer` in both
124
+ registration orders. `system_execution_order.spec.js` covers only a pure reader. The fix stays
125
+ inside derived ordering.
126
+
127
+ ## 7. Stages
128
+
129
+ Each stage is red-then-green.
130
+
131
+ 1. **S1 Frame FABRIK:** a pure solver over typed arrays.
132
+ 2. **S2 Two-bone paths:** `two_joint_ik` with the hinge read from the `Joint`.
133
+ 3. **S3 Limits:** the shared swing-twist maths, the clamp, and `Joint` frames inside the passes.
134
+ 4. **S4 ECS, landing together:**
135
+ - `IKGoal` and its system (groups, holds, base evaluation, target reads, declarations);
136
+ - the physics contact-probe component;
137
+ - in the same change, `InverseKinematics`, `IKConstraint`, `2BIK`, `1BSA`, the terrain prober
138
+ and the adapter go (hard break).
139
+ 5. **S5 Later:** pelvis lowering, twist distribution, goal priority, pole goals.
140
+
141
+ ## 8. Sources
142
+
143
+ - [A] Aristidou, Chrysanthou, Lasenby, *Extending FABRIK with model constraints*, CAVW 2016
144
+ - [C] Aristidou, Lasenby, *FABRIK*, Graphical Models 73, 2011
145
+ - [D] Baerlocher, Boulic, *Parametrization and range of motion of the ball-and-socket joint*, 2001
146
+ - [G] UE 5.4 source: `Plugins/Experimental/FullBodyIK/Source/PBIK/`, `AnimNode_FootPlacement`
147
+ - [N] ozz-animation `ik_two_bone_job.h`, `samples/foot_ik/sample_foot_ik.cc`
148
+
149
+ ## 9. After implementation (2026-10-06)
150
+
151
+ Measured while implementing S1–S4, and decided with the owner where it changed anything.
152
+
153
+ - **The fit** is 8 steps of power iteration warm-started from the carried rotation: 110–130 ns a fit
154
+ against 610–790 ns for the exact Jacobi fit, which also turns the chest about its shoulder line
155
+ from rounding (a 40–175° bend at the chest joint, converged, where the warm start bends 0–54°).
156
+ - **The 0/0** of this mechanism is a target on the effector's parent, at any bone lengths: the parent
157
+ is fitted toward a child sitting on its old position. A target at a limb's top with equal bones is
158
+ finite and reached. A straight arm turned only at the shoulder, its target exactly on the elbow,
159
+ has no side to fold to and stays (finite); 1e-12 m off, it reaches.
160
+ - **An effector inside another goal's path** (a goal on the elbow under a goal on the hand) is one
161
+ more proposal in its joint's mean, weighted by its goal's weight (owner's decision; pinning it at
162
+ its target moved the pose 161 mm at weight 0). Weight 0 is no goal, 0.001 moves it 0.05 mm, and two
163
+ equal goals that disagree meet half way.
164
+ - **`FrameFabrikProblem` takes `base_local_rotation`**: a goal's root is limited against its
165
+ parent's fixed frame, which world rotations alone do not give.
166
+ - **A hinge alone on a longer path can lock**: the arc fits never twist the shoulder to bring an
167
+ elbow's hinge plane round, so a target off it left the arm straight, 350 / 334 mm short; a
168
+ cone-twist on the shoulder unlocks it (1.4 mm at 16 iterations, 0 at 64). Hinges also slow a grip
169
+ pair down: 65 / 220 mm at 16 iterations, 0 at 64. Two-bone paths are analytic and unaffected.
170
+ Stated, not fixed.
171
+ - **"Below its own path"** means the deepest posed bone the target hangs from is a bone of the goal's
172
+ own path. A grip on a weapon in the other hand hangs below the gripping hand's own chest too, but
173
+ the other arm's bones carry it, so it is read from the solver's frames. Known only with every goal,
174
+ so it is found when the groups are formed; a target below the effector itself is refused at link.
175
+ - **The contact probe** casts a sphere of `radius`, a ray at 0. It and IK both read and write
176
+ `TransformAttachment`, so declared access leaves them a cycle and the scheduler keeps their
177
+ registration order: the probe is registered first (owner's decision). That its reference must not
178
+ be held by a CPU writer is documented on `ContactProbe`, not asserted (owner's decision): IK cannot
179
+ check it without knowing the probe's component.
@@ -9,7 +9,7 @@ export class VoiceSystem extends AbstractContextSystem<any> {
9
9
  font_size: number;
10
10
  });
11
11
  dependencies: (typeof Voice)[];
12
- components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof GUIElement> | ResourceAccessSpecification<typeof ViewportPosition> | ResourceAccessSpecification<typeof HeadsUpDisplay> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof SerializationMetadata> | ResourceAccessSpecification<typeof BehaviorComponent>)[];
12
+ components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof GUIElement> | ResourceAccessSpecification<typeof ViewportPosition> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof HeadsUpDisplay> | ResourceAccessSpecification<typeof SerializationMetadata> | ResourceAccessSpecification<typeof BehaviorComponent>)[];
13
13
  /**
14
14
  *
15
15
  * @type {Localization}
@@ -105,8 +105,8 @@ import { Transform64 } from "../transform/Transform64.js";
105
105
  import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
106
106
  import GUIElement from "../gui/GUIElement.js";
107
107
  import ViewportPosition from "../gui/position/ViewportPosition.js";
108
- import HeadsUpDisplay from "../gui/hud/HeadsUpDisplay.js";
109
108
  import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
109
+ import HeadsUpDisplay from "../gui/hud/HeadsUpDisplay.js";
110
110
  import { SerializationMetadata } from "../components/SerializationMetadata.js";
111
111
  import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js";
112
112
  //# sourceMappingURL=VoiceSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/speaker/VoiceSystem.js"],"names":[],"mappings":"AA0KA;IA2CI;;;;OAIG;IACH;;;OA8CC;IA7FD,+BAAuB;IACvB,gZAQE;IAEF;;;OAGG;IACH,0BAAmB;IAEnB;;;OAGG;IACH,eAAW;IAEX;;;OAGG;IACH,4BAAa;IAEb;;;OAGG;IACH,8BAAY;IAEZ;;;;OAIG;IACH,iCAAqC;IAajC;;;OAGG;IACH,eAAoB;IAEpB;;;;OAIG;IACH,kBAAkC;IAGlC;;;;OAIG;IACH,eAAkB;IAElB;;;;OAIG;IACH,oBAAgC;IAEhC;;;OAGG;IACH,oBAAqC;IAErC;;;;OAIG;IACH,gBAAoB;IAGxB;;;OAGG;IACH,kBAFY,MAAM,CAIjB;IAEF,2CAqBE;IAED;;;;;OAKG;IACH,uBAJW,MAAM,UACN,MAAM,SACN,KAAK,QAsBf;IAED;;;;;;OAMG;IACH,wBAoBC;IAED;;;;;OAKG;IACH,gBAJW,MAAM,WACN,MAAM,SACN,KAAK,QAiIf;CACJ;sCA5cqC,oCAAoC;sBAKpD,YAAY;4BAFN,6BAA6B;4CAxBb,oDAAoD;uBAkBzE,sBAAsB;6BAEhB,qCAAqC;2BADvC,8BAA8B;oCAIrB,gDAAgD;sCAR9C,wCAAwC;kCAP5C,sDAAsD"}
1
+ {"version":3,"file":"VoiceSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/speaker/VoiceSystem.js"],"names":[],"mappings":"AA0KA;IA2CI;;;;OAIG;IACH;;;OA8CC;IA7FD,+BAAuB;IACvB,gZAQE;IAEF;;;OAGG;IACH,0BAAmB;IAEnB;;;OAGG;IACH,eAAW;IAEX;;;OAGG;IACH,4BAAa;IAEb;;;OAGG;IACH,8BAAY;IAEZ;;;;OAIG;IACH,iCAAqC;IAajC;;;OAGG;IACH,eAAoB;IAEpB;;;;OAIG;IACH,kBAAkC;IAGlC;;;;OAIG;IACH,eAAkB;IAElB;;;;OAIG;IACH,oBAAgC;IAEhC;;;OAGG;IACH,oBAAqC;IAErC;;;;OAIG;IACH,gBAAoB;IAGxB;;;OAGG;IACH,kBAFY,MAAM,CAIjB;IAEF,2CAqBE;IAED;;;;;OAKG;IACH,uBAJW,MAAM,UACN,MAAM,SACN,KAAK,QAsBf;IAED;;;;;;OAMG;IACH,wBAoBC;IAED;;;;;OAKG;IACH,gBAJW,MAAM,WACN,MAAM,SACN,KAAK,QAiIf;CACJ;sCA5cqC,oCAAoC;sBAKpD,YAAY;4BAFN,6BAA6B;4CAxBb,oDAAoD;uBAkBzE,sBAAsB;6BAEhB,qCAAqC;oCAG9B,gDAAgD;2BAJzD,8BAA8B;sCAJnB,wCAAwC;kCAP5C,sDAAsD"}
@@ -1 +1 @@
1
- {"version":3,"file":"BinaryBufferSerializer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/BinaryBufferSerializer.js"],"names":[],"mappings":";AAmDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IACI;;;OAGG;IACH,sCAAgB;IAEhB;;;OAGG;IACH,QAFU,GAAG,GAAC,IAAI,CAEJ;IAEd;;;;OAIG;IACH,qEAmIC;CACJ"}
1
+ {"version":3,"file":"BinaryBufferSerializer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/BinaryBufferSerializer.js"],"names":[],"mappings":";AAkDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IACI;;;OAGG;IACH,sCAAgB;IAEhB;;;OAGG;IACH,QAFU,GAAG,GAAC,IAAI,CAEJ;IAEd;;;;OAIG;IACH,qEAmIC;CACJ"}
@@ -24,15 +24,14 @@ function isComponentClassSerializable(componentClass) {
24
24
  * @returns {boolean}
25
25
  */
26
26
  function isEntityTransient(entity, dataset, smComponentIndex, componentInstance) {
27
- if (smComponentIndex === -1) {
28
- return false;
29
- }
30
-
31
- //check component instance flag
27
+ //check component instance flag, it does not depend on SerializationMetadata
32
28
  if (componentInstance[COMPONENT_SERIALIZATION_TRANSIENT_FIELD] === true) {
33
29
  return true;
34
30
  }
35
31
 
32
+ if (smComponentIndex === -1) {
33
+ return false;
34
+ }
36
35
 
37
36
  /**
38
37
  *
@@ -57,8 +57,8 @@ threw, no save containing these behaviours can exist, so there is no data to sta
57
57
 
58
58
  ## Adapters still without a spec
59
59
 
60
- 29 files, of which `BinaryClassSerializationAdapter.js` (the base class) and
61
- `ObjectBasedClassSerializationAdapter.js` (a helper) are not adapters — so **27 real ones**. Every entry is an
60
+ 28 files, of which `BinaryClassSerializationAdapter.js` (the base class) and
61
+ `ObjectBasedClassSerializationAdapter.js` (a helper) are not adapters — so **26 real ones**. Every entry is an
62
62
  adapter nothing currently verifies.
63
63
 
64
64
  Sixteen of these are the ones whose `serialize` threw under the old harness. That is not a coincidence and it
@@ -71,7 +71,6 @@ fixture rather than a default instance. `FogOfWar` needs correctly-sized height
71
71
  | `Animation` | `engine/ecs/animation/AnimationSerializationAdapter.js` |
72
72
  | `FogOfWar` | `engine/ecs/fow/serialization/FogOfWarSerializationAdapter.js` |
73
73
  | `GUIElement` | `engine/ecs/gui/GUIElementSerializationAdapter.js` |
74
- | `InverseKinematics` | `engine/ecs/ik/InverseKinematicsSerializationAdapter.js` |
75
74
  | `Book` | `engine/ecs/storage/binary/BinaryClassSerializationAdapter.js` |
76
75
  | `?` | `engine/ecs/storage/binary/object/ObjectBasedClassSerializationAdapter.js` |
77
76
  | `Terrain` | `engine/ecs/terrain/serialization/TerrainSerializationAdapter.js` |
@@ -106,6 +105,11 @@ The per-upgrader spec should assert **the restored field values**, not the byte
106
105
  asserted. The byte count was a proxy it used because it had no idea what the values ought to be; a spec that
107
106
  names one upgrader does know, and should say so.
108
107
 
108
+ Upgraders added since carry that spec from the start. The first was IK's, which wrote a version 0 constraint
109
+ field by field, ran it through the chain the engine registry hands a load, and asserted every restored field;
110
+ it went with the component it upgraded (2026-10-06, a hard break: IK's goals live on bones, which are never
111
+ saved).
112
+
109
113
  ### Goldens to port
110
114
 
111
115
  ```js
@@ -1 +1 @@
1
- {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AAkLA;;;;;;;;GAQG;AACH,iGA4GC"}
1
+ {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AAmLA;;;;;;;;GAQG;AACH,iGA8GC"}
@@ -17,7 +17,6 @@ import { HeadsUpDisplaySerializationAdapter } from "../gui/hud/HeadsUpDisplaySer
17
17
  import {
18
18
  ViewportPositionSerializationAdapter
19
19
  } from "../gui/position/ViewportPositionSerializationAdapter.js";
20
- import { InverseKinematicsSerializationAdapter } from "../ik/InverseKinematicsSerializationAdapter.js";
21
20
  import { NameSerializationAdapter } from "../name/NameSerializationAdapter.js";
22
21
  import { TeamSerializationAdapter } from "../team/TeamSerializationAdapter.js";
23
22
  import ClingToTerrain from "../terrain/ecs/cling/ClingToTerrain.js";
@@ -89,6 +88,8 @@ import { WaterSerializationAdapter } from "../../graphics/ecs/water/WaterSeriali
89
88
  import { WaterSerializationUpgrader_0_1 } from "../../graphics/ecs/water/WaterSerializationUpgrader_0_1.js";
90
89
  import { WaterSerializationUpgrader_1_2 } from "../../graphics/ecs/water/WaterSerializationUpgrader_1_2.js";
91
90
  import { WaterSerializationUpgrader_2_3 } from "../../graphics/ecs/water/WaterSerializationUpgrader_2_3.js";
91
+ import { WaterSerializationUpgrader_3_4 } from "../../graphics/ecs/water/WaterSerializationUpgrader_3_4.js";
92
+ import { MeshletGeometrySerializationAdapter } from "../../../shade/renderer/geometry/MeshletGeometrySerializationAdapter.js";
92
93
  import { WaterWavesSerializationAdapter } from "../../graphics/ecs/water/WaterWavesSerializationAdapter.js";
93
94
  import { GridPosition2Transform } from "../../grid/grid2transform/GridPosition2Transform.js";
94
95
  import {
@@ -218,6 +219,7 @@ export function populateEngineSerializationRegistry(registry) {
218
219
  new ClingToTerrainSerializationAdapter(),
219
220
  new TerrainSerializationAdapter(),
220
221
  new WaterSerializationAdapter(),
222
+ new MeshletGeometrySerializationAdapter(),
221
223
  new WaterWavesSerializationAdapter(),
222
224
  new GridPosition2TransformSerializationAdapter(),
223
225
  new GridObstacleSerializationAdapter(),
@@ -234,7 +236,6 @@ export function populateEngineSerializationRegistry(registry) {
234
236
  new GUIElementSerializationAdapter(),
235
237
  new HeadsUpDisplaySerializationAdapter(),
236
238
  new BehaviorComponentSerializationAdapter(),
237
- new InverseKinematicsSerializationAdapter(),
238
239
  new TooltipComponentSerializationAdapter(),
239
240
  new DecalSerializationAdapter(),
240
241
  new PickableSerializationAdapter(),
@@ -286,6 +287,7 @@ export function populateEngineSerializationRegistry(registry) {
286
287
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_0_1());
287
288
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_1_2());
288
289
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_2_3());
290
+ registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_3_4());
289
291
 
290
292
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_0_1());
291
293
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_1_2());
@@ -293,4 +295,5 @@ export function populateEngineSerializationRegistry(registry) {
293
295
  registry.registerUpgrader(TopDownCameraController.typeName, new TopDownCameraControllerSerializationUpgrader_0_1());
294
296
 
295
297
  registry.registerUpgrader(ClingToTerrain.typeName, new ClingToTerrainSerializationUpgrader_0_1());
298
+
296
299
  }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Orders systems by what they declare they touch: a system that writes (or creates) a component
3
+ * runs before every other system that reads it, when the two run in the same pass.
4
+ *
5
+ * A pass is `fixedUpdate` or `update`. Every fixed step runs before the update pass whatever this
6
+ * order says, so a write in one pass and a read in the other orders nothing, and is not counted —
7
+ * counting it could only close a cycle out of edges that are each real. One order serves both
8
+ * passes, so a system in both carries its edges into both.
9
+ *
10
+ * Without a cycle the result is a topological order of those edges. Where they leave a choice, the
11
+ * system with the higher priority runs first, and of equal priorities the one earlier in `systems`.
12
+ *
13
+ * A cycle — two systems that both read and write one component is the common one — has no order
14
+ * that respects every edge. So the rule is stated over cycles: the next system to run is the
15
+ * highest priority (then earliest) of those that wait on nothing but their own cycle, and a system
16
+ * on no cycle that waits on nothing qualifies as its own. Running a member of a cycle drops its
17
+ * edges from the rest of that cycle and nothing else. A system that waits on a cycle from outside
18
+ * it never qualifies before the cycle has run, so the only edges dropped are edges on a cycle.
19
+ *
20
+ * A cycle and a system that waits on nothing compete on those same terms, so a cycle runs where
21
+ * its best member's priority puts it, never held back behind systems no edge relates to it. Where
22
+ * sorting by priority alone already respects every edge, the result is that sort; and the result
23
+ * depends on nothing but the declarations, the passes, the priorities and the order of `systems`.
24
+ *
25
+ * O(n²) per system placed, O(n³) in all; it runs when the set of running systems changes.
26
+ *
27
+ * @param {System[]} systems sorted in place, the first `system_count` of them
28
+ * @param {number} system_count
29
+ * @param {Float64Array|number[]} priorities one per system, in the order `systems` arrives in; higher runs earlier
30
+ */
31
+ export function orderSystemsByDeclaredAccess(systems: import("../System.js").System<any>[], system_count: number, priorities: Float64Array | number[]): void;
32
+ export type System = import("../System.js").System<any>;
33
+ //# sourceMappingURL=orderSystemsByDeclaredAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderSystemsByDeclaredAccess.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/system/orderSystemsByDeclaredAccess.js"],"names":[],"mappings":"AA8JA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,sDAJW,oCAAQ,gBACR,MAAM,cACN,YAAY,GAAC,MAAM,EAAE,QA+F/B"}
@@ -0,0 +1,282 @@
1
+ import { noop } from "../../../core/function/noop.js";
2
+ import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
3
+
4
+ /**
5
+ * @typedef {import("../System.js").System} System
6
+ */
7
+
8
+ const PASS_FIXED_UPDATE = 1;
9
+ const PASS_UPDATE = 2;
10
+
11
+ const WRITES = ResourceAccessKind.Write | ResourceAccessKind.Create;
12
+
13
+ /**
14
+ * Which of the two passes over the execution order a system takes part in. `openFixedStep` and
15
+ * `closeFixedStep` are not counted: they frame a step rather than simulate in it, and run outside
16
+ * the derived order on purpose (see {@link System#openFixedStep}).
17
+ *
18
+ * @param {System} system
19
+ * @returns {number} bitmask of PASS_* flags
20
+ */
21
+ function system_passes(system) {
22
+ let result = 0;
23
+
24
+ if (system.fixedUpdate !== noop) {
25
+ result |= PASS_FIXED_UPDATE;
26
+ }
27
+
28
+ if (system.update !== noop) {
29
+ result |= PASS_UPDATE;
30
+ }
31
+
32
+ return result;
33
+ }
34
+
35
+ /**
36
+ * @param {Map<Function, number[]>} map
37
+ * @param {Function} component
38
+ * @param {number} system_index
39
+ */
40
+ function map_push(map, component, system_index) {
41
+ const list = map.get(component);
42
+
43
+ if (list === undefined) {
44
+ map.set(component, [system_index]);
45
+ } else {
46
+ list.push(system_index);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Groups the unplaced systems into their strongly connected components — a cycle, or one system on
52
+ * no cycle — and marks each component that an unplaced system outside it still feeds. A component
53
+ * nothing outside it feeds holds systems that wait on nothing but each other, if on anything.
54
+ *
55
+ * Kosaraju's: a post-order over the edges, then trees over the reversed edges in reverse post-order,
56
+ * one component per tree. Iterative, O(n²) over the adjacency matrix.
57
+ *
58
+ * @param {number} system_count
59
+ * @param {Uint8Array} edges `edges[a * system_count + b] !== 0`: `a` runs before `b`
60
+ * @param {Uint8Array} placed
61
+ * @param {Int32Array} component output: component id per unplaced system
62
+ * @param {Uint8Array} fed output: per component id, 1 when something outside it feeds it
63
+ * @param {Uint8Array} visited scratch
64
+ * @param {Int32Array} post_order scratch
65
+ * @param {Int32Array} frame_system scratch, the depth-first stack
66
+ * @param {Int32Array} frame_next scratch, per stack frame the next system to look at
67
+ */
68
+ function label_components(
69
+ system_count, edges, placed,
70
+ component, fed,
71
+ visited, post_order, frame_system, frame_next
72
+ ) {
73
+ visited.fill(0);
74
+
75
+ let finished = 0;
76
+
77
+ for (let root = 0; root < system_count; root++) {
78
+ if (placed[root] !== 0 || visited[root] !== 0) {
79
+ continue;
80
+ }
81
+
82
+ visited[root] = 1;
83
+
84
+ let depth = 0;
85
+ frame_system[0] = root;
86
+ frame_next[0] = 0;
87
+
88
+ while (depth >= 0) {
89
+ const a = frame_system[depth];
90
+ let b = frame_next[depth];
91
+
92
+ while (b < system_count && (placed[b] !== 0 || visited[b] !== 0 || edges[a * system_count + b] === 0)) {
93
+ b++;
94
+ }
95
+
96
+ if (b < system_count) {
97
+ frame_next[depth] = b + 1;
98
+
99
+ visited[b] = 1;
100
+
101
+ depth++;
102
+ frame_system[depth] = b;
103
+ frame_next[depth] = 0;
104
+ } else {
105
+ post_order[finished++] = a;
106
+ depth--;
107
+ }
108
+ }
109
+ }
110
+
111
+ component.fill(-1);
112
+
113
+ let component_count = 0;
114
+
115
+ for (let k = finished - 1; k >= 0; k--) {
116
+ const root = post_order[k];
117
+
118
+ if (component[root] !== -1) {
119
+ continue;
120
+ }
121
+
122
+ component[root] = component_count;
123
+
124
+ // `frame_system` is free again, and serves as a plain stack
125
+ let top = 0;
126
+ frame_system[top++] = root;
127
+
128
+ while (top > 0) {
129
+ const b = frame_system[--top];
130
+
131
+ for (let a = 0; a < system_count; a++) {
132
+ if (placed[a] !== 0 || component[a] !== -1 || edges[a * system_count + b] === 0) {
133
+ continue;
134
+ }
135
+
136
+ component[a] = component_count;
137
+ frame_system[top++] = a;
138
+ }
139
+ }
140
+
141
+ component_count++;
142
+ }
143
+
144
+ fed.fill(0, 0, component_count);
145
+
146
+ for (let a = 0; a < system_count; a++) {
147
+ if (placed[a] !== 0) {
148
+ continue;
149
+ }
150
+
151
+ for (let b = 0; b < system_count; b++) {
152
+ if (placed[b] === 0 && edges[a * system_count + b] !== 0 && component[a] !== component[b]) {
153
+ fed[component[b]] = 1;
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Orders systems by what they declare they touch: a system that writes (or creates) a component
161
+ * runs before every other system that reads it, when the two run in the same pass.
162
+ *
163
+ * A pass is `fixedUpdate` or `update`. Every fixed step runs before the update pass whatever this
164
+ * order says, so a write in one pass and a read in the other orders nothing, and is not counted —
165
+ * counting it could only close a cycle out of edges that are each real. One order serves both
166
+ * passes, so a system in both carries its edges into both.
167
+ *
168
+ * Without a cycle the result is a topological order of those edges. Where they leave a choice, the
169
+ * system with the higher priority runs first, and of equal priorities the one earlier in `systems`.
170
+ *
171
+ * A cycle — two systems that both read and write one component is the common one — has no order
172
+ * that respects every edge. So the rule is stated over cycles: the next system to run is the
173
+ * highest priority (then earliest) of those that wait on nothing but their own cycle, and a system
174
+ * on no cycle that waits on nothing qualifies as its own. Running a member of a cycle drops its
175
+ * edges from the rest of that cycle and nothing else. A system that waits on a cycle from outside
176
+ * it never qualifies before the cycle has run, so the only edges dropped are edges on a cycle.
177
+ *
178
+ * A cycle and a system that waits on nothing compete on those same terms, so a cycle runs where
179
+ * its best member's priority puts it, never held back behind systems no edge relates to it. Where
180
+ * sorting by priority alone already respects every edge, the result is that sort; and the result
181
+ * depends on nothing but the declarations, the passes, the priorities and the order of `systems`.
182
+ *
183
+ * O(n²) per system placed, O(n³) in all; it runs when the set of running systems changes.
184
+ *
185
+ * @param {System[]} systems sorted in place, the first `system_count` of them
186
+ * @param {number} system_count
187
+ * @param {Float64Array|number[]} priorities one per system, in the order `systems` arrives in; higher runs earlier
188
+ */
189
+ export function orderSystemsByDeclaredAccess(systems, system_count, priorities) {
190
+ const passes = new Uint8Array(system_count);
191
+
192
+ /** @type {Map<Function, number[]>} */
193
+ const writers = new Map();
194
+ /** @type {Map<Function, number[]>} */
195
+ const readers = new Map();
196
+
197
+ for (let i = 0; i < system_count; i++) {
198
+ const system = systems[i];
199
+
200
+ passes[i] = system_passes(system);
201
+
202
+ const components = system.referenced_components;
203
+ const component_count = components.length;
204
+
205
+ for (let j = 0; j < component_count; j++) {
206
+ const component = components[j];
207
+
208
+ const access = system.getAccessForComponent(component);
209
+
210
+ if ((access & WRITES) !== 0) {
211
+ map_push(writers, component, i);
212
+ }
213
+
214
+ if ((access & ResourceAccessKind.Read) !== 0) {
215
+ map_push(readers, component, i);
216
+ }
217
+ }
218
+ }
219
+
220
+ // edges[a * system_count + b] !== 0: a runs before b
221
+ const edges = new Uint8Array(system_count * system_count);
222
+
223
+ for (const [component, component_writers] of writers) {
224
+ const component_readers = readers.get(component);
225
+
226
+ if (component_readers === undefined) {
227
+ continue;
228
+ }
229
+
230
+ for (let i = 0; i < component_writers.length; i++) {
231
+ const writer = component_writers[i];
232
+
233
+ for (let j = 0; j < component_readers.length; j++) {
234
+ const reader = component_readers[j];
235
+
236
+ if (writer === reader || (passes[writer] & passes[reader]) === 0) {
237
+ continue;
238
+ }
239
+
240
+ edges[writer * system_count + reader] = 1;
241
+ }
242
+ }
243
+ }
244
+
245
+ const placed = new Uint8Array(system_count);
246
+ const sorted = new Array(system_count);
247
+
248
+ const component = new Int32Array(system_count);
249
+ const fed = new Uint8Array(system_count);
250
+ const visited = new Uint8Array(system_count);
251
+ const post_order = new Int32Array(system_count);
252
+ const frame_system = new Int32Array(system_count);
253
+ const frame_next = new Int32Array(system_count);
254
+
255
+ for (let k = 0; k < system_count; k++) {
256
+ label_components(
257
+ system_count, edges, placed,
258
+ component, fed,
259
+ visited, post_order, frame_system, frame_next
260
+ );
261
+
262
+ // the components form an acyclic graph, so at least one of them is fed by nothing
263
+ let next = -1;
264
+
265
+ for (let i = 0; i < system_count; i++) {
266
+ if (placed[i] !== 0 || fed[component[i]] !== 0) {
267
+ continue;
268
+ }
269
+
270
+ if (next === -1 || priorities[i] > priorities[next]) {
271
+ next = i;
272
+ }
273
+ }
274
+
275
+ placed[next] = 1;
276
+ sorted[k] = systems[next];
277
+ }
278
+
279
+ for (let k = 0; k < system_count; k++) {
280
+ systems[k] = sorted[k];
281
+ }
282
+ }