Spring 2001 Research Work |
Goal: Add caustics and other global illumination effects to raytracing at an interactive rate. |
![]() |
So currently, my research is aimed at getting realtime global illumination effects, such as caustics and diffuse interreflections. I've got some results for diffuse interreflections from Summer and Fall 2000. Currently, I am working on getting realtime caustics. Once again, during the fall, I got caustics working in realtime for static objects (and lights). Right now I'm working on getting caustics to work for dynamic objects or lights. Below are some of my results:
![]() |
![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() the strange shadows may be due to my code which reads this object in from a file... |
Here's some images showing the problem:
![]() |
![]() |
![]() | ![]() but the movement vector is set to (0,0,0) |
Strange... Don't you just love these bugs. I hope that's the problem.
|
|
|
|
|
|
|
|
Secondly, trying to eliminate the "dancing" or flickering as the object moves from one caustic map to another is not a trivial process. Simple interpolation works well for a sphere, but when moving to more complex objects, like a cube, thre result is a "ghosting" effect where you see the main caustic brightly, and then 2 (or more, for higher level interpolation) "ghosts" resulting from the interpolation. I seem to have misplaced my images for this. I'll have to recreate them.
Finally, there's the problem with non-spherical objects that the light focuses in different distances from the object due to its shape. One idea I had to conter this effect was to take multiple (concentric) caustic maps around the object and use a least squares fit to get a better approximation of the map at different distances from the surface. So far, I've only used a linear least squares method, but it has improved the quality of the caustic on both the sphere and the cube.
![]() Least Squares Linear Approximation
|
![]() "Actual" Caustic, via Backwards Raytracing
| ![]() Least Squares Linear Approximation
| ![]() "Actual" Caustic, via Backwards Raytracing
|
| ![]() Least Squares Linear Approximation
|
![]() "Actual" Caustic, via Backwards Raytracing |
|
|
Update Wednesday, February 15: So here's some images with some higher resolution caustic maps. Once again, these use spherical maps, this time with 242 samples for light direction (so 242 maps), each 400x200, with 4,000,000 rays per map.
|
| ![]() Compare this to the caustic generated in a "standard" manner, using backwards raytracing.
| ![]() Here's the same sphere (along with others) generated using backwards raytracing. |
Update Wednesday, February 14: Right, so I've been having trouble. I tried to allow my sphere to move. It worked flawlessly with the caustic "maps" that I'd generated earlier, but when I tried to generate new ones, it screwed up. It took me a while to figure that problem out. But anyways, I now have a few new images with a *moving* sphere. The following snapshots were taken using 24 processors on Rapture. I used 18 spherical caustic maps to generate the images below. The maps are kind of grainy, I'll increase the resolution of the maps shortly.
|
|
| on Rapture, with spherical caustic maps from 18 light directions. |
Update Sunday, February 4: Here are the results from the long preprocess I recently performed. There are 50 directions (50 for the light, 50 for rays to objects, for a total of 2500 images). Each image is 200 x 200 pixels, with 16,000,000 rays shot per image. The preprocess took about 50 hours, and the resulting images up the memory requirements on the raytracer to 1207 MB. This uses 3 way interpolation, but not 9 way interpolation...
![]() 2500 caustic images, 1207 MB of memory total for rtrt, and this is the result |
![]() Here's a larger image. |
![]() An example of one of the caustic maps. Light direction & intersection direction are directly opposite each other. |
![]() Slightly more offcenter |
![]() Really off center... These side ones could use still *more* rays to look better, but the fringe pixels aren't as important (not as visible in the caustic) due to interpolation. |
Update Thursday, February 1: So, I'm getting these caustic images to look better now. The hardest part is waiting for the preprocesses to finish, since they take lots of time. Right now, one has been working away for 19 or 20 hours, and is about 2/5 done. I seriously need to parallelize this preprocess if I'm going to do too many more of these. Hopefully I'll be able to save these images and reuse them from now on.
Here's some older images that I have to post:
![]() This image is a larger size of the picture from my last update. Also, the resolution of the various caustic maps are better than they were previously (which is why the caustic is "less" blocky) |
![]() Here's a larger image of my caustics with an interpolation process so that the separate directions don't have such distinct boundaries. However, this uses few directions (18, I believe) which is why the caustic is so off-center. |
Also, as a side project (when these preprocesses are running), I wrote code to convert VRML scenes into RTRT scenes. For a ~30K polygon mesh, this runs at a decent speed (~1 fps on 2 processors). Here are some images:
|
|
Update Friday, January 26: So, I've finally gotten some results with my "dynamic" caustics. They're pretty preliminary right now, and it appears that I need to play with the resolutions of my images and some of the other parameters some more before I try testing this method on moving objects.
Right now, as usual when I start coding anything into RTRT, the code is jumbled, slow, and otherwise unoptimized (also, the framerates in the images below include debugging output to standard error, which obviously slows things significantly). Anyways, here's my early results:
![]() Here's the area caustics will appear in. This was before I got them actually working. |
![]() Here's the caustics in action... Aren't they impressive? :-) Needs more work still |
Last Modified: March 30, 2001
Chris Wyman (wyman@cs.utah.edu)