@woosh/meep-engine 3.17.2 → 3.18.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 (263) hide show
  1. package/editor/actions/concrete/ComponentAddAction.d.ts +1 -0
  2. package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -1
  3. package/editor/actions/concrete/ComponentAddAction.js +4 -0
  4. package/editor/actions/concrete/ComponentRemoveAction.d.ts +1 -0
  5. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -1
  6. package/editor/actions/concrete/ComponentRemoveAction.js +4 -0
  7. package/editor/actions/concrete/EntityCreateAction.d.ts +1 -0
  8. package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -1
  9. package/editor/actions/concrete/EntityCreateAction.js +7 -0
  10. package/editor/actions/concrete/EntityRemoveAction.d.ts +1 -0
  11. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -1
  12. package/editor/actions/concrete/EntityRemoveAction.js +4 -0
  13. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +10 -0
  14. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -1
  15. package/editor/actions/concrete/PatchTerrainHeightAction.js +107 -85
  16. package/editor/actions/concrete/TransformModifyAction.d.ts +1 -0
  17. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  18. package/editor/actions/concrete/TransformModifyAction.js +4 -0
  19. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  20. package/editor/particles/effect/ParticleEffectDocument.js +10 -6
  21. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  22. package/editor/particles/effect/ParticleReferenceSimulation.js +98 -4
  23. package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -1
  24. package/editor/particles/effect/make_starter_particle_effect.js +0 -2
  25. package/editor/tools/engine/ToolEngine.d.ts +30 -0
  26. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  27. package/editor/tools/engine/ToolEngine.js +257 -188
  28. package/editor/view/ecs/EntityList.d.ts.map +1 -1
  29. package/editor/view/ecs/EntityList.js +6 -5
  30. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  31. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +17 -9
  32. package/package.json +1 -1
  33. package/src/CODEC_LAYOUT_VERIFICATION.md +1 -2
  34. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts +56 -0
  35. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts.map +1 -0
  36. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.js +73 -0
  37. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.d.ts.map +1 -1
  38. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.js +18 -63
  39. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts +53 -0
  40. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts.map +1 -0
  41. package/src/core/binary/meshopt/meshopt_encode_byte_group.js +140 -0
  42. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts +32 -0
  43. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts.map +1 -0
  44. package/src/core/binary/meshopt/meshopt_encode_data_block.js +77 -0
  45. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts +46 -0
  46. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts.map +1 -0
  47. package/src/core/binary/meshopt/meshopt_encode_index_sequence.js +146 -0
  48. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts +40 -0
  49. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts.map +1 -0
  50. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.js +700 -0
  51. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts +24 -0
  52. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts.map +1 -0
  53. package/src/core/binary/meshopt/meshopt_write_uint_var.js +39 -0
  54. package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
  55. package/src/core/math/random/seededRandom_Mulberry32.js +4 -2
  56. package/src/core/process/undo/Action.d.ts +19 -0
  57. package/src/core/process/undo/Action.d.ts.map +1 -1
  58. package/src/core/process/undo/Action.js +17 -0
  59. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +78 -0
  60. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -0
  61. package/src/engine/graphics3/GPUParticleEmitterSystem.js +310 -0
  62. package/src/engine/graphics3/GraphicsEngine.d.ts +17 -0
  63. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  64. package/src/engine/graphics3/GraphicsEngine.js +30 -10
  65. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
  66. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -2
  67. package/src/engine/interpolation/InterpolationSystem.d.ts +7 -0
  68. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  69. package/src/engine/interpolation/InterpolationSystem.js +10 -0
  70. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  71. package/src/engine/network/NetworkSession.js +14 -34
  72. package/src/engine/network/time/RenderPlayout.d.ts +76 -0
  73. package/src/engine/network/time/RenderPlayout.d.ts.map +1 -0
  74. package/src/engine/network/time/RenderPlayout.js +163 -0
  75. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -1
  76. package/src/engine/network/transport/adapters/WebSocketTransport.js +11 -4
  77. package/src/engine/physics/ecs/PhysicsSystem.d.ts +4 -12
  78. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  79. package/src/engine/physics/ecs/PhysicsSystem.js +39 -13
  80. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  81. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  82. package/src/engine/sound/simulation/core/VolumeField.js +4 -1
  83. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +23 -2
  84. package/src/shade/playground/particle_system/README.md +139 -139
  85. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  86. package/src/shade/playground/particle_system/particle_prototype.js +0 -2
  87. package/src/shade/playground/particle_system/particle_scene.d.ts +6 -9
  88. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  89. package/src/shade/playground/particle_system/particle_scene.js +6 -13
  90. package/src/shade/playground/ssr_reprojection/README.md +103 -0
  91. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts +17 -0
  92. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts.map +1 -0
  93. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -0
  94. package/src/shade/playground/ssr_reprojection/index.html +79 -0
  95. package/src/shade/playground/ssr_reprojection/main.d.ts +2 -0
  96. package/src/shade/playground/ssr_reprojection/main.d.ts.map +1 -0
  97. package/src/shade/playground/ssr_reprojection/main.js +245 -0
  98. package/src/shade/playground/ssr_reprojection/scene.d.ts +18 -0
  99. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -0
  100. package/src/shade/playground/ssr_reprojection/scene.js +51 -0
  101. package/src/shade/renderer/Renderer.d.ts +2 -23
  102. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  103. package/src/shade/renderer/Renderer.js +185 -218
  104. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +5 -8
  105. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  106. package/src/shade/renderer/animation/GPUAnimationManager.js +12 -12
  107. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  108. package/src/shade/renderer/buffer/table/GPUTypedTable.js +6 -0
  109. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  110. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +7 -0
  111. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts +4 -0
  112. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts.map +1 -0
  113. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.js +51 -0
  114. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +5 -35
  116. package/src/shade/renderer/particles/DESIGN.md +703 -514
  117. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +16 -4
  118. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  119. package/src/shade/renderer/particles/GPUParticleSystem.js +1189 -991
  120. package/src/shade/renderer/particles/ParticleConstants.d.ts +64 -0
  121. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  122. package/src/shade/renderer/particles/ParticleConstants.js +71 -0
  123. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +57 -0
  124. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -0
  125. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +181 -0
  126. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts +7 -0
  127. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts.map +1 -0
  128. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.js +12 -0
  129. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts +33 -0
  130. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts.map +1 -0
  131. package/src/shade/renderer/particles/bounds/graph_particle_bounds.js +67 -0
  132. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts +40 -0
  133. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts.map +1 -0
  134. package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -0
  135. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +15 -2
  136. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  137. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +14 -8
  138. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +58 -4
  139. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  140. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +79 -4
  141. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +23 -1
  142. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +35 -2
  144. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +4 -2
  145. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +5 -8
  147. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/data/particle_emitter_record.js +0 -6
  149. package/src/shade/renderer/particles/graph_particles.d.ts +25 -3
  150. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  151. package/src/shade/renderer/particles/graph_particles.js +108 -31
  152. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +6 -4
  153. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/graph_particles_avboit.js +5 -5
  155. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +5 -0
  156. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  157. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +27 -6
  158. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +4 -0
  159. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  160. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +6 -1
  161. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +35 -27
  162. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  163. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +424 -425
  164. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts +20 -0
  165. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts.map +1 -0
  166. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +4 -0
  167. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  168. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -2
  169. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts +22 -0
  170. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts.map +1 -0
  171. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.js +42 -0
  172. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +1 -1
  173. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -1
  174. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +53 -22
  175. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +213 -216
  177. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts +50 -0
  178. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts.map +1 -0
  179. package/src/shade/renderer/particles/shaders/shader_particle_render.js +1 -1
  180. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts +36 -0
  181. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts.map +1 -0
  182. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.js +102 -0
  183. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts +102 -0
  184. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -0
  185. package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +329 -0
  186. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts +112 -0
  187. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/warmup/shader_particle_warmup.js +318 -0
  189. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts +35 -0
  190. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -0
  191. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +108 -0
  192. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts +3 -0
  193. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -0
  194. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +70 -0
  195. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts +62 -0
  196. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts.map +1 -0
  197. package/src/shade/renderer/particles/warmup/warmup_schedule.js +55 -0
  198. package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/PostProcess.js +2 -1
  200. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +286 -0
  201. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +57 -21
  202. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  203. package/src/shade/renderer/postprocess/ssr/SSR.js +230 -129
  204. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts +11 -0
  205. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts.map +1 -0
  206. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.js +6 -0
  207. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts +4 -0
  208. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts.map +1 -0
  209. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.js +32 -0
  210. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts +4 -0
  211. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts.map +1 -0
  212. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -0
  213. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts +3 -0
  214. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -0
  215. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +30 -0
  216. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts +4 -0
  217. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -0
  218. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +70 -0
  219. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts +21 -0
  220. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -0
  221. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +363 -0
  222. package/src/shade/renderer/postprocess/ssr/resolve/chunk_get_neighbour_weight.js +1 -1
  223. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts +2 -0
  224. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts.map +1 -0
  225. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.js +24 -0
  226. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts +1 -6
  227. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  228. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +16 -332
  229. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts +1 -6
  230. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  231. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +25 -358
  232. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +0 -5
  233. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  234. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +201 -276
  235. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +1 -0
  236. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  237. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +167 -143
  238. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts +15 -0
  239. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts.map +1 -0
  240. package/src/shade/renderer/shader/graph/graph_create_buffer.js +20 -0
  241. package/src/shade/renderer/view/GPUViewContext.d.ts +3 -4
  242. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  243. package/src/shade/renderer/view/GPUViewContext.js +5 -5
  244. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts +0 -24
  245. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts.map +0 -1
  246. package/src/core/binary/meshopt/__meshopt_test_streams.js +0 -237
  247. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts +0 -84
  248. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts.map +0 -1
  249. package/src/core/geom/3d/atlas/atlas_test_fixtures.js +0 -266
  250. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts +0 -97
  251. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +0 -1
  252. package/src/engine/asset/loaders/gltf_test_fixtures.js +0 -359
  253. package/src/shade/renderer/animation/skin_test_fixtures.d.ts +0 -86
  254. package/src/shade/renderer/animation/skin_test_fixtures.d.ts.map +0 -1
  255. package/src/shade/renderer/animation/skin_test_fixtures.js +0 -250
  256. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts +0 -16
  257. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts.map +0 -1
  258. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.js +0 -27
  259. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +0 -151
  260. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +0 -1
  261. package/src/shade/renderer/particles/particle_test_fixtures.js +0 -229
  262. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +0 -23
  263. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +0 -457
