@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 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/main.js"],"names":[],"mappings":"AA4FA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CA8PzB"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/main.js"],"names":[],"mappings":"AAmGA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAqQzB"}
@@ -5,6 +5,8 @@ import { OrbitalCameraController } from "../../renderer/camera/OrbitalCameraCont
5
5
  import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
6
6
  import { create_frame_loop } from "../../renderer/create_frame_loop.js";
7
7
  import { make_sunlight } from "../../renderer/light/make_sunlight.js";
8
+ import { place_light } from "../../renderer/light/place_light.js";
9
+ import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
8
10
  import { load_gltf } from "../../renderer/loader/gltf/load_gltf.js";
9
11
  import { Renderer } from "../../renderer/Renderer.js";
10
12
  import { Scene } from "../../renderer/scene/Scene.js";
@@ -12,6 +14,11 @@ import { gpu_texture_compression_support } from "../../renderer/texture/format/g
12
14
  import { load_default_environment } from "../load_default_environment.js";
13
15
  import { make_playground_asset_manager } from "../make_playground_asset_manager.js";
14
16
  import { texture_inventory } from "./texture_inventory.js";
17
+ import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
18
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
19
+ import { prefab_compile } from "../../../engine/graphics3/prefab/prefab_compile.js";
20
+ import { prefab_place, prefab_unplace } from "../../../engine/graphics3/prefab/prefab_place.js";
21
+ import { shade_bundle_bounds } from "../../../engine/graphics3/shade_bundle_bounds.js";
15
22
 
16
23
  /**
17
24
  * The same scene, once as JPEG and once as KTX2/Basis, with the VRAM each costs.
@@ -145,8 +152,11 @@ export async function start() {
145
152
 
146
153
  const scene = new Scene();
147
154
 
155
+ // the sun stands at an entity, so the scene names a dataset for it
156
+ scene.dataset = new EntityComponentDataset();
157
+
148
158
  // Sponza carries no light of its own, and an unlit scene tells you nothing about a texture.
149
- scene.lights.add(make_sunlight({ intensity: 7.2 }));
159
+ place_light(scene, make_sunlight({ intensity: 7.2 }));
150
160
 
151
161
  // document.body rather than the canvas: the controller starts a keyboard device, and only a
152
162
  // focusable element can receive key events — body carries tabindex for exactly that.
@@ -171,7 +181,8 @@ export async function start() {
171
181
  *
172
182
  * @type {Node3D[]}
173
183
  */
174
- let loaded_roots = [];
184
+ /** @type {ReturnType<typeof prefab_place>|null} the model on the screen */
185
+ let loaded = null;
175
186
 
176
187
  /**
177
188
  * Load one variant into an emptied scene and record what its textures cost.
@@ -184,8 +195,10 @@ export async function start() {
184
195
  async function measure(label, url, texture_support) {
185
196
  set_status(`loading ${label}…`);
186
197
 
187
- scene.remove(loaded_roots);
188
- loaded_roots = [];
198
+ if (loaded !== null) {
199
+ prefab_unplace(renderer.scenes.obtain(scene), scene.dataset, loaded);
200
+ loaded = null;
201
+ }
189
202
 
190
203
  const started = performance.now();
191
204
 
@@ -208,10 +221,11 @@ export async function start() {
208
221
 
209
222
  const load_ms = performance.now() - started;
210
223
 
211
- scene.add(bundle.scenes);
212
- loaded_roots = bundle.scenes;
224
+ loaded = prefab_place(renderer.scenes.obtain(scene), scene.dataset, prefab_compile(bundle), new Transform64());
225
+
226
+ const bounds = new AABB3();
213
227
 
214
- const bounds = scene.instances.bounding_box;
228
+ shade_bundle_bounds(bounds, bundle);
215
229
 
216
230
  camera_frame_sphere(
217
231
  controller,
@@ -221,7 +235,7 @@ export async function start() {
221
235
 
222
236
  controller.movement_speed_scale = Math.max(bounds.width, bounds.height, bounds.depth) * 0.1;
223
237
 
224
- const inventory = texture_inventory(bundle.scenes);
238
+ const inventory = texture_inventory(bundle.nodes);
225
239
 
226
240
  /*
227
241
  Upload every texture explicitly rather than letting the first frame do it.
@@ -11,13 +11,13 @@
11
11
  * silently disagree the moment a mip chain is generated on the device rather than shipped. This says
12
12
  * *what* is resident; the manager says what it costs.
13
13
  *
14
- * @param {Node3D[]} roots
14
+ * @param {SceneNode[]} nodes a bundle's nodes
15
15
  * @returns {{count: number, formats: Map<string, {count: number, slots: Set<string>}>, textures: ShadeTexture[]}}
16
16
  *
17
17
  * @author Alex Goldring
18
18
  * @copyright Company Named Limited (c) 2026
19
19
  */
