@fundamental-engine/three 0.9.2 → 0.9.4

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.
package/README.md CHANGED
@@ -118,7 +118,8 @@ const field = createThreeField({
118
118
  });
119
119
  ```
120
120
 
121
- The line overlays render fully; numeric label sprites (the `data` reading) are a tracked follow-up.
121
+ The line overlays render fully, and the `data` reading's numeric labels draw as pooled sprites — each
122
+ distinct label string gets one cached `CanvasTexture`, reused across frames.
122
123
 
123
124
  ## Bodies — meshes that bend the field
124
125
 
package/dist/backend.d.ts CHANGED
@@ -10,9 +10,10 @@
10
10
  * still reads. Geometry is rebuilt on each `clear()` (the engine clears once at the top of every
11
11
  * overlay frame), so the scene always shows the latest readings.
12
12
  *
13
- * Scope: the line + rect primitives — i.e. every field-structure overlay — render fully. Text
14
- * labels (the `data` reading's numeric chips) are not yet drawn; `measureText` is honored so the
15
- * plates size correctly, and label sprites are a tracked follow-up. The line overlays need no text.
13
+ * Scope: the line + rect primitives — i.e. every field-structure overlay — render fully. The
14
+ * `data` reading's numeric chip labels render as pooled `Sprite`s: each distinct label string
15
+ * (color included) gets ONE `CanvasTexture`, cached and reused across frames; the sprite pool grows
16
+ * on demand and unused sprites are hidden on `clear()`, so a steady overlay uploads no new textures.
16
17
  */
17
18
  import { Group } from 'three';
18
19
  import type { RenderBackend } from '@fundamental-engine/core';
@@ -20,7 +21,11 @@ import type { FieldProjection } from './project.ts';
20
21
  export interface ThreeBackendOptions {
21
22
  /** the 2D↔3D mapping (share the one your `FieldLayer` uses so overlay and swarm align). */
22
23
  projection: FieldProjection;
23
- /** world-space `z` the overlay draws at — put it just in front of a flat field (default 0.01). */
24
+ /** world-z OFFSET off the projected field plane — the overlay sits just in front of wherever the
25
+ * projection places the field's `z = 0` plane (default 0.01). A `PlaneProjection` or an
26
+ * uncentered `VolumeProjection` puts that plane at world-z 0, so the offset reads as an absolute
27
+ * z there; a `VolumeProjection({ centerZ: true })` shifts the plane to `-depth/2 · depthScale`
28
+ * and the overlay follows it. */
24
29
  z?: number;
25
30
  }
26
31
  export interface ThreeBackend extends RenderBackend {
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAKL,KAAK,EAMN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,UAAU,EAAE,eAAe,CAAC;IAC5B,kGAAkG;IAClG,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA2IpE"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,EASN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAYpD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,UAAU,EAAE,eAAe,CAAC;IAC5B;;;;sCAIkC;IAClC,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAsPpE"}
package/dist/backend.js CHANGED
@@ -10,12 +10,20 @@
10
10
  * still reads. Geometry is rebuilt on each `clear()` (the engine clears once at the top of every
11
11
  * overlay frame), so the scene always shows the latest readings.
12
12
  *
13
- * Scope: the line + rect primitives — i.e. every field-structure overlay — render fully. Text
14
- * labels (the `data` reading's numeric chips) are not yet drawn; `measureText` is honored so the
15
- * plates size correctly, and label sprites are a tracked follow-up. The line overlays need no text.
13
+ * Scope: the line + rect primitives — i.e. every field-structure overlay — render fully. The
14
+ * `data` reading's numeric chip labels render as pooled `Sprite`s: each distinct label string
15
+ * (color included) gets ONE `CanvasTexture`, cached and reused across frames; the sprite pool grows
16
+ * on demand and unused sprites are hidden on `clear()`, so a steady overlay uploads no new textures.
16
17
  */
17
- import { AdditiveBlending, BufferGeometry, DynamicDrawUsage, Float32BufferAttribute, Group, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Vector3, } from 'three';
18
+ import { AdditiveBlending, BufferAttribute, BufferGeometry, CanvasTexture, DynamicDrawUsage, Group, LinearFilter, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Sprite, SpriteMaterial, Vector3, } from 'three';
18
19
  const _v = new Vector3();
20
+ const _v2 = new Vector3();
21
+ /** the chip label font — matches the Canvas 2D backend's CHIP_FONT so labels read identically. */
22
+ const CHIP_FONT = '10px ui-monospace, SFMono-Regular, Menlo, monospace';
23
+ /** CSS px height of the chip label box (the `10px` font + a little vertical breathing room). */
24
+ const LABEL_PX_HEIGHT = 13;
25
+ /** supersample factor for the label texture — crisp text without a huge atlas. */
26
+ const LABEL_SS = 3;
19
27
  /** A lazily-created 2D context purely for text metrics — never rendered to. */
20
28
  function metricsContext() {
21
29
  if (typeof document === 'undefined')
@@ -35,9 +43,57 @@ export function threeBackend(opts) {
35
43
  const rectGeom = new BufferGeometry();
36
44
  const rects = new Mesh(rectGeom, new MeshBasicMaterial({ vertexColors: true, transparent: true, depthWrite: false, blending: AdditiveBlending }));
37
45
  rects.frustumCulled = false;
46
+ // label sprites live in their own group so the pool sits cleanly beside the line/rect meshes.
47
+ const labelGroup = new Group();
38
48
  const object = new Group();
39
- object.add(lines, rects);
49
+ object.add(lines, rects, labelGroup);
40
50
  const metrics = metricsContext();
51
+ const labelCache = new Map();
52
+ /** build (or fetch) the cached texture for `value` at the given color. */
53
+ function labelTexture(value, r, g, b, a) {
54
+ if (typeof document === 'undefined')
55
+ return null;
56
+ const key = `${value}|${r},${g},${b},${a}`;
57
+ const hit = labelCache.get(key);
58
+ if (hit)
59
+ return hit;
60
+ if (metrics)
61
+ metrics.font = CHIP_FONT;
62
+ const widthPx = metrics ? metrics.measureText(value).width : value.length * 6;
63
+ const cv = document.createElement('canvas');
64
+ cv.width = Math.max(1, Math.ceil(widthPx * LABEL_SS));
65
+ cv.height = Math.max(1, Math.ceil(LABEL_PX_HEIGHT * LABEL_SS));
66
+ const cx = cv.getContext('2d');
67
+ if (!cx)
68
+ return null;
69
+ cx.scale(LABEL_SS, LABEL_SS);
70
+ cx.font = CHIP_FONT;
71
+ cx.textBaseline = 'middle';
72
+ cx.textAlign = 'left';
73
+ cx.fillStyle = `rgba(${r},${g},${b},${a})`;
74
+ cx.fillText(value, 0, LABEL_PX_HEIGHT / 2);
75
+ const texture = new CanvasTexture(cv);
76
+ texture.minFilter = LinearFilter; // non-power-of-two atlas; no mipmaps
77
+ texture.magFilter = LinearFilter;
78
+ const entry = { texture, widthPx };
79
+ labelCache.set(key, entry);
80
+ return entry;
81
+ }
82
+ // Sprite pool: reused across frames. `clear()` parks the cursor at 0 and hides the tail; `text()`
83
+ // advances it, growing the pool only when a frame needs more labels than before.
84
+ const labelPool = [];
85
+ let labelCursor = 0;
86
+ function acquireLabel() {
87
+ let sprite = labelPool[labelCursor];
88
+ if (!sprite) {
89
+ sprite = new Sprite(new SpriteMaterial({ transparent: true, depthWrite: false }));
90
+ sprite.frustumCulled = false;
91
+ labelPool[labelCursor] = sprite;
92
+ labelGroup.add(sprite);
93
+ }
94
+ labelCursor++;
95
+ return sprite;
96
+ }
41
97
  // persistent, growable GPU buffers — written in place each frame (DynamicDrawUsage) rather than
42
98
  // reallocating four Float32Arrays + four Float32BufferAttributes per overlay frame, which orphaned
43
99
  // the prior GPU buffers for the GC and forced a fresh upload every frame. Mirrors ParticlePool's
@@ -47,7 +103,10 @@ export function threeBackend(opts) {
47
103
  let rectPosData = new Float32Array(0);
48
104
  let rectColData = new Float32Array(0);
49
105
  function dynAttr(data) {
50
- const attr = new Float32BufferAttribute(data, 3);
106
+ // BufferAttribute holds `data` BY REFERENCE, so the in-place writes below reach the GPU buffer.
107
+ // (`Float32BufferAttribute` would silently COPY the array at construction — the attribute then
108
+ // holds its own zeros and every later `data.set(...)` writes memory the GPU never sees.)
109
+ const attr = new BufferAttribute(data, 3);
51
110
  attr.setUsage(DynamicDrawUsage);
52
111
  return attr;
53
112
  }
@@ -69,8 +128,8 @@ export function threeBackend(opts) {
69
128
  }
70
129
  /** map a CSS-pixel point to the overlay plane and push xyz onto `arr` (overlay owns its own z). */
71
130
  function pushPoint(arr, x, y) {
72
- projection.toWorld(x, y, 0, 0, 0, _v); // z/heat/size irrelevant — the overlay draws at a fixed plane
73
- arr.push(_v.x, _v.y, z);
131
+ projection.toWorld(x, y, 0, 0, 0, _v); // heat/size irrelevant; engine z = 0 → the field's page plane
132
+ arr.push(_v.x, _v.y, _v.z + z); // offset OFF the projected plane (not an absolute world z) so volumes register
74
133
  }
75
134
  /** premultiplied 0..1 rgb (additive compositing turns alpha into intensity). */
76
135
  function pushColor(arr, r, g, b, a) {
@@ -96,6 +155,20 @@ export function threeBackend(opts) {
96
155
  lineCol.length = 0;
97
156
  rectPos.length = 0;
98
157
  rectCol.length = 0;
158
+ // hide any label sprites the previous frame used but this one won't, then rewind the cursor so
159
+ // the next frame reuses them from the top (texture/material stay; only visibility toggles).
160
+ for (let i = labelCursor; i < labelPool.length && labelPool[i].visible; i++) {
161
+ labelPool[i].visible = false;
162
+ }
163
+ labelCursor = 0;
164
+ // Unbounded cache protection: if custom overlays generate high-frequency text labels,
165
+ // purge the cache at the start of a frame to prevent GPU memory leaks.
166
+ if (labelCache.size > 256) {
167
+ for (const { texture } of labelCache.values()) {
168
+ texture.dispose();
169
+ }
170
+ labelCache.clear();
171
+ }
99
172
  },
100
173
  segments(packed, stroke) {
101
174
  for (let i = 0; i + 3 < packed.length; i += 4) {
@@ -127,13 +200,38 @@ export function threeBackend(opts) {
127
200
  for (let k = 0; k < 6; k++)
128
201
  pushColor(rectCol, r, g, b, alpha);
129
202
  },
130
- text() {
131
- // label sprites are a tracked follow-up; the line overlays need no text, and the chip plate
132
- // (rect) still renders. measureText is honored so plate sizing stays correct.
203
+ text(value, x, y, r, g, b, alpha) {
204
+ // the engine anchors the label at baseline-middle (x = left edge, y = vertical center).
205
+ const entry = labelTexture(value, r, g, b, alpha);
206
+ if (!entry)
207
+ return; // no 2D context (headless without a document) — nothing to draw
208
+ const sprite = acquireLabel();
209
+ const mat = sprite.material;
210
+ if (mat.map !== entry.texture) {
211
+ mat.map = entry.texture;
212
+ mat.needsUpdate = true;
213
+ }
214
+ sprite.visible = true;
215
+ // scale the sprite to the label's world size (CSS px → world via the projection's scale) and
216
+ // position its CENTER — the engine's anchor is the left/middle, so nudge right by half a width.
217
+ // Derive the field-px→world scale from the projection itself (no projection-type coupling):
218
+ // project the label's left and right edges, and its top/bottom, and take the world deltas. This
219
+ // stays correct for any FieldProjection, and sizes the sprite to the same footprint as the plate.
220
+ projection.toWorld(x, y, 0, 0, 0, _v); // left edge, vertical center
221
+ projection.toWorld(x + entry.widthPx, y, 0, 0, 0, _v2); // right edge
222
+ const wWorld = _v.distanceTo(_v2);
223
+ projection.toWorld(x, y - LABEL_PX_HEIGHT, 0, 0, 0, _v2); // one label-height up
224
+ const hWorld = _v.distanceTo(_v2);
225
+ sprite.scale.set(wWorld || 1e-4, hWorld || 1e-4, 1);
226
+ // position the sprite's CENTER; the engine anchors at the left edge / vertical middle, so nudge
227
+ // right by half the label width. z is the same offset off the projected plane as line/rect,
228
+ // so labels register with their chip plates under any projection (centered volumes included).
229
+ projection.toWorld(x + entry.widthPx / 2, y, 0, 0, 0, _v);
230
+ sprite.position.set(_v.x, _v.y, _v.z + z);
133
231
  },
134
232
  measureText(value) {
135
233
  if (metrics) {
136
- metrics.font = '10px ui-monospace, SFMono-Regular, Menlo, monospace';
234
+ metrics.font = CHIP_FONT;
137
235
  return metrics.measureText(value).width;
138
236
  }
139
237
  return value.length * 6; // coarse fallback when no 2D context is available
@@ -143,6 +241,12 @@ export function threeBackend(opts) {
143
241
  rectGeom.dispose();
144
242
  lines.material.dispose();
145
243
  rects.material.dispose();
244
+ for (const sprite of labelPool)
245
+ sprite.material.dispose();
246
+ for (const { texture } of labelCache.values())
247
+ texture.dispose();
248
+ labelCache.clear();
249
+ labelPool.length = 0;
146
250
  },
147
251
  };
148
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
package/dist/layer.d.ts CHANGED
@@ -116,6 +116,12 @@ export declare class FieldLayer implements FieldHandle {
116
116
  setDprCap(cap: number): void;
117
117
  /** apply an adaptive quality tier 0–3 (#413). */
118
118
  setQualityTier(tier: number): void;
119
+ /** the field's current runtime policy (frozen copy). */
120
+ get policy(): FieldHandle['policy'];
121
+ /** replace the runtime field policy live. */
122
+ setPolicy(policy: Parameters<FieldHandle['setPolicy']>[0]): void;
123
+ /** derive a scoped, read-only agent view over this field (see FieldHandle.forAgent). */
124
+ forAgent(opts: Parameters<FieldHandle['forAgent']>[0]): ReturnType<FieldHandle['forAgent']>;
119
125
  setRender(mode: Parameters<FieldHandle['setRender']>[0]): void;
120
126
  setOverlay(mode: Parameters<FieldHandle['setOverlay']>[0]): void;
121
127
  setVisible(on: boolean): void;
@@ -158,6 +164,10 @@ export declare class FieldLayer implements FieldHandle {
158
164
  sampleField(name: string, x: number, y: number): number;
159
165
  /** open a named host-authorable scalar grid (deposit/sample/gradient/decay) in field px — a scent/wear/goal field. */
160
166
  grid(name: string): ScalarGrid;
167
+ /** EXPERIMENTAL: deposit source-tagged, decaying focus onto a body by identity (the write side). */
168
+ focus(target: Parameters<FieldHandle['focus']>[0], input?: Parameters<FieldHandle['focus']>[1]): void;
169
+ /** EXPERIMENTAL: read the current-focus digest (the ranked, thresholded sharp tip). */
170
+ focusState(opts?: Parameters<FieldHandle['focusState']>[0]): ReturnType<FieldHandle['focusState']>;
161
171
  /** relate two programmatic bodies (the `FieldHandle.addEdge` form) — delegated to the engine. */
162
172
  addEdge(a: BodyHandle, b: BodyHandle, opts?: {
163
173
  type?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChY,OAAO,EAAE,KAAK,EAAW,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAUpF,+FAA+F;AAC/F,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,oDAAoD;IACpD,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9E,mEAAmE;IACnE,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,IAAI,GAAE,iBAAsB;IAyBxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS;IACzD,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU;IAOnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe;IACpE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW;IAuCtC,gGAAgG;IAChG,IAAI,IAAI,MAAM;IAKd,IAAI,IAAI,IAAI;IAGZ,MAAM,IAAI,IAAI;IAGd,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI;IAWrD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAGhC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI;IAGhD,aAAa,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,MAAM;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAG/F,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAGrC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG/B,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG/B,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG7B,2FAA2F;IAC3F,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAG5B,iDAAiD;IACjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAGlC,wDAAwD;IACxD,IAAI,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,CAElC;IACD,6CAA6C;IAC7C,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAGhE,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAG3F,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAG9D,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAGhE,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG7B,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI;IAGxC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAG/C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI;IAG1D,SAAS,IAAI,IAAI;IAGjB,IAAI,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAGzC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAGhD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAGjD,UAAU,IAAI,IAAI;IAGlB,aAAa,IAAI,MAAM;IAGvB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAGxC,yFAAyF;IACzF,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM;IAGzC,gGAAgG;IAChG,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM;IAGvF,0EAA0E;IAC1E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAGnG,MAAM,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAG5E,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAGtD,wGAAwG;IACxG,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,sHAAsH;IACtH,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAG9D,yGAAyG;IACzG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,kBAAkB;IAGrF,6EAA6E;IAC7E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAGvD,sHAAsH;IACtH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAG9B,oGAAoG;IACpG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAGrG,uFAAuF;IACvF,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAGlG,iGAAiG;IACjG,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,eAAe,CAAA;KAAE,GAAG,UAAU;IAGnJ,qEAAqE;IACrE,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC;IAGpC;mFAC+E;IAC/E,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,gBAAgB;IAGvC,0HAA0H;IAC1H,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,aAAa;IAGpD,uEAAuE;IACvE,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,SAAS;IAGnD,uGAAuG;IACvG,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY;IAG9E,wFAAwF;IACxF,IAAI,WAAW,IAAI,kBAAkB,CAEpC;IACD,8FAA8F;IAC9F,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAGpF,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,OAAO,IAAI,MAAM;IAGjB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,kGAAkG;IAClG,OAAO,IAAI,IAAI;CAMhB;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAEzE;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IACnE,gFAAgF;IAChF,QAAQ,EAAE,MAAM,YAAY,CAAC;IAC7B,oEAAoE;IACpE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qFAAqF;IACrF,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAIrE"}
package/dist/layer.js CHANGED
@@ -16,7 +16,7 @@
16
16
  * The engine self-advances on the host's animation frame; `tick()` only reads the current state into
17
17
  * the geometry, so it is safe to call from any render loop at any cadence.
18
18
  */
19
- import { createField } from '@fundamental-engine/core';
19
+ import { createField, resolvePalette } from '@fundamental-engine/core';
20
20
  import { Group, Vector3 } from 'three';
21
21
  import { threeHost } from "./host.js";
22
22
  import { PlaneProjection, VolumeProjection } from "./project.js";
@@ -120,9 +120,21 @@ export class FieldLayer {
120
120
  }
121
121
  setAccent(hex) {
122
122
  this.field.setAccent(hex);
123
+ const u = this.pool.material.uniforms['uAccent'];
124
+ if (u?.value) {
125
+ u.value.set(hex);
126
+ }
123
127
  }
124
128
  setPalette(palette) {
125
129
  this.field.setPalette(palette);
130
+ const stops = resolvePalette(palette);
131
+ const first = stops[0];
132
+ if (first) {
133
+ const u = this.pool.material.uniforms['uAccent'];
134
+ if (u?.value) {
135
+ u.value.set(first);
136
+ }
137
+ }
126
138
  }
127
139
  setFormation(name) {
128
140
  this.field.setFormation(name);
@@ -153,6 +165,18 @@ export class FieldLayer {
153
165
  setQualityTier(tier) {
154
166
  this.field.setQualityTier(tier);
155
167
  }
168
+ /** the field's current runtime policy (frozen copy). */
169
+ get policy() {
170
+ return this.field.policy;
171
+ }
172
+ /** replace the runtime field policy live. */
173
+ setPolicy(policy) {
174
+ this.field.setPolicy(policy);
175
+ }
176
+ /** derive a scoped, read-only agent view over this field (see FieldHandle.forAgent). */
177
+ forAgent(opts) {
178
+ return this.field.forAgent(opts);
179
+ }
156
180
  setRender(mode) {
157
181
  this.field.setRender(mode);
158
182
  }
@@ -230,6 +254,14 @@ export class FieldLayer {
230
254
  grid(name) {
231
255
  return this.field.grid(name);
232
256
  }
257
+ /** EXPERIMENTAL: deposit source-tagged, decaying focus onto a body by identity (the write side). */
258
+ focus(target, input) {
259
+ this.field.focus(target, input);
260
+ }
261
+ /** EXPERIMENTAL: read the current-focus digest (the ranked, thresholded sharp tip). */
262
+ focusState(opts) {
263
+ return this.field.focusState(opts);
264
+ }
233
265
  /** relate two programmatic bodies (the `FieldHandle.addEdge` form) — delegated to the engine. */
234
266
  addEdge(a, b, opts) {
235
267
  return this.field.addEdge(a, b, opts);
package/dist/layer.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,16 @@
2
2
  * Native 3D field visuals — the field as geometry, not particles. Because the engine is queryable at
3
3
  * any point (`FieldHandle.sample`), you can build visuals the 2D canvas can't: an instanced arrow
4
4
  * **vector field** and **streamline tubes** that trace the flow through the scene. Both read the live
5
- * field each `update()`, mapped through the same `FieldProjection` the swarm and bodies use, so they
6
- * register exactly.
5
+ * field on `update()`, mapped through the same `FieldProjection` the swarm and bodies use, so they
6
+ * register exactly — the fixed `z` each visual takes is an OFFSET off the projected field plane, so a
7
+ * `VolumeProjection` (centered or not) places them where the plane actually sits.
8
+ *
9
+ * Lifecycle discipline (the #921 pool model): both visuals are safe to `update()` every frame — the
10
+ * arrow grid writes one persistent `InstancedMesh` in place, and the tubes reuse a pooled set of
11
+ * `Mesh`es (hidden, not removed, when a line stalls), disposing only the `TubeGeometry` each retrace
12
+ * replaces. Re-sampling runs on an `interval` cadence (the repo's compute-vs-draw doctrine: body
13
+ * positions only change on the engine's measure cadence, so tracing more often buys nothing), while
14
+ * the scene keeps drawing the cached geometry every frame. `dispose()` frees everything.
7
15
  *
8
16
  * The tracing/sampling core is pure (no WebGL) and unit-tested; only the geometry needs a renderer.
9
17
  */
@@ -41,15 +49,22 @@ export interface VectorFieldOptions {
41
49
  step?: number;
42
50
  /** longest arrow in world units, at the peak sampled magnitude (default 0.4). */
43
51
  maxLength?: number;
44
- /** arrow color (default a field blue). */
52
+ /** arrow color at low magnitude (default a field blue). */
45
53
  color?: string;
46
- /** world-z the arrows sit at (default 0.02, just off the plane). */
54
+ /** arrow color at peak magnitude — each arrow lerps `color → hotColor` by its relative strength,
55
+ * so magnitude reads in hue as well as length (default white-hot). */
56
+ hotColor?: string;
57
+ /** world-z OFFSET off the projected field plane (default 0.02, just in front of it). */
47
58
  z?: number;
59
+ /** re-sample the field every Nth `update()` call (default 1 — every call; the grid sweep is
60
+ * cheap). Raise it to put sampling on a cadence while the scene draws the cache every frame. */
61
+ interval?: number;
48
62
  }
49
63
  export interface FieldVisual {
50
64
  /** add this to your scene. */
51
65
  readonly object: Group;
52
- /** re-sample the live field and refresh the geometry — call when the field changed. */
66
+ /** re-sample the live field on the configured `interval` cadence and refresh the geometry —
67
+ * safe to call every frame (off-cadence calls return without touching the field). */
53
68
  update(): void;
54
69
  /** release GPU resources. */
55
70
  dispose(): void;
@@ -73,9 +88,16 @@ export interface StreamlineTubesOptions {
73
88
  radius?: number;
74
89
  /** tube color (default a field blue). */
75
90
  color?: string;
76
- /** world-z the tubes sit at (default 0.02). */
91
+ /** world-z OFFSET off the projected field plane (default 0.02). */
77
92
  z?: number;
93
+ /** re-trace the field every Nth `update()` call (default 6 — the engine's measure cadence; body
94
+ * positions only change that often, so tracing per frame buys nothing). Set 1 to retrace on
95
+ * every call. Off-cadence calls keep drawing the cached tubes. */
96
+ interval?: number;
78
97
  }
79
- /** Flow lines traced through the field, rendered as tubes — the field's structure as geometry. */
98
+ /** Flow lines traced through the field, rendered as tubes — the field's structure as geometry.
99
+ * Tube meshes are POOLED: a retrace reuses each `Mesh` (swapping in the fresh `TubeGeometry` and
100
+ * disposing the one it replaces) and hides — never removes — the tail when fewer lines survive,
101
+ * so a steady field allocates no new scene objects. */
80
102
  export declare function streamlineTubes(field: FieldSampler, opts: StreamlineTubesOptions): FieldVisual;
81
103
  //# sourceMappingURL=samplers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"samplers.d.ts","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,EAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAU5B;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,uFAAuF;IACvF,MAAM,IAAI,IAAI,CAAC;IACf,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAoEtF;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,GAAG,WAAW,CAuC9F"}
1
+ {"version":3,"file":"samplers.d.ts","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAIL,KAAK,EAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AASD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAU5B;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;2EACuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;qGACiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB;0FACsF;IACtF,MAAM,IAAI,IAAI,CAAC;IACf,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAiFtF;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;uEAEmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;wDAGwD;AACxD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,GAAG,WAAW,CAyE9F"}
package/dist/samplers.js CHANGED
@@ -2,8 +2,16 @@
2
2
  * Native 3D field visuals — the field as geometry, not particles. Because the engine is queryable at
3
3
  * any point (`FieldHandle.sample`), you can build visuals the 2D canvas can't: an instanced arrow
4
4
  * **vector field** and **streamline tubes** that trace the flow through the scene. Both read the live
5
- * field each `update()`, mapped through the same `FieldProjection` the swarm and bodies use, so they
6
- * register exactly.
5
+ * field on `update()`, mapped through the same `FieldProjection` the swarm and bodies use, so they
6
+ * register exactly — the fixed `z` each visual takes is an OFFSET off the projected field plane, so a
7
+ * `VolumeProjection` (centered or not) places them where the plane actually sits.
8
+ *
9
+ * Lifecycle discipline (the #921 pool model): both visuals are safe to `update()` every frame — the
10
+ * arrow grid writes one persistent `InstancedMesh` in place, and the tubes reuse a pooled set of
11
+ * `Mesh`es (hidden, not removed, when a line stalls), disposing only the `TubeGeometry` each retrace
12
+ * replaces. Re-sampling runs on an `interval` cadence (the repo's compute-vs-draw doctrine: body
13
+ * positions only change on the engine's measure cadence, so tracing more often buys nothing), while
14
+ * the scene keeps drawing the cached geometry every frame. `dispose()` frees everything.
7
15
  *
8
16
  * The tracing/sampling core is pure (no WebGL) and unit-tested; only the geometry needs a renderer.
9
17
  */
@@ -13,6 +21,7 @@ const _pos = new Vector3();
13
21
  const _quat = new Quaternion();
14
22
  const _scl = new Vector3();
15
23
  const _mat = new Matrix4();
24
+ const _col = new Color();
16
25
  const _zAxis = new Vector3(0, 0, 1);
17
26
  /**
18
27
  * Trace one streamline from a seed, integrating the field direction. Pure (field-pixel space) —
@@ -32,7 +41,8 @@ export function traceStreamline(field, seed, opts) {
32
41
  }
33
42
  /** An instanced grid of arrows showing the field direction + magnitude across the plane. */
34
43
  export function vectorField(field, opts) {
35
- const { projection, step = 64, maxLength = 0.4, color = '#7cc0ff', z = 0.02 } = opts;
44
+ const { projection, step = 64, maxLength = 0.4, color = '#7cc0ff', hotColor = '#ffffff', z = 0.02 } = opts;
45
+ const every = Math.max(1, Math.round(opts.interval ?? 1));
36
46
  const { width, height } = projection.size();
37
47
  const cols = Math.max(1, Math.floor(width / step));
38
48
  const rows = Math.max(1, Math.floor(height / step));
@@ -41,9 +51,13 @@ export function vectorField(field, opts) {
41
51
  const geo = new ConeGeometry(0.16, 1, 6);
42
52
  geo.rotateZ(-Math.PI / 2);
43
53
  geo.translate(0.5, 0, 0);
44
- const material = new MeshBasicMaterial({ color: new Color(color), transparent: true, opacity: 0.85 });
54
+ // the material stays white; each arrow's tint lives in its INSTANCE color (cold→hot by magnitude),
55
+ // and instance colors multiply the material color.
56
+ const material = new MeshBasicMaterial({ transparent: true, opacity: 0.85 });
45
57
  const mesh = new InstancedMesh(geo, material, count);
46
58
  mesh.frustumCulled = false;
59
+ const cold = new Color(color);
60
+ const hot = new Color(hotColor);
47
61
  const group = new Group();
48
62
  group.add(mesh);
49
63
  // persistent per-cell sample scratch (reused every update — no per-call array allocation).
@@ -55,7 +69,8 @@ export function vectorField(field, opts) {
55
69
  // shifts the peak frame to frame. Ease the peak up fast so a real spike normalizes promptly, and
56
70
  // down slowly so the field reads as a calm pulse rather than a flicker.
57
71
  let peak = 1e-6;
58
- const update = () => {
72
+ let frame = 0;
73
+ const resample = () => {
59
74
  let frameMax = 1e-6;
60
75
  for (let r = 0; r < rows; r++) {
61
76
  for (let c = 0; c < cols; c++) {
@@ -74,7 +89,7 @@ export function vectorField(field, opts) {
74
89
  const px = ((i % cols) + 0.5) * step;
75
90
  const py = (Math.floor(i / cols) + 0.5) * step;
76
91
  projection.toWorld(px, py, 0, 0, 0, _pos);
77
- _pos.z = z;
92
+ _pos.z += z; // offset OFF the projected plane (not an absolute world z) so volumes register
78
93
  const rel = Math.sqrt(Math.hypot(vx[i], vy[i]) / max); // sqrt compression so weak arrows read
79
94
  // field-y is down → world-y up, so the world direction is (vx, -vy)
80
95
  const angle = Math.atan2(-vy[i], vx[i]);
@@ -83,60 +98,106 @@ export function vectorField(field, opts) {
83
98
  _scl.set(len, len, len);
84
99
  _mat.compose(_pos, _quat, _scl);
85
100
  mesh.setMatrixAt(i, _mat);
101
+ mesh.setColorAt(i, _col.copy(cold).lerp(hot, Math.min(1, rel)));
86
102
  }
87
103
  mesh.instanceMatrix.needsUpdate = true;
104
+ if (mesh.instanceColor)
105
+ mesh.instanceColor.needsUpdate = true;
106
+ };
107
+ const update = () => {
108
+ if (frame++ % every !== 0)
109
+ return; // off-cadence: keep drawing the cached grid
110
+ resample();
88
111
  };
89
- update();
112
+ update(); // build at construction (consumes cadence frame 0)
90
113
  return {
91
114
  object: group,
92
115
  update,
93
116
  dispose: () => {
94
117
  geo.dispose();
95
118
  material.dispose();
119
+ mesh.dispose(); // frees the instanceMatrix/instanceColor GPU attributes
96
120
  },
97
121
  };
98
122
  }
99
- /** Flow lines traced through the field, rendered as tubes — the field's structure as geometry. */
123
+ /** Flow lines traced through the field, rendered as tubes — the field's structure as geometry.
124
+ * Tube meshes are POOLED: a retrace reuses each `Mesh` (swapping in the fresh `TubeGeometry` and
125
+ * disposing the one it replaces) and hides — never removes — the tail when fewer lines survive,
126
+ * so a steady field allocates no new scene objects. */
100
127
  export function streamlineTubes(field, opts) {
101
128
  const { projection, step = 120, maxSteps = 80, stepLen = 8, radius = 0.03, color = '#9fd4ff', z = 0.02 } = opts;
129
+ const every = Math.max(1, Math.round(opts.interval ?? 6));
102
130
  const { width, height } = projection.size();
103
131
  const material = new MeshBasicMaterial({ color: new Color(color), transparent: true, opacity: 0.7 });
104
132
  const group = new Group();
105
- const seedPoints = () => {
106
- if (opts.seeds)
107
- return opts.seeds;
108
- const out = [];
133
+ // seeds are fixed for the visual's lifetime (the projection's size is too) — compute once.
134
+ const seeds = opts.seeds ?? [];
135
+ if (!opts.seeds) {
109
136
  for (let y = step / 2; y < height; y += step)
110
137
  for (let x = step / 2; x < width; x += step)
111
- out.push({ x, y });
112
- return out;
138
+ seeds.push({ x, y });
139
+ }
140
+ // Mesh pool + cursor (the #921 sprite-pool model): retraces reuse the pooled meshes in order,
141
+ // growing only when a retrace yields more lines than ever before; the unused tail is hidden.
142
+ const pool = [];
143
+ let cursor = 0;
144
+ const acquireTube = (geometry) => {
145
+ let mesh = pool[cursor];
146
+ if (!mesh) {
147
+ mesh = new Mesh(geometry, material);
148
+ mesh.frustumCulled = false; // lines span the plane; skip per-tube bounds recompute
149
+ pool[cursor] = mesh;
150
+ group.add(mesh);
151
+ }
152
+ else {
153
+ mesh.geometry.dispose(); // a TubeGeometry can't be rewritten in place — swap, free the old
154
+ mesh.geometry = geometry;
155
+ mesh.visible = true;
156
+ }
157
+ cursor++;
113
158
  };
114
- const update = () => {
115
- for (const child of group.children)
116
- child.geometry.dispose();
117
- group.clear();
118
- for (const seed of seedPoints()) {
159
+ // persistent path scratch — the world-space Vector3s are reused across every line and retrace.
160
+ // TubeGeometry BAKES the curve into vertices at construction, so mutating these afterwards only
161
+ // touches `geometry.parameters.path` (serialization metadata, never re-read for rendering).
162
+ const scratch = [];
163
+ const pathInto = (pts) => {
164
+ while (scratch.length < pts.length)
165
+ scratch.push(new Vector3());
166
+ for (let i = 0; i < pts.length; i++) {
167
+ projection.toWorld(pts[i].x, pts[i].y, 0, 0, 0, scratch[i]);
168
+ scratch[i].z += z; // offset OFF the projected plane (not an absolute world z)
169
+ }
170
+ return scratch.slice(0, pts.length); // a small per-line array of REUSED vectors
171
+ };
172
+ let frame = 0;
173
+ const resample = () => {
174
+ cursor = 0;
175
+ for (const seed of seeds) {
119
176
  const pts = traceStreamline(field, seed, { width, height, maxSteps, stepLen });
120
177
  if (pts.length < 2)
121
- continue;
122
- const path = pts.map((p) => {
123
- const w = projection.toWorld(p.x, p.y, 0, 0, 0, new Vector3());
124
- w.z = z;
125
- return w;
126
- });
127
- const tube = new TubeGeometry(new CatmullRomCurve3(path), Math.max(1, path.length - 1), radius, 6, false);
128
- group.add(new Mesh(tube, material));
178
+ continue; // stalled seed — its pooled mesh (if any) is hidden below
179
+ const path = pathInto(pts);
180
+ acquireTube(new TubeGeometry(new CatmullRomCurve3(path), Math.max(1, path.length - 1), radius, 6, false));
129
181
  }
182
+ // hide the tail the retrace didn't reach — pooled for the next retrace, not removed.
183
+ for (let i = cursor; i < pool.length && pool[i].visible; i++)
184
+ pool[i].visible = false;
185
+ };
186
+ const update = () => {
187
+ if (frame++ % every !== 0)
188
+ return; // off-cadence: the cached tubes keep drawing
189
+ resample();
130
190
  };
131
- update();
191
+ update(); // build at construction (consumes cadence frame 0)
132
192
  return {
133
193
  object: group,
134
194
  update,
135
195
  dispose: () => {
136
- for (const child of group.children)
137
- child.geometry.dispose();
138
- group.clear();
196
+ for (const mesh of pool)
197
+ mesh.geometry.dispose();
139
198
  material.dispose();
199
+ group.clear();
200
+ pool.length = 0;
140
201
  },
141
202
  };
142
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"samplers.js","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"samplers.js","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-engine/three",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Three.js authoring surface for Fundamental — run the reciprocal field engine headless and render its swarm as a THREE.Points layer (the particle bridge), plus threeHost() and threeBackend() (a RenderBackend) for binding the engine to a WebGL scene.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,9 +49,10 @@
49
49
  "three": ">=0.147.0"
50
50
  },
51
51
  "dependencies": {
52
- "@fundamental-engine/core": "0.9.2"
52
+ "@fundamental-engine/core": "0.9.4"
53
53
  },
54
54
  "devDependencies": {
55
+ "@types/node": "^22.0.0",
55
56
  "three": "^0.169.0",
56
57
  "@types/three": "^0.169.0",
57
58
  "typescript": "^5.9.3"