@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
@@ -21,11 +21,11 @@ export const NODE3D_STRUCT: WebGPUStruct;
21
21
  /**
22
22
  * Reserved row id for the scene root in the GPU `transforms` table.
23
23
  *
24
- * The scene's transform record sits at index 0 — set up once during
25
- * {@link GPUSceneContext.build} from `scene.transform_local`. Any node
26
- * whose CPU-side `parent` is null (i.e. a top-level node) gets a GPU
27
- * `parent` field of `NODE3D_SCENE_ID`, so it inherits the scene's
28
- * world transform.
24
+ * The root's record sits at index 0 — identity, written once by
25
+ * `GPUSceneContext.build`, its first. An entity whose attachment names
26
+ * no entity with a row gets a GPU `parent` field of `NODE3D_SCENE_ID`
27
+ * and carries its world pose as its local one, so the composition is
28
+ * exact.
29
29
  *
30
30
  * The transform-hierarchy pass also treats `parent == NODE3D_SCENE_ID`
31
31
  * as the walk termination condition. That makes 0 — the natural value
@@ -69,11 +69,11 @@ export const NODE3D_STRUCT = WebGPUStruct.from({
69
69
  /**
70
70
  * Reserved row id for the scene root in the GPU `transforms` table.
71
71
  *
72
- * The scene's transform record sits at index 0 — set up once during
73
- * {@link GPUSceneContext.build} from `scene.transform_local`. Any node
74
- * whose CPU-side `parent` is null (i.e. a top-level node) gets a GPU
75
- * `parent` field of `NODE3D_SCENE_ID`, so it inherits the scene's
76
- * world transform.
72
+ * The root's record sits at index 0 — identity, written once by
73
+ * `GPUSceneContext.build`, its first. An entity whose attachment names
74
+ * no entity with a row gets a GPU `parent` field of `NODE3D_SCENE_ID`
75
+ * and carries its world pose as its local one, so the composition is
76
+ * exact.
77
77
  *
78
78
  * The transform-hierarchy pass also treats `parent == NODE3D_SCENE_ID`
79
79
  * as the walk termination condition. That makes 0 — the natural value
@@ -5,11 +5,9 @@
5
5
  export class Node3D {
6
6
  /**
7
7
  * Stable numeric id, unique across every Node3D instance (meshes,
8
- * lights, scenes, anchors). Used as the key in
9
- * `GPUSceneContext.id_mapping` to look up the node's row in the
10
- * GPU `transforms` table — the binding survives table compaction
11
- * or rebuild because it's tied to the JS object's identity, not
12
- * its position in any array.
8
+ * lights, scenes, anchors) — tied to the JS object's identity, not
9
+ * its position in any array. A node in a scene is bound to its rows
10
+ * through the object itself (`GPUSceneContext.node_rows`).
13
11
  *
14
12
  * @type {number}
15
13
  * @readonly
@@ -37,13 +35,34 @@ export class Node3D {
37
35
  * @param {boolean} v
38
36
  */
39
37
  set needsUpdate(v: boolean);
38
+ /**
39
+ * Where this node reports that it has moved — set by the {@link GPUSceneContext} that gives it
40
+ * rows, cleared when it takes them back. Null for a node no context holds, which is every node
41
+ * before it is added to a scene and every node after it leaves one.
42
+ *
43
+ * A node reports to one list, not several. Two contexts holding the same node would need two,
44
+ * and nothing in the engine does that: a `SceneManager` keeps one context per scene, and
45
+ * {@link GPUSceneContext} asserts when a node arrives already reporting somewhere else rather
46
+ * than quietly taking the claim and leaving the other context deaf.
47
+ *
48
+ * @type {Node3DDirtyList|null}
49
+ */
50
+ transform_dirty_list: Node3DDirtyList | null;
51
+ /**
52
+ * Handing a row back to the CPU has to be *reported*, not waited for: while the GPU owned the
53
+ * row nothing bumped this node's version, so nothing else would ever mark it as needing a
54
+ * write and the CPU would go on not writing a row it now owns.
55
+ *
56
+ * @param {TransformAuthority} value
57
+ */
58
+ set transform_authority(value: number);
40
59
  /**
41
60
  * Who writes this node's TRS in the GPU `transforms` table. Declared, never inferred — see
42
61
  * {@link TransformAuthority} for what each side owns and why guessing does not work.
43
62
  *
44
- * @type {TransformAuthority}
63
+ * @returns {TransformAuthority}
45
64
  */
