Skip to content

List of Project ideas for GSoC 2015

François Beaune edited this page May 29, 2015 · 40 revisions

This page lists a number of tasks we think would be appropriate as GSoC projects; however, feel free to come up with your own project if there's something that you would really like to work on but that isn't listed here.

Core appleseed Development Projects

Easy Difficulty

Project 1: Implement several small features

Many important features are by themselves too small to constitute a Google Summer of Code project, however a project could be made out of implementing many of these smaller features, with the additional bonus of increased variety and easier-to-track progress.

Here are some interesting, self-contained tasks that would fit this project perfectly:

  • Implement some of the missing features in our support for OpenShadingLanguage;
  • Improve our camera models;
  • Add new shading models;
  • Contribute to appleseed's OSL shaders library.

Our issue tracker also has a GSoC label that makes it easy to find more small tasks suitable for this project.

  • Required Skills (depending on features): C++, Python, OSL, Rendering
  • Primary Mentor: Esteban
  • Secondary Mentor: Franz

Project 2: Add support for IES light profiles

IES light profiles describe the distribution of light in luminaires. This page has more information about IES light profiles. The specification for IES light profiles can be found on this page. Many IES profiles can be downloaded from this page.

This project will require to:

  • learn about IES profiles and understand the concepts involved;
  • determine what subset of the IES-NA specification needs to be supported;
  • investigate whether some libraries exist to parse IES files;
  • if no suitable library can be found, implement our own parsing code (IES profiles are text files with a mostly parsable structure);
  • add a new light type that implements sampling of IES profiles;
  • and create a few test scenes demonstrating the results.

There are no particular difficulties. The parsing code can be a bit hairy but there are many open source implementations that can be leveraged or peeked at in case of ambiguity. The sampling code is probably the most interesting part but it shouldn't be difficult.

  • Required Skills: C++, Rendering
  • Primary Mentor: Franz
  • Secondary Mentor: Esteban

Moderate Difficulty

Project 3: Improve curve rendering

During last year's Google Summer of Code, Srinath Ravichandran kicked off the curve rendering project by implementing storage and tessellation-free ray tracing of Bézier curves.

This project is the continuation of last year's GSoC project. Here are some of the ways to extend the curve rendering functionality of appleseed:

  • Support B-splines (convert them to Bézier primitives at loading-time);
  • Support per-vertex color and transparency attributes;
  • Support curve motion blur;
  • Implement an efficient binary file format to store curves, similarly to the existing BinaryMesh format;
  • Optimize curve ray tracing using SIMD (SSE);
  • Implement a physically-based hair shading model.
  • Required Skills: C++, Rendering, Math
  • Primary Mentor: Franz
  • Secondary Mentor: Esteban

Project 4: Design a procedural geometry API

appleseed is currently lacking a way to generate geometry at render-time. This ability is central to many other features to come: particle rendering, support for custom mesh formats via plugins, etc. This is one of the most highly anticipated features.

This project will require to:

  • gather requirements from the different parties;
  • design, in cooperation with the involved parties, the actual C++ API to create polygonal meshes and to instantiate objects;
  • extend the concept of assemblies to support procedurally-defined assemblies;
  • document the API using Doxygen;
  • and create example plugins.

The biggest difficulty is probably to extend the assembly system to support procedural-defined assemblies; however this need was anticipated from the start and the current design should support these changes without pain.

  • Required Skills: C++, API Design, Rendering
  • Primary Mentor: Franz
  • Secondary Mentor: Esteban

Project 5: Rendering distance fields

Fractals, implicit surfaces and many other interesting classes of objects can be represented as distance fields. Extending appleseed to render distance fields would be a very interesting project and a unique feature compared to other open source and commercial renderers.

This series of blog posts explain well the basic ideas for this project: http://blog.hvidtfeldts.net/index.php/2011/06/distance-estimated-3d-fractals-part-i

