Saturday, November 12, 2016

Looking Back at 10 Years (and Counting) as a Blender Developer

Woah, I can't believe I missed posting this a few days ago (*), but Wednesday (9 November) marked 10 years since I've had commit rights as part of the core Blender development team! Yipee!

While I actually started developing Blender earlier that year (a search on BlenderArtists reveals that I finally got the codebase compiling in June 2006 for the first time, after many failed attempts), my first major contribution to the Blender codebase was my patch for the Transform Limiting Constraints that got accepted on 14 August.

I still remember how exciting it was coming home from school that Monday to find that it had been accepted overnight! (I knew that it was under consideration leading up to the meeting on Sunday that night from hanging out in IRC that night, but I didn't know the outcome yet since I had school until 3pm that day, and no internet access until I got home - remember, this was still back in the days when internet access in NZ was still very much a "sometimes" thing, not the "always on" magic juice that we can tap into (almost) anytime + anywhere when staying within civilised areas).

The following years have been an absolute blast! Here are some highlights from each year:

* 2006 - Getting my first patches and commit access. Helping develop animation features for Plumiferos (Transform Limiting Constraints, Action Editor improvements, etc.), as well as scratching a few massive itches of my own (e.g. Horizontal scrolling in the Outliner, the invention of Long Keyframes in the Action Editor, curve selection tools).

* Mid-2007 - Constraint System refactor (over the 2-week winter break in late June/early-July). It was my first major "code holiday", just like the legendary ones Ton used to do. It was also quite nerve wracking, as we were still using CVS back then (i.e. no local commits), so I basically had to do the whole lot in one go and pray for the best  XD

Sometime in 2007/8 - At some point (I can't remember when), I took a weekend or so to completely overhaul the internals of the Action Editor. During this time, I put in place the "Action Channel Filtering" system to clean up the massive code duplication (for looping/filtering logic) that was being sprayed all over the code for each and every tool; after recently adding a few new features in the Action Editor, I'd become fed up with the amount of work that was required to maintain the old code, resulting in the development of the filtering system. In Blender 2.5, I ended up beefing up this system, and using it to power all the animation editors today. The details are hazy on how I managed all this (other than feeling a big buzz to climb this massive mountain of work and come out the other side victorious), but I'd likely have started on Friday night, and finished on Sunday by 11-12pm.

* Summer 2007/8 - Helping develop animation tools for the Peach (Big Buck Bunny) project.  It was very exciting to receive my DVD's (and poster) in the mail... even more so to see my name in the credits of a film for the first time!

* 2008 - Developing Grease Pencil (v1) - I thought I've done a writeup about this, but I can't remember where I put it now. Anyway, the story here is that I started developing it around May/June one weekend. My first prototype was to just try and get the Image Paint stuff to drawn an overlay image over the viewport; after running into some difficulties, I ended up deciding to go all-in on hacking together a system using OpenGL lines. Truth be told, it was the first time I'd ever tried to code a drawing tool, let alone doing anything fancier than drawing a box or changing colours in OpenGL, so there was quite a massive learning curve there. But the enthusiastic response the community made it all worthwhile in the end, and also deeply satisfying as people began to use it beyond the initial anticipated workflows :)

* Summer 2008/9 - Working on the Blender 2.5 project. I started in early December working on tidying up/porting the View 2D system and general 2.5 porting work. In January, I started the mammoth task of porting + modernising the animation system ("Animato"), beginning with a 2-week "coding holiday" in the middle of a heatwave where I laid down the foundations (basically all the core data structures, methods, and concepts) that everyone is familiar with now. Then, it was basically a race against time to get the animation editors (Dopesheet/Action Editor first, and then the Graph Editor) ported + modernised before the start of my first year at uni at the end of February. Somehow I pulled it all off :)

* 2009 - Despite my initial intentions, I ended up spending the rest of the year working on Blender 2.5 issues, and developing new stuff. For example, I still have vivid memories of developing some of the Keying Sets stuff (IIRC, it was the infrastructure for defining them in Python) before heading off to lectures one morning in April. Another highlight was getting accepted as part of GSoC for the first time (to finish off the NLA System stuff)

* Summer 2009/10 - IIRC, production on Sintel was in full swing at this point. Apart from helping refine the tools, the thing that stands out to me the most from this time was the weekend (yes weekend - starting around 10/11am on the Saturday, and ending just before midnight on the Sunday) where I developed the Spline IK constraint. Being able to have such a quick turnaround was a lot of fun!

* 2010 - The biggest highlights here I guess were: 1) Starting this blog, and 2) My 2nd GSoC, working on figuring out how to integrate Bullet Rigid Bodies into Blender. Admittedly, I understood very little about rigidbody sims, Bullet, and much of the the simulation stuff at the time. There's still a lot I don't know about the stuff today. But, it was great to have had a chance to explore something different for a change, and help pave the way for some other important developments too. Otherwise, this year was mostly a blur of fixing heaps and heaps of bugs.

* 2011 - GSoC #3 - Various features/bugfixes

* 2012 - First attempt at building Pose Sculpting. I'd been thinking about this idea since April 2010, so I was very happy to finally be making progress on it. I was however less happy that it was proving to be much more challenging than I'd hoped to make it work

* 2013 - Depsgraph Refactor (GSoC) - For my final GSoC, I worked on researching the architecture for our new dependency graph. After almost a decade, I could finally begin to attack some of the problems with the existing system that I'd been thinking about since 2007 (!) - yes, this was one of the things I thought about on that sleepless night I had as I paced around a bathroom in the middle of the night in Tauranga.... this and the design for the NLA system.

* 2014/2015 - Grease Pencil v2. 'Nuff said. Working with Daniel to bring this tool up to the level needed to make it a full production-ready 2D animation solution has been an exciting journey, that has really brough me back to my roots, reminding me why I got into Software Engineering in the first place - reminding me what I love to do, why I'm doing what I'm doing, and being an awesome well of positive creative energy to draw upon as I work on the PhD. Capping off an amazing two years, it was awesome to get my first paper into Siggraph Asia in Kobe about my work on Grease Pencil.

* 2016 - Grease Pencil + Bendy Bones. I think these are recent enough that everything should still be fresh in most people's minds, so I won't go into further detail here. But, just to reiterate: it's been fun to work on innovative new tools that have an impact, and empower users to unleash their creativity. This is what drives me. I love this stuff!

Also, it's been really amazing to see the amount of attention Blender has been getting from professionals and amateurs alike over the past 2 years in particular. It's really amazing seeing what people are using Blender for - often using tools in ways that I wouldn't have ever imagined! And being in contact with some legends of the animation industry: priceless :)

If I had to list the feats of engineering I'm most proud of, they would have to be:
  1) The "Animato" animation system, introduced in Blender 2.5
  2) The "Animation Channel Filtering" system used internally by the Action Editor (2.4x) and now all Animation Editors
  3) Grease Pencil

There are many many more that I could list here (and the yearly highlights above only cover some of these other ones), but these are perhaps the biggies. Smaller victories include:
  * Long Keyframes
  * Pose Sliding/Breakdowner
  * Pose Propagate
  * Spline IK


That said, you also don't live 10 years of life without experiencing a few ups and downs. Being quite a big part of my life over the past decade, Blender development has dovetailed with a few incidents over the years too:
  1) Not many people know this (or didn't before now), but back in 2006 (i.e. exactly a decade ago this year too), my grandma died at the end of September. I still remember that day quite vividly (and especially, what I had been doing at the time when I heard the news that she had died): Basically, I'd been busy preparing for my first violin diploma exam at the time, and had just spent that morning in rehearsals/lessons. That afternoon, I was doing some Blender coding for fun/to relax (I was working on the curve selection tools - Select First/Last and Select Nth, IIRC). Mum and Dad had just gone over to Granny's place to check on her, since she'd been ill all week. And then, mid-afternoon, as I sat there struggling with debugging some weird behaviour with those selection algorithms, I got the call from Dad. Granny had died. My hands went cold.... heck, they were shaking. After taking one more look at the code (failing miserably I must add, as the shock slowly set in), I turned off the computer, and prepared to comfort Mum who'd just lost her last living parent.

  2) In 2008, halfway through coding Grease Pencil, the screen on my laptop broke one day. After a slightly heavier-than usual jolt as I set it down one evening, the screen suddenly started showing static and weird glitching patterns across part of the screen. Over the course a few short days, the problem got worse until nearly the whole screen was covered in a constant layer of static noise. Fortunately, in that time, I managed to back up all the WIP Grease Pencil stuff and move it back to my older (and woefully underpowered) desktop to finish off the project. Unfortunately though, it took a good 6 weeks (and multiple, increasingly annoyed phonecalls) for them to finally get the screen repaired. During that time, I was without my laptop (and many of the other files I had stored on there).

  3) In 2010/2011, a series of large horrible earthquakes struck my hometown. As I've documented on this blog, these quakes were really destructive and basically destroyed a lot of stuff around town, wiping out many familiar and loved sights, and almost killing Bubu a few times. Living through all that constant, unpredictable shaking... the uncertainty of it all - not knowing whether that next approaching tremor (and you did really hear them zipping along towards you, even before you felt them) would be short + sharp, a gentle wobble, loud + rattly, or the start of yet another jellifying monster that's about to send everything onto the floor, cut the power + water, and basically start the whole bloody cycle all over again - was really quite unbearable. Somehow we managed to weather that storm, but it's not an experience I'd wish on anyone.

 4) In late 2010 / summer of 2011,  there was also the (in hindsight, misguided) feeling that the worst was behind us, and that it was "all up" from there on. Wrong.

Nevertheless, at the time, we embarked on a massive home renovation project that summer (TBH, the house really needed that work done on it, and without some of that stuff going on, there may have been bits that wouldn't have survived the quakes unscathed). Naturally, having builders and painters in your house day in day out while you're living there is not exactly the most comfortable way to live (especially if said builders and painters were basically there to rip out and renovate the kitchen - i.e. no food for a week or two, or at least no cooking during daylight hours; or to repaint the bathroom/toilet areas - i.e. no going to the toilet or washing your hands during the day while they were around.... and since there were two of them, they would often take over both of those places, one in each room, leaving a trail of dropcloths and flaky plaster dust all over the rest of the house in between those worksites). Compound all this by the fact that you needed to move all the stuff out of the rooms that these guys needed to work in... oh god, that was quite an epic effort!

We also had the carpet replaced over two days throughout the house. The amount of fluff flying around that day was incredible. Also seeing how carpet layers absolutely torture their bodies - ramming that metal bar with heavy blows from their knees, hunching over/half-splayed out on the floor, chipping and hammering, ironing, and banging. The resulting feel of having fresh new underlay was awesome, but the horrors of getting all the furniture out of the house to facilitate the whole exercise was a nightmare.

That said, during one of those carpet laying days, I spent the morning coding the "Whole Character" Keying Set. To be precise, I was coding it as the new flooring for the bathroom was being put in!

 5) After the quakes, the renovations, and over a year of soul-sapping bug-fixing work to get the 2.5 series production ready, by 2012, I was admittedly running out of puff. No helping things much were the fact that I was doing my honours year at uni. Truth be told, there were no less than 3 occasions that year when I actually "hit the wall" and had what could be best described as "painful moments of intense despair" around 3:30 am while staring at my monitor trying to pull off miracles to get through the bloody massive pile of assignments all due in a 3 days time. I learned many things that year - the most important of which was what where my breaking point lies, and that I really really really don't want to ever get close to exceeding that ever again. Frankly, not many things are really worth risking periods of debilitating burnout, stress, and misery as karma sets in to rebalance things...

As a result, Blender development needed to take a back seat that year. I stmply didn't have the time, energy, or capacity left to do any real development - maybe a few maintenance commits (aka "fixing typos, spelling errors, etc." or "simple segfaults that could be diagnosed in 5 minutes or less"), but nothing more. (Truth be told, the focus during Project Mango on VFX stuff also wasn't really my cup of tea either)

  6) Over the past few months, you may have noticed a gradual decline in activity both here on the blog, and also in major feature development. While I'm not leaving Blender development (and have no intention to), I am also currently trying to wrap up my PhD thesis work at the moment. With less than 6 months left until I need to have this thing completed, I unforunately don't have much spare capacity left for much less at the moment (other than whatever might offer a brief respite/injection of energy for low time cost). TBH, it's quite painful to have to sit out all these amazing opportunities and projects going on right now in the Blender world - I really wanted to be in Amsterdam for the BConf this year to mark 10 years coding Blender, and to play a big role in the 2.8 project work. However, right now, I need to get this thesis finished. The only consolation (or light at the end of the tunnel I guess) is the thought that once I get this bloody thing wrapped up, I'll finally be able to dedicate all my time to working on whatever Blender projects I'd like to work on. That and the thought of not having to deal with some of the annoying things I've been working on anymore (at least that's my current plan for the next few years... TBH, I'm very much over trying to do quantitative science work, writing/testing annoying software to run experiements, and hacking scripts to do data analysis... there's a lot of stuff there that's seriously annoying/icky to do that I'd be happy to do without in my life once this is over :)

Wish me luck!

(PS, if anyone reading this happens to be skilled at QML and/or data analysis and/or HCI and would be willing to lend a hand, I'd be great to have options for delegating some of the more annoying parts of this work to someone should the need arise ;)


Finally, I'd like to say a big thank you to the Blender community for being awesome! It's been an absolute pleasure so far. Looking forward to the next 10 years! :)

1 comment:

  1. Congratulations for your passion. And thank you for your Work with the GreasePencil Tools