@woosh/meep-engine 3.23.0 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/editor/entity_world_bounds.d.ts +9 -3
  2. package/editor/entity_world_bounds.d.ts.map +1 -1
  3. package/editor/entity_world_bounds.js +61 -4
  4. package/package.json +1 -1
  5. package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
  6. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  7. package/src/core/binary/allocator/OffsetAllocator.js +124 -29
  8. package/src/core/collection/map/u32_index.d.ts +83 -0
  9. package/src/core/collection/map/u32_index.d.ts.map +1 -0
  10. package/src/core/collection/map/u32_index.js +247 -0
  11. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
  12. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
  13. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
  14. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
  15. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
  16. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
  17. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
  18. package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
  19. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
  20. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
  21. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
  22. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
  23. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
  24. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
  25. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
  26. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
  27. package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
  28. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
  29. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
  30. package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
  31. package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
  32. package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
  33. package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
  34. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
  35. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
  36. package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
  37. package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
  38. package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
  39. package/src/engine/ecs/ik/IKProblem.js +16 -0
  40. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
  41. package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
  42. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
  43. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
  44. package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
  45. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
  46. package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
  47. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  48. package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
  49. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  50. package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
  51. package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
  52. package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
  53. package/src/engine/ecs/transform/T64WorldCache.js +139 -0
  54. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
  55. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
  56. package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
  57. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
  58. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  59. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
  60. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
  61. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
  62. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
  63. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
  64. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
  65. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
  66. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
  67. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
  68. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
  69. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
  70. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
  71. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
  72. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
  73. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
  74. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
  75. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
  76. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
  77. package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
  78. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
  79. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
  80. package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
  81. package/src/engine/graphics3/AnimationSystem.js +2 -2
  82. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
  83. package/src/engine/graphics3/DebugDrawSystem.js +2 -4
  84. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
  85. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  86. package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
  87. package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
  88. package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
  89. package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
  90. package/src/engine/graphics3/LightSystem.d.ts +7 -5
  91. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  92. package/src/engine/graphics3/LightSystem.js +36 -22
  93. package/src/engine/graphics3/MeshSystem.d.ts +43 -39
  94. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  95. package/src/engine/graphics3/MeshSystem.js +324 -331
  96. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
  97. package/src/engine/graphics3/PathDisplaySystem.js +2 -4
  98. package/src/engine/graphics3/PickingQuery.d.ts +15 -21
  99. package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
  100. package/src/engine/graphics3/PickingQuery.js +21 -25
  101. package/src/engine/graphics3/PickingSystem.d.ts +60 -31
  102. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  103. package/src/engine/graphics3/PickingSystem.js +416 -273
  104. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
  105. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  106. package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
  107. package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
  108. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  109. package/src/engine/graphics3/TerrainSystem.js +102 -53
  110. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
  111. package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
  112. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  113. package/src/engine/graphics3/Trail3DSystem.js +2 -4
  114. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
  115. package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
  116. package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
  117. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
  118. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  119. package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
  120. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
  121. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
  122. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
  123. package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
  124. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
  125. package/src/engine/graphics3/prefab/Prefab.js +162 -0
  126. package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
  127. package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
  128. package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
  129. package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
  130. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
  131. package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
  132. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
  133. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
  134. package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
  135. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
  136. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
  137. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
  138. package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
  139. package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
  140. package/src/engine/graphics3/prefab/prefab_place.js +130 -0
  141. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
  142. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
  143. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
  144. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
  145. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
  146. package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
  147. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
  148. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
  149. package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
  150. package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
  151. package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
  152. package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
  153. package/src/engine/graphics3/register_instance_animation.js +4 -4
  154. package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
  155. package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
  156. package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
  157. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
  158. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
  159. package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
  160. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
  161. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  162. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
  163. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
  164. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  165. package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
  166. package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
  167. package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
  168. package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
  169. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
  170. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  171. package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
  172. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
  173. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  174. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
  175. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  176. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
  177. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
  178. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
  179. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
  180. package/src/engine/physics/cloth/playground/README.md +11 -11
  181. package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
  182. package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
  183. package/src/engine/physics/cloth/playground/garment_build.js +64 -58
  184. package/src/engine/physics/cloth/playground/garment_main.js +59 -33
  185. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  186. package/src/shade/RENDERER_CONTRACT.md +85 -53
  187. package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
  188. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  189. package/src/shade/device/ShadeGPUCommandContext.js +36 -0
  190. package/src/shade/playground/add_random_meshes.d.ts +4 -4
  191. package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
  192. package/src/shade/playground/add_random_meshes.js +20 -16
  193. package/src/shade/playground/avboit/main.d.ts +1 -0
  194. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  195. package/src/shade/playground/avboit/main.js +916 -875
  196. package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
  197. package/src/shade/playground/basis_textures/main.js +22 -8
  198. package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
  199. package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
  200. package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
  201. package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
  202. package/src/shade/playground/ground_seam/main.js +13 -4
  203. package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
  204. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
  205. package/src/shade/playground/ground_seam/make_ground.js +21 -16
  206. package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
  207. package/src/shade/playground/particle_system/main.js +11 -10
  208. package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
  209. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  210. package/src/shade/playground/particle_system/particle_prototype.js +56 -15
  211. package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
  212. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  213. package/src/shade/playground/particle_system/particle_scene.js +149 -53
  214. package/src/shade/playground/readback_crossover/index.html +41 -0
  215. package/src/shade/playground/readback_crossover/main.d.ts +2 -0
  216. package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
  217. package/src/shade/playground/readback_crossover/main.js +372 -0
  218. package/src/shade/playground/skinned_blas_refit/README.md +11 -7
  219. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
  220. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
  222. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/main.js +67 -58
  224. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
  225. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
  226. package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
  227. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
  228. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  229. package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
  230. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
  231. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  232. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
  233. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  234. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
  235. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
  236. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  237. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
  238. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
  239. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  240. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
  241. package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
  242. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  243. package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
  244. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
  245. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  246. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
  247. package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
  248. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
  249. package/src/shade/playground/sponza_path_trace/main.js +393 -363
  250. package/src/shade/playground/ssr_reprojection/main.js +11 -9
  251. package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
  252. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
  253. package/src/shade/playground/ssr_reprojection/scene.js +32 -11
  254. package/src/shade/playground/ssr_variance/main.js +1 -1
  255. package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
  256. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
  257. package/src/shade/playground/ssr_variance/scene.js +39 -15
  258. package/src/shade/playground/vgeo_viewer/main.js +6 -2
  259. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  260. package/src/shade/playground/volumetrics_froxel/main.js +936 -922
  261. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  262. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  263. package/src/shade/renderer/GraphicsContext.js +11 -0
  264. package/src/shade/renderer/Renderer.d.ts +3 -2
  265. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  266. package/src/shade/renderer/Renderer.js +3 -2
  267. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
  268. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  269. package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
  270. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
  271. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
  272. package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
  273. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
  274. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  275. package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
  276. package/src/shade/renderer/animation/Skin.d.ts +19 -19
  277. package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
  278. package/src/shade/renderer/animation/Skin.js +15 -13
  279. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
  280. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  281. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
  282. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
  283. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
  284. package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
  285. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
  286. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  287. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
  288. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  289. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
  290. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
  291. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
  292. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
  293. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
  294. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
  295. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
  296. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
  298. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
  299. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
  300. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
  301. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
  302. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
  303. package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
  304. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
  305. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
  306. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
  307. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
  308. package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
  309. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
  310. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  311. package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
  312. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
  313. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
  314. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
  315. package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
  316. package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
  317. package/src/shade/renderer/buffer/table/WordViews.js +62 -0
  318. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
  319. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
  320. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
  321. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
  322. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
  323. package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
  324. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  325. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
  326. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
  327. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  328. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
  329. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
  330. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  331. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
  332. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
  333. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
  334. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
  335. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
  336. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
  337. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
  338. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  339. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
  340. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
  341. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  342. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
  343. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  344. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
  345. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
  346. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
  347. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
  348. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
  349. package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
  350. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  351. package/src/shade/renderer/light/GPULightCollection.js +444 -329
  352. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  353. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
  354. package/src/shade/renderer/light/LightCollection.d.ts +29 -1
  355. package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
  356. package/src/shade/renderer/light/LightCollection.js +50 -1
  357. package/src/shade/renderer/light/make_sunlight.js +2 -2
  358. package/src/shade/renderer/light/model/Light.d.ts +29 -2
  359. package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
  360. package/src/shade/renderer/light/model/Light.js +30 -2
  361. package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
  362. package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
  363. package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
  364. package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
  365. package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
  366. package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
  367. package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
  368. package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
  369. package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
  370. package/src/shade/renderer/light/place_light.d.ts +16 -0
  371. package/src/shade/renderer/light/place_light.d.ts.map +1 -0
  372. package/src/shade/renderer/light/place_light.js +36 -0
  373. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
  374. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
  375. package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
  376. package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
  377. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  378. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
  379. package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
  380. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  381. package/src/shade/renderer/loader/SceneBundle.js +111 -56
  382. package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
  383. package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
  384. package/src/shade/renderer/loader/SceneNode.js +114 -0
  385. package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
  386. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  387. package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
  388. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  389. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
  390. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
  391. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
  392. package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
  393. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  394. package/src/shade/renderer/loader/usd/load_usd.js +4 -5
  395. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
  396. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
  397. package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
  398. package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
  399. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
  400. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  401. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
  402. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
  403. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  404. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
  405. package/src/shade/renderer/particles/DESIGN.md +53 -50
  406. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
  407. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  408. package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
  409. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
  410. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  411. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
  412. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
  413. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  414. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
  415. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
  416. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  417. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
  418. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
  419. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
  420. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  421. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  422. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
  423. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
  424. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
  425. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
  426. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  427. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
  428. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
  430. package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
  431. package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
  432. package/src/shade/renderer/scene/DynamicMesh.js +14 -4
  433. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
  434. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  435. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
  436. package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
  437. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  438. package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
  439. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
  440. package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
  441. package/src/shade/renderer/scene/Node3D.d.ts +27 -8
  442. package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
  444. package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
  445. package/src/shade/renderer/scene/Scene.d.ts +18 -60
  446. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/Scene.js +53 -146
  448. package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
  449. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
  450. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
  451. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
  452. package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
  453. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
  454. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  455. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
  456. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
  457. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
  458. package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
  459. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
  460. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
  461. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
  462. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
  463. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
  464. package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
  465. package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
  466. package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
  467. package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
  468. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
  469. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
  470. package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
  471. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
  472. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
  473. package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
  474. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
  475. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
  476. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
  477. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
  479. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
  480. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
  481. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
  482. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  483. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
  484. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
  485. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  486. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
  487. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
  488. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
  489. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
  490. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
  491. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
  492. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
  493. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
  494. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
  495. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
  496. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
  497. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
  498. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
  499. package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
  500. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
  501. package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
  502. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
  503. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  504. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
  505. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
  506. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  507. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
  508. package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
  509. package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
  510. package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
  511. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
  512. package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
  513. package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
  514. package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
  515. package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
  516. package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
  517. package/src/shade/renderer/scene/InstanceBatch.js +0 -235
  518. package/src/shade/renderer/scene/Mesh.js +0 -168
  519. package/src/shade/renderer/scene/Node3D.js +0 -263
  520. package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
  521. package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
  522. package/src/shade/renderer/scene/TransformAuthority.js +0 -33
