@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,168 +0,0 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
3
- import { aabb3_from_v3_array_transformed } from "../../../core/geom/3d/aabb/aabb3_from_v3_array_transformed.js";
4
- import { aabb3_matrix4_project } from "../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
5
- import { sphere_matrix4_transform } from "../../../core/geom/3d/sphere/sphere_matrix4_transform.js";
6
- import { epsilonEquals } from "../../../core/math/epsilonEquals.js";
7
- import { optional_equality } from "../../../core/model/object/optional_equality.js";
8
- import { StandardAttributes } from "../geometry/StandardAttributes.js";
9
- import { Node3D } from "./Node3D.js";
10
-
11
- /**
12
- * @typedef {import("../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
13
- * @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
14
- */
15
-
16
- export class Mesh extends Node3D {
17
- /**
18
- * @type {MeshletGeometry}
19
- */
20
- geometry;
21
-
22
- /**
23
- * @type {ShadeMaterial}
24
- */
25
- material;
26
-
27
- /**
28
- * World-space AABB
29
- * @type {Float32Array}
30
- */
31
- bounding_box = new Float32Array(6);
32
-
33
- /**
34
- *
35
- * @type {Float32Array}
36
- */
37
- bounding_sphere = new Float32Array(4);
38
-
39
- /**
40
- *
41
- * @returns {Mesh}
42
- */
43
- clone() {
44
- const r = new Mesh();
45
-
46
- r.copy(this);
47
-
48
- return r;
49
- }
50
-
51
- /**
52
- *
53
- * @param {Mesh} other
54
- */
55
- copy(other) {
56
-
57
- if (this === other) {
58
- // special case
59
- return;
60
- }
61
-
62
- super.copy(other);
63
-
64
- this.geometry = other.geometry;
65
- this.material = other.material;
66
- this.name = other.name;
67
-
68
- this.bounding_box.set(other.bounding_box);
69
- this.bounding_sphere.set(other.bounding_sphere);
70
- }
71
-
72
- /**
73
- *
74
- * @param {Mesh} other
75
- * @returns {boolean}
76
- */
77
- equals(other) {
78
- return this.name === other.name
79
- && optional_equality(this.geometry, other.geometry)
80
- && optional_equality(this.material, other.material)
81
- && this.transform_global.equals(other.transform_global)
82
- ;
83
- }
84
-
85
- updateMatrices() {
86
- super.updateMatrices();
87
-
88
- this.updateBoundsBasic();
89
- }
90
-
91
- updateBoundsBasic() {
92
- // a Transform64's matrix starts at element 0, so the transform is its own mat4 argument —
93
- // going through `.matrix` would allocate a view per call for nothing
94
- const m = this.transform_global;
95
-
96
- aabb3_matrix4_project(this.bounding_box, this.geometry.bounding_box, m);
97
- sphere_matrix4_transform(this.bounding_sphere, this.geometry.bounding_sphere, m);
98
- }
99
-
100
- updateBoundsTight() {
101
-
102
- const t = this.transform_global;
103
-
104
- const unrotated = epsilonEquals(t.rotation_x, 0)
105
- && epsilonEquals(t.rotation_y, 0)
106
- && epsilonEquals(t.rotation_z, 0)
107
- && epsilonEquals(t.rotation_w, 1);
108
-
109
- if (unrotated) {
110
- // no rotation component, can safely scale/translate geometry bounds to get tight fit
111
- this.updateBoundsBasic();
112
-
113
- } else {
114
-
115
- throw new Error('not implemented');
116
-
117
- const position_attribute = this.geometry.getAttribute(StandardAttributes.Position);
118
- const position_array = position_attribute.data;
119
-
120
- {
121
- const bounds = new AABB3();
122
-
123
- aabb3_from_v3_array_transformed(
124
- bounds,
125
- position_array, position_array.length,
126
- this.transform_global
127
- );
128
-
129
- bounds.writeToArray(this.bounding_box, 0);
130
- }
131
-
132
- {
133
- // todo do a tight sphere bounds
134
- sphere_matrix4_transform(this.bounding_sphere, this.geometry.bounding_sphere, this.transform_global);
135
- }
136
- }
137
- }
138
-
139
- /**
140
- *
141
- * @param {MeshletGeometry} geometry
142
- * @param {ShadeMaterial} material
143
- * @param {number[]|Float32Array|Float64Array} [transform] 4x4 affine matrix, column-major
144
- * @return {Mesh}
145
- */
146
- static from(geometry, material, transform) {
147
- assert.defined(geometry, 'geometry');
148
- assert.defined(material, 'material');
149
-
150
- assert.equal(geometry.isMeshletGeometry, true, 'geometry.isMeshletGeometry !== true');
151
-
152
- const r = new Mesh();
153
-
154
- r.geometry = geometry;
155
- r.material = material;
156
-
157
- if (transform !== undefined) {
158
- r.transform_local.fromMatrix(transform);
159
- }
160
-
161
- r.updateMatrices();
162
-
163
- return r;
164
- }
165
- }
166
-
167
-
168
- Mesh.prototype.isMesh = true;
@@ -1,263 +0,0 @@
1
- import Vector3 from "../../../core/geom/Vector3.js";
2
- import { t64_look_rotation } from "../../../engine/ecs/transform/t64_look_rotation.js";
3
- import { t64_transform_direction } from "../../../engine/ecs/transform/t64_transform_direction.js";
4
- import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
5
- import { TransformAuthority } from "./TransformAuthority.js";
6
-
7
- let id_counter = 0;
8
-
9
- /**
10
- * Note that hierarchy only exists on the CPU side
11
- * The only transform that GPU will see is the {@link transform_global}
12
- */
13
- export class Node3D {
14
-
15
- /**
16
- * Stable numeric id, unique across every Node3D instance (meshes,
17
- * lights, scenes, anchors). Used as the key in
18
- * `GPUSceneContext.id_mapping` to look up the node's row in the
19
- * GPU `transforms` table — the binding survives table compaction
20
- * or rebuild because it's tied to the JS object's identity, not
21
- * its position in any array.
22
- *
23
- * @type {number}
24
- * @readonly
25
- */
26
- id = id_counter++;
27
-
28
- /**
29
- * Human-readable name
30
- * @type {string}
31
- */
32
- name = ""
33
-
34
- /**
35
- * @type {number}
36
- */
37
- #version = 0;
38
-
39
- /**
40
- * Bumped by {@link updateMatrices}. The renderer compares it against the version it last
41
- * uploaded for this node's row, so a node that has not moved since the previous frame costs
42
- * nothing beyond the comparison — that is what keeps per-frame scene upkeep proportional to
43
- * what changed rather than to scene size.
44
- *
45
- * A caller that mutates `transform_local` without calling {@link updateMatrices} leaves
46
- * `transform_global` stale, and this counter says so: both are derived, and neither is
47
- * refreshed until the call is made.
48
- *
49
- * @returns {number}
50
- */
51
- get version() {
52
- return this.#version;
53
- }
54
-
55
- /**
56
- * @param {boolean} v
57
- */
58
- set needsUpdate(v) {
59
- if (v) {
60
- this.#version++;
61
- }
62
- }
63
-
64
- /**
65
- * Who writes this node's TRS in the GPU `transforms` table. Declared, never inferred — see
66
- * {@link TransformAuthority} for what each side owns and why guessing does not work.
67
- *
68
- * @type {TransformAuthority}
69
- */
70
- transform_authority = TransformAuthority.CPU;
71
-
72
- /**
73
- * World transform, **derived** — {@link updateMatrices} recomputes it from
74
- * {@link transform_local} and the parent chain, so writing it directly is undone the moment
75
- * anything refreshes. Place a node through its local transform.
76
- *
77
- * @type {Transform64}
78
- */
79
- transform_global = new Transform64();
80
-
81
- /**
82
- * Local transform, and the node's own truth. Passive: setting a component does not refresh the
83
- * matrix, and nothing downstream sees the change until {@link updateMatrices} runs.
84
- *
85
- * @type {Transform64}
86
- */
87
- transform_local = new Transform64();
88
-
89
- parent = null;
90
-
91
- /**
92
- *
93
- * @type {Node3D[]}
94
- */
95
- children = []
96
-
97
- /**
98
- * Orientation vector — `(0,0,1)` rotated by the node's global transform. Freshly allocated;
99
- * hold on to it rather than reading this in a loop.
100
- *
101
- * @return {Vector3}
102
- */
103
- get forward() {
104
- return t64_transform_direction(new Vector3(), this.transform_global, 0, 0, 1);
105
- }
106
-
107
- /**
108
- * Orient this node so its local +Z axis points along `v`. Preserves
109
- * position. A zero-length input is a no-op. Recomputes
110
- * `transform_global` so the new orientation is visible immediately.
111
- *
112
- * @param {Vector3|number[]} v
113
- */
114
- set forward(v) {
115
- const fx = v[0], fy = v[1], fz = v[2];
116
- if (fx === 0 && fy === 0 && fz === 0) return;
117
-
118
- t64_look_rotation(this.transform_local, fx, fy, fz, 0, 1, 0);
119
- this.updateMatrices();
120
- }
121
-
122
- /**
123
- * Orientation vector — `(1,0,0)` rotated by the node's global transform. Freshly allocated;
124
- * hold on to it rather than reading this in a loop.
125
- *
126
- * @return {Vector3}
127
- */
128
- get right() {
129
- return t64_transform_direction(new Vector3(), this.transform_global, 1, 0, 0);
130
- }
131
-
132
- /**
133
- * @param {Vector3|number[]} v
134
- */
135
- set position(v) {
136
- this.transform_local.setTranslation(v[0], v[1], v[2]);
137
- }
138
-
139
- /**
140
- * Live view over the local transform's own storage, freshly allocated on every access. Writing
141
- * through it does not refresh anything — {@link updateMatrices} still has to run.
142
- *
143
- * @returns {Float64Array}
144
- */
145
- get position() {
146
- return this.transform_local.translation;
147
- }
148
-
149
- copy(other) {
150
- this.transform_local.copy(other.transform_local);
151
- this.transform_global.copy(other.transform_global);
152
-
153
- this.#version++;
154
- }
155
-
156
- clone() {
157
-
158
- const r = new Node3D();
159
-
160
- r.copy(this);
161
-
162
- const children = this.children;
163
- const child_count = children.length;
164
-
165
- for (let i = 0; i < child_count; i++) {
166
- const clone = children[i].clone();
167
-
168
- clone.parent = r;
169
-
170
- r.children.push(clone);
171
-
172
- }
173
-
174
- return r;
175
- }
176
-
177
- /**
178
- *
179
- * @param {function(Node3D)} callback
180
- * @param {*} [thisArg]
181
- */
182
- traverse(callback, thisArg) {
183
- callback.call(thisArg, this);
184
-
185
- for (const child of this.children) {
186
- child.traverse(callback, thisArg);
187
- }
188
- }
189
-
190
- /**
191
- * Recompose this node's world transform and every descendant's.
192
- *
193
- * The local matrix is refreshed first because nothing else will: a `Transform64` does not track
194
- * its own components, and {@link Transform64.multiplyTransforms} composes through matrices. Skip
195
- * it and the node would be placed where it was the last time someone asked.
196
- */
197
- updateMatrices() {
198
-
199
- const transform_local = this.transform_local;
200
-
201
- transform_local.updateMatrix();
202
-
203
- const parent = this.parent;
204
-
205
- if (parent === null) {
206
- this.transform_global.copy(transform_local);
207
- } else {
208
- this.transform_global.multiplyTransforms(parent.transform_global, transform_local);
209
- }
210
-
211
- this.#version++;
212
-
213
- const children = this.children;
214
-
215
- const length = children.length;
216
-
217
- for (let i = 0; i < length; i++) {
218
-
219
- const child = children[i];
220
-
221
- child.updateMatrices();
222
- }
223
- }
224
-
225
- /**
226
- *
227
- * @param {Node3D[]} children
228
- */
229
- addChildren(children) {
230
- const length = children.length;
231
- for (let i = 0; i < length; i++) {
232
- this.addChild(children[i]);
233
- }
234
- }
235
-
236
- /**
237
- *
238
- * @param {Node3D} child
239
- */
240
- addChild(child) {
241
- if (child === this) {
242
- throw new Error(`Can't add to self`);
243
- }
244
-
245
- if (child.parent !== null) {
246
- throw new Error(`node already attached to something`);
247
- }
248
-
249
- child.parent = this;
250
-
251
- this.children.push(child);
252
- }
253
-
254
- }
255
-
256
- /**
257
- * Type tag — lets `instanceof`-free callers (e.g. `InstanceBatch.add`)
258
- * accept anything that conforms to the Node3D shape.
259
- *
260
- * @readonly
261
- * @type {boolean}
262
- */
263
- Node3D.prototype.isNode3D = true;
@@ -1,56 +0,0 @@
1
- import { TransformAuthority } from "./TransformAuthority.js";
2
-
3
- /**
4
- * What one {@link Node3D} owns inside a {@link GPUSceneContext}'s scene database: a row in the
5
- * `transforms` table, and — when the node is a {@link Mesh} — a row in the `meshes` table too.
6
- *
7
- * **Rows are stable for the lifetime of the binding.** Removing a node frees its rows and leaves a
8
- * hole rather than compacting the table, because rows are addresses: GPU animation targets a node
9
- * by row index, `meshes.node` points at one, and every `transforms.parent` is one. Compaction would
10
- * silently re-point all of them, so the tables tolerate holes instead and the passes that walk them
11
- * consult occupancy.
12
- */
13
- export class SceneNodeBinding {
14
- /**
15
- * Row in the scene database's `transforms` table.
16
- *
17
- * @type {number}
18
- */
19
- transform_row = 0;
20
-
21
- /**
22
- * Row in the scene database's `meshes` table. Meaningful only for a node that is a mesh —
23
- * `node.isMesh` is what says whether to read it, not this value.
24
- *
25
- * @type {number}
26
- */
27
- mesh_row = -1;
28
-
29
- /**
30
- * The {@link Node3D.version} that the rows above were last written from. A node whose version
31
- * still matches this has not moved since, and costs nothing but the comparison.
32
- *
33
- * @type {number}
34
- */
35
- version = -1;
36
-
37
- /**
38
- * The {@link TransformAuthority} in force when the rows were last written.
39
- *
40
- * Kept because handing a row back to the CPU has to be acted on rather than waited for: while
41
- * the GPU owned the row the node's own version stood still, so nothing would ever mark it as
42
- * needing a write, and the CPU would take over a row it never wrote to.
43
- *
44
- * @type {TransformAuthority}
45
- */
46
- authority = TransformAuthority.CPU;
47
-
48
- /**
49
- * Membership-sweep marker. Set to the current sweep's number every time the node is found in
50
- * the scene; a binding still carrying an older number after a sweep belongs to a node that has
51
- * left, and its rows are freed.
52
- *
53
- * @type {number}
54
- */
55
- epoch = -1;
56
- }
@@ -1,170 +0,0 @@
1
- import { compute_skin_world_bounds } from "../animation/compute_skin_world_bounds.js";
2
- import { Mesh } from "./Mesh.js";
3
-
4
- /**
5
- * @typedef {import("../animation/Skin.js").Skin} Skin
6
- */
7
-
8
- /**
9
- * A mesh whose vertices are deformed each frame by joint transforms.
10
- *
11
- * On the CPU side, a `SkinnedMesh` is just a {@link Mesh} that points at
12
- * the *unmodified* source {@link MeshletGeometry} — the same way every
13
- * other instance of that mesh would. Multiple `SkinnedMesh` instances
14
- * share the source geometry; no per-instance CPU clones happen.
15
- *
16
- * The GPU side makes the deformation possible by allocating a
17
- * per-instance vertex/metadata clone of the source geometry inside the
18
- * existing meshlet buffers (see
19
- * {@link GPUMeshletManager#clone_batch_allocation}). The clone is
20
- * registered as a separate geometry id (see
21
- * {@link GPUGeometryManager#add_clone}); the instance record this mesh
22
- * produces points at the clone, not at the source. Rasterization then
23
- * sees the clone like any other geometry.
24
- *
25
- * Per-frame, a skinning compute pass reads the source's vertex data and
26
- * the joint matrices and writes the deformed result into the clone's
27
- * vertex region — leaving every other instance pointed at the source
28
- * untouched. The skin matrices are computed per the glTF spec formula
29
- * `inverse(meshNode.worldMatrix) × jointNode.worldMatrix ×
30
- * inverseBindMatrix`, and the rasterizer re-applies
31
- * `mesh.transform_global` to the result — so the mesh node's own
32
- * transform cancels out of the rendered position exactly, which is what
33
- * the glTF spec asks for. The leftmost factor is taken live from the
34
- * mesh's own transforms row inside {@link shader_meshlet_apply_skinning};
35
- * see {@link chunk_skin_blend_mesh_local} for why it goes into each
36
- * matrix rather than onto the blended position.
37
- *
38
- * **`transform_global` on a skinned mesh is the engine's, not the
39
- * asset's.** It cancels out of the rendered position, so glTF declares
40
- * it meaningless — and the one meaning it does have is the frame the
41
- * clone's vertices are written in, which the fold above requires to be
42
- * rigid against the skin. {@link GPUAnimationManager#register_skin}
43
- * therefore overwrites it, by way of
44
- * {@link skin_normalize_mesh_frame}, with the skin's own bind
45
- * transform. Whatever the file put there is discarded, and anything
46
- * reading this expecting the file's value is reading the wrong thing.
47
- * See `renderer/animation/SKINNING_FRAME_PLAN.md`.
48
- *
49
- * The mesh's **skin id** — a row in a GPU table — lives in
50
- * {@link GPUMeshSkinningContext} and nowhere else. The CPU-side
51
- * {@link Skin} it was registered with is a different thing, pure data
52
- * that knows nothing about the GPU, and this mesh holds a reference to
53
- * it in {@link skin} so its bounds can be worked out without asking the
54
- * GPU anything. Bind the mesh to a skin via
55
- * `gpu_scene.skinning.bind(mesh, skin_id)`, or rely on
56
- * {@link GPUAnimationManager#register_skin} to do it for every entry
57
- * in `Skin.meshes` — which is also what populates {@link skin}. Until
58
- * bound, the clone routes through the rendering path but its vertices
59
- * stay at the source's bind-pose values — useful as an intermediate
60
- * verification state, and the state in which this mesh bounds itself
61
- * exactly like a regular {@link Mesh}.
62
- *
63
- * A note on which bounds to believe. {@link Mesh#bounding_box} here is
64
- * derived from whatever pose the *CPU* can see, and for a character
65
- * animated by the pose accumulator that is the rest pose — the joints
66
- * are {@link TransformAuthority.GPU} and their `transform_global` is
67
- * never advanced. It is the right size and in the right place, and it
68
- * is what seeds the scene database's `meshes` row. The deformed world
69
- * box, refreshed every frame from the vertices the skinning pass just
70
- * moved, is that row — read it from there when the silhouette is what
71
- * matters.
72
- */
73
- export class SkinnedMesh extends Mesh {
74
-
75
- /**
76
- * The skin whose formula places this mesh's vertices, or `null` while none does.
77
- *
78
- * Not "is the deformation running" — {@link GPUMeshSkinningContext#unbind} can stop the
79
- * skinning pass without this changing, and a mesh whose pass has stopped still holds vertices
80
- * the skin put there. So {@link GPUAnimationManager#register_skin} writes it and nothing
81
- * clears it: once a skin has taken a mesh over, its formula stays the right basis for
82
- * {@link updateBoundsBasic} whether or not a pass runs this frame. Clear it by hand to hand
83
- * the mesh back to {@link Mesh}'s composition.
84
- *
85
- * CPU data throughout (see {@link Skin}). The GPU-side skin *id* is a table row and lives in
86
- * {@link GPUMeshSkinningContext}; this does not expose it.
87
- *
88
- * Nothing refreshes derived state on assignment — set this and the bounds go on describing
89
- * the previous basis until {@link updateMatrices} or {@link updateBoundsBasic} runs.
90
- *
91
- * A clone shares the reference, exactly as {@link Skin#copy} shares its joint and mesh
92
- * references: retargeting a cloned character means replacing this alongside the skin's own
93
- * arrays, which {@link instantiate_scene_bundle} gets for free by re-registering the
94
- * corresponded skin.
95
- *
96
- * @type {Skin|null}
97
- */
98
- skin = null;
99
-
100
- /**
101
- * @returns {SkinnedMesh}
102
- */
103
- clone() {
104
- const r = new SkinnedMesh();
105
- r.copy(this);
106
- return r;
107
- }
108
-
109
- /**
110
- * @param {SkinnedMesh} other
111
- */
112
- copy(other) {
113
-
114
- if (this === other) {
115
- // special case
116
- return;
117
- }
118
-
119
- super.copy(other);
120
-
121
- this.skin = other.skin;
122
- }
123
-
124
- /**
125
- * World bounds of the deformed mesh, in whatever pose {@link skin}'s joints currently hold.
126
- *
127
- * `Mesh`'s version puts the rest-pose geometry under `transform_global`, and for a skinned mesh
128
- * that is the wrong composition rather than an imprecise one: the renderer *cancels*
129
- * `transform_global` out of a skinned vertex's position (see the class docs), so applying it to
130
- * the bounds applies a transform the vertices never see. On a glTF character whose root node
131
- * carries the file's centimetre→metre scale — the shape every FBX-derived asset has, with
132
- * vertex positions in metres and inverse-bind matrices in centimetres — the result is a box
133
- * 100× too small, small enough that frustum culling and TLAS extraction see a point where a
134
- * character stands.
135
- *
136
- * So a bound mesh goes through {@link compute_skin_world_bounds}, which composes the bound the
137
- * same way the renderer composes the vertex. An unbound one keeps `Mesh`'s composition, because
138
- * an unbound clone really is drawn as `transform_global × source vertices`. A skin with no
139
- * joints deforms nothing and is treated the same way.
140
- *
141
- * **Reads the skeleton, so call it when the skeleton is settled.** The joints are outside this
142
- * mesh's own subtree — a glTF character's joint root is the mesh node's sibling — and
143
- * {@link Node3D#updateMatrices} walks pre-order, so the inherited call this gets mid-walk can
144
- * read joints that have not been visited yet and land the mesh where the character was before
145
- * the move. That is why {@link GPUSceneContext} re-derives it on the way to writing the
146
- * `meshes` row, which is where the value is actually consumed and where every walk is over.
147
- */
148
- updateBoundsBasic() {
149
- const skin = this.skin;
150
-
151
- if (skin === null || skin.joints.length === 0) {
152
- super.updateBoundsBasic();
153
- return;
154
- }
155
-
156
- const geometry = this.geometry;
157
-
158
- compute_skin_world_bounds(
159
- skin,
160
- geometry.bounding_box, geometry.bounding_sphere,
161
- this.bounding_box, this.bounding_sphere
162
- );
163
- }
164
- }
165
-
166
- /**
167
- * @readonly
168
- * @type {boolean}
169
- */
170
- SkinnedMesh.prototype.isSkinnedMesh = true;
@@ -1,33 +0,0 @@
1
- /**
2
- * Who writes a node's `local_translation` / `local_rotation` / `local_scale` in the scene
3
- * database's `transforms` table.
4
- *
5
- * Both sides can reach those fields — the CPU through {@link GPUSceneContext}, the GPU through the
6
- * pose accumulator's resolve pass — and neither can tell that the other wrote. Without a stated
7
- * owner the two race, and the race is not hypothetical: {@link Node3D.updateMatrices} recurses into
8
- * children, so moving a character's root marks every joint under it as changed, and the CPU would
9
- * push its own idea of each joint's pose over whatever the animation had just resolved.
10
- *
11
- * `global` and `prev_global` are not covered by this — they are GPU-derived for every node, whoever
12
- * owns the TRS they are composed from.
13
- *
14
- * @enum {number}
15
- */
16
- export const TransformAuthority = {
17
- /**
18
- * The CPU owns the TRS. Its scene-graph node is the truth, and changes to it are pushed to the
19
- * row as they happen. This is the default, and it is what entity placement wants.
20
- */
21
- CPU: 0,
22
-
23
- /**
24
- * The GPU owns the TRS — animation clips, effects, anything writing through the pose
25
- * accumulator. The CPU allocates and seeds the row, then never writes to it again, so the
26
- * node's own `transform_local` stops describing it and should not be read as if it did.
27
- *
28
- * A node under GPU authority still follows a CPU-driven parent: the hierarchy pass composes
29
- * `global` from this node's TRS and the parent chain, so the parent moving carries the child
30
- * without anyone writing to the child's row.
31
- */
32
- GPU: 1,
33
- };