# Assistant conversation 5J64Q7

- Canonical URL: <https://m.sheaf.less.rest/5J64Q7>
- Resource IRI: <https://m.sheaf.less.rest/5J64Q7>
- Type: assistant conversation
- Mode: research

## Transcript

### 1. Tool result: get_document

DOCUMENT #RBS5K6
Title: A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

Outline:
  - 1 #5NFAXU A Layered Particle-Based Fluid Model for Real-Time Rendering of Water
    - 1.1 #KGMBXL Abstract
    - 1.2 #9QMYPL 1. Introduction
    - 1.3 #JZMDNB 2. Previous Work
    - 1.4 #VR4JRQ 3. Overview
    - 1.5 #34V9L7 4. Adaptive Curvature Flow
    - 1.6 #Z68DF9 5. Real-Time Foam
      - 1.6.1 #T4PBCD 5.1. Foam Formation
      - 1.6.2 #P6BSN6 5.2. Layer Creation
      - 1.6.3 #FL4KNF 5.3. Layer Compositing
    - 1.7 #T8YYAV 6. Results
    - 1.8 #JEPXQL 7. Conclusions and Future Work
    - 1.9 #YZ6NYP References

### 2. Assistant tool calls

#### Tool call: `list_documents`

```json
{}
```

### 3. Tool result: list_documents

Journal articles (25)
- #RBS5K6 A Layered Particle-Based Fluid Model for Real-Time Rendering of Water - 2010 | Daniel Scherzer, Florian Bagar, Michael Wimmer | Computer Graphics Forum | 7 pp. | doi:10.1111/j.1467-8659.2010.01734.x
- #G3TBNG A Sequential Two-Step Algorithm for Fast Generation of Vehicle Racing Trajectories - 2016 | J. Christian Gerdes, John Subosits, Nitin R. Kapania | Journal of Dynamic Systems, Measurement, and Control | 12 pp. | doi:10.1115/1.4033311
- #C4AY2M A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics - 2011 | B. Crespin, D. Ghazanfarpour, E. Darles, J.-C. Gonzato | Computer Graphics Forum | 17 pp. | doi:10.1111/j.1467-8659.2010.01828.x
- #B6P8L4 Active walker model for the formation of human and animal trail systems - 1997 | Dirk Helbing, Frank Schweitzer, Joachim Keltsch, Péter Molnár | Physical Review E | 34 pp. | doi:10.1103/physreve.56.2527
- #WZMZGY Advected river textures - 2009 | Dirk Arnold, Stephen Brooks, Tim Burrell | Computer Animation and Virtual Worlds | 11 pp. | doi:10.1002/cav.288
- #MH5J8D Beautimeter: Harnessing GPT for Assessing Architectural and Urban Beauty Based on the 15 Properties of Living Structure - 2025 | Bin Jiang | AI | 12 pp. | doi:10.3390/ai6040074
- #NV2YRW FastFlow: GPU Acceleration of Flow and Depression Routing for Landscape Simulation - 2024 | Aryamaan Jain, Bernhard Kerbl, Brandon Finley, Guillaume Cordonnier, James Gain | Computer Graphics Forum | 13 pp. | doi:10.1111/cgf.15243
- #SKRF4C Geography as a Science of the Earth’s Surface Founded on the Third View of Space - 2022 | Bin Jiang | Annals of GIS | 14 pp. | doi:10.1080/19475683.2021.1966502
- #V4TQYB Interactive procedural street modeling - 2008 | Eugene Zhang, Gregory Esch, Guoning Chen, Pascal Müller, Peter Wonka | ACM Transactions on Graphics | 10 pp. | doi:10.1145/1360612.1360702
- #92XRH7 Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field - 2011 |  Qizhi Yu, E. Bruneton, F. Neyret, N. Holzschuch | IEEE Transactions on Visualization and Computer Graphics | 13 pp. | doi:10.1109/tvcg.2010.263
- #96ZMGK Large Scale Terrain Generation from Tectonic Uplift and Fluvial Erosion - 2016 | Adrien Peytavie, Bedrich Benes, Guillaume Cordonnier, Jean Braun, Marie-Paule Cani, Éric Galin, Éric Guérin | Computer Graphics Forum | 11 pp. | doi:10.1111/cgf.12820
- #MJKTBB Living Images: A Recursive Approach to Computing the Structural Beauty of Images or the Livingness of Space - 2023 | Bin Jiang, Chris de Rijke | Annals of the American Association of Geographers | 19 pp. | doi:10.1080/24694452.2023.2178376
- #UYLTYJ Modelling the Evolution of Human Trail Systems - 1997 | Dirk Helbing, Joachim Keltsch, Péter Molnár | Nature | 11 pp. | doi:10.1038/40353
- #GY93FG Mountain Trail Formation and the Active Walker Model - 2009 | J. P. Hague, S. J. Gilks | International Journal of Modern Physics C | 22 pp. | doi:10.1142/S0129183109014059
- #DWXKYQ Physically-based analytical erosion for fast terrain generation - 2024 | Boris Gailleton, Guillaume Cordonnier, Petros Tzathas, Philippe Steer | Computer Graphics Forum | 14 pp. | doi:10.1111/cgf.15033
- #MTDKDE Priority-Flood: An Optimal Depression-Filling and Watershed-Labeling Algorithm for Digital Elevation Models - 2014 | Clarence Lehman, David Mulla, Richard Barnes | Computers & Geosciences | 17 pp. | doi:10.1016/j.cageo.2013.04.024
- #CQBDX4 Procedural Content Generation via Machine Learning (PCGML) - 2018 | Aaron Isaksen, Adam Summerville, Amy K. Hoover, Andy Nealen, Christoffer Holmgård, Julian Togelius, Matthew Guzdial, Sam Snodgrass | IEEE Transactions on Games | 15 pp. | doi:10.1109/TG.2018.2846639
- #XDEFZS Procedural Generation of Roads - 2010 | A. Peytavie, E. Galin, E. Guérin, N. Maréchal | Computer Graphics Forum | 10 pp. | doi:10.1111/j.1467-8659.2009.01612.x
- #AK7NGE Procedural Riverscapes - 2019 | A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial | Computer Graphics Forum | 12 pp. | doi:10.1111/cgf.13814
- #5MGCZ5 Real-time River Representation by Dynamic Control of Data on Waves - 2008 | Makoto Kosugi, Nobuhiko Mukai, Yasuhiro Kato | 4 pp. | doi:10.3169/itej.62.2063
- #XDESU9 Scalable real‐time animation of rivers - 2009 | Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu | Computer Graphics Forum | 11 pp. | doi:10.1111/j.1467-8659.2009.01363.x
- #3XSLTA Structural Beauty: A Structure-Based Computational Approach to Quantifying the Beauty of an Image - 2021 | Bin Jiang, Chris de Rijke | Journal of Imaging | 15 pp. | doi:10.3390/jimaging7050078
- #DMTA8Y Terrain Generation Using Procedural Models Based on Hydrology - 2013 | Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin | ACM Transactions on Graphics | 10 pp. | doi:10.1145/2461912.2461996
- #PBM2TC Water surface wavelets - 2018 | Chris Wojtan, Matthias Müller-Fischer, Miles Macklin, Nuttapong Chentanez, Stefan Jeschke, Tomáš Skřivan | ACM Transactions on Graphics | 13 pp. | doi:10.1145/3197517.3201336
- #BYG3BQ Wholeness as a Hierarchical Graph to Capture the Nature of Space - 2015 | Bin Jiang | International Journal of Geographical Information Science | 14 pp. | doi:10.1080/13658816.2015.1038542

Book chapters (2)
- #LXV9AT Principles of Trail Layout and Design - 2019 | California State Parks | California State Parks Trails Handbook | 64 pp.
- #ZU8GZV Structure-Preserving Transformations - 2002 | Christopher Alexander | The Nature of Order, Book Two: The Process of Creating Life | 4 pp. | doi:10.2307/j.ctv27ftw6c.5

Reports (2)
- #XW22YY Generative Codes: The Path to Building Welcoming, Beautiful, Sustainable Neighborhoods - 2005 | Brian Hanson, Christopher Alexander, Maggie Moore Alexander, Michael Mehaffy, Randall Schmidt | Center for Environmental Structure | 21 pp.
- #A2QB8L Water Flow in Portal 2 - 2010 | Alex Vlachos | ACM SIGGRAPH 2010 Course: Advances in Real-Time Rendering in 3D Graphics and Games | 54 pp.

Research papers (10)
- #4TH488 Explainable AI for Designers: A Human-Centered Perspective on Mixed-Initiative Co-Creation - 2018 | Antonios Liapis, G. Michael Youngblood, Jichen Zhu, Rafael Bidarra, Sebastian Risi | 2018 IEEE Conference on Computational Intelligence and Games (CIG) | 8 pp. | doi:10.1109/CIG.2018.8490433
- #9NQ94D Extracting Physics from Blended Platformer Game Levels - 2020 | Adam Summerville, Anurag Sarkar, Joseph C. Osborn, Sam Snodgrass | Joint Proceedings of the AIIDE 2020 Workshops (CEUR Workshop Proceedings, Vol. 2862) | 7 pp.
- #PXG56P Harmony-Seeking Computations: A Science of Non-Classical Dynamics Based on the Progressive Evolution of the Larger Whole - 2009 | Christopher Alexander | Unpublished manuscript | 66 pp.
- #7GR3AQ Procedural Content Generation through Quality Diversity - 2019 | Ahmed Khalifa, Antonios Liapis, Daniele Gravina, Georgios N. Yannakakis, Julian Togelius | 2019 IEEE Conference on Games (CoG) | 8 pp. | doi:10.1109/CIG.2019.8848053
- #8SERGP Real-time Breaking Waves for Shallow Water Simulations - 2007 | Markus Gross, Matthias Müller-Fischer, Nils Thürey, Simon Schirm | 15th Pacific Conference on Computer Graphics and Applications (Pacific Graphics 2007) | 8 pp. | doi:10.1109/PG.2007.33
- #CWC7H9 Real-time Rendering of Enhanced Shallow Water Fluid Simulations - 2013 | Antonio Susín, Jesús Ojeda | Computers & Graphics | 9 pp.
- #MVUJ8Z Real-time Rendering of River Networks - 2010 | Quintijn Hendrickx, Rafael Bidarra, Ruben M. Smelik | Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games | 1 pp.
- #WZ8DHP Runtime Evaluation of Procedural Content Generation in an Endless Runner Game Using Autonomous Agents - 2026 | Rishabh Kar | arXiv | 25 pp. | doi:10.48550/arXiv.2605.01783
- #NRBMD5 Towards Friendly Mixed Initiative Procedural Content Generation: Three Pillars of Industry - 2020 | Frederic Fol Leymarie, Gorm Lai, William Latham | Proceedings of the International Conference on the Foundations of Digital Games (FDG '20) | 4 pp. | doi:10.1145/3402942.3402946
- #869NHK Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning - 2011 | Ian Parberry, Jennifer R. Alford, Mary Yingst | Proceedings of the 6th International North American Conference on Intelligent Games and Simulation (GAMEON-NA) | 7 pp.

### 4. Assistant

I found a focused cluster spanning ocean surveys, river animation, shallow-water effects, particle fluids, foam, and production rendering. I’m skimming their structure and key sections now, then I’ll group them by approach rather than just listing titles.

#### Tool call: `get_document`

```json
{
  "id": "C4AY2M"
}
```

#### Tool call: `get_document`

```json
{
  "id": "RBS5K6"
}
```

#### Tool call: `get_document`

```json
{
  "id": "WZMZGY"
}
```

#### Tool call: `get_document`

```json
{
  "id": "92XRH7"
}
```

#### Tool call: `get_document`

```json
{
  "id": "XDESU9"
}
```

#### Tool call: `get_document`

```json
{
  "id": "PBM2TC"
}
```

#### Tool call: `get_document`

```json
{
  "id": "A2QB8L"
}
```

#### Tool call: `get_document`

```json
{
  "id": "8SERGP"
}
```

#### Tool call: `get_document`

```json
{
  "id": "CWC7H9"
}
```

#### Tool call: `get_document`

```json
{
  "id": "MVUJ8Z"
}
```

#### Tool call: `get_document`

```json
{
  "id": "869NHK"
}
```

#### Tool call: `get_document`

```json
{
  "id": "5MGCZ5"
}
```

### 5. Tool result: get_document

DOCUMENT #C4AY2M
Title: A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

Outline:
  - 1 #QZPELE A survey of ocean simulation and rendering techniques in computer graphics
    - 1.1 #47WJV5 Abstract
    - 1.2 #67ZZEA 1. Introduction
    - 1.3 #JPY4VD 2. Ocean dynamics simulation in deep water
      - 1.3.1 #B9SCHY 2.1. Spatial domain approaches
        - 1.3.1.1 #3VTQEF 2.1.1. Early works
        - 1.3.1.2 #W9ZUCV 2.1.2. GPU implementations
        - 1.3.1.3 #32XXKC 2.1.3. Adaptive schemes
      - 1.3.2 #96ENPE 2.2. Fourier domain approaches
        - 1.3.2.1 #Z39SP2 2.2.1. General methods
        - 1.3.2.2 #2XBNYQ 2.2.2. Level-Of-Detail and GPU implementations
      - 1.3.3 #5KSC3E 2.3. Hybrid approaches
      - 1.3.4 #VEG3CE 2.4. Discussion
    - 1.4 #XKG89F 3. Ocean dynamics simulation in shallow water
      - 1.4.1 #7C4MCW 3.1. Eulerian approaches
      - 1.4.2 #WB9J3L 3.2. Lagrangian approaches
      - 1.4.3 #ZEVP5C 3.3. Hybrid approaches
      - 1.4.4 #7ZY9G2 3.4. Discussion
    - 1.5 #8TWR84 4. Realistic ocean surface rendering and lighting
      - 1.5.1 #UKRC7P 4.1. Foam and spray
        - 1.5.1.1 #KCB376 4.1.1. Empirical models
        - 1.5.1.2 #7DVESV 4.1.2. Particle systems
      - 1.5.2 #TDPWBG 4.2. Light-water interactions
        - 1.5.2.1 #9KEXGS 4.2.1. First order approximation
        - 1.5.2.2 #5V9HHE 4.2.2. Multiple order approximation
      - 1.5.3 #D7BME4 4.3. Discussion
    - 1.6 #4KX5BA 5. Conclusion
    - 1.7 #23RGF3 Acknowledgements
    - 1.8 #RX2UU9 References

### 6. Tool result: get_document

DOCUMENT #RBS5K6
Title: A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

Outline:
  - 1 #5NFAXU A Layered Particle-Based Fluid Model for Real-Time Rendering of Water
    - 1.1 #KGMBXL Abstract
    - 1.2 #9QMYPL 1. Introduction
    - 1.3 #JZMDNB 2. Previous Work
    - 1.4 #VR4JRQ 3. Overview
    - 1.5 #34V9L7 4. Adaptive Curvature Flow
    - 1.6 #Z68DF9 5. Real-Time Foam
      - 1.6.1 #T4PBCD 5.1. Foam Formation
      - 1.6.2 #P6BSN6 5.2. Layer Creation
      - 1.6.3 #FL4KNF 5.3. Layer Compositing
    - 1.7 #T8YYAV 6. Results
    - 1.8 #JEPXQL 7. Conclusions and Future Work
    - 1.9 #YZ6NYP References

### 7. Tool result: get_document

DOCUMENT #WZMZGY
Title: Advected river textures

Outline:
  - 1 #JCB5RE Advected river textures
    - 1.1 #DQ7LJZ Introduction
    - 1.2 #G2SPEY Previous Work
      - 1.2.1 #7K7XWN Real-Time River Simulation
      - 1.2.2 #4FM3ZS 2D Navier–Stokes Simulation
      - 1.2.3 #KV3Q48 Hydrostatic Pressure Columns
      - 1.2.4 #PVQNK6 Bootstrapping the Hydrostatic Pressure Columns
      - 1.2.5 #CSD47K Impulse Driven NS
      - 1.2.6 #B2JVNM River Surface Advection
    - 1.3 #HMVN46 Results
    - 1.4 #AZAUNZ Conclusion
    - 1.5 #XSMAUV Future Work
    - 1.6 #4VLDYW ACKNOWLEDGEMENTS
    - 1.7 #UWVDGA References
    - 1.8 #L93ZXH Authors' biographies:

### 8. Tool result: get_document

DOCUMENT #92XRH7
Title: Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

Outline:
  - 1 #KLTEQP Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field
    - 1.1 #CLP7LH ► To cite this version:
  - 2 #5948CH Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field
    - 2.1 #W73RWJ 1 INTRODUCTION
    - 2.2 #BWE9DD 2 PREVIOUS WORK
    - 2.3 #BWJ55J 3 OUR ALGORITHM
      - 2.3.1 #SJ444N 3.1 Overview
      - 2.3.2 #WWK8AX 3.2 Formal definition of our input data
      - 2.3.3 #EMCT8G 3.3 Particle Sampling and Distortion
        - 2.3.3.1 #WBB3XW 3.3.1 Particle Distribution
        - 2.3.3.2 #GY3LGQ 3.3.2 Grid Advection and Particle Deletion
        - 2.3.3.3 #867R3P 3.3.3 Estimating the Grid Distortion
        - 2.3.3.4 #G6FS45 3.3.4 Dealing with Boundaries
      - 2.3.4 #4UR6QN 3.4 Blending and Continuity
        - 2.3.4.1 #NQC7ZJ 3.4.1 Vertex Weights
      - 2.3.5 #W6ZWF7 3.5 Reconstruction and Rendering
        - 2.3.5.1 #N8GY69 3.5.1 Direct reconstruction
        - 2.3.5.2 #ZRKC9H 3.5.2 Indirect reconstruction
        - 2.3.5.3 #9GCRR9 3.5.3 Discussion
    - 2.4 #MUN6QE 4 RESULTS AND COMPARISON
      - 2.4.1 #PTG5NW 4.1 Results
      - 2.4.2 #6B4N32 4.2 Performance and Timings
      - 2.4.3 #K4JT29 4.3 Evaluation and comparison
        - 2.4.3.1 #EFP86R 4.3.1 Evaluating the Quality of the Animated Texture
        - 2.4.3.2 #C949RA 4.3.2 Comparison with Naïve Implementation
        - 2.4.3.3 #8TM3YZ 4.3.3 Comparison with Eulerian Texture Advection
        - 2.4.3.4 #BUWH3G 4.3.4 Comparison with Sprite-Based Texture Advection
        - 2.4.3.5 #2D9CVV 4.3.5 Comparison with Flow-Guided Texture Synthesis
      - 2.4.4 #3HGSTC 4.4 Discussion
    - 2.5 #EAFVW8 5 CONCLUSION AND FUTURE WORK
    - 2.6 #DXCAUW Acknowledgements
    - 2.7 #5FXBCE APPENDIX
    - 2.8 #LBXTFN DETAILED PROOF OF EQ. 4
    - 2.9 #Q7PTWQ REFERENCES

### 9. Tool result: get_document

DOCUMENT #XDESU9
Title: Scalable real‐time animation of rivers

Outline:
  - 1 #Y6CNDB Scalable Real-Time Animation of Rivers
    - 1.1 #DHLFEL ► To cite this version:
  - 2 #B9LYTR Scalable real-time animation of rivers
    - 2.1 #RQUAEM Abstract
    - 2.2 #UJRUGW 1. Introduction
    - 2.3 #JW4T3Z 2. Previous work
      - 2.3.1 #CVHDLT 2.1. Fluid velocity
      - 2.3.2 #HEUBG3 2.2. Fluid surface
    - 2.4 #XF2N2Y 3. Overview
      - 2.4.1 #LFKVYW Algorithm 1 Scalable real-time animation of rivers
    - 2.5 #S3P9T2 4. Computing flow velocities
      - 2.5.1 #89NKTG 4.1. Finding the volumetric flow rate from the hydro geometry
      - 2.5.2 #R6ERAY 4.2. Interpolation of stream function
      - 2.5.3 #XB2KH8 4.3. Handling obstacles
      - 2.5.4 #TPMQZV 4.4. Fast distance calculation
    - 2.6 #NRD5JU 5. Adaptive texture advection
      - 2.6.1 #7RRTRY 5.1. Dynamic particle distribution
        - 2.6.1.1 #C52JGF Algorithm 2 Dynamic particle distribution
      - 2.6.2 #KWALBE 5.2. Sprite-based texturing
        - 2.6.2.1 #AL6Q7V Algorithm 3 Fragment shader for fluid meshes
    - 2.7 #LQXUW2 6. Implementation and results
    - 2.8 #TJAYJS 7. Discussion and limitations
    - 2.9 #RD97PY 8. Conclusion and future work
    - 2.10 #R6KZ4N References

### 10. Tool result: get_document

DOCUMENT #PBM2TC
Title: Water surface wavelets

Outline:
  - 1 #RNVWWR Water Surface Wavelets
    - 1.1 #JPDLVU ACM Reference Format:
    - 1.2 #ZTWDW3 1 INTRODUCTION
    - 1.3 #MGX8HM 2 RELATED WORK
      - 1.3.1 #2W6Q6T 2.1 Spectrum-based approaches
      - 1.3.2 #SJKC5Z 2.2 Numerical solutions to Partial Differential Equations
      - 1.3.3 #C6S3T5 2.3 Hybrid approaches
      - 1.3.4 #B4G3KW 2.4 Art-directing waves
    - 1.4 #5EX6YK 3 THEORY
      - 1.4.1 #9RASZL 3.1 Motivation
      - 1.4.2 #ARD5T6 3.2 Derivation
      - 1.4.3 #UL9HZ6 3.3 Discussion
    - 1.5 #2KAQMF 4 DISCRETIZATION
      - 1.5.1 #6AJDFD 4.1 Discretizing \mathcal{A}
      - 1.5.2 #JGKFAU 4.2 Discretizing Advection
      - 1.5.3 #KQNQXW 4.3 Height field evaluation
    - 1.6 #MU7P6S 5 ALGORITHM SUMMARY
      - 1.6.1 #AJK8ET Algorithm 1 Pseudocode for the algorithms used in our paper
    - 1.7 #MEQNZV 6 EXTENSIONS
      - 1.7.1 #B6SYLX 6.1 Dissipation
      - 1.7.2 #5W242X 6.2 Pre-computing wave motions
      - 1.7.3 #UTTFQ9 6.3 Solid-Fluid Coupling
    - 1.8 #8LZWQ3 7 ARTISTIC CONTROL
      - 1.8.1 #CXPF2K 7.1 Selecting the basis function \psi(k)
      - 1.8.2 #AV6VHK 7.2 Manually overriding \mathcal{A}
    - 1.9 #AL43YK 8 RESULTS
    - 1.10 #W3R46F 9 DISCUSSION
    - 1.11 #ERWM2J ACKNOWLEDGMENTS
    - 1.12 #95PXLR REFERENCES
    - 1.13 #QXS3UP A AMPLITUDE DYNAMICS
    - 1.14 #FFTTEG B \mathcal{A} IS LOWER FREQUENCY THAN \eta
    - 1.15 #ZHSTA4 C CONTINUUM LIMIT OF WATER WAVE PACKETS

### 11. Tool result: get_document

DOCUMENT #A2QB8L
Title: Water Flow in Portal 2

Outline:
  - 1 #S2CBRT Water Flow in PORTAL 2
    - 1.1 #56V9XD Outline
    - 1.2 #5HJ8GY Goals
    - 1.3 #X7C5PM Gameplay
    - 1.4 #BUH4MD Technical Constraints
    - 1.5 #NNERGL Algorithm Overview
    - 1.6 #47S8TY Flow Texture Mapped onto Surface
      - 1.6.1 #FDJN2K Normal Map Mapped onto Surface
      - 1.6.2 #CDJ53N Artists Author Flow Maps
      - 1.6.3 #XRLSJY Houdini – Importing Level Geometry
      - 1.6.4 #GHBDYU Houdini – Procedural Masks
      - 1.6.5 #3CBG64 Houdini – Applying Masks
      - 1.6.6 #F5HH3F Houdini – Water Normal Maps
      - 1.6.7 #S3MB37 Left 4 Dead 2
    - 1.7 #CVUS6R Related Work
    - 1.8 #Q4QCPT Flow Visualization
      - 1.8.1 #Y2F5FW Flow Visualization Textures
      - 1.8.2 #Y3TJVN Flow Visualization Experiment
        - 1.8.2.1 #UHYW88 Max &amp; Becker's Observation
        - 1.8.2.2 #EN347R Smoothly Interpolating Layers
        - 1.8.2.3 #Q4QFM6 Smoothly Repeating Flow
    - 1.9 #J52A5Y A Great Start
    - 1.10 #ZTF9YF Portal 2 Test Map
      - 1.10.1 #3KG3EN Portal 2 Test Map (Programmer Art)
    - 1.11 #FSZCV9 Flow Vectors on Water Surface
      - 1.11.1 #MSJZHP Single Layer Normal Distortion
      - 1.11.2 #4R3LNF Double Layer Normal Distortion
      - 1.11.3 #TM3D3G Two Major Problems
      - 1.11.4 #5D5MEZ Repetition Visualization Single Layer
        - 1.11.4.1 #GNJ65S Double Layer
        - 1.11.4.2 #EV6QMX Double Layer With Offset
        - 1.11.4.3 #3U8Q7Z Repetition Solved by Offset
      - 1.11.5 #K34TNN Pulsing Solved by Noise
      - 1.11.6 #BZ44HW Pulsing Solved by Noise
    - 1.12 #XAMC76 Water Speed Affects Normals
    - 1.13 #SGLQV7 Performance
    - 1.14 #BJ29ZU Water Flow in Portal 2
    - 1.15 #HQNR33 Debris Flow Example
      - 1.15.1 #WFV4HX Debris Flow Example
      - 1.15.2 #7BZP4H Debris Normal (Same as before)
        - 1.15.2.1 #V5M6GL Flowing Debris Using Same Algorithm
        - 1.15.2.2 #QG7BY5 Flowing Normals
        - 1.15.2.3 #GJTPE2 Flowing Debris
        - 1.15.2.4 #M6MJHN Flowing Debris Using Offset
      - 1.15.3 #4G2LNJ Debris Flow
    - 1.16 #HA87Z6 Future Work
    - 1.17 #5ZZUA3 Summary

### 12. Tool result: get_document

DOCUMENT #8SERGP
Title: Real-time Breaking Waves for Shallow Water Simulations

Outline:
  - 1 #FA7BE4 Real-time Breaking Waves for Shallow Water Simulations
    - 1.1 #XUY95Y Abstract
    - 1.2 #J39ZBT 1 Introduction
    - 1.3 #LSRGTK 2 Related Work
    - 1.4 #AWDWVP 3 Shallow Water Simulations
    - 1.5 #PHN7AY 4 Wave Simulation
    - 1.6 #JL4FVP 5 Wave Patch Generation:
    - 1.7 #8ES8PA 6 Rendering the Waves
    - 1.8 #B8YMKE 7 Two-Way Rigid Body Coupling
    - 1.9 #CC4RWZ 8 Results
    - 1.10 #QQ7TWA 9 Conclusions
    - 1.11 #SPNKU9 10 Acknowledgements
    - 1.12 #CKPSGF References

### 13. Tool result: get_document

DOCUMENT #CWC7H9
Title: Real-time Rendering of Enhanced Shallow Water Fluid Simulations

Outline:
  - 1 #3XLN3C Real-time Rendering of Enhanced Shallow Water Fluid Simulations
    - 1.1 #SDDXFP Abstract
    - 1.2 #D9SXF3 1. Introduction
      - 1.2.1 #RNG4NC 1.1. Related Work
        - 1.2.1.1 #ESVL3G 119 2. Fluid simulation
        - 1.2.1.2 #HDCYLG 149 3. Additional surface detail
        - 1.2.1.3 #CQWBFA 157 3.1. Lower scale detail
        - 1.2.1.4 #XEPFKX 179 3.2. Surface Foam
    - 1.3 #5GWRQA 4. Photon-based Caustics
      - 1.3.1 #F8ATT5 272 5. Screen-space Refraction and reflection
    - 1.4 #GKHL8Q 6. Results and Discussion
    - 1.5 #XHMJUD 7. Conclusions
    - 1.6 #WA3PCR Acknowledgements

### 14. Tool result: get_document

DOCUMENT #MVUJ8Z
Title: Real-time Rendering of River Networks

Outline:
  - 1 #BTQCB6 Real-time Rendering of River Networks
  - 2 #8N3BQZ References

### 15. Tool result: get_document

DOCUMENT #869NHK
Title: Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning

Outline:
  - 1 #WADEM9 Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning
  - 2 #5R6DEX Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning
    - 2.1 #2BJMND ABSTRACT
    - 2.2 #L9YLTY Introduction
    - 2.3 #UQWEYD Overview of Our Approach
      - 2.3.1 #Z6PB8R The Saturation Function
      - 2.3.2 #4HFS63 The Halftone Mask
      - 2.3.3 #J3EGSN Applying the Mask
    - 2.4 #LP9TTY Results
    - 2.5 #7FYCN5 Conclusion and Further Work
    - 2.6 #SRXZMM References
    - 2.7 #DJAVLH BIBLIOGRAPHY

### 16. Tool result: get_document

DOCUMENT #5MGCZ5
Title: Real-time River Representation by Dynamic Control of Data on Waves

Outline:
  - 1 #AGKCS5 水面波モデルの動的制御による河川のリアルタイム表現
  - 2 #RNRNU8 Real-time River Representation by Dynamic Control of Data on Waves
    - 2.1 #5WKN5L 1. ま え が き
    - 2.2 #L93Z8G 2. 河 川 の 分 類
    - 2.3 #U848H3 3. 河川の自動領域分割
    - 2.4 #7TBW6W 4. 水面波の生成
      - 2.4.1 #7L3GHL 4.1 水面波の物理モデル
      - 2.4.2 #2GQ78Y 4.2 川岸での反射表現
      - 2.4.3 #PN4DGU 4.3 風による波の変化
    - 2.5 #M8MFLM 5. シミュレーション結果
    - 2.6 #VTDT2R 6. む す び
    - 2.7 #8J7SVY 〔文 献〕

### 17. Assistant tool calls

#### Tool call: `read`

```json
{
  "blocks": [
    "47WJV5",
    "VEG3CE",
    "7ZY9G2",
    "D7BME4",
    "4KX5BA"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "KGMBXL",
    "VR4JRQ",
    "T8YYAV",
    "JEPXQL"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "DQ7LJZ",
    "B2JVNM",
    "HMVN46",
    "AZAUNZ",
    "XSMAUV"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "W73RWJ",
    "SJ444N",
    "MUN6QE",
    "3HGSTC",
    "EAFVW8"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "RQUAEM",
    "XF2N2Y",
    "LQXUW2",
    "TJAYJS",
    "RD97PY"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "ZTWDW3",
    "MU7P6S",
    "8LZWQ3",
    "AL43YK",
    "W3R46F"
  ],
  "expand": true
}
```

### 18. Tool result: read

DOCUMENT #C4AY2M
A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

SECTION #47WJV5 Abstract

EXCERPT #4S5XNT p. 0
  This paper presents a survey of ocean simulation and rendering methods in computer graphics. To model and animate the ocean's surface, these methods mainly rely on two main approaches: on the one hand, those which approximate ocean dynamics with parametric, spectral or hybrid models and use empirical laws from oceanographic research. We will see that this type of methods essentially allows the simulation of ocean scenes in the deep water domain, without breaking waves. On the other hand, physically-based methods use Navier-Stokes Equations (NSE) to represent breaking waves and more generally ocean surface near the shore. We also describe ocean rendering methods in computer graphics, with a special interest in the simulation of phenomena such as foam and spray, and light's interaction with the ocean surface.

EXCERPT #T5QRXV p. 0
  Categories and Subject Descriptors (according to ACM CCS): I.3.7 [Computer Graphics]: Three-Dimensional Graphics and Realism—Animation I.3.8 [Computer Graphics]: Applications—

DOCUMENT #C4AY2M
A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

SECTION #VEG3CE 2.4. Discussion

EXCERPT #PVRUXS p. 5
  The main advantage of spatial domain approaches is their ability to produce a simple and fast simulation of the ocean surface, but they require a large number of periodical functions for visually plausible results. Several optimizations have been proposed such as GPU evaluation or adaptive schemes to reduce this number according to the distance to the viewer. However, using sine or cosine functions induces a too rounded shape of waves and the surface appears too smooth.

EXCERPT #P4DDU7 p. 5
  Spectral domain methods address this problem by using oceanographic data directly and allow to disturb the surface according to physical parameters such as wind speed, which brings more realistic results. Unfortunately these methods lack from global control of ocean waves.

EXCERPT #GYQ8RM p. 5
  In this context, hybrid approaches represent a good compromise between the visually plausible results obtained by spectral approaches and the global control offered by spatial domain methods, and allow to obtain fast and effective simulations of the ocean surface's dynamic behaviour. A complete summary of the methods presented in this section is shown on Table 1.

EXCERPT #5BKCH7 p. 5
  However, all these methods only consider deep water phenomena, in which the ocean surface is being subjected to small perturbations. Indeed, in shallow water parametric or spectral approaches cannot faithfully reproduce ocean dynamics near coasts, e.g. breaking waves. To address this complexity, we have to focus on approaches that consider interactions and collisions between the ocean and the shore, which are presented in the next section.

DOCUMENT #C4AY2M
A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

SECTION #7ZY9G2 3.4. Discussion

EXCERPT #YV9HXY p. 9
  The main advantage of Eulerian approaches is their ability to simulate a large scope of different phenomena, explaining why they received much attention from the computer graphics community. Nevertheless, for fine-scale details such as spray or bubbles, NSE need to be finely discretized which in turn demands high computations and memory consumption. Another drawback is the use of fixed grids, forbidding the fluid to flow outside the grid.

EXCERPT #ZYU7YU p. 9
  On the other hand, Lagrangian approaches can be used to simulate a wide range of phenomena. Their main advantage is their ability to represent fine-scale details and to flow anywhere in a virtual environment, but a large number of particles is usually needed to obtain realistic results. This problem can be alleviated using adaptive split-and-merge schemes to reduce computation costs. However it is worth noticing that most of the computation time for one particle is spent in testing neighboring particles or other objects for collision. Therefore a broad-phase collision detection is usually implemented by storing particles in a virtual grid, meaning that Eulerian or Lagrangian approaches share common problems such as defining an appropriate size for the grid's cells. This is also illustrated by hybrid methods which produce realistic results by adding details to Eulerian approaches using particle systems. The literature presented in section 3 is summarized on Table 2.

DOCUMENT #C4AY2M
A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

SECTION #D7BME4 4.3. Discussion

EXCERPT #9UVK2R p. 12
  Numerous methods are available in the literature to take different optical phenomena into account and increase the realism of oceanic scenes. In the case of foam and sprays, empirical methods can effectively simulate these phenomena according to the state of disturbance of the surface. Combined with particle systems, these approaches allow to obtain realistic details, however they require a large number of particles which induces an important memory cost and computation time at rendering stage. Moreover, empirical methods are usually efficient for deep water scenes only; to our knowledge there is no work dealing with realistic foam created by breaking waves.

EXCERPT #VE4NUF p. 12
  For light-water interactions, different methods were proposed to represent the complexity of these non-linear phenomena, yielding more and more realistic results. Moreover, recent approaches even consider physical and biology effects to simulate a wide variety of virtual environments. All these works are summarized on Table 3.

DOCUMENT #C4AY2M
A Survey of Ocean Simulation and Rendering Techniques in Computer Graphics

SECTION #4KX5BA 5. Conclusion

EXCERPT #WHPWE4 p. 12
  In this survey we have presented available methods in computer graphics for modeling and rendering oceanic scenes. The great amount of different works is inherent to the extreme diversity of the phenomena involved.

EXCERPT #CZNWCP p. 12
  The first two sections of our survey focused on computer graphics models able to simulate the dynamical behavior of the ocean. We have seen that those methods are divided into two categories: on the one hand, methods usually dedicated to deep-water simulation, on the other hand fluid-based approaches trying to represent breaking waves near the shore. In the last section, we have seen different methods able to represent several phenomena involved in ocean rendering, namely foam, sprays and light-water interactions, that make for visual realism.

EXCERPT #TQKH86 p. 12
  The next decade could see new methods emerging in an attempt to bridge the gap between deep-sea simulations and breaking waves representations; it would be necessary to put together different types of simulations on different scales. Scalable methods are also required for modeling and rendering stages in order to obtain real-time rates, which could include dynamic sampling of the simulation domain (as proposed by Yu et al [YNBH09] for rivers) and adaptive rendering models taking the visual impact of the considered phenomena into account.

### 19. Tool result: read

DOCUMENT #RBS5K6
A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

SECTION #KGMBXL Abstract

EXCERPT #G3TYUA p. 0
  We present a physically based real-time water simulation and rendering method that brings volumetric foam to the real-time domain, significantly increasing the realism of dynamic fluids. We do this by combining a particle-based fluid model that is capable of accounting for the formation of foam with a layered rendering approach that is able to account for the volumetric properties of water and foam. Foam formation is simulated through Weber number thresholding. For rendering, we approximate the resulting water and foam volumes by storing their respective boundary surfaces in depth maps. This allows us to calculate the attenuation of light rays that pass through these volumes very efficiently. We also introduce an adaptive curvature flow filter that produces consistent fluid surfaces from particles independent of the viewing distance.

EXCERPT #RMMRAK p. 0
  Categories and Subject Descriptors (according to ACM CCS): I.3.7 [Computer Graphics]: Three-Dimensional Graphics and Realism—Color, shading, shadowing, and texture

DOCUMENT #RBS5K6
A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

SECTION #VR4JRQ 3. Overview

EXCERPT #QM2MGL p. 1
  Our method builds on the screen space fluid rendering approach with curvature flow [vdLGS09]. Similar to this method, we start from an SPH simulation calculated using a hardware physics engine (PhysX), which provides a non-sorted 3D point cloud as input. Apart from the particle's position x we will also use the density \rho and velocity v for foam thresholding and the lifetime for varying the Perlin noise on a foam particle.

EXCERPT #YPQXAL p. 1

EXCERPT #KP6GY5 p. 1

EXCERPT #UZMXNG p. 2

EXCERPT #2ZWQRB p. 2
  Figure 3: Overview of the buffers used in the method. The diagram shows a workflow for rendering water. It starts with 'foam depth' and 'background scene'. 'foam depth' leads to 'Layer Creation (see Section 5.2)', which produces four buffers: T_wf, T_wb, T_f, and T_ff. 'background scene' leads to 'Layer Compositing (see Section 5.3)'. 'Layer Compositing' also receives input from 'water depth' and 'filtered water depth' (including color-coded curvature). The final output is 'layer composition'. A vertical arrow labeled 'Adaptive Curvature Flow Filtering (see Section 4)' connects 'water depth' to 'filtered water depth'.

EXCERPT #ULZTKD p. 2
  Figure 3: Overview of the buffers used in our method. T_{wf} : thickness of the water in front of the foam; T_{wb} : thickness of the water behind the foam; T_f : foam thickness; T_{ff} : thickness of the front foam layer.

EXCERPT #VLHP44 p. 2
  The original algorithm calculates the water depth by splatting the particles, then smooths the depth buffer using curvature flow filtering, then calculates water thickness by accumulating particle depths in a separate thickness buffer, and finally composites the results. Our algorithm extends this by adapting the curvature flow filter for the viewer distance, and by adding a foam layer that can lie between two water layers. Our algorithm then performs the following steps once per frame after the scene has been rendered into a texture (see Figure 3):

EXCERPT #3NMUV9 p. 2
  1. Calculate water and foam depth (Section 5.2) 2. Smooth the water depth using the new adaptive curvature flow algorithm (Section 4) 3. Calculate water and foam thickness (Section 5.2) 4. Composite water and foam layers using intermediate results (Section 5.3)

DOCUMENT #RBS5K6
A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

SECTION #T8YYAV 6. Results

EXCERPT #Z295Y2 p. 5
  We have tested our approach in three scenes (see Figure 8): Corridor has many obstacles and therefore creates a turbulent water flow with a lot of foam and spray. Waterfall is less turbulent, but due to its simplicity, artifacts are easily detected by visual inspection. Here, rendering of foam is essential for realistic results. Bamboo has dynamic elements that interact with the water. The bamboo is slowly filled with water, till the water weights it down and is emptied again. Please see the video for more details.

EXCERPT #LUVPJR p. 5
  We have used an Intel Q9450 CPU with a GeForce GTX 280 graphics card. The SPH simulation was done with NVIDIA PhysX. Particle counts range from 20k to 64k, depending on the scene. All images were taken at 1280 \times 720 resolution. The curvature flow filtering step was done at half resolution. We use off-screen buffers to store our various intermediate results: 32 bit float for the water depth, 16 bit float for the foam depth, and 16 bit each for T_{wb} , T_{wf} , T_f and T_{ff} . This results in a total of 112 bit per pixel.

EXCERPT #EAGE8Z p. 5
  Scene [vdLGS09] without foam with foam Waterfall 14 ms 14 ms 16 ms Corridor 11 ms 12 ms 15 ms Bamboo 12 ms 13 ms 17 ms

EXCERPT #KXUMM2 p. 5
  Table 1: Performance comparison between [vdLGS09] (without foam) and our method with and without foam.

EXCERPT #754PPX p. 5
  Table 1 compares the computational cost of [vdLGS09] with our method (SPH simulation time not included). The indicated running times are an average for a default camera movement. Our method has comparable performance with the benefit of improved image quality especially at near or far viewpoints. Even foam does not significantly increase running time for our method. Figure 6 presents the computational cost of [vdLGS09] and our method using the example of a camera zoom movement in the waterfall scene (like the one of the filter comparison shown in the accompanying video). It takes on average 23.12% of the computation time to render the water and foam depth, 24.4% for the thickness passes, 27.43% for the adaptive curvature flow filtering and 25.05% for the composition (including update of data structures). This measurement represents the mean breakdown of 6k frames used different viewpoints. Figure 1

EXCERPT #C3VCNN p. 5
  Figure 6: Performance comparison of a camera zoom movement in the waterfall scene. The graph plots time (ms) on the y-axis (10 to 40) against time on the x-axis. Three data series are shown: [vdLGS09] (blue line with dots), our method without foam (orange line with dots), and our method with foam (green line with dots). All three methods show a similar trend, with time increasing as the zoom progresses. The 'our method with foam' series is slightly higher than the others in the final zoom phase.

EXCERPT #AHW65J p. 5
  Figure 6: Performance comparison of a camera zoom movement in the waterfall scene.

EXCERPT #XNX9B9 p. 5
  shows the benefit of our physically guided foam generation over simple noise-based foam [vdLGS09]. Figure 7 demonstrates that foam is an important visual element when rendering fluids. Figure 9 compares a photograph of a real waterfall with our method. As one can observe, the foam is visible below the surface when a turbulent water stream immerges into resting water. Dynamic visual results can be observed in the accompanying video.

DOCUMENT #RBS5K6
A Layered Particle-Based Fluid Model for Real-Time Rendering of Water

SECTION #JEPXQL 7. Conclusions and Future Work

EXCERPT #YJNSYU p. 5
  We presented a new method for rendering particle-based fluids with foam in real time. The first contribution is an adaptive curvature flow smoothing method that avoids over- or under-smoothing as present in previous methods. Our second contribution is a fast physically guided foam rendering algorithm based on Weber number thresholding and a layered compositing algorithm. Our approach provides more realistic fluid rendering at comparable cost to previous methods, and is simple to implement and integrate into existing engines. In future work, we plan to use the volumetric information available in the layers to generate soft shadows. We will also investigate whether situations that require more than 3 layers are likely to appear.

EXCERPT #YXQTQY p. 5
  Figure 7: Corridor scene without/with foam (26-50 iterations). The image shows two side-by-side renderings of a corridor scene. The left image shows the scene without foam, and the right image shows the scene with foam. The foam is visible as a white, bubbly substance on the water surface, particularly around the obstacles in the corridor.

EXCERPT #3HXGZD p. 5
  Figure 7: Corridor scene without/with foam (26–50 iterations).

EXCERPT #VWP9L5 p. 5

EXCERPT #AJYR66 p. 6

EXCERPT #HM3AJG p. 6
  Figure 8: Four screenshots of fluid simulation test scenes. Top-left: A large industrial facility with a massive blue water geyser erupting from a central point. Top-right: A close-up of water flowing through a complex arrangement of bamboo pipes and joints. Bottom-left: A stone bridge with a waterfall cascading over its edge into a pool below. Bottom-right: A stone bridge with a waterfall, showing a different angle or perhaps a different simulation state.

EXCERPT #3BQJ5E p. 6
  Figure 8: Our three test scenes: at the top-left: Corridor (27–52 iterations) ; right: Bamboo (22–40 iterations); and at the bottom: Waterfall (left: 15–20 iterations; right: 20–44 iterations).

EXCERPT #U2YF5F p. 6
  Figure 9: Two side-by-side images of a waterfall. The left image is a photograph of a real waterfall, and the right image is a computer-generated simulation of the same scene. Both images have a red rectangle drawn on the lower part of the waterfall, indicating the area where foam occurs below the water surface.

EXCERPT #5YDZWZ p. 6
  Figure 9: Comparison between a photograph of a real waterfall (left) and our new method (right). The rectangle marks an area where foam occurs below the water surface.

### 20. Tool result: read

DOCUMENT #WZMZGY
Advected river textures

SECTION #DQ7LJZ Introduction

EXCERPT #EWXZK3 p. 0
  Real-time fluid simulation is a challenging problem in which “no single method (exists) that can capture all the subtle effects of water” 1 . Our work specifically focuses on real-time river rendering which is problematic for several reasons: the arbitrary 3D terrain geometry of the riverbed must be taken into account, rivers often include situations with both shallow and deep water, even slow moving rivers have highly detailed dynamic geometries, and rivers are generally very large, stretching many kilometers. Rendering large scale river flows for real-time applications is therefore difficult because of the complexity involved in generating a fluid surface that is both detailed enough to be visually realistic and efficient enough to be interactive.

EXCERPT #W7RDDR p. 0
  Through experimentation, we have come to believe that in order to realistically simulate and render a river it requires either a full 3D free-surface solver, or a hybrid technique that couples a lower resolution fluid solver to a higher detail fluid surface construction method. Current techniques do not satisfy all these requirements. Existing real-time fluid techniques are either too computationally expensive or do not exhibit large-scale visual properties required for a river. Given these constraints, the goal

EXCERPT #8KBMFE p. 0
  of our method is to approximate as much detail as possible while remaining efficient enough for interactive applications. We have also adopted the additional requirement that the method should be suitable for coupling with a rigid-body physics engine allowing 3D objects in the scene to interact with the river's surface. Specifically, we achieve the following: detailed fluid surface construction that responds appropriately to the underlying 3D terrain, simulation of the surface detail of real rivers, above real-time frame rates on commodity hardware, and an algorithm designed with rigid-body coupling in mind. To realize these goals we incorporate a 2D Navier–Stokes solver for its stability, efficiency, and accuracy, that is informed by 3D information gleaned from a series of Hydrostatic Pressure (HSP) columns. We do not use HSP columns alone since it is not a suitable approach for large-scale river representations as it cannot capture detailed effects 2 . We then couple the results of our pseudo-3D Navier–Stokes–HSP fluid solver with a texture advection method in order to derive highly detailed river surfaces. Example renderings running at 60–120 frames per second (85 on average) can be found in Figure 1.

DOCUMENT #WZMZGY
Advected river textures

SECTION #B2JVNM River Surface Advection

EXCERPT #NL7RK5 p. 5
  We have defined a highly efficient pseudo-3D fluid simulator, however, this alone is not sufficient to derive the highly detailed surface deformations found in real rivers, we therefore incorporate texture advection of animated ocean waves. We first discuss the formation of the animated wave texture itself which is generated procedurally while the simulation runs. We experimented with a number of techniques including random noise and Gerstner Waves 35 . But, we chose to adapt the method presented by Mitchell 34 which is derived from Tessendorf's 31 FFT method for Ocean waves. This approach computes large quantities of realistic waves at a low cost. The fluid surface is defined as a heightfield where the height of any grid cell, \mathbf{x} at a given point in time, t , is:

EXCERPT #QW7JVJ p. 5
  h(\mathbf{X}, t) = \sum_{\mathbf{k}} H(\mathbf{k}) e^{i(\mathbf{k} \cdot \mathbf{x} - \omega(\mathbf{k})t)} \quad (10)

EXCERPT #FD4PEN p. 5
  where h is the height field, \omega is the angular wave frequency, H(\mathbf{k}) contains amplitude and phase information, \mathbf{k} is a 2D vector such that k_x = 2\pi n / L_x , k_y = 2\pi m / L_y and (n, m) are integers with bounds -N/2 \leq n < N/2 and -M/2 \leq m < M/2 .

EXCERPT #W32P5Z p. 5
  However, procedural techniques are not intended to simulate a fluid volume and so the static wave fronts must be transported such that they have the appearance of moving with the river. One can think of moving a carpet around a curved track. But our situation is more complex because we must simultaneously move every section of the carpet in a different direction and at a different speed. The principle behind texture advection is to transport or morph one or more textures over time based on a series of input parameters (see Figure 4). In our case, we use velocity and pressure information from the pseudo-3D fluid simulator to advect the wave texture using what we will call river particles. These particles are propagated through the fluid using the results of the velocity and pressure information from the NS simulation. A river particle is an encapsulation of a mathematical deviation function that describes how a particular section (texel) of a texture is to be propagated through space and time.

EXCERPT #2YR3UE p. 5

EXCERPT #KJ3JRB p. 5

EXCERPT #RZ3FNK p. 5

EXCERPT #4XBYPQ p. 5

EXCERPT #CFANRY p. 6

EXCERPT #BA4JFY p. 6

EXCERPT #6LSBQS p. 6
  Figure 4: Texture advection. The left image shows a 6x6 grid of colored squares (red, magenta, blue, cyan, green, yellow) with black arrows representing velocity components and small black circles representing river particles. The right image shows the resulting texture after advection, where the particles have moved and the colors are now a mix of the original colors, representing the advected texture.

EXCERPT #DZ38N4 p. 6
  Figure 4. Texture advection. Arrows (left) represent velocity components of the fluid simulator and circles represent river particles. The resultant image after being advected is shown right.

EXCERPT #KDSPYL p. 6
  The task of advecting the wave texture is similar to the procedure that the Navier–Stokes advection solver uses. A back-trace is performed on each point in the volumetric grid to its source location in the previous time step:

EXCERPT #CWL6ZD p. 6
  p(\mathbf{x}, t + \Delta t) = p(\mathbf{x} - \mathbf{u}(\mathbf{x}, t)\Delta t, t) \quad (11)

EXCERPT #5FN7U3 p. 6
  where, \mathbf{u}(\mathbf{x}, t) is the particle's current position, and -\mathbf{u}(\mathbf{x}, t)\Delta t is the vector that we use to translate the particle back through time by the amount specified in \Delta t . Note that, as with the NS advection, this step will likely place the particle somewhere in between four grid cells, so we perform bilinear interpolation from the four neighboring grid cells to compute the end result.

EXCERPT #RNVXG6 p. 6
  In addition, each river particle has the following properties: location in the input textures, birth location, age, current location in the river, and age at death. An advection particle pertains to a specific location in the input textures which does not change. For our application we use an animated texture comprised of a number of frames of individual textures. The location in the input textures refers to the same location in each texture, where one texture is a single frame of the texture animation.

EXCERPT #VLRKJC p. 6
  This particle is then introduced into the fluid simulation and affected by the fluid simulation's velocity and pressure fields so that it moves through the river. As it moves it affects the resultant wave texture

EXCERPT #SV3T5Z p. 6
  by adding its value from the input textures to the output texture. Each location in the output texture can be seen as the average of all particles currently occupying that location:

EXCERPT #XP4TBD p. 6
  O_{xy} = \frac{\sum_{i=0}^n f(p_i)}{n+1} \quad (12)

EXCERPT #MWUXDB p. 6
  where f(p_i) is a function that returns the value of the particle's combined input textures. We use a texture resolution equal to the grid resolution at its highest level of detail setting so that the resulting surface is no more or less detailed than the geometry itself. The number of advection particles varies over time as they spawn, however, the initial state matches the number of advection particles with the grid resolution of the advection texture.

EXCERPT #MJ87MS p. 6
  Particles are spawned at specific times and have limited lifespans. They also do not travel infinitely far from their birth location because after traveling a certain distance they become completely un-grouped from their neighbors and start to resemble noise rather than wave fronts. In addition, the particle's age determines how strongly the output texture is affected by that particle. If a particle was recently spawned it fades in and as a particle nears its time of death it fades out, thus removing visual popping artifacts. The particle's current location has a similar impact, in that the farther a particle strays from its birth location the less of an impact it has on the final wave summation. We therefore define the particle update function to be:

EXCERPT #75NLDJ p. 6
  f(P) = \frac{a_c - a_b + \frac{\|l_c - l_b\|}{L}}{2} \quad (13)

EXCERPT #K7SCA8 p. 6
  where a_c is the particle's current age, a_b its birth time, while l_c and l_b denote the particle's current and birth locations. A is a constant defining the average age of a particle and L determines the maximum distance a particle can be from its birth location without being transparent. For all our simulations we set A to be 1.5 seconds and L to be 5% of the total length of the river.

EXCERPT #WTCDC3 p. 6
  The average lifespan, A , of the particles can be adjusted depending on how turbulent and quickly the river is moving. Our system provides a graphical particle display that assists in the adjustment of this value, as seen in Figure 5. By representing each particle as a color determined by its birth location it is easy to see how far the particles remain traveling in groups of similar color. We note that there is significant leeway in choosing good settings for these parameters; finding a single optimum setting for these constants is not required since the system is not overly sensitive to the tuning of this parameter. Moreover, we use a pseudo-random function with values in the range of (0.5, 2.0) to scale each particle's life span with respect to the average, A . The aim being to avoid situations in which many particles are dying or spawning simultaneously.

EXCERPT #EANTSG p. 6

EXCERPT #F5X236 p. 6

EXCERPT #JRMGG8 p. 6

EXCERPT #WQ4JZD p. 6

EXCERPT #7XA87P p. 7

EXCERPT #ERV6UQ p. 7

EXCERPT #P24BGY p. 7
  Figure 5: Visualization of advection particles. The image shows a dense field of small, colorful particles (pink, purple, and green) moving across a green, textured terrain. The particles are concentrated in a central area, suggesting a flow or advection process.

EXCERPT #TQEN3P p. 7
  Figure 5. Visualization of advection particles. The number of particles has been reduced to improve clarity.

EXCERPT #33BTWQ p. 7
  In the initial bootstrapping phase, we first assign an advection particle to every cell in the grid. We then run the simulation until all initial advection particles have died and respawned at least once, thereby reaching a stable state. In practice this requires a few seconds of

EXCERPT #Z63RNC p. 7
  computation on 10 km river, but can be pre-computed and stored. When no particle remains in a cell, a new one is faded into existence with its birth location set to an average of its neighbors. This removes the situation where a section of a river becomes empty and also eliminates any visual popping that might occur at the introduction of new particles. As can be seen in Figure 5, particles travel together in loose groupings where particles instantiated in similar locations remain near to one another. Yet features such as vortices and directionally opposing fluid flows can still be seen.

DOCUMENT #WZMZGY
Advected river textures

SECTION #HMVN46 Results

EXCERPT #G3SJ82 p. 7
  Our real-time method for simulating and rendering rivers is visually more convincing than existing methods and runs at far higher frame rates. Minute details in the river flow can be seen as a result of complex interactions between fluid and terrain and the fluid with itself. These complex interactions are a direct result of combining HSP columns with a 2D Navier-Stokes solver.

EXCERPT #J6H8Z3 p. 7
  The texture advection step produces highly detailed fluid surfaces in which the water interacts with the underlying terrain in ways typically reserved for the fully 3D fluid solvers. Water can be seen speeding up over shallow sections and slowing down over deep sections, as well as becoming turbulent in areas with large underwater obstacles, getting caught in nooks and eddies and flows around bends. This can be partially seen in Figures 1 and 7 clearly seen in the provided video (available online at www.interscience.wiley.com/journal/cav ). Figure 6 shows a comparison between the simulation running with the HSP columns turned on and off. In the case with HSP columns turned off the simulation is purely using the 2D Navier–Stokes for simulation results, and any terrain to fluid interactions are only at the shoreline and at the very surface of the fluid.

EXCERPT #PR6JT8 p. 7
  Figure 6: Comparison of hydrostatic pressure columns. The top row shows two side-by-side views of a river flow on a textured terrain. The left view shows the flow with hydrostatic pressure columns disabled, appearing smoother. The right view shows the flow with hydrostatic pressure columns enabled, showing more detailed, turbulent features. The bottom view shows the underlying terrain, which is a green, textured surface with a central dark area.

EXCERPT #7B4NNB p. 7
  Figure 6. Comparison with the hydrostatic pressure columns disabled (left) and enabled (right). Underlying terrain shown below.

EXCERPT #T9DYCS p. 7

EXCERPT #DXWCLE p. 7

EXCERPT #CCC7Y8 p. 7

EXCERPT #4A6NTD p. 7

EXCERPT #7GTWYB p. 8

EXCERPT #DALCYK p. 8

EXCERPT #44J2WG p. 8
  A 3D rendered image of a river flowing through a green, hilly landscape. The river is dark blue and shows some eddies and bends. The terrain is covered in green vegetation.

EXCERPT #RJMN8A p. 8
  Figure 7. Real-time rendering of long river section.

EXCERPT #PRVSL6 p. 8
  Level of Detail provides notable performance improvements as can be seen in Table 1. Even the modest LOD optimizations we have implemented make a significant difference to the frame rate and to the number of polygons rasterized per second. All screenshots and timings were produced on an off-the-shelf dual-core Athlon XP 3800+ computer with an nVidia 8600GT graphics card and 4GB RAM. However, the code has not been parallelized or GPU optimized, meaning that only one of the two cores on the CPU has been directly used. Most of example river beds used in this paper have been imported from DEM files of real rivers.

EXCERPT #9579Z9 p. 8
  Level of detail FPS Poly's per second Fully disabled 63 61 million Texture advection only 74 71 million Navier–Stokes only 111 107 million Fully enabled 120 115 million

EXCERPT #ZWVYKF p. 8
  Table 1. Comparison of the simulation running with different types of LOD enabled

DOCUMENT #WZMZGY
Advected river textures

SECTION #AZAUNZ Conclusion

EXCERPT #T9Y2PR p. 8
  We have developed an efficient approach to rendering large-scale fluid flows over arbitrary terrains with a relatively high level of realism. By combining an impulse driven 2D Navier–Stokes simulation with multi-tier hydrostatic pressure columns we have created a low computational-cost fluid solver that provides sufficient 3D information to simulate a river in real-time. We then employ procedural wave generation to produce an animated texture which is advected through the fluid simulation. This produces a highly detailed fluid surface representation that exhibits many of the visual elements that are characteristic of rivers. Our technique is applicable to real-time and interactive simulation scenarios and has been designed with rigid-body physics objects in mind. We feel that this work is therefore a major step forward in the area of real-time river rendering for interactive applications.

DOCUMENT #WZMZGY
Advected river textures

SECTION #XSMAUV Future Work

EXCERPT #5KXFKW p. 8
  This work affords many avenues of interesting further research. Our current implementation does not simulate non-planar fluid surfaces, though the method could be augmented to do so since pressure information is available directly from the simulation at every cell. This system could also easily integrate with a foam/particulate engine for waterfalls and large sprays. Other work could also examine alternate procedural texture/wave generation methods. Another enhancement would be the addition of two-way rigid-body to fluid interactions. As previously noted, we designed the system with this in mind by building the API from the ground up to allow individual scene objects to have full access to the fluid simulator's velocity and advection information.

EXCERPT #78AJMB p. 8
  Further work could explore improvements to Level of Detail rendering for rivers. Our system currently uses only basic geometry LOD on the terrain and no geometric LOD on the river surface itself. Although the river sections are split into LOD patches, this is only for the purpose of changing detail levels within the fluid simulation algorithm. We believe that adding a sophisticated geometry LOD algorithm would allow the simulation and rendering to operate at an even higher frame rate.

EXCERPT #3QZLDF p. 8

EXCERPT #7SSX77 p. 8

EXCERPT #G5RY8F p. 8

EXCERPT #89L8XW p. 8

EXCERPT #8BKQW9 p. 9

EXCERPT #VKGAQ9 p. 9

### 21. Tool result: read

DOCUMENT #92XRH7
Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

SECTION #W73RWJ 1 INTRODUCTION

EXCERPT #APD3VL p. 1
  ANIMATED fluids are frequently used in Computer Graphics applications, whether in virtual worlds, special effects or video games. As it is difficult to model the complete behavior of a fluid, animators and designers resort to texture mapping for finer surface details, whether small displacements, variations of the normals, or foam and debris being transported. But applying a texture on a flowing fluid, such as a river, creates conflicting requirements: on one hand, we want the texture to follow the flow exactly, so that the fluid movements stay realistic; yet on the other hand, we want the texture to keep its original properties 1 . As the fluid movements introduce large and cumulative distortions, shearing and stretching the original texture, solving both requirements is a difficult task.

EXCERPT #S3MHMB p. 1
  In this paper, we present a new, Lagrangian, technique for the advection of textures. Our technique takes as input a flowing fluid, whose velocity field is known, and a texture (either procedural or image). We produce as output an animated texture whose features follow exactly the velocity field, while keeping several key properties of the input texture, including its local appearance (see Fig. 1).

EXCERPT #GJ7THM p. 1
  Our algorithm works as follows: we start by placing sample particles along the flow. These particles are advected by the flow. A grid is attached to each particle,

EXCERPT #DZCPD6 p. 1
  and this grid is advected and deformed by the flow. Each grid is mapped to a fixed area of the input texture. To maintain texture properties, particles are eliminated when the distortion of their grid becomes too large. We maintain a constant particle density over the flow, killing or generating new particles when needed. In a final step, we reconstruct the texture by blending together these textured grids. Due to its Lagrangian nature, the complexity of our algorithm only depends on the pixels that are actually generated. Thus it works on very large scenes, potentially unbounded, in real-time.

EXCERPT #APACT8 p. 1
  Obviously, our algorithm does not apply to all possible input textures. It requires that we can blend together different areas of the input texture and yet create a satisfying result. We rely on a “smart blending” approach for procedural textures, but we expect our algorithm to perform poorly on images with highly structured content; however, we found that it works well with a large range of input textures (see Fig. 4, 5, 6 and 11, as well as the accompanying video), including noise textures, foam, ripples, lava... Interestingly, these textures correspond to the kind of features we most want to apply on realistic animated fluids.

EXCERPT #KSH8JS p. 1
  To measure the quality of animated textures, we suggest two criteria: the Fourier spectrum and the optical flow; both are computed on the output of our algorithm. Our experiments show that the optical flow of the animated texture matches exactly the input velocity field, while keeping the Fourier spectrum of the input texture.

EXCERPT #QD3YEA p. 1
  Our paper is organized as follows: in the next section, we review previous work on detail advection methods for animated fluids. We then present our algorithm (Section 3). In Section 4, we present our results and compare them to existing work. Finally, in Section 5, we conclude and present avenues for future work.

EXCERPT #FQ4EJZ p. 1
  • Université de Grenoble and CNRS, Laboratoire Jean Kuntzmann, BP 53, 38041 Grenoble Cedex 9, France • INRIA Grenoble Rhône-Alpes, Montbonnot, 38334 Saint Ismier Cedex, France

EXCERPT #GFHJPX p. 1
  1. Note that in the case of scientific visualization or for some dedicated effects, stretching can be desirable in order to convey information on the flow field, even huge stretching in the case of Line Integral Convolution. Here we address the opposite case of mostly reality-inspired imagery where the pattern mimics a fast regeneration process (ripples, foam, small-scale cloud convection) or the transportation of unstretchable details (bubbles, gravel).

EXCERPT #73BM5L p. 2

EXCERPT #ET2KLU p. 2

EXCERPT #QCMSDZ p. 2
  Figure 1: Comparison of texture advection algorithms. (a) Velocity field: A vector field with arrows of varying colors (blue to red) representing speed. (b) Input texture: A grayscale Perlin noise texture. (c) Our algorithm: The texture distorted by the velocity field, showing smooth, swirling patterns. (d) Naïve algorithm: The texture distorted by the velocity field, showing significant artifacts and streaking.

EXCERPT #F8R4YP p. 2
  Fig. 1. Our algorithm takes as input a velocity field (a) and a texture, here a Perlin noise texture (b), and produces a texture that follows the velocity field while retaining the local properties of the input texture (c). Simply advecting the original texture with the flow distorts the texture, introducing artefacts (d). See also the accompanying video. In all our figures depicting a velocity field, the colors of the arrows represent speed, based on hue (from blue (slow) to red (fast)).

DOCUMENT #92XRH7
Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

SECTION #SJ444N 3.1 Overview

EXCERPT #LQQ3KU p. 2
  Our algorithm is designed as a complement for a fluid simulation. We take as input the animated velocity field of a running fluid, computed separately. We want to add details to this fluid, using a procedural or image texture (see Fig. 2 and the accompanying video).

EXCERPT #UV7THN p. 2
  The simplest algorithm, mapping a texture to the fluid and letting it be deformed by the flow, is not acceptable: with time, the flow heavily distorts the texture, resulting in visible artifacts, even with a noise texture (see Fig. 1).

EXCERPT #J7E6R3 p. 2
  We generate a set of deformable textured grids that are advected with the flow. We start with a random Poisson disk distribution of particles and create regular grids centered on these particles. Each grid is mapped to a random area of the input texture. At each time step we:

EXCERPT #FWYVWN p. 3

EXCERPT #N9TCAW p. 3

EXCERPT #KDWYAU p. 3
  Figure 2: Overview of the algorithm. The diagram shows the flow from input data to the final output. On the left, 'Input velocity field' is shown as a vector field. Below it, a detailed view of the 'Initial regular grid' shows a 'Blending kernel' (a circular region of radius (2+β)d/2) and a 'Poisson disk' distribution of particles. A 'Deformed grid' is shown as a distorted version of the regular grid. On the right, 'Input texture' is shown as a grayscale image. Below it, 'Textured grids' are shown as the input texture mapped onto the deformed grids. The final 'Output: animated texture' is shown as a grayscale image with a complex, swirling pattern. Arrows indicate the flow of data and the process of advection and blending.

EXCERPT #WM8A25 p. 3
  Fig. 2. Overview of our algorithm. We attach deformable grids to a set of particles which keep the Poisson-disk distribution. Each grid is mapped to a fixed area of the input texture. The particles and the nodes of the grids are both advected with the input flow. At rendering, we blend the textured grids and achieve an animated texture.

EXCERPT #5NUUD9 p. 3
  • Advect the grid vertices with the flow; set the position of each particle to the centroid of its advected grid. • Maintain a uniform distribution of particles by killing and creating particles if necessary. We also kill particles whose grid is too distorted. We create regular grids for the new particles, using random areas of the input texture. • Compute spatial and temporal blending weights for the grids. The goal is to avoid seams and popping in the animated texture when particles are killed and created. Grids are still advected and blended after their particle’s death while they fade out. • Render the animated texture either by directly drawing and blending the textured grids, or by using an indirection structure to recover the grids covering a given pixel.

EXCERPT #JFX5K6 p. 3
  Fig. 2 provides the overview of our algorithm. In the next section, we define precisely what is our input data. The remainder of this section details each step of the algorithm: placing the particles and advecting the grid vertices (Section 3.3), blending between neighboring grids (Section 3.4) and rendering the advected texture (Section 3.5).

DOCUMENT #92XRH7
Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

SECTION #MUN6QE 4 RESULTS AND COMPARISON

EXCERPT #B3QB7D p. 6
  All pictures and timings in this paper and in the companion video 2 were computed on an Intel Core i7, running at 2.67 GHz, with an Nvidia GeForce GTX 275.

SECTION #PTG5NW 4.1 Results

EXCERPT #6PYR9X p. 6
  As you can see on Fig. 4 and 5, as well as the accompanying video, our algorithm can be used in many graphics applications for adding details to low resolution simulation, whether it is for fire, clouds or rivers. The advected texture can be used to change the colors of the flow, or its normals, or even as a displacement map.

SECTION #6B4N32 4.2 Performance and Timings

EXCERPT #WP9DC5 p. 6
  One of the strongest advantages of our method is that it runs in real-time, making it useful for interactive applications, such as video-games, exploration of virtual worlds, just-in-time generation of content and virtual modeling.

EXCERPT #FB5X95 p. 6
  For Fig. 4, 6, 7, 8 and most of the video sequences, we used a fluid covering the entire picture, an output texture size of 512 \times 512 , and 300 grids of 8 \times 8 vertices (including grids being faded in or faded out). The timings correspond to the fire example (Fig. 4).

EXCERPT #38F53L p. 6
  • Using direct reconstruction (section 3.5.1), the total overhead of computing and rendering the advected texture is just 9 ms. This corresponds to 6.5 ms of CPU time for handling particles and grids (interpolating velocities, evaluating deformation and maintaining Poisson distribution) and 5.5 ms of GPU time for reconstructing the advected texture. The total time is less than the sum because the two processors operate partly in parallel. • Using indirect reconstruction (section 3.5.2), with our implementation, the rendering time is 25 ms. The time for handling particles and grids is the same as with direct rendering, 6.5 ms.

EXCERPT #VDK3Z2 p. 6
  The reasons for the difference of performance are twofold. First, we are in the worst case for indirect reconstruction and the best case for the direct reconstruction: the entire fluid domain is displayed on screen, and we use a very simple shader. Second, our GPU implementation of virtual textures is not optimized: we simply implemented a regular tiling with a fixed number

EXCERPT #PRNDER p. 6
  2. available at http://evasion.imag.fr/Membres/Qizhi.Yu/ .

EXCERPT #7ZM4RX p. 7

EXCERPT #SB4HU5 p. 7

EXCERPT #TA997E p. 7
  Figure 4: Four panels showing a fire simulation. (a) Low resolution simulation, showing a blurry fire shape. (b) Frame 0, showing a detailed fire shape. (c) Frame 60, showing a detailed fire shape. (d) Frame 120, showing a detailed fire shape.

EXCERPT #DBAYSV p. 7
  Fig. 4. Using a Perlin noise reference texture advected by our method to add details at (512 \times 512) resolution to a low resolution 2D fire simulation ( 32 \times 32 velocity and marker density fields, cf (a)). Here, the reference texture is analytic (no storage): 4 bands of time varying noise are used, a_j(x) = b_j(2^j x, t) and F(\{a_j\}) = LUT(dens(x, t) + scale \sum \frac{1}{2^j} (1 - |2a_j - 1|)) . See also the accompanying video.

EXCERPT #6N4MKZ p. 7
  Figure 5(a): A 3D rendering of a river surface with large, detailed waves modulated by a Perlin noise texture.

EXCERPT #QV62G7 p. 7
  (a) Water waves

EXCERPT #4UXUFA p. 7
  Figure 5(b): A 3D rendering of a cloud layer with detailed texture modulated by a Perlin noise texture.

EXCERPT #UDRYT9 p. 7
  (b) Cloud layer

EXCERPT #GEJP8J p. 7
  Fig. 5. Applications of Perlin noise textures advected by our method. (a) Using one advected texture to modulate the height field of a river surface for representing large waves, and using another one as the normal map for representing small waves. We use 4 bands of time varying noise for each, with F(\{a_j\}) = scale \sum \frac{1}{2^j} a_j . (b) Using an advected texture to modulate the thickness of a cloud layer. We use 4 bands with F(\{a_j\}) = scale \sum \frac{1}{2^j} |2a_j - 1| . See also the accompanying video.

EXCERPT #R4HD7S p. 7
  TABLE 1

EXCERPT #FCMCYQ p. 7
  Timing results for a zoom in the fire example, using a fixed-size viewport ( 256 \times 256 ).

EXCERPT #STZZ5M p. 7
  Zoom factor Texture resolution Direct method Indirect method 1 256 \times 256 9 ms 10 ms 4 1024 \times 1024 20 ms 10 ms 16 4096 \times 4096 410 ms 10 ms

EXCERPT #PW8DXN p. 7
  of slots per tile (256, which is overestimated). It would be feasible to avoid blending the zero-contribution of unused slots, or even to use dynamics structures as in [20].

EXCERPT #W9NQ77 p. 7
  If we zoom on the object, more texture resolution is needed. The direct method requires to allocate and compute the full size texture even if only a part is visible on screen, while the rendering time of the indirect method remains constant since only visible pixels are rendered (see Table 1). The same behavior would occur for a rotation from facing view to grazing view angle.

EXCERPT #LCUWAB p. 7
  The computation cost of the advection phase is pro-

EXCERPT #5R6QUN p. 7
  portional to the overall number of vertices: doubling the number of particles or doubling the number of vertices per grid will both have the effect of doubling the computation time for advection.

EXCERPT #K4TDL7 p. 7
  The computation cost of the rendering phase depends on: the number of texels on which we make the computation (the total size of the texture for the direct reconstruction, the number of sampled — i.e. , visible — texels for the indirect reconstruction), the number of channels, and the cost of F .

SECTION #K4JT29 4.3 Evaluation and comparison

SECTION #EFP86R 4.3.1 Evaluating the Quality of the Animated Texture

EXCERPT #D8BK6W p. 7
  In order to evaluate the quality of an animated texture, we suggest two criteria: the optical flow of the final animated texture and its Fourier spectrum. Both properties are computed on the generated animated texture, T' , on the fly. For optical flow, we used the Lucas-Kanade method [24] in the OpenCV library, and set the search window size to 1/20^{\text{th}} of the output picture size.

EXCERPT #ZBB2TW p. 8

EXCERPT #CLVNZM p. 8

EXCERPT #SG37PS p. 8
  Input data (a) Input texture (b) Input flow (c) Fourier spectrum of (a) Our algorithm (d) Final animated texture (e) Optical flow of (d) (f) Fourier spectrum of (d) Input texture: A grayscale noise texture. Input flow: A vector field visualization of the input texture, showing flow directions with colored arrows. Fourier spectrum of (a): A grayscale image showing the frequency components of the input texture. Final animated texture: The result of advecting the input texture using the proposed method. Optical flow of (d): The optical flow computed directly on the final animated texture, matching the input flow. Fourier spectrum of (d): The Fourier spectrum of the final animated texture, matching the input texture's spectrum.

EXCERPT #9ACCH4 p. 8
  Fig. 6. Advecting a Perlin noise texture using our method. The optical flow (e) is computed directly on the final animated texture (d) and matches perfectly with the input flow (b). The Fourier spectrum of the final animated texture (f) also matches well with that of the input texture (c). See also the accompanying video.

EXCERPT #VYC93P p. 8
  Ideally, the optical flow of the synthesized animated texture should match the velocity field we used as input, while its Fourier spectrum should match the Fourier spectrum of the input texture. As can be seen in Fig. 6 and the accompanying video, our algorithm works very well on both points.

SECTION #C949RA 4.3.2 Comparison with Naïve Implementation

EXCERPT #CNELHQ p. 8
  As you can see in Fig. 1 and the accompanying video, it is not acceptable to simply advect a noise texture to follow the velocity field: after a few frames, the input texture is heavily distorted and visibly anisotropic along the directions of the flow.

SECTION #8TM3YZ 4.3.3 Comparison with Eulerian Texture Advection

EXCERPT #GPNUKP p. 8
  Eulerian texture advection methods, such as [11], overcome the limitations of the naïve approach by regenerating the texture periodically. The time between successive regenerations is called the latency .

EXCERPT #DT4Z7F p. 8
  Max and Becker [11] used a single latency for the entire domain. Their method preserves the optical flow at the cost of stretching the texture in fast areas. Adjusting the latency for these fast areas breaks the illusion of motion (and thus the optical flow) in slow areas. See Fig. 7 and the companion video.

EXCERPT #5SQFJL p. 8
  To overcome this limitation, Neyret [12] used several texture layers that regenerate periodically with different latencies. For each region of the fluid they pick the best layer depending on the local distortion rate, much

EXCERPT #973C9F p. 8
  like a MIPmap level is picked depending on the LOD. While this method performs better than [11], it can still generate distorted textures for complex velocity fields (see Fig. 8 and the companion video).

EXCERPT #MBNQ8H p. 8
  For all Eulerian methods, the texture will be explicitly advected, stored and reconstructed on the entire fluid domain; as a consequence, the resolution must fit the most demanding point of view, and the non-visible areas are computed anyway.

SECTION #BUWH3G 4.3.4 Comparison with Sprite-Based Texture Advection

EXCERPT #42D86R p. 8
  Yu et al. [9] simulate animated rivers by advecting sprites. Their approach has similarities with our work. However they advect solid particles, while we advect deformable grids. Their method gives a “blocky” velocity field, and unwanted secondary motions. It can also give a relative sliding motion between blended features on overlapping sprites, which can be noticeable in stretched areas (see the accompanying video). Deformable grids are a natural improvement over [9].

SECTION #2D9CVV 4.3.5 Comparison with Flow-Guided Texture Synthesis

EXCERPT #A9LDEF p. 8
  Flow-guided texture resynthesis techniques, such as Kwatra et al. [15], [16], take the same input and produce the same output as our work. There are two main differences. First, they measure texture similarities using neighborhoods while we use the Fourier spectrum, and they put little emphasis on the accurate reproduction of the input velocity field. Our experiments show that these methods tend to give rigid moving chunks around structured features and show sudden changes in the pattern. In other words the resulting optical flow does not accurately match the input flow (see Fig. 9 and the companion video).

EXCERPT #NWTRSP p. 9

EXCERPT #X66PKU p. 9

EXCERPT #PHBC5L p. 9
  Short latency (0.6 s) (a) (b) (c) Long latency (4.0 s) (d) (e) (f) Advectioned texture with short latency (0.6 s) showing an echoed pattern. Optical flow for short latency (0.6 s) showing incorrect flow vectors. Fourier spectrum for short latency (0.6 s) showing a preserved central peak. Advectioned texture with long latency (4.0 s) showing a stretched pattern. Optical flow for long latency (4.0 s) showing distorted flow vectors. Fourier spectrum for long latency (4.0 s) showing a distorted central peak.

EXCERPT #MWST63 p. 9
  Fig. 7. Advecting a Perlin noise texture with a horizontal shear flow using the basic Eulerian texture advection method [11]. Top : with a short regeneration latency (0.6 s) the texture is echoed (a) and the optical flow is incorrect (b), but the Fourier spectrum is almost preserved (c). Bottom : with a long latency (4.0 s) the texture is too stretched (d) and the Fourier spectrum is distorted (f), but the optical flow (e) matches the input velocity field.

EXCERPT #3GC7TL p. 9
  (a) Input flow (b) Multi-layer Eulerian texture advection [12] (c) Our algorithm Comparison of texture advection methods. (a) Input flow: A vector field of colored arrows on a dark background. (b) Multi-layer Eulerian texture advection [12]: A grayscale texture with three orange circles highlighting areas of overstretching. (c) Our algorithm: A grayscale texture that maintains the noise properties without overstretching.

EXCERPT #TGUE2Y p. 9
  Fig. 8. Comparison with multi-layer Eulerian texture advection method [12]. We advect a Perlin noise texture with the input flow of (a). We used three texture layers with latencies of 0.6 s, 2.3 s and 4.0 s (b). In some places (marked with circles), the method still results in overstretching. Our algorithm maintains the properties of the noise texture (c).

EXCERPT #BFW5A7 p. 9
  Second, since texture resynthesis algorithms work by identifying neighborhoods (and thus structures) in the input textures, they tend to give unreliable results for textures without recognizable features, such as noise textures (see Fig. 9 and the companion video) 3 , or to

EXCERPT #TA2PD9 p. 9
  recognize and repeat a feature meant to be random and unique.

EXCERPT #TC99EP p. 9
  Lefebvre and Hoppe [18] have designed a different algorithm for flow guided texture synthesis, running on the GPU. A side-by-side comparison with their algorithm using a noise texture as input (see the companion video) shows that it does not conserve the velocity field and results in blocky artefacts and temporal discontinuities 4 .

EXCERPT #LDBS8Q p. 9
  3. The texture resynthesis examples used in Fig. 9 and the video were kindly provided by V. Kwatra.

EXCERPT #HTLEF9 p. 9
  4. The texture resynthesis examples used in the video were kindly provided by S. Lefebvre.

EXCERPT #KFFJQ4 p. 10

EXCERPT #L3APGC p. 10

EXCERPT #UYWV6F p. 10
  Figure 9: Comparison with flow-guided texture resynthesis technique. (a) Input data: A square image with a gray background and green arrows pointing outwards from the center, representing a sink flow field. (b) Flow-guided texture resynthesis [15]: A square image with a gray background and green arrows pointing outwards from the center, representing a sink flow field. (c) Texture resynthesis from an image: A square image with a colorful, abstract pattern of red, yellow, and green, with green arrows pointing outwards from the center, representing a sink flow field.

EXCERPT #Y8GR65 p. 10
  Fig. 9. Comparison with flow-guided texture resynthesis technique [15] (see also the companion video). For (a,b) the input texture is a Perlin noise, and the input flow is a sink at the center of the picture (a). Flow-guided texture synthesis methods (b) do not match accurately the input velocity field, and the synthesized texture becomes blurry. For (c) the input texture is an image with structured pattern. Flow-guided texture synthesis methods do not match accurately the input velocity field.

EXCERPT #EJ5E5J p. 10
  Figure 10: A failure case for our algorithm. (a) Input data: A small square image with a checkerboard pattern of green and yellow squares. (b) Our algorithm: A larger square image showing the result of the algorithm applied to the input data. The result is a blurry, distorted version of the checkerboard pattern, where the regular structure is lost.

EXCERPT #YJ5TP5 p. 10
  Fig. 10. A failure case for our algorithm: if the input texture is an image with large regular structured features, our algorithm does not preserve them (see also the companion video).

SECTION #3HGSTC 4.4 Discussion

EXCERPT #KUHHUL p. 10
  Due to its properties our algorithm works well with noise textures and procedural textures. Our experiments show that it also applies to a large range of input textures (see Fig. 11 and the accompanying video), including bubbles, foam and froth. Our algorithm places a single requirement on the input texture in order to work correctly: the features must blend nicely by addition. In particular, this supposes that there are no significant large scale structures, and that local perceptual features are resistant to blending. For example, our algorithm works well with pictures of bubbles because blending together two pictures of a bubble produces a convincing bubble (or two bubbles glued together). It does not work, however, when blending texture images with large regular structured features, such as a checkerboard texture (see Fig. 10 and the companion video).

EXCERPT #G88PKS p. 10
  For procedural textures, which often show very strong structures at small and large scales, the quality of our algorithm depends strongly on the decomposition of the

EXCERPT #M8QPN9 p. 10
  original texture between F and the a_j channels. If the a_j blend nicely, the algorithm will produce a nice result even if F creates structured patterns. E.g. , for Perlin noise, a blending artifact-free quality result is obtained by storing a vector of base noise in the a_j (see [12] for illustrations and comparisons).

EXCERPT #ZZYYGD p. 10
  We think that the set of texture images that work nicely with our algorithm (foam, bubbles, froth, debris...) are precisely the kind of textures we would like to use on a moving fluid, introducing moving details that enhance realism.

EXCERPT #QJAHFJ p. 10
  Flow-guided texture synthesis algorithms [15], [16], [18] preserve large-scale features of the input texture but loose other texture properties, do not conform accurately to the input flow, and in some cases require a long pre-computation and several minutes per frame [15], [16]. We think that both algorithms have their benefits, depending on the application requirements and the input textures.

DOCUMENT #92XRH7
Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

SECTION #3HGSTC 4.4 Discussion

EXCERPT #KUHHUL p. 10
  Due to its properties our algorithm works well with noise textures and procedural textures. Our experiments show that it also applies to a large range of input textures (see Fig. 11 and the accompanying video), including bubbles, foam and froth. Our algorithm places a single requirement on the input texture in order to work correctly: the features must blend nicely by addition. In particular, this supposes that there are no significant large scale structures, and that local perceptual features are resistant to blending. For example, our algorithm works well with pictures of bubbles because blending together two pictures of a bubble produces a convincing bubble (or two bubbles glued together). It does not work, however, when blending texture images with large regular structured features, such as a checkerboard texture (see Fig. 10 and the companion video).

EXCERPT #G88PKS p. 10
  For procedural textures, which often show very strong structures at small and large scales, the quality of our algorithm depends strongly on the decomposition of the

EXCERPT #M8QPN9 p. 10
  original texture between F and the a_j channels. If the a_j blend nicely, the algorithm will produce a nice result even if F creates structured patterns. E.g. , for Perlin noise, a blending artifact-free quality result is obtained by storing a vector of base noise in the a_j (see [12] for illustrations and comparisons).

EXCERPT #ZZYYGD p. 10
  We think that the set of texture images that work nicely with our algorithm (foam, bubbles, froth, debris...) are precisely the kind of textures we would like to use on a moving fluid, introducing moving details that enhance realism.

EXCERPT #QJAHFJ p. 10
  Flow-guided texture synthesis algorithms [15], [16], [18] preserve large-scale features of the input texture but loose other texture properties, do not conform accurately to the input flow, and in some cases require a long pre-computation and several minutes per frame [15], [16]. We think that both algorithms have their benefits, depending on the application requirements and the input textures.

DOCUMENT #92XRH7
Lagrangian Texture Advection: Preserving both Spectrum and Velocity Field

SECTION #EAFVW8 5 CONCLUSION AND FUTURE WORK

EXCERPT #L3SRXU p. 10
  We have presented an algorithm for the generation of animated textures suitable for texturing moving fluids. Our algorithm takes as input a texture and the velocity field of a moving fluid, and generates an animated texture that accurately follows the velocity field, while preserving the properties of the original texture. Our method is well suited for noise textures, as well as procedural textures based on noise, and it also works on a large variety of input textures, and a large variety of moving fluids. As our algorithm accurately follows the velocity field of the moving fluid, we believe it will have many applications in Computer Graphics, including special effects for motion pictures, simulators, video games and virtual worlds. The ultra-light cost of our algorithm makes it well suited for interactive applications.

EXCERPT #LRPKYA p. 10
  Our algorithm could be applied directly to 3D velocity fields and 3D input textures, except for the rendering part. As future work we would like to experiment with volumetric rendering (in particular, Gigavoxel [25] approach shares the virtual texture principle). We would also like to extend our method to use a Poisson disk sampling in screen space as in [9], to get a view dependent LOD mechanism. One of our long term goal is to integrate detailed lively water and clouds in real-time landscape browsers such as GoogleEarth or games.

EXCERPT #GFSWTB p. 11

EXCERPT #PEX9MU p. 11

EXCERPT #FVGYD2 p. 11
  In the scope of texture synthesis techniques, we could try to replace the random selection of domains in the reference texture for new grids with a smarter method, in order to conserve larger features, or structures. Also, it would be interesting to study how to decompose some example pattern images into F and a_j , as a better conditioning for computations. Finally, we think that our approach could be adapted to parameterization-free texturing in the spirit of [20], [26].

### 22. Tool result: read

DOCUMENT #XDESU9
Scalable real‐time animation of rivers

SECTION #RQUAEM Abstract

EXCERPT #3UZ7TP p. 1
  Many recent games and applications target the interactive exploration of realistic large scale worlds. These worlds consist mostly of static terrain models, as the simulation of animated fluids in these virtual worlds is computationally expensive. Adding flowing fluids, such as rivers, to these virtual worlds would greatly enhance their realism, but causes specific issues: as the user is usually observing the world at close range, small scale details such as waves and ripples are important. However, the large scale of the world makes classical methods impractical for simulating these effects. In this paper, we present an algorithm for the interactive simulation of realistic flowing fluids in large virtual worlds. Our method relies on two key contributions: the local computation of the velocity field of a steady flow given boundary conditions, and the advection of small scale details on a fluid, following the velocity field, and uniformly sampled in screen space.

DOCUMENT #XDESU9
Scalable real‐time animation of rivers

SECTION #XF2N2Y 3. Overview

EXCERPT #QXYWAJ p. 2
  Input data. The input data of our algorithm is made of raster data for the terrain elevation and texture, of vector data for the fluid boundaries, and of wave textures (see Figure 2, left). The vector data describes a network of channels connected by junctions , as well as obstacles such as islands. Each channel has two boundary curves, a flow rate and a flow direction. This data could come from a GIS database, be simulated from an erosion model, or be generated interactively or procedurally. The wave textures can come from any source (Perlin noise, FFT waves, etc.).

EXCERPT #J9JNDY p. 2
  Runtime data. At run-time the terrain data is subdivided in a dynamic quadtree, based on the viewer position and distance. Each quad contains raster data and clipped vector data for its corresponding terrain part (see Figure 2a). This quadtree is computed as described in [BN08]. When a new quad becomes visible we compute on the fly the stream function values at channel boundaries (see Section 4.1). We also create an acceleration structure to quickly compute distances to channel boundaries (see Section 4.4). This data remains in memory as long as the quad is visible.

EXCERPT #NSN3LW p. 2

EXCERPT #4S8ZSF p. 2

EXCERPT #W3M8PW p. 3

EXCERPT #AL6YQ9 p. 3
  Texture advection. In order to advect small scale details on the fluids we rely on particles that carry wave sprite textures. We distribute particles with a uniform and constant density in screen space, to simulate only the visible parts of moving fluids and to automatically adapt the sampling density in world space to the viewing distance (Figure 2b). However we advect the particles in world space, using our procedural velocity method to evaluate locally the velocity of each particle. This procedural velocity depends on the distances of the particle to the channel and obstacles boundaries (see Section 4.2). After advection we insert and delete particles in order to keep a uniform sampling (see Section 5.1).

EXCERPT #ZHHTDN p. 3
  Rendering. We render the fluids by rendering meshes on top of the terrain. The meshes are created from the channel boundary curves. They are rendered with a shader that recovers and blends together the wave sprites that overlap each pixel (see Section 5.2).

SECTION #LFKVYW Algorithm 1 Scalable real-time animation of rivers

EXCERPT #B6RXPQ p. 3
  1: loop 2: for all new visible terrain quads do 3: Compute the quad's channels network. 4: Compute the stream function boundary values. 5: Build a structure for fast distance evaluations. 6: end for 7: Advect particles with the flow in world space. 8: Resample particles to keep uniform screen density. 9: Render wave sprites associated with particles. 10: end loop

DOCUMENT #XDESU9
Scalable real‐time animation of rivers

SECTION #LQXUW2 6. Implementation and results

EXCERPT #EUX776 p. 7
  In order to demonstrate the benefits of our method in real applications we tested it in a 25 \times 25 \text{ km}^2 scene with a river network, branchings and obstacles. We used a 800 \times 600 window with r = d = 20 pixels. We used two kinds of waves: noise perturbations and wind ripples. For the former, we used a precomputed Perlin noise reference texture. For the latter, we used Fourier generation using analytical time evolution [Tes04] for wind waves. Both reference textures contain height fields, that are used by the water shader for bump mapping and environment mapping. The test was done on an AMD Athlon 3200 processor at 1.8 GHz with a GeForce 8800 GTS graphics board. The particles and the final rendering results are shown in Figure 11.

EXCERPT #5JKAB2 p. 7
  We first validated the procedural velocity generation by comparing the streamlines generated by our method against those generated by a potential flow solver (see Figure 7). The similarity between the two results shows that our method is a good approximation.

EXCERPT #K63RTB p. 7
  We then measured the performance of our method. Figure 9 shows that given a Poisson-disk radius, the running time of our method depends linearly on the projected area of river surfaces in the window. Thus our method does not de-

EXCERPT #2U6QCS p. 7
  Figure 7: Streamlines of a flow past obstacles and through a junction. Left: Generated by our procedural method with distance power p = 1.0. Right: Generated by the potential flow solver in OpenFoam, a CFD software.

EXCERPT #KMNG4N p. 7
  Figure 7: The streamlines of a flow past obstacles and through a junction. Left: Generated by our procedural method with distance power p = 1.0 . Right: Generated by the potential flow solver in OpenFoam, a CFD software.

EXCERPT #ZKS839 p. 7
  Figure 8: Velocity profiles. Slip and no-slip boundary conditions can be simulated with p = 0.9 (left) or p = 1.2 (right), respectively.

EXCERPT #XV6F9S p. 7
  Figure 8: Velocity profiles. Slip and no-slip boundary conditions can be simulated with p = 0.9 (left) or p = 1.2 (right), respectively.

EXCERPT #R825Y2 p. 7
  pend on the complexity of the scene. In the test, we achieved real-time performance even in the worst case where the projected surfaces occupy the whole window. Certainly, the performance will decrease if we decrease the Poisson-disk radius. However, a moderate value as we used in this test is sufficient due to the adaptivity of the particles and the sprite-based rendering scheme.

EXCERPT #XSD95B p. 7
  Approximate data from Figure 9 Bottom graph Normalized Projected Area Total (ms) Particles Advection (ms) Particles Sampling (ms) Rendering (ms) 0.0 5 0 0 5 0.2 10 1 1 8 0.4 15 2 2 11 0.6 20 3 3 14 0.8 25 4 4 17 1.0 30 5 5 20 Figure 9: Top: Typical views with increasing projected areas of river surfaces. Bottom: A line graph showing the running time of the method depending on the projected fluid surface area. The graph plots Time in Millisecond (0 to 40) against Normalized Projected Area of River Surfaces (0 to 1). Four series are shown: Total (red circles), Particles Advection (orange squares), Particles Sampling (blue triangles), and Rendering (purple diamonds). All series show a linear increase in time as the projected area increases.

EXCERPT #ZKKSYG p. 7
  Figure 9: Top: Typical views with increasing projected areas of river surfaces. Bottom: The running time of our method depending on the projected fluid surface area.

EXCERPT #2M226J p. 7
  We also demonstrate the controllability of our method in the accompanying video † . Our system allows users to edit

EXCERPT #N44XSH p. 7
  † http://www-evasion.imag.fr/Membres/Qizhi.Yu/

EXCERPT #FTWX59 p. 7

EXCERPT #SD2TKA p. 8

EXCERPT #34BVNC p. 8
  channels without interrupting the animation, which is due to our procedural velocity generation. In addition, the river appearance can be easily modified using the reference wave textures.

EXCERPT #NG6JEN p. 8
  Figure 10: Three panels showing river animation. Top: A trifurcating junction with a wooden crate and a small boat. Middle: A close-up of islands in a river. Bottom: A close-up of a river with a grazing angle.

EXCERPT #C45XGK p. 8
  Figure 10: Top: a trifurcating junction and moving obstacles advected with the flow, with realistic refractions and reflections. Middle: a close view showing islands. Bottom: a very close view with a grazing angle.

EXCERPT #UD9TD5 p. 8
  Finally, to demonstrate that considering channel-confined

EXCERPT #E7HVEG p. 8
  flow is necessary for river animation, we compared our results against the animation of non-flowing water and uniform flow which can be handled by previous methods. The results demonstrate that our method brings considerable improvements (see the accompanying video): with non-flowing water, the waves stay in the same position, giving the impression of a static river; with uniform flow, the waves go through the obstacles and boundaries, breaking the assumptions of the model.

DOCUMENT #XDESU9
Scalable real‐time animation of rivers

SECTION #TJAYJS 7. Discussion and limitations

EXCERPT #4Y2DNV p. 8
  2D flow hypothesis and terrain slope Our 2D flow hypothesis is valid for constant water depth (and homogeneous velocity profile along each water column). To account for depth h(x,y) variations we should simply conserve q(x,y) = v(x,y)h(x,y) instead of v \cdot \nabla \cdot q = 0 , q = \nabla \times \psi , v = q/h . This supposes either to know h or to deduce it from the terrain elevation z(x,y) . In our static case, the Chézy law provides a convenient approximation: v = C\sqrt{Rs} with C the Chézy constant, s the slope, v = Q/S the average velocity in a vertical section of surface S , perimeter P , and hydraulic radius R = S/P . Assuming the section has a known shape, e.g., a rectangle of known length l and height h , this yields h as a function of s, l, Q .

EXCERPT #4ANUUG p. 8
  Moving boundaries The fact that we can efficiently recompute the acceleration structure for distance computations, and that we can combine it with individual distance fields for moving objects yields various advantages. First, it allows our model to fit in a precomputation-free environment where visible tiles are generated on demand. This is a key condition to make our model amenable to very large terrains. Second, we can deal with interactive changes, including falling objects, or moving obstacles. Third, this property could make it possible to deal with flows with moving boundaries, such as flooding rivers, mud or lava flows...

EXCERPT #PB35WU p. 8
  Limitations of texture frequency range For very close views the sprite diameter in world space is smaller than the maximum wavelength of the reference wave texture. Hence our sprites cannot reproduce the low frequencies of this texture in this case. The solution is to represent these low frequencies with a scalar value attached to each sprite, sampled from a low pass filtered version of the wave texture.

EXCERPT #YTDJGS p. 8
  Extension to 3D river surfaces In our implementation we render rivers as flat surfaces with bump mapping using fake reflection and refraction, like in most game engines. This very common technique has known limitations, especially at grazing view angles (wave elevation is not visible, especially along banks and obstacles, the back side of waves is not masked, etc.). Still, our model can be used with rendering methods taking parallax into account. For instance we could render the water surface with a coarse 3D mesh as in [HNC02], the height of the vertices being generated using our 2D texture. We could also use recent works such as parallax map, displacement map, inverse displacement map and relief textures.

EXCERPT #A59J6N p. 8

EXCERPT #3N927K p. 9

DOCUMENT #XDESU9
Scalable real‐time animation of rivers

SECTION #RD97PY 8. Conclusion and future work

EXCERPT #SKJ4EL p. 9
  We have presented a high performance framework to render animated rivers on very large terrains, allowing close views as well as large views. Our method fits well with real-time navigation of a large-scale virtual environment (Google Earth, simulators, games — although there is only limited interaction with the water), and is also controllable by designers.

EXCERPT #Z2H8AQ p. 9
  For this, we proposed a stream-function based procedural velocity scheme conforming efficiently to complex rivers, and an efficient dynamic particle sampling scheme ensuring at the same time the adaptation to the viewing condition, the respect of the simulated flow, and an homogeneous distribution in screen space.

EXCERPT #MAKNPF p. 9
  In future work, we want to link together the different parameters, depending on the required balance between accuracy and performance. We have only adapted the particles sampling to the viewing distance. We could also adapt them to the stretching of the flow to better represent regions of high variation.

EXCERPT #39J8XK p. 9
  Acknowledgments Qizhi Yu was supported by a Marie Curie PhD grant through the VISITOR project. This work was also supported in part by the French National Research Agency, reference ANR-05-MDMSA-004 “Natsim” and by the GRAVIT consortium, reference “GVTR”.

### 23. Tool result: read

DOCUMENT #PBM2TC
Water surface wavelets

SECTION #ZTWDW3 1 INTRODUCTION

EXCERPT #KZQGW5 p. 1
  This paper concerns the efficient and physically plausible animation and art-direction of water surface waves at large scales. Current solutions to this problem invoke numerical solutions to partial differential equations (like the shallow water equations or dispersive wave equations), or analytical solutions based on Fourier transforms. Numerical solutions excel at handling water interactions with moving obstacles, but they become expensive to compute when scaling to very large simulation domains with small (high frequency) wave details. Conversely, Fourier summation techniques excel at simulating very large domains with high-frequency details, but they cannot easily incorporate complex environmental interactions like moving boundaries and spatially-varying wind.

EXCERPT #RFLQDX p. 1
  Our work proposes a novel transformation to speed up the computation of water surface waves. Instead of discretizing the wave height and momentum at each point on a grid (like previous finite-difference methods), or discretizing wave amplitudes as a function of frequency and direction (like previous Fourier-based methods), we introduce a wavelet transformation that discretizes the wave amplitudes as a function of space, frequency, and direction combined . The variables resulting from this discretization change much more slowly over space than the original water wave height function, so we can represent the same amount of information with fewer variables. The new lower-frequency simulation is also less sensitive to traditional frequency-based limitations like the CFL condition and the Nyquist limit, which convert the maximum spatial frequency into limitations on time step size and visual detail. As a consequence, our discretization permits both high-resolution wave details (like Fourier-based methods) as well as local wave interactions with moving obstacles.

EXCERPT #784244 p. 1
  We derive new equations for propagating these local frequency dependent amplitudes through space; these equations result in simple 2D advection and diffusion operations that can be parallelized easily on graphics hardware, giving us interactive frame rates. We also present basic extensions to our simulator, like pre-computed wave paths and two-way solid fluid coupling. Finally, we found that this new representation provides a convenient artistic interface for hand-tuning the motion of complicated ocean simulations, and we show a prototype wave-painting interface for initializing simulations or overriding the physics with scripted motions.

EXCERPT #XMSZWB p. 1
  The contributions of our paper are:

EXCERPT #GJXVEJ p. 1
  • Eulerian Wavelet Transformation: A new theoretical model for water wave transport based on the theory of slowly modulated waves. • Low-frequency simulation variables: Our discretization relies on functions that vary more slowly over space than the

EXCERPT #EMZ6QE p. 1
  water height itself, so we can represent them on lower resolution grids. This change of variables allows more efficient computation and larger computational domains (Figure 1).

EXCERPT #BSWBFW p. 1
  • Novel artistic control: In addition to determining the amplitude function using the physical equations of motion, we also experiment with overwriting these wave amplitudes for artistic effect. We show how our method can be used to pre-compute wave scenes faster and more easily than previous work, and we present an interactive painting interface for designing spatially-varying ocean waves.

DOCUMENT #PBM2TC
Water surface wavelets

SECTION #MU7P6S 5 ALGORITHM SUMMARY

EXCERPT #ES924P p. 6
  This section gives an overview of the steps necessary to implement our algorithm. Our project webpage 1 also provides example code for a straightforward (CPU-only) implementation of the algorithm as well as an executable file which demonstrates our GPU-optimized implementation.

EXCERPT #764D8D p. 6
  The main goal of our algorithm is to update the amplitudes \mathcal{A} (Equation 10) and use them to visualize the water height \eta (Equation 7). We note that almost all of the physics simulation happens in the computation of the amplitudes, and that \mathcal{A} is never directly visualized. On the other hand, the computation of \eta is relatively light (thanks to the pre-computed profile buffer), and its visualization is almost entirely responsible for the apparent detail in the wave simulation. To take advantage of this disparity, we compute \mathcal{A} on coarse grids, and we compute \eta on a viewer-dependent adaptively-refined detailed mesh. Specifically, our GPU-optimized version uses hardware tessellation [Nießner et al. 2016] to compute an adaptive triangle mesh with vertex positions determined by \eta , and it computes the surface normals in a pixel shader using the analytic spatial derivatives of \eta .

EXCERPT #SK58YU p. 6
  We divide our algorithm into a function TimeStep that does some pre-computation work once every time step, and a function WaterHeight that needs to be computed on-demand for each node of the finely-sampled grid and each pixel. TimeStep mainly solves the evolution equation 18 by splitting it into two parts: AdvectionStep , which computes the semi-Lagrangian advection in

EXCERPT #P72ZRG p. 6
  1 http://visualcomputing.is.t.u.ac.at/publications/2018/WSW/

EXCERPT #GSVV5M p. 6

EXCERPT #WTDHFJ p. 7

EXCERPT #UE327M p. 7
  Section 4.2, and WavevectorDiffusion, which computes the amplitude spreading. It finishes with the function PrecomputeProfileBuffers which precomputes the one dimensional water wave profile buffers \bar{\Psi}_c(p, t) which are used for water height evaluation (Section 4.3). The WaterHeight function numerically evaluates Equation 20 with a weighted sum of 1D wave profiles at different angles, as in Section 4.3. Please see Algorithm 1 for pseudocode.

SECTION #AJK8ET Algorithm 1 Pseudocode for the algorithms used in our paper

EXCERPT #NGXPFF p. 7
  1: function TIMESTEP( t ) 2: AdvectionStep( t ) 3: WavevectorDiffusion( t ) 4: \bar{\Psi} \leftarrow PrecomputeProfileBuffers( t ) 5: end function 6: function WATERHEIGHT( \mathbf{x}, t ) 7: \eta \leftarrow 0 8: for b \leftarrow 1, \Theta_\eta do 9: \theta_b \leftarrow \frac{2\pi}{\Theta_\eta} b 10: \hat{\mathbf{k}} \leftarrow (\cos \theta_b, \sin \theta_b) 11: \mathbf{p} \leftarrow \hat{\mathbf{k}} \cdot \mathbf{x} + \text{rand}(b) 12: for c \leftarrow 1, K_\eta do 13: \eta \leftarrow \eta + \mathcal{A}(\mathbf{x}, k_c \hat{\mathbf{k}}) \cdot \bar{\Psi}_c(\mathbf{p}, t) 14: end for 15: end for 16: end function

DOCUMENT #PBM2TC
Water surface wavelets

SECTION #8LZWQ3 7 ARTISTIC CONTROL

EXCERPT #BUT7E2 p. 8
  The method we have presented so far focused on an efficient approximation for the physical motion of water waves. However, we can selectively replace various steps in our algorithm with user-defined procedures, in order to add artistic effects at the expense of physical realism.

SECTION #CXPF2K 7.1 Selecting the basis function \psi(k)

EXCERPT #ZJSEMQ p. 8
  The basis function \psi(k) controls the wave spectrum which is visualized in the final results. The spectrum can either be determined by physics or tuned by hand to create more stylized results. Figure 6 shows how changing this function affects the visualized wave heights. Regardless of the chosen spectrum, the waves will travel at the correct phase speed due to the dispersion relation in Equation 21.

EXCERPT #QQCJTD p. 8
  Figure 6: Comparison of wave styles. The left column shows the 'Phillips spectrum' with a corresponding plot of log psi vs log k showing a sharp initial drop. The right column shows the 'User-defined spectrum' with a corresponding plot of log psi vs log k showing a more gradual, U-shaped curve. Both plots have 'log k' on the x-axis and 'log psi' on the y-axis.

EXCERPT #LTGL44 p. 8
  Fig. 6. The effect of varying the wavenumber basis function \psi(k) : We produce different wave styles by setting \psi to a standard Phillips spectrum (left) and a user-defined spectrum (right).

SECTION #AV6VHK 7.2 Manually overriding \mathcal{A}

EXCERPT #SJ3UQ2 p. 8
  Instead of using physical equations to compute the amplitude textures \mathcal{A} , we can explicitly create or modify them with procedural functions, or with a novel amplitude-painting interface. In our video, we show that we can procedurally create reflection effects by artificially amplifying waves traveling perpendicular to an obstacle's surface, with an amplification factor based on distance to the obstacle. We can also use a painting interface, as shown in Figure 7.

EXCERPT #N3F3NF p. 8
  We note that hand-tuning these amplitudes will be physically incorrect in the sense that the group speeds are set to zero instead of determined by the dispersion relation. However, the phase speeds are still physically correct due to the dispersion relation in Equation 21. The result is that the waves themselves travel at the correct speed, but the wave groups do not. We found this indirect physical inaccuracy a bit more difficult to perceive, and so we believe that such an amplitude override technique might be a useful artistic tool.

DOCUMENT #PBM2TC
Water surface wavelets

SECTION #AL43YK 8 RESULTS

EXCERPT #RCG5UJ p. 8
  We show numerous results created by our method in our supplemental videos. To illustrate the large scale and interactive nature of

EXCERPT #XTSQZ2 p. 8
  Figure 7: A 3D rendering of a large body of water with a bright sun in the sky. A green, glowing, infinity-shaped path is overlaid on the water's surface, illustrating the wave-painting interface.

EXCERPT #X6FPXJ p. 8
  Fig. 7. Overriding \mathcal{A} with a real-time wave-painting interface to make waves process along an \infty -shaped path.

EXCERPT #X3JT35 p. 8

EXCERPT #3RMTSQ p. 9

EXCERPT #9H88TF p. 9
  Table 2. Performance breakdown for a single frame of animation.

EXCERPT #B3EDT6 p. 9
  Algorithm Component Timing % of Total Updating \mathcal{A} 8.54ms 51% Computing \eta 4.16ms 25% Miscellaneous rendering and unrelated overhead 3.97ms 24%

EXCERPT #WKY9MT p. 9
  our results, we show a vast 4\text{km} \times 4\text{km} sea interacting with islands, floating barrels, actively moving boats, and a user-controlled jet-ski. Both the simulation and the heightfield evaluation are computed in parallel on the GPU in each time step. We provide a supplemental document that describes relevant implementation details for both parts. Our laptop with a NVIDIA Geforce GTX 1070 GPU achieves an average frame rate of 60fps with the parameters in Table 1, and this paper includes an interactive demo of our method which recreates this example. Table 2 displays the timing breakdown for an average frame of this animation; note that the timing for the computation of \eta depends on the number of pixels occupied by waves and may vary slightly.

EXCERPT #9AHGRG p. 9
  Varying these parameters has different effects on the visual results and performance of our method, and we explore each of them in our supplementary video. The number of \mathcal{A} samples in our simulation depends linearly on the resolution of our 4\text{D } X_{\mathcal{A}} \times X_{\mathcal{A}} \times \Theta_{\mathcal{A}} \times K_{\mathcal{A}} simulation grid, so doubling the resolution of any dimension will roughly increase the memory and the runtime by a factor of 2. Increasing the spatial resolution X_{\mathcal{A}} will allow the wavefronts to exhibit a higher curvature, allowing more detailed interactions with highly curved boundaries. Figure 8 shows the effect of X_{\mathcal{A}} on the simulation quality. Increasing the angular resolution \Theta_{\mathcal{A}} allows a more precise behavior in each direction. Increasing the wavenumber resolution K_{\mathcal{A}} allows more detailed dispersion of wave groups (different amplitude groups travel at different speeds). We show an example with K_{\mathcal{A}} = 4 simulated wave groups in Figure 9 and in our video, which shows more accurate wave group dispersion but roughly quadruples the run time (drops the frame rate from 70fps to 20fps).

EXCERPT #8PTY3G p. 9
  Note that none of these resolution parameters affect the resolution of the waves themselves; they only affect the resolution of the wave groups , and thus induce higher-order indirect effects like curvature and speed of the wave groups, instead of affecting more visible cues like the frequency or speed of the wave crests. Instead, the frequency of the waves is controlled by the resolution of the heightfield evaluation, \eta(\mathbf{x}, t) , and the relative speed of the waves is fixed by the dispersion relation \omega .

EXCERPT #WV3FXP p. 9
  For discretizing \mathcal{A} we chose a spatial resolution of X_{\mathcal{A}} = 4096 for each dimension because it maps well to the GPU and allows an exceptionally large simulation domain. Many of the up-close interactions in our video have an effective resolution of approximately 10^2 grid cells on the screen at a time. We chose \Theta_{\mathcal{A}} = 16 wave directions for the simulation because it maps well to the GPU, and because fewer samples showed some directional bias artifacts when visualizing the \mathcal{A} function directly. We could not tell much difference if we increase the angular resolution to 32. We chose only K_{\mathcal{A}} = 1 - 4 wavenumber samples because we did not think the

EXCERPT #9TYA8K p. 9
  Figure 8: Two side-by-side screenshots of a sea simulation. The top image shows a detailed simulation with high spatial resolution, where wave groups and boundaries are sharp and well-defined. The bottom image shows the same simulation but with a reduced spatial resolution (X_A reduced by 4x), where the wave boundaries are blurred and less detailed, and the wavefront curvature is reduced.

EXCERPT #FXND3W p. 9
  Fig. 8. A detailed simulation (top) and one with the spatial resolution X_{\mathcal{A}} reduced by 4\times in each dimension (bottom). Reducing X_{\mathcal{A}} does not affect the resolution of the waves themselves, but it affects the resolution of the wave groups. At this low resolution, reflected and diffracted waves cannot resolve the detailed boundaries properly, and wavefront curvature is reduced.

EXCERPT #UJPH3E p. 9
  accurate simulation of wave group dispersion was necessary for visual effects.

EXCERPT #U6MFTD p. 9
  The resolution of \eta (Equation 20), however, has a direct effect on the visual results. Reducing the number of spatial samples will reduce the highest visible frequency, using only a small number of \theta samples will introduce lattice-like artifacts caused by waves appearing as perfectly aligned, and using only a few k samples will remove visual frequencies from the final wave visualization.

EXCERPT #CBD3VX p. 9
  Section 4.2 introduces an ad-hoc parameter for the angular amplitude diffusion. Large diffusion rates cause the amplitudes to blur all directions together quickly, making the waves more isotropic; small diffusion rates cause the wave packets to separate from each other, as illustrated in Figure 3. The effects of this parameter are more evident near circular wave sources, where amplitudes are still large and exhibit higher curvature. The amplitudes naturally drop off further away from sources like this, making diffusion effects difficult to notice.

EXCERPT #DWR9FU p. 9
  The performance of our method comes from a few sources. First, the fact that \mathcal{A} is low resolution allows us to discretize it on a coarse grid, so we don't need an expensive simulation of \mathcal{A} to get detailed visual results. We can exploit this coarse grid by either using a huge simulation domain (as in the above example), or by using very few degrees of freedom to make the simulation faster. Next, the pre-computed profile buffer \Psi saves us two orders of magnitude in computation by reducing a 2D integral to a 1D integral with a texture lookup. Lastly, both the simulation and the wave height evaluation are embarrassingly parallel operations spread out among many points in space, so they greatly benefit from GPU acceleration.

EXCERPT #SF6ALD p. 9

EXCERPT #HUP44X p. 10

EXCERPT #PJBBLL p. 10
  Figure 9: Two side-by-side screenshots of a 3D simulation of a boat wake on a body of water. The top image shows a uniform distribution of small and large waves, with a single wavenumber K_A = 1. The bottom image shows a more complex pattern of waves, with four wavenumbers K_A = 4, where larger waves on the right move ahead of smaller ones on the left.

EXCERPT #4BZMAL p. 10
  Fig. 9. Using a single wavenumber K_A = 1 (top) results in a uniform distribution of small and large waves in this boat wake. By contrast, when using four wavenumbers K_A = 4 (bottom) we can notice how larger waves on the right move ahead of smaller ones on the left.

DOCUMENT #PBM2TC
Water surface wavelets

SECTION #W3R46F 9 DISCUSSION

EXCERPT #YWWZAM p. 10
  This paper proposes a novel wavelet-based discretization for animating water waves. As it is based on linear wave theory, it can only approximate the correct behavior for waves with small amplitudes and is incapable of capturing any non-linear effects. The main dynamical equation, Equation 10 or 18, is a linear differential equation in \mathcal{A} . Our method handles non-heightfield displacement effects like Biesel and Gerstner waves, but there is no direct way for it to handle complex non-linear phenomena like breaking waves or topology changes like splashes.

EXCERPT #P4YPYX p. 10
  This approach de-couples the resolution of the visualized waves from the resolution of the simulation. Through a novel Gabor transformation, we are able to keep the simulation resolution much lower than the resolution of the heightfield which is ultimately visualized. Thus, this approach can animate very high frequency waves without the typical complications relating to excessive computation, aliasing, or simulation stability.

EXCERPT #ZB9JR8 p. 10
  Compared to Eulerian height field-based simulations, our method stores 4096^2 (spatial resolution) \times 16 (wave vector resolution) samples for our 4 km by 4 km scene. A height field storing the same number of

EXCERPT #BEDUYL p. 10
  samples would have a grid cell spacing of 25 cm, even ignoring that it needs to store 2 values per grid cell. Following the Nyquist theorem, the smallest possible wavelength would be 0.5 m. By comparison, we animate wavelengths down to 2 cm.

EXCERPT #HH8F29 p. 10
  Compared to wave packets [Jeschke and Wojtan 2017], neighboring overlapping wave packets cause massive pixel overdraw during rendering, which significantly reduces performance and there is no easy way to fix this problem. To illustrate the performance difference, a single boat wake takes from 2 up to 6 Mill wave packets, and it renders at 2 to 0.5 FPS respectively. By contrast, our method simulates and renders 1000 boat wakes at 60 FPS on the same hardware, and it naturally offers constant computational cost, i.e., it does not depend on the number of waves being simulated. However, the boat wake of wave packets is physically more accurate as phases of individual waves are explicitly controlled. As a guideline, wave packets should be used if control over wave phase (for perfectly circular ripples for example) is crucial and the number of packets is not too high. Surface wavelets are clearly the better choice for interactive water simulations even at medium scales where plausibility is more important than physical accuracy.

EXCERPT #5KRPW6 p. 10
  Our method can efficiently simulate the aggregate motion of high-frequency water waves, even with a low resolution simulation. However, as discussed in Section 3.3, low-resolution simulations give up the ability to precisely control the phase of each wave. Consequently, it is difficult to simulate phenomena that depend upon coherent phases, like the perfect circular wavefronts emitted from raindrops, without increasing the simulation resolution. Similarly, many familiar wake patterns that depend on constructive interference between coherent phases [Jeschke and Wojtan 2017; Thomson 1891] are impractical to replicate with our method. At low resolutions, our proposed jittered phases are better suited for noisy wave sources like chaotic splashes, wind, and large floating objects. We hope future research can remove this connection between wave phase coherence and simulation resolution.

EXCERPT #A62WVP p. 10
  Our current implementation uses the deep water dispersion relation. In the future, we would like to extend this work to handle a more general depth-dependent dispersion relation, which should create additional refractive effects near shallow water.

EXCERPT #MBM5XH p. 10
  Overall, we believe that our approach of simulating spatially-dependent amplitudes presents an interesting twist on water wave simulation. This new direction introduces unique challenges, like increased dimensionality and an interesting link between phase and resolution. At the same time, it makes significant progress on outstanding problems in the field of physics-based animation: it introduces novel methods for artistic control, it permits extremely large simulation domains, and it enables interactive animations with fine spatial resolutions.

### 24. Assistant tool calls

#### Tool call: `read`

```json
{
  "blocks": [
    "XUY95Y",
    "PHN7AY",
    "JL4FVP",
    "8ES8PA",
    "CC4RWZ",
    "QQ7TWA"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "SDDXFP",
    "HDCYLG",
    "CQWBFA",
    "XEPFKX",
    "5GWRQA",
    "F8ATT5",
    "GKHL8Q",
    "XHMJUD"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "5HJ8GY",
    "BUH4MD",
    "NNERGL",
    "FSZCV9",
    "XAMC76",
    "SGLQV7",
    "5ZZUA3"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "BTQCB6"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "2BJMND",
    "UQWEYD",
    "LP9TTY",
    "7FYCN5"
  ],
  "expand": true
}
```

#### Tool call: `read`

```json
{
  "blocks": [
    "RNRNU8"
  ],
  "expand": true
}
```

### 25. Tool result: read

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #XUY95Y Abstract

EXCERPT #KHRCTA p. 0
  We present a new method for enhancing shallow water simulations by the effect of overturning waves. While full 3D fluid simulations can capture the process of wave breaking, this is beyond the capabilities of a pure height field model. 3D simulations, however, are still too expensive for real-time applications, especially when large bodies of water need to be simulated. The extension we propose overcomes this problem and makes it possible to simulate scenes such as waves near a beach, and surf riding characters in real-time. In a first step, steep wave fronts in the height field are detected and marked by line segments. These segments then spawn sheets of fluid represented by connected particles. When the sheets impinge on the water surface, they are absorbed and result in the creation of particles representing drops and foam. To enable interesting applications, we furthermore present a two-way coupling of rigid bodies with the fluid simulation. The capabilities and efficiency of the method will be demonstrated with several scenes, which run in real-time on today's commodity hardware.

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #PHN7AY 4 Wave Simulation

EXCERPT #4DZ999 p. 2
  The following section will describe our approach to simulate breaking waves within the shallow water framework. We detect lines of steep wave fronts, and track these with a robust advection scheme. These wave lines generate patches of connected particles representing the fluid of an actual breaking wave. The wave lines adaptively track the original wave, and can merge with others in their neighborhood. An overview of our approach is shown in Figure 2.

EXCERPT #744R83 p. 2
  Detection: Typically, a wave breaks when an initially smooth wave approaches a region of shallow water, e.g., a beach. The decreased height of the water causes the braking influence of the ground to become stronger. The wave steepens, and, at some point, overturns. Especially at beaches this effect is reinforced by the backward current of previous waves, causing a stronger difference between the forward movement of higher fluid layers, and the slower (or backward) movement of fluid layers near the ground.

EXCERPT #6N7CAW p. 2
  The steepening of waves in regions of decreased fluid height can be reproduced with the shallow water equations. However, The effect of a breaking wave can naturally not be captured within a 2D simulation. The goal of the algorithm described in the following is to construct a line \mathcal{L} of connected points along each wave front that is a candidate for overturning. To actually detect the front of a steep wave, the gradient of the fluid height has to be larger than a given threshold t_H . Moreover, the velocity of the fluid needs to be taken into account, otherwise not only the front, but also the back side of a wave will be detected. At the wave front the fluid velocity opposes the gradient of the height field. Hence, as a first step we identify a set of points \mathbf{x} \in \mathcal{P}_s in the shallow water grid, that fulfill the criterion:

EXCERPT #VYGRKU p. 2
  |\nabla H(\mathbf{x})| > t_H \text{ and } \nabla H(\mathbf{x}) \cdot \mathbf{u}(\mathbf{x}) < 0. \quad (4)

EXCERPT #EWBE94 p. 2
  Here, the gradient of the fluid height \nabla H is computed with finite differences from the height field of the shallow wa-

EXCERPT #6NKAEY p. 2
  Figure 3: A top view of the wave front region and line construction. The diagram shows a grid with a wave front region highlighted in orange. A 'Wave line construction' is shown as a sequence of points. A 'Zoomed view' shows a 'Last wave line point (n)' and a 'Next line point (n+1) with steep height gradient'. A 'Next point along tangent' is also shown. A 'Broadened detection region' is indicated around the wave line. A 'Gradient' vector is shown at the next point.

EXCERPT #2XXURE p. 2
  Figure 3. Here a top view of the wave front region and line construction is shown.

EXCERPT #W4D9UT p. 2
  ter simulation. The threshold t_H is determined from the actual discretization of the shallow water equations, and a user defined parameter p_H . The discretization influences the resulting shape of the waves by the gravitational force applied during each time step, while the parameter p_H can be used to select the overall amount of waves to be generated. In the following we use p_H = 1/4 , and compute t_H as

EXCERPT #584DSY p. 2
  t_H = p_H g \Delta t / \Delta x. \quad (5)

EXCERPT #HMLEFR p. 2
  The points of \mathcal{P}_s usually do not form a closed single layer along the wave front. To generate a sequence of connected points for \mathcal{L} along the wave front, we enlarge \mathcal{P}_s by adding all points that have a distance of less than p_d to one of the points in \mathcal{P}_s . We have found that a distance of p_d = 2\Delta x yields good results by closing gaps of this scale along the points fulfilling Equation (4). As multiple wave regions can be present at a single time step, this broadened set of points is segmented with a flood filling algorithm to identify disconnected regions. In the following, \mathcal{P}_b will denote such a single set of connected points of the broadened region. We select a random point from \mathcal{P}_s , and construct a line by following the tangent vector of the height field. On overview of this process is given in Figure 3.

EXCERPT #ZWHSDX p. 2
  This line construction is repeated for both tangent directions. With \nabla H = (g_1, g_2) , these are given by \mathbf{t}_1 = (g_2, -g_1) and \mathbf{t}_2 = (-g_2, g_1) . The following procedure is first applied for one tangent direction, until the next point along this direction is not part of \mathcal{P}_b . Then the second part of the line is constructed along the opposing tangent direction. Given a point \mathbf{x}_n in \mathcal{P}_b , the next point \mathbf{x}'_n is computed as

EXCERPT #79R8CT p. 2
  \mathbf{x}'_n = \mathbf{x}_n + \Delta x \mathbf{t}, \quad (6)

EXCERPT #Q83KX6 p. 2
  where \mathbf{t} denotes the current tangent direction. Due to the scaling of the tangent with \Delta x , the line \mathcal{L} is constructed of points with a distance of the grid size of the simulation. To ensure the relatively large steps of Equation (6) do not by accident leave the region \mathcal{P}_b , the next point of \mathcal{L} is given by centering \mathbf{x}'_n to the point of the steepest gradient as

EXCERPT #Y86JBT p. 3
  \mathbf{x}_{n+1} = \mathbf{x}'' \in \mathcal{L}_g \text{ with } \max(|\nabla H(\mathbf{x}'')|). \quad (7)

EXCERPT #WH7SNE p. 3
  Here the line \mathcal{L}_g = \mathbf{x}'_n + t\nabla H(\mathbf{x}'_n) consists of all points along the height field gradient at \mathbf{x}'_n that are in \mathcal{P}_b . The point \mathbf{x}_{n+1} is added to \mathcal{L} and connected to \mathbf{x}_n . These steps are repeated until \mathbf{x}_{n+1} is not part of \mathcal{P}_b . In this case, the process of the line construction is restarted with the second tangent direction if t = t_1 , or the line is complete for t = t_2 . Likewise, if \mathbf{x}_{n+1} has a distance less than p_d to the first point of the line, the line is completed by connecting the two points, resulting in a closed loop.

EXCERPT #BFUTVR p. 3
  As the points in \mathcal{P}_s might also fulfill Equation (4) at a subsequent time step, all points of \mathcal{P}_s that are within a distance p_d to an existing line are removed from the set. This prevents another line from being initialized right next to an existing one. Note that this approach does not deal with branches in the wave front region, but such a case will be handled by the construction of two lines, that might eventually merge (as explained below).

EXCERPT #LBGD2U p. 3
  Advection: The wave speed for the shallow water equations is given by

EXCERPT #Q7SNTM p. 3
  c = \sqrt{gH}. \quad (8)

EXCERPT #TZXE4F p. 3
  However, for the interactive applications that we are targeting, the shallow water simulation can be distorted by a variety of factors, e.g., rigid bodies (as explained below) or other breaking waves. To accurately track the front of a shallow water wave with wave line \mathcal{L} , we combine an advection with the wave velocity, and a projection along the gradient direction onto the line of the steepest gradient on the wave front. The projection is performed with the bisection method, and an initial step size of length c . Usually, 2-4 steps suffice to find the desired target point.

EXCERPT #QC6UUW p. 3
  The direction of movement for a point \mathbf{p} of \mathcal{L} is given by the gradient of the height field from the last time step, at position t - \Delta t . At this point in time \mathbf{p} was located at a correct position on the wave front, either from an initialization of the wave line, or from a previous advection step, and thus \mathbf{u}_p = -\nabla H(\mathbf{p}) is used as the movement direction of \mathbf{p} at time t .

EXCERPT #7B2E9D p. 3
  As the wave crest might have passed \mathbf{p} , we first perform a projection along \mathbf{u}_p onto the maximum of the fluid height field. Once this maximum is found, we perform another forward projection onto the point of the steepest gradient on the wave slope at position \mathbf{p}' . We now ensure that this new point is valid with respect to the original wave speed c . If |\mathbf{p}' - \mathbf{p}| > 2c we remove the point from the line. Likewise, we ensure that this region of the wave is still steep enough to produce a wave. Thus, if |\mathbf{u}_p| < t_H/2 , the point is also discarded.

EXCERPT #UVGPHB p. 3
  Figure 4: A side view of the wave line vertex advection. The diagram shows a 2D cross-section of a wave. A grey shaded region represents the 'Fluid height field at time (t+1)'. A dashed vertical line indicates the 'Wave speed' direction. A solid line represents the 'Wave line at time (t)'. A point on this line is shown. A 'Forward projection onto wave crest' is indicated by a dashed line. Another 'Forward projection to the steepest gradient on the wave slope, new position at time (t+Δt)' is indicated by a dashed line. A coordinate system (z, t-y) is shown at the bottom left.

EXCERPT #XVQ5RE p. 3
  Figure 4. This picture shows a side view of the wave line vertex advection.

EXCERPT #4Z5SZ9 p. 3
  Figure 5: Connection shapes for the mesh generation from refined and coarsened wave lines. The diagram shows three scenarios: 1. 'Trivial case, direct connection' showing a single line segment. 2. 'Refinement, point inserted' showing a new point (red dot) being added to the line. 3. 'Coarsening, points merge' showing two points being merged into one. Labels on the right indicate 'Wave line at time (t+Δt)' and 'Wave line at time (t)'.

EXCERPT #WEH7CA p. 3
  Figure 5. Connection shapes for the mesh generation from refined and coarsened wave lines.

EXCERPT #723HGZ p. 3
  During its movement, the length of the wave front can change significantly. We thus adaptively resample the wave line by introducing new points when the distance between two neighbors is larger than 2\Delta x . Similarly, points with a distance of less than \Delta x/2 are merged. A folding of the line can also be prevented by merging segments where (\mathbf{p}_{n+1} - \mathbf{p}_n) \cdot (\mathbf{p}_{n-1} - \mathbf{p}_n) > 0 holds. In both cases the new points are initialized by averaging the properties of the neighboring points. Hence, the resulting wave line consists of segments that have a similar scale as the grid size of the simulation throughout its lifetime.

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #JL4FVP 5 Wave Patch Generation:

EXCERPT #ESTKYQ p. 3
  The fluid sheet of an overturning wave is represented with a wave patch that is built from connected particles generated at the wave line. In time intervals t_g a set of particles along the wave line is spawned for each point of the line, adding another layer of quads to the patch. Amongst each other, the particles have the same connectivity as the wave line. If a previous set of particles exists, the new set is connected to the previous one. If the same point on the line existed at the generation time of both particle sets, this is trivial. From these one-to-one connections, quads can be easily generated to form a closed surface of the wave patch. If points were added or removed from the wave line, these are marked, and corresponding connection shapes are inserted to guarantee a closed surface, as shown in Figure 5. To ensure that these three cases are sufficient, we only allow a single merging or insertion for a point within the time interval t_g .

EXCERPT #9UATCT p. 4
  For the computation of the velocities of the wave patch particles, we use the velocity of the source point on the line \mathbf{u}_l . The actual overturning of a wave results in a significantly higher velocity at the top of the wave than at its bottom. We assume that this forward acceleration is proportional to the potential energy, in relation to the initial fluid height H_i . Thus, the velocity of a wave sheet particle at position \mathbf{x} is given by

EXCERPT #R7TQM5 p. 4
  \mathbf{u}_s = (1 + p_o g(H(\mathbf{x}) - H_i)) \mathbf{u}_l. \quad (9)

EXCERPT #WFFDGJ p. 4
  Here, p_o is a parameter to control the strength of the height influence. As the wave line tracks the steepest point of the wave front, the generated particles have to be positioned at the wave crest to correctly give the impression of an overturning wave. The particle generation would be simplified if the crest of the wave was tracked instead of the front, as is done in our approach. However, the line of the wave crest is not as clearly defined, e.g., for saddle points and saddle lines of the height field. Thus, upon creation, the particles of the wave patch are moved to the crest along the inverted wave line velocity -\mathbf{u}_l . We furthermore subtract t_g \mathbf{u}_s from the particle position at the top of the wave, to ensure an overlap of the wave patch and the shallow water surface. This allows a smooth transition from the height field values to the wave mesh, as explained below in more detail.

EXCERPT #PRB2KL p. 4
  Once the fluid represented by the wave patch is detached from the fluid below that represented by the shallow water simulation, its motion is primarily determined by its initial velocity and gravity. Thus, Euler steps are sufficient to integrate velocity and position over time. After the update, we perform a collision detection of the particle with the fluid surface of the shallow water simulation. When a collision is detected, we distort the shallow water simulation at the particle position \mathbf{x} with H(\mathbf{x}) = H(\mathbf{x}) - p_m , while the eight neighbors of the shallow water node at \mathbf{x} are displaced by p_m/8 . Note that we do not explicitly transport fluid with the wave patches, as a modification of the height field along the wave front would distort its motion. This leads to noise within the shallow water simulation, unless the modification along the whole region of the wave is very smooth. As mentioned below, correctly performing this mass transport and smoothing is a topic of future research.

EXCERPT #E9P5QN p. 4
  Task Duration Shallow water simulation 39.6 % Breaking waves & particle simulation 21.7 % Mesh generation (vertices & normals) 18.9 % Rendering & graphics engine 19.8 %

EXCERPT #KXP2DP p. 4
  Table 1. Computational requirements of the different parts of our algorithm.

EXCERPT #8ZSE4L p. 4
  Test case Resolution Frames per Second Single waves 140^2 43.6 Box interaction 160 \cdot 100 51.8 Submerged shelf 150 \cdot 80 75.2 Surfer 200 \cdot 100 40.6

EXCERPT #9PP5H7 p. 4
  Table 2. Frames per second measurements for the different test cases.

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #8ES8PA 6 Rendering the Waves

EXCERPT #RELDNA p. 4
  For the rendering of a wave patch, its particles with their connectivity can be directly reused as vertices. The wave patches already represent a close surface, which, however, does not have a thickness. Thus, we create two instances of this surface for rendering, and displace the second one downward along the normal direction. To get a closed mesh, the sides of these two meshes are connected with quads. As mentioned above, the initial position of the particles of the wave patch ensures an overlap with the shallow water surface. It correctly represents the top of the wave, while the displacement of the lower side is chosen to represent the mass of the fluid according to the parameter p_m . Given a particle \mathbf{x} on the wave patch that is used as a vertex for the upper mesh, the position of the corresponding second vertex \mathbf{x}' is given by \mathbf{x}' = \mathbf{x} + p_m \mathbf{n} .

EXCERPT #P7NWS9 p. 4
  By observing real breaking waves it can be seen that a wave does not break as a whole at once, but the breaking process starts at a given position. It then spreads outward along the wave front due to the viscosity of the water. To achieve this effect, we select a the mid point of the wave line as the tip of the breaking wave. The wave patches are then generated from an enlarging region centered around the initial point. This is visible in, e.g., Figure 6.

EXCERPT #HDE8NW p. 4
  In contrast to full 3D simulations, it is furthermore easy to generate texture coordinates for the fluid surface of the wave patch. For a point on the wave line \mathcal{L} , its texture coordinate is given by its lifetime, and its position in the line. We, e.g., use these texture coordinates to blend in a foam texture at the tip of the wave patch.

EXCERPT #N8F4SP p. 4
  Finally, to give the impression of a larger scale, we use standard particles. These are generated when the particles of the wave patch hit the shallow water surface. Moreover, particles are spawned along the tip of the wave patch. Here, in reality, the drag of the air causes disturbances of the fluid sheet, resulting in the formation of drops. For the pictures shown in this paper, we furthermore use a small scale bump map to distort the reflective shallow water surface, which gives the impression of smaller surface waves.

EXCERPT #NQVG4X p. 5
  Figure 6: A 3x3 grid of nine images showing different types of waves created by the simulation method. The waves vary in shape and intensity, from small ripples to large, breaking waves.

EXCERPT #KCX5X2 p. 5
  Figure 6. Different types of waves created by our method.

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #CC4RWZ 8 Results

EXCERPT #N76QE7 p. 5
  The capabilities of our wave simulation approach are demonstrated with the test cases shown in Figure 6. Each of the three rows of pictures show a breaking wave generated from an initial pulse, which has a height of 3/2H_i in comparison to the overall height H_i . The breaking wave of the upper row of Figure 6 was generated with a box profile aligned with the grid boundary. The wave front is correctly detected and tracked throughout its motion. To demonstrate that our method works regardless of the alignment of the wave, the middle row uses an initial height profile that is rotated by ten degrees. The lower row of pictures was generated with a square elevation initialized in the middle of the simulation grid. This results in a circular wave that spreads outward. Note that the sharp edge of these three profiles results in the detection of several smaller waves in the region behind the main wave front. They are, however, quickly removed from the simulation once the steepness criterion of Equation (4) is not met anymore.

EXCERPT #JH775G p. 6
  Figure 7: Three sequential screenshots showing a smooth wave approaching a submerged shelf. The wave steepens as it moves over the shelf, eventually overturning. The ground topography is visible below the shallow water surface.

EXCERPT #5K6T5N p. 6
  Figure 7. A smooth wave approaches a submerged shelf, which results in a steepening of the wave and, eventually, overturning. The ground topography is visible below the shallow water surface.

EXCERPT #RE9YTE p. 6
  Images from one of our test simulations with rigid body interaction can be seen in Figure 8. Several boxes are thrown into a basin of fluid, become submerged, are dragged along with the fluid, or float on the surface. A user can interact with the simulation by moving around the boxes. The simulation remains stable even during quick movements.

EXCERPT #Q3HMFJ p. 6
  A simulation of a breaking wave at a submerged shelf is shown in Figure 7. Test cases with a submerged shelf are common in coastal engineering, and represent the typical topology of a shore area. A simulation of a breaking wave at a submerged shelf in 3D was demonstrated in, e.g., [3]. With our algorithm we can recreate this phenomenon in real-time. Here, an initially smooth wave, that would not break on even ground, is approaching the submerged shelf. The decreasing fluid height causes the wave to steepen within the shallow water framework. Eventually, the wave is steep enough to fulfill Equation (4), and triggers the creation of a breaking wave. Note that the shelf is not fully aligned with the simulation grid, which causes the wave to start breaking further towards the viewer.

EXCERPT #Q56DNY p. 6
  Finally, we have recreated a game scene of a surfing character in Figure 9. Our algorithm yields sufficient detail even when the camera is very close to the breaking wave. The details of the breaking wave can be controlled by changing the point distances on the wave line, as this also results in a change of the mesh resolution.

EXCERPT #TAFHNN p. 6
  A limitation of our approach is that it doesn't properly handle cases with chaotic waves in the shallow water simulation. This causes the detected breaking waves to be removed before they can fully develop. Thus, the algorithm is not suitable for handling situations that would require many small splashes or drops, but targeted towards larger entities like a whole wave. Likewise, small scale waves caused by

EXCERPT #TZ9UQA p. 6
  moving objects, can only be simulated with breaking if they are properly represented within the shallow water simulation.

EXCERPT #RTYCL9 p. 6
  The results discussed in this section were calculated on a common PC with an Intel Core 2 Duo CPU (2.13 GHz), and a Nvidia Geforce 7950 GPU. As our implementation is not yet parallelized, it only makes use of one of the cores of the CPU. The actual frame rates of the different cases are given in Table 2. All test cases use between 160k and 200k grid points, and run with 40 to 75 frames per second, including rendering. The distribution of the computational time for the different parts of our algorithm can be found in Table 1. For this measurement a typical wave, as shown in Figure 6, was simulated. Overall, the fluid simulation amounts for 80% of the run time, while the rendering and overhead introduced by the graphics engine require the remaining 20%. Roughly half of the simulation time is spent on the shallow water simulation itself, while the wave simulation algorithm requires circa one fourth of the time. The creation of the surface mesh and the computation of the normals again requires roughly one fourth of the computations.

DOCUMENT #8SERGP
Real-time Breaking Waves for Shallow Water Simulations

SECTION #QQ7TWA 9 Conclusions

EXCERPT #XFKY8Q p. 6
  We have presented a new method to perform real-time simulations of open water scenes with breaking waves. It is based on detecting and tracking the wave front with line segments. The breaking wave itself is represented by a patch of connected particles. Our model for coupling a rigid body simulation with the shallow water simulation moreover makes it possible to create interesting interactive applications, and can handle cases such as submerged bodies. Overall, the algorithm performs with high frame rates, and without causing noticeable slowdowns during the course of the simulation. It furthermore allows the efficient and seamless creation of a textured surface mesh. These properties of the algorithm make it especially interesting and suitable to be used in computer games. Although it is aimed for real-time applications, the algorithm is also interesting for high quality off-line animations. It could, e.g., allow the efficient simulation of large open water shore scenes, while giving animators real-time feedback during their work.

EXCERPT #SG2FMW p. 7
  Figure 9: Three sequential frames showing a scripted character moving along the wave front, giving the impression of surf riding. The character is a small, stylized figure with a yellow body and a red hat, positioned on the crest of a blue wave. The background shows a bright, hazy sky with soft clouds.

EXCERPT #R8EHX4 p. 7
  Figure 9. A scripted character is moved along the wave front, giving the impression of surf riding.

EXCERPT #VNWSER p. 7
  In the future we would like to extend our algorithm by, e.g., detecting collisions between different wave patches, and performing a full smoothed particle hydrodynamics simulation of the splash and foam particles. This would allow the correct handling of more chaotic or quickly changing scenes. The plausibility of the simulations could also be increased by a model for transporting fluid volumes from the shallow water simulation with the breaking wave and particles. Furthermore, it would be interesting to combine our technique with an adaptive algorithm to create detailed triangulations of the fluid surface and the drops. This would be especially interesting for the off-line simulations mentioned above.

### 26. Tool result: read

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #SDDXFP Abstract

EXCERPT #BVUXWL p. 0
  The visualization of simulated fluids is critical to understand their motion, with certain light effects restricted or with added computational complexity in the implementation if real-time simulation is required. We propose some techniques that improve the rendering quality of an enhanced shallow waters simulation. To improve the overall appeal of the fluid representation, lower scale details are added to the fluid, coupling external non-physical simulations, and advecting generated surface foam. We simulate caustics by raytracing photons in light and screen-space, and apply refraction and reflections also in screen-space, through a number of render passes. Finally, it is shown how a reasonably sized fluid simulation is executed and rendered at interactive framerates with consumer-level hardware.

EXCERPT #7CK2EH p. 0
  Keywords: real-time reflections and refractions, real-time caustics, fluid rendering

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #HDCYLG 149 3. Additional surface detail

EXCERPT #ZF4HNM p. 2
  150 The heightfield simulation has a fixed size resolution which 151 imposes a limit on the detail scale that can be achieved. We can 152 add other simulations that improve the details by changing the 153 surface normals locally. Furthermore, other advected properties 154 as, e.g., surface foam, can also be simulated and applied to the 155 final visualization. This section will introduce how these effects 156 are accomplished.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #CQWBFA 157 3.1. Lower scale detail

EXCERPT #NXBTLT p. 2
  158 From the heightfield of the fluid surface we can extract ap- 159 propriate normals although they are restricted to the simulation 160 resolution. We can increase the detail of the fluid just using nor- 161 mal mapping. For example, [2] applied a normal map texture 162 generated from the FFT ocean simulation by [6] and advected 163 it as in [9].

EXCERPT #LTQ73Y p. 2
  164 The FFT ocean simulation from [6] is based on the com- 165 putation of the Fourier amplitudes of a wave field. The final 166 heightfield is obtained from the inverse FFT to those ampli- 167 tudes. In our case, we compute the FFT each frame and obtain 168 a normal map from its heightfield which is then applied to the 169 fluid surface, as can be seen in Figure 4a.

EXCERPT #3SCTP5 p. 2
  170 An alternative to the FFT approach is the use of noise tex- 171 tures with the same goal at mind. We can use gradient noise, 172 being Perlin noise [28] the more popular, to obtain heightfields 173 and compute normal maps from them to apply to the fluid sur- 174 face. With 3D noise, we can create the illusion of animation 175 moving through one of the dimensions. However, noise tex- 176 tures have some inherent problems: it is not clear how to create 177 a good water-like function and if tiling is required, the pattern 178 repetitions are quite obvious, as shown in Figure 4b.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #XEPFKX 179 3.2. Surface Foam

EXCERPT #E47KSP p. 2
  180 In the real life situation where splashes are generated, like 181 in breaking waves, it is most probable that foam is generated 182 when these splashes hit the fluid bulk again.

EXCERPT #3X8RZ9 p. 2
  183 In contrast to [2], where diffuse disks are generated and ad- 184 vected with the fluid when particles fall into the surface fluid 185 again, we simplify the idea. Using a floating-point single com- 186 ponent texture mapped to the surface fluid, we detect where a particle has fallen and initialize that texel to a certain maximum time-to-live (TTL) for the foam. This texture is then advected using the fluid's velocity field, tracing back as in [29]. Each frame, the values of the texture are decreased \Delta t until they become 0. These values are then multiplied with the desired foam color and mapped to the fluid mesh, resulting in the blended foam.

EXCERPT #CCCMN9 p. 2

EXCERPT #EFHT6H p. 3
  Figure 3: A sequence of four images showing a breaking wave example. The wave is rendered with a textured surface and a grid of photons, illustrating the fluid simulation and photon-based caustics.

EXCERPT #GPZ7X7 p. 3
  Figure 3: Breaking wave example from [1].

EXCERPT #6YDDZV p. 3
  Figure 5: Two images showing foam generation. The left image shows a close-up of the foam on a wave, and the right image shows a wider view of the wave with foam. The foam is generated at particle-surface hit points and advected in successive frames using the fluid's velocity.

EXCERPT #YFEJEG p. 3
  Figure 5: Foam is generated at particle-surface hit points and advected in successive frames using the fluid's velocity.

EXCERPT #PWC4XJ p. 3
  Using a texture for the foam introduces a constraint, however: its resolution should be dictated by the size of the particles as, it could happen that more than one texel should be initialized, depending on the particle to texel size ratio or, conversely, that the texels are too big for the particle size.

EXCERPT #GRWR54 p. 3
  Overall, as seen in Figure 5, the results are convincing and the computations are faster due to the limited requirements, which make it ideal in real-time applications.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #5GWRQA 4. Photon-based Caustics

EXCERPT #LDCVQG p. 3
  In order to add caustics to our real-time fluid simulation, we follow the same path of [3] and extend their work. They raycast a grid of photons, as points, through the scene in an orthographic space defined at the light source, which also allows them to easily add shadow mapping. One restriction they have is that the depth map used in the raycast phase should be continuous or, at least, with no great jumps. Other limitations this technique has are the same as image-based rendering: the results depend on the resolution of the textures used, which in this case restricts where the photons can end within the scene.

EXCERPT #PACNP8 p. 3
  Our contributions to their algorithm imply extending the raycast of photons out of the light space to screen space, splat-

EXCERPT #7CGGCD p. 3
  ting them oriented with the surface of the receiving mesh. In contrast to [3], we do not generate a caustics map; the splats are blended with the scene, varying their intensity depending on the orientations of the caustic generating fluid position, as well as the distance the photon has travelled inside the fluid. As our fluid simulation is represented just by its surface, we restrict our approach to refracted photons which will fall in the underlying terrain and ignore reflected ones.

EXCERPT #H8WGAL p. 3
  The multipass algorithm can be summarized in the following steps:

EXCERPT #XY2YVV p. 3
  1. Render the objects of the scene (excluding the fluid) from the camera and store depth and normal maps. 2. Render the objects of the scene (excluding the fluid) from light with an orthographic projection and store the depth map. 3. Render the fluid from light with the same orthographic projection as before and store the world positions and refracted directions at each pixel. 4. Render the grid of photons. The primitives used are points which will be expanded to quadrilaterals when a final position is found.

EXCERPT #UM3N89 p. 3
  This grid of points has the same resolution as the orthographic projection used previously in Step 2. In a vertex shader, the vertices will be raycast first in light space using the depth map from Step 2. If there is no intersection found, i.e., the photon exited through a wall of the frustum, the raycasting will be repeated in camera space. If there is not an intersection yet, the point is discarded (rendered out of frustum). Otherwise, if an intersection is found at light space, it is transformed to camera space and checked for correctness:

EXCERPT #8ZW9WY p. 3
  • If the point is occluded in camera space, it is discarded. • Else, if the point is not occluded and the depth does not match between light and camera spaces, the raycasting continues from the actual point position in camera space. • Else, the point is correct, that is, the depths match between light and camera spaces, thus the point is final.

EXCERPT #W6X2XJ p. 3
  When a final point is found, from the previous condition or from the camera raycasting, the normal is looked up in the normal map from Step 1. In a geometry shader, the points are expanded to quads oriented with their associated normal. Finally, in the fragment shader, the photons are textured with a

EXCERPT #PN4NDP p. 3

EXCERPT #JAEGZA p. 4
  256 Gaussian splat, and their intensity is regulated depending on 257 how they are facing the light and the distance they have trav- 258 elled through the fluid until finally hit the receiving surface. At 259 last, they are blended to the contents of the framebuffer.

EXCERPT #QTY99G p. 4
  260 We have not implemented shadows to keep the algorithm 261 simple but, as suggested in [3], shadow mapping is easily added 262 as the depth map from light is already stored for the raycasting.

EXCERPT #74Y8T2 p. 4
  263 As can be seen in Figure 6, the visual results are good enough 264 for real-time rendering and the photons are not restricted to the 265 light space. For a full physically-based render, the precise radiance 266 of the photons should be computed. In order to make the 267 algorithm more approachable, we just regulate the photons con- 268 tributions with their orientation and user parameters as they are 269 just blended with the framebuffer, which allow the technique to 270 be faster in comparison, because we don't need the expensive 271 operations for gathering the photons.

SECTION #F8ATT5 272 5. Screen-space Refraction and reflection

EXCERPT #4LN663 p. 4
  273 Similarly to the caustics approach, we implement refraction 274 and reflection raycasting through depth maps, in the same way 275 of [23].

EXCERPT #QN5J4Q p. 4
  276 For simplicity, we want to be able to use the same raycasting 277 algorithm for both refractions and reflections, so we improve 278 upon previous works by rendering in separate buffers what is 279 above and below the fluid. This allows to, using the same code, 280 just look for ray-depth intersection in the appropriate buffer to 281 obtain the result and do a final composition with both refractions 282 and reflection as needed.

EXCERPT #G9K4AL p. 4
  283 In this case, rays are cast from camera and reflected or re- 284 fracted (or both) when they hit the fluid, as shown in Figure 7.

EXCERPT #ZFS2KC p. 4
  285 Here, we also use a multipass algorithm that can be ex- 286 plained in the following steps, always rendering from camera:

EXCERPT #ZNAM4K p. 4
  287 1. Render the fluid mesh and store the depth buffer. 288 2. Using two render targets (RT) named 'over' and 'below', 289 which will store color and depth, we render the objects of 290 the scene (dynamic objects and ground in this case) and compare the depth with the previously stored. If the 291 depth is greater, the fragment is stored in the 'below' RT, 292 otherwise in the 'over' one. This pass can be thought as a 293 stencil test, which separates what is above o below the 294 fluid surface. 295 3. Render the fluid again, using the RTs. For each fragment 296 of the fluid two rays are cast: one for refraction (using 297 RT 'below'), one for reflection (using RT 'over'). As 298 the rays start from the camera, if the reflected/refracted 299 rays should come back, they are discarded. The results of 300 both raycasts are combined using Schlick's approxi- 301 mation [30] to Fresnel terms for simplicity. 302 4. Finally, to avoid the repeated render of the other objects 303 of the scene, we just use a screen-sized quadrilateral tex- 304 tured with the color buffer from the 'over' RT.

EXCERPT #BT9ALW p. 4
  To reduce somewhat the need of the double raycasting, we can compute the Fresnel term from [30] prior to the raycastings at Step 3 as

EXCERPT #X6W24E p. 4
  F = F_0 + (1 - F_0)(1 - \theta)^5, \quad (5)

EXCERPT #HJDV32 p. 4
  Figure 6: Three vertically stacked screenshots showing caustics in a fluid simulation. The top image shows a boat on a wavy, textured fluid surface. The middle image shows a buoy with a net on a similar fluid surface. The bottom image shows a buoy on a fluid surface with a more pronounced, noisy terrain below it. All images show light rays and their resulting caustic patterns on the fluid surface.

EXCERPT #AUQ2SE p. 4
  Figure 6: Caustics in the ground below the fluid surface with planar (boat) and noisy (buoy) terrain.

EXCERPT #RPQRZX p. 4

EXCERPT #9M8MGQ p. 5
  Figure 7: A diagram showing the process of Fresnel composition. It consists of three square images labeled 'Reflections', 'Refractions', and 'Fresnel composition'. The 'Reflections' image shows a boat on water with its reflection. The 'Refractions' image shows the same boat with a distorted, wavy reflection. The 'Fresnel composition' image shows the boat with a smooth, realistic reflection. Below the first two images, arrows point to a circle containing a plus sign (+). From this circle, an arrow points to the 'Fresnel composition' image, indicating that the reflections and refractions are combined using Fresnel's equations.

EXCERPT #Y6HJDK p. 5
  Figure 7: Reflections and refractions are found from the raycasting two different depth maps and finally composed using Fresnel for the final rendering.

EXCERPT #K8FLQ9 p. 5
  being \theta half the angle between the ingoing and outgoing light directions and F_0 the known value of F when \theta = 0 , the reflectance at normal incidence. As we use the value F for a linear interpolation between the refracted and reflected colors, we can impose a threshold \epsilon such as:

EXCERPT #QWWBRC p. 5
  • If F < \epsilon , only the refraction raycasting is executed. • If 1 - F < \epsilon , only the reflection raycasting is done. • Otherwise, both raycastings are done.

EXCERPT #LS79BH p. 5
  Additionally, for zones where the fluid height is quite low, controlled by an user parameter, we get the color from the direct view ray and interpolate from it to the combined color obtained from the previous algorithm, using the depth difference between the fluid and the ground below it. This alleviates some visible artifacts caused by the triangular mesh used for the fluid rendering, as shown in Figure 8.

EXCERPT #NV852B p. 5
  Everything is done in screen-space, so there may be zones where there is not enough information, i.e., a ray should hit a point in space not visible; in those cases we detect the jump in the depth map and make use of the last pixel with information in the texture. Although this is really a problem due to lack of information, it may remain greatly unnoticed with the animated lower scale detail techniques of Section 3.1 and the own movement of the fluid surface.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #F8ATT5 272 5. Screen-space Refraction and reflection

EXCERPT #4LN663 p. 4
  273 Similarly to the caustics approach, we implement refraction 274 and reflection raycasting through depth maps, in the same way 275 of [23].

EXCERPT #QN5J4Q p. 4
  276 For simplicity, we want to be able to use the same raycasting 277 algorithm for both refractions and reflections, so we improve 278 upon previous works by rendering in separate buffers what is 279 above and below the fluid. This allows to, using the same code, 280 just look for ray-depth intersection in the appropriate buffer to 281 obtain the result and do a final composition with both refractions 282 and reflection as needed.

EXCERPT #G9K4AL p. 4
  283 In this case, rays are cast from camera and reflected or re- 284 fracted (or both) when they hit the fluid, as shown in Figure 7.

EXCERPT #ZFS2KC p. 4
  285 Here, we also use a multipass algorithm that can be ex- 286 plained in the following steps, always rendering from camera:

EXCERPT #ZNAM4K p. 4
  287 1. Render the fluid mesh and store the depth buffer. 288 2. Using two render targets (RT) named 'over' and 'below', 289 which will store color and depth, we render the objects of 290 the scene (dynamic objects and ground in this case) and compare the depth with the previously stored. If the 291 depth is greater, the fragment is stored in the 'below' RT, 292 otherwise in the 'over' one. This pass can be thought as a 293 stencil test, which separates what is above o below the 294 fluid surface. 295 3. Render the fluid again, using the RTs. For each fragment 296 of the fluid two rays are cast: one for refraction (using 297 RT 'below'), one for reflection (using RT 'over'). As 298 the rays start from the camera, if the reflected/refracted 299 rays should come back, they are discarded. The results of 300 both raycasts are combined using Schlick's approxi- 301 mation [30] to Fresnel terms for simplicity. 302 4. Finally, to avoid the repeated render of the other objects 303 of the scene, we just use a screen-sized quadrilateral tex- 304 tured with the color buffer from the 'over' RT.

EXCERPT #BT9ALW p. 4
  To reduce somewhat the need of the double raycasting, we can compute the Fresnel term from [30] prior to the raycastings at Step 3 as

EXCERPT #X6W24E p. 4
  F = F_0 + (1 - F_0)(1 - \theta)^5, \quad (5)

EXCERPT #HJDV32 p. 4
  Figure 6: Three vertically stacked screenshots showing caustics in a fluid simulation. The top image shows a boat on a wavy, textured fluid surface. The middle image shows a buoy with a net on a similar fluid surface. The bottom image shows a buoy on a fluid surface with a more pronounced, noisy terrain below it. All images show light rays and their resulting caustic patterns on the fluid surface.

EXCERPT #AUQ2SE p. 4
  Figure 6: Caustics in the ground below the fluid surface with planar (boat) and noisy (buoy) terrain.

EXCERPT #RPQRZX p. 4

EXCERPT #9M8MGQ p. 5
  Figure 7: A diagram showing the process of Fresnel composition. It consists of three square images labeled 'Reflections', 'Refractions', and 'Fresnel composition'. The 'Reflections' image shows a boat on water with its reflection. The 'Refractions' image shows the same boat with a distorted, wavy reflection. The 'Fresnel composition' image shows the boat with a smooth, realistic reflection. Below the first two images, arrows point to a circle containing a plus sign (+). From this circle, an arrow points to the 'Fresnel composition' image, indicating that the reflections and refractions are combined using Fresnel's equations.

EXCERPT #Y6HJDK p. 5
  Figure 7: Reflections and refractions are found from the raycasting two different depth maps and finally composed using Fresnel for the final rendering.

EXCERPT #K8FLQ9 p. 5
  being \theta half the angle between the ingoing and outgoing light directions and F_0 the known value of F when \theta = 0 , the reflectance at normal incidence. As we use the value F for a linear interpolation between the refracted and reflected colors, we can impose a threshold \epsilon such as:

EXCERPT #QWWBRC p. 5
  • If F < \epsilon , only the refraction raycasting is executed. • If 1 - F < \epsilon , only the reflection raycasting is done. • Otherwise, both raycastings are done.

EXCERPT #LS79BH p. 5
  Additionally, for zones where the fluid height is quite low, controlled by an user parameter, we get the color from the direct view ray and interpolate from it to the combined color obtained from the previous algorithm, using the depth difference between the fluid and the ground below it. This alleviates some visible artifacts caused by the triangular mesh used for the fluid rendering, as shown in Figure 8.

EXCERPT #NV852B p. 5
  Everything is done in screen-space, so there may be zones where there is not enough information, i.e., a ray should hit a point in space not visible; in those cases we detect the jump in the depth map and make use of the last pixel with information in the texture. Although this is really a problem due to lack of information, it may remain greatly unnoticed with the animated lower scale detail techniques of Section 3.1 and the own movement of the fluid surface.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #GKHL8Q 6. Results and Discussion

EXCERPT #A3VUS3 p. 5
  We have tested the previous algorithms on an Intel Core2Duo E8400 with 4GB of RAM and a Nvidia GTX280 running Ubuntu 11.10. The resulting averaged timings of the caustics and refraction/reflection algorithms are shown in Table 1, as these are the ones that tax more on the GPU by the use of raycasting.

EXCERPT #5YQTJG p. 5
  An improvement to the normal mapping for lower scale detail technique could be provided by also applying the technique from [9], in which multiple sets of texture coordinates are used and advected, already exploited in [2].

EXCERPT #CRS2MW p. 5
  Figure 8: Two side-by-side images showing a fluid surface. The left image shows a fluid surface with visible triangular mesh artifacts, appearing as sharp, blocky transitions between colors. The right image shows the same fluid surface after interpolation, where the color transitions are smooth and the mesh artifacts are significantly reduced.

EXCERPT #YV7ANN p. 5
  Figure 8: Artifacts from the fluid's triangular mesh on the left, alleviated on the right by interpolating the color value between the fluid's color and the ground color depending on the view distance from surface to ground.

EXCERPT #9UPJVC p. 5

EXCERPT #NKQUNB p. 6
  Viewport Size Caustics Resolution Caustics Refraction & Reflection 512 2 128 2 1.0058 2.74639 256 2 2.35144 2.79409 512 2 7.92134 3.01034 1024 2 51.3408 3.17178 1024 2 128 2 1.2585 5.79334 256 2 3.33537 5.98238 512 2 12.8643 6.21948 1024 2 70.9195 6.53224

EXCERPT #2SR5VL p. 6
  Table 1: Averaged timings in milliseconds for frame for the caustics and refraction/reflection algorithms. The Viewport column indicates the viewport resolution. Similarly, the Caustics Resolution column indicates the size of the viewport used for the orthographic camera, and thus, the number of photons traced.

EXCERPT #GE3XGA p. 6
  The foam simulation from [2] could solve the fixed-size texture restrictions of our current solution, as they simulate foam directly with advected diffuse disks on the fluid surface, although this comes at the additional cost of generating and maintaining these disks on the fly. An alternative we believe would help our foam simulation is the use of a pyramidal texture approach; when particles fall to the fluid they initialize the correct level of the pyramid, being the other levels initialized extrapolating from that one.

EXCERPT #P6Z6YL p. 6
  Nevertheless, the timing results for both these techniques combined, the lower scale detail and the foam advection, never exceed the 2ms mark.

EXCERPT #CLEMXK p. 6
  For the caustics, as shown in Table 1 and concluded in [3], the performance of the caustics algorithm depends primarily on the size of the grid of photons, but in our case also on the direction of the light, which can cause more photons to miss the light space raycast and use the second camera space one, thus increasing the number of computations and texture fetches needed to try to find a final position for them. Also, as the raycasting is done in the vertex shader it is further slowed down because of the increased penalty of texture fetches in that shader stage. Although a direct comparison with [3] is difficult because of the different hardware used, they reported to achieve about 200fps with a 128 2 photon grid, which is the same that saying that each frame costs 5ms to compute. With newer hardware but the dual light and camera space raycasts we propose, the cost of computing caustics is, in our case, below 2ms for the same configuration.

EXCERPT #RDNPJ5 p. 6
  As the number of photons is limited, there may be zones over or undersampled; a hierarchical solution could help to solve this problem as shown in [18, 31], but we would require that it remains highly dynamic, as we are addressing the visualization of a moving fluid. Another thing worth researching would be to extend these caustics, if possible, to volumetric ones as those in [32].

EXCERPT #HHS3QR p. 6
  The performance of the refraction/reflection algorithm is quite variable, it depends on the size of the viewport as well as the coverage of the fluid in screen: the more visible pixels, the more rays are cast. For fair comparison, the results in Table 1

EXCERPT #68CY35 p. 6
  were captured with the fluid covering the whole viewport, and even in this case, the whole algorithm does not cost more than 10ms for a reasonably sized viewport. In perspective, [23] made total internal refraction available although without surface reflection which, in the best case, reported 138fps, i.e., 7.24ms per frame on a Nvidia 8800 GTX, using only one bounce for internal refraction on a viewport of 512 2 . Although our GPU is newer than theirs, in a similar scenario, we achieve less than half their time with both refraction and reflection.

EXCERPT #D9TFQ8 p. 6
  Evidently, the restriction of the refraction/reflection algorithm being a screen-space technique limits how much information is available for such refractions and reflections. The simplest solution to this would be the use of environment maps, but, as the height of the fluid can be quite different across the domain, the position where the environment maps were generated would constrain, and even clip, possible geometry for correct refractions or reflections. Other alternatives should be considered to solve this limitation.

EXCERPT #WMTAAL p. 6
  Both algorithms, caustics and refraction, may also suffer other performance penalties depending on the tessellation of the objects of the scene in question. This is due to the multipass character of the algorithms and the requirement of the rendering of the scene to obtain the depth maps for later raycasting. Although we have not encountered this problem in our tests due to low polygonal complexity, it should be worth having in mind. As a note, the boat model has 300 triangles, the buoy has 11k, the dolphin has 4k and the fluid and the ground have 32k triangles each.

EXCERPT #D98XHG p. 6
  Finally, the particles have just been rendered as billboards using depth and normal replacement with a sphere model. As they represent splashes, we want to maintain their crisp representation so, to improve their appeal, some additional tweaking could be done as applying some noise to their normals or deforming them in the direction they are moving to simulate some motion blur.

EXCERPT #ZYZ6AL p. 6
  Finally, we have only taken into account the visualization of the surface of the fluid, as shown in Figure 9, in the future it should be also a key point to research water rendering as in, e.g., [33], in order to provide a full featured visualization.

DOCUMENT #CWC7H9
Real-time Rendering of Enhanced Shallow Water Fluid Simulations

SECTION #XHMJUD 7. Conclusions

EXCERPT #PBZNNB p. 6
  In this paper we have presented a full pipeline of different algorithms for the rendering of heightfield-based fluid simulations coupled with particles, although the different parts can be applied to other situations as well.

EXCERPT #SJKG3H p. 6
  The complex light-related effects like caustics, refractions and reflections have been addressed using raycasting techniques which ensure a more realistic simulation and the constraint of the algorithms to be in screen-space keeps the quantity of memory used low enough.

EXCERPT #R75U5V p. 6
  Additionally we have applied foam and lower-scale detail by applying textures to the fluid mesh; techniques which are very low demanding in comparison to the previous ones and really help to enhance the final result.

EXCERPT #BZ92A5 p. 6

EXCERPT #5WQA9Z p. 7
  Figure 9: A dolphin underwater. The figure consists of three vertically stacked panels. The top panel shows a wide view of a dolphin swimming in a shallow, rippled body of water. The middle panel is a closer view of the dolphin's back and tail, showing the caustics (light patterns) projected onto its body and the water surface. The bottom panel is a close-up of the dolphin's head and tail, also showing the caustics projected onto its body and the water surface.

EXCERPT #VRWV3E p. 7
  Figure 9: A dolphin underwater. Caustics are generated and projected on the dolphin and the terrain, visible from the surface.

### 27. Tool result: read

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #5HJ8GY Goals

EXCERPT #LQFG2D p. 5
  • Visual – Solve repeating texture artifacts – Flow around obstacles – Vary water speed and bump strength • Technical – Work with existing reflective surfaces – Min hardware ps2.0b (6-year-old hardware) & Xbox 360 • Gameplay...

EXCERPT #STME6L p. 5

EXCERPT #GSJAYC p. 6

EXCERPT #4WDREW p. 6
  A stylized logo featuring a red and blue swirling design, resembling a stylized 'G' or a planet with rings, set against a light blue background with a subtle glow.

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #BUH4MD Technical Constraints

EXCERPT #AD9WTG p. 7
  • Already at perf limits on the Xbox 360 & low-end PC • Already at memory limits on the Xbox 360 • Our water shader had limited instructions left for our low end hardware ps2.0b

EXCERPT #N8K4VQ p. 7

EXCERPT #DDK9GV p. 8

EXCERPT #ENJN4T p. 8
  The logo for SIGGRAPH 2010, featuring a stylized 'G' in red and blue with a white ring, set against a light blue background. SIGGRAPH 2010 logo featuring a stylized red and blue 'G' with a white ring.

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #NNERGL Algorithm Overview

EXCERPT #6ELMAT p. 8
  • Pixel shader flow, not geometric flow • Continue to use a normal map for water ripples • Artists author a flow map (a texture containing 2D flow vectors) • Use this flow map in a pixel shader to distort the normal map in the direction of flow

EXCERPT #977FCV p. 8
  A square texture showing a blue and purple wavy pattern, representing a normal map for water ripples. A square texture showing a blue and purple wavy pattern, representing a normal map for water ripples.

EXCERPT #5K4MFQ p. 8
  A square texture showing a green and yellow pattern with red and orange accents, representing a flow map containing 2D flow vectors. A square texture showing a green and yellow pattern with red and orange accents, representing a flow map containing 2D flow vectors.

EXCERPT #ERLNNN p. 8

EXCERPT #B8BNWW p. 9

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #FSZCV9 Flow Vectors on Water Surface

EXCERPT #MBBCES p. 28
  The SIGGRAPH logo, featuring a stylized red and blue sphere with a white ring, set against a blue background. SIGGRAPH logo

EXCERPT #RV72TR p. 28
  A 3D visualization of flow vectors on a water surface. The water surface is colored with a gradient from red (high velocity) to green (low velocity). The flow is directed towards a central structure, which is a dark, rectangular block. The surrounding area is a light gray, suggesting a tiled floor or wall. The flow vectors are represented by small arrows on the water surface, indicating the direction and magnitude of the flow. 3D visualization of flow vectors on a water surface

EXCERPT #PXVEN5 p. 28
  Flow Texture

EXCERPT #QHE69A p. 28
  A 2D visualization of flow texture. The image shows a color-coded map of the flow field, with red indicating high velocity and green indicating low velocity. The flow is directed towards a central structure, which is a dark, rectangular block. The surrounding area is a light gray, suggesting a tiled floor or wall. The flow texture is represented by a color gradient, indicating the direction and magnitude of the flow. 2D visualization of flow texture

EXCERPT #S4R8XK p. 28

EXCERPT #76CZDV p. 29

SECTION #MSJZHP Single Layer Normal Distortion

EXCERPT #CK4CX6 p. 29
  The SIGGRAPH logo, featuring a stylized, colorful sphere with red, blue, and white segments, surrounded by a glowing blue ring. SIGGRAPH logo

EXCERPT #2GWAT3 p. 29
  Flow Vectors

EXCERPT #BSC87W p. 29
  A small inset image showing a 3D visualization of flow vectors. The scene is a simplified version of the main image, with a blue floor and a black cube. The floor is covered with a color gradient from red to green, representing the magnitude of the flow vectors. The black cube is positioned in the center of the floor. Flow Vectors visualization

EXCERPT #2SHKD2 p. 29

EXCERPT #AYZSK8 p. 30

SECTION #4R3LNF Double Layer Normal Distortion

EXCERPT #C4BAPF p. 30
  The SIGGRAPH logo, featuring a stylized red and blue sphere with a white ring, set against a blue and white background. SIGGRAPH logo

EXCERPT #9B5Z8X p. 30
  Flow Vectors

EXCERPT #YJ3DMV p. 30
  A small inset image showing a 3D visualization of flow vectors. The scene includes a blue cube and a larger black structure on a blue surface. The flow vectors are represented by a color gradient from red to green, indicating the direction and magnitude of the flow. Flow Vectors visualization

EXCERPT #PQUU7D p. 30

EXCERPT #8PK4YP p. 31

EXCERPT #C97L23 p. 31
  The Valve logo, featuring a stylized 'V' with red and blue curved lines and a blue glow at the bottom. Valve logo

SECTION #TM3D3G Two Major Problems

EXCERPT #3RS3P5 p. 31
  • Repetition – The same normals will flow through the same point on the mesh • Pulsing – The surface appears to pulse in a repeating pattern

EXCERPT #6R724A p. 31

EXCERPT #37RM62 p. 32

SECTION #5D5MEZ Repetition Visualization Single Layer

EXCERPT #ZSLCBM p. 32
  The SIGGRAPH 2010 logo, featuring a stylized globe with red, white, and blue curved lines representing the Earth's latitude and longitude, set against a light blue background. SIGGRAPH 2010 logo

EXCERPT #7M5ECH p. 32
  Flow Vectors

EXCERPT #JRHD7B p. 32
  A small 3D visualization showing flow vectors on a surface. The surface is colored with a gradient from red to green, and a small black cube is placed on it. The flow vectors are represented by small red arrows pointing in various directions. Flow Vectors visualization

EXCERPT #KH5H5V p. 32
  Normal Map

EXCERPT #6LP2ZL p. 32
  A small 3D visualization showing a normal map. The surface is colored with a gradient from red to green, and a small black cube is placed on it. The normal map is represented by a small red dot on the surface. Normal Map visualization

EXCERPT #GD86C6 p. 32
  The Valve logo, consisting of the word "VALVE" in a bold, sans-serif font, with a registered trademark symbol (®) to the right. Valve logo

EXCERPT #6M789A p. 32
  A large 3D visualization showing a single layer of repetition. The surface is covered in a dense, repeating pattern of red and blue dots. A small black cube is placed on the surface. The background shows a dark, textured wall and a dark floor. Main 3D visualization

EXCERPT #8F4H85 p. 33

SECTION #GNJ65S Double Layer

EXCERPT #JWEHCY p. 33
  The SIGGRAPH logo, featuring a stylized red and blue sphere with a white ring around it, set against a white background. SIGGRAPH logo

EXCERPT #MN7TKK p. 33
  Flow Vectors

EXCERPT #BYVT2C p. 33
  A 3D visualization of flow vectors on a blue surface. The surface is covered with a dense field of small, red, arrow-like shapes representing the direction and magnitude of the flow. The flow appears to be moving away from a central point towards the edges of the surface. Flow Vectors visualization

EXCERPT #P2ZUBT p. 33
  Normal Map

EXCERPT #X66QGZ p. 33
  A 2D visualization of a normal map. The map shows a blue surface with a single, prominent red dot in the center, indicating a point of high normal magnitude or a specific feature. Normal Map visualization

EXCERPT #ATM825 p. 33
  The VALVE logo, consisting of the word "VALVE" in a bold, sans-serif font, enclosed in a black rectangular border. VALVE logo

EXCERPT #SE2GVT p. 33
  A large 3D visualization of a "Double Layer" simulation. The main area is a blue, textured surface with a dense field of red, arrow-like shapes representing flow vectors. The surface is surrounded by a dark, grid-like structure, possibly representing a container or a boundary. The overall scene is rendered in a high-quality, realistic style. Double Layer visualization

EXCERPT #HEDCEW p. 34

SECTION #EV6QMX Double Layer With Offset

EXCERPT #VCEEKF p. 34
  The SIGGRAPH logo, featuring a stylized red and blue sphere with a white ring, set against a light blue background. SIGGRAPH logo

EXCERPT #NRAJMT p. 34
  Flow Vectors

EXCERPT #KE7RHF p. 34
  A visualization of flow vectors on a 2D plane. The plane is colored with a gradient from red to green. A small black cube is positioned on the plane. The flow vectors are represented by small red arrows pointing outwards from the cube. Flow Vectors visualization

EXCERPT #2K5FDX p. 34
  Normal Map

EXCERPT #XW3HPA p. 34
  A visualization of a normal map. The plane is colored with a gradient from blue to red. A small red circle is positioned on the plane, representing the normal vector at that point. Normal Map visualization

EXCERPT #R5P6BY p. 34

EXCERPT #ZVH2QB p. 35

SECTION #3U8Q7Z Repetition Solved by Offset

EXCERPT #PB99VD p. 35
  The SIGGRAPH logo, featuring a stylized, colorful sphere with red, blue, and white segments, surrounded by a glowing blue ring. SIGGRAPH logo

EXCERPT #YCKEYC p. 35
  Flow Vectors

EXCERPT #5XRTEQ p. 35
  A small inset image showing a 3D visualization of flow vectors. The scene is a simplified version of the main image, with a blue floor and a small black cube. The floor is covered with a dense field of small, colorful arrows (vectors) pointing in various directions, indicating the flow of a fluid or gas. The colors range from red to green. Flow Vectors visualization

EXCERPT #UNZ7NS p. 35

EXCERPT #7L2KWT p. 36

EXCERPT #8XYNGY p. 36
  The logo for SIGGRAPH 2010, featuring a stylized sphere with red and blue curved lines and a white ring, set against a blue and white background. SIGGRAPH 2010 logo featuring a stylized red and blue sphere with a white ring.

SECTION #K34TNN Pulsing Solved by Noise

EXCERPT #2BYUR7 p. 36
  A 3D rendering of a dark, industrial interior space. In the center, there is a large, dark, rectangular object with some glowing elements on top. In the foreground, there is a smaller, dark, rectangular object. The floor is covered in a dense, noisy texture. The walls are made of dark, rectangular panels. A 3D rendering of a dark, industrial interior space with a large, dark, rectangular object in the center and a smaller, dark, rectangular object in the foreground. The floor is covered in a dense, noisy texture.

EXCERPT #SDLEXC p. 36
  Noise Texture

EXCERPT #VGYXUE p. 36
  A close-up view of a noisy texture, showing a dense, granular pattern of black and white pixels. A close-up view of a noisy texture, showing a dense, granular pattern of black and white pixels.

EXCERPT #57Y9HW p. 36

SECTION #BZ44HW Pulsing Solved by Noise

EXCERPT #77BT6P p. 37
  SIGGRAPH2010

EXCERPT #MXSPS5 p. 37
  The SIGGRAPH 2010 logo, featuring a stylized red and blue sphere with a white ring, set against a blue and white background. SIGGRAPH 2010 logo

EXCERPT #UKREEG p. 37
  Flow Vectors

EXCERPT #AVK9NA p. 37
  A visualization of flow vectors in a pool, showing a color gradient from red to green. The red area is near the source of the flow, and the green area is further away. The flow vectors are represented by small arrows pointing in the direction of the flow. Flow Vectors visualization

EXCERPT #77HQ8S p. 37
  Noise Texture

EXCERPT #FTKERQ p. 37
  A visualization of a noise texture in a pool, showing a grayscale gradient. The texture is applied to the water surface, creating a realistic, rippling effect. The texture is represented by a small, dark, rectangular area. Noise Texture visualization

EXCERPT #P6X9UA p. 37
  The VALVE logo, featuring the word "VALVE" in a bold, sans-serif font, with a registered trademark symbol (®) to the right. VALVE logo

EXCERPT #NU8WP4 p. 38

EXCERPT #4L7YH4 p. 38
  SIGGRAPH 2010 logo featuring a stylized 'G' with red and blue swirls.

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #XAMC76 Water Speed Affects Normals

EXCERPT #6HNB2U p. 38
  We scale down the strength of the normal in tangent space by the flow speed (Flow speed is the length of the 2D flow vector)

EXCERPT #UGWBRU p. 38
  Diagram illustrating the scaling of normals based on flow speed. A semi-circle represents the tangent space. A vertical black arrow is labeled 'Flat Normal'. A blue arrow is labeled 'Normal'. A black arrow pointing towards the arc is labeled 'Strong Normal'.

EXCERPT #YLWABH p. 38
  Three square panels showing the visual effect of normal scaling. The left panel is a solid blue color. The middle panel shows a noisy blue texture. The right panel shows a highly detailed, noisy blue texture with many small, colorful variations.

EXCERPT #QFMEW3 p. 38

EXCERPT #YMHZN3 p. 39

EXCERPT #ZZLXJJ p. 39
  A stylized logo featuring a red and blue swirling design, resembling a stylized 'G' or a sphere with a ring, set against a light blue background with a subtle glow.

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #SGLQV7 Performance

EXCERPT #CEVQ5Y p. 39
  Compared to scrolling two normal maps:

EXCERPT #DR7GKY p. 39
  • Additional texture fetches: 2 - flow & noise • Additional arithmetic pixel shader instructions: 21

EXCERPT #B3C838 p. 39

EXCERPT #LS5BSH p. 40

EXCERPT #RV87MP p. 40
  The logo for SIGGRAPH 2010, featuring a stylized 'G' composed of red and blue rings, with a blue glow effect. SIGGRAPH 2010 logo featuring a stylized 'G' with red and blue rings.

DOCUMENT #A2QB8L
Water Flow in Portal 2

SECTION #5ZZUA3 Summary

EXCERPT #XVFV3N p. 52
  • Use an artist-authored flow map • Flow the normals in two layers and combine • Use noise to reduce pulsing artifact • Offset each phase of animation to reduce repetition • Flowing debris uses an offset distortion range that favors less distortion than the normal flow

EXCERPT #VVUN64 p. 52

EXCERPT #WX3Y6Y p. 53

EXCERPT #25NJGB p. 53
  The logo for SIGGRAPH 2010, featuring a stylized 'G' composed of red and blue rings, with a blue glow effect at the bottom. SIGGRAPH 2010 logo featuring a stylized 'G' with red and blue rings.

EXCERPT #Q98JC3 p. 53
  Thank You!

EXCERPT #E5X22F p. 53
  Water textures created by Alireza Razmpoosh

EXCERPT #WV2F3J p. 53
  Alex Vlachos, Valve

EXCERPT #3L4DBH p. 53
  alex@valvesoftware.com

EXCERPT #95YXB6 p. 53

### 28. Tool result: read

DOCUMENT #MVUJ8Z
Real-time Rendering of River Networks

SECTION #BTQCB6 Real-time Rendering of River Networks

EXCERPT #ES58WB p. 0
  Quintijn Hendrickx 1

EXCERPT #DS2GBE p. 0
  Ruben Smelik 2

EXCERPT #GR3M84 p. 0
  Rafael Bidarra 1

EXCERPT #FSE8AH p. 0
  1 Computer Graphics & CAD/CAM Group, Delft University of Technology, The Netherlands

EXCERPT #9K2ZLQ p. 0
  2 Modelling, Simulation & Gaming Department, TNO Defence, Security and Safety, The Netherlands

EXCERPT #DN3EV8 p. 0
  Figure 1 consists of three panels. Panel (a) is a diagram of a blue river curve. A point (u, v) = (d, L+t) is marked on the curve. The distance from the point to the curve is labeled d . The width of the river is labeled d < \text{width} / 2 and d > \text{width} / 2 . Panel (b) shows a black and white checkerboard texture mapped onto a curved surface. Panel (c) shows a final rendered image of water flowing through a river, with a blue sky and green grass visible in the background. Figure 1: (a) Projection onto a river curve, (b) texture mapping on Bézier curves, (c) final result: water flowing through a river.

EXCERPT #8SJAPG p. 0
  Figure 1: (a) Projection onto a river curve, (b) texture mapping on Bézier curves, (c) final result: water flowing through a river

EXCERPT #4LPXG4 p. 0
  Realistic rendering of water bodies such as rivers and oceans has proven to be one of the most difficult challenges in computer graphics. This challenge can be split into two main problems: simulating the movement of water and simulating the optical properties of water. This poster focuses on the problem of simulating water movement in complex river networks with various kinds of junctions.

EXCERPT #BLMDAJ p. 0
  Different solutions have already been proposed that vary widely in level of realism versus applicability in real-time systems. Recent work includes several different kinds of particle systems, such as a screen-space particle system [Yu et al. 2009] and an optimized three dimensional particle system [Kipfer and Westermann 2006]. Particle systems are an intuitive approach for simulating water flow but often require large amounts of memory and computation power.

EXCERPT #QGESFA p. 0
  This poster presents an efficient technique for real-time rendering of complex river networks without using any kind of particle system. Instead, Bézier curves and streaming normal maps are used to simulate the flow of water through rivers. The curves represent the geometric features (path and width) of a river. Multiple quadratic Bézier curve segments are linked together to create more complex river curves and junctions.

EXCERPT #MSQQ8G p. 0
  A commonly used method to visualize Bézier curves is to sample along the curve at a fixed rate, and then tessellate these samples into a geometric structure. However, to achieve smooth results, many samples are needed, resulting in a high vertex count. Because this is often not desirable in real-time rendering, we render the Bézier curves with bounding quads using only four vertices per curve. An implicitly defined distance field is used to project each pixel in the quad onto the nearest point on the curve. Using only quadratic order Bézier curves allows us to define the distance field as a function of the Bézier control points, which does not require any iterative algorithms. As a result this function is, due to its parallel nature, particularly suited for being evaluated on the GPU. Because of the low vertex count, no LOD techniques are necessary for large scale river networks, and rendering performance depends mostly on the total surface of visible water in screen-space.

EXCERPT #QGGCCR p. 0
  The distance d to the corresponding projected pixel and the arc length L along the curve are calculated as shown in Figure 1a. The distance from the pixel to the curve is used to discard pixels that are not within the boundaries of the river. This results in an accurate

EXCERPT #M78ELM p. 0
  and smooth curve rendered with only a very small number of vertices. Calculating the arc length along the Bézier curve allows us to map a texture onto the river surface. Adding a time-dependent offset t to this mapping will smoothly stream the texture along the curve.

EXCERPT #KNWKGF p. 0
  Traditional tessellation methods for Bézier curves are typically unsuitable for junctions of curves. The produced geometry for each curve segment would overlap and not allow for complex blending between curves. Our method is able to visualize complex junctions by grouping overlapping segments into a single larger bounding quad. Each pixel in this quad will be projected onto all of the river segments. If a pixel maps onto multiple curves the final result will be interpolated based on the distance to these curves. Figure 1b shows the result of mapping a texture on a series of linked Bézier curves with a simple junction.

EXCERPT #77YYHN p. 0
  This technique has been implemented as an extension to the open source osgOcean nodekit [osgOcean], which is part of OpenSceneGraph . See Figure 1c for a still of the achieved effect, and the demo clip at http://graphics.tudelft.nl/~ruben/rivernetworks.wmv for a better impression. Currently there is no smooth transition between the rivers and the ocean water of osgOcean , but this is an important goal for future work.

EXCERPT #AV243P p. 0
  In conclusion, the use of Bézier curves to model and render river networks has proven to be an efficient method to produce convincing results of flowing water in complex environments.

### 29. Tool result: read

DOCUMENT #869NHK
Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning

SECTION #2BJMND ABSTRACT

EXCERPT #KFWVK3 p. 1
  We introduce an efficient method for emulating sea foam dissipation suitable for use in real-time interactive environments such as video games. By using a pre-computed dither array with controlled spectral characteristics adopted from halftone research as a control mechanism in the pixel shader, we can animate the appearance of foam bubbles popping in a random manner while allowing them to clump naturally.

DOCUMENT #869NHK
Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning

SECTION #UQWEYD Overview of Our Approach

EXCERPT #TPP4FZ p. 1
  To generate foam on the surface of the water using a foam saturation function, we must create the water surface as a mesh. Each location on the water's surface has a calculable saturation value using this function. The function must vary over time for the foam to animate and become more and less dense as waves pass and change. In figure 1 we see that by applying halftoning methods to a saturation function, we take an otherwise smooth area of the function and create the randomness expected when foam generates and dissipates. Halftone

EXCERPT #7BPBWS p. 1
  Figure 1: Two side-by-side images of a water surface with foam. The left image shows a smooth, continuous foam texture. The right image shows the same foam texture but with a halftone effect applied, resulting in a noisy, random appearance where the foam is represented by white pixels on a dark background.

EXCERPT #FST6V3 p. 1
  Figure 1: By replacing the application of a foam texture with a white tone we see that applying our method creates randomness on the right in the otherwise smooth saturation results pictured on the left.

EXCERPT #KBFASW p. 1
  masks , or dither arrays , are arrays of values that have a one-to-one correspondence with pixels in an image, or in our application, a texture. Each value of the halftone mask is used as a threshold against the corresponding texture pixel to produce a binary output image that indicates, at each pixel position, whether the texture falls above or below the threshold. This process is commonly referred to as thresholding . Halftone masks are characterized by the binary pattern that results when thresholded against a constant image, or texture. Choosing threshold value values at each mask position is non-trivial. Ulichney [8] provides a classic study of mask design and describes widely used metrics, based on the Fourier Transform, to characterize masks by their radially averaged power spectrum (RAPS), a measure of energy at different frequency bands, and anisotropy, a measure of radial symmetry. While halftoning can be accomplished with a variety of computational methods, we restrict ourselves to the use of masks because, as point operations, they are computationally efficient and naturally suited to pixel shader operations.

EXCERPT #28T3KN p. 2
  We depart from the traditional use of halftoning in printing and image display, which seeks to reduce visually objectionable noise in image reproduction, and instead we use a halftone mask to add noise. We draw on recent work in halftone mask design by observing that it is possible to design masks to produce lumping binary patterns which are reminiscent of the clumping of sea foam. We also observe that the binary nature of the threshold output is well-suited to simulate foam bubble popping when the mask is fixed per frame but the underlying image is not. In this work, we present a novel way to use halftone masks in conjunction with a saturation function and a texture to simulate foam and the popping behavior of foam. Further, we observe that the difference between the threshold value and an image or a texture provides a magnitude at each pixel position that we use as a transparency value for additional realism.

EXCERPT #6UU8DD p. 2
  We use halftone masks that have been generated using a symmetric Gaussian function to filter white noise as described in Alford and Sheppard [1]. Gaussian filtering applies a two-dimensional Gaussian function to an image. \sigma is a value in the Gaussian function that denotes the width of the curve in the function; as \sigma increases, the width of the curve increases.

EXCERPT #5X456S p. 2
  We simulate the effect of foam bubbles popping by finding the saturation of foam on the water's surface and applying a precomputed halftone mask to it. We use a modified version of the vertex shader outlined in a paper by Van Dresek III, Bookout, and Lake [9] to create parametric waves upon which to apply our foam. The next two sections will describe the saturation function and the halftone mask in more detail.

SECTION #Z6PB8R The Saturation Function

EXCERPT #LK9GMP p. 2
  Kryachko [4] uses the following foam saturation function which is dependent on ocean height. H_0 is base height, H is height, and H_{\max} is height where foam is

EXCERPT #44XR6L p. 2
  maximum.

EXCERPT #VRG2JB p. 2
  f(x) = \frac{H - H_0}{H_{\max} - H_0}

EXCERPT #NNZ3GW p. 2
  Figure 2: A 3D visualization of a blue ocean surface with white foam. The foam is distributed in a symmetric, wave-like pattern, representing the result of applying Kryachko's saturation function to a wave texture.

EXCERPT #Q2GL7H p. 2
  Figure 2: Foam with Kryachko's saturation function.

EXCERPT #3R3SWW p. 2
  Although Kryachko's function achieves somewhat attractive results (see Figure 2 for example), the function results in a symmetric foam distribution, whereas we wish to model foam that is created by turbulence at the front of the wave and fades away behind it. Knowing the target foam density along the wave shape, we chose to apply e^{\tan(x)} to the same vector and frequency used to determine wave shape.

EXCERPT #FKYVST p. 2
  Figure 3: A graph showing the function e^{tan(x)} (black line) and sin(x) (red line) plotted against x. The x-axis ranges from -8 to 8, and the y-axis ranges from -2 to 12. The black line shows sharp, periodic peaks that increase exponentially, while the red line shows a smooth, periodic sine wave oscillating between -1 and 1.

EXCERPT #K9KEU9 p. 2
  Figure 3: e^{\tan(x)}, \sin(x)

EXCERPT #XFF5YH p. 2
  We use the following formulae from Van Dresek III, Bookout, and Lake [9] for the height y of the wave:

EXCERPT #ALZMSD p. 2
  \begin{aligned} y &= A((\sin(\theta(x, z)) + 1)/2)^K \\ \theta(\vec{v}) &= (\vec{v} \cdot \vec{k})2\pi/\lambda_{adj} + \phi t \\ \phi &= 2s\pi/\lambda, \end{aligned}

EXCERPT #4FBCAT p. 2
  and so we use \theta(\vec{v}) to also generate the periodic function.

EXCERPT #22A67D p. 2
  f(\vec{v}) = e^{-\tan((\vec{v} \cdot \vec{k})2\pi/\lambda_{adj} + \phi t)},

EXCERPT #4EFZBU p. 2
  where \vec{v} = (x, z) is position, \vec{k} is the wave direction, s is the speed of the wave, t is time, K is wave slope, A is wave amplitude, \lambda_{adj} is wavelength adjusted for ocean depth, and \lambda is original wavelength.

EXCERPT #3JN5XA p. 2
  Since we are overlaying this function on the sine function that determines wave shape, we need to modify the formula slightly to align the foam with the waves. In

EXCERPT #DEW3J2 p. 3
  Figure 3 we see that e^{\tan(x)} is twice as frequent as \sin(x) , so we divide \theta(x, z) by 2. Also to align the highest part of our function with the front part of the sine wave we add \pi/2 . Our final formula is as follows, and gives a attractive saturation of foam starting at the wave front and fading behind it.

EXCERPT #4XPCC4 p. 3
  f(x) = (e^{-\tan((\vec{v} \cdot \mathbf{k})\pi/\lambda_{adj} + \phi t/2) + \pi/2})/C,

EXCERPT #ZN885Z p. 3
  where C is a user defined constant that governs the intensity of the foam. (We use C = 4 for convenience, but this value may be tuned by the designer.)

EXCERPT #5DSU3A p. 3
  Saturation is computed as follows. Adjwavelength, and phaseC are calculated in the vertex shader and the values are interpolated for use in the pixel shader.

EXCERPT #AK9APL p. 3
  float getmysaturation(float2 wavedirection, float2 xzposition, float Adjwavelength, float phaseC) { float result = dot(wavedirection, xzposition) *6.28f/Adjwavelength; result = result + phaseC*gTimeNow; result = pow(2.718f,-1.0f* tan((result/2.0f)+ 1.07f))/4.0f; return result; }

EXCERPT #VKWK33 p. 3
  To pass values from the vertex shader we simply define an extra variable in the vertex output with a TEXCOORD semantic. Then the vertex shader sets the required values as follows:

EXCERPT #2N29AM p. 3
  struct VertexOutput { ... float4 impVars : TEXCOORD4; } VertexOutput VS(...) { VertexOutput OUT = (VertexOutput)0; ... OUT.impVars[1]=adjustedWavelength; OUT.impVars[0]=phaseConstant; OUT.impVars[2] = Po[0]; //xposition OUT.impVars[3] = Po[2]; //zposition } float4 PS(VertexOutput IN) : COLOR { float saturated=getmysaturation (direction, float2(IN.impVars[2], IN.impVars[3]), IN.impVars[1], IN.impVars[0]); ... }

SECTION #4HFS63 The Halftone Mask

EXCERPT #EY7JNC p. 3
  We use a halftone mask to threshold the saturation function to create dissipation through bubble popping. As

EXCERPT #PUFAWP p. 3
  saturation decreases over time at a specific location, the value will approach and pass the threshold used in our mask. While the saturation value is above the threshold, the foam will be present, but as time passes and the value decreases, eventually the foam will pop and disappear. Since bubbles in foam clump, we must choose a halftone mask that produces clumps in the resulting dot patterns. Clumpiness, or clustering, can be seen in how close together some of the foam is while in other areas there are gaps.

EXCERPT #J8TYVT p. 3
  Alford and Sheppard [1] show a variety of halftone masks created using radially symmetric Gaussian filters. We used their masks created using filters having \sigma ranging from 1.5 to 24 to produce the images in Figure 4 column 1. In Figure 4 we can see that the higher the \sigma , the closer together some of the dots are. By analyzing the RAPS we see that as \sigma increases, first oscillation is dampened in the high frequencies, then the values of the high frequency region is greatly reduced (Alford and Sheppard [1]). The results of this can be seen in the increased clustering and clumping behavior of the dot patterns. We found \sigma = 24 gives adequate visual clusters of foam.

EXCERPT #KTD8VB p. 3
  Figure 4: Halftone masks created by Gaussian filters. The figure consists of three rows, each showing a square dot pattern on the left and a corresponding RAPS (Radially Anisotropic Power Spectrum) plot on the right. Row (a) is for sigma = 1.5, showing a dense, somewhat uniform dot pattern and a RAPS plot with a sharp peak at low frequencies and significant oscillations at higher frequencies. Row (b) is for sigma = 6, showing a dot pattern with more visible clustering and a RAPS plot where the high-frequency oscillations are dampened. Row (c) is for sigma = 24, showing a dot pattern with very large, distinct clusters of dots and a RAPS plot where the high-frequency content is almost entirely suppressed, leaving a smooth curve that decays from the low-frequency peak.

EXCERPT #UQWJBT p. 3
  Figure 4: Halftone masks created by Gaussian filters having \sigma ranging from 1.5 to 24, with corresponding RAPS (images courtesy Alford and Sheppard [1]).

SECTION #J3EGSN Applying the Mask

EXCERPT #KJ6JRV p. 4
  To create the halftoned saturation function h(u, v) where u, v are texture coordinates and h(u, v) is a float4 RGBA color value at that position, we first create a texture to contain the mask information so that the data can be imported into the pixel shader. Given a 512 \times 512 halftone mask, a 512 \times 512 pixel texture is generated. This texture, when tiled across the surface of the water, has a corresponding u, v texture coordinate for each \vec{v} = (x, z) position on the water. The mask value m(u, v) can then be used to threshold the saturation function f(x, z) as follows:

EXCERPT #4AMNVS p. 4
  h(u, v) = \begin{cases} (0, 0, 0, 1) & \text{if } f(x, z) \leq m(u, v) \\ (1, 1, 1, 1) & \text{if } f(x, z) > m(u, v) \end{cases} \quad (1)

EXCERPT #KQKYZN p. 4
  Figure 5: Two side-by-side images showing the result of applying Equation 1 to the saturation function. The left image shows a smooth, continuous coastline with a dark blue sea and a light blue sky. The right image shows the same coastline but with a halftone pattern applied, where the water surface is covered in small, dark dots, creating a textured effect.

EXCERPT #YAGHQP p. 4
  Figure 5: Applying Equation 1 to the saturation function at left gives the image at right.

EXCERPT #43GRQJ p. 4
  We can then create a fading halftoned saturation function, g(u, v) , so the dots fade before they pop. We do this by taking the difference between saturation and mask number. Figure 1 shows the results of applying halftoning with fading to the saturation function.

EXCERPT #2CAQS2 p. 4
  g(u, v) = \begin{cases} (0, 0, 0, 1) & \text{if } f(x, z) \leq m(u, v) \\ \text{clamp}(f(u, v)/2 - m(u, v), 0, 1) & \text{if } f(x, z) > m(u, v) \end{cases} \quad (2)

EXCERPT #QSQQXG p. 4
  Finally we apply t(u, v) , the foam texture to generate the final halftoned, textured, and faded image j(u, v) .

EXCERPT #HTU2QM p. 4
  j(u, v) = \begin{cases} (0, 0, 0, 1) & \text{if } f(x, z) \leq m(u, v) \\ \text{clamp}(f(u, v)/2 - m(u, v), 0, 1)t(u, v) & \text{if } f(x, z) > m(u, v) \end{cases} \quad (3)

EXCERPT #UMWYB5 p. 4
  Figure 6: A coastline image generated using the new halftoning method. The image shows a dark blue sea with a white, textured foam pattern along the coastline, set against a dark, textured background representing the land.

EXCERPT #EA6P4C p. 4
  Figure 6: Coastline image using our new halftoning method, Equation 3.

EXCERPT #F5B6NV p. 4
  Given a sampler for the halftone mask texture, MaskSampler; a sampler for the foam texture, SAMP_FoamTexture; and a sampler for the water surface texture, SAMP_WaterTexture; the following code finds the resulting color for the water's surface. The higher TEXscale or MASKscale is, the smaller the tiled texture will appear. A value of 400 for MASKscale gives suitably sized dots when using a 512 \times 512 pixel mask.

EXCERPT #9T3QXA p. 4
  //get water and foam texture color float4 textureSamp = tex2D( SAMP_WaterTexture, IN.TexCoord1*TEXscale); float4 foamSamp = tex2D( SAMP_FoamTexture, IN.TexCoord1*TEXscale); //get the threshold from the mask float masknumber=(tex2Dlod( MaskSampler, float4(IN.TexCoord1.xy *MASKscale, 0, 0))); //threshold the saturation value if (!((saturated)>(masknumber))){ foamSamp[0] = 0; foamSamp[1] = 0; foamSamp[2] = 0; } //find the value for fading the foam float difference = clamp(saturated - masknumber, 0.15f, 3.0f); //get the final foam value foamSamp = difference * foamSamp; //add the value to the water texture //and clamp to a valid color float4 result =clamp((textureSamp+ foamSamp),0,1); result[3] = 1.0f;

DOCUMENT #869NHK
Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning

SECTION #LP9TTY Results

EXCERPT #G92CUW p. 5
  Figure 7(a) shows the traditional method of fading a foam texture according to a saturation function, similar to Kryachko [4]. Figure 7(b) shows the saturation halftoned using Equation 1 and no other functions applied. This method shows a realistic popping effect, but the foam is too harsh and white. Figure 7(c) shows our halftoning method in combination with a foam texture using Equation 3.

EXCERPT #A34FYE p. 5
  Figure 7(a): A 3D rendering of a coastal scene with waves. The foam on the waves is faded using a traditional saturation function, appearing somewhat flat and less detailed.

EXCERPT #DQB6F2 p. 5
  (a) Using a foam texture.

EXCERPT #DJB8DM p. 5
  Figure 7(b): A 3D rendering of the same coastal scene. The foam is halftoned using a saturation function, resulting in a very bright, high-contrast, and somewhat harsh appearance.

EXCERPT #EXJ2C5 p. 5
  (b) Using a halftone mask to determine foam location.

EXCERPT #Q3DQPR p. 5
  Figure 7(c): A 3D rendering of the same coastal scene. The foam is halftoned using a halftone mask in combination with a foam texture, resulting in a more realistic and detailed appearance with visible popping effects.

EXCERPT #74H6C2 p. 5
  (c) Using a halftone mask with a foam texture.

EXCERPT #NJND9W p. 5
  Figure 7: The results of using 3 different methods with the same settings (heightmap, wave speed, direction, and amplitude).

EXCERPT #QPWUQS p. 5
  Graphics Card Textured Halftoned NVidia 8800 65.5fps 65.0fps NVidia GeForce GT320m 80.4fps 78.2fps Intel HD Graphics 3000 85.0fps 84.5fps

EXCERPT #BYFSD5 p. 5
  Table 1: Comparison of rendering frame rates in frames per second (fps).

EXCERPT #28MCER p. 5
  Figure 8: A wide-angle 3D rendering of a coastal scene with waves and a rocky shore. This scene is used for measuring frame rates.

EXCERPT #FE57LN p. 5
  Figure 8: Scene used for measuring frame rates.

EXCERPT #V5XDSY p. 5
  We performed some experiments to obtain a preliminary benchmark for the extra computation load required by our new halftoning technique (Figure 7(c)) to the traditional texturing technique (Figure 7(a)). We ran both algorithms for five minutes using NVidia Composer, using FRAPS to measure average frames-per-second. The scene rendered in all experiments is shown in Figure 8. The results are shown in Table 1. We conclude that the extra load on the video appears to be less than 3% higher than traditional texture-fading techniques, which is negligible.

EXCERPT #RMEZSJ p. 5
  Still pictures such as shown in Figure 7 and Figure 8 do not adequately capture the full effect of our algorithm. Figure 9 shows how foam bubbles fade and pop over time in the wake of each wave. This can be seen to best advantage in an animation such as the one we have placed online at [10].

EXCERPT #TL2J64 p. 5
  Figure 9: A close-up view of foam bubbles fading and popping over time, showing the dynamic behavior of the foam texture.

EXCERPT #HHHXGW p. 5
  Figure 9: Close up view of foam bubbles fading and popping over time.

DOCUMENT #869NHK
Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning

SECTION #7FYCN5 Conclusion and Further Work

EXCERPT #89YMZ6 p. 6
  Not only does our halftoning technique achieve our goal of simulating foam dissipation in a real-time environment, but it also can be applied with little additional cost to traditional texture based methods that obtain foam saturation at the water's surface. The saturation function used must vary over time for the bubble popping effect to occur using the halftoning method.

EXCERPT #TTAQFA p. 6
  Our method currently produces pixelation at close range to the camera. One method for remedying this would be a second pass of a pixel shader to smooth the edges of the generated texture, which we leave as future work.

### 30. Tool result: read

DOCUMENT #5MGCZ5
Real-time River Representation by Dynamic Control of Data on Waves

SECTION #RNRNU8 Real-time River Representation by Dynamic Control of Data on Waves

EXCERPT #4EWFDT p. 0
  正会員 向井信彦 † , 加藤康寛 † , 正会員 小杉 信 †

EXCERPT #GPYN6Q p. 0
  Nobuhiko Mukai † , Yasuhiro Kato † and Makoto Kosugi †

EXCERPT #H2E2UR p. 0
  Abstract We describe a method of using computer graphics to represent the flow of a river in real-time. As rivers are usually narrow and long, the water surface can be seen in detail only in the near view, but it cannot be seen as clearly from a distance. Therefore, the level of water wave model should be dynamically changed on the basis of the distance from the viewpoint. In the near view, the water wave and the reflection at the riverbank can be seen, but this is impossible from the far view. However, the changes in direction of the wave caused by wind can be seen even in the far view. We also propose a method of generating patterns of waves caused by wind. We applied our method to simulations of a landscape and clarified the behavior of a river in real-time.

EXCERPT #PWH5RK p. 0
  キーワード: コンピュータグラフィックス, リアルタイム処理, LOD (Level Of Detail), 河川

SECTION #5WKN5L 1. ま え が き

EXCERPT #D33KFX p. 0
  近年, コンピュータグラフィックス (CG) を用いて様々なものが可視化されるようになってきた。従来, 木や雲などの自然物は CG で表現するには適さないとされてきたが, 近年では自然物に関する研究もかなり進んでいる。自然物の中でも特に表現が難しいとされているものに水の表現がある。固体のように輪郭がはっきりした物質であるにも関わらず, 気体のように自由に形を変える点が CG での表現を困難にしている理由の一つでもある。水の表現にはかなりの計算量を必要とするため, 米国 Chesapeake 湾のシミュレーションに SGI 社の Power Challenge というスーパーコンピュータをアレイ状にして使用した報告例がある 1) 。日本においても海洋開発の事前検証として 3 次元 NS(Navier-Stokes) 方程式を用いた手法 2) や, 3 次元多層モデルを用いた手法 3) でシミュレーションを行っている。ただし, これらの手法は流体の挙動シミュレーションが目的であり, 可視化を目的としたものではない。

EXCERPT #HU8TQ7 p. 0
  一方, CG を用いて流体を可視化する手法の研究も行われており, 水面のモデルを作りながら粒子により水飛沫を表現する手法 4) , 粒子の生成と水面形状を生成するレベルセット法をうまく組合せることにより, 水中を物

EXCERPT #FQAYDC p. 0
  体が移動する状況を表現する手法 5) などがある。しかしながら, これらはいずれも粒子法 6)7) を用いて小容量の流体を可視化するもので, 川のように大規模な流体を可視化するものではない。

EXCERPT #HZSPT4 p. 0
  川のような大規模な流体を可視化するためには, 大量の粒子を扱う必要があり, 高速な処理が行えない。そこで, 粒子数を減らす代わりに粒子を包含する面を生成することと, GPU の高速処理能力を活かすことで川の表現を行っている研究 8) もある。また, 視点からの距離に応じて対象領域のメッシュ精度を制御する LOD 手法を用いて高速化を図る研究 9) もある。しかしながら, これらの研究でも, 風により変化する波や川岸での反射表現はできていない。そこで本稿では, 川幅に対して流れ方向に長いという川の特徴を考慮して, 視点からの距離に応じて対象領域を自動分割し, 従来の LOD 法とは異なる手法, つまり各領域における波の形状モデルを変更するという手法で, 川の流れをリアルタイムに表現する方法について述べる 10) 。

SECTION #L93Z8G 2. 河 川 の 分 類

EXCERPT #6A4T79 p. 0
  河川は上流と下流に大別され, 上流の流れは滝の水飛沫や溪流における急な流れがあるため乱流とも呼ばれる。これに対して, 下流の表面はほぼ一様であり穏やかな流れをしていることから層流とも呼ばれる。上流では広範囲に渡って川の流れを観察することが少ない反面, 水飛沫等の複雑な流れが存在するため, 粒子法による表現が適している。一方, 下流における川の流れは一般に穏やかであるが, 穏やかな流れの中にも波による水面のゆら

EXCERPT #AN9MDD p. 0
  2008 年 3 月, 映像情報メディア学会研究会にて発表

EXCERPT #62WD2L p. 0
  2008 年 7 月 15 日受付, 2008 年 9 月 19 日最終受付, 2008 年 10 月 1 日採録

EXCERPT #D7SY2F p. 0
  † 武蔵工業大学 大学院 工学研究科

EXCERPT #U72UVS p. 0
  (〒 158-8557 世田谷区玉堤 1-28-1, TEL 03-3703-3111)

EXCERPT #H6XS8Y p. 0
  † Graduate School of Engineering, Musashi Institute of Technology (1-28-1, Tamazutsumi, Setagaya, Tokyo 158-8557, Japan)

EXCERPT #AFZ2UT p. 0

EXCERPT #TBLXFZ p. 0

EXCERPT #JV9WLF p. 1
  めきや川岸における波の反射,あるいは風による波の方向変化が観測される。また,川幅に対して流れ方向に長く,視点からの距離に応じて観察される波の質は異なる。そこで本研究では,下流における川の流れを対象とし,以下の項目を盛り込んで河川のリアルタイム表示を試みる。

EXCERPT #C6VN4T p. 1
  1) 視点からの距離に応じて河川の自動領域分割 2) 水面波の物理モデル 3) 川岸における波の反射表現 4) 風による波の変化

SECTION #U848H3 3. 河川の自動領域分割

EXCERPT #8EXLLM p. 1
  視点からの距離に応じて河川を領域分割し,領域毎に川のモデルを切換える。木を例に取ると,視覚対象は視点からの距離に応じて次の3領域に分割できる 11) 。

EXCERPT #EPTHTG p. 1
  近距離景 樹木の葉や幹,あるいは枝が識別可能で,対象物を視野角 1^\circ で捉えられる距離。 中距離景 樹木の識別は可能だが,葉や幹などの識別は困難で,対象物を視野角 0.05^\circ で捉えられる距離。 遠距離景 樹木の識別も困難で,物体同士の遠近は物体の重なりで判断する距離。

EXCERPT #UFR3PK p. 1
  上記領域区分は,識別対象物の絶対的な大きさに依存せずに距離景を定義する手法であるため,河川にも適用可能であると考える。河川の場合,識別対象物体は波であるから波長を基に距離景を定義する。図1で示すように,視点の位置を Q ,視点 Q の水面からの高さを h ,視点 Q からの鉛直線と水面との交点を O ,視線と水面との交点を P ,線分 OP の長さを d ,水面波の波長を L とすると,次式(1)が成立する。ここで, d が正であることを考慮すれば,視点直下の点 O からの距離 d と視野角 \theta の関係は次式(2)で計算できる。式(2)において, \theta = 1.0^\circ とすれば近距離景と中距離景との境界点までの距離が,また, \theta = 0.05^\circ とすれば中距離景と遠距離景との境界点までの距離が求められる。

EXCERPT #YKWW5Q p. 1
  \begin{aligned}\tan \theta &= \tan(\beta - \alpha) = \frac{\tan \beta - \tan \alpha}{1 + \tan \beta \tan \alpha} \\ &= \frac{\frac{h}{d-L} - \frac{h}{d}}{1 + \frac{h}{d-L} \cdot \frac{h}{d}} = \frac{hL}{d(d-L) + h^2}\end{aligned}\quad (1)

EXCERPT #Z4P4ZV p. 1
  Figure 1: A geometric diagram showing the relationship between the distance from the viewpoint (Q) to the water surface (O), the height of the viewpoint (h), the distance from O to the point of observation (P) (d), and the viewing angle (theta). The diagram also shows the wave length (L) and the angles alpha and beta.

EXCERPT #P7JDA2 p. 1
  図1 視点からの距離と視野角の関係 Relation between length from viewpoint and view angle.

EXCERPT #UFLH6V p. 1
  d = \frac{L \tan \theta + \sqrt{L^2 \tan^2 \theta - 4 \tan \theta (h^2 \tan \theta - hL)}}{2 \tan \theta} \quad (2)

SECTION #7TBW6W 4. 水面波の生成

SECTION #7L3GHL 4.1 水面波の物理モデル

EXCERPT #HBX6M7 p. 1
  本稿では,下流における比較的穏やかな水面波を対象とするため,波は規則波と仮定し,微小振幅波の理論 12) を適用する。つまり,水深に比べて波高が充分小さいとき,流速 C ,波長 L ,および周期 T の関係は次式(3)となり,式(3)を用いて流速 C を計算することができる。ただし, g は重力加速度である。

EXCERPT #3NNLEC p. 1
  C = \frac{gT}{2\pi}, \quad L = \frac{gT^2}{2\pi}, \quad C = \frac{L}{T} \quad (3)

EXCERPT #A3H78W p. 1
  一般に規則的な水面波は余弦波として近似されることも多いが,波は重力や表面張力などの影響により,余弦波に比べると,山が急で谷がなだらかな特性を持つ。このため,図2に示すように余弦波よりもストークス波を用いた方が近似性能はよい 12) 。ストークス波は余弦波の合成として次式(4)で表現されるため,計算時間は多少かかるが本研究では,近距離景の水面波をストークス波で近似し,波の高さを計算する。

EXCERPT #3R5YFD p. 1
  \begin{aligned}z &= A \cos\left\{\frac{2\pi}{L}(x - Ct)\right\} + \frac{\pi A^2}{L} \cos\left\{\frac{4\pi}{L}(x - Ct)\right\} \\ &\quad + \frac{3\pi^2 A^3}{2L^2} \cos\left\{\frac{6\pi}{L}(x - Ct)\right\} \\ A &= \frac{H}{2} \left(1 - \frac{3\pi^3 H^2}{8L^2}\right)\end{aligned}\quad (4)

EXCERPT #ETMUEY p. 1
  ここで, x は水面波の進行方向における位置, t は時刻, z は川底からの水面波の高さ, H は波高(波の振幅)であり, C と L は上記のとおり,流速と波長である。

SECTION #2GQ78Y 4.2 川岸での反射表現

EXCERPT #G5RKF5 p. 1
  水面波は川岸で反射し,入力波と反射波が重なり合うため,複雑な波を生成する。川岸での反射は自由端反射であるから,図3に示すように,水面波と同位相で反対方向に進む仮想波を考え,水面波と仮想波を合成することにより,川岸での反射波を表現することができる。

EXCERPT #775ASQ p. 1
  Figure 2: A graph comparing a cosine wave (余弦波) and a Stokes wave (ストークス波). The Stokes wave is shown as a more complex, asymmetric wave compared to the simple cosine wave.

EXCERPT #867L75 p. 1
  図2 余弦波とストークス波の比較 Comparison between cosin wave and stokes wave.

EXCERPT #JSVLQD p. 1

EXCERPT #5RLVCP p. 1

EXCERPT #J4FNF5 p. 2
  Figure 3: Reflection at the riverbank. A diagram showing a riverbank (川岸) and the reflection of a water wave. The vertical axis is Z, and the horizontal axis is X. A solid line represents the water surface wave (水面波), a dashed line represents the reflected wave (仮想波), and a dotted line represents the synthesized wave (合成波(反射波)). Arrows indicate the direction of wave propagation (水面波の進行方向) and the riverbank (川岸).

EXCERPT #2H7Z58 p. 2
  図3 川岸での反射 Reflection at the riverbank.

EXCERPT #FXB5K4 p. 2
  Figure 4: Relation between water wave and wind direction. A diagram showing a coordinate system with X and Y axes. A point (x0, y0) is marked. A line m passes through the origin O. The angle between the X-axis and the line m is theta. The wind direction (風向き) is indicated by an arrow. The wave propagation direction (水面波の進行方向) is also indicated.

EXCERPT #KZZWPK p. 2
  図4 水面波と風向きの関係 Relation between water wave and wind direction.

SECTION #PN4DGU 4.3 風による波の変化

EXCERPT #KMNNY2 p. 2
  水面波の進行方向は風により時々刻々と変化するため、厳密には風のモデルを検討して水面波に適用する必要がある。しかしながら、風の物理モデルは確立されていないため、本研究では風により生成される波としての風波を近似的に考える。風波もストークス波による近似が最適と思われるが、風の影響は遠距離でも観察されること、また本研究では、リアルタイム表現を目的としていることから、風波はストークス波ではなく、余弦波としてモデル化する。図4に示すように、 x 軸の正方向に水面波が進行し、 x 軸と \theta の傾きを持つ方向から風が吹いていると仮定する。 H を波高、 L を波長、 C を流速、 x を水面波の進行方向における位置、 t を時刻とすると、水面波は次式(5)で近似的に表現できる。

EXCERPT #F4ZD6E p. 2
  z = \frac{H}{2} \cos\left\{\frac{2\pi}{L}(x - Ct)\right\} \quad (5)

EXCERPT #CJYTFT p. 2
  図4において、風向きに直交し原点 o を通過する直線 m は次式(6)となるから、任意の点 (x_0, y_0) の直線 m からの距離 e は次式(7)となる。したがって、直線 m からの距離 e を風波の位相と考え、風向きが水面波の進行方向と逆向きであることを考慮すれば、風波は次式(8)となる。

EXCERPT #7PAX76 p. 2
  x \cos \theta + y \sin \theta = 0 \quad (6)

EXCERPT #P4W89D p. 2
  e = |x_0 \cos \theta + y_0 \sin \theta| \quad (7)

EXCERPT #WQEFDB p. 2
  z(x, y, t) = \frac{H}{2} \cos\left\{\frac{2\pi}{L}(x - Ct + e)\right\} \\ = \frac{H}{2} \cos\left\{\frac{2\pi}{L}(x - Ct + |x \cos \theta + y \sin \theta|)\right\} \quad (8)

EXCERPT #ZJ7R3B p. 2
  最後に、風向きは時々刻々と変化するため、変化前の風向きに対する位相 e と変化後の風向きに対する位相 e' を考へて、変化前後における風波の式を線形補間することにより、任意の時刻における風波を表現することができ

EXCERPT #N3AEZV p. 2
  表1 分割された領域と適用モデルの関係 Relation between divided area and applied model.

EXCERPT #EYM9N6 p. 2
  領域 近距離景 中距離景 遠距離景 水面波モデル ストークス波 余弦波 余弦波 波の流速計算 あり あり なし 波の高さ計算 あり なし なし 川岸の反射波 あり なし なし 風の影響 あり あり あり

EXCERPT #YTY3BJ p. 2
  表2 シミュレーションで使した PC 性能 Performance of the PC used on the simulation.

EXCERPT #GPKEB9 p. 2
  CPU Intel Core2 Duo 2.13GHz Memory 2GB Graphics Card NVIDIA GeForce 7300 LE OS Microsoft Windows XP Professional Language Microsoft Visual C++ 6.0 Graphics Library OpenGL 1.5

EXCERPT #ASNEB8 p. 2
  る。また、風力の大きさを波高 H に反映させることにより、波の振幅を変更することも可能である。なお、近距離景の場合、式(4)に対して上記位相 e を考慮することで、風により変化する波の表現が可能となる。

SECTION #M8MFLM 5. シミュレーション結果

EXCERPT #6PE2J2 p. 2
  上記手法を適用して、河川のリアルタイム表現を試みた。分割された各領域と適用したモデルの関係を表1に示す。近距離景は最も詳細なモデル、遠距離景は最も粗なモデル、中距離景は中間のモデルとなるが、流速の変化に基づく川の流れ変化は視認性が良いため、中距離景は遠距離景に流速計算を加えたモデルとする。ただし、風の影響は遠方でも視認できるため、全モデルに適用する。また、中および遠距離景では波の高さを計算せず、余弦波で描れる法線ベクトルを擬似的に与えるバンパマッピング法を用いる。風の影響も同様で、水面波の変化を法線ベクトルに反映する。さらに、可視化前の法線ベクトルに 1/f ノイズを加えて自然な流れを表現する。表2に本シミュレーションで使したPCの性能を示す。なお、本手法では波の波形計算後、風の影響やノイズの付加を考慮しており、高速化のためのテーブルが必要がある。また、CPUとGPUとの負荷分散を考慮して、波の形状計算までをCPU、レンダリング以降をGPUで行っている。

EXCERPT #VP3CSQ p. 2
  図5に本手法による川の表現結果を示す。近距離景は最も詳細なモデルであるため、波の変化が明確に表現されている。一方、中距離景では波の高さを求めているため、水面は平面となるが、流速計算はしているため、波の模様は表現できている。これに対して、遠距離景では単なるバンパマッピング法による表現であるため、波の視認性は悪い。しかしながら、視点からの距離に応じて自動分割された各領域にモデルを適用すると、全体としての川はほぼ違和感なく表現されている。図5による静止画だけでは判別困難であるが、風向の変化に対して全領域で自然な水面波の変化が観察できる。

EXCERPT #UYAESX p. 2
  最後に、本手法をCGで作成した景観に適用した例を

EXCERPT #JN895D p. 2

EXCERPT #R74W9J p. 2

EXCERPT #PZGZA5 p. 3
  Figure 5: Area division and river presentation. (a) Far distance view, (b) Middle distance view, (c) Near distance view. (d) Overall view of the river with flow direction and wind direction indicated.

EXCERPT #RECMVN p. 3
  図5 領域分割と川の表現

EXCERPT #4C68AM p. 3
  Area division and river presentation.

EXCERPT #RVTCXT p. 3
  Figure 6: River representation in landscape. A perspective view of a river flowing through a landscape with buildings and trees.

EXCERPT #7BBZBP p. 3
  図6 景観における川の表現

EXCERPT #3WX2M5 p. 3
  River representation in landscape.

EXCERPT #26QLGQ p. 3
  図6に示す。近距離景では水面波の様子だけでなく、川岸での反射も表現できている。図6で使用したポリゴン数は、近距離景1,840、中距離景8,820、遠距離景9,340であり、川以外の表示物として92,000ポリゴンを使用している。表示時間を測定したところ、総合計112,000ポリゴンの表示物に対して、表示速度は37fpsであった。なお本結果では、遠距離ほどポリゴン数が多くなっている。これは、領域分割を行った結果、遠距離ほど川の領域が長くなったためである。しかしながら、視点からの距離に応じてメッシュの精度を制御するLOD手法 9) の適用によりさらなる高速化は可能である。ただし、メッシュサイズを大きくし過ぎると、波の形状を再現できない可能性があり、LOD手法の適用には注意が必要である。また、ポリゴン数を変えて性能測定した結果、モデル切換えによる性能向上は1Kポリゴンの川で約8%、12Kポリゴンの川で約96%（ほぼ倍の性能）となった。

SECTION #VTDT2R 6. む す び

EXCERPT #NZWBLN p. 3
  本研究では、横幅が短く流れ方向に長いという川の特徴を活かして、視点からの距離に応じて視覚対象領域を自動で分割し、分割された各領域に対して水面波のモデルを切換えることにより、視点からの画質を保ちながら高速な可視化を試みた。シミュレーションの結果、近距離景はストークス波という詳細なモデルを用い、流速や

EXCERPT #8K5WQG p. 3
  高さ計算と共に、川岸での反射も考慮しているため、かなり詳細な表現が可能となっている。これに対して、中距離景や遠距離景では徐々にモデルのレベルを下げることでより高速化を試みた。各領域を単独で観察すると画質の違いは認識できるものの、これらの領域を結合し、風の影響を全領域に及ぼすことで、領域の境界はほとんど認識できなくなった。なお本方式では、視点からの距離に応じて各領域の境界を自動的に決定しているため、視点の変化とともに、各領域のポリゴン数は動的に変化し、結果としてリアルタイム表現が可能となっている。今後、メッシュの精度を制御するLOD手法を用いたさらなる高速化と、水面への映り込みや水面に浮かぶ物体の屈折をリアルタイムに表現する手法の検討を行う予定である。

SECTION #8J7SVY 〔文 献〕

EXCERPT #K2HLHE p. 3
  1) G. H. Wheelless, C. M. Lascara, A. Valle-Levinson, D. P. Brutzman, W. Sherman, W. L. Hibbard, and B. E. Paul, "Virtual Chesapeake Bay: Interacting with a Coupled Physical/Biological Model", IEEE Computer Graphics and Applications, 16 , 4, pp. 52-57 (1996) 2) 野澤和男, 豊岡大志, "大阪湾における超大型海洋構造物周りの海水流動シミュレーションと海水交換評価法", 関西造船協会論文集, 235 , pp.183-190 (2001) 3) 野澤和男, 豊岡大志, 竹岡一樹, "閉鎖性内湾における海水流動シミュレーションの応用と考察", 関西造船協会論文集, 240 , pp.189-195 (2003) 4) J. F. O'Brien, J. K. Hodgins, "Dynamic Simulation of Splashing Fluids", Computer Animation 95, pp. 198-205 (1995) 5) N. Foster and R. Fedkiw, "Practical Animation of Liquids", Proc. of SIGGRAPH 2001, pp.23-30 (2001) 6) 越塚誠一, "粒子法による流れの数値解析", ながれ 21 , pp. 230-239 (2002) 7) S. Premoze, T. Tasdizen, J. Bigler, A. Lefohn and R. T. Whitaker, "Particle-Based Simulation of Fluids", Computer Graphics Forum, 22 , 3, pp. 401-410 (2003) 8) P. Kipfer and R. Westermann, "Realistic and Interactive Simulation of Rivers", Graphics Interface 2006, pp.41-48 (2006) 9) D. Hinsinger, F. Neyret and M. P. Cani, "Interactive Animation of Ocean Waves", Proc. of the 2002 ACM SIGGRAPH/Eurographics symposium on Computer animation, pp.161-166 (2002) 10) 加藤康寛, 向井信彦, 小杉信, "河川の downstream における水面波のリアルタイム表現", 映像情報誌, 32 , 18 , pp.41-44 (2008) 11) 樋口忠彦, "景観の構造-ランドスケープとしての日本の空間", 技報堂 (1975) 12) 堀川清司, "海岸工学", 東京大学出版会 (1991)

EXCERPT #77HBTD p. 3
  Portrait of Masahito Maki (向井 信彦).

EXCERPT #X6XRDX p. 3
  向井 信彦 1985年、大阪大学大学院基礎工学研究科博士前期課程了。同年三菱電機(株)入社。1997年、 Cornell大学大学院コンピュータサイエンス学科修士課程了。2001年、大阪大学大学院基礎工学研究科博士後期課程了(工学博士)。2002年、武蔵工業大学工学部助教授。2007年、同大学知識工学部教授。CG、VR等の研究に従事。正会員。

EXCERPT #FM68RG p. 3
  Portrait of Masahito Maki (加藤 康寛).

EXCERPT #CTGXQN p. 3
  加藤 康寛 2006年、武蔵工業大学工学部卒業。2008年、同大学大学院工学研究科博士前期課程了。同年、(株)プレミアムエージェンシー入社。コンピュータグラフィックスに関する開発立案に従事。

EXCERPT #2SQ7HK p. 3
  Portrait of Masahito Maki (小杉 信).

EXCERPT #9G6MEJ p. 3
  小杉 信 1970年、東京工業大学大学院修士課程了。同年日本電信電話公社(現NTT)入社。1980年、東京工業大学より博士号取得(工学博士)。同年西ドイツ郵電省研究所客員研究員。1994年、武蔵工業大学工学部教授。2007年、同大学知識工学部教授。画像処理、CG等の研究に従事。正会員。

EXCERPT #2EKNMJ p. 3

EXCERPT #Q4JHN5 p. 3

### 31. Assistant tool calls

#### Tool call: `write_note`

```json
{
  "block_ids": [
    "4S5XNT",
    "CZNWCP",
    "8KBMFE",
    "T9Y2PR",
    "3UZ7TP",
    "AL6YQ9",
    "DZCPD6",
    "KSH8JS",
    "6ELMAT",
    "XVFV3N",
    "KHRCTA",
    "XFKY8Q",
    "BVUXWL",
    "PBZNNB",
    "G3TYUA",
    "YJNSYU",
    "RFLQDX",
    "764D8D",
    "WKY9MT",
    "YWWZAM",
    "KFWVK3",
    "V5XDSY",
    "QGESFA",
    "MSQQ8G",
    "H2E2UR",
    "EYM9N6"
  ],
  "text": "The water-rendering corpus organizes around a recurring hybrid strategy: simulate only the low-frequency/structural behavior needed for motion, then add high-frequency visual detail and optical cues cheaply. The survey separates deep-water parametric/spectral methods from shallow-water fluid methods and identifies foam, spray, and light interaction as separate realism layers (#4S5XNT, #CZNWCP). River methods use coarse or procedural velocity fields plus advected wave textures: Arnold et al. combine 2D Navier–Stokes, hydrostatic pressure columns, and texture advection (#8KBMFE, #T9Y2PR); Yu et al. compute local steady flow and use screen-space sampled wave sprites for huge terrains (#3UZ7TP, #AL6YQ9); their later Lagrangian texture-advection method uses deformable particle grids to preserve both flow and texture spectrum (#DZCPD6, #KSH8JS). Vlachos's Portal 2 production method is the cheapest end of this continuum: artist-authored flow maps distort two normal-map layers, with offsets and noise hiding repetition/pulsing (#6ELMAT, #XVFV3N). Shallow-water work adds effects a height field cannot express: Thürey et al. detect steep fronts and spawn connected-particle sheets for overturning waves, drops, and foam (#KHRCTA, #XFKY8Q); Ojeda and Susín layer FFT/noise normals, advected foam, photon caustics, and screen-space reflection/refraction over a shallow-water simulation (#BVUXWL, #PBZNNB). Scherzer et al. target fully dynamic particle fluids, using screen-space depth/thickness layers, adaptive curvature-flow smoothing, and Weber-number-based volumetric foam (#G3TYUA, #YJNSYU). Surface Wavelets is the strongest large-scale wave paper: it simulates slowly varying amplitudes over space/frequency/direction on a coarse grid, reconstructs detailed waves separately, supports obstacles and artistic control, and runs a 4 km × 4 km scene at 60 fps (#RFLQDX, #764D8D, #WKY9MT); it cannot handle breaking waves or splashes because it is linear (#YWWZAM). Specialized cheap methods include halftone-mask foam dissipation with under 3% overhead (#KFWVK3, #V5XDSY), Bézier-curve river networks with streaming normal maps (#QGESFA, #MSQQ8G), and distance-dependent switching among Stokes, cosine, and bump-mapped wave models (#H2E2UR, #EYM9N6).",
  "title": "Water-rendering literature overview"
}
```

### 32. Tool result: write_note

NOTE SAVED #4CB2WQ
IRI: https://m.sheaf.less.rest/4CB2WQ

### 33. Assistant

## Big picture

The papers converge on one main idea: **real-time water rendering is usually hybrid**. Rather than simulate every visible ripple, bubble, and reflection physically, systems:

1. compute a simplified large-scale flow or wave field;
2. add small-scale detail through advected textures, normal maps, particles, or procedural waves;
3. add optical effects—foam, reflection, refraction, and caustics—as separate rendering layers.

The survey gives the clearest taxonomy: spectral and parametric models work well for large, deep water; fluid solvers are needed near shores and for breaking waves; foam, spray, and lighting form a separate rendering problem (Darles et al. 2011, #4S5XNT, #CZNWCP).

## The main papers

### 1. Best general introduction: ocean simulation survey

**Darles et al., _A Survey of Ocean Simulation and Rendering Techniques_** #C4AY2M

This is the starting point. It distinguishes:

- **Spatial/parametric waves:** fast and controllable, but often too smooth.
- **Spectral/FFT waves:** statistically convincing and responsive to wind, but harder to art-direct.
- **Shallow-water and Navier–Stokes methods:** support shores and breaking waves, but cost much more.
- **Hybrid methods:** combine coarse simulation with particles or procedural detail.

Its central conclusion is that no representation handles every scale and phenomenon well; realistic systems need multiple models working together (#PVRUXS, #GYQ8RM, #TQKH86).

---

### 2. Large-scale rivers

**Arnold et al., _Advected River Textures_** #WZMZGY

This combines a 2D Navier–Stokes solver with hydrostatic-pressure columns, giving the simulation some awareness of depth and terrain. An animated wave texture is then transported through the resulting velocity field.

It captures recognizable river behaviour—speed changes, bends, eddies, shallow areas, and underwater obstacles—without a full 3D simulation (#8KBMFE, #J6H8Z3). The reported performance is 60–120 fps, although the surface remains essentially planar and lacks proper waterfalls or volumetric spray (#9579Z9, #5KXFKW).

**Bruneton et al., _Scalable Real-Time Animation of Rivers_** #XDESU9

This is more explicitly designed for enormous virtual landscapes. It computes a local procedural velocity field from river boundaries, junctions, and obstacles, then carries wave sprites using particles distributed uniformly in **screen space**. Consequently, effort is spent only on visible water and automatically adapts to viewing distance (#3UZ7TP, #AL6YQ9).

It was tested on a $25 \times 25\ \mathrm{km}^2$ environment. Its weakness is that the water is still rendered as a flat, bump-mapped surface, causing problems at grazing angles and near banks (#EUX776, #YTDJGS).

**Hendrickx et al., _Real-Time Rendering of River Networks_** #MVUJ8Z

This is a short, highly economical approach. Rivers are represented by linked quadratic Bézier curves, rendered through bounding quads and implicit distance fields. Streaming normal maps create apparent motion (#QGESFA, #MSQQ8G).

It is useful when the goal is to render a large procedural river network cheaply—not to simulate hydraulics.

---

### 3. Moving fine detail without texture distortion

**Yu et al., _Lagrangian Texture Advection_** #92XRH7

A major problem with flowing textures is cumulative stretching. This method attaches deformable textured grids to moving particles. Grids that become too distorted are removed and replaced, with temporal blending hiding transitions (#DZCPD6, #5NUUD9).

Its important conceptual contribution is separating two quality criteria:

- the animated texture’s **optical flow** should match the fluid velocity;
- its **Fourier spectrum** should remain similar to the original texture.

The method performs well for ripples, foam, bubbles, froth, debris, and noise, but poorly for textures with large regular structures (#KSH8JS, #KUHHUL). This is one of the most relevant papers if the thesis needs flow-following surface detail.

---

### 4. Production-oriented game rendering

**Vlachos, _Water Flow in Portal 2_** #A2QB8L

This is the most pragmatic paper. It performs no geometric fluid simulation. Artists author a 2D flow map, and a pixel shader uses it to distort normal maps in the direction of flow (#6ELMAT).

Two animated normal layers are combined; phase offsets hide repetition, while noise hides visible pulsing. The same mechanism can transport debris (#3RS3P5, #XVFV3N). It was designed under severe Xbox 360 and low-end-PC constraints.

The paper is valuable because it demonstrates that **controlled visual plausibility can matter more than physical accuracy**, especially when water mainly needs to communicate direction and speed.

---

### 5. Large-scale waves with local interaction

**Jeschke et al., _Water Surface Wavelets_** #PBM2TC

This is the most technically ambitious large-scale paper. Instead of simulating the detailed water height directly, it simulates slowly varying amplitudes indexed by space, frequency, and direction. Detailed wave heights are reconstructed separately on an adaptively tessellated surface (#RFLQDX, #764D8D).

This decouples simulation resolution from visible wave resolution. The paper demonstrates a $4 \times 4\ \mathrm{km}^2$ sea with islands, boats, wakes, and interaction at 60 fps (#WKY9MT). It also includes unusually strong artistic control: users can tune the spectrum or directly paint wave amplitudes (#ZJSEMQ, #SJ3UQ2).

The limitation is fundamental: it uses linear wave theory, so it cannot directly represent breaking waves, splashes, or topology changes (#YWWZAM). It is excellent where **large scale, fine waves, obstacles, and art direction** matter more than fully nonlinear water.

---

### 6. Breaking waves and shallow water

**Thürey et al., _Real-Time Breaking Waves for Shallow Water Simulations_** #8SERGP

A normal shallow-water height field cannot overturn. This paper detects steep wave fronts, tracks them as lines, and spawns connected particle sheets that form breaking-wave geometry. When these sheets hit the surface, they generate drops and foam (#KHRCTA, #4DZ999).

This is a clever hybrid: the cheap height field handles the bulk water while extra geometry is introduced only where breaking occurs. Reported examples run at 40–75 fps (#RTYCL9).

It works for coherent, large breaking waves—such as beach waves—but not chaotic water containing many small splashes, and it does not transport water mass completely correctly (#TAFHNN, #VNWSER).

---

### 7. Rendering a shallow-water simulation

**Ojeda and Susín, _Real-Time Rendering of Enhanced Shallow Water Fluid Simulations_** #CWC7H9

This paper is more about the **rendering pipeline** than the underlying simulation. It layers:

- FFT- or noise-generated normal maps;
- advected surface foam;
- photon-based caustics;
- screen-space reflection and refraction;
- Fresnel composition.

(#BVUXWL, #PBZNNB)

The fine detail and foam together cost under 2 ms in its tests, while the optical effects are more expensive (#P6Z6YL). Its main weakness is shared by screen-space rendering generally: it cannot reflect or refract geometry absent from the current buffers (#NV852B, #D9TFQ8).

---

### 8. Dynamic particle water and volumetric foam

**Scherzer et al., _A Layered Particle-Based Fluid Model for Real-Time Rendering of Water_** #RBS5K6

This starts from an SPH particle simulation. Particle depths are splatted into screen-space buffers and smoothed into a continuous surface. Separate depth and thickness layers represent water and foam, while foam formation is triggered using a Weber-number criterion (#G3TYUA, #VLHP44).

It is particularly suited to waterfalls, turbulent flows, and water moving among objects. Its contribution is not just white foam placed on top of water: the layered method permits foam to appear within and beneath the water volume. Rendering took roughly 15–17 ms in its test scenes, excluding simulation (#EAGE8Z, #YJNSYU).

---

### 9. Cheap specialized effects

**Parberry et al., _Very Fast Real-Time Ocean Wave Foam Rendering Using Halftoning_** #869NHK

A precomputed halftone mask thresholds a changing foam-saturation field. This makes foam disappear in clustered, bubble-like patterns instead of fading uniformly (#KFWVK3, #28T3KN). The added cost was reported as under 3%, but it pixelates at close range (#V5XDSY, #TTAQFA).

**Kosugi et al., _Real-Time River Representation by Dynamic Control of Data on Waves_** #5MGCZ5

This switches water models according to viewing distance:

- Stokes waves and bank reflection nearby;
- simpler cosine waves at medium distance;
- bump mapping in the distance;
- wind effects at every level.

(#H2E2UR, #EYM9N6)

This is an early but clear example of **perceptual level of detail**: retain the effects viewers can see and simplify everything else.

## Overall interpretation

The literature is less a progression toward one perfect water model than a collection of solutions for different visual regimes:

| Requirement | Most relevant approach |
|---|---|
| Huge ocean with detailed waves | Surface wavelets / spectral waves |
| Large terrain-scale rivers | Procedural flow plus texture advection |
| Cheap game water | Artist-authored flow maps and normal maps |
| Breaking shore waves | Shallow-water solver plus particle sheets |
| Waterfalls and turbulent volumes | SPH particles plus screen-space reconstruction |
| Foam and spray | Particles, advected textures, or procedural masks |
| Reflections, refraction, caustics | Screen-space multipass rendering |

The strongest shared principle is: **simulate structure, synthesize detail, and allocate computation according to visual importance**. That principle connects the highly physical papers to the very practical *Portal 2* method.

For a focused reading order, I would use:

1. Darles et al. survey #C4AY2M  
2. Bruneton et al. rivers #XDESU9  
3. Yu et al. texture advection #92XRH7  
4. *Water Surface Wavelets* #PBM2TC  
5. *Water Flow in Portal 2* #A2QB8L  
6. Thürey et al. breaking waves #8SERGP  

I saved this synthesis as research note #4CB2WQ.

### 34. User

i have procedural terrain with geological eroded rivers/streams/lakes and ocean, and i'm making a game, i want it to look nice and beautiful but not necessarily super realistic. i have quite some info about the water bodies from calculating the streams and stuff

### 35. Assistant

That setup strongly favors a **data-driven, stylized hybrid renderer**: use your hydrology data to control motion and appearance, but avoid a full fluid simulation. I’m checking the procedural-riverscape material for which generated attributes can transfer directly into rendering.

#### Tool call: `get_document`

```json
{
  "id": "AK7NGE"
}
```

#### Tool call: `get_document`

```json
{
  "id": "DMTA8Y"
}
```

#### Tool call: `search_text`

```json
{
  "document_id": "AK7NGE",
  "limit": 10,
  "query": "flow rate width depth velocity river rendering"
}
```

#### Tool call: `search_text`

```json
{
  "document_id": "DMTA8Y",
  "limit": 10,
  "query": "flow rate width depth velocity river rendering"
}
```

#### Tool call: `search_text`

```json
{
  "document_id": "XDESU9",
  "limit": 10,
  "query": "flow rate flow direction channel boundaries obstacles wave textures"
}
```

### 36. Tool result: get_document

DOCUMENT #AK7NGE
Title: Procedural Riverscapes

Outline:
  - 1 #JJE8HN Procedural Riverscapes
    - 1.1 #VZP285 Abstract
    - 1.2 #RMH5XA 1. Introduction
    - 1.3 #SGDELU 2. Related Work
      - 1.3.1 #CXNLWG 2.1. Riverbed Generation
      - 1.3.2 #37RBCG 2.2. Water Animation
    - 1.4 #FF5JSX 3. Workflow
    - 1.5 #Z6DVCN 4. River Network Graph
    - 1.6 #TFD8TX 5. River Network Amplification
      - 1.6.1 #3S2ME8 5.1. Analysis and Trajectory Refinement
      - 1.6.2 #S7JXXD 5.2. Riverbed Carving
      - 1.6.3 #U4VCJG 5.3. Seeding Riverflow Primitives
      - 1.6.4 #AZ7MGY 5.4. Rosgen Scene Statistics
    - 1.7 #9ZYJP2 6. Animated Procedural River Model
      - 1.7.1 #U6BTCY 6.1. Riverflow Primitives
      - 1.7.2 #J5P42U 6.2. Operators
    - 1.8 #NHDQDL 7. Implementation and results
      - 1.8.1 #FYBSSG 7.1. Performance
      - 1.8.2 #3SJTYP 7.2. Control
      - 1.8.3 #KNTPE7 7.3. Comparison to Other Techniques
      - 1.8.4 #4LSSLF 7.4. Limitations
    - 1.9 #BR5ZZK 8. Conclusion
    - 1.10 #SVZMJL Acknowledgments
    - 1.11 #GJT3LN References

### 37. Tool result: get_document

DOCUMENT #DMTA8Y
Title: Terrain Generation Using Procedural Models Based on Hydrology

Outline:
  - 1 #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
    - 1.1 #F9QBNZ Abstract
    - 1.2 #SFQZPA 1 Introduction
    - 1.3 #CZMG8P 2 Related Work
    - 1.4 #3G9YBV 3 Algorithm Overview
    - 1.5 #WWSSDJ 4 River Network Generation
      - 1.5.1 #YQ7VH4 4.1 Initial Candidate Nodes
      - 1.5.2 #DBN56J 4.2 River Network Generation
        - 1.5.2.1 #WXUE6Z 4.2.1 Node Selection
        - 1.5.2.2 #VTGN6K 4.2.2 Node Expansion
    - 1.6 #T6FSBF 5 River Classification
      - 1.6.1 #TRR58W 5.1 Segmentation and Elevation of Crests
      - 1.6.2 #VE6H2H 5.2 Water-courses Labeling
    - 1.7 #UAYDMD 6 Terrain Model Generation
      - 1.7.1 #ASA4YQ 6.1 River Primitives Generation
      - 1.7.2 #FWT7FF 6.2 Terrain Primitives Generation
    - 1.8 #NDTMMW 7 Terrain Tree Definition
    - 1.9 #SZAWPC 8 Results
    - 1.10 #2TLVR2 9 Conclusion
    - 1.11 #FV8VJA References

### 38. Tool result: search_text

Exact matches

1. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 4
  Context:
    #JJE8HN Procedural Riverscapes
      #TFD8TX 5. River Network Amplification
        #S7JXXD 5.2. Riverbed Carving
  Matching excerpt #WG5LJA:
      Rosgen type D (see Figure 13) typifies wide rivers with little slope. This often leads to riverbeds with several channels of varying width and depth. We first establish the number of channels based on the flow volume and width of the river. Each channel has a symmetrical profile but follows a different trajectory, with their depth and width parameters determined by partitioning the aggregate flow between channels. Since the number of channels can vary between edges of the river graph, it is important to connect channels correctly. Also, in order to preserve flow, the final height of the riverbed is set as the minimum height over all channels.

2. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 0
  Context:
    #JJE8HN Procedural Riverscapes
      #VZP285 Abstract
  Matching excerpt #DBZ8GU:
      This paper addresses the problem of creating animated riverscapes through a novel procedural framework that generates the inscribing geometry of a river network and then synthesizes matching real-time water movement animation. Our approach takes bare-earth heightfields as input, derives hydrologically-inspired river network trajectories, carves riverbeds into the terrain, and then automatically generates a corresponding blend-flow tree for the water surface. Characteristics, such as the riverbed width, depth and shape, as well as elevation and flow of the fluid surface, are procedurally derived from the terrain and river type. The riverbed is inscribed by combining compactly supported elevation modifiers over the river course. Subsequently, the water surface is defined as a time-varying continuous function encoded as a blend-flow tree with leaves that are parameterized procedural flow primitives and internal nodes that are blend operators. While river generation is fully automated, we also incorporate intuitive interactive editing of both river trajectories and individual riverbed and flow primitives. The resulting framework enables the generation of a wide range of river forms, ranging from slow meandering rivers to rapids with churning water, including surface effects, such as foam and leaves carried downstream.

3. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 3
  Context:
    #JJE8HN Procedural Riverscapes
      #Z6DVCN 4. River Network Graph
  Matching excerpt #HS22AT:
      Next, graph nodes are labeled with the terrain slope s and river flow \phi values at their cell position. The latter is a measure of the volumetric rate at which water is carried down the river and an accurate estimation is problematic, since it depends on parameters such as rainfall and soil composition. Instead, we apply a simplified model based on an empirical power law observed in geomorphology [Dun78]: from drainage area A_{ij} [ m^2 ], the flow \phi_{ij} of the river [ m^3 s^{-1} ] is approximated by \phi_{ij} = 0.42A_{ij}^{0.69} . This equation takes into account evaporation and infiltration, which is why the volume of flow is not preserved.

4. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 2
  Context:
    #JJE8HN Procedural Riverscapes
      #FF5JSX 3. Workflow
  Matching excerpt #X3RVN8:
      Our work uses the Rosgen river classification [Ros94] that defines the detailed characteristics of the geometry of the riverbed ( i.e. the cross section and longitudinal profile, sinuosity, riverbed materials, entrenchment ratio) according to the local slope and flow of the river. From this combined terrain data we generate a river network graph, whose edges correspond to river segments labeled by Rosgen type (see Figure 3). This results in a parameterized river network with per-cell waterflow values for slope, volume, and velocity. From this information the shape of the riverbed can be derived and inscribed into the terrain.

5. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 5
  Context:
    #JJE8HN Procedural Riverscapes
      #TFD8TX 5. River Network Amplification
        #U4VCJG 5.3. Seeding Riverflow Primitives
  Matching excerpt #SYWNWN:
      To place riverflow primitives, an adaptive sampling process is performed over the riverbed domain \Omega_{\mathcal{R}} . Note that the density is adapted to the flow rate so that fewer, but larger primitives are placed in slow flowing areas. A riverflow primitive is placed at each sample position with its radius set according to the local density. This ensures overlap sufficient for a continuous blend between primitives in the blend-flow tree. The Rosgen type, river trajectory, longitudinal profile, surface flow and elevation, and riverbed topog-

6. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 5
  Context:
    #JJE8HN Procedural Riverscapes
      #TFD8TX 5. River Network Amplification
        #U4VCJG 5.3. Seeding Riverflow Primitives
  Matching excerpt #5NJY7V:
      In terms of the impact of Rosgen type on the choice of water primitives, for type A we assign near constant height over each basin and then add fall primitives where basins intersect. Next, we place downstream turbulence primitives based on the waterfall drop and average flow velocity. These decrease in amplitude and frequency with increasing distance from the waterfall. For type C , the bends have high turbulence and velocity in deeper areas with calmer primitives placed in the shallows. The straights are seeded with high turbulence primitives to emulate rapids. For type D , the velocity and turbulence parameters of water primitives are keyed to channel depth and distance from the center of the nearest channel.

7. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 7
  Context:
    #JJE8HN Procedural Riverscapes
      #9ZYJP2 6. Animated Procedural River Model
        #J5P42U 6.2. Operators
  Matching excerpt #46PS6V:
      In order to evaluate the surface characteristics at a given point \mathbf{p} , we query the construction tree and recursively traverse it to find local primitives that contribute to the water elevation f(\mathbf{p}, t) , velocity \mathbf{u}(\mathbf{p}, t) and effervescence s(\mathbf{p}, t) . On the CPU, the hierarchical nature of the blend-flow tree provides an implicit spatial acceleration structure. However, this is ill-suited to the graphics hardware, where we instead use a regular grid (as detailed in Section 7.1). Because the overlap between each primitive is calibrated by the river generation step, we achieve real-time performance when querying surface characteristics.

8. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 6
  Context:
    #JJE8HN Procedural Riverscapes
      #9ZYJP2 6. Animated Procedural River Model
        #U6BTCY 6.1. Riverflow Primitives
  Matching excerpt #GU2NEL:
      We have implemented a range of procedural primitives with characteristic dynamics (Figure 16), namely: calm, turbulent, wave, cascade, vortex, and ripple primitives (see the accompanying video for their animation). Calm water primitives are generated in regions with low turbulence and produce only swells and damped ripples. In contrast, turbulent water primitives are created where the water is agitated and the velocity high. Wave primitives approximate local crests and troughs, often dictated by the riverbed topography. Cascade primitives represent a more extreme version of this effect and include a corresponding plunge pool. Vortex primitives produce swirling that typically occurs downstream of under-water obstacles, such as rocks. Finally, ripples capture high frequency disturbance of the water surface from crosswinds and other sources. We also designed particular primitives for specific effects, such as echoing water ripples that approximate the complex movement of water interacting with river banks. By design it is easy to code new waterflow primitives for inclusion in the blend-flow tree.

9. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 1
  Context:
    #JJE8HN Procedural Riverscapes
      #SGDELU 2. Related Work
        #37RBCG 2.2. Water Animation
  Matching excerpt #BX69X5:
      Procedural methods: In contrast, procedural techniques manage to overcome these limitations and define the animation of water using phenomenological methods. This extends to the procedural representation of animated rivers. Neyret et al. [NP01], and later improvements [YNBH09, YNS11], focus on the procedural animation of quasi-stationary waves and ripples in brooks and small streams. It is worth noting that our method adopts a similar strategy, but is more general in application. Cheney [Che04] introduces Flow Tiles, which are bounded divergence-free velocity field patches that can be used to tile an animated domain, such as cloudscapes, riverscapes, and grasslands. The tiles serve a similar role to our primitives, but are limited in their placement and combination. Stomakhin et al. [SS17] control fluid-based animations by introducing Flux Animated Boundary primitives with a view to guiding physically-based particle simulations. Nugjar et al. [NC13] simulate a river with smoothed particle hydrodynamics, and then derive a Markov field, which is replayed afterwards.

10. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 3
  Context:
    #JJE8HN Procedural Riverscapes
      #Z6DVCN 4. River Network Graph
  Matching excerpt #Y3HUSK:
      The labeling of graph edges is more involved, since classification by Rosgen type [Ros94] requires a computation of the following river properties: segment-based river flow, stream power, and the Horton-Strahler number. First, river flow \phi_{ij} is averaged over the cells occupied by the edge. Then, the stream power, which captures the erosive action of water flowing in the river [CBC*16], is calculated based on slope S_{ij} and drainage area A_{ij} per edge cell as:

Approximate matches

1. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 2
  Context:
    #JJE8HN Procedural Riverscapes
      #FF5JSX 3. Workflow
  Score: 0.03
  Related excerpt #QH5ARN:
      Next, the river network is refined, based on this flow data and the geometry of the riverbed, by appropriately placing localized animated primitives that represent cycling water patterns, such as waves, whirlpools, and cascades. Overlapping primitives are combined using blend operators into a hierarchical blend-flow tree that defines the animated surface of the water as a function f(\mathbf{p}, t) . This procedural function can be directly evaluated at any point and time without the need for simulation. Finally, the combined procedural river representation can be rendered directly at real-time rates or passed on to an off-line process to generate photo-realistic images.

2. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 0
  Context:
    #JJE8HN Procedural Riverscapes
      #RMH5XA 1. Introduction
  Score: 0.028
  Related excerpt #9ESE2P:
      In more detail, we take as input a digital elevation model, evaluate its hydrological characteristics, and specify the course of a detailed, possibly branching river network (see Figure 1). Detailed riverbed cross-sections are then derived using Rosgen classification and flow characteristics and the resulting geometry can be inscribed into the terrain heightfield. Then an attendant blend-flow tree is generated automatically. For instance, cascade primitives are placed after step-wise drops in elevation, while basins will be populated with calm water primitives. Our key observation is that visually a river surface is in a steady flow state, and displays only small periodic, and random perturbations. For example, the unperturbed wake behind a submerged rock varies subtly in form, but not in position. Movement is also predominantly in 2\frac{1}{2}D , with the occurrence of locally significant patterns such as vortices, ripples, whirlpools, and small cascades. Rather than implementing a full fluid simulation with the attendant scaling issues, we blend animated procedural primitives to capture these cyclical patterns.

3. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 0
  Context:
    #JJE8HN Procedural Riverscapes
      #RMH5XA 1. Introduction
  Score: 0.016
  Related excerpt #2JBFEL:
      Specifically, from the starting point of a bare-earth terrain, either sourced from existing digital elevation models, generated procedurally, or modeled by the user, and with a range of permissible sampling resolutions (1m - 30m per pixel), a plausible river network is derived according to the Rosgen classification used in hydrology, inscribed into the terrain, and populated with a consistent animated water surface. The resulting river structure and dynamics can also

4. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 1
  Context:
    #JJE8HN Procedural Riverscapes
      #SGDELU 2. Related Work
        #37RBCG 2.2. Water Animation
  Score: 0.015
  Related excerpt #2PTNVG:
      When dealing with rivers, water animation is highly constrained by the profile and trajectory of the river. This observation is particularly relevant for simulation methods but also applies to procedural animation.

5. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 1
  Context:
    #JJE8HN Procedural Riverscapes
      #SGDELU 2. Related Work
        #37RBCG 2.2. Water Animation
  Score: 0.015
  Related excerpt #UGXHA9:
      Simulation: Theoretically, any simulation method could be used in the context of watercourse animation. However, in typical cases, a river can extend up to several kilometers, presenting a significant challenge in the trade-off between precision, simulation time and memory overhead. Some methods bypass this by directly optimizing the simulation process [LvdP02, LH10, KW06, IGLF06, NB11]. Another possibility is to enhance detail using wavelets to represent turbulence [KTJG08] or specialized particles [HW04, CM10, TMFG07]. A third tack is to enhance particles to carry supplementary information, thereby simplifying simulation [SRF05, YHK07, JW17, JSMF*18]. In a sense, these particles are a step towards our animated riverflow primitives. The main limitation of simulation is a lack of control, particularly when it comes to predicting and controlling how particles behave at the boundary of the riverbed. Notably, several simulation methods are simply not adapted to the continuous flowing of water from a spring to a sink and only deal with flat water bodies such as lakes.

6. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 10
  Context:
    #JJE8HN Procedural Riverscapes
      #BR5ZZK 8. Conclusion
  Score: 0.015
  Related excerpt #2BABHT:
      The core of our system is a workflow that analyses an input terrain to derive its flow properties and uses this information to generate and carve out a river network, before instantiating the water surface with procedural animated riverflow primitives arranged in a blend-flow tree. While user intervention is not required it is supported at multiple stages of the pipeline, from providing a constraining river footprint with the terrain input to fine-tuning the parameters of individual riverflow primitives in the river model output.

7. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 1
  Context:
    #JJE8HN Procedural Riverscapes
      #SGDELU 2. Related Work
  Score: 0.014
  Related excerpt #5TQL2G:
      State-of-the-art methods have focused in isolation on fluid animation, coarse river networks, or modeling terrains without rivers. No current method produces a coherent combination of a hydrologically-defined bedded river network and corresponding river animation.

8. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 5
  Context:
    #JJE8HN Procedural Riverscapes
      #9ZYJP2 6. Animated Procedural River Model
  Score: 0.014
  Related excerpt #8W6ZMV:
      Our river modeling approach is centered on a hierarchical blend-flow tree (illustrated in Figure 15) that merges animated procedural riverflow primitives using blending operators. We take inspiration from the Feature Hierarchy of Genevaux et al. [GGP + 15] and generalize it to support animated content. The riverflow primitives are leaf nodes in the tree and encapsulate temporally self-similar patterns commonly observed in rivers. Each primitive is responsible for animating a stretch of cohesive water surface, such as waves, whirlpools, or wakes, over a compact support. They have parameterized inputs for user control, a low memory footprint, and are capable of generating precise and varied animated content (see the accompanying video). Blend operators are internal nodes of the tree that act to combine and aggregate overlapping leaf nodes and sub-trees.

9. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 5
  Context:
    #JJE8HN Procedural Riverscapes
      #TFD8TX 5. River Network Amplification
        #U4VCJG 5.3. Seeding Riverflow Primitives
  Score: 0.014
  Related excerpt #SYWNWN:
      To place riverflow primitives, an adaptive sampling process is performed over the riverbed domain \Omega_{\mathcal{R}} . Note that the density is adapted to the flow rate so that fewer, but larger primitives are placed in slow flowing areas. A riverflow primitive is placed at each sample position with its radius set according to the local density. This ensures overlap sufficient for a continuous blend between primitives in the blend-flow tree. The Rosgen type, river trajectory, longitudinal profile, surface flow and elevation, and riverbed topog-

10. Source: Procedural Riverscapes (#AK7NGE), A. Peytavie, B. Benes, E. Galin, E. Guérin, J. Gain, T. Dupont, Y. Cortial, p. 7
  Context:
    #JJE8HN Procedural Riverscapes
      #NHDQDL 7. Implementation and results
  Score: 0.014
  Related excerpt #ACDG5B:
      Figures 1 show different views of an extensive river network, spanning a 3 \times 3 km terrain. The scene has the following statistics: an input digital elevation map with a per-pixel resolution of 100m, a river that extends for approximately 4km, more than 40,000 primitives forming the river surface, and a final terrain and water surface resolution of 10cm.

### 39. Tool result: search_text

Exact matches

1. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 1
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #3G9YBV 3 Algorithm Overview
  Matching excerpt #TJ6DHX:
      The output of the river network generator is a set of 3D polylines with increasing elevation from the outlet to the spring. The rivers and their parts are then classified into distinct procedural primitives. We use building blocks such as junctions, springs, deltas, and river trajectories, for the final river rendering. This categorization is inspired by the Rosgen classification [Rosgen 1994], which is used in hydrology and geomorphology.

2. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #VE6H2H 5.2 Water-courses Labeling
  Matching excerpt #9QKM5Y:
      We assign to each river node its classification based on the slope of the river and its proximity to the coast. River nodes that are close to coasts (based on a geodesic distance threshold) are labeled as braided rivers (those consisting of multiple channels separated by bars and defined as D or DA). Similarly, river mouths with a flow greater than a fixed value are marked as deltas.

3. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #TRR58W 5.1 Segmentation and Elevation of Crests
  Matching excerpt #XA9BE4:
      Ridges. The computation of ridge elevation is important to guarantee a coherent flow. Each Voronoi cell has two types of edges: those that do not intersect the river graph and that define ridge lines, and those that carry a river entry e_k or outlet s .

4. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 4
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
  Matching excerpt #U7AJ7K:
      The river graph divides the domain \Omega into nonoverlapping cells that allow us to build a set of watersheds and to construct a dual graph that stores crests (Section 5.1). The water flow is extracted from the river graphs, and each water-course is labeled with respect to the Rosgen classification (Section 5.2).

5. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 3
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #WWSSDJ 4 River Network Generation
        #DBN56J 4.2 River Network Generation
          #VTGN6K 4.2.2 Node Expansion
  Matching excerpt #BMNJ7A:
      River Slope map. During the expansion step, the elevation of each new node should be higher than its ancestors to guarantee a consistent water flow. This elevation is computed according to a local river slope-magnitude value that is provided either by the user (Fig. 1 and 17) or generated procedurally (Fig. 18). Either way, the river slope-magnitude (a scalar value) defines only the height variation and provides no information on the direction of the expansion. Mapped on the whole terrain, this river slope map provides an intuitive way to describe how the drainage network will expand.

6. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #TRR58W 5.1 Segmentation and Elevation of Crests
  Matching excerpt #KHSN48:
      River flow evaluation contributes to the definition of the water-course. The exact computing is a complex problem that depends on multiple parameters, such as the climate and the soil composition.

7. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #TRR58W 5.1 Segmentation and Elevation of Crests
  Matching excerpt #VG86AP:
      We use a simplified model based on an empirical power law observed in geomorphology [Dunne and Leopold 1978]. Let A [m 2 ] be the watershed area. The mean flow \phi of the river [m 3 s -1 ] is given by \phi = 0.42 \cdot A^{0.69} . The watershed area A is approximated by the sum of the areas of cells connected to s in the graph, and it allows calculation of the outgoing flow \phi of any cell V (Fig. 10). This equation takes into account evaporation and infiltration, and that is why the volume flow is not preserved.

8. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 2
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #3G9YBV 3 Algorithm Overview
  Matching excerpt #KAMGFF:
      Once the river network is defined, the algorithm extracts the graph topology and geometry that is used for the terrain generation in the next step. We decompose the terrain into a set of patches by computing the Voronoi cells corresponding to the nodes of the river graph. The algorithm then generates the hierarchical watershed structure by traversing the geometric graph and gathering information of the Voronoi cells. This step enables us to compute the area of the watersheds and subwatersheds and to evaluate the flow of the water-courses at every node in the graph.

9. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 2
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #WWSSDJ 4 River Network Generation
  Matching excerpt #YYHJW8:
      Notations. Let \Omega denote the input domain and \Gamma its contour (defined as a 2-D polyline). The algorithm creates a coverage of \Omega by a set of trees denoted as \mathcal{G} . A tree is defined by its set of nodes \mathcal{N}_j and a set of edges \mathcal{E}_j . Every node N_i = (\mathbf{p}_i, s_i, \rho_i, \phi_i) has the position \mathbf{p}_i , the priority index s_i , the river type \rho_i according to Rosgen classification [Rosgen 1994], and the flow \phi_i . Every edge has a constant length e that is defined by the user. We will refer to the set of all nodes and edges \mathcal{N} = \cup_j \mathcal{N}_j and \mathcal{E} = \cup_j \mathcal{E}_j , respectively.

10. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 0
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #SFQZPA 1 Introduction
  Matching excerpt #CL3N2Q:
      We propose a novel procedural approach, using river networks, for terrain modeling. The user optionally defines the river mouths and sketches the most important rivers on the terrain, and our approach generates the complete river network with the corresponding terrain, as shown in Fig. 1. The user can also control the river network and terrain generation with a set of intuitive parameters. Our method can represent large terrain models with complex river networks and geomorphologically consistent patterns that conform with observations from landscape and river science and yet provide a high level of controllability. The actual river geometry is generated by converting the drainage network data into a subset of river types that are taken from a well-known classification in hydrology [Rosen 1994]. The terrain is stored in a novel hierarchical continuous data representation that is inspired by constructive solid geometry (CSG). The terrain features are stored in the tree leaves, and the internal nodes define operations (blending, subtraction) on them. Contrary to most of the previous work, our terrain is represented by an analytic continuous function and not as a raster-based height field. Yet, our terrain is composed of many primitives and not a single abstract function. This allows us to generate large-scale terrains with an unlimited and locally varying level of detail.

Approximate matches

1. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #TRR58W 5.1 Segmentation and Elevation of Crests
  Score: 0.03
  Related excerpt #KHSN48:
      River flow evaluation contributes to the definition of the water-course. The exact computing is a complex problem that depends on multiple parameters, such as the climate and the soil composition.

2. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 5
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
        #TRR58W 5.1 Segmentation and Elevation of Crests
  Score: 0.03
  Related excerpt #VG86AP:
      We use a simplified model based on an empirical power law observed in geomorphology [Dunne and Leopold 1978]. Let A [m 2 ] be the watershed area. The mean flow \phi of the river [m 3 s -1 ] is given by \phi = 0.42 \cdot A^{0.69} . The watershed area A is approximated by the sum of the areas of cells connected to s in the graph, and it allows calculation of the outgoing flow \phi of any cell V (Fig. 10). This equation takes into account evaporation and infiltration, and that is why the volume flow is not preserved.

3. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 4
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #T6FSBF 5 River Classification
  Score: 0.028
  Related excerpt #U7AJ7K:
      The river graph divides the domain \Omega into nonoverlapping cells that allow us to build a set of watersheds and to construct a dual graph that stores crests (Section 5.1). The water flow is extracted from the river graphs, and each water-course is labeled with respect to the Rosgen classification (Section 5.2).

4. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 1
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #3G9YBV 3 Algorithm Overview
  Score: 0.015
  Related excerpt #TJ6DHX:
      The output of the river network generator is a set of 3D polylines with increasing elevation from the outlet to the spring. The rivers and their parts are then classified into distinct procedural primitives. We use building blocks such as junctions, springs, deltas, and river trajectories, for the final river rendering. This categorization is inspired by the Rosgen classification [Rosgen 1994], which is used in hydrology and geomorphology.

5. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 7
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #SZAWPC 8 Results
  Score: 0.015
  Related excerpt #VFM8JD:
      be achieved by sketching both river and terrain slope maps : this way, the user can sketch mountain and valley areas. Independently on the quality of the user input, our approach will lead to a hydrographically correct river network as shown in Fig. 1 and 17.

6. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 6
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #UAYDMD 6 Terrain Model Generation
        #FWT7FF 6.2 Terrain Primitives Generation
  Score: 0.014
  Related excerpt #Q42MDN:
      The shape of the terrain is modulated by a random noise. The noise attributes (amplitude, frequency) associated with the primitives are calculated with respect to the distance to the river d_a and the elevation differences between the river a_z and crests b_z . This modulation produces more roughness for the mountains than for the valleys. Using noise can produce small local minima, but they remain negligible in the context of large-scale hydrology.

7. Source: Terrain Generation Using Procedural Models Based on Hydrology (#DMTA8Y), Adrien Peytavie, Bedřich Beneš, Jean-David Génevaux, Éric Galin, Éric Guérin, p. 6
  Context:
    #RULAFW Terrain Generation Using Procedural Models Based on Hydrology
      #NDTMMW 7 Terrain Tree Definition
  Score: 0.012
  Related excerpt #EWKLCC:
      Each river primitive R_i is built from a curve skeleton that defines the river path \gamma and from a river profile function \delta that describes the river profile perpendicular to the curve (Fig. 16 right). We use a set of profiles \{\delta\} . Each profile is stored as a one-dimensional piecewise function that corresponds to the river type. The profile can be made of multiple layers that correspond to bedrock, water, and sand. The signed distance between \mathbf{p} and the curve \gamma is denoted d(\mathbf{p}) , and the projection of \mathbf{p} on \gamma is denoted u(\mathbf{p}) . We define

### 40. Tool result: search_text

Exact matches

1. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 2
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #XF2N2Y 3. Overview
  Matching excerpt #QXYWAJ:
      Input data. The input data of our algorithm is made of raster data for the terrain elevation and texture, of vector data for the fluid boundaries, and of wave textures (see Figure 2, left). The vector data describes a network of channels connected by junctions , as well as obstacles such as islands. Each channel has two boundary curves, a flow rate and a flow direction. This data could come from a GIS database, be simulated from an erosion model, or be generated interactively or procedurally. The wave textures can come from any source (Perlin noise, FFT waves, etc.).

2. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 4
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
        #89NKTG 4.1. Finding the volumetric flow rate from the hydro geometry
  Matching excerpt #8WTNKB:
      Cycles in an hydrographic network graph come, mostly, from islands and obstacles in the flow (see Figure 7). For the computation of volumetric flow rate Q , they cause the problem to become over-constrained, and it is impossible to compute Q for the network. The solution is to move the problem to the stream function, \psi : as \psi must remain constant on the boundaries of the channel, the only free parameter is the value of \psi on the contour of the island. We use the interpolated value of the stream function at the center of the island.

3. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #XF2N2Y 3. Overview
  Matching excerpt #AL6YQ9:
      Texture advection. In order to advect small scale details on the fluids we rely on particles that carry wave sprite textures. We distribute particles with a uniform and constant density in screen space, to simulate only the visible parts of moving fluids and to automatically adapt the sampling density in world space to the viewing distance (Figure 2b). However we advect the particles in world space, using our procedural velocity method to evaluate locally the velocity of each particle. This procedural velocity depends on the distances of the particle to the channel and obstacles boundaries (see Section 4.2). After advection we insert and delete particles in order to keep a uniform sampling (see Section 5.1).

4. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 2
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #JW4T3Z 2. Previous work
        #CVHDLT 2.1. Fluid velocity
  Matching excerpt #QYLCEG:
      Procedural methods can compute the velocity locally without doing a simulation in a whole domain. [PN01] extend Perlin noise for that purpose, but cannot handle boundaries nor global flowing. [Che04] propose a tiling of velocity tiles, but this is not adapted to complex boundaries and obstacles. [BHN07] propose a solution to impose boundary conditions to a velocity field based on procedural noise. But this solution does not work with complex channel confined flows with branching and obstacles. [Che04] and [BHN07] compute the velocity of the flow as the curl of a stream function, automatically ensuring that the divergence is null, a characteristic of incompressible flows. Our method is similar to theirs, with the main difference that we deal with a complex network of channels, including branching and obstacles.

5. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 5
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
        #XB2KH8 4.3. Handling obstacles
  Matching excerpt #RQUVV6:
      Obstacles in the flow, such as islands, are treated in the same way as the other boundaries: they are included in the search for boundaries, and we compute the distance. The only caveat is that we must first compute \psi_i for the obstacle: let C_i be the center of obstacle O_i . We first compute \psi(C_i) using Equation 1, using only the boundaries of the channel. We then use \psi(C_i) as the value of \psi on the boundary of the obstacle.

6. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
  Matching excerpt #GQ3S48:
      Given a connected graph for the hydrographic network, the values of the volumetric flow rate Q_i for each branch of the graph yields directly the values of the stream function \psi on each of the channel boundaries, up to a constant. The constant is meaningless since we are only interested in the curl of \psi .

7. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
  Matching excerpt #WR3N89:
      The stream function is related to the volumetric flow rate inside each branch of the hydrographic network: \psi must be constant along every connected boundary of the system, and the volumetric flow rate Q inside a given channel is equal to the difference between the values of \psi on each bank (see Figure 3):

8. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
        #89NKTG 4.1. Finding the volumetric flow rate from the hydro geometry
  Matching excerpt #UE46TV:
      If our dataset does not include the volumetric flow rate for each channel, we reconstruct plausible values based on the hydrographic network and its geometry.

9. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
        #89NKTG 4.1. Finding the volumetric flow rate from the hydro geometry
  Matching excerpt #J4JVWD:
      Each edge of the graph corresponds to a channel. We know its cross-section, w_i , and we want to compute its volumetric flow rate, Q_i . This can be solved through a graph traversal, using the following laws:

10. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 8
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #LQXUW2 6. Implementation and results
  Matching excerpt #E7HVEG:
      flow is necessary for river animation, we compared our results against the animation of non-flowing water and uniform flow which can be handled by previous methods. The results demonstrate that our method brings considerable improvements (see the accompanying video): with non-flowing water, the waves stay in the same position, giving the impression of a static river; with uniform flow, the waves go through the obstacles and boundaries, breaking the assumptions of the model.

Approximate matches

1. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 2
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #XF2N2Y 3. Overview
  Score: 0.029
  Related excerpt #QXYWAJ:
      Input data. The input data of our algorithm is made of raster data for the terrain elevation and texture, of vector data for the fluid boundaries, and of wave textures (see Figure 2, left). The vector data describes a network of channels connected by junctions , as well as obstacles such as islands. Each channel has two boundary curves, a flow rate and a flow direction. This data could come from a GIS database, be simulated from an erosion model, or be generated interactively or procedurally. The wave textures can come from any source (Perlin noise, FFT waves, etc.).

2. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
  Score: 0.029
  Related excerpt #FQ63GC:
      Our input is the set of conditions imposed on the flow for the entire virtual terrain. It can be e.g. , a hydrographic network with the river banks, or ocean currents. Typically, a hydrographic network is stored as a directed graph, expressing the connections between rivers and channels. This graph is mapped on the terrain. Volumetric flow rates for each branch of the graph can be included as part of the original data set, or we can reconstruct an approximate version using the vertical cross-sections of each branch (see Section 4.1).

3. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 8
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #LQXUW2 6. Implementation and results
  Score: 0.027
  Related excerpt #34BVNC:
      channels without interrupting the animation, which is due to our procedural velocity generation. In addition, the river appearance can be easily modified using the reference wave textures.

4. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 4
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
        #89NKTG 4.1. Finding the volumetric flow rate from the hydro geometry
  Score: 0.027
  Related excerpt #8WTNKB:
      Cycles in an hydrographic network graph come, mostly, from islands and obstacles in the flow (see Figure 7). For the computation of volumetric flow rate Q , they cause the problem to become over-constrained, and it is impossible to compute Q for the network. The solution is to move the problem to the stream function, \psi : as \psi must remain constant on the boundaries of the channel, the only free parameter is the value of \psi on the contour of the island. We use the interpolated value of the stream function at the center of the island.

5. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 8
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #LQXUW2 6. Implementation and results
  Score: 0.027
  Related excerpt #E7HVEG:
      flow is necessary for river animation, we compared our results against the animation of non-flowing water and uniform flow which can be handled by previous methods. The results demonstrate that our method brings considerable improvements (see the accompanying video): with non-flowing water, the waves stay in the same position, giving the impression of a static river; with uniform flow, the waves go through the obstacles and boundaries, breaking the assumptions of the model.

6. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 3
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #S3P9T2 4. Computing flow velocities
  Score: 0.026
  Related excerpt #C7MNJK:
      Whenever a new terrain quad becomes visible, we take as input the constraints and boundary conditions on the flow for this quad (including a margin, as in [BN08]), such as river banks, and we produce as output a data structure that allows us to compute the velocity of the flow at any point, very quickly. Since the creation of this structure is very fast we can edit the constraints ( e.g. , river shape) interactively.

7. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 6
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #NRD5JU 5. Adaptive texture advection
        #KWALBE 5.2. Sprite-based texturing
  Score: 0.026
  Related excerpt #DLLLS4:
      such as simple flow fluctuations or wind ripples. We ignore individual waves such as stationary shockwaves or hydraulic jumps, which are not advected. In general, waves are not the same everywhere in the fluid. For instance wind ripples do not appear in wind shadowed regions. In order to reproduce this, our particles carry several kinds of waves simultaneously. During rendering we mix these waves with shaping and masking rules analog to the ones used in [BHN07]. We either use a user-defined map or a procedural rule (based on position, slope, etc) to locally modulate the amplitude of each kind of wave, or we use global parameters to control the wave appearance at the scene level (wavelength, wind direction, etc.).

8. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 8
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #TJAYJS 7. Discussion and limitations
  Score: 0.024
  Related excerpt #4Y2DNV:
      2D flow hypothesis and terrain slope Our 2D flow hypothesis is valid for constant water depth (and homogeneous velocity profile along each water column). To account for depth h(x,y) variations we should simply conserve q(x,y) = v(x,y)h(x,y) instead of v \cdot \nabla \cdot q = 0 , q = \nabla \times \psi , v = q/h . This supposes either to know h or to deduce it from the terrain elevation z(x,y) . In our static case, the Chézy law provides a convenient approximation: v = C\sqrt{Rs} with C the Chézy constant, s the slope, v = Q/S the average velocity in a vertical section of surface S , perimeter P , and hydraulic radius R = S/P . Assuming the section has a known shape, e.g., a rectangle of known length l and height h , this yields h as a function of s, l, Q .

9. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 6
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #NRD5JU 5. Adaptive texture advection
        #KWALBE 5.2. Sprite-based texturing
  Score: 0.024
  Related excerpt #U5WBC5:
      Wave patterns. In this work we focus on statistical wave patterns populating the surface and advected with the flow,

10. Source: Scalable real‐time animation of rivers (#XDESU9), Eric Bruneton, Fabrice Neyret, Nicolas Holzschuch, Qizhi Yu, p. 1
  Context:
    #B9LYTR Scalable real-time animation of rivers
      #UJRUGW 1. Introduction
  Score: 0.014
  Related excerpt #U7FSJS:
      Many applications today are giving the user the ability to explore a virtual world of very large scale, possibly even unbounded. For practical reasons many of them (such as Google Earth) consist mostly of static terrain and geometry. The simulation of flowing fluids, such as rivers and lava flows would greatly improve the realism of these virtual worlds, but would also introduce scalability issues: in a typical situation, the observer is looking at the virtual world at close range, and thus paying attention to small scale details such as waves and ripples. Combined with the large scale of the world itself, this makes computational fluid dynamics solutions impractical, especially for interactive exploration. Most game engines, such as Crysis', use a constant flow, which has visible flaws, namely that the flow is going through obstacles.

### 41. Assistant tool calls

#### Tool call: `write_note`

```json
{
  "block_ids": [
    "QXYWAJ",
    "X3RVN8",
    "GU2NEL",
    "5NJY7V",
    "6ELMAT",
    "XVFV3N",
    "H2E2UR",
    "EYM9N6"
  ],
  "text": "For a game with precomputed geological erosion and hydrology, the best fit is a stylized data-driven hybrid rather than runtime CFD. Reuse channel topology, banks, flow direction, discharge/drainage area, slope, depth/width, curvature, drops, junctions, obstacles, and distance-to-shore as shader/control fields. This closely matches the input assumed by scalable river animation (#QXYWAJ) and Procedural Riverscapes, which derives per-cell slope, volume, and velocity (#X3RVN8) and selects calm, turbulent, wave, cascade, vortex, and ripple primitives from terrain and flow conditions (#GU2NEL, #5NJY7V). Recommended architecture: one shared water material; rivers use generated flow maps to advect two offset normal/detail layers as in Portal 2 (#6ELMAT, #XVFV3N); lakes use low-speed wind ripples and shoreline masks; ocean uses a few art-directed Gerstner/spectral bands plus shore foam. Generate masks for turbulence/foam from normalized stream power, slope, curvature, constriction, drops, and obstacles; use depth for color/opacity and shallow-ground blending; use local feature primitives only at visually important events such as waterfalls, rapids, confluences, and rocks. Apply screen- or distance-dependent LOD, retaining flow direction and wind at distance while removing displacement and local effects (#H2E2UR, #EYM9N6).",
  "title": "Recommended water renderer for procedural hydrological terrain"
}
```

### 42. Tool result: write_note

NOTE SAVED #JVRSKS
IRI: https://m.sheaf.less.rest/JVRSKS

### 43. Assistant

That is almost the ideal input for a **stylized procedural water system**. I would not run a general fluid simulation. Your erosion/hydrology process has already computed most of the structure needed to make the water move convincingly.

This closely matches *Procedural Riverscapes*: it converts per-cell slope, flow volume, velocity, depth, and river geometry into localized calm-water, rapid, cascade, vortex, and ripple effects (#X3RVN8, #GU2NEL).

## Recommended architecture

Use **one common water shader**, driven by generated data, with different parameter profiles for streams, rivers, lakes, and ocean.

### 1. Export a water-control map

For each water surface point or river vertex, store as many of these as you already have:

| Data | Rendering use |
|---|---|
| Flow direction | Direction of normal maps, foam, leaves, and streaks |
| Flow speed | Animation speed and directional stretching |
| Discharge / drainage area | Overall visual energy and river scale |
| Water depth | Colour, transparency, refraction, wave scale |
| Channel width | Scale of waves and detail textures |
| Bed/longitudinal slope | Rapids, foam, and displacement strength |
| Distance to bank/shore | Shoreline foam and calmer bank water |
| Curvature | Faster outside bend, calmer inside bend |
| Elevation drop | Cascades, waterfalls, plunge pools |
| Confluences | Local turbulence and mixing patterns |
| Obstacles/islands | Wakes, vortices, and foam |
| Stream order | Stable style classification from creek to major river |

A packed texture could be:

- `RG`: 2D flow vector;
- `B`: normalized depth;
- `A`: turbulence or stream power.

Use another texture or vertex attributes for distance-to-shore and water-body type.

Bruneton et al. assume almost exactly this input: channel boundaries, junctions, obstacles, flow rate, and flow direction derived from procedural or erosion data (#QXYWAJ).

## 2. Make rivers flow with shader advection

Start with the *Portal 2* approach:

- two normal/detail layers;
- move both through your generated flow vector;
- give them different scales and phase offsets;
- blend between them over time;
- add low-frequency noise to hide cycling.

This is cheap, art-directable, and avoids obvious repetition (#6ELMAT, #XVFV3N).

Do not simply scroll one texture downstream. It will look uniform at bends and junctions. Your generated flow field should rotate and scale the animation locally.

A useful conceptual mapping is:

$$
v_{\text{visual}} = k_v\,\operatorname{clamp}(v_{\text{hydrology}},v_{\min},v_{\max})
$$

$$
T = \operatorname{saturate}
\left(
a\,\hat{v}
+b\,S
+c\,P
+d\,C
+e\,O
\right)
$$

where $T$ is stylized turbulence, $S$ is slope, $P$ is stream power, $C$ is curvature/constriction, and $O$ is obstacle or drop influence. These values do not need physically correct units; normalize them by biome or stream order.

## 3. Add local procedural “feature primitives”

Rather than making the complete shader increasingly complicated, instantiate local effects where the terrain analysis says something interesting happens:

- **calm primitive:** pools, deep channels, lakes;
- **rapid primitive:** high slope or stream power;
- **cascade primitive:** discrete elevation drops;
- **plunge-pool primitive:** beneath waterfalls;
- **vortex primitive:** behind rocks and inside recirculation regions;
- **confluence primitive:** where branches meet;
- **wake primitive:** downstream of obstacles;
- **shore ripple primitive:** banks and lake shores.

This is the core insight of *Procedural Riverscapes*: rivers are often visually close to a steady state with recognizable local, cyclic events, so those events can be synthesized without global simulation (#9ESE2P). The paper selects turbulence based on drops, average velocity, channel depth, bends, and distance from the channel centre (#5NJY7V).

For a stylized game, these primitives can be decals, local mesh patches, signed-distance fields, or shader volumes.

## 4. Treat each water-body type differently

### Streams and rivers

Use:

- hydrology-directed normal advection;
- small vertex displacement only on wider water;
- foam ribbons where slope and turbulence are high;
- brighter, narrower highlights on fast streams;
- darker or more transparent calm pools;
- local cascades and vortices.

Do not put equally strong ripples everywhere. Variation between calm and energetic sections is what makes the river readable and beautiful.

### Lakes

Use:

- nearly flat geometry;
- wind-directed ripples rather than river flow;
- large, slow swell only on large lakes;
- shallow colour around the shore;
- sparse shoreline foam or reeds;
- optional circular interaction ripples near the player.

The inlet and outlet can retain directional flow, gradually blending into wind animation over the lake.

### Ocean

Use:

- three to six art-directed Gerstner wave bands, or a compact spectral solution;
- a separate small-scale normal layer;
- distance-to-coast and depth to control wave amplitude;
- shoreline foam derived directly from the land–ocean boundary;
- stronger displacement nearby, normals only at distance.

Surface wavelets would be powerful but probably excessive unless boats, islands, and wakes are major gameplay features. Its useful design lesson is to compute broad wave behaviour coarsely and reconstruct visible detail separately (#764D8D).

### River–ocean transitions

Treat estuaries and deltas as a blending region, not an abrupt material boundary:

- river flow gradually weakens;
- wind/ocean waves gradually strengthen;
- colour moves from sediment-rich river water to ocean colour;
- foam appears where opposing directions or shallow bars meet.

Your network topology should already identify mouths and deltas; hydrology-based terrain work explicitly classifies high-flow mouths as deltas (#9QKM5Y).

## 5. Use foam as graphic emphasis

Foam is probably the highest-value stylized effect. Generate a foam mask from:

- high slope;
- sudden depth reduction;
- large velocity change;
- confluences;
- channel constriction;
- waterfall impact;
- obstacles;
- ocean shoreline.

Then advect the foam downstream and let it decay. Avoid covering every fast area uniformly—use broken bands, patches, and streaks. A dithered or blue-noise threshold can make foam fragment and disappear organically; the halftoning paper achieves this with negligible additional cost (#KFWVK3, #V5XDSY).

## 6. Prioritize colour and composition over optics

For “beautiful, not necessarily realistic,” I would use:

- an artist-authored shallow-to-deep colour ramp;
- controlled Fresnel reflection;
- inexpensive screen-space or planar reflection only where important;
- mild refraction;
- soft specular highlights;
- optional fake caustics in clear shallow water;
- consistent biome tinting.

Depth should drive colour more strongly than physically correct absorption. You can exaggerate turquoise shallows, dark pools, glacial blue streams, or sediment-rich rivers while preserving coherent flow.

## 7. Level of detail

Use three visual levels:

1. **Near:** displacement, flow normals, foam, local primitives, interaction ripples.
2. **Middle:** flow normals, simplified foam, no small particles.
3. **Far:** colour, reflection, and one normal layer; preserve only large flow/wind motion.

The distance-dependent river paper found that wind and broad directional motion remain visible at distance, while detailed wave height and bank reflections can be removed (#H2E2UR, #EYM9N6).

## Practical implementation order

1. Generate water meshes with stable along-stream and cross-stream coordinates.
2. Export flow direction, speed, depth, and turbulence.
3. Build the two-layer flow-map normal shader.
4. Add depth-based colour and shoreline blending.
5. Add generated foam masks.
6. Add cascade, rapid, confluence, and vortex primitives.
7. Add ocean waves and river–ocean blending.
8. Add near-camera interaction effects and LOD.

That should already produce water that feels integrated with the geology rather than pasted onto it. The key is to make your **hydrological structure determine where visual events occur**, while leaving their exact shape, colour, and intensity open to art direction. I saved this proposed architecture as note #JVRSKS.

### 44. User

i'm interested in some kind of volumetric stuff and splashes and like making waves in the sea look good at the shore etc, without turning everything into a super heavy navier stokes solver or something lol, what do we have on that?
