Ideas Page

The Ideas Page is an original concept of the Google Summer of Code program. We have decided to keep the Ideas Page up and permanently accessible to inspire developers who might be interested in collaborating with the YafaRay project, for our future application to the GSoC program and as a source of inspiration for ourselves about cool features to implement. We had tried to keep a balance between challenging ideas and practical feasible tasks. This ideas page is a starting point though; as a developer you can expand on a proposed idea or make your own blue-sky proposal not mentioned on this ideas list at all. Our bugtraker could be a good source of inspiration too.

1. Photon mapping projection maps.

Description: YafaRay does not implement a method for light sources to know where to shoot photons at. This poses a problem in highly focused photon map types like caustics and volumetric (SSS) mainly when an arealight type (area, sphere, meshlight, IBL background) is used. In order to concentrate the flow of photons on the most important areas, photon mapping creator Henrik Wann Jensen has suggested on his papers creating projection maps, which are typically implemented as bitmaps warped onto a bounding shape for the light source, where each bit determines whether there is geometry of importance in that direction.

Comparison between caustics maps produced by an arealight (right) and a spotlight (left)

Goals: Increased efficiency of photons shooting in caustics and volumetrics photon mapping, improved SPPM as well.
Mentor: Rodrigo Placencia Vázquez a.k.a Darktide
Difficulty: medium
Requisites: C++, maths for 3D and computer graphics.
References:

2. Materials & textures support in the Google Sketchup exporter.

Description: Finishing a good Google Sketchup exporter is one of the main priorities for the YafaRay project right now. We believe that it would be great if we can expose the YafaRay engine to a new community of users with a different minset about lighting and rendering. We need to get past the stage of being just a Blender extension and become a true cross-application free rendering engine. Google Sketchup is the most obvious target for many reasons, the most glaring one is the fact that at the moment Google Sketchup users are stuck with freeware or commercial engines for rendering, such as Kerkythea (not developed anymore), Indigo, Maxwell and V-ray.

There already exist a first version of the exporter which is able to export geometry. The developer’s task would consist in supporting YafaRay materials and textures in the exporter, with preview tools.

Screenshot of the YafaRay exporter for Google Sketchup

Goals: Providing Google Sketchup users with a free open-source render engine alternative. Providing the YafaRay project with a new users base.
Mentor: Alexander Smirnov aka Exvion
Difficulty: medium
Requisites: Ruby, JavaScript (jQuery). Previous knowledge about 3D and Computer Graphics will help a lot.
References:

3. Multi-dimensional sampling.

Description: Multidimensional sampling is a new adaptive sampling strategy for ray tracing. This technique is specifically designed to handle multidimensional sample domains, and it is well suited for efficiently generating images with effects such as soft shadows, motion blur, and depth of field. These effects are problematic for existing image based adaptive sampling techniques as they operate on pixels, which are possibly noisy results of a Monte Carlo ray tracing process. This technique operates on samples in the multidimensional space given by the rendering equation and as a result the value of each sample is noise-free. Multidimensional sampling can reduce the amount of needed samples drastically, depending on the scene.

Goals: Exploring new advanced raytracing techniques.
Mentor: Bert Buchholz
Difficulty: middle/hard
Requisites: C++, maths for 3D and computer graphics.
References:

4. Texture Synthesis from Examples

Description: Image textures are usually applied on an object by repeating it over the surface. This can lead to ugly artifacts at the seams or obvious repitition patterns. Example-based Texture Synthesis uses a small image but instead of simply repeating the same image, the example is analysed and new parts are synthesized leading to a natural spread over the surface without repitition.

Goals:
Texture Synthesis would allow YafaRay to provide better algorithms instead of simple texture repetition and thus lead to higher quality renders.
Mentor: Bert Buchholz
Difficulty: not too hard, but certainly not as easy as pie
Requisites: C++, computer vision knowledge
References:

5. Raytraced motion blur.

Description: Motion blur is one of the long-standing request for the YafaRay engine. Without motion blur it will be difficult for YafaRay to ever reach the status of a production-ready engine for CG animations. It is difficult to implement motion blur in any raytracer not built from the ground up for that purpose, because it requires changes through all the source code. The YafaRay engine has no concept of motion or time; even the XML scene format would need a redesign to support it. We are looking forward to a basic working prototype, using a basic set of rendering structures, that could be later expanded to a full implementation inside the YafaRay engine. There are several approaches to reproduce motion blur in raytracing, for instance the one commented on the idea number 3, called "multi-dimensional sampling".

Goals: Implement raytraced & geometry based motion blur and camera motion blur.
Difficulty: Hard
Requisites: C++. Previous knowledge about 3D Computer Graphics and physically based rendering methods will help.
References:

 

FAQs about getting involved.

We have compiled several FAQs about getting involved in the YafaRay project:

What is the purpose of your project?

- Providing users with a free open-source perdurable alternative to commercial raytracing engines.

How long have the project been going on?

- The YafaRay project has been going on since 2001.

Why should I collaborate?

- We believe that the common good shouln't be the first and only reason to collaborate with a project like YafaRay. There should be always a personal interest in the matter; either is good for your career, you would like to know how a raytracer works or you want to improve on your hobby by collaborating with us. The common good purpose contained in the GPL license is always a collateral fact of a higher principle: collaborate and share only it is good for you in the first place.

What do I get in return?

- This will mainly depends on your expectations and what you are able to make out of your time with us. For instance, it is a known fact that many coders have been able to land a job in the computer graphics industry thanks to their experience as developers of FOSS raytracers. Personally I can say that getting in all the information needed and then writing the documentation of the YafaRay engine has helped me to understand how a montecarlo raytracer actually works. I have been invited to give speeches and lessons on YafaRay several times. In 2010 some YafaRay developers attended the Google Mentor Summit at Googleplex in Mountain View, California, which was a very nice eye-opening experience. If you let it happen, collaborating with a FOSS project can change your life.

When is right for my collaboration to stop?

- At anytime. Developers have no obligations, only the resposability to make it as easy as possible for new developers to carry on with the work done, by commenting and documenting the code. Developers usually keep involved for around two or three years;  some of  them then disappear for ever, others keep in touch for occasional input or to help with GSoC mentoring tasks. There are several people who have been able to collaborate for more than three years though.

How do I get in contact with the existing development team?

If you are a developer interested in the ideas posted on here and you would like to contact us, these are a several ways to contact us:
YafaRay repositories: http://github.com/YafaRay
YafaRay IRC room: irc://irc.freenode.net/#yafaray
Mailing lists: http://www.yafaray.org/development/mailinglist
Getting involved: http://tinyurl.com/4qstx5s
About us: http://www.yafaray.org/about