/VeistEngine

Vulkan rendering engine written with the objective of learning how the basics of the graphics API.

Primary LanguageC++MIT LicenseMIT

VeistEngine

Veist is a vulkan rendering engine written with the objective of learning how the basics of the graphics API and game engines.
Currently a work in progress, it has several features already such as a working proof of concept editor, a rendergraph system to easily setup the rendering architecture and automatically handle and manage device resources. Simple deferred and forward rendering have been implemented, with clustered/forward+ to be implemented soon on the renderer side. The engine and editor themselves are also a work in progress.

Current features:

Engine:

  • Spir-V reflection of glsl shader to create descriptor set layouts.
  • Command buffer recording abstraction.
  • Free camera movement using quaternions.
  • GLTF2.0 model loading
  • Uses GLFW for window mangement
  • ImGUI based dditor built as a separate program
  • Entity component system
  • Movable transform components
  • RenderGraph rendering system (Allows renderer architecture to be swapped mid program from deferred to forward)

Renderer:

  • Deferred fenderer
  • Forward renderer
  • Double buffering
  • Directional and Point lights
  • Physically Based Rendering (Cook Torrance BRDF)
  • Image-Based Lighting (calculates diffuse irradince maps, BRDF LUTs and pre-filtered environment map using compute shaders)
  • Cubemapped skybox
  • ShadowMapping

Example images:

Editor and Sponza scene loaded. Shadow mapping and render target options

Editor and Sponza scene loaded. Deferred PBR renderer with point and directional lights. 2D billboard icons for lights (no shadows yet)

Image Based Lighting. Only ambient light is being used in this example (old)

Simple PBR shading with directional light(sun) and two point lights (older)
Skybox sample

Download:

Although the project is fully for educational purposes feel free to download it if you so want. I cant guarantee it will fully function. Once cloned, cmake can be used to build the project however a few errors might show up:

  • Make sure to "git submodule init" and "git submodule update" to initialize a few of the libraries.
  • In Cmake untick SPIRV_CROSS_ENABLE_TEST if it is enabled.
  • If the project gives errors when running about missing shader files, the working directory of the Editor project might be one directory out. It should be in VeistEngine/bin/XXXXX(Debug, Release etc...).

Resources:

Main resources being used are:

External libraries used:

  • stbimage for texture/image loading.
  • dearImgui for GUI.
  • GLFW for hardware window abstraction.
  • glm math library originally written for openGL.
  • vma Vulkan Memory Allocator.
  • Tinygltf Header only file for loading gltf parser.
  • Spirv-Cross Used for automatic shader reflection of descriptor layouts.

Models and Textures: