Anemone Engine logo
Image showcasing the Anemone Engine editor

Anemone Engine

Overview

Details

Anemone Engine is my 10 week graduation project that I developed along 3 other programmers.

The engine is a general 3D game engine built using C++, SDL2, Vulkan, and ImGui for the purpose of learning and making a simple game engine.

Team

The team consisted of me, Petter Mikaelsson, Gustav Carlberg, and Kyle Sinclair. I had always wanted to work on a project with Petter and Gustav, and I had previously worked on a small SDL2 game with Kyle, so we were not entirely unfamiliar with each other. Our team got along very well and I am glad that we were able to produce something as amazing as a game engine in the short 10 week time span we had.

Responsibilities

Graphics Programmer

One of my first goals was to integrate Vulkan into the engine and make ImGui use it as the backing rendering API. During the end of the first week I had a running version of the engine that was using ImGui with Vulkan as the backing graphics API.

One thing I really wanted to test out for this project was the Slang shader compiler, however, all the reference material I had for our PBR lighting workflow was made with GLSL, so I had to of course rewrite all of it in order to make use of the functionality that Slang provides.

Engine Programmer

Throughout this entire project, I worked closely with my fellow teammates to decide on the architecture of the engine. I mainly had the joy of working on the graphics engine and how the scene hierarchy and various rendering parameters such as materials and models would get pushed to our renderer. Often I would also find myself review the math of my teammates to make sure everything was working as intended, and I’m glad I was able to help with the math for our systems.

Technical Artist

For this project I decided to integrate the Slang compiler, as it’s a modern shader language which is essentially a superset of HLSL with Vulkan in mind. The language comes with some really interesting features such as interfaces, modules, and constructs for example. Once I had the Slang compiler integrated I was quickly able to convert our existing GLSL shaders into Slang and make use of some of those new features.

As for the lighting model, I’ve been meaning to learn about Google’s Filament, which is a PBR engine with low-end targets in mind, and also quite a good case-study for modern PBR implementations. Whilst there are a handful of shading models that Filament supports, such as Clear Coat, Cloth, and Subsurface, I decided to simplify it and stick to the Standard model for our engine. My process for doing this mainly consisted of me reading through the Filament design document and looking at their GLSL implementation and cross-checking results to make sure I was on the right path.

Build Engineer

For the project, I decided that we should be using Premake to set up and manage our build configurations, as it lets you write it using Lua, so I quickly got the grasp of things. Since we had to on-board two other students a bit later, I also made sure to explain and showcase how our build configuration is set up as well as teaching them how to add further libraries and work with Premake.