@volter/game-editor 0.5.82 → 0.5.84

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.
Files changed (332) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/catalog/entries/reflections.json +1 -1
  5. package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +34 -5
  6. package/catalog/project-source/src/lib/reflections/index.ts +1 -0
  7. package/catalog/project-source/src/lib/reflections/probe-controller.ts +44 -3
  8. package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +32 -7
  9. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +638 -160
  10. package/dist/.vite/manifest.json +2213 -2195
  11. package/dist/assets/{AssetBudgetPanel-Iip49rxI.js → AssetBudgetPanel-BZy2XeqE.js} +3 -3
  12. package/dist/assets/{AudioViewer-DmkOvskF.js → AudioViewer-DIuzLzET.js} +1 -1
  13. package/dist/assets/{CanvasBoardDocument-DCS8uzQo.js → CanvasBoardDocument-3ZxWTKes.js} +1 -1
  14. package/dist/assets/{CanvasSceneViewport-CfOuQiQ0.js → CanvasSceneViewport-BP7FC2z5.js} +1 -1
  15. package/dist/assets/{ColorInput-7CPpl8MI.js → ColorInput-Bm2EzmOy.js} +1 -1
  16. package/dist/assets/EntityModelDocument-Cy-Qproq.js +1 -0
  17. package/dist/assets/{EnvironmentAssetDocument-DlS6KFJu.js → EnvironmentAssetDocument-B8VmbxfT.js} +1 -1
  18. package/dist/assets/{GameplaySessionTimeline-C3zH6edi.js → GameplaySessionTimeline-CDcfr07j.js} +1 -1
  19. package/dist/assets/{ImageViewer-C0lQ6YO0.js → ImageViewer-BNFjkWbV.js} +1 -1
  20. package/dist/assets/InspectorObjectPreview-DZS_A4lG.js +1 -0
  21. package/dist/assets/{JsonAssetDocument-DjmH9CQH.js → JsonAssetDocument-BkdsklFn.js} +1 -1
  22. package/dist/assets/{LiveModuleDocument-Hiot8Q5L.js → LiveModuleDocument-BEDGzgpM.js} +1 -1
  23. package/dist/assets/{LutAssetDocument-6bBwNMOn.js → LutAssetDocument-RmvH4zzl.js} +1 -1
  24. package/dist/assets/ModelAssetDocument-BgkVc8nF.js +1 -0
  25. package/dist/assets/{NonThreeAuthoringBootstrap-DpieYAMC.js → NonThreeAuthoringBootstrap-CcXUHOp3.js} +1 -1
  26. package/dist/assets/{Object3DDocumentToolbar-BtZkDxKa.js → Object3DDocumentToolbar-DaqNoA9f.js} +1 -1
  27. package/dist/assets/Object3DDocumentViewport-DFMCzcLc.js +2 -0
  28. package/dist/assets/{Object3DPreview-DdrYVJUZ.js → Object3DPreview-Dr4GQgGl.js} +1 -1
  29. package/dist/assets/{OnlineAssetDetail-D06eTe3y.js → OnlineAssetDetail-BPAK7Ras.js} +1 -1
  30. package/dist/assets/{PlayBar-BbzjgLFJ.js → PlayBar--cmmDXMt.js} +1 -1
  31. package/dist/assets/{QuarksAssetDocument-wGHNt4ov.js → QuarksAssetDocument-DYr9l2tH.js} +1 -1
  32. package/dist/assets/{ReactCanvasControls-BL2tOUj6.js → ReactCanvasControls-CoK-IJcH.js} +1 -1
  33. package/dist/assets/{RootSelectionOverlay-C6Wu8nIs.js → RootSelectionOverlay-Jz5Ll7BT.js} +1 -1
  34. package/dist/assets/{ShaderAssetDocument-BDi8iNLA.js → ShaderAssetDocument-Fn1SuMaS.js} +3 -3
  35. package/dist/assets/{ShadowEditor-C3L0UWSH.js → ShadowEditor-IrEJWfde.js} +1 -1
  36. package/dist/assets/{SourceAssetViewer-D832bARo.js → SourceAssetViewer-C6gxbMdi.js} +1 -1
  37. package/dist/assets/StageHost-eySsTLUI.js +2 -0
  38. package/dist/assets/{StoryPreviewMount-CmOEFzZY.js → StoryPreviewMount-CkBS-oOC.js} +1 -1
  39. package/dist/assets/{ThreeBoardDocument-BtBMGtiQ.js → ThreeBoardDocument-DiQabLNJ.js} +2 -2
  40. package/dist/assets/{ThreeIsolationSceneContent-BEHNSEsi.js → ThreeIsolationSceneContent-_p4Y5QZ6.js} +1 -1
  41. package/dist/assets/{ToolObject3DPreview-76LMkfin.js → ToolObject3DPreview-CSADrilV.js} +1 -1
  42. package/dist/assets/{Toolbar-BEBQdxRz.js → Toolbar-DhQAiAOw.js} +1 -1
  43. package/dist/assets/{TransientHint-CzsdY8W6.js → TransientHint-B3roDMmv.js} +1 -1
  44. package/dist/assets/{VideoViewer-Ckrawyuq.js → VideoViewer-DARXMIes.js} +1 -1
  45. package/dist/assets/{ViewportShadingMenu-BofQt6_4.js → ViewportShadingMenu-DC5996me.js} +1 -1
  46. package/dist/assets/{active-ingest-D_ryI_R4.js → active-ingest-BQBCy_Hx.js} +3 -3
  47. package/dist/assets/{animation-clock-QjtJDIsR.js → animation-clock-DAhQxVz9.js} +1 -1
  48. package/dist/assets/{animation-mixers.service-BInUs1US.js → animation-mixers.service-cc5qCZnh.js} +1 -1
  49. package/dist/assets/{animation-timeline.utility-DUrfNSwn.js → animation-timeline.utility-DXa0g-qN.js} +1 -1
  50. package/dist/assets/{asset-budget-asset.menu-DVQEksFp.js → asset-budget-asset.menu-DjEcxL08.js} +1 -1
  51. package/dist/assets/{asset-budget.action-C-ENAa52.js → asset-budget.action-D7-3Scj7.js} +1 -1
  52. package/dist/assets/{asset-budget.document-Bb1PyL3H.js → asset-budget.document-Dmn7QkMR.js} +1 -1
  53. package/dist/assets/{asset-budget.menu-CPi2yjBA.js → asset-budget.menu-djdA3Q-S.js} +1 -1
  54. package/dist/assets/{asset-editor-persistence-Duoq7o22.js → asset-editor-persistence-Dcy1Joo-.js} +1 -1
  55. package/dist/assets/{asset-loaders-BftJ2m7-.js → asset-loaders-B0eV8Nk_.js} +1 -1
  56. package/dist/assets/{asset-preview-BS71mXsZ.js → asset-preview-CGO8kmg5.js} +1 -1
  57. package/dist/assets/{audio-unlock.service-C3ygvDjU.js → audio-unlock.service-Bgp8fUjH.js} +1 -1
  58. package/dist/assets/{audio.utility-DF55sgHW.js → audio.utility-DM2IZjJR.js} +1 -1
  59. package/dist/assets/autoplay.service-aGTnDCDQ.js +1 -0
  60. package/dist/assets/{babylon-authoring-adapter-CmeehOBt.js → babylon-authoring-adapter-CNYnKhpl.js} +1 -1
  61. package/dist/assets/{binding-resolver-DUz8C8Fs.js → binding-resolver-By6DQSMJ.js} +2 -2
  62. package/dist/assets/blender-emscripten-engine-3RrRUwov.js +2 -0
  63. package/dist/assets/{blender-node-editor.document-B8S2TVMM.js → blender-node-editor.document-DDxLnK24.js} +1 -1
  64. package/dist/assets/{blender-properties-tab-y-_BeZDx.js → blender-properties-tab-DoLvP4a6.js} +1 -1
  65. package/dist/assets/{blender-runtime-host-CUH6peXj.js → blender-runtime-host-pYPr56UP.js} +2 -2
  66. package/dist/assets/{blender-runtime-skin-B1tYITn2.js → blender-runtime-skin-DGw7Uk4l.js} +13 -13
  67. package/dist/assets/blender-runtime.document-Bvlzayok.js +13 -0
  68. package/dist/assets/blender-screenshot.menu-BSfC-1EL.js +1 -0
  69. package/dist/assets/{blender-timeline.document-CeCylyXB.js → blender-timeline.document-D0P1AfdK.js} +1 -1
  70. package/dist/assets/{blender-uv-editor.document-DEllMw3a.js → blender-uv-editor.document-DEb_AwLC.js} +1 -1
  71. package/dist/assets/{blender-version.status-CrT9NqK-.js → blender-version.status-LifaPI0C.js} +1 -1
  72. package/dist/assets/blender-wali-engine-DGwF1KiV.js +2 -0
  73. package/dist/assets/{blender.command-GIjMG1-m.js → blender.command-DDOcs1dZ.js} +1 -1
  74. package/dist/assets/{board-guides-B6TEPOPi.js → board-guides-CQWXbsSW.js} +1 -1
  75. package/dist/assets/bridge.command-CJCc-avL.js +3 -0
  76. package/dist/assets/{browserAll-k35XRFil.js → browserAll-_6V_eM5P.js} +1 -1
  77. package/dist/assets/{build-player.document-CHxj4P8q.js → build-player.document-Dz_Mq8Pd.js} +1 -1
  78. package/dist/assets/{build-profiles.document-CZCk1HYA.js → build-profiles.document-CLCc3EbW.js} +2 -2
  79. package/dist/assets/{build-progress.status-BNwBxP2a.js → build-progress.status-BfR8rtJ_.js} +1 -1
  80. package/dist/assets/{build-session-CW2UyYFF.js → build-session-BkZeQ_S3.js} +1 -1
  81. package/dist/assets/{build.action-EmCcMu47.js → build.action-SVlllu1R.js} +1 -1
  82. package/dist/assets/{build.command-CzEckGcR.js → build.command-D6c8WqIx.js} +1 -1
  83. package/dist/assets/{build.header-CsYLpZbh.js → build.header-B_QEABFH.js} +1 -1
  84. package/dist/assets/{build.menu-CaDkDQuy.js → build.menu-wIEk8uq4.js} +1 -1
  85. package/dist/assets/{build.service-BcKtbU0-.js → build.service-C24aQmEn.js} +1 -1
  86. package/dist/assets/{camera-BwWZUyKt.js → camera-AsAJwixA.js} +1 -1
  87. package/dist/assets/{camera-runtime.inspector-CJyi3zmp.js → camera-runtime.inspector-EWiln7HZ.js} +1 -1
  88. package/dist/assets/{canvas-design-mount-B_uwZkEU.js → canvas-design-mount-7wA1io5I.js} +4 -4
  89. package/dist/assets/{canvas-entry-runtime-DskaohHK.js → canvas-entry-runtime-DxHv6Yxk.js} +2 -2
  90. package/dist/assets/{canvas-preview-frames-BzLeTumX.js → canvas-preview-frames-BJNr8ArE.js} +1 -1
  91. package/dist/assets/{canvas-story-capture.service-C80CsS8r.js → canvas-story-capture.service-DaHquc4I.js} +2 -2
  92. package/dist/assets/{capability-coverage-wd6bAhv3.js → capability-coverage-Fjv84QQN.js} +3 -3
  93. package/dist/assets/collaboration-presence-BYi9wylK.js +1 -0
  94. package/dist/assets/{collider-Dw2iWV3F.js → collider-BVans4YU.js} +1 -1
  95. package/dist/assets/{component-board.service-XAxyLCnM.js → component-board.service-6eXUhS3p.js} +2 -2
  96. package/dist/assets/component-board.service-C1VJog-q.js +2 -0
  97. package/dist/assets/{component-board.service-CH99sgj0.js → component-board.service-cNKaXoxN.js} +2 -2
  98. package/dist/assets/{component-contracts.service-DerT0BP-.js → component-contracts.service-B9e64gRX.js} +1 -1
  99. package/dist/assets/{component-instance-root-Cw_-ajBX.js → component-instance-root-Cw2jcbxa.js} +1 -1
  100. package/dist/assets/{component-verbs.command-BHK9M2Rk.js → component-verbs.command-CKmDlrFh.js} +1 -1
  101. package/dist/assets/component-verbs.service-C6MrL6R1.js +1 -0
  102. package/dist/assets/{config-1rCvm02z.js → config-CXA3itWR.js} +3 -3
  103. package/dist/assets/{configurations-CRTYw0r9.js → configurations-fjyekkEX.js} +1 -1
  104. package/dist/assets/{connection.status-D4fjnH24.js → connection.status-DmthQqVz.js} +1 -1
  105. package/dist/assets/{constraints.inspector-BgnafOLf.js → constraints.inspector-CvJlw3rw.js} +1 -1
  106. package/dist/assets/{content-bounds-D5pXeHJN.js → content-bounds-vfJMc-IO.js} +1 -1
  107. package/dist/assets/{contract-system-adapters-rVGdworX.js → contract-system-adapters-BL22QlsE.js} +1 -1
  108. package/dist/assets/{coverage.service-BNme5Agb.js → coverage.service-BO-eNB08.js} +2 -2
  109. package/dist/assets/{create-runtime-CcuQTSfy.js → create-runtime-DJ21Fa_i.js} +2 -2
  110. package/dist/assets/{curve-DorFv33R.js → curve-CiO2-ZoW.js} +1 -1
  111. package/dist/assets/{data-asset-CAE35Emh.js → data-asset-ByLXUC98.js} +1 -1
  112. package/dist/assets/{data-ref-DXqRnZsJ.js → data-ref-DpW1ZAc3.js} +1 -1
  113. package/dist/assets/{debug-bridge-DdCJSEni.js → debug-bridge-Bjh7HoG_.js} +1 -1
  114. package/dist/assets/{debug-registry-xQJcVubm.js → debug-registry-Bty6AiHN.js} +1 -1
  115. package/dist/assets/{deferred-ingest-play-CEnsC3uN.js → deferred-ingest-play-BDtHDAut.js} +2 -2
  116. package/dist/assets/{design-time-canvas-mount-CPRrCPFA.js → design-time-canvas-mount-CpNAFajF.js} +2 -2
  117. package/dist/assets/{design-time-layers-hmGqBp06.js → design-time-layers-BjbCzOaH.js} +1 -1
  118. package/dist/assets/{design-time-mount.service-CEmJjRIJ.js → design-time-mount.service-D2nvXCrm.js} +2 -2
  119. package/dist/assets/{design-time-mount.service-CLL-1Za4.js → design-time-mount.service-x4-8taot.js} +2 -2
  120. package/dist/assets/{design-time-react-mount-DmXi3GBy.js → design-time-react-mount-DlBtYE3L.js} +1 -1
  121. package/dist/assets/{document-preview-three-B4j_zNef.js → document-preview-three-CSHYA1BH.js} +1 -1
  122. package/dist/assets/{dom-authoring-adapter-BklRbjZB.js → dom-authoring-adapter-BRkZp4sE.js} +1 -1
  123. package/dist/assets/{draco3d-CFWI1XDT.js → draco3d-az59P8mF.js} +1 -1
  124. package/dist/assets/{edit-mode-audio.service-SUzv0nHs.js → edit-mode-audio.service--N5HyK0y.js} +1 -1
  125. package/dist/assets/{edit-mode-authoring-CSt3zzmS.js → edit-mode-authoring-BeMAYXYR.js} +1 -1
  126. package/dist/assets/{edit-mode-networking.service-D6UohrCr.js → edit-mode-networking.service-ByUOzpRh.js} +1 -1
  127. package/dist/assets/editor-api-dfe-lCMZ.js +1 -0
  128. package/dist/assets/{editor-layers-CjeYrUlm.js → editor-layers-Djcn6Scw.js} +1 -1
  129. package/dist/assets/{editor-shell-store-DckLm6m8.js → editor-shell-store-Br2L1Fw1.js} +1 -1
  130. package/dist/assets/{entity-object-V13bGmay.js → entity-object-BiOrbQZM.js} +1 -1
  131. package/dist/assets/{extend-BQeRA-aV.js → extend-BMnknpN1.js} +1 -1
  132. package/dist/assets/fork-menu-BOn71mbn.js +1 -0
  133. package/dist/assets/{frame-debugger-store-DDxWlDPK.js → frame-debugger-store-DVchJN-z.js} +1 -1
  134. package/dist/assets/{game-contract-seams-DrYyE5PX.js → game-contract-seams-gIFojMW2.js} +1 -1
  135. package/dist/assets/{game-css-scope-transform-D5hQWaci.js → game-css-scope-transform-Dab-AkD5.js} +1 -1
  136. package/dist/assets/{game-document.service-cJ1yKc2V.js → game-document.service-CFLg-vRz.js} +1 -1
  137. package/dist/assets/{game-eval.command-CKo-W17_.js → game-eval.command-Xch06afq.js} +1 -1
  138. package/dist/assets/{game-module-access-DuptGLGx.js → game-module-access-BDliSO9v.js} +1 -1
  139. package/dist/assets/{game-network-CAH_Jsh6.js → game-network-CTdS02CN.js} +3 -3
  140. package/dist/assets/{gameplay-export-B-JE4uSD.js → gameplay-export-Ct4wopUb.js} +1 -1
  141. package/dist/assets/gameplay-replay-xk1wnQ88.js +1 -0
  142. package/dist/assets/{gameplay.command-D4cY3nOq.js → gameplay.command-W3Sq7zn-.js} +1 -1
  143. package/dist/assets/{generation-jobs-CcCrhKLM.js → generation-jobs-BTP2zuZi.js} +1 -1
  144. package/dist/assets/{generation.service-CQwmLAOQ.js → generation.service-CHPmGb7B.js} +1 -1
  145. package/dist/assets/{generations-qfhCRH8C.js → generations-C7ppzxDW.js} +1 -1
  146. package/dist/assets/{generations.status-CcbR2OfF.js → generations.status-Cxb0-UxC.js} +1 -1
  147. package/dist/assets/{hierarchy-marks-B1jSqxSv.js → hierarchy-marks-3Iq1RFIh.js} +1 -1
  148. package/dist/assets/{hosted-asset-materialization-BZf-8JA1.js → hosted-asset-materialization-BK8ZfMnr.js} +2 -2
  149. package/dist/assets/ibl-override-material-C09OAhCc.js +6 -0
  150. package/dist/assets/{index-V4J7xfRg.js → index-BXH2Jsun.js} +294 -294
  151. package/dist/assets/index-CAf6mYXW.js +1 -0
  152. package/dist/assets/{index-aREcGExk.js → index-CP5WJuE9.js} +1 -1
  153. package/dist/assets/{index-D_ViOFCz.js → index-D9H8FkR3.js} +2 -2
  154. package/dist/assets/{index-DrEVdQvN.js → index-DAuA0xMo.js} +1 -1
  155. package/dist/assets/{index-CHa43s2p.js → index-DkTiDXNY.js} +1 -1
  156. package/dist/assets/{index-D-RMHSzb.js → index-Kznwz4yS.js} +1 -1
  157. package/dist/assets/{index-DXtfej3G.js → index-Yw9pOoLh.js} +1 -1
  158. package/dist/assets/{index-Cj_b0Ygc.js → index-k1tDFKMg.js} +1 -1
  159. package/dist/assets/{inference-diagnostics-DoZQ1mpg.js → inference-diagnostics-CxWL3UhK.js} +1 -1
  160. package/dist/assets/{ingest-boot-viewport-DWdOtGGE.js → ingest-boot-viewport-BeYyFYst.js} +1 -1
  161. package/dist/assets/{ingest-siblings-DyvasVDH.js → ingest-siblings-DGjWGyZo.js} +1 -1
  162. package/dist/assets/{ingest-source-persistence-CQOJeGhj.js → ingest-source-persistence-BFkLdeMy.js} +1 -1
  163. package/dist/assets/{ingest.service-CqIcydem.js → ingest.service-adZJNY83.js} +1 -1
  164. package/dist/assets/{inspect-DiSjB-N1.js → inspect-Dah00n9O.js} +1 -1
  165. package/dist/assets/instances.command-neq95jyN.js +1 -0
  166. package/dist/assets/{json-history-resource-CH2nzMZh.js → json-history-resource-DYW614tc.js} +1 -1
  167. package/dist/assets/layered-pick-Cn98HSnj.js +1 -0
  168. package/dist/assets/{light-CxiGIJma.js → light-nb6H9zi_.js} +1 -1
  169. package/dist/assets/{live-project-verbs-CnknlUlT.js → live-project-verbs-CyWrvvzK.js} +1 -1
  170. package/dist/assets/{machine.document-D7jMrzXt.js → machine.document-BlWIYspE.js} +1 -1
  171. package/dist/assets/{machines.finder-Dor3O0uf.js → machines.finder-D-nBx1QJ.js} +1 -1
  172. package/dist/assets/material-CcQQ-mP8.js +1 -0
  173. package/dist/assets/{material-factory-BN3Lax5C.js → material-factory-CKO4sgCS.js} +1 -1
  174. package/dist/assets/{mesh-Cj-CYroI.js → mesh-CGB8fhbT.js} +1 -1
  175. package/dist/assets/{model-asset-sections.service-mC4WJFTA.js → model-asset-sections.service-oZwOlxI-.js} +1 -1
  176. package/dist/assets/{model-inspection-8o57YSZW.js → model-inspection-B5p-uq9q.js} +1 -1
  177. package/dist/assets/{model-thumbnail-chePRlH7.js → model-thumbnail-Cgyfafqg.js} +1 -1
  178. package/dist/assets/{models.finder-CKkT5ZdU.js → models.finder-v4ShdgaO.js} +1 -1
  179. package/dist/assets/{module-mode-BMiMhHI3.js → module-mode-BBCbx1-D.js} +2 -2
  180. package/dist/assets/{mount-canvas-ingest-root-B1swVIUJ.js → mount-canvas-ingest-root-9CLvzAsA.js} +2 -2
  181. package/dist/assets/{mount-dom-ingest-root-B8hO5mht.js → mount-dom-ingest-root-CZA1Dw6t.js} +2 -2
  182. package/dist/assets/{mount-ingest-root-Cbnh-mSw.js → mount-ingest-root-hudyfrT7.js} +2 -2
  183. package/dist/assets/{mount-manifest-B7oL1Abg.js → mount-manifest-C_z-xK97.js} +1 -1
  184. package/dist/assets/{mount-three-ingest-root-BdUJx6ix.js → mount-three-ingest-root-DWoCP70F.js} +1 -1
  185. package/dist/assets/{mounted-authoring-C47L5H5t.js → mounted-authoring-DMWjUr2Z.js} +1 -1
  186. package/dist/assets/{mounted-story-viewport-source-CyEK_vaq.js → mounted-story-viewport-source-Iq6tisms.js} +1 -1
  187. package/dist/assets/{native-debug-module-JJOFtIVz.js → native-debug-module-BO5dlpfD.js} +1 -1
  188. package/dist/assets/{navigation-ROJM2w84.js → navigation-BzH049Ad.js} +1 -1
  189. package/dist/assets/{navmesh.menu-DjefqtkI.js → navmesh.menu-CicRFavg.js} +1 -1
  190. package/dist/assets/{navmesh.service-BPqjEQiq.js → navmesh.service-B0zUTaL0.js} +1 -1
  191. package/dist/assets/network-observer.service-CvC30rDc.js +1 -0
  192. package/dist/assets/{network.utility-6Y5u53n8.js → network.utility-DTpK-Ri9.js} +1 -1
  193. package/dist/assets/{object3d-document-session-registry-DNCOGA3i.js → object3d-document-session-registry-CTeivmwK.js} +2 -2
  194. package/dist/assets/{oid-transform-DQzN_Gl_.js → oid-transform-xxKy1722.js} +1 -1
  195. package/dist/assets/{particles-DGdUmqOr.js → particles-CeOU09tg.js} +1 -1
  196. package/dist/assets/{pixi-authoring-adapter-BRktdcIz.js → pixi-authoring-adapter-qwgLB4nb.js} +1 -1
  197. package/dist/assets/{pixi-live-write-target-Dg0mdLaa.js → pixi-live-write-target-B-E2O-WC.js} +1 -1
  198. package/dist/assets/{play.command-4IDAqR5W.js → play.command-CAhUsYcp.js} +2 -2
  199. package/dist/assets/{presentation-8m-RDKIS.js → presentation-BKcWD0nx.js} +1 -1
  200. package/dist/assets/{product-t6tauO7R.js → product-C8OFGza7.js} +1 -1
  201. package/dist/assets/{profiler.action-CXA4IkQB.js → profiler.action-CyjXGHbx.js} +1 -1
  202. package/dist/assets/{profiler.menu-BgIBv4-I.js → profiler.menu-DXHAGF3Z.js} +1 -1
  203. package/dist/assets/{profiler.utility-BYoRbfIK.js → profiler.utility-Qx-aaTdo.js} +1 -1
  204. package/dist/assets/{project-authoring-session-DkekCxNv.js → project-authoring-session-B0YSloNS.js} +2 -2
  205. package/dist/assets/{properties-bone-constraints.inspector-DXpiCtf9.js → properties-bone-constraints.inspector-C-dwjglB.js} +1 -1
  206. package/dist/assets/{properties-bone.inspector-wIDsP4c5.js → properties-bone.inspector-CeZIE99V.js} +1 -1
  207. package/dist/assets/{properties-collection.inspector-5SRPbqfM.js → properties-collection.inspector-DiSBJpTu.js} +1 -1
  208. package/dist/assets/{properties-constraints.inspector-DIjKz692.js → properties-constraints.inspector-2DxnBAIf.js} +1 -1
  209. package/dist/assets/{properties-data.inspector-DE6i8biZ.js → properties-data.inspector-DvSzTW7_.js} +1 -1
  210. package/dist/assets/{properties-material.inspector-Cu1UCPY4.js → properties-material.inspector-XPNSk9iW.js} +1 -1
  211. package/dist/assets/{properties-modifiers.inspector-DsQzA638.js → properties-modifiers.inspector-8pjl5OY9.js} +1 -1
  212. package/dist/assets/{properties-object.inspector-C57X0GJq.js → properties-object.inspector-a30WyA7Q.js} +1 -1
  213. package/dist/assets/{properties-output.inspector-DzrcFuRM.js → properties-output.inspector-B9JochaR.js} +1 -1
  214. package/dist/assets/{properties-particles.inspector-DGqSnelN.js → properties-particles.inspector-D6rRhjyA.js} +1 -1
  215. package/dist/assets/{properties-physics.inspector-DIjhtiLe.js → properties-physics.inspector-BcJFxv6L.js} +1 -1
  216. package/dist/assets/{properties-render.inspector-CX0orwn9.js → properties-render.inspector-DHPbElDL.js} +1 -1
  217. package/dist/assets/{properties-scene.inspector-DaHNL_sq.js → properties-scene.inspector-ZJueIZwx.js} +1 -1
  218. package/dist/assets/{properties-texture.inspector-B5hmxPRy.js → properties-texture.inspector-CvUhb-u8.js} +1 -1
  219. package/dist/assets/{properties-view-layer.inspector-C7hdJgei.js → properties-view-layer.inspector-CaaGgMEq.js} +1 -1
  220. package/dist/assets/{properties-world.inspector-EWTC6jNw.js → properties-world.inspector-10GD8Fpy.js} +1 -1
  221. package/dist/assets/{r3f-design-session-CXlGV9hp.js → r3f-design-session-CVxU3s62.js} +2 -2
  222. package/dist/assets/{r3f-physics-binding-DZSIB0d_.js → r3f-physics-binding-jUszsaB2.js} +1 -1
  223. package/dist/assets/{r3f-source-authoring-adapter-GR97EmII.js → r3f-source-authoring-adapter-Cmxf0Hvz.js} +1 -1
  224. package/dist/assets/{react-canvas-navigation-L_mOnybL.js → react-canvas-navigation-B-5CNIty.js} +1 -1
  225. package/dist/assets/{react-inspector.service-B4P3UnSY.js → react-inspector.service-wpEmCNFv.js} +1 -1
  226. package/dist/assets/{react-story-board-CT1_3sk_.js → react-story-board-CMghMNcN.js} +1 -1
  227. package/dist/assets/{react-three-rapier.esm-DyMNYoA_.js → react-three-rapier.esm-LvsEG944.js} +1 -1
  228. package/dist/assets/{react-world-authoring-adapter-OR1SW2jI.js → react-world-authoring-adapter-qVYWC2NO.js} +1 -1
  229. package/dist/assets/{realm-services-u0mnjXU9.js → realm-services-DvRrMpdg.js} +1 -1
  230. package/dist/assets/{reflection-probe-capture.inspector-CTNlSaGW.js → reflection-probe-capture.inspector-vo8ShT8w.js} +1 -1
  231. package/dist/assets/{registry-wqakYaDW.js → registry-CC-Vb6qS.js} +1 -1
  232. package/dist/assets/{relative-import-specifier-DXWVQf0o.js → relative-import-specifier-CT_YQo7I.js} +1 -1
  233. package/dist/assets/{render-env-CN09NtDf.js → render-env-YEmoFtX3.js} +1 -1
  234. package/dist/assets/{render-features-HCEupUJ6.js → render-features-B7OI7f1i.js} +1 -1
  235. package/dist/assets/{render-settings-Clt6d05o.js → render-settings-Mh_ddGef.js} +1 -1
  236. package/dist/assets/{resolve-three-CLzKVMx2.js → resolve-three-0A-COMTr.js} +3 -3
  237. package/dist/assets/{root-seam-contract-D2uQHWF9.js → root-seam-contract-SVcCHdYl.js} +1 -1
  238. package/dist/assets/{run-selection-AyelFc9T.js → run-selection-HF9_7IwN.js} +1 -1
  239. package/dist/assets/{scene-capture-WbPcLfJl.js → scene-capture-BvNIvwYD.js} +1 -1
  240. package/dist/assets/{scene-document.service-4U6rDhCp.js → scene-document.service-Ck2pGl4I.js} +2 -2
  241. package/dist/assets/{scene-framing-DzSL2Cld.js → scene-framing-BgT3O3rp.js} +1 -1
  242. package/dist/assets/{seeded-random-tpdJjdqy.js → seeded-random-BVxDLbEH.js} +1 -1
  243. package/dist/assets/{setup-renderer-B5vZmCyu.js → setup-renderer-BCSUurTm.js} +1 -1
  244. package/dist/assets/{source-object3d-authoring-adapter-BQnQ3Qzg.js → source-object3d-authoring-adapter-CShEQbUV.js} +1 -1
  245. package/dist/assets/{source-persistence-backend-uyd6NiWD.js → source-persistence-backend-DOkAuppW.js} +1 -1
  246. package/dist/assets/{stage-keyboard-B2yrk2zu.js → stage-keyboard-BJEP_zFM.js} +1 -1
  247. package/dist/assets/{stage-overlay-set-Cqtz3s06.js → stage-overlay-set-U3RYk04i.js} +1 -1
  248. package/dist/assets/{stage-presence-markers-BgLs0Aj5.js → stage-presence-markers-C9j53BR-.js} +1 -1
  249. package/dist/assets/stage-transform-tools-D9eCTssP.js +1 -0
  250. package/dist/assets/{standard-viewport-dressing-uhv_3JvQ.js → standard-viewport-dressing-CCVrTojE.js} +3 -3
  251. package/dist/assets/{state-watch.action-BJ08HgcO.js → state-watch.action-fGEIwj5w.js} +1 -1
  252. package/dist/assets/{state-watch.menu-rAULwijr.js → state-watch.menu-Bvi0XsP3.js} +1 -1
  253. package/dist/assets/{state-watch.utility-eEbQcj8t.js → state-watch.utility-BNhj8Nnx.js} +1 -1
  254. package/dist/assets/story-capture-D0GNxNYo.js +1 -0
  255. package/dist/assets/{story-documents-Cm4jCkW5.js → story-documents-BF53RkDW.js} +2 -2
  256. package/dist/assets/{story-documents.service-BDvQCslK.js → story-documents.service-cTbf9p1e.js} +1 -1
  257. package/dist/assets/{story-documents.service-Cgtg6rXn.js → story-documents.service-mW6CBXLc.js} +1 -1
  258. package/dist/assets/story-media-presence-DsyVqDVF.js +1 -0
  259. package/dist/assets/{story-pixi-preview-D62Q_vIW.js → story-pixi-preview-DpjZcKtE.js} +1 -1
  260. package/dist/assets/{story-presentation-CofUdEU7.js → story-presentation-CNkoc9rw.js} +1 -1
  261. package/dist/assets/{story-three-preview-B9O1wapP.js → story-three-preview--fB-XR3A.js} +2 -2
  262. package/dist/assets/{studio-environment-BIhqrtFc.js → studio-environment-TibfpTB9.js} +1 -1
  263. package/dist/assets/{surface-state-DrM3wsrr.js → surface-state-Bt3iAf79.js} +1 -1
  264. package/dist/assets/{syntactic-prop-specs-BGz0N7Dg.js → syntactic-prop-specs-CN0U9uqz.js} +1 -1
  265. package/dist/assets/{team-playtest.service-CiE8UJAe.js → team-playtest.service-DiziYIhq.js} +1 -1
  266. package/dist/assets/{three-BQfhEwUz.js → three-DfbLdx-e.js} +1 -1
  267. package/dist/assets/{three-authoring-adapter-COBwREQO.js → three-authoring-adapter-CtjX4v6r.js} +1 -1
  268. package/dist/assets/three-authoring.service-BruYh1LE.js +2 -0
  269. package/dist/assets/{three-ingest-runtime-BnRF_nJN.js → three-ingest-runtime-V4l_ZpBp.js} +1 -1
  270. package/dist/assets/three-integration-BxG_D6RK.js +2 -0
  271. package/dist/assets/three-integration.service-CBSTLULk.js +1 -0
  272. package/dist/assets/{three-projection-core-PQm-CO61.js → three-projection-core-CyqdOvLG.js} +1 -1
  273. package/dist/assets/{three-state-C7khRIQE.js → three-state-B9ax7cgA.js} +1 -1
  274. package/dist/assets/{three-story-capture.service-B0oiGIfp.js → three-story-capture.service-CUVsgZa5.js} +2 -2
  275. package/dist/assets/three-story-model-NEuWKJe1.js +1 -0
  276. package/dist/assets/{three-viewport-presentation-B_tBudM-.js → three-viewport-presentation-Da0lYO0_.js} +1 -1
  277. package/dist/assets/{transform-mode-request-DWM6BdRA.js → transform-mode-request-Bfse_kvX.js} +1 -1
  278. package/dist/assets/{transport-strip-vgXGDgkI.js → transport-strip-DYbGjuX-.js} +1 -1
  279. package/dist/assets/transport.header-BglFgDzu.js +1 -0
  280. package/dist/assets/{tuples-BnYrlQqS.js → tuples-CMTm7T5T.js} +1 -1
  281. package/dist/assets/ui-board-document-GaFlpf81.js +2 -0
  282. package/dist/assets/{user-data-CifDDvSr.js → user-data-CYeyy9Su.js} +1 -1
  283. package/dist/assets/{utility-view-state-BPl8Asup.js → utility-view-state-Ye00iOCB.js} +1 -1
  284. package/dist/assets/{viewport-door-BCXEYmon.js → viewport-door-CCXNhxOW.js} +1 -1
  285. package/dist/assets/{viewport-root-presentation-DJLpUuf0.js → viewport-root-presentation-52V6g9Ae.js} +1 -1
  286. package/dist/assets/{viewport-surface-status-jwLhIK_M.js → viewport-surface-status-BtHfBssH.js} +1 -1
  287. package/dist/assets/{webworkerAll-P6jePa6X.js → webworkerAll-D7_8g3e0.js} +1 -1
  288. package/dist/assets/worker-BRY0I3XJ.js +2 -0
  289. package/dist/assets/{workspace-arrangement-B_OcbQbj.js → workspace-arrangement-D8CXsifv.js} +1 -1
  290. package/dist/assets/{world-documents-Bx3j867R.js → world-documents-C4AdTIHw.js} +1 -1
  291. package/dist/assets/{world-root-stage-binding-LEhjWDkn.js → world-root-stage-binding-CvEyzq0c.js} +1 -1
  292. package/dist/assets/{xstate-animation-binding-Dionc_fC.js → xstate-animation-binding-CmmOqqwV.js} +1 -1
  293. package/dist/assets/{xstate-animation-meta-XEmD_qc_.js → xstate-animation-meta-BSBJhOAT.js} +1 -1
  294. package/dist-node/cli.js +21 -18
  295. package/package.json +16 -16
  296. package/template/src/lib/reflections/ReflectionProbe.tsx +34 -5
  297. package/template/src/lib/reflections/index.ts +1 -0
  298. package/template/src/lib/reflections/probe-controller.ts +44 -3
  299. package/template/src/lib/reflections/reflection-probe-registry.ts +32 -7
  300. package/template/src/lib/reflections/volume-reflection-material.ts +638 -160
  301. package/dist/assets/EntityModelDocument-CplmAib0.js +0 -1
  302. package/dist/assets/InspectorObjectPreview-Bjc1Tn-I.js +0 -1
  303. package/dist/assets/ModelAssetDocument-G6ajiV51.js +0 -1
  304. package/dist/assets/Object3DDocumentViewport-BhH8afDi.js +0 -2
  305. package/dist/assets/StageHost-Bor1eHEO.js +0 -2
  306. package/dist/assets/autoplay.service-DaonKf7O.js +0 -1
  307. package/dist/assets/blender-emscripten-engine-DQljvfR7.js +0 -2
  308. package/dist/assets/blender-runtime.document-DnSl0twI.js +0 -12
  309. package/dist/assets/blender-wali-engine-CO-jG_ik.js +0 -2
  310. package/dist/assets/bridge.command-D6qTcgje.js +0 -3
  311. package/dist/assets/collaboration-presence-DcPhahtF.js +0 -1
  312. package/dist/assets/component-board.service-Cd1c9oSN.js +0 -2
  313. package/dist/assets/component-verbs.service-DsxhVcvk.js +0 -1
  314. package/dist/assets/editor-api-WeHVNlEo.js +0 -1
  315. package/dist/assets/fork-menu-Bthg9viY.js +0 -1
  316. package/dist/assets/gameplay-replay-WyopKGyB.js +0 -1
  317. package/dist/assets/ibl-override-material-CMo_a49U.js +0 -6
  318. package/dist/assets/index-yXSK_qPW.js +0 -1
  319. package/dist/assets/instances.command-COw2QpbN.js +0 -1
  320. package/dist/assets/layered-pick-BUr1U8lU.js +0 -1
  321. package/dist/assets/material-B6cH1Oqw.js +0 -1
  322. package/dist/assets/network-observer.service-GFzXuBMb.js +0 -1
  323. package/dist/assets/stage-transform-tools-BHcz53td.js +0 -1
  324. package/dist/assets/story-capture-B8wfSf5s.js +0 -1
  325. package/dist/assets/story-media-presence-SGlp_afL.js +0 -1
  326. package/dist/assets/three-authoring.service-C0azvoq8.js +0 -2
  327. package/dist/assets/three-integration-DeWYFf1x.js +0 -2
  328. package/dist/assets/three-integration.service-CoWCBTmg.js +0 -1
  329. package/dist/assets/three-story-model-D7g2pqfJ.js +0 -1
  330. package/dist/assets/transport.header-CfVHXjrT.js +0 -1
  331. package/dist/assets/ui-board-document-B_-K9luq.js +0 -2
  332. package/dist/assets/worker-CJIsrsP6.js +0 -2