46
- transform_authority: TransformAuthority;
65
+ get transform_authority(): number;
47
66
  /**
48
67
  * World transform, **derived** — {@link updateMatrices} recomputes it from
49
68
  * {@link transform_local} and the parent chain, so writing it directly is undone the moment
@@ -134,7 +153,7 @@ export class Node3D {
134
153
  readonly isNode3D: boolean;
135
154
  #private;
136
155
  }
137
- import { TransformAuthority } from "./TransformAuthority.js";
156
+ export type Node3DDirtyList = import("./Node3DDirtyList.js").Node3DDirtyList;
138
157
  import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
139
158
  import Vector3 from "../../../core/geom/Vector3.js";
140
159
  //# sourceMappingURL=Node3D.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Node3D.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/Node3D.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IAEI;;;;;;;;;;OAUG;IACH,aAHU,MAAM,CAGE;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAOT;;;;;;;;;;;OAWG;IACH,sBAEC;IAED;;OAEG;IACH,4BAIC;IAED;;;;;OAKG;IACH,qBAFU,kBAAkB,CAEiB;IAE7C;;;;;;OAMG;IACH,kBAFU,WAAW,CAEgB;IAErC;;;;;OAKG;IACH,iBAFU,WAAW,CAEe;IAEpC,YAAc;IAEd;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEL;IAYb;;;;;;OAMG;IACH,wBAMC;IAvBD;;;;;OAKG;IACH,uBAEC;IAiBD;;;;;OAKG;IACH,qBAEC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,6BAEC;IAED,uBAKC;IAED,gBAmBC;IAED;;;;OAIG;IACH,0BAHoB,MAAM,+BASzB;IAED;;;;;;OAMG;IACH,uBA0BC;IAED;;;OAGG;IACH,sBAFW,MAAM,EAAE,QAOlB;IAED;;;OAGG;IACH,gBAFW,MAAM,QAchB;IAIL;;;;;;OAMG;IACH,mBAFU,OAAO,CAEQ;;CATxB;mCAzPkC,yBAAyB;4BADhC,8CAA8C;oBAHtD,+BAA+B"}
1
+ {"version":3,"file":"Node3D.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/Node3D.js"],"names":[],"mappings":"AAYA;;;GAGG;AACH;IAEI;;;;;;;;OAQG;IACH,aAHU,MAAM,CAGE;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAOT;;;;;;;;;;;OAWG;IACH,sBAEC;IAED;;OAEG;IACH,4BAMC;IAED;;;;;;;;;;;OAWG;IACH,sBAFU,eAAe,GAAC,IAAI,CAEF;IA6C5B;;;;;;OAMG;IACH,uCAQC;IAzBD;;;;;OAKG;IACH,kCAEC;IAmBD;;;;;;OAMG;IACH,kBAFU,WAAW,CAEgB;IAErC;;;;;OAKG;IACH,iBAFU,WAAW,CAEe;IAEpC,YAAc;IAEd;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEL;IAYb;;;;;;OAMG;IACH,wBAMC;IAvBD;;;;;OAKG;IACH,uBAEC;IAiBD;;;;;OAKG;IACH,qBAEC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,6BAEC;IAED,uBAOC;IAED,gBAmBC;IAED;;;;OAIG;IACH,0BAHoB,MAAM,+BASzB;IAED;;;;;;OAMG;IACH,uBA4BC;IAED;;;OAGG;IACH,sBAFW,MAAM,EAAE,QAOlB;IAED;;;OAGG;IACH,gBAFW,MAAM,QAchB;IAIL;;;;;;OAMG;IACH,mBAFU,OAAO,CAEQ;;CATxB;8BAhUY,OAAO,sBAAsB,EAAE,eAAe;4BAJ/B,8CAA8C;oBAHtD,+BAA+B"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @typedef {import("./Node3D.js").Node3D} Node3D
3
+ */
4
+ /**
5
+ * Nodes whose transform has been touched since the last drain — how a {@link GPUSceneContext}
6
+ * finds out what moved, instead of asking every node it holds.
7
+ *
8
+ * A scene-wide scan is proportional to the scene and not to the frame: a version comparison is
9
+ * cheap, several tens of thousands of them are not, and the scan runs once per view. Movement is
10
+ * reported at the one place it happens — {@link Node3D.updateMatrices}, and the two other things
11
+ * that bump a node's version — so the list is what actually changed and the frame costs what it
12
+ * moved.
13
+ *
14
+ * {@link generation} is the drain counter, and a node stamps itself with it when it joins. That is
15
+ * what makes a repeat within one frame free: `updateMatrices` recurses into children, so a
16
+ * character's root moving reaches every joint under it, and reaching a joint twice — through the
17
+ * recursion and again through a call of its own — must not queue it twice.
18
+ *
19
+ * A node on the list is a node that *may* have moved, never a promise that it did. The consumer
20
+ * still compares versions: the membership sweep writes an arriving node's row itself, and that
21
+ * node is on the list as well.
22
+ */
23
+ export class Node3DDirtyList {
24
+ /**
25
+ * Bumped by {@link drain}. A node carries the value it last joined under; see the class note.
26
+ *
27
+ * @type {number}
28
+ */
29
+ generation: number;
30
+ /**
31
+ * @param {Node3D} node
32
+ */
33
+ add(node: Node3D): void;
34
+ /**
35
+ * How many nodes are waiting. For a spec, and for anything that wants to know whether a frame
36
+ * has anything to do before it starts doing it.
37
+ *
38
+ * @returns {number}
39
+ */
40
+ get size(): number;
41
+ /**
42
+ * Hand over everything queued and start a fresh batch.
43
+ *
44
+ * The returned array is valid until the next drain, which is also when it is recycled — so a
45
+ * caller reads it and lets go of it. Anything queued *while* it is being read lands in the new
46
+ * batch rather than being appended to the one under the reader's feet.
47
+ *
48
+ * @returns {Node3D[]}
49
+ */
50
+ drain(): Node3D[];
51
+ /**
52
+ * Forget everything queued without handing it anywhere. For a context being torn down, whose
53
+ * nodes may outlive it.
54
+ */
55
+ clear(): void;
56
+ #private;
57
+ }
58
+ export type Node3D = import("./Node3D.js").Node3D;
59
+ //# sourceMappingURL=Node3DDirtyList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node3DDirtyList.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/Node3DDirtyList.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAEI;;;;OAIG;IACH,YAFU,MAAM,CAED;IAef;;OAEG;IACH,UAFW,MAAM,QAIhB;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;;;;;;OAQG;IACH,SAFa,MAAM,EAAE,CAapB;IAED;;;OAGG;IACH,cAKC;;CACJ;qBA7FY,OAAO,aAAa,EAAE,MAAM"}
@@ -1,35 +1,27 @@
1
1
  /**
2
- * Scene root. Acts as the implicit parent of every top-level node in
3
- * the GPU scene-graph: `GPUSceneContext.build` allocates row 0 of the
4
- * `transforms` table to the scene and sets every orphan node's GPU
5
- * `parent` field to {@link NODE3D_SCENE_ID} (= 0). The scene's own
6
- * `transform_local` defaults to identity, but the user can pose it
7
- * (e.g. world-shift the whole hierarchy) just like any other Node3D.
2
+ * @typedef {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
3
+ */
4
+ /**
5
+ * A scene: the dataset whose entities are what it draws and poses, and the three things that are
6
+ * not entities — its lights' collection, a light probe volume, volumetrics.
8
7
  *
9
- * Inheriting from {@link Node3D} keeps the CPU and GPU views aligned —
10
- * the scene has the same TRS-backed transform shape as every other
11
- * node, and animation tracks targeting node id 0 work without any
12
- * special case.
8
+ * Everything drawn is an entity of {@link dataset} holding a row of the scene's GPU database
9
+ * (`GPUSceneContext.rows`), at `entity + 1`. A game's systems take rows as components appear; a
10
+ * scene with no systems places a model with `prefab_place`, a primitive with `place_primitive`
11
+ * and a light with `place_light`. Nothing is added to the scene itself.
13
12
  */
