From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Proposals for Google Summer of Code 2010

To not rate the proposals in any way here, I've ordered them alphabetically.



3D Audio

Synopsis

This project will add 3D audio to Blender. Users will be able to place speakers into the 3D scene and render their animations with positioned audio sources and velocity dependent doppler-effects.

Benefits for Blender

Blender has always been weak when it comes to audio. With the new audio system in Blender 2.5 it's getting better and 3D audio for animations would finally show what's possible with audio in a 3D application.

Proposal

Currently only the Game Engine supports 3D Multichannel audio via OpenAL. Unfortunately it's not possible to get the rendered 3D audio result out of OpenAL. For animations only the sequencer supports audio and only in stereo.

So the first task is to implement 3D audio rendering in a simliar way how OpenAL does it. This will also enable 3D audio via the other audio output backends of Blender (SDL and Jack). The next step is to add support for multichannel audio playback and ffmpeg output and the neded configuration options for this in RNA and UI. Then there'll be a new object type added to be place into the scene: A speaker which has a sound assigned. After these tasks if there's still time available I'd like to make it possible to add effects to the sounds, like echo and reverb.

Deliverables

  • 3D audio rendering (mandatory)
  • Multichannel support (mandatory)
  • Speaker objects (mandatory)
  • Sound FX (optional)

Development Methodology

Personally I prefer well documented and tested code, or let's say quality over quantity. As I have already been able to get a lot of experience in project management in the software development area, I know that it's very easy to underestimate the work to be done and how much time it takes. That's why the list of deliverables might look a little short and I categorize them into mandatory and optional targets.

Another thing that's very important to me is the user experience. I'll try to get as much people as possible to test my work and give feedback which I can build on.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Get into 3D audio rendering, reading the OpenAL soft code.
  • Implement the mandatory marked tasks from the deliverables list.
  • Implement Sound FX if there's still time available.

Why ...?

  • ... I want to do this project: I've already worked on Blender 3D audio, this would be the next huge step in this area.
  • ... I am the best for this project: I simply know blenders audio code best.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.



Game Engine API

Synopsis

The target of this project is to improve the Blender 2.5 Game Engine Python API and port Yo Frankie! to work with it.

Benefits for Blender

An improved Blender Game Engine Python API will ease game making with blender even more than it currently already is. The port of the Blender Open Game Project Yo Frankie! will show that the 2.5 BGE is ready to be worked with.

Proposal

Bringing back the whole functionality of the Blender 2.49b BGE API is the primary target. A working state will be shown by porting over Yo Frankie! to Blender 2.5. Then work will start on improving specific areas of the Game Engine. First of all this will be a Python API for the new audio system. Next possible targets are the vehicle API that needs a general overhaul for checks and documentation, improved mesh access and collision information. What I think would also be interesting to work on is to get the WiiMote working with the BGE.

Deliverables

  • Complete BGE functionality (mandatory)
  • Port Yo Frankie! (mandatory)
  • Audio Python API (mandatory)
  • Other areas (decided on by mentor)

Personally I prefer well documented and tested code, or let's say quality over quantity. As I have already been able to get a lot of experience in project management in the software development area, I know that it's very easy to underestimate the work to be done and how much time it takes. That's why the list of deliverables might look a little short and I categorize them into mandatory and optional targets.

Another thing that's very important to me is the user experience. I'll try to get as much people as possible to test my work and give feedback which I can build on.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Implement the mandatory marked deliverables
  • Implement the features as priorised by the mentor

Why ...?

  • ... I want to do this project: I am interested in game development for a long time now, that's simply it.
  • ... I am the best for this project: I'm already experienced with the Blender source code and the Blender community and have proven to finish the work I started.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.



Generic Nodes

Synopsis

The target of this project is to simplify the development of node based components.

Benefits for Blender

Many artistic workflows are very good modeled with nodes as blender already has for textures, materials and compositing. Now there's even a lot more possible to be done with nodes, like game logic, shaders and audio. This project will enable blender developers to easily add new node based systems.

Proposal

