💡 Lux-GI
Hybrid GI solution, based on DDGI ( include Ray-Tracing and SDF-Tracing )
The project is a Hybrid GI solution, partly inspired by Lumen and DDGI. The main core idea is to provide a complete GI solution (including Indirect-Light, Infinite-Bounce, Emissive-Lighting, Glossy-Reflection, Shadow, AO) that can run on both Raytracing-supported and non-raytracing hardware. Due to the shortage of time, there are still some performance issues in this project, but as a throwaway, I believe it can provide some new ideas to most of the people who are interested in GI.
Left is SDF-On, Right is Raytracing-On
Showcase
Document
Main Features
- Hybrid rendering and Global Illumination
- using Raytracing and SDF-Tracing to make DDGI in realtime
- Surface Cache for SDF Material representation
- Deferred-Shading
- SDF/Ray tracing reflection
- SDF/Ray tracing soft shadow
- SVGF denoiser
- Standard PBR with GGX and roughness/metalness
- ECS IoC Container
- Data Driven ECS architecture
- Auto Injection ECS System(based on entt)
- RHI Interface
- Vulkan 1.3
- SPIR-V reflection
Compile
- Windows
-
- Click gen_build_win.bat
-
- Choose Game as main project
-
- Building with RelWithDebInfo
-
- Linux
- Not support now
- Mac
- Not support now
Game
app
Controls in the - WSAD, QE - movement
- Mouse + Right Button - rotate the camera
- Shift - move faster
Acknowledgments
This project is made with lots of awesome open-source code, they are
-
RTXGI, the fully raytracing DDGI implementation.
-
cereal, A C++11 library for serialization.
-
entt, high performance ECS library
-
glad, an vulkan/opengl function loader
-
glfw, open source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development
-
imgui, is a bloat-free graphical user interface library for C++
-
libacc, About Acceleration structure library (BVH-, KD-Tree) with basic parallel construction
-
hybrid-rendering, provide raytracing and denoise.
-
spriv-cross, SPIRV-Cross is a tool designed for parsing and converting SPIR-V to other shader languages.
-
tracer, c++ crash tracer.
-
glm, OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software.
-
spdlog, Very fast, header-only/compiled, C++ logging library
-
stb, single-file public domain (or MIT licensed) libraries for C/C++
-
flax-engine, open source game engine. provide the idea how to generate and trace sdf.
Also Paper Reference