@woosh/meep-engine 3.33.0 → 3.35.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 (503) hide show
  1. package/editor/Editor.d.ts.map +1 -1
  2. package/editor/Editor.js +0 -3
  3. package/editor/ecs/component/prototypeObjectEditor.js +1 -165
  4. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
  5. package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
  6. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
  7. package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
  8. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
  9. package/editor/process/SymbolicDisplayProcess.js +100 -106
  10. package/editor/prototypeEditorShell.d.ts.map +1 -1
  11. package/editor/prototypeEditorShell.js +190 -186
  12. package/editor/templates/entity_templates.d.ts.map +1 -1
  13. package/editor/templates/entity_templates.js +10 -27
  14. package/editor/view/makeEntityDecorators.js +2 -2
  15. package/package.json +1 -1
  16. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
  17. package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
  18. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
  19. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
  20. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
  21. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
  22. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
  23. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
  24. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
  25. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
  26. package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
  27. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
  28. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
  29. package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  30. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
  31. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  32. package/src/engine/animation/AnimatedActions.js +2 -4
  33. package/src/engine/animation/AnimationUtils.d.ts +1 -17
  34. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  35. package/src/engine/animation/AnimationUtils.js +138 -246
  36. package/src/engine/ecs/EntityManager.d.ts +1 -1
  37. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  38. package/src/engine/ecs/EntityManager.js +2 -2
  39. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
  40. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  41. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
  42. package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  43. package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
  44. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
  45. package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
  46. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
  50. package/src/engine/network/NetworkSession.d.ts +1 -1
  51. package/src/engine/network/NetworkSession.js +1 -1
  52. package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
  53. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  54. package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
  55. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
  56. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
  58. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  59. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  60. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
  61. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
  62. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  63. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
  64. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
  65. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  66. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
  67. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
  68. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  69. package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
  70. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +25 -11
  71. package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
  72. package/src/shade/device/timing/profile/GPUProfileSession.js +553 -474
  73. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  74. package/src/shade/playground/avboit/main.js +888 -916
  75. package/src/shade/playground/caldera/main.js +73 -60
  76. package/src/shade/playground/particle_ecs/README.md +13 -7
  77. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +5 -5
  78. package/src/shade/playground/particle_ecs/bonfire_effects.js +5 -5
  79. package/src/shade/playground/particle_ecs/effects/smoke.json +1859 -1859
  80. package/src/shade/playground/particle_ecs/effects/soot.json +1605 -1605
  81. package/src/shade/playground/particle_system/README.md +1 -2
  82. package/src/shade/playground/profile_hotkey.d.ts.map +1 -1
  83. package/src/shade/playground/profile_hotkey.js +4 -40
  84. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  85. package/src/shade/playground/skinned_blas_refit/main.js +4 -39
  86. package/src/shade/playground/vgeo_runtime/main.js +25 -77
  87. package/src/shade/playground/vgeo_scene/main.js +2231 -2217
  88. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  89. package/src/shade/playground/volumetrics_froxel/main.js +4 -39
  90. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  91. package/src/shade/playground/volumetrics_froxel/measure.js +2 -4
  92. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  93. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  94. package/src/shade/renderer/GraphicsContext.js +11 -2
  95. package/src/shade/renderer/Renderer.d.ts +1 -1
  96. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  97. package/src/shade/renderer/Renderer.js +41 -1
  98. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
  99. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  100. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
  101. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
  102. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  103. package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
  104. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
  105. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  106. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
  107. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
  108. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  109. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
  110. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
  111. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  112. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
  113. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
  114. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
  115. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
  116. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
  117. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  118. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
  119. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
  120. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  121. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
  122. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
  123. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  124. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
  125. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
  126. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  127. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
  128. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  129. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
  130. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  131. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
  132. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  133. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
  134. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  135. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
  136. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
  137. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
  138. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  139. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
  140. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
  142. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
  143. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
  145. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
  146. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
  148. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  149. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
  150. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
  151. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
  152. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
  153. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
  154. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
  156. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
  157. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
  158. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
  159. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
  160. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
  161. package/src/shade/renderer/light/GPULightCollection.d.ts +9 -1
  162. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  163. package/src/shade/renderer/light/GPULightCollection.js +41 -0
  164. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +37 -0
  165. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -0
  166. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +105 -0
  167. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  168. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  169. package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
  170. package/src/shade/renderer/particles/DESIGN.md +69 -18
  171. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +7 -1
  172. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/GPUParticleSystem.js +1247 -1244
  174. package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
  175. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/ParticleConstants.js +1 -3
  177. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +7 -1
  178. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  179. package/src/shade/renderer/particles/graph_particles_avboit.js +9 -0
  180. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
  181. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  182. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +7 -6
  183. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +15 -9
  184. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  185. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +29 -11
  186. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts +24 -0
  187. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.js +45 -0
  189. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +3 -0
  190. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  191. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -0
  192. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  193. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +190 -185
  194. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +45 -0
  195. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -0
  196. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +99 -0
  197. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +4 -4
  198. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -36
  199. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts +15 -0
  200. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts.map +1 -0
  201. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.js +103 -0
  202. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +3 -0
  203. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
  204. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +6 -1
  205. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +26 -0
  206. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -0
  207. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +91 -0
  208. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts +22 -0
  209. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts.map +1 -0
  210. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.js +102 -0
  211. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +2 -1
  212. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  213. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -24
  214. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +8 -0
  215. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  216. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +5 -0
  217. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -1
  218. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +9 -0
  220. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
  222. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
  224. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
  225. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  226. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
  227. package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
  228. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  229. package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
  230. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
  231. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  232. package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
  233. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  234. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
  235. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
  236. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
  237. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
  238. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
  239. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  240. package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
  241. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
  242. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
  243. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
  244. package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
  245. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
  246. package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
  247. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  248. package/src/shade/renderer/texture/TextureManager.js +4 -1
  249. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
  250. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
  251. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
  252. package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
  253. package/src/shade/renderer/view/ViewManager.d.ts +7 -1
  254. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  255. package/src/shade/renderer/view/ViewManager.js +17 -1
  256. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  257. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
  258. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +13 -3
  259. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  260. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +9 -1
  261. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +39 -0
  262. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -0
  263. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +107 -0
  264. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +15 -0
  265. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +1 -0
  266. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +44 -0
  267. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +19 -0
  268. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +1 -0
  269. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +48 -0
  270. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +29 -0
  271. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +1 -0
  272. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +90 -0
  273. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts +10 -0
  274. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts.map +1 -0
  275. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.js +55 -0
  276. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts +10 -0
  277. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts.map +1 -0
  278. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.js +47 -0
  279. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts +10 -0
  280. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts.map +1 -0
  281. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.js +63 -0
  282. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +17 -0
  283. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +1 -0
  284. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +26 -0
  285. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +8 -1
  286. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  287. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +50 -2
  288. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  289. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +488 -436
  290. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +1 -1
  291. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  292. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +254 -63
  293. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  294. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  295. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
  296. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  297. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  298. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
  299. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  300. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  301. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
  302. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  303. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  304. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
  305. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  306. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  307. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
  308. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  309. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  310. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
  311. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  312. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  313. package/editor/particles/rebuildParticleEmitter.js +0 -31
  314. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  315. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  316. package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
  317. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
  318. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  319. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
  320. package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
  321. package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
  322. package/src/engine/animation/removeEntityGenericEffect.js +0 -160
  323. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
  324. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
  325. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
  326. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -15
  327. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
  328. package/src/engine/graphics/ecs/sprite/Sprite.js +0 -14
  329. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -11
  330. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
  331. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -144
  332. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
  333. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
  334. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
  335. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
  336. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
  337. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
  338. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
  339. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
  340. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
  341. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
  342. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
  343. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
  344. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
  345. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
  346. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  347. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
  348. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
  349. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
  350. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
  351. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
  352. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
  353. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
  354. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
  355. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
  356. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
  357. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
  358. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
  359. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
  360. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
  361. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
  362. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
  363. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
  364. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
  365. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
  366. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
  367. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
  368. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
  369. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
  370. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
  371. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
  372. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
  373. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
  374. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
  375. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
  376. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
  377. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
  378. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
  379. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
  380. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
  381. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
  382. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
  383. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
  384. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
  385. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
  386. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
  387. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
  388. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
  389. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
  390. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
  391. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
  392. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
  393. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
  394. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
  395. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
  396. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
  397. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
  398. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
  399. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
  400. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
  401. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
  402. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
  403. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
  404. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
  405. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
  406. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
  407. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
  408. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
  409. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  410. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
  411. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
  412. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
  413. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
  414. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
  415. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
  416. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
  417. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
  418. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
  419. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
  420. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
  421. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
  422. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
  423. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
  424. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
  425. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
  426. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
  427. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
  428. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
  429. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
  430. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
  431. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
  432. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
  433. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
  434. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
  435. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
  436. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
  437. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
  438. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
  439. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
  440. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
  441. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
  442. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
  443. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
  444. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
  445. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
  446. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
  447. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
  448. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
  449. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
  450. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
  451. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
  452. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
  453. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
  454. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
  455. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
  456. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
  457. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
  458. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
  459. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
  460. package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
  461. package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
  462. package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
  463. package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
  464. package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
  465. package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
  466. package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
  467. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
  468. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
  469. package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
  470. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
  471. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
  472. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
  473. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
  474. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
  475. package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
  476. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
  477. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
  478. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
  479. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
  480. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
  481. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
  482. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
  483. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
  484. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
  485. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
  486. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
  487. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
  488. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
  489. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
  490. package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
  491. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
  492. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
  493. package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
  494. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
  495. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
  496. package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
  497. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
  498. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
  499. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
  500. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
  501. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
  502. package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
  503. /package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.d.ts +0 -0
