1. Do the first eye ray trace pass to initial the initial the basic parameters(inital radius. BBox)
Build accumulativemap, and set their inial values.
2. Do a Photon emit pass
Build a photon map
3. Do a distrubute eye ray trace pass
Build a hitpoint map
4. Progressive refine the radiance estimate result
Use the photon map and hitpoint map to update the accumulative map
5. Rendering
Use the accumulative map to do the radiance estimate and render the result.
6. Loop step 2 - step 5, until the predefined pass number reached.
Some basic thoughts to implement it for the yafaray:
- preprocess() : do the step 1.
- render() : do the step 2 - 6.
To make the development process more controllable, I decide to use iterative development. Firstly, implement a prototype system which integrate the yafaray system loosely, then integrate and optimize the system iteratively.
- Study the sourcecode of yafaray and read the document: take about 10 days [partially done]
- Read the reference papers and talk with mentors to see how to design the algorithm to better integrate with yafaray: take about 10 days [partially done]
- implement the prototype system: take about 10 days
- integrate and optimize the system iteratively : take about 20 days.
- Do the work to integrate the plugin with the GUI and XML component: take about 15 days.
- fix bugs: take about 10 days
- Write the end-user document: take about 10 days.
My name is Li Rui, I'm a graduate student of Graduate University of Chinese Academy of Sciences. My major is Computer Graphics and I am focusing on realistic rendering.
Programming skill
As a bachelor student of software engineering, I've learned C/C++, Java, C#, Python and many libraries. And C++ is my mainly used language now. I've done a lot of programming work during my study. As many other people, I like play PC games, and want to know how they are implemented, so I began to study Directx, OpenGL, Ogre, PhysX and many other CG realated techniques. I'm familar with these techniques now and I've made several Demo using them. [1] is a Point-based Rendering Demo which implements a efficient software-based rendering algorithm. [2] is a PC-human gobang game writen by python and used pygame as the GUI lib. [3] is basket-ball simulate Demo use Ogre as the rendering engine and PhysX as the physics engine.
Raytracing and Photon Mapping Background
As a Computer Graphics researcher, I know realistic rendering is one of the most important task of CG. I've learned Ray tracing by the book "Ray tracing from ground up", "Physically Based Rendering: From Theory to Implementation" [4] and I've implemented a raytracer follow the instruction in the first book and studied PBRT's code as well. So I think I am familar with the algrotim and satisfied the needs to do the job.
For Photon Mapping, I learned photon mapping theory by the book "Realistic Image Synthesis Using Photon Mapping", and have integrated its Photon Mapping code into my raytrader. I've also read many papers on how to render caustic in real-time, mainly based the work Wyman have done [5], and implement some of the algorithm.
Idea thoughts
It is the GSoC let me get to know the Yafaray project. After several days of contact, Yafaray give me a deep impression not only by its poweful software feature it has implmented but also by its well-organized and active community. I have to say the yafaray team have done a greate work. During the time I prepare the proposal, the community give me a lot help and I've learned a lot. It is my honor if my proposal can be accepted.
Photon mapping is an elegent method to resovle Global Illumination which I think is the most important one among all the raytraced-based methods now, for that many other algorithms depend on it. As newly developed version PM algorithms, PPM/SPPM propose a new architecture to implement photon mapping more efficient and robust, I think it is worth to implement it for the yafaray.
For the reasons listed above and also for my background, I decided to apply for Progressive Photon Mapping idea. I've finished read the reference papers [6] and [7], and I've also read the source code of SPPM written by the author. With the help from yafaray community, I am sure I could implement this project well.
Below are the images rendered by my raytracer, and your can find its source code at [8].
the images is at http://hi.baidu.com/diyer2002/album/%B9%E2%CF%DF%B8%FA%D7%D9
[1]: http://code.google.com/p/pbrdemo/
[2]: http://code.google.com/p/rygobang/
[3]: http://code.google.com/p/physx-simulation/
[4]: http://www.pbrt.org/
[5]: http://www.cs.uiowa.edu/~cwyman/pubs.html
[6]: http://graphics.ucsd.edu/~henrik/papers/progressive_photon_mapping/
[7]: http://graphics.ucsd.edu/~toshiya/sppm.pdf
[8]: http://code.google.com/p/rytracer/