A rendering framework inspired by lighthouse2. This framework uses a very similar architectural design, but was re-implemented from the ground up. The Vulkan RTX core for lighthouse2 was developed by me and the Vulkan RTX renderer in this project shares most of its code with the Vulkan RTX rendercore of lighthouse2.
This project requires the following dependencies:
- OpenGL, version >=3.3 for any non-Vulkan based renderers, >= 4.5 for Vulkan based renderers (for interop)
- GLEW
- OptiX 6.5 (included)
- OptiX 7.0 (included)
- GLFW 3.3
- FreeImage
- Vulkan-Memory-Allocator
- Assimp
- Embree
- Cpp-Taskflow
- Vulkan SDK
- ImGui
- tinygltf
I recommend using vcpkg as it can provide all the libraries listed above.
To install the dependencies for this project, run: vcpkg install glew glfw3 freeimage vulkan-memory-allocator assimp embree3 cpp-taskflow imgui tinygltf
after installing vcpkg.
This project has only been tested on 64 bit platforms. You may be able to get certain renderers working on 32 bit architectures but it is not guarenteed.
- Overall performance-oriented renderers
- gLTF with animations
- Anything Assimp supports including animation through file formats like Collada and FBX
- Dynamic lighting, point lights, spot lights, directional lights & area lights
- Vulkan RTX path tracer
- OptiX 6.5 RTX path tracer
- OpenGL Renderer
- CPU ray tracer using Embree
- CPU ray tracer using custom BVH implementation (relatively fast as it uses simd packet traversal, but Embree is still a lot faster)
- CUDA (non-RTX) Path tracer using custom BVH implementation
- Vulkan PBR Rasterizer
- If you're running Linux/MacOS and a renderer cannot open/find a specific
shared library, set
LD_LIBRARY_PATH=.
as an environment variable on launch. - On initial launch, the framework will log 'Camera file "camera.bin" does not exist'. This is expected as the file indeed does not (yet) exist. The camera gets saved once the program exits and gets loaded back in when relaunching the framework. If the file does not exist, a camera with default parameters gets loaded.