@forgeax/engine-render 0.1.28 → 0.1.30

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 (768) hide show
  1. package/README.md +856 -126
  2. package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
  3. package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
  4. package/dist/assembly/device-feature-admission.d.ts +4 -3
  5. package/dist/assembly/device-feature-admission.d.ts.map +1 -1
  6. package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
  7. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  8. package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
  9. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
  10. package/dist/assembly/factory.d.ts +3 -1
  11. package/dist/assembly/factory.d.ts.map +1 -1
  12. package/dist/assembly/gpu-driven-owner.d.ts +10 -0
  13. package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
  14. package/dist/assembly/host-contract.d.ts +14 -0
  15. package/dist/assembly/host-contract.d.ts.map +1 -1
  16. package/dist/assembly/material/assembly.d.ts +31 -1
  17. package/dist/assembly/material/assembly.d.ts.map +1 -1
  18. package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
  19. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
  20. package/dist/assembly/material-shader-policy.d.ts +3 -1
  21. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  22. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  23. package/dist/assembly/recovery/failure-location.d.ts +12 -0
  24. package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
  25. package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
  26. package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
  27. package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
  28. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  29. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  30. package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
  31. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
  32. package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
  33. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  34. package/dist/assembly/renderer-helpers.d.ts +3 -0
  35. package/dist/assembly/renderer-helpers.d.ts.map +1 -1
  36. package/dist/assembly/renderer-inspection.d.ts +4 -0
  37. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  38. package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
  39. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
  40. package/dist/assembly/skin-palette-owner.d.ts +8 -0
  41. package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
  42. package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
  43. package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
  44. package/dist/assembly/webgpu-device-loss.d.ts +15 -0
  45. package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
  46. package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
  47. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
  48. package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
  49. package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
  50. package/dist/assembly/webgpu-ready.d.ts +7 -3
  51. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  52. package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
  53. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
  54. package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
  55. package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
  56. package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
  57. package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
  58. package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
  59. package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
  60. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
  61. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
  62. package/dist/assembly/webgpu-renderer.d.ts +7 -141
  63. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  64. package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
  65. package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
  66. package/dist/authoring.mjs +2 -2
  67. package/dist/capture/scene-projection.d.ts +41 -0
  68. package/dist/capture/scene-projection.d.ts.map +1 -0
  69. package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
  70. package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
  71. package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
  72. package/dist/chunk-BLXGONR2.mjs.map +1 -0
  73. package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
  74. package/dist/chunk-C3DDSXYK.mjs.map +1 -0
  75. package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
  76. package/dist/chunk-FUUO4UND.mjs.map +1 -0
  77. package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
  78. package/dist/chunk-JRBDO2KB.mjs.map +1 -0
  79. package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
  80. package/dist/chunk-MDQJPY3T.mjs.map +1 -0
  81. package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
  82. package/dist/chunk-NO4WZCAH.mjs.map +1 -0
  83. package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
  84. package/dist/chunk-PA5DRJNI.mjs.map +1 -0
  85. package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
  86. package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
  87. package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
  88. package/dist/chunk-S5UE2T5P.mjs.map +1 -0
  89. package/dist/components/camera.d.ts +62 -2
  90. package/dist/components/camera.d.ts.map +1 -1
  91. package/dist/components/directional-light.d.ts +2 -2
  92. package/dist/components/dynamic-resolution.d.ts +15 -0
  93. package/dist/components/dynamic-resolution.d.ts.map +1 -0
  94. package/dist/components/index.d.ts +2 -0
  95. package/dist/components/index.d.ts.map +1 -1
  96. package/dist/components/instances.d.ts +6 -20
  97. package/dist/components/instances.d.ts.map +1 -1
  98. package/dist/components/light-helpers.d.ts.map +1 -1
  99. package/dist/components/reflection-probe.d.ts +1 -0
  100. package/dist/components/reflection-probe.d.ts.map +1 -1
  101. package/dist/components/scene-instance.d.ts +2 -1
  102. package/dist/components/scene-instance.d.ts.map +1 -1
  103. package/dist/components/screen-space-reflection.d.ts +14 -0
  104. package/dist/components/screen-space-reflection.d.ts.map +1 -0
  105. package/dist/components/skylight.d.ts +4 -1
  106. package/dist/components/skylight.d.ts.map +1 -1
  107. package/dist/construct-renderer.mjs +14809 -7570
  108. package/dist/construct-renderer.mjs.map +1 -1
  109. package/dist/device/device-scope.d.ts +2 -0
  110. package/dist/device/device-scope.d.ts.map +1 -1
  111. package/dist/device/gpu-residency.d.ts +3 -14
  112. package/dist/device/gpu-residency.d.ts.map +1 -1
  113. package/dist/dynamic-geometry.d.ts.map +1 -1
  114. package/dist/environment/background.d.ts +7 -0
  115. package/dist/environment/background.d.ts.map +1 -0
  116. package/dist/environment/ibl.d.ts +11 -0
  117. package/dist/environment/ibl.d.ts.map +1 -0
  118. package/dist/environment/storage.d.ts +14 -0
  119. package/dist/environment/storage.d.ts.map +1 -0
  120. package/dist/errors/gpu-driven.d.ts +6 -3
  121. package/dist/errors/gpu-driven.d.ts.map +1 -1
  122. package/dist/errors/render.d.ts +41 -4
  123. package/dist/errors/render.d.ts.map +1 -1
  124. package/dist/extract/camera.d.ts.map +1 -1
  125. package/dist/extract/contracts.d.ts +7 -0
  126. package/dist/extract/contracts.d.ts.map +1 -1
  127. package/dist/extract/gpu-driven.d.ts +50 -3
  128. package/dist/extract/gpu-driven.d.ts.map +1 -1
  129. package/dist/features/host.d.ts +23 -1
  130. package/dist/features/host.d.ts.map +1 -1
  131. package/dist/features/noise-texture.d.ts +17 -0
  132. package/dist/features/noise-texture.d.ts.map +1 -0
  133. package/dist/features/plan.d.ts +83 -2
  134. package/dist/features/plan.d.ts.map +1 -1
  135. package/dist/features/prepared-gpu-work.d.ts +37 -4
  136. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  137. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  138. package/dist/features/prepared-graphics.d.ts +5 -0
  139. package/dist/features/prepared-graphics.d.ts.map +1 -1
  140. package/dist/features/render-graph-compute.d.ts +5 -3
  141. package/dist/features/render-graph-compute.d.ts.map +1 -1
  142. package/dist/features/render-graph-contribution.d.ts +11 -3
  143. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  144. package/dist/features/render-graph-raster.d.ts +19 -3
  145. package/dist/features/render-graph-raster.d.ts.map +1 -1
  146. package/dist/features/types.d.ts +11 -0
  147. package/dist/features/types.d.ts.map +1 -1
  148. package/dist/fullscreen-post-process-pass.d.ts +2 -0
  149. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  150. package/dist/gpu-driven/batch-topology.d.ts +34 -1
  151. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  152. package/dist/gpu-driven/material-artifacts.d.ts +24 -0
  153. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
  154. package/dist/gpu-driven/material-bindings.d.ts +7 -0
  155. package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
  156. package/dist/gpu-driven/pbr-program.d.ts +10 -0
  157. package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
  158. package/dist/gpu-driven/prepared-draw.d.ts +2 -0
  159. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  160. package/dist/gpu-driven/production-raster.d.ts +169 -27
  161. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  162. package/dist/gpu-driven/shadow-views.d.ts +126 -0
  163. package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
  164. package/dist/gpu-driven/view-gpu.d.ts +18 -2
  165. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  166. package/dist/gpu-resource.d.ts +5 -2
  167. package/dist/gpu-resource.d.ts.map +1 -1
  168. package/dist/gpu-scene-schema.d.ts +2 -8
  169. package/dist/gpu-scene-schema.d.ts.map +1 -1
  170. package/dist/gpu-scene.d.ts +14 -0
  171. package/dist/gpu-scene.d.ts.map +1 -1
  172. package/dist/gpu-texture-usage.d.ts +1 -0
  173. package/dist/gpu-texture-usage.d.ts.map +1 -1
  174. package/dist/hdrp-buffers.d.ts +9 -0
  175. package/dist/hdrp-buffers.d.ts.map +1 -1
  176. package/dist/ibl/IblPipelineCache.d.ts +2 -0
  177. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  178. package/dist/ibl/frame-resources.d.ts +8 -0
  179. package/dist/ibl/frame-resources.d.ts.map +1 -0
  180. package/dist/ibl/skylight-bind-group.d.ts +3 -1
  181. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  182. package/dist/index.d.ts +87 -75
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.mjs +10 -8
  185. package/dist/index.mjs.map +1 -1
  186. package/dist/inspection-types.d.ts +180 -1
  187. package/dist/inspection-types.d.ts.map +1 -1
  188. package/dist/instances-derived-bounds.d.ts +11 -0
  189. package/dist/instances-derived-bounds.d.ts.map +1 -1
  190. package/dist/instances.d.ts +89 -44
  191. package/dist/instances.d.ts.map +1 -1
  192. package/dist/internal.d.ts +3 -0
  193. package/dist/internal.d.ts.map +1 -1
  194. package/dist/internal.mjs +117 -9
  195. package/dist/internal.mjs.map +1 -1
  196. package/dist/lifecycle.d.ts +2 -1
  197. package/dist/lifecycle.d.ts.map +1 -1
  198. package/dist/material-row.d.ts +15 -0
  199. package/dist/material-row.d.ts.map +1 -0
  200. package/dist/materials.d.ts +15 -0
  201. package/dist/materials.d.ts.map +1 -1
  202. package/dist/pbr-pipeline.d.ts +23 -5
  203. package/dist/pbr-pipeline.d.ts.map +1 -1
  204. package/dist/pipeline/render-extent.d.ts +51 -0
  205. package/dist/pipeline/render-extent.d.ts.map +1 -0
  206. package/dist/pipeline/standard-build-context.d.ts +7 -0
  207. package/dist/pipeline/standard-build-context.d.ts.map +1 -0
  208. package/dist/pipeline/standard-forward-lane.d.ts +3 -2
  209. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  210. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
  211. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
  212. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
  213. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
  214. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
  215. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
  216. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
  217. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
  218. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
  219. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
  220. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
  221. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
  222. package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
  223. package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
  224. package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
  225. package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
  226. package/dist/pipeline/standard-output/graph.d.ts +15 -0
  227. package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
  228. package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
  229. package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
  230. package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
  231. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
  232. package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
  233. package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
  234. package/dist/pipeline/standard-output/resources.d.ts +10 -0
  235. package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
  236. package/dist/pipeline/standard-output/types.d.ts +39 -0
  237. package/dist/pipeline/standard-output/types.d.ts.map +1 -0
  238. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  239. package/dist/pipeline/standard-post.d.ts +2 -2
  240. package/dist/pipeline/standard-post.d.ts.map +1 -1
  241. package/dist/pipeline/standard-profile.d.ts +2 -1
  242. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  243. package/dist/pipeline-builder.d.ts +5 -2
  244. package/dist/pipeline-builder.d.ts.map +1 -1
  245. package/dist/pipeline-spec-types.d.ts +4 -0
  246. package/dist/pipeline-spec-types.d.ts.map +1 -1
  247. package/dist/pipeline-spec.d.ts +1 -9
  248. package/dist/pipeline-spec.d.ts.map +1 -1
  249. package/dist/plugin.d.ts.map +1 -1
  250. package/dist/points-lines/standard-owner.d.ts +1 -1
  251. package/dist/points-lines/standard-owner.d.ts.map +1 -1
  252. package/dist/post-process-errors.d.ts +9 -2
  253. package/dist/post-process-errors.d.ts.map +1 -1
  254. package/dist/prepare/extended-lighting/resources.d.ts +3 -3
  255. package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
  256. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  257. package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
  258. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
  259. package/dist/record/frame-lighting.d.ts +3 -3
  260. package/dist/record/frame-lighting.d.ts.map +1 -1
  261. package/dist/record/frame-snapshot.d.ts +109 -13
  262. package/dist/record/frame-snapshot.d.ts.map +1 -1
  263. package/dist/record/frame-targets.d.ts.map +1 -1
  264. package/dist/record/frame.d.ts +41 -5
  265. package/dist/record/frame.d.ts.map +1 -1
  266. package/dist/record/main-pass-geometry.d.ts +13 -9
  267. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  268. package/dist/record/main-pass-material.d.ts +43 -3
  269. package/dist/record/main-pass-material.d.ts.map +1 -1
  270. package/dist/record/main-pass-sprite-draws.d.ts +2 -10
  271. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  272. package/dist/record/main-pass.d.ts +14 -2
  273. package/dist/record/main-pass.d.ts.map +1 -1
  274. package/dist/record/mesh-ssbo.d.ts +15 -6
  275. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  276. package/dist/record/prepared-material-bindings.d.ts +19 -0
  277. package/dist/record/prepared-material-bindings.d.ts.map +1 -0
  278. package/dist/record/recovery-pipeline.d.ts +1 -0
  279. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  280. package/dist/record/render-context.d.ts +101 -22
  281. package/dist/record/render-context.d.ts.map +1 -1
  282. package/dist/record/shadow-pass.d.ts +62 -7
  283. package/dist/record/shadow-pass.d.ts.map +1 -1
  284. package/dist/record/skybox-post-pass.d.ts +1 -1
  285. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  286. package/dist/record/typed-frame-graph.d.ts +39 -8
  287. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  288. package/dist/record/view-ubo.d.ts +1 -0
  289. package/dist/record/view-ubo.d.ts.map +1 -1
  290. package/dist/recovery/render-system-candidate.d.ts +10 -2
  291. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  292. package/dist/recovery/render-system-roots.d.ts +11 -0
  293. package/dist/recovery/render-system-roots.d.ts.map +1 -0
  294. package/dist/recovery/types.d.ts +76 -0
  295. package/dist/recovery/types.d.ts.map +1 -0
  296. package/dist/reflection/background.d.ts +14 -0
  297. package/dist/reflection/background.d.ts.map +1 -0
  298. package/dist/reflection/filter.d.ts.map +1 -1
  299. package/dist/reflection/projection.d.ts +1 -0
  300. package/dist/reflection/projection.d.ts.map +1 -1
  301. package/dist/reflection/record-owner.d.ts +4 -4
  302. package/dist/reflection/record-owner.d.ts.map +1 -1
  303. package/dist/render-contract.d.ts +211 -53
  304. package/dist/render-contract.d.ts.map +1 -1
  305. package/dist/render-graph-primitives.d.ts +1 -0
  306. package/dist/render-graph-primitives.d.ts.map +1 -1
  307. package/dist/render-pipeline.d.ts +81 -6
  308. package/dist/render-pipeline.d.ts.map +1 -1
  309. package/dist/render-system-extract-tail.d.ts +15 -6
  310. package/dist/render-system-extract-tail.d.ts.map +1 -1
  311. package/dist/render-system-extract.d.ts +128 -41
  312. package/dist/render-system-extract.d.ts.map +1 -1
  313. package/dist/render-system-projections.d.ts +22 -0
  314. package/dist/render-system-projections.d.ts.map +1 -0
  315. package/dist/render-system.d.ts +27 -77
  316. package/dist/render-system.d.ts.map +1 -1
  317. package/dist/scene/render-scene-types.d.ts +14 -7
  318. package/dist/scene/render-scene-types.d.ts.map +1 -1
  319. package/dist/scene/render-scene.d.ts +31 -11
  320. package/dist/scene/render-scene.d.ts.map +1 -1
  321. package/dist/scene/shadow-visibility.d.ts +5 -0
  322. package/dist/scene/shadow-visibility.d.ts.map +1 -0
  323. package/dist/ssao-config.d.ts +8 -6
  324. package/dist/ssao-config.d.ts.map +1 -1
  325. package/dist/ssr/admission.d.ts +70 -1
  326. package/dist/ssr/admission.d.ts.map +1 -1
  327. package/dist/ssr/compose.d.ts +13 -0
  328. package/dist/ssr/compose.d.ts.map +1 -0
  329. package/dist/ssr/errors.d.ts +35 -0
  330. package/dist/ssr/errors.d.ts.map +1 -1
  331. package/dist/ssr/graph.d.ts +60 -0
  332. package/dist/ssr/graph.d.ts.map +1 -0
  333. package/dist/ssr/history.d.ts +97 -0
  334. package/dist/ssr/history.d.ts.map +1 -0
  335. package/dist/ssr/hiz.d.ts +37 -0
  336. package/dist/ssr/hiz.d.ts.map +1 -0
  337. package/dist/ssr/inspection.d.ts +42 -0
  338. package/dist/ssr/inspection.d.ts.map +1 -0
  339. package/dist/ssr/resources.d.ts +58 -0
  340. package/dist/ssr/resources.d.ts.map +1 -0
  341. package/dist/ssr/temporal.d.ts +38 -0
  342. package/dist/ssr/temporal.d.ts.map +1 -0
  343. package/dist/systems/skin-palette-allocator.d.ts +32 -10
  344. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  345. package/dist/systems/skin-palette-types.d.ts +15 -0
  346. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  347. package/dist/systems/transparent-dispatch.d.ts +9 -0
  348. package/dist/systems/transparent-dispatch.d.ts.map +1 -0
  349. package/dist/targets/material-source.d.ts +7 -0
  350. package/dist/targets/material-source.d.ts.map +1 -1
  351. package/dist/temporal/frame-coordinator.d.ts +7 -0
  352. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  353. package/dist/temporal/gpu.d.ts +8 -0
  354. package/dist/temporal/gpu.d.ts.map +1 -1
  355. package/dist/temporal/history.d.ts.map +1 -1
  356. package/dist/temporal/index.mjs +6 -6
  357. package/dist/temporal/inspection.d.ts.map +1 -1
  358. package/dist/temporal/standard-scene-data.d.ts +4 -2
  359. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  360. package/dist/temporal/target-coverage-attachment.d.ts +15 -0
  361. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
  362. package/dist/temporal/temporal-view.d.ts +6 -0
  363. package/dist/temporal/temporal-view.d.ts.map +1 -1
  364. package/dist/temporal/view.d.ts +6 -0
  365. package/dist/temporal/view.d.ts.map +1 -1
  366. package/dist/typed-render-graph-primitives.d.ts +41 -1
  367. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  368. package/dist/typed-shadow-passes.d.ts +3 -1
  369. package/dist/typed-shadow-passes.d.ts.map +1 -1
  370. package/dist/volume/component.d.ts +1 -0
  371. package/dist/volume/component.d.ts.map +1 -1
  372. package/dist/volume/temporal.d.ts +6 -0
  373. package/dist/volume/temporal.d.ts.map +1 -1
  374. package/package.json +21 -20
  375. package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
  376. package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
  377. package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
  378. package/src/__tests__/auto-exposure.browser.test.ts +33 -0
  379. package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
  380. package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
  381. package/src/__tests__/detached-inspection.integration.test.ts +5 -0
  382. package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
  383. package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
  384. package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
  385. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
  386. package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
  387. package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
  388. package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
  389. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
  390. package/src/__tests__/factory-contract.integration.test.ts +231 -9
  391. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
  392. package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
  393. package/src/__tests__/feature-noise.unit.test.ts +38 -0
  394. package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
  395. package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
  396. package/src/__tests__/frame-observation.contract.test.ts +21 -0
  397. package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
  398. package/src/__tests__/frame-targets.unit.test.ts +24 -0
  399. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
  400. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
  401. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
  402. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
  403. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
  404. package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
  405. package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
  406. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
  407. package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
  408. package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
  409. package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
  410. package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
  411. package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
  412. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
  413. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
  414. package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
  415. package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
  416. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
  417. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
  418. package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
  419. package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
  420. package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
  421. package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
  422. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
  423. package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
  424. package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
  425. package/src/__tests__/gpu-scene.unit.test.ts +613 -33
  426. package/src/__tests__/instances-culling.integration.test.ts +36 -10
  427. package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
  428. package/src/__tests__/instances-store.unit.test.ts +242 -39
  429. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
  430. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
  431. package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
  432. package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
  433. package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
  434. package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
  435. package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
  436. package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
  437. package/src/__tests__/material-texture-source.unit.test.ts +87 -0
  438. package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
  439. package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
  440. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
  441. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
  442. package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
  443. package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
  444. package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
  445. package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
  446. package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
  447. package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
  448. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
  449. package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
  450. package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
  451. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
  452. package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
  453. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
  454. package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
  455. package/src/__tests__/public-surface.test-d.ts +3 -0
  456. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
  457. package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
  458. package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
  459. package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
  460. package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
  461. package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
  462. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
  463. package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
  464. package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
  465. package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
  466. package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
  467. package/src/__tests__/render-extent.unit.test.ts +63 -0
  468. package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
  469. package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
  470. package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
  471. package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
  472. package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
  473. package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
  474. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
  475. package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
  476. package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
  477. package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
  478. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
  479. package/src/__tests__/render-target-material-source.test-d.ts +27 -3
  480. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
  481. package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
  482. package/src/__tests__/shader-manifest-fixture.ts +45 -0
  483. package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
  484. package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
  485. package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
  486. package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
  487. package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
  488. package/src/__tests__/ssao-config.unit.test.ts +7 -0
  489. package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
  490. package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
  491. package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
  492. package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
  493. package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
  494. package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
  495. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
  496. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
  497. package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
  498. package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
  499. package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
  500. package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
  501. package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
  502. package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
  503. package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
  504. package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
  505. package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
  506. package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
  507. package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
  508. package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
  509. package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
  510. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
  511. package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
  512. package/src/__tests__/ssr-reprojection-probe.ts +90 -0
  513. package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
  514. package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
  515. package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
  516. package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
  517. package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
  518. package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
  519. package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
  520. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
  521. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
  522. package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
  523. package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
  524. package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
  525. package/src/__tests__/standard-output.browser.test.ts +15 -0
  526. package/src/__tests__/standard-output.dawn.test.ts +15 -0
  527. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
  528. package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
  529. package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
  530. package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
  531. package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
  532. package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
  533. package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
  534. package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
  535. package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
  536. package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
  537. package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
  538. package/src/__tests__/taa-stability-feedback.ts +342 -0
  539. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
  540. package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
  541. package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
  542. package/src/__tests__/temporal-view.unit.test.ts +17 -0
  543. package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
  544. package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
  545. package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
  546. package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
  547. package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
  548. package/src/__tests__/visibility-extract.perf.test.ts +20 -8
  549. package/src/__tests__/visibility-instances.integration.test.ts +19 -7
  550. package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
  551. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
  552. package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
  553. package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
  554. package/src/assembly/device-feature-admission.ts +9 -4
  555. package/src/assembly/dynamic-geometry-host.ts +284 -163
  556. package/src/assembly/dynamic-geometry-runtime.ts +71 -0
  557. package/src/assembly/factory.ts +4 -0
  558. package/src/assembly/gpu-driven-owner.ts +29 -0
  559. package/src/assembly/host-contract.ts +19 -0
  560. package/src/assembly/material/assembly.ts +383 -1
  561. package/src/assembly/material/pipeline-helpers.ts +100 -0
  562. package/src/assembly/material-shader-policy.ts +110 -46
  563. package/src/assembly/recovery/device-loss-fanout.ts +5 -0
  564. package/src/assembly/recovery/failure-location.ts +62 -0
  565. package/src/assembly/recovery/recovery-attempt.ts +2 -29
  566. package/src/assembly/recovery/renderer-recover.ts +16 -17
  567. package/src/assembly/renderer-facade.ts +34 -1
  568. package/src/assembly/renderer-feature-inspection.ts +13 -0
  569. package/src/assembly/renderer-frame-transaction.ts +63 -0
  570. package/src/assembly/renderer-helpers.ts +26 -0
  571. package/src/assembly/renderer-inspection.ts +6 -0
  572. package/src/assembly/shader-prewarm-policy.ts +46 -1
  573. package/src/assembly/skin-palette-owner.ts +21 -0
  574. package/src/assembly/ssr-shader-prewarm.ts +41 -0
  575. package/src/assembly/webgpu-device-loss.ts +75 -0
  576. package/src/assembly/webgpu-pbr-ready.ts +232 -0
  577. package/src/assembly/webgpu-ready-mipmap.ts +26 -0
  578. package/src/assembly/webgpu-ready.ts +161 -131
  579. package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
  580. package/src/assembly/webgpu-renderer-contract.ts +69 -0
  581. package/src/assembly/webgpu-renderer-guards.ts +32 -0
  582. package/src/assembly/webgpu-renderer-observation.ts +43 -0
  583. package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
  584. package/src/assembly/webgpu-renderer.ts +744 -730
  585. package/src/assembly/webgpu-vertex-layouts.ts +233 -87
  586. package/src/capture/scene-projection.ts +37 -0
  587. package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
  588. package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
  589. package/src/components/__tests__/light-radius.integration.test.ts +59 -0
  590. package/src/components/camera.ts +287 -7
  591. package/src/components/directional-light.ts +3 -3
  592. package/src/components/dynamic-resolution.ts +67 -0
  593. package/src/components/index.ts +2 -0
  594. package/src/components/instances.ts +45 -18
  595. package/src/components/light-helpers.ts +6 -1
  596. package/src/components/reflection-probe.ts +1 -0
  597. package/src/components/scene-instance.ts +2 -1
  598. package/src/components/screen-space-reflection.ts +21 -0
  599. package/src/components/skylight.ts +4 -1
  600. package/src/components/sprite-animation.ts +2 -2
  601. package/src/components/sprite-instances.ts +1 -1
  602. package/src/device/device-scope.ts +13 -7
  603. package/src/device/gpu-residency.ts +45 -42
  604. package/src/dynamic-geometry.ts +13 -8
  605. package/src/environment/background.ts +281 -0
  606. package/src/environment/ibl.ts +211 -0
  607. package/src/environment/storage.ts +63 -0
  608. package/src/errors/gpu-driven.ts +49 -8
  609. package/src/errors/render.ts +91 -3
  610. package/src/extract/camera.ts +37 -1
  611. package/src/extract/contracts.ts +10 -0
  612. package/src/extract/gpu-driven.ts +240 -10
  613. package/src/features/host.ts +237 -19
  614. package/src/features/noise-texture.ts +91 -0
  615. package/src/features/plan.ts +553 -24
  616. package/src/features/prepared-gpu-work.ts +631 -49
  617. package/src/features/prepared-graphics-store.ts +31 -0
  618. package/src/features/prepared-graphics.ts +5 -0
  619. package/src/features/render-graph-compute.ts +41 -8
  620. package/src/features/render-graph-contribution.ts +141 -3
  621. package/src/features/render-graph-raster.ts +143 -30
  622. package/src/features/types.ts +11 -0
  623. package/src/fullscreen-post-process-pass.ts +3 -0
  624. package/src/gpu-driven/batch-topology.ts +452 -108
  625. package/src/gpu-driven/material-artifacts.ts +179 -0
  626. package/src/gpu-driven/material-bindings.ts +41 -0
  627. package/src/gpu-driven/pbr-program.ts +31 -0
  628. package/src/gpu-driven/prepared-draw.ts +42 -6
  629. package/src/gpu-driven/production-raster.ts +2806 -716
  630. package/src/gpu-driven/shadow-views.ts +539 -0
  631. package/src/gpu-driven/view-gpu.ts +188 -41
  632. package/src/gpu-resource.ts +21 -2
  633. package/src/gpu-scene-schema.ts +61 -11
  634. package/src/gpu-scene.ts +197 -99
  635. package/src/gpu-texture-usage.ts +1 -0
  636. package/src/hdrp-buffers.ts +141 -36
  637. package/src/ibl/IblPipelineCache.ts +5 -0
  638. package/src/ibl/frame-resources.ts +38 -0
  639. package/src/ibl/skylight-bind-group.ts +32 -21
  640. package/src/index.ts +194 -75
  641. package/src/inspection-types.ts +207 -1
  642. package/src/instances-derived-bounds.ts +258 -34
  643. package/src/instances.ts +459 -150
  644. package/src/internal.ts +22 -0
  645. package/src/lifecycle.ts +2 -0
  646. package/src/material-row.ts +194 -0
  647. package/src/materials.ts +44 -8
  648. package/src/pbr-pipeline.ts +172 -19
  649. package/src/pipeline/render-extent.ts +111 -0
  650. package/src/pipeline/standard-build-context.ts +7 -0
  651. package/src/pipeline/standard-forward-lane.ts +74 -29
  652. package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
  653. package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
  654. package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
  655. package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
  656. package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
  657. package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
  658. package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
  659. package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
  660. package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
  661. package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
  662. package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
  663. package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
  664. package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
  665. package/src/pipeline/standard-output/color-transform.ts +124 -0
  666. package/src/pipeline/standard-output/graph.ts +139 -0
  667. package/src/pipeline/standard-output/lut-admission.ts +121 -0
  668. package/src/pipeline/standard-output/lut-gpu.ts +399 -0
  669. package/src/pipeline/standard-output/lut-state.ts +176 -0
  670. package/src/pipeline/standard-output/resources.ts +121 -0
  671. package/src/pipeline/standard-output/types.ts +58 -0
  672. package/src/pipeline/standard-pipeline.ts +232 -70
  673. package/src/pipeline/standard-post.ts +190 -27
  674. package/src/pipeline/standard-profile.ts +2 -1
  675. package/src/pipeline-builder.ts +28 -9
  676. package/src/pipeline-spec-types.ts +4 -0
  677. package/src/pipeline-spec.ts +37 -29
  678. package/src/plugin.ts +4 -0
  679. package/src/points-lines/standard-owner.ts +6 -14
  680. package/src/post-process-errors.ts +26 -18
  681. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
  682. package/src/prepare/extended-lighting/resources.ts +3 -3
  683. package/src/prepare/prepared-graphics-resolver.ts +9 -2
  684. package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
  685. package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
  686. package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
  687. package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
  688. package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
  689. package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
  690. package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
  691. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
  692. package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
  693. package/src/record/dynamic-geometry-consumption.ts +59 -0
  694. package/src/record/frame-lighting.ts +15 -12
  695. package/src/record/frame-snapshot.ts +146 -34
  696. package/src/record/frame-targets.ts +9 -0
  697. package/src/record/frame.ts +838 -170
  698. package/src/record/main-pass-geometry.ts +209 -103
  699. package/src/record/main-pass-material.ts +157 -40
  700. package/src/record/main-pass-sprite-draws.ts +16 -107
  701. package/src/record/main-pass.ts +141 -12
  702. package/src/record/material-uniforms.ts +1 -1
  703. package/src/record/mesh-ssbo.ts +59 -15
  704. package/src/record/prepared-material-bindings.ts +238 -0
  705. package/src/record/recovery-pipeline.ts +69 -90
  706. package/src/record/render-context.ts +123 -24
  707. package/src/record/shadow-pass.ts +1389 -230
  708. package/src/record/skybox-post-pass.ts +14 -3
  709. package/src/record/typed-frame-graph.ts +1064 -47
  710. package/src/record/view-ubo.ts +12 -1
  711. package/src/recovery/render-system-candidate.ts +135 -68
  712. package/src/recovery/render-system-roots.ts +113 -0
  713. package/src/recovery/types.ts +77 -0
  714. package/src/reflection/background.ts +151 -0
  715. package/src/reflection/filter.ts +3 -0
  716. package/src/reflection/projection.ts +16 -6
  717. package/src/reflection/record-owner.ts +308 -140
  718. package/src/render-contract.ts +237 -49
  719. package/src/render-graph-primitives.ts +34 -5
  720. package/src/render-pipeline.ts +90 -2
  721. package/src/render-system-extract-tail.ts +431 -162
  722. package/src/render-system-extract.ts +478 -119
  723. package/src/render-system-projections.ts +241 -0
  724. package/src/render-system.ts +715 -828
  725. package/src/scene/render-scene-types.ts +13 -4
  726. package/src/scene/render-scene.ts +577 -355
  727. package/src/scene/shadow-visibility.ts +21 -0
  728. package/src/ssao-config.ts +25 -8
  729. package/src/ssr/admission.ts +380 -14
  730. package/src/ssr/compose.ts +144 -0
  731. package/src/ssr/errors.ts +48 -0
  732. package/src/ssr/graph.ts +797 -0
  733. package/src/ssr/history.ts +436 -0
  734. package/src/ssr/hiz.ts +124 -0
  735. package/src/ssr/inspection.ts +124 -0
  736. package/src/ssr/resources.ts +202 -0
  737. package/src/ssr/temporal.ts +164 -0
  738. package/src/systems/skin-palette-allocator.ts +495 -148
  739. package/src/systems/skin-palette-types.ts +17 -0
  740. package/src/systems/transparent-dispatch.ts +90 -0
  741. package/src/targets/material-source.ts +34 -0
  742. package/src/temporal/coverage.ts +1 -1
  743. package/src/temporal/frame-coordinator.ts +23 -2
  744. package/src/temporal/gpu.ts +79 -12
  745. package/src/temporal/history.ts +3 -1
  746. package/src/temporal/inspection.ts +2 -1
  747. package/src/temporal/standard-scene-data.ts +10 -2
  748. package/src/temporal/target-coverage-attachment.ts +72 -0
  749. package/src/temporal/temporal-view.ts +11 -2
  750. package/src/temporal/view.ts +12 -2
  751. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
  752. package/src/typed-render-graph-primitives.ts +304 -74
  753. package/src/typed-shadow-passes.ts +122 -12
  754. package/src/volume/component.ts +1 -0
  755. package/src/volume/passes.ts +3 -3
  756. package/src/volume/temporal.ts +10 -0
  757. package/dist/chunk-GE3SDD72.mjs.map +0 -1
  758. package/dist/chunk-GF523LHF.mjs.map +0 -1
  759. package/dist/chunk-IQMKJLNU.mjs.map +0 -1
  760. package/dist/chunk-J52NMQKR.mjs.map +0 -1
  761. package/dist/chunk-J6KACNOH.mjs.map +0 -1
  762. package/dist/chunk-JAASCMXA.mjs.map +0 -1
  763. package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
  764. package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
  765. package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
  766. package/dist/chunk-VSL23LZE.mjs.map +0 -1
  767. package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
  768. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