@@ -1,36 +1,64 @@
1
1
  /**
2
2
  * Where each region of the feedback buffer starts, for one frame's worth of cutting.
3
3
  *
4
- * One function rather than two agreeing conventions: the pass that creates the buffer and the
5
- * params block that tells the kernel where to write both come from here, and so does anything that
6
- * reads it back. A layout computed twice is a layout that drifts, and the way it drifts is a want
7
- * list written over the touch bits, which reads as wants that never resolve.
8
- *
9
- * **Header, touch bits, want records — and the whole of it is read back.** Two regions used to sit
10
- * between the header and the lists and neither was the CPU's business: a stamp word per page row
11
- * and a stamp word per lookup word, cleared with the transient every frame and mapped back with
12
- * it. At the playground's 4,096 slots that was 344 KB a frame across the bus for 33 KB of lists,
13
- * and the lookup-sized half of it grew with every registered geometry rather than with anything
14
- * seen. The touch stamps are the touch bits now — one bit per row, which is both the dedup and
15
- * the record — and the want stamps live in a persistent, frame-tagged buffer the pool owns and
16
- * nothing reads back (RUNTIME_PLAN_2026_09_14 §2.2, §2.3).
4
+ * One function rather than two agreeing conventions: the pass that clears the buffer and the params
5
+ * block that tells the kernel where to write both come from here, and so does anything that reads it
6
+ * back. A layout computed twice is a layout that drifts, and the way it drifts is a want list written
7
+ * over the touch bits, which reads as wants that never resolve.
8
+ *
9
+ * **A header per view slot, the touch bits, then a want slice per slot — and the whole of it is read
10
+ * back.** Every view that cuts in a frame takes a slot (SHADOW_PLAN_2026_09_28 §2.4): its own counters
11
+ * and its own want list, so that a shadow view recording first cannot fill the list the main view
12
+ * records into later, and a reading can say which view needed more wavefronts. The touch bits stay
13
+ * one set — a page any view draws from is a page in use. With one slot this is the layout the buffer
14
+ * always had: the header at word 0, the touch bits after it, the wants after those.
15
+ *
16
+ * `want_capacity` is what one frame may ask for across every view, divided evenly among the slots,
17
+ * so the readback does not grow with the number of views.
17
18
  *
18
19
  * @param {Object} options
19
20
  * @param {number} options.page_row_capacity one touch bit per page-table row
20
- * @param {number} options.want_capacity records
21
- * @returns {{touch_bits_base: number, touch_word_count: number, want_base: number,
22
- * word_count: number}}
21
+ * @param {number} options.want_capacity records, across every slot
22
+ * @param {number} options.slot_count views the frame is laid out for
23
+ * @returns {{slot_count: number, touch_bits_base: number, touch_word_count: number, want_base: number,
24
+ * slot_want_capacity: number, clear_word_count: number, word_count: number}}
23
25
  *
24
26
  * @author Alex Goldring
25
27
  * @copyright Company Named Limited (c) 2026
26
28
  */
