Luz Engine
Un motor Vulkan que estoy desarrollando para estudiar e implementar técnicas modernas de renderizado usadas por juegos AAA.
Características
- Wrapper completo de Vulkan (incluyendo creación de BLAS y TLAS)
- 3 Enfoques para Luz Volumétrica: Froxeles, Malla Poligonal y Espacio de Pantalla
- Anti-Aliasing Temporal
- Mapas de Sombras
- Dispersión Atmosférica
- Serialización de Escena (JSON)
- Renderizado Diferido
- Sombras y oclusión ambiental trazadas en tiempo real con rayos
- Sombreado PBR con metálico, rugosidad, normal, oclusión ambiental y emisión
- Recursos bindless de Vulkan
- Cámara de viewport con proyecciones en perspectiva y ortográfica y controles de vuelo y órbita
- UI ImGui con acoplamiento (docking)
Galería
- Luz Volumétrica basada en Froxeles
- Luz Volumétrica con Malla Poligonal
- Luz Volumétrica en Espacio de Pantalla
- Renderizado Diferido (Luz, Albedo, Normal, Material, Emisivo y Profundidad)

- Sombras trazadas por rayos y oclusión ambiental

- Sombreado PBR y modelos glTF

- Arrastrar y soltar texturas

Requisitos
- Una GPU que soporte la extensión VK_KHR_ray_query (lista de GPUs compatibles)
- Compilador C++17. Probado con `
Visual Studio 2019,ClangyGCC - CMake 3.7 o superior
- Vulkan SDK
Para Linux
Este proyecto usa la biblioteca GLFW, para compilarlo en Linux con X11 (como el Ubuntu 20.04 por defecto) necesitarás:
sudo apt-get install xorg-devSi está utilizando otro gestor de ventanas (como Wayland) puede consultar las dependencias aquí.
Compilar y Ejecutar
git clone --recursive https://github.com/hadryansalles/Luz
cd Luz
mkdir build
cmake . -Bbuild
cmake --build build --parallel 4
./bin/Luz
- Visual Studio: abrir
build/Luz.slny compilar/ejecutar el proyectoLuz`.
Referencias y Créditos
- GLFW utilizado para abrir la ventana de la aplicación
- glm utilizado como la biblioteca de matemáticas
- ImGui utilizado para crear la interfaz de usuario
- ImGuizmo utilizado para crear gizmos 3D
- spdlog utilizado como biblioteca de registro
- stb_image utilizado para cargar archivos de imagen
- tiny_obj_loader utilizado para cargar archivos wavefront .obj
- optick utilizado para perfilar el motor
- pbr-sky utilizado como referencia para el modelo atmosférico del cielo