Skip to content

List of Project Ideas

François Beaune edited this page Feb 5, 2014 · 60 revisions

We are applying to Google Summer of Code 2014!

This page lists a number of tasks we think would be perfect 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.

If you are interested in applying to GSoC to work on appleseed, please get in touch with us! The easiest way is to join the appleseed-dev mailing list. We're all there, and everyone is very welcoming and reactive.

You can also join me (Franz, project lead) directly by email at [email protected].

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 tasks that would fit perfectly for this project:

  • Allow to define custom bokeh shapes using textures
  • Add support for texture transforms (allowing to translate/rotate/scale/mirror textures)
  • Implement local caching of asset files that may otherwise reside on file servers on the network
  • Add a "watch mode" to appleseed.studio that would let it reload the current project if it has changed on disk

Our issue tracker has a special GSoC label that makes it easy to find more small tasks suitable for this GSoC project: https://github.com/appleseedhq/appleseed/issues?labels=GSoC&state=open

We chose tasks that are small in scope, relatively self-contained, yet interesting and of high value to users.

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

Moderate Difficulty

Project 2: 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 feature.

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;
  • expose this API through appleseed's Python API;
  • 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 3: Add a material editor in appleseed.studio

Creating materials in appleseed.studio is currently a tedious process as the users needs to create a myriad of small entities and connect them together. This tedious workflow is due to the fact that appleseed.studio let the user directly manipulates the internal entities that constitute a scene in appleseed; however these entities were never meant to be directly manipulated.

We need a single panel user interface to create and edit materials in appleseed.studio. Behind the hood this interface will automatically create, edit and connect the internal entities of the scene. The material editor should also feature a live preview of the material.

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

Project 4: 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 5: 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.

This project will require to:

  • learn about IES profiles and understand the concepts involved;
  • 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

Hard Difficulty

Project 6: Add support for curve rendering

The corresponding issue has many details about what this feature encompasses. This project could be limited to a subset of these features.

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

Project 7: Add support for the Ptex texture mapping system

See http://ptex.us/ for more details about Ptex. We also have an issue to track this feature.

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

Very Hard Difficulty

Project 8: 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

Unsorted Ideas

  • Support of subdivision surfaces via the integration of OpenSubDiv
  • Support for displacement
  • Support for entity plugins (entities such as BSDF, surface shaders, implemented as shared libraries)
  • Implement I/O plugins to support more image/mesh file formats
  • Importer for Arnold scene files (.ass files)
  • Implement shutter efficiency / "shutter shapes"
  • Implement ray differentials, and select mip map level based on ray differentials
  • Support for particle rendering