@woosh/meep-engine 3.32.0 → 3.34.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 (465) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/Editor.d.ts.map +1 -1
  3. package/editor/Editor.js +0 -3
  4. package/editor/ecs/component/prototypeObjectEditor.js +1 -165
  5. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
  6. package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
  7. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
  8. package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
  9. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
  10. package/editor/process/SymbolicDisplayProcess.js +100 -106
  11. package/editor/prototypeEditorShell.d.ts.map +1 -1
  12. package/editor/prototypeEditorShell.js +190 -186
  13. package/editor/templates/entity_templates.d.ts.map +1 -1
  14. package/editor/templates/entity_templates.js +10 -27
  15. package/editor/view/makeEntityDecorators.js +2 -2
  16. package/package.json +1 -1
  17. package/src/core/collection/table/RowFirstTable.d.ts +8 -0
  18. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  19. package/src/core/collection/table/RowFirstTable.js +40 -11
  20. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
  21. package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
  22. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
  23. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
  24. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
  25. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
  26. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
  27. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
  28. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
  29. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
  30. package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
  31. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
  32. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
  33. package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  34. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
  35. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  36. package/src/engine/animation/AnimatedActions.js +2 -4
  37. package/src/engine/animation/AnimationUtils.d.ts +1 -17
  38. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  39. package/src/engine/animation/AnimationUtils.js +138 -246
  40. package/src/engine/ecs/EntityManager.d.ts +1 -1
  41. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  42. package/src/engine/ecs/EntityManager.js +2 -2
  43. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
  44. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  45. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
  46. package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  47. package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
  48. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
  49. package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
  50. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
  51. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
  52. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  53. package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
  54. package/src/engine/network/NetworkSession.d.ts +1 -1
  55. package/src/engine/network/NetworkSession.js +1 -1
  56. package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
  57. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  58. package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
  59. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
  60. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  61. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
  62. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  63. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  64. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
  65. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
  66. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  67. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
  68. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
  69. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  70. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
  71. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
  72. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  73. package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
  74. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +20 -3
  75. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  76. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +21 -3
  77. package/src/shade/playground/caldera/main.js +73 -60
  78. package/src/shade/playground/vgeo_runtime/main.js +25 -77
  79. package/src/shade/playground/vgeo_scene/main.js +2231 -2217
  80. package/src/shade/renderer/GraphicsContext.d.ts +18 -0
  81. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  82. package/src/shade/renderer/GraphicsContext.js +63 -40
  83. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  84. package/src/shade/renderer/Renderer.js +38 -0
  85. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
  86. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  87. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
  88. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +6 -5
  89. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -1
  90. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +241 -240
  91. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts +51 -0
  92. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts.map +1 -1
  93. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.js +214 -28
  94. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts +2 -1
  95. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts.map +1 -1
  96. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.js +19 -17
  97. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.d.ts +70 -0
  98. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.d.ts.map +1 -0
  99. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.js +257 -0
  100. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts.map +1 -1
  101. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.js +19 -34
  102. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +6 -20
  103. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  104. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +42 -36
  105. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -1
  106. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  107. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +4 -3
  108. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts +4 -3
  109. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts.map +1 -1
  110. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.js +7 -4
  111. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +14 -15
  112. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  113. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +49 -83
  114. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts +19 -3
  115. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  116. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +26 -6
  117. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +2 -1
  118. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  119. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +12 -6
  120. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +3 -2
  121. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  122. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +21 -13
  123. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
  124. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  125. package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
  126. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
  127. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  128. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
  129. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
  130. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  131. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
  132. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
  133. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  134. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
  135. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
  136. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
  137. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
  138. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
  139. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  140. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
  141. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
  142. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  143. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
  144. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
  145. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  146. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
  147. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
  148. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  149. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
  150. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  151. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
  152. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  153. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
  154. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
  156. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
  158. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
  159. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
  160. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  161. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
  162. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
  164. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
  165. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
  167. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
  168. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
  169. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
  170. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  171. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
  172. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
  173. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
  174. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
  175. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
  176. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
  177. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
  178. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
  179. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
  180. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
  181. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
  182. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
  183. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  184. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  185. package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
  186. package/src/shade/renderer/particles/DESIGN.md +4 -10
  187. package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
  188. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  189. package/src/shade/renderer/particles/ParticleConstants.js +1 -3
  190. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
  191. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  192. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +3 -4
  193. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  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/AVBOIT_LEDGER.md +20 -0
  215. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  216. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
  217. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  218. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
  219. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
  220. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  221. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
  222. package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
  223. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  224. package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
  225. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
  226. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  227. package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
  228. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.d.ts.map +1 -1
  229. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js +8 -1
  230. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  231. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
  232. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
  233. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
  234. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
  235. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
  236. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  237. package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
  238. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
  239. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
  240. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
  241. package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
  242. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
  243. package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
  244. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  245. package/src/shade/renderer/texture/TextureManager.js +4 -1
  246. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
  247. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
  248. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
  249. package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
  250. package/src/shade/renderer/view/ViewManager.d.ts +7 -1
  251. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  252. package/src/shade/renderer/view/ViewManager.js +17 -1
  253. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  254. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
  255. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  256. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  257. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
  258. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  259. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  260. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
  261. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  262. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  263. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
  264. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  265. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  266. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
  267. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  268. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  269. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
  270. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  271. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  272. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
  273. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  274. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  275. package/editor/particles/rebuildParticleEmitter.js +0 -31
  276. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  277. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  278. package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
  279. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
  280. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  281. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
  282. package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
  283. package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
  284. package/src/engine/animation/removeEntityGenericEffect.js +0 -160
  285. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
  286. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
  287. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
  288. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -12
  289. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
  290. package/src/engine/graphics/ecs/sprite/Sprite.js +0 -11
  291. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -8
  292. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
  293. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -141
  294. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
  295. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
  296. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
  297. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
  298. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
  299. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
  300. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
  301. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
  302. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
  303. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
  304. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
  305. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
  306. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
  307. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
  308. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  309. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
  310. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
  311. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
  312. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
  313. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
  314. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
  315. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
  316. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
  317. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
  318. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
  319. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
  320. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
  321. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
  322. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
  323. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
  324. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
  325. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
  326. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
  327. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
  328. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
  329. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
  330. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
  331. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
  332. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
  333. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
  334. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
  335. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
  336. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
  337. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
  338. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
  339. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
  340. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
  341. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
  342. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
  343. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
  344. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
  345. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
  346. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
  347. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
  348. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
  349. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
  350. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
  351. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
  352. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
  353. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
  354. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
  355. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
  356. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
  357. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
  358. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
  359. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
  360. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
  361. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
  362. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
  363. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
  364. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
  365. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
  366. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
  367. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
  368. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
  369. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
  370. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
  371. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  372. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
  373. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
  374. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
  375. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
  376. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
  377. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
  378. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
  379. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
  380. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
  381. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
  382. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
  383. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
  384. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
  385. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
  386. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
  387. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
  388. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
  389. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
  390. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
  391. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
  392. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
  393. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
  394. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
  395. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
  396. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
  397. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
  398. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
  399. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
  400. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
  401. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
  402. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
  403. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
  404. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
  405. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
  406. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
  407. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
  408. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
  409. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
  410. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
  411. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
  412. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
  413. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
  414. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
  415. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
  416. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
  417. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
  418. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
  419. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
  420. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
  421. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
  422. package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
  423. package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
  424. package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
  425. package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
  426. package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
  427. package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
  428. package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
  429. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
  430. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
  431. package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
  432. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
  433. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
  434. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
  435. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
  436. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
  437. package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
  438. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
  439. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
  440. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
  441. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
  442. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
  443. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
  444. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
  445. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
  446. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
  447. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
  448. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
  449. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
  450. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
  451. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
  452. package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
  453. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
  454. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
  455. package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
  456. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
  457. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
  458. package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
  459. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
  460. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
  461. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
  462. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
  463. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
  464. package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
  465. /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
 