package/BUNDLED_NOTICES CHANGED
@@ -2106,9 +2106,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2106
2106
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2107
2107
  SOFTWARE.
2108
2108
 
2109
- @volter/blender-engine@0.1.20
2109
+ @volter/blender-engine@0.1.22
2110
2110
  Declared license: GPL-3.0-or-later
2111
- Source: the unmodified npm package @volter/blender-engine@0.1.20, from https://github.com/volter-ai/editor.git
2111
+ Source: the unmodified npm package @volter/blender-engine@0.1.22, from https://github.com/volter-ai/editor.git
2112
2112
 
2113
2113
  --- packages/blender-engine/LICENSE ---
2114
2114
 
@@ -2838,9 +2838,9 @@ Public License instead of this License. But first, please read
2838
2838
  <https://www.gnu.org/licenses/why-not-lgpl.html>.
2839
2839
 
2840
2840
 
2841
- @volter/editor-blender@0.1.22
2841
+ @volter/editor-blender@0.1.24
2842
2842
  Declared license: AGPL-3.0-only AND GPL-3.0-or-later
2843
- Source: the unmodified npm package @volter/editor-blender@0.1.22, from https://github.com/volter-ai/editor.git
2843
+ Source: the unmodified npm package @volter/editor-blender@0.1.24, from https://github.com/volter-ai/editor.git
2844
2844
 
