So far, my experience with C has been as a medium to learn low level architecture methods for games. I’ve completed several graphics and physics projects using the language and wrestled with the lack of higher level functionality C++ offers. I’ve had the opportunity to really study the memory costs of C++ abstraction, and it has helped me greatly trim excess in my other projects.
One C project I’m immensely proud of is a node graph material editor made for OpenGL. I worked with Tucker Cole to implement a light polymorphism for the various nodes in a graph. These nodes, when linked together, could influence the properties of a material applied to objects in a 3D rendered scene. Input nodes could be piped into other nodes to adjust them, e.g. mathematical operations. Final outputs such as colors, normals, object position, and many others could be dynamically set in an editor and reflected in the scene in realtime.
C++ has been the bread and butter of my programming education over the years. It’s the first tool I reach for when learning new concepts, and I’m always being blown away by new things with it. It’s very likely that most, if not all, computer science concepts I know were taught to me in C++ first.
The Tanden Engine is made in C++, and is by far the largest pure programming project I have ever been a part of. Object oriented programming is the backbone of this venture, and I’ve been able to utilize the incredible flexibility of the language to design an entity component system for the engine. Components work in tandem with all systems to direct and relay information about gameobjects in a scene. But, we’re still able to use the lower level abstractions to handle delicate memory challenges that arise.
I’ve probably spent the most amount of time both in school and outside of it working with C#. The main context of this has been in Unity, where the Monobehavior components reign supreme. Luckily, I’ve also had a great deal of opportunities to use C# to create tools in the Unity Editor. I’d say that it was this experience that got me into tools programming to start with.
My experience with Python is smaller than any of the other languages, but I very much enjoyed my time working with it. It was introduced to me in a tech art class while creating tools for Autodesk Maya and the lax syntax of the language was off putting at first to my C++ geared mind. Eventually, I found translating my prior CS knowledge was always 1 or 2 steps simpler in Python, and coding with it grew on me.
The majority of my game development experience has been using Unity. Through this I’ve been able to touch on all the different aspects of game programming, from gameplay and systems, to tools and graphics. Working on this platform really gave me the freedom to test the waters with a few different specializations before narrowing it down to what I work on today.
My most technically complex project also happens to be the final project I worked on as an undergrad. Tales from the Blasterverse was a huge mix of working with gameplay programming, creating tools and interfaces, developing AI systems, and wrapping it all in networking architecture. There were a good amount of road bumps and hiccups, but using Unity really allowed me to focus on what features of the game our team wanted to really shine.
Maya has always held a special place in my heart for game development. It was one of the first programs I ever used when getting into this field seriously, back when I might have tried to become a game artist instead of programmer. Since that introduction though, I’ve gotten a chance to write scripts in python, and work on some basic modeling techniques for procedural generation.
The main project I have to highlight with my work with Maya would be my vehicle rigging tools. It allowed users to automatically rig and animate wheeled vehicles. I got to experience some critique on my GUI design, and it was a very helpful experience to get into another program and see what other disciplines look for in their tools.
I’ve luckily had the opportunity to experiment with a variety of IDEs on several projects. So far that experience covers: Atom, CLion, Vim, Visual Studio, and Monodevelop. I have varying knowledge on the different platforms, but in general CLion and Visual Studio have been the main environments where I’ve thrived.
Version Control Experience
Of course any project, big or small, needs some form of version control. While I started with the classic flash drives and google drives, eventually I came into my own with proper version control systems.
Git has by far been my favorite and most well used. I’ve experimented with a few GUIs, Source Tree, and Github mainly, but I always come back to the CLI to do the more complex tasks.
I always love expanding my knowledge of different tech, especially when it relates to tools.
My work with 3d printers and laser cutters has given me a fairly robust skill set with raster and vector image editors. I’d love the chance to further develop those skills and create my own platforms to interface with fabrication hardware.
Just learning how project solutions are created was enough for me to dive deep into CMake. While it’s still somewhat new to me now, I hope that I can continue to create great projects off the cross platform system.
Overall, I really want to learn more about the open source world of software development, and the free space that it offers to both developers and consumers.