@forgeax/engine-render 0.1.32 → 0.1.33

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 (250) hide show
  1. package/README.md +379 -33
  2. package/dist/assembly/analytic-fog-registration.d.ts +3 -0
  3. package/dist/assembly/analytic-fog-registration.d.ts.map +1 -0
  4. package/dist/assembly/fxaa-registration.d.ts +4 -0
  5. package/dist/assembly/fxaa-registration.d.ts.map +1 -0
  6. package/dist/assembly/lod-observation.d.ts +4 -0
  7. package/dist/assembly/lod-observation.d.ts.map +1 -0
  8. package/dist/assembly/motion-blur-registration.d.ts +3 -0
  9. package/dist/assembly/motion-blur-registration.d.ts.map +1 -0
  10. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  11. package/dist/assembly/temporal-post-process-prewarm.d.ts +13 -0
  12. package/dist/assembly/temporal-post-process-prewarm.d.ts.map +1 -0
  13. package/dist/assembly/webgpu-ready-contract.d.ts +4 -3
  14. package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -1
  15. package/dist/assembly/webgpu-ready.d.ts +1 -1
  16. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  17. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  18. package/dist/bloom-admission.d.ts +13 -0
  19. package/dist/bloom-admission.d.ts.map +1 -0
  20. package/dist/{chunk-DRR7D3KX.mjs → chunk-3RTCJTH4.mjs} +12 -9
  21. package/dist/chunk-3RTCJTH4.mjs.map +1 -0
  22. package/dist/{chunk-S665NJNF.mjs → chunk-LEAXOMYJ.mjs} +3 -3
  23. package/dist/{chunk-S665NJNF.mjs.map → chunk-LEAXOMYJ.mjs.map} +1 -1
  24. package/dist/{chunk-6TFBXLRJ.mjs → chunk-NB2S7ZRX.mjs} +155 -11
  25. package/dist/chunk-NB2S7ZRX.mjs.map +1 -0
  26. package/dist/{chunk-LULCA3OF.mjs → chunk-NNQL7CB3.mjs} +4 -4
  27. package/dist/{chunk-LULCA3OF.mjs.map → chunk-NNQL7CB3.mjs.map} +1 -1
  28. package/dist/{chunk-4NNZQCL3.mjs → chunk-OO3DRYK7.mjs} +66 -200
  29. package/dist/chunk-OO3DRYK7.mjs.map +1 -0
  30. package/dist/{chunk-GWCEMDVR.mjs → chunk-PLAXOOX5.mjs} +232 -7
  31. package/dist/chunk-PLAXOOX5.mjs.map +1 -0
  32. package/dist/{chunk-JRIPCMYC.mjs → chunk-VOZWDM3L.mjs} +283 -193
  33. package/dist/chunk-VOZWDM3L.mjs.map +1 -0
  34. package/dist/{chunk-JCIRYQ4V.mjs → chunk-ZDQWGQW7.mjs} +10 -4
  35. package/dist/chunk-ZDQWGQW7.mjs.map +1 -0
  36. package/dist/components/atmosphere.d.ts +2 -0
  37. package/dist/components/atmosphere.d.ts.map +1 -1
  38. package/dist/components/camera.d.ts +20 -4
  39. package/dist/components/camera.d.ts.map +1 -1
  40. package/dist/components/mesh-filter.d.ts +6 -5
  41. package/dist/components/mesh-filter.d.ts.map +1 -1
  42. package/dist/components/motion-blur.d.ts +1 -0
  43. package/dist/components/motion-blur.d.ts.map +1 -1
  44. package/dist/construct-renderer.mjs +2865 -526
  45. package/dist/construct-renderer.mjs.map +1 -1
  46. package/dist/device/gpu-residency.d.ts +6 -0
  47. package/dist/device/gpu-residency.d.ts.map +1 -1
  48. package/dist/environment/analytic-fog.d.ts +6 -0
  49. package/dist/environment/analytic-fog.d.ts.map +1 -0
  50. package/dist/errors/render.d.ts +6 -2
  51. package/dist/errors/render.d.ts.map +1 -1
  52. package/dist/extract/camera.d.ts.map +1 -1
  53. package/dist/extract/contracts.d.ts +7 -0
  54. package/dist/extract/contracts.d.ts.map +1 -1
  55. package/dist/extract/environment.d.ts +2 -0
  56. package/dist/extract/environment.d.ts.map +1 -1
  57. package/dist/features/error-reporting.d.ts +13 -0
  58. package/dist/features/error-reporting.d.ts.map +1 -0
  59. package/dist/features/host.d.ts +5 -0
  60. package/dist/features/host.d.ts.map +1 -1
  61. package/dist/features/motion-blur/motion-blur-feature.d.ts +20 -2
  62. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -1
  63. package/dist/features/motion-blur/motion-blur-params.d.ts +21 -0
  64. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -1
  65. package/dist/features/motion-blur/motion-blur-runtime.d.ts +54 -0
  66. package/dist/features/motion-blur/motion-blur-runtime.d.ts.map +1 -0
  67. package/dist/features/plan.d.ts +7 -4
  68. package/dist/features/plan.d.ts.map +1 -1
  69. package/dist/features/prepared-gpu-work.d.ts +9 -5
  70. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  71. package/dist/features/render-graph-compute.d.ts.map +1 -1
  72. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  73. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
  74. package/dist/gpu-driven/prepared-draw.d.ts +7 -0
  75. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  76. package/dist/gpu-driven/production-raster.d.ts +3 -1
  77. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  78. package/dist/gpu-driven/view-gpu.d.ts +9 -0
  79. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  80. package/dist/gpu-scene.d.ts +6 -1
  81. package/dist/gpu-scene.d.ts.map +1 -1
  82. package/dist/index.d.ts +5 -2
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.mjs +5 -5
  85. package/dist/inspection-types.d.ts +43 -2
  86. package/dist/inspection-types.d.ts.map +1 -1
  87. package/dist/instances.d.ts +8 -1
  88. package/dist/instances.d.ts.map +1 -1
  89. package/dist/internal.mjs +6 -6
  90. package/dist/pipeline/standard-post.d.ts +28 -19
  91. package/dist/pipeline/standard-post.d.ts.map +1 -1
  92. package/dist/pipeline-spec.d.ts +2 -2
  93. package/dist/record/frame-snapshot.d.ts +3 -0
  94. package/dist/record/frame-snapshot.d.ts.map +1 -1
  95. package/dist/record/frame-targets.d.ts.map +1 -1
  96. package/dist/record/frame.d.ts +5 -2
  97. package/dist/record/frame.d.ts.map +1 -1
  98. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  99. package/dist/record/mesh-ssbo.d.ts +6 -5
  100. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  101. package/dist/record/render-context.d.ts +12 -28
  102. package/dist/record/render-context.d.ts.map +1 -1
  103. package/dist/record/shadow-pass.d.ts.map +1 -1
  104. package/dist/record/skybox-post-pass.d.ts +5 -3
  105. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  106. package/dist/record/typed-frame-graph.d.ts +1 -1
  107. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  108. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  109. package/dist/render-contract.d.ts +24 -4
  110. package/dist/render-contract.d.ts.map +1 -1
  111. package/dist/render-pipeline.d.ts +3 -1
  112. package/dist/render-pipeline.d.ts.map +1 -1
  113. package/dist/render-system-extract-tail.d.ts.map +1 -1
  114. package/dist/render-system-extract.d.ts +8 -1
  115. package/dist/render-system-extract.d.ts.map +1 -1
  116. package/dist/render-system.d.ts +7 -1
  117. package/dist/render-system.d.ts.map +1 -1
  118. package/dist/scene/render-scene.d.ts +2 -0
  119. package/dist/scene/render-scene.d.ts.map +1 -1
  120. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  121. package/dist/temporal/frame.d.ts +7 -0
  122. package/dist/temporal/frame.d.ts.map +1 -1
  123. package/dist/temporal/index.mjs +5 -5
  124. package/dist/temporal/view.d.ts +6 -1
  125. package/dist/temporal/view.d.ts.map +1 -1
  126. package/dist/typed-render-graph-primitives.d.ts +10 -7
  127. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  128. package/dist/volume/component.d.ts +0 -1
  129. package/dist/volume/component.d.ts.map +1 -1
  130. package/dist/volume/passes.d.ts.map +1 -1
  131. package/dist/volume/temporal.d.ts +3 -1
  132. package/dist/volume/temporal.d.ts.map +1 -1
  133. package/package.json +21 -21
  134. package/src/__tests__/analytic-fog-graph.unit.test.ts +199 -0
  135. package/src/__tests__/analytic-fog-optics.unit.test.ts +38 -0
  136. package/src/__tests__/bloom-exact-zero.unit.test.ts +112 -18
  137. package/src/__tests__/bloom-lifecycle.integration.test.ts +17 -4
  138. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +20 -0
  139. package/src/__tests__/environment-fog-lanes.integration.test.ts +14 -0
  140. package/src/__tests__/environment-selection.unit.test.ts +12 -0
  141. package/src/__tests__/factory-contract.integration.test.ts +331 -68
  142. package/src/__tests__/frame-camera-selection.unit.test.ts +39 -1
  143. package/src/__tests__/frame-plan-contract.unit.test.ts +2 -0
  144. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +2 -1
  145. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +1 -1
  146. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +1 -1
  147. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +11 -0
  148. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +12 -0
  149. package/src/__tests__/gpu-scene.unit.test.ts +91 -0
  150. package/src/__tests__/instances-store.unit.test.ts +75 -0
  151. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +31 -0
  152. package/src/__tests__/motion-blur-compute.dawn.test.ts +583 -0
  153. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +21 -0
  154. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +86 -0
  155. package/src/__tests__/public-surface.test-d.ts +8 -0
  156. package/src/__tests__/render-error-code-owner.test-d.ts +2 -0
  157. package/src/__tests__/render-feature-error-reporting.unit.test.ts +24 -0
  158. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +23 -0
  159. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +31 -0
  160. package/src/__tests__/renderer-frame-transaction.integration.test.ts +7 -1
  161. package/src/__tests__/shader-manifest-fixture.ts +4 -4
  162. package/src/__tests__/skinned-shadow-caster.test.ts +2 -0
  163. package/src/__tests__/standard-lighting-write.unit.test.ts +2 -1
  164. package/src/__tests__/standard-pipeline.dawn.test.ts +1 -1
  165. package/src/__tests__/standard-pipeline.integration.test.ts +18 -8
  166. package/src/__tests__/temporal-reset-matrix.unit.test.ts +10 -0
  167. package/src/__tests__/temporal-view.unit.test.ts +2 -1
  168. package/src/__tests__/typed-pipeline-topology.unit.test.ts +20 -4
  169. package/src/__tests__/volume-optics-oracle.unit.test.ts +3 -1
  170. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +177 -13
  171. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +447 -61
  172. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +27 -0
  173. package/src/__tests__/volumetric-fog-topology.unit.test.ts +19 -3
  174. package/src/assembly/analytic-fog-registration.ts +14 -0
  175. package/src/assembly/fxaa-registration.ts +17 -0
  176. package/src/assembly/lod-observation.ts +12 -0
  177. package/src/assembly/motion-blur-registration.ts +17 -0
  178. package/src/assembly/renderer-facade.ts +2 -0
  179. package/src/assembly/temporal-post-process-prewarm.ts +40 -0
  180. package/src/assembly/webgpu-ready-contract.ts +8 -3
  181. package/src/assembly/webgpu-ready.ts +181 -245
  182. package/src/assembly/webgpu-renderer.ts +16 -31
  183. package/src/bloom-admission.ts +21 -0
  184. package/src/components/__tests__/motion-blur.unit.test.ts +1 -0
  185. package/src/components/atmosphere.ts +4 -0
  186. package/src/components/camera.ts +66 -10
  187. package/src/components/mesh-filter.ts +11 -9
  188. package/src/components/motion-blur.ts +1 -0
  189. package/src/device/gpu-residency.ts +56 -12
  190. package/src/environment/analytic-fog.ts +44 -0
  191. package/src/environment/background.ts +2 -2
  192. package/src/errors/render.ts +14 -1
  193. package/src/extract/camera.ts +20 -7
  194. package/src/extract/contracts.ts +7 -0
  195. package/src/extract/environment.ts +4 -0
  196. package/src/features/error-reporting.ts +78 -0
  197. package/src/features/host.ts +25 -12
  198. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +111 -1
  199. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +58 -3
  200. package/src/features/motion-blur/motion-blur-feature.ts +1519 -15
  201. package/src/features/motion-blur/motion-blur-params.ts +70 -2
  202. package/src/features/motion-blur/motion-blur-runtime.ts +176 -0
  203. package/src/features/plan.ts +25 -8
  204. package/src/features/prepared-gpu-work.ts +86 -35
  205. package/src/features/render-graph-compute.ts +13 -5
  206. package/src/features/render-graph-contribution.ts +2 -0
  207. package/src/gpu-driven/material-artifacts.ts +2 -7
  208. package/src/gpu-driven/prepared-draw.ts +15 -10
  209. package/src/gpu-driven/production-raster.ts +83 -7
  210. package/src/gpu-driven/view-gpu.ts +17 -0
  211. package/src/gpu-scene.ts +188 -21
  212. package/src/index.ts +32 -0
  213. package/src/inspection-types.ts +60 -2
  214. package/src/instances.ts +80 -1
  215. package/src/pipeline/standard-post.ts +307 -78
  216. package/src/pipeline-spec.ts +5 -5
  217. package/src/points-lines/__tests__/view-ubo.unit.test.ts +2 -1
  218. package/src/record/__tests__/temporal-payload.unit.test.ts +2 -1
  219. package/src/record/frame-snapshot.ts +5 -1
  220. package/src/record/frame-targets.ts +10 -6
  221. package/src/record/frame.ts +163 -22
  222. package/src/record/main-pass-geometry.ts +30 -1
  223. package/src/record/main-pass-sprite-draws.ts +6 -1
  224. package/src/record/mesh-ssbo.ts +43 -6
  225. package/src/record/render-context.ts +12 -28
  226. package/src/record/shadow-pass.ts +6 -1
  227. package/src/record/skybox-post-pass.ts +122 -196
  228. package/src/record/typed-frame-graph.ts +153 -9
  229. package/src/recovery/render-system-candidate.ts +22 -10
  230. package/src/render-contract.ts +23 -4
  231. package/src/render-pipeline.ts +6 -1
  232. package/src/render-system-extract-tail.ts +16 -0
  233. package/src/render-system-extract.ts +45 -13
  234. package/src/render-system.ts +255 -120
  235. package/src/scene/render-scene.ts +85 -4
  236. package/src/temporal/__tests__/temporal-frame-transaction.unit.test.ts +36 -0
  237. package/src/temporal/frame-coordinator.ts +8 -1
  238. package/src/temporal/frame.ts +20 -0
  239. package/src/temporal/view.ts +13 -2
  240. package/src/typed-render-graph-primitives.ts +121 -48
  241. package/src/volume/component.ts +0 -1
  242. package/src/volume/passes.ts +8 -4
  243. package/src/volume/resources.ts +1 -1
  244. package/src/volume/temporal.ts +11 -0
  245. package/dist/chunk-4NNZQCL3.mjs.map +0 -1
  246. package/dist/chunk-6TFBXLRJ.mjs.map +0 -1
  247. package/dist/chunk-DRR7D3KX.mjs.map +0 -1
  248. package/dist/chunk-GWCEMDVR.mjs.map +0 -1
  249. package/dist/chunk-JCIRYQ4V.mjs.map +0 -1
  250. package/dist/chunk-JRIPCMYC.mjs.map +0 -1
