Saturday, February 4, 2017

Blender Dev Updates - 21 Jan

(EDIT: I originally meant to post this a few weeks ago, but it's taken a while to get around to finishing the demo materials included here... but, PhD work takes priority, again...)

This week I took some time out from my PhD work (argh, creating questionaires is such a pain) to get through a bunch of simple new features I'd been meaning to code during my break... that is until continuing my holidays took priority ;)  But with the announcement that we would be pursuing a 2.79 after all, it was time to brush off the plans and get these features in.

Most of the new features are Grease Pencil related... (Some but not all of them can be seen here)

But, there's also stuff for all animators too...

New Grease Pencil Features
1) Option to Always Show Onion Skins (even in renders)
The per-layer 'render icon' toggle beside the "Onion Skins" checkbox can be used to make onion skins always appear, even in renders and in animation playback/scrubbing.

Here are two test animations I put together while playing with this feature.
* Test 1

* Test 2

With Ghosts Shown

Without Ghosts

2) Add Blank Frame
This operator adds a new frame with nothing in it on the current frame. If there is already a frame there, all existing frames are shifted one frame later.

Quite often when animating, you may want a quick way to get a blank frame, ready to start drawing something new. Or maybe you just need a quick way to add a "placeholder" frame so that a suddenly-appearing element does not show up before its time.

* D+B in any mode
* B when in Continous Drawing Mode
* Via the Toolshelf

3) Interpolation Types for Antonio's Interpolation Operator
Soon after 2.78 was released, Antonio committed a pair operators to interpolate between two Grease Pencil frames. In response to a feature request from a studio that was considering using Blender for an upcoming project, I added support for multiple interpolation types in this operator.

Here's another demo video showing these features in usage, the workflow, and the "Always Show Ghosts" option mentioned above:

4) Reproject Strokes to Surface
Something else I worked on was an experimental option for the Reproject Strokes operator to project strokes on to geometry, instead of only doing this in a planar (i.e. parallel to viewplane) way.

The current implementation is quite rough, and may need to be improved before it is really ready for use. Potential issues:
* Loss of precision (i.e. stairstepping artifacts) from the 3D -> 2D -> 3D conversion as we don't have float version of one of the projection funcs
* Jagged depth if there are gaps, since it will default back to the 3d-cursor plane if no geometry was found (instead of doing some fancy interpolation scheme)
* I'm not sure if it's that useful for adapting GP strokes to deforming geometry yet (e.g. if a sketch is initially projected onto an ourstretched arm that then bends, simply reprojecting on to the bent arm doesn't quite cut it...)
* Also, you may well need to move the 3d cursor around a bit if it refuses to actually do anything...

Animation Features
5) Show Group Colours behind keyframes in Dopesheet
Group colours are now shown behind the keyframes, just like they are used for the channels

Thanks to a feature request from @AlonDan (tweet), and Hjalti's recent tweeted monstrosity, I realised that it was about time that we used the group channel colours behind the keyframes, to make it easier to see at a glance which keyframes line up to which channels.

It took a bit of fiddling to get the contrast settings tweaked to the point where in most cases, they would "pop" enough to keep the presentation still usable. It's far from perfect (IMO, the contrast of the keyframes against the colours is still a bit too weak now), but it seems to work quite well so far.


  1. Awesome work. Gpencil is really developing into a nice animation feature.

  2. Hello, how can I move GPlayer from one Datablock to another?

    1. Hmm... that's a really good question...

      There isn't really any "direct" way in the UI, but off the top of my head, the two main options are:
      1) Use the Python API
      2) Create a new layer in the destination datablock, and then use the copy and paste features in the Action Editor to copy everything over for that layer

      (A little disclaimer about that second one: IIRC, it's possible that it might crash, due to issues with the palette colors not getting transferred acorss/fixed)

  3. And what about ballistic interpolation like it was shown in one of antonioya's GP video, will it be implemented? (Looks like it is hidden now)