2845
2845
  --- packages/editor-blender/LICENSE ---
2846
2846
 
@@ -4279,9 +4279,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
4279
4279
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
4280
4280
  SOFTWARE.
4281
4281
 
4282
- @volter/editor-core@0.5.82
4282
+ @volter/editor-core@0.5.84
4283
4283
  Declared license: AGPL-3.0-only AND Apache-2.0
4284
- Source: the unmodified npm package @volter/editor-core@0.5.82, from https://github.com/volter-ai/editor.git
4284
+ Source: the unmodified npm package @volter/editor-core@0.5.84, from https://github.com/volter-ai/editor.git
4285
4285
 
4286
4286
  --- packages/editor-core/LICENSE ---
4287
4287
 
@@ -5187,9 +5187,9 @@ server/support/ modules transferred from the SDK package of volter-ai/volter-eng
5187
5187
  Their source paths and hashes are recorded in provenance/editor-server.json.
5188
5188
 
5189
5189
 
5190
- @volter/editor-game@0.5.82
5190
+ @volter/editor-game@0.5.84
5191
5191
  Declared license: AGPL-3.0-only
5192
- Source: the unmodified npm package @volter/editor-game@0.5.82, from https://github.com/volter-ai/editor.git
5192
+ Source: the unmodified npm package @volter/editor-game@0.5.84, from https://github.com/volter-ai/editor.git
5193
5193
 
