Monday, December 4, 2017

The Dr is In - PhD, BlenderDev, and Upcoming Project Updates

Woah! It's been over 2 months since I last posted anything here again :(

During that time, I've ended up being super busy with various projects/commitments (which I'll outline below). Unfortunately, this has meant that my todo list/postponed-project backlog had to take a back seat again, along with squeezing in time to write stuff here (Note: This post itself has ended up being rescheduled several times already even!). Hopefully I'll finally manage to get enough time to start making some progress on some of the things I've been wanting to do since early March (EDIT: actually, it's been since October June 2016)! Stay tuned...

(Yikes! Thesis writing/finishing work has really been taking up most of my time + energy over the past year, and basically killed any remaining motivation to write/type anything outside of that).

1) Dr Leung
As many who have been following my Twitter feed would know, back in October, I successfully defended my PhD thesis after a gruelling 1.5 hour oral exam!

Waiting outside the room for results... (I'll spare the internet my bad hair day selfies :P)

The day started well enough - with one of the most energetic thunderstorms in ages. Funnily enough though, I slept right through it ;)

Also, just like that cold and wet day, just weeks into my PhD when I had my wisdom teeth "cut and craned out" by a dentist with "Wreck-it-Ralph" fingers, the weather gods again decided to play some tricks...  (For some reason, everytime I've needed to head out to do some official stuff this year, it's rained on me, but it's sunny every other day of the week!)

As I had a bit of time to kill when I got to campus (traffic jams and breakdowns do happen), I went back up to my office (taking the stairs... again, not to tempt fate too much). A mess of frayed nerves, wild untamable hair, curled in the fetal position clutching a stash of notes while rehearsing my opening talk...

 The view out the window that morning...

And then it was time.

Waiting in the reception area to head in to the room

I guess the exam went well enough.... Well, apart from that instance at about the 1 hour mark (that's 1 hour of pretty much solid talking through sometimes thorny issues from the more critical examiner), when I basically lost my marbles for a bit - I think it was a sludgy combination of brain fog and fatigue started setting in, making it impossible to comprehend the long-winded line of questioning the examiner was making at the time LOL - like, I literally could only hold only 1-2 words in memory long enough to forget them completely.  Fortunately, I managed to bounce back from that, but wow...

[insert shocked/stunned/exhausted photo]

Afterwards, we headed out for lunch to celebrate. We ended up heading to the restaurant we had dinner at after graduating with my BSc(Hons), but since it was quite late on a weekday, it was really relaxed. By that time, my voice was toast (TBH, I've hardly ended up talking that much / for that long in one go), and exhaustion was starting to kick in - heck, I practically headed home and quickly fell asleep until 7-ish, and ended up taking the rest of the evening off as well.

Anyway, it's taken a while to really let this sink in. I'm looking forward to attending graduation next week :)

2) Grease Pencil Dev
In mid-September, I accepted a Dev Fund grant for two 3-week periods in September/October (with a 2 week break in between scheduled so that I could concentrate on my thesis defense without getting stressed worrying about anything else during that time). During that time, my focus was on helping to tame the ballooning bug tracker (blegh!), and also to get the new greasepencil-object branch (i.e. Grease Pencil for 2.8, with lots of new stuff including making GP a proper object type, modifiers, and advanced new shader options). And, to make things a little more exciting, there was going to be a new (and at the time unannounced) Open Movie project (Hero) being directed by Daniel M Lara (pepeland) and being animated completely in 2.8 using the new Grease Pencil features!

There were just 2/3 main snags:
  1) There was a lot of new stuff (code, workflow changes, design decisions, etc.) that had happened over the past few months while I was busy with my thesis that I needed to catch up on and understand before I could start doing anything productive.
  2) Various tech issues I was having getting 2.8 to run (smoothly/at all) on my machine, and to have a convenient dev environment to work on that.
  3) The discovery that there were quite a few places where the approach used in the branch was problematic / needed revision / etc.

And thus began several weeks of intensive refactoring, code cleanups, and various discussion documents noting down all the things I ran across while exploring the branch.

It's only been in the past few weeks that things have begun to settle down a bit, and I finally got the chance to start adding some new functionality (Build Modifier). Unfortunately, there's also been a constant stream of bugs that need resolving - either the ones that came up during production, or others that are introduced by the 10's of commits everyday in the 2.8 branch that almost always end up breaking something somewhere, further delaying any chances of getting the branch merged. Quite frankly, it's getting exhausting trying to keep the branch ticking along and in sync with all the breaking changes happening there all the time. It's also rather frustrating, as any time I have to spend fixing stuff that was working but has now broken *again* in some other way is further delaying all the other projects that I really want to be spending time on.

