Bjørn Reppen.

Graphics & Spatial Data Specialist

I bridge heavy enterprise data and elite GPU performance. Energy grids, industrial digital twins and real-time risk — rendered at 60 FPS in the browser.

See it run live ↓ 1,000,000 points

The "Million Points" Test

A live MapLibre + deck.gl scene rendering 1,000,000 synthetic grid-asset points over Norway. All geometry uploaded once as binary GPU buffers — pan, zoom and animate with zero CPU re-tessellation.

FPS
Points
Draw calls1
RendererWebGL2

Drag to pan · scroll to zoom · color = simulated grid load (green→red). Watch the FPS counter hold steady while the point budget changes.

WebGPU power-flow WGSL · compute

Hundreds of thousands of particles advected through an analytic flow field on a WGSL compute shader — modelling transfer from northern hydro generation to southern load centres. Trails accumulate in a ping-pong texture. The CPU writes one uniform per frame; everything else runs on the GPU.

FPS
Particles
Pipelinecompute + raster
APIWebGPU
low transfer   high transfer

Real @compute WGSL kernel · 64-thread workgroups · GPU-resident particle state.

3D risk surface GLSL · WebGL2

A live exposure surface for fintech / insurtech. A 73k-triangle grid is displaced entirely in a custom GLSL vertex shader by an animated risk field — asset clusters that reprice every frame. The fragment shader ramps colour by exposure and shades with a screen-space normal. Zero CPU geometry work; drag to orbit.

FPS
Triangles73,000
Vertex workGPU
ShaderGLSL ES 3.0
low   medium   high exposure

Surface height & colour = simulated risk · repriced per frame on the GPU.

GPU travel-time map WGSL · compute

A real-time isochrone over real Trondheim terrain (Estenstadmarka / Jonsvatnet). A WebGPU compute shader solves the anisotropic eikonal equation on a 455k-cell DEM — hiking time from any point, with cost from Tobler's hiking function (uphill slow, gentle downhill fastest). The full relaxation solves to convergence in a single GPU submit per click, so the isochrone snaps in instantly. Bands draped on the 3D terrain; a pulsing ring sweeps equal travel-time. Backend is static files; everything else runs on the GPU.

FPS
Grid699 × 651
Within budget
Furthest
Solvereikonal · GPU
CostTobler · slope ×5
near  far / over budget

Click or drag the terrain to move the trailhead (live) · right-drag to orbit · scroll to zoom · Estenstadmarka DEM (Terrarium z13) · 3.5× vertical & 5× slope exaggeration for legibility.

Urban wind & turbulence WGSL · 3D CFD

An unsteady 3D Navier-Stokes solver over a city (Stam "stable-fluids" + a Smagorinsky LES eddy viscosity). Each frame: semi-Lagrangian advection → turbulent diffusion νt = (Cs·Δ)²|S|pressure projection ∇²φ = ∇·u (red-black SOR, no-flow on buildings). The momentum advection produces real wakes, recirculation and vortex shedding behind the towers — it runs live, because turbulence is unsteady. 70k particles trace the flow in 3D, coloured by speed — you can see the eddies peel off the building corners.

FPS
Grid160 × 160 × 12
Free-stream
Peak gust
SolverNS + LES · GPU
calm  gale

Drag to orbit · scroll to zoom · set wind direction & speed · procedural city · unsteady 3D Navier-Stokes + Smagorinsky LES, stepped live on the GPU.

Industrial digital twin CesiumJS · 3D globe

A 3D globe of the Norwegian energy system — offshore platforms, onshore substations and glowing transmission lines over the real coastline. Runs token-free: bundled public-domain imagery, no Ion account, no external calls. Lazy-loaded so it never slows the first paint.

Loads the CesiumJS engine on demand (~heavy bundle, kept out of initial load).

Drag to orbit · scroll to zoom · nodes pulse in real time.

Case studies

Every demo above maps to a commercial problem. Each card links to the live scene it describes.

01 Energy · Grid

Hundreds of thousands of grid assets, one fluid map

Problem. Grid operators hold millions of asset, sensor and meter points. Standard web maps choke past a few thousand markers — the browser stutters, decisions wait on a spinner.

Approach. Geometry is uploaded once as binary GPU buffers and drawn in a single deck.gl draw call. Pan, zoom and animation touch only GPU uniforms — the main thread stays free.

1,000,000points
60FPS on pan
1draw call
View the million-points map →
02 Energy · WebGPU

Real-time power flow, fully offloaded to the GPU

Problem. Visualizing transfer and congestion across a grid means animating huge particle counts. Done on the CPU it pins a core and drops frames.

Approach. A WGSL compute shader advects the entire particle system on the GPU; the CPU writes a single uniform per frame. Trails accumulate in a ping-pong texture for an instantly-readable flow map.

300k+particles
60FPS
1CPU uniform/frame
View the WebGPU power-flow →
03 Fintech · Insurtech

Risk surfaces that reprice every frame

Problem. Exposure and risk shift constantly. Recomputing and re-tessellating a 3D surface on the CPU each tick is far too slow for live decisioning.

Approach. A custom GLSL vertex shader displaces a 73k-triangle grid from the risk field directly on the GPU; the fragment shader handles colour ramp and lighting. Zero CPU geometry work per frame.

73,000triangles
~60FPS
0CPU re-tessellation
View the 3D risk surface →
04 Energy · Digital twin

An industrial digital twin that loads instantly

Problem. 3D-globe engines are heavy. Bolted onto a landing page they wreck first-paint — and managed terrain services add per-seat token costs.

Approach. CesiumJS is lazy-loaded only on demand, so the initial bundle stays small. The twin runs token-free on bundled public-domain imagery — no Ion account, no external calls. A free Ion token drops in photoreal terrain when a client needs it.

0 kBin first load
0API tokens
8live grid nodes
View the digital twin →

Stack

About

I'm Bjørn Reppen, a graphics & spatial-data engineer working independently through Betatech AS. I specialise in the hard part of enterprise dataviz: making millions of records render and respond at 60 FPS by pushing the work onto the GPU with custom WebGPU/WGSL and GLSL shaders.

● Available for engagements · fully remote, working globally.

Start a conversation →

Services

  • GPU & dataviz builds Custom shader and visualization development — the kind of work shown in the demos above.
  • Performance audits Profiling and optimizing existing web/GPU apps that stutter under real-world data volumes.
  • Digital-twin integration Wiring CesiumJS, Mapbox and deck.gl into client systems and live data feeds.
  • Advisory & fractional Architecture review and a fractional graphics-lead retainer for product teams.