@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
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.39.0",
9
+ "version": "3.41.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
3
+ * as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
4
+ *
5
+ * This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
6
+ * the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
7
+ * inside is written back unchanged, bit for bit; one outside is composed again from the clamped
8
+ * positions ({@link swing_twist_compose_array}).
9
+ *
10
+ * An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
11
+ *
12
+ * `out` may be `q`.
13
+ *
14
+ * @param {Float64Array} out
15
+ * @param {number} out_offset receives `[x, y, z, w]`
16
+ * @param {Float64Array} q
17
+ * @param {number} q_offset `[x, y, z, w]`, unit
18
+ * @param {Float64Array} lower
19
+ * @param {Float64Array} upper
20
+ * @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
21
+ * @returns {boolean} whether any position was outside its limits
22
+ */
23
+ export function swing_twist_clamp_array(out: Float64Array, out_offset: number, q: Float64Array, q_offset: number, lower: Float64Array, upper: Float64Array, limit_offset: number): boolean;
24
+ //# sourceMappingURL=swing_twist_clamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_clamp.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_clamp.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CATW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,SACN,YAAY,SACZ,YAAY,gBACZ,MAAM,GACJ,OAAO,CAgCnB"}
@@ -0,0 +1,62 @@
1
+ import { swing_twist_compose_array } from "./swing_twist_compose.js";
2
+ import { swing_twist_error_array } from "./swing_twist_error.js";
3
+
4
+ /**
5
+ * The three swing-twist positions, measured and then clamped.
6
+ * @type {Float64Array}
7
+ */
8
+ const e = new Float64Array(3);
9
+
10
+ /**
11
+ * Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
12
+ * as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
13
+ *
14
+ * This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
15
+ * the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
16
+ * inside is written back unchanged, bit for bit; one outside is composed again from the clamped
17
+ * positions ({@link swing_twist_compose_array}).
18
+ *
19
+ * An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
20
+ *
21
+ * `out` may be `q`.
22
+ *
23
+ * @param {Float64Array} out
24
+ * @param {number} out_offset receives `[x, y, z, w]`
25
+ * @param {Float64Array} q
26
+ * @param {number} q_offset `[x, y, z, w]`, unit
27
+ * @param {Float64Array} lower
28
+ * @param {Float64Array} upper
29
+ * @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
30
+ * @returns {boolean} whether any position was outside its limits
31
+ */
32
+ export function swing_twist_clamp_array(out, out_offset, q, q_offset, lower, upper, limit_offset) {
33
+ swing_twist_error_array(q, q_offset, e);
34
+
35
+ let clamped = false;
36
+
37
+ for (let k = 0; k < 3; k++) {
38
+ const lo = lower[limit_offset + k];
39
+ const hi = upper[limit_offset + k];
40
+
41
+ const value = e[k];
42
+
43
+ if (value < lo) {
44
+ e[k] = lo;
45
+ clamped = true;
46
+ } else if (value > hi) {
47
+ e[k] = hi;
48
+ clamped = true;
49
+ }
50
+ }
51
+
52
+ if (clamped) {
53
+ swing_twist_compose_array(out, out_offset, e, 0);
54
+ } else if (out !== q || out_offset !== q_offset) {
55
+ out[out_offset] = q[q_offset];
56
+ out[out_offset + 1] = q[q_offset + 1];
57
+ out[out_offset + 2] = q[q_offset + 2];
58
+ out[out_offset + 3] = q[q_offset + 3];
59
+ }
60
+
61
+ return clamped;
62
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
3
+ * {@link swing_twist_error_array}.
4
+ *
5
+ * `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
6
+ * `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
7
+ * measured rotation, on the hemisphere with `w ≥ 0`.
8
+ *
9
+ * @param {Float64Array} out
10
+ * @param {number} out_offset receives `[x, y, z, w]`
11
+ * @param {Float64Array} e
12
+ * @param {number} e_offset `[twist, swing y, swing z]`, radians
13
+ */
14
+ export function swing_twist_compose_array(out: Float64Array, out_offset: number, e: Float64Array, e_offset: number): void;
15
+ //# sourceMappingURL=swing_twist_compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_compose.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_compose.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+CALW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,QAwBhB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
3
+ * {@link swing_twist_error_array}.
4
+ *
5
+ * `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
6
+ * `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
7
+ * measured rotation, on the hemisphere with `w ≥ 0`.
8
+ *
9
+ * @param {Float64Array} out
10
+ * @param {number} out_offset receives `[x, y, z, w]`
11
+ * @param {Float64Array} e
12
+ * @param {number} e_offset `[twist, swing y, swing z]`, radians
13
+ */
14
+ export function swing_twist_compose_array(out, out_offset, e, e_offset) {
15
+ const twist = e[e_offset];
16
+ const y = e[e_offset + 1];
17
+ const z = e[e_offset + 2];
18
+
19
+ const tx = Math.sin(twist * 0.5);
20
+ const tw = Math.cos(twist * 0.5);
21
+
22
+ const phi = Math.sqrt(y * y + z * z);
23
+
24
+ // sin(φ/2) / φ, which is 1/2 as φ goes to 0, as the measure's small-angle branch is
25
+ const s = phi < 1e-9 ? 0.5 : Math.sin(phi * 0.5) / phi;
26
+
27
+ const sy = y * s;
28
+ const sz = z * s;
29
+ const sw = Math.cos(phi * 0.5);
30
+
31
+ // (0, sy, sz, sw) ⊗ (tx, 0, 0, tw)
32
+ out[out_offset] = sw * tx;
33
+ out[out_offset + 1] = sy * tw + sz * tx;
34
+ out[out_offset + 2] = sz * tw - sy * tx;
35
+ out[out_offset + 3] = sw * tw;
36
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
3
+ * the per-frame-axis angular positions used by wide-cone angular DOFs.
4
+ *
5
+ * Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
6
+ * axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
7
+ * about an axis in the YZ plane that carries X to its new direction). Writes,
8
+ * into `out`:
9
+ * - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
10
+ * limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
11
+ * - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
12
+ * (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
13
+ * an accurate (box-shaped) cone that holds at large tilt.
14
+ * Reduces continuously to the small-angle vector near identity. Pure scratch /
15
+ * locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
16
+ * class has an object-based `computeSwingAndTwist`; this is the inlined,
17
+ * allocation-free form — see the bench that justifies it.)
18
+ *
19
+ * The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
20
+ * measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
21
+ *
22
+ * @param {number} dx qD x
23
+ * @param {number} dy qD y
24
+ * @param {number} dz qD z
25
+ * @param {number} dw qD w
26
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
27
+ */
28
+ export function swing_twist_error(dx: number, dy: number, dz: number, dw: number, out: Float64Array): void;
29
+ /**
30
+ * {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
31
+ * arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
32
+ * would box each into a new heap object.
33
+ *
34
+ * @param {Float64Array} q
35
+ * @param {number} q_offset
36
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
37
+ */
38
+ export function swing_twist_error_array(q: Float64Array, q_offset: number, out: Float64Array): void;
39
+ //# sourceMappingURL=swing_twist_error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_error.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_error.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,YAAY,QAWtB;AAKD;;;;;;;;GAQG;AACH,2CAJW,YAAY,YACZ,MAAM,OACN,YAAY,QAoCtB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
3
+ * the per-frame-axis angular positions used by wide-cone angular DOFs.
4
+ *
5
+ * Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
6
+ * axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
7
+ * about an axis in the YZ plane that carries X to its new direction). Writes,
8
+ * into `out`:
9
+ * - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
10
+ * limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
11
+ * - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
12
+ * (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
13
+ * an accurate (box-shaped) cone that holds at large tilt.
14
+ * Reduces continuously to the small-angle vector near identity. Pure scratch /
15
+ * locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
16
+ * class has an object-based `computeSwingAndTwist`; this is the inlined,
17
+ * allocation-free form — see the bench that justifies it.)
18
+ *
19
+ * The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
20
+ * measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
21
+ *
22
+ * @param {number} dx qD x
23
+ * @param {number} dy qD y
24
+ * @param {number} dz qD z
25
+ * @param {number} dw qD w
26
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
27
+ */
28
+ export function swing_twist_error(dx, dy, dz, dw, out) {
29
+ const q = swing_twist_inputs;
30
+
31
+ q[0] = dx;
32
+ q[1] = dy;
33
+ q[2] = dz;
34
+ q[3] = dw;
35
+
36
+ swing_twist_error_array(q, 0, out);
37
+ }
38
+
39
+ /** Where {@link swing_twist_error} packs its quaternion. */
40
+ const swing_twist_inputs = new Float64Array(4);
41
+
42
+ /**
43
+ * {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
44
+ * arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
45
+ * would box each into a new heap object.
46
+ *
47
+ * @param {Float64Array} q
48
+ * @param {number} q_offset
49
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
50
+ */
51
+ export function swing_twist_error_array(q, q_offset, out) {
52
+ let dx = q[q_offset], dy = q[q_offset + 1], dz = q[q_offset + 2], dw = q[q_offset + 3];
53
+
54
+ // Shortest arc: work with the hemisphere where dw ≥ 0.
55
+ if (dw < 0) { dx = -dx; dy = -dy; dz = -dz; dw = -dw; }
56
+
57
+ const nxt = Math.sqrt(dx * dx + dw * dw); // |twist| (before normalising)
58
+ let sy, sz, sw;
59
+ if (nxt < 1e-12) {
60
+ // dw ≈ 0 and dx ≈ 0: a ~180° pure swing — twist is undefined, take 0.
61
+ out[0] = 0;
62
+ // Swing is qD itself; distribute its angle over Y/Z below.
63
+ sy = dy; sz = dz; sw = dw;
64
+ } else {
65
+ out[0] = 2 * Math.atan2(dx, dw); // exact signed twist about X
66
+ const tx = dx / nxt, tw = dw / nxt; // normalised twist (tx,0,0,tw)
67
+ // swing = qD ⊗ conj(twist); its X component is identically 0.
68
+ sy = dy * tw - dz * tx;
69
+ sz = dy * tx + dz * tw;
70
+ sw = dw * tw + dx * tx;
71
+ }
72
+
73
+ if (sw < 0) { sy = -sy; sz = -sz; sw = -sw; }
74
+ const syz = Math.sqrt(sy * sy + sz * sz);
75
+ if (syz < 1e-9) {
76
+ // Near-zero swing: small-angle vector (continuous with φ·axis as φ→0).
77
+ out[1] = 2 * sy;
78
+ out[2] = 2 * sz;
79
+ } else {
80
+ const phi = 2 * Math.atan2(syz, sw); // exact swing angle in [0, π]
81
+ const s = phi / syz;
82
+ out[1] = sy * s;
83
+ out[2] = sz * s;
84
+ }
85
+ }
@@ -8,16 +8,21 @@
8
8
  *
