@woosh/meep-engine 3.23.0 → 3.25.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 (812) 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 +413 -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/shader_picking_gather.d.ts +40 -0
  158. package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -0
  159. package/src/engine/graphics3/shader_picking_gather.js +120 -0
  160. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
  161. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
  162. package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
  163. package/src/engine/physics/cloth/MEASUREMENTS.md +1050 -0
  164. package/src/engine/physics/cloth/PLAN.md +411 -49
  165. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
  166. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  167. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
  168. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts +52 -0
  169. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts.map +1 -0
  170. package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.js +70 -0
  171. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts +12 -3
  172. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  173. package/src/engine/physics/cloth/ecs/ClothDynamics.js +340 -331
  174. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +49 -37
  175. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  176. package/src/engine/physics/cloth/ecs/ClothInstance.js +50 -37
  177. package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
  178. package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
  179. package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
  180. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts +84 -0
  181. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts.map +1 -0
  182. package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.js +141 -0
  183. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +51 -81
  184. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  185. package/src/engine/physics/cloth/ecs/ClothSystem.js +81 -870
  186. package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts +48 -0
  187. package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts.map +1 -0
  188. package/src/engine/physics/cloth/ecs/ClothWorkerCore.js +107 -0
  189. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +286 -0
  190. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -0
  191. package/src/engine/physics/cloth/ecs/ClothWorld.js +1104 -0
  192. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +182 -0
  193. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -0
  194. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +562 -0
  195. package/src/engine/physics/cloth/ecs/cloth.worker.d.ts +2 -0
  196. package/src/engine/physics/cloth/ecs/cloth.worker.d.ts.map +1 -0
  197. package/src/engine/physics/cloth/ecs/cloth.worker.js +12 -0
  198. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  199. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +2 -1
  200. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +58 -0
  201. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  202. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +341 -271
  203. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +20 -2
  204. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  205. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +39 -15
  206. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
  207. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  208. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
  209. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  210. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
  211. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts +29 -0
  212. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts.map +1 -0
  213. package/src/engine/physics/cloth/ecs/cloth_worker_protocol.js +78 -0
  214. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
  215. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
  216. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
  217. package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts +17 -0
  218. package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts.map +1 -0
  219. package/src/engine/physics/cloth/ecs/makeClothWorker.js +18 -0
  220. package/src/engine/physics/cloth/playground/README.md +84 -13
  221. package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
  222. package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/playground/garment_build.js +64 -58
  224. package/src/engine/physics/cloth/playground/garment_main.js +59 -33
  225. package/src/engine/physics/cloth/playground/wind.html +166 -0
  226. package/src/engine/physics/cloth/playground/wind_build.d.ts +81 -0
  227. package/src/engine/physics/cloth/playground/wind_build.d.ts.map +1 -0
  228. package/src/engine/physics/cloth/playground/wind_build.js +141 -0
  229. package/src/engine/physics/cloth/playground/wind_main.d.ts +2 -0
  230. package/src/engine/physics/cloth/playground/wind_main.d.ts.map +1 -0
  231. package/src/engine/physics/cloth/playground/wind_main.js +681 -0
  232. package/src/engine/physics/cloth/solver/ClothState.d.ts +134 -79
  233. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  234. package/src/engine/physics/cloth/solver/ClothState.js +273 -12
  235. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +33 -0
  236. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +34 -0
  238. package/src/engine/physics/cloth/solver/cloth_step.d.ts +21 -2
  239. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  240. package/src/engine/physics/cloth/solver/cloth_step.js +173 -4
  241. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +40 -0
  242. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -0
  243. package/src/engine/physics/cloth/solver/cloth_step_instance.js +284 -0
  244. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts +107 -0
  245. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts.map +1 -0
  246. package/src/engine/physics/cloth/solver/cloth_wind_accelerate.js +263 -0
  247. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +88 -0
  248. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts.map +1 -0
  249. package/src/engine/physics/cloth/wind/AbstractClothWind.js +100 -0
  250. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts +85 -0
  251. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts.map +1 -0
  252. package/src/engine/physics/cloth/wind/ClothAmbientWind.js +182 -0
  253. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +79 -0
  254. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -0
  255. package/src/engine/physics/cloth/wind/ClothFluidWind.js +210 -0
  256. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +101 -0
  257. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -0
  258. package/src/engine/physics/cloth/wind/cloth_sample_air.js +290 -0
  259. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  260. package/src/shade/RENDERER_CONTRACT.md +85 -53
  261. package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
  262. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  263. package/src/shade/device/ShadeGPUCommandContext.js +36 -0
  264. package/src/shade/device/mock/texture_copy.d.ts.map +1 -1
  265. package/src/shade/device/mock/texture_copy.js +28 -0
  266. package/src/shade/playground/add_random_meshes.d.ts +4 -4
  267. package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
  268. package/src/shade/playground/add_random_meshes.js +20 -16
  269. package/src/shade/playground/avboit/main.d.ts +1 -0
  270. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  271. package/src/shade/playground/avboit/main.js +916 -875
  272. package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
  273. package/src/shade/playground/basis_textures/main.js +22 -8
  274. package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
  275. package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
  276. package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
  277. package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
  278. package/src/shade/playground/ground_seam/main.js +13 -4
  279. package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
  280. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
  281. package/src/shade/playground/ground_seam/make_ground.js +21 -16
  282. package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
  283. package/src/shade/playground/particle_system/main.js +11 -10
  284. package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
  285. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  286. package/src/shade/playground/particle_system/particle_prototype.js +56 -15
  287. package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
  288. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  289. package/src/shade/playground/particle_system/particle_scene.js +149 -53
  290. package/src/shade/playground/readback_crossover/index.html +41 -0
  291. package/src/shade/playground/readback_crossover/main.d.ts +2 -0
  292. package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
  293. package/src/shade/playground/readback_crossover/main.js +372 -0
  294. package/src/shade/playground/skinned_blas_refit/README.md +11 -7
  295. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
  296. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
  297. package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
  298. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  299. package/src/shade/playground/skinned_blas_refit/main.js +67 -58
  300. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
  301. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
  302. package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
  303. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
  304. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  305. package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
  306. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
  307. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  308. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
  309. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  310. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
  311. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
  312. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  313. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
  314. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
  315. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  316. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
  317. package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
  318. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  319. package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
  320. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
  321. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  322. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
  323. package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
  324. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
  325. package/src/shade/playground/sponza_path_trace/main.js +393 -363
  326. package/src/shade/playground/ssr_reprojection/main.js +11 -9
  327. package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
  328. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
  329. package/src/shade/playground/ssr_reprojection/scene.js +32 -11
  330. package/src/shade/playground/ssr_variance/main.js +1 -1
  331. package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
  332. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
  333. package/src/shade/playground/ssr_variance/scene.js +39 -15
  334. package/src/shade/playground/vgeo_runtime/README.md +94 -0
  335. package/src/shade/playground/vgeo_runtime/index.html +62 -0
  336. package/src/shade/playground/vgeo_runtime/main.d.ts +2 -0
  337. package/src/shade/playground/vgeo_runtime/main.d.ts.map +1 -0
  338. package/src/shade/playground/vgeo_runtime/main.js +399 -0
  339. package/src/shade/playground/vgeo_viewer/main.js +6 -2
  340. package/src/shade/playground/vgeo_viewer/sample_asset.js +1 -1
  341. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  342. package/src/shade/playground/volumetrics_froxel/main.js +936 -922
  343. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  344. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  345. package/src/shade/renderer/GraphicsContext.js +11 -0
  346. package/src/shade/renderer/Renderer.d.ts +3 -2
  347. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  348. package/src/shade/renderer/Renderer.js +3 -2
  349. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
  350. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  351. package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
  352. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
  353. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
  354. package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
  355. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
  356. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  357. package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
  358. package/src/shade/renderer/animation/Skin.d.ts +19 -19
  359. package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
  360. package/src/shade/renderer/animation/Skin.js +15 -13
  361. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
  362. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  363. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
  364. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
  365. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
  366. package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
  367. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
  368. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  369. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
  370. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  371. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
  372. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
  373. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
  374. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
  375. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
  376. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
  377. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
  378. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  379. package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
  380. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
  381. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
  382. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
  383. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
  384. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
  385. package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
  386. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
  387. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
  388. package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
  389. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
  390. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  391. package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
  392. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
  393. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
  394. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
  395. package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
  396. package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
  397. package/src/shade/renderer/buffer/table/WordViews.js +62 -0
  398. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
  399. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
  400. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
  401. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
  402. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
  403. package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
  404. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  405. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
  406. package/src/shade/renderer/camera/Camera.d.ts +14 -0
  407. package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
  408. package/src/shade/renderer/camera/Camera.js +7 -1
  409. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
  410. package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.d.ts.map +1 -1
  411. package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.js +16 -1
  412. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  413. package/src/shade/renderer/geometry/GPUGeometryManager.js +29 -9
  414. package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts +10 -0
  415. package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts.map +1 -1
  416. package/src/shade/renderer/geometry/GPUGeometryMetadata.js +13 -0
  417. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  418. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
  419. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
  420. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  421. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
  422. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +46 -18
  423. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +70 -22
  424. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +97 -19
  425. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +12 -2
  426. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  427. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +14 -3
  428. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +2 -2
  429. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  430. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +124 -6
  431. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +22 -0
  432. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +1 -0
  433. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.js +53 -0
  434. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +8 -1
  435. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  436. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +8 -1
  437. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts +16 -0
  438. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts.map +1 -0
  439. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.js +15 -0
  440. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts +54 -0
  441. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts.map +1 -0
  442. package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.js +53 -0
  443. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +13 -2
  444. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  445. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +14 -2
  446. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +100 -0
  447. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  448. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +113 -0
  449. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
  450. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +5 -0
  451. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  452. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +108 -0
  453. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  454. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +23 -0
  455. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  456. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +40 -0
  457. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +228 -0
  458. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -0
  459. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +932 -0
  460. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +176 -0
  461. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -0
  462. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +425 -0
  463. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +241 -0
  464. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +574 -0
  465. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +120 -0
  466. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -0
  467. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +674 -0
  468. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +287 -0
  469. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -0
  470. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +976 -0
  471. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +42 -0
  472. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -0
  473. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +96 -0
  474. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts +16 -0
  475. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts.map +1 -0
  476. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.js +15 -0
  477. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts +19 -0
  478. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -0
  479. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +83 -0
  480. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts +9 -0
  481. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts.map +1 -0
  482. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.js +8 -0
  483. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +19 -0
  484. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -0
  485. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +160 -0
  486. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts +3 -0
  487. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -0
  488. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +255 -0
  489. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts +3 -0
  490. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -0
  491. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +80 -0
  492. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts +3 -0
  493. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -0
  494. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +144 -0
  495. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts +3 -0
  496. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -0
  497. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +530 -0
  498. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +39 -0
  499. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -0
  500. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +54 -0
  501. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +41 -0
  502. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -0
  503. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +56 -0
  504. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts +49 -0
  505. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -0
  506. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +328 -0
  507. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +10 -0
  508. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts.map +1 -0
  509. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +51 -0
  510. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +13 -0
  511. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -0
  512. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +12 -0
  513. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +17 -0
  514. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts.map +1 -0
  515. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +99 -0
  516. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts +9 -0
  517. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts.map +1 -0
  518. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +8 -0
  519. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +7 -0
  520. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts.map +1 -0
  521. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +27 -0
  522. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts +14 -0
  523. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts.map +1 -0
  524. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js +13 -0
  525. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts +7 -0
  526. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts.map +1 -0
  527. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.js +35 -0
  528. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts +9 -0
  529. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts.map +1 -0
  530. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.js +8 -0
  531. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts +15 -0
  532. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts.map +1 -0
  533. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.js +14 -0
  534. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +7 -0
  535. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts.map +1 -0
  536. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +36 -0
  537. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +10 -0
  538. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -0
  539. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +9 -0
  540. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +11 -0
  541. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts.map +1 -0
  542. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +54 -0
  543. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts +9 -0
  544. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts.map +1 -0
  545. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js +8 -0
  546. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts +11 -0
  547. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts.map +1 -0
  548. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.js +10 -0
  549. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts +7 -0
  550. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts.map +1 -0
  551. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.js +30 -0
  552. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts +9 -0
  553. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts.map +1 -0
  554. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.js +8 -0
  555. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts +13 -0
  556. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts.map +1 -0
  557. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.js +12 -0
  558. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts +14 -0
  559. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts.map +1 -0
  560. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js +13 -0
  561. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +11 -0
  562. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts.map +1 -0
  563. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +61 -0
  564. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts +9 -0
  565. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -0
  566. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +8 -0
  567. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts +13 -0
  568. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts.map +1 -0
  569. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.js +12 -0
  570. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts +9 -0
  571. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts.map +1 -0
  572. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.js +8 -0
  573. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts +20 -0
  574. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts.map +1 -0
  575. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.js +19 -0
  576. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts +23 -0
  577. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -0
  578. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +70 -0
  579. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +18 -0
  580. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -0
  581. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +25 -0
  582. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +35 -0
  583. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -0
  584. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +41 -0
  585. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +32 -0
  586. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -0
  587. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +138 -0
  588. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
  589. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
  590. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
  591. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
  592. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
  593. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
  594. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  595. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
  596. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
  597. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  598. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
  599. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  600. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
  601. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
  602. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
  603. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
  604. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
  605. package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
  606. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  607. package/src/shade/renderer/light/GPULightCollection.js +444 -329
  608. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  609. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
  610. package/src/shade/renderer/light/LightCollection.d.ts +29 -1
  611. package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
  612. package/src/shade/renderer/light/LightCollection.js +50 -1
  613. package/src/shade/renderer/light/make_sunlight.js +2 -2
  614. package/src/shade/renderer/light/model/Light.d.ts +29 -2
  615. package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
  616. package/src/shade/renderer/light/model/Light.js +30 -2
  617. package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
  618. package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
  619. package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
  620. package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
  621. package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
  622. package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
  623. package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
  624. package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
  625. package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
  626. package/src/shade/renderer/light/place_light.d.ts +16 -0
  627. package/src/shade/renderer/light/place_light.d.ts.map +1 -0
  628. package/src/shade/renderer/light/place_light.js +36 -0
  629. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
  630. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
  631. package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
  632. package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
  633. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  634. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
  635. package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
  636. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  637. package/src/shade/renderer/loader/SceneBundle.js +111 -56
  638. package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
  639. package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
  640. package/src/shade/renderer/loader/SceneNode.js +114 -0
  641. package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
  642. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  643. package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
  644. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  645. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
  646. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
  647. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
  648. package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
  649. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  650. package/src/shade/renderer/loader/usd/load_usd.js +4 -5
  651. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
  652. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
  653. package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
  654. package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
  655. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
  656. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  657. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
  658. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
  659. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  660. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
  661. package/src/shade/renderer/particles/DESIGN.md +53 -50
  662. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
  663. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  664. package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
  665. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
  666. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  667. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
  668. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
  669. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  670. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
  671. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
  672. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  673. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
  674. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
  675. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
  676. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  677. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  678. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +9 -0
  679. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  680. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
  681. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
  682. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
  683. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  684. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +13 -2
  685. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  686. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
  687. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
  688. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  689. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +12 -1
  690. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  691. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +10 -0
  692. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
  693. package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
  694. package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
  695. package/src/shade/renderer/scene/DynamicMesh.js +14 -4
  696. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
  697. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  698. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
  699. package/src/shade/renderer/scene/GPUSceneContext.d.ts +69 -44
  700. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  701. package/src/shade/renderer/scene/GPUSceneContext.js +244 -525
  702. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
  703. package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
  704. package/src/shade/renderer/scene/Scene.d.ts +18 -60
  705. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  706. package/src/shade/renderer/scene/Scene.js +53 -146
  707. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
  708. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
  709. package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
  710. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
  711. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  712. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
  713. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
  714. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
  715. package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
  716. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
  717. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
  718. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
  719. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
  720. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
  721. package/src/shade/renderer/scene/rows/GPUSceneRows.js +1158 -0
  722. package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
  723. package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
  724. package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
  725. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
  726. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
  727. package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
  728. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
  729. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
  730. package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
  731. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
  732. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +35 -0
  733. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -0
  734. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +91 -0
  735. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
  736. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
  737. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
  738. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
  739. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
  740. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
  741. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
  742. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  743. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
  744. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
  745. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  746. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
  747. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
  748. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
  749. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
  750. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
  751. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
  752. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
  753. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
  754. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
  755. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
  756. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
  757. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
  758. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
  759. package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
  760. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
  761. package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
  762. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
  763. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  764. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
  765. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
  766. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  767. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
  768. package/src/engine/graphics3/instantiate_scene_bundle.d.ts +0 -54
  769. package/src/engine/graphics3/instantiate_scene_bundle.d.ts.map +0 -1
  770. package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
  771. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +0 -39
  772. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +0 -1
  773. package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
  774. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts +0 -35
  775. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts.map +0 -1
  776. package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
  777. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts +0 -96
  778. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts.map +0 -1
  779. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
  780. package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts +0 -20
  781. package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts.map +0 -1
  782. package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
  783. package/src/shade/renderer/animation/skin_bind_transform.d.ts +0 -25
  784. package/src/shade/renderer/animation/skin_bind_transform.d.ts.map +0 -1
  785. package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
  786. package/src/shade/renderer/animation/skin_frame_defect.d.ts +0 -34
  787. package/src/shade/renderer/animation/skin_frame_defect.d.ts.map +0 -1
  788. package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
  789. package/src/shade/renderer/animation/skin_joint_matrix.d.ts +0 -24
  790. package/src/shade/renderer/animation/skin_joint_matrix.d.ts.map +0 -1
  791. package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
  792. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts +0 -70
  793. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +0 -1
  794. package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
  795. package/src/shade/renderer/scene/InstanceBatch.d.ts +0 -92
  796. package/src/shade/renderer/scene/InstanceBatch.d.ts.map +0 -1
  797. package/src/shade/renderer/scene/InstanceBatch.js +0 -235
  798. package/src/shade/renderer/scene/Mesh.d.ts +0 -55
  799. package/src/shade/renderer/scene/Mesh.d.ts.map +0 -1
  800. package/src/shade/renderer/scene/Mesh.js +0 -168
  801. package/src/shade/renderer/scene/Node3D.d.ts +0 -140
  802. package/src/shade/renderer/scene/Node3D.d.ts.map +0 -1
  803. package/src/shade/renderer/scene/Node3D.js +0 -263
  804. package/src/shade/renderer/scene/SceneNodeBinding.d.ts +0 -52
  805. package/src/shade/renderer/scene/SceneNodeBinding.d.ts.map +0 -1
  806. package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
  807. package/src/shade/renderer/scene/SkinnedMesh.d.ts +0 -110
  808. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +0 -1
  809. package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
  810. package/src/shade/renderer/scene/TransformAuthority.d.ts +0 -19
  811. package/src/shade/renderer/scene/TransformAuthority.d.ts.map +0 -1
  812. package/src/shade/renderer/scene/TransformAuthority.js +0 -33
