Insight

Project Details

Platform:

-PC

Engine/Language:

-C++

Project:

-Individual project

About

Insight is a small project used for video game engine (runtime) development. This project’s main purpose is for an area to try and implement my own ideas and versions of techniques.

Additional Features

Some additional features which have been implemented are:

  • Render graph,
  • Memory tracking,
  • Asset/Resource system
  • Multiple graphics API support (Vulkan/DX12)
  • Runtime shader creation (with descriptor reflection)
  • Task/Job system

Why

One big question I’m asked from friends and family is always why. Why try and make a small engine when other full production engines like Unity and UE4/5 already exist. Why put so much time and effort into something which only I’ll use. For me the answer is because it’s always something new to work on, it’s exciting and always improvements to be made. But the most important answer is because it is always channelling. Runtime development is something which I have and continue to be interested in.

Challenges

The biggest challenge I have encountered has been supporting multiple graphics APIs. The two APIs I’m using are Vulkan and DX12. Vulkan is in use as that is the one I’m most familiar with while I have always wanted to use DX12 due to developing on Windows. While I have been able to get to a stage where the project runs with both there are still some big differences. The main area is with descriptors as both Vulkan (for the time being) and DX12 handle them slightly differently. Another area of challenge has been with the common abstraction for both APIs. Originally my RHI (Render Hardware Interface) abstraction was based on Vulkan as that was the API I start with. But as I’ve used DX12 it has changed to be more like DX12. This is down to DX12 being more restrictive.

While supporting Vulkan and DX12 has been a challenge it has been an enjoyable one.

Future

While I am happy where the project is there is of course more to do. One of the next areas I am planning on working on is distribution. Currently the project is setup to use DLLs for each “module” (Core, Graphics, Input, etc). While this is nice for development; not needing to recompile the entire solution, this is not my preferred way to distribute a build. That would be to compile the project down into a single .exe.

Current as an update to the previous paragraph I have been able to not only compile an Editor version of the engine which can load/unload worlds (scenes), render models with a deferred render setup using my render graph and allow for custom game code to be created within a DLL and hot reloaded into the main application (current example is using editor windows) but I can also build standalone applications which are compile as a single .exe. This allows for easier distribution as I don’t have any engine code in other DLL as the engine is compiled into the standalone.

There is of course still much to be done, compute shader support for the render graph, complete implementation of in editor play mode, and many more editor features like undo/redo.

If you have any question or suggests about this project or any other project, please do not hesitate to contract me. This is an area in which I would like to learn more in.

About

Programmer who has worked at Sumo Digital Nottingham/Leaminton, Playground Games and Unity.