Corona and Research?
We would like to introduce a new chapter on our blog, which we simply call “Research corner“. As you might know, Ondrej and Jaroslav are not only great programmers, but also researchers. They have published many interesting studies and achieved great results in the academic field. We have decided to occasionally publish interesting news and articles from their research on our blog in hope to spark more interest in “what’s really under the layer of C++ code”
In the rest of this article, Ondra describes the latest project he had worked on.
Rendering with progressive importance sampling
Yesterday, another paper from our research group went online, bearing the sexy name “On-line Learning of Parametric Mixture Models for Light Transport Simulation“. It features a novel method for accelerating difficult scenes rendering. I have worked on it as second author, and implemented the method in Corona. Although the implementation is not production-ready, and unavailable to the public (it is not included in public Corona releases, not even in daily builds), I hope it will spark some interest of the more geeky artists out there and show you a possible future development.
What is it all about?
While the paper is written in a very technical way (which is a necessity for its results be to verifiable and reproducible) the basic idea is not that complicated. It helps with rendering of scenes with very complicated visibility. Think something like room with small windows, but worse.
Let’s illustrate the principle on the simple case of path tracing: We first create a photon map, but instead of rendering it directly we use it in a much smarter way – to do better importance sampling. Instead of displaying the illumination from the map we guide the regular path tracing towards the illumination sources in the map – for example the small windows. This provides much better importance sampling and drastically reduces the noise. It works nicely for some cases, but as we have found out it is not enough for the really difficult scenes, such as this classical test scene, with all light coming through the narrow door opening:
We were just unable to get any photons in the area we wanted. You might remember this from your pre-corona days – spending multiple minutes in the photon emission phase just to see most of them wasted in the outside vegetation.
We had to go further, so we added an importon map.
What are the importons?
Importons are just photons emitted from the camera. We first trace importons, then use them to guide photons, then use photons to guide path tracing. Better, but still not enough. To really make this work with any scene we had, we had to iterate the process.
So importons -> photons -> importons -> photons -> …. -> photons -> path tracing.
We call this the ping-pong method. With each step, the guiding gets better, and more particles get to the important areas, which makes the next step even better. The process accelerates itself! And since the photon map is not used directly, it remains 100% unbiased.
Why is it useful
This paper demonstrates, that the rendering is not a solved problem, and sometimes there are still huge speedups possible. While it is only experimental and not available to public in Corona, there were several important features implemented in Corona as a side-effect when I was working on the paper – namely bidirectional path tracing, vertex connection and merging, better random sampling, and more. The method itself might appear in some future release for example to act as a fully automatic replacement of environment portals.
The paper got accepted to the SIGGRAPH 2014 conference, so my colleague and main author of the paper, Jirka, will present it there. I am also attending to present a talk about usability issues in Corona. So feel free to visit us at SIGGRAPH, list through the paper, or try the nice interactive comparisons demonstrating the benefits: 1 2 3. And most importantly, remember, that rendering is magic, and science is fun ;).