@volter/editor-threejs 0.5.66 → 0.5.68
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/contributions/animation-timeline.utility.tsx +44 -0
- package/contributions/three-integration.service.ts +13 -0
- package/package.json +96 -6
- package/src/adapter/renderer-config.ts +3 -4
- package/src/adapter/three-contract.ts +72 -0
- package/src/ecs/object-marks.ts +1 -1
- package/src/ecs/user-data.ts +0 -9
- package/src/host-hierarchy-objects.ts +31 -0
- package/src/kit/animation/three-clips-subject.ts +190 -0
- package/src/kit/asset-compare.ts +294 -0
- package/src/kit/asset-preview-command.ts +265 -0
- package/src/kit/asset-preview-framing.ts +357 -0
- package/src/kit/asset-preview.ts +2802 -0
- package/src/kit/asset-workflow/model-inspection.ts +830 -0
- package/src/kit/authoring/component-instance-root.ts +171 -0
- package/src/kit/authoring/design-time-settle.ts +343 -0
- package/src/kit/authoring/live-object-transform.ts +62 -0
- package/src/kit/authoring/object3d-document-session-registry.ts +154 -0
- package/src/kit/authoring/object3d-document-session.ts +1965 -0
- package/src/kit/authoring/object3d-gesture-controller.ts +113 -0
- package/src/kit/authoring/quarks-particle-systems.ts +19 -0
- package/src/kit/authoring/shell-viewport-policy.ts +48 -0
- package/src/kit/authoring/source-object3d-authoring-adapter.ts +526 -0
- package/src/kit/authoring/three-projection-core.ts +226 -0
- package/src/kit/authoring/viewport-pick-context.ts +39 -0
- package/src/kit/authoring/viewport-raycast.ts +240 -0
- package/src/kit/authoring/world-hidden-viewport.ts +95 -0
- package/src/kit/camera-authoring.ts +175 -0
- package/src/kit/components/CameraInfo.tsx +56 -0
- package/src/kit/components/InspectorObjectPreview.tsx +57 -0
- package/src/kit/components/Object3DDocumentToolbar.tsx +549 -0
- package/src/kit/components/Object3DDocumentViewport.tsx +58 -0
- package/src/kit/components/StageHost.tsx +2547 -0
- package/src/kit/components/StageOverlays.tsx +21 -0
- package/src/kit/components/StatsOverlay.tsx +78 -0
- package/src/kit/components/ToolObject3DPreview.tsx +39 -0
- package/src/kit/components/ViewportFurniture.tsx +655 -0
- package/src/kit/components/ViewportOverlay.tsx +215 -0
- package/src/kit/components/ViewportShadingMenu.tsx +340 -0
- package/src/kit/components/ViewportViewMenu.tsx +155 -0
- package/src/kit/components/asset-viewers/EntityModelDocument.tsx +121 -0
- package/src/kit/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
- package/src/kit/components/asset-viewers/LiveModuleDocument.tsx +395 -0
- package/src/kit/components/asset-viewers/LutAssetDocument.tsx +444 -0
- package/src/kit/components/asset-viewers/ModelAssetDocument.tsx +105 -0
- package/src/kit/components/asset-viewers/Object3DPreview.tsx +356 -0
- package/src/kit/components/asset-viewers/QuarksAssetDocument.tsx +527 -0
- package/src/kit/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
- package/src/kit/components/asset-viewers/three-asset-viewers.tsx +132 -0
- package/src/kit/components/object3d-contribution-surfaces.tsx +33 -0
- package/src/kit/components/stage-keyboard.tsx +40 -0
- package/src/kit/components/stage-overlay-set.tsx +105 -0
- package/src/kit/components/stage-presence-markers.ts +482 -0
- package/src/kit/components/stage-transform-chrome.ts +30 -0
- package/src/kit/components/stage-transform-tools.tsx +73 -0
- package/src/kit/components/stage-view-name.ts +30 -0
- package/src/kit/components/standard-viewport-dressing.ts +1042 -0
- package/src/kit/components/world-root-binding.ts +64 -0
- package/src/kit/constraint-helper.ts +338 -0
- package/src/kit/editor-shell-store.ts +814 -0
- package/src/kit/editor-viewport.ts +6621 -0
- package/src/kit/entity-lod.ts +31 -0
- package/src/kit/entity-object.ts +92 -0
- package/src/kit/hierarchy-mark-reader.ts +74 -0
- package/src/kit/instanced-presentation.ts +164 -0
- package/src/kit/live-module-source.ts +230 -0
- package/src/kit/model-thumbnail.ts +539 -0
- package/src/kit/play-camera-flight.ts +300 -0
- package/src/kit/projection/three.ts +898 -0
- package/src/kit/reflection-probe-helper.ts +142 -0
- package/src/kit/scene-document-viewport.ts +51 -0
- package/src/kit/scene-framing.ts +315 -0
- package/src/kit/scene-view-fog.ts +89 -0
- package/src/kit/spatial-handle-visuals.ts +332 -0
- package/src/kit/stories/three-story-model.ts +66 -0
- package/src/kit/three-canvas-render.ts +44 -0
- package/src/kit/three-hierarchy-row-media.ts +26 -0
- package/src/kit/three-inspection-media.ts +73 -0
- package/src/kit/three-integration.ts +86 -0
- package/src/kit/three-state.ts +33 -0
- package/src/kit/three-viewport/bone-selection-highlight.ts +119 -0
- package/src/kit/three-viewport/camera-fit.ts +41 -0
- package/src/kit/three-viewport/interactive-renderer.ts +132 -0
- package/src/kit/three-viewport/selection-brackets.ts +355 -0
- package/src/kit/three-viewport/selection-outline.ts +333 -0
- package/src/kit/three-viewport/skeleton-helper.ts +61 -0
- package/src/kit/three-viewport/source-color.ts +197 -0
- package/src/kit/three-viewport/studio-environment.ts +96 -0
- package/src/kit/trigger-volume-helper.ts +116 -0
- package/src/kit/viewport-actions.ts +128 -0
- package/src/kit/viewport-authoring-policy.ts +154 -0
- package/src/kit/viewport-commands.ts +318 -0
- package/src/kit/viewport-hotkeys.ts +119 -0
- package/src/kit/viewport-shading-boundary.ts +12 -0
- package/src/kit/viewport-status-facet.ts +53 -0
- package/src/object3d-contributions.ts +494 -0
- package/src/render/viewport-shading.ts +6 -2
- package/src/viewport-api.ts +92 -0
- package/src/viewport-door.ts +237 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The lazy boundary for a stage's overlays. The host names them; only a stage
|
|
3
|
+
* that actually has a shell above it (and therefore something for them to
|
|
4
|
+
* read) evaluates the module. See `stage-overlay-set.tsx` for what they are
|
|
5
|
+
* and `world-root-stage.ts`'s header for why the condition gates the LOAD.
|
|
6
|
+
*/
|
|
7
|
+
import { lazy, Suspense } from 'react';
|
|
8
|
+
import type { StageOverlaySetProps } from './stage-overlay-set';
|
|
9
|
+
|
|
10
|
+
const LazyStageOverlaySet = lazy(async () => {
|
|
11
|
+
const module = await import('./stage-overlay-set');
|
|
12
|
+
return { default: module.StageOverlaySet };
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export function StageOverlays(props: StageOverlaySetProps) {
|
|
16
|
+
return (
|
|
17
|
+
<Suspense fallback={null}>
|
|
18
|
+
<LazyStageOverlaySet {...props} />
|
|
19
|
+
</Suspense>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { themeVars } from '@volter/editor-sdk/widgets';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useEditorStats } from '@volter/editor-sdk/kit/editor-runtime';
|
|
4
|
+
import { latestTabCensus } from '@volter/editor-sdk/kit/tab-census';
|
|
5
|
+
|
|
6
|
+
export function StatsOverlay() {
|
|
7
|
+
const stats = useEditorStats();
|
|
8
|
+
const [, setTick] = useState(0);
|
|
9
|
+
// The tab's resource census (tab-census.ts) — the SAME sample the heartbeat
|
|
10
|
+
// carries and a death line quotes, read here on the tick this overlay
|
|
11
|
+
// already runs. The author sees the cost while authoring it, which is the
|
|
12
|
+
// whole reason the census exists: the quality loop grades looks, and a
|
|
13
|
+
// renderer killed at Chrome's undocumented ceiling grades nothing.
|
|
14
|
+
const census = latestTabCensus();
|
|
15
|
+
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const id = setInterval(() => setTick((t) => t + 1), 200);
|
|
18
|
+
return () => clearInterval(id);
|
|
19
|
+
}, []);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
// V-10 — this was an EIGHTH one-off "dark panel"
|
|
23
|
+
// value (`rgba(0,0,0,0.7)`, flat black, no border) directly stacked
|
|
24
|
+
// above-right of ViewportOverlay's cluster and CameraInfo's pill in the
|
|
25
|
+
// same corner. Given the same border/radius treatment as its siblings so
|
|
26
|
+
// the whole corner reads as one family.
|
|
27
|
+
// P6-U6 (owner taste decision 3: HUD overlays → real islands): the paint
|
|
28
|
+
// moved to `.vgai-hud-overlay` so islands chrome can promote it to the
|
|
29
|
+
// shared glass-island material (compact tier); bars chrome paints the
|
|
30
|
+
// exact pre-U6 overlay-whisper recipe from the same class.
|
|
31
|
+
<div
|
|
32
|
+
className="vgai-hud-overlay vgai-chrome-island vgai-glass-island"
|
|
33
|
+
data-island-scale="compact"
|
|
34
|
+
data-hud-border="strong"
|
|
35
|
+
style={{
|
|
36
|
+
position: 'absolute',
|
|
37
|
+
// U6.5 F1/P2-18 — second HUD tier: below the viewport toolbar row.
|
|
38
|
+
// The var carries the glass breathing band (54px islands / 102px the
|
|
39
|
+
// floating header-island clearance, scoped in theme.css); the bare
|
|
40
|
+
// fallback is the pre-glass 48px so treatment-less chrome ("bars":
|
|
41
|
+
// graphite/classic/lite/reduced) stays pixel-identical to main.
|
|
42
|
+
top: 'var(--vgai-viewport-overlay-hud-top, 48px)',
|
|
43
|
+
right: 8,
|
|
44
|
+
padding: '6px 10px',
|
|
45
|
+
pointerEvents: 'auto',
|
|
46
|
+
fontSize: 'var(--vgai-font-base)',
|
|
47
|
+
color: themeVars.content.primary,
|
|
48
|
+
fontFamily: themeVars.typography.mono,
|
|
49
|
+
lineHeight: '16px',
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<div>FPS: {stats.fps.toFixed(0)}</div>
|
|
53
|
+
<div>Draw: {stats.drawCalls}</div>
|
|
54
|
+
<div>Tris: {stats.triangles.toLocaleString()}</div>
|
|
55
|
+
<div>Frame: {stats.frameTime.toFixed(1)}ms</div>
|
|
56
|
+
{census !== null && (
|
|
57
|
+
<>
|
|
58
|
+
<div>
|
|
59
|
+
Heap: {census.heapUsedMB === null ? 'n/a' : `${census.heapUsedMB.toFixed(0)}MB`}
|
|
60
|
+
{census.heapLimitMB === null ? '' : ` / ${census.heapLimitMB.toFixed(0)}MB`}
|
|
61
|
+
</div>
|
|
62
|
+
<div>Mount epochs: {census.mountEpochs}</div>
|
|
63
|
+
<div>
|
|
64
|
+
Canvas: {census.canvasMB.toFixed(1)}MB ×{census.canvases}
|
|
65
|
+
</div>
|
|
66
|
+
{/* Absent, never zeroed, when no game has registered a render-debug
|
|
67
|
+
adapter — "no textures" is a different claim from "unmeasured". */}
|
|
68
|
+
{census.textures !== undefined && (
|
|
69
|
+
<div>
|
|
70
|
+
GPU: {census.textures} tex, {census.geometries ?? 0} geo
|
|
71
|
+
{census.programs === undefined ? '' : `, ${census.programs} prog`}
|
|
72
|
+
</div>
|
|
73
|
+
)}
|
|
74
|
+
</>
|
|
75
|
+
)}
|
|
76
|
+
</div>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ToolObject3DPreviewProps } from '../../object3d-contributions';
|
|
2
|
+
import { Object3DPreview } from './asset-viewers/Object3DPreview';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Editor-owned preview chrome for project-authored native Three.js sources.
|
|
6
|
+
* Object3DPreview owns renderer, camera, controls, animation, and
|
|
7
|
+
* teardown; the project owns only the raw build function and its resources.
|
|
8
|
+
*/
|
|
9
|
+
export function ToolObject3DPreview({
|
|
10
|
+
build,
|
|
11
|
+
displayName = 'Object3D preview',
|
|
12
|
+
height = 360,
|
|
13
|
+
background,
|
|
14
|
+
showSkeleton = false,
|
|
15
|
+
cameraDirection,
|
|
16
|
+
showGrid,
|
|
17
|
+
useDefaultLighting,
|
|
18
|
+
exposure,
|
|
19
|
+
setupPreview,
|
|
20
|
+
active = true,
|
|
21
|
+
}: ToolObject3DPreviewProps) {
|
|
22
|
+
const customPresentation = setupPreview !== undefined;
|
|
23
|
+
return (
|
|
24
|
+
<div style={{ width: '100%', height, minHeight: 240 }}>
|
|
25
|
+
<Object3DPreview
|
|
26
|
+
sourceFactory={build}
|
|
27
|
+
displayName={displayName}
|
|
28
|
+
active={active}
|
|
29
|
+
showSkeleton={showSkeleton}
|
|
30
|
+
background={background}
|
|
31
|
+
cameraDirection={cameraDirection}
|
|
32
|
+
showGrid={showGrid ?? !customPresentation}
|
|
33
|
+
useDefaultLighting={useDefaultLighting ?? !customPresentation}
|
|
34
|
+
exposure={exposure}
|
|
35
|
+
setupPreview={setupPreview}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
}
|