@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
@@ -9,19 +9,28 @@
9
9
  * frame to force such content down the static path is explicitly not the answer.
10
10
  *
11
11
  * So a `DynamicMesh` holds a plain {@link Geometry}: attribute arrays and an index, uploaded as
12
- * they are and drawn by a pass of their own. It is not part of the scene's instance batch and gets
13
- * no row in the scene database — the meshlet pipeline never sees it.
12
+ * they are and drawn by a pass of their own. It is not part of the scene's instance batch, gets
13
+ * no row in the scene database — the meshlet pipeline never sees it — and is a node of nothing:
14
+ * the world transform the draw applies is its own {@link transform}, with nothing above it.
14
15
  *
15
16
  * Its geometry says when it has changed through {@link Geometry.needsUpdate}; nothing watches the
16
17
  * arrays.
17
18
  */
18
- export class DynamicMesh extends Node3D {
19
+ export class DynamicMesh {
19
20
  /**
20
21
  * @param {Geometry} geometry
21
22
  * @param {Float32Array|number[]} [color]
22
23
  * @returns {DynamicMesh}
23
24
  */
24
25
  static from(geometry: Geometry, color?: Float32Array | number[]): DynamicMesh;
26
+ /**
27
+ * World transform the draw applies to the vertices. Identity until moved — and the systems
28
+ * that write world-space vertices never move it. What the draw binds is its matrix, so a mover
29
+ * calls `updateMatrix()` after a rotation or scale change, as with any `Transform64`.
30
+ *
31
+ * @type {Transform64}
32
+ */
33
+ transform: Transform64;
25
34
  /**
26
35
  * Vertex data, drawn as it stands. Must carry a position attribute and an index.
27
36
  *
@@ -49,5 +58,5 @@ export class DynamicMesh extends Node3D {
49
58
  */
50
59
  readonly isDynamicMesh: boolean;
51
60
  }
52
- import { Node3D } from "./Node3D.js";
61
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
53
62
  //# sourceMappingURL=DynamicMesh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/DynamicMesh.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH;IAyBI;;;;OAIG;IACH,wCAHW,YAAY,GAAC,MAAM,EAAE,GACnB,WAAW,CAcvB;IAzCD;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,OAFU,YAAY,CAEiB;IAEvC;;;;;;OAMG;IACH,SAFU,OAAO,CAEF;IAsBnB;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;uBA9DsB,aAAa"}
1
+ {"version":3,"file":"DynamicMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/DynamicMesh.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAkCI;;;;OAIG;IACH,wCAHW,YAAY,GAAC,MAAM,EAAE,GACnB,WAAW,CAcvB;IAlDD;;;;;;OAMG;IACH,WAFU,WAAW,CAES;IAE9B;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,OAFU,YAAY,CAEiB;IAEvC;;;;;;OAMG;IACH,SAFU,OAAO,CAEF;IAsBnB;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;4BAxE2B,8CAA8C"}
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../core/assert.js";
2
- import { Node3D } from "./Node3D.js";
2
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
3
3
 
4
4
  /**
5
5
  * A mesh whose vertices are expected to change, drawn straight from its attributes.
@@ -12,13 +12,23 @@ import { Node3D } from "./Node3D.js";
12
12
  * frame to force such content down the static path is explicitly not the answer.
13
13
  *
14
14
  * So a `DynamicMesh` holds a plain {@link Geometry}: attribute arrays and an index, uploaded as
15
- * they are and drawn by a pass of their own. It is not part of the scene's instance batch and gets
16
- * no row in the scene database — the meshlet pipeline never sees it.
15
+ * they are and drawn by a pass of their own. It is not part of the scene's instance batch, gets
16
+ * no row in the scene database — the meshlet pipeline never sees it — and is a node of nothing:
17
+ * the world transform the draw applies is its own {@link transform}, with nothing above it.
17
18
  *
18
19
  * Its geometry says when it has changed through {@link Geometry.needsUpdate}; nothing watches the
19
20
  * arrays.
20
21
  */
21
- export class DynamicMesh extends Node3D {
22
+ export class DynamicMesh {
23
+ /**
24
+ * World transform the draw applies to the vertices. Identity until moved — and the systems
25
+ * that write world-space vertices never move it. What the draw binds is its matrix, so a mover
26
+ * calls `updateMatrix()` after a rotation or scale change, as with any `Transform64`.
27
+ *
28
+ * @type {Transform64}
29
+ */
30
+ transform = new Transform64();
31
+
22
32
  /**
23
33
  * Vertex data, drawn as it stands. Must carry a position attribute and an index.
24
34
  *
@@ -7,13 +7,6 @@ export class GPUInstancesAccelerationStructure {
7
7
  * @param {GraphicsContext} graphics
8
8
  */
9
9
  constructor(graphics: GraphicsContext);
10
- /**
11
- * The CPU-side tree. Still maintained incrementally by the `instance_*` methods and still walked
12
- * by CPU queries — {@link DirectionalLightShadowmap} runs `compute_tight_near_far_clipping_planes`
13
- * against it per cascade per frame. What the GPU build retires is the per-frame treelet pass and
14
- * the full flatten-and-upload, not the tree.
15
- */
16
- get bvh(): BVH;
17
10
  clear(): void;
18
11
  /**
19
12
  *
@@ -21,36 +14,63 @@ export class GPUInstancesAccelerationStructure {
21
14
  */
22
15
  get buffer(): GPUBuffer;
23
16
  /**
17
+ * A `meshes` row has come into the scene.
24
18
  *
25
19
  * @param {number} index
26
- * @param {Mesh} instance
27
20
  */
28
- instance_add(index: number, instance: Mesh): void;
21
+ instance_add(index: number): void;
29
22
  /**
30
- * Drop an instance previously handed to {@link instance_add}. The leaf is unlinked and its node
31
- * returned to the pool, so the tree stays proportional to what is in the scene rather than to
32
- * everything that ever was.
23
+ * Drop a row previously handed to {@link instance_add}, so the tree stays proportional to what
24
+ * is in the scene rather than to everything that ever was.
33
25
  *
34
26
  * @param {number} index
35
27
  */
36
28
  instance_remove(index: number): void;
37
29
  /**
30
+ * A row's bounds moved: the next {@link update} rebuilds.
38
31
  *
39
32
  * @param {number} index
40
- * @param {Mesh} instance
41
33
  */
42
- instance_update(index: number, instance: Mesh): void;
34
+ instance_update(index: number): void;
35
+ /**
36
+ * Build the tree, from the world AABBs the scene database holds.
37
+ *
38
+ * @param {GPUBuffer} scene_database_buffer
39
+ */
40
+ /**
41
+ * Something moved on the GPU that this tree is built over — bounds the CPU never saw change.
42
+ * The next {@link update} rebuilds.
43
+ */
44
+ invalidate(): void;
45
+ /**
46
+ * The bounds of everything in the tree, read back from its root node: the box the GPU built
47
+ * the tree under, the union of every live row's bounds as the bounds pass derived them — the
48
+ * whole scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
49
+ * placement or a bake; a frame-loop reader wants the scene database's readback service.
50
+ *
51
+ * Resolves once the copy has landed and been mapped, which is after the device has finished
52
+ * whatever build was submitted before this call — so build first, ask after. Resolves `false`
53
+ * for an empty tree, leaving `target` alone.
54
+ *
55
+ * @param {Float32Array|Float64Array|number[]} target six numbers, `x0,y0,z0,x1,y1,z1`
56
+ * @returns {Promise<boolean>}
57
+ */
58
+ read_scene_bounds(target: Float32Array | Float64Array | number[]): Promise<boolean>;
43
59
  /**
44
60
  * @param {GPUBuffer} scene_database_buffer the table the world AABBs are read from
61
+ * @param {ShadeGPUCommandContext} [cmd_ctx]
45
62
  */
46
- push_to_gpu(scene_database_buffer: GPUBuffer): void;
63
+ push_to_gpu(scene_database_buffer: GPUBuffer, cmd_ctx?: ShadeGPUCommandContext): void;
47
64
  /**
65
+ * Rebuild if anything moved since the last build.
66
+ *
48
67
  * @param {GPUBuffer} scene_database_buffer
68
+ * @param {ShadeGPUCommandContext} [cmd_ctx] encode into this context rather than submitting
69
+ * on its own — what a frame does, so the build follows the bounds pass it reads
49
70
  */
50
- update(scene_database_buffer: GPUBuffer): void;
71
+ update(scene_database_buffer: GPUBuffer, cmd_ctx?: ShadeGPUCommandContext): void;
51
72
  #private;
52
73
  }
53
74
  export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
54
- export type Mesh = import("./Mesh.js").Mesh;
55
- import { BVH } from "../../../core/bvh2/bvh3/BVH.js";
75
+ import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
56
76
  //# sourceMappingURL=GPUInstancesAccelerationStructure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAoCA;;GAEG;AACH;IA2EI;;;OAGG;IACH,sBAFW,eAAe,EAgBzB;IA/ED;;;;;OAKG;IACH,eAEC;IAED,cAKC;IAOD;;;OAGG;IACH,wBAEC;IA2DD;;;;OAIG;IACH,oBAHW,MAAM,YACN,IAAI,QAkBd;IAED;;;;;;OAMG;IACH,uBAFW,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,YACN,IAAI,QAWd;IAuID;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,+CAMC;;CACJ;8BAzVY,OAAO,uBAAuB,EAAE,eAAe;mBAC/C,OAAO,WAAW,EAAE,IAAI;oBAXjB,gCAAgC"}
1
+ {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAmCA;;GAEG;AACH;IA8DI;;;OAGG;IACH,sBAFW,eAAe,EAqBzB;IAzED,cAIC;IAOD;;;OAGG;IACH,wBAEC;IAmED;;;;OAIG;IACH,oBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,uBAFW,MAAM,QAOhB;IA8CD;;;;OAIG;IACH;;;OAGG;IACH,mBAEC;IAiGD;;;;;;;;;;;;OAYG;IACH,0BAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,QAAQ,OAAO,CAAC,CA0C5B;IAED;;;OAGG;IACH,wDAFW,sBAAsB,QAMhC;IAED;;;;;;OAMG;IACH,mDAHW,sBAAsB,QAShC;;CACJ;8BA7YY,OAAO,uBAAuB,EAAE,eAAe;uCARrB,wCAAwC"}
@@ -1,16 +1,15 @@
1
1
  import { assert } from "../../../core/assert.js";
2
- import { BVH } from "../../../core/bvh2/bvh3/BVH.js";
3
2
  import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
4
3
  import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
5
4
  import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
6
5
  import { ensure_buffer_capacity } from "../geometry/make_temp_gpu_buffer.js";
7
- import { bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
6
+ import { BVH_HEADER_WORDS, BVH_NODE_STRIDE_WORDS, bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
7
+ import { BVH_NULL_NODE, bvh_tree_views, read_bvh_node } from "../gpu_primitive/bvh/check_bvh_structure.js";
8
8
  import { graph_bvh_build_lbvh } from "../gpu_primitive/bvh/graph_bvh_build_lbvh.js";
9
9
  import { shader_bvh_extract_instance_leaves } from "./shader_bvh_extract_instance_leaves.js";
10
10
 
11
11
  /**
12
12
  * @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
13
- * @typedef {import("./Mesh.js").Mesh} Mesh
14
13
  */
15
14
 
16
15
  /**
@@ -49,21 +48,8 @@ export class GPUInstancesAccelerationStructure {
49
48
  */
50
49
  #device
51
50
 
52
- #bvh = new BVH();
53
-
54
- /**
55
- * The CPU-side tree. Still maintained incrementally by the `instance_*` methods and still walked
56
- * by CPU queries — {@link DirectionalLightShadowmap} runs `compute_tight_near_far_clipping_planes`
57
- * against it per cascade per frame. What the GPU build retires is the per-frame treelet pass and
58
- * the full flatten-and-upload, not the tree.
59
- */
60
- get bvh() {
61
- return this.#bvh;
62
- }
63
-
64
51
  clear() {
65
- this.#bvh.release_all();
66
- this.#node_mapping.clear();
52
+ this.#live.clear();
67
53
  this.#membership_version++;
68
54
  this.#version++;
69
55
  }
@@ -101,7 +87,7 @@ export class GPUInstancesAccelerationStructure {
101
87
 
102
88
  /**
103
89
  * Compact mirror of the live `meshes` rows, in insertion order. Rebuilt from
104
- * {@link #node_mapping} when membership churns.
90
+ * {@link #live} when membership churns.
105
91
  *
106
92
  * @type {Uint32Array}
107
93
  */
@@ -130,74 +116,61 @@ export class GPUInstancesAccelerationStructure {
130
116
  size: 1024,
131
117
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
132
118
  });
119
+
120
+ // A fresh buffer holds zeroes, and zero is a root word naming node 0 — a tree that was never
121
+ // built would read as one with a root of zero bounds. Empty, until the first build says
122
+ // otherwise.
123
+ device.queue.writeBuffer(this.#buffer, 0, EMPTY_TREE);
133
124
  }
134
125
 
135
126
  /**
127
+ * The live `meshes` rows, in insertion order — what the build extracts leaves from. There is
128
+ * no tree on this side: the tree is the GPU's, built from the bounds the GPU holds, and every
129
+ * query walks it there.
136
130
  *
137
- * @type {Map<number, number>}
131
+ * @type {Set<number>}
138
132
  */
139
- #node_mapping = new Map();
133
+ #live = new Set();
140
134
 
141
135
  /**
136
+ * A `meshes` row has come into the scene.
142
137
  *
143
138
  * @param {number} index
144
- * @param {Mesh} instance
145
139
  */
146
- instance_add(index, instance) {
140
+ instance_add(index) {
147
141
  assert.isNonNegativeInteger(index, 'index');
148
- assert.defined(instance, 'instance');
149
-
150
- const bvh = this.#bvh;
142
+ assert.equal(this.#live.has(index), false, 'the row is already in the TLAS');
151
143
 
152
- const node = bvh.allocate_node();
153
- bvh.node_set_user_data(node, index);
154
- bvh.node_set_aabb(node, instance.bounding_box);
155
-
156
- bvh.insert_leaf(node);
157
-
158
- this.#node_mapping.set(index, node);
144
+ this.#live.add(index);
159
145
 
160
146
  this.#membership_version++;
161
147
  this.#version++;
162
148
  }
163
149
 
164
150
  /**
165
- * Drop an instance previously handed to {@link instance_add}. The leaf is unlinked and its node
166
- * returned to the pool, so the tree stays proportional to what is in the scene rather than to
167
- * everything that ever was.
151
+ * Drop a row previously handed to {@link instance_add}, so the tree stays proportional to what
152
+ * is in the scene rather than to everything that ever was.
168
153
  *
169
154
  * @param {number} index
170
155
  */
171
156
  instance_remove(index) {
172
157
  assert.isNonNegativeInteger(index, 'index');
158
+ assert.equal(this.#live.has(index), true, 'the row is not in the TLAS');
173
159
 
174
- const node = this.#node_mapping.get(index);
175
-
176
- assert.defined(node, 'node');
177
-
178
- const bvh = this.#bvh;
179
-
180
- bvh.remove_leaf(node);
181
- bvh.release_node(node);
182
-
183
- this.#node_mapping.delete(index);
160
+ this.#live.delete(index);
184
161
 
185
162
  this.#membership_version++;
186
163
  this.#version++;
187
164
  }
188
165
 
189
166
  /**
167
+ * A row's bounds moved: the next {@link update} rebuilds.
190
168
  *
191
169
  * @param {number} index
192
- * @param {Mesh} instance
193
170
  */
194
- instance_update(index, instance) {
171
+ instance_update(index) {
195
172
  assert.isNonNegativeInteger(index, 'index');
196
- assert.defined(instance, 'instance');
197
-
198
- const node = this.#node_mapping.get(index);
199
-
200
- this.#bvh.node_move_aabb(node, instance.bounding_box);
173
+ assert.equal(this.#live.has(index), true, 'the row is not in the TLAS');
201
174
 
202
175
  this.#version++;
203
176
  }
@@ -208,7 +181,7 @@ export class GPUInstancesAccelerationStructure {
208
181
  * @returns {number} number of live rows
209
182
  */
210
183
  #refresh_rows() {
211
- const count = this.#node_mapping.size;
184
+ const count = this.#live.size;
212
185
 
213
186
  if (this.#rows_gpu_version === this.#membership_version && this.#rows.length >= count) {
214
187
  return count;
@@ -219,7 +192,7 @@ export class GPUInstancesAccelerationStructure {
219
192
  }
220
193
 
221
194
  let i = 0;
222
- for (const row of this.#node_mapping.keys()) {
195
+ for (const row of this.#live) {
223
196
  this.#rows[i] = row;
224
197
  i++;
225
198
  }
@@ -251,12 +224,25 @@ export class GPUInstancesAccelerationStructure {
251
224
  *
252
225
  * @param {GPUBuffer} scene_database_buffer
253
226
  */
254
- #build(scene_database_buffer) {
227
+ /**
228
+ * Something moved on the GPU that this tree is built over — bounds the CPU never saw change.
229
+ * The next {@link update} rebuilds.
230
+ */
231
+ invalidate() {
232
+ this.#version++;
233
+ }
234
+
235
+ /**
236
+ * @param {GPUBuffer} scene_database_buffer
237
+ * @param {ShadeGPUCommandContext} [cmd_ctx] a context to encode the build into; when absent
238
+ * the build is submitted on its own, ahead of anything not yet submitted
239
+ */
240
+ #build(scene_database_buffer, cmd_ctx) {
255
241
  assert.defined(scene_database_buffer, 'scene_database_buffer');
256
242
 
257
243
  const device = this.#device;
258
244
 
259
- const element_count = this.#node_mapping.size;
245
+ const element_count = this.#live.size;
260
246
 
261
247
  // `ensure_buffer_capacity` can hand back a NEW buffer and destroy the old one. Consumers are
262
248
  // safe because they read `tlas.buffer` per frame at pass-execute time — but the field has to
@@ -329,30 +315,96 @@ export class GPUInstancesAccelerationStructure {
329
315
  nodes,
330
316
  });
331
317
 
318
+ if (cmd_ctx !== undefined) {
319
+ cmd_ctx.encodeGraph(graph);
320
+
321
+ return;
322
+ }
323
+
332
324
  const cmd = ShadeGPUCommandContext.create(this.#graphics, 'TLAS/build');
333
325
 
334
326
  cmd.encodeGraph(graph);
335
327
  cmd.finish();
336
328
  }
337
329
 
330
+ /**
331
+ * The bounds of everything in the tree, read back from its root node: the box the GPU built
332
+ * the tree under, the union of every live row's bounds as the bounds pass derived them — the
333
+ * whole scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
334
+ * placement or a bake; a frame-loop reader wants the scene database's readback service.
335
+ *
336
+ * Resolves once the copy has landed and been mapped, which is after the device has finished
337
+ * whatever build was submitted before this call — so build first, ask after. Resolves `false`
338
+ * for an empty tree, leaving `target` alone.
339
+ *
340
+ * @param {Float32Array|Float64Array|number[]} target six numbers, `x0,y0,z0,x1,y1,z1`
341
+ * @returns {Promise<boolean>}
342
+ */
343
+ async read_scene_bounds(target) {
344
+ assert.isArrayLike(target, 'target');
345
+ assert.greaterThanOrEqual(target.length, 6, 'target.length < 6');
346
+
347
+ // the root word and node 0 — the root by the builder's construction
348
+ const byte_size = (BVH_HEADER_WORDS + BVH_NODE_STRIDE_WORDS) * Uint32Array.BYTES_PER_ELEMENT;
349
+
350
+ const allocator = this.#graphics.buffer_allocator_readback;
351
+ const staging = allocator.get(byte_size);
352
+
353
+ const cmd = ShadeGPUCommandContext.create(this.#graphics, 'TLAS/read scene bounds');
354
+
355
+ cmd.copyBufferToBuffer(this.#buffer, 0, staging, 0, byte_size);
356
+ cmd.finish();
357
+
358
+ await staging.mapAsync(GPUMapMode.READ, 0, byte_size);
359
+
360
+ const { words, floats } = bvh_tree_views(new Uint32Array(staging.getMappedRange(0, byte_size)));
361
+ const root = words[0];
362
+
363
+ let found = false;
364
+
365
+ if (root !== BVH_NULL_NODE) {
366
+ assert.equal(root, 0, 'the tree\'s root is not node 0');
367
+
368
+ const node = read_bvh_node(words, floats, root);
369
+
370
+ target[0] = node.low[0];
371
+ target[1] = node.low[1];
372
+ target[2] = node.low[2];
373
+ target[3] = node.high[0];
374
+ target[4] = node.high[1];
375
+ target[5] = node.high[2];
376
+
377
+ found = true;
378
+ }
379
+
380
+ allocator.release(staging);
381
+
382
+ return found;
383
+ }
384
+
338
385
  /**
339
386
  * @param {GPUBuffer} scene_database_buffer the table the world AABBs are read from
387
+ * @param {ShadeGPUCommandContext} [cmd_ctx]
340
388
  */
341
- push_to_gpu(scene_database_buffer) {
342
- this.#build(scene_database_buffer);
389
+ push_to_gpu(scene_database_buffer, cmd_ctx) {
390
+ this.#build(scene_database_buffer, cmd_ctx);
343
391
 
344
392
  this.#gpu_version = this.#version;
345
393
  }
346
394
 
347
395
  /**
396
+ * Rebuild if anything moved since the last build.
397
+ *
348
398
  * @param {GPUBuffer} scene_database_buffer
399
+ * @param {ShadeGPUCommandContext} [cmd_ctx] encode into this context rather than submitting
400
+ * on its own — what a frame does, so the build follows the bounds pass it reads
349
401
  */
350
- update(scene_database_buffer) {
402
+ update(scene_database_buffer, cmd_ctx) {
351
403
  if (this.#gpu_version === this.#version) {
352
404
  return;
353
405
  }
354
406
 
355
- this.push_to_gpu(scene_database_buffer);
407
+ this.push_to_gpu(scene_database_buffer, cmd_ctx);
356
408
  }
357
409
  }
358
410
 
@@ -1,5 +1,12 @@
1
1
  /**
2
- * Abstraction on the context of a scene, there are no hierarchies, just a collection of meshes and a geometry context
2
+ * The GPU side of one {@link Scene}: its database — the `transforms` and `meshes` tables, one row
3
+ * per entity that is drawn or posed, at `entity + 1` — and what is built over that database each
4
+ * frame: the lights' records, the probe volume, the volumetrics, the animation, the TLAS.
5
+ *
6
+ * Nothing here holds a hierarchy of its own. An entity's row names its parent's row and the GPU
7
+ * composes the chain each frame, derives every mesh row's bounds under the composed matrix and
8
+ * builds the tree over them — see {@link tick}. What the CPU writes is what it owns: an entity's
9
+ * local TRS and the row of its parent, through {@link rows}.
3
10
  */
4
11
  export class GPUSceneContext {
5
12
  /**
@@ -46,22 +53,6 @@ export class GPUSceneContext {
46
53
  * @returns {GPUInstancesAccelerationStructure}
47
54
  */
48
55
  get tlas(): GPUInstancesAccelerationStructure;
49
- /**
50
- * Mesh → instance index. Rebuilt each frame in {@link build}. The
51
- * Lookup from a node's stable JS-side {@link Node3D.id} to its row
52
- * in the scene database's `transforms` table. Built during
53
- * {@link build} as each node is allocated via
54
- * {@link GPUTypedTable.add}; the table itself owns the row
55
- * allocation, this map just bridges between Node3D handles and the
56
- * GPU rows they live at.
57
- *
58
- * Public so external code can do partial updates: looking up a
59
- * single node's row lets a system patch one `transforms_table`
60
- * entry instead of re-uploading the whole scene.
61
- *
62
- * @type {Map<number, number>}
63
- */
64
- id_mapping: Map<number, number>;
65
56
  /**
66
57
  * @returns {GPUAnimationManager}
67
58
  */
@@ -79,10 +70,9 @@ export class GPUSceneContext {
79
70
  */
80
71
  get scene_database_buffer(): GPUBuffer;
81
72
  /**
82
- * Per-scene skinning subsystem. Routes {@link SkinnedMesh}
83
- * instances through per-instance geometry clones; later phases
84
- * grow Skin-binding management and the per-frame skinning compute
85
- * onto it.
73
+ * Per-scene skinning subsystem. Routes skinned rows through
74
+ * per-instance geometry clones; later phases grow Skin-binding
75
+ * management and the per-frame skinning compute onto it.
86
76
  *
87
77
  * Lazy because it depends on {@link geometries}, which is assigned
88
78
  * externally after this object's constructor returns
@@ -94,32 +84,37 @@ export class GPUSceneContext {
94
84
  get skinning(): GPUMeshSkinningContext;
95
85
  get gpu_memory_usage(): number;
96
86
  /**
97
- * Which row of the `meshes` table a node occupies — **the value the visibility buffer writes
98
- * for every pixel that node covers**, which is what makes it worth reading from outside.
87
+ * Entities as rows of the scene database, at `entity + 1` in both tables.
99
88
  *
100
- * `id_mapping` is not this. That map goes from a node's id to its row in the `transforms`
101
- * table, which is a different table with different rows; a caller that used it to index the
102
- * visibility buffer would be reading somebody else's mesh.
89
+ * A system that places an entity acquires its row here and marks it on the dataset's change
90
+ * events; a scene with no systems places through `prefab_place` and `place_primitive`, which
91
+ * do the same by hand; and {@link build} flushes what was marked. The scene has to name its
92
+ * dataset ({@link Scene.dataset}) before this is first asked for, because the rows are written
93
+ * from that dataset's components.
103
94
  *
104
- * @param {Node3D} node
105
- * @returns {number} the row, or `-1` for a node that is not in this scene or carries no geometry
95
+ * @returns {GPUSceneRows}
106
96
  */
107
- mesh_row_of(node: Node3D): number;
97
+ get rows(): GPUSceneRows;
108
98
  /**
109
- * Bumped every time the `meshes` table gains or loses a row. **Rows are reused** — the table
110
- * hands out the lowest free one — so a row read through {@link mesh_row_of} and kept is only
111
- * valid while this number is unchanged. Anything holding one compares against its own copy and
112
- * re-reads when they differ.
99
+ * An entity's world bounds as the GPU holds them, read back — what a consumer that wants the
100
+ * box that is drawn asks, a frame or two behind the device. Built on demand, over the rows.
113
101
  *
114
- * @returns {number}
102
+ * @returns {GPUEntityBoundsReadback}
115
103
  */
116
- get mesh_rows_version(): number;
104
+ get bounds(): GPUEntityBoundsReadback;
117
105
  /**
118
- * Bring the GPU scene database in line with the scene, writing only the rows that changed.
106
+ * Every material something in the scene draws with, each once — the rows' own list, kept
107
+ * current as meshes attach and detach. What the rasterizers iterate to decide which buckets
108
+ * and pipelines a frame needs. The array is reused until the set changes; a scene with no
109
+ * rows draws with nothing.
119
110
  *
120
- * Membership is reconciled when the batch says it moved; transforms are checked every frame,
121
- * because a node moving does not touch the batch. Both walk the scene once and write nothing
122
- * for a node that has not changed.
111
+ * @returns {ShadeMaterial[]}
112
+ */
113
+ get drawn_materials(): import("../material/ShadeMaterial.js").ShadeMaterial[];
114
+ /**
115
+ * Bring the GPU scene database in line with the scene, writing only the rows that changed:
116
+ * the scene root's, once; a light's, as it arrives; and every entity's row that a system
117
+ * marked since the last build. Nothing is walked — the rows keep what was marked.
123
118
  */
124
119
  build(): void;
125
120
  /**
@@ -128,15 +123,24 @@ export class GPUSceneContext {
128
123
  */
129
124
  update(ctx: GraphicsContext): void;
130
125
  /**
131
- * Per-frame animation tick — drains pending registrations,
132
- * advances `clip.time` on the GPU, runs apply → resolve →
133
- * hierarchy propagate → skin-matrix prep → skinning. Thin
134
- * passthrough to {@link GPUAnimationManager#tick}; lives here
135
- * so the renderer can call it on every scene it renders without
136
- * reaching past `GPUSceneContext` for an internal manager.
126
+ * Per-frame GPU-side scene update, once per scene per frame, after every view's {@link update}
127
+ * has flushed what the CPU changed:
128
+ *
129
+ * 1. the animation tick — pending registrations drained, `clip.time` advanced, apply → resolve
130
+ * → hierarchy propagate → skin-matrix prep → skinning, through {@link GPUAnimationManager#tick};
131
+ * 2. render bounds — every mesh row's world box and sphere, derived from its geometry under
132
+ * the `global` the hierarchy pass just composed, because the CPU does not hold that matrix
133
+ * for a subtree the GPU drives;
134
+ * 3. light poses — every light record's position and direction, from its entity's row, for
135
+ * the same reason;
136
+ * 4. the TLAS — rebuilt from those bounds when anything moved, on either side.
137
+ *
138
+ * All four into `cmd_ctx`, in that order, so the tree the frame's ray passes traverse is built
139
+ * over this frame's bounds rather than last frame's, and what lights the frame is where it is
140
+ * this frame.
137
141
  *
138
- * `dt_seconds` is wall-clock seconds since the last call (the
139
- * renderer's `time_delta_seconds` argument to `render()`).
142
+ * `dt_seconds` is wall-clock seconds since the last call (the renderer's `time_delta_seconds`
143
+ * argument to `render()`).
140
144
  *
141
145
  * @param {ShadeGPUCommandContext} cmd_ctx
142
146
  * @param {number} dt_seconds wall-clock seconds since last call
@@ -153,7 +157,8 @@ export class GPUSceneContext {
153
157
  export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
154
158
  export type GPUGeometryManager = import("../geometry/GPUGeometryManager.js").GPUGeometryManager;
155
159
  export type GPUMaterialManager = import("../material/GPUMaterialManager.js").GPUMaterialManager;
156
- export type Node3D = import("./Node3D.js").Node3D;
160
+ export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
161
+ export type GPURecordWriter = import("../buffer/table/serde/generate_record_writer.js").GPURecordWriter;
157
162
  import { Brick4LightMap } from "../global_illumination/brick4/Brick4LightMap.js";
158
163
  import { Scene } from "./Scene.js";
159
164
  import { GPUSceneVolumetrics } from "../volumetrics/GPUSceneVolumetrics.js";
@@ -163,5 +168,7 @@ import { GPUInstancesAccelerationStructure } from "./GPUInstancesAccelerationStr
163
168
  import { GPUAnimationManager } from "../animation/GPUAnimationManager.js";
164
169
  import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
165
170
  import { GPUMeshSkinningContext } from "../animation/skinning/GPUMeshSkinningContext.js";
171
+ import { GPUSceneRows } from "./rows/GPUSceneRows.js";
172
+ import { GPUEntityBoundsReadback } from "./rows/GPUEntityBoundsReadback.js";
166
173
  import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
167
174
  //# sourceMappingURL=GPUSceneContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AAmEA;;GAEG;AACH;IAkJI;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IApLD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IAmBD;;;;;;;;;;;;;;OAcG;IACH,YAFU,IAAI,MAAM,EAAE,MAAM,CAAC,CAEN;IAgEvB;;OAEG;IACH,6CAEC;IAeD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;;OAYG;IACH,uCAUC;IAED,+BAUC;IAkKD;;;;;;;;;;OAUG;IACH,kBAHW,MAAM,GACJ,MAAM,CAMlB;IAED;;;;;;;OAOG;IACH,gCAEC;IAuRD;;;;;;OAMG;IACH,cA4DC;IAED;;;OAGG;IACH,YAFW,eAAe,QAyBzB;IAED;;;;;;;;;;;;;OAaG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAIhB;IAED,gBAQC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BAv4BY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;qBAC9D,OAAO,aAAa,EAAE,MAAM;+BAhBV,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;oCAPtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;uCATjD,wCAAwC"}
1
+ {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AA4DA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IA0FD;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;OAIG;IACH,cAqEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD,gBAYC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BArjBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;oCAPtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}