The focus of this is to implement an easy to use and extend data API for nodes, especially focused on DAGs (Directed Acyclic Graphs). Also important is the GUI for nodes where it should also be possible to add new node systems and nodes without much work. A very interesting point is making all this accessible to python, so that python plugins can also define their own nodes and even node systems.

Deliverables

  • To be specified more clearly by potential mentors.

Development Methodology

First of all this project has to be well designed. I thought about basing this project on Benoit Bolsee's work on nodal game logic and make it possibly even more generic, so that this can be used by the nodal game logic as well. I know that the scope of this project might be too huge for a GSoC project, but at least the ground work for this can be done and I will stay blender developer anyway.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

Why ...?

  • ... I want to do this project: I think this would bring blender forward and nodal audio editing would be easy to implement once this is done.
  • ... I am the best for this project: I'm already experienced with the Blender source code and the Blender community and have proven to finish the work I started.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.



Internet Services

Synopsis

This project will add internet service integration into blender.

Benefits for Blender

Integration of internet services into blender would support the biggest strength blender currently has over it's competitors: the community.

Proposal

The services will mostly be connected to blender via python scripts. There are many possibilities for services that can be added:

  • Image upload services (pasteall, imagebin, imageshak, flickr, ...) for renders and screenshots
  • Video upload services (vimeo, youtube, ...)
  • Text upload services (pasteall, pastebin, ...) for python scripts/problems, etc
  • Blend file upload services (pasteall, blendswap, ...)
  • Uploading services maybe in the other way (directly download textures, models, etc inside blender)
  • Report bugs to the tracker from inside blender
  • Plugin an HTML rendering engine for display of online help/tutorials directly inside blender as a seperate space possibly
  • Subversion from insdie blender
  • Maybe something like positing status updates of your WIP directly to twitter, facebook, ...

Especially the documentation viewing is interesting. The user can use a help hotkey like F1 for example over a specific UI element and then the online help opens with what the value there means and what are good values for specific use cases for example.

Deliverables

See the above list. Which ones are mandatory and which optional can be decided on, I'd mark the internal Documentation view, the subversion integration and the bug reporting as important for example.

Development Methodology

Personally I prefer well documented and tested code, or let's say quality over quantity. As I have already been able to get a lot of experience in project management in the software development area, I know that it's very easy to underestimate the work to be done and how much time it takes. That's why the list of deliverables might look a little short and I categorize them into mandatory and optional targets.

Another thing that's very important to me is the user experience. I'll try to get as much people as possible to test my work and give feedback which I can build on.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Implement the features as priorised by the mentor

Why ...?

  • ... I want to do this project: I think such small usability things like this add a lot of value to blender.
  • ... I am the best for this project: I'm already experienced with the Blender source code and the Blender community and have proven to finish the work I started.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.



Plugin System

Synopsis

The target of this project is implement a python plugin system for blender with the support of C/C++ modules for speed reasons.

Benefits for Blender

A good generic plugin system is something that every mature application should have. It enables further user driven extension of blender.

Proposal

This proposal is based on an idea Campbell and Brecht had. So the details would have to be worked out with those two. The basic idea is to have a python plugin system with which you can subclass different parts of blender as textures, sequencer effects or composite nodes to write your own. As python is a bit slow when it comes to heavily CPU using calculations a way to insert C/C++ functions will be implemented.

So a plugin developer would first implement everything in python and if everything works he can optimize critical parts by porting them to C/C++.

Deliverables

  • To be defined by the mentor(s).

Development Methodology

Missing yet.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Implement the features as priorised by the mentor

Why ...?

  • ... I want to do this project: This project will enable very specific tasks to be implemented with blender, that normally wouldn't go into the official release and that's a great feature, I'd like to have.
  • ... I am the best for this project: I'm already experienced with the Blender source code and the Blender community and have proven to finish the work I started.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.



Stereoscopy

Synopsis

The target of this project is to enable Blender for stereoscopic [1] usage. This includes stereoscopic modelling and sculpting as well as doing stereoscopic rendering, compositing and video export. The ultimate goal is rendering Big Buck Bunny out stereoscopic.

[1] http://www.the3drevolution.com/3dscreen.html

Benefits for Blender

