@3driseai/3drise-viewer 0.1.32 → 0.1.34

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 (64) hide show
  1. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
  2. package/dist/animationsV2/ClipsRuntime.js +11 -1
  3. package/dist/animationsV2/animationLive.d.ts +7 -0
  4. package/dist/animationsV2/animationLive.d.ts.map +1 -0
  5. package/dist/animationsV2/animationLive.js +26 -0
  6. package/dist/animationsV2/appliers.d.ts +8 -0
  7. package/dist/animationsV2/appliers.d.ts.map +1 -1
  8. package/dist/animationsV2/appliers.js +61 -0
  9. package/dist/animationsV2/index.d.ts +1 -0
  10. package/dist/animationsV2/index.d.ts.map +1 -1
  11. package/dist/animationsV2/index.js +1 -0
  12. package/dist/components/AnimatedObject.d.ts.map +1 -1
  13. package/dist/components/AnimatedObject.js +2 -0
  14. package/dist/components/CameraController.d.ts.map +1 -1
  15. package/dist/components/CameraController.js +9 -0
  16. package/dist/components/CreatedObject.d.ts.map +1 -1
  17. package/dist/components/CreatedObject.js +4 -1
  18. package/dist/components/GroupMaterialContext.d.ts +25 -0
  19. package/dist/components/GroupMaterialContext.d.ts.map +1 -0
  20. package/dist/components/GroupMaterialContext.js +21 -0
  21. package/dist/components/ObjectNode.d.ts.map +1 -1
  22. package/dist/components/ObjectNode.js +13 -2
  23. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  24. package/dist/components/ObjectsRenderer.js +26 -19
  25. package/dist/components/SceneBuilder.d.ts.map +1 -1
  26. package/dist/components/SceneBuilder.js +7 -4
  27. package/dist/components/land/LandPatch.d.ts.map +1 -1
  28. package/dist/components/land/LandPatch.js +15 -1
  29. package/dist/hooks/useContinuousEffects.d.ts.map +1 -1
  30. package/dist/hooks/useContinuousEffects.js +24 -3
  31. package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
  32. package/dist/hooks/useMaterialApplication.js +2 -1
  33. package/dist/hooks/useMaterialUniforms.d.ts +2 -8
  34. package/dist/hooks/useMaterialUniforms.d.ts.map +1 -1
  35. package/dist/hooks/useMaterialUniforms.js +18 -6
  36. package/dist/hooks/useOrbitTargetFollow.d.ts.map +1 -1
  37. package/dist/hooks/useOrbitTargetFollow.js +6 -4
  38. package/dist/operations/bake.d.ts +36 -0
  39. package/dist/operations/bake.d.ts.map +1 -0
  40. package/dist/operations/bake.js +113 -0
  41. package/dist/operations/catalogue/physicalHeld.d.ts.map +1 -1
  42. package/dist/operations/catalogue/physicalHeld.js +6 -0
  43. package/dist/operations/catalogue/shaderLayers.js +2 -2
  44. package/dist/operations/catalogue/warmup.d.ts +23 -1
  45. package/dist/operations/catalogue/warmup.d.ts.map +1 -1
  46. package/dist/operations/catalogue/warmup.js +200 -12
  47. package/dist/operations/index.d.ts +3 -1
  48. package/dist/operations/index.d.ts.map +1 -1
  49. package/dist/operations/index.js +3 -1
  50. package/dist/operations/objectEffects.d.ts +15 -1
  51. package/dist/operations/objectEffects.d.ts.map +1 -1
  52. package/dist/operations/objectEffects.js +49 -1
  53. package/dist/operations/runtime.d.ts +17 -9
  54. package/dist/operations/runtime.d.ts.map +1 -1
  55. package/dist/operations/runtime.js +71 -18
  56. package/dist/operations/types.d.ts +5 -0
  57. package/dist/operations/types.d.ts.map +1 -1
  58. package/dist/triggers/readiness.d.ts +2 -0
  59. package/dist/triggers/readiness.d.ts.map +1 -1
  60. package/dist/triggers/readiness.js +28 -3
  61. package/dist/utils/stallLog.d.ts +4 -0
  62. package/dist/utils/stallLog.d.ts.map +1 -0
  63. package/dist/utils/stallLog.js +88 -0
  64. package/package.json +2 -2
@@ -131,6 +131,11 @@ export interface OperationDefinition {
131
131
  apply: (target: Object3D, params: OperationParams, ctx: OperationContext) => void | Promise<void>;
132
132
  /** No revert = one-way (applies only). */
133
133
  revert?: (target: Object3D, params: OperationParams, ctx: OperationContext) => void | Promise<void>;
134
+ /**
135
+ * A parameter changed while it runs (a timeline track easing its speed): take the new params
136
+ * now, without replaying anything. Absent = the change is picked up on its next pass.
137
+ */
138
+ live?: (target: Object3D, params: OperationParams) => void;
134
139
  /**
135
140
  * A motion that repeats for as long as the effect is on (float, sway, rotate…).
136
141
  * Played as an object effect it follows the same playback as everything else:
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/operations/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/operations/types.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ declare class SceneReadiness {
6
6
  private loaded;
7
7
  private failed;
8
8
  private compile;
9
+ private bake;
9
10
  private waiters;
10
11
  private listeners;
11
12
  private timer;
@@ -18,6 +19,7 @@ declare class SceneReadiness {
18
19
  /** A published scene starts: wait for these models, then compile, then one frame. */
19
20
  begin(modelIds: string[], opts?: {
20
21
  compile?: () => Promise<unknown>;
22
+ bake?: () => Promise<unknown>;
21
23
  }): void;
22
24
  /** A model's Object3D is in the scene. */
23
25
  report(id: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../src/triggers/readiness.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAMhE,cAAM,cAAc;IAChB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAqB;IACrC,oFAAoF;IACpF,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEvB,SAAS,IAAI,oBAAoB;IACjC,kEAAkE;IAClE,OAAO,IAAI,OAAO;IAElB,qFAAqF;IACrF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAAO,GAAG,IAAI;IAmBhF,0CAA0C;IAC1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,wEAAwE;IACxE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAOxC,wEAAwE;IACxE,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAMrC,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,6DAA6D;IAC7D,KAAK,IAAI,IAAI;IAab,OAAO,CAAC,KAAK;YAMC,MAAM;IA2BpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;CAGf;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../src/triggers/readiness.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAOhE,cAAM,cAAc;IAChB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAqB;IACrC,oFAAoF;IACpF,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,IAAI,CAAyC;IACrD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEvB,SAAS,IAAI,oBAAoB;IACjC,kEAAkE;IAClE,OAAO,IAAI,OAAO;IAElB,qFAAqF;IACrF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAAO,GAAG,IAAI;IAoB/G,0CAA0C;IAC1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,wEAAwE;IACxE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAOxC,wEAAwE;IACxE,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAMrC,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,6DAA6D;IAC7D,KAAK,IAAI,IAAI;IAcb,OAAO,CAAC,KAAK;YAMC,MAAM;IAwCpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;CAGf;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
@@ -4,8 +4,11 @@
4
4
  //
5
5
  // A published scene (SceneBuilder) is READY when:
6
6
  // 1. every model it holds has loaded (ModelPrimitive reports it) or failed (ModelBoundary), and
7
- // 2. the scene's shaders are compiled (renderer.compileAsync), and
8
- // 3. one frame has rendered.
7
+ // 2. the scene's shaders are compiled (renderer.compileAsync, as the frame draws it) and its
8
+ // textures uploaded,
9
+ // 3. the project is baked — every effect it can play compiled and prepared (operations/bake),
10
+ // so no first play stalls — and
11
+ // 4. one frame has rendered.
9
12
  // Only then do autoplay sequences start, object effects start, onSceneReady fires and the
10
13
  // loading cover lifts. A model that never reports doesn't hold the scene forever: after
11
14
  // TIMEOUT_MS it goes ready anyway and the missing ids are logged.
@@ -21,6 +24,7 @@
21
24
  import { useSyncExternalStore } from 'react';
22
25
  const TIMEOUT_MS = 15000;
23
26
  const COMPILE_TIMEOUT_MS = 5000;
27
+ const BAKE_TIMEOUT_MS = 20000;
24
28
  const log = (...a) => console.info('[3drise] scene', ...a);
25
29
  class SceneReadiness {
26
30
  status = 'idle';
@@ -29,6 +33,7 @@ class SceneReadiness {
29
33
  loaded = new Set();
30
34
  failed = new Set();
31
35
  compile = null;
36
+ bake = null;
32
37
  waiters = [];
33
38
  listeners = new Set();
34
39
  timer = null;
@@ -46,6 +51,7 @@ class SceneReadiness {
46
51
  this.finishing = false;
47
52
  this.expected = new Set(modelIds.filter(Boolean));
48
53
  this.compile = opts.compile ?? null;
54
+ this.bake = opts.bake ?? null;
49
55
  this.startedAt = performance.now();
50
56
  this.emit();
51
57
  const gen = this.generation;
@@ -96,6 +102,7 @@ class SceneReadiness {
96
102
  this.loaded.clear();
97
103
  this.failed.clear();
98
104
  this.compile = null;
105
+ this.bake = null;
99
106
  this.waiters = [];
100
107
  this.emit();
101
108
  }
@@ -122,13 +129,31 @@ class SceneReadiness {
122
129
  console.warn('[3drise] scene: shader compile failed, going on', e);
123
130
  }
124
131
  }
132
+ const bakeAt = performance.now();
133
+ if (this.bake && gen === this.generation) {
134
+ let timer;
135
+ try {
136
+ const timedOut = await Promise.race([
137
+ this.bake().then(() => false),
138
+ new Promise(r => { timer = setTimeout(() => r(true), BAKE_TIMEOUT_MS); }),
139
+ ]);
140
+ if (timedOut)
141
+ console.warn(`[3drise] scene: baking effects took over ${BAKE_TIMEOUT_MS / 1000}s — going ready, the rest bakes on`);
142
+ }
143
+ catch (e) {
144
+ console.warn('[3drise] scene: baking effects failed, going on', e);
145
+ }
146
+ finally {
147
+ clearTimeout(timer);
148
+ }
149
+ }
125
150
  // one rendered frame, so what is shown is what runs
126
151
  await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(() => r())));
127
152
  if (gen !== this.generation)
128
153
  return; // reset / begun again meanwhile
129
154
  this.status = 'ready';
130
155
  const t = (n) => `${Math.round(n - this.startedAt)}ms`;
131
- log(`ready in ${t(performance.now())} (models ${t(modelsAt)}, ${[...this.expected].filter(id => this.loaded.has(id)).length}/${this.expected.size} loaded${this.failed.size ? `, ${this.failed.size} failed` : ''})`);
156
+ log(`ready in ${t(performance.now())} (models ${t(modelsAt)}, compile ${Math.round(bakeAt - modelsAt)}ms, bake ${Math.round(performance.now() - bakeAt)}ms, ${[...this.expected].filter(id => this.loaded.has(id)).length}/${this.expected.size} loaded${this.failed.size ? `, ${this.failed.size} failed` : ''})`);
132
157
  this.emit();
133
158
  const run = this.waiters;
134
159
  this.waiters = [];
@@ -0,0 +1,4 @@
1
+ export declare function stallLogEnabled(): boolean;
2
+ /** Install on the scene's renderer, when the dev flag is on. Idempotent. */
3
+ export declare function installStallLog(renderer: any): void;
4
+ //# sourceMappingURL=stallLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stallLog.d.ts","sourceRoot":"","sources":["../../src/utils/stallLog.ts"],"names":[],"mappings":"AAuBA,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAgDnD"}
@@ -0,0 +1,88 @@
1
+ // =============================================================================
2
+ // Stall log (dev) — which frames froze, and why.
3
+ // =============================================================================
4
+ //
5
+ // Switch it on in the browser console: localStorage.setItem('3drise:stalls', '1') (reload)
6
+ // Off: localStorage.removeItem('3drise:stalls')
7
+ //
8
+ // Every frame slower than STALL_MS is logged with what happened in it:
9
+ // compiles shader programs linked INSIDE the frame (three compiling on the spot —
10
+ // what the warm-ups exist to prevent; the material names say whose)
11
+ // uploads textures uploaded inside the frame (an object drawn for the first time)
12
+ // work effect applies / warm-ups that ran on the main thread since the last
13
+ // frame, with their milliseconds (runtime.noteWork)
14
+ // Background compiles (warm-ups) are counted too, so a stall with none of the above is
15
+ // the GPU / driver itself.
16
+ //
17
+ import { setWorkListener } from '../operations/runtime.js';
18
+ const STALL_MS = 50;
19
+ const FLAG = '3drise:stalls';
20
+ let installed = false;
21
+ export function stallLogEnabled() {
22
+ try {
23
+ return typeof window !== 'undefined' && window.localStorage?.getItem(FLAG) === '1';
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ /** Install on the scene's renderer, when the dev flag is on. Idempotent. */
30
+ export function installStallLog(renderer) {
31
+ if (installed || !renderer || !stallLogEnabled())
32
+ return;
33
+ const gl = renderer.getContext?.();
34
+ if (!gl)
35
+ return;
36
+ installed = true;
37
+ let inFrame = false;
38
+ let frame = { compiles: 0, uploads: 0, bgCompiles: 0, work: [], programs: new Set() };
39
+ const reset = () => { frame = { compiles: 0, uploads: 0, bgCompiles: 0, work: [], programs: new Set() }; };
40
+ const link = gl.linkProgram.bind(gl);
41
+ gl.linkProgram = (p) => { if (inFrame)
42
+ frame.compiles++;
43
+ else
44
+ frame.bgCompiles++; return link(p); };
45
+ for (const fn of ['texImage2D', 'texSubImage2D', 'texStorage2D', 'compressedTexImage2D']) {
46
+ const o = gl[fn]?.bind(gl);
47
+ if (o)
48
+ gl[fn] = (...a) => { if (inFrame)
49
+ frame.uploads++; return o(...a); };
50
+ }
51
+ // whose programs: three names a program after its material (name / type) when it builds it
52
+ const render = renderer.render.bind(renderer);
53
+ renderer.render = (scene, camera) => {
54
+ const outer = !inFrame;
55
+ inFrame = true;
56
+ const before = renderer.info?.programs?.length ?? 0;
57
+ try {
58
+ return render(scene, camera);
59
+ }
60
+ finally {
61
+ const after = renderer.info?.programs ?? [];
62
+ for (let i = before; i < after.length; i++)
63
+ frame.programs.add(String(after[i]?.name ?? '?'));
64
+ if (outer)
65
+ inFrame = false;
66
+ }
67
+ };
68
+ setWorkListener((label, ms) => { frame.work.push(`${label} ${Math.round(ms)}ms`); });
69
+ let last = performance.now();
70
+ const tick = () => {
71
+ const now = performance.now();
72
+ const dt = now - last;
73
+ last = now;
74
+ if (dt > STALL_MS) {
75
+ const parts = [
76
+ frame.compiles ? `${frame.compiles} compile(s) in the frame${frame.programs.size ? ` [${[...frame.programs].join(', ')}]` : ''}` : '',
77
+ frame.uploads ? `${frame.uploads} texture upload(s) in the frame` : '',
78
+ frame.work.length ? `work: ${frame.work.join(', ')}` : '',
79
+ frame.bgCompiles ? `${frame.bgCompiles} background compile(s)` : '',
80
+ ].filter(Boolean);
81
+ console.warn(`[3drise] stall ${Math.round(dt)}ms — ${parts.length ? parts.join(' · ') : 'nothing recorded (GPU / driver, GC, or other main-thread work)'}`);
82
+ }
83
+ reset();
84
+ requestAnimationFrame(tick);
85
+ };
86
+ requestAnimationFrame(tick);
87
+ console.info('[3drise] stall log on (frames over %dms) — localStorage.removeItem(\'3drise:stalls\') to switch it off', STALL_MS);
88
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@3driseai/3drise-viewer",
3
- "version": "0.1.32",
3
+ "version": "0.1.34",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,6 +39,6 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@3driseai/3drise-common": "^1.0.1",
42
- "@3driseai/3drise-core": "^1.0.24"
42
+ "@3driseai/3drise-core": "^1.0.26"
43
43
  }
44
44
  }