Lilith Engine is a 3D game engine project made with the Vulkan API. The base code was inspired by courses from the Vulkan Tutorial website and the Tutorial video series from Brenan Galea, and new features are progressively being implemented such as support for compute and ray tracing pipelines.
The project was developed in Visual Studio 2022. I highly recommand using VS for simplicity and compatibility. You might use older versions of Visual Studio, though the absence of compatibility issues is no guarenteed.
This depository includes all external libraries used, except for Vulkan SDK. You will need to install it from the Vulkan lunarg website. Make sure that the correct path is set for VulkanSDK's include and library directories in the project's properties (you can use this guide if you are unfamiliar with Visual Studio configuration. Don't bother with the project creation).
Open LilithEngine.sln in Visual Studio, build and run the solution. You can use the keyboard to move and rotate the camera.
For now, the code is made so that you can modify the scene in the app.cpp file (in the loadTextures() and loadGameObjects() methods). In the future, this should be eased by using a user interface with ImGUI.
You can enable validation layers (and best practices VL) in the lth_compile_options.hpp file, by commenting or uncommenting the corresponding #define macros.
If you want to load textures, they need to be put in the textures/ folder, and should have one of the following formats: .png, .jpeg, .tga, .bmp, .psd, .gif (non animated), .hdr, .pic, .pnm. Check the loadTextures() method for code references.
Same thing for loading models: put them in the models/ folder. For now, only the .obj format can be read. Check the loadGameObjects() method for reference. If your models appear strangely rotated, they might not use Vulkan's coordinate system.
Shaders need to be put in the shaders/ folder. VS is configured to auto-compile shaders when building, but you can also use directly shadersCompile.bat to compile all of the shaders at once. However, for now it is best to only modify pre-existing shaders, as the file's name are hard-coded in the render pipeline.