@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.
- package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +11 -1
- package/dist/animationsV2/animationLive.d.ts +7 -0
- package/dist/animationsV2/animationLive.d.ts.map +1 -0
- package/dist/animationsV2/animationLive.js +26 -0
- package/dist/animationsV2/appliers.d.ts +8 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +61 -0
- package/dist/animationsV2/index.d.ts +1 -0
- package/dist/animationsV2/index.d.ts.map +1 -1
- package/dist/animationsV2/index.js +1 -0
- package/dist/components/AnimatedObject.d.ts.map +1 -1
- package/dist/components/AnimatedObject.js +2 -0
- package/dist/components/CameraController.d.ts.map +1 -1
- package/dist/components/CameraController.js +9 -0
- package/dist/components/CreatedObject.d.ts.map +1 -1
- package/dist/components/CreatedObject.js +4 -1
- package/dist/components/GroupMaterialContext.d.ts +25 -0
- package/dist/components/GroupMaterialContext.d.ts.map +1 -0
- package/dist/components/GroupMaterialContext.js +21 -0
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +13 -2
- package/dist/components/ObjectsRenderer.d.ts.map +1 -1
- package/dist/components/ObjectsRenderer.js +26 -19
- package/dist/components/SceneBuilder.d.ts.map +1 -1
- package/dist/components/SceneBuilder.js +7 -4
- package/dist/components/land/LandPatch.d.ts.map +1 -1
- package/dist/components/land/LandPatch.js +15 -1
- package/dist/hooks/useContinuousEffects.d.ts.map +1 -1
- package/dist/hooks/useContinuousEffects.js +24 -3
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
- package/dist/hooks/useMaterialApplication.js +2 -1
- package/dist/hooks/useMaterialUniforms.d.ts +2 -8
- package/dist/hooks/useMaterialUniforms.d.ts.map +1 -1
- package/dist/hooks/useMaterialUniforms.js +18 -6
- package/dist/hooks/useOrbitTargetFollow.d.ts.map +1 -1
- package/dist/hooks/useOrbitTargetFollow.js +6 -4
- package/dist/operations/bake.d.ts +36 -0
- package/dist/operations/bake.d.ts.map +1 -0
- package/dist/operations/bake.js +113 -0
- package/dist/operations/catalogue/physicalHeld.d.ts.map +1 -1
- package/dist/operations/catalogue/physicalHeld.js +6 -0
- package/dist/operations/catalogue/shaderLayers.js +2 -2
- package/dist/operations/catalogue/warmup.d.ts +23 -1
- package/dist/operations/catalogue/warmup.d.ts.map +1 -1
- package/dist/operations/catalogue/warmup.js +200 -12
- package/dist/operations/index.d.ts +3 -1
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +3 -1
- package/dist/operations/objectEffects.d.ts +15 -1
- package/dist/operations/objectEffects.d.ts.map +1 -1
- package/dist/operations/objectEffects.js +49 -1
- package/dist/operations/runtime.d.ts +17 -9
- package/dist/operations/runtime.d.ts.map +1 -1
- package/dist/operations/runtime.js +71 -18
- package/dist/operations/types.d.ts +5 -0
- package/dist/operations/types.d.ts.map +1 -1
- package/dist/triggers/readiness.d.ts +2 -0
- package/dist/triggers/readiness.d.ts.map +1 -1
- package/dist/triggers/readiness.js +28 -3
- package/dist/utils/stallLog.d.ts +4 -0
- package/dist/utils/stallLog.d.ts.map +1 -0
- package/dist/utils/stallLog.js +88 -0
- 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":"
|
|
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
|
|
8
|
-
//
|
|
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 @@
|
|
|
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.
|
|
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.
|
|
42
|
+
"@3driseai/3drise-core": "^1.0.26"
|
|
43
43
|
}
|
|
44
44
|
}
|