@fps-games/engine 0.0.1-beta.0 → 0.0.1-beta.10

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 (326) hide show
  1. package/dist/asset-resource.d.ts +39 -0
  2. package/dist/asset-resource.d.ts.map +1 -0
  3. package/dist/asset-resource.js +121 -0
  4. package/dist/asset-resource.js.map +1 -0
  5. package/dist/babylon/camera.d.ts +25 -0
  6. package/dist/babylon/camera.d.ts.map +1 -0
  7. package/dist/babylon/camera.js +149 -0
  8. package/dist/babylon/camera.js.map +1 -0
  9. package/dist/babylon/frame-pump.d.ts +27 -0
  10. package/dist/babylon/frame-pump.d.ts.map +1 -0
  11. package/dist/babylon/frame-pump.js +90 -0
  12. package/dist/babylon/frame-pump.js.map +1 -0
  13. package/dist/babylon/game-world-plugin-lifecycle.d.ts +26 -0
  14. package/dist/babylon/game-world-plugin-lifecycle.d.ts.map +1 -0
  15. package/dist/babylon/game-world-plugin-lifecycle.js +257 -0
  16. package/dist/babylon/game-world-plugin-lifecycle.js.map +1 -0
  17. package/dist/babylon/lighting-controller.d.ts +27 -0
  18. package/dist/babylon/lighting-controller.d.ts.map +1 -0
  19. package/dist/babylon/lighting-controller.js +272 -0
  20. package/dist/babylon/lighting-controller.js.map +1 -0
  21. package/dist/babylon/plugin-contract.d.ts +15 -0
  22. package/dist/babylon/plugin-contract.d.ts.map +1 -0
  23. package/dist/babylon/plugin-contract.js +9 -0
  24. package/dist/babylon/plugin-contract.js.map +1 -0
  25. package/dist/babylon/renderer/brdf-texture-settlement.d.ts +7 -0
  26. package/dist/babylon/renderer/brdf-texture-settlement.d.ts.map +1 -0
  27. package/dist/babylon/renderer/brdf-texture-settlement.js +29 -0
  28. package/dist/babylon/renderer/brdf-texture-settlement.js.map +1 -0
  29. package/dist/babylon/renderer/environment/environment-texture-controller.d.ts +7 -0
  30. package/dist/babylon/renderer/environment/environment-texture-controller.d.ts.map +1 -0
  31. package/dist/babylon/renderer/environment/environment-texture-controller.js +357 -0
  32. package/dist/babylon/renderer/environment/environment-texture-controller.js.map +1 -0
  33. package/dist/babylon/renderer/environment/index.d.ts +4 -0
  34. package/dist/babylon/renderer/environment/index.d.ts.map +1 -0
  35. package/dist/babylon/renderer/environment/index.js +4 -0
  36. package/dist/babylon/renderer/environment/index.js.map +1 -0
  37. package/dist/babylon/renderer/environment/profile.d.ts +3 -0
  38. package/dist/babylon/renderer/environment/profile.d.ts.map +1 -0
  39. package/dist/babylon/renderer/environment/profile.js +27 -0
  40. package/dist/babylon/renderer/environment/profile.js.map +1 -0
  41. package/dist/babylon/renderer/environment/types.d.ts +24 -0
  42. package/dist/babylon/renderer/environment/types.d.ts.map +1 -0
  43. package/dist/babylon/renderer/environment/types.js +6 -0
  44. package/dist/babylon/renderer/environment/types.js.map +1 -0
  45. package/dist/babylon/renderer/index.d.ts +25 -0
  46. package/dist/babylon/renderer/index.d.ts.map +1 -0
  47. package/dist/babylon/renderer/index.js +25 -0
  48. package/dist/babylon/renderer/index.js.map +1 -0
  49. package/dist/babylon/renderer/lighting/directional-light-angles.d.ts +17 -0
  50. package/dist/babylon/renderer/lighting/directional-light-angles.d.ts.map +1 -0
  51. package/dist/babylon/renderer/lighting/directional-light-angles.js +67 -0
  52. package/dist/babylon/renderer/lighting/directional-light-angles.js.map +1 -0
  53. package/dist/babylon/renderer/material-owner-candidates.d.ts +19 -0
  54. package/dist/babylon/renderer/material-owner-candidates.d.ts.map +1 -0
  55. package/dist/babylon/renderer/material-owner-candidates.js +212 -0
  56. package/dist/babylon/renderer/material-owner-candidates.js.map +1 -0
  57. package/dist/babylon/renderer/materials/index.d.ts +3 -0
  58. package/dist/babylon/renderer/materials/index.d.ts.map +1 -0
  59. package/dist/babylon/renderer/materials/index.js +3 -0
  60. package/dist/babylon/renderer/materials/index.js.map +1 -0
  61. package/dist/babylon/renderer/materials/material-runtime.d.ts +29 -0
  62. package/dist/babylon/renderer/materials/material-runtime.d.ts.map +1 -0
  63. package/dist/babylon/renderer/materials/material-runtime.js +660 -0
  64. package/dist/babylon/renderer/materials/material-runtime.js.map +1 -0
  65. package/dist/babylon/renderer/materials/material-slot-owner.d.ts +42 -0
  66. package/dist/babylon/renderer/materials/material-slot-owner.d.ts.map +1 -0
  67. package/dist/babylon/renderer/materials/material-slot-owner.js +318 -0
  68. package/dist/babylon/renderer/materials/material-slot-owner.js.map +1 -0
  69. package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts +4 -0
  70. package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts.map +1 -0
  71. package/dist/babylon/renderer/outlines/babylon-default/apply.js +45 -0
  72. package/dist/babylon/renderer/outlines/babylon-default/apply.js.map +1 -0
  73. package/dist/babylon/renderer/outlines/babylon-default/index.d.ts +3 -0
  74. package/dist/babylon/renderer/outlines/babylon-default/index.d.ts.map +1 -0
  75. package/dist/babylon/renderer/outlines/babylon-default/index.js +2 -0
  76. package/dist/babylon/renderer/outlines/babylon-default/index.js.map +1 -0
  77. package/dist/babylon/renderer/outlines/babylon-default/types.d.ts +7 -0
  78. package/dist/babylon/renderer/outlines/babylon-default/types.d.ts.map +1 -0
  79. package/dist/babylon/renderer/outlines/babylon-default/types.js +2 -0
  80. package/dist/babylon/renderer/outlines/babylon-default/types.js.map +1 -0
  81. package/dist/babylon/renderer/outlines/index.d.ts +4 -0
  82. package/dist/babylon/renderer/outlines/index.d.ts.map +1 -0
  83. package/dist/babylon/renderer/outlines/index.js +3 -0
  84. package/dist/babylon/renderer/outlines/index.js.map +1 -0
  85. package/dist/babylon/renderer/outlines/runtime-override.d.ts +36 -0
  86. package/dist/babylon/renderer/outlines/runtime-override.d.ts.map +1 -0
  87. package/dist/babylon/renderer/outlines/runtime-override.js +131 -0
  88. package/dist/babylon/renderer/outlines/runtime-override.js.map +1 -0
  89. package/dist/babylon/renderer/outlines/types.d.ts +7 -0
  90. package/dist/babylon/renderer/outlines/types.d.ts.map +1 -0
  91. package/dist/babylon/renderer/outlines/types.js +2 -0
  92. package/dist/babylon/renderer/outlines/types.js.map +1 -0
  93. package/dist/babylon/renderer/placement/index.d.ts +2 -0
  94. package/dist/babylon/renderer/placement/index.d.ts.map +1 -0
  95. package/dist/babylon/renderer/placement/index.js +2 -0
  96. package/dist/babylon/renderer/placement/index.js.map +1 -0
  97. package/dist/babylon/renderer/placement/runtime-drop-position.d.ts +24 -0
  98. package/dist/babylon/renderer/placement/runtime-drop-position.d.ts.map +1 -0
  99. package/dist/babylon/renderer/placement/runtime-drop-position.js +63 -0
  100. package/dist/babylon/renderer/placement/runtime-drop-position.js.map +1 -0
  101. package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts +7 -0
  102. package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts.map +1 -0
  103. package/dist/babylon/renderer/post-process/babylon-default-pipeline.js +301 -0
  104. package/dist/babylon/renderer/post-process/babylon-default-pipeline.js.map +1 -0
  105. package/dist/babylon/renderer/post-process/index.d.ts +5 -0
  106. package/dist/babylon/renderer/post-process/index.d.ts.map +1 -0
  107. package/dist/babylon/renderer/post-process/index.js +5 -0
  108. package/dist/babylon/renderer/post-process/index.js.map +1 -0
  109. package/dist/babylon/renderer/post-process/profile.d.ts +5 -0
  110. package/dist/babylon/renderer/post-process/profile.d.ts.map +1 -0
  111. package/dist/babylon/renderer/post-process/profile.js +155 -0
  112. package/dist/babylon/renderer/post-process/profile.js.map +1 -0
  113. package/dist/babylon/renderer/post-process/types.d.ts +81 -0
  114. package/dist/babylon/renderer/post-process/types.d.ts.map +1 -0
  115. package/dist/babylon/renderer/post-process/types.js +24 -0
  116. package/dist/babylon/renderer/post-process/types.js.map +1 -0
  117. package/dist/babylon/renderer/post-process/volume-stack.d.ts +4 -0
  118. package/dist/babylon/renderer/post-process/volume-stack.d.ts.map +1 -0
  119. package/dist/babylon/renderer/post-process/volume-stack.js +105 -0
  120. package/dist/babylon/renderer/post-process/volume-stack.js.map +1 -0
  121. package/dist/babylon/renderer/rendering/image-node.d.ts +35 -0
  122. package/dist/babylon/renderer/rendering/image-node.d.ts.map +1 -0
  123. package/dist/babylon/renderer/rendering/image-node.js +39 -0
  124. package/dist/babylon/renderer/rendering/image-node.js.map +1 -0
  125. package/dist/babylon/renderer/rendering/index.d.ts +3 -0
  126. package/dist/babylon/renderer/rendering/index.d.ts.map +1 -0
  127. package/dist/babylon/renderer/rendering/index.js +3 -0
  128. package/dist/babylon/renderer/rendering/index.js.map +1 -0
  129. package/dist/babylon/renderer/rendering/node-rendering.d.ts +19 -0
  130. package/dist/babylon/renderer/rendering/node-rendering.d.ts.map +1 -0
  131. package/dist/babylon/renderer/rendering/node-rendering.js +66 -0
  132. package/dist/babylon/renderer/rendering/node-rendering.js.map +1 -0
  133. package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts +5 -0
  134. package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts.map +1 -0
  135. package/dist/babylon/renderer/shadows/blob-shadow-shaders.js +46 -0
  136. package/dist/babylon/renderer/shadows/blob-shadow-shaders.js.map +1 -0
  137. package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts +5 -0
  138. package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts.map +1 -0
  139. package/dist/babylon/renderer/shadows/blob-shadow-system.js +402 -0
  140. package/dist/babylon/renderer/shadows/blob-shadow-system.js.map +1 -0
  141. package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts +84 -0
  142. package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts.map +1 -0
  143. package/dist/babylon/renderer/shadows/dynamic-shadow-system.js +566 -0
  144. package/dist/babylon/renderer/shadows/dynamic-shadow-system.js.map +1 -0
  145. package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts +7 -0
  146. package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts.map +1 -0
  147. package/dist/babylon/renderer/shadows/planar-shadow-shaders.js +316 -0
  148. package/dist/babylon/renderer/shadows/planar-shadow-shaders.js.map +1 -0
  149. package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts +5 -0
  150. package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts.map +1 -0
  151. package/dist/babylon/renderer/shadows/planar-shadow-system.js +1562 -0
  152. package/dist/babylon/renderer/shadows/planar-shadow-system.js.map +1 -0
  153. package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts +14 -0
  154. package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts.map +1 -0
  155. package/dist/babylon/renderer/shadows/shadow-generator-shaders.js +14 -0
  156. package/dist/babylon/renderer/shadows/shadow-generator-shaders.js.map +1 -0
  157. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts +68 -0
  158. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts.map +1 -0
  159. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js +829 -0
  160. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js.map +1 -0
  161. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts +148 -0
  162. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts.map +1 -0
  163. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js +4529 -0
  164. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js.map +1 -0
  165. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts +4 -0
  166. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts.map +1 -0
  167. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js +645 -0
  168. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js.map +1 -0
  169. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts +61 -0
  170. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts.map +1 -0
  171. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js +382 -0
  172. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js.map +1 -0
  173. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts +47 -0
  174. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts.map +1 -0
  175. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js +285 -0
  176. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js.map +1 -0
  177. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts +88 -0
  178. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts.map +1 -0
  179. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js +830 -0
  180. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js.map +1 -0
  181. package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts +3 -0
  182. package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts.map +1 -0
  183. package/dist/babylon/renderer/shadows/static-projected-shadow-options.js +60 -0
  184. package/dist/babylon/renderer/shadows/static-projected-shadow-options.js.map +1 -0
  185. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts +27 -0
  186. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts.map +1 -0
  187. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js +220 -0
  188. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js.map +1 -0
  189. package/dist/babylon/renderer/shadows/types.d.ts +421 -0
  190. package/dist/babylon/renderer/shadows/types.d.ts.map +1 -0
  191. package/dist/babylon/renderer/shadows/types.js +127 -0
  192. package/dist/babylon/renderer/shadows/types.js.map +1 -0
  193. package/dist/babylon/renderer/world-rendering-controller.d.ts +29 -0
  194. package/dist/babylon/renderer/world-rendering-controller.d.ts.map +1 -0
  195. package/dist/babylon/renderer/world-rendering-controller.js +160 -0
  196. package/dist/babylon/renderer/world-rendering-controller.js.map +1 -0
  197. package/dist/babylon/renderer-controller.d.ts +93 -0
  198. package/dist/babylon/renderer-controller.d.ts.map +1 -0
  199. package/dist/babylon/renderer-controller.js +706 -0
  200. package/dist/babylon/renderer-controller.js.map +1 -0
  201. package/dist/babylon/scene-renderer.d.ts +20 -0
  202. package/dist/babylon/scene-renderer.d.ts.map +1 -0
  203. package/dist/babylon/scene-renderer.js +60 -0
  204. package/dist/babylon/scene-renderer.js.map +1 -0
  205. package/dist/babylon.d.ts +8 -0
  206. package/dist/babylon.d.ts.map +1 -1
  207. package/dist/babylon.js +8 -0
  208. package/dist/babylon.js.map +1 -1
  209. package/dist/build-info.json +4 -4
  210. package/dist/camera.d.ts +25 -0
  211. package/dist/camera.d.ts.map +1 -0
  212. package/dist/camera.js +68 -0
  213. package/dist/camera.js.map +1 -0
  214. package/dist/compiled-scene-data.d.ts +23 -0
  215. package/dist/compiled-scene-data.d.ts.map +1 -0
  216. package/dist/compiled-scene-data.js +100 -0
  217. package/dist/compiled-scene-data.js.map +1 -0
  218. package/dist/frame.d.ts +32 -0
  219. package/dist/frame.d.ts.map +1 -0
  220. package/dist/frame.js +54 -0
  221. package/dist/frame.js.map +1 -0
  222. package/dist/ground-decal.d.ts +22 -0
  223. package/dist/ground-decal.d.ts.map +1 -0
  224. package/dist/ground-decal.js +48 -0
  225. package/dist/ground-decal.js.map +1 -0
  226. package/dist/index.d.ts +17 -1
  227. package/dist/index.d.ts.map +1 -1
  228. package/dist/index.js +17 -1
  229. package/dist/index.js.map +1 -1
  230. package/dist/lighting.d.ts +66 -0
  231. package/dist/lighting.d.ts.map +1 -0
  232. package/dist/lighting.js +197 -0
  233. package/dist/lighting.js.map +1 -0
  234. package/dist/material-owner.d.ts +128 -0
  235. package/dist/material-owner.d.ts.map +1 -0
  236. package/dist/material-owner.js +434 -0
  237. package/dist/material-owner.js.map +1 -0
  238. package/dist/material-profile.d.ts +62 -0
  239. package/dist/material-profile.d.ts.map +1 -0
  240. package/dist/material-profile.js +132 -0
  241. package/dist/material-profile.js.map +1 -0
  242. package/dist/rendering/index.d.ts +14 -0
  243. package/dist/rendering/index.d.ts.map +1 -0
  244. package/dist/rendering/index.js +12 -0
  245. package/dist/rendering/index.js.map +1 -0
  246. package/dist/rendering/rendering-profile-types.d.ts +322 -0
  247. package/dist/rendering/rendering-profile-types.d.ts.map +1 -0
  248. package/dist/rendering/rendering-profile-types.js +2 -0
  249. package/dist/rendering/rendering-profile-types.js.map +1 -0
  250. package/dist/rendering/rendering-profile-validation.d.ts +2 -0
  251. package/dist/rendering/rendering-profile-validation.d.ts.map +1 -0
  252. package/dist/rendering/rendering-profile-validation.js +364 -0
  253. package/dist/rendering/rendering-profile-validation.js.map +1 -0
  254. package/dist/rendering/rendering-profile-values.d.ts +19 -0
  255. package/dist/rendering/rendering-profile-values.d.ts.map +1 -0
  256. package/dist/rendering/rendering-profile-values.js +79 -0
  257. package/dist/rendering/rendering-profile-values.js.map +1 -0
  258. package/dist/rendering/rendering-profile.d.ts +15 -0
  259. package/dist/rendering/rendering-profile.d.ts.map +1 -0
  260. package/dist/rendering/rendering-profile.js +442 -0
  261. package/dist/rendering/rendering-profile.js.map +1 -0
  262. package/dist/rendering/shadow-map-experiment-depth.d.ts +63 -0
  263. package/dist/rendering/shadow-map-experiment-depth.d.ts.map +1 -0
  264. package/dist/rendering/shadow-map-experiment-depth.js +186 -0
  265. package/dist/rendering/shadow-map-experiment-depth.js.map +1 -0
  266. package/dist/rendering/shadow-map-experiment-lifecycle.d.ts +94 -0
  267. package/dist/rendering/shadow-map-experiment-lifecycle.d.ts.map +1 -0
  268. package/dist/rendering/shadow-map-experiment-lifecycle.js +407 -0
  269. package/dist/rendering/shadow-map-experiment-lifecycle.js.map +1 -0
  270. package/dist/rendering/shadow-map-experiment.d.ts +189 -0
  271. package/dist/rendering/shadow-map-experiment.d.ts.map +1 -0
  272. package/dist/rendering/shadow-map-experiment.js +549 -0
  273. package/dist/rendering/shadow-map-experiment.js.map +1 -0
  274. package/dist/rendering/shadow-quality.d.ts +5 -0
  275. package/dist/rendering/shadow-quality.d.ts.map +1 -0
  276. package/dist/rendering/shadow-quality.js +83 -0
  277. package/dist/rendering/shadow-quality.js.map +1 -0
  278. package/dist/rendering/shadow-runtime.d.ts +59 -0
  279. package/dist/rendering/shadow-runtime.d.ts.map +1 -0
  280. package/dist/rendering/shadow-runtime.js +378 -0
  281. package/dist/rendering/shadow-runtime.js.map +1 -0
  282. package/dist/rendering/shadow-settings.d.ts +15 -0
  283. package/dist/rendering/shadow-settings.d.ts.map +1 -0
  284. package/dist/rendering/shadow-settings.js +129 -0
  285. package/dist/rendering/shadow-settings.js.map +1 -0
  286. package/dist/rendering/shadow-types.d.ts +99 -0
  287. package/dist/rendering/shadow-types.d.ts.map +1 -0
  288. package/dist/rendering/shadow-types.js +5 -0
  289. package/dist/rendering/shadow-types.js.map +1 -0
  290. package/dist/rendering/shadow-validation.d.ts +3 -0
  291. package/dist/rendering/shadow-validation.d.ts.map +1 -0
  292. package/dist/rendering/shadow-validation.js +166 -0
  293. package/dist/rendering/shadow-validation.js.map +1 -0
  294. package/dist/rendering/value.d.ts +2 -0
  295. package/dist/rendering/value.d.ts.map +1 -0
  296. package/dist/rendering/value.js +6 -0
  297. package/dist/rendering/value.js.map +1 -0
  298. package/dist/runtime-data-token.d.ts +4 -0
  299. package/dist/runtime-data-token.d.ts.map +1 -0
  300. package/dist/runtime-data-token.js +4 -0
  301. package/dist/runtime-data-token.js.map +1 -0
  302. package/dist/runtime-data-types.d.ts +83 -0
  303. package/dist/runtime-data-types.d.ts.map +1 -0
  304. package/dist/runtime-data-types.js +2 -0
  305. package/dist/runtime-data-types.js.map +1 -0
  306. package/dist/runtime-data.d.ts +18 -0
  307. package/dist/runtime-data.d.ts.map +1 -0
  308. package/dist/runtime-data.js +301 -0
  309. package/dist/runtime-data.js.map +1 -0
  310. package/dist/runtime-scene-resolvers.d.ts +37 -0
  311. package/dist/runtime-scene-resolvers.d.ts.map +1 -0
  312. package/dist/runtime-scene-resolvers.js +40 -0
  313. package/dist/runtime-scene-resolvers.js.map +1 -0
  314. package/dist/scene-artifact-types.d.ts +383 -0
  315. package/dist/scene-artifact-types.d.ts.map +1 -0
  316. package/dist/scene-artifact-types.js +2 -0
  317. package/dist/scene-artifact-types.js.map +1 -0
  318. package/dist/scene-artifact-validation.d.ts +19 -0
  319. package/dist/scene-artifact-validation.d.ts.map +1 -0
  320. package/dist/scene-artifact-validation.js +1352 -0
  321. package/dist/scene-artifact-validation.js.map +1 -0
  322. package/dist/static-shadow-artifact.d.ts +131 -0
  323. package/dist/static-shadow-artifact.d.ts.map +1 -0
  324. package/dist/static-shadow-artifact.js +327 -0
  325. package/dist/static-shadow-artifact.js.map +1 -0
  326. package/package.json +11 -2
