Jump to content
  • Advertisement
Sign in to follow this  
musawirali

Real-time Caustics Rendering

This topic is 4810 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

This summer I have been working on rendering caustics in real-time. I have developed an algorithm which I call "Caustics Mapping". Caustics Mapping is a physically based real-time caustics rendering algorithm. It utilizes the concept of backward ray-tracing, however it involves no expensive computations that are generally associated with ray-tracing and other such techniques. The main advantage of caustics mapping is that it is extremely practical for games and other interactive applications because of its high frame-rates. Furthermore, the algorithm runs entirely on graphics hardware, which leaves the CPU free for other computation. There is no pre-computation involved, and therefore fully dynamic geometry, lighting, and viewing directions are supported. In addition, there is no limitation on the topology of the reciever geometry, i.e., caustics can be formed on arbitrary surfaces and not just planar ones. Lastly, the caustics mapping algorithm does not hinder the rendering of other optical phenomenon, such as shadows, and hence can be integrated into current rendering systems easily. For results (images and video) and more information, please visit the project home page at http://graphics.cs.ucf.edu/caustics Thanks

Share this post


Link to post
Share on other sites
Advertisement
That's pretty cool! I've been thinking of something that appears similar to what you're doing. Basically you render the caustics just like how you would a shadow map, except you also generate colour information as well. In this case corresponding to how light would pass through the object, creating the caustic. I've seen the same thing done to project the colour of a transparent object onto what's behind it. All it would take is a more sophisticated algorithm to compete caustics through some simple and fairly fast pixel shader ray tracing to get what you have. Is this what you are doing? And if so, do you deal with caustics passing through multipule objects?

Share this post


Link to post
Share on other sites
Looks good. Is the paper publicly available yet? I wouldn't mind incorporating something like this into my latest gfx project.

Share this post


Link to post
Share on other sites
Thanks. The paper has been submitted for publication ... and due to that I cannot say anything about the actual algorithm right now :P Dudemlester, I think what you are talking about is what ATI guys did last year in their demo at SIGGRAPH. Which is basically just shadows, but with color ... just like you said. My algorithm is different, most importantly in the sense that is it physically based .. it actually estimates the light transport. Sorry I can't give out any more details at the moment, but I will have a demo application executable up soon so that you can play around with it.

Share this post


Link to post
Share on other sites
oh and it is not an optimized ray-tracer or photon mapping implemented on the GPU :P those things would still be slow and not reach the frame-rates that I was able to squeeze out.

Share this post


Link to post
Share on other sites
Cool, can't wait to check it out! Actually Humus.ca is where I first saw it http://www.humus.ca/index.php?page=3D&ID=39, and the date on that is 2 years ago. Then again Humus is an ATI guy, so close enough.

Share this post


Link to post
Share on other sites
Right. As you can see in his image, the "caustic" is simply a projection of the refractive surface. If you look at my images, the shape of the caustics is different than that of the object that causes it.

Share this post


Link to post
Share on other sites
hmm...how's the memory usage on that algorithm? Also, how does it scale as the number of lights increases (assuming it's a per-light algorithm)

Share this post


Link to post
Share on other sites
Memory usage is negligble. In fact, I don't think memory usage is even an issue. Like I said in the description, there is no pre-computation involved and thus there is no need to store and load any extraneous information. The entire algorithm executes every frame. The system supports point and directional lighting. Environment maps are not yet supported, but we're working on it as a possible extension to our algorithm. I suppose you were talking about point (or omni directional) light sources. In that case, the algorithm scales linearly with the number of light sources.

Share this post


Link to post
Share on other sites
I'm aware that it's all precomputed, but surely you have to somehow store data that is generated per frame, like in shadow mapping. THAT is the memory usage I'm wondering about.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!