@forgeax/engine-render 0.1.6 → 0.1.19

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 (713) hide show
  1. package/README.md +279 -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 +19 -2
  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/material/assembly.d.ts.map +1 -1
  10. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  11. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  12. package/dist/assembly/renderer-inspection.d.ts +22 -0
  13. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  15. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  16. package/dist/authoring.d.ts +1 -0
  17. package/dist/authoring.d.ts.map +1 -1
  18. package/dist/authoring.mjs +4 -2
  19. package/dist/authoring.mjs.map +1 -1
  20. package/dist/chunk-FJ6P52EE.mjs +46 -0
  21. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  22. package/dist/chunk-IPXCABEP.mjs +73 -0
  23. package/dist/chunk-IPXCABEP.mjs.map +1 -0
  24. package/dist/chunk-JDWARUOI.mjs +44 -0
  25. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  26. package/dist/chunk-LOSO4CTV.mjs +901 -0
  27. package/dist/chunk-LOSO4CTV.mjs.map +1 -0
  28. package/dist/chunk-PCHBPYML.mjs +385 -0
  29. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  30. package/dist/chunk-RJRUS55L.mjs +9323 -0
  31. package/dist/chunk-RJRUS55L.mjs.map +1 -0
  32. package/dist/{chunk-QC4VW3XJ.mjs → chunk-RXZ3RGOU.mjs} +4 -30
  33. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  34. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  35. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  36. package/dist/{chunk-SCRSAK5B.mjs → chunk-YTQ5C7YQ.mjs} +231 -127
  37. package/dist/chunk-YTQ5C7YQ.mjs.map +1 -0
  38. package/dist/components/atmosphere.d.ts +9 -0
  39. package/dist/components/atmosphere.d.ts.map +1 -0
  40. package/dist/components/camera.d.ts +2 -1
  41. package/dist/components/camera.d.ts.map +1 -1
  42. package/dist/components/fog.d.ts +8 -0
  43. package/dist/components/fog.d.ts.map +1 -0
  44. package/dist/components/index.d.ts +5 -0
  45. package/dist/components/index.d.ts.map +1 -1
  46. package/dist/components/lines.d.ts +5 -0
  47. package/dist/components/lines.d.ts.map +1 -0
  48. package/dist/components/motion-blur.d.ts +7 -0
  49. package/dist/components/motion-blur.d.ts.map +1 -0
  50. package/dist/components/points.d.ts +15 -0
  51. package/dist/components/points.d.ts.map +1 -0
  52. package/dist/construct-renderer.d.ts +2 -2
  53. package/dist/construct-renderer.d.ts.map +1 -1
  54. package/dist/construct-renderer.mjs +11419 -16442
  55. package/dist/construct-renderer.mjs.map +1 -1
  56. package/dist/device/device-scope.d.ts +4 -0
  57. package/dist/device/device-scope.d.ts.map +1 -1
  58. package/dist/environment/frame.d.ts +60 -0
  59. package/dist/environment/frame.d.ts.map +1 -0
  60. package/dist/environment/generation.d.ts +21 -0
  61. package/dist/environment/generation.d.ts.map +1 -0
  62. package/dist/environment/graph.d.ts +4 -0
  63. package/dist/environment/graph.d.ts.map +1 -0
  64. package/dist/environment/inspection.d.ts +48 -0
  65. package/dist/environment/inspection.d.ts.map +1 -0
  66. package/dist/environment/lifecycle.d.ts +39 -0
  67. package/dist/environment/lifecycle.d.ts.map +1 -0
  68. package/dist/environment/signature.d.ts +25 -0
  69. package/dist/environment/signature.d.ts.map +1 -0
  70. package/dist/errors/render.d.ts +217 -1
  71. package/dist/errors/render.d.ts.map +1 -1
  72. package/dist/extract/camera.d.ts +5 -0
  73. package/dist/extract/camera.d.ts.map +1 -0
  74. package/dist/extract/environment.d.ts +74 -0
  75. package/dist/extract/environment.d.ts.map +1 -0
  76. package/dist/extract/visibility.d.ts +1 -1
  77. package/dist/extract/visibility.d.ts.map +1 -1
  78. package/dist/features/host.d.ts +9 -2
  79. package/dist/features/host.d.ts.map +1 -1
  80. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  81. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  82. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  83. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  84. package/dist/features/plan.d.ts +17 -2
  85. package/dist/features/plan.d.ts.map +1 -1
  86. package/dist/features/prepared-gpu-work.d.ts +3 -1
  87. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  88. package/dist/features/prepared-graphics.d.ts +2 -1
  89. package/dist/features/prepared-graphics.d.ts.map +1 -1
  90. package/dist/features/render-graph-raster.d.ts +7 -2
  91. package/dist/features/render-graph-raster.d.ts.map +1 -1
  92. package/dist/features/targets.d.ts +3 -0
  93. package/dist/features/targets.d.ts.map +1 -1
  94. package/dist/features/types.d.ts +12 -0
  95. package/dist/features/types.d.ts.map +1 -1
  96. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  97. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  98. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  99. package/dist/gpu-scene.d.ts +2 -0
  100. package/dist/gpu-scene.d.ts.map +1 -1
  101. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  102. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  103. package/dist/index.d.ts +21 -6
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.mjs +8 -4
  106. package/dist/index.mjs.map +1 -1
  107. package/dist/inspection-types.d.ts +46 -1
  108. package/dist/inspection-types.d.ts.map +1 -1
  109. package/dist/internal.d.ts +2 -0
  110. package/dist/internal.d.ts.map +1 -1
  111. package/dist/internal.mjs +2 -0
  112. package/dist/materials.d.ts +22 -0
  113. package/dist/materials.d.ts.map +1 -1
  114. package/dist/pbr-pipeline.d.ts +12 -6
  115. package/dist/pbr-pipeline.d.ts.map +1 -1
  116. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  117. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  118. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  119. package/dist/pipeline/standard-post.d.ts +48 -0
  120. package/dist/pipeline/standard-post.d.ts.map +1 -0
  121. package/dist/pipeline/standard-profile.d.ts +3 -6
  122. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  123. package/dist/pipeline-builder.d.ts +18 -0
  124. package/dist/pipeline-builder.d.ts.map +1 -1
  125. package/dist/pipeline-spec.d.ts.map +1 -1
  126. package/dist/plugin.d.ts.map +1 -1
  127. package/dist/points-lines/admission.d.ts +36 -0
  128. package/dist/points-lines/admission.d.ts.map +1 -0
  129. package/dist/points-lines/bounds.d.ts +8 -0
  130. package/dist/points-lines/bounds.d.ts.map +1 -0
  131. package/dist/points-lines/expansion-cache.d.ts +28 -0
  132. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  133. package/dist/points-lines/inspection.d.ts +53 -0
  134. package/dist/points-lines/inspection.d.ts.map +1 -0
  135. package/dist/points-lines/prepare.d.ts +67 -0
  136. package/dist/points-lines/prepare.d.ts.map +1 -0
  137. package/dist/points-lines/record.d.ts +60 -0
  138. package/dist/points-lines/record.d.ts.map +1 -0
  139. package/dist/points-lines/snapshot.d.ts +49 -0
  140. package/dist/points-lines/snapshot.d.ts.map +1 -0
  141. package/dist/record/frame-lighting.d.ts.map +1 -1
  142. package/dist/record/frame-snapshot.d.ts +100 -5
  143. package/dist/record/frame-snapshot.d.ts.map +1 -1
  144. package/dist/record/frame-targets.d.ts.map +1 -1
  145. package/dist/record/frame.d.ts +4 -2
  146. package/dist/record/frame.d.ts.map +1 -1
  147. package/dist/record/main-pass-geometry.d.ts +18 -0
  148. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  149. package/dist/record/main-pass-material.d.ts +8 -5
  150. package/dist/record/main-pass-material.d.ts.map +1 -1
  151. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  152. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  153. package/dist/record/main-pass.d.ts +2 -0
  154. package/dist/record/main-pass.d.ts.map +1 -1
  155. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  156. package/dist/record/render-context.d.ts +93 -18
  157. package/dist/record/render-context.d.ts.map +1 -1
  158. package/dist/record/shadow-pass.d.ts.map +1 -1
  159. package/dist/record/skybox-post-pass.d.ts +1 -11
  160. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  161. package/dist/record/typed-frame-graph.d.ts +26 -2
  162. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  163. package/dist/record/view-ubo.d.ts +10 -1
  164. package/dist/record/view-ubo.d.ts.map +1 -1
  165. package/dist/render-contract.d.ts +102 -10
  166. package/dist/render-contract.d.ts.map +1 -1
  167. package/dist/render-graph-primitives.d.ts.map +1 -1
  168. package/dist/render-pipeline.d.ts +50 -6
  169. package/dist/render-pipeline.d.ts.map +1 -1
  170. package/dist/render-system-extract.d.ts +32 -5
  171. package/dist/render-system-extract.d.ts.map +1 -1
  172. package/dist/render-system.d.ts +27 -5
  173. package/dist/render-system.d.ts.map +1 -1
  174. package/dist/scene/render-scene-types.d.ts +3 -0
  175. package/dist/scene/render-scene-types.d.ts.map +1 -1
  176. package/dist/scene/render-scene.d.ts +43 -2
  177. package/dist/scene/render-scene.d.ts.map +1 -1
  178. package/dist/temporal/coverage.d.ts +42 -0
  179. package/dist/temporal/coverage.d.ts.map +1 -0
  180. package/dist/temporal/frame-coordinator.d.ts +99 -0
  181. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  182. package/dist/temporal/gpu.d.ts +39 -0
  183. package/dist/temporal/gpu.d.ts.map +1 -0
  184. package/dist/temporal/history.d.ts +37 -0
  185. package/dist/temporal/history.d.ts.map +1 -0
  186. package/dist/temporal/index.d.ts +7 -0
  187. package/dist/temporal/index.d.ts.map +1 -0
  188. package/dist/temporal/index.mjs +8 -0
  189. package/dist/temporal/index.mjs.map +1 -0
  190. package/dist/temporal/inspection.d.ts +36 -0
  191. package/dist/temporal/inspection.d.ts.map +1 -0
  192. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  193. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  194. package/dist/temporal/scene-data.d.ts +43 -0
  195. package/dist/temporal/scene-data.d.ts.map +1 -0
  196. package/dist/temporal/standard-scene-data.d.ts +61 -0
  197. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  198. package/dist/temporal/taa-history-resources.d.ts +22 -0
  199. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  200. package/dist/temporal/taa-history-store.d.ts +27 -0
  201. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  202. package/dist/temporal/taa-resolve.d.ts +15 -0
  203. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  204. package/dist/temporal/temporal-view.d.ts +40 -0
  205. package/dist/temporal/temporal-view.d.ts.map +1 -0
  206. package/dist/temporal/transaction.d.ts +9 -0
  207. package/dist/temporal/transaction.d.ts.map +1 -0
  208. package/dist/temporal/view.d.ts +56 -0
  209. package/dist/temporal/view.d.ts.map +1 -0
  210. package/dist/transmission/backdrop.d.ts +147 -0
  211. package/dist/transmission/backdrop.d.ts.map +1 -0
  212. package/dist/transmission/inspection.d.ts +57 -0
  213. package/dist/transmission/inspection.d.ts.map +1 -0
  214. package/dist/transmission/oracle.d.ts +42 -0
  215. package/dist/transmission/oracle.d.ts.map +1 -0
  216. package/dist/transmission/projection.d.ts +37 -0
  217. package/dist/transmission/projection.d.ts.map +1 -0
  218. package/dist/typed-render-graph-primitives.d.ts +25 -2
  219. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  220. package/package.json +24 -19
  221. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  222. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  223. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  224. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  225. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  226. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  227. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  228. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  229. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  230. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  231. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  232. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  233. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  234. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +12 -2
  235. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  236. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  237. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  238. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  239. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  240. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -124
  241. package/src/__tests__/material-static-dynamic-route.unit.test.ts +28 -28
  242. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  243. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  244. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  245. package/src/__tests__/public-surface.test-d.ts +15 -1
  246. package/src/__tests__/render-error-code-owner.test-d.ts +15 -0
  247. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  248. package/src/__tests__/render-error-exhaustive.test-d.ts +22 -0
  249. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  250. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  251. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  252. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  253. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  254. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  255. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +433 -1
  256. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  257. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  258. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  259. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  260. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  261. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  262. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  263. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  264. package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
  265. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  266. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  267. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  268. package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
  269. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  270. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  271. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  272. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  273. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  274. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  275. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  276. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  277. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  278. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  279. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  280. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  281. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  282. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  283. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  284. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  285. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  286. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  287. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  288. package/src/assembly/backend-contract.ts +47 -1
  289. package/src/assembly/factory.ts +1295 -507
  290. package/src/assembly/host-contract.ts +4 -0
  291. package/src/assembly/material/assembly.ts +2 -5
  292. package/src/assembly/renderer-frame-transaction.ts +75 -0
  293. package/src/assembly/renderer-inspection.ts +112 -0
  294. package/src/assembly/renderer-lifecycle.ts +6 -0
  295. package/src/authoring.ts +1 -0
  296. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  297. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  298. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  299. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  300. package/src/components/atmosphere.ts +10 -0
  301. package/src/components/camera.ts +2 -1
  302. package/src/components/fog.ts +9 -0
  303. package/src/components/index.ts +10 -0
  304. package/src/components/lines.ts +18 -0
  305. package/src/components/motion-blur.ts +8 -0
  306. package/src/components/points.ts +40 -0
  307. package/src/construct-renderer.ts +40 -3
  308. package/src/device/device-scope.ts +15 -1
  309. package/src/environment/frame.ts +185 -0
  310. package/src/environment/generation.ts +23 -0
  311. package/src/environment/graph.ts +9 -0
  312. package/src/environment/inspection.ts +87 -0
  313. package/src/environment/lifecycle.ts +250 -0
  314. package/src/environment/signature.ts +55 -0
  315. package/src/errors/render.ts +429 -1
  316. package/src/extract/camera.ts +78 -0
  317. package/src/extract/environment.ts +171 -0
  318. package/src/extract/visibility.ts +38 -19
  319. package/src/features/host.ts +36 -5
  320. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  321. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  322. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  323. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  324. package/src/features/plan.ts +32 -3
  325. package/src/features/prepared-gpu-work.ts +21 -6
  326. package/src/features/prepared-graphics.ts +2 -1
  327. package/src/features/render-graph-raster.ts +24 -4
  328. package/src/features/targets.ts +24 -2
  329. package/src/features/types.ts +13 -0
  330. package/src/fullscreen-post-process-pass.ts +34 -4
  331. package/src/gpu-driven/production-raster.ts +6 -1
  332. package/src/gpu-scene.ts +24 -0
  333. package/src/ibl/skylight-bind-group.ts +30 -38
  334. package/src/index.ts +83 -6
  335. package/src/inspection-types.ts +52 -0
  336. package/src/internal.ts +5 -0
  337. package/src/materials.ts +119 -24
  338. package/src/pbr-pipeline.ts +66 -20
  339. package/src/pipeline/standard-forward-lane.ts +158 -101
  340. package/src/pipeline/standard-pipeline.ts +156 -105
  341. package/src/pipeline/standard-post.ts +373 -0
  342. package/src/pipeline/standard-profile.ts +11 -11
  343. package/src/pipeline-builder.ts +102 -12
  344. package/src/pipeline-spec.ts +9 -0
  345. package/src/plugin.ts +6 -0
  346. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  347. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  348. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  349. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  350. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  351. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  352. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  353. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  354. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  355. package/src/points-lines/admission.ts +238 -0
  356. package/src/points-lines/bounds.ts +23 -0
  357. package/src/points-lines/expansion-cache.ts +215 -0
  358. package/src/points-lines/inspection.ts +97 -0
  359. package/src/points-lines/prepare.ts +177 -0
  360. package/src/points-lines/record.ts +125 -0
  361. package/src/points-lines/snapshot.ts +130 -0
  362. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  363. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  364. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  365. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  366. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  367. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  368. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  369. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  370. package/src/record/frame-lighting.ts +14 -2
  371. package/src/record/frame-snapshot.ts +129 -5
  372. package/src/record/frame-targets.ts +15 -6
  373. package/src/record/frame.ts +119 -4
  374. package/src/record/main-pass-geometry.ts +178 -40
  375. package/src/record/main-pass-material.ts +114 -66
  376. package/src/record/main-pass-sprite-draws.ts +79 -102
  377. package/src/record/main-pass.ts +83 -7
  378. package/src/record/mesh-ssbo.ts +22 -3
  379. package/src/record/render-context.ts +209 -23
  380. package/src/record/shadow-pass.ts +129 -28
  381. package/src/record/skybox-post-pass.ts +99 -42
  382. package/src/record/typed-frame-graph.ts +582 -42
  383. package/src/record/view-ubo.ts +99 -4
  384. package/src/render-contract.ts +121 -7
  385. package/src/render-graph-primitives.ts +18 -1
  386. package/src/render-pipeline.ts +100 -27
  387. package/src/render-system-extract.ts +264 -77
  388. package/src/render-system.ts +786 -43
  389. package/src/scene/render-scene-types.ts +3 -0
  390. package/src/scene/render-scene.ts +307 -9
  391. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  392. package/src/temporal/coverage.ts +76 -0
  393. package/src/temporal/frame-coordinator.ts +311 -0
  394. package/src/temporal/gpu.ts +287 -0
  395. package/src/temporal/history.ts +92 -0
  396. package/src/temporal/index.ts +6 -0
  397. package/src/temporal/inspection.ts +97 -0
  398. package/src/temporal/scene-data-catalog.ts +200 -0
  399. package/src/temporal/scene-data.ts +149 -0
  400. package/src/temporal/standard-scene-data.ts +182 -0
  401. package/src/temporal/taa-history-resources.ts +128 -0
  402. package/src/temporal/taa-history-store.ts +79 -0
  403. package/src/temporal/taa-resolve.ts +34 -0
  404. package/src/temporal/temporal-view.ts +169 -0
  405. package/src/temporal/transaction.ts +17 -0
  406. package/src/temporal/view.ts +161 -0
  407. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  408. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  409. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  410. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  411. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  412. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  413. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
  414. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  415. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  416. package/src/transmission/backdrop.ts +572 -0
  417. package/src/transmission/inspection.ts +190 -0
  418. package/src/transmission/oracle.ts +141 -0
  419. package/src/transmission/projection.ts +83 -0
  420. package/src/typed-render-graph-primitives.ts +162 -9
  421. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  422. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  423. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  424. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  425. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  426. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  427. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  428. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  429. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  430. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  431. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  432. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  433. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  434. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  435. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  436. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  437. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  438. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  439. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  440. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  441. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  442. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  443. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  444. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  445. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  446. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  447. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  448. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  449. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  450. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  451. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  452. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  453. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  454. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  455. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  456. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  457. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  458. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  459. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  460. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  461. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  462. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  463. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  464. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  465. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  466. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  467. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  468. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  469. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  472. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  473. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  474. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  476. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  477. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  478. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  479. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  480. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  481. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  482. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  483. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  484. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  485. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  486. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  487. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  488. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  489. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  490. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  491. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  492. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  493. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  494. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  495. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  496. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  498. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  500. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  501. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  502. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  503. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  504. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  505. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  506. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  507. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  508. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  509. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  510. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  511. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  512. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  513. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  514. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  515. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  516. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  517. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  518. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  519. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  520. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  521. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  522. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  523. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  524. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  525. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  526. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  527. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  528. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  529. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  530. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  531. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  532. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  533. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  534. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  535. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  536. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  537. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  538. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  540. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  541. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  542. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  543. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  544. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  545. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  546. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  547. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  548. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  550. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  551. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  552. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  553. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  554. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  555. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  556. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  557. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  558. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  559. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  560. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  561. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  562. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  563. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  564. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  566. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  567. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  568. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  570. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  571. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  572. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  573. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  574. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  575. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  576. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  577. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  578. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  580. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  582. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  583. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  584. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  585. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  586. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  587. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  588. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  589. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  590. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  591. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  592. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  593. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  594. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  598. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  600. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  604. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  610. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  611. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  612. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  613. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  614. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  615. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  616. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  617. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  618. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  619. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  620. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  621. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  622. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  623. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  624. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  625. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  626. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  627. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  628. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  629. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  630. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  631. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  632. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  633. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  634. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  635. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  636. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  637. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  638. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  639. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  640. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  641. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  642. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  643. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  644. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  645. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  646. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  647. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  648. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  649. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  650. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  651. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  652. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  653. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  654. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  655. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  656. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  657. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  658. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  659. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  660. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  661. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  662. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  663. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  664. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  665. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  666. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  667. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  668. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  669. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  670. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  671. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  672. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  673. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  674. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  675. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  676. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  677. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  678. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  679. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  680. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  681. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  682. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  683. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  684. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  685. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  686. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  687. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  688. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  689. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  690. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  691. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  692. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  693. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  694. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  695. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  696. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  697. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  698. package/dist/chunk-QC4VW3XJ.mjs.map +0 -1
  699. package/dist/chunk-SCRSAK5B.mjs.map +0 -1
  700. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  701. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  702. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  703. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  704. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  705. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  707. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  712. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  713. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  // @forgeax/engine-render — AI-facing render vocabulary.
