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

Issues
  • 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 76 Jul 30, 2022
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 283 Jul 15, 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 6 Jul 30, 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 261 Jul 24, 2022
2D mesh deformation interactive demo

2D mesh deformation interactive demo

Dmitry V. Sokolov 17 Apr 4, 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 Jul 27, 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. 13 Jun 18, 2022
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

Audulus LLC 121 Jul 29, 2022
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

DBinary 1.4k Jul 29, 2022
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

null 4 Sep 12, 2021
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

Jayachandra Kasarla 4 Sep 12, 2021
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

Anima Libera 5 May 26, 2022
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

xehoth 6 Apr 15, 2022
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

Ian Mallett 157 Jul 11, 2022
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

Matt Pharr 4.2k Aug 6, 2022
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

Guilherme Lampert 435 Jul 24, 2022