Falcor
Falcor is a real-time rendering framework supporting DirectX 12 and Vulkan. It aims to improve productivity of research and prototype projects.
Features include:
- Abstracting many common graphics operations, such as shader compilation, model loading, and scene rendering
- DirectX Raytracing abstraction
- Render Graph system
- Python scripting
- Common rendering effects such as shadows and post-processing effects
- Unbiased path tracer
- Integration of various RTX SDKs: DLSS, RTXGI, RTXDI, NRD
Prerequisites
- Windows 10 version 20H2 (October 2020 Update) or newer, OS build revision .789 or newer
- Visual Studio 2019
- Windows 10 SDK (10.0.19041.0) for Windows 10, version 2004
- A GPU which supports DirectX Raytracing, such as the NVIDIA Titan V or GeForce RTX
- NVIDIA driver 466.11 or newer
Optional:
- Windows 10 Graphics Tools. To run DirectX 12 applications with the debug layer enabled, you must install this. There are two ways to install it:
- Click the Windows button and type
Optional Features
, in the window that opens clickAdd a feature
and selectGraphics Tools
. - Download an offline package from here. Choose a ZIP file that matches the OS version you are using (not the SDK version used for building Falcor). The ZIP includes a document which explains how to install the graphics tools.
- Click the Windows button and type
- NVAPI, CUDA, OptiX (see below)
Building Falcor
Falcor uses the CMake build system. Additional information on how to use Falcor with CMake is available in the CMake development documetation page.
Visual Studio
If you are working with Visual Studio 2022, you can setup a native Visual Studio solution by running setup_vs2022.bat
after cloning this repository. The solution files are written to build/windows-vs2022
and the binary output is located in build/windows-vs2022/bin
.
Visual Studio Code
If you are working with Visual Studio Code, run setup.bat
after cloning this repository. This will setup a VS Code workspace in the .vscode
folder with sensible defaults (only if .vscode
does not exist yet). When opening the project folder in VS Code, it will prompt to install recommended extensions. We recommend you do, but at least make sure that CMake Tools is installed. To build Falcor, you can select the configure preset by executing the CMake: Select Configure Preset action (Ctrl+Shift+P). Choose the Windows Ninja/MSVC preset (or one for a different rendering backend). Then simply hit Build (or press F7) to build the project. The binary output is located in build/windows-ninja-msvc/bin
.
Warning: Do not start VS Code from Git Bash, it will modify the PATH
environment variable to an incompatible format, leading to issues with CMake.
Configure Presets
Falcor uses CMake Presets store in CMakePresets.json
to provide a set of commonly used build configurations. You can get the full list of available configure presets running cmake --list-presets
:
$ cmake --list-presets
Available configure presets:
"windows-vs2022" - Windows VS2022
"windows-ninja-msvc" - Windows Ninja/MSVC
"linux-clang" - Linux Ninja/Clang
"linux-gcc" - Linux Ninja/GCC
Use cmake --preset <preset name>
to generate the build tree for a given preset. The build tree is written to the build/<preset name>
folder and the binary output files are in build/<preset name>/bin
.
An existing build tree can be compiled using cmake --build build/<preset name>
.
Note: Some render passes (RTXGI, RTXDI, DLSS in particular) are not fully working with the new Slang GFX backend.
Microsoft DirectX 12 Agility SDK
Falcor uses the Microsoft DirectX 12 Agility SDK to get access to the latest DirectX 12 features. Applications can enable the Agility SDK by putting FALCOR_EXPORT_D3D12_AGILITY_SDK
in the main .cpp
file. Mogwai
, FalcorTest
and RenderGraphEditor
have the Agility SDK enabled by default.
NVAPI
To enable NVAPI support, head over to https://developer.nvidia.com/nvapi and download the latest version of NVAPI (this build is tested against version R520).
Extract the content of the zip file into external/packman/
and rename R520-developer
to nvapi
.
CUDA
To enable CUDA support, download and install CUDA 11.6.2 or later and reconfigure the build.
See the CudaInterop
sample application located in Source/Samples/CudaInterop
for an example of how to use CUDA.
OptiX
If you want to use Falcor's OptiX functionality (specifically the OptixDenoiser
render pass) download the OptiX SDK (Falcor is currently tested against OptiX version 7.3) After running the installer, link or copy the OptiX SDK folder into external/packman/optix
(i.e., file external/packman/optix/include/optix.h
should exist).
Note: You also need CUDA installed to compile the OptixDenoiser
render pass, see above for details.
NVIDIA RTX SDKs
Falcor ships with the following NVIDIA RTX SDKs:
- DLSS (https://github.com/NVIDIA/DLSS)
- RTXGI (https://github.com/NVIDIAGameWorks/RTXGI)
- RTXDI (https://github.com/NVIDIAGameWorks/RTXDI)
- NRD (https://github.com/NVIDIAGameWorks/RayTracingDenoiser)
Note that these SDKs are not under the same license as Falcor, see LICENSE.md for details.
Falcor Configuration
FalcorConfig.h
contains some flags which control Falcor's behavior.
FALCOR_ENABLE_LOGGER
- Enable/disable the logger. By default, it is set to1
.FALCOR_ENABLE_PROFILER
- Enable/disable the internal CPU/GPU profiler. By default, it is set to1
.
Resources
- Falcor: Falcor's GitHub page.
- Documentation: Additional information and tutorials.
- Rendering Resources A collection of scenes loadable in Falcor (pbrt-v4 format).
- ORCA: A collection of scenes and assets optimized for Falcor.
- Slang: Falcor's shading language and compiler.
Citation
If you use Falcor in a research project leading to a publication, please cite the project. The BibTex entry is
@Misc{Kallweit22,
author = {Simon Kallweit and Petrik Clarberg and Craig Kolb and Tom{'a}{\v s} Davidovi{\v c} and Kai-Hwa Yao and Theresa Foley and Yong He and Lifan Wu and Lucy Chen and Tomas Akenine-M{\"o}ller and Chris Wyman and Cyril Crassin and Nir Benty},
title = {The {Falcor} Rendering Framework},
year = {2022},
month = {8},
url = {https://github.com/NVIDIAGameWorks/Falcor},
note = {\url{https://github.com/NVIDIAGameWorks/Falcor}}
}