27
- export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity }: {
29
+ export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity, slot_count }: {
28
30
  page_row_capacity: number;
29
31
  want_capacity: number;
32
+ slot_count: number;
30
33
  }): {
34
+ slot_count: number;
31
35
  touch_bits_base: number;
32
36
  touch_word_count: number;
33
37
  want_base: number;
38
+ slot_want_capacity: number;
39
+ clear_word_count: number;
34
40
  word_count: number;
35
41
  };
42
+ /**
43
+ * Word offset of a slot's want counter.
44
+ *
45
+ * @param {number} slot
46
+ * @returns {number}
47
+ */
48
+ export function vgeo_feedback_slot_want_count(slot: number): number;
49
+ /**
50
+ * Word offset of a slot's first counter, {@link VGEO_CUT_STAT} indexing from it.
51
+ *
52
+ * @param {number} slot
53
+ * @returns {number}
54
+ */
55
+ export function vgeo_feedback_slot_stats(slot: number): number;
56
+ /**
57
+ * Word offset of a slot's first want record.
58
+ *
59
+ * @param {ReturnType<vgeo_cut_feedback_layout>} layout
60
+ * @param {number} slot
61
+ * @returns {number}
62
+ */
63
+ export function vgeo_feedback_slot_wants(layout: ReturnType<typeof vgeo_cut_feedback_layout>, slot: number): number;
36
64
  //# sourceMappingURL=vgeo_cut_feedback_layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_cut_feedback_layout.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IAR2B,iBAAiB,EAAjC,MAAM;IACU,aAAa,EAA7B,MAAM;IACJ;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAClF,UAAgB,EAAE,MAAM,CAAA;CAAC,CAmBzB"}
1
+ {"version":3,"file":"vgeo_cut_feedback_layout.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAT2B,iBAAiB,EAAjC,MAAM;IACU,aAAa,EAA7B,MAAM;IACU,UAAU,EAA1B,MAAM;IACJ;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IACtG,kBAAwB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA4B/E;AAED;;;;;GAKG;AACH,oDAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,+CAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,iDAJW,2CAAoC,QACpC,MAAM,GACJ,MAAM,CAIlB"}
@@ -5,41 +5,83 @@ import { VGEO_WANT_WORDS } from "../layout/VGEO_WANT_WORDS.js";
5
5
  /**
6
6
  * Where each region of the feedback buffer starts, for one frame's worth of cutting.
7
7
  *
8
- * One function rather than two agreeing conventions: the pass that creates the buffer and the
9
- * params block that tells the kernel where to write both come from here, and so does anything that
10
- * reads it back. A layout computed twice is a layout that drifts, and the way it drifts is a want
11
- * list written over the touch bits, which reads as wants that never resolve.
12
- *
13
- * **Header, touch bits, want records — and the whole of it is read back.** Two regions used to sit
14
- * between the header and the lists and neither was the CPU's business: a stamp word per page row
15
- * and a stamp word per lookup word, cleared with the transient every frame and mapped back with
16
- * it. At the playground's 4,096 slots that was 344 KB a frame across the bus for 33 KB of lists,
17
- * and the lookup-sized half of it grew with every registered geometry rather than with anything
18
- * seen. The touch stamps are the touch bits now — one bit per row, which is both the dedup and
19
- * the record — and the want stamps live in a persistent, frame-tagged buffer the pool owns and
20
- * nothing reads back (RUNTIME_PLAN_2026_09_14 §2.2, §2.3).
8
+ * One function rather than two agreeing conventions: the pass that clears the buffer and the params
9
+ * block that tells the kernel where to write both come from here, and so does anything that reads it
10
+ * back. A layout computed twice is a layout that drifts, and the way it drifts is a want list written
11
+ * over the touch bits, which reads as wants that never resolve.
12
+ *
13
+ * **A header per view slot, the touch bits, then a want slice per slot — and the whole of it is read
14
+ * back.** Every view that cuts in a frame takes a slot (SHADOW_PLAN_2026_09_28 §2.4): its own counters
15
+ * and its own want list, so that a shadow view recording first cannot fill the list the main view
16
+ * records into later, and a reading can say which view needed more wavefronts. The touch bits stay
17
+ * one set — a page any view draws from is a page in use. With one slot this is the layout the buffer
18
+ * always had: the header at word 0, the touch bits after it, the wants after those.
19
+ *
20
+ * `want_capacity` is what one frame may ask for across every view, divided evenly among the slots,
21
+ * so the readback does not grow with the number of views.
21
22
  *
22
23
  * @param {Object} options
23
24
  * @param {number} options.page_row_capacity one touch bit per page-table row
24
- * @param {number} options.want_capacity records
25
- * @returns {{touch_bits_base: number, touch_word_count: number, want_base: number,
26
- * word_count: number}}
25
+ * @param {number} options.want_capacity records, across every slot
26
+ * @param {number} options.slot_count views the frame is laid out for
27
+ * @returns {{slot_count: number, touch_bits_base: number, touch_word_count: number, want_base: number,
28
+ * slot_want_capacity: number, clear_word_count: number, word_count: number}}
27
29
  *
28
30
  * @author Alex Goldring
29
31
  * @copyright Company Named Limited (c) 2026
30
32
  */
