Blender renders the 3D once, at quality. The browser gets an image. Everything that has to feel alive — turning, tilting, reacting, lighting up — is a 1–3 KB layer on top, not a 3D engine underneath. Every sample below works on a phone.





Consistency is a config, not a discipline. Every render above came out of one script with a locked house style, so any asset from any source lands looking like the same studio shot it.
MOODS dict. studio, night, dawn — add one per brand, never hand-tune a scene.The trap: at studio power every surface clips to white and the light colour vanishes entirely. Tinted moods need roughly a fifth of the energy.
A service has nothing to photograph. Three lanes that work anyway, in the order I'd reach for them:
What does not work: a hero object. There is no product, and a stock car or handshake photo reads as a template instantly.
A live .glb in three.js. It worked — orbit controls, real geometry,
procedural lighting. It also cost 350 KB gzipped against 21 KB for the
baked still, carried a WebGL context and a mobile-GPU risk, and looked
worse, because Cycles gets 20 seconds a frame and a phone gets 16 milliseconds. The
only thing it bought was dragging the model — and samples 01, 04 and 05 give the feeling of
control for a fiftieth of the weight.