@volter/editor-core 0.5.57
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/BUNDLED_NOTICES +1527 -0
- package/LICENSE +686 -0
- package/LICENSE-APACHE +202 -0
- package/NOTICE +18 -0
- package/README.md +24 -0
- package/dist/build/chunk-JS4D4XZ3.js +175 -0
- package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
- package/dist/build/vite-plugin-product-contributions.js +100 -0
- package/dist/build/vite-plugin-product-contributions.js.map +7 -0
- package/dist/build/vite-plugin-shared-react.js +25 -0
- package/dist/build/vite-plugin-shared-react.js.map +7 -0
- package/dist/build/vite-plugin-shared-three.js +86 -0
- package/dist/build/vite-plugin-shared-three.js.map +7 -0
- package/dist/server/chunk-KMJC7AGO.js +98 -0
- package/dist/server/chunk-KMJC7AGO.js.map +7 -0
- package/dist/server/chunk-PSILUMGS.js +46 -0
- package/dist/server/chunk-PSILUMGS.js.map +7 -0
- package/dist/server/frame-proxy.js +255 -0
- package/dist/server/frame-proxy.js.map +7 -0
- package/dist/server/open-browser.js +53 -0
- package/dist/server/open-browser.js.map +7 -0
- package/dist/server/process-shutdown.js +127 -0
- package/dist/server/process-shutdown.js.map +7 -0
- package/dist/server/session-registry.js +141 -0
- package/dist/server/session-registry.js.map +7 -0
- package/dist/server/spawn-opener.js +11 -0
- package/dist/server/spawn-opener.js.map +7 -0
- package/dist/server/worktree-identity.js +11 -0
- package/dist/server/worktree-identity.js.map +7 -0
- package/dist-server/packaged.mjs +88816 -0
- package/package.json +118 -0
- package/scripts/build-plugins.mjs +14 -0
- package/scripts/build-server.mjs +26 -0
- package/scripts/build-session.mjs +9 -0
- package/server/account-credentials.ts +60 -0
- package/server/account-service.ts +1434 -0
- package/server/adapter-region-includes.ts +47 -0
- package/server/asset-catalog-v2.ts +175 -0
- package/server/asset-history-snapshots.ts +196 -0
- package/server/asset-ledger-store.ts +195 -0
- package/server/asset-library-routes.ts +1595 -0
- package/server/blender-wasm-artifact.ts +430 -0
- package/server/boot-timings.ts +106 -0
- package/server/canonical-path.ts +50 -0
- package/server/checkout-workspace-preflight.ts +349 -0
- package/server/cloud-asset-catalog.ts +158 -0
- package/server/coding-inference-launch.ts +237 -0
- package/server/collaboration-account-client.ts +202 -0
- package/server/collaboration-attribution.ts +122 -0
- package/server/collaboration-session.ts +934 -0
- package/server/comfyui-bridge.ts +248 -0
- package/server/console-ledger.ts +499 -0
- package/server/creation-site-transform.ts +304 -0
- package/server/creation-site-write.ts +648 -0
- package/server/data-file-serialize.ts +158 -0
- package/server/editor-brand-html.ts +72 -0
- package/server/editor-control-socket.ts +366 -0
- package/server/editor-server-options.ts +190 -0
- package/server/editor-server.ts +1483 -0
- package/server/editor-sse.ts +352 -0
- package/server/engine-provenance.ts +169 -0
- package/server/engine-source-restart.ts +117 -0
- package/server/frame-bridge.ts +115 -0
- package/server/frame-proxy.ts +490 -0
- package/server/frame-workbench.ts +259 -0
- package/server/frontend-handoff.ts +229 -0
- package/server/game-globals-shadow.ts +113 -0
- package/server/gameplay-session-retention.ts +149 -0
- package/server/gameplay-sessions.ts +123 -0
- package/server/generation-jobs.ts +201 -0
- package/server/generation-reconciler.ts +137 -0
- package/server/generative-execution-context.ts +59 -0
- package/server/git-workflow.ts +612 -0
- package/server/harness-chat-caller.ts +36 -0
- package/server/harness-chat-service.ts +1681 -0
- package/server/idle-shutdown.ts +170 -0
- package/server/js-profiling-policy.ts +52 -0
- package/server/launcher-settings.ts +84 -0
- package/server/local-asset-catalog.ts +410 -0
- package/server/managed-account-defaults.ts +22 -0
- package/server/mock-control-plane.ts +540 -0
- package/server/model-import-conversion.ts +345 -0
- package/server/native-credential-store.ts +162 -0
- package/server/open-browser.ts +118 -0
- package/server/packaged.ts +1192 -0
- package/server/play-stall.ts +126 -0
- package/server/process-shutdown.ts +218 -0
- package/server/product-presets.ts +55 -0
- package/server/project-build-artifact.ts +95 -0
- package/server/project-components.ts +100 -0
- package/server/project-dependency-invalidation.ts +114 -0
- package/server/project-file-scan.ts +235 -0
- package/server/project-hmr-files.ts +215 -0
- package/server/project-install-roots.ts +210 -0
- package/server/project-kinds.ts +71 -0
- package/server/project-mcp-servers.ts +82 -0
- package/server/project-module-freshness.ts +109 -0
- package/server/project-module-instance.ts +375 -0
- package/server/project-optimize-deps-entries.ts +827 -0
- package/server/project-output-writer.ts +679 -0
- package/server/project-package-origin.ts +63 -0
- package/server/project-root-surface.ts +831 -0
- package/server/project-scratch-path.ts +47 -0
- package/server/project-script-hmr.ts +619 -0
- package/server/project-serving-plugins.ts +236 -0
- package/server/project-tools.ts +653 -0
- package/server/project-validation.ts +250 -0
- package/server/project-verbs.ts +127 -0
- package/server/project-view.ts +52 -0
- package/server/project-watch.ts +1134 -0
- package/server/project-work-coordinator.ts +288 -0
- package/server/provider-credentials.ts +331 -0
- package/server/recent-projects-store.ts +98 -0
- package/server/redact-secrets.ts +71 -0
- package/server/repository-presence.ts +267 -0
- package/server/routes/account.ts +357 -0
- package/server/routes/agents.ts +60 -0
- package/server/routes/assets.ts +154 -0
- package/server/routes/build.ts +13 -0
- package/server/routes/collaboration.ts +595 -0
- package/server/routes/configurations.ts +419 -0
- package/server/routes/context.ts +264 -0
- package/server/routes/control-plane.ts +1811 -0
- package/server/routes/logs.ts +272 -0
- package/server/routes/project-identity.ts +302 -0
- package/server/routes/project-open.ts +429 -0
- package/server/routes/project-source.ts +686 -0
- package/server/routes/project-state.ts +383 -0
- package/server/routes/relay.ts +1029 -0
- package/server/routes/route-helpers.ts +29 -0
- package/server/routes/served-modules.ts +138 -0
- package/server/routes/session-tabs.ts +196 -0
- package/server/routes/settings.ts +121 -0
- package/server/routes/share-control.ts +486 -0
- package/server/routes/themes.ts +116 -0
- package/server/routes/tools.ts +230 -0
- package/server/routes/worktrees.ts +595 -0
- package/server/scoped-game-css.ts +461 -0
- package/server/server-utils.ts +1194 -0
- package/server/session-product.ts +112 -0
- package/server/session-registry.ts +230 -0
- package/server/share-claims.ts +138 -0
- package/server/share-host.ts +526 -0
- package/server/share-session-gateway.ts +1362 -0
- package/server/share-tunnel.ts +123 -0
- package/server/spawn-opener.ts +74 -0
- package/server/support/play/log-format.ts +76 -0
- package/server/support/play/session-record.ts +199 -0
- package/server/support/project/build-discipline.ts +718 -0
- package/server/support/project/inspection-node.ts +119 -0
- package/server/support/project/log-naming.ts +54 -0
- package/server/support/project/provenance.ts +290 -0
- package/server/support/project/run-name.ts +18 -0
- package/server/support/project/session-journal.ts +830 -0
- package/server/support/project/shared.ts +327 -0
- package/server/tab-bootstrap.ts +62 -0
- package/server/tab-heartbeat.ts +477 -0
- package/server/tab-lifecycle.ts +550 -0
- package/server/tab-presence.ts +1508 -0
- package/server/team-agent-mirror.ts +95 -0
- package/server/twin-auth.ts +138 -0
- package/server/vendored-lock-recorder.ts +968 -0
- package/server/worktree-identity.ts +121 -0
- package/server/worktree-management.ts +398 -0
- package/server/worktree-retention.d.mts +13 -0
- package/server/worktree-retention.mjs +205 -0
- package/src/EditorContext.tsx +169 -0
- package/src/account.ts +333 -0
- package/src/action-registry.ts +532 -0
- package/src/active-product.ts +74 -0
- package/src/active-project.ts +155 -0
- package/src/adapter-editor-config.ts +25 -0
- package/src/adapter-observation.ts +49 -0
- package/src/animation/stage-transport.ts +379 -0
- package/src/animation/three-clips-subject.ts +172 -0
- package/src/api/asset-library-wire.ts +45 -0
- package/src/api/assets.ts +365 -0
- package/src/api/base.ts +10 -0
- package/src/api/build.ts +99 -0
- package/src/api/git-wire.ts +56 -0
- package/src/api/logs.ts +92 -0
- package/src/api/project-identity.ts +74 -0
- package/src/api/project-open.ts +355 -0
- package/src/api/project-source.ts +162 -0
- package/src/api/project-state.ts +107 -0
- package/src/api/relay.ts +268 -0
- package/src/api/settings.ts +36 -0
- package/src/api/themes.ts +45 -0
- package/src/api/worktrees.ts +257 -0
- package/src/asset-compare-core.ts +171 -0
- package/src/asset-compare.ts +294 -0
- package/src/asset-editor-context.tsx +100 -0
- package/src/asset-events.ts +97 -0
- package/src/asset-inspector-actions.ts +87 -0
- package/src/asset-preview-framing.ts +357 -0
- package/src/asset-preview.ts +2802 -0
- package/src/asset-selection-viewer-registry.ts +113 -0
- package/src/asset-selection.ts +133 -0
- package/src/asset-workflow/asset-capabilities.ts +344 -0
- package/src/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/asset-workflow/asset-ledger.ts +156 -0
- package/src/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/asset-workflow/asset-types.ts +142 -0
- package/src/asset-workflow/asset-workflow-quality.ts +61 -0
- package/src/asset-workflow/audio-preview-player.ts +193 -0
- package/src/asset-workflow/audio-waveform.ts +22 -0
- package/src/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/asset-workflow/folder-preview.ts +345 -0
- package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/asset-workflow/image-view-scale.ts +32 -0
- package/src/asset-workflow/import-contract.ts +124 -0
- package/src/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/asset-workflow/model-inspection.ts +818 -0
- package/src/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +139 -0
- package/src/asset-workflow/project-asset-operations.ts +154 -0
- package/src/asset-workflow/project-asset-roots.ts +68 -0
- package/src/asset-workflow/project-content.ts +288 -0
- package/src/asset-workflow/project-source-index.ts +550 -0
- package/src/asset-workflow/thumbnail-system.ts +256 -0
- package/src/authoring/active-adapter.ts +199 -0
- package/src/authoring/active-systems.ts +422 -0
- package/src/authoring/adapter-key.ts +18 -0
- package/src/authoring/authoring-asset-url.ts +27 -0
- package/src/authoring/bootstrap-state.ts +49 -0
- package/src/authoring/boundary-authoring-adapter.ts +184 -0
- package/src/authoring/breakpoint-state.ts +43 -0
- package/src/authoring/canvas-scene-guides.ts +76 -0
- package/src/authoring/component-instance-root.ts +171 -0
- package/src/authoring/composite-authoring-adapter.ts +2110 -0
- package/src/authoring/consumer-actions.ts +520 -0
- package/src/authoring/css-numeric-style.ts +97 -0
- package/src/authoring/design-time-layers.ts +849 -0
- package/src/authoring/design-time-mount-registry.ts +235 -0
- package/src/authoring/design-time-settle.ts +343 -0
- package/src/authoring/edit-mode-authoring.ts +619 -0
- package/src/authoring/eyedropper-session.ts +60 -0
- package/src/authoring/instance-source-menu-register.ts +13 -0
- package/src/authoring/instance-source-menu.ts +135 -0
- package/src/authoring/layered-pick.ts +183 -0
- package/src/authoring/live-gesture-lock.ts +50 -0
- package/src/authoring/live-object-transform.ts +62 -0
- package/src/authoring/mount-failure-report.ts +154 -0
- package/src/authoring/mounted-root-subjects.ts +144 -0
- package/src/authoring/no-authoring-adapter.ts +55 -0
- package/src/authoring/null-inspection-subjects.tsx +75 -0
- package/src/authoring/object3d-document-persistence.ts +106 -0
- package/src/authoring/object3d-document-session-registry.ts +120 -0
- package/src/authoring/object3d-document-session.ts +1326 -0
- package/src/authoring/object3d-gesture-controller.ts +113 -0
- package/src/authoring/panel-authoring.ts +121 -0
- package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
- package/src/authoring/prefab-instance-section-model.ts +55 -0
- package/src/authoring/project-authoring-session.ts +105 -0
- package/src/authoring/provenance.ts +99 -0
- package/src/authoring/quarks-particle-systems.ts +19 -0
- package/src/authoring/react-canvas-navigation.ts +255 -0
- package/src/authoring/react-design-canvas-style.ts +20 -0
- package/src/authoring/react-story-board.ts +937 -0
- package/src/authoring/selection-scope.ts +195 -0
- package/src/authoring/shell-document-ops.ts +169 -0
- package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
- package/src/authoring/shell-viewport-policy.ts +48 -0
- package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
- package/src/authoring/stories-scope.ts +35 -0
- package/src/authoring/story-board-chrome-fit.ts +107 -0
- package/src/authoring/story-board-presentation.ts +111 -0
- package/src/authoring/three-projection-core.ts +226 -0
- package/src/authoring/viewport-pick-context.ts +40 -0
- package/src/authoring/viewport-raycast.ts +240 -0
- package/src/authoring/viewport-tool-context.ts +73 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +152 -0
- package/src/authoring/world-pan-state.ts +198 -0
- package/src/authoring/world-session-state.ts +101 -0
- package/src/authoring/write-pipe.ts +173 -0
- package/src/availability-tick.ts +66 -0
- package/src/bitmap-label.ts +120 -0
- package/src/blender-tab-metrics.ts +161 -0
- package/src/board-open-actions.ts +20 -0
- package/src/boot-routing.ts +391 -0
- package/src/build-identity.ts +15 -0
- package/src/bytes-codec.ts +62 -0
- package/src/camera-authoring.ts +175 -0
- package/src/cancellation-reason.ts +58 -0
- package/src/canvas-preview-frames.ts +482 -0
- package/src/capture-camera-pose.ts +77 -0
- package/src/chrome-registry.ts +159 -0
- package/src/chrome-slot-registry.ts +91 -0
- package/src/collaboration-client.ts +264 -0
- package/src/collaboration-presence.ts +41 -0
- package/src/command-dispatch.ts +19 -0
- package/src/command-listener.ts +2743 -0
- package/src/command-registry.ts +70 -0
- package/src/component-board-registry.ts +205 -0
- package/src/component-states-registry.ts +200 -0
- package/src/components/AgentPresentationNotice.tsx +75 -0
- package/src/components/AlignToolbar.tsx +204 -0
- package/src/components/AppRoot.tsx +394 -0
- package/src/components/ApplicationMenus.tsx +415 -0
- package/src/components/AssetBrowser.tsx +2843 -0
- package/src/components/AssetEditorShell.tsx +216 -0
- package/src/components/AssetInspectorToolSection.tsx +124 -0
- package/src/components/BoardRulers.tsx +354 -0
- package/src/components/CameraInfo.tsx +81 -0
- package/src/components/CanvasSceneViewport.tsx +556 -0
- package/src/components/CapabilityCoverageSection.tsx +185 -0
- package/src/components/CenterDocuments.tsx +22 -0
- package/src/components/ChromeSlot.tsx +20 -0
- package/src/components/CodeView.tsx +470 -0
- package/src/components/CollaborationHeaderControl.css +74 -0
- package/src/components/CompactInspectorCard.tsx +190 -0
- package/src/components/CompactInspectorShell.tsx +39 -0
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +270 -0
- package/src/components/DefaultEditorLayout.tsx +106 -0
- package/src/components/DocumentHeaderStrip.tsx +96 -0
- package/src/components/DocumentShelfRail.tsx +45 -0
- package/src/components/DocumentThumbnail.tsx +345 -0
- package/src/components/EditorLeaseGuard.tsx +372 -0
- package/src/components/ErrorBanner.tsx +123 -0
- package/src/components/FolderPreviewTile.tsx +159 -0
- package/src/components/GameHierarchy.tsx +3842 -0
- package/src/components/GameplaySessionTimeline.tsx +295 -0
- package/src/components/InspectionProjection.tsx +968 -0
- package/src/components/Inspector.tsx +233 -0
- package/src/components/InspectorCanvasPreview.tsx +35 -0
- package/src/components/InspectorFieldsSection.tsx +290 -0
- package/src/components/InspectorObjectPreview.tsx +57 -0
- package/src/components/InspectorStoriesSection.tsx +92 -0
- package/src/components/InspectorToolSection.tsx +96 -0
- package/src/components/InspectorTransformSection.tsx +245 -0
- package/src/components/LightExplorerPanel.tsx +433 -0
- package/src/components/MediaProperties.tsx +145 -0
- package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
- package/src/components/Object3DDocumentToolbar.css +100 -0
- package/src/components/Object3DDocumentToolbar.tsx +454 -0
- package/src/components/Object3DDocumentViewport.tsx +58 -0
- package/src/components/ProjectHeader.css +617 -0
- package/src/components/ProjectHeader.tsx +328 -0
- package/src/components/ProjectLayout.tsx +249 -0
- package/src/components/ReactCanvasControls.tsx +284 -0
- package/src/components/RootSelectionOverlay.tsx +3162 -0
- package/src/components/RootTextEditor.tsx +79 -0
- package/src/components/SaveStatus.tsx +70 -0
- package/src/components/StageHost.tsx +1954 -0
- package/src/components/StageOverlays.tsx +21 -0
- package/src/components/StartupErrorScreen.tsx +76 -0
- package/src/components/StartupLoadingScreen.tsx +65 -0
- package/src/components/StatsOverlay.tsx +78 -0
- package/src/components/SurfaceStateOverlay.tsx +24 -0
- package/src/components/ToolContributionSurfaces.tsx +65 -0
- package/src/components/ToolHost.tsx +370 -0
- package/src/components/ToolObject3DPreview.tsx +39 -0
- package/src/components/Toolbar.tsx +595 -0
- package/src/components/TransientHint.tsx +44 -0
- package/src/components/TransportStrip.tsx +174 -0
- package/src/components/VersionControlSection.tsx +470 -0
- package/src/components/VgaiLogo.css +83 -0
- package/src/components/VgaiLogo.tsx +35 -0
- package/src/components/ViewportControlsHint.tsx +60 -0
- package/src/components/ViewportFurniture.tsx +401 -0
- package/src/components/ViewportOverlay.tsx +145 -0
- package/src/components/ViewportOverlaysMenu.tsx +153 -0
- package/src/components/ViewportShadingMenu.tsx +300 -0
- package/src/components/ViewportViewMenu.tsx +101 -0
- package/src/components/WorkspaceDocumentSurface.tsx +204 -0
- package/src/components/WorkspaceUtilitySurface.tsx +22 -0
- package/src/components/WorktreeSwitcher.css +239 -0
- package/src/components/WorktreeSwitcher.tsx +890 -0
- package/src/components/account-documents.tsx +1162 -0
- package/src/components/asset-documents.tsx +812 -0
- package/src/components/asset-editor-persistence.ts +216 -0
- package/src/components/asset-selection-section.tsx +535 -0
- package/src/components/asset-thumbnails.tsx +312 -0
- package/src/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
- package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
- package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
- package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
- package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
- package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
- package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
- package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
- package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
- package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
- package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
- package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/components/asset-viewers/shader-source.ts +144 -0
- package/src/components/asset-workflow.css +731 -0
- package/src/components/board-guides.ts +150 -0
- package/src/components/compact-inspector.css +539 -0
- package/src/components/core-utilities.tsx +90 -0
- package/src/components/editor-notifications.css +40 -0
- package/src/components/engine-workspace.css +274 -0
- package/src/components/inspector-preview-section.tsx +238 -0
- package/src/components/inspector-property-grouping.ts +64 -0
- package/src/components/inspector-revert-label.ts +20 -0
- package/src/components/inspector-selection.ts +42 -0
- package/src/components/inspector-stories-gating.ts +171 -0
- package/src/components/inspector-transform-subject.ts +11 -0
- package/src/components/inspector-transform.ts +75 -0
- package/src/components/kind-documents.tsx +500 -0
- package/src/components/palette-action-publisher.tsx +140 -0
- package/src/components/primitives/DraftColorInput.tsx +74 -0
- package/src/components/product-shell.css +1829 -0
- package/src/components/project-tool-documents.tsx +410 -0
- package/src/components/scene-documents.tsx +223 -0
- package/src/components/stage-keyboard.tsx +37 -0
- package/src/components/stage-overlay-set.tsx +107 -0
- package/src/components/stage-presence-markers.ts +478 -0
- package/src/components/standard-viewport-dressing.ts +417 -0
- package/src/components/status-contributions.tsx +403 -0
- package/src/components/tool-documents.tsx +309 -0
- package/src/components/tool-schema-form.tsx +262 -0
- package/src/components/use-after-paint.ts +41 -0
- package/src/components/use-project-image-assets.ts +86 -0
- package/src/components/viewport-header-controls.css +90 -0
- package/src/components/viewport-surface-status.tsx +55 -0
- package/src/components/workspace-history.ts +32 -0
- package/src/components/workspace-static-panel-registry.tsx +152 -0
- package/src/components/workspace-surfaces.css +621 -0
- package/src/components/world-documents.tsx +586 -0
- package/src/components/world-overlay-gestures.ts +1694 -0
- package/src/composite-screenshot.ts +1641 -0
- package/src/console-sync.ts +131 -0
- package/src/constraint-helper.ts +338 -0
- package/src/content-entry-source-registry.ts +184 -0
- package/src/coverage/authoring-seam-evidence.ts +300 -0
- package/src/coverage/canvas-reveal.ts +192 -0
- package/src/coverage/design-time-surfaces.ts +101 -0
- package/src/coverage/live-seam-evidence.ts +11 -0
- package/src/coverage/ontology-invariants.ts +466 -0
- package/src/coverage/session-vitals.ts +501 -0
- package/src/coverage/system-seam-evidence.ts +72 -0
- package/src/crash-null-boundary.ts +36 -0
- package/src/creation-site-edit.ts +1479 -0
- package/src/creation-site-registry.ts +160 -0
- package/src/delegate-harness-registry.ts +143 -0
- package/src/document-context-registry.ts +177 -0
- package/src/document-open-registry.ts +200 -0
- package/src/document-preview-source.ts +20 -0
- package/src/document-renderer-session.ts +138 -0
- package/src/editor-api.ts +46 -0
- package/src/editor-chrome-capture.ts +139 -0
- package/src/editor-commands.ts +164 -0
- package/src/editor-console.ts +563 -0
- package/src/editor-current-view.ts +82 -0
- package/src/editor-document-probe.ts +881 -0
- package/src/editor-git-client.ts +115 -0
- package/src/editor-host-door.ts +462 -0
- package/src/editor-hotkeys.ts +842 -0
- package/src/editor-lease-view.ts +39 -0
- package/src/editor-lease.ts +415 -0
- package/src/editor-mode.ts +19 -0
- package/src/editor-notifications.ts +140 -0
- package/src/editor-presence.ts +563 -0
- package/src/editor-presentation-activity.ts +50 -0
- package/src/editor-presentation-notice.ts +42 -0
- package/src/editor-runtime.tsx +145 -0
- package/src/editor-server-response.ts +86 -0
- package/src/editor-session-attribution.ts +75 -0
- package/src/editor-session-mode.ts +54 -0
- package/src/editor-shell-store.ts +1304 -0
- package/src/editor-state-facets.ts +74 -0
- package/src/editor-styles.css +33 -0
- package/src/editor-view-presentation.ts +810 -0
- package/src/editor-viewport.ts +5302 -0
- package/src/entity-lod.ts +31 -0
- package/src/entity-object.ts +91 -0
- package/src/files/file-provider.ts +62 -0
- package/src/files/project-files.ts +264 -0
- package/src/finders/index.ts +136 -0
- package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/frame/bridge.tsx +1408 -0
- package/src/frame/product.ts +77 -0
- package/src/gameplay-dom-recording.ts +319 -0
- package/src/gameplay-export-state.ts +14 -0
- package/src/gameplay-replay.ts +417 -0
- package/src/gameplay-session-time.ts +9 -0
- package/src/gameplay-sessions.ts +204 -0
- package/src/harness-chat-types.ts +253 -0
- package/src/hierarchy-component-marks.ts +298 -0
- package/src/hierarchy-drop.ts +91 -0
- package/src/hierarchy-expansion-state.ts +80 -0
- package/src/hierarchy-header-slot.ts +52 -0
- package/src/hierarchy-internals.ts +197 -0
- package/src/hierarchy-kind-icon.ts +217 -0
- package/src/hierarchy-mark-reader.ts +73 -0
- package/src/hierarchy-menu-registry.ts +67 -0
- package/src/hierarchy-node-rows.ts +307 -0
- package/src/hierarchy-panel-view.ts +280 -0
- package/src/hierarchy-projection.ts +76 -0
- package/src/hierarchy-row-cache.ts +243 -0
- package/src/hierarchy-row-model.ts +308 -0
- package/src/hierarchy-rows.ts +11 -0
- package/src/hierarchy-walk.ts +86 -0
- package/src/history/editor-session.ts +25 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-delegate.ts +163 -0
- package/src/history/history-limit-notices.ts +43 -0
- package/src/history/history-service.ts +1173 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +386 -0
- package/src/history/project-root-history-backends.ts +139 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +103 -0
- package/src/history/source-history-backend.ts +546 -0
- package/src/history/types.ts +124 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hotkeys.ts +188 -0
- package/src/inference-diagnostics.ts +69 -0
- package/src/initial-project.ts +80 -0
- package/src/inspection/active-subject.ts +578 -0
- package/src/inspection/active-surface.ts +142 -0
- package/src/inspection/compose.ts +1064 -0
- package/src/inspection/display.ts +170 -0
- package/src/inspection/document-subject.ts +109 -0
- package/src/inspection/game-subject.ts +85 -0
- package/src/inspection/model.ts +542 -0
- package/src/inspection/null-subject.ts +115 -0
- package/src/inspection/serialize.ts +357 -0
- package/src/inspection/use-active-inspection.ts +180 -0
- package/src/inspector-presentation.ts +201 -0
- package/src/inspector-section-registry.ts +221 -0
- package/src/instance-source-actions.ts +163 -0
- package/src/instanced-presentation.ts +164 -0
- package/src/js-heap.ts +71 -0
- package/src/key-actions.ts +91 -0
- package/src/keymap-presets.ts +401 -0
- package/src/layout-policy.ts +31 -0
- package/src/learn-links.ts +73 -0
- package/src/light-explorer-model.ts +134 -0
- package/src/live-canvas-frame.ts +55 -0
- package/src/live-document.ts +279 -0
- package/src/live-module-source.ts +230 -0
- package/src/live-session-registry.ts +220 -0
- package/src/live-transition.ts +633 -0
- package/src/manifest-project.ts +107 -0
- package/src/model-thumbnail.ts +523 -0
- package/src/native-selection-style.ts +202 -0
- package/src/object3d-document-write-policy.ts +137 -0
- package/src/packaged-runtime.ts +108 -0
- package/src/palettes/maya.palette.json +57 -0
- package/src/palettes/substance.palette.json +57 -0
- package/src/pasteboard-module.ts +81 -0
- package/src/performance-profiler.ts +367 -0
- package/src/performance-sources.ts +69 -0
- package/src/play-boot-phase.ts +145 -0
- package/src/presentation-surface.ts +248 -0
- package/src/project-adapter.ts +1143 -0
- package/src/project-asset-refresh.ts +26 -0
- package/src/project-declaration-refresh.ts +31 -0
- package/src/project-local-state.ts +118 -0
- package/src/project-manager.ts +243 -0
- package/src/project-module-changes.ts +163 -0
- package/src/project-module-split.ts +266 -0
- package/src/project-provenance.ts +115 -0
- package/src/project-ready.ts +42 -0
- package/src/project-session-reset.ts +67 -0
- package/src/project-shape.ts +68 -0
- package/src/project-tool-discovery.ts +66 -0
- package/src/project-tools.ts +107 -0
- package/src/project-work-types.ts +149 -0
- package/src/projection/three.ts +898 -0
- package/src/projection/types.ts +44 -0
- package/src/readiness.ts +113 -0
- package/src/reflection-probe-helper.ts +142 -0
- package/src/reported-play-state.ts +90 -0
- package/src/resolve-relative-specifier.ts +33 -0
- package/src/scene-document-plan.ts +315 -0
- package/src/scene-framing.ts +315 -0
- package/src/scene-live-open.ts +210 -0
- package/src/scene-view-fog.ts +89 -0
- package/src/scoped-game-css.ts +152 -0
- package/src/session-orphan-record.ts +193 -0
- package/src/session-tombstone.ts +126 -0
- package/src/settings/settings-provider.ts +82 -0
- package/src/settings-store.ts +345 -0
- package/src/shared-view-restore.ts +42 -0
- package/src/shell-store-door.ts +45 -0
- package/src/source-conflict.ts +122 -0
- package/src/spatial-handle-visuals.ts +332 -0
- package/src/stage-context.ts +341 -0
- package/src/stage-store-registry.ts +63 -0
- package/src/stale-chunk-recovery.ts +34 -0
- package/src/state-report-deferral.ts +73 -0
- package/src/storage/host-files-storage.ts +97 -0
- package/src/storage/http-storage.ts +174 -0
- package/src/storage/index.ts +75 -0
- package/src/storage/mem-storage.ts +149 -0
- package/src/storage/path-lock.ts +44 -0
- package/src/storage/paths.ts +26 -0
- package/src/storage/types.ts +116 -0
- package/src/stories/StoryComponentThumbnail.tsx +184 -0
- package/src/stories/StoryPreviewMount.tsx +306 -0
- package/src/stories/component-content-source.tsx +106 -0
- package/src/stories/component-states-source.ts +78 -0
- package/src/stories/compose-project-stories.ts +255 -0
- package/src/stories/pixi-story-model.ts +30 -0
- package/src/stories/prefabs-finder.ts +54 -0
- package/src/stories/prefabs-from-stories.ts +182 -0
- package/src/stories/project-story-discovery.ts +78 -0
- package/src/stories/project-story-regions.ts +24 -0
- package/src/stories/story-actions.ts +54 -0
- package/src/stories/story-capture-command.ts +124 -0
- package/src/stories/story-capture.ts +584 -0
- package/src/stories/story-declared-medium.ts +126 -0
- package/src/stories/story-discovery.ts +176 -0
- package/src/stories/story-document-openers.ts +36 -0
- package/src/stories/story-dom-runtime.ts +78 -0
- package/src/stories/story-grouping.ts +111 -0
- package/src/stories/story-lane.ts +88 -0
- package/src/stories/story-mount-turn.ts +27 -0
- package/src/stories/story-opener.ts +260 -0
- package/src/stories/story-pixi-preview.ts +408 -0
- package/src/stories/story-presentation.ts +215 -0
- package/src/stories/story-registry.ts +517 -0
- package/src/stories/story-three-preview.ts +807 -0
- package/src/stories/three-story-model.ts +96 -0
- package/src/story-three-preview-runtime.ts +56 -0
- package/src/surface-keyboard.ts +112 -0
- package/src/surface-state.ts +124 -0
- package/src/tab-bootstrap.js +628 -0
- package/src/tab-census.ts +198 -0
- package/src/tab-lifecycle-client.ts +196 -0
- package/src/theme-library.ts +844 -0
- package/src/theme-preference.ts +378 -0
- package/src/theme.css +3437 -0
- package/src/three-viewport/bone-selection-highlight.ts +119 -0
- package/src/three-viewport/camera-fit.ts +41 -0
- package/src/three-viewport/interactive-renderer.ts +132 -0
- package/src/three-viewport/selection-brackets.ts +310 -0
- package/src/three-viewport/selection-outline.ts +183 -0
- package/src/three-viewport/skeleton-helper.ts +61 -0
- package/src/three-viewport/source-color.ts +167 -0
- package/src/three-viewport/studio-environment.ts +96 -0
- package/src/three-viewport-presentation.ts +23 -0
- package/src/tool-contribution-play.ts +74 -0
- package/src/tool-loader.ts +1798 -0
- package/src/transform-mode-request.ts +57 -0
- package/src/transient-hint.ts +78 -0
- package/src/trigger-volume-helper.ts +116 -0
- package/src/ui-source/adapter-region-includes.ts +241 -0
- package/src/ui-source/ensure-import.ts +132 -0
- package/src/ui-source/file-region-resolver.ts +302 -0
- package/src/ui-source/inspect.ts +775 -0
- package/src/ui-source/oid-transform.ts +1845 -0
- package/src/ui-source/plan-csf-story.ts +196 -0
- package/src/ui-source/plan-extract-component.ts +421 -0
- package/src/ui-source/plan-fork-component.ts +621 -0
- package/src/ui-source/plan-named-style.ts +95 -0
- package/src/ui-source/plan-source-edit.ts +353 -0
- package/src/ui-source/r3f-contract-resolver.ts +327 -0
- package/src/ui-source/r3f-diagnostic-index.ts +165 -0
- package/src/ui-source/r3f-environment-binding.ts +133 -0
- package/src/ui-source/r3f-joint-binding.ts +251 -0
- package/src/ui-source/r3f-lod-binding.ts +91 -0
- package/src/ui-source/r3f-particle-binding.ts +235 -0
- package/src/ui-source/r3f-physics-binding.ts +483 -0
- package/src/ui-source/r3f-project-contracts.ts +444 -0
- package/src/ui-source/relative-import-specifier.ts +34 -0
- package/src/ui-source/reparent-guard.ts +544 -0
- package/src/ui-source/source-edit-request.ts +97 -0
- package/src/ui-source/source-write-backend.ts +618 -0
- package/src/ui-source/syntactic-prop-specs.ts +296 -0
- package/src/ui-source/tier-source-write-backend.ts +279 -0
- package/src/ui-source/ts-ast.ts +171 -0
- package/src/ui-source/utility-class-support.ts +169 -0
- package/src/ui-source/write-component-default.ts +133 -0
- package/src/ui-source/writer.ts +1989 -0
- package/src/viewport-activation-timings.ts +840 -0
- package/src/viewport-authoring-policy.ts +186 -0
- package/src/viewport-controls-hint.ts +57 -0
- package/src/viewport-door.ts +237 -0
- package/src/viewport-shading-boundary.ts +12 -0
- package/src/vite-error-surface.ts +141 -0
- package/src/wait-until.ts +37 -0
- package/src/workspace-areas.ts +156 -0
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-available-documents.ts +127 -0
- package/src/workspace-core-utilities.ts +31 -0
- package/src/workspace-document-ids.ts +59 -0
- package/src/workspace-document-registry.ts +612 -0
- package/src/workspace-document-restore.ts +145 -0
- package/src/workspace-host-commands.ts +141 -0
- package/src/workspace-persistence-gate.ts +40 -0
- package/src/workspace-play-utilities.ts +44 -0
- package/src/workspace-presets.ts +425 -0
- package/src/workspace-regions.ts +294 -0
- package/src/workspace-state-persistence.ts +536 -0
- package/src/workspace-static-panels.ts +73 -0
- package/src/workspace-status-registry.ts +121 -0
- package/src/workspace-style.ts +239 -0
- package/src/workspace-utility-commands.ts +74 -0
- package/src/workspace-utility-registry.ts +263 -0
- package/src/workspace-viewport-rect.ts +97 -0
- package/src/world-adoption.ts +115 -0
- package/src/world-document-routing.ts +104 -0
- package/vite-plugin-creation-site-write.ts +184 -0
- package/vite-plugin-creation-site.ts +80 -0
- package/vite-plugin-game-static.ts +303 -0
- package/vite-plugin-module-doorways.ts +336 -0
- package/vite-plugin-product-contributions.ts +197 -0
- package/vite-plugin-project-game-static.ts +125 -0
- package/vite-plugin-project-jsx-js.ts +65 -0
- package/vite-plugin-project-root-absolute-assets.ts +359 -0
- package/vite-plugin-shared-react.ts +420 -0
- package/vite-plugin-shared-three.ts +203 -0
- package/vite-plugin-ui-oid.ts +2106 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The asset-preview capture engine's FRAMING MATH, extracted from
|
|
3
|
+
* `asset-preview.ts` so it can be exercised without a WebGL context.
|
|
4
|
+
*
|
|
5
|
+
* Everything here is pure: it takes points, a camera basis and an output
|
|
6
|
+
* aspect, and returns frustum half-extents or a configured
|
|
7
|
+
* `THREE.OrthographicCamera`. Nothing in this module traverses a scene,
|
|
8
|
+
* renders, or allocates GPU resources — the traversal that FEEDS it
|
|
9
|
+
* (`forEachRenderableVertex`) stays in `asset-preview.ts`, because that is
|
|
10
|
+
* scene-graph knowledge rather than geometry.
|
|
11
|
+
*
|
|
12
|
+
* Two facts drove the extraction:
|
|
13
|
+
*
|
|
14
|
+
* 1. A turntable shot must be framed from the subject's ACTUAL projected
|
|
15
|
+
* extent along that shot's own camera axes. The engine used to derive
|
|
16
|
+
* every yaw's frame from ONE world-axis-aligned bounding box, which is a
|
|
17
|
+
* proxy: it is conservative for a compact subject and wasteful for a
|
|
18
|
+
* long one held in a bent pose, and it centres every yaw on the AABB's
|
|
19
|
+
* centre rather than on what that yaw actually sees.
|
|
20
|
+
* 2. A `bone-zoom` crop needs the same freedom of angle the turntable has.
|
|
21
|
+
* Its basis used to be hardcoded to +Z, so a crop anchored on the tail of
|
|
22
|
+
* an 8 m quadruped photographed the hind legs standing in front of it.
|
|
23
|
+
*
|
|
24
|
+
* @see {@link turntableViewBasis} for the yaw convention both shot kinds share.
|
|
25
|
+
*/
|
|
26
|
+
import * as THREE from 'three';
|
|
27
|
+
|
|
28
|
+
/** Frame margin: the fitted half-extents are scaled by this, so a subject
|
|
29
|
+
* never touches the frame edge. Shared by every orthographic preview
|
|
30
|
+
* camera — the value is the engine's one framing constant. */
|
|
31
|
+
export const ASSET_PREVIEW_PADDING = 1.2;
|
|
32
|
+
|
|
33
|
+
/** The smallest half-extent a fitted frame may have, so a degenerate
|
|
34
|
+
* (single-point) subject still produces a valid frustum. */
|
|
35
|
+
const MIN_HALF_EXTENT = 0.001;
|
|
36
|
+
|
|
37
|
+
/** An orthonormal camera basis. `direction` points from the subject TOWARD
|
|
38
|
+
* the camera (the convention every preview camera in this engine uses:
|
|
39
|
+
* `position = target + direction * distance`). */
|
|
40
|
+
export interface OrthographicViewBasis {
|
|
41
|
+
direction: THREE.Vector3;
|
|
42
|
+
right: THREE.Vector3;
|
|
43
|
+
up: THREE.Vector3;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The turntable yaw convention, shared by `turntable` shots and — since the
|
|
48
|
+
* `bone-zoom` yaw was added — by bone-anchored crops too, so a definition
|
|
49
|
+
* reads one angle convention rather than two.
|
|
50
|
+
*
|
|
51
|
+
* `yaw = 0` puts the camera on +Z looking at the subject's front (the
|
|
52
|
+
* direction `faceFrontSubject` normalises the model's own forward to face),
|
|
53
|
+
* and yaw increases toward +X: `PI` is the back, `-PI/2` and `+PI/2` the two
|
|
54
|
+
* sides — the angles shot sets already label 'left' and 'right'.
|
|
55
|
+
*/
|
|
56
|
+
export function turntableViewBasis(yaw: number): OrthographicViewBasis {
|
|
57
|
+
const direction = new THREE.Vector3(Math.sin(yaw), 0, Math.cos(yaw));
|
|
58
|
+
const worldUp = new THREE.Vector3(0, 1, 0);
|
|
59
|
+
const right = worldUp.clone().cross(direction).normalize();
|
|
60
|
+
const up = direction.clone().cross(right).normalize();
|
|
61
|
+
return { direction, right, up };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The subject's extent along one camera basis, accumulated point by point.
|
|
66
|
+
* This is an oriented (not axis-aligned) measurement: `right`/`up` are the
|
|
67
|
+
* screen axes of the shot being framed, so the span is exactly what that
|
|
68
|
+
* shot's frustum has to contain.
|
|
69
|
+
*/
|
|
70
|
+
export interface ProjectedSpan {
|
|
71
|
+
minRight: number;
|
|
72
|
+
maxRight: number;
|
|
73
|
+
minUp: number;
|
|
74
|
+
maxUp: number;
|
|
75
|
+
minDepth: number;
|
|
76
|
+
maxDepth: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function createProjectedSpan(): ProjectedSpan {
|
|
80
|
+
return {
|
|
81
|
+
minRight: Number.POSITIVE_INFINITY,
|
|
82
|
+
maxRight: Number.NEGATIVE_INFINITY,
|
|
83
|
+
minUp: Number.POSITIVE_INFINITY,
|
|
84
|
+
maxUp: Number.NEGATIVE_INFINITY,
|
|
85
|
+
minDepth: Number.POSITIVE_INFINITY,
|
|
86
|
+
maxDepth: Number.NEGATIVE_INFINITY,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function isProjectedSpanEmpty(span: ProjectedSpan): boolean {
|
|
91
|
+
return span.maxRight < span.minRight;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Return a span to its empty state, so one allocation can measure a long
|
|
95
|
+
* series of small subjects (the per-primitive coverage walk measures one
|
|
96
|
+
* span per rendered triangle and would otherwise allocate per triangle). */
|
|
97
|
+
export function resetProjectedSpan(span: ProjectedSpan): void {
|
|
98
|
+
span.minRight = Number.POSITIVE_INFINITY;
|
|
99
|
+
span.maxRight = Number.NEGATIVE_INFINITY;
|
|
100
|
+
span.minUp = Number.POSITIVE_INFINITY;
|
|
101
|
+
span.maxUp = Number.NEGATIVE_INFINITY;
|
|
102
|
+
span.minDepth = Number.POSITIVE_INFINITY;
|
|
103
|
+
span.maxDepth = Number.NEGATIVE_INFINITY;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Fold one world-space point into a span. Mutates `span` — a capture walks
|
|
107
|
+
* every rendered vertex once and folds it into every basis it needs. */
|
|
108
|
+
export function expandProjectedSpan(
|
|
109
|
+
span: ProjectedSpan,
|
|
110
|
+
point: THREE.Vector3,
|
|
111
|
+
basis: OrthographicViewBasis,
|
|
112
|
+
): void {
|
|
113
|
+
const right = point.dot(basis.right);
|
|
114
|
+
const up = point.dot(basis.up);
|
|
115
|
+
const depth = point.dot(basis.direction);
|
|
116
|
+
if (right < span.minRight) span.minRight = right;
|
|
117
|
+
if (right > span.maxRight) span.maxRight = right;
|
|
118
|
+
if (up < span.minUp) span.minUp = up;
|
|
119
|
+
if (up > span.maxUp) span.maxUp = up;
|
|
120
|
+
if (depth < span.minDepth) span.minDepth = depth;
|
|
121
|
+
if (depth > span.maxDepth) span.maxDepth = depth;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** The world-space point at the centre of a span — where the shot's camera
|
|
125
|
+
* looks. Reconstructed from the basis, so it is the centre of the ORIENTED
|
|
126
|
+
* box the shot sees, not of a world-axis-aligned proxy. */
|
|
127
|
+
export function projectedSpanCenter(
|
|
128
|
+
span: ProjectedSpan,
|
|
129
|
+
basis: OrthographicViewBasis,
|
|
130
|
+
): THREE.Vector3 {
|
|
131
|
+
if (isProjectedSpanEmpty(span)) {
|
|
132
|
+
throw new Error('Asset preview cannot frame an empty projected span.');
|
|
133
|
+
}
|
|
134
|
+
return new THREE.Vector3()
|
|
135
|
+
.addScaledVector(basis.right, (span.minRight + span.maxRight) / 2)
|
|
136
|
+
.addScaledVector(basis.up, (span.minUp + span.maxUp) / 2)
|
|
137
|
+
.addScaledVector(basis.direction, (span.minDepth + span.maxDepth) / 2);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** An orthographic frustum's half-extents, already padded and aspect-fitted. */
|
|
141
|
+
export interface OrthographicFrame {
|
|
142
|
+
halfWidth: number;
|
|
143
|
+
halfHeight: number;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Fit half-extents that contain `halfRight` x `halfUp` at the output aspect,
|
|
148
|
+
* with the engine's standard padding. Height leads and width follows, so the
|
|
149
|
+
* rendered pixels are never anisotropic relative to the subject.
|
|
150
|
+
*/
|
|
151
|
+
export function fitOrthographicFrame(
|
|
152
|
+
halfRight: number,
|
|
153
|
+
halfUp: number,
|
|
154
|
+
aspect: number,
|
|
155
|
+
padding: number = ASSET_PREVIEW_PADDING,
|
|
156
|
+
): OrthographicFrame {
|
|
157
|
+
const halfHeight = Math.max(halfUp, halfRight / aspect, MIN_HALF_EXTENT) * padding;
|
|
158
|
+
return { halfHeight, halfWidth: halfHeight * aspect };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Fit the frame a single projected span needs. */
|
|
162
|
+
export function fitProjectedSpanFrame(
|
|
163
|
+
span: ProjectedSpan,
|
|
164
|
+
aspect: number,
|
|
165
|
+
padding: number = ASSET_PREVIEW_PADDING,
|
|
166
|
+
): OrthographicFrame {
|
|
167
|
+
if (isProjectedSpanEmpty(span)) {
|
|
168
|
+
throw new Error('Asset preview cannot frame an empty projected span.');
|
|
169
|
+
}
|
|
170
|
+
return fitOrthographicFrame(
|
|
171
|
+
(span.maxRight - span.minRight) / 2,
|
|
172
|
+
(span.maxUp - span.minUp) / 2,
|
|
173
|
+
aspect,
|
|
174
|
+
padding,
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The frame every turntable shot of one staged subject shares: the UNION of
|
|
180
|
+
* what each yaw needs.
|
|
181
|
+
*
|
|
182
|
+
* Why the union rather than a per-shot exact fit. A verify shot set is read
|
|
183
|
+
* as a SET — the reviewer compares the same junction across yaws (and, on a
|
|
184
|
+
* contact sheet, side by side). A per-shot fit silently rescales the subject
|
|
185
|
+
* between frames, so a wing that looks thicker at yaw 0 than at yaw PI/2
|
|
186
|
+
* would be a framing artefact rather than geometry, which is exactly the
|
|
187
|
+
* kind of false signal a verify render exists to eliminate. The union keeps
|
|
188
|
+
* ONE scale for every turntable shot of a staged subject while each shot is
|
|
189
|
+
* still CENTRED on its own projected span — so nothing clips and nothing
|
|
190
|
+
* rescales.
|
|
191
|
+
*
|
|
192
|
+
* The union is per staged subject (the rest scene, and each named pose's
|
|
193
|
+
* disposable snapshot) rather than across poses: poses are separately
|
|
194
|
+
* staged already, and a single extreme pose must not shrink every other
|
|
195
|
+
* frame in the set.
|
|
196
|
+
*/
|
|
197
|
+
export function unionOrthographicFrames(frames: readonly OrthographicFrame[]): OrthographicFrame {
|
|
198
|
+
if (frames.length === 0) {
|
|
199
|
+
throw new Error('Asset preview cannot union an empty set of frames.');
|
|
200
|
+
}
|
|
201
|
+
let halfWidth = 0;
|
|
202
|
+
let halfHeight = 0;
|
|
203
|
+
for (const frame of frames) {
|
|
204
|
+
halfWidth = Math.max(halfWidth, frame.halfWidth);
|
|
205
|
+
halfHeight = Math.max(halfHeight, frame.halfHeight);
|
|
206
|
+
}
|
|
207
|
+
return { halfWidth, halfHeight };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* The frame a bone-anchored crop needs: a margin proportional to the WHOLE
|
|
212
|
+
* model's own bounding radius (never a fixed reference-human height, so a
|
|
213
|
+
* goblin's crop stays goblin-scaled), widened until it actually contains
|
|
214
|
+
* every anchor.
|
|
215
|
+
*
|
|
216
|
+
* Offsets are measured along the SHOT's basis, so a crop taken from the side
|
|
217
|
+
* frames the anchors it names from the side. At the default yaw the basis is
|
|
218
|
+
* (+X, +Y, +Z) and this reduces exactly to the world-axis arithmetic it
|
|
219
|
+
* replaced.
|
|
220
|
+
*/
|
|
221
|
+
export function fitBoneZoomFrame(
|
|
222
|
+
anchors: readonly THREE.Vector3[],
|
|
223
|
+
center: THREE.Vector3,
|
|
224
|
+
basis: OrthographicViewBasis,
|
|
225
|
+
overallRadius: number,
|
|
226
|
+
spanFraction: number,
|
|
227
|
+
aspect: number,
|
|
228
|
+
): OrthographicFrame {
|
|
229
|
+
const margin = Math.max(overallRadius * spanFraction, MIN_HALF_EXTENT);
|
|
230
|
+
let halfWidth = margin;
|
|
231
|
+
let halfHeight = margin;
|
|
232
|
+
const offset = new THREE.Vector3();
|
|
233
|
+
for (const point of anchors) {
|
|
234
|
+
offset.copy(point).sub(center);
|
|
235
|
+
halfWidth = Math.max(halfWidth, Math.abs(offset.dot(basis.right)) + margin);
|
|
236
|
+
halfHeight = Math.max(halfHeight, Math.abs(offset.dot(basis.up)) + margin);
|
|
237
|
+
}
|
|
238
|
+
// Keep the crop's aspect consistent with the output image so neither axis
|
|
239
|
+
// is silently clipped relative to what actually got rendered.
|
|
240
|
+
halfWidth = Math.max(halfWidth, halfHeight * aspect);
|
|
241
|
+
halfHeight = Math.max(halfHeight, halfWidth / aspect);
|
|
242
|
+
return { halfWidth, halfHeight };
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** The mean of the anchor points a bone-zoom crop is built around. */
|
|
246
|
+
export function boneZoomCenter(anchors: readonly THREE.Vector3[]): THREE.Vector3 {
|
|
247
|
+
if (anchors.length === 0) {
|
|
248
|
+
throw new Error('Asset preview cannot centre a bone-zoom crop on zero anchors.');
|
|
249
|
+
}
|
|
250
|
+
const center = new THREE.Vector3();
|
|
251
|
+
for (const point of anchors) center.add(point);
|
|
252
|
+
return center.multiplyScalar(1 / anchors.length);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* What one orthographic shot actually renders, in the SAME scalar
|
|
257
|
+
* coordinates a {@link ProjectedSpan} is measured in (`point.dot(right)`,
|
|
258
|
+
* `point.dot(up)`, `point.dot(direction)`) — so a shot's frame and the
|
|
259
|
+
* subject's measured extent are directly comparable without a second
|
|
260
|
+
* projection convention.
|
|
261
|
+
*
|
|
262
|
+
* This exists for the empty-frame guard: a verify shot that frames NO
|
|
263
|
+
* geometry renders pure background, lands on a contact sheet looking like
|
|
264
|
+
* coverage, and proves nothing. Detecting that is a containment question
|
|
265
|
+
* about the vertices the capture already walks, not a question about pixels.
|
|
266
|
+
*/
|
|
267
|
+
export interface ShotFrameWindow {
|
|
268
|
+
minRight: number;
|
|
269
|
+
maxRight: number;
|
|
270
|
+
minUp: number;
|
|
271
|
+
maxUp: number;
|
|
272
|
+
/** Depth here is `point.dot(direction)`, which INCREASES toward the camera
|
|
273
|
+
* (`direction` points from subject to camera), so the near plane is the
|
|
274
|
+
* MAXIMUM depth and the far plane the minimum. */
|
|
275
|
+
minDepth: number;
|
|
276
|
+
maxDepth: number;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* The window a configured orthographic shot camera renders, read back off the
|
|
281
|
+
* camera itself rather than recomputed from the inputs that built it — so the
|
|
282
|
+
* guard tests what will be drawn, including the padding and aspect fitting
|
|
283
|
+
* {@link fitOrthographicFrame} applied.
|
|
284
|
+
*/
|
|
285
|
+
export function orthographicShotFrameWindow(
|
|
286
|
+
camera: THREE.OrthographicCamera,
|
|
287
|
+
basis: OrthographicViewBasis,
|
|
288
|
+
): ShotFrameWindow {
|
|
289
|
+
const right = camera.position.dot(basis.right);
|
|
290
|
+
const up = camera.position.dot(basis.up);
|
|
291
|
+
const depth = camera.position.dot(basis.direction);
|
|
292
|
+
const zoom = camera.zoom || 1;
|
|
293
|
+
return {
|
|
294
|
+
minRight: right + camera.left / zoom,
|
|
295
|
+
maxRight: right + camera.right / zoom,
|
|
296
|
+
minUp: up + camera.bottom / zoom,
|
|
297
|
+
maxUp: up + camera.top / zoom,
|
|
298
|
+
minDepth: depth - camera.far,
|
|
299
|
+
maxDepth: depth - camera.near,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Could anything measured into `span` appear in this shot?
|
|
305
|
+
*
|
|
306
|
+
* `span` is expected to be ONE rendered primitive (a triangle, a line
|
|
307
|
+
* segment, a sprite quad), measured in the shot's own basis — so this is an
|
|
308
|
+
* overlap test between the primitive's projected bounding box and the frame.
|
|
309
|
+
*
|
|
310
|
+
* The asymmetry is deliberate and is what makes the empty-frame warning
|
|
311
|
+
* trustworthy: a primitive whose box overlaps the frame may still miss it
|
|
312
|
+
* (a thin diagonal triangle), so "overlaps" does not prove the shot shows
|
|
313
|
+
* something — but NO primitive overlapping does prove it shows nothing. The
|
|
314
|
+
* guard only ever claims the second. Testing individual VERTICES instead
|
|
315
|
+
* would invert that: a crop sitting inside one large flat face contains no
|
|
316
|
+
* vertex while rendering solid geometry, and would be reported as empty.
|
|
317
|
+
*/
|
|
318
|
+
export function spanOverlapsShotFrame(span: ProjectedSpan, window: ShotFrameWindow): boolean {
|
|
319
|
+
if (isProjectedSpanEmpty(span)) return false;
|
|
320
|
+
return (
|
|
321
|
+
span.maxRight >= window.minRight &&
|
|
322
|
+
span.minRight <= window.maxRight &&
|
|
323
|
+
span.maxUp >= window.minUp &&
|
|
324
|
+
span.minUp <= window.maxUp &&
|
|
325
|
+
span.maxDepth >= window.minDepth &&
|
|
326
|
+
span.minDepth <= window.maxDepth
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Build the configured orthographic camera for one shot. `distance` and
|
|
332
|
+
* `far` are the depth budget the caller derives from the subject's own
|
|
333
|
+
* bounding radius; the frame and target come from the projected measurements
|
|
334
|
+
* above.
|
|
335
|
+
*/
|
|
336
|
+
export function createOrthographicShotCamera(
|
|
337
|
+
target: THREE.Vector3,
|
|
338
|
+
basis: OrthographicViewBasis,
|
|
339
|
+
frame: OrthographicFrame,
|
|
340
|
+
distance: number,
|
|
341
|
+
far: number,
|
|
342
|
+
): THREE.OrthographicCamera {
|
|
343
|
+
const camera = new THREE.OrthographicCamera(
|
|
344
|
+
-frame.halfWidth,
|
|
345
|
+
frame.halfWidth,
|
|
346
|
+
frame.halfHeight,
|
|
347
|
+
-frame.halfHeight,
|
|
348
|
+
0.01,
|
|
349
|
+
far,
|
|
350
|
+
);
|
|
351
|
+
camera.position.copy(target).addScaledVector(basis.direction, distance);
|
|
352
|
+
camera.up.copy(basis.up);
|
|
353
|
+
camera.lookAt(target);
|
|
354
|
+
camera.updateProjectionMatrix();
|
|
355
|
+
camera.updateMatrixWorld(true);
|
|
356
|
+
return camera;
|
|
357
|
+
}
|