@volter/game-editor 0.5.65
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 +11228 -0
- package/LICENSE +686 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +21 -0
- package/catalog/entries/audio.json +14 -0
- package/catalog/entries/bake.json +36 -0
- package/catalog/entries/blender.json +17 -0
- package/catalog/entries/react-root.json +24 -0
- package/catalog/entries/reflections.json +29 -0
- package/catalog/entries/static-batch.json +25 -0
- package/catalog/project-source/LICENSE +37 -0
- package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
- package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
- package/catalog/project-source/src/contributions/builder-state.ts +27 -0
- package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
- package/catalog/project-source/src/contributions/module-source.ts +502 -0
- package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
- package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
- package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
- package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
- package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
- package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
- package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
- package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
- package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
- package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
- package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
- package/catalog/project-source/src/lib/bake/params.ts +75 -0
- package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
- package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
- package/catalog/project-source/src/lib/react-root/index.ts +20 -0
- package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/catalog/project-source/src/lib/reflections/index.ts +19 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
- package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
- package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
- package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
- package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
- package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
- package/dist/.vite/manifest.json +8304 -0
- package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
- package/dist/assets/AudioViewer-CR7333fe.js +1 -0
- package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
- package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
- package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
- package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
- package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
- package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
- package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
- package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
- package/dist/assets/ConvexHull-BINCESFp.js +1 -0
- package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
- package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
- package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
- package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
- package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
- package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
- package/dist/assets/Fbo-Dz-Soul3.js +1 -0
- package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
- package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
- package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
- package/dist/assets/Gltf-UHVWKz65.js +2 -0
- package/dist/assets/HDRLoader-THU88oVD.js +5 -0
- package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
- package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
- package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
- package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
- package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
- package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
- package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
- package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
- package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
- package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
- package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
- package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
- package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
- package/dist/assets/OrbitControls-CM3bPray.js +1 -0
- package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
- package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
- package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
- package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
- package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
- package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
- package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
- package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
- package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
- package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
- package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
- package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
- package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
- package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
- package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
- package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
- package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
- package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
- package/dist/assets/Sky-CQKCgYDs.js +154 -0
- package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
- package/dist/assets/StageHost-BN-IoTef.js +2 -0
- package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
- package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
- package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
- package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
- package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
- package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
- package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
- package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
- package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
- package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
- package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
- package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
- package/dist/assets/after-paint-CB4bz1-e.js +1 -0
- package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
- package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
- package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
- package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
- package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
- package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
- package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
- package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
- package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
- package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
- package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
- package/dist/assets/assets-BuSoGjBX.js +1 -0
- package/dist/assets/audio-meter-CyiToeUW.js +1 -0
- package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
- package/dist/assets/audio.utility-C6K6jem8.js +1 -0
- package/dist/assets/authoring-CgcOFhGS.js +1 -0
- package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
- package/dist/assets/axe-LkjAB6Lv.js +30 -0
- package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
- package/dist/assets/binding-Bmxqznjk.js +1 -0
- package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
- package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
- package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
- package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
- package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
- package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
- package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
- package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
- package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
- package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
- package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
- package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
- package/dist/assets/blender.command-BtJeWk-A.js +1 -0
- package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
- package/dist/assets/blender.status-ujwGU6dU.js +1 -0
- package/dist/assets/blender.style-Dcem5f_T.js +1 -0
- package/dist/assets/board-guides-DziKSTss.js +1 -0
- package/dist/assets/body-marks-h_xDxiDE.js +1 -0
- package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
- package/dist/assets/browserAll-DeWblVez.js +1 -0
- package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
- package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
- package/dist/assets/build-session-C_sg3CEn.js +9 -0
- package/dist/assets/build.action-lYjTLb7K.js +1 -0
- package/dist/assets/build.command-DIGgUPU_.js +1 -0
- package/dist/assets/build.header-CKajx5U3.js +1 -0
- package/dist/assets/build.menu-BdU0QXny.js +1 -0
- package/dist/assets/build.service-CbBAyeu3.js +1 -0
- package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
- package/dist/assets/camera-KEsKvOL7.js +1 -0
- package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
- package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
- package/dist/assets/capability-coverage-Czas4C18.js +7 -0
- package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
- package/dist/assets/client-DNXj_opT.js +25 -0
- package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
- package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
- package/dist/assets/collider-Bw0mXlsW.js +1 -0
- package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
- package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
- package/dist/assets/command-results-CUQD49AB.js +1 -0
- package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
- package/dist/assets/component-board.service-DCwcUssB.js +2 -0
- package/dist/assets/component-board.service-DidCyM4O.js +2 -0
- package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
- package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
- package/dist/assets/config-CEZk921y.js +6 -0
- package/dist/assets/configurations-DTBMdaTL.js +1 -0
- package/dist/assets/connection.status-BifnQdOs.js +1 -0
- package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
- package/dist/assets/constraint-De8f1Uiq.js +1 -0
- package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
- package/dist/assets/countdown-timer-CUm74dom.js +1 -0
- package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
- package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
- package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
- package/dist/assets/curve-7Q79VgU4.js +1 -0
- package/dist/assets/data-asset-4hjS642k.js +5 -0
- package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
- package/dist/assets/data-ref-CQI28C0D.js +1 -0
- package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
- package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
- package/dist/assets/defaults-DKiBJCPN.js +1 -0
- package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
- package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
- package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
- package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
- package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
- package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
- package/dist/assets/dev-build-gDYrq68M.js +1 -0
- package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
- package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
- package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
- package/dist/assets/draco3d-BBUTcNkz.js +1 -0
- package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
- package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
- package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
- package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
- package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
- package/dist/assets/editor-api-BoJIcyZG.js +1 -0
- package/dist/assets/editor-port-C_FeBdeV.js +1 -0
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
- package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
- package/dist/assets/environment-capture-7himRh2L.js +1 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
- package/dist/assets/extend-B-eOccUm.js +36 -0
- package/dist/assets/extends-CF3RwP-h.js +1 -0
- package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
- package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
- package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
- package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
- package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
- package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
- package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
- package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
- package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
- package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
- package/dist/assets/game-DHOZVb-7.js +1 -0
- package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
- package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
- package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
- package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
- package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
- package/dist/assets/game-loop-CZvXlY00.js +1 -0
- package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
- package/dist/assets/game.layout-CBASrvQu.js +1 -0
- package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
- package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
- package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
- package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
- package/dist/assets/generation-DhwCUHPf.css +1 -0
- package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
- package/dist/assets/generation.service-CDIgObuw.js +1 -0
- package/dist/assets/generations-DzUogZsM.js +1 -0
- package/dist/assets/generations.status-CgOUBCum.js +1 -0
- package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
- package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
- package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
- package/dist/assets/index-96FBF1Oj.js +1 -0
- package/dist/assets/index-BAWkB0dv.js +1 -0
- package/dist/assets/index-BDnS2b6S.js +1 -0
- package/dist/assets/index-BHp07vN0.js +2 -0
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BcCBqgM_.js +952 -0
- package/dist/assets/index-Bge9JUr6.js +1 -0
- package/dist/assets/index-BjTCPEQ7.js +134 -0
- package/dist/assets/index-BncK9THk.js +1 -0
- package/dist/assets/index-CJbYy-CF.js +3 -0
- package/dist/assets/index-CVCb_ImQ.js +1 -0
- package/dist/assets/index-CZd9o7Lu.js +1 -0
- package/dist/assets/index-CanA16PU.js +2 -0
- package/dist/assets/index-CinJrH5C.js +9 -0
- package/dist/assets/index-CtzuWnCS.js +1 -0
- package/dist/assets/index-D2fNXpHa.css +1 -0
- package/dist/assets/index-DUpHH6JR.js +3120 -0
- package/dist/assets/index-DUqP1RMl.js +1 -0
- package/dist/assets/index-D_NuPfjr.js +9 -0
- package/dist/assets/index-Da9JhEvW.js +25 -0
- package/dist/assets/index-DgapqSPi.js +7 -0
- package/dist/assets/index-FUuS4qwW.js +562 -0
- package/dist/assets/index-GIL7oGEO.js +4894 -0
- package/dist/assets/index-IEjydI9d.js +1 -0
- package/dist/assets/index-OrYXPk3Z.js +487 -0
- package/dist/assets/index-V1R-e5Bd.js +1 -0
- package/dist/assets/index-bQE2NA0D.js +1 -0
- package/dist/assets/index-gHZae-lw.js +13 -0
- package/dist/assets/index-mjWQmGhM.js +1 -0
- package/dist/assets/index-nmcBqr7Y.js +1 -0
- package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
- package/dist/assets/ingest-BbYMC2vQ.js +1 -0
- package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
- package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
- package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
- package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
- package/dist/assets/input-manager-DH_hGW6d.js +1 -0
- package/dist/assets/input-router-BNQvtIqw.js +1 -0
- package/dist/assets/inspect-BZfi3mmo.js +1 -0
- package/dist/assets/inspection-CObLhnrs.js +1 -0
- package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
- package/dist/assets/instances.command-D6UkZNO8.js +1 -0
- package/dist/assets/instruments-CKR02Y8I.js +1 -0
- package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
- package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
- package/dist/assets/light-D-_wsKTq.js +1 -0
- package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
- package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
- package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
- package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
- package/dist/assets/loader-CaF_I7Yt.js +1 -0
- package/dist/assets/logger-Dqis-7W1.js +1 -0
- package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
- package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
- package/dist/assets/material-CpAdjDxn.js +1 -0
- package/dist/assets/material-factory-Bz6h__6g.js +1 -0
- package/dist/assets/mesh-B3WPtNKO.js +1 -0
- package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
- package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
- package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
- package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
- package/dist/assets/model.layout-BJUEQYUI.js +1 -0
- package/dist/assets/models.finder-G2jQgIRu.js +1 -0
- package/dist/assets/module-mode-DVBLT9d-.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
- package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
- package/dist/assets/mount-game-6t9cKNo4.js +1 -0
- package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
- package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
- package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
- package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
- package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
- package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
- package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
- package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
- package/dist/assets/navigation-CIiCx-SM.js +1 -0
- package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
- package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
- package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
- package/dist/assets/network.utility-CEu5nHf7.js +1 -0
- package/dist/assets/object-marks-DwvIEBOK.js +1 -0
- package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
- package/dist/assets/output-DK8waum9.js +195 -0
- package/dist/assets/particles-Y626p22p.js +1 -0
- package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
- package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
- package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
- package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
- package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
- package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
- package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
- package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
- package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
- package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
- package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
- package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
- package/dist/assets/play-mode-BFU2PCkG.js +22 -0
- package/dist/assets/play.command-BpqqLqkq.js +2 -0
- package/dist/assets/playtest-BXIL1JEF.js +1 -0
- package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
- package/dist/assets/presentation-BPP5pXeQ.js +1 -0
- package/dist/assets/product-DFhyARJj.js +1 -0
- package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
- package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
- package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
- package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
- package/dist/assets/project-provenance-BoP3nrle.js +1 -0
- package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
- package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
- package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
- package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
- package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
- package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
- package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
- package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
- package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
- package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
- package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
- package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
- package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
- package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
- package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
- package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
- package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
- package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
- package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
- package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
- package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
- package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
- package/dist/assets/react-18-By2b4xR9.js +1 -0
- package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
- package/dist/assets/react-root-CEz5NTck.js +1 -0
- package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
- package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
- package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
- package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
- package/dist/assets/realm-services-CobQsq_X.js +1 -0
- package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
- package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
- package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
- package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
- package/dist/assets/registry-02YZjMNp.js +1 -0
- package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
- package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
- package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
- package/dist/assets/render-census-BrQX_CXv.js +1 -0
- package/dist/assets/render-control-Df3yTiyr.js +1 -0
- package/dist/assets/render-env-D2IV2x5k.js +1 -0
- package/dist/assets/render-features-CPQ_e568.js +1 -0
- package/dist/assets/render-seed-DF4JHy7P.js +1 -0
- package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
- package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
- package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
- package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
- package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
- package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
- package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
- package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
- package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
- package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
- package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
- package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
- package/dist/assets/scene-index-B6BZOHMk.js +1 -0
- package/dist/assets/scene-query-C7_N-TpI.js +1 -0
- package/dist/assets/schema-kl9-2B_J.js +1 -0
- package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
- package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
- package/dist/assets/session-CZ5JPg-z.js +4877 -0
- package/dist/assets/setup-audio-S8GQF91f.js +1 -0
- package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
- package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
- package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
- package/dist/assets/shading.layout-DULYZV6M.js +1 -0
- package/dist/assets/sim-clock-CLflx7kg.js +1 -0
- package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
- package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
- package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
- package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
- package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
- package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
- package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
- package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
- package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
- package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
- package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
- package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
- package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
- package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
- package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
- package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
- package/dist/assets/stats.module-BL02l9NC.js +1 -0
- package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
- package/dist/assets/story-capture-_gC8dXV-.js +1 -0
- package/dist/assets/story-documents--TDLaPeL.js +3 -0
- package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
- package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
- package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
- package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
- package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
- package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
- package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
- package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
- package/dist/assets/structural-signature-0w-i_ats.js +1 -0
- package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
- package/dist/assets/surface-state-DaxyruCj.js +3 -0
- package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
- package/dist/assets/system-runner-DkOjxEBt.js +1 -0
- package/dist/assets/system-slot-E2mEdiih.js +1 -0
- package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-CDSueJyJ.js +1 -0
- package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
- package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
- package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
- package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
- package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
- package/dist/assets/three.module-D396a9Mn.js +3840 -0
- package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
- package/dist/assets/tools-B_NJsk05.js +1 -0
- package/dist/assets/transform-writer-BhBBTx33.js +1 -0
- package/dist/assets/transport.header-B-6HQlU2.js +1 -0
- package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
- package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
- package/dist/assets/tween.module-DciWpAG6.js +1 -0
- package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
- package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
- package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
- package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
- package/dist/assets/use-data-Dzq-MytE.js +1 -0
- package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
- package/dist/assets/use-selection-DbR73-xd.js +1 -0
- package/dist/assets/user-data-BB2Of6Ht.js +1 -0
- package/dist/assets/utility-view-state-BHypxA33.js +1 -0
- package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
- package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
- package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
- package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
- package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
- package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
- package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
- package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
- package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
- package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
- package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
- package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
- package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
- package/dist/assets/wav-encode-D31zWF6O.js +1 -0
- package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
- package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
- package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
- package/dist/assets/worker-UrMcrc5_.js +2 -0
- package/dist/assets/world-documents-147tiFZe.js +1 -0
- package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
- package/dist/assets/world-state-BWG-IcOd.js +1 -0
- package/dist/assets/writer-B-KovzkA.js +5 -0
- package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
- package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
- package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
- package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
- package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
- package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
- package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
- package/dist/vgai-shared-react.json +10 -0
- package/dist/vgai-shared-three.json +3 -0
- package/dist-node/cli.js +9320 -0
- package/dist-node/create.js +3239 -0
- package/package.json +91 -0
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +38 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +81 -0
- package/template/.agents/references/project-manual.md +341 -0
- package/template/.agents/skills/editor/SKILL.md +53 -0
- package/template/.agents/skills/editor/agents/openai.yaml +4 -0
- package/template/.agents/skills/editor/references/editor-control.md +363 -0
- package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.claude/skills/editor/SKILL.md +53 -0
- package/template/.claude/skills/editor/agents/openai.yaml +4 -0
- package/template/.claude/skills/editor/references/editor-control.md +363 -0
- package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.github/copilot-instructions.md +6 -0
- package/template/.github/skills/editor/SKILL.md +53 -0
- package/template/.github/skills/editor/agents/openai.yaml +4 -0
- package/template/.github/skills/editor/references/editor-control.md +363 -0
- package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.mcp.json +12 -0
- package/template/.vgai/assets.json +1 -0
- package/template/.vgai/provenance.json +4 -0
- package/template/.volter/tracker/validation/.preset.base.mts +178 -0
- package/template/.volter/tracker/validation/preset.mts +186 -0
- package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
- package/template/.volter/tracker/visualizer/extension.tsx +14 -0
- package/template/.volter/tracker-config.json +17 -0
- package/template/AGENTS.md +176 -0
- package/template/CLAUDE.md +1 -0
- package/template/DEVLOG.md +20 -0
- package/template/IDIOMS.md +118 -0
- package/template/LICENSE +30 -0
- package/template/README.md +83 -0
- package/template/ROADMAP.md +20 -0
- package/template/asset-manifest.json +3 -0
- package/template/check-idioms.ts +1533 -0
- package/template/index.html +18 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +62 -0
- package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
- package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/shaders/daylight-sky.frag.glsl +15 -0
- package/template/public/shaders/daylight-sky.vert.glsl +7 -0
- package/template/scripts/patch-drei-stats-gl.mjs +35 -0
- package/template/server/colyseus-setup.ts +111 -0
- package/template/server/loopback.ts +76 -0
- package/template/server/main.ts +78 -0
- package/template/server/rooms/arena-room.ts +488 -0
- package/template/server/rooms/game-room.ts +274 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/bot/QaTester.tsx +35 -0
- package/template/src/bot/behaviors.ts +203 -0
- package/template/src/bot/bot-station.ts +192 -0
- package/template/src/bot/tester-run.ts +238 -0
- package/template/src/bot/tester-station.ts +193 -0
- package/template/src/components/environment/DaylightSky.tsx +54 -0
- package/template/src/components/environment/Ground.tsx +129 -0
- package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
- package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
- package/template/src/components/environment/SunShadowFit.tsx +141 -0
- package/template/src/contributions/README.md +98 -0
- package/template/src/contributions/analytics.analytics.tsx +26 -0
- package/template/src/contributions/data.document.tsx +35 -0
- package/template/src/contributions/pages.finder.ts +61 -0
- package/template/src/contributions/tester.inspector.tsx +64 -0
- package/template/src/contributions/use-game-modules.ts +80 -0
- package/template/src/data/README.md +17 -0
- package/template/src/input.ts +97 -0
- package/template/src/lib/audio/capability.json +4 -0
- package/template/src/lib/audio/sfx.ts +255 -0
- package/template/src/lib/react-root/capability.json +4 -0
- package/template/src/lib/react-root/index.ts +20 -0
- package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/template/src/lib/reflections/capability.json +4 -0
- package/template/src/lib/reflections/index.ts +19 -0
- package/template/src/lib/reflections/probe-controller.ts +75 -0
- package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/template/src/lib/static-batch/Frozen.tsx +91 -0
- package/template/src/lib/static-batch/capability.json +4 -0
- package/template/src/lib/static-batch/freeze.ts +579 -0
- package/template/src/lib/static-batch/index.ts +44 -0
- package/template/src/lib/static-batch/mutation-watch.ts +149 -0
- package/template/src/lib/static-batch/shadow-cache.ts +171 -0
- package/template/src/main.ts +63 -0
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/prefabs/HeroBox.stories.tsx +23 -0
- package/template/src/prefabs/HeroBox.tsx +35 -0
- package/template/src/scenes/MainScene.tsx +77 -0
- package/template/src/world.tsx +87 -0
- package/template/tsconfig.json +35 -0
- package/template/tsconfig.node.json +32 -0
- package/template/tsconfig.tools.json +22 -0
- package/template/validate-asset-content.ts +27 -0
- package/template/validate-assets.ts +60 -0
- package/template/validate-manifest.ts +55 -0
- package/template/vgai.adapter.ts +76 -0
- package/template/vgai.project.json +24 -0
- package/template/vite.config.ts +247 -0
- package/template-dotfiles/gitignore +63 -0
- package/workbench/src/media/game-cover.css +83 -0
- package/workbench/src/product.contribution.ts +188 -0
- package/workbench/src/vgaiGameSkew.ts +276 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{L as s}from"./index-BncK9THk.js";import{h as n,t as r,L as o,j as P,k as Q,l as a,n as i,o as c}from"./index-CJbYy-CF.js";import"./index-BP6wv2A0.js";import"./index-DgapqSPi.js";const g=n({String:r.string,Number:r.number,"True False":r.bool,PropertyName:r.propertyName,Null:r.null,", :":r.separator,"[ ]":r.squareBracket,"{ }":r.brace}),p=s.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[g],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),h=()=>t=>{try{JSON.parse(t.state.doc.toString())}catch(O){if(!(O instanceof SyntaxError))throw O;const e=l(O,t.state.doc);return[{from:e,message:O.message,severity:"error",to:e}]}return[]};function l(t,O){let e;return(e=t.message.match(/at position (\d+)/))?Math.min(+e[1],O.length):(e=t.message.match(/at line (\d+) column (\d+)/))?Math.min(O.line(+e[1]).from+ +e[2]-1,O.length):0}const m=P.define({name:"json",parser:p.configure({props:[Q.add({Object:a({except:/^\s*\}/}),Array:a({except:/^\s*\]/})}),i.add({"Object Array":c})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function f(){return new o(m)}export{f as json,m as jsonLanguage,h as jsonParseLinter};
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import{G as Pt,P as ue,N as T,I as F,B as Be,S as Ht,E as Ae,M as ht,a as pt,i as _e,b as Me,T as Te,g as Se,c as De,d as Rt,e as Pe,C as Ee,O as Ne,f as Fe,h as Ve,L as He}from"./MeshBVH-BiDHDcu-.js";import{A as Xn,j as Yn,k as $n,l as jn,m as Zn,n as Kn,o as Jn}from"./MeshBVH-BiDHDcu-.js";import{a as D,p as yt,V as b,u as O,bi as Re,M as et,aB as k,s as de,aq as ze,ao as Ce,bj as X,g as tt,a9 as Et,aX as ke,aZ as Oe,z as We,O as Le,aC as G,b0 as fe,bP as he,bh as pe,b1 as me,bR as qe,Z as J,c8 as ft,ai as Q,i as Mt,a5 as U,a7 as zt,aS as Ue,ca as Ct,c9 as Ge,R as mt,aG as Tt,aO as ye,c6 as Xe,N as Ye,Y as $e,aF as je,a0 as Nt}from"./three.module-D396a9Mn.js";const kt=new D,W=new yt,Ot=new ue(()=>new Re),xt=new b,Wt=new b,it=new O,vt=new b,Lt=["getX","getY","getZ"];class Ze extends Pt{get primitiveStride(){return 2}writePrimitiveBounds(e,t,n){const i=this._indirectBuffer,{geometry:r,primitiveStride:c}=this,u=r.attributes.position,l=r.index,o=l?l.count:u.count;let s=(i?i[e]:e)*c,f=(s+1)%o;l&&(s=l.getX(s),f=l.getX(f));for(let h=0;h<3;h++){const p=u[Lt[h]](s),m=u[Lt[h]](f),y=p<m?p:m,x=p>m?p:m;t[n+h]=y,t[n+h+3]=x}return t}shapecast(e){const t=Ot.getPrimitive(),n=super.shapecast({...e,intersectsPrimitive:e.intersectsLine,scratchPrimitive:t,iterate:Je});return Ot.releasePrimitive(t),n}raycastObject3D(e,t,n=[]){const{matrixWorld:i}=e,{firstHitOnly:r}=t;kt.copy(i).invert(),W.copy(t.ray).applyMatrix4(kt);const u=t.params.Line.threshold/((e.scale.x+e.scale.y+e.scale.z)/3),l=u*u;let o=null,d=1/0;return this.shapecast({boundsTraverseOrder:s=>s.distanceToPoint(W.origin),intersectsBounds:s=>{if(it.copy(s).expandByScalar(u),r){if(!W.intersectBox(it,vt))return T;let f;return it.containsPoint(W.origin)?f=0:(vt.applyMatrix4(i),f=t.ray.origin.distanceTo(vt)),f<d?F:T}else return W.intersectsBox(it)?F:T},intersectsLine:(s,f)=>{if(W.distanceSqToSegment(s.start,s.end,xt,Wt)>l)return;xt.applyMatrix4(e.matrixWorld);const p=t.ray.origin.distanceTo(xt);p<t.near||p>t.far||r&&p>=d||(d=p,f=this.resolvePrimitiveIndex(f),o={distance:p,point:Wt.clone().applyMatrix4(i),index:f*this.primitiveStride,face:null,faceIndex:null,barycoord:null,object:e},r||n.push(o))}}),r&&o&&n.push(o),n}}class Ke extends Ze{get primitiveStride(){return 1}constructor(e,t={}){t={...t,indirect:!0},super(e,t)}}class Bn extends Ke{getRootRanges(...e){const t=super.getRootRanges(...e);return t.forEach(n=>n.count--),t}}function Je(a,e,t,n,i,r,c){const{geometry:u,primitiveStride:l}=t,{index:o}=u,d=u.attributes.position,s=o?o.count:d.count;for(let f=a,h=e+a;f<h;f++){let m=t.resolvePrimitiveIndex(f)*l,y=(m+1)%s;if(o&&(m=o.getX(m),y=o.getX(y)),c.start.fromBufferAttribute(d,m),c.end.fromBufferAttribute(d,y),n(c,f,i,r))return!0}return!1}const qt=new D,V=new yt,Ut=new ue(()=>new b),st=new O,gt=new b;class An extends Pt{get primitiveStride(){return 1}writePrimitiveBounds(e,t,n){const i=this._indirectBuffer,{geometry:r}=this,c=r.attributes.position,u=r.index;let l=i?i[e]:e;u&&(l=u.getX(l));const o=c.getX(l),d=c.getY(l),s=c.getZ(l);return t[n+0]=o,t[n+1]=d,t[n+2]=s,t[n+3]=o,t[n+4]=d,t[n+5]=s,t}shapecast(e){const t=Ut.getPrimitive(),n=super.shapecast({...e,intersectsPrimitive:e.intersectsPoint,scratchPrimitive:t,iterate:Qe});return Ut.releasePrimitive(t),n}raycastObject3D(e,t,n=[]){const{geometry:i}=this,{matrixWorld:r}=e,{firstHitOnly:c}=t;qt.copy(r).invert(),V.copy(t.ray).applyMatrix4(qt);const l=t.params.Points.threshold/((e.scale.x+e.scale.y+e.scale.z)/3),o=l*l;let d=null,s=1/0;return this.shapecast({boundsTraverseOrder:f=>f.distanceToPoint(V.origin),intersectsBounds:f=>{if(st.copy(f).expandByScalar(l),c){if(!V.intersectBox(st,gt))return T;let h;return st.containsPoint(V.origin)?h=0:(gt.applyMatrix4(r),h=t.ray.origin.distanceTo(gt)),h<s?F:T}else return V.intersectsBox(st)?F:T},intersectsPoint:(f,h)=>{const p=V.distanceSqToPoint(f);if(p<o){const m=new b;V.closestPointToPoint(f,m),m.applyMatrix4(r);const y=t.ray.origin.distanceTo(m);if(y<t.near||y>t.far||c&&y>=s)return;s=y,h=this.resolvePrimitiveIndex(h),d={distance:y,distanceToRay:Math.sqrt(p),point:m,index:i.index?i.index.getX(h):h,face:null,faceIndex:null,barycoord:null,object:e},c||n.push(d)}}}),c&&d&&n.push(d),n}}function Qe(a,e,t,n,i,r,c){const{geometry:u}=t,{index:l}=u,o=u.attributes.position;for(let d=a,s=e+a;d<s;d++){const f=t.resolvePrimitiveIndex(d),h=l?l.array[f]:f;if(c.fromBufferAttribute(o,h),n(c,d,i,r))return!0}return!1}const _=new k,w=new D,Y=new D,Gt=new O,L=new de,E=new b,$=new yt,M=new et,Xt={};class _n extends Be{constructor(e,t={}){t={precise:!1,includeInstances:!0,matrixWorld:Array.isArray(e)?new D:e.matrixWorld,targetLeafSize:1,...t},super();const n=new Set;xe(e,n);const i=Array.from(n),r=Math.ceil(Math.log2(i.length)),c=(1<<r)-1;this.objects=i,this.idBits=r,this.idMask=c,this.primitiveBuffer=null,this.primitiveBufferStride=1,this.precise=t.precise,this.includeInstances=t.includeInstances,this.matrixWorld=t.matrixWorld,this.init(t)}getObjectFromId(e){const{idMask:t,objects:n}=this,i=St(e,t);return n[i]}getInstanceFromId(e){const{idMask:t,idBits:n}=this;return Dt(e,n,t)}init(e){const{objects:t,idBits:n,matrixWorld:i}=this;Y.copy(i).invert(),this.primitiveBuffer=new Uint32Array(this._countPrimitives(t)),this._fillPrimitiveBuffer(t,n,this.primitiveBuffer),super.init(e)}refit(...e){Y.copy(this.matrixWorld).invert(),super.refit(...e)}writePrimitiveBounds(e,t,n){const{primitiveBuffer:i}=this;this._getPrimitiveBoundingBox(i[e],Y,Gt);const{min:r,max:c}=Gt;t[n+0]=r.x,t[n+1]=r.y,t[n+2]=r.z,t[n+3]=c.x,t[n+4]=c.y,t[n+5]=c.z}getRootRanges(){return[{offset:0,count:this.primitiveBuffer.length}]}shapecast(e){return super.shapecast({...e,intersectsPrimitive:e.intersectsObject,scratchPrimitive:null,iterate:tn})}raycast(e,t=[]){const{matrixWorld:n,includeInstances:i}=this,{firstHitOnly:r}=e,c=[];Y.copy(n).invert(),$.copy(e.ray).applyMatrix4(Y);let u=1/0,l=null;return this.shapecast({boundsTraverseOrder:o=>o.distanceToPoint($.origin),intersectsBounds:o=>{if(r){if(!$.intersectBox(o,E))return T;let d;return o.containsPoint($.origin)?d=0:(E.applyMatrix4(n),d=e.ray.origin.distanceTo(E)),d<u?F:T}else return $.intersectsBox(o)?F:T},intersectsObject(o,d){if(o.visible){if(c.length=0,o.isInstancedMesh&&i)M.geometry=o.geometry,M.material=o.material,o.getMatrixAt(d,M.matrixWorld),M.matrixWorld.premultiply(o.matrixWorld),M.raycast(e,c),c.forEach(s=>{s.object=o,s.instanceId=d}),M.material=null;else if(o.isBatchedMesh&&i){if(!o.getVisibleAt(d))return;const s=o.getGeometryIdAt(d),f=o.getGeometryRangeAt(s,Xt);_.index=o.geometry.index,_.attributes=o.geometry.attributes,_.setDrawRange(f.start,f.count),M.geometry=_,M.material=o.material,o.getMatrixAt(d,M.matrixWorld),M.matrixWorld.premultiply(o.matrixWorld),M.raycast(e,c),c.forEach(h=>{h.object=o,h.batchId=d}),M.material=null,_.index=null,_.attributes=null,_.setDrawRange(0,1/0)}else o.raycast(e,c);r?c.forEach(s=>{s.distance<u&&(u=s.distance,l=s)}):t.push(...c)}}}),r&&l&&t.push(l),t}_getPrimitiveBoundingBox(e,t,n){const{objects:i,idMask:r,idBits:c,precise:u,includeInstances:l}=this,o=St(e,r),d=Dt(e,c,r),s=i[o];if(!l&&(s.isInstancedMesh||s.isBatchedMesh))s.boundingBox||s.computeBoundingBox(),s.boundingSphere||s.computeBoundingSphere(),w.copy(s.matrixWorld).premultiply(t),L.copy(s.boundingSphere).applyMatrix4(w),n.copy(s.boundingBox).applyMatrix4(w),bt(n,L);else if(u)if(s.isInstancedMesh)s.getMatrixAt(d,w),w.premultiply(s.matrixWorld).premultiply(t),Yt(s.geometry,w,n);else if(s.isBatchedMesh){const f=s.getGeometryIdAt(d),h=s.getGeometryRangeAt(f,Xt);_.index=s.geometry.index,_.attributes=s.geometry.attributes,_.setDrawRange(h.start,h.count),s.getMatrixAt(d,w),w.premultiply(s.matrixWorld).premultiply(t),Yt(_,w,n),_.attributes=null}else w.copy(s.matrixWorld).premultiply(t),n.setFromObject(s,!0).applyMatrix4(t);else if(s.isInstancedMesh)s.geometry.boundingBox||s.geometry.computeBoundingBox(),s.geometry.boundingSphere||s.geometry.computeBoundingSphere(),s.getMatrixAt(d,w),w.premultiply(s.matrixWorld).premultiply(t),L.copy(s.geometry.boundingSphere).applyMatrix4(w),n.copy(s.geometry.boundingBox).applyMatrix4(w),bt(n,L);else if(s.isBatchedMesh){const f=s.getGeometryIdAt(d);s.getMatrixAt(d,w),w.premultiply(s.matrixWorld).premultiply(t),s.getBoundingSphereAt(f,L).applyMatrix4(w),s.getBoundingBoxAt(f,n).applyMatrix4(w),bt(n,L)}else n.setFromObject(s,!1).applyMatrix4(t)}_countPrimitives(e){const{includeInstances:t}=this;let n=0;return e.forEach(i=>{if(i.isInstancedMesh&&t)n+=i.count;else if(i.isBatchedMesh&&t){if(!("instanceCount"in i))throw new Error("ObjectBVH: Three.js revision >= r169 is required to use BatchedMesh.");n+=i.instanceCount}else n++}),n}_fillPrimitiveBuffer(e,t,n){const{includeInstances:i}=this;let r=0;e.forEach((c,u)=>{if(c.isInstancedMesh&&i){const l=c.count;for(let o=0;o<l;o++)n[r]=o<<t|u,r++}else if(c.isBatchedMesh&&i){const{instanceCount:l,maxInstanceCount:o}=c;let d=0,s=0;for(;d<l&&s<o;){try{c.getVisibleAt(s),n[r]=s<<t|u,d++,r++}catch{}s++}}else n[r]=u,r++})}}function St(a,e){return a&e}function Dt(a,e,t){return(a&~t)>>>e}function xe(a,e=new Set){Array.isArray(a)?a.forEach(t=>xe(t,e)):a.traverse(t=>{(t.isMesh||t.isLine||t.isPoints)&&e.add(t)})}function Yt(a,e,t){t.makeEmpty();const n=a.drawRange,i=a.index,r=a.attributes.position,c=n.start,u=i?i.count:r.count,l=Math.min(u-c,n.count);for(let o=c,d=c+l;o<d;o++){let s=o;i&&(s=i.getX(s)),E.fromBufferAttribute(r,s).applyMatrix4(e),t.expandByPoint(E)}return t}function tn(a,e,t,n,i,r){const{primitiveBuffer:c,objects:u,idMask:l,idBits:o}=t;for(let d=a,s=e+a;d<s;d++){const f=c[d],h=St(f,l),p=Dt(f,o,l),m=u[h];if(n(m,p,i,r))return!0}return!1}function bt(a,e){E.copy(e.center).addScalar(-e.radius),a.min.max(E),E.copy(e.center).addScalar(e.radius),a.max.min(E)}const $t=new b,jt=new b,Zt=new b,P=new yt,Kt=new D,H=new b,It=new b,en=["x","y","z"],ot=parseInt(Et)>=169,nn=parseInt(Et)<=161,rt=new tt,at=new tt,ct=new tt,Jt=new b,Qt=new b,te=new b;class Mn extends Pt{get primitiveStride(){return 3}constructor(e,t={}){if(!e.isMesh)throw new Error("SkinnedMeshBVH: First argument must be a Mesh.");super(e.geometry,{...t,[Ht]:!0}),this.mesh=e,t[Ht]||this.init(t)}writePrimitiveBounds(e,t,n){const{mesh:i,geometry:r}=this,c=this._indirectBuffer,u=r.index?r.index.array:null,o=(c?c[e]:e)*3;let d=o+0,s=o+1,f=o+2;u&&(d=u[d],s=u[s],f=u[f]),i.getVertexPosition(d,$t),i.getVertexPosition(s,jt),i.getVertexPosition(f,Zt);for(let h=0;h<3;h++){const p=en[h],m=$t[p],y=jt[p],x=Zt[p];let g=m;y<g&&(g=y),x<g&&(g=x);let v=m;y>v&&(v=y),x>v&&(v=x),t[n+h]=g,t[n+h+3]=v}return t}shapecast(e){const t=new Ae;return super.shapecast({...e,intersectsPrimitive:e.intersectsTriangle,scratchPrimitive:t,iterate:sn})}raycastObject3D(e,t,n=[]){const{material:i}=e;if(i===void 0)return;const{matrixWorld:r}=e,{firstHitOnly:c}=t;Kt.copy(r).invert(),P.copy(t.ray).applyMatrix4(Kt);let u=null,l=1/0;return this.shapecast({boundsTraverseOrder:o=>o.distanceToPoint(P.origin),intersectsBounds:o=>{if(c){if(!P.intersectBox(o,It))return T;let d;return o.containsPoint(P.origin)?d=0:(It.applyMatrix4(r),d=t.ray.origin.distanceTo(It)),d<l?F:T}else return P.intersectsBox(o)?F:T},intersectsTriangle:(o,d)=>{let s=null;if(i.side===ze?s=P.intersectTriangle(o.a,o.b,o.c,!0,H):i.side===Ce?s=P.intersectTriangle(o.c,o.b,o.a,!0,H):s=P.intersectTriangle(o.a,o.b,o.c,!1,H),!s)return;s=s.clone().applyMatrix4(r);const f=t.ray.origin.distanceTo(s);if(f>=t.near&&f<=t.far){if(c&&f>=l)return;const{geometry:h}=this,{index:p}=h,m=this.resolvePrimitiveIndex(d),y=m*3;let x=y+0,g=y+1,v=y+2;p&&(x=p.array[x],g=p.array[g],v=p.array[v]);const I={distance:f,point:s.clone(),object:e,uv:null,uv1:null,normal:null,face:{a:x,b:g,c:v,normal:X.getNormal(o.a,o.b,o.c,new b),materialIndex:0},faceIndex:m};if(ot){const N=new b;X.getBarycoord(H,o.a,o.b,o.c,N),I.barycoord=N}const A=h.attributes.uv,S=h.attributes.uv1,nt=h.attributes.normal;if(A){rt.fromBufferAttribute(A,x),at.fromBufferAttribute(A,g),ct.fromBufferAttribute(A,v),I.uv=new tt;const N=X.getInterpolation(H,o.a,o.b,o.c,rt,at,ct,I.uv);ot||(I.uv=N)}if(S){rt.fromBufferAttribute(S,x),at.fromBufferAttribute(S,g),ct.fromBufferAttribute(S,v),I.uv1=new tt;const N=X.getInterpolation(H,o.a,o.b,o.c,rt,at,ct,I.uv1);ot||(I.uv1=N),nn&&(I.uv2=I.uv1)}if(nt){Jt.fromBufferAttribute(nt,x),Qt.fromBufferAttribute(nt,g),te.fromBufferAttribute(nt,v),I.normal=new b;const N=X.getInterpolation(H,o.a,o.b,o.c,Jt,Qt,te,I.normal);I.normal.dot(P.direction)>0&&I.normal.multiplyScalar(-1),ot||(I.normal=N)}l=I.distance,u=I,c||n.push(I)}}}),c&&u&&n.push(u),n}}function sn(a,e,t,n,i,r,c){const{mesh:u,geometry:l}=t,o=l.index?l.index.array:null;for(let d=a,s=e+a;d<s;d++){const f=t.resolvePrimitiveIndex(d);let h=3*f+0,p=3*f+1,m=3*f+2;if(o&&(h=o[h],p=o[p],m=o[m]),u.getVertexPosition(h,c.a),u.getVertexPosition(p,c.b),u.getVertexPosition(m,c.c),c.needsUpdate=!0,n(c,d,i,r))return!0}return!1}const ee=new O,ne=new D,wt=new b;class on extends Le{get isMesh(){return!this.displayEdges}get isLineSegments(){return this.displayEdges}get isLine(){return this.displayEdges}getVertexPosition(...e){return et.prototype.getVertexPosition.call(this,...e)}constructor(e,t,n=10,i=0){super(),this.material=t,this.geometry=new k,this.name="BVHRootHelper",this.depth=n,this.displayParents=!1,this.bvh=e,this.displayEdges=!0,this._group=i}raycast(){}update(){const e=this.bvh;this.geometry.dispose(),this.visible=!1,e&&(this.geometry=this.getGeometry(e),this.visible=!0)}getGeometry(e){const t=this._group;let n=null;if(t!==-1)n=this.getBVHBoundPositions(e,t);else{const c=e._roots.map((o,d)=>this.getBVHBoundPositions(e,d)),u=c.reduce((o,d)=>o+d.length,0);n=new Float32Array(u);let l=0;c.forEach(o=>{n.set(o,l),l+=o.length})}const i=this.getBVHBoundIndices(n),r=new k;return r.setIndex(new G(i,1,!1)),r.setAttribute("position",new G(n,3,!1)),r}getBVHBoundIndices(e){const t=e.length/24;let n,i;this.displayEdges?i=new Uint8Array([0,4,1,5,2,6,3,7,0,2,1,3,4,6,5,7,0,1,2,3,4,5,6,7]):i=new Uint8Array([0,1,2,2,1,3,4,6,5,6,7,5,1,4,5,0,4,1,2,3,6,3,7,6,0,2,4,2,6,4,1,5,3,3,5,7]),e.length>65535?n=new Uint32Array(i.length*t):n=new Uint16Array(i.length*t);const r=i.length;for(let c=0;c<t;c++){const u=c*8,l=c*r;for(let o=0;o<r;o++)n[l+o]=u+i[o]}return n}getBVHBoundPositions(e,t=0,n=null){const i=this.depth-1,r=this.displayParents;let c=0;e.traverse((o,d)=>{if(o>=i||d)return c++,!0;r&&c++},t);let u=0;const l=new Float32Array(24*c);return e.traverse((o,d,s)=>{const f=o>=i||d;if(f||r){pt(0,s,ee);const{min:h,max:p}=ee;for(let m=-1;m<=1;m+=2){const y=m<0?h.x:p.x;for(let x=-1;x<=1;x+=2){const g=x<0?h.y:p.y;for(let v=-1;v<=1;v+=2){const I=v<0?h.z:p.z;wt.set(y,g,I),n&&wt.applyMatrix4(n),wt.toArray(l,u),u+=3}}}return f}},t),l}}class Ft extends ke{get color(){return this.edgeMaterial.color}get opacity(){return this.edgeMaterial.opacity}set opacity(e){this.edgeMaterial.opacity=e,this.meshMaterial.opacity=e}get objectIndex(){return console.warn('BVHHelper: "objectIndex" has been renamed "instanceId".'),this.instanceId}set objectIndex(e){console.warn('BVHHelper: "objectIndex" has been renamed "instanceId".'),this.instanceId=e}constructor(e=null,t=null,n=10){e instanceof ht&&(n=t||10,t=e,e=null),typeof t=="number"&&(n=t,t=null),super(),this.name="BVHHelper",this.depth=n,this.mesh=e,this.bvh=t,this.displayParents=!1,this.displayEdges=!0,this.instanceId=0,this._roots=[];const i=new Oe({color:65416,transparent:!0,opacity:.3,depthWrite:!1}),r=new We({color:65416,transparent:!0,opacity:.3,depthWrite:!1});r.color=i.color,this.edgeMaterial=i,this.meshMaterial=r,this.update()}update(){const e=this.mesh,t=this.instanceId;let n=this.bvh||e.boundsTree||e.geometry&&e.geometry.boundsTree||null;if(e&&e.isBatchedMesh&&e.boundsTrees&&!n&&t>=0){const r=e._drawInfo[t];r&&(n=e.boundsTrees[r.geometryIndex]||n)}const i=n?n._roots.length:0;for(;this._roots.length>i;){const r=this._roots.pop();r.geometry.dispose(),this.remove(r)}for(let r=0;r<i;r++){const{depth:c,edgeMaterial:u,meshMaterial:l,displayParents:o,displayEdges:d}=this;if(r>=this._roots.length){const f=new on(n,u,c,r);this.add(f),this._roots.push(f)}const s=this._roots[r];s.bvh=n,s.depth=c,s.displayParents=o,s.displayEdges=d,s.material=d?u:l,s.update()}}updateMatrixWorld(...e){const t=this.mesh,n=this.parent,i=this.instanceId;t!==null&&(t.updateWorldMatrix(!0,!1),n?this.matrix.copy(n.matrixWorld).invert().multiply(t.matrixWorld):this.matrix.copy(t.matrixWorld),(t.isInstancedMesh||t.isBatchedMesh)&&i>=0&&(t.getMatrixAt(i,ne),this.matrix.multiply(ne)),this.matrix.decompose(this.position,this.quaternion,this.scale)),super.updateMatrixWorld(...e)}copy(e){this.depth=e.depth,this.mesh=e.mesh,this.bvh=e.bvh,this.opacity=e.opacity,this.color.copy(e.color)}clone(){return new Ft().copy(this)}dispose(){this.edgeMaterial.dispose(),this.meshMaterial.dispose();const e=this.children;for(let t=0,n=e.length;t<n;t++)e[t].geometry.dispose()}}class Tn extends Ft{constructor(...e){console.warn("MeshBVHHelper: Class has been deprecated. Use BVHHelper instead."),super(...e)}}const Bt=new O,j=new O;function ie(a){switch(typeof a){case"number":return 8;case"string":return a.length*2;case"boolean":return 4;default:return 0}}function rn(a){return/(Uint|Int|Float)(8|16|32)Array/.test(a.constructor.name)}function an(a,e){const t={nodeCount:0,leafNodeCount:0,depth:{min:1/0,max:-1/0},primitives:{min:1/0,max:-1/0},splits:[0,0,0],surfaceAreaScore:0};return a.traverse((n,i,r,c,u)=>{const l=r[3]-r[0],o=r[4]-r[1],d=r[5]-r[2],s=2*(l*o+o*d+d*l);t.nodeCount++,i?(t.leafNodeCount++,t.depth.min=Math.min(n,t.depth.min),t.depth.max=Math.max(n,t.depth.max),t.primitives.min=Math.min(u,t.primitives.min),t.primitives.max=Math.max(u,t.primitives.max),t.surfaceAreaScore+=s*Me*u):(t.splits[c]++,t.surfaceAreaScore+=s*Te)},e),t.primitives.min===1/0&&(t.primitives.min=0,t.primitives.max=0),t.depth.min===1/0&&(t.depth.min=0,t.depth.max=0),t}function Sn(a){return a._roots.map((e,t)=>an(a,t))}function Dn(a){const e=new Set,t=[a];let n=0;for(;t.length;){const i=t.pop();if(!e.has(i)){e.add(i);for(let r in i){if(!Object.hasOwn(i,r))continue;n+=ie(r);const c=i[r];c&&(typeof c=="object"||typeof c=="function")?rn(c)||_e()&&c instanceof SharedArrayBuffer||c instanceof ArrayBuffer?n+=c.byteLength:t.push(c):n+=ie(c)}}}return n}function Pn(a){const e=[],t=new Float32Array(6);let n=!0;return a.traverse((i,r,c,u,l)=>{const o={depth:i,isLeaf:r,boundingData:c,offset:u,count:l};e[i]=o,pt(0,c,Bt);const d=e[i-1];if(r){a.writePrimitiveRangeBounds(u,l,t,0),j.min.set(t[0],t[1],t[2]),j.max.set(t[3],t[4],t[5]);const s=Bt.containsBox(j);console.assert(s,"Leaf bounds does not fully contain primitives."),n=n&&s}if(d){pt(0,d.boundingData,j);const s=j.containsBox(Bt);console.assert(s,"Parent bounds does not fully contain child."),n=n&&s}}),n}function En(a){const e=[];return a.traverse((t,n,i,r,c)=>{const u={bounds:pt(0,i,new O)};n?(u.count=c,u.offset=r):(u.left=null,u.right=null),e[t]=u;const l=e[t-1];l&&(l.left===null?l.left=u:l.right=u)}),e[0]}const cn=parseInt(Et)>=166,q={Mesh:et.prototype.raycast,Line:pe.prototype.raycast,LineSegments:fe.prototype.raycast,LineLoop:he.prototype.raycast,Points:me.prototype.raycast,BatchedMesh:qe.prototype.raycast},B=new et,lt=[];function Nn(a,e){if(this.isBatchedMesh)ln.call(this,a,e);else{const{geometry:t}=this;if(t.boundsTree)t.boundsTree.raycastObject3D(this,a,e);else{let n;if(this instanceof et)n=q.Mesh;else if(this instanceof fe)n=q.LineSegments;else if(this instanceof he)n=q.LineLoop;else if(this instanceof pe)n=q.Line;else if(this instanceof me)n=q.Points;else throw new Error("BVH: Fallback raycast function not found.");n.call(this,a,e)}}}function ln(a,e){if(this.boundsTrees){const t=this.boundsTrees,n=this._drawInfo||this._instanceInfo,i=this._drawRanges||this._geometryInfo,r=this.matrixWorld;B.material=this.material,B.geometry=this.geometry;const c=B.geometry.boundsTree,u=B.geometry.drawRange;B.geometry.boundingSphere===null&&(B.geometry.boundingSphere=new de);for(let l=0,o=n.length;l<o;l++){if(!this.getVisibleAt(l))continue;const d=n[l].geometryIndex;if(B.geometry.boundsTree=t[d],this.getMatrixAt(l,B.matrixWorld).premultiply(r),!B.geometry.boundsTree){this.getBoundingBoxAt(d,B.geometry.boundingBox),this.getBoundingSphereAt(d,B.geometry.boundingSphere);const s=i[d];B.geometry.setDrawRange(s.start,s.count)}B.raycast(a,lt);for(let s=0,f=lt.length;s<f;s++){const h=lt[s];h.object=this,h.batchId=l,e.push(h)}lt.length=0}B.geometry.boundsTree=c,B.geometry.drawRange=u,B.material=null,B.geometry=null}else q.BatchedMesh.call(this,a,e)}function Fn(a={}){const{type:e=ht}=a;return this.boundsTree=new e(this,a),this.boundsTree}function Vn(){this.boundsTree=null}function Hn(a=-1,e={}){if(!cn)throw new Error("BatchedMesh: Three r166+ is required to compute bounds trees.");e={...e,range:null};const t=this._drawRanges||this._geometryInfo,n=this._geometryCount;this.boundsTrees||(this.boundsTrees=new Array(n).fill(null));const i=this.boundsTrees;for(;i.length<n;)i.push(null);if(a<0){for(let r=0;r<n;r++)e.range=t[r],i[r]=new ht(this.geometry,e);return i}else return a<t.length&&(e.range=t[a],i[a]=new ht(this.geometry,e)),i[a]||null}function Rn(a=-1){a<0?this.boundsTrees.fill(null):a<this.boundsTrees.length&&(this.boundsTrees[a]=null)}function un(a){switch(a){case 1:return"R";case 2:return"RG";case 3:return"RGBA";case 4:return"RGBA"}throw new Error}function dn(a){switch(a){case 1:return $e;case 2:return Ye;case 3:return mt;case 4:return mt}}function se(a){switch(a){case 1:return Xe;case 2:return ye;case 3:return Tt;case 4:return Tt}}class Vt extends Mt{constructor(){super(),this.minFilter=U,this.magFilter=U,this.generateMipmaps=!1,this.overrideItemSize=null,this._forcedType=null}updateFrom(e){const t=this.overrideItemSize,n=e.itemSize,i=e.count;if(t!==null){if(n*i%t!==0)throw new Error("VertexAttributeTexture: overrideItemSize must divide evenly into buffer length.");e.itemSize=t,e.count=i*n/t}const r=e.itemSize,c=e.count,u=e.normalized,l=e.array.constructor,o=l.BYTES_PER_ELEMENT;let d=this._forcedType,s=r;if(d===null)switch(l){case Float32Array:d=J;break;case Uint8Array:case Uint16Array:case Uint32Array:d=Q;break;case Int8Array:case Int16Array:case Int32Array:d=ft;break}let f,h,p,m,y=un(r);switch(d){case J:p=1,h=dn(r),u&&o===1?(m=l,y+="8",l===Uint8Array?f=zt:(f=Ct,y+="_SNORM")):(m=Float32Array,y+="32F",f=J);break;case ft:y+=o*8+"I",p=u?Math.pow(2,l.BYTES_PER_ELEMENT*8-1):1,h=se(r),o===1?(m=Int8Array,f=Ct):o===2?(m=Int16Array,f=Ge):(m=Int32Array,f=ft);break;case Q:y+=o*8+"UI",p=u?Math.pow(2,l.BYTES_PER_ELEMENT*8-1):1,h=se(r),o===1?(m=Uint8Array,f=zt):o===2?(m=Uint16Array,f=Ue):(m=Uint32Array,f=Q);break}s===3&&(h===mt||h===Tt)&&(s=4);const x=Math.ceil(Math.sqrt(c))||1,g=s*x*x,v=new m(g),I=e.normalized;e.normalized=!1;for(let A=0;A<c;A++){const S=s*A;v[S]=e.getX(A)/p,r>=2&&(v[S+1]=e.getY(A)/p),r>=3&&(v[S+2]=e.getZ(A)/p,s===4&&(v[S+3]=1)),r>=4&&(v[S+3]=e.getW(A)/p)}e.normalized=I,this.internalFormat=y,this.format=h,this.type=f,this.image.width=x,this.image.height=x,this.image.data=v,this.needsUpdate=!0,this.dispose(),e.itemSize=n,e.count=i}}class fn extends Vt{constructor(){super(),this._forcedType=Q}}class zn extends Vt{constructor(){super(),this._forcedType=ft}}class hn extends Vt{constructor(){super(),this._forcedType=J}}class Cn{constructor(){this.index=new fn,this.position=new hn,this.bvhBounds=new Mt,this.bvhContents=new Mt,this._cachedIndexAttr=null,this.index.overrideItemSize=3}updateFrom(e){const{geometry:t}=e;if(mn(e,this.bvhBounds,this.bvhContents),this.position.updateFrom(t.attributes.position),e.indirect){const n=e._indirectBuffer;if(this._cachedIndexAttr===null||this._cachedIndexAttr.count!==n.length)if(t.index)this._cachedIndexAttr=t.index.clone();else{const i=Se(De(t));this._cachedIndexAttr=new G(i,1,!1)}pn(t,n,this._cachedIndexAttr),this.index.updateFrom(this._cachedIndexAttr)}else this.index.updateFrom(t.index)}dispose(){const{index:e,position:t,bvhBounds:n,bvhContents:i}=this;e&&e.dispose(),t&&t.dispose(),n&&n.dispose(),i&&i.dispose()}}function pn(a,e,t){const n=t.array,i=a.index?a.index.array:null;for(let r=0,c=e.length;r<c;r++){const u=3*r,l=3*e[r];for(let o=0;o<3;o++)n[u+o]=i?i[l+o]:l+o}}function mn(a,e,t){const n=a._roots;if(n.length!==1)throw new Error("MeshBVHUniformStruct: Multi-root BVHs not supported.");const i=n[0],r=new Uint16Array(i),c=new Uint32Array(i),u=new Float32Array(i),l=i.byteLength/Rt,o=2*Math.ceil(Math.sqrt(l/2)),d=new Float32Array(4*o*o),s=Math.ceil(Math.sqrt(l)),f=new Uint32Array(2*s*s);for(let h=0;h<l;h++){const p=h*Rt/4,m=p*2,y=Ve(p);for(let x=0;x<3;x++)d[8*h+0+x]=u[y+0+x],d[8*h+4+x]=u[y+3+x];if(Pe(m,r)){const x=Ee(m,r),g=Ne(p,c),v=He|x;f[h*2+0]=v,f[h*2+1]=g}else{const x=c[p+6],g=Fe(p,c);f[h*2+0]=g,f[h*2+1]=x}}e.image.data=d,e.image.width=o,e.image.height=o,e.format=mt,e.type=J,e.internalFormat="RGBA32F",e.minFilter=U,e.magFilter=U,e.generateMipmaps=!1,e.needsUpdate=!0,e.dispose(),t.image.data=f,t.image.width=s,t.image.height=s,t.format=ye,t.type=Q,t.internalFormat="RG32UI",t.minFilter=U,t.magFilter=U,t.generateMipmaps=!1,t.needsUpdate=!0,t.dispose()}const R=new b,z=new b,C=new b,oe=new Nt,ut=new b,At=new b,re=new Nt,ae=new Nt,dt=new D,ce=new D;function Z(a,e){if(!a&&!e)return;const t=a.count===e.count,n=a.normalized===e.normalized,i=a.array.constructor===e.array.constructor,r=a.itemSize===e.itemSize;if(!t||!n||!i||!r)throw new Error}function K(a,e=null){const t=a.array.constructor,n=a.normalized,i=a.itemSize,r=e===null?a.count:e;return new G(new t(i*r),i,n)}function ve(a,e,t=0){if(a.isInterleavedBufferAttribute){const n=a.itemSize;for(let i=0,r=a.count;i<r;i++){const c=i+t;e.setX(c,a.getX(i)),n>=2&&e.setY(c,a.getY(i)),n>=3&&e.setZ(c,a.getZ(i)),n>=4&&e.setW(c,a.getW(i))}}else{const n=e.array,i=n.constructor,r=n.BYTES_PER_ELEMENT*a.itemSize*t;new i(n.buffer,r,a.array.length).set(a.array)}}function yn(a,e,t){const n=a.elements,i=e.elements;for(let r=0,c=i.length;r<c;r++)n[r]+=i[r]*t}function le(a,e,t){const n=a.skeleton,i=a.geometry,r=n.bones,c=n.boneInverses;re.fromBufferAttribute(i.attributes.skinIndex,e),ae.fromBufferAttribute(i.attributes.skinWeight,e),dt.elements.fill(0);for(let u=0;u<4;u++){const l=ae.getComponent(u);if(l!==0){const o=re.getComponent(u);ce.multiplyMatrices(r[o].matrixWorld,c[o]),yn(dt,ce,l)}}return dt.multiply(a.bindMatrix).premultiply(a.bindMatrixInverse),t.transformDirection(dt),t}function _t(a,e,t,n,i){ut.set(0,0,0);for(let r=0,c=a.length;r<c;r++){const u=e[r],l=a[r];u!==0&&(At.fromBufferAttribute(l,n),t?ut.addScaledVector(At,u):ut.addScaledVector(At.sub(i),u))}i.add(ut)}function xn(a,e={useGroups:!1,updateIndex:!1,skipAttributes:[]},t=new k){const n=a[0].index!==null,{useGroups:i=!1,updateIndex:r=!1,skipAttributes:c=[]}=e,u=new Set(Object.keys(a[0].attributes)),l={};let o=0;t.clearGroups();for(let d=0;d<a.length;++d){const s=a[d];let f=0;if(n!==(s.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const h in s.attributes){if(!u.has(h))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+h+'" attribute exists among all geometries, or in none of them.');l[h]===void 0&&(l[h]=[]),l[h].push(s.attributes[h]),f++}if(f!==u.size)throw new Error("StaticGeometryGenerator: Make sure all geometries have the same number of attributes.");if(i){let h;if(n)h=s.index.count;else if(s.attributes.position!==void 0)h=s.attributes.position.count;else throw new Error("StaticGeometryGenerator: The geometry must have either an index or a position attribute");t.addGroup(o,h,d),o+=h}}if(n){let d=!1;if(!t.index){let s=0;for(let f=0;f<a.length;++f)s+=a[f].index.count;t.setIndex(new G(new Uint32Array(s),1,!1)),d=!0}if(r||d){const s=t.index;let f=0,h=0;for(let p=0;p<a.length;++p){const m=a[p],y=m.index;if(c[p]!==!0)for(let x=0;x<y.count;++x)s.setX(f,y.getX(x)+h),f++;h+=m.attributes.position.count}}}for(const d in l){const s=l[d];if(!(d in t.attributes)){let p=0;for(const m in s)p+=s[m].count;t.setAttribute(d,K(l[d][0],p))}const f=t.attributes[d];let h=0;for(let p=0,m=s.length;p<m;p++){const y=s[p];c[p]!==!0&&ve(y,f,h),h+=y.count}}return t}function vn(a,e){if(a===null||e===null)return a===e;if(a.length!==e.length)return!1;for(let t=0,n=a.length;t<n;t++)if(a[t]!==e[t])return!1;return!0}function gn(a){const{index:e,attributes:t}=a;if(e)for(let n=0,i=e.count;n<i;n+=3){const r=e.getX(n),c=e.getX(n+2);e.setX(n,c),e.setX(n+2,r)}else for(const n in t){const i=t[n],r=i.itemSize;for(let c=0,u=i.count;c<u;c+=3)for(let l=0;l<r;l++){const o=i.getComponent(c,l),d=i.getComponent(c+2,l);i.setComponent(c,l,d),i.setComponent(c+2,l,o)}}return a}class bn{constructor(e){this.matrixWorld=new D,this.geometryHash=null,this.boneMatrices=null,this.primitiveCount=-1,this.mesh=e,this.update()}update(){const e=this.mesh,t=e.geometry,n=e.skeleton,i=(t.index?t.index.count:t.attributes.position.count)/3;if(this.matrixWorld.copy(e.matrixWorld),this.geometryHash=t.attributes.position.version,this.primitiveCount=i,n){n.boneTexture||n.computeBoneTexture(),n.update();const r=n.boneMatrices;!this.boneMatrices||this.boneMatrices.length!==r.length?this.boneMatrices=r.slice():this.boneMatrices.set(r)}else this.boneMatrices=null}didChange(){const e=this.mesh,t=e.geometry,n=(t.index?t.index.count:t.attributes.position.count)/3;return!(this.matrixWorld.equals(e.matrixWorld)&&this.geometryHash===t.attributes.position.version&&vn(e.skeleton&&e.skeleton.boneMatrices||null,this.boneMatrices)&&this.primitiveCount===n)}}class kn{constructor(e){Array.isArray(e)||(e=[e]);const t=[];e.forEach(n=>{n.traverseVisible(i=>{i.isMesh&&t.push(i)})}),this.meshes=t,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Array(t.length).fill().map(()=>new k),this._diffMap=new WeakMap}getMaterials(){const e=[];return this.meshes.forEach(t=>{Array.isArray(t.material)?e.push(...t.material):e.push(t.material)}),e}generate(e=new k){let t=[];const{meshes:n,useGroups:i,_intermediateGeometry:r,_diffMap:c}=this;for(let u=0,l=n.length;u<l;u++){const o=n[u],d=r[u],s=c.get(o);!s||s.didChange(o)?(this._convertToStaticGeometry(o,d),t.push(!1),s?s.update():c.set(o,new bn(o))):t.push(!0)}if(r.length===0){e.setIndex(null);const u=e.attributes;for(const l in u)e.deleteAttribute(l);for(const l in this.attributes)e.setAttribute(this.attributes[l],new G(new Float32Array(0),4,!1))}else xn(r,{useGroups:i,skipAttributes:t},e);for(const u in e.attributes)e.attributes[u].needsUpdate=!0;return e}_convertToStaticGeometry(e,t=new k){const n=e.geometry,i=this.applyWorldTransforms,r=this.attributes.includes("normal"),c=this.attributes.includes("tangent"),u=n.attributes,l=t.attributes;!t.index&&n.index&&(t.index=n.index.clone()),l.position||t.setAttribute("position",K(u.position)),r&&!l.normal&&u.normal&&t.setAttribute("normal",K(u.normal)),c&&!l.tangent&&u.tangent&&t.setAttribute("tangent",K(u.tangent)),Z(n.index,t.index),Z(u.position,l.position),r&&Z(u.normal,l.normal),c&&Z(u.tangent,l.tangent);const o=u.position,d=r?u.normal:null,s=c?u.tangent:null,f=n.morphAttributes.position,h=n.morphAttributes.normal,p=n.morphAttributes.tangent,m=n.morphTargetsRelative,y=e.morphTargetInfluences,x=new je;x.getNormalMatrix(e.matrixWorld),n.index&&t.index.array.set(n.index.array);for(let g=0,v=u.position.count;g<v;g++)R.fromBufferAttribute(o,g),d&&z.fromBufferAttribute(d,g),s&&(oe.fromBufferAttribute(s,g),C.fromBufferAttribute(s,g)),y&&(f&&_t(f,y,m,g,R),h&&_t(h,y,m,g,z),p&&_t(p,y,m,g,C)),e.isSkinnedMesh&&(e.applyBoneTransform(g,R),d&&le(e,g,z),s&&le(e,g,C)),i&&R.applyMatrix4(e.matrixWorld),l.position.setXYZ(g,R.x,R.y,R.z),d&&(i&&z.applyNormalMatrix(x),l.normal.setXYZ(g,z.x,z.y,z.z)),s&&(i&&C.transformDirection(e.matrixWorld),l.tangent.setXYZW(g,C.x,C.y,C.z,oe.w));for(const g in this.attributes){const v=this.attributes[g];v==="position"||v==="tangent"||v==="normal"||!(v in u)||(l[v]||t.setAttribute(v,K(u[v])),Z(u[v],l[v]),ve(u[v],l[v]))}return e.matrixWorld.determinant()<0&&gn(t),t}}const ge=`
|
|
2
|
+
|
|
3
|
+
// A stack of uint32 indices can can store the indices for
|
|
4
|
+
// a perfectly balanced tree with a depth up to 31. Lower stack
|
|
5
|
+
// depth gets higher performance.
|
|
6
|
+
//
|
|
7
|
+
// However not all trees are balanced. Best value to set this to
|
|
8
|
+
// is the trees max depth.
|
|
9
|
+
#ifndef BVH_STACK_DEPTH
|
|
10
|
+
#define BVH_STACK_DEPTH 60
|
|
11
|
+
#endif
|
|
12
|
+
|
|
13
|
+
#ifndef INFINITY
|
|
14
|
+
#define INFINITY 1e20
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
// Utilities
|
|
18
|
+
uvec4 uTexelFetch1D( usampler2D tex, uint index ) {
|
|
19
|
+
|
|
20
|
+
uint width = uint( textureSize( tex, 0 ).x );
|
|
21
|
+
uvec2 uv;
|
|
22
|
+
uv.x = index % width;
|
|
23
|
+
uv.y = index / width;
|
|
24
|
+
|
|
25
|
+
return texelFetch( tex, ivec2( uv ), 0 );
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
ivec4 iTexelFetch1D( isampler2D tex, uint index ) {
|
|
30
|
+
|
|
31
|
+
uint width = uint( textureSize( tex, 0 ).x );
|
|
32
|
+
uvec2 uv;
|
|
33
|
+
uv.x = index % width;
|
|
34
|
+
uv.y = index / width;
|
|
35
|
+
|
|
36
|
+
return texelFetch( tex, ivec2( uv ), 0 );
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
vec4 texelFetch1D( sampler2D tex, uint index ) {
|
|
41
|
+
|
|
42
|
+
uint width = uint( textureSize( tex, 0 ).x );
|
|
43
|
+
uvec2 uv;
|
|
44
|
+
uv.x = index % width;
|
|
45
|
+
uv.y = index / width;
|
|
46
|
+
|
|
47
|
+
return texelFetch( tex, ivec2( uv ), 0 );
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
vec4 textureSampleBarycoord( sampler2D tex, vec3 barycoord, uvec3 faceIndices ) {
|
|
52
|
+
|
|
53
|
+
return
|
|
54
|
+
barycoord.x * texelFetch1D( tex, faceIndices.x ) +
|
|
55
|
+
barycoord.y * texelFetch1D( tex, faceIndices.y ) +
|
|
56
|
+
barycoord.z * texelFetch1D( tex, faceIndices.z );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
void ndcToCameraRay(
|
|
61
|
+
vec2 coord, mat4 cameraWorld, mat4 invProjectionMatrix,
|
|
62
|
+
out vec3 rayOrigin, out vec3 rayDirection
|
|
63
|
+
) {
|
|
64
|
+
|
|
65
|
+
// get camera look direction and near plane for camera clipping
|
|
66
|
+
vec4 lookDirection = cameraWorld * vec4( 0.0, 0.0, - 1.0, 0.0 );
|
|
67
|
+
vec4 nearVector = invProjectionMatrix * vec4( 0.0, 0.0, - 1.0, 1.0 );
|
|
68
|
+
float near = abs( nearVector.z / nearVector.w );
|
|
69
|
+
|
|
70
|
+
// get the camera direction and position from camera matrices
|
|
71
|
+
vec4 origin = cameraWorld * vec4( 0.0, 0.0, 0.0, 1.0 );
|
|
72
|
+
vec4 direction = invProjectionMatrix * vec4( coord, 0.5, 1.0 );
|
|
73
|
+
direction /= direction.w;
|
|
74
|
+
direction = cameraWorld * direction - origin;
|
|
75
|
+
|
|
76
|
+
// slide the origin along the ray until it sits at the near clip plane position
|
|
77
|
+
origin.xyz += direction.xyz * near / dot( direction, lookDirection );
|
|
78
|
+
|
|
79
|
+
rayOrigin = origin.xyz;
|
|
80
|
+
rayDirection = direction.xyz;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
`,be=`
|
|
84
|
+
|
|
85
|
+
float dot2( vec3 v ) {
|
|
86
|
+
|
|
87
|
+
return dot( v, v );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// implementation from https://www.shadertoy.com/view/ttfGWl, though method 2 has been removed
|
|
92
|
+
// and is now available at this fork: https://www.shadertoy.com/view/WlB3zW
|
|
93
|
+
vec3 closestPointToTriangle( vec3 p, vec3 v0, vec3 v1, vec3 v2, out vec3 barycoord ) {
|
|
94
|
+
|
|
95
|
+
vec3 v10 = v1 - v0;
|
|
96
|
+
vec3 v21 = v2 - v1;
|
|
97
|
+
vec3 v02 = v0 - v2;
|
|
98
|
+
|
|
99
|
+
vec3 p0 = p - v0;
|
|
100
|
+
vec3 p1 = p - v1;
|
|
101
|
+
vec3 p2 = p - v2;
|
|
102
|
+
|
|
103
|
+
vec3 nor = cross( v10, v02 );
|
|
104
|
+
|
|
105
|
+
// method 2, in barycentric space
|
|
106
|
+
vec3 q = cross( nor, p0 );
|
|
107
|
+
float d = 1.0 / dot2( nor );
|
|
108
|
+
float u = d * dot( q, v02 );
|
|
109
|
+
float v = d * dot( q, v10 );
|
|
110
|
+
float w = 1.0 - u - v;
|
|
111
|
+
|
|
112
|
+
if( u < 0.0 ) {
|
|
113
|
+
|
|
114
|
+
w = clamp( dot( p2, v02 ) / dot2( v02 ), 0.0, 1.0 );
|
|
115
|
+
u = 0.0;
|
|
116
|
+
v = 1.0 - w;
|
|
117
|
+
|
|
118
|
+
} else if( v < 0.0 ) {
|
|
119
|
+
|
|
120
|
+
u = clamp( dot( p0, v10 ) / dot2( v10 ), 0.0, 1.0 );
|
|
121
|
+
v = 0.0;
|
|
122
|
+
w = 1.0 - u;
|
|
123
|
+
|
|
124
|
+
} else if( w < 0.0 ) {
|
|
125
|
+
|
|
126
|
+
v = clamp( dot( p1, v21 ) / dot2( v21 ), 0.0, 1.0 );
|
|
127
|
+
w = 0.0;
|
|
128
|
+
u = 1.0 - v;
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// output the barycoord in v0, v1, v2 weight order
|
|
133
|
+
barycoord = vec3( w, u, v );
|
|
134
|
+
return u * v1 + v * v2 + w * v0;
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
float distanceToTriangles(
|
|
139
|
+
// geometry info and triangle range
|
|
140
|
+
sampler2D positionAttr, usampler2D indexAttr, uint offset, uint count,
|
|
141
|
+
|
|
142
|
+
// point and cut off range
|
|
143
|
+
vec3 point, float closestDistanceSquared,
|
|
144
|
+
|
|
145
|
+
// outputs
|
|
146
|
+
inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord, inout float side, inout vec3 outPoint
|
|
147
|
+
) {
|
|
148
|
+
|
|
149
|
+
bool found = false;
|
|
150
|
+
vec3 localBarycoord;
|
|
151
|
+
for ( uint i = offset, l = offset + count; i < l; i ++ ) {
|
|
152
|
+
|
|
153
|
+
uvec3 indices = uTexelFetch1D( indexAttr, i ).xyz;
|
|
154
|
+
vec3 a = texelFetch1D( positionAttr, indices.x ).rgb;
|
|
155
|
+
vec3 b = texelFetch1D( positionAttr, indices.y ).rgb;
|
|
156
|
+
vec3 c = texelFetch1D( positionAttr, indices.z ).rgb;
|
|
157
|
+
|
|
158
|
+
// get the closest point and barycoord
|
|
159
|
+
vec3 closestPoint = closestPointToTriangle( point, a, b, c, localBarycoord );
|
|
160
|
+
vec3 delta = point - closestPoint;
|
|
161
|
+
float sqDist = dot2( delta );
|
|
162
|
+
if ( sqDist < closestDistanceSquared ) {
|
|
163
|
+
|
|
164
|
+
// set the output results
|
|
165
|
+
closestDistanceSquared = sqDist;
|
|
166
|
+
faceIndices = uvec4( indices.xyz, i );
|
|
167
|
+
faceNormal = normalize( cross( a - b, b - c ) );
|
|
168
|
+
barycoord = localBarycoord;
|
|
169
|
+
outPoint = closestPoint;
|
|
170
|
+
side = sign( dot( faceNormal, delta ) );
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return closestDistanceSquared;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
float distanceSqToBounds( vec3 point, vec3 boundsMin, vec3 boundsMax ) {
|
|
181
|
+
|
|
182
|
+
vec3 clampedPoint = clamp( point, boundsMin, boundsMax );
|
|
183
|
+
vec3 delta = point - clampedPoint;
|
|
184
|
+
return dot( delta, delta );
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
float distanceSqToBVHNodeBoundsPoint( vec3 point, sampler2D bvhBounds, uint currNodeIndex ) {
|
|
189
|
+
|
|
190
|
+
uint cni2 = currNodeIndex * 2u;
|
|
191
|
+
vec3 boundsMin = texelFetch1D( bvhBounds, cni2 ).xyz;
|
|
192
|
+
vec3 boundsMax = texelFetch1D( bvhBounds, cni2 + 1u ).xyz;
|
|
193
|
+
return distanceSqToBounds( point, boundsMin, boundsMax );
|
|
194
|
+
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// use a macro to hide the fact that we need to expand the struct into separate fields
|
|
198
|
+
#define bvhClosestPointToPoint( bvh, point, maxDistance, faceIndices, faceNormal, barycoord, side, outPoint ) _bvhClosestPointToPoint( bvh.position, bvh.index, bvh.bvhBounds, bvh.bvhContents, point, maxDistance, faceIndices, faceNormal, barycoord, side, outPoint )
|
|
199
|
+
|
|
200
|
+
float _bvhClosestPointToPoint(
|
|
201
|
+
// bvh info
|
|
202
|
+
sampler2D bvh_position, usampler2D bvh_index, sampler2D bvh_bvhBounds, usampler2D bvh_bvhContents,
|
|
203
|
+
|
|
204
|
+
// point to check
|
|
205
|
+
vec3 point, float maxDistance,
|
|
206
|
+
|
|
207
|
+
// output variables
|
|
208
|
+
inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,
|
|
209
|
+
inout float side, inout vec3 outPoint
|
|
210
|
+
) {
|
|
211
|
+
|
|
212
|
+
// stack needs to be twice as long as the deepest tree we expect because
|
|
213
|
+
// we push both the left and right child onto the stack every traversal
|
|
214
|
+
int pointer = 0;
|
|
215
|
+
uint stack[ BVH_STACK_DEPTH ];
|
|
216
|
+
stack[ 0 ] = 0u;
|
|
217
|
+
|
|
218
|
+
float closestDistanceSquared = maxDistance * maxDistance;
|
|
219
|
+
bool found = false;
|
|
220
|
+
while ( pointer > - 1 && pointer < BVH_STACK_DEPTH ) {
|
|
221
|
+
|
|
222
|
+
uint currNodeIndex = stack[ pointer ];
|
|
223
|
+
pointer --;
|
|
224
|
+
|
|
225
|
+
// check if we intersect the current bounds
|
|
226
|
+
float boundsHitDistance = distanceSqToBVHNodeBoundsPoint( point, bvh_bvhBounds, currNodeIndex );
|
|
227
|
+
if ( boundsHitDistance > closestDistanceSquared ) {
|
|
228
|
+
|
|
229
|
+
continue;
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
uvec2 boundsInfo = uTexelFetch1D( bvh_bvhContents, currNodeIndex ).xy;
|
|
234
|
+
bool isLeaf = bool( boundsInfo.x & 0xffff0000u );
|
|
235
|
+
if ( isLeaf ) {
|
|
236
|
+
|
|
237
|
+
uint count = boundsInfo.x & 0x0000ffffu;
|
|
238
|
+
uint offset = boundsInfo.y;
|
|
239
|
+
closestDistanceSquared = distanceToTriangles(
|
|
240
|
+
bvh_position, bvh_index, offset, count, point, closestDistanceSquared,
|
|
241
|
+
|
|
242
|
+
// outputs
|
|
243
|
+
faceIndices, faceNormal, barycoord, side, outPoint
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
} else {
|
|
247
|
+
|
|
248
|
+
uint leftIndex = currNodeIndex + 1u;
|
|
249
|
+
uint splitAxis = boundsInfo.x & 0x0000ffffu;
|
|
250
|
+
uint rightIndex = currNodeIndex + boundsInfo.y;
|
|
251
|
+
bool leftToRight = distanceSqToBVHNodeBoundsPoint( point, bvh_bvhBounds, leftIndex ) < distanceSqToBVHNodeBoundsPoint( point, bvh_bvhBounds, rightIndex );//rayDirection[ splitAxis ] >= 0.0;
|
|
252
|
+
uint c1 = leftToRight ? leftIndex : rightIndex;
|
|
253
|
+
uint c2 = leftToRight ? rightIndex : leftIndex;
|
|
254
|
+
|
|
255
|
+
// set c2 in the stack so we traverse it later. We need to keep track of a pointer in
|
|
256
|
+
// the stack while we traverse. The second pointer added is the one that will be
|
|
257
|
+
// traversed first
|
|
258
|
+
pointer ++;
|
|
259
|
+
stack[ pointer ] = c2;
|
|
260
|
+
pointer ++;
|
|
261
|
+
stack[ pointer ] = c1;
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return sqrt( closestDistanceSquared );
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
`,Ie=`
|
|
271
|
+
|
|
272
|
+
#ifndef TRI_INTERSECT_EPSILON
|
|
273
|
+
#define TRI_INTERSECT_EPSILON 1e-5
|
|
274
|
+
#endif
|
|
275
|
+
|
|
276
|
+
// Raycasting
|
|
277
|
+
bool intersectsBounds( vec3 rayOrigin, vec3 rayDirection, vec3 boundsMin, vec3 boundsMax, out float dist ) {
|
|
278
|
+
|
|
279
|
+
// https://www.reddit.com/r/opengl/comments/8ntzz5/fast_glsl_ray_box_intersection/
|
|
280
|
+
// https://tavianator.com/2011/ray_box.html
|
|
281
|
+
vec3 invDir = 1.0 / rayDirection;
|
|
282
|
+
|
|
283
|
+
// find intersection distances for each plane
|
|
284
|
+
vec3 tMinPlane = invDir * ( boundsMin - rayOrigin );
|
|
285
|
+
vec3 tMaxPlane = invDir * ( boundsMax - rayOrigin );
|
|
286
|
+
|
|
287
|
+
// get the min and max distances from each intersection
|
|
288
|
+
vec3 tMinHit = min( tMaxPlane, tMinPlane );
|
|
289
|
+
vec3 tMaxHit = max( tMaxPlane, tMinPlane );
|
|
290
|
+
|
|
291
|
+
// get the furthest hit distance
|
|
292
|
+
vec2 t = max( tMinHit.xx, tMinHit.yz );
|
|
293
|
+
float t0 = max( t.x, t.y );
|
|
294
|
+
|
|
295
|
+
// get the minimum hit distance
|
|
296
|
+
t = min( tMaxHit.xx, tMaxHit.yz );
|
|
297
|
+
float t1 = min( t.x, t.y );
|
|
298
|
+
|
|
299
|
+
// set distance to 0.0 if the ray starts inside the box
|
|
300
|
+
dist = max( t0, 0.0 );
|
|
301
|
+
|
|
302
|
+
return t1 >= dist;
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
bool intersectsTriangle(
|
|
307
|
+
vec3 rayOrigin, vec3 rayDirection, vec3 a, vec3 b, vec3 c,
|
|
308
|
+
out vec3 barycoord, out vec3 norm, out float dist, out float side
|
|
309
|
+
) {
|
|
310
|
+
|
|
311
|
+
// https://stackoverflow.com/questions/42740765/intersection-between-line-and-triangle-in-3d
|
|
312
|
+
vec3 edge1 = b - a;
|
|
313
|
+
vec3 edge2 = c - a;
|
|
314
|
+
norm = cross( edge1, edge2 );
|
|
315
|
+
|
|
316
|
+
float det = - dot( rayDirection, norm );
|
|
317
|
+
float invdet = 1.0 / det;
|
|
318
|
+
|
|
319
|
+
vec3 AO = rayOrigin - a;
|
|
320
|
+
vec3 DAO = cross( AO, rayDirection );
|
|
321
|
+
|
|
322
|
+
vec4 uvt;
|
|
323
|
+
uvt.x = dot( edge2, DAO ) * invdet;
|
|
324
|
+
uvt.y = - dot( edge1, DAO ) * invdet;
|
|
325
|
+
uvt.z = dot( AO, norm ) * invdet;
|
|
326
|
+
uvt.w = 1.0 - uvt.x - uvt.y;
|
|
327
|
+
|
|
328
|
+
// set the hit information
|
|
329
|
+
barycoord = uvt.wxy; // arranged in A, B, C order
|
|
330
|
+
dist = uvt.z;
|
|
331
|
+
side = sign( det );
|
|
332
|
+
norm = side * normalize( norm );
|
|
333
|
+
|
|
334
|
+
// add an epsilon to avoid misses between triangles
|
|
335
|
+
uvt += vec4( TRI_INTERSECT_EPSILON );
|
|
336
|
+
|
|
337
|
+
return all( greaterThanEqual( uvt, vec4( 0.0 ) ) );
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
bool intersectTriangles(
|
|
342
|
+
// geometry info and triangle range
|
|
343
|
+
sampler2D positionAttr, usampler2D indexAttr, uint offset, uint count,
|
|
344
|
+
|
|
345
|
+
// ray
|
|
346
|
+
vec3 rayOrigin, vec3 rayDirection,
|
|
347
|
+
|
|
348
|
+
// outputs
|
|
349
|
+
inout float minDistance, inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,
|
|
350
|
+
inout float side, inout float dist
|
|
351
|
+
) {
|
|
352
|
+
|
|
353
|
+
bool found = false;
|
|
354
|
+
vec3 localBarycoord, localNormal;
|
|
355
|
+
float localDist, localSide;
|
|
356
|
+
for ( uint i = offset, l = offset + count; i < l; i ++ ) {
|
|
357
|
+
|
|
358
|
+
uvec3 indices = uTexelFetch1D( indexAttr, i ).xyz;
|
|
359
|
+
vec3 a = texelFetch1D( positionAttr, indices.x ).rgb;
|
|
360
|
+
vec3 b = texelFetch1D( positionAttr, indices.y ).rgb;
|
|
361
|
+
vec3 c = texelFetch1D( positionAttr, indices.z ).rgb;
|
|
362
|
+
|
|
363
|
+
if (
|
|
364
|
+
intersectsTriangle( rayOrigin, rayDirection, a, b, c, localBarycoord, localNormal, localDist, localSide )
|
|
365
|
+
&& localDist < minDistance
|
|
366
|
+
) {
|
|
367
|
+
|
|
368
|
+
found = true;
|
|
369
|
+
minDistance = localDist;
|
|
370
|
+
|
|
371
|
+
faceIndices = uvec4( indices.xyz, i );
|
|
372
|
+
faceNormal = localNormal;
|
|
373
|
+
|
|
374
|
+
side = localSide;
|
|
375
|
+
barycoord = localBarycoord;
|
|
376
|
+
dist = localDist;
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return found;
|
|
383
|
+
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
bool intersectsBVHNodeBounds( vec3 rayOrigin, vec3 rayDirection, sampler2D bvhBounds, uint currNodeIndex, out float dist ) {
|
|
387
|
+
|
|
388
|
+
uint cni2 = currNodeIndex * 2u;
|
|
389
|
+
vec3 boundsMin = texelFetch1D( bvhBounds, cni2 ).xyz;
|
|
390
|
+
vec3 boundsMax = texelFetch1D( bvhBounds, cni2 + 1u ).xyz;
|
|
391
|
+
return intersectsBounds( rayOrigin, rayDirection, boundsMin, boundsMax, dist );
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// use a macro to hide the fact that we need to expand the struct into separate fields
|
|
396
|
+
#define bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist ) _bvhIntersectFirstHit( bvh.position, bvh.index, bvh.bvhBounds, bvh.bvhContents, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist )
|
|
397
|
+
|
|
398
|
+
bool _bvhIntersectFirstHit(
|
|
399
|
+
// bvh info
|
|
400
|
+
sampler2D bvh_position, usampler2D bvh_index, sampler2D bvh_bvhBounds, usampler2D bvh_bvhContents,
|
|
401
|
+
|
|
402
|
+
// ray
|
|
403
|
+
vec3 rayOrigin, vec3 rayDirection,
|
|
404
|
+
|
|
405
|
+
// output variables split into separate variables due to output precision
|
|
406
|
+
inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,
|
|
407
|
+
inout float side, inout float dist
|
|
408
|
+
) {
|
|
409
|
+
|
|
410
|
+
// stack needs to be twice as long as the deepest tree we expect because
|
|
411
|
+
// we push both the left and right child onto the stack every traversal
|
|
412
|
+
int pointer = 0;
|
|
413
|
+
uint stack[ BVH_STACK_DEPTH ];
|
|
414
|
+
stack[ 0 ] = 0u;
|
|
415
|
+
|
|
416
|
+
float triangleDistance = INFINITY;
|
|
417
|
+
bool found = false;
|
|
418
|
+
while ( pointer > - 1 && pointer < BVH_STACK_DEPTH ) {
|
|
419
|
+
|
|
420
|
+
uint currNodeIndex = stack[ pointer ];
|
|
421
|
+
pointer --;
|
|
422
|
+
|
|
423
|
+
// check if we intersect the current bounds
|
|
424
|
+
float boundsHitDistance;
|
|
425
|
+
if (
|
|
426
|
+
! intersectsBVHNodeBounds( rayOrigin, rayDirection, bvh_bvhBounds, currNodeIndex, boundsHitDistance )
|
|
427
|
+
|| boundsHitDistance > triangleDistance
|
|
428
|
+
) {
|
|
429
|
+
|
|
430
|
+
continue;
|
|
431
|
+
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
uvec2 boundsInfo = uTexelFetch1D( bvh_bvhContents, currNodeIndex ).xy;
|
|
435
|
+
bool isLeaf = bool( boundsInfo.x & 0xffff0000u );
|
|
436
|
+
|
|
437
|
+
if ( isLeaf ) {
|
|
438
|
+
|
|
439
|
+
uint count = boundsInfo.x & 0x0000ffffu;
|
|
440
|
+
uint offset = boundsInfo.y;
|
|
441
|
+
|
|
442
|
+
found = intersectTriangles(
|
|
443
|
+
bvh_position, bvh_index, offset, count,
|
|
444
|
+
rayOrigin, rayDirection, triangleDistance,
|
|
445
|
+
faceIndices, faceNormal, barycoord, side, dist
|
|
446
|
+
) || found;
|
|
447
|
+
|
|
448
|
+
} else {
|
|
449
|
+
|
|
450
|
+
uint leftIndex = currNodeIndex + 1u;
|
|
451
|
+
uint splitAxis = boundsInfo.x & 0x0000ffffu;
|
|
452
|
+
uint rightIndex = currNodeIndex + boundsInfo.y;
|
|
453
|
+
|
|
454
|
+
bool leftToRight = rayDirection[ splitAxis ] >= 0.0;
|
|
455
|
+
uint c1 = leftToRight ? leftIndex : rightIndex;
|
|
456
|
+
uint c2 = leftToRight ? rightIndex : leftIndex;
|
|
457
|
+
|
|
458
|
+
// set c2 in the stack so we traverse it later. We need to keep track of a pointer in
|
|
459
|
+
// the stack while we traverse. The second pointer added is the one that will be
|
|
460
|
+
// traversed first
|
|
461
|
+
pointer ++;
|
|
462
|
+
stack[ pointer ] = c2;
|
|
463
|
+
|
|
464
|
+
pointer ++;
|
|
465
|
+
stack[ pointer ] = c1;
|
|
466
|
+
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
return found;
|
|
472
|
+
|
|
473
|
+
}
|
|
474
|
+
`,we=`
|
|
475
|
+
struct BVH {
|
|
476
|
+
|
|
477
|
+
usampler2D index;
|
|
478
|
+
sampler2D position;
|
|
479
|
+
|
|
480
|
+
sampler2D bvhBounds;
|
|
481
|
+
usampler2D bvhContents;
|
|
482
|
+
|
|
483
|
+
};
|
|
484
|
+
`,On=Object.freeze(Object.defineProperty({__proto__:null,bvh_distance_functions:be,bvh_ray_functions:Ie,bvh_struct_definitions:we,common_functions:ge},Symbol.toStringTag,{value:"Module"})),Wn=we,Ln=be,qn=`
|
|
485
|
+
${ge}
|
|
486
|
+
${Ie}
|
|
487
|
+
`;export{Xn as AVERAGE,Be as BVH,Ft as BVHHelper,On as BVHShaderGLSL,Yn as CENTER,$n as CONTAINED,Ae as ExtendedTriangle,hn as FloatVertexAttributeTexture,Pt as GeometryBVH,F as INTERSECTED,zn as IntVertexAttributeTexture,Bn as LineBVH,Ke as LineLoopBVH,Ze as LineSegmentsBVH,ht as MeshBVH,Tn as MeshBVHHelper,Cn as MeshBVHUniformStruct,T as NOT_INTERSECTED,_n as ObjectBVH,jn as OrientedBox,An as PointsBVH,Zn as SAH,Ht as SKIP_GENERATION,Mn as SkinnedMeshBVH,kn as StaticGeometryGenerator,fn as UIntVertexAttributeTexture,Vt as VertexAttributeTexture,Nn as acceleratedRaycast,Hn as computeBatchedBoundsTree,Fn as computeBoundsTree,Rn as disposeBatchedBoundsTree,Vn as disposeBoundsTree,Dn as estimateMemoryInBytes,Kn as generateIndirectBuffer,Sn as getBVHExtremes,En as getJSONStructure,Jn as getTriangleHitPointInfo,Ln as shaderDistanceFunction,qn as shaderIntersectFunction,Wn as shaderStructs,Pn as validateBounds};
|