Open-source project
MatrixRex/Uber-Stylized-Water avatar
MatrixRex/Uber-Stylized-Water

Uber-Stylized-Water: a hand-tuned Unity 6 water shader with caustics and a planar reflection probe

An highly customizable stylized water shader for Unity 6

518 stars68 forksShaderLabMIT

At a glance

What is it?
Uber-Stylized-Water is an open source stylized water shader for Unity 6, restricted to the Universal Render Pipeline, with world-space Gerstner waves, projected caustics that need no extra components, an integrated planar reflection probe and a layered foam model. It is a feature-complete shader rather than a starting point, and it trades pipeline freedom for that.
Who is it for?
Uber-Stylized-Water fits a Unity 6 project on the Universal Render Pipeline that wants a finished stylized water look, with caustics, shoreline foam and a reflection probe already wired, rather than a graph an artist assembles from scratch. It does not fit an HDRP or Built-in Render Pipeline project, and it does not fit a team that wants to own every line of the shader.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 18 days ago.
What is it written in?
Mainly ShaderLab, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A finished water look rather than a starting point

Uber-Stylized-Water is described as a highly customizable stylized water shader for Unity 6, and the README calls it an open-source stylized water shader for Unity 6. The primary language of the repository is ShaderLab, which tells you that this is a hand-written shader asset rather than a scene or an editor tool.

What distinguishes it from a tutorial shader is the breadth of what is already implemented. The water surface can be fully opaque or transparent. There is surface foam with distortion motion, insertion foam for interactions with objects where something enters the water, animated shoreline effects, HDR deep and shallow colours, and a customisable shadow colour with opacity. Underneath the surface there is a separate underwater foam layer with its own colour control, underwater refraction, and projected caustics that require no extra components in the scene.

Lighting is handled with adjustable light specular controls, including size, spread, hardness and colour, plus an integrated local planar reflection probe that blends with Unity's own reflection probes. The wave simulation is world-space Gerstner waves, with a separate wave peak colour so the crest can be tinted independently of the body of the water.

For the audience, this is aimed at a Unity artist or technical artist who has a scene that needs water that looks good, in a style rather than a photoreal simulation. The README notes that all the example templates are included, and links a full usage guide on the project's documentation site.

One design decision sits underneath all of it, and it is the reason the shader can look coherent: the surface is described in world space rather than in object space.

URP only, and the rendering paths that are left open

The compatibility section is short and definitive. The requirement is Unity 6, version 6000.0.30 or newer. On the pipeline side, the README marks URP as supported, and marks HDRP and the Built-In pipeline as not supported.

That is a real constraint on adoption, and it deserves to be said plainly. A studio whose project is on the High Definition Render Pipeline cannot use this shader without a rewrite, and neither can a project that has not migrated off the Built-In pipeline. This is a common shape for Unity asset packages, where the author targets one pipeline rather than maintaining several variants, but it means the pipeline decision precedes every other decision about the shader.

The rendering path list is more permissive. The README lists Forward, Forward+ and Deferred, so within URP the shader is not limited to one way of drawing the scene. That matters for performance planning, because the path is chosen per project and per quality tier rather than per asset, and a water shader that only worked on one path would restrict your options more than this one does.

The version floor matters too. Unity 6 with the 6000.0.30 patch level or later is not a very old requirement in a project context, but it does mean the shader is not something you can drop into a Unity 2022 project and expect to work.

So the evaluation order is: check the pipeline, check the editor version, then look at the features. If either of the first two fails, nothing else in this shader matters.

Three separate foam layers and an animated shoreline

Foam is where most stylised water shaders give up, and it is where this one puts the most detail. Three distinct effects are listed.

Surface foam sits on top of the water and moves with a distortion motion, so the edge of the foam shimmers rather than sitting as a static ring. Insertion foam handles the moment something enters the water, the wake around a character or a thrown object, which is the effect that sells the interaction between an object and the surface. The third is a surface foam underwater layer, with a separate colour control so the foam seen through the water can be tinted differently from the foam on top.