9
9
  * The matrix N is built so that the eigenvector of its largest eigenvalue
10
10
  * IS the optimal rotation quaternion (in scalar-last form, matching meep's
11
- * `Quaternion`).
11
+ * `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
12
+ * (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
13
+ * so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
14
+ * directly (Jacobi), which needs no gap between the top two eigenvalues, so a
15
+ * set whose twist is weakly determined (nearly parallel vectors) is solved as
16
+ * exactly as a well-spread one.
12
17
  *
13
18
  * Inputs are unit vectors so no centroid subtraction is needed — the rotation
14
19
  * is recovered from the cross-correlations alone.
15
20
  *
16
- * @param {Float32Array|number[]} a_xyz Source vectors — Length: count*3, unit length per triple
17
- * @param {Float32Array|number[]} b_xyz Target vectors — Length: count*3, unit length per triple
21
+ * @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
22
+ * @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
18
23
  * @param {number} count
19
- * @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
20
- * @returns {number} The maximum eigenvalue ≈ Σ a_i · R·b_i. For a perfect alignment this equals `count`.
24
+ * @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
25
+ * @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
21
26
  */
22
- export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | number[], b_xyz: Float32Array | number[], count: number, out_quaternion: Float32Array | number[]): number;
27
+ export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | Float64Array | number[], b_xyz: Float32Array | Float64Array | number[], count: number, out_quaternion: Float32Array | Float64Array | number[]): number;
23
28
  //# sourceMappingURL=v3_rigid_align_paired_unit_vectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DANW,YAAY,GAAC,MAAM,EAAE,SACrB,YAAY,GAAC,MAAM,EAAE,SACrB,MAAM,kBACN,YAAY,GAAC,MAAM,EAAE,GACnB,MAAM,CAsElB"}
1
+ {"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,0DANW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,MAAM,kBACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,MAAM,CA+ElB"}
@@ -1,8 +1,8 @@
1
- import { BinaryDataType } from "../../binary/type/BinaryDataType.js";
2
- import { matrix_top_eigenvector_power_iteration } from "../../math/linalg/eigen/matrix_top_eigenvector_power_iteration.js";
3
- import { SquareMatrix } from "../../math/matrix/SquareMatrix.js"
1
+ import { matrix_symmetric_4x4_eigen } from "../../math/linalg/eigen/matrix_symmetric_4x4_eigen.js";
4
2
 
5
- const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
3
+ const scratch_horn_n = new Float64Array(16);
4
+ const scratch_eigen_values = new Float64Array(4);
5
+ const scratch_eigen_vectors = new Float64Array(16);
6
6
 
7
7
  /**
8
8
  * Closed-form solution for the rotation that best aligns two sets of unit
@@ -14,16 +14,21 @@ const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
14
14
  *
15
15
  * The matrix N is built so that the eigenvector of its largest eigenvalue
16
16
  * IS the optimal rotation quaternion (in scalar-last form, matching meep's
17
- * `Quaternion`).
17
+ * `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
18
+ * (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
19
+ * so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
20
+ * directly (Jacobi), which needs no gap between the top two eigenvalues, so a
21
+ * set whose twist is weakly determined (nearly parallel vectors) is solved as
22
+ * exactly as a well-spread one.
18
23
  *
19
24
  * Inputs are unit vectors so no centroid subtraction is needed — the rotation
20
25
  * is recovered from the cross-correlations alone.
21
26
  *
22
- * @param {Float32Array|number[]} a_xyz Source vectors — Length: count*3, unit length per triple
23
- * @param {Float32Array|number[]} b_xyz Target vectors — Length: count*3, unit length per triple
27
+ * @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
28
+ * @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
24
29
  * @param {number} count
25
- * @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
26
- * @returns {number} The maximum eigenvalue ≈ Σ a_i · R·b_i. For a perfect alignment this equals `count`.
30
+ * @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
31
+ * @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
27
32
  */
28
33
  export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quaternion) {
29
34
 
@@ -72,9 +77,8 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
72
77
  const Nyw = Szx - Sxz;
73
78
  const Nzw = Sxy - Syx;
74
79
 
75
- const N = scratch_horn_n;
76
- const d = N.data;
77
- // SquareMatrix is column-major: d[col * 4 + row]
80
+ // Symmetric, so the index is row*4 + col and col*4 + row alike.
81
+ const d = scratch_horn_n;
78
82
  d[0] = Nxx;
79
83
  d[5] = Nyy;
80
84
  d[10] = Nzz;
@@ -92,5 +96,15 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
92
96
  d[11] = Nzw;
93
97
  d[14] = Nzw;
94
98
 
95
- return matrix_top_eigenvector_power_iteration(N, out_quaternion);
99
+ const values = scratch_eigen_values;
100
+ const vectors = scratch_eigen_vectors;
101
+ matrix_symmetric_4x4_eigen(values, vectors, d);
102
+
103
+ // Eigenpairs come back ascending; the last is the largest.
104
+ out_quaternion[0] = vectors[12];
105
+ out_quaternion[1] = vectors[13];
106
+ out_quaternion[2] = vectors[14];
107
+ out_quaternion[3] = vectors[15];
108
+
109
+ return values[3];
96
110
  }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Eigendecomposition of a symmetric 4x4 matrix via cyclic Jacobi rotations.
