@woosh/meep-engine 3.43.0 → 3.45.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 (466) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/prototypeEditorShell.d.ts.map +1 -1
  3. package/editor/prototypeEditorShell.js +4 -2
  4. package/package.json +1 -1
  5. package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
  6. package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
  7. package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
  8. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
  9. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
  10. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
  11. package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
  12. package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
  13. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
  14. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
  15. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
  16. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
  17. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
  18. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
  19. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
  20. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
  21. package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
  22. package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
  23. package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
  24. package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
  25. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
  26. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
  27. package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
  28. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
  29. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
  30. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
  31. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
  32. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
  33. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
  34. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
  35. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
  36. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
  37. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
  38. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
  39. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
  40. package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
  41. package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
  42. package/src/core/geom/vec3/v3_distance_array.js +19 -0
  43. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
  44. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
  45. package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
  46. package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
  47. package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
  48. package/src/core/geom/vec3/v3_reject_array.js +32 -0
  49. package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
  50. package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
  51. package/src/core/graph/csr/csr_build_incidence.js +71 -0
  52. package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
  53. package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
  54. package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
  55. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
  56. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
  57. package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
  58. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
  59. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
  60. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
  61. package/src/core/math/max2_exact.d.ts +15 -0
  62. package/src/core/math/max2_exact.d.ts.map +1 -0
  63. package/src/core/math/max2_exact.js +30 -0
  64. package/src/core/math/min2_exact.d.ts +20 -0
  65. package/src/core/math/min2_exact.d.ts.map +1 -0
  66. package/src/core/math/min2_exact.js +35 -0
  67. package/src/engine/Clock.d.ts +15 -0
  68. package/src/engine/Clock.d.ts.map +1 -1
  69. package/src/engine/Clock.js +29 -5
  70. package/src/engine/Engine.d.ts.map +1 -1
  71. package/src/engine/Engine.js +11 -19
  72. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  73. package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
  74. package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
  75. package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
  76. package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
  77. package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
  78. package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
  79. package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
  80. package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts +57 -0
  81. package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
  82. package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
  83. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
  84. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
  85. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
  86. package/src/engine/graphics3/AnimationGraphSystem.d.ts +28 -13
  87. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  88. package/src/engine/graphics3/AnimationGraphSystem.js +107 -64
  89. package/src/engine/graphics3/AnimationSystem.d.ts +29 -15
  90. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  91. package/src/engine/graphics3/AnimationSystem.js +112 -61
  92. package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
  93. package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
  94. package/src/engine/graphics3/MeshSkinSystem.js +317 -0
  95. package/src/engine/graphics3/MeshSystem.d.ts +15 -35
  96. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  97. package/src/engine/graphics3/MeshSystem.js +21 -298
  98. package/src/engine/graphics3/RowChains.d.ts +76 -0
  99. package/src/engine/graphics3/RowChains.d.ts.map +1 -0
  100. package/src/engine/graphics3/RowChains.js +347 -0
  101. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
  102. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  103. package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
  104. package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
  105. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
  106. package/src/engine/graphics3/animation/AnimationClips.js +79 -0
  107. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
  108. package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
  109. package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
  110. package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
  111. package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
  112. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
  113. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
  114. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +80 -75
  115. package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
  116. package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
  117. package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
  118. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
  119. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  120. package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
  121. package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
  122. package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
  123. package/src/engine/graphics3/prefab/prefab_place.js +175 -130
  124. package/src/engine/graphics3/register_clips.d.ts +93 -0
  125. package/src/engine/graphics3/register_clips.d.ts.map +1 -0
  126. package/src/engine/graphics3/register_clips.js +166 -0
  127. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
  128. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  129. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
  130. package/src/engine/physics/cloth/MEASUREMENTS.md +795 -0
  131. package/src/engine/physics/cloth/PLAN.md +349 -17
  132. package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
  133. package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
  134. package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
  135. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +44 -0
  136. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
  137. package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +107 -0
  138. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
  139. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  140. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +371 -284
  141. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
  142. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
  143. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +275 -0
  144. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
  145. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  146. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
  147. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  148. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
  149. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
  150. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
  151. package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
  152. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +1 -1
  153. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  154. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +17 -62
  155. package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
  156. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  157. package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
  158. package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
  159. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
  160. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
  161. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  162. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
  163. package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +6 -0
  164. package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
  165. package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
  166. package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
  167. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
  168. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  169. package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
  170. package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
  171. package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
  172. package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
  173. package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
  174. package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
  175. package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
  176. package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
  177. package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
  178. package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
  179. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
  180. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  181. package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
  182. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
  183. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  184. package/src/engine/physics/cloth/ecs/ClothWorld.js +754 -207
  185. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
  186. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
  187. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
  188. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
  189. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  190. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +297 -101
  191. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
  192. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  193. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +12 -10
  194. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +3 -3
  195. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  196. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +60 -120
  197. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
  198. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
  199. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +135 -0
  200. package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
  201. package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
  202. package/src/engine/physics/cloth/ecs/cloth_holds.js +583 -0
  203. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
  204. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  205. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +168 -51
  206. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
  207. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  208. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
  209. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
  210. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  211. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +51 -42
  212. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
  213. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  214. package/src/engine/physics/cloth/ecs/cloth_write_back.js +62 -50
  215. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
  216. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +65 -58
  217. package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
  218. package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
  219. package/src/engine/physics/cloth/playground/collide_main.js +3 -29
  220. package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
  221. package/src/engine/physics/cloth/playground/garment_build.js +17 -5
  222. package/src/engine/physics/cloth/playground/garment_main.js +5 -20
  223. package/src/engine/physics/cloth/playground/main.js +6 -48
  224. package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
  225. package/src/engine/physics/cloth/playground/rig_build.js +302 -296
  226. package/src/engine/physics/cloth/playground/rig_main.js +947 -955
  227. package/src/engine/physics/cloth/playground/wind_main.js +8 -7
  228. package/src/engine/physics/cloth/solver/ClothState.d.ts +45 -7
  229. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  230. package/src/engine/physics/cloth/solver/ClothState.js +79 -83
  231. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
  232. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
  233. package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
  234. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +6 -1
  235. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  236. package/src/engine/physics/cloth/solver/cloth_contact_find.js +9 -3
  237. package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
  238. package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
  239. package/src/engine/physics/cloth/solver/cloth_hold_line.js +350 -0
  240. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
  241. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
  242. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
  243. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
  244. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
  245. package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
  246. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
  247. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
  248. package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
  249. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +6 -2
  250. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  251. package/src/engine/physics/cloth/solver/cloth_self_find.js +19 -68
  252. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  253. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
  254. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +24 -12
  255. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  256. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
  257. package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
  258. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  259. package/src/engine/physics/cloth/solver/cloth_step.js +189 -48
  260. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
  261. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  262. package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -6
  263. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
  264. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
  265. package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
  266. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
  267. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
  268. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
  269. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
  270. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
  271. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
  272. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  273. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
  274. package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +1 -1
  275. package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
  276. package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
  277. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
  278. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
  279. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
  280. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
  281. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  282. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
  283. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +12 -10
  284. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
  285. package/src/engine/physics/cloth/wind/cloth_sample_air.js +60 -82
  286. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  287. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
  288. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  289. package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
  290. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  291. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
  292. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
  293. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
  294. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
  295. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
  296. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
  297. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
  298. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
  299. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  300. package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
  301. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  302. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
  303. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
  304. package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
  305. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  306. package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
  307. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  308. package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
  309. package/src/engine/simulation/Ticker.d.ts +13 -0
  310. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  311. package/src/engine/simulation/Ticker.js +43 -8
  312. package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
  313. package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
  314. package/src/shade/RENDERER_CONTRACT.md +8 -2
  315. package/src/shade/playground/image_decode_bench/main.js +2 -1
  316. package/src/shade/playground/mesh_row_ceiling/main.js +2 -1
  317. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
  318. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
  319. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  320. package/src/shade/playground/skinned_blas_refit/main.js +11 -19
  321. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
  322. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
  323. package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
  324. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  325. package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
  326. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  327. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
  328. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
  329. package/src/shade/playground/ssr_variance/statistics.js +2 -1
  330. package/src/shade/playground/texture_encode/README.md +129 -109
  331. package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
  332. package/src/shade/playground/texture_encode/main.js +1431 -1430
  333. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  334. package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
  335. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +45 -14
  336. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  337. package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
  338. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
  339. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  340. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
  341. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
  342. package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
  343. package/src/shade/renderer/geometry/BoxGeometry.d.ts +1 -11
  344. package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
  345. package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
  346. package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
  347. package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
  348. package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
  349. package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
  350. package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
  351. package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
  352. package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
  353. package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
  354. package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
  355. package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
  356. package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
  357. package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
  358. package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
  359. package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
  360. package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
  361. package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
  362. package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
  363. package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
  364. package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
  365. package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
  366. package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
  367. package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
  368. package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
  369. package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
  370. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
  371. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
  372. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
  373. package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
  374. package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
  375. package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
  376. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
  377. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
  378. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
  379. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
  380. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
  381. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
  382. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
  383. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
  384. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
  385. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
  386. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
  387. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
  388. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
  389. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
  390. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  391. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
  392. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  393. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
  394. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
  395. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
  396. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
  397. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
  398. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
  399. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
  400. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
  401. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
  402. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
  403. package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
  404. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
  405. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  406. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
  407. package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
  408. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
  409. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  410. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
  411. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  412. package/src/shade/renderer/particles/graph_particles.js +6 -2
  413. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
  414. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
  415. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
  416. package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
  417. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  418. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +7 -2
  419. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  420. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
  421. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
  422. package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
  423. package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
  424. package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
  425. package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
  426. package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
  427. package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
  428. package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
  429. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
  430. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
  431. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
  432. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
  433. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
  434. package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
  435. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
  436. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
  437. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
  438. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
  439. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
  440. package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
  441. package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
  442. package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
  443. package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
  444. package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
  445. package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
  446. package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
  447. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
  448. package/src/shade/renderer/water/chunk_water_transport.js +7 -5
  449. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  450. package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
  451. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
  452. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
  453. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
  454. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  455. package/src/shade/renderer/water/shader_water.js +3 -1
  456. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
  457. package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
  458. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  459. package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
  460. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  461. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +37 -20
  462. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  463. package/src/shade/wgsl/validate_wgsl_source.js +74 -3
  464. package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
  465. package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
  466. package/src/engine/graphics3/register_instance_animation.js +0 -201
