Built a C++ and OpenGL program to generate and render volumetric objects. The volumetric renderer takes as input a configuration file describing a voxel buffer, where each voxel contains data for its density and light value. Once the voxel grid is aligned in the coordinate space, a ray casting algorithm is used to determine the color at each pixel. From each pixel’s location in the coordinate space, a ray is formed in the direction of the camera eye. A march is then performed down the ray at a predetermined step interval, where voxel density is checked at each step. Once the ray completes its march through the voxel grid, the remaining density value is returned and used to determine the color of the pixel.
The volumetric generator automatically produces voxel grid configurations for certain kinds of volumetric cloud objects. The generator can produce spheres, normal fluffy clouds created with random Perlin noise, and pyroclastic clouds resembling explosions. In the configuration file specifying the volumetric shapes to be rendered, multiple lights can be placed throughout the scene and the voxel grid can be positioned anywhere in the coordinate space.