Monday, May 25, 2015

Hitting the ground running

Today is officially the first day of coding for this year's Google Summer of Code. For the next three months I will be working on bringing animation to Krita. There's a lot of work ahead, but I have a solid plan to work with.

Timeline docker wireframes
In addition to the implementation plan from our sprint, we have been discussing the user interface design with some of the animators among our users. Scott Petrovic has made some very nice wireframes based on these. The discussion is still ongoing and constructive feedback is always welcome.

Even though coding officially starts today, I am not starting everything from scratch. As mentioned in my previous post, I have a partially working prototype to build upon. One can already add, move, delete and duplicate keyframes on a paint layer, as well as play the animation in real time. The animation can also be saved and loaded, albeit in an experimental file format.

However, the code is still in a rough state. There are a number of major issues with it, including crashes and even data loss. Due to a number of technical shortcuts taken for the sake of faster prototyping, it is cumbersome and unintuitive to use in places. For instance, in order to play the animation, one must have visited each frame in order to populate the playback cache. In short, it's a minefield of bugs and missing features.

I will start this week by finishing a refactoring of the prototype towards the final design and looking into some of the major issues, especially one relating to data loss with undo/redo operations. Hopefully in a couple of weeks I can get to implementing new features. I for one am looking forward to seeing fully functional animation playback and onion skinning in Krita.

Monday, May 4, 2015

A summer of animation

This summer Krita is going all in for animation. Not only do we have a Google Summer of Code project focusing on it, but it will also be a major point in this year's Kickstarter campaign, alongside with major performance improvements.

There seems to be a lack of a good raster based animation software for traditional style, hand-drawn animation. Krita's excellent drawing and painting features provide a great basis for this. It is no wonder animation is a highly requested feature in Krita.

In the past couple of years, there have been several attempts to implement animation in Krita, most notably Somsubhra Bairi's GSoC project. Unfortunately none of these ever made it all the way to a fully working release. However, they have all taught us valuable lessons and I believe we now know how to finally make it work.

We have been discussing a new design with the Krita team for some months. In mid-April I had the pleasure of meeting the two main Krita developers Boudewijn and Dmitry (as well as Irina and Wolthera). During this small sprint we created a solid design for the upcoming implementation.

The focus of animation in Krita is on hand-drawn animation. That is animation consisting of individually drawn or painted frames. This is close to the traditional style of animation, only with the additional benefits of working in digital media.

However, the animation features will not be limited to hand-drawn frames. You will also be able to animate layer properties such as opacity and position, and eventually even transform mask and filter parameters. Imagine the possibilities!

I have already been working on a prototype version of the code for some weeks. While it still has some major issues, it can already be used to make simple animations, such as the one below. I will soon post more details about the status of the code and regular updates on our progress throughout the summer.

For more information on animation in Krita and the Kickstarter campaign keep and eye out for posts on the Krita website and this blog. If you want to get in touch with us, the best way to do so is through our chatroom or forums.