@forgeax/engine-render 0.1.33 → 0.1.35

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 (624) hide show
  1. package/README.md +1062 -127
  2. package/dist/assembly/backend-contract.d.ts +2 -0
  3. package/dist/assembly/backend-contract.d.ts.map +1 -1
  4. package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
  5. package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
  6. package/dist/assembly/canvas-draw-guard.d.ts +3 -0
  7. package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
  8. package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
  9. package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
  10. package/dist/assembly/device-feature-admission.d.ts +2 -2
  11. package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
  12. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  13. package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
  14. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
  15. package/dist/assembly/factory.d.ts +1 -1
  16. package/dist/assembly/factory.d.ts.map +1 -1
  17. package/dist/assembly/host-contract.d.ts +6 -5
  18. package/dist/assembly/host-contract.d.ts.map +1 -1
  19. package/dist/assembly/material/assembly.d.ts.map +1 -1
  20. package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
  21. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
  22. package/dist/assembly/material-shader-policy.d.ts +16 -2
  23. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  24. package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
  25. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  26. package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
  27. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  28. package/dist/assembly/render-feature-post-processes.d.ts +6 -0
  29. package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
  30. package/dist/assembly/render-target-host.d.ts +5 -0
  31. package/dist/assembly/render-target-host.d.ts.map +1 -1
  32. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  33. package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
  34. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
  35. package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
  36. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  37. package/dist/assembly/renderer-inspection.d.ts +11 -0
  38. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  39. package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
  40. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
  41. package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
  42. package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
  43. package/dist/assembly/webgpu-ready.d.ts +1 -1
  44. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  45. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
  46. package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
  47. package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
  48. package/dist/assembly/webgpu-renderer.d.ts +2 -1
  49. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  50. package/dist/authoring.mjs +2 -4
  51. package/dist/authoring.mjs.map +1 -1
  52. package/dist/barrel-distortion.d.ts +47 -0
  53. package/dist/barrel-distortion.d.ts.map +1 -0
  54. package/dist/chunk-3XUBWRY2.mjs +1842 -0
  55. package/dist/chunk-3XUBWRY2.mjs.map +1 -0
  56. package/dist/{chunk-OO3DRYK7.mjs → chunk-G6HDNGY7.mjs} +2400 -1767
  57. package/dist/chunk-G6HDNGY7.mjs.map +1 -0
  58. package/dist/{chunk-ZDQWGQW7.mjs → chunk-LM5IE7GF.mjs} +4 -4
  59. package/dist/{chunk-ZDQWGQW7.mjs.map → chunk-LM5IE7GF.mjs.map} +1 -1
  60. package/dist/{chunk-VOZWDM3L.mjs → chunk-LNIUIKQ7.mjs} +1514 -498
  61. package/dist/chunk-LNIUIKQ7.mjs.map +1 -0
  62. package/dist/chunk-MXTWKZO4.mjs +3268 -0
  63. package/dist/chunk-MXTWKZO4.mjs.map +1 -0
  64. package/dist/chunk-MZ4C7EHF.mjs +6942 -0
  65. package/dist/chunk-MZ4C7EHF.mjs.map +1 -0
  66. package/dist/chunk-RIPAEGI6.mjs +48 -0
  67. package/dist/chunk-RIPAEGI6.mjs.map +1 -0
  68. package/dist/{chunk-LEAXOMYJ.mjs → chunk-SGPUJW3F.mjs} +117 -5
  69. package/dist/chunk-SGPUJW3F.mjs.map +1 -0
  70. package/dist/{chunk-PA5DRJNI.mjs → chunk-X2KA6WHM.mjs} +29 -4
  71. package/dist/chunk-X2KA6WHM.mjs.map +1 -0
  72. package/dist/{chunk-BLXGONR2.mjs → chunk-XSFB7XXQ.mjs} +51 -4
  73. package/dist/chunk-XSFB7XXQ.mjs.map +1 -0
  74. package/dist/cloud/density.d.ts +55 -0
  75. package/dist/cloud/density.d.ts.map +1 -0
  76. package/dist/cloud/extract.d.ts +25 -0
  77. package/dist/cloud/extract.d.ts.map +1 -0
  78. package/dist/cloud/feature.d.ts +57 -0
  79. package/dist/cloud/feature.d.ts.map +1 -0
  80. package/dist/cloud/frame-context.d.ts +8 -0
  81. package/dist/cloud/frame-context.d.ts.map +1 -0
  82. package/dist/cloud/inspection.d.ts +59 -0
  83. package/dist/cloud/inspection.d.ts.map +1 -0
  84. package/dist/cloud/optics.d.ts +56 -0
  85. package/dist/cloud/optics.d.ts.map +1 -0
  86. package/dist/cloud/parameters.d.ts +73 -0
  87. package/dist/cloud/parameters.d.ts.map +1 -0
  88. package/dist/cloud/resources.d.ts +60 -0
  89. package/dist/cloud/resources.d.ts.map +1 -0
  90. package/dist/cloud/shadow.d.ts +42 -0
  91. package/dist/cloud/shadow.d.ts.map +1 -0
  92. package/dist/cloud/temporal.d.ts +74 -0
  93. package/dist/cloud/temporal.d.ts.map +1 -0
  94. package/dist/components/barrel-distortion.d.ts +13 -0
  95. package/dist/components/barrel-distortion.d.ts.map +1 -0
  96. package/dist/components/cloud-layer.d.ts +29 -0
  97. package/dist/components/cloud-layer.d.ts.map +1 -0
  98. package/dist/components/index.d.ts +2 -0
  99. package/dist/components/index.d.ts.map +1 -1
  100. package/dist/components/instances.d.ts +20 -6
  101. package/dist/components/instances.d.ts.map +1 -1
  102. package/dist/construct-renderer.d.ts +1 -1
  103. package/dist/construct-renderer.d.ts.map +1 -1
  104. package/dist/construct-renderer.mjs +8406 -5785
  105. package/dist/construct-renderer.mjs.map +1 -1
  106. package/dist/device/gpu-residency.d.ts +19 -19
  107. package/dist/device/gpu-residency.d.ts.map +1 -1
  108. package/dist/dynamic-geometry.d.ts +5 -1
  109. package/dist/dynamic-geometry.d.ts.map +1 -1
  110. package/dist/errors/cloud.d.ts +59 -0
  111. package/dist/errors/cloud.d.ts.map +1 -0
  112. package/dist/errors/render.d.ts +20 -5
  113. package/dist/errors/render.d.ts.map +1 -1
  114. package/dist/examples/single-layer-medium-surface.d.ts +47 -0
  115. package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
  116. package/dist/extract/camera.d.ts.map +1 -1
  117. package/dist/extract/contracts.d.ts +5 -1
  118. package/dist/extract/contracts.d.ts.map +1 -1
  119. package/dist/extract/material-context.d.ts +7 -0
  120. package/dist/extract/material-context.d.ts.map +1 -0
  121. package/dist/features/barrel-distortion.d.ts +29 -0
  122. package/dist/features/barrel-distortion.d.ts.map +1 -0
  123. package/dist/features/error-reporting.d.ts +6 -2
  124. package/dist/features/error-reporting.d.ts.map +1 -1
  125. package/dist/features/host.d.ts +15 -0
  126. package/dist/features/host.d.ts.map +1 -1
  127. package/dist/features/plan.d.ts +10 -0
  128. package/dist/features/plan.d.ts.map +1 -1
  129. package/dist/features/render-graph-contribution.d.ts +5 -0
  130. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  131. package/dist/features/render-graph-raster.d.ts +1 -0
  132. package/dist/features/render-graph-raster.d.ts.map +1 -1
  133. package/dist/features/targets.d.ts +2 -0
  134. package/dist/features/targets.d.ts.map +1 -1
  135. package/dist/features/types.d.ts +48 -0
  136. package/dist/features/types.d.ts.map +1 -1
  137. package/dist/fullscreen-post-process-pass.d.ts +15 -7
  138. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  139. package/dist/glyph-text-layout-system.d.ts +1 -1
  140. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  141. package/dist/gpu-dirty-ranges.d.ts +11 -0
  142. package/dist/gpu-dirty-ranges.d.ts.map +1 -0
  143. package/dist/gpu-driven/batch-topology.d.ts +17 -0
  144. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  145. package/dist/gpu-driven/material-artifacts.d.ts +6 -0
  146. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
  147. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  148. package/dist/gpu-driven/production-raster-material.d.ts +178 -0
  149. package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
  150. package/dist/gpu-driven/production-raster.d.ts +47 -3
  151. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  152. package/dist/gpu-driven/resource-allocation.d.ts +31 -0
  153. package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
  154. package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
  155. package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
  156. package/dist/gpu-driven/view-gpu.d.ts +26 -2
  157. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  158. package/dist/gpu-scene.d.ts +5 -0
  159. package/dist/gpu-scene.d.ts.map +1 -1
  160. package/dist/hdrp-buffers.d.ts +2 -2
  161. package/dist/hdrp-buffers.d.ts.map +1 -1
  162. package/dist/ibl/frame-resources.d.ts.map +1 -1
  163. package/dist/ibl/skylight-bind-group.d.ts +14 -5
  164. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  165. package/dist/index.d.ts +30 -7
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.mjs +780 -9
  168. package/dist/index.mjs.map +1 -1
  169. package/dist/inspection-types.d.ts +135 -1
  170. package/dist/inspection-types.d.ts.map +1 -1
  171. package/dist/instance-buffer-cache.d.ts +4 -4
  172. package/dist/instance-buffer-cache.d.ts.map +1 -1
  173. package/dist/instances.d.ts +47 -100
  174. package/dist/instances.d.ts.map +1 -1
  175. package/dist/internal.mjs +7 -8
  176. package/dist/internal.mjs.map +1 -1
  177. package/dist/pbr-pipeline.d.ts +22 -4
  178. package/dist/pbr-pipeline.d.ts.map +1 -1
  179. package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
  180. package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
  181. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  182. package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
  183. package/dist/pipeline/standard-output/lut-gpu.d.ts +2 -2
  184. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -1
  185. package/dist/pipeline/standard-output/resources.d.ts +2 -2
  186. package/dist/pipeline/standard-output/resources.d.ts.map +1 -1
  187. package/dist/pipeline/standard-output/types.d.ts +4 -2
  188. package/dist/pipeline/standard-output/types.d.ts.map +1 -1
  189. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  190. package/dist/pipeline/standard-post.d.ts.map +1 -1
  191. package/dist/pipeline-builder.d.ts +1 -1
  192. package/dist/pipeline-builder.d.ts.map +1 -1
  193. package/dist/plugin.d.ts.map +1 -1
  194. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
  195. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  196. package/dist/publication/contract.d.ts +77 -0
  197. package/dist/publication/contract.d.ts.map +1 -0
  198. package/dist/publication/dependencies.d.ts +7 -0
  199. package/dist/publication/dependencies.d.ts.map +1 -0
  200. package/dist/publication/prepare-geometry.d.ts +9 -0
  201. package/dist/publication/prepare-geometry.d.ts.map +1 -0
  202. package/dist/publication/programs.d.ts +5 -0
  203. package/dist/publication/programs.d.ts.map +1 -0
  204. package/dist/publication/publisher.d.ts +33 -0
  205. package/dist/publication/publisher.d.ts.map +1 -0
  206. package/dist/publication/receiver.d.ts +29 -0
  207. package/dist/publication/receiver.d.ts.map +1 -0
  208. package/dist/publication/resource-scope.d.ts +18 -0
  209. package/dist/publication/resource-scope.d.ts.map +1 -0
  210. package/dist/publication/targets.d.ts +33 -0
  211. package/dist/publication/targets.d.ts.map +1 -0
  212. package/dist/publication/video.d.ts +5 -0
  213. package/dist/publication/video.d.ts.map +1 -0
  214. package/dist/record/barrel-distortion-frame.d.ts +15 -0
  215. package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
  216. package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
  217. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
  218. package/dist/record/fold-buckets.d.ts +95 -0
  219. package/dist/record/fold-buckets.d.ts.map +1 -0
  220. package/dist/record/fold-instance-buffer.d.ts +6 -0
  221. package/dist/record/fold-instance-buffer.d.ts.map +1 -0
  222. package/dist/record/frame-lighting.d.ts +1 -0
  223. package/dist/record/frame-lighting.d.ts.map +1 -1
  224. package/dist/record/frame-snapshot.d.ts +43 -9
  225. package/dist/record/frame-snapshot.d.ts.map +1 -1
  226. package/dist/record/frame.d.ts +15 -65
  227. package/dist/record/frame.d.ts.map +1 -1
  228. package/dist/record/gpu-draw-receipts.d.ts +11 -0
  229. package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
  230. package/dist/record/gpu-timing.d.ts +8 -0
  231. package/dist/record/gpu-timing.d.ts.map +1 -1
  232. package/dist/record/helpers.d.ts +2 -2
  233. package/dist/record/helpers.d.ts.map +1 -1
  234. package/dist/record/main-pass-geometry.d.ts +22 -6
  235. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  236. package/dist/record/main-pass-material.d.ts +14 -10
  237. package/dist/record/main-pass-material.d.ts.map +1 -1
  238. package/dist/record/main-pass-sprite-draws.d.ts +3 -16
  239. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  240. package/dist/record/main-pass.d.ts +13 -2
  241. package/dist/record/main-pass.d.ts.map +1 -1
  242. package/dist/record/motion-blur-receipt.d.ts +11 -0
  243. package/dist/record/motion-blur-receipt.d.ts.map +1 -0
  244. package/dist/record/prepared-material-bindings.d.ts +3 -3
  245. package/dist/record/prepared-material-bindings.d.ts.map +1 -1
  246. package/dist/record/probe-blend-buffer.d.ts +16 -0
  247. package/dist/record/probe-blend-buffer.d.ts.map +1 -0
  248. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  249. package/dist/record/render-context.d.ts +24 -5
  250. package/dist/record/render-context.d.ts.map +1 -1
  251. package/dist/record/shadow-pass.d.ts +2 -0
  252. package/dist/record/shadow-pass.d.ts.map +1 -1
  253. package/dist/record/skybox-post-pass.d.ts +1 -1
  254. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  255. package/dist/record/sprite-instance-buffer.d.ts +31 -0
  256. package/dist/record/sprite-instance-buffer.d.ts.map +1 -0
  257. package/dist/record/target-capture-graph.d.ts +19 -0
  258. package/dist/record/target-capture-graph.d.ts.map +1 -0
  259. package/dist/record/typed-frame-graph.d.ts +24 -15
  260. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  261. package/dist/record/view-ubo.d.ts +11 -3
  262. package/dist/record/view-ubo.d.ts.map +1 -1
  263. package/dist/record/volume-params.d.ts +9 -0
  264. package/dist/record/volume-params.d.ts.map +1 -0
  265. package/dist/recovery/render-system-candidate.d.ts +14 -4
  266. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  267. package/dist/reflection/record-owner.d.ts.map +1 -1
  268. package/dist/render-contract.d.ts +46 -5
  269. package/dist/render-contract.d.ts.map +1 -1
  270. package/dist/render-graph-primitives.d.ts.map +1 -1
  271. package/dist/render-pipeline.d.ts +103 -2
  272. package/dist/render-pipeline.d.ts.map +1 -1
  273. package/dist/render-system-extract-tail.d.ts +3 -2
  274. package/dist/render-system-extract-tail.d.ts.map +1 -1
  275. package/dist/render-system-extract.d.ts +18 -9
  276. package/dist/render-system-extract.d.ts.map +1 -1
  277. package/dist/render-system-presentation.d.ts +23 -0
  278. package/dist/render-system-presentation.d.ts.map +1 -0
  279. package/dist/render-system-producer-roots.d.ts +10 -0
  280. package/dist/render-system-producer-roots.d.ts.map +1 -0
  281. package/dist/render-system-projections.d.ts +3 -2
  282. package/dist/render-system-projections.d.ts.map +1 -1
  283. package/dist/render-system-residency.d.ts +12 -0
  284. package/dist/render-system-residency.d.ts.map +1 -0
  285. package/dist/render-system.d.ts +22 -21
  286. package/dist/render-system.d.ts.map +1 -1
  287. package/dist/scene/probe-blend.d.ts +27 -0
  288. package/dist/scene/probe-blend.d.ts.map +1 -1
  289. package/dist/scene/render-scene.d.ts +18 -7
  290. package/dist/scene/render-scene.d.ts.map +1 -1
  291. package/dist/scene/render-source.d.ts +42 -0
  292. package/dist/scene/render-source.d.ts.map +1 -0
  293. package/dist/scene/source-systems.d.ts +6 -0
  294. package/dist/scene/source-systems.d.ts.map +1 -0
  295. package/dist/ssao-buffers.d.ts +9 -0
  296. package/dist/ssao-buffers.d.ts.map +1 -1
  297. package/dist/surface/dynamic-input.d.ts +133 -0
  298. package/dist/surface/dynamic-input.d.ts.map +1 -0
  299. package/dist/surface/gpu-driven.d.ts +41 -0
  300. package/dist/surface/gpu-driven.d.ts.map +1 -0
  301. package/dist/surface/submission-observation.d.ts +136 -0
  302. package/dist/surface/submission-observation.d.ts.map +1 -0
  303. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  304. package/dist/systems/skin-palette-types.d.ts +10 -0
  305. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  306. package/dist/systems/transparent-dispatch.d.ts +2 -2
  307. package/dist/systems/transparent-dispatch.d.ts.map +1 -1
  308. package/dist/systems/transparent-sort-config.d.ts +2 -1
  309. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  310. package/dist/temporal/gpu.d.ts +13 -1
  311. package/dist/temporal/gpu.d.ts.map +1 -1
  312. package/dist/temporal/index.mjs +6 -7
  313. package/dist/temporal/inspection.d.ts.map +1 -1
  314. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  315. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
  316. package/dist/transmission/single-layer-medium.d.ts +89 -0
  317. package/dist/transmission/single-layer-medium.d.ts.map +1 -0
  318. package/dist/typed-render-graph-primitives.d.ts +14 -2
  319. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  320. package/dist/volume/component.d.ts +9 -4
  321. package/dist/volume/component.d.ts.map +1 -1
  322. package/dist/volume/extract.d.ts +1 -1
  323. package/dist/volume/extract.d.ts.map +1 -1
  324. package/dist/volume/inspection.d.ts +2 -0
  325. package/dist/volume/inspection.d.ts.map +1 -1
  326. package/dist/volume/passes.d.ts +4 -1
  327. package/dist/volume/passes.d.ts.map +1 -1
  328. package/dist/volume/resources.d.ts.map +1 -1
  329. package/package.json +22 -21
  330. package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
  331. package/src/__tests__/auto-exposure-transaction.integration.test.ts +4 -9
  332. package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
  333. package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
  334. package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
  335. package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
  336. package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
  337. package/src/__tests__/device-feature-admission.unit.test.ts +3 -2
  338. package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
  339. package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
  340. package/src/__tests__/factory-contract.integration.test.ts +295 -45
  341. package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
  342. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
  343. package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
  344. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
  345. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
  346. package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
  347. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +5 -6
  348. package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
  349. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +6 -5
  350. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +94 -6
  351. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
  352. package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
  353. package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
  354. package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
  355. package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
  356. package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
  357. package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
  358. package/src/__tests__/gpu-scene.unit.test.ts +119 -9
  359. package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
  360. package/src/__tests__/instances-culling.integration.test.ts +10 -36
  361. package/src/__tests__/instances-store.unit.test.ts +97 -305
  362. package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
  363. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +4 -1
  364. package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +145 -0
  365. package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
  366. package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
  367. package/src/__tests__/materials-standard-contract.unit.test.ts +0 -1
  368. package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
  369. package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
  370. package/src/__tests__/motion-blur-compute.dawn.test.ts +13 -7
  371. package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
  372. package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
  373. package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
  374. package/src/__tests__/physical-clearcoat.integration.test.ts +66 -8
  375. package/src/__tests__/physical-material-budget.unit.test.ts +40 -0
  376. package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
  377. package/src/__tests__/probe-bindings.unit.test.ts +582 -1
  378. package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
  379. package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
  380. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
  381. package/src/__tests__/render-error-code-owner.test-d.ts +8 -0
  382. package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
  383. package/src/__tests__/render-feature-error-reporting.unit.test.ts +21 -1
  384. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
  385. package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
  386. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
  387. package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
  388. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +20 -20
  389. package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
  390. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
  391. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
  392. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +42 -8
  393. package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
  394. package/src/__tests__/renderer-frame-transaction.integration.test.ts +26 -10
  395. package/src/__tests__/resource-allocation.unit.test.ts +123 -0
  396. package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
  397. package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
  398. package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
  399. package/src/__tests__/skinned-shadow-caster.test.ts +15 -0
  400. package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
  401. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
  402. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
  403. package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
  404. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
  405. package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
  406. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
  407. package/src/__tests__/standard-pipeline.integration.test.ts +182 -1
  408. package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
  409. package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
  410. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
  411. package/src/__tests__/temporal-performance.integration.test.ts +3 -3
  412. package/src/__tests__/visibility-instances.integration.test.ts +7 -19
  413. package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
  414. package/src/__tests__/volume-optics-oracle.unit.test.ts +4 -2
  415. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +30 -20
  416. package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
  417. package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
  418. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
  419. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +113 -9
  420. package/src/__tests__/volumetric-fog-topology.unit.test.ts +5 -3
  421. package/src/assembly/backend-contract.ts +30 -0
  422. package/src/assembly/barrel-distortion-inspection.ts +22 -0
  423. package/src/assembly/canvas-draw-guard.ts +11 -0
  424. package/src/assembly/cloud-shadow-entry.ts +22 -0
  425. package/src/assembly/device-feature-admission.ts +2 -2
  426. package/src/assembly/dynamic-geometry-host.ts +65 -37
  427. package/src/assembly/dynamic-geometry-runtime.ts +7 -1
  428. package/src/assembly/factory.ts +2 -30
  429. package/src/assembly/host-contract.ts +8 -5
  430. package/src/assembly/material/assembly.ts +25 -13
  431. package/src/assembly/material/pipeline-helpers.ts +53 -12
  432. package/src/assembly/material-shader-policy.ts +55 -0
  433. package/src/assembly/material-shader-prewarm.ts +21 -10
  434. package/src/assembly/recovery/device-loss-fanout.ts +13 -0
  435. package/src/assembly/recovery/renderer-recover.ts +50 -18
  436. package/src/assembly/render-feature-post-processes.ts +54 -0
  437. package/src/assembly/render-target-host.ts +57 -47
  438. package/src/assembly/renderer-facade.ts +7 -2
  439. package/src/assembly/renderer-feature-inspection.ts +8 -2
  440. package/src/assembly/renderer-frame-transaction.ts +23 -0
  441. package/src/assembly/renderer-inspection.ts +28 -0
  442. package/src/assembly/skin-palette-owner.ts +1 -1
  443. package/src/assembly/temporal-post-process-prewarm.ts +3 -3
  444. package/src/assembly/webgpu-pbr-ready.ts +9 -1
  445. package/src/assembly/webgpu-ready-per-pass.ts +104 -0
  446. package/src/assembly/webgpu-ready.ts +116 -62
  447. package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
  448. package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
  449. package/src/assembly/webgpu-renderer.ts +303 -313
  450. package/src/assembly/webgpu-vertex-layouts.ts +1 -1
  451. package/src/barrel-distortion.ts +247 -0
  452. package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
  453. package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
  454. package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
  455. package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
  456. package/src/cloud/density.ts +600 -0
  457. package/src/cloud/extract.ts +110 -0
  458. package/src/cloud/feature.ts +1810 -0
  459. package/src/cloud/frame-context.ts +42 -0
  460. package/src/cloud/inspection.ts +130 -0
  461. package/src/cloud/optics.ts +285 -0
  462. package/src/cloud/parameters.ts +255 -0
  463. package/src/cloud/resources.ts +122 -0
  464. package/src/cloud/shadow.ts +167 -0
  465. package/src/cloud/temporal.ts +226 -0
  466. package/src/components/barrel-distortion.ts +46 -0
  467. package/src/components/cloud-layer.ts +47 -0
  468. package/src/components/index.ts +2 -0
  469. package/src/components/instances.ts +18 -45
  470. package/src/components/sprite-instances.ts +1 -1
  471. package/src/construct-renderer.ts +1 -1
  472. package/src/device/gpu-residency.ts +26 -25
  473. package/src/dynamic-geometry.ts +12 -1
  474. package/src/errors/cloud.ts +103 -0
  475. package/src/errors/render.ts +47 -8
  476. package/src/examples/single-layer-medium-surface.ts +59 -0
  477. package/src/extract/camera.ts +15 -1
  478. package/src/extract/contracts.ts +5 -0
  479. package/src/extract/material-context.ts +21 -0
  480. package/src/features/barrel-distortion.ts +172 -0
  481. package/src/features/error-reporting.ts +26 -6
  482. package/src/features/host.ts +128 -19
  483. package/src/features/plan.ts +10 -0
  484. package/src/features/render-graph-contribution.ts +9 -0
  485. package/src/features/render-graph-raster.ts +45 -3
  486. package/src/features/targets.ts +66 -0
  487. package/src/features/types.ts +51 -0
  488. package/src/fullscreen-post-process-pass.ts +41 -9
  489. package/src/glyph-text-layout-system.ts +2 -2
  490. package/src/gpu-dirty-ranges.ts +48 -0
  491. package/src/gpu-driven/batch-topology.ts +53 -0
  492. package/src/gpu-driven/material-artifacts.ts +33 -25
  493. package/src/gpu-driven/prepared-draw.ts +12 -4
  494. package/src/gpu-driven/production-raster-material.ts +1894 -0
  495. package/src/gpu-driven/production-raster.ts +825 -784
  496. package/src/gpu-driven/resource-allocation.ts +142 -0
  497. package/src/gpu-driven/shadow-ownership.ts +71 -0
  498. package/src/gpu-driven/view-gpu.ts +164 -10
  499. package/src/gpu-scene.ts +75 -84
  500. package/src/hdrp-buffers.ts +4 -3
  501. package/src/ibl/frame-resources.ts +0 -1
  502. package/src/ibl/skylight-bind-group.ts +62 -32
  503. package/src/index.ts +205 -9
  504. package/src/inspection-types.ts +162 -0
  505. package/src/instance-buffer-cache.ts +4 -4
  506. package/src/instances.ts +152 -569
  507. package/src/pbr-pipeline.ts +230 -30
  508. package/src/pipeline/single-layer-medium-passes.ts +267 -0
  509. package/src/pipeline/standard-forward-lane.ts +313 -57
  510. package/src/pipeline/standard-output/graph.ts +8 -2
  511. package/src/pipeline/standard-output/lut-gpu.ts +3 -3
  512. package/src/pipeline/standard-output/resources.ts +2 -2
  513. package/src/pipeline/standard-output/types.ts +12 -1
  514. package/src/pipeline/standard-pipeline.ts +291 -18
  515. package/src/pipeline/standard-post.ts +90 -24
  516. package/src/pipeline-builder.ts +1 -1
  517. package/src/plugin.ts +4 -0
  518. package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
  519. package/src/prepare/prepared-graphics-resolver.ts +2 -0
  520. package/src/publication/__tests__/derived-geometry.integration.test.ts +177 -0
  521. package/src/publication/__tests__/features.integration.test.ts +122 -0
  522. package/src/publication/__tests__/programs.unit.test.ts +25 -0
  523. package/src/publication/__tests__/publication.integration.test.ts +370 -0
  524. package/src/publication/__tests__/targets.integration.test.ts +120 -0
  525. package/src/publication/__tests__/video.browser.test.ts +50 -0
  526. package/src/publication/contract.ts +104 -0
  527. package/src/publication/dependencies.ts +54 -0
  528. package/src/publication/prepare-geometry.ts +94 -0
  529. package/src/publication/programs.ts +45 -0
  530. package/src/publication/publisher.ts +618 -0
  531. package/src/publication/receiver.ts +297 -0
  532. package/src/publication/resource-scope.ts +31 -0
  533. package/src/publication/targets.ts +182 -0
  534. package/src/publication/video.ts +33 -0
  535. package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
  536. package/src/record/__tests__/material-bg-cache.unit.test.ts +15 -1
  537. package/src/record/__tests__/sprite-material-abi.unit.test.ts +9 -11
  538. package/src/record/__tests__/temporal-payload.unit.test.ts +1 -1
  539. package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
  540. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
  541. package/src/record/__tests__/video-texture-view.unit.test.ts +9 -9
  542. package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
  543. package/src/record/barrel-distortion-frame.ts +110 -0
  544. package/src/record/dynamic-geometry-consumption.ts +39 -9
  545. package/src/record/fold-buckets.ts +855 -0
  546. package/src/record/fold-instance-buffer.ts +51 -0
  547. package/src/record/frame-lighting.ts +36 -2
  548. package/src/record/frame-snapshot.ts +45 -9
  549. package/src/record/frame.ts +258 -1105
  550. package/src/record/gpu-draw-receipts.ts +38 -0
  551. package/src/record/gpu-timing.ts +48 -5
  552. package/src/record/helpers.ts +2 -2
  553. package/src/record/main-pass-geometry.ts +272 -84
  554. package/src/record/main-pass-material.ts +102 -36
  555. package/src/record/main-pass-sprite-draws.ts +13 -217
  556. package/src/record/main-pass.ts +164 -27
  557. package/src/record/motion-blur-receipt.ts +91 -0
  558. package/src/record/prepared-material-bindings.ts +11 -6
  559. package/src/record/probe-blend-buffer.ts +180 -0
  560. package/src/record/recovery-pipeline.ts +35 -3
  561. package/src/record/render-context.ts +41 -5
  562. package/src/record/shadow-pass.ts +30 -4
  563. package/src/record/skybox-post-pass.ts +28 -4
  564. package/src/record/sprite-instance-buffer.ts +155 -0
  565. package/src/record/target-capture-graph.ts +258 -0
  566. package/src/record/typed-frame-graph.ts +776 -340
  567. package/src/record/view-ubo.ts +27 -4
  568. package/src/record/volume-params.ts +225 -0
  569. package/src/recovery/render-system-candidate.ts +243 -50
  570. package/src/reflection/record-owner.ts +7 -3
  571. package/src/render-contract.ts +54 -5
  572. package/src/render-graph-primitives.ts +7 -1
  573. package/src/render-pipeline.ts +130 -0
  574. package/src/render-system-extract-tail.ts +90 -78
  575. package/src/render-system-extract.ts +76 -76
  576. package/src/render-system-presentation.ts +56 -0
  577. package/src/render-system-producer-roots.ts +96 -0
  578. package/src/render-system-projections.ts +3 -2
  579. package/src/render-system-residency.ts +159 -0
  580. package/src/render-system.ts +421 -408
  581. package/src/scene/probe-blend.ts +96 -4
  582. package/src/scene/render-scene.ts +416 -337
  583. package/src/scene/render-source.ts +90 -0
  584. package/src/scene/source-systems.ts +33 -0
  585. package/src/ssao-buffers.ts +95 -2
  586. package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
  587. package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
  588. package/src/surface/dynamic-input.ts +658 -0
  589. package/src/surface/gpu-driven.ts +147 -0
  590. package/src/surface/submission-observation.ts +517 -0
  591. package/src/systems/skin-palette-allocator.ts +5 -1
  592. package/src/systems/skin-palette-types.ts +11 -0
  593. package/src/systems/transparent-dispatch.ts +2 -2
  594. package/src/systems/transparent-sort-config.ts +3 -1
  595. package/src/temporal/gpu.ts +101 -17
  596. package/src/temporal/inspection.ts +7 -1
  597. package/src/temporal/standard-scene-data.ts +5 -0
  598. package/src/temporal/target-coverage-attachment.ts +4 -0
  599. package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
  600. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
  601. package/src/transmission/single-layer-medium.ts +322 -0
  602. package/src/typed-render-graph-primitives.ts +70 -2
  603. package/src/volume/component.ts +10 -9
  604. package/src/volume/extract.ts +11 -5
  605. package/src/volume/inspection.ts +3 -0
  606. package/src/volume/passes.ts +87 -4
  607. package/src/volume/resources.ts +2 -1
  608. package/dist/chunk-3RTCJTH4.mjs +0 -1610
  609. package/dist/chunk-3RTCJTH4.mjs.map +0 -1
  610. package/dist/chunk-BLXGONR2.mjs.map +0 -1
  611. package/dist/chunk-ILQ5MEZF.mjs +0 -32
  612. package/dist/chunk-ILQ5MEZF.mjs.map +0 -1
  613. package/dist/chunk-LEAXOMYJ.mjs.map +0 -1
  614. package/dist/chunk-NB2S7ZRX.mjs +0 -1783
  615. package/dist/chunk-NB2S7ZRX.mjs.map +0 -1
  616. package/dist/chunk-NNQL7CB3.mjs +0 -1713
  617. package/dist/chunk-NNQL7CB3.mjs.map +0 -1
  618. package/dist/chunk-OO3DRYK7.mjs.map +0 -1
  619. package/dist/chunk-PA5DRJNI.mjs.map +0 -1
  620. package/dist/chunk-PLAXOOX5.mjs +0 -1907
  621. package/dist/chunk-PLAXOOX5.mjs.map +0 -1
  622. package/dist/chunk-RXZ3RGOU.mjs +0 -53
  623. package/dist/chunk-RXZ3RGOU.mjs.map +0 -1
  624. package/dist/chunk-VOZWDM3L.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,13 +1,21 @@
