@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
@@ -0,0 +1,154 @@
1
+ import { u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
4
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
5
+ import { ComputeShader } from "../shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { chunk_scene_database_access } from "../scene/chunk_scene_database_access.js";
8
+ import { LIGHT_DATABASE_SPEC } from "./LIGHT_DATABASE_SPEC.js";
9
+
10
+ export const REFRESH_LIGHT_POSES_WORKGROUP_SIZE = COMPUTE_SHADER_DEFAULT_GROUP_SIZE;
11
+
12
+ /**
13
+ * Which light table a workgroup along `y` of the dispatch walks.
14
+ *
15
+ * @readonly
16
+ * @enum {number}
17
+ */
18
+ export const REFRESH_LIGHT_POSES_TABLE = Object.freeze({
19
+ POINT: 0,
20
+ SPOT: 1,
21
+ DIRECTIONAL: 2,
22
+ });
23
+
24
+ /** The dispatch is three tables wide. */
25
+ export const REFRESH_LIGHT_POSES_TABLE_COUNT = 3;
26
+
27
+ const POINT = LIGHT_DATABASE_SPEC.get('light_point');
28
+ const SPOT = LIGHT_DATABASE_SPEC.get('light_spot');
29
+ const DIRECTIONAL = LIGHT_DATABASE_SPEC.get('light_directional');
30
+
31
+ const WG = REFRESH_LIGHT_POSES_WORKGROUP_SIZE;
32
+
33
+ // read-write iterators over the light tables' pages: the pass writes the pose back into the
34
+ // database it reads the row from, and WGSL will not coerce a `read_write` pointer down to `read`
35
+ const PG_POINT = POINT.page_iterator_symbol_prefix(WG, true);
36
+ const PG_SPOT = SPOT.page_iterator_symbol_prefix(WG, true);
37
+ const PG_DIRECTIONAL = DIRECTIONAL.page_iterator_symbol_prefix(WG, true);
38
+
39
+ const resources = new ShaderResourceSetDescriptor();
40
+
41
+ resources.createGroup()
42
+ .addStorageBuffer('scene_database', WebGPUArray.from(u32), false)
43
+ .addStorageBuffer('light_database', WebGPUArray.from(u32), true);
44
+
45
+ /**
46
+ * Write every light record's pose from the `transforms` row it names — after the hierarchy pass
47
+ * has composed that row's `global`.
48
+ *
49
+ * **This is what makes a light's pose the GPU's.** A light is an entity, and its record's `node`
50
+ * is that entity's row. The row's `global` is composed on the GPU from its TRS and its parent
51
+ * chain, and once an ancestor can be GPU-driven — a torch in an animated hand — nothing on the
52
+ * CPU holds the world transform the record would need. So the pose is taken where the transform
53
+ * is: a point light's `position` is the row's translation, a directional light's `direction` is
54
+ * the row's +Z, a spot light's both; once per light per frame, over each table's pages rather
55
+ * than over `[0, count)`, because rows are addresses and a live one can sit above any number of
56
+ * holes.
57
+ *
58
+ * The CPU still writes the same fields when it builds a record, from the entity's own transform
59
+ * — exact for an entity the CPU composes, and what a pass that runs before this one in a frame
60
+ * reads. This pass is what makes them right for the entity the CPU does not compose, and it runs
61
+ * every frame because the hierarchy pass does.
62
+ *
63
+ * Runs after the hierarchy pass and before anything reads a light. The dispatch is
64
+ * {@link REFRESH_LIGHT_POSES_TABLE_COUNT} workgroups wide along `y`, one table each, and along
65
+ * `x` as many as the widest table's {@link GPUTypedTable#dispatch_group_count} at
66
+ * {@link REFRESH_LIGHT_POSES_WORKGROUP_SIZE}; a workgroup past a table's pages bails at setup.
67
+ */
68
+ export const shader_refresh_light_poses = ComputeShader.from({
69
+ label: "Light/RefreshPoses",
70
+ body: CodeChunk.from(
71
+ //language=WGSL
72
+ `
73
+ fn light_row_position(node: u32) -> vec3<f32> {
74
+ let xf = scene_read_node(&scene_database, node).global;
75
+
76
+ return (xf * vec4<f32>(0.0, 0.0, 0.0, 1.0)).xyz;
77
+ }
78
+
79
+ // the engine's convention: a light shines along its +Z
80
+ fn light_row_direction(node: u32) -> vec3<f32> {
81
+ let xf = scene_read_node(&scene_database, node).global;
82
+
83
+ return normalize((xf * vec4<f32>(0.0, 0.0, 1.0, 0.0)).xyz);
84
+ }
85
+
86
+ @compute @workgroup_size(${WG},1,1)
87
+ fn main(
88
+ @builtin(workgroup_id) wg_id: vec3<u32>,
89
+ @builtin(local_invocation_index) local_id: u32,
90
+ ) {
91
+ // wg_id is uniform across the workgroup, and so is every branch below
92
+ if wg_id.y == ${REFRESH_LIGHT_POSES_TABLE.POINT}u {
93
+ if !${PG_POINT}_setup(&light_database, wg_id.x, local_id) {
94
+ return;
95
+ }
96
+
97
+ let slot = ${PG_POINT}_slot_in_page(local_id);
98
+
99
+ if slot >= ${PG_POINT}_ELEMENTS_PER_PAGE || !${PG_POINT}_is_occupied(slot) {
100
+ return;
101
+ }
102
+
103
+ let index = ${PG_POINT}_slot_to_index(slot);
104
+ let light = ${POINT.marshalling_method_read_rw}(&light_database, index);
105
+
106
+ ${POINT.marshalling_method_write_field('position')}(&light_database, index, light_row_position(light.node));
107
+ } else if wg_id.y == ${REFRESH_LIGHT_POSES_TABLE.SPOT}u {
108
+ if !${PG_SPOT}_setup(&light_database, wg_id.x, local_id) {
109
+ return;
110
+ }
111
+
112
+ let slot = ${PG_SPOT}_slot_in_page(local_id);
113
+
114
+ if slot >= ${PG_SPOT}_ELEMENTS_PER_PAGE || !${PG_SPOT}_is_occupied(slot) {
115
+ return;
116
+ }
117
+
118
+ let index = ${PG_SPOT}_slot_to_index(slot);
119
+ let light = ${SPOT.marshalling_method_read_rw}(&light_database, index);
120
+
121
+ ${SPOT.marshalling_method_write_field('position')}(&light_database, index, light_row_position(light.node));
122
+ ${SPOT.marshalling_method_write_field('direction')}(&light_database, index, light_row_direction(light.node));
123
+ } else {
124
+ if !${PG_DIRECTIONAL}_setup(&light_database, wg_id.x, local_id) {
125
+ return;
126
+ }
127
+
128
+ let slot = ${PG_DIRECTIONAL}_slot_in_page(local_id);
129
+
130
+ if slot >= ${PG_DIRECTIONAL}_ELEMENTS_PER_PAGE || !${PG_DIRECTIONAL}_is_occupied(slot) {
131
+ return;
132
+ }
133
+
134
+ let index = ${PG_DIRECTIONAL}_slot_to_index(slot);
135
+ let light = ${DIRECTIONAL.marshalling_method_read_rw}(&light_database, index);
136
+
137
+ ${DIRECTIONAL.marshalling_method_write_field('direction')}(&light_database, index, light_row_direction(light.node));
138
+ }
139
+ }
140
+ `, [
141
+ chunk_scene_database_access,
142
+ POINT.chunk_iterate(WG, true),
143
+ SPOT.chunk_iterate(WG, true),
144
+ DIRECTIONAL.chunk_iterate(WG, true),
145
+ POINT.chunk_read_rw,
146
+ SPOT.chunk_read_rw,
147
+ DIRECTIONAL.chunk_read_rw,
148
+ POINT.wgsl_gen_write_field_code('position'),
149
+ SPOT.wgsl_gen_write_field_code('position'),
150
+ SPOT.wgsl_gen_write_field_code('direction'),
151
+ DIRECTIONAL.wgsl_gen_write_field_code('direction'),
152
+ ]),
153
+ resources,
154
+ });
@@ -139,7 +139,7 @@ export class GPULightMap {
139
139
  const r_materials = graphics.materials_resident;
140
140
 
141
141
 
142
- r_materials.ensure_scene_materials(scene_ctx.scene);
142
+ r_materials.ensure_scene_materials(scene_ctx);
143
143
  r_materials.update();
144
144
 
145
145
  const viz_buffer = graph_import_texture(graph, this.texture_viz);
@@ -1 +1 @@
1
- {"version":3,"file":"graph_draw_lightmap_viz_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js"],"names":[],"mappings":"AA8CA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACT,MAAM,EAAtB,MAAM;IACmB,KAAK;IACZ,KAAK,GAAvB,OAAO;IACL,MAAM,CAsLlB"}
1
+ {"version":3,"file":"graph_draw_lightmap_viz_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js"],"names":[],"mappings":"AA+CA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACT,MAAM,EAAtB,MAAM;IACmB,KAAK;IACZ,KAAK,GAAvB,OAAO;IACL,MAAM,CAmLlB"}
@@ -1,4 +1,5 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
+ import { row_of_entity } from "../../../scene/rows/GPUSceneRows.js";
2
3
  import { vec2f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
4
  import {
4
5
  VIZ_BUFFER_INVALID_MESH_VALUE
@@ -74,9 +75,15 @@ export function graph_draw_lightmap_viz_buffer({
74
75
  */
75
76
  function execute(data, resources, context) {
76
77
 
77
- const meshes = scene.scene.instances.instances;
78
+ // every mesh row, with the row it is — what the viz buffer carries per pixel, and what the
79
+ // bake's shaders read the record by
80
+ const drawn = [];
78
81
 
79
- const mesh_count = meshes.length;
82
+ scene.rows.for_each_mesh((entity, geometry) => {
83
+ drawn.push({ row: row_of_entity(entity), geometry });
84
+ });
85
+
86
+ const mesh_count = drawn.length;
80
87
 
81
88
  if (mesh_count <= 0) {
82
89
  // nothing to do
@@ -128,10 +135,7 @@ export function graph_draw_lightmap_viz_buffer({
128
135
  });
129
136
 
130
137
  for (let i = 0; i < mesh_count; i++) {
131
- const mesh = meshes[i];
132
- const geometry = mesh.geometry;
133
-
134
- const mesh_id = i;
138
+ const { row: mesh_id, geometry } = drawn[i];
135
139
 
136
140
  pass.draw(
137
141
  geometry.getVertexCount(),
@@ -166,10 +170,7 @@ export function graph_draw_lightmap_viz_buffer({
166
170
  });
167
171
 
168
172
  for (let i = 0; i < mesh_count; i++) {
169
- const mesh = meshes[i];
170
- const geometry = mesh.geometry;
171
-
172
- const mesh_id = i;
173
+ const { row: mesh_id, geometry } = drawn[i];
173
174
 
174
175
  // line-list: 3 edges x 2 vertices per triangle = 6 per triangle, i.e. 2x the
175
176
  // index count — with only getIndexCount() vertices half the triangles got no edges
@@ -206,10 +207,7 @@ export function graph_draw_lightmap_viz_buffer({
206
207
  });
207
208
 
208
209
  for (let i = 0; i < mesh_count; i++) {
209
- const mesh = meshes[i];
210
- const geometry = mesh.geometry;
211
-
212
- const mesh_id = i;
210
+ const { row: mesh_id, geometry } = drawn[i];
213
211
 
214
212
  pass.draw(
215
213
  geometry.getIndexCount(),
@@ -1,53 +1,78 @@
1
1
  /**
2
- * Loader-stage container: a scene's root Node3Ds plus any companion
3
- * data extracted from the same source asset that isn't carried on
4
- * those nodes directly. Returned from {@link load_gltf} (and any
5
- * future loader that produces the same kind of output).
6
- *
7
- * Not GLTF-specific by design — the bundle describes "what came out
8
- * of a loader", not "what was in a GLTF". Skins and clips are pure
9
- * CPU data classes from `src/webgpu/renderer/animation/`; the bundle just
10
- * groups them with the matching scene roots so callers can pass them
11
- * to {@link GPUAnimationManager#register_skin} and
12
- * {@link GPUAnimationManager#register_clip} after adding the scene
13
- * roots to the scene and letting `scene.build` populate `id_mapping`.
2
+ * @typedef {import("./SceneNode.js").SceneNode} SceneNode
3
+ * @typedef {import("../animation/Skin.js").Skin} Skin
4
+ * @typedef {import("../animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
5
+ * @typedef {import("../light/model/Light.js").Light} Light
6
+ */
7
+ /**
8
+ * What came out of a loader: a model as a flat list of {@link SceneNode}s in pre-order, with the
9
+ * skins, clips and lights the same file carried, each addressing nodes by index.
14
10
  *
15
- * Pure data — no behavior, no lifecycle. Discardable after
16
- * registration; the manager retains GPU-side copies of everything
17
- * it consumed.
11
+ * Not glTF-specific by design — the bundle describes "what a loader produced", not "what was in
12
+ * a file", and every loader ({@link load_gltf}, {@link load_usd}, {@link deserialize_scene})
13
+ * produces one. It is pure data with no lifecycle: a model compiles from it once into a
14
+ * {@link Prefab} (`prefab_compile`), and a prefab is what gets placed — as entities, each holding
15
+ * a row — however many times the model appears. The bundle is read by that compile and never
16
+ * written, so one bundle is shared by every placement, which is what the asset manager hands out.
18
17
  *
19
- * @author Alex Goldring
20
- * @copyright Company Named Limited (c) 2026
18
+ * Pre-order is the one structural promise: a node's parent has a lower index. {@link add_node}
19
+ * refuses anything else, so a reader composes world transforms in a single forward pass.
21
20
  */
22
21
  export class SceneBundle {
23
22
  /**
24
- * Root Node3D for each top-level scene in the source asset.
25
- * Typical assets have exactly one, but multi-scene files (and
26
- * the glTF format in particular) allow multiple.
23
+ * Every node of the model, parents before children.
27
24
  *
28
- * @type {Node3D[]}
25
+ * @type {SceneNode[]}
29
26
  */
30
- scenes: Node3D[];
27
+ nodes: SceneNode[];
31
28
  /**
32
- * Skins extracted from the asset. Each skin's `meshes` field
33
- * lists the {@link SkinnedMesh}es under {@link scenes} that
34
- * deform against it. Empty if the asset has no skinned meshes.
29
+ * Skins extracted from the asset. A skin's `joints` and `meshes` are indices into
30
+ * {@link nodes}. Empty if the asset has no skinned meshes.
35
31
  *
36
32
  * @type {Skin[]}
37
33
  */
38
34
  skins: Skin[];
39
35
  /**
40
- * Animation clips extracted from the asset. Each clip's
41
- * channels target Node3D instances under {@link scenes}.
42
- * Empty if the asset has no animations.
36
+ * Animation clips extracted from the asset. Each channel's `target` is an index into
37
+ * {@link nodes}. Empty if the asset has no animations.
43
38
  *
44
39
  * @type {ShadeAnimationClip[]}
45
40
  */
46
41
  clips: ShadeAnimationClip[];
42
+ /**
43
+ * Punctual lights extracted from the asset, each with the index of the node it sits on. A
44
+ * light is not a node and has no place of its own; the node's transform is where it is,
45
+ * already turned to shine along the engine's +Z. Empty if the asset has no lights.
46
+ *
47
+ * @type {{light: Light, node: number}[]}
48
+ */
49
+ lights: {
50
+ light: Light;
51
+ node: number;
52
+ }[];
53
+ /**
54
+ * Append a node. Its parent, if it has one, must already be in the bundle — which is what
55
+ * keeps the list in pre-order.
56
+ *
57
+ * @param {SceneNode} node
58
+ * @returns {number} the node's index, what a child, a skin, a clip or a light names it by
59
+ */
60
+ add_node(node: SceneNode): number;
61
+ /**
62
+ * The world matrix of every node, composed root-first in double precision — what a reader
63
+ * that wants where things are in the model's own space asks for, once.
64
+ *
65
+ * @returns {Float64Array[]} one 4x4 per node, column-major
66
+ */
67
+ compute_world_matrices(): Float64Array[];
47
68
  /**
48
69
  * @readonly
49
70
  * @type {boolean}
50
71
  */
51
72
  readonly isSceneBundle: boolean;
52
73
  }
74
+ export type SceneNode = import("./SceneNode.js").SceneNode;
75
+ export type Skin = import("../animation/Skin.js").Skin;
76
+ export type ShadeAnimationClip = import("../animation/ShadeAnimationClip.js").ShadeAnimationClip;
77
+ export type Light = import("../light/model/Light.js").Light;
53
78
  //# sourceMappingURL=SceneBundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SceneBundle.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneBundle.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAEI;;;;;;OAMG;IACH,QAFU,QAAQ,CAEN;IAEZ;;;;;;OAMG;IACH,OAFU,MAAM,CAEL;IAEX;;;;;;OAMG;IACH,OAFU,oBAAoB,CAEnB;IAGf;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC"}
1
+ {"version":3,"file":"SceneBundle.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneBundle.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH;;;;;;;;;;;;;GAaG;AACH;IACI;;;;OAIG;IACH,OAFU,SAAS,EAAE,CAEV;IAEX;;;;;OAKG;IACH,OAFU,IAAI,EAAE,CAEL;IAEX;;;;;OAKG;IACH,OAFU,kBAAkB,EAAE,CAEnB;IAEX;;;;;;OAMG;IACH,QAFU;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,EAAE,CAE5B;IAEZ;;;;;;OAMG;IACH,eAHW,SAAS,GACP,MAAM,CAalB;IAED;;;;;OAKG;IACH,0BAFa,YAAY,EAAE,CAsB1B;IAGL;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;wBApGY,OAAO,gBAAgB,EAAE,SAAS;mBAClC,OAAO,sBAAsB,EAAE,IAAI;iCACnC,OAAO,oCAAoC,EAAE,kBAAkB;oBAC/D,OAAO,yBAAyB,EAAE,KAAK"}
@@ -1,56 +1,111 @@
1
- /**
2
- * Loader-stage container: a scene's root Node3Ds plus any companion
3
- * data extracted from the same source asset that isn't carried on
4
- * those nodes directly. Returned from {@link load_gltf} (and any
5
- * future loader that produces the same kind of output).
6
- *
7
- * Not GLTF-specific by design — the bundle describes "what came out
8
- * of a loader", not "what was in a GLTF". Skins and clips are pure
9
- * CPU data classes from `src/webgpu/renderer/animation/`; the bundle just
10
- * groups them with the matching scene roots so callers can pass them
11
- * to {@link GPUAnimationManager#register_skin} and
12
- * {@link GPUAnimationManager#register_clip} after adding the scene
13
- * roots to the scene and letting `scene.build` populate `id_mapping`.
14
- *
15
- * Pure data — no behavior, no lifecycle. Discardable after
16
- * registration; the manager retains GPU-side copies of everything
17
- * it consumed.
18
- *
19
- * @author Alex Goldring
20
- * @copyright Company Named Limited (c) 2026
21
- */
22
- export class SceneBundle {
23
-
24
- /**
25
- * Root Node3D for each top-level scene in the source asset.
26
- * Typical assets have exactly one, but multi-scene files (and
27
- * the glTF format in particular) allow multiple.
28
- *
29
- * @type {Node3D[]}
30
- */
31
- scenes = [];
32
-
33
- /**
34
- * Skins extracted from the asset. Each skin's `meshes` field
35
- * lists the {@link SkinnedMesh}es under {@link scenes} that
36
- * deform against it. Empty if the asset has no skinned meshes.
37
- *
38
- * @type {Skin[]}
39
- */
40
- skins = [];
41
-
42
- /**
43
- * Animation clips extracted from the asset. Each clip's
44
- * channels target Node3D instances under {@link scenes}.
45
- * Empty if the asset has no animations.
46
- *
47
- * @type {ShadeAnimationClip[]}
48
- */
49
- clips = [];
50
- }
51
-
52
- /**
53
- * @readonly
54
- * @type {boolean}
55
- */
56
- SceneBundle.prototype.isSceneBundle = true;
1
+ import { assert } from "../../../core/assert.js";
2
+ import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
3
+
4
+ /**
5
+ * @typedef {import("./SceneNode.js").SceneNode} SceneNode
6
+ * @typedef {import("../animation/Skin.js").Skin} Skin
7
+ * @typedef {import("../animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
8
+ * @typedef {import("../light/model/Light.js").Light} Light
9
+ */
10
+
11
+ /**
12
+ * What came out of a loader: a model as a flat list of {@link SceneNode}s in pre-order, with the
13
+ * skins, clips and lights the same file carried, each addressing nodes by index.
14
+ *
15
+ * Not glTF-specific by design — the bundle describes "what a loader produced", not "what was in
16
+ * a file", and every loader ({@link load_gltf}, {@link load_usd}, {@link deserialize_scene})
17
+ * produces one. It is pure data with no lifecycle: a model compiles from it once into a
18
+ * {@link Prefab} (`prefab_compile`), and a prefab is what gets placed — as entities, each holding
19
+ * a row — however many times the model appears. The bundle is read by that compile and never
20
+ * written, so one bundle is shared by every placement, which is what the asset manager hands out.
21
+ *
22
+ * Pre-order is the one structural promise: a node's parent has a lower index. {@link add_node}
23
+ * refuses anything else, so a reader composes world transforms in a single forward pass.
24
+ */
25
+ export class SceneBundle {
26
+ /**
27
+ * Every node of the model, parents before children.
28
+ *
29
+ * @type {SceneNode[]}
30
+ */
31
+ nodes = [];
32
+
33
+ /**
34
+ * Skins extracted from the asset. A skin's `joints` and `meshes` are indices into
35
+ * {@link nodes}. Empty if the asset has no skinned meshes.
36
+ *
37
+ * @type {Skin[]}
38
+ */
39
+ skins = [];
40
+
41
+ /**
42
+ * Animation clips extracted from the asset. Each channel's `target` is an index into
43
+ * {@link nodes}. Empty if the asset has no animations.
44
+ *
45
+ * @type {ShadeAnimationClip[]}
46
+ */
47
+ clips = [];
48
+
49
+ /**
50
+ * Punctual lights extracted from the asset, each with the index of the node it sits on. A
51
+ * light is not a node and has no place of its own; the node's transform is where it is,
52
+ * already turned to shine along the engine's +Z. Empty if the asset has no lights.
53
+ *
54
+ * @type {{light: Light, node: number}[]}
55
+ */
56
+ lights = [];
57
+
58
+ /**
59
+ * Append a node. Its parent, if it has one, must already be in the bundle — which is what
60
+ * keeps the list in pre-order.
61
+ *
62
+ * @param {SceneNode} node
63
+ * @returns {number} the node's index, what a child, a skin, a clip or a light names it by
64
+ */
65
+ add_node(node) {
66
+ assert.defined(node, 'node');
67
+ assert.equal(node.isSceneNode, true, 'node.isSceneNode !== true');
68
+
69
+ const index = this.nodes.length;
70
+
71
+ assert.lessThan(node.parent, index, `node ${index} (${node.name}) names parent ${node.parent}, which is not in the bundle yet — add parents before children`);
72
+
73
+ this.nodes.push(node);
74
+
75
+ return index;
76
+ }
77
+
78
+ /**
79
+ * The world matrix of every node, composed root-first in double precision — what a reader
80
+ * that wants where things are in the model's own space asks for, once.
81
+ *
82
+ * @returns {Float64Array[]} one 4x4 per node, column-major
83
+ */
84
+ compute_world_matrices() {
85
+ const nodes = this.nodes;
86
+ const count = nodes.length;
87
+ const worlds = new Array(count);
88
+
89
+ for (let i = 0; i < count; i++) {
90
+ const node = nodes[i];
91
+ const world = new Float64Array(16);
92
+ const local = node.local.matrix;
93
+
94
+ if (node.parent === -1) {
95
+ world.set(local);
96
+ } else {
97
+ m4_multiply(world, worlds[node.parent], local);
98
+ }
99
+
100
+ worlds[i] = world;
101
+ }
102
+
103
+ return worlds;
104
+ }
105
+ }
106
+
107
+ /**
108
+ * @readonly
109
+ * @type {boolean}
110
+ */
111
+ SceneBundle.prototype.isSceneBundle = true;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @typedef {import("../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
3
+ * @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
4
+ */
5
+ /**
6
+ * One node of a loaded model, as a loader describes it: a name, the index of its parent, its own
7
+ * local transform, and — when the node draws — a geometry and a material.
8
+ *
9
+ * A description, not a runtime object. It has no children list, no world transform and no row:
10
+ * the parent index is the whole of the hierarchy, worlds are composed by whoever needs them
11
+ * (`prefab_compile` once per model, `shade_bundle_bounds` once per query), and what a node
12
+ * becomes on a screen is an entity of a {@link Prefab} instance. Nodes sit in a
13
+ * {@link SceneBundle} in pre-order — a parent's index below its children's — which is what lets
14
+ * every reader compose worlds in one forward pass.
15
+ *
16
+ * A node that draws is a primitive: a glTF mesh with one primitive is the node itself; one with
17
+ * several is a node with one child per primitive. Whether a primitive is skinned is not written
18
+ * on it — a skin names the nodes it deforms ({@link Skin.meshes}).
19
+ */
20
+ export class SceneNode {
21
+ /**
22
+ * @param {object} [options]
23
+ * @param {string} [options.name]
24
+ * @param {number} [options.parent] -1 for a root
25
+ * @param {number[]} [options.translation]
26
+ * @param {number[]} [options.rotation] a quaternion, `x, y, z, w`
27
+ * @param {number[]} [options.scale]
28
+ * @param {ArrayLike<number>} [options.matrix] a column-major 4x4, instead of the three above
29
+ * @param {MeshletGeometry} [options.geometry]
30
+ * @param {ShadeMaterial} [options.material]
31
+ * @returns {SceneNode}
32
+ */
33
+ static from({ name, parent, translation, rotation, scale, matrix, geometry, material }?: {
34
+ name?: string;
35
+ parent?: number;
36
+ translation?: number[];
37
+ rotation?: number[];
38
+ scale?: number[];
39
+ matrix?: ArrayLike<number>;
40
+ geometry?: MeshletGeometry;
41
+ material?: ShadeMaterial;
42
+ }): SceneNode;
43
+ /**
44
+ * @type {string}
45
+ */
46
+ name: string;
47
+ /**
48
+ * Index of the parent in the bundle's nodes, or -1 for a root.
49
+ *
50
+ * @type {number}
51
+ */
52
+ parent: number;
53
+ /**
54
+ * The node's own transform, relative to its parent. Kept with its matrix current: a reader
55
+ * composes worlds from `local.matrix` without asking.
56
+ *
57
+ * @type {Transform64}
58
+ */
59
+ local: Transform64;
60
+ /**
61
+ * What the node draws, or `null` for a node that only places others.
62
+ *
63
+ * @type {MeshletGeometry|null}
64
+ */
65
+ geometry: MeshletGeometry | null;
66
+ /**
67
+ * How it is drawn; `null` exactly when {@link geometry} is.
68
+ *
69
+ * @type {ShadeMaterial|null}
70
+ */
71
+ material: ShadeMaterial | null;
72
+ /**
73
+ * @readonly
74
+ * @type {boolean}
75
+ */
76
+ readonly isSceneNode: boolean;
77
+ }
78
+ export type MeshletGeometry = import("../geometry/MeshletGeometry.js").MeshletGeometry;
79
+ export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
80
+ import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
81
+ //# sourceMappingURL=SceneNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneNode.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneNode.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAmCI;;;;;;;;;;;OAWG;IACH;QAV4B,IAAI,GAArB,MAAM;QACW,MAAM,GAAvB,MAAM;QACa,WAAW,GAA9B,MAAM,EAAE;QACW,QAAQ,GAA3B,MAAM,EAAE;QACW,KAAK,GAAxB,MAAM,EAAE;QACoB,MAAM,GAAlC,UAAU,MAAM,CAAC;QACS,QAAQ,GAAlC,eAAe;QACS,QAAQ,GAAhC,aAAa;QACX,SAAS,CAsCrB;IAlFD;;OAEG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,QAFU,MAAM,CAEJ;IAEZ;;;;;OAKG;IACH,OAFU,WAAW,CAEK;IAE1B;;;;OAIG;IACH,UAFU,eAAe,GAAC,IAAI,CAEd;IAEhB;;;;OAIG;IACH,UAFU,aAAa,GAAC,IAAI,CAEZ;IAqDpB;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B;8BAvGY,OAAO,gCAAgC,EAAE,eAAe;4BACxD,OAAO,8BAA8B,EAAE,aAAa;4BAJrC,8CAA8C"}