2.5 screenshot, May 2009, new buttons system

Roadmap

Roughly the Blender 2.5 project has the following phases:

  1. Redesign of internal window manager and event/tool/data handling system.
  2. Porting over old code to clean-up and match the new design.
  3. Bringing tools and editors back using new event system and 'operators'.
  4. Redesign and implement UI context, workflow and visual representation.
  5. Design and implement the new Python API.

The first two phases are nearly complete, the third phase is about 70% done. The March-August period will be mostly devoted to steps 4 and 5.

Below you can find a summary of highlights. More reading can be found on the developers wiki for the 2.5 taskforce team.

May 2009: Guided tour through all new 2.5 features. (Made by Micheal Fox)
June 2009: Guided tour through latest 2.5 features. (Made by Pablo Vazquez)

Blender 2.5, november 2008

The new Window Manager replaces the old IrisGL and Glut wrappers (10 years old!). It now allows multi-window setups and unlimited further area subdivision. The WM provides generic support for custom (paint) cursors, gestures, lasso, borders etc. It now also has standard triple-buffer support, not only solving draw errors on cheaper graphics card, but also enabling multi-layered composites for fancy UI tricks.

Events are now centrally managed, using full dynamic handler queues. All tools, also 'temporary modal' tools like transforming objects, are managed centrally via handlers. This keeps the UI alive and responsive during all circumstances (like using pulldowns while anim playback).

Blender now uses a system derived from the "MVC" model, strictly separating event handling from drawing. It has been designed to better support external devices, or even multi-touch input in the future.

While starting up the 2.5 project, we quickly found out that not only tools (Operators) should get generic access, but actually also all internal data and its relations. This resulted in a wonderful new library - nicked "RNA" - that's now in use in Blender everywhere. You can see it work in the fully automatic generated "data viewer", but it's also used for Operator properties, Menus, Function Curves, and will enable a full automatic generated Python scripting API for Blender data and its tools.

Blender's new animation system allows to add a Function Curve to any property. The new Graph Editor (formerly Ipo Curve Editor) enables to view, browse and edit any collection of function curves, including all the curves of an entire scene!

 

 

Threads Job Manager

The Window Manager offers an integrated support to process the more cpu demanding features in background, using threads. Best example is using Material Shaders or Compositing nodes, which now keeps the UI entirely alive, even providing node-by-node preview updates while using buttons.
Rendering is a threaded job now too, allowing to inspect render settings, and zoom/scroll or browse render layers and passes during render progress.
Just recently this Jobs sytem was used to implement basic threaded screen-casts, making video tutorials more easy than ever.  

The new foundations as have been laid out now will allow significant improvements for UI design, and flexibility in customizing the UI for specific pipelines or workflow set-ups. Most likely Python will play a big role in this, allowing custom button views or toolbars, but also completely custom editors with full integrated support (save/read/copy/etc).

Proposals you can already find in the wiki link above. The WinterCamp session will be the kick-off for getting UI design issues evaluated and come with proposals for online reviews during March.

An "Operator" is the new generalized definition of a tool in Blender. This ranges from file load/save, UI layout management to adding and editing objects and its data. Because the Operator is generic, it can be called uniformly by hotkeys, menus, buttons, or via Python. Operators can be chained (macros) or provide editable history stacks to redo operations.

Custom Key Maps

Blender 2.5 has been designed from scratch to enable users configuring their own hotkeys. Hotkey definitions will be grouped in "key maps", and each map will allow to fully customize or disable it. Keymaps can also be configured for special input methods such as directional gestures and tweak events, any-key modifiers, multi-key input or can even modifier-order based.

One of the 2.5 specs is "make everything animatable". The implications of this didn't make it easy to just port things over, so a couple of important redesigns were needed:

  • The "Ipo blocks" are gone, and now are replaced with generic Actions.
  • Actions can be linked everywhere (Objects, Materials, Nodetrees) and using the Data API they can animate any property (bones, constraints, modifiers, nodes).
  • Drivers were moved out of Actions, grouped together, and availble next to Actions.
  • NLA (action strips) are moved out of Objects (the only place it was supported) and now are generic too.

Read more about this in the "Animato" project doc from Joshua Leung.

The "Action Editor" has been extended to become a full Dope Sheet, allowing control over multiple actions at once, grouping per type, and better access to shape keys.

 

 

Thanks to the Data API (RNA) and the generic tools API (Operators), the core functionality of Blender becomes available to get automatic wrappers to the Python scripting API. Benefits are:

  • All saveable/editable data of Blender is accessible by default (including nodes, particles, and so on).
  • All tools and standard operations are accessible by default
  • Tools and UI operations executed in Blender can print out automatically the associated script line, effectively enabling a built-in terminal to work.
  • Most important: they Python scripting API then uses C code which is in use by Blender itself too, this gives more stability and more predictable results.

Design of the new scripting API is in progress still. 

And more (WIP)...

  • New file browser, with bookmarks listing, integrated preview/text views
  • New font/text library, rotated text, all sizes, more generic support for translation
  • Fully upgraded Scons build system
  • Generic error/reporting storage and handling, also for UI-less Blender
  • On the todo: a built-in terminal for command-line python and error logging
  • Sculpting upgrade from Google Summer project integrated in 2.5
  • Generic 2D view code allows much better control over views and sliders.
  • On the todo: full revision of dependency graph
  • RNA also available via C (plug-in) API