@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":"panel.js","sourceRoot":"","sources":["../../src/rendering-profile/panel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EDITOR_SHADOW_STATIC_AUTHORING_ENABLED,\n} from '@fps-games/playable-rendering';\nimport type {\n EditorSceneRenderingPanelLanguage,\n EditorSceneRenderingPanelOptions,\n EditorSceneRenderingPanelState,\n EditorSceneRenderingPanelStateInput,\n EditorSceneRenderingProperty,\n EditorSceneRenderingProfile,\n EditorSceneRenderingGroupSlot,\n EditorSceneRenderingProgress,\n EditorSceneRenderingSystemDetail,\n EditorSceneStaticShadowBakeLifecycleState,\n EditorSceneRenderingTextureAsset,\n} from './types';\n\nconst SHADOW_RENDERING_GROUP_BLOB = {\n id: 'shadow-group-moving-object',\n label: 'Moving Object Shadows',\n summary: 'Blob: lightweight for moving objects and project-default fallback.',\n};\n\nconst SHADOW_RENDERING_GROUP_STATIC = {\n id: 'shadow-group-static-scene',\n label: 'Static Scene Shadows',\n summary: 'Consumes baked artifacts; update during authoring/build, runtime only displays results.',\n};\n\nconst SHADOW_RENDERING_GROUP_PLANAR = {\n id: 'shadow-group-directional-planar',\n label: 'Directional Planar Shadows',\n summary: 'Real-time planar projection following the directional light.',\n};\n\nconst SHADOW_RENDERING_GROUP_REALTIME = {\n id: 'shadow-group-realtime-map',\n label: 'Realtime Shadow Maps',\n summary: 'One scene-level quality profile owns map resolution, filtering, and bias.',\n};\n\nconst SHADOW_RENDERING_GROUP_COMPAT = {\n id: 'shadow-group-compatibility',\n label: 'Advanced Shadows',\n summary: 'CSM read-only runtime status.',\n};\n\nexport function createEditorSceneRenderingPanelState(\n profile: EditorSceneRenderingProfile,\n state: EditorSceneRenderingPanelStateInput = {},\n options: EditorSceneRenderingPanelOptions = {},\n): EditorSceneRenderingPanelState {\n const blob = profile.shadows.blob;\n const staticProjected = profile.shadows.staticProjected;\n const planar = profile.shadows.planar;\n const environment = profile.environment;\n const postProcess = profile.postProcess;\n const dirty = state.dirty === true;\n const lastError = state.lastError ?? null;\n const language = options.language ?? 'en';\n const staticShadowBake = resolveStaticShadowBakeLifecycleState(state.staticShadowBake, staticProjected.enabled);\n const staticShadowStatus = formatStaticShadowBakeLifecycleStatus(staticShadowBake, language);\n const staticShadowBakeInProgress = staticShadowBake.status === 'baking';\n const panel: EditorSceneRenderingPanelState = {\n title: 'Rendering',\n summary: 'Project-level rendering settings shared by editor preview and runtime.',\n dirty,\n status: lastError ?? (dirty ? 'Rendering changes are not saved yet.' : undefined),\n statusTone: lastError ? 'error' : dirty ? 'warning' : undefined,\n actions: [{\n id: 'revert-rendering',\n label: 'Revert',\n icon: 'undo',\n disabled: !dirty,\n tooltip: dirty\n ? 'Revert rendering settings to the last saved rendering settings.'\n : 'Rendering settings already match the last saved rendering settings.',\n }],\n sections: [createRenderingGroupsSection(profile.renderingGroups.slots), {\n id: 'environment',\n title: 'Environment / IBL',\n summary: 'World environment texture and reflection lighting shared by editor preview and runtime.',\n systems: [\n {\n id: 'environment-global',\n label: 'Environment Texture',\n kind: 'environment',\n active: !!environment.texture,\n summary: environment.texture?.textureAssetId ?? environment.texture?.url ?? 'No IBL texture',\n properties: [\n {\n path: 'globalVolume.environment.texture.textureAssetId',\n label: 'IBL Texture',\n valueType: 'asset',\n control: 'asset-picker-card',\n value: environment.texture?.textureAssetId ?? '',\n tooltip: 'Select a project texture asset for Babylon scene.environmentTexture. Prefer prefiltered .env environment textures.',\n commitMode: 'immediate',\n controlOptions: createEnvironmentTexturePickerControlOptions({\n textureAssets: options.textureAssets,\n currentTextureAssetId: environment.texture?.textureAssetId ?? '',\n fallbackUrl: environment.texture?.url ?? '',\n language: options.language ?? 'en',\n }),\n },\n {\n path: 'globalVolume.environment.iblIntensity',\n label: 'IBL Intensity',\n valueType: 'number',\n control: 'number',\n value: environment.iblIntensity,\n min: 0,\n step: 0.05,\n tooltip: 'Environment reflection intensity for PBR materials.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.environment.rotationY',\n label: 'IBL Rotation',\n valueType: 'number',\n control: 'number',\n value: environment.rotationY,\n step: 0.01,\n tooltip: 'Y-axis rotation applied to the environment texture.',\n commitMode: 'live',\n },\n ],\n },\n ],\n }, {\n id: 'post-process',\n title: 'Post Process Volume',\n summary: 'Global Babylon Default post-process profile shared by editor preview and runtime.',\n systems: [\n {\n id: 'post-process-global',\n label: 'Global',\n kind: 'custom',\n active: postProcess.enabled,\n summary: 'Babylon Default',\n properties: [\n {\n path: 'globalVolume.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.enabled,\n tooltip: 'Enable the shared post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.hdr',\n label: 'HDR',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.hdr,\n tooltip: 'Use HDR render targets for the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.imageProcessing.exposure',\n label: 'Exposure',\n valueType: 'number',\n control: 'number',\n value: postProcess.imageProcessing.exposure,\n min: 0,\n step: 0.01,\n tooltip: 'Image processing exposure multiplier.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.imageProcessing.contrast',\n label: 'Contrast',\n valueType: 'number',\n control: 'number',\n value: postProcess.imageProcessing.contrast,\n min: 0,\n step: 0.01,\n tooltip: 'Image processing contrast multiplier.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.toneMapping.enabled',\n label: 'ToneMapping',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.toneMapping.enabled,\n tooltip: 'Enable tone mapping in the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.toneMapping.type',\n label: 'Tone Type',\n valueType: 'enum',\n control: 'enum',\n value: postProcess.toneMapping.type,\n options: [\n { label: 'ACES', value: 'aces' },\n { label: 'Standard', value: 'standard' },\n { label: 'KHR PBR Neutral', value: 'khr-pbr-neutral' },\n ],\n tooltip: 'Tone mapping curve used by the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.antialiasing.samples',\n label: 'MSAA Samples',\n valueType: 'enum',\n control: 'enum',\n value: postProcess.antialiasing.samples,\n options: [\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '4', value: 4 },\n { label: '8', value: 8 },\n ],\n tooltip: 'MSAA sample count for the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.postProcessing.bloom.enabled',\n label: 'Bloom',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.bloom.enabled,\n tooltip: 'Enable bloom in the shared default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.postProcessing.bloom.threshold',\n label: 'Bloom Threshold',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.threshold,\n min: 0,\n step: 0.01,\n tooltip: 'Brightness threshold before pixels contribute to bloom.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.weight',\n label: 'Bloom Weight',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.weight,\n min: 0,\n step: 0.01,\n tooltip: 'Bloom contribution weight.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.kernel',\n label: 'Bloom Kernel',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.kernel,\n min: 0,\n step: 1,\n tooltip: 'Bloom blur kernel size.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.scale',\n label: 'Bloom Scale',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.scale,\n min: 0.01,\n step: 0.01,\n tooltip: 'Bloom render scale.',\n commitMode: 'live',\n },\n ],\n },\n ],\n }, {\n id: 'shadows',\n title: 'Shadows',\n summary: 'Global shadow systems for editor preview and runtime.',\n layout: 'list',\n systemsCollapsible: true,\n systems: [\n ...(state.shadowMapExperiment ? [{\n id: 'shadow-map-experiment',\n label: 'Realtime Shadow Map',\n kind: 'custom' as const,\n group: { ...SHADOW_RENDERING_GROUP_REALTIME },\n active: state.shadowMapExperiment.enabled,\n summary: formatShadowMapExperimentSummary(state.shadowMapExperiment, language),\n properties: [\n {\n path: 'shadowMapExperiment.qualityProfile',\n label: 'Quality Profile',\n valueType: 'enum' as const,\n control: 'enum' as const,\n value: state.shadowMapExperiment.qualityProfileId ?? '',\n options: state.shadowMapExperiment.qualityProfileIds.map(profileId => ({\n value: profileId,\n label: formatShadowMapExperimentQualityProfileLabel(profileId, language),\n })),\n disabled: !state.shadowMapExperiment.configured\n || state.shadowMapExperiment.qualityProfileIds.length === 0,\n disabledReason: state.shadowMapExperiment.configured\n ? undefined\n : language === 'zh'\n ? '当前项目未配置实时阴影贴图。'\n : 'Shadow Map Experiment is not configured for this project.',\n tooltip: 'Scene-level quality owner shared by editor preview and runtime. Object Inspector does not override map resolution or filtering.',\n commitMode: 'immediate' as const,\n },\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.staticResolution',\n 'Static Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.staticResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.dynamicResolution',\n 'Dynamic Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.dynamicResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.compositeResolution',\n 'Composite Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.compositeResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.filter',\n 'Filter',\n state.shadowMapExperiment.filter ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.darkness',\n 'Darkness',\n state.shadowMapExperiment.darkness ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.bias',\n 'Bias',\n state.shadowMapExperiment.bias ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.normalBias',\n 'Normal Bias',\n state.shadowMapExperiment.normalBias ?? '—',\n ),\n ],\n }] : []),\n {\n id: 'blob-shadow',\n label: 'Blob Shadow',\n kind: 'blob-shadow',\n group: { ...SHADOW_RENDERING_GROUP_BLOB },\n active: blob.enabled,\n summary: 'Default object shadow',\n properties: [\n {\n path: 'shadows.defaultMode',\n label: 'Default Mode',\n valueType: 'enum',\n control: 'enum',\n value: profile.shadows.defaultMode,\n options: createShadowDefaultModeOptions(options.language ?? 'en'),\n tooltip: 'Default shadow mode for GameObjects that use the project default.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: blob.enabled,\n tooltip: 'Enable the shared blob shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: blob.appearance.color,\n tooltip: 'Blob shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: blob.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Blob shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.appearance.edgeSoftness',\n label: 'Soft Edge',\n valueType: 'number',\n control: 'number',\n value: blob.appearance.edgeSoftness,\n min: 0,\n max: 0.98,\n step: 0.01,\n tooltip: 'Blob shadow soft edge start. Higher values keep the center denser before fading out.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.plane.height',\n label: 'Height',\n valueType: 'number',\n control: 'number',\n value: blob.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Ground plane height used by blob shadows.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.plane.yOffset',\n label: 'Y Offset',\n valueType: 'number',\n control: 'number',\n value: blob.plane.yOffset,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Vertical offset above the blob shadow plane to reduce z-fighting.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.sizeMultiplier',\n label: 'Size Multiplier',\n valueType: 'number',\n control: 'number',\n value: blob.size.sizeMultiplier,\n min: 0,\n step: 0.01,\n tooltip: 'Scale blob shadow size from each caster bounds.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.minSize',\n label: 'Min Size',\n valueType: 'number',\n control: 'number',\n value: blob.size.minSize,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Minimum blob shadow size for tiny objects.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.maxSize',\n label: 'Max Size',\n valueType: 'number',\n control: 'number',\n value: blob.size.maxSize,\n min: 0.01,\n step: 0.01,\n unit: 'm',\n tooltip: 'Maximum blob shadow size for large objects.',\n commitMode: 'live',\n },\n ],\n },\n {\n id: 'static-projected-shadow',\n label: 'Static Baked Shadow',\n kind: 'static-projected-shadow',\n group: { ...SHADOW_RENDERING_GROUP_STATIC },\n active: staticProjected.enabled,\n summary: staticShadowStatus.summary,\n status: staticShadowStatus.status,\n details: createStaticShadowBakeDetails(staticShadowBake, language),\n progress: staticShadowStatus.progress,\n actions: [{\n id: 'bake-static-shadows',\n label: 'Bake Static Shadows',\n icon: 'save',\n disabled: !staticProjected.enabled || staticShadowBakeInProgress,\n tooltip: staticShadowBakeInProgress\n ? 'Static shadow bake is already running.'\n : staticProjected.enabled\n ? 'Bake static shadow chunks for objects authored as Static Baked Shadow.'\n : 'Enable Static Baked Shadow before baking.',\n }],\n properties: [\n {\n path: 'shadows.staticProjected.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: staticProjected.enabled,\n tooltip: 'Enable the shared static projected shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.staticProjected.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: staticProjected.appearance.color,\n tooltip: 'Static shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.staticProjected.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: staticProjected.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Static shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.plane.height',\n label: 'Height',\n valueType: 'number',\n control: 'number',\n value: staticProjected.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Ground plane height used by static projected shadows.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.plane.yOffset',\n label: 'Y Offset',\n valueType: 'number',\n control: 'number',\n value: staticProjected.plane.yOffset,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Vertical offset above the static shadow plane to reduce z-fighting.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.texelsPerMeter',\n label: 'Texels per Meter',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.texelsPerMeter,\n min: 1,\n step: 1,\n tooltip: 'Target SDF atlas texel density for baked static shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.atlasSize',\n label: 'Atlas Size',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.atlasSize,\n min: 16,\n step: 1,\n tooltip: 'Maximum width and height for each static shadow atlas page.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.maxAtlasPages',\n label: 'Page Budget',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.maxAtlasPages,\n min: 1,\n step: 1,\n tooltip: 'Maximum atlas pages allowed before bake lowers the effective texel density.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.sdfRadiusPx',\n label: 'SDF Radius',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.sdfRadiusPx,\n min: 0,\n step: 1,\n tooltip: 'Signed-distance radius in pixels used to preserve crisp controllable edges.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.padding',\n label: 'Padding',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.padding,\n min: 0,\n step: 0.01,\n tooltip: 'Extra projected bounds padding before baking the static shadow.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.blur',\n label: 'Blur',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.blur,\n min: 0,\n step: 0.5,\n tooltip: 'Reserved blur radius for static shadow bake softness.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.spatialChunkSize',\n label: 'Spatial Chunk Size',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.spatialChunkSize,\n min: 0.01,\n step: 0.01,\n unit: 'm',\n tooltip: 'World size of each spatial bake chunk before atlas packing.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.targetChunkCount',\n label: 'Target Chunks',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.targetChunkCount,\n min: 1,\n step: 1,\n tooltip: 'Soft chunk-count budget. Large scenes automatically enlarge spatial chunks to stay near this target.',\n commitMode: 'blur',\n },\n ],\n },\n {\n id: 'planar-main',\n label: 'Planar Main',\n kind: 'planar-shadow',\n group: { ...SHADOW_RENDERING_GROUP_PLANAR },\n active: planar.enabled,\n summary: 'Follow Directional Light',\n properties: [\n {\n path: 'shadows.planar.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: planar.enabled,\n tooltip: 'Enable the shared planar shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: planar.appearance.color,\n tooltip: 'Planar shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: planar.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Planar shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.plane.heightMode',\n label: 'Height Source',\n valueType: 'string',\n control: 'readonly',\n value: planar.plane.heightMode === 'receiver' ? 'Auto from Receivers' : 'Fixed Height',\n readOnly: true,\n tooltip: 'Planar shadow receiver height is resolved from matched receiver meshes when available.',\n },\n {\n path: 'shadows.planar.plane.height',\n label: 'Fallback Height',\n valueType: 'number',\n control: 'number',\n value: planar.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Fallback receiver plane height, used only when no receiver mesh can be resolved.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.plane.bias',\n label: 'Bias',\n valueType: 'number',\n control: 'number',\n value: planar.plane.bias,\n min: 0,\n step: 0.01,\n tooltip: 'Projection bias used to keep the planar shadow stable.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.projection.footprintScale',\n label: 'Footprint Scale',\n valueType: 'number',\n control: 'number',\n value: planar.projection.footprintScale,\n min: 0,\n max: 2,\n step: 0.01,\n tooltip: 'Scale the projected footprint around the caster center; lower values reduce hard-edged mesh projection artifacts.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.stencil.enabled',\n label: 'Stencil',\n valueType: 'boolean',\n control: 'boolean',\n value: planar.stencil.enabled,\n tooltip: 'Use stencil routing so shadows affect only receivers.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.casters.excludePatterns',\n label: 'Caster Excludes',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.casters.excludePatterns,\n placeholder: 'One pattern per line',\n tooltip: 'Meshes matching these patterns will not cast planar shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.casters.rootBoundaryPatterns',\n label: 'Caster Roots',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.casters.rootBoundaryPatterns,\n placeholder: 'One pattern per line',\n tooltip: 'Optional root boundary patterns for caster auto-detection.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.receivers.patterns',\n label: 'Receivers',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.receivers.patterns,\n placeholder: 'One pattern per line',\n tooltip: 'Meshes matching these patterns can receive planar shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.direction',\n label: 'Direction',\n valueType: 'string',\n control: 'readonly',\n value: 'Follow Directional Light',\n readOnly: true,\n tooltip: 'Shadow direction is derived from the protected Directional Light.',\n },\n ],\n },\n {\n id: 'csm-shadow',\n label: 'CSM',\n kind: 'csm-shadow',\n group: { ...SHADOW_RENDERING_GROUP_COMPAT },\n active: profile.shadows.enabled && profile.shadows.useCsm && !planar.enabled,\n readOnly: true,\n summary: profile.shadows.useCsm ? 'Compatibility path' : 'Disabled',\n properties: [\n createReadonlyRenderingProperty('shadows.useCsm', 'Enabled', profile.shadows.useCsm),\n createReadonlyRenderingProperty('shadows.csm.numCascades', 'Cascades', profile.shadows.csm.numCascades),\n createReadonlyRenderingProperty('shadows.csm.lambda', 'Lambda', profile.shadows.csm.lambda),\n ],\n },\n ],\n }],\n };\n return localizeRenderingPanelState(\n hideDisabledShadowAuthoringSystems(panel),\n language,\n dirty,\n );\n}\n\nfunction resolveStaticShadowBakeLifecycleState(\n state: EditorSceneStaticShadowBakeLifecycleState | null | undefined,\n enabled: boolean,\n): EditorSceneStaticShadowBakeLifecycleState {\n if (!enabled) {\n return {\n status: 'disabled',\n chunkCount: 0,\n };\n }\n return state ?? {\n status: 'missing',\n chunkCount: 0,\n };\n}\n\nfunction hideDisabledShadowAuthoringSystems(\n panel: EditorSceneRenderingPanelState,\n): EditorSceneRenderingPanelState {\n if (EDITOR_SHADOW_STATIC_AUTHORING_ENABLED) return panel;\n return {\n ...panel,\n sections: panel.sections.map(section => ({\n ...section,\n systems: section.systems.filter(system => system.id !== 'static-projected-shadow'),\n })),\n };\n}\n\nfunction formatStaticShadowBakeLifecycleStatus(\n state: EditorSceneStaticShadowBakeLifecycleState,\n language: EditorSceneRenderingPanelLanguage,\n): { summary: string; status: string; progress?: EditorSceneRenderingProgress } {\n const chunkCount = Math.max(0, Math.trunc(state.chunkCount ?? 0));\n const chunkText = language === 'zh'\n ? `${chunkCount} 个分块`\n : `${chunkCount} chunk${chunkCount === 1 ? '' : 's'}`;\n if (state.status === 'baking') {\n const progress = state.progress ?? {\n label: language === 'zh' ? '正在烘焙静态阴影' : 'Baking static shadows',\n indeterminate: true,\n };\n return {\n summary: language === 'zh' ? '正在烘焙' : 'Baking',\n status: language === 'zh'\n ? formatChineseStaticShadowBakingStatus(state)\n : state.reason ?? 'Baking static shadow artifact.',\n progress: {\n ...progress,\n label: language === 'zh' ? formatChineseStaticShadowProgressLabel(state) : progress.label,\n },\n };\n }\n if (state.status === 'disabled') {\n const fallback = 'Static Baked Shadow is disabled.';\n return {\n summary: language === 'zh' ? '已禁用' : 'Disabled',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态烘焙阴影已禁用。',\n language,\n ),\n };\n }\n if (state.status === 'missing') {\n const fallback = 'No static shadow bake artifact is available.';\n return {\n summary: language === 'zh' ? '缺少烘焙' : 'Missing bake',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '当前没有可用的静态阴影烘焙数据。',\n language,\n ),\n };\n }\n if (state.status === 'preview-unsaved') {\n const fallback = 'Static shadow preview has not been saved yet.';\n return {\n summary: language === 'zh' ? `预览未保存 · ${chunkText}` : `Preview unsaved · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影预览尚未保存。',\n language,\n ),\n };\n }\n if (state.status === 'out-of-date') {\n const fallback = 'Static shadow bake is out of date.';\n return {\n summary: language === 'zh' ? `已过期 · ${chunkText}` : `Out of date · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙已过期。',\n language,\n ),\n };\n }\n if (state.status === 'invalid') {\n const fallback = 'Static shadow bake artifact is invalid.';\n return {\n summary: language === 'zh' ? '烘焙无效' : 'Invalid bake',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙数据无效。',\n language,\n ),\n };\n }\n const fallback = 'Static shadow bake artifact is up to date.';\n if (chunkCount === 0) {\n return {\n summary: language === 'zh' ? '无静态投射物' : 'No static casters',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '没有物体被显式设置为静态烘焙阴影。',\n language,\n ),\n };\n }\n return {\n summary: language === 'zh' ? `最新 · ${chunkText}` : `Up to date · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙数据已是最新。',\n language,\n ),\n };\n}\n\nfunction resolveLocalizedStaticShadowStatusReason(\n reason: string | null | undefined,\n englishFallback: string,\n localizedFallback: string,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n if (language !== 'zh') return reason ?? englishFallback;\n return !reason || reason === englishFallback ? localizedFallback : reason;\n}\n\nfunction formatChineseStaticShadowBakingStatus(state: EditorSceneStaticShadowBakeLifecycleState): string {\n const stats = state.stats ?? null;\n const phase = stats?.phase;\n const attempted = stats?.attemptedChunkCount ?? 0;\n const completed = stats?.chunkCount ?? 0;\n const atlasPages = stats?.pageCount ?? stats?.textureCount ?? 0;\n const encodedPages = stats?.textureCount ?? 0;\n if (phase === 'collect') {\n if ((stats?.sourceRootCount ?? 0) > 0) return `已收集 ${stats?.sourceRootCount ?? 0} 个静态投射物,正在准备空间分块。`;\n return '正在收集静态阴影投射物。';\n }\n if (phase === 'sdf') {\n if (attempted > 0) return `正在生成静态阴影 SDF ${Math.min(completed + 1, attempted)} / ${attempted}。`;\n return '正在生成静态阴影 SDF。';\n }\n if (phase === 'pack') {\n return `正在将 ${completed} 个静态阴影分块打包到 ${atlasPages} 张 Atlas。`;\n }\n if (phase === 'encode') {\n return `正在编码静态阴影 Atlas ${Math.min(encodedPages + 1, atlasPages || encodedPages + 1)} / ${atlasPages || encodedPages + 1}。`;\n }\n if (phase === 'complete') return '正在写入静态阴影烘焙数据。';\n if (attempted > 0) return `正在烘焙静态阴影分块 ${Math.min(completed + 1, attempted)} / ${attempted}。`;\n if ((stats?.sourceRootCount ?? 0) > 0) return `已收集 ${stats?.sourceRootCount ?? 0} 个静态投射物,正在准备分块。`;\n return '正在收集静态阴影投射物。';\n}\n\nfunction formatChineseStaticShadowProgressLabel(state: EditorSceneStaticShadowBakeLifecycleState): string {\n const stats = state.stats ?? null;\n const phase = stats?.phase;\n const attempted = stats?.attemptedChunkCount ?? 0;\n const completed = stats?.chunkCount ?? 0;\n if (phase === 'collect') return '收集静态投射物';\n if (phase === 'pack') return '打包静态阴影 Atlas';\n if (phase === 'encode') {\n const atlasPages = stats?.pageCount ?? stats?.textureCount ?? 0;\n const encodedPages = stats?.textureCount ?? 0;\n return `静态阴影 Atlas ${Math.min(encodedPages, atlasPages)} / ${atlasPages}`;\n }\n return attempted > 0\n ? `静态阴影烘焙 ${Math.min(completed, attempted)} / ${attempted}`\n : '正在烘焙静态阴影';\n}\n\nfunction createStaticShadowBakeDetails(\n state: EditorSceneStaticShadowBakeLifecycleState,\n language: EditorSceneRenderingPanelLanguage,\n): EditorSceneRenderingSystemDetail[] {\n const stats = state.stats ?? null;\n const details: EditorSceneRenderingSystemDetail[] = [];\n const add = (labelEn: string, labelZh: string, value: unknown, tone?: EditorSceneRenderingSystemDetail['tone']): void => {\n if (value == null || value === '') return;\n details.push({\n label: language === 'zh' ? labelZh : labelEn,\n value: String(value),\n ...(tone ? { tone } : {}),\n });\n };\n const chunkCount = stats?.chunkCount ?? state.chunkCount;\n const performance = calculateStaticShadowPerformanceDetails(stats, chunkCount);\n add('Static casters', '静态投射物', formatOptionalCount(stats?.sourceRootCount));\n add('Bake meshes', '参与 Mesh', formatOptionalCount(stats?.sourceMeshCount));\n add('Chunks', '分块', formatOptionalCount(chunkCount), chunkCount === 0 ? 'warning' : undefined);\n add('Atlas pages', 'Atlas 页', formatOptionalCount(stats?.pageCount ?? stats?.textureCount ?? chunkCount));\n add('Texture memory', '贴图显存', performance.textureMemoryText, performance.textureMemoryTone);\n add('Texture pixels', '贴图像素', performance.atlasPixelsText);\n add('Atlas occupancy', 'Atlas 利用率', performance.atlasOccupancyText, performance.atlasOccupancyTone);\n add('Atlas used', 'Atlas 已用', performance.atlasUsedPixelsText);\n add('Atlas allocated', 'Atlas 分配', performance.atlasAllocatedPixelsText);\n add('Runtime draws', '运行时 Draw', performance.drawCallsText);\n add('Shadow mesh', '阴影 Mesh', performance.meshText);\n add('Triangles', '三角形', performance.triangleText);\n add('Vertices', '顶点', performance.vertexText);\n add('Effective texels / m', '实际每米像素', formatOptionalNumber(stats?.effectiveTexelsPerMeter ?? stats?.texelsPerMeter));\n if (\n stats?.effectiveTexelsPerMeter != null\n && stats?.texelsPerMeter != null\n && Math.abs(stats.effectiveTexelsPerMeter - stats.texelsPerMeter) > 0.001\n ) {\n add('Target texels / m', '目标每米像素', formatOptionalNumber(stats.texelsPerMeter), 'warning');\n }\n add('Atlas size', 'Atlas 尺寸', stats?.atlasSize ? `${stats.atlasSize}px` : null);\n add('Page budget', '页预算', formatOptionalCount(stats?.maxAtlasPages));\n add('SDF radius', 'SDF 半径', stats?.sdfRadiusPx != null ? `${stats.sdfRadiusPx}px` : null);\n add('Spatial chunk', '空间分块', stats?.spatialChunkSize ? formatMeters(stats.spatialChunkSize) : null);\n if (\n stats?.effectiveSpatialChunkSize != null\n && stats?.spatialChunkSize != null\n && Math.abs(stats.effectiveSpatialChunkSize - stats.spatialChunkSize) > 0.001\n ) {\n add('Effective chunk', '实际分块', formatMeters(stats.effectiveSpatialChunkSize), 'warning');\n }\n add('Target chunks', '目标分块', formatOptionalCount(stats?.targetChunkCount));\n add('Baked chunks', '重烘分块', formatOptionalCount(stats?.bakedChunkCount));\n add('Reused chunks', '复用分块', formatOptionalCount(stats?.reusedChunkCount), stats?.reusedChunkCount ? 'success' : undefined);\n add('Resolution', '贴图尺寸', stats?.resolution ? `${stats.resolution}px` : null);\n add('Chunk size', '分块尺寸', stats?.chunkSize ? formatMeters(stats.chunkSize) : null);\n add('Duration', '耗时', formatDurationMs(stats?.durationMs, language));\n if (state.status === 'baking') {\n add('Current chunk', '当前分块', stats?.currentChunkId);\n const attempted = stats?.attemptedChunkCount;\n const completed = stats?.chunkCount;\n if (stats?.phase) add('Stage', '阶段', formatStaticShadowBakePhase(stats.phase, language));\n if (attempted != null && completed != null) {\n add('Progress', '进度', language === 'zh' ? `${completed} / ${attempted} 个分块` : `${completed} / ${attempted} chunks`);\n }\n } else {\n add('Skipped chunks', '跳过分块', formatOptionalCount(stats?.skippedChunkCount), stats?.skippedChunkCount ? 'warning' : undefined);\n }\n return details;\n}\n\nfunction calculateStaticShadowPerformanceDetails(\n stats: EditorSceneStaticShadowBakeLifecycleState['stats'],\n fallbackChunkCount: number | undefined,\n): {\n textureMemoryText: string | null;\n textureMemoryTone?: EditorSceneRenderingSystemDetail['tone'];\n atlasPixelsText: string | null;\n atlasUsedPixelsText: string | null;\n atlasAllocatedPixelsText: string | null;\n atlasOccupancyText: string | null;\n atlasOccupancyTone?: EditorSceneRenderingSystemDetail['tone'];\n drawCallsText: string | null;\n meshText: string | null;\n triangleText: string | null;\n vertexText: string | null;\n} {\n if (!stats) {\n return {\n textureMemoryText: null,\n atlasPixelsText: null,\n atlasUsedPixelsText: null,\n atlasAllocatedPixelsText: null,\n atlasOccupancyText: null,\n drawCallsText: null,\n meshText: null,\n triangleText: null,\n vertexText: null,\n };\n }\n const chunkCount = Math.max(0, Math.trunc(stats.chunkCount ?? fallbackChunkCount ?? 0));\n const isAtlas = stats.pageCount != null || stats.atlasSize != null || stats.effectiveTexelsPerMeter != null;\n const textureCount = Math.max(0, Math.trunc(\n isAtlas\n ? stats.pageCount ?? stats.textureCount ?? 0\n : stats.textureCount ?? chunkCount,\n ));\n const textureSize = isAtlas ? stats.atlasSize : stats.resolution;\n const fallbackTextureBytes = textureCount > 0 && textureSize != null && Number.isFinite(textureSize) && textureSize > 0\n ? textureCount * textureSize * textureSize * 4\n : null;\n const allocatedPixels = isAtlas\n ? stats.atlasAllocatedPixels ?? (fallbackTextureBytes != null ? fallbackTextureBytes / 4 : null)\n : (fallbackTextureBytes != null ? fallbackTextureBytes / 4 : null);\n const usedPixels = isAtlas ? stats.atlasUsedPixels ?? null : null;\n const textureBytes = allocatedPixels != null ? allocatedPixels * 4 : null;\n const occupancy = isAtlas\n ? stats.atlasOccupancy ?? (\n allocatedPixels != null && allocatedPixels > 0 && usedPixels != null\n ? usedPixels / allocatedPixels\n : null\n )\n : null;\n const drawCalls = textureCount > 0 ? textureCount : null;\n const renderMeshes = isAtlas ? drawCalls : chunkCount || null;\n const triangles = chunkCount > 0 ? chunkCount * 2 : null;\n const vertices = chunkCount > 0 ? chunkCount * 4 : null;\n return {\n textureMemoryText: formatBytes(textureBytes),\n textureMemoryTone: textureBytes != null && textureBytes >= 256 * 1024 * 1024 ? 'warning' : undefined,\n atlasPixelsText: formatPixelCount(allocatedPixels),\n atlasUsedPixelsText: formatPixelCount(usedPixels),\n atlasAllocatedPixelsText: formatPixelCount(allocatedPixels),\n atlasOccupancyText: formatPercentage(occupancy),\n atlasOccupancyTone: occupancy != null && occupancy < 0.35 ? 'warning' : undefined,\n drawCallsText: formatOptionalCount(drawCalls),\n meshText: formatOptionalCount(renderMeshes),\n triangleText: formatOptionalCount(triangles),\n vertexText: formatOptionalCount(vertices),\n };\n}\n\nfunction formatStaticShadowBakePhase(phase: string, language: EditorSceneRenderingPanelLanguage): string {\n if (language !== 'zh') return phase;\n switch (phase) {\n case 'collect': return '收集';\n case 'reuse': return '复用已有分块';\n case 'chunk': return '烘焙分块';\n case 'sdf': return '生成 SDF';\n case 'pack': return '打包 Atlas';\n case 'encode': return '编码 Atlas';\n case 'complete': return '写入结果';\n default: return phase;\n }\n}\n\nfunction formatOptionalCount(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return String(Math.max(0, Math.trunc(value)));\n}\n\nfunction formatOptionalNumber(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n}\n\nfunction formatPixelCount(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const pixels = Math.max(0, value);\n if (pixels >= 1_000_000) return `${formatOptionalNumber(pixels / 1_000_000)} MP`;\n if (pixels >= 1_000) return `${formatOptionalNumber(pixels / 1_000)} KP`;\n return formatOptionalCount(pixels);\n}\n\nfunction formatPercentage(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return `${formatOptionalNumber(Math.max(0, Math.min(1, value)) * 100)}%`;\n}\n\nfunction formatBytes(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const bytes = Math.max(0, value);\n if (bytes >= 1024 * 1024 * 1024) return `${formatOptionalNumber(bytes / (1024 * 1024 * 1024))} GiB`;\n if (bytes >= 1024 * 1024) return `${formatOptionalNumber(bytes / (1024 * 1024))} MiB`;\n if (bytes >= 1024) return `${formatOptionalNumber(bytes / 1024)} KiB`;\n return `${formatOptionalCount(bytes)} B`;\n}\n\nfunction formatMeters(value: number): string {\n const text = Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n return `${text} m`;\n}\n\nfunction formatDurationMs(value: number | null | undefined, language: EditorSceneRenderingPanelLanguage): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const duration = Math.max(0, value);\n if (duration < 1000) return `${Math.round(duration)} ms`;\n const seconds = duration / 1000;\n const text = seconds < 10 ? seconds.toFixed(1) : String(Math.round(seconds));\n return language === 'zh' ? `${text} 秒` : `${text}s`;\n}\n\nfunction formatShadowMapExperimentSummary(\n state: NonNullable<EditorSceneRenderingPanelStateInput['shadowMapExperiment']>,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n if (!state.configured) return language === 'zh' ? '未配置' : 'Not configured';\n if (!state.enabled) return language === 'zh' ? '已关闭' : 'Disabled';\n const resolution = state.maps?.compositeResolution;\n const profileLabel = state.qualityProfileId\n ? formatShadowMapExperimentQualityProfileLabel(state.qualityProfileId, language)\n : language === 'zh' ? '默认' : 'Default';\n return [profileLabel, resolution ? `${resolution}px` : null, state.filter]\n .filter((value): value is string => typeof value === 'string' && value.length > 0)\n .join(' · ');\n}\n\nfunction formatShadowMapExperimentQualityProfileLabel(\n profileId: string,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n const normalized = profileId.trim().toLowerCase();\n if (language === 'zh') {\n if (normalized === 'balanced') return '平衡';\n if (normalized === 'high') return '高质量';\n if (normalized === 'ultra') return '超高质量';\n if (normalized === 'performance' || normalized === 'low') return '高性能';\n }\n if (normalized === 'balanced') return 'Balanced';\n if (normalized === 'high') return 'High';\n if (normalized === 'ultra') return 'Ultra';\n if (normalized === 'performance' || normalized === 'low') return 'Performance';\n return profileId;\n}\n\nfunction formatShadowMapResolution(value: number | null | undefined): string {\n return value != null && Number.isFinite(value) ? `${Math.max(0, Math.trunc(value))} px` : '—';\n}\n\nfunction createRenderingGroupsSection(\n slots: readonly EditorSceneRenderingGroupSlot[],\n): EditorSceneRenderingPanelState['sections'][number] {\n return {\n id: 'rendering-groups',\n title: 'Rendering Groups / Order Presets',\n summary: 'Named Babylon rendering groups and alphaIndex presets used by object Inspector dropdowns.',\n layout: 'list',\n systems: slots.map((slot) => ({\n id: `rendering-group-${slot.renderingGroupId}`,\n label: slot.name,\n kind: 'rendering-group',\n active: true,\n summary: `Babylon group ${slot.renderingGroupId}`,\n actions: [{\n id: 'rendering-alpha-preset.add',\n label: 'Add Order Preset',\n icon: 'plus',\n tooltip: 'Add a named alphaIndex preset for this rendering group.',\n params: { renderingGroupId: slot.renderingGroupId },\n }],\n properties: [\n createReadonlyRenderingProperty(\n `renderingGroups.slots.${slot.renderingGroupId}.renderingGroupId`,\n 'Group ID',\n slot.renderingGroupId,\n ),\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.name`,\n label: 'Group Name',\n valueType: 'string',\n control: 'string',\n value: slot.name,\n tooltip: 'Display name for this fixed Babylon rendering group id.',\n commitMode: 'blur',\n },\n ...slot.alphaIndexPresets.flatMap((preset, index): EditorSceneRenderingProperty[] => [\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.alphaIndexPresets.${index}.name`,\n label: `Preset ${index + 1} Name`,\n valueType: 'string',\n control: 'string',\n value: preset.name,\n tooltip: 'User-facing name shown in object Inspector dropdowns.',\n commitMode: 'blur',\n actions: [{\n id: 'rendering-alpha-preset.delete',\n label: 'Delete',\n icon: 'trash',\n tooltip: 'Delete this alphaIndex preset. Existing objects keep their numeric alphaIndex.',\n params: { renderingGroupId: slot.renderingGroupId, presetIndex: index },\n }],\n },\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.alphaIndexPresets.${index}.alphaIndex`,\n label: `Preset ${index + 1} Value`,\n valueType: 'number',\n control: 'number',\n value: preset.alphaIndex,\n step: 1,\n tooltip: 'Babylon alphaIndex value stored on objects that use this preset.',\n commitMode: 'blur',\n },\n ]),\n ],\n })),\n };\n}\n\nfunction createReadonlyRenderingProperty(\n path: string,\n label: string,\n value: unknown,\n): EditorSceneRenderingProperty {\n return {\n path,\n label,\n valueType: typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'string',\n control: 'readonly',\n value,\n readOnly: true,\n };\n}\n\nfunction createEnvironmentTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneRenderingTextureAsset[];\n currentTextureAssetId: string;\n fallbackUrl: string;\n language: EditorSceneRenderingPanelLanguage;\n}): Record<string, unknown> {\n const text = input.language === 'zh'\n ? {\n pickerTitle: '选择 IBL 贴图',\n replace: '替换',\n none: '无',\n noneMeta: '未设置环境贴图',\n }\n : {\n pickerTitle: 'Select IBL Texture',\n replace: 'Replace',\n none: 'None',\n noneMeta: 'No environment texture',\n };\n const currentTexture = input.textureAssets?.find(texture => texture.id === input.currentTextureAssetId) ?? null;\n const environmentTextures = (input.textureAssets ?? []).filter(isEditorSceneEnvironmentTextureAsset);\n const currentLabel = currentTexture?.label\n ?? (input.currentTextureAssetId || input.fallbackUrl || text.none);\n const currentMeta = currentTexture?.meta\n ?? (input.currentTextureAssetId || input.fallbackUrl || text.noneMeta);\n return {\n pickerKind: 'texture',\n pickerTitle: text.pickerTitle,\n actionLabel: text.replace,\n placeholder: text.none,\n currentLabel,\n currentMeta,\n currentPreview: currentTexture ? createRenderingTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: text.none,\n value: '',\n meta: text.noneMeta,\n },\n ...environmentTextures.map(texture => ({\n label: texture.label,\n value: texture.id,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createRenderingTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction createShadowDefaultModeOptions(language: EditorSceneRenderingPanelLanguage): readonly { label: string; value: string }[] {\n return language === 'zh'\n ? [\n { label: '无阴影', value: 'none' },\n { label: 'Blob 阴影', value: 'blob' },\n ...(EDITOR_SHADOW_STATIC_AUTHORING_ENABLED\n ? [{ label: '静态烘焙阴影', value: 'static' }]\n : []),\n { label: '主平面阴影', value: 'planar' },\n ]\n : [\n { label: 'None', value: 'none' },\n { label: 'Blob', value: 'blob' },\n ...(EDITOR_SHADOW_STATIC_AUTHORING_ENABLED\n ? [{ label: 'Static Baked', value: 'static' }]\n : []),\n { label: 'Planar', value: 'planar' },\n ];\n}\n\nfunction isEditorSceneEnvironmentTextureAsset(texture: EditorSceneRenderingTextureAsset): 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 isEnvironmentTextureUrl(texture.url);\n}\n\nfunction isEnvironmentTextureUrl(url: string): boolean {\n return /\\.(env|hdr|dds|ktx|ktx2)(?:[?#].*)?$/i.test(url);\n}\n\nfunction createRenderingTextureAssetPreview(texture: EditorSceneRenderingTextureAsset): Record<string, unknown> {\n return {\n kind: 'image',\n url: texture.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\ntype RenderingLocalizedPropertyText = {\n label?: string;\n tooltip?: string;\n placeholder?: string;\n readonlyValue?: Record<string, string>;\n};\n\ntype RenderingPanelText = {\n title: string;\n summary: string;\n dirtyStatus: string;\n revert: string;\n revertDirty: string;\n revertClean: string;\n bakeStatic: string;\n bakeStaticReady: string;\n bakeStaticDisabled: string;\n bakeStaticRunning: string;\n sections: Record<string, { title?: string; summary?: string }>;\n groups: Record<string, { label?: string; summary?: string }>;\n systems: Record<string, { label?: string; summary?: string; disabled?: string; compatibility?: string }>;\n properties: Record<string, RenderingLocalizedPropertyText>;\n};\n\nconst RENDERING_PANEL_TEXT: Record<EditorSceneRenderingPanelLanguage, RenderingPanelText> = {\n en: {\n title: 'Rendering',\n summary: 'Project-level rendering settings shared by editor preview and runtime.',\n dirtyStatus: 'Rendering changes are not saved yet.',\n revert: 'Revert',\n revertDirty: 'Revert rendering settings to the last saved rendering settings.',\n revertClean: 'Rendering settings already match the last saved rendering settings.',\n bakeStatic: 'Bake Static Shadows',\n bakeStaticReady: 'Bake static shadow chunks for objects authored as Static Baked Shadow.',\n bakeStaticDisabled: 'Enable Static Baked Shadow before baking.',\n bakeStaticRunning: 'Static shadow bake is already running.',\n sections: {\n 'rendering-groups': {\n title: 'Rendering Groups / Order Presets',\n summary: 'Named Babylon rendering groups and alphaIndex presets used by object Inspector dropdowns.',\n },\n environment: {\n title: 'Environment / IBL',\n summary: 'World environment texture and reflection lighting shared by editor preview and runtime.',\n },\n 'post-process': {\n title: 'Post Process Volume',\n summary: 'Global Babylon Default post-process profile shared by editor preview and runtime.',\n },\n shadows: {\n title: 'Shadows',\n summary: 'Global shadow systems for editor preview and runtime.',\n },\n },\n groups: {\n 'shadow-group-moving-object': {\n label: 'Moving Object Shadows',\n summary: 'Blob: lightweight for moving objects and project-default fallback.',\n },\n 'shadow-group-static-scene': {\n label: 'Static Scene Shadows',\n summary: 'Consumes baked artifacts; update during authoring/build, runtime only displays results.',\n },\n 'shadow-group-directional-planar': {\n label: 'Directional Planar Shadows',\n summary: 'Real-time planar projection following the directional light.',\n },\n 'shadow-group-realtime-map': {\n label: 'Realtime Shadow Maps',\n summary: 'One scene-level quality profile owns map resolution, filtering, and bias.',\n },\n 'shadow-group-compatibility': {\n label: 'Advanced Shadows',\n summary: 'CSM read-only runtime status.',\n },\n },\n systems: {\n 'environment-global': {\n label: 'Environment Texture',\n },\n 'post-process-global': {\n label: 'Global',\n summary: 'Babylon Default',\n },\n 'planar-main': {\n label: 'Planar Main',\n summary: 'Follow Directional Light',\n },\n 'shadow-map-experiment': {\n label: 'Realtime Shadow Map',\n },\n 'blob-shadow': {\n label: 'Blob Shadow',\n summary: 'Default object shadow',\n },\n 'static-projected-shadow': {\n label: 'Static Baked Shadow',\n summary: 'Baked object shape',\n },\n 'csm-shadow': {\n label: 'CSM',\n disabled: 'Disabled',\n compatibility: 'Compatibility path',\n },\n },\n properties: {\n 'shadowMapExperiment.qualityProfile': {\n label: 'Quality Profile',\n tooltip: 'Scene-level quality owner shared by editor preview and runtime. Object Inspector does not override map resolution or filtering.',\n },\n 'shadowMapExperiment.maps.staticResolution': {\n label: 'Static Map',\n },\n 'shadowMapExperiment.maps.dynamicResolution': {\n label: 'Dynamic Map',\n },\n 'shadowMapExperiment.maps.compositeResolution': {\n label: 'Composite Map',\n },\n 'shadowMapExperiment.filter': {\n label: 'Filter',\n },\n 'shadowMapExperiment.darkness': {\n label: 'Darkness',\n },\n 'shadowMapExperiment.bias': {\n label: 'Bias',\n },\n 'shadowMapExperiment.normalBias': {\n label: 'Normal Bias',\n },\n 'globalVolume.environment.texture.textureAssetId': {\n label: 'IBL Texture',\n tooltip: 'Select a project texture asset for Babylon scene.environmentTexture. Prefer prefiltered .env environment textures.',\n },\n 'globalVolume.environment.iblIntensity': {\n label: 'IBL Intensity',\n tooltip: 'Environment reflection intensity for PBR materials.',\n },\n 'globalVolume.environment.rotationY': {\n label: 'IBL Rotation',\n tooltip: 'Y-axis rotation applied to the environment texture.',\n },\n 'shadows.defaultMode': {\n label: 'Default Mode',\n tooltip: 'Default shadow mode for GameObjects that use the project default.',\n },\n 'shadows.blob.enabled': {\n label: 'Enabled',\n tooltip: 'Enable the shared blob shadow system.',\n },\n 'shadows.blob.appearance.color': {\n label: 'Color',\n tooltip: 'Blob shadow RGB color. Opacity is edited separately.',\n },\n 'shadows.blob.appearance.color.a': {\n label: 'Opacity',\n tooltip: 'Blob shadow opacity, clamped between 0 and 1.',\n },\n 'shadows.blob.appearance.edgeSoftness': {\n label: 'Soft Edge',\n tooltip: 'Blob shadow soft edge start. Higher values keep the center denser before fading out.',\n },\n 'shadows.blob.plane.height': {\n label: 'Height',\n tooltip: 'Ground plane height used by blob shadows.',\n },\n 'shadows.blob.plane.yOffset': {\n label: 'Y Offset',\n tooltip: 'Vertical offset above the blob shadow plane to reduce z-fighting.',\n },\n 'shadows.blob.size.sizeMultiplier': {\n label: 'Size Multiplier',\n tooltip: 'Scale blob shadow size from each caster bounds.',\n },\n 'shadows.blob.size.minSize': {\n label: 'Min Size',\n tooltip: 'Minimum blob shadow size for tiny objects.',\n },\n 'shadows.blob.size.maxSize': {\n label: 'Max Size',\n tooltip: 'Maximum blob shadow size for large objects.',\n },\n 'shadows.staticProjected.enabled': {\n label: 'Enabled',\n tooltip: 'Enable the shared static projected shadow system.',\n },\n 'shadows.staticProjected.appearance.color': {\n label: 'Color',\n tooltip: 'Static shadow RGB color. Opacity is edited separately.',\n },\n 'shadows.staticProjected.appearance.color.a': {\n label: 'Opacity',\n tooltip: 'Static shadow opacity, clamped between 0 and 1.',\n },\n 'shadows.staticProjected.plane.height': {\n label: 'Height',\n tooltip: 'Ground plane height used by static projected shadows.',\n },\n 'shadows.staticProjected.plane.yOffset': {\n label: 'Y Offset',\n tooltip: 'Vertical offset above the static shadow plane to reduce z-fighting.',\n },\n 'shadows.staticProjected.bake.padding': {\n label: 'Padding',\n tooltip: 'Extra projected bounds padding before baking the static shadow.',\n },\n 'shadows.staticProjected.bake.blur': {\n label: 'Blur',\n tooltip: 'Reserved blur radius for static shadow bake softness.',\n },\n 'shadows.staticProjected.bake.texelsPerMeter': {\n label: 'Texels per Meter',\n tooltip: 'Target SDF atlas texel density for baked static shadows.',\n },\n 'shadows.staticProjected.bake.atlasSize': {\n label: 'Atlas Size',\n tooltip: 'Maximum width and height for each static shadow atlas page.',\n },\n 'shadows.staticProjected.bake.maxAtlasPages': {\n label: 'Page Budget',\n tooltip: 'Maximum atlas pages before bake lowers the effective texel density.',\n },\n 'shadows.staticProjected.bake.sdfRadiusPx': {\n label: 'SDF Radius',\n tooltip: 'Signed-distance radius in pixels used for crisp controllable edges.',\n },\n 'shadows.staticProjected.bake.spatialChunkSize': {\n label: 'Spatial Chunk Size',\n tooltip: 'World size of each spatial bake chunk before atlas packing.',\n },\n 'shadows.staticProjected.bake.targetChunkCount': {\n label: 'Target Chunks',\n tooltip: 'Soft chunk-count budget. Large scenes automatically enlarge spatial chunks to stay near this target.',\n },\n },\n },\n zh: {\n title: '渲染',\n summary: '项目级渲染设置。编辑器预览和运行时共用同一套渲染管线。',\n dirtyStatus: '渲染设置尚未保存。',\n revert: '还原',\n revertDirty: '还原到上一次保存的渲染设置。',\n revertClean: '当前渲染设置已经和上一次保存状态一致。',\n bakeStatic: '烘焙静态阴影',\n bakeStaticReady: '为标记为静态烘焙阴影的物体生成分块阴影。',\n bakeStaticDisabled: '请先启用静态烘焙阴影。',\n bakeStaticRunning: '静态阴影正在烘焙中。',\n sections: {\n 'rendering-groups': {\n title: '渲染分组 / 顺序预设',\n summary: '项目级 Babylon rendering group 名称和 alphaIndex 预设,用于物体 Inspector 下拉选择。',\n },\n environment: {\n title: '环境 / IBL',\n summary: '世界环境贴图与 PBR 环境反射,编辑器预览和运行时共用。',\n },\n 'post-process': {\n title: '后处理 Volume',\n summary: '全局 Babylon Default 后处理参数,编辑器预览和运行时共用。',\n },\n shadows: {\n title: '阴影',\n summary: '项目级阴影系统,编辑器预览和运行时共用。',\n },\n },\n groups: {\n 'shadow-group-moving-object': {\n label: '移动物体阴影',\n summary: 'Blob:低成本,适合移动物体,也可作为项目默认阴影。',\n },\n 'shadow-group-static-scene': {\n label: '静态场景阴影',\n summary: '只显示已烘焙 artifact;编辑器/构建期更新,运行时消费结果。',\n },\n 'shadow-group-directional-planar': {\n label: '主平面实时阴影',\n summary: '跟随直射光动态投影,适合需要方向感的物体。',\n },\n 'shadow-group-realtime-map': {\n label: '实时阴影贴图',\n summary: '由唯一的场景级质量档统一决定分辨率、过滤和偏移。',\n },\n 'shadow-group-compatibility': {\n label: '兼容阴影',\n summary: '旧 ShadowGenerator / CSM 只读兼容路径。',\n },\n },\n systems: {\n 'environment-global': {\n label: '环境贴图',\n },\n 'post-process-global': {\n label: '全局',\n summary: 'Babylon Default',\n },\n 'planar-main': {\n label: '主平面阴影',\n summary: '跟随直射光',\n },\n 'shadow-map-experiment': {\n label: '实时阴影贴图',\n },\n 'blob-shadow': {\n label: 'Blob 阴影',\n summary: '默认物体阴影',\n },\n 'static-projected-shadow': {\n label: '静态烘焙阴影',\n summary: '烘焙物体轮廓',\n },\n 'csm-shadow': {\n label: '级联阴影',\n disabled: '已禁用',\n compatibility: '兼容路径',\n },\n },\n properties: {\n 'shadowMapExperiment.qualityProfile': {\n label: '质量档',\n tooltip: '场景级质量档是编辑器预览和运行时共享的唯一质量来源;物体检查器不会覆盖贴图分辨率或过滤方式。',\n },\n 'shadowMapExperiment.maps.staticResolution': {\n label: '静态贴图',\n },\n 'shadowMapExperiment.maps.dynamicResolution': {\n label: '动态贴图',\n },\n 'shadowMapExperiment.maps.compositeResolution': {\n label: '合成贴图',\n },\n 'shadowMapExperiment.filter': {\n label: '过滤',\n },\n 'shadowMapExperiment.darkness': {\n label: '阴影强度',\n },\n 'shadowMapExperiment.bias': {\n label: '偏移',\n },\n 'shadowMapExperiment.normalBias': {\n label: '法线偏移',\n },\n 'globalVolume.enabled': {\n label: '启用',\n tooltip: '启用项目共用的默认后处理管线。关闭后会销毁运行时和编辑器预览中的 DefaultRenderingPipeline。',\n },\n 'globalVolume.hdr': {\n label: 'HDR',\n tooltip: '使用 HDR 渲染目标。通常建议开启,以保留高亮、Bloom 和 ToneMapping 的动态范围。',\n },\n 'globalVolume.environment.texture.textureAssetId': {\n label: 'IBL 贴图',\n tooltip: '从项目贴图资产中选择 Babylon scene.environmentTexture。建议使用预过滤的 .env 环境贴图。',\n },\n 'globalVolume.environment.iblIntensity': {\n label: 'IBL 强度',\n tooltip: 'PBR 材质的环境反射强度。需要先配置 IBL 贴图才会有明显效果。',\n },\n 'globalVolume.environment.rotationY': {\n label: 'IBL 旋转',\n tooltip: '环境贴图绕 Y 轴旋转,用于调整反射方向。',\n },\n 'globalVolume.imageProcessing.exposure': {\n label: '曝光',\n tooltip: '图像处理曝光倍率。1 表示保持原始亮度;数值越高画面越亮。',\n },\n 'globalVolume.imageProcessing.contrast': {\n label: '对比度',\n tooltip: '图像处理对比度倍率。1 表示默认对比;提高会增强明暗差异。',\n },\n 'globalVolume.toneMapping.enabled': {\n label: 'ToneMapping',\n tooltip: '启用色调映射,把 HDR 颜色压缩到屏幕可显示范围。',\n },\n 'globalVolume.toneMapping.type': {\n label: 'Tone 类型',\n tooltip: 'ToneMapping 曲线类型。ACES 更接近影视感;Standard 更直接;KHR PBR Neutral 更适合 PBR 中性预览。',\n },\n 'globalVolume.antialiasing.samples': {\n label: 'MSAA 采样',\n tooltip: '默认后处理管线的 MSAA 采样数。数值越高边缘越平滑,但性能成本也更高。',\n },\n 'globalVolume.postProcessing.bloom.enabled': {\n label: 'Bloom',\n tooltip: '启用泛光效果,让高亮区域向外扩散发光。',\n },\n 'globalVolume.postProcessing.bloom.threshold': {\n label: 'Bloom 阈值',\n tooltip: '参与 Bloom 的亮度阈值。数值越低,更多区域会发光。',\n },\n 'globalVolume.postProcessing.bloom.weight': {\n label: 'Bloom 强度',\n tooltip: 'Bloom 对最终画面的贡献权重。',\n },\n 'globalVolume.postProcessing.bloom.kernel': {\n label: 'Bloom 核大小',\n tooltip: 'Bloom 模糊核大小。数值越高,光晕扩散范围越大。',\n },\n 'globalVolume.postProcessing.bloom.scale': {\n label: 'Bloom 缩放',\n tooltip: 'Bloom 渲染缩放比例。较低数值更省性能,较高数值细节更稳定。',\n },\n 'shadows.defaultMode': {\n label: '默认模式',\n tooltip: '使用项目默认阴影的 GameObject 会采用这个模式。',\n },\n 'shadows.blob.enabled': {\n label: '启用',\n tooltip: '启用共用的 Blob 阴影系统。',\n },\n 'shadows.blob.appearance.color': {\n label: '颜色',\n tooltip: 'Blob 阴影颜色。透明度单独编辑。',\n },\n 'shadows.blob.appearance.color.a': {\n label: '不透明度',\n tooltip: 'Blob 阴影不透明度,范围 0 到 1。',\n },\n 'shadows.blob.appearance.edgeSoftness': {\n label: '柔边',\n tooltip: 'Blob 阴影柔边起点。数值越高,中心区域越实,边缘再逐渐淡出。',\n },\n 'shadows.blob.plane.height': {\n label: '高度',\n tooltip: 'Blob 阴影所在的地面高度。',\n },\n 'shadows.blob.plane.yOffset': {\n label: 'Y 偏移',\n tooltip: 'Blob 阴影相对地面的垂直偏移,用于避免 z-fighting。',\n },\n 'shadows.blob.size.sizeMultiplier': {\n label: '尺寸倍率',\n tooltip: '根据投射物包围盒计算 Blob 阴影尺寸时使用的倍率。',\n },\n 'shadows.blob.size.minSize': {\n label: '最小尺寸',\n tooltip: '很小物体使用的最小 Blob 阴影尺寸。',\n },\n 'shadows.blob.size.maxSize': {\n label: '最大尺寸',\n tooltip: '大型物体使用的最大 Blob 阴影尺寸。',\n },\n 'shadows.staticProjected.enabled': {\n label: '启用',\n tooltip: '启用共用的静态烘焙阴影系统。',\n },\n 'shadows.staticProjected.appearance.color': {\n label: '颜色',\n tooltip: '静态烘焙阴影颜色。透明度单独编辑。',\n },\n 'shadows.staticProjected.appearance.color.a': {\n label: '不透明度',\n tooltip: '静态烘焙阴影不透明度,范围 0 到 1。',\n },\n 'shadows.staticProjected.plane.height': {\n label: '高度',\n tooltip: '静态烘焙阴影所在的地面高度。',\n },\n 'shadows.staticProjected.plane.yOffset': {\n label: 'Y 偏移',\n tooltip: '静态烘焙阴影相对地面的垂直偏移,用于避免 z-fighting。',\n },\n 'shadows.staticProjected.bake.padding': {\n label: '留白',\n tooltip: '烘焙静态阴影前给投影范围增加的留白。',\n },\n 'shadows.staticProjected.bake.blur': {\n label: '模糊',\n tooltip: '静态阴影烘焙柔化预留半径。',\n },\n 'shadows.staticProjected.bake.texelsPerMeter': {\n label: '每米像素',\n tooltip: '静态阴影 SDF atlas 的目标像素密度。',\n },\n 'shadows.staticProjected.bake.atlasSize': {\n label: 'Atlas 尺寸',\n tooltip: '每张静态阴影 atlas 页的最大宽高。',\n },\n 'shadows.staticProjected.bake.maxAtlasPages': {\n label: '页预算',\n tooltip: '超过该 atlas 页数时,烘焙会降低实际每米像素以保护运行时成本。',\n },\n 'shadows.staticProjected.bake.sdfRadiusPx': {\n label: 'SDF 半径',\n tooltip: '用于重建清晰可控边缘的有符号距离半径,单位像素。',\n },\n 'shadows.staticProjected.bake.spatialChunkSize': {\n label: '空间分块尺寸',\n tooltip: '进入 atlas packing 前,每个空间烘焙分块覆盖的世界尺寸。',\n },\n 'shadows.staticProjected.bake.targetChunkCount': {\n label: '目标分块数',\n tooltip: '分块数量软预算。大场景会自动放大空间分块,尽量接近该数量。',\n },\n 'shadows.planar.enabled': {\n label: '启用',\n tooltip: '启用共用的平面阴影系统。运行时和编辑器预览会使用同一套参数。',\n },\n 'shadows.planar.appearance.color': {\n label: '颜色',\n tooltip: '平面阴影颜色。透明度单独编辑。',\n },\n 'shadows.planar.appearance.color.a': {\n label: '不透明度',\n tooltip: '平面阴影不透明度,范围 0 到 1。',\n },\n 'shadows.planar.plane.heightMode': {\n label: '高度来源',\n tooltip: '平面阴影接收高度。Auto 会优先从匹配的接收物体计算。',\n readonlyValue: {\n 'Auto from Receivers': '自动从接收物体计算',\n 'Fixed Height': '固定高度',\n },\n },\n 'shadows.planar.plane.height': {\n label: '备用高度',\n tooltip: '没有可用接收物体时使用的备用平面高度。',\n },\n 'shadows.planar.plane.bias': {\n label: '偏移',\n tooltip: '投影偏移量,用来避免阴影和接收平面出现闪烁或重叠伪影。',\n },\n 'shadows.planar.projection.footprintScale': {\n label: '投影缩放',\n tooltip: '围绕投射物中心缩放阴影轮廓。降低数值可减少硬边几何投影伪影。',\n },\n 'shadows.planar.stencil.enabled': {\n label: 'Stencil',\n tooltip: '使用模板缓冲,让阴影只绘制在匹配的接收物体上。',\n },\n 'shadows.planar.casters.excludePatterns': {\n label: '排除投射物',\n placeholder: '每行一个匹配规则',\n tooltip: '名称匹配这些规则的 Mesh 不会投射平面阴影。',\n },\n 'shadows.planar.casters.rootBoundaryPatterns': {\n label: '投射根节点',\n placeholder: '每行一个匹配规则',\n tooltip: '投射物自动检测的可选根节点边界规则。',\n },\n 'shadows.planar.receivers.patterns': {\n label: '接收物体',\n placeholder: '每行一个匹配规则',\n tooltip: '名称匹配这些规则的 Mesh 可以接收平面阴影。',\n },\n 'shadows.planar.direction': {\n label: '方向',\n tooltip: '阴影方向来自受保护的直射光。',\n readonlyValue: {\n 'Follow Directional Light': '跟随直射光',\n },\n },\n 'shadows.enabled': {\n label: '启用',\n },\n 'shadows.settings.mapSize': {\n label: '贴图尺寸',\n },\n 'shadows.settings.darkness': {\n label: '暗度',\n },\n 'shadows.useCsm': {\n label: '启用',\n },\n 'shadows.csm.numCascades': {\n label: '级联数量',\n },\n 'shadows.csm.lambda': {\n label: 'Lambda',\n },\n },\n },\n};\n\nfunction localizeRenderingPanelState(\n panel: EditorSceneRenderingPanelState,\n language: EditorSceneRenderingPanelLanguage,\n dirty: boolean,\n): EditorSceneRenderingPanelState {\n const text = RENDERING_PANEL_TEXT[language] ?? RENDERING_PANEL_TEXT.en;\n panel.title = text.title;\n panel.summary = text.summary;\n if (panel.status === RENDERING_PANEL_TEXT.en.dirtyStatus) panel.status = text.dirtyStatus;\n for (const action of panel.actions ?? []) {\n localizeRenderingAction(action, text, dirty);\n }\n for (const section of panel.sections) {\n const sectionText = text.sections[section.id];\n if (sectionText?.title) section.title = sectionText.title;\n if (sectionText?.summary) section.summary = sectionText.summary;\n for (const system of section.systems) {\n const systemText = text.systems[system.id];\n if (system.group) {\n const groupText = text.groups[system.group.id];\n if (groupText?.label) system.group.label = groupText.label;\n if (groupText?.summary) system.group.summary = groupText.summary;\n }\n if (systemText?.label) system.label = systemText.label;\n if (systemText?.summary && !(system.id === 'static-projected-shadow' && system.status)) {\n system.summary = systemText.summary;\n }\n if (language === 'zh' && system.id === 'environment-global' && system.summary === 'No IBL texture') {\n system.summary = '未设置 IBL 贴图';\n }\n if (systemText?.disabled && system.summary === RENDERING_PANEL_TEXT.en.systems[system.id]?.disabled) system.summary = systemText.disabled;\n if (systemText?.compatibility && system.summary === RENDERING_PANEL_TEXT.en.systems[system.id]?.compatibility) system.summary = systemText.compatibility;\n for (const action of system.actions ?? []) localizeRenderingAction(action, text, dirty);\n for (const property of system.properties) localizeRenderingProperty(property, text);\n }\n }\n return panel;\n}\n\nfunction localizeRenderingAction(\n action: NonNullable<EditorSceneRenderingPanelState['actions']>[number],\n text: RenderingPanelText,\n dirty: boolean,\n): void {\n if (action.id === 'revert-rendering') {\n action.label = text.revert;\n action.tooltip = dirty ? text.revertDirty : text.revertClean;\n }\n if (action.id === 'bake-static-shadows') {\n action.label = text.bakeStatic;\n action.tooltip = action.disabled\n ? action.tooltip === RENDERING_PANEL_TEXT.en.bakeStaticRunning\n ? text.bakeStaticRunning\n : text.bakeStaticDisabled\n : text.bakeStaticReady;\n }\n}\n\nfunction localizeRenderingProperty(\n property: EditorSceneRenderingProperty,\n text: RenderingPanelText,\n): void {\n const propertyText = text.properties[property.path];\n if (!propertyText) return;\n if (propertyText.label) property.label = propertyText.label;\n if (propertyText.tooltip) property.tooltip = propertyText.tooltip;\n if (propertyText.placeholder) property.placeholder = propertyText.placeholder;\n if (propertyText.readonlyValue && typeof property.value === 'string') {\n property.value = propertyText.readonlyValue[property.value] ?? property.value;\n }\n}\n"]}
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/rendering-profile/panel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EDITOR_SHADOW_STATIC_AUTHORING_ENABLED,\n} from '@fps-games/playable-rendering';\nimport type {\n EditorSceneRenderingPanelLanguage,\n EditorSceneRenderingPanelOptions,\n EditorSceneRenderingPanelState,\n EditorSceneRenderingPanelStateInput,\n EditorSceneRenderingProperty,\n EditorSceneRenderingProfile,\n EditorSceneRenderingGroupSlot,\n EditorSceneRenderingProgress,\n EditorSceneRenderingSystemDetail,\n EditorSceneStaticShadowBakeLifecycleState,\n EditorSceneRenderingTextureAsset,\n} from './types';\n\nconst SHADOW_RENDERING_GROUP_BLOB = {\n id: 'shadow-group-moving-object',\n label: 'Moving Object Shadows',\n summary: 'Blob: lightweight for moving objects and project-default fallback.',\n};\n\nconst SHADOW_RENDERING_GROUP_STATIC = {\n id: 'shadow-group-static-scene',\n label: 'Static Scene Shadows',\n summary: 'Consumes baked artifacts; update during authoring/build, runtime only displays results.',\n};\n\nconst SHADOW_RENDERING_GROUP_PLANAR = {\n id: 'shadow-group-directional-planar',\n label: 'Directional Planar Shadows',\n summary: 'Real-time planar projection following the directional light.',\n};\n\nconst SHADOW_RENDERING_GROUP_REALTIME = {\n id: 'shadow-group-realtime-map',\n label: 'Realtime Shadow Maps',\n summary: 'One scene-level quality profile owns map resolution, filtering, and bias.',\n};\n\nconst SHADOW_RENDERING_GROUP_COMPAT = {\n id: 'shadow-group-compatibility',\n label: 'Advanced Shadows',\n summary: 'CSM read-only runtime status.',\n};\n\nexport function createEditorSceneRenderingPanelState(\n profile: EditorSceneRenderingProfile,\n state: EditorSceneRenderingPanelStateInput = {},\n options: EditorSceneRenderingPanelOptions = {},\n): EditorSceneRenderingPanelState {\n const blob = profile.shadows.blob;\n const staticProjected = profile.shadows.staticProjected;\n const planar = profile.shadows.planar;\n const environment = profile.environment;\n const postProcess = profile.postProcess;\n const dirty = state.dirty === true;\n const lastError = state.lastError ?? null;\n const language = options.language ?? 'en';\n const staticShadowBake = resolveStaticShadowBakeLifecycleState(state.staticShadowBake, staticProjected.enabled);\n const staticShadowStatus = formatStaticShadowBakeLifecycleStatus(staticShadowBake, language);\n const staticShadowBakeInProgress = staticShadowBake.status === 'baking';\n const panel: EditorSceneRenderingPanelState = {\n title: 'Rendering',\n summary: 'Project-level rendering settings shared by editor preview and runtime.',\n dirty,\n status: lastError ?? (dirty ? 'Rendering changes are not saved yet.' : undefined),\n statusTone: lastError ? 'error' : dirty ? 'warning' : undefined,\n actions: [{\n id: 'revert-rendering',\n label: 'Revert',\n icon: 'undo',\n disabled: !dirty,\n tooltip: dirty\n ? 'Revert rendering settings to the last saved rendering settings.'\n : 'Rendering settings already match the last saved rendering settings.',\n }],\n sections: [createRenderingGroupsSection(profile.renderingGroups.slots), {\n id: 'environment',\n title: 'Environment / IBL',\n summary: 'World environment texture and reflection lighting shared by editor preview and runtime.',\n systems: [\n {\n id: 'environment-global',\n label: 'Environment Texture',\n kind: 'environment',\n active: !!environment.texture,\n summary: environment.texture?.textureAssetId ?? environment.texture?.url ?? 'No IBL texture',\n properties: [\n {\n path: 'globalVolume.environment.texture.textureAssetId',\n label: 'IBL Texture',\n valueType: 'asset',\n control: 'asset-picker-card',\n value: environment.texture?.textureAssetId ?? '',\n tooltip: 'Select a project texture asset for Babylon scene.environmentTexture. Prefer prefiltered .env environment textures.',\n commitMode: 'immediate',\n controlOptions: createEnvironmentTexturePickerControlOptions({\n textureAssets: options.textureAssets,\n currentTextureAssetId: environment.texture?.textureAssetId ?? '',\n fallbackUrl: environment.texture?.url ?? '',\n language: options.language ?? 'en',\n }),\n },\n {\n path: 'globalVolume.environment.iblIntensity',\n label: 'IBL Intensity',\n valueType: 'number',\n control: 'number',\n value: environment.iblIntensity,\n min: 0,\n step: 0.05,\n tooltip: 'Environment reflection intensity for PBR materials.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.environment.rotationY',\n label: 'IBL Rotation',\n valueType: 'number',\n control: 'number',\n value: environment.rotationY,\n step: 0.01,\n tooltip: 'Y-axis rotation applied to the environment texture.',\n commitMode: 'live',\n },\n ],\n },\n ],\n }, {\n id: 'post-process',\n title: 'Post Process Volume',\n summary: 'Global Babylon Default post-process profile shared by editor preview and runtime.',\n systems: [\n {\n id: 'post-process-global',\n label: 'Global',\n kind: 'custom',\n active: postProcess.enabled,\n summary: 'Babylon Default',\n properties: [\n {\n path: 'globalVolume.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.enabled,\n tooltip: 'Enable the shared post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.hdr',\n label: 'HDR',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.hdr,\n tooltip: 'Use HDR render targets for the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.imageProcessing.exposure',\n label: 'Exposure',\n valueType: 'number',\n control: 'number',\n value: postProcess.imageProcessing.exposure,\n min: 0,\n step: 0.01,\n tooltip: 'Image processing exposure multiplier.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.imageProcessing.contrast',\n label: 'Contrast',\n valueType: 'number',\n control: 'number',\n value: postProcess.imageProcessing.contrast,\n min: 0,\n step: 0.01,\n tooltip: 'Image processing contrast multiplier.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.toneMapping.enabled',\n label: 'ToneMapping',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.toneMapping.enabled,\n tooltip: 'Enable tone mapping in the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.toneMapping.type',\n label: 'Tone Type',\n valueType: 'enum',\n control: 'enum',\n value: postProcess.toneMapping.type,\n options: [\n { label: 'ACES', value: 'aces' },\n { label: 'Standard', value: 'standard' },\n { label: 'KHR PBR Neutral', value: 'khr-pbr-neutral' },\n ],\n tooltip: 'Tone mapping curve used by the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.antialiasing.samples',\n label: 'MSAA Samples',\n valueType: 'enum',\n control: 'enum',\n value: postProcess.antialiasing.samples,\n options: [\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '4', value: 4 },\n { label: '8', value: 8 },\n ],\n tooltip: 'MSAA sample count for the default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.postProcessing.bloom.enabled',\n label: 'Bloom',\n valueType: 'boolean',\n control: 'boolean',\n value: postProcess.bloom.enabled,\n tooltip: 'Enable bloom in the shared default post-process pipeline.',\n commitMode: 'immediate',\n },\n {\n path: 'globalVolume.postProcessing.bloom.threshold',\n label: 'Bloom Threshold',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.threshold,\n min: 0,\n step: 0.01,\n tooltip: 'Brightness threshold before pixels contribute to bloom.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.weight',\n label: 'Bloom Weight',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.weight,\n min: 0,\n step: 0.01,\n tooltip: 'Bloom contribution weight.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.kernel',\n label: 'Bloom Kernel',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.kernel,\n min: 0,\n step: 1,\n tooltip: 'Bloom blur kernel size.',\n commitMode: 'live',\n },\n {\n path: 'globalVolume.postProcessing.bloom.scale',\n label: 'Bloom Scale',\n valueType: 'number',\n control: 'number',\n value: postProcess.bloom.scale,\n min: 0.01,\n step: 0.01,\n tooltip: 'Bloom render scale.',\n commitMode: 'live',\n },\n ],\n },\n ],\n }, {\n id: 'shadows',\n title: 'Shadows',\n summary: 'Global shadow systems for editor preview and runtime.',\n layout: 'list',\n systemsCollapsible: true,\n systems: [\n ...(state.shadowMapExperiment ? [{\n id: 'shadow-map-experiment',\n label: 'Realtime Shadow Map',\n kind: 'custom' as const,\n group: { ...SHADOW_RENDERING_GROUP_REALTIME },\n active: state.shadowMapExperiment.enabled,\n summary: formatShadowMapExperimentSummary(state.shadowMapExperiment, language),\n properties: [\n {\n path: 'shadowMapExperiment.qualityProfile',\n label: 'Quality Profile',\n valueType: 'enum' as const,\n control: 'enum' as const,\n value: state.shadowMapExperiment.qualityProfileId ?? '',\n options: state.shadowMapExperiment.qualityProfileIds.map(profileId => ({\n value: profileId,\n label: formatShadowMapExperimentQualityProfileLabel(profileId, language),\n })),\n disabled: !state.shadowMapExperiment.configured\n || state.shadowMapExperiment.qualityProfileIds.length === 0,\n disabledReason: state.shadowMapExperiment.configured\n ? undefined\n : language === 'zh'\n ? '当前项目未配置实时阴影贴图。'\n : 'Shadow Map Experiment is not configured for this project.',\n tooltip: 'Scene-level quality owner shared by editor preview and runtime. Object Inspector does not override map resolution or filtering.',\n commitMode: 'immediate' as const,\n },\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.staticResolution',\n 'Static Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.staticResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.dynamicResolution',\n 'Dynamic Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.dynamicResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.maps.compositeResolution',\n 'Composite Map',\n formatShadowMapResolution(state.shadowMapExperiment.maps?.compositeResolution),\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.filter',\n 'Filter',\n state.shadowMapExperiment.filter ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.darkness',\n 'Darkness',\n state.shadowMapExperiment.darkness ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.bias',\n 'Bias',\n state.shadowMapExperiment.bias ?? '—',\n ),\n createReadonlyRenderingProperty(\n 'shadowMapExperiment.normalBias',\n 'Normal Bias',\n state.shadowMapExperiment.normalBias ?? '—',\n ),\n ],\n }] : []),\n {\n id: 'blob-shadow',\n label: 'Blob Shadow',\n kind: 'blob-shadow',\n group: { ...SHADOW_RENDERING_GROUP_BLOB },\n active: blob.enabled,\n summary: 'Default object shadow',\n properties: [\n {\n path: 'shadows.defaultMode',\n label: 'Default Mode',\n valueType: 'enum',\n control: 'enum',\n value: profile.shadows.defaultMode,\n options: createShadowDefaultModeOptions(options.language ?? 'en'),\n tooltip: 'Default shadow mode for GameObjects that use the project default.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: blob.enabled,\n tooltip: 'Enable the shared blob shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: blob.appearance.color,\n tooltip: 'Blob shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.blob.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: blob.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Blob shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.appearance.edgeSoftness',\n label: 'Soft Edge',\n valueType: 'number',\n control: 'number',\n value: blob.appearance.edgeSoftness,\n min: 0,\n max: 0.98,\n step: 0.01,\n tooltip: 'Blob shadow soft edge start. Higher values keep the center denser before fading out.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.plane.height',\n label: 'Height',\n valueType: 'number',\n control: 'number',\n value: blob.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Ground plane height used by blob shadows.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.plane.yOffset',\n label: 'Y Offset',\n valueType: 'number',\n control: 'number',\n value: blob.plane.yOffset,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Vertical offset above the blob shadow plane to reduce z-fighting.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.sizeMultiplier',\n label: 'Size Multiplier',\n valueType: 'number',\n control: 'number',\n value: blob.size.sizeMultiplier,\n min: 0,\n step: 0.01,\n tooltip: 'Scale blob shadow size from each caster bounds.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.minSize',\n label: 'Min Size',\n valueType: 'number',\n control: 'number',\n value: blob.size.minSize,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Minimum blob shadow size for tiny objects.',\n commitMode: 'live',\n },\n {\n path: 'shadows.blob.size.maxSize',\n label: 'Max Size',\n valueType: 'number',\n control: 'number',\n value: blob.size.maxSize,\n min: 0.01,\n step: 0.01,\n unit: 'm',\n tooltip: 'Maximum blob shadow size for large objects.',\n commitMode: 'live',\n },\n ],\n },\n {\n id: 'static-projected-shadow',\n label: 'Static Baked Shadow',\n kind: 'static-projected-shadow',\n group: { ...SHADOW_RENDERING_GROUP_STATIC },\n active: staticProjected.enabled,\n summary: staticShadowStatus.summary,\n status: staticShadowStatus.status,\n details: createStaticShadowBakeDetails(staticShadowBake, language),\n progress: staticShadowStatus.progress,\n actions: [{\n id: 'bake-static-shadows',\n label: 'Bake Static Shadows',\n icon: 'save',\n disabled: !staticProjected.enabled || staticShadowBakeInProgress,\n tooltip: staticShadowBakeInProgress\n ? 'Static shadow bake is already running.'\n : staticProjected.enabled\n ? 'Bake static shadow chunks for objects authored as Static Baked Shadow.'\n : 'Enable Static Baked Shadow before baking.',\n }],\n properties: [\n {\n path: 'shadows.staticProjected.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: staticProjected.enabled,\n tooltip: 'Enable the shared static projected shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.staticProjected.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: staticProjected.appearance.color,\n tooltip: 'Static shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.staticProjected.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: staticProjected.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Static shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.plane.height',\n label: 'Height',\n valueType: 'number',\n control: 'number',\n value: staticProjected.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Ground plane height used by static projected shadows.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.plane.yOffset',\n label: 'Y Offset',\n valueType: 'number',\n control: 'number',\n value: staticProjected.plane.yOffset,\n min: 0,\n step: 0.01,\n unit: 'm',\n tooltip: 'Vertical offset above the static shadow plane to reduce z-fighting.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.texelsPerMeter',\n label: 'Texels per Meter',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.texelsPerMeter,\n min: 1,\n step: 1,\n tooltip: 'Target SDF atlas texel density for baked static shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.atlasSize',\n label: 'Atlas Size',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.atlasSize,\n min: 16,\n step: 1,\n tooltip: 'Maximum width and height for each static shadow atlas page.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.maxAtlasPages',\n label: 'Page Budget',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.maxAtlasPages,\n min: 1,\n step: 1,\n tooltip: 'Maximum atlas pages allowed before bake lowers the effective texel density.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.sdfRadiusPx',\n label: 'SDF Radius',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.sdfRadiusPx,\n min: 0,\n step: 1,\n tooltip: 'Signed-distance radius in pixels used to preserve crisp controllable edges.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.staticProjected.bake.padding',\n label: 'Padding',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.padding,\n min: 0,\n step: 0.01,\n tooltip: 'Extra projected bounds padding before baking the static shadow.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.blur',\n label: 'Blur',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.blur,\n min: 0,\n step: 0.5,\n tooltip: 'Reserved blur radius for static shadow bake softness.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.spatialChunkSize',\n label: 'Spatial Chunk Size',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.spatialChunkSize,\n min: 0.01,\n step: 0.01,\n unit: 'm',\n tooltip: 'World size of each spatial bake chunk before atlas packing.',\n commitMode: 'live',\n },\n {\n path: 'shadows.staticProjected.bake.targetChunkCount',\n label: 'Target Chunks',\n valueType: 'number',\n control: 'number',\n value: staticProjected.bake.targetChunkCount,\n min: 1,\n step: 1,\n tooltip: 'Soft chunk-count budget. Large scenes automatically enlarge spatial chunks to stay near this target.',\n commitMode: 'blur',\n },\n ],\n },\n {\n id: 'planar-main',\n label: 'Planar Main',\n kind: 'planar-shadow',\n group: { ...SHADOW_RENDERING_GROUP_PLANAR },\n active: planar.enabled,\n summary: 'Follow Directional Light',\n properties: [\n {\n path: 'shadows.planar.enabled',\n label: 'Enabled',\n valueType: 'boolean',\n control: 'boolean',\n value: planar.enabled,\n tooltip: 'Enable the shared planar shadow system.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.appearance.color',\n label: 'Color',\n valueType: 'color',\n control: 'color',\n value: planar.appearance.color,\n tooltip: 'Planar shadow RGB color. Opacity is edited separately.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.appearance.color.a',\n label: 'Opacity',\n valueType: 'number',\n control: 'number',\n value: planar.appearance.color.a,\n min: 0,\n max: 1,\n step: 0.01,\n tooltip: 'Planar shadow opacity, clamped between 0 and 1.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.plane.heightMode',\n label: 'Height Source',\n valueType: 'string',\n control: 'readonly',\n value: planar.plane.heightMode === 'receiver' ? 'Auto from Receivers' : 'Fixed Height',\n readOnly: true,\n tooltip: 'Planar shadow receiver height is resolved from matched receiver meshes when available.',\n },\n {\n path: 'shadows.planar.plane.height',\n label: 'Fallback Height',\n valueType: 'number',\n control: 'number',\n value: planar.plane.height,\n step: 0.01,\n unit: 'm',\n tooltip: 'Fallback receiver plane height, used only when no receiver mesh can be resolved.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.plane.bias',\n label: 'Bias',\n valueType: 'number',\n control: 'number',\n value: planar.plane.bias,\n min: 0,\n step: 0.01,\n tooltip: 'Projection bias used to keep the planar shadow stable.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.projection.footprintScale',\n label: 'Footprint Scale',\n valueType: 'number',\n control: 'number',\n value: planar.projection.footprintScale,\n min: 0,\n max: 2,\n step: 0.01,\n tooltip: 'Scale the projected footprint around the caster center; lower values reduce hard-edged mesh projection artifacts.',\n commitMode: 'live',\n },\n {\n path: 'shadows.planar.stencil.enabled',\n label: 'Stencil',\n valueType: 'boolean',\n control: 'boolean',\n value: planar.stencil.enabled,\n tooltip: 'Use stencil routing so shadows affect only receivers.',\n commitMode: 'immediate',\n },\n {\n path: 'shadows.planar.casters.excludePatterns',\n label: 'Caster Excludes',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.casters.excludePatterns,\n placeholder: 'One pattern per line',\n tooltip: 'Meshes matching these patterns will not cast planar shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.casters.rootBoundaryPatterns',\n label: 'Caster Roots',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.casters.rootBoundaryPatterns,\n placeholder: 'One pattern per line',\n tooltip: 'Optional root boundary patterns for caster auto-detection.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.receivers.patterns',\n label: 'Receivers',\n valueType: 'string-list',\n control: 'string-list',\n value: planar.receivers.patterns,\n placeholder: 'One pattern per line',\n tooltip: 'Meshes matching these patterns can receive planar shadows.',\n commitMode: 'blur',\n },\n {\n path: 'shadows.planar.direction',\n label: 'Direction',\n valueType: 'string',\n control: 'readonly',\n value: 'Follow Directional Light',\n readOnly: true,\n tooltip: 'Shadow direction is derived from the protected Directional Light.',\n },\n ],\n },\n {\n id: 'csm-shadow',\n label: 'CSM',\n kind: 'csm-shadow',\n group: { ...SHADOW_RENDERING_GROUP_COMPAT },\n active: profile.shadows.enabled && profile.shadows.useCsm && !planar.enabled,\n readOnly: true,\n summary: profile.shadows.useCsm ? 'Compatibility path' : 'Disabled',\n properties: [\n createReadonlyRenderingProperty('shadows.useCsm', 'Enabled', profile.shadows.useCsm),\n createReadonlyRenderingProperty('shadows.csm.numCascades', 'Cascades', profile.shadows.csm.numCascades),\n createReadonlyRenderingProperty('shadows.csm.lambda', 'Lambda', profile.shadows.csm.lambda),\n ],\n },\n ],\n }],\n };\n return localizeRenderingPanelState(\n hideDisabledShadowAuthoringSystems(panel),\n language,\n dirty,\n );\n}\n\nfunction resolveStaticShadowBakeLifecycleState(\n state: EditorSceneStaticShadowBakeLifecycleState | null | undefined,\n enabled: boolean,\n): EditorSceneStaticShadowBakeLifecycleState {\n if (!enabled) {\n return {\n status: 'disabled',\n chunkCount: 0,\n };\n }\n return state ?? {\n status: 'missing',\n chunkCount: 0,\n };\n}\n\nfunction hideDisabledShadowAuthoringSystems(\n panel: EditorSceneRenderingPanelState,\n): EditorSceneRenderingPanelState {\n if (EDITOR_SHADOW_STATIC_AUTHORING_ENABLED) return panel;\n return {\n ...panel,\n sections: panel.sections.map(section => ({\n ...section,\n systems: section.systems.filter(system => system.id !== 'static-projected-shadow'),\n })),\n };\n}\n\nfunction formatStaticShadowBakeLifecycleStatus(\n state: EditorSceneStaticShadowBakeLifecycleState,\n language: EditorSceneRenderingPanelLanguage,\n): { summary: string; status: string; progress?: EditorSceneRenderingProgress } {\n const chunkCount = Math.max(0, Math.trunc(state.chunkCount ?? 0));\n const chunkText = language === 'zh'\n ? `${chunkCount} 个分块`\n : `${chunkCount} chunk${chunkCount === 1 ? '' : 's'}`;\n if (state.status === 'baking') {\n const progress = state.progress ?? {\n label: language === 'zh' ? '正在烘焙静态阴影' : 'Baking static shadows',\n indeterminate: true,\n };\n return {\n summary: language === 'zh' ? '正在烘焙' : 'Baking',\n status: language === 'zh'\n ? formatChineseStaticShadowBakingStatus(state)\n : state.reason ?? 'Baking static shadow artifact.',\n progress: {\n ...progress,\n label: language === 'zh' ? formatChineseStaticShadowProgressLabel(state) : progress.label,\n },\n };\n }\n if (state.status === 'disabled') {\n const fallback = 'Static Baked Shadow is disabled.';\n return {\n summary: language === 'zh' ? '已禁用' : 'Disabled',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态烘焙阴影已禁用。',\n language,\n ),\n };\n }\n if (state.status === 'missing') {\n const fallback = 'No static shadow bake artifact is available.';\n return {\n summary: language === 'zh' ? '缺少烘焙' : 'Missing bake',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '当前没有可用的静态阴影烘焙数据。',\n language,\n ),\n };\n }\n if (state.status === 'preview-unsaved') {\n const fallback = 'Static shadow preview has not been saved yet.';\n return {\n summary: language === 'zh' ? `预览未保存 · ${chunkText}` : `Preview unsaved · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影预览尚未保存。',\n language,\n ),\n };\n }\n if (state.status === 'out-of-date') {\n const fallback = 'Static shadow bake is out of date.';\n return {\n summary: language === 'zh' ? `已过期 · ${chunkText}` : `Out of date · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙已过期。',\n language,\n ),\n };\n }\n if (state.status === 'invalid') {\n const fallback = 'Static shadow bake artifact is invalid.';\n return {\n summary: language === 'zh' ? '烘焙无效' : 'Invalid bake',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙数据无效。',\n language,\n ),\n };\n }\n const fallback = 'Static shadow bake artifact is up to date.';\n if (chunkCount === 0) {\n return {\n summary: language === 'zh' ? '无静态投射物' : 'No static casters',\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '没有物体被显式设置为静态烘焙阴影。',\n language,\n ),\n };\n }\n return {\n summary: language === 'zh' ? `最新 · ${chunkText}` : `Up to date · ${chunkText}`,\n status: resolveLocalizedStaticShadowStatusReason(\n state.reason,\n fallback,\n '静态阴影烘焙数据已是最新。',\n language,\n ),\n };\n}\n\nfunction resolveLocalizedStaticShadowStatusReason(\n reason: string | null | undefined,\n englishFallback: string,\n localizedFallback: string,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n if (language !== 'zh') return reason ?? englishFallback;\n return !reason || reason === englishFallback ? localizedFallback : reason;\n}\n\nfunction formatChineseStaticShadowBakingStatus(state: EditorSceneStaticShadowBakeLifecycleState): string {\n const stats = state.stats ?? null;\n const phase = stats?.phase;\n const attempted = stats?.attemptedChunkCount ?? 0;\n const completed = stats?.chunkCount ?? 0;\n const atlasPages = stats?.pageCount ?? stats?.textureCount ?? 0;\n const encodedPages = stats?.textureCount ?? 0;\n if (phase === 'collect') {\n if ((stats?.sourceRootCount ?? 0) > 0) return `已收集 ${stats?.sourceRootCount ?? 0} 个静态投射物,正在准备空间分块。`;\n return '正在收集静态阴影投射物。';\n }\n if (phase === 'sdf') {\n if (attempted > 0) return `正在生成静态阴影 SDF ${Math.min(completed + 1, attempted)} / ${attempted}。`;\n return '正在生成静态阴影 SDF。';\n }\n if (phase === 'pack') {\n return `正在将 ${completed} 个静态阴影分块打包到 ${atlasPages} 张 Atlas。`;\n }\n if (phase === 'encode') {\n return `正在编码静态阴影 Atlas ${Math.min(encodedPages + 1, atlasPages || encodedPages + 1)} / ${atlasPages || encodedPages + 1}。`;\n }\n if (phase === 'complete') return '正在写入静态阴影烘焙数据。';\n if (attempted > 0) return `正在烘焙静态阴影分块 ${Math.min(completed + 1, attempted)} / ${attempted}。`;\n if ((stats?.sourceRootCount ?? 0) > 0) return `已收集 ${stats?.sourceRootCount ?? 0} 个静态投射物,正在准备分块。`;\n return '正在收集静态阴影投射物。';\n}\n\nfunction formatChineseStaticShadowProgressLabel(state: EditorSceneStaticShadowBakeLifecycleState): string {\n const stats = state.stats ?? null;\n const phase = stats?.phase;\n const attempted = stats?.attemptedChunkCount ?? 0;\n const completed = stats?.chunkCount ?? 0;\n if (phase === 'collect') return '收集静态投射物';\n if (phase === 'pack') return '打包静态阴影 Atlas';\n if (phase === 'encode') {\n const atlasPages = stats?.pageCount ?? stats?.textureCount ?? 0;\n const encodedPages = stats?.textureCount ?? 0;\n return `静态阴影 Atlas ${Math.min(encodedPages, atlasPages)} / ${atlasPages}`;\n }\n return attempted > 0\n ? `静态阴影烘焙 ${Math.min(completed, attempted)} / ${attempted}`\n : '正在烘焙静态阴影';\n}\n\nfunction createStaticShadowBakeDetails(\n state: EditorSceneStaticShadowBakeLifecycleState,\n language: EditorSceneRenderingPanelLanguage,\n): EditorSceneRenderingSystemDetail[] {\n const stats = state.stats ?? null;\n const details: EditorSceneRenderingSystemDetail[] = [];\n const add = (labelEn: string, labelZh: string, value: unknown, tone?: EditorSceneRenderingSystemDetail['tone']): void => {\n if (value == null || value === '') return;\n details.push({\n label: language === 'zh' ? labelZh : labelEn,\n value: String(value),\n ...(tone ? { tone } : {}),\n });\n };\n const chunkCount = stats?.chunkCount ?? state.chunkCount;\n const performance = calculateStaticShadowPerformanceDetails(stats, chunkCount);\n add('Static casters', '静态投射物', formatOptionalCount(stats?.sourceRootCount));\n add('Bake meshes', '参与 Mesh', formatOptionalCount(stats?.sourceMeshCount));\n add('Chunks', '分块', formatOptionalCount(chunkCount), chunkCount === 0 ? 'warning' : undefined);\n add('Atlas pages', 'Atlas 页', formatOptionalCount(stats?.pageCount ?? stats?.textureCount ?? chunkCount));\n add('Texture memory', '贴图显存', performance.textureMemoryText, performance.textureMemoryTone);\n add('Texture pixels', '贴图像素', performance.atlasPixelsText);\n add('Atlas occupancy', 'Atlas 利用率', performance.atlasOccupancyText, performance.atlasOccupancyTone);\n add('Atlas used', 'Atlas 已用', performance.atlasUsedPixelsText);\n add('Atlas allocated', 'Atlas 分配', performance.atlasAllocatedPixelsText);\n add('Runtime draws', '运行时 Draw', performance.drawCallsText);\n add('Shadow mesh', '阴影 Mesh', performance.meshText);\n add('Triangles', '三角形', performance.triangleText);\n add('Vertices', '顶点', performance.vertexText);\n add('Effective texels / m', '实际每米像素', formatOptionalNumber(stats?.effectiveTexelsPerMeter ?? stats?.texelsPerMeter));\n if (\n stats?.effectiveTexelsPerMeter != null\n && stats?.texelsPerMeter != null\n && Math.abs(stats.effectiveTexelsPerMeter - stats.texelsPerMeter) > 0.001\n ) {\n add('Target texels / m', '目标每米像素', formatOptionalNumber(stats.texelsPerMeter), 'warning');\n }\n add('Atlas size', 'Atlas 尺寸', stats?.atlasSize ? `${stats.atlasSize}px` : null);\n add('Page budget', '页预算', formatOptionalCount(stats?.maxAtlasPages));\n add('SDF radius', 'SDF 半径', stats?.sdfRadiusPx != null ? `${stats.sdfRadiusPx}px` : null);\n add('Spatial chunk', '空间分块', stats?.spatialChunkSize ? formatMeters(stats.spatialChunkSize) : null);\n if (\n stats?.effectiveSpatialChunkSize != null\n && stats?.spatialChunkSize != null\n && Math.abs(stats.effectiveSpatialChunkSize - stats.spatialChunkSize) > 0.001\n ) {\n add('Effective chunk', '实际分块', formatMeters(stats.effectiveSpatialChunkSize), 'warning');\n }\n add('Target chunks', '目标分块', formatOptionalCount(stats?.targetChunkCount));\n add('Baked chunks', '重烘分块', formatOptionalCount(stats?.bakedChunkCount));\n add('Reused chunks', '复用分块', formatOptionalCount(stats?.reusedChunkCount), stats?.reusedChunkCount ? 'success' : undefined);\n add('Resolution', '贴图尺寸', stats?.resolution ? `${stats.resolution}px` : null);\n add('Chunk size', '分块尺寸', stats?.chunkSize ? formatMeters(stats.chunkSize) : null);\n add('Duration', '耗时', formatDurationMs(stats?.durationMs, language));\n if (state.status === 'baking') {\n add('Current chunk', '当前分块', stats?.currentChunkId);\n const attempted = stats?.attemptedChunkCount;\n const completed = stats?.chunkCount;\n if (stats?.phase) add('Stage', '阶段', formatStaticShadowBakePhase(stats.phase, language));\n if (attempted != null && completed != null) {\n add('Progress', '进度', language === 'zh' ? `${completed} / ${attempted} 个分块` : `${completed} / ${attempted} chunks`);\n }\n } else {\n add('Skipped chunks', '跳过分块', formatOptionalCount(stats?.skippedChunkCount), stats?.skippedChunkCount ? 'warning' : undefined);\n }\n return details;\n}\n\nfunction calculateStaticShadowPerformanceDetails(\n stats: EditorSceneStaticShadowBakeLifecycleState['stats'],\n fallbackChunkCount: number | undefined,\n): {\n textureMemoryText: string | null;\n textureMemoryTone?: EditorSceneRenderingSystemDetail['tone'];\n atlasPixelsText: string | null;\n atlasUsedPixelsText: string | null;\n atlasAllocatedPixelsText: string | null;\n atlasOccupancyText: string | null;\n atlasOccupancyTone?: EditorSceneRenderingSystemDetail['tone'];\n drawCallsText: string | null;\n meshText: string | null;\n triangleText: string | null;\n vertexText: string | null;\n} {\n if (!stats) {\n return {\n textureMemoryText: null,\n atlasPixelsText: null,\n atlasUsedPixelsText: null,\n atlasAllocatedPixelsText: null,\n atlasOccupancyText: null,\n drawCallsText: null,\n meshText: null,\n triangleText: null,\n vertexText: null,\n };\n }\n const chunkCount = Math.max(0, Math.trunc(stats.chunkCount ?? fallbackChunkCount ?? 0));\n const isAtlas = stats.pageCount != null || stats.atlasSize != null || stats.effectiveTexelsPerMeter != null;\n const textureCount = Math.max(0, Math.trunc(\n isAtlas\n ? stats.pageCount ?? stats.textureCount ?? 0\n : stats.textureCount ?? chunkCount,\n ));\n const textureSize = isAtlas ? stats.atlasSize : stats.resolution;\n const fallbackTextureBytes = textureCount > 0 && textureSize != null && Number.isFinite(textureSize) && textureSize > 0\n ? textureCount * textureSize * textureSize * 4\n : null;\n const allocatedPixels = isAtlas\n ? stats.atlasAllocatedPixels ?? (fallbackTextureBytes != null ? fallbackTextureBytes / 4 : null)\n : (fallbackTextureBytes != null ? fallbackTextureBytes / 4 : null);\n const usedPixels = isAtlas ? stats.atlasUsedPixels ?? null : null;\n const textureBytes = allocatedPixels != null ? allocatedPixels * 4 : null;\n const occupancy = isAtlas\n ? stats.atlasOccupancy ?? (\n allocatedPixels != null && allocatedPixels > 0 && usedPixels != null\n ? usedPixels / allocatedPixels\n : null\n )\n : null;\n const drawCalls = textureCount > 0 ? textureCount : null;\n const renderMeshes = isAtlas ? drawCalls : chunkCount || null;\n const triangles = chunkCount > 0 ? chunkCount * 2 : null;\n const vertices = chunkCount > 0 ? chunkCount * 4 : null;\n return {\n textureMemoryText: formatBytes(textureBytes),\n textureMemoryTone: textureBytes != null && textureBytes >= 256 * 1024 * 1024 ? 'warning' : undefined,\n atlasPixelsText: formatPixelCount(allocatedPixels),\n atlasUsedPixelsText: formatPixelCount(usedPixels),\n atlasAllocatedPixelsText: formatPixelCount(allocatedPixels),\n atlasOccupancyText: formatPercentage(occupancy),\n atlasOccupancyTone: occupancy != null && occupancy < 0.35 ? 'warning' : undefined,\n drawCallsText: formatOptionalCount(drawCalls),\n meshText: formatOptionalCount(renderMeshes),\n triangleText: formatOptionalCount(triangles),\n vertexText: formatOptionalCount(vertices),\n };\n}\n\nfunction formatStaticShadowBakePhase(phase: string, language: EditorSceneRenderingPanelLanguage): string {\n if (language !== 'zh') return phase;\n switch (phase) {\n case 'collect': return '收集';\n case 'reuse': return '复用已有分块';\n case 'chunk': return '烘焙分块';\n case 'sdf': return '生成 SDF';\n case 'pack': return '打包 Atlas';\n case 'encode': return '编码 Atlas';\n case 'complete': return '写入结果';\n default: return phase;\n }\n}\n\nfunction formatOptionalCount(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return String(Math.max(0, Math.trunc(value)));\n}\n\nfunction formatOptionalNumber(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n}\n\nfunction formatPixelCount(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const pixels = Math.max(0, value);\n if (pixels >= 1_000_000) return `${formatOptionalNumber(pixels / 1_000_000)} MP`;\n if (pixels >= 1_000) return `${formatOptionalNumber(pixels / 1_000)} KP`;\n return formatOptionalCount(pixels);\n}\n\nfunction formatPercentage(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n return `${formatOptionalNumber(Math.max(0, Math.min(1, value)) * 100)}%`;\n}\n\nfunction formatBytes(value: number | null | undefined): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const bytes = Math.max(0, value);\n if (bytes >= 1024 * 1024 * 1024) return `${formatOptionalNumber(bytes / (1024 * 1024 * 1024))} GiB`;\n if (bytes >= 1024 * 1024) return `${formatOptionalNumber(bytes / (1024 * 1024))} MiB`;\n if (bytes >= 1024) return `${formatOptionalNumber(bytes / 1024)} KiB`;\n return `${formatOptionalCount(bytes)} B`;\n}\n\nfunction formatMeters(value: number): string {\n const text = Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n return `${text} m`;\n}\n\nfunction formatDurationMs(value: number | null | undefined, language: EditorSceneRenderingPanelLanguage): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const duration = Math.max(0, value);\n if (duration < 1000) return `${Math.round(duration)} ms`;\n const seconds = duration / 1000;\n const text = seconds < 10 ? seconds.toFixed(1) : String(Math.round(seconds));\n return language === 'zh' ? `${text} 秒` : `${text}s`;\n}\n\nfunction formatShadowMapExperimentSummary(\n state: NonNullable<EditorSceneRenderingPanelStateInput['shadowMapExperiment']>,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n if (!state.configured) return language === 'zh' ? '未配置' : 'Not configured';\n if (!state.enabled) return language === 'zh' ? '已关闭' : 'Disabled';\n const resolution = state.maps?.compositeResolution;\n const profileLabel = state.qualityProfileId\n ? formatShadowMapExperimentQualityProfileLabel(state.qualityProfileId, language)\n : language === 'zh' ? '默认' : 'Default';\n return [profileLabel, resolution ? `${resolution}px` : null, state.filter]\n .filter((value): value is string => typeof value === 'string' && value.length > 0)\n .join(' · ');\n}\n\nfunction formatShadowMapExperimentQualityProfileLabel(\n profileId: string,\n language: EditorSceneRenderingPanelLanguage,\n): string {\n const normalized = profileId.trim().toLowerCase();\n if (language === 'zh') {\n if (normalized === 'balanced') return '平衡';\n if (normalized === 'high') return '高质量';\n if (normalized === 'ultra') return '超高质量';\n if (normalized === 'performance' || normalized === 'low') return '高性能';\n }\n if (normalized === 'balanced') return 'Balanced';\n if (normalized === 'high') return 'High';\n if (normalized === 'ultra') return 'Ultra';\n if (normalized === 'performance' || normalized === 'low') return 'Performance';\n return profileId;\n}\n\nfunction formatShadowMapResolution(value: number | null | undefined): string {\n return value != null && Number.isFinite(value) ? `${Math.max(0, Math.trunc(value))} px` : '—';\n}\n\nfunction createRenderingGroupsSection(\n slots: readonly EditorSceneRenderingGroupSlot[],\n): EditorSceneRenderingPanelState['sections'][number] {\n return {\n id: 'rendering-groups',\n title: 'Rendering Groups / Order Presets',\n summary: 'Named Babylon rendering groups and alphaIndex presets used by object Inspector dropdowns.',\n layout: 'list',\n systems: slots.map((slot) => ({\n id: `rendering-group-${slot.renderingGroupId}`,\n label: slot.name,\n kind: 'rendering-group',\n active: true,\n summary: `Babylon group ${slot.renderingGroupId}`,\n actions: [{\n id: 'rendering-alpha-preset.add',\n label: 'Add Order Preset',\n icon: 'plus',\n tooltip: 'Add a named alphaIndex preset for this rendering group.',\n params: { renderingGroupId: slot.renderingGroupId },\n }],\n properties: [\n createReadonlyRenderingProperty(\n `renderingGroups.slots.${slot.renderingGroupId}.renderingGroupId`,\n 'Group ID',\n slot.renderingGroupId,\n ),\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.name`,\n label: 'Group Name',\n valueType: 'string',\n control: 'string',\n value: slot.name,\n tooltip: 'Display name for this fixed Babylon rendering group id.',\n commitMode: 'blur',\n },\n ...slot.alphaIndexPresets.flatMap((preset, index): EditorSceneRenderingProperty[] => [\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.alphaIndexPresets.${index}.name`,\n label: `Preset ${index + 1} Name`,\n valueType: 'string',\n control: 'string',\n value: preset.name,\n tooltip: 'User-facing name shown in object Inspector dropdowns.',\n commitMode: 'blur',\n actions: [{\n id: 'rendering-alpha-preset.delete',\n label: 'Delete',\n icon: 'trash',\n tooltip: 'Delete this alphaIndex preset. Existing objects keep their numeric alphaIndex.',\n params: { renderingGroupId: slot.renderingGroupId, presetIndex: index },\n }],\n },\n {\n path: `renderingGroups.slots.${slot.renderingGroupId}.alphaIndexPresets.${index}.alphaIndex`,\n label: `Preset ${index + 1} Value`,\n valueType: 'number',\n control: 'number',\n value: preset.alphaIndex,\n step: 1,\n tooltip: 'Babylon alphaIndex value stored on objects that use this preset.',\n commitMode: 'blur',\n },\n ]),\n ],\n })),\n };\n}\n\nfunction createReadonlyRenderingProperty(\n path: string,\n label: string,\n value: unknown,\n): EditorSceneRenderingProperty {\n return {\n path,\n label,\n valueType: typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'string',\n control: 'readonly',\n value,\n readOnly: true,\n };\n}\n\nfunction createEnvironmentTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneRenderingTextureAsset[];\n currentTextureAssetId: string;\n fallbackUrl: string;\n language: EditorSceneRenderingPanelLanguage;\n}): Record<string, unknown> {\n const text = input.language === 'zh'\n ? {\n pickerTitle: '选择 IBL 贴图',\n replace: '替换',\n none: '无',\n noneMeta: '未设置环境贴图',\n }\n : {\n pickerTitle: 'Select IBL Texture',\n replace: 'Replace',\n none: 'None',\n noneMeta: 'No environment texture',\n };\n const currentTexture = input.textureAssets?.find(texture => texture.id === input.currentTextureAssetId) ?? null;\n const environmentTextures = (input.textureAssets ?? []).filter(isEditorSceneEnvironmentTextureAsset);\n const currentLabel = currentTexture?.label\n ?? (input.currentTextureAssetId || input.fallbackUrl || text.none);\n const currentMeta = currentTexture?.meta\n ?? (input.currentTextureAssetId || input.fallbackUrl || text.noneMeta);\n return {\n pickerKind: 'texture',\n pickerTitle: text.pickerTitle,\n actionLabel: text.replace,\n placeholder: text.none,\n currentLabel,\n currentMeta,\n currentPreview: currentTexture ? createRenderingTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: text.none,\n value: '',\n meta: text.noneMeta,\n },\n ...environmentTextures.map(texture => ({\n label: texture.label,\n value: texture.id,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createRenderingTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction createShadowDefaultModeOptions(language: EditorSceneRenderingPanelLanguage): readonly { label: string; value: string }[] {\n return language === 'zh'\n ? [\n { label: '无阴影', value: 'none' },\n { label: 'Blob 阴影', value: 'blob' },\n ...(EDITOR_SHADOW_STATIC_AUTHORING_ENABLED\n ? [{ label: '静态烘焙阴影', value: 'static' }]\n : []),\n { label: '主平面阴影', value: 'planar' },\n ]\n : [\n { label: 'None', value: 'none' },\n { label: 'Blob', value: 'blob' },\n ...(EDITOR_SHADOW_STATIC_AUTHORING_ENABLED\n ? [{ label: 'Static Baked', value: 'static' }]\n : []),\n { label: 'Planar', value: 'planar' },\n ];\n}\n\nfunction isEditorSceneEnvironmentTextureAsset(texture: EditorSceneRenderingTextureAsset): 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 isEnvironmentTextureFormat(texture.resource.format);\n}\n\nfunction isEnvironmentTextureFormat(format: string): boolean {\n return /^\\.(env|hdr|dds|ktx|ktx2)$/i.test(format);\n}\n\nfunction createRenderingTextureAssetPreview(texture: EditorSceneRenderingTextureAsset): Record<string, unknown> {\n return {\n kind: 'image',\n url: texture.resource.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\ntype RenderingLocalizedPropertyText = {\n label?: string;\n tooltip?: string;\n placeholder?: string;\n readonlyValue?: Record<string, string>;\n};\n\ntype RenderingPanelText = {\n title: string;\n summary: string;\n dirtyStatus: string;\n revert: string;\n revertDirty: string;\n revertClean: string;\n bakeStatic: string;\n bakeStaticReady: string;\n bakeStaticDisabled: string;\n bakeStaticRunning: string;\n sections: Record<string, { title?: string; summary?: string }>;\n groups: Record<string, { label?: string; summary?: string }>;\n systems: Record<string, { label?: string; summary?: string; disabled?: string; compatibility?: string }>;\n properties: Record<string, RenderingLocalizedPropertyText>;\n};\n\nconst RENDERING_PANEL_TEXT: Record<EditorSceneRenderingPanelLanguage, RenderingPanelText> = {\n en: {\n title: 'Rendering',\n summary: 'Project-level rendering settings shared by editor preview and runtime.',\n dirtyStatus: 'Rendering changes are not saved yet.',\n revert: 'Revert',\n revertDirty: 'Revert rendering settings to the last saved rendering settings.',\n revertClean: 'Rendering settings already match the last saved rendering settings.',\n bakeStatic: 'Bake Static Shadows',\n bakeStaticReady: 'Bake static shadow chunks for objects authored as Static Baked Shadow.',\n bakeStaticDisabled: 'Enable Static Baked Shadow before baking.',\n bakeStaticRunning: 'Static shadow bake is already running.',\n sections: {\n 'rendering-groups': {\n title: 'Rendering Groups / Order Presets',\n summary: 'Named Babylon rendering groups and alphaIndex presets used by object Inspector dropdowns.',\n },\n environment: {\n title: 'Environment / IBL',\n summary: 'World environment texture and reflection lighting shared by editor preview and runtime.',\n },\n 'post-process': {\n title: 'Post Process Volume',\n summary: 'Global Babylon Default post-process profile shared by editor preview and runtime.',\n },\n shadows: {\n title: 'Shadows',\n summary: 'Global shadow systems for editor preview and runtime.',\n },\n },\n groups: {\n 'shadow-group-moving-object': {\n label: 'Moving Object Shadows',\n summary: 'Blob: lightweight for moving objects and project-default fallback.',\n },\n 'shadow-group-static-scene': {\n label: 'Static Scene Shadows',\n summary: 'Consumes baked artifacts; update during authoring/build, runtime only displays results.',\n },\n 'shadow-group-directional-planar': {\n label: 'Directional Planar Shadows',\n summary: 'Real-time planar projection following the directional light.',\n },\n 'shadow-group-realtime-map': {\n label: 'Realtime Shadow Maps',\n summary: 'One scene-level quality profile owns map resolution, filtering, and bias.',\n },\n 'shadow-group-compatibility': {\n label: 'Advanced Shadows',\n summary: 'CSM read-only runtime status.',\n },\n },\n systems: {\n 'environment-global': {\n label: 'Environment Texture',\n },\n 'post-process-global': {\n label: 'Global',\n summary: 'Babylon Default',\n },\n 'planar-main': {\n label: 'Planar Main',\n summary: 'Follow Directional Light',\n },\n 'shadow-map-experiment': {\n label: 'Realtime Shadow Map',\n },\n 'blob-shadow': {\n label: 'Blob Shadow',\n summary: 'Default object shadow',\n },\n 'static-projected-shadow': {\n label: 'Static Baked Shadow',\n summary: 'Baked object shape',\n },\n 'csm-shadow': {\n label: 'CSM',\n disabled: 'Disabled',\n compatibility: 'Compatibility path',\n },\n },\n properties: {\n 'shadowMapExperiment.qualityProfile': {\n label: 'Quality Profile',\n tooltip: 'Scene-level quality owner shared by editor preview and runtime. Object Inspector does not override map resolution or filtering.',\n },\n 'shadowMapExperiment.maps.staticResolution': {\n label: 'Static Map',\n },\n 'shadowMapExperiment.maps.dynamicResolution': {\n label: 'Dynamic Map',\n },\n 'shadowMapExperiment.maps.compositeResolution': {\n label: 'Composite Map',\n },\n 'shadowMapExperiment.filter': {\n label: 'Filter',\n },\n 'shadowMapExperiment.darkness': {\n label: 'Darkness',\n },\n 'shadowMapExperiment.bias': {\n label: 'Bias',\n },\n 'shadowMapExperiment.normalBias': {\n label: 'Normal Bias',\n },\n 'globalVolume.environment.texture.textureAssetId': {\n label: 'IBL Texture',\n tooltip: 'Select a project texture asset for Babylon scene.environmentTexture. Prefer prefiltered .env environment textures.',\n },\n 'globalVolume.environment.iblIntensity': {\n label: 'IBL Intensity',\n tooltip: 'Environment reflection intensity for PBR materials.',\n },\n 'globalVolume.environment.rotationY': {\n label: 'IBL Rotation',\n tooltip: 'Y-axis rotation applied to the environment texture.',\n },\n 'shadows.defaultMode': {\n label: 'Default Mode',\n tooltip: 'Default shadow mode for GameObjects that use the project default.',\n },\n 'shadows.blob.enabled': {\n label: 'Enabled',\n tooltip: 'Enable the shared blob shadow system.',\n },\n 'shadows.blob.appearance.color': {\n label: 'Color',\n tooltip: 'Blob shadow RGB color. Opacity is edited separately.',\n },\n 'shadows.blob.appearance.color.a': {\n label: 'Opacity',\n tooltip: 'Blob shadow opacity, clamped between 0 and 1.',\n },\n 'shadows.blob.appearance.edgeSoftness': {\n label: 'Soft Edge',\n tooltip: 'Blob shadow soft edge start. Higher values keep the center denser before fading out.',\n },\n 'shadows.blob.plane.height': {\n label: 'Height',\n tooltip: 'Ground plane height used by blob shadows.',\n },\n 'shadows.blob.plane.yOffset': {\n label: 'Y Offset',\n tooltip: 'Vertical offset above the blob shadow plane to reduce z-fighting.',\n },\n 'shadows.blob.size.sizeMultiplier': {\n label: 'Size Multiplier',\n tooltip: 'Scale blob shadow size from each caster bounds.',\n },\n 'shadows.blob.size.minSize': {\n label: 'Min Size',\n tooltip: 'Minimum blob shadow size for tiny objects.',\n },\n 'shadows.blob.size.maxSize': {\n label: 'Max Size',\n tooltip: 'Maximum blob shadow size for large objects.',\n },\n 'shadows.staticProjected.enabled': {\n label: 'Enabled',\n tooltip: 'Enable the shared static projected shadow system.',\n },\n 'shadows.staticProjected.appearance.color': {\n label: 'Color',\n tooltip: 'Static shadow RGB color. Opacity is edited separately.',\n },\n 'shadows.staticProjected.appearance.color.a': {\n label: 'Opacity',\n tooltip: 'Static shadow opacity, clamped between 0 and 1.',\n },\n 'shadows.staticProjected.plane.height': {\n label: 'Height',\n tooltip: 'Ground plane height used by static projected shadows.',\n },\n 'shadows.staticProjected.plane.yOffset': {\n label: 'Y Offset',\n tooltip: 'Vertical offset above the static shadow plane to reduce z-fighting.',\n },\n 'shadows.staticProjected.bake.padding': {\n label: 'Padding',\n tooltip: 'Extra projected bounds padding before baking the static shadow.',\n },\n 'shadows.staticProjected.bake.blur': {\n label: 'Blur',\n tooltip: 'Reserved blur radius for static shadow bake softness.',\n },\n 'shadows.staticProjected.bake.texelsPerMeter': {\n label: 'Texels per Meter',\n tooltip: 'Target SDF atlas texel density for baked static shadows.',\n },\n 'shadows.staticProjected.bake.atlasSize': {\n label: 'Atlas Size',\n tooltip: 'Maximum width and height for each static shadow atlas page.',\n },\n 'shadows.staticProjected.bake.maxAtlasPages': {\n label: 'Page Budget',\n tooltip: 'Maximum atlas pages before bake lowers the effective texel density.',\n },\n 'shadows.staticProjected.bake.sdfRadiusPx': {\n label: 'SDF Radius',\n tooltip: 'Signed-distance radius in pixels used for crisp controllable edges.',\n },\n 'shadows.staticProjected.bake.spatialChunkSize': {\n label: 'Spatial Chunk Size',\n tooltip: 'World size of each spatial bake chunk before atlas packing.',\n },\n 'shadows.staticProjected.bake.targetChunkCount': {\n label: 'Target Chunks',\n tooltip: 'Soft chunk-count budget. Large scenes automatically enlarge spatial chunks to stay near this target.',\n },\n },\n },\n zh: {\n title: '渲染',\n summary: '项目级渲染设置。编辑器预览和运行时共用同一套渲染管线。',\n dirtyStatus: '渲染设置尚未保存。',\n revert: '还原',\n revertDirty: '还原到上一次保存的渲染设置。',\n revertClean: '当前渲染设置已经和上一次保存状态一致。',\n bakeStatic: '烘焙静态阴影',\n bakeStaticReady: '为标记为静态烘焙阴影的物体生成分块阴影。',\n bakeStaticDisabled: '请先启用静态烘焙阴影。',\n bakeStaticRunning: '静态阴影正在烘焙中。',\n sections: {\n 'rendering-groups': {\n title: '渲染分组 / 顺序预设',\n summary: '项目级 Babylon rendering group 名称和 alphaIndex 预设,用于物体 Inspector 下拉选择。',\n },\n environment: {\n title: '环境 / IBL',\n summary: '世界环境贴图与 PBR 环境反射,编辑器预览和运行时共用。',\n },\n 'post-process': {\n title: '后处理 Volume',\n summary: '全局 Babylon Default 后处理参数,编辑器预览和运行时共用。',\n },\n shadows: {\n title: '阴影',\n summary: '项目级阴影系统,编辑器预览和运行时共用。',\n },\n },\n groups: {\n 'shadow-group-moving-object': {\n label: '移动物体阴影',\n summary: 'Blob:低成本,适合移动物体,也可作为项目默认阴影。',\n },\n 'shadow-group-static-scene': {\n label: '静态场景阴影',\n summary: '只显示已烘焙 artifact;编辑器/构建期更新,运行时消费结果。',\n },\n 'shadow-group-directional-planar': {\n label: '主平面实时阴影',\n summary: '跟随直射光动态投影,适合需要方向感的物体。',\n },\n 'shadow-group-realtime-map': {\n label: '实时阴影贴图',\n summary: '由唯一的场景级质量档统一决定分辨率、过滤和偏移。',\n },\n 'shadow-group-compatibility': {\n label: '兼容阴影',\n summary: '旧 ShadowGenerator / CSM 只读兼容路径。',\n },\n },\n systems: {\n 'environment-global': {\n label: '环境贴图',\n },\n 'post-process-global': {\n label: '全局',\n summary: 'Babylon Default',\n },\n 'planar-main': {\n label: '主平面阴影',\n summary: '跟随直射光',\n },\n 'shadow-map-experiment': {\n label: '实时阴影贴图',\n },\n 'blob-shadow': {\n label: 'Blob 阴影',\n summary: '默认物体阴影',\n },\n 'static-projected-shadow': {\n label: '静态烘焙阴影',\n summary: '烘焙物体轮廓',\n },\n 'csm-shadow': {\n label: '级联阴影',\n disabled: '已禁用',\n compatibility: '兼容路径',\n },\n },\n properties: {\n 'shadowMapExperiment.qualityProfile': {\n label: '质量档',\n tooltip: '场景级质量档是编辑器预览和运行时共享的唯一质量来源;物体检查器不会覆盖贴图分辨率或过滤方式。',\n },\n 'shadowMapExperiment.maps.staticResolution': {\n label: '静态贴图',\n },\n 'shadowMapExperiment.maps.dynamicResolution': {\n label: '动态贴图',\n },\n 'shadowMapExperiment.maps.compositeResolution': {\n label: '合成贴图',\n },\n 'shadowMapExperiment.filter': {\n label: '过滤',\n },\n 'shadowMapExperiment.darkness': {\n label: '阴影强度',\n },\n 'shadowMapExperiment.bias': {\n label: '偏移',\n },\n 'shadowMapExperiment.normalBias': {\n label: '法线偏移',\n },\n 'globalVolume.enabled': {\n label: '启用',\n tooltip: '启用项目共用的默认后处理管线。关闭后会销毁运行时和编辑器预览中的 DefaultRenderingPipeline。',\n },\n 'globalVolume.hdr': {\n label: 'HDR',\n tooltip: '使用 HDR 渲染目标。通常建议开启,以保留高亮、Bloom 和 ToneMapping 的动态范围。',\n },\n 'globalVolume.environment.texture.textureAssetId': {\n label: 'IBL 贴图',\n tooltip: '从项目贴图资产中选择 Babylon scene.environmentTexture。建议使用预过滤的 .env 环境贴图。',\n },\n 'globalVolume.environment.iblIntensity': {\n label: 'IBL 强度',\n tooltip: 'PBR 材质的环境反射强度。需要先配置 IBL 贴图才会有明显效果。',\n },\n 'globalVolume.environment.rotationY': {\n label: 'IBL 旋转',\n tooltip: '环境贴图绕 Y 轴旋转,用于调整反射方向。',\n },\n 'globalVolume.imageProcessing.exposure': {\n label: '曝光',\n tooltip: '图像处理曝光倍率。1 表示保持原始亮度;数值越高画面越亮。',\n },\n 'globalVolume.imageProcessing.contrast': {\n label: '对比度',\n tooltip: '图像处理对比度倍率。1 表示默认对比;提高会增强明暗差异。',\n },\n 'globalVolume.toneMapping.enabled': {\n label: 'ToneMapping',\n tooltip: '启用色调映射,把 HDR 颜色压缩到屏幕可显示范围。',\n },\n 'globalVolume.toneMapping.type': {\n label: 'Tone 类型',\n tooltip: 'ToneMapping 曲线类型。ACES 更接近影视感;Standard 更直接;KHR PBR Neutral 更适合 PBR 中性预览。',\n },\n 'globalVolume.antialiasing.samples': {\n label: 'MSAA 采样',\n tooltip: '默认后处理管线的 MSAA 采样数。数值越高边缘越平滑,但性能成本也更高。',\n },\n 'globalVolume.postProcessing.bloom.enabled': {\n label: 'Bloom',\n tooltip: '启用泛光效果,让高亮区域向外扩散发光。',\n },\n 'globalVolume.postProcessing.bloom.threshold': {\n label: 'Bloom 阈值',\n tooltip: '参与 Bloom 的亮度阈值。数值越低,更多区域会发光。',\n },\n 'globalVolume.postProcessing.bloom.weight': {\n label: 'Bloom 强度',\n tooltip: 'Bloom 对最终画面的贡献权重。',\n },\n 'globalVolume.postProcessing.bloom.kernel': {\n label: 'Bloom 核大小',\n tooltip: 'Bloom 模糊核大小。数值越高,光晕扩散范围越大。',\n },\n 'globalVolume.postProcessing.bloom.scale': {\n label: 'Bloom 缩放',\n tooltip: 'Bloom 渲染缩放比例。较低数值更省性能,较高数值细节更稳定。',\n },\n 'shadows.defaultMode': {\n label: '默认模式',\n tooltip: '使用项目默认阴影的 GameObject 会采用这个模式。',\n },\n 'shadows.blob.enabled': {\n label: '启用',\n tooltip: '启用共用的 Blob 阴影系统。',\n },\n 'shadows.blob.appearance.color': {\n label: '颜色',\n tooltip: 'Blob 阴影颜色。透明度单独编辑。',\n },\n 'shadows.blob.appearance.color.a': {\n label: '不透明度',\n tooltip: 'Blob 阴影不透明度,范围 0 到 1。',\n },\n 'shadows.blob.appearance.edgeSoftness': {\n label: '柔边',\n tooltip: 'Blob 阴影柔边起点。数值越高,中心区域越实,边缘再逐渐淡出。',\n },\n 'shadows.blob.plane.height': {\n label: '高度',\n tooltip: 'Blob 阴影所在的地面高度。',\n },\n 'shadows.blob.plane.yOffset': {\n label: 'Y 偏移',\n tooltip: 'Blob 阴影相对地面的垂直偏移,用于避免 z-fighting。',\n },\n 'shadows.blob.size.sizeMultiplier': {\n label: '尺寸倍率',\n tooltip: '根据投射物包围盒计算 Blob 阴影尺寸时使用的倍率。',\n },\n 'shadows.blob.size.minSize': {\n label: '最小尺寸',\n tooltip: '很小物体使用的最小 Blob 阴影尺寸。',\n },\n 'shadows.blob.size.maxSize': {\n label: '最大尺寸',\n tooltip: '大型物体使用的最大 Blob 阴影尺寸。',\n },\n 'shadows.staticProjected.enabled': {\n label: '启用',\n tooltip: '启用共用的静态烘焙阴影系统。',\n },\n 'shadows.staticProjected.appearance.color': {\n label: '颜色',\n tooltip: '静态烘焙阴影颜色。透明度单独编辑。',\n },\n 'shadows.staticProjected.appearance.color.a': {\n label: '不透明度',\n tooltip: '静态烘焙阴影不透明度,范围 0 到 1。',\n },\n 'shadows.staticProjected.plane.height': {\n label: '高度',\n tooltip: '静态烘焙阴影所在的地面高度。',\n },\n 'shadows.staticProjected.plane.yOffset': {\n label: 'Y 偏移',\n tooltip: '静态烘焙阴影相对地面的垂直偏移,用于避免 z-fighting。',\n },\n 'shadows.staticProjected.bake.padding': {\n label: '留白',\n tooltip: '烘焙静态阴影前给投影范围增加的留白。',\n },\n 'shadows.staticProjected.bake.blur': {\n label: '模糊',\n tooltip: '静态阴影烘焙柔化预留半径。',\n },\n 'shadows.staticProjected.bake.texelsPerMeter': {\n label: '每米像素',\n tooltip: '静态阴影 SDF atlas 的目标像素密度。',\n },\n 'shadows.staticProjected.bake.atlasSize': {\n label: 'Atlas 尺寸',\n tooltip: '每张静态阴影 atlas 页的最大宽高。',\n },\n 'shadows.staticProjected.bake.maxAtlasPages': {\n label: '页预算',\n tooltip: '超过该 atlas 页数时,烘焙会降低实际每米像素以保护运行时成本。',\n },\n 'shadows.staticProjected.bake.sdfRadiusPx': {\n label: 'SDF 半径',\n tooltip: '用于重建清晰可控边缘的有符号距离半径,单位像素。',\n },\n 'shadows.staticProjected.bake.spatialChunkSize': {\n label: '空间分块尺寸',\n tooltip: '进入 atlas packing 前,每个空间烘焙分块覆盖的世界尺寸。',\n },\n 'shadows.staticProjected.bake.targetChunkCount': {\n label: '目标分块数',\n tooltip: '分块数量软预算。大场景会自动放大空间分块,尽量接近该数量。',\n },\n 'shadows.planar.enabled': {\n label: '启用',\n tooltip: '启用共用的平面阴影系统。运行时和编辑器预览会使用同一套参数。',\n },\n 'shadows.planar.appearance.color': {\n label: '颜色',\n tooltip: '平面阴影颜色。透明度单独编辑。',\n },\n 'shadows.planar.appearance.color.a': {\n label: '不透明度',\n tooltip: '平面阴影不透明度,范围 0 到 1。',\n },\n 'shadows.planar.plane.heightMode': {\n label: '高度来源',\n tooltip: '平面阴影接收高度。Auto 会优先从匹配的接收物体计算。',\n readonlyValue: {\n 'Auto from Receivers': '自动从接收物体计算',\n 'Fixed Height': '固定高度',\n },\n },\n 'shadows.planar.plane.height': {\n label: '备用高度',\n tooltip: '没有可用接收物体时使用的备用平面高度。',\n },\n 'shadows.planar.plane.bias': {\n label: '偏移',\n tooltip: '投影偏移量,用来避免阴影和接收平面出现闪烁或重叠伪影。',\n },\n 'shadows.planar.projection.footprintScale': {\n label: '投影缩放',\n tooltip: '围绕投射物中心缩放阴影轮廓。降低数值可减少硬边几何投影伪影。',\n },\n 'shadows.planar.stencil.enabled': {\n label: 'Stencil',\n tooltip: '使用模板缓冲,让阴影只绘制在匹配的接收物体上。',\n },\n 'shadows.planar.casters.excludePatterns': {\n label: '排除投射物',\n placeholder: '每行一个匹配规则',\n tooltip: '名称匹配这些规则的 Mesh 不会投射平面阴影。',\n },\n 'shadows.planar.casters.rootBoundaryPatterns': {\n label: '投射根节点',\n placeholder: '每行一个匹配规则',\n tooltip: '投射物自动检测的可选根节点边界规则。',\n },\n 'shadows.planar.receivers.patterns': {\n label: '接收物体',\n placeholder: '每行一个匹配规则',\n tooltip: '名称匹配这些规则的 Mesh 可以接收平面阴影。',\n },\n 'shadows.planar.direction': {\n label: '方向',\n tooltip: '阴影方向来自受保护的直射光。',\n readonlyValue: {\n 'Follow Directional Light': '跟随直射光',\n },\n },\n 'shadows.enabled': {\n label: '启用',\n },\n 'shadows.settings.mapSize': {\n label: '贴图尺寸',\n },\n 'shadows.settings.darkness': {\n label: '暗度',\n },\n 'shadows.useCsm': {\n label: '启用',\n },\n 'shadows.csm.numCascades': {\n label: '级联数量',\n },\n 'shadows.csm.lambda': {\n label: 'Lambda',\n },\n },\n },\n};\n\nfunction localizeRenderingPanelState(\n panel: EditorSceneRenderingPanelState,\n language: EditorSceneRenderingPanelLanguage,\n dirty: boolean,\n): EditorSceneRenderingPanelState {\n const text = RENDERING_PANEL_TEXT[language] ?? RENDERING_PANEL_TEXT.en;\n panel.title = text.title;\n panel.summary = text.summary;\n if (panel.status === RENDERING_PANEL_TEXT.en.dirtyStatus) panel.status = text.dirtyStatus;\n for (const action of panel.actions ?? []) {\n localizeRenderingAction(action, text, dirty);\n }\n for (const section of panel.sections) {\n const sectionText = text.sections[section.id];\n if (sectionText?.title) section.title = sectionText.title;\n if (sectionText?.summary) section.summary = sectionText.summary;\n for (const system of section.systems) {\n const systemText = text.systems[system.id];\n if (system.group) {\n const groupText = text.groups[system.group.id];\n if (groupText?.label) system.group.label = groupText.label;\n if (groupText?.summary) system.group.summary = groupText.summary;\n }\n if (systemText?.label) system.label = systemText.label;\n if (systemText?.summary && !(system.id === 'static-projected-shadow' && system.status)) {\n system.summary = systemText.summary;\n }\n if (language === 'zh' && system.id === 'environment-global' && system.summary === 'No IBL texture') {\n system.summary = '未设置 IBL 贴图';\n }\n if (systemText?.disabled && system.summary === RENDERING_PANEL_TEXT.en.systems[system.id]?.disabled) system.summary = systemText.disabled;\n if (systemText?.compatibility && system.summary === RENDERING_PANEL_TEXT.en.systems[system.id]?.compatibility) system.summary = systemText.compatibility;\n for (const action of system.actions ?? []) localizeRenderingAction(action, text, dirty);\n for (const property of system.properties) localizeRenderingProperty(property, text);\n }\n }\n return panel;\n}\n\nfunction localizeRenderingAction(\n action: NonNullable<EditorSceneRenderingPanelState['actions']>[number],\n text: RenderingPanelText,\n dirty: boolean,\n): void {\n if (action.id === 'revert-rendering') {\n action.label = text.revert;\n action.tooltip = dirty ? text.revertDirty : text.revertClean;\n }\n if (action.id === 'bake-static-shadows') {\n action.label = text.bakeStatic;\n action.tooltip = action.disabled\n ? action.tooltip === RENDERING_PANEL_TEXT.en.bakeStaticRunning\n ? text.bakeStaticRunning\n : text.bakeStaticDisabled\n : text.bakeStaticReady;\n }\n}\n\nfunction localizeRenderingProperty(\n property: EditorSceneRenderingProperty,\n text: RenderingPanelText,\n): void {\n const propertyText = text.properties[property.path];\n if (!propertyText) return;\n if (propertyText.label) property.label = propertyText.label;\n if (propertyText.tooltip) property.tooltip = propertyText.tooltip;\n if (propertyText.placeholder) property.placeholder = propertyText.placeholder;\n if (propertyText.readonlyValue && typeof property.value === 'string') {\n property.value = propertyText.readonlyValue[property.value] ?? property.value;\n }\n}\n"]}