2
2
  //
3
3
  // The root is deliberately small: ECS render components, grouped closed
4
- // values, the renderer lifecycle/receipt contract, and the declarative
5
- // RenderFeature plan. Graph builders, prepared GPU state, pipeline
4
+ // values, immutable frame facts, the renderer lifecycle/receipt contract, and
5
+ // the declarative RenderFeature plan. Graph builders, prepared GPU state, pipeline
6
6
  // implementations, builtin feature factories, and diagnostic class names are
7
7
  // owner-local implementation details.
8
8
 
@@ -11,13 +11,20 @@ export {
11
11
  renderPipelineContribution,
12
12
  samplerContribution,
13
13
  } from './assets/asset-decoders';
14
-
14
+ export { Atmosphere } from './components/atmosphere';
15
15
  // ECS render vocabulary and grouped closed values.
16
- export type { Antialias, BloomEnabled, CameraProjection, Tonemap } from './components/camera';
16
+ export type {
17
+ Antialias,
18
+ BloomEnabled,
19
+ CameraData,
20
+ CameraProjection,
21
+ Tonemap,
22
+ } from './components/camera';
17
23
  export {
18
24
  ANTIALIAS_FXAA,
19
25
  ANTIALIAS_MSAA,
20
26
  ANTIALIAS_NONE,
27
+ ANTIALIAS_TAA,
21
28
  BLOOM_DISABLED,
22
29
  BLOOM_ENABLED,
23
30
  CAMERA_PROJECTION_ORTHOGRAPHIC,
@@ -36,12 +43,21 @@ export {
36
43
  TONEMAP_REINHARD_EXTENDED,
37
44
  } from './components/camera';
38
45
  export * from './components/directional-light';
46
+ export { Fog } from './components/fog';
39
47
  export { Instances, type InstancesData } from './components/instances';
40
48
  export { Layer } from './components/layer';
49
+ export { Lines } from './components/lines';
41
50
  export * from './components/mesh-filter';
42
51
  export * from './components/mesh-renderer';
52
+ export { MotionBlur } from './components/motion-blur';
43
53
  export { PointLight } from './components/point-light';
44
54
  export { PointLightShadow } from './components/point-light-shadow';
55
+ export {
56
+ type PointShape,
57
+ PointShapeValue,
58
+ Points,
59
+ pointShapeFromU32,
60
+ } from './components/points';
45
61
  export { PostProcessParams } from './components/post-process-params';
46
62
  export { SceneInstance } from './components/scene-instance';
47
63
  export {
@@ -58,9 +74,35 @@ export {
58
74
  VisibilityStateValue,
59
75
  visibilityStateFromU32,
60
76
  } from './components/visibility';
77
+ export type {
78
+ EnvironmentInspection,
79
+ EnvironmentInspectionFailure,
80
+ EnvironmentInspectionGeneration,
81
+ EnvironmentInspectionStatus,
82
+ } from './environment/inspection';
61
83
  // Public structured operation failure union. Concrete error classes stay
62
84
  // behind the Renderer Result/event boundary.
63
- export type { RenderError, RenderErrorCode } from './errors/render';
85
+ export type {
86
+ RenderError,
87
+ RenderErrorCode,
88
+ SceneDataUnavailableDetail,
89
+ SceneDataUnavailableReason,
90
+ } from './errors/render';
91
+ export {
92
+ AtmosphereInvalidParameterError,
93
+ EnvironmentGenerationFailedError,
94
+ EnvironmentSourceConflictError,
95
+ FogCardinalityError,
96
+ OwnerStageFailedError,
97
+ SceneDataUnavailableError,
98
+ TaaCapsInsufficientError,
99
+ } from './errors/render';
100
+ export type {
101
+ EnvironmentFrame,
102
+ EnvironmentSource,
103
+ FogFrame,
104
+ FramePlan,
105
+ } from './extract/environment';
64
106
  export {
65
107
  resolveVisibility,
66
108
  type VisibilityResolution,
@@ -68,6 +110,7 @@ export {
68
110
  } from './extract/visibility';
69
111
  export type {
70
112
  RenderFeatureLogicalTarget,
113
+ RenderFeatureMaterialShaderBindingContract,
71
114
  RenderFeaturePassDeclaration,
72
115
  RenderFeaturePlan,
73
116
  RenderFeaturePlanContext,
@@ -83,14 +126,31 @@ export type {
83
126
  RenderFeatureErrorDescriptor,
84
127
  RenderFeatureExtractContext,
85
128
  RenderFeatureHiddenEntityReport,
129
+ RenderFeatureShaderModuleMode,
86
130
  RenderFeatureStatus,
87
131
  RenderFeatureWorldVisibilitySnapshot,
88
132
  } from './features/types';
89
- export { Materials } from './materials';
133
+ export type {
134
+ BloomInspection,
135
+ MotionBlurInspection,
136
+ MotionBlurInspectionStatus,
137
+ TransmissionInspection,
138
+ } from './inspection-types';
139
+ export { Materials, MaterialTransmissionContractError } from './materials';
90
140
  // The host-facing default is a stable profile value; implementation-only
91
141
  // pipeline helpers remain behind the package boundary.
92
142
  export { DEFAULT_STANDARD_PROFILE } from './pipeline/standard-profile';
93
143
  export { renderComponentsPlugin } from './plugin';
144
+ export {
145
+ admitPointsLines,
146
+ type LinesStyleInput,
147
+ type PointsLinesAdmission,
148
+ type PointsLinesAdmissionError,
149
+ type PointsLinesAdmissionInput,
150
+ type PointsLinesAdmissionLimits,
151
+ type PointsStyleInput,
152
+ } from './points-lines/admission';
153
+ export type { PointsLinesInspection } from './points-lines/inspection';
94
154
  // Runtime contract: leases, frame receipts, detached inspection, profile,
95
155
  // lifecycle state, and the single renderer event stream.
96
156
  export type {
@@ -110,3 +170,20 @@ export type {
110
170
  RenderWorldLease,
111
171
  } from './render-contract';
112
172
  export { RENDER_PHASE_CATALOG } from './render-contract';
173
+ export type { TemporalInspection, TemporalResourceInspection } from './temporal/inspection';
174
+ export {
175
+ SCENE_DATA_TEMPORAL_V1_DESCRIPTOR,
176
+ SCENE_DATA_TEMPORAL_V1_SCHEMA,
177
+ type SceneDataLane,
178
+ type SceneDataSchemaId,
179
+ type SceneDataTarget,
180
+ type SceneDataTemporalV1Descriptor,
181
+ } from './temporal/scene-data';
182
+ export {
183
+ createSceneDataCatalog,
184
+ type SceneDataAvailability,
185
+ type SceneDataCatalog,
186
+ type SceneDataCatalogOptions,
187
+ type SceneDataInspection,
188
+ } from './temporal/scene-data-catalog';
189
+ export type { TemporalView } from './temporal/view';
@@ -4,6 +4,26 @@
4
4
  * extract/record dependency graph.
5
5
  */
6
6
 
7
+ import type { PointsLinesInspection } from './points-lines/inspection';
8
+
9
+ export type BloomGraphStatus = 'empty' | 'valid' | 'invalid';
10
+
11
+ export interface BloomInspection {
12
+ readonly graphStatus: BloomGraphStatus;
13
+ readonly enabled: boolean;
14
+ readonly targetCount: number;
15
+ readonly targetBytes: number;
16
+ readonly resourceCount: number;
17
+ readonly passCount: number;
18
+ readonly encodeCount: number;
19
+ readonly bindGroupCount: number;
20
+ readonly uploadCount: number;
21
+ readonly residentChildBytes: number;
22
+ readonly generation: number;
23
+ readonly state: 'off' | 'active' | 'retiring';
24
+ }
25
+ export type { TransmissionInspection } from './transmission/inspection';
26
+
7
27
  export interface BatchTopologyInspection {
8
28
  readonly revision: number;
9
29
  readonly batchCount: number;
@@ -45,6 +65,36 @@ export interface GpuDrivenProductionInspection {
45
65
  readonly cpuFallbackDrawItems: number;
46
66
  }
47
67
 
68
+ /** Detached semantic descriptor for the Standard scene-temporal producer. */
69
+ export interface TemporalTargetInspection {
70
+ readonly identity: 'standard-scene-temporal';
71
+ readonly producerId: 'forgeax::standard::scene-data';
72
+ readonly schema: 'forgeax::scene-data::temporal-v1';
73
+ readonly targetCount: 1;
74
+ readonly descriptor: {
75
+ readonly format: 'rgba16float';
76
+ readonly width: number;
77
+ readonly height: number;
78
+ readonly sampleCount: 1;
79
+ readonly bytes: number;
80
+ };
81
+ }
82
+
83
+ /** Detached, bounded Motion Blur facts; no graph, device, target, or history handle. */
84
+ export type MotionBlurInspectionStatus = 'off' | 'active' | 'reset' | 'invalid';
85
+
86
+ export interface MotionBlurInspection {
87
+ readonly enabled: boolean;
88
+ readonly status: MotionBlurInspectionStatus;
89
+ readonly shutterAngle: number;
90
+ readonly maxRadiusPixels: number;
91
+ readonly sampleCount: number;
92
+ readonly temporalDemand: 'none' | 'scene-data-temporal-v1';
93
+ readonly passName: 'motion-blur';
94
+ readonly historyWrites: 0;
95
+ readonly lastFailure?: 'invalid-params' | 'scene-data-unavailable';
96
+ }
97
+
48
98
  export type RenderSceneResyncReason =
49
99
  | 'attach'
50
100
  | 'asset-catalog-changed'
@@ -69,6 +119,8 @@ export interface PersistentRenderSceneInspection {
69
119
  | ({ readonly status: 'resident' } & GpuSceneInspection)
70
120
  | { readonly status: 'rebuild-pending' }
71
121
  | { readonly status: 'error' };
122
+ /** Bounded retained authoring observations; no graph or backend handles. */
123
+ readonly pointsLines: readonly PointsLinesInspection[];
72
124
  }
73
125
 
74
126
  export type RenderSceneInspection = PersistentRenderSceneInspection & {
package/src/internal.ts CHANGED
@@ -7,3 +7,8 @@ export {
7
7
  type TilesetRuntimeError,
8
8
  type TilesetRuntimeErrorCode,
9
9
  } from '@forgeax/engine-assets-runtime';
10
+ export {
11
+ type GraphTargetCaptureReadbackValidation,
12
+ validateGraphTargetCaptureReadback,
13
+ } from './record/frame-snapshot';
14
+ export { TemporalFrameCoordinator } from './temporal/frame-coordinator';
package/src/materials.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA } from '@forgeax/engine-shader';
1
2
  import type {
2
3
  MaterialAsset,
3
4
  MaterialColorSpace,
@@ -7,6 +8,49 @@ import type {
7
8
  MaterialValue,
8
9
  } from '@forgeax/engine-types';
9
10
 
11
+ export type MaterialTransmissionValidationReason =
12
+ | 'non-finite'
13
+ | 'range'
14
+ | 'shape'
15
+ | 'blend'
16
+ | 'depth-write';
17
+
18
+ /** Structured authoring failure for the Standard transmission contract. */
19
+ export class MaterialTransmissionContractError extends Error {
20
+ readonly code = 'material-transmission-contract-invalid' as const;
21
+ readonly expected = 'transmission material values satisfy finite ranges and Forward depth rules';
22
+ readonly hint =
23
+ 'repair the named transmission value or pass state before publishing the material';
24
+ readonly detail: {
25
+ readonly code: 'material-transmission-contract-invalid';
26
+ readonly material: 'Standard';
27
+ readonly parameter:
28
+ | 'transmission'
29
+ | 'ior'
30
+ | 'thickness'
31
+ | 'attenuationColor'
32
+ | 'attenuationDistance';
33
+ readonly reason: MaterialTransmissionValidationReason;
34
+ readonly actual?: unknown;
35
+ };
36
+
37
+ constructor(
38
+ parameter: (typeof MaterialTransmissionContractError.prototype.detail)['parameter'],
39
+ reason: MaterialTransmissionValidationReason,
40
+ actual?: unknown,
41
+ ) {
42
+ super(`Materials.standard: ${parameter} violates the transmission contract (${reason})`);
43
+ this.name = 'MaterialTransmissionContractError';
44
+ this.detail = {
45
+ code: 'material-transmission-contract-invalid',
46
+ material: 'Standard',
47
+ parameter,
48
+ reason,
49
+ ...(actual === undefined ? {} : { actual }),
50
+ };
51
+ }
52
+ }
53
+
10
54
  export const SPRITE_PREMULTIPLIED_ALPHA_BLEND: GPUBlendState = {
11
55
  color: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
12
56
  alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
@@ -31,28 +75,26 @@ function authoredColorParameter(
31
75
  }
32
76
 
33
77
  function standardParameters(colorSpace: MaterialColorSpace): readonly MaterialParameter[] {
34
- return [
35
- authoredColorParameter('baseColor', 'color', colorSpace),
36
- { name: 'metallic', type: 'f32' },
37
- { name: 'roughness', type: 'f32' },
38
- { name: 'metallicChannel', type: 'f32', optional: true },
39
- { name: 'roughnessChannel', type: 'f32', optional: true },
40
- { name: 'aoChannel', type: 'f32', optional: true },
41
- { name: 'extraChannel', type: 'f32', optional: true },
42
- authoredColorParameter('emissive', 'vec3', colorSpace, true),
43
- { name: 'emissiveIntensity', type: 'f32', optional: true },
44
- { name: 'occlusionStrength', type: 'f32', optional: true },
45
- { name: 'alphaCutoff', type: 'f32', optional: true },
46
- { name: 'clearcoat', type: 'f32', optional: true },
47
- { name: 'clearcoatRoughness', type: 'f32', optional: true },
48
- authoredColorParameter('specularTint', 'vec3', colorSpace, true),
49
- { name: 'baseColorTexture', type: 'texture', optional: true },
50
- { name: 'metallicRoughnessTexture', type: 'texture', optional: true },
51
- { name: 'normalTexture', type: 'texture', optional: true },
52
- { name: 'specularTintTexture', type: 'texture', optional: true },
53
- { name: 'emissiveTexture', type: 'texture', optional: true },
54
- { name: 'occlusionTexture', type: 'texture', optional: true },
55
- ];
78
+ return DEFAULT_STANDARD_PBR_PARAM_SCHEMA.map((entry) => {
79
+ const type = entry.type.startsWith('texture') ? 'texture' : entry.type;
80
+ const isRequired =
81
+ entry.name === 'baseColor' || entry.name === 'metallic' || entry.name === 'roughness';
82
+ const authoredColor =
83
+ entry.type === 'color' || (entry.type === 'vec3' && entry.name !== 'attenuationColor');
84
+ const schemaColorSpace = 'colorSpace' in entry ? entry.colorSpace : undefined;
85
+ const colorSpaceProjection: { colorSpace?: MaterialColorSpace } = {};
86
+ if (authoredColor && !(type === 'color' && colorSpace === 'srgb')) {
87
+ colorSpaceProjection.colorSpace = colorSpace;
88
+ } else if (!authoredColor && schemaColorSpace !== undefined) {
89
+ colorSpaceProjection.colorSpace = schemaColorSpace;
90
+ }
91
+ return {
92
+ name: entry.name,
93
+ type,
94
+ ...colorSpaceProjection,
95
+ ...(isRequired ? {} : { optional: true }),
96
+ } as MaterialParameter;
97
+ });
56
98
  }
57
99
 
58
100
  function unlitParameters(colorSpace: MaterialColorSpace): readonly MaterialParameter[] {
@@ -143,6 +185,13 @@ interface StandardOpts {
143
185
  readonly occlusionTexture?: MaterialValue;
144
186
  readonly occlusionStrength?: number;
145
187
  readonly alphaCutoff?: number;
188
+ readonly transmission?: number;
189
+ readonly transmissionTexture?: MaterialValue;
190
+ readonly ior?: number;
191
+ readonly thickness?: number;
192
+ readonly thicknessTexture?: MaterialValue;
193
+ readonly attenuationColor?: readonly [number, number, number];
194
+ readonly attenuationDistance?: number;
146
195
  readonly renderState?: MaterialRenderState;
147
196
  readonly castShadow?: boolean;
148
197
  readonly queue?: number;
@@ -157,6 +206,21 @@ function validateChannel(
157
206
  }
158
207
  }
159
208
 
209
+ function validateFiniteRange(
210
+ name: 'transmission' | 'ior' | 'thickness' | 'attenuationDistance',
211
+ value: number | undefined,
212
+ minimum: number,
213
+ maximum?: number,
214
+ ): void {
215
+ if (value === undefined || !Number.isFinite(value)) {
216
+ if (value === undefined) return;
217
+ throw new MaterialTransmissionContractError(name, 'non-finite', value);
218
+ }
219
+ if (value < minimum || (maximum !== undefined && value > maximum)) {
220
+ throw new MaterialTransmissionContractError(name, 'range', value);
221
+ }
222
+ }
223
+
160
224
  function standard(opts: StandardOpts): MaterialAsset {
161
225
  const occlusionStrength = opts.occlusionStrength ?? 1;
162
226
  if (occlusionStrength < 0 || occlusionStrength > 1) {
@@ -169,12 +233,36 @@ function standard(opts: StandardOpts): MaterialAsset {
169
233
  }
170
234
  validateChannel('metallicChannel', opts.metallicChannel);
171
235
  validateChannel('roughnessChannel', opts.roughnessChannel);
236
+ const transmission = opts.transmission ?? 0;
237
+ const ior = opts.ior ?? 1.5;
238
+ const thickness = opts.thickness ?? 0;
239
+ const attenuationColor = opts.attenuationColor ?? [1, 1, 1];
240
+ validateFiniteRange('transmission', transmission, 0, 1);
241
+ validateFiniteRange('ior', ior, 1);
242
+ validateFiniteRange('thickness', thickness, 0);
243
+ validateFiniteRange('attenuationDistance', opts.attenuationDistance, Number.MIN_VALUE);
244
+ if (
245
+ attenuationColor.length !== 3 ||
246
+ attenuationColor.some((value) => !Number.isFinite(value) || value < 0 || value > 1)
247
+ ) {
248
+ throw new MaterialTransmissionContractError('attenuationColor', 'shape', attenuationColor);
249
+ }
250
+ if (transmission > 0 && opts.renderState?.blend !== undefined) {
251
+ throw new MaterialTransmissionContractError('transmission', 'blend', opts.renderState.blend);
252
+ }
253
+ if (transmission > 0 && opts.renderState?.depthWriteEnabled === true) {
254
+ throw new MaterialTransmissionContractError('transmission', 'depth-write', true);
255
+ }
172
256
  const values: Record<string, MaterialValue> = {
173
257
  baseColor: opts.baseColor,
174
258
  metallic: opts.metallic ?? 0,
175
259
  roughness: opts.roughness ?? 0.5,
176
260
  occlusionStrength,
177
261
  specularTint: opts.specularTint ?? [1, 1, 1],
262
+ transmission,
263
+ ior,
264
+ thickness,
265
+ attenuationColor,
178
266
  };
179
267
  if (opts.metallicChannel !== undefined) values.metallicChannel = opts.metallicChannel;
180
268
  if (opts.roughnessChannel !== undefined) values.roughnessChannel = opts.roughnessChannel;
@@ -193,10 +281,17 @@ function standard(opts: StandardOpts): MaterialAsset {
193
281
  values.specularTintTexture = opts.specularTintTexture;
194
282
  }
195
283
  if (opts.alphaCutoff !== undefined) values.alphaCutoff = opts.alphaCutoff;
284
+ if (opts.transmissionTexture !== undefined) values.transmissionTexture = opts.transmissionTexture;
285
+ if (opts.thicknessTexture !== undefined) values.thicknessTexture = opts.thicknessTexture;
286
+ if (opts.attenuationDistance !== undefined) values.attenuationDistance = opts.attenuationDistance;
287
+ const forwardRenderState =
288
+ transmission > 0 ? { ...(opts.renderState ?? {}), depthWriteEnabled: false } : opts.renderState;
196
289
  const passes: [MaterialPass, ...MaterialPass[]] = [
197
- pass('forward', STANDARD_MODULE, opts.renderState, 'fs_main', opts.queue),
198
- pass('deferred', STANDARD_MODULE, opts.renderState, 'fs_gbuffer', opts.queue),
290
+ pass('forward', STANDARD_MODULE, forwardRenderState, 'fs_main', opts.queue),
199
291
  ];
292
+ if (transmission === 0) {
293
+ passes.push(pass('deferred', STANDARD_MODULE, opts.renderState, 'fs_gbuffer', opts.queue));
294
+ }
200
295
  if (opts.castShadow !== false) passes.push(pass('shadow-caster', STANDARD_MODULE, undefined));
201
296
  return {
202
297
  kind: 'material',
@@ -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:
@@ -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
  /**
@@ -347,6 +366,8 @@ export interface PbrCaps {
347
366
  * (always-on bindings 5/6 paired with the unconditional `POINT_SHADOW_AVAILABLE`
348
367
  * define registered in vite-plugin-shader) +
349
368
  * feat-20260613-csm-cascaded-shadow-maps M5 / w28 (binding 7 cascade UBO).
369
+ * binding 10 (Points/Lines viewport UBO; always bound for the shared view
370
+ * layout and consumed only by the dedicated points-lines shader).
350
371
  * Isolated here so M4 round-4 tests can recreate the layout.
351
372
  *
352
373
  * feat-20260526-pbr-uniform-fallback-no-storage-buffer M3 / w9:
@@ -448,6 +469,11 @@ export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[]
448
469
  visibility: GPU_SHADER_STAGE_FRAGMENT,
449
470
  texture: { sampleType: 'depth', viewDimension: '2d' },
450
471
  },
472
+ {
473
+ binding: 10,
474
+ visibility: GPU_SHADER_STAGE_VERTEX,
475
+ buffer: { type: 'uniform', hasDynamicOffset: true },
476
+ },
451
477
  ];
452
478
  }
453
479
 
@@ -472,17 +498,16 @@ export function buildPbrPipelineLayouts(
472
498
  // D-13 round-2: 4 BGLs route through buildBindGroupLayoutDescriptor.
473
499
  // The dispatcher reads kind + caps; spec content is unused without a
474
500
  // registry (no shader-axis reflection at this seam — the 4 BGLs are
475
- // caps-driven literals + the deterministic Skylight + lightmap merge
501
+ // caps-driven literals + the deterministic Skylight + transmission merge
476
502
  // sequence that has no dependency on shader.id).
477
503
  const viewBglRes = device.createBindGroupLayout(
478
504
  buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-view', caps }),
479
505
  );
480
506
  if (!viewBglRes.ok) throw viewBglRes.error;
481
507
 
482
- // Material BGL: derived user region + Skylight + lightmap injection.
483
- // feat-20260613 fix-issue-5: drop the buildPbrMaterialEmissiveAoEntries
484
- // shim. The lightmap injection start binding is computed from the post-
485
- // skylight BGL length (= 14) directly inside appendInjection.
508
+ // Material BGL: derived user region + Skylight + transmission injection.
509
+ // The transmission start binding is computed from the post-Skylight BGL
510
+ // length (= 24 for the built-in Standard schema) by appendInjection.
486
511
  const materialBglRes = device.createBindGroupLayout(
487
512
  buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-material-merged' }),
488
513
  );
@@ -535,6 +560,23 @@ export function buildPbrPipelineLayouts(
535
560
  * `LayoutKind = 'pbr-skin'` upstream.
536
561
  */
537
562
  export const SKIN_MATERIAL_SHADER_ID = 'forgeax::pbr-skin' as const;
563
+ export const SHADOW_CASTER_SHADER_ID = 'forgeax::default-shadow-caster' as const;
564
+
565
+ export function shadowCasterVariantSet(storageBuffer: boolean, skinned: boolean): string {
566
+ const skinningDisabled = !skinned;
567
+ if (storageBuffer && skinningDisabled) return '';
568
+ return `SKINNING_DISABLED=${String(skinningDisabled)}+STORAGE_BUFFER_AVAILABLE=${String(storageBuffer)}`;
569
+ }
570
+
571
+ export function isSkinnedShadowCasterVariant(
572
+ materialShaderId: string | undefined,
573
+ variantSet: string | undefined,
574
+ ): boolean {
575
+ return (
576
+ materialShaderId === SHADOW_CASTER_SHADER_ID &&
577
+ variantSet?.includes('SKINNING_DISABLED=false') === true
578
+ );
579
+ }
538
580
 
539
581
  /** Returns true for the engine-shipped standard-PBR material shader family. */
540
582
  export function isStandardPbrMaterialShader(shaderId: string | undefined): boolean {
@@ -738,7 +780,7 @@ export const SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET = '';
738
780
  *
739
781
  * Three groups by derivation source:
740
782
  * 1. Shader-derived (paramSchema reflection + injection chain):
741
- * - `'pbr-material-merged'` — derived user region + Skylight 7 + lightmap 4
783
+ * - `'pbr-material-merged'` — derived user region + Skylight 7 + transmission 2
742
784
  * - `'unlit-material'` — 7 entries: base PBR material only (no inject)
743
785
  * - `'hdrp-7-slot'` — 7 entries (binding 0 + 3..8): HDRP cluster + SSAO group(2) BGL
744
786
  * 2. Caps-driven literal shapes (no shader):
@@ -845,7 +887,7 @@ export function createHdrpBindGroupLayoutDescriptor(
845
887
  * Shader-derived kinds (`'pbr-material-merged'` / `'unlit-material'` /
846
888
  * `'hdrp-7-slot'`) require `options.registry` to look up the shader entry
847
889
  * and reflect its `paramSchema` via {@link deriveBglShapeFromShader}; they
848
- * compose the per-entry injection chain (Skylight + lightmap for material;
890
+ * compose the per-entry injection chain (Skylight + transmission for material;
849
891
  * HDRP variantSet for cluster-forward).
850
892
  *
851
893
  * Caps-driven kinds (`'pbr-view'` / `'pbr-mesh-array'` / `'pbr-instances'` /
@@ -944,7 +986,11 @@ export function buildBindGroupLayoutDescriptor(
944
986
  entries: [
945
987
  {
946
988
  binding: 0,
947
- visibility: GPU_SHADER_STAGE_VERTEX,
989
+ // Standard transmission reads the same per-instance transform in
990
+ // fs_main to convert glTF unit-space thickness into world metres.
991
+ // Keep one shared instances BGL and widen its visibility instead
992
+ // of introducing a second transform upload or six new varyings.
993
+ visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
948
994
  buffer: { type: meshBufType, hasDynamicOffset: false },
949
995
  },
950
996
  ],
@@ -973,24 +1019,24 @@ export function buildBindGroupLayoutDescriptor(
973
1019
  }
974
1020
  case 'pbr-material-merged': {
975
1021
  // Material BGL: per-shader user-region (derive(paramSchema).bglEntries)
976
- // + IBL injection (7) + lightmap injection (4). The user-region size is
977
- // the only variable; injection start = userRegion.length so a 4-texture
978
- // custom schema shifts IBL/lightmap by one sampler/texture pair (D-1).
979
- // For the built-in 4-texture standard-PBR schema this is 9 + 7 + 4 = 20.
1022
+ // + IBL injection (7) + transmission injection (2). The user-region
1023
+ // size is the only variable; injection start = userRegion.length so a
1024
+ // custom schema shifts IBL/transmission by its sampler/texture pairs.
1025
+ // The built-in 8-texture standard-PBR schema is 17 + 7 + 2 = 26 entries.
980
1026
  //
981
1027
  // Schema source priority (D-1): explicit materialParamSchema option >
982
1028
  // registry lookup of spec.shader.id > built-in standard-PBR fallback.
983
1029
  const resolvedSchema = resolveMaterialParamSchema(spec, options);
984
1030
  const userRegion = buildPbrMaterialUserRegionEntries(resolvedSchema);
985
1031
  const afterIbl = [...userRegion, ...appendInjection(userRegion, 'ibl')];
986
- const merged = [...afterIbl, ...appendInjection(afterIbl, 'lightmap')];
1032
+ const merged = [...afterIbl, ...appendInjection(afterIbl, 'transmission')];
987
1033
  return {
988
1034
  label: 'pbr-material-skylight-bgl',
989
1035
  entries: merged,
990
1036
  };
991
1037
  }
992
1038
  case 'unlit-material': {
993
- // Unlit material BGL: per-shader user-region only. No IBL/lightmap
1039
+ // Unlit material BGL: per-shader user-region only. No IBL/transmission
994
1040
  // injection (D-5 round-4: unlit demos do not pay for IBL state).
995
1041
  const resolvedSchema = resolveMaterialParamSchema(spec, options);
996
1042
  return {
@@ -1005,7 +1051,7 @@ export function buildBindGroupLayoutDescriptor(
1005
1051
  const desc = createHdrpBindGroupLayoutDescriptor(caps.storageBuffer);
1006
1052
  return {
1007
1053
  label: desc.label ?? 'hdrp-unified-bgl-group2',
1008
- entries: desc.entries ?? [],
1054
+ entries: [...(desc.entries ?? [])],
1009
1055
  };
1010
1056
  }
1011
1057
  case 'fullscreen-post': {