Stylized Water 2 documentation

Stylized Water 2

Stylized Water 2
Version: 1.5.1
Review

8.Roadmap #

There really is no shortage of ideas, and there are still plenty of things I want to work on! These are some features that are slated for R&D or are in an early stage. A general design principle if that everything should remain plug & play, and can be disabled entirely to avoid a performance impact for unused features.

I must, however, stress that anything written here is not concrete and subject to change.

The Trello board, used to manage development tasks can be publically viewed here:

Trello Board

Upcoming updates

1.6.0

Waves & Buoyancy update. Slight rework of the API, so that it returns a struct (containing wave height and normal).

  • Improved waves, by using a precomputed set of parameters through the use a “Wave Profile”, this allows using up to 32 individual wave layers
  • Coupling of vertical movement with horizontal movement. Higher waves should means that they start to create crests.
  • Addition of a “Global Water Level” component. Script using the Buoyancy API can up to use this as a reference for the water level.
  • Support for waves on rivers.

This version will be see an update for the Underwater Rendering extension, in order to keep it functional

Extensions

This is all to share some ideas and experiments, they may end up never being released, or are indefinitely on hold. There’s also a limit to how much you can cram into a shader, historically many water assets have been deprecated due to rising complexity, which is to be avoided

Features that are complex, and require a sizeable amount of development time will be published as separate paid extensions. Rather than making a single high priced asset, the intend is to keep things modulair.

In order of importance/completion:

Dynamic Effects (extension asset)

This replaces and combines the previously prototyped Surface Modifiers and Interaction extensions

A decal-like system that allows the water surface to be displaced and its foam and normals to be modified. These decals are projected from a top-down perspective onto the water surface.

In practical terms, it means particle systems, trail renderers and static meshes can be used to influence the appearance of the water.

Bonus: The displacement also works with the underwater rendering water line!

The normals of the water surface are recalculated from the created displacement (Y-axis only), ensuring any and all lighting effects look correct. For example, a wave actually makes the surface appear to curve.

Shown here is a single “Beach Wave” particle system that emits particles moving forward. The ‘Color Over Lifetime’ module is used to control the fading of displacement and foam.

The boat wake above uses two TrailRenderer components, and a ‘ripples’ particle system.

A ripples particle effect is attached to the surfers here

Status: First version. Demo scene, marketing materials and documentation are being prepared.

Performance:
The render pass involved does not rely on an additional camera and integrates natively into a camera’s existing culling/batching process. This is unlike the technique commonly shown in tutorials and utilized in other assets. Thus providing best in class performance for scenes of any complexity.

The rendering range and resolution are the two influential, but scalable, factors. Configurable per render feature.

Typically rendering occupies 64mb in GPU memory. Down to 3mb for low-end quality settings.

Known limitations:

  • Displacement created by effects does not affect C# buoyancy information.
  • Surface displacement requires the Tessellation feature to be enabled on the receiving water material
  • Rendering resolution scales down by the increase in rendering range. Very high detail close to the camera, whilst rendering over long distances (+1000m) is not realistic to expect.

Flowmap painter (extension asset)

Create a flowmap object, with a specific box-size and enables you to paint a flow map within this area. The painter is GPU based, so isn’t per-vertex, and allows for greater detail. This allows the use of brushes (modeled after Substance Painter).

Splines can be used to drive the flow, next to manual painting. But this specific feature would be rebuilt on Unity’s native spline tool when it releases.

Status: Prototype, basic functionality works, but painter needs a lot more UX work. Feature is also doubtfully useful, the flow of the water will mainly be noticeable when using surface foam and strong reflections. Not unimportant: every texture that uses the flow map requires to be sampled twice. In many AAA games you’ll mainly see this used on rivers.

Color gradient

Rather than using a 2 colors to set the deep and shallow color, a gradient can be used.

Status: Binned, mainly because it visually makes a very minor difference, unless going for an rainbow-colored lake. It also creates a troublesome situation where it’s no longer clear to tell what exactly the deep and shallow color is, for underwater rendering and translucency.

Released

1.5.0

  • Color absorption feature, darkens the underwater color based on depth (physically accurate shading)
  • Improved refraction, taking the curvature of the surface into account more accurately.
  • Improved surface foam, where it appears to dissipate based on the “intensity”. Visually, this translates to way better foam caps on wave crests.

1.4.0

  • Conversion to a new “scriptable shader” framework. This allows the shader code to first be passed through a C# template parser. Meaning that things like integrations and support for extensions will be automatically configured. Plus this’ll make it easier to implement URP version specific code, safeguarding against breaking changes.

Underwater rendering (extension asset)

Allows a camera to be partially submerged, and draws a waterline effect on the camera lens. Underneath the water surface, fog and caustics are drawn and the water refracts the scene below the water.

Status: Released!

Tessellation (feature update)

Dynamically subdivides the water geometry to create more vertices near the camera. This allows to have very detailed waves near the camera, without needing a high-poly mesh.

Status: Added in version 1.1.2 through a free update

Yes No Suggest edit
Last updated on August 28, 2023
6 of 6 users found this section helpful
Suggest Edit