In Development July 2026

Float

A first-person experience. You sit on a raft and you look at an ocean. The game gives you no goals.

rustflintoceanshadersproceduralcontemplative3d

Screenshots

About

You are on a raft in an ocean. You made the raft from logs. The ocean is very large. The game asks nothing of you. You can look at your feet in the water. You can watch the light and hear the sea.

SET and DRIFT are two values. SET is the direction of the current that moves you. DRIFT is its speed. These are the only two values that the game measures about you.

Float uses the Flint engine. The Flint source is in the Float repository as a git subtree. Most of the recent Flint rendering work comes from Float. Float needed the ocean, the sky, the weather, the render modes and the underwater view first.

Design Rules

  • The ocean is the primary object. The wave movement must be correct, with real dispersion and real steepness. The deck hesitates before it goes up with a swell, and you feel this movement. The other parts of the game can be simple drawings. The physics cannot be simple.
  • The style is not photorealistic. The game uses flat blue colors, hard-edge foam and light-color skies. The shading has bands. It does not have gradients.
  • Time gives the drama. The light goes from sunrise, to noon, to red sunset, to violet dusk, and then to stars. One continuous parameter controls the cycle. There are no cuts. One day continues for approximately 10 minutes.
  • The interaction is quiet. You can look around you. You can move along the edge of the raft. The absence of goals is the primary design decision.

What Occurs

Almost nothing occurs. This is the design. But the ocean is a system and not a background image. Thus the ocean changes continuously.

Weather. The weather changes without your control. A Markov walk moves the weather between five states: clear, scattered cloud, overcast, rain and storm. A change of state moves the wind during approximately 20 seconds. The wind then increases the sea during 2 minutes and decreases it during 4 minutes. Thus a swell continues after the clouds go away.

Rain falls as thin streaks. The program extends each streak in the direction of its velocity. Each drop makes a ring on the water.

A whale. A whale comes out of the water one time at dusk, in the direction of the sunset. You hear the sound one moment later, because the sound must move across the distance first.

Seabirds. Seabirds fly past in loose V formations. There are more birds near dawn. The program makes a new group for each pass. Thus no two groups are the same.

Dead calm. Dead calm is rare. Before dawn, the sea becomes fully smooth during 8 seconds. The smooth condition continues for 4 hours. The water then shows the stars as a mirror. The sea then returns to its usual condition.

A second raft. A second raft comes out of the haze at noon on the first day. It is old and it has lost one third of its ropes. It moves on the same swells, but it is lower in the water. It stays at a distance of approximately 18 meters. It then moves away on a different bearing.

A reality tear. Sometimes a reality tear occurs. In a tear, the waves fall as code, or the sea becomes red at dusk, or the image bends and smears, or the ocean becomes a cyan wireframe. A tear continues for less than 1 minute. The game does not give an explanation.

Underwater view. When a swell covers the camera, the view goes below the surface. You see dark bands, a bright Snell window above you and shafts of light. A white line of foam stays at the waterline. A low-pass filter decreases the sound until the camera comes above the surface again.

Technical Notes

  • Wave field. The game uses 16 Gerstner waves from a JONSWAP wind-sea spectrum with correct deep-water dispersion. The CPU contains the wave calculation in one location only. The GPU adds the values of the array that it receives. This agreement makes buoyancy possible. The raft samples the same surface at 5 points in each frame.
  • Foam. The game calculates the foam from the Jacobian of the wave displacement. Thus the foam occurs where the surface compresses before a break. The game does not use a height threshold.
  • Composition. All effects use published factors. The update order of the scripts is a hash map. Thus no script reads and then writes the data of a different script. The weather script and the dead-calm script publish multipliers. The script that owns a field applies all of the multipliers itself.
  • Audio. The sound comes from the wave field. It is not a loop. The program monitors each edge and finds when the water touches the bottom of a log. The program then selects a sample tier from the relative speed of approach. When a crest goes past an edge, the program plays a runoff sound and prepares the edge for the subsequent contact.
  • The body. The player body is a rigid-skin figure in a seated position with 18 joints. It has independent fingers and toes. A Python script makes the body. A person did not model it. A test at generation time moves the hands against the thighs through all of the clips. If the hands touch the thighs, the build stops.

Built With

  • Engine: Flint (Rust, wgpu), included as a git subtree
  • Gameplay: Rhai scripts for buoyancy, camera, weather, wildlife and world events
  • Assets: The programs make all of the assets. Models use trimesh and pygltflib. Audio uses numpy. Textures and title art use PIL.
  • Shading: Custom WGSL for the ocean, the sky and the post-process render modes