From BlenderWiki

Jump to: navigation, search

Synopsis

The Bullet Physics Engine (bulletphysics.org) is rapidly gaining popularity for use in high-end 3D-production software, studios, and game productions. Currently Blender’s Bullet support is limited baking Game Engine simulation runs, with limited interaction with standard animation features. This project aims to bring innovative and natural setup methods for Bullet simulations in Blender, well integrated into the animation system.

Benefits to Blender

Blender’s current support for Bullet simulations is limited and difficult to setup, requiring baking the motion data from Game Engine simulations, and setting up simulation systems with non-intuitive parameter panels. Furthermore, there are few provisions for fine-grained manipulation of the simulation for artistic control over the final results. This project aims to mitigate both of these problems, by providing a more well-integrated solution with nicer visual feedback.

As one of the few 3D-production suites capable of well-defined Bullet integration without requiring plugins, Blender will be a more viable solution for studios and individuals considering simulation work like this.

The system set up as part of this project may be a good framework on which other physics toolkits will be able to be integrated with Blender.

Project Details

This project will need to be carried out in a number of phases:

  1. Research into the capabilities of Bullet, and how these are typically exposed in other apps which have done this before (namely Cinema4D, and ‘Dynamica’ for Maya). Focus is on what we need to support, and the baseline from which we aim to better!
  2. Integrate Bullet evaluation into Blender’s evaluation loop. Support for considering interaction of keyframes with this is critical.
  3. Manipulator Widget API for creating custom manipulators in the 3D view as necessary
  4. Use of the Manipulator Widget API and the Bullet support to create a multitude of suitable and novel control schemes

The major focus of this project is on allowing a natural and as visual as possible (as opposed to abstract relationships defined in terms of spreadsheets of parameters) interface for setting up and controlling Bullet simulations. Design work done in phase 1 may impact on phases 3 and 4, where a different approach may be considered based on design decisions.

Deliverables

Basically, these have been listed in the Project Details section, but will be repeated here for clarity.

  1. Bullet integrated into Blender’s evaluation loop, with support for interaction with keyframe animation (and from other sources too).
  2. Manipulator Widget API for creating custom manipulators in editors as necessary
  3. Control schemes for setting up and controlling elements of Bullet simulations using the Manipulator API as well as existing tools
  4. A guide to setting up Bullet simulations in Blender, demonstrating basic operation.

Schedule

Living in the southern hemisphere means that this is more of ‘Winter of Code’ than summer. For the first and last few weeks of the programme, I will have a less time to work on this project, due to term dates (including an exam period near in mid-late June). However, I’m free to code all Fridays and for substantial parts of the weekends during this period as well.

For the first half of the programme, I’ll be working on the first two phases. I anticipate that the phase 2 will take the longest time to perfect. In the second half, I’ll set up the manipulator API, and use this to setup visual control mechanisms as appropriate. Bugfixing will also occur in parallel with this phase (as opposed to this being done as a separate chunk at the end).

Bio

I am currently studying in the second year of a Computer Science degree at the University of Canterbury in New Zealand. I have been an active member of the Blender development team for the past 3-4 years, having initially joining the development team to implement a few features I wanted while animating. During this time, I’ve been primarily involved in the development and maintenance of Animation tools. In particular, I was responsible for the complete design and implementation of the Animato animation refresh project [1] in 2009, the Grease Pencil freehand sketching and flipbook annotation tool in 2008 [2], and a Constraints system refactor in 2007 [3]. As part of the Animato project, I successfully worked on a redesign of the NLA system as a GSOC project in 2009 [4].

I have extensive knowledge of C (4+ years) and Python (6+ years), having taught myself to program in these languages and a few others including Visual Basic, LaTeX, GraphViz ‘Dot’, and HTML since 2002. Additionally, I’m now fairly familiar with Java and Matlab from various coursework. In addition to my work on Blender, I’ve worked on a system to automatically generate classical music compositions with minimal user input, and a few utility scripts for assorted tasks ([5] and [6]).

Apart from software development, my interests include Violin performance, in which I’ve gained DipABRSM (2006), LTCL (distinction, 2007), and FTCL (2008) diplomas.

[1] http://wiki.blender.org/index.php/BlenderDev/Blender2.5/Animato [2] http://www.blender.org/development/release-logs/blender-248/grease-pencil/ [3] http://www.blender.org/development/release-logs/blender-246/constraint-improvements/ [4]http://socghop.appspot.com/gsoc/student_project/show/google/gsoc2009/blender/t124021852198 [5] http://code.google.com/p/dbcskit/ [6] http://code.google.com/p/physlabtools/