@@ -13,7 +13,7 @@ export class TinyGltf {
13
13
  * @readonly
14
14
  * @type {TextureFormat}
15
15
  */
16
- static readonly "__#251@#UNCOMPRESSED_TARGET": TextureFormat;
16
+ static readonly "__#250@#UNCOMPRESSED_TARGET": TextureFormat;
17
17
  /**
18
18
  * @param {AssetManager} assetManager
19
19
  * @param {AssetRequestScope} [scope]
@@ -1 +1 @@
1
- {"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AAyNA;IAiFI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAmD3B;IApID;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAsBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAoLD;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAiMnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAWC;IAED;;;;;;;;;OASG;IACH,kBAFW,qBAAqB,QAM/B;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAuED;;;OAGG;IACH,YAFW,sBAAsB,QAiChC;;CAEJ;6BA51BY,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCApBzE,yBAAyB;mCAjBG,8CAA8C"}
1
+ {"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AAyNA;IAiFI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAmD3B;IApID;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAsBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAoLD;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAiMnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAaC;IAED;;;;;;;;;OASG;IACH,kBAFW,qBAAqB,QAM/B;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAuED;;;OAGG;IACH,YAFW,sBAAsB,QAiChC;;CAEJ;6BA91BY,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCApBzE,yBAAyB;mCAjBG,8CAA8C"}
@@ -724,6 +724,8 @@ export class GPUMaterialManager {
724
724
 
725
725
  this.#dynamic_contexts.length = 0;
726
726
 
727
+ this.#metadata_table.destroy();
728
+
727
729
  this.#list_version++;
728
730
  this.#version++;
729
731
  }
@@ -523,12 +523,7 @@ alpha scaled before premultiplication.
523
523
 
524
524
  Additive vs. alpha is never a pipeline switch: the shader emits premultiplied RGB with alpha 0
525
525
  (additive) or alpha a (normal), so one setup covers both and the choice stays per particle and
526
- GPU-driven. Under AVBOIT that choice picks which accumulators the fragment writes; in the blended
527
- pipeline `shaders/shader_particle_render.js` builds it is one blend state,
528
- `(one, one-minus-src-alpha)` on both channels. That pipeline is not this system's — it is what
529
- `GPUParticularRenderer` draws `particular`'s CPU-simulated particles with, over a draw list it sorts
530
- back to front on the CPU — but it shares this vertex stage, this atlas and flipbook math, and
531
- `particle_fade_color`, so a sprite looks the same whichever draws it.
526
+ GPU-driven. Under AVBOIT that choice picks which accumulators the fragment writes.
532
527
 
533
528
  ### Drawing: an AVBOIT side channel
534
529
 
@@ -564,8 +559,8 @@ contribution at the three points where the meshlet buckets have just made theirs
564
559
  The whole decision is `chunk_particle_avboit_contribution`, and it is spec'd on the emulator.
565
560
 
566
561
  All three read the alive list and the draw args straight from `simulate`; the vertex stage is one
567
- chunk (`chunk_particle_billboard_vertex`), shared by the splat, the draw and the blended pipeline
568
- `particular` uses. `GPUParticleSystem` implements the three methods; `Renderer.feature_particles_enabled`
562
+ chunk (`chunk_particle_billboard_vertex`), shared by the splat and the draw. `GPUParticleSystem`
563
+ implements the three methods; `Renderer.feature_particles_enabled`
569
564
  runs `execute` before the transparency pass and hands the system to the orchestrator. MBOIT is legacy
570
565
  and gets no particle path, so under it the particles simulate and are not drawn.
571
566
 
@@ -582,7 +577,7 @@ everything `chunk_particle_avboit_contribution` does after its premultiply
582
577
  ECS system over the pair `[ParticleEffect, Transform64]` — the component says what an entity emits,
583
578
  the transform says where — in exactly the shape `DecalSystem` and `MeshSystem` use for their own
584
579
  content. Construct it with `(graphicsEngine, scene, assetManager)` and add it to the EntityManager.
585
- It is opt-in and coexists with the legacy CPU `ParticleEmitterSystem`.
580
+ It is opt-in.
586
581
 
587
582
  ```js
588
583
  entityManager.addSystem(new GPUParticleEmitterSystem(graphics, scene, assetManager));
@@ -719,7 +714,6 @@ src/shade/renderer/particles/
719
714
  shaders/shader_particle_emit.js per-newborn INIT, sized by the scan
720
715
  shaders/shader_particle_simulate.js per-particle UPDATE + compaction + orphan kill
721
716
  shaders/shader_particle_finalize.js reset counters (+ budget) / build indirect args
722
- shaders/shader_particle_render.js blended billboard pipeline (GPUParticularRenderer's)
723
717
  shaders/chunk_particle_setup_context.js VM builtins from the emitter's node, + the RNG seed
724
718
  shaders/chunk_particle_emitter_age.js the tick pass's running age, off the emitter_state table
725
719
  shaders/chunk_particle_spawn_budget.js take from the frame's spawn budget; both ticks spend it
@@ -253,9 +253,7 @@ export const PARTICLE_SIM_PAD_SLOT: number;
253
253
  * Above all it is what the two passes that have to agree on a fragment's coverage agree on: the
254
254
  * AVBOIT draw, which weights the accumulators by it, and the AVBOIT splat, which records the
255
255
  * extinction the volume then hands to everything behind. A fade in one and not the other is a
256
- * surface that is invisible and still occludes. The blended billboard pipeline
257
- * (`shaders/shader_particle_render.js`) reads it too, so a particle fades over the same distance
258
- * whichever pipeline draws it.
256
+ * surface that is invisible and still occludes.
259
257
  *
260
258
  * @type {number}
261
259
  */