@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.3

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 (335) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +46 -46
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +326 -28
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-babylon-rendering.d.ts +8 -7
  26. package/dist/playable-babylon-rendering.d.ts.map +1 -1
  27. package/dist/playable-babylon-rendering.js +77 -32
  28. package/dist/playable-babylon-rendering.js.map +1 -1
  29. package/dist/playable-local-editor-host.d.ts +4 -0
  30. package/dist/playable-local-editor-host.d.ts.map +1 -1
  31. package/dist/playable-local-editor-host.js +27 -0
  32. package/dist/playable-local-editor-host.js.map +1 -1
  33. package/dist/playable-product-projection-preview.d.ts +2 -0
  34. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  35. package/dist/playable-product-projection-preview.js +7 -4
  36. package/dist/playable-product-projection-preview.js.map +1 -1
  37. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  38. package/dist/playable-product-scene-capabilities.js +9 -3
  39. package/dist/playable-product-scene-capabilities.js.map +1 -1
  40. package/dist/playable-sdk.d.ts +1 -1
  41. package/dist/playable-sdk.d.ts.map +1 -1
  42. package/dist/playable-sdk.js +1 -1
  43. package/dist/playable-sdk.js.map +1 -1
  44. package/dist/playable-standard-project.d.ts +0 -1
  45. package/dist/playable-standard-project.d.ts.map +1 -1
  46. package/dist/playable-standard-project.js +17 -5
  47. package/dist/playable-standard-project.js.map +1 -1
  48. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
  49. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
  50. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
  51. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
  52. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
  53. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
  54. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
  55. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
  56. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
  57. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
  58. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
  59. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
  60. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
  61. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
  62. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
  63. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
  64. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
  65. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
  66. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
  67. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
  68. package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
  69. package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
  70. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  71. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  72. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  73. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  74. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  75. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  76. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  77. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  78. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  79. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  80. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  81. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  82. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  83. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  84. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  85. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  86. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  87. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  88. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  89. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  90. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  91. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  92. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  93. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  94. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  124. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  125. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  126. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  127. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  128. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  129. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  130. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  131. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  132. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  133. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  134. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  135. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  137. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  138. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  139. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  141. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  142. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  143. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  144. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  145. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  146. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  147. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  148. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  149. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  157. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  158. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  159. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  161. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  162. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  163. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  165. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  166. package/node_modules/@fps-games/editor-core/package.json +6 -6
  167. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  196. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  197. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
  199. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  200. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  201. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  203. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  204. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  205. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  206. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  207. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  208. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  209. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  210. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  211. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  212. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  213. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  214. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  215. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  216. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  217. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  218. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  219. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  220. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
  221. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  222. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
  223. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  252. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  253. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  254. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  255. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  256. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  257. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  258. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  259. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  260. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  261. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  262. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
  263. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
  264. package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
  265. package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
  266. package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
  267. package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
  268. package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
  269. package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
  270. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
  271. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
  272. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
  273. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
  274. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  275. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  276. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  277. package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
  278. package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
  279. package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
  280. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
  281. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
  282. package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
  283. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  284. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  285. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  286. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  287. package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
  288. package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
  289. package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
  290. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
  291. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
  292. package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
  293. package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
  294. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
  295. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
  296. package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
  297. package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
  298. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
  299. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
  300. package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
  301. package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
  302. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  303. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  304. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  305. package/node_modules/@fps-games/plugin-assets/package.json +32 -8
  306. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  307. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  308. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  309. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  310. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  311. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  312. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  313. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  314. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  315. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  316. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  317. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  318. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  319. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  320. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  321. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  322. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  323. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  324. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  325. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  326. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  327. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  328. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  329. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  330. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  331. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  332. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  333. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  334. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  335. package/package.json +24 -22
