@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,176 +1,187 @@
1
- import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
- import { chunk_scene_database_access_rw } from "../scene/chunk_scene_database_access.js";
4
- import { SCENE_DATABASE_SPEC } from "../scene/SCENE_DATABASE_SPEC.js";
5
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
- import { ComputeShader } from "../shader/ComputeShader.js";
7
- import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
- import { chunk_pose_accumulator } from "./chunk_pose_accumulator.js";
9
-
10
- const TRANSFORMS_TABLE = SCENE_DATABASE_SPEC.get('transforms');
11
-
12
- /**
13
- * Workgroup size for the resolve pass. Exported so dispatchers can pair
14
- * it with `transforms.dispatch_group_count(WORKGROUP_SIZE)`.
15
- */
16
- export const WORKGROUP_SIZE = 64;
17
-
18
- const PG_PREFIX = TRANSFORMS_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
19
-
20
- const resources = new ShaderResourceSetDescriptor();
21
- resources.createGroup()
22
- .addStorageBuffer('scene_database', WebGPUArray.from(u32), true)
23
- .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true);
24
-
25
- const body = CodeChunk.from(
26
- //language=WGSL
27
- `
28
- @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
29
- fn main(
30
- @builtin(workgroup_id) wg_id: vec3<u32>,
31
- @builtin(local_invocation_index) local_id: u32,
32
- ) {
33
- if !${PG_PREFIX}_setup(&scene_database, wg_id.x, local_id) {
34
- return;
35
- }
36
-
37
- let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
38
-
39
- if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
40
- return;
41
- }
42
- if !${PG_PREFIX}_is_occupied(slot_in_page) {
43
- return;
44
- }
45
-
46
- // Absolute transforms-table row index. The accumulator is laid out
47
- // one slot per row at the same index, so this is also the
48
- // accumulator slot.
49
- let row = ${PG_PREFIX}_slot_to_index(slot_in_page);
50
-
51
- let slot_base = pose_accumulator_slot_base(row);
52
- let dirty_word = slot_base + POSE_OFFSET_DIRTY;
53
-
54
- // Single load of the dirty mask gates the whole resolve. If
55
- // nothing was contributed to this row this frame, leave local_*
56
- // alone (and the accumulator slot is already zero because the
57
- // previous resolve drained it).
58
- let dirty = atomicLoad(&pose_accumulator[dirty_word]);
59
- if dirty == 0u {
60
- return;
61
- }
62
-
63
- // ── Translation ───────────────────────────────────────────────
64
- if (dirty & POSE_DIRTY_T_MASK) != 0u {
65
- let t_base = slot_base + POSE_OFFSET_TRANSLATION;
66
- // Per-axis: only overwrite the channels that actually had a
67
- // contribution. Read the current local_translation through
68
- // the rw helper and patch the dirty channels in-place — the
69
- // sibling-axis race that the old direct writer already
70
- // tolerated still applies (two threads writing different
71
- // axes of the same node), but we now have at most one resolve
72
- // thread per row, so it never triggers here.
73
- var t = scene_read_node_rw(&scene_database, row).local_translation;
74
- if (dirty & POSE_DIRTY_TX) != 0u {
75
- t.x = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 0u]));
76
- atomicStore(&pose_accumulator[t_base + 0u], 0u);
77
- }
78
- if (dirty & POSE_DIRTY_TY) != 0u {
79
- t.y = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 1u]));
80
- atomicStore(&pose_accumulator[t_base + 1u], 0u);
81
- }
82
- if (dirty & POSE_DIRTY_TZ) != 0u {
83
- t.z = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 2u]));
84
- atomicStore(&pose_accumulator[t_base + 2u], 0u);
85
- }
86
- scene_write_node_local_translation(&scene_database, row, t);
87
- }
88
-
89
- // ── Rotation ──────────────────────────────────────────────────
90
- if (dirty & POSE_DIRTY_R) != 0u {
91
- let r_base = slot_base + POSE_OFFSET_ROTATION;
92
- let r = vec4<f32>(
93
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 0u])),
94
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 1u])),
95
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 2u])),
96
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 3u])),
97
- );
98
- atomicStore(&pose_accumulator[r_base + 0u], 0u);
99
- atomicStore(&pose_accumulator[r_base + 1u], 0u);
100
- atomicStore(&pose_accumulator[r_base + 2u], 0u);
101
- atomicStore(&pose_accumulator[r_base + 3u], 0u);
102
- // A sum of length zero carries no orientation to recover: every
103
- // clip that writes this rotation is playing at weight zero, and
104
- // the apply pass contributes to a bound clip whatever its
105
- // weight. \`normalize\` answers NaN there, and one NaN local
106
- // rotation reaches every skin matrix naming the joint, so the
107
- // meshes it drives stop rasterising altogether — a rig loses a
108
- // limb because a clip nobody is playing happens to be the only
109
- // one that rotates it. Leaving the row alone is the rest pose,
110
- // which is the answer the CPU twin gives (\`pose_evaluate_local\`)
111
- // and the value the row still holds.
112
- //
113
- // Otherwise: the weighted-quaternion sum (\`w_i * q_i\`) is the
114
- // standard nlerp blend numerator; normalise here, once, after
115
- // every contributor has been folded in. The apply pass
116
- // canonicalised signs at GLTF load so we don't hit the antipode
117
- // case for imported clips.
118
- if length(r) > 0.0 {
119
- scene_write_node_local_rotation(&scene_database, row, normalize(r));
120
- }
121
- }
122
-
123
- // ── Scale ─────────────────────────────────────────────────────
124
- if (dirty & POSE_DIRTY_S_MASK) != 0u {
125
- let s_base = slot_base + POSE_OFFSET_SCALE;
126
- var s = scene_read_node_rw(&scene_database, row).local_scale;
127
- if (dirty & POSE_DIRTY_SX) != 0u {
128
- s.x = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 0u]));
129
- atomicStore(&pose_accumulator[s_base + 0u], 0u);
130
- }
131
- if (dirty & POSE_DIRTY_SY) != 0u {
132
- s.y = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 1u]));
133
- atomicStore(&pose_accumulator[s_base + 1u], 0u);
134
- }
135
- if (dirty & POSE_DIRTY_SZ) != 0u {
136
- s.z = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 2u]));
137
- atomicStore(&pose_accumulator[s_base + 2u], 0u);
138
- }
139
- scene_write_node_local_scale(&scene_database, row, s);
140
- }
141
-
142
- // Clear the dirty mask itself last, so an interrupted resolve
143
- // (theoretical — these passes don't yield) would still leave the
144
- // dirty bits intact to be redone.
145
- atomicStore(&pose_accumulator[dirty_word], 0u);
146
- }
147
- `, [
148
- TRANSFORMS_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
149
- chunk_scene_database_access_rw,
150
- chunk_pose_accumulator,
151
- ]);
152
-
153
- /**
154
- * Compute shader that drains the pose accumulator into
155
- * `transforms_table.local_{translation,rotation,scale}`.
156
- *
157
- * Walks the transforms table via the read+write page iterator — one
158
- * thread per slot. For each occupied row whose accumulator slot has
159
- * any dirty bits set, reads the contributed components (atomic
160
- * loads, bitcast back to f32), writes them through the per-field
161
- * scene helpers, normalises rotation, and zeros the slot for next
162
- * frame.
163
- *
164
- * The accumulator buffer must be sized to at least
165
- * `transforms.dispatch_page_count * elements_per_page` rows —
166
- * {@link GPUAnimationManager#ensure_pose_accumulator_capacity}
167
- * handles that.
168
- *
169
- * Dispatch via
170
- * `shader_animation_pose_resolve.dispatch({ group_count_x: transforms.dispatch_group_count(WORKGROUP_SIZE), ... })`.
171
- */
172
- export const shader_animation_pose_resolve = ComputeShader.from({
173
- label: "Animation/PoseResolve",
174
- body,
175
- resources,
176
- });
1
+ import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
+ import { chunk_scene_database_access_rw } from "../scene/chunk_scene_database_access.js";
4
+ import { SCENE_DATABASE_SPEC } from "../scene/SCENE_DATABASE_SPEC.js";
5
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
+ import { ComputeShader } from "../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { chunk_pose_accumulator } from "./chunk_pose_accumulator.js";
9
+
10
+ const TRANSFORMS_TABLE = SCENE_DATABASE_SPEC.get('transforms');
11
+
12
+ /**
13
+ * Workgroup size for the resolve pass. Exported so dispatchers can pair
14
+ * it with `transforms.dispatch_group_count(WORKGROUP_SIZE)`.
15
+ */
16
+ export const WORKGROUP_SIZE = 64;
17
+
18
+ const PG_PREFIX = TRANSFORMS_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
19
+
20
+ const resources = new ShaderResourceSetDescriptor();
21
+ resources.createGroup()
22
+ .addStorageBuffer('scene_database', WebGPUArray.from(u32), true)
23
+ .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true);
24
+
25
+ const body = CodeChunk.from(
26
+ //language=WGSL
27
+ `
28
+ @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
29
+ fn main(
30
+ @builtin(workgroup_id) wg_id: vec3<u32>,
31
+ @builtin(local_invocation_index) local_id: u32,
32
+ ) {
33
+ if !${PG_PREFIX}_setup(&scene_database, wg_id.x, local_id) {
34
+ return;
35
+ }
36
+
37
+ let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
38
+
39
+ if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
40
+ return;
41
+ }
42
+ if !${PG_PREFIX}_is_occupied(slot_in_page) {
43
+ return;
44
+ }
45
+
46
+ // Absolute transforms-table row index. The accumulator is laid out
47
+ // one slot per row at the same index, so this is also the
48
+ // accumulator slot.
49
+ let row = ${PG_PREFIX}_slot_to_index(slot_in_page);
50
+
51
+ let slot_base = pose_accumulator_slot_base(row);
52
+ let dirty_word = slot_base + POSE_OFFSET_DIRTY;
53
+
54
+ // Single load of the dirty mask gates the whole resolve. If
55
+ // nothing was contributed to this row this frame, leave local_*
56
+ // alone (and the accumulator slot is already zero because the
57
+ // previous resolve drained it).
58
+ let dirty = atomicLoad(&pose_accumulator[dirty_word]);
59
+ if dirty == 0u {
60
+ return;
61
+ }
62
+
63
+ // ── Translation ───────────────────────────────────────────────
64
+ if (dirty & POSE_DIRTY_T_MASK) != 0u {
65
+ let t_base = slot_base + POSE_OFFSET_TRANSLATION;
66
+ // Per-axis: only overwrite the channels that actually had a
67
+ // contribution. Read the current local_translation through
68
+ // the rw helper and patch the dirty channels in-place — the
69
+ // sibling-axis race that the old direct writer already
70
+ // tolerated still applies (two threads writing different
71
+ // axes of the same node), but we now have at most one resolve
72
+ // thread per row, so it never triggers here.
73
+ var t = scene_read_node_rw(&scene_database, row).local_translation;
74
+ if (dirty & POSE_DIRTY_TX) != 0u {
75
+ t.x = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 0u]));
76
+ atomicStore(&pose_accumulator[t_base + 0u], 0u);
77
+ }
78
+ if (dirty & POSE_DIRTY_TY) != 0u {
79
+ t.y = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 1u]));
80
+ atomicStore(&pose_accumulator[t_base + 1u], 0u);
81
+ }
82
+ if (dirty & POSE_DIRTY_TZ) != 0u {
83
+ t.z = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 2u]));
84
+ atomicStore(&pose_accumulator[t_base + 2u], 0u);
85
+ }
86
+ scene_write_node_local_translation(&scene_database, row, t);
87
+ }
88
+
89
+ // ── Rotation ──────────────────────────────────────────────────
90
+ if (dirty & POSE_DIRTY_R) != 0u {
91
+ let r_base = slot_base + POSE_OFFSET_ROTATION;
92
+ let r = vec4<f32>(
93
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 0u])),
94
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 1u])),
95
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 2u])),
96
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 3u])),
97
+ );
98
+ atomicStore(&pose_accumulator[r_base + 0u], 0u);
99
+ atomicStore(&pose_accumulator[r_base + 1u], 0u);
100
+ atomicStore(&pose_accumulator[r_base + 2u], 0u);
101
+ atomicStore(&pose_accumulator[r_base + 3u], 0u);
102
+ // The weighted-quaternion sum (\`w_i * q_i\`) is the standard
103
+ // nlerp blend numerator; normalise here, once, after every
104
+ // contributor has been folded in. The apply pass canonicalised
105
+ // signs at GLTF load so we don't hit the antipode case for
106
+ // imported clips.
107
+ //
108
+ // A sum of length zero carries no orientation to recover: every
109
+ // clip that writes this rotation is playing at weight zero — a
110
+ // faded-out clip keeps its binding, and the apply pass
111
+ // contributes to a bound clip whatever its weight — or the
112
+ // contributions cancelled exactly. \`normalize\` answers NaN there,
113
+ // and one NaN local rotation reaches every skin matrix naming the
114
+ // joint, so the meshes it drives stop rasterising altogether. Nor
115
+ // can the row be left alone: once a clip has written it, it holds
116
+ // that clip's last pose, not the rest. The answer is the rest
117
+ // rotation, which every contribution carried into the slot from
118
+ // its binding — what the CPU twin (\`pose_evaluate_local\`) gives.
119
+ if length(r) > 0.0 {
120
+ scene_write_node_local_rotation(&scene_database, row, normalize(r));
121
+ } else {
122
+ let rest_base = slot_base + POSE_OFFSET_REST_ROTATION;
123
+ let rest = vec4<f32>(
124
+ bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 0u])),
125
+ bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 1u])),
126
+ bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 2u])),
127
+ bitcast<f32>(atomicLoad(&pose_accumulator[rest_base + 3u])),
128
+ );
129
+ scene_write_node_local_rotation(&scene_database, row, rest);
130
+ }
131
+ }
132
+
133
+ // ── Scale ─────────────────────────────────────────────────────
134
+ if (dirty & POSE_DIRTY_S_MASK) != 0u {
135
+ let s_base = slot_base + POSE_OFFSET_SCALE;
136
+ var s = scene_read_node_rw(&scene_database, row).local_scale;
137
+ if (dirty & POSE_DIRTY_SX) != 0u {
138
+ s.x = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 0u]));
139
+ atomicStore(&pose_accumulator[s_base + 0u], 0u);
140
+ }
141
+ if (dirty & POSE_DIRTY_SY) != 0u {
142
+ s.y = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 1u]));
143
+ atomicStore(&pose_accumulator[s_base + 1u], 0u);
144
+ }
145
+ if (dirty & POSE_DIRTY_SZ) != 0u {
146
+ s.z = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 2u]));
147
+ atomicStore(&pose_accumulator[s_base + 2u], 0u);
148
+ }
149
+ scene_write_node_local_scale(&scene_database, row, s);
150
+ }
151
+
152
+ // Clear the dirty mask itself last, so an interrupted resolve
153
+ // (theoretical — these passes don't yield) would still leave the
154
+ // dirty bits intact to be redone.
155
+ atomicStore(&pose_accumulator[dirty_word], 0u);
156
+ }
157
+ `, [
158
+ TRANSFORMS_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
159
+ chunk_scene_database_access_rw,
160
+ chunk_pose_accumulator,
161
+ ]);
162
+
163
+ /**
164
+ * Compute shader that drains the pose accumulator into
165
+ * `transforms_table.local_{translation,rotation,scale}`.
166
+ *
167
+ * Walks the transforms table via the read+write page iterator — one
168
+ * thread per slot. For each occupied row whose accumulator slot has
169
+ * any dirty bits set, reads the contributed components (atomic
170
+ * loads, bitcast back to f32), writes them through the per-field
171
+ * scene helpers, normalises rotation — or, for a rotation summing to
172
+ * nothing, writes the rest rotation the contributions carried — and
173
+ * zeros the sums and the dirty mask for next frame.
174
+ *
175
+ * The accumulator buffer must be sized to at least
176
+ * `transforms.dispatch_page_count * elements_per_page` rows —
177
+ * {@link GPUAnimationManager#ensure_pose_accumulator_capacity}
178
+ * handles that.
179
+ *
180
+ * Dispatch via
181
+ * `shader_animation_pose_resolve.dispatch({ group_count_x: transforms.dispatch_group_count(WORKGROUP_SIZE), ... })`.
182
+ */
183
+ export const shader_animation_pose_resolve = ComputeShader.from({
184
+ label: "Animation/PoseResolve",
185
+ body,
186
+ resources,
187
+ });
@@ -65,6 +65,13 @@ export class GPUMeshSkinningContext {
65
65
  * @returns {GPUBuffer|null}
66
66
  */
67
67
  get bindings_buffer(): any;
68
+ /**
69
+ * Bound {@link SkinnedMesh}es — the records {@link bindings_buffer} holds once {@link update} has
70
+ * uploaded them, which it does on the frame they change.
71
+ *
72
+ * @returns {number}
73
+ */
74
+ get binding_count(): number;
68
75
  /**
69
76
  * Per-meshlet base offsets into {@link prev_positions_buffer},
70
77
  * indexed by absolute meshlet metadata row. Non-clone meshlets
@@ -1 +1 @@
1
- {"version":3,"file":"GPUMeshSkinningContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js"],"names":[],"mappings":"AAmFA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAgNI;;;;;;;OAOG;IACH,sEAPW;QACV,UAAgB,EAAE,kBAAkB,CAAC;QACrC,iBAAuB,EAAE,mBAAmB,CAAC;QAC7C,aAAmB,EAAE,eAAe,CAAC;QACrC,MAAY,YAAY;KACrB,EAcH;IAED;;;;;;OAMG;IACH,iCAEC;IAED;;;;;;;OAOG;IACH,yCAEC;IAED;;;;;;OAMG;IACH,2BAEC;IAED;;;;;;;OAOG;IACH,wCAEC;IAED;;;;;;;;;;;;OAYG;IACH,qBAJW,MAAM,YACN,eAAe,GACb,mBAAmB,CAqB/B;IAED;;;;;OAKG;IACH,iBAHW,MAAM,GACJ,mBAAmB,GAAC,SAAS,CAMzC;IAED;;;;;;;;;;OAUG;IACH,aAHW,MAAM,WACN,MAAM,QAwBhB;IAED;;;;;;;OAOG;IACH,oBAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAI5B;IAED;;;;;;;;;;OAUG;IACH,eAFW,MAAM,QAYhB;IAED;;;;;;;;OAQG;IACH,4BAFW,MAAM,QAUhB;IA4FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,sBAFW,MAAM,QAqBhB;IAuBD;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAJW,sBAAsB,GACpB,OAAO,CA0NnB;IAkXD;;;;;;;OAOG;IACH,gBA+BC;;CACJ;qCA/wCY,OAAO,2CAA2C,EAAE,sBAAsB;iCAC1E,OAAO,sCAAsC,EAAE,kBAAkB;8BACjE,OAAO,gCAAgC,EAAE,eAAe;8BACxD,OAAO,mCAAmC,EAAE,eAAe;kCAC3D,OAAO,uCAAuC,EAAE,mBAAmB;kCACnE,OAAO,2BAA2B,EAAE,mBAAmB"}
1
+ {"version":3,"file":"GPUMeshSkinningContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js"],"names":[],"mappings":"AAmFA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAgNI;;;;;;;OAOG;IACH,sEAPW;QACV,UAAgB,EAAE,kBAAkB,CAAC;QACrC,iBAAuB,EAAE,mBAAmB,CAAC;QAC7C,aAAmB,EAAE,eAAe,CAAC;QACrC,MAAY,YAAY;KACrB,EAcH;IAED;;;;;;OAMG;IACH,iCAEC;IAED;;;;;;;OAOG;IACH,yCAEC;IAED;;;;;;OAMG;IACH,2BAEC;IAED;;;;;OAKG;IACH,4BAEC;IAED;;;;;;;OAOG;IACH,wCAEC;IAED;;;;;;;;;;;;OAYG;IACH,qBAJW,MAAM,YACN,eAAe,GACb,mBAAmB,CAqB/B;IAED;;;;;OAKG;IACH,iBAHW,MAAM,GACJ,mBAAmB,GAAC,SAAS,CAMzC;IAED;;;;;;;;;;OAUG;IACH,aAHW,MAAM,WACN,MAAM,QAwBhB;IAED;;;;;;;OAOG;IACH,oBAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAI5B;IAED;;;;;;;;;;OAUG;IACH,eAFW,MAAM,QAYhB;IAED;;;;;;;;OAQG;IACH,4BAFW,MAAM,QAUhB;IA4FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,sBAFW,MAAM,QAqBhB;IAuBD;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAJW,sBAAsB,GACpB,OAAO,CA0NnB;IAmXD;;;;;;;OAOG;IACH,gBA+BC;;CACJ;qCA1xCY,OAAO,2CAA2C,EAAE,sBAAsB;iCAC1E,OAAO,sCAAsC,EAAE,kBAAkB;8BACjE,OAAO,gCAAgC,EAAE,eAAe;8BACxD,OAAO,mCAAmC,EAAE,eAAe;kCAC3D,OAAO,uCAAuC,EAAE,mBAAmB;kCACnE,OAAO,2BAA2B,EAAE,mBAAmB"}
@@ -372,6 +372,16 @@ export class GPUMeshSkinningContext {
372
372
  return this.#bindings_buffer;
373
373
  }
374
374
 
375
+ /**
376
+ * Bound {@link SkinnedMesh}es — the records {@link bindings_buffer} holds once {@link update} has
377
+ * uploaded them, which it does on the frame they change.
378
+ *
379
+ * @returns {number}
380
+ */
381
+ get binding_count() {
382
+ return this.#bindings.length;
383
+ }
384
+
375
385
  /**
376
386
  * Per-meshlet base offsets into {@link prev_positions_buffer},
377
387
  * indexed by absolute meshlet metadata row. Non-clone meshlets
@@ -1233,6 +1243,7 @@ export class GPUMeshSkinningContext {
1233
1243
 
1234
1244
  write_gpu_typed_buffer({
1235
1245
  skin_matrix_offset: this.#animation_manager.get_skin_matrix_offset(b.skin_id),
1246
+ skin_matrix_count: this.#animation_manager.get_skin_joint_count(b.skin_id),
1236
1247
  source_meshlet_metadata_offset: b.source_meshlet_metadata_offset,
1237
1248
  clone_meshlet_metadata_offset: b.clone_meshlet_metadata_offset,
1238
1249
  meshlet_count: b.meshlet_count,
@@ -9,7 +9,9 @@
9
9
  * - `skin_matrix_offset` is the skin's first joint row, read from the
10
10
  * animation manager's {@link GPUAnimationManager#get_skin_matrix_offset}
11
11
  * — a joint's matrix sits at its row — so the shader can index
12
- * `skin_matrices` directly without dereferencing the skin record.
12
+ * `skin_matrices` directly without dereferencing the skin record;
13
+ * `skin_matrix_count`, its number of joints, from
14
+ * {@link GPUAnimationManager#get_skin_joint_count}.
13
15
  * - The two `*_meshlet_metadata_offset` values are the starts of the
14
16
  * source's and clone's meshlet ranges in the meshlet metadata
15
17
  * buffer; combined with `meshlet_count`, they bound the per-binding
@@ -1 +1 @@
1
- {"version":3,"file":"SKINNING_BINDING_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,mDAwDsB;6BA3EO,mCAAmC"}
1
+ {"version":3,"file":"SKINNING_BINDING_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,mDA+DsB;6BApFO,mCAAmC"}
@@ -12,7 +12,9 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
12
12
  * - `skin_matrix_offset` is the skin's first joint row, read from the
13
13
  * animation manager's {@link GPUAnimationManager#get_skin_matrix_offset}
14
14
  * — a joint's matrix sits at its row — so the shader can index
15
- * `skin_matrices` directly without dereferencing the skin record.
15
+ * `skin_matrices` directly without dereferencing the skin record;
16
+ * `skin_matrix_count`, its number of joints, from
17
+ * {@link GPUAnimationManager#get_skin_joint_count}.
16
18
  * - The two `*_meshlet_metadata_offset` values are the starts of the
17
19
  * source's and clone's meshlet ranges in the meshlet metadata
18
20
  * buffer; combined with `meshlet_count`, they bound the per-binding
@@ -26,6 +28,13 @@ export const SKINNING_BINDING_STRUCT = WebGPUStruct.from({
26
28
  */
27
29
  skin_matrix_offset: u32,
28
30
 
31
+ /**
32
+ * How many joints the skin has: its matrices are `skin_matrix_count` rows from
33
+ * `skin_matrix_offset`. The skinning shader needs no count — a vertex names its joints — but a
34
+ * pass over the skin's pose does, such as the virtual shadow map's test of whether it moved.
35
+ */
36
+ skin_matrix_count: u32,
37
+
29
38
  /**
30
39
  * First source meshlet record in the meshlet metadata buffer. The
31
40
  * skinning shader reads attributes (position / normal / tangent /
@@ -1 +1 @@
1
- {"version":3,"file":"table_wgsl_gen_read_code.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js"],"names":[],"mappings":"AAyKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uEAZW,MAAM,eACN,MAAM,qBAEJ,IAAI,CA8BhB"}
1
+ {"version":3,"file":"table_wgsl_gen_read_code.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js"],"names":[],"mappings":"AAqMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uEAZW,MAAM,eACN,MAAM,qBAEJ,IAAI,CA8BhB"}
@@ -1,13 +1,17 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
2
  import {
3
3
  f32,
4
+ i32,
4
5
  mat4x4f,
5
6
  u32,
6
7
  vec2f,
8
+ vec2i,
7
9
  vec2u,
8
10
  vec3f,
11
+ vec3i,
9
12
  vec3u,
10
13
  vec4f,
14
+ vec4i,
11
15
  vec4u
12
16
  } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
13
17
 
@@ -50,6 +54,30 @@ function table_wgsl_gen_read_code_primitive(
50
54
  case f32:
51
55
  builder.extend(`bitcast<f32>(${buffer_name}[base_offset + ${offset}])`);
52
56
  return;
57
+ case i32:
58
+ builder.extend(`bitcast<i32>(${buffer_name}[base_offset + ${offset}])`);
59
+ return;
60
+ case vec2i:
61
+ builder.extend(`vec2<i32>(`);
62
+ builder.indent();
63
+ read_multiple(builder, offset, buffer_name, i32, 2);
64
+ builder.dedent();
65
+ builder.extend(')');
66
+ return;
67
+ case vec3i:
68
+ builder.extend(`vec3<i32>(`);
69
+ builder.indent();
70
+ read_multiple(builder, offset, buffer_name, i32, 3);
71
+ builder.dedent();
72
+ builder.extend(')');
73
+ return;
74
+ case vec4i:
75
+ builder.extend(`vec4<i32>(`);
76
+ builder.indent();
77
+ read_multiple(builder, offset, buffer_name, i32, 4);
78
+ builder.dedent();
79
+ builder.extend(')');
80
+ return;
53
81
  case vec2f:
54
82
  builder.extend(`vec2<f32>(`);
55
83
  builder.indent();
@@ -1 +1 @@
1
- {"version":3,"file":"table_wgsl_gen_write_code.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js"],"names":[],"mappings":"AAoHA;;;;;;;;;;;;;;GAcG;AACH,wEANW,MAAM,eACN,MAAM,iCAEN,MAAM,GACJ,IAAI,CAyBhB"}
1
+ {"version":3,"file":"table_wgsl_gen_write_code.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js"],"names":[],"mappings":"AAkJA;;;;;;;;;;;;;;GAcG;AACH,wEANW,MAAM,eACN,MAAM,iCAEN,MAAM,GACJ,IAAI,CAyBhB"}
@@ -1,5 +1,19 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
- import { f32, mat4x4f, u32, vec2f, vec2u, vec3f, vec3u, vec4f, vec4u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import {
3
+ f32,
4
+ i32,
5
+ mat4x4f,
6
+ u32,
7
+ vec2f,
8
+ vec2i,
9
+ vec2u,
10
+ vec3f,
11
+ vec3i,
12
+ vec3u,
13
+ vec4f,
14
+ vec4i,
15
+ vec4u
16
+ } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
17
 
4
18
  /**
5
19
  *
@@ -21,8 +35,24 @@ function table_wgsl_gen_write_code_primitive(
21
35
  builder.add(`${buffer_name}[base_offset + ${offset}] = ${value_expr};`);
22
36
  return;
23
37
  case f32:
38
+ case i32:
24
39
  builder.add(`${buffer_name}[base_offset + ${offset}] = bitcast<u32>(${value_expr});`);
25
40
  return;
41
+ case vec2i:
42
+ for (let i = 0; i < 2; i++) {
43
+ table_wgsl_gen_write_code_primitive(builder, offset + i, buffer_name, i32, `${value_expr}[${i}]`);
44
+ }
45
+ return;
46
+ case vec3i:
47
+ for (let i = 0; i < 3; i++) {
48
+ table_wgsl_gen_write_code_primitive(builder, offset + i, buffer_name, i32, `${value_expr}[${i}]`);
49
+ }
50
+ return;
51
+ case vec4i:
52
+ for (let i = 0; i < 4; i++) {
53
+ table_wgsl_gen_write_code_primitive(builder, offset + i, buffer_name, i32, `${value_expr}[${i}]`);
54
+ }
55
+ return;
26
56
  case vec2f:
27
57
  for (let i = 0; i < 2; i++) {
28
58
  table_wgsl_gen_write_code_primitive(builder, offset + i, buffer_name, f32, `${value_expr}[${i}]`);
@@ -35,5 +35,8 @@ export class MeshletGeometry {
35
35
  equals(other: MeshletGeometry): boolean;
36
36
  isMeshletGeometry: boolean;
37
37
  }
38
+ export namespace MeshletGeometry {
39
+ let typeName: string;
40
+ }
38
41
  import { MeshletBatch } from "./meshlet/MeshletBatch.js";
39
42
  //# sourceMappingURL=MeshletGeometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MeshletGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometry.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACI,WAAkB;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV,2BAAmC;IACnC,8BAAsC;IAEtC;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB,wBAGC;IAED;;OAEG;IACH,UAFU,YAAY,CAEQ;IAE9B;;;;OAIG;IACH,KAFU,WAAW,CAEG;IAExB,eAEC;IAED;;;OAGG;IACH,cAFW,eAAe,WAMzB;IAGL,2BAA2C;CAF1C;6BAxD4B,2BAA2B"}
1
+ {"version":3,"file":"MeshletGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometry.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACI,WAAkB;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV,2BAAmC;IACnC,8BAAsC;IAEtC;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB,wBAGC;IAED;;OAEG;IACH,UAFU,YAAY,CAEQ;IAE9B;;;;OAIG;IACH,KAFU,WAAW,CAEG;IAExB,eAEC;IAED;;;OAGG;IACH,cAFW,eAAe,WAMzB;IAGL,2BAA2C;CAF1C;;;;6BAxD4B,2BAA2B"}
@@ -57,4 +57,5 @@ export class MeshletGeometry {
57
57
  }
58
58
 
59
59
  MeshletGeometry.prototype.isMeshletGeometry = true;
60
+ MeshletGeometry.typeName = "MeshletGeometry";
60
61
 
@@ -1 +1 @@
1
- {"version":3,"file":"LIGHT_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/LIGHT_DATABASE_SPEC.js"],"names":[],"mappings":"AAUA,wDAiBG;sCA1BmC,0CAA0C"}
1
+ {"version":3,"file":"LIGHT_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/LIGHT_DATABASE_SPEC.js"],"names":[],"mappings":"AAYA,wDAkCG;sCA7CmC,0CAA0C"}