Skip to content
LightCurve
WebsiteApp

Physics

Photometric model

How the GPU turns a 3D model into a magnitude.

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 · E

with:

  • 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.

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.

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.

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 %