My 2020 in Review

posted on January 19, 2021

Generally, when it comes to 2020, the less said the better, BUT, since I’ve really enjoyed writing those posts before, here I go.

Personal life

My nephew

Unfortunately, due to the covid pandemic I wasn’t able to travel nearly as much as usual in 2020. I am definitely the indoor type and I would never complain about staying at home, but the reason this really sucked was that I wasn’t able to go back to Bulgaria and see my family as often as I would have liked. So, to a pretty huge extent I missed the second year of my nephew’s life which I count as a great loss.

That being said, the little time that I was able to spend him was pretty magical. Getting a bit older, he is also getting a lot more fun to be with. It’s incredible how much information he soaks just by listening and looking at us. I wish we get to a point in ML, where our algorithms will train like that as well.

Another thing I found quite interesting about him is how fearless he is. Other than a small crab toy that he reeaaally doesn’t like, there’s pretty much nothing scary for him. Walking alone very far from us while outside or going in the dark are certainly no problems for him.

Goran Bregovic gig

It might seem weird to have a whole section in my yearly review about something so inconsequential as a gig, but it was certainly a memorable experience for me. I have been a huge fan of Goran Bregovic and his Wedding and Funeral Orchestra for the last 10 years or so and seeing them live was incredible. They pumped a lot of energy into the audience and we came out of it sweating, sore and exhilarated.

That’s pretty much the only band I am this excited to see live and I am really glad to be able to say that it was even better than I imagined it would be.

Since the gig was in Madrid, we also had a great time walking around and eating tasty food. It’s a really beautiful city.

Work

Rigging

I have been having more and more responsibilities at work which unfortunately leads to less and less motivation to do rigging in my spare time.

The big things I want to explore around rigging in the future are two, but since I really feel burned out from it at the moment, I will just share them here, so they are not just forgotten.

A more interactive workflow

Creating guidable components that can swim inside the geometry is certainly one way to make positioning pivots a lot more interactive and intuitive. What I would like to explore is building the whole rig in that manner.

Essentially, instead of rebuilding the whole rig on a change, I would like to be able to have small hot swappable parts which I can very quickly modify and see the results of, rather than waiting for a full rebuild. The reason why that is tricky is that usually there are some interdependencies between components which needs to be handled.

My ideal workflow would be to have the guides, build code, weights, blendshapes, etc. all opened in different editors/views and modifying each one will rebuild only the modified part in the final rig view.

I have done no research into this area, but if I ever get motivated to look into rigging concepts again this will certainly be towards the top of my list.

A Machine Learning algorithm for positioning joints

Weight painting, blendshapes and positioning joints are the three things that are incredibly hard for automating, since they rely so much on our incredible brain capabilities for pattern recognition.

While an algorithm for weight painting or blendshapes seems so arbitrary that I have no idea how that could be achieved, positioning joints for a biped to some extent is quite straightforward.

My plan is to normalize geometries down to a scale that fits in a pre-defined cube and then voxelize that geometry, so we move away from the arbitraty N - dimensional input (N being the number of verts) to a nX * nY * nZ - dimensional input where nX,nY and nZ are the number of voxels in that pre-defined cube. At that point we have a standardized input which can be plugged into any standard neural network model, although, I would be particularly interested in Convolutional models, since the input is a 3-dimensional cube of voxels which fits very nicely into the idea of having a small kernel explore the input for recognizable features.

I admit that his project seems a lot more appealing to me than the one above, so it’s literally at the top of my rigging to do list.

Game dev

Being at home almost the whole year, I was looking for different games I can play with my friends. We played a bunch of jackbox games, a couple of DnD sessions and some fun, albeit dumb, homebrew games. At around the sametime I was talking to coworkers about the Godot engine that I’ve been reading about, so I started looking into it. Although that’s a lot of fun, I kind of regret spending a lot of time in it, since it feels like a bit of a wasted time.

I was working on an RTS game, which is almost a clone to the old Castle Fight map in Wacraft 3. Horrible idea for a first game, since the scale and amount of features to be handled is quite huge for a gamedev newbie. That’s why I spent a lot of time writing and rewriting different components in order to speed it up. Unfortunately, I ended up giving up, as even after writing my whole navigation system in C++, I still wasn’t able to get a steady 60fps with more than 350-400 units in the world.

Ray tracing

I had a lot of fun in the beginning of the year looking into ray tracing. I know most people write ray tracing engines in their university days, but I never saw the appeal back then. Clearly, I’ve matured now, right?

The Stanford dragon and a bunch of spheres rendered with my path tracer

That incredibly simple renderer is probably my favourite project of 2020, because the concepts behind are just so intuitive. The idea of rays bouncing around feels almost tangible and the techniques of modeling that (described with an amazing clarity in Peter Shirley’s Ray Tracing in One Weekend) are very easy to go along with.

What I found a lot less fun than the basics was trying to put that on my GPU using CUDA.