14
- export class Scene extends Node3D {
15
- instances: InstanceBatch;
16
- /**
17
- * Number of *renderable* mesh instances. Drives the rasterization
18
- * pipeline's per-mesh dispatches.
19
- *
20
- * @return {number}
21
- */
22
- get instance_count(): number;
13
+ export class Scene {
23
14
  /**
24
- * Total GPU node-record count — meshes plus any non-mesh
25
- * {@link Node3D}s in the batch (anchors, attachment points,
26
- * future skeleton joints), *plus the scene itself* at row 0. Drives
27
- * the GPU scene-graph propagation pass's iteration range.
15
+ * The dataset whose entities are this scene's rows. A scene is bound to one dataset; whoever
16
+ * owns both names it here, before anything asks the scene's GPU context for its rows. Null
17
+ * for a scene that draws nothing.
28
18
  *
29
- * @return {number}
19
+ * @type {EntityComponentDataset|null}
30
20
  */
31
- get node_count(): number;
21
+ dataset: EntityComponentDataset | null;
32
22
  /**
23
+ * Each light at an entity of {@link dataset} — `lights.add(light, entity)`, or `place_light`
24
+ * for a caller with no entity of its own.
33
25
  *
34
26
  * @type {LightCollection}
35
27
  */
@@ -44,47 +36,13 @@ export class Scene extends Node3D {
44
36
  * @type {SceneVolumetrics}
45
37
  */
46
38
  volumetrics: SceneVolumetrics;
47
- hash(): number;
48
- /**
49
- *
50
- * @param {Scene} other
51
- */
52
- equals(other: Scene): boolean;
53
- /**
54
- * Add a `Node3D` (or any of its subclasses — `Mesh`, `Light`, …) to
55
- * the scene. Children of the node are traversed and added too. Pass
56
- * an array to add several nodes at once.
57
- *
58
- * Routing rule:
59
- * - {@link isLight}-tagged nodes go to {@link lights} (their own
60
- * GPU pipeline) and are *not* tracked by the instance batch.
61
- * - Everything else — meshes, anchors, future skeleton joints —
62
- * goes into {@link instances}, the InstanceBatch. Meshes also
63
- * surface in `instances.instances` (the rendered subset);
64
- * non-mesh nodes are visible only as part of `instances.nodes`,
65
- * which is what the GPU scene-graph propagation pass iterates.
66
- *
67
- * @param {Node3D|Node3D[]} node
68
- */
69
- add(node: Node3D | Node3D[]): void;
70
- /**
71
- * Take a node back out, along with everything {@link add} brought in with it.
72
- *
73
- * Routing mirrors {@link add} exactly: lights leave {@link lights}, everything else leaves
74
- * {@link instances}. A node is only ever in one of them, so the two are not both consulted.
75
- *
76
- * @param {Node3D|Node3D[]} node
77
- * @returns {boolean} true if the node itself was found and dropped
78
- */
79
- remove(node: Node3D | Node3D[]): boolean;
80
39
  /**
81
40
  * @readonly
82
41
  * @type {boolean}
83
42
  */
84
43
  readonly isScene: boolean;
85
44
  }
86
- import { Node3D } from "./Node3D.js";
87
- import { InstanceBatch } from "./InstanceBatch.js";
45
+ export type EntityComponentDataset = import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset;
88
46
  import { LightCollection } from "../light/LightCollection.js";
89
47
  import { LightProbeVolume } from "../global_illumination/lpv/LightProbeVolume.js";
90
48
  import { SceneVolumetrics } from "../volumetrics/SceneVolumetrics.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/Scene.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH;IACI,yBAAgC;IAEhC;;;;;OAKG;IACH,6BAEC;IAED;;;;;;;OAOG;IACH,yBAEC;IAED;;;OAGG;IACH,QAFU,eAAe,CAEM;IAE/B;;;OAGG;IACH,oBAFU,gBAAgB,CAEkB;IAE5C;;;OAGG;IACH,aAFU,gBAAgB,CAEW;IAErC,eAEC;IAED;;;OAGG;IACH,cAFW,KAAK,WAIf;IAED;;;;;;;;;;;;;;;OAeG;IACH,UAFW,MAAM,GAAC,MAAM,EAAE,QAkBzB;IAED;;;;;;;;OAQG;IACH,aAHW,MAAM,GAAC,MAAM,EAAE,GACb,OAAO,CAuBnB;IAGL;;;OAGG;IACH,kBAFU,OAAO,CAEM;CANtB;uBAvIsB,aAAa;8BADN,oBAAoB;gCAFlB,6BAA6B;iCAD5B,gDAAgD;iCAEhD,oCAAoC"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/Scene.js"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;;;;;GAQG;AACH;IACI;;;;;;OAMG;IACH,SAFU,sBAAsB,GAAC,IAAI,CAEtB;IAEf;;;;;OAKG;IACH,QAFU,eAAe,CAEM;IAE/B;;;OAGG;IACH,oBAFU,gBAAgB,CAEkB;IAE5C;;;OAGG;IACH,aAFU,gBAAgB,CAEW;IAGzC;;;OAGG;IACH,kBAFU,OAAO,CAEM;CANtB;qCAzCY,OAAO,+CAA+C,EAAE,sBAAsB;gCAJ3D,6BAA6B;iCAD5B,gDAAgD;iCAEhD,oCAAoC"}
@@ -1,146 +1,53 @@
1
- import { LightProbeVolume } from "../global_illumination/lpv/LightProbeVolume.js";
2
- import { LightCollection } from "../light/LightCollection.js";
3
- import { SceneVolumetrics } from "../volumetrics/SceneVolumetrics.js";
4
- import { InstanceBatch } from "./InstanceBatch.js";
5
- import { Node3D } from "./Node3D.js";
6
-
7
- /**
8
- * Scene root. Acts as the implicit parent of every top-level node in
9
- * the GPU scene-graph: `GPUSceneContext.build` allocates row 0 of the
10
- * `transforms` table to the scene and sets every orphan node's GPU
11
- * `parent` field to {@link NODE3D_SCENE_ID} (= 0). The scene's own
12
- * `transform_local` defaults to identity, but the user can pose it
13
- * (e.g. world-shift the whole hierarchy) just like any other Node3D.
14
- *
15
- * Inheriting from {@link Node3D} keeps the CPU and GPU views aligned —
16
- * the scene has the same TRS-backed transform shape as every other
17
- * node, and animation tracks targeting node id 0 work without any
18
- * special case.
19
- */
20
- export class Scene extends Node3D {
21
- instances = new InstanceBatch();
22
-
23
- /**
24
- * Number of *renderable* mesh instances. Drives the rasterization
25
- * pipeline's per-mesh dispatches.
26
- *
27
- * @return {number}
28
- */
29
- get instance_count() {
30
- return this.instances.instances.length;
31
- }
32
-
33
- /**
34
- * Total GPU node-record count — meshes plus any non-mesh
35
- * {@link Node3D}s in the batch (anchors, attachment points,
36
- * future skeleton joints), *plus the scene itself* at row 0. Drives
37
- * the GPU scene-graph propagation pass's iteration range.
38
- *
39
- * @return {number}
40
- */
41
- get node_count() {
42
- return this.instances.nodes.length + 1;
43
- }
44
-
45
- /**
46
- *
47
- * @type {LightCollection}
48
- */
49
- lights = new LightCollection();
50
-
51
- /**
52
- *
53
- * @type {LightProbeVolume}
54
- */
55
- light_probe_volume = new LightProbeVolume();
56
-
57
- /**
58
- *
59
- * @type {SceneVolumetrics}
60
- */
61
- volumetrics = new SceneVolumetrics();
62
-
63
- hash() {
64
- return 0;
65
- }
66
-
67
- /**
68
- *
69
- * @param {Scene} other
70
- */
71
- equals(other) {
72
- return this.instances.equals(other.instances);
73
- }
74
-
75
- /**
76
- * Add a `Node3D` (or any of its subclasses — `Mesh`, `Light`, …) to
77
- * the scene. Children of the node are traversed and added too. Pass
78
- * an array to add several nodes at once.
79
- *
80
- * Routing rule:
81
- * - {@link isLight}-tagged nodes go to {@link lights} (their own
82
- * GPU pipeline) and are *not* tracked by the instance batch.
83
- * - Everything else — meshes, anchors, future skeleton joints —
84
- * goes into {@link instances}, the InstanceBatch. Meshes also
85
- * surface in `instances.instances` (the rendered subset);
86
- * non-mesh nodes are visible only as part of `instances.nodes`,
87
- * which is what the GPU scene-graph propagation pass iterates.
88
- *
89
- * @param {Node3D|Node3D[]} node
90
- */
91
- add(node) {
92
- if (Array.isArray(node)) {
93
- for (const n of node) this.add(n);
94
- return;
95
- }
96
-
97
- if (node.isLight === true) {
98
- this.lights.add(node);
99
- } else {
100
- this.instances.add(node);
101
- }
102
-
103
- const children = node.children;
104
- for (let i = 0; i < children.length; i++) {
105
- this.add(children[i]);
106
- }
107
- }
108
-
109
- /**
110
- * Take a node back out, along with everything {@link add} brought in with it.
111
- *
112
- * Routing mirrors {@link add} exactly: lights leave {@link lights}, everything else leaves
113
- * {@link instances}. A node is only ever in one of them, so the two are not both consulted.
114
- *
115
- * @param {Node3D|Node3D[]} node
116
- * @returns {boolean} true if the node itself was found and dropped
117
- */
118
- remove(node) {
119
- if (Array.isArray(node)) {
120
- let any = false;
121
-
122
- for (const n of node) {
123
- any = this.remove(n) || any;
124
- }
125
-
126
- return any;
127
- }
128
-
129
- const removed = node.isLight === true
130
- ? this.lights.remove(node)
131
- : this.instances.remove(node);
132
-
133
- const children = node.children;
134
- for (let i = 0; i < children.length; i++) {
135
- this.remove(children[i]);
136
- }
137
-
138
- return removed;
139
- }
140
- }
141
-
142
- /**
143
- * @readonly
144
- * @type {boolean}
145
- */
146
- Scene.prototype.isScene = true;
1
+ import { LightProbeVolume } from "../global_illumination/lpv/LightProbeVolume.js";
2
+ import { LightCollection } from "../light/LightCollection.js";
3
+ import { SceneVolumetrics } from "../volumetrics/SceneVolumetrics.js";
4
+
5
+ /**
6
+ * @typedef {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
7
+ */
8
+
9
+ /**
10
+ * A scene: the dataset whose entities are what it draws and poses, and the three things that are
11
+ * not entities — its lights' collection, a light probe volume, volumetrics.
12
+ *
13
+ * Everything drawn is an entity of {@link dataset} holding a row of the scene's GPU database
14
+ * (`GPUSceneContext.rows`), at `entity + 1`. A game's systems take rows as components appear; a
15
+ * scene with no systems places a model with `prefab_place`, a primitive with `place_primitive`
16
+ * and a light with `place_light`. Nothing is added to the scene itself.
17
+ */
18
+ export class Scene {
19
+ /**
20
+ * The dataset whose entities are this scene's rows. A scene is bound to one dataset; whoever
21
+ * owns both names it here, before anything asks the scene's GPU context for its rows. Null
22
+ * for a scene that draws nothing.
23
+ *
24
+ * @type {EntityComponentDataset|null}
25
+ */
26
+ dataset = null;
27
+
28
+ /**
29
+ * Each light at an entity of {@link dataset} — `lights.add(light, entity)`, or `place_light`
30
+ * for a caller with no entity of its own.
31
+ *
32
+ * @type {LightCollection}
33
+ */
34
+ lights = new LightCollection();
35
+
36
+ /**
37
+ *
38
+ * @type {LightProbeVolume}
39
+ */
40
+ light_probe_volume = new LightProbeVolume();
41
+
42
+ /**
43
+ *
44
+ * @type {SceneVolumetrics}
45
+ */
46
+ volumetrics = new SceneVolumetrics();
47
+ }
48
+
49
+ /**
50
+ * @readonly
51
+ * @type {boolean}
52
+ */
53
+ Scene.prototype.isScene = true;
@@ -1,110 +1,27 @@
1
1
  /**
2
- * @typedef {import("../animation/Skin.js").Skin} Skin
3
- */
4
- /**
5
- * A mesh whose vertices are deformed each frame by joint transforms.
6
- *
7
- * On the CPU side, a `SkinnedMesh` is just a {@link Mesh} that points at
8
- * the *unmodified* source {@link MeshletGeometry} — the same way every
9
- * other instance of that mesh would. Multiple `SkinnedMesh` instances
10
- * share the source geometry; no per-instance CPU clones happen.
11
- *
12
- * The GPU side makes the deformation possible by allocating a
13
- * per-instance vertex/metadata clone of the source geometry inside the
14
- * existing meshlet buffers (see
15
- * {@link GPUMeshletManager#clone_batch_allocation}). The clone is
16
- * registered as a separate geometry id (see
17
- * {@link GPUGeometryManager#add_clone}); the instance record this mesh
18
- * produces points at the clone, not at the source. Rasterization then
19
- * sees the clone like any other geometry.
20
- *
21
- * Per-frame, a skinning compute pass reads the source's vertex data and
22
- * the joint matrices and writes the deformed result into the clone's
23
- * vertex region — leaving every other instance pointed at the source
24
- * untouched. The skin matrices are computed per the glTF spec formula
25
- * `inverse(meshNode.worldMatrix) × jointNode.worldMatrix ×
26
- * inverseBindMatrix`, and the rasterizer re-applies
27
- * `mesh.transform_global` to the result — so the mesh node's own
28
- * transform cancels out of the rendered position exactly, which is what
29
- * the glTF spec asks for. The leftmost factor is taken live from the
30
- * mesh's own transforms row inside {@link shader_meshlet_apply_skinning};
31
- * see {@link chunk_skin_blend_mesh_local} for why it goes into each
32
- * matrix rather than onto the blended position.
2
+ * A loader's mark on a primitive that a skin deforms.
33
3
  *
34
- * **`transform_global` on a skinned mesh is the engine's, not the
35
- * asset's.** It cancels out of the rendered position, so glTF declares
36
- * it meaningless — and the one meaning it does have is the frame the
37
- * clone's vertices are written in, which the fold above requires to be
38
- * rigid against the skin. {@link GPUAnimationManager#register_skin}
39
- * therefore overwrites it, by way of
40
- * {@link skin_normalize_mesh_frame}, with the skin's own bind
41
- * transform. Whatever the file put there is discarded, and anything
42
- * reading this expecting the file's value is reading the wrong thing.
43
- * See `renderer/animation/SKINNING_FRAME_PLAN.md`.
4
+ * **A tag, not a renderable.** A skinned model is placed as a prefab — `prefab_compile` reads
5
+ * this class off the loader's tree to know which primitives deform against which skin, and
6
+ * `prefab_instantiate` spawns each as an entity whose mesh row draws a per-instance clone the
7
+ * skinning pass writes (`ShadedGeometryFlags.Skinned`). Adding one of these to a scene as a node
8
+ * is refused by the scene database: a node draws its source geometry rigidly, and there is no
9
+ * node-side skinning any more.
44
10
  *
45
- * The mesh's **skin id** — a row in a GPU table — lives in
46
- * {@link GPUMeshSkinningContext} and nowhere else. The CPU-side
47
- * {@link Skin} it was registered with is a different thing, pure data
48
- * that knows nothing about the GPU, and this mesh holds a reference to
49
- * it in {@link skin} so its bounds can be worked out without asking the
50
- * GPU anything. Bind the mesh to a skin via
51
- * `gpu_scene.skinning.bind(mesh, skin_id)`, or rely on
52
- * {@link GPUAnimationManager#register_skin} to do it for every entry
53
- * in `Skin.meshes` — which is also what populates {@link skin}. Until
54
- * bound, the clone routes through the rendering path but its vertices
55
- * stay at the source's bind-pose values — useful as an intermediate
56
- * verification state, and the state in which this mesh bounds itself
57
- * exactly like a regular {@link Mesh}.
58
- *
59
- * A note on which bounds to believe. {@link Mesh#bounding_box} here is
60
- * derived from whatever pose the *CPU* can see, and for a character
61
- * animated by the pose accumulator that is the rest pose — the joints
62
- * are {@link TransformAuthority.GPU} and their `transform_global` is
63
- * never advanced. It is the right size and in the right place, and it
64
- * is what seeds the scene database's `meshes` row. The deformed world
65
- * box, refreshed every frame from the vertices the skinning pass just
66
- * moved, is that row — read it from there when the silhouette is what
67
- * matters.
11
+ * What the class still says: the geometry, the material, and that this primitive's vertices are
12
+ * placed by joints rather than by its own transform — which is why glTF declares the node's own
13
+ * transform meaningless for it, and why the prefab moves the node onto the skin's bind frame.
68
14
  */
69
15
  export class SkinnedMesh extends Mesh {
70
- /**
71
- * The skin whose formula places this mesh's vertices, or `null` while none does.
72
- *
73
- * Not "is the deformation running" — {@link GPUMeshSkinningContext#unbind} can stop the
74
- * skinning pass without this changing, and a mesh whose pass has stopped still holds vertices
75
- * the skin put there. So {@link GPUAnimationManager#register_skin} writes it and nothing
76
- * clears it: once a skin has taken a mesh over, its formula stays the right basis for
77
- * {@link updateBoundsBasic} whether or not a pass runs this frame. Clear it by hand to hand
78
- * the mesh back to {@link Mesh}'s composition.
79
- *
80
- * CPU data throughout (see {@link Skin}). The GPU-side skin *id* is a table row and lives in
81
- * {@link GPUMeshSkinningContext}; this does not expose it.
82
- *
83
- * Nothing refreshes derived state on assignment — set this and the bounds go on describing
84
- * the previous basis until {@link updateMatrices} or {@link updateBoundsBasic} runs.
85
- *
86
- * A clone shares the reference, exactly as {@link Skin#copy} shares its joint and mesh
87
- * references: retargeting a cloned character means replacing this alongside the skin's own
88
- * arrays, which {@link instantiate_scene_bundle} gets for free by re-registering the
89
- * corresponded skin.
90
- *
91
- * @type {Skin|null}
92
- */
93
- skin: Skin | null;
94
16
  /**
95
17
  * @returns {SkinnedMesh}
96
18
  */
97
19
  clone(): SkinnedMesh;
98
- /**
99
- * @param {SkinnedMesh} other
100
- */
101
- copy(other: SkinnedMesh): void;
102
20
  /**
103
21
  * @readonly
104
22
  * @type {boolean}
105
23
  */
106
24
  readonly isSkinnedMesh: boolean;
107
25
  }
108
- export type Skin = import("../animation/Skin.js").Skin;
109
26
  import { Mesh } from "./Mesh.js";
110
27
  //# sourceMappingURL=SkinnedMesh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkinnedMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SkinnedMesh.js"],"names":[],"mappings":"AAGA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH;IAEI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAFU,IAAI,GAAC,IAAI,CAEP;IAEZ;;OAEG;IACH,SAFa,WAAW,CAMvB;IAED;;OAEG;IACH,YAFW,WAAW,QAYrB;IA4CL;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;mBA/JY,OAAO,sBAAsB,EAAE,IAAI;qBAH3B,WAAW"}
1
+ {"version":3,"file":"SkinnedMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SkinnedMesh.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH;IAEI;;OAEG;IACH,SAFa,WAAW,CAMvB;IAGL;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;qBA1BoB,WAAW"}