Luz Engine
A Vulkan engine that I'm developing to study and implement modern rendering techniques used by AAA games.
Features
- Complete Vulkan Wrapper (including BLAS and TLAS creation)
- 3 Approaches for Volumetric Light: Froxels, Polygon Mesh and Screen Space
- Temporal Anti-Aliasing
- Shadow Maps
- Atmospheric Scattering
- Scene Serialization (JSON)
- Deferred Rendering
- Real-time ray traced shadows and ambient occlusion
- PBR Shading with metallic, roughness, normal, ambient occlusion and emission
- Vulkan bindless resources
- Viewport camera with perspective and orthographic projections and fly and orbit controls
- ImGui docking UI
Gallery
- Froxel Based Volumetric Light
- Polygonal Mesh Volumetric Light
- Screen Space Volumetric Light
- Deferred Rendering (Light, Albedo, Normal, Material, Emissive and Depth)

- Ray traced shadows and ambient occlusion

- PBR Shading and glTF models

- Textures drag and drop

Requirements
- A GPU that supports VK_KHR_ray_query extension (list of supported GPUs)
- C++17 compiler. Tested with `
Visual Studio 2019,ClangandGCC - CMake 3.7 or higher
- Vulkan SDK
For Linux
This project uses the GLFW library, to compile it under Linux with X11 (like the default Ubuntu 20.04) you will need:
sudo apt-get install xorg-devIf you are using another window manager (like Wayland) you can check the dependencies here.
Build and Run
git clone --recursive https://github.com/hadryansalles/Luz
cd Luz
mkdir build
cmake . -Bbuild
cmake --build build --parallel 4
./bin/Luz
- Visual Studio: open
build/Luz.slnand compile/run the projectLuz`.
References and Credits
- GLFW used to open the application window
- glm used as the math library
- ImGui used to make the user interface
- ImGuizmo used to create 3D gizmos
- spdlog used as the logging library
- stb_image used to load image files
- tiny_obj_loader used to load wavefront .obj files
- optick used to profile the engine
- pbr-sky used as reference for atmospheric sky model