Each particle carries three candidate positions as vertex attributes: a scattered position, a position sampled from the rasterised letterforms of BRIJESH, and a position inside one of eleven bars — one per production application I have shipped. The vertex shader blends between them from a single uniform.
Nothing is recomputed on the CPU per frame and no geometry is rebuilt. The entire morph is one interpolation on the GPU, which is why 110,000 particles cost one draw call and stay inside a frame budget.
The wordmark positions come from drawing the text to an offscreen 2D canvas, reading the pixels back, and resampling the ones above an alpha threshold. Sampling the bitmap directly clumps toward wide glyphs, so candidates are collected first and then resampled evenly.
The two details that took the longest were both counter-intuitive. Drift has to fall off as the square of lock, because otherwise the residual motion is wider than a letter stroke and the type dissolves. And per-particle alpha has to drop on lock, not rise — packing the field into a few glyphs stacks additive blending past 1.0 and turns the amber into flat yellow.