@@ -0,0 +1,706 @@
1
+ import { createFpsAssetResourceResolver } from '../asset-resource.js';
2
+ import { createFpsRuntimeDataSnapshot } from '../runtime-data.js';
3
+ import { FPS_SHADOW_MAP_EXPERIMENT_PLUGIN_ID, createShadowMapExperimentPlanSnapshot, normalizeEditorSceneRenderingProfile, shadowMapExperimentDarknessFromStrength, } from '../rendering/index.js';
4
+ import { defineFpsPluginEntry, defineFpsPluginManifest, } from '@fps-games/plugin-sdk';
5
+ import { FPS_ASSET_RESOURCE_RESOLVER, FPS_ASSET_CATALOG_SOURCE, FPS_BABYLON_RENDERER_PLUGIN_ID, FPS_BABYLON_RENDERER_CONTEXT, FPS_BABYLON_RENDERER_DATA, FPS_BABYLON_RENDERER_SERVICE, } from './plugin-contract.js';
6
+ import { waitForBabylonSceneBrdfTextures } from './renderer/brdf-texture-settlement.js';
7
+ import { createBabylonEnvironmentTextureController } from './renderer/environment/environment-texture-controller.js';
8
+ import { createBabylonDefaultPostProcessPipelineController, readBabylonDefaultPostProcessPipelineControllerCleanup, } from './renderer/post-process/babylon-default-pipeline.js';
9
+ import { createBabylonShadowMapExperimentSystem, readBabylonShadowMapExperimentSystemCleanup, resolveBabylonDirectionalLight, } from './renderer/shadows/shadow-map-experiment-system.js';
10
+ import { normalizeDirectionVector, } from './renderer/lighting/directional-light-angles.js';
11
+ export { FPS_BABYLON_RENDERER_PLUGIN_ID } from './plugin-contract.js';
12
+ const fpsBabylonRendererSceneOwners = new WeakMap();
13
+ export const pluginEntry = defineFpsPluginEntry({
14
+ pluginId: FPS_BABYLON_RENDERER_PLUGIN_ID,
15
+ environment: 'renderer',
16
+ register(context) {
17
+ const rendererContext = context.services.get(FPS_BABYLON_RENDERER_CONTEXT);
18
+ const runtimeData = context.services.get(FPS_BABYLON_RENDERER_DATA);
19
+ const assetResources = createFpsAssetResourceResolver(context.services.get(FPS_ASSET_CATALOG_SOURCE).catalog);
20
+ context.add(context.services.register(FPS_ASSET_RESOURCE_RESOLVER, assetResources));
21
+ const releaseSceneOwnership = reserveFpsBabylonRendererScene(rendererContext.scene);
22
+ let createdService;
23
+ try {
24
+ createdService = createFpsBabylonRendererService(runtimeData, rendererContext, assetResources, diagnostic => context.report(diagnostic), releaseSceneOwnership);
25
+ }
26
+ catch (error) {
27
+ const recoverConstruction = readFpsBabylonRendererConstructionCleanup(error)
28
+ ?? readBabylonShadowMapExperimentSystemCleanup(error)
29
+ ?? readBabylonDefaultPostProcessPipelineControllerCleanup(error);
30
+ if (recoverConstruction) {
31
+ context.add(() => {
32
+ const cleanupErrors = [...recoverConstruction()];
33
+ if (cleanupErrors.length > 0) {
34
+ throw Object.assign(new Error('Babylon renderer construction cleanup failed.'), { cleanupErrors: Object.freeze(cleanupErrors) });
35
+ }
36
+ releaseSceneOwnership();
37
+ });
38
+ }
39
+ else {
40
+ try {
41
+ releaseSceneOwnership();
42
+ }
43
+ catch (cleanupError) {
44
+ const recoverRelease = createFpsBabylonRendererConstructionCleanup([releaseSceneOwnership]);
45
+ context.add(() => throwCleanupResult(recoverRelease()));
46
+ throw createFailureWithMetadata(error, 'Babylon renderer construction failed.', {
47
+ cleanupErrors: Object.freeze([cleanupError]),
48
+ fpsBabylonRendererConstructionCleanup: recoverRelease,
49
+ });
50
+ }
51
+ }
52
+ throw error;
53
+ }
54
+ context.add(context.services.register(FPS_BABYLON_RENDERER_SERVICE, createdService));
55
+ context.add(() => createdService.dispose());
56
+ },
57
+ async start(context) {
58
+ await getFpsBabylonRendererInternalService(context).initialize();
59
+ },
60
+ async dispose(context) {
61
+ await context.services.getOptional(FPS_BABYLON_RENDERER_SERVICE)?.dispose();
62
+ },
63
+ });
64
+ export function createFpsBabylonRendererPlugin(options) {
65
+ const manifest = defineFpsPluginManifest({
66
+ id: FPS_BABYLON_RENDERER_PLUGIN_ID,
67
+ version: options.pluginVersion,
68
+ apiVersion: 1,
69
+ requires: {},
70
+ provides: { features: ['fps.renderer.babylon'] },
71
+ entries: { renderer: './renderer' },
72
+ environmentContracts: {
73
+ renderer: {
74
+ requires: {
75
+ services: [
76
+ FPS_BABYLON_RENDERER_CONTEXT.id,
77
+ FPS_BABYLON_RENDERER_DATA.id,
78
+ FPS_ASSET_CATALOG_SOURCE.id,
79
+ ],
80
+ },
81
+ provides: {
82
+ services: [
83
+ FPS_ASSET_RESOURCE_RESOLVER.id,
84
+ FPS_BABYLON_RENDERER_SERVICE.id,
85
+ ],
86
+ },
87
+ scopes: ['application'],
88
+ },
89
+ },
90
+ deploymentConstraints: {
91
+ allowedTargets: ['editor', 'game-development', 'game-test', 'game-production'],
92
+ },
93
+ });
94
+ return Object.freeze({ manifest, renderer: pluginEntry });
95
+ }
96
+ function createFpsBabylonRendererService(initialData, context, assetResources, report, releaseSceneOwnership) {
97
+ const initialPrepared = prepareFpsBabylonRendererUpdate(initialData, assetResources, report);
98
+ let data = initialPrepared.data;
99
+ let disposed = false;
100
+ let acceptingUpdates = true;
101
+ let activeAbort = null;
102
+ let queue = Promise.resolve();
103
+ let disposePromise = null;
104
+ const originalEnvironmentTexture = context.scene.environmentTexture;
105
+ const sceneEnvironmentState = context.scene;
106
+ const originalEnvironmentIntensity = sceneEnvironmentState.environmentIntensity;
107
+ const restoreOriginalSceneEnvironment = () => {
108
+ context.scene.environmentTexture = originalEnvironmentTexture;
109
+ if (originalEnvironmentIntensity === undefined)
110
+ delete sceneEnvironmentState.environmentIntensity;
111
+ else
112
+ sceneEnvironmentState.environmentIntensity = originalEnvironmentIntensity;
113
+ };
114
+ for (const camera of context.cameras) {
115
+ assertFpsBabylonRendererCameraScene(camera, context.scene);
116
+ }
117
+ const postProcess = createBabylonDefaultPostProcessPipelineController(context.scene, [...context.cameras], null);
118
+ let cameraRegistry;
119
+ try {
120
+ cameraRegistry = createFpsBabylonRendererCameraRegistry(postProcess, context.scene, context.cameras, () => acceptingUpdates && !disposed);
121
+ }
122
+ catch (error) {
123
+ throwFpsBabylonRendererConstructionFailure(error, [
124
+ () => postProcess.dispose(),
125
+ restoreOriginalSceneEnvironment,
126
+ ]);
127
+ }
128
+ let environment;
129
+ try {
130
+ environment = createBabylonEnvironmentTextureController(context.scene, {
131
+ createTexture: context.createEnvironmentTexture,
132
+ });
133
+ }
134
+ catch (error) {
135
+ throwFpsBabylonRendererConstructionFailure(error, [
136
+ () => cameraRegistry.dispose(),
137
+ () => postProcess.dispose(),
138
+ restoreOriginalSceneEnvironment,
139
+ ]);
140
+ }
141
+ let shadowMapExperiment;
142
+ try {
143
+ shadowMapExperiment = createBabylonShadowMapExperimentSystem(context.scene);
144
+ }
145
+ catch (error) {
146
+ const shadowCleanup = readBabylonShadowMapExperimentSystemCleanup(error);
147
+ throwFpsBabylonRendererConstructionFailure(error, [
148
+ ...(shadowCleanup ? [() => throwCleanupResult(shadowCleanup())] : []),
149
+ () => environment.dispose(),
150
+ () => cameraRegistry.dispose(),
151
+ () => postProcess.dispose(),
152
+ restoreOriginalSceneEnvironment,
153
+ ]);
154
+ }
155
+ const assertAcceptingShadowOwnership = () => {
156
+ if (!acceptingUpdates || disposed) {
157
+ throw new Error('Babylon renderer service is disposed.');
158
+ }
159
+ };
160
+ const shadows = Object.freeze({
161
+ registerRuntimeShadowObjects: (input) => {
162
+ assertAcceptingShadowOwnership();
163
+ return shadowMapExperiment.registerRuntimeShadowObjects(input);
164
+ },
165
+ registerActivitySource: (input) => {
166
+ assertAcceptingShadowOwnership();
167
+ return shadowMapExperiment.registerCasterActivitySource(input);
168
+ },
169
+ getRuntimeSnapshot: () => shadowMapExperiment.getRuntimeSnapshot(),
170
+ getEvidence: () => shadowMapExperiment.getEvidence(),
171
+ getAppearance: () => {
172
+ const evidence = shadowMapExperiment.getEvidence();
173
+ const appearance = evidence.appearance;
174
+ const qualityProfileId = evidence.effectivePlan?.qualityProfileId;
175
+ return appearance && qualityProfileId
176
+ ? Object.freeze({ ...appearance, qualityProfileId })
177
+ : null;
178
+ },
179
+ previewAppearance: (input) => {
180
+ assertAcceptingShadowOwnership();
181
+ const appearance = validateShadowAppearancePreview(input);
182
+ return shadowMapExperiment.previewAppearance({
183
+ darkness: shadowMapExperimentDarknessFromStrength(appearance.strength),
184
+ softness: appearance.softness,
185
+ });
186
+ },
187
+ });
188
+ const cameras = Object.freeze({
189
+ register: (camera) => {
190
+ if (!acceptingUpdates || disposed) {
191
+ throw new Error('Babylon renderer service is disposed.');
192
+ }
193
+ return cameraRegistry.register(camera);
194
+ },
195
+ });
196
+ const lightingPreviewStates = new Map();
197
+ const lighting = Object.freeze({
198
+ previewDirectionalLight(input) {
199
+ if (!acceptingUpdates || disposed) {
200
+ throw new Error('Babylon renderer service is disposed.');
201
+ }
202
+ const preview = validateDirectionalLightPreview(input);
203
+ const light = resolveBabylonDirectionalLight(context.scene, preview.entityId);
204
+ if (!light) {
205
+ throw Object.assign(new Error(`Babylon renderer DirectionalLight "${preview.entityId}" was not found.`), { code: 'babylon.renderer.directionalLightMissing', entityId: preview.entityId });
206
+ }
207
+ let state = lightingPreviewStates.get(light);
208
+ if (!state) {
209
+ state = {
210
+ enabled: light.isEnabled(),
211
+ intensity: light.intensity,
212
+ diffuse: light.diffuse.clone(),
213
+ direction: light.direction.clone(),
214
+ directionOwnedDirectly: false,
215
+ };
216
+ lightingPreviewStates.set(light, state);
217
+ }
218
+ const previous = {
219
+ enabled: light.isEnabled(),
220
+ intensity: light.intensity,
221
+ diffuse: light.diffuse.clone(),
222
+ };
223
+ try {
224
+ if (preview.enabled !== undefined)
225
+ light.setEnabled(preview.enabled);
226
+ if (preview.intensity !== undefined)
227
+ light.intensity = preview.intensity;
228
+ if (preview.diffuseColor) {
229
+ light.diffuse.set(preview.diffuseColor.r, preview.diffuseColor.g, preview.diffuseColor.b);
230
+ }
231
+ if (preview.direction) {
232
+ const normalized = normalizeDirectionVector(preview.direction);
233
+ const handledByShadowMap = shadowMapExperiment.previewLightDirection(preview.entityId, [normalized.x, normalized.y, normalized.z]);
234
+ if (!handledByShadowMap) {
235
+ light.direction.set(normalized.x, normalized.y, normalized.z);
236
+ state.directionOwnedDirectly = true;
237
+ }
238
+ }
239
+ }
240
+ catch (error) {
241
+ light.setEnabled(previous.enabled);
242
+ light.intensity = previous.intensity;
243
+ light.diffuse.copyFrom(previous.diffuse);
244
+ throw error;
245
+ }
246
+ },
247
+ });
248
+ const rendering = Object.freeze({
249
+ getEnvironmentAppearance() {
250
+ const profile = environment.getProfile();
251
+ const texture = environment.getTexture();
252
+ if (!profile?.texture || !texture)
253
+ return null;
254
+ return Object.freeze({
255
+ iblIntensity: Number.isFinite(texture.level)
256
+ ? texture.level
257
+ : profile.intensity,
258
+ iblRotationY: Number.isFinite(texture.rotationY)
259
+ ? texture.rotationY
260
+ : profile.rotationY,
261
+ });
262
+ },
263
+ previewEnvironmentAppearance(input) {
264
+ if (!acceptingUpdates || disposed) {
265
+ throw new Error('Babylon renderer service is disposed.');
266
+ }
267
+ const appearance = validateEnvironmentAppearancePreview(input);
268
+ const profile = environment.getProfile();
269
+ const texture = environment.getTexture();
270
+ if (!profile?.texture || !texture)
271
+ return false;
272
+ const previousLevel = texture.level;
273
+ const previousRotationY = texture.rotationY;
274
+ try {
275
+ texture.level = appearance.iblIntensity;
276
+ texture.rotationY = appearance.iblRotationY;
277
+ }
278
+ catch (error) {
279
+ texture.level = previousLevel;
280
+ texture.rotationY = previousRotationY;
281
+ throw error;
282
+ }
283
+ return true;
284
+ },
285
+ });
286
+ const cleanup = () => {
287
+ const cleanupErrors = [];
288
+ for (const [light, state] of lightingPreviewStates) {
289
+ try {
290
+ if (!light.isDisposed()) {
291
+ light.setEnabled(state.enabled);
292
+ light.intensity = state.intensity;
293
+ light.diffuse.copyFrom(state.diffuse);
294
+ if (state.directionOwnedDirectly)
295
+ light.direction.copyFrom(state.direction);
296
+ }
297
+ lightingPreviewStates.delete(light);
298
+ }
299
+ catch (error) {
300
+ cleanupErrors.push(error);
301
+ }
302
+ }
303
+ try {
304
+ shadowMapExperiment.dispose();
305
+ }
306
+ catch (error) {
307
+ cleanupErrors.push(error);
308
+ }
309
+ try {
310
+ environment.dispose();
311
+ }
312
+ catch (error) {
313
+ cleanupErrors.push(error);
314
+ }
315
+ try {
316
+ cameraRegistry.dispose();
317
+ }
318
+ catch (error) {
319
+ cleanupErrors.push(error);
320
+ }
321
+ try {
322
+ postProcess.dispose();
323
+ }
324
+ catch (error) {
325
+ cleanupErrors.push(error);
326
+ }
327
+ try {
328
+ restoreOriginalSceneEnvironment();
329
+ }
330
+ catch (error) {
331
+ cleanupErrors.push(error);
332
+ }
333
+ if (cleanupErrors.length === 0) {
334
+ try {
335
+ releaseSceneOwnership();
336
+ }
337
+ catch (error) {
338
+ cleanupErrors.push(error);
339
+ }
340
+ }
341
+ if (cleanupErrors.length > 0) {
342
+ const error = new Error('Babylon renderer cleanup failed.');
343
+ Object.assign(error, { cleanupErrors });
344
+ throw error;
345
+ }
346
+ };
347
+ const commit = async (prepared, signal) => {
348
+ const previousEnvironment = environment.getProfile();
349
+ const previousControllerTexture = environment.getTexture();
350
+ const previousSceneTexture = context.scene.environmentTexture;
351
+ const previousPostProcess = postProcess.getProfile();
352
+ const previousShadowMapExperimentPlan = shadowMapExperiment.getPlan();
353
+ try {
354
+ shadowMapExperiment.setPlan(prepared.shadowMapExperimentPlan);
355
+ postProcess.setProfile(prepared.postProcess);
356
+ await environment.applyProfile(prepared.environment, signal);
357
+ if (signal.aborted)
358
+ throw createFpsBabylonRendererAbortError();
359
+ data = prepared.data;
360
+ }
361
+ catch (error) {
362
+ const rollbackErrors = [];
363
+ try {
364
+ await environment.applyProfile(previousEnvironment);
365
+ }
366
+ catch (rollbackError) {
367
+ rollbackErrors.push(rollbackError);
368
+ }
369
+ try {
370
+ if (previousSceneTexture !== previousControllerTexture) {
371
+ context.scene.environmentTexture = previousSceneTexture;
372
+ }
373
+ }
374
+ catch (rollbackError) {
375
+ rollbackErrors.push(rollbackError);
376
+ }
377
+ try {
378
+ postProcess.setProfile(previousPostProcess);
379
+ }
380
+ catch (rollbackError) {
381
+ rollbackErrors.push(rollbackError);
382
+ }
383
+ try {
384
+ shadowMapExperiment.setPlan(previousShadowMapExperimentPlan);
385
+ }
386
+ catch (rollbackError) {
387
+ rollbackErrors.push(rollbackError);
388
+ }
389
+ if (rollbackErrors.length > 0) {
390
+ throw createFailureWithMetadata(error, 'Babylon renderer update failed.', { rollbackErrors: Object.freeze(rollbackErrors) });
391
+ }
392
+ throw error;
393
+ }
394
+ };
395
+ const enqueue = (prepared) => {
396
+ const operation = queue.then(async () => {
397
+ if (!acceptingUpdates || disposed)
398
+ throw new Error('Babylon renderer service is disposed.');
399
+ const abort = new AbortController();
400
+ activeAbort = abort;
401
+ try {
402
+ await commit(prepared, abort.signal);
403
+ }
404
+ finally {
405
+ if (activeAbort === abort)
406
+ activeAbort = null;
407
+ }
408
+ });
409
+ queue = operation.then(() => undefined, () => undefined);
410
+ return operation;
411
+ };
412
+ const service = {
413
+ environment,
414
+ postProcess,
415
+ cameras,
416
+ lighting,
417
+ rendering,
418
+ shadows,
419
+ shadowMapExperimentSystem: shadowMapExperiment,
420
+ getRuntimeData: () => data,
421
+ async initialize() {
422
+ await enqueue(initialPrepared);
423
+ await waitForBabylonSceneBrdfTextures(context.scene);
424
+ },
425
+ async update(nextData) {
426
+ if (!acceptingUpdates || disposed)
427
+ throw new Error('Babylon renderer service is disposed.');
428
+ await enqueue(prepareFpsBabylonRendererUpdate(nextData, assetResources, report));
429
+ },
430
+ async dispose() {
431
+ if (disposePromise)
432
+ return disposePromise;
433
+ acceptingUpdates = false;
434
+ activeAbort?.abort();
435
+ const operation = (async () => {
436
+ await queue;
437
+ if (disposed)
438
+ return;
439
+ await waitForBabylonSceneBrdfTextures(context.scene);
440
+ cleanup();
441
+ disposed = true;
442
+ })();
443
+ disposePromise = operation.catch(error => {
444
+ disposePromise = null;
445
+ throw error;
446
+ });
447
+ return disposePromise;
448
+ },
449
+ };
450
+ return service;
451
+ }
452
+ function createFpsBabylonRendererCameraRegistry(postProcess, scene, initialCameras, isOpen) {
453
+ const registrations = new Map();
454
+ for (const camera of initialCameras) {
455
+ if (registrations.has(camera)) {
456
+ throw createFpsBabylonRendererCameraRegistrationConflict(camera);
457
+ }
458
+ registrations.set(camera, { initial: true });
459
+ }
460
+ let disposed = false;
461
+ return {
462
+ register(camera) {
463
+ if (disposed || !isOpen())
464
+ throw new Error('Babylon renderer camera service is disposed.');
465
+ assertFpsBabylonRendererCameraScene(camera, scene);
466
+ if (registrations.has(camera)) {
467
+ throw createFpsBabylonRendererCameraRegistrationConflict(camera);
468
+ }
469
+ postProcess.addCamera(camera);
470
+ registrations.set(camera, { initial: false });
471
+ let registrationDisposed = false;
472
+ return Object.freeze({
473
+ dispose() {
474
+ if (registrationDisposed)
475
+ return;
476
+ const registration = registrations.get(camera);
477
+ if (!registration || registration.initial) {
478
+ registrationDisposed = true;
479
+ return;
480
+ }
481
+ postProcess.removeCamera(camera);
482
+ registrations.delete(camera);
483
+ registrationDisposed = true;
484
+ },
485
+ });
486
+ },
487
+ dispose() {
488
+ if (disposed)
489
+ return;
490
+ const cleanupErrors = [];
491
+ for (const camera of registrations.keys()) {
492
+ try {
493
+ postProcess.removeCamera(camera);
494
+ registrations.delete(camera);
495
+ }
496
+ catch (error) {
497
+ cleanupErrors.push(error);
498
+ }
499
+ }
500
+ if (cleanupErrors.length > 0) {
501
+ throw Object.assign(new Error('Babylon renderer camera registration cleanup failed.'), { cleanupErrors: Object.freeze(cleanupErrors) });
502
+ }
503
+ disposed = true;
504
+ },
505
+ };
506
+ }
507
+ function assertFpsBabylonRendererCameraScene(camera, scene) {
508
+ if (camera.getScene() === scene)
509
+ return;
510
+ throw Object.assign(new Error(`Babylon renderer Camera "${camera.name}" belongs to a different Scene.`), {
511
+ code: 'babylon.renderer.cameraSceneMismatch',
512
+ cameraName: camera.name,
513
+ });
514
+ }
515
+ function createFpsBabylonRendererCameraRegistrationConflict(camera) {
516
+ return Object.assign(new Error(`Babylon renderer Camera "${camera.name}" is already registered.`), {
517
+ code: 'babylon.renderer.cameraRegistrationConflict',
518
+ cameraName: camera.name,
519
+ });
520
+ }
521
+ function validateDirectionalLightPreview(input) {
522
+ if (!input || typeof input !== 'object') {
523
+ throw new Error('Babylon renderer directional light preview input is required.');
524
+ }
525
+ if (typeof input.entityId !== 'string' || !input.entityId.trim()) {
526
+ throw new Error('Babylon renderer directional light preview entityId is required.');
527
+ }
528
+ if (input.enabled !== undefined && typeof input.enabled !== 'boolean') {
529
+ throw new Error('Babylon renderer directional light preview enabled must be boolean.');
530
+ }
531
+ if (input.intensity !== undefined
532
+ && (!Number.isFinite(input.intensity) || input.intensity < 0)) {
533
+ throw new Error('Babylon renderer directional light preview intensity must be finite and non-negative.');
534
+ }
535
+ if (input.direction) {
536
+ const { x, y, z } = input.direction;
537
+ if (![x, y, z].every(Number.isFinite) || Math.hypot(x, y, z) <= 1e-6) {
538
+ throw new Error('Babylon renderer directional light preview direction must be finite and non-zero.');
539
+ }
540
+ }
541
+ if (input.diffuseColor) {
542
+ const { r, g, b } = input.diffuseColor;
543
+ if (![r, g, b].every(value => Number.isFinite(value) && value >= 0)) {
544
+ throw new Error('Babylon renderer directional light preview diffuseColor must be finite and non-negative.');
545
+ }
546
+ }
547
+ return input;
548
+ }
549
+ function validateShadowAppearancePreview(input) {
550
+ if (!input || typeof input !== 'object') {
551
+ throw new Error('Babylon renderer shadow appearance preview input is required.');
552
+ }
553
+ for (const [field, value] of [
554
+ ['strength', input.strength],
555
+ ['softness', input.softness],
556
+ ]) {
557
+ if (!Number.isFinite(value) || value < 0 || value > 1) {
558
+ throw new Error(`Babylon renderer shadow appearance preview ${field} must be finite in 0..1.`);
559
+ }
560
+ }
561
+ return input;
562
+ }
563
+ function validateEnvironmentAppearancePreview(input) {
564
+ if (!input || typeof input !== 'object') {
565
+ throw new Error('Babylon renderer environment appearance preview input is required.');
566
+ }
567
+ if (!Number.isFinite(input.iblIntensity) || input.iblIntensity < 0) {
568
+ throw new Error('Babylon renderer environment appearance preview iblIntensity must be finite and non-negative.');
569
+ }
570
+ if (!Number.isFinite(input.iblRotationY)) {
571
+ throw new Error('Babylon renderer environment appearance preview iblRotationY must be finite.');
572
+ }
573
+ return input;
574
+ }
575
+ function throwFpsBabylonRendererConstructionFailure(failure, operations) {
576
+ const cleanup = createFpsBabylonRendererConstructionCleanup(operations);
577
+ const cleanupErrors = cleanup();
578
+ if (cleanupErrors.length === 0)
579
+ throw failure;
580
+ throw createFailureWithMetadata(failure, 'Babylon renderer construction failed.', {
581
+ cleanupErrors,
582
+ fpsBabylonRendererConstructionCleanup: cleanup,
583
+ });
584
+ }
585
+ function createFpsBabylonRendererConstructionCleanup(operations) {
586
+ let pending = [...operations];
587
+ return () => {
588
+ const cleanupErrors = [];
589
+ const retry = [];
590
+ for (const operation of pending) {
591
+ try {
592
+ operation();
593
+ }
594
+ catch (error) {
595
+ cleanupErrors.push(error);
596
+ retry.push(operation);
597
+ }
598
+ }
599
+ pending = retry;
600
+ return Object.freeze(cleanupErrors);
601
+ };
602
+ }
603
+ function readFpsBabylonRendererConstructionCleanup(error) {
604
+ if (!error || (typeof error !== 'object' && typeof error !== 'function'))
605
+ return null;
606
+ const cleanup = error
607
+ .fpsBabylonRendererConstructionCleanup;
608
+ return typeof cleanup === 'function' ? cleanup : null;
609
+ }
610
+ function throwCleanupResult(cleanupErrors) {
611
+ if (cleanupErrors.length === 0)
612
+ return;
613
+ if (cleanupErrors.length === 1)
614
+ throw cleanupErrors[0];
615
+ throw Object.assign(new Error('Babylon renderer construction cleanup failed.'), {
616
+ cleanupErrors: Object.freeze([...cleanupErrors]),
617
+ });
618
+ }
619
+ function createFailureWithMetadata(failure, fallbackMessage, metadata) {
620
+ if (failure && (typeof failure === 'object' || typeof failure === 'function')) {
621
+ try {
622
+ Object.assign(failure, metadata);
623
+ if (Object.entries(metadata).every(([key, value]) => (failure[key] === value)))
624
+ return failure;
625
+ }
626
+ catch {
627
+ // A non-extensible primary error is wrapped so recovery metadata remains reachable.
628
+ }
629
+ }
630
+ return Object.assign(new Error(failure instanceof Error ? failure.message : fallbackMessage), { cause: failure, ...metadata });
631
+ }
632
+ function reserveFpsBabylonRendererScene(scene) {
633
+ if (fpsBabylonRendererSceneOwners.has(scene)) {
634
+ throw new Error('Babylon renderer Scene already has an active owner.');
635
+ }
636
+ const owner = Object.freeze({});
637
+ fpsBabylonRendererSceneOwners.set(scene, owner);
638
+ let released = false;
639
+ return () => {
640
+ if (released)
641
+ return;
642
+ if (fpsBabylonRendererSceneOwners.get(scene) !== owner) {
643
+ throw new Error('Babylon renderer Scene ownership was replaced before cleanup completed.');
644
+ }
645
+ fpsBabylonRendererSceneOwners.delete(scene);
646
+ released = true;
647
+ };
648
+ }
649
+ function getFpsBabylonRendererInternalService(context) {
650
+ return context.services.get(FPS_BABYLON_RENDERER_SERVICE);
651
+ }
652
+ function createFpsBabylonRendererAbortError() {
653
+ return Object.assign(new Error('Babylon renderer update aborted.'), { name: 'AbortError' });
654
+ }
655
+ function prepareFpsBabylonRendererUpdate(input, assetResources, report) {
656
+ const data = createFpsRuntimeDataSnapshot(input);
657
+ const profile = normalizeEditorSceneRenderingProfile(data.rendering);
658
+ const textureRef = profile.environment.texture;
659
+ const textureResolution = textureRef
660
+ ? assetResources.resolve({
661
+ assetId: textureRef.textureAssetId,
662
+ url: textureRef.url,
663
+ })
664
+ : null;
665
+ if (textureResolution && !textureResolution.ok) {
666
+ const diagnostic = {
667
+ code: textureResolution.diagnostic.code,
668
+ severity: 'error',
669
+ pluginId: FPS_BABYLON_RENDERER_PLUGIN_ID,
670
+ message: createAssetResourceResolutionMessage(textureResolution.diagnostic),
671
+ details: { ...textureResolution.diagnostic },
672
+ };
673
+ report(diagnostic);
674
+ throw Object.assign(new Error(diagnostic.message), {
675
+ code: diagnostic.code,
676
+ diagnostic: Object.freeze(diagnostic),
677
+ });
678
+ }
679
+ const shadowMapExperimentEntry = data.plugins?.find(entry => entry.pluginId === FPS_SHADOW_MAP_EXPERIMENT_PLUGIN_ID);
680
+ return Object.freeze({
681
+ data,
682
+ environment: Object.freeze({
683
+ texture: textureResolution?.resource ?? null,
684
+ intensity: profile.environment.iblIntensity,
685
+ rotationY: profile.environment.rotationY,
686
+ }),
687
+ postProcess: profile.postProcess,
688
+ shadowMapExperimentPlan: shadowMapExperimentEntry
689
+ ? createShadowMapExperimentPlanSnapshot(shadowMapExperimentEntry.data)
690
+ : null,
691
+ });
692
+ }
693
+ function createAssetResourceResolutionMessage(diagnostic) {
694
+ const identity = diagnostic.assetId ? ` asset ${diagnostic.assetId}` : ' external resource';
695
+ if (diagnostic.code === 'asset.resource.not-found') {
696
+ return `Environment texture${identity} was not found in the generated asset catalog.`;
697
+ }
698
+ if (diagnostic.code === 'asset.resource.format-missing') {
699
+ return `Environment texture${identity} has no resolvable source format.`;
700
+ }
701
+ if (diagnostic.code === 'asset.resource.format-unsupported') {
702
+ return `Environment texture${identity} uses unsupported format ${diagnostic.format ?? '<unknown>'}.`;
703
+ }
704
+ return `Environment texture${identity} reference is invalid.`;
705
+ }
706
+ //# sourceMappingURL=renderer-controller.js.map