@woosh/meep-engine 3.16.0 → 3.17.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 (410) hide show
  1. package/editor/particles/effect/ParticleEffectDocument.d.ts +21 -6
  2. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  3. package/editor/particles/effect/ParticleEffectDocument.js +38 -17
  4. package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
  5. package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
  6. package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
  7. package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
  8. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  9. package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
  10. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  11. package/editor/view/node-graph/NodeGraphView.js +84 -8
  12. package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
  13. package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
  14. package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
  15. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
  16. package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
  17. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
  18. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
  19. package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
  20. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  21. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
  22. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
  23. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
  24. package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
  25. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
  26. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
  27. package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
  28. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  29. package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
  30. package/editor/view/particles/effect/particle-editor.css +123 -35
  31. package/package.json +1 -1
  32. package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
  33. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  34. package/src/core/binary/allocator/OffsetAllocator.js +10 -1
  35. package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
  36. package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
  37. package/src/core/collection/array/typed/float32_array_hash.js +38 -0
  38. package/src/core/graph/csr/CSRGraph.d.ts +8 -1
  39. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  40. package/src/core/graph/csr/CSRGraph.js +14 -6
  41. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
  42. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
  43. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
  44. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
  45. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
  46. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
  47. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
  48. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
  49. package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
  50. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
  51. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
  52. package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
  53. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
  54. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
  55. package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
  56. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
  57. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
  58. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
  59. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
  60. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
  61. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
  62. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
  63. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
  64. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
  65. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
  66. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
  67. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
  68. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
  69. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
  70. package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
  71. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
  72. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
  73. package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
  74. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
  75. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
  76. package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
  77. package/src/engine/animation/AnimationUtils.js +246 -246
  78. package/src/engine/animation/Animations.js +74 -74
  79. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
  80. package/src/engine/ecs/EventType.d.ts +0 -1
  81. package/src/engine/ecs/EventType.js +1 -26
  82. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
  83. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  84. package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
  85. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  86. package/src/engine/ecs/parent/EntityNode.js +4 -9
  87. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  88. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
  89. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
  90. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
  91. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
  92. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
  93. package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
  94. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
  95. package/src/engine/ecs/transform/t64_announce_change.js +12 -12
  96. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
  97. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
  98. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
  99. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  100. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
  101. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  102. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
  103. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  104. package/src/engine/graphics3/LightSystem.js +4 -8
  105. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  106. package/src/engine/graphics3/MeshSystem.js +9 -19
  107. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  108. package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
  109. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  110. package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
  111. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
  112. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  113. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
  114. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
  115. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  116. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  117. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  118. package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
  119. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
  120. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  121. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
  122. package/src/shade/playground/particle_editor/README.md +43 -2
  123. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  124. package/src/shade/playground/particle_system/particle_prototype.js +4 -5
  125. package/src/shade/playground/particle_system/particle_scene.js +4 -4
  126. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  127. package/src/shade/renderer/Renderer.js +13 -1
  128. package/src/shade/renderer/particles/DESIGN.md +104 -19
  129. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
  130. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  131. package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
  132. package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
  133. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  134. package/src/shade/renderer/particles/ParticleConstants.js +66 -23
  135. package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
  136. package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
  137. package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
  138. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  139. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
  140. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
  141. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
  142. package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
  143. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
  144. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
  145. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
  146. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
  148. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
  149. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
  151. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
  153. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
  155. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
  157. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  158. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
  159. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
  160. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
  161. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
  162. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
  163. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
  164. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
  165. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
  166. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
  167. package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
  168. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
  169. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
  170. package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
  171. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
  172. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
  174. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
  175. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
  177. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  178. package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
  179. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
  180. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
  181. package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
  182. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
  183. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  184. package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
  185. package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
  186. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  187. package/src/shade/renderer/particles/graph_particles.js +105 -262
  188. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  189. package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
  190. package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
  191. package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
  192. package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
  193. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
  194. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  195. package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
  196. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
  197. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  198. package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
  199. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
  200. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  201. package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
  202. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
  203. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  204. package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
  205. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
  206. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
  207. package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
  208. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
  209. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  210. package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
  211. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
  212. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
  213. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
  214. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
  215. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
  216. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
  217. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
  218. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
  219. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
  220. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
  221. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
  222. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
  223. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
  224. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
  225. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
  226. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
  227. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
  228. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
  229. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
  230. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
  231. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
  232. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
  233. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
  234. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
  235. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
  236. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  237. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
  238. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
  239. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
  240. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
  241. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
  242. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  243. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
  244. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
  245. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  246. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
  247. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
  248. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
  249. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
  250. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
  251. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  252. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
  253. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
  254. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
  255. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
  256. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
  257. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  258. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
  259. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  260. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
  261. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  262. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
  263. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
  264. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
  265. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
  266. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  267. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
  268. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  269. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
  270. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  271. package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
  272. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  273. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
  274. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
  275. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
  276. package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
  277. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  278. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
  279. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
  280. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
  281. package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
  282. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
  283. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  284. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
  285. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
  286. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
  287. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
  288. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
  289. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  290. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
  291. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +26 -0
  292. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  293. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
  294. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
  295. package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
  296. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
  297. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
  298. package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
  299. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
  300. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  301. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
  302. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
  303. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
  304. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
  305. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
  306. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
  307. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
  308. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
  309. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  310. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
  311. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
  312. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
  313. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
  314. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
  315. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  316. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
  317. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
  318. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
  319. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
  320. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
  321. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
  322. package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
  323. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
  324. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
  325. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
  326. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
  327. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  328. package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
  329. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  330. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
  331. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
  332. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
  333. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
  334. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
  335. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
  336. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
  337. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
  338. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
  339. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
  340. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
  341. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
  342. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
  343. package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
  344. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
  345. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
  346. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
  347. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
  348. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
  349. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
  350. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
  351. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
  352. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
  353. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
  354. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
  355. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
  356. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
  357. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
  358. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
  359. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
  360. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
  361. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
  362. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
  363. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
  364. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
  365. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
  366. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
  367. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
  368. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
  369. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
  370. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
  371. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
  372. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
  373. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
  374. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
  375. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
  376. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
  377. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
  378. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  379. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
  380. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  381. package/src/view/minimap/dom/MinimapCameraView.js +4 -9
  382. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
  383. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
  384. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
  385. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
  386. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
  387. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
  388. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
  389. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
  390. package/src/engine/ecs/transform/__probe.d.ts +0 -4
  391. package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
  392. package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
  393. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
  394. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
  395. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
  396. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
  397. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
  398. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
  399. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
  400. package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
  401. package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
  402. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
  403. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
  404. package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
  405. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
  406. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
  407. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
  408. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
  409. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
  410. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
