They are called bolas. They graze, sleep, play, swim, make friends and get bored, and none of it is waiting for you to arrive. Walk up slowly and they will notice you.
Steering is the same WASD, but it rolls — so it carries momentum, leans into corners and takes a moment to stop. The small ones are quick and skittish. The big ones take a hill like a boulder.
You cannot fly into the ground. Something lifts you over a ridge before you meet it, and the same thing keeps you off the water. The edge of the world is a shield — bump it and you will see it, and bounce off it.
Some of the smaller bolas have a red cape. Those are the fliers: ride one and it will leave the ground with you, and it is markedly faster than you are on your own.
There are no textures, no meshes and no photographs in this project. The terrain is a noise field. The grass is instanced geometry with a wind model. The coats are shell fur generated on the GPU. Every sound is synthesised from nothing in the Web Audio API — the water, the birds, the insects and the animals' own voices. The whole site is about four megabytes, and most of that is the film on this page.
WebGL2 through three.js. Half a million grass blades on a scrolling clipmap that follows you. A 4096-square shallow-water simulation for the ripples, solved on the GPU sixty times a second, whose window slides with you and scrolls its own contents so nothing is lost as you move. Real solar geometry for the sun and moon, so the light at a given hour is the light that hour actually has. Depth of field in real photographic units — the aperture in the settings panel is an f-number.
232 of them: twenty-four herds, three giants and one red titan. They have moods that drift over minutes, individual temperaments, particular friends, and enough of an opinion about each other to start a fight. Not one of them is scripted. The behaviour is a ladder of small rules, and what you see is what those rules do when left alone.
In conversation. Every feature started as a sentence — “the water should ripple everywhere”, “the giants need to be afraid of something” — and became code, then a measurement, then usually a correction. A great deal of this project is the corrections: a ripple solver reading the riverbed from the wrong place, a hunting animal that spawned perfectly and never hunted because it was frozen 172 metres from the player, an orb that quietly slid off a hilltop three separate times because the hill kept moving underneath it.
Almost none of those were found by looking at them. They were found by building something that could measure the thing and then be surprised by the answer, which turned out to be most of the work.