5194
5194
  --- packages/editor-game/LICENSE ---
5195
5195
 
@@ -5883,9 +5883,9 @@ package of volter-ai/volter-engine, and retains that license. It re-exports the
5883
5883
  Apache-2.0 tool contract of @volter/editor-sdk.
5884
5884
 
5885
5885
 
5886
- @volter/editor-project@0.5.82
5886
+ @volter/editor-project@0.5.84
5887
5887
  Declared license: Apache-2.0
5888
- Source: the unmodified npm package @volter/editor-project@0.5.82, from https://github.com/volter-ai/editor.git
5888
+ Source: the unmodified npm package @volter/editor-project@0.5.84, from https://github.com/volter-ai/editor.git
5889
5889
 
5890
5890
  --- packages/editor-project/LICENSE ---
5891
5891
 
@@ -6093,9 +6093,9 @@ Source: the unmodified npm package @volter/editor-project@0.5.82, from https://g
6093
6093
  limitations under the License.
6094
6094
 
6095
6095
 
6096
- @volter/editor-react@0.5.82
6096
+ @volter/editor-react@0.5.84
6097
6097
  Declared license: AGPL-3.0-only
6098
- Source: the unmodified npm package @volter/editor-react@0.5.82, from https://github.com/volter-ai/editor.git
6098
+ Source: the unmodified npm package @volter/editor-react@0.5.84, from https://github.com/volter-ai/editor.git
6099
6099
 
