Skip to content

KabalMcBlade/Vesper

Repository files navigation

Vesper

Render Engine Using the Vulkan API

This engine was created from scratch to explore the Vulkan API and learn more about this modern graphics API. I am not a rendering or engine programmer, so please bear that in mind!

"Vesper" means evening in Latin

The main and important distinction between this engine and many others is that it is entirely powered by my own ECS library. When I say "fully," I mean every part of it: objects to be rendered must have a vertex and/or an index buffer component assigned, just to name one example

Installation Notes

Inclusion and relative paths

This project uses vma and glm (for now). Both of them have been referenced from VulkanSDK, so for a path point of view, you should have:
C:\VulkanSDK{version}\Include\glm
C:\VulkanSDK{version}\Include\vma
which in my case {version} is 1.3.261.1

This is not mandatory but avoid you to add or change various paths in the project files.

Linking

Currently the project is set as dynamic library DLL, but can be built as static library LIB if you'd like.
The different settings for linkage are, in Windows and Visual Studio 2022:

  • Dynamic Library:
    • Vesper Engine
      • Runtime Library: Multi-threaded DLL (/MD) OR Multi-threaded Debug DLL (/MDd)
      • Preprocessor macro to add: ECS_DLL_EXPORT;VESPERENGINE_DLL_EXPORT;
    • Viewer or any other executable
      • Runtime Library: Multi-threaded DLL (/MD) OR Multi-threaded Debug DLL (/MDd)
      • Preprocessor macro to add: ECS_DLL_IMPORT;VESPERENGINE_DLL_IMPORT;
  • Static Library:
    • Vesper Engine
      • Runtime Library: Multi-threaded (/MT) OR Multi-threaded Debug (/MTd)
    • Viewer or Any executable
      • Runtime Library: Multi-threaded (/MT) OR Multi-threaded Debug (/MTd)

Features

  • ECS core architecture
  • Latest Vulkan API support
  • Automatic support for both bindless and standard resource binding (textures and buffers)
  • Phong shading pipeline for opaque rendering
  • Phong shading pipeline for transparent rendering
  • Integrated support for push constants (pre-allocated 128-byte layout) and specialization constants
  • PushConstants function allows injecting push constants without rebinding the global or bindless pipeline
  • Extendable render pipeline architecture (see the Viewer using CustomOpaqueRenderSystem and CustomTransparentRenderSystem, which apply per-object push constants without additional bindings)
  • Skybox supports both standard and HDR formats (float32 and float16), with projection types including Equirectangular, Cubemap, Hemisphere, Parabolic, and LatLongCubemap.

Screenshots

I will post screenshots here as new features are added and when there’s something significant to show.

First render from the engine.

Second render from the engine: OBJ loaded using Opaque Phong shader rendering system.

Third render from the engine: OBJs loaded using the Custom Opaque and Custom Transparent Phong shader rendering systems, utilizing push constants without additional bindings, and featuring a skybox.

LICENSE

Build Status

Platform Build Status
Windows (Visual Studio 2022) MSBuild

About

ECS powered game engine using Vulkan API

Resources

License

Stars

Watchers

Forks