Sparse Voxel Octree (Vulkan Version)
A GPU SVO Builder using the rasterization pipeline, an efficient SVO ray marcher and a simple SVO path tracer.
If you want an OpenGL version, check OpenGL branch.
Compilation
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Built With
- volk - Vulkan meta-loader
- VulkanMemoryAllocator - Vulkan memory allocation
- GLFW - Window creation and management
- GLM - Maths calculations
- stb_image - Image loading
- TinyOBJLoader - Obj loading
- TinyEXR - EXR file saving
- meshoptimizer - Optimize mesh
- ImGui - UI rendering
- tinyfiledialogs - Call native file dialog (require Zenity on linux)
- spdlog - Logging system
- FontAwesome - Icon font
Usage
- Camera
- W A S D - move around (horizontally)
- SPACE - go up
- LSHIFT - go down
- Drag - change perspective
- X - toggle ui display
Improvements
The new Vulkan version is much faster than the old OpenGL version, given the comparison below:
GTX 1660 Ti
SVO build time | Crytek Sponza (2^10) | San Miguel (2^11) | Living Room (2^12) |
---|---|---|---|
Vulkan (new) | 19 ms | 203 ms | 108 ms |
OpenGL (old) | 470 ms | -- | -- |
Quadro M1200
SVO build time | Crytek Sponza (2^10) | San Miguel (2^11) | Living Room (2^12) |
---|---|---|---|
Vulkan (new) | 80 ms | 356 ms | 658 ms |
OpenGL (old) | 421 ms | 1799 ms | 3861 ms |
In addition, the new Vulkan version has some advanced features such as asynchronous model loading and asynchronous path tracing.
TODOs
v1.0
- Allow window resizing
- Test queue ownership transfer
- Environment map
v2.0
- Voxel editor ?
- Gradient-domain path tracing ?
- Build SVO contours ?
Reference
- https://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-SparseVoxelization.pdf - Voxelization and SVO building
- https://research.nvidia.com/publication/efficient-sparse-voxel-octrees - SVO ray march