1
- export { DEFAULT_REFLECTION_PROBE_LIMITS, DynamicGeometryError, LOD_OCCLUSION_INSPECTION_MAX_BYTES, LOD_OCCLUSION_INSPECTION_SCHEMA, ReflectionProbeProjection, SSR_FORMAT_PROFILE, SSR_FORMAT_STAGES, admitPointsLines, admitReflectionProbe, admitSsrM0, admitSsrSpatial, advanceProbeFilter, boxProjectReflectionDirection, buildReflectionProbeTable, commitProbeFilterStep, consumeLodOcclusionInspection, createDynamicGeometryLifecycle, createProbeFilterState, estimateReflectionProbeBytes, inspectLodOcclusion, inspectPointShadow, inspectReflectionFallback, inspectVolumetricFog, probeFilterIsSteady, projectSsrDependencies, projectSsrSpatialInspection, reflectionProbeTableBytes, resolveSsrAdmissionGeneration, selectReflectionProbe, serializeLodOcclusionInspection, serializeSsrSpatialInspection, validateReflectionProbeInput, validateScreenSpaceReflection, zeroSsrAdmissionWork } from './chunk-NNQL7CB3.mjs';
2
- import { Atmosphere, Camera, DirectionalLight, DynamicResolution, DepthOfField, Instances, Layer, LightProbe, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, Points, Lines, PostProcessParams, RectAreaLight, SceneInstance, SkyboxBackground, Skylight, SortKey, SpotLight, Visibility } from './chunk-PLAXOOX5.mjs';
3
- export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, ANTIALIAS_TAA, Atmosphere, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_BLOOM_INTENSITY_MAX, CAMERA_BLOOM_INTENSITY_MIN, CAMERA_BLOOM_SCATTER_MAX, CAMERA_BLOOM_SCATTER_MIN, CAMERA_BLOOM_SOFT_KNEE_MAX, CAMERA_BLOOM_SOFT_KNEE_MIN, CAMERA_BLOOM_THRESHOLD_MAX, CAMERA_BLOOM_THRESHOLD_MIN, CAMERA_EXPOSURE_MODE_AUTO, CAMERA_EXPOSURE_MODE_MANUAL, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, CAMERA_TEMPERATURE_MAX, CAMERA_TEMPERATURE_MIN, CAMERA_TINT_MAX, CAMERA_TINT_MIN, CUBE_CAMERA_FACE_ORDER, CUBE_CAMERA_UPDATE_CONTINUOUS, CUBE_CAMERA_UPDATE_ONCE, CUBE_CAMERA_UPDATE_ON_DEMAND, Camera, CameraError, CubeCamera, DEFAULT_DEPTH_OF_FIELD_PARAMS, DEPTH_OF_FIELD_PARAMS_BYTE_SIZE, DepthOfField, DepthOfFieldQualityValue, DepthOfFieldSideValue, DepthOfFieldValidationError, DirectionalLight, DirectionalShadowFilterValue, DynamicResolution, Fog, Instances, Layer, LightProbe, Lines, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, PointShapeValue, Points, PostProcessParams, REFLECTION_PROBE_UPDATE_CONTINUOUS, REFLECTION_PROBE_UPDATE_ONCE, REFLECTION_PROBE_UPDATE_ON_CHANGE, RectAreaLight, ReflectionProbe, SKYBOX_MODE_CUBEMAP, SceneInstance, ScreenSpaceReflection, SkyboxBackground, Skylight, SortKey, SpotLight, SunCardinalityError, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, Visibility, VisibilityStateValue, VolumetricFog, buildCubeCameraFaceViews, cameraExposureFromColumns, cameraProjectionFromF32, computeInvRangeSquared, cubeCameraUpdateIntentFromF32, cubeCameraUpdateIntentToF32, degToCos, depthOfFieldQualityCode, depthOfFieldQualityFromF32, depthOfFieldRequestFailure, depthOfFieldSideCode, depthOfFieldSideFromF32, depthOfFieldTapCount, directionalShadowQualityFromF32, extractVolumetricFog, hasVolumetricFogCapability, orthographic, packDepthOfFieldParams, perspective, pointShapeFromU32, projectMeshMaterialBindingObservation, reflectionProbeUpdateIntentFromF32, reflectionProbeUpdateIntentToF32, resolveDepthOfFieldParams, resolveIntegratedVolumeConsumer, resolveSelectedVolumetricLight, resolveVisibility, resolveVolumetricFogLightPair, signedDepthOfFieldCoC, summarizeMeshMaterialBindings, validateCameraBloom, validateCameraColorGrading, validateCameraExposure, validateDepthOfFieldFrameParams, validateDepthOfFieldParams, validateDirection, validateDirectionalLightData, validateDynamicResolutionCamera, validateDynamicResolutionParameters, validateLightProbeData, validatePointLightData, validatePointLightShadowData, validateRectAreaLightData, validateSpotLightData, validateVolumetricFog, visibilityStateFromU32 } from './chunk-PLAXOOX5.mjs';
4
- import { SpriteAnimation, SpriteInstances, SpriteRegionOverride, TileLayer, Tilemap } from './chunk-PA5DRJNI.mjs';
5
- export { getActiveCamera, setActiveCamera } from './chunk-PA5DRJNI.mjs';
6
- export { DEFAULT_STANDARD_PROFILE, REFLECTION_PROBE_IBL_STAGES, SCENE_DATA_TEMPORAL_V1_DESCRIPTOR, SCENE_DATA_TEMPORAL_V1_SCHEMA, beginProbeIblUpdate, createIblKernelCache, createProbeIblOutput, createSceneDataCatalog, publishProbeIblOutput, resetIblKernelCaches } from './chunk-LEAXOMYJ.mjs';
7
- export { MaterialAuthoringContractError, MaterialTransmissionContractError, Materials, srgb } from './chunk-BLXGONR2.mjs';
8
- export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, DEFAULT_MOTION_BLUR_PARAMS, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, FogCardinalityError, GpuDrivenPreparationError, InstanceCollectionError, InstanceCollectionStore, MotionBlurValidationError, OwnerStageFailedError, RENDER_PHASE_CATALOG, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, SceneDataUnavailableError, ShadowAtlas, TaaCapsInsufficientError, createAutoExposureError, createAutoExposureInspection, effectiveMotionBlurSampleCount, isMotionBlurIntervalValid, motionBlurExposureScale, motionBlurSampleDelta, motionBlurTemporalDemand, resolveMotionBlurParams, validateMotionBlurParams } from './chunk-NB2S7ZRX.mjs';
1
+ import { registerRenderSourceSystems, createRenderSourceState, createGlobalTransformChangeQuery, isRenderableMember, renderMaterialContext, publicationDependencies, publicationFrameDependencies, publicationTargetSources, RenderPublicationError, RENDERABLE_SOURCE_COMPONENTS } from './chunk-MZ4C7EHF.mjs';
2
+ export { BARREL_DISTORTION_FEATURE_IDENTITY, BARREL_DISTORTION_POST_PROCESS_ID, BARREL_DISTORTION_WGSL, BARREL_DISTORTION_WGSL_COORDINATE, CLOUD_DENSITY_COMPUTE_WGSL, CLOUD_HISTORY_FULLSCREEN_WGSL, CLOUD_HISTORY_SURFACE_COUNT, CLOUD_LAYER_DENSITY_BINDINGS, CLOUD_LAYER_DENSITY_CACHE, CLOUD_LAYER_DENSITY_OUTPUT, CLOUD_LAYER_DENSITY_PROGRAM, CLOUD_LAYER_FEATURE_IDENTITY, CLOUD_RGBA16FLOAT_BYTES_PER_TEXEL, CLOUD_VIEW_FULLSCREEN_WGSL, CLOUD_VIEW_PARAMS_BYTES, CloudHistoryStore, DEFAULT_REFLECTION_PROBE_LIMITS, DynamicGeometryError, DynamicInputError, LOD_OCCLUSION_INSPECTION_MAX_BYTES, LOD_OCCLUSION_INSPECTION_SCHEMA, ReadonlyDynamicInputPage, ReflectionProbeProjection, RenderPublicationError, RenderPublicationTargetOwner, SSR_FORMAT_PROFILE, SSR_FORMAT_STAGES, acceptCloudLayerGeneration, admitPointsLines, admitReflectionProbe, admitSingleLayerMediumSubmission, admitSsrM0, admitSsrSpatial, advanceProbeFilter, applyCloudSolarTransmittance, boxProjectReflectionDirection, buildCloudDensityCache, buildReflectionProbeTable, cloudCapabilitiesFromRhi, cloudTemporalResetReasons, cloudTemporalSignature, commitProbeFilterStep, compositeCloudRadiance, consumeLodOcclusionInspection, createBarrelDistortionRenderFeature, createCloudHistory, createCloudLayerFeature, createCloudShadowProjection, createDynamicGeometryLifecycle, createProbeFilterState, estimateReflectionProbeBytes, evaluateCloudDensity, inspectCloudLayer, inspectCloudLayerResources, inspectLodOcclusion, inspectPointShadow, inspectReflectionFallback, inspectVolumetricFog, integrateCloudCameraPath, integrateCloudInterior, integrateCloudPath, integrateCloudSolarColumn, intersectCloudLayer, probeFilterIsSteady, projectCloudShadowUv, projectSsrDependencies, projectSsrSpatialInspection, reconstructCloudDensityCache, reflectionProbeTableBytes, renderPublicationTransfers, reprojectCloudHistory, resolveSsrAdmissionGeneration, retainCloudLayerAfterFailure, sampleCloudDensity, sampleCloudShadow, selectReflectionProbe, serializeLodOcclusionInspection, serializeSsrSpatialInspection, snapshotCloudDensityCache, validateReflectionProbeInput, validateScreenSpaceReflection, zeroSsrAdmissionWork } from './chunk-MZ4C7EHF.mjs';
3
+ import { Visibility, extractFrames, internSharedRefFromGuid, resolveMaterialSnapshot, Atmosphere, BarrelDistortion, Camera, CloudLayer, DirectionalLight, DynamicResolution, DepthOfField, Instances, Layer, LightProbe, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, Points, Lines, PostProcessParams, RectAreaLight, SceneInstance, SkyboxBackground, Skylight, SortKey, SpotLight } from './chunk-G6HDNGY7.mjs';
4
+ export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, ANTIALIAS_TAA, Atmosphere, BLOOM_DISABLED, BLOOM_ENABLED, BarrelDistortion, CAMERA_BLOOM_INTENSITY_MAX, CAMERA_BLOOM_INTENSITY_MIN, CAMERA_BLOOM_SCATTER_MAX, CAMERA_BLOOM_SCATTER_MIN, CAMERA_BLOOM_SOFT_KNEE_MAX, CAMERA_BLOOM_SOFT_KNEE_MIN, CAMERA_BLOOM_THRESHOLD_MAX, CAMERA_BLOOM_THRESHOLD_MIN, CAMERA_EXPOSURE_MODE_AUTO, CAMERA_EXPOSURE_MODE_MANUAL, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, CAMERA_TEMPERATURE_MAX, CAMERA_TEMPERATURE_MIN, CAMERA_TINT_MAX, CAMERA_TINT_MIN, CLOUD_QUALITY_PROFILES, CUBE_CAMERA_FACE_ORDER, CUBE_CAMERA_UPDATE_CONTINUOUS, CUBE_CAMERA_UPDATE_ONCE, CUBE_CAMERA_UPDATE_ON_DEMAND, Camera, CameraError, CloudLayer, CloudLayerCacheInvalidError, CloudLayerCapabilityMissingError, CloudLayerInvalidParameterError, CloudLayerOwnerConflictError, CloudLayerResourceFailureError, CloudQualityValue, CubeCamera, DEFAULT_CLOUD_LAYER, DEFAULT_DEPTH_OF_FIELD_PARAMS, DEPTH_OF_FIELD_PARAMS_BYTE_SIZE, DepthOfField, DepthOfFieldQualityValue, DepthOfFieldSideValue, DepthOfFieldValidationError, DirectionalLight, DirectionalShadowFilterValue, DynamicResolution, Fog, Instances, Layer, LightProbe, Lines, MAX_VOLUMETRIC_FOG_OWNERS, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, PointShapeValue, Points, PostProcessParams, REFLECTION_PROBE_UPDATE_CONTINUOUS, REFLECTION_PROBE_UPDATE_ONCE, REFLECTION_PROBE_UPDATE_ON_CHANGE, RectAreaLight, ReflectionProbe, SKYBOX_MODE_CUBEMAP, SceneInstance, ScreenSpaceReflection, SkyboxBackground, Skylight, SortKey, SpotLight, SunCardinalityError, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, Visibility, VisibilityStateValue, VolumetricFog, VolumetricFogSamplingValue, attachBarrelDistortionCameraFrame, buildCubeCameraFaceViews, cameraExposureFromColumns, cameraProjectionFromF32, cloudLayerSourceKey, cloudQualityFromF32, computeInvRangeSquared, createBarrelDistortionMapping, cubeCameraUpdateIntentFromF32, cubeCameraUpdateIntentToF32, degToCos, depthOfFieldQualityCode, depthOfFieldQualityFromF32, depthOfFieldRequestFailure, depthOfFieldSideCode, depthOfFieldSideFromF32, depthOfFieldTapCount, directionalShadowQualityFromF32, extractCloudLayer, extractVolumetricFog, freezeBarrelDistortionMapping, hasVolumetricFogCapability, mapDisplayToScene, mapDisplayUvToSceneUv, mapSceneToDisplay, mapSceneUvToDisplayUv, orthographic, packDepthOfFieldParams, perspective, pointShapeFromU32, projectMeshMaterialBindingObservation, reflectionProbeUpdateIntentFromF32, reflectionProbeUpdateIntentToF32, resolveDepthOfFieldParams, resolveIntegratedVolumeConsumer, resolveSelectedVolumetricLight, resolveVisibility, resolveVolumetricFogLightPair, selectCloudLayerFrame, signedDepthOfFieldCoC, summarizeMeshMaterialBindings, validateBarrelDistortionParameters, validateCameraBloom, validateCameraColorGrading, validateCameraExposure, validateCloudLayer, validateDepthOfFieldFrameParams, validateDepthOfFieldParams, validateDirection, validateDirectionalLightData, validateDynamicResolutionCamera, validateDynamicResolutionParameters, validateLightProbeData, validatePointLightData, validatePointLightShadowData, validateRectAreaLightData, validateSpotLightData, validateVolumetricFog, visibilityStateFromU32 } from './chunk-G6HDNGY7.mjs';
5
+ import { SpriteAnimation, SpriteInstances, SpriteRegionOverride, TileLayer, Tilemap } from './chunk-X2KA6WHM.mjs';
6
+ export { getActiveCamera, setActiveCamera } from './chunk-X2KA6WHM.mjs';
7
+ export { DEFAULT_STANDARD_PROFILE, REFLECTION_PROBE_IBL_STAGES, SCENE_DATA_TEMPORAL_V1_DESCRIPTOR, SCENE_DATA_TEMPORAL_V1_SCHEMA, beginProbeIblUpdate, createIblKernelCache, createProbeIblOutput, createSceneDataCatalog, publishProbeIblOutput, resetIblKernelCaches } from './chunk-SGPUJW3F.mjs';
8
+ import { getTransparentSortConfig } from './chunk-XSFB7XXQ.mjs';
9
+ export { MaterialAuthoringContractError, MaterialTransmissionContractError, Materials, srgb } from './chunk-XSFB7XXQ.mjs';
10
+ import { renderTargetMaterialSourceIdentity } from './chunk-MXTWKZO4.mjs';
11
+ export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, BarrelDistortionInvalidParameterError, DEFAULT_MOTION_BLUR_PARAMS, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, FogCardinalityError, GpuDrivenPreparationError, InstanceTransformsError, MotionBlurValidationError, OwnerStageFailedError, RENDER_PHASE_CATALOG, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, SceneDataUnavailableError, ShadowAtlas, TaaCapsInsufficientError, createAutoExposureError, createAutoExposureInspection, effectiveMotionBlurSampleCount, isMotionBlurIntervalValid, motionBlurExposureScale, motionBlurSampleDelta, motionBlurTemporalDemand, resolveMotionBlurParams, validateMotionBlurParams } from './chunk-MXTWKZO4.mjs';
9
12
  import { validateCookedMaterialRecord } from '@forgeax/engine-pack';