@@ -1,159 +1,185 @@
1
- /**
2
- * Simplex noise, written out in JavaScript, for the group in
3
- * {@link ./particle_groups_noise.js} to be checked against.
4
- *
5
- * A second implementation of a thing is usually a bad oracle — it goes wrong in the same way the
6
- * first one did — but that is not the risk here. The group is not written as arithmetic at all; it is
7
- * a graph of two hundred nodes assembled through a builder, lowered by a register allocator and run
8
- * on an interpreter. This is the algorithm as anybody else would write it, and agreeing with it lane
9
- * for lane is what says the graph is that algorithm.
10
- *
11
- * ## Why every step rounds
12
- *
13
- * The VM's register file is `f32`, so every instruction's result is rounded to single precision
14
- * before the next one reads it. That is normally a difference of a few ulps and of no interest.
15
- * Here it decides which gradient a corner gets: the gradient table is reached by asking whether
16
- * `1 - |x| - |y|` is at or below zero, and a seventh of the table sits at exactly zero in exact
17
- * arithmetic — and a hundred-millionth *above* it once the seventh has been rounded to `f32`. A
18
- * double-precision oracle takes the other branch there and disagrees with the VM about a third of the
19
- * time, and it would be the one that was wrong: a GPU is `f32` too.
20
- *
21
- * So `fr` is applied wherever the VM would have stored a register, and nowhere else. Sums inside a
22
- * dot product are not rounded per term, because the opcode accumulates and stores once.
23
- */
24
-
25
- /** @type {function(number):number} */
26
- const fr = Math.fround;
27
-
28
- /** Skew factor for the 3-simplex lattice. @type {number} */
29
- const F3 = 1 / 3;
30
-
31
- /** Unskew factor for the 3-simplex lattice. @type {number} */
32
- const G3 = 1 / 6;
33
-
34
- /**
35
- * @param {number[]} a
36
- * @param {number[]} b
37
- * @returns {number} the dot product, accumulated wide and rounded once, as `DOT` does
38
- */
39
- function dot(a, b) {
40
- let sum = 0;
41
-
42
- for (let i = 0; i < a.length; i++) {
43
- sum += a[i] * b[i];
44
- }
45
-
46
- return fr(sum);
47
- }
48
-
49
- /**
50
- * GLSL's `step`: 1 where `x` is at or above the edge.
51
- *
52
- * @param {number} edge
53
- * @param {number} x
54
- * @returns {number}
55
- */
56
- function step(edge, x) {
57
- return x < edge ? 0 : 1;
58
- }
59
-
60
- /**
61
- * `x mod 289`, as the shader spells it. Exact in `f32` over the range the hash reaches.
62
- *
63
- * @param {number} x
64
- * @returns {number}
65
- */
66
- function mod289(x) {
67
- return x - Math.floor(x * (1 / 289)) * 289;
68
- }
69
-
70
- /**
71
- * The permutation polynomial, `(34x + 1) x mod 289`.
72
- *
73
- * @param {number} x
74
- * @returns {number}
75
- */
76
- function permute(x) {
77
- return mod289((x * 34 + 1) * x);
78
- }
79
-
80
- /**
81
- * Simplex noise over three dimensions, in roughly `[-1, 1]`.
82
- *
83
- * @param {number[]} point a three-element position
84
- * @returns {number}
85
- */
86
- export function simplex3_reference(point) {
87
- const v = point.map(fr);
88
-
89
- const skew = dot(v, [fr(F3), fr(F3), fr(F3)]);
90
-
91
- const cell = v.map(c => Math.floor(fr(c + skew)));
92
-
93
- const unskew = dot(cell, [fr(G3), fr(G3), fr(G3)]);
94
-
95
- const x0 = v.map((c, k) => fr(fr(c - cell[k]) + unskew));
96
-
97
- const order = [step(x0[1], x0[0]), step(x0[2], x0[1]), step(x0[0], x0[2])];
98
- const rest = order.map(c => 1 - c);
99
- const rest_zxy = [rest[2], rest[0], rest[1]];
100
-
101
- const step1 = order.map((c, k) => Math.min(c, rest_zxy[k]));
102
- const step2 = order.map((c, k) => Math.max(c, rest_zxy[k]));
103
-
104
- const cell289 = cell.map(mod289);
105
-
106
- let hashed = [0, step1[2], step2[2], 1].map(c => permute(c + cell289[2]));
107
-
108
- hashed = hashed.map((c, k) => permute(c + cell289[1] + [0, step1[1], step2[1], 1][k]));
109
- hashed = hashed.map((c, k) => permute(c + cell289[0] + [0, step1[0], step2[0], 1][k]));
110
-
111
- const ns_x = fr(2 / 7);
112
- const ns_y = fr((1 / 7) * 0.5 - 1);
113
- const ns_z = fr(1 / 7);
114
-
115
- const offsets = [
116
- x0,
117
- x0.map((c, k) => fr(fr(c - step1[k]) + fr(G3))),
118
- x0.map((c, k) => fr(fr(c - step2[k]) + fr(G3 * 2))),
119
- x0.map(c => fr(c - 0.5)),
120
- ];
121
-
122
- let total = 0;
123
-
124
- for (let corner = 0; corner < 4; corner++) {
125
- const index = hashed[corner];
126
-
127
- const j = index - 49 * Math.floor(fr(index * fr(ns_z * ns_z)));
128
-
129
- const row = Math.floor(fr(j * ns_z));
130
- const column = Math.floor(fr(j - fr(7 * row)));
131
-
132
- const gx = fr(row * ns_x + ns_y);
133
- const gy = fr(column * ns_x + ns_y);
134
- const gz = fr(fr(1 - Math.abs(gx)) - Math.abs(gy));
135
-
136
- // at or below zero, matching the shader's `-step(h, 0)` — see the note above about why the
137
- // boundary is reachable and which side of it single precision lands on
138
- const outside = gz <= 0 ? 1 : 0;
139
-
140
- const gradient = [
141
- fr(gx - fr(fr(Math.floor(gx) * 2 + 1) * outside)),
142
- fr(gy - fr(fr(Math.floor(gy) * 2 + 1) * outside)),
143
- gz,
144
- ];
145
-
146
- const inverse_length = fr(fr(-0.85373472095314) * dot(gradient, gradient) + fr(1.79284291400159));
147
-
148
- const normalized = gradient.map(c => fr(c * inverse_length));
149
-
150
- const offset = offsets[corner];
151
-
152
- const falloff = fr(Math.max(fr(fr(0.6) - dot(offset, offset)), 0));
153
- const squared = fr(falloff * falloff);
154
-
155
- total = fr(total + fr(fr(squared * squared) * dot(normalized, offset)));
156
- }
157
-
158
- return fr(fr(42) * total);
159
- }
1
+ /**
2
+ * Simplex noise, written out in JavaScript, for the group in
3
+ * {@link ./particle_groups_noise.js} to be checked against.
4
+ *
5
+ * A second implementation of a thing is usually a bad oracle — it goes wrong in the same way the
6
+ * first one did — but that is not the risk here. The group is not written as arithmetic at all; it is
7
+ * a graph of two hundred nodes assembled through a builder, lowered by a register allocator and run
8
+ * on an interpreter. This is the algorithm as anybody else would write it, and agreeing with it lane
9
+ * for lane is what says the graph is that algorithm.
10
+ *
11
+ * ## Why every step rounds
12
+ *
13
+ * The VM's register file is `f32`, so every instruction's result is rounded to single precision
14
+ * before the next one reads it. That is normally a difference of a few ulps and of no interest.
15
+ * Here it decides which gradient a corner gets: the gradient table is reached by asking whether
16
+ * `1 - |x| - |y|` is at or below zero, and a seventh of the table sits at exactly zero in exact
17
+ * arithmetic — and a hundred-millionth *above* it once the seventh has been rounded to `f32`. A
18
+ * double-precision oracle takes the other branch there and disagrees with the VM about a third of the
19
+ * time, and it would be the one that was wrong: a GPU is `f32` too.
20
+ *
21
+ * So `fr` is applied wherever the VM would have stored a register, and nowhere else. Sums inside a
22
+ * dot product are not rounded per term, because the opcode accumulates and stores once.
23
+ */
24
+
25
+ /** @type {function(number):number} */
26
+ const fr = Math.fround;
27
+
28
+ /** Skew factor for the 3-simplex lattice. @type {number} */
29
+ const F3 = 1 / 3;
30
+
31
+ /** Unskew factor for the 3-simplex lattice. @type {number} */
32
+ const G3 = 1 / 6;
33
+
34
+ /**
35
+ * @param {number[]} a
36
+ * @param {number[]} b
37
+ * @returns {number} the dot product, accumulated wide and rounded once, as `DOT` does
38
+ */
39
+ function dot(a, b) {
40
+ let sum = 0;
41
+
42
+ for (let i = 0; i < a.length; i++) {
43
+ sum += a[i] * b[i];
44
+ }
45
+
46
+ return fr(sum);
47
+ }
48
+
49
+ /**
50
+ * GLSL's `step`: 1 where `x` is at or above the edge.
51
+ *
52
+ * @param {number} edge
53
+ * @param {number} x
54
+ * @returns {number}
55
+ */
56
+ function step(edge, x) {
57
+ return x < edge ? 0 : 1;
58
+ }
59
+
60
+ /**
61
+ * `NORMALIZE`, as the opcode does it: the length is accumulated and taken wide and only the lanes
62
+ * are rounded, and a zero vector normalises to zero rather than to nothing.
63
+ *
64
+ * The group used to spell this as Gustavson's `taylorInvSqrt` — a line through the band the gradient
65
+ * table's squared lengths fall in — and now calls the opcode, which is one instruction rather than
66
+ * five and is exact where the line was not. The field moves by the approximation's error, which is
67
+ * where this oracle moved with it.
68
+ *
69
+ * @param {number[]} v
70
+ * @returns {number[]}
71
+ */
72
+ function normalize(v) {
73
+ let sum = 0;
74
+
75
+ for (const component of v) {
76
+ sum += component * component;
77
+ }
78
+
79
+ const length = Math.sqrt(sum);
80
+
81
+ const inverse = length > 0 ? 1 / length : 0;
82
+
83
+ return v.map(component => fr(component * inverse));
84
+ }
85
+
86
+ /**
87
+ * `x mod 289`, as the shader spells it. Exact in `f32` over the range the hash reaches.
88
+ *
89
+ * @param {number} x
90
+ * @returns {number}
91
+ */
92
+ function mod289(x) {
93
+ return x - Math.floor(x * (1 / 289)) * 289;
94
+ }
95
+
96
+ /**
97
+ * The permutation polynomial, `(34x + 1) x mod 289`.
98
+ *
99
+ * @param {number} x
100
+ * @returns {number}
101
+ */
102
+ function permute(x) {
103
+ return mod289((x * 34 + 1) * x);
104
+ }
105
+
106
+ /**
107
+ * Simplex noise over three dimensions, in roughly `[-1, 1]`.
108
+ *
109
+ * @param {number[]} point a three-element position
110
+ * @returns {number}
111
+ */
112
+ export function simplex3_reference(point) {
113
+ const v = point.map(fr);
114
+
115
+ const skew = dot(v, [fr(F3), fr(F3), fr(F3)]);
116
+
117
+ const cell = v.map(c => Math.floor(fr(c + skew)));
118
+
119
+ const unskew = dot(cell, [fr(G3), fr(G3), fr(G3)]);
120
+
121
+ const x0 = v.map((c, k) => fr(fr(c - cell[k]) + unskew));
122
+
123
+ const order = [step(x0[1], x0[0]), step(x0[2], x0[1]), step(x0[0], x0[2])];
124
+ const rest = order.map(c => 1 - c);
125
+ const rest_zxy = [rest[2], rest[0], rest[1]];
126
+
127
+ const step1 = order.map((c, k) => Math.min(c, rest_zxy[k]));
128
+ const step2 = order.map((c, k) => Math.max(c, rest_zxy[k]));
129
+
130
+ const cell289 = cell.map(mod289);
131
+
132
+ let hashed = [0, step1[2], step2[2], 1].map(c => permute(c + cell289[2]));
133
+
134
+ hashed = hashed.map((c, k) => permute(c + cell289[1] + [0, step1[1], step2[1], 1][k]));
135
+ hashed = hashed.map((c, k) => permute(c + cell289[0] + [0, step1[0], step2[0], 1][k]));
136
+
137
+ const ns_x = fr(2 / 7);
138
+ const ns_y = fr((1 / 7) * 0.5 - 1);
139
+ const ns_z = fr(1 / 7);
140
+
141
+ const offsets = [
142
+ x0,
143
+ x0.map((c, k) => fr(fr(c - step1[k]) + fr(G3))),
144
+ x0.map((c, k) => fr(fr(c - step2[k]) + fr(G3 * 2))),
145
+ x0.map(c => fr(c - 0.5)),
146
+ ];
147
+
148
+ let total = 0;
149
+
150
+ for (let corner = 0; corner < 4; corner++) {
151
+ const index = hashed[corner];
152
+
153
+ const j = index - 49 * Math.floor(fr(index * fr(ns_z * ns_z)));
154
+
155
+ const row = Math.floor(fr(j * ns_z));
156
+ const column = Math.floor(fr(j - fr(7 * row)));
157
+
158
+ const gx = fr(row * ns_x + ns_y);
159
+ const gy = fr(column * ns_x + ns_y);
160
+ const gz = fr(fr(1 - Math.abs(gx)) - Math.abs(gy));
161
+
162
+ // at or below zero, matching the shader's `-step(h, 0)` — see the note above about why the
163
+ // boundary is reachable and which side of it single precision lands on. Negated, as the
164
+ // group negates it, so each reflection is one multiply-add and rounds once.
165
+ const inside = gz <= 0 ? -1 : 0;
166
+
167
+ const gradient = [
168
+ fr(fr(Math.floor(gx) * 2 + 1) * inside + gx),
169
+ fr(fr(Math.floor(gy) * 2 + 1) * inside + gy),
170
+ gz,
171
+ ];
172
+
173
+ const normalized = normalize(gradient);
174
+
175
+ const offset = offsets[corner];
176
+
177
+ // `saturate`, which for a falloff that cannot exceed 0.6 is the `max` it replaced
178
+ const falloff = fr(Math.min(1, Math.max(fr(fr(0.6) - dot(offset, offset)), 0)));
179
+ const squared = fr(falloff * falloff);
180
+
181
+ total = fr(total + fr(fr(squared * squared) * dot(normalized, offset)));
182
+ }
183
+
184
+ return fr(fr(42) * total);
185
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"make_particle_group.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/make_particle_group.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAtB6B,KAAK;IACE,KAAK,EAA9B,SAAS,MAAM,CAAC;IACD,IAAI,EAAnB,MAAM;IACU,KAAK,GAArB,MAAM;IACU,IAAI,GAApB,MAAM;IACU,IAAI,GAApB,MAAM;IACuB,MAAM;IAII,cAAc;IAES,MAAM,GAApE,OAAO,6BAA6B,EAAE,cAAc;;WAGnD,iBAAiB;YAChB,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC;aACxD,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC;EAgE3E;kCAnI6D,wBAAwB"}
1
+ {"version":3,"file":"make_particle_group.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/make_particle_group.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAtB6B,KAAK;IACE,KAAK,EAA9B,SAAS,MAAM,CAAC;IACD,IAAI,EAAnB,MAAM;IACU,KAAK,GAArB,MAAM;IACU,IAAI,GAApB,MAAM;IACU,IAAI,GAApB,MAAM;IACuB,MAAM;IAII,cAAc;IAES,MAAM,GAApE,OAAO,6BAA6B,EAAE,cAAc;;WAGnD,iBAAiB;YAChB,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC;aACxD,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC;EAgE3E;kCAnI6D,wBAAwB"}
@@ -1,5 +1,6 @@
1
1
  import { PortDirection } from "../../../../core/model/node-graph/node/PortDirection.js";
