3D / Claude Opus 5.5 9 Oct 2026
Open in a new tab ↗

Thaw

0 Build on this Download
Hot water, cold ice. Hold to pour a hot tap onto a frosted block and it melts into glassy hollows, runnels and caustics. Then LAUNCH your carving 400 times bigger as an iceberg and watch which way it really floats: tall shapes roll onto their side. Drag to circle the berg, even under water. One file of raw WebGL2, with soft sound. The sea part nods to Josh Tauberer's Iceberger, made after glaciologist Megan Thompson-Munson pointed out that long icebergs float on their side.

#simulation#physics#ice#iceberg#water#science#relaxing#webgl

Prompt and process

One Shot - Build "Thaw": one big block of ice under one hot tap. Hold to pour, and the hot water melts smooth, glassy hollows, channels and grooves into the frosted block. Then press LAUNCH: your sculpture becomes a 100 m iceberg, is lowered into a calm sea, and rolls until it finds the way it wants to float. The ice is the star. Make it the most beautiful ice on the web: clear as glass, wet and mirror-bright where water has run, frosted where it hasn't, and throwing caustics across the floor.

Write it as a physicist who knows heat and buoyancy, a product photographer who lights glass for a living, and a graphics programmer. Every number on screen must be correct; say on screen what is simplified. ONE object, ONE gesture: polish beats features.

## Technical rules

- ONE self-contained HTML file using WebGL2. You may use three.js r170 from jsDelivr through a pinned import map, or raw WebGL2. Load Inter from Google Fonts with a system fallback. Make no other network calls, and use no images or audio files: every texture and sound is made in code.
- It runs in a sandboxed iframe that can be 0×0 at load. Size it with a ResizeObserver, never throw on a zero size, and use no alert(). Wrap localStorage in try/catch. If WebGL2 is missing, show one calm line of text, not a blank frame.
- Fill the window from a 360px phone to a large desktop. Support mouse, touch and keyboard, and preventDefault the keys you use so the page never scrolls. Choose the layout by aspect ratio, not width alone: in a short landscape frame such as 672×432, the stage stays large and the controls sit beside it or over its edge, never stacked underneath.
- Hold 60 fps on a laptop and stay smooth on a mid-range phone. Cap devicePixelRatio at 2, lower the raymarch's render scale before dropping frames, pause when the tab is hidden, and respect prefers-reduced-motion (no automatic camera moves; cut instead of glide).
- No placeholders, TODOs or console errors.

## The ice: the most important part

The ice is a 3D ice-fraction volume raymarched in a fragment shader, never a mesh. A point is ice where the trilinearly filtered fraction is above 0.5, so melted surfaces come out smooth and rounded like real melted ice. Use cells of about 2 to 2.5 mm on desktop and 3 mm on phones, in a box big enough to hold any preset on any face, and upload only the changed sub-box each frame. Keep the edge of the ice fraction 2 to 3 cells wide (blur it lightly after each melt step) and take normals from a centred gradient, so reflections stay smooth instead of faceted. Keep melted faces smooth, with no noise wobble on them (it reads as hammered glass); only flowing water adds a faint, moving ripple.

For each pixel, march to the surface, then:
- reflect with Fresnel (ice IOR 1.31)
- refract in, march through the ice to the far side and refract out, with up to two internal bounces. Total internal reflection gives silver flashes along edges and cracks; they are part of the look.
- add a whisper of dispersion by refracting red, green and blue at 1.308, 1.310 and 1.314, so thin edges carry a faint fire. Apply it only where light leaves the ice and make every other decision with one IOR, or the colours break into blotches.

**Surface.** Each cell remembers whether water has touched it.
- FROSTED: fresh from the freezer, the block wears a veil of bright white frost, about half opaque. Light reaches it through the ice from behind as well as from the front, so it glows white rather than grey. It sparkles on two scales: a dense, fine shimmer from the tiny crystals, and sparse pin-point glints where a crystal faces a light, gathering on the faces that catch the lights. Keep the grain very fine and soft; coarse blotches read as terrazzo or sugar.
- WET: wherever water has run, the frost is washed off for good and the surface is a thin water film. It is glassy and mirror-bright, with crisp reflections of the lights, and it ripples gently where water is flowing at that moment.
The edge between frosted and wet is the money shot.

**Inside.**
- Clear ice is nearly flawless, with a few tiny bubbles.
- Cloudy ice has a milky core and a white feather of bubbles in the middle, and is clear near the faces.
- Cracks appear when hot water hits ice colder than about −5 °C, each with a soft tink. They are thin, penny-shaped planes near where the water lands, and they flash silver as the view turns. Allow at most a dozen. Keep each crack fully inside the ice and angled to catch a strip light; a crack that faces the dark reads as a black hole.
- Bubbles and cracks exist only inside the ice, so melting opens them up.

**Light it like a glass product photo.** Build the environment in code (lit rectangles in a room) and use it for both reflection and refraction.
- DARK mode is dark-field: a black seamless backdrop, two tall, narrow white strip lights behind and to the sides (so reflections are thin bright bars, not broad panels), and a narrow key spot from high behind-left, so the caustics fall forward towards the viewer. Edges glow white, and reflections are crisp, clean rectangles.
- LIGHT mode is bright-field: a white seamless sweep with black flags at the sides, so the ice's edges read as fine dark lines over a soft grey shadow.

**The stone.** The block sits on a slab of pale grey honed stone (albedo about 0.25). It is light enough for the caustics to blaze, and the darkness comes from the spotlight's pool falling off into the black backdrop. In light mode the stone is paler still. Dry stone is matte, so it never mirrors the lights. Where meltwater lands, the stone darkens and turns glossy, mirroring the block.

**Caustics.** The key light passes through the ice and casts bright, sharp, swimming caustics on the stone. Compute them for real: trace a grid of light rays (about 256 × 256) through the volume in a vertex shader, splat them additively into a caustics texture, and weight each by how much its footprint shrinks, so focused light burns brighter. Update at about 30 Hz and whenever the shape changes. Each photon carries the share of light that gets through rather than bouncing off at random, and photons scattered by frost are splatted wide; otherwise the floor fills with speckles. Frost scatters light, so a frosted block casts only a soft glow. The sharp caustics arrive as the water washes the frost away, and they change as you carve; that is the reward.

**Blocks.** Every block arrives from a −18 °C freezer, frosted, with slightly rounded edges.
- CLEAR CUBE, 25 cm (the default), 14.3 kg
- CLOUDY CUBE, 25 cm
- PILLAR, 18 × 18 × 40 cm, 11.9 kg
- KEY INSIDE: a clear 25 cm cube with a brass skeleton key frozen in its middle, seen through the ice. Once the ice around it is gone, the key drops onto whatever is below it with a small clink.

## The tap and the water

A minimal chrome spout hangs into the frame from above, its nozzle about 12 cm over the top of the block. A small dial on it has a dot that fades from blue (cold) to red (hot).

Controls:
- HEAT: 5 to 95 °C, default 60. Marks: COLD TAP 15°, HOT TAP 60°, KETTLE 95° (labelled "kettle-hot, not a real tap").
- FLOW: 0.2 to 9 L/min, default 4.
- NOZZLE: STREAM (a 12 mm laminar outlet), JET (4 mm) or SHOWER (a 6 cm rose of 19 fine streams).
- TIME: 1×, 4× or 16×.

**The stream.**
- It is a clear, glassy rope, raymarched in the same pass with water's IOR of 1.333, so it refracts the scene like a glass rod.
- It narrows as it falls: r = r₀ · (1 + 2gz / v₀²)^(−1/4), where v₀ is the flow divided by the nozzle's area.
- At low flow, a trickle necks into beads before it lands (Plateau–Rayleigh). At high flow, it stays a smooth rope with fine travelling ripples.
- Where it lands on a flat area, it spreads into a thin glassy disc that ends in a raised ring: the hydraulic jump you see in a kitchen sink. The ring grows with flow.

