End of milestone 3

This commit is contained in:
connor committed 2026-10-17 19:29:59 -04:00
1 parent 5e2769faa8
commit cc70cea7f6
13 files changed
+192 -84

No files matched your search

+47 -37
View File
@@ -32,6 +32,8 @@ step up is visible at a glance.
|---|---|---|---|---|---|
| L0 / C0 | Lambertian surfaces, Earth's and the Moon's limbs exact, eclipse by Earth and the Moon, no shadows on the target, no light from Earth | Pinhole, absolute radiometry to 12-bit DN, no noise or blur | 0.9–1.3 ms | 5–68 ms | [![L0/C0](docs/images/l0-c0.png)](docs/images/l0-c0.png) |
| L1 / C0 | Adds Earth's surface from Blue Marble and the Moon's from the LRO Camera's map, the Moon's measured phase curve, shadows on the target, Earthshine and Moonshine, eclipses seen on Earth and the Moon, the Sun's limb darkening | Pinhole, absolute radiometry to 12-bit DN, no noise or blur | 1.3–2.3 ms | 12–114 ms | [![L1/C0](docs/images/l1-c0.png)](docs/images/l1-c0.png) |
| L1 / C1 | As L1 above, with stars from Hipparcos, Tycho-2 and Gaia | Adds pixels that collect light over their area (the scene rendered 2 x 2 finer, then averaged), lens distortion, a Gaussian lens blur, the Sun, Moon and Earth at their apparent positions, shot, dark and read noise, PRNU, DSNU and hot pixels, blooming | 4.1–5.2 ms | 83–684 ms | [![L1/C1](docs/images/l1-c1.png)](docs/images/l1-c1.png) |
| L1 / C2 | As L1 above, with stars | Adds diffraction (the Airy pattern over each channel's band) or a measured PSF, applied with its wings by FFT | 35–37 ms | 0.61–1.22 s | [![L1/C2](docs/images/l1-c2.png)](docs/images/l1-c2.png) |
Times are one 1920 x 1080 RGB frame end to end (`submit` to `wait_view`, with
the DN image ready to read), median of criterion runs, over models from 12 to
@@ -40,15 +42,21 @@ the DN image ready to read), median of criterion runs, over models from 12 to
sensor pass writing the image into memory the CPU reads. `wait`, which copies
the 12 MB image into a new `Vec`, takes 1.8 to 2.0 ms on the RTX 3060 at L0
and 2.3 to 3.1 ms at L1, and on lavapipe 7 to 77 ms and 14 to 144 ms. L1's
setup also loads the Earth and Moon maps, about 1 s, once. lavapipe ran on the
Intel Core Ultra 9 285K's 24 cores. Run to run, the RTX 3060's times vary by
about 5 %, and lavapipe's by up to 15 % between sessions. The samples are the
Landsat 8 example scene (`examples/scenes/landsat8.toml`). `cargo bench -p
resolved` reproduces the numbers (L1 when the maps are in `data/`), and
`resolved render --timings N` shows the per-pass split.
setup also loads the Earth and Moon maps, about 1 s, once. In the sample scene
the GPU's work is 3.8 ms at C1, of which 1.3 ms is drawing Earth and the Moon
at 2 x 2 and 1.0 ms the blur, and 33 ms at C2, of which 30 ms is the FFT
convolution on a 4096 x 4096 grid. The C2 sample uses the example camera's
Gaussian PSF, and looks like C1's: at f/4 the Airy core is smaller than a
pixel, and its wings show around the Sun (`examples/scenes/sun-glare.toml`).
lavapipe ran on the Intel Core Ultra 9 285K's 24 cores. Run to run, the RTX
3060's times vary by about 5 %, and lavapipe's by up to 15 % between sessions.
The samples are the Landsat 8 example scene (`examples/scenes/landsat8.toml`),
the preview (not `--pretty`) at half size, with the noise of seed 0. `cargo
bench -p resolved` reproduces the numbers (L1 when the maps are in `data/`,
and stars from C1 when the catalog is), and `resolved render --timings N`
shows the per-pass split.
Planned: C1 and C2 add pixel-area sampling, lens distortion, blur and detector
noise; L2 adds measured materials and the atmosphere; L3 is path traced.
Planned: L2 adds measured materials and the atmosphere; L3 is path traced.
## Usage
@@ -137,23 +145,27 @@ cargo run --release -p resolved-cli -- render \
--out frame.png --preview preview.png --timings 50
```
`scripts/make-gallery.sh` renders every example scene at L0 and L1 into
`gallery/` with `--pretty`, skipping any whose model or data is missing, and
`scripts/serve-gallery.py` serves the result as a web page on port 8000 of
every interface, each scene captioned from its file.
`scripts/make-gallery.sh` renders every example scene at L0 and L1, with
camera C1, into `gallery/` with `--pretty`, skipping any whose model or data
is missing, and `scripts/serve-gallery.py` serves the result as a web page on
port 8000 of every interface, each scene captioned from its file.
`crates/resolved-showcase` makes a 30-second movie at lighting L1: an inspector
holding station behind a Landsat 8 model 705 km up, which astrokit propagates
with J2. Time runs fast over the daylit Earth, slows as the Moon rises over the
limb ahead, and slows almost to real time as the spacecraft passes into Earth's
shadow. The camera drifts on a small natural relative orbit around its station,
and adjusts its exposure frame by frame as a video camera does (up to one
frame's time), through dawn and dusk. `--out movie.mp4` encodes it with ffmpeg,
rendering each 1920 x 1080 frame in about 4 ms on the RTX 3060. `--serve
`crates/resolved-showcase` makes a 30-second movie at lighting L1 and camera
C1: an inspector holding station behind a Landsat 8 model 705 km up, which
astrokit propagates with J2. Time runs fast over the daylit Earth, slows as
the Moon rises over the limb ahead, and slows almost to real time as the
spacecraft passes into Earth's shadow. The camera drifts on a small natural
relative orbit around its station, and adjusts its exposure frame by frame, up
to the flight time between frames, by at most 6 times per second of flight. It
meters the first frame before taking it. In Earth's shadow at the end,
exposures reach about 2 s, and show the target lit by the Moon and the stars
above the limb. `--out movie.mp4` encodes it with ffmpeg, rendering and tone
mapping each 1920 x 1080 frame in about 9 ms on the RTX 3060. `--serve
0.0.0.0:8010` renders it live, in step with the clock, and streams it as MJPEG
at 60 frames per second (`--fps`; it keeps up to 120, rendering each frame in
under 5 ms) to the gallery page's Movie tab, which also plays and offers the
recorded file (`make-gallery.sh` writes `gallery/movie.mp4`):
at 60 frames per second (`--fps`; at 120 it skips up to 16 frames in 5 s),
skipping about 9 more where the flight starts over, while it meters, to the
gallery page's Movie tab, which also plays and offers the recorded file
(`make-gallery.sh` writes `gallery/movie.mp4`):
```sh
cargo run --release -p resolved-showcase -- --serve 0.0.0.0:8010
@@ -199,23 +211,21 @@ cargo run --release -p resolved-showcase -- --serve 0.0.0.0:8010
## Status
Lighting L0 and L1 and camera C0 are in: the library renders Earth, Moon, Sun
and targets to DN through `Renderer`, and the CLI renders scene files. Lighting
L1 draws Earth's surface from Blue Marble and the Moon's from the LRO Camera's
map, shadows on the target, light from Earth and the Moon on it, eclipses on
Earth and the Moon, the Sun's limb darkening, and stars from Hipparcos,
Tycho-2 and Gaia, which camera C1 shows. Camera C1 is under way: so far,
Lighting L0 and L1 and cameras C0, C1 and C2 are in: the library renders
Earth, Moon, Sun and targets to DN through `Renderer`, and the CLI renders
scene files. Lighting L1 draws Earth's surface from Blue Marble and the Moon's
from the LRO Camera's map, shadows on the target, light from Earth and the
Moon on it, eclipses on Earth and the Moon, the Sun's limb darkening, and
stars from Hipparcos, Tycho-2 and Gaia, which camera C1 shows. Camera C1 adds
pixels that collect light over their area, lens distortion (Brown-Conrady),
lens blur (a Gaussian PSF) applied to the scene rendered 2 x 2 finer than the
pixels, the Sun, Moon and Earth at their apparent positions (light time
and aberration), detector noise (shot, dark current and read noise, seeded
and reproducible), the detector's fixed pattern (PRNU, DSNU and hot pixels),
and blooming along columns or into neighbors. Camera C2 adds diffraction
(the Airy pattern, averaged over each channel's band) and measured PSFs,
applied with their wings by FFT. Planned, in order:
pixels, the Sun, Moon and Earth at their apparent positions (light time and
aberration), detector noise (shot, dark current and read noise, seeded and
reproducible), the detector's fixed pattern (PRNU, DSNU and hot pixels), and
blooming along columns or into neighbors. Camera C2 adds diffraction (the Airy
pattern, averaged over each channel's band) and measured PSFs, applied with
their wings by FFT. Planned, in order:
- Camera: the C1 and C2 checkpoint, their rows in the table above with
sample images.
- Lighting: BRDF and spectral materials, atmospheric scattering, clouds, lunar
terrain.
- Portable ray tracing, path tracing, and label outputs for ML.