Skip to content
Viacheslav K.
← Lab

Icehouse

A walkable winter playground. Slice ice, throw the pieces into a pool, and leave your footprints outside.

Downloads 3.6 MB on demand

WASD / Left-side drag
Walk
Mouse / Drag
Look
Click / Tap
Swing sword
E / Double tap
Door or pick up/drop
Right click / Long press
Place portal pair
Q
Throw held object
Space
Jump
Escape
Pause
Built
Stack
TypeScript, three.js, WebGL, Vite

How it works

A timber room opens onto a snowy courtyard, with a pool that responds to what you throw into it. The sword cuts convex ice into new, capped meshes that remain physical objects. Ice and wood float while stones sink; snow sprites deform with a damped spring when they land. Outside, footsteps permanently depress and shade the snow. A small hut contains a live doorway into a much larger room, using a translated camera view and matching traversal.

Notes

  • First-person walking, jumping, swimming, mouse look, and touch controls share one playable scene
  • Runtime convex mesh clipping produces reusable ice fragments with newly generated cut surfaces
  • Pick up, drop or throw props; density-dependent buoyancy connects their motion to the pool
  • Right-click two large wall surfaces to place a temporary portal pair; traversal preserves facing and consumes both portals
  • Outward-opening entrance doors respond to E, with rotating collision and blocked-motion checks
  • Splash crowns, reflective droplets, delayed rebound jets and secondary impacts connect the surface to the spray
  • A damped height-field simulation propagates impact ripples across the water and reflects them off the basin edges
  • Footprints depress the snow grid and leave detailed boot-tread imprints, so the path you took remains visible
  • Local CC0 Poly Haven textures, a winter HDR sky, planar water reflections and shadowed indoor lighting add material detail and depth
  • A virtual camera renders the pocket-room doorway; crossing transfers the player and carried object to the matching space
  • Snow sprites use spring-driven deformation; prop contacts use a bounded approximation rather than a general rigid-body solver