After Volo Airsport I’ve worked on a number of things, among which some personal open source projects. Today I’d like to show you a few of them!
Rain World Mod Loader
First up, here’s Rain World Mod Loader:
It consists of:
- A patcher that takes the Unity assembly from the game files, and injects the hooks needed to start loading custom code.
- A small modding framework with which to start writing mods. Each mod is built as a separate assembly, which receives a callback on initialization. From there each mod can start hooking into Rain Word’s existing systems.
I had a lot of fun learning about the nuts and bolts of DotNot assemblies, the assembly-like Intermediate Language found within, and getting it to do my bidding.
This also introduced me to the wonderful tool called dnSpy, which you can use to decompile and browse any DotNot executable or assembly! Well, as long as the code has not been obfuscated. Ever since using this to explore Rain World’s code, any time I come across a new Unity-based game I’ll open it up in dnSpy. It’s such a great opportunity to learn, as you can see how other programmer did particular things.
Here’s Burst Renderer:
It’s a CPU-based ray tracer based on Peter Shirley’s Raytracing in one Weekend book series, which I can strongly recommend if you’re looking to try your hand at some graphics programming.
Specifically, this was one of my first non-trivial projects for which I used Burst, Unity’s new high performance job system and compiler. It takes a bit of getting used to, but the performance benefits, memory management, and safety guarantees are super welcome. I look forward to using it more, much like the new Entity Component System.
This project represented my first foray into Machine Learning. I coded up my own framework for creating neural networks, and hooked them up to:
- MNIST : The canonical handwritten character recognition test
- CIFAR10: images of stuff, with categories
- Unity’s physics engine, for robot locomotion
After a first iteration I started modifying this to use Burst as well, which gave it a nice speedup.
When I pick this project up next, there’s a bunch I want to do:
- Free composition of neural network topology
- Automatic differentiation, getting gradients to be calculated and propagated automatically
- Use a physics engine more suited to offline and parallel computation
- Recurrent networks for handling temporal sequences
- Some exciting tricks I want to keep to myself for now