I should also mention here that even after we get the GP branch merged to 2.8, there are still another 2 sets of big changes I need to work on before we can really call the new GP functionality fully "production ready". Namely, these are:
   1) Restore GP functionality in the 2D editors as "Annotations".  For some reason, GP drawing in 2D editors is currently broken in 2.8 and the branch. However, getting all of that working, AND updating it so that there is a clear difference between "GPencil 3D Art" and "GP 2D Annoations" is likely to be another big bunch of changes in and of itself. It is therefore best that this is done separately from the already-large GP branch. However, for one day that that branch is blocked from getting merged into 2.8, it's another day that I can't really begin work on this stuff. (While I could possibly just create a branch off the GP branch to do this work, it's probably going to be hellish having to also keep this branch in sync with 2.8). Hence, any delays here, just end up pushing alot of other stuff back.
  2) Merging Animation Keyframes and GP keyframes view/editing functionality in the dopesheet.  I started work on this earlier as part of the devfund work, but this has been postponed so far by the more pressing need to fix larger existing problems in the branch that had a more immediate effect on code quality, workflows, and importantly, data structures saved to files.  That said, this is something that would be nice for the GP animators to have/be able to use, but at this stage, it is looking increasingly likely that this won't be happening before the project wraps :(

3) Upcoming Projects
As mentioned at the start of this post, I've got quite a lengthy backlog of projects I'd like to spend some time getting through over the next little while, before I look into taking on any new "big commitments". Given that one of the few remaining sources of motivation I had during the last few months of thesis crunch was that I would finally get to spend some serious time working on these things, it is a current priority of mine to actually get to work on these things at last.

So far though, I haven't really managed to make much headway into this backlog, due to the constant barrage of bugs in the GP branch that crop up during production. Hopefully this will improve a bit in the next few weeks.

Anyways, here's an abbreviated snapshot of some of the things on my list:
  i) Finish Pose Sculpting/Sketching Tools - If there's one thing that I noticed while working on my #150YOD video earlier was that posing rigs using the current tools is abjectly painful having experienced the tools I've got so far.

However, there are still many things to still do here before it's ready for more general release. Among these are Bendy Bone support, better handling of Custom Bone Shapes, and ironing out the controllability bugs with some of the tools. And that's not getting into all the other cool stuff I brainstormed up ages ago but haven't even started working on at all...

If nothing else, I absolutely want to finally spend some time working on this. I just need to get around to it!

  ii) Put together music videos for the ~3 hours of music I ended up recording/composing while working on finishing the writeup of my thesis. During the last few months of intense thesis writing, it was probably only my daily music writing/recording sessions that kept me sane (and keep the stress at bay). In fact, most of my thesis was written while listening to stuff I'd been composing/recording earlier.  Naturally, I'm quite proud of some of this material (hey, it's practically a "battle proven productivity aid" now), and I'd love to release it for others to enjoy.

For the visuals, I'm currently thinking of trying to hack together some kind of auto-generated visualisation, using some toolkits I've been meaning to play with for some time. Hopefully I'll manage to make that happen. Otherwise, I do still have an extensive back catalog of photos I could drawn upon ;)

  iii) Work on several HCI papers I've been thinking about/planning to write.  These include a massive review paper based on material in my thesis  (I'm currently working on this), and a small/simple/straightforward paper testing out some ideas I've been tinkering with (I was working on it earlier this week). Watch this space.

  iv) Update my portfolio website.  Apart from tidying up the coding of the thing, a lot of the content could probably do with a facelift to be more up to date. For example, I really need to get around to adding a page about my PhD research.

  v) Finish writing up several blog posts I've been meaning to write (see below)

  vi) Start investigating/brainstorming ideas for what the next-generation animation tools should look like.   IMO, Pose Sculpting definitely plays a massive part in all this, but the question is, what else do we need to do to take Blender's animation and rigging systems to push the next frontiers.  On this front, Raf Anzovin's recently started blog provides a lot of interesting stuff that touches on a lot of ideas that are very similar to the kinds of things I've been toying with.

  vii) Several non-sexy but essential Animation Editor refactors I've been planning for ages - e.g. Python API access to the filtering API's, unifying Animation Keyframe + GPencil Keyframe views  (i.e. lots of backend changes required here), etc.

  viii) Properly fix the various NLA evaluation issues - As you've probably heard me saying for years now, I've been wanting to get around to fixing the NLA evaluation, but haven't had any solid blocks of uninterrupted time to devote to the problem. Hopefully we'll get to do this sometime over the coming months.

  ix) Play with some experimental Grease Pencil tools  - e.g. Autocomplete stuff (based on the Siggraph Asia 2015 paper),  stroke lighting/auto-shading functionality, more linestyles (e.g. a high quality "pencil" preset is high on my wishlist, along with endcap styles), tool for creating fills in an easier way, etc.

  x) Various Animation Tool stuff  (e.g. Pose Libraries UI, Motion Path rethink, tools for easier looping animations, etc.)

4) Upcoming Posts
Depending on how time goes, I'd like to get around to finishing up a few posts about the following topics. I might not manage to get all of these out this month, but I'll definitely try to get some of these out the door (especially the first one or two).

