A dx12 river renderer using wave particles with interactive vortices.

Overview

Wave Particles with Interactive Vortices

Final Result

Overview

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.

(picture from Implementing Wave Particles for Real-time Water Waves 2007)

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)

Goals

  • 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)

Milestones

  • 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

Milestone 1 Update

  • Camera Interaction

  • Wave Praticle Scale

  • Tessellation level

Milestone 2 Update

  • 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

Milestone 3 Update

  • Specularity

  • Fluid sim with vorticity confinement

  • Divergence

  • Divergence as foam

  • Render with interactions

References

River Editor Water Simulation in Real-Time

Wave Particles Slides

Wave Particles Paper

Water Surface Wavelets

Uncharted 3 Ocean Rendering

Uncharted 4 River Rendering

Valve Flow Map

A 2D Fluid Solver

GPU Gems: Fast Fluid Dynamics Simulation on the GPU

A Similar Workflow

Caustics

You might also like...
2D GPU renderer for dynamic UIs
2D GPU renderer for dynamic UIs

vger vger is a vector graphics renderer which renders a limited set of primitives, but does so almost entirely on the GPU. Works on iOS and macOS. API

PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C
PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

work in progress 3d renderer based on sdl2
work in progress 3d renderer based on sdl2

work in progress 3d software renderer based on SDL. (Only supports wireframe view for now) Building On Linux, install libsdl2 and then run the folowin

work in progress 3d renderer based on sdl2
work in progress 3d renderer based on sdl2

work in progress 3d software renderer based on SDL. (Only supports wireframe view for now) Building On Linux, install libsdl2 and then run the folowin

Ipsys Particle System Yey letS go, very cool particle system generator and fast renderer
Ipsys Particle System Yey letS go, very cool particle system generator and fast renderer

ipsys - Ipsys Particle System Yey letS go About Ipsys is a piece of software that focuces on running and displaying cool randomly generated particule

A modern C++ physically based renderer
A modern C++ physically based renderer

The Dakku Renderer Warning: This project is currently under developing and does not guarantee any consistency. About Dakku is a physically based rende

A Simple Spectral Renderer

Simple Spectral This is a simple multithreaded spectral pathtracer implementing the algorithm (linear combination of bases) described in our EGSR 2019

Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.

pbrt, Version 3 This repository holds the source code to the version of pbrt that is described in the third edition of Physically Based Rendering: Fro

An immediate-mode, renderer agnostic, lightweight debug drawing API for C++
An immediate-mode, renderer agnostic, lightweight debug drawing API for C++

Debug Draw An immediate-mode, renderer agnostic, lightweight debug drawing API for C++. License This software is in the public domain. Where that dedi

Comments
  • License / Citation

    License / Citation

    Hi, great work here.

    Have you imposed a license on the source material or the method? Being able to reference this would be really cool in future projects, but I don't see usage notes anywhere.

    opened by Qix- 3
A real-time DirectX 11 renderer. The renderer is named by my girlfriend's english name.

sophia Sophia is a real-time DirectX 11 renderer. It is not quite a rich graphics engine, only packages some low-level DirectX functions and contains

BB 6 Dec 11, 2021
Efficiently spawn and move high amounts of objects like bullets for bullet hells, particles and more.

Godot Native Bullets Efficiently spawn and move high amounts of objects like bullets for bullet hells, particles and more. This is a GDNative plugin,

Samuele Zolfanelli 105 Jan 6, 2023
A personal project that uses DX12 to implement various render techniques to ultimately create breathtaking real-time visuals

D3D12Playground (Real Time) A personal project that uses DX12 to implement various render techniques to ultimately create breathtaking real-time visua

null 3 Apr 27, 2022
A C++ port of Wave Function Collapse Tiling

Wave Function Collapse in C++ This is a C++ port of https://github.com/mxgmn/WaveFunctionCollapse. All sample images come from https://github.com/mxgm

Emil Ernerfeldt 297 Dec 26, 2022
This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gimbal lock and faster to compute.

Quaternion-Camera This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gim

Phan Sang 8 Nov 10, 2022
A toy renderer written in C using Vulkan to perform real-time ray tracing research.

This is a toy renderer written in C using Vulkan. It is intentionally minimalist. It has been developed and used for the papers "BRDF Importance Sampl

Christoph Peters 290 Dec 19, 2022
2D mesh deformation interactive demo

2D mesh deformation interactive demo

Dmitry V. Sokolov 18 Dec 7, 2022
A minimalist library with basic facilities for developing interactive real-time 3D applications, with a strong emphasis on simplicity and ease of use.

SlimEngine A minimalist and platform-agnostic base project for interactive graphical applications (2D/3D) with a strong emphasis on simplicity, ease o

Arnon Marcus 67 Oct 29, 2022
CS-GY 6533 A – Interactive Computer Graphics - Fall 2021

CS-GY 6533 A – Interactive Computer Graphics - Fall 2021 Course Instructors Cláudio Silva (instructor) 370 Jay Street, room 1153 [email protected] Offic

null 2 Nov 9, 2021
iMSTK - Interactive Medical Simulation Toolkit

iMSTK - Interactive Medical Simulation Toolkit About Overview Participants Licensing Resources Documentation Discourse Issue tracker Prerequisites Get

Kitware, Inc. 14 Nov 22, 2022