31
- export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity }) {
33
+ export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity, slot_count }) {
32
34
  assert.isNonNegativeInteger(page_row_capacity, 'page_row_capacity');
33
35
  assert.isNonNegativeInteger(want_capacity, 'want_capacity');
36
+ assert.isNonNegativeInteger(slot_count, 'slot_count');
37
+ assert.greaterThan(slot_count, 0, 'slot_count');
34
38
 
35
- const touch_bits_base = VGEO_FEEDBACK_OFFSET.HEADER_WORDS;
39
+ const touch_bits_base = slot_count * VGEO_FEEDBACK_OFFSET.HEADER_WORDS;
36
40
  const touch_word_count = Math.max(1, Math.ceil(page_row_capacity / 32));
37
41
  const want_base = touch_bits_base + touch_word_count;
38
42
 
43
+ const slot_want_capacity = Math.floor(want_capacity / slot_count);
44
+
39
45
  return {
46
+ slot_count,
40
47
  touch_bits_base,
41
48
  touch_word_count,
42
49
  want_base,
43
- word_count: want_base + want_capacity * VGEO_WANT_WORDS,
50
+ slot_want_capacity,
51
+ // the counters and the touch bits start every frame at zero; a want record is only ever read
52
+ // below its slot's count, so the lists need no clearing
53
+ clear_word_count: want_base,
54
+ word_count: want_base + slot_count * slot_want_capacity * VGEO_WANT_WORDS,
44
55
  };
45
56
  }
57
+
58
+ /**
59
+ * Word offset of a slot's want counter.
60
+ *
61
+ * @param {number} slot
62
+ * @returns {number}
63
+ */
64
+ export function vgeo_feedback_slot_want_count(slot) {
65
+ return slot * VGEO_FEEDBACK_OFFSET.HEADER_WORDS + VGEO_FEEDBACK_OFFSET.WANT_COUNT;
66
+ }
67
+
68
+ /**
69
+ * Word offset of a slot's first counter, {@link VGEO_CUT_STAT} indexing from it.
70
+ *
71
+ * @param {number} slot
72
+ * @returns {number}
73
+ */
74
+ export function vgeo_feedback_slot_stats(slot) {
75
+ return slot * VGEO_FEEDBACK_OFFSET.HEADER_WORDS + VGEO_FEEDBACK_OFFSET.STATS;
76
+ }
77
+
78
+ /**
79
+ * Word offset of a slot's first want record.
80
+ *
81
+ * @param {ReturnType<vgeo_cut_feedback_layout>} layout
82
+ * @param {number} slot
83
+ * @returns {number}
84
+ */
85
+ export function vgeo_feedback_slot_wants(layout, slot) {
86
+ return layout.want_base + slot * layout.slot_want_capacity * VGEO_WANT_WORDS;
87
+ }
@@ -7,18 +7,15 @@
7
7
  * at all, because a wavefront is sixty-odd dispatches whose only output would be zero.
8
8
  *
9
9
  * The frame check is the second half of that. A runtime exists from the moment somebody enables it,
10
- * but its feedback buffer exists only between `begin_frame` and `end_frame`; a path that runs
11
- * outside a frame — a shadow view built before the main pass opens one, say — skips rather than
12
- * writing into a resource that is not there.
10
+ * but a frame is open only while the renderer is rendering one; a path that runs outside it — a
11
+ * bake, a preview drawn outside `Renderer.render` — skips rather than cutting against feedback no
12
+ * reading will ever collect.
13
13
  *
14
- * **And the graph check is the third.** `GPUSceneShadowmapContext` records through
15
- * `graph_rasterize_scene_fast_raw`, which carries this seam, on a `FrameGraph` of its own — so a
16
- * cube or tetra face inside an open frame would run a whole cut, at the *main camera's* projection
17
- * scale, writing into a resource handle that belongs to another graph. Design §4 pins one cut per
18
- * view and RUNTIME_PLAN §9 scopes shadow cuts out of v1; a graph that is not the one the frame was
19
- * opened on is therefore not a graph this seam belongs in (REVIEW_LEDGER M13). When shadow views do
20
- * get cuts, they get their own `begin_frame` and their own τ, and this check is what makes that a
21
- * change rather than a discovery.
14
+ * **Any graph of the frame may cut.** It used to be only the graph the frame was opened on, because
15
+ * the feedback buffer was a transient of that graph and a shadow map records into a `FrameGraph` of
16
+ * its own — so shadow views skipped, and virtual geometry cast no shadows (REVIEW_LEDGER M13,
17
+ * SHADOW_PLAN_2026_09_28). The buffer is the runtime's now and each graph imports it, so a shadow
18
+ * view is a view like any other: its own projection, its own threshold, its own slot.
22
19
  *
