@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,27 @@
1
+ /**
2
+ * The hinge a mid joint (a knee, an elbow) has, from the physics {@link Joint} on it, as
3
+ * {@link two_joint_ik} takes it: an axis in the mid joint's own frame about which a positive turn
4
+ * straightens the joint, so it names the side the joint bends to as well as the axis
5
+ * (ozz-animation's `mid_axis`).
6
+ *
7
+ * The Joint sits on the mid bone: `entityA` is its parent, `entityB` the bone itself. A hinge
8
+ * ({@link Joint#asHinge}) leaves one angular frame axis unlocked, and turned by `localBasisB` that axis
9
+ * is the hinge in the bone's own frame. Physics measures the angle about it as B's turn relative to A,
10
+ * 0 at rest, so the bone bends to the side its limits reach further: positive for limits like
11
+ * `[0, 2.6]`, and the axis that straightens it is then the hinge reversed.
12
+ *
13
+ * A straight leg's pose says nothing about which way its knee bends, which is why the side is read
14
+ * off the limits and not the pose. So a hinge that does not say is no hinge here:
15
+ * - an unlocked axis that is not {@link DofMode.LIMITED} (FREE, or a SPRING or MOTOR, which IK
16
+ * ignores) has no limits to read;
17
+ * - limits with `lower + upper == 0` reach equally far both ways.
18
+ *
19
+ * Anchors and the linear axes are ignored.
20
+ *
21
+ * @param {Vector3} out the hinge, of unit length, in the bone's own frame; written only on success
22
+ * @param {Joint} joint the physics joint on the mid bone
23
+ * @returns {boolean} false when the joint gives no bend side: more or fewer than one unlocked angular
24
+ * axis, an unlimited one, or symmetric limits
25
+ */
26
+ export function joint_hinge_mid_axis(out: Vector3, joint: Joint): boolean;
27
+ //# sourceMappingURL=joint_hinge_mid_axis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joint_hinge_mid_axis.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,kEAHa,OAAO,CA6CnB"}
@@ -0,0 +1,77 @@
1
+ import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
2
+ import { DofMode } from "../constraint/DofMode.js";
3
+
4
+ /**
5
+ * `[x, y, z]` scratch.
6
+ * @type {Float64Array}
7
+ */
8
+ const axis = new Float64Array(3);
9
+
10
+ /**
11
+ * The hinge a mid joint (a knee, an elbow) has, from the physics {@link Joint} on it, as
12
+ * {@link two_joint_ik} takes it: an axis in the mid joint's own frame about which a positive turn
13
+ * straightens the joint, so it names the side the joint bends to as well as the axis
14
+ * (ozz-animation's `mid_axis`).
15
+ *
16
+ * The Joint sits on the mid bone: `entityA` is its parent, `entityB` the bone itself. A hinge
17
+ * ({@link Joint#asHinge}) leaves one angular frame axis unlocked, and turned by `localBasisB` that axis
18
+ * is the hinge in the bone's own frame. Physics measures the angle about it as B's turn relative to A,
19
+ * 0 at rest, so the bone bends to the side its limits reach further: positive for limits like
20
+ * `[0, 2.6]`, and the axis that straightens it is then the hinge reversed.
21
+ *
22
+ * A straight leg's pose says nothing about which way its knee bends, which is why the side is read
23
+ * off the limits and not the pose. So a hinge that does not say is no hinge here:
24
+ * - an unlocked axis that is not {@link DofMode.LIMITED} (FREE, or a SPRING or MOTOR, which IK
25
+ * ignores) has no limits to read;
26
+ * - limits with `lower + upper == 0` reach equally far both ways.
27
+ *
28
+ * Anchors and the linear axes are ignored.
29
+ *
30
+ * @param {Vector3} out the hinge, of unit length, in the bone's own frame; written only on success
31
+ * @param {Joint} joint the physics joint on the mid bone
32
+ * @returns {boolean} false when the joint gives no bend side: more or fewer than one unlocked angular
33
+ * axis, an unlimited one, or symmetric limits
34
+ */
35
+ export function joint_hinge_mid_axis(out, joint) {
36
+ const mode = joint.dofMode;
37
+
38
+ let free = -1;
39
+
40
+ for (let k = 0; k < 3; k++) {
41
+ if (mode[3 + k] === DofMode.LOCKED) {
42
+ continue;
43
+ }
44
+
45
+ if (free !== -1) {
46
+ // two axes turn: a ball or a cone, not a hinge
47
+ return false;
48
+ }
49
+
50
+ free = k;
51
+ }
52
+
53
+ if (free === -1 || mode[3 + free] !== DofMode.LIMITED) {
54
+ return false;
55
+ }
56
+
57
+ const middle = joint.dofLowerLimit[3 + free] + joint.dofUpperLimit[3 + free];
58
+
59
+ if (middle === 0) {
60
+ return false;
61
+ }
62
+
63
+ const basis = joint.localBasisB;
64
+
65
+ v3_quaternion_apply(
66
+ axis, 0,
67
+ free === 0 ? 1 : 0, free === 1 ? 1 : 0, free === 2 ? 1 : 0,
68
+ basis[0], basis[1], basis[2], basis[3]
69
+ );
70
+
71
+ // bending is a turn toward the further limit, so straightening is a turn the other way
72
+ const sign = middle > 0 ? -1 : 1;
73
+
74
+ out.set(axis[0] * sign, axis[1] * sign, axis[2] * sign);
75
+
76
+ return true;
77
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Pose a two-bone path (hip, knee, ankle) for a goal: the position by {@link two_joint_ik}, blended
3
+ * in by the goal's position weight, then the end's rotation slerped toward the goal's.
4
+ *
5
+ * Two-bone paths stay analytic: frame FABRIK needs more than 256 iterations to put a leg at 99.9 %
6
+ * of its reach where this is exact.
7
+ *
8
+ * - **Position.** The root and mid joints' local rotations are corrected to land the end on `t`, and
9
+ * each is slerped from its animated rotation toward the correction by `position_weight`. Slerp,
10
+ * not lerp: a componentwise blend of two unit quaternions is shorter than unit, and a hovering foot
11
+ * blends by a fraction, so that is the ordinary case (a knee half-way through a 56 degree
12
+ * correction came out at |q| = 0.970, its shin 3 cm short). The twist about each bone is the
13
+ * animated one; the corrections turn the mid joint about its hinge and the root as little as
14
+ * reaching the target takes.
15
+ * - **Rotation.** The end rides its chain, carried by the mid joint's corrected frame, and is then
16
+ * turned toward `target_rotation` by slerp, `rotation_weight` of the way. At 0 its local rotation
17
+ * is left exactly as animated.
18
+ *
19
+ * @param {Vector3} a root joint position, world
20
+ * @param {Vector3} b mid joint position, world
21
+ * @param {Vector3} c end position, world
22
+ * @param {Vector3} t target position, world
23
+ * @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length, a positive turn
24
+ * straightening it; see {@link joint_hinge_mid_axis}
25
+ * @param {Quaternion} a_gr world rotation of the root joint
26
+ * @param {Quaternion} b_gr world rotation of the mid joint
27
+ * @param {Quaternion} a_lr local rotation of the root joint, corrected in place
28
+ * @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
29
+ * @param {Quaternion} c_lr local rotation of the end, corrected in place
30
+ * @param {number} position_weight 0..1
31
+ * @param {Quaternion} target_rotation the rotation the goal wants the end to have, world
32
+ * @param {number} rotation_weight 0..1
33
+ */
34
+ export function two_bone_path_solve(a: Vector3, b: Vector3, c: Vector3, t: Vector3, mid_axis: Vector3, a_gr: Quaternion, b_gr: Quaternion, a_lr: Quaternion, b_lr: Quaternion, c_lr: Quaternion, position_weight: number, target_rotation: Quaternion, rotation_weight: number): void;
35
+ import Quaternion from "../../../core/geom/Quaternion.js";
36
+ //# sourceMappingURL=two_bone_path_solve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two_bone_path_solve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_bone_path_solve.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,6GATW,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,mBACV,MAAM,mBACN,UAAU,mBACV,MAAM,QAqDhB;uBA/FsB,kCAAkC"}
@@ -0,0 +1,97 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import Quaternion from "../../../core/geom/Quaternion.js";
3
+ import { two_joint_ik } from "./two_joint_ik.js";
4
+
5
+ const solved_a = new Quaternion();
6
+ const solved_b = new Quaternion();
7
+
8
+ const above_a = new Quaternion();
9
+ const mid_world = new Quaternion();
10
+ const carried = new Quaternion();
11
+ const turned = new Quaternion();
12
+
13
+ /**
14
+ * Pose a two-bone path (hip, knee, ankle) for a goal: the position by {@link two_joint_ik}, blended
15
+ * in by the goal's position weight, then the end's rotation slerped toward the goal's.
16
+ *
17
+ * Two-bone paths stay analytic: frame FABRIK needs more than 256 iterations to put a leg at 99.9 %
18
+ * of its reach where this is exact.
19
+ *
20
+ * - **Position.** The root and mid joints' local rotations are corrected to land the end on `t`, and
21
+ * each is slerped from its animated rotation toward the correction by `position_weight`. Slerp,
22
+ * not lerp: a componentwise blend of two unit quaternions is shorter than unit, and a hovering foot
23
+ * blends by a fraction, so that is the ordinary case (a knee half-way through a 56 degree
24
+ * correction came out at |q| = 0.970, its shin 3 cm short). The twist about each bone is the
25
+ * animated one; the corrections turn the mid joint about its hinge and the root as little as
26
+ * reaching the target takes.
27
+ * - **Rotation.** The end rides its chain, carried by the mid joint's corrected frame, and is then
28
+ * turned toward `target_rotation` by slerp, `rotation_weight` of the way. At 0 its local rotation
29
+ * is left exactly as animated.
30
+ *
31
+ * @param {Vector3} a root joint position, world
32
+ * @param {Vector3} b mid joint position, world
33
+ * @param {Vector3} c end position, world
34
+ * @param {Vector3} t target position, world
35
+ * @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length, a positive turn
36
+ * straightening it; see {@link joint_hinge_mid_axis}
37
+ * @param {Quaternion} a_gr world rotation of the root joint
38
+ * @param {Quaternion} b_gr world rotation of the mid joint
39
+ * @param {Quaternion} a_lr local rotation of the root joint, corrected in place
40
+ * @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
41
+ * @param {Quaternion} c_lr local rotation of the end, corrected in place
42
+ * @param {number} position_weight 0..1
43
+ * @param {Quaternion} target_rotation the rotation the goal wants the end to have, world
44
+ * @param {number} rotation_weight 0..1
45
+ */
46
+ export function two_bone_path_solve(
47
+ a, b, c, t,
48
+ mid_axis,
49
+ a_gr, b_gr,
50
+ a_lr, b_lr, c_lr,
51
+ position_weight,
52
+ target_rotation,
53
+ rotation_weight
54
+ ) {
55
+ assert.ok(position_weight >= 0 && position_weight <= 1, 'position_weight is within 0..1');
56
+ assert.ok(rotation_weight >= 0 && rotation_weight <= 1, 'rotation_weight is within 0..1');
57
+
58
+ // the frame above the root, which the corrections do not move: a_gr = above_a * a_lr
59
+ above_a.copyInverse(a_lr);
60
+ above_a.multiplyQuaternions(a_gr, above_a);
61
+
62
+ // slerp's endpoints are a ratio of sines, which rounds: weight 0 has to be the animated pose
63
+ // exactly, as no goal is
64
+ if (position_weight > 0) {
65
+ solved_a.copy(a_lr);
66
+ solved_b.copy(b_lr);
67
+
68
+ two_joint_ik(a, b, c, t, mid_axis, a_gr, b_gr, solved_a, solved_b);
69
+
70
+ if (position_weight === 1) {
71
+ a_lr.copy(solved_a);
72
+ b_lr.copy(solved_b);
73
+ } else {
74
+ a_lr.slerpQuaternions(a_lr, solved_a, position_weight);
75
+ b_lr.slerpQuaternions(b_lr, solved_b, position_weight);
76
+ }
77
+ }
78
+
79
+ if (rotation_weight === 0) {
80
+ return;
81
+ }
82
+
83
+ mid_world.multiplyQuaternions(above_a, a_lr);
84
+ mid_world.multiply(b_lr);
85
+
86
+ carried.multiplyQuaternions(mid_world, c_lr);
87
+
88
+ if (rotation_weight === 1) {
89
+ turned.copy(target_rotation);
90
+ } else {
91
+ turned.slerpQuaternions(carried, target_rotation, rotation_weight);
92
+ }
93
+
94
+ mid_world.conjugate();
95
+
96
+ c_lr.multiplyQuaternions(mid_world, turned);
97
+ }
@@ -1,16 +1,38 @@
1
1
  /**
2
- * Based on http://theorangeduck.com/page/simple-two-joint
3
- * @param {Vector3} a Root bone position
4
- * @param {Vector3} b Second bone position
5
- * @param {Vector3} c Effector position
6
- * @param {Vector3} t Target position
7
- * @param {number} eps EPSILON value, small value for rounding error compensation
8
- * @param {Quaternion} a_gr Global rotation of root bone
9
- * @param {Quaternion} b_gr Global rotation of second bone
10
- * @param {Quaternion} a_lr local rotation for root bone, this will be updated as a result
11
- * @param {Quaternion} b_lr local rotation for second bone, this will be updated as a result
2
+ * Two-joint inverse kinematics: turn a root joint and a hinged mid joint so the end of the chain
3
+ * lands on a target, in one call.
4
+ *
5
+ * After http://theorangeduck.com/page/simple-two-joint, with the mid joint's hinge given rather than
6
+ * guessed. The reference bends about `normalize((c - a) x d)` for some `d` "close to" where the knee
7
+ * points; this file used to take `d` as the mid joint's local -Z, which is the hinge only for a rig
8
+ * whose -Z lies in the bend plane and on the knee's side of it - a knee bending toward +Z, or a frame
9
+ * yawed 30 degrees, bent about the wrong axis and missed by up to 119 mm. `mid_axis` is the convention
10
+ * ozz-animation ships (`IKTwoBoneJob::mid_axis`): an axis in the mid joint's own frame, about which a
11
+ * positive turn straightens the joint, so it names the side the joint bends to as well as the axis.
12
+ *
13
+ * - The mid joint turns about its hinge alone, by the angle that sets the end at the target's distance
14
+ * from the root. That is solved exactly whether or not the bones are square to the hinge, and a joint
15
+ * animated past straight, against its hinge, is brought round to the side the hinge bends it.
16
+ * - The root then turns twice, both turns in world: back onto the ray the end was animated along (the
17
+ * reference's bend, a turn about the hinge when the bones are square to it), then along the shortest
18
+ * arc from that ray onto the target (its swing).
19
+ * - A target the chain cannot reach is reached for: the chain straightens, or folds, and points at it.
20
+ *
21
+ * The corrections are right-multiplied onto the local rotations, so whatever is above the root may be
22
+ * rotated arbitrarily.
23
+ *
24
+ * @param {Vector3} a root joint position, world
25
+ * @param {Vector3} b mid joint position, world
26
+ * @param {Vector3} c end position, world
27
+ * @param {Vector3} t target position, world
28
+ * @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length; a positive turn
29
+ * about it straightens the joint
30
+ * @param {Quaternion} a_gr world rotation of the root joint
31
+ * @param {Quaternion} b_gr world rotation of the mid joint
32
+ * @param {Quaternion} a_lr local rotation of the root joint, corrected in place
33
+ * @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
12
34
  */
13
- export function two_joint_ik(a: Vector3, b: Vector3, c: Vector3, t: Vector3, eps: number, a_gr: Quaternion, b_gr: Quaternion, a_lr: Quaternion, b_lr: Quaternion): void;
35
+ export function two_joint_ik(a: Vector3, b: Vector3, c: Vector3, t: Vector3, mid_axis: Vector3, a_gr: Quaternion, b_gr: Quaternion, a_lr: Quaternion, b_lr: Quaternion): void;
14
36
  import Vector3 from "../../../core/geom/Vector3.js";
15
37
  import Quaternion from "../../../core/geom/Quaternion.js";
16
38
  //# sourceMappingURL=two_joint_ik.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;GAWG;AACH,gCAVW,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,OACP,MAAM,QACN,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QAoEpB;oBAtGmB,+BAA+B;uBAF5B,kCAAkC"}
1
+ {"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,gCAXW,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,YACP,OAAO,QAEP,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QA0FpB;oBAjMmB,+BAA+B;uBAD5B,kCAAkC"}
@@ -1,105 +1,196 @@
1
+ import { assert } from "../../../core/assert.js";
1
2
  import Quaternion from "../../../core/geom/Quaternion.js";
2
- import { v3_interior_angle } from "../../../core/geom/vec3/v3_interior_angle.js";
3
3
  import Vector3 from "../../../core/geom/Vector3.js";
4
4
  import { clamp } from "../../../core/math/clamp.js";
5
5
 
6
- const d = new Vector3();
6
+ const hinge = new Vector3();
7
7
 
8
- const delta_ca = new Vector3();
9
- const delta_ta = new Vector3();
8
+ const thigh = new Vector3();
9
+ const shin = new Vector3();
10
10
 
11
- const axis0 = new Vector3();
12
- const axis1 = new Vector3();
11
+ const thigh_across = new Vector3();
12
+ const shin_across = new Vector3();
13
13
 
14
- const inv_a_gr = new Quaternion();
15
- const inv_b_gr = new Quaternion();
14
+ const ankle_bent = new Vector3();
15
+ const aim = new Vector3();
16
+ const reach = new Vector3();
16
17
 
17
- const r0 = new Quaternion();
18
- const r1 = new Quaternion();
19
- const r2 = new Quaternion();
18
+ const axis = new Vector3();
20
19
 
21
- const axis0_la = new Vector3();
22
- const axis0_lb = new Vector3();
23
- const axis1_la = new Vector3();
20
+ const knee_turn = new Quaternion();
21
+ const hip_turn = new Quaternion();
22
+ const turn = new Quaternion();
23
+ const inverse_a_gr = new Quaternion();
24
24
 
25
- // TODO: investigate https://github.com/guillaumeblanc/ozz-animation/blob/master/src/animation/runtime/ik_two_bone_job.cc
25
+ /**
26
+ * The shortest turn taking the direction of `from` onto the direction of `to`; neither has to be of
27
+ * unit length. Either being zero leaves nothing to turn.
28
+ *
29
+ * Directions within 1e-12 rad of opposite turn half a circle about `fallback`, less its part along
30
+ * `from`. Their cross product is no axis there - it is zero, or rounding noise, and noise need not
31
+ * even be square to `from` (measured: an exact-zero test missed targets opposite the effector by up
32
+ * to 995 mm on 1,911 of 2,000 random leg orientations).
33
+ *
34
+ * @param {Quaternion} out
35
+ * @param {Vector3} from
36
+ * @param {Vector3} to
37
+ * @param {Vector3} fallback unit length
38
+ */
39
+ function turn_between(out, from, to, fallback) {
40
+ const scale = Math.sqrt(from.lengthSqr() * to.lengthSqr());
41
+
42
+ axis.crossVectors(from, to);
43
+
44
+ // both scaled by |from| |to|
45
+ const sine = Math.sqrt(axis.lengthSqr());
46
+ const cosine = from.dot(to);
47
+
48
+ if (sine > 1e-12 * scale) {
49
+ axis.multiplyScalar(1 / sine);
50
+
51
+ out.fromAxisAngle(axis, Math.atan2(sine, cosine));
52
+
53
+ return;
54
+ }
55
+
56
+ if (scale === 0 || cosine > 0) {
57
+ out.set(0, 0, 0, 1);
58
+
59
+ return;
60
+ }
61
+
62
+ axis.copy(from).multiplyScalar(-fallback.dot(from) / from.lengthSqr()).add(fallback);
63
+
64
+ if (axis.lengthSqr() < 1e-24) {
65
+ // the fallback lies along `from` as well: any axis square to it will do
66
+ axis.crossVectors(from, Math.abs(from.x) < Math.abs(from.y) ? Vector3.right : Vector3.up);
67
+ }
68
+
69
+ axis.normalize();
70
+
71
+ out.fromAxisAngle(axis, Math.PI);
72
+ }
26
73
 
27
74
  /**
28
- * Based on http://theorangeduck.com/page/simple-two-joint
29
- * @param {Vector3} a Root bone position
30
- * @param {Vector3} b Second bone position
31
- * @param {Vector3} c Effector position
32
- * @param {Vector3} t Target position
33
- * @param {number} eps EPSILON value, small value for rounding error compensation
34
- * @param {Quaternion} a_gr Global rotation of root bone
35
- * @param {Quaternion} b_gr Global rotation of second bone
36
- * @param {Quaternion} a_lr local rotation for root bone, this will be updated as a result
37
- * @param {Quaternion} b_lr local rotation for second bone, this will be updated as a result
75
+ * Two-joint inverse kinematics: turn a root joint and a hinged mid joint so the end of the chain
76
+ * lands on a target, in one call.
77
+ *
78
+ * After http://theorangeduck.com/page/simple-two-joint, with the mid joint's hinge given rather than
79
+ * guessed. The reference bends about `normalize((c - a) x d)` for some `d` "close to" where the knee
80
+ * points; this file used to take `d` as the mid joint's local -Z, which is the hinge only for a rig
81
+ * whose -Z lies in the bend plane and on the knee's side of it - a knee bending toward +Z, or a frame
82
+ * yawed 30 degrees, bent about the wrong axis and missed by up to 119 mm. `mid_axis` is the convention
83
+ * ozz-animation ships (`IKTwoBoneJob::mid_axis`): an axis in the mid joint's own frame, about which a
84
+ * positive turn straightens the joint, so it names the side the joint bends to as well as the axis.
85
+ *
86
+ * - The mid joint turns about its hinge alone, by the angle that sets the end at the target's distance
87
+ * from the root. That is solved exactly whether or not the bones are square to the hinge, and a joint
88
+ * animated past straight, against its hinge, is brought round to the side the hinge bends it.
89
+ * - The root then turns twice, both turns in world: back onto the ray the end was animated along (the
90
+ * reference's bend, a turn about the hinge when the bones are square to it), then along the shortest
91
+ * arc from that ray onto the target (its swing).
92
+ * - A target the chain cannot reach is reached for: the chain straightens, or folds, and points at it.
93
+ *
94
+ * The corrections are right-multiplied onto the local rotations, so whatever is above the root may be
95
+ * rotated arbitrarily.
96
+ *
97
+ * @param {Vector3} a root joint position, world
98
+ * @param {Vector3} b mid joint position, world
99
+ * @param {Vector3} c end position, world
100
+ * @param {Vector3} t target position, world
101
+ * @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length; a positive turn
102
+ * about it straightens the joint
103
+ * @param {Quaternion} a_gr world rotation of the root joint
104
+ * @param {Quaternion} b_gr world rotation of the mid joint
105
+ * @param {Quaternion} a_lr local rotation of the root joint, corrected in place
106
+ * @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
38
107
  */
39
108
  export function two_joint_ik(
40
- a, b, c, t, eps,
109
+ a, b, c, t,
110
+ mid_axis,
41
111
  a_gr, b_gr,
42
112
  a_lr, b_lr
43
113
  ) {
114
+ assert.ok(mid_axis.isNormalized(), 'mid_axis must be of unit length');
115
+
116
+ hinge.copy(mid_axis).applyQuaternion(b_gr);
117
+
118
+ thigh.subVectors(b, a);
119
+ shin.subVectors(c, b);
120
+
121
+ // turning the knee leaves each bone's part along the hinge where it is, and turns the part across
122
+ const thigh_along = thigh.dot(hinge);
123
+ const shin_along = shin.dot(hinge);
124
+
125
+ thigh_across.copy(hinge).multiplyScalar(-thigh_along).add(thigh);
126
+ shin_across.copy(hinge).multiplyScalar(-shin_along).add(shin);
127
+
128
+ /*
129
+ With the shin's across part at angle g from the thigh's, about the hinge,
44
130
 
45
- //Compute lengths of bones
46
- const lab = b.distanceTo(a);
47
- const lcb = b.distanceTo(c);
131
+ |end - root|^2 = base + span * cos(g)
48
132
 
49
- const maximum_extension = lab + lcb - eps;
133
+ so the chain reaches from sqrt(base - span), folded, to sqrt(base + span), straight: for bones
134
+ square to the hinge, |lab - lcb| to lab + lcb. That is the whole of the clamp. The reference
135
+ trims the far end by an absolute `eps` so a leg "never appears fully extended"; a length in world
136
+ units is no ratio of a leg, and the 0.01 the ECS solver passed left every foot short of a target
137
+ within a centimetre of full reach. Easing into full extension is a separate choice
138
+ (ozz-animation's `soften`) and nothing asks for it.
139
+ */
140
+ const base = thigh.lengthSqr() + shin.lengthSqr() + 2 * thigh_along * shin_along;
141
+ const span = 2 * Math.sqrt(thigh_across.lengthSqr() * shin_across.lengthSqr());
50
142
 
51
- //clamp length to the target to maximum extension of the joint
52
- const lat = clamp(t.distanceTo(a), eps, maximum_extension);
143
+ reach.subVectors(t, a);
53
144
 
54
- //compute current interior angles
55
- const ac_ab_0 = v3_interior_angle(c, a, b);
56
- const ba_bc_0 = v3_interior_angle(a, b, c);
57
- const ac_at_0 = v3_interior_angle(c, a, t);
145
+ let knee_angle = 0;
58
146
 
59
- // Using the cosine rule to compute desired interior angles
60
- const length_at_sqr = lat * lat;
61
- const length_cb_sqr = lcb * lcb;
62
- const length_ab_sqr = lab * lab;
147
+ // a bone along the hinge has nothing across it to turn, and the reach is what it is
148
+ if (span > 0) {
149
+ axis.crossVectors(thigh_across, shin_across);
63
150
 
64
- const ac_ab_1 = Math.acos(clamp((length_cb_sqr - length_ab_sqr - length_at_sqr) / (-2 * lab * lat), -1, 1));
65
- const ba_bc_1 = Math.acos(clamp((length_at_sqr - length_ab_sqr - length_cb_sqr) / (-2 * lab * lcb), -1, 1));
151
+ const bend_animated = Math.atan2(axis.dot(hinge), thigh_across.dot(shin_across));
66
152
 
67
- d.copy(Vector3.back);
68
- d.applyQuaternion(b_gr);
153
+ const reach_sqr = clamp(reach.lengthSqr(), base - span, base + span);
69
154
 
70
- delta_ca.subVectors(c, a);
71
- delta_ta.subVectors(t, a);
155
+ // a positive turn straightens, so a joint bent the way its hinge bends it sits at g <= 0
156
+ const bend_solved = -Math.acos(clamp((reach_sqr - base) / span, -1, 1));
72
157
 
73
- axis0.crossVectors(delta_ca, d);
74
- axis0.normalize();
158
+ knee_angle = bend_solved - bend_animated;
159
+ }
75
160
 
76
- axis1.crossVectors(delta_ca, delta_ta);
77
- axis1.normalize();
161
+ turn.fromAxisAngle(mid_axis, knee_angle);
78
162
 
79
- inv_a_gr.copyInverse(a_gr);
80
- inv_b_gr.copyInverse(b_gr);
163
+ b_lr.multiply(turn);
81
164
 
82
- axis0_la.copy(axis0);
83
- axis0_la.applyQuaternion(inv_a_gr);
165
+ // the end, relative to the root, with the knee turned and the hip not yet
166
+ knee_turn.fromAxisAngle(hinge, knee_angle);
84
167
 
85
- const angle0 = ac_ab_1 - ac_ab_0;
168
+ ankle_bent.copy(shin).applyQuaternion(knee_turn).add(thigh);
86
169
 
87
- r0.fromAxisAngle(axis0_la, angle0);
170
+ aim.subVectors(c, a);
88
171
 
89
- const angle1 = ba_bc_1 - ba_bc_0;
172
+ if (aim.lengthSqr() === 0) {
173
+ // animated with the end on the root, there is no ray to keep; the bent end's own serves
174
+ aim.copy(ankle_bent);
175
+ }
90
176
 
91
- axis0_lb.copy(axis0);
92
- axis0_lb.applyQuaternion(inv_b_gr);
177
+ /*
178
+ The bend first, then the swing, both turns in world, so the swing is the left factor. The
179
+ reference's listing composes them the other way about - bend after swing, about an axis the swing
180
+ has already carried away - and misses every target off the bend plane (14 mm for one 23 cm off on
181
+ a 0.92 m leg); its prose has them in this order.
182
+ */
183
+ turn_between(hip_turn, ankle_bent, aim, hinge);
93
184
 
94
- r1.fromAxisAngle(axis0_lb, angle1);
185
+ turn_between(turn, aim, reach, hinge);
95
186
 
96
- axis1_la.copy(axis1);
97
- axis1_la.applyQuaternion(inv_a_gr);
187
+ hip_turn.multiplyQuaternions(turn, hip_turn);
98
188
 
99
- r2.fromAxisAngle(axis1_la, ac_at_0);
189
+ // into the root's frame: a_lr * (a_gr^-1 * hip_turn * a_gr)
190
+ inverse_a_gr.copyInverse(a_gr);
100
191
 
101
- r0.multiply(r2);
192
+ turn.multiplyQuaternions(inverse_a_gr, hip_turn);
193
+ turn.multiply(a_gr);
102
194
 
103
- a_lr.multiply(r0);
104
- b_lr.multiply(r1);
105
- }
195
+ a_lr.multiply(turn);
196
+ }
@@ -14,7 +14,7 @@
14
14
  * for, in nits; defaults to {@link LINEAR_REFERENCE_NITS}. Only read for `COLOUR_SPACE_LINEAR`,