10
13
  import { ok, err, MATERIAL_TEXTURE_SLOTS } from '@forgeax/engine-types';
14
+ import { RuntimeMaterialValue, RuntimeMeshVertices, resolveAssetHandle } from '@forgeax/engine-assets-runtime';
15
+ import { Time } from '@forgeax/engine-ecs';
16
+ import { AssetGuid } from '@forgeax/engine-pack/guid';
17
+ import { ChildOf, Children, GlobalTransform } from '@forgeax/engine-scene';
18
+ import { VIDEO_SOURCE_PROVIDER_KEY, videoSourceExtent } from '@forgeax/engine-graphics-extras';
11
19
 
12
20
  function invalid(guid, expected, reason) {
13
21
  return err({
@@ -143,10 +151,64 @@ var renderPipelineContribution = {
143
151
  }
144
152
  };
145
153
 
154
+ // src/examples/single-layer-medium-surface.ts
155
+ var SINGLE_LAYER_MEDIUM_SURFACE_EXAMPLE = {
156
+ kind: "material",
157
+ surface: {
158
+ model: "single-layer-medium",
159
+ module: "game::water_surface_a",
160
+ dynamicInput: {
161
+ name: "waterEvents",
162
+ fields: [
163
+ { name: "position", type: "vec3<f32>" },
164
+ { name: "time", type: "f32" },
165
+ { name: "eventId", type: "u32" }
166
+ ],
167
+ maxRecords: 64,
168
+ maxDomains: 8,
169
+ maxPageBytes: 2048,
170
+ maxBindings: 1,
171
+ maxEventsPerSample: 8
172
+ }
173
+ },
174
+ passes: [
175
+ {
176
+ name: "color",
177
+ program: { module: "forgeax::single-layer-medium" }
178
+ }
179
+ ],
180
+ parameters: [],
181
+ values: {}
182
+ };
183
+ var SINGLE_LAYER_MEDIUM_SURFACE_EXAMPLES = [
184
+ {
185
+ module: "game::water_surface_a",
186
+ source: `#define_import_path game::water_surface_a
187
+ #import forgeax_material::single_layer_medium_surface_v1::{SingleLayerMediumSurfaceInput, SingleLayerMediumSurfaceData}
188
+ fn evaluate_surface(input : SingleLayerMediumSurfaceInput) -> SingleLayerMediumSurfaceData {
189
+ let event = read_waterEvents(input.eventRangeStart);
190
+ let normal = normalize(input.geometricNormalWS + vec3<f32>(0.0, 0.0, event.time * 0.02));
191
+ return SingleLayerMediumSurfaceData(normal, 0.18, 1.0, 0.0, vec3<f32>(0.18, 0.06, 0.02), vec3<f32>(0.02, 0.04, 0.08), 1.333, 0.2, 1000.0);
192
+ }`
193
+ },
194
+ {
195
+ module: "game::water_surface_b",
196
+ source: `#define_import_path game::water_surface_b
197
+ #import forgeax_material::single_layer_medium_surface_v1::{SingleLayerMediumSurfaceInput, SingleLayerMediumSurfaceData}
198
+ fn evaluate_surface(input : SingleLayerMediumSurfaceInput) -> SingleLayerMediumSurfaceData {
199
+ let event = read_waterEvents(input.eventRangeStart);
200
+ let normal = normalize(input.geometricNormalWS + vec3<f32>(event.position.xy * 0.01, 0.0));
201
+ return SingleLayerMediumSurfaceData(normal, 0.32, 1.0, clamp(event.time * 0.1, 0.0, 1.0), vec3<f32>(0.04, 0.02, 0.01), vec3<f32>(0.08, 0.05, 0.02), 1.333, -0.1, 800.0);
202
+ }`
203
+ }
204
+ ];
205
+
146
206
  // src/plugin.ts
147
207
  var RENDER_COMPONENTS = [
148
208
  Atmosphere,
209
+ BarrelDistortion,
149
210
  Camera,
211
+ CloudLayer,
150
212
  DirectionalLight,
151
213
  DynamicResolution,
152
214
  DepthOfField,
@@ -191,6 +253,519 @@ function renderComponentsPlugin() {
191
253
  }
192
254
  };
193
255
  }
256
+ function publicationVideoFrames(world, consumers) {
257
+ if (consumers.size === 0 || !world.hasResource(VIDEO_SOURCE_PROVIDER_KEY)) return [];
258
+ const provider = world.getResource(VIDEO_SOURCE_PROVIDER_KEY);
259
+ const frames = [];
260
+ try {
261
+ for (const [entity, clips] of consumers)
262
+ for (const clip of clips) {
263
+ const source = provider.getSource(
264
+ entity,
265
+ clip
266
+ );
267
+ if (source === void 0 || videoSourceExtent(source) === void 0) continue;
268
+ frames.push({ entity, clip, frame: new VideoFrame(source) });
269
+ }
270
+ return frames;
271
+ } catch (cause) {
272
+ for (const row of frames) row.frame.close();
273
+ throw cause;
274
+ }
275
+ }
276
+
277
+ // src/publication/publisher.ts
278
+ function createRenderPublisher(world, assets, identity, capabilities, features = [], targetOwner) {
279
+ const pendingMeshContent = /* @__PURE__ */ new Set();
280
+ const releaseTransforms = registerRenderSourceSystems(world, assets, {
281
+ updateMesh: (handle) => pendingMeshContent.add(handle)
282
+ });
283
+ const source = createRenderSourceState(world);
284
+ const transforms = createGlobalTransformChangeQuery(world);
285
+ const caches = /* @__PURE__ */ new WeakMap();
286
+ const members = /* @__PURE__ */ new Set();
287
+ const publishedPrograms = /* @__PURE__ */ new Set();
288
+ const dependencies = /* @__PURE__ */ new Map();
289
+ const consumers = /* @__PURE__ */ new Map();
290
+ const pending = /* @__PURE__ */ new Set();
291
+ let videoConsumers = /* @__PURE__ */ new Map();
292
+ let pendingFeatures = [];
293
+ let pendingFeatureOwners = [];
294
+ const acknowledgedFeatures = /* @__PURE__ */ new Set();
295
+ const jointsByEntity = /* @__PURE__ */ new Map();
296
+ const skinConsumers = /* @__PURE__ */ new Map();
297
+ let frameDependencies = /* @__PURE__ */ new Set();
298
+ let catalogEpoch = -1, revision = 0, disposed = false, active = false;
299
+ let lastScannedRows = 0, inFlight = false, allocations = 0;
300
+ let storage = [new ArrayBuffer(0), new ArrayBuffer(0), new ArrayBuffer(0), new ArrayBuffer(0)];
301
+ const buffer = (index, bytes) => {
302
+ let value = storage[index];
303
+ if (value.byteLength < bytes) {
304
+ let capacity = Math.max(16, value.byteLength);
305
+ while (capacity < bytes) capacity *= 2;
306
+ value = new ArrayBuffer(capacity);
307
+ storage[index] = value;
308
+ allocations++;
309
+ }
310
+ return value;
311
+ };
312
+ const fail = (reason, subject) => err(new RenderPublicationError({ reason, subject }));
313
+ return {
314
+ identity,
315
+ inspect: () => ({
316
+ revision,
317
+ members: members.size,
318
+ assetCount: consumers.size,
319
+ scannedRows: lastScannedRows,
320
+ inFlight,
321
+ allocations
322
+ }),
323
+ prepare(sampleTimeSeconds, temporalReset = false) {
324
+ if (disposed) return fail("disposed", "publisher");
325
+ if (active || inFlight) return fail("in-flight", "publication storage has not been returned");
326
+ const baseline = revision === 0;
327
+ const featureSources = [...features];
328
+ const batch = source.projection.read();
329
+ lastScannedRows = batch.scannedRows;
330
+ const changed = new Set(pending), removed = /* @__PURE__ */ new Set();
331
+ const invalidated = new Set(pendingMeshContent);
332
+ const runtimeChanged = batch.membershipChanged || batch.changedComponents.includes(RuntimeMaterialValue) || batch.changedComponents.includes(RuntimeMeshVertices);
333
+ for (const index of batch.indices) {
334
+ const previous = source.entities.get(index), current = source.projection.entity(index);
335
+ if (previous !== void 0 && members.has(previous) && (current !== previous || !isRenderableMember(world, previous)))
336
+ removed.add(previous);
337
+ if (runtimeChanged) {
338
+ for (const handle of source.contentHandles.get(index) ?? [])
339
+ invalidated.add(handle);
340
+ if (current !== void 0) {
341
+ if (world.hasComponent(current, RuntimeMaterialValue))
342
+ invalidated.add(world.get(current, RuntimeMaterialValue).unwrap().asset);
343
+ if (world.hasComponent(current, RuntimeMeshVertices))
344
+ invalidated.add(world.get(current, RuntimeMeshVertices).unwrap().asset);
345
+ }
346
+ }
347
+ if (previous !== void 0)
348
+ for (const consumer of skinConsumers.get(previous) ?? []) changed.add(consumer);
349
+ if (current === void 0) continue;
350
+ if (isRenderableMember(world, current) && (baseline || !members.has(current) || RENDERABLE_SOURCE_COMPONENTS.some(
351
+ (component) => source.projection.changed(current, component)
352
+ )))
353
+ changed.add(current);
354
+ if (batch.membershipChanged || source.projection.changed(current, ChildOf) || source.projection.changed(current, Visibility)) {
355
+ const queue = [current], visited = /* @__PURE__ */ new Set();
356
+ while (queue.length) {
357
+ const entity = queue.pop();
358
+ if (visited.has(entity)) continue;
359
+ visited.add(entity);
360
+ if (isRenderableMember(world, entity)) changed.add(entity);
361
+ if (world.hasComponent(entity, Children))
362
+ queue.push(
363
+ ...Array.from(
364
+ world.get(entity, Children).unwrap().entities,
365
+ (child) => child
366
+ )
367
+ );
368
+ }
369
+ }
370
+ }
371
+ if (baseline || catalogEpoch !== assets.catalogEpoch) {
372
+ for (const entity of members) changed.add(entity);
373
+ for (const entity of source.entities.values())
374
+ if (isRenderableMember(world, entity)) changed.add(entity);
375
+ }
376
+ for (const handle of invalidated)
377
+ for (const entity of consumers.get(handle) ?? []) changed.add(entity);
378
+ const matrixRows = /* @__PURE__ */ new Map();
379
+ for (const span of transforms.spans().unwrap()) {
380
+ const values = span.get(GlobalTransform).world;
381
+ for (let row = 0; row < span.entities.length; row++) {
382
+ const entity = span.entities[row];
383
+ for (const consumer of skinConsumers.get(entity) ?? []) changed.add(consumer);
384
+ if (members.has(entity) && !removed.has(entity)) {
385
+ matrixRows.set(entity, values.subarray(row * 16, row * 16 + 16));
386
+ pending.add(entity);
387
+ }
388
+ }
389
+ }
390
+ for (const entity of changed) pending.add(entity);
391
+ let videoFrames = [];
392
+ try {
393
+ const frame = extractFrames(
394
+ [world],
395
+ { cameraOwner: 0, resourceOwner: 0 },
396
+ assets,
397
+ void 0,
398
+ caches,
399
+ {
400
+ ...capabilities === void 0 ? {} : renderMaterialContext(capabilities),
401
+ cull: "none",
402
+ retainHidden: true,
403
+ renderables: changed.size ? { kind: "partial", entitiesByWorld: [changed] } : "none"
404
+ }
405
+ );
406
+ const templates = [], templateIds = /* @__PURE__ */ new Map();
407
+ const upserts = [];
408
+ const programs = /* @__PURE__ */ new Map();
409
+ const nextDependencies = /* @__PURE__ */ new Map();
410
+ const assetRows = /* @__PURE__ */ new Map();
411
+ const byRenderable = /* @__PURE__ */ new Map();
412
+ for (const { entityIndex: _entity, renderableIndex, ...dispatch } of frame.dispatch) {
413
+ const rows = byRenderable.get(renderableIndex) ?? [];
414
+ rows.push(dispatch);
415
+ byRenderable.set(renderableIndex, rows);
416
+ }
417
+ const publishPrograms = (materials) => {
418
+ for (const material of materials) {
419
+ const keys = /* @__PURE__ */ new Set([
420
+ ...Object.values(material.materialProgramKeys ?? {}),
421
+ ...Object.values(material.materialSceneIndexProgramKeys ?? {}).map(
422
+ (program) => program.specializationKey
423
+ ),
424
+ ...material.materialShaderId === void 0 || material.materialShaderId.startsWith("forgeax::") ? [] : [material.materialShaderId]
425
+ ]);
426
+ for (const key of keys) {
427
+ if (publishedPrograms.has(key) || programs.has(key)) continue;
428
+ const shader = assets.shaderRegistry.findMaterialArtifact(key);
429
+ if (!shader.ok) throw shader.error;
430
+ const artifact = assets.getMaterialArtifact(key);
431
+ programs.set(key, {
432
+ key,
433
+ shader: {
434
+ source: shader.value.source,
435
+ paramSchema: shader.value.paramSchema,
436
+ ...shader.value.receipt === void 0 ? {} : { receipt: shader.value.receipt }
437
+ },
438
+ ...artifact === void 0 ? {} : { artifact }
439
+ });
440
+ }
441
+ }
442
+ };
443
+ for (let i = 0; i < frame.renderables.length; i++) {
444
+ const row = frame.renderables[i];
445
+ if (row.skin) return fail("unsupported", "source GPU skin receipt");
446
+ const { worldId: _world, entityKey, transform, ...snapshot } = row;
447
+ const template = { snapshot, dispatch: byRenderable.get(i) ?? [] };
448
+ const key = JSON.stringify(
449
+ template,
450
+ (_key, value) => value instanceof Map ? _key === "textureSources" ? [...value].map(([name, source2]) => [
451
+ name,
452
+ renderTargetMaterialSourceIdentity(source2)
453
+ ]) : [...value] : ArrayBuffer.isView(value) ? Array.from(value) : value
454
+ );
455
+ let templateId = templateIds.get(key);
456
+ if (templateId === void 0) {
457
+ templateId = templates.length;
458
+ templateIds.set(key, templateId);
459
+ templates.push(template);
460
+ }
461
+ upserts.push(entityKey, templateId);
462
+ matrixRows.set(entityKey, transform.world);
463
+ publishPrograms(row.materials);
464
+ const handles = publicationDependencies(row);
465
+ for (const lod of row.lods ?? []) {
466
+ const handle = internSharedRefFromGuid(
467
+ world,
468
+ assets,
469
+ AssetGuid.format(lod.mesh),
470
+ "MeshAsset"
471
+ );
472
+ if (handle !== void 0) handles.push(handle);
473
+ }
474
+ nextDependencies.set(entityKey, handles);
475
+ for (const handle of handles) {
476
+ if (!baseline && (consumers.has(handle) || frameDependencies.has(handle)) && !invalidated.has(handle) && catalogEpoch === assets.catalogEpoch)
477
+ continue;
478
+ const value = resolveAssetHandle(world, handle);
479
+ if (!value.ok) throw value.error;
480
+ assetRows.set(handle, value.value);
481
+ }
482
+ }
483
+ const featureRows = featureSources.map((feature) => {
484
+ const data = feature.extract({
485
+ worlds: [world],
486
+ owner: 0,
487
+ frameNumber: revision + 1,
488
+ ...capabilities === void 0 ? {} : { caps: capabilities },
489
+ ...frame.cameras[0] === void 0 ? {} : { selectedCamera: frame.cameras[0] },
490
+ visibilitySnapshots: frame.featureVisibilitySnapshots,
491
+ ...frame.cloudLayer === void 0 ? {} : { frame: { cloudLayer: frame.cloudLayer } }
492
+ }).unwrap();
493
+ return { identity: feature.identity, data };
494
+ });
495
+ const nextFrameDependencies = new Set(publicationFrameDependencies(frame));
496
+ const pendingGuids = featureSources.flatMap((feature) => {
497
+ const row = featureRows.find((row2) => row2.identity === feature.identity);
498
+ return row === void 0 ? [] : [...feature.assetDependencies?.(row.data) ?? []];
499
+ });
500
+ const seenGuids = /* @__PURE__ */ new Set();
501
+ for (const guid of pendingGuids) {
502
+ const key = guid.toLowerCase();
503
+ if (seenGuids.has(key)) continue;
504
+ seenGuids.add(key);
505
+ const asset = assets.lookup(key);
506
+ const handle = internSharedRefFromGuid(world, assets, key, "RenderFeatureAsset");
507
+ if (asset === void 0 || handle === void 0)
508
+ throw new Error(`Missing feature asset ${guid}`);
509
+ nextFrameDependencies.add(handle);
510
+ for (const ref of assets.assetCatalog.get(key)?.refs ?? []) pendingGuids.push(ref.guid);
511
+ if (asset.kind === "material") {
512
+ const material = resolveMaterialSnapshot(
513
+ handle,
514
+ world,
515
+ assets,
516
+ void 0,
517
+ void 0,
518
+ capabilities === void 0 ? void 0 : renderMaterialContext(capabilities).materialContext
519
+ );
520
+ publishPrograms([material]);
521
+ for (const dependency of publicationDependencies({
522
+ assetHandle: handle,
523
+ materials: [material]
524
+ }))
525
+ nextFrameDependencies.add(dependency);
526
+ }
527
+ }
528
+ for (const handle of nextFrameDependencies) {
529
+ if (!baseline && (consumers.has(handle) || frameDependencies.has(handle)) && !invalidated.has(handle) && catalogEpoch === assets.catalogEpoch)
530
+ continue;
531
+ const value = resolveAssetHandle(world, handle);
532
+ if (!value.ok) throw value.error;
533
+ assetRows.set(handle, value.value);
534
+ }
535
+ const emitted = new Set(frame.renderables.map((row) => row.entityKey));
536
+ for (const entity of changed)
537
+ if (members.has(entity) && !emitted.has(entity)) removed.add(entity);
538
+ for (const entity of removed) matrixRows.delete(entity);
539
+ const nextVideoConsumers = new Map(videoConsumers);
540
+ for (const entity of removed) nextVideoConsumers.delete(entity);
541
+ for (const row of frame.renderables) {
542
+ const clips = [
543
+ ...new Set(
544
+ row.materials.flatMap((material) => [
545
+ ...material.videoTextureFields?.values() ?? []
546
+ ])
547
+ )
548
+ ];
549
+ if (clips.length > 0) nextVideoConsumers.set(row.entityKey, clips);
550
+ else nextVideoConsumers.delete(row.entityKey);
551
+ }
552
+ videoFrames = publicationVideoFrames(world, nextVideoConsumers);
553
+ const transformEntities = new Uint32Array(
554
+ buffer(2, matrixRows.size * 4),
555
+ 0,
556
+ matrixRows.size
557
+ ), matrices = new Float32Array(buffer(3, matrixRows.size * 64), 0, matrixRows.size * 16);
558
+ let index = 0;
559
+ for (const [entity, matrix] of matrixRows) {
560
+ transformEntities[index] = entity;
561
+ matrices.set(matrix, index * 16);
562
+ index++;
563
+ }
564
+ const {
565
+ renderables: _rows,
566
+ dispatch: _dispatch,
567
+ visibilitySnapshots: _visibility,
568
+ featureVisibilitySnapshots: _features,
569
+ hiddenEntityReports: _hidden,
570
+ shadowCasterEntityKeys: _casters,
571
+ shadowCasterDrawKeys: _draws,
572
+ shadowCasterMembership: _membership,
573
+ ...metadata
574
+ } = frame;
575
+ const retired = /* @__PURE__ */ new Set();
576
+ const removedConsumers = /* @__PURE__ */ new Set([...removed, ...nextDependencies.keys()]);
577
+ const nextHandles = new Set([...nextDependencies.values()].flat());
578
+ const removedCounts = /* @__PURE__ */ new Map();
579
+ for (const entity of removedConsumers)
580
+ for (const handle of dependencies.get(entity) ?? [])
581
+ removedCounts.set(handle, (removedCounts.get(handle) ?? 0) + 1);
582
+ for (const [handle, count] of removedCounts)
583
+ if (count === consumers.get(handle)?.size && !nextHandles.has(handle) && !nextFrameDependencies.has(handle))
584
+ retired.add(handle);
585
+ for (const handle of frameDependencies) {
586
+ if (!nextFrameDependencies.has(handle) && !nextHandles.has(handle) && (consumers.get(handle)?.size ?? 0) === (removedCounts.get(handle) ?? 0))
587
+ retired.add(handle);
588
+ }
589
+ const upsertColumn = new Uint32Array(buffer(0, upserts.length * 4), 0, upserts.length);
590
+ upsertColumn.set(upserts);
591
+ const removedColumn = new Uint32Array(buffer(1, removed.size * 4), 0, removed.size);
592
+ removedColumn.set([...removed]);
593
+ const packet = {
594
+ ...identity,
595
+ revision: revision + 1,
596
+ base: revision,
597
+ baseline,
598
+ time: { ...world.getResource(Time) },
599
+ sampleTimeSeconds,
600
+ temporalReset,
601
+ transparentSort: getTransparentSortConfig(world),
602
+ metadata,
603
+ templates,
604
+ videoFrames,
605
+ targets: targetOwner?.snapshot() ?? [],
606
+ targetSources: publicationTargetSources(templates),
607
+ features: featureRows,
608
+ programs: [...programs.values()],
609
+ upserts: upsertColumn,
610
+ removed: removedColumn,
611
+ transformEntities,
612
+ transforms: matrices,
613
+ assets: [...assetRows].map(([handle, value]) => {
614
+ const guid = assets.guidOf(value);
615
+ return { handle, value, ...guid === void 0 ? {} : { guid } };
616
+ }),
617
+ retiredAssets: [...retired],
618
+ invalidatedAssets: [...invalidated]
619
+ };
620
+ batch.validate();
621
+ active = true;
622
+ let closed = false;
623
+ return ok({
624
+ packet,
625
+ accept: () => {
626
+ if (closed)
627
+ throw new RenderPublicationError({ reason: "revision", subject: "closed candidate" });
628
+ batch.accept();
629
+ for (const handle of invalidated) pendingMeshContent.delete(handle);
630
+ for (const key of programs.keys()) publishedPrograms.add(key);
631
+ closed = true;
632
+ active = false;
633
+ inFlight = true;
634
+ revision++;
635
+ for (const row of videoFrames) row.frame.close();
636
+ videoConsumers = nextVideoConsumers;
637
+ pendingFeatures = featureRows;
638
+ pendingFeatureOwners = featureSources;
639
+ acknowledgedFeatures.clear();
640
+ frameDependencies = nextFrameDependencies;
641
+ catalogEpoch = assets.catalogEpoch;
642
+ for (const entity of removedConsumers) {
643
+ for (const handle of dependencies.get(entity) ?? []) {
644
+ consumers.get(handle)?.delete(entity);
645
+ if (consumers.get(handle)?.size === 0) consumers.delete(handle);
646
+ }
647
+ dependencies.delete(entity);
648
+ }
649
+ for (const entity of removedConsumers) {
650
+ for (const joint of jointsByEntity.get(entity) ?? []) {
651
+ const users = skinConsumers.get(joint);
652
+ users?.delete(entity);
653
+ if (users?.size === 0) skinConsumers.delete(joint);
654
+ }
655
+ jointsByEntity.delete(entity);
656
+ }
657
+ for (const row of frame.renderables) {
658
+ if (row.skinJointEntities === void 0) continue;
659
+ jointsByEntity.set(row.entityKey, row.skinJointEntities);
660
+ for (const joint of row.skinJointEntities) {
661
+ let users = skinConsumers.get(joint);
662
+ if (users === void 0) {
663
+ users = /* @__PURE__ */ new Set();
664
+ skinConsumers.set(joint, users);
665
+ }
666
+ users.add(row.entityKey);
667
+ }
668
+ }
669
+ for (const entity of removed) members.delete(entity);
670
+ for (const [entity, handles] of nextDependencies) {
671
+ members.add(entity);
672
+ dependencies.set(entity, handles);
673
+ for (const handle of handles) {
674
+ let users = consumers.get(handle);
675
+ if (!users) {
676
+ users = /* @__PURE__ */ new Set();
677
+ consumers.set(handle, users);
678
+ }
679
+ users.add(entity);
680
+ }
681
+ }
682
+ for (const entity of matrixRows.keys()) pending.delete(entity);
683
+ for (const entity of removed) pending.delete(entity);
684
+ for (const sourceIndex of batch.indices) {
685
+ const entity = source.projection.entity(sourceIndex);
686
+ if (entity === void 0) {
687
+ source.entities.delete(sourceIndex);
688
+ source.contentHandles.delete(sourceIndex);
689
+ } else {
690
+ source.entities.set(sourceIndex, entity);
691
+ const handles = [];
692
+ if (world.hasComponent(entity, RuntimeMaterialValue))
693
+ handles.push(world.get(entity, RuntimeMaterialValue).unwrap().asset);
694
+ if (world.hasComponent(entity, RuntimeMeshVertices))
695
+ handles.push(world.get(entity, RuntimeMeshVertices).unwrap().asset);
696
+ if (handles.length) source.contentHandles.set(sourceIndex, handles);
697
+ else source.contentHandles.delete(sourceIndex);
698
+ }
699
+ }
700
+ },
701
+ discard: () => {
702
+ if (!closed) {
703
+ closed = true;
704
+ active = false;
705
+ for (const row of videoFrames) row.frame.close();
706
+ }
707
+ }
708
+ });
709
+ } catch (cause) {
710
+ for (const row of videoFrames) row.frame.close();
711
+ return fail("unsupported", cause instanceof Error ? cause.message : String(cause));
712
+ }
713
+ },
714
+ acknowledgeFeatures(acceptedRevision, receipts) {
715
+ if (disposed) return fail("disposed", "publisher");
716
+ if (!inFlight || revision !== acceptedRevision)
717
+ return fail("revision", "feature acknowledgment");
718
+ const identities = /* @__PURE__ */ new Set();
719
+ for (const receipt of receipts) {
720
+ if (identities.has(receipt.identity) || acknowledgedFeatures.has(receipt.identity))
721
+ return fail("revision", "duplicate feature acknowledgment");
722
+ const row = pendingFeatures.find((row2) => row2.identity === receipt.identity);
723
+ const feature = pendingFeatureOwners.find(
724
+ (feature2) => feature2.identity === receipt.identity
725
+ );
726
+ if (row === void 0 || feature === void 0)
727
+ return fail("shape", "unknown feature acknowledgment");
728
+ identities.add(receipt.identity);
729
+ }
730
+ for (const receipt of receipts) {
731
+ acknowledgedFeatures.add(receipt.identity);
732
+ const row = pendingFeatures.find((row2) => row2.identity === receipt.identity);
733
+ const feature = pendingFeatureOwners.find(
734
+ (feature2) => feature2.identity === receipt.identity
735
+ );
736
+ feature?.onSourceFrameSubmitted?.(row?.data, receipt.feedback);
737
+ }
738
+ return ok(void 0);
739
+ },
740
+ recycle(acceptedRevision, buffers) {
741
+ if (disposed) return fail("disposed", "publisher");
742
+ if (!inFlight || acceptedRevision !== revision)
743
+ return fail("revision", "returned storage revision");
744
+ if (buffers.length !== 4 || buffers.some((value) => !(value instanceof ArrayBuffer)))
745
+ return fail("shape", "returned storage");
746
+ storage = [...buffers];
747
+ inFlight = false;
748
+ return ok(void 0);
749
+ },
750
+ dispose() {
751
+ if (disposed) return;
752
+ disposed = true;
753
+ releaseTransforms();
754
+ members.clear();
755
+ dependencies.clear();
756
+ consumers.clear();
757
+ pending.clear();
758
+ pendingMeshContent.clear();
759
+ videoConsumers.clear();
760
+ pendingFeatures = [];
761
+ pendingFeatureOwners = [];
762
+ acknowledgedFeatures.clear();
763
+ frameDependencies.clear();
764
+ jointsByEntity.clear();
765
+ skinConsumers.clear();
766
+ }
767
+ };
768
+ }
194
769
 
195
770
  // src/scene/visibility/gpu-frame-timing.ts
196
771
  var PROTOCOL = Object.freeze({
@@ -273,6 +848,202 @@ function composeSsrReflection(input) {
273
848
  );
274
849
  }
275
850
 
276
- export { composeSsrReflection, createGpuFrameTiming, materialContribution, recordGpuFrameTiming, renderComponentsPlugin, renderPipelineContribution, samplerContribution, summarizeGpuFrameTiming };
851
+ // src/transmission/oracle.ts
852
+ var clamp01 = (value) => Math.min(Math.max(value, 0), 1);
853
+ function fresnelReflectance(cosTheta, eta) {
854
+ if (!Number.isFinite(cosTheta) || !Number.isFinite(eta) || eta <= 0) return 1;
855
+ const cosIncident = clamp01(cosTheta);
856
+ const sinTransmittedSquared = eta * eta * (1 - cosIncident * cosIncident);
857
+ if (sinTransmittedSquared >= 1) return 1;
858
+ const cosTransmitted = Math.sqrt(Math.max(0, 1 - sinTransmittedSquared));
859
+ const perpendicularDenominator = cosIncident + eta * cosTransmitted;
860
+ const parallelDenominator = eta * cosIncident + cosTransmitted;
861
+ if (perpendicularDenominator === 0 || parallelDenominator === 0) return 1;
862
+ const perpendicular = (cosIncident - eta * cosTransmitted) / perpendicularDenominator;
863
+ const parallel = (eta * cosIncident - cosTransmitted) / parallelDenominator;
864
+ return clamp01((perpendicular * perpendicular + parallel * parallel) / 2);
865
+ }
866
+
867
+ // src/transmission/single-layer-medium.ts
868
+ var DEFAULT_MAX_DISTANCE_METERS = 1e3;
869
+ var DEFAULT_DEPTH_TOLERANCE_METERS = 1e-3;
870
+ var DEFAULT_IOR = 1.333;
871
+ var finiteOr = (value, fallback) => Number.isFinite(value) ? value : fallback;
872
+ function oneMinusExpNeg(value) {
873
+ const x = Math.max(finiteOr(value, 0), 0);
874
+ if (x < 1e-3) {
875
+ const x2 = x * x;
876
+ return x * (1 - x * 0.5 + x2 / 6 - x * x2 / 24);
877
+ }
878
+ return -Math.expm1(-x);
879
+ }
880
+ function singleScatterIntegral(sigmaS, sigmaT, distance) {
881
+ const scattering = Math.max(finiteOr(sigmaS, 0), 0);
882
+ const extinction = Math.max(finiteOr(sigmaT, 0), 0);
883
+ const path = Math.max(finiteOr(distance, 0), 0);
884
+ if (extinction === 0) return scattering * path;
885
+ return scattering * oneMinusExpNeg(extinction * path) / extinction;
886
+ }
887
+ var nonNegative = (value) => Math.max(finiteOr(value, 0), 0);
888
+ var clamp012 = (value) => Math.min(Math.max(finiteOr(value, 0), 0), 1);
889
+ function vector3(input) {
890
+ return [nonNegative(input?.[0] ?? 0), nonNegative(input?.[1] ?? 0), nonNegative(input?.[2] ?? 0)];
891
+ }
892
+ function finiteColor2(input) {
893
+ return input !== void 0 && input.length === 3 && input.every(Number.isFinite);
894
+ }
895
+ function finiteUv(input) {
896
+ return input.length === 2 && input.every(Number.isFinite);
897
+ }
898
+ function safeDistance(value, maxDistance) {
899
+ return Math.min(Math.max(finiteOr(value, 0), 0), maxDistance);
900
+ }
901
+ function integrateSingleLayerMedium(input) {
902
+ const absorption = vector3(input.coefficients.absorption);
903
+ const scattering = vector3(input.coefficients.scattering);
904
+ const sigmaT = [
905
+ absorption[0] + scattering[0],
906
+ absorption[1] + scattering[1],
907
+ absorption[2] + scattering[2]
908
+ ];
909
+ const maxDistanceMeters = Math.min(
910
+ Math.max(
911
+ finiteOr(input.maxDistanceMeters ?? DEFAULT_MAX_DISTANCE_METERS, DEFAULT_MAX_DISTANCE_METERS),
912
+ 0
913
+ ),
914
+ 1e5
915
+ );
916
+ const distanceMeters = safeDistance(input.distanceMeters, maxDistanceMeters);
917
+ const transmittance = [
918
+ Number.isFinite(sigmaT[0]) && sigmaT[0] > 0 ? Math.exp(-sigmaT[0] * distanceMeters) : 1,
919
+ Number.isFinite(sigmaT[1]) && sigmaT[1] > 0 ? Math.exp(-sigmaT[1] * distanceMeters) : 1,
920
+ Number.isFinite(sigmaT[2]) && sigmaT[2] > 0 ? Math.exp(-sigmaT[2] * distanceMeters) : 1
921
+ ];
922
+ const singleScatter = [
923
+ singleScatterIntegral(scattering[0], sigmaT[0], distanceMeters),
924
+ singleScatterIntegral(scattering[1], sigmaT[1], distanceMeters),
925
+ singleScatterIntegral(scattering[2], sigmaT[2], distanceMeters)
926
+ ];
927
+ const iorCandidate = finiteOr(input.coefficients.ior, DEFAULT_IOR);
928
+ const ior = iorCandidate >= 1 ? iorCandidate : DEFAULT_IOR;
929
+ const reflectance = fresnelReflectance(input.cosTheta, 1 / ior);
930
+ const transmissionWeight = 1 - reflectance;
931
+ const phaseG = Math.min(Math.max(finiteOr(input.coefficients.phaseG ?? 0, 0), -1), 1);
932
+ const phaseCosTheta = clamp012(input.phaseCosTheta ?? input.cosTheta);
933
+ const phaseDenominator = Math.max(1 + phaseG * phaseG - 2 * phaseG * phaseCosTheta, 1e-6);
934
+ const phase = (1 - phaseG * phaseG) / (4 * Math.PI * phaseDenominator ** 1.5);
935
+ return {
936
+ sigmaT,
937
+ transmittance,
938
+ singleScatter,
939
+ reflectance,
940
+ transmissionWeight,
941
+ phase: finiteOr(phase, 1 / (4 * Math.PI)),
942
+ distanceMeters
943
+ };
944
+ }
945
+ function composeSingleLayerMediumColor(input) {
946
+ const coverage = clamp012(input.coverage ?? 1);
947
+ const foam = clamp012(input.foam ?? 0) * coverage;
948
+ const foamColor = finiteColor2(input.foamColor) ? input.foamColor : [1, 1, 1];
949
+ const background = finiteColor2(input.background) ? input.background : [0, 0, 0];
950
+ const reflection = finiteColor2(input.reflection) ? input.reflection : [0, 0, 0];
951
+ const medium = [
952
+ background[0] * input.optics.transmittance[0] + input.optics.singleScatter[0],
953
+ background[1] * input.optics.transmittance[1] + input.optics.singleScatter[1],
954
+ background[2] * input.optics.transmittance[2] + input.optics.singleScatter[2]
955
+ ];
956
+ const waterWeight = input.optics.transmissionWeight * coverage * (1 - foam);
957
+ const reflectionWeight = input.optics.reflectance * coverage;
958
+ const foamWeight = foam;
959
+ return [
960
+ finiteOr(
961
+ reflection[0] * reflectionWeight + medium[0] * waterWeight + foamColor[0] * foamWeight,
962
+ 0
963
+ ),
964
+ finiteOr(
965
+ reflection[1] * reflectionWeight + medium[1] * waterWeight + foamColor[1] * foamWeight,
966
+ 0
967
+ ),
968
+ finiteOr(
969
+ reflection[2] * reflectionWeight + medium[2] * waterWeight + foamColor[2] * foamWeight,
970
+ 0
971
+ )
972
+ ];
973
+ }
974
+ function validCandidate(candidate, maxDistance) {
975
+ return candidate !== void 0 && finiteColor2(candidate.color) && finiteUv(candidate.uv) && Number.isFinite(candidate.depthMeters) && candidate.depthMeters >= 0 && candidate.depthMeters <= maxDistance;
976
+ }
977
+ function resolveSingleLayerMediumBackground(input) {
978
+ const maxDistance = Math.max(finiteOr(input.maxDistanceMeters, DEFAULT_MAX_DISTANCE_METERS), 0);
979
+ const tolerance = Math.max(
980
+ finiteOr(
981
+ input.depthToleranceMeters ?? DEFAULT_DEPTH_TOLERANCE_METERS,
982
+ DEFAULT_DEPTH_TOLERANCE_METERS
983
+ ),
984
+ 0
985
+ );
986
+ const surfaceDepth = finiteOr(input.surfaceDepthMeters, 0);
987
+ if (validCandidate(input.refracted, maxDistance) && input.refracted.uv.every((coordinate) => coordinate >= 0 && coordinate <= 1)) {
988
+ if (input.refracted.depthMeters + tolerance < surfaceDepth) {
989
+ return {
990
+ source: "unrefracted",
991
+ reason: "front",
992
+ candidate: validCandidate(input.original, maxDistance) ? input.original : void 0,
993
+ color: validCandidate(input.original, maxDistance) ? input.original.color : [0, 0, 0],
994
+ distanceMeters: validCandidate(input.original, maxDistance) ? Math.max(input.original.depthMeters - surfaceDepth, 0) : 0
995
+ };
996
+ }
997
+ return {
998
+ source: "refracted",
999
+ candidate: input.refracted,
1000
+ color: input.refracted.color,
1001
+ distanceMeters: Math.max(input.refracted.depthMeters - surfaceDepth, 0)
1002
+ };
1003
+ }
1004
+ if (validCandidate(input.original, maxDistance)) {
1005
+ const reason = input.refracted === void 0 ? "shore" : finiteUv(input.refracted.uv) && input.refracted.uv.some((coordinate) => coordinate < 0 || coordinate > 1) ? "edge" : "shore";
1006
+ return {
1007
+ source: "unrefracted",
1008
+ reason,
1009
+ candidate: input.original,
1010
+ color: input.original.color,
1011
+ distanceMeters: Math.max(input.original.depthMeters - surfaceDepth, 0)
1012
+ };
1013
+ }
1014
+ if (finiteColor2(input.environment)) {
1015
+ return {
1016
+ source: "environment",
1017
+ reason: "sky-miss",
1018
+ candidate: void 0,
1019
+ color: input.environment,
1020
+ distanceMeters: maxDistance
1021
+ };
1022
+ }
1023
+ return {
1024
+ source: "environment",
1025
+ reason: "sky-miss",
1026
+ candidate: void 0,
1027
+ color: [0, 0, 0],
1028
+ distanceMeters: maxDistance
1029
+ };
1030
+ }
1031
+ function estimateSingleLayerPathLength(input) {
1032
+ const maxDistance = Math.max(finiteOr(input.maxDistanceMeters, DEFAULT_MAX_DISTANCE_METERS), 0);
1033
+ if (input.surfacePosition.length !== 3 || input.backgroundPosition === void 0 || input.backgroundPosition.length !== 3 || !input.surfacePosition.every(Number.isFinite) || !input.backgroundPosition.every(Number.isFinite)) {
1034
+ return { distanceMeters: maxDistance, valid: false };
1035
+ }
1036
+ const distance = Math.hypot(
1037
+ (input.backgroundPosition[0] ?? 0) - (input.surfacePosition[0] ?? 0),
1038
+ (input.backgroundPosition[1] ?? 0) - (input.surfacePosition[1] ?? 0),
1039
+ (input.backgroundPosition[2] ?? 0) - (input.surfacePosition[2] ?? 0)
1040
+ );
1041
+ return {
1042
+ distanceMeters: Math.min(Math.max(finiteOr(distance, maxDistance), 0), maxDistance),
1043
+ valid: Number.isFinite(distance)
1044
+ };
1045
+ }
1046
+
1047
+ export { SINGLE_LAYER_MEDIUM_SURFACE_EXAMPLE, SINGLE_LAYER_MEDIUM_SURFACE_EXAMPLES, composeSingleLayerMediumColor, composeSsrReflection, createGpuFrameTiming, createRenderPublisher, estimateSingleLayerPathLength, integrateSingleLayerMedium, materialContribution, recordGpuFrameTiming, renderComponentsPlugin, renderPipelineContribution, resolveSingleLayerMediumBackground, samplerContribution, summarizeGpuFrameTiming };
277
1048
  //# sourceMappingURL=index.mjs.map
278
1049
  //# sourceMappingURL=index.mjs.map