Render less.
Why an interactive 3D globe does not need to behave like a game loop.
A live 3D interface can feel continuous without rendering continuously. Across Hours became calmer, cheaper to run and easier to reason about once the renderer only worked when the image actually needed to change.
The default was the wrong mental model.
A globe suggests animation, and animation suggests a permanent requestAnimationFrame loop. But most of the Across Hours interface is still most of the time. A selected place can remain selected. The solar boundary can remain visually stable between meaningful updates. A user can simply read.
Treating every idle second as a reason to redraw the scene would spend GPU work on identical frames. The better question became: what changed that makes another frame necessary?
Interaction became the trigger.
The renderer is demand-based in the product experience. Interaction, state changes and relevant visual updates invalidate the frame; otherwise the globe can stay still. That keeps the interface responsive without making constant rendering the price of having WebGL on the page.
The exception is intentional motion. Solar Study 001 can run autonomously because continuous movement is part of the artwork. The same renderer supports both behaviours, but the reason for drawing is different.
A useful performance rule.
Performance work is often framed as making expensive work faster. Sometimes the more important move is refusing to do work that has no visible consequence.
For interactive graphics, I now ask for the invalidation model early: what events genuinely change the picture, and what can remain quiet?