Web Ocean 3D
2026 · Active open-source experiment
I built an interactive ocean in the browser, with changing weather, underwater views, and a boat that responds to the waves. The project also explores graphics performance across devices.

OverviewTHE PROJECT
An ocean I could explore in the browser.
- For
- Graphics developers, technical artists, and product teams exploring high-fidelity browser experiences.
- Outcome
- An open-source ocean environment with nine presets, boat and camera modes, underwater views, and a WebGL2 fallback for browsers without WebGPU support.

The experienceIN USE
Take a boat out, change the weather, or look beneath the surface.
- My contribution
- I built the rendering and simulation, along with the controls, asset tools, and performance checks. I also added repeatable captures to compare changes to the graphics.
Technical detailsBUILD CHOICES
How it works.
- System
- Three spectral wave layers drive the ocean. The renderer combines reflection and refraction with foam and underwater effects. The same wave simulation feeds the boat’s buoyancy and wake.
- Key decisions
- Use repeatable visual captures to compare rendering changes under the same conditions.
- Maintain WebGPU and WebGL2 paths from the same shader source to reduce differences between them.
- Keep unused source assets out of the download and optimise the models and textures that the browser actually needs.
- Constraints
- High-fidelity water and island scenes must remain interactive across widely different GPU and browser capabilities.

Looking backPROJECT NOTES
Notes from the project.
- When people tried the ocean on their own devices, some managed to crash it. I went back to the loading and memory use, and the next build worked on more devices.
I’ve always enjoyed graphics work, and an ocean is a good way to get absorbed in it. The light, waves, and weather all affect how the scene feels. Then there is the boat: it needs to react to the same water the player is looking at.
Getting it to run on more devices became a substantial part of the project. I worked through the loading path, reduced memory use, and removed unused source assets from the public build. The repository includes the rendering code and capture tools if you want to see how it works.