Feat: support general single-frame cameras and add a near-horizon example

This commit is contained in:
wyj committed 2026-09-06 04:00:21 -04:00
1 parent 94149d75e4
commit 6ae223a642
15 files changed
+771 -166

No files matched your search

+39 -2
View File
@@ -17,7 +17,13 @@ Stars are individual catalog point sources with direction, temperature, and
amplitude. The renderer maps them into the camera image, accounting for
multiple images, gravitational lensing magnification, and frequency shifts,
then accumulates their sub-pixel point-spread functions (PSFs) into an HDR
image. Moving cameras are described by worldline and tetrad tracks.
image. Movie cameras are described by worldline and tetrad tracks.
Single images support independent coordinate position and look direction,
coordinate velocity, and camera roll in both backends. For example,
`--observer-position 1.75 0 0 --observer-velocity -0.5 0 0 --look-ra-deg 0 --look-dec-deg 0`
specifies an inward-moving Schwarzschild camera looking outward from inside
the horizon. See [single-frame camera parameters and complete commands](usage.md#single-frame-camera).
## Current status
@@ -119,12 +125,43 @@ to the cache radius. The [original benchmark record](benchmarks/2mass_galactic_c
preserves the command and terminal output; the command above omits the optional
HDR export.
The Schwarzschild camera points toward the hole. Adaptive refinement should
This example infers a position facing the hole from its look direction and radius. Adaptive refinement should
be configured for the desired image accuracy; it is disabled by default.
Camera controls, movie sequences, lens-map reuse, PSF settings, and HDR output
are described in [usage.md](usage.md). Both binaries provide a complete option
list with `--help`.
### Example: Looking outward just above the Schwarzschild horizon
This camera is static at `(2.1, 0, 0)` in Cartesian Kerr–Schild coordinates,
just outside the horizon at `r=2M` (`M=1`). RA=0°, Dec=0° points along +X,
radially outward. Its coordinate velocity is zero: this is a static
observer, not a freely falling one. The scene uses the bundled synthetic
stellar grid, so no survey download is needed.
```sh
mkdir -p output/imgs
./build/Release/schwarzschild_sky \
--catalog assets/sky_grid_5deg.csv \
--observer-position 2.1 0 0 \
--observer-velocity 0 0 0 \
--look-ra-deg 0 --look-dec-deg 0 \
--camera-roll-deg 0 \
--width 3840 --height 2160 --fov-deg 90 \
--coarse-cell-pixels 16 --refine-max-level 3 \
--exposure 0.01 \
--output output/imgs/schwarzschild_near_horizon_outward_R2.1_0.01_refine3.png
```
[![Synthetic stellar sky seen outward by a static observer at r=2.1M](assets/images/schwarzschild_near_horizon_outward_R2.1_0.01_refine3.png)](assets/images/schwarzschild_near_horizon_outward_R2.1_0.01_refine3.png)
*4K render with a 90° horizontal field of view, exposure `0.01`, and maximum
refinement level 3. Click to view at full resolution.*
The distant sky occupies a bounded angular region around the outward
direction, with repeated images crowded near its edge. Strong gravitational
blueshift pushes both the 3000 K and 12000 K test stars toward blue-white.
### Example: Synthetic test grid with mesh overlay
This example uses `assets/sky_grid_5deg.csv` to inspect lensing and adaptive