In this post, I will discuss advanced computer vision and statistical techniques at the service of what is arguably one of the most important aspects of social life during a global pandemic: silly emotes.
As you may know, and if you're reading this chances are you do, there's this post that's been roaming around for 7 years and periodically resurfaces. It refers to a code golfing challenge dating back in 1984, a few years before I was born. Its rules asked to build a raytracer in C with certain features and functions and shading models. Among those, Andrew Kensler's version, checking in at 1337 bytes, stood out and became world-wide renowned (for good reasons, if you ask me). This was its output.
I have recently (well, since forever) been working on a number of practice tools for speedruns. I must have rewritten the Dark Souls III practice tool from scratch no less than three or four times, and not a single time have I been completely satisfied with the results, in terms of features, user experience and reliability. Though, as I've also been working on practice tools for Sekiro, I believe I have finally found a satisfying setup after much experimentation.
This is my first post in ages. What can I say! I've been too busy studying finance and working to devote much time to writing code for fun. I've found some form of balance as of late, though, and a new drive to discover things, and I've gotten back to the grind.
In the last few weeks I've been working on my thesis on procedural content generation and came across the concept of shape grammars in the context of urban and architectural modeling.
Yesterday I played for the first time Polytron's FEZ. Graphics and design are amazing, but what truly struck me was the way the game switched between the 2D and 3D "looks". It was truly inspiring, so I decided to spend a little time understanding and recreating the world rotation engine.
No big secret, I'm a huge fan of procedural content generation. I'm also a big fan of Johann Sebastian Bach and his Musikalisches Opfer, whose fascinating story I came to know thanks to D.R. Hofstader's "Gödel, Escher, Bach: an Eternal Golden Braid".
Lately I've been experimenting a lot with a number of CG and procedural content generation algorithms, and began feeling the need for mathematical rigour over the practical, "real life situation" style I've been used to by writing Javascript day in, day out. I got to a point where simple simulations required way more boilerplate code than I was willing to write, and the usage of native numeric constructs began getting in the way of performance.
Skeletal animation is a technique that allows for fast, efficient animation of 3D models. In this post I'm going to explain the concepts and my implementation for the GPU matrix palette skinning algorithm in WebGL. Skeletal animation is quite complex and I struggled to find a guide that explained clearly what was going on, or that didn't waste too much time around language-specifics or code engineering making it quite hard to connect the dots in a simple way, so I hope I can manage to keep it simple enough.
In this post I will show you the way I implemented a keyframe-based 3D real time animation using WebGL. Familiarity with the WebGL / OpenGL rendering pipeline, and with linear algebra is necessary. There don't seem to be many well-made explainations online about real time 3D animation with WebGL which aren't involving Three.js and COLLADA so I hope that this will be useful for those who wish to program their own animations.
I recently bought a LeapMotion. It's a great little tool, although interacting with it has somewhat of a learning curve. The API on the other hand has quite a beautiful design, is very well documented and a couple of minutes of reading are enough to get started.
This year I discovered the JS1k code competition just in time for me to submit an entry. I'm not really new at doing ugly things with source code, but this time it was quite different. Perl is one of the quirkiest things I've ever put my hands on, and back in the day when I was scripting day in and day out with it I was happy like a child (well, I was practically a child after all); my Javascript coding skills came through a much more professional context though, so I'm better at being a nice guy and writing clean code than anything else.
I started this blog because I recently stumbled across the beautiful world of graphics programming, and thought that maybe for once sharing my learning process could be useful to somebody, somewhere in the world.