/rendering-fw

Rendering framework with rasterizers & path tracers implemented using Vulkan, OptiX & OpenGL

Primary LanguageC++Apache License 2.0Apache-2.0

Rendering FW

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.

screenshot0 screenshot0

Building

This project requires the following dependencies:

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.

Features

  • 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

Available renderers:

  • 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

Planned renderers:

  • Vulkan PBR Rasterizer

Frequent problems

  • 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.