@@ -3,30 +3,37 @@
3
3
  * @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
4
4
  * @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
5
5
  * @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
6
- * @typedef {import("../register_instance_animation.js").InstanceAnimationRegistration} InstanceAnimationRegistration
6
+ */
7
+ /**
8
+ * One skinned primitive's registration: the mesh entity, and the skin id the animation manager
9
+ * issued for its `MeshSkin`.
10
+ *
11
+ * @typedef {{entity: number, skin_id: number}} PlacedSkin
7
12
  */
8
13
  /**
9
14
  * Put a model into a scene that has no systems: a playground, a preview, a tool.
10
15
  *
11
- * A game does this in two systems — `MeshSystem` spawns the prefab under the entity that wears
12
- * it, and `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears.
13
- * A scene bound to a bare dataset has neither, so this does the same by hand, in one call: a root
14
- * entity carrying `placement`, the prefab spawned under it, a `transforms` row acquired for every
15
- * entity of the instance, a `meshes` row attached for every primitive (over a clone of its geometry
16
- * where the primitive is skinned), and the instance's skins and clips registered with the
17
- * animation manager — unless told otherwise.
16
+ * A game does this in three systems — `MeshSystem` spawns the prefab under the entity that wears
17
+ * it, `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears, and
18
+ * `MeshSkinSystem` registers every `MeshSkin` and binds its mesh. A scene bound to a bare dataset
19
+ * has none of them, so this does the same by hand, in one call: a root entity carrying
20
+ * `placement`, the prefab spawned under it, a `transforms` row acquired for every entity of the
21
+ * instance, a `meshes` row attached for every primitive (over a clone of its geometry where the
22
+ * primitive is skinned), and each skinned primitive's skin registered with the animation manager —
23
+ * unless told otherwise. The rows are not marked when anything moves; a playground that moves a
24
+ * placed model marks what it moved.
18
25
  *
19
26
  * @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
20
27
  * @param {EntityComponentDataset} dataset the dataset the scene is bound to
21
28
  * @param {Prefab} prefab the model, compiled once
22
29
  * @param {Transform64} placement where the model's root goes; copied
23
30
  * @param {object} [options]
24
- * @param {boolean} [options.register_animation] whether the instance's skins and clips are
25
- * registered; off leaves a skinned primitive's clone undeformed
31
+ * @param {boolean} [options.register_animation] whether the instance's skins are registered;
32
+ * off leaves a skinned primitive's clone undeformed
26
33
  * @param {boolean} [options.skinned] whether skinned primitives take a row at all; a preview that
27
34
  * registers no skin has nothing to pose them with and leaves them out
28
- * @returns {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null, drawn: number}}
29
- * `drawn` is how many primitives took a row
35
+ * @returns {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null, drawn: number}}
36
+ * `skins` is null when nothing was registered; `drawn` is how many primitives took a row
30
37
  */
31
38
  export function prefab_place(scene_context: GPUSceneContext, dataset: EntityComponentDataset, prefab: Prefab, placement: Transform64, { register_animation, skinned }?: {
32
39
  register_animation?: boolean;
@@ -34,27 +41,34 @@ export function prefab_place(scene_context: GPUSceneContext, dataset: EntityComp
34
41
  }): {
35
42
  root: number;
36
43
  instance: PrefabInstance;
37
- animation: InstanceAnimationRegistration | null;
44
+ skins: PlacedSkin[] | null;
38
45
  drawn: number;
39
46
  };
40
47
  /**
41
- * Take a placed model out again: its rows given back, its animation unregistered, its entities
48
+ * Take a placed model out again: its rows given back, its skins unregistered, its entities
42
49
  * removed — the root included, since {@link prefab_place} made it.
43
50
  *
44
51
  * @param {GPUSceneContext} scene_context
45
52
  * @param {EntityComponentDataset} dataset
46
- * @param {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null}} placed
53
+ * @param {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null}} placed
47
54
  * what {@link prefab_place} answered
48
55
  */
49
56
  export function prefab_unplace(scene_context: GPUSceneContext, dataset: EntityComponentDataset, placed: {
50
57
  root: number;
51
58
  instance: PrefabInstance;
52
- animation: InstanceAnimationRegistration | null;
59
+ skins: PlacedSkin[] | null;
53
60
  }): void;
54
61
  export type Prefab = import("./Prefab.js").Prefab;
55
62
  export type PrefabInstance = import("./PrefabInstance.js").PrefabInstance;
56
63
  export type EntityComponentDataset = import("../../ecs/EntityComponentDataset.js").EntityComponentDataset;
57
64
  export type GPUSceneContext = import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext;
58
- export type InstanceAnimationRegistration = import("../register_instance_animation.js").InstanceAnimationRegistration;
65
+ /**
66
+ * One skinned primitive's registration: the mesh entity, and the skin id the animation manager
67
+ * issued for its `MeshSkin`.
68
+ */
69
+ export type PlacedSkin = {
70
+ entity: number;
71
+ skin_id: number;
72
+ };
59
73
  import { Transform64 } from "../../ecs/transform/Transform64.js";
60
74
  //# sourceMappingURL=prefab_place.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefab_place.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_place.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,4CAZW,eAAe,WACf,sBAAsB,UACtB,MAAM,aACN,WAAW;IAEO,kBAAkB,GAApC,OAAO;IAEW,OAAO,GAAzB,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,6BAA6B,GAAC,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAyDlH;AAED;;;;;;;;GAQG;AACH,8CALW,eAAe,WACf,sBAAsB,UACtB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,6BAA6B,GAAC,IAAI,CAAA;CAAC,QA6BjG;qBAzHY,OAAO,aAAa,EAAE,MAAM;6BAC5B,OAAO,qBAAqB,EAAE,cAAc;qCAC5C,OAAO,qCAAqC,EAAE,sBAAsB;8BACpE,OAAO,kDAAkD,EAAE,eAAe;4CAC1E,OAAO,mCAAmC,EAAE,6BAA6B;4BAX1D,oCAAoC"}
1
+ {"version":3,"file":"prefab_place.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_place.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,4CAZW,eAAe,WACf,sBAAsB,UACtB,MAAM,aACN,WAAW;IAEO,kBAAkB,GAApC,OAAO;IAEW,OAAO,GAAzB,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,GAAC,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAyD7F;AAkCD;;;;;;;;GAQG;AACH,8CALW,eAAe,WACf,sBAAsB,UACtB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,GAAC,IAAI,CAAA;CAAC,QAkC5E;qBAtKY,OAAO,aAAa,EAAE,MAAM;6BAC5B,OAAO,qBAAqB,EAAE,cAAc;qCAC5C,OAAO,qCAAqC,EAAE,sBAAsB;8BACpE,OAAO,kDAAkD,EAAE,eAAe;;;;;yBAO1E;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC;4BAjBlB,oCAAoC"}
@@ -1,130 +1,175 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { Transform64 } from "../../ecs/transform/Transform64.js";
3
- import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
4
- import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
5
- import { register_instance_animation, unregister_instance_animation } from "../register_instance_animation.js";
6
- import { prefab_instance_destroy, prefab_instantiate } from "./prefab_instantiate.js";
7
-
8
- /**
9
- * @typedef {import("./Prefab.js").Prefab} Prefab
10
- * @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
11
- * @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
12
- * @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
13
- * @typedef {import("../register_instance_animation.js").InstanceAnimationRegistration} InstanceAnimationRegistration
14
- */
15
-
16
- /**
17
- * Put a model into a scene that has no systems: a playground, a preview, a tool.
18
- *
19
- * A game does this in two systems — `MeshSystem` spawns the prefab under the entity that wears
20
- * it, and `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears.
21
- * A scene bound to a bare dataset has neither, so this does the same by hand, in one call: a root
22
- * entity carrying `placement`, the prefab spawned under it, a `transforms` row acquired for every
23
- * entity of the instance, a `meshes` row attached for every primitive (over a clone of its geometry
24
- * where the primitive is skinned), and the instance's skins and clips registered with the
25
- * animation manager — unless told otherwise.
26
- *
27
- * @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
28
- * @param {EntityComponentDataset} dataset the dataset the scene is bound to
29
- * @param {Prefab} prefab the model, compiled once
30
- * @param {Transform64} placement where the model's root goes; copied
31
- * @param {object} [options]
32
- * @param {boolean} [options.register_animation] whether the instance's skins and clips are
33
- * registered; off leaves a skinned primitive's clone undeformed
34
- * @param {boolean} [options.skinned] whether skinned primitives take a row at all; a preview that
35
- * registers no skin has nothing to pose them with and leaves them out
36
- * @returns {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null, drawn: number}}
37
- * `drawn` is how many primitives took a row
38
- */
39
- export function prefab_place(scene_context, dataset, prefab, placement, { register_animation = true, skinned = true } = {}) {
40
- assert.defined(scene_context, 'scene_context');
41
- assert.defined(dataset, 'dataset');
42
- assert.equal(dataset.isEntityComponentDataset, true, 'dataset.isEntityComponentDataset !== true');
43
- assert.defined(prefab, 'prefab');
44
- assert.equal(prefab.isPrefab, true, 'prefab.isPrefab !== true');
45
- assert.defined(placement, 'placement');
46
- assert.isBoolean(register_animation, 'register_animation');
47
- assert.isBoolean(skinned, 'skinned');
48
-
49
- // a fresh dataset knows no component types; the prefab registers its own, and the root is
50
- // placed before the prefab is spawned
51
- dataset.registerManyComponentTypes([Transform64]);
52
-
53
- const root = dataset.createEntity();
54
- const transform = new Transform64();
55
-
56
- transform.copy(placement);
57
- transform.updateMatrix();
58
-
59
- dataset.addComponentToEntity(root, transform);
60
-
61
- const instance = prefab_instantiate(prefab, dataset, root);
62
-
63
- const rows = scene_context.rows;
64
- const entities = instance.entities;
65
-
66
- for (let i = 0; i < entities.length; i++) {
67
- rows.acquire(entities[i]);
68
- }
69
-
70
- const mesh_entities = instance.mesh_entities;
71
-
72
- let drawn = 0;
73
-
74
- for (let i = 0; i < mesh_entities.length; i++) {
75
- const entity = mesh_entities[i];
76
- const geometry = dataset.getComponent(entity, ShadedGeometry);
77
- const is_skinned = geometry.getFlag(ShadedGeometryFlags.Skinned);
78
-
79
- if (is_skinned && !skinned) {
80
- continue;
81
- }
82
-
83
- rows.attach_mesh(entity, geometry.geometry, geometry.material, is_skinned);
84
-
85
- drawn++;
86
- }
87
-
88
- const animation = register_animation
89
- ? register_instance_animation(scene_context, instance)
90
- : null;
91
-
92
- return { root, instance, animation, drawn };
93
- }
94
-
95
- /**
96
- * Take a placed model out again: its rows given back, its animation unregistered, its entities
97
- * removed — the root included, since {@link prefab_place} made it.
98
- *
99
- * @param {GPUSceneContext} scene_context
100
- * @param {EntityComponentDataset} dataset
101
- * @param {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null}} placed
102
- * what {@link prefab_place} answered
103
- */
104
- export function prefab_unplace(scene_context, dataset, placed) {
105
- assert.defined(scene_context, 'scene_context');
106
- assert.defined(dataset, 'dataset');
107
- assert.defined(placed, 'placed');
108
-
109
- if (placed.animation !== null) {
110
- unregister_instance_animation(placed.animation);
111
- }
112
-
113
- const rows = scene_context.rows;
114
- const instance = placed.instance;
115
- const mesh_entities = instance.mesh_entities;
116
-
117
- for (let i = 0; i < mesh_entities.length; i++) {
118
- // safe on a skinned primitive that took no row
119
- rows.detach_mesh(mesh_entities[i]);
120
- }
121
-
122
- const entities = instance.entities;
123
-
124
- for (let i = 0; i < entities.length; i++) {
125
- rows.release(entities[i]);
126
- }
127
-
128
- prefab_instance_destroy(dataset, instance);
129
- dataset.removeEntity(placed.root);
130
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { Transform64 } from "../../ecs/transform/Transform64.js";
3
+ import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
4
+ import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
5
+ import { MeshSkin } from "../../graphics/ecs/mesh-v2/MeshSkin.js";
6
+ import { prefab_instance_destroy, prefab_instantiate } from "./prefab_instantiate.js";
7
+
8
+ /**
9
+ * @typedef {import("./Prefab.js").Prefab} Prefab
10
+ * @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
11
+ * @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
12
+ * @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
13
+ */
14
+
15
+ /**
16
+ * One skinned primitive's registration: the mesh entity, and the skin id the animation manager
17
+ * issued for its `MeshSkin`.
18
+ *
19
+ * @typedef {{entity: number, skin_id: number}} PlacedSkin
20
+ */
21
+
22
+ /**
23
+ * Put a model into a scene that has no systems: a playground, a preview, a tool.
24
+ *
25
+ * A game does this in three systems — `MeshSystem` spawns the prefab under the entity that wears
26
+ * it, `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears, and
27
+ * `MeshSkinSystem` registers every `MeshSkin` and binds its mesh. A scene bound to a bare dataset
28
+ * has none of them, so this does the same by hand, in one call: a root entity carrying
29
+ * `placement`, the prefab spawned under it, a `transforms` row acquired for every entity of the
30
+ * instance, a `meshes` row attached for every primitive (over a clone of its geometry where the
31
+ * primitive is skinned), and each skinned primitive's skin registered with the animation manager —
32
+ * unless told otherwise. The rows are not marked when anything moves; a playground that moves a
33
+ * placed model marks what it moved.
34
+ *
35
+ * @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
36
+ * @param {EntityComponentDataset} dataset the dataset the scene is bound to
37
+ * @param {Prefab} prefab the model, compiled once
38
+ * @param {Transform64} placement where the model's root goes; copied
39
+ * @param {object} [options]
40
+ * @param {boolean} [options.register_animation] whether the instance's skins are registered;
41
+ * off leaves a skinned primitive's clone undeformed
42
+ * @param {boolean} [options.skinned] whether skinned primitives take a row at all; a preview that
43
+ * registers no skin has nothing to pose them with and leaves them out
44
+ * @returns {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null, drawn: number}}
45
+ * `skins` is null when nothing was registered; `drawn` is how many primitives took a row
46
+ */
47
+ export function prefab_place(scene_context, dataset, prefab, placement, { register_animation = true, skinned = true } = {}) {
48
+ assert.defined(scene_context, 'scene_context');
49
+ assert.defined(dataset, 'dataset');
50
+ assert.equal(dataset.isEntityComponentDataset, true, 'dataset.isEntityComponentDataset !== true');
51
+ assert.defined(prefab, 'prefab');
52
+ assert.equal(prefab.isPrefab, true, 'prefab.isPrefab !== true');
53
+ assert.defined(placement, 'placement');
54
+ assert.isBoolean(register_animation, 'register_animation');
55
+ assert.isBoolean(skinned, 'skinned');
56
+
57
+ // a fresh dataset knows no component types; the prefab registers its own, and the root is
58
+ // placed before the prefab is spawned
59
+ dataset.registerManyComponentTypes([Transform64]);
60
+
61
+ const root = dataset.createEntity();
62
+ const transform = new Transform64();
63
+
64
+ transform.copy(placement);
65
+ transform.updateMatrix();
66
+
67
+ dataset.addComponentToEntity(root, transform);
68
+
69
+ const instance = prefab_instantiate(prefab, dataset, root);
70
+
71
+ const rows = scene_context.rows;
72
+ const entities = instance.entities;
73
+
74
+ for (let i = 0; i < entities.length; i++) {
75
+ rows.acquire(entities[i]);
76
+ }
77
+
78
+ const mesh_entities = instance.mesh_entities;
79
+
80
+ let drawn = 0;
81
+
82
+ for (let i = 0; i < mesh_entities.length; i++) {
83
+ const entity = mesh_entities[i];
84
+ const geometry = dataset.getComponent(entity, ShadedGeometry);
85
+ const is_skinned = geometry.getFlag(ShadedGeometryFlags.Skinned);
86
+
87
+ if (is_skinned && !skinned) {
88
+ continue;
89
+ }
90
+
91
+ rows.attach_mesh(entity, geometry.geometry, geometry.material, is_skinned);
92
+
93
+ drawn++;
94
+ }
95
+
96
+ const skins = register_animation
97
+ ? register_skins(scene_context, dataset, mesh_entities)
98
+ : null;
99
+
100
+ return { root, instance, skins, drawn };
101
+ }
102
+
103
+ /**
104
+ * Register the skin of every primitive that carries one, and bind the primitive to it — what
105
+ * `MeshSkinSystem` does for a game. Meshes of one skeleton bound the same way share a skin.
106
+ *
107
+ * @param {GPUSceneContext} scene_context
108
+ * @param {EntityComponentDataset} dataset
109
+ * @param {Int32Array} mesh_entities
110
+ * @returns {PlacedSkin[]}
111
+ */
112
+ function register_skins(scene_context, dataset, mesh_entities) {
113
+ const manager = scene_context.animation_manager;
114
+
115
+ const skins = [];
116
+
117
+ for (let i = 0; i < mesh_entities.length; i++) {
118
+ const entity = mesh_entities[i];
119
+ const skin = dataset.getComponent(entity, MeshSkin);
120
+
121
+ if (skin === undefined) {
122
+ continue;
123
+ }
124
+
125
+ const skin_id = manager.register_skin(skin.joints, skin.inverse_bind_matrices);
126
+
127
+ manager.bind_skin_mesh(entity, skin_id);
128
+
129
+ skins.push({ entity, skin_id });
130
+ }
131
+
132
+ return skins;
133
+ }
134
+
135
+ /**
136
+ * Take a placed model out again: its rows given back, its skins unregistered, its entities
137
+ * removed — the root included, since {@link prefab_place} made it.
138
+ *
139
+ * @param {GPUSceneContext} scene_context
140
+ * @param {EntityComponentDataset} dataset
141
+ * @param {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null}} placed
142
+ * what {@link prefab_place} answered
143
+ */
144
+ export function prefab_unplace(scene_context, dataset, placed) {
145
+ assert.defined(scene_context, 'scene_context');
146
+ assert.defined(dataset, 'dataset');
147
+ assert.defined(placed, 'placed');
148
+
149
+ if (placed.skins !== null) {
150
+ const manager = scene_context.animation_manager;
151
+
152
+ for (const { entity, skin_id } of placed.skins) {
153
+ manager.unbind_skin_mesh(entity);
154
+ manager.unregister_skin(skin_id);
155
+ }
156
+ }
157
+
158
+ const rows = scene_context.rows;
159
+ const instance = placed.instance;
160
+ const mesh_entities = instance.mesh_entities;
161
+
162
+ for (let i = 0; i < mesh_entities.length; i++) {
163
+ // safe on a skinned primitive that took no row
164
+ rows.detach_mesh(mesh_entities[i]);
165
+ }
166
+
167
+ const entities = instance.entities;
168
+
169
+ for (let i = 0; i < entities.length; i++) {
170
+ rows.release(entities[i]);
171
+ }
172
+
173
+ prefab_instance_destroy(dataset, instance);
174
+ dataset.removeEntity(placed.root);
175
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Hold a row, with the chain above it, for every entity the clips key.
3
+ *
4
+ * **A clip binds only once every node it keys holds a row**, and until then it is queued and moves
5
+ * nothing. A skin holds its joints' chains and a primitive its own, but a keyed node that is neither
6
+ * — a leaf an exporter left out of the skin, a socket nothing is attached to yet, an animated empty
7
+ * — is held by nothing else, and one such node keeps the whole clip from playing. So the driver that
8
+ * plays the clips holds every node they key, for as long as it has the clips.
9
+ *
10
+ * Every clip of the set, not only the ones registered: the set is replaced and never edited, so its
11
+ * targets are settled once, while which of its clips are registered moves with the list or the graph.
12
+ *
13
+ * One hold per channel, given back one per channel by {@link release_clip_targets}: the chains count
14
+ * holds, so a node keyed by several channels is held until the last of them is released.
15
+ *
16
+ * @param {RowChains} chains
17
+ * @param {ShadeAnimationClip[]} clips their channels target entities
18
+ */
19
+ export function hold_clip_targets(chains: RowChains, clips: ShadeAnimationClip[]): void;
20
+ /**
21
+ * Give back what {@link hold_clip_targets} took for the same clips. Released after the clips are
22
+ * unregistered, so no binding outlives the row it writes.
23
+ *
24
+ * @param {RowChains} chains
25
+ * @param {ShadeAnimationClip[]} clips
26
+ */
27
+ export function release_clip_targets(chains: RowChains, clips: ShadeAnimationClip[]): void;
28
+ /**
29
+ * Make some of an entity's clips playable — the ones a driver actually plays, and no others.
30
+ *
31
+ * **Registering a clip is not free of consequence, which is why this takes a set.** The pose
32
+ * accumulator marks a joint dirty for every bound clip that writes to it, whatever its weight, so a
33
+ * bound clip at weight zero resolves the joints only it drives to zero rather than leaving them at
34
+ * rest. A driver therefore registers what it can play and re-registers when that changes; a clip no
35
+ * driver claims is never bound and so moves nothing.
36
+ *
37
+ * Each index is registered once however many times it is named. Two states of one graph can play
38
+ * the same clip, and two registrations of one clip are two rows the accumulator would add together.
39
+ *
40
+ * @param {GPUSceneContext} context
41
+ * @param {ShadeAnimationClip[]} clips an entity's `AnimationClips`; their channels target entities
42
+ * @param {ArrayLike<number>} slots indices into `clips`; duplicates are ignored
43
+ * @returns {ClipRegistration}
44
+ */
45
+ export function register_clips(context: GPUSceneContext, clips: ShadeAnimationClip[], slots: ArrayLike<number>): ClipRegistration;
46
+ /**
47
+ * Give back everything {@link register_clips} took out, for a manager that is still the one that
48
+ * issued it. A restart takes the GPU scene context with it, and the ids it issued mean nothing to the
49
+ * one that replaces it, so a caller holding a registration from another context forgets it rather
50
+ * than handing it back here.
51
+ *
52
+ * @param {ClipRegistration} registration
53
+ */
54
+ export function unregister_clips(registration: ClipRegistration): void;
55
+ /**
56
+ * @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
57
+ * @typedef {import("../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
58
+ * @typedef {import("./RowChains.js").RowChains} RowChains
59
+ */
60
+ /**
61
+ * The id a clip has when nobody registered it.
62
+ * @type {number}
63
+ */
64
+ export const CLIP_NOT_REGISTERED: number;
65
+ /**
66
+ * Which of an entity's clips a driver has playable, by their place in its `AnimationClips`.
67
+ *
68
+ * `ids[i]` is the manager's id for `clips[i]`, or {@link CLIP_NOT_REGISTERED} where this driver
69
+ * does not play that clip. Indexed by the clip's place rather than packed, because that is how
70
+ * both drivers already address a clip — the graph resolves a name to a slot, the clip list does the
71
+ * same — and a packed array would want a second table to say what each entry was.
72
+ */
73
+ export class ClipRegistration {
74
+ /**
75
+ * The GPU scene context these ids were issued by.
76
+ *
77
+ * Carried rather than inferred, because **an id may only be handed back to the manager that
78
+ * issued it**. A renderer restart builds a new context, and a holder comparing this against what
79
+ * `scene_context` answers now knows in one `===` whether giving the ids back is returning them or
80
+ * corrupting a stranger's table.
81
+ *
82
+ * @type {GPUSceneContext|null}
83
+ */
84
+ context: GPUSceneContext | null;
85
+ /**
86
+ * @type {Int32Array}
87
+ */
88
+ ids: Int32Array;
89
+ }
90
+ export type GPUSceneContext = import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext;
91
+ export type ShadeAnimationClip = import("../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip;
92
+ export type RowChains = import("./RowChains.js").RowChains;
93
+ //# sourceMappingURL=register_clips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register_clips.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/register_clips.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;GAiBG;AACH,0CAHW,SAAS,SACT,kBAAkB,EAAE,QAa9B;AAED;;;;;;GAMG;AACH,6CAHW,SAAS,SACT,kBAAkB,EAAE,QAa9B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wCALW,eAAe,SACf,kBAAkB,EAAE,SACpB,UAAU,MAAM,CAAC,GACf,gBAAgB,CA6B5B;AAED;;;;;;;GAOG;AACH,+CAFW,gBAAgB,QAqB1B;AAnKD;;;;GAIG;AAEH;;;GAGG;AACH,kCAFU,MAAM,CAEsB;AAEtC;;;;;;;GAOG;AACH;IACI;;;;;;;;;OASG;IACH,SAFU,eAAe,GAAC,IAAI,CAEf;IAEf;;OAEG;IACH,KAFU,UAAU,CAEI;CAC3B;8BApCY,OAAO,+CAA+C,EAAE,eAAe;iCACvE,OAAO,sDAAsD,EAAE,kBAAkB;wBACjF,OAAO,gBAAgB,EAAE,SAAS"}