@fps-games/engine 0.0.1-beta.4 → 0.0.1-beta.8

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 (298) 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/game-world-plugin-lifecycle.d.ts +26 -0
  6. package/dist/babylon/game-world-plugin-lifecycle.d.ts.map +1 -0
  7. package/dist/babylon/game-world-plugin-lifecycle.js +257 -0
  8. package/dist/babylon/game-world-plugin-lifecycle.js.map +1 -0
  9. package/dist/babylon/plugin-contract.d.ts +15 -0
  10. package/dist/babylon/plugin-contract.d.ts.map +1 -0
  11. package/dist/babylon/plugin-contract.js +9 -0
  12. package/dist/babylon/plugin-contract.js.map +1 -0
  13. package/dist/babylon/renderer/brdf-texture-settlement.d.ts +7 -0
  14. package/dist/babylon/renderer/brdf-texture-settlement.d.ts.map +1 -0
  15. package/dist/babylon/renderer/brdf-texture-settlement.js +29 -0
  16. package/dist/babylon/renderer/brdf-texture-settlement.js.map +1 -0
  17. package/dist/babylon/renderer/environment/environment-texture-controller.d.ts +7 -0
  18. package/dist/babylon/renderer/environment/environment-texture-controller.d.ts.map +1 -0
  19. package/dist/babylon/renderer/environment/environment-texture-controller.js +357 -0
  20. package/dist/babylon/renderer/environment/environment-texture-controller.js.map +1 -0
  21. package/dist/babylon/renderer/environment/index.d.ts +4 -0
  22. package/dist/babylon/renderer/environment/index.d.ts.map +1 -0
  23. package/dist/babylon/renderer/environment/index.js +4 -0
  24. package/dist/babylon/renderer/environment/index.js.map +1 -0
  25. package/dist/babylon/renderer/environment/profile.d.ts +3 -0
  26. package/dist/babylon/renderer/environment/profile.d.ts.map +1 -0
  27. package/dist/babylon/renderer/environment/profile.js +27 -0
  28. package/dist/babylon/renderer/environment/profile.js.map +1 -0
  29. package/dist/babylon/renderer/environment/types.d.ts +24 -0
  30. package/dist/babylon/renderer/environment/types.d.ts.map +1 -0
  31. package/dist/babylon/renderer/environment/types.js +6 -0
  32. package/dist/babylon/renderer/environment/types.js.map +1 -0
  33. package/dist/babylon/renderer/index.d.ts +24 -0
  34. package/dist/babylon/renderer/index.d.ts.map +1 -0
  35. package/dist/babylon/renderer/index.js +24 -0
  36. package/dist/babylon/renderer/index.js.map +1 -0
  37. package/dist/babylon/renderer/lighting/directional-light-angles.d.ts +17 -0
  38. package/dist/babylon/renderer/lighting/directional-light-angles.d.ts.map +1 -0
  39. package/dist/babylon/renderer/lighting/directional-light-angles.js +67 -0
  40. package/dist/babylon/renderer/lighting/directional-light-angles.js.map +1 -0
  41. package/dist/babylon/renderer/material-owner-candidates.d.ts +19 -0
  42. package/dist/babylon/renderer/material-owner-candidates.d.ts.map +1 -0
  43. package/dist/babylon/renderer/material-owner-candidates.js +212 -0
  44. package/dist/babylon/renderer/material-owner-candidates.js.map +1 -0
  45. package/dist/babylon/renderer/materials/index.d.ts +3 -0
  46. package/dist/babylon/renderer/materials/index.d.ts.map +1 -0
  47. package/dist/babylon/renderer/materials/index.js +3 -0
  48. package/dist/babylon/renderer/materials/index.js.map +1 -0
  49. package/dist/babylon/renderer/materials/material-runtime.d.ts +29 -0
  50. package/dist/babylon/renderer/materials/material-runtime.d.ts.map +1 -0
  51. package/dist/babylon/renderer/materials/material-runtime.js +660 -0
  52. package/dist/babylon/renderer/materials/material-runtime.js.map +1 -0
  53. package/dist/babylon/renderer/materials/material-slot-owner.d.ts +42 -0
  54. package/dist/babylon/renderer/materials/material-slot-owner.d.ts.map +1 -0
  55. package/dist/babylon/renderer/materials/material-slot-owner.js +318 -0
  56. package/dist/babylon/renderer/materials/material-slot-owner.js.map +1 -0
  57. package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts +4 -0
  58. package/dist/babylon/renderer/outlines/babylon-default/apply.d.ts.map +1 -0
  59. package/dist/babylon/renderer/outlines/babylon-default/apply.js +45 -0
  60. package/dist/babylon/renderer/outlines/babylon-default/apply.js.map +1 -0
  61. package/dist/babylon/renderer/outlines/babylon-default/index.d.ts +3 -0
  62. package/dist/babylon/renderer/outlines/babylon-default/index.d.ts.map +1 -0
  63. package/dist/babylon/renderer/outlines/babylon-default/index.js +2 -0
  64. package/dist/babylon/renderer/outlines/babylon-default/index.js.map +1 -0
  65. package/dist/babylon/renderer/outlines/babylon-default/types.d.ts +7 -0
  66. package/dist/babylon/renderer/outlines/babylon-default/types.d.ts.map +1 -0
  67. package/dist/babylon/renderer/outlines/babylon-default/types.js +2 -0
  68. package/dist/babylon/renderer/outlines/babylon-default/types.js.map +1 -0
  69. package/dist/babylon/renderer/outlines/index.d.ts +4 -0
  70. package/dist/babylon/renderer/outlines/index.d.ts.map +1 -0
  71. package/dist/babylon/renderer/outlines/index.js +3 -0
  72. package/dist/babylon/renderer/outlines/index.js.map +1 -0
  73. package/dist/babylon/renderer/outlines/runtime-override.d.ts +36 -0
  74. package/dist/babylon/renderer/outlines/runtime-override.d.ts.map +1 -0
  75. package/dist/babylon/renderer/outlines/runtime-override.js +131 -0
  76. package/dist/babylon/renderer/outlines/runtime-override.js.map +1 -0
  77. package/dist/babylon/renderer/outlines/types.d.ts +7 -0
  78. package/dist/babylon/renderer/outlines/types.d.ts.map +1 -0
  79. package/dist/babylon/renderer/outlines/types.js +2 -0
  80. package/dist/babylon/renderer/outlines/types.js.map +1 -0
  81. package/dist/babylon/renderer/placement/index.d.ts +2 -0
  82. package/dist/babylon/renderer/placement/index.d.ts.map +1 -0
  83. package/dist/babylon/renderer/placement/index.js +2 -0
  84. package/dist/babylon/renderer/placement/index.js.map +1 -0
  85. package/dist/babylon/renderer/placement/runtime-drop-position.d.ts +24 -0
  86. package/dist/babylon/renderer/placement/runtime-drop-position.d.ts.map +1 -0
  87. package/dist/babylon/renderer/placement/runtime-drop-position.js +63 -0
  88. package/dist/babylon/renderer/placement/runtime-drop-position.js.map +1 -0
  89. package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts +7 -0
  90. package/dist/babylon/renderer/post-process/babylon-default-pipeline.d.ts.map +1 -0
  91. package/dist/babylon/renderer/post-process/babylon-default-pipeline.js +301 -0
  92. package/dist/babylon/renderer/post-process/babylon-default-pipeline.js.map +1 -0
  93. package/dist/babylon/renderer/post-process/index.d.ts +5 -0
  94. package/dist/babylon/renderer/post-process/index.d.ts.map +1 -0
  95. package/dist/babylon/renderer/post-process/index.js +5 -0
  96. package/dist/babylon/renderer/post-process/index.js.map +1 -0
  97. package/dist/babylon/renderer/post-process/profile.d.ts +5 -0
  98. package/dist/babylon/renderer/post-process/profile.d.ts.map +1 -0
  99. package/dist/babylon/renderer/post-process/profile.js +155 -0
  100. package/dist/babylon/renderer/post-process/profile.js.map +1 -0
  101. package/dist/babylon/renderer/post-process/types.d.ts +81 -0
  102. package/dist/babylon/renderer/post-process/types.d.ts.map +1 -0
  103. package/dist/babylon/renderer/post-process/types.js +24 -0
  104. package/dist/babylon/renderer/post-process/types.js.map +1 -0
  105. package/dist/babylon/renderer/post-process/volume-stack.d.ts +4 -0
  106. package/dist/babylon/renderer/post-process/volume-stack.d.ts.map +1 -0
  107. package/dist/babylon/renderer/post-process/volume-stack.js +105 -0
  108. package/dist/babylon/renderer/post-process/volume-stack.js.map +1 -0
  109. package/dist/babylon/renderer/rendering/image-node.d.ts +35 -0
  110. package/dist/babylon/renderer/rendering/image-node.d.ts.map +1 -0
  111. package/dist/babylon/renderer/rendering/image-node.js +39 -0
  112. package/dist/babylon/renderer/rendering/image-node.js.map +1 -0
  113. package/dist/babylon/renderer/rendering/index.d.ts +3 -0
  114. package/dist/babylon/renderer/rendering/index.d.ts.map +1 -0
  115. package/dist/babylon/renderer/rendering/index.js +3 -0
  116. package/dist/babylon/renderer/rendering/index.js.map +1 -0
  117. package/dist/babylon/renderer/rendering/node-rendering.d.ts +19 -0
  118. package/dist/babylon/renderer/rendering/node-rendering.d.ts.map +1 -0
  119. package/dist/babylon/renderer/rendering/node-rendering.js +66 -0
  120. package/dist/babylon/renderer/rendering/node-rendering.js.map +1 -0
  121. package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts +5 -0
  122. package/dist/babylon/renderer/shadows/blob-shadow-shaders.d.ts.map +1 -0
  123. package/dist/babylon/renderer/shadows/blob-shadow-shaders.js +46 -0
  124. package/dist/babylon/renderer/shadows/blob-shadow-shaders.js.map +1 -0
  125. package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts +5 -0
  126. package/dist/babylon/renderer/shadows/blob-shadow-system.d.ts.map +1 -0
  127. package/dist/babylon/renderer/shadows/blob-shadow-system.js +402 -0
  128. package/dist/babylon/renderer/shadows/blob-shadow-system.js.map +1 -0
  129. package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts +84 -0
  130. package/dist/babylon/renderer/shadows/dynamic-shadow-system.d.ts.map +1 -0
  131. package/dist/babylon/renderer/shadows/dynamic-shadow-system.js +566 -0
  132. package/dist/babylon/renderer/shadows/dynamic-shadow-system.js.map +1 -0
  133. package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts +7 -0
  134. package/dist/babylon/renderer/shadows/planar-shadow-shaders.d.ts.map +1 -0
  135. package/dist/babylon/renderer/shadows/planar-shadow-shaders.js +316 -0
  136. package/dist/babylon/renderer/shadows/planar-shadow-shaders.js.map +1 -0
  137. package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts +5 -0
  138. package/dist/babylon/renderer/shadows/planar-shadow-system.d.ts.map +1 -0
  139. package/dist/babylon/renderer/shadows/planar-shadow-system.js +1562 -0
  140. package/dist/babylon/renderer/shadows/planar-shadow-system.js.map +1 -0
  141. package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts +14 -0
  142. package/dist/babylon/renderer/shadows/shadow-generator-shaders.d.ts.map +1 -0
  143. package/dist/babylon/renderer/shadows/shadow-generator-shaders.js +14 -0
  144. package/dist/babylon/renderer/shadows/shadow-generator-shaders.js.map +1 -0
  145. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts +68 -0
  146. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.d.ts.map +1 -0
  147. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js +829 -0
  148. package/dist/babylon/renderer/shadows/shadow-map-experiment-depth-backend.js.map +1 -0
  149. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts +148 -0
  150. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.d.ts.map +1 -0
  151. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js +4529 -0
  152. package/dist/babylon/renderer/shadows/shadow-map-experiment-system.js.map +1 -0
  153. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts +4 -0
  154. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.d.ts.map +1 -0
  155. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js +645 -0
  156. package/dist/babylon/renderer/shadows/static-projected-shadow-artifact-system.js.map +1 -0
  157. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts +61 -0
  158. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.d.ts.map +1 -0
  159. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js +382 -0
  160. package/dist/babylon/renderer/shadows/static-projected-shadow-atlas.js.map +1 -0
  161. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts +47 -0
  162. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.d.ts.map +1 -0
  163. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js +285 -0
  164. package/dist/babylon/renderer/shadows/static-projected-shadow-bake.js.map +1 -0
  165. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts +88 -0
  166. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.d.ts.map +1 -0
  167. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js +830 -0
  168. package/dist/babylon/renderer/shadows/static-projected-shadow-baker.js.map +1 -0
  169. package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts +3 -0
  170. package/dist/babylon/renderer/shadows/static-projected-shadow-options.d.ts.map +1 -0
  171. package/dist/babylon/renderer/shadows/static-projected-shadow-options.js +60 -0
  172. package/dist/babylon/renderer/shadows/static-projected-shadow-options.js.map +1 -0
  173. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts +27 -0
  174. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.d.ts.map +1 -0
  175. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js +220 -0
  176. package/dist/babylon/renderer/shadows/static-projected-shadow-rendering.js.map +1 -0
  177. package/dist/babylon/renderer/shadows/types.d.ts +421 -0
  178. package/dist/babylon/renderer/shadows/types.d.ts.map +1 -0
  179. package/dist/babylon/renderer/shadows/types.js +127 -0
  180. package/dist/babylon/renderer/shadows/types.js.map +1 -0
  181. package/dist/babylon/renderer-controller.d.ts +93 -0
  182. package/dist/babylon/renderer-controller.d.ts.map +1 -0
  183. package/dist/babylon/renderer-controller.js +699 -0
  184. package/dist/babylon/renderer-controller.js.map +1 -0
  185. package/dist/babylon/scene-renderer.d.ts +20 -0
  186. package/dist/babylon/scene-renderer.d.ts.map +1 -0
  187. package/dist/babylon/scene-renderer.js +60 -0
  188. package/dist/babylon/scene-renderer.js.map +1 -0
  189. package/dist/babylon.d.ts +5 -0
  190. package/dist/babylon.d.ts.map +1 -1
  191. package/dist/babylon.js +5 -0
  192. package/dist/babylon.js.map +1 -1
  193. package/dist/build-info.json +4 -4
  194. package/dist/compiled-scene-data.d.ts +23 -0
  195. package/dist/compiled-scene-data.d.ts.map +1 -0
  196. package/dist/compiled-scene-data.js +100 -0
  197. package/dist/compiled-scene-data.js.map +1 -0
  198. package/dist/ground-decal.d.ts +22 -0
  199. package/dist/ground-decal.d.ts.map +1 -0
  200. package/dist/ground-decal.js +48 -0
  201. package/dist/ground-decal.js.map +1 -0
  202. package/dist/index.d.ts +13 -0
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +13 -0
  205. package/dist/index.js.map +1 -1
  206. package/dist/material-owner.d.ts +128 -0
  207. package/dist/material-owner.d.ts.map +1 -0
  208. package/dist/material-owner.js +434 -0
  209. package/dist/material-owner.js.map +1 -0
  210. package/dist/material-profile.d.ts +62 -0
  211. package/dist/material-profile.d.ts.map +1 -0
  212. package/dist/material-profile.js +132 -0
  213. package/dist/material-profile.js.map +1 -0
  214. package/dist/rendering/index.d.ts +14 -0
  215. package/dist/rendering/index.d.ts.map +1 -0
  216. package/dist/rendering/index.js +12 -0
  217. package/dist/rendering/index.js.map +1 -0
  218. package/dist/rendering/rendering-profile-types.d.ts +322 -0
  219. package/dist/rendering/rendering-profile-types.d.ts.map +1 -0
  220. package/dist/rendering/rendering-profile-types.js +2 -0
  221. package/dist/rendering/rendering-profile-types.js.map +1 -0
  222. package/dist/rendering/rendering-profile-validation.d.ts +2 -0
  223. package/dist/rendering/rendering-profile-validation.d.ts.map +1 -0
  224. package/dist/rendering/rendering-profile-validation.js +364 -0
  225. package/dist/rendering/rendering-profile-validation.js.map +1 -0
  226. package/dist/rendering/rendering-profile-values.d.ts +19 -0
  227. package/dist/rendering/rendering-profile-values.d.ts.map +1 -0
  228. package/dist/rendering/rendering-profile-values.js +79 -0
  229. package/dist/rendering/rendering-profile-values.js.map +1 -0
  230. package/dist/rendering/rendering-profile.d.ts +15 -0
  231. package/dist/rendering/rendering-profile.d.ts.map +1 -0
  232. package/dist/rendering/rendering-profile.js +442 -0
  233. package/dist/rendering/rendering-profile.js.map +1 -0
  234. package/dist/rendering/shadow-map-experiment-depth.d.ts +63 -0
  235. package/dist/rendering/shadow-map-experiment-depth.d.ts.map +1 -0
  236. package/dist/rendering/shadow-map-experiment-depth.js +186 -0
  237. package/dist/rendering/shadow-map-experiment-depth.js.map +1 -0
  238. package/dist/rendering/shadow-map-experiment-lifecycle.d.ts +94 -0
  239. package/dist/rendering/shadow-map-experiment-lifecycle.d.ts.map +1 -0
  240. package/dist/rendering/shadow-map-experiment-lifecycle.js +407 -0
  241. package/dist/rendering/shadow-map-experiment-lifecycle.js.map +1 -0
  242. package/dist/rendering/shadow-map-experiment.d.ts +189 -0
  243. package/dist/rendering/shadow-map-experiment.d.ts.map +1 -0
  244. package/dist/rendering/shadow-map-experiment.js +549 -0
  245. package/dist/rendering/shadow-map-experiment.js.map +1 -0
  246. package/dist/rendering/shadow-quality.d.ts +5 -0
  247. package/dist/rendering/shadow-quality.d.ts.map +1 -0
  248. package/dist/rendering/shadow-quality.js +83 -0
  249. package/dist/rendering/shadow-quality.js.map +1 -0
  250. package/dist/rendering/shadow-runtime.d.ts +59 -0
  251. package/dist/rendering/shadow-runtime.d.ts.map +1 -0
  252. package/dist/rendering/shadow-runtime.js +378 -0
  253. package/dist/rendering/shadow-runtime.js.map +1 -0
  254. package/dist/rendering/shadow-settings.d.ts +15 -0
  255. package/dist/rendering/shadow-settings.d.ts.map +1 -0
  256. package/dist/rendering/shadow-settings.js +129 -0
  257. package/dist/rendering/shadow-settings.js.map +1 -0
  258. package/dist/rendering/shadow-types.d.ts +99 -0
  259. package/dist/rendering/shadow-types.d.ts.map +1 -0
  260. package/dist/rendering/shadow-types.js +5 -0
  261. package/dist/rendering/shadow-types.js.map +1 -0
  262. package/dist/rendering/shadow-validation.d.ts +3 -0
  263. package/dist/rendering/shadow-validation.d.ts.map +1 -0
  264. package/dist/rendering/shadow-validation.js +166 -0
  265. package/dist/rendering/shadow-validation.js.map +1 -0
  266. package/dist/rendering/value.d.ts +2 -0
  267. package/dist/rendering/value.d.ts.map +1 -0
  268. package/dist/rendering/value.js +6 -0
  269. package/dist/rendering/value.js.map +1 -0
  270. package/dist/runtime-data-token.d.ts +4 -0
  271. package/dist/runtime-data-token.d.ts.map +1 -0
  272. package/dist/runtime-data-token.js +4 -0
  273. package/dist/runtime-data-token.js.map +1 -0
  274. package/dist/runtime-data-types.d.ts +83 -0
  275. package/dist/runtime-data-types.d.ts.map +1 -0
  276. package/dist/runtime-data-types.js +2 -0
  277. package/dist/runtime-data-types.js.map +1 -0
  278. package/dist/runtime-data.d.ts +18 -0
  279. package/dist/runtime-data.d.ts.map +1 -0
  280. package/dist/runtime-data.js +301 -0
  281. package/dist/runtime-data.js.map +1 -0
  282. package/dist/runtime-scene-resolvers.d.ts +37 -0
  283. package/dist/runtime-scene-resolvers.d.ts.map +1 -0
  284. package/dist/runtime-scene-resolvers.js +40 -0
  285. package/dist/runtime-scene-resolvers.js.map +1 -0
  286. package/dist/scene-artifact-types.d.ts +383 -0
  287. package/dist/scene-artifact-types.d.ts.map +1 -0
  288. package/dist/scene-artifact-types.js +2 -0
  289. package/dist/scene-artifact-types.js.map +1 -0
  290. package/dist/scene-artifact-validation.d.ts +19 -0
  291. package/dist/scene-artifact-validation.d.ts.map +1 -0
  292. package/dist/scene-artifact-validation.js +1352 -0
  293. package/dist/scene-artifact-validation.js.map +1 -0
  294. package/dist/static-shadow-artifact.d.ts +131 -0
  295. package/dist/static-shadow-artifact.d.ts.map +1 -0
  296. package/dist/static-shadow-artifact.js +327 -0
  297. package/dist/static-shadow-artifact.js.map +1 -0
  298. package/package.json +9 -1