@@ -1 +1 @@
1
- {"version":3,"file":"playable-babylon-rendering.js","sourceRoot":"","sources":["../src/playable-babylon-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n applyEditorSceneRenderingProfileAction,\n applyEditorSceneRenderingProfilePatch,\n collectEditorSceneRenderingAlphaIndexMigrationTargetIds,\n createEditorSceneBlobShadowPreviewSettings,\n createEditorScenePlanarShadowPreviewSettings,\n createEditorSceneRenderingPanelState,\n createEditorSceneStaticShadowArtifactDraftStore,\n createEditorSceneStaticShadowArtifactDiagnostic,\n createEditorSceneStaticProjectedShadowPreviewSettings,\n normalizeEditorSceneRenderingProfile,\n resolveEditorSceneRenderingAlphaIndexPresetValueMigration,\n type EditorSceneBlobShadowPreviewSettingsInput,\n type EditorScenePlanarShadowPreviewSettingsInput,\n type EditorSceneResolvedShadowMode,\n type EditorSceneRenderingPanelLanguage,\n type EditorSceneRenderingGroupId,\n type EditorSceneRenderingPanelState,\n type EditorSceneRenderingPanelStateInput,\n type EditorSceneRenderingProfile,\n type EditorSceneRenderingProfileActionInput,\n type EditorSceneRenderingStatusTone,\n type EditorSceneRenderingTextureAsset,\n type EditorSceneStaticShadowArtifactDiagnostic,\n type EditorSceneStaticShadowBakeLifecycleState,\n type EditorSceneStaticShadowBakeStats,\n type EditorSceneStaticProjectedShadowPreviewSettingsInput,\n} from '@fps-games/editor-playable-sdk';\nimport {\n createShadowMapExperimentConfigSnapshot,\n createShadowMapExperimentPlanSnapshot,\n type ShadowMapExperimentConfig,\n type ShadowMapExperimentPlan,\n} from '@fps-games/playable-rendering/runtime';\nimport {\n createBabylonDefaultPostProcessPipelineController,\n createBabylonEnvironmentTextureController,\n createBlobShadowSystem,\n createPlanarShadowSystem,\n createStaticProjectedShadowBaker,\n createStaticProjectedShadowArtifactSystem,\n createStaticProjectedShadowBakeHashes,\n createStaticProjectedShadowProfileHash,\n resolveBabylonDefaultPostProcessVolumeStack,\n type BabylonDefaultPostProcessPipelineController,\n type BabylonDefaultPostProcessProfile,\n type BabylonDefaultPostProcessResolveResult,\n type BabylonDefaultPostProcessResolveInput,\n type BabylonEnvironmentTextureController,\n type BabylonEnvironmentTextureProfile,\n type BlobShadowOptions,\n type BlobShadowSystem,\n type PlanarShadowOptions,\n type PlanarShadowSystem,\n type StaticProjectedShadowOptions,\n type StaticProjectedShadowArtifact,\n type StaticProjectedShadowArtifactHashInput,\n type StaticProjectedShadowBakeProgress,\n type StaticProjectedShadowArtifactSystem,\n type StaticProjectedShadowBakerAtlasEncoder,\n type StaticProjectedShadowBakerMaskPixelReader,\n type StaticProjectedShadowBakerSdfTileProcessor,\n} from '@fps-games/babylon-renderer';\nimport type { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';\nimport type { Scene } from '@babylonjs/core/scene';\nimport type {\n BabylonEditorProjection,\n BabylonEditorShadowPreviewOptions,\n} from '@fps-games/editor-babylon';\nimport type {\n PlayableLocalEditorRenderingCapability,\n PlayableLocalEditorPatchResult,\n PlayableLocalEditorRenderingPropertyChangeResult,\n} from './playable-local-editor-host.js';\nimport { createStaticProjectedShadowCpuWorkerProcessor } from './static-shadow-cpu-worker.js';\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type PlayableBabylonRenderingStatusTone = EditorSceneRenderingStatusTone;\n\nexport interface PlayableBabylonRenderingDocumentInput<TDocument> {\n document: TDocument;\n}\n\nexport interface PlayableBabylonRenderingContext<TDocument> {\n document: TDocument;\n config: unknown;\n profile: EditorSceneRenderingProfile;\n}\n\nexport interface PlayableBabylonRenderingSceneContext {\n scene?: unknown;\n projection?: unknown;\n renderingAction?: PlayableBabylonRenderingActionProgress | null;\n}\n\nexport interface PlayableBabylonRenderingActionProgress {\n actionId?: string;\n label?: string;\n status?: string;\n statusTone?: EditorSceneRenderingStatusTone;\n statusDetails?: string;\n value?: number;\n indeterminate?: boolean;\n details?: Record<string, unknown>;\n}\n\nexport interface PlayableBabylonRenderingSetConfigInput<TDocument> {\n document: TDocument;\n config: Record<string, unknown>;\n profile: EditorSceneRenderingProfile;\n changedPaths: readonly string[];\n change?: {\n path: string;\n value: unknown;\n };\n action?: EditorSceneRenderingProfileActionInput;\n}\n\nexport interface PlayableBabylonRenderingSetConfigResult<TPatch = unknown> {\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableBabylonRenderingStaticShadowArtifactInput<TDocument> {\n document: TDocument;\n}\n\nexport interface PlayableBabylonRenderingSetStaticShadowArtifactInput<TDocument>\n extends PlayableBabylonRenderingStaticShadowArtifactInput<TDocument> {\n artifact: StaticProjectedShadowArtifact;\n profile: EditorSceneRenderingProfile;\n}\n\nexport type PlayableBabylonRenderingValueResolver<TDocument, TValue> =\n | TValue\n | ((context: PlayableBabylonRenderingContext<TDocument>) => TValue);\n\nexport type PlayableBabylonStaticProjectedShadowPreviewInput =\n EditorSceneStaticProjectedShadowPreviewSettingsInput & {\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n };\n\nexport interface PlayableBabylonRenderingShadowPreviewOptions<TDocument> {\n enabled?: PlayableBabylonRenderingValueResolver<TDocument, boolean | undefined>;\n directionalLightNodeId?: PlayableBabylonRenderingValueResolver<TDocument, string | null | undefined>;\n blob?: PlayableBabylonRenderingValueResolver<TDocument, EditorSceneBlobShadowPreviewSettingsInput | undefined>;\n staticProjected?: PlayableBabylonRenderingValueResolver<TDocument, PlayableBabylonStaticProjectedShadowPreviewInput | undefined>;\n planar?: PlayableBabylonRenderingValueResolver<TDocument, EditorScenePlanarShadowPreviewSettingsInput | undefined>;\n shadowMapExperiment?: PlayableBabylonRenderingValueResolver<TDocument, ShadowMapExperimentPlan | null | undefined>;\n}\n\nexport interface PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch = unknown> {\n getConfig(input: PlayableBabylonRenderingDocumentInput<TDocument>): unknown;\n setConfig(input: PlayableBabylonRenderingSetConfigInput<TDocument>): MaybePromise<void | PlayableBabylonRenderingSetConfigResult<TPatch>>;\n resetConfig?(input: PlayableBabylonRenderingDocumentInput<TDocument>): MaybePromise<void>;\n isDirty?(input: PlayableBabylonRenderingDocumentInput<TDocument>): boolean;\n getPanelState?(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelStateInput;\n getTextureAssets?(input: PlayableBabylonRenderingDocumentInput<TDocument>): readonly EditorSceneRenderingTextureAsset[];\n getLanguage?(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelLanguage;\n getStaticShadowArtifact?(\n input: PlayableBabylonRenderingStaticShadowArtifactInput<TDocument>,\n ): StaticProjectedShadowArtifact | null | undefined;\n setStaticShadowArtifact?(\n input: PlayableBabylonRenderingSetStaticShadowArtifactInput<TDocument>,\n ): MaybePromise<void>;\n readStaticShadowMaskTexturePixels?: StaticProjectedShadowBakerMaskPixelReader;\n processStaticShadowSdfTile?: StaticProjectedShadowBakerSdfTileProcessor;\n encodeStaticShadowAtlasTexture?: StaticProjectedShadowBakerAtlasEncoder;\n getPostProcessResolveInput?(\n context: PlayableBabylonRenderingContext<TDocument>,\n ): BabylonDefaultPostProcessResolveInput | undefined;\n getShadowMapExperimentConfig?(): unknown | null;\n getShadowMapExperimentPlan?(document: TDocument): unknown | null;\n createShadowMapExperimentProfilesPatch?(input: {\n document: TDocument;\n qualityProfile?: string | null;\n behaviorProfile?: string | null;\n }): PlayableLocalEditorPatchResult<TPatch> | null;\n shadowPreview?: false | PlayableBabylonRenderingShadowPreviewOptions<TDocument>;\n}\n\nexport interface PlayableBabylonRenderingAlphaIndexMigrationPatchInput {\n targetIds: string[];\n renderingGroupId: EditorSceneRenderingGroupId;\n fromAlphaIndex: number;\n toAlphaIndex: number;\n}\n\nexport interface PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch = unknown> {\n getConfig(): unknown;\n setConfig(config: Record<string, unknown>): void;\n resetConfig(): void;\n isConfigDirty(): boolean;\n getPanelState(): EditorSceneRenderingPanelStateInput;\n getTextureAssets?(input: PlayableBabylonRenderingDocumentInput<TDocument>): readonly EditorSceneRenderingTextureAsset[];\n getLanguage(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelLanguage;\n initialStaticShadowArtifact?: unknown;\n directionalLightNodeId: string;\n isDirectionalLightActive(input: PlayableBabylonRenderingDocumentInput<TDocument>): boolean;\n getAlphaIndexMigrationGameObjects(document: TDocument): readonly unknown[];\n createAlphaIndexMigrationPatch(input: PlayableBabylonRenderingAlphaIndexMigrationPatchInput): TPatch;\n}\n\nexport interface PlayableBabylonRenderingCapabilityFacade<TDocument, TPatch = unknown> {\n capability: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n resetDraft(): void;\n hasDraftChanges(): boolean;\n getActiveStaticShadowArtifact(): StaticProjectedShadowArtifact | null;\n setActiveStaticShadowArtifact(value: unknown): void;\n markActiveStaticShadowArtifactSaved(value?: unknown): void;\n isStaticShadowArtifactDirty(): boolean;\n}\n\nexport interface PlayableBabylonWorldRendering {\n environment: BabylonEnvironmentTextureProfile;\n shadowPreview: BabylonEditorShadowPreviewOptions | null;\n postProcess: BabylonDefaultPostProcessProfile;\n}\n\nexport type PlayableBabylonRenderingEnvironmentTextureDiagnosticStatus =\n | 'none'\n | 'resolved-asset'\n | 'resolved-url'\n | 'missing-asset'\n | 'unsupported-asset'\n | 'unsupported-url';\n\nexport interface PlayableBabylonRenderingEnvironmentTextureDiagnostic {\n status: PlayableBabylonRenderingEnvironmentTextureDiagnosticStatus;\n textureAssetId: string | null;\n textureUrl: string | null;\n resolvedUrl: string | null;\n asset: EditorSceneRenderingTextureAsset | null;\n reason: string | null;\n}\n\nexport interface PlayableBabylonRenderingDiagnostics {\n config: unknown;\n profile: EditorSceneRenderingProfile;\n worldRendering: PlayableBabylonWorldRendering;\n environmentTexture: PlayableBabylonRenderingEnvironmentTextureDiagnostic;\n staticShadowArtifact: EditorSceneStaticShadowArtifactDiagnostic;\n postProcess: BabylonDefaultPostProcessResolveResult;\n shadowPreview: BabylonEditorShadowPreviewOptions | null;\n}\n\nexport interface PlayableBabylonRuntimeRenderingControllers {\n environment: BabylonEnvironmentTextureController;\n postProcess: BabylonDefaultPostProcessPipelineController;\n getWorldRendering(): PlayableBabylonWorldRendering | null;\n setWorldRendering(rendering: PlayableBabylonWorldRendering | null | undefined): void;\n dispose(): void;\n}\n\nexport interface PlayableBabylonRuntimeRenderingControllerOptions {\n scene: unknown;\n cameras: unknown[];\n initialRendering?: PlayableBabylonWorldRendering | null;\n postProcess?: {\n name?: string;\n };\n}\n\nexport interface PlayableBabylonPlanarShadowPolicyInput extends EditorScenePlanarShadowPreviewSettingsInput {\n directionalLightNodeId?: string | null;\n includeProfileShadowMeshes?: boolean;\n}\n\nexport interface PlayableBabylonResolvedPlanarShadowPolicy {\n planarInput: EditorScenePlanarShadowPreviewSettingsInput;\n planarOptions: PlanarShadowOptions;\n editorShadowPreview: BabylonEditorShadowPreviewOptions;\n}\n\nexport interface PlayableBabylonBlobShadowPolicyInput extends EditorSceneBlobShadowPreviewSettingsInput {\n includeProfileShadowMeshes?: boolean;\n}\n\nexport interface PlayableBabylonStaticProjectedShadowPolicyInput extends EditorSceneStaticProjectedShadowPreviewSettingsInput {\n includeProfileShadowMeshes?: boolean;\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n}\n\nexport interface PlayableBabylonPlanarShadowPolicy {\n resolve(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlayableBabylonResolvedPlanarShadowPolicy;\n createEditorShadowPreview(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): BabylonEditorShadowPreviewOptions;\n createRuntimePlanarOptions(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlanarShadowOptions;\n createRuntimePlanarShadowSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlanarShadowSystem;\n}\n\nconst PLAYABLE_BABYLON_RENDERING_ALLOWED_SECTIONS = new Set([\n 'rendering-groups',\n 'environment',\n 'post-process',\n 'shadows',\n]);\n\nconst PLAYABLE_BABYLON_ENVIRONMENT_TEXTURE_URL_PATTERN = /\\.(env|hdr|dds|ktx|ktx2)(?:[?#].*)?$/i;\n\nexport function createPlayableBabylonRenderingCapability<TDocument, TPatch = unknown>(\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): PlayableLocalEditorRenderingCapability<TDocument, TPatch> {\n return {\n getWorldRendering(document) {\n return createPlayableBabylonWorldRendering(document, options);\n },\n getRenderingPanelState(document, sceneContext) {\n return createPlayableBabylonRenderingPanelState(document, options, sceneContext);\n },\n async onRenderingAction(input) {\n return handlePlayableBabylonRenderingAction(input, options);\n },\n async onRenderingPropertyChange(input) {\n return handlePlayableBabylonRenderingPropertyChange(input, options);\n },\n getShadowMapExperimentConfig: options.getShadowMapExperimentConfig,\n getShadowMapExperimentPlan: options.getShadowMapExperimentPlan,\n createShadowMapExperimentProfilesPatch: options.createShadowMapExperimentProfilesPatch,\n };\n}\n\nexport function createPlayableBabylonRenderingCapabilityFacade<TDocument, TPatch = unknown>(\n options: PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch>,\n): PlayableBabylonRenderingCapabilityFacade<TDocument, TPatch> {\n const staticShadowArtifactDraft = createEditorSceneStaticShadowArtifactDraftStore(options.initialStaticShadowArtifact);\n return {\n capability: createPlayableBabylonRenderingCapability<TDocument, TPatch>({\n getConfig: () => options.getConfig(),\n setConfig: input => {\n const previousProfile = normalizeEditorSceneRenderingProfile(options.getConfig());\n options.setConfig(input.config);\n const documentPatch = createPlayableBabylonRenderingAlphaIndexMigrationPatch(input, previousProfile, options);\n return documentPatch ? { documentPatch } : undefined;\n },\n resetConfig: () => options.resetConfig(),\n isDirty: () => options.isConfigDirty() || staticShadowArtifactDraft.isDirty(),\n getPanelState: () => options.getPanelState(),\n getTextureAssets: options.getTextureAssets,\n getLanguage: options.getLanguage,\n getStaticShadowArtifact: () => staticShadowArtifactDraft.get() as StaticProjectedShadowArtifact | null,\n setStaticShadowArtifact: ({ artifact }) => { staticShadowArtifactDraft.set(artifact); },\n shadowPreview: {\n directionalLightNodeId: options.directionalLightNodeId,\n enabled: options.isDirectionalLightActive,\n },\n }),\n resetDraft() {\n options.resetConfig();\n staticShadowArtifactDraft.reset();\n },\n hasDraftChanges: () => options.isConfigDirty() || staticShadowArtifactDraft.isDirty(),\n getActiveStaticShadowArtifact: () => staticShadowArtifactDraft.get() as StaticProjectedShadowArtifact | null,\n setActiveStaticShadowArtifact: value => { staticShadowArtifactDraft.set(value); },\n markActiveStaticShadowArtifactSaved: (value = staticShadowArtifactDraft.get()) => {\n staticShadowArtifactDraft.markSaved(value);\n },\n isStaticShadowArtifactDirty: () => staticShadowArtifactDraft.isDirty(),\n };\n}\n\nexport function createPlayableBabylonRenderingAlphaIndexMigrationPatch<TDocument, TPatch>(\n input: PlayableBabylonRenderingSetConfigInput<TDocument>,\n previousProfile: EditorSceneRenderingProfile,\n options: Pick<\n PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch>,\n 'createAlphaIndexMigrationPatch' | 'getAlphaIndexMigrationGameObjects'\n >,\n): PlayableLocalEditorPatchResult<TPatch> | null {\n if (input.action) return null;\n const migration = resolveEditorSceneRenderingAlphaIndexPresetValueMigration({\n changedPaths: input.changedPaths,\n previousProfile,\n change: input.change,\n });\n if (!migration) return null;\n const targetIds = collectEditorSceneRenderingAlphaIndexMigrationTargetIds(\n options.getAlphaIndexMigrationGameObjects(input.document) as Parameters<\n typeof collectEditorSceneRenderingAlphaIndexMigrationTargetIds\n >[0],\n {\n renderingGroupId: migration.renderingGroupId,\n fromAlphaIndex: migration.fromAlphaIndex,\n },\n );\n if (targetIds.length === 0) return null;\n return {\n label: `Migrate rendering alphaIndex ${migration.fromAlphaIndex} to ${migration.toAlphaIndex}`,\n patch: options.createAlphaIndexMigrationPatch({ targetIds, ...migration }),\n changedIds: targetIds,\n reprojectIds: targetIds,\n };\n}\n\nexport function createPlayableBabylonWorldRendering<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): PlayableBabylonWorldRendering {\n const context = createPlayableBabylonRenderingContext(document, options);\n const postProcess = resolvePlayableBabylonRenderingPostProcess(context, options);\n return {\n environment: createPlayableBabylonEnvironmentTextureProfile(\n context.profile,\n options.getTextureAssets?.({ document }) ?? [],\n ),\n postProcess: postProcess.profile,\n shadowPreview: createPlayableBabylonShadowPreviewOptions(context, options, sceneContext),\n };\n}\n\nexport function createPlayableBabylonRenderingDiagnostics<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): PlayableBabylonRenderingDiagnostics {\n const context = createPlayableBabylonRenderingContext(document, options);\n const textureAssets = options.getTextureAssets?.({ document }) ?? [];\n const postProcess = resolvePlayableBabylonRenderingPostProcess(context, options);\n const shadowPreview = createPlayableBabylonShadowPreviewOptions(context, options, sceneContext);\n return {\n config: context.config,\n profile: context.profile,\n worldRendering: {\n environment: createPlayableBabylonEnvironmentTextureProfile(context.profile, textureAssets),\n postProcess: postProcess.profile,\n shadowPreview,\n },\n environmentTexture: resolvePlayableBabylonRenderingEnvironmentTextureDiagnostic(\n context.profile.environment.texture,\n textureAssets,\n ),\n staticShadowArtifact: createPlayableBabylonStaticShadowArtifactDiagnostic(context, options, sceneContext),\n postProcess,\n shadowPreview,\n };\n}\n\nexport function createPlayableBabylonRuntimeRenderingControllers(\n options: PlayableBabylonRuntimeRenderingControllerOptions,\n): PlayableBabylonRuntimeRenderingControllers {\n let currentRendering = options.initialRendering ?? null;\n const postProcess = createBabylonDefaultPostProcessPipelineController(\n options.scene as never,\n options.cameras as never[],\n currentRendering?.postProcess ?? null,\n options.postProcess,\n );\n let environment: BabylonEnvironmentTextureController | null = null;\n try {\n environment = createBabylonEnvironmentTextureController(\n options.scene as never,\n null,\n );\n environment.setProfile(currentRendering?.environment ?? null);\n } catch (error) {\n const allocatedEnvironment = environment;\n const cleanup = createPlayableBabylonRenderingConstructionCleanup([\n ...(allocatedEnvironment ? [() => allocatedEnvironment.dispose()] : []),\n () => postProcess.dispose(),\n ]);\n const cleanupErrors = cleanup();\n if (cleanupErrors.length > 0) {\n throw createPlayableBabylonRenderingConstructionFailure(\n error,\n cleanupErrors,\n () => throwPlayableBabylonRenderingCleanupResult(cleanup()),\n );\n }\n throw error;\n }\n const activeEnvironment = environment;\n return {\n environment: activeEnvironment,\n postProcess,\n getWorldRendering() {\n return currentRendering;\n },\n setWorldRendering(rendering) {\n currentRendering = rendering ?? null;\n activeEnvironment.setProfile(currentRendering?.environment ?? null);\n postProcess.setProfile(currentRendering?.postProcess ?? null);\n },\n dispose() {\n const cleanupErrors: unknown[] = [];\n try { activeEnvironment.dispose(); } catch (error) { cleanupErrors.push(error); }\n try { postProcess.dispose(); } catch (error) { cleanupErrors.push(error); }\n if (cleanupErrors.length === 0) currentRendering = null;\n if (cleanupErrors.length === 1) throw cleanupErrors[0];\n if (cleanupErrors.length > 1) {\n throw Object.assign(new Error('Playable Babylon rendering controller cleanup failed.'), {\n cleanupErrors: Object.freeze(cleanupErrors),\n });\n }\n },\n };\n}\n\nfunction createPlayableBabylonRenderingConstructionFailure(\n failure: unknown,\n cleanupErrors: readonly unknown[],\n retryCleanup: () => void,\n): object {\n const metadata = {\n cleanupErrors: Object.freeze([...cleanupErrors]),\n retryCleanup,\n } as const;\n if (failure && (typeof failure === 'object' || typeof failure === 'function')) {\n try {\n Object.assign(failure, metadata);\n if ((failure as { retryCleanup?: unknown }).retryCleanup === retryCleanup) return failure;\n } catch {\n // A non-extensible primary error is wrapped so cleanup ownership remains reachable.\n }\n }\n return Object.assign(\n new Error(failure instanceof Error ? failure.message : 'Playable Babylon rendering construction failed.'),\n { cause: failure, ...metadata },\n );\n}\n\nfunction createPlayableBabylonRenderingConstructionCleanup(\n operations: readonly (() => void)[],\n): () => readonly unknown[] {\n let pending = [...operations];\n return () => {\n const cleanupErrors: unknown[] = [];\n const retry: (() => void)[] = [];\n for (const operation of pending) {\n try { operation(); }\n catch (error) {\n cleanupErrors.push(error);\n retry.push(operation);\n }\n }\n pending = retry;\n return Object.freeze(cleanupErrors);\n };\n}\n\nfunction throwPlayableBabylonRenderingCleanupResult(cleanupErrors: readonly unknown[]): void {\n if (cleanupErrors.length === 0) return;\n if (cleanupErrors.length === 1) throw cleanupErrors[0];\n throw Object.assign(new Error('Playable Babylon rendering construction cleanup failed.'), {\n cleanupErrors: Object.freeze([...cleanupErrors]),\n });\n}\n\nexport function createPlayableBabylonPlanarShadowPolicy(\n baseInput: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlayableBabylonPlanarShadowPolicy {\n return {\n resolve(profile, input) {\n return resolvePlayableBabylonPlanarShadowPolicy(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createEditorShadowPreview(profile, input) {\n return createPlayableBabylonPlanarShadowPreviewOptions(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createRuntimePlanarOptions(profile, input) {\n return createPlayableBabylonPlanarShadowOptions(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createRuntimePlanarShadowSystem(scene, directionalLight, profile, input) {\n return createPlayableBabylonPlanarShadowSystem(\n scene,\n directionalLight,\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n };\n}\n\nexport function resolvePlayableBabylonPlanarShadowPolicy(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlayableBabylonResolvedPlanarShadowPolicy {\n const planarInput = createPlayableBabylonPlanarShadowPolicyInput(profile, input);\n const planarOptions = createEditorScenePlanarShadowPreviewSettings(\n profile,\n planarInput,\n ) as PlanarShadowOptions;\n return {\n planarInput,\n planarOptions,\n editorShadowPreview: {\n planar: {\n ...planarOptions,\n ...(input.directionalLightNodeId === undefined\n ? {}\n : { directionalLightNodeId: input.directionalLightNodeId }),\n },\n },\n };\n}\n\nexport function createPlayableBabylonPlanarShadowPolicyInput(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): EditorScenePlanarShadowPreviewSettingsInput {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return {\n ...(input.enabled === undefined ? {} : { enabled: input.enabled }),\n ...(input.autoDetectAllCasters === undefined ? {} : { autoDetectAllCasters: input.autoDetectAllCasters }),\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalReceiverPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowReceivers : []),\n ...(input.additionalReceiverPatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n };\n}\n\nexport function createPlayableBabylonPlanarShadowPreviewOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): BabylonEditorShadowPreviewOptions {\n return resolvePlayableBabylonPlanarShadowPolicy(profile, input).editorShadowPreview;\n}\n\nexport function createPlayableBabylonPlanarShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlanarShadowOptions {\n return resolvePlayableBabylonPlanarShadowPolicy(profile, input).planarOptions;\n}\n\nexport function createPlayableBabylonPlanarShadowSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlanarShadowSystem {\n return createPlanarShadowSystem(\n scene as Parameters<typeof createPlanarShadowSystem>[0],\n directionalLight as Parameters<typeof createPlanarShadowSystem>[1],\n createPlayableBabylonPlanarShadowOptions(profile, input),\n );\n}\n\nexport function createPlayableBabylonBlobShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonBlobShadowPolicyInput = {},\n): BlobShadowOptions {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return createEditorSceneBlobShadowPreviewSettings(profile, {\n ...input,\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n }) as BlobShadowOptions;\n}\n\nexport function createPlayableBabylonStaticProjectedShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonStaticProjectedShadowPolicyInput = {},\n): StaticProjectedShadowOptions & {\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n} {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return {\n ...createEditorSceneStaticProjectedShadowPreviewSettings(profile, {\n ...input,\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n }) as StaticProjectedShadowOptions,\n ...(input.artifact === undefined ? {} : { artifact: input.artifact }),\n ...(input.expectedHashes === undefined ? {} : { expectedHashes: input.expectedHashes }),\n };\n}\n\nexport function createPlayableBabylonStaticProjectedShadowArtifactSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonStaticProjectedShadowPolicyInput = {},\n): StaticProjectedShadowArtifactSystem {\n const staticProjected = createPlayableBabylonStaticProjectedShadowOptions(profile, input);\n const expectedHashes = staticProjected.expectedHashes ?? createStaticProjectedShadowBakeHashes({\n scene: scene as Parameters<typeof createStaticProjectedShadowBakeHashes>[0]['scene'],\n directionalLight: directionalLight as Parameters<typeof createStaticProjectedShadowBakeHashes>[0]['directionalLight'],\n options: staticProjected,\n });\n return createStaticProjectedShadowArtifactSystem(\n scene as Parameters<typeof createStaticProjectedShadowArtifactSystem>[0],\n staticProjected.artifact ?? null,\n {\n enabled: staticProjected.enabled,\n appearance: staticProjected.appearance,\n bake: {\n blur: staticProjected.bake?.blur,\n },\n expectedHashes,\n debug: staticProjected.debug,\n },\n );\n}\n\nexport function createPlayableBabylonBlobShadowSystem(\n scene: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonBlobShadowPolicyInput = {},\n): BlobShadowSystem {\n return createBlobShadowSystem(\n scene as Parameters<typeof createBlobShadowSystem>[0],\n createPlayableBabylonBlobShadowOptions(profile, input),\n );\n}\n\nexport function createPlayableBabylonRenderingPanelState<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): EditorSceneRenderingPanelState {\n const context = createPlayableBabylonRenderingContext(document, options);\n const baseState = options.getPanelState?.({ document }) ?? {};\n const dirty = baseState.dirty ?? options.isDirty?.({ document });\n const language = options.getLanguage?.({ document }) ?? 'en';\n const renderingAction = readPlayableBabylonRenderingActionProgress(sceneContext.renderingAction);\n const staticShadowBake = renderingAction?.actionId === 'bake-static-shadows'\n ? createPlayableBabylonBakingStaticShadowLifecycleState(renderingAction, language)\n : baseState.staticShadowBake\n ?? createPlayableBabylonStaticShadowBakeLifecycleState(context, options, dirty === true, sceneContext);\n const shadowMapExperiment = createShadowMapExperimentPanelState(\n options.getShadowMapExperimentConfig?.(),\n options.getShadowMapExperimentPlan?.(document),\n ) ?? baseState.shadowMapExperiment ?? null;\n return createEditorSceneRenderingPanelState(context.profile, {\n ...baseState,\n ...(dirty === undefined ? {} : { dirty }),\n staticShadowBake,\n shadowMapExperiment,\n }, {\n language,\n textureAssets: options.getTextureAssets?.({ document }) ?? [],\n });\n}\n\nfunction createPlayableBabylonBakingStaticShadowLifecycleState(\n progress: PlayableBabylonRenderingActionProgress,\n language: EditorSceneRenderingPanelLanguage,\n): EditorSceneStaticShadowBakeLifecycleState {\n const stats = readStaticShadowBakeStats(progress.details);\n const label = progress.label\n ?? (language === 'zh' ? '正在烘焙静态阴影' : 'Baking static shadows');\n return {\n status: 'baking',\n chunkCount: stats?.chunkCount ?? 0,\n reason: progress.status ?? label,\n stats,\n progress: {\n label,\n ...(typeof progress.value === 'number' && Number.isFinite(progress.value)\n ? { value: Math.max(0, Math.min(1, progress.value)) }\n : {}),\n indeterminate: progress.indeterminate !== false && typeof progress.value !== 'number',\n },\n };\n}\n\nfunction createPlayableBabylonStaticShadowBakeLifecycleState<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n dirty: boolean,\n sceneContext: PlayableBabylonRenderingSceneContext,\n): EditorSceneStaticShadowBakeLifecycleState {\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, (\n resolvePlayableBabylonRenderingValue(\n options.shadowPreview === false ? undefined : options.shadowPreview?.staticProjected,\n context,\n ) ?? {}\n ));\n if (!staticOptions.enabled) {\n return {\n status: 'disabled',\n chunkCount: 0,\n reason: 'Static Baked Shadow is disabled.',\n };\n }\n const artifact = options.getStaticShadowArtifact?.({ document: context.document }) ?? null;\n if (!artifact) {\n return {\n status: 'missing',\n chunkCount: 0,\n reason: 'No static shadow bake artifact is available.',\n };\n }\n const diagnostic = createEditorSceneStaticShadowArtifactDiagnostic(\n artifact,\n createPlayableBabylonStaticShadowExpectedHashes(context, options, staticOptions, sceneContext),\n );\n if (diagnostic.status === 'invalid') {\n return {\n status: 'invalid',\n chunkCount: 0,\n reason: diagnostic.reason,\n };\n }\n if (diagnostic.status === 'out-of-date') {\n return {\n status: 'out-of-date',\n chunkCount: diagnostic.chunkCount,\n reason: diagnostic.reason,\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n }\n if (dirty) {\n return {\n status: 'preview-unsaved',\n chunkCount: diagnostic.chunkCount,\n reason: 'Static shadow preview has not been saved yet.',\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n }\n return {\n status: 'up-to-date',\n chunkCount: diagnostic.chunkCount,\n reason: null,\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n}\n\nfunction createEditorSceneStaticShadowBakeStatsFromArtifact(\n artifact: StaticProjectedShadowArtifact,\n): EditorSceneStaticShadowBakeStats {\n const isV2 = artifact.version === 2;\n const pageCount = isV2 ? artifact.pages.length : undefined;\n return {\n sourceRootCount: artifact.stats?.sourceRootCount ?? uniqueStaticShadowSourceNodeIds(artifact).length,\n sourceMeshCount: artifact.stats?.sourceMeshCount,\n attemptedChunkCount: artifact.stats?.attemptedChunkCount ?? artifact.chunks.length,\n chunkCount: artifact.stats?.chunkCount ?? artifact.chunks.length,\n textureCount: artifact.stats?.textureCount ?? pageCount ?? artifact.chunks.length,\n skippedChunkCount: artifact.stats?.skippedChunkCount,\n pageCount: artifact.stats?.pageCount ?? pageCount,\n resolution: artifact.stats?.resolution,\n chunkSize: artifact.stats?.chunkSize,\n atlasSize: artifact.stats?.atlasSize,\n atlasUsedPixels: artifact.stats?.atlasUsedPixels,\n atlasAllocatedPixels: artifact.stats?.atlasAllocatedPixels,\n atlasOccupancy: artifact.stats?.atlasOccupancy,\n texelsPerMeter: artifact.stats?.texelsPerMeter,\n effectiveTexelsPerMeter: artifact.stats?.effectiveTexelsPerMeter,\n maxAtlasPages: artifact.stats?.maxAtlasPages,\n sdfRadiusPx: artifact.stats?.sdfRadiusPx,\n spatialChunkSize: artifact.stats?.spatialChunkSize,\n effectiveSpatialChunkSize: artifact.stats?.effectiveSpatialChunkSize,\n targetChunkCount: artifact.stats?.targetChunkCount,\n bakedChunkCount: artifact.stats?.bakedChunkCount,\n reusedChunkCount: artifact.stats?.reusedChunkCount,\n durationMs: artifact.stats?.durationMs,\n };\n}\n\nfunction uniqueStaticShadowSourceNodeIds(artifact: StaticProjectedShadowArtifact): string[] {\n return [...new Set(artifact.chunks.flatMap(chunk => chunk.sourceNodeIds))];\n}\n\nfunction createPlayableBabylonStaticShadowArtifactDiagnostic<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext,\n): EditorSceneStaticShadowArtifactDiagnostic {\n const artifact = options.getStaticShadowArtifact?.({ document: context.document }) ?? null;\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, (\n resolvePlayableBabylonRenderingValue(\n options.shadowPreview === false ? undefined : options.shadowPreview?.staticProjected,\n context,\n ) ?? {}\n ));\n return createEditorSceneStaticShadowArtifactDiagnostic(\n artifact,\n createPlayableBabylonStaticShadowExpectedHashes(context, options, staticOptions, sceneContext),\n );\n}\n\nfunction createPlayableBabylonStaticShadowExpectedHashes<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n staticOptions: StaticProjectedShadowOptions & { expectedHashes?: StaticProjectedShadowArtifactHashInput | null },\n sceneContext: PlayableBabylonRenderingSceneContext,\n): StaticProjectedShadowArtifactHashInput {\n if (staticOptions.expectedHashes) return staticOptions.expectedHashes;\n const scene = readBabylonScene(sceneContext.scene);\n const shadowPreview = options.shadowPreview === false ? {} : options.shadowPreview ?? {};\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(\n shadowPreview.directionalLightNodeId,\n context,\n );\n if (scene) {\n return createStaticProjectedShadowBakeHashes({\n scene,\n directionalLight: resolveBabylonDirectionalLight(sceneContext.projection, directionalLightNodeId ?? null),\n options: staticOptions,\n });\n }\n return {\n profileHash: createStaticProjectedShadowProfileHash(staticOptions),\n };\n}\n\nexport function createPlayableBabylonEnvironmentTextureProfile(\n profile: EditorSceneRenderingProfile,\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): BabylonEnvironmentTextureProfile {\n return {\n textureUrl: resolvePlayableBabylonRenderingEnvironmentTextureUrl(\n profile.environment.texture,\n textureAssets,\n ),\n intensity: profile.environment.iblIntensity,\n rotationY: profile.environment.rotationY,\n };\n}\n\nexport function resolvePlayableBabylonRenderingEnvironmentTextureUrl(\n textureRef: EditorSceneRenderingProfile['environment']['texture'],\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): string | null {\n if (!textureRef) return null;\n const textureAssetId = typeof textureRef.textureAssetId === 'string'\n ? textureRef.textureAssetId.trim()\n : '';\n if (textureAssetId) {\n const textureAsset = textureAssets.find(texture => texture.id === textureAssetId);\n return textureAsset && isPlayableBabylonRenderingEnvironmentTextureAsset(textureAsset)\n ? textureAsset.url\n : null;\n }\n const textureUrl = typeof textureRef.url === 'string' ? textureRef.url.trim() : '';\n return isPlayableBabylonRenderingEnvironmentTextureUrl(textureUrl) ? textureUrl : null;\n}\n\nexport function resolvePlayableBabylonRenderingEnvironmentTextureDiagnostic(\n textureRef: EditorSceneRenderingProfile['environment']['texture'],\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): PlayableBabylonRenderingEnvironmentTextureDiagnostic {\n if (!textureRef) {\n return {\n status: 'none',\n textureAssetId: null,\n textureUrl: null,\n resolvedUrl: null,\n asset: null,\n reason: 'No environment texture is configured.',\n };\n }\n const textureAssetId = typeof textureRef.textureAssetId === 'string'\n ? textureRef.textureAssetId.trim()\n : '';\n if (textureAssetId) {\n const textureAsset = textureAssets.find(texture => texture.id === textureAssetId) ?? null;\n if (!textureAsset) {\n return {\n status: 'missing-asset',\n textureAssetId,\n textureUrl: null,\n resolvedUrl: null,\n asset: null,\n reason: `Environment texture asset not found: ${textureAssetId}.`,\n };\n }\n if (!isPlayableBabylonRenderingEnvironmentTextureAsset(textureAsset)) {\n return {\n status: 'unsupported-asset',\n textureAssetId,\n textureUrl: textureAsset.url,\n resolvedUrl: null,\n asset: textureAsset,\n reason: `Texture asset is not marked as an environment texture: ${textureAssetId}.`,\n };\n }\n return {\n status: 'resolved-asset',\n textureAssetId,\n textureUrl: textureAsset.url,\n resolvedUrl: textureAsset.url,\n asset: textureAsset,\n reason: null,\n };\n }\n const textureUrl = typeof textureRef.url === 'string' ? textureRef.url.trim() : '';\n if (!textureUrl) {\n return {\n status: 'none',\n textureAssetId: null,\n textureUrl: null,\n resolvedUrl: null,\n asset: null,\n reason: 'No environment texture URL is configured.',\n };\n }\n if (!isPlayableBabylonRenderingEnvironmentTextureUrl(textureUrl)) {\n return {\n status: 'unsupported-url',\n textureAssetId: null,\n textureUrl,\n resolvedUrl: null,\n asset: null,\n reason: 'Environment texture URL must use .env, .hdr, .dds, .ktx, or .ktx2.',\n };\n }\n return {\n status: 'resolved-url',\n textureAssetId: null,\n textureUrl,\n resolvedUrl: textureUrl,\n asset: null,\n reason: null,\n };\n}\n\nexport function isPlayableBabylonRenderingEnvironmentTextureAsset(\n texture: EditorSceneRenderingTextureAsset,\n): boolean {\n if (texture.capabilities?.environmentTexture === true) return true;\n if (texture.capabilities?.environmentTexture === false) return false;\n if (texture.usage === 'environment') return true;\n return isPlayableBabylonRenderingEnvironmentTextureUrl(texture.url);\n}\n\nexport function isPlayableBabylonRenderingEnvironmentTextureUrl(textureUrl: string): boolean {\n return PLAYABLE_BABYLON_ENVIRONMENT_TEXTURE_URL_PATTERN.test(textureUrl);\n}\n\nfunction createPlayableBabylonRenderingContext<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n): PlayableBabylonRenderingContext<TDocument> {\n const config = options.getConfig({ document });\n return {\n document,\n config,\n profile: normalizeEditorSceneRenderingProfile(config),\n };\n}\n\nfunction resolvePlayableBabylonRenderingPostProcess<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n): BabylonDefaultPostProcessResolveResult {\n return resolveBabylonDefaultPostProcessVolumeStack(\n context.config,\n options.getPostProcessResolveInput?.(context),\n );\n}\n\nfunction createPlayableBabylonShadowPreviewOptions<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): BabylonEditorShadowPreviewOptions | null {\n if (options.shadowPreview === false) return null;\n const shadowPreview = options.shadowPreview ?? {};\n const blobInput = resolvePlayableBabylonRenderingValue(shadowPreview.blob, context) ?? {};\n const staticInput = resolvePlayableBabylonRenderingValue(shadowPreview.staticProjected, context) ?? {};\n const planarInput = resolvePlayableBabylonRenderingValue(shadowPreview.planar, context) ?? {};\n const shadowMapExperiment = resolvePlayableBabylonRenderingValue(\n shadowPreview.shadowMapExperiment,\n context,\n );\n const staticArtifact = staticInput.artifact === undefined\n ? options.getStaticShadowArtifact?.({ document: context.document }) ?? null\n : staticInput.artifact;\n const enabled = resolvePlayableBabylonRenderingValue(shadowPreview.enabled, context);\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(\n shadowPreview.directionalLightNodeId,\n context,\n );\n const planarPreview = createPlayableBabylonPlanarShadowPreviewOptions(context.profile, {\n ...planarInput,\n ...(enabled === undefined ? {} : { enabled }),\n ...(directionalLightNodeId === undefined ? {} : { directionalLightNodeId }),\n });\n const blobPreview = createPlayableBabylonBlobShadowOptions(context.profile, {\n ...blobInput,\n ...(enabled === undefined ? {} : { enabled }),\n });\n const staticPreview = createPlayableBabylonStaticProjectedShadowOptions(context.profile, {\n ...staticInput,\n artifact: staticArtifact,\n ...(enabled === undefined ? {} : { enabled }),\n });\n const expectedHashes = createPlayableBabylonStaticShadowExpectedHashes(context, options, staticPreview, sceneContext);\n const filteredStaticArtifact = resolvePlayableBabylonStaticShadowArtifactForExpectedHashes(\n staticPreview.artifact ?? null,\n expectedHashes,\n );\n return {\n defaultMode: context.profile.shadows.defaultMode as EditorSceneResolvedShadowMode,\n blob: blobPreview,\n staticProjected: {\n ...staticPreview,\n artifact: filteredStaticArtifact,\n ...(readBabylonScene(sceneContext.scene) ? { expectedHashes } : {}),\n ...(directionalLightNodeId === undefined ? {} : { directionalLightNodeId }),\n },\n planar: planarPreview.planar ?? null,\n shadowMapExperiment: shadowMapExperiment ?? null,\n };\n}\n\nfunction resolvePlayableBabylonStaticShadowArtifactForExpectedHashes(\n artifact: StaticProjectedShadowArtifact | null,\n expectedHashes: StaticProjectedShadowArtifactHashInput,\n): StaticProjectedShadowArtifact | null {\n if (!artifact) return null;\n const diagnostic = createEditorSceneStaticShadowArtifactDiagnostic(artifact, expectedHashes);\n return diagnostic.status === 'up-to-date' ? artifact : null;\n}\n\nasync function handlePlayableBabylonRenderingPropertyChange<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n const sectionId = typeof input.sectionId === 'string' ? input.sectionId : '';\n if (!PLAYABLE_BABYLON_RENDERING_ALLOWED_SECTIONS.has(sectionId)) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering section: ${sectionId || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n const path = typeof input.path === 'string' ? input.path : '';\n if (path === 'shadowMapExperiment.qualityProfile') {\n return handleShadowMapExperimentQualityProfileChange(input, options);\n }\n const currentConfig = options.getConfig({ document: input.document });\n const patch = applyEditorSceneRenderingProfilePatch(currentConfig, {\n [path]: input.value,\n });\n if (patch.changedPaths.length === 0) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering field: ${path || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n const setConfigResult = await options.setConfig({\n document: input.document,\n config: patch.config,\n changedPaths: patch.changedPaths,\n profile: patch.normalized,\n change: {\n path,\n value: input.value,\n },\n });\n const dirty = options.isDirty?.({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty,\n status: `Rendering draft updated: ${patch.changedPaths.join(', ')}`,\n statusTone: dirty === false ? 'success' : 'warning',\n documentPatch: readPlayableBabylonRenderingDocumentPatch(setConfigResult),\n });\n}\n\nfunction createShadowMapExperimentPanelState(\n configValue: unknown,\n planValue: unknown,\n): EditorSceneRenderingPanelStateInput['shadowMapExperiment'] {\n const config = readShadowMapExperimentConfig(configValue);\n const plan = readShadowMapExperimentPlan(planValue);\n if (!config && !plan) return null;\n return {\n configured: !!config,\n enabled: plan?.enabled ?? config?.enabled ?? false,\n qualityProfileId: plan?.qualityProfileId ?? config?.defaultQualityProfile ?? null,\n qualityProfileIds: config ? Object.keys(config.qualityProfiles).sort() : [],\n maps: plan ? { ...plan.generator.maps } : null,\n filter: plan?.generator.filter ?? null,\n bias: plan?.generator.bias ?? null,\n normalBias: plan?.generator.normalBias ?? null,\n darkness: plan?.generator.darkness ?? null,\n };\n}\n\nfunction readShadowMapExperimentConfig(value: unknown): ShadowMapExperimentConfig | null {\n try {\n return createShadowMapExperimentConfigSnapshot(value);\n } catch {\n return null;\n }\n}\n\nfunction readShadowMapExperimentPlan(value: unknown): ShadowMapExperimentPlan | null {\n try {\n return createShadowMapExperimentPlanSnapshot(value);\n } catch {\n return null;\n }\n}\n\nfunction handleShadowMapExperimentQualityProfileChange<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): PlayableLocalEditorRenderingPropertyChangeResult<TPatch> {\n const language = options.getLanguage?.({ document: input.document }) ?? 'en';\n const qualityProfile = typeof input.value === 'string' ? input.value.trim() : '';\n const config = readShadowMapExperimentConfig(options.getShadowMapExperimentConfig?.());\n if (!qualityProfile || !config || !Object.prototype.hasOwnProperty.call(config.qualityProfiles, qualityProfile)) {\n return createPlayableBabylonRenderingResult(false, {\n status: language === 'zh'\n ? `未知的实时阴影质量档:${qualityProfile || '(空)'}`\n : `Unknown Shadow Map quality profile: ${qualityProfile || '(empty)'}`,\n statusTone: 'warning',\n });\n }\n const patch = options.createShadowMapExperimentProfilesPatch?.({\n document: input.document,\n qualityProfile,\n });\n if (!patch) {\n return createPlayableBabylonRenderingResult(false, {\n status: language === 'zh'\n ? '当前项目的场景阴影质量档为只读。'\n : 'Scene Shadow Map quality profile is read-only for this project.',\n statusTone: 'warning',\n });\n }\n return createPlayableBabylonRenderingResult(true, {\n status: language === 'zh'\n ? `实时阴影质量档:${qualityProfile}`\n : `Shadow Map quality profile: ${qualityProfile}`,\n statusTone: 'success',\n documentPatch: patch,\n });\n}\n\nasync function handlePlayableBabylonRenderingAction<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n const actionId = typeof input.actionId === 'string' ? input.actionId : '';\n if (actionId === 'bake-static-shadows') {\n return bakePlayableBabylonStaticShadows(input, options);\n }\n if (actionId === 'rendering-alpha-preset.add' || actionId === 'rendering-alpha-preset.delete') {\n const actionInput = createPlayableBabylonRenderingProfileActionInput(actionId, input);\n const currentConfig = options.getConfig({ document: input.document });\n const patch = applyEditorSceneRenderingProfileAction(currentConfig, actionInput);\n if (patch.changedPaths.length === 0) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering action: ${actionId}`,\n statusTone: 'warning',\n });\n }\n const setConfigResult = await options.setConfig({\n document: input.document,\n config: patch.config,\n changedPaths: patch.changedPaths,\n profile: patch.normalized,\n action: actionInput,\n });\n const dirty = options.isDirty?.({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty,\n status: `Rendering draft updated: ${patch.changedPaths.join(', ')}`,\n statusTone: dirty === false ? 'success' : 'warning',\n documentPatch: readPlayableBabylonRenderingDocumentPatch(setConfigResult),\n });\n }\n if (actionId !== 'revert-rendering') {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering action: ${actionId || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n if (!options.resetConfig) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Rendering reset is not available for this project.',\n statusTone: 'warning',\n });\n }\n if (options.isDirty?.({ document: input.document }) === false) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Rendering already matches saved settings.',\n statusTone: 'default',\n });\n }\n await options.resetConfig({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty: options.isDirty?.({ document: input.document }) ?? false,\n status: 'Rendering draft reverted to saved settings.',\n statusTone: 'success',\n });\n}\n\nasync function bakePlayableBabylonStaticShadows<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n if (!options.setStaticShadowArtifact) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static shadow artifact storage is not available for this project.',\n statusTone: 'warning',\n });\n }\n const scene = readBabylonScene(input.scene);\n if (!scene) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static shadow bake requires the active Babylon scene.',\n statusTone: 'warning',\n });\n }\n const context = createPlayableBabylonRenderingContext(input.document, options);\n const shadowPreview = options.shadowPreview === false ? {} : options.shadowPreview ?? {};\n const staticInput = resolvePlayableBabylonRenderingValue(shadowPreview.staticProjected, context) ?? {};\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(shadowPreview.directionalLightNodeId, context);\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, {\n ...staticInput,\n ...(staticInput.enabled === undefined ? {} : { enabled: staticInput.enabled }),\n });\n if (!staticOptions.enabled) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static Baked Shadow is disabled.',\n statusTone: 'warning',\n });\n }\n const reportProgress = readPlayableBabylonRenderingProgressReporter(input.reportProgress);\n const previousArtifact = options.getStaticShadowArtifact?.({ document: input.document }) ?? null;\n const workerProcessor = options.processStaticShadowSdfTile ? null : createStaticProjectedShadowCpuWorkerProcessor();\n let artifact: StaticProjectedShadowArtifact;\n try {\n artifact = await createStaticProjectedShadowBaker({\n scene,\n directionalLight: resolveBabylonDirectionalLight(input.projection, directionalLightNodeId ?? null),\n options: staticOptions,\n previousArtifact,\n readMaskTexturePixels: options.readStaticShadowMaskTexturePixels,\n processSdfTile: options.processStaticShadowSdfTile ?? workerProcessor?.processSdfTile,\n encodeAtlasTexture: options.encodeStaticShadowAtlasTexture,\n yieldToMainThread: async (progress) => {\n await reportProgress?.(createPlayableBabylonStaticShadowBakeProgress(progress, staticOptions));\n },\n onProgress: async (progress) => {\n await reportProgress?.(createPlayableBabylonStaticShadowBakeProgress(progress, staticOptions));\n },\n }).bake();\n } finally {\n workerProcessor?.dispose();\n }\n await reportProgress?.({\n actionId: 'bake-static-shadows',\n label: 'Writing static shadow artifact',\n status: 'Writing static shadow artifact...',\n value: 0.98,\n indeterminate: false,\n details: createStaticShadowArtifactStatsDetails(artifact),\n });\n await options.setStaticShadowArtifact({\n document: input.document,\n artifact,\n profile: context.profile,\n });\n const statusDetails = formatStaticShadowBakeResultDetails(artifact);\n return createPlayableBabylonRenderingResult(true, {\n dirty: options.isDirty?.({ document: input.document }),\n status: `Baked ${artifact.chunks.length} static shadow chunk${artifact.chunks.length === 1 ? '' : 's'} from ${artifact.stats?.sourceRootCount ?? 0} static caster${artifact.stats?.sourceRootCount === 1 ? '' : 's'}.`,\n statusTone: 'success',\n statusDetails,\n details: createStaticShadowArtifactActionDetails(artifact),\n });\n}\n\nfunction readPlayableBabylonRenderingProgressReporter(\n value: unknown,\n): ((progress: PlayableBabylonRenderingActionProgress) => MaybePromise<void>) | null {\n return typeof value === 'function'\n ? value as (progress: PlayableBabylonRenderingActionProgress) => MaybePromise<void>\n : null;\n}\n\nfunction createPlayableBabylonStaticShadowBakeProgress(\n progress: StaticProjectedShadowBakeProgress,\n options: ReturnType<typeof createPlayableBabylonStaticProjectedShadowOptions>,\n): PlayableBabylonRenderingActionProgress {\n const total = Math.max(0, progress.totalChunkCount);\n const completed = Math.max(0, progress.completedChunkCount);\n const chunkProgress = total > 0 ? completed / total : 1;\n const atlasPageCount = Math.max(0, progress.atlasPageCount ?? 0);\n const encodedPageCount = Math.max(0, progress.encodedTextureCount);\n const value = progress.phase === 'collect'\n ? 0.08\n : progress.phase === 'pack'\n ? 0.92\n : progress.phase === 'encode'\n ? 0.92 + (atlasPageCount > 0 ? Math.min(encodedPageCount / atlasPageCount, 1) * 0.05 : 0.03)\n : progress.phase === 'complete'\n ? 0.96\n : 0.12 + chunkProgress * 0.78;\n const status = progress.phase === 'collect'\n ? `Collecting ${progress.sourceRootCount} static shadow casters...`\n : progress.phase === 'reuse'\n ? `Reusing ${progress.reusedChunkCount ?? 0} unchanged static shadow chunks...`\n : progress.phase === 'sdf'\n ? `Generating static shadow SDF ${Math.min(completed + 1, total)} of ${total}...`\n : progress.phase === 'pack'\n ? `Packing ${progress.encodedTextureCount} static shadow chunks into ${atlasPageCount} atlas page${atlasPageCount === 1 ? '' : 's'}...`\n : progress.phase === 'encode'\n ? `Encoding static shadow atlas page ${Math.min(encodedPageCount + 1, atlasPageCount || encodedPageCount + 1)} of ${atlasPageCount || encodedPageCount + 1}...`\n : progress.phase === 'complete'\n ? `Finishing ${encodedPageCount} static shadow atlas page${encodedPageCount === 1 ? '' : 's'}...`\n : `Baking static shadow chunk ${Math.min(completed + 1, total)} of ${total}...`;\n return {\n actionId: 'bake-static-shadows',\n label: total > 0\n ? `Static shadow bake ${Math.min(completed, total)} / ${total}`\n : 'Static shadow bake',\n status,\n value,\n indeterminate: total === 0 && progress.phase !== 'complete',\n details: {\n phase: progress.phase,\n sourceRootCount: progress.sourceRootCount,\n sourceMeshCount: progress.sourceMeshCount,\n attemptedChunkCount: progress.totalChunkCount,\n chunkCount: progress.completedChunkCount,\n textureCount: progress.encodedTextureCount,\n pageCount: progress.atlasPageCount,\n resolution: options.bake?.resolution,\n chunkSize: options.bake?.spatialChunkSize,\n atlasSize: options.bake?.atlasSize,\n texelsPerMeter: options.bake?.texelsPerMeter,\n effectiveTexelsPerMeter: progress.effectiveTexelsPerMeter,\n maxAtlasPages: options.bake?.maxAtlasPages,\n sdfRadiusPx: options.bake?.sdfRadiusPx,\n spatialChunkSize: options.bake?.spatialChunkSize,\n effectiveSpatialChunkSize: progress.effectiveSpatialChunkSize,\n targetChunkCount: options.bake?.targetChunkCount,\n bakedChunkCount: progress.bakedChunkCount,\n reusedChunkCount: progress.reusedChunkCount,\n ...(progress.currentChunkId ? { currentChunkId: progress.currentChunkId } : {}),\n },\n };\n}\n\nfunction createStaticShadowArtifactStatsDetails(\n artifact: StaticProjectedShadowArtifact,\n): Record<string, unknown> {\n const isV2 = artifact.version === 2;\n const pageCount = isV2 ? artifact.pages.length : undefined;\n return {\n phase: 'complete',\n sourceRootCount: artifact.stats?.sourceRootCount ?? 0,\n sourceMeshCount: artifact.stats?.sourceMeshCount ?? 0,\n attemptedChunkCount: artifact.stats?.attemptedChunkCount ?? artifact.chunks.length,\n chunkCount: artifact.stats?.chunkCount ?? artifact.chunks.length,\n textureCount: artifact.stats?.textureCount ?? pageCount ?? artifact.chunks.length,\n skippedChunkCount: artifact.stats?.skippedChunkCount ?? 0,\n pageCount: artifact.stats?.pageCount ?? pageCount,\n resolution: artifact.stats?.resolution,\n chunkSize: artifact.stats?.chunkSize,\n atlasSize: artifact.stats?.atlasSize,\n atlasUsedPixels: artifact.stats?.atlasUsedPixels,\n atlasAllocatedPixels: artifact.stats?.atlasAllocatedPixels,\n atlasOccupancy: artifact.stats?.atlasOccupancy,\n texelsPerMeter: artifact.stats?.texelsPerMeter,\n effectiveTexelsPerMeter: artifact.stats?.effectiveTexelsPerMeter,\n maxAtlasPages: artifact.stats?.maxAtlasPages,\n sdfRadiusPx: artifact.stats?.sdfRadiusPx,\n spatialChunkSize: artifact.stats?.spatialChunkSize,\n effectiveSpatialChunkSize: artifact.stats?.effectiveSpatialChunkSize,\n targetChunkCount: artifact.stats?.targetChunkCount,\n bakedChunkCount: artifact.stats?.bakedChunkCount,\n reusedChunkCount: artifact.stats?.reusedChunkCount,\n durationMs: artifact.stats?.durationMs,\n };\n}\n\nfunction createStaticShadowArtifactActionDetails(\n artifact: StaticProjectedShadowArtifact,\n): Record<string, unknown> {\n const sourceNodeIds = createUniqueStringList(\n artifact.chunks.flatMap(chunk => Array.isArray(chunk.sourceNodeIds) ? chunk.sourceNodeIds : []),\n );\n return {\n ...createStaticShadowArtifactStatsDetails(artifact),\n sourceNodeIds,\n };\n}\n\nfunction formatStaticShadowBakeResultDetails(artifact: StaticProjectedShadowArtifact): string {\n const stats = artifact.stats;\n const sourceRootCount = stats?.sourceRootCount ?? 0;\n const sourceMeshCount = stats?.sourceMeshCount ?? 0;\n const chunkCount = stats?.chunkCount ?? artifact.chunks.length;\n const atlasPageCount = stats?.pageCount ?? (artifact.version === 2 ? artifact.pages.length : stats?.textureCount ?? artifact.chunks.length);\n const effectiveTexelsPerMeter = stats?.effectiveTexelsPerMeter;\n const atlasSize = stats?.atlasSize;\n const atlasOccupancy = stats?.atlasOccupancy;\n const sdfRadiusPx = stats?.sdfRadiusPx;\n const duration = typeof stats?.durationMs === 'number' ? `, ${Math.round(stats.durationMs)}ms` : '';\n const parts = [\n `Static casters: ${sourceRootCount}`,\n `Bake meshes: ${sourceMeshCount}`,\n `Chunks: ${chunkCount}`,\n `Atlas pages: ${atlasPageCount}${duration}`,\n ];\n if (typeof effectiveTexelsPerMeter === 'number') parts.push(`Effective texels/m: ${formatNumberForStatus(effectiveTexelsPerMeter)}`);\n if (typeof atlasSize === 'number') parts.push(`Atlas: ${atlasSize}px`);\n if (typeof atlasOccupancy === 'number') parts.push(`Atlas occupancy: ${formatNumberForStatus(Math.max(0, Math.min(1, atlasOccupancy)) * 100)}%`);\n if (typeof sdfRadiusPx === 'number') parts.push(`SDF radius: ${formatNumberForStatus(sdfRadiusPx)}px`);\n if (typeof stats?.bakedChunkCount === 'number' || typeof stats?.reusedChunkCount === 'number') {\n parts.push(`Baked/reused: ${stats?.bakedChunkCount ?? 0}/${stats?.reusedChunkCount ?? 0}`);\n }\n return parts.join(' · ');\n}\n\nfunction createUniqueStringList(values: readonly unknown[]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const value of values) {\n if (typeof value !== 'string' || value.length === 0 || seen.has(value)) continue;\n seen.add(value);\n result.push(value);\n }\n return result;\n}\n\nfunction formatNumberForStatus(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n}\n\nfunction createPlayableBabylonRenderingResult<TPatch = unknown>(\n changed: boolean,\n input: {\n dirty?: boolean;\n status: string;\n statusTone: EditorSceneRenderingStatusTone;\n statusDetails?: string;\n details?: Record<string, unknown>;\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n },\n): PlayableLocalEditorRenderingPropertyChangeResult<TPatch> {\n return {\n changed,\n refreshWorldRendering: changed,\n ...(input.dirty === undefined ? {} : { dirty: input.dirty }),\n status: input.status,\n statusTone: input.statusTone,\n ...(input.statusDetails ? { statusDetails: input.statusDetails } : {}),\n ...(input.details ? { details: input.details } : {}),\n ...(input.documentPatch === undefined ? {} : { documentPatch: input.documentPatch }),\n };\n}\n\nfunction createPlayableBabylonRenderingProfileActionInput(\n actionId: string,\n input: Record<string, unknown>,\n): EditorSceneRenderingProfileActionInput {\n const params = readRecord(input.params);\n return {\n actionId,\n renderingGroupId: params.renderingGroupId ?? input.renderingGroupId,\n presetIndex: params.presetIndex ?? input.presetIndex,\n };\n}\n\nfunction readPlayableBabylonRenderingDocumentPatch<TPatch>(\n value: void | PlayableBabylonRenderingSetConfigResult<TPatch>,\n): PlayableLocalEditorPatchResult<TPatch> | null | undefined {\n return value && typeof value === 'object' ? value.documentPatch : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction resolvePlayableBabylonRenderingValue<TDocument, TValue>(\n value: PlayableBabylonRenderingValueResolver<TDocument, TValue> | undefined,\n context: PlayableBabylonRenderingContext<TDocument>,\n): TValue | undefined {\n return typeof value === 'function'\n ? (value as (context: PlayableBabylonRenderingContext<TDocument>) => TValue)(context)\n : value;\n}\n\nfunction readPlayableBabylonRenderingActionProgress(value: unknown): PlayableBabylonRenderingActionProgress | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return {\n ...(typeof record.actionId === 'string' ? { actionId: record.actionId } : {}),\n ...(typeof record.label === 'string' ? { label: record.label } : {}),\n ...(typeof record.status === 'string' ? { status: record.status } : {}),\n ...(isEditorSceneRenderingStatusTone(record.statusTone) ? { statusTone: record.statusTone } : {}),\n ...(typeof record.statusDetails === 'string' ? { statusDetails: record.statusDetails } : {}),\n ...(typeof record.value === 'number' && Number.isFinite(record.value) ? { value: record.value } : {}),\n ...(typeof record.indeterminate === 'boolean' ? { indeterminate: record.indeterminate } : {}),\n ...(record.details && typeof record.details === 'object' && !Array.isArray(record.details)\n ? { details: record.details as Record<string, unknown> }\n : {}),\n };\n}\n\nfunction isEditorSceneRenderingStatusTone(value: unknown): value is EditorSceneRenderingStatusTone {\n return value === 'default' || value === 'success' || value === 'warning' || value === 'error';\n}\n\nfunction readStaticShadowBakeStats(value: unknown): EditorSceneStaticShadowBakeStats | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const stats: EditorSceneStaticShadowBakeStats = {};\n if (typeof record.phase === 'string' && record.phase.trim()) {\n stats.phase = record.phase.trim();\n }\n setOptionalNonNegativeNumber(stats, 'sourceRootCount', record.sourceRootCount);\n setOptionalNonNegativeNumber(stats, 'sourceMeshCount', record.sourceMeshCount);\n setOptionalNonNegativeNumber(stats, 'attemptedChunkCount', record.attemptedChunkCount);\n setOptionalNonNegativeNumber(stats, 'chunkCount', record.chunkCount);\n setOptionalNonNegativeNumber(stats, 'textureCount', record.textureCount);\n setOptionalNonNegativeNumber(stats, 'skippedChunkCount', record.skippedChunkCount);\n setOptionalNonNegativeNumber(stats, 'pageCount', record.pageCount);\n setOptionalPositiveNumber(stats, 'resolution', record.resolution);\n setOptionalPositiveNumber(stats, 'chunkSize', record.chunkSize);\n setOptionalPositiveNumber(stats, 'atlasSize', record.atlasSize);\n setOptionalNonNegativeNumber(stats, 'atlasUsedPixels', record.atlasUsedPixels);\n setOptionalNonNegativeNumber(stats, 'atlasAllocatedPixels', record.atlasAllocatedPixels);\n setOptionalRatio(stats, 'atlasOccupancy', record.atlasOccupancy);\n setOptionalPositiveNumber(stats, 'texelsPerMeter', record.texelsPerMeter);\n setOptionalPositiveNumber(stats, 'effectiveTexelsPerMeter', record.effectiveTexelsPerMeter);\n setOptionalPositiveNumber(stats, 'maxAtlasPages', record.maxAtlasPages);\n setOptionalNonNegativeNumber(stats, 'sdfRadiusPx', record.sdfRadiusPx);\n setOptionalPositiveNumber(stats, 'spatialChunkSize', record.spatialChunkSize);\n setOptionalPositiveNumber(stats, 'effectiveSpatialChunkSize', record.effectiveSpatialChunkSize);\n setOptionalPositiveNumber(stats, 'targetChunkCount', record.targetChunkCount);\n setOptionalNonNegativeNumber(stats, 'bakedChunkCount', record.bakedChunkCount);\n setOptionalNonNegativeNumber(stats, 'reusedChunkCount', record.reusedChunkCount);\n setOptionalNonNegativeNumber(stats, 'durationMs', record.durationMs);\n if (typeof record.currentChunkId === 'string' && record.currentChunkId.trim()) {\n stats.currentChunkId = record.currentChunkId.trim();\n }\n return Object.keys(stats).length > 0 ? stats : null;\n}\n\nfunction setOptionalNonNegativeNumber(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction setOptionalPositiveNumber(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction setOptionalRatio(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0 && value <= 1) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction readBabylonScene(value: unknown): Scene | null {\n return value && typeof value === 'object' && Array.isArray((value as { meshes?: unknown }).meshes)\n ? value as Scene\n : null;\n}\n\nfunction resolveBabylonDirectionalLight(\n projectionValue: unknown,\n directionalLightNodeId: string | null,\n): DirectionalLight | null {\n if (!directionalLightNodeId) return null;\n const projection = projectionValue as BabylonEditorProjection | null | undefined;\n const projected = projection?.getProjectedNode?.(directionalLightNodeId);\n const candidates = [\n projected?.root,\n ...(Array.isArray(projected?.runtimeObjects) ? projected.runtimeObjects : []),\n ];\n for (const candidate of candidates) {\n if (candidate && typeof candidate === 'object' && (candidate as DirectionalLight).getClassName?.() === 'DirectionalLight') {\n return candidate as DirectionalLight;\n }\n }\n return null;\n}\n\nfunction mergePlayableBabylonPlanarShadowPolicyInput(\n base: PlayableBabylonPlanarShadowPolicyInput,\n input: PlayableBabylonPlanarShadowPolicyInput | undefined,\n): PlayableBabylonPlanarShadowPolicyInput {\n const merged: PlayableBabylonPlanarShadowPolicyInput = {\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalCasterIncludePatterns ?? []),\n ...(input?.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalExcludePatterns ?? []),\n ...(input?.additionalExcludePatterns ?? []),\n ),\n additionalReceiverPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalReceiverPatterns ?? []),\n ...(input?.additionalReceiverPatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalRootBoundaryPatterns ?? []),\n ...(input?.additionalRootBoundaryPatterns ?? []),\n ),\n };\n const enabled = input?.enabled ?? base.enabled;\n if (enabled !== undefined) merged.enabled = enabled;\n const autoDetectAllCasters = input?.autoDetectAllCasters ?? base.autoDetectAllCasters;\n if (autoDetectAllCasters !== undefined) merged.autoDetectAllCasters = autoDetectAllCasters;\n const includeProfileShadowMeshes = input?.includeProfileShadowMeshes ?? base.includeProfileShadowMeshes;\n if (includeProfileShadowMeshes !== undefined) merged.includeProfileShadowMeshes = includeProfileShadowMeshes;\n const directionalLightNodeId = input && 'directionalLightNodeId' in input\n ? input.directionalLightNodeId\n : base.directionalLightNodeId;\n if (directionalLightNodeId !== undefined) merged.directionalLightNodeId = directionalLightNodeId;\n return merged;\n}\n\nfunction mergePlayableBabylonPlanarShadowPatterns(...patterns: readonly string[]): string[] {\n const seen = new Set<string>();\n const merged: string[] = [];\n for (const pattern of patterns) {\n const normalized = typeof pattern === 'string' ? pattern.trim() : '';\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n merged.push(normalized);\n }\n return merged;\n}\n"]}
1
+ {"version":3,"file":"playable-babylon-rendering.js","sourceRoot":"","sources":["../src/playable-babylon-rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n applyEditorSceneRenderingProfileAction,\n applyEditorSceneRenderingProfilePatch,\n collectEditorSceneRenderingAlphaIndexMigrationTargetIds,\n createEditorSceneBlobShadowPreviewSettings,\n createEditorScenePlanarShadowPreviewSettings,\n createEditorSceneRenderingPanelState,\n createEditorSceneStaticShadowArtifactDraftStore,\n createEditorSceneStaticShadowArtifactDiagnostic,\n createEditorSceneStaticProjectedShadowPreviewSettings,\n normalizeEditorSceneRenderingProfile,\n resolveEditorSceneRenderingAlphaIndexPresetValueMigration,\n type EditorSceneBlobShadowPreviewSettingsInput,\n type EditorScenePlanarShadowPreviewSettingsInput,\n type EditorSceneResolvedShadowMode,\n type EditorSceneRenderingPanelLanguage,\n type EditorSceneRenderingGroupId,\n type EditorSceneRenderingPanelState,\n type EditorSceneRenderingPanelStateInput,\n type EditorSceneRenderingProfile,\n type EditorSceneRenderingProfileActionInput,\n type EditorSceneRenderingStatusTone,\n type EditorSceneRenderingTextureAsset,\n type EditorSceneStaticShadowArtifactDiagnostic,\n type EditorSceneStaticShadowBakeLifecycleState,\n type EditorSceneStaticShadowBakeStats,\n type EditorSceneStaticProjectedShadowPreviewSettingsInput,\n} from '@fps-games/editor-playable-sdk';\nimport {\n createPlayableAssetResourceResolver,\n type PlayableAssetResourceResolutionDiagnostic,\n type PlayableResolvedAssetResource,\n} from '@fps-games/playable-assets';\nimport {\n createShadowMapExperimentConfigSnapshot,\n createShadowMapExperimentPlanSnapshot,\n type ShadowMapExperimentConfig,\n type ShadowMapExperimentPlan,\n} from '@fps-games/playable-rendering/runtime';\nimport {\n createBabylonDefaultPostProcessPipelineController,\n createBabylonEnvironmentTextureController,\n createBlobShadowSystem,\n createPlanarShadowSystem,\n createStaticProjectedShadowBaker,\n createStaticProjectedShadowArtifactSystem,\n createStaticProjectedShadowBakeHashes,\n createStaticProjectedShadowProfileHash,\n resolveBabylonDefaultPostProcessVolumeStack,\n type BabylonDefaultPostProcessPipelineController,\n type BabylonDefaultPostProcessProfile,\n type BabylonDefaultPostProcessResolveResult,\n type BabylonDefaultPostProcessResolveInput,\n type BabylonEnvironmentTextureController,\n type BabylonEnvironmentTextureProfile,\n type BlobShadowOptions,\n type BlobShadowSystem,\n type PlanarShadowOptions,\n type PlanarShadowSystem,\n type StaticProjectedShadowOptions,\n type StaticProjectedShadowArtifact,\n type StaticProjectedShadowArtifactHashInput,\n type StaticProjectedShadowBakeProgress,\n type StaticProjectedShadowArtifactSystem,\n type StaticProjectedShadowBakerAtlasEncoder,\n type StaticProjectedShadowBakerMaskPixelReader,\n type StaticProjectedShadowBakerSdfTileProcessor,\n} from '@fps-games/babylon-renderer';\nimport type { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';\nimport type { Scene } from '@babylonjs/core/scene';\nimport type {\n BabylonEditorProjection,\n BabylonEditorShadowPreviewOptions,\n} from '@fps-games/editor-babylon';\nimport type {\n PlayableLocalEditorRenderingCapability,\n PlayableLocalEditorPatchResult,\n PlayableLocalEditorRenderingPropertyChangeResult,\n} from './playable-local-editor-host.js';\nimport { createStaticProjectedShadowCpuWorkerProcessor } from './static-shadow-cpu-worker.js';\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type PlayableBabylonRenderingStatusTone = EditorSceneRenderingStatusTone;\n\nexport interface PlayableBabylonRenderingDocumentInput<TDocument> {\n document: TDocument;\n}\n\nexport interface PlayableBabylonRenderingContext<TDocument> {\n document: TDocument;\n config: unknown;\n profile: EditorSceneRenderingProfile;\n}\n\nexport interface PlayableBabylonRenderingSceneContext {\n scene?: unknown;\n projection?: unknown;\n renderingAction?: PlayableBabylonRenderingActionProgress | null;\n}\n\nexport interface PlayableBabylonRenderingActionProgress {\n actionId?: string;\n label?: string;\n status?: string;\n statusTone?: EditorSceneRenderingStatusTone;\n statusDetails?: string;\n value?: number;\n indeterminate?: boolean;\n details?: Record<string, unknown>;\n}\n\nexport interface PlayableBabylonRenderingSetConfigInput<TDocument> {\n document: TDocument;\n config: Record<string, unknown>;\n profile: EditorSceneRenderingProfile;\n changedPaths: readonly string[];\n change?: {\n path: string;\n value: unknown;\n };\n action?: EditorSceneRenderingProfileActionInput;\n}\n\nexport interface PlayableBabylonRenderingSetConfigResult<TPatch = unknown> {\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableBabylonRenderingStaticShadowArtifactInput<TDocument> {\n document: TDocument;\n}\n\nexport interface PlayableBabylonRenderingSetStaticShadowArtifactInput<TDocument>\n extends PlayableBabylonRenderingStaticShadowArtifactInput<TDocument> {\n artifact: StaticProjectedShadowArtifact;\n profile: EditorSceneRenderingProfile;\n}\n\nexport type PlayableBabylonRenderingValueResolver<TDocument, TValue> =\n | TValue\n | ((context: PlayableBabylonRenderingContext<TDocument>) => TValue);\n\nexport type PlayableBabylonStaticProjectedShadowPreviewInput =\n EditorSceneStaticProjectedShadowPreviewSettingsInput & {\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n };\n\nexport interface PlayableBabylonRenderingShadowPreviewOptions<TDocument> {\n enabled?: PlayableBabylonRenderingValueResolver<TDocument, boolean | undefined>;\n directionalLightNodeId?: PlayableBabylonRenderingValueResolver<TDocument, string | null | undefined>;\n blob?: PlayableBabylonRenderingValueResolver<TDocument, EditorSceneBlobShadowPreviewSettingsInput | undefined>;\n staticProjected?: PlayableBabylonRenderingValueResolver<TDocument, PlayableBabylonStaticProjectedShadowPreviewInput | undefined>;\n planar?: PlayableBabylonRenderingValueResolver<TDocument, EditorScenePlanarShadowPreviewSettingsInput | undefined>;\n shadowMapExperiment?: PlayableBabylonRenderingValueResolver<TDocument, ShadowMapExperimentPlan | null | undefined>;\n}\n\nexport interface PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch = unknown> {\n getConfig(input: PlayableBabylonRenderingDocumentInput<TDocument>): unknown;\n setConfig(input: PlayableBabylonRenderingSetConfigInput<TDocument>): MaybePromise<void | PlayableBabylonRenderingSetConfigResult<TPatch>>;\n resetConfig?(input: PlayableBabylonRenderingDocumentInput<TDocument>): MaybePromise<void>;\n isDirty?(input: PlayableBabylonRenderingDocumentInput<TDocument>): boolean;\n getPanelState?(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelStateInput;\n getTextureAssets?(input: PlayableBabylonRenderingDocumentInput<TDocument>): readonly EditorSceneRenderingTextureAsset[];\n getLanguage?(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelLanguage;\n getStaticShadowArtifact?(\n input: PlayableBabylonRenderingStaticShadowArtifactInput<TDocument>,\n ): StaticProjectedShadowArtifact | null | undefined;\n setStaticShadowArtifact?(\n input: PlayableBabylonRenderingSetStaticShadowArtifactInput<TDocument>,\n ): MaybePromise<void>;\n readStaticShadowMaskTexturePixels?: StaticProjectedShadowBakerMaskPixelReader;\n processStaticShadowSdfTile?: StaticProjectedShadowBakerSdfTileProcessor;\n encodeStaticShadowAtlasTexture?: StaticProjectedShadowBakerAtlasEncoder;\n getPostProcessResolveInput?(\n context: PlayableBabylonRenderingContext<TDocument>,\n ): BabylonDefaultPostProcessResolveInput | undefined;\n getShadowMapExperimentConfig?(): unknown | null;\n getShadowMapExperimentPlan?(document: TDocument): unknown | null;\n createShadowMapExperimentProfilesPatch?(input: {\n document: TDocument;\n qualityProfile?: string | null;\n behaviorProfile?: string | null;\n }): PlayableLocalEditorPatchResult<TPatch> | null;\n shadowPreview?: false | PlayableBabylonRenderingShadowPreviewOptions<TDocument>;\n}\n\nexport interface PlayableBabylonRenderingAlphaIndexMigrationPatchInput {\n targetIds: string[];\n renderingGroupId: EditorSceneRenderingGroupId;\n fromAlphaIndex: number;\n toAlphaIndex: number;\n}\n\nexport interface PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch = unknown> {\n getConfig(): unknown;\n setConfig(config: Record<string, unknown>): void;\n resetConfig(): void;\n isConfigDirty(): boolean;\n getPanelState(): EditorSceneRenderingPanelStateInput;\n getTextureAssets?(input: PlayableBabylonRenderingDocumentInput<TDocument>): readonly EditorSceneRenderingTextureAsset[];\n getLanguage(input: PlayableBabylonRenderingDocumentInput<TDocument>): EditorSceneRenderingPanelLanguage;\n initialStaticShadowArtifact?: unknown;\n directionalLightNodeId: string;\n isDirectionalLightActive(input: PlayableBabylonRenderingDocumentInput<TDocument>): boolean;\n getAlphaIndexMigrationGameObjects(document: TDocument): readonly unknown[];\n createAlphaIndexMigrationPatch(input: PlayableBabylonRenderingAlphaIndexMigrationPatchInput): TPatch;\n}\n\nexport interface PlayableBabylonRenderingCapabilityFacade<TDocument, TPatch = unknown> {\n capability: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n resetDraft(): void;\n hasDraftChanges(): boolean;\n getActiveStaticShadowArtifact(): StaticProjectedShadowArtifact | null;\n setActiveStaticShadowArtifact(value: unknown): void;\n markActiveStaticShadowArtifactSaved(value?: unknown): void;\n isStaticShadowArtifactDirty(): boolean;\n}\n\nexport interface PlayableBabylonWorldRendering {\n environment: BabylonEnvironmentTextureProfile;\n shadowPreview: BabylonEditorShadowPreviewOptions | null;\n postProcess: BabylonDefaultPostProcessProfile;\n}\n\nexport type PlayableBabylonRenderingEnvironmentTextureDiagnosticStatus =\n | 'none'\n | 'resolved-asset'\n | 'resolved-external'\n | 'missing-asset'\n | 'unsupported-asset'\n | 'format-missing'\n | 'format-unsupported';\n\nexport interface PlayableBabylonRenderingEnvironmentTextureDiagnostic {\n status: PlayableBabylonRenderingEnvironmentTextureDiagnosticStatus;\n textureAssetId: string | null;\n resource: PlayableResolvedAssetResource | null;\n resolutionDiagnostic: PlayableAssetResourceResolutionDiagnostic | null;\n asset: EditorSceneRenderingTextureAsset | null;\n reason: string | null;\n}\n\nexport interface PlayableBabylonRenderingDiagnostics {\n config: unknown;\n profile: EditorSceneRenderingProfile;\n worldRendering: PlayableBabylonWorldRendering;\n environmentTexture: PlayableBabylonRenderingEnvironmentTextureDiagnostic;\n staticShadowArtifact: EditorSceneStaticShadowArtifactDiagnostic;\n postProcess: BabylonDefaultPostProcessResolveResult;\n shadowPreview: BabylonEditorShadowPreviewOptions | null;\n}\n\nexport interface PlayableBabylonRuntimeRenderingControllers {\n environment: BabylonEnvironmentTextureController;\n postProcess: BabylonDefaultPostProcessPipelineController;\n getWorldRendering(): PlayableBabylonWorldRendering | null;\n setWorldRendering(rendering: PlayableBabylonWorldRendering | null | undefined): Promise<void>;\n dispose(): void;\n}\n\nexport interface PlayableBabylonRuntimeRenderingControllerOptions {\n scene: unknown;\n cameras: unknown[];\n initialRendering?: PlayableBabylonWorldRendering | null;\n postProcess?: {\n name?: string;\n };\n}\n\nexport interface PlayableBabylonPlanarShadowPolicyInput extends EditorScenePlanarShadowPreviewSettingsInput {\n directionalLightNodeId?: string | null;\n includeProfileShadowMeshes?: boolean;\n}\n\nexport interface PlayableBabylonResolvedPlanarShadowPolicy {\n planarInput: EditorScenePlanarShadowPreviewSettingsInput;\n planarOptions: PlanarShadowOptions;\n editorShadowPreview: BabylonEditorShadowPreviewOptions;\n}\n\nexport interface PlayableBabylonBlobShadowPolicyInput extends EditorSceneBlobShadowPreviewSettingsInput {\n includeProfileShadowMeshes?: boolean;\n}\n\nexport interface PlayableBabylonStaticProjectedShadowPolicyInput extends EditorSceneStaticProjectedShadowPreviewSettingsInput {\n includeProfileShadowMeshes?: boolean;\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n}\n\nexport interface PlayableBabylonPlanarShadowPolicy {\n resolve(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlayableBabylonResolvedPlanarShadowPolicy;\n createEditorShadowPreview(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): BabylonEditorShadowPreviewOptions;\n createRuntimePlanarOptions(\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlanarShadowOptions;\n createRuntimePlanarShadowSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input?: PlayableBabylonPlanarShadowPolicyInput,\n ): PlanarShadowSystem;\n}\n\nconst PLAYABLE_BABYLON_RENDERING_ALLOWED_SECTIONS = new Set([\n 'rendering-groups',\n 'environment',\n 'post-process',\n 'shadows',\n]);\n\nconst PLAYABLE_BABYLON_ENVIRONMENT_TEXTURE_URL_PATTERN = /\\.(env|hdr|dds|ktx|ktx2)(?:[?#].*)?$/i;\n\nexport function createPlayableBabylonRenderingCapability<TDocument, TPatch = unknown>(\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): PlayableLocalEditorRenderingCapability<TDocument, TPatch> {\n return {\n getWorldRendering(document) {\n return createPlayableBabylonWorldRendering(document, options);\n },\n getRenderingPanelState(document, sceneContext) {\n return createPlayableBabylonRenderingPanelState(document, options, sceneContext);\n },\n async onRenderingAction(input) {\n return handlePlayableBabylonRenderingAction(input, options);\n },\n async onRenderingPropertyChange(input) {\n return handlePlayableBabylonRenderingPropertyChange(input, options);\n },\n getShadowMapExperimentConfig: options.getShadowMapExperimentConfig,\n getShadowMapExperimentPlan: options.getShadowMapExperimentPlan,\n createShadowMapExperimentProfilesPatch: options.createShadowMapExperimentProfilesPatch,\n };\n}\n\nexport function createPlayableBabylonRenderingCapabilityFacade<TDocument, TPatch = unknown>(\n options: PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch>,\n): PlayableBabylonRenderingCapabilityFacade<TDocument, TPatch> {\n const staticShadowArtifactDraft = createEditorSceneStaticShadowArtifactDraftStore(options.initialStaticShadowArtifact);\n return {\n capability: createPlayableBabylonRenderingCapability<TDocument, TPatch>({\n getConfig: () => options.getConfig(),\n setConfig: input => {\n const previousProfile = normalizeEditorSceneRenderingProfile(options.getConfig());\n options.setConfig(input.config);\n const documentPatch = createPlayableBabylonRenderingAlphaIndexMigrationPatch(input, previousProfile, options);\n return documentPatch ? { documentPatch } : undefined;\n },\n resetConfig: () => options.resetConfig(),\n isDirty: () => options.isConfigDirty() || staticShadowArtifactDraft.isDirty(),\n getPanelState: () => options.getPanelState(),\n getTextureAssets: options.getTextureAssets,\n getLanguage: options.getLanguage,\n getStaticShadowArtifact: () => staticShadowArtifactDraft.get() as StaticProjectedShadowArtifact | null,\n setStaticShadowArtifact: ({ artifact }) => { staticShadowArtifactDraft.set(artifact); },\n shadowPreview: {\n directionalLightNodeId: options.directionalLightNodeId,\n enabled: options.isDirectionalLightActive,\n },\n }),\n resetDraft() {\n options.resetConfig();\n staticShadowArtifactDraft.reset();\n },\n hasDraftChanges: () => options.isConfigDirty() || staticShadowArtifactDraft.isDirty(),\n getActiveStaticShadowArtifact: () => staticShadowArtifactDraft.get() as StaticProjectedShadowArtifact | null,\n setActiveStaticShadowArtifact: value => { staticShadowArtifactDraft.set(value); },\n markActiveStaticShadowArtifactSaved: (value = staticShadowArtifactDraft.get()) => {\n staticShadowArtifactDraft.markSaved(value);\n },\n isStaticShadowArtifactDirty: () => staticShadowArtifactDraft.isDirty(),\n };\n}\n\nexport function createPlayableBabylonRenderingAlphaIndexMigrationPatch<TDocument, TPatch>(\n input: PlayableBabylonRenderingSetConfigInput<TDocument>,\n previousProfile: EditorSceneRenderingProfile,\n options: Pick<\n PlayableBabylonRenderingCapabilityFacadeOptions<TDocument, TPatch>,\n 'createAlphaIndexMigrationPatch' | 'getAlphaIndexMigrationGameObjects'\n >,\n): PlayableLocalEditorPatchResult<TPatch> | null {\n if (input.action) return null;\n const migration = resolveEditorSceneRenderingAlphaIndexPresetValueMigration({\n changedPaths: input.changedPaths,\n previousProfile,\n change: input.change,\n });\n if (!migration) return null;\n const targetIds = collectEditorSceneRenderingAlphaIndexMigrationTargetIds(\n options.getAlphaIndexMigrationGameObjects(input.document) as Parameters<\n typeof collectEditorSceneRenderingAlphaIndexMigrationTargetIds\n >[0],\n {\n renderingGroupId: migration.renderingGroupId,\n fromAlphaIndex: migration.fromAlphaIndex,\n },\n );\n if (targetIds.length === 0) return null;\n return {\n label: `Migrate rendering alphaIndex ${migration.fromAlphaIndex} to ${migration.toAlphaIndex}`,\n patch: options.createAlphaIndexMigrationPatch({ targetIds, ...migration }),\n changedIds: targetIds,\n reprojectIds: targetIds,\n };\n}\n\nexport function createPlayableBabylonWorldRendering<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): PlayableBabylonWorldRendering {\n const context = createPlayableBabylonRenderingContext(document, options);\n const postProcess = resolvePlayableBabylonRenderingPostProcess(context, options);\n return {\n environment: createPlayableBabylonEnvironmentTextureProfile(\n context.profile,\n options.getTextureAssets?.({ document }) ?? [],\n ),\n postProcess: postProcess.profile,\n shadowPreview: createPlayableBabylonShadowPreviewOptions(context, options, sceneContext),\n };\n}\n\nexport function createPlayableBabylonRenderingDiagnostics<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): PlayableBabylonRenderingDiagnostics {\n const context = createPlayableBabylonRenderingContext(document, options);\n const textureAssets = options.getTextureAssets?.({ document }) ?? [];\n const postProcess = resolvePlayableBabylonRenderingPostProcess(context, options);\n const shadowPreview = createPlayableBabylonShadowPreviewOptions(context, options, sceneContext);\n return {\n config: context.config,\n profile: context.profile,\n worldRendering: {\n environment: createPlayableBabylonEnvironmentTextureProfile(context.profile, textureAssets),\n postProcess: postProcess.profile,\n shadowPreview,\n },\n environmentTexture: resolvePlayableBabylonRenderingEnvironmentTextureDiagnostic(\n context.profile.environment.texture,\n textureAssets,\n ),\n staticShadowArtifact: createPlayableBabylonStaticShadowArtifactDiagnostic(context, options, sceneContext),\n postProcess,\n shadowPreview,\n };\n}\n\nexport async function createPlayableBabylonRuntimeRenderingControllers(\n options: PlayableBabylonRuntimeRenderingControllerOptions,\n): Promise<PlayableBabylonRuntimeRenderingControllers> {\n let currentRendering = options.initialRendering ?? null;\n const postProcess = createBabylonDefaultPostProcessPipelineController(\n options.scene as never,\n options.cameras as never[],\n currentRendering?.postProcess ?? null,\n options.postProcess,\n );\n let environment: BabylonEnvironmentTextureController | null = null;\n try {\n environment = createBabylonEnvironmentTextureController(options.scene as never);\n await environment.applyProfile(currentRendering?.environment ?? null);\n } catch (error) {\n const allocatedEnvironment = environment;\n const cleanup = createPlayableBabylonRenderingConstructionCleanup([\n ...(allocatedEnvironment ? [() => allocatedEnvironment.dispose()] : []),\n () => postProcess.dispose(),\n ]);\n const cleanupErrors = cleanup();\n if (cleanupErrors.length > 0) {\n throw createPlayableBabylonRenderingConstructionFailure(\n error,\n cleanupErrors,\n () => throwPlayableBabylonRenderingCleanupResult(cleanup()),\n );\n }\n throw error;\n }\n const activeEnvironment = environment;\n return {\n environment: activeEnvironment,\n postProcess,\n getWorldRendering() {\n return currentRendering;\n },\n async setWorldRendering(rendering) {\n const nextRendering = rendering ?? null;\n await activeEnvironment.applyProfile(nextRendering?.environment ?? null);\n postProcess.setProfile(nextRendering?.postProcess ?? null);\n currentRendering = nextRendering;\n },\n dispose() {\n const cleanupErrors: unknown[] = [];\n try { activeEnvironment.dispose(); } catch (error) { cleanupErrors.push(error); }\n try { postProcess.dispose(); } catch (error) { cleanupErrors.push(error); }\n if (cleanupErrors.length === 0) currentRendering = null;\n if (cleanupErrors.length === 1) throw cleanupErrors[0];\n if (cleanupErrors.length > 1) {\n throw Object.assign(new Error('Playable Babylon rendering controller cleanup failed.'), {\n cleanupErrors: Object.freeze(cleanupErrors),\n });\n }\n },\n };\n}\n\nfunction createPlayableBabylonRenderingConstructionFailure(\n failure: unknown,\n cleanupErrors: readonly unknown[],\n retryCleanup: () => void,\n): object {\n const metadata = {\n cleanupErrors: Object.freeze([...cleanupErrors]),\n retryCleanup,\n } as const;\n if (failure && (typeof failure === 'object' || typeof failure === 'function')) {\n try {\n Object.assign(failure, metadata);\n if ((failure as { retryCleanup?: unknown }).retryCleanup === retryCleanup) return failure;\n } catch {\n // A non-extensible primary error is wrapped so cleanup ownership remains reachable.\n }\n }\n return Object.assign(\n new Error(failure instanceof Error ? failure.message : 'Playable Babylon rendering construction failed.'),\n { cause: failure, ...metadata },\n );\n}\n\nfunction createPlayableBabylonRenderingConstructionCleanup(\n operations: readonly (() => void)[],\n): () => readonly unknown[] {\n let pending = [...operations];\n return () => {\n const cleanupErrors: unknown[] = [];\n const retry: (() => void)[] = [];\n for (const operation of pending) {\n try { operation(); }\n catch (error) {\n cleanupErrors.push(error);\n retry.push(operation);\n }\n }\n pending = retry;\n return Object.freeze(cleanupErrors);\n };\n}\n\nfunction throwPlayableBabylonRenderingCleanupResult(cleanupErrors: readonly unknown[]): void {\n if (cleanupErrors.length === 0) return;\n if (cleanupErrors.length === 1) throw cleanupErrors[0];\n throw Object.assign(new Error('Playable Babylon rendering construction cleanup failed.'), {\n cleanupErrors: Object.freeze([...cleanupErrors]),\n });\n}\n\nexport function createPlayableBabylonPlanarShadowPolicy(\n baseInput: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlayableBabylonPlanarShadowPolicy {\n return {\n resolve(profile, input) {\n return resolvePlayableBabylonPlanarShadowPolicy(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createEditorShadowPreview(profile, input) {\n return createPlayableBabylonPlanarShadowPreviewOptions(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createRuntimePlanarOptions(profile, input) {\n return createPlayableBabylonPlanarShadowOptions(\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n createRuntimePlanarShadowSystem(scene, directionalLight, profile, input) {\n return createPlayableBabylonPlanarShadowSystem(\n scene,\n directionalLight,\n profile,\n mergePlayableBabylonPlanarShadowPolicyInput(baseInput, input),\n );\n },\n };\n}\n\nexport function resolvePlayableBabylonPlanarShadowPolicy(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlayableBabylonResolvedPlanarShadowPolicy {\n const planarInput = createPlayableBabylonPlanarShadowPolicyInput(profile, input);\n const planarOptions = createEditorScenePlanarShadowPreviewSettings(\n profile,\n planarInput,\n ) as PlanarShadowOptions;\n return {\n planarInput,\n planarOptions,\n editorShadowPreview: {\n planar: {\n ...planarOptions,\n ...(input.directionalLightNodeId === undefined\n ? {}\n : { directionalLightNodeId: input.directionalLightNodeId }),\n },\n },\n };\n}\n\nexport function createPlayableBabylonPlanarShadowPolicyInput(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): EditorScenePlanarShadowPreviewSettingsInput {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return {\n ...(input.enabled === undefined ? {} : { enabled: input.enabled }),\n ...(input.autoDetectAllCasters === undefined ? {} : { autoDetectAllCasters: input.autoDetectAllCasters }),\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalReceiverPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowReceivers : []),\n ...(input.additionalReceiverPatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n };\n}\n\nexport function createPlayableBabylonPlanarShadowPreviewOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): BabylonEditorShadowPreviewOptions {\n return resolvePlayableBabylonPlanarShadowPolicy(profile, input).editorShadowPreview;\n}\n\nexport function createPlayableBabylonPlanarShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlanarShadowOptions {\n return resolvePlayableBabylonPlanarShadowPolicy(profile, input).planarOptions;\n}\n\nexport function createPlayableBabylonPlanarShadowSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonPlanarShadowPolicyInput = {},\n): PlanarShadowSystem {\n return createPlanarShadowSystem(\n scene as Parameters<typeof createPlanarShadowSystem>[0],\n directionalLight as Parameters<typeof createPlanarShadowSystem>[1],\n createPlayableBabylonPlanarShadowOptions(profile, input),\n );\n}\n\nexport function createPlayableBabylonBlobShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonBlobShadowPolicyInput = {},\n): BlobShadowOptions {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return createEditorSceneBlobShadowPreviewSettings(profile, {\n ...input,\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n }) as BlobShadowOptions;\n}\n\nexport function createPlayableBabylonStaticProjectedShadowOptions(\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonStaticProjectedShadowPolicyInput = {},\n): StaticProjectedShadowOptions & {\n artifact?: StaticProjectedShadowArtifact | null;\n expectedHashes?: StaticProjectedShadowArtifactHashInput | null;\n} {\n const includeProfileShadowMeshes = input.includeProfileShadowMeshes !== false;\n const shadowMeshes = profile.shadowMeshes;\n return {\n ...createEditorSceneStaticProjectedShadowPreviewSettings(profile, {\n ...input,\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.shadowCasters : []),\n ...(input.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(includeProfileShadowMeshes ? shadowMeshes.excludeFromShadow : []),\n ...(input.additionalExcludePatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(input.additionalRootBoundaryPatterns ?? []),\n ),\n }) as StaticProjectedShadowOptions,\n ...(input.artifact === undefined ? {} : { artifact: input.artifact }),\n ...(input.expectedHashes === undefined ? {} : { expectedHashes: input.expectedHashes }),\n };\n}\n\nexport function createPlayableBabylonStaticProjectedShadowArtifactSystem(\n scene: unknown,\n directionalLight: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonStaticProjectedShadowPolicyInput = {},\n): StaticProjectedShadowArtifactSystem {\n const staticProjected = createPlayableBabylonStaticProjectedShadowOptions(profile, input);\n const expectedHashes = staticProjected.expectedHashes ?? createStaticProjectedShadowBakeHashes({\n scene: scene as Parameters<typeof createStaticProjectedShadowBakeHashes>[0]['scene'],\n directionalLight: directionalLight as Parameters<typeof createStaticProjectedShadowBakeHashes>[0]['directionalLight'],\n options: staticProjected,\n });\n return createStaticProjectedShadowArtifactSystem(\n scene as Parameters<typeof createStaticProjectedShadowArtifactSystem>[0],\n staticProjected.artifact ?? null,\n {\n enabled: staticProjected.enabled,\n appearance: staticProjected.appearance,\n bake: {\n blur: staticProjected.bake?.blur,\n },\n expectedHashes,\n debug: staticProjected.debug,\n },\n );\n}\n\nexport function createPlayableBabylonBlobShadowSystem(\n scene: unknown,\n profile: EditorSceneRenderingProfile,\n input: PlayableBabylonBlobShadowPolicyInput = {},\n): BlobShadowSystem {\n return createBlobShadowSystem(\n scene as Parameters<typeof createBlobShadowSystem>[0],\n createPlayableBabylonBlobShadowOptions(profile, input),\n );\n}\n\nexport function createPlayableBabylonRenderingPanelState<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): EditorSceneRenderingPanelState {\n const context = createPlayableBabylonRenderingContext(document, options);\n const baseState = options.getPanelState?.({ document }) ?? {};\n const dirty = baseState.dirty ?? options.isDirty?.({ document });\n const language = options.getLanguage?.({ document }) ?? 'en';\n const renderingAction = readPlayableBabylonRenderingActionProgress(sceneContext.renderingAction);\n const staticShadowBake = renderingAction?.actionId === 'bake-static-shadows'\n ? createPlayableBabylonBakingStaticShadowLifecycleState(renderingAction, language)\n : baseState.staticShadowBake\n ?? createPlayableBabylonStaticShadowBakeLifecycleState(context, options, dirty === true, sceneContext);\n const shadowMapExperiment = createShadowMapExperimentPanelState(\n options.getShadowMapExperimentConfig?.(),\n options.getShadowMapExperimentPlan?.(document),\n ) ?? baseState.shadowMapExperiment ?? null;\n return createEditorSceneRenderingPanelState(context.profile, {\n ...baseState,\n ...(dirty === undefined ? {} : { dirty }),\n staticShadowBake,\n shadowMapExperiment,\n }, {\n language,\n textureAssets: options.getTextureAssets?.({ document }) ?? [],\n });\n}\n\nfunction createPlayableBabylonBakingStaticShadowLifecycleState(\n progress: PlayableBabylonRenderingActionProgress,\n language: EditorSceneRenderingPanelLanguage,\n): EditorSceneStaticShadowBakeLifecycleState {\n const stats = readStaticShadowBakeStats(progress.details);\n const label = progress.label\n ?? (language === 'zh' ? '正在烘焙静态阴影' : 'Baking static shadows');\n return {\n status: 'baking',\n chunkCount: stats?.chunkCount ?? 0,\n reason: progress.status ?? label,\n stats,\n progress: {\n label,\n ...(typeof progress.value === 'number' && Number.isFinite(progress.value)\n ? { value: Math.max(0, Math.min(1, progress.value)) }\n : {}),\n indeterminate: progress.indeterminate !== false && typeof progress.value !== 'number',\n },\n };\n}\n\nfunction createPlayableBabylonStaticShadowBakeLifecycleState<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n dirty: boolean,\n sceneContext: PlayableBabylonRenderingSceneContext,\n): EditorSceneStaticShadowBakeLifecycleState {\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, (\n resolvePlayableBabylonRenderingValue(\n options.shadowPreview === false ? undefined : options.shadowPreview?.staticProjected,\n context,\n ) ?? {}\n ));\n if (!staticOptions.enabled) {\n return {\n status: 'disabled',\n chunkCount: 0,\n reason: 'Static Baked Shadow is disabled.',\n };\n }\n const artifact = options.getStaticShadowArtifact?.({ document: context.document }) ?? null;\n if (!artifact) {\n return {\n status: 'missing',\n chunkCount: 0,\n reason: 'No static shadow bake artifact is available.',\n };\n }\n const diagnostic = createEditorSceneStaticShadowArtifactDiagnostic(\n artifact,\n createPlayableBabylonStaticShadowExpectedHashes(context, options, staticOptions, sceneContext),\n );\n if (diagnostic.status === 'invalid') {\n return {\n status: 'invalid',\n chunkCount: 0,\n reason: diagnostic.reason,\n };\n }\n if (diagnostic.status === 'out-of-date') {\n return {\n status: 'out-of-date',\n chunkCount: diagnostic.chunkCount,\n reason: diagnostic.reason,\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n }\n if (dirty) {\n return {\n status: 'preview-unsaved',\n chunkCount: diagnostic.chunkCount,\n reason: 'Static shadow preview has not been saved yet.',\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n }\n return {\n status: 'up-to-date',\n chunkCount: diagnostic.chunkCount,\n reason: null,\n generatedAt: artifact.generatedAt ?? null,\n stats: createEditorSceneStaticShadowBakeStatsFromArtifact(artifact),\n };\n}\n\nfunction createEditorSceneStaticShadowBakeStatsFromArtifact(\n artifact: StaticProjectedShadowArtifact,\n): EditorSceneStaticShadowBakeStats {\n const isV2 = artifact.version === 2;\n const pageCount = isV2 ? artifact.pages.length : undefined;\n return {\n sourceRootCount: artifact.stats?.sourceRootCount ?? uniqueStaticShadowSourceNodeIds(artifact).length,\n sourceMeshCount: artifact.stats?.sourceMeshCount,\n attemptedChunkCount: artifact.stats?.attemptedChunkCount ?? artifact.chunks.length,\n chunkCount: artifact.stats?.chunkCount ?? artifact.chunks.length,\n textureCount: artifact.stats?.textureCount ?? pageCount ?? artifact.chunks.length,\n skippedChunkCount: artifact.stats?.skippedChunkCount,\n pageCount: artifact.stats?.pageCount ?? pageCount,\n resolution: artifact.stats?.resolution,\n chunkSize: artifact.stats?.chunkSize,\n atlasSize: artifact.stats?.atlasSize,\n atlasUsedPixels: artifact.stats?.atlasUsedPixels,\n atlasAllocatedPixels: artifact.stats?.atlasAllocatedPixels,\n atlasOccupancy: artifact.stats?.atlasOccupancy,\n texelsPerMeter: artifact.stats?.texelsPerMeter,\n effectiveTexelsPerMeter: artifact.stats?.effectiveTexelsPerMeter,\n maxAtlasPages: artifact.stats?.maxAtlasPages,\n sdfRadiusPx: artifact.stats?.sdfRadiusPx,\n spatialChunkSize: artifact.stats?.spatialChunkSize,\n effectiveSpatialChunkSize: artifact.stats?.effectiveSpatialChunkSize,\n targetChunkCount: artifact.stats?.targetChunkCount,\n bakedChunkCount: artifact.stats?.bakedChunkCount,\n reusedChunkCount: artifact.stats?.reusedChunkCount,\n durationMs: artifact.stats?.durationMs,\n };\n}\n\nfunction uniqueStaticShadowSourceNodeIds(artifact: StaticProjectedShadowArtifact): string[] {\n return [...new Set(artifact.chunks.flatMap(chunk => chunk.sourceNodeIds))];\n}\n\nfunction createPlayableBabylonStaticShadowArtifactDiagnostic<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext,\n): EditorSceneStaticShadowArtifactDiagnostic {\n const artifact = options.getStaticShadowArtifact?.({ document: context.document }) ?? null;\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, (\n resolvePlayableBabylonRenderingValue(\n options.shadowPreview === false ? undefined : options.shadowPreview?.staticProjected,\n context,\n ) ?? {}\n ));\n return createEditorSceneStaticShadowArtifactDiagnostic(\n artifact,\n createPlayableBabylonStaticShadowExpectedHashes(context, options, staticOptions, sceneContext),\n );\n}\n\nfunction createPlayableBabylonStaticShadowExpectedHashes<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n staticOptions: StaticProjectedShadowOptions & { expectedHashes?: StaticProjectedShadowArtifactHashInput | null },\n sceneContext: PlayableBabylonRenderingSceneContext,\n): StaticProjectedShadowArtifactHashInput {\n if (staticOptions.expectedHashes) return staticOptions.expectedHashes;\n const scene = readBabylonScene(sceneContext.scene);\n const shadowPreview = options.shadowPreview === false ? {} : options.shadowPreview ?? {};\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(\n shadowPreview.directionalLightNodeId,\n context,\n );\n if (scene) {\n return createStaticProjectedShadowBakeHashes({\n scene,\n directionalLight: resolveBabylonDirectionalLight(sceneContext.projection, directionalLightNodeId ?? null),\n options: staticOptions,\n });\n }\n return {\n profileHash: createStaticProjectedShadowProfileHash(staticOptions),\n };\n}\n\nexport function createPlayableBabylonEnvironmentTextureProfile(\n profile: EditorSceneRenderingProfile,\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): BabylonEnvironmentTextureProfile {\n return {\n texture: resolvePlayableBabylonRenderingEnvironmentTextureResource(\n profile.environment.texture,\n textureAssets,\n ),\n intensity: profile.environment.iblIntensity,\n rotationY: profile.environment.rotationY,\n };\n}\n\nexport function resolvePlayableBabylonRenderingEnvironmentTextureResource(\n textureRef: EditorSceneRenderingProfile['environment']['texture'],\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): PlayableResolvedAssetResource | null {\n if (!textureRef) return null;\n const textureAssetId = typeof textureRef.textureAssetId === 'string'\n ? textureRef.textureAssetId.trim()\n : '';\n if (textureAssetId) {\n const textureAsset = textureAssets.find(texture => texture.id === textureAssetId);\n return textureAsset && isPlayableBabylonRenderingEnvironmentTextureAsset(textureAsset)\n ? textureAsset.resource\n : null;\n }\n const textureUrl = typeof textureRef.url === 'string' ? textureRef.url.trim() : '';\n const resolution = createPlayableAssetResourceResolver({}).resolve({ url: textureUrl });\n return resolution.ok && isPlayableBabylonRenderingEnvironmentTextureResource(resolution.resource)\n ? resolution.resource\n : null;\n}\n\nexport function resolvePlayableBabylonRenderingEnvironmentTextureDiagnostic(\n textureRef: EditorSceneRenderingProfile['environment']['texture'],\n textureAssets: readonly EditorSceneRenderingTextureAsset[] = [],\n): PlayableBabylonRenderingEnvironmentTextureDiagnostic {\n if (!textureRef) {\n return {\n status: 'none',\n textureAssetId: null,\n resource: null,\n resolutionDiagnostic: null,\n asset: null,\n reason: 'No environment texture is configured.',\n };\n }\n const textureAssetId = typeof textureRef.textureAssetId === 'string'\n ? textureRef.textureAssetId.trim()\n : '';\n if (textureAssetId) {\n const textureAsset = textureAssets.find(texture => texture.id === textureAssetId) ?? null;\n if (!textureAsset) {\n return {\n status: 'missing-asset',\n textureAssetId,\n resource: null,\n resolutionDiagnostic: {\n code: 'asset.resource.not-found',\n assetId: textureAssetId,\n format: null,\n transport: null,\n urlSummary: null,\n },\n asset: null,\n reason: `Environment texture asset not found: ${textureAssetId}.`,\n };\n }\n if (!isPlayableBabylonRenderingEnvironmentTextureAsset(textureAsset)) {\n return {\n status: 'unsupported-asset',\n textureAssetId,\n resource: null,\n resolutionDiagnostic: {\n code: 'asset.resource.format-unsupported',\n assetId: textureAssetId,\n format: textureAsset.resource.format,\n transport: textureAsset.resource.transport,\n urlSummary: summarizePlayableBabylonResourceUrl(textureAsset.resource),\n },\n asset: textureAsset,\n reason: `Texture asset is not marked as an environment texture: ${textureAssetId}.`,\n };\n }\n return {\n status: 'resolved-asset',\n textureAssetId,\n resource: textureAsset.resource,\n resolutionDiagnostic: null,\n asset: textureAsset,\n reason: null,\n };\n }\n const textureUrl = typeof textureRef.url === 'string' ? textureRef.url.trim() : '';\n if (!textureUrl) {\n return {\n status: 'none',\n textureAssetId: null,\n resource: null,\n resolutionDiagnostic: null,\n asset: null,\n reason: 'No environment texture URL is configured.',\n };\n }\n const resolution = createPlayableAssetResourceResolver({}).resolve({ url: textureUrl });\n if (!resolution.ok) {\n return {\n status: resolution.diagnostic.code === 'asset.resource.format-missing'\n ? 'format-missing'\n : 'format-unsupported',\n textureAssetId: null,\n resource: null,\n resolutionDiagnostic: resolution.diagnostic,\n asset: null,\n reason: resolution.diagnostic.code === 'asset.resource.format-missing'\n ? 'Environment texture resource format is missing.'\n : 'Environment texture resource format is unsupported.',\n };\n }\n if (!isPlayableBabylonRenderingEnvironmentTextureResource(resolution.resource)) {\n return {\n status: 'format-unsupported',\n textureAssetId: null,\n resource: null,\n resolutionDiagnostic: {\n code: 'asset.resource.format-unsupported',\n assetId: null,\n format: resolution.resource.format,\n transport: resolution.resource.transport,\n urlSummary: summarizePlayableBabylonResourceUrl(resolution.resource),\n },\n asset: null,\n reason: 'Environment texture resource must use .env, .hdr, .dds, .ktx, or .ktx2.',\n };\n }\n return {\n status: 'resolved-external',\n textureAssetId: null,\n resource: resolution.resource,\n resolutionDiagnostic: null,\n asset: null,\n reason: null,\n };\n}\n\nexport function isPlayableBabylonRenderingEnvironmentTextureAsset(\n texture: EditorSceneRenderingTextureAsset,\n): boolean {\n if (texture.capabilities?.environmentTexture === true) return true;\n if (texture.capabilities?.environmentTexture === false) return false;\n if (texture.usage === 'environment') return true;\n return isPlayableBabylonRenderingEnvironmentTextureResource(texture.resource);\n}\n\nexport function isPlayableBabylonRenderingEnvironmentTextureResource(\n resource: PlayableResolvedAssetResource,\n): boolean {\n return PLAYABLE_BABYLON_ENVIRONMENT_TEXTURE_URL_PATTERN.test(resource.format);\n}\n\nfunction summarizePlayableBabylonResourceUrl(resource: PlayableResolvedAssetResource): string {\n if (resource.transport === 'data-url') return 'data:<redacted>';\n if (resource.transport === 'blob-url') return 'blob:<redacted>';\n return resource.url.length <= 160 ? resource.url : `${resource.url.slice(0, 157)}...`;\n}\n\nfunction createPlayableBabylonRenderingContext<TDocument>(\n document: TDocument,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n): PlayableBabylonRenderingContext<TDocument> {\n const config = options.getConfig({ document });\n return {\n document,\n config,\n profile: normalizeEditorSceneRenderingProfile(config),\n };\n}\n\nfunction resolvePlayableBabylonRenderingPostProcess<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n): BabylonDefaultPostProcessResolveResult {\n return resolveBabylonDefaultPostProcessVolumeStack(\n context.config,\n options.getPostProcessResolveInput?.(context),\n );\n}\n\nfunction createPlayableBabylonShadowPreviewOptions<TDocument>(\n context: PlayableBabylonRenderingContext<TDocument>,\n options: PlayableBabylonRenderingCapabilityOptions<TDocument>,\n sceneContext: PlayableBabylonRenderingSceneContext = {},\n): BabylonEditorShadowPreviewOptions | null {\n if (options.shadowPreview === false) return null;\n const shadowPreview = options.shadowPreview ?? {};\n const blobInput = resolvePlayableBabylonRenderingValue(shadowPreview.blob, context) ?? {};\n const staticInput = resolvePlayableBabylonRenderingValue(shadowPreview.staticProjected, context) ?? {};\n const planarInput = resolvePlayableBabylonRenderingValue(shadowPreview.planar, context) ?? {};\n const shadowMapExperiment = resolvePlayableBabylonRenderingValue(\n shadowPreview.shadowMapExperiment,\n context,\n );\n const staticArtifact = staticInput.artifact === undefined\n ? options.getStaticShadowArtifact?.({ document: context.document }) ?? null\n : staticInput.artifact;\n const enabled = resolvePlayableBabylonRenderingValue(shadowPreview.enabled, context);\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(\n shadowPreview.directionalLightNodeId,\n context,\n );\n const planarPreview = createPlayableBabylonPlanarShadowPreviewOptions(context.profile, {\n ...planarInput,\n ...(enabled === undefined ? {} : { enabled }),\n ...(directionalLightNodeId === undefined ? {} : { directionalLightNodeId }),\n });\n const blobPreview = createPlayableBabylonBlobShadowOptions(context.profile, {\n ...blobInput,\n ...(enabled === undefined ? {} : { enabled }),\n });\n const staticPreview = createPlayableBabylonStaticProjectedShadowOptions(context.profile, {\n ...staticInput,\n artifact: staticArtifact,\n ...(enabled === undefined ? {} : { enabled }),\n });\n const expectedHashes = createPlayableBabylonStaticShadowExpectedHashes(context, options, staticPreview, sceneContext);\n const filteredStaticArtifact = resolvePlayableBabylonStaticShadowArtifactForExpectedHashes(\n staticPreview.artifact ?? null,\n expectedHashes,\n );\n return {\n defaultMode: context.profile.shadows.defaultMode as EditorSceneResolvedShadowMode,\n blob: blobPreview,\n staticProjected: {\n ...staticPreview,\n artifact: filteredStaticArtifact,\n ...(readBabylonScene(sceneContext.scene) ? { expectedHashes } : {}),\n ...(directionalLightNodeId === undefined ? {} : { directionalLightNodeId }),\n },\n planar: planarPreview.planar ?? null,\n shadowMapExperiment: shadowMapExperiment ?? null,\n };\n}\n\nfunction resolvePlayableBabylonStaticShadowArtifactForExpectedHashes(\n artifact: StaticProjectedShadowArtifact | null,\n expectedHashes: StaticProjectedShadowArtifactHashInput,\n): StaticProjectedShadowArtifact | null {\n if (!artifact) return null;\n const diagnostic = createEditorSceneStaticShadowArtifactDiagnostic(artifact, expectedHashes);\n return diagnostic.status === 'up-to-date' ? artifact : null;\n}\n\nasync function handlePlayableBabylonRenderingPropertyChange<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n const sectionId = typeof input.sectionId === 'string' ? input.sectionId : '';\n if (!PLAYABLE_BABYLON_RENDERING_ALLOWED_SECTIONS.has(sectionId)) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering section: ${sectionId || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n const path = typeof input.path === 'string' ? input.path : '';\n if (path === 'shadowMapExperiment.qualityProfile') {\n return handleShadowMapExperimentQualityProfileChange(input, options);\n }\n const currentConfig = options.getConfig({ document: input.document });\n const patch = applyEditorSceneRenderingProfilePatch(currentConfig, {\n [path]: input.value,\n });\n if (patch.changedPaths.length === 0) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering field: ${path || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n const setConfigResult = await options.setConfig({\n document: input.document,\n config: patch.config,\n changedPaths: patch.changedPaths,\n profile: patch.normalized,\n change: {\n path,\n value: input.value,\n },\n });\n const dirty = options.isDirty?.({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty,\n status: `Rendering draft updated: ${patch.changedPaths.join(', ')}`,\n statusTone: dirty === false ? 'success' : 'warning',\n documentPatch: readPlayableBabylonRenderingDocumentPatch(setConfigResult),\n });\n}\n\nfunction createShadowMapExperimentPanelState(\n configValue: unknown,\n planValue: unknown,\n): EditorSceneRenderingPanelStateInput['shadowMapExperiment'] {\n const config = readShadowMapExperimentConfig(configValue);\n const plan = readShadowMapExperimentPlan(planValue);\n if (!config && !plan) return null;\n return {\n configured: !!config,\n enabled: plan?.enabled ?? config?.enabled ?? false,\n qualityProfileId: plan?.qualityProfileId ?? config?.defaultQualityProfile ?? null,\n qualityProfileIds: config ? Object.keys(config.qualityProfiles).sort() : [],\n maps: plan ? { ...plan.generator.maps } : null,\n filter: plan?.generator.filter ?? null,\n bias: plan?.generator.bias ?? null,\n normalBias: plan?.generator.normalBias ?? null,\n darkness: plan?.generator.darkness ?? null,\n };\n}\n\nfunction readShadowMapExperimentConfig(value: unknown): ShadowMapExperimentConfig | null {\n try {\n return createShadowMapExperimentConfigSnapshot(value);\n } catch {\n return null;\n }\n}\n\nfunction readShadowMapExperimentPlan(value: unknown): ShadowMapExperimentPlan | null {\n try {\n return createShadowMapExperimentPlanSnapshot(value);\n } catch {\n return null;\n }\n}\n\nfunction handleShadowMapExperimentQualityProfileChange<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): PlayableLocalEditorRenderingPropertyChangeResult<TPatch> {\n const language = options.getLanguage?.({ document: input.document }) ?? 'en';\n const qualityProfile = typeof input.value === 'string' ? input.value.trim() : '';\n const config = readShadowMapExperimentConfig(options.getShadowMapExperimentConfig?.());\n if (!qualityProfile || !config || !Object.prototype.hasOwnProperty.call(config.qualityProfiles, qualityProfile)) {\n return createPlayableBabylonRenderingResult(false, {\n status: language === 'zh'\n ? `未知的实时阴影质量档:${qualityProfile || '(空)'}`\n : `Unknown Shadow Map quality profile: ${qualityProfile || '(empty)'}`,\n statusTone: 'warning',\n });\n }\n const patch = options.createShadowMapExperimentProfilesPatch?.({\n document: input.document,\n qualityProfile,\n });\n if (!patch) {\n return createPlayableBabylonRenderingResult(false, {\n status: language === 'zh'\n ? '当前项目的场景阴影质量档为只读。'\n : 'Scene Shadow Map quality profile is read-only for this project.',\n statusTone: 'warning',\n });\n }\n return createPlayableBabylonRenderingResult(true, {\n status: language === 'zh'\n ? `实时阴影质量档:${qualityProfile}`\n : `Shadow Map quality profile: ${qualityProfile}`,\n statusTone: 'success',\n documentPatch: patch,\n });\n}\n\nasync function handlePlayableBabylonRenderingAction<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n const actionId = typeof input.actionId === 'string' ? input.actionId : '';\n if (actionId === 'bake-static-shadows') {\n return bakePlayableBabylonStaticShadows(input, options);\n }\n if (actionId === 'rendering-alpha-preset.add' || actionId === 'rendering-alpha-preset.delete') {\n const actionInput = createPlayableBabylonRenderingProfileActionInput(actionId, input);\n const currentConfig = options.getConfig({ document: input.document });\n const patch = applyEditorSceneRenderingProfileAction(currentConfig, actionInput);\n if (patch.changedPaths.length === 0) {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering action: ${actionId}`,\n statusTone: 'warning',\n });\n }\n const setConfigResult = await options.setConfig({\n document: input.document,\n config: patch.config,\n changedPaths: patch.changedPaths,\n profile: patch.normalized,\n action: actionInput,\n });\n const dirty = options.isDirty?.({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty,\n status: `Rendering draft updated: ${patch.changedPaths.join(', ')}`,\n statusTone: dirty === false ? 'success' : 'warning',\n documentPatch: readPlayableBabylonRenderingDocumentPatch(setConfigResult),\n });\n }\n if (actionId !== 'revert-rendering') {\n return createPlayableBabylonRenderingResult(false, {\n status: `Unsupported rendering action: ${actionId || '(unknown)'}`,\n statusTone: 'warning',\n });\n }\n if (!options.resetConfig) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Rendering reset is not available for this project.',\n statusTone: 'warning',\n });\n }\n if (options.isDirty?.({ document: input.document }) === false) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Rendering already matches saved settings.',\n statusTone: 'default',\n });\n }\n await options.resetConfig({ document: input.document });\n return createPlayableBabylonRenderingResult(true, {\n dirty: options.isDirty?.({ document: input.document }) ?? false,\n status: 'Rendering draft reverted to saved settings.',\n statusTone: 'success',\n });\n}\n\nasync function bakePlayableBabylonStaticShadows<TDocument, TPatch>(\n input: Record<string, unknown> & { document: TDocument },\n options: PlayableBabylonRenderingCapabilityOptions<TDocument, TPatch>,\n): Promise<PlayableLocalEditorRenderingPropertyChangeResult<TPatch>> {\n if (!options.setStaticShadowArtifact) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static shadow artifact storage is not available for this project.',\n statusTone: 'warning',\n });\n }\n const scene = readBabylonScene(input.scene);\n if (!scene) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static shadow bake requires the active Babylon scene.',\n statusTone: 'warning',\n });\n }\n const context = createPlayableBabylonRenderingContext(input.document, options);\n const shadowPreview = options.shadowPreview === false ? {} : options.shadowPreview ?? {};\n const staticInput = resolvePlayableBabylonRenderingValue(shadowPreview.staticProjected, context) ?? {};\n const directionalLightNodeId = resolvePlayableBabylonRenderingValue(shadowPreview.directionalLightNodeId, context);\n const staticOptions = createPlayableBabylonStaticProjectedShadowOptions(context.profile, {\n ...staticInput,\n ...(staticInput.enabled === undefined ? {} : { enabled: staticInput.enabled }),\n });\n if (!staticOptions.enabled) {\n return createPlayableBabylonRenderingResult(false, {\n status: 'Static Baked Shadow is disabled.',\n statusTone: 'warning',\n });\n }\n const reportProgress = readPlayableBabylonRenderingProgressReporter(input.reportProgress);\n const previousArtifact = options.getStaticShadowArtifact?.({ document: input.document }) ?? null;\n const workerProcessor = options.processStaticShadowSdfTile ? null : createStaticProjectedShadowCpuWorkerProcessor();\n let artifact: StaticProjectedShadowArtifact;\n try {\n artifact = await createStaticProjectedShadowBaker({\n scene,\n directionalLight: resolveBabylonDirectionalLight(input.projection, directionalLightNodeId ?? null),\n options: staticOptions,\n previousArtifact,\n readMaskTexturePixels: options.readStaticShadowMaskTexturePixels,\n processSdfTile: options.processStaticShadowSdfTile ?? workerProcessor?.processSdfTile,\n encodeAtlasTexture: options.encodeStaticShadowAtlasTexture,\n yieldToMainThread: async (progress) => {\n await reportProgress?.(createPlayableBabylonStaticShadowBakeProgress(progress, staticOptions));\n },\n onProgress: async (progress) => {\n await reportProgress?.(createPlayableBabylonStaticShadowBakeProgress(progress, staticOptions));\n },\n }).bake();\n } finally {\n workerProcessor?.dispose();\n }\n await reportProgress?.({\n actionId: 'bake-static-shadows',\n label: 'Writing static shadow artifact',\n status: 'Writing static shadow artifact...',\n value: 0.98,\n indeterminate: false,\n details: createStaticShadowArtifactStatsDetails(artifact),\n });\n await options.setStaticShadowArtifact({\n document: input.document,\n artifact,\n profile: context.profile,\n });\n const statusDetails = formatStaticShadowBakeResultDetails(artifact);\n return createPlayableBabylonRenderingResult(true, {\n dirty: options.isDirty?.({ document: input.document }),\n status: `Baked ${artifact.chunks.length} static shadow chunk${artifact.chunks.length === 1 ? '' : 's'} from ${artifact.stats?.sourceRootCount ?? 0} static caster${artifact.stats?.sourceRootCount === 1 ? '' : 's'}.`,\n statusTone: 'success',\n statusDetails,\n details: createStaticShadowArtifactActionDetails(artifact),\n });\n}\n\nfunction readPlayableBabylonRenderingProgressReporter(\n value: unknown,\n): ((progress: PlayableBabylonRenderingActionProgress) => MaybePromise<void>) | null {\n return typeof value === 'function'\n ? value as (progress: PlayableBabylonRenderingActionProgress) => MaybePromise<void>\n : null;\n}\n\nfunction createPlayableBabylonStaticShadowBakeProgress(\n progress: StaticProjectedShadowBakeProgress,\n options: ReturnType<typeof createPlayableBabylonStaticProjectedShadowOptions>,\n): PlayableBabylonRenderingActionProgress {\n const total = Math.max(0, progress.totalChunkCount);\n const completed = Math.max(0, progress.completedChunkCount);\n const chunkProgress = total > 0 ? completed / total : 1;\n const atlasPageCount = Math.max(0, progress.atlasPageCount ?? 0);\n const encodedPageCount = Math.max(0, progress.encodedTextureCount);\n const value = progress.phase === 'collect'\n ? 0.08\n : progress.phase === 'pack'\n ? 0.92\n : progress.phase === 'encode'\n ? 0.92 + (atlasPageCount > 0 ? Math.min(encodedPageCount / atlasPageCount, 1) * 0.05 : 0.03)\n : progress.phase === 'complete'\n ? 0.96\n : 0.12 + chunkProgress * 0.78;\n const status = progress.phase === 'collect'\n ? `Collecting ${progress.sourceRootCount} static shadow casters...`\n : progress.phase === 'reuse'\n ? `Reusing ${progress.reusedChunkCount ?? 0} unchanged static shadow chunks...`\n : progress.phase === 'sdf'\n ? `Generating static shadow SDF ${Math.min(completed + 1, total)} of ${total}...`\n : progress.phase === 'pack'\n ? `Packing ${progress.encodedTextureCount} static shadow chunks into ${atlasPageCount} atlas page${atlasPageCount === 1 ? '' : 's'}...`\n : progress.phase === 'encode'\n ? `Encoding static shadow atlas page ${Math.min(encodedPageCount + 1, atlasPageCount || encodedPageCount + 1)} of ${atlasPageCount || encodedPageCount + 1}...`\n : progress.phase === 'complete'\n ? `Finishing ${encodedPageCount} static shadow atlas page${encodedPageCount === 1 ? '' : 's'}...`\n : `Baking static shadow chunk ${Math.min(completed + 1, total)} of ${total}...`;\n return {\n actionId: 'bake-static-shadows',\n label: total > 0\n ? `Static shadow bake ${Math.min(completed, total)} / ${total}`\n : 'Static shadow bake',\n status,\n value,\n indeterminate: total === 0 && progress.phase !== 'complete',\n details: {\n phase: progress.phase,\n sourceRootCount: progress.sourceRootCount,\n sourceMeshCount: progress.sourceMeshCount,\n attemptedChunkCount: progress.totalChunkCount,\n chunkCount: progress.completedChunkCount,\n textureCount: progress.encodedTextureCount,\n pageCount: progress.atlasPageCount,\n resolution: options.bake?.resolution,\n chunkSize: options.bake?.spatialChunkSize,\n atlasSize: options.bake?.atlasSize,\n texelsPerMeter: options.bake?.texelsPerMeter,\n effectiveTexelsPerMeter: progress.effectiveTexelsPerMeter,\n maxAtlasPages: options.bake?.maxAtlasPages,\n sdfRadiusPx: options.bake?.sdfRadiusPx,\n spatialChunkSize: options.bake?.spatialChunkSize,\n effectiveSpatialChunkSize: progress.effectiveSpatialChunkSize,\n targetChunkCount: options.bake?.targetChunkCount,\n bakedChunkCount: progress.bakedChunkCount,\n reusedChunkCount: progress.reusedChunkCount,\n ...(progress.currentChunkId ? { currentChunkId: progress.currentChunkId } : {}),\n },\n };\n}\n\nfunction createStaticShadowArtifactStatsDetails(\n artifact: StaticProjectedShadowArtifact,\n): Record<string, unknown> {\n const isV2 = artifact.version === 2;\n const pageCount = isV2 ? artifact.pages.length : undefined;\n return {\n phase: 'complete',\n sourceRootCount: artifact.stats?.sourceRootCount ?? 0,\n sourceMeshCount: artifact.stats?.sourceMeshCount ?? 0,\n attemptedChunkCount: artifact.stats?.attemptedChunkCount ?? artifact.chunks.length,\n chunkCount: artifact.stats?.chunkCount ?? artifact.chunks.length,\n textureCount: artifact.stats?.textureCount ?? pageCount ?? artifact.chunks.length,\n skippedChunkCount: artifact.stats?.skippedChunkCount ?? 0,\n pageCount: artifact.stats?.pageCount ?? pageCount,\n resolution: artifact.stats?.resolution,\n chunkSize: artifact.stats?.chunkSize,\n atlasSize: artifact.stats?.atlasSize,\n atlasUsedPixels: artifact.stats?.atlasUsedPixels,\n atlasAllocatedPixels: artifact.stats?.atlasAllocatedPixels,\n atlasOccupancy: artifact.stats?.atlasOccupancy,\n texelsPerMeter: artifact.stats?.texelsPerMeter,\n effectiveTexelsPerMeter: artifact.stats?.effectiveTexelsPerMeter,\n maxAtlasPages: artifact.stats?.maxAtlasPages,\n sdfRadiusPx: artifact.stats?.sdfRadiusPx,\n spatialChunkSize: artifact.stats?.spatialChunkSize,\n effectiveSpatialChunkSize: artifact.stats?.effectiveSpatialChunkSize,\n targetChunkCount: artifact.stats?.targetChunkCount,\n bakedChunkCount: artifact.stats?.bakedChunkCount,\n reusedChunkCount: artifact.stats?.reusedChunkCount,\n durationMs: artifact.stats?.durationMs,\n };\n}\n\nfunction createStaticShadowArtifactActionDetails(\n artifact: StaticProjectedShadowArtifact,\n): Record<string, unknown> {\n const sourceNodeIds = createUniqueStringList(\n artifact.chunks.flatMap(chunk => Array.isArray(chunk.sourceNodeIds) ? chunk.sourceNodeIds : []),\n );\n return {\n ...createStaticShadowArtifactStatsDetails(artifact),\n sourceNodeIds,\n };\n}\n\nfunction formatStaticShadowBakeResultDetails(artifact: StaticProjectedShadowArtifact): string {\n const stats = artifact.stats;\n const sourceRootCount = stats?.sourceRootCount ?? 0;\n const sourceMeshCount = stats?.sourceMeshCount ?? 0;\n const chunkCount = stats?.chunkCount ?? artifact.chunks.length;\n const atlasPageCount = stats?.pageCount ?? (artifact.version === 2 ? artifact.pages.length : stats?.textureCount ?? artifact.chunks.length);\n const effectiveTexelsPerMeter = stats?.effectiveTexelsPerMeter;\n const atlasSize = stats?.atlasSize;\n const atlasOccupancy = stats?.atlasOccupancy;\n const sdfRadiusPx = stats?.sdfRadiusPx;\n const duration = typeof stats?.durationMs === 'number' ? `, ${Math.round(stats.durationMs)}ms` : '';\n const parts = [\n `Static casters: ${sourceRootCount}`,\n `Bake meshes: ${sourceMeshCount}`,\n `Chunks: ${chunkCount}`,\n `Atlas pages: ${atlasPageCount}${duration}`,\n ];\n if (typeof effectiveTexelsPerMeter === 'number') parts.push(`Effective texels/m: ${formatNumberForStatus(effectiveTexelsPerMeter)}`);\n if (typeof atlasSize === 'number') parts.push(`Atlas: ${atlasSize}px`);\n if (typeof atlasOccupancy === 'number') parts.push(`Atlas occupancy: ${formatNumberForStatus(Math.max(0, Math.min(1, atlasOccupancy)) * 100)}%`);\n if (typeof sdfRadiusPx === 'number') parts.push(`SDF radius: ${formatNumberForStatus(sdfRadiusPx)}px`);\n if (typeof stats?.bakedChunkCount === 'number' || typeof stats?.reusedChunkCount === 'number') {\n parts.push(`Baked/reused: ${stats?.bakedChunkCount ?? 0}/${stats?.reusedChunkCount ?? 0}`);\n }\n return parts.join(' · ');\n}\n\nfunction createUniqueStringList(values: readonly unknown[]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const value of values) {\n if (typeof value !== 'string' || value.length === 0 || seen.has(value)) continue;\n seen.add(value);\n result.push(value);\n }\n return result;\n}\n\nfunction formatNumberForStatus(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n}\n\nfunction createPlayableBabylonRenderingResult<TPatch = unknown>(\n changed: boolean,\n input: {\n dirty?: boolean;\n status: string;\n statusTone: EditorSceneRenderingStatusTone;\n statusDetails?: string;\n details?: Record<string, unknown>;\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n },\n): PlayableLocalEditorRenderingPropertyChangeResult<TPatch> {\n return {\n changed,\n refreshWorldRendering: changed,\n ...(input.dirty === undefined ? {} : { dirty: input.dirty }),\n status: input.status,\n statusTone: input.statusTone,\n ...(input.statusDetails ? { statusDetails: input.statusDetails } : {}),\n ...(input.details ? { details: input.details } : {}),\n ...(input.documentPatch === undefined ? {} : { documentPatch: input.documentPatch }),\n };\n}\n\nfunction createPlayableBabylonRenderingProfileActionInput(\n actionId: string,\n input: Record<string, unknown>,\n): EditorSceneRenderingProfileActionInput {\n const params = readRecord(input.params);\n return {\n actionId,\n renderingGroupId: params.renderingGroupId ?? input.renderingGroupId,\n presetIndex: params.presetIndex ?? input.presetIndex,\n };\n}\n\nfunction readPlayableBabylonRenderingDocumentPatch<TPatch>(\n value: void | PlayableBabylonRenderingSetConfigResult<TPatch>,\n): PlayableLocalEditorPatchResult<TPatch> | null | undefined {\n return value && typeof value === 'object' ? value.documentPatch : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction resolvePlayableBabylonRenderingValue<TDocument, TValue>(\n value: PlayableBabylonRenderingValueResolver<TDocument, TValue> | undefined,\n context: PlayableBabylonRenderingContext<TDocument>,\n): TValue | undefined {\n return typeof value === 'function'\n ? (value as (context: PlayableBabylonRenderingContext<TDocument>) => TValue)(context)\n : value;\n}\n\nfunction readPlayableBabylonRenderingActionProgress(value: unknown): PlayableBabylonRenderingActionProgress | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return {\n ...(typeof record.actionId === 'string' ? { actionId: record.actionId } : {}),\n ...(typeof record.label === 'string' ? { label: record.label } : {}),\n ...(typeof record.status === 'string' ? { status: record.status } : {}),\n ...(isEditorSceneRenderingStatusTone(record.statusTone) ? { statusTone: record.statusTone } : {}),\n ...(typeof record.statusDetails === 'string' ? { statusDetails: record.statusDetails } : {}),\n ...(typeof record.value === 'number' && Number.isFinite(record.value) ? { value: record.value } : {}),\n ...(typeof record.indeterminate === 'boolean' ? { indeterminate: record.indeterminate } : {}),\n ...(record.details && typeof record.details === 'object' && !Array.isArray(record.details)\n ? { details: record.details as Record<string, unknown> }\n : {}),\n };\n}\n\nfunction isEditorSceneRenderingStatusTone(value: unknown): value is EditorSceneRenderingStatusTone {\n return value === 'default' || value === 'success' || value === 'warning' || value === 'error';\n}\n\nfunction readStaticShadowBakeStats(value: unknown): EditorSceneStaticShadowBakeStats | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const stats: EditorSceneStaticShadowBakeStats = {};\n if (typeof record.phase === 'string' && record.phase.trim()) {\n stats.phase = record.phase.trim();\n }\n setOptionalNonNegativeNumber(stats, 'sourceRootCount', record.sourceRootCount);\n setOptionalNonNegativeNumber(stats, 'sourceMeshCount', record.sourceMeshCount);\n setOptionalNonNegativeNumber(stats, 'attemptedChunkCount', record.attemptedChunkCount);\n setOptionalNonNegativeNumber(stats, 'chunkCount', record.chunkCount);\n setOptionalNonNegativeNumber(stats, 'textureCount', record.textureCount);\n setOptionalNonNegativeNumber(stats, 'skippedChunkCount', record.skippedChunkCount);\n setOptionalNonNegativeNumber(stats, 'pageCount', record.pageCount);\n setOptionalPositiveNumber(stats, 'resolution', record.resolution);\n setOptionalPositiveNumber(stats, 'chunkSize', record.chunkSize);\n setOptionalPositiveNumber(stats, 'atlasSize', record.atlasSize);\n setOptionalNonNegativeNumber(stats, 'atlasUsedPixels', record.atlasUsedPixels);\n setOptionalNonNegativeNumber(stats, 'atlasAllocatedPixels', record.atlasAllocatedPixels);\n setOptionalRatio(stats, 'atlasOccupancy', record.atlasOccupancy);\n setOptionalPositiveNumber(stats, 'texelsPerMeter', record.texelsPerMeter);\n setOptionalPositiveNumber(stats, 'effectiveTexelsPerMeter', record.effectiveTexelsPerMeter);\n setOptionalPositiveNumber(stats, 'maxAtlasPages', record.maxAtlasPages);\n setOptionalNonNegativeNumber(stats, 'sdfRadiusPx', record.sdfRadiusPx);\n setOptionalPositiveNumber(stats, 'spatialChunkSize', record.spatialChunkSize);\n setOptionalPositiveNumber(stats, 'effectiveSpatialChunkSize', record.effectiveSpatialChunkSize);\n setOptionalPositiveNumber(stats, 'targetChunkCount', record.targetChunkCount);\n setOptionalNonNegativeNumber(stats, 'bakedChunkCount', record.bakedChunkCount);\n setOptionalNonNegativeNumber(stats, 'reusedChunkCount', record.reusedChunkCount);\n setOptionalNonNegativeNumber(stats, 'durationMs', record.durationMs);\n if (typeof record.currentChunkId === 'string' && record.currentChunkId.trim()) {\n stats.currentChunkId = record.currentChunkId.trim();\n }\n return Object.keys(stats).length > 0 ? stats : null;\n}\n\nfunction setOptionalNonNegativeNumber(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction setOptionalPositiveNumber(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction setOptionalRatio(\n target: EditorSceneStaticShadowBakeStats,\n key: keyof EditorSceneStaticShadowBakeStats,\n value: unknown,\n): void {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0 && value <= 1) {\n (target as Record<string, unknown>)[key] = value;\n }\n}\n\nfunction readBabylonScene(value: unknown): Scene | null {\n return value && typeof value === 'object' && Array.isArray((value as { meshes?: unknown }).meshes)\n ? value as Scene\n : null;\n}\n\nfunction resolveBabylonDirectionalLight(\n projectionValue: unknown,\n directionalLightNodeId: string | null,\n): DirectionalLight | null {\n if (!directionalLightNodeId) return null;\n const projection = projectionValue as BabylonEditorProjection | null | undefined;\n const projected = projection?.getProjectedNode?.(directionalLightNodeId);\n const candidates = [\n projected?.root,\n ...(Array.isArray(projected?.runtimeObjects) ? projected.runtimeObjects : []),\n ];\n for (const candidate of candidates) {\n if (candidate && typeof candidate === 'object' && (candidate as DirectionalLight).getClassName?.() === 'DirectionalLight') {\n return candidate as DirectionalLight;\n }\n }\n return null;\n}\n\nfunction mergePlayableBabylonPlanarShadowPolicyInput(\n base: PlayableBabylonPlanarShadowPolicyInput,\n input: PlayableBabylonPlanarShadowPolicyInput | undefined,\n): PlayableBabylonPlanarShadowPolicyInput {\n const merged: PlayableBabylonPlanarShadowPolicyInput = {\n additionalCasterIncludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalCasterIncludePatterns ?? []),\n ...(input?.additionalCasterIncludePatterns ?? []),\n ),\n additionalExcludePatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalExcludePatterns ?? []),\n ...(input?.additionalExcludePatterns ?? []),\n ),\n additionalReceiverPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalReceiverPatterns ?? []),\n ...(input?.additionalReceiverPatterns ?? []),\n ),\n additionalRootBoundaryPatterns: mergePlayableBabylonPlanarShadowPatterns(\n ...(base.additionalRootBoundaryPatterns ?? []),\n ...(input?.additionalRootBoundaryPatterns ?? []),\n ),\n };\n const enabled = input?.enabled ?? base.enabled;\n if (enabled !== undefined) merged.enabled = enabled;\n const autoDetectAllCasters = input?.autoDetectAllCasters ?? base.autoDetectAllCasters;\n if (autoDetectAllCasters !== undefined) merged.autoDetectAllCasters = autoDetectAllCasters;\n const includeProfileShadowMeshes = input?.includeProfileShadowMeshes ?? base.includeProfileShadowMeshes;\n if (includeProfileShadowMeshes !== undefined) merged.includeProfileShadowMeshes = includeProfileShadowMeshes;\n const directionalLightNodeId = input && 'directionalLightNodeId' in input\n ? input.directionalLightNodeId\n : base.directionalLightNodeId;\n if (directionalLightNodeId !== undefined) merged.directionalLightNodeId = directionalLightNodeId;\n return merged;\n}\n\nfunction mergePlayableBabylonPlanarShadowPatterns(...patterns: readonly string[]): string[] {\n const seen = new Set<string>();\n const merged: string[] = [];\n for (const pattern of patterns) {\n const normalized = typeof pattern === 'string' ? pattern.trim() : '';\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n merged.push(normalized);\n }\n return merged;\n}\n"]}