15
15
  * and the exact counterpart of {@link encode_avif}'s option of the same name
16
16
  * @param {number} [options.chroma_upsampling] one of the `CHROMA_UPSAMPLING_*` constants
17
- * @returns {{data: (Uint8ClampedArray|Uint16Array), width: number, height: number}}
17
+ * @returns {{data: (Uint8ClampedArray|Uint16Array|Float16Array), width: number, height: number}}
18
18
  *
19
19
  * @author Alex Goldring
20
20
  * @copyright Company Named Limited (c) 2026
@@ -26,7 +26,7 @@ export function convert_to_rgba(decoder: AvifDecoder, image: YuvImage, options?:
26
26
  linear_reference_nits?: number;
27
27
  chroma_upsampling?: number;
28
28
  }): {
29
- data: (Uint8ClampedArray | Uint16Array);
29
+ data: (Uint8ClampedArray | Uint16Array | Float16Array);
30
30
  width: number;
31
31
  height: number;
32
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"convert_to_rgba.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/avif/api/convert_to_rgba.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAZ4B,SAAS,GAA1B,MAAM;IACY,cAAc,GAAhC,OAAO;IACU,mBAAmB,GAApC,MAAM;IACW,qBAAqB,GAAtC,MAAM;IAGW,iBAAiB,GAAlC,MAAM;IACJ;IAAC,IAAI,EAAE,CAAC,iBAAiB,GAAC,WAAW,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAkJlF;AA5LD;;;GAGG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;;;GAKG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;GAGG;AACH,0CAFU,MAAM,CAE6B;AAE7C,uCAAuC;AACvC,wCADW,MAAM,CAC0B;AAE3C,8BAA8B;AAC9B,qCADW,MAAM,CACuB"}
1
+ {"version":3,"file":"convert_to_rgba.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/avif/api/convert_to_rgba.js"],"names":[],"mappings":"AAmCA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAZ4B,SAAS,GAA1B,MAAM;IACY,cAAc,GAAhC,OAAO;IACU,mBAAmB,GAApC,MAAM;IACW,qBAAqB,GAAtC,MAAM;IAGW,iBAAiB,GAAlC,MAAM;IACJ;IAAC,IAAI,EAAE,CAAC,iBAAiB,GAAC,WAAW,eAAa,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAoJ/F;AA9LD;;;GAGG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;;;GAKG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;GAGG;AACH,0CAFU,MAAM,CAE6B;AAE7C,uCAAuC;AACvC,wCADW,MAAM,CAC0B;AAE3C,8BAA8B;AAC9B,qCADW,MAAM,CACuB"}
@@ -3,7 +3,6 @@ import { clamp_sample } from "../color/clamp_sample.js";
3
3
  import { colour_transform_init } from "../color/ColourTransform.js";