@@ -8,6 +8,7 @@ declare class ComponentAddAction extends Action<any> {
8
8
  dataset: EntityComponentDataset;
9
9
  entity: any;
10
10
  component: any;
11
+ collectWrites(editor: any, writes: any): void;
11
12
  apply(editor: any): Promise<void>;
12
13
  revert(editor: any): Promise<void>;
13
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentAddAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/ComponentAddAction.js"],"names":[],"mappings":";AAEA;IAOI,yCAIC;IAVD;;;OAGG;IACH,gCAAe;IAIX,YAAoB;IACpB,eAA0B;IAG9B,kCAqBC;IAED,mCAGC;CACJ;uBA1CsB,0CAA0C"}
1
+ {"version":3,"file":"ComponentAddAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/ComponentAddAction.js"],"names":[],"mappings":";AAEA;IAOI,yCAIC;IAVD;;;OAGG;IACH,gCAAe;IAIX,YAAoB;IACpB,eAA0B;IAG9B,8CAEC;IAED,kCAqBC;IAED,mCAGC;CACJ;uBA9CsB,0CAA0C"}
@@ -13,6 +13,10 @@ class ComponentAddAction extends Action {
13
13
  this.component = component;
14
14
  }
15
15
 
16
+ collectWrites(editor, writes) {
17
+ writes.component(this.entity, this.component.constructor);
18
+ }
19
+
16
20
  async apply(editor) {
17
21
  /**
18
22
  * @type {EntityManager}
@@ -4,6 +4,7 @@ declare class ComponentRemoveAction extends Action<any> {
4
4
  component: any;
5
5
  entity: any;
6
6
  componentType: any;
7
+ collectWrites(editor: any, writes: any): void;
7
8
  apply(editor: any): Promise<void>;
8
9
  revert(editor: any): Promise<void>;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentRemoveAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/ComponentRemoveAction.js"],"names":[],"mappings":";AAEA;IAGI,6CAKC;IAPD,eAAiB;IAKb,YAAoB;IACpB,mBAAkC;IAGtC,kCAUC;IAED,mCAIC;CACJ;uBA7BsB,0CAA0C"}
1
+ {"version":3,"file":"ComponentRemoveAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/ComponentRemoveAction.js"],"names":[],"mappings":";AAEA;IAGI,6CAKC;IAPD,eAAiB;IAKb,YAAoB;IACpB,mBAAkC;IAGtC,8CAEC;IAED,kCAUC;IAED,mCAIC;CACJ;uBAjCsB,0CAA0C"}
@@ -10,6 +10,10 @@ class ComponentRemoveAction extends Action {
10
10
  this.componentType = componentType;
11
11
  }
12
12
 
13
+ collectWrites(editor, writes) {
14
+ writes.component(this.entity, this.componentType);
15
+ }
16
+
13
17
  async apply(editor) {
14
18
  /**
15
19
  * @type {EntityComponentDataset}
@@ -11,6 +11,7 @@ declare class EntityCreateAction extends Action<any> {
11
11
  * @type {EntityComponentDataset}
12
12
  */
13
13
  ecd: EntityComponentDataset;
14
+ collectWrites(editor: any, writes: any): void;
14
15
  apply(editor: any): Promise<void>;
15
16
  revert(editor: any): Promise<void>;
16
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCreateAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/EntityCreateAction.js"],"names":[],"mappings":";AAEA;;IACI;;;OAGG;IACH,QAFU,MAAM,GAAC,IAAI,CAEP;IAEd;;;OAGG;IACH,4BAAW;IAEX,kCAkBC;IAED,mCAEC;CACJ;uBAtCsB,0CAA0C"}
1
+ {"version":3,"file":"EntityCreateAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/EntityCreateAction.js"],"names":[],"mappings":";AAEA;;IACI;;;OAGG;IACH,QAFU,MAAM,GAAC,IAAI,CAEP;IAEd;;;OAGG;IACH,4BAAW;IAEX,8CAKC;IAED,kCAkBC;IAED,mCAEC;CACJ;uBA7CsB,0CAA0C"}
@@ -13,6 +13,13 @@ class EntityCreateAction extends Action {
13
13
  */
14
14
  ecd = null;
15
15
 
16
+ collectWrites(editor, writes) {
17
+ // the id is assigned before apply by hosts that lease ids; a null entity is a local create
18
+ if (this.entity !== null) {
19
+ writes.entity(this.entity);
20
+ }
21
+ }
22
+
16
23
  async apply(editor) {
17
24
  if (this.ecd === null) {
18
25
  /**
@@ -6,6 +6,7 @@ declare class EntityRemoveAction extends Action<Editor> {
6
6
  constructor(entity: any);
7
7
  components: any[];
8
8
  entity: any;
9
+ collectWrites(editor: any, writes: any): void;
9
10
  }
10
11
  import { Action } from "../../../src/core/process/undo/Action.js";
11
12
  //# sourceMappingURL=EntityRemoveAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityRemoveAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/EntityRemoveAction.js"],"names":[],"mappings":";AAEA;;GAEG;AACH;IAGI,yBAGC;IALD,kBAAgB;IAIZ,YAAoB;CAmC3B;uBA7CsB,0CAA0C"}
1
+ {"version":3,"file":"EntityRemoveAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/EntityRemoveAction.js"],"names":[],"mappings":";AAEA;;GAEG;AACH;IAGI,yBAGC;IALD,kBAAgB;IAIZ,YAAoB;IAGxB,8CAEC;CAkCJ;uBAjDsB,0CAA0C"}
@@ -11,6 +11,10 @@ class EntityRemoveAction extends Action {
11
11
  this.entity = entity;
12
12
  }
13
13
 
14
+ collectWrites(editor, writes) {
15
+ writes.entity(this.entity);
16
+ }
17
+
14
18
  /**
15
19
  *
16
20
  * @param {Editor} editor
@@ -26,7 +26,17 @@ export class PatchTerrainHeightAction extends ModifyPatchSampler2DAction {
26
26
  * @type {Terrain}
27
27
  */
28
28
  terrain: Terrain;
29
+ /**
30
+ * The heightmap rectangle this action writes (E4): a host recording through a ledger turns it
31
+ * into blob patches keyed by the terrain's entity.
32
+ * @param {Editor} editor
33
+ * @param {{blob: function(number, Function, string, number, number, number, number): void}} writes
34
+ */
35
+ collectWrites(editor: Editor, writes: {
36
+ blob: (arg0: number, arg1: Function, arg2: string, arg3: number, arg4: number, arg5: number, arg6: number) => void;
37
+ }): void;
29
38
  updateTerrain(): Promise<void>;
30
39
  }
31
40
  import { ModifyPatchSampler2DAction } from "./ModifyPatchSampler2DAction.js";
41
+ import Terrain from "../../../src/engine/ecs/terrain/ecs/Terrain.js";
32
42
  //# sourceMappingURL=PatchTerrainHeightAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PatchTerrainHeightAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/PatchTerrainHeightAction.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,8CARW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,eACN,MAAM,gBACN,MAAM,aACN,MAAM,cACN,MAAM,QAOhB;AAID;IACI;;;;;;;OAOG;IACH,iCALW,MAAM,KACN,MAAM,SACN,MAAM,UACN,MAAM,EAUhB;IALG;;;OAGG;IACH,iBAAsB;IAG1B,+BA6BC;CAaJ;2CApF0C,iCAAiC"}
1
+ {"version":3,"file":"PatchTerrainHeightAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/PatchTerrainHeightAction.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,8CARW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,eACN,MAAM,gBACN,MAAM,aACN,MAAM,cACN,MAAM,QAOhB;AAID;IACI;;;;;;;OAOG;IACH,qBANW,OAAO,KACP,MAAM,KACN,MAAM,SACN,MAAM,UACN,MAAM,EAUhB;IALG;;;OAGG;IACH,SAFU,OAAO,CAEK;IAG1B;;;;;OAKG;IACH,sCAFW;QAAC,IAAI,SAAW,MAAM,wBAAY,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,QAAE,MAAM,KAAG,IAAI,CAAA;KAAC,QAe1F;IAED,+BA6BC;CAaJ;2CAzG0C,iCAAiC;oBADxD,gDAAgD"}
@@ -1,85 +1,107 @@
1
- import { ModifyPatchSampler2DAction } from "./ModifyPatchSampler2DAction.js";
2
-
3
- /**
4
- * UV rectangle covered by a texel-space patch of a sampler. Standalone so the
5
- * region math is testable without live terrain tile machinery.
6
- *
7
- * @param {number[]} result [u0, v0, u1, v1]
8
- * @param {number} x patch origin in texels
9
- * @param {number} y
10
- * @param {number} patch_width in texels
11
- * @param {number} patch_height
12
- * @param {number} map_width sampler dimensions in texels
13
- * @param {number} map_height
14
- */
15
- export function compute_patch_uv_rect(result, x, y, patch_width, patch_height, map_width, map_height) {
16
- result[0] = x / map_width;
17
- result[1] = y / map_height;
18
- result[2] = (x + patch_width) / map_width;
19
- result[3] = (y + patch_height) / map_height;
20
- }
21
-
22
- const scratch_uv_rect = [0, 0, 0, 0];
23
-
24
- export class PatchTerrainHeightAction extends ModifyPatchSampler2DAction {
25
- /**
26
- *
27
- * @param {Terrain} terrain
28
- * @param {number} x
29
- * @param {number} y
30
- * @param {number} width
31
- * @param {number} height
32
- */
33
- constructor(terrain, x, y, width, height) {
34
- super(terrain.samplerHeight, [x, y, x + width, y + height]);
35
-
36
- /**
37
- *
38
- * @type {Terrain}
39
- */
40
- this.terrain = terrain;
41
- }
42
-
43
- async updateTerrain() {
44
- /**
45
- *
46
- * @type {Terrain}
47
- */
48
- const terrain = this.terrain;
49
-
50
- terrain.updateWorkerHeights();
51
-
52
- /**
53
- *
54
- * @type {Sampler2D}
55
- */
56
- const heightMap = terrain.samplerHeight;
57
-
58
- /**
59
- *
60
- * @type {TerrainTileManager}
61
- */
62
- const tiles = terrain.__tiles;
63
-
64
- compute_patch_uv_rect(
65
- scratch_uv_rect,
66
- this.x, this.y,
67
- this.patch.width, this.patch.height,
68
- heightMap.width, heightMap.height
69
- );
70
-
71
- tiles.rebuildTilesByUV(scratch_uv_rect[0], scratch_uv_rect[1], scratch_uv_rect[2], scratch_uv_rect[3]);
72
- }
73
-
74
- async apply(context) {
75
- await super.apply(context);
76
-
77
- await this.updateTerrain();
78
- }
79
-
80
- async revert(context) {
81
- await super.revert(context);
82
-
83
- await this.updateTerrain();
84
- }
85
- }
1
+ import Terrain from "../../../src/engine/ecs/terrain/ecs/Terrain.js";
2
+ import { ModifyPatchSampler2DAction } from "./ModifyPatchSampler2DAction.js";
3
+
4
+ /**
5
+ * UV rectangle covered by a texel-space patch of a sampler. Standalone so the
6
+ * region math is testable without live terrain tile machinery.
7
+ *
8
+ * @param {number[]} result [u0, v0, u1, v1]
9
+ * @param {number} x patch origin in texels
10
+ * @param {number} y
11
+ * @param {number} patch_width in texels
12
+ * @param {number} patch_height
13
+ * @param {number} map_width sampler dimensions in texels
14
+ * @param {number} map_height
15
+ */
16
+ export function compute_patch_uv_rect(result, x, y, patch_width, patch_height, map_width, map_height) {
17
+ result[0] = x / map_width;
18
+ result[1] = y / map_height;
19
+ result[2] = (x + patch_width) / map_width;
20
+ result[3] = (y + patch_height) / map_height;
21
+ }
22
+
23
+ const scratch_uv_rect = [0, 0, 0, 0];
24
+
25
+ export class PatchTerrainHeightAction extends ModifyPatchSampler2DAction {
26
+ /**
27
+ *
28
+ * @param {Terrain} terrain
29
+ * @param {number} x
30
+ * @param {number} y
31
+ * @param {number} width
32
+ * @param {number} height
33
+ */
34
+ constructor(terrain, x, y, width, height) {
35
+ super(terrain.samplerHeight, [x, y, x + width, y + height]);
36
+
37
+ /**
38
+ *
39
+ * @type {Terrain}
40
+ */
41
+ this.terrain = terrain;
42
+ }
43
+
44
+ /**
45
+ * The heightmap rectangle this action writes (E4): a host recording through a ledger turns it
46
+ * into blob patches keyed by the terrain's entity.
47
+ * @param {Editor} editor
48
+ * @param {{blob: function(number, Function, string, number, number, number, number): void}} writes
49
+ */
50
+ collectWrites(editor, writes) {
51
+ const dataset = editor.engine.entityManager.dataset;
52
+ let entity = -1;
53
+
54
+ dataset.traverseComponents(Terrain, (terrain, e) => {
55
+ if (terrain === this.terrain) {
56
+ entity = e;
57
+ }
58
+ });
59
+
60
+ if (entity !== -1) {
61
+ writes.blob(entity, Terrain, "samplerHeight", this.x, this.y, this.patch.width, this.patch.height);
62
+ }
63
+ }
64
+
65
+ async updateTerrain() {
66
+ /**
67
+ *
68
+ * @type {Terrain}
69
+ */
70
+ const terrain = this.terrain;
71
+
72
+ terrain.updateWorkerHeights();
73
+
74
+ /**
75
+ *
76
+ * @type {Sampler2D}
77
+ */
78
+ const heightMap = terrain.samplerHeight;
79
+
80
+ /**
81
+ *
82
+ * @type {TerrainTileManager}
83
+ */
84
+ const tiles = terrain.__tiles;
85
+
86
+ compute_patch_uv_rect(
87
+ scratch_uv_rect,
88
+ this.x, this.y,
89
+ this.patch.width, this.patch.height,
90
+ heightMap.width, heightMap.height
91
+ );
92
+
93
+ tiles.rebuildTilesByUV(scratch_uv_rect[0], scratch_uv_rect[1], scratch_uv_rect[2], scratch_uv_rect[3]);
94
+ }
95
+
96
+ async apply(context) {
97
+ await super.apply(context);
98
+
99
+ await this.updateTerrain();
100
+ }
101
+
102
+ async revert(context) {
103
+ await super.revert(context);
104
+
105
+ await this.updateTerrain();
106
+ }
107
+ }
@@ -10,6 +10,7 @@ declare class TransformModifyAction extends Action<any> {
10
10
  oldState: any;
11
11
  modified: Transform64;
12
12
  entity: any;
13
+ collectWrites(editor: any, writes: any): void;
13
14
  revert(editor: any): Promise<void>;
14
15
  }
15
16
  import { Action } from "../../../src/core/process/undo/Action.js";
@@ -1 +1 @@
1
- {"version":3,"file":"TransformModifyAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/TransformModifyAction.js"],"names":[],"mappings":";AAGA;IAGI;;;;;OAKG;IACH,mCAHW,WAAW,EAQrB;IAbD,cAAgB;IAWZ,sBAAwB;IACxB,YAAoB;IAsBxB,mCAIC;CACJ;uBA1CsB,0CAA0C;4BADrC,kDAAkD"}
1
+ {"version":3,"file":"TransformModifyAction.d.ts","sourceRoot":"","sources":["../../../../editor/actions/concrete/TransformModifyAction.js"],"names":[],"mappings":";AAGA;IAGI;;;;;OAKG;IACH,mCAHW,WAAW,EAQrB;IAbD,cAAgB;IAWZ,sBAAwB;IACxB,YAAoB;IAOxB,8CAEC;IAiBD,mCAIC;CACJ;uBA9CsB,0CAA0C;4BADrC,kDAAkD"}
@@ -21,6 +21,10 @@ class TransformModifyAction extends Action {
21
21
  return 280;
22
22
  }
23
23
 
24
+ collectWrites(editor, writes) {
25
+ writes.component(this.entity, Transform64);
26
+ }
27
+
24
28
  /**
25
29
  *
26
30
  * @param {Editor} editor
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleEffectDocument.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/ParticleEffectDocument.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ParticleEffectDocument.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/ParticleEffectDocument.js"],"names":[],"mappings":"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"}
@@ -167,14 +167,14 @@ export class ParticleEffectDocument {
167
167
  */
168
168
  emitter = {
169
169
  spawn_rate: 120,
170
+ /** seconds of emission run forward before the effect is first shown; 0 is off */
171
+ prewarm: 0,
170
172
  blend: EMITTER_BLEND.ADDITIVE,
171
173
  projection: EMITTER_PROJECTION.BILLBOARD,
172
174
  lighting: false,
173
175
  soft_depth: false,
174
176
  sort: false,
175
177
  cull: false,
176
- bounds_center: [0, 1, 0],
177
- bounds_radius: 3,
178
178
  /** image to draw with, by URL; null draws against the default atlas, a white texel */
179
179
  texture: null,
180
180
  flipbook: [1, 1],
@@ -885,6 +885,7 @@ export class ParticleEffectDocument {
885
885
  program,
886
886
  name: this.name,
887
887
  spawn_rate: this.emitter.spawn_rate,
888
+ prewarm: this.emitter.prewarm,
888
889
  flags: {
889
890
  blend: this.emitter.blend,
890
891
  projection: this.emitter.projection,
@@ -893,10 +894,6 @@ export class ParticleEffectDocument {
893
894
  sort: this.emitter.sort,
894
895
  cull: this.emitter.cull,
895
896
  },
896
- bounds: {
897
- center: this.emitter.bounds_center,
898
- radius: this.emitter.bounds_radius,
899
- },
900
897
  texture: this.emitter.texture,
901
898
  flipbook: this.emitter.flipbook,
902
899
  render,
@@ -990,6 +987,13 @@ export class ParticleEffectDocument {
990
987
  });
991
988
 
992
989
  this.emitter = { ...this.emitter, ...structuredClone(json.emitter ?? {}) };
990
+
991
+ // An effect saved while emitters still carried an authored bounding sphere. There is nothing
992
+ // to migrate — the box is measured from the particles now — and the merge above is a spread,
993
+ // so without this the dead keys would ride along in every later save.
994
+ delete this.emitter.bounds_center;
995
+ delete this.emitter.bounds_radius;
996
+
993
997
  this.source = json.source === PARTICLE_EFFECT_SOURCE.ASSEMBLY
994
998
  ? PARTICLE_EFFECT_SOURCE.ASSEMBLY
995
999
  : PARTICLE_EFFECT_SOURCE.GRAPH;
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleReferenceSimulation.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/ParticleReferenceSimulation.js"],"names":[],"mappings":"AA8BA;;;;;;GAMG;AACH,wCAFU,MAAM,CAE8B;AAE9C;IAgFI;;;OAGG;IACH;QAF4B,QAAQ,GAAzB,MAAM;OAiBhB;IAjGD;;;;OAIG;IACH,MAFU,WAAW,CAEhB;IAEL;;;OAGG;IACH,OAFU,MAAM,EAAE,CAEP;IAEX;;;OAGG;IACH,MAFU,MAAM,EAAE,CAER;IAEV;;;OAGG;IACH,KAFU,WAAW,CAEI;IAQzB;;;OAGG;IACH,mBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAoCL;;OAEG;IACH,UAFU,MAAM,CAEQ;IAa5B;;OAEG;IACH,cAWC;IAED;;;;;;;;;;;;OAYG;IACH;QAJ0G,OAAO,EAAtG,OAAO,8DAA8D,EAAE,eAAe;QACU,MAAM,EAAtG,OAAO,gEAAgE,EAAE,cAAc;QACxE,OAAO,EAAtB,MAAM;aAgBhB;IAED;;OAEG;IACH,oBAEC;IAED;;;;OAIG;IACH,SAFW,MAAM,QAYhB;IAmHD;;;;;;;;;OASG;IACH;WAFwB,MAAM;WAAK,MAAM;WAAK,MAAM;cAAQ,MAAM;WAAK,MAAM;WAAK,MAAM;WAAK,MAAM;WAAK,MAAM;kBAAY,MAAM;eAAS,MAAM;qBA6C9I;;CACJ"}
1
+ {"version":3,"file":"ParticleReferenceSimulation.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/ParticleReferenceSimulation.js"],"names":[],"mappings":"AAuCA;;;;;;GAMG;AACH,wCAFU,MAAM,CAE8B;AAE9C;IAgGI;;;OAGG;IACH;QAF4B,QAAQ,GAAzB,MAAM;OAiBhB;IAjHD;;;;OAIG;IACH,MAFU,WAAW,CAEhB;IAEL;;;OAGG;IACH,OAFU,MAAM,EAAE,CAEP;IAEX;;;OAGG;IACH,MAFU,MAAM,EAAE,CAER;IAEV;;;OAGG;IACH,KAFU,WAAW,CAEI;IAQzB;;;OAGG;IACH,mBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAoDL;;OAEG;IACH,UAFU,MAAM,CAEQ;IAa5B;;OAEG;IACH,cAYC;IAED;;;;;;;;;;;;OAYG;IACH;QAJ0G,OAAO,EAAtG,OAAO,8DAA8D,EAAE,eAAe;QACU,MAAM,EAAtG,OAAO,gEAAgE,EAAE,cAAc;QACxE,OAAO,EAAtB,MAAM;aAsBhB;IAED;;OAEG;IACH,oBAEC;IAED;;;;OAIG;IACH,SAFW,MAAM,QAmBhB;IA0KD;;;;;;;;;OASG;IACH;WAFwB,MAAM;WAAK,MAAM;WAAK,MAAM;cAAQ,MAAM;WAAK,MAAM;WAAK,MAAM;WAAK,MAAM;WAAK,MAAM;kBAAY,MAAM;eAAS,MAAM;qBA6C9I;;CACJ"}
@@ -1,6 +1,12 @@
1
+ import { hash_mix2 } from "../../../src/core/math/hash/hash_mix2.js";
1
2
  import {
2
3
  PARTICLE_RECORD_WORD_COUNT,
4
+ PARTICLE_WARMUP_DT_JITTER,
3
5
  } from "../../../src/shade/renderer/particles/ParticleConstants.js";
6
+ import {
7
+ warmup_remaining,
8
+ warmup_schedule,
9
+ } from "../../../src/shade/renderer/particles/warmup/warmup_schedule.js";
4
10
  import { EMITTER_ATTRIBUTE_ABSENT } from "../../../src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js";
5
11
  import { VM_BUILTIN } from "../../../src/shade/renderer/particles/isa/ParticleVMISA.js";
6
12
  import { execute_particle_vm } from "../../../src/shade/renderer/particles/vm/ParticleVMReference.js";
@@ -20,7 +26,10 @@ import { execute_particle_vm } from "../../../src/shade/renderer/particles/vm/Pa
20
26
  * keep in step.
21
27
  *
22
28
  * Spawning follows the emitter's rate the way the GPU tick pass does — an accumulator carried across
23
- * frames, so a rate that is not a whole number of particles per frame still averages out.
29
+ * frames, so a rate that is not a whole number of particles per frame still averages out — and an
30
+ * emitter's pre-warm the way the warm-up pipeline does (`warmup/`): the same loop, run forward over
31
+ * the same schedule before the first frame, so what an author sees when they type a duration into
32
+ * the inspector is the population the effect will arrive with in a scene.
24
33
  */
25
34
 
26
35
  /** Where the previewed emitter sits, and which way it points. Fixed: the preview has one emitter. */
@@ -94,6 +103,22 @@ export class ParticleReferenceSimulation {
94
103
  */
95
104
  #spawn_counter = 0;
96
105
 
106
+ /**
107
+ * Whether the next emission is the emitter's first since it started over, and so owes the
108
+ * emitter's pre-warm. The GPU's equivalent is the tick pass's generation comparison, which no
109
+ * preview has a use for: here "started over" is {@link reset}.
110
+ * @type {boolean}
111
+ */
112
+ #owes_prewarm = true;
113
+
114
+ /**
115
+ * The pre-warm the effect was last set with, so a change to it can restart the preview. Typing a
116
+ * duration into the inspector and watching nothing happen — because the effect is already
117
+ * running and pre-warm only applies to a start — would read as a broken control.
118
+ * @type {number}
119
+ */
120
+ #prewarm = 0;
121
+
97
122
  /**
98
123
  * @type {import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null}
99
124
  */
@@ -152,6 +177,7 @@ export class ParticleReferenceSimulation {
152
177
  this.pool.fill(0);
153
178
  this.spawn_accumulator = 0;
154
179
  this.emitter_age = 0;
180
+ this.#owes_prewarm = true;
155
181
  }
156
182
 
157
183
  /**
@@ -172,8 +198,14 @@ export class ParticleReferenceSimulation {
172
198
  .map(attribute => `${attribute.name}:${attribute.offset}:${attribute.components}`)
173
199
  .join(",");
174
200
 
175
- if (signature !== this.#layout_signature) {
201
+ const prewarm = emitter.prewarm ?? 0;
202
+
203
+ // A pre-warm is a statement about how an effect STARTS, so the only way to show one is to
204
+ // start the effect. The layout signature is checked the same way and for the same reason:
205
+ // both are changes the particles in flight cannot survive meaning anything under.
206
+ if (signature !== this.#layout_signature || prewarm !== this.#prewarm) {
176
207
  this.#layout_signature = signature;
208
+ this.#prewarm = prewarm;
177
209
 
178
210
  this.reset();
179
211
  }
@@ -200,6 +232,13 @@ export class ParticleReferenceSimulation {
200
232
  return;
201
233
  }
202
234
 
235
+ // The first frame after a start pays the pre-warm first, so the population this frame
236
+ // adds to is the one the emitter would have had.
237
+ if (this.#owes_prewarm) {
238
+ this.#owes_prewarm = false;
239
+ this.#warmup();
240
+ }
241
+
203
242
  this.time += dt;
204
243
  this.emitter_age += dt;
205
244
 
@@ -207,6 +246,50 @@ export class ParticleReferenceSimulation {
207
246
  this.#update(dt);
208
247
  }
209
248
 
249
+ /**
250
+ * Run the emitter forward by its pre-warm before it is first shown: the ordinary loop — emit,
251
+ * then update — over the same schedule the GPU warm-up uses ({@link warmup_schedule}), with the
252
+ * clocks rewound so `TIME` and `EMITTER_AGE` read as they would have.
253
+ *
254
+ * It ends with the emitter's age at exactly its pre-warm and the frame's clock where it was, so
255
+ * the frame that follows adds its own `dt` to both, as the GPU's next tick does.
256
+ *
257
+ * The preview has one emitter, so the per-emitter beat the GPU queue carries (each emitter's
258
+ * tick at a slightly different clock, its accumulator started at a hashed fraction) has nothing
259
+ * to separate here and is not reproduced; the per-particle jitter is, because it is what keeps
260
+ * a warm-up of N ticks from arriving as N bands.
261
+ */
262
+ #warmup() {
263
+ const prewarm = this.#emitter.prewarm ?? 0;
264
+
265
+ if (prewarm <= 0) {
266
+ return;
267
+ }
268
+
269
+ const schedule = warmup_schedule(prewarm);
270
+ const now = this.time;
271
+
272
+ for (let tick = 0; tick < schedule.ticks; tick++) {
273
+ const remaining = warmup_remaining(schedule, tick);
274
+
275
+ // The loop's clock counts down to now; the emitter joins it once the time left is what
276
+ // it asked to have been running for. Only the rounding of the schedule's span up to a
277
+ // whole tick can leave it out of the first one.
278
+ if (remaining > prewarm) {
279
+ continue;
280
+ }
281
+
282
+ this.time = now - remaining;
283
+ this.emitter_age = prewarm - remaining + schedule.dt;
284
+
285
+ this.#emit(schedule.dt);
286
+ this.#update(schedule.dt, tick + 1);
287
+ }
288
+
289
+ this.time = now;
290
+ this.emitter_age = prewarm;
291
+ }
292
+
210
293
  /**
211
294
  * @param {number} dt
212
295
  */
@@ -258,8 +341,11 @@ export class ParticleReferenceSimulation {
258
341
 
259
342
  /**
260
343
  * @param {number} dt
344
+ * @param {number} [tick] a warm-up tick's number, when this is one: the tick is then jittered per
345
+ * particle by {@link PARTICLE_WARMUP_DT_JITTER}, hashed from the slot and the tick, exactly as
346
+ * the GPU's advance does. Zero — a frame — is not jittered.
261
347
  */
262
- #update(dt) {
348
+ #update(dt, tick = 0) {
263
349
  const alive = this.alive;
264
350
 
265
351
  let write = 0;
@@ -267,12 +353,20 @@ export class ParticleReferenceSimulation {
267
353
  for (let read = 0; read < alive.length; read++) {
268
354
  const slot = alive[read];
269
355
 
356
+ let dt_particle = dt;
357
+
358
+ if (tick !== 0) {
359
+ const u = ((hash_mix2(slot, tick) >>> 8) / 16777216);
360
+
361
+ dt_particle = dt * (1 + PARTICLE_WARMUP_DT_JITTER * (u - 0.5));
362
+ }
363
+
270
364
  const result = execute_particle_vm({
271
365
  words: this.#program.update,
272
366
  constants: this.#program.constants,
273
367
  register_count: this.#program.register_count,
274
368
  record: this.#record(slot),
275
- builtins: this.#builtins(dt, slot, 0),
369
+ builtins: this.#builtins(dt_particle, slot, 0),
276
370
  rng_state: this.rng[slot],
277
371
  });
278
372
 
@@ -1 +1 @@
1
- {"version":3,"file":"make_starter_particle_effect.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/make_starter_particle_effect.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gDAFa,sBAAsB,CAkBlC;uCAtCsC,6BAA6B"}
1
+ {"version":3,"file":"make_starter_particle_effect.d.ts","sourceRoot":"","sources":["../../../../editor/particles/effect/make_starter_particle_effect.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gDAFa,sBAAsB,CAgBlC;uCApCsC,6BAA6B"}
@@ -44,8 +44,6 @@ export function make_starter_particle_effect() {
44
44
  document.emitter.spawn_rate = 220;
45
45
  document.emitter.blend = EMITTER_BLEND.ADDITIVE;
46
46
  document.emitter.projection = EMITTER_PROJECTION.BILLBOARD;
47
- document.emitter.bounds_center = [0, 1.5, 0];
48
- document.emitter.bounds_radius = 4;
49
47
  document.emitter.render = { position: "position", size: "size", color: "color", velocity: "velocity" };
50
48
 
51
49
  return document;