A real-time atmospheric ocean, rendered from scratch.
Brief → C++ / OpenGL → real-time renderer · co-authored with Claude Code
An open-ocean scene built without a commercial engine: a Gerstner-wave water surface, a physically-motivated iceberg above and below the waterline, an underwater environment, and an interactive camera. The point is the rendering itself, math, shaders, and pipeline, brought together into one self-contained app that runs in real time. The same approach could underpin interactive hero visuals or data-driven brand moments in contexts where a full engine is overkill or unavailable.
The renderer, running.
This is the rendering layer beneath the creative work: shader authorship, pipeline design, and physical plausibility without simulation cost.
Sole builder, math to pixels.
I built every layer: the C++ and OpenGL scaffold, the Gerstner-wave ocean surface, the procedural ice material, the underwater post stack, and the interactive camera. Co-authored with Claude Code, with the judgment to know when its output was wrong.
Water, ice, and light are among the hardest things to render.
Real-time rendering of natural phenomena means bridging physically-based theory and performant GPU code. Doing it without a commercial engine means owning the entire stack, the math, the shaders, the architecture, and still landing a convincing image inside a frame budget.
Built a believable scene from shaders up.
Gerstner-wave surface
A physically-motivated water surface driven by summed Gerstner waves, not a scrolling noise texture.
Procedural ice material
The iceberg's look is generated in-shader, holding up both above the waterline and below it.
Depth-aware post stack
Color, light, and visibility shift as the camera drops beneath the surface, handled in post.
Multi-pass rendering
Sky, ocean, iceberg, and underwater effects composited through a structured multi-pass pipeline.
A hand-built pipeline, pass by pass.
No engine doing the hard parts. A self-contained C++ application, dependencies pulled in through CMake FetchContent, with every shader and pipeline stage authored directly. Owning the entire stack means shader issues can be debugged at the source, the renderer can be dropped into non-engine environments, and the dependency surface stays minimal — useful when a platform team needs graphics without bringing an engine along. Co-authored with Claude Code, every output checked against what the frame actually showed.
Co-authored with Claude Code, with the judgment to know when the output was wrong: every shader and pipeline decision was checked against the rendered frame, not taken on trust.
A self-contained renderer, no engine underneath.
Physical plausibility without simulation cost: the look is shaded, not simulated.
The rendering foundation under the creative work, shader authorship and pipeline design owned end to end, with nothing doing the hard parts for me.
Built to show range · graphics craft from math to pixels