@@ -43,6 +43,179 @@ export const CAMERA_PROJECTION_PERSPECTIVE = 0;
43
43
  /** Numeric encoding of orthographic projection (schema value for `projection`). */
44
44
  export const CAMERA_PROJECTION_ORTHOGRAPHIC = 1;
45
45
 
46
+ /** Closed public exposure authoring contract shared by all camera routes. */
47
+ export type CameraExposure =
48
+ | { readonly kind: 'manual'; readonly multiplier: number }
49
+ | {
50
+ readonly kind: 'auto';
51
+ readonly fallback: number;
52
+ readonly compensationEv: number;
53
+ readonly rangeEv: readonly [min: number, max: number];
54
+ readonly rates: readonly [up: number, down: number];
55
+ };
56
+
57
+ /** Numeric encoding of manual exposure in the Camera SoA column. */
58
+ export const CAMERA_EXPOSURE_MODE_MANUAL = 0;
59
+ /** Numeric encoding of GPU-adapted exposure in the Camera SoA column. */
60
+ export const CAMERA_EXPOSURE_MODE_AUTO = 1;
61
+
62
+ /** Product-supported white-balance temperature range in Kelvin. */
63
+ export const CAMERA_TEMPERATURE_MIN = 1000;
64
+ export const CAMERA_TEMPERATURE_MAX = 40000;
65
+ /** Product-supported normalized tint range. */
66
+ export const CAMERA_TINT_MIN = -1;
67
+ export const CAMERA_TINT_MAX = 1;
68
+
69
+ /** Closed validation failures for the Camera authoring/column boundary. */
70
+ export type CameraErrorCode =
71
+ | 'camera-exposure-invalid'
72
+ | 'camera-color-grading-invalid'
73
+ | 'camera-exposure-mode-invalid'
74
+ | 'camera-tonemap-invalid'
75
+ | 'camera-antialias-invalid'
76
+ | 'camera-bloom-invalid';
77
+
78
+ export interface CameraErrorDetail {
79
+ readonly field: string;
80
+ readonly actual: number | string;
81
+ readonly expected: string;
82
+ }
83
+
84
+ /** Structured Camera error; callers can branch on the closed `code` union. */
85
+ export class CameraError<Code extends CameraErrorCode = CameraErrorCode> extends Error {
86
+ readonly code: Code;
87
+ readonly expected: string;
88
+ readonly hint: string;
89
+ readonly detail: CameraErrorDetail;
90
+
91
+ constructor(code: Code, field: string, actual: number | string, expected: string, hint: string) {
92
+ super(`${code}: ${field}=${String(actual)}; expected ${expected}`);
93
+ this.name = 'CameraError';
94
+ this.code = code;
95
+ this.expected = expected;
96
+ this.hint = hint;
97
+ this.detail = Object.freeze({ field, actual, expected });
98
+ }
99
+ }
100
+
101
+ function actualValue(value: unknown): number | string {
102
+ if (typeof value === 'number' || typeof value === 'string') return value;
103
+ try {
104
+ return JSON.stringify(value) ?? String(value);
105
+ } catch {
106
+ return String(value);
107
+ }
108
+ }
109
+
110
+ function cameraError<Code extends CameraErrorCode>(
111
+ code: Code,
112
+ field: string,
113
+ actual: unknown,
114
+ expected: string,
115
+ hint: string,
116
+ ): CameraError<Code> {
117
+ return new CameraError(code, field, actualValue(actual), expected, hint);
118
+ }
119
+
120
+ function finitePositive(value: number): boolean {
121
+ return Number.isFinite(value) && value > 0;
122
+ }
123
+
124
+ /** Validate the closed exposure union before it is projected into columns. */
125
+ export function validateCameraExposure(exposure: CameraExposure): CameraExposure {
126
+ if (typeof exposure !== 'object' || exposure === null) {
127
+ throw cameraError(
128
+ 'camera-exposure-invalid',
129
+ 'value',
130
+ exposure,
131
+ 'an object with kind manual or auto',
132
+ 'choose one member of the CameraExposure union',
133
+ );
134
+ }
135
+ if (exposure.kind === 'manual') {
136
+ if (!finitePositive(exposure.multiplier)) {
137
+ throw cameraError(
138
+ 'camera-exposure-invalid',
139
+ 'multiplier',
140
+ exposure.multiplier,
141
+ 'a finite number greater than zero',
142
+ 'set Camera.exposure to a positive finite manual multiplier',
143
+ );
144
+ }
145
+ return exposure;
146
+ }
147
+ if (exposure.kind === 'auto') {
148
+ const [min, max] = exposure.rangeEv;
149
+ const [up, down] = exposure.rates;
150
+ if (
151
+ !finitePositive(exposure.fallback) ||
152
+ !Number.isFinite(exposure.compensationEv) ||
153
+ !Number.isFinite(min) ||
154
+ !Number.isFinite(max) ||
155
+ min > max ||
156
+ !Number.isFinite(up) ||
157
+ !Number.isFinite(down) ||
158
+ up < 0 ||
159
+ down < 0
160
+ ) {
161
+ throw cameraError(
162
+ 'camera-exposure-invalid',
163
+ 'auto',
164
+ JSON.stringify(exposure),
165
+ 'finite fallback/compensation, an ordered range, and non-negative rates',
166
+ 'inspect fallback, compensationEv, rangeEv, and rates before rebuilding the camera',
167
+ );
168
+ }
169
+ return exposure;
170
+ }
171
+ throw cameraError(
172
+ 'camera-exposure-invalid',
173
+ 'kind',
174
+ (exposure as { readonly kind?: unknown }).kind,
175
+ "'manual' or 'auto'",
176
+ 'choose one member of the CameraExposure union',
177
+ );
178
+ }
179
+
180
+ /** Validate the Camera-owned white-balance and LUT authoring fields. */
181
+ export function validateCameraColorGrading(
182
+ temperature: number,
183
+ tint: number,
184
+ colorLutStrength: number,
185
+ ): void {
186
+ if (
187
+ !Number.isFinite(temperature) ||
188
+ temperature < CAMERA_TEMPERATURE_MIN ||
189
+ temperature > CAMERA_TEMPERATURE_MAX
190
+ ) {
191
+ throw cameraError(
192
+ 'camera-color-grading-invalid',
193
+ 'temperature',
194
+ temperature,
195
+ `a finite value in [${CAMERA_TEMPERATURE_MIN}, ${CAMERA_TEMPERATURE_MAX}]`,
196
+ 'set Camera.temperature to a supported Kelvin value',
197
+ );
198
+ }
199
+ if (!Number.isFinite(tint) || tint < CAMERA_TINT_MIN || tint > CAMERA_TINT_MAX) {
200
+ throw cameraError(
201
+ 'camera-color-grading-invalid',
202
+ 'tint',
203
+ tint,
204
+ `a finite value in [${CAMERA_TINT_MIN}, ${CAMERA_TINT_MAX}]`,
205
+ 'set Camera.tint to a normalized value between -1 and 1',
206
+ );
207
+ }
208
+ if (!Number.isFinite(colorLutStrength) || colorLutStrength < 0 || colorLutStrength > 1) {
209
+ throw cameraError(
210
+ 'camera-color-grading-invalid',
211
+ 'colorLutStrength',
212
+ colorLutStrength,
213
+ 'a finite value in [0, 1]',
214
+ 'set Camera.colorLutStrength to zero to disable the LUT or a blend in [0, 1]',
215
+ );
216
+ }
217
+ }
218
+
46
219
  /**
47
220
  * Map a `camera.projection` numeric value to the closed `CameraProjection`
48
221
  * string-literal union. Values other than 0 / 1 fall back to `'perspective'`
@@ -152,7 +325,13 @@ export function tonemapToU32(mode: Tonemap): number {
152
325
  case 'none':
153
326
  return TONEMAP_NONE;
154
327
  }
155
- throw new RangeError(`Invalid tonemap mode: ${String(mode)}.`);
328
+ throw cameraError(
329
+ 'camera-tonemap-invalid',
330
+ 'tonemap',
331
+ mode,
332
+ 'one of the closed Tonemap values',
333
+ 'select a supported Camera tonemap mode',
334
+ );
156
335
  }
157
336
 
158
337
  /**
@@ -192,8 +371,12 @@ export function antialiasFromF32(value: number): Antialias {
192
371
  if (value === ANTIALIAS_FXAA) return 'fxaa';
193
372
  if (value === ANTIALIAS_MSAA) return 'msaa';
194
373
  if (value === ANTIALIAS_TAA) return 'taa';
195
- throw new RangeError(
196
- `Invalid antialias value: ${value}. Expected ${ANTIALIAS_NONE} (none), ${ANTIALIAS_FXAA} (fxaa), ${ANTIALIAS_MSAA} (msaa), or ${ANTIALIAS_TAA} (taa).`,
374
+ throw cameraError(
375
+ 'camera-antialias-invalid',
376
+ 'antialias',
377
+ value,
378
+ `${ANTIALIAS_NONE}, ${ANTIALIAS_FXAA}, ${ANTIALIAS_MSAA}, or ${ANTIALIAS_TAA}`,
379
+ 'select a supported Camera antialias mode',
197
380
  );
198
381
  }
199
382
 
@@ -205,8 +388,8 @@ export function antialiasFromF32(value: number): Antialias {
205
388
  * `'off'` - default; no bloom post-processing (zero-overhead opt-out path)
206
389
  * `'on'` - bloom bright-pass + separable blur + composite pipeline
207
390
  *
208
- * Bloom is a discrete enum (0/1) — illegal values fail-fast with RangeError
209
- * (charter P3), matching antialiasFromF32 precedent.
391
+ * Bloom is a discrete enum (0/1) — illegal values fail-fast with the closed
392
+ * CameraError contract (charter P3), matching antialiasFromF32 precedent.
210
393
  */