2
2
  import { infer_particle_graph_types } from "./infer_particle_graph_types.js";
3
+ import { clone_particle_parameters } from "./particle_node_parameters.js";
3
4
  import { is_particle_group_boundary, ParticleNodeGroup } from "./ParticleNodeGroup.js";
4
5
 
5
6
  /**
@@ -282,7 +283,7 @@ function fill_body(group, graph, selected, boundary, visual, visualRegistry) {
282
283
 
283
284
  const copy = body.getNodeSafe(body.createNode(outer.description));
284
285
 
285
- copy.setParameters(clone_parameters(outer.parameters));
286
+ copy.setParameters(clone_particle_parameters(outer.parameters));
286
287
 
287
288
  copies.set(id, copy);
288
289
 
@@ -406,22 +407,3 @@ function unique_name(candidate, claimed) {
406
407
 
407
408
  return name;
408
409
  }
409
-
410
- /**
411
- * A node's parameters, deep enough that the copy and the original cannot write through to each
412
- * other. See the same function in {@link ./flatten_particle_graph.js}.
413
- *
414
- * @param {object} parameters
415
- * @returns {object}
416
- */
417
- function clone_parameters(parameters) {
418
- const result = {};
419
-
420
- for (const key of Object.keys(parameters)) {
421
- const value = parameters[key];
422
-
423
- result[key] = Array.isArray(value) ? value.slice() : value;
424
- }
425
-
426
- return result;
427
- }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Comparison operators the single `compare` node type covers, and the opcode each lowers to.
3
+ *
4
+ * A file of its own, small as it is, because it is the one thing
5
+ * {@link ./particle_node_parameters.js} needs from the node library *while it is being defined* —
6
+ * the parameter schema lists these options as its module body runs. Left in
7
+ * {@link ./ParticleNodeRegistry.js} it made the two modules a cycle that only held together while
8
+ * nobody imported them in the wrong order, and the registry now reaches for
9
+ * {@link ./ParticleGroupBuilder.js} — which reaches back through the parameter schema — so the
10
+ * order it held together in is no longer the order they load in.
11
+ *
12
+ * @type {Object<string, number>}
13
+ */
14
+ export const PARTICLE_COMPARE_OPCODES: {
15
+ [x: string]: number;
16
+ };
17
+ //# sourceMappingURL=particle_compare_ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particle_compare_ops.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_compare_ops.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH;QAFiB,MAAM,GAAE,MAAM;EAQ5B"}
@@ -0,0 +1,22 @@
1
+ import { VM_OP } from "../isa/ParticleVMISA.js";
2
+
3
+ /**
4
+ * Comparison operators the single `compare` node type covers, and the opcode each lowers to.
5
+ *
6
+ * A file of its own, small as it is, because it is the one thing
7
+ * {@link ./particle_node_parameters.js} needs from the node library *while it is being defined* —
8
+ * the parameter schema lists these options as its module body runs. Left in
9
+ * {@link ./ParticleNodeRegistry.js} it made the two modules a cycle that only held together while
10
+ * nobody imported them in the wrong order, and the registry now reaches for
11
+ * {@link ./ParticleGroupBuilder.js} — which reaches back through the parameter schema — so the
12
+ * order it held together in is no longer the order they load in.
13
+ *
14
+ * @type {Object<string, number>}
15
+ */
16
+ export const PARTICLE_COMPARE_OPCODES = Object.freeze({
17
+ lt: VM_OP.CMP_LT,
18
+ le: VM_OP.CMP_LE,
19
+ gt: VM_OP.CMP_GT,
20
+ ge: VM_OP.CMP_GE,
21
+ eq: VM_OP.CMP_EQ,
22
+ });
@@ -8,30 +8,50 @@
8
8
  * importing the other.
9
9
  */
10
10
  /**
11
- * One problem with a graph.
11
+ * One finding about a graph.
12
12
  *
13
13
  * @typedef {object} ParticleGraphDiagnostic
14
- * @property {number} node the offending node's id, or -1 for a problem with the graph as a whole
14
+ * @property {number} node the node it is about, or -1 for the graph as a whole
15
15
  * @property {string} message
16
- * @property {string} severity {@link PARTICLE_GRAPH_ERROR} — the graph will not compile — or
17
- * {@link PARTICLE_GRAPH_WARNING}
16
+ * @property {string} severity {@link PARTICLE_GRAPH_ERROR} — the graph will not compile —
17
+ * {@link PARTICLE_GRAPH_WARNING}, or {@link PARTICLE_GRAPH_INFO}
18
18
  */
19
19
  /** @type {string} */
20
20
  export const PARTICLE_GRAPH_ERROR: string;
21
21
  /** @type {string} */
22
22
  export const PARTICLE_GRAPH_WARNING: string;
23
23
  /**
24
- * One problem with a graph.
24
+ * Something worth knowing about a graph that is not wrong with it.
25
+ *
26
+ * A node no sink reads is the one that matters: it is not compiled, so nothing about it can break
27
+ * the effect and nothing about it is worth a warning — but an author who cannot see why their edit
28
+ * changed nothing is owed the reason. Saying it at this level is what lets the graph compile with
29
+ * half-built work sitting next to it.
30
+ *
31
+ * @type {string}
32
+ */
33
+ export const PARTICLE_GRAPH_INFO: string;
34
+ /**
35
+ * How loudly each level speaks, so a caller with several findings about one node can show the
36
+ * loudest. Higher outranks lower.
37
+ *
38
+ * @type {Object<string, number>}
39
+ */
40
+ export const PARTICLE_GRAPH_SEVERITY_RANK: {
41
+ [x: string]: number;
42
+ };
43
+ /**
44
+ * One finding about a graph.
25
45
  */
26
46
  export type ParticleGraphDiagnostic = {
27
47
  /**
28
- * the offending node's id, or -1 for a problem with the graph as a whole
48
+ * the node it is about, or -1 for the graph as a whole
29
49
  */
30
50
  node: number;
31
51
  message: string;
32
52
  /**
33
- * {@link PARTICLE_GRAPH_ERROR } — the graph will not compile — or
34
- * {@link PARTICLE_GRAPH_WARNING }
53
+ * {@link PARTICLE_GRAPH_ERROR } — the graph will not compile —
54
+ * {@link PARTICLE_GRAPH_WARNING }, or {@link PARTICLE_GRAPH_INFO }
35
55
  */
36
56
  severity: string;
37
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"particle_graph_diagnostic.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_graph_diagnostic.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AAEH,qBAAqB;AACrB,mCADW,MAAM,CAC2B;AAE5C,qBAAqB;AACrB,qCADW,MAAM,CAC+B;;;;;;;;UAVlC,MAAM;aACN,MAAM;;;;;cACN,MAAM"}
1
+ {"version":3,"file":"particle_graph_diagnostic.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_graph_diagnostic.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AAEH,qBAAqB;AACrB,mCADW,MAAM,CAC2B;AAE5C,qBAAqB;AACrB,qCADW,MAAM,CAC+B;AAEhD;;;;;;;;;GASG;AACH,kCAFU,MAAM,CAE0B;AAE1C;;;;;GAKG;AACH;QAFiB,MAAM,GAAE,MAAM;EAM5B;;;;;;;;UAlCW,MAAM;aACN,MAAM;;;;;cACN,MAAM"}
@@ -1,25 +1,49 @@
1
- /**
2
- * What a check of a particle graph has to say about it, one finding at a time.
3
- *
4
- * Findings come from more than one place — the structural checks in
5
- * {@link ./validate_particle_graph.js} and the type resolution in
6
- * {@link ./infer_particle_graph_types.js} — and go to one place, a view that marks nodes and
7
- * lists messages. This is the shape they agree on, kept where both can import it without either
8
- * importing the other.
9
- */
10
-
11
- /**
12
- * One problem with a graph.
13
- *
14
- * @typedef {object} ParticleGraphDiagnostic
15
- * @property {number} node the offending node's id, or -1 for a problem with the graph as a whole
16
- * @property {string} message
17
- * @property {string} severity {@link PARTICLE_GRAPH_ERROR} — the graph will not compile — or
18
- * {@link PARTICLE_GRAPH_WARNING}
19
- */
20
-
21
- /** @type {string} */
22
- export const PARTICLE_GRAPH_ERROR = "error";
23
-
24
- /** @type {string} */
25
- export const PARTICLE_GRAPH_WARNING = "warning";
1
+ /**
2
+ * What a check of a particle graph has to say about it, one finding at a time.
3
+ *
4
+ * Findings come from more than one place — the structural checks in
5
+ * {@link ./validate_particle_graph.js} and the type resolution in
6
+ * {@link ./infer_particle_graph_types.js} — and go to one place, a view that marks nodes and
7
+ * lists messages. This is the shape they agree on, kept where both can import it without either
8
+ * importing the other.
9
+ */
10
+
11
+ /**
12
+ * One finding about a graph.
13
+ *
14
+ * @typedef {object} ParticleGraphDiagnostic
15
+ * @property {number} node the node it is about, or -1 for the graph as a whole
16
+ * @property {string} message
17
+ * @property {string} severity {@link PARTICLE_GRAPH_ERROR} — the graph will not compile —
18
+ * {@link PARTICLE_GRAPH_WARNING}, or {@link PARTICLE_GRAPH_INFO}
19
+ */
20
+
21
+ /** @type {string} */
22
+ export const PARTICLE_GRAPH_ERROR = "error";
23
+
24
+ /** @type {string} */
25
+ export const PARTICLE_GRAPH_WARNING = "warning";
26
+
27
+ /**
28
+ * Something worth knowing about a graph that is not wrong with it.
29
+ *
30
+ * A node no sink reads is the one that matters: it is not compiled, so nothing about it can break
31
+ * the effect and nothing about it is worth a warning — but an author who cannot see why their edit
32
+ * changed nothing is owed the reason. Saying it at this level is what lets the graph compile with
33
+ * half-built work sitting next to it.
34
+ *
35
+ * @type {string}
36
+ */
37
+ export const PARTICLE_GRAPH_INFO = "info";
38
+
39
+ /**
40
+ * How loudly each level speaks, so a caller with several findings about one node can show the
41
+ * loudest. Higher outranks lower.
42
+ *
43
+ * @type {Object<string, number>}
44
+ */
45
+ export const PARTICLE_GRAPH_SEVERITY_RANK = Object.freeze({
46
+ [PARTICLE_GRAPH_INFO]: 0,
47
+ [PARTICLE_GRAPH_WARNING]: 1,
48
+ [PARTICLE_GRAPH_ERROR]: 2,
49
+ });
@@ -1,3 +1,22 @@
1
+ /**
2
+ * A node's parameters, copied deeply enough that the copy and the original cannot write through to
3
+ * each other.
4
+ *
5
+ * There are four places a parameter object is copied — flattening a group, making one, taking one
6
+ * apart again, and handing a fresh node its defaults — and until the library had a parameter with a
7
+ * shape inside it they were all one level deep and all correct. A gradient's stops are a level
8
+ * further down than a literal's lanes, and a copy that stopped at the array would have left an
9
+ * ungrouped gradient sharing its stops with the group definition it came out of: edit the colour on
10
+ * one and it changes on the other, and on every other instance of that group.
11
+ *
12
+ * So there is one of these now, and it goes all the way down. Values are numbers, strings, and arrays
13
+ * and plain records of those; it is written out rather than handed to `structuredClone` because
14
+ * flattening a `curl4` runs it four thousand times and none of these values needs the machinery.
15
+ *
16
+ * @param {object} parameters
17
+ * @returns {object}
18
+ */
19
+ export function clone_particle_parameters(parameters: object): object;
1
20
  /**
2
21
  * The parameters of one node type.
3
22
  *
@@ -74,6 +93,16 @@ export const PARTICLE_PARAMETER_KIND: Readonly<{
74
93
  SWIZZLE: "swizzle";
75
94
  /** a non-negative integer — a curve handle */
76
95
  INTEGER: "integer";
96
+ /**
97
+ * an {@link ../../../../engine/animation/curve/AnimationCurve.js AnimationCurve}, as the
98
+ * `{keys: [...]}` record that class writes and reads
99
+ */
100
+ CURVE: "curve";
101
+ /**
102
+ * a colour gradient: a list of `{position, color}` stops, see
103
+ * {@link ./particle_ramp.js ParticleGradientStop}
104
+ */
105
+ GRADIENT: "gradient";
77
106
  }>;
78
107
  /**
79
108
  * One parameter of one node type.
@@ -84,6 +113,10 @@ export const PARTICLE_PARAMETER_KIND: Readonly<{
84
113
  * @property {*} [default] the value a freshly created node takes; absent for
85
114
  * {@link PARTICLE_PARAMETER_KIND.ATTRIBUTE}, whose default can only come from the effect's layout
86
115
  * @property {Object<string, *>} [options] for {@link PARTICLE_PARAMETER_KIND.ENUM}: label -> value
116
+ * @property {boolean} [alpha] for {@link PARTICLE_PARAMETER_KIND.GRADIENT}: whether the node reads
117
+ * the alpha channel. Both gradients *store* one — see {@link ./particle_ramp.js} — so that a
118
+ * gradient moved from the RGBA node to the RGB one and back keeps it; this says whether to offer
119
+ * it for editing.
87
120
  * @property {string} [description] one line of help, shown by the editor
88
121
  */
89
122
  /**
@@ -138,6 +171,13 @@ export type ParticleNodeParameter = {
138
171
  options?: {
139
172
  [x: string]: any;
140
173
  };
174
+ /**
175
+ * for {@link PARTICLE_PARAMETER_KIND.GRADIENT }: whether the node reads
176
+ * the alpha channel. Both gradients *store* one — see {@link ./particle_ramp.js} — so that a
177
+ * gradient moved from the RGBA node to the RGB one and back keeps it; this says whether to offer
178
+ * it for editing.
179
+ */
180
+ alpha?: boolean;
141
181
  /**
142
182
  * one line of help, shown by the editor
143
183
  */
@@ -1 +1 @@
1
- {"version":3,"file":"particle_node_parameters.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_node_parameters.js"],"names":[],"mappings":"AAqKA;;;;;;GAMG;AACH,+CAJW,MAAM,GACJ,qBAAqB,EAAE,CAcnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,uDANW,MAAM;IAEyD,MAAM,GAArE,OAAO,6BAA6B,EAAE,cAAc;IAElD,MAAM,CAoBlB;AAED;;;;GAIG;AACH,2CAFa,MAAM;IAAC,WAAW,EAAE,OAAO,8BAA8B,EAAE,uBAAuB,CAAC;IAAC,UAAU,EAAE,qBAAqB,EAAE,CAAA;CAAC,CAAC,CAOrI;;;;sCAjNS,MAAM;AApBhB;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH;IACI,0FAA0F;;IAE1F,kFAAkF;;IAElF,mFAAmF;;IAEnF,2EAA2E;;IAE3E,kEAAkE;;IAElE,8CAA8C;;GAE/C;AAEH;;;;;;;;;;GAUG;AAEH;;;;;;;;;GASG;AACH,gDAFU,MAAM,EAAE,CAUf;AAEH;;;;;GAKG;AACH;QAFiB,MAAM,GAAE,MAAM;EAI7B;AAEF;;;;;GAKG;AACH;QAFiB,MAAM,GAAE,qBAAqB,EAAE;EA4E7C;;;;;;;;UAtHW,MAAM;;;;UACN,MAAM;;;;;;;;;;YAGC,MAAM;;;;;kBACb,MAAM"}
1
+ {"version":3,"file":"particle_node_parameters.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_node_parameters.js"],"names":[],"mappings":"AAwMA;;;;;;;;;;;;;;;;;GAiBG;AACH,sDAHW,MAAM,GACJ,MAAM,CAIlB;AAwBD;;;;;;GAMG;AACH,+CAJW,MAAM,GACJ,qBAAqB,EAAE,CAcnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,uDANW,MAAM;IAEyD,MAAM,GAArE,OAAO,6BAA6B,EAAE,cAAc;IAElD,MAAM,CAmBlB;AAED;;;;GAIG;AACH,2CAFa,MAAM;IAAC,WAAW,EAAE,OAAO,8BAA8B,EAAE,uBAAuB,CAAC;IAAC,UAAU,EAAE,qBAAqB,EAAE,CAAA;CAAC,CAAC,CAOrI;;;;sCA7RS,MAAM;AApBhB;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH;IACI,0FAA0F;;IAE1F,kFAAkF;;IAElF,mFAAmF;;IAEnF,2EAA2E;;IAE3E,kEAAkE;;IAElE,8CAA8C;;IAE9C;;;OAGG;;IAEH;;;OAGG;;GAEJ;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;GASG;AACH,gDAFU,MAAM,EAAE,CAWf;AAEH;;;;;GAKG;AACH;QAFiB,MAAM,GAAE,MAAM;EAI7B;AAEF;;;;;GAKG;AACH;QAFiB,MAAM,GAAE,qBAAqB,EAAE;EA8F7C;;;;;;;;UA7IW,MAAM;;;;UACN,MAAM;;;;;;;;;;YAGC,MAAM;;;;;;;;YACb,OAAO;;;;kBAIP,MAAM"}