George Lamb
Hello, my name is George. I'm a programmer from Australia, graduate of AIE Melbourne currently working at Big Ant Studios.
Professional Work
In my first year at Big Ant, I primarily worked to create new gameplay features, working alongside designers, mostly in a Lua scripting environment. Near the end of that year, I was transitioned more towards where my interests lie; rendering and low level game engine features. Since then, I've worked to solve many interesting problems related to Big Ant's in-house game engine, including optimising rendering features, implementing new graphics techniques, writing new shaders and optimising & upgrading existing ones, as well as general maintenance of essential game-support systems. Currently, I work primarily in C++ which most of the engine is written in, with smaller parts of the asset pipeline and tooling being written in C#. I've also made significant contributions to merging core engine code between projects on several occasions. While at Big Ant, I have gained experience working with real-world rendering code for Windows and Linux PCs, PlayStation 4 & 5 and XBox 1 & Series X.
While working on Tiebreak for example, one of my first tasks was to integrate new SSAO and global illumination techniques into the engine, as artists were finding the other ones were giving dissatisfying results. These changes were then merged to other projects.
Personal Projects
I'm passionate about software, so I normally have a project to chip away at in my spare time. Currently, I'm working on my own physics-based renderer using the Vulkan API. It has a neat dynamic abstraction over Vulkan that hashes rendering state and maps it to underlying Vulkan objects to allow CPU-side graphics code to be written quickly and efficiently, while allowing caching of previously-hashed state objects to allow for optimisation when necessary. All memory is sub-allocated from a single buffer using purpose built arena and heap allocators, which helps with keeping track of ownership and memory leaks. I'm making it because I want to try implementing temporal soft shadows as described here, but I haven't finished it yet.
I'm most interested in rendering, but I have also dabbled in 3D physics, compilers and interpreters, software rendering, UI, PS Vita hacking and Linux system administration. My favourite programming language is C.
Previous Projects:
Corrosion
Game framework written in C, with backends for OpenGL and Vulkan. The underlying API is switchable at runtime. It includes libraries for rendering, generic dynamic containers, and windowing and input. It includes a custom-built immediate-mode GUI that can be styled using text-based stylesheets |
Open MV
2D game engine. It uses OpenGL for rendering. It uses an entity component system for game objects and it builds all the gameplay code as a shared object or DLL (depending on platform) and has a system that hot-reloads the DLL when it gets recompiled. It includes a custom-built scripting language that compiles to bytecode, as well as a custom-made immediate-mode GUI. |
QC
LLVM frontend written in C++. Partially implements a custom, C-like programming language with if statements, loops, local variables and arithmetic working as expected. |
Vulkan Renderer
My first Vulkan renderer, made for my AIE complex-games assignment. It includes a basic Vulkan abstraction, my first attempt at making a GUI and a simple renderer that can render 3D models and lights with soft shadows and bloom. |