20
- export function texture_inventory(roots: Node3D[]): {
20
+ export function texture_inventory(nodes: SceneNode[]): {
21
21
  count: number;
22
22
  formats: Map<string, {
23
23
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"texture_inventory.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/texture_inventory.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCANW,QAAQ,GACN;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,MAAM,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,MAAM,CAAC,CAAA;KAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAC,CAgEhH"}
1
+ {"version":3,"file":"texture_inventory.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/texture_inventory.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCANW,WAAW,GACT;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,MAAM,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,MAAM,CAAC,CAAA;KAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAC,CA+DhH"}
@@ -30,24 +30,23 @@ const SLOTS = [
30
30
  * silently disagree the moment a mip chain is generated on the device rather than shipped. This says
31
31
  * *what* is resident; the manager says what it costs.
32
32
  *
33
- * @param {Node3D[]} roots
33
+ * @param {SceneNode[]} nodes a bundle's nodes
34
34
  * @returns {{count: number, formats: Map<string, {count: number, slots: Set<string>}>, textures: ShadeTexture[]}}
35
35
  *
36
36
  * @author Alex Goldring
37
37
  * @copyright Company Named Limited (c) 2026
38
38
  */
39
- export function texture_inventory(roots) {
39
+ export function texture_inventory(nodes) {
40
40
  const formats = new Map();
41
-
42
41
  const images = new Set();
43
42
  const textures = new Set();
44
43
 
45
- for (const root of roots) {
46
- root.traverse(node => {
44
+ for (const node of nodes) {
45
+ {
47
46
  const material = node.material;
48
47
 
49
48
  if (material === undefined || material === null) {
50
- return;
49
+ continue;
51
50
  }
52
51
 
53
52
  for (const [slot, role] of SLOTS) {
@@ -91,7 +90,7 @@ export function texture_inventory(roots) {
91
90
 
92
91
  formats.set(format, entry);
93
92
  }
94
- });
93
+ }
95
94
  }
96
95
 
97
96
  return { count: images.size, formats, textures: [...textures] };
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/main.js"],"names":[],"mappings":"AAiEA,uCA6yBC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/main.js"],"names":[],"mappings":"AAoEA,uCAmzBC"}
@@ -3,11 +3,14 @@ import { DEG_TO_RAD } from "../../../core/math/DEG_TO_RAD.js";
3
3
  import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
4
4
  import { create_frame_loop } from "../../renderer/create_frame_loop.js";
5
5
  import { make_sunlight } from "../../renderer/light/make_sunlight.js";
6
+ import { place_light } from "../../renderer/light/place_light.js";
7
+ import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
6
8
  import { Renderer } from "../../renderer/Renderer.js";
7
9
  import { Scene } from "../../renderer/scene/Scene.js";
8
10
  import { load_default_environment } from "../load_default_environment.js";
9
11
  import { make_grid_texture } from "./make_grid_texture.js";
10
12
  import { GROUND_TRIANGULATION, make_ground } from "./make_ground.js";
13
+ import { remove_primitive } from "../../renderer/scene/rows/place_primitive.js";
11
14
  import { FramePhase } from "../../renderer/extension/FramePhase.js";
12
15
  import { CaptureSceneColor } from "./capture_scene_color.js";
13
16
  import { depth_step_across_seam } from "./depth_step_across_seam.js";
@@ -111,13 +114,19 @@ export async function start() {
111
114
 
112
115
  const scene = new Scene();
113
116
 
117
+ // the sun stands at an entity, so the scene names a dataset for it
118
+ scene.dataset = new EntityComponentDataset();
119
+
120
+ // the scene's rows are on the renderer's context for it: where the ground goes
121
+ const scene_context = renderer.scenes.obtain(scene);
122
+
114
123
  const sun = make_sunlight({
115
124
  intensity: 0.9,
116
125
  direction: new Vector3(0.17, -1, 0.17),
117
126
  temperature: 5500,
118
127
  });
119
128
 
120
- scene.lights.add(sun);
129
+ place_light(scene, sun);
121
130
 
122
131
  /**
123
132
  * Two textures differing only in whether the sampler is granted anisotropy, built up front so
@@ -132,6 +141,7 @@ export async function start() {
132
141
  };
133
142
 
134
143
  /** @type {Mesh|undefined} */
144
+ /** @type {{entity: number, geometry: MeshletGeometry}|undefined} */
135
145
  let ground;
136
146
 
137
147
  /**
@@ -149,10 +159,10 @@ export async function start() {
149
159
  */
150
160
  function rebuild_ground(segments, triangulation, yaw_degrees = 0, anisotropy = true, extent = 425) {
151
161
  if (ground !== undefined) {
152
- scene.remove(ground);
162
+ remove_primitive(scene_context, ground.entity);
153
163
  }
154
164
 
155
- ground = make_ground({
165
+ ground = make_ground(scene_context, {
156
166
  albedo: albedos[anisotropy ? 'anisotropic' : 'isotropic'],
157
167
  extent,
158
168
  segments,
@@ -160,7 +170,6 @@ export async function start() {
160
170
  yaw_degrees,
161
171
  });
162
172
 
163
- scene.add(ground);
164
173
 
165
174
  /*
166
175
  Proof the index buffer actually reached the GPU differently, published so a null result on
@@ -13,6 +13,7 @@ export function uv_scale_for(extent: number): number;
13
13
  /**
14
14
  * The ground plane, and nothing else — the brief's scene reproduces with this alone.
15
15
  *
16
+ * @param {GPUSceneContext} scene_context the scene's context — its rows are where the ground goes
16
17
  * @param {object} options
17
18
  * @param {ShadeTexture} options.albedo
18
19
  * @param {number} [options.extent] edge length of the quad in world units. Bigger is worse
@@ -25,9 +26,10 @@ export function uv_scale_for(extent: number): number;
25
26
  * @param {number} [options.yaw_degrees] rotation about +Y, applied after the quad is laid flat
26
27
  * @param {number} [options.roughness]
27
28
  * @param {number} [options.metallic]
28
- * @returns {Mesh}
29
+ * @returns {{entity: number, geometry: MeshletGeometry}} the ground's entity, and the meshlets it
30
+ * draws — the index order a triangulation A/B has to be able to prove reached the GPU
29
31
  */
30
- export function make_ground({ albedo, segments, indices, extent, yaw_degrees, roughness, metallic, }: {
32
+ export function make_ground(scene_context: GPUSceneContext, { albedo, segments, indices, extent, yaw_degrees, roughness, metallic, }: {
31
33
  albedo: ShadeTexture;
32
34
  extent?: number;
33
35
  segments?: number;
@@ -35,7 +37,13 @@ export function make_ground({ albedo, segments, indices, extent, yaw_degrees, ro
35
37
  yaw_degrees?: number;
36
38
  roughness?: number;
37
39
  metallic?: number;
38
- }): Mesh;
40
+ }): {
41
+ entity: number;
42
+ geometry: MeshletGeometry;
43
+ };
44
+ /**
45
+ * @typedef {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
46
+ */
39
47
  /**
40
48
  * Edge length of the ground quad, in world units.
41
49
  * @type {number}
@@ -66,5 +74,6 @@ export namespace GROUND_TRIANGULATION {
66
74
  export let flipped: number[];
67
75
  export let rotated: number[];
68
76
  }
69
- import { Mesh } from "../../renderer/scene/Mesh.js";
77
+ export type GPUSceneContext = import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext;
78
+ import { MeshletGeometry } from "../../renderer/geometry/MeshletGeometry.js";
70
79
  //# sourceMappingURL=make_ground.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"make_ground.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/make_ground.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,qCAHW,MAAM,GACJ,MAAM,CAIlB;AAyCD;;;;;;;;;;;;;;;;GAgBG;AACH;IAbiC,MAAM;IACX,MAAM,GAAvB,MAAM;IAKW,QAAQ,GAAzB,MAAM;IACa,OAAO,GAA1B,MAAM,EAAE;IACS,WAAW,GAA5B,MAAM;IACW,SAAS,GAA1B,MAAM;IACW,QAAQ,GAAzB,MAAM;IACJ,IAAI,CA2EhB;AAtJD;;;GAGG;AACH,4BAFU,MAAM,CAEiB;;;;;;;;;;;;;;;;;;;mCAmCvB,MAAM,EAAE;;;;;;;qBAzCG,8BAA8B"}
1
+ {"version":3,"file":"make_ground.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/make_ground.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;GAUG;AACH,qCAHW,MAAM,GACJ,MAAM,CAIlB;AAyCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CAhBW,eAAe;IAEO,MAAM;IACX,MAAM,GAAvB,MAAM;IAKW,QAAQ,GAAzB,MAAM;IACa,OAAO,GAA1B,MAAM,EAAE;IACS,WAAW,GAA5B,MAAM;IACW,SAAS,GAA1B,MAAM;IACW,QAAQ,GAAzB,MAAM;IACJ;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAC,CA0EvD;AA1JD;;GAEG;AAEH;;;GAGG;AACH,4BAFU,MAAM,CAEiB;;;;;;;;;;;;;;;;;;;mCAmCvB,MAAM,EAAE;;;;;;;8BA1CL,OAAO,yCAAyC,EAAE,eAAe;gCAR9C,4CAA4C"}
@@ -6,7 +6,12 @@ import { MeshletGeometry } from "../../renderer/geometry/MeshletGeometry.js";
6
6
  import { make_plane_geometry } from "../../renderer/geometry/primitives/make_plane_geometry.js";
7
7
  import { StandardAttributes } from "../../renderer/geometry/StandardAttributes.js";
8
8
  import { StandardShadeMaterial } from "../../renderer/material/StandardShadeMaterial.js";
9
- import { Mesh } from "../../renderer/scene/Mesh.js";
9
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
10
+ import { place_primitive } from "../../renderer/scene/rows/place_primitive.js";
11
+
12
+ /**
13
+ * @typedef {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
14
+ */
10
15
 
11
16
  /**
12
17
  * Edge length of the ground quad, in world units.
@@ -71,6 +76,7 @@ export const GROUND_TRIANGULATION = {
71
76
  /**
72
77
  * The ground plane, and nothing else — the brief's scene reproduces with this alone.
73
78
  *
79
+ * @param {GPUSceneContext} scene_context the scene's context — its rows are where the ground goes
74
80
  * @param {object} options
75
81
  * @param {ShadeTexture} options.albedo
76
82
  * @param {number} [options.extent] edge length of the quad in world units. Bigger is worse
@@ -83,9 +89,10 @@ export const GROUND_TRIANGULATION = {
83
89
  * @param {number} [options.yaw_degrees] rotation about +Y, applied after the quad is laid flat
84
90
  * @param {number} [options.roughness]
85
91
  * @param {number} [options.metallic]
86
- * @returns {Mesh}
92
+ * @returns {{entity: number, geometry: MeshletGeometry}} the ground's entity, and the meshlets it
93
+ * draws — the index order a triangulation A/B has to be able to prove reached the GPU
87
94
  */
88
- export function make_ground({
95
+ export function make_ground(scene_context, {
89
96
  albedo,
90
97
  segments = 1,
91
98
  indices = GROUND_TRIANGULATION.default,
@@ -115,12 +122,9 @@ export function make_ground({
115
122
  geometry.index = Attribute.from(new Uint32Array(indices), 1, StandardAttributes.Index);
116
123
  }
117
124
 
118
- const mesh = new Mesh();
125
+ const meshlets = new MeshletGeometry();
119
126
 
120
- mesh.name = 'ground';
121
- mesh.geometry = new MeshletGeometry();
122
-
123
- meshlet_geometry_build_from_geometry(geometry, mesh.geometry);
127
+ meshlet_geometry_build_from_geometry(geometry, meshlets);
124
128
 
125
129
  const material = new StandardShadeMaterial();
126
130
 
@@ -128,7 +132,6 @@ export function make_ground({
128
132
  material.roughness_factor = roughness;
129
133
  material.metallic_factor = metallic;
130
134
 
131
- mesh.material = material;
132
135
 
133
136
  /*
134
137
  −90° about X lays the plane flat with its normal pointing at +Y.
@@ -140,9 +143,8 @@ export function make_ground({
140
143
  stays exactly where it was on screen while the two triangles swap roles, which is the one
141
144
  experiment that can tell a property of the *edge* from a property of a *triangle*.
142
145
 
143
- `Transform64` keeps its matrix by hand, so the write is only real after `updateMatrix`, and the
144
- world bounds the `meshes` table publishes only exist after `updateMatrices` — a mesh added on
145
- its own is never reached by the scene's hierarchy walk.
146
+ `Transform64` keeps its matrix by hand, so the write is only real after `updateMatrix`; the
147
+ placement copies the transform, and the row's bounds are the GPU's to derive from it.
146
148
  */
147
149
  const rotation = Quaternion.fromAxisAngle(Vector3.right, -Math.PI / 2);
148
150
 
@@ -153,9 +155,12 @@ export function make_ground({
153
155
  rotation.normalize();
154
156
  }
155
157
 
156
- mesh.transform_local.setRotation(rotation.x, rotation.y, rotation.z, rotation.w);
157
- mesh.transform_local.updateMatrix();
158
- mesh.updateMatrices();
158
+ const transform = new Transform64();
159
+
160
+ transform.setRotation(rotation.x, rotation.y, rotation.z, rotation.w);
161
+ transform.updateMatrix();
162
+
163
+ const entity = place_primitive(scene_context, meshlets, material, transform, { name: 'ground' });
159
164
 
160
- return mesh;
165
+ return { entity, geometry: meshlets };
161
166
  }
@@ -166,9 +166,9 @@ export function install_effect_editor({ dataset, world, sprites, host, selector,
166
166
  const entity = entities[name];
167
167
 
168
168
  /*
169
- Removed and added rather than assigned: see the note at the top. The system's `unlink` takes
170
- the emitter node out of the scene, which retires its table row and kills the particles that
171
- were running the old program; `link` builds a new one on the next comparison.
169
+ Removed and added rather than assigned: see the note at the top. The system's `unlink`
170
+ retires the emitter, which frees its table row and kills the particles that were running
171
+ the old program; `link` builds a new one on the next comparison.
172
172
  */
173
173
  dataset.removeComponentFromEntity(entity, ParticleEffect);
174
174
  dataset.addComponentToEntity(entity, component);
@@ -85,9 +85,10 @@ async function main() {
85
85
  /** @type {import("../../renderer/particles/GPUParticleSystem.js").GPUParticleSystem|null} */
86
86
  let system = null;
87
87
 
88
- const { scene, emitters } = await build_particle_scene();
88
+ const world = await build_particle_scene();
89
+ const { scene, emitters } = world;
89
90
 
90
- Object.assign(globalThis, { camera, controller, scene, emitters });
91
+ Object.assign(globalThis, { camera, controller, scene, emitters, world });
91
92
 
92
93
  /**
93
94
  * Where the camera is and what it orbits, as plain numbers: enough to put another instance of
@@ -143,13 +144,13 @@ async function main() {
143
144
 
144
145
  element("burst").addEventListener("click", () => {
145
146
  /*
146
- A row is assigned when the system sweeps the scene, which happens inside the frame it
147
- simulates — so before the first frame the emitter has none and `spawn` refuses. And a burst
148
- queued while the particles are switched off is never drained: the ring only empties inside
149
- a simulated frame, so the clicks would pile up and arrive together, seconds late, the
150
- moment they are switched back on. Both are the same answer: the button does nothing.
147
+ The emitter has a row from the moment configure_particles registered it, and none before
148
+ — `spawn` refuses an emitter it does not hold. And a burst queued while the particles are
149
+ switched off is never drained: the ring only empties inside a simulated frame, so the
150
+ clicks would pile up and arrive together, seconds late, the moment they are switched back
151
+ on. Both are the same answer: the button does nothing.
151
152
  */
152
- if (system === null || !renderer.feature_particles_enabled || emitters.sparks.row === -1) {
153
+ if (system === null || !renderer.feature_particles_enabled || system.registry.context(emitters.sparks) === undefined) {
153
154
  return;
154
155
  }
155
156
 
@@ -190,7 +191,7 @@ async function main() {
190
191
  renderer.feature_automatic_exposure_enabled = false;
191
192
  renderer.exposure_compensation = 1.2;
192
193
 
193
- system = configure_particles(renderer, scene);
194
+ system = configure_particles(renderer, world);
194
195
  globalThis.particles = system;
195
196
 
196
197
  apply_settings();
@@ -220,7 +221,7 @@ async function main() {
220
221
  renderer.resize(width, height);
221
222
  }
222
223
 
223
- animate_particle_scene(emitters, time);
224
+ animate_particle_scene(world, system, time);
224
225
  controller.update();
225
226
 
226
227
  renderer.render(camera, scene, dt);
@@ -43,22 +43,27 @@ export function smoke_effect(): {
43
43
  /**
44
44
  * Put a fire + smoke plume in a scene, optionally riding a bone.
45
45
  *
46
- * An emitter is a scene node, so this is scene-graph work and nothing else: build the two emitters,
47
- * parent them to the bone if there is one, add them to the scene. The particle system finds them
48
- * on its next frame, gives them rows, and the GPU composes the bone's motion into every particle
49
- * they spawn — there is no per-frame call to make.
46
+ * An emitter runs at an entity's row, so this is entity work and nothing else: spawn an entity per
47
+ * emitter in the scene's dataset — attached to the bone when there is one — give each a row in the
48
+ * scene context, and register the emitter at it. The GPU composes the bone's motion into every
49
+ * particle they spawn; there is no per-frame call to make.
50
50
  *
51
- * @param {import("../../renderer/scene/Scene.js").Scene} scene
51
+ * @param {GPUParticleSystem} particles the scene's particle system; the entities go in its scene
52
+ * context's dataset
52
53
  * @param {object} [options]
53
- * @param {import("../../renderer/scene/Node3D.js").Node3D} [options.bone] a node, already in the
54
- * scene, for both emitters to hang off
55
- * @returns {{fire: ParticleEmitter, smoke: ParticleEmitter}}
54
+ * @param {number} [options.bone] an entity already holding a row in the scene context, for both
55
+ * emitters to hang off
56
+ * @returns {{fire: ParticleEmitter, smoke: ParticleEmitter, entities: {fire: number, smoke: number}}}
56
57
  */
57
- export function register_campfire(scene: import("../../renderer/scene/Scene.js").Scene, { bone }?: {
58
- bone?: import("../../renderer/scene/Node3D.js").Node3D;
58
+ export function register_campfire(particles: GPUParticleSystem, { bone }?: {
59
+ bone?: number;
59
60
  }): {
60
61
  fire: ParticleEmitter;
61
62
  smoke: ParticleEmitter;
63
+ entities: {
64
+ fire: number;
65
+ smoke: number;
66
+ };
62
67
  };
63
68
  import { ParticleLayout } from "../../renderer/particles/layout/ParticleLayout.js";
64
69
  import { ParticleEmitter } from "../../renderer/particles/runtime/ParticleEmitter.js";
@@ -1 +1 @@
1
- {"version":3,"file":"particle_prototype.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_prototype.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH;IALsG,UAAU,GAArG,OAAO,iDAAiD,EAAE,sBAAsB;IACW,WAAW,GAAtG,OAAO,iDAAiD,EAAE,sBAAsB;IAC/D,eAAe,GAAhC,MAAM;IACJ;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CA+GrE;AAED;;;;GAIG;AACH,gCAFa;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAYrE;AAED;;;;;;;;;;;;;GAaG;AACH,yCANW,OAAO,+BAA+B,EAAE,KAAK;IAEa,IAAI,GAA9D,OAAO,gCAAgC,EAAE,MAAM;IAE7C;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAC,CAe3D;+BAvL8B,mDAAmD;gCAElD,qDAAqD"}
1
+ {"version":3,"file":"particle_prototype.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_prototype.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH;IALsG,UAAU,GAArG,OAAO,iDAAiD,EAAE,sBAAsB;IACW,WAAW,GAAtG,OAAO,iDAAiD,EAAE,sBAAsB;IAC/D,eAAe,GAAhC,MAAM;IACJ;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CA+GrE;AAED;;;;GAIG;AACH,gCAFa;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAYrE;AAED;;;;;;;;;;;;;;GAcG;AACH;IAJ4B,IAAI,GAArB,MAAM;IAEJ;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAA;CAAC,CAkBpG;+BAjM8B,mDAAmD;gCAElD,qDAAqD"}
@@ -9,6 +9,12 @@ import { VM_BUILTIN } from "../../renderer/particles/isa/ParticleVMISA.js";
9
9
  import { ParticleLayout } from "../../renderer/particles/layout/ParticleLayout.js";
10
10
  import { create_particle_effect } from "../../renderer/particles/runtime/create_particle_effect.js";
11
11
  import { ParticleEmitter } from "../../renderer/particles/runtime/ParticleEmitter.js";
12
+ import { row_of_entity } from "../../renderer/scene/rows/GPUSceneRows.js";
13
+ import { GPUStateAuthorityFlags } from "../../../engine/ecs/gpu/GPUStateAuthorityFlags.js";
14
+ import { gpu_authority_declare } from "../../../engine/ecs/gpu/gpu_authority_declare.js";
15
+ import { gpu_authority_grant } from "../../../engine/ecs/gpu/gpu_authority_grant.js";
16
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
17
+ import { TransformAttachment } from "../../../engine/ecs/transform-attachment/TransformAttachment.js";
12
18
 
13
19
  /**
14
20
  * Worked examples of authoring particle effects with the node graph + placing them in a scene for a
@@ -165,28 +171,63 @@ export function smoke_effect() {
165
171
  /**
166
172
  * Put a fire + smoke plume in a scene, optionally riding a bone.
167
173
  *
168
- * An emitter is a scene node, so this is scene-graph work and nothing else: build the two emitters,
169
- * parent them to the bone if there is one, add them to the scene. The particle system finds them
170
- * on its next frame, gives them rows, and the GPU composes the bone's motion into every particle
171
- * they spawn — there is no per-frame call to make.
174
+ * An emitter runs at an entity's row, so this is entity work and nothing else: spawn an entity per
175
+ * emitter in the scene's dataset — attached to the bone when there is one — give each a row in the
176
+ * scene context, and register the emitter at it. The GPU composes the bone's motion into every
177
+ * particle they spawn; there is no per-frame call to make.
172
178
  *
173
- * @param {import("../../renderer/scene/Scene.js").Scene} scene
179
+ * @param {GPUParticleSystem} particles the scene's particle system; the entities go in its scene
180
+ * context's dataset
174
181
  * @param {object} [options]
175
- * @param {import("../../renderer/scene/Node3D.js").Node3D} [options.bone] a node, already in the
176
- * scene, for both emitters to hang off
177
- * @returns {{fire: ParticleEmitter, smoke: ParticleEmitter}}
182
+ * @param {number} [options.bone] an entity already holding a row in the scene context, for both
183
+ * emitters to hang off
184
+ * @returns {{fire: ParticleEmitter, smoke: ParticleEmitter, entities: {fire: number, smoke: number}}}
178
185
  */
179
- export function register_campfire(scene, { bone } = {}) {
186
+ export function register_campfire(particles, { bone = -1 } = {}) {
187
+ const scene_context = particles.scene_context;
188
+ const dataset = scene_context.scene.dataset;
189
+
180
190
  const fire = ParticleEmitter.from({ ...fire_effect().emitter, name: "fire" });
181
191
  const smoke = ParticleEmitter.from({ ...smoke_effect().emitter, name: "smoke" });
182
192
 
183
- if (bone !== undefined) {
184
- bone.addChild(fire);
185
- bone.addChild(smoke);
186
- bone.updateMatrices();
193
+ const entities = {
194
+ fire: place(dataset, scene_context, bone),
195
+ smoke: place(dataset, scene_context, bone),
196
+ };
197
+
198
+ particles.add_emitter(fire, row_of_entity(entities.fire));
199
+ particles.add_emitter(smoke, row_of_entity(entities.smoke));
200
+
201
+ return { fire, smoke, entities };
202
+ }
203
+
204
+ /**
205
+ * An entity with a row: at the origin, or riding `bone` with no offset.
206
+ *
207
+ * @param {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} dataset
208
+ * @param {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} scene_context
209
+ * @param {number} bone an entity, or -1
210
+ * @returns {number}
211
+ */
212
+ function place(dataset, scene_context, bone) {
213
+ const entity = dataset.createEntity();
214
+
215
+ if (bone !== -1) {
216
+ const attachment = new TransformAttachment();
217
+
218
+ attachment.parent = bone;
219
+
220
+ dataset.addComponentToEntity(entity, attachment);
221
+
222
+ // the row's world is the GPU's to compose from the bone's; nothing on this side reads it,
223
+ // and nothing on this side composes it, so the authority says so
224
+ gpu_authority_declare(dataset, entity);
225
+ gpu_authority_grant(dataset, entity, GPUStateAuthorityFlags.Transform64);
187
226
  }
188
227
 
189
- scene.add([fire, smoke]);
228
+ dataset.addComponentToEntity(entity, new Transform64());
229
+
230
+ scene_context.rows.acquire(entity);
190
231
 
191
- return { fire, smoke };
232
+ return entity;
192
233
  }