@volter/game-editor 0.5.81 → 0.5.83
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 +22 -22
- package/catalog/entries/blender.json +2 -2
- package/catalog/entries/music.json +2 -2
- package/catalog/entries/reflections.json +1 -1
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +34 -5
- package/catalog/project-source/src/lib/reflections/index.ts +1 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +44 -3
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +32 -7
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +638 -160
- package/dist/.vite/manifest.json +2184 -2165
- package/dist/assets/{AssetBudgetPanel-CfVYW4ED.js → AssetBudgetPanel-SrgQ5Lx5.js} +3 -3
- package/dist/assets/{AudioViewer-J10BXrtm.js → AudioViewer-BqEwLSZN.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-BgIbuOQF.js → CanvasBoardDocument-BfzWZdLX.js} +1 -1
- package/dist/assets/CanvasSceneViewport-CQ7ewAlO.js +1 -0
- package/dist/assets/{ColorInput-fX1V5l8_.js → ColorInput-DQ6YyPD_.js} +1 -1
- package/dist/assets/EntityModelDocument-By-BM9dS.js +1 -0
- package/dist/assets/{EnvironmentAssetDocument-QuLkCom9.js → EnvironmentAssetDocument-CrD37BI0.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-D0z5Mc0R.js → GameplaySessionTimeline-DYtnW0Si.js} +1 -1
- package/dist/assets/{ImageViewer-DWUPPWRf.js → ImageViewer-CZNpdUEA.js} +1 -1
- package/dist/assets/InspectorObjectPreview-gWOVV6Ll.js +1 -0
- package/dist/assets/{JsonAssetDocument-C0Lr6RwY.js → JsonAssetDocument-Bg74MDXy.js} +1 -1
- package/dist/assets/{LiveModuleDocument-CaGmr0EA.js → LiveModuleDocument-CSqzNMjn.js} +1 -1
- package/dist/assets/{LutAssetDocument-B6GmsOYd.js → LutAssetDocument-CsboXa8x.js} +1 -1
- package/dist/assets/ModelAssetDocument-DDVoKZpQ.js +1 -0
- package/dist/assets/{NonThreeAuthoringBootstrap-byKqf1kp.js → NonThreeAuthoringBootstrap-DcqD6_34.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-p2pd2TuS.js +1 -0
- package/dist/assets/Object3DDocumentViewport-BvNfSHi_.js +2 -0
- package/dist/assets/{Object3DPreview-pn9i3vwZ.js → Object3DPreview-Bv0fZcdS.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-PDCDAcqz.js → OnlineAssetDetail-CPDafN4x.js} +1 -1
- package/dist/assets/{PlayBar-DEnkv3v6.js → PlayBar-CBD4rcED.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-2x66XymD.js → QuarksAssetDocument-DUUhKUxZ.js} +1 -1
- package/dist/assets/{ReactCanvasControls-rFwp2CeP.js → ReactCanvasControls-3ual87uP.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-B9rf-SSV.js → RootSelectionOverlay-DtX8yWUQ.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-ImI6jbzB.js → ShaderAssetDocument-rkhRdPRk.js} +5 -5
- package/dist/assets/{ShadowEditor-DXxVxTzk.js → ShadowEditor-B-3FlftY.js} +1 -1
- package/dist/assets/{SourceAssetViewer-CMbp_o7v.js → SourceAssetViewer-CsMPohqK.js} +1 -1
- package/dist/assets/StageHost-BOaImrmu.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2zLWzWy.js → StoryPreviewMount-BI-ANJix.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-nX3UiY3u.js → ThreeBoardDocument-CoBjs8BP.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-CGHM0vsg.js → ThreeIsolationSceneContent-uShwSK1O.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-BfNcqtFv.js → ToolObject3DPreview-CBZdWA_7.js} +1 -1
- package/dist/assets/{Toolbar-BJRJsbHG.js → Toolbar-DJK7o_be.js} +1 -1
- package/dist/assets/{TransientHint-CDvYgnzu.js → TransientHint-Dgu6u7U5.js} +1 -1
- package/dist/assets/{VideoViewer-B6Dv2zeQ.js → VideoViewer-BwTcASO2.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-CrTY7tnk.js → ViewportShadingMenu-DUROUZdC.js} +1 -1
- package/dist/assets/{active-ingest-lrfMBhf9.js → active-ingest-Ra07ruDo.js} +3 -3
- package/dist/assets/{animation-clock-DktVGV5-.js → animation-clock-CKeqYCt9.js} +1 -1
- package/dist/assets/{animation-mixers.service-fkojNtor.js → animation-mixers.service-BNiEU2dA.js} +1 -1
- package/dist/assets/{animation-timeline.utility-DDrUZKe8.js → animation-timeline.utility-DQqMh1lF.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-CDlgKSO9.js → asset-budget-asset.menu-DFFih9b4.js} +1 -1
- package/dist/assets/{asset-budget.action-D6n-wIR3.js → asset-budget.action-C3SMMeSX.js} +1 -1
- package/dist/assets/{asset-budget.document-DFByoagB.js → asset-budget.document-B5NTy5dU.js} +1 -1
- package/dist/assets/{asset-budget.menu-B2u_1dWR.js → asset-budget.menu-Cclz2utV.js} +1 -1
- package/dist/assets/{asset-editor-persistence-e6bYhVnm.js → asset-editor-persistence-DsIjTddX.js} +1 -1
- package/dist/assets/{asset-loaders-Bsq-3hNt.js → asset-loaders-CQiLyapK.js} +1 -1
- package/dist/assets/{asset-preview-B7j9QV6N.js → asset-preview-BkFAKkZH.js} +1 -1
- package/dist/assets/{audio-unlock.service-7oO4YVIj.js → audio-unlock.service-CupzdUuC.js} +1 -1
- package/dist/assets/{audio.utility-9fcsT3YY.js → audio.utility-0il96T5s.js} +1 -1
- package/dist/assets/autoplay.service-SQBFaKvM.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-BJfYxqDM.js → babylon-authoring-adapter-HZ_SbAet.js} +1 -1
- package/dist/assets/{binding-resolver-CBXePHiR.js → binding-resolver-BoecCqTq.js} +2 -2
- package/dist/assets/blender-emscripten-engine-Dk-rq4bm.js +2 -0
- package/dist/assets/{blender-node-editor.document-xA7eGv3-.js → blender-node-editor.document-B_MGPd1D.js} +1 -1
- package/dist/assets/{blender-properties-tab-nY8UOQUL.js → blender-properties-tab-ITmWT_gZ.js} +1 -1
- package/dist/assets/blender-runtime-host-CACzxt1b.js +4 -0
- package/dist/assets/{blender-runtime-skin-D3Arti9-.js → blender-runtime-skin-CwFW2Hj7.js} +36 -36
- package/dist/assets/blender-runtime.document-CozOB5TX.js +13 -0
- package/dist/assets/blender-screenshot.menu-BFR44H0L.js +1 -0
- package/dist/assets/{blender-timeline.document-DXoQ7y8E.js → blender-timeline.document-C0Zzi8Vo.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CMOyob1N.js → blender-uv-editor.document-BktbYoor.js} +1 -1
- package/dist/assets/{blender-version.status-16xnuezC.js → blender-version.status-CLPjDPFV.js} +1 -1
- package/dist/assets/blender-wali-engine-CUWSQ_vI.js +2 -0
- package/dist/assets/{blender.command-Br2EUk6Q.js → blender.command-DdHEHM62.js} +1 -1
- package/dist/assets/{board-guides-whelE-Dr.js → board-guides-DhwRYHGT.js} +1 -1
- package/dist/assets/bridge.command-D4O9w4ft.js +3 -0
- package/dist/assets/{browserAll-BfZu7-UJ.js → browserAll-BhQBgoJL.js} +1 -1
- package/dist/assets/build-player.document-DFr-d97N.js +1 -0
- package/dist/assets/{build-profiles.document-DNncGOL3.js → build-profiles.document-C-64YHSV.js} +2 -2
- package/dist/assets/{build-progress.status-DnJetNft.js → build-progress.status-DVm95Lmt.js} +1 -1
- package/dist/assets/{build-session-BaEmzCkm.js → build-session-C_SD2MNJ.js} +1 -1
- package/dist/assets/{build.action-exbllMgM.js → build.action-CPee4b_9.js} +1 -1
- package/dist/assets/{build.command-Imykh8LN.js → build.command-CrZ5sHYt.js} +1 -1
- package/dist/assets/{build.header-9RzLy3UQ.js → build.header-DDbhXD6t.js} +1 -1
- package/dist/assets/{build.menu-CRhA3yID.js → build.menu-Ci-W_A1E.js} +1 -1
- package/dist/assets/{build.service-CxIdSEPw.js → build.service-CpUtTLP4.js} +1 -1
- package/dist/assets/{camera-BiBGeQQ4.js → camera-BZM67LhS.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-DmRFynxC.js → camera-runtime.inspector-BLgPGd97.js} +1 -1
- package/dist/assets/{canvas-design-mount-DJ6zQJKG.js → canvas-design-mount-DPAhHuIQ.js} +6 -6
- package/dist/assets/{canvas-entry-runtime-Cjga4XYp.js → canvas-entry-runtime-DeyvFKWS.js} +2 -2
- package/dist/assets/{canvas-preview-frames-EoYgD6W4.js → canvas-preview-frames-Cm0GJ-40.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-D5UntNCd.js → canvas-story-capture.service-Ziv9XNot.js} +2 -2
- package/dist/assets/{capability-coverage-9qm5WVwt.js → capability-coverage-39yK3DGt.js} +4 -4
- package/dist/assets/collaboration-presence-MR8LW4mZ.js +1 -0
- package/dist/assets/{collider-CTHtUvnl.js → collider-4Sgmy-qt.js} +1 -1
- package/dist/assets/{component-board.service-yIS2UB-T.js → component-board.service-BdcOkwgn.js} +2 -2
- package/dist/assets/{component-board.service-Bf-ETQF0.js → component-board.service-DO_oHdnS.js} +2 -2
- package/dist/assets/{component-board.service-foqmr9Ii.js → component-board.service-DRJcETCR.js} +2 -2
- package/dist/assets/{component-contracts.service-Do9hADdW.js → component-contracts.service-BYQTO1HK.js} +1 -1
- package/dist/assets/{component-instance-root-MBgAuUpp.js → component-instance-root-CzRnRMe6.js} +1 -1
- package/dist/assets/{component-verbs.command-DtMdPuyO.js → component-verbs.command-CFv5y_pR.js} +1 -1
- package/dist/assets/component-verbs.service-BMBAwqjA.js +1 -0
- package/dist/assets/{config-B6tt9xy3.js → config-C6iAsozB.js} +2 -2
- package/dist/assets/configurations-Dua_x6Wx.js +1 -0
- package/dist/assets/{connection.status-BNPvWdJD.js → connection.status-DQJvEgdT.js} +1 -1
- package/dist/assets/{constraints.inspector-DoOn25Lk.js → constraints.inspector-AHeP-LBc.js} +1 -1
- package/dist/assets/{content-bounds-BFpR_e--.js → content-bounds-tMCAobKq.js} +1 -1
- package/dist/assets/{contract-system-adapters-BRHtWOi_.js → contract-system-adapters-D6ion7SF.js} +1 -1
- package/dist/assets/{coverage.service-BB1XhwsL.js → coverage.service-Dm_H5o74.js} +2 -2
- package/dist/assets/{create-runtime-B6u6x5eK.js → create-runtime-C82CmCbc.js} +2 -2
- package/dist/assets/{curve-D11mIGoN.js → curve-C7Gg05DV.js} +1 -1
- package/dist/assets/{data-asset-DejEwzXj.js → data-asset-BquhdFX2.js} +1 -1
- package/dist/assets/{data-ref-DJNVzksb.js → data-ref-Dcq9KJIG.js} +1 -1
- package/dist/assets/{debug-bridge-DlGIEyTc.js → debug-bridge-DODnLefz.js} +1 -1
- package/dist/assets/{debug-registry-Dagj3b6J.js → debug-registry-CwYeaZ9J.js} +1 -1
- package/dist/assets/deferred-ingest-play-7EJo_GNB.js +2 -0
- package/dist/assets/{design-time-canvas-mount-Cpb_jITI.js → design-time-canvas-mount-DCINR1Hg.js} +2 -2
- package/dist/assets/{design-time-layers-DT4X-pJp.js → design-time-layers-i1N-JjPz.js} +1 -1
- package/dist/assets/{design-time-mount.service-DEa-41ij.js → design-time-mount.service-CtnijZJJ.js} +2 -2
- package/dist/assets/{design-time-mount.service-Ck5Hjxtn.js → design-time-mount.service-DrUVDx2-.js} +2 -2
- package/dist/assets/{design-time-react-mount-DCTpYS51.js → design-time-react-mount-CpgoPMGr.js} +1 -1
- package/dist/assets/{document-preview-three-TjlxMDBR.js → document-preview-three-CuBUMP4o.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-C3ZsI41l.js → dom-authoring-adapter-DSM-2JgU.js} +1 -1
- package/dist/assets/{draco3d-Ddr7J1sS.js → draco3d--d91Ay95.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D047aZ6I.js → edit-mode-audio.service-C9_299G0.js} +1 -1
- package/dist/assets/{edit-mode-authoring-DubxVdEM.js → edit-mode-authoring-DgvzXpiM.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-DitjC2ZL.js → edit-mode-networking.service-B6l9ESo-.js} +1 -1
- package/dist/assets/editor-api-D9NJWRVZ.js +1 -0
- package/dist/assets/{editor-layers-BK3fNRb7.js → editor-layers-D7HXdvWY.js} +1 -1
- package/dist/assets/{editor-shell-store-Bro0arjr.js → editor-shell-store-CGWO4Ldz.js} +1 -1
- package/dist/assets/{entity-object-BFppZ54X.js → entity-object-Dl04-FE8.js} +1 -1
- package/dist/assets/{extend-MkXq6t1H.js → extend-GXzJ7XU_.js} +1 -1
- package/dist/assets/fork-menu-DO1KASKk.js +1 -0
- package/dist/assets/{frame-debugger-store-xbOH83D0.js → frame-debugger-store-DOewah-x.js} +1 -1
- package/dist/assets/{game-contract-seams-5IUqvr7b.js → game-contract-seams-B5a-Ev-f.js} +1 -1
- package/dist/assets/{game-css-scope-transform-DDAoTvZQ.js → game-css-scope-transform-CQhuDfMR.js} +1 -1
- package/dist/assets/game-document.service-CMc6SfH9.js +1 -0
- package/dist/assets/{game-eval.command-DcFoKUe7.js → game-eval.command-MY5YxNL-.js} +1 -1
- package/dist/assets/{game-module-access-ABBzTWg7.js → game-module-access-BafPamOR.js} +1 -1
- package/dist/assets/game-network-COQRxS_4.js +22 -0
- package/dist/assets/gameplay-export-i_fnSpRp.js +1 -0
- package/dist/assets/gameplay-replay-BM_frdpr.js +1 -0
- package/dist/assets/{gameplay.command-qdQLKC3A.js → gameplay.command-Dkp2IG9Q.js} +1 -1
- package/dist/assets/generation-jobs-B6T_j2D_.js +1 -0
- package/dist/assets/{generation.service-CdwRWoIV.js → generation.service-BXJTa6dr.js} +1 -1
- package/dist/assets/{generations-nW4LG5qG.js → generations-DqNhoKz8.js} +1 -1
- package/dist/assets/{generations.status-DgjVrgGL.js → generations.status-Dt8TW7Lk.js} +1 -1
- package/dist/assets/{hierarchy-marks-Pb6wnNcu.js → hierarchy-marks-fSNwXIFe.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-BCnTLunr.js → hosted-asset-materialization-76jdNP28.js} +2 -2
- package/dist/assets/ibl-override-material-C09OAhCc.js +6 -0
- package/dist/assets/{index-CvGsVzTo.js → index-C5tasxXb.js} +294 -294
- package/dist/assets/{index-D7q1gYjq.js → index-CKznhnFr.js} +1 -1
- package/dist/assets/{index-BPuw4yre.js → index-CO6HFW9e.js} +1 -1
- package/dist/assets/{index-CaZZDx3x.js → index-Cf-uQvPt.js} +1 -1
- package/dist/assets/{index-BlWeDGvp.js → index-Cub6ESrb.js} +2 -2
- package/dist/assets/{index-Ds9fZyOU.js → index-D5pDWxZH.js} +1 -1
- package/dist/assets/{index-BYoN6-Qw.js → index-c6fd_bqy.js} +1 -1
- package/dist/assets/{index-Bz4YDJ7o.js → index-cGaEzVz5.js} +1 -1
- package/dist/assets/{index-Db2ixdvK.js → index-cNdu8TlA.js} +1 -1
- package/dist/assets/{inference-diagnostics-BCwXk-CS.js → inference-diagnostics-D7uYs70A.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-BPER30gQ.js → ingest-boot-viewport-CjtFKkMD.js} +1 -1
- package/dist/assets/ingest-siblings-Dlx0quan.js +1 -0
- package/dist/assets/{ingest-source-persistence-CPlDA2D8.js → ingest-source-persistence-SAe0xIy-.js} +1 -1
- package/dist/assets/{ingest.service-BhwFGlqY.js → ingest.service-BXkZ1vXa.js} +1 -1
- package/dist/assets/{inspect-DxfAFkho.js → inspect-BqIL-41D.js} +1 -1
- package/dist/assets/instances.command-wpQVWPb9.js +1 -0
- package/dist/assets/{json-history-resource-CckDydoO.js → json-history-resource-BUJgH5iK.js} +1 -1
- package/dist/assets/layered-pick-RElCrqXb.js +1 -0
- package/dist/assets/{light-DF4nTzTq.js → light-DLADuHH2.js} +1 -1
- package/dist/assets/live-project-verbs-Cc1GXtG5.js +1 -0
- package/dist/assets/{machine.document-DaPLAXaa.js → machine.document-ER7OD-37.js} +1 -1
- package/dist/assets/{machines.finder-C9s8SFtp.js → machines.finder-CZ2ZxPFR.js} +1 -1
- package/dist/assets/material-CspuVO3Q.js +1 -0
- package/dist/assets/{material-factory-CCcnlv8E.js → material-factory-KV4mqSzl.js} +1 -1
- package/dist/assets/{mesh-CVBvSsCX.js → mesh-CrIkl8_H.js} +1 -1
- package/dist/assets/{model-asset-sections.service-vVRv6iOD.js → model-asset-sections.service-Cyom1FRs.js} +1 -1
- package/dist/assets/{model-inspection-Dd-hn5v2.js → model-inspection-BLOiPoW4.js} +1 -1
- package/dist/assets/{model-thumbnail-BDU_QU37.js → model-thumbnail-B7DVMYtQ.js} +1 -1
- package/dist/assets/{models.finder-CQMZz5xX.js → models.finder-At2wuWE3.js} +1 -1
- package/dist/assets/{module-mode-DcBz3aI7.js → module-mode-CHqvCb69.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-DMWeT_c3.js → mount-canvas-ingest-root-uISMj3zn.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-Bx1TmleJ.js → mount-dom-ingest-root-C8PsgrCd.js} +2 -2
- package/dist/assets/{mount-ingest-root-BDP8atUq.js → mount-ingest-root-Dmb_D_oY.js} +2 -2
- package/dist/assets/{mount-manifest-C5QVCZlS.js → mount-manifest-CGwCOZO6.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-DSmhgOJn.js → mount-three-ingest-root-BGdd6UoG.js} +1 -1
- package/dist/assets/{mounted-authoring-D-tXkNKH.js → mounted-authoring-BS53gpIm.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-Snu9yn1n.js → mounted-story-viewport-source-CL9Ra-_N.js} +1 -1
- package/dist/assets/{native-debug-module-XfhvyMrK.js → native-debug-module-DRmkIrIW.js} +1 -1
- package/dist/assets/{navigation-CTTcWe0R.js → navigation-DOuNvaV6.js} +1 -1
- package/dist/assets/{navmesh.menu-mFjQ30B0.js → navmesh.menu-9g4nO2dp.js} +1 -1
- package/dist/assets/{navmesh.service-BJPp7ZXu.js → navmesh.service-B7MllQj9.js} +1 -1
- package/dist/assets/network-observer.service-DY_39EdG.js +1 -0
- package/dist/assets/{network.utility-C-_7MTIV.js → network.utility-BgzPLUS5.js} +1 -1
- package/dist/assets/object3d-document-session-registry-Bk-I9jZH.js +2 -0
- package/dist/assets/{oid-transform-Bgdv7kST.js → oid-transform-CHeHFNUu.js} +1 -1
- package/dist/assets/{particles-CHXYb9Jd.js → particles-RD4cI69F.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-lj5CidSR.js → pixi-authoring-adapter-BuP3Qc7X.js} +1 -1
- package/dist/assets/{pixi-live-write-target-BEL9GCCr.js → pixi-live-write-target-DzyXhmiw.js} +1 -1
- package/dist/assets/play.command-C7iZbm26.js +2 -0
- package/dist/assets/{presentation-CmK-bEDi.js → presentation-43UAzXCV.js} +1 -1
- package/dist/assets/{product-gjrRHe-K.js → product-BfaoEtK8.js} +1 -1
- package/dist/assets/{profiler.action-CZ6UQi9A.js → profiler.action-DIp4OPNA.js} +1 -1
- package/dist/assets/{profiler.menu-DxbnC3d6.js → profiler.menu-tHZqii7c.js} +1 -1
- package/dist/assets/{profiler.utility-BvARl7sM.js → profiler.utility-CSg5WNN8.js} +1 -1
- package/dist/assets/{project-authoring-session-CBKXzBlD.js → project-authoring-session-BbwFHEzZ.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-Co8UpbhC.js → properties-bone-constraints.inspector-ooGWoGiI.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CFXh2lQH.js → properties-bone.inspector-C_UdJjDe.js} +1 -1
- package/dist/assets/{properties-collection.inspector-Jq9X8fEq.js → properties-collection.inspector-Dm4MNZQK.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-CMcKD_Jc.js → properties-constraints.inspector-DlCHF3Nd.js} +1 -1
- package/dist/assets/{properties-data.inspector-cP3izSat.js → properties-data.inspector-DTfv2ILq.js} +1 -1
- package/dist/assets/{properties-material.inspector-CrZIovv9.js → properties-material.inspector-C_-GsOvF.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-DqQMxoiL.js → properties-modifiers.inspector-BELGiG49.js} +1 -1
- package/dist/assets/{properties-object.inspector-DM63eANJ.js → properties-object.inspector-COLlzAo4.js} +1 -1
- package/dist/assets/{properties-output.inspector-B475IBEd.js → properties-output.inspector-DLpqLRCp.js} +1 -1
- package/dist/assets/{properties-particles.inspector-vGXQ4kWx.js → properties-particles.inspector-C8ZhuG-X.js} +1 -1
- package/dist/assets/{properties-physics.inspector-CfwqpVGS.js → properties-physics.inspector-DQ3fUdPx.js} +1 -1
- package/dist/assets/{properties-render.inspector-BYLknsM7.js → properties-render.inspector-DlPuoXQ-.js} +1 -1
- package/dist/assets/{properties-scene.inspector-BcIZBfGk.js → properties-scene.inspector-itnV8qGu.js} +1 -1
- package/dist/assets/{properties-texture.inspector-p3Owurhl.js → properties-texture.inspector-BZbBAQ_O.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-CN-5jzB9.js → properties-view-layer.inspector-CNOevOy3.js} +1 -1
- package/dist/assets/{properties-world.inspector-DVp8fYWx.js → properties-world.inspector-C7u-dAkO.js} +1 -1
- package/dist/assets/r3f-design-session-DbXiRez3.js +2 -0
- package/dist/assets/{r3f-physics-binding-BcTFD1ZS.js → r3f-physics-binding-B8Je7bNy.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DVnhzoxp.js → r3f-source-authoring-adapter-CarxaAwC.js} +1 -1
- package/dist/assets/{react-canvas-navigation-CBorZtWB.js → react-canvas-navigation-BTVCmK_d.js} +1 -1
- package/dist/assets/{react-inspector.service-Dc99kogU.js → react-inspector.service-BV9ZVls7.js} +1 -1
- package/dist/assets/{react-story-board-6-BjI32N.js → react-story-board-CETbMKNG.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-BO2XPUEM.js → react-three-rapier.esm-BQ3IBcaP.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-B6BiehHR.js → react-world-authoring-adapter-DsywMgco.js} +1 -1
- package/dist/assets/{realm-services-DCnaxwIb.js → realm-services-DoN23Ol2.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-CWneVfEe.js → reflection-probe-capture.inspector-D0grUDdX.js} +1 -1
- package/dist/assets/{registry-BQ9YcFZF.js → registry-CZxNkOhN.js} +1 -1
- package/dist/assets/{relative-import-specifier-BvzqkvYS.js → relative-import-specifier-DMppRnNH.js} +1 -1
- package/dist/assets/{render-env-F320_iHT.js → render-env-BAO3Rc6G.js} +1 -1
- package/dist/assets/{render-features-DFwHsGxu.js → render-features-CBm-s0QE.js} +1 -1
- package/dist/assets/{render-settings-BPcHd4LA.js → render-settings-DCZaLK-j.js} +1 -1
- package/dist/assets/{resolve-three-CnxafYrg.js → resolve-three-Bwj7rkZB.js} +13 -13
- package/dist/assets/{root-seam-contract-CueaHgB9.js → root-seam-contract-DMUsCBFW.js} +1 -1
- package/dist/assets/{run-selection-BMQWV9Fn.js → run-selection-DRkjJF-w.js} +1 -1
- package/dist/assets/{scene-capture-DcMYbX9_.js → scene-capture-DVXdql_1.js} +1 -1
- package/dist/assets/{scene-document.service-CZpLI3b6.js → scene-document.service-CxGQ1BN-.js} +2 -2
- package/dist/assets/{scene-framing-nVyYC4Y-.js → scene-framing-DUd4lKtW.js} +1 -1
- package/dist/assets/{seeded-random-D0QPgfm6.js → seeded-random-DzZFJTfh.js} +1 -1
- package/dist/assets/{setup-renderer-ji8Qt-PP.js → setup-renderer-DF2zFw-E.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-owosRx07.js → source-object3d-authoring-adapter-RimvAMDG.js} +1 -1
- package/dist/assets/{source-persistence-backend-Djuk0m-7.js → source-persistence-backend-BRcy23H9.js} +1 -1
- package/dist/assets/stage-keyboard-JRZ1CNbL.js +1 -0
- package/dist/assets/stage-overlay-set-DHN11xPU.js +1 -0
- package/dist/assets/{stage-presence-markers-CQlXR9fX.js → stage-presence-markers-AQuGIbnu.js} +1 -1
- package/dist/assets/stage-transform-tools-B8u8n8gJ.js +1 -0
- package/dist/assets/{standard-viewport-dressing-e4mnLmI6.js → standard-viewport-dressing-NHKaiGVg.js} +3 -3
- package/dist/assets/{state-watch.action-Cv3W67Kr.js → state-watch.action-B_conRk5.js} +1 -1
- package/dist/assets/{state-watch.menu-Cuziz9RM.js → state-watch.menu-B6GNrnYH.js} +1 -1
- package/dist/assets/{state-watch.utility-B1zkFd_6.js → state-watch.utility-CxuUOPhl.js} +1 -1
- package/dist/assets/story-capture-DYXQlnlZ.js +1 -0
- package/dist/assets/{story-documents-Cjoy-ydN.js → story-documents-D_Tg0idt.js} +1 -1
- package/dist/assets/{story-documents.service-Csto-LsX.js → story-documents.service-DQh0SkkQ.js} +1 -1
- package/dist/assets/{story-documents.service-gVxcUtso.js → story-documents.service-ES8nxeNu.js} +1 -1
- package/dist/assets/story-media-presence-D4w-waFJ.js +1 -0
- package/dist/assets/{story-pixi-preview-uA6AevDw.js → story-pixi-preview-B6GFGUQG.js} +1 -1
- package/dist/assets/{story-presentation-DgAoj9Qt.js → story-presentation-6qhUDkv4.js} +1 -1
- package/dist/assets/{story-three-preview-CQYi1rZ_.js → story-three-preview-BgLSJIlN.js} +2 -2
- package/dist/assets/{studio-environment-DK0ke0m0.js → studio-environment-BGU84AOG.js} +1 -1
- package/dist/assets/{surface-state-DlUcJe84.js → surface-state-BtNEZzCd.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-92aOVqyZ.js → syntactic-prop-specs-B309atpv.js} +1 -1
- package/dist/assets/{team-playtest.service-CGBismiY.js → team-playtest.service-B8leDEE-.js} +1 -1
- package/dist/assets/{three-bdxPiUPb.js → three-BRZq2Px5.js} +1 -1
- package/dist/assets/{three-authoring-adapter-BuqO9MDt.js → three-authoring-adapter-DkfGlaNQ.js} +1 -1
- package/dist/assets/three-authoring.service-sOchR4o8.js +2 -0
- package/dist/assets/{three-ingest-runtime-CwRnwvb0.js → three-ingest-runtime-D9JoNRjk.js} +1 -1
- package/dist/assets/three-integration-D3zBmOoj.js +2 -0
- package/dist/assets/three-integration.service-CE8aNHob.js +1 -0
- package/dist/assets/{three-projection-core-BO23VKAP.js → three-projection-core-Dt5ARGlM.js} +1 -1
- package/dist/assets/{three-state-BhQOBgKC.js → three-state-3qPk0Sq8.js} +1 -1
- package/dist/assets/{three-story-capture.service-BAtrzxHq.js → three-story-capture.service-B3U2L4qG.js} +2 -2
- package/dist/assets/{three-story-model-D_bo7Gl-.js → three-story-model-C96x-E0V.js} +1 -1
- package/dist/assets/{three-viewport-presentation-CWanX03c.js → three-viewport-presentation-DGctcUkE.js} +5 -5
- package/dist/assets/transform-mode-request-C0cdwtJf.js +1 -0
- package/dist/assets/{transport-strip-CFLRAIQd.js → transport-strip-8OsPiJIm.js} +1 -1
- package/dist/assets/transport.header-D1Otpit3.js +1 -0
- package/dist/assets/{tuples-BKzzn3tK.js → tuples-CaBWqclR.js} +1 -1
- package/dist/assets/ui-board-document-BMTAhmJP.js +2 -0
- package/dist/assets/{user-data-DfBtZvxw.js → user-data-4Ls0MsfF.js} +1 -1
- package/dist/assets/{utility-view-state-CL4NJh3n.js → utility-view-state-gIzv2Oo_.js} +1 -1
- package/dist/assets/{viewport-door-CuJjGYTz.js → viewport-door-C4Fu0zS3.js} +1 -1
- package/dist/assets/{viewport-root-presentation-CkSAEMH-.js → viewport-root-presentation-DMMIH4rt.js} +1 -1
- package/dist/assets/{viewport-surface-status-D3t-0oLs.js → viewport-surface-status-CdI6sQko.js} +1 -1
- package/dist/assets/{webworkerAll-DCmB9rsA.js → webworkerAll-BINEvomm.js} +1 -1
- package/dist/assets/worker-Cu9kIzIf.js +2 -0
- package/dist/assets/{workspace-arrangement-C9uemwSK.js → workspace-arrangement-w-T2xUGF.js} +1 -1
- package/dist/assets/{world-documents-Dvn8e5I0.js → world-documents-feEUCgVE.js} +1 -1
- package/dist/assets/{world-root-stage-binding-BB7acZV_.js → world-root-stage-binding-BDb6wt_C.js} +1 -1
- package/dist/assets/{xstate-animation-binding-DctwT981.js → xstate-animation-binding-Bhz1Uhhw.js} +1 -1
- package/dist/assets/{xstate-animation-meta-s4Vc8Wu3.js → xstate-animation-meta-CvDlYgrt.js} +1 -1
- package/dist-node/cli.js +21 -18
- package/package.json +16 -16
- package/template/src/lib/reflections/ReflectionProbe.tsx +34 -5
- package/template/src/lib/reflections/index.ts +1 -0
- package/template/src/lib/reflections/probe-controller.ts +44 -3
- package/template/src/lib/reflections/reflection-probe-registry.ts +32 -7
- package/template/src/lib/reflections/volume-reflection-material.ts +638 -160
- package/dist/assets/CanvasSceneViewport-Z8OReqpB.js +0 -1
- package/dist/assets/EntityModelDocument-BltE1A7W.js +0 -1
- package/dist/assets/InspectorObjectPreview-BpttBw3o.js +0 -1
- package/dist/assets/ModelAssetDocument-BBDnXTQm.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-BHuuMZnS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-ByDDwGJD.js +0 -2
- package/dist/assets/StageHost-D1Sz5aud.js +0 -2
- package/dist/assets/autoplay.service-DncOrn-K.js +0 -1
- package/dist/assets/blender-emscripten-engine-DQljvfR7.js +0 -2
- package/dist/assets/blender-runtime-host-CcqXT39s.js +0 -4
- package/dist/assets/blender-runtime.document-DDW5jIJe.js +0 -12
- package/dist/assets/blender-wali-engine-CO-jG_ik.js +0 -2
- package/dist/assets/bridge.command-T93eURWq.js +0 -3
- package/dist/assets/build-player.document-DJQLP4xM.js +0 -1
- package/dist/assets/collaboration-presence-Q6zcL5v0.js +0 -1
- package/dist/assets/component-verbs.service-CJYq28Zw.js +0 -1
- package/dist/assets/configurations-BcYOQ7i-.js +0 -1
- package/dist/assets/deferred-ingest-play-DZiOEH9a.js +0 -2
- package/dist/assets/editor-api-CPh65aBN.js +0 -1
- package/dist/assets/fork-menu-DzoCyQvA.js +0 -1
- package/dist/assets/game-document.service-CxfiFnxt.js +0 -1
- package/dist/assets/game-network-BPTyOFqA.js +0 -22
- package/dist/assets/gameplay-export-CRnHCUBb.js +0 -1
- package/dist/assets/gameplay-replay-yPaMxi2o.js +0 -1
- package/dist/assets/generation-jobs-Cy1oE-Ff.js +0 -1
- package/dist/assets/ibl-override-material-CMo_a49U.js +0 -6
- package/dist/assets/ingest-siblings-2QHhcCgA.js +0 -1
- package/dist/assets/instances.command-BJ-I9vtW.js +0 -1
- package/dist/assets/layered-pick-BaxBYi7u.js +0 -1
- package/dist/assets/live-project-verbs-B7S-wGjC.js +0 -1
- package/dist/assets/material-rGFsBrD0.js +0 -1
- package/dist/assets/network-observer.service-CjeDB1Id.js +0 -1
- package/dist/assets/object3d-document-session-registry-CWaOPDYg.js +0 -2
- package/dist/assets/play.command-C9QyYFgv.js +0 -2
- package/dist/assets/r3f-design-session-Cyy1sDGH.js +0 -2
- package/dist/assets/stage-keyboard-G6HMStmP.js +0 -1
- package/dist/assets/stage-overlay-set-ChHqsFiR.js +0 -1
- package/dist/assets/stage-transform-tools-BM9u9Awe.js +0 -1
- package/dist/assets/story-capture-Drqhmo7i.js +0 -1
- package/dist/assets/story-media-presence-CYc2fP4y.js +0 -1
- package/dist/assets/three-authoring.service-CMym8IbB.js +0 -2
- package/dist/assets/three-integration-BHoulbny.js +0 -2
- package/dist/assets/three-integration.service-BlgF9hV3.js +0 -1
- package/dist/assets/transform-mode-request-Bg6T_rOC.js +0 -1
- package/dist/assets/transport.header-B3dK1KaC.js +0 -1
- package/dist/assets/ui-board-document-DMxgQ-9n.js +0 -2
- package/dist/assets/worker-CJIsrsP6.js +0 -2
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type ThreeElements, useFrame, useThree } from '@react-three/fiber';
|
|
2
|
-
import type { ReflectionProbeConfig } from '@volter/threejs-runtime/adapter/reflection-probe';
|
|
3
2
|
import { type ReactNode, useLayoutEffect, useRef, useState } from 'react';
|
|
4
3
|
import type * as THREE from 'three';
|
|
5
|
-
import { createReflectionProbeMark } from './probe-controller';
|
|
4
|
+
import { createReflectionProbeMark, type VolumeReflectionProbeConfig } from './probe-controller';
|
|
6
5
|
import {
|
|
7
6
|
acquireReflectionProbeRegistry,
|
|
8
7
|
type ReflectionProbeRegistryLease,
|
|
@@ -60,6 +59,15 @@ export type ReflectionProbeProps = Omit<ThreeElements['group'], 'children'> & {
|
|
|
60
59
|
readonly blendDistance?: number;
|
|
61
60
|
readonly priority?: number;
|
|
62
61
|
readonly intensity?: number;
|
|
62
|
+
/**
|
|
63
|
+
* The diffuse light the volume material takes from this probe: its capture
|
|
64
|
+
* (default), the constant `diffuseColor`, or none. See `ReflectionProbeDiffuse`.
|
|
65
|
+
*/
|
|
66
|
+
readonly diffuse?: 'capture' | 'color' | 'none';
|
|
67
|
+
/** Scales the probe's diffuse light in the volume material; defaults to `intensity`. */
|
|
68
|
+
readonly diffuseIntensity?: number;
|
|
69
|
+
/** Linear RGB of the `color` diffuse. */
|
|
70
|
+
readonly diffuseColor?: [number, number, number];
|
|
63
71
|
readonly parallaxProjection?: boolean;
|
|
64
72
|
/** Full local-space projection-box dimensions. */
|
|
65
73
|
readonly parallaxSize?: [number, number, number];
|
|
@@ -73,6 +81,19 @@ export type ReflectionProbeProps = Omit<ThreeElements['group'], 'children'> & {
|
|
|
73
81
|
readonly captureShadows?: boolean;
|
|
74
82
|
};
|
|
75
83
|
|
|
84
|
+
/** The diffuse fields a probe states, leaving out the ones it does not (they keep their defaults). */
|
|
85
|
+
function diffuseConfig(
|
|
86
|
+
diffuse: ReflectionProbeProps['diffuse'],
|
|
87
|
+
diffuseIntensity: number | undefined,
|
|
88
|
+
diffuseColor: [number, number, number] | undefined,
|
|
89
|
+
): Partial<VolumeReflectionProbeConfig> {
|
|
90
|
+
return {
|
|
91
|
+
...(diffuse === undefined ? {} : { diffuse }),
|
|
92
|
+
...(diffuseIntensity === undefined ? {} : { diffuseIntensity }),
|
|
93
|
+
...(diffuseColor === undefined ? {} : { diffuseColor }),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
76
97
|
export function ReflectionProbe({
|
|
77
98
|
name = 'Reflection Probe',
|
|
78
99
|
children,
|
|
@@ -82,6 +103,9 @@ export function ReflectionProbe({
|
|
|
82
103
|
blendDistance = 1,
|
|
83
104
|
priority = 0,
|
|
84
105
|
intensity = 1,
|
|
106
|
+
diffuse,
|
|
107
|
+
diffuseIntensity,
|
|
108
|
+
diffuseColor,
|
|
85
109
|
parallaxProjection = true,
|
|
86
110
|
parallaxSize = [10, 6, 10],
|
|
87
111
|
parallaxOffset = [0, 0, 0],
|
|
@@ -109,6 +133,7 @@ export function ReflectionProbe({
|
|
|
109
133
|
blendDistance,
|
|
110
134
|
priority,
|
|
111
135
|
intensity,
|
|
136
|
+
...diffuseConfig(diffuse, diffuseIntensity, diffuseColor),
|
|
112
137
|
parallaxProjection,
|
|
113
138
|
parallaxSize,
|
|
114
139
|
parallaxOffset,
|
|
@@ -121,13 +146,14 @@ export function ReflectionProbe({
|
|
|
121
146
|
captureShadows,
|
|
122
147
|
}),
|
|
123
148
|
);
|
|
124
|
-
const config:
|
|
149
|
+
const config: VolumeReflectionProbeConfig = {
|
|
125
150
|
shape,
|
|
126
151
|
size,
|
|
127
152
|
radius,
|
|
128
153
|
blendDistance,
|
|
129
154
|
priority,
|
|
130
155
|
intensity,
|
|
156
|
+
...diffuseConfig(diffuse, diffuseIntensity, diffuseColor),
|
|
131
157
|
parallaxProjection,
|
|
132
158
|
parallaxSize,
|
|
133
159
|
parallaxOffset,
|
|
@@ -149,6 +175,9 @@ export function ReflectionProbe({
|
|
|
149
175
|
blendDistance,
|
|
150
176
|
priority,
|
|
151
177
|
intensity,
|
|
178
|
+
diffuse,
|
|
179
|
+
diffuseIntensity,
|
|
180
|
+
diffuseColor,
|
|
152
181
|
parallaxProjection,
|
|
153
182
|
parallaxSize,
|
|
154
183
|
parallaxOffset,
|
|
@@ -170,8 +199,8 @@ export function ReflectionProbe({
|
|
|
170
199
|
unobserve.current = acquired.registry.observe((probes: readonly ReflectionProbeRuntime[]) => {
|
|
171
200
|
const self = probes.find((probe) => probe.node === object);
|
|
172
201
|
const published = self?.ready ? self.texture : null;
|
|
173
|
-
// Runs
|
|
174
|
-
// actually changes identity,
|
|
202
|
+
// Runs whenever the registry changes; React re-renders only when the
|
|
203
|
+
// published texture actually changes identity, once per capture at most.
|
|
175
204
|
setEnvMap((current) => (current === published ? current : published));
|
|
176
205
|
});
|
|
177
206
|
return () => {
|
|
@@ -3,6 +3,7 @@ export {
|
|
|
3
3
|
type ReflectionProbeProps,
|
|
4
4
|
type ReflectionProbePublication,
|
|
5
5
|
} from './ReflectionProbe';
|
|
6
|
+
export type { ReflectionProbeDiffuse, VolumeReflectionProbeConfig } from './probe-controller';
|
|
6
7
|
export {
|
|
7
8
|
acquireReflectionProbeRegistry,
|
|
8
9
|
createReflectionProbeRegistry,
|
|
@@ -4,17 +4,53 @@ import type {
|
|
|
4
4
|
ReflectionProbeSnapshot,
|
|
5
5
|
} from '@volter/threejs-runtime/adapter/reflection-probe';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* How a probe lights the diffuse term of the volume material that blends it,
|
|
9
|
+
* carried in its mark's config beside the format-neutral fields. Every field
|
|
10
|
+
* is optional; left out, a probe lights the diffuse from its capture, scaled
|
|
11
|
+
* by its `intensity`, as the reflected term is.
|
|
12
|
+
*/
|
|
13
|
+
export interface ReflectionProbeDiffuse {
|
|
14
|
+
/**
|
|
15
|
+
* Where the probe's diffuse light comes from: its `capture` (the default), the
|
|
16
|
+
* constant `color` below, or `none` — the probe lights no diffuse, and a
|
|
17
|
+
* fragment that only it covers keeps the environment's.
|
|
18
|
+
*/
|
|
19
|
+
readonly diffuse?: 'capture' | 'color' | 'none';
|
|
20
|
+
/** Scales the probe's diffuse light. Defaults to the probe's `intensity`. */
|
|
21
|
+
readonly diffuseIntensity?: number;
|
|
22
|
+
/** Linear RGB radiance of the `color` diffuse. */
|
|
23
|
+
readonly diffuseColor?: readonly [number, number, number];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A probe's config as the capability's own element states it. */
|
|
27
|
+
export type VolumeReflectionProbeConfig = ReflectionProbeConfig & ReflectionProbeDiffuse;
|
|
28
|
+
|
|
7
29
|
export interface MutableReflectionProbeMark extends ReflectionProbeMark {
|
|
8
30
|
updateConfig(config: ReflectionProbeConfig): void;
|
|
9
31
|
setCaptureStatus(snapshot: ReflectionProbeSnapshot): void;
|
|
10
32
|
}
|
|
11
33
|
|
|
12
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* The config as a capture sees it: everything but the diffuse fields, which
|
|
36
|
+
* only the volume material reads (from the probe's uniforms, not its capture).
|
|
37
|
+
*/
|
|
38
|
+
function captureSignature(config: ReflectionProbeConfig): string {
|
|
39
|
+
const { diffuse, diffuseIntensity, diffuseColor, ...captured } = config as VolumeReflectionProbeConfig;
|
|
40
|
+
return JSON.stringify(captured);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* One live projection of a component's JSX props and capture state. A config
|
|
45
|
+
* change that a capture sees queues a recapture (outside Manual); one that
|
|
46
|
+
* only changes the diffuse fields takes effect without one.
|
|
47
|
+
*/
|
|
13
48
|
export function createReflectionProbeMark(
|
|
14
49
|
initial: ReflectionProbeConfig,
|
|
15
50
|
): MutableReflectionProbeMark {
|
|
16
51
|
let config = initial;
|
|
17
52
|
let configSignature = JSON.stringify(initial);
|
|
53
|
+
let capturedSignature = captureSignature(initial);
|
|
18
54
|
let revision = 0;
|
|
19
55
|
let snapshot: ReflectionProbeSnapshot = {
|
|
20
56
|
status: initial.captureMode === 'manual' ? 'idle' : 'queued',
|
|
@@ -47,12 +83,17 @@ export function createReflectionProbeMark(
|
|
|
47
83
|
const signature = JSON.stringify(next);
|
|
48
84
|
if (signature === configSignature) return;
|
|
49
85
|
const previousMode = config.captureMode;
|
|
86
|
+
const nextCaptured = captureSignature(next);
|
|
87
|
+
const recapture = nextCaptured !== capturedSignature;
|
|
50
88
|
config = next;
|
|
51
89
|
configSignature = signature;
|
|
52
|
-
|
|
90
|
+
capturedSignature = nextCaptured;
|
|
91
|
+
// A diffuse-only change needs no capture: the registry sees the new config
|
|
92
|
+
// and the volume material rewrites its uniforms.
|
|
93
|
+
if (recapture && next.captureMode !== 'manual') {
|
|
53
94
|
revision += 1;
|
|
54
95
|
snapshot = { status: 'queued', lastCapturedAt: snapshot.lastCapturedAt };
|
|
55
|
-
} else if (previousMode !== 'manual' && snapshot.status !== 'ready') {
|
|
96
|
+
} else if (next.captureMode === 'manual' && previousMode !== 'manual' && snapshot.status !== 'ready') {
|
|
56
97
|
// Entering Manual never performs an implicit capture. A valid existing
|
|
57
98
|
// result remains valid; otherwise the explicit Recapture button is the
|
|
58
99
|
// only operation that advances the capture revision.
|
|
@@ -71,9 +71,17 @@ interface ProbeState extends ReflectionProbeRuntime {
|
|
|
71
71
|
ready: boolean;
|
|
72
72
|
capturedRevision: number;
|
|
73
73
|
readonly capturedTransform: Matrix4;
|
|
74
|
+
/** The node's world matrix and the mark's config as observers were last told them. */
|
|
75
|
+
readonly publishedTransform: Matrix4;
|
|
76
|
+
publishedConfig: ReflectionProbeMark['config'] | null;
|
|
74
77
|
}
|
|
75
78
|
|
|
76
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Called when an observer starts observing, and again whenever what it reads
|
|
81
|
+
* changes: a probe added or removed, a capture window opening or closing (and
|
|
82
|
+
* the result it published), a probe's node moved or its config changed. A
|
|
83
|
+
* frame in which nothing changed calls no observer.
|
|
84
|
+
*/
|
|
77
85
|
export type ReflectionProbeObserver = (
|
|
78
86
|
probes: readonly ReflectionProbeRuntime[],
|
|
79
87
|
capturing: boolean,
|
|
@@ -129,6 +137,8 @@ function makeProbe(node: Object3D, mark: ReflectionProbeMark): ProbeState {
|
|
|
129
137
|
parallaxOffset: new Vector3(),
|
|
130
138
|
captureOffset: new Vector3(),
|
|
131
139
|
capturedTransform: new Matrix4().makeScale(0, 0, 0),
|
|
140
|
+
publishedTransform: new Matrix4().makeScale(0, 0, 0),
|
|
141
|
+
publishedConfig: null,
|
|
132
142
|
filtered: null,
|
|
133
143
|
atlases: new Map(),
|
|
134
144
|
texture: null,
|
|
@@ -174,6 +184,10 @@ function releaseProbeResources(probe: ProbeState): void {
|
|
|
174
184
|
probe.ready = false;
|
|
175
185
|
}
|
|
176
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Bring the probe's volume up to date with its node and config; true when
|
|
189
|
+
* that changed what an observer reads since it was last told.
|
|
190
|
+
*/
|
|
177
191
|
function refreshProbe(probe: ProbeState): boolean {
|
|
178
192
|
const config = probe.mark.config;
|
|
179
193
|
const cubeSize = cubeSizeOf(probe.mark);
|
|
@@ -194,9 +208,15 @@ function refreshProbe(probe: ProbeState): boolean {
|
|
|
194
208
|
probe.parallaxExtents.fromArray(config.parallaxSize).multiplyScalar(0.5);
|
|
195
209
|
probe.parallaxOffset.fromArray(config.parallaxOffset);
|
|
196
210
|
probe.captureOffset.fromArray(config.captureOffset);
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
if (config.captureMode === 'on-change' && movedSinceCapture(probe)) probe.ready = false;
|
|
212
|
+
const changed = probe.publishedConfig !== config || !probe.publishedTransform.equals(probe.node.matrixWorld);
|
|
213
|
+
probe.publishedConfig = config;
|
|
214
|
+
probe.publishedTransform.copy(probe.node.matrixWorld);
|
|
215
|
+
return changed;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function movedSinceCapture(probe: ProbeState): boolean {
|
|
219
|
+
return !probe.capturedTransform.equals(probe.node.matrixWorld);
|
|
200
220
|
}
|
|
201
221
|
|
|
202
222
|
/** The cube target and camera, created here because only a capture needs them. */
|
|
@@ -300,7 +320,7 @@ export function createReflectionProbeRegistry(
|
|
|
300
320
|
for (let offset = 0; offset < probes.length; offset += 1) {
|
|
301
321
|
const index = (cursor + offset) % probes.length;
|
|
302
322
|
const probe = probes[index]!;
|
|
303
|
-
const moved =
|
|
323
|
+
const moved = movedSinceCapture(probe);
|
|
304
324
|
const mode = probe.mark.config.captureMode;
|
|
305
325
|
const due =
|
|
306
326
|
mode === 'realtime' ||
|
|
@@ -336,10 +356,15 @@ export function createReflectionProbeRegistry(
|
|
|
336
356
|
update(frameToken) {
|
|
337
357
|
if (disposed || frameToken === lastFrame || !canCaptureEnvironment(renderer)) return;
|
|
338
358
|
lastFrame = frameToken;
|
|
339
|
-
|
|
359
|
+
let changed = false;
|
|
360
|
+
for (const probe of probes) {
|
|
361
|
+
const ready = probe.ready;
|
|
362
|
+
if (refreshProbe(probe) || probe.ready !== ready) changed = true;
|
|
363
|
+
}
|
|
340
364
|
const due = nextCapture();
|
|
341
365
|
if (due) capture(due);
|
|
342
|
-
|
|
366
|
+
// A capture opened a window (and published a result): closing it tells every observer.
|
|
367
|
+
if (due || changed) notify(false);
|
|
343
368
|
},
|
|
344
369
|
dispose() {
|
|
345
370
|
if (disposed) return;
|