# Luz Engine
[](LICENSE)
[](https://github.com/hadryansalles/Luz/actions/workflows/Windows.yml)
[](https://github.com/hadryansalles/Luz/actions/workflows/Ubuntu.yml)
A Vulkan engine that I'm developing to study and implement modern rendering techniques used by AAA games.
- [Videos on Youtube](https://www.youtube.com/user/HadryanSalles/videos)
- [Features](#features)
- [How to build and run](#build)
- [References and credits](#references)
## Features
- Complete Vulkan Wrapper (including BLAS and TLAS creation)
- 3 Approches for Volumetric Light: Froxels, Polygonon 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](https://vulkan.gpuinfo.org/listdevicescoverage.php?extension=VK_KHR_ray_query&platform=all))
- C++17 compiler. Tested with ``Visual Studio 2019``, ``Clang`` and ``GCC``
- [CMake 3.7](https://cmake.org/download/) or higher
- [Vulkan SDK](https://vulkan.lunarg.com/sdk/home)
### For Linux
This projects uses GLFW library, to compile it under Linux with X11 (like the default Ubuntu 20.04) you will need:
```sh
sudo apt-get install xorg-dev
```
If you are using another window manager (like Wayland) you can check the dependencies [here](https://www.glfw.org/docs/latest/compile.html#compile_deps).
## Build and Run
```sh
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.sln`` and compile/run the project ``Luz``.
## References and Credits
- [GLFW](https://github.com/glfw/glfw) used to open the application window
- [glm](https://github.com/g-truc/glm) used as the math library
- [ImGui](https://github.com/ocornut/imgui) used to make the user interface
- [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo) used to create 3D gizmos
- [spdlog](https://github.com/gabime/spdlog) used as the logging library
- [stb_image](https://github.com/nothings/stb) used to load image files
- [tiny_obj_loader](https://github.com/tinyobjloader/tinyobjloader) used to load wavefront .obj files
- [optick](https://github.com/bombomby/optick) used to profile the engine
- [pbr-sky](https://www.shadertoy.com/view/slyBDG) used as reference for atmospheric sky model