In game industry water can be divided into two domains, ocean and river. This project focuses on river. Not too long ago, a demo of a real-time river editor was developed by graphics programmer Jean-Philippe Grenier from Ubisoft(now Unity). We think what he did was awesome and want to replicate it (as possible as we can).
Traditionally, rivers are rendered using flow maps. Flow maps are generated by fluid simulations or created by artist or even both. Flow maps are used for advection of water properties such as normal and uv. This technique can give the river a deterministic fluid look, but it fails to capture the sense of height compared with the less controlled ocean rendering techniques, which basically stack several noise functions together to generate the waves. Stacking noise functions together only works for ocean because the ocean does not flow. When you want the water both flow and have the sense of height, a new method should be used.
(picture from Rendering rapids in Uncharted 4 by Carlos Gonzalez-Ochoa, Siggraph 2016 Advances in Real-Time Rendering in Games course)
The new method is Wave Particles. Initially, Wave Particles were introduced into game industry by Naughty Dog for Uncharted 3 to simulate local high frequency wave of oceans. Then it was adopted and adapted to render rivers by Naughty Dog for Uncharted 4 paired with stacking technique.
The significance of the Jean-Philippe Grenier's work is that it generates flow map in real-time. That is why the user can interactively create rocks to block the river and affect the flow of river as we can see in the video. When performing advection on height and normal, previous implementations from Naughty Dog or Valve use noise and blending techniques to minimize repetition and pulsing caused by advection of a finite sized texture. But in this demo the developer used a new technique called Wave Profile Buffer to solve the repetition and pulsing.
(picture from Water Flow in Portal 2 by Alex Vlachos, Siggraph 2010 Advances in Real-Time Rendering course)
(picture from Rendering rapids in Uncharted 4 by Carlos Gonzalez-Ochoa, Siggraph 2016 Advances in Real-Time Rendering in Games course)
-
Simple wave particle rendering.
-
Combine wave particle with flow map.
-
Update flow map in real-time.
-
Identify and solve the problems caused by advection of height, uv, normal. (extra features)
-
Milestone 1
-
DX12 frame work
-
Tessellation shader
-
Basic Interaction
-
Basic UI
-
-
Basic wave particle rendering
- Single particle
-
-
Milestone 2
-
Advanced wave particle rendering
- Multiple particles
-
Combine flow map with wave particle
-
Find some interesting flow maps
-
Use flow map to advect wave particle
-
-
Fluid simulation
-
-
Milestone 3
-
Improve rendering method
- Foam
-
Update flow map in real-time
-
Create blockers (rocks and etc.)
-
Advect properties using simulation result
-
-
-
Final
-
Finish unfinished work
-
Identify the problems caused by advection of height, uv, normal
-
- Camera Interaction
- Wave Praticle Scale
- Tessellation level
- Radius
- Speed
- Wave particle with flow map
- Flow map
- Flow map driven texture
- Wave particle
- Horizontal blur
- Vertical blur
- Horizontal and vertical blur
- Wave particle driven deviation
- Fluid with different cell size
- Fluid with different impulse location
- Influence of fluid density/velocity dissipation
- Flow map we will be using to guide the movement of wave particles
- Specularity
- Fluid sim with vorticity confinement
- Divergence
- Divergence as foam
- Render with interactions
River Editor Water Simulation in Real-Time