@forgeax/engine-render 0.1.7 → 0.1.20

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 (777) hide show
  1. package/README.md +140 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/assembly/backend-contract.d.ts +12 -0
  4. package/dist/assembly/backend-contract.d.ts.map +1 -1
  5. package/dist/assembly/factory.d.ts +26 -5
  6. package/dist/assembly/factory.d.ts.map +1 -1
  7. package/dist/assembly/host-contract.d.ts +4 -0
  8. package/dist/assembly/host-contract.d.ts.map +1 -1
  9. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  10. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  11. package/dist/assembly/renderer-inspection.d.ts +22 -0
  12. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  13. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  15. package/dist/authoring.mjs +4 -2
  16. package/dist/authoring.mjs.map +1 -1
  17. package/dist/chunk-4XINDLAY.mjs +9404 -0
  18. package/dist/chunk-4XINDLAY.mjs.map +1 -0
  19. package/dist/chunk-CDTWTHZR.mjs +752 -0
  20. package/dist/chunk-CDTWTHZR.mjs.map +1 -0
  21. package/dist/chunk-FJ6P52EE.mjs +46 -0
  22. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  23. package/dist/chunk-JDWARUOI.mjs +44 -0
  24. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  25. package/dist/chunk-M2MP4ZOU.mjs +73 -0
  26. package/dist/chunk-M2MP4ZOU.mjs.map +1 -0
  27. package/dist/chunk-PCHBPYML.mjs +385 -0
  28. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  29. package/dist/chunk-RXZ3RGOU.mjs +53 -0
  30. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  31. package/dist/{chunk-YEJIUW7D.mjs → chunk-TBQJOK2L.mjs} +356 -543
  32. package/dist/chunk-TBQJOK2L.mjs.map +1 -0
  33. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  34. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  35. package/dist/components/atmosphere.d.ts +9 -0
  36. package/dist/components/atmosphere.d.ts.map +1 -0
  37. package/dist/components/camera.d.ts +2 -1
  38. package/dist/components/camera.d.ts.map +1 -1
  39. package/dist/components/fog.d.ts +8 -0
  40. package/dist/components/fog.d.ts.map +1 -0
  41. package/dist/components/index.d.ts +3 -0
  42. package/dist/components/index.d.ts.map +1 -1
  43. package/dist/components/light-helpers.d.ts.map +1 -1
  44. package/dist/components/motion-blur.d.ts +7 -0
  45. package/dist/components/motion-blur.d.ts.map +1 -0
  46. package/dist/components/spot-light.d.ts +12 -0
  47. package/dist/components/spot-light.d.ts.map +1 -1
  48. package/dist/construct-renderer.d.ts +2 -2
  49. package/dist/construct-renderer.d.ts.map +1 -1
  50. package/dist/construct-renderer.mjs +11146 -14507
  51. package/dist/construct-renderer.mjs.map +1 -1
  52. package/dist/device/device-scope.d.ts +4 -0
  53. package/dist/device/device-scope.d.ts.map +1 -1
  54. package/dist/device/gpu-residency.d.ts +19 -2
  55. package/dist/device/gpu-residency.d.ts.map +1 -1
  56. package/dist/environment/frame.d.ts +60 -0
  57. package/dist/environment/frame.d.ts.map +1 -0
  58. package/dist/environment/generation.d.ts +21 -0
  59. package/dist/environment/generation.d.ts.map +1 -0
  60. package/dist/environment/graph.d.ts +4 -0
  61. package/dist/environment/graph.d.ts.map +1 -0
  62. package/dist/environment/inspection.d.ts +48 -0
  63. package/dist/environment/inspection.d.ts.map +1 -0
  64. package/dist/environment/lifecycle.d.ts +39 -0
  65. package/dist/environment/lifecycle.d.ts.map +1 -0
  66. package/dist/environment/signature.d.ts +25 -0
  67. package/dist/environment/signature.d.ts.map +1 -0
  68. package/dist/errors/render.d.ts +204 -1
  69. package/dist/errors/render.d.ts.map +1 -1
  70. package/dist/extract/camera.d.ts +5 -0
  71. package/dist/extract/camera.d.ts.map +1 -0
  72. package/dist/extract/environment.d.ts +74 -0
  73. package/dist/extract/environment.d.ts.map +1 -0
  74. package/dist/extract/visibility.d.ts +1 -1
  75. package/dist/extract/visibility.d.ts.map +1 -1
  76. package/dist/features/host.d.ts +9 -2
  77. package/dist/features/host.d.ts.map +1 -1
  78. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  79. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  80. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  81. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  82. package/dist/features/plan.d.ts +17 -2
  83. package/dist/features/plan.d.ts.map +1 -1
  84. package/dist/features/prepared-gpu-work.d.ts +3 -1
  85. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  86. package/dist/features/prepared-graphics.d.ts +2 -1
  87. package/dist/features/prepared-graphics.d.ts.map +1 -1
  88. package/dist/features/render-graph-raster.d.ts +2 -1
  89. package/dist/features/render-graph-raster.d.ts.map +1 -1
  90. package/dist/features/targets.d.ts +3 -0
  91. package/dist/features/targets.d.ts.map +1 -1
  92. package/dist/features/types.d.ts +12 -0
  93. package/dist/features/types.d.ts.map +1 -1
  94. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  95. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  96. package/dist/gpu-scene.d.ts +2 -0
  97. package/dist/gpu-scene.d.ts.map +1 -1
  98. package/dist/gpu-usage.d.ts +2 -0
  99. package/dist/gpu-usage.d.ts.map +1 -1
  100. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  101. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  102. package/dist/index.d.ts +24 -7
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.mjs +6 -4
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/inspection-types.d.ts +43 -1
  107. package/dist/inspection-types.d.ts.map +1 -1
  108. package/dist/internal.d.ts +2 -0
  109. package/dist/internal.d.ts.map +1 -1
  110. package/dist/internal.mjs +2 -0
  111. package/dist/light-buffer-layout.d.ts +20 -12
  112. package/dist/light-buffer-layout.d.ts.map +1 -1
  113. package/dist/materials.d.ts +22 -0
  114. package/dist/materials.d.ts.map +1 -1
  115. package/dist/pbr-pipeline.d.ts +16 -9
  116. package/dist/pbr-pipeline.d.ts.map +1 -1
  117. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  118. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  119. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  120. package/dist/pipeline/standard-post.d.ts +48 -0
  121. package/dist/pipeline/standard-post.d.ts.map +1 -0
  122. package/dist/pipeline/standard-profile.d.ts +12 -2
  123. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  124. package/dist/pipeline-builder.d.ts +18 -0
  125. package/dist/pipeline-builder.d.ts.map +1 -1
  126. package/dist/pipeline-spec.d.ts.map +1 -1
  127. package/dist/plugin.d.ts.map +1 -1
  128. package/dist/record/frame-lighting.d.ts +2 -0
  129. package/dist/record/frame-lighting.d.ts.map +1 -1
  130. package/dist/record/frame-snapshot.d.ts +137 -6
  131. package/dist/record/frame-snapshot.d.ts.map +1 -1
  132. package/dist/record/frame-targets.d.ts.map +1 -1
  133. package/dist/record/frame.d.ts +6 -3
  134. package/dist/record/frame.d.ts.map +1 -1
  135. package/dist/record/gpu-timing.d.ts +32 -0
  136. package/dist/record/gpu-timing.d.ts.map +1 -0
  137. package/dist/record/main-pass-geometry.d.ts +11 -0
  138. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  139. package/dist/record/main-pass-material.d.ts +9 -6
  140. package/dist/record/main-pass-material.d.ts.map +1 -1
  141. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  142. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  143. package/dist/record/main-pass.d.ts +2 -0
  144. package/dist/record/main-pass.d.ts.map +1 -1
  145. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  146. package/dist/record/render-context.d.ts +81 -19
  147. package/dist/record/render-context.d.ts.map +1 -1
  148. package/dist/record/shadow-pass.d.ts.map +1 -1
  149. package/dist/record/skybox-post-pass.d.ts +1 -11
  150. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  151. package/dist/record/typed-frame-graph.d.ts +36 -4
  152. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  153. package/dist/record/view-ubo.d.ts +4 -1
  154. package/dist/record/view-ubo.d.ts.map +1 -1
  155. package/dist/render-contract.d.ts +157 -8
  156. package/dist/render-contract.d.ts.map +1 -1
  157. package/dist/render-data.d.ts +10 -6
  158. package/dist/render-data.d.ts.map +1 -1
  159. package/dist/render-graph-primitives.d.ts.map +1 -1
  160. package/dist/render-pipeline.d.ts +86 -6
  161. package/dist/render-pipeline.d.ts.map +1 -1
  162. package/dist/render-system-extract.d.ts +84 -8
  163. package/dist/render-system-extract.d.ts.map +1 -1
  164. package/dist/render-system.d.ts +30 -5
  165. package/dist/render-system.d.ts.map +1 -1
  166. package/dist/renderer-inspect.d.ts +29 -0
  167. package/dist/renderer-inspect.d.ts.map +1 -0
  168. package/dist/scene/render-scene.d.ts +36 -2
  169. package/dist/scene/render-scene.d.ts.map +1 -1
  170. package/dist/temporal/coverage.d.ts +42 -0
  171. package/dist/temporal/coverage.d.ts.map +1 -0
  172. package/dist/temporal/frame-coordinator.d.ts +99 -0
  173. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  174. package/dist/temporal/frame.d.ts +44 -0
  175. package/dist/temporal/frame.d.ts.map +1 -0
  176. package/dist/temporal/gpu.d.ts +39 -0
  177. package/dist/temporal/gpu.d.ts.map +1 -0
  178. package/dist/temporal/history.d.ts +37 -0
  179. package/dist/temporal/history.d.ts.map +1 -0
  180. package/dist/temporal/index.d.ts +7 -0
  181. package/dist/temporal/index.d.ts.map +1 -0
  182. package/dist/temporal/index.mjs +8 -0
  183. package/dist/temporal/index.mjs.map +1 -0
  184. package/dist/temporal/inspection.d.ts +36 -0
  185. package/dist/temporal/inspection.d.ts.map +1 -0
  186. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  187. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  188. package/dist/temporal/scene-data.d.ts +43 -0
  189. package/dist/temporal/scene-data.d.ts.map +1 -0
  190. package/dist/temporal/standard-scene-data.d.ts +61 -0
  191. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  192. package/dist/temporal/taa-history-resources.d.ts +22 -0
  193. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  194. package/dist/temporal/taa-history-store.d.ts +27 -0
  195. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  196. package/dist/temporal/taa-resolve.d.ts +15 -0
  197. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  198. package/dist/temporal/temporal-view.d.ts +40 -0
  199. package/dist/temporal/temporal-view.d.ts.map +1 -0
  200. package/dist/temporal/transaction.d.ts +9 -0
  201. package/dist/temporal/transaction.d.ts.map +1 -0
  202. package/dist/temporal/view.d.ts +56 -0
  203. package/dist/temporal/view.d.ts.map +1 -0
  204. package/dist/transmission/backdrop.d.ts +147 -0
  205. package/dist/transmission/backdrop.d.ts.map +1 -0
  206. package/dist/transmission/inspection.d.ts +57 -0
  207. package/dist/transmission/inspection.d.ts.map +1 -0
  208. package/dist/transmission/oracle.d.ts +42 -0
  209. package/dist/transmission/oracle.d.ts.map +1 -0
  210. package/dist/transmission/projection.d.ts +37 -0
  211. package/dist/transmission/projection.d.ts.map +1 -0
  212. package/dist/typed-render-graph-primitives.d.ts +30 -2
  213. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  214. package/dist/typed-shadow-atlas.d.ts +10 -0
  215. package/dist/typed-shadow-atlas.d.ts.map +1 -0
  216. package/dist/typed-shadow-passes.d.ts.map +1 -1
  217. package/dist/volume/capability.d.ts +57 -0
  218. package/dist/volume/capability.d.ts.map +1 -0
  219. package/dist/volume/component.d.ts +61 -0
  220. package/dist/volume/component.d.ts.map +1 -0
  221. package/dist/volume/extract.d.ts +11 -0
  222. package/dist/volume/extract.d.ts.map +1 -0
  223. package/dist/volume/inspection.d.ts +38 -0
  224. package/dist/volume/inspection.d.ts.map +1 -0
  225. package/dist/volume/passes.d.ts +38 -0
  226. package/dist/volume/passes.d.ts.map +1 -0
  227. package/dist/volume/recovery.d.ts +38 -0
  228. package/dist/volume/recovery.d.ts.map +1 -0
  229. package/dist/volume/resources.d.ts +57 -0
  230. package/dist/volume/resources.d.ts.map +1 -0
  231. package/dist/volume/temporal.d.ts +35 -0
  232. package/dist/volume/temporal.d.ts.map +1 -0
  233. package/package.json +24 -19
  234. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  235. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  236. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  237. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  238. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  239. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  240. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  241. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  242. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  243. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  244. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  245. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  246. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  247. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  248. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  249. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  250. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -14
  251. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  252. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
  253. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  254. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
  255. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  256. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  257. package/src/__tests__/public-surface.test-d.ts +15 -1
  258. package/src/__tests__/render-error-code-owner.test-d.ts +14 -0
  259. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  260. package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
  261. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  262. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  263. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  264. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  265. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  266. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  267. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +423 -1
  268. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  269. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  270. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  271. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  272. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  273. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  274. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  275. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  276. package/src/__tests__/skinned-shadow-caster.test.ts +123 -0
  277. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  278. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  279. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  280. package/src/__tests__/standard-profile-oracle.unit.test.ts +12 -2
  281. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  282. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  283. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  284. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  285. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  286. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  287. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  288. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  289. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  290. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  291. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  292. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  293. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  294. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  295. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  296. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  297. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  298. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  299. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  300. package/src/__tests__/volume-optics-oracle.unit.test.ts +85 -0
  301. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +655 -0
  302. package/src/__tests__/volumetric-fog-component.unit.test.ts +71 -0
  303. package/src/__tests__/volumetric-fog-composite-stage-readback.dawn.test.ts +376 -0
  304. package/src/__tests__/volumetric-fog-errors.unit.test.ts +51 -0
  305. package/src/__tests__/volumetric-fog-inspection.unit.test.ts +77 -0
  306. package/src/__tests__/volumetric-fog-light-capability.unit.test.ts +19 -0
  307. package/src/__tests__/volumetric-fog-light-consumers.integration.test.ts +18 -0
  308. package/src/__tests__/volumetric-fog-light-errors.unit.test.ts +17 -0
  309. package/src/__tests__/volumetric-fog-light-topology.unit.test.ts +21 -0
  310. package/src/__tests__/volumetric-fog-light-transaction.integration.test.ts +53 -0
  311. package/src/__tests__/volumetric-fog-m9-watcher.integration.test.ts +27 -0
  312. package/src/__tests__/volumetric-fog-point-light-owner.integration.test.ts +44 -0
  313. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +49 -0
  314. package/src/__tests__/volumetric-fog-point-spot-contract.unit.test.ts +28 -0
  315. package/src/__tests__/volumetric-fog-point-spot-lkg.integration.test.ts +65 -0
  316. package/src/__tests__/volumetric-fog-point-spot-selection.integration.test.ts +49 -0
  317. package/src/__tests__/volumetric-fog-point-spot-temporal.unit.test.ts +55 -0
  318. package/src/__tests__/volumetric-fog-projector-contract.unit.test.ts +22 -0
  319. package/src/__tests__/volumetric-fog-projector-inspection.unit.test.ts +12 -0
  320. package/src/__tests__/volumetric-fog-projector-surface-volume.integration.test.ts +11 -0
  321. package/src/__tests__/volumetric-fog-projector-transaction.integration.test.ts +26 -0
  322. package/src/__tests__/volumetric-fog-recovery.integration.test.ts +47 -0
  323. package/src/__tests__/volumetric-fog-selected-light-resolution.integration.test.ts +63 -0
  324. package/src/__tests__/volumetric-fog-spot-closure.integration.test.ts +26 -0
  325. package/src/__tests__/volumetric-fog-spot-contract.test-d.ts +21 -0
  326. package/src/__tests__/volumetric-fog-spot-contract.unit.test.ts +27 -0
  327. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +14 -0
  328. package/src/__tests__/volumetric-fog-spot-optics.integration.test.ts +29 -0
  329. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +550 -0
  330. package/src/__tests__/volumetric-fog-temporal-selected-light.unit.test.ts +33 -0
  331. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +45 -0
  332. package/src/__tests__/volumetric-fog-topology.unit.test.ts +237 -0
  333. package/src/__tests__/volumetric-fog-transparent.integration.test.ts +27 -0
  334. package/src/assembly/backend-contract.ts +47 -1
  335. package/src/assembly/factory.ts +1480 -505
  336. package/src/assembly/host-contract.ts +4 -0
  337. package/src/assembly/renderer-frame-transaction.ts +75 -0
  338. package/src/assembly/renderer-inspection.ts +112 -0
  339. package/src/assembly/renderer-lifecycle.ts +6 -0
  340. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  341. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  342. package/src/components/atmosphere.ts +10 -0
  343. package/src/components/camera.ts +2 -1
  344. package/src/components/fog.ts +9 -0
  345. package/src/components/index.ts +3 -0
  346. package/src/components/light-helpers.ts +4 -0
  347. package/src/components/motion-blur.ts +8 -0
  348. package/src/components/spot-light.ts +22 -3
  349. package/src/construct-renderer.ts +40 -3
  350. package/src/device/device-scope.ts +15 -1
  351. package/src/device/gpu-residency.ts +168 -58
  352. package/src/environment/frame.ts +185 -0
  353. package/src/environment/generation.ts +23 -0
  354. package/src/environment/graph.ts +9 -0
  355. package/src/environment/inspection.ts +87 -0
  356. package/src/environment/lifecycle.ts +250 -0
  357. package/src/environment/signature.ts +55 -0
  358. package/src/errors/render.ts +404 -1
  359. package/src/extract/camera.ts +78 -0
  360. package/src/extract/environment.ts +171 -0
  361. package/src/extract/visibility.ts +38 -19
  362. package/src/features/host.ts +36 -5
  363. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  364. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  365. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  366. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  367. package/src/features/plan.ts +32 -3
  368. package/src/features/prepared-gpu-work.ts +21 -6
  369. package/src/features/prepared-graphics.ts +2 -1
  370. package/src/features/render-graph-raster.ts +2 -1
  371. package/src/features/targets.ts +24 -2
  372. package/src/features/types.ts +13 -0
  373. package/src/fullscreen-post-process-pass.ts +34 -4
  374. package/src/gpu-scene.ts +24 -0
  375. package/src/gpu-usage.ts +2 -0
  376. package/src/ibl/skylight-bind-group.ts +30 -38
  377. package/src/index.ts +104 -7
  378. package/src/inspection-types.ts +48 -0
  379. package/src/internal.ts +5 -0
  380. package/src/light-buffer-layout.ts +59 -26
  381. package/src/materials.ts +119 -24
  382. package/src/pbr-pipeline.ts +91 -29
  383. package/src/pipeline/standard-forward-lane.ts +178 -101
  384. package/src/pipeline/standard-pipeline.ts +176 -105
  385. package/src/pipeline/standard-post.ts +373 -0
  386. package/src/pipeline/standard-profile.ts +26 -3
  387. package/src/pipeline-builder.ts +102 -12
  388. package/src/pipeline-spec.ts +9 -0
  389. package/src/plugin.ts +2 -0
  390. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  391. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  392. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  393. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  394. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  395. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  396. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  397. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  398. package/src/record/frame-lighting.ts +103 -89
  399. package/src/record/frame-snapshot.ts +170 -6
  400. package/src/record/frame-targets.ts +21 -8
  401. package/src/record/frame.ts +1014 -7
  402. package/src/record/gpu-timing.ts +224 -0
  403. package/src/record/main-pass-geometry.ts +86 -40
  404. package/src/record/main-pass-material.ts +120 -68
  405. package/src/record/main-pass-sprite-draws.ts +78 -101
  406. package/src/record/main-pass.ts +77 -4
  407. package/src/record/mesh-ssbo.ts +22 -3
  408. package/src/record/render-context.ts +194 -23
  409. package/src/record/shadow-pass.ts +197 -58
  410. package/src/record/skybox-post-pass.ts +97 -41
  411. package/src/record/typed-frame-graph.ts +704 -30
  412. package/src/record/view-ubo.ts +52 -4
  413. package/src/render-contract.ts +181 -6
  414. package/src/render-data.ts +50 -22
  415. package/src/render-graph-primitives.ts +18 -1
  416. package/src/render-pipeline.ts +144 -27
  417. package/src/render-system-extract.ts +522 -72
  418. package/src/render-system.ts +561 -41
  419. package/src/renderer-inspect.ts +66 -0
  420. package/src/scene/render-scene.ts +252 -7
  421. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  422. package/src/temporal/coverage.ts +76 -0
  423. package/src/temporal/frame-coordinator.ts +311 -0
  424. package/src/temporal/frame.ts +128 -0
  425. package/src/temporal/gpu.ts +287 -0
  426. package/src/temporal/history.ts +92 -0
  427. package/src/temporal/index.ts +6 -0
  428. package/src/temporal/inspection.ts +97 -0
  429. package/src/temporal/scene-data-catalog.ts +200 -0
  430. package/src/temporal/scene-data.ts +149 -0
  431. package/src/temporal/standard-scene-data.ts +182 -0
  432. package/src/temporal/taa-history-resources.ts +128 -0
  433. package/src/temporal/taa-history-store.ts +79 -0
  434. package/src/temporal/taa-resolve.ts +34 -0
  435. package/src/temporal/temporal-view.ts +169 -0
  436. package/src/temporal/transaction.ts +17 -0
  437. package/src/temporal/view.ts +161 -0
  438. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  439. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  440. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  441. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  442. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  443. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  444. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +437 -0
  445. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  446. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  447. package/src/transmission/backdrop.ts +572 -0
  448. package/src/transmission/inspection.ts +190 -0
  449. package/src/transmission/oracle.ts +141 -0
  450. package/src/transmission/projection.ts +83 -0
  451. package/src/typed-render-graph-primitives.ts +194 -11
  452. package/src/typed-shadow-atlas.ts +17 -0
  453. package/src/typed-shadow-passes.ts +6 -5
  454. package/src/volume/capability.ts +173 -0
  455. package/src/volume/component.ts +110 -0
  456. package/src/volume/extract.ts +21 -0
  457. package/src/volume/inspection.ts +78 -0
  458. package/src/volume/passes.ts +680 -0
  459. package/src/volume/recovery.ts +86 -0
  460. package/src/volume/resources.ts +236 -0
  461. package/src/volume/temporal.ts +89 -0
  462. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  463. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  464. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  465. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  466. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  467. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  468. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  469. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  470. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  471. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  472. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  473. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  474. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  475. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  476. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  477. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  479. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  480. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  481. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  482. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  483. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  484. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  485. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  486. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  487. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  488. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  489. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  490. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  491. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  492. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  493. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  494. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  495. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  496. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  497. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  498. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  499. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  501. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  503. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  504. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  505. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  506. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  507. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  508. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  509. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  510. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  511. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  512. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  513. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  515. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  517. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  518. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  519. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  520. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  521. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  522. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  523. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  524. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  525. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  526. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  527. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  529. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  531. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  532. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  533. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  534. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  535. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  536. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  537. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  538. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  539. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  540. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  541. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  542. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  543. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  544. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  545. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  547. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  549. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  551. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  552. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  553. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  555. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  556. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  557. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  558. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  559. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  561. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  563. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  564. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  565. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  566. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  567. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  568. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  569. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  570. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  571. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  572. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  573. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  574. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  575. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  576. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  577. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  578. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  579. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  580. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  581. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  582. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  583. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  584. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  585. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  586. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  587. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  588. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  589. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  590. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  591. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  592. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  593. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  594. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  595. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  596. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  597. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  598. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  599. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  600. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  601. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  602. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  603. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  604. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  605. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  606. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  607. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  608. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  609. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  610. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  611. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  612. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  613. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  614. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  615. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  616. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  617. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  618. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  619. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  620. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  621. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  622. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  623. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  624. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  625. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  626. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  627. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  628. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  629. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  630. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  631. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  632. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  633. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  634. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  635. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  636. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  637. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  638. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  639. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  640. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  641. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  642. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  643. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  644. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  645. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  646. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  647. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  648. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  649. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  650. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  651. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  652. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  653. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  654. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  655. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  656. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  657. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  658. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  659. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  660. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  661. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  662. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  663. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  664. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  665. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  666. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  667. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  668. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  669. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  670. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  671. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  672. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  673. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  674. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  675. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  676. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  677. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  678. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  679. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  680. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  681. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  682. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  683. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  684. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  685. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  686. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  687. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  688. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  689. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  690. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  691. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  692. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  693. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  694. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  695. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  696. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  697. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  698. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  699. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  700. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  701. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  702. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  703. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  704. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  705. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  706. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  707. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  708. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  709. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  710. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  711. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  712. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  713. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  714. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  715. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  716. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  717. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  718. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  719. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  720. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  721. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  722. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  723. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  724. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  725. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  726. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  727. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  728. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  729. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  730. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  731. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  732. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  733. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  734. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  735. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  736. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  737. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  738. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  739. package/dist/chunk-HCOGPHKS.mjs +0 -93
  740. package/dist/chunk-HCOGPHKS.mjs.map +0 -1
  741. package/dist/chunk-YEJIUW7D.mjs.map +0 -1
  742. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
  743. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
  744. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
  745. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
  746. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  747. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  748. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  749. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  750. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  751. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  752. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
  753. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
  754. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
  755. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
  756. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
  757. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
  758. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
  759. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
  760. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
  761. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
  762. package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
  763. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
  764. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
  765. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
  766. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
  767. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
  768. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
  769. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
  770. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  771. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  772. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  773. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  774. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  775. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  776. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  777. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -65,7 +65,7 @@ export interface PbrPipelineLayoutBundle {
65
65
  readonly viewBgl: BindGroupLayout;
66
66
  /**
67
67
  * PBR material BindGroupLayout (slot 1) -- derived user-region entries plus
68
- * Skylight and lightmap injection.
68
+ * Skylight and transmission injection.
69
69
  */
70
70
  readonly materialBgl: BindGroupLayout;
71
71
  /** Per-entity mesh BindGroupLayout (slot 2). */
@@ -89,7 +89,7 @@ export interface PbrPipelineLayoutBundle {
89
89
  /**
90
90
  * The built-in standard-PBR material paramSchema's texture/user-region shape,
91
91
  * used as the fallback when the material BGL is built without a registry
92
- * (the caps-driven `buildPbrPipelineLayouts` seam). Declares the 3 standard
92
+ * (the caps-driven `buildPbrPipelineLayouts` seam). Declares the 8 Standard
93
93
  * user-region textures + a numeric UBO run; `derive()` collapses the numerics
94
94
  * into binding 0 and emits sampler/texture pairs at 1..6 — byte-equivalent to
95
95
  * the legacy fixed base-7. The shared PBR parameter contract comes from the
@@ -99,13 +99,13 @@ export interface PbrPipelineLayoutBundle {
99
99
  * Build the PBR material BGL **user-region** from a paramSchema via the
100
100
  * `derive()` SSOT (D-1). The user-region is binding 0 (the run-merged material
101
101
  * UBO) followed by one sampler/texture pair per declared texture. Engine
102
- * injection (IBL + lightmap) is appended AFTER this region by the caller via
102
+ * injection (IBL + transmission) is appended AFTER this region by the caller via
103
103
  * `appendInjection`, with start binding = `userRegion.length` — so a 4-texture
104
104
  * custom schema (e.g. parallax + heightTexture) shifts the injection region by
105
105
  * one sampler/texture pair automatically.
106
106
  *
107
- * The built-in `default-standard-pbr` paramSchema declares exactly 4 textures,
108
- * so this derives to binding 0 UBO + 4 pairs = 9 entries. Injection is appended
107
+ * The built-in `default-standard-pbr` paramSchema declares exactly 8 textures,
108
+ * so this derives to binding 0 UBO + 8 pairs = 17 entries. Injection is appended
109
109
  * after that derived region.
110
110
  *
111
111
  * One material-UBO convention is layered on top of the pure `derive()` output:
@@ -140,7 +140,7 @@ export function buildPbrMaterialUserRegionEntries(
140
140
  // material-UBO contract. derive() emits binding 0 as the first numeric run's
141
141
  // merged UBO; an empty schema has no binding-0 UBO and needs no patch.
142
142
  const ubo = entries[0];
143
- if (ubo !== undefined && ubo.binding === 0 && ubo.buffer !== undefined) {
143
+ if (ubo !== undefined && ubo.binding === 0 && ubo.buffer?.type === 'uniform') {
144
144
  entries[0] = {
145
145
  binding: 0,
146
146
  visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
@@ -178,11 +178,16 @@ export function buildPbrMaterialUserRegionEntries(
178
178
  // keep that meaning under the generic 'lightmap' label
179
179
  // (per-surface secondary-lighting injection) so future
180
180
  // lightmap support lands without renaming the kind.
181
+ // - 'transmission' the engine-owned sampler + backdrop texture pair. The
182
+ // record stage supplies a real backdrop only for the active
183
+ // transmission pass; all other variants bind layout-safe
184
+ // placeholders because their shaders do not read these slots.
181
185
  export type InjectionKind = keyof typeof INJECTION_KIND_LENGTHS;
182
186
 
183
187
  const IBL_INJECTION_LENGTH = 7;
184
188
  const LIGHTMAP_INJECTION_LENGTH = 4;
185
189
  const SHADOW_INJECTION_LENGTH = 2;
190
+ const TRANSMISSION_INJECTION_LENGTH = 2;
186
191
 
187
192
  /**
188
193
  * Append the engine-injection BGL entries for the given `kind` after the
@@ -289,6 +294,19 @@ export function appendInjection(
289
294
  texture: { sampleType: 'depth', viewDimension: '2d' },
290
295
  },
291
296
  ];
297
+ case 'transmission':
298
+ return [
299
+ {
300
+ binding: start,
301
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
302
+ sampler: { type: 'filtering' },
303
+ },
304
+ {
305
+ binding: start + 1,
306
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
307
+ texture: { sampleType: 'float', viewDimension: '2d' },
308
+ },
309
+ ];
292
310
  }
293
311
  }
294
312
 
@@ -297,6 +315,7 @@ export const INJECTION_KIND_LENGTHS = {
297
315
  shadow: SHADOW_INJECTION_LENGTH,
298
316
  ibl: IBL_INJECTION_LENGTH,
299
317
  lightmap: LIGHTMAP_INJECTION_LENGTH,
318
+ transmission: TRANSMISSION_INJECTION_LENGTH,
300
319
  };
301
320
 
302
321
  /**
@@ -306,6 +325,8 @@ export const INJECTION_KIND_LENGTHS = {
306
325
  */
307
326
  export interface PbrCaps {
308
327
  readonly storageBuffer: boolean;
328
+ /** Whether the device can carry the optional SpotLight projector texture. */
329
+ readonly projectorAvailable?: boolean;
309
330
  }
310
331
 
311
332
  /**
@@ -357,7 +378,7 @@ export interface PbrCaps {
357
378
  */
358
379
  export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[] {
359
380
  const lightBufType: GPUBufferBindingType = caps.storageBuffer ? 'read-only-storage' : 'uniform';
360
- return [
381
+ const entries: GPUBindGroupLayoutEntry[] = [
361
382
  {
362
383
  binding: 0,
363
384
  visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
@@ -450,12 +471,32 @@ export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[]
450
471
  visibility: GPU_SHADER_STAGE_FRAGMENT,
451
472
  texture: { sampleType: 'depth', viewDimension: '2d' },
452
473
  },
453
- {
454
- binding: 10,
455
- visibility: GPU_SHADER_STAGE_VERTEX,
456
- buffer: { type: 'uniform', hasDynamicOffset: true },
457
- },
458
474
  ];
475
+ // The projector is optional, but when present it is a sampled texture in
476
+ // the fragment stage. Keep it out of the low-limit view layout so the
477
+ // remaining HDRP PBR ABI stays within WebGPU's minimum 16 sampled textures.
478
+ // The corresponding PROJECTOR_AVAILABLE shader variant is selected from
479
+ // the same device capability bit and returns a white modulation.
480
+ if (caps.projectorAvailable !== false) {
481
+ entries.push(
482
+ {
483
+ binding: 11,
484
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
485
+ texture: { sampleType: 'float', viewDimension: '2d' },
486
+ },
487
+ {
488
+ binding: 12,
489
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
490
+ sampler: { type: 'filtering' },
491
+ },
492
+ );
493
+ }
494
+ entries.push({
495
+ binding: 10,
496
+ visibility: GPU_SHADER_STAGE_VERTEX,
497
+ buffer: { type: 'uniform', hasDynamicOffset: true },
498
+ });
499
+ return entries;
459
500
  }
460
501
 
461
502
  // ─── PBR pipeline layout factory ────────────────────────────────────────────
@@ -479,17 +520,16 @@ export function buildPbrPipelineLayouts(
479
520
  // D-13 round-2: 4 BGLs route through buildBindGroupLayoutDescriptor.
480
521
  // The dispatcher reads kind + caps; spec content is unused without a
481
522
  // registry (no shader-axis reflection at this seam — the 4 BGLs are
482
- // caps-driven literals + the deterministic Skylight + lightmap merge
523
+ // caps-driven literals + the deterministic Skylight + transmission merge
483
524
  // sequence that has no dependency on shader.id).
484
525
  const viewBglRes = device.createBindGroupLayout(
485
526
  buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-view', caps }),
486
527
  );
487
528
  if (!viewBglRes.ok) throw viewBglRes.error;
488
529
 
489
- // Material BGL: derived user region + Skylight + lightmap injection.
490
- // feat-20260613 fix-issue-5: drop the buildPbrMaterialEmissiveAoEntries
491
- // shim. The lightmap injection start binding is computed from the post-
492
- // skylight BGL length (= 14) directly inside appendInjection.
530
+ // Material BGL: derived user region + Skylight + transmission injection.
531
+ // The transmission start binding is computed from the post-Skylight BGL
532
+ // length (= 24 for the built-in Standard schema) by appendInjection.
493
533
  const materialBglRes = device.createBindGroupLayout(
494
534
  buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-material-merged' }),
495
535
  );
@@ -542,6 +582,23 @@ export function buildPbrPipelineLayouts(
542
582
  * `LayoutKind = 'pbr-skin'` upstream.
543
583
  */
544
584
  export const SKIN_MATERIAL_SHADER_ID = 'forgeax::pbr-skin' as const;
585
+ export const SHADOW_CASTER_SHADER_ID = 'forgeax::default-shadow-caster' as const;
586
+
587
+ export function shadowCasterVariantSet(storageBuffer: boolean, skinned: boolean): string {
588
+ const skinningDisabled = !skinned;
589
+ if (storageBuffer && skinningDisabled) return '';
590
+ return `SKINNING_DISABLED=${String(skinningDisabled)}+STORAGE_BUFFER_AVAILABLE=${String(storageBuffer)}`;
591
+ }
592
+
593
+ export function isSkinnedShadowCasterVariant(
594
+ materialShaderId: string | undefined,
595
+ variantSet: string | undefined,
596
+ ): boolean {
597
+ return (
598
+ materialShaderId === SHADOW_CASTER_SHADER_ID &&
599
+ variantSet?.includes('SKINNING_DISABLED=false') === true
600
+ );
601
+ }
545
602
 
546
603
  /** Returns true for the engine-shipped standard-PBR material shader family. */
547
604
  export function isStandardPbrMaterialShader(shaderId: string | undefined): boolean {
@@ -745,13 +802,14 @@ export const SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET = '';
745
802
  *
746
803
  * Three groups by derivation source:
747
804
  * 1. Shader-derived (paramSchema reflection + injection chain):
748
- * - `'pbr-material-merged'` — derived user region + Skylight 7 + lightmap 4
805
+ * - `'pbr-material-merged'` — derived user region + Skylight 7 + transmission 2
749
806
  * - `'unlit-material'` — 7 entries: base PBR material only (no inject)
750
807
  * - `'hdrp-7-slot'` — 7 entries (binding 0 + 3..8): HDRP cluster + SSAO group(2) BGL
751
808
  * 2. Caps-driven literal shapes (no shader):
752
- * - `'pbr-view'` — 10 entries: view UBO + lights + 6 shadow bindings
753
- * (directional 3/4, point 5/6, cascade 7, spot atlas 8, spot
754
- * lightViewProj matrices 9 feat-20260625)
809
+ * - `'pbr-view'` — 12 entries: view UBO + lights + shadow bindings,
810
+ * projector texture/sampler (11/12), and the Points/Lines UBO (10)
811
+ * (directional 3/4, point 5/6, cascade 7, spot atlas 8; the former
812
+ * spot lightViewProj matrices moved into the View UBO)
755
813
  * - `'pbr-mesh-array'` — 1 entry: per-entity mesh SSBO (dynamic-offset)
756
814
  * - `'pbr-instances'` — 1 entry: per-instance SSBO (no dynamic-offset)
757
815
  * - `'pbr-skin-mesh-array'` — 2 entries: meshes + skin palette
@@ -852,7 +910,7 @@ export function createHdrpBindGroupLayoutDescriptor(
852
910
  * Shader-derived kinds (`'pbr-material-merged'` / `'unlit-material'` /
853
911
  * `'hdrp-7-slot'`) require `options.registry` to look up the shader entry
854
912
  * and reflect its `paramSchema` via {@link deriveBglShapeFromShader}; they
855
- * compose the per-entry injection chain (Skylight + lightmap for material;
913
+ * compose the per-entry injection chain (Skylight + transmission for material;
856
914
  * HDRP variantSet for cluster-forward).
857
915
  *
858
916
  * Caps-driven kinds (`'pbr-view'` / `'pbr-mesh-array'` / `'pbr-instances'` /
@@ -951,7 +1009,11 @@ export function buildBindGroupLayoutDescriptor(
951
1009
  entries: [
952
1010
  {
953
1011
  binding: 0,
954
- visibility: GPU_SHADER_STAGE_VERTEX,
1012
+ // Standard transmission reads the same per-instance transform in
1013
+ // fs_main to convert glTF unit-space thickness into world metres.
1014
+ // Keep one shared instances BGL and widen its visibility instead
1015
+ // of introducing a second transform upload or six new varyings.
1016
+ visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
955
1017
  buffer: { type: meshBufType, hasDynamicOffset: false },
956
1018
  },
957
1019
  ],
@@ -980,24 +1042,24 @@ export function buildBindGroupLayoutDescriptor(
980
1042
  }
981
1043
  case 'pbr-material-merged': {
982
1044
  // Material BGL: per-shader user-region (derive(paramSchema).bglEntries)
983
- // + IBL injection (7) + lightmap injection (4). The user-region size is
984
- // the only variable; injection start = userRegion.length so a 4-texture
985
- // custom schema shifts IBL/lightmap by one sampler/texture pair (D-1).
986
- // For the built-in 4-texture standard-PBR schema this is 9 + 7 + 4 = 20.
1045
+ // + IBL injection (7) + transmission injection (2). The user-region
1046
+ // size is the only variable; injection start = userRegion.length so a
1047
+ // custom schema shifts IBL/transmission by its sampler/texture pairs.
1048
+ // The built-in 8-texture standard-PBR schema is 17 + 7 + 2 = 26 entries.
987
1049
  //
988
1050
  // Schema source priority (D-1): explicit materialParamSchema option >
989
1051
  // registry lookup of spec.shader.id > built-in standard-PBR fallback.
990
1052
  const resolvedSchema = resolveMaterialParamSchema(spec, options);
991
1053
  const userRegion = buildPbrMaterialUserRegionEntries(resolvedSchema);
992
1054
  const afterIbl = [...userRegion, ...appendInjection(userRegion, 'ibl')];
993
- const merged = [...afterIbl, ...appendInjection(afterIbl, 'lightmap')];
1055
+ const merged = [...afterIbl, ...appendInjection(afterIbl, 'transmission')];
994
1056
  return {
995
1057
  label: 'pbr-material-skylight-bgl',
996
1058
  entries: merged,
997
1059
  };
998
1060
  }
999
1061
  case 'unlit-material': {
1000
- // Unlit material BGL: per-shader user-region only. No IBL/lightmap
1062
+ // Unlit material BGL: per-shader user-region only. No IBL/transmission
1001
1063
  // injection (D-5 round-4: unlit demos do not pay for IBL state).
1002
1064
  const resolvedSchema = resolveMaterialParamSchema(spec, options);
1003
1065
  return {
@@ -3,8 +3,8 @@ import type {
3
3
  RenderGraphBuilder,
4
4
  RenderGraphError,
5
5
  } from '@forgeax/engine-render-graph';
6
- import { ok, type Result } from '@forgeax/engine-types';
7
- import { addTypedDebugOverlayPass } from '../debug-draw-glue';
6
+ import { err, ok, type Result } from '@forgeax/engine-types';
7
+ import { SceneDataUnavailableError } from '../errors/render';
8
8
  import type {
9
9
  RenderPipeline,
10
10
  RenderPipelineBuildContext,
@@ -17,15 +17,25 @@ import {
17
17
  type RenderPipelineTarget,
18
18
  } from '../render-pipeline';
19
19
  import {
20
- addTypedBloomPasses,
21
- addTypedCompositePostEffects,
20
+ addStandardSceneDataPass,
21
+ aggregateTemporalDemand,
22
+ createStandardSceneDataTarget,
23
+ standardTemporalLaneAdmission,
24
+ } from '../temporal/standard-scene-data';
25
+ import {
26
+ addTransmissionBackdropPasses,
27
+ addTransmissionBackdropTemporalPass,
28
+ resolveTransmissionBackdropTopology,
29
+ transmissionDemandForTopology,
30
+ } from '../transmission/backdrop';
31
+ import {
22
32
  addTypedFrameObservationPass,
23
- addTypedFullscreenPass,
24
33
  addTypedScenePass,
25
34
  addTypedSkyboxPass,
26
- addTypedTonemapPass,
27
35
  } from '../typed-render-graph-primitives';
28
36
  import { addTypedShadowPasses } from '../typed-shadow-passes';
37
+ import { addAuthoredVolumetricFogPasses } from '../volume/passes';
38
+ import { addStandardPost } from './standard-post';
29
39
 
30
40
  function target(
31
41
  graph: RenderGraphBuilder<RenderPipelineFrame>,
@@ -43,11 +53,32 @@ function buildUrp(
43
53
  const surface = importRenderPipelineSurface(graph, topology);
44
54
  if (!surface.ok) return surface;
45
55
 
46
- const msaa = topology.camera.antialias === 'msaa' && topology.lane.multisample;
47
- const hdr = topology.camera.tonemap !== 'none';
48
- const fxaa = topology.camera.antialias === 'fxaa';
49
- const linearLdr = !hdr && topology.lane.storageBuffer;
50
- const sceneFormat = hdr || linearLdr ? 'rgba16float' : topology.surface.storageFormat;
56
+ const clearOnly = topology.clearOnly === true;
57
+ const msaa = !clearOnly && topology.camera.antialias === 'msaa' && topology.lane.multisample;
58
+ const hdr =
59
+ !clearOnly && (topology.camera.tonemap !== 'none' || topology.camera.antialias === 'taa');
60
+ const fxaa = !clearOnly && topology.camera.antialias === 'fxaa';
61
+ const taa = !clearOnly && topology.camera.antialias === 'taa';
62
+ const rawOnly = !clearOnly && topology.surface.profile?.kind === 'raw-only';
63
+ // A direct no-tone/no-FXAA lane writes the final display view directly;
64
+ // keeping a linear-LDR intermediate would add a redundant fullscreen pass.
65
+ // FXAA samples the scene before the Output Transform, so its input must
66
+ // remain float even when tone mapping is disabled. This prevents an
67
+ // eight-bit quantization before the OETF/display-encoded boundary.
68
+ // MSAA resolves into a separate linear target before presentation. Treat
69
+ // that resolved target like linear LDR so the shared Output Transform owns
70
+ // its write into the surface storage view; without this, the resolve is
71
+ // never presented and MSAA is indistinguishable from the no-AA path.
72
+ const linearLdr = !clearOnly && ((!hdr && topology.lane.storageBuffer) || fxaa || msaa);
73
+ const temporalDemand = aggregateTemporalDemand({
74
+ taa,
75
+ motionBlur: !clearOnly && topology.temporal?.motionBlur === true,
76
+ });
77
+ const needsTemporalIntermediate = temporalDemand.targetCount === 1;
78
+ const sceneFormat =
79
+ hdr || linearLdr || rawOnly || needsTemporalIntermediate
80
+ ? 'rgba16float'
81
+ : topology.surface.storageFormat;
51
82
 
52
83
  const depth = target(graph, 'scene-depth', {
53
84
  format: 'depth24plus-stencil8',
@@ -56,24 +87,34 @@ function buildUrp(
56
87
  });
57
88
  if (!depth.ok) return depth;
58
89
 
59
- const sceneResolved =
60
- hdr || fxaa || linearLdr || msaa
90
+ const sceneResolved = clearOnly
91
+ ? ok(surface.value.display ?? surface.value.storage)
92
+ : hdr || fxaa || linearLdr || msaa || rawOnly || needsTemporalIntermediate
61
93
  ? target(graph, 'scene-color', {
62
94
  format: sceneFormat,
63
95
  size: 'surface',
64
96
  sampleCount: 1,
97
+ domain: 'linear-ldr',
65
98
  ...(sceneFormat === topology.surface.storageFormat &&
66
99
  topology.surface.storageFormat !== topology.surface.viewFormat
67
100
  ? { viewFormats: [topology.surface.viewFormat] }
68
101
  : {}),
69
102
  })
70
- : ok(surface.value.display);
103
+ : surface.value.display === undefined
104
+ ? target(graph, 'scene-color', {
105
+ format: topology.surface.storageFormat,
106
+ size: 'surface',
107
+ sampleCount: 1,
108
+ domain: 'display-encoded',
109
+ })
110
+ : ok(surface.value.display);
71
111
  if (!sceneResolved.ok) return sceneResolved;
72
112
  const scene = msaa
73
113
  ? target(graph, 'scene-color-msaa', {
74
114
  format: sceneFormat,
75
115
  size: 'surface',
76
116
  sampleCount: 4,
117
+ domain: 'linear-ldr',
77
118
  ...(sceneFormat === topology.surface.storageFormat &&
78
119
  topology.surface.storageFormat !== topology.surface.viewFormat
79
120
  ? { viewFormats: [topology.surface.viewFormat] }
@@ -92,6 +133,11 @@ function buildUrp(
92
133
  sampleCount: scene.value.sampleCount,
93
134
  });
94
135
  if (!gpuDriven.ok) return gpuDriven;
136
+ const transmissionDemand = transmissionDemandForTopology(topology);
137
+ const transmissionActive = resolveTransmissionBackdropTopology({
138
+ demand: transmissionDemand,
139
+ sourceSampleCount: scene.value.sampleCount,
140
+ }).active;
95
141
  const main = addTypedScenePass(graph, {
96
142
  name: 'main',
97
143
  color: scene.value,
@@ -106,12 +152,121 @@ function buildUrp(
106
152
  spotShadow: shadows.value.spot,
107
153
  selector: { LightMode: ['Forward'] },
108
154
  colorLoadOp: 'load',
155
+ ...(transmissionActive ? { recordMode: 'opaque' as const } : {}),
109
156
  ...(gpuDriven.value === undefined ? {} : { gpuDriven: gpuDriven.value }),
110
157
  });
111
158
  if (!main.ok) return main;
112
159
 
160
+ const temporalLane = topology.lane.compute
161
+ ? (topology.standardProfile?.lighting ?? 'direct')
162
+ : 'cpu-webgl2';
163
+ const temporalAdmission = standardTemporalLaneAdmission({
164
+ lane: temporalLane,
165
+ demand: temporalDemand,
166
+ capabilities: {
167
+ compute: topology.lane.compute,
168
+ storageBuffer: topology.lane.storageBuffer,
169
+ // Capability probes are the sole authority. A surface/storage format is
170
+ // not evidence that rgba16float render targets are actually renderable.
171
+ rgba16floatRenderable: context.capabilities?.rgba16floatRenderable ?? false,
172
+ },
173
+ });
174
+ if (temporalAdmission.status === 'unavailable' && temporalAdmission.reason !== 'no-demand') {
175
+ return err(
176
+ new SceneDataUnavailableError({
177
+ featureIdentity: 'forgeax::standard',
178
+ schema: 'forgeax::scene-data::temporal-v1',
179
+ lane: temporalLane,
180
+ reason: temporalAdmission.reason,
181
+ missingContributorIds: [],
182
+ omittedMissingContributorCount: 0,
183
+ recovery: 'enable-capability',
184
+ }),
185
+ );
186
+ }
187
+ const temporal =
188
+ temporalDemand.targetCount === 1 ? createStandardSceneDataTarget(graph) : ok(undefined);
189
+ if (!temporal.ok) return temporal;
190
+ if (temporal.value !== undefined) {
191
+ const producer = addStandardSceneDataPass(graph, temporal.value.temporal, depth.value);
192
+ if (!producer.ok) return producer;
193
+ }
194
+ const transmission = addTransmissionBackdropPasses({
195
+ graph,
196
+ source: sceneResolved.value,
197
+ demand: transmissionDemand,
198
+ copySize: { width: topology.surface.width, height: topology.surface.height },
199
+ encodeRoughMip: context.encodeTransmissionMip,
200
+ includeConsumerPasses: false,
201
+ });
202
+ if (!transmission.ok) return transmission;
203
+ if (transmission.value.topology.active) {
204
+ const transmissionPass = addTypedScenePass(graph, {
205
+ name: 'transmission-forward',
206
+ color: scene.value,
207
+ depth: depth.value,
208
+ ...(msaa ? { resolve: sceneResolved.value } : {}),
209
+ sampled: [
210
+ shadows.value.directional,
211
+ shadows.value.spot,
212
+ ...(shadows.value.point === undefined ? [] : [shadows.value.point]),
213
+ ],
214
+ directionalShadow: shadows.value.directional,
215
+ spotShadow: shadows.value.spot,
216
+ selector: { LightMode: ['Forward'] },
217
+ colorLoadOp: 'load',
218
+ depthLoadOp: 'load',
219
+ recordMode: 'transmission',
220
+ // Inject the complete backdrop view so the Standard shader can select
221
+ // the producer's optional roughness mip level. mipViews[0] is only the
222
+ // copy destination view and intentionally exposes one level.
223
+ transmissionBackdrop: transmission.value.backdrop?.view,
224
+ });
225
+ if (!transmissionPass.ok) return transmissionPass;
226
+
227
+ const transparentPass = addTypedScenePass(graph, {
228
+ name: 'transparent',
229
+ color: scene.value,
230
+ depth: depth.value,
231
+ ...(msaa ? { resolve: sceneResolved.value } : {}),
232
+ sampled: [
233
+ shadows.value.directional,
234
+ shadows.value.spot,
235
+ ...(shadows.value.point === undefined ? [] : [shadows.value.point]),
236
+ ],
237
+ directionalShadow: shadows.value.directional,
238
+ spotShadow: shadows.value.spot,
239
+ selector: { LightMode: ['Forward'] },
240
+ colorLoadOp: 'load',
241
+ depthLoadOp: 'load',
242
+ recordMode: 'transparent',
243
+ });
244
+ if (!transparentPass.ok) return transparentPass;
245
+ const temporal = addTransmissionBackdropTemporalPass(graph, sceneResolved.value);
246
+ if (!temporal.ok) return temporal;
247
+ }
248
+
249
+ if (topology.volumetricFog?.enabled === true) {
250
+ const depthSample = graph.view(depth.value.texture, {
251
+ label: 'scene-depth.sample',
252
+ dimension: '2d',
253
+ aspect: 'depth-only',
254
+ });
255
+ if (!depthSample.ok) return depthSample;
256
+ const volume = addAuthoredVolumetricFogPasses(
257
+ graph,
258
+ topology,
259
+ sceneResolved.value,
260
+ depthSample.value,
261
+ shadows.value.directional.view,
262
+ shadows.value.spot.view,
263
+ );
264
+ if (!volume.ok) return volume;
265
+ }
266
+
113
267
  const features = context.contributeFeatures([
114
268
  {
269
+ name: 'linear-hdr',
115
270
  kind: 'scene-color',
116
271
  texture: scene.value.texture,
117
272
  view: scene.value.view,
@@ -129,7 +284,7 @@ function buildUrp(
129
284
  ]);
130
285
  if (!features.ok) return features;
131
286
 
132
- if (hdr || linearLdr) {
287
+ if (hdr || linearLdr || rawOnly) {
133
288
  const observation = addTypedFrameObservationPass(
134
289
  graph,
135
290
  sceneResolved.value,
@@ -138,92 +293,14 @@ function buildUrp(
138
293
  if (!observation.ok) return observation;
139
294
  }
140
295
 
141
- let postInput = sceneResolved.value;
142
- if (hdr) {
143
- const composited = target(graph, 'bloom-composited', {
144
- format: 'rgba16float',
145
- size: 'surface',
146
- });
147
- if (!composited.ok) return composited;
148
- const bright = target(graph, 'bloom-bright', {
149
- format: 'rgba16float',
150
- size: 'half-surface',
151
- });
152
- if (!bright.ok) return bright;
153
- const blurH = target(graph, 'bloom-blur-h', {
154
- format: 'rgba16float',
155
- size: 'half-surface',
156
- });
157
- if (!blurH.ok) return blurH;
158
- const blurV = target(graph, 'bloom-blur-v', {
159
- format: 'rgba16float',
160
- size: 'half-surface',
161
- });
162
- if (!blurV.ok) return blurV;
163
- const bloom = addTypedBloomPasses(graph, {
164
- scene: sceneResolved.value,
165
- composited: composited.value,
166
- bright: bright.value,
167
- blurH: blurH.value,
168
- blurV: blurV.value,
169
- });
170
- if (!bloom.ok) return bloom;
171
- postInput = topology.camera.bloom === 'on' ? composited.value : sceneResolved.value;
172
- }
173
-
174
- if (hdr) {
175
- if (fxaa) {
176
- const ldr = target(graph, 'ldr-color', {
177
- format: topology.surface.storageFormat,
178
- size: 'surface',
179
- ...(topology.surface.storageFormat === topology.surface.viewFormat
180
- ? {}
181
- : { viewFormats: [topology.surface.viewFormat] }),
182
- });
183
- if (!ldr.ok) return ldr;
184
- const tonemap = addTypedTonemapPass(graph, postInput, ldr.value);
185
- if (!tonemap.ok) return tonemap;
186
- const aa = addTypedFullscreenPass(graph, {
187
- name: 'fxaa',
188
- shader: 'fxaa',
189
- input: ldr.value,
190
- output: surface.value.storage,
191
- });
192
- if (!aa.ok) return aa;
193
- } else {
194
- const tonemap = addTypedTonemapPass(graph, postInput, surface.value.display);
195
- if (!tonemap.ok) return tonemap;
196
- }
197
- } else if (fxaa) {
198
- const aa = addTypedFullscreenPass(graph, {
199
- name: 'fxaa',
200
- shader: 'fxaa',
201
- input: sceneResolved.value,
202
- output: surface.value.storage,
203
- });
204
- if (!aa.ok) return aa;
205
- } else if (linearLdr) {
206
- const output = addTypedTonemapPass(graph, sceneResolved.value, surface.value.storage, true);
207
- if (!output.ok) return output;
208
- }
209
-
210
- const postEffects = topology.config?.postEffects ?? [];
211
- if (topology.lane.storageBuffer && postEffects.length > 0) {
212
- const effects = addTypedCompositePostEffects(
213
- graph,
214
- postEffects,
215
- surface.value.display,
216
- surface.value.storage,
217
- depth.value,
218
- topology.surface,
219
- );
220
- if (!effects.ok) return effects;
221
- }
222
-
223
- const debug = addTypedDebugOverlayPass(graph, surface.value.display);
224
- if (!debug.ok) return debug;
225
-
226
- return ok(undefined);
296
+ return addStandardPost(
297
+ context,
298
+ topology,
299
+ sceneResolved.value,
300
+ depth.value,
301
+ surface.value,
302
+ temporal.value?.temporal,
303
+ );
227
304
  }
228
305
 
229
306
  export const buildStandardForwardLane = buildUrp;