Cloud animation and rendering
This quarter, I implemented a basic system for animating and rendering clouds in the earths atmosphere, as seen from earth. I based my project mostly on the work of Dobashi, et al.
The algorithm described by Dobashi is fairly straightforward, as far as the animation is concerned. The method used for animation is to represent the area of the atmosphere that will be simulated as a voxel grid, where each voxel is associted with a finite state machine, which determines the presence of clouds in that voxel. By using some simple bit operations, these finite state machines can be handled with minimal effort, making the actual process of animating the clouds very speedy.
In my implementation, I render a point sprite in each voxel which contains a cloud. This sprite is alpha blended, and slightly larger then the voxel itself, so that the sprites will blend together, instead of seeming like a while bunch of isolated balls. Admittedly, this works better is some images then in others.
In addition to rendering the clouds to show the user, the proper color for each cell must be determined. This color is based on three sources of light, however, due to time constraints I was only able to properly handle 2 of them. The first source of light is the sun. The direct light of the sun, which is attenuated by the clouds above the cell in question, is calculated by making good use of the video cards blending capabilities. By rendering each cell to the frame-buffer, and then reading the color there, it is possible to determine the amount of sunlight being passed through the clouds to the center of this cell. an example of this process is shown below.
With this data, it is possible to determine the light which is transmitted through the clouds by the sun, and this can be used to determine the color of the cell. The remaining color comes from the sky behind the clouds (and is also affected by the other clouds behind). This is handled simply by using the alpha-blending capabilities of the video card. I also add a small amount of white to the clouds, to prevent them from becoming totally black, however, with more correct calculations, this term could probably be removed.
I implemented only portions of the work they described, though I would like to be able to go back and implement the remainign parts, as well as some ideas from other papers to create a faster and better looking end result. Hopefully, I will find time to improve this project over the next few months. I definately feel it is worth continuing in some way.
Y. Dobashi, K. Kaneda, H. Hamashima, T. Okita, T. Nishita, "A Simple, Efficient Method for Realistic Animation of Clouds," Proc. of SIGGRAPH2000, pp.19-28