Stressball
Build a single self-contained HTML page (WebGL2, no libraries) with an interactive, realistic 3D stress toy rendered by raymarching signed distance fields. Full-screen canvas, no instruction text. OBJECTS (tap the background to cycle; three small dots at the bottom show and select the current one) Smiley ball: yellow foam sphere with a printed black smiley face (two oval eyes, one clean smooth arc for the smile with round ends, no extra tucks). Fine foam pores, a faint mould seam around the back. Blue background. Heart: puffy foam heart, one smooth continuous dome with no visible creases or lines on the surface. Classic heart outline with a V-shaped dip between the lobes and a slightly rounded bottom point (not sharp, not blobby). Soft velvety flocked finish. Soft lavender background. Bread loaf: squared-off sandwich loaf with a domed crown that slightly overhangs. Flat cut faces at front and back showing warm cream crumb with fine holes; golden-brown crust, darker on top, subtle sheen, a very faint fine flour speckle only on the top. Deep warm espresso-brown background. When switching, the current object squashes down and the next springs up; the background colour fades across. SQUEEZE PHYSICS Press and hold on the object to squeeze. The dent is wide (a broad area, not a pinpoint), deepens the longer you hold, and the surface crumples with creases around it and gently across the whole object. Keep wrinkles subtle. The whole object also squashes along the press direction, bulges a little sideways, and shrinks overall (around 30% at a full squeeze), like foam compressing toward its core. Thin shapes (heart, loaf) get a shallower press so a squeeze never punches through. On release it recovers slowly like memory foam: dent and size ease back, creases fade last, with a small wobble as it settles. Supports multiple fingers on touch. A slow idle "breathing" when untouched. CAMERA Drag the background to orbit around the object, with inertia. Horizontal scroll also orbits; vertical scroll or pinch zooms. Subtle parallax toward the mouse. Start fully zoomed out so the object sits small in the middle. LOOK (premium, product-photo feel) Smooth anti-aliased silhouettes (supersample edge pixels). Large soft key light, thin cool rim light from behind, coloured bounce light from the background below. Soft contact shadow on an invisible floor, tinted with the background colour rather than grey. ACES tone mapping, gentle vignette, very light film grain from an integer hash (no visible diagonal patterns or banding). SOUND (always on, starts on first interaction) Per-material squeeze sounds with a low thump underneath: springy foam (smiley), muffled cushion (heart), soft bready crunch (loaf). An airy sigh on release, a little pop on switching. Also: adaptive resolution to stay smooth, respect prefers-reduced-motion, works at phone width.



