Moteur Luz
Un moteur Vulkan que je développe pour étudier et implémenter des techniques de rendu modernes utilisées par les jeux AAA.
Fonctionnalités
- Wrapper Vulkan complet (incluant la création de BLAS et TLAS)
- 3 Approches pour la lumière volumétrique : Froxels, maillage polygonal et espace écran
- Anti-aliasing temporel
- Cartes d'ombres
- Diffusion atmosphérique
- Sérialisation de scène (JSON)
- Rendu différé
- Ombres et occlusion ambiante tracées en temps réel par lancer de rayons
- Ombrage PBR avec métallisé, rugosité, normal, occlusion ambiante et émission
- Ressources Vulkan sans liaison
- Caméra viewport avec projections perspective et orthographique, contrôles de vol et d'orbite
- Interface utilisateur dockable ImGui
Galerie
- Lumière volumétrique basée sur Froxel
- Lumière volumétrique par maillage polygonal
- Lumière volumétrique en espace écran
- Rendu différé (Lumière, Albedo, Normale, Matériau, Émissif et Profondeur)
- Ombres tracées par lancer de rayons et occlusion ambiante

- Éclairage PBR et modèles glTF

- Glisser-déposer des textures

Exigences
- Un GPU prenant en charge l'extension VK_KHR_ray_query (liste des GPU supportés)
- Compilateur C++17. Testé avec `
Visual Studio 2019,ClangetGCC - CMake 3.7 ou supérieur
- Vulkan SDK
Pour Linux
Ce projet utilise la bibliothèque GLFW, pour le compiler sous Linux avec X11 (comme sous Ubuntu 20.04 par défaut) vous aurez besoin de :
sudo apt-get install xorg-devSi vous utilisez un autre gestionnaire de fenêtres (comme Wayland), vous pouvez vérifier les dépendances ici.
Compiler et exécuter
git clone --recursive https://github.com/hadryansalles/Luz
cd Luz
mkdir build
cmake . -Bbuild
cmake --build build --parallel 4
./bin/Luz
- Visual Studio : ouvrez
build/Luz.slnet compilez/exécutez le projetLuz`.
Références et Crédits
- GLFW utilisé pour ouvrir la fenêtre de l'application
- glm utilisé comme bibliothèque mathématique
- ImGui utilisé pour créer l'interface utilisateur
- ImGuizmo utilisé pour créer des gizmos 3D
- spdlog utilisé comme bibliothèque de journalisation
- stb_image utilisé pour charger les fichiers image
- tiny_obj_loader utilisé pour charger les fichiers wavefront .obj
- optick utilisé pour profiler le moteur
- pbr-sky utilisé comme référence pour le modèle atmosphérique du ciel