23
20
  * @param {Object} options
24
21
  * @param {FrameGraph} options.graph
@@ -1 +1 @@
1
- {"version":3,"file":"graph_vgeo_expand_if_enabled.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IAV+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACC,MAAM;IACjC,MAAM,CAyBlB"}
1
+ {"version":3,"file":"graph_vgeo_expand_if_enabled.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IAV+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACC,MAAM;IACjC,MAAM,CAqBlB"}
@@ -9,18 +9,15 @@ import { graph_vgeo_expand_instances_to_meshlets } from "./graph_vgeo_expand_ins
9
9
  * at all, because a wavefront is sixty-odd dispatches whose only output would be zero.
10
10
  *
11
11
  * The frame check is the second half of that. A runtime exists from the moment somebody enables it,
12
- * but its feedback buffer exists only between `begin_frame` and `end_frame`; a path that runs
13
- * outside a frame — a shadow view built before the main pass opens one, say — skips rather than
14
- * writing into a resource that is not there.
12
+ * but a frame is open only while the renderer is rendering one; a path that runs outside it — a
13
+ * bake, a preview drawn outside `Renderer.render` — skips rather than cutting against feedback no
14
+ * reading will ever collect.
15
15
  *
16
- * **And the graph check is the third.** `GPUSceneShadowmapContext` records through
17
- * `graph_rasterize_scene_fast_raw`, which carries this seam, on a `FrameGraph` of its own — so a
18
- * cube or tetra face inside an open frame would run a whole cut, at the *main camera's* projection
19
- * scale, writing into a resource handle that belongs to another graph. Design §4 pins one cut per
20
- * view and RUNTIME_PLAN §9 scopes shadow cuts out of v1; a graph that is not the one the frame was
21
- * opened on is therefore not a graph this seam belongs in (REVIEW_LEDGER M13). When shadow views do
22
- * get cuts, they get their own `begin_frame` and their own τ, and this check is what makes that a
23
- * change rather than a discovery.
16
+ * **Any graph of the frame may cut.** It used to be only the graph the frame was opened on, because
17
+ * the feedback buffer was a transient of that graph and a shadow map records into a `FrameGraph` of
18
+ * its own — so shadow views skipped, and virtual geometry cast no shadows (REVIEW_LEDGER M13,
19
+ * SHADOW_PLAN_2026_09_28). The buffer is the runtime's now and each graph imports it, so a shadow
20
+ * view is a view like any other: its own projection, its own threshold, its own slot.
24
21
  *
25
22
  * @param {Object} options
26
23
  * @param {FrameGraph} options.graph
