1 | <html><head> |
---|
2 | <title>Realistic real-time rain rendering</title> |
---|
3 | </head> |
---|
4 | |
---|
5 | <style> |
---|
6 | body |
---|
7 | { |
---|
8 | padding : 20px; |
---|
9 | |
---|
10 | } |
---|
11 | h1 |
---|
12 | { |
---|
13 | text-align:center; |
---|
14 | } |
---|
15 | h2 |
---|
16 | { |
---|
17 | width:100%; |
---|
18 | background-color: black; |
---|
19 | color: white; |
---|
20 | padding : 5px; |
---|
21 | margin-top : 80px; |
---|
22 | } |
---|
23 | h3 |
---|
24 | { |
---|
25 | font-decoration : underline; |
---|
26 | font-size: 100%; |
---|
27 | padding : 0px; |
---|
28 | margin : 0px; |
---|
29 | } |
---|
30 | li |
---|
31 | { |
---|
32 | margin-bottom : 15px; |
---|
33 | } |
---|
34 | ul |
---|
35 | { |
---|
36 | margin-top:20px; |
---|
37 | margin-bottom : 20px; |
---|
38 | } |
---|
39 | pre.bibtex |
---|
40 | { |
---|
41 | border : 1px dashed; |
---|
42 | background-color : #DDD; |
---|
43 | padding :10px; |
---|
44 | } |
---|
45 | </style> |
---|
46 | |
---|
47 | <body> |
---|
48 | <center> |
---|
49 | <table width="80%" style="background-color:#DDD; border: 1px groove; text-align: center;"> |
---|
50 | <tr> |
---|
51 | <td width="20%" style="border: 1px groove;"><a href="#screenshot">Screenshot</a></td> |
---|
52 | <td width="20%" style="border: 1px groove;"><a href="#description">Description of the method</a></td> |
---|
53 | <td width="20%" style="border: 1px groove;"><a href="#running">Compiling / running the program</a></td> |
---|
54 | <td width="20%" style="border: 1px groove;"><a href="#publications">Related publications</a></td> |
---|
55 | <td width="20%" style="border: 1px groove;"><a href="html/index.html">Documentation</a></td> |
---|
56 | </tr> |
---|
57 | </table> |
---|
58 | </center> |
---|
59 | |
---|
60 | |
---|
61 | |
---|
62 | <h1>Realistic real-time rain rendering</h1> |
---|
63 | |
---|
64 | <a name="screenshot"> |
---|
65 | <h2>Screenshot</h2> |
---|
66 | <center><img src="screenshot-rain.jpg" alt="screenshot of the method"><br><h4>A screenshot generated with this method, using 16000 regular raindrops, with light illumination.</h4></center><br> |
---|
67 | |
---|
68 | <a name="description"> |
---|
69 | <h2>Description of the method</h2> |
---|
70 | This module proposes a full framework to add rain or snow to real-time applications.<br> |
---|
71 | It includes: |
---|
72 | <ul> |
---|
73 | |
---|
74 | <li>A hardware particle simulation : |
---|
75 | <ul> |
---|
76 | <li>Particles positions are stored in textures</li> |
---|
77 | <li>These positions are updated through fragment programs, and take into account a falling speed and direction which can be modified interactively by the user</li> |
---|
78 | <li>When the particles are rendered, their position is read from the texture, in a vertex program</li> |
---|
79 | </ul> |
---|
80 | </li> |
---|
81 | |
---|
82 | <li>Several possible rendering techniques. |
---|
83 | <ul> |
---|
84 | <li><h3>SNOW :</h3>Particles are rendered with a simple snowflake texture.</li> |
---|
85 | <li><h3>REGULAR RAINDROPS :</h3>A novel rendering algorithm is used here for high speed rendering of realistic raindrops. |
---|
86 | <ul> |
---|
87 | <li>Key idea : what you can see in a raindrop is a distorted image of the scene behind it.</li> |
---|
88 | <li>We first capture a wide-angle render of the scene to a texture</li> |
---|
89 | <li>In a pixel shader, this texture is mapped onto the raindrops, according to the physical properties of raindrops, to simulate realistic refraction.</li> |
---|
90 | </ul> |
---|
91 | </li> |
---|
92 | <li><h3>STREAKS :</h3>Because of retinal persistence, raindrops, though roughly spherical, tend to appear like streaks. |
---|
93 | Each single raindrop impresses the film or retina for a short while.<br>This effect is handled using another pixel shader to render the particles. For each pixel of a streak, we blend the contributions of a few successive positions of the raindrop, computed using the algorithm described above.</li> |
---|
94 | <li>Optionnaly, regular raindrops or streaks can be combined with illumination from light sources</li> |
---|
95 | <li>As of now, the different rendering types are NOT COMPLIANT with each other. Each one must be activated, one at a time, with a #define compiler directive in the file <i>CommonRain.h</i>, ant then the program must be recompiled.</li> |
---|
96 | </ul> |
---|
97 | </li> |
---|
98 | </ul> |
---|
99 | |
---|
100 | |
---|
101 | <a name="running"> |
---|
102 | <h2>Compiling and running the program.</h2> |
---|
103 | This program was created using the great <a href="http://www.ogre3d.org">OGRE</a> rendering engine, which must be installed (version 1.2) on your sytem if you wish to run the program. By now, it has only been tested under linux, but should work under windows systems thanks to the multi-platform character of Ogre.<br><br> |
---|
104 | To execute it, you will need a SHADER MODEL 3 capable card, such as an nVidia Geforce 6, and Cg compiler installed.<br><br> |
---|
105 | You must first have a look to CommonRain.h to choose the type of rendering you wish (just uncomment the desired settings).<br><br> |
---|
106 | The particle count can be modified in RainCloseDropsParticles.cpp, by modifying the value of the #define |
---|
107 | BILLBOARD_POS_TEX_SIZE. Particle count is the square of this value.<br><br> |
---|
108 | This code is given as a running complete program, but shouldn't require too much modifications to be adapted to the needs of another program.<br><br> |
---|
109 | In the proposed implementation, the following key bindings are handled : |
---|
110 | <ul> |
---|
111 | <li><b>esc : </b>leace the program</li> |
---|
112 | <li><b>arrows keys / numpad 4, 5, 6, 8 : </b>User movement (translations)</li> |
---|
113 | <li><b>mouse : </b>User rotations</li> |
---|
114 | <li><b>R : </b>reinitialize the particle system, in case it would behave inconsistently</li> |
---|
115 | <li><b>space : </b>pause the system</li> |
---|
116 | <li><b>E : </b> erase the text on the fps display (little character, bottom left)</li> |
---|
117 | <li><b>+ and - : </b>increase / decrease the particles size</li> |
---|
118 | <li><b>S and Q : </b>accelerate / slow down the falling speed of the particles</li> |
---|
119 | <li><b>W and SHIFT+W : </b>accelerate/ slow down a lateral wind</li> |
---|
120 | <li><b>SYSRQ : </b>capture a screenshot</li> |
---|
121 | <li><b>C : </b> begin capturing all the frames, to make a video</li> |
---|
122 | </ul> |
---|
123 | <br> |
---|
124 | You can access the Doxygen-made <a href="html/index.html">documentation</a> for this program ! |
---|
125 | |
---|
126 | <a name="publications"> |
---|
127 | <h2>Publications</h2> |
---|
128 | Full details about the methods used is given in the following paper :<br> |
---|
129 | <pre class='bibtex'> |
---|
130 | @Article{RJG06, |
---|
131 | author = "Rousseau, Pierre and Jolivet, Vincent and Ghazanfarpour, Djamchid", |
---|
132 | title = "Realistic real-time rain rendering", |
---|
133 | journal = "Computers \& Graphics", |
---|
134 | number = "4", |
---|
135 | volume = "30", |
---|
136 | year = "2006", |
---|
137 | note = "special issue on Natural Phenomena Simulation", |
---|
138 | url = "<a href="http://www.msi.unilim.fr/basilic/Publications/2006/RJG06">http://www.msi.unilim.fr/basilic/Publications/2006/RJG06</a>" |
---|
139 | } |
---|
140 | </pre> |
---|
141 | |
---|
142 | |
---|
143 | |
---|
144 | <br><br><br> |
---|
145 | <hr> |
---|
146 | <div align="right"> |
---|
147 | Pierre Rousseau<br> |
---|
148 | University of LIMOGES<br> |
---|
149 | <a href="mailto:rousseau@msi.unilim.fr">rousseau@msi.unilim.fr</a><br> |
---|
150 | 17th of may, 2006 |
---|
151 | </div> |
---|
152 | |
---|
153 | </body> |
---|
154 | </html> |
---|