@woosh/meep-engine 3.18.0 → 3.19.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 (120) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -1
  3. package/editor/view/particles/effect/ParticleCurveEditorView.js +303 -120
  4. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -1
  5. package/editor/view/particles/effect/ParticleGradientEditorView.js +108 -63
  6. package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
  7. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  8. package/editor/view/particles/effect/ParticleNodeParametersView.js +3 -1
  9. package/editor/view/particles/effect/particle-editor.css +60 -30
  10. package/package.json +1 -2
  11. package/samples/engine/README.md +1 -1
  12. package/src/core/binary/compression/decompress_bytes.d.ts +13 -0
  13. package/src/core/binary/compression/decompress_bytes.d.ts.map +1 -0
  14. package/src/core/binary/compression/decompress_bytes.js +28 -0
  15. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +67 -22
  16. package/src/engine/asset/loaders/image/ImageDecoderWorker.js +12 -27
  17. package/src/engine/asset/loaders/image/prototypePNG.js +8 -7
  18. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  19. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
  20. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +266 -0
  21. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -0
  22. package/src/engine/graphics/ecs/particles/ParticleEffect.js +455 -0
  23. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +58 -0
  24. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -0
  25. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +219 -0
  26. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +178 -25
  27. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  28. package/src/engine/graphics3/GPUParticleEmitterSystem.js +809 -310
  29. package/src/format/image/png/PNGReader.d.ts +7 -6
  30. package/src/format/image/png/PNGReader.d.ts.map +1 -1
  31. package/src/format/image/png/PNGReader.js +13 -12
  32. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts +3 -2
  33. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  34. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +5 -4
  35. package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts +3 -2
  36. package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts.map +1 -1
  37. package/src/format/image/png/chunk/png_chunk_decode_zTXt.js +5 -4
  38. package/src/format/image/png/png_inflate.d.ts +3 -3
  39. package/src/format/image/png/png_inflate.d.ts.map +1 -1
  40. package/src/format/image/png/png_inflate.js +29 -39
  41. package/src/format/texture/ktx2/ktx2_read.d.ts +4 -4
  42. package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
  43. package/src/format/texture/ktx2/ktx2_read.js +18 -21
  44. package/src/shade/playground/particle_ecs/README.md +203 -0
  45. package/src/shade/playground/particle_ecs/bonfire_editor.d.ts +39 -0
  46. package/src/shade/playground/particle_ecs/bonfire_editor.d.ts.map +1 -0
  47. package/src/shade/playground/particle_ecs/bonfire_editor.js +315 -0
  48. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +145 -0
  49. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts.map +1 -0
  50. package/src/shade/playground/particle_ecs/bonfire_effects.js +202 -0
  51. package/src/shade/playground/particle_ecs/bonfire_sprites.d.ts +23 -0
  52. package/src/shade/playground/particle_ecs/bonfire_sprites.d.ts.map +1 -0
  53. package/src/shade/playground/particle_ecs/bonfire_sprites.js +315 -0
  54. package/src/shade/playground/particle_ecs/bonfire_world.d.ts +86 -0
  55. package/src/shade/playground/particle_ecs/bonfire_world.d.ts.map +1 -0
  56. package/src/shade/playground/particle_ecs/bonfire_world.js +303 -0
  57. package/src/shade/playground/particle_ecs/effects/embers.json +1634 -0
  58. package/src/shade/playground/particle_ecs/effects/flame.json +1882 -0
  59. package/src/shade/playground/particle_ecs/effects/smoke.json +1860 -0
  60. package/src/shade/playground/particle_ecs/effects/soot.json +1606 -0
  61. package/src/shade/playground/particle_ecs/index.html +330 -0
  62. package/src/shade/playground/particle_ecs/main.d.ts +2 -0
  63. package/src/shade/playground/particle_ecs/main.d.ts.map +1 -0
  64. package/src/shade/playground/particle_ecs/main.js +566 -0
  65. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts +16 -0
  66. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -0
  67. package/src/shade/playground/particle_ecs/moonlit_environment.js +144 -0
  68. package/src/shade/playground/particle_editor/README.md +5 -4
  69. package/src/shade/playground/profile_hotkey.d.ts +58 -0
  70. package/src/shade/playground/profile_hotkey.d.ts.map +1 -0
  71. package/src/shade/playground/profile_hotkey.js +325 -0
  72. package/src/shade/playground/ssr_variance/README.md +105 -0
  73. package/src/shade/playground/ssr_variance/capture.d.ts +16 -0
  74. package/src/shade/playground/ssr_variance/capture.d.ts.map +1 -0
  75. package/src/shade/playground/ssr_variance/capture.js +96 -0
  76. package/src/shade/playground/ssr_variance/index.html +22 -0
  77. package/src/shade/playground/ssr_variance/main.d.ts +2 -0
  78. package/src/shade/playground/ssr_variance/main.d.ts.map +1 -0
  79. package/src/shade/playground/ssr_variance/main.js +246 -0
  80. package/src/shade/playground/ssr_variance/reference.d.ts +18 -0
  81. package/src/shade/playground/ssr_variance/reference.d.ts.map +1 -0
  82. package/src/shade/playground/ssr_variance/reference.js +78 -0
  83. package/src/shade/playground/ssr_variance/scene.d.ts +11 -0
  84. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -0
  85. package/src/shade/playground/ssr_variance/scene.js +61 -0
  86. package/src/shade/playground/ssr_variance/statistics.d.ts +44 -0
  87. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -0
  88. package/src/shade/playground/ssr_variance/statistics.js +51 -0
  89. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
  90. package/src/shade/renderer/loader/gltf/tiny-gltf.js +9 -3
  91. package/src/shade/renderer/loader/usd/usd_decode_image.d.ts +4 -4
  92. package/src/shade/renderer/loader/usd/usd_decode_image.d.ts.map +1 -1
  93. package/src/shade/renderer/loader/usd/usd_decode_image.js +4 -4
  94. package/src/shade/renderer/particles/DESIGN.md +748 -703
  95. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +11 -4
  96. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  97. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +431 -424
  98. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  99. package/src/shade/renderer/postprocess/ssr/SSR.js +2 -1
  100. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -1
  101. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +0 -6
  102. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
  103. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +19 -5
  104. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts +4 -0
  105. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -0
  106. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +133 -0
  107. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +0 -8
  108. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  109. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +16 -113
  110. package/src/shade/renderer/texture/source/texel_data_from_ktx2.d.ts +2 -2
  111. package/src/shade/renderer/texture/source/texel_data_from_ktx2.d.ts.map +1 -1
  112. package/src/shade/renderer/texture/source/texel_data_from_ktx2.js +3 -3
  113. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts +0 -20
  114. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts.map +0 -1
  115. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +0 -14
  116. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +0 -1
  117. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts +0 -50
  118. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts.map +0 -1
  119. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +0 -17
  120. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +0 -1
@@ -0,0 +1,330 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Bonfire — ECS GPU particles</title>
7
+
8
+ <!-- the editor's own stylesheets; the panel below only opens once somebody presses E -->
9
+ <link rel="stylesheet" href="/editor/view/node-graph/node-graph.css">
10
+ <link rel="stylesheet" href="/editor/view/particles/effect/particle-editor.css">
11
+
12
+ <style>
13
+ :root {
14
+ color-scheme: dark;
15
+ --panel: rgba(14, 15, 20, 0.78);
16
+ --edge: rgba(255, 255, 255, 0.1);
17
+ --text: #e7e4de;
18
+ --muted: #9a978f;
19
+ --ember: #ff9a3c;
20
+
21
+ /* the editor's tokens, so its panels theme as they do inside the editor shell */
22
+ --meep-panel-bg: #1a1e25;
23
+ --meep-header-bg: #22262e;
24
+ --meep-divider-color: #10131a;
25
+ --meep-fg: #d6dae0;
26
+ --meep-fg-muted: #8b939f;
27
+ --meep-accent: #ff9a3c;
28
+ --meep-error: #ff7a7a;
29
+ --meep-warning: #e2b341;
30
+ --meep-font: 12px 'Segoe UI', system-ui, sans-serif;
31
+ --meep-graph-bg: #12151b;
32
+ --meep-graph-bg-glow: #1a1e26;
33
+ --meep-graph-node-bg: #232830;
34
+ --meep-graph-node-header: #2b313b;
35
+ --meep-graph-node-border: #363c46;
36
+ --meep-graph-input-bg: #171b21;
37
+ }
38
+
39
+ * {
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ html, body {
44
+ margin: 0;
45
+ height: 100%;
46
+ overflow: hidden;
47
+ background: #05060a;
48
+ color: var(--text);
49
+ font: 13px/1.5 ui-sans-serif, system-ui, "Segoe UI", Roboto, sans-serif;
50
+ }
51
+
52
+ #viewport {
53
+ position: fixed;
54
+ inset: 0;
55
+ /* the canvas is sized by the engine and is shorter than this while the editor is open */
56
+ overflow: hidden;
57
+ }
58
+
59
+ #viewport canvas {
60
+ display: block;
61
+ }
62
+
63
+ .panel {
64
+ position: fixed;
65
+ background: var(--panel);
66
+ border: 1px solid var(--edge);
67
+ border-radius: 10px;
68
+ padding: 12px 14px;
69
+ backdrop-filter: blur(8px);
70
+ }
71
+
72
+ #controls {
73
+ top: 14px;
74
+ left: 14px;
75
+ width: 236px;
76
+ }
77
+
78
+ #stats {
79
+ top: 14px;
80
+ right: 14px;
81
+ min-width: 190px;
82
+ font-variant-numeric: tabular-nums;
83
+ }
84
+
85
+ #hint {
86
+ bottom: 14px;
87
+ left: 14px;
88
+ color: var(--muted);
89
+ max-width: 460px;
90
+ }
91
+
92
+ #profile_status {
93
+ bottom: 14px;
94
+ right: 14px;
95
+ max-width: 420px;
96
+ color: var(--muted);
97
+ font-variant-numeric: tabular-nums;
98
+ }
99
+
100
+ #profile_status.recording {
101
+ color: #ff6a5c;
102
+ border-color: rgba(255, 106, 92, 0.5);
103
+ }
104
+
105
+ /* --- the particle editor ------------------------------------------------------------- */
106
+
107
+ /*
108
+ The whole window. E is a mode switch between looking at the fire and editing it, rather than
109
+ a panel that takes a share of the screen: a node graph wants every pixel it can get, and so
110
+ does the fire.
111
+ */
112
+ #effect_editor {
113
+ position: fixed;
114
+ inset: 0;
115
+ display: flex;
116
+ flex-direction: column;
117
+ background: var(--meep-panel-bg);
118
+ font: var(--meep-font);
119
+ color: var(--meep-fg);
120
+ }
121
+
122
+ /*
123
+ An id selector outranks the user agent's `[hidden] { display: none }`, so the `display: flex`
124
+ above would otherwise keep the panel over the scene from the moment the page loaded, while
125
+ the `hidden` property everything reads went on saying it was closed. This rule matches the
126
+ attribute at the same specificity and comes later, so the attribute wins — which is what
127
+ makes `hidden` the switch the editor already treats it as.
128
+ */
129
+ #effect_editor[hidden] {
130
+ display: none;
131
+ }
132
+
133
+ #editor_bar {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 10px;
137
+ padding: 6px 10px;
138
+ background: var(--meep-header-bg);
139
+ border-bottom: 1px solid var(--meep-divider-color);
140
+ }
141
+
142
+ #editor_bar strong {
143
+ font-size: 12px;
144
+ font-weight: 600;
145
+ }
146
+
147
+ #editor_bar select,
148
+ #editor_bar button {
149
+ font: inherit;
150
+ color: var(--meep-fg);
151
+ background: var(--meep-graph-input-bg);
152
+ border: 1px solid var(--meep-graph-node-border);
153
+ border-radius: 5px;
154
+ padding: 4px 9px;
155
+ cursor: pointer;
156
+ width: auto;
157
+ margin: 0;
158
+ }
159
+
160
+ #editor_bar select:hover,
161
+ #editor_bar button:hover {
162
+ border-color: var(--meep-accent);
163
+ }
164
+
165
+ #editor_status {
166
+ flex: 1;
167
+ color: var(--meep-fg-muted);
168
+ font-variant-numeric: tabular-nums;
169
+ white-space: nowrap;
170
+ overflow: hidden;
171
+ text-overflow: ellipsis;
172
+ }
173
+
174
+ #editor_status.failed {
175
+ color: var(--meep-error);
176
+ }
177
+
178
+ #editor_mount {
179
+ position: relative;
180
+ flex: 1;
181
+ min-height: 0;
182
+ }
183
+
184
+ h1 {
185
+ margin: 0 0 2px;
186
+ font-size: 13px;
187
+ font-weight: 600;
188
+ letter-spacing: 0.02em;
189
+ }
190
+
191
+ h1 span {
192
+ color: var(--ember);
193
+ }
194
+
195
+ p.sub {
196
+ margin: 0 0 10px;
197
+ color: var(--muted);
198
+ font-size: 12px;
199
+ }
200
+
201
+ label.row {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 8px;
205
+ padding: 3px 0;
206
+ cursor: pointer;
207
+ }
208
+
209
+ label.row input {
210
+ accent-color: var(--ember);
211
+ margin: 0;
212
+ }
213
+
214
+ label.row span {
215
+ flex: 1;
216
+ }
217
+
218
+ button {
219
+ width: 100%;
220
+ margin-top: 10px;
221
+ padding: 7px 10px;
222
+ font: inherit;
223
+ font-weight: 600;
224
+ color: #1a1206;
225
+ background: var(--ember);
226
+ border: 0;
227
+ border-radius: 7px;
228
+ cursor: pointer;
229
+ }
230
+
231
+ button:hover {
232
+ filter: brightness(1.1);
233
+ }
234
+
235
+ dl {
236
+ display: grid;
237
+ grid-template-columns: auto 1fr;
238
+ gap: 2px 12px;
239
+ margin: 0;
240
+ }
241
+
242
+ dt {
243
+ color: var(--muted);
244
+ }
245
+
246
+ dd {
247
+ margin: 0;
248
+ text-align: right;
249
+ }
250
+
251
+ #message {
252
+ position: fixed;
253
+ inset: 0;
254
+ display: grid;
255
+ place-content: center;
256
+ padding: 40px;
257
+ text-align: center;
258
+ white-space: pre-wrap;
259
+ color: #ffb4a4;
260
+ pointer-events: none;
261
+ }
262
+
263
+ kbd {
264
+ padding: 1px 5px;
265
+ border: 1px solid var(--edge);
266
+ border-radius: 4px;
267
+ background: rgba(255, 255, 255, 0.06);
268
+ font: inherit;
269
+ font-size: 11px;
270
+ }
271
+ </style>
272
+ </head>
273
+ <body tabindex="0">
274
+ <div id="viewport"></div>
275
+
276
+ <section class="panel" id="controls">
277
+ <h1>Bonfire · <span>ECS particles</span></h1>
278
+ <p class="sub">Four <code>ParticleEffect</code> entities</p>
279
+
280
+ <label class="row"><input type="checkbox" id="flame" checked><span>Flame</span></label>
281
+ <label class="row"><input type="checkbox" id="smoke" checked><span>Smoke</span></label>
282
+ <label class="row"><input type="checkbox" id="embers" checked><span>Embers</span></label>
283
+ <label class="row"><input type="checkbox" id="soot" checked><span>Soot</span></label>
284
+
285
+ <button id="stoke">Stoke the fire</button>
286
+ </section>
287
+
288
+ <section class="panel" id="stats">
289
+ <dl>
290
+ <dt>fps</dt>
291
+ <dd id="stat-fps">—</dd>
292
+ <dt>alive</dt>
293
+ <dd id="stat-alive">—</dd>
294
+ <dt>free</dt>
295
+ <dd id="stat-dead">—</dd>
296
+ <dt>drawn</dt>
297
+ <dd id="stat-draw">—</dd>
298
+ <dt>emitters</dt>
299
+ <dd id="stat-emitters">—</dd>
300
+ </dl>
301
+ </section>
302
+
303
+ <p class="panel" id="hint">
304
+ Drag to orbit, <kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd> to move, wheel to zoom. The
305
+ checkboxes write <code>emitting</code> on a component; the button asks an entity for a burst.
306
+ Both go through the ECS — nothing here touches the scene graph.
307
+ <br><kbd>E</kbd> switches to the particle editor — full screen, editing whichever effect the
308
+ selector names, live. <kbd>Esc</kbd> comes back from anywhere in it.
309
+ </p>
310
+
311
+ <p class="panel" id="profile_status"><kbd>T</kbd> to record a GPU profile</p>
312
+
313
+ <section id="effect_editor" hidden>
314
+ <div id="editor_bar">
315
+ <strong>Effect</strong>
316
+ <select id="editor_effect" title="which effect the graph below edits"></select>
317
+ <button id="editor_download" title="save this effect as JSON — drop it over effects/&lt;name&gt;.json">Download</button>
318
+ <button id="editor_import" title="open a document downloaded earlier">Import…</button>
319
+ <input type="file" id="editor_file" accept="application/json,.json" hidden>
320
+ <span id="editor_status"></span>
321
+ <button id="editor_close" title="Escape, or E when nothing is focused">Close · Esc</button>
322
+ </div>
323
+ <div id="editor_mount"></div>
324
+ </section>
325
+
326
+ <div id="message"></div>
327
+
328
+ <script type="module" src="./main.js"></script>
329
+ </body>
330
+ </html>
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_ecs/main.js"],"names":[],"mappings":""}