@volter/cyclotron 0.5.211 → 0.5.213
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 +232 -1964
- package/LICENSE +2 -3
- package/LICENSE-BLENDER +9 -8
- package/NOTICE +8 -3
- package/README.md +39 -30
- package/dist/.vite/manifest.json +1215 -4338
- package/dist/assets/AudioViewer-B5pkIGXS.js +1 -0
- package/dist/assets/ImageViewer-BPVLEEQ2.js +1 -0
- package/dist/assets/JsonAssetDocument-DuVW9del.js +2 -0
- package/dist/assets/ProjectAuthoringBootstrap-CZJz4Svb.js +2 -0
- package/dist/assets/SourceAssetViewer-LwHBW53R.js +1 -0
- package/dist/assets/VideoViewer-Bfjjp4zH.js +1 -0
- package/dist/assets/client-BLXKEWrR.js +25 -0
- package/dist/assets/index-BKjLHm6K.js +483 -0
- package/dist/assets/index-CJcVFJ-l.css +1 -0
- package/dist/assets/product-CaIfLQVS.js +1 -0
- package/dist/assets/story-capture-C3xmgE62.js +1 -0
- package/dist/assets/volter-sdk-DT0xmh2J.js +1407 -0
- package/dist/assets/volter-sdk-activation-events-B-WERmWU.js +1 -0
- package/dist/assets/volter-sdk-active-project-DvEsy8Q6.js +1 -0
- package/dist/assets/volter-sdk-adapter-editor-config-CQ5V6W-o.js +1 -0
- package/dist/assets/volter-sdk-animation-animation-clock-Cy7j_2qF.js +1 -0
- package/dist/assets/volter-sdk-animation-stage-transport-DoUDq6Gb.js +1 -0
- package/dist/assets/volter-sdk-api-base-Dr1bx5e0.js +1 -0
- package/dist/assets/volter-sdk-api-project-open-D4nPvIPU.js +1 -0
- package/dist/assets/volter-sdk-api-project-source-DoO7WBwQ.js +1 -0
- package/dist/assets/volter-sdk-api-settings-BEHgO5wf.js +1 -0
- package/dist/assets/volter-sdk-asset-capabilities-CGkNwaAe.js +1 -0
- package/dist/assets/volter-sdk-asset-document-write-policy-CzWM1HhK.js +1 -0
- package/dist/assets/volter-sdk-asset-editor-context-BkSK1vL1.js +1 -0
- package/dist/assets/volter-sdk-asset-thumbnails-zSmJgI_x.js +1 -0
- package/dist/assets/volter-sdk-asset-viewers-B-ICvlkR.js +1 -0
- package/dist/assets/volter-sdk-asset-workflow-project-content-C6Ow0R-F.js +1 -0
- package/dist/assets/volter-sdk-authoring-active-adapter-CKuWwxgH.js +1 -0
- package/dist/assets/volter-sdk-authoring-boundary-authoring-adapter-DTwFKBkS.js +1 -0
- package/dist/assets/volter-sdk-authoring-composite-authoring-adapter-iRSbSHpV.js +1 -0
- package/dist/assets/volter-sdk-authoring-consumer-actions-DK9-B-wg.js +1 -0
- package/dist/assets/volter-sdk-authoring-design-time-mount-registry-BQnWcBVe.js +1 -0
- package/dist/assets/volter-sdk-authoring-design-time-roots-BKSmkD7_.js +1 -0
- package/dist/assets/volter-sdk-authoring-layered-pick-C-YvuxEG.js +1 -0
- package/dist/assets/volter-sdk-authoring-no-authoring-adapter-Cv9DD6G0.js +1 -0
- package/dist/assets/volter-sdk-authoring-panel-authoring-BLOrFs8L.js +1 -0
- package/dist/assets/volter-sdk-authoring-react-design-canvas-style-Dr9i31o5.js +1 -0
- package/dist/assets/volter-sdk-authoring-react-story-board-BlCQQM-8.js +1 -0
- package/dist/assets/volter-sdk-authoring-seam-evidence-CjetY_ZG.js +1 -0
- package/dist/assets/volter-sdk-authoring-selection-scope-BxmbC71H.js +1 -0
- package/dist/assets/volter-sdk-authoring-shell-document-ops-DDb8oGx9.js +1 -0
- package/dist/assets/volter-sdk-authoring-stage-root-B50LLhnJ.js +1 -0
- package/dist/assets/volter-sdk-authoring-story-board-chrome-fit-BVV9fbcw.js +1 -0
- package/dist/assets/volter-sdk-authoring-viewport-tool-context-cQafPSkT.js +1 -0
- package/dist/assets/volter-sdk-authoring-viewport-tool-owner-BppqL4f_.js +1 -0
- package/dist/assets/volter-sdk-authoring-world-session-state-BlpdiKod.js +1 -0
- package/dist/assets/volter-sdk-bitmap-label-BbtGPWgP.js +1 -0
- package/dist/assets/volter-sdk-breakpoint-state-DCFuSvgm.js +1 -0
- package/dist/assets/volter-sdk-bytes-codec-CrNeVT4e.js +1 -0
- package/dist/assets/volter-sdk-cancellation-reason-ByOH3mlF.js +1 -0
- package/dist/assets/volter-sdk-canvas-frames-BU8Rqr4J.js +1 -0
- package/dist/assets/volter-sdk-capture-size-D4cNT2XC.js +1 -0
- package/dist/assets/volter-sdk-chrome-registry-qHUiDauw.js +1 -0
- package/dist/assets/volter-sdk-command-result-text-2wzEhQ5t.js +1 -0
- package/dist/assets/volter-sdk-commands-C4RgHEOa.js +1 -0
- package/dist/assets/volter-sdk-component-board-registry-6gFZBkTP.js +1 -0
- package/dist/assets/volter-sdk-components-AssetEditorShell-CQVLedvW.js +1 -0
- package/dist/assets/volter-sdk-components-InspectorCanvasPreview-CN5ROhNT.js +1 -0
- package/dist/assets/volter-sdk-components-SurfaceStateOverlay-Cc9Ov1Ol.js +1 -0
- package/dist/assets/volter-sdk-components-Toolbar-ZoV9Yq_A.js +1 -0
- package/dist/assets/volter-sdk-components-TransientHint-BML2V3uu.js +1 -0
- package/dist/assets/volter-sdk-components-inspector-preview-section-BhDjhUyz.js +1 -0
- package/dist/assets/volter-sdk-components-use-after-paint-BVSO4qjV.js +1 -0
- package/dist/assets/volter-sdk-components-workspace-history-CThvGfsY.js +1 -0
- package/dist/assets/volter-sdk-content-entry-source-registry-CJLVq3tC.js +1 -0
- package/dist/assets/volter-sdk-contribution-surfaces-CeEDmriM.js +1 -0
- package/dist/assets/volter-sdk-contributions-x6j41XZp.js +1 -0
- package/dist/assets/volter-sdk-coverage-design-time-surfaces-D-tNGazo.js +1 -0
- package/dist/assets/volter-sdk-creation-site-registry-64gyrZPD.js +1 -0
- package/dist/assets/volter-sdk-css-numeric-style-CXeWqAoG.js +1 -0
- package/dist/assets/volter-sdk-declared-tools-BAzHxyUW.js +1 -0
- package/dist/assets/volter-sdk-document-areas-4DXjy0el.js +1 -0
- package/dist/assets/volter-sdk-document-layer-B4VYMPZ9.js +1 -0
- package/dist/assets/volter-sdk-document-open-registry-BLDMaEoN.js +1 -0
- package/dist/assets/volter-sdk-document-play-extension-Dv3fyS6K.js +1 -0
- package/dist/assets/volter-sdk-document-probe-drBhAyza.js +1 -0
- package/dist/assets/volter-sdk-document-stage-sessions-CtI9anAf.js +1 -0
- package/dist/assets/volter-sdk-document-viewports-BO0N7VyN.js +1 -0
- package/dist/assets/volter-sdk-editor-commands-BJ9Otxzu.js +1 -0
- package/dist/assets/volter-sdk-editor-console-BaGgfWmH.js +1 -0
- package/dist/assets/volter-sdk-editor-document-probe-D0ZhaXHx.js +1 -0
- package/dist/assets/volter-sdk-editor-mode-B07FDozS.js +1 -0
- package/dist/assets/volter-sdk-editor-runtime-D00Du7hG.js +1 -0
- package/dist/assets/volter-sdk-editor-server-response-C6kOPAsW.js +1 -0
- package/dist/assets/volter-sdk-editor-session-attribution-CggpIFb4.js +1 -0
- package/dist/assets/volter-sdk-editor-view-DEMsxlaT.js +1 -0
- package/dist/assets/volter-sdk-environment-images-OQtFG1kA.js +1 -0
- package/dist/assets/volter-sdk-extension-script-DanTHcyo.js +1 -0
- package/dist/assets/volter-sdk-eyedropper-session-BfVXtjzc.js +1 -0
- package/dist/assets/volter-sdk-files-file-provider-CXL6oCMd.js +1 -0
- package/dist/assets/volter-sdk-files-project-files-SBAE37py.js +1 -0
- package/dist/assets/volter-sdk-framed-document-capture-7TnE8pn1.js +1 -0
- package/dist/assets/volter-sdk-framed-document-driver-C0K3-SRt.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-component-marks-BmJEMvvO.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-kind-icon-CrwdpecY.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-node-rows-FcK7_ULi.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-projection-CKzUOZUa.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-row-media-Czg40Ddi.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-row-model-BGzmcywF.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-rows-VAI0psTR.js +1 -0
- package/dist/assets/volter-sdk-hierarchy-walk-CaVqG7v2.js +1 -0
- package/dist/assets/volter-sdk-history-history-delegate-DH_xBvdh.js +1 -0
- package/dist/assets/volter-sdk-history-history-service-D0n0Gl5Z.js +1 -0
- package/dist/assets/volter-sdk-history-persistence-coordinator-CcywAFdm.js +1 -0
- package/dist/assets/volter-sdk-history-resource-registry-DMTlnwGv.js +1 -0
- package/dist/assets/volter-sdk-history-snapshot-store-BVh1DtBp.js +1 -0
- package/dist/assets/volter-sdk-history-source-history-backend-ulJ-65tX.js +1 -0
- package/dist/assets/volter-sdk-hmr-registration-group-DvMQVKyO.js +1 -0
- package/dist/assets/volter-sdk-hmr-stable-react-context-BMVr5YVk.js +1 -0
- package/dist/assets/volter-sdk-host-D765Py2w.js +1 -0
- package/dist/assets/volter-sdk-hotkeys-TesTKdAZ.js +1 -0
- package/dist/assets/volter-sdk-index-BABXozHr.js +1 -0
- package/dist/assets/volter-sdk-inference-diagnostics-CsDbQ0M5.js +1 -0
- package/dist/assets/volter-sdk-inspection-document-subject-BMRD77Va.js +1 -0
- package/dist/assets/volter-sdk-inspection-group-icons-Wpz-YhkE.js +1 -0
- package/dist/assets/volter-sdk-inspection-model-BVOyStdc.js +1 -0
- package/dist/assets/volter-sdk-inspection-node-media-B8AL8_3F.js +1 -0
- package/dist/assets/volter-sdk-inspection-null-subject-d5bQZCbS.js +1 -0
- package/dist/assets/volter-sdk-inspector-property-grouping-BqrZkwo4.js +1 -0
- package/dist/assets/volter-sdk-inspector-section-registry-C6U15zvC.js +1 -0
- package/dist/assets/volter-sdk-js-heap-CcOnY0kf.js +1 -0
- package/dist/assets/volter-sdk-keymap-presets-CSM-jVcZ.js +1 -0
- package/dist/assets/volter-sdk-layout-arrangements-DHA3uifx.js +1 -0
- package/dist/assets/volter-sdk-layouts-4v9ECCn9.js +1 -0
- package/dist/assets/volter-sdk-light-explorer-model-CPuZjpiR.js +1 -0
- package/dist/assets/volter-sdk-live-seam-evidence-B_RyDaOp.js +1 -0
- package/dist/assets/volter-sdk-live-session-registry-C6gHroaH.js +1 -0
- package/dist/assets/volter-sdk-manifest-project-CVVUDDuL.js +1 -0
- package/dist/assets/volter-sdk-mount-css-scope-DaJoEo3v.js +1 -0
- package/dist/assets/volter-sdk-mount-failure-report-Cm92oiGJ.js +1 -0
- package/dist/assets/volter-sdk-native-selection-style-Bp4IBnA4.js +1 -0
- package/dist/assets/volter-sdk-photograph-notice-C6_gZGpW.js +1 -0
- package/dist/assets/volter-sdk-play-camera-flight-SwlYhOxW.js +1 -0
- package/dist/assets/volter-sdk-product-command-G8kKVJ-i.js +1 -0
- package/dist/assets/volter-sdk-progress-4GGmPvZn.js +1 -0
- package/dist/assets/volter-sdk-project-module-changes-DIrDIHeD.js +1 -0
- package/dist/assets/volter-sdk-project-module-url-BuAUWpus.js +1 -0
- package/dist/assets/volter-sdk-project-output-roots-BON7FOwQ.js +1 -0
- package/dist/assets/volter-sdk-project-tab-census-CO06UOh-.js +1 -0
- package/dist/assets/volter-sdk-renderer-resource-counts-2kLiD8_S.js +1 -0
- package/dist/assets/volter-sdk-scoped-project-css-DA63CYkM.js +1 -0
- package/dist/assets/volter-sdk-selection-CSUq7EiY.js +1 -0
- package/dist/assets/volter-sdk-served-url-B_MypeId.js +1 -0
- package/dist/assets/volter-sdk-settings-settings-provider-CJuWxTB5.js +1 -0
- package/dist/assets/volter-sdk-settings-store-CEFKDj0h.js +1 -0
- package/dist/assets/volter-sdk-shell-store-Cl4sX9p4.js +1 -0
- package/dist/assets/volter-sdk-shell-store-door-DGjybg0J.js +1 -0
- package/dist/assets/volter-sdk-source-conflict-CV8Gk053.js +1 -0
- package/dist/assets/volter-sdk-stage-context-Cb0SaYhi.js +1 -0
- package/dist/assets/volter-sdk-stage-invalidation-VlBciYA0.js +1 -0
- package/dist/assets/volter-sdk-stage-store-registry-BpIy_QKq.js +1 -0
- package/dist/assets/volter-sdk-startup-failure-C_8H4xuP.js +1 -0
- package/dist/assets/volter-sdk-stories-StoryPreviewMount-BUX42gIR.js +1 -0
- package/dist/assets/volter-sdk-stories-compose-project-stories-CkSd4Si5.js +1 -0
- package/dist/assets/volter-sdk-stories-scope-Dndn7MD8.js +1 -0
- package/dist/assets/volter-sdk-stories-story-declared-medium-Byi4XWeJ.js +1 -0
- package/dist/assets/volter-sdk-stories-story-dom-runtime-BS1VPvJ6.js +1 -0
- package/dist/assets/volter-sdk-stories-story-grouping-CpNh4cUf.js +1 -0
- package/dist/assets/volter-sdk-story-document-openers-Ba5jQqay.js +1 -0
- package/dist/assets/volter-sdk-surface-state-BhQ45ars.js +1 -0
- package/dist/assets/volter-sdk-tab-census-D0r0s37y.js +1 -0
- package/dist/assets/volter-sdk-tool-contribution-convention-JCXL6f2w.js +1 -0
- package/dist/assets/volter-sdk-transform-mode-request-Cwk_Kyty.js +1 -0
- package/dist/assets/volter-sdk-transient-hint-BOfFzAV8.js +1 -0
- package/dist/assets/volter-sdk-types-CkT8l5N_.js +1 -0
- package/dist/assets/volter-sdk-ui-source-file-region-resolver-Cfza3eEl.js +1 -0
- package/dist/assets/volter-sdk-ui-source-inspect-CEjmAN75.js +1 -0
- package/dist/assets/volter-sdk-ui-source-source-write-backend-0njgRdI6.js +1 -0
- package/dist/assets/volter-sdk-ui-source-tier-source-write-backend-CpsxorYU.js +1 -0
- package/dist/assets/volter-sdk-viewport-activation-timings-B3hRTu3A.js +1 -0
- package/dist/assets/volter-sdk-viewport-editor-controls-DDBd-VqO.js +1 -0
- package/dist/assets/volter-sdk-viewport-presentation-DRhiAH1h.js +1 -0
- package/dist/assets/volter-sdk-volter-contributions-nlGXjgJZ.js +1 -0
- package/dist/assets/volter-sdk-wait-until-CMvYQmO8.js +1 -0
- package/dist/assets/volter-sdk-widgets-design-system-BJOyO8sO.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-appearance-eVtkxsIm.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-material-BoQP_5SK.js +1 -0
- package/dist/assets/volter-sdk-widgets-icon-set-registry-CP0D74kc.js +1 -0
- package/dist/assets/volter-sdk-widgets-index-De34FpYu.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-_GjMjIGb.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-B7vN7BEd.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-E2J8cpyT.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-D6TERGKs.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-CXR8n-CA.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-CDvfWY4Q.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BgpW8FW8.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-DOOBkXjY.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-1NXWR_gB.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-Cd2-HwFn.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-C4HuSjFu.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-DUU2CCtc.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-D5kwrOUQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-CkFN2SUn.js +1 -0
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-DynpKMMZ.js +1 -0
- package/dist/assets/volter-sdk-widgets-palette-colors-DhL1I42R.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-EUtcZi0Y.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Fields-Bl_eaBej.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-List--NE_1N5-.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-BHXpv7qi.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-BdKa5HGV.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-sFV7f1UP.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CIr5Cs49.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tree-C2YHfddf.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-DCclspnW.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Button-B0YxR4ea.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-B1_SLTuc.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CpHzPdt8.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Dw4knhya.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-BAbRanmE.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-Cj7jKNd4.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-C0DCI5bE.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Layout-gT4Z6mtt.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Menu-9EESAp9m.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Dk-5zqJ8.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Panel-BQWJF-Pb.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-DXvmafCK.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Text-yBrdWK2w.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-CRhefpUL.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-D5Kcb-ZC.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DiG6PEIe.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DhnSxXVK.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-e65mgyAk.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-BVL0mN8g.js +1 -0
- package/dist/assets/volter-sdk-widgets-theme-C-_RU9Ov.js +1 -0
- package/dist/assets/volter-sdk-widgets-z-index-CrJJXeKL.js +1 -0
- package/dist/assets/volter-sdk-worker-call-metrics-BTfmngck.js +1 -0
- package/dist/assets/volter-sdk-workspace-core-utilities-DtHGK9PF.js +1 -0
- package/dist/assets/volter-sdk-workspace-document-ids-COULA7c6.js +1 -0
- package/dist/assets/volter-sdk-workspace-document-registry-6m5csVP7.js +1 -0
- package/dist/assets/volter-sdk-workspace-document-restore-M8ifJMou.js +1 -0
- package/dist/assets/volter-sdk-workspace-host-commands-8Qzej--P.js +1 -0
- package/dist/assets/volter-sdk-workspace-static-panels-Ckk7qUuS.js +1 -0
- package/dist/assets/volter-sdk-workspace-status-registry-BdU0dZAt.js +1 -0
- package/dist/assets/volter-sdk-workspace-utility-registry-BHxymD2l.js +1 -0
- package/dist/assets/volter-sdk-world-canvas-viewport-state-CHO8s9gE.js +1 -0
- package/dist/assets/volter-sdk-world-pan-state-C-9xgzAh.js +1 -0
- package/dist/assets/volter-sdk-write-pipe-CJHg7J4i.js +1 -0
- package/dist/assets/volter-shared-fontawesome-BEv9WEZj.js +1 -0
- package/dist/assets/volter-shared-jsx-dev-runtime-domcKDU3.js +1 -0
- package/dist/assets/volter-shared-jsx-runtime-Cu7pVW-1.js +1 -0
- package/dist/assets/volter-shared-react-BLHga76C.js +1 -0
- package/dist/assets/volter-shared-react-dom-client-vi6WsWu2.js +1 -0
- package/dist/assets/volter-shared-react-dom-kzJVGsQd.js +1 -0
- package/dist/assets/volter-shared-three-BWbOWtM5.js +4220 -0
- package/dist/assets/volter-shared-three-core-DEsIwtOu.js +9 -0
- package/dist/volter-shared-modules.json +227 -0
- package/dist/volter-shared-react.json +6 -6
- package/dist/volter-shared-three.json +2 -1
- package/dist-node/cli.js +2962 -6245
- package/dist-node/create.js +350 -278
- package/package.json +51 -31
- package/src/index.ts +4 -6
- package/src/product-id.d.ts +4 -0
- package/src/styles/maya.style.ts +14 -0
- package/src/styles/substance.style.ts +15 -0
- package/starter/AGENTS.md +216 -156
- package/starter/cube.py +3 -9
- package/starter/film/boards/title.png +0 -0
- package/starter/film/cut.json +12 -0
- package/starter/film/film.json +7 -0
- package/starter/film/music/.gitkeep +0 -0
- package/starter/film/music.json +4 -0
- package/starter/film/script.fountain +16 -0
- package/starter/film/shots.json +26 -0
- package/starter/film/sounds/whoosh.wav +0 -0
- package/starter/film/src/graphics/title.css +33 -0
- package/starter/film/src/graphics/title.stories.tsx +6 -0
- package/starter/film/src/graphics/title.tsx +14 -0
- package/starter/film/src/models/opening.blend +0 -0
- package/starter/film/src/models/opening.py +87 -0
- package/starter/film/story.md +14 -0
- package/starter/film/takes/.gitkeep +0 -0
- package/starter/film/takes.json +4 -0
- package/starter/film-skills/film-cut/SKILL.md +31 -0
- package/starter/film-skills/film-shots/SKILL.md +32 -0
- package/starter/film-skills/film-story/SKILL.md +19 -0
- package/starter/game/levels/MainLevel.tsx +24 -0
- package/starter/game/prefabs/ground/Ground.tsx +24 -0
- package/starter/game/prefabs/ground/ground.blend +0 -0
- package/starter/game/prefabs/ground/ground.glb +0 -0
- package/starter/game/prefabs/ground/ground.py +106 -0
- package/starter/package.json +3 -2
- package/starter/sounds/mix.json +10 -0
- package/dist/assets/BVHLoader-V9f-EnYd.js +0 -1
- package/dist/assets/ColladaLoader-Cp-E7iiV.js +0 -3
- package/dist/assets/EntityModelDocument-DxdGehCz.js +0 -1
- package/dist/assets/EnvironmentAssetDocument-DSTdQdSt.js +0 -1
- package/dist/assets/FBXLoader-CpZqH4xx.js +0 -1
- package/dist/assets/InspectorObjectPreview-De6zT2B7.js +0 -1
- package/dist/assets/LiveModuleDocument-Do5YRpzB.js +0 -2
- package/dist/assets/LutAssetDocument-BjZgLVjR.js +0 -1
- package/dist/assets/MTLLoader-JK_iLZsm.js +0 -2
- package/dist/assets/ModelAssetDocument-Bb5UYcrj.js +0 -1
- package/dist/assets/NonThreeAuthoringBootstrap-CVri610U.js +0 -1
- package/dist/assets/OBJLoader-eGO6iVw8.js +0 -5
- package/dist/assets/Object3DDocumentToolbar-C7HT5nHi.js +0 -1
- package/dist/assets/Object3DPreview-CaOEIIdC.js +0 -2
- package/dist/assets/OrbitControls-DrHRrSFA.js +0 -1
- package/dist/assets/PLYLoader-BCSN1tYw.js +0 -2
- package/dist/assets/QuarksAssetDocument-DzS5h2Bc.js +0 -2
- package/dist/assets/RectAreaLightUniformsLib-HqHjURQQ.js +0 -1
- package/dist/assets/STLLoader-vhCvZeOF.js +0 -1
- package/dist/assets/ShaderAssetDocument-DYXX7aw5.js +0 -1
- package/dist/assets/StageHost-DVnv4TcF.js +0 -1179
- package/dist/assets/TDSLoader-DbUHSEO9.js +0 -1
- package/dist/assets/ToolObject3DPreview-Dad57oap.js +0 -1
- package/dist/assets/ViewportShadingMenu-Bl8IlWGh.js +0 -1
- package/dist/assets/animation-mixers.service-qJ4SNabd.js +0 -1
- package/dist/assets/animation-timeline.utility-wNtZO_cS.js +0 -1
- package/dist/assets/anthropic-DwpKRVGM.svg +0 -1
- package/dist/assets/asset-preview-OYr2sUbO.js +0 -4
- package/dist/assets/blender-display-shaders-BpnqnkG8.lut +0 -0
- package/dist/assets/blender-emscripten-engine-CTeOMKcG.js +0 -2
- package/dist/assets/blender-motion-worker-CtT2cV3V.js +0 -1
- package/dist/assets/blender-node-editor.document-pEhp9MZH.js +0 -1
- package/dist/assets/blender-properties-model-B7O1AR0g.js +0 -1
- package/dist/assets/blender-properties-tab-CBdCQseg.js +0 -3
- package/dist/assets/blender-runtime-host-swgDAdoy.js +0 -7221
- package/dist/assets/blender-runtime.document-BbtLLRrN.js +0 -13
- package/dist/assets/blender-screenshot.menu-CD1Bg0Z-.js +0 -1
- package/dist/assets/blender-timeline.document-DT_mWXnn.js +0 -1
- package/dist/assets/blender-uv-editor.document-9j_SUkf7.js +0 -1
- package/dist/assets/blender-version.status-Z13Xgrj-.js +0 -1
- package/dist/assets/blender-wali-engine-kfyCxO_U.js +0 -2
- package/dist/assets/blender.command-zp1Oe3pY.js +0 -1
- package/dist/assets/blender.environment-CG-pC7sk.js +0 -1
- package/dist/assets/blender.keymap-BmOBRY7p.js +0 -1
- package/dist/assets/blender.status-MRiv-9Ju.js +0 -1
- package/dist/assets/blender.style--aBP5V1k.js +0 -1
- package/dist/assets/city-EkhAOo5s.exr +0 -0
- package/dist/assets/courtyard-DqlebbpC.exr +0 -0
- package/dist/assets/forest-P_CQY3b_.exr +0 -0
- package/dist/assets/icon-BkiLD9ed.png +0 -0
- package/dist/assets/index-C8BwtQGN.js +0 -952
- package/dist/assets/interior-Bo_lba15.exr +0 -0
- package/dist/assets/linear-resolve-Cuka7Ypb.js +0 -377
- package/dist/assets/live-mixers-B-bwLZ7c.js +0 -1
- package/dist/assets/model-inspection-DVE8f3Dj.js +0 -1
- package/dist/assets/model.layout-BpZE1W9V.js +0 -1
- package/dist/assets/models.finder-5z7xbsOu.js +0 -1
- package/dist/assets/night-CvV4Gybt.exr +0 -0
- package/dist/assets/object3d-document-session-registry-DDpmVmir.js +0 -2
- package/dist/assets/openai-DHNKzFtc.svg +0 -1
- package/dist/assets/output-pass-j4dAGrPY.js +0 -85
- package/dist/assets/play-live-BBkOuWQn.js +0 -1
- package/dist/assets/product-CUU4-nDZ.js +0 -14
- package/dist/assets/product-DPOIZgKM.css +0 -1
- package/dist/assets/properties-bone-constraints.inspector-D8CtPu9c.js +0 -1
- package/dist/assets/properties-bone.inspector-j9aNQrP9.js +0 -1
- package/dist/assets/properties-collection.inspector-CaMveBur.js +0 -1
- package/dist/assets/properties-constraints.inspector-DB9bBgqn.js +0 -1
- package/dist/assets/properties-data.inspector-C7dh_XTe.js +0 -1
- package/dist/assets/properties-material.inspector-DWC5NJkW.js +0 -1
- package/dist/assets/properties-modifiers.inspector-CBUxUSB0.js +0 -1
- package/dist/assets/properties-object.inspector-wvO8nuGD.js +0 -1
- package/dist/assets/properties-output.inspector-CFyAZn9F.js +0 -1
- package/dist/assets/properties-particles.inspector-zEaTW3U7.js +0 -1
- package/dist/assets/properties-physics.inspector-CO-4UZbX.js +0 -1
- package/dist/assets/properties-render.inspector-DoJ1BMKP.js +0 -1
- package/dist/assets/properties-scene.inspector-BOhaiC0_.js +0 -1
- package/dist/assets/properties-texture.inspector-1JoYUWiR.js +0 -1
- package/dist/assets/properties-view-layer.inspector-DuRkFWtq.js +0 -1
- package/dist/assets/properties-world.inspector-Csfv-x0A.js +0 -1
- package/dist/assets/react-18-Dh4gvPqw.js +0 -1
- package/dist/assets/regions-DWeEBnE2.js +0 -1
- package/dist/assets/sculpt.layout-D-K5cLw6.js +0 -1
- package/dist/assets/session-CvHLFvpx.js +0 -6056
- package/dist/assets/shading.layout-CZZHKBer.js +0 -1
- package/dist/assets/sky-precompute-worker-CPGW9t_C.js +0 -1
- package/dist/assets/spark.module-CTTm62aa.js +0 -12120
- package/dist/assets/stage-keyboard-BvTth28t.js +0 -1
- package/dist/assets/stage-overlay-set-Dt6IH1xC.js +0 -1
- package/dist/assets/stage-presence-markers-DszBO9B1.js +0 -1
- package/dist/assets/stage-transform-tools-D6H_SBLV.js +0 -1
- package/dist/assets/standard-viewport-dressing-BSYojdsQ.js +0 -24
- package/dist/assets/studio-CysTBGIb.exr +0 -0
- package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
- package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
- package/dist/assets/texture.layout-DASpHVht.js +0 -1
- package/dist/assets/three-integration.service-DvOyomjh.js +0 -2
- package/dist/assets/three.module-CtVjCPcj.js +0 -3840
- package/dist/assets/uv-editing.layout-A8RA-cbM.js +0 -1
- package/dist/assets/volter-sdk-account-fYMnFHfe.js +0 -1
- package/dist/assets/volter-sdk-client-JmBOIwGe.js +0 -1
- package/dist/assets/volter-sdk-contributions-l9HrPjwW.js +0 -1
- package/dist/assets/volter-sdk-css-numeric-style-ud28AcW3.js +0 -1
- package/dist/assets/volter-sdk-document-probe-C4RhslOI.js +0 -1
- package/dist/assets/volter-sdk-editor-view-B_mScT1w.js +0 -1
- package/dist/assets/volter-sdk-host-B9QOINsX.js +0 -1
- package/dist/assets/volter-sdk-http-transport.browser-6a_cUtge.js +0 -1
- package/dist/assets/volter-sdk-index-DDdgpWqc.js +0 -1
- package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-CRc93EXv.js +0 -1
- package/dist/assets/volter-sdk-kit-account-client-ByjTbat7.js +0 -1
- package/dist/assets/volter-sdk-kit-action-registry-J5l20B9X.js +0 -1
- package/dist/assets/volter-sdk-kit-active-product-BTHzjkrh.js +0 -1
- package/dist/assets/volter-sdk-kit-active-project-CgXmYhKx.js +0 -1
- package/dist/assets/volter-sdk-kit-adapter-editor-config-CcSGBUF1.js +0 -1
- package/dist/assets/volter-sdk-kit-adapter-module-CqkP49hA.js +0 -1
- package/dist/assets/volter-sdk-kit-adapter-observation-MWNd8Bmj.js +0 -1
- package/dist/assets/volter-sdk-kit-animation-animation-clock-C5QhnLuY.js +0 -1
- package/dist/assets/volter-sdk-kit-animation-stage-transport-DFbbJ80P.js +0 -1
- package/dist/assets/volter-sdk-kit-api-assets-Dtg4_1jX.js +0 -1
- package/dist/assets/volter-sdk-kit-api-base-De8oXkY8.js +0 -1
- package/dist/assets/volter-sdk-kit-api-build-Cgmw35Ng.js +0 -1
- package/dist/assets/volter-sdk-kit-api-logs-B1mQlcPQ.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-identity-DEZz1U5_.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-open-DuXZ6vyn.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-source-DMnPoTP2.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-state-6Lu0Vxdr.js +0 -1
- package/dist/assets/volter-sdk-kit-api-relay-BuCkenvE.js +0 -1
- package/dist/assets/volter-sdk-kit-api-settings-CkFO_pMP.js +0 -1
- package/dist/assets/volter-sdk-kit-api-themes-D5J6TiAR.js +0 -1
- package/dist/assets/volter-sdk-kit-api-worktrees-de1U7-9B.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-capabilities-IBJRDoU_.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-compare-core-qeWQI0-1.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-editor-context-JZ2T8xhF.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-events-wfq-jH9_.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-inspector-actions-NlF3CeMC.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-selection-BUXGqut1.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-DNj4RggW.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-thumbnails-CPp1sS_w.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-viewers-PKilU3Lm.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-DHDfKVAJ.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-Ch0TDXil.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-Cb0-daSo.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-Bznr7T6d.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-BriZZqYC.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-5K3HN4kg.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-F65PsmIZ.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-DzxVbaeb.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-B2Oxd31D.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-BmPO24SY.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-BPRq-xQf.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-CM64IwuA.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-BIKxorKS.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-7CNTmzBZ.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-project-content-C3EJl866.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-CQrbYiAp.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-active-adapter-BC9Cf4yx.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-active-systems-GZm33tOS.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-adapter-key-C4-d6xt1.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-CEEw_XEg.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-BJsS0bnj.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-1NA63Idp.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-BlbGyg38.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-D0FSf6DM.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-consumer-actions-J7MnHWK3.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-design-time-layers-CnLS2erF.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-BrmHkPuP.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-HQAxbCiB.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-CdLSRvO0.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-EWM45v6y.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-layered-pick-BX3K3GR7.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-BGatqFLR.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-CerY6qmy.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-DxZ-V-ys.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-panel-authoring-Bbv7lJc5.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-C5rP-I6e.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-provenance-BNVk0DFH.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-BqUskgSb.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-DB8S6Vfi.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-story-board-M-VqCWKu.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-seam-evidence-Qbbz8M6t.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-selection-scope-CkblMrR8.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-B9Y9p91j.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-7umaPaVS.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-three-root-M5Gj55-Z.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-CH5NA-YI.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-CzTEMmzx.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-world-session-state-BjKbimsg.js +0 -1
- package/dist/assets/volter-sdk-kit-availability-tick-C7I6Zrut.js +0 -1
- package/dist/assets/volter-sdk-kit-bitmap-label-DPmffd8g.js +0 -1
- package/dist/assets/volter-sdk-kit-boot-routing-CaKypcBx.js +0 -1
- package/dist/assets/volter-sdk-kit-breakpoint-state-5m0qTYvY.js +0 -1
- package/dist/assets/volter-sdk-kit-build-identity-HQ0VWGG8.js +0 -1
- package/dist/assets/volter-sdk-kit-bytes-codec-BJDqylNg.js +0 -1
- package/dist/assets/volter-sdk-kit-cancellation-reason-B0z-IzQ9.js +0 -1
- package/dist/assets/volter-sdk-kit-canvas-frames-BtkS3lNe.js +0 -1
- package/dist/assets/volter-sdk-kit-capture-camera-pose-CUejcTcV.js +0 -1
- package/dist/assets/volter-sdk-kit-capture-size-Uyb3uqXA.js +0 -1
- package/dist/assets/volter-sdk-kit-chrome-registry-cc3AZlnV.js +0 -1
- package/dist/assets/volter-sdk-kit-chrome-slot-registry-C4g-na11.js +0 -1
- package/dist/assets/volter-sdk-kit-collaboration-client-Cd6918QC.js +0 -1
- package/dist/assets/volter-sdk-kit-collaboration-presence-qXC7JfS2.js +0 -1
- package/dist/assets/volter-sdk-kit-command-dispatch-D07Pn7pe.js +0 -1
- package/dist/assets/volter-sdk-kit-command-listener-Bm2sgP0i.js +0 -1
- package/dist/assets/volter-sdk-kit-command-registry-CJoVRu6V.js +0 -1
- package/dist/assets/volter-sdk-kit-component-board-registry-D7xm8cFr.js +0 -1
- package/dist/assets/volter-sdk-kit-component-states-registry-DtippeT3.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AlignToolbar-BporX2iz.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DfmKRYtb.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AssetEditorShell-B-_vx-Jb.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-CyEcoLKv.js +0 -1
- package/dist/assets/volter-sdk-kit-components-BoardRulers-CjoDr2Ak.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-Bz4W0Y2g.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-Cyd5bYha.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ChromeSlot-q_wsahlZ.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CodeView-COOHbFef.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-F5yS9e4v.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ConsolePanel-Dnnq15qj.js +0 -1
- package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-CFCva8sQ.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectionProjection-Cj0eqFPF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-Inspector-DhnEEQ_5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-ljsWq41X.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-pUp0DKhG.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-BJKmp0B3.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorToolSection-DBDxp3Ir.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-eGVZo2ph.js +0 -1
- package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-jKqvAsdL.js +0 -1
- package/dist/assets/volter-sdk-kit-components-MediaProperties-DEn9gV9T.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ProjectHeader-CtsMXibh.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-Bdu_gdRF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-8PYXBIYy.js +0 -1
- package/dist/assets/volter-sdk-kit-components-RootTextEditor-DFkpwNlX.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SaveStatus-BP1Q1tfu.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-C_FxlEvS.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-C_O4-zsY.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-DAoNJ2KS.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ToolHost-z-CSuvra.js +0 -1
- package/dist/assets/volter-sdk-kit-components-Toolbar-CUsODOE2.js +0 -1
- package/dist/assets/volter-sdk-kit-components-TransientHint-BsejPKYD.js +0 -1
- package/dist/assets/volter-sdk-kit-components-VersionControlSection-ldwCuasW.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-DjfcwDPM.js +0 -1
- package/dist/assets/volter-sdk-kit-components-VolterLogo-wmAjAypV.js +0 -1
- package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-JN-eaFqo.js +0 -1
- package/dist/assets/volter-sdk-kit-components-account-documents-BcgknOsj.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-documents-B2W4TjZO.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-NTgC5Ngq.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-selection-section-CLS4gJUE.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-thumbnails-CaYPgAtN.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-DbLUYMKF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-B3ieuK68.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-DicJ06Cl.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-DRBY_95W.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-BR14tR5R.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-BI9bFeTE.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-d7Wqtjxk.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-Ykl90edA.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-BmwRhUts.js +0 -1
- package/dist/assets/volter-sdk-kit-components-board-guides-Dw7AT-AY.js +0 -1
- package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-s3AK_b58.js +0 -1
- package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-DKdXJcd9.js +0 -1
- package/dist/assets/volter-sdk-kit-components-core-utilities-C5ZKnxiW.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-preview-section-BHsR6Ljx.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-revert-label-BcItYP-3.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-selection-DnVCu9NI.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-BbWmsm9H.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-transform-BCj8sqj5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-DmyQlGz0.js +0 -1
- package/dist/assets/volter-sdk-kit-components-kind-documents-BECHMIFC.js +0 -1
- package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-BB28QlBb.js +0 -1
- package/dist/assets/volter-sdk-kit-components-project-tool-documents-CrMMOzM5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-scene-documents-B3yfDsBz.js +0 -1
- package/dist/assets/volter-sdk-kit-components-status-contributions-CDzNj8Hu.js +0 -1
- package/dist/assets/volter-sdk-kit-components-tool-documents-BpEG-ABF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-tool-schema-form-BOiPCwKc.js +0 -1
- package/dist/assets/volter-sdk-kit-components-use-after-paint-AcvAjLMf.js +0 -1
- package/dist/assets/volter-sdk-kit-components-use-project-image-assets-CRFbWY4e.js +0 -1
- package/dist/assets/volter-sdk-kit-components-workspace-history-DTgNtIrO.js +0 -1
- package/dist/assets/volter-sdk-kit-components-world-documents-N9ea5nLy.js +0 -1
- package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-CvVXrTkV.js +0 -1
- package/dist/assets/volter-sdk-kit-composite-screenshot-BsiNQIxC.js +0 -1
- package/dist/assets/volter-sdk-kit-content-entry-source-registry-BX8YW40L.js +0 -1
- package/dist/assets/volter-sdk-kit-contribution-surfaces-CMblNYDG.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-BtPYs0AY.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-BCRK-uUC.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-3YuOn0LN.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-session-vitals-BpsIwBM0.js +0 -1
- package/dist/assets/volter-sdk-kit-creation-site-registry-C1_mEFTL.js +0 -1
- package/dist/assets/volter-sdk-kit-delegate-harness-registry-V07K9odj.js +0 -1
- package/dist/assets/volter-sdk-kit-document-areas-TQELDKqa.js +0 -1
- package/dist/assets/volter-sdk-kit-document-context-registry-BaPLLOGQ.js +0 -1
- package/dist/assets/volter-sdk-kit-document-open-registry-D-zxkb7y.js +0 -1
- package/dist/assets/volter-sdk-kit-document-play-extension-F8i5xdiU.js +0 -1
- package/dist/assets/volter-sdk-kit-document-preview-source-DgDf2lpD.js +0 -1
- package/dist/assets/volter-sdk-kit-document-renderer-session-YWnbpDFE.js +0 -1
- package/dist/assets/volter-sdk-kit-document-stage-sessions-BKZBGbit.js +0 -1
- package/dist/assets/volter-sdk-kit-document-viewports-DNuE6MQl.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-api-DZDj3o86.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-chrome-capture-De6DmSgV.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-commands-CImZE1nE.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-console-nzCbsR0U.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-current-view-POB-DPkt.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-document-probe-B5tRXCfR.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-git-client-SsYoNC6J.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-hotkeys-B4ocILot.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-lease-CBvYmCsH.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-lease-view-DVuaJEec.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-mode-B2vWMS-_.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-notifications-DgsalU9q.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presence-BQiXcYKf.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presentation-activity-DO7YpI0H.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presentation-notice-BZtrnX57.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-runtime-C8mqfYkM.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-server-response-qipqMDto.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-session-attribution-_PNhRyeQ.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-session-mode-BcDn3FZY.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-state-facets-3r455vYW.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-view-presentation-Dovw_-H_.js +0 -1
- package/dist/assets/volter-sdk-kit-environment-images-DNJU9lPC.js +0 -1
- package/dist/assets/volter-sdk-kit-eyedropper-session-DJMkT_IO.js +0 -1
- package/dist/assets/volter-sdk-kit-files-file-provider-BnmRHNTp.js +0 -1
- package/dist/assets/volter-sdk-kit-files-project-files-CiKUZlIY.js +0 -1
- package/dist/assets/volter-sdk-kit-finders-index-qZKU8xjn.js +0 -1
- package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-DBTnLBhQ.js +0 -1
- package/dist/assets/volter-sdk-kit-frame-frame-parts-DY-_uCea.js +0 -1
- package/dist/assets/volter-sdk-kit-framed-document-capture-CsprF9Ct.js +0 -1
- package/dist/assets/volter-sdk-kit-game-surface-defaults-Dz1sExNZ.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-export-state-BwkWHkY-.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-replay-CgF6vM6H.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-session-time-BrdLX9MN.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-sessions-0YRBcIBD.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-component-marks-pwxcueeL.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-internals-qxAC9Yyz.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-Bguy3R2P.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-CQ_dm6ZG.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-node-rows-BJliwGW1.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-panel-view-C6zK-ewB.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-projection-q1LvhfSm.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-row-media-jZ989Tvr.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-row-model-BmrBiFlP.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-rows-BMI3XBi-.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-walk-oEWRF-Iz.js +0 -1
- package/dist/assets/volter-sdk-kit-history-editor-session-CdficO7Z.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-commands-D7VwYk3h.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-delegate-DgIAPV-4.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-limit-notices-Bu07tHVz.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-service-BzbUb6oV.js +0 -1
- package/dist/assets/volter-sdk-kit-history-persistence-coordinator-DuWeeacm.js +0 -1
- package/dist/assets/volter-sdk-kit-history-project-file-history-C7m0teYF.js +0 -1
- package/dist/assets/volter-sdk-kit-history-project-root-history-backends-mip7BKbu.js +0 -1
- package/dist/assets/volter-sdk-kit-history-resource-registry-CZoZX7pJ.js +0 -1
- package/dist/assets/volter-sdk-kit-history-snapshot-store-DFlmQKjf.js +0 -1
- package/dist/assets/volter-sdk-kit-history-source-history-backend-C1tXQx-3.js +0 -1
- package/dist/assets/volter-sdk-kit-hmr-registration-group-CdWSrJkL.js +0 -1
- package/dist/assets/volter-sdk-kit-hmr-stable-react-context-B_NNyLJr.js +0 -1
- package/dist/assets/volter-sdk-kit-hotkeys-9UuVecd2.js +0 -1
- package/dist/assets/volter-sdk-kit-inference-diagnostics-Bp6UhMrh.js +0 -1
- package/dist/assets/volter-sdk-kit-initial-project-mIrJ1z4F.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-active-subject-Ci13od8C.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-active-surface-BbND9Nn7.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-compose-subject-Cruyx55P.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-display-Ckb72SDN.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-document-subject-Dd7sTsiM.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-game-subject-Zye7SfKC.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-model-B6kt5U5M.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-node-media-3WYK4mrg.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-null-subject-j5MU6Bqp.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-serialize-C5ElmYGd.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-Dqr8YOfV.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-presentation-Bxm_mJug.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-property-grouping-DGsJwl0r.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-section-registry-BTw0xKeK.js +0 -1
- package/dist/assets/volter-sdk-kit-instance-source-actions-B_SYfHzK.js +0 -1
- package/dist/assets/volter-sdk-kit-js-heap-CMHIxDFc.js +0 -1
- package/dist/assets/volter-sdk-kit-key-actions-npGWeBwX.js +0 -1
- package/dist/assets/volter-sdk-kit-keymap-presets-Dgo5jMVc.js +0 -1
- package/dist/assets/volter-sdk-kit-layout-policy-D6cqDneT.js +0 -1
- package/dist/assets/volter-sdk-kit-light-explorer-model-D9220Fr3.js +0 -1
- package/dist/assets/volter-sdk-kit-live-canvas-frame-CQvRrTp5.js +0 -1
- package/dist/assets/volter-sdk-kit-live-document-StECWB5n.js +0 -1
- package/dist/assets/volter-sdk-kit-live-gesture-lock-DpKIl8Kh.js +0 -1
- package/dist/assets/volter-sdk-kit-live-seam-evidence-WkwVMDpm.js +0 -1
- package/dist/assets/volter-sdk-kit-live-session-registry-DmaGkq5x.js +0 -1
- package/dist/assets/volter-sdk-kit-live-transition-B5jM4iFM.js +0 -1
- package/dist/assets/volter-sdk-kit-manifest-project-amCdVxUh.js +0 -1
- package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-CpTsYq8x.js +0 -1
- package/dist/assets/volter-sdk-kit-mount-failure-report-DcYXxWwN.js +0 -1
- package/dist/assets/volter-sdk-kit-native-selection-style-bMu0TkER.js +0 -1
- package/dist/assets/volter-sdk-kit-object3d-document-write-policy-DCtXUN3w.js +0 -1
- package/dist/assets/volter-sdk-kit-packaged-runtime-8FNZVNB9.js +0 -1
- package/dist/assets/volter-sdk-kit-performance-profiler-DKuyDNq0.js +0 -1
- package/dist/assets/volter-sdk-kit-performance-sources-CUq2AYlp.js +0 -1
- package/dist/assets/volter-sdk-kit-photograph-notice-CJC3RuIs.js +0 -1
- package/dist/assets/volter-sdk-kit-play-boot-phase-CvmjrYem.js +0 -1
- package/dist/assets/volter-sdk-kit-play-camera-flight-Dp3bYFl4.js +0 -1
- package/dist/assets/volter-sdk-kit-presentation-surface-DDAJLzOO.js +0 -1
- package/dist/assets/volter-sdk-kit-product-command-CevBP_kA.js +0 -1
- package/dist/assets/volter-sdk-kit-project-adapter-DZMJa9qO.js +0 -1
- package/dist/assets/volter-sdk-kit-project-asset-refresh-BlzSWFsZ.js +0 -1
- package/dist/assets/volter-sdk-kit-project-asset-roots-ByJUql0c.js +0 -1
- package/dist/assets/volter-sdk-kit-project-local-state-CzuDIgqm.js +0 -1
- package/dist/assets/volter-sdk-kit-project-manager-KiOTeJwI.js +0 -1
- package/dist/assets/volter-sdk-kit-project-module-changes-BDLfMwF6.js +0 -1
- package/dist/assets/volter-sdk-kit-project-module-split-DVZB3699.js +0 -1
- package/dist/assets/volter-sdk-kit-project-provenance-GZJY3tis.js +0 -1
- package/dist/assets/volter-sdk-kit-project-ready-EtjRqua9.js +0 -1
- package/dist/assets/volter-sdk-kit-project-shape-Jb91qwQJ.js +0 -1
- package/dist/assets/volter-sdk-kit-project-tools-n1IzvKJM.js +0 -1
- package/dist/assets/volter-sdk-kit-readiness-j18YadCv.js +0 -1
- package/dist/assets/volter-sdk-kit-renderer-resource-counts-BjvWDcz5.js +0 -1
- package/dist/assets/volter-sdk-kit-reported-play-state-BdYUBkLM.js +0 -1
- package/dist/assets/volter-sdk-kit-resolve-contributed-command-7ZIwPRlj.js +0 -1
- package/dist/assets/volter-sdk-kit-resolve-relative-specifier-BEqx2z44.js +0 -1
- package/dist/assets/volter-sdk-kit-retained-document-states-BWSvbm_C.js +0 -1
- package/dist/assets/volter-sdk-kit-scene-document-plan-B8Q6NbgU.js +0 -1
- package/dist/assets/volter-sdk-kit-scene-live-open-PVToaH1e.js +0 -1
- package/dist/assets/volter-sdk-kit-scoped-game-css-DOF-inf1.js +0 -1
- package/dist/assets/volter-sdk-kit-served-url-C3OFjtsJ.js +0 -1
- package/dist/assets/volter-sdk-kit-session-close-CfqKNfrE.js +0 -1
- package/dist/assets/volter-sdk-kit-session-tombstone-wgZaXyq-.js +0 -1
- package/dist/assets/volter-sdk-kit-settings-settings-provider-CkU3sFW7.js +0 -1
- package/dist/assets/volter-sdk-kit-settings-store-vv_SoMfR.js +0 -1
- package/dist/assets/volter-sdk-kit-shell-store-DTExcaKL.js +0 -1
- package/dist/assets/volter-sdk-kit-shell-store-door-Y-FBGkmI.js +0 -1
- package/dist/assets/volter-sdk-kit-source-conflict-CnIJpwkZ.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-context-q9FWjN1-.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-invalidation-43bhizXB.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-store-registry-BQo-SIuU.js +0 -1
- package/dist/assets/volter-sdk-kit-startup-failure-B7USi1FF.js +0 -1
- package/dist/assets/volter-sdk-kit-state-report-deferral-Cur6y3FE.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-host-files-storage-C9d8xXNc.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-http-storage-MuV46OcN.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-index-CcMXaj5N.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-mem-storage-CaZsvmox.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-path-lock-ClaJ7vSM.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-paths-Ci2ZChlj.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-OjN0fncW.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-compose-project-stories-BlKWWJmk.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-prefabs-finder-CcmeyBzg.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-CA_oKZKb.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-project-story-regions-CFAyIdjW.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-scope-XvZpLAc5.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-capture-K4eH6MMa.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-declared-medium-e8MXBoO_.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-discovery-DViKEE-J.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-DdlXu5tN.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-grouping-BbgkS2Kl.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-presentation-Bw39PGHN.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-registry-DpouLkjB.js +0 -1
- package/dist/assets/volter-sdk-kit-story-document-openers-DckbFGIr.js +0 -1
- package/dist/assets/volter-sdk-kit-story-thumbnails-ruZKvQPb.js +0 -1
- package/dist/assets/volter-sdk-kit-surface-keyboard-ChQta2gu.js +0 -1
- package/dist/assets/volter-sdk-kit-surface-state-CUbH0mE7.js +0 -1
- package/dist/assets/volter-sdk-kit-system-seam-evidence-hHuyimda.js +0 -1
- package/dist/assets/volter-sdk-kit-tab-census-BKO-Cotm.js +0 -1
- package/dist/assets/volter-sdk-kit-tab-lifecycle-client--HEzpfrP.js +0 -1
- package/dist/assets/volter-sdk-kit-theme-library-cooHZE2t.js +0 -1
- package/dist/assets/volter-sdk-kit-theme-preference-BfzIz8X4.js +0 -1
- package/dist/assets/volter-sdk-kit-three-viewport-presentation-DJQ6GD49.js +0 -1
- package/dist/assets/volter-sdk-kit-tool-contribution-play-B1vfLya9.js +0 -1
- package/dist/assets/volter-sdk-kit-tool-loader-C_B2N1As.js +0 -1
- package/dist/assets/volter-sdk-kit-transform-mode-request-tOzI-V8h.js +0 -1
- package/dist/assets/volter-sdk-kit-transient-hint-qly8UT5T.js +0 -1
- package/dist/assets/volter-sdk-kit-transport-strip-CrqMX70b.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-CjFRrSBS.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-inspect-CPbxbbEw.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-Ci45ai4Y.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-B_pwEKI_.js +0 -1
- package/dist/assets/volter-sdk-kit-user-local-state-CZtLuAED.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-activation-timings-DtO34FL_.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-editor-controls-C4eYemqw.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-presentation-D1_lvqyl.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-surface-status-BsGJAuRu.js +0 -1
- package/dist/assets/volter-sdk-kit-wait-until-DlHFfLUu.js +0 -1
- package/dist/assets/volter-sdk-kit-worker-call-metrics-FsK4U-gz.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-areas-CvTSMn-H.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-aux-commands-CrxEUAQx.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-available-documents-Cl8CigSt.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-core-utilities-rQQcVO5n.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-ids-CisQDpex.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-registry-D4w40sGe.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-restore-B0s9617k.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-host-commands-DLqH47QQ.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-persistence-gate-eeXMeNbc.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-play-utilities-sGc6TcaG.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-presets-D-OZK4QQ.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-regions-CLU4KicA.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-static-panels-BtUQumTF.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-status-registry-BlOrc7aA.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-storage-B1cvxes9.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-style-Czyy_uk2.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-utility-commands-D7ToZCgr.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-utility-registry-Czk_iMpg.js +0 -1
- package/dist/assets/volter-sdk-kit-world-adoption-CvxzEI8V.js +0 -1
- package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-CjG34H8g.js +0 -1
- package/dist/assets/volter-sdk-kit-world-document-routing-B3yT1rzx.js +0 -1
- package/dist/assets/volter-sdk-kit-world-pan-state-Co5VSMOo.js +0 -1
- package/dist/assets/volter-sdk-kit-write-pipe-GbyDlxkJ.js +0 -1
- package/dist/assets/volter-sdk-layout-arrangements-DmBix6Gx.js +0 -1
- package/dist/assets/volter-sdk-layouts-CQccgb8u.js +0 -1
- package/dist/assets/volter-sdk-mgLi8_Cw.js +0 -2364
- package/dist/assets/volter-sdk-selection-wggwzLen.js +0 -1
- package/dist/assets/volter-sdk-session-command-table-HilHgL7-.js +0 -1
- package/dist/assets/volter-sdk-session-editor-brand-CnZ3VbR-.js +0 -1
- package/dist/assets/volter-sdk-session-editor-compatibility-BOYTGttq.js +0 -1
- package/dist/assets/volter-sdk-session-editor-control-protocol-DG79HI_x.js +0 -1
- package/dist/assets/volter-sdk-session-entrypoint-selection-readers-D9FXlkS2.js +0 -1
- package/dist/assets/volter-sdk-session-game-css-scope-CZmonWfe.js +0 -1
- package/dist/assets/volter-sdk-session-limited-view-KNOq_tYc.js +0 -1
- package/dist/assets/volter-sdk-session-project-module-url-D7htWtkD.js +0 -1
- package/dist/assets/volter-sdk-session-relative-path-guard-DYa5PL0U.js +0 -1
- package/dist/assets/volter-sdk-session-tool-contribution-convention-GC2AWVch.js +0 -1
- package/dist/assets/volter-sdk-types-Couxbiwa.js +0 -1
- package/dist/assets/volter-sdk-views-D8qvTyCn.js +0 -1
- package/dist/assets/volter-sdk-widgets-design-system-DOW3sA7o.js +0 -1
- package/dist/assets/volter-sdk-widgets-editor-appearance-iH79zcxr.js +0 -1
- package/dist/assets/volter-sdk-widgets-editor-material-D-LB0zxr.js +0 -1
- package/dist/assets/volter-sdk-widgets-icon-set-registry-ylLmSwSr.js +0 -1
- package/dist/assets/volter-sdk-widgets-index-DMo0Rqvn.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-DhdNVPDu.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-BEDX8viW.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-9Vk3QrCy.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-rhGdxW0L.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-BXu0Q3-y.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-C49uoql_.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BoRWZylN.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-GxINOtYX.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-rvCzzMDI.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-DG-MGXQX.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-Cy4AI76M.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-ncKgVdwJ.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-BtW7A1an.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-lOZ7oJLL.js +0 -1
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-BbS6qOlJ.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-BqcAE1N1.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Fields-CD2kSMcv.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-List-CZyrvaL-.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-D8L-se9D.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-sW43gM3D.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-CTEQRAHE.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CF8cj2Xd.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Tree-KffO8vo1.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-D2my2vjj.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Button-CiaR71jI.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-DAxGHgoQ.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CCZYI-j9.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Fn9aFuF_.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-BMxlOety.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-BzwvyU3c.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-CTc6p9EQ.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Layout-CE-beP_c.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Menu-DfNc6W9I.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Cyjw5Lzx.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Panel-LGno17LT.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-Cljf9N48.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Text-B4gPva4d.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-CXqwIkjb.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-DjwM-P34.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DWMZJklN.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-banner-tones-bbpLeXlG.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DB06CYVu.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-FxdDZA6W.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-CEiBBzGS.js +0 -1
- package/dist/assets/volter-sdk-widgets-theme-BysNs-Ha.js +0 -1
- package/dist/assets/volter-sdk-widgets-z-index-CQdgvLGF.js +0 -1
- package/dist/assets/volter-shared-fontawesome-BiNKLNA8.js +0 -1
- package/dist/assets/volter-shared-jsx-dev-runtime-BgDFKHr4.js +0 -1
- package/dist/assets/volter-shared-jsx-runtime-B6IXdFn7.js +0 -1
- package/dist/assets/volter-shared-react-dom-DOBDwT0W.js +0 -1
- package/dist/assets/volter-shared-react-dom-client-DxxNJanr.js +0 -1
- package/dist/assets/volter-shared-react-wgC9wOqr.js +0 -1
- package/dist/assets/volter-shared-three-CUSZKPWM.js +0 -1
- package/dist/assets/worker-DvJ796ja.js +0 -8
- package/dist/volter-shared-sdk.json +0 -465
- package/src/contributions.d.ts +0 -4
- package/starter/add-play/game-state.ts +0 -25
- package/starter/add-play/game.tsx +0 -16
- package/starter/add-play/model.play.ts +0 -77
- package/starter/playable/src/models/canyon.blend +0 -0
- package/starter/playable/src/models/canyon.play.ts +0 -107
- package/starter/playable/src/models/canyon.py +0 -55
- package/starter/playable/src/models/circuit.py +0 -131
- package/starter/playable/src/models/complete_environment.py +0 -35
- package/starter/playable/src/models/course.ts +0 -12
- package/starter/playable/src/models/detail.py +0 -44
- package/starter/playable/src/models/driver_details.py +0 -25
- package/starter/playable/src/models/environment.py +0 -87
- package/starter/playable/src/models/finish_scene.py +0 -13
- package/starter/playable/src/models/kart_finish.py +0 -31
- package/starter/playable/src/models/polish.py +0 -75
- package/starter/playable/src/models/race-state.ts +0 -15
- package/starter/playable/src/models/refine.py +0 -69
- package/starter/playable/src/models/scene_helpers.py +0 -54
- package/starter/playable/src/models/scenery_ao.py +0 -114
- package/starter/playable/src/textures/asphalt.png +0 -0
- package/starter/playable/src/textures/generate.py +0 -16
- package/starter/playable/src/textures/sandstone.png +0 -0
- package/starter/playable/src/ui/game.stories.tsx +0 -16
- package/starter/playable/src/ui/game.tsx +0 -6
- package/starter/playable/src/ui/race-hud.tsx +0 -29
- package/starter/playable/src/ui/race-widgets.tsx +0 -29
|
Binary file
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
// Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
import type {ModelPlayContext} from '@volter/play/play-script';
|
|
5
|
-
import {initialState,publishRaceState,consumeCommands,type Racer,type RaceState,type RaceEvent,type Command} from './race-state';
|
|
6
|
-
import {at,nearest,length,wrap,angle,leftWidth} from './course';
|
|
7
|
-
type Car=Racer & {object:THREE.Object3D;s:number;distance:number;checkpoint:number;lane:number;parked:boolean;boostCooldown:number;drift:number;drifting:boolean;offroad:boolean;collisionCooldown:number;lastDecision:number};
|
|
8
|
-
type Inputs={throttle:number;brake:boolean;steer:number;drift:boolean;boost:boolean};
|
|
9
|
-
export default function play(ctx:ModelPlayContext){
|
|
10
|
-
const initialPositions=[[0,0],[-6.2,2.7],[4.8,6],[-1.5,24],[1,31],[7,41]];
|
|
11
|
-
const names=['Pip','Miso','Nova','Sprig','Mica','Rook'];
|
|
12
|
-
let state:RaceState={...initialState,events:[],racers:[]};let events:RaceEvent[]=[];let simTime=0,frame=0,clock=0,accumulator=0,previousKeys=new Set<string>(),endTime:number|null=null;let lastManual='';
|
|
13
|
-
// Each race event is kept for the HUD's race state and written to the editor's play log (`cyclotron play-log`).
|
|
14
|
-
const log=(kind:string,detail:Record<string,unknown>={})=>{events.push({time:+simTime.toFixed(3),frame,kind,...detail});if(events.length>1200)events.shift();ctx.log(kind,detail)};
|
|
15
|
-
const cars:Car[]=initialPositions.map(([x,y],id)=>{const object=ctx.find('Kart.'+id);if(!object)throw new Error('Missing authored Kart.'+id);const n=nearest(x,y);return {id,name:names[id],object,x,y,s:n.s,distance:n.s,heading:0,speed:0,progress:n.s/length,lap:1,finished:false,finishTime:null,coins:id===0?8:4,boost:0,checkpoint:1,lane:[0,-4.6,4.6,-2.2,1.8,3.7][id],parked:false,boostCooldown:0,drift:0,drifting:false,offroad:false,collisionCooldown:0,lastDecision:-1}});
|
|
16
|
-
ctx.root.traverse((o:any)=>{if(o.isDirectionalLight){o.shadow.mapSize.set(4096,4096);o.shadow.map?.dispose();o.shadow.map=null}});
|
|
17
|
-
const pickups=new THREE.Group();pickups.name='Race coin pickups';ctx.root.add(pickups);
|
|
18
|
-
const coinMaterial=new THREE.MeshStandardMaterial({color:0xffbe18,metalness:.55,roughness:.25});
|
|
19
|
-
const coinGeometry=new THREE.TorusGeometry(.34,.1,8,20);
|
|
20
|
-
const coins=Array.from({length:24},(_,i)=>{const s=(.25+Math.floor(i/3)*.086)*length, lane=[-4,0,4][i%3],p=at(s,lane);const mesh=new THREE.Mesh(coinGeometry,coinMaterial);mesh.name='Coin.'+i;mesh.position.set(p.x,p.y,.95);mesh.rotation.x=Math.PI/2;mesh.castShadow=true;pickups.add(mesh);return {mesh,x:p.x,y:p.y,ready:0,id:i}});
|
|
21
|
-
const sparks=new THREE.Group();sparks.name='Boost exhaust';ctx.root.add(sparks);const flameMat=new THREE.MeshBasicMaterial({color:0x47e5ff,transparent:true,opacity:.7});const flameGeo=new THREE.ConeGeometry(.18,.8,8);const flames=cars.map(()=>{const a=new THREE.Mesh(flameGeo,flameMat);a.rotation.x=Math.PI/2;sparks.add(a);return a});
|
|
22
|
-
const reset=(start=false)=>{const auto=state.autoplay;events=[];simTime=frame=clock=accumulator=0;endTime=null;lastManual='';for(const c of cars){const [x,y]=initialPositions[c.id],n=nearest(x,y);Object.assign(c,{x,y,s:n.s,distance:n.s,heading:0,speed:0,progress:n.s/length,lap:1,finished:false,finishTime:null,coins:c.id===0?8:4,boost:0,checkpoint:1,parked:false,boostCooldown:0,drift:0,drifting:false,offroad:false,collisionCooldown:0,lastDecision:-1});c.object.position.set(x,y,0);c.object.rotation.set(0,0,0)}for(const c of coins){c.ready=0;c.mesh.visible=true;c.mesh.rotation.z=0;}flames.forEach(f=>f.visible=false);state={...initialState,autoplay:auto,phase:start?'countdown':'ready',events:[],racers:[]};log('restart',{autoplay:auto,positions:cars.map(c=>({id:c.id,x:c.x,y:c.y}))});if(start)log('phase',{phase:'countdown'});publish();};
|
|
23
|
-
const publish=()=>{const order=[...cars].sort((a,b)=>a.finished&&b.finished?(a.finishTime??0)-(b.finishTime??0):a.finished?-1:b.finished?1:b.distance-a.distance);const p=cars[0];state={...state,time:simTime,frame,speed:p.speed,lap:p.lap,coins:p.coins,boost:p.boost,place:order.indexOf(p)+1,racers:cars.map(c=>({id:c.id,name:c.name,x:+c.x.toFixed(3),y:+c.y.toFixed(3),heading:+c.heading.toFixed(4),speed:+c.speed.toFixed(3),progress:+(c.distance/length).toFixed(5),lap:c.lap,finished:c.finished,finishTime:c.finishTime,coins:c.coins,boost:+c.boost.toFixed(3),parked:c.parked,drifting:c.drifting,offroad:c.offroad})),events:[...events],message:cars.every(c=>c.parked)?'All six racers finished':state.message};publishRaceState(state)};
|
|
24
|
-
const start=()=>{if(state.phase==='ready'){state={...state,phase:'countdown',countdown:3};log('phase',{phase:'countdown'})}};
|
|
25
|
-
const command=(cmd:Command)=>{if(cmd==='restart'){reset(state.autoplay);return;}if(cmd==='pause'){if(state.phase!=='ready'){state={...state,paused:!state.paused};log(state.paused?'pause':'resume')}return;}if(state.paused)return;if(cmd==='auto'){state={...state,autoplay:!state.autoplay};log('autoplay',{enabled:state.autoplay});if(state.autoplay)start()}else if(cmd==='start')start();};
|
|
26
|
-
function controller(c:Car):Inputs{
|
|
27
|
-
const look=at(c.s+7+Math.abs(c.speed)*.45,c.finished?9.5:c.lane);const desired=Math.atan2(look.x-c.x,look.y-c.y),err=angle(desired-c.heading);const bend=Math.abs(angle(at(c.s+18).heading-at(c.s+3).heading));const target=(c.id===0?24.5:20.5+c.id*.25)-Math.min(6,bend*7);
|
|
28
|
-
const inputs={throttle:c.speed<target?1:0,brake:c.speed>target+1,steer:Math.max(-1,Math.min(1,err*2.4)),drift:Math.abs(err)>(c.drifting?.20:.40)&&c.speed>13,boost:!c.finished&&bend<.15&&c.coins>=2&&c.speed>15&&c.boostCooldown===0};
|
|
29
|
-
if(c.finished){const remaining=length*3+28+c.id*8-c.distance;const desiredSpeed=Math.min(15,Math.sqrt(Math.max(0,remaining-.7)*32));inputs.throttle=c.speed<desiredSpeed-.2?1:0;inputs.brake=c.speed>desiredSpeed+.05;inputs.drift=false;inputs.boost=false;}
|
|
30
|
-
if(c.id===0&&simTime-c.lastDecision>2){c.lastDecision=simTime;log('autoplay-decision',{racer:c.id,targetSpeed:+target.toFixed(2),target:{x:+look.x.toFixed(2),y:+look.y.toFixed(2)},inputs:{...inputs,steer:+inputs.steer.toFixed(2)}})}
|
|
31
|
-
return inputs;
|
|
32
|
-
}
|
|
33
|
-
const boost=(c:Car,drift=false)=>{if(c.boostCooldown>0||c.finished)return;if(!drift&&c.coins<2)return;if(!drift)c.coins-=2;c.boost=drift?.7:1.4;c.boostCooldown=drift?1.2:3;log('boost',{racer:c.id,source:drift?'drift':'coins',coins:c.coins,duration:c.boost})};
|
|
34
|
-
function drive(c:Car,input:Inputs,dt:number){
|
|
35
|
-
if(c.parked)return;
|
|
36
|
-
c.collisionCooldown=Math.max(0,c.collisionCooldown-dt);c.boostCooldown=Math.max(0,c.boostCooldown-dt);
|
|
37
|
-
if(c.boost>0){c.boost=Math.max(0,c.boost-dt);if(c.boost===0)log('boost-end',{racer:c.id})}
|
|
38
|
-
if(input.boost)boost(c);
|
|
39
|
-
const drift=input.drift&&Math.abs(input.steer)>.1&&c.speed>6;
|
|
40
|
-
if(drift!==c.drifting){log(drift?'drift-start':'drift-end',{racer:c.id,charge:+c.drift.toFixed(2)});if(!drift&&c.drift>.6)boost(c,true);if(!drift)c.drift=0;c.drifting=drift}if(drift)c.drift+=dt;
|
|
41
|
-
let acceleration=input.throttle*12;
|
|
42
|
-
if(input.brake)acceleration=c.speed>0?-22:(c.finished?0:-9);
|
|
43
|
-
if(c.finished&&Math.abs(c.speed)<=.5&&c.distance>=3*length+26.5+c.id*8){c.speed=0;c.parked=true;log('parked',{racer:c.id,x:c.x,y:c.y,clearedFinish:true});return;}
|
|
44
|
-
const drag=input.throttle===0&&!input.brake?2.8:1.7;
|
|
45
|
-
if(c.speed!==0)acceleration-=Math.sign(c.speed)*drag;
|
|
46
|
-
c.speed+=acceleration*dt;
|
|
47
|
-
const maxSpeed=c.boost>0?33:25.5;
|
|
48
|
-
c.speed=Math.max(-7,Math.min(maxSpeed,c.speed));if(!input.throttle&&!input.brake&&Math.abs(c.speed)<.12)c.speed=0;
|
|
49
|
-
const turn=input.steer*(drift?1.9:1.45)*Math.min(1,Math.abs(c.speed)/7)*(c.speed<0?-1:1);c.heading=angle(c.heading+turn*dt);
|
|
50
|
-
c.x+=Math.sin(c.heading)*c.speed*dt;c.y+=Math.cos(c.heading)*c.speed*dt;
|
|
51
|
-
let n=nearest(c.x,c.y);const left=leftWidth(n.t,n.y),limit=n.lane<0?left:12;
|
|
52
|
-
const offroad=n.d>limit-1.2;
|
|
53
|
-
if(offroad!==c.offroad){c.offroad=offroad;log(offroad?'surface-leave':'surface-enter',{racer:c.id,surface:'Circuit asphalt',x:+c.x.toFixed(2),y:+c.y.toFixed(2)})}
|
|
54
|
-
if(offroad)c.speed*=Math.exp(-1.8*dt);
|
|
55
|
-
if(n.d>limit+1.2){const sign=Math.sign(n.lane),p=at(n.s,sign*(limit+1));c.x=p.x;c.y=p.y;c.speed*=.6;if(c.collisionCooldown===0){log('barrier-contact',{racer:c.id,object:sign<0?'Outside guardrail':'Inside sandstone verge',x:c.x,y:c.y});c.collisionCooldown=.8}n=nearest(c.x,c.y)}
|
|
56
|
-
let delta=n.s-c.s;if(delta>length/2)delta-=length;if(delta<-length/2)delta+=length;
|
|
57
|
-
// Projection advances only through physically adjacent road segments.
|
|
58
|
-
if(Math.abs(delta)<3+Math.abs(c.speed)*dt*2)c.distance+=delta;
|
|
59
|
-
c.s=n.s;
|
|
60
|
-
if(!c.finished&&c.distance>=c.checkpoint*length/4){log('checkpoint',{racer:c.id,checkpoint:c.checkpoint,x:c.x,y:c.y});c.checkpoint++;}
|
|
61
|
-
const lap=Math.min(3,Math.max(1,Math.floor(c.distance/length)+1));if(lap!==c.lap){c.lap=lap;log('lap',{racer:c.id,lap})}
|
|
62
|
-
if(!c.finished&&c.distance>=3*length&&c.checkpoint>=12){c.finished=true;c.finishTime=simTime;log('finish',{racer:c.id,name:c.name,time:simTime,x:c.x,y:c.y});if(c.id===0){endTime=simTime;state={...state,phase:'finished'};log('phase',{phase:'finished'})}}
|
|
63
|
-
c.object.position.set(c.x,c.y,0);c.object.rotation.set(0,0,-c.heading);
|
|
64
|
-
}
|
|
65
|
-
const eye=new THREE.Vector3(),target=new THREE.Vector3();
|
|
66
|
-
function camera(){const p=cars[0],h=p.heading;ctx.root.localToWorld(eye.set(p.x-Math.sin(h)*10.7,p.y-Math.cos(h)*10.7,4.7));ctx.root.localToWorld(target.set(p.x+Math.sin(h)*18,p.y+Math.cos(h)*18,.05));ctx.camera.position.copy(eye);ctx.camera.up.set(0,1,0);ctx.camera.lookAt(target);const cam=ctx.camera as THREE.PerspectiveCamera;cam.fov=47;cam.far=180;cam.updateProjectionMatrix();}
|
|
67
|
-
function physics(dt:number){
|
|
68
|
-
if(state.phase==='ready'||state.paused||cars.every(c=>c.parked))return;
|
|
69
|
-
simTime+=dt;frame++;
|
|
70
|
-
if(state.phase==='countdown'){state={...state,countdown:Math.max(0,state.countdown-dt)};if(state.countdown===0){state={...state,phase:'racing'};log('phase',{phase:'racing'});}return;}
|
|
71
|
-
const k=ctx.keys,manual:Inputs={throttle:k.has('ArrowUp')||k.has('KeyW')?1:0,brake:k.has('ArrowDown')||k.has('KeyS'),steer:(k.has('ArrowRight')||k.has('KeyD')?1:0)-(k.has('ArrowLeft')||k.has('KeyA')?1:0),drift:k.has('Space'),boost:k.has('ShiftLeft')||k.has('ShiftRight')};
|
|
72
|
-
const manualString=JSON.stringify(manual);if(!state.autoplay&&!botNow&&manualString!==lastManual){lastManual=manualString;log('manual-input',{inputs:manual});}
|
|
73
|
-
for(const c of cars)drive(c,c.id===0&&!state.autoplay&&!c.finished?manual:controller(c),dt);
|
|
74
|
-
for(let i=0;i<cars.length;i++)for(let j=i+1;j<cars.length;j++){
|
|
75
|
-
const a=cars[i],b=cars[j];if(a.finished||b.finished)continue;const dx=b.x-a.x,dy=b.y-a.y,d=Math.hypot(dx,dy);if(d>0&&d<2){const push=(2-d)*.51;a.x-=dx/d*push;a.y-=dy/d*push;b.x+=dx/d*push;b.y+=dy/d*push;if(a.collisionCooldown===0&&b.collisionCooldown===0){a.speed*=.85;b.speed*=.85;log('kart-contact',{a:i,b:j,object:'Kart.'+j,x:a.x,y:a.y});a.collisionCooldown=b.collisionCooldown=.5}}
|
|
76
|
-
}
|
|
77
|
-
for(const coin of coins){coin.mesh.visible=simTime>=coin.ready;if(!coin.mesh.visible)continue;coin.mesh.rotation.z=simTime*2;for(const c of cars){if(c.finished)continue;if(Math.hypot(c.x-coin.x,c.y-coin.y)<1.5){c.coins++;coin.ready=simTime+6;coin.mesh.visible=false;log('pickup',{racer:c.id,object:'Coin.'+coin.id,coins:c.coins});break}}}
|
|
78
|
-
cars.forEach((c,i)=>{const f=flames[i];f.visible=c.boost>0&&!c.parked;f.position.set(c.x-Math.sin(c.heading)*1.8,c.y-Math.cos(c.heading)*1.8,.38);f.rotation.set(Math.PI/2,0,-c.heading);f.scale.setScalar(.8+.25*Math.sin(simTime*42));});
|
|
79
|
-
}
|
|
80
|
-
// THE GAME PANEL'S AUTOPLAY (`play autoplay on race`): a bot that drives Pip with the keys a person
|
|
81
|
-
// holds, through the manual code above, steering as the race's own AUTO does (`controller`, which logs
|
|
82
|
-
// its decisions). Steering keys are pulsed so their average follows that steer; while the bot drives,
|
|
83
|
-
// those key changes are not logged as manual input.
|
|
84
|
-
let botDriving=false,botNow=false,steerDebt=0;
|
|
85
|
-
ctx.autoplay({race:()=>{
|
|
86
|
-
botDriving=true;const c=cars[0];
|
|
87
|
-
if(state.paused)return {keys:[],state:'race paused'};
|
|
88
|
-
if(state.phase==='ready')return {keys:['ArrowUp'],state:'starting the race'};
|
|
89
|
-
if(state.phase==='countdown')return {keys:[],state:'waiting for the countdown'};
|
|
90
|
-
if(c.finished)return {keys:[],state:'finished; Pip parks past the line'};
|
|
91
|
-
const input=controller(c),keys:string[]=[];steerDebt+=input.steer;
|
|
92
|
-
if(steerDebt>=.5){keys.push('ArrowRight');steerDebt-=1}else if(steerDebt<=-.5){keys.push('ArrowLeft');steerDebt+=1}
|
|
93
|
-
if(input.throttle)keys.push('ArrowUp');if(input.brake)keys.push('ArrowDown');if(input.drift)keys.push('Space');if(input.boost)keys.push('ShiftLeft');
|
|
94
|
-
return {keys,state:`racing lap ${c.lap} of 3`};
|
|
95
|
-
}});
|
|
96
|
-
reset(false);
|
|
97
|
-
return {update(dt:number){
|
|
98
|
-
botNow=botDriving;botDriving=false;
|
|
99
|
-
const keyCommands:[string,Command][]=[['Enter','start'],['KeyO','auto'],['KeyP','pause'],['KeyR','restart']];
|
|
100
|
-
const commands=consumeCommands();for(const [key,cmd]of keyCommands)if(ctx.keys.has(key)&&!previousKeys.has(key))commands.push(cmd);
|
|
101
|
-
for(const cmd of commands)command(cmd);
|
|
102
|
-
const moving=['ArrowUp','ArrowDown','ArrowLeft','ArrowRight','KeyW','KeyA','KeyS','KeyD'].some(k=>ctx.keys.has(k));
|
|
103
|
-
if(moving&&!state.paused&&!cars[0].finished){if(state.autoplay){state={...state,autoplay:false};log('autoplay',{enabled:false,cause:'manual takeover'})}start()}
|
|
104
|
-
previousKeys=new Set(ctx.keys);if(!state.paused){accumulator+=Math.min(dt,.1);while(accumulator>=1/60){physics(1/60);accumulator-=1/60}}else accumulator=0;
|
|
105
|
-
camera();clock+=dt;if(clock>.075||commands.length){publish();clock=0;}
|
|
106
|
-
},dispose(){pickups.removeFromParent();sparks.removeFromParent();coinGeometry.dispose();coinMaterial.dispose();flameGeo.dispose();flameMat.dispose();}};
|
|
107
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
#
|
|
3
|
-
# THE bpy SCRIPTS ARE GPL, AND THE REST OF YOUR PROJECT IS NOT.
|
|
4
|
-
#
|
|
5
|
-
# This file and the step scripts beside it drive `bpy`, Blender's Python API.
|
|
6
|
-
# The Blender Foundation's stated position — their licence page, under
|
|
7
|
-
# "Add-ons (Python scripts)" — is that the API "is an integral part of the
|
|
8
|
-
# software" and that the GPL "therefore requires that such scripts (if
|
|
9
|
-
# published) are being shared under a GPL compliant license". So a bpy script
|
|
10
|
-
# is a derivative work of Blender, and these are licensed GNU General Public
|
|
11
|
-
# License version 3 or later, exercising Blender's own "or later".
|
|
12
|
-
#
|
|
13
|
-
# WHAT THIS DOES NOT TOUCH. `canyon.blend` beside this file is YOURS, and so
|
|
14
|
-
# is anything you export from it — glTF, GLB, renders. That is the
|
|
15
|
-
# Foundation's position too, on the same page under "Your Artwork": what you
|
|
16
|
-
# make with Blender is your sole property, "including the .blend files and
|
|
17
|
-
# other data files Blender can write". The play script, the race state, the
|
|
18
|
-
# textures and the React UI the template gave you are MIT. This licence
|
|
19
|
-
# reaches the bpy scripts and nothing else.
|
|
20
|
-
#
|
|
21
|
-
# If you would rather not carry them: delete them. The `.blend` is the
|
|
22
|
-
# document — these are only the recorded source of how it was made — and
|
|
23
|
-
# nothing in the project reads them at runtime. If you write your own bpy
|
|
24
|
-
# scripts, the Foundation's position applies to them on the same terms; it is
|
|
25
|
-
# not a rule of ours and is not ours to waive, because the copyright in
|
|
26
|
-
# Blender is Blender's authors'.
|
|
27
|
-
#
|
|
28
|
-
# Copyright 2026 Volter AI, Inc.
|
|
29
|
-
|
|
30
|
-
"""Canyon Comet's authoring entry: the record of how `canyon.blend` was made.
|
|
31
|
-
|
|
32
|
-
The saved `canyon.blend` is the document, and it is authoritative: this script
|
|
33
|
-
never rebuilds existing artwork. Run on a file without the `Canyon Comet`
|
|
34
|
-
collection, it runs the milestone scripts beside it in order (the circuit,
|
|
35
|
-
six karts and chase camera, then the canyon, textures from `src/textures/`,
|
|
36
|
-
polish and details, and last `scenery_ao.py`, which bakes ambient occlusion
|
|
37
|
-
into the static scenery), each saving `src/models/canyon.blend`.
|
|
38
|
-
|
|
39
|
-
Run it through the session's Blender, from this project:
|
|
40
|
-
|
|
41
|
-
exec(open("<project root>/src/models/canyon.py").read())
|
|
42
|
-
|
|
43
|
-
Coordinates are metres, Z is up. At Play, `canyon.play.ts` drives the six
|
|
44
|
-
`Kart.N` empties around the circuit that `course.ts` shares with these scripts.
|
|
45
|
-
"""
|
|
46
|
-
import bpy
|
|
47
|
-
from pathlib import Path
|
|
48
|
-
ROOT=Path(bpy.data.filepath).resolve().parents[2]
|
|
49
|
-
if bpy.data.collections.get('Canyon Comet'):
|
|
50
|
-
print('Canyon Comet is already authored. Existing geometry and manual edits preserved.')
|
|
51
|
-
else:
|
|
52
|
-
# Each step runs in its own namespace: they all name their own ROOT and helpers.
|
|
53
|
-
for step in ['circuit','environment','refine','polish','detail','complete_environment','kart_finish','driver_details','finish_scene','scenery_ao']:
|
|
54
|
-
source=ROOT/'src'/'models'/(step+'.py')
|
|
55
|
-
exec(compile(source.read_text(),step+'.py','exec'),{'__name__':'__main__','__file__':str(source)})
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
# Milestone 1 of canyon.py: the circuit, six karts, sky, sun and chase camera.
|
|
4
|
-
import bpy, math, random, datetime
|
|
5
|
-
from mathutils import Vector
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
8
|
-
random.seed(71)
|
|
9
|
-
# Rebuild only owned scene content, preserving reference, notes and manual objects.
|
|
10
|
-
for o in list(bpy.data.objects):
|
|
11
|
-
if (o.get('canyon_owned') or o.name=='Cube') and not any(c.name in ['References','Notes'] for c in o.users_collection): bpy.data.objects.remove(o,do_unlink=True)
|
|
12
|
-
col=bpy.data.collections.get('Canyon Comet') or bpy.data.collections.new('Canyon Comet')
|
|
13
|
-
if col.name not in bpy.context.scene.collection.children: bpy.context.scene.collection.children.link(col)
|
|
14
|
-
def own(o): o['canyon_owned']=True; col.objects.link(o); return o
|
|
15
|
-
def lin(c): return c/12.92 if c<.04045 else ((c+.055)/1.055)**2.4
|
|
16
|
-
def mat(n,h,rough=.55,metal=0):
|
|
17
|
-
m=bpy.data.materials.get(n) or bpy.data.materials.new(n); m.use_nodes=True
|
|
18
|
-
rgb=[lin(int(h[i:i+2],16)/255) for i in (0,2,4)]; m.diffuse_color=(*rgb,1)
|
|
19
|
-
p=m.node_tree.nodes.get('Principled BSDF'); p.inputs['Base Color'].default_value=(*rgb,1); p.inputs['Roughness'].default_value=rough;p.inputs['Metallic'].default_value=metal
|
|
20
|
-
return m
|
|
21
|
-
sand=mat('Warm peach sand','EBA76B'); road=mat('Granular warm asphalt','777970',.98); white=mat('Ivory enamel','EDF1E7',.28); teal=mat('Lagoon turquoise','13C8CF',.25,.15); yellow=mat('Golden yellow','F5C62B',.3); purple=mat('Violet racer','773FDC',.28); green=mat('Apple racer','59BC37',.28); blue=mat('Sky racer','319BBE',.27); coral=mat('Coral racer','F05C33',.3); tire=mat('Graphite rubber','202A29',.9); metal=mat('Brushed aluminum','A3AFAA',.3,.55); dark=mat('Ink blue helmet','203D58',.28); red=mat('Ruby tail lamps','BA291D',.22); orange=mat('Tangerine trim','F68B25',.3); mint=mat('Mint creature','38CCAC',.4); edge=mat('Mint track paint','5AF1B9',.8); black=mat('Sign charcoal','343B32',.8); lamp=mat('Amber lamps','FFF399',.4)
|
|
22
|
-
lamp.node_tree.nodes.get('Principled BSDF').inputs['Emission Color'].default_value=(1,.72,.15,1);lamp.node_tree.nodes.get('Principled BSDF').inputs['Emission Strength'].default_value=1.2
|
|
23
|
-
cache={}
|
|
24
|
-
def mesh(n,v,f,m):
|
|
25
|
-
d=bpy.data.meshes.new(n);d.from_pydata(v,[],f);d.materials.append(m);d.update();return d
|
|
26
|
-
def obj(n,d,loc=(0,0,0),scale=(1,1,1),parent=None):
|
|
27
|
-
o=own(bpy.data.objects.new(n,d));o.location=loc;o.scale=scale;o.parent=parent;return o
|
|
28
|
-
def sphere(n,loc,scale,m,parent=None):
|
|
29
|
-
key=('sphere',m.name)
|
|
30
|
-
if key not in cache:
|
|
31
|
-
v=[(math.sin(math.pi*j/16)*math.cos(2*math.pi*i/28),math.sin(math.pi*j/16)*math.sin(2*math.pi*i/28),math.cos(math.pi*j/16)) for j in range(17) for i in range(28)]
|
|
32
|
-
f=[(j*28+i,j*28+(i+1)%28,(j+1)*28+(i+1)%28,(j+1)*28+i) for j in range(16) for i in range(28)]
|
|
33
|
-
# Sphere param runs north to south, winding outward.
|
|
34
|
-
d=mesh('Smooth '+m.name,v,[tuple(reversed(a)) for a in f],m)
|
|
35
|
-
for p in d.polygons:p.use_smooth=True
|
|
36
|
-
cache[key]=d
|
|
37
|
-
return obj(n,cache[key],loc,scale,parent)
|
|
38
|
-
def box(n,loc,s,m,parent=None):
|
|
39
|
-
key=('box',m.name)
|
|
40
|
-
if key not in cache:
|
|
41
|
-
v=[(-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1),(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1)]
|
|
42
|
-
cache[key]=mesh(m.name+' block',v,[(0,3,2,1),(0,1,5,4),(1,2,6,5),(2,3,7,6),(3,0,4,7),(4,5,6,7)],m)
|
|
43
|
-
return obj(n,cache[key],loc,tuple(a/2 for a in s),parent)
|
|
44
|
-
def rod(n,a,b,r,m,parent=None):
|
|
45
|
-
mid=(Vector(a)+Vector(b))/2;o=sphere(n,mid,(r,r,(Vector(b)-Vector(a)).length/2+r),m,parent);o.rotation_euler=(Vector(b)-Vector(a)).to_track_quat('Z','Y').to_euler();return o
|
|
46
|
-
def torus(n,loc,R,r,m,parent=None):
|
|
47
|
-
key=('torus',R,r,m.name)
|
|
48
|
-
if key not in cache:
|
|
49
|
-
v=[((R+r*math.cos(j*math.tau/12))*math.cos(i*math.tau/28),(R+r*math.cos(j*math.tau/12))*math.sin(i*math.tau/28),r*math.sin(j*math.tau/12)) for i in range(28) for j in range(12)]
|
|
50
|
-
f=[(i*12+j,((i+1)%28)*12+j,((i+1)%28)*12+(j+1)%12,i*12+(j+1)%12) for i in range(28) for j in range(12)]
|
|
51
|
-
d=mesh(n,v,f,m)
|
|
52
|
-
for p in d.polygons:p.use_smooth=True
|
|
53
|
-
cache[key]=d
|
|
54
|
-
return obj(n,cache[key],loc,parent=parent)
|
|
55
|
-
POINTS=[(0,0),(0,25),(12,55),(42,70),(68,45),(65,5),(40,-25),(8,-25)]
|
|
56
|
-
def center(t):
|
|
57
|
-
k=math.floor(t)%8;u=t%1;p0=Vector(POINTS[(k-1)%8]);p1=Vector(POINTS[k]);p2=Vector(POINTS[(k+1)%8]);p3=Vector(POINTS[(k+2)%8]);return .5*((2*p1)+(-p0+p2)*u+(2*p0-5*p1+4*p2-p3)*u*u+(-p0+3*p1-3*p2+p3)*u*u*u)
|
|
58
|
-
def sample(t,offset=0):
|
|
59
|
-
p=center(t);d=(center(t+.001)-center(t-.001)).normalized();return p+Vector((d.y,-d.x))*offset
|
|
60
|
-
N=512
|
|
61
|
-
def ribbon(n,left,right,z,m):
|
|
62
|
-
v=[]
|
|
63
|
-
for i in range(N):
|
|
64
|
-
for off in [left,right]:
|
|
65
|
-
p=sample(i*8/N,off);v.append((p.x,p.y,z))
|
|
66
|
-
f=[(2*i,2*i+1,2*((i+1)%N)+1,2*((i+1)%N)) for i in range(N)]
|
|
67
|
-
return obj(n,mesh(n,v,f,m))
|
|
68
|
-
box('Desert floor',(30,20,-.3),(360,360,.5),sand)
|
|
69
|
-
ribbon('Circuit asphalt',-12,12,0,road)
|
|
70
|
-
for side in [-1,1]:
|
|
71
|
-
ribbon('Ivory shoulder '+str(side),side*12,side*12.5,.015,white)
|
|
72
|
-
ribbon('Turquoise racing edge '+str(side),side*11.45,side*12,.028,edge)
|
|
73
|
-
for i in range(90):
|
|
74
|
-
t=i*8/90;p=sample(t);q=sample(t+.015);d=q-p
|
|
75
|
-
o=box('Lane dash %03d'%i,(p.x,p.y,.035),(.28,2.1,.015),white);o.rotation_euler.z=-math.atan2(d.x,d.y)
|
|
76
|
-
def kart(index,pos,color,character):
|
|
77
|
-
root=own(bpy.data.objects.new('Kart.%d'%index,None));root.location=pos
|
|
78
|
-
sphere('K%d sculpted chassis'%index,(0,0,.64),(1.05,1.5,.52),color,root)
|
|
79
|
-
sphere('K%d cockpit'%index,(0,.12,1.01),(.73,.8,.19),tire,root)
|
|
80
|
-
sphere('K%d nose'%index,(0,1,.67),(.9,.75,.35),color,root)
|
|
81
|
-
for x in [-1,1]:
|
|
82
|
-
for y in [-.88,.88]:
|
|
83
|
-
o=torus('K%d tire'%index,(x,y,.46),.31,.16,tire,root);o.rotation_euler.y=math.pi/2
|
|
84
|
-
sphere('K%d gold wheel'%index,(x*1.145,y,.46),(.07,.28,.28),yellow,root)
|
|
85
|
-
sphere('K%d wheel hub'%index,(x*1.2,y,.46),(.025,.13,.13),tire,root)
|
|
86
|
-
sphere('K%d white rear pod'%index,(x*.8,-.85,.85),(.23,.53,.44),white,root)
|
|
87
|
-
sphere('K%d red lamp'%index,(x*.83,-1.28,.98),(.14,.065,.23),red,root)
|
|
88
|
-
sphere('K%d lamp glint'%index,(x*.8,-1.34,1.06),(.045,.017,.085),orange,root)
|
|
89
|
-
rod('K%d wing strut'%index,(x*.6,-.84,1.1),(x*.6,-.84,1.4),.055,metal,root)
|
|
90
|
-
sphere('K%d rounded wing'%index,(0,-.96,1.4),(.88,.18,.09),color,root)
|
|
91
|
-
box('K%d rear cream stripe'%index,(0,-1.46,.72),(.32,.018,.45),white,root)
|
|
92
|
-
sphere('K%d bumper'%index,(0,-1.43,.46),(.48,.16,.22),metal,root)
|
|
93
|
-
for x in [-.17,.17]:
|
|
94
|
-
o=torus('K%d exhaust rim'%index,(x,-1.66,.34),.12,.042,metal,root);o.rotation_euler.x=math.pi/2
|
|
95
|
-
sphere('K%d exhaust bore'%index,(x,-1.65,.34),(.105,.02,.105),tire,root)
|
|
96
|
-
sphere('K%d driver suit'%index,(0,.05,1.36),(.43,.34,.48),orange if index==0 else coral,root)
|
|
97
|
-
for x in [-.37,.37]:rod('K%d driver arm'%index,(x,0,1.49),(x,.55,1.18),.14,white,root)
|
|
98
|
-
if character=='helmet':
|
|
99
|
-
sphere('K%d helmet rim'%index,(0,.05,1.82),(.64,.6,.28),tire,root)
|
|
100
|
-
sphere('K%d helmet'%index,(0,.06,2.14),(.67,.61,.65),white,root)
|
|
101
|
-
sphere('K%d face visor'%index,(0,.55,2.11),(.5,.14,.32),dark,root)
|
|
102
|
-
# Orange stripe follows the curved helmet from brow to neck.
|
|
103
|
-
v=[];f=[]
|
|
104
|
-
for j in range(33):
|
|
105
|
-
a=-math.pi*.48+math.pi*1.05*j/32
|
|
106
|
-
for x in [-.115,.115]:v.append((x,.06+math.sin(a)*.623,2.14+math.cos(a)*.657))
|
|
107
|
-
for j in range(32):f.append((j*2,j*2+1,j*2+3,j*2+2))
|
|
108
|
-
obj('K%d helmet stripe'%index,mesh('Stripe',v,f,orange),parent=root)
|
|
109
|
-
sphere('K%d scarf'%index,(0,-.28,1.49),(.38,.12,.14),coral,root)
|
|
110
|
-
elif character=='miso':
|
|
111
|
-
sphere('K%d mint head'%index,(0,.06,2.03),(.77,.66,.65),mint,root)
|
|
112
|
-
for x in [-.73,.73]:sphere('K%d rounded ears'%index,(x,.05,2.17),(.28,.21,.28),mint,root)
|
|
113
|
-
for x in [-.28,.28]:sphere('K%d coral crest'%index,(x,.02,2.67),(.14,.25,.28),orange,root)
|
|
114
|
-
else:
|
|
115
|
-
sphere('K%d navy helmet'%index,(0,.06,2.1),(.68,.62,.64),dark,root)
|
|
116
|
-
for x in [-.66,.66]:
|
|
117
|
-
sphere('K%d orange earcup'%index,(x,0,2.04),(.15,.28,.3),orange,root)
|
|
118
|
-
sphere('K%d earcup metal'%index,(x*1.14,0,2.04),(.025,.17,.19),metal,root)
|
|
119
|
-
rod('K%d headband'%index,(-.52,.04,2.56),(.52,.04,2.56),.08,metal,root)
|
|
120
|
-
sphere('K%d visor'%index,(0,.6,2.12),(.48,.13,.28),teal,root)
|
|
121
|
-
return root
|
|
122
|
-
kart(0,(0,0,0),teal,'helmet');kart(1,(-5.4,1.3,0),yellow,'miso');kart(2,(4.8,4.4,0),purple,'nova');kart(3,(-1.5,17,0),green,'miso');kart(4,(1,23,0),blue,'helmet');kart(5,(7,30,0),coral,'nova')
|
|
123
|
-
# Sunlight and a sky dome use the actual authored scene in Edit and Play.
|
|
124
|
-
world=bpy.context.scene.world or bpy.data.worlds.new('Canyon sky');bpy.context.scene.world=world;world.use_nodes=True;world.node_tree.nodes['Background'].inputs[0].default_value=(.23,.65,.8,1);world.node_tree.nodes['Background'].inputs[1].default_value=.7
|
|
125
|
-
sky=mat('Cyan sky','6AD9ED',1);p=sky.node_tree.nodes.get('Principled BSDF');p.inputs['Emission Color'].default_value=(*[lin(a/255) for a in (106,217,237)],1);p.inputs['Emission Strength'].default_value=.8
|
|
126
|
-
light=bpy.data.lights.new('Afternoon sun','SUN');light.energy=3;light.angle=.08;l=own(bpy.data.objects.new('Afternoon sun',light));l.rotation_euler=(.5,-.5,-.5)
|
|
127
|
-
c=bpy.data.cameras.new('Chase camera');c.lens=24;c.sensor_width=36;cam=own(bpy.data.objects.new('Chase camera',c));cam.location=(0,-9,5.1);cam.rotation_euler=(Vector((0,18,1.6))-cam.location).to_track_quat('-Z','Y').to_euler();bpy.context.scene.camera=cam
|
|
128
|
-
bpy.context.scene.render.resolution_x=1672;bpy.context.scene.render.resolution_y=941
|
|
129
|
-
bpy.context.scene.view_settings.view_transform='Standard'
|
|
130
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
131
|
-
print('Milestone 1: circuit, six rounded karts and chase camera saved')
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import bpy,math,random,datetime
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
6
|
-
exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
|
|
7
|
-
random.seed(38)
|
|
8
|
-
rock=bpy.data.materials['Continuous sandstone strata']
|
|
9
|
-
# Layered landforms on the return straight and inner island.
|
|
10
|
-
def mesa2(n,x,y,rx,ry,h):
|
|
11
|
-
v=[];count=18;rings=17
|
|
12
|
-
jitter=[random.uniform(.87,1.1)for _ in range(count)]
|
|
13
|
-
for j in range(rings):
|
|
14
|
-
z=h*j/(rings-1);s=1-(j//4)*.14
|
|
15
|
-
for i in range(count):
|
|
16
|
-
a=i*math.tau/count;r=s*jitter[i];v.append((x+rx*r*math.cos(a)+.16*math.sin(z+i),y+ry*r*math.sin(a),z))
|
|
17
|
-
f=[(j*count+i,j*count+(i+1)%count,(j+1)*count+(i+1)%count,(j+1)*count+i)for j in range(rings-1)for i in range(count)];f+=[tuple(range((rings-1)*count,rings*count))]
|
|
18
|
-
d=mesh(n,v,f,rock);o=obj(n,d);uv=d.uv_layers.new(name='Strata')
|
|
19
|
-
for p in d.polygons:
|
|
20
|
-
for li in p.loop_indices:
|
|
21
|
-
a=d.vertices[d.loops[li].vertex_index].co;uv.data[li].uv=((a.x+a.y*.61)/18,a.z/9)
|
|
22
|
-
b=o.modifiers.new('Weathered corners','BEVEL');b.width=.22;b.segments=2
|
|
23
|
-
return o
|
|
24
|
-
for i,(x,y,rx,ry,h)in enumerate([(-40,-32,15,22,23),(-14,-59,22,12,21),(22,-62,21,12,28),(57,-56,15,12,19),(90,-34,15,20,24),(112,0,16,22,29),(112,38,13,21,24),(104,76,15,18,27),(70,106,21,15,22),(32,26,10,14,8),(38,48,9,8,5)]):mesa2('Return canyon mesa '+str(i),x,y,rx,ry,h)
|
|
25
|
-
for ob in list(bpy.data.objects):
|
|
26
|
-
if ob.name.startswith('Distant eroded butte'):bpy.data.objects.remove(ob,do_unlink=True)
|
|
27
|
-
# Add fine puffs to the clouds, using one shared mesh.
|
|
28
|
-
cloud=bpy.data.materials['Soft cream clouds'];p=cloud.node_tree.nodes['Principled BSDF'];p.inputs['Emission Color'].default_value=(.45,.43,.38,1);p.inputs['Emission Strength'].default_value=.45
|
|
29
|
-
for x,y,z in [(-5,-140,40),(60,-140,42),(155,30,47)]:
|
|
30
|
-
for j in range(18):sphere('Return cloud puff',(x+random.uniform(-15,15),y+random.uniform(-3,3),z+random.uniform(-3,4)),(random.uniform(2,5),3,random.uniform(2,4)),cloud)
|
|
31
|
-
# Visible start/finish stripe lives just behind the grid, leaving the reference shot open.
|
|
32
|
-
for ix in range(20):
|
|
33
|
-
for iy in range(2):box('Finish line tile',(-11.4+ix*1.2,-2+iy*.6,.045),(1.2,.6,.018),white if (ix+iy)%2==0 else tire)
|
|
34
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
35
|
-
print('Return circuit scenery and finish line saved')
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
// Copyright 2026 Volter AI, Inc.
|
|
3
|
-
export const points=[[0,0],[0,25],[12,55],[42,70],[68,45],[65,5],[40,-25],[8,-25]];
|
|
4
|
-
export function curve(t:number){const k=Math.floor(t),u=t-k;const p=[-1,0,1,2].map(d=>points[((k+d)%8+8)%8]);return [0,1].map(c=>.5*(2*p[1][c]+(-p[0][c]+p[2][c])*u+(2*p[0][c]-5*p[1][c]+4*p[2][c]-p[3][c])*u*u+(-p[0][c]+3*p[1][c]-3*p[2][c]+p[3][c])*u*u*u));}
|
|
5
|
-
export const course=Array.from({length:769},(_,i)=>{const p=curve(i*8/768);return {x:p[0],y:p[1],s:0,t:i*8/768}});
|
|
6
|
-
for(let i=1;i<course.length;i++)course[i].s=course[i-1].s+Math.hypot(course[i].x-course[i-1].x,course[i].y-course[i-1].y);
|
|
7
|
-
export const length=course.at(-1)!.s;
|
|
8
|
-
export const wrap=(v:number)=>((v%length)+length)%length;
|
|
9
|
-
export function at(s:number,lane=0){s=wrap(s);let lo=0,hi=768;while(hi-lo>1){const m=(lo+hi)>>1;if(course[m].s<s)lo=m;else hi=m;}const a=course[lo],b=course[hi],f=(s-a.s)/(b.s-a.s),dx=b.x-a.x,dy=b.y-a.y,h=Math.atan2(dx,dy);return {x:a.x+(b.x-a.x)*f+Math.cos(h)*lane,y:a.y+(b.y-a.y)*f-Math.sin(h)*lane,heading:h,t:a.t+(b.t-a.t)*f};}
|
|
10
|
-
export function nearest(x:number,y:number){let best=Infinity,res={s:0,x:0,y:0,d:0,lane:0,t:0,heading:0};for(let i=0;i<768;i++){const a=course[i],b=course[i+1],dx=b.x-a.x,dy=b.y-a.y,q=Math.max(0,Math.min(1,((x-a.x)*dx+(y-a.y)*dy)/(dx*dx+dy*dy))),px=a.x+dx*q,py=a.y+dy*q,d=(px-x)**2+(py-y)**2;if(d<best){best=d;const h=Math.atan2(dx,dy);res={x:px,y:py,s:a.s+q*(b.s-a.s),d:Math.sqrt(d),lane:(x-px)*Math.cos(h)-(y-py)*Math.sin(h),heading:h,t:a.t+(b.t-a.t)*q}}}return res;}
|
|
11
|
-
export const leftWidth=(t:number,y:number)=>12+((t<2.4||t>7.3)?17*Math.exp(-Math.max(0,y)/28):0);
|
|
12
|
-
export const angle=(v:number)=>Math.atan2(Math.sin(v),Math.cos(v));
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import bpy,math,random,datetime
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
6
|
-
exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
|
|
7
|
-
for ob in list(bpy.data.objects):
|
|
8
|
-
if 'exhaust tube' in ob.name:bpy.data.objects.remove(ob,do_unlink=True)
|
|
9
|
-
# Wider, softer kart body with a rounded rectangular engine bumper.
|
|
10
|
-
for i in range(6):
|
|
11
|
-
rt=bpy.data.objects['Kart.'+str(i)]
|
|
12
|
-
for ob in rt.children:
|
|
13
|
-
if 'bumper' in ob.name:
|
|
14
|
-
ob.scale.z*=1.6;ob.scale.y*=.85
|
|
15
|
-
if 'helmet stripe' in ob.name:
|
|
16
|
-
for j in range(33):
|
|
17
|
-
a=-2.2+4.0*j/32
|
|
18
|
-
for k,x in enumerate([-.115,.115]):ob.data.vertices[j*2+k].co=(x,.06+math.sin(a)*.623,2.14+math.cos(a)*.657)
|
|
19
|
-
ob.data.update()
|
|
20
|
-
# Small amber brake studs and bolts provide scale and material contrast.
|
|
21
|
-
for x in [-.58,.58]:sphere('K%d wing bolt'%i,(x,-1.08,1.4),(.055,.035,.035),metal,rt)
|
|
22
|
-
# Broader lane dashes and a more open skyline.
|
|
23
|
-
for ob in bpy.data.objects:
|
|
24
|
-
if ob.name.startswith('Lane dash'):
|
|
25
|
-
ob.scale.x*=1.8;ob.scale.y*=.7
|
|
26
|
-
if ob.name.startswith('Cloud'):
|
|
27
|
-
ob.scale.z*=.65;ob.location.z+=5
|
|
28
|
-
# Raised sand terraces put the left signs above the distant rail like the reference.
|
|
29
|
-
for name in ['West ledge','West middle mesa']:
|
|
30
|
-
ob=bpy.data.objects[name];ob.scale.z*=.86
|
|
31
|
-
# Secondary sandstone shelves, forming broad irregular blocks rather than isolated cylinders.
|
|
32
|
-
rock=bpy.data.materials['Continuous sandstone strata']
|
|
33
|
-
for i,(x,y,z,sx,sy,sz) in enumerate([(-29,28,1.2,18,18,2.4),(-23,45,1.1,14,16,2.2),(28,37,.7,8,7,1.4)]):
|
|
34
|
-
ob=box('Low sandstone shelf '+str(i),(x,y,z),(sx,sy,sz),rock)
|
|
35
|
-
uv=ob.data.uv_layers.get('Strata') or ob.data.uv_layers.new(name='Strata')
|
|
36
|
-
for p in ob.data.polygons:
|
|
37
|
-
for li in p.loop_indices:
|
|
38
|
-
v=ob.data.vertices[ob.data.loops[li].vertex_index].co;uv.data[li].uv=((v.x+v.y)*.5,v.z*.25)
|
|
39
|
-
# Hazy distant formations fill the opening below the arch.
|
|
40
|
-
haze=mat('Distant rose sandstone','DBA188',1)
|
|
41
|
-
for x,y,z,sx,sy,sz in [(23,122,5,18,13,10),(29,123,11,13,11,5),(29,123,15,8,8,3),(-3,137,6,16,16,12)]:
|
|
42
|
-
sphere('Distant eroded butte',(x,y,z),(sx,sy,sz*.5),haze)
|
|
43
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
44
|
-
print('Final surface and silhouette detailing saved')
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import bpy,math
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
6
|
-
exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
|
|
7
|
-
for i in range(6):
|
|
8
|
-
root=bpy.data.objects['Kart.'+str(i)]
|
|
9
|
-
if bpy.data.objects.get('K%d steering wheel'%i):continue
|
|
10
|
-
wheel=torus('K%d steering wheel'%i,(0,.63,1.25),.24,.043,tire,root);wheel.rotation_euler.x=.9
|
|
11
|
-
rod('K%d steering column'%i,(0,.65,.9),(0,.63,1.25),.045,metal,root)
|
|
12
|
-
rod('K%d steering spoke'%i,(-.23,.63,1.25),(.23,.63,1.25),.025,metal,root)
|
|
13
|
-
for x in [-.54,.54]:
|
|
14
|
-
sphere('K%d headlight housing'%i,(x,1.53,.77),(.26,.17,.18),white,root)
|
|
15
|
-
sphere('K%d golden headlight'%i,(x,1.66,.77),(.17,.055,.115),yellow,root)
|
|
16
|
-
sphere('K%d front air intake'%i,(0,1.72,.52),(.34,.04,.09),tire,root)
|
|
17
|
-
if i in [1,3]:
|
|
18
|
-
for x in [-.27,.27]:
|
|
19
|
-
sphere('K%d creature eye'%i,(x,.637,2.2),(.18,.06,.22),white,root)
|
|
20
|
-
sphere('K%d creature pupil'%i,(x,.693,2.19),(.087,.035,.13),dark,root)
|
|
21
|
-
sphere('K%d eye sparkle'%i,(x-.025,.721,2.24),(.026,.015,.036),white,root)
|
|
22
|
-
sphere('K%d creature muzzle'%i,(0,.686,1.92),(.27,.11,.13),mint,root)
|
|
23
|
-
sphere('K%d creature nose'%i,(0,.783,1.98),(.075,.025,.047),dark,root)
|
|
24
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
25
|
-
print('Steering controls, headlights and original creature faces saved')
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
# Additive environment milestone; shares helpers from scene_helpers.py.
|
|
4
|
-
import bpy, math, random, datetime
|
|
5
|
-
exec(compile(open(str(__import__('pathlib').Path(bpy.data.filepath).resolve().parent / 'scene_helpers.py')).read(),"scene_helpers.py","exec"))
|
|
6
|
-
random.seed(178)
|
|
7
|
-
for o in list(bpy.data.objects):
|
|
8
|
-
if o.get('environment_owned'):bpy.data.objects.remove(o,do_unlink=True)
|
|
9
|
-
before=set(bpy.data.objects)
|
|
10
|
-
rocks=[mat('Sandstone band '+str(i),h,.95) for i,h in enumerate(['C8794E','D98654','B9603F','E49C61','BB6548','F3B576','D78457','A95A42'])]
|
|
11
|
-
def mesa(n,x,y,rx,ry,h):
|
|
12
|
-
count=14; rings=18;v=[]
|
|
13
|
-
angular=[random.uniform(.85,1.12) for i in range(count)]
|
|
14
|
-
for j in range(rings):
|
|
15
|
-
z=h*j/(rings-1);s=1-(j//4)*.12+random.uniform(-.015,.015)
|
|
16
|
-
for i in range(count):
|
|
17
|
-
a=i*math.tau/count;v.append((x+rx*s*angular[i]*math.cos(a),y+ry*s*angular[i]*math.sin(a),z))
|
|
18
|
-
f=[]
|
|
19
|
-
for j in range(rings-1):
|
|
20
|
-
for i in range(count):f.append((j*count+i,j*count+(i+1)%count,(j+1)*count+(i+1)%count,(j+1)*count+i))
|
|
21
|
-
f.append(tuple(range((rings-1)*count,rings*count)));f.append(tuple(reversed(range(count))))
|
|
22
|
-
d=mesh(n,v,f,rocks[0]);[d.materials.append(m) for m in rocks[1:]]
|
|
23
|
-
for p in d.polygons:p.material_index=(p.index//count)%len(rocks)
|
|
24
|
-
return obj(n,d)
|
|
25
|
-
# Main composition: left stepped escarpment and right arch buttress.
|
|
26
|
-
for args in [('West high mesa',-29,28,16,23,29),('West middle mesa',-22,42,12,22,18),('West ledge',-22,12,11,17,9),('Arch east tower',38,49,12,17,24),('East foreground cliff',43,27,15,15,17),('Arch west tower',-12,53,9,11,15),('Distant mesa',36,106,23,18,22),('Far left mesa',-31,102,21,24,25),('Far right mesa',95,85,21,27,30)]:mesa(*args)
|
|
27
|
-
# Uneven, layered voussoirs form a true open arch over the roadway.
|
|
28
|
-
for i in range(14):
|
|
29
|
-
a=i/14*math.pi;b=(i+1)/14*math.pi
|
|
30
|
-
inner=20;outer=25+random.uniform(-.5,.7);cx=13;cz=3
|
|
31
|
-
v=[]
|
|
32
|
-
for y in [46,55]:
|
|
33
|
-
for r,t in [(inner,a),(outer,a),(outer,b),(inner,b)]:v.append((cx+r*math.cos(t),y,cz+r*.65*math.sin(t)))
|
|
34
|
-
d=mesh('Arch stone',v,[(0,3,2,1),(4,5,6,7),(0,1,5,4),(1,2,6,5),(2,3,7,6),(3,0,4,7)],rocks[i%6]);obj('Natural arch span %02d'%i,d)
|
|
35
|
-
# Thin sediment seams across each major mesa, geometry preserves horizontal strata.
|
|
36
|
-
for o in list(bpy.data.objects):
|
|
37
|
-
if o.type=='MESH' and 'mesa' in o.name.lower() or o.name in ['West ledge','East foreground cliff','Arch east tower','Arch west tower']:
|
|
38
|
-
if not o.type=='MESH':continue
|
|
39
|
-
# add subtle surface noise as an image texture via shared materials later
|
|
40
|
-
# Guardrail wraps the outside bend.
|
|
41
|
-
for i in range(80):
|
|
42
|
-
t=-.28+i*.038;p=sample(t,-12.9);q=sample(t+.038,-12.9)
|
|
43
|
-
rod('Guardrail beam',(p.x,p.y,.97),(q.x,q.y,.97),.13,metal)
|
|
44
|
-
rod('Guardrail lower',(p.x,p.y,.73),(q.x,q.y,.73),.08,metal)
|
|
45
|
-
if i%2==0:box('Rail post',(p.x,p.y,.43),(.18,.2,.86),metal)
|
|
46
|
-
# Arrow panels are front facing and properly lit dot lamps.
|
|
47
|
-
for ix,(x,y,s) in enumerate([(-15,10,1.5),(-14,24,1.35),(-8,38,1.18)]):
|
|
48
|
-
box('Arrow panel frame '+str(ix),(x,y,4.1*s),(4.7*s,.25,2.5*s),metal)
|
|
49
|
-
box('Arrow panel face '+str(ix),(x,y-.15,4.1*s),(4.4*s,.07,2.25*s),black)
|
|
50
|
-
for cx in [-1.4,0,1.4]:
|
|
51
|
-
for j in range(9):
|
|
52
|
-
zz=(j-4)*.2;xx=cx+.65-abs(j-4)*.18
|
|
53
|
-
sphere('Arrow amber lamp',(x+xx*s,y-.22,4.1*s+zz*s),(.075*s,.05,.08*s),lamp)
|
|
54
|
-
for xx in [-1.65,1.65]:box('Arrow board post',(x+xx*s,y,1.8*s),(.19,.2,3.6*s),metal)
|
|
55
|
-
pole=rod('Flag pole',(x,y,5.3*s),(x,y,8.4*s),.06,metal)
|
|
56
|
-
obj('Sunrise racing pennant',mesh('Pennant',[(x,y,8.35*s),(x+1.4*s,y,7.8*s),(x,y,7.45*s)],[(0,1,2),(2,1,0)],green))
|
|
57
|
-
obj('Flag gold inset',mesh('Pennant gold',[(x+.15*s,y-.01,8.11*s),(x+1.05*s,y-.01,7.81*s),(x+.15*s,y-.01,7.63*s)],[(0,1,2),(2,1,0)],yellow))
|
|
58
|
-
cactus=mat('Saguaro green','529554',.85);rib=mat('Saguaro sunlit ribs','8CAC61',.85);thorn=mat('Cactus gold thorns','D4B66E',.9)
|
|
59
|
-
def cactus_at(x,y,h):
|
|
60
|
-
sphere('Saguaro trunk',(x,y,h*.5),(.36*h/4,.4*h/4,h*.5),cactus)
|
|
61
|
-
for j in range(7):
|
|
62
|
-
a=j*math.tau/7;rod('Cactus rib',(x+math.cos(a)*.33*h/4,y+math.sin(a)*.37*h/4,.3),(x+math.cos(a)*.28*h/4,y+math.sin(a)*.31*h/4,h*.9),.035*h/4,rib)
|
|
63
|
-
for s,z in [(-1,.48),(1,.66)]:
|
|
64
|
-
rod('Saguaro arm',(x,y,h*z),(x+s*h*.24,y,h*z),.22*h/4,cactus)
|
|
65
|
-
sphere('Saguaro arm tip',(x+s*h*.24,y,h*(z+.12)),(.23*h/4,.25*h/4,h*.22),cactus)
|
|
66
|
-
for i in range(int(h*3)):
|
|
67
|
-
a=random.random()*math.tau;z=random.uniform(.5,h*.92);sphere('Cactus thorn',(x+math.cos(a)*.39*h/4,y+math.sin(a)*.4*h/4,z),(.035,.035,.06),thorn)
|
|
68
|
-
for x,y,h in [(-19,14,6.8),(-16,23,4.2),(-16,34,3.7),(19,28,4.2),(27,39,6),(31,40,4.8),(-7,48,4),(43,75,6),(78,13,5),(-15,-15,6),(50,-42,5)]:cactus_at(x,y,h)
|
|
69
|
-
# Roadside stones and desert scrub, placed outside the drivable ribbon.
|
|
70
|
-
scrub=mat('Dry agave','8F9453',.95)
|
|
71
|
-
for i in range(90):
|
|
72
|
-
t=random.random()*8;p=sample(t,random.choice([-1,1])*random.uniform(14,23))
|
|
73
|
-
if i%4:
|
|
74
|
-
o=sphere('Tumbled sandstone',(p.x,p.y,.15),(random.uniform(.2,.7),random.uniform(.2,.65),random.uniform(.15,.4)),random.choice(rocks));o.rotation_euler.z=random.random()*6
|
|
75
|
-
else:
|
|
76
|
-
for j in range(9):
|
|
77
|
-
a=j*math.tau/9;b=(p.x,p.y,0);tip=(p.x+math.cos(a)*1.1,p.y+math.sin(a)*1.1,random.uniform(.4,1.5))
|
|
78
|
-
obj('Agave blade',mesh('Blade',[b,(p.x+.12,p.y+.12,.05),tip],[(0,1,2),(2,1,0)],scrub))
|
|
79
|
-
cloud=mat('Soft cream clouds','FCFCED',1)
|
|
80
|
-
# Puffy distant clouds remain beyond the cliffs, far from casting track shadows.
|
|
81
|
-
for x,y,z,sz in [(-65,165,47,9),(0,175,39,8),(65,170,45,12),(122,155,54,11),(-80,70,50,8)]:
|
|
82
|
-
for j in range(8):sphere('Cloud puff',(x+random.uniform(-sz,sz),y+random.uniform(-4,4),z+random.uniform(-3,4)),(random.uniform(3,7),4,random.uniform(2,5)),cloud)
|
|
83
|
-
for o in set(bpy.data.objects)-before:o['environment_owned']=True
|
|
84
|
-
# Avoid drawing camera wireframe over the intended shot.
|
|
85
|
-
bpy.data.objects['Chase camera'].hide_set(True)
|
|
86
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
87
|
-
print('Milestone 2: layered canyon, open rock arch, cacti, arrows, guardrails, cloud banks')
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import bpy,math,datetime
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
6
|
-
for name in ['West high mesa','West middle mesa','West ledge','Arch east tower','East foreground cliff','Arch west tower','Distant mesa','Far left mesa','Far right mesa','Natural sandstone arch']:
|
|
7
|
-
o=bpy.data.objects[name]
|
|
8
|
-
if not o.get('eroded'):
|
|
9
|
-
for v in o.data.vertices:
|
|
10
|
-
v.co.x+=.22*math.sin(v.co.z*1.3+v.co.y*.7);v.co.y+=.16*math.sin(v.co.z*2.1+v.co.x*.5)
|
|
11
|
-
b=o.modifiers.new('Weathered sandstone edges','BEVEL');b.width=.28;b.segments=3;o['eroded']=True
|
|
12
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
13
|
-
print('Weathered sandstone edges saved')
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
-
# Copyright 2026 Volter AI, Inc.
|
|
3
|
-
import bpy,math,bmesh
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
ROOT=str(Path(bpy.data.filepath).resolve().parents[2])
|
|
6
|
-
exec(compile(open(ROOT+'/src/models/scene_helpers.py').read(),'scene_helpers.py','exec'))
|
|
7
|
-
# Reusable rounded rear bumper and flat-tread racing tyre geometry.
|
|
8
|
-
verts=[];profile=[(-.225,.27),(-.225,.39),(-.18,.465),(.18,.465),(.225,.39),(.225,.27)]
|
|
9
|
-
for x,r in profile:
|
|
10
|
-
for i in range(32):a=i*math.tau/32;verts.append((x,r*math.cos(a),r*math.sin(a)))
|
|
11
|
-
faces=[]
|
|
12
|
-
for j in range(len(profile)):
|
|
13
|
-
for i in range(32):faces.append((j*32+i,j*32+(i+1)%32,((j+1)%len(profile))*32+(i+1)%32,((j+1)%len(profile))*32+i))
|
|
14
|
-
d=mesh('Rounded racing tire',verts,faces,tire);bm=bmesh.new();bm.from_mesh(d);bmesh.ops.recalc_face_normals(bm,faces=list(bm.faces));bm.to_mesh(d);bm.free()
|
|
15
|
-
for p in d.polygons:p.use_smooth=True
|
|
16
|
-
for i in range(6):
|
|
17
|
-
root=bpy.data.objects['Kart.'+str(i)]
|
|
18
|
-
for ob in root.children:
|
|
19
|
-
if ' tire' in ob.name:ob.data=d;ob.rotation_euler=(0,0,0)
|
|
20
|
-
if ' bumper' in ob.name and not ob.get('rounded_final'):
|
|
21
|
-
ob.data=box('Temporary bumper mesh',(0,0,0),(.88,.29,.48),white).data.copy()
|
|
22
|
-
temp=bpy.data.objects['Temporary bumper mesh'];bpy.data.objects.remove(temp,do_unlink=True)
|
|
23
|
-
# Box helper stores unit corners; bake its dimensions into the mesh.
|
|
24
|
-
for v in ob.data.vertices:v.co.x*=.44;v.co.y*=.145;v.co.z*=.24
|
|
25
|
-
ob.location=(0,-1.47,.48);ob.scale=(1,1,1)
|
|
26
|
-
m=ob.modifiers.new('Rounded bumper corners','BEVEL');m.width=.11;m.segments=4
|
|
27
|
-
ob['rounded_final']=True
|
|
28
|
-
# Tail reflector directly over the chrome pipes.
|
|
29
|
-
if not bpy.data.objects.get('K%d bumper reflector'%i):box('K%d bumper reflector'%i,(0,-1.622,.59),(.31,.012,.065),red,root)
|
|
30
|
-
bpy.ops.wm.save_as_mainfile(filepath=ROOT+'/src/models/canyon.blend')
|
|
31
|
-
print('Reusable flat-tread tyres and rounded rear bumpers saved')
|