✳

Nebulabrot

PHASE SPACE / 001
CONNECTING GPU
ORBIT DENSITY / COMPLEX PLANE
The classic nebula
● ACCUMULATING
ATTEMPTS0ZOOM1.00×RES—00:00RATE—

Small equation. Infinite paths.

Choose orbit-density views or Mandelbrot, Julia, Multibrot, Tricorn, Nova, and Burning Ship. Standard views use GPU supersampling. Julia Nebula can sample a Gaussian spread of nearby seeds to form a broader cloud; set Cloud seed spread to zero for exact fixed-seed orbit density. Every family also has a Nebula rendering style: escaped orbit density, or travel-weighted converging paths for Nova. Starting samples cover the square −2 to 2 on both complex axes. Converging-path views taper this sampling boundary and weight travel distance to suppress stationary tails. Burning Ship folds both components of z to their absolute values before squaring. The classic view renders per-pixel escape times directly on the GPU.

This is a true orbit-density Nebulabrot: GPU compute shaders trace escaped Mandelbrot orbits and add their visits to three atomic histograms. Soft orbit transitions use fractional escape times and tapered channel weights to reduce cutoff contours, without blurring the image. A second GPU pass turns those densities into light. The optional Denoiser applies an edge-aware spatial filter to the display before exposure and color; accumulated orbit data stays unchanged. It also applies to PNG and EXR exports. Firefly confirmation holds back uncorroborated brightness using four independent orbit streams and a separate evidence mask for each color channel. Repeated visits from one orbit cannot confirm themselves. It is a conservative display estimate: faint features can appear later. The raw 64-bit exposure is retained and can be shown with confirmation, isolated-spike rejection, and denoising Off. Isolated-spike rejection replaces extreme per-channel peaks with supported neighboring density before exposure, preserving lines with two neighboring supports. It can remove genuine isolated highlights. Auto exposure uses absolute log-density percentiles, without a floor tied to the brightest pixel. Its exposure estimate is normalized by attempted orbits, then eased over time with a two-stop-per-second limit to prevent flickering.

Drag to pan, use the wheel or + / − to zoom. On touch screens, drag with one finger, pinch with two fingers to zoom, and twist two fingers to rotate. Screen rotation turns the camera clockwise around the current screen center; navigation and exports use the same angle. Space pauses sampling; R resets the view. Exposure and contrast update without discarding samples. Lock current look freezes the displayed tone ranges and color controls independently of Auto contrast. Its RGB scaling is normalized by attempted samples and complex-plane pixel area, so pan, zoom and resolution changes do not trigger display rescaling. Unlock resumes the selected mode.

Requires a browser with WebGPU enabled, on HTTPS or localhost. Sampling uses a salted 64-bit attempt counter and independent random dimensions. RGB contributions accumulate in paired 64-bit integer counters, without periodic decay. Guided sampling learns a hierarchical GPU importance map, from 128 × 128 to 1024 × 1024 as you zoom, with 15% uniform exploration and inverse-probability correction. Guided proposals use overlapping tent distributions with a matching continuous probability density, avoiding hard cell transitions. The guide blends squared RGB contribution estimates before taking their square root, reducing reactions to isolated lucky hits. Orbit hits use subpixel tent reconstruction to reduce pixel-grid aliasing at high zoom. Each weighted contribution is shared among neighboring pixels without creating extra evidence votes. Fine orbit structure remains limited by single-precision arithmetic. During navigation, the previous image is reprojected as a temporary preview while a fresh, weighted density map converges.

Benchmark

HEAVY / 2048 × 2048 / 32M ORBITS PER BATCH

Heavy · 2048 × 2048. Identical settings: 32M orbit batches and 4 × 4 Burning Ship supersampling. Around 30 seconds plus preparation. Keep this tab visible. Your view is preserved.

Orbit sampling
Full nebula renderer
Burning Ship · supersampled

Method & fixed settings

Heavy · 2K / Light · 1K: Heavy renders at 2048 × 2048 and Light at 1024 × 1024. All other settings are identical: 33,554,432 orbits per dispatch, the same fixed scenes and seeds, 4 × 4 Burning Ship supersampling (16 samples per pixel), and 1,024 iterations. Nebula rendering includes Strict confirmation, isolated-spike rejection, Balanced denoising and auto exposure. Each nebula test starts from the same 67,108,864-orbit density. Both use four warmups and three 2.5-second timing windows per stage. Heavy retains workload version 3; Light has its own version because it replaces the earlier reference workload. Compare scores within the same mode and workload version.

CPU: Heavy and Light keep the same fixed scenes, iteration limits, filters and 16-sample Burning Ship supersampling. CPU workloads use 16K orbit batches, a 1M-orbit starting density and one warmup. Three 2.5-second windows measure each stage; slow frames can extend the run. All reported CPU threads are used, up to 64, when shared memory is available; otherwise one worker is used. CPU results have separate rankings and workload versions. CPU score v1 uses reference rates of 100,000 orbits/s, 1 nebula frame/s and 1 Burning Ship frame/s. Diagnostics requires a GPU.

Orbit diagnostics v2: 16,384 / 65,536 / 262,144 / 1,048,576 / 2,097,152 / 4,194,304 / 8,388,608 / 16,777,216 / 33,554,432 attempted orbits per dispatch. Two-dimensional dispatch indexing removes the single-row workgroup ceiling. Unsupported sizes are skipped based on device buffer and dispatch limits. Sizes predicted from a measured large-batch warmup to exceed 750 ms per dispatch are also skipped. Each setting traces the same first 33,554,432 fixed-seed uniform samples, three times, with fresh buffers each trial. The scene and RGB limits match the nebula score test. Compare the full tracer against a variant without density splats or evidence-mask writes. Both variants store identical small per-invocation checksums to preserve observable tracing and projection work. Warmup, buffer resets and pipeline creation are excluded. Completed throughput includes submission overhead and the bounded queue drain; sampled GPU dispatch times are saved in JSON. Variant order alternates; the middle sweep reverses batch order. These measurements do not receive an Orbit score or change the existing score workload. Cancellation drains only the queued bursts; a single large dispatch can take longer on slower GPUs.

Nebulabrot “Into the heart”: center (0, −0.25), span 1.4, rotation 0°, RGB limits 2,000 / 500 / 50. Uniform sampling with a fixed seed. Burning Ship “The flagship”: center (−1.755, 0.035), span 0.08, rotation 0°.

Both modes keep three bounded bursts in flight, targeting 40 ms per burst with 1–64 work units. Four warmup frames and burst calibration are excluded. Three 2.5-second windows count completed work, including draining their queued backlog. Frames render offscreen; the preview updates periodically. Timing readbacks sample every eighth frame. Milliseconds per frame comes from completed throughput; GPU median and p95 measure sampled work units. Other GPU activity and temperature can affect results. JSON results include all settings and queue sizes.

Orbit score v1: 1000 × ∛[(sampling rate / 1,000,000) × (nebula rate / 60) × (Burning Ship rate / 120)]. Each rate is the median completed-work throughput across the three timed windows. The rendering rates count completed frames, independent of monitor refresh. All tests have equal weight. A virtual reference of 1 million orbits/s, 60 nebula frames/s and 120 Burning Ship frames/s scores 1,000 points; doubling every rate scores 2,000. These are fixed scale anchors, not a measured reference GPU. The score includes browser and submission overhead and always uses elapsed timing, including on devices with GPU timestamps. Compare results with the same workload and scoring version. Incomplete runs do not receive a score.