6100
6100
  --- packages/editor-react/LICENSE ---
6101
6101
 
@@ -6770,9 +6770,9 @@ The files in this package were imported from volter-ai/volter-engine at commit
6770
6770
  09c2749ce. LICENSE contains the AGPL-3.0-only license they retain.
6771
6771
 
6772
6772
 
6773
- @volter/editor-sdk@0.5.82
6773
+ @volter/editor-sdk@0.5.84
6774
6774
  Declared license: Apache-2.0
6775
- Source: the unmodified npm package @volter/editor-sdk@0.5.82, from https://github.com/volter-ai/editor.git
6775
+ Source: the unmodified npm package @volter/editor-sdk@0.5.84, from https://github.com/volter-ai/editor.git
6776
6776
 
6777
6777
  --- packages/editor-sdk/LICENSE ---
6778
6778
 
@@ -6993,9 +6993,9 @@ The project output-root policy is Apache-2.0, transferred from the original
6993
6993
  SDK; its exact source is recorded in provenance/editor-server.json.
6994
6994
 
6995
6995
 
6996
- @volter/editor-threejs@0.5.82
6996
+ @volter/editor-threejs@0.5.84
6997
6997
  Declared license: AGPL-3.0-only AND Apache-2.0
6998
- Source: the unmodified npm package @volter/editor-threejs@0.5.82, from https://github.com/volter-ai/editor.git
6998
+ Source: the unmodified npm package @volter/editor-threejs@0.5.84, from https://github.com/volter-ai/editor.git
6999
6999
 