You can find more images and the code at my github repo.

Advent of Code

Following my last year’s Advent of Code adventure, I was really looking forward to this year’s one and I wasn’t disappointed at all! The one thing I really don’t like about it is that it’s in December, since that’s usually the month where I want to spend as much time as possible with my family.

Home page of Advent of Code 2020, showing all collected stars

That being said, though, this year I tried doing it in Rust and I really liked it. Yes, I found it very frustrating at times, mainly because of an inability to understand the rules about borrowing in the beginning, but as a whole I was really impressed with the language. What I enjoy the most is how much of the usual things I write in python can be quite minimal using Rust’s iterators and chaining functions that operate on them.

Unfortunately, for the most part I didn’t have enough time to both look into writing good Rust code and at the same time write my solutions, so most of the code is rubbish and as far from idiomatic as possible.

Reading

I am a bit disappointed that even though I spent most of my year inside I didn’t really read as much. I find it quite hard to read during the day, as it always feels like I could be doing something more productive which is really a horrible thought and I want to fix that. That’s the only reason I missed going to work, as my commute was my dedicated reading time and I certainly miss that.

That being said, I read 21 books this year. My highlights are definitely Flowers of Algernon, The Left Hand of Darkness and The City and the Stars. At some point I decided I am going to read all of the Nebula Award for Best Novel winners, so I was mostly making my way through it, but I was incredibly surprised that the book that ended up being most memorable on the list so far is the one that’s furthest away from classic science fiction - Flowers of Algernon.

In terms of authors, I had never read an Arthur Clarke book before The City and the Stars, but now I am really keen to read more as I loved his writing style and his ideas. Additionally, reading a few books from Asimov and Ursula Le Guin further confirmed them as absolute masters in my head.

  • Harry Potter and the Goblet of Fire - J.K. Rowling

  • Harry Potter and the Order of the Phoenix - J.K. Rowling

  • Harry Potter and the Half-Blood Prince - J.K. Rowling

  • Harry Potter and the Deathly Hallows - J.K. Rowling

  • Theory of Fun for Game Design - Raph Koster

  • Real-Time Rendering, Fourth Edition - Tomas Akenine-Möller, Eric Haines, Naty Hoffman

  • Ray Tracing Gems - Eric Haines and Tomas Akenine-Möller

  • Fight Club - Chuck Palahniuk

    I head never read it before, but I loved the film. In fact, it’s still my all time favourite. Therefore I was looking forward to read it and I thought it was excellent. This is the only other example to The Martian where I can’t pick a clear favourite between the book and the film.

  • The City and the Stars - Arthur C. Clarke

  • Ender’s Game - Orson Scott Card

    I gave it a go, since it was really highly praised, but for the most part while reading it I was questioning my choice, since it felt so bog standard and transparent that it really didn’t give me any joy. Additionally, I felt it was really poorly written, since I couldn’t believe in most of the choices characters make, as they were almost always completely unjustified and added there just for driving the already mushy story.

  • The End of Eternity - Isaac Asimov

  • Babel 17 - Samuel Delany

  • Flowers for Algernon - Daniel Keyes

    As I mentioned above, this was the most memorable read for me in 2020. Writing, story and characters were all exceptionally well done. On top of that the actual substance of the story itself was really simple and solid, which always makes for a great ride. If you are to pick up one book from my reading list, please make it this one.

  • The Moon is a Harsh Mistress - Robert A. Heinlein

    Absolutely, excellent! Similar to Arthur Clarke, I hadn’t read a Heinlein book before, but knowing he was a sci-fi master I went into it with very high expectations which were met and then some. I thought all characters were very well made and I never found myself questioning whether they have justification for their choices, which always makes the read very smooth.

  • The Einstein Intersection - Samuel Delany

  • Rite of Passage - Alex Panshin

  • The Left Hand of Darkness - Ursula Le Guin

    I can easily see why this book is a classic and why Ursula Le Guin is considered one of the best. Even though the book feels quite slow at times, I feel it really pays off in the long run, not with a culminating crescendo, but just for being there for the whole ride.

  • Ringworld - Larry Niven

    Together with Rendezvous with Rama I feel these two books are the best representation of classic sci-fi on this list. It has a little bit of everything you would like to see - aliens, alien civilization, imaginative technology, etc.

  • A Time of Changes - Robert Silverberg

    Excellent exploration of the interesting idea to avoid the use of the personal pronoun for oneself.

  • The Gods Themselves - Isaac Asimov

    I was a bit surprised by the story itself as it felt that it wasn’t really in Asimov’s usual style, possible because the technology was quite ambiguous. That being said, though, the way it’s written is interesting enough in itself that gives the whole idea of seeing the same story from different angles a whole new spin (Granted at that time, that device was probably not as common as it is now).

  • Rendezvous with Rama - Arthur C. Clarke

    If you are looking for a sci fi book that you would find hard to put down, this is probably the on.