@@ -1,4 +1,5 @@
1
- import { classifySceneDataCoverage } from './chunk-DRR7D3KX.mjs';
1
+ import { classifySceneDataCoverage } from './chunk-3RTCJTH4.mjs';
2
+ import { motionBlurTemporalDemand } from './chunk-NB2S7ZRX.mjs';
2
3
  import { mat4 } from '@forgeax/engine-math';
3
4
  import { ok, err } from '@forgeax/engine-types';
4
5
 
@@ -351,7 +352,12 @@ var TemporalFrameCoordinator = class {
351
352
  * graph/finish/submit failure leaves the last successful view intact.
352
353
  */
353
354
  prepareTemporalView(camera, surfaceWidth, surfaceHeight) {
354
- const demanded = camera.antialias === "taa" || camera.motionBlur?.shutterAngle !== void 0 && camera.motionBlur.shutterAngle > 0;
355
+ const demanded = camera.antialias === "taa" || camera.motionBlur !== void 0 && motionBlurTemporalDemand({
356
+ shutterAngle: camera.motionBlur.shutterAngle,
357
+ maxRadiusPixels: camera.motionBlur.maxRadiusPixels,
358
+ sampleCount: camera.motionBlur.sampleCount,
359
+ targetFps: camera.motionBlur.targetFps ?? 60
360
+ });
355
361
  if (!demanded) return void 0;
356
362
  return projectTemporalView({
357
363
  camera,
@@ -393,5 +399,5 @@ var TemporalFrameCoordinator = class {
393
399
  };
394
400
 
395
401
  export { TEMPORAL_JITTER_SAMPLE_COUNT, TEMPORAL_TAAU_DEPENDENCY_STATUS, TemporalFrameCoordinator, projectTemporalView, snapshotSubmittedTemporalView, temporalJitterSample, temporalViewId };
396
- //# sourceMappingURL=chunk-JCIRYQ4V.mjs.map
397
- //# sourceMappingURL=chunk-JCIRYQ4V.mjs.map
402
+ //# sourceMappingURL=chunk-ZDQWGQW7.mjs.map
403
+ //# sourceMappingURL=chunk-ZDQWGQW7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/temporal/temporal-view.ts","../src/temporal/taa-history-store.ts","../src/temporal/frame-coordinator.ts"],"names":[],"mappings":"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","file":"chunk-ZDQWGQW7.mjs","sourcesContent":["import { mat4 } from '@forgeax/engine-math';\nimport type { CameraProjection } from '../components/camera';\nimport type { CameraSnapshot } from '../render-contract';\n\nexport const TEMPORAL_JITTER_SAMPLE_COUNT = 8;\n\n/** TAAU shares the temporal view owner; its internal dimensions are optional. */\nexport const TEMPORAL_TAAU_DEPENDENCY_STATUS = 'available' as const;\n\nexport type TemporalViewResetReason =\n | 'first-frame'\n | 'camera-switch'\n | 'history-version-changed'\n | 'projection-kind-changed'\n | 'projection-range-changed';\n\nexport interface SubmittedTemporalView {\n readonly viewId: string;\n readonly historyVersion: number;\n readonly projection: CameraProjection;\n readonly near: number;\n readonly far: number;\n readonly jitterUv: readonly [number, number];\n readonly unjitteredViewProjection: Float32Array;\n}\n\nexport interface TemporalView {\n readonly viewId: string;\n readonly historyVersion: number;\n readonly temporalFrameIndex: number;\n readonly historyValid: boolean;\n readonly resetReason: TemporalViewResetReason | undefined;\n readonly currentJitterUv: readonly [number, number];\n readonly internalWidth: number;\n readonly internalHeight: number;\n readonly previousJitterUv: readonly [number, number];\n readonly currentJitteredViewProjection: Float32Array;\n readonly currentUnjitteredViewProjection: Float32Array;\n readonly previousUnjitteredViewProjection: Float32Array;\n readonly projection: CameraProjection;\n readonly near: number;\n readonly far: number;\n}\n\nexport interface TemporalViewInput {\n readonly camera: CameraSnapshot;\n readonly temporalFrameIndex: number;\n readonly surfaceWidth: number;\n readonly surfaceHeight: number;\n readonly internalWidth?: number;\n readonly internalHeight?: number;\n readonly lastSubmitted?: SubmittedTemporalView;\n}\n\nexport function temporalViewId(worldId: number, entityKey: number): string {\n const raw = entityKey >>> 0;\n const index = raw & 0x00ffffff;\n const generation = (raw >>> 24) & 0xff;\n return `${worldId}:${index}:${generation}`;\n}\n\nfunction halton(index: number, base: number): number {\n let result = 0;\n let fraction = 1 / base;\n let value = index;\n while (value > 0) {\n result += fraction * (value % base);\n value = Math.floor(value / base);\n fraction /= base;\n }\n return result;\n}\n\nexport function temporalJitterSample(temporalFrameIndex: number): readonly [number, number] {\n const sampleIndex =\n ((Math.trunc(temporalFrameIndex) % TEMPORAL_JITTER_SAMPLE_COUNT) +\n TEMPORAL_JITTER_SAMPLE_COUNT) %\n TEMPORAL_JITTER_SAMPLE_COUNT;\n const haltonIndex = sampleIndex + 1;\n return [halton(haltonIndex, 2) - 0.5, halton(haltonIndex, 3) - 0.5];\n}\n\nfunction temporalJitterUv(\n temporalFrameIndex: number,\n surfaceWidth: number,\n surfaceHeight: number,\n): readonly [number, number] {\n const sample = temporalJitterSample(temporalFrameIndex);\n return [sample[0] / Math.max(1, surfaceWidth), sample[1] / Math.max(1, surfaceHeight)];\n}\n\nfunction cameraProjection(camera: CameraSnapshot): Float32Array {\n const projection = mat4.create();\n if (camera.projection === 'orthographic') {\n mat4.orthographic(\n projection,\n camera.orthoLeft,\n camera.orthoRight,\n camera.orthoTop,\n camera.orthoBottom,\n camera.near,\n camera.far,\n );\n } else {\n mat4.perspective(projection, camera.fov, camera.aspect, camera.near, camera.far);\n }\n return projection;\n}\n\nfunction resetReason(\n current: CameraSnapshot,\n viewId: string,\n previous: SubmittedTemporalView | undefined,\n): TemporalViewResetReason | undefined {\n if (previous === undefined) return 'first-frame';\n if (previous.viewId !== viewId) return 'camera-switch';\n if (previous.historyVersion !== (current.historyVersion ?? 0)) {\n return 'history-version-changed';\n }\n if (previous.projection !== current.projection) return 'projection-kind-changed';\n if (!Object.is(previous.near, current.near) || !Object.is(previous.far, current.far)) {\n return 'projection-range-changed';\n }\n return undefined;\n}\n\nexport function projectTemporalView(input: TemporalViewInput): TemporalView {\n const { camera } = input;\n const viewId = temporalViewId(camera.worldId ?? 0, camera.entityKey ?? 0);\n const currentJitterUv = temporalJitterUv(\n input.temporalFrameIndex,\n input.internalWidth ?? input.surfaceWidth,\n input.internalHeight ?? input.surfaceHeight,\n );\n const view = mat4.invert(mat4.create(), camera.world);\n const projection = cameraProjection(camera);\n const currentUnjitteredViewProjection = mat4.multiply(mat4.create(), projection, view);\n const clipJitter = mat4.identity(mat4.create());\n clipJitter[12] = currentJitterUv[0] * 2;\n clipJitter[13] = currentJitterUv[1] * -2;\n const jitteredProjection = mat4.multiply(mat4.create(), clipJitter, projection);\n const currentJitteredViewProjection = mat4.multiply(mat4.create(), jitteredProjection, view);\n const reason = resetReason(camera, viewId, input.lastSubmitted);\n const historyValid = reason === undefined;\n return {\n viewId,\n historyVersion: camera.historyVersion ?? 0,\n temporalFrameIndex: input.temporalFrameIndex,\n historyValid,\n resetReason: reason,\n currentJitterUv,\n internalWidth: input.internalWidth ?? input.surfaceWidth,\n internalHeight: input.internalHeight ?? input.surfaceHeight,\n previousJitterUv: historyValid\n ? (input.lastSubmitted?.jitterUv ?? currentJitterUv)\n : currentJitterUv,\n currentJitteredViewProjection,\n currentUnjitteredViewProjection,\n previousUnjitteredViewProjection: historyValid\n ? (input.lastSubmitted?.unjitteredViewProjection ?? currentUnjitteredViewProjection)\n : currentUnjitteredViewProjection,\n projection: camera.projection,\n near: camera.near,\n far: camera.far,\n };\n}\n\nexport function snapshotSubmittedTemporalView(view: TemporalView): SubmittedTemporalView {\n return {\n viewId: view.viewId,\n historyVersion: view.historyVersion,\n projection: view.projection,\n near: view.near,\n far: view.far,\n jitterUv: [view.currentJitterUv[0], view.currentJitterUv[1]],\n unjitteredViewProjection: new Float32Array(view.currentUnjitteredViewProjection),\n };\n}\n","export type TaaHistoryResetReason =\n | 'first-frame'\n | 'camera-cut'\n | 'resize'\n | 'recover'\n | 'device-generation';\n\nexport interface TaaHistoryInspection {\n readonly token: number;\n readonly deviceGeneration: number;\n readonly content: 'uninitialized' | 'active';\n readonly fallback: 'neutral-texture';\n readonly requestVersion: number;\n readonly generation: number;\n readonly seed: number;\n readonly attempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly valid: boolean;\n readonly resetReason: TaaHistoryResetReason | undefined;\n}\n\nexport interface TaaHistoryReceipt {\n readonly deviceGeneration: number;\n readonly completed: boolean;\n}\n\nexport interface TaaHistoryAttempt {\n readonly generation: number;\n readonly seed: number;\n commit(receipt?: TaaHistoryReceipt): void;\n abort(): void;\n}\n\nlet nextHistoryToken = 1;\n\n/** TAA-only history owner. No global registry or backend handle crosses this boundary. */\nexport class TaaHistoryStore {\n private readonly token = nextHistoryToken++;\n private deviceGeneration = 0;\n private content: TaaHistoryInspection['content'] = 'uninitialized';\n private requestVersion = 0;\n private generation = 0;\n private seed = 0;\n private valid = false;\n private attempt: TaaHistoryInspection['attempt'] = 'none';\n private resetReason: TaaHistoryResetReason | undefined;\n\n begin(reason: TaaHistoryResetReason | undefined = undefined): TaaHistoryAttempt {\n const generation = this.generation;\n const seed = this.seed;\n this.attempt = 'active';\n let state: 'active' | 'committed' | 'aborted' = 'active';\n return {\n generation,\n seed,\n commit: (receipt) => {\n if (state !== 'active') return;\n if (\n receipt !== undefined &&\n (!receipt.completed || receipt.deviceGeneration !== this.deviceGeneration)\n ) {\n state = 'aborted';\n this.attempt = 'aborted';\n return;\n }\n state = 'committed';\n this.attempt = 'committed';\n this.valid = true;\n this.content = 'active';\n this.requestVersion += 1;\n this.generation += 1;\n this.seed += 1;\n this.resetReason = reason;\n },\n abort: () => {\n if (state !== 'active') return;\n state = 'aborted';\n this.attempt = 'aborted';\n },\n };\n }\n\n seedHistory(reason: TaaHistoryResetReason = 'first-frame'): void {\n this.valid = false;\n this.content = 'uninitialized';\n this.resetReason = reason;\n this.attempt = 'none';\n }\n\n reset(reason: TaaHistoryResetReason): void {\n this.generation = 0;\n this.seed = 0;\n this.valid = false;\n this.content = 'uninitialized';\n this.attempt = 'none';\n this.resetReason = reason;\n }\n\n recoverForGeneration(deviceGeneration: number): void {\n if (!Number.isSafeInteger(deviceGeneration) || deviceGeneration < 0) {\n throw new RangeError('deviceGeneration must be a non-negative safe integer.');\n }\n this.deviceGeneration = deviceGeneration;\n this.valid = false;\n this.content = 'uninitialized';\n this.attempt = 'none';\n this.resetReason = 'device-generation';\n }\n\n inspect(): TaaHistoryInspection {\n return {\n token: this.token,\n deviceGeneration: this.deviceGeneration,\n content: this.content,\n fallback: 'neutral-texture',\n requestVersion: this.requestVersion,\n generation: this.generation,\n seed: this.seed,\n attempt: this.attempt,\n valid: this.valid,\n resetReason: this.resetReason,\n };\n }\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { motionBlurTemporalDemand } from '../features/motion-blur/motion-blur-params';\nimport type { CameraSnapshot } from '../render-contract';\nimport { classifySceneDataCoverage, type SceneDataContributor } from './coverage';\nimport { type TaaHistoryAttempt, TaaHistoryStore } from './taa-history-store';\nimport {\n projectTemporalView,\n type SubmittedTemporalView,\n snapshotSubmittedTemporalView,\n type TemporalView,\n} from './temporal-view';\n\n/** The only stages that may publish a temporal frame. */\nexport type TemporalFrameStage = 'build' | 'encode' | 'finish' | 'submit';\n\n/** Closed list of consumers that share the renderer temporal transaction. */\nexport type TemporalFrameConsumerId = 'taa' | 'motion-blur' | 'ssr';\n\nexport type TemporalFrameErrorCode = 'taa-unavailable' | 'temporal-active' | 'temporal-not-active';\n\nexport interface TemporalFrameError {\n readonly code: TemporalFrameErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n}\n\nexport interface TemporalFrameSnapshot<T = unknown> {\n readonly epoch: number;\n readonly previous: T | undefined;\n readonly consumerIds: readonly TemporalFrameConsumerId[];\n readonly historyAttempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly attempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly lastFailure: TemporalFrameStage | undefined;\n readonly coverage: {\n readonly exactContributorIds: readonly string[];\n readonly reactiveContributorIds: readonly string[];\n readonly missingContributorIds: readonly string[];\n readonly omittedMissingContributorCount: number;\n };\n}\n\nexport interface TemporalFrameBeginInput<T = unknown> {\n readonly current: T;\n readonly antialias: 'none' | 'fxaa' | 'msaa' | 'taa';\n /** Enables the shared transaction for a temporal feature without TAA. */\n readonly temporalDemand?: boolean;\n /** Consumers registered on this one renderer-owned frame transaction. */\n readonly consumerIds?: readonly TemporalFrameConsumerId[];\n readonly available?: boolean;\n readonly contributors?: readonly SceneDataContributor[];\n readonly requiredContributorIds?: readonly string[];\n /** Projection produced before record uploads; it commits with the frame. */\n readonly temporalView?: TemporalView;\n}\n\nexport interface TemporalFrameCandidate<T = unknown> {\n readonly epoch: number;\n readonly current: T;\n readonly previous: T | undefined;\n readonly history: { readonly direction: 'a-to-b' | 'b-to-a'; readonly valid: boolean };\n readonly contributors: readonly SceneDataContributor[];\n readonly requiredContributorIds: readonly string[];\n readonly consumerIds: readonly TemporalFrameConsumerId[];\n readonly temporalView?: TemporalView;\n}\n\nexport interface TemporalFramePhases<T = unknown> {\n readonly build: () => T;\n readonly encode: (built: T) => void;\n readonly finish: () => void;\n readonly submit: () => void;\n}\n\nexport interface TemporalFrameReceipt<T = unknown> {\n readonly epoch: number;\n readonly previous: T;\n readonly historyDirection: 'a-to-b' | 'b-to-a';\n}\n\nexport type ReflectionFallbackTemporalReset =\n | { readonly reset: false }\n | { readonly reset: true; readonly reason: 'reflection-fallback-generation' };\n\n/** Maps committed producer generations into the existing temporal reset seam. */\nexport function resolveReflectionFallbackTemporalReset(\n previousGeneration: number | undefined,\n nextGeneration: number | undefined,\n): ReflectionFallbackTemporalReset {\n if (previousGeneration === undefined || nextGeneration === undefined) return { reset: false };\n return previousGeneration === nextGeneration\n ? { reset: false }\n : { reset: true, reason: 'reflection-fallback-generation' };\n}\n\n/**\n * Keeps SSR admission on the existing producer-generation reset seam. The\n * admission path never allocates or resolves temporal history itself.\n */\nexport function resolveSsrAdmissionTemporalReset(\n previousGeneration: number | undefined,\n nextGeneration: number | undefined,\n): ReflectionFallbackTemporalReset {\n return resolveReflectionFallbackTemporalReset(previousGeneration, nextGeneration);\n}\n\nfunction failure(code: TemporalFrameErrorCode, hint: string): TemporalFrameError {\n return {\n code,\n expected:\n code === 'taa-unavailable'\n ? 'TAA resources and capability are available'\n : 'one temporal frame is active',\n hint,\n };\n}\n\n/**\n * Renderer-owned temporal transaction. It has no graph or backend dependency:\n * graph assembly supplies the four phase callbacks and only submit publishes\n * the candidate snapshot.\n */\nexport class TemporalFrameCoordinator<T = unknown> {\n readonly historyStore: TaaHistoryStore;\n private epoch: number;\n private previous: T | undefined;\n private consumerIds: readonly TemporalFrameConsumerId[] = [];\n private active: TemporalFrameCandidate<T> | undefined;\n private attempt: TemporalFrameSnapshot<T>['attempt'] = 'none';\n private historyAttempt: TemporalFrameSnapshot<T>['historyAttempt'] = 'none';\n private lastFailure: TemporalFrameStage | undefined;\n private historyDirection: 'a-to-b' | 'b-to-a' = 'a-to-b';\n private temporalFrameIndex = 0;\n private lastSubmittedView: SubmittedTemporalView | undefined;\n private coverage: TemporalFrameSnapshot<T>['coverage'] = {\n exactContributorIds: [],\n reactiveContributorIds: [],\n missingContributorIds: [],\n omittedMissingContributorCount: 0,\n };\n private readonly historyAttempts = new WeakMap<object, TaaHistoryAttempt>();\n\n constructor(\n initial: {\n readonly epoch?: number;\n readonly previous?: T;\n readonly historyStore?: TaaHistoryStore;\n } = {},\n ) {\n this.historyStore = initial.historyStore ?? new TaaHistoryStore();\n this.epoch = initial.epoch ?? 0;\n this.previous = initial.previous;\n }\n\n begin(input: TemporalFrameBeginInput<T>): Result<TemporalFrameCandidate<T>, TemporalFrameError> {\n const consumerIds = Object.freeze([...(input.consumerIds ?? [])]);\n const demanded =\n input.antialias === 'taa' || input.temporalDemand === true || consumerIds.length > 0;\n if (!demanded) {\n return ok({\n epoch: this.epoch,\n current: input.current,\n previous: this.previous,\n history: { direction: this.historyDirection, valid: false },\n contributors: Object.freeze([...(input.contributors ?? [])]),\n requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),\n consumerIds,\n ...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),\n });\n }\n if (input.available === false) {\n return err(\n failure('taa-unavailable', 'enable rgba16float temporal targets and retry the frame'),\n );\n }\n if (this.active !== undefined) {\n return err(\n failure(\n 'temporal-active',\n 'commit or abort the active temporal frame before beginning another',\n ),\n );\n }\n const candidate: TemporalFrameCandidate<T> = {\n epoch: this.epoch + 1,\n current: input.current,\n previous: this.previous,\n history: { direction: this.historyDirection, valid: this.previous !== undefined },\n contributors: Object.freeze([...(input.contributors ?? [])]),\n requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),\n consumerIds,\n ...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),\n };\n if (input.antialias === 'taa') {\n this.historyAttempts.set(candidate, this.historyStore.begin());\n }\n this.active = candidate;\n this.attempt = 'active';\n this.historyAttempt = input.antialias === 'taa' ? 'active' : 'none';\n this.lastFailure = undefined;\n return ok(candidate);\n }\n\n commit(\n candidate: TemporalFrameCandidate<T>,\n ): Result<TemporalFrameReceipt<T>, TemporalFrameError> {\n if (this.active !== candidate) {\n return err(failure('temporal-not-active', 'commit the candidate returned by begin'));\n }\n this.epoch = candidate.epoch;\n this.previous = candidate.current;\n if (candidate.temporalView !== undefined) {\n this.lastSubmittedView = snapshotSubmittedTemporalView(candidate.temporalView);\n this.temporalFrameIndex += 1;\n }\n this.historyDirection = candidate.history.direction === 'a-to-b' ? 'b-to-a' : 'a-to-b';\n this.consumerIds = candidate.consumerIds;\n const historyAttempt = this.historyAttempts.get(candidate);\n historyAttempt?.commit({\n deviceGeneration: this.historyStore.inspect().deviceGeneration,\n completed: true,\n });\n this.coverage = classifySceneDataCoverage({\n contributors: candidate.contributors,\n requiredContributorIds: candidate.requiredContributorIds,\n });\n this.active = undefined;\n historyAttempt?.abort();\n this.historyAttempts.delete(candidate);\n this.attempt = 'committed';\n this.historyAttempt = historyAttempt === undefined ? 'none' : 'committed';\n return ok({\n epoch: this.epoch,\n previous: candidate.current,\n historyDirection: candidate.history.direction,\n });\n }\n\n abort(candidate: TemporalFrameCandidate<T>, stage: TemporalFrameStage = 'submit'): void {\n if (this.active !== candidate) return;\n this.historyAttempts.get(candidate)?.abort();\n this.historyAttempts.delete(candidate);\n this.active = undefined;\n this.attempt = 'aborted';\n this.historyAttempt = 'aborted';\n this.lastFailure = stage;\n }\n\n run(\n input: TemporalFrameBeginInput<T>,\n phases: TemporalFramePhases<T>,\n ): Result<TemporalFrameReceipt<T> | undefined, TemporalFrameError> {\n const started = this.begin(input);\n if (!started.ok) return started;\n const candidate = started.value;\n if (\n input.antialias !== 'taa' &&\n input.temporalDemand !== true &&\n (input.consumerIds?.length ?? 0) === 0\n ) {\n return ok(undefined);\n }\n try {\n const built = phases.build();\n phases.encode(built);\n phases.finish();\n phases.submit();\n } catch (cause) {\n const stage = this.stageFromError(cause);\n this.abort(candidate, stage);\n return err({\n code: 'temporal-not-active',\n expected: `temporal ${stage} succeeds before commit`,\n hint: 'inspect the underlying stage failure and retry the frame',\n detail: { stage, cause },\n });\n }\n return this.commit(candidate);\n }\n\n inspect(): TemporalFrameSnapshot<T> {\n return {\n epoch: this.epoch,\n previous: this.previous,\n consumerIds: this.consumerIds,\n historyAttempt: this.historyAttempt,\n attempt: this.attempt,\n lastFailure: this.lastFailure,\n coverage: this.coverage,\n };\n }\n\n /**\n * Derive the current/previous camera matrices without mutating history.\n * `commit()` is the only operation that publishes the returned view, so a\n * graph/finish/submit failure leaves the last successful view intact.\n */\n prepareTemporalView(\n camera: CameraSnapshot,\n surfaceWidth: number,\n surfaceHeight: number,\n ): TemporalView | undefined {\n const demanded =\n camera.antialias === 'taa' ||\n (camera.motionBlur !== undefined &&\n motionBlurTemporalDemand({\n shutterAngle: camera.motionBlur.shutterAngle,\n maxRadiusPixels: camera.motionBlur.maxRadiusPixels,\n sampleCount: camera.motionBlur.sampleCount,\n targetFps: camera.motionBlur.targetFps ?? 60,\n }));\n if (!demanded) return undefined;\n return projectTemporalView({\n camera,\n temporalFrameIndex: this.temporalFrameIndex,\n surfaceWidth,\n surfaceHeight,\n ...(this.lastSubmittedView === undefined ? {} : { lastSubmitted: this.lastSubmittedView }),\n });\n }\n\n reset(\n reason:\n | 'cut'\n | 'resize'\n | 'camera-switch'\n | 'detach'\n | 'recover'\n | 'device-loss'\n | 'device-generation' = 'recover',\n ): void {\n void reason;\n this.active = undefined;\n this.epoch = 0;\n this.previous = undefined;\n this.temporalFrameIndex = 0;\n this.lastSubmittedView = undefined;\n this.historyDirection = 'a-to-b';\n this.historyStore.reset(\n reason === 'cut' || reason === 'camera-switch'\n ? 'camera-cut'\n : reason === 'resize'\n ? 'resize'\n : reason === 'device-generation' || reason === 'device-loss'\n ? 'device-generation'\n : 'recover',\n );\n this.attempt = 'none';\n this.historyAttempt = 'none';\n this.lastFailure = undefined;\n this.coverage = {\n exactContributorIds: [],\n reactiveContributorIds: [],\n missingContributorIds: [],\n omittedMissingContributorCount: 0,\n };\n this.consumerIds = [];\n }\n\n private stageFromError(cause: unknown): TemporalFrameStage {\n if (typeof cause === 'object' && cause !== null && 'stage' in cause) {\n const stage = (cause as { stage?: unknown }).stage;\n if (stage === 'build' || stage === 'encode' || stage === 'finish' || stage === 'submit')\n return stage;\n }\n return 'submit';\n }\n}\n"]}
@@ -5,5 +5,7 @@ export declare const Atmosphere: import("@forgeax/engine-ecs").Component<"Atmosp
5
5
  readonly mieCoefficient: "f32";
6
6
  readonly mieDirectionalG: "f32";
7
7
  readonly sunAngularRadius: "f32";
8
+ readonly circumsolarStrength: "f32";
9
+ readonly circumsolarWidth: "f32";
8
10
  }>;
9
11
  //# sourceMappingURL=atmosphere.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"atmosphere.d.ts","sourceRoot":"","sources":["../../src/components/atmosphere.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,UAAU;;;;;;EAMrB,CAAC"}
1
+ {"version":3,"file":"atmosphere.d.ts","sourceRoot":"","sources":["../../src/components/atmosphere.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,UAAU;;;;;;;;EAUrB,CAAC"}
@@ -145,7 +145,7 @@ export declare function antialiasFromF32(value: number): Antialias;
145
145
  *
146
146
  * Two members:
147
147
  * `'off'` - default; no bloom post-processing (zero-overhead opt-out path)
148
- * `'on'` - bloom bright-pass + separable blur + composite pipeline
148
+ * `'on'` - five-level HDR extraction/downsample/tent-upsample pipeline
149
149
  *
150
150
  * Bloom is a discrete enum (0/1) — illegal values fail-fast with the closed
151
151
  * CameraError contract (charter P3), matching antialiasFromF32 precedent.
@@ -155,11 +155,25 @@ export type BloomEnabled = 'off' | 'on';
155
155
  export declare const BLOOM_DISABLED = 0;
156
156
  /** Numeric encoding of bloom enabled (schema value for `bloom`). */
157
157
  export declare const BLOOM_ENABLED = 1;
158
+ /** Bloom intensity is a linear HDR add-back multiplier. */
159
+ export declare const CAMERA_BLOOM_INTENSITY_MIN = 0;
160
+ export declare const CAMERA_BLOOM_INTENSITY_MAX = 8;
161
+ /** Bloom threshold is expressed in scene-linear Rec.709 luminance. */
162
+ export declare const CAMERA_BLOOM_THRESHOLD_MIN = 0;
163
+ export declare const CAMERA_BLOOM_THRESHOLD_MAX = 65504;
164
+ /** Soft-knee transition width relative to the threshold. */
165
+ export declare const CAMERA_BLOOM_SOFT_KNEE_MIN = 0;
166
+ export declare const CAMERA_BLOOM_SOFT_KNEE_MAX = 1;
167
+ /** Coarse pyramid contribution. This is a blend, not a blur radius. */
168
+ export declare const CAMERA_BLOOM_SCATTER_MIN = 0;
169
+ export declare const CAMERA_BLOOM_SCATTER_MAX = 0.95;
158
170
  /**
159
171
  * Map a `camera.bloom` numeric value to the closed `BloomEnabled` string-literal
160
172
  * union. Invalid values fail-fast with structured error (charter P3).
161
173
  */
162
174
  export declare function bloomEnabledFromF32(value: number): BloomEnabled;
175
+ /** Validate the complete Camera-owned Bloom contract at the extract boundary. */
176
+ export declare function validateCameraBloom(bloom: number, threshold: number, intensity: number, softKnee: number, scatter: number): BloomEnabled;
163
177
  /**
164
178
  * Camera projection parameters (perspective + orthographic variants) +
165
179
  * tonemap trio (mode + exposure + whitePoint).
@@ -193,8 +207,9 @@ export declare function bloomEnabledFromF32(value: number): BloomEnabled;
193
207
  * N>1 fires 'render-system-multi-camera' + uses first). Multi-viewport is
194
208
  * OOS (see feat-future-multi-viewport). The orthographic path reuses the
195
209
  * same near / far as the perspective path — both variants share the single
196
- * Camera archetype (17 scalar f32 columns + one historyVersion u32 column +
197
- * the `clearColor` array<f32,4> column + the `autoAspect` bool column).
210
+ * Camera archetype (30 schema fields, including the Bloom controls, one
211
+ * historyVersion u32 column, the `clearColor` array<f32,4> column, and the
212
+ * `autoAspect` bool column).
198
213
  *
199
214
  * @example Perspective camera at (0, 0, 3) looking down -Z (zero-config tonemap):
200
215
  * world.spawn(
@@ -260,7 +275,8 @@ export declare const Camera: import("@forgeax/engine-ecs").Component<"Camera", {
260
275
  readonly bloom: "f32";
261
276
  readonly bloomThreshold: "f32";
262
277
  readonly bloomIntensity: "f32";
263
- readonly bloomBlurRadius: "f32";
278
+ readonly bloomSoftKnee: "f32";
279
+ readonly bloomScatter: "f32";
264
280
  readonly target: "shared<RenderTarget>";
265
281
  readonly clearColor: "array<f32, 4>";
266
282
  readonly autoAspect: "bool";
@@ -1 +1 @@
1
- {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/components/camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/components/camera.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,13 @@
2
2
  * Mesh filter (geometry asset reference).
3
3
  *
4
4
  * `assetHandle` carries a `Handle<'MeshAsset', 'shared'>` (u32-stored)
5
- * pointing into `engine.assets: AssetRegistry`. Use the predefined
6
- * constants `HANDLE_CUBE` / `HANDLE_TRIANGLE` exported from
7
- * `@forgeax/engine-render`; custom-mesh registration is OOS in MVP (see
8
- * feat-future-asset-system).
5
+ * pointing to a mesh payload in the current World shared-reference / builtin
6
+ * handle namespace. An omitted field defaults to slot `0`, the unbound
7
+ * sentinel; an entity with that value is not emitted as a renderable. Use the
8
+ * predefined constants `HANDLE_CUBE` / `HANDLE_TRIANGLE` for builtins and
9
+ * allocate a World shared reference for a loaded mesh payload.
9
10
  *
10
- * Error path: if the handle is not registered at draw time, RenderSystem
11
+ * Error path: if a non-zero handle is not registered at draw time, RenderSystem
11
12
  * fires `Renderer.onError` with
12
13
  * `RhiError({ code: 'asset-not-registered', detail: { assetHandle } })`
13
14
  * and skips this entity (other entities continue rendering; charter
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-filter.d.ts","sourceRoot":"","sources":["../../src/components/mesh-filter.ts"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,UAAU;;EAErB,CAAC"}
1
+ {"version":3,"file":"mesh-filter.d.ts","sourceRoot":"","sources":["../../src/components/mesh-filter.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,UAAU;;EAErB,CAAC"}
@@ -3,5 +3,6 @@ export declare const MotionBlur: import("@forgeax/engine-ecs").Component<"Motion
3
3
  readonly shutterAngle: "f32";
4
4
  readonly maxRadiusPixels: "f32";
5
5
  readonly sampleCount: "f32";
6
+ readonly targetFps: "f32";
6
7
  }>;
7
8
  //# sourceMappingURL=motion-blur.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"motion-blur.d.ts","sourceRoot":"","sources":["../../src/components/motion-blur.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,eAAO,MAAM,UAAU;;;;EAIrB,CAAC"}
1
+ {"version":3,"file":"motion-blur.d.ts","sourceRoot":"","sources":["../../src/components/motion-blur.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,eAAO,MAAM,UAAU;;;;;EAKrB,CAAC"}