@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,132 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
3
- import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
4
- import { m4_rigidity_defect } from "../../../core/geom/3d/mat4/m4_rigidity_defect.js";
5
- import { skin_joint_matrix } from "./skin_joint_matrix.js";
6
-
7
- /**
8
- * Scratch, so that walking a sixty-five-joint skeleton does not allocate per joint. Nothing here
9
- * re-enters, and none of it outlives the call.
10
- */
11
- const _inverse_frame = new Float64Array(16);
12
- const _joint_matrix = new Float64Array(16);
13
- const _folded = new Float64Array(16);
14
-
15
- /**
16
- * Whether a frame is one this skin can be deformed in — and if not, by how much it is not.
17
- *
18
- * The skinning pass converts `frame⁻¹ × joint.global × inverse_bind` to a dual quaternion, and a
19
- * dual quaternion carries a rotation and a translation and nothing else. So that product must be
20
- * rigid for every joint. This is that condition as a number: zero when the frame works, and growing
21
- * with whatever the conversion would have to throw away. `SKINNING_FRAME_PLAN.md` §1 is what
22
- * happens when it does.
23
- *
24
- * **This, and not "do the joints agree", is the precondition.** A file whose rest pose is not its
25
- * bind pose has joints whose skin matrices differ — by *rigid* motions, which cost nothing here.
26
- * What cannot be absorbed is a scale or a shear, and this sees exactly that.
27
- *
28
- * Reads the joints' `transform_global`, so it answers for whatever pose the skeleton is standing in.
29
- * At rest that is the registration-time question. Handed a posed skeleton it answers the runtime one
30
- * — a clip that scales a joint, which no frame can fix (§4).
31
- *
32
- * @param {Skin} skin
33
- * @param {ArrayLike<number>} frame 16 elements, column-major — the transform the renderer re-applies
34
- * @returns {number} the largest {@link m4_rigidity_defect} over the skin's joints; `Infinity` if
35
- * `frame` has no inverse, or if any joint's fold comes out a reflection — which scores zero
36
- * on the defect and is unrepresentable all the same
37
- */
38
- export function skin_frame_defect(skin, frame) {
39
- assert.defined(skin, 'skin');
40
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
41
- assert.isArrayLike(frame, 'frame');
42
-
43
- if (!m4_invert(_inverse_frame, frame)) {
44
- // a frame with no inverse is not a frame; the skinning pass would divide by that determinant
45
- return Infinity;
46
- }
47
-
48
- const joint_count = skin.joints.length;
49
-
50
- let worst = 0;
51
-
52
- for (let j = 0; j < joint_count; j++) {
53
- skin_joint_matrix(_joint_matrix, skin, j);
54
-
55
- m4_multiply(_folded, _inverse_frame, _joint_matrix);
56
-
57
- if (m4_linear_determinant(_folded) < 0) {
58
- /*
59
- A reflection. {@link m4_rigidity_defect} reads zero for one — it measures orthonormality,
60
- and a reflection is orthonormal — so this is the one way a fold can be unrepresentable
61
- and still score perfectly. `quat_from_m3` would answer with a *rotation*, silently, which
62
- is precisely the class of failure this check exists to end.
63
-
64
- Not fixable by a frame either: a reflection shared by the frame and every joint cancels
65
- and never reaches here, so one that does reach here is a skeleton whose joints disagree
66
- about handedness.
67
- */
68
- return Infinity;
69
- }
70
-
71
- const defect = m4_rigidity_defect(_folded);
72
-
73
- if (defect > worst) {
74
- worst = defect;
75
- }
76
- }
77
-
78
- return worst;
79
- }
80
-
81
- /**
82
- * The determinant of a matrix's upper 3×3 — negative exactly when the transform turns a
83
- * right-handed basis left-handed.
84
- *
85
- * @param {ArrayLike<number>} mat4 column-major
86
- * @returns {number}
87
- */
88
- function m4_linear_determinant(mat4) {
89
- const a = mat4[0], b = mat4[4], c = mat4[8];
90
- const d = mat4[1], e = mat4[5], f = mat4[9];
91
- const g = mat4[2], h = mat4[6], i = mat4[10];
92
-
93
- return a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
94
- }
95
-
96
- /**
97
- * The same question of one joint, freshly allocated — for a caller that wants to say *which* joint
98
- * and by how much rather than only the worst of them.
99
- *
100
- * @param {Skin} skin
101
- * @param {ArrayLike<number>} frame
102
- * @returns {number[]} one defect per joint, in joint order
103
- */
104
- export function skin_frame_defect_by_joint(skin, frame) {
105
- assert.defined(skin, 'skin');
106
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
107
-
108
- // f64 throughout: a 100× frame inverted in f32 reports a defect of its own rounding, and this
109
- // number is read against a tolerance small enough to see one
110
- const inverse_frame = new Float64Array(16);
111
-
112
- if (!m4_invert(inverse_frame, frame)) {
113
- return skin.joints.map(() => Infinity);
114
- }
115
-
116
- const joint_matrix = new Float64Array(16);
117
- const folded = new Float64Array(16);
118
-
119
- return skin.joints.map((_joint, j) => {
120
- skin_joint_matrix(joint_matrix, skin, j);
121
-
122
- m4_multiply(folded, inverse_frame, joint_matrix);
123
-
124
- // the same refusal {@link skin_frame_defect} makes, so that the gate and the diagnostic
125
- // that explains it cannot disagree about which joints are the problem
126
- if (m4_linear_determinant(folded) < 0) {
127
- return Infinity;
128
- }
129
-
130
- return m4_rigidity_defect(folded);
131
- });
132
- }
@@ -1,46 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
3
-
4
- /**
5
- * One joint's skin matrix, in the pose its node currently holds: `joint.global × inverse_bind`.
6
- *
7
- * The same quantity `shader_skin_matrix_prep` writes to the GPU's `skin_matrices` buffer, and the
8
- * same one `compute_skin_world_bounds` composes its box out of — kept here so the CPU-side callers
9
- * that reason about a skin's geometry all read it from one place rather than three.
10
- *
11
- * It maps a vertex from the skin's mesh space into **world** space. The mesh node's own transform
12
- * does not appear and must not: glTF says a skinned mesh's node transform is ignored, and this
13
- * engine's arrangement is that the skinning pass folds its inverse in and the rasterizer re-applies
14
- * it, so the two cancel. See `SKINNING_FRAME_PLAN.md` for what that fold requires of an asset.
15
- *
16
- * Not a per-frame path. Joints the pose accumulator drives are {@link TransformAuthority.GPU} and
17
- * their `transform_global` holds the rest pose the CPU seeded, so what this answers for an animated
18
- * character is the rest-pose matrix — which is exactly what the frame arithmetic wants, and is not
19
- * what a renderer wants.
20
- *
21
- * @param {Float64Array|Float32Array|number[]} out 16 elements, column-major
22
- * @param {Skin} skin
23
- * @param {number} joint_index
24
- * @returns {Float64Array|Float32Array|number[]} `out`
25
- */
26
- export function skin_joint_matrix(out, skin, joint_index) {
27
- assert.isArrayLike(out, 'out');
28
- assert.defined(skin, 'skin');
29
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
30
- assert.isNonNegativeInteger(joint_index, 'joint_index');
31
- assert.lessThan(joint_index, skin.joints.length, 'joint_index');
32
-
33
- const offset = joint_index * 16;
34
-
35
- assert.greaterThanOrEqual(
36
- skin.inverse_bind_matrices.length, offset + 16,
37
- 'skin.inverse_bind_matrices.length'
38
- );
39
-
40
- // a Transform64's matrix starts at element 0, so the transform is its own mat4 argument
41
- return m4_multiply(
42
- out,
43
- skin.joints[joint_index].transform_global,
44
- skin.inverse_bind_matrices.subarray(offset, offset + 16)
45
- );
46
- }
@@ -1,216 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
3
- import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
4
- import { m4_rigidity_defect } from "../../../core/geom/3d/mat4/m4_rigidity_defect.js";
5
- import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
6
- import { skin_bind_transform } from "./skin_bind_transform.js";
7
- import { skin_frame_defect } from "./skin_frame_defect.js";
8
-
9
- /**
10
- * How far from the bind transform a mesh node may sit and still be left alone, and how large a
11
- * residual counts as landed.
12
- *
13
- * A `Transform64` recomposes its local matrix from f32-ish components, and the correction is applied
14
- * through that round trip, so the frame arrives with rounding on it. `1e-4` is far below anything
15
- * that shows — the smallest real violation seen is `99` — and far above the noise.
16
- *
17
- * @type {number}
18
- */
19
- const TOLERANCE = 1e-4;
20
-
21
- /**
22
- * Put a skin's meshes into the frame the skin actually deforms in.
23
- *
24
- * ## What it does and why
25
- *
26
- * The skinning pass writes each clone's vertices in `inverse(mesh.global)` space and the rasterizer
27
- * re-applies `mesh.global`, so `mesh.global` is the *frame* a skinned mesh's vertices live in. The
28
- * pass gets there by converting `inverse(mesh.global) × joint.global × inverse_bind` to a dual
29
- * quaternion, which carries a rotation and a translation and **nothing else** — so that product has
30
- * to be rigid, and whether it is depends entirely on `mesh.global`.
31
- *
32
- * glTF says a skinned mesh's node transform is ignored, so it is not the asset's to choose. This
33
- * makes it the engine's, and sets it to the one frame that is guaranteed to work: the skin's own
34
- * bind transform, `joint.global × inverse_bind` at rest — see {@link skin_bind_transform}. After
35
- * this, `inverse(mesh.global) × joint.global × inverse_bind` is the joint's **displacement from
36
- * bind**, which is rigid whenever the clip rotates and translates and does not scale. That is the
37
- * honest precondition of dual-quaternion skinning, and it is a property of the animation rather than
38
- * of the exporter's unit conventions.
39
- *
40
- * `SKINNING_FRAME_PLAN.md` is the whole argument, including what a violation looks like on screen.
41
- *
42
- * ## Properties worth knowing
43
- *
44
- * - **Idempotent.** Afterwards `mesh.global` *is* the bind transform, so a second call computes the
45
- * identity and changes nothing. Re-registering a skin is free.
46
- * - **Placement-invariant.** The correction is `mesh.global⁻¹ × bind`, and anything applied above
47
- * both the mesh node and the joints — a placement, a walk cycle moving the character — multiplies
48
- * both on the left and cancels. Computed once, correct forever.
49
- * - **A no-op for an asset that already agrees.** A file whose inverse-bind matrices are authored
50
- * before its root's unit conversion has `bind == mesh.global` already and is not touched. That is
51
- * the shape this engine's creature models are said to have, and it is what keeps this from being
52
- * a change to them.
53
- *
54
- * ## What it cannot fix
55
- *
56
- * A skin whose *own* bind frame does not work — a rest pose carrying a non-uniform scale or a shear,
57
- * or joints that disagree about more than a rigid motion. No choice of frame fixes those; a dual
58
- * quaternion cannot represent them at all. `frame_defect` in the report is that case, and when it
59
- * fires nothing is written: the mesh is left as the asset had it rather than moved somewhere equally
60
- * wrong. See `SKINNING_FRAME_PLAN.md` §4 for the ladder out.
61
- *
62
- * @param {Skin} skin its joints and meshes must have been walked — this reads `transform_global`,
63
- * which is derived. A skin that has never been walked at all is refused rather than
64
- * measured; one walked and then moved is the caller's to walk again, and the residual
65
- * below is what notices if the mesh half of that was missed
66
- * @returns {{
67
- * frame_defect: number,
68
- * absorbed: number,
69
- * corrected: number,
70
- * unchanged: number,
71
- * residual: number,
72
- * obstructed: Node3D[],
73
- * unwalked: Node3D[],
74
- * }} `frame_defect` — how far the skin is from being deformable in *any* frame, zero when it is
75
- * fine and `NaN` when `unwalked` stopped it being asked; `absorbed` — how far from rigid the largest correction was, which for a violation is the
76
- * number the soup was made of; `corrected` and `unchanged` — meshes moved and meshes already
77
- * right; `residual` — the worst `|mesh.global − bind|` left afterwards; `obstructed` — corrected
78
- * mesh nodes that had children, which have been scaled along with them; `unwalked` — joints or
79
- * meshes whose `transform_global` has never been derived, which stops everything else
80
- */
81
- export function skin_normalize_mesh_frame(skin) {
82
- assert.defined(skin, 'skin');
83
- assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
84
-
85
- const unwalked = skin.joints.filter(joint => joint.version === 0)
86
- .concat(skin.meshes.filter(mesh => mesh.version === 0));
87
-
88
- const report = {
89
- // not measured until there is something worth measuring — see the refusal below
90
- frame_defect: Number.NaN,
91
- absorbed: 0,
92
- corrected: 0,
93
- unchanged: 0,
94
- residual: 0,
95
- obstructed: [],
96
- unwalked,
97
- };
98
-
99
- if (unwalked.length > 0) {
100
- /*
101
- Everything below reads `transform_global`, which is derived and starts at the **identity** —
102
- not at zero. A skeleton nobody has walked therefore answers "every joint is at the origin"
103
- rather than answering with a singular matrix, and that answer is well-formed enough to pass
104
- every check here: the folds come out `inverse_bind_0⁻¹ × inverse_bind_j`, which for a real
105
- character differ by rigid motions and so read as perfectly rigid. A correction would then be
106
- computed from nothing and applied, and the residual below would agree with itself, because
107
- both halves of it come from the same unwalked state.
108
-
109
- `version` is the one thing that tells the two apart: `updateMatrices` bumps it, and nothing
110
- else does. Refusing here rather than asserting because a caller who has not walked has a
111
- scene that is not ready, not a bug in this.
112
- */
113
- return report;
114
- }
115
-
116
- const bind = new Float64Array(16);
117
-
118
- skin_bind_transform(bind, skin);
119
-
120
- report.frame_defect = skin_frame_defect(skin, bind);
121
-
122
- if (!(report.frame_defect <= TOLERANCE)) {
123
- // `!(x <= t)` rather than `x > t` so that a NaN — a singular joint matrix — lands here too
124
- return report;
125
- }
126
-
127
- const inverse_global = new Float64Array(16);
128
- const correction_matrix = new Float64Array(16);
129
-
130
- const correction = new Transform64();
131
-
132
- const meshes = skin.meshes;
133
-
134
- for (let i = 0; i < meshes.length; i++) {
135
- const mesh = meshes[i];
136
-
137
- if (!m4_invert(inverse_global, mesh.transform_global)) {
138
- // a mesh node with no inverse is not a frame either; the skinning pass inverts this
139
- report.residual = Infinity;
140
- continue;
141
- }
142
-
143
- m4_multiply(correction_matrix, inverse_global, bind);
144
-
145
- const absorbed = m4_rigidity_defect(correction_matrix);
146
-
147
- report.absorbed = Math.max(report.absorbed, absorbed);
148
-
149
- if (matrix_distance(correction_matrix, IDENTITY) <= TOLERANCE) {
150
- report.unchanged++;
151
- continue;
152
- }
153
-
154
- /*
155
- The correction goes on the **local** transform, on the right. `transform_global` is derived —
156
- `updateMatrices` recomputes it from the local and the parent chain — so a frame written
157
- there is discarded by the next walk; and the mesh node is the last node on the mesh-only
158
- path, so this is the one place a correction reaches the mesh without reaching the joints.
159
- */
160
- correction.fromMatrix(correction_matrix);
161
-
162
- mesh.transform_local.multiply(correction);
163
-
164
- mesh.updateMatrices();
165
-
166
- report.corrected++;
167
- report.residual = Math.max(report.residual, matrix_distance(mesh.transform_global, bind));
168
-
169
- if (mesh.children.length > 0) {
170
- /*
171
- Children of a skinned mesh node inherit the correction, and it is not a transform they
172
- asked for. In this engine sockets, effect anchors and projectile spawns are authored as
173
- bones, so a skinned mesh node should have none — but that is a convention, and this is
174
- where it would be broken silently.
175
- */
176
- report.obstructed.push(mesh);
177
- }
178
- }
179
-
180
- return report;
181
- }
182
-
183
- /**
184
- * @type {Float64Array}
185
- */
186
- const IDENTITY = new Float64Array([
187
- 1, 0, 0, 0,
188
- 0, 1, 0, 0,
189
- 0, 0, 1, 0,
190
- 0, 0, 0, 1,
191
- ]);
192
-
193
- /**
194
- * The largest element-wise difference between two matrices.
195
- *
196
- * Element-wise rather than a norm because it is read against a tolerance, and because the two things
197
- * it has to catch — a linear part that did not land and a translation that did not — are both
198
- * element-wise. Mixing units is the point: any of them being wrong is the same answer.
199
- *
200
- * @param {ArrayLike<number>} a
201
- * @param {ArrayLike<number>} b
202
- * @returns {number}
203
- */
204
- function matrix_distance(a, b) {
205
- let worst = 0;
206
-
207
- for (let i = 0; i < 16; i++) {
208
- const difference = Math.abs(a[i] - b[i]);
209
-
210
- if (difference > worst) {
211
- worst = difference;
212
- }
213
- }
214
-
215
- return worst;
216
- }
@@ -1,235 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { array_remove_first } from "../../../core/collection/array/array_remove_first.js";
3
- import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
4
- import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
5
-
6
- /**
7
- * @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
8
- * @typedef {import("./Mesh.js").Mesh} Mesh
9
- * @typedef {import("./Node3D.js").Node3D} Node3D
10
- */
11
-
12
- /**
13
- * The renderable side of a {@link Scene} — every {@link Node3D} that the
14
- * GPU's `transforms` table needs a row for, plus the cached mesh-only
15
- * filter rendering iterates.
16
- *
17
- * Storage is a flat `Node3D[]`. Anything `Mesh`-shaped feeds the
18
- * {@link instances} view (the renderable subset); everything else (anchor
19
- * rigs, attachment points, future skeleton joints) still earns a row in
20
- * the GPU scene-graph because the propagation pass needs to walk the
21
- * whole hierarchy regardless of which nodes happen to carry geometry.
22
- *
23
- * Lights live in {@link Scene.lights}, separately, and are not added
24
- * here — they have their own GPU pipeline that doesn't share the
25
- * `transforms` table.
26
- */
27
- export class InstanceBatch {
28
- /**
29
- * Every node ever added — meshes and non-mesh Node3Ds alike. Ordered
30
- * by insertion. Consumers that only need geometry-bearing instances
31
- * should go through {@link instances} instead, which caches a Mesh-
32
- * only filter of this list.
33
- *
34
- * @type {Node3D[]}
35
- */
36
- #nodes = [];
37
-
38
- /**
39
- *
40
- * @type {number}
41
- */
42
- #version = 0;
43
-
44
- /**
45
- * Cached mesh-only view of {@link #nodes}, refreshed lazily on read
46
- * whenever {@link #version} drifts.
47
- *
48
- * @type {Mesh[]}
49
- */
50
- #cached_instances = [];
51
-
52
- /**
53
- * @type {number}
54
- */
55
- #cached_instances_version = -1;
56
-
57
- /**
58
- *
59
- * @type {ShadeMaterial[]}
60
- */
61
- #cached_materials = [];
62
-
63
- /**
64
- * @type {number}
65
- */
66
- #cached_materials_version = -1;
67
-
68
- /**
69
- * Set of all materials used in this scene.
70
- * Primarily useful for rendering.
71
- * @type {ShadeMaterial[]}
72
- */
73
- get materials() {
74
- if (this.#cached_materials_version !== this.#version) {
75
- const set = new Set();
76
-
77
- const meshes = this.instances;
78
- for (let i = 0; i < meshes.length; i++) {
79
- set.add(meshes[i].material);
80
- }
81
-
82
- this.#cached_materials_version = this.#version;
83
- this.#cached_materials = Array.from(set);
84
- }
85
-
86
- return this.#cached_materials;
87
- }
88
-
89
- /**
90
- *
91
- * @param {boolean} v
92
- */
93
- set needsUpdate(v) {
94
- assert.isBoolean(v, 'v');
95
-
96
- if (v) {
97
- this.#version++;
98
- }
99
- }
100
-
101
- /**
102
- *
103
- * @return {number}
104
- */
105
- get version() {
106
- return this.#version;
107
- }
108
-
109
- /**
110
- * The mesh-only subset of {@link nodes} — what the rasterization
111
- * pipeline iterates. Cached so repeated calls within the same
112
- * version are O(1).
113
- *
114
- * @returns {Mesh[]}
115
- */
116
- get instances() {
117
- if (this.#cached_instances_version !== this.#version) {
118
- const out = [];
119
- const all = this.#nodes;
120
- const n = all.length;
121
- for (let i = 0; i < n; i++) {
122
- const node = all[i];
123
- if (node.isMesh === true) {
124
- out.push(node);
125
- }
126
- }
127
- this.#cached_instances = out;
128
- this.#cached_instances_version = this.#version;
129
- }
130
- return this.#cached_instances;
131
- }
132
-
133
- /**
134
- * Every node in the batch — the input the GPU scene-graph propagation
135
- * pass iterates. Order is insertion order; {@link instances} is
136
- * a stable subset.
137
- *
138
- * @returns {Node3D[]}
139
- */
140
- get nodes() {
141
- return this.#nodes;
142
- }
143
-
144
-
145
- /**
146
- * Add a node. Accepts any {@link Node3D} — meshes, anchors, future
147
- * skeleton joints. Meshes will additionally appear in
148
- * {@link instances} (cached).
149
- *
150
- * @param {Node3D} node
151
- */
152
- add(node) {
153
- assert.defined(node, 'node');
154
- assert.equal(node.isNode3D, true, 'node.isNode3D !== true');
155
-
156
- this.#nodes.push(node);
157
-
158
- this.#version++;
159
- }
160
-
161
- /**
162
- *
163
- * @return {AABB3}
164
- */
165
- get bounding_box() {
166
- const result = new AABB3();
167
- result.setNegativelyInfiniteBounds();
168
-
169
- const meshes = this.instances;
170
- const n = meshes.length;
171
- for (let i = 0; i < n; i++) {
172
-
173
- const box = new AABB3(...meshes[i].bounding_box);
174
-
175
- if (box.width === 0 && box.height === 0 && box.depth === 0) {
176
- // ignore 0-size elements as they do not contribute visually
177
- continue;
178
- }
179
-
180
- result.expandToFit(box);
181
-
182
- }
183
-
184
- return result;
185
- }
186
-
187
- /**
188
- *
189
- * @returns {number}
190
- */
191
- computeTriangleCount() {
192
- let result = 0;
193
-
194
- const meshes = this.instances;
195
- const count = meshes.length;
196
- for (let i = 0; i < count; i++) {
197
- const mesh = meshes[i];
198
-
199
- result += mesh.geometry.getIndexCount() / 3;
200
- }
201
-
202
- return result;
203
- }
204
-
205
- /**
206
- * Remove a node (mesh or otherwise). Returns true if the node was
207
- * found and dropped.
208
- *
209
- * @param {Node3D} node
210
- * @returns {boolean}
211
- */
212
- remove(node) {
213
-
214
- const removed = array_remove_first(this.#nodes, node);
215
-
216
- if (removed) {
217
- this.#version++;
218
- }
219
-
220
- return removed;
221
- }
222
-
223
- hash() {
224
- return 0;
225
- }
226
-
227
- /**
228
- *
229
- * @param {InstanceBatch} other
230
- */
231
- equals(other) {
232
- return isArrayEqualStrict(this.#nodes, other.#nodes);
233
- }
234
-
235
- }