Object Tracer

2026-07-12 · ENGINEERING

Week 1 — Engineering Challenges Behind ObjectTracer

One of the biggest challenges in ObjectTracer was rendering 40,000+ live aircraft on a 3D globe while maintaining 60 FPS, even on mobile devices.

The problem: 1. Naively creating one Three.js Mesh per aircraft means 40,000+ draw calls every frame. 2. That's also 40,000+ scene graph objects being updated every frame. 3. The CPU becomes the bottleneck long before the GPU is fully utilized, making the experience unusable on most devices. The solution: 1. Switched to GPU instancing using InstancedMesh. 2. Each aircraft category (planes, widebodies, helicopters, ships, satellites, etc.) is rendered with a single instanced mesh. 3. The geometry is uploaded to the GPU only once, while every aircraft stores only its transform matrix and color. 4. Reduced rendering from 40,000+ draw calls to just a handful — roughly one per object category. Optimisations that made it practical: 1. Every aircraft has a permanent slot, so live WebSocket updates only modify the affected instance without rebuilding or reallocating buffers. 2. Dynamic screen-space scaling keeps aircraft readable at every zoom level while preserving realistic sizing when you're close to the ground. 3. Selecting an aircraft updates only the colors of the previously selected and newly selected instances instead of synchronising all 40,000+ objects. This is one of those engineering problems users never notice when it's solved, but they immediately notice when it isn't. Next week: how do you make 40,000+ aircraft individually clickable when they're all rendered as just a handful of GPU draw calls?

ObjectTracer Engineering · building in public

More from the Space Journal

← Messier 24: Sagittarius Star Cloud · Galaxy NGC 474: Shells and Star Streams →

← All posts