@@ -1,230 +1,266 @@
1
- import { assert } from "../../../../core/assert.js";
2
- import { geometry_build_from_meshlet_geometry } from "../../geometry/geometry_build_from_meshlet_geometry.js";
3
- import { geometry_deduplicate_vertices } from "../../geometry/geometry_deduplicate_vertices.js";
4
- import { meshlet_geometry_build_from_geometry } from "../../geometry/meshlet_geometry_build_from_geometry.js";
5
- import { Mesh } from "../Mesh.js";
6
- import { deduplicate_geometries } from "./deduplicate_geometries.js";
7
- import { geometry_deduplicate } from "./geometry/geometry_deduplicate.js";
8
- import { optimize_texture_set } from "./optimize_texture_set.js";
9
-
10
- /**
11
- *
12
- * @param {Set<MeshletGeometry>} geometries
13
- * @param {Mesh[]} instances
14
- */
15
- function optimize_geometry_set(geometries, instances) {
16
- const removed = deduplicate_geometries(Array.from(geometries));
17
-
18
- if (removed.length > 0) {
19
- console.log(`scene_optimize: removed ${removed.length} exact-duplicate geometries`);
20
-
21
- const replace_map = new Map();
22
- for (const [victim, master] of removed) {
23
- replace_map.set(victim, master);
24
- }
25
-
26
- for (const instance of instances) {
27
- if (replace_map.has(instance.geometry)) {
28
- instance.geometry = replace_map.get(instance.geometry);
29
- instance.needsUpdate = true;
30
- }
31
- }
32
- }
33
- }
34
-
35
- /**
36
- * Detect equivalent triangle subsets across the surviving geometries (after
37
- * exact dedup) and replace meshes with shared canonical pieces.
38
- *
39
- * - Single-piece replacement with identity transform: just swap geometry.
40
- * - Single-piece with non-identity transform: swap geometry, premultiply
41
- * `transform_local` by the piece's transform.
42
- * - Multi-piece replacement: remove the original mesh and add one new
43
- * mesh per piece, each with transform_local baked from the original's
44
- * transform_global so the result is parent-independent.
45
- *
46
- * @param {Scene} scene
47
- */
48
- function optimize_geometry_pieces(scene) {
49
- const instances = scene.instances.instances;
50
-
51
- /** @type {Map<MeshletGeometry, Geometry>} */
52
- const mg_to_geom = new Map();
53
- /** @type {Map<Geometry, MeshletGeometry>} canonical (input-derived) Geometry → its source MG */
54
- const geom_to_source_mg = new Map();
55
-
56
- for (const instance of instances) {
57
- if (mg_to_geom.has(instance.geometry)) {
58
- continue;
59
- }
60
-
61
- let geom = geometry_build_from_meshlet_geometry(instance.geometry);
62
-
63
- // undo meshlet damage
64
- geom = geometry_deduplicate_vertices(geom);
65
-
66
- mg_to_geom.set(instance.geometry, geom);
67
- geom_to_source_mg.set(geom, instance.geometry);
68
- }
69
-
70
- const geometries = Array.from(mg_to_geom.values());
71
- const triangles_before = sum_unique_triangles(instances);
72
-
73
- if (geometries.length < 2) {
74
- console.log(`scene_optimize: only ${geometries.length} unique geometries, skipping piece-level dedup`);
75
- return;
76
- }
77
-
78
- const replacement_map = geometry_deduplicate({
79
- geometries,
80
- min_primitives: 64
81
- });
82
-
83
- /** @type {Map<Geometry, MeshletGeometry>} memoised MGs for newly-built piece Geometries */
84
- const built_mg_for_geom = new Map();
85
-
86
- const get_mg_for_geom = (geom) => {
87
- const source = geom_to_source_mg.get(geom);
88
- if (source !== undefined) return source;
89
- let mg = built_mg_for_geom.get(geom);
90
- if (mg === undefined) {
91
- mg = meshlet_geometry_build_from_geometry(geom);
92
- built_mg_for_geom.set(geom, mg);
93
- }
94
- return mg;
95
- };
96
-
97
- let instances_swapped = 0;
98
- let instances_removed = 0;
99
- let instances_added = 0;
100
-
101
- // Snapshot since we mutate scene.instances mid-loop
102
- const original_instances = instances.slice();
103
-
104
- for (const instance of original_instances) {
105
- const source_geom = mg_to_geom.get(instance.geometry);
106
- const entries = replacement_map.get(source_geom);
107
- if (entries === undefined || entries.length === 0) continue;
108
-
109
- if (entries.length === 1) {
110
- const [transform, geom] = entries[0];
111
- const new_mg = get_mg_for_geom(geom);
112
-
113
- if (new_mg !== instance.geometry) {
114
- if (!transform.isIdentity()) {
115
- instance.transform_local.multiply(transform);
116
- }
117
- instance.geometry = new_mg;
118
- instance.needsUpdate = true;
119
- instance.updateMatrices();
120
- instances_swapped++;
121
- }
122
- continue;
123
- }
124
-
125
- // Multi-piece: replace this mesh with N new meshes
126
- scene.instances.remove(instance);
127
- instances_removed++;
128
-
129
- // Re-parent any Node3D children of the replaced mesh onto the scene root
130
- // (parent = null resolves to the scene row on the GPU side), baking the
131
- // removed parent's world transform into each child's transform_local so
132
- // the child's world transform is preserved. The children themselves stay
133
- // in the instance batch — Scene.add registered them individually.
134
- const orphans = instance.children;
135
- for (const child of orphans) {
136
- assert.equal(child.parent, instance, 'child.parent !== replaced mesh — unsupported hierarchy shape');
137
-
138
- // child world = parent global ⊗ child local — same composition updateMatrices uses
139
- child.transform_local.multiplyTransforms(instance.transform_global, child.transform_local);
140
- child.parent = null;
141
- child.updateMatrices();
142
- }
143
- orphans.length = 0;
144
-
145
- for (const [transform, geom] of entries) {
146
- const new_mesh = new Mesh();
147
- new_mesh.material = instance.material;
148
- new_mesh.geometry = get_mg_for_geom(geom);
149
- new_mesh.name = instance.name;
150
-
151
- // Bake the original world transform into this piece's transform_local — the new
152
- // mesh has no parent, so transform_global == transform_local after updateMatrices.
153
- new_mesh.transform_local.multiplyTransforms(instance.transform_global, transform);
154
- new_mesh.updateMatrices();
155
-
156
- scene.instances.add(new_mesh);
157
- instances_added++;
158
- }
159
- }
160
-
161
- const triangles_after = sum_unique_triangles(scene.instances.instances);
162
- const unique_geoms_after = count_unique_geometries(scene.instances.instances);
163
-
164
- console.log(
165
- `scene_optimize: piece-level dedup — `
166
- + `${instances_swapped} swapped, ${instances_removed} removed, ${instances_added} added; `
167
- + `unique geometries ${geometries.length} → ${unique_geoms_after}; `
168
- + `unique-geometry triangles ${triangles_before} → ${triangles_after} `
169
- + `(saved ${triangles_before - triangles_after})`
170
- );
171
-
172
- // TODO rebuild meshlet BLASs, using high quality settings
173
- }
174
-
175
- function count_unique_geometries(instances) {
176
- const set = new Set();
177
- for (const i of instances) set.add(i.geometry);
178
- return set.size;
179
- }
180
-
181
- /**
182
- *
183
- * @param {Mesh[]} instances
184
- * @returns {number}
185
- */
186
- function sum_unique_triangles(instances) {
187
- const seen = new Set();
188
- let total = 0;
189
- for (const i of instances) {
190
- if (seen.has(i.geometry)) continue;
191
- seen.add(i.geometry);
192
- total += i.geometry.primitive_count;
193
- }
194
- return total;
195
- }
196
-
197
- /**
198
- *
199
- * @param {Scene} scene
200
- */
201
- export function scene_optimize(scene) {
202
-
203
- // extract materials
204
- const materials = new Set();
205
- const geometries = new Set();
206
-
207
- for (const instance of scene.instances.instances) {
208
- materials.add(instance.material);
209
- geometries.add(instance.geometry);
210
- }
211
-
212
- optimize_geometry_set(geometries, scene.instances.instances);
213
-
214
- optimize_geometry_pieces(scene);
215
-
216
- /**
217
- *
218
- * @type {Set<ShadeTexture>}
219
- */
220
- const textures = new Set();
221
-
222
- for (const material of materials) {
223
- for (const t of material.textures) {
224
- textures.add(t);
225
- }
226
- }
227
-
228
- optimize_texture_set(textures);
229
-
230
- }
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { geometry_build_from_meshlet_geometry } from "../../geometry/geometry_build_from_meshlet_geometry.js";
3
+ import { geometry_deduplicate_vertices } from "../../geometry/geometry_deduplicate_vertices.js";
4
+ import { meshlet_geometry_build_from_geometry } from "../../geometry/meshlet_geometry_build_from_geometry.js";
5
+ import { SceneNode } from "../../loader/SceneNode.js";
6
+ import { deduplicate_geometries } from "./deduplicate_geometries.js";
7
+ import { geometry_deduplicate } from "./geometry/geometry_deduplicate.js";
8
+ import { optimize_texture_set } from "./optimize_texture_set.js";
9
+
10
+ /**
11
+ * @typedef {import("../../loader/SceneBundle.js").SceneBundle} SceneBundle
12
+ * @typedef {import("../../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
13
+ * @typedef {import("../../geometry/Geometry.js").Geometry} Geometry
14
+ */
15
+
16
+ /**
17
+ * The nodes of a bundle that draw.
18
+ *
19
+ * @param {SceneBundle} bundle
20
+ * @returns {SceneNode[]}
21
+ */
22
+ function primitives_of(bundle) {
23
+ return bundle.nodes.filter(node => node.geometry !== null);
24
+ }
25
+
26
+ /**
27
+ * @param {Set<MeshletGeometry>} geometries
28
+ * @param {SceneNode[]} primitives
29
+ */
30
+ function optimize_geometry_set(geometries, primitives) {
31
+ const removed = deduplicate_geometries(Array.from(geometries));
32
+
33
+ if (removed.length > 0) {
34
+ console.log(`scene_optimize: removed ${removed.length} exact-duplicate geometries`);
35
+
36
+ const replace_map = new Map();
37
+
38
+ for (const [victim, master] of removed) {
39
+ replace_map.set(victim, master);
40
+ }
41
+
42
+ for (const primitive of primitives) {
43
+ if (replace_map.has(primitive.geometry)) {
44
+ primitive.geometry = replace_map.get(primitive.geometry);
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Detect equivalent triangle subsets across the surviving geometries (after exact dedup) and
52
+ * replace primitives with shared canonical pieces.
53
+ *
54
+ * - Single-piece replacement with identity transform: just swap geometry.
55
+ * - Single-piece with non-identity transform: swap geometry, premultiply the node's local by
56
+ * the piece's transform.
57
+ * - Multi-piece replacement: the node stops drawing and gains one child per piece, each at the
58
+ * piece's transform under it — so the node's own place, and anything already under it, is
59
+ * left exactly where it was.
60
+ *
61
+ * @param {SceneBundle} bundle
62
+ */
63
+ function optimize_geometry_pieces(bundle) {
64
+ const primitives = primitives_of(bundle);
65
+
66
+ /** @type {Map<MeshletGeometry, Geometry>} */
67
+ const mg_to_geom = new Map();
68
+ /** @type {Map<Geometry, MeshletGeometry>} canonical (input-derived) Geometry → its source MG */
69
+ const geom_to_source_mg = new Map();
70
+
71
+ for (const primitive of primitives) {
72
+ if (mg_to_geom.has(primitive.geometry)) {
73
+ continue;
74
+ }
75
+
76
+ let geom = geometry_build_from_meshlet_geometry(primitive.geometry);
77
+
78
+ // undo meshlet damage
79
+ geom = geometry_deduplicate_vertices(geom);
80
+
81
+ mg_to_geom.set(primitive.geometry, geom);
82
+ geom_to_source_mg.set(geom, primitive.geometry);
83
+ }
84
+
85
+ const geometries = Array.from(mg_to_geom.values());
86
+ const triangles_before = sum_unique_triangles(primitives);
87
+
88
+ if (geometries.length < 2) {
89
+ console.log(`scene_optimize: only ${geometries.length} unique geometries, skipping piece-level dedup`);
90
+ return;
91
+ }
92
+
93
+ const replacement_map = geometry_deduplicate({
94
+ geometries,
95
+ min_primitives: 64
96
+ });
97
+
98
+ /** @type {Map<Geometry, MeshletGeometry>} memoised MGs for newly-built piece Geometries */
99
+ const built_mg_for_geom = new Map();
100
+
101
+ const get_mg_for_geom = (geom) => {
102
+ const source = geom_to_source_mg.get(geom);
103
+
104
+ if (source !== undefined) return source;
105
+
106
+ let mg = built_mg_for_geom.get(geom);
107
+
108
+ if (mg === undefined) {
109
+ mg = meshlet_geometry_build_from_geometry(geom);
110
+ built_mg_for_geom.set(geom, mg);
111
+ }
112
+
113
+ return mg;
114
+ };
115
+
116
+ let primitives_swapped = 0;
117
+ let primitives_split = 0;
118
+ let primitives_added = 0;
119
+
120
+ const nodes = bundle.nodes;
121
+
122
+ // the bundle grows below; walk what was there
123
+ const node_count = nodes.length;
124
+
125
+ for (let index = 0; index < node_count; index++) {
126
+ const node = nodes[index];
127
+
128
+ if (node.geometry === null) {
129
+ continue;
130
+ }
131
+
132
+ const source_geom = mg_to_geom.get(node.geometry);
133
+ const entries = replacement_map.get(source_geom);
134
+
135
+ if (entries === undefined || entries.length === 0) continue;
136
+
137
+ if (entries.length === 1) {
138
+ const [transform, geom] = entries[0];
139
+ const new_mg = get_mg_for_geom(geom);
140
+
141
+ if (new_mg !== node.geometry) {
142
+ if (!transform.isIdentity()) {
143
+ node.local.multiply(transform);
144
+ node.local.updateMatrix();
145
+ }
146
+
147
+ node.geometry = new_mg;
148
+
149
+ primitives_swapped++;
150
+ }
151
+
152
+ continue;
153
+ }
154
+
155
+ // Multi-piece: the node keeps its place and stops drawing; each piece draws under it
156
+ const material = node.material;
157
+ const name = node.name;
158
+
159
+ node.geometry = null;
160
+ node.material = null;
161
+
162
+ primitives_split++;
163
+
164
+ for (const [transform, geom] of entries) {
165
+ const piece = new SceneNode();
166
+
167
+ piece.name = name;
168
+ piece.parent = index;
169
+ piece.geometry = get_mg_for_geom(geom);
170
+ piece.material = material;
171
+ piece.local.copy(transform);
172
+ piece.local.updateMatrix();
173
+
174
+ bundle.add_node(piece);
175
+
176
+ primitives_added++;
177
+ }
178
+ }
179
+
180
+ const after = primitives_of(bundle);
181
+ const triangles_after = sum_unique_triangles(after);
182
+ const unique_geoms_after = count_unique_geometries(after);
183
+
184
+ console.log(
185
+ `scene_optimize: piece-level dedup — `
186
+ + `${primitives_swapped} swapped, ${primitives_split} split, ${primitives_added} added; `
187
+ + `unique geometries ${geometries.length} → ${unique_geoms_after}; `
188
+ + `unique-geometry triangles ${triangles_before} → ${triangles_after} `
189
+ + `(saved ${triangles_before - triangles_after})`
190
+ );
191
+
192
+ // TODO rebuild meshlet BLASs, using high quality settings
193
+ }
194
+
195
+ /**
196
+ * @param {SceneNode[]} primitives
197
+ * @returns {number}
198
+ */
199
+ function count_unique_geometries(primitives) {
200
+ const set = new Set();
201
+
202
+ for (const p of primitives) set.add(p.geometry);
203
+
204
+ return set.size;
205
+ }
206
+
207
+ /**
208
+ * @param {SceneNode[]} primitives
209
+ * @returns {number}
210
+ */
211
+ function sum_unique_triangles(primitives) {
212
+ const seen = new Set();
213
+
214
+ let total = 0;
215
+
216
+ for (const p of primitives) {
217
+ if (seen.has(p.geometry)) continue;
218
+
219
+ seen.add(p.geometry);
220
+
221
+ total += p.geometry.primitive_count;
222
+ }
223
+
224
+ return total;
225
+ }
226
+
227
+ /**
228
+ * Make a loaded model cheaper to draw without changing what it looks like: exact-duplicate
229
+ * geometries collapse to one, equivalent pieces of different geometries are shared, and the
230
+ * textures the materials reach are deduplicated and downscaled where that loses nothing.
231
+ *
232
+ * The bundle is rewritten in place — it is the tool's, not a shared asset's.
233
+ *
234
+ * @param {SceneBundle} bundle
235
+ */
236
+ export function scene_optimize(bundle) {
237
+ assert.defined(bundle, 'bundle');
238
+ assert.equal(bundle.isSceneBundle, true, 'bundle.isSceneBundle !== true');
239
+
240
+ const primitives = primitives_of(bundle);
241
+
242
+ // extract materials
243
+ const materials = new Set();
244
+ const geometries = new Set();
245
+
246
+ for (const primitive of primitives) {
247
+ materials.add(primitive.material);
248
+ geometries.add(primitive.geometry);
249
+ }
250
+
251
+ optimize_geometry_set(geometries, primitives);
252
+ optimize_geometry_pieces(bundle);
253
+
254
+ /**
255
+ * @type {Set<ShadeTexture>}
256
+ */
257
+ const textures = new Set();
258
+
259
+ for (const material of materials) {
260
+ for (const t of material.textures) {
261
+ textures.add(t);
262
+ }
263
+ }
264
+
265
+ optimize_texture_set(textures);
266
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * An entity's world bounds as the GPU holds them, read back.
3
+ *
4
+ * The box the renderer culls a primitive by is derived on the GPU from its geometry under the
5
+ * `global` the hierarchy pass composed — which for a subtree the GPU drives is a matrix the CPU
6
+ * never sees, and for a skinned primitive is the deformed clone's box rather than the rest pose's.
7
+ * A consumer that wants the box that is drawn — an editor's selection outline, a framing camera —
8
+ * asks here: {@link request} once a frame for each entity it cares about, and {@link get} for the
9
+ * last box that landed. A box lands a frame or two after it was asked for, at the head of a frame,
10
+ * never mid-update; until the first lands there is no answer, and a request that was dropped —
11
+ * the row changed hands — leaves the last answer standing.
12
+ *
13
+ * One request per entity per frame is the intended use; the readback service batches a frame's
14
+ * requests into one copy, or one gather dispatch past its threshold.
15
+ */
16
+ export class GPUEntityBoundsReadback {
17
+ /**
18
+ * @param {import("../../buffer/table/GPUDatabaseReadback.js").GPUDatabaseReadback} readback the
19
+ * scene database's
20
+ * @param {import("./GPUSceneRows.js").GPUSceneRows} rows
21
+ */
22
+ constructor(readback: import("../../buffer/table/GPUDatabaseReadback.js").GPUDatabaseReadback, rows: import("./GPUSceneRows.js").GPUSceneRows);
23
+ /**
24
+ * How many entities have a box here, delivered or awaited.
25
+ *
26
+ * @returns {number}
27
+ */
28
+ get tracked_count(): number;
29
+ /**
30
+ * Ask for an entity's box as the GPU holds it this frame. Nothing is asked for an entity with
31
+ * no mesh row — no primitive is drawn for it, so there is no box to read.
32
+ *
33
+ * @param {number} entity
34
+ * @returns {boolean} whether a row was asked for
35
+ */
36
+ request(entity: number): boolean;
37
+ /**
38
+ * The last box that landed for an entity.
39
+ *
40
+ * @param {number} entity
41
+ * @param {ArrayLike<number>|Float32Array|Float64Array|number[]} target aabb3, `x0,y0,z0,x1,y1,z1`
42
+ * @returns {boolean} whether one has; `false` leaves `target` alone
43
+ */
44
+ get(entity: number, target: ArrayLike<number> | Float32Array | Float64Array | number[]): boolean;
45
+ /**
46
+ * Stop keeping an entity's box. A request already on the device lands in memory nothing reads.
47
+ *
48
+ * @param {number} entity
49
+ */
50
+ forget(entity: number): void;
51
+ #private;
52
+ }
53
+ //# sourceMappingURL=GPUEntityBoundsReadback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GPUEntityBoundsReadback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;GAcG;AACH;IA8BI;;;;OAIG;IACH,sBAJW,OAAO,2CAA2C,EAAE,mBAAmB,QAEvE,OAAO,mBAAmB,EAAE,YAAY,EAUlD;IAED;;;;OAIG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,gBAHW,MAAM,GACJ,OAAO,CAyBnB;IAED;;;;;;OAMG;IACH,YAJW,MAAM,UACN,UAAU,MAAM,CAAC,GAAC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAClD,OAAO,CAgBnB;IAED;;;;OAIG;IACH,eAFW,MAAM,QAIhB;;CACJ"}