7000
7000
  --- packages/editor-threejs/LICENSE ---
7001
7001
 
@@ -7886,9 +7886,9 @@ Source revisions and original file hashes are recorded in the repository's
7886
7886
  provenance/blender-integration.json and provenance/editor-host.json.
7887
7887
 
7888
7888
 
7889
- @volter/editor-xstate@0.5.82
7889
+ @volter/editor-xstate@0.5.84
7890
7890
  Declared license: AGPL-3.0-only
7891
- Source: the unmodified npm package @volter/editor-xstate@0.5.82, from https://github.com/volter-ai/editor.git
7891
+ Source: the unmodified npm package @volter/editor-xstate@0.5.84, from https://github.com/volter-ai/editor.git
7892
7892
 
7893
7893
  --- packages/editor-xstate/LICENSE ---
7894
7894
 
@@ -8563,9 +8563,9 @@ Copyright 2026 Volter AI, Inc.
8563
8563
  LICENSE contains the AGPL-3.0-only license this package is distributed under.
8564
8564
 
8565
8565
 
8566
- @volter/game-runtime@0.5.82
8566
+ @volter/game-runtime@0.5.84
8567
8567
  Declared license: Apache-2.0
8568
- Source: the unmodified npm package @volter/game-runtime@0.5.82, from https://github.com/volter-ai/editor.git
8568
+ Source: the unmodified npm package @volter/game-runtime@0.5.84, from https://github.com/volter-ai/editor.git
8569
8569
 
