@photivra/engine 0.6.0 → 1.0.1
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.
- package/AGENTS.md +674 -0
- package/CHANGELOG.md +191 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +139 -72
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +9 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +10 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +87 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -6
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +16 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +16 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +15 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +11 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +18 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +18 -0
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +8 -0
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +14 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -1
- package/dist/sensor/capture-mode.js +13 -0
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts.map +1 -1
- package/dist/sensor/color-sampling.js +19 -0
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +14 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -1
- package/dist/sensor/exposure-window.js +14 -0
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -1
- package/dist/sensor/optical-stack.js +17 -0
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +12 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +13 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -1
- package/dist/sensor/readout-timing.js +13 -0
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -1
- package/dist/sensor/sampling-aperture.js +14 -0
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +51 -5
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +27 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +139 -3
- package/docs/ARCHITECTURE.md +134 -24
- package/docs/AUTOMATION_COORDINATION.md +2 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +80 -10
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +5 -3
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +66 -0
- package/docs/RELEASE_1_0_1.md +61 -0
- package/docs/RELEASE_AUDIT.md +39 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5050 -1047
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +15 -3
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Scene Radiance and Illumination
|
|
2
|
+
|
|
3
|
+
Release context: **package 1.0.1 candidate / root API 1.0.1**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0_1.md).
|
|
4
|
+
|
|
5
|
+
Photivra separates **illumination-source metadata** from **outgoing scene spectral radiance**.
|
|
6
|
+
|
|
7
|
+
The public image-formation contract owns a `scene-radiance-evaluation` stage between scene projection and lens/pupil evaluation:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
scene geometry + illumination + material response + visibility + emission + time
|
|
11
|
+
-> outgoing scene spectral radiance
|
|
12
|
+
-> lens / pupil / PSF / transmission
|
|
13
|
+
-> sensor-plane spectral irradiance
|
|
14
|
+
-> sensor sampling and signal formation
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This boundary prevents light-source controls, RGB renderer values, or photometric scene anchors from being treated as sensor input.
|
|
18
|
+
|
|
19
|
+
## Shared spectral primitives
|
|
20
|
+
|
|
21
|
+
Fundamental wavelength semantics live in the renderer-neutral core rather than the sensor layer.
|
|
22
|
+
|
|
23
|
+
`SpectralWavelengthBasis` supports:
|
|
24
|
+
|
|
25
|
+
- `air`;
|
|
26
|
+
- `vacuum`;
|
|
27
|
+
- `unspecified`.
|
|
28
|
+
|
|
29
|
+
The shared parsers also expose a positive wavelength sample and a positive non-empty wavelength range in nanometres. They do not convert between air and vacuum wavelength coordinates.
|
|
30
|
+
|
|
31
|
+
Existing sensor APIs continue to export/use the same root `SpectralWavelengthBasis` name. Moving ownership does not change its public values or meaning.
|
|
32
|
+
|
|
33
|
+
## Scene radiometry versus scene radiance
|
|
34
|
+
|
|
35
|
+
The existing `SceneRadiometry` contract remains valid.
|
|
36
|
+
|
|
37
|
+
- `relative-linear` says scene-linear values preserve ratios without absolute photon calibration.
|
|
38
|
+
- `absolute-luminance` provides a photometric luminance anchor in cd/m².
|
|
39
|
+
|
|
40
|
+
Neither form is, by itself, an outgoing spectral-radiance field. Absolute luminance is a photometric anchor and must not be substituted for W/(m²·sr·nm), source irradiance, or sensor-plane spectral irradiance.
|
|
41
|
+
|
|
42
|
+
The new illumination profile complements `SceneRadiometry`; it does not replace it.
|
|
43
|
+
|
|
44
|
+
## Illumination profile
|
|
45
|
+
|
|
46
|
+
Use `parseSceneIlluminationProfile()` for renderer-independent source metadata.
|
|
47
|
+
|
|
48
|
+
Schema `0.1.0` supports these source families:
|
|
49
|
+
|
|
50
|
+
- `point`;
|
|
51
|
+
- `spot`;
|
|
52
|
+
- `area`;
|
|
53
|
+
- `directional`;
|
|
54
|
+
- `environment`.
|
|
55
|
+
|
|
56
|
+
Every source has a stable `sourceId`, explicit enabled state, geometry/binding, magnitude representation, spectrum representation, time behavior, and evidence.
|
|
57
|
+
|
|
58
|
+
A visible/emissive source may bind to a stable scene object instead of duplicating its transform. Area-source geometry must use a scene-object binding in the first schema.
|
|
59
|
+
|
|
60
|
+
## Magnitude semantics
|
|
61
|
+
|
|
62
|
+
There is no generic unitless `intensity` field.
|
|
63
|
+
|
|
64
|
+
All source families may use a clearly labeled relative linear scale for approximate/reference rendering. The first physical magnitude subset is deliberately narrow:
|
|
65
|
+
|
|
66
|
+
- point: radiant intensity, W/sr;
|
|
67
|
+
- area: surface radiance, W/(m²·sr);
|
|
68
|
+
- directional: irradiance at an explicit reference plane, W/m².
|
|
69
|
+
|
|
70
|
+
Physical spot magnitude is not yet represented because a defensible model needs an angular distribution. Absolute environment illumination is not yet represented because it needs a direction-dependent radiance field.
|
|
71
|
+
|
|
72
|
+
Photometric quantities such as lumens, candela, lux, and luminance are not silently converted into radiometric quantities.
|
|
73
|
+
|
|
74
|
+
## Spectrum representations
|
|
75
|
+
|
|
76
|
+
Schema `0.1.0` supports:
|
|
77
|
+
|
|
78
|
+
- unresolved spectrum with an explicit limitation;
|
|
79
|
+
- linear-sRGB preview approximation;
|
|
80
|
+
- explicit blackbody-temperature approximation;
|
|
81
|
+
- continuous relative spectral shape with wavelength coordinates, interpolation semantics, uncertainty, and reusable-data provenance;
|
|
82
|
+
- normalized discrete relative lines with explicit wavelengths and wavelength-integrated line fractions.
|
|
83
|
+
|
|
84
|
+
A blackbody temperature is an explicit approximation. It is not a universal CCT/color control and must not be used to give arbitrary colored, LED, narrowband, UV, or other non-Planckian sources a fictitious Kelvin meaning.
|
|
85
|
+
|
|
86
|
+
Embedded continuous numeric spectra require `reusable-data` or `photivra-owned` evidence. A calibrated relative spectral shape must use an explicit air/vacuum wavelength basis and quantified relative uncertainty.
|
|
87
|
+
|
|
88
|
+
The continuous relative spectrum uses arbitrary relative normalization. Combining it with a broadband physical magnitude into an absolute spectral source distribution remains a later explicit composition step; the parser does not silently normalize or integrate it.
|
|
89
|
+
|
|
90
|
+
Discrete line spectra use the separate `discrete-relative-lines` representation. Each line has an explicit wavelength and a normalized **wavelength-integrated** line weight; weights must sum to one. These are not per-nanometre density samples and are never broadened into synthetic continuous bumps. A calibrated relative line distribution requires reusable-data provenance, a resolved air/vacuum wavelength basis, and quantified relative uncertainty.
|
|
91
|
+
|
|
92
|
+
`resolveSceneIlluminationDiscreteLineMeasure()` may distribute the source's wavelength-integrated magnitude across those normalized line fractions. Point radiant intensity becomes per-line W/sr, area radiance becomes per-line W/(m²·sr), directional reference-plane irradiance becomes per-line W/m², and relative source magnitude stays relative. Disabled sources resolve to zero contribution.
|
|
93
|
+
|
|
94
|
+
This source-level line measure still does not authorize a calibrated outgoing scene-radiance claim because material/visibility/transport fidelity and combined uncertainty remain separate.
|
|
95
|
+
|
|
96
|
+
## Shared spectral composition
|
|
97
|
+
|
|
98
|
+
`composeSpectralCoverage()` defines the common continuous-spectral planning seam across scene, optics, materials, sensor response, or other wavelength-dependent factors.
|
|
99
|
+
|
|
100
|
+
Each participant declares:
|
|
101
|
+
|
|
102
|
+
- stable participant ID and role;
|
|
103
|
+
- one resolved air or vacuum wavelength basis;
|
|
104
|
+
- finite wavelength support;
|
|
105
|
+
- strictly ordered internal interpolation breakpoints.
|
|
106
|
+
|
|
107
|
+
Composition intersects all participant wavelength ranges and unions every breakpoint that lies inside the common overlap. It does **not** apply response/transmission/radiance values and does not integrate a spectral density. Air/vacuum conversion is never implicit.
|
|
108
|
+
|
|
109
|
+
The existing sensor spectral response can participate through `createSensorSpectralCoverageParticipant()`, which exposes the channel response's usable overlap and interpolation knots without applying QE or A/W responsivity.
|
|
110
|
+
|
|
111
|
+
Continuous scene-illumination data can participate through `createSceneIlluminationSpectralCoverageParticipant()`. RGB, blackbody approximations, unresolved spectra, and discrete line spectra are rejected by that adapter rather than being silently converted into a continuous curve.
|
|
112
|
+
|
|
113
|
+
### Continuous versus discrete integration
|
|
114
|
+
|
|
115
|
+
The mathematical distinction is hard:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
continuous density: integral f(lambda) d-lambda
|
|
119
|
+
discrete line measure: sum line_i
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
`integrateDiscreteSpectralLineMeasure()` therefore sums already wavelength-integrated line quantities. It never multiplies a line by a fabricated `dλ` and never invokes continuous quadrature.
|
|
123
|
+
|
|
124
|
+
A continuous composition plan and a discrete-line measure may coexist in a future mixed-spectrum transport model, but schema/API 0.1.0 keeps them separate rather than pretending one representation is the other.
|
|
125
|
+
|
|
126
|
+
## Temporal boundary
|
|
127
|
+
|
|
128
|
+
Schema `0.1.0` supports time-invariant source emission only.
|
|
129
|
+
|
|
130
|
+
Flash pulses, mains/LED flicker, and other time-varying source waveforms must later consume the existing seconds-based exposure-time contract. They must not invent a second time coordinate.
|
|
131
|
+
|
|
132
|
+
## What this foundation does not calculate
|
|
133
|
+
|
|
134
|
+
A parsed illumination profile explicitly reports that it has not:
|
|
135
|
+
|
|
136
|
+
- calculated outgoing scene radiance;
|
|
137
|
+
- applied material optical response;
|
|
138
|
+
- evaluated visibility/occlusion;
|
|
139
|
+
- evaluated indirect light transport;
|
|
140
|
+
- modeled fluorescence;
|
|
141
|
+
- modeled participating-media/volumetric spectral transport;
|
|
142
|
+
- modeled polarization.
|
|
143
|
+
|
|
144
|
+
Those are scientific boundaries, not renderer implementation preferences.
|
|
145
|
+
|
|
146
|
+
RGB/PBR textures and RGB HDR environments can still be useful preview/reference inputs, but they are approximation paths unless compatible spectral and absolute-radiometric calibration is actually available.
|
|
147
|
+
|
|
148
|
+
## Renderer boundary
|
|
149
|
+
|
|
150
|
+
Photivra owns the semantic inputs and scene-radiance stage. It does not require one renderer implementation.
|
|
151
|
+
|
|
152
|
+
A browser/WebGPU preview, Blender reference render, or future spectral renderer may use different bounded approximations while consuming the same source identities and declared meanings. Approximate backends must not inherit calibrated spectral/radiometric claims merely because they consume an engine-owned profile.
|
|
153
|
+
|
|
154
|
+
## Scene-radiance provider and material-response boundary
|
|
155
|
+
|
|
156
|
+
The engine now exposes a renderer-neutral provider boundary without becoming a renderer.
|
|
157
|
+
|
|
158
|
+
`parseSceneMaterialResponseProfile()` describes stable material-response inputs. Schema `0.1.0` deliberately distinguishes:
|
|
159
|
+
|
|
160
|
+
- unresolved material response;
|
|
161
|
+
- `rgb-pbr-approximation`, with linear-sRGB base color plus bounded metallic/roughness parameters and an explicit limitation;
|
|
162
|
+
- `spectral-wavelength-preserving-data`, bound to a SHA-256 identified data artifact, explicit wavelength basis/range, uncertainty and a provider-defined wavelength-preserving scattering model.
|
|
163
|
+
|
|
164
|
+
RGB/PBR input is always approximation data. Spectral material data may itself be calibrated, but schema 0.1.0 does not model wavelength-changing behavior, fluorescence, material emission, volumetric material transport or polarization.
|
|
165
|
+
|
|
166
|
+
`assessSceneMaterialResponseFidelity()` reports the conservative profile-level state: `spectral-data`, `rgb-pbr-approximation`, `mixed`, or `unresolved`.
|
|
167
|
+
|
|
168
|
+
`parseSceneRadianceProviderProfile()` declares the provider's bindings and fidelity independently across:
|
|
169
|
+
|
|
170
|
+
- spectral evaluation;
|
|
171
|
+
- material response;
|
|
172
|
+
- visibility;
|
|
173
|
+
- direct transport;
|
|
174
|
+
- indirect transport.
|
|
175
|
+
|
|
176
|
+
Its output quantity is fixed to outgoing spectral radiance in `W/m^2/sr/nm`. Provider schema `0.1.0` is intentionally `approximation` only. Calibrated input artifacts therefore cannot automatically promote an incomplete renderer/transport path into a calibrated outgoing-radiance claim.
|
|
177
|
+
|
|
178
|
+
### Evaluation request
|
|
179
|
+
|
|
180
|
+
`parseSceneRadianceEvaluationRequest()` identifies one exact sample by:
|
|
181
|
+
|
|
182
|
+
- provider/scene/illumination/material profile IDs;
|
|
183
|
+
- surface point + scene object + material response, or an environment direction;
|
|
184
|
+
- unit-length outgoing direction;
|
|
185
|
+
- seconds from exposure start;
|
|
186
|
+
- positive wavelength in an explicit air or vacuum basis.
|
|
187
|
+
|
|
188
|
+
`unspecified` wavelength basis is rejected for physical outgoing spectral-radiance evaluation.
|
|
189
|
+
|
|
190
|
+
### Evaluation result
|
|
191
|
+
|
|
192
|
+
`parseSceneRadianceEvaluationResult()` validates provider-produced output with:
|
|
193
|
+
|
|
194
|
+
- exact sample/provider/scene/wavelength identity;
|
|
195
|
+
- `outgoing-spectral-radiance` quantity;
|
|
196
|
+
- `W/m^2/sr/nm` units;
|
|
197
|
+
- finite nonnegative spectral radiance;
|
|
198
|
+
- approximation status, uncertainty, evidence and limitations.
|
|
199
|
+
|
|
200
|
+
Parsing does **not** prove that the renderer's numeric radiance value is physically correct.
|
|
201
|
+
|
|
202
|
+
`validateSceneRadianceEvaluationBindings()` then verifies the exact scene/profile/material/request/result relationships. A surface request must reference a declared material response, and the provider's declared material fidelity must agree with the supplied material-response profile.
|
|
203
|
+
|
|
204
|
+
The validation result explicitly reports that calibrated radiance is not authorized and that optics, sensor-plane irradiance and photons have not been calculated.
|
|
205
|
+
|
|
206
|
+
This means a browser preview, Blender reference path, or future spectral renderer can plug into one stable scientific seam without the engine prescribing its rendering algorithm.
|
|
207
|
+
|
|
208
|
+
## Temporal illumination
|
|
209
|
+
|
|
210
|
+
Time-varying source emission is represented as an additive temporal overlay on the existing illumination profile. The base source keeps its authoritative identity, enabled state, magnitude, geometry and spectrum; the temporal layer supplies a **relative multiplier over physical time**.
|
|
211
|
+
|
|
212
|
+
Use `parseSceneIlluminationTemporalProfile()` to declare:
|
|
213
|
+
|
|
214
|
+
- aperiodic piecewise-linear multiplier waveforms for flash/pulse-like behavior;
|
|
215
|
+
- periodic piecewise-linear multiplier waveforms for flicker/repeating emission;
|
|
216
|
+
- reusable numeric waveform evidence and scientific status;
|
|
217
|
+
- one explicit source↔waveform binding per time-varying source;
|
|
218
|
+
- exact registration of waveform-local `t=0` to the capture reference `first-opening-boundary-phase`.
|
|
219
|
+
|
|
220
|
+
The registration equation is:
|
|
221
|
+
|
|
222
|
+
```text
|
|
223
|
+
waveform time =
|
|
224
|
+
capture time from first opening-boundary phase
|
|
225
|
+
- waveform t=0 offset from that capture reference
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
A calibrated waveform requires quantified relative uncertainty. A calibrated time registration requires quantified absolute timing uncertainty in seconds. Numeric waveform samples require reusable-data or Photivra-owned provenance.
|
|
229
|
+
|
|
230
|
+
`evaluateSceneIlluminationTemporalMultiplier()` evaluates one registered source at one physical capture time. It supports times before or after the capture reference; periodic waveforms wrap deterministically, while aperiodic waveforms return zero outside their declared support.
|
|
231
|
+
|
|
232
|
+
`integrateSceneIlluminationTemporalMultiplierOverExposureWindow()` consumes an authoritative `CaptureExposureWindows` sample from the existing shutter/exposure timing foundation. It uses deterministic uniform-midpoint quadrature over that local exposure interval and reports both:
|
|
233
|
+
|
|
234
|
+
- a dimensionless average relative multiplier; and
|
|
235
|
+
- a seconds-valued integrated relative multiplier.
|
|
236
|
+
|
|
237
|
+
The integration does **not** use sensor data-readout duration as a timing proxy. Readout and exposure remain independent.
|
|
238
|
+
|
|
239
|
+
The result also keeps source `enabled` state separate: a disabled source can retain a non-zero raw waveform value while its effective contribution is zero.
|
|
240
|
+
|
|
241
|
+
### Scene-radiance provider binding
|
|
242
|
+
|
|
243
|
+
`SceneRadianceProviderProfile` may now optionally declare `illuminationTemporalProfileId`. When it does, `validateSceneRadianceEvaluationBindings()` requires the matching temporal profile and verifies that it binds the same scene and base illumination profile.
|
|
244
|
+
|
|
245
|
+
This is semantic binding only. The validator does not prove that the provider numerically applied the waveform correctly, and temporal illumination does not promote provider output beyond the existing approximation-only scene-radiance contract.
|
|
246
|
+
|
|
247
|
+
### Metering and automatic-exposure boundary
|
|
248
|
+
|
|
249
|
+
Temporal illumination is upstream input to future metering/automatic-exposure consumers. This foundation never chooses ISO, aperture, shutter duration, compensation, or a target exposure.
|
|
250
|
+
|
|
251
|
+
That separation allows a future meter to observe changed pre-exposure radiance after a source changes without feeding final display/tone-mapped brightness back into source or exposure selection.
|
|
252
|
+
|
|
253
|
+
## Downstream optical-radiometry bridge
|
|
254
|
+
|
|
255
|
+
#110 now provides the first primary-optics consumer of a validated scene-radiance request/result pair.
|
|
256
|
+
|
|
257
|
+
`calculateSceneRadianceToSensorIrradiance()` preserves the scene sample's:
|
|
258
|
+
|
|
259
|
+
- sample/provider/scene identity;
|
|
260
|
+
- physical time from exposure start;
|
|
261
|
+
- wavelength coordinate and air/vacuum basis;
|
|
262
|
+
- outgoing spectral-radiance value and provenance.
|
|
263
|
+
|
|
264
|
+
It then applies an explicit lens-throughput profile to produce pre-sensor-stack spectral irradiance in `W/m^2/nm`.
|
|
265
|
+
|
|
266
|
+
The first bridge is intentionally limited to:
|
|
267
|
+
|
|
268
|
+
- paraxial circular-pupil acceptance;
|
|
269
|
+
- explicit nominal/working f-number semantics;
|
|
270
|
+
- one mutually exclusive transmission path:
|
|
271
|
+
- wavelength-resolved fractional transmission; or
|
|
272
|
+
- effective working T-stop approximation;
|
|
273
|
+
- one optional field-throughput result applied exactly once.
|
|
274
|
+
|
|
275
|
+
This downstream bridge does **not** change #85 scene-radiance semantics. In particular, the current provider/result schema remains approximation-only, so even calibrated optical-transmission data cannot promote the combined result to calibrated sensor-plane irradiance.
|
|
276
|
+
|
|
277
|
+
The bridge also stops before:
|
|
278
|
+
|
|
279
|
+
- PSF/diffraction redistribution;
|
|
280
|
+
- distortion area-density correction;
|
|
281
|
+
- sensor cover glass / OLPF / microlens;
|
|
282
|
+
- CFA/filter response;
|
|
283
|
+
- QE/responsivity;
|
|
284
|
+
- photon/electron conversion;
|
|
285
|
+
- stray-light contributions.
|
|
286
|
+
|
|
287
|
+
Those remain separately owned stages.
|
|
288
|
+
|
|
289
|
+
## Still outside this slice
|
|
290
|
+
|
|
291
|
+
The following remain later work beyond the completed A–E foundation sequence:
|
|
292
|
+
|
|
293
|
+
- fluorescence/excitation-emission;
|
|
294
|
+
- participating-media spectral transport;
|
|
295
|
+
- polarization;
|
|
296
|
+
- a future calibrated scene-radiance provider contract with sufficient completeness evidence.
|
|
297
|
+
|
|
298
|
+
The staged #85A–#85E foundation sequence is now represented in the engine. Remaining #85 work should be limited to explicitly approved later extensions or closure/hardening rather than widening the renderer contract by default.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Declared scene radiance to sensor irradiance nodes
|
|
2
|
+
|
|
3
|
+
Release context: **package 1.0.1 candidate / root API 1.0.1**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0_1.md).
|
|
4
|
+
|
|
5
|
+
`calculateSceneToSensorIrradianceQuadrature()` connects the existing #85 scene
|
|
6
|
+
request/result boundary and #110 paraxial optical bridge to the Cartesian nodes
|
|
7
|
+
of sensor spatial/spectral quadrature. Its output is physical **W/m²/nm** at the
|
|
8
|
+
**sensor-package-incident, pre-sensor-stack, pre-AA** plane. It remains a bounded
|
|
9
|
+
static sample calculation, not complete production scene-to-file execution.
|
|
10
|
+
|
|
11
|
+
## Bindings and calculation
|
|
12
|
+
|
|
13
|
+
Inputs are existing `spatialQuadrature` and `spectralQuadrature` values,
|
|
14
|
+
`sceneBindings` (provider, illumination, material and optional temporal
|
|
15
|
+
illumination profiles), shared `optics`, explicit `timeSecondsFromExposureStart`,
|
|
16
|
+
and a `samples` array. Each sample contains its exact spatio-spectral `node`,
|
|
17
|
+
`sceneRadianceRequest`, `sceneRadianceResult` and `fieldThroughput` declaration.
|
|
18
|
+
|
|
19
|
+
The adapter shares the irradiance reducer's internal Cartesian binding code:
|
|
20
|
+
profile/channel/plan semantics, the existing 100,000 combined-node budget,
|
|
21
|
+
complete coverage, safe integer indices, exact wavelength and duplicate checks
|
|
22
|
+
are identical. Sparse arrays now receive an explicit scientific-input error;
|
|
23
|
+
valid reduction arithmetic and prior ordinary invalid-input diagnostics are
|
|
24
|
+
unchanged. The internal binder is not exported from the public package root.
|
|
25
|
+
|
|
26
|
+
Provider/profile payloads are parsed, then every request/result is matched to
|
|
27
|
+
those profiles. This adapter requires wavelength-resolved provider fidelity;
|
|
28
|
+
RGB-derived and unresolved fidelity cannot enter this physical node path.
|
|
29
|
+
Requests must match the node wavelength and basis and the common explicit time.
|
|
30
|
+
Each node needs a distinct `sampleId`; identical values are allowed for an
|
|
31
|
+
explicitly declared uniform field but do not prove that field is uniform.
|
|
32
|
+
|
|
33
|
+
For each node the existing optical bridge computes
|
|
34
|
+
`L_lambda * pi/(4*N_working²) * transmission * fieldThroughput`, with the
|
|
35
|
+
existing mutually exclusive spectral-transmission/working-T-stop rules and
|
|
36
|
+
optional front-of-lens filters. The adapter owns `imagePointMm`: it comes from
|
|
37
|
+
the spatial node's **preAntiAliasingSourcePointMm**, never the destination
|
|
38
|
+
aperture point or a caller substitution. Non-unity vignetting results must match
|
|
39
|
+
that source point. Existing bridge validation retains finite-focus assumptions,
|
|
40
|
+
wavelength support, passive transmission, units and separate uncertainties.
|
|
41
|
+
|
|
42
|
+
No aperture area, spectral measure, AA weight, QE or exposure duration is folded
|
|
43
|
+
into the per-node irradiance value. The returned `reduction` delegates those
|
|
44
|
+
spatial/continuous-wavelength measures to the existing reducer once. Passing
|
|
45
|
+
`irradianceSamples` to the EQE adapter recomputes that reduction for its own
|
|
46
|
+
validated execution; **do not add or multiply the diagnostic reductions**.
|
|
47
|
+
|
|
48
|
+
## Explicit EQE handoff
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
const optical = calculateSceneToSensorIrradianceQuadrature(sceneInput);
|
|
52
|
+
const photo = calculateSensorEqeLocalExposure({
|
|
53
|
+
...sensorInput,
|
|
54
|
+
irradianceSamples: optical.value.irradianceSamples,
|
|
55
|
+
responseApplication: {
|
|
56
|
+
...sensorInput.responseApplication,
|
|
57
|
+
sourcePlane: { value: optical.value.sourcePlane, evidence: sourcePlaneEvidence }
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The sensor parameters must produce the same spatial/spectral nodes. The response
|
|
63
|
+
must explicitly support **sensor-package-incident-effective-channel-response**.
|
|
64
|
+
Do not relabel package-incident light as site-incident light, assume an absent AA
|
|
65
|
+
kernel means the entire stack has unit transmission, or apply stack attenuation
|
|
66
|
+
already included in effective package EQE. Site-incident/separable response needs
|
|
67
|
+
an additional correctly modeled stack handoff. The separate stationarity profile
|
|
68
|
+
still authorizes rate × local duration; one evaluated instant establishes no
|
|
69
|
+
stationarity. Dark/completeness/capacity/readout remain explicit downstream data.
|
|
70
|
+
|
|
71
|
+
## Result and limits
|
|
72
|
+
|
|
73
|
+
The result retains canonical plan-order samples with owned request/result copies,
|
|
74
|
+
pre-AA coordinates, provider binding assessments and child optical envelopes,
|
|
75
|
+
plus `irradianceSamples` and the reduction envelope. Aggregate provenance is
|
|
76
|
+
approximation. `sourceTargetProjectionVerified` and `sceneProviderExecutionVerified`
|
|
77
|
+
remain false: a caller-declared environment/surface target is not an engine
|
|
78
|
+
intersection/visibility/transport proof. The provider remains external; no
|
|
79
|
+
callback, renderer, transport or network execution is added.
|
|
80
|
+
|
|
81
|
+
`psfRedistributionApplied` and `temporalIntegrationApplied` remain false. This
|
|
82
|
+
slice does not authorize skipping requested diffraction, defocus, aberration,
|
|
83
|
+
visibility, motion, stray light or temporal transport. Production graph/gates
|
|
84
|
+
are unchanged. Projection/PSF/temporal sampling and committed capture origin are
|
|
85
|
+
remaining #16/#178 work, coordinated with #112; no feature is closed here.
|
|
86
|
+
|
|
87
|
+
Tests independently predict optical irradiance, radiant power and photoelectron
|
|
88
|
+
expectations using SI constants and declared synthetic curves. Split-AA tests
|
|
89
|
+
check source-point vignetting and one-time area/weight/transmission arithmetic.
|
|
90
|
+
Identity/time/basis/coverage/profile/plane failures reject; declared radiance
|
|
91
|
+
passes through optics/EQE into deterministic four-site RAW and paired DNG/JPEG,
|
|
92
|
+
with exact native DNG code preservation. All data is Photivra-owned synthetic
|
|
93
|
+
fixture evidence, not physical camera calibration or source-truth validation.
|
|
94
|
+
|
|
95
|
+
This additive public adapter advances root API **0.107.0 → 0.108.0**; its model
|
|
96
|
+
version is 0.1.0. Package, POC, production, capture/RAW schemas and noise identities
|
|
97
|
+
are unchanged. Newly created captures use the new root API stamp; historical
|
|
98
|
+
replay keeps its stored stamp and pinned file hashes. No new dependency or cost.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Declared temporal scene radiance to sensor EQE
|
|
2
|
+
|
|
3
|
+
Release context: **package 1.0.1 candidate / root API 1.0.1**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0_1.md).
|
|
4
|
+
|
|
5
|
+
`calculateSceneSensorEqeTemporalExposure()` composes the existing scene-to-sensor
|
|
6
|
+
optical quadrature and temporal EQE calculation. It evaluates optics, response
|
|
7
|
+
compatibility, per-bin operating range and EQE **at every local shutter midpoint**
|
|
8
|
+
before integrating rates with seconds-valued measures. It never averages light
|
|
9
|
+
first and uses that average to hide an invalid bright instant.
|
|
10
|
+
|
|
11
|
+
## Input and binding
|
|
12
|
+
|
|
13
|
+
`sensor` is `CalculateSensorEqeTemporalExposureInput` without `samples`. Its
|
|
14
|
+
aperture/AA, CFA/site/native registration and spectral response inputs own both
|
|
15
|
+
quadrature plans. There is no independent caller-supplied optical plan that can
|
|
16
|
+
drift from the sensor plan. `sceneBindings` and `optics` retain the static
|
|
17
|
+
optical bridge's provider/material/illumination, working-f-number, transmission,
|
|
18
|
+
filter and field-throughput validation.
|
|
19
|
+
|
|
20
|
+
`timeReference` must explicitly be `first-opening-boundary-phase`. Each temporal
|
|
21
|
+
sample has `temporalSampleIndex`, `timeSecondsFromOpeningReference` and complete
|
|
22
|
+
`sceneSamples` in the existing optical quadrature shape. Every scene request
|
|
23
|
+
timestamp must equal this local midpoint on the same declared reference. Scene
|
|
24
|
+
query seconds are explicitly bound to that opening boundary by this composition;
|
|
25
|
+
readout time or renderer frame time is not substituted. The temporal sensor
|
|
26
|
+
calculator verifies the exact midpoint against the resolved local shutter window,
|
|
27
|
+
including rolling offsets, with its existing representability checks.
|
|
28
|
+
|
|
29
|
+
Indices must uniquely cover 1–256 temporal samples. Array order is not identity.
|
|
30
|
+
The shared internal temporal preflight checks the aggregate 100,000 declared
|
|
31
|
+
spatial × spectral × temporal node budget before optical calculations. The
|
|
32
|
+
existing optical binder separately checks exact Cartesian coverage. Scene
|
|
33
|
+
`sampleId` values must be unique across all instants as well as within an instant;
|
|
34
|
+
reusing an earlier query identity for a new time is rejected.
|
|
35
|
+
|
|
36
|
+
Output from optics remains **sensor-package-incident, pre-stack/pre-AA W/m²/nm**.
|
|
37
|
+
The response application must explicitly declare that plane and the selected
|
|
38
|
+
effective response must support it. This API cannot relabel light as site-incident
|
|
39
|
+
or silently add stack attenuation already included in package-effective EQE.
|
|
40
|
+
|
|
41
|
+
## Output and downstream handoff
|
|
42
|
+
|
|
43
|
+
The approximation envelope retains canonical `opticalSamples` with child optical
|
|
44
|
+
and provider binding evidence, and an `exposure` temporal EQE envelope with
|
|
45
|
+
independent instantaneous sensor evidence. Child diagnostic reductions are not
|
|
46
|
+
extra signal contributions: do not add them or multiply their measures twice.
|
|
47
|
+
|
|
48
|
+
For compact RAW photo commitment, pass the retained irradiance samples to the
|
|
49
|
+
existing creator, which independently revalidates the temporal physical input:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const scene = calculateSceneSensorEqeTemporalExposure(input);
|
|
53
|
+
const photo = createSensorEqeTemporalPhotoSignal({
|
|
54
|
+
temporalIntegrationId: "capture-site-temporal-001",
|
|
55
|
+
exposure: {
|
|
56
|
+
...input.sensor,
|
|
57
|
+
samples: scene.value.opticalSamples.map(sample => ({
|
|
58
|
+
temporalSampleIndex: sample.temporalSampleIndex,
|
|
59
|
+
timeSecondsFromOpeningReference: sample.timeSecondsFromOpeningReference,
|
|
60
|
+
irradianceSamples: sample.optics.value.irradianceSamples
|
|
61
|
+
}))
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Use `photo.value.photoSignal` with separately calculated exact-event dark charge,
|
|
67
|
+
charge completeness/capacity evidence and existing RAW/noise/readout inputs.
|
|
68
|
+
Revalidation is not a second exposure contribution; use only one photo signal.
|
|
69
|
+
The paired exporter continues to derive JPEG from the exact attached native RAW.
|
|
70
|
+
|
|
71
|
+
## Limits and compatibility
|
|
72
|
+
|
|
73
|
+
Provider results, targets and visibility remain declared approximations. The
|
|
74
|
+
engine does not invoke a renderer, intersect scene geometry or redistribute PSF
|
|
75
|
+
energy here. `sourceTargetProjectionVerified`, `sceneProviderExecutionVerified`
|
|
76
|
+
and `psfRedistributionApplied` remain false. No calibration, combined uncertainty,
|
|
77
|
+
convergence bound, physical accuracy, full-resolution/editor acceptance or
|
|
78
|
+
production-stage activation is inferred. Requested missing capabilities still
|
|
79
|
+
block in the production graph. The historical introduction left #16/#178/#112 open. They are now merged for their bounded scope; the full feature/science checklist is 32/32.
|
|
80
|
+
|
|
81
|
+
This additive public API advances root API **0.110.0 → 0.111.0**, model 0.1.0.
|
|
82
|
+
Package, POC, production, capture/RAW and noise/readout versions stay unchanged.
|
|
83
|
+
Existing temporal validation diagnostics/arithmetic and historical file replay
|
|
84
|
+
remain unchanged. New capture commitments receive the new root API stamp.
|
|
85
|
+
Tests use Photivra-owned synthetic evidence, not third-party calibration. No new
|
|
86
|
+
dependency, asset, network operation or cost is introduced.
|