Physics
Photometric model
How the GPU turns a 3D model into a magnitude.
Rendering
Section titled “Rendering”The satellite is rendered in orthographic projection from the observer into a floating-point target. Each pixel holds the radiance reflected toward the observer, per unit of solar irradiance:
L = Σ f_r(ωi, ωo) · cos θi · Ewith:
- BRDF
f_r: Lambert (albedo / π) + GGX microfacets (Cook–Torrance, Schlick’s Fresnel, Smith’s masking) — or a measured table; - self-shadowing from a depth map rendered from the Sun (1024², 3 × 3 filtering);
E: solar irradiance times the sunlit fraction (Earth’s shadow), plus the earthshine as an equivalent directional light.
Since an orthographic pixel covers a fixed area A_px perpendicular to the line of sight, the reflected intensity is I = Σ L · A_px (m² sr⁻¹), and the magnitude follows. The image shown as Radiance seen by the sensor is this render — a diagnostic view: the real telescope sees a point, much smaller than the seeing.
Performance
Section titled “Performance”For the curves, evaluations are grouped in batches of 16 to 32: each is rendered in one tile of a mosaic, and the mosaic is read back once, asynchronously, in a Web Worker with its own WebGL context. Rigid parts are merged by material to reduce draw calls. A 24-hour curve with rotation (1,400 orientations) takes a few seconds.
Measured BRDF tables
Section titled “Measured BRDF tables”A laboratory file gives f_r for incidence θi, emergence θr and relative azimuth φ. Each sample is projected on Rusinkiewicz’s half-vector angles:
| Angle | Between |
|---|---|
| θh | Surface normal and half vector |
| θd | Light direction and half vector |
The table has 48 × 32 cells over sqrt(θh / 90°) (to resolve the specular peak) and θd / 90°. Each cell holds the mean of log10 f_r; empty cells are filled by diffusion from their neighbours. This is the bivariate approximation of an isotropic BRDF: it keeps the specular peak, the Fresnel rise and the back-scattering, not the residual azimuth dependence. The GPU reads it as a half-float texture with bilinear filtering.
The parametric model (albedo, F₀, roughness) is also fitted to the samples (least squares on log10, Nelder–Mead from three starting points). It is used for the 3D view, the flash search and the earthshine.
Accuracy
Section titled “Accuracy”| Check | Result |
|---|---|
| Lambertian sphere vs analytic formula | Within 0.002 mag up to 120° of phase, 0.005 mag at 150° |
| Convex Lambertian box, any attitude | Same intensity as the analytic sum over the faces |
| Batched vs single evaluation | Same intensity to the last digit |
| Lambertian table vs parametric model | 0.03 % |
| Glossy table vs its parametric fit | 0.02 % |