That layering is a deliberate stylistic choice rather than an accident of implementation. Real foam is one phenomenon, but a stylised shader that renders it as three independently controlled layers gives an artist direct control over how it reads, which is the whole point of a stylised water shader rather than a simulation.

Alongside the foam, the shoreline effects are animated, which means the transition between wet and dry ground moves rather than sitting at a fixed contour. The deep and shallow colours are HDR values, so they can carry values above one and be used with a tonemapping setup that expects them, and the shadow colour with its opacity is separately adjustable, which is how you get the dark band of water shadow near geometry rather than a flat ambient tint.

The underwater layer also carries the refraction effect and the projected caustics. The README is specific that the caustics need no extra components, which removes the usual step of placing and tuning a projector object in the scene.

A local planar reflection probe inside the shader

Reflections are the part of a water shader that usually forces a scene-side dependency, and this one bundles it.

The README lists an integrated local planar reflection probe that blends with Unity's reflection probes. In practice this means the shader can render a mirror-like reflection of the scene above the water plane without the artist placing and positioning a reflection probe by hand, while still co-operating with any probes already in the scene rather than fighting them.

The specular controls are described separately, and they are worth separating conceptually from the reflection. The adjustable light specular controls cover size, spread, hardness and colour, which are the parameters of the highlight the sun makes on the surface. A reflection probe shows the world reflected, and a specular control shapes the light source's own highlight. Stylised water usually wants a deliberately shaped highlight rather than a physically correct one, and having size, spread, hardness and colour on a slider is what makes that possible without touching the shader code.

Underwater refraction is the other half of the surface story. It is listed among the advanced layers and effects, and it works with the underwater foam layer and the separate deep and shallow colours, so the appearance of what is seen through the surface can differ from the appearance of the surface itself.

What is not documented is the cost. The README gives no guidance on render texture resolution, update frequency, or how the planar probe behaves when several water surfaces exist in one scene, which are the questions a technical artist will ask first. Plan for that by testing a scene with more than one water body before you build a level around it.

World-space waves are why the shader survives multiple meshes

Two features are explicitly world-space, and they are linked to one another in a way that matters more than it first appears.

The wave simulation uses world-space Gerstner waves. Gerstner waves displace vertices along a set of directional wave trains, and the standard parameterisation of them is in object space, where the waves are anchored to the object and travel with it.

The second world-space feature is the UV. The README says the world-space UV ensures water continuous across multiple meshes, which is the classic problem of tiling a water surface: two adjacent quads with object-space UVs show a visible seam where the wave and the texture do not line up, and animated foam or caustics reveal it immediately.

Anchoring both the waves and the UVs to world space removes the seam, at the cost of the water no longer moving with the object. For a large water plane in a level, that is the right trade, since a body of water is a feature of the world rather than of the mesh you happened to author it on. For a swimming pool or a bucket of water that moves, the trade is the other way around.

The wave peak colour is the third piece. It lets the crest of a wave read differently from the body of the water, which is a stylisation trick that has no equivalent in a purely physical wave model and is one of the reasons this looks the way it does.

The whole set of features also assumes a level with a flat water plane at a known height, since the shoreline effects, the reflection plane and the depth based colouring all read the relationship between the surface and the geometry below it.

Getting the shader into a project

The README is honest about the fact that the instructions live elsewhere. The How to use section contains one link, to the full usage guide on the project's documentation site at matrixrex.github.io/Uber-Stylized-Water, and there is no install command, no package manager entry and no manual step written out in the README itself.

What the repository layout tells you is the shape of the delivery. The top-level entries include Assets/, Packages/, ProjectSettings/, docs/, an Uber-Stylized-Water.slnx solution file and a .vscode/ directory. That is a complete Unity project, not a self-contained asset folder, so the practical route is to open the project, or to copy the shader assets and their dependencies from Assets/ into your own project and resolve what comes with them.

