@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
@@ -1,139 +1,139 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { pose_evaluate_local } from "../../../shade/renderer/animation/pose/pose_evaluate_local.js";
3
- import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
4
- import { Transform64 } from "./Transform64.js";
5
-
6
- /**
7
- * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
8
- * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
9
- */
10
-
11
- /**
12
- * {@link t64_evaluate_world}, memoised per entity for the length of a tick.
13
- *
14
- * An exact evaluation walks the chain to the root and evaluates every level's clips; a socket on a
15
- * hand is fourteen levels deep on a character, and the sockets a game asks about share most of
16
- * that chain. Within a tick the inputs — the hierarchy, the clip set, the times, the weights — do
17
- * not move, so each entity's world is evaluated once and every query below it composes onto the
18
- * stored answer. Measured on a 70-joint skeleton with two clips: 764 µs to evaluate every joint
19
- * one query at a time, 160 µs through the cache.
20
- *
21
- * **One cache per tick, per model.** The answer for an entity depends on the playbacks it was
22
- * evaluated under, and the cache does not check them: a caller that changes what a model plays
23
- * between queries calls {@link invalidate} in between, and calls it once per tick regardless.
24
- *
25
- * @author Alex Goldring
26
- * @copyright Company Named Limited (c) 2026
27
- */
28
- export class T64WorldCache {
29
- /**
30
- * Evaluated worlds by entity, valid until {@link invalidate}.
31
- *
32
- * @type {Map<number, Transform64>}
33
- */
34
- #worlds = new Map();
35
-
36
- /**
37
- * Transforms handed back by {@link invalidate}, for the next tick's entries.
38
- *
39
- * @type {Transform64[]}
40
- */
41
- #pool = [];
42
-
43
- /**
44
- * Scratch for one level's animated local pose.
45
- *
46
- * @type {Transform64}
47
- */
48
- #local = new Transform64();
49
-
50
- /**
51
- * How many entities hold an evaluated world right now.
52
- *
53
- * @returns {number}
54
- */
55
- get size() {
56
- return this.#worlds.size;
57
- }
58
-
59
- /**
60
- * Forget every evaluated world. Once per tick, and again whenever a model's playbacks change
61
- * within one.
62
- */
63
- invalidate() {
64
- const pool = this.#pool;
65
-
66
- for (const world of this.#worlds.values()) {
67
- pool.push(world);
68
- }
69
-
70
- this.#worlds.clear();
71
- }
72
-
73
- /**
74
- * The entity's world pose under the playbacks, exactly — the same answer as
75
- * {@link t64_evaluate_world}, from the cache where it has it.
76
- *
77
- * @param {Transform64} result
78
- * @param {EntityComponentDataset} dataset
79
- * @param {number} entity
80
- * @param {PosePlayback[]} playbacks
81
- * @returns {Transform64} `result`
82
- */
83
- evaluate(result, dataset, entity, playbacks) {
84
- assert.defined(result, 'result');
85
- assert.defined(dataset, 'dataset');
86
- assert.isNonNegativeInteger(entity, 'entity');
87
- assert.isArray(playbacks, 'playbacks');
88
-
89
- result.copy(this.#world_of(dataset, entity, playbacks));
90
-
91
- return result;
92
- }
93
-
94
- /**
95
- * @param {EntityComponentDataset} dataset
96
- * @param {number} entity
97
- * @param {PosePlayback[]} playbacks
98
- * @returns {Transform64} the cache's own copy; not to be kept
99
- */
100
- #world_of(dataset, entity, playbacks) {
101
- const cached = this.#worlds.get(entity);
102
-
103
- if (cached !== undefined) {
104
- return cached;
105
- }
106
-
107
- assert.ok(dataset.entityExists(entity), `entity ${entity} does not exist`);
108
-
109
- const attachment = dataset.getComponent(entity, TransformAttachment);
110
-
111
- const world = this.#pool.pop() ?? new Transform64();
112
- const local = this.#local;
113
-
114
- if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
115
- // the root of the chain, whose world pose is its own; a link whose parent has gone is
116
- // a root until the attachment system detaches it, and answers from where it was
117
- const rest = dataset.getComponent(entity, Transform64);
118
-
119
- assert.defined(rest, `entity ${entity} carries no Transform64 and no attachment`);
120
-
121
- pose_evaluate_local(local, entity, rest, playbacks);
122
- local.updateMatrix();
123
-
124
- world.copy(local);
125
- } else {
126
- // the parent first, so its answer is in the cache before this level's scratch is used
127
- const parent = this.#world_of(dataset, attachment.parent, playbacks);
128
-
129
- pose_evaluate_local(local, entity, attachment.transform, playbacks);
130
- local.updateMatrix();
131
-
132
- world.multiplyTransforms(parent, local);
133
- }
134
-
135
- this.#worlds.set(entity, world);
136
-
137
- return world;
138
- }
139
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
3
+ import { t64_evaluate_local } from "./t64_evaluate_local.js";
4
+ import { Transform64 } from "./Transform64.js";
5
+
6
+ /**
7
+ * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
8
+ * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
9
+ */
10
+
11
+ /**
12
+ * {@link t64_evaluate_world}, memoised per entity for the length of a tick.
13
+ *
14
+ * An exact evaluation walks the chain to the root and evaluates every level's clips; a socket on a
15
+ * hand is fourteen levels deep on a character, and the sockets a game asks about share most of
16
+ * that chain. Within a tick the inputs — the hierarchy, the clip set, the times, the weights — do
17
+ * not move, so each entity's world is evaluated once and every query below it composes onto the
18
+ * stored answer. Measured on a 70-joint skeleton with two clips: 764 µs to evaluate every joint
19
+ * one query at a time, 160 µs through the cache.
20
+ *
21
+ * **One cache per tick, per model.** The answer for an entity depends on the playbacks it was
22
+ * evaluated under, and the cache does not check them: a caller that changes what a model plays
23
+ * between queries calls {@link invalidate} in between, and calls it once per tick regardless.
24
+ *
25
+ * @author Alex Goldring
26
+ * @copyright Company Named Limited (c) 2026
27
+ */
28
+ export class T64WorldCache {
29
+ /**
30
+ * Evaluated worlds by entity, valid until {@link invalidate}.
31
+ *
32
+ * @type {Map<number, Transform64>}
33
+ */
34
+ #worlds = new Map();
35
+
36
+ /**
37
+ * Transforms handed back by {@link invalidate}, for the next tick's entries.
38
+ *
39
+ * @type {Transform64[]}
40
+ */
41
+ #pool = [];
42
+
43
+ /**
44
+ * Scratch for one level's animated local pose.
45
+ *
46
+ * @type {Transform64}
47
+ */
48
+ #local = new Transform64();
49
+
50
+ /**
51
+ * How many entities hold an evaluated world right now.
52
+ *
53
+ * @returns {number}
54
+ */
55
+ get size() {
56
+ return this.#worlds.size;
57
+ }
58
+
59
+ /**
60
+ * Forget every evaluated world. Once per tick, and again whenever a model's playbacks change
61
+ * within one.
62
+ */
63
+ invalidate() {
64
+ const pool = this.#pool;
65
+
66
+ for (const world of this.#worlds.values()) {
67
+ pool.push(world);
68
+ }
69
+
70
+ this.#worlds.clear();
71
+ }
72
+
73
+ /**
74
+ * The entity's world pose under the playbacks, exactly — the same answer as
75
+ * {@link t64_evaluate_world}, from the cache where it has it.
76
+ *
77
+ * @param {Transform64} result
78
+ * @param {EntityComponentDataset} dataset
79
+ * @param {number} entity
80
+ * @param {PosePlayback[]} playbacks
81
+ * @returns {Transform64} `result`
82
+ */
83
+ evaluate(result, dataset, entity, playbacks) {
84
+ assert.defined(result, 'result');
85
+ assert.defined(dataset, 'dataset');
86
+ assert.isNonNegativeInteger(entity, 'entity');
87
+ assert.isArray(playbacks, 'playbacks');
88
+
89
+ result.copy(this.#world_of(dataset, entity, playbacks));
90
+
91
+ return result;
92
+ }
93
+
94
+ /**
95
+ * @param {EntityComponentDataset} dataset
96
+ * @param {number} entity
97
+ * @param {PosePlayback[]} playbacks
98
+ * @returns {Transform64} the cache's own copy; not to be kept
99
+ */
100
+ #world_of(dataset, entity, playbacks) {
101
+ const cached = this.#worlds.get(entity);
102
+
103
+ if (cached !== undefined) {
104
+ return cached;
105
+ }
106
+
107
+ assert.ok(dataset.entityExists(entity), `entity ${entity} does not exist`);
108
+
109
+ const attachment = dataset.getComponent(entity, TransformAttachment);
110
+
111
+ const world = this.#pool.pop() ?? new Transform64();
112
+ const local = this.#local;
113
+
114
+ if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
115
+ // the root of the chain, whose world pose is its own; a link whose parent has gone is
116
+ // a root until the attachment system detaches it, and answers from where it was
117
+ const rest = dataset.getComponent(entity, Transform64);
118
+
119
+ assert.defined(rest, `entity ${entity} carries no Transform64 and no attachment`);
120
+
121
+ t64_evaluate_local(local, dataset, entity, rest, playbacks);
122
+ local.updateMatrix();
123
+
124
+ world.copy(local);
125
+ } else {
126
+ // the parent first, so its answer is in the cache before this level's scratch is used
127
+ const parent = this.#world_of(dataset, attachment.parent, playbacks);
128
+
129
+ t64_evaluate_local(local, dataset, entity, attachment.transform, playbacks);
130
+ local.updateMatrix();
131
+
132
+ world.multiplyTransforms(parent, local);
133
+ }
134
+
135
+ this.#worlds.set(entity, world);
136
+
137
+ return world;
138
+ }
139
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
3
+ * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
4
+ */
5
+ /**
6
+ * One level of an exact evaluation: an entity's local pose under the playing clips
7
+ * ({@link pose_evaluate_local}), or — where a CPU writer holds its offset (`gpu_authority_hold`) —
8
+ * the offset itself, whatever the clips say of it.
9
+ *
10
+ * That is the GPU's rule, mirrored: the animation manager mutes every binding that names a held
11
+ * entity, so its row is what the holder wrote and no clip reaches it. A twin that applied the clips
12
+ * there would put a socket under a cape joint where the clip says the joint is, and the cape where
13
+ * the cloth says it is.
14
+ *
15
+ * @param {Transform64} result written with the local TRS; its matrix is left stale
16
+ * @param {EntityComponentDataset} dataset
17
+ * @param {number} entity
18
+ * @param {Transform64} rest the entity's own offset, or a root's world
19
+ * @param {PosePlayback[]} playbacks
20
+ * @returns {Transform64} `result`
21
+ */
22
+ export function t64_evaluate_local(result: Transform64, dataset: EntityComponentDataset, entity: number, rest: Transform64, playbacks: PosePlayback[]): Transform64;
23
+ export type EntityComponentDataset = import("../EntityComponentDataset.js").EntityComponentDataset;
24
+ export type PosePlayback = import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback;
25
+ //# sourceMappingURL=t64_evaluate_local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t64_evaluate_local.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_local.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,iEANW,sBAAsB,UACtB,MAAM,gCAEN,YAAY,EAAE,eAWxB;qCA7BY,OAAO,8BAA8B,EAAE,sBAAsB;2BAC7D,OAAO,wDAAwD,EAAE,YAAY"}
@@ -0,0 +1,35 @@
1
+ import { pose_evaluate_local } from "../../../shade/renderer/animation/pose/pose_evaluate_local.js";
2
+ import { GPUStateAuthorityFlags } from "../gpu/GPUStateAuthorityFlags.js";
3
+ import { gpu_authority_held } from "../gpu/gpu_authority_held.js";
4
+
5
+ /**
6
+ * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
7
+ * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
8
+ */
9
+
10
+ /**
11
+ * One level of an exact evaluation: an entity's local pose under the playing clips
12
+ * ({@link pose_evaluate_local}), or — where a CPU writer holds its offset (`gpu_authority_hold`) —
13
+ * the offset itself, whatever the clips say of it.
14
+ *
15
+ * That is the GPU's rule, mirrored: the animation manager mutes every binding that names a held
16
+ * entity, so its row is what the holder wrote and no clip reaches it. A twin that applied the clips
17
+ * there would put a socket under a cape joint where the clip says the joint is, and the cape where
18
+ * the cloth says it is.
19
+ *
20
+ * @param {Transform64} result written with the local TRS; its matrix is left stale
21
+ * @param {EntityComponentDataset} dataset
22
+ * @param {number} entity
23
+ * @param {Transform64} rest the entity's own offset, or a root's world
24
+ * @param {PosePlayback[]} playbacks
25
+ * @returns {Transform64} `result`
26
+ */
27
+ export function t64_evaluate_local(result, dataset, entity, rest, playbacks) {
28
+ if (gpu_authority_held(dataset, entity, GPUStateAuthorityFlags.TransformAttachment)) {
29
+ result.copy(rest);
30
+
31
+ return result;
32
+ }
33
+
34
+ return pose_evaluate_local(result, entity, rest, playbacks);
35
+ }
@@ -12,10 +12,12 @@
12
12
  *