3D video is one of the current buzzwords. Blender has to jump on the train to compete against other software in this area. Every 3D animation movie in todays cinemas is using this technique already.

Proposal

Stereoscopic display in the 3D View window will use anaglyph. As during modelling and sculpting the model typically has its initial gray colour there's actually no colour information that could be lost using anaglyph. As there are different colour combinations used for anaglyph like red-cyan, red-green and green-magenta I want to enable the user to choose one of those, depending which glasses he owns. This ability to choose the colours will also be added to the game engine which currently only supports the red-cyan colour mode.

On the rendering side the camera will get some settings to set up stereoscopic rendering [1]. There are two techniques how the cameras can be positioned: parallel (angle between is 180 degrees) or toed-in/verging.

NeXyon GSoC 2010 stereo far.png

NeXyon GSoC 2010 stereo near.png

The binocularity website [2] is a really good information source and also has some OpenGL examples with which I can start working.

Very important is the perceived depth of stereo images, where I found an interesting paper [3], I'll base my work on. There is also a really nice paper [4] where there are 3 different viewing areas/regions used to get the best perceived depth: FR (far region), ROI (region of interest) and NR (near region).

The stereoscopic pictures will likely be rendered out on two render layers, other ways to handle this can be evaluated though. The compositor will get an anaglyph node to get the final output as anaglyph.

Regarding output of stereoscopic video there are currently quite some different formats. Apart from anaglyph, the two frames can be interleaved, side-by-side (left-right or top-bottom) or output as seperate frames. There's also MVC (Multiview video coding) [5], an amendment to H.264. Unfortunately ffmpeg doesn't support it yet, but might until GSoC starts. Otherwise there are implementations [6] [7] already that might possibly be plugged in via python. So there'll definitely be different options to render out the stereoscopic video.

[1] http://www.binocularity.org/page19.php
[2] http://www.binocularity.org/page3.php
[3] http://www.dur.ac.uk/n.s.holliman/Presentations/EI4297A-07Protocols.pdf
[4] http://www.dur.ac.uk/n.s.holliman/Presentations/EI5291A-12.pdf
[5] http://en.wikipedia.org/wiki/Multiview_Video_Coding
[6] http://iphome.hhi.de/suehring/tml/
[7] http://research.nokia.com/research/mobile3d

Deliverables

  • 3D view anaglyph rendering (mandatory)
  • Camera and rendering code changes (mandatory)
  • Anaglyph compositing node (mandatory)
  • Stereo video output (mandatory)
  • 3 region depth rendering (optional)
  • MVC support (optional)
  • More colour modes for anaglyph also in GE (optional)

Development Methodology

Personally I prefer well documented and tested code, or let's say quality over quantity. As I have already been able to get a lot of experience in project management in the software development area, I know that it's very easy to underestimate the work to be done and how much time it takes. That's why the list of deliverables might look a little short and I categorize them into mandatory and optional targets.

Another thing that's very important to me is the user experience. I'll try to get as much people as possible to test my work and give feedback which I can build on.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Get into stereoscopic rendering, anaglyph and read the GE stereo code.
  • Implement anaglyph for the 3D view.
  • Implement the mandatory marked rendering tasks from the deliverables list.
  • Implement the remaining tasks if there's enough time.

Why ...?

  • ... I want to do this project: After watching Avatar in an IMAX cinema I want to do my best to get this into Blender. And enabling the artists to actually work in 3D with their favourite 3D application is awesome.
  • ... I am the best for this project: I'm already experienced with the Blender source code and the Blender community and have proven to finish the work I started.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.

Tablet blending

Synopsis

The primary target of this project is to improve the Blender user experience with tablets, this is graphics tablets but also tablet PCs. The target is not only to better support the caracteristics of this input device (pressure sensibility for example) but also to make it possible to control Blender mostly with pen/mouse only. One of the advantages of Blender is that the workflow is very fast using the hotkeys. If it's controlled completely via pen/mouse the workflow for sure isn't as fast, but it's easier for beginners and helps tablet and laptop users.

Benefits for Blender