211
394
  export type BloomEnabled = 'off' | 'on';
212
395
 
@@ -222,8 +405,12 @@ export const BLOOM_ENABLED = 1;
222
405
  export function bloomEnabledFromF32(value: number): BloomEnabled {
223
406
  if (value === BLOOM_DISABLED) return 'off';
224
407
  if (value === BLOOM_ENABLED) return 'on';
225
- throw new RangeError(
226
- `Invalid bloom value: ${value}. Expected ${BLOOM_DISABLED} (off) or ${BLOOM_ENABLED} (on).`,
408
+ throw cameraError(
409
+ 'camera-bloom-invalid',
410
+ 'bloom',
411
+ value,
412
+ `${BLOOM_DISABLED} or ${BLOOM_ENABLED}`,
413
+ 'select Camera bloom off or on',
227
414
  );
228
415
  }
229
416
 
@@ -313,7 +500,15 @@ export const Camera = defineComponent('Camera', {
313
500
  top: { type: 'f32', default: 1 },
314
501
  tonemap: { type: 'f32', default: 0 },
315
502
  exposure: { type: 'f32', default: 1.0 },
503
+ exposureMode: { type: 'f32', default: CAMERA_EXPOSURE_MODE_MANUAL },
504
+ compensationEv: { type: 'f32', default: 0 },
505
+ rangeEv: { type: 'array<f32, 2>', default: new Float32Array([-8, 8]) },
506
+ rates: { type: 'array<f32, 2>', default: new Float32Array([3, 1]) },
316
507
  whitePoint: { type: 'f32', default: 4.0 },
508
+ temperature: { type: 'f32', default: 6504 },
509
+ tint: { type: 'f32', default: 0 },
510
+ colorLut: { type: 'shared<TextureAsset>', default: 0 as never },
511
+ colorLutStrength: { type: 'f32', default: 0 },
317
512
  antialias: { type: 'f32', default: 0 },
318
513
  historyVersion: { type: 'u32', default: 0 },
319
514
  bloom: { type: 'f32', default: 0 },
@@ -356,6 +551,79 @@ export const Camera = defineComponent('Camera', {
356
551
  export type CameraData = ShapeOf<SchemaOf<typeof Camera>>;
357
552
  type CameraPod = CameraData;
358
553
 
554
+ /** Project the Camera SoA columns back into the public closed union. */
555
+ export function cameraExposureFromColumns(
556
+ input: Pick<CameraData, 'exposureMode' | 'exposure' | 'compensationEv' | 'rangeEv' | 'rates'>,
557
+ ): CameraExposure {
558
+ if (input.exposureMode === CAMERA_EXPOSURE_MODE_MANUAL) {
559
+ return validateCameraExposure({ kind: 'manual', multiplier: input.exposure });
560
+ }
561
+ if (input.exposureMode === CAMERA_EXPOSURE_MODE_AUTO) {
562
+ return validateCameraExposure({
563
+ kind: 'auto',
564
+ fallback: input.exposure,
565
+ compensationEv: input.compensationEv,
566
+ rangeEv: [input.rangeEv[0] ?? -8, input.rangeEv[1] ?? 8],
567
+ rates: [input.rates[0] ?? 3, input.rates[1] ?? 1],
568
+ });
569
+ }
570
+ throw cameraError(
571
+ 'camera-exposure-mode-invalid',
572
+ 'exposureMode',
573
+ input.exposureMode,
574
+ `${CAMERA_EXPOSURE_MODE_MANUAL} or ${CAMERA_EXPOSURE_MODE_AUTO}`,
575
+ 'set Camera.exposureMode to the manual or auto encoding',
576
+ );
577
+ }
578
+
579
+ function cameraExposureColumns(
580
+ exposure: CameraExposure,
581
+ ): Pick<CameraData, 'exposureMode' | 'exposure' | 'compensationEv' | 'rangeEv' | 'rates'> {
582
+ const checked = validateCameraExposure(exposure);
583
+ if (checked.kind === 'manual') {
584
+ return {
585
+ exposureMode: CAMERA_EXPOSURE_MODE_MANUAL,
586
+ exposure: checked.multiplier,
587
+ compensationEv: 0,
588
+ rangeEv: new Float32Array([-8, 8]),
589
+ rates: new Float32Array([3, 1]),
590
+ };
591
+ }
592
+ return {
593
+ exposureMode: CAMERA_EXPOSURE_MODE_AUTO,
594
+ exposure: checked.fallback,
595
+ compensationEv: checked.compensationEv,
596
+ rangeEv: new Float32Array(checked.rangeEv),
597
+ rates: new Float32Array(checked.rates),
598
+ };
599
+ }
600
+
601
+ interface CameraColorGradingOpts {
602
+ exposure?: CameraExposure;
603
+ temperature?: number;
604
+ tint?: number;
605
+ colorLut?: CameraPod['colorLut'];
606
+ colorLutStrength?: number;
607
+ }
608
+
609
+ function cameraColorGradingColumns(
610
+ opts: CameraColorGradingOpts,
611
+ ): ReturnType<typeof cameraExposureColumns> &
612
+ Pick<CameraData, 'temperature' | 'tint' | 'colorLut' | 'colorLutStrength'> {
613
+ const exposure = opts.exposure ?? { kind: 'manual', multiplier: 1 };
614
+ const temperature = opts.temperature ?? 6504;
615
+ const tint = opts.tint ?? 0;
616
+ const colorLutStrength = opts.colorLutStrength ?? 0;
617
+ validateCameraColorGrading(temperature, tint, colorLutStrength);
618
+ return {
619
+ ...cameraExposureColumns(exposure),
620
+ temperature,
621
+ tint,
622
+ colorLut: opts.colorLut ?? (0 as CameraPod['colorLut']),
623
+ colorLutStrength,
624
+ };
625
+ }
626
+
359
627
  // ─── Camera factory functions (w13 SSOT refactoring) ─────────────────────
360
628
  //
361
629
  // Standalone factory functions that return 20-field CameraPod objects
@@ -396,6 +664,11 @@ interface CameraPerspectiveOpts {
396
664
  * receive aspect-sync regardless of this flag.
397
665
  */
398
666
  autoAspect?: boolean;
667
+ exposure?: CameraExposure;
668
+ temperature?: number;
669
+ tint?: number;
670
+ colorLut?: CameraPod['colorLut'];
671
+ colorLutStrength?: number;
399
672
  }
400
673
 
401
674
  interface CameraOrthographicOpts {
@@ -405,6 +678,11 @@ interface CameraOrthographicOpts {
405
678
  top: number;
406
679
  near?: number;
407
680
  far?: number;
681
+ exposure?: CameraExposure;
682
+ temperature?: number;
683
+ tint?: number;
684
+ colorLut?: CameraPod['colorLut'];
685
+ colorLutStrength?: number;
408
686
  }
409
687
 
410
688
  /**
@@ -474,6 +752,7 @@ export function perspective(opts: CameraPerspectiveOpts): CameraPod {
474
752
  far: opts.far ?? 100,
475
753
  projection: CAMERA_PROJECTION_PERSPECTIVE,
476
754
  ...(opts.autoAspect !== undefined ? { autoAspect: opts.autoAspect } : {}),
755
+ ...cameraColorGradingColumns(opts),
477
756
  };
478
757
  }
479
758
 
@@ -513,5 +792,6 @@ export function orthographic(opts: CameraOrthographicOpts): CameraPod {
513
792
  right: opts.right,
514
793
  bottom: opts.bottom,
515
794
  top: opts.top,
795
+ ...cameraColorGradingColumns(opts),
516
796
  };
517
797
  }
@@ -60,8 +60,8 @@ export {
60
60
  * splitLambda ∈ [0,1] — PSSM split weight (default 0.75)
61
61
  * cascadeBlend ∈ [0,0.5] — blend width between cascades (default 0.2)
62
62
  * mapSize >= 1 — shadow map resolution (default 2048)
63
- * depthBias — shadow acne bias (default 0.005)
64
- * normalBias — shadow acne normal offset (default 0.05)
63
+ * depthBias — normalized receiver depth subtraction (default 0.00001)
64
+ * normalBias — world-space receiver normal offset (default 0.05)
65
65
  * shadowDistance > 0 — how far shadows reach in front of the camera,
66
66
  * in world units (default 200). This is the sole
67
67
  * coverage knob: the CSM cascades are PSSM-split
@@ -123,7 +123,7 @@ export const DirectionalLight = defineComponent('DirectionalLight', {
123
123
  splitLambda: { type: 'f32', default: 0.75 },
124
124
  cascadeBlend: { type: 'f32', default: 0.2 },
125
125
  mapSize: { type: 'f32', default: 2048 },
126
- depthBias: { type: 'f32', default: 0.005 },
126
+ depthBias: { type: 'f32', default: 0.00001 },
127
127
  normalBias: { type: 'f32', default: 0.05 },
128
128
  // Sole shadow coverage knob (feat replaces nearPlane/farPlane). The PSSM
129
129
  // near end derives from the active camera near; shadowDistance is the far
@@ -0,0 +1,67 @@
1
+ import { defineComponent, type SchemaOf, type ShapeOf } from '@forgeax/engine-ecs';
2
+ import { err, ok, type Result } from '@forgeax/engine-types';
3
+ import {
4
+ type DynamicResolutionError,
5
+ DynamicResolutionInvalidParameterError,
6
+ DynamicResolutionRequiresTaaError,
7
+ } from '../errors/render';
8
+
9
+ /** Optional Camera companion that enables fixed or adaptive internal scaling. */
10
+ export const DynamicResolution = defineComponent('DynamicResolution', {
11
+ targetGpuMs: { type: 'f32', default: 16.67 },
12
+ minScale: { type: 'f32', default: 0.67 },
13
+ maxScale: { type: 'f32', default: 1.0 },
14
+ });
15
+
16
+ export type DynamicResolutionData = ShapeOf<SchemaOf<typeof DynamicResolution>>;
17
+
18
+ const DEFAULT_DYNAMIC_RESOLUTION: DynamicResolutionData = Object.freeze({
19
+ targetGpuMs: 16.67,
20
+ minScale: 0.67,
21
+ maxScale: 1,
22
+ });
23
+
24
+ function invalid(
25
+ field: 'targetGpuMs' | 'minScale' | 'maxScale',
26
+ value: number,
27
+ expected: string,
28
+ ): DynamicResolutionInvalidParameterError {
29
+ return new DynamicResolutionInvalidParameterError({ field, value, expected });
30
+ }
31
+
32
+ /** Validate one detached DynamicResolution authoring POD before graph work. */
33
+ export function validateDynamicResolutionParameters(
34
+ input: Partial<DynamicResolutionData> | undefined,
35
+ ): Result<DynamicResolutionData, DynamicResolutionInvalidParameterError> {
36
+ const value = input ?? {};
37
+ const targetGpuMs = value.targetGpuMs ?? DEFAULT_DYNAMIC_RESOLUTION.targetGpuMs;
38
+ const minScale = value.minScale ?? DEFAULT_DYNAMIC_RESOLUTION.minScale;
39
+ const maxScale = value.maxScale ?? DEFAULT_DYNAMIC_RESOLUTION.maxScale;
40
+ if (!Number.isFinite(targetGpuMs) || targetGpuMs <= 0) {
41
+ return err(invalid('targetGpuMs', targetGpuMs, 'finite and greater than 0'));
42
+ }
43
+ if (!Number.isFinite(minScale) || minScale < 0.5 || minScale > 1) {
44
+ return err(invalid('minScale', minScale, 'finite and in [0.5, 1.0]'));
45
+ }
46
+ if (!Number.isFinite(maxScale) || maxScale < 0.5 || maxScale > 1) {
47
+ return err(invalid('maxScale', maxScale, 'finite and in [0.5, 1.0]'));
48
+ }
49
+ if (minScale > maxScale) {
50
+ return err(invalid('minScale', minScale, 'less than or equal to maxScale'));
51
+ }
52
+ return ok(Object.freeze({ targetGpuMs, minScale, maxScale }));
53
+ }
54
+
55
+ /** Validate the Camera companion relationship at the extraction boundary. */
56
+ export function validateDynamicResolutionCamera(
57
+ input: Partial<DynamicResolutionData> | undefined,
58
+ antialias: 'none' | 'fxaa' | 'msaa' | 'taa',
59
+ ): Result<DynamicResolutionData | undefined, DynamicResolutionError> {
60
+ if (input === undefined) return ok(undefined);
61
+ const parameters = validateDynamicResolutionParameters(input);
62
+ if (!parameters.ok) return parameters;
63
+ if (antialias !== 'taa') {
64
+ return err(new DynamicResolutionRequiresTaaError({ antialias }));
65
+ }
66
+ return parameters;
67
+ }
@@ -2,6 +2,7 @@ export * from './atmosphere';
2
2
  export * from './camera';
3
3
  export * from './cube-camera';
4
4
  export * from './directional-light';
5
+ export * from './dynamic-resolution';
5
6
  export * from './fog';
6
7
  export { Instances, type InstancesData } from './instances';
7
8
  export { Layer } from './layer';
@@ -27,6 +28,7 @@ export {
27
28
  type SceneInstanceOverrideRecord,
28
29
  type SceneInstanceState,
29
30
  } from './scene-instance';
31
+ export * from './screen-space-reflection';
30
32
  export {
31
33
  SKYBOX_MODE_CUBEMAP,
32
34
  SkyboxBackground,
@@ -1,23 +1,50 @@
1
+ // @forgeax/engine-render - renderer-owned large instance association.
2
+ //
3
+ // The ECS component deliberately carries only a stable collection identity.
4
+ // Matrix bytes, revision, capacity, dirty ranges, GPU residency and fallback
5
+ // policy belong to InstanceCollectionStore, exposed from the same Renderer.
6
+ // This keeps large payloads out of the ECS managed BufferPool while retaining
7
+ // ordinary query and entity-lifetime semantics.
8
+ //
9
+ // Authoring example:
10
+ //
11
+ // const transforms = new Float32Array(instanceCount * 16);
12
+ // for (let index = 0; index < instanceCount; index += 1) {
13
+ // const offset = index * 16;
14
+ // transforms[offset] = 1;
15
+ // transforms[offset + 5] = 1;
16
+ // transforms[offset + 10] = 1;
17
+ // transforms[offset + 15] = 1;
18
+ // }
19
+ // const collection = renderer.instances.create({
20
+ // transforms,
21
+ // }).unwrap();
22
+ // world.spawn(
23
+ // { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
24
+ // { component: MeshRenderer, data: {} },
25
+ // { component: Instances, data: { collectionId: collection.collectionId } },
26
+ // );
27
+ //
28
+ // Updates stay on the renderer owner and publish one revision:
29
+ //
30
+ // renderer.instances.update(collection.collectionId, {
31
+ // start: 12,
32
+ // transforms: patch,
33
+ // });
34
+ //
35
+ // Render extraction snapshots the validated packed column-major matrices once
36
+ // per frame. Direct, GPU-driven and fallback lanes consume that same detached
37
+ // projection; callers never split one logical collection into ECS chunks.
38
+
1
39
  import { defineComponent } from '@forgeax/engine-ecs';
40
+ import type { InstanceCollectionData } from '../instances';
2
41
 
3
- /**
4
- * World-owned local transforms for one explicit instanced renderable.
5
- * Packed column-major mat4 values compose as entityWorld * instanceLocal.
6
- * ECS owns copying, mutation and entity lifetime, including large arrays.
7
- * Renderer extraction derives its own snapshot and GPU residency; neither
8
- * authoring nor glTF SceneAsset lowering requires a Renderer identity.
9
- *
10
- * @example
11
- * const transforms = new Float32Array(20_000 * 16);
12
- * for (let i = 0; i < 20_000; i++) {
13
- * transforms[i * 16] = transforms[i * 16 + 5] =
14
- * transforms[i * 16 + 10] = transforms[i * 16 + 15] = 1;
15
- * }
16
- * const entity = world.spawn({ component: Instances, data: { transforms } }).unwrap();
17
- * world.set(entity, Instances, { transforms }).unwrap();
18
- */
42
+ /** Per-entity association with a renderer-owned instance collection. */
19
43
  export const Instances = defineComponent('Instances', {
20
- transforms: { type: 'array<f32>' },
44
+ collectionId: { type: 'u32', default: 0 },
21
45
  });
22
46
 
23
- export type InstancesData = { readonly transforms: Float32Array };
47
+ /** Type-level hint for the `data` object at the Instances spawn site. */
48
+ export type InstancesData = InstanceCollectionData;
49
+
50
+ export type { InstanceCollectionId } from '../instances';
@@ -149,7 +149,12 @@ export function validateDirectionalLightData(
149
149
  }),
150
150
  );
151
151
  }
152
- if (shadowAngularRadius < PCSS_RADIUS_MIN || shadowAngularRadius > PCSS_RADIUS_MAX) {
152
+ // ECS stores this field as f32; both authored endpoints round outward.
153
+ // Accept their stored representations, but not the adjacent out-of-range f32.
154
+ if (
155
+ shadowAngularRadius < Math.fround(PCSS_RADIUS_MIN) ||
156
+ shadowAngularRadius > Math.fround(PCSS_RADIUS_MAX)
157
+ ) {
153
158
  return err(
154
159
  new ShadowInvalidConfigError('shadowAngularRadius', shadowAngularRadius, {
155
160
  kind: 'range',
@@ -40,6 +40,7 @@ export function reflectionProbeUpdateIntentToF32(intent: ReflectionProbeUpdateIn
40
40
  export const ReflectionProbe = defineComponent('ReflectionProbe', {
41
41
  halfExtents: { type: 'array<f32, 3>', default: new Float32Array([1, 1, 1]) },
42
42
  priority: { type: 'f32', default: 0 },
43
+ boxProjection: { type: 'bool', default: false },
43
44
  intensity: { type: 'f32', default: 1 },
44
45
  resolution: { type: 'u32', default: 256 },
45
46
  updateIntent: { type: 'f32', default: REFLECTION_PROBE_UPDATE_ONCE },
@@ -37,7 +37,8 @@
37
37
  // `world.get(root, SceneInstance)` path as another component)
38
38
 
39
39
  import { defineComponent, type EntityHandle } from '@forgeax/engine-ecs';
40
- import type { LocalEntityId, MountOverride } from '@forgeax/engine-types';
40
+ import type { MountOverride } from '@forgeax/engine-scene';
41
+ import type { LocalEntityId } from '@forgeax/engine-types';
41
42
 
42
43
  /**
43
44
  * Per-component, per-field override record carried in `SceneInstanceState`.
@@ -0,0 +1,21 @@
1
+ // @forgeax/engine-render - ScreenSpaceReflection authoring component.
2
+ //
3
+ // The component is an opt-in camera effect. It carries only the three
4
+ // bounded authoring values; all graph, resource, history, and backend state
5
+ // remains renderer-owned.
6
+
7
+ import { defineComponent, type SchemaOf, type ShapeOf } from '@forgeax/engine-ecs';
8
+
9
+ /**
10
+ * Schema-derived ScreenSpaceReflection authoring data.
11
+ *
12
+ * The defaults are conservative and are validated against the active camera
13
+ * view range before a spatial candidate is admitted.
14
+ */
15
+ export const ScreenSpaceReflection = defineComponent('ScreenSpaceReflection', {
16
+ maxDistance: { type: 'f32', default: 40 },
17
+ thickness: { type: 'f32', default: 0.2 },
18
+ maxRoughness: { type: 'f32', default: 0.6 },
19
+ });
20
+
21
+ export type ScreenSpaceReflectionData = ShapeOf<SchemaOf<typeof ScreenSpaceReflection>>;
@@ -40,7 +40,10 @@ import { defineComponent } from '@forgeax/engine-ecs';
40
40
  * Skylight ambient environment light.
41
41
  *
42
42
  * A single Skylight entity provides ambient lighting for all StandardMaterial
43
- * surfaces. Two modes share one component:
43
+ * surfaces. When Atmosphere is selected and equirect is omitted, the same sky
44
+ * cube supplies diffuse and roughness-filtered specular IBL. Color/intensity
45
+ * still scale the result; without Atmosphere the solid-color behavior applies.
46
+ * Two authored inputs share one component:
44
47
  *
45
48
  * - **Solid-color ambient (no equirect).** Omit `equirect` for a constant
46
49
  * ambient = `color` * `intensity` applied immediately, with no async GPU
@@ -31,8 +31,8 @@
31
31
  // Why array<f32> (variable) and not array<f32, N> (fixed) for regions?
32
32
  // The length `frameCount * 4` is data-dependent: `frameCount` is itself a
33
33
  // per-entity column read at runtime, not a schema-time literal. Same
34
- // shape as M1 `Instances.transforms: 'array<f32>'` whose length depends
35
- // on the live instance count; D-6 codifies the precedent.
34
+ // shape as the renderer-owned 3D instance collection snapshot whose length
35
+ // depends on the live instance count; the owners remain separate.
36
36
  //
37
37
  // dt accumulator clock model (requirements section 2.5 q6 + plan-strategy
38
38
  // section 2 D-5):
@@ -41,7 +41,7 @@
41
41
  // composes per instance:
42
42
  // world_position[i] = entity_world * instances_local[i] * vertex_position
43
43
  // `SpriteInstances.transforms[i*16..i*16+15]` is interpreted as a local-
44
- // space transform under the entity, exactly like `Instances.transforms`.
44
+ // space transform under the entity, matching the 3D collection projection.
45
45
  // Set the entity's `Transform` to identity to make `instances_local[i]`
46
46
  // directly world-space.
47
47
  //