@@ -1,329 +1,444 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
3
- import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
4
- import { GPUSceneShadowmapContext } from "../shadow/map/GPUSceneShadowmapContext.js";
5
- import { GPUTextureContext } from "../texture/GPUTextureContext.js";
6
- import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
7
- import { texture_write_to_gpu } from "../texture/texture_write_to_gpu.js";
8
- import { execute_filter_environment_map } from "./environment/execute_filter_environment_map.js";
9
- import { LIGHT_DATABASE_SPEC } from "./LIGHT_DATABASE_SPEC.js";
10
- import { light_record_directional } from "./model/io/light_record_directional.js";
11
- import { light_record_point } from "./model/io/light_record_point.js";
12
- import { light_record_spot } from "./model/io/light_record_spot.js";
13
-
14
- /**
15
- * @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
16
- * @typedef {import("../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
17
- * @typedef {import("./LightCollection.js").LightCollection} LightCollection
18
- */
19
-
20
- /**
21
- * Directional-light cap. Sized so the directional occupancy bitmap
22
- * fits in a single u32, which is what
23
- * {@link chunk_directional_lights_iteration_mask} reads. Writing past
24
- * key 31 would silently drop the light from iteration; {@link #build}
25
- * warns once per build when this happens.
26
- *
27
- * Point and spot lights have no analogous cap — their consumers walk
28
- * the full per-page bitmap, so any number of point/spot lights
29
- * iterate correctly (e.g. clustered rendering routinely deals in
30
- * hundreds).
31
- *
32
- * @type {number}
33
- */
34
- const MAX_DIRECTIONAL_LIGHTS = 32;
35
-
36
- export class GPULightCollection {
37
-
38
- /**
39
- * @type {LightCollection}
40
- */
41
- #source
42
-
43
- /**
44
- *
45
- * @returns {LightCollection}
46
- */
47
- get source() {
48
- return this.#source;
49
- }
50
-
51
- /**
52
- * @type {GPUDevice}
53
- */
54
- #device
55
-
56
- /**
57
- * Backing GPUDatabase for the per-type light tables (point, spot, directional)
58
- * and shadowmap regions. Layout is defined by {@link LIGHT_DATABASE_SPEC}.
59
- *
60
- * @type {GPUDatabase}
61
- */
62
- #database;
63
-
64
- /**
65
- * @returns {GPUDatabase}
66
- */
67
- get database() {
68
- return this.#database;
69
- }
70
-
71
- /**
72
- * The single GPU buffer that backs the database. Bind this as `array<u32>` in
73
- * shaders that need to read light records via the auto-generated
74
- * {@link GPUTypedTableDescriptor.chunk_read} helpers.
75
- *
76
- * @returns {GPUBuffer}
77
- */
78
- get buffer_data() {
79
- return this.#database.buffer;
80
- }
81
-
82
- /**
83
- * Per-scene shadow allocator + rasterizer, owned by this collection because the
84
- * shadow records live in the same database (shadow_point / shadow_spot /
85
- * shadow_directional tables) and the per-light `shadow_id` field is the index into
86
- * those tables. Lifecycle, update, and destruction are all chained off this object.
87
- * @type {GPUSceneShadowmapContext}
88
- */
89
- #shadow_context;
90
-
91
- /**
92
- * @returns {GPUSceneShadowmapContext}
93
- */
94
- get shadow_context() {
95
- return this.#shadow_context;
96
- }
97
-
98
- /**
99
- *
100
- * @type {number}
101
- */
102
- #committed_version = -1;
103
-
104
- /**
105
- * Per-type counts written in the previous {@link build} pass. Used to identify
106
- * the trailing slot range that must be removed to keep each table tightly packed.
107
- */
108
- #prev_point_count = 0;
109
- #prev_spot_count = 0;
110
- #prev_directional_count = 0;
111
-
112
- /**
113
- * Octahedral encoded texture, convolved
114
- * see {@link LightCollection.environment}
115
- * @type {GPUTextureContext}
116
- */
117
- #environment;
118
-
119
- /**
120
- * @type {ShadeTexture}
121
- */
122
- #environment_source;
123
-
124
-
125
- /**
126
- *
127
- * @returns {GPUTextureContext}
128
- */
129
- get environment() {
130
- return this.#environment;
131
- }
132
-
133
-
134
- get gpu_memory_usage() {
135
- return this.#environment.gpu_memory_usage
136
- + this.#database.gpu_memory_usage
137
- ;
138
- }
139
-
140
- /**
141
- *
142
- * @param {GraphicsContext} graphics
143
- * @param {GPUSceneContext} scene_ctx the GPU-side context for this scene; the shadow
144
- * context constructs its own ViewManager that needs to look up this same context
145
- * when materializing GPUViewContexts for shadow views.
146
- */
147
- constructor(graphics, scene_ctx) {
148
- assert.defined(graphics, 'graphics');
149
- assert.defined(scene_ctx, 'scene_ctx');
150
- assert.equal(scene_ctx.isGPUSceneContext, true, 'scene_ctx.isGPUSceneContext !== true');
151
-
152
- const scene = scene_ctx.scene;
153
- const device = graphics.device;
154
-
155
- this.#device = device;
156
- this.#source = scene.lights;
157
-
158
- this.#environment = new GPUTextureContext(this.#device);
159
- this.#environment.descriptor.label = "environment map";
160
- this.#environment.descriptor.format = "rgba16float";
161
- this.#environment.descriptor.usage |=
162
- GPUTextureUsage.COPY_DST // so we can write to it
163
- | GPUTextureUsage.STORAGE_BINDING // so we can convolve it in compute shader
164
- ;
165
-
166
- this.#database = new GPUDatabase({
167
- device,
168
- label: 'Light Collection / Database',
169
- definition: LIGHT_DATABASE_SPEC,
170
- });
171
-
172
- this.#shadow_context = new GPUSceneShadowmapContext(graphics, scene_ctx, this);
173
- }
174
-
175
- /**
176
- *
177
- * @param {GraphicsContext} ctx
178
- */
179
- #update_environment(ctx) {
180
- const source_env = this.#source.environment;
181
-
182
- if (this.#environment_source === source_env) {
183
- // assume up-to-date
184
- return;
185
- }
186
-
187
- this.#environment_source = source_env;
188
-
189
- const gpu_ctx = this.#environment;
190
-
191
- const source_image = source_env.image;
192
- gpu_ctx.resize(source_image.width, source_image.height);
193
- /*
194
- The environment map is equirectangular and this context is built 2D a few lines up — the
195
- descriptor keeps the default dimension and `resize` above only takes two axes. Asked of the
196
- descriptor rather than assumed, so the count follows if that ever stops being true.
197
- */
198
- const gpu_size = gpu_ctx.descriptor.size;
199
-
200
- gpu_ctx.descriptor.mipLevelCount = texture_mip_level_count(
201
- gpu_size.width, gpu_size.height, gpu_size.depthOrArrayLayers, gpu_ctx.descriptor.dimension
202
- );
203
-
204
- gpu_ctx.allocate();
205
-
206
- if (
207
- source_image.source instanceof ImageBitmap
208
- && (gpu_ctx.descriptor.usage & GPUTextureUsage.RENDER_ATTACHMENT) === 0
209
- ) {
210
- // need RENDER_ATTACHMENT to use GPUQueue.copyExternalImageToTexture API
211
- // update descriptor and re-allocate texture
212
- gpu_ctx.descriptor.usage |= GPUTextureUsage.RENDER_ATTACHMENT;
213
- gpu_ctx.allocate(false);
214
- }
215
-
216
- texture_write_to_gpu(source_image, gpu_ctx.gpu_texture, this.#device.queue, source_image.level_count);
217
-
218
- // convolve
219
- const cmd = ShadeGPUCommandContext.create(ctx);
220
-
221
- execute_filter_environment_map(gpu_ctx, cmd);
222
-
223
- cmd.finish();
224
- }
225
-
226
- /**
227
- *
228
- * @param {GraphicsContext} ctx
229
- */
230
- update(ctx) {
231
- assert.defined(ctx, 'ctx');
232
-
233
- this.#update_environment(ctx);
234
-
235
- // Reconcile shadow allocations against the current scene every frame, even when
236
- // {@link LightCollection.version} hasn't moved. Shadow allocations can shift on
237
- // changes that don't bump version (e.g. flipping `light.casts_shadow`), and the
238
- // `shadow_id` we stamp into each light record depends on this allocation. When
239
- // process_lights touches anything we mark the source dirty so the build below
240
- // re-publishes those records.
241
- if (this.#shadow_context.process_lights()) {
242
- this.#source.needsUpdate = true;
243
- }
244
-
245
- if (this.#committed_version === this.#source.version) {
246
- return;
247
- }
248
-
249
- const cmd = ShadeGPUCommandContext.create(ctx, 'GPULightCollection/build');
250
-
251
- this.#build(cmd);
252
-
253
- cmd.finish();
254
- }
255
-
256
- /**
257
- * Marshal source lights into the per-type database tables, keeping each table
258
- * tightly packed in the index range [0, type_count).
259
- *
260
- * @param {ShadeGPUCommandContext} cmd
261
- */
262
- #build(cmd) {
263
- const lights = this.#source.elements;
264
-
265
- const table_point = this.#database.get('light_point');
266
- const table_spot = this.#database.get('light_spot');
267
- const table_directional = this.#database.get('light_directional');
268
-
269
- let point_count = 0;
270
- let spot_count = 0;
271
- let directional_count = 0;
272
-
273
- // Directional only — silently dropping a directional light
274
- // would surface as a missing visual; flagging keeps consumers
275
- // iterating only the first bitmap word correct for whatever
276
- // did fit. Point and spot have no cap.
277
- let directional_overflow_warned = false;
278
-
279
- for (let i = 0; i < lights.length; i++) {
280
- const light = lights[i];
281
-
282
- if (light.isPointLight === true) {
283
- table_point.set(point_count, light_record_point(light));
284
- point_count++;
285
- } else if (light.isDirectionalLight === true) {
286
- if (directional_count >= MAX_DIRECTIONAL_LIGHTS) {
287
- if (!directional_overflow_warned) {
288
- console.warn(
289
- `GPULightCollection: directional light count exceeds MAX_DIRECTIONAL_LIGHTS (${MAX_DIRECTIONAL_LIGHTS}); extras will not be written to the database.`
290
- );
291
- directional_overflow_warned = true;
292
- }
293
- continue;
294
- }
295
- table_directional.set(directional_count, light_record_directional(light));
296
- directional_count++;
297
- } else if (light.isSpotLight === true) {
298
- table_spot.set(spot_count, light_record_spot(light));
299
- spot_count++;
300
- }
301
- // unrecognized light kinds are silently dropped
302
- }
303
-
304
- // trim trailing slots from previous build to keep each table tightly packed
305
- for (let i = point_count; i < this.#prev_point_count; i++) {
306
- table_point.remove(i);
307
- }
308
- for (let i = spot_count; i < this.#prev_spot_count; i++) {
309
- table_spot.remove(i);
310
- }
311
- for (let i = directional_count; i < this.#prev_directional_count; i++) {
312
- table_directional.remove(i);
313
- }
314
-
315
- this.#prev_point_count = point_count;
316
- this.#prev_spot_count = spot_count;
317
- this.#prev_directional_count = directional_count;
318
-
319
- this.#database.update(cmd);
320
-
321
- this.#committed_version = this.#source.version;
322
- }
323
-
324
- destroy() {
325
- this.#shadow_context.destroy();
326
- this.#database.destroy();
327
- this.#environment.destroy();
328
- }
329
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
3
+ import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
4
+ import { GPUSceneShadowmapContext } from "../shadow/map/GPUSceneShadowmapContext.js";
5
+ import { GPUTextureContext } from "../texture/GPUTextureContext.js";
6
+ import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
7
+ import { texture_write_to_gpu } from "../texture/texture_write_to_gpu.js";
8
+ import { execute_filter_environment_map } from "./environment/execute_filter_environment_map.js";
9
+ import { LIGHT_DATABASE_SPEC } from "./LIGHT_DATABASE_SPEC.js";
10
+ import { light_record_directional } from "./model/io/light_record_directional.js";
11
+ import { light_record_point } from "./model/io/light_record_point.js";
12
+ import { light_record_spot } from "./model/io/light_record_spot.js";
13
+ import { row_of_entity } from "../scene/rows/GPUSceneRows.js";
14
+ import {
15
+ REFRESH_LIGHT_POSES_TABLE_COUNT,
16
+ REFRESH_LIGHT_POSES_WORKGROUP_SIZE,
17
+ shader_refresh_light_poses,
18
+ } from "./shader_refresh_light_poses.js";
19
+
20
+ /**
21
+ * @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
22
+ * @typedef {import("../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
23
+ * @typedef {import("./LightCollection.js").LightCollection} LightCollection
24
+ */
25
+
26
+ /**
27
+ * Directional-light cap. Sized so the directional occupancy bitmap
28
+ * fits in a single u32, which is what
29
+ * {@link chunk_directional_lights_iteration_mask} reads. Writing past
30
+ * key 31 would silently drop the light from iteration; {@link #build}
31
+ * warns once per build when this happens.
32
+ *
33
+ * Point and spot lights have no analogous cap — their consumers walk
34
+ * the full per-page bitmap, so any number of point/spot lights
35
+ * iterate correctly (e.g. clustered rendering routinely deals in
36
+ * hundreds).
37
+ *
38
+ * @type {number}
39
+ */
40
+ const MAX_DIRECTIONAL_LIGHTS = 32;
41
+
42
+ export class GPULightCollection {
43
+
44
+ /**
45
+ * @type {LightCollection}
46
+ */
47
+ #source
48
+
49
+ /**
50
+ *
51
+ * @returns {LightCollection}
52
+ */
53
+ get source() {
54
+ return this.#source;
55
+ }
56
+
57
+ /**
58
+ * @type {GPUDevice}
59
+ */
60
+ #device
61
+
62
+ /**
63
+ * Backing GPUDatabase for the per-type light tables (point, spot, directional)
64
+ * and shadowmap regions. Layout is defined by {@link LIGHT_DATABASE_SPEC}.
65
+ *
66
+ * @type {GPUDatabase}
67
+ */
68
+ #database;
69
+
70
+ /**
71
+ * @returns {GPUDatabase}
72
+ */
73
+ get database() {
74
+ return this.#database;
75
+ }
76
+
77
+ /**
78
+ * The single GPU buffer that backs the database. Bind this as `array<u32>` in
79
+ * shaders that need to read light records via the auto-generated
80
+ * {@link GPUTypedTableDescriptor.chunk_read} helpers.
81
+ *
82
+ * @returns {GPUBuffer}
83
+ */
84
+ get buffer_data() {
85
+ return this.#database.buffer;
86
+ }
87
+
88
+ /**
89
+ * The readback service over the light database — what carries a GPU-written row back to the
90
+ * CPU: a directional shadow map's caster range, measured against one frame's cascades and
91
+ * applied to the next frame's. Requests are taken any time; the copies are encoded at the tail
92
+ * of the shadow draw and delivered at the head of {@link update}.
93
+ *
94
+ * @returns {import("../buffer/table/GPUDatabaseReadback.js").GPUDatabaseReadback}
95
+ */
96
+ get readback() {
97
+ return this.#database.readback;
98
+ }
99
+
100
+ /**
101
+ * Per-scene shadow allocator + rasterizer, owned by this collection because the
102
+ * shadow records live in the same database (shadow_point / shadow_spot /
103
+ * shadow_directional tables) and the per-light `shadow_id` field is the index into
104
+ * those tables. Lifecycle, update, and destruction are all chained off this object.
105
+ * @type {GPUSceneShadowmapContext}
106
+ */
107
+ #shadow_context;
108
+
109
+ /**
110
+ * @returns {GPUSceneShadowmapContext}
111
+ */
112
+ get shadow_context() {
113
+ return this.#shadow_context;
114
+ }
115
+
116
+ /**
117
+ *
118
+ * @type {number}
119
+ */
120
+ #committed_version = -1;
121
+
122
+ /**
123
+ * Light -> the entity whose `transforms` row this holds for it.
124
+ * @type {Map<import("./model/Light.js").Light, number>}
125
+ */
126
+ #held = new Map();
127
+
128
+ /**
129
+ * The source version {@link sync_rows} last reconciled the held rows against.
130
+ * @type {number}
131
+ */
132
+ #rows_version = -1;
133
+
134
+ /**
135
+ * Per-type counts written in the previous {@link build} pass. Used to identify
136
+ * the trailing slot range that must be removed to keep each table tightly packed.
137
+ */
138
+ #prev_point_count = 0;
139
+ #prev_spot_count = 0;
140
+ #prev_directional_count = 0;
141
+
142
+ /**
143
+ * Octahedral encoded texture, convolved
144
+ * see {@link LightCollection.environment}
145
+ * @type {GPUTextureContext}
146
+ */
147
+ #environment;
148
+
149
+ /**
150
+ * @type {ShadeTexture}
151
+ */
152
+ #environment_source;
153
+
154
+
155
+ /**
156
+ *
157
+ * @returns {GPUTextureContext}
158
+ */
159
+ get environment() {
160
+ return this.#environment;
161
+ }
162
+
163
+
164
+ get gpu_memory_usage() {
165
+ return this.#environment.gpu_memory_usage
166
+ + this.#database.gpu_memory_usage
167
+ ;
168
+ }
169
+
170
+ /**
171
+ *
172
+ * @param {GraphicsContext} graphics
173
+ * @param {GPUSceneContext} scene_ctx the GPU-side context for this scene; the shadow
174
+ * context constructs its own ViewManager that needs to look up this same context
175
+ * when materializing GPUViewContexts for shadow views.
176
+ */
177
+ constructor(graphics, scene_ctx) {
178
+ assert.defined(graphics, 'graphics');
179
+ assert.defined(scene_ctx, 'scene_ctx');
180
+ assert.equal(scene_ctx.isGPUSceneContext, true, 'scene_ctx.isGPUSceneContext !== true');
181
+
182
+ const scene = scene_ctx.scene;
183
+ const device = graphics.device;
184
+
185
+ this.#device = device;
186
+ this.#source = scene.lights;
187
+
188
+ this.#environment = new GPUTextureContext(this.#device);
189
+ this.#environment.descriptor.label = "environment map";
190
+ this.#environment.descriptor.format = "rgba16float";
191
+ this.#environment.descriptor.usage |=
192
+ GPUTextureUsage.COPY_DST // so we can write to it
193
+ | GPUTextureUsage.STORAGE_BINDING // so we can convolve it in compute shader
194
+ ;
195
+
196
+ this.#database = new GPUDatabase({
197
+ device,
198
+ label: 'Light Collection / Database',
199
+ definition: LIGHT_DATABASE_SPEC,
200
+ });
201
+
202
+ this.#shadow_context = new GPUSceneShadowmapContext(graphics, scene_ctx, this);
203
+ }
204
+
205
+ /**
206
+ *
207
+ * @param {GraphicsContext} ctx
208
+ */
209
+ #update_environment(ctx) {
210
+ const source_env = this.#source.environment;
211
+
212
+ if (this.#environment_source === source_env) {
213
+ // assume up-to-date
214
+ return;
215
+ }
216
+
217
+ this.#environment_source = source_env;
218
+
219
+ const gpu_ctx = this.#environment;
220
+
221
+ const source_image = source_env.image;
222
+ gpu_ctx.resize(source_image.width, source_image.height);
223
+ /*
224
+ The environment map is equirectangular and this context is built 2D a few lines up — the
225
+ descriptor keeps the default dimension and `resize` above only takes two axes. Asked of the
226
+ descriptor rather than assumed, so the count follows if that ever stops being true.
227
+ */
228
+ const gpu_size = gpu_ctx.descriptor.size;
229
+
230
+ gpu_ctx.descriptor.mipLevelCount = texture_mip_level_count(
231
+ gpu_size.width, gpu_size.height, gpu_size.depthOrArrayLayers, gpu_ctx.descriptor.dimension
232
+ );
233
+
234
+ gpu_ctx.allocate();
235
+
236
+ if (
237
+ source_image.source instanceof ImageBitmap
238
+ && (gpu_ctx.descriptor.usage & GPUTextureUsage.RENDER_ATTACHMENT) === 0
239
+ ) {
240
+ // need RENDER_ATTACHMENT to use GPUQueue.copyExternalImageToTexture API
241
+ // update descriptor and re-allocate texture
242
+ gpu_ctx.descriptor.usage |= GPUTextureUsage.RENDER_ATTACHMENT;
243
+ gpu_ctx.allocate(false);
244
+ }
245
+
246
+ texture_write_to_gpu(source_image, gpu_ctx.gpu_texture, this.#device.queue, source_image.level_count);
247
+
248
+ // convolve
249
+ const cmd = ShadeGPUCommandContext.create(ctx);
250
+
251
+ execute_filter_environment_map(gpu_ctx, cmd);
252
+
253
+ cmd.finish();
254
+ }
255
+
256
+ /**
257
+ *
258
+ * @param {GraphicsContext} ctx
259
+ */
260
+ update(ctx) {
261
+ assert.defined(ctx, 'ctx');
262
+
263
+ // the apply point: whatever the device has answered since is delivered before anything
264
+ // this frame reads it
265
+ this.#database.readback.apply();
266
+
267
+ this.#update_environment(ctx);
268
+
269
+ // Reconcile shadow allocations against the current scene every frame, even when
270
+ // {@link LightCollection.version} hasn't moved. Shadow allocations can shift on
271
+ // changes that don't bump version (e.g. flipping `light.casts_shadow`), and the
272
+ // `shadow_id` we stamp into each light record depends on this allocation. When
273
+ // process_lights touches anything we mark the source dirty so the build below
274
+ // re-publishes those records.
275
+ if (this.#shadow_context.process_lights()) {
276
+ this.#source.needsUpdate = true;
277
+ }
278
+
279
+ if (this.#committed_version === this.#source.version) {
280
+ return;
281
+ }
282
+
283
+ const cmd = ShadeGPUCommandContext.create(ctx, 'GPULightCollection/build');
284
+
285
+ this.#build(cmd);
286
+
287
+ cmd.finish();
288
+ }
289
+
290
+ /**
291
+ * Hold a `transforms` row for every light's entity, and let go of the rows of lights that left.
292
+ *
293
+ * Called by the scene context before it flushes its rows, so a light that arrived this frame is
294
+ * written this frame; runs only when the source's version moved, and a moved light is one of
295
+ * the things that moves it, so every held row is marked as well — a mark on a row the GPU
296
+ * composes writes nothing.
297
+ *
298
+ * @param {import("../scene/rows/GPUSceneRows.js").GPUSceneRows} rows
299
+ */
300
+ sync_rows(rows) {
301
+ const source = this.#source;
302
+
303
+ if (this.#rows_version === source.version) {
304
+ return;
305
+ }
306
+
307
+ const held = this.#held;
308
+ const lights = source.elements;
309
+
310
+ for (let i = 0; i < lights.length; i++) {
311
+ const light = lights[i];
312
+ const entity = source.entity_of(light);
313
+
314
+ if (held.has(light)) {
315
+ rows.mark_world(entity);
316
+ } else {
317
+ rows.acquire(entity);
318
+ held.set(light, entity);
319
+ }
320
+ }
321
+
322
+ if (held.size !== lights.length) {
323
+ for (const [light, entity] of held) {
324
+ if (!source.has(light)) {
325
+ rows.release(entity);
326
+ held.delete(light);
327
+ }
328
+ }
329
+ }
330
+
331
+ this.#rows_version = source.version;
332
+ }
333
+
334
+ /**
335
+ * Write every light record's pose from its entity's row — after the hierarchy pass composed it.
336
+ * Nothing to dispatch while there is no light.
337
+ *
338
+ * @param {ShadeGPUCommandContext} cmd_ctx
339
+ * @param {GPUBuffer} scene_database
340
+ */
341
+ refresh_poses(cmd_ctx, scene_database) {
342
+ const database = this.#database;
343
+
344
+ const group_count = Math.max(
345
+ database.get('light_point').dispatch_group_count(REFRESH_LIGHT_POSES_WORKGROUP_SIZE),
346
+ database.get('light_spot').dispatch_group_count(REFRESH_LIGHT_POSES_WORKGROUP_SIZE),
347
+ database.get('light_directional').dispatch_group_count(REFRESH_LIGHT_POSES_WORKGROUP_SIZE),
348
+ );
349
+
350
+ if (group_count === 0) {
351
+ return;
352
+ }
353
+
354
+ shader_refresh_light_poses.dispatch({
355
+ encoder: cmd_ctx,
356
+ group_count_x: group_count,
357
+ group_count_y: REFRESH_LIGHT_POSES_TABLE_COUNT,
358
+ bindings: {
359
+ scene_database,
360
+ light_database: database.buffer,
361
+ },
362
+ });
363
+ }
364
+
365
+ /**
366
+ * Marshal source lights into the per-type database tables, keeping each table
367
+ * tightly packed in the index range [0, type_count).
368
+ *
369
+ * @param {ShadeGPUCommandContext} cmd
370
+ */
371
+ #build(cmd) {
372
+ const source = this.#source;
373
+ const lights = source.elements;
374
+
375
+ const table_point = this.#database.get('light_point');
376
+ const table_spot = this.#database.get('light_spot');
377
+ const table_directional = this.#database.get('light_directional');
378
+
379
+ let point_count = 0;
380
+ let spot_count = 0;
381
+ let directional_count = 0;
382
+
383
+ // Directional only — silently dropping a directional light
384
+ // would surface as a missing visual; flagging keeps consumers
385
+ // iterating only the first bitmap word correct for whatever
386
+ // did fit. Point and spot have no cap.
387
+ let directional_overflow_warned = false;
388
+
389
+ for (let i = 0; i < lights.length; i++) {
390
+ const light = lights[i];
391
+ const transform_row = row_of_entity(source.entity_of(light));
392
+
393
+ if (light.isPointLight === true) {
394
+ table_point.set(point_count, light_record_point(light, transform_row));
395
+ point_count++;
396
+ } else if (light.isDirectionalLight === true) {
397
+ if (directional_count >= MAX_DIRECTIONAL_LIGHTS) {
398
+ if (!directional_overflow_warned) {
399
+ console.warn(
400
+ `GPULightCollection: directional light count exceeds MAX_DIRECTIONAL_LIGHTS (${MAX_DIRECTIONAL_LIGHTS}); extras will not be written to the database.`
401
+ );
402
+ directional_overflow_warned = true;
403
+ }
404
+ continue;
405
+ }
406
+ table_directional.set(directional_count, light_record_directional(light, transform_row));
407
+ directional_count++;
408
+ } else if (light.isSpotLight === true) {
409
+ table_spot.set(spot_count, light_record_spot(light, transform_row));
410
+ spot_count++;
411
+ }
412
+ // unrecognized light kinds are silently dropped
413
+ }
414
+
415
+ // trim trailing slots from previous build to keep each table tightly packed
416
+ for (let i = point_count; i < this.#prev_point_count; i++) {
417
+ table_point.remove(i);
418
+ }
419
+ for (let i = spot_count; i < this.#prev_spot_count; i++) {
420
+ table_spot.remove(i);
421
+ }
422
+ for (let i = directional_count; i < this.#prev_directional_count; i++) {
423
+ table_directional.remove(i);
424
+ }
425
+
426
+ this.#prev_point_count = point_count;
427
+ this.#prev_spot_count = spot_count;
428
+ this.#prev_directional_count = directional_count;
429
+
430
+ this.#database.update(cmd);
431
+
432
+ this.#committed_version = this.#source.version;
433
+ }
434
+
435
+ destroy() {
436
+ // the rows go with the context that held them
437
+ this.#held.clear();
438
+ this.#rows_version = -1;
439
+
440
+ this.#shadow_context.destroy();
441
+ this.#database.destroy();
442
+ this.#environment.destroy();
443
+ }
444
+ }