Two details reduce the risk of the second route. The example templates are included, so you have working examples to compare against once it is in place, and the docs/ directory in the repository carries documentation alongside the site.

The provenance is also recorded. The README credits the inspiration to Alex Ameye's stylized water shader tutorial, and points to a special-thanks.md file for further credits, which is the file to read if you need to know what was adapted from what.

The last push was on 2026-10-05 and the newest release tag is release/v1.1.6, dated 2026-10-04, so the tree is being actively worked on.

Version labels that do not line up with the tags

The release list is short and has an oddity worth pointing out. The three most recent releases are release/v1.1.6, titled Version 1.1 patch 5, published on 2026-10-04; release/v1.1.5, also titled Version 1.1 patch 5, published on 2026-10-01; and release/v1.1.4, titled Version 1.1 patch 4, published on 2026-08-19.

Two of the tags carry the same human-readable title. That is a small inconsistency, and it matters more than it looks in a project whose only versioning handle is the tag itself. If you write a changelog or a build matrix from the release titles, you will record two different releases under the same patch number. The tag names are unambiguous and monotonic, so the tags are the thing to key on, not the titles.

The naming scheme is also worth noting: the tags are prefixed with release/, so a tag is not a bare version string. Anything that parses tags, a script that extracts versions from releases, has to strip that prefix.

The licence is MIT, with a LICENSE file at the repository root, which is a permissive grant that places no obstacle in front of using the shader in a commercial Unity project. That is a description of the terms rather than a legal opinion, and the file to read is the one in the repository.

For an assessment, the combination to weigh is a small, actively updated, MIT licensed asset whose pipeline restriction is URP only, whose only documentation is a hosted guide, and whose versioning carries a minor labelling inconsistency.

Editorial conclusion

Uber-Stylized-Water fits a Unity 6 project on the Universal Render Pipeline that wants a finished stylized water look, with caustics, shoreline foam and a reflection probe already wired, rather than a graph an artist assembles from scratch. It does not fit an HDRP or Built-in Render Pipeline project, and it does not fit a team that wants to own every line of the shader. Verify first that your project runs Unity 6 at version 6000.0.30 or newer on URP, that your chosen rendering path is Forward, Forward+ or Deferred, and that the reflection probe and caustics behave correctly in your scene lighting before you commit to it for a shipped scene.

Frequently asked questions

Which Unity versions does Uber-Stylized-Water support?

Unity 6, version 6000.0.30 or newer. The README states that compatibility requires Unity 6 with that patch level or above.

Does Uber-Stylized-Water work with HDRP or the Built-In Render Pipeline?

No. The README marks URP as supported and marks both HDRP and the Built-In pipeline as unsupported. Within URP the supported rendering paths are Forward, Forward+ and Deferred.

What effects does the Uber-Stylized-Water shader include?

Opaque or transparent water, surface foam with distortion motion, insertion foam, an underwater foam layer with separate colour control, animated shoreline effects, HDR deep and shallow colours, customisable shadow colour and opacity, underwater refraction, projected caustics needing no extra components, a local planar reflection probe, world-space Gerstner waves and a wave peak colour.

How do I install Uber-Stylized-Water in my Unity project?

The README contains no install command and points to the full usage guide on the project documentation site. The repository is laid out as a complete Unity project with Assets/, Packages/ and ProjectSettings/, and the showcase templates are included.

What is the licence of Uber-Stylized-Water?

MIT, with the LICENSE file at the repository root. The repository also carries a special-thanks.md file crediting the sources of the work.

Which release of Uber-Stylized-Water should I pin?

The newest tag is release/v1.1.6, published on 2026-10-04, and the last push was on 2026-10-05. Note that two different tags, release/v1.1.6 and release/v1.1.5, carry the same title of Version 1.1 patch 5, so key on the tag name rather than the release title.

Official sources

  1. Issues
  2. License: MIT
  3. MatrixRex/Uber-Stylized-Water on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/matrixrex-uber-stylized-water.svg)](https://hysenlabs.com/projects/matrixrex-uber-stylized-water)