@@ -0,0 +1,407 @@
1
+ export function createShadowMapExperimentRegistry(initialPlan) {
2
+ let planRevision = initialPlan.revision;
3
+ let lastShadowRevision = -1;
4
+ let disposed = false;
5
+ const records = new Map();
6
+ const dirtyReasons = new Set();
7
+ const assertActive = () => {
8
+ if (disposed)
9
+ throw new Error('Shadow Map experiment registry is disposed.');
10
+ };
11
+ const updateRecord = (record) => {
12
+ record.state = !record.renderableReady ? 'pending'
13
+ : record.authoredCast && record.runtimeVisible ? 'active'
14
+ : 'suspended';
15
+ record.revision = planRevision;
16
+ };
17
+ const upsertObject = (object) => {
18
+ for (const renderableId of object.renderableIds) {
19
+ const existing = records.get(renderableId);
20
+ if (!existing) {
21
+ records.set(renderableId, {
22
+ entityId: object.entityId,
23
+ renderableId,
24
+ state: 'pending',
25
+ updateClass: object.updateClass,
26
+ authoredCast: object.cast,
27
+ authoredReceive: object.receive,
28
+ runtimeVisible: true,
29
+ renderableReady: false,
30
+ revision: planRevision,
31
+ });
32
+ continue;
33
+ }
34
+ const wasActive = existing.state === 'active';
35
+ existing.entityId = object.entityId;
36
+ existing.updateClass = object.updateClass;
37
+ existing.authoredCast = object.cast;
38
+ existing.authoredReceive = object.receive;
39
+ updateRecord(existing);
40
+ if (wasActive !== (existing.state === 'active'))
41
+ dirtyReasons.add(existing.state === 'active' ? 'caster-added' : 'caster-removed');
42
+ }
43
+ };
44
+ const applyPlan = (plan) => {
45
+ assertActive();
46
+ planRevision = plan.revision;
47
+ const nextRenderableIds = new Set(plan.objects.flatMap(object => object.renderableIds));
48
+ for (const [renderableId, record] of records) {
49
+ if (nextRenderableIds.has(renderableId))
50
+ continue;
51
+ if (record.state === 'active')
52
+ dirtyReasons.add('caster-removed');
53
+ records.delete(renderableId);
54
+ }
55
+ for (const object of plan.objects)
56
+ upsertObject(object);
57
+ };
58
+ applyPlan(initialPlan);
59
+ return {
60
+ applyPlan,
61
+ applyObjectDelta(input) {
62
+ assertActive();
63
+ planRevision = input.planRevision;
64
+ for (const renderableId of input.removedRenderableIds) {
65
+ const record = records.get(renderableId);
66
+ if (!record)
67
+ continue;
68
+ if (record.state === 'active')
69
+ dirtyReasons.add('caster-removed');
70
+ records.delete(renderableId);
71
+ }
72
+ for (const object of input.upsertedObjects)
73
+ upsertObject(object);
74
+ },
75
+ attach(renderableId, visible = true) {
76
+ assertActive();
77
+ const record = records.get(renderableId);
78
+ if (!record)
79
+ return null;
80
+ const wasActive = record.state === 'active';
81
+ record.renderableReady = true;
82
+ record.runtimeVisible = visible;
83
+ updateRecord(record);
84
+ if (!wasActive && record.state === 'active')
85
+ dirtyReasons.add('caster-added');
86
+ return snapshotRecord(record);
87
+ },
88
+ detach(renderableId) {
89
+ assertActive();
90
+ const record = records.get(renderableId);
91
+ if (!record)
92
+ return null;
93
+ const wasActive = record.state === 'active';
94
+ record.renderableReady = false;
95
+ updateRecord(record);
96
+ if (wasActive)
97
+ dirtyReasons.add('caster-removed');
98
+ return snapshotRecord(record);
99
+ },
100
+ setVisible(renderableId, visible) {
101
+ assertActive();
102
+ const record = records.get(renderableId);
103
+ if (!record || record.runtimeVisible === visible)
104
+ return record ? snapshotRecord(record) : null;
105
+ const wasActive = record.state === 'active';
106
+ record.runtimeVisible = visible;
107
+ updateRecord(record);
108
+ if (wasActive !== (record.state === 'active'))
109
+ dirtyReasons.add('caster-visibility-changed');
110
+ return snapshotRecord(record);
111
+ },
112
+ markDirty(reason) {
113
+ assertActive();
114
+ dirtyReasons.add(reason);
115
+ },
116
+ markShadowRendered(revision = planRevision) {
117
+ assertActive();
118
+ lastShadowRevision = revision;
119
+ },
120
+ consumeDirtyReasons() {
121
+ assertActive();
122
+ const result = Object.freeze([...dirtyReasons]);
123
+ dirtyReasons.clear();
124
+ return result;
125
+ },
126
+ getRecord(renderableId) {
127
+ const record = records.get(renderableId);
128
+ return record ? snapshotRecord(record) : null;
129
+ },
130
+ snapshot() {
131
+ const entries = [...records.values()].map(snapshotRecord).sort((left, right) => left.renderableId.localeCompare(right.renderableId));
132
+ return Object.freeze({
133
+ planRevision,
134
+ lastShadowRevision,
135
+ activeCasterCount: entries.filter(record => record.state === 'active').length,
136
+ pendingCasterCount: entries.filter(record => record.state === 'pending').length,
137
+ suspendedCasterCount: entries.filter(record => record.state === 'suspended').length,
138
+ receiverCount: entries.filter(record => record.authoredReceive && record.renderableReady).length,
139
+ dynamicCasterCount: entries.filter(record => record.state === 'active' && record.updateClass === 'dynamic').length,
140
+ skinnedCasterCount: entries.filter(record => record.state === 'active' && record.updateClass === 'skinned').length,
141
+ dirtyReasons: Object.freeze([...dirtyReasons]),
142
+ records: Object.freeze(entries),
143
+ });
144
+ },
145
+ dispose() {
146
+ if (disposed)
147
+ return;
148
+ records.clear();
149
+ dirtyReasons.clear();
150
+ disposed = true;
151
+ },
152
+ };
153
+ }
154
+ export function createShadowMapExperimentActivityScheduler() {
155
+ let disposed = false;
156
+ let nextToken = 1;
157
+ const planObjects = new Map();
158
+ const entityActive = new Map();
159
+ const sources = new Map();
160
+ const sourceTokensByIdentity = new Map();
161
+ const sourceTokensByEntity = new Map();
162
+ const eligibleActiveSourceTokens = new Set();
163
+ const eligibleActiveKindCounts = {
164
+ transform: 0,
165
+ animation: 0,
166
+ morph: 0,
167
+ physics: 0,
168
+ };
169
+ const pendingDirtyReasons = new Set();
170
+ const isEligible = (source) => {
171
+ const object = planObjects.get(source.entityId);
172
+ return object?.cast === true && entityActive.get(source.entityId) === true;
173
+ };
174
+ const hasEligibleActivity = (entityId) => {
175
+ for (const token of sourceTokensByEntity.get(entityId) ?? []) {
176
+ if (eligibleActiveSourceTokens.has(token))
177
+ return true;
178
+ }
179
+ return false;
180
+ };
181
+ const markActivityTransition = (before, after) => {
182
+ if (before === after)
183
+ return;
184
+ pendingDirtyReasons.add(after ? 'caster-activity-started' : 'caster-activity-stopped');
185
+ };
186
+ const syncEntityEligibility = (entityId) => {
187
+ const before = hasEligibleActivity(entityId);
188
+ for (const token of sourceTokensByEntity.get(entityId) ?? []) {
189
+ const source = sources.get(token);
190
+ if (!source || source.disposed)
191
+ continue;
192
+ const shouldBeEligible = source.active && isEligible(source);
193
+ const wasEligible = eligibleActiveSourceTokens.has(source.token);
194
+ if (shouldBeEligible === wasEligible)
195
+ continue;
196
+ if (shouldBeEligible) {
197
+ eligibleActiveSourceTokens.add(source.token);
198
+ eligibleActiveKindCounts[source.kind] += 1;
199
+ }
200
+ else {
201
+ eligibleActiveSourceTokens.delete(source.token);
202
+ eligibleActiveKindCounts[source.kind] -= 1;
203
+ }
204
+ }
205
+ markActivityTransition(before, hasEligibleActivity(entityId));
206
+ };
207
+ const assertUsable = () => {
208
+ if (disposed)
209
+ throw new Error('Shadow Map experiment activity scheduler is disposed.');
210
+ };
211
+ return {
212
+ applyPlan(plan) {
213
+ assertUsable();
214
+ const nextEntityIds = new Set(plan?.enabled ? plan.objects.map(object => object.entityId) : []);
215
+ const affected = new Set([
216
+ ...planObjects.keys(),
217
+ ...nextEntityIds,
218
+ ]);
219
+ planObjects.clear();
220
+ if (plan?.enabled) {
221
+ for (const object of plan.objects)
222
+ planObjects.set(object.entityId, object);
223
+ }
224
+ for (const entityId of entityActive.keys()) {
225
+ if (!nextEntityIds.has(entityId))
226
+ entityActive.delete(entityId);
227
+ }
228
+ for (const entityId of affected)
229
+ syncEntityEligibility(entityId);
230
+ },
231
+ applyObjectDelta(input) {
232
+ assertUsable();
233
+ const affected = new Set(input.removedEntityIds);
234
+ for (const entityId of input.removedEntityIds) {
235
+ planObjects.delete(entityId);
236
+ entityActive.delete(entityId);
237
+ }
238
+ for (const object of input.upsertedObjects) {
239
+ planObjects.set(object.entityId, object);
240
+ affected.add(object.entityId);
241
+ }
242
+ for (const entityId of affected)
243
+ syncEntityEligibility(entityId);
244
+ },
245
+ setEntityActive(entityId, active) {
246
+ assertUsable();
247
+ if (planObjects.has(entityId))
248
+ entityActive.set(entityId, active);
249
+ else
250
+ entityActive.delete(entityId);
251
+ syncEntityEligibility(entityId);
252
+ },
253
+ hasSource(entityId, sourceId) {
254
+ return sourceTokensByIdentity.has(`${entityId}\u0000${sourceId}`);
255
+ },
256
+ registerSource(input) {
257
+ assertUsable();
258
+ if (!input.entityId.trim())
259
+ throw new Error('shadowMapExperiment.activityEntityIdRequired');
260
+ if (!input.sourceId.trim())
261
+ throw new Error('shadowMapExperiment.activitySourceIdRequired');
262
+ if (!activityKinds().includes(input.kind))
263
+ throw new Error(`shadowMapExperiment.activityKindInvalid:${input.kind}`);
264
+ const identity = `${input.entityId}\u0000${input.sourceId}`;
265
+ if (sourceTokensByIdentity.has(identity))
266
+ throw new Error(`shadowMapExperiment.activitySourceConflict:${input.entityId}:${input.sourceId}`);
267
+ const source = {
268
+ token: nextToken++,
269
+ entityId: input.entityId,
270
+ kind: input.kind,
271
+ sourceId: input.sourceId,
272
+ active: false,
273
+ disposed: false,
274
+ };
275
+ sources.set(source.token, source);
276
+ sourceTokensByIdentity.set(identity, source.token);
277
+ const entityTokens = sourceTokensByEntity.get(source.entityId) ?? new Set();
278
+ entityTokens.add(source.token);
279
+ sourceTokensByEntity.set(source.entityId, entityTokens);
280
+ return Object.freeze({
281
+ entityId: source.entityId,
282
+ kind: source.kind,
283
+ sourceId: source.sourceId,
284
+ setActive(active) {
285
+ if (disposed || source.disposed || source.active === active)
286
+ return false;
287
+ source.active = active;
288
+ syncEntityEligibility(source.entityId);
289
+ return true;
290
+ },
291
+ invalidate() {
292
+ if (disposed || source.disposed || !isEligible(source))
293
+ return false;
294
+ pendingDirtyReasons.add(activityFrameReason(source.kind));
295
+ return true;
296
+ },
297
+ dispose() {
298
+ if (source.disposed)
299
+ return;
300
+ if (!disposed) {
301
+ const before = hasEligibleActivity(source.entityId);
302
+ if (eligibleActiveSourceTokens.delete(source.token))
303
+ eligibleActiveKindCounts[source.kind] -= 1;
304
+ source.disposed = true;
305
+ sources.delete(source.token);
306
+ if (sourceTokensByIdentity.get(identity) === source.token)
307
+ sourceTokensByIdentity.delete(identity);
308
+ const entityTokens = sourceTokensByEntity.get(source.entityId);
309
+ entityTokens?.delete(source.token);
310
+ if (entityTokens?.size === 0)
311
+ sourceTokensByEntity.delete(source.entityId);
312
+ markActivityTransition(before, hasEligibleActivity(source.entityId));
313
+ return;
314
+ }
315
+ source.disposed = true;
316
+ sources.delete(source.token);
317
+ if (sourceTokensByIdentity.get(identity) === source.token)
318
+ sourceTokensByIdentity.delete(identity);
319
+ const entityTokens = sourceTokensByEntity.get(source.entityId);
320
+ entityTokens?.delete(source.token);
321
+ if (entityTokens?.size === 0)
322
+ sourceTokensByEntity.delete(source.entityId);
323
+ },
324
+ });
325
+ },
326
+ markDirty(reason) {
327
+ assertUsable();
328
+ pendingDirtyReasons.add(reason);
329
+ },
330
+ consumeFrameDecision() {
331
+ assertUsable();
332
+ for (const kind of activityKinds()) {
333
+ if (eligibleActiveKindCounts[kind] > 0)
334
+ pendingDirtyReasons.add(activityFrameReason(kind));
335
+ }
336
+ const reasons = Object.freeze([...pendingDirtyReasons]);
337
+ pendingDirtyReasons.clear();
338
+ return Object.freeze({ shouldRefresh: reasons.length > 0, reasons });
339
+ },
340
+ snapshot() {
341
+ const entries = [...sources.values()]
342
+ .filter(source => !source.disposed)
343
+ .map(source => Object.freeze({
344
+ entityId: source.entityId,
345
+ kind: source.kind,
346
+ sourceId: source.sourceId,
347
+ active: source.active,
348
+ eligible: isEligible(source),
349
+ }))
350
+ .sort((left, right) => left.sourceId.localeCompare(right.sourceId));
351
+ const activeEligible = entries.filter(source => source.active && source.eligible);
352
+ const kindCounts = { ...eligibleActiveKindCounts };
353
+ const trackedEntities = new Set(entries.map(source => source.entityId));
354
+ const activeActivityCasters = new Set(activeEligible.map(source => source.entityId));
355
+ const untrackedDynamicCasterEntityIds = [];
356
+ for (const [entityId, object] of planObjects) {
357
+ if (object.cast && object.updateClass !== 'static' && entityActive.get(entityId) === true && !trackedEntities.has(entityId)) {
358
+ untrackedDynamicCasterEntityIds.push(entityId);
359
+ }
360
+ }
361
+ untrackedDynamicCasterEntityIds.sort();
362
+ return Object.freeze({
363
+ trackedEntityStateCount: entityActive.size,
364
+ registeredActivitySourceCount: entries.length,
365
+ activeActivitySourceCount: entries.filter(source => source.active).length,
366
+ pendingActivitySourceCount: entries.filter(source => source.active && !source.eligible).length,
367
+ activeActivityCasterCount: activeActivityCasters.size,
368
+ activeActivityKindCounts: Object.freeze(kindCounts),
369
+ pendingDirtyReasons: Object.freeze([...pendingDirtyReasons]),
370
+ untrackedDynamicCasterCount: untrackedDynamicCasterEntityIds.length,
371
+ untrackedDynamicCasterEntityIds: Object.freeze(untrackedDynamicCasterEntityIds),
372
+ sources: Object.freeze(entries),
373
+ });
374
+ },
375
+ dispose() {
376
+ if (disposed)
377
+ return;
378
+ disposed = true;
379
+ for (const source of sources.values())
380
+ source.disposed = true;
381
+ sources.clear();
382
+ sourceTokensByIdentity.clear();
383
+ sourceTokensByEntity.clear();
384
+ eligibleActiveSourceTokens.clear();
385
+ for (const kind of activityKinds())
386
+ eligibleActiveKindCounts[kind] = 0;
387
+ planObjects.clear();
388
+ entityActive.clear();
389
+ pendingDirtyReasons.clear();
390
+ },
391
+ };
392
+ }
393
+ function activityKinds() {
394
+ return ['transform', 'animation', 'morph', 'physics'];
395
+ }
396
+ function activityFrameReason(kind) {
397
+ switch (kind) {
398
+ case 'animation': return 'skinned-animation-frame';
399
+ case 'morph': return 'morph-animation-frame';
400
+ case 'physics': return 'physics-motion-frame';
401
+ case 'transform': return 'dynamic-frame';
402
+ }
403
+ }
404
+ function snapshotRecord(record) {
405
+ return Object.freeze({ ...record });
406
+ }
407
+ //# sourceMappingURL=shadow-map-experiment-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-map-experiment-lifecycle.js","sourceRoot":"","sources":["../../src/rendering/shadow-map-experiment-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ export declare const FPS_SHADOW_MAP_EXPERIMENT_PLUGIN_ID: "fps.shadow-map-experiment";
2
+ export declare const FPS_SHADOW_MAP_EXPERIMENT_CONFIG_SCHEMA_VERSION: 1;
3
+ export declare const FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION_V2: 2;
4
+ export declare const FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION: 3;
5
+ export declare const FPS_SHADOW_MAP_EXPERIMENT_SCHEMA_VERSION: 1;
6
+ export declare const DEFAULT_SHADOW_MAP_EXPERIMENT_SOFTNESS = 0.125;
7
+ export type ShadowMapExperimentResolution = 512 | 1024 | 2048 | 4096;
8
+ export type ShadowMapExperimentCascadeCount = 1 | 2 | 4;
9
+ export type ShadowMapExperimentFilter = 'hard' | 'low-pcf';
10
+ export type ShadowMapExperimentUpdateClass = 'static' | 'dynamic' | 'skinned';
11
+ export type ShadowMapExperimentBehaviorUpdateClass = 'auto' | ShadowMapExperimentUpdateClass;
12
+ export type ShadowMapExperimentBackendMode = 'auto' | 'split' | 'single';
13
+ export type ShadowMapExperimentBackendFallback = 'single-map' | 'disable';
14
+ export type ShadowMapExperimentLifecycleState = 'pending' | 'active' | 'suspended' | 'disposed';
15
+ export type ShadowMapExperimentActivityKind = 'transform' | 'animation' | 'morph' | 'physics';
16
+ export type ShadowMapExperimentDirtyReason = 'generator-created' | 'compositor-ready' | 'light-direction-changed' | 'light-bounds-changed' | 'quality-changed' | 'caster-added' | 'caster-removed' | 'caster-visibility-changed' | 'static-transform-changed' | 'dynamic-transform-changed' | 'static-geometry-changed' | 'material-alpha-test-changed' | 'caster-activity-started' | 'caster-activity-stopped' | 'dynamic-frame' | 'skinned-animation-frame' | 'morph-animation-frame' | 'physics-motion-frame' | 'camera-influence-region-changed' | 'caster-influence-membership-changed' | 'static-depth-invalidated' | 'dynamic-depth-invalidated' | 'empty-list-clear';
17
+ export interface EditorShadowMapExperimentBounds {
18
+ readonly mode: 'fixed';
19
+ readonly center: readonly [number, number, number];
20
+ readonly extent: readonly [number, number, number];
21
+ readonly near: number;
22
+ readonly far: number;
23
+ }
24
+ export interface ShadowMapExperimentMapSettings {
25
+ readonly staticResolution: ShadowMapExperimentResolution;
26
+ readonly dynamicResolution: ShadowMapExperimentResolution;
27
+ readonly compositeResolution: ShadowMapExperimentResolution;
28
+ }
29
+ export interface ShadowMapExperimentBackendSettings {
30
+ readonly mode: ShadowMapExperimentBackendMode;
31
+ readonly fallback: ShadowMapExperimentBackendFallback;
32
+ }
33
+ export interface ShadowMapExperimentCullingSettings {
34
+ readonly enabled: boolean;
35
+ readonly guardBandRatio: number;
36
+ }
37
+ export interface ShadowMapExperimentDiagnosticThresholds {
38
+ readonly staticCasterCountWarning: number;
39
+ readonly dynamicCasterCountWarning: number;
40
+ readonly renderableCountWarning: number;
41
+ }
42
+ export interface ShadowMapExperimentQualityProfile {
43
+ readonly maps: ShadowMapExperimentMapSettings;
44
+ /** Compatibility-only legacy metadata; current product backends do not consume it. */
45
+ readonly cascadeCount?: ShadowMapExperimentCascadeCount;
46
+ readonly receiverFilter: ShadowMapExperimentFilter;
47
+ readonly bias: number;
48
+ readonly normalBias: number;
49
+ readonly darkness: number;
50
+ /** Normalized receiver-edge softness. Omitted profiles retain the legacy kernel. */
51
+ readonly softness?: number;
52
+ readonly bounds: EditorShadowMapExperimentBounds;
53
+ readonly backend: ShadowMapExperimentBackendSettings;
54
+ readonly culling: ShadowMapExperimentCullingSettings;
55
+ readonly diagnostics: ShadowMapExperimentDiagnosticThresholds;
56
+ }
57
+ export interface ShadowMapExperimentBehaviorProfile {
58
+ readonly cast: 'enabled' | 'disabled';
59
+ readonly receive: 'enabled' | 'disabled';
60
+ readonly updateClass: ShadowMapExperimentBehaviorUpdateClass;
61
+ }
62
+ export interface ShadowMapExperimentConfig {
63
+ readonly schemaVersion: typeof FPS_SHADOW_MAP_EXPERIMENT_SCHEMA_VERSION;
64
+ readonly enabled: boolean;
65
+ readonly lightRef: string;
66
+ readonly defaultQualityProfile: string;
67
+ readonly defaultBehaviorProfile: string;
68
+ readonly qualityProfiles: Readonly<Record<string, ShadowMapExperimentQualityProfile>>;
69
+ readonly behaviorProfiles: Readonly<Record<string, ShadowMapExperimentBehaviorProfile>>;
70
+ }
71
+ export interface EditorShadowMapExperimentSettings {
72
+ readonly qualityProfile?: string;
73
+ readonly behaviorProfile?: string;
74
+ }
75
+ export interface EditorShadowMapExperimentObjectOverride {
76
+ readonly behaviorProfile: string;
77
+ }
78
+ export interface ShadowMapExperimentDiagnostic {
79
+ readonly code: string;
80
+ readonly severity: 'info' | 'warning' | 'error';
81
+ readonly message: string;
82
+ readonly entityId?: string;
83
+ readonly renderableId?: string;
84
+ readonly details?: Readonly<Record<string, unknown>>;
85
+ }
86
+ export interface ShadowMapExperimentPlanObject {
87
+ readonly entityId: string;
88
+ readonly renderableIds: readonly string[];
89
+ readonly cast: boolean;
90
+ readonly receive: boolean;
91
+ readonly updateClass: ShadowMapExperimentUpdateClass;
92
+ readonly behaviorProfileId: string;
93
+ }
94
+ export interface ShadowMapExperimentBehaviorProfileCatalogEntry {
95
+ readonly cast: boolean;
96
+ readonly receive: boolean;
97
+ readonly updateClass: ShadowMapExperimentBehaviorUpdateClass;
98
+ }
99
+ interface ShadowMapExperimentPlanBase {
100
+ readonly revision: number;
101
+ readonly enabled: boolean;
102
+ readonly scopeId: string;
103
+ readonly light: {
104
+ readonly entityId: string;
105
+ readonly direction: readonly [number, number, number];
106
+ };
107
+ readonly qualityProfileId: string;
108
+ readonly generator: {
109
+ readonly maps: ShadowMapExperimentMapSettings;
110
+ /** Compatibility-only legacy metadata; current product backends do not consume it. */
111
+ readonly cascadeCount?: ShadowMapExperimentCascadeCount;
112
+ readonly filter: ShadowMapExperimentFilter;
113
+ readonly bias: number;
114
+ readonly normalBias: number;
115
+ readonly darkness: number;
116
+ /** Normalized receiver-edge softness. Omitted plans retain the legacy kernel. */
117
+ readonly softness?: number;
118
+ readonly bounds: EditorShadowMapExperimentBounds;
119
+ readonly backend: ShadowMapExperimentBackendSettings;
120
+ };
121
+ readonly culling: ShadowMapExperimentCullingSettings;
122
+ readonly diagnosticThresholds: ShadowMapExperimentDiagnosticThresholds;
123
+ readonly objects: readonly ShadowMapExperimentPlanObject[];
124
+ readonly diagnostics: readonly ShadowMapExperimentDiagnostic[];
125
+ }
126
+ /** Legacy rendering-compatible plan. It cannot authorize profile-only runtime registration. */
127
+ export interface ShadowMapExperimentPlanV2 extends ShadowMapExperimentPlanBase {
128
+ readonly schemaVersion: typeof FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION_V2;
129
+ }
130
+ export interface ShadowMapExperimentPlanV3 extends ShadowMapExperimentPlanBase {
131
+ readonly schemaVersion: typeof FPS_SHADOW_MAP_EXPERIMENT_PLAN_SCHEMA_VERSION;
132
+ readonly behaviorProfiles: Readonly<Record<string, ShadowMapExperimentBehaviorProfileCatalogEntry>>;
133
+ }
134
+ export type ShadowMapExperimentPlan = ShadowMapExperimentPlanV2 | ShadowMapExperimentPlanV3;
135
+ export interface ResolveShadowMapExperimentPlanInput {
136
+ readonly revision: number;
137
+ readonly scopeId: string;
138
+ readonly config: ShadowMapExperimentConfig;
139
+ readonly settings?: EditorShadowMapExperimentSettings;
140
+ readonly lightDirection: readonly [number, number, number];
141
+ readonly objects: readonly {
142
+ readonly entityId: string;
143
+ readonly renderableIds: readonly string[];
144
+ readonly override?: EditorShadowMapExperimentObjectOverride;
145
+ /** Canonical authored override. When omitted, the behavior profile decides. */
146
+ readonly cast?: boolean;
147
+ /** Canonical authored override. When omitted, the behavior profile decides. */
148
+ readonly receive?: boolean;
149
+ readonly inferredUpdateClass?: ShadowMapExperimentUpdateClass;
150
+ }[];
151
+ }
152
+ export interface ShadowMapExperimentPlanDelta {
153
+ readonly fromRevision: number;
154
+ readonly toRevision: number;
155
+ readonly generatorChanged: boolean;
156
+ readonly generatorResourcesChanged: boolean;
157
+ readonly appearanceChanged: boolean;
158
+ readonly appearanceOnly: boolean;
159
+ readonly lightDirectionChanged: boolean;
160
+ readonly addedCasters: readonly string[];
161
+ readonly removedCasters: readonly string[];
162
+ readonly changedCasters: readonly string[];
163
+ readonly changedReceivers: readonly string[];
164
+ readonly requiresRefresh: boolean;
165
+ readonly dirtyReasons: readonly ShadowMapExperimentDirtyReason[];
166
+ }
167
+ export interface ShadowMapExperimentAppearance {
168
+ readonly strength: number;
169
+ readonly darkness: number;
170
+ readonly softness: number;
171
+ }
172
+ export interface ShadowMapExperimentAppearanceInput {
173
+ readonly strength: number;
174
+ readonly softness: number;
175
+ }
176
+ export declare function shadowMapExperimentDarknessFromStrength(strength: number): number;
177
+ export declare function shadowMapExperimentStrengthFromDarkness(darkness: number): number;
178
+ export declare function resolveShadowMapExperimentAppearance(value: Pick<ShadowMapExperimentQualityProfile, 'darkness' | 'softness'>): ShadowMapExperimentAppearance;
179
+ export declare function createShadowMapExperimentQualityProfileAppearanceSnapshot(configValue: unknown, qualityProfileId: string, input: ShadowMapExperimentAppearanceInput): ShadowMapExperimentConfig;
180
+ export declare function assertEditorShadowMapExperimentSettings(value: unknown, path?: string): asserts value is EditorShadowMapExperimentSettings;
181
+ export declare function assertEditorShadowMapExperimentObjectOverride(value: unknown, path?: string): asserts value is EditorShadowMapExperimentObjectOverride;
182
+ export declare function assertShadowMapExperimentConfig(value: unknown, path?: string): asserts value is ShadowMapExperimentConfig;
183
+ export declare function createShadowMapExperimentConfigSnapshot(value: unknown): ShadowMapExperimentConfig;
184
+ export declare function resolveShadowMapExperimentPlan(input: ResolveShadowMapExperimentPlanInput): ShadowMapExperimentPlan;
185
+ export declare function createShadowMapExperimentPlanSnapshot(value: unknown): ShadowMapExperimentPlan;
186
+ export declare function createShadowMapExperimentPlanFingerprint(value: unknown): string;
187
+ export declare function diffShadowMapExperimentPlans(previous: ShadowMapExperimentPlan, next: ShadowMapExperimentPlan): ShadowMapExperimentPlanDelta;
188
+ export {};
189
+ //# sourceMappingURL=shadow-map-experiment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-map-experiment.d.ts","sourceRoot":"","sources":["../../src/rendering/shadow-map-experiment.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAAG,2BAAoC,CAAC;AACxF,eAAO,MAAM,+CAA+C,EAAG,CAAU,CAAC;AAC1E,eAAO,MAAM,gDAAgD,EAAG,CAAU,CAAC;AAC3E,eAAO,MAAM,6CAA6C,EAAG,CAAU,CAAC;AACxE,eAAO,MAAM,wCAAwC,GAAkD,CAAC;AACxG,eAAO,MAAM,sCAAsC,QAAQ,CAAC;AAE5D,MAAM,MAAM,6BAA6B,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrE,MAAM,MAAM,+BAA+B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxD,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,SAAS,CAAC;AAC3D,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAC9E,MAAM,MAAM,sCAAsC,GAAG,MAAM,GAAG,8BAA8B,CAAC;AAC7F,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,kCAAkC,GAAG,YAAY,GAAG,SAAS,CAAC;AAC1E,MAAM,MAAM,iCAAiC,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAChG,MAAM,MAAM,+BAA+B,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAC9F,MAAM,MAAM,8BAA8B,GACtC,mBAAmB,GACnB,kBAAkB,GAClB,yBAAyB,GACzB,sBAAsB,GACtB,iBAAiB,GACjB,cAAc,GACd,gBAAgB,GAChB,2BAA2B,GAC3B,0BAA0B,GAC1B,2BAA2B,GAC3B,yBAAyB,GACzB,6BAA6B,GAC7B,yBAAyB,GACzB,yBAAyB,GACzB,eAAe,GACf,yBAAyB,GACzB,uBAAuB,GACvB,sBAAsB,GACtB,iCAAiC,GACjC,qCAAqC,GACrC,0BAA0B,GAC1B,2BAA2B,GAC3B,kBAAkB,CAAC;AAEvB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;IACzD,QAAQ,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;CAC7D;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,kCAAkC,CAAC;CACvD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,sFAAsF;IACtF,QAAQ,CAAC,YAAY,CAAC,EAAE,+BAA+B,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,uCAAuC,CAAC;CAC/D;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;CAC9D;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,wCAAwC,CAAC;IACxE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC,CAAC;IACtF,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,8BAA8B,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,8CAA8C;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;CAC9D;AAED,UAAU,2BAA2B;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACvD,CAAC;IACF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;QAC9C,sFAAsF;QACtF,QAAQ,CAAC,YAAY,CAAC,EAAE,+BAA+B,CAAC;QACxD,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;QAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,iFAAiF;QACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;QACjD,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;KACtD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,oBAAoB,EAAE,uCAAuC,CAAC;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAChE;AAED,+FAA+F;AAC/F,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,QAAQ,CAAC,aAAa,EAAE,OAAO,gDAAgD,CAAC;CACjF;AAED,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,QAAQ,CAAC,aAAa,EAAE,OAAO,6CAA6C,CAAC;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,8CAA8C,CAAC,CAAC,CAAC;CACrG;AAED,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,GAAG,yBAAyB,CAAC;AAE5F,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,iCAAiC,CAAC;IACtD,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,SAAS;QACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,uCAAuC,CAAC;QAC5D,+EAA+E;QAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QACxB,+EAA+E;QAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;KAC/D,EAAE,CAAC;CACL;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAClE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,uCAAuC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,uCAAuC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,UAAU,GAAG,UAAU,CAAC,GACtE,6BAA6B,CAU/B;AAED,wBAAgB,yDAAyD,CACvE,WAAW,EAAE,OAAO,EACpB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,kCAAkC,GACxC,yBAAyB,CAsB3B;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,OAAO,EACd,IAAI,SAAgC,GACnC,OAAO,CAAC,KAAK,IAAI,iCAAiC,CAKpD;AAED,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,OAAO,EACd,IAAI,SAA0B,GAC7B,OAAO,CAAC,KAAK,IAAI,uCAAuC,CAI1D;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,IAAI,SAAM,GACT,OAAO,CAAC,KAAK,IAAI,yBAAyB,CA0B5C;AAED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAIjG;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,mCAAmC,GAAG,uBAAuB,CAqElH;AAQD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CA2E7F;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ/E;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,GAAG,4BAA4B,CA4D3I"}