This project will require to:

  • add a distance field primitive to appleseed;
  • add the ability to write distance fields as plugins and OSL shaders;
  • implement a ray marcher inside appleseed;
  • create some sample distance fields that can be used as a reference by users;
  • write documentation.
  • Required Skills: C++, Rendering, API design.
  • Primary Mentor: Esteban
  • Secondary Mentor: Franz

Project 6: Add support for OpenColorIO

OpenColorIO (OCIO) is an open source project from Sony Pictures Imageworks. Support for OCIO in appleseed.studio would allow the user to adjust gamma, exposure, and to transform colors of the rendered images using 3D LUT in real time.

This project will require to:

  • integrate the OpenColorIO library into appleseed;
  • make sure it builds properly on all supported platforms (64-bit Windows, Linux and OS X);
  • refactor the render widget to allow color transformations via OCIO;
  • add UI widgets to appleseed.studio to allow gamma and exposure adjustments of the rendered image;
  • optionally expose in appleseed.studio a way to load a 3D LUT and apply it to the rendered image.

More details can be found in this issue.

  • Required Skills: C++, Qt, OpenGL
  • Primary Mentor: Esteban
  • Secondary Mentor: Franz

Project 7: Integrate a Python interpreter in appleseed.studio

Integrating a Python interpreter will allow users of appleseed.studio to use scripting to generate, inspect and edit scenes and to customize the application for their specific needs.

In addition it will allow future parts of appleseed.studio to be written in Python, speeding up the development process and making it easier to contribute.

This project will require to:

  • integrate a Python interpreter in appleseed.studio;
  • import appleseed.python at application startup and write the code to make the currently open scene in appleseed.studio accessible from Python;
  • add a basic script editor and console widget to appleseed.studio using Qt;
  • allow limited customization of appleseed.studio (such as custom menu items) in Python.
  • Required Skills: C++, Python, Boost.Python, Qt
  • Primary Mentor: Esteban
  • Secondary Mentor: Franz

Project 8: blenderseed improvements

Blenderseed is a Blender addon, written by Joel Daniels, that allow Blender users to use appleseed to render their scenes. Blenderseed currently works very well, but recent developments in appleseed makes it possible to improve blenderseed even further and add support for some much requested features.

This project will require to:

  • rewrite portions of blenderseed to use appleseed's existing Python bindings;
  • implement hair particles export;
  • expose some recently developed appleseed features in blenderseed;
  • optionally, implement progressive rendering and OSL shaders support.
  • Required Skills: Python, Blender addon development
  • Primary Mentor: Esteban
  • Secondary Mentor: Franz
  • Feature Specialist: Joel

Hard Difficulty

Project 9: Add support for Catmull-Clark subdivision surfaces

The goal of this project is to add support for subdivision surfaces to appleseed using Pixar's OpenSubdiv library.

This project will require to:

  • integrate the OpenSubdiv library into appleseed;
  • use OpenSubdiv to convert the subdivision surface to a collection of patches;
  • write code to intersect rays with bilinear, triangular and bicubic patches;
  • optionally, add support for displacement mapping.
  • Required Skills: C++, Rendering, Ray Tracing
  • Primary Mentor: Franz
  • Secondary Mentor: Esteban

Very Hard Difficulty

Project 10: Implement the QBVH acceleration data structure

Ray tracing is currently the bottleneck for the majority of the scenes. Better ray tracing acceleration structures have the potential to significantly speed up rendering.

The QBVH acceleration data structure is a 4-ary Bounding Volume Hierarchy (BVH) designed for fast traversal using SIMD instructions. This paper describes the data structure in details.

We have an issue to track this feature.

  • Required Skills: Advanced C++, SSE Instructions, Rendering, Ray Tracing
  • Primary Mentor: Franz
  • Secondary Mentor: Esteban

Other Ideas

We have many other project ideas that aren't detailed yet. If you are interested in any of the following project, let us know on appleseed-dev and we'll give you plenty of additional details:

  • Importer for Arnold scene files (.ass files)
  • Implement shutter efficiency / "shutter shapes"
  • Implement particle rendering
Clone this wiki locally