**Melting: water as heat parcels.**
- Water leaves the nozzle as parcels (about 1,500 on desktop, fewer on phones), each carrying a mass and a temperature. The stream is drawn analytically; the parcels carry the heat.
- After impact, parcels spread out and then flow downhill along the surface (gravity projected onto the surface), clinging to it and dripping off overhangs and edges. Every cell they cross is washed clear of frost.
- Each step, a parcel gives heat to the ice beneath it at q = h · (T − 0 °C), with h of about 10 to 30 kW/m²·K. It is highest under the jet and rises with jet speed. That heat first warms the ice from the block's temperature to 0 °C (c_ice = 2.1 kJ/kg·K), then melts it (L = 334 kJ/kg). The parcel cools by exactly the heat it gives away (c_water = 4.18 kJ/kg·K) and takes on the meltwater at 0 °C.
- Energy is conserved, so the melting is honest. The signature shapes must emerge from this model, not be painted on: STREAM drills a round, smooth hole; JET drills a deeper, narrower one; SHOWER rounds and polishes the top; a slow trickle cuts winding runnels down the sides; and meltwater running down the faces leaves smooth grooves.
- Meltwater that gathers in a hollow forms a small pool. Keep it simple: one level per hollow, drawn as a flat, still, glassy surface, overflowing at the lowest point of the rim.
- Parcels that reach the stone spread, wet it and fade.
- Track one temperature for the whole block. It starts at −18 °C and rises slowly while warm water runs over it.

Calibrate to these targets at 1× with a 60 °C STREAM at 4 L/min on a clear cube:
- the frost washes off the top within a few seconds
- a hole a few centimetres deep forms in the first minute, slowing as it fills with meltwater
- the whole cube is gone in roughly 15 to 30 minutes
- ice melted per litre always stays below the maximum for that temperature

**Readouts** in small Inter caps with tabular numbers:
- WATER USED (L)
- ICE MELTED (kg)
- BLOCK (kg)
- EFFICIENCY: the percentage of the maximum, where the most ice a kilogram of water can melt is c_water · T ÷ (L + c_ice · (0 − T_block))
- STREAM (°C and L/min)
- TIME (real elapsed time, mm:ss)

## The gesture: hold to pour

- Press and hold on the block or the stone. The tap glides there (eased, with no overshoot) and the water runs. Drag to carve. Release and the tap shuts off, and the stream's tail falls away.
- RUN leaves it running hands-free where it is.
- Drag the background, or use two fingers, to turn the view around the block, between 5° and 60° elevation. The wheel or a pinch zooms a little. There is no free camera.
- TIP rolls the block a quarter turn towards you onto another face, slowly and with a soft thud, so you can carve its other sides.
- NEW BLOCK brings a fresh, frosted block from the freezer.

## LAUNCH: set it to sea

LAUNCH scales your sculpture 400×, so a 25 cm cube becomes a 100 m iceberg. The scene glides to a calm open sea seen side-on in cutaway, like the classic iceberg diagram but done right. A crisp hairline waterline crosses the frame, with sky above and deep water below, so the whole berg is visible.

- The berg is lowered to the surface and released, with no drop and no splash.
- The physics come from your shape. Take mass, centre of mass and inertia from the ice volume (ice is 917 kg/m³). Take buoyancy and its centre from the submerged part (seawater is 1,025 kg/m³), sampled every step from a coarse copy of the volume.
- Use rigid-body motion with added mass and water damping, at real scale. It settles with slow, heavy, majestic rolls that take tens of seconds; TIME speeds it up.
- A top-heavy berg rolls over until it finds a stable way to float. A tall sculpture ends up on its side; a cube floats flat. That roll is the moment.
- At this scale the ice shows its real colour. Pure ice absorbs almost no blue light and a little red, so light that travels tens of metres through it comes out faintly blue. Don't exaggerate it.
- The sea has a gentle long swell of a few small, smooth waves that rock the berg slightly. Below the surface, the water fades to deep ink with depth. In light mode, use a pale overcast sky and a grey sea. In dark mode, use a dim, heavy overcast over a near-black sea, keeping the sky bright enough to light the water from below.
- Readouts: ABOVE WATER (% of volume, about 10.5% for solid ice), HEIGHT ABOVE (m), DEPTH BELOW (m) and TILT (°). When it settles, a caption sums it up, e.g. "It rolled 90° and floats on its side." or "It floats flat, 89% under water."
- BACK TO THE TAP returns to the studio with your block as you left it.