This project potentially improves the User Interface of 2.5 even more than it already is compared to 2.49b. Beginners will find their way around a lot easier. Professionals will like the improved graphics tablet support and this helps in the competition against other 3D tools. It will be possible to use Blender better on mobile devices also.

Proposal

As the primary target of this project is to improve the pen/mouse UI for Blender, this project contains a lot of evaluation and user experience work. It has to be determined, how the workflow with tablets has to be. The improvements would definitely include a refactor of the input event system to (better) support tablets, pie menus and gestures. However it's hard to describe this project in detail as there is so much possible to do and all depends on a preliminary evaluation.


Pie menus

The following mockups show how pie menus could look like:

NeXyon GSoC 2010 UI add all.png

NeXyon GSoC 2010 UI add mesh.png

Once opened a pie menu is controlled without having to click, just moving the cursor over the menu entry opens the next submenu or starts the action.


Gestures

The following picture shows how gestures could work. Depending on which side the gesture is started, another action is executed. This adds a lot of possible different actions to be executed via gestures. However it's clear that for example gestures starting at the left edge cannot begin with a left movement. Also I wouldn't do gestures from the corners, because this restricts movement too much and there are already the + signs from the panels.

NeXyon GSoC 2010 UI gestures.png


Other UI updates

The following mockup shows how the UI for sculpting could be improved for tablet users

NeXyon GSoC 2010 UI sculpt.png

In the left upper corner you can see a typical pie menu. The widget to the right is for viewport navigation. A click on one of the navigation zones starts that navigation action until the click is released. A click outside the widget closes the widget. Below the pie menu you can find a brush settings widget which works quite similar: clicking into one of the circles and dragging changes the setting.

Deliverables

  • Ghost/Input event system adoptions
  • Pie menus
  • Gestures
  • UI improvements

Development Methodology

During this project I want to keep in touch with the Blender user community very much, as the user interface is just for the users and they know best what to improve. So the blenderartists.org forum will be very important for the work, gathering feedback.

To enable users to often test development updates and give feedback, this project implies that I will often put builds on graphicall.org so that users always get the latest development updates.

Schedule

I will start working on April 26 right after getting accepted. As the semester runs during this time I won't be able to work fulltime on the project and will even have less time at the end of June because of all exams taking place at this time. But after exams when summer holidays started I'll work fulltime on the project.

  • Get into ghost and the input event handling code and improve it.
  • Implement pie menus.
  • Implement gestures.
  • Work on the UI design together with the users.

Why ...?

  • ... I want to do this project: I ordered a tablet PC (am still waiting for it to be delivered at the time of writing) and I'd like to use Blender on it without having to use a keyboard.
  • ... I am the best for this project: I like staying in contact with the users and improve the usability of Blender and I have a lot of endurance as I showed working on a non-loved part of Blender.
  • ... I'm interested in Blender: Coming from the game development area I found Blender being an awesome 3D tool I will never want to stop using.

About me

My name is Jörg Müller, I'm 21 years old, from Austria and study telematics at the Graz University of Technology. You can contact me via mail nexyon [at] gmail [dot] com or directly talk to me on irc.freenode.net, nickname neXyon.

In 2001 shortly after getting internet at home I started learning Web Development, HTML, CSS, JavaScript, PHP and such stuff. Soon after that in 2002 I got into hobbyist game programming and as such into 2D and later 3D graphics programming. During my higher technical college education I got a quite professional and practical education in software development also including project management also doing projects for external companies. During this time I also entered the linux and open source world (http://golb.sourceforge.net/). Still into hobbyist game development I stumbled upon the Blender game engine and was annoyed that audio didn't work on my system. That's how I got into Blender development, I am an active Blender developer since summer 2009 now, where I mainly worked on the audio system.

In my spare time apart from that I do sports (taekwondo, swimming, running), play music (piano, drums) and especially like to go to cinema.

  • 09/2003 - 06/2008 Higher technical college, department electronic data processing and business organisation
  • 07/2008 - 12/2008 Military service
  • 01/2009 - 02/2010 Human medicine at the Medical Unversity of Graz, already doing curses of Telematics at the Graz University of Technology
  • 03/2010 - today Telematics at the Graz University of Technology