@@ -42,11 +39,7 @@ export function graph_vgeo_expand_if_enabled({
42
39
  }) {
43
40
  const runtime = view?.scene?.virtual_geometry;
44
41
 
45
- if (runtime === undefined || runtime.feedback === -1) {
46
- return output_meshlets;
47
- }
48
-
49
- if (runtime.frame_graph !== graph) {
42
+ if (runtime === undefined || !runtime.frame_open) {
50
43
  return output_meshlets;
51
44
  }
52
45
 
@@ -1 +1 @@
1
- {"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CA6SlB"}
1
+ {"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CA4TlB"}
@@ -68,12 +68,13 @@ export function graph_vgeo_expand_instances_to_meshlets({
68
68
  assert.isNonNegativeInteger(input_meshes, 'input_meshes');
69
69
  assert.isNonNegativeInteger(output_meshlets, 'output_meshlets');
70
70
  assert.defined(runtime, 'runtime');
71
- assert.notEqual(runtime.feedback, -1, 'runtime.feedback — begin_frame must have run');
71
+ assert.equal(runtime.frame_open, true, 'runtime.frame_open — begin_frame must have run');
72
72
 
73
73
  const scene = view.scene;
74
74
  const pool = runtime.pool;
75
75
 
76
- graph.push_scope("virtual geometry cut");
76
+ // which view, in a capture: a frame cuts once per site of every view, and the scopes were identical
77
+ graph.push_scope(`virtual geometry cut (${view.label ?? 'a view'})`);
77
78
 
78
79
  const instance_capacity = Math.max(1, limits.get_limit(RasterizationCollectionType.Meshes));
79
80
 
@@ -98,9 +99,11 @@ export function graph_vgeo_expand_instances_to_meshlets({
98
99
  */
99
100
  const view_cut = view.virtual_geometry_cut;
100
101
 
102
+ // off the matrix the view draws with, so a cascade's orthographic camera is a projection too
101
103
  view_cut.set_projection({
102
- screen_height: Math.max(1, view.resolution[1]),
103
- fov_y: view.camera.camera.fov,
104
+ width: Math.max(1, view.resolution[0]),
105
+ height: Math.max(1, view.resolution[1]),
106
+ projection_matrix: view.camera.camera.projection_matrix,
104
107
  });
105
108
 
106
109
  /*
@@ -117,7 +120,19 @@ export function graph_vgeo_expand_instances_to_meshlets({
117
120
  */
118
121
  view_cut.clear_frontier();
119
122
 
120
- view_cut.write_params({ runtime });
123
+ /*
124
+ This view's slot in the frame's feedback — its own counters, its own want slice and its own stamp
125
+ tag, taken the first time it cuts in the frame and the same at every site after.
126
+ */
127
+ const slot = runtime.slot_of(view_cut);
128
+
129
+ view_cut.write_params({ runtime, slot });
130
+
131
+ // the frame's feedback buffer, as this graph knows it: imported on first use, cleared by the first
132
+ const feedback_in = runtime.feedback_in(graph);
133
+
134
+ // and this view's own wavefront bound, raised from its own readings
135
+ const max_iterations = view_cut.iterations_under(runtime);
121
136
 
122
137
  // ----- collect: which of these instances are virtual, and where is the camera in each one -----
123
138
 
@@ -161,7 +176,7 @@ export function graph_vgeo_expand_instances_to_meshlets({
161
176
  ));
162
177
 
163
178
  // the first writer of the frame's counters, so the version chain starts here
164
- collect_data.feedback = collect_pass.write(runtime.feedback);
179
+ collect_data.feedback = collect_pass.write(feedback_in);
165
180
 
166
181
  /*
167
182
  The scan turns each instance's claim width into the first bit of its slice. It is the same
@@ -241,7 +256,7 @@ export function graph_vgeo_expand_instances_to_meshlets({
241
256
 
242
257
  // ----- the wavefront -----
243
258
 
244
- for (let iteration = 0; iteration < runtime.max_iterations; iteration++) {
259
+ for (let iteration = 0; iteration < max_iterations; iteration++) {
245
260
  const prepare_data = {};
246
261
 
247
262
  const prepare_pass = graph.add(
@@ -342,12 +357,12 @@ export function graph_vgeo_expand_instances_to_meshlets({
342
357
  feedback = tail_data.feedback = tail_pass.write(feedback);
343
358
 
344
359
  /*
345
- Every expansion of this frame writes into one feedback buffer, so the next one has to start
346
- from the version this one produced rather than from the version `begin_frame` created — and so
360
+ Every expansion of this graph writes into one feedback buffer, so the next one has to start
361
+ from the version this one produced rather than from the version the import created — and so
347
362
  does the readback. The graph catches the alternative outright, which is the best kind of
348
363
  invariant to have.
349
364
  */
350
- runtime.publish_feedback(feedback);
365
+ runtime.publish_feedback(graph, feedback);
351
366
 
352
367
  graph.pop_scope();
353
368
 
@@ -1,12 +1,14 @@
1
1
  import { VGEO_CUT_STAT_COUNT } from "./VGEO_CUT_STAT_COUNT.js";
2
2
 
3
3
  /**
4
- * Word offsets in the feedback buffer — the one thing the cut hands back to the CPU, and the only
5
- * place in the runtime where a GPU pass and a host frame meet.
4
+ * Word offsets within one view slot's header in the feedback buffer — the one thing the cut hands
5
+ * back to the CPU, and the only place in the runtime where a GPU pass and a host frame meet.
6
6
  *
7
- * Header first, then the touch bits, then the want records; see `vgeo_cut_feedback_layout` for the
8
- * two that move. Design §6: the wants loop tolerates its transport — multi-frame `mapAsync`
9
- * latency, a small in-flight cap, and frames where feedback is skipped entirely.
7
+ * A header per slot, then the touch bits, then a want slice per slot; see
8
+ * `vgeo_cut_feedback_layout` for where each starts. Slot 0's header is at word 0, so a frame of one
9
+ * view is laid out exactly as the buffer always was. Design §6: the wants loop tolerates its
10
+ * transport — multi-frame `mapAsync` latency, a small in-flight cap, and frames where feedback is
11
+ * skipped entirely.
10
12
  *
11
13
  * There is no touch count any more. A touch is one bit per page row (RUNTIME_PLAN_2026_09_14
12
14
  * §2.2), so the list it used to count, and the capacity that list could overflow, are gone.
@@ -21,9 +23,9 @@ export const VGEO_FEEDBACK_OFFSET = {
21
23
  */
22
24
  STATS: 1,
23
25
  /**
24
- * Where the touch bits begin. The want records follow them, and their base travels in the
25
- * params block because a graph resource's size is a host-side decision and the kernel must not
26
- * assume one.
26
+ * Words in one slot's header. The touch bits begin after the last slot's, and the want records
27
+ * after those; their bases travel in the params block because a buffer's layout is a host-side
28
+ * decision and the kernel must not assume one.
27
29
  */
28
30
  HEADER_WORDS: 1 + VGEO_CUT_STAT_COUNT,
29
31
  };
@@ -7,5 +7,6 @@ export namespace VGEO_INSTANCE_OFFSET {
7
7
  let LOOKUP_WORD_OFFSET: number;
8
8
  let CLAIM_BASE: number;
9
9
  let ORDINAL_CAPACITY: number;
10
+ let DISTANCE_WEIGHT: number;
10
11
  }
11
12
  //# sourceMappingURL=VGEO_INSTANCE_OFFSET.d.ts.map
@@ -19,14 +19,19 @@ export const VGEO_INSTANCE_OFFSET = {
19
19
  */
20
20
  EYE: 0,
21
21
  /**
22
- * `screen_height / (2 * tan(fov_y / 2))`, times the scale correction below.
22
+ * The view's pixels per unit — see `VGeoViewCut.set_projection` — times the scale correction
23
+ * below.
23
24
  *
24
- * Error and distance are both object-space, so a **uniform** instance scale cancels out of
25
- * `r_e * k / d` exactly and needs no term at all. A non-uniform one does not cancel, and the
26
- * correction is the ratio of the transform's singular values — σ_max / σ_min, not the ratio of
27
- * its column lengths, which a shear leaves at 1 while stretching space without bound
28
- * (REVIEW_LEDGER M4). It over-refines rather than under-refines, and it is exactly 1 for every
29
- * instance that is not stretched.
25
+ * **Perspective:** error and distance are both object-space, so a **uniform** instance scale
26
+ * cancels out of `r_e * k / d` exactly and needs no term at all. A non-uniform one does not
27
+ * cancel, and the correction is the ratio of the transform's singular values — σ_max / σ_min,
28
+ * not the ratio of its column lengths, which a shear leaves at 1 while stretching space without
29
+ * bound (REVIEW_LEDGER M4). It over-refines rather than under-refines, and it is exactly 1 for
30
+ * every instance that is not stretched.
31
+ *
32
+ * **Orthographic:** there is no distance for a scale to cancel against, so an object-space error
33
+ * becomes world units by the instance's scale and the correction is σ_max alone. Both are
34
+ * `σ_max / (w · σ_min + 1 − w)` with `w` the {@link DISTANCE_WEIGHT} below.
30
35
  */
31
36
  PROJECTION_K: 3,
32
37
  /**
@@ -51,4 +56,11 @@ export const VGEO_INSTANCE_OFFSET = {
51
56
  * How many bits that slice runs to.
52
57
  */
53
58
  ORDINAL_CAPACITY: 28,
59
+ /**
60
+ * How much distance divides the projected error: 1 for a perspective view, 0 for an orthographic
61
+ * one. `vg_project` divides by `w · d + (1 − w)`, so a parallel projection's error is `r_e · k`
62
+ * wherever the cluster is, and the camera-inside-the-sphere rule — which has no meaning without
63
+ * an eye — cannot fire.
64
+ */
65
+ DISTANCE_WEIGHT: 29,
54
66
  };
@@ -2,9 +2,11 @@
2
2
  * Spawn one page-fetch worker.
3
3
  *
4
4
  * The `new Worker(new URL(..., import.meta.url), { type: "module" })` form is what the consumer's
5
- * bundler detects and what vite serves as-is, and it lives in a module no spec imports, because
5
+ * bundler detects and what vite serves as-is, and it lives in a module of its own because
6
6
  * `import.meta` is a parse error under a CommonJS transform — the same arrangement
7
- * `makeClothWorker` keeps for the same reason.
7
+ * `makeClothWorker` keeps for the same reason. Specs do import it, through `GPUSceneContext`: vitest
8
+ * parses it as ESM, and nothing is resolved until a worker is spawned, which
9
+ * `GPUSceneContext.destroy.spec.js` does against a stand-in global `Worker`.
8
10
  *
9
11
  * @returns {Worker}
10
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"make_vgeo_page_worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,yCALa,MAAM,CAOlB"}
1
+ {"version":3,"file":"make_vgeo_page_worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,yCALa,MAAM,CAOlB"}
@@ -2,9 +2,11 @@
2
2
  * Spawn one page-fetch worker.
3
3
  *
4
4
  * The `new Worker(new URL(..., import.meta.url), { type: "module" })` form is what the consumer's
5
- * bundler detects and what vite serves as-is, and it lives in a module no spec imports, because
5
+ * bundler detects and what vite serves as-is, and it lives in a module of its own because
6
6
  * `import.meta` is a parse error under a CommonJS transform — the same arrangement
7
- * `makeClothWorker` keeps for the same reason.
7
+ * `makeClothWorker` keeps for the same reason. Specs do import it, through `GPUSceneContext`: vitest
8
+ * parses it as ESM, and nothing is resolved until a worker is spawned, which
9
+ * `GPUSceneContext.destroy.spec.js` does against a stand-in global `Worker`.
8
10
  *
9
11
  * @returns {Worker}
10
12
  *
@@ -11,6 +11,10 @@ export class Brick4LightMap {
11
11
  * @param {ArrayBuffer} data
12
12
  */
13
13
  upload(data: ArrayBuffer): void;
14
+ /**
15
+ * Release the map's buffer. Safe to call twice.
16
+ */
17
+ destroy(): void;
14
18
  #private;
15
19
  }
16
20
  //# sourceMappingURL=Brick4LightMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Brick4LightMap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/brick4/Brick4LightMap.js"],"names":[],"mappings":"AAKA;IAsBI;;;OAGG;IACH,+BAUC;IA5BD,kBAEC;IAQD,4BAEC;IAkBD;;;OAGG;IACH,aAFW,WAAW,QAgDrB;;CAEJ"}
1
+ {"version":3,"file":"Brick4LightMap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/brick4/Brick4LightMap.js"],"names":[],"mappings":"AAKA;IAsBI;;;OAGG;IACH,+BAUC;IA5BD,kBAEC;IAQD,4BAEC;IAkBD;;;OAGG;IACH,aAFW,WAAW,QAgDrB;IAED;;OAEG;IACH,gBAEC;;CAEJ"}
@@ -93,4 +93,11 @@ export class Brick4LightMap {
93
93
 
94
94
  }
95
95
 
96
+ /**
97
+ * Release the map's buffer. Safe to call twice.
98
+ */
99
+ destroy() {
100
+ this.#buffer.destroy();
101
+ }
102
+
96
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GPULightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js"],"names":[],"mappings":"AAeA;;GAEG;AAGH;IAsFI;;;;OAIG;IACH,uCAFW,gBAAgB,EAmC1B;IArHD;;;OAGG;IACH,+DAEC;IAOD;;;OAGG;IACH,6BAEC;IAOD;;;OAGG;IACH,+BAEC;IAOD;;;OAGG;IACH,sCAEC;IAOD,iCAEC;IAoBD;;OAEG;IACH,OAFU,aAAa,CAEjB;IA4JN,oBAwDC;IAED,eAIC;IAED,eAMC;IAED,gBAKC;IAED,4BAMC;IAED;;OAEG;IACH,0BAsBC;IAED,wBAOC;;CACJ;+BA9WY,OAAO,uBAAuB,EAAE,gBAAgB;+BAV9B,gCAAgC;8BAIjC,sCAAsC"}
1
+ {"version":3,"file":"GPULightProbeVolume.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js"],"names":[],"mappings":"AAeA;;GAEG;AAGH;IAsFI;;;;OAIG;IACH,uCAFW,gBAAgB,EAmC1B;IArHD;;;OAGG;IACH,+DAEC;IAOD;;;OAGG;IACH,6BAEC;IAOD;;;OAGG;IACH,+BAEC;IAOD;;;OAGG;IACH,sCAEC;IAOD,iCAEC;IAoBD;;OAEG;IACH,OAFU,aAAa,CAEjB;IA4JN,oBAwDC;IAED,eAIC;IAED,eAMC;IAED,gBAMC;IAED,4BAMC;IAED;;OAEG;IACH,0BAsBC;IAED,wBAOC;;CACJ;+BA/WY,OAAO,uBAAuB,EAAE,gBAAgB;+BAV9B,gCAAgC;8BAIjC,sCAAsC"}
@@ -334,6 +334,7 @@ export class GPULightProbeVolume {
334
334
  this.#buffer_mesh.destroy();
335
335
  this.#buffer_probes.destroy();
336
336
  this.#buffer_metadata.destroy();
337
+ this.#buffer_mesh_bvh.destroy();
337
338
  this.atlas.destroy();
338
339
  }
339
340
 
@@ -42,7 +42,15 @@ export class GPULightCollection {
42
42
  * @returns {GPUTextureContext}
43
43
  */
44
44
  get environment(): GPUTextureContext;
45
- get gpu_memory_usage(): number;
45
+ /**
46
+ * The environment's radiance as RGB SH2 (`ENVIRONMENT_SH_TYPE`), the form the renderer's probe-based
47
+ * indirect lighting hands over too: what the froxel GI stage starts the froxel irradiance volume
48
+ * with under IBL. Zero while there is no environment, as {@link environment} is black then.
49
+ *
50
+ * @returns {GPUBuffer}
51
+ */
52
+ get environment_sh(): GPUBuffer;
53
+ get gpu_memory_usage(): any;
46
54
  /**
47
55
  *
48
56
  * @param {GraphicsContext} ctx
@@ -1 +1 @@
1
- {"version":3,"file":"GPULightCollection.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/GPULightCollection.js"],"names":[],"mappings":"AA0CA;IAgII;;;;;;OAMG;IACH,sBALW,eAAe,aACf,eAAe,EA8BzB;IA1JD;;;OAGG;IACH,6DAEC;IAeD;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,6BAEC;IAED;;;;;;;OAOG;IACH,qFAEC;IAWD;;OAEG;IACH,+CAEC;IAyCD;;;OAGG;IACH,qCAEC;IAGD,+BAIC;IA4GD;;;OAGG;IACH,YAFW,eAAe,QA8BzB;IAED;;;;;;;;;OASG;IACH,gBAFW,OAAO,+BAA+B,EAAE,YAAY,QAkC9D;IAED;;;;;;OAMG;IACH,uBAHW,sBAAsB,mCAyBhC;IAwED,gBAQC;;CACJ;8BA3bY,OAAO,uBAAuB,EAAE,eAAe;8BAC/C,OAAO,6BAA6B,EAAE,eAAe;8BACrD,OAAO,sBAAsB,EAAE,eAAe;4BApB/B,gCAAgC;yCACnB,2CAA2C;kCAClD,iCAAiC;uCAH5B,wCAAwC"}
1
+ {"version":3,"file":"GPULightCollection.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/GPULightCollection.js"],"names":[],"mappings":"AA2CA;IAmJI;;;;;;OAMG;IACH,sBALW,eAAe,aACf,eAAe,EAqCzB;IApLD;;;OAGG;IACH,6DAEC;IAeD;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,6BAEC;IAED;;;;;;;OAOG;IACH,qFAEC;IAWD;;OAEG;IACH,+CAEC;IAgDD;;;OAGG;IACH,qCAEC;IAED;;;;;;OAMG;IACH,gCAEC;IAGD,4BAKC;IAgID;;;OAGG;IACH,YAFW,eAAe,QA8BzB;IAED;;;;;;;;;OASG;IACH,gBAFW,OAAO,+BAA+B,EAAE,YAAY,QAkC9D;IAED;;;;;;OAMG;IACH,uBAHW,sBAAsB,mCAyBhC;IAwED,gBASC;;CACJ;8BAneY,OAAO,uBAAuB,EAAE,eAAe;8BAC/C,OAAO,6BAA6B,EAAE,eAAe;8BACrD,OAAO,sBAAsB,EAAE,eAAe;4BArB/B,gCAAgC;yCACnB,2CAA2C;kCAClD,iCAAiC;uCAH5B,wCAAwC"}