Julius Wendt

Programmer & Game developer

Saturn

Github: https://github.com/cjww/Saturn

Some Current Features

  • Entity Component System (ECS) with EnTT
  • Physics using Nvidia PhysX
  • Forward+ / Tiled Forward rendering
  • Physically Based Rendering (PBR)
  • Editor using ImGui
  • Asynchronous Asset System
  • Serialize Scenes, Entities, Components and more to JSON
  • Lua scripting with serializabe parameters

Some Planned Features

  • Cascaded and Paraboloid Shadow Mapping
  • Screen-space Ambient Occlusion
  • Screen-space Reflection
  • Global Illumiation
  • Particle System
  • Custom Render Pipelines

There is a lot more I wish to explore in the 3D programming world. A lot of functionality needs to be accessable through scripting as well as a solid input system. With all this in the backlog, performance is always in mind and I try to optimize each development step as much as possible on the way.

What is this?

Saturn is my self made 3D game engine using Vulkan and C++. It is primarily a project for me to learn as much as possible about all different aspects of game programming and engine design.

How is it made?

  • C++
  • Vulkan
  • Cmake

The first graphics API I learned was OpenGL and while it is easy to use and works in most cases, it is limited and does not allow the user to fully utilize the modern GPU. Vulkan was the new, powerful and cross platform graphics API competing with DirectX. Learning Vulkan was how this engine started and I now have a pretty good understanding of Vulkan. As a result of that I also have better understanding of how the GPU works. While learning Vulkan at home, I was learning DirectX11 in school.

To ease the development of the engine I built my own framework for Vulkan. The point of this is to abstract away low level aspects such as memory allocation and frame synchronization, while also maintaining the control Vulkan offers.

The engine is built as a static library using my framework and the editor is built as an application instance of the engine, adding editor specific features on top. The idea is that a user should be able to use the engine to make a game completely with C++ without the editor if one wishes.