Sunday, January 3, 2016

Happy Blender Day - 10 Years Developing Blender, and counting!

Yesterday marked 22 years since Ton wrote the first lines of code for Blender! Thanks Ton! I don't know where would we be today if Ton had instead decided to have some fun in the snow, or to just hang out having a few beers that day instead ;)

Significantly for me, 2016 marks my 10th year as a Blender developer. IIRC, I finally managed to get Blender compiling back in about May that year, and got commit access in early November.



Unfortunately, I don't have copies of the emails around when my first patch (Transform Limiting Constraints) got committed to CVS (as it turns out that Microsoft/Outlook mysteriously lost all my mails prior to 2007 sometime in the past 5 years), but I still remember eagerly rushing home from school on that Monday to check my email, having known/heard that a decision about this was imminent from the night before. Lo and behold, my patch had been accepted and had been committed! Woohoo!

That was a really exciting moment for me: my first patch ever had been accepted to the Blender project!  (It wasn't actually my first ever open source patch that got accepted - the honours for that probably go to a hacky fix for Windows installer so that it wouldn't clobber my Python environment - but it was the first that actually did something useful). Many thanks to Martin Poirier (theeth) for reviewing and committing this patch, and Matt Ebb (broken/matt_e/mke3) for mentoring me on the UI stuff, answering silly questions from a newbie dev, and being one of the first (if not the first - my memory is fuzzy on this) people in the Blender community I chatted with on IRC the first time I logged in one afternoon (NZ time) all those years ago. While both have now moved on to other industry jobs several years ago, I'd like to thank them both very much for all their hard word all those years ago :)


Beginnings in the 3D World
But in fact, I've been involved with Blender for quite a bit longer than that! In fact, I started off as a user of Blender, with an interest from day 1 of trying to create my own characters and animate them (something that was rare, even then in the Blender community). My BlenderArtists account shows that I joined on 14 July 2004, having lurked around those parts for at least a few months to a year before that point.

To say that I'd been around for at least a year before joining BA would be stretching it though. IIRC, I don't think I really started getting into 3D stuff until at least October/November of 2003, and it would've been more likely to have actually been during the 2003/2004 summer holidays (i.e. December for all you northern-hemisphere people). However, Blender was not the first program I actually tried or used (though I nevertheless probably tried it on and off a few times).



The first program I actually tried was Draw3D, since I saw it mentioned in a magazine I saw in a bookstore (IIRC, it would've been at the "London Bookshop" at South City mall). It was a limited piece of crap, seemingly clobbered together in Visual Basic, with a 4-split view, and limited abilities to create new geometry. But, even then, it was a good taster of how 3D modelling worked. I just needed a more powerful tool!




As many 3D artists from that time did, the next tool I tried was Anim8or by R. Steven Glanville (a developer working on drivers at NVidia). It was a really lightweight and simple little app, written by a one-man band, but had the advantage of being a nice gentle introduction to the 3D world for beginners. In particular, the introductory tutorials provided with this little program were a great introduction to box modelling. This was perhaps my first real taste of 3D modelling.



It also had some basic animation capabilities. However, these ultimately felt too limited for what I wanted to do, so nothing much ever really came of this. Initially, I was getting some bad performance with this (i.e. even trying to move an object would be terribly laggy). Eventually, I found out that the cause was Windows XP's drop shadows on the cursor were causing grief with the crappy integrated graphics card. Disabling those made everything work much nicer.  I also recall sending an email to the author once about some feature requests or something; pity though that this is one of those emails that's now lost to time in the truncated mailbox!


The next one I tried, and where I actually managed to create some art - both stills AND animations, was OpenFX. This is not to be confused with the failed plugins system for shader/compositing nodes though...  Most notably, I created my first decent 3D character using this: an egg-shaped green bird (loosely modelled after a kakapo) called "Greenstone" - partly due to the shaders I had applied.


OpenFX is notable for several things:
1) It has 2 separate programs like Lightwave (i.e. a "modeller" and then a "layout, animation, cameras, lighting, etc." app)
2) IIRC the "magnet" tool was a bit like a sculpt-brush + proportional editing mode combined into a single tool. It was also my favourite tool, as it allowed me to easily push and pull mesh regions into place as I wanted. It was the main tool I used for most of my modelling work that I did.  (Meshes were triangles only though IIRC).
3) The animation tools here were a bit more advanced than those in Anim8or (e.g. bones didn't need to be connected IIRC), though were still quite limited. That said, they were enough for me to get my first taste of 3D animation.

Unfortunately, I don't currently have access to these files - the stills, animations, or source files I created from this, as they're all stuck on an old box that no longer boots up. I think the power supply is fried or something like that :/

I should also mention that at various points around then (or before), I also tried a few other things briefly, though my usage of them was much less than for the 3 mentioned already. IIRC, one of these was Milkshake 3D (which was quite buggy and unusable), a weird ancient relic DOS-like app that was basically black and white, took over the full screen, and had some ugly gray buttons down the side (no idea what it was now), as well as using a brief trial of Motionbuilder (after being impressed by it's demos of a caveman with a torch, and closeup facial animation or something.... however, I could never really get it to do anything, as it was well beyond the capabilities of my pitiful hardware at the time).

There was also a brief stint with POV-Ray, where I'd use OBJ models off the internet and/or Arbaro (awesome tree generator - much better than what people usually got out of the LSystem tools that most CS majors go gaga over... that is until I started reading the actual papers by the professor at Calgary University - my Dad's alma matter - who really pioneered their use for generating foilage... sheesh, he's done some pretty awesome stuff this way!). Creating scenes this way was really painful though! It was really trial and error whether something showed up in camera, and whether it was anywhere near where I wanted it to be. I'm most proud of an underwater scene I did with heaps of fish (and inspired by the minefield scene from Finding Nemo). Again, this is a file I currently can't retrieve :(


First Exposures to Blender
Finally, I moved on to Blender, and started learning by following the classic "gingerbread man" tutorial. To be specific, I started in 2.33 (i.e. the blue jellyfishes edition)... 2.33a came out and broke several of my files which I'd imported from OpenFX (i.e. the scale of things had gone out of whack, and somehow the displacement was being interpreted completely differently all of a sudden, breaking things further)!

At the time, I remember making a point of doing the tutorial on my older (if slower) first computer, since it had the nicer graphics card (ATI) which seemed to cope with Blender better than the integrated card was capable of managing. I may or may not have had the instructions up on the other machine while I did that though (can't remember). Doing that, tutorial, everything made sense, and I was suddenly able to start making sense of Blender. (Quite understandly, for many years, I was quite baffled at why there were so many complaints about finding it hard to get into Blender... just follow the gingerbread man tutorial for goodness sakes!)

The story of how I finally came to use Blender is a bit convoluted. Like many, I downloaded, tested, and deleted it promptly a few times. One of those times, I'd downloaded a scene with a stage set (perhaps with some bricks texture on the wall or something). However, while I could get it to render once or so, I'd do something, and then it would clobber the file, and everything would then go haywire. And then, I'd close it down, and delete it. At the time, I blamed "those apps with the 'Perl' command-line windows popping up are half-baked", lumping it in with the primitive DOS app).

I only really resolved to properly learn how to use Blender in order to use Makehuman, which looked like a really powerful tool at the time. This was back when it was still a Python plugin for Blender (version 1.8, and hosted via Blender's GForge hosting as a separate project), right before the project went into several years of destructive rewriting/renumbering/rebranding/start-it-all-over-from-scratch-again-itis.


Early Blender Success - Cantamaths 2005
I'd also like to take this opportunity to mention that last year marked 10 years since I won my first and only Cantamath medal for a project I made in Blender.  (I originally wanted to do a post on this around the actual anniversary last year, but not only could I not get access to the original files to upload + release them - as they're on the dead machine, but I couldn't find where we've stored the poster either! So argh!  I'll try to do both of these something this summer!)

Cantamath is a little "maths is fun" festival run by the math teachers in the region for Years 7-10 students. There are two parts to it: an exhibition competition, where individuals and class projects are displayed and can get prizes, and a game-show like competitive math-as-sport session for the elite mathematical problem solvers + human calculators to work as teams to compete for school glory. (While I was never good enough to be involved with that sort of thing, it brought me quite a lot of pleasure to be the only kid in our top-stream Year 9 math class with Mr Guerrin to get full marks in our first math test in high school... making it all that much sweeter was the fact that many of my classmates were all these supposed "elite" math gods, none of whom came close!)

In years passed, I'd often gone for the "Motif Design" contest for my mandatory Cantamath project - however, knowing how the politics of these organisations work, it's no wonder than nothing much ever happened with those attempts... really, that was wasted effort, but at least at the time it looked the most doable. However, that year, we were specifically told that we couldn't do that one, and had to hand in two (not one) projects... So, that's how one of those projects ended up being some Blender-made art :)


Anyways, so when it came to creating my entry for the "Computer Generated" category IIRC, the choice was obvious to use Blender to do it. But then the question became: how do I make it "mathy" enough to not make it look like I just slacked off and made art for the hell of it?!  The answer for me was quite simple: I'd just combine my programming skills (at that point, I was becoming fluent in Python, having migrated to it from Visual Basic a year earlier, after I ran into weird compiler errors on my previous projects) and Blender skills to make some stuff happen. (*)

So, what I did was I made a script that generated an Archimedes spiral, that stretched out down the z-axis. I then attached dupliverted birds to the verts of this spiral to make an interesting look, and presented two views of this: one from the top (the final render - red background), and another from the side + the viewport (i.e. see... it's 3d!)

I paired this with another image which I made using standard Blender techniques, and which was made purely for artistic effect. That is, there were 2-3 rings of dupliverted birds in the middle of the image, with a dark green background of a lumpy plane covered in a clouds texture with displacement/normal mapping. This second image I created in homage to what I thought (or rather, vaguely recalled) the famous Air NZ "gannets" TV ad from the 90's looked like.


As a result, I got an "Excellence" Medal (the highest grade) for my efforts!  That's the story of how I got my first and only Cantamath medal, and the first instance of how Blender contributed to giving me an interesting life :)


(*) I should probably fill you in on what the state of the other entries was too.  By and large, most of the other entries in this category were what you'd typically expect in such a category from your typical "computer nerds attending afterschool clubs": pictures of vases, spheres, and cups on checkerboard planes, with gradient skies. As expected, most of these would likely be some combination of POV-Ray, or maybe Blender-made creations. In short, dull, lifeless still-life collections where the "technical" side won out over concerns for creating proper "balanced visuals" that are appealing to look at using the technology at hand.  In addition to the 3D art, there were your usual things generated in Ms Paint (using the polygon tool), or perhaps a few that might've been generated using Logo/Turtle Graphics. However, since it's so long ago, my memory of these things has grown quite fuzzy


Inspirations
When initially starting out in Blender, and Blender development, several people/things stand out as major inspirations for what I ended up doing.

1) Liubomir Kovatchev - This guy created most of the early animation documentation/tutorials (including an eyeball and several rigging tuts - these are how I learned to use Blender's animation tools back in the day), was almost on the Peach (Big Buck Bunny) team before pulling out, as well as winning the 10 Second Club (predecessor to the 11 Second Club) with his Blender-made video of a talking camel (back when Blender-made animations were practically non-existent).

Sadly I cannot find any copies of this animation online anymore. This image is the only trace I've been able to find (and I was lucky to even find it, on a rotting half-dead server). If anyone has a copy of this still, I'd be glad to see it!  (Also, if you do have it, it'd be great to see this included into one of the Blender hall-of-fame collections)


2) Andy Goralczyk (artificial3d)   - This man's a living Blender legend!  Even looking back at some of his Blender Conference intros the other day on Youtube, they're still impressive pieces of art. Sure, some of the graphics now look a bit "simple" in places, but in terms of storytelling and overall execution, they still hold up as well as they did when I first saw them. Kudos @ndy!  You're awesome!


3) Ton's Christmas Day commits for Orange - If there's one single event I remember most vividly (besides the epic 2 week coding holidays), it would have to the time that Ton committed some core parts of the node system on Christmas day 2005, mid-production on Elephants Dream! This level of dedication to developing software is something I found really inspiring back in the day.



Blender Development Highlights
Over the years, I've been involved in many projects over the years. In particular, here are a few events which stand out in particular:

* 2007 - Plumiferos Wishlist - The Plumiferos film project in Argentina played a big part in helping establish my career as a animation software developer, as their wishlist motivated many of my projects in my first year as a Blender developer, and probably contributed towards getting commit rights back in the day. Many thanks in particular to Malefico (Claudio Andaur) for lots of interesting discussions and feedback!

* 2007 - Constraints Refactor - Inspired by Ton's famous "Coding Holidays", I spent my winter (early July) 2 week holiday break refactoring the constraints system, to fix many of the issues I'd become aware of at the time. Sure, the first 2 days, I had some violin competitions to get out of the way. But after that, it was just non-stop hacking work getting the constraints system refactored, and hooked up ready to go again. Since we were still using CVS back in the day, I basically had to do all that without any version control for 2 weeks, and was under a bit of pressure to get it done fast in one go, lest anyone make any changes to those files, giving me nasty merge conflicts.


* 2007/8 - Action Editor Refactor - Buoyed by the success of my constraints refactor, I did the same thing for the Action Editor's code, which at that stage was becoming really hard to maintain (i.e. everytime a change was made to the way the Action Editor looked or functioned, I'd need to edit every single tool's code to fix how it was looping through 3-4 different types of channels!). So, over the course of a weekend (yes, 1 weekend), I took all that pent-up frustration and designed the animation channel filtering system that remains in use today. A beefed up version of the system designed initially now powers all the animation editors in Blender; in 2016, I'll hopefully have time to finally expose a Python API for this system, so that addon authors can also benefit from these capabilities too...


* 2008 - Grease Pencil - In early May, I got the idea to try building a tool to allow users to make annotations in the viewport, after hearing about the benefits of this from behind the scenes footage from The Incredibles talking about how Brad Bird loved their new tool allowing him to draw over the animator's work to offer them feedback. Another inspiration was Jason Schlifer's original Grease Pencil plugin for Maya (which created physical curve objects).

Originally, I was going to just use a screen-aligned texture/image paint canvas. However, after realising that viewport sizes could change, and having problems with various things, I ended up developing the OpenGL based solution you see now.

Making things a bit more memorable though was that about halfway through the project, my laptop (i.e. my beloved Toshiba laptop) suddenly developed a screen glitch one day after an inoculous bump/jolt, where parts of the screen became unreable as they'd be obscured by vertical green/gray lines; this got worse until eventually, I had no choice but to take the machine in for repairs for 6-8 weeks! As a result, half of the development had to take place back on my older/slower/crappier desktop computer (which had really bad OpenGL). I only got the laptop back about 1-2 weeks before I committed the final patch - just long enough to test that everything was working nicely.


* 2008-2009 - View2D Refactor - In late 2009, after my last Year 13 exams were over and a long summer break lay ahead before starting uni, I started doing my first Blender 2.5 work by looking into porting and modernising the View2D system (which is used by all 2D views in Blender). I tried to clean it up, and make it all nicer to use and manage, while unifying all the various stuff it had in it at the time. For reference, it's used for everything, ranging from properties panels, to headers, to timeline grids, to node editor/sequence editor grids, to image editor, to outliner list etc. The problem is that each of these view types has a completely different set of requirements and/or ways of using this beast, meaning that it ended up having a lot of special cases for handling everything. In some ways, the cleanup was a success (especially compared the the mess it was in before), but anyone who has dealt with this thing knows that it is a massive PITA. The problem is basically that since it does everything


* 2009 - Animato - For the first two weeks of January 2009, I went on another "coding holiday", and spent time coding up the bones of what became the new animation system in Blender in 2.5. This effort was a combination of experimenting with "what if" I used the new experimental "RNA paths" that Brecht had introduced in the still heavily WIP RNA system to allow us to have "everything animateable", along with me finally putting into place many of the things that I'd been dreaming about for the past few years (many of which crystalised during a sleepless October night in a Tauranga hotel in 2007). While I didn't get everything working (notably, the NLA system was not implemented, with only the data structures sketched), success came a week later when I managed to insert some keyframes using a hastily clobbered together operator, and managed to get them to successfully animate as planned. Two days later, the new animation system was committed to the blender25 branch, and the rest is history!


* 2010 - Spline IK - Over the course of a weekend in 2010 (or maybe late 2009)?, I built the Spline IK constraint. IIRC, I've already told the story before in an earlier post, but basically, I started work around 11am on the Saturday, and got it working by midnight on the Sunday, and perhaps committed before I went to bed.

* 2011 - Whole Character Keying Set - I coded this one January morning, while we were getting new Vinyl put in in the kitchen, toilet, and bathroom areas.



I've also seen quite a lot of changes in the Blender community over the years:
* 3 Different Version Control Systems: From CVS (via pageant and puttyssh), to SVN (via TortoiseSVN, and then via my homebrew DualitySVN), to Git (via Git Gui).

* Two Different Issue Trackers: From GForge to Phabricator

* Multiple generators of websites

* Open Move Projects - Big Buck Bunny, Sintel, Camindandes, Cosmos Laundromat

* People coming and going

* The epic 2008 Blender World Cup - Who can forget "Sago" vs "Wu Man" vs "Modron", along with Calvin's videos (IIRC, Sago's "Wu-man" character singing along to the superhero/superman song - "I can't stand to fly... I'm not that naieve... ")

No comments:

Post a Comment