3
+ *
4
+ * Only the upper triangle of `m` is read (the matrix is assumed symmetric, so
5
+ * row- and column-major are the same); the input is not modified. Eigenpairs
6
+ * are emitted sorted by **ascending eigenvalue** (signed, not by magnitude),
7
+ * so index 3 is the largest. Equal eigenvalues keep their column order, so a
8
+ * multiple of the identity comes back as the identity basis, in order.
9
+ *
10
+ * Unlike power iteration, this converges whatever the gaps between eigenvalues:
11
+ * a ±λ pair or a near-tie at the top costs nothing extra, and only the
12
+ * eigenvectors of a genuinely repeated eigenvalue are arbitrary (any orthonormal
13
+ * basis of that eigenspace is returned).
14
+ *
15
+ * Eigenvector sign is arbitrary (an eigenvector and its negation are both
16
+ * valid); callers that need a consistent orientation must fix the sign
17
+ * themselves.
18
+ *
19
+ * @param {Float64Array|Float32Array|number[]} out_values length >= 4, eigenvalues ascending
20
+ * @param {Float64Array|Float32Array|number[]} out_vectors length >= 16, eigenvector k
21
+ * in out_vectors[k*4 .. k*4 + 3] (contiguous per eigenvector)
22
+ * @param {Float64Array|Float32Array|number[]} m symmetric 4x4 (index = row*4 + col)
23
+ */
24
+ export function matrix_symmetric_4x4_eigen(out_values: Float64Array | Float32Array | number[], out_vectors: Float64Array | Float32Array | number[], m: Float64Array | Float32Array | number[]): void;
25
+ //# sourceMappingURL=matrix_symmetric_4x4_eigen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix_symmetric_4x4_eigen.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js"],"names":[],"mappings":"AAsFA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,uDALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,eAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAElC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,QA0D5C"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Maximum number of cyclic Jacobi sweeps. A symmetric 4x4 reaches full double
3
+ * precision in 3-6 sweeps (Jacobi converges quadratically, whatever the gaps
4
+ * between eigenvalues): never more than 6 over 200,000 measured matrices,
5
+ * among them ±λ pairs, near and exact ties, rank 1, Horn's N, and scales from
6
+ * 1e-310 to 1e300. 50 only bounds the loop.
7
+ * @type {number}
8
+ */
9
+ const MAX_SWEEPS = 50;
10
+
11
+ /**
12
+ * Working copy of the input, row-major (index = row*4 + col).
13
+ * @type {Float64Array}
14
+ */
15
+ const scratch_a = new Float64Array(16);
16
+
17
+ /**
18
+ * Rotation accumulator, row-major; its columns become the eigenvectors.
19
+ * @type {Float64Array}
20
+ */
21
+ const scratch_v = new Float64Array(16);
22
+
23
+ /**
24
+ * Column index of each eigenpair, sorted by ascending eigenvalue.
25
+ * @type {Uint8Array}
26
+ */
27
+ const scratch_order = new Uint8Array(4);
28
+
29
+ /**
30
+ * One Jacobi rotation in the (p, q) plane that zeroes the off-diagonal entry
31
+ * a[p][q]. `a` and `v` are 4x4 matrices stored row-major (index = row*4 + col).
32
+ * `a` is the symmetric working matrix; `v` accumulates the rotations so its
33
+ * columns become the eigenvectors.
34
+ *
35
+ * @param {Float64Array} a symmetric 4x4, mutated in place
36
+ * @param {Float64Array} v 4x4 rotation accumulator, mutated in place
37
+ * @param {number} p
38
+ * @param {number} q
39
+ */
40
+ function jacobi_rotate(a, v, p, q) {
41
+ const apq = a[p * 4 + q];
42
+
43
+ if (apq === 0) {
44
+ return;
45
+ }
46
+
47
+ const app = a[p * 4 + p];
48
+ const aqq = a[q * 4 + q];
49
+
50
+ // tan of the rotation angle (Numerical Recipes form, |angle| <= pi/4).
51
+ const theta = (aqq - app) / (2 * apq);
52
+ const t = (theta >= 0)
53
+ ? 1 / (theta + Math.sqrt(theta * theta + 1))
54
+ : -1 / (-theta + Math.sqrt(theta * theta + 1));
55
+ const c = 1 / Math.sqrt(t * t + 1);
56
+ const s = t * c;
57
+
58
+ a[p * 4 + p] = app - t * apq;
59
+ a[q * 4 + q] = aqq + t * apq;
60
+ a[p * 4 + q] = 0;
61
+ a[q * 4 + p] = 0;
62
+
63
+ for (let r = 0; r < 4; r++) {
64
+ if (r === p || r === q) {
65
+ continue;
66
+ }
67
+
68
+ const arp = a[r * 4 + p];
69
+ const arq = a[r * 4 + q];
70
+
71
+ const new_rp = c * arp - s * arq;
72
+ const new_rq = s * arp + c * arq;
73
+ a[r * 4 + p] = new_rp;
74
+ a[p * 4 + r] = new_rp;
75
+ a[r * 4 + q] = new_rq;
76
+ a[q * 4 + r] = new_rq;
77
+ }
78
+
79
+ for (let row = 0; row < 4; row++) {
80
+ const vrp = v[row * 4 + p];
81
+ const vrq = v[row * 4 + q];
82
+ v[row * 4 + p] = c * vrp - s * vrq;
83
+ v[row * 4 + q] = s * vrp + c * vrq;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Eigendecomposition of a symmetric 4x4 matrix via cyclic Jacobi rotations.
89
+ *
90
+ * Only the upper triangle of `m` is read (the matrix is assumed symmetric, so
91
+ * row- and column-major are the same); the input is not modified. Eigenpairs
92
+ * are emitted sorted by **ascending eigenvalue** (signed, not by magnitude),
93
+ * so index 3 is the largest. Equal eigenvalues keep their column order, so a
94
+ * multiple of the identity comes back as the identity basis, in order.
95
+ *
96
+ * Unlike power iteration, this converges whatever the gaps between eigenvalues:
97
+ * a ±λ pair or a near-tie at the top costs nothing extra, and only the
98
+ * eigenvectors of a genuinely repeated eigenvalue are arbitrary (any orthonormal
99
+ * basis of that eigenspace is returned).
100
+ *
101
+ * Eigenvector sign is arbitrary (an eigenvector and its negation are both
102
+ * valid); callers that need a consistent orientation must fix the sign
103
+ * themselves.
104
+ *
105
+ * @param {Float64Array|Float32Array|number[]} out_values length >= 4, eigenvalues ascending
106
+ * @param {Float64Array|Float32Array|number[]} out_vectors length >= 16, eigenvector k
107
+ * in out_vectors[k*4 .. k*4 + 3] (contiguous per eigenvector)
108
+ * @param {Float64Array|Float32Array|number[]} m symmetric 4x4 (index = row*4 + col)
109
+ */
110
+ export function matrix_symmetric_4x4_eigen(out_values, out_vectors, m) {
111
+ const a = scratch_a;
112
+ const v = scratch_v;
113
+
114
+ for (let row = 0; row < 4; row++) {
115
+ for (let col = row; col < 4; col++) {
116
+ const value = m[row * 4 + col];
117
+ a[row * 4 + col] = value;
118
+ a[col * 4 + row] = value;
119
+
120
+ v[row * 4 + col] = row === col ? 1 : 0;
121
+ v[col * 4 + row] = row === col ? 1 : 0;
122
+ }
123
+ }
124
+
125
+ for (let sweep = 0; sweep < MAX_SWEEPS; sweep++) {
126
+ const scale = Math.abs(a[0]) + Math.abs(a[5]) + Math.abs(a[10]) + Math.abs(a[15]);
127
+ const off = Math.abs(a[1]) + Math.abs(a[2]) + Math.abs(a[3])
128
+ + Math.abs(a[6]) + Math.abs(a[7]) + Math.abs(a[11]);
129
+
130
+ if (off <= 1e-18 * scale) {
131
+ break;
132
+ }
133
+
134
+ jacobi_rotate(a, v, 0, 1);
135
+ jacobi_rotate(a, v, 0, 2);
136
+ jacobi_rotate(a, v, 0, 3);
137
+ jacobi_rotate(a, v, 1, 2);
138
+ jacobi_rotate(a, v, 1, 3);
139
+ jacobi_rotate(a, v, 2, 3);
140
+ }
141
+
142
+ // Eigenvalues live on the diagonal; eigenvector k is column k of V.
143
+ // Stable insertion sort of the four column indices by eigenvalue.
144
+ const order = scratch_order;
145
+
146
+ for (let k = 0; k < 4; k++) {
147
+ const value = a[k * 5];
148
+ let slot = k;
149
+
150
+ while (slot > 0 && a[order[slot - 1] * 5] > value) {
151
+ order[slot] = order[slot - 1];
152
+ slot--;
153
+ }
154
+
155
+ order[slot] = k;
156
+ }
157
+
158
+ for (let k = 0; k < 4; k++) {
159
+ const col = order[k];
160
+ out_values[k] = a[col * 5];
161
+ out_vectors[k * 4] = v[col];
162
+ out_vectors[k * 4 + 1] = v[4 + col];
163
+ out_vectors[k * 4 + 2] = v[8 + col];
164
+ out_vectors[k * 4 + 3] = v[12 + col];
165
+ }
166
+ }
@@ -3,9 +3,11 @@
3
3
  * symmetric square matrix using power iteration.
4
4
  *
5
5
  * Designed for small symmetric matrices where the dominant eigenvalue is
6
- * well-separated from the rest (Horn's quaternion method on a 4x4, PCA on a
7
- * 3x3 covariance, etc.). Unsuitable when the top two eigenvalues have nearly
8
- * equal magnitude — convergence stalls in that regime.
6
+ * well-separated from the rest (PCA on a 3x3 covariance, etc.). Unsuitable
7
+ * when the top two eigenvalues have nearly equal magnitude — convergence
8
+ * stalls in that regime. That rules out Horn's quaternion matrix: a coplanar
9
+ * input makes its spectrum symmetric about zero (+λ and −λ); use
10
+ * `matrix_symmetric_4x4_eigen` there.
9
11
  *
10
12
  * @param {SquareMatrix} matrix Symmetric, column-major as per SquareMatrix
11
13
  * @param {number[]|Float32Array|Float64Array} out Eigenvector is written here, length >= matrix.size
@@ -1 +1 @@
1
- {"version":3,"file":"matrix_top_eigenvector_power_iteration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;GAcG;AACH,kFALW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,mBAClC,MAAM,cACN,MAAM,GACJ,MAAM,CAoFlB"}
1
+ {"version":3,"file":"matrix_top_eigenvector_power_iteration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;GAgBG;AACH,kFALW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,mBAClC,MAAM,cACN,MAAM,GACJ,MAAM,CAoFlB"}
@@ -12,9 +12,11 @@ function ensure_scratch(n) {
12
12
  * symmetric square matrix using power iteration.
13
13
  *
14
14
  * Designed for small symmetric matrices where the dominant eigenvalue is
15
- * well-separated from the rest (Horn's quaternion method on a 4x4, PCA on a
16
- * 3x3 covariance, etc.). Unsuitable when the top two eigenvalues have nearly
17
- * equal magnitude — convergence stalls in that regime.
15
+ * well-separated from the rest (PCA on a 3x3 covariance, etc.). Unsuitable
16
+ * when the top two eigenvalues have nearly equal magnitude — convergence
17
+ * stalls in that regime. That rules out Horn's quaternion matrix: a coplanar
18
+ * input makes its spectrum symmetric about zero (+λ and −λ); use
19
+ * `matrix_symmetric_4x4_eigen` there.
18
20
  *
19
21
  * @param {SquareMatrix} matrix Symmetric, column-major as per SquareMatrix
20
22
  * @param {number[]|Float32Array|Float64Array} out Eigenvector is written here, length >= matrix.size
@@ -1 +1 @@
1
- {"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AA+EA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CA0DnB;IArfD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CAkXJ;;IAID;;;OAGG;IACH,uCAMC;;qCA7iBY,OAAO,iCAAiC,EAAE,sBAAsB;mBAxB1D,aAAa;oCACI,0BAA0B;sBAOxC,kCAAkC;8BAjB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}
1
+ {"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AAmFA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CAmEnB;IA9fD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CA2XJ;;IAID;;;OAGG;IACH,uCAMC;;qCAtjBY,OAAO,iCAAiC,EAAE,sBAAsB;mBA5B1D,aAAa;oCACI,0BAA0B;sBAOxC,kCAAkC;8BAjB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}