@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
@@ -12,14 +12,14 @@
12
12
  *
13
13
  * @param {Object.<string, { specType: number, fields: Object }>} specs_by_path
14
14
  * @param {UsdBuildOptions} [options]
15
- * @returns {Node3D[]} Root-level nodes
15
+ * @returns {SceneBundle} the model's nodes, in pre-order; no skins and no clips, which UsdSkel would fill in
16
16
  */
17
17
  export function usd_build_scene(specs_by_path: {
18
18
  [x: string]: {
19
19
  specType: number;
20
20
  fields: any;
21
21
  };
22
- }, options?: UsdBuildOptions): Node3D[];
22
+ }, options?: UsdBuildOptions): SceneBundle;
23
23
  export type UsdBuildOptions = {
24
24
  /**
25
25
  * - Map of relative paths to file data (from USDZ)
@@ -30,5 +30,5 @@ export type UsdBuildOptions = {
30
30
  */
31
31
  extensions?: import("./UsdExtensionRegistry.js").UsdExtensionRegistry;
32
32
  };
33
- import { Node3D } from "../../scene/Node3D.js";
33
+ import { SceneBundle } from "../SceneBundle.js";
34
34
  //# sourceMappingURL=usd_build_scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usd_build_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/usd_build_scene.js"],"names":[],"mappings":"AAkCA;;;;GAIG;AAGH;;;;;;;;;;GAUG;AACH;QAJmB,MAAM,GAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,MAAQ;KAAE;aACpD,eAAe,GACb,MAAM,EAAE,CAqEpB;;;;;iBAnFa,IAAI,MAAM,EAAE,UAAU,CAAC;;;;iBACvB,OAAO,2BAA2B,EAAE,oBAAoB;;uBAR/C,uBAAuB"}
1
+ {"version":3,"file":"usd_build_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/usd_build_scene.js"],"names":[],"mappings":"AAkCA;;;;GAIG;AAGH;;;;;;;;;;GAUG;AACH;QAJmB,MAAM,GAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,MAAQ;KAAE;aACpD,eAAe,GACb,WAAW,CA8DvB;;;;;iBA5Ea,IAAI,MAAM,EAAE,UAAU,CAAC;;;;iBACvB,OAAO,2BAA2B,EAAE,oBAAoB;;4BAV1C,mBAAmB"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Converts the unified `specsByPath` intermediate representation into
3
- * the engine's scene graph (Node3D, Mesh, StandardShadeMaterial).
3
+ * a loader's bundle: nodes in pre-order (SceneNode), materials (StandardShadeMaterial).
4
4
  *
5
5
  * This module is format-agnostic — it consumes the same specsByPath
6
6
  * dictionary regardless of whether the source was USDA, USDC, or USDZ.
@@ -25,9 +25,9 @@ import { StandardAttributes } from "../../geometry/StandardAttributes.js";
25
25
  import { normalize_attribute } from "../../geometry/util/normalize_attribute.js";
26
26
  import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
27
27
  import { StandardShadeMaterial } from "../../material/StandardShadeMaterial.js";
28
+ import { SceneBundle } from "../SceneBundle.js";
29
+ import { SceneNode } from "../SceneNode.js";
28
30
  import { TransparencyMode } from "../../material/TransparencyMode.js";
29
- import { Mesh } from "../../scene/Mesh.js";
30
- import { Node3D } from "../../scene/Node3D.js";
31
31
  import { usd_compose_transform } from "../../../../format/scene/usd/usd_compose_transform.js";
32
32
  import { usd_expand_face_varying, usd_triangulate } from "../../../../format/scene/usd/usd_triangulate.js";
33
33
 
@@ -48,7 +48,7 @@ import { usd_expand_face_varying, usd_triangulate } from "../../../../format/sce
48
48
  *
49
49
  * @param {Object.<string, { specType: number, fields: Object }>} specs_by_path
50
50
  * @param {UsdBuildOptions} [options]
51
- * @returns {Node3D[]} Root-level nodes
51
+ * @returns {SceneBundle} the model's nodes, in pre-order; no skins and no clips, which UsdSkel would fill in
52
52
  */
53
53
  export function usd_build_scene(specs_by_path, options = {}) {
54
54
 
@@ -89,39 +89,32 @@ export function usd_build_scene(specs_by_path, options = {}) {
89
89
 
90
90
  // --- Build prim hierarchy ---
91
91
  const prim_children = root_fields.primChildren || [];
92
- const roots = [];
92
+ const bundle = new SceneBundle();
93
93
 
94
94
  // Check if correction is non-identity
95
95
  const has_correction = up_axis === "Z" || meters_per_unit !== 1.0;
96
96
 
97
97
  for (const child_name of prim_children) {
98
98
  const child_path = "/" + child_name;
99
- const node = build_prim(child_path, specs_by_path, materials, correction, options, registry);
100
-
101
- if (node !== null) {
102
- // Bake correction into root nodes' local transforms so that
103
- // updateMatrices() propagates it correctly to global transforms
104
- if (has_correction) {
105
- const corrected = m4_allocate();
106
- m4_multiply(corrected, correction, node.transform_local.matrix);
107
- node.transform_local.fromMatrix(corrected);
108
- }
99
+ const index = build_prim(child_path, specs_by_path, materials, correction, options, registry, bundle, -1);
109
100
 
110
- roots.push(node);
111
- }
112
- }
101
+ if (index !== -1 && has_correction) {
102
+ // Bake the correction into the roots' own transforms, so that everything under them
103
+ // composes it
104
+ const node = bundle.nodes[index];
105
+ const corrected = m4_allocate();
113
106
 
114
- // Propagate local transforms → global transforms and compute bounds
115
- for (const root of roots) {
116
- root.updateMatrices();
107
+ m4_multiply(corrected, correction, node.local.matrix);
108
+ node.local.fromMatrix(corrected);
109
+ }
117
110
  }
118
111
 
119
- return roots;
112
+ return bundle;
120
113
  }
121
114
 
122
115
 
123
116
  /**
124
- * Recursively build a Node3D from a prim spec.
117
+ * Recursively add a prim and what is under it to the bundle.
125
118
  *
126
119
  * @param {string} path
127
120
  * @param {Object} specs_by_path
@@ -129,14 +122,14 @@ export function usd_build_scene(specs_by_path, options = {}) {
129
122
  * @param {mat4} parent_world_transform
130
123
  * @param {UsdBuildOptions} options
131
124
  * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
132
- * @returns {Node3D|null}
125
+ * @returns {number} the node's index in the bundle, or -1 for a prim that produced nothing
133
126
  */
134
- function build_prim(path, specs_by_path, materials, parent_world_transform, options, registry) {
127
+ function build_prim(path, specs_by_path, materials, parent_world_transform, options, registry, bundle, parent) {
135
128
 
136
129
  const spec = specs_by_path[path];
137
130
 
138
131
  if (!spec || spec.specType !== 6) {
139
- return null;
132
+ return -1;
140
133
  }
141
134
 
142
135
  const fields = spec.fields;
@@ -150,7 +143,10 @@ function build_prim(path, specs_by_path, materials, parent_world_transform, opti
150
143
  const result = ext.processPrim(path, fields, { specs_by_path, materials, options });
151
144
 
152
145
  if (result !== null && result !== undefined) {
153
- return result;
146
+ // an extension answers with a record of its own, which goes under this prim's parent
147
+ result.parent = parent;
148
+
149
+ return bundle.add_node(result);
154
150
  }
155
151
  }
156
152
  }
@@ -167,7 +163,7 @@ function build_prim(path, specs_by_path, materials, parent_world_transform, opti
167
163
  // Attempt to build a Mesh if this is a UsdGeomMesh
168
164
  // @see https://openusd.org/release/api/class_usd_geom_mesh.html
169
165
  if (type_name === "Mesh") {
170
- return build_mesh_node(path, prim_name, fields, specs_by_path, materials, local_transform, world_transform, options, registry);
166
+ return build_mesh_node(path, prim_name, fields, specs_by_path, materials, local_transform, world_transform, options, registry, bundle, parent);
171
167
  }
172
168
 
173
169
  // Warn on unrecognized prim types that carry data we silently ignore
@@ -175,24 +171,22 @@ function build_prim(path, specs_by_path, materials, parent_world_transform, opti
175
171
  console.warn(`[USD] Unhandled prim type "${type_name}" at ${path}, treating as group node`);
176
172
  }
177
173
 
178
- // For Xform, Scope, and other grouping types, create a Node3D container
179
- const node = new Node3D();
174
+ // For Xform, Scope, and other grouping types, a node that only places its children
175
+ const node = new SceneNode();
180
176
  node.name = prim_name;
181
- node.transform_local.fromMatrix(local_transform);
177
+ node.parent = parent;
178
+ node.local.fromMatrix(local_transform);
179
+
180
+ const index = bundle.add_node(node);
182
181
 
183
182
  // Recurse into children
184
183
  const children = fields.primChildren || [];
185
-
186
184
  for (const child_name of children) {
187
185
  const child_path = path + "/" + child_name;
188
- const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
189
-
190
- if (child !== null) {
191
- node.addChild(child);
192
- }
186
+ build_prim(child_path, specs_by_path, materials, world_transform, options, registry, bundle, index);
193
187
  }
194
188
 
195
- return node;
189
+ return index;
196
190
  }
197
191
 
198
192
 
@@ -219,9 +213,9 @@ function build_prim(path, specs_by_path, materials, parent_world_transform, opti
219
213
  * @param {mat4} world_transform
220
214
  * @param {UsdBuildOptions} options
221
215
  * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
222
- * @returns {Mesh|Node3D}
216
+ * @returns {number} the node's index in the bundle
223
217
  */
224
- function build_mesh_node(path, name, fields, specs_by_path, materials, local_transform, world_transform, options, registry) {
218
+ function build_mesh_node(path, name, fields, specs_by_path, materials, local_transform, world_transform, options, registry, bundle, parent) {
225
219
 
226
220
  // --- Read topology ---
227
221
  const face_vertex_counts = read_attr(specs_by_path, path, "faceVertexCounts");
@@ -229,11 +223,12 @@ function build_mesh_node(path, name, fields, specs_by_path, materials, local_tra
229
223
  const points_raw = read_attr(specs_by_path, path, "points");
230
224
 
231
225
  if (!face_vertex_counts || !face_vertex_indices || !points_raw) {
232
- // Not enough data to build a mesh — return as empty node
233
- const node = new Node3D();
226
+ // Not enough data to build a mesh — a node that draws nothing
227
+ const node = new SceneNode();
234
228
  node.name = name;
235
- node.transform_local.fromMatrix(local_transform);
236
- return node;
229
+ node.parent = parent;
230
+ node.local.fromMatrix(local_transform);
231
+ return bundle.add_node(node);
237
232
  }
238
233
 
239
234
  // Validate that vertex indices are within bounds
@@ -375,30 +370,27 @@ function build_mesh_node(path, name, fields, specs_by_path, materials, local_tra
375
370
  material.draw_side = ShadeDrawSide.Double;
376
371
  }
377
372
 
378
- // --- Build engine Mesh ---
373
+ // --- The primitive ---
379
374
  const meshlet_geo = meshlet_geometry_build_from_geometry(geometry);
380
-
381
- const mesh = new Mesh();
375
+ const mesh = new SceneNode();
382
376
  mesh.name = name;
377
+ mesh.parent = parent;
383
378
  mesh.geometry = meshlet_geo;
384
379
  mesh.material = material;
385
- mesh.transform_local.fromMatrix(local_transform);
380
+ mesh.local.fromMatrix(local_transform);
381
+
382
+ const index = bundle.add_node(mesh);
386
383
 
387
384
  // Recurse into children (mesh prims can have child prims)
388
385
  const children = fields.primChildren || [];
389
-
390
386
  if (children.length > 0) {
391
387
  for (const child_name of children) {
392
388
  const child_path = path + "/" + child_name;
393
- const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
394
-
395
- if (child !== null) {
396
- mesh.addChild(child);
397
- }
389
+ build_prim(child_path, specs_by_path, materials, world_transform, options, registry, bundle, index);
398
390
  }
399
391
  }
400
392
 
401
- return mesh;
393
+ return index;
402
394
  }
403
395
 
404
396
 
@@ -501,7 +501,7 @@ export class GPUMaterialManager {
501
501
  * @type {GPUMaterialContext[]}
502
502
  */
503
503
  const materials = [];
504
- const scene_materials = view.scene.scene.instances.materials;
504
+ const scene_materials = view.scene.drawn_materials;
505
505
  for (const m of scene_materials) {
506
506
 
507
507
  if (m.transparency_mode === TransparencyMode.Transparent) {
@@ -44,23 +44,24 @@ export class GPUResidentMaterialContext {
44
44
  build_textures(): void;
45
45
  build_materials(): void;
46
46
  /**
47
+ * Make every material the scene draws with resident — the list its rows keep, each once.
47
48
  *
48
- * @param {Scene} scene
49
+ * @param {GPUSceneContext} scene_context
49
50
  */
50
- ensure_scene_materials(scene: Scene): void;
51
+ ensure_scene_materials(scene_context: GPUSceneContext): void;
51
52
  update(): void;
52
53
  destroy(): void;
53
54
  #private;
54
55
  }
55
56
  export type GraphicsContext = import("../../GraphicsContext.js").GraphicsContext;
56
- export type Scene = import("../../scene/Scene.js").Scene;
57
+ export type GPUSceneContext = import("../../scene/GPUSceneContext.js").GPUSceneContext;
57
58
  export type ShadeTexture = import("../../texture/ShadeTexture.js").ShadeTexture;
58
59
  export type ShadeMaterial = import("../ShadeMaterial.js").ShadeMaterial;
59
60
  export type StandardShadeMaterial = import("../StandardShadeMaterial.js").StandardShadeMaterial;
60
61
  import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
61
62
  /**
62
63
  * @typedef {import("../../GraphicsContext.js").GraphicsContext} GraphicsContext
63
- * @typedef {import("../../scene/Scene.js").Scene} Scene
64
+ * @typedef {import("../../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
64
65
  * @typedef {import("../../texture/ShadeTexture.js").ShadeTexture} ShadeTexture
65
66
  * @typedef {import("../ShadeMaterial.js").ShadeMaterial} ShadeMaterial
66
67
  * @typedef {import("../StandardShadeMaterial.js").StandardShadeMaterial} StandardShadeMaterial
@@ -1 +1 @@
1
- {"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"AA+DA,sDAAuD;AAEvD,wDAAyD;AAEzD,+DAAiJ;AAEjJ,+DAA+I;AAE/I;IA8GI;;;;OAIG;IACH,yCAFW,eAAe,EAsCzB;IA3HD;;;OAGG;IACH,6BAEC;IAQD;;;OAGG;IACH,kCAEC;IAQD;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,kCAIC;IA0GD;;;;OAIG;IACH,0BAHW,aAAa,GACX,YAAY,CAIxB;IAgBD;;;;OAIG;IACH,wBAHW,YAAY,GACV,WAAW,CAIvB;IAGD,uBA+HC;IAED,wBA2EC;IAED;;;OAGG;IACH,8BAFW,KAAK,QAkBf;IAoCD,eASC;IAGD,gBAGC;;CACJ;8BA7hBY,OAAO,0BAA0B,EAAE,eAAe;oBAClD,OAAO,sBAAsB,EAAE,KAAK;2BACpC,OAAO,+BAA+B,EAAE,YAAY;4BACpD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,6BAA6B,EAAE,qBAAqB;kCAZtC,oCAAoC;AAOtE;;;;;;GAMG;AAEH;IACI,WAAM;IAEN;;OAEG;IACH,QAFU,qBAAqB,CAExB;IAEP;;OAEG;IACH,gBAFU,WAAW,CAEP;IAEd;;OAEG;IACH,aAFU,WAAW,CAEV;IAEX;;OAEG;IACH,gBAFU,WAAW,CAEP;IACd;;OAEG;IACH,kBAFU,WAAW,CAEL;CACnB;AAED;IACI,WAAO;IAEP;;OAEG;IACH,QAFU,YAAY,CAEf;CACV"}
1
+ {"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"AA+DA,sDAAuD;AAEvD,wDAAyD;AAEzD,+DAAiJ;AAEjJ,+DAA+I;AAE/I;IA8GI;;;;OAIG;IACH,yCAFW,eAAe,EAsCzB;IA3HD;;;OAGG;IACH,6BAEC;IAQD;;;OAGG;IACH,kCAEC;IAQD;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,kCAIC;IA0GD;;;;OAIG;IACH,0BAHW,aAAa,GACX,YAAY,CAIxB;IAgBD;;;;OAIG;IACH,wBAHW,YAAY,GACV,WAAW,CAIvB;IAGD,uBA+HC;IAED,wBA2EC;IAED;;;;OAIG;IACH,sCAFW,eAAe,QAUzB;IAoCD,eASC;IAGD,gBAGC;;CACJ;8BAthBY,OAAO,0BAA0B,EAAE,eAAe;8BAClD,OAAO,gCAAgC,EAAE,eAAe;2BACxD,OAAO,+BAA+B,EAAE,YAAY;4BACpD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,6BAA6B,EAAE,qBAAqB;kCAZtC,oCAAoC;AAOtE;;;;;;GAMG;AAEH;IACI,WAAM;IAEN;;OAEG;IACH,QAFU,qBAAqB,CAExB;IAEP;;OAEG;IACH,gBAFU,WAAW,CAEP;IAEd;;OAEG;IACH,aAFU,WAAW,CAEV;IAEX;;OAEG;IACH,gBAFU,WAAW,CAEP;IACd;;OAEG;IACH,kBAFU,WAAW,CAEL;CACnB;AAED;IACI,WAAO;IAEP;;OAEG;IACH,QAFU,YAAY,CAEf;CACV"}
@@ -18,7 +18,7 @@ import { INDIRECT_MATERIAL_STRUCT } from "./INDIRECT_MATERIAL_STRUCT.js";
18
18
 
19
19
  /**
20
20
  * @typedef {import("../../GraphicsContext.js").GraphicsContext} GraphicsContext
21
- * @typedef {import("../../scene/Scene.js").Scene} Scene
21
+ * @typedef {import("../../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
22
22
  * @typedef {import("../../texture/ShadeTexture.js").ShadeTexture} ShadeTexture
23
23
  * @typedef {import("../ShadeMaterial.js").ShadeMaterial} ShadeMaterial
24
24
  * @typedef {import("../StandardShadeMaterial.js").StandardShadeMaterial} StandardShadeMaterial
@@ -487,25 +487,18 @@ export class GPUResidentMaterialContext {
487
487
  }
488
488
 
489
489
  /**
490
+ * Make every material the scene draws with resident — the list its rows keep, each once.
490
491
  *
491
- * @param {Scene} scene
492
+ * @param {GPUSceneContext} scene_context
492
493
  */
493
- ensure_scene_materials(scene) {
494
- assert.equal(scene.isScene, true, "'scene' must be a Scene instance.")
494
+ ensure_scene_materials(scene_context) {
495
+ assert.equal(scene_context.isGPUSceneContext, true, 'scene_context.isGPUSceneContext !== true');
495
496
 
496
- const meshes = scene.instances.instances;
497
-
498
- for (let i = 0; i < meshes.length; i++) {
499
- const mesh = meshes[i];
500
-
501
- const material = mesh.material;
502
-
503
- if (material !== undefined && material !== null) {
504
- this.obtain_material(material);
505
- }
497
+ const materials = scene_context.drawn_materials;
506
498
 
499
+ for (let i = 0; i < materials.length; i++) {
500
+ this.obtain_material(materials[i]);
507
501
  }
508
-
509
502
  }
510
503
 
511
504
  #commit() {
@@ -1,20 +1,22 @@
1
- export const REFRESH_ALL_MESH_BOUNDS_SETTINGS_STRUCT: WebGPUStruct;
1
+ export const WORKGROUP_SIZE: number;
2
2
  /**
3
- * Recompute bounding box + bounding sphere for every mesh in the scene.
3
+ * Recompute the world-space bounding box and sphere of every mesh row in the scene, from the
4
+ * geometry's own bounds under the node's `global` — after the hierarchy pass has composed it.
4
5
  *
5
- * Coarser than the OPR-stream-driven `shader_object_property_process` —
6
- * that one only refreshes meshes whose own transform was animated. When a
7
- * non-mesh ancestor (joint, anchor) is animated, its descendant meshes'
8
- * world transforms change too, but they have no animation binding and
9
- * never make it into the OPR stream. Walking descendants on the GPU to
10
- * find them is the right answer eventually; for now this pass just
11
- * refreshes everyone, paying O(instance_count) per frame to dodge the
12
- * stale-bounds → frustum-culling drop-out the targeted refresh would
13
- * otherwise leave behind.
6
+ * **This is what makes render bounds the GPU's.** A row's `global` is composed on the GPU from its
7
+ * TRS and its parent chain, and once an ancestor can be GPU-driven — a joint under a clip, a
8
+ * subtree the CPU has stopped composing — nothing on the CPU holds the world transform the bounds
9
+ * would need. So they are derived where the transform is: one thread per occupied row, every
10
+ * frame, over the table's pages rather than over `[0, count)`, because rows are addresses and a
11
+ * live one can sit above any number of holes.
14
12
  *
15
- * Dispatch one thread per mesh row in `[0, instance_count)`.
13
+ * Runs after the hierarchy pass and before anything culls. The skinning chain refreshes the
14
+ * clone geometry's own box before this reads it, so a skinned row lands here on the deformed
15
+ * bounds rather than the source's.
16
+ *
17
+ * Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
18
+ * {@link WORKGROUP_SIZE}.
16
19
  */
17
20
  export const shader_refresh_all_mesh_bounds: ComputeShader;
18
- import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
19
21
  import { ComputeShader } from "../shader/ComputeShader.js";
20
22
  //# sourceMappingURL=shader_refresh_all_mesh_bounds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader_refresh_all_mesh_bounds.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js"],"names":[],"mappings":"AAaA,mEAEmC;AAQnC;;;;;;;;;;;;;;GAcG;AACH,2DAkBG;6BAtD0B,gCAAgC;8BAG/B,4BAA4B"}
1
+ {"version":3,"file":"shader_refresh_all_mesh_bounds.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js"],"names":[],"mappings":"AAYA,oCAAgE;AAiBhE;;;;;;;;;;;;;;;;;GAiBG;AACH,2DA4BG;8BAtE2B,4BAA4B"}
@@ -1,40 +1,49 @@
1
1
  import { u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
2
  import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
- import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
4
3
  import { GEOMETRY_METADATA_STRUCT } from "../geometry/GEOMETRY_METADATA_STRUCT.js";
5
4
  import { CodeChunk } from "../shader/compiler/CodeChunk.js";
5
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
6
  import { ComputeShader } from "../shader/ComputeShader.js";
7
7
  import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { MESHES_TABLE } from "../scene/chunk_scene_database_access.js";
8
9
  import {
9
10
  chunk_update_object_property_mesh_instance_bounds
10
11
  } from "./chunk_update_object_property_mesh_instance_bounds.js";
11
12
 
12
- const WORKGROUP_SIZE = 64;
13
+ export const WORKGROUP_SIZE = COMPUTE_SHADER_DEFAULT_GROUP_SIZE;
13
14
 
14
- export const REFRESH_ALL_MESH_BOUNDS_SETTINGS_STRUCT = WebGPUStruct.from({
15
- instance_count: u32,
16
- }, "RefreshAllMeshBoundsSettings");
15
+ /**
16
+ * Read-write iterator over the `meshes` table's pages: the pass writes the bounds it computes back
17
+ * into the same database it reads the transforms from, and WGSL will not coerce a `read_write`
18
+ * pointer down to `read`.
19
+ *
20
+ * @type {string}
21
+ */
22
+ const PG_PREFIX = MESHES_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
17
23
 
18
24
  const resources = new ShaderResourceSetDescriptor();
25
+
19
26
  resources.createGroup()
20
- .addUniform('settings', REFRESH_ALL_MESH_BOUNDS_SETTINGS_STRUCT)
21
27
  .addStorageBuffer('scene_database', WebGPUArray.from(u32), true)
22
28
  .addStorageBuffer('geometries', WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false);
23
29
 
24
30
  /**
25
- * Recompute bounding box + bounding sphere for every mesh in the scene.
31
+ * Recompute the world-space bounding box and sphere of every mesh row in the scene, from the
32
+ * geometry's own bounds under the node's `global` — after the hierarchy pass has composed it.
33
+ *
34
+ * **This is what makes render bounds the GPU's.** A row's `global` is composed on the GPU from its
35
+ * TRS and its parent chain, and once an ancestor can be GPU-driven — a joint under a clip, a
36
+ * subtree the CPU has stopped composing — nothing on the CPU holds the world transform the bounds
37
+ * would need. So they are derived where the transform is: one thread per occupied row, every
38
+ * frame, over the table's pages rather than over `[0, count)`, because rows are addresses and a
39
+ * live one can sit above any number of holes.
26
40
  *
27
- * Coarser than the OPR-stream-driven `shader_object_property_process` —
28
- * that one only refreshes meshes whose own transform was animated. When a
29
- * non-mesh ancestor (joint, anchor) is animated, its descendant meshes'
30
- * world transforms change too, but they have no animation binding and
31
- * never make it into the OPR stream. Walking descendants on the GPU to
32
- * find them is the right answer eventually; for now this pass just
33
- * refreshes everyone, paying O(instance_count) per frame to dodge the
34
- * stale-bounds → frustum-culling drop-out the targeted refresh would
35
- * otherwise leave behind.
41
+ * Runs after the hierarchy pass and before anything culls. The skinning chain refreshes the
42
+ * clone geometry's own box before this reads it, so a skinned row lands here on the deformed
43
+ * bounds rather than the source's.
36
44
  *
37
- * Dispatch one thread per mesh row in `[0, instance_count)`.
45
+ * Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
46
+ * {@link WORKGROUP_SIZE}.
38
47
  */
39
48
  export const shader_refresh_all_mesh_bounds = ComputeShader.from({
40
49
  label: "ObjectProperty/RefreshAllMeshBounds",
@@ -42,16 +51,26 @@ export const shader_refresh_all_mesh_bounds = ComputeShader.from({
42
51
  //language=WGSL
43
52
  `
44
53
  @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
45
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
46
- let mesh_row = gid.x;
47
- if(mesh_row >= settings.instance_count){
54
+ fn main(
55
+ @builtin(workgroup_id) wg_id: vec3<u32>,
56
+ @builtin(local_invocation_index) local_id: u32,
57
+ ) {
58
+ // page_address is uniform across the workgroup, so this branch is uniform
59
+ if !${PG_PREFIX}_setup(&scene_database, wg_id.x, local_id) {
60
+ return;
61
+ }
62
+
63
+ let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
64
+
65
+ if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE || !${PG_PREFIX}_is_occupied(slot_in_page) {
48
66
  return;
49
67
  }
50
68
 
51
- update_object_property_mesh_instance_bounds(mesh_row);
69
+ update_object_property_mesh_instance_bounds(${PG_PREFIX}_slot_to_index(slot_in_page));
52
70
  }
53
71
  `, [
54
72
  chunk_update_object_property_mesh_instance_bounds,
73
+ MESHES_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
55
74
  ]),
56
75
  resources,
57
76
  });