8570
8570
  --- packages/game-runtime/LICENSE ---
8571
8571
 
@@ -8783,9 +8783,9 @@ Apache-2.0 @volter/game-runtime package. They retain that license; LICENSE
8783
8783
  contains its text.
8784
8784
 
8785
8785
 
8786
- @volter/threejs-runtime@0.5.82
8786
+ @volter/threejs-runtime@0.5.84
8787
8787
  Declared license: Apache-2.0
8788
- Source: the unmodified npm package @volter/threejs-runtime@0.5.82, from https://github.com/volter-ai/editor.git
8788
+ Source: the unmodified npm package @volter/threejs-runtime@0.5.84, from https://github.com/volter-ai/editor.git
8789
8789
 
8790
8790
  --- packages/threejs-runtime/LICENSE ---
8791
8791
 
@@ -4,8 +4,8 @@
4
4
  "id": "blender",
5
5
  "packageJson": {
6
6
  "dependencies": {
7
- "@volter/editor-blender": "0.1.22",
8
- "@volter/blender-engine": "0.1.20"
7
+ "@volter/editor-blender": "0.1.24",
8
+ "@volter/blender-engine": "0.1.22"
9
9
  }
10
10
  },
11
11
  "requires": [
@@ -15,8 +15,8 @@
15
15
  "id": "music",
16
16
  "packageJson": {
17
17
  "dependencies": {
18
- "@volter/dawproject": "0.5.82",
19
- "@volter/editor-dawproject": "0.5.82"
18
+ "@volter/dawproject": "0.5.84",
19
+ "@volter/editor-dawproject": "0.5.84"
20
20
  },
21
21
  "volterTools": [
22
22
  "./src/tools/music-render.tool.ts"
@@ -23,5 +23,5 @@
23
23
  "requires": [],
24
24
  "skills": [],
25
25
  "title": "Reflection probes",
26
- "version": "0.2.2"
26
+ "version": "0.2.5"
27
27
  }
@@ -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: ReflectionProbeConfig = {
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 every update; React re-renders only when the published texture
174
- // actually changes identity, which is once per capture at most.
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
- /** One live projection of a component's JSX props and capture state. */
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
- if (next.captureMode !== 'manual') {
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
- /** Called every update, and again the moment a capture window opens/closes. */
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
- const moved = !probe.capturedTransform.equals(probe.node.matrixWorld);
198
- if (moved && config.captureMode === 'on-change') probe.ready = false;
199
- return moved;
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 = refreshProbe(probe);
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
- for (const probe of probes) refreshProbe(probe);
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
- notify(false);
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;