Dynamic Light Sources + Shadows + Reflections + Indirect Lighting
I did some experimenting with dynamic lighting with shadows, reflections, and indirect light. Adding shadows works just fine - see the screenshot near the end of my earlier post. I've also had horizontal plane reflection support for a while. Indirect lighting of dynamic objects is new. It works the same way as indirect sun and sky lighting, using multi-threaded ray/path tracing. Unfortunately, the performance vs. quality trade-off isn't there yet. I need at least 50K rays for a noise-free image, and that only runs at around 8 FPS with 4 ray bounces. Maybe this isn't the right approach? At least it looks cool. Here is a blue light casting shadows and (difficult to see) indirect light.
|Blue dynamic light source casting shadows at night in the Sponza atrium.|
|Blue light source with floor reflections and indirect light from multiple sources.|
Procedural 3D Clouds
Last month I went back to working on procedural 3D volumetric clouds in tiled terrain mode. I've had static 3D clouds for a while now. It was time to make them animated. There are between 400 and 600 active clouds in the visible area of the scene, with a user controlled cloud density parameter. Clouds move in the direction of the wind and change shape over time using 4D procedural noise in the shader (x, y, z, and time). [It's actually 3D noise; time is added as a vertex offset.] Cloud speed and the rate of shape change for individual clouds increases with wind speed. When a cloud floats outside the view distance, another cloud is generated on the opposite side just out of view distance, so that it floats into the scene. I don't have enough material for a full post, only one video.
I took some screenshots, which look like all of my previous tiled terrain cloud screenshots because you can't see the clouds moving.
Mandelbrot Set Viewer
I implemented a Mandelbrot Set fractal viewer in 3DWorld's "overhead map view" mode for fun. I spent some time coming up with a custom color mapping that shows off the fractal pattern well. The user can pan around and zoom in and out with the mouse and arrow keys. It's implemented using double precision math so that you can zoom in further before running into precision problems. I don't think I can get good results with double precision on the GPU, so I made this run on multiple threads on the CPU. I normally get around 30 FPS at 1080p resolution, but it competes with video recording for CPU cores and ends up running at only 15 FPS in this video. A 16s video recorded at 60 FPS appears to play back at 4x the speed and lasts for only 4s. Oh well.