Thursday, July 29, 2010

Deja Vu No More! (Blender 2.5 FAQ)

Every few months I seem to be answering the same series of questions again and again and again and again and again... It's time to fix that with a link I can just refer people to ;)

Oh, and hi to all PlanetBlender visitors now viewing the feed of my blog (as of the past few days)

[EDIT 30JULY-2pm] Added a few more FAQ's that I've missed.

[EDIT 23AUG] Part 2 Posted...

Questions within my domain, which I've seen asked (quite a few times ad nauseum)
Is it done yet? When's the final release coming out?
In Software Engineering, there's the saying, "It always takes longer than you
expect, even when you take into account Hofstadter’s Law." (Hofstadter's Law)

In other words, even if I gave you an estimate today, I'm more than likely to be wrong (2.5 was originally supposed to be final by now!). Hence, I'm not even going to try.

When will 2.5 be done? When it's done of course :)

Are PyConstraints ("Script") constraints implemented?
Not yet. Some things have changed internally in the PyAPI backends which mean the old ways won't work without some serious modification to certain parts. But then, even if I did go through all the work to port PyConstraints to work with the new backends, the overall format would seem terribly out of place in the modern integrations of Python into Blender.

So really, they haven't been restored yet as there are some lingering issues that need to be resolved first. Of particular note are:
1) Local constraints per file vs "builtin" to Blender as if they were native.
2) Technical issues arising from taking either side. (RNA-registration voodoo and where to store this stuff are big problems). Doing a hybrid approach is even worse in terms of maintainability...
Deferred until a later date when these issues become clearer.

Why can' I edit Grease Pencil "keyframes"? Where has the "Grease Pencil" mode in the DopeSheet gone?
This hasn't been restored yet; I've removed the menu entry for now to reduce confusion if users go into this mode and nothing appears. Here it's a combination of me not having had time to go over this yet, and the old code needing reimplementation due to changes in the way that 2.5 stores Grease Pencil data.

Where did the "Speed" curve go? I cannot find it in the IPO Editor!
Firstly, the IPO Editor is no more. Its successor, the Graph Editor, is more powerful and allows easier editing of keyframes than before.

Secondly, the workflow for animating settings has changed (for the better). Reflecting Blender 2.5's ability to "animate everything" (well almost, strictly speaking only numerical values and options), the Graph Editor cannot reasonably display every single property available in the hope that you'll want to animate it. Instead, you can now right-click on any property and choose "Insert Keyframes" from the menu to insert keyframes, or even just IKEY over the property. There are other ways too, but these are the most direct.

The inappropriately named "Speed" IPO-Curve (inappropriate because "speed" implies a rate of travel, but this control really specified more of an interpolation factor) used to be a special hack run independently of the standard animation system. It has now also been replaced by the "Evaluation Time" property, which can be found as part of Curve settings. (Needless to say, this property is integrated into the normal animation system without special hacks)

Alternatively, you could use a Follow Path constraint instead. Just enable the "Fixed Position" setting, and then animate the "Offset" setting (but only after doing that!).

Anyways, in short, animate the "Evaluation Time" property from the Curve settings.

Where has the "X-Axis Mirror" option for Armatures gone?
This has been moved to the tools region, below the Toolbar buttons.

How do I add drivers?
(this topic is covered in more depth in my WIP instruction manual)
Using the RMB-menu on a property (as for inserting keyframes), you can add a driver to a property.

To edit the driver settings, go to the Graph Editor, and change the mode to "Drivers" (this should be the combo box beside the menus, labelled "F-Curve Editor" by default), and press NKEY to show the Properties panels.

Find the name of the property you wish to edit the driver for from the channel list, and click on its name to select it.

To add a dependency for this driver, click the "Add Variable" button under the "Drivers" panel. This allows you to specify a 'driver variable', which is simply a way to get a value (which you can name, to facilitate easier use in the expression, if you need to do something fancy with values from multiple places) that affects the value the driver evaluates to (i.e. the x-axis 'input' value for the graph shown in the main area of the Graph Editor).

Several different types of variables are available, but I won't go into detail about those here. However in short:
1) For any old property, use the "Single Property" (default) var type, and setup the data path as appropriate. This is a topic in itself, so once again I won't go into detail for now.
2) For transform values, use the "Transform Channel" var type instead. This should usually give you what you want easily (for what people typically want to do with it, that is).

Oh yeah, and one last thing is that you'll probably want to set the driver type to "Averaged Values" or so if you're just going to have a single variable, and aren't likely to want to do anything fancy with it. The driver type basically determines the method use to compute the driver value (x-axis input) - that is, how the variables are combined to do funky stuff.

Why can't I drive Material/Texture/etc. settings? Isn't 2.5 supposed to allow that?
Technically speaking, it is possible, but let's firstly understand why this doesn't work for simple usage.

Due to depsgraph issues (the depsgraph or Dependency Graph only being aware of and able to deal with dependencies between Objects and Object Data), only Drivers rooted at (and stored in) AnimData stored on an Object Datablock or Object Data Datablock (i.e. Mesh, Mesh -> ShapeKeys, Curve, Lamp, Camera) can be driven. That is, only those drivers will get tagged for evaluation by the depsgraph when their dependencies change, as only those datablocks will be tagged by depsgraph leading to the drivers getting evaluated.

Now, why is it that drivers added using the method described above may not work? Well, for Materials and Textures, which are be linked to Objects, so potentially driveable (vs Scene and World settings, which cannot be linked to from Objects), the default way that animation data is set up for them is not conductive to drivers. This is because these add AnimData to the Material or Texture datablock directly (which the depsgraph can't see), as Blender can't intelligently "guess" how these are related to Objects that may/may not be active reliably.

Not to fear! The way to add such drivers is to go via the Datablocks editor (submode of the Outliner). Keep opening up layers, starting from the relevant Object, until you get to the relevant material/driver property. Click on 'empty space' beside the property until that row turns light-blue. DKEY to add a driver. (Incidentally, this is one of the ways you can construct Keying Sets). Now you can set up the rest of the driver settings as per normal, as by doing things this way, you've explicitly defined the data path to the property and the ID-block it should use.

"Keying Set failed to Insert Keyframes". WTF?
Keying Sets are a way to ensure that a set of properties can get keyframed together (which is what you'll almost always be doing when animating anything). All the entries in the IKEY menu are in fact so-called "Built-In" Keying Sets, which are Keying Sets which use some Py-Script magic to determine what properties to keyframe based on the current context. User-defined Keying Sets on the other hand will just keyframe whatever properties you tell specify that it should.

Anyways, this error message simply means that something went wrong. Check the system console (Blender console cannot show any useful info about this yet). The most usual culprits are:
1) Nothing was selected, so Built-In Keying Set couldn't find any data to keyframe
2) There were no existing keyframes ("Available" Built-In Keying Set will fail when this happens)

Again, this is something that could probably be polished before a final release.

Where did Alt-S go? 30JUL-2PM
I'm guessing you're talking about one of the bone/envelope shrink-fatten tools. These have now been changed to Ctrl-Alt-S, as they were conflicting with the "Clear Scale" operator in Pose Mode.

Why can't I add <> constraint on my bones? Why can I only see "World Space" and "Local Space" but no "Pose Space" option? 30JUL-2PM
In the Properties Window, there are really 2 separate contexts for constraints. The first one (nearly always available) is for Object constraints, while the second one (AFTER the buttons for Armatures and Bones) is the one for Bone constraints. The constraints stack you're after is the Bone constraints, not the Object constraints.

Examples of constraints that only work in the Bone constraint stack are:
* IK
* Spline IK

Speaking of Constraints, what're the hotkeys to add them? 30JUL-2PM
In 2.5, the hotkey to Add Constraints is Ctrl-Shift-C. You can use Ctrl-Alt-C to RemoveConstraints.

What happened to the old Ctrl-C menu? What happened to (the promise of) multi-object editing? 30JUL-2PM
The old Ctrl-C menus have not been restored as the "UI Mafia" wasn't too happy about this functionality. IIRC, some of the concerns about it were related to these menus only allowing a subset of the settings to be copied, and/or not really solving the underlying problems of not being able to edit more than one object at once.

As it pans it, we still haven't done anything about the multi-object editing capabilities. The scope of that is really a bit much to work on now - a lot of Blender is coded with no provisions for this, not to mention some of the complications which arise from doing this. However, this is still quite probably a topic for post-2.5 work (i.e. UI goodies, etc.), which the 2.5 project was supposed to be about supporting. While some people have thought that this was a primary target of 2.5, it was really just a potential development, that could occur at some later stage as a consequence of 2.5 changes. Hey, we still have Blender 3.0 to get to, right? :)

So, in the meantime, we won't be seeing this functionality "officially" returning. However, if you need this functionality, consider coding up an addon to work around this. It's really not too difficult.

Frequently asked questions outside my domain
Is 2.5's new Console space going to replace the Console on Windows?
In the immediate term, no. In the mid-long term, probably not. In the very distant future, perhaps.

As it is now, the Console space is not capable of entirely replacing the system console. There are a LOT of useful prints/error messages/etc. that are piped directly to the system console, with no way of redirecting them (easily, reliably, and without causing too much of an impact on various things including being able to run renders from the shell on Windows in the background without distributing 2 copies of the Blender binary)

When's the Render Preview ("Shift-P Panel") coming back?
As I understand it, this may/may not be on Ton's list of things for the post-Durian 6-month coding spree/2.5-stabilisation period he intends to spend.

One of the main reasons it was not restored IIRC was that there were some threading-related issues. Something about preview renders all using the same globals to avoid rebuilding scene data everytime to make things faster, but then this was unstable when running proper renders + animation updates + realtime updates etc.

When are floating panels coming back?
AFAIK, this is not planned. If someone is working on it, I haven't heard about it. Did people really like shunting floating panels around that much?! Too much time messing with GIMP's UI I guess :P

Are Pie-Menus going to be available?
Pie-Menus (also known in literature as "Marking Menus") are currently not officially integrated. However, there have been efforts on the BlenderArtists forums (do a search!) where some scripters have created some addons which can do this.

How do I join "windows"? The old window management options were so more logical
1) Move mouse to one of the corner triangles (bottom left or top right). Easiest way is just to slam cursor at the intersection point of several areas, then move slowly until the cursor changes.
2) Now, to join two adjacent areas, click on the triangle and hold while moving the mouse over to the area you'd like to join into. Do note that some of the joining restrictions of 2.4x still apply.

NOTE: splitting (which most people seem to not have any trouble with), is simply dragging into the area, instead of over another one.

I remember having a little trouble with this myself (way back when 2.5 was only a mass of purple+green rectangles!) until I checked the code to figure it out. After understanding the action required, I haven't had problems with it since. Admittedly, it isn't that obvious to a new user as it is quite hidden, while the Right-Click was quite discoverable. However, it must also be said that this new method is more of a gestural method - less discoverable, but based on muscle memory, so potentially more efficient in the long run than the modal-blocking method with choosing which side to join to (as in the past). Honestly, the old way feels quite clunky in comparison, with an element of "how do I get out of here?" or "what did I just do?".

Can the corner triangles be made larger? 30JUL-2PM
These "action zones" cannot currently be adjusted interactively (that is, by some theme setting or so). Currently, they are really hardcoded, so you'd have to modify the source yourself to do so.

Answers to questions I think people would like answered (but haven't asked)
... todo ...

If I remember any other issues, I'll add them to the list.

That reminds me: when I get time (procrastination is fun, isn't it), I should finish off a little instructional manual I started about animating in 2.5... someday, someday, I'll re-mem-ber...


  1. Thanks a lot ! just what I needed :)

  2. Thank you very much.
    You answer at some of my doubt.
    You can read our minds!

    Thanks again.

  3. Thanks for all the info Aligorith. Btw, I have a question.

    Is there any way to make that screen split triangles much bigger?


  4. Thanks for the good work ;)

  5. More articles like this would be really nice lol. Especially the first question. It seems that the first few 2.5 releases there was still at least a tentative release date, but lately it's like the developers have been completely ignoring giving progress updates. The Beta just sort of happened all so suddenly.

  6. That explanation on depsgraph issues FINALLY was an understandable explanation for me. Thank you very much!


  7. that was a great post,
    Will Skin Faces/ Edge-Loops be back in stable release?
    and will there be free alignment in Properties Editor like in 2.49 ?
    I want to have a horizontal Properties Editor like in 2.49 but horizontal in 2.5 is awful

  8. thanks for the article. This blog is a great source of knowledge that got away from me. A lot to read now :)

  9. Hi,

    I used the datablocks method to drive a material setting (size of a halo).
    I use a particle systems size value to drive the size of a halo.
    I keyed this particle systems size value over 100 frames from 0.000 to 1.000. But if I render on different frames, the size of the halo does not size accordingly. Only if I click on Path of the Drivers panel and then click on the Value field of the Drivers panel then it renders with matching halo size. It seems the click refreshes something in the driver chain what the keying does not.
    Is this a bug?
    So in short what I want to do:
    Drive the halo size by the size of a particle system.
    The size of particle system I want to key.

    Thanks for any help!