4
4
  import { LINEAR_REFERENCE_NITS } from "../color/transfer_to_linear.js";
5
5
  import { MC_BT_601 } from "../av1/tables/av1_symbols.js";
6
- import { to_half_float_uint16 } from "../../../../core/binary/to_half_float_uint16.js";
7
6
  import { transfer_row_to_linear } from "../color/transfer_to_linear.js";
8
7
  import { UPSAMPLE_BILINEAR, UPSAMPLE_NEAREST, upsample_chroma_row } from "../color/upsample_chroma_row.js";
9
8
  import { ycbcr_row_to_rgb } from "../color/ycbcr_row_to_rgb.js";
@@ -50,7 +49,7 @@ export const CHROMA_UPSAMPLING_BEST = 2;
50
49
  * for, in nits; defaults to {@link LINEAR_REFERENCE_NITS}. Only read for `COLOUR_SPACE_LINEAR`,
51
50
  * and the exact counterpart of {@link encode_avif}'s option of the same name
52
51
  * @param {number} [options.chroma_upsampling] one of the `CHROMA_UPSAMPLING_*` constants
53
- * @returns {{data: (Uint8ClampedArray|Uint16Array), width: number, height: number}}
52
+ * @returns {{data: (Uint8ClampedArray|Uint16Array|Float16Array), width: number, height: number}}
54
53
  *
55
54
  * @author Alex Goldring
56
55
  * @copyright Company Named Limited (c) 2026
@@ -98,9 +97,9 @@ export function convert_to_rgba(decoder, image, options = {}) {
98
97
 
99
98
  const samples = width * height * 4;
100
99
 
101
- const data = output_float16 || output_bit_depth > 8
102
- ? new Uint16Array(samples)
103
- : new Uint8ClampedArray(samples);
100
+ const data = output_float16
101
+ ? new Float16Array(samples)
102
+ : output_bit_depth > 8 ? new Uint16Array(samples) : new Uint8ClampedArray(samples);
104
103
 
105
104
  const maximum = (1 << output_bit_depth) - 1;
106
105
 
@@ -180,10 +179,12 @@ export function convert_to_rgba(decoder, image, options = {}) {
180
179
  : clamp01((image.alpha[alpha_row + x] - alpha_offset) * alpha_scale);
181
180
 
182
181
  if (output_float16) {
183
- data[out] = to_half_float_uint16(rgb_row[i]);
184
- data[out + 1] = to_half_float_uint16(rgb_row[i + 1]);
185
- data[out + 2] = to_half_float_uint16(rgb_row[i + 2]);
186
- data[out + 3] = to_half_float_uint16(alpha);
182
+ for (let c = 0; c < 3; c++) {
183
+ const value = rgb_row[i + c];
184
+ // Preserve finite HDR saturation, even with a very small reference white.
185
+ data[out + c] = Number.isFinite(value) ? Math.min(Math.max(value, -65504), 65504) : value;
186
+ }
187
+ data[out + 3] = alpha;
187
188
  } else {
188
189
  data[out] = quantise(rgb_row[i], maximum);
189
190
  data[out + 1] = quantise(rgb_row[i + 1], maximum);