A radio frequency coverage map rendered in the browser, showing signal strength radiating outward from a transmitter across irregular terrain, with visible falloff behind ridgelines and in valley shadows.
Radio waves don't travel in straight lines. They bend around the earth, scatter off rough terrain, and diffract over obstacles, leaking signal into valleys that have no business receiving anything. Predicting where a signal actually lands involves terrain analysis, horizon geometry, atmospheric gradients, and enough empirical correction factors to fill a research career. The Longley-Rice ITM algorithm, developed at NOAA in the 60s and 70s and still a trusted reference model for cell tower placement, emergency services planning, and rural broadband, handles all of that. Roman Liutikov's WebRF implements the whole thing in compute shaders. The output is a coverage map that blooms outward from a transmitter, hugging valleys and dropping off behind ridgelines with the kind of fidelity that makes you briefly forget you're looking at a browser tab.
The architecture is where things get genuinely interesting. ITM is sequential by nature: you march along a ray, accumulate terrain data, and compute propagation step by step. That doesn't map well to a GPU. Roman's solution is a two-pass radial sweep. The first pass fans out one thread per ray, building terrain profiles from the transmitter. The second pass goes massively parallel, one thread per ray-step pair, running the full ITM computation on those profile prefixes simultaneously. About 500 times more parallelism than a naive port would achieve, across roughly 1,200 lines of WGSL. Which is either impressive or slightly unhinged depending on your tolerance for compute shader debugging.
Start by watching the coverage shift as you move the transmitter around terrain. Then view source. The shader architecture alone is worth the detour.
- Live Demo: https://romanliutikov.com/projects/webrf
- Author: Roman Liutikov (X, LinkedIn, GitHub)