Current stable version: 0.1.1

Progressive Photonmapping

 

Personal Information:

 

 

 

  • Name: Li Rui
  • E-mail address: diyer2002@gmail.com

 

 

 

Idea to implement:

 

 

 

  • Synopsis and Goals:  The project will implement the Progressive Photon Mapping algorithm for the yafaray, which will make yafaray's Photon Mapping technique more progressive and efficient. The trandition PM is a two-pass algorithm which can only emit limited photons due to the limited memory. The PPM and SPPM are  both multipass algorithms, so they are superior to the trandition PM for that they can emit photon as many as you want, which can let the radiance estimate more convergence to the correct result and saving a lot of memory usage.

 

  • Detailed description: As it is a rendering algorithm. I'll mainly implement an integrator plugin which extends the integrator interface. And I'll define new parameters' interface to work together with the GUI component. The SPPM algorithm is a extension to the PPM algorithm, and it can effective render distributed ray tracing effects, such as depth of field, motion blur, and glossy reflections. So I decide to implement the newer version. The basic work flow of SPPM is list below:

         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.

  • Workflow and Usabitily: User use the same way as any exist "Lighting Method" plugins. Beyond many of the same parameters as the Photon Mapping, user can set the parameters to control the raytrace pass and photon tracing passes, etc, the interative times.
  • Temptative schedule: The project will take about three months. I can start it right after I am accepted. The tentative timeline is list below:

 

  1. Study the sourcecode of yafaray and read the document: take about 10 days [partially done]
  2. 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]
  3. implement the prototype system: take about 10 days
  4. integrate and optimize the system iteratively : take about 20 days.
  5. Do the work to integrate the plugin with the GUI and XML component: take about 15 days.
  6. fix bugs: take about 10 days
  7. Write the end-user document: take about 10 days.

 

Bio:

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/