13
13
  * An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
14
14
  * that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
15
+ * So does a level a CPU writer holds (`gpu_authority_hold`): no clip reaches its row on the GPU,
16
+ * and none reaches it here — it is its offset ({@link t64_evaluate_local}).
15
17
  *
16
- * Each level costs a scan of every channel of every playing clip, so a query is a few
17
- * microseconds at a character's depth and a whole skeleton one query at a time is most of a
18
- * millisecond; a caller asking about several entities of one model within a tick goes through
18
+ * Each level costs a lookup in every playing clip and the curves of the channels that name it in the
19
+ * audible ones, so a whole skeleton one query at a time re-evaluates every level above each joint
20
+ * again; a caller asking about several entities of one model within a tick goes through
19
21
  * {@link T64WorldCache}, which evaluates each entity once and composes the rest onto it.
20
22
  *
21
23
  * @param {Transform64} result written with the evaluated world TRS and matrix
@@ -1 +1 @@
1
- {"version":3,"file":"t64_evaluate_world.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_world.js"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,2CANW,WAAW,WACX,sBAAsB,UACtB,MAAM,aACN,YAAY,EAAE,GACZ,WAAW,CA2DvB;qCAvHY,OAAO,8BAA8B,EAAE,sBAAsB;2BAC7D,OAAO,wDAAwD,EAAE,YAAY;4BAJ9D,kBAAkB"}
1
+ {"version":3,"file":"t64_evaluate_world.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_world.js"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,2CANW,WAAW,WACX,sBAAsB,UACtB,MAAM,aACN,YAAY,EAAE,GACZ,WAAW,CA2DvB;qCAzHY,OAAO,8BAA8B,EAAE,sBAAsB;2BAC7D,OAAO,wDAAwD,EAAE,YAAY;4BAJ9D,kBAAkB"}
@@ -1,126 +1,128 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { pose_evaluate_local } from "../../../shade/renderer/animation/pose/pose_evaluate_local.js";
3
- import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
4
- import { Transform64 } from "./Transform64.js";
5
-
6
- /**
7
- * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
8
- * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
9
- */
10
-
11
- /**
12
- * Scratch for one level of the parent walk. Depth is bounded by the hierarchy, and reusing a
13
- * small stack keeps the query allocation-free.
14
- *
15
- * @type {Transform64[]}
16
- */
17
- const SCRATCH = [];
18
-
19
- /**
20
- * The chain from the entity up to its root, and each level's rest pose.
21
- *
22
- * @type {number[]}
23
- */
24
- const CHAIN = [];
25
-
26
- /**
27
- * @type {Transform64[]}
28
- */
29
- const RESTS = [];
30
-
31
- /**
32
- * @param {number} depth
33
- * @returns {Transform64}
34
- */
35
- function scratch_at(depth) {
36
- while (SCRATCH.length <= depth) {
37
- SCRATCH.push(new Transform64());
38
- }
39
-
40
- return SCRATCH[depth];
41
- }
42
-
43
- /**
44
- * Evaluate an entity's **world** pose under a set of playing clips, exactly, from its own chain.
45
- *
46
- * This is the question gameplay asks of an animated model and the only way the simulation may
47
- * ask it: where is the muzzle, where does this effect attach, where does the projectile leave
48
- * from. It walks the entity's `TransformAttachment` parents to the root, evaluates each level's
49
- * animated local pose from the clips ({@link pose_evaluate_local}, with the attachment's offset —
50
- * or the root's `Transform64` — as the rest pose), and composes down in double precision. Nothing
51
- * is read back from the GPU, nothing is a frame late, and nothing on the CPU has to have been
52
- * composed first: the answer is a pure function of (hierarchy, clip set, time, weights), which is
53
- * what keeps it deterministic on a peer with no device at all.
54
- *
55
- * An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
56
- * that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
57
- *
58
- * Each level costs a scan of every channel of every playing clip, so a query is a few
59
- * microseconds at a character's depth and a whole skeleton one query at a time is most of a
60
- * millisecond; a caller asking about several entities of one model within a tick goes through
61
- * {@link T64WorldCache}, which evaluates each entity once and composes the rest onto it.
62
- *
63
- * @param {Transform64} result written with the evaluated world TRS and matrix
64
- * @param {EntityComponentDataset} dataset
65
- * @param {number} entity
66
- * @param {PosePlayback[]} playbacks every clip playing on the model, with its time and weight
67
- * @returns {Transform64} `result`
68
- */
69
- export function t64_evaluate_world(result, dataset, entity, playbacks) {
70
- assert.defined(result, 'result');
71
- assert.defined(dataset, 'dataset');
72
- assert.isNonNegativeInteger(entity, 'entity');
73
- assert.isArray(playbacks, 'playbacks');
74
-
75
- CHAIN.length = 0;
76
- RESTS.length = 0;
77
-
78
- let cursor = entity;
79
-
80
- while (cursor !== -1) {
81
- assert.ok(dataset.entityExists(cursor), `entity ${cursor} in the chain above ${entity} does not exist`);
82
-
83
- const attachment = dataset.getComponent(cursor, TransformAttachment);
84
-
85
- CHAIN.push(cursor);
86
-
87
- if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
88
- // the root of the chain, whose world pose is its own; a link whose parent has gone is
89
- // a root until the attachment system detaches it, and answers from where it was
90
- const world = dataset.getComponent(cursor, Transform64);
91
-
92
- assert.defined(world, `entity ${cursor} carries no Transform64 and no attachment`);
93
-
94
- RESTS.push(world);
95
-
96
- break;
97
- }
98
-
99
- RESTS.push(attachment.transform);
100
-
101
- cursor = attachment.parent;
102
- }
103
-
104
- // root first, so each step composes onto what is already accumulated
105
- let depth = 0;
106
-
107
- for (let i = CHAIN.length - 1; i >= 0; i--) {
108
- const local = scratch_at(depth);
109
-
110
- pose_evaluate_local(local, CHAIN[i], RESTS[i], playbacks);
111
- local.updateMatrix();
112
-
113
- if (i === CHAIN.length - 1) {
114
- result.copy(local);
115
- } else {
116
- result.multiplyTransforms(result, local);
117
- }
118
-
119
- depth++;
120
- }
121
-
122
- CHAIN.length = 0;
123
- RESTS.length = 0;
124
-
125
- return result;
126
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
3
+ import { t64_evaluate_local } from "./t64_evaluate_local.js";
4
+ import { Transform64 } from "./Transform64.js";
5
+
6
+ /**
7
+ * @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
8
+ * @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
9
+ */
10
+
11
+ /**
12
+ * Scratch for one level of the parent walk. Depth is bounded by the hierarchy, and reusing a
13
+ * small stack keeps the query allocation-free.
14
+ *
15
+ * @type {Transform64[]}
16
+ */
17
+ const SCRATCH = [];
18
+
19
+ /**
20
+ * The chain from the entity up to its root, and each level's rest pose.
21
+ *
22
+ * @type {number[]}
23
+ */
24
+ const CHAIN = [];
25
+
26
+ /**
27
+ * @type {Transform64[]}
28
+ */
29
+ const RESTS = [];
30
+
31
+ /**
32
+ * @param {number} depth
33
+ * @returns {Transform64}
34
+ */
35
+ function scratch_at(depth) {
36
+ while (SCRATCH.length <= depth) {
37
+ SCRATCH.push(new Transform64());
38
+ }
39
+
40
+ return SCRATCH[depth];
41
+ }
42
+
43
+ /**
44
+ * Evaluate an entity's **world** pose under a set of playing clips, exactly, from its own chain.
45
+ *
46
+ * This is the question gameplay asks of an animated model and the only way the simulation may
47
+ * ask it: where is the muzzle, where does this effect attach, where does the projectile leave
48
+ * from. It walks the entity's `TransformAttachment` parents to the root, evaluates each level's
49
+ * animated local pose from the clips ({@link pose_evaluate_local}, with the attachment's offset —
50
+ * or the root's `Transform64` — as the rest pose), and composes down in double precision. Nothing
51
+ * is read back from the GPU, nothing is a frame late, and nothing on the CPU has to have been
52
+ * composed first: the answer is a pure function of (hierarchy, clip set, time, weights), which is
53
+ * what keeps it deterministic on a peer with no device at all.
54
+ *
55
+ * An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
56
+ * that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
57
+ * So does a level a CPU writer holds (`gpu_authority_hold`): no clip reaches its row on the GPU,
58
+ * and none reaches it here — it is its offset ({@link t64_evaluate_local}).
59
+ *
60
+ * Each level costs a lookup in every playing clip and the curves of the channels that name it in the
61
+ * audible ones, so a whole skeleton one query at a time re-evaluates every level above each joint
62
+ * again; a caller asking about several entities of one model within a tick goes through
63
+ * {@link T64WorldCache}, which evaluates each entity once and composes the rest onto it.
64
+ *
65
+ * @param {Transform64} result written with the evaluated world TRS and matrix
66
+ * @param {EntityComponentDataset} dataset
67
+ * @param {number} entity
68
+ * @param {PosePlayback[]} playbacks every clip playing on the model, with its time and weight
69
+ * @returns {Transform64} `result`
70
+ */
71
+ export function t64_evaluate_world(result, dataset, entity, playbacks) {
72
+ assert.defined(result, 'result');
73
+ assert.defined(dataset, 'dataset');
74
+ assert.isNonNegativeInteger(entity, 'entity');
75
+ assert.isArray(playbacks, 'playbacks');
76
+
77
+ CHAIN.length = 0;
78
+ RESTS.length = 0;
79
+
80
+ let cursor = entity;
81
+
82
+ while (cursor !== -1) {
83
+ assert.ok(dataset.entityExists(cursor), `entity ${cursor} in the chain above ${entity} does not exist`);
84
+
85
+ const attachment = dataset.getComponent(cursor, TransformAttachment);
86
+
87
+ CHAIN.push(cursor);
88
+
89
+ if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
90
+ // the root of the chain, whose world pose is its own; a link whose parent has gone is
91
+ // a root until the attachment system detaches it, and answers from where it was
92
+ const world = dataset.getComponent(cursor, Transform64);
93
+
94
+ assert.defined(world, `entity ${cursor} carries no Transform64 and no attachment`);
95
+
96
+ RESTS.push(world);
97
+
98
+ break;
99
+ }
100
+
101
+ RESTS.push(attachment.transform);
102
+
103
+ cursor = attachment.parent;
104
+ }
105
+
106
+ // root first, so each step composes onto what is already accumulated
107
+ let depth = 0;
108
+
109
+ for (let i = CHAIN.length - 1; i >= 0; i--) {
110
+ const local = scratch_at(depth);
111
+
112
+ t64_evaluate_local(local, dataset, CHAIN[i], RESTS[i], playbacks);
113
+ local.updateMatrix();
114
+
115
+ if (i === CHAIN.length - 1) {
116
+ result.copy(local);
117
+ } else {
118
+ result.multiplyTransforms(result, local);
119
+ }
120
+
121
+ depth++;
122
+ }
123
+
124
+ CHAIN.length = 0;
125
+ RESTS.length = 0;
126
+
127
+ return result;
128
+ }