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.

GSoC'10 Proposal for Paint System Improvements and Consolidations

Name

Konrad Wilhelm Kleine

Email / IRC / WWW

My email address is konrad @ nospam @ konradwilhelm.de. My nickname on #blendercoders is kwk. My personal web page is http://www.konradwilhelm.de.

Synopsis

The goal of this project is to improve and consolidate Blender's paint system. Inspired by numerous products like Mari or Mudbox one can think of various improvements of the paint system. Apart from these more visible improvements, Blenders painting tools need to be further generalized and stabilized.

The vertex- and weight-painting use a unified stroke system implemented by Nicholas Bishop in 2009. It automatically handles pressure data from wacom graphics tablets and radial controls like intensity. However not all paint modes use this system at the moment.

The goal of this project is to unify all the remaining paint modes (e.g. particle editing) by converting them to the new stroke system by Nicholas Bishop. After that the paint modes will be made more consistent. The latter involves porting already existing brushes (e.g. the anchored and rake brush) from the sculpt mode over to the other modes.

Benefits to Blender

Porting the remaining paint modes over to the unified stroke system lays the ground for developing new and more stable paint tools in Blender that can be shared across all paint modes. Good examples of already existing tools that will soon be available to all paint modes once all paint modes are unified are the anchored and rake brush.

Deliverables

  • (A) Paint Tool Unification
    • Unify Brush stroke system
  • (B) Share already existing paint tools code with new unified paint modes.
  • (C) Paint Tool Improvements
    • Multi channel painting
      • For example painting specular, bump and diffuse maps in one go.
    • Projection painting (this is already part of the project to improve the sculpt tools so I need to talk with the person who is working on the project.)
  • (D) Layers & Masks for textures
  • (E) OpenImageIO (OIIO) integration
    • This would add unified access to image data including access to OpenEXR files. If there will be a Ptex plugin for OIIO, Blender would benefit from this as well.
  • (F) Ptex integration (optional)

In parallel to each deliverable I will write end-user documentations on the purpose of a component and on how to use it. Every development insight that I gain and that can help to improve the painting system will be shared, too. After GSoC or whenever there is time during GSoC I can assist the unit-test people to write unit tests for the specific paint tool improvements or at least tell them what the code is supposed to do.

Project Details

During and interview with with Matt Ebb he showed me some relevant places in the code and Bishop's commits. So far the new stroke system seems pretty straight forward in terms of portability.

Project Schedule

Until May 24, before the actual coding phase begins, I will familiarize myself with the blender code base, either by fixing bugs or by beginning small test with the stroke system. I will also ask my mentor for valuable coding and debugging advices.

Until mid-term evaluation on 12th June I plan to port over at least one of the remaining paint modes to the new stroke system. I consider the first deliverable to be naturally more time consuming. After mid-term evaluation deliverables (B) to (E) shall be implemented.

Bio

My name is Konrad Kleine and I'm a Master student of "Computer Vision & Computational Intelligence" in Germany holding a Diploma in Applied Computer Science from the University of Applied Science in Iserlohn. I currently live in Spain for half a year with my girlfriend, trying to learn Spanish and writing exams (remotely) at the end of March.

I have a strong background in using and writing open source software and working for companies that produce and distribute open source software. Among them are most recently GONICUS and Trolltech (now Nokia). Over the years I've gathered an in-depth experience in software development with C, C++, Python, Qt and OpenGL in multi-platform environments. My contribution to the Blender code-base is small and only includes a patch to ‘Reset "Solid OpenGL lights" not applied after loading factory settings’ [#18252] (http://projects.blender.org/tracker/?func=detail&aid=18252). Apart from writing code I’m totally into music and love to play the electric and acoustic guitar.

I've been into graphics programming since I started my studies back in 2004 and Blender has always been inspiring me. I'm passionate about graphics and thrilled by 3D mathematics.

I'm nearly done with my studies and see my participation in GSoC with Blender as a chance to seriously get into the digital content creation (DCC) tools or graphics programming industry. I also hope that by participating in GSoC I gain a deeper insight into the Blender development and codebase and be placed in a position to help developing Blender in the future. If I get the idea behind GSoC right, it's also about finding new people to work on the project for longer than just the summer.

Here’s a list of relevant projects (either research or open source projects) I have been working on. Most of them did include a lot of teamwork, conception and programming. If a project is not about 3D it is at least about participating in the open source community.

Classification of facial expressions within video streams
The most recent student project I am working on is the classification of facial expressions within video streams. We are trying to extract facial feature points (FFPs) using cascades of Haar-based feature detectors and a set of image filters. Until now we’ve batch processed roughly 1000 pictures of 2 individuals, each expressing 7 facial emotions. The outcome is used to train an artificial neural network (ANN) which shall later aid in determining the facial expression. For more information, please visit: http://code.google.com/p/klucv2/
Multi-Touch-Display
As part of my Computer Vision 1 course, a fellow student and I constructed a multi-touch display based on Jeff Han's paper Multi-Touch Sensing through Frustrated Total Internal Reflection. As a proof of concept we implemented a photo application using OpenCV for image-based input detection and OpenGL for visualization.
GPUANN
In a team of 4 people I was responsible for the implementation and design of an application framework to train and execute artificial neural networks (ANN) on NVIDIA graphic cards using the CUDA technology. The training and propagation algorithm had to scale according to the size of a network. The networks themselves were stored as XML files that were validated formally as well as logically by the application framework.
QBIC – Play Smart!
QBIC Is basically a "four in a row" board game, except that you can place your tokens on 16 sticks. This way you can connect four tokens in 3D space and no longer on a 2D plane. The game was a final examination of three of my fellow students and me. We used OGRE as our graphics rendering engine and many other open source components like Blender for the models and The GIMP for the textures. For more information, please visit: http://sourceforge.net/projects/qbic/
Wiimote head tracking
Head tracking is a technique to provide an immersive 3D experience through aligning a displayed scene relative to your head. I was so inspired by Johnny Lee’s head tracking demonstration that I decided to code a similar one myself only using GL and Linux instead of Windows and DX. The field of view and freedom of movement are somewhat limited compared to Lee’s solution. Here’s the code: http://bazaar.launchpad.net/~konrad.kleine/wiimote-head-tracking/trunk/annotate/head%3A/main.cpp
OLPC
For the “One Laptop Per Child” initiative I’ve wrote a patch to fix a bug in Sugar. The goal was to create an archive of the past N log files during the boot sequence. With slight modifications to code formatting (http://lists.sugarlabs.org/archive/sugar-devel/2007-May/002705.html) my patch was accepted by Marco Pesenti Gritti. The python source code for the patch is on this mailing list: http://lists.sugarlabs.org/archive/sugar-devel/2007-May/002700.html
ASURO
A fellow student and I assembled the autonomous ASURO robot and programmed it with a fast yet robust path-finding algorithm.
Blender Classes
I offered various Blender classes on 3D modeling, texturing, shading and animation. I also helped fellow students of multimedia programming course which I mentored to use blender as an exporting tool for OBJ format.
Ptex
I have contributed a full-featured CMake build system to Ptex to support native compilation on Linux, Mac and Windows with IDE support as well as running the tests on Windows using a modified python script. Packaging is now also possible using CPack. Here is my ptex fork on github http://github.com/kwk/ptex.

Thanks in advance for giving me and other students the opportunity to apply for the Blender project!

I look forward to hearing from you!

Kind regards

Konrad

Kwk 11:13, 16 April 2010 (UTC)