@volter/game-editor 0.5.67 → 0.5.69
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 +10954 -5077
- package/LICENSE +1 -1
- package/LICENSE-BLENDER +2 -2
- package/NOTICE +2 -2
- package/additions/canvas/package.json +8 -0
- package/additions/canvas/src/canvas-mount.ts +46 -0
- package/additions/canvas/src/scene2d.tsx +18 -0
- package/catalog/entries/bake.json +1 -1
- package/catalog/entries/blender.json +3 -3
- package/catalog/entries/music.json +6 -6
- package/catalog/project-source/LICENSE +1 -1
- package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
- package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
- package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
- package/catalog/project-source/src/contributions/module-source.ts +4 -4
- package/catalog/project-source/src/lib/music/music-player.ts +18 -12
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
- package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
- package/dist/.vite/manifest.json +4106 -3965
- package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
- package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
- package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
- package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
- package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
- package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
- package/dist/assets/ImageViewer-D16OExYu.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
- package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
- package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
- package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
- package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
- package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
- package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
- package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
- package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
- package/dist/assets/PlayBar-DsMitSgy.js +1 -0
- package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
- package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
- package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
- package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
- package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
- package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
- package/dist/assets/StageHost-DYfGYwvq.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
- package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
- package/dist/assets/Toolbar-M62Gob9T.js +1 -0
- package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
- package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
- package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
- package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
- package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
- package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
- package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
- package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
- package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
- package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
- package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
- package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
- package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
- package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
- package/dist/assets/audio.utility-CEmNc68t.js +1 -0
- package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
- package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
- package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
- package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
- package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
- package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
- package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
- package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
- package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
- package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
- package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
- package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/bridge.command-DXUeavn5.js +3 -0
- package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
- package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
- package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
- package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
- package/dist/assets/build-session-BLboUUbw.js +9 -0
- package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
- package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
- package/dist/assets/build.header-BWNmNWFT.js +1 -0
- package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
- package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
- package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
- package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
- package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
- package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
- package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
- package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
- package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
- package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
- package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
- package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
- package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
- package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
- package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
- package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
- package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
- package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
- package/dist/assets/connection.status-BhRwcFx0.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
- package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
- package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
- package/dist/assets/coverage.service-l42ty7lr.js +3 -0
- package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
- package/dist/assets/curve-THOUsg-j.js +1 -0
- package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-CN34UeVw.js +1 -0
- package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
- package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
- package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
- package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
- package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
- package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
- package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
- package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
- package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
- package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
- package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
- package/dist/assets/editor-api-BM7H_F4G.js +1 -0
- package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
- package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
- package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
- package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
- package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
- package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
- package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
- package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
- package/dist/assets/game-module-access-BTInp2NG.js +1 -0
- package/dist/assets/game-network-DW5ARz4R.js +22 -0
- package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
- package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
- package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
- package/dist/assets/generation.service-BMOc-C9i.js +1 -0
- package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
- package/dist/assets/generations.status-B_SmPReI.js +1 -0
- package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-B0S4fQQV.js +1 -0
- package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
- package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
- package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
- package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/index-CfpGZrbC.js +1 -0
- package/dist/assets/index-Czvj6whv.js +1 -0
- package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
- package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
- package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
- package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
- package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
- package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-BrdlngrL.js +1 -0
- package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
- package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
- package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
- package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
- package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
- package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
- package/dist/assets/material-BVApn1V_.js +1 -0
- package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
- package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
- package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
- package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
- package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
- package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
- package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
- package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
- package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
- package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
- package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
- package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
- package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
- package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
- package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
- package/dist/assets/network.utility-DjeOEvAY.js +1 -0
- package/dist/assets/object-marks-BnvSuCTt.js +1 -0
- package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
- package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
- package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
- package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
- package/dist/assets/play.command-D9JGJP-e.js +2 -0
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-COhHQdmR.js +1 -0
- package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
- package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
- package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
- package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
- package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
- package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
- package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
- package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
- package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
- package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
- package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
- package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
- package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
- package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
- package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
- package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
- package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
- package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
- package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
- package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
- package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
- package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-Xnduk02T.js +1 -0
- package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
- package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
- package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
- package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
- package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
- package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
- package/dist/assets/run-selection-B0jOdyYt.js +2 -0
- package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
- package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
- package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
- package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
- package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
- package/dist/assets/seeded-random-BJthDRMu.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
- package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
- package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
- package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
- package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
- package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
- package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
- package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
- package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
- package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
- package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
- package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
- package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
- package/dist/assets/story-documents-BvG2xeaR.js +3 -0
- package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
- package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
- package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
- package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
- package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
- package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
- package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
- package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
- package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
- package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
- package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
- package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
- package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
- package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
- package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
- package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
- package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
- package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
- package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
- package/dist/assets/tools-DfctM216.js +1 -0
- package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
- package/dist/assets/transport-strip-xCg94CuI.js +1 -0
- package/dist/assets/transport.header-BRtdky0x.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-BDz3wbQL.js +1 -0
- package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
- package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
- package/dist/assets/viewport-door-BARIpMu-.js +1 -0
- package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
- package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
- package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
- package/dist/assets/worker-BtXrsgFy.js +2 -0
- package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
- package/dist/assets/world-documents-D69XaqUX.js +1 -0
- package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
- package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
- package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +253 -210
- package/dist-node/create.js +103 -82
- package/package.json +23 -20
- package/src/contributions.d.ts +1 -1
- package/src/index.ts +10 -10
- package/starter/cube.py +1 -1
- package/template/.agents/references/project-manual.md +17 -17
- package/template/.agents/skills/editor/SKILL.md +6 -6
- package/template/.agents/skills/editor/agents/openai.yaml +3 -3
- package/template/.agents/skills/editor/references/editor-control.md +62 -62
- package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
- package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.claude/skills/editor/SKILL.md +6 -6
- package/template/.claude/skills/editor/agents/openai.yaml +3 -3
- package/template/.claude/skills/editor/references/editor-control.md +62 -62
- package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.github/copilot-instructions.md +1 -1
- package/template/.github/skills/editor/SKILL.md +6 -6
- package/template/.github/skills/editor/agents/openai.yaml +3 -3
- package/template/.github/skills/editor/references/editor-control.md +62 -62
- package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
- package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.mcp.json +3 -3
- package/template/AGENTS.md +24 -23
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -12
- package/template/check-idioms.ts +51 -51
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +12 -12
- package/template/server/loopback.ts +1 -1
- package/template/server/main.ts +4 -4
- package/template/server/rooms/arena-room.ts +8 -8
- package/template/server/rooms/game-room.ts +8 -8
- package/template/server/rooms.ts +2 -2
- package/template/src/bot/QaTester.tsx +1 -1
- package/template/src/bot/bot-station.ts +2 -2
- package/template/src/bot/tester-station.ts +1 -1
- package/template/src/contributions/README.md +1 -1
- package/template/src/contributions/analytics.analytics.tsx +1 -1
- package/template/src/contributions/data.document.tsx +2 -2
- package/template/src/contributions/pages.finder.ts +1 -1
- package/template/src/contributions/tester.inspector.tsx +2 -2
- package/template/src/contributions/use-game-modules.ts +1 -1
- package/template/src/input.ts +2 -2
- package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/template/src/lib/static-batch/Frozen.tsx +1 -1
- package/template/src/lib/static-batch/mutation-watch.ts +1 -1
- package/template/src/main.ts +58 -6
- package/template/src/manifest-entry-modules.d.ts +12 -1
- package/template/src/prefabs/HeroBox.stories.tsx +1 -1
- package/template/src/world.tsx +1 -1
- package/template/tsconfig.json +1 -1
- package/template/validate-manifest.ts +3 -3
- package/template/vite.config.ts +11 -11
- package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
- package/template/{vgai.project.json → volter.project.json} +2 -2
- package/template-dotfiles/gitignore +27 -27
- package/workbench/src/media/game-cover.css +11 -11
- package/workbench/src/product.contribution.ts +28 -28
- package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
- package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
- package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
- package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
- package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
- package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
- package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
- package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
- package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
- package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
- package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
- package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
- package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
- package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
- package/dist/assets/StageHost-B89HKcvd.js +0 -2
- package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
- package/dist/assets/Toolbar-DkTHnQto.js +0 -1
- package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
- package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
- package/dist/assets/active-ingest-DA426a81.js +0 -3
- package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
- package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
- package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
- package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
- package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
- package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
- package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
- package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
- package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
- package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
- package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
- package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
- package/dist/assets/blender.status-ujwGU6dU.js +0 -1
- package/dist/assets/board-guides-BEKPgD9M.js +0 -1
- package/dist/assets/body-marks-RKb_LTwL.js +0 -1
- package/dist/assets/bridge.command-BF00Iefm.js +0 -3
- package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
- package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
- package/dist/assets/build-session-GZcSAfPN.js +0 -9
- package/dist/assets/build.header-Bt1kwHWl.js +0 -1
- package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
- package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
- package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
- package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
- package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
- package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
- package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
- package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
- package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
- package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
- package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
- package/dist/assets/curve-DVd18iAX.js +0 -1
- package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
- package/dist/assets/data-ref-CWnkj-HX.js +0 -1
- package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
- package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
- package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
- package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
- package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
- package/dist/assets/editor-api-BFTIRlWa.js +0 -1
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
- package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
- package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
- package/dist/assets/game-audio-CaGKzia4.js +0 -1
- package/dist/assets/game-document.service-Chmt4065.js +0 -1
- package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
- package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
- package/dist/assets/game-network-Ct2FQYmu.js +0 -1
- package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
- package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
- package/dist/assets/generation-DhwCUHPf.css +0 -1
- package/dist/assets/generation.service-o9aXlsx4.js +0 -1
- package/dist/assets/generations.status-BvzgHlyk.js +0 -1
- package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
- package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
- package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
- package/dist/assets/index-0Lm0Nf1M.css +0 -1
- package/dist/assets/index-BHoAKyAC.js +0 -1
- package/dist/assets/index-BeK4RPgj.js +0 -1
- package/dist/assets/index-C1c3eOmm.js +0 -1
- package/dist/assets/index.module-Ycad3DJq.js +0 -1
- package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
- package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
- package/dist/assets/ingest.service-vbCucMz7.js +0 -1
- package/dist/assets/inspection-CObLhnrs.js +0 -1
- package/dist/assets/instances.command-BwayrqNm.js +0 -1
- package/dist/assets/layered-pick-kiQf53t5.js +0 -1
- package/dist/assets/material-B_V78pTt.js +0 -1
- package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
- package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
- package/dist/assets/module-mode-BH2R93XP.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
- package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
- package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
- package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
- package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
- package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
- package/dist/assets/network.utility-DFDul2Xb.js +0 -1
- package/dist/assets/object-marks-DwvIEBOK.js +0 -1
- package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
- package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
- package/dist/assets/play-mode-DICV4cKP.js +0 -22
- package/dist/assets/play.command-NHyi5rzF.js +0 -2
- package/dist/assets/pose-guard-DILO6gGq.js +0 -1
- package/dist/assets/presentation-BeNFBfKg.js +0 -1
- package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
- package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
- package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
- package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
- package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
- package/dist/assets/react-story-board-GaXqr03H.js +0 -1
- package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
- package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
- package/dist/assets/registry-CaCdF63N.js +0 -1
- package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
- package/dist/assets/run-selection-DzEkGesJ.js +0 -2
- package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
- package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
- package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
- package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
- package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
- package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
- package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
- package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
- package/dist/assets/story-documents-BTo90DiA.js +0 -3
- package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
- package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
- package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
- package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
- package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
- package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
- package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
- package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
- package/dist/assets/tools-B_NJsk05.js +0 -1
- package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
- package/dist/assets/transport-strip-CUjNltnb.js +0 -1
- package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
- package/dist/assets/tuples-DfWSY2tr.js +0 -1
- package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
- package/dist/assets/user-data-dHvLdpwM.js +0 -1
- package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
- package/dist/assets/worker-CC9Ug5Ei.js +0 -2
- package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
- package/dist/assets/world-documents-DBybpBq8.js +0 -1
- package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
- package/dist/vgai-shared-react.json +0 -10
- package/dist/vgai-shared-three.json +0 -3
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
- /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
- /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
- /package/template/{.vgai → .volter}/assets.json +0 -0
- /package/template/{.vgai → .volter}/provenance.json +0 -0
package/LICENSE
CHANGED
|
@@ -9,7 +9,7 @@ the starter template carries), and it is excluded from the grant below.
|
|
|
9
9
|
|
|
10
10
|
That subtree is the CAPABILITY DISTRIBUTION: source whose whole purpose is to
|
|
11
11
|
be copied, byte for byte, out of this package and into projects that are not
|
|
12
|
-
ours. `
|
|
12
|
+
ours. `volter-game-editor add <id>` copies a capability's declared files into a user's game,
|
|
13
13
|
and `npm run capabilities:sync` copies the same bytes into the MIT starter
|
|
14
14
|
template (`packages/editor/template/`) — the two copies are identical, which
|
|
15
15
|
`capabilities:sync -- --check` proves file by file. The copy becomes the
|
package/LICENSE-BLENDER
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
NOTICE — WHAT THIS PACKAGE IS, AND WHOSE IT IS
|
|
2
2
|
|
|
3
|
-
This package (`@
|
|
3
|
+
This package (`@volter/editor-blender`) is the EDITOR-SIDE half of Blender in the tab:
|
|
4
4
|
the Model document and its presenters, the Properties tabs, the outliner, the
|
|
5
5
|
node and UV editors, the display transforms, the sky, the status items, the
|
|
6
6
|
layouts, the finder and the Blender LOOK. Our code here is ours. Its ICON
|
|
@@ -57,7 +57,7 @@ package is:
|
|
|
57
57
|
that means the whole package must be conveyed under terms that satisfy both.
|
|
58
58
|
Both licence texts follow: the AGPL first, then the GPL.
|
|
59
59
|
|
|
60
|
-
This package is NOT `@
|
|
60
|
+
This package is NOT `@volter/blender-engine`, which is Blender ITSELF compiled to
|
|
61
61
|
WebAssembly and is GPL-3.0-or-later in whole (`packages/blender-engine/LICENSE`).
|
|
62
62
|
This package imports only that engine's wire TYPES plus the one tab-side handle
|
|
63
63
|
that owns the worker; the process boundary is the package boundary
|
package/NOTICE
CHANGED
|
@@ -6,10 +6,10 @@ LICENSE-BLENDER preserves the integration license and attribution. The
|
|
|
6
6
|
separately installed Blender engine has its own GPL license and
|
|
7
7
|
corresponding-source requirements.
|
|
8
8
|
|
|
9
|
-
Transferred from the AGPL-3.0-only
|
|
9
|
+
Transferred from the AGPL-3.0-only volter-engine repository at revision
|
|
10
10
|
09c2749ce:
|
|
11
11
|
- packages/game-editor (the product entry and its create presets)
|
|
12
|
-
-
|
|
12
|
+
- the project scaffolder package (now node/scaffold)
|
|
13
13
|
- packages/editor/template (template/)
|
|
14
14
|
- packages/editor/template-dotfiles (template-dotfiles/)
|
|
15
15
|
- packages/editor/catalog/project-source and catalog/entries (catalog/)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The standalone boot's `canvas` root mount: a `@pixi/react` `<Application>` with every `pixi.js`
|
|
3
|
+
* class registered first, as the editor's own canvas mount registers them (so a node the editor
|
|
4
|
+
* created, a TilingSprite or a BitmapText, mounts here too). Only a project with a `canvas` root
|
|
5
|
+
* carries this file and the two packages; `main.ts` reaches it through the manifest's generated
|
|
6
|
+
* module, so a game without a 2D scene imports no Pixi at all.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { Application, extend } from '@pixi/react';
|
|
10
|
+
import * as PIXI from 'pixi.js';
|
|
11
|
+
import { type ComponentType, createElement } from 'react';
|
|
12
|
+
import { createRoot } from 'react-dom/client';
|
|
13
|
+
|
|
14
|
+
extend(PIXI as unknown as Parameters<typeof extend>[0]);
|
|
15
|
+
|
|
16
|
+
export interface CanvasMountOptions {
|
|
17
|
+
/** The bottom world clears opaque; a world stacked above it clears transparent. */
|
|
18
|
+
readonly bottom: boolean;
|
|
19
|
+
/** Pixi's own hit test for interactive objects, handed to the boot's input routing. */
|
|
20
|
+
readonly onHitTest: (canvas: HTMLCanvasElement, hit: (x: number, y: number) => boolean) => void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function mountCanvasRoot(layer: HTMLElement, Entry: ComponentType, options: CanvasMountOptions): void {
|
|
24
|
+
createRoot(layer).render(
|
|
25
|
+
createElement(
|
|
26
|
+
Application,
|
|
27
|
+
{
|
|
28
|
+
resizeTo: layer,
|
|
29
|
+
antialias: true,
|
|
30
|
+
resolution: globalThis.devicePixelRatio ?? 1,
|
|
31
|
+
autoDensity: true,
|
|
32
|
+
backgroundAlpha: options.bottom ? 1 : 0,
|
|
33
|
+
onInit: (app) => {
|
|
34
|
+
// Pixi points its boundary at the last rendered scene inside its own pointer handlers.
|
|
35
|
+
options.onHitTest(app.canvas, (x, y) => {
|
|
36
|
+
const rendered = app.renderer.lastObjectRendered;
|
|
37
|
+
if (!rendered) return false;
|
|
38
|
+
app.renderer.events.rootBoundary.rootTarget = rendered;
|
|
39
|
+
return app.renderer.events.rootBoundary.hitTest(x, y) !== null;
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
createElement(Entry),
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Graphics } from 'pixi.js';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This game's 2D scene: a `canvas` root, ordinary `@pixi/react` source, 2D game rendering (sprites,
|
|
6
|
+
* tilemaps, the 2D world). Not its UI: menus and the HUD are the React `dom` root.
|
|
7
|
+
*/
|
|
8
|
+
export default function Scene2D() {
|
|
9
|
+
const draw = useCallback((graphics: Graphics) => {
|
|
10
|
+
graphics.clear();
|
|
11
|
+
graphics.rect(-40, -40, 80, 80).fill({ color: 0x579eff });
|
|
12
|
+
}, []);
|
|
13
|
+
return (
|
|
14
|
+
<pixiContainer label="Scene">
|
|
15
|
+
<pixiGraphics label="Block" x={160} y={120} draw={draw} />
|
|
16
|
+
</pixiContainer>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"three-bvh-csg": "^0.0.18",
|
|
27
27
|
"three-mesh-bvh": "^0.9.12"
|
|
28
28
|
},
|
|
29
|
-
"
|
|
29
|
+
"volterTools": ["./src/tools/bake-module.tool.ts", "./src/tools/bake-preview.tool.ts"]
|
|
30
30
|
},
|
|
31
31
|
"requires": [],
|
|
32
32
|
"skills": [],
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Blender-style modeling \u2014 TWO PACKAGES. `@volter/blender-engine` is Blender itself, compiled to WebAssembly and running headless in the editor tab's worker (GPL-3.0-or-later, because Blender is); `@volter/editor-blender` is the editor-side half that drives it: the Model document (a `.blend` the engine opens, edits and saves), the `modelsFromBlendFiles` finder, the display transforms and the Blender look \u2014 style, keymap, palette, icons and the Model/Sculpt/Texture layouts (ARCHITECTURE-CORE \u00a7Blender north star). Adding this capability declares both dependencies and copies in the starter model: `src/models/cube.blend` \u2014 a real Blender document \u2014 and `src/models/cube.py`, the bpy script that authored it, which stays in the project as the asset's source. Select the finder in `
|
|
2
|
+
"description": "Blender-style modeling \u2014 TWO PACKAGES. `@volter/blender-engine` is Blender itself, compiled to WebAssembly and running headless in the editor tab's worker (GPL-3.0-or-later, because Blender is); `@volter/editor-blender` is the editor-side half that drives it: the Model document (a `.blend` the engine opens, edits and saves), the `modelsFromBlendFiles` finder, the display transforms and the Blender look \u2014 style, keymap, palette, icons and the Model/Sculpt/Texture layouts (ARCHITECTURE-CORE \u00a7Blender north star). Adding this capability declares both dependencies and copies in the starter model: `src/models/cube.blend` \u2014 a real Blender document \u2014 and `src/models/cube.py`, the bpy script that authored it, which stays in the project as the asset's source. Select the finder in `volter.adapter.ts`: `{ finder: 'modelsFromBlendFiles', include: ['src/models/**/*.blend'] }`.",
|
|
3
3
|
"files": [],
|
|
4
4
|
"id": "blender",
|
|
5
5
|
"packageJson": {
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@volter/editor-blender": "0.1.
|
|
8
|
-
"@volter/blender-engine": "0.1.
|
|
7
|
+
"@volter/editor-blender": "0.1.12",
|
|
8
|
+
"@volter/blender-engine": "0.1.10"
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
11
|
"requires": [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Music composed as code with the editor's DAW, delivered as mastered audio. Adds @volter/dawproject (a piece is a React component of DAWproject elements) and @volter/editor-dawproject (the piece document, the renderer and the checks), the
|
|
2
|
+
"description": "Music composed as code with the editor's DAW, delivered as mastered audio. Adds @volter/dawproject (a piece is a React component of DAWproject elements) and @volter/editor-dawproject (the piece document, the renderer and the checks), the volter-music skill, and src/lib/music/music-player.ts, which plays a render's loops, section loops switched on the bar line, stems and stingers through the game's own Web Audio graph. Selects the piece finder (src/music/**/*.tsx) in volter.adapter.ts.",
|
|
3
3
|
"documents": [
|
|
4
4
|
{
|
|
5
5
|
"finder": "piecesFromModules",
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"id": "music",
|
|
16
16
|
"packageJson": {
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@volter/dawproject": "0.5.
|
|
19
|
-
"@volter/editor-dawproject": "0.5.
|
|
18
|
+
"@volter/dawproject": "0.5.69",
|
|
19
|
+
"@volter/editor-dawproject": "0.5.69"
|
|
20
20
|
},
|
|
21
|
-
"
|
|
21
|
+
"volterTools": [
|
|
22
22
|
"./src/tools/music-render.tool.ts"
|
|
23
23
|
]
|
|
24
24
|
},
|
|
25
25
|
"requires": [],
|
|
26
26
|
"skills": [
|
|
27
|
-
"
|
|
27
|
+
"volter-music"
|
|
28
28
|
],
|
|
29
29
|
"title": "Music (rendered pieces)",
|
|
30
|
-
"version": "0.4.
|
|
30
|
+
"version": "0.4.2"
|
|
31
31
|
}
|
|
@@ -5,7 +5,7 @@ Copyright (c) 2026 Volter AI, Inc.
|
|
|
5
5
|
THIS SUBTREE IS NOT AGPL. It sits inside `packages/editor`, which is
|
|
6
6
|
AGPL-3.0-only, and it is deliberately excluded from that grant and licensed MIT
|
|
7
7
|
instead — because every file here is COPIED, byte for byte, into projects that
|
|
8
|
-
are not ours. `
|
|
8
|
+
are not ours. `volter-game-editor add <id>` copies a capability's declared files into a user's
|
|
9
9
|
game; `npm run capabilities:sync` copies the same bytes into the MIT starter
|
|
10
10
|
template (`packages/editor/template/`). The copy becomes the project's, editing
|
|
11
11
|
it is the entire point (the shadcn model), and the person who edits it must be
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* The `bake` CONFIGURATION KIND (ARCHITECTURE-CORE §The project model): a
|
|
3
3
|
* build-role configuration that bakes one project-authored Object3D module
|
|
4
4
|
* into a GLB — the bake capability's own `project.bake.module` tool, run by
|
|
5
|
-
* the host as a build. Declare one in `
|
|
5
|
+
* the host as a build. Declare one in `volter.project.json`:
|
|
6
6
|
*
|
|
7
7
|
* { "id": "cube-glb", "kind": "bake", "modulePath": "src/models/cube.ts", "name": "cube" }
|
|
8
8
|
*
|
|
9
|
-
* and
|
|
9
|
+
* and Build Profiles (Export) bakes it. This module is a plain
|
|
10
10
|
* object the HOST registers; it mounts no UI.
|
|
11
11
|
*/
|
|
12
12
|
|
|
@@ -10,7 +10,7 @@ import type { BuilderState } from './builder-state';
|
|
|
10
10
|
*
|
|
11
11
|
* This is a plain helper with explicit inputs and outputs — NOT a registry, base
|
|
12
12
|
* class, or generator kind. Each lib still owns its own contribution file and
|
|
13
|
-
* its own `
|
|
13
|
+
* its own `volterTools` entry; the file just shrinks to the handful of facts that
|
|
14
14
|
* are genuinely its own (what to build, what it is called, and where its
|
|
15
15
|
* source lives).
|
|
16
16
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CSSProperties } from 'react';
|
|
2
2
|
|
|
3
|
-
export const hintStyle: CSSProperties = { color: 'var(--
|
|
3
|
+
export const hintStyle: CSSProperties = { color: 'var(--volter-content-muted)', fontSize: 11 };
|
|
4
4
|
export const fieldLabelStyle: CSSProperties = { fontSize: 12, fontWeight: 600 };
|
|
5
5
|
export const inputStyle: CSSProperties = { width: '100%', minWidth: 0, boxSizing: 'border-box' };
|
|
6
6
|
|
|
@@ -36,10 +36,10 @@ export function BuilderSliderRow({
|
|
|
36
36
|
step={step}
|
|
37
37
|
value={value}
|
|
38
38
|
onChange={(event) => onChange(Number(event.target.value))}
|
|
39
|
-
style={{ width: '100%', minWidth: 0, accentColor: 'var(--
|
|
39
|
+
style={{ width: '100%', minWidth: 0, accentColor: 'var(--volter-accent)' }}
|
|
40
40
|
/>
|
|
41
41
|
<input
|
|
42
|
-
className="
|
|
42
|
+
className="volter-input"
|
|
43
43
|
type="number"
|
|
44
44
|
min={min}
|
|
45
45
|
max={max}
|
|
@@ -115,8 +115,8 @@ export async function resolveProjectModule(
|
|
|
115
115
|
* from them). It is not a new convention invented here: `bakeObject3DSource`
|
|
116
116
|
* has always taken exactly `{ root, animations, dispose }` from its `build`
|
|
117
117
|
* callback, so the bake lane consumed this shape while the MODULE lane —
|
|
118
|
-
* `project.bake.module`, `project.bake.preview`, `
|
|
119
|
-
* — refused it. Measured (cold fox, 2026-08-29): `
|
|
118
|
+
* `project.bake.module`, `project.bake.preview`, `volter-game-editor screenshot <module>`
|
|
119
|
+
* — refused it. Measured (cold fox, 2026-08-29): `volter-game-editor screenshot
|
|
120
120
|
* src/lib/fox/generate.ts` died with "export 'createFox' must return a
|
|
121
121
|
* THREE.Object3D, got object", closing the fast look door to every
|
|
122
122
|
* parametric lib including the kit's own worked examples.
|
|
@@ -172,7 +172,7 @@ function asModuleBuild(built: unknown): ModuleBuild | undefined {
|
|
|
172
172
|
* editor server, and it is a ONE-SHOT door: Node's ESM cache keys on the URL
|
|
173
173
|
* and never invalidates, so inside a long-lived server it returned the first
|
|
174
174
|
* version of `src/models/barrel.ts` for every later look until the server was
|
|
175
|
-
* restarted (the blind modeling bench measured three `
|
|
175
|
+
* restarted (the blind modeling bench measured three `volter-game-editor restart`s in one
|
|
176
176
|
* barrel, 2026-09-05).
|
|
177
177
|
*/
|
|
178
178
|
export async function buildFromModule(
|
|
@@ -198,7 +198,7 @@ export async function buildFromModule(
|
|
|
198
198
|
}
|
|
199
199
|
// A MODEL MODULE's builder is `build` (`lib/mesh/geometry`'s contract), so a
|
|
200
200
|
// caller asking for the default export of a module that has none but has
|
|
201
|
-
// `build` gets the model — `
|
|
201
|
+
// `build` gets the model — `volter-game-editor screenshot src/models/cube.ts` needs no flag.
|
|
202
202
|
const exp = mod[exportName] ?? (exportName === 'default' ? mod['build'] : undefined);
|
|
203
203
|
if (exp === undefined) {
|
|
204
204
|
throw new ToolError(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The game's MUSIC, played from a piece's render (`render-piece`'s output folder): the looped
|
|
3
|
-
* mix, a section loop per `<Marker>` (`--sections`), the stems,
|
|
4
|
-
* (`--one-shot`), all through the game's own Web Audio graph.
|
|
3
|
+
* mix, a section loop per `<Marker>` (`--sections`), a loop per launcher `<Scene>`, the stems,
|
|
4
|
+
* and one-shot stingers (`--one-shot`), all through the game's own Web Audio graph.
|
|
5
5
|
*
|
|
6
6
|
* horizontal `queue('Battle')` switches loops on the next bar line of what is playing
|
|
7
7
|
* (`barSeconds` in the report), or at its loop end; the old loop fades out
|
|
@@ -27,6 +27,8 @@ export interface MusicRender {
|
|
|
27
27
|
readonly barSeconds: readonly number[];
|
|
28
28
|
/** A section per marker: `start` is its second in the whole piece, where its loop begins. */
|
|
29
29
|
readonly sections?: readonly { readonly name: string; readonly start: number; readonly seconds: number; readonly file: string; readonly fileM4a?: string }[];
|
|
30
|
+
/** A loop per launcher scene (one state of the music), `bars` whole bars from its own start. */
|
|
31
|
+
readonly scenes?: readonly { readonly name: string; readonly bars: number; readonly seconds: number; readonly file: string; readonly fileM4a?: string }[];
|
|
30
32
|
readonly stems?: { readonly files?: readonly { readonly track: string; readonly file: string; readonly fileM4a?: string }[] };
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -35,7 +37,7 @@ export interface MusicRender {
|
|
|
35
37
|
* that cannot decode Vorbis (Safari on iOS before 17.4) gets the same loop from its `.m4a`.
|
|
36
38
|
*/
|
|
37
39
|
export async function loadMusic(context: BaseAudioContext, baseUrl: string, render: MusicRender): Promise<Map<string, AudioBuffer>> {
|
|
38
|
-
const entries = [render, ...(render.sections ?? []), ...(render.stems?.files ?? [])];
|
|
40
|
+
const entries = [render, ...(render.sections ?? []), ...(render.scenes ?? []), ...(render.stems?.files ?? [])];
|
|
39
41
|
const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
|
|
40
42
|
const decode = async (file: string): Promise<AudioBuffer> => {
|
|
41
43
|
const response = await fetch(new URL(file, base));
|
|
@@ -65,7 +67,7 @@ interface Playing {
|
|
|
65
67
|
export interface MusicPlayer {
|
|
66
68
|
/** The player's output; connect it where the game's music bus is. */
|
|
67
69
|
readonly output: GainNode;
|
|
68
|
-
/** Start a section's loop (by marker name), or the whole piece's with `null`, at `when` (now). */
|
|
70
|
+
/** Start a section's loop (by marker name) or a scene's (by scene name), or the whole piece's with `null`, at `when` (now). */
|
|
69
71
|
play(section: string | null, options?: { stems?: boolean; when?: number }): void;
|
|
70
72
|
/** Switch to another loop at the next bar line, or at the playing loop's end. Returns the context time it switches. */
|
|
71
73
|
queue(section: string | null, options?: { at?: 'bar' | 'end'; fade?: number; stems?: boolean }): number;
|
|
@@ -104,20 +106,24 @@ export function createMusicPlayer(options: {
|
|
|
104
106
|
};
|
|
105
107
|
|
|
106
108
|
const start = (name: string | null, stems: boolean, when: number): Playing => {
|
|
107
|
-
const section = name === null ?
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
|
|
109
|
+
const section = name === null ? undefined : render.sections?.find((candidate) => candidate.name === name);
|
|
110
|
+
const scene = name === null ? undefined : render.scenes?.find((candidate) => candidate.name === name);
|
|
111
|
+
if (section && scene) throw new Error(`"${name}" names both a section and a scene in this render; rename one of them.`);
|
|
112
|
+
if (name !== null && !section && !scene) {
|
|
113
|
+
throw new Error(`No section or scene "${name}" in this render (sections render with --sections; scenes always render).`);
|
|
114
|
+
}
|
|
115
|
+
if (stems && (section || scene)) throw new Error('Stems are rendered for the whole piece, not per section or scene.');
|
|
116
|
+
const files = stems ? (render.stems?.files ?? []).map((stem) => [stem.track, stem.file] as const) : [[name ?? 'mix', (section ?? scene)?.file ?? render.file] as const];
|
|
111
117
|
if (files.length === 0) throw new Error('This render has no stems.');
|
|
112
118
|
// The loop is the decoded buffer's own length (the context may resample the file); its bar
|
|
113
119
|
// lines are the piece's that fall inside it, from its start. A marker off a downbeat starts a
|
|
114
120
|
// loop mid-bar, and its bar lines are still the piece's.
|
|
115
121
|
const seconds = buffer(files[0]![1]).duration;
|
|
116
122
|
const from = section?.start ?? 0;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
seconds,
|
|
120
|
-
|
|
123
|
+
// A scene's loop is its own: its bar lines divide it evenly, from its start.
|
|
124
|
+
const bars = scene
|
|
125
|
+
? [...Array.from({ length: scene.bars }, (_, bar) => (bar * seconds) / scene.bars), seconds]
|
|
126
|
+
: [...render.barSeconds.map((second) => second - from).filter((second) => second >= -1e-6 && second < seconds - 1e-3), seconds];
|
|
121
127
|
const gain = context.createGain();
|
|
122
128
|
gain.connect(output);
|
|
123
129
|
const sources = new Map<string, { source: AudioBufferSourceNode; gain: GainNode }>();
|
|
@@ -81,13 +81,13 @@ function cubeUvSamplingFunctions(): string {
|
|
|
81
81
|
.replace(
|
|
82
82
|
/\b(textureCubeUV|bilinearCubeUV)\(([^)]*)\)/g,
|
|
83
83
|
(_match, name: string, args: string) =>
|
|
84
|
-
`${name === 'textureCubeUV' ? '
|
|
84
|
+
`${name === 'textureCubeUV' ? 'volterTextureCubeUV' : 'volterBilinearCubeUV'}(${args.trim()}, ${args.includes('sampler2D') ? 'vec3 ' : ''}volterAtlasSize)`,
|
|
85
85
|
)
|
|
86
|
-
.replace(/\b(getFace|getUV|roughnessToMip)\b/g, '
|
|
87
|
-
.replace(/\bcubeUV_(\w+)\b/g, '
|
|
88
|
-
.replaceAll('CUBEUV_MAX_MIP', '
|
|
89
|
-
.replaceAll('CUBEUV_TEXEL_WIDTH', '
|
|
90
|
-
.replaceAll('CUBEUV_TEXEL_HEIGHT', '
|
|
86
|
+
.replace(/\b(getFace|getUV|roughnessToMip)\b/g, 'volter$1')
|
|
87
|
+
.replace(/\bcubeUV_(\w+)\b/g, 'volterCubeUV_$1')
|
|
88
|
+
.replaceAll('CUBEUV_MAX_MIP', 'volterAtlasSize.z')
|
|
89
|
+
.replaceAll('CUBEUV_TEXEL_WIDTH', 'volterAtlasSize.x')
|
|
90
|
+
.replaceAll('CUBEUV_TEXEL_HEIGHT', 'volterAtlasSize.y');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -104,21 +104,21 @@ function atlasSizeOf(texture: Texture | null): Vector3 {
|
|
|
104
104
|
|
|
105
105
|
function probeWeight(index: number): string {
|
|
106
106
|
return `
|
|
107
|
-
vec3 lp = (
|
|
107
|
+
vec3 lp = (volterProbeWorldToLocal[${index}] * vec4(${IBL_WORLD_POSITION}, 1.0)).xyz;
|
|
108
108
|
float weight = 0.0;
|
|
109
|
-
if (
|
|
110
|
-
vec3 edge =
|
|
109
|
+
if (volterProbeShape[${index}] < 0.5) {
|
|
110
|
+
vec3 edge = volterProbeExtents[${index}] - abs(lp);
|
|
111
111
|
if (all(greaterThanEqual(edge, vec3(0.0)))) {
|
|
112
112
|
float nearest = min(edge.x, min(edge.y, edge.z));
|
|
113
|
-
weight =
|
|
114
|
-
? clamp(nearest /
|
|
113
|
+
weight = volterProbeBlendDistance[${index}] > 0.0001
|
|
114
|
+
? clamp(nearest / volterProbeBlendDistance[${index}], 0.0, 1.0)
|
|
115
115
|
: 1.0;
|
|
116
116
|
}
|
|
117
117
|
} else {
|
|
118
|
-
float edge =
|
|
118
|
+
float edge = volterProbeRadius[${index}] - length(lp);
|
|
119
119
|
if (edge >= 0.0) {
|
|
120
|
-
weight =
|
|
121
|
-
? clamp(edge /
|
|
120
|
+
weight = volterProbeBlendDistance[${index}] > 0.0001
|
|
121
|
+
? clamp(edge / volterProbeBlendDistance[${index}], 0.0, 1.0)
|
|
122
122
|
: 1.0;
|
|
123
123
|
}
|
|
124
124
|
}`;
|
|
@@ -126,29 +126,29 @@ function probeWeight(index: number): string {
|
|
|
126
126
|
|
|
127
127
|
function probeWeightBlock(index: number): string {
|
|
128
128
|
return `
|
|
129
|
-
if (
|
|
130
|
-
if (weight > 0.0) bestPriority = max(bestPriority,
|
|
129
|
+
if (volterProbeReady[${index}] > 0.5) {${probeWeight(index)}
|
|
130
|
+
if (weight > 0.0) bestPriority = max(bestPriority, volterProbePriority[${index}]);
|
|
131
131
|
}`;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
function probeSampleBlock(index: number, roughness: string, direction: string): string {
|
|
135
135
|
return `
|
|
136
|
-
if (
|
|
136
|
+
if (volterProbeReady[${index}] > 0.5 && abs(volterProbePriority[${index}] - bestPriority) < 0.001) {${probeWeight(index)}
|
|
137
137
|
if (weight > 0.0) {
|
|
138
|
-
vec3 probeDirection = (
|
|
139
|
-
if (
|
|
140
|
-
vec3 boxPos = lp -
|
|
138
|
+
vec3 probeDirection = (volterProbeWorldToLocal[${index}] * vec4(${direction}, 0.0)).xyz;
|
|
139
|
+
if (volterProbeParallax[${index}] > 0.5) {
|
|
140
|
+
vec3 boxPos = lp - volterProbeParallaxOffset[${index}];
|
|
141
141
|
vec3 safeDirection = sign(probeDirection) * max(abs(probeDirection), vec3(0.00001));
|
|
142
|
-
vec3 rayMax = (
|
|
143
|
-
vec3 rayMin = (-
|
|
142
|
+
vec3 rayMax = (volterProbeParallaxExtents[${index}] - boxPos) / safeDirection;
|
|
143
|
+
vec3 rayMin = (-volterProbeParallaxExtents[${index}] - boxPos) / safeDirection;
|
|
144
144
|
vec3 rayDistance = mix(rayMin, rayMax, greaterThan(safeDirection, vec3(0.0)));
|
|
145
145
|
float nearestFace = min(rayDistance.x, min(rayDistance.y, rayDistance.z));
|
|
146
146
|
probeDirection = boxPos + safeDirection * nearestFace
|
|
147
|
-
+
|
|
147
|
+
+ volterProbeParallaxOffset[${index}] - volterProbeCaptureOffset[${index}];
|
|
148
148
|
}
|
|
149
|
-
accumulated +=
|
|
150
|
-
|
|
151
|
-
).rgb *
|
|
149
|
+
accumulated += volterTextureCubeUV(
|
|
150
|
+
volterProbeMap${index}, probeDirection, ${roughness}, volterProbeAtlasSize[${index}]
|
|
151
|
+
).rgb * volterProbeIntensity[${index}] * weight;
|
|
152
152
|
totalWeight += weight;
|
|
153
153
|
}
|
|
154
154
|
}`;
|
|
@@ -157,7 +157,7 @@ function probeSampleBlock(index: number, roughness: string, direction: string):
|
|
|
157
157
|
function volumeReflectionShader(probeCount: number): string {
|
|
158
158
|
const samplers = Array.from(
|
|
159
159
|
{ length: probeCount },
|
|
160
|
-
(_, index) => `uniform sampler2D
|
|
160
|
+
(_, index) => `uniform sampler2D volterProbeMap${index};`,
|
|
161
161
|
).join('\n');
|
|
162
162
|
const weights = Array.from({ length: probeCount }, (_, index) => probeWeightBlock(index)).join(
|
|
163
163
|
'\n',
|
|
@@ -171,25 +171,25 @@ function volumeReflectionShader(probeCount: number): string {
|
|
|
171
171
|
return `${baseIblFunctions()}
|
|
172
172
|
${cubeUvSamplingFunctions()}
|
|
173
173
|
#ifdef USE_ENVMAP
|
|
174
|
-
uniform float
|
|
175
|
-
uniform mat4
|
|
176
|
-
uniform vec3
|
|
177
|
-
uniform vec3
|
|
178
|
-
uniform vec3
|
|
179
|
-
uniform vec3
|
|
180
|
-
uniform vec3
|
|
181
|
-
uniform float
|
|
182
|
-
uniform float
|
|
183
|
-
uniform float
|
|
184
|
-
uniform float
|
|
185
|
-
uniform float
|
|
186
|
-
uniform float
|
|
187
|
-
uniform float
|
|
174
|
+
uniform float volterProbeReady[${probeCount}];
|
|
175
|
+
uniform mat4 volterProbeWorldToLocal[${probeCount}];
|
|
176
|
+
uniform vec3 volterProbeExtents[${probeCount}];
|
|
177
|
+
uniform vec3 volterProbeParallaxExtents[${probeCount}];
|
|
178
|
+
uniform vec3 volterProbeParallaxOffset[${probeCount}];
|
|
179
|
+
uniform vec3 volterProbeCaptureOffset[${probeCount}];
|
|
180
|
+
uniform vec3 volterProbeAtlasSize[${probeCount}];
|
|
181
|
+
uniform float volterProbeShape[${probeCount}];
|
|
182
|
+
uniform float volterProbeRadius[${probeCount}];
|
|
183
|
+
uniform float volterProbeBlendDistance[${probeCount}];
|
|
184
|
+
uniform float volterProbePriority[${probeCount}];
|
|
185
|
+
uniform float volterProbeIntensity[${probeCount}];
|
|
186
|
+
uniform float volterProbeParallax[${probeCount}];
|
|
187
|
+
uniform float volterBaseEnvironment;
|
|
188
188
|
${samplers}
|
|
189
189
|
|
|
190
190
|
vec3 getIBLIrradiance(const in vec3 normal) {
|
|
191
191
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
192
|
-
vec3 baseIrradiance = getBaseIBLIrradiance(normal) *
|
|
192
|
+
vec3 baseIrradiance = getBaseIBLIrradiance(normal) * volterBaseEnvironment;
|
|
193
193
|
vec3 worldNormal = inverseTransformDirection(normal, viewMatrix);
|
|
194
194
|
float bestPriority = -1000000.0;
|
|
195
195
|
${weights}
|
|
@@ -206,7 +206,7 @@ ${irradiance}
|
|
|
206
206
|
|
|
207
207
|
vec3 getIBLRadiance(const in vec3 viewDir, const in vec3 normal, const in float roughness) {
|
|
208
208
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
209
|
-
vec3 baseRadiance = getBaseIBLRadiance(viewDir, normal, roughness) *
|
|
209
|
+
vec3 baseRadiance = getBaseIBLRadiance(viewDir, normal, roughness) * volterBaseEnvironment;
|
|
210
210
|
vec3 reflected = reflect(-viewDir, normal);
|
|
211
211
|
reflected = normalize(mix(reflected, normal, roughness * roughness));
|
|
212
212
|
vec3 worldReflect = inverseTransformDirection(reflected, viewMatrix);
|
|
@@ -236,60 +236,60 @@ function writeProbeUniforms(
|
|
|
236
236
|
shader.uniforms[name] = { value };
|
|
237
237
|
};
|
|
238
238
|
values(
|
|
239
|
-
'
|
|
239
|
+
'volterProbeReady',
|
|
240
240
|
probes.map((probe) => Number(probe.ready && !capturing)),
|
|
241
241
|
);
|
|
242
242
|
values(
|
|
243
|
-
'
|
|
243
|
+
'volterProbeWorldToLocal',
|
|
244
244
|
probes.map((probe) => probe.worldToLocal),
|
|
245
245
|
);
|
|
246
246
|
values(
|
|
247
|
-
'
|
|
247
|
+
'volterProbeExtents',
|
|
248
248
|
probes.map((probe) => probe.extents),
|
|
249
249
|
);
|
|
250
250
|
values(
|
|
251
|
-
'
|
|
251
|
+
'volterProbeParallaxExtents',
|
|
252
252
|
probes.map((probe) => probe.parallaxExtents),
|
|
253
253
|
);
|
|
254
254
|
values(
|
|
255
|
-
'
|
|
255
|
+
'volterProbeParallaxOffset',
|
|
256
256
|
probes.map((probe) => probe.parallaxOffset),
|
|
257
257
|
);
|
|
258
258
|
values(
|
|
259
|
-
'
|
|
259
|
+
'volterProbeCaptureOffset',
|
|
260
260
|
probes.map((probe) => probe.captureOffset),
|
|
261
261
|
);
|
|
262
262
|
values(
|
|
263
|
-
'
|
|
263
|
+
'volterProbeAtlasSize',
|
|
264
264
|
probes.map((probe) => atlasSizeOf(probe.texture)),
|
|
265
265
|
);
|
|
266
266
|
values(
|
|
267
|
-
'
|
|
267
|
+
'volterProbeShape',
|
|
268
268
|
probes.map((probe) => Number(probe.mark.config.shape === 'sphere')),
|
|
269
269
|
);
|
|
270
270
|
values(
|
|
271
|
-
'
|
|
271
|
+
'volterProbeRadius',
|
|
272
272
|
probes.map((probe) => Math.max(0.01, probe.mark.config.radius)),
|
|
273
273
|
);
|
|
274
274
|
values(
|
|
275
|
-
'
|
|
275
|
+
'volterProbeBlendDistance',
|
|
276
276
|
probes.map((probe) => Math.max(0, probe.mark.config.blendDistance)),
|
|
277
277
|
);
|
|
278
278
|
values(
|
|
279
|
-
'
|
|
279
|
+
'volterProbePriority',
|
|
280
280
|
probes.map((probe) => probe.mark.config.priority),
|
|
281
281
|
);
|
|
282
282
|
values(
|
|
283
|
-
'
|
|
283
|
+
'volterProbeIntensity',
|
|
284
284
|
probes.map((probe) => Math.max(0, probe.mark.config.intensity)),
|
|
285
285
|
);
|
|
286
286
|
values(
|
|
287
|
-
'
|
|
287
|
+
'volterProbeParallax',
|
|
288
288
|
probes.map((probe) => Number(probe.mark.config.parallaxProjection)),
|
|
289
289
|
);
|
|
290
|
-
values('
|
|
290
|
+
values('volterBaseEnvironment', baseEnvironment ? 1 : 0);
|
|
291
291
|
probes.forEach((probe, index) => {
|
|
292
|
-
values(`
|
|
292
|
+
values(`volterProbeMap${index}`, probe.texture);
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
295
|
|
|
@@ -377,7 +377,7 @@ function ownVolumeReflectionMaterial<T extends MeshStandardMaterial>(
|
|
|
377
377
|
installedCount = count;
|
|
378
378
|
override = overrideMaterialIbl(material, {
|
|
379
379
|
fragment: () => volumeReflectionShader(count),
|
|
380
|
-
cacheKey: () => `
|
|
380
|
+
cacheKey: () => `volter-volume-reflections:${count}`,
|
|
381
381
|
onCompile: (shader) =>
|
|
382
382
|
writeProbeUniforms(shader, eligible, hasBaseEnvironment(), isCapturing),
|
|
383
383
|
});
|
|
@@ -64,7 +64,7 @@ export function Frozen({ name = 'Frozen', children, ...props }: FrozenProps) {
|
|
|
64
64
|
const batch = freezeSubtree(root, name);
|
|
65
65
|
// Degrade LOUDLY — a wrapper that silently declined most of its subtree
|
|
66
66
|
// looks identical to one that worked. Under the dev gate, though: this is
|
|
67
|
-
// an authoring signal (`
|
|
67
|
+
// an authoring signal (`volter-game-editor status` reports console warnings, which is
|
|
68
68
|
// where the building agent already looks), and a player's console is not
|
|
69
69
|
// where it belongs.
|
|
70
70
|
if (import.meta.env.DEV) {
|
|
@@ -82,7 +82,7 @@ export interface FrozenMutationWatch {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
function warnOnConsole(message: string): void {
|
|
85
|
-
// biome-ignore lint/suspicious/noConsole: console is this tripwire's
|
|
85
|
+
// biome-ignore lint/suspicious/noConsole: console is this tripwire's volter-status channel.
|
|
86
86
|
console.warn(message);
|
|
87
87
|
}
|
|
88
88
|
|