Git Product home page Git Product logo

falcor's Introduction

Falcor 5.1

Falcor is a real-time rendering framework supporting DirectX 12. 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

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 click Add a feature and select Graphics 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.
  • NVAPI, CUDA, OptiX (see below)

Build Configurations

Falcor comes with 2 rendering backends: Native D3D12 and Slang GFX (supporting D3D12 and Vulkan). The Slang GFX backend is fully functional but considered experimental. To select the backend, the following build configurations are available:

  • ReleaseD3D12 / DebugD3D12: Native D3D12 backend (recommended)
  • ReleaseGFX-D3D12 / DebugGFX-D3D12: Slang GFX backend using D3D12 (experimental)
  • ReleaseGFX-VK / DebugGFX-VK: Slang GFX backend using Vulkan (experimental)

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 R470). Extract the content of the zip file into Source/Externals/.packman/ and rename R470-developer to nvapi.

Finally, set FALCOR_ENABLE_NVAPI to 1 in Source/Falcor/Core/FalcorConfig.h

CUDA

To enable CUDA support, download CUDA 11.3.1. After running the installer, navigate to the CUDA installation (C:\Program Files\NVIDIA GPU Computing Tools\CUDA by default). Link or copy the v.11.3 folder into Source/Externals/.packman/cuda.

Finally, set FALCOR_ENABLE_CUDA to 1 in Source/Falcor/Core/FalcorConfig.h

To run the CudaInterop sample application located in Source/Samples/CudaInterop, you first have to add it to the solution (it's not added by default to avoid errors when opening the solution without CUDA installed).

To create a new CUDA enabled Falcor application, follow these steps:

  1. Create a new CUDA Runtime project and add it to the Falcor solution.
  2. In the Solution Explorer, right-click on References under the project and select Add Reference, then add Falcor.
  3. Open the Property Manager and add the Falcor and FalcorCUDA property sheets to both Debug and Release. These are located in Source/Falcor.
  4. Open the project's properties and go to CUDA/C++ and set CUDA Toolkit Custom Dir to $(SolutionDir)Source\Externals\.packman\cuda, then go to Linker -> System and change the SubSystem to Windows.

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 Source\Externals\.packman\optix (i.e., file Source\Externals\.packman\optix\include\optix.h should exist).

Finally, set FALCOR_ENABLE_OPTIX to 1 in Source/Falcor/Core/FalcorConfig.h

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:

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 to 1.
  • FALCOR_ENABLE_PROFILER - Enable/disable the internal CPU/GPU profiler. By default, it is set to 1.

Resources

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 =       {3},
   url =         {https://github.com/NVIDIAGameWorks/Falcor},
   note =        {\url{https://github.com/NVIDIAGameWorks/Falcor}}
}

falcor's People

Contributors

ashwinnv avatar benaryorg avatar clavellenv avatar germanaizek avatar guoxx avatar halldorfannar avatar kyaonv avatar moakesnv avatar nbentynv avatar pierremoreau avatar shill-lucasfilm avatar skallweitnv avatar snosixtyboo avatar tangent-vector avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.