利用者:Keir/TorontoDesignProjects2007

提供: wiki
移動先: 案内検索

Hacking Blender for a Design Project

The 4th year design projects which all students in ECE at the University of Toronto must complete is a great opportunity for students to contribute exciting new features on Blender, the premier open source 3D modelling, rendering, and animation program.

If you decide to work on one of these projects, your supervisor will be Keir Mierle, and your co-supervisor will be W. James Maclean.

Why work on open source for Design Project?

Most design projects, after the final report is submitted, are put on a shelf somewhere and forgotten. By working on an open source project and having your code merged, not only will your code be used by real people long after you are finished your degree, your code will also likely be improved on and extended by others in the community.

This has several direct benefits for students coming out of 4th year looking for employment. It is a major boon to show employers that you've successfully interacted with a large community of users and developers to create a non-trivial improvement to a production codebase of millions of lines of code. Straight out of school, most undergrads simply have no experience interacting with large projects with large communities and large codebases; this puts you ahead of the pack! And not only that--because all contributions are open source, the potential employer can download and see the code for themselves.

Does my code have to be merged to get a good grade?

We haven't decided this yet. The final patch submitted by the students for merging upstream will go through the normal blender patch review process (i.e. senior devs will carefully examine and test the patch). No special treatment will be given to these patches; they must meet the same standards as any other patch accepted for commit to CVS.

Requirements

  • You must be thoroughly proficient in C. Some projects may be based in C++ or Python, so you should be proficient in those languages if you intend to use them.
  • You must be willing to submit weekly progress reports and be available for weekly IRC meetings

Project Ideas

The following list provides some ideas for projects that

  1. a student coder can complete in the time frame given (hopefully not too easy, and not too hard)
  2. and implement a coveted feature request from our user community or improve upon existing code.

Applicants are also welcome to choose a project of their own design that implements a feature they wish Blender had. We especially invite students to contribute based on their past experience and competences, or based on their current research, so that they can efficiently bring in new development directions for blender.

Be warned though, some areas of the code are scheduled for dramatic architectural changes and are beyond the scope of a Summer of Code project (for example, the event refactor). With this in mind, it may be prudent for an applicant to pass ideas around on the developer's mailinglist before investing a lot of time on a proposal (see link below).

Additional project ideas may be added to this list.

Audio

  • Add sound-to-object binding to allow for the rendering of real 3D spacial-dependent surround sound. Example: a character turns his back, speaking to a wall. The sound voice escapes the mouth area, bounces off the wall, and the echoes back to the camera with lower volume and slight reverberation from the rear speakers.

Interface

  • Generic manipulator api covering current functionality and allow custom extensions, for example edit mode/manipulators for Lamps, Cameras, Modifiers, Nodes. Twiddling buttons in a panel does not lead to a natural workflow for things could be done easily and interactively in the 3D window (such as spotlight size, shadow buffer clipping, etc.).
    • This requires someone gifted in UI work and who has a good understanding of 3D programs.

Modeling

  • curve API redesign. The redesign is intended to extend the system to also handle the following: Fix the 3D twisting bug; Adaptive subdivision for render; More editing tools such as inserting a CV at a chosen place on a segment, while keeping the shape identical, and vice versa; Make the various bevel and taper features into modifiers for better control; More modifiers for curves (e.g.. the mesh ones like mirror, or a smoothing modifier); Integration with mesh modifiers like subsurf via the 'derivedmesh' output (i.e. the polygonalized result of bevels/tapers).
  • Enhancements for 'crazy space'. Editing meshes and other object types deformed by any combination of armatures, lattices, curves, etc. should be rock solid. The student that handles this must be particularly gifted, as it involves advanced geometric problems (for example, calculating an 'inverse' for a Catmull-Clark subdivision surface).
  • Object attribute transferral (like XSI's GATOR), copying data such as vertex colours, UVs, weights, between models with differing topology

Texturing

  • Texture Baking improvements, to achieve real tangent space normal maps, and bake normal maps out of higher resolution meshes.
A example of a texture made with Filter Forge
  • Improved Procedural Textures in Blender
    • There are tons of exciting possibilities here, including GPU acceleration, creation of more nodes, etc.
    • Example http://www.filterforge.com/


Animation


A complex mesh deformed by a simpler one
  • Deforming a mesh by another mesh with harmonic coordinates (very cool!). Check out the paper to see an example; basically it allows the animator to modify a simple mesh that in turn deforms a more complex mesh.
  • General usability analysis and clean up of the NLA window to provide the animator with a better working experience. Relationship of this window with the other animation editor windows should be revisited.
  • Non Linear Shape key editor, with strips and blending modes

Simulation

A fluid simulation in blender
  • Create and integrate generalized API and tools for physics and collisions in Blender, to be used for softbody, cloth, particles, rigid body, armatures.


Rendering


A example BIH subdivision
  • Improve performance of raytracing (for example, through better spatial organization). The applicant must have a solid understanding of octrees/bsp/kd-tree/etc.
    • I (Keir) have lots of experience with this, and a non-trivial implementation started which still needs significant work. See BlenderDev/BIHTree


Realistic fire rendering
  • Volumetric effects, for example smoke, fire, and whatnot.
    • The interested student should search through the past few years SIGGRAPH proceedings and find relevant papers. If you have a good paper let me know (Keir)!


  • Techniques for improved shading (final gather, caustics, subsurface scattering... global illumination in general).


Fast physically-based soft shadows
  • Render export/plugin API: extend Blender to have better access to external renderers, including pixie, aqsis, mentalray, prman, yafray, povray. The applicant should have good knowledge of the Renderman standard, and basic knowledge of yafray/povray.
  • Displacement map / normal map generation, useful for sculpt mode among other purposes


A plane rendered with Freestyle


Import/Export

  • DXF importer/exporter improvements (Python/C)
    • Add support for drawing line width/color in Blender
    • Improve blenders editing tools to work on an imported DXF file
    • Support DXF text objects
    • Improve the process of taking a DXF into Blender and making a 3d model from the 2D or 3D content for architectural rendering.
  • BVH importer/exporter improvements (Python/C)
    • Note, a BVH importer is alredy included with Blender, an exporter was also written once but is not included anymore because it only worked with a hierarchy of animated Empty's rather then an Armature
    • Write a BVH exporter that works with armatures.
    • Write an IPO curve fitting function to make imported BVH animations files easier to edit.
    • Write a tool to clean up jitter in an IPO curve (filter to improve a BVH from a motion capture device).
    • Test how well Blender is able to re-target an animation (apply the animation from 1 BVH to an existing armature) - Improve blenders animation tools for this process since BVH's are ofter used for this.
  • Second Life Exporter
  • Importer/Exporter for Blender Video Sequence editor
    Python has initial python support for the video sequence editor, import/export could allow interoperability with other video editors.

Game Engine

  • If your interest lies in real-time technologies, you could choose a project that enhances the built-in Game Engine.
  • Reintegrating Logic Bricks into a form of nodes, edited via the node editor.

Other

  • Font previews/loading - ability to see the font as it would appear in the font selection menu, similar to what is available in the gimp or inkscape.
  • Recode radiosity to be threaded, or implement techniques that improve the realism of the lighting (in a threaded way).
  • Improve 3D texture paint
    • Add projection painting to paint across seams.
    • Speed up painting by partially redrawing the screen.
    • See zbrush for more ideas

Important Links