**Orbit the berg.** At sea the camera orbits freely; the studio keeps its limited view.
- LAUNCH lands on the side-on cutaway, the home view. Drag, or use two fingers, to circle the berg a full 360°, from high above down to about 60° below the surface looking up. The wheel or a pinch zooms. A double-tap or H glides back home. Movement eases in and out and never jerks.
- From above, the sea is a dark, gently rippling mirror, and the underwater part fades from view as it would in real water. That is why the cutaway is home.
- Dip below the surface and the view becomes the payoff. The berg hangs overhead, pale and glowing near the surface and darkening to deep blue-ink below, while the sea fades to black in the depths. The surface overhead is a rippling mirror except for one bright circle about 97° across, where the whole sky shows through: Snell's window. Its edge wobbles with the swell, and the mirror outside it reflects the berg and the deep.
- Draw the berg as glacier ice. Ice and water bend light almost equally (1.31 and 1.33), so clear ice would nearly vanish under water. Real icebergs are glacier ice full of tiny bubbles, which is why they glow.
- Light the underwater ice in two ways. First, daylight soaks down through the ice, averaged over random upward paths; straight-up paths alone give hard, flat bands under any hole. Second, the sea's own light falls on each face, bright from above and dim from below.
- Underwater faces carry the shallow scallops, a few metres across, that seawater carves into icebergs. They are shading only, so the shape does not change. Keep their ridges soft, or they read as a net.
- Keep the gallery tone. The water is clear enough to see about 100 m, near-neutral and only faintly cool, and the ice carries the blue. Real seawater is far bluer; say so in the simplified line.
- The roll keeps running while you orbit, so you can circle the berg, or watch from below, as it turns over.

## Look and feel

The UI is gallery-minimal: square corners, hairline borders, tiny uppercase Inter labels with wide tracking, and tabular numbers. It is black on white or white on black, following the system, with a small LIGHT/DARK toggle. The only colours in the scene are the tap's temperature dot, the brass key and the faint blue of deep ice at sea. A small THAW wordmark sits top left, and a one-line caption narrates. On phones the controls sit in a compact panel, and LAUNCH is always visible.

Motion is slow and simple, eased in and out, with no overshoot or bounce. The fun comes from the ice and the physics, not from UI animation.

## Sound

Sound is off until SOUND ON is tapped. Make every sound soft, smooth and ASMR: no hiss beds, no noise scrapes, and nothing sharp above about 5 kHz. Keep the master at about −18 dBFS RMS with a gentle limiter.

- **The stream** is made of many tiny bubble plinks. Each plink is a short sine whose pitch rises slightly; bubbles of 1 to 4 mm ring from about 3.3 kHz down to 0.8 kHz (Minnaert). They sit dense and soft over a smooth low bed, and grow thicker and rounder with flow. Pouring into a deep hole adds a hollow note that falls as the hole deepens.
- **Cracks** make a soft, glassy tink with a faint low tonk through the block.
- **Drips** on the stone are soft plips.
- **The key** lands with a small, warm clink.
- **The tap** turns on and off silently; the water sound swells in and out.
- **At sea**, there is a soft, slow wash. A roll brings a deep, slow groan that is calm and never loud. Under water, everything goes muffled and low, and the wash becomes a soft, deep hush.

## Facts ("?" panel)

Start with a how-to line, then:
- Melting ice takes as much energy as heating the same amount of water by 80 °C.
- So a litre of 60 °C tap water can melt at most about 0.7 kg of −18 °C ice. The EFFICIENCY readout shows how close you get.
- A falling stream gets thinner because it speeds up: the same water each second fits through a smaller circle.
- A thin trickle breaks into beads because surface tension pinches it (Plateau 1873, Rayleigh 1878).
- The ring around a tap stream in a sink is a hydraulic jump, where the fast, thin film suddenly slows and thickens.
- Freezer ice is cloudy because it freezes from the outside in, pushing air into the middle. Clear ice is frozen from one side only.
- Hot water cracks very cold ice because the warmed surface expands while the cold inside doesn't.
- Water expands about 9% when it freezes, which is why ice floats. In seawater, about 89% of an iceberg is under water.
- A block of ice more than about 1⅓ times as tall as it is wide is unstable and rolls onto its side.
- Deep ice looks blue because ice absorbs a little red light, and across tens of metres that adds up.
- In 2021, glaciologist Megan Thompson-Munson pointed out that most iceberg drawings are wrong, because long icebergs float on their side. The next day, Josh Tauberer built Iceberger, a page for drawing one and watching it float.
- Ice and water bend light almost equally, so clear ice nearly vanishes under water. Real icebergs glow because glacier ice is full of tiny air bubbles.
- Under water, the whole sky squeezes into a bright circle about 97° across: Snell's window. Outside it, the surface is a mirror.
- Simplified here: one temperature for the whole block, water tracked as parcels, and no melting at sea. The iceberg keeps your block's exact shape at 400× and is drawn as glacier ice. The scallops under water are texture only, and the sea's colour is kept near-neutral, though real seawater is far bluer.

## Tour and first impression

TAKE THE TOUR (T) runs for 60 seconds and is made for screen recording. A caption narrates each step, and any interaction stops it.

1. A frosted clear cube. The hot stream lands, its ring spreads, and the top turns glassy. Tink: a crack flashes.
2. At 16×, the stream drills a hole while the view turns slowly and the caustics swim.
3. The tap glides, cutting a channel, and meltwater grooves the sides.
4. SHOWER polishes the top into a glassy dome.
5. LAUNCH: the cube becomes a 100 m berg and floats flat, 89% under water.
6. Back to the tap with a fresh PILLAR and a few seconds of carving. LAUNCH: it slowly rolls onto its side. Caption: "Tall icebergs roll onto their side."
7. The view sinks below the waterline and looks up at the berg hanging against Snell's window. Caption: "The whole sky, squeezed into one circle."

On load, show a frosted clear cube with the hot STREAM already running onto its top. Within the first second the glassy ring spreads through the frost and caustics play on the stone. Caption: "Hot water, cold ice. Hold to pour." Buttons: TAKE THE TOUR, SOUND ON and LAUNCH.

Keys:
- Space: run or stop the tap
- arrows: move the tap
- 1, 2, 3: nozzle
- [ ]: heat
- − =: flow
- F: time speed
- R: tip the block
- N: new block
- L: launch or back to the tap
- H: home view at sea
- M: mute
- T: tour
- ?: facts

## Do NOT add

Add nothing that isn't on this page. In particular:
- no splash or spray particles, foam, steam or mist
- no chisels, saws, hands or people, and no other objects on the stone
- no fish, boats, birds, ships, penguins or polar bears
- no wave simulation beyond the gentle swell
- no full-screen bloom, lens flares, god rays, colour grading, decorative gradients or glass UI panels
- no record, share or screenshot buttons, and no free-orbit camera in the studio (only the sea view orbits freely)
- no pre-modelled melted shapes: every hollow comes from the water

The fun comes from the ice, the light and the physics.

## Output

Think through the architecture briefly, then write the complete file from `<!doctype html>` to `</html>`. If you can run a browser, check these and fix what you see:
- 360px wide, desktop width and a 672×432 landscape frame
- light and dark mode
- a 0×0 frame
- reduced motion
- the full tour
- a cube melted away completely at 16×
- a launch of every block preset
- an orbit from high above the berg to under water and back, during a roll

If you must trade scope, protect things in this order:
1. the look of the ice: refraction, frost against wet, caustics
2. the pour gesture and honest melting
3. the stream
4. LAUNCH, the roll and the view from under water
5. sound
6. the tour

Process: one Claude Code session with Claude Opus 5.5. The one-shot ran at Max effort for 4 hrs 54 mins, and Claude built and tested it headless in that session. One follow-up prompt, at Extra high effort: "issue with these cyclinders / circles appears when pouring, they come up or go down the ice most visible on fast speed". Claude found each pool's water was drawn as a flat disc that spilled past the pool's outlet, and fixed it in 1 hr 8 mins. No hand edits.

More from jay88

View all

More made with Opus 5.5

View all
Join Something new every day. Join the buffet