Where the 2D version steps through BB84 one photon at a time with a full event log, this scene renders a continuous stream of photons in flight simultaneously — each one a tilted disc whose rotation encodes its polarization basis (flat = rectilinear +, tilted 45° = diagonal ×) and whose spin axis encodes the bit. The whole stream is drawn with a single InstancedMesh, so hundreds of photons in flight cost one draw call.
disc.rotation.z = basis==='Z' ? 0 : π/4
disc.rotation.y = bit * π/2
- Stream density — how many photons per second Alice launches down the fiber; a denser stream reaches statistical significance on the QBER gauge faster.
- Flight speed — travel time of each photon between the towers; purely visual, does not change the underlying statistics.
- Eve node — when active, the amber ring at mid-fiber intercepts every photon, measures it in a random basis, and relaunches it — the same intercept-resend attack as the 2D sim, converging on the same ≈25% QBER given enough photons.
Orbit the scene with drag / pinch to inspect individual photons as they cross the Eve node.