@woosh/meep-engine 3.23.0 → 3.24.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 (522) hide show
  1. package/editor/entity_world_bounds.d.ts +9 -3
  2. package/editor/entity_world_bounds.d.ts.map +1 -1
  3. package/editor/entity_world_bounds.js +61 -4
  4. package/package.json +1 -1
  5. package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
  6. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  7. package/src/core/binary/allocator/OffsetAllocator.js +124 -29
  8. package/src/core/collection/map/u32_index.d.ts +83 -0
  9. package/src/core/collection/map/u32_index.d.ts.map +1 -0
  10. package/src/core/collection/map/u32_index.js +247 -0
  11. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
  12. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
  13. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
  14. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
  15. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
  16. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
  17. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
  18. package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
  19. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
  20. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
  21. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
  22. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
  23. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
  24. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
  25. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
  26. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
  27. package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
  28. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
  29. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
  30. package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
  31. package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
  32. package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
  33. package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
  34. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
  35. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
  36. package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
  37. package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
  38. package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
  39. package/src/engine/ecs/ik/IKProblem.js +16 -0
  40. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
  41. package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
  42. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
  43. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
  44. package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
  45. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
  46. package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
  47. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  48. package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
  49. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  50. package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
  51. package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
  52. package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
  53. package/src/engine/ecs/transform/T64WorldCache.js +139 -0
  54. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
  55. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
  56. package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
  57. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
  58. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  59. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
  60. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
  61. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
  62. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
  63. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
  64. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
  65. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
  66. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
  67. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
  68. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
  69. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
  70. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
  71. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
  72. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
  73. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
  74. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
  75. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
  76. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
  77. package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
  78. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
  79. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
  80. package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
  81. package/src/engine/graphics3/AnimationSystem.js +2 -2
  82. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
  83. package/src/engine/graphics3/DebugDrawSystem.js +2 -4
  84. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
  85. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  86. package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
  87. package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
  88. package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
  89. package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
  90. package/src/engine/graphics3/LightSystem.d.ts +7 -5
  91. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  92. package/src/engine/graphics3/LightSystem.js +36 -22
  93. package/src/engine/graphics3/MeshSystem.d.ts +43 -39
  94. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  95. package/src/engine/graphics3/MeshSystem.js +324 -331
  96. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
  97. package/src/engine/graphics3/PathDisplaySystem.js +2 -4
  98. package/src/engine/graphics3/PickingQuery.d.ts +15 -21
  99. package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
  100. package/src/engine/graphics3/PickingQuery.js +21 -25
  101. package/src/engine/graphics3/PickingSystem.d.ts +60 -31
  102. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  103. package/src/engine/graphics3/PickingSystem.js +416 -273
  104. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
  105. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  106. package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
  107. package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
  108. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  109. package/src/engine/graphics3/TerrainSystem.js +102 -53
  110. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
  111. package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
  112. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  113. package/src/engine/graphics3/Trail3DSystem.js +2 -4
  114. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
  115. package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
  116. package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
  117. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
  118. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  119. package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
  120. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
  121. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
  122. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
  123. package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
  124. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
  125. package/src/engine/graphics3/prefab/Prefab.js +162 -0
  126. package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
  127. package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
  128. package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
  129. package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
  130. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
  131. package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
  132. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
  133. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
  134. package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
  135. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
  136. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
  137. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
  138. package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
  139. package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
  140. package/src/engine/graphics3/prefab/prefab_place.js +130 -0
  141. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
  142. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
  143. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
  144. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
  145. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
  146. package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
  147. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
  148. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
  149. package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
  150. package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
  151. package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
  152. package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
  153. package/src/engine/graphics3/register_instance_animation.js +4 -4
  154. package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
  155. package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
  156. package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
  157. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
  158. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
  159. package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
  160. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
  161. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  162. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
  163. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
  164. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  165. package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
  166. package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
  167. package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
  168. package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
  169. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
  170. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  171. package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
  172. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
  173. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  174. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
  175. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  176. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
  177. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
  178. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
  179. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
  180. package/src/engine/physics/cloth/playground/README.md +11 -11
  181. package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
  182. package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
  183. package/src/engine/physics/cloth/playground/garment_build.js +64 -58
  184. package/src/engine/physics/cloth/playground/garment_main.js +59 -33
  185. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  186. package/src/shade/RENDERER_CONTRACT.md +85 -53
  187. package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
  188. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  189. package/src/shade/device/ShadeGPUCommandContext.js +36 -0
  190. package/src/shade/playground/add_random_meshes.d.ts +4 -4
  191. package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
  192. package/src/shade/playground/add_random_meshes.js +20 -16
  193. package/src/shade/playground/avboit/main.d.ts +1 -0
  194. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  195. package/src/shade/playground/avboit/main.js +916 -875
  196. package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
  197. package/src/shade/playground/basis_textures/main.js +22 -8
  198. package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
  199. package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
  200. package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
  201. package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
  202. package/src/shade/playground/ground_seam/main.js +13 -4
  203. package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
  204. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
  205. package/src/shade/playground/ground_seam/make_ground.js +21 -16
  206. package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
  207. package/src/shade/playground/particle_system/main.js +11 -10
  208. package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
  209. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  210. package/src/shade/playground/particle_system/particle_prototype.js +56 -15
  211. package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
  212. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  213. package/src/shade/playground/particle_system/particle_scene.js +149 -53
  214. package/src/shade/playground/readback_crossover/index.html +41 -0
  215. package/src/shade/playground/readback_crossover/main.d.ts +2 -0
  216. package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
  217. package/src/shade/playground/readback_crossover/main.js +372 -0
  218. package/src/shade/playground/skinned_blas_refit/README.md +11 -7
  219. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
  220. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
  222. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/main.js +67 -58
  224. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
  225. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
  226. package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
  227. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
  228. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  229. package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
  230. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
  231. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  232. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
  233. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  234. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
  235. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
  236. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  237. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
  238. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
  239. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  240. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
  241. package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
  242. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  243. package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
  244. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
  245. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  246. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
  247. package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
  248. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
  249. package/src/shade/playground/sponza_path_trace/main.js +393 -363
  250. package/src/shade/playground/ssr_reprojection/main.js +11 -9
  251. package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
  252. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
  253. package/src/shade/playground/ssr_reprojection/scene.js +32 -11
  254. package/src/shade/playground/ssr_variance/main.js +1 -1
  255. package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
  256. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
  257. package/src/shade/playground/ssr_variance/scene.js +39 -15
  258. package/src/shade/playground/vgeo_viewer/main.js +6 -2
  259. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  260. package/src/shade/playground/volumetrics_froxel/main.js +936 -922
  261. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  262. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  263. package/src/shade/renderer/GraphicsContext.js +11 -0
  264. package/src/shade/renderer/Renderer.d.ts +3 -2
  265. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  266. package/src/shade/renderer/Renderer.js +3 -2
  267. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
  268. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  269. package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
  270. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
  271. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
  272. package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
  273. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
  274. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  275. package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
  276. package/src/shade/renderer/animation/Skin.d.ts +19 -19
  277. package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
  278. package/src/shade/renderer/animation/Skin.js +15 -13
  279. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
  280. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  281. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
  282. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
  283. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
  284. package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
  285. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
  286. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  287. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
  288. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  289. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
  290. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
  291. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
  292. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
  293. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
  294. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
  295. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
  296. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
  298. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
  299. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
  300. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
  301. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
  302. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
  303. package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
  304. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
  305. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
  306. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
  307. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
  308. package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
  309. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
  310. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  311. package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
  312. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
  313. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
  314. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
  315. package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
  316. package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
  317. package/src/shade/renderer/buffer/table/WordViews.js +62 -0
  318. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
  319. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
  320. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
  321. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
  322. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
  323. package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
  324. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  325. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
  326. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
  327. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  328. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
  329. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
  330. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  331. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
  332. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
  333. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
  334. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
  335. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
  336. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
  337. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
  338. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  339. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
  340. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
  341. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  342. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
  343. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  344. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
  345. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
  346. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
  347. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
  348. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
  349. package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
  350. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  351. package/src/shade/renderer/light/GPULightCollection.js +444 -329
  352. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  353. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
  354. package/src/shade/renderer/light/LightCollection.d.ts +29 -1
  355. package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
  356. package/src/shade/renderer/light/LightCollection.js +50 -1
  357. package/src/shade/renderer/light/make_sunlight.js +2 -2
  358. package/src/shade/renderer/light/model/Light.d.ts +29 -2
  359. package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
  360. package/src/shade/renderer/light/model/Light.js +30 -2
  361. package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
  362. package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
  363. package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
  364. package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
  365. package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
  366. package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
  367. package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
  368. package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
  369. package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
  370. package/src/shade/renderer/light/place_light.d.ts +16 -0
  371. package/src/shade/renderer/light/place_light.d.ts.map +1 -0
  372. package/src/shade/renderer/light/place_light.js +36 -0
  373. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
  374. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
  375. package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
  376. package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
  377. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  378. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
  379. package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
  380. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  381. package/src/shade/renderer/loader/SceneBundle.js +111 -56
  382. package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
  383. package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
  384. package/src/shade/renderer/loader/SceneNode.js +114 -0
  385. package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
  386. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  387. package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
  388. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  389. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
  390. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
  391. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
  392. package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
  393. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  394. package/src/shade/renderer/loader/usd/load_usd.js +4 -5
  395. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
  396. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
  397. package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
  398. package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
  399. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
  400. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  401. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
  402. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
  403. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  404. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
  405. package/src/shade/renderer/particles/DESIGN.md +53 -50
  406. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
  407. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  408. package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
  409. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
  410. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  411. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
  412. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
  413. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  414. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
  415. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
  416. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  417. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
  418. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
  419. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
  420. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  421. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  422. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
  423. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
  424. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
  425. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
  426. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  427. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
  428. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
  430. package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
  431. package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
  432. package/src/shade/renderer/scene/DynamicMesh.js +14 -4
  433. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
  434. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  435. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
  436. package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
  437. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  438. package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
  439. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
  440. package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
  441. package/src/shade/renderer/scene/Node3D.d.ts +27 -8
  442. package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
  444. package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
  445. package/src/shade/renderer/scene/Scene.d.ts +18 -60
  446. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/Scene.js +53 -146
  448. package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
  449. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
  450. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
  451. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
  452. package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
  453. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
  454. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  455. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
  456. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
  457. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
  458. package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
  459. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
  460. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
  461. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
  462. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
  463. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
  464. package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
  465. package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
  466. package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
  467. package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
  468. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
  469. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
  470. package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
  471. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
  472. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
  473. package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
  474. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
  475. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
  476. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
  477. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
  479. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
  480. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
  481. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
  482. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  483. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
  484. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
  485. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  486. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
  487. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
  488. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
  489. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
  490. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
  491. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
  492. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
  493. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
  494. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
  495. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
  496. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
  497. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
  498. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
  499. package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
  500. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
  501. package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
  502. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
  503. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  504. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
  505. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
  506. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  507. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
  508. package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
  509. package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
  510. package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
  511. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
  512. package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
  513. package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
  514. package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
  515. package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
  516. package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
  517. package/src/shade/renderer/scene/InstanceBatch.js +0 -235
  518. package/src/shade/renderer/scene/Mesh.js +0 -168
  519. package/src/shade/renderer/scene/Node3D.js +0 -263
  520. package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
  521. package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
  522. package/src/shade/renderer/scene/TransformAuthority.js +0 -33
@@ -1,531 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
3
- import {
4
- computeBoundingSphereOfSpheres
5
- } from "../../../core/geom/packing/computeBoundingSphereOfSpheres.js";
6
- import {
7
- computeBoundingSphereFromVertexData
8
- } from "../../../engine/graphics/geometry/computeBoundingSphereFromVertexData.js";
9
- import {
10
- mesh_apply_skeletal_vertex_skinning
11
- } from "../../../engine/graphics/geometry/skining/mesh_apply_skeletal_vertex_skinning.js";
12
-
13
- /**
14
- * Identity 4×4 column-major matrix. The
15
- * `mesh_apply_skeletal_vertex_skinning` helper takes `m4_bind` and
16
- * `m4_bind_inv` arguments; both are identity for our use because the
17
- * per-joint `bone_matrices` already encode the full skin transform
18
- * (`joint_world × inverse_bind`) and the consumer of the resulting
19
- * sphere re-applies `mesh.transform_global` on its side.
20
- *
21
- * @type {Float32Array}
22
- */
23
- const IDENTITY_M4 = (() => {
24
- const m = new Float32Array(16);
25
- m[0] = 1; m[5] = 1; m[10] = 1; m[15] = 1;
26
- return m;
27
- })();
28
-
29
- /**
30
- * 4×4 scratch buffer used by the per-tick bone-matrix construction.
31
- * Module-level rather than allocated per call so a long clip's
32
- * thousands of ticks don't churn the heap.
33
- *
34
- * @type {Float32Array}
35
- */
36
- const _scratch_mat4_b = new Float32Array(16);
37
-
38
- /**
39
- * Joint-world matrix accumulator. Grown on demand; `length / 16`
40
- * is the joint count it can hold. Re-allocated only when the
41
- * current capacity is too small — never shrunk.
42
- *
43
- * @type {Float32Array}
44
- */
45
- let _scratch_joint_world = new Float32Array(0);
46
-
47
- /**
48
- * Bone-matrix scratch in the row-major 3×4 form
49
- * {@link mesh_apply_skeletal_vertex_skinning} expects (12 floats per
50
- * joint). Grown on demand alongside `_scratch_joint_world`.
51
- *
52
- * @type {Float32Array}
53
- */
54
- let _scratch_bone_matrices = new Float32Array(0);
55
-
56
- /**
57
- * Skinned-vertex output buffer for one pose. Sized to the largest
58
- * `vertex_count × 3` we've seen so far. Reused across ticks.
59
- *
60
- * @type {Float32Array}
61
- */
62
- let _scratch_skinned_positions = new Float32Array(0);
63
-
64
- /**
65
- * Accumulator for per-tick `(cx, cy, cz, r)` spheres. Grown on
66
- * demand to fit the largest tick count we've processed.
67
- *
68
- * @type {Float32Array}
69
- */
70
- let _scratch_tick_spheres = new Float32Array(0);
71
-
72
- /**
73
- * Per-tick sphere written by {@link computeBoundingSphereFromVertexData}.
74
- * The function expects a `.set(x, y, z, w)`-compatible target;
75
- * this tiny class is the minimum that satisfies it without
76
- * pulling in Vector4. Reused every tick.
77
- */
78
- const _scratch_tick_sphere = {
79
- x: 0, y: 0, z: 0, w: 0,
80
- set(x, y, z, w) {
81
- this.x = x;
82
- this.y = y;
83
- this.z = z;
84
- this.w = w;
85
- },
86
- };
87
-
88
- /**
89
- * Bind-pose snapshots for joints touched by a clip. Saved on entry
90
- * to {@link compute_skinned_mesh_clip_bounding_sphere} and restored
91
- * on exit, so this routine never permanently mutates the caller's
92
- * Node3D's. Module-level pool keyed by per-call slot index; grows
93
- * to hold the largest channel count we've seen.
94
- *
95
- * Three parallel typed arrays — position (3 f32), rotation
96
- * (4 f32 quaternion), scale (3 f32) — flattened so save/restore
97
- * is a tight loop with no per-joint object allocation.
98
- *
99
- * @type {Float32Array}
100
- */
101
- let _scratch_bind_position = new Float32Array(0);
102
- let _scratch_bind_rotation = new Float32Array(0);
103
- let _scratch_bind_scale = new Float32Array(0);
104
-
105
- /**
106
- * Per-call joint set in topological order. `_scratch_joint_order[k]`
107
- * holds the index (into `skin.joints`) of the k-th joint to
108
- * process — parents always precede their children. Computed once
109
- * per call (skin hierarchy is static across ticks) and reused
110
- * across all ticks of that call.
111
- *
112
- * @type {Int32Array}
113
- */
114
- let _scratch_joint_order = new Int32Array(0);
115
-
116
- /**
117
- * Per-call parent index lookup. `_scratch_parent_in_set[i]` is the
118
- * index of `skin.joints[i]`'s parent within `skin.joints`, or `-1`
119
- * if the parent isn't part of the skin (an "outer" parent like the
120
- * SkinnedMesh node or an armature anchor).
121
- *
122
- * @type {Int32Array}
123
- */
124
- let _scratch_parent_in_set = new Int32Array(0);
125
-
126
- /**
127
- * DFS visited markers for the topo-sort pass. Cleared at the start
128
- * of each call; module-level so we don't allocate per call.
129
- *
130
- * @type {Uint8Array}
131
- */
132
- let _scratch_joint_visited = new Uint8Array(0);
133
-
134
- /**
135
- * Ensure each module-level scratch typed array can hold at least
136
- * `min_length` elements. Grow-only — never shrinks. Doubling
137
- * strategy mirrors the GPU-side scratch buffers' policy.
138
- *
139
- * @param {Float32Array|Int32Array} buffer
140
- * @param {number} min_length
141
- * @param {function(number):Float32Array|Int32Array} make
142
- * @returns {Float32Array|Int32Array} new buffer (or the input if it already fit)
143
- */
144
- function _ensure_capacity(buffer, min_length, make) {
145
- if (buffer.length >= min_length) return buffer;
146
- let cap = Math.max(buffer.length, 1);
147
- while (cap < min_length) cap *= 2;
148
- return make(cap);
149
- }
150
-
151
- /**
152
- * Inflate a column-major 4×4 matrix `m` into the row-major 3×4 form
153
- * `mesh_apply_skeletal_vertex_skinning` reads per bone. Writes
154
- * 12 floats starting at `out[out_offset]`.
155
- *
156
- * Mapping: the meep skinner does
157
- * `sx = b[0]*x + b[1]*y + b[2]*z + b[3]` etc., which is row-major
158
- * 3×4 (`b[r*4 + c]`). Our `m` is column-major 4×4, so column `c`
159
- * lives at `m[c*4 + r]`. Hence `b[r*4 + c] = m[c*4 + r]`.
160
- *
161
- * Exported (with leading underscore) for direct test coverage.
162
- *
163
- * @param {Float32Array} m column-major 4×4
164
- * @param {Float32Array} out
165
- * @param {number} out_offset
166
- */
167
- export function _pack_mat4_to_bone_3x4(m, out, out_offset) {
168
- out[out_offset + 0] = m[0]; // m00
169
- out[out_offset + 1] = m[4]; // m01
170
- out[out_offset + 2] = m[8]; // m02
171
- out[out_offset + 3] = m[12]; // m03 (tx)
172
- out[out_offset + 4] = m[1]; // m10
173
- out[out_offset + 5] = m[5]; // m11
174
- out[out_offset + 6] = m[9]; // m12
175
- out[out_offset + 7] = m[13]; // m13 (ty)
176
- out[out_offset + 8] = m[2]; // m20
177
- out[out_offset + 9] = m[6]; // m21
178
- out[out_offset + 10] = m[10]; // m22
179
- out[out_offset + 11] = m[14]; // m23 (tz)
180
- }
181
-
182
- /**
183
- * 4-float scratch slot used to receive the union sphere from
184
- * {@link computeBoundingSphereOfSpheres}. The meep helper writes
185
- * `[cx, cy, cz, r]` into a `result` array-like; we then copy
186
- * those four floats into the caller's `out` via `.set(x, y, z, w)`.
187
- *
188
- * @type {Float32Array}
189
- */
190
- const _scratch_union_result = new Float32Array(4);
191
-
192
- /**
193
- * CPU skinning + bounding-sphere computation for a single pose.
194
- *
195
- * Pure-function sub-step. Takes pre-built `bone_matrices` (already
196
- * in the row-major 3×4 form `mesh_apply_skeletal_vertex_skinning`
197
- * expects, with `joint_world × inverse_bind` baked in per bone)
198
- * plus the bind-pose vertex data, performs CPU skinning into an
199
- * internal scratch buffer, and writes the resulting tight bounding
200
- * sphere into `out_sphere` via miniball.
201
- *
202
- * Doesn't allocate (beyond the one-time scratch growth on first
203
- * call with larger-than-seen-before inputs).
204
- *
205
- * @param {object} args
206
- * @param {Float32Array} args.positions bind-pose vertex positions, flat `3 × vertex_count`
207
- * @param {Uint32Array|number[]} args.joint_indices flat `4 × vertex_count` joint indices
208
- * @param {Float32Array} args.joint_weights flat `4 × vertex_count` weights
209
- * @param {number} args.vertex_count
210
- * @param {Float32Array} args.bone_matrices row-major 3×4 (12 floats) per joint
211
- * @param {{ set: function(number,number,number,number):void }} out_sphere
212
- */
213
- export function compute_skinned_pose_bounding_sphere({
214
- positions,
215
- joint_indices,
216
- joint_weights,
217
- vertex_count,
218
- bone_matrices,
219
- }, out_sphere) {
220
-
221
- const required_positions = vertex_count * 3;
222
- _scratch_skinned_positions = _ensure_capacity(
223
- _scratch_skinned_positions,
224
- required_positions,
225
- (n) => new Float32Array(n),
226
- );
227
-
228
- // m4_bind / m4_bind_inv are identity for our use — the full
229
- // skin transform is already inside each entry of bone_matrices
230
- // (see compute_skinned_mesh_clip_bounding_sphere). The meep
231
- // skinner's pre/post-bind multiplies then become no-ops.
232
- mesh_apply_skeletal_vertex_skinning(
233
- _scratch_skinned_positions,
234
- 0,
235
- positions,
236
- vertex_count,
237
- joint_weights,
238
- joint_indices,
239
- bone_matrices,
240
- IDENTITY_M4,
241
- IDENTITY_M4,
242
- 4,
243
- );
244
-
245
- // miniball over the skinned positions. computeBoundingSphereFromVertexData
246
- // calls result.set(cx, cy, cz, radius). The subarray view keeps
247
- // the call bounded to the vertices we actually wrote (the
248
- // scratch buffer may be larger from a previous call).
249
- const view = _scratch_skinned_positions.subarray(0, required_positions);
250
- computeBoundingSphereFromVertexData(view, out_sphere);
251
- }
252
-
253
- /**
254
- * Tight-ish bounding sphere over an entire clip's worth of poses.
255
- * Steps the clip at a fixed `dt`, CPU-skins the bind-pose vertices
256
- * at each tick, computes a per-tick miniball sphere, and unions
257
- * them into one final sphere.
258
- *
259
- * The output sphere is in the mesh's **local space** — the bone
260
- * matrices encode `joint_world × inverse_bind` only, with no mesh-
261
- * node factor. Multiplying the sphere by the SkinnedMesh's runtime
262
- * `transform_global` produces the world-space sphere a frustum-cull
263
- * pass can compare against. This matches the rasterizer's
264
- * convention (clone vertices are mesh-local; world placement comes
265
- * from `mesh.transform_global` at draw time).
266
- *
267
- * Mutates the joint Node3D's `transform_local` while stepping —
268
- * bind-pose values are saved on entry and restored on exit. Doesn't
269
- * touch joints not driven by the clip.
270
- *
271
- * Allocation: zero per-call. Module-level scratch grows once on
272
- * first call with a new largest size; subsequent calls reuse it.
273
- *
274
- * For the per-clip cost: this is intended for one-time computation
275
- * at scene-setup time, so the bounding sphere can be uploaded to
276
- * the GPU for skinning-workload culling. Per-frame use isn't
277
- * supported (would have to deal with concurrent users of the
278
- * module-level scratch).
279
- *
280
- * @param {object} args
281
- * @param {Float32Array} args.positions bind-pose vertex positions, flat `3 × vertex_count`
282
- * @param {Uint32Array|number[]} args.joint_indices flat `4 × vertex_count` joint indices
283
- * @param {Float32Array} args.joint_weights flat `4 × vertex_count` weights
284
- * @param {number} args.vertex_count
285
- * @param {Skin} args.skin joints + inverse-bind matrices (column-major, 16 each)
286
- * @param {ShadeAnimationClip} args.clip
287
- * @param {number} [args.dt] time step in seconds (default `1/60`)
288
- * @param {{ set: function(number,number,number,number):void }} out_sphere
289
- */
290
- export function compute_skinned_mesh_clip_bounding_sphere({
291
- positions,
292
- joint_indices,
293
- joint_weights,
294
- vertex_count,
295
- skin,
296
- clip,
297
- dt = 1 / 60,
298
- }, out_sphere) {
299
-
300
- assert.defined(positions, 'positions');
301
- assert.defined(joint_indices, 'joint_indices');
302
- assert.defined(joint_weights, 'joint_weights');
303
- assert.isNonNegativeInteger(vertex_count, 'vertex_count');
304
- assert.defined(skin, 'skin');
305
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
306
- assert.defined(clip, 'clip');
307
- assert.equal(clip.isShadeAnimationClip, true, 'clip.isShadeAnimationClip !== true');
308
- assert.greaterThan(dt, 0, 'dt');
309
- assert.defined(out_sphere, 'out_sphere');
310
-
311
- const joints = skin.joints;
312
- const joint_count = joints.length;
313
- const channels = clip.channels;
314
- const channel_count = channels.length;
315
-
316
- // ── Topological order over the joint set ──────────────────
317
- //
318
- // Computed once per call; the skin's joint hierarchy is static.
319
- // For each joint we also note whether its parent is itself a
320
- // skin joint — outer parents (SkinnedMesh node, armature
321
- // anchor) are handled separately so we can fold their current
322
- // transform_global into the walk without confusing it with
323
- // an intra-skin link.
324
- _scratch_joint_order = _ensure_capacity(
325
- _scratch_joint_order, joint_count,
326
- (n) => new Int32Array(n),
327
- );
328
- _scratch_parent_in_set = _ensure_capacity(
329
- _scratch_parent_in_set, joint_count,
330
- (n) => new Int32Array(n),
331
- );
332
-
333
- const joint_index_map = new Map();
334
- for (let i = 0; i < joint_count; i++) joint_index_map.set(joints[i], i);
335
- for (let i = 0; i < joint_count; i++) {
336
- const parent = joints[i].parent;
337
- const p = parent !== null ? joint_index_map.get(parent) : undefined;
338
- _scratch_parent_in_set[i] = p === undefined ? -1 : p;
339
- }
340
-
341
- // DFS-based topo sort: visit parent before child. The visited
342
- // marker array is module-level scratch; grow if needed and
343
- // clear the joint_count prefix at the start of each call.
344
- _scratch_joint_visited = _ensure_capacity(
345
- _scratch_joint_visited, joint_count,
346
- (n) => new Uint8Array(n),
347
- );
348
- for (let i = 0; i < joint_count; i++) _scratch_joint_visited[i] = 0;
349
-
350
- let order_cursor = 0;
351
- const visit = (i) => {
352
- if (_scratch_joint_visited[i]) return;
353
- const parent_in_set = _scratch_parent_in_set[i];
354
- if (parent_in_set >= 0) visit(parent_in_set);
355
- _scratch_joint_visited[i] = 1;
356
- _scratch_joint_order[order_cursor++] = i;
357
- };
358
- for (let i = 0; i < joint_count; i++) visit(i);
359
-
360
- // ── Save bind-pose TRS for every channel-driven joint ──────
361
- //
362
- // Only the joints the clip actually animates are at risk of
363
- // being mutated — others stay at their bind values throughout.
364
- // Grow the snapshot buffers to fit one slot per channel
365
- // (channels are 1-to-1 with target Node3Ds in practice; the
366
- // same target can in theory show up across multiple channels
367
- // for different properties, but we still need only one snapshot
368
- // per channel).
369
- _scratch_bind_position = _ensure_capacity(
370
- _scratch_bind_position, channel_count * 3,
371
- (n) => new Float32Array(n),
372
- );
373
- _scratch_bind_rotation = _ensure_capacity(
374
- _scratch_bind_rotation, channel_count * 4,
375
- (n) => new Float32Array(n),
376
- );
377
- _scratch_bind_scale = _ensure_capacity(
378
- _scratch_bind_scale, channel_count * 3,
379
- (n) => new Float32Array(n),
380
- );
381
-
382
- for (let c = 0; c < channel_count; c++) {
383
- const tl = channels[c].target.transform_local;
384
- _scratch_bind_position[c * 3 + 0] = tl.translation_x;
385
- _scratch_bind_position[c * 3 + 1] = tl.translation_y;
386
- _scratch_bind_position[c * 3 + 2] = tl.translation_z;
387
- _scratch_bind_rotation[c * 4 + 0] = tl.rotation_x;
388
- _scratch_bind_rotation[c * 4 + 1] = tl.rotation_y;
389
- _scratch_bind_rotation[c * 4 + 2] = tl.rotation_z;
390
- _scratch_bind_rotation[c * 4 + 3] = tl.rotation_w;
391
- _scratch_bind_scale[c * 3 + 0] = tl.scale_x;
392
- _scratch_bind_scale[c * 3 + 1] = tl.scale_y;
393
- _scratch_bind_scale[c * 3 + 2] = tl.scale_z;
394
- }
395
-
396
- // ── Allocate scratch sized to the joint count + clip extent ─
397
- _scratch_joint_world = _ensure_capacity(
398
- _scratch_joint_world, joint_count * 16,
399
- (n) => new Float32Array(n),
400
- );
401
- _scratch_bone_matrices = _ensure_capacity(
402
- _scratch_bone_matrices, joint_count * 12,
403
- (n) => new Float32Array(n),
404
- );
405
-
406
- // ── Step the clip ────────────────────────────────────────
407
- const t_start = clip.start_time;
408
- const t_end = clip.end_time;
409
- const span = Math.max(t_end - t_start, 0);
410
- // Plus 1 to include both endpoints when (span % dt) == 0.
411
- const tick_count = Math.max(1, Math.floor(span / dt) + 1);
412
-
413
- _scratch_tick_spheres = _ensure_capacity(
414
- _scratch_tick_spheres, tick_count * 4,
415
- (n) => new Float32Array(n),
416
- );
417
-
418
- for (let tick = 0; tick < tick_count; tick++) {
419
- // Last tick lands exactly on t_end so the clip's endpoint
420
- // pose is included even when (span / dt) doesn't divide
421
- // evenly.
422
- const t = (tick === tick_count - 1) ? t_end : t_start + tick * dt;
423
-
424
- // Apply the clip to each channel's target Node3D. Mutates
425
- // bind-pose TRS on the animated joints — snapshot/restore
426
- // outside the tick loop covers it.
427
- clip.apply(t);
428
-
429
- // Walk the skin's joints in topological order, composing
430
- // each joint's world matrix from its parent's world matrix
431
- // and its own local. Outer parents (parent_in_set < 0)
432
- // contribute their current `transform_global.matrix` so the
433
- // sphere lands in the right outer frame; if the joint has
434
- // no parent at all, its world is just its local.
435
- for (let oi = 0; oi < joint_count; oi++) {
436
- const i = _scratch_joint_order[oi];
437
- const joint = joints[i];
438
-
439
- // Refresh the joint's matrix from its (possibly clip-
440
- // mutated) TRS.
441
- joint.transform_local.updateMatrix();
442
- const local = joint.transform_local.matrix;
443
- const parent_in_set = _scratch_parent_in_set[i];
444
- const out_offset = i * 16;
445
-
446
- if (parent_in_set >= 0) {
447
- const parent_world = _scratch_joint_world.subarray(
448
- parent_in_set * 16, parent_in_set * 16 + 16,
449
- );
450
- const out_view = _scratch_joint_world.subarray(out_offset, out_offset + 16);
451
- m4_multiply(out_view, parent_world, local);
452
- } else {
453
- const parent = joint.parent;
454
- if (parent !== null) {
455
- const out_view = _scratch_joint_world.subarray(out_offset, out_offset + 16);
456
- m4_multiply(out_view, parent.transform_global.matrix, local);
457
- } else {
458
- for (let k = 0; k < 16; k++) {
459
- _scratch_joint_world[out_offset + k] = local[k];
460
- }
461
- }
462
- }
463
- }
464
-
465
- // Build per-joint bone matrices in the 3×4 form the meep
466
- // skinner reads:
467
- // skin_matrix_i = joint_world_i × inverse_bind_i
468
- // No mesh-node factor — the consumer of `out_sphere` applies
469
- // `mesh.transform_global` on its side, matching the
470
- // rasterizer convention.
471
- const inverse_bind = skin.inverse_bind_matrices;
472
- for (let i = 0; i < joint_count; i++) {
473
- const joint_world = _scratch_joint_world.subarray(i * 16, i * 16 + 16);
474
- const inv_bind = inverse_bind.subarray(i * 16, i * 16 + 16);
475
-
476
- m4_multiply(_scratch_mat4_b, joint_world, inv_bind);
477
- _pack_mat4_to_bone_3x4(_scratch_mat4_b, _scratch_bone_matrices, i * 12);
478
- }
479
-
480
- // Skin + miniball sphere for this tick.
481
- compute_skinned_pose_bounding_sphere({
482
- positions,
483
- joint_indices,
484
- joint_weights,
485
- vertex_count,
486
- bone_matrices: _scratch_bone_matrices,
487
- }, _scratch_tick_sphere);
488
-
489
- const o = tick * 4;
490
- _scratch_tick_spheres[o + 0] = _scratch_tick_sphere.x;
491
- _scratch_tick_spheres[o + 1] = _scratch_tick_sphere.y;
492
- _scratch_tick_spheres[o + 2] = _scratch_tick_sphere.z;
493
- _scratch_tick_spheres[o + 3] = _scratch_tick_sphere.w;
494
- }
495
-
496
- // ── Union the per-tick spheres into one ──────────────────
497
- //
498
- // Layout: `_scratch_tick_spheres[tick * 4 + (0..3)] = (cx, cy, cz, r)`,
499
- // so each sphere is 4 floats wide. We pass `dimensions = 3` to
500
- // describe the spatial dimensionality of the centres.
501
- computeBoundingSphereOfSpheres(
502
- _scratch_union_result, _scratch_tick_spheres, 0, tick_count, 3,
503
- );
504
- out_sphere.set(
505
- _scratch_union_result[0],
506
- _scratch_union_result[1],
507
- _scratch_union_result[2],
508
- _scratch_union_result[3],
509
- );
510
-
511
- // ── Restore bind-pose TRS ──────────────────────────────────
512
- for (let c = 0; c < channel_count; c++) {
513
- const tl = channels[c].target.transform_local;
514
- tl.setTranslation(
515
- _scratch_bind_position[c * 3 + 0],
516
- _scratch_bind_position[c * 3 + 1],
517
- _scratch_bind_position[c * 3 + 2],
518
- );
519
- tl.setRotation(
520
- _scratch_bind_rotation[c * 4 + 0],
521
- _scratch_bind_rotation[c * 4 + 1],
522
- _scratch_bind_rotation[c * 4 + 2],
523
- _scratch_bind_rotation[c * 4 + 3],
524
- );
525
- tl.setScale(
526
- _scratch_bind_scale[c * 3 + 0],
527
- _scratch_bind_scale[c * 3 + 1],
528
- _scratch_bind_scale[c * 3 + 2],
529
- );
530
- }
531
- }
@@ -1,76 +0,0 @@
1
- import { assert } from "../../../../core/assert.js";
2
- import { Transform64 } from "../../../../engine/ecs/transform/Transform64.js";
3
- import { pose_evaluate_local } from "./pose_evaluate_local.js";
4
-
5
- /**
6
- * Scratch for one level of the parent walk. Depth is bounded by the skeleton, and reusing a small
7
- * stack keeps the query allocation-free.
8
- *
9
- * @type {Transform64[]}
10
- */
11
- const SCRATCH = [];
12
-
13
- /**
14
- * @type {Node3D[]}
15
- */
16
- const CHAIN = [];
17
-
18
- /**
19
- * @param {number} depth
20
- * @returns {Transform64}
21
- */
22
- function scratch_at(depth) {
23
- while (SCRATCH.length <= depth) {
24
- SCRATCH.push(new Transform64());
25
- }
26
-
27
- return SCRATCH[depth];
28
- }
29
-
30
- /**
31
- * Evaluate a node's **world** pose under a set of playing clips.
32
- *
33
- * This is the query gameplay actually asks: where is the muzzle, where does this effect attach,
34
- * where does the projectile leave from. It walks the node's parent chain, evaluates every ancestor's
35
- * animated local pose the same way, and composes down — so a socket on a hand follows the arm, the
36
- * shoulder and the root without any of it having been read back from the GPU.
37
- *
38
- * The chain is composed in double precision and every level is evaluated from the same `playbacks`,
39
- * which is what makes the result a pure function of (clip set, time, weights) rather than of
40
- * whatever the renderer last happened to write.
41
- *
42
- * @param {Transform64} result
43
- * @param {Node3D} node
44
- * @param {PosePlayback[]} playbacks
45
- * @returns {Transform64} `result`
46
- */
47
- export function pose_evaluate_world(result, node, playbacks) {
48
- assert.defined(result, 'result');
49
- assert.defined(node, 'node');
50
-
51
- CHAIN.length = 0;
52
-
53
- for (let cursor = node; cursor !== null; cursor = cursor.parent) {
54
- CHAIN.push(cursor);
55
- }
56
-
57
- // root first, so each step composes onto what is already accumulated
58
- let depth = 0;
59
-
60
- for (let i = CHAIN.length - 1; i >= 0; i--) {
61
- const local = scratch_at(depth);
62
-
63
- pose_evaluate_local(local, CHAIN[i], playbacks);
64
- local.updateMatrix();
65
-
66
- if (i === CHAIN.length - 1) {
67
- result.copy(local);
68
- } else {
69
- result.multiplyTransforms(result, local);
70
- }
71
-
72
- depth++;
73
- }
74
-
75
- return result;
76
- }
@@ -1,33 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { skin_joint_matrix } from "./skin_joint_matrix.js";
3
-
4
- /**
5
- * The transform that maps this skin's mesh-space geometry into the world at rest.
6
- *
7
- * `compute_skin_world_bounds` already names the thing: *"with every joint at its bind pose
8
- * `joint.global × inverse_bind` collapses to one and the same matrix, the character's placement in
9
- * the world"*. This returns that matrix. It is the frame a skinned mesh's vertices belong in, and
10
- * under {@link skin_normalize_mesh_frame} it becomes the mesh node's transform — see
11
- * `SKINNING_FRAME_PLAN.md`.
12
- *
13
- * **Joint 0's is the one taken.** In a file whose rest pose is its bind pose every joint answers the
14
- * same matrix, so which one is asked is not a choice; in a file where they differ there is no single
15
- * answer and no amount of averaging makes one. What matters is not that they agree but that
16
- * `frame⁻¹ · joint_matrix` comes out rigid for every joint, which is a weaker condition and a
17
- * different question — {@link skin_frame_defect} is that question, and it is the one to ask.
18
- *
19
- * Reads the joints' `transform_global`, so the skeleton has to have been walked
20
- * ({@link Node3D#updateMatrices}) since it was last moved. Joints under
21
- * {@link TransformAuthority.GPU} hold the rest pose there, which is what this wants.
22
- *
23
- * @param {Float64Array|Float32Array|number[]} out 16 elements, column-major
24
- * @param {Skin} skin
25
- * @returns {Float64Array|Float32Array|number[]} `out`
26
- */
27
- export function skin_bind_transform(out, skin) {
28
- assert.defined(skin, 'skin');
29
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
30
- assert.greaterThanOrEqual(skin.joints.length, 1, 'skin.joints.length');
31
-
32
- return skin_joint_matrix(out, skin, 0);
33
- }