About volumetric caustics.

Practical and theoretical implementation discussion.
shiqiu1105
Posts: 138
Joined: Sun May 27, 2012 4:42 pm

About volumetric caustics.

Post by shiqiu1105 » Wed Nov 13, 2013 5:08 pm

Hi,

I am trying to render an underwater scene, where volumetric caustics due to the water surface dominates.

What is the best approach for this kinda of effect?

I already have a Bidiretional path tracing running in my ray tracer, but some related projects that I found online uses volume photon map.
http://www.smallvcm.com/ seems to suggest that photon map is not as efficient when capturing diffuse and glossy reflection compared to monte carlo approaches like BDPT. But I also know that photon map is general less noisy, so how should I judge these two kinds of algorithms?

And, any suggestion or resources on volume caustics would be very much appreciated. Thanks!

friedlinguini
Posts: 89
Joined: Thu Apr 11, 2013 5:15 pm

Re: About volumetric caustics.

Post by friedlinguini » Wed Nov 13, 2013 7:37 pm

You might take a look at Wojciech Jarosz's (no idea if that's the right way to write the possessive. :-) ) work (http://zurich.disneyresearch.com/~wjarosz/publications/). A lot of it is photon map-like structures specialized to volumetric scene elements. Listed in that link is also a hot-off-the-presses paper in SIGGRAPH Asia about importance sampling that seems more applicable to BDPTs, though one snippet ("Though our method outperforms existing techniques in all our tests, we obtained less benefit in scenes with a combination of caustic paths and surface-to-media transport") might not bode well for your particular use case. I haven't looked at it too carefully yet.

ingenious
Posts: 282
Joined: Mon Nov 28, 2011 11:11 pm
Location: London, UK
Contact:

Re: About volumetric caustics.

Post by ingenious » Wed Nov 13, 2013 7:58 pm

Since VCM subsumes BPT, it should not perform mich worse than pure BPT in such a setting. Actually, for directly visible volumetric caustics BPT is usually quite good.

When volumetric caustics are seen through a reflection or refraction, though, BPT almost breaks down. Traditional photon mapping is not super efficient in this case either, however it can help, so VCM is worth the shot here too. But generally, Wojciech's beam radiance estimate can be much better, and his beam-beam estimates improve even further.

While the joint path sampling adds more volume sampling techniques to BPT, it helps mostly in the "non-specular indirect" (double-scattered) illumination from such caustics, i.e. for LS*DDS*E paths. It won't help much for LS*DS*E paths.
Image Click here. You'll thank me later.

zsolnai
Posts: 24
Joined: Thu Mar 15, 2012 1:49 pm

Re: About volumetric caustics.

Post by zsolnai » Thu Nov 14, 2013 9:58 am

Hi there,

we have some experience rendering scenes with volume caustics. Here on the first page you can see that bidirectional path tracing + the primary sample space metropolis [1] does a reasonably good job at it compared to bdpt with naive sampling techniques:
http://cg.iit.bme.hu/~zsolnai/gfx/adapt ... mental.pdf

If reimplementing Wojciech's work is not a possibility, this is a reasonably simple approach to implement. There is an excellent implementation of it in LuxRender and Mitsuba, and I also have a 300ish line path tracer with Metropolis sampling. If you need it, just drop me a line.

[1] http://sirkan.iit.bme.hu/~szirmay/paper ... tronic.pdf

ingenious
Posts: 282
Joined: Mon Nov 28, 2011 11:11 pm
Location: London, UK
Contact:

Re: About volumetric caustics.

Post by ingenious » Thu Nov 14, 2013 10:46 am

zsolnai wrote:...and I also have a 300ish line path tracer with Metropolis sampling. If you need it, just drop me a line.
Drop.

Seriously, if you have a "SmallMLT", please do consider releasing it publicly. Both you and the community will benefit ;)
Image Click here. You'll thank me later.

zsolnai
Posts: 24
Joined: Thu Mar 15, 2012 1:49 pm

Re: About volumetric caustics.

Post by zsolnai » Thu Nov 14, 2013 10:58 am

Hi there everyone,

it is available here:
http://cg.iit.bme.hu/~zsolnai/gfx/smallpaint/

It seems that it also has a simple BVH implementation included therefore it's a bit "fat", that is, being 800ish lines with lots of comments (effective lines of code is however a lot less than that). Please note that I have had very limited time to test it, therefore I would definitely not claim it's perfect. It might as well be even broken. If any of you happen to improve it in any way, I'll be happy to update it.

shiqiu1105
Posts: 138
Joined: Sun May 27, 2012 4:42 pm

Re: About volumetric caustics.

Post by shiqiu1105 » Thu Nov 14, 2013 3:24 pm

Guys, thanks for the help.

I also found a project online here: http://www-graphics.stanford.edu/course ... index.html
which uses volume photon mapping and the result seems pretty good.

I have never written a MLT before and I heard it's hard.
I guess I will go with the easiest and quickest way for now... still deciding.

Dade
Posts: 206
Joined: Fri Dec 02, 2011 8:00 am

Re: About volumetric caustics.

Post by Dade » Thu Nov 14, 2013 3:52 pm

shiqiu1105 wrote: I have never written a MLT before and I heard it's hard.
I guess I will go with the easiest and quickest way for now... still deciding.
It is quite a false myth, a Metropolis sampler require something like 150 lines of code: http://src.luxrender.net/luxrays/file/e ... r.cpp#l138

toxie
Posts: 118
Joined: Mon Nov 28, 2011 12:30 pm
Location: germany
Contact:

Re: About volumetric caustics.

Post by toxie » Thu Nov 14, 2013 4:38 pm

But that doesn't include all the additional mumbo-jumbo that the rest of the renderer has to support to make it "simple" like this..
Better you leave here with your head still full of kitty cats and puppy dogs.

friedlinguini
Posts: 89
Joined: Thu Apr 11, 2013 5:15 pm

Re: About volumetric caustics.

Post by friedlinguini » Thu Nov 14, 2013 5:31 pm

What mumbo-jumbo is that? Kelemen-style MLT doesn't require much. You need to to feed sample results back to the random number generator, and let the thing warm up a bit to generate an average intensity and eliminate start-up bias. Otherwise it's not really any more complicated than, say, replacing a naive RNG with a QRNG. Is there something else?

Post Reply