i) Production Notes (from my #150YOD video project) on Fixes Needed in Blender. As promised way back in September, I hope to finally get this post finished and posted for the rest of the world ot enjoy.

It is currently half-written, as I had originally intended to put itout during the voting week for the competition. However, since I accepted the DevFund grant for getting the GP branch production-ready that weekend, this ended up going on the backburner while I wrestled with various technical issues (i.e. how to free up enough diskspace to get another working copy of Blender on my laptop, and also how to test 2.8 stuff with less lag than I was getting at the time), as well as trying to get to grips with the greasepencil-object branch's codebase/changes/workflow and any issues that arose from that.

Anyways, there are quite a lot of things there that I think would be of a lot of use to many people, so I'll try to get this out soonish (fingers crossed).

ii) Highlights from Blender Conference 2017 - First off, massive kudos to Francesco and De Balie for such good live streaming this year, and for getting the videos uploaded in record time (i.e. most videos were up within 24 hours of the talks!) Wow!  As a result, I had been intending to put up a post highlighting some of the talks that most captured my attention from the conference 1-2 days after it ended. However, at the time, I was also in the middle of a massive refactoring effort to resolve some significant issues identified during the code review. Since, the Hero project were starting to animate shots, and the fact that some of the changes being made would require a whole bunch of file incompatability issues, meaning that it'd be best to get the changes back to the team sooner than later. Talk about a pressure cooker situation! And thus, the less-time-critical blog posts got postponed again... :(

iii) Notes on my audio/music recording workflow - People who've been following my blog over the past year will have noticed that I've been spending an increasing amount of time playing around with recording little improvised violin pieces by overdubbing multiple tracks of myself playing various violin parts (i.e. the "violin layering" series). Earlier this year, fed up by the poor audio quality issues I was facing when doing this with my laptop's builtin microphone, I bit the bullet and went out and bought a "proper" microphone (a Rode NT-USB).  So, one of the things I've been meaning to do is to do a little writeup about my setup for doing this type of thing, and what things I've learned along the way about all this stuff (mainly so that I don't forget some of it).

iv) Some docs about the "Build Modifier" I wrote for the GP branch

v) Maybe some more "Photo Highlight" posts with some of my favourite shots from the past few months

vi) A proper "release" and notes about the little Py-script I hacked together to get files saved with Canon's "AdobeRGB" colorspace to not look desaturated when loaded in browsers/online-photo sharing services.

5) Long Term Plans
At this stage, I'm trying not to make any firm commitments about any long-term things (especially not for anything that lasts more than a few months at most). Part of this is so that I can focus on working on all the various delayed projects on my personal backlog. It's also because it would be great to finally have a chance to take a breather to figure out what direction I want to head in next . TBH, I'm still quite torn between several options, such as:
  * Chasing after an academic job/postdoc - TBH, my motivation/desire to do this waxes and wanes from day to day. On good days, I'm drawn towards it by a combination of "I'm well versed in the academic's life already/I'm probably more academic-like than a lot of people", "research freedom is cool", and "I want to train up a bunch of good students, my way". On bad days though, it's kindof the reverse (e.g. "do I really want to have to tackle all the paperwork/busywork that comes with academic jobs", "how would I actually cope with having to give 1 hour lectures several times a week, including multiple times a day" (esp. considering my general distaste of giving speeches), and/or "do I really want to spend the next 20-30 years stressed out trying to draw blood from ever-shrinking stones to write the next bloody paper" (or rather, how many more diarhoea-riddled days can I endure if I have to write papers all day long "or else"))

  * Finding some kind of industrial research position somewhere. The first question is, where?  The second is, how can I convince them to hire me?

  * Taking up a "simple" developer job somewhere - Either locally, or internationally. Probably preferably locally though.

  * Doing BlenderDev full time - After doing this on the side for so many years, it'd be great to spend some time doing this full time for a while. A few questions remain about the logistics of this, so stay tuned :)

  * Go big and start setting up my own dream org (I'll probably drop details about this in a later post) - All I'll say on this point right now is that the timing doesn't seem quite right for this right now. In particular, there are some thorny issues around financial viabiltiy/sustainability, initial financing, and recruitment of suitable partners/staff, etc. that I'd need to find solutions for before I can really seriously consider this. On the other hand, as far as 10-20 year "what I'd ultimately like to do if money were no problem / what I'd do to bring good to this world", this is hands down what I'd most like to do.

So, as you can tell, there's lots of stuff that's in the air right now, and I'd like to let things settle a bit first before making any firm commitments here, so that I can get some more clarity on these things.


  1. I only can say that you are going to be very busy in the next months!

  2. Congrats!

    Dev roadmap looks good. I'm a TD and animator and the NLA evaluation issue (offset layering) is the only thing preventing me from totally abandoning Maya and working in Blender full time.