@konitif/viewer-3d 0.284.1
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/LICENSE.md +21 -0
- package/README.md +34 -0
- package/dist/balanceFootprintDefinition.d.ts +7 -0
- package/dist/balanceFootprintDefinition.d.ts.map +1 -0
- package/dist/balanceFootprintDefinition.js +2 -0
- package/dist/balanceFootprintDefinition.js.map +1 -0
- package/dist/diagnosticContactDefinition.d.ts +7 -0
- package/dist/diagnosticContactDefinition.d.ts.map +1 -0
- package/dist/diagnosticContactDefinition.js +2 -0
- package/dist/diagnosticContactDefinition.js.map +1 -0
- package/dist/handTipDefinition.d.ts +13 -0
- package/dist/handTipDefinition.d.ts.map +1 -0
- package/dist/handTipDefinition.js +2 -0
- package/dist/handTipDefinition.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/jointHandleDefinition.d.ts +23 -0
- package/dist/jointHandleDefinition.d.ts.map +1 -0
- package/dist/jointHandleDefinition.js +2 -0
- package/dist/jointHandleDefinition.js.map +1 -0
- package/dist/ledPlacementDefinition.d.ts +38 -0
- package/dist/ledPlacementDefinition.d.ts.map +1 -0
- package/dist/ledPlacementDefinition.js +2 -0
- package/dist/ledPlacementDefinition.js.map +1 -0
- package/dist/ledReferenceFrame.d.ts +26 -0
- package/dist/ledReferenceFrame.d.ts.map +1 -0
- package/dist/ledReferenceFrame.js +2 -0
- package/dist/ledReferenceFrame.js.map +1 -0
- package/dist/ledRingCalibration.d.ts +22 -0
- package/dist/ledRingCalibration.d.ts.map +1 -0
- package/dist/ledRingCalibration.js +2 -0
- package/dist/ledRingCalibration.js.map +1 -0
- package/dist/renderer/AnimationLoop.d.ts +18 -0
- package/dist/renderer/AnimationLoop.d.ts.map +1 -0
- package/dist/renderer/AnimationLoop.js +39 -0
- package/dist/renderer/AnimationLoop.js.map +1 -0
- package/dist/renderer/CameraController.d.ts +154 -0
- package/dist/renderer/CameraController.d.ts.map +1 -0
- package/dist/renderer/CameraController.js +469 -0
- package/dist/renderer/CameraController.js.map +1 -0
- package/dist/renderer/NavigationPhysicsObservation.d.ts +25 -0
- package/dist/renderer/NavigationPhysicsObservation.d.ts.map +1 -0
- package/dist/renderer/NavigationPhysicsObservation.js +81 -0
- package/dist/renderer/NavigationPhysicsObservation.js.map +1 -0
- package/dist/renderer/ObservedRobotGroundingProjection.d.ts +206 -0
- package/dist/renderer/ObservedRobotGroundingProjection.d.ts.map +1 -0
- package/dist/renderer/ObservedRobotGroundingProjection.js +522 -0
- package/dist/renderer/ObservedRobotGroundingProjection.js.map +1 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.d.ts +71 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.d.ts.map +1 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.js +226 -0
- package/dist/renderer/ObservedRobotPresentationBuffer.js.map +1 -0
- package/dist/renderer/PerformanceMonitor.d.ts +38 -0
- package/dist/renderer/PerformanceMonitor.d.ts.map +1 -0
- package/dist/renderer/PerformanceMonitor.js +84 -0
- package/dist/renderer/PerformanceMonitor.js.map +1 -0
- package/dist/renderer/ProjectileInteraction.d.ts +57 -0
- package/dist/renderer/ProjectileInteraction.d.ts.map +1 -0
- package/dist/renderer/ProjectileInteraction.js +152 -0
- package/dist/renderer/ProjectileInteraction.js.map +1 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.d.ts +12 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.d.ts.map +1 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.js +23 -0
- package/dist/renderer/RobotComparisonVisibilityTransition.js.map +1 -0
- package/dist/renderer/RobotPoseTransition.d.ts +34 -0
- package/dist/renderer/RobotPoseTransition.d.ts.map +1 -0
- package/dist/renderer/RobotPoseTransition.js +66 -0
- package/dist/renderer/RobotPoseTransition.js.map +1 -0
- package/dist/renderer/RobotPostureCompensation.d.ts +31 -0
- package/dist/renderer/RobotPostureCompensation.d.ts.map +1 -0
- package/dist/renderer/RobotPostureCompensation.js +60 -0
- package/dist/renderer/RobotPostureCompensation.js.map +1 -0
- package/dist/renderer/SelectionController.d.ts +24 -0
- package/dist/renderer/SelectionController.d.ts.map +1 -0
- package/dist/renderer/SelectionController.js +68 -0
- package/dist/renderer/SelectionController.js.map +1 -0
- package/dist/renderer/TemporalProjectionModel.d.ts +71 -0
- package/dist/renderer/TemporalProjectionModel.d.ts.map +1 -0
- package/dist/renderer/TemporalProjectionModel.js +363 -0
- package/dist/renderer/TemporalProjectionModel.js.map +1 -0
- package/dist/renderer/Viewer3DRenderer.d.ts +1137 -0
- package/dist/renderer/Viewer3DRenderer.d.ts.map +1 -0
- package/dist/renderer/Viewer3DRenderer.js +10655 -0
- package/dist/renderer/Viewer3DRenderer.js.map +1 -0
- package/dist/renderer/ViewerExperimentCollector.d.ts +27 -0
- package/dist/renderer/ViewerExperimentCollector.d.ts.map +1 -0
- package/dist/renderer/ViewerExperimentCollector.js +2 -0
- package/dist/renderer/ViewerExperimentCollector.js.map +1 -0
- package/dist/renderer/ViewerExperimentPort.d.ts +19 -0
- package/dist/renderer/ViewerExperimentPort.d.ts.map +1 -0
- package/dist/renderer/ViewerExperimentPort.js +2 -0
- package/dist/renderer/ViewerExperimentPort.js.map +1 -0
- package/dist/renderer/ViewerFrameSignals.d.ts +13 -0
- package/dist/renderer/ViewerFrameSignals.d.ts.map +1 -0
- package/dist/renderer/ViewerFrameSignals.js +73 -0
- package/dist/renderer/ViewerFrameSignals.js.map +1 -0
- package/dist/renderer/ViewerHistoryData.d.ts +59 -0
- package/dist/renderer/ViewerHistoryData.d.ts.map +1 -0
- package/dist/renderer/ViewerHistoryData.js +2 -0
- package/dist/renderer/ViewerHistoryData.js.map +1 -0
- package/dist/renderer/ViewerHistoryPort.d.ts +15 -0
- package/dist/renderer/ViewerHistoryPort.d.ts.map +1 -0
- package/dist/renderer/ViewerHistoryPort.js +2 -0
- package/dist/renderer/ViewerHistoryPort.js.map +1 -0
- package/dist/renderer/ViewerIncarnationHealth.d.ts +14 -0
- package/dist/renderer/ViewerIncarnationHealth.d.ts.map +1 -0
- package/dist/renderer/ViewerIncarnationHealth.js +13 -0
- package/dist/renderer/ViewerIncarnationHealth.js.map +1 -0
- package/dist/renderer/ViewerInputBindings.d.ts +19 -0
- package/dist/renderer/ViewerInputBindings.d.ts.map +1 -0
- package/dist/renderer/ViewerInputBindings.js +44 -0
- package/dist/renderer/ViewerInputBindings.js.map +1 -0
- package/dist/renderer/ViewerMetadata.d.ts +11 -0
- package/dist/renderer/ViewerMetadata.d.ts.map +1 -0
- package/dist/renderer/ViewerMetadata.js +8 -0
- package/dist/renderer/ViewerMetadata.js.map +1 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts +29 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts.map +1 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.js +27 -0
- package/dist/renderer/ViewerPlaybackCompletionPolicy.js.map +1 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.d.ts +21 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.d.ts.map +1 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.js +134 -0
- package/dist/renderer/ViewerProjectileParticleRenderer.js.map +1 -0
- package/dist/renderer/ViewerResizePresentation.d.ts +16 -0
- package/dist/renderer/ViewerResizePresentation.d.ts.map +1 -0
- package/dist/renderer/ViewerResizePresentation.js +12 -0
- package/dist/renderer/ViewerResizePresentation.js.map +1 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts +34 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts.map +1 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js +130 -0
- package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js.map +1 -0
- package/dist/renderer/ViewerTemporalScheduler.d.ts +6 -0
- package/dist/renderer/ViewerTemporalScheduler.d.ts.map +1 -0
- package/dist/renderer/ViewerTemporalScheduler.js +12 -0
- package/dist/renderer/ViewerTemporalScheduler.js.map +1 -0
- package/dist/renderer/VisualGroundLayer.d.ts +110 -0
- package/dist/renderer/VisualGroundLayer.d.ts.map +1 -0
- package/dist/renderer/VisualGroundLayer.js +576 -0
- package/dist/renderer/VisualGroundLayer.js.map +1 -0
- package/dist/renderer/displayFrameRate.d.ts +5 -0
- package/dist/renderer/displayFrameRate.d.ts.map +1 -0
- package/dist/renderer/displayFrameRate.js +23 -0
- package/dist/renderer/displayFrameRate.js.map +1 -0
- package/dist/renderer/index.d.ts +20 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +18 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/physics/ViewerJointResolution.d.ts +19 -0
- package/dist/renderer/physics/ViewerJointResolution.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerJointResolution.js +24 -0
- package/dist/renderer/physics/ViewerJointResolution.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.d.ts +9 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.js +26 -0
- package/dist/renderer/physics/ViewerPhysicsFrame.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts +11 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.js +20 -0
- package/dist/renderer/physics/ViewerPhysicsJointMapping.js.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts +20 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts.map +1 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.js +49 -0
- package/dist/renderer/physics/ViewerPhysicsMetadata.js.map +1 -0
- package/dist/renderer/robotViewerMotion.d.ts +49 -0
- package/dist/renderer/robotViewerMotion.d.ts.map +1 -0
- package/dist/renderer/robotViewerMotion.js +253 -0
- package/dist/renderer/robotViewerMotion.js.map +1 -0
- package/dist/supportDefinition.d.ts +11 -0
- package/dist/supportDefinition.d.ts.map +1 -0
- package/dist/supportDefinition.js +2 -0
- package/dist/supportDefinition.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Color, DynamicDrawUsage, Euler, InstancedBufferAttribute, InstancedMesh, Matrix4, Quaternion, ShaderMaterial, SphereGeometry, Vector3 } from 'three';
|
|
2
|
+
const PHASE_COLORS = {
|
|
3
|
+
flight: '#ef4444',
|
|
4
|
+
'robot-contact': '#fde047',
|
|
5
|
+
'ground-contact': '#fb923c',
|
|
6
|
+
settled: '#a3e635',
|
|
7
|
+
fading: '#7f1d1d'
|
|
8
|
+
};
|
|
9
|
+
const HIDDEN_MATRIX = new Matrix4().makeScale(0, 0, 0);
|
|
10
|
+
const INSTANCE_SCALE = new Vector3(1, 1, 1);
|
|
11
|
+
export class ViewerProjectileParticleRenderer {
|
|
12
|
+
capacity;
|
|
13
|
+
mesh;
|
|
14
|
+
active;
|
|
15
|
+
phaseColor;
|
|
16
|
+
fadeStartedAt;
|
|
17
|
+
occupied;
|
|
18
|
+
matrix = new Matrix4();
|
|
19
|
+
euler = new Euler();
|
|
20
|
+
rotation = new Quaternion();
|
|
21
|
+
constructor(capacity, radiusMeters, fadeDurationSeconds) {
|
|
22
|
+
this.capacity = capacity;
|
|
23
|
+
const geometry = new SphereGeometry(radiusMeters, 18, 12);
|
|
24
|
+
this.active = new InstancedBufferAttribute(new Float32Array(capacity), 1);
|
|
25
|
+
this.phaseColor = new InstancedBufferAttribute(new Float32Array(capacity * 3), 3);
|
|
26
|
+
this.fadeStartedAt = new InstancedBufferAttribute(new Float32Array(capacity), 1);
|
|
27
|
+
this.active.setUsage(DynamicDrawUsage);
|
|
28
|
+
this.phaseColor.setUsage(DynamicDrawUsage);
|
|
29
|
+
this.fadeStartedAt.setUsage(DynamicDrawUsage);
|
|
30
|
+
geometry.setAttribute('instanceActive', this.active);
|
|
31
|
+
geometry.setAttribute('instancePhaseColor', this.phaseColor);
|
|
32
|
+
geometry.setAttribute('instanceFadeStartedAt', this.fadeStartedAt);
|
|
33
|
+
const material = new ShaderMaterial({
|
|
34
|
+
uniforms: {
|
|
35
|
+
uTime: { value: 0 },
|
|
36
|
+
uFadeDuration: { value: Math.max(0.001, fadeDurationSeconds) }
|
|
37
|
+
},
|
|
38
|
+
vertexShader: `
|
|
39
|
+
attribute float instanceActive;
|
|
40
|
+
attribute vec3 instancePhaseColor;
|
|
41
|
+
attribute float instanceFadeStartedAt;
|
|
42
|
+
uniform float uTime;
|
|
43
|
+
uniform float uFadeDuration;
|
|
44
|
+
varying vec3 vPhaseColor;
|
|
45
|
+
varying vec3 vNormal;
|
|
46
|
+
varying float vAlpha;
|
|
47
|
+
|
|
48
|
+
void main() {
|
|
49
|
+
float fading = step(0.0, instanceFadeStartedAt);
|
|
50
|
+
float fade = clamp(1.0 - (uTime - instanceFadeStartedAt) / uFadeDuration, 0.0, 1.0);
|
|
51
|
+
vAlpha = instanceActive * mix(1.0, fade, fading);
|
|
52
|
+
vPhaseColor = instancePhaseColor;
|
|
53
|
+
float particleScale = mix(0.72, 1.0, vAlpha);
|
|
54
|
+
vec4 instancePosition = instanceMatrix * vec4(position * particleScale, 1.0);
|
|
55
|
+
vNormal = normalize(mat3(modelViewMatrix * instanceMatrix) * normal);
|
|
56
|
+
gl_Position = projectionMatrix * modelViewMatrix * instancePosition;
|
|
57
|
+
}
|
|
58
|
+
`,
|
|
59
|
+
fragmentShader: `
|
|
60
|
+
varying vec3 vPhaseColor;
|
|
61
|
+
varying vec3 vNormal;
|
|
62
|
+
varying float vAlpha;
|
|
63
|
+
|
|
64
|
+
float interleavedGradientNoise(vec2 pixel) {
|
|
65
|
+
return fract(52.9829189 * fract(dot(pixel, vec2(0.06711056, 0.00583715))));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void main() {
|
|
69
|
+
if (vAlpha <= 0.0 || vAlpha < interleavedGradientNoise(gl_FragCoord.xy)) discard;
|
|
70
|
+
float diffuse = 0.58 + 0.42 * max(0.0, dot(normalize(vNormal), normalize(vec3(0.35, 0.8, 0.45))));
|
|
71
|
+
gl_FragColor = vec4(vPhaseColor * diffuse, 1.0);
|
|
72
|
+
}
|
|
73
|
+
`,
|
|
74
|
+
depthTest: true,
|
|
75
|
+
depthWrite: true,
|
|
76
|
+
transparent: false,
|
|
77
|
+
toneMapped: false
|
|
78
|
+
});
|
|
79
|
+
this.mesh = new InstancedMesh(geometry, material, capacity);
|
|
80
|
+
this.mesh.name = 'viewer-projectile-particle-pool';
|
|
81
|
+
this.mesh.frustumCulled = false;
|
|
82
|
+
this.mesh.renderOrder = 1095;
|
|
83
|
+
this.occupied = Array.from({ length: capacity }, () => false);
|
|
84
|
+
for (let slot = 0; slot < capacity; slot += 1) {
|
|
85
|
+
this.mesh.setMatrixAt(slot, HIDDEN_MATRIX);
|
|
86
|
+
this.fadeStartedAt.setX(slot, -1);
|
|
87
|
+
this.setPhase(slot, 'flight', 0);
|
|
88
|
+
}
|
|
89
|
+
this.mesh.instanceMatrix.setUsage(DynamicDrawUsage);
|
|
90
|
+
this.mesh.instanceMatrix.needsUpdate = true;
|
|
91
|
+
}
|
|
92
|
+
allocate() {
|
|
93
|
+
const slot = this.occupied.findIndex((occupied) => !occupied);
|
|
94
|
+
if (slot < 0)
|
|
95
|
+
return null;
|
|
96
|
+
this.occupied[slot] = true;
|
|
97
|
+
this.active.setX(slot, 1);
|
|
98
|
+
this.fadeStartedAt.setX(slot, -1);
|
|
99
|
+
this.active.needsUpdate = true;
|
|
100
|
+
this.fadeStartedAt.needsUpdate = true;
|
|
101
|
+
return slot;
|
|
102
|
+
}
|
|
103
|
+
release(slot) {
|
|
104
|
+
if (!this.occupied[slot])
|
|
105
|
+
return;
|
|
106
|
+
this.occupied[slot] = false;
|
|
107
|
+
this.active.setX(slot, 0);
|
|
108
|
+
this.mesh.setMatrixAt(slot, HIDDEN_MATRIX);
|
|
109
|
+
this.active.needsUpdate = true;
|
|
110
|
+
this.mesh.instanceMatrix.needsUpdate = true;
|
|
111
|
+
}
|
|
112
|
+
updateTransform(slot, position, rotationX, rotationY, scale = 1) {
|
|
113
|
+
this.rotation.setFromEuler(this.euler.set(rotationX, rotationY, 0, 'XYZ'));
|
|
114
|
+
INSTANCE_SCALE.setScalar(Math.max(0.01, Math.min(1, scale)));
|
|
115
|
+
this.matrix.compose(position, this.rotation, INSTANCE_SCALE);
|
|
116
|
+
this.mesh.setMatrixAt(slot, this.matrix);
|
|
117
|
+
this.mesh.instanceMatrix.needsUpdate = true;
|
|
118
|
+
}
|
|
119
|
+
setPhase(slot, phase, nowSeconds) {
|
|
120
|
+
const color = new Color(PHASE_COLORS[phase]);
|
|
121
|
+
this.phaseColor.setXYZ(slot, color.r, color.g, color.b);
|
|
122
|
+
this.fadeStartedAt.setX(slot, phase === 'fading' ? nowSeconds : -1);
|
|
123
|
+
this.phaseColor.needsUpdate = true;
|
|
124
|
+
this.fadeStartedAt.needsUpdate = true;
|
|
125
|
+
}
|
|
126
|
+
setTime(nowSeconds) {
|
|
127
|
+
this.mesh.material.uniforms.uTime.value = nowSeconds;
|
|
128
|
+
}
|
|
129
|
+
dispose() {
|
|
130
|
+
this.mesh.geometry.dispose();
|
|
131
|
+
this.mesh.material.dispose();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=ViewerProjectileParticleRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerProjectileParticleRenderer.js","sourceRoot":"","sources":["../../src/renderer/ViewerProjectileParticleRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ViewerResizePresentationInput {
|
|
2
|
+
sizeChanged: boolean;
|
|
3
|
+
viewportVisible: boolean;
|
|
4
|
+
hasContinuousWork: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ViewerResizePresentation {
|
|
7
|
+
renderImmediately: boolean;
|
|
8
|
+
requestNextFrame: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resizing a WebGL drawing buffer clears its presented pixels. Repaint the
|
|
12
|
+
* current scene in the same resize frame, even when intersection visibility is
|
|
13
|
+
* briefly stale, so workspace resizing never exposes the cleared canvas.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveViewerResizePresentation(input: ViewerResizePresentationInput): ViewerResizePresentation;
|
|
16
|
+
//# sourceMappingURL=ViewerResizePresentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerResizePresentation.d.ts","sourceRoot":"","sources":["../../src/renderer/ViewerResizePresentation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,6BAA6B,GACnC,wBAAwB,CAK1B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resizing a WebGL drawing buffer clears its presented pixels. Repaint the
|
|
3
|
+
* current scene in the same resize frame, even when intersection visibility is
|
|
4
|
+
* briefly stale, so workspace resizing never exposes the cleared canvas.
|
|
5
|
+
*/
|
|
6
|
+
export function resolveViewerResizePresentation(input) {
|
|
7
|
+
return {
|
|
8
|
+
renderImmediately: input.sizeChanged,
|
|
9
|
+
requestNextFrame: input.sizeChanged && input.viewportVisible && input.hasContinuousWork
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ViewerResizePresentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerResizePresentation.js","sourceRoot":"","sources":["../../src/renderer/ViewerResizePresentation.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAoC;IAEpC,OAAO;QACL,iBAAiB,EAAE,KAAK,CAAC,WAAW;QACpC,gBAAgB,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,iBAAiB;KACxF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ViewerMetadata } from './ViewerMetadata.js';
|
|
2
|
+
import type { ViewerExperimentCollector } from './ViewerExperimentCollector.js';
|
|
3
|
+
import type { ViewerExperimentStart } from './ViewerExperimentPort.js';
|
|
4
|
+
import type { Viewer3DProfilerSample } from './PerformanceMonitor.js';
|
|
5
|
+
import type { ViewerTemporalProjectionConfig, ViewerTemporalProjectionFallbackReason, ViewerTemporalProjectionFrame, ViewerTemporalProjectionMode } from './TemporalProjectionModel.js';
|
|
6
|
+
export interface ViewerTemporalProjectionExperimentStart extends ViewerExperimentStart {
|
|
7
|
+
mode: ViewerTemporalProjectionMode;
|
|
8
|
+
projectionConfig: ViewerTemporalProjectionConfig;
|
|
9
|
+
}
|
|
10
|
+
export interface ViewerTemporalProjectionPhysicsStep {
|
|
11
|
+
observedAtMs: number;
|
|
12
|
+
deltaSeconds: number;
|
|
13
|
+
stepDurationMs: number;
|
|
14
|
+
stepCount: number;
|
|
15
|
+
simulatedTimeMs: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class ViewerTemporalProjectionExperimentAdapter<Artifact, Snapshot> {
|
|
18
|
+
private readonly recorder;
|
|
19
|
+
private activeMode;
|
|
20
|
+
private conditionChanged;
|
|
21
|
+
/** The supplied collector must be dedicated to this adapter and configured for its protocol. */
|
|
22
|
+
constructor(recorder: ViewerExperimentCollector<Artifact, Snapshot>);
|
|
23
|
+
start(input: ViewerTemporalProjectionExperimentStart): void;
|
|
24
|
+
markPhase(phaseId: string, observedAtMs: number, provenance?: ViewerMetadata): boolean;
|
|
25
|
+
recordPerformance(sample: Viewer3DProfilerSample): boolean;
|
|
26
|
+
recordPhysicsStep(step: ViewerTemporalProjectionPhysicsStep): boolean;
|
|
27
|
+
recordProjection(frame: ViewerTemporalProjectionFrame): boolean;
|
|
28
|
+
recordReset(reason: ViewerTemporalProjectionFallbackReason, observedAtMs: number): boolean;
|
|
29
|
+
recordConditionChange(mode: ViewerTemporalProjectionMode, observedAtMs: number): boolean;
|
|
30
|
+
stop(endedAtMs: number): Artifact;
|
|
31
|
+
isRecording(): boolean;
|
|
32
|
+
snapshot(): Snapshot;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ViewerTemporalProjectionExperimentAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerTemporalProjectionExperimentAdapter.d.ts","sourceRoot":"","sources":["../../src/renderer/ViewerTemporalProjectionExperimentAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EACV,8BAA8B,EAC9B,sCAAsC,EACtC,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uCAAwC,SAAQ,qBAAqB;IACpF,IAAI,EAAE,4BAA4B,CAAC;IACnC,gBAAgB,EAAE,8BAA8B,CAAC;CAClD;AAED,MAAM,WAAW,mCAAmC;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,yCAAyC,CAAC,QAAQ,EAAE,QAAQ;IAK3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJrC,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAAS;IAEjC,gGAAgG;gBACnE,QAAQ,EAAE,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAEpF,KAAK,CAAC,KAAK,EAAE,uCAAuC,GAAG,IAAI;IAoB3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAE,cAAmB,GAAG,OAAO;IAI1F,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO;IAgB1D,iBAAiB,CAAC,IAAI,EAAE,mCAAmC,GAAG,OAAO;IAerE,gBAAgB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO;IAgC/D,WAAW,CAAC,MAAM,EAAE,sCAAsC,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAQ1F,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAkBxF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ;IAWjC,WAAW,IAAI,OAAO;IAItB,QAAQ,IAAI,QAAQ;CAGrB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export class ViewerTemporalProjectionExperimentAdapter {
|
|
2
|
+
recorder;
|
|
3
|
+
activeMode = null;
|
|
4
|
+
conditionChanged = false;
|
|
5
|
+
/** The supplied collector must be dedicated to this adapter and configured for its protocol. */
|
|
6
|
+
constructor(recorder) {
|
|
7
|
+
this.recorder = recorder;
|
|
8
|
+
}
|
|
9
|
+
start(input) {
|
|
10
|
+
this.recorder.start({
|
|
11
|
+
runId: input.runId,
|
|
12
|
+
conditionId: input.mode,
|
|
13
|
+
startedAtMs: input.startedAtMs,
|
|
14
|
+
environment: {
|
|
15
|
+
...input.environment,
|
|
16
|
+
adapter: 'workbench.viewer.temporal-projection',
|
|
17
|
+
projectionConfig: {
|
|
18
|
+
bufferDelayMs: input.projectionConfig.bufferDelayMs,
|
|
19
|
+
maxSampleGapMs: input.projectionConfig.maxSampleGapMs,
|
|
20
|
+
maxSamples: input.projectionConfig.maxSamples,
|
|
21
|
+
extrapolation: false
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
this.activeMode = input.mode;
|
|
26
|
+
this.conditionChanged = false;
|
|
27
|
+
}
|
|
28
|
+
markPhase(phaseId, observedAtMs, provenance = {}) {
|
|
29
|
+
return this.recorder.markPhase(phaseId, observedAtMs, provenance);
|
|
30
|
+
}
|
|
31
|
+
recordPerformance(sample) {
|
|
32
|
+
return this.recorder.record({
|
|
33
|
+
observedAtMs: sample.time,
|
|
34
|
+
metrics: {
|
|
35
|
+
'render.raf_fps': sample.rafFrameRate,
|
|
36
|
+
'render.fps': sample.renderFrameRate,
|
|
37
|
+
'render.frame_time_ms': sample.rafFrameRate > 0 ? 1000 / sample.rafFrameRate : null,
|
|
38
|
+
'render.draw_ms': sample.drawMs,
|
|
39
|
+
'render.loop_ms': sample.loopMs,
|
|
40
|
+
'render.scheduler_wait_ms': sample.schedulerWaitMs,
|
|
41
|
+
'render.long_task_ms': sample.longTaskMs
|
|
42
|
+
},
|
|
43
|
+
provenance: { source: 'viewer-performance-monitor' }
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
recordPhysicsStep(step) {
|
|
47
|
+
return this.recorder.record({
|
|
48
|
+
observedAtMs: step.observedAtMs,
|
|
49
|
+
metrics: {
|
|
50
|
+
'physics.tick_hz': step.deltaSeconds > 0 ? 1 / step.deltaSeconds : null,
|
|
51
|
+
'physics.step_ms': step.stepDurationMs
|
|
52
|
+
},
|
|
53
|
+
provenance: {
|
|
54
|
+
source: 'physics-service',
|
|
55
|
+
stepCount: step.stepCount,
|
|
56
|
+
simulatedTimeMs: step.simulatedTimeMs
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
recordProjection(frame) {
|
|
61
|
+
if (this.activeMode && frame.mode !== this.activeMode) {
|
|
62
|
+
this.conditionChanged = true;
|
|
63
|
+
}
|
|
64
|
+
return this.recorder.record({
|
|
65
|
+
observedAtMs: frame.renderTimestampMs,
|
|
66
|
+
metrics: {
|
|
67
|
+
'projection.sample_age_ms': frame.metrics.sampleAgeMs,
|
|
68
|
+
'projection.latency_ms': frame.metrics.projectionLatencyMs,
|
|
69
|
+
'projection.alpha': frame.metrics.interpolationAlpha,
|
|
70
|
+
'projection.position_error': frame.metrics.positionError,
|
|
71
|
+
'projection.rotation_error_rad': frame.metrics.rotationErrorRadians,
|
|
72
|
+
'projection.joint_error_rad': frame.metrics.jointAngleErrorRadians,
|
|
73
|
+
'projection.correction_magnitude': frame.metrics.correctionMagnitude,
|
|
74
|
+
'projection.fallback': frame.state === 'fallback' ? 1 : 0
|
|
75
|
+
},
|
|
76
|
+
provenance: {
|
|
77
|
+
source: 'viewer-temporal-projection',
|
|
78
|
+
mode: frame.mode,
|
|
79
|
+
state: frame.state,
|
|
80
|
+
fallbackReason: frame.fallbackReason,
|
|
81
|
+
sourceSampleIds: [...frame.sourceSampleIds],
|
|
82
|
+
projectedPhysicsTimestampMs: frame.projectedPhysicsTimestampMs,
|
|
83
|
+
projectedObservedTimestampMs: frame.projectedObservedTimestampMs,
|
|
84
|
+
discreteStateSourceSampleId: frame.discreteStateSourceSampleId,
|
|
85
|
+
discontinuityToken: frame.discontinuityToken,
|
|
86
|
+
bufferSize: frame.bufferSize
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
recordReset(reason, observedAtMs) {
|
|
91
|
+
return this.recorder.record({
|
|
92
|
+
observedAtMs,
|
|
93
|
+
metrics: { 'projection.buffer_reset': 1 },
|
|
94
|
+
provenance: { source: 'viewer-temporal-projection', event: 'buffer-reset', reason }
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
recordConditionChange(mode, observedAtMs) {
|
|
98
|
+
if (!this.activeMode || mode === this.activeMode) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
this.conditionChanged = true;
|
|
102
|
+
return this.recorder.record({
|
|
103
|
+
observedAtMs,
|
|
104
|
+
metrics: {},
|
|
105
|
+
provenance: {
|
|
106
|
+
source: 'viewer-temporal-projection',
|
|
107
|
+
event: 'condition-changed',
|
|
108
|
+
previousMode: this.activeMode,
|
|
109
|
+
nextMode: mode
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
stop(endedAtMs) {
|
|
114
|
+
const artifact = this.recorder.stop({
|
|
115
|
+
endedAtMs,
|
|
116
|
+
status: this.conditionChanged ? 'invalid' : 'completed',
|
|
117
|
+
reason: this.conditionChanged ? 'condition_changed_during_run' : null
|
|
118
|
+
});
|
|
119
|
+
this.activeMode = null;
|
|
120
|
+
this.conditionChanged = false;
|
|
121
|
+
return artifact;
|
|
122
|
+
}
|
|
123
|
+
isRecording() {
|
|
124
|
+
return this.recorder.isRecording();
|
|
125
|
+
}
|
|
126
|
+
snapshot() {
|
|
127
|
+
return this.recorder.snapshot();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=ViewerTemporalProjectionExperimentAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerTemporalProjectionExperimentAdapter.js","sourceRoot":"","sources":["../../src/renderer/ViewerTemporalProjectionExperimentAdapter.ts"],"names":[],"mappings":"AAwBA,MAAM,OAAO,yCAAyC;IAKvB;IAJrB,UAAU,GAAwC,IAAI,CAAC;IACvD,gBAAgB,GAAG,KAAK,CAAC;IAEjC,gGAAgG;IAChG,YAA6B,QAAuD;QAAvD,aAAQ,GAAR,QAAQ,CAA+C;IAAG,CAAC;IAExF,KAAK,CAAC,KAA8C;QAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE;gBACX,GAAG,KAAK,CAAC,WAAW;gBACpB,OAAO,EAAE,sCAAsC;gBAC/C,gBAAgB,EAAE;oBAChB,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa;oBACnD,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc;oBACrD,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU;oBAC7C,aAAa,EAAE,KAAK;iBACrB;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,YAAoB,EAAE,aAA6B,EAAE;QAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC;IAED,iBAAiB,CAAC,MAA8B;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,YAAY,EAAE,MAAM,CAAC,IAAI;YACzB,OAAO,EAAE;gBACP,gBAAgB,EAAE,MAAM,CAAC,YAAY;gBACrC,YAAY,EAAE,MAAM,CAAC,eAAe;gBACpC,sBAAsB,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;gBACnF,gBAAgB,EAAE,MAAM,CAAC,MAAM;gBAC/B,gBAAgB,EAAE,MAAM,CAAC,MAAM;gBAC/B,0BAA0B,EAAE,MAAM,CAAC,eAAe;gBAClD,qBAAqB,EAAE,MAAM,CAAC,UAAU;aACzC;YACD,UAAU,EAAE,EAAE,MAAM,EAAE,4BAA4B,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,IAAyC;QACzD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,OAAO,EAAE;gBACP,iBAAiB,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;gBACvE,iBAAiB,EAAE,IAAI,CAAC,cAAc;aACvC;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,iBAAiB;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;aACtC;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,KAAoC;QACnD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,YAAY,EAAE,KAAK,CAAC,iBAAiB;YACrC,OAAO,EAAE;gBACP,0BAA0B,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;gBACrD,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB;gBAC1D,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB;gBACpD,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa;gBACxD,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB;gBACnE,4BAA4B,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB;gBAClE,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB;gBACpE,qBAAqB,EAAE,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,4BAA4B;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,eAAe,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;gBAC3C,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;gBAC9D,4BAA4B,EAAE,KAAK,CAAC,4BAA4B;gBAChE,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;gBAC9D,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B;SACF,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,MAA8C,EAAE,YAAoB;QAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,YAAY;YACZ,OAAO,EAAE,EAAE,yBAAyB,EAAE,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE;SACpF,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,IAAkC,EAAE,YAAoB;QAC5E,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,YAAY;YACZ,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACV,MAAM,EAAE,4BAA4B;gBACpC,KAAK,EAAE,mBAAmB;gBAC1B,YAAY,EAAE,IAAI,CAAC,UAAU;gBAC7B,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClC,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACvD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type TemporalScheduler, type TemporalSchedulerHost, type TemporalSchedulerOptions } from '@konitif/temporal';
|
|
2
|
+
/** Browser visibility adapter; AnimationLoop owns frame scheduling, not this host. */
|
|
3
|
+
export declare function createViewerTemporalSchedulerHost(): TemporalSchedulerHost;
|
|
4
|
+
/** The viewer drives frame() explicitly and must never allocate a second RAF loop. */
|
|
5
|
+
export declare function createViewerTemporalScheduler(options: Omit<TemporalSchedulerOptions, 'externalLoop'>, host?: TemporalSchedulerHost): TemporalScheduler;
|
|
6
|
+
//# sourceMappingURL=ViewerTemporalScheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerTemporalScheduler.d.ts","sourceRoot":"","sources":["../../src/renderer/ViewerTemporalScheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAC;AAE3B,sFAAsF;AACtF,wBAAgB,iCAAiC,IAAI,qBAAqB,CAIzE;AAED,sFAAsF;AACtF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,cAAc,CAAC,EACvD,IAAI,GAAE,qBAA2D,GAChE,iBAAiB,CAEnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createTemporalSchedulerCore } from '@konitif/temporal';
|
|
2
|
+
/** Browser visibility adapter; AnimationLoop owns frame scheduling, not this host. */
|
|
3
|
+
export function createViewerTemporalSchedulerHost() {
|
|
4
|
+
return {
|
|
5
|
+
isVisible: () => typeof document === 'undefined' || document.visibilityState !== 'hidden'
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
/** The viewer drives frame() explicitly and must never allocate a second RAF loop. */
|
|
9
|
+
export function createViewerTemporalScheduler(options, host = createViewerTemporalSchedulerHost()) {
|
|
10
|
+
return createTemporalSchedulerCore({ ...options, externalLoop: true }, host);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ViewerTemporalScheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerTemporalScheduler.js","sourceRoot":"","sources":["../../src/renderer/ViewerTemporalScheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAI5B,MAAM,mBAAmB,CAAC;AAE3B,sFAAsF;AACtF,MAAM,UAAU,iCAAiC;IAC/C,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ;KAC1F,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,6BAA6B,CAC3C,OAAuD,EACvD,OAA8B,iCAAiC,EAAE;IAEjE,OAAO,2BAA2B,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Color, Group, type ColorRepresentation } from 'three';
|
|
2
|
+
export type ViewerVisualGroundComponentId = 'tilePattern' | 'surfaceVariation' | 'fogFade' | 'receiveShadows' | 'reflection' | 'focusTilt';
|
|
3
|
+
export interface ViewerVisualGroundComponents {
|
|
4
|
+
tilePattern: boolean;
|
|
5
|
+
surfaceVariation: boolean;
|
|
6
|
+
fogFade: boolean;
|
|
7
|
+
receiveShadows: boolean;
|
|
8
|
+
reflection: boolean;
|
|
9
|
+
focusTilt: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ViewerVisualGroundConfig {
|
|
12
|
+
size: number;
|
|
13
|
+
tileSize: number;
|
|
14
|
+
jointWidth: number;
|
|
15
|
+
majorJointWidth: number;
|
|
16
|
+
majorJointOpacity: number;
|
|
17
|
+
variationStrength: number;
|
|
18
|
+
surfaceOpacity: number;
|
|
19
|
+
roughness: number;
|
|
20
|
+
metalness: number;
|
|
21
|
+
reflectionOpacity: number;
|
|
22
|
+
reflectionResolution: number;
|
|
23
|
+
reflectionBlurRadius: number;
|
|
24
|
+
fogDensity: number;
|
|
25
|
+
components: ViewerVisualGroundComponents;
|
|
26
|
+
}
|
|
27
|
+
export type ViewerVisualGroundOptions = Omit<Partial<ViewerVisualGroundConfig>, 'components'> & {
|
|
28
|
+
components?: Partial<ViewerVisualGroundComponents>;
|
|
29
|
+
};
|
|
30
|
+
export interface ViewerVisualGroundPalette {
|
|
31
|
+
base: Color;
|
|
32
|
+
alternate: Color;
|
|
33
|
+
joint: Color;
|
|
34
|
+
majorJoint: Color;
|
|
35
|
+
reflection: Color;
|
|
36
|
+
}
|
|
37
|
+
export type ViewerVisualGroundPaletteOptions = Partial<{
|
|
38
|
+
[Key in keyof ViewerVisualGroundPalette]: ColorRepresentation;
|
|
39
|
+
}>;
|
|
40
|
+
export interface ViewerGroundReflectionRefreshDecision {
|
|
41
|
+
forced: boolean;
|
|
42
|
+
lastRefreshAt: number;
|
|
43
|
+
minimumIntervalMs: number;
|
|
44
|
+
now: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Decides whether the planar reflection needs a new scene projection.
|
|
48
|
+
* The previously rendered texture remains valid between refreshes, so camera
|
|
49
|
+
* and timeline interactions do not need a second full scene render at 120 Hz.
|
|
50
|
+
*/
|
|
51
|
+
export declare function shouldRefreshViewerGroundReflection({ forced, lastRefreshAt, minimumIntervalMs, now }: ViewerGroundReflectionRefreshDecision): boolean;
|
|
52
|
+
export declare const DEFAULT_VIEWER_VISUAL_GROUND_CONFIG: ViewerVisualGroundConfig;
|
|
53
|
+
export declare const DEFAULT_VIEWER_VISUAL_GROUND_PALETTE: {
|
|
54
|
+
readonly base: "#172c40";
|
|
55
|
+
readonly alternate: "#203a50";
|
|
56
|
+
readonly joint: "#102235";
|
|
57
|
+
readonly majorJoint: "#afc7d5";
|
|
58
|
+
readonly reflection: "#b6d1e2";
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Removes the planar mirror before its oblique clip plane becomes unstable at
|
|
62
|
+
* grazing incidence. The opaque visual ground remains continuous underneath.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveViewerGroundReflectionIncidenceOpacity(incidence: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* Pure visual projection of the viewer support plane.
|
|
67
|
+
*
|
|
68
|
+
* The layer owns no raycast, target, navigation, or command behavior. Its
|
|
69
|
+
* components can be disabled independently without changing scene authority.
|
|
70
|
+
*/
|
|
71
|
+
export declare class VisualGroundLayer {
|
|
72
|
+
readonly group: Group<import("three").Object3DEventMap>;
|
|
73
|
+
private config;
|
|
74
|
+
private palette;
|
|
75
|
+
private geometry;
|
|
76
|
+
private reflectionGeometry;
|
|
77
|
+
private readonly surfaceMaterial;
|
|
78
|
+
private readonly surfaceMesh;
|
|
79
|
+
private readonly reflectionMesh;
|
|
80
|
+
private readonly reflectionMaterial;
|
|
81
|
+
private readonly reflectionMaterialVariants;
|
|
82
|
+
private compiledUniforms;
|
|
83
|
+
private reflectionMinimumRefreshIntervalMs;
|
|
84
|
+
private reflectionRefreshForced;
|
|
85
|
+
private lastReflectionRefreshAt;
|
|
86
|
+
constructor(config?: ViewerVisualGroundOptions, palette?: ViewerVisualGroundPaletteOptions);
|
|
87
|
+
setVisible(visible: boolean): void;
|
|
88
|
+
setReflectionMinimumRefreshInterval(minimumIntervalMs: number): void;
|
|
89
|
+
requestReflectionRefresh(): void;
|
|
90
|
+
setComponentVisible(componentId: ViewerVisualGroundComponentId, visible: boolean): void;
|
|
91
|
+
configure(config: ViewerVisualGroundOptions): void;
|
|
92
|
+
applyPalette(palette: ViewerVisualGroundPaletteOptions): void;
|
|
93
|
+
getConfig(): ViewerVisualGroundConfig;
|
|
94
|
+
dispose(): void;
|
|
95
|
+
private synchronizeUniforms;
|
|
96
|
+
private prepareReflectionMaterial;
|
|
97
|
+
/**
|
|
98
|
+
* A planar mirror observes the scene from the opposite side of the support
|
|
99
|
+
* plane. Some robot assets contain mixed triangle winding, which is harmless
|
|
100
|
+
* from the authored camera but exposes missing or inside-out faces from the
|
|
101
|
+
* reflected camera. The reflection therefore receives cached, double-sided
|
|
102
|
+
* material variants while the primary scene keeps its original materials.
|
|
103
|
+
*/
|
|
104
|
+
private prepareReflectionFacingPass;
|
|
105
|
+
private resolveReflectionMaterialVariant;
|
|
106
|
+
}
|
|
107
|
+
export declare function normalizeViewerVisualGroundConfig(config?: ViewerVisualGroundOptions): ViewerVisualGroundConfig;
|
|
108
|
+
export declare function injectGroundVertexShader(source: string): string;
|
|
109
|
+
export declare function injectGroundFragmentShader(source: string): string;
|
|
110
|
+
//# sourceMappingURL=VisualGroundLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisualGroundLayer.d.ts","sourceRoot":"","sources":["../../src/renderer/VisualGroundLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAGL,KAAK,EASL,KAAK,mBAAmB,EAGzB,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,6BAA6B,GACrC,aAAa,GACb,kBAAkB,GAClB,SAAS,GACT,gBAAgB,GAChB,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,4BAA4B,CAAC;CAC1C;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,YAAY,CAAC,GAAG;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,MAAM,gCAAgC,GAAG,OAAO,CAAC;KACpD,GAAG,IAAI,MAAM,yBAAyB,GAAG,mBAAmB;CAC9D,CAAC,CAAC;AAEH,MAAM,WAAW,qCAAqC;IACpD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,EAClD,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,GAAG,EACJ,EAAE,qCAAqC,GAAG,OAAO,CAEjD;AAED,eAAO,MAAM,mCAAmC,EAAE,wBA4BjD,CAAC;AA2BF,eAAO,MAAM,oCAAoC;;;;;;CAMvC,CAAC;AAKX;;;GAGG;AACH,wBAAgB,6CAA6C,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOvF;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,0CAAe;IAE7B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4C;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAkD;IAC7F,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,kCAAkC,CAAK;IAC/C,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,uBAAuB,CAA4B;gBAE/C,MAAM,GAAE,yBAA8B,EAAE,OAAO,GAAE,gCAAqC;IAwElG,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlC,mCAAmC,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAMpE,wBAAwB,IAAI,IAAI;IAIhC,mBAAmB,CAAC,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IA6BvF,SAAS,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI;IA2DlD,YAAY,CAAC,OAAO,EAAE,gCAAgC,GAAG,IAAI;IAO7D,SAAS,IAAI,wBAAwB;IAOrC,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,yBAAyB;IAwDjC;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IA0EnC,OAAO,CAAC,gCAAgC;CAqBzC;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,GAAE,yBAA8B,GACrC,wBAAwB,CAgE1B;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiGjE"}
|