Releases: NVIDIAGameWorks/Falcor
Falcor 8.0
8.0
Overview
- Added base classes to
SceneandLightCollection - Fixes and additions to differentiable path tracer.
- Switched to new Slang version with API changes.
- Support for Scenes larger than 4GB.
Dependencies
- Update slang to version
2024.1.34- Use new slang API for disabling compiler warnings.
- Disable slang
reinterpretsize mismatch warning to reduce diagnostic noise.
Python
- Add UI interface functions to
Testbed. - Moved the per-frame python callback that allows modifying Scene to Mogwai.
- Add python interface to Device to query available adapters.
- Add error check if no GPU is found.
- Added a convenience camera dump output formatted so it can be directly pasted into .pyscene.
Importers
- Added a scene importer for Mitsuba 3 XML scene files (based on what @skallweit had a few years ago).
- The importer supports a subset of the Mitsuba scene descriptions (see README.md).
- Improvements to make discovery of USD material shaders more robust.
- Add
usdzto list of supported file types.
Passes
- Refactored the return value of InternalPathTracer's traceRay calls.
- Added a new "overlayUI" feature to Mogwai which allows users to draw simple primitives over the final rendered image. This is very helpful for debugging and visualizing aspects of various experiments.
- SceneDebugger can now visualize content of VBuffer, rather than always tracing its primary rays.
- Enable the pixel debugger for per pixel debug printing in the SceneDebugger pass.
- Add support for visualizing
BSDFPropertiesinSceneDebugger.
Differentiable path tracer
- Fix the condition for
computeEmissive. - Fix a division-by-zero issue (which causes NaNs during
bwd_diff) by checkingbsdfSample.pdf > 0. - Change shape optimization examples with
max_bounces=2. - Extend
SceneGradientsto allow more gradient types:MeshPosition,MeshNormal, andMeshTangent. - Add custom derivative functions in
DiffSceneIO.slangto backprop gradients of mesh vertices. - Add an inverse rendering example that optimizes the translation and the rotation angle of the bunny.
- Add an inverse rendering example that morphs a sphere to a bunny.
Scene
Scenenow has a base classISceneto allow alternative Scene implementations.- Switched
RTXDIto useIScene - Switched
ScreenSpaceReSTIRto useIScene - Switched
GridVolumeSamplerto useIScene
- Switched
LightCollectionnow has a base classILightCollectionso different alternative implementations are easier to intergrate.EmissiveLightSamplersnow operate onILightCollectioninstead of on Scene.
- Changed the
setRaytracingShaderDatatobindShaderDataForRaytracingto have singature that's more aligned withbindShaderData- Removed several unnecessary
bindShaderDatacalls (followed bybindShaderDataForRaytracingthat already binds those). - Removed several unnecessary
bindShaderDataForRaytracingcalls (followed byIScene::raytracethat already binds those).
- Removed several unnecessary
- Renamed
getActiveLightstogetActiveAnalyticLightsto make it clear which lights are these (in line withuseAnalyticLights) - Removed the
getActiveLightCountandgetActiveLightas they are not necessary. - Refactored
VertexDatato a separate file, to not require importing all SceneTypes when using it. - Refactored
MaterialInstanceHintsinto its own file, so they can be used in interface without pulling fullMaterialInstancein. (Breaks cyclic dependencies down the line) - Added
unpackHitInfomethod on Scene so it is easier to specialize when needed. - Scene's
HitDatanow returnsPackedHitInfovia apack()call, putting it in line with other structs returning their packed form via apack()call. The fact that HitData already containsPackedHitInfoand no work is done should be an implementation detail, not reflected in the method name. - Added default argument values to
SceneRayQuerycalls. - Added
UpdateFlagsCallbacktoScene, that allows having callback called whenSceneUpdateFlagsare changed, so the update flags are accumulated in the listener rather thanScene. To avoid missing updates when the flags are not acted on right away. - Added SplitBuffer type, that handles buffers larger than 4GB, for up to 4 billion items.
- Top bits of an index are used to select a GPU buffer.
- Vertex data is no longer uploaded inside
AnimationController, but along with Index data it is uploaded when copied into Scene. - Changed
splitMeshGroupMidpointMeshesbehavior in the case where one side of the split ended up empty. This can happen when long skinny triangles make the bbox very imbalanced with respect to the actual triangle centroids. Previously, we would just give up on splitting the group, ending with possible very large groups. New approach just sorts the meshes by their centroids on the axis that was deemed to be the best split axis, and splits the group in half.
Error Handling
- Add checks in parameter block init for invalid use of arrays of textures on vulkan (which previous failed silenetly)
- Note: Checked perf in profiler - effect is negligible compared to cost of the rest of the function
- Turned warning on 4GB buffers into an exception, as it actually affects the renderer's results.
- Add unit test for nested arrays of textures.
- Add unit tests for Slang generics in interfaces.
- Add unit tests for floating-point atomics.
General
- Structured buffers are now created without a UAV counter by default.
- Buffer views are now based on byte ranges, not element ranges.
Buffer::getSRV()andBuffer::getUAV()now take a byte range instead of element range.- Allow USD variant set selection to be overridden through attributes.
- Moved LightProfile handling to MaterialSystem as it is more (emissive) Material than Scene related.
- Update the VNDF sampling function to use the latest spherical cap sampling technique (HPG 2023 paper)
- "Sampling Visible GGX Normals with Spherical Caps" by Dupuy and Benyoub [2023]. See https://www.intel.com/content/www/us/en/developer/articles/technical/sampling-visible-ggx-normals.html
- Make available all imported asset paths and associated material dictionaries
- Add support for shared resources (CUDA) on Vulkan/Linux.
- Added support for 16b images.
- Dropped code that would mistakenly interpret 16b images as Float16.
- Added a flag for saving EXRs in half floats.
- If the input texture is 16b EXR, we automatically set the
Bitmap::ImportFlags::ConvertToFloat16to conserve GPU memory. - Add
Bitmap::ImportFlagsto specify import options, and pass import flags through texture loading functions. - Add flag for converting HDR images to 16-bit format upon texture load.
- Remove unused lod parameter to
prepareShadingData(). - Add tracking of texture ownership in
TextureManager.- Free textures no longer in use when removing materials.
- Add interface for querying memory usage on
Sceneand some utility classes. - Add
TextureManager::getUdimIDs()helper to get list of UDIM IDs for a texture handle. - Remove
Buffer::MapTypeenum. - Change the script name to
run_material_optimization.pyfor consistency. - Added LOD parameter to environment map sampler function.
Bug fixes
- Fixes a discrepancy between Python and C++ default values when creating grids.
- Fixed a possible bug where, if the Assimp importer skipped a mesh, the meshMap would get out of sync with the meshes in the actual aiScene.
- Fixed bug when
LightCollectionwas rebuilt inScene(onEmissiveMaterialsChanged).LightBVHSamplerandEmissionPowerSamplerwere still operating on the oldLightCollectionobject, which was no longer the same object held byScene. - Fix issue with loading filtered attributes from json
- MaterialSystem now re-evaluates the Metadata after calling
update(), to make sure it reports enough texture slots. Can be removed pending fix to unbounded buffers. - Fix PBRT coated and dielectric materials bug.
Bitmap::getSize()is now 64b to avoid crashes on 16k textures.- BakedTexture calculates sizes in size_t to match the
Bitmap::getSize() - Fix issue with refinement of left-handed subdivs.
- Fix 2D multi-sampled texture resolving.
Refactored Attributes and Settings to be more streamlined for the actual usage.
- Added AttributeFilters, to allow attaching attributes to shapes based on the name regex lookup. The new syntax for a filter is:
{ "name": "name of the filter", "regex": "shape_name_to_apply_to.*", "attributes": {"attr":"ibutes","applied":"to","all":"matching","names":1}}- The
nameandregexare optional. Ifregexis not specified, theattributesare applied to all shapes (equal to regex.*) - If neither
namenorregexare required, theattributescan be unnested like so:{"attr":"ibutes","applied":"to","all":"matching","names":1} - This supercedes the previous
attribute.filtersyntax for assigning attributes to all shapes with matching names or all shapes with not matching names. - To attach an attribute to all shapes not matching a name, first create a filter that applies the attribute to all shapes, and then create an attribute that applies the attribute with
nullvalue to the shapes that are not supposed to have it. This unsets the attribute for the given shapes. - All filters are applied in the order in which they were added, and it is possible to add an array of filters at once.
- Refactored the Settings class to be streamlined with the new AttributeFilters pattern.
- Refactored Options handling to match the Attribute handling (except there is no
regex) - The lookup can now only be done by fully qualified name, e.g.
usdImporter:dropPrim
7.0
Overview
This release of Falcor provides the following significant improvements and new features:
- Falcor as a Python extension, allowing Falcor to be used directly from Python.
- CUDA interop, including sharing buffers and synchronization between Falcor and CUDA.
- PyTorch interop, allowing Falcor to be used for implementing PyTorch functions.
- Differentiable Slang and various examples including a BSDF optimizer and a differentiable path tracer.
- Support for Shader Execution Reordering (SER) in the path tracer.
Dependencies
- Update
slangto version2023.3.20. - Update
nvapito versionR535. - Update
DLSSto version3.5.
Build System
- Enable more MSVC warnings.
- Add
FALCOR_ENABLE_ASSERTSCMake option. - Remove
FALCOR_REPORT_EXCEPTION_AS_ERRORCMake option.
Assets
- Fix media files to use relative paths.
- Move volume test scenes to media package.
- Move
grey_and_white_roomscene tofalcor_media. - Replace
CerberuswithCesiumMan.
Examples
- Add a simple example showing interop between Falcor and pytroch, learning to represent an image from a set of gaussians.
- Add Slang based BC7 compressor.
DiffSlang
- Add a
BSDFOptimizerthat can run simple inverse rendering for solving material parameters without any path tracing. - Add a differentiable
evalADfunction toIMaterialInstanceand a differentiablesetupDiffMaterialInstancetoIMaterial. - Implement
evalADandsetupDiffMaterialInstanceforPBRTDiffuseMaterial. Other types of materials have naive placeholders for now. - Add a helper class
GradientIOWrapperto set up the dataflow of scene gradients during backpropagation. - Mark
ShadingDataandShadingFrameasIDifferentiable. - Add a unit test to check
evalADofPBRTDiffuseMaterial.
Add helper classes for differentiable rendering: SceneManager: get/set scene parameters (only apply to the albedo value ofPBRTDiffusefor now).SceneGradients: store scene gradients from backpropagation.
Python API
- Add interface for passing in an already created
DevicetoTestbed. - Add Python bindings for accessing
Bufferas pytorch tensor. - Add Python bindings for CUDA/Falcor sync.
- Add Python bindings for
Program,ProgramDescandComputePass. - Add a simple example using compute shaders from Python.
- Fix
EnvMapPython constructor (they can't return null which we did when the file isn't found). - Improve
Testbed:- Add shader reloading on
F5 - Fix profiler toggling and render profiler even if UI is disabled
- Fix
show_ui - Add
render_texturefor setting a texture to be rendered on the window - Add
should_closeandclosemethod for handling shutdown - Cleanup + comments
- Add shader reloading on
- Add Python bindings for program reflection types.
- Add Python bindings for
ShaderVar. - Add Python bindings to
Texturefor reading/writing subresources as numpy arrays. - Add Python bindings to
Bufferclass:- Buffer properties
to_numpy/from_numpyto convert to/from numpy arrays
- Add Python bindings to
Deviceclass:create_buffer,create_typed_bufferandcreate_structured_buffer
- Add initial Python bindings to
CopyContextclass. - Add Python unit tests for buffer creation, writing and reading from/to numpy arrays.
- Add
pybind11::falcor_enumhelper to allow binding enums that already have string infos (usingFALCOR_ENUM_INFO). - Include
pybind11/functional.hto get correct typing information onstd::functiontypes. - Add Python bindings for
Samplerclass. - Add
[]accessor toRenderGraphPython bindings, allowing to access a pass throughg["PathTracer"]for example. - Add basic ImGUI wrapper with Python bindings in
falcor.uisubmodule. - Only render UI for render graph / scene when they one is loaded.
- Add implicit conversion from python lists to vector types (allow assigning
[10, 20, 30]instead offloat3(10, 20, 30)). - Python bindings for creating profiler events.
Cleanup
- Cleanup use of
$for..loops in shaders. - Add comment about usage of
SlangCompilationFlags::DumpIntermediates. - Rename
computeNewRayOrigin()tocomputeRayOrigin(). - Rename
setShaderDatatobindShaderData. - Add
FALCOR_EXPORT_D3D12_AGILITY_SDKto all sample applications. - Apply
clang-formaton most render passes. - Remove
PythonDictionaryclass. - Rename
InternalDictionarytoDictionary. - Disable
clang-formatargument bin packing.
Error Handling
- Fix
fstd::source_location::current()on MSVC. - Take
std::string_viewas message onExceptionand descendants. Simplify the exception classes as they don't need to do string formatting anymore. FALCOR_GFX_CALL(gfxReportErrorhandler) now handles NVIDIA Aftermath crash dumps before callingreportFatalErrorAndTerminate.msgBoxcreates a window that is always top-most (otherwise we got hidden windows if the main window was not open / already closed).- Fix
getStackTrace(need to create theTraceResolverfirst). - Assertions now throw
AssertionErrorexceptions which translate to Python. - Add support for string message (and formatting) with
FALCOR_ASSERT. - Add
ErrorDiagnosticFlagsto control how errors are reported:BreakOnThrowenables breaking into attached debugger when callingFALCOR_THROW(break on call-site).BreakOnAssertenables breaking into attached debugger when callingFALCOR_ASSERT(break on call-site).AppendStackTraceenables appending a stack trace to the exception message when callingFALCOR_THROWandFALCOR_ASSERT.ShowMessageBoxOnErrorenables showing a message box when calling thereportErrorfamily of functions.
- Change
reportErrorintoreportErrorAndContinueto better describe what it is doing. This function no longer terminates the application. - Change
reportErrorAndAllowRetryto returntrueif user clickedRetry. This function no longer terminates the application. - Change
reportFatalErrorintoreportFatalErrorAndTerminateto better describe what it is doing. - Add
catchAndReportAllExceptionsthat is now used in all sample applications to globally catch errors. - Remove the local exception catching in
SampleApp::run. - Fix places where before we relied on application termination when using
reportErrorAndAllowRetry. We now throw an exception. - Replace calls to
reportErrorwith either one of these: exceptions, logging, show message box. - Consolidate
Core/Assert.h,Core/Errors.handCore/ErrorHandling.hintoCore/Error.h. - Simplify error handling conventions in Falcor:
- Use
static_assertandFALCOR_ASSERTfor assertions. - Use
FALCOR_THROWandFALCOR_CHECKto throwRuntimeErrorexception. - Remove
ArgumentError. - Remove
checkArgumentandcheckInvariantand just useFALCOR_CHECK. - Replace all use of the
FALCOR_CHECK_ARG_XXXmacros with justFALCOR_CHECK. - Make
FALCOR_UNIMPLEMENTEDandFALCOR_UNREACHABLEthrow exceptions instead of being assertions.
- Use
- Adjust conventions in
error-handling.md.
Core
- Rename
RenderContext::flushtoRenderContext::submit. - Rename
Device::flushAndSynctoDevice::wait. - Move state object creation to
Deviceand simplify description structs. - Remove profiler calls around
Swapchain::present()(these calls crash on Vulkan and we probably don't need them so let's just get rid of them). - Remove
ProgramDesc::languagePreludeandProgram::setLanguagePrelude. - Add error checks for texture resource view creation that the right bind flags are set.
- Rename
TextureManager::TextureHandletoTextureManager::CpuTextureHandleto avoid name clash with GPU-sideTextureHandle. - Add convenience functions to convert between CPU and GPU texture handles.
- Update
TextureManagerfor safe resolve of UDIMs. - Disable logging to a file when using Falcor from Python. Without this we litter the runtime folder with
python.exe.X.logfiles. - Add native
AdapterLUIDandAdapterInfoclasses inDevice.h. - Rename
GpuFencetoFence. - Introduce
FenceDescandFence::getDesc. - Add
CopyContext::signalandCopyContext::waitto handle fence signaling and waiting on the command queue. - Remove
GpuFence::syncGpu, instead clients need to callCopyContext::wait. - Rename
GpuFence::syncCputoFence::wait. - Introduce signaled value which represents the last signaled value of the fence (this replaces the CPU value, which was always the last signaled value + 1).
- Introduce
Fence::kAutowhich replaces thestd::optionalwe used before to differentiate between signaling specific fence values or auto-incrementing. - Add
Fence::updateSignaledValuewhich any signaler (host, device, external) can use to update the signaled value and/or get the auto-incremented value to signal. - Introduce timeout when waiting on fence on host.
- Improve error handling for setting variables in
ParameterBlockand throughShaderVar.- Throw exception when trying to bind a resource to a variable of a different type.
- Throw exception when trying to bind a resource to a SRV that is not created with the
ShaderResourceflag. - Throw exception when trying to bind a resource to a UAV that is not created with the
UnorderedAccessflag. - Throw exception when trying to get a resource from a variable of a different type.
- Throw exception when trying to set a uniform variable with a different size/type.
- Reduce reference counting overhead for type information.
- Lifetime is tied to the
ParameterBlockReflectionobject. TheTypedShaderVarOffsethas a non-owning pointer to the type. ShaderVardoes not own either the pointer toParameterBlock(same as before) or the type information.
- Lifetime is tied to the
- Add
FALCOR_GFX_CALLchecks to GFX dispatch calls. - Use
std::string_viewfor shader varia...
6.0
Overview
This release of Falcor provides the following significant improvements and new features:
- Initial work on making Falcor available as a Python module in an external Python environment.
- Introduce a plugin system for handling render passes and scene importers.
- Remove native D3D12 backend and switch to Slang/GFX exclusively for supporting both D3D12 and Vulkan.
- Remove legacy raster code that was not maintained and far from state-of-the-art.
- Replace
glmwith custom vector/matrix classes with more aligned sematics to Slang. - Introduce intrusive reference counted
Objectbase class and replaceType::SharedPtrwithref<Type>. - Improved Linux support.
- Introduce
clang-formatfor automatic code formatting of both C/C++ and Slang source files.
Dependencies
- Update
slangto2023.0.3. - Update
nvapitoR520. - Update
dlssto3.1.0. - Update
ImGUIto latestdockingbranch. - Update
dxcompilerto1.7.2207. - Update
Agility SDKto1.606.3. - Update
assimpto5.2.5. - Update
pythonto3.10.11. - Update
USDto22.11and switch tono-pythonversion. - Update
fmtto10.0.0. - Add
nlohmann::jsonheader-only library. - Add
pybind11_jsonheader-only library. - Switch from using
RapidJSONtonlohmann::json. - Stop including dependencies from
tiny-cuda-nnglobally into Falcor.
Project Structure
- Add new top-level
scriptsfolder for render scripts. - Add new top-level
datafolder that contains all the data that was before spread within theSourcefolder. - Write plugin libraries (dlls) to a separate
pluginsfolder, de-cluttering the main output folder. - Reorganize
mediapackage:- Generally go to
snake_casefilenames. - Move everything into two folders:
test_scenesandtest_images. - Remove some obsolete files.
- Generally go to
Tooling
- Add
clang-formatfor automatic code formatting. - Add
.clang-format-ignorefile to black-, and white-list paths. - Enable
clang-formaton all ofSource/Falcor/Core,Source/Falcor/RenderGraph,Source/Falcor/RenderPasses,Source/Tools, andSource/Samples. - Add
tools/update_comment_stylescript to automatically convert old to new comment style. - Improve
update_legal_headers.pyto abort ifgitis unavailable and gracefully handle untracked files. - Extend
generate_stubs.pywith support for generating bindings for python submodules. - Add
pymacroutility to expandPYMACROmacros in C++ code. This utility is used inVectorMath.hand the variousVectorSwizzleX.inl.hfiles.
Coding Conventions
- Change the function comment coding convention for new code to utilize the existing tool support in Visual Studio and Visual Studio Code.
- Add coding rule that slang requires
1.ffloat literals.
Project Templates
- Rename
PassLibraryTemplatetoRenderPassTemplate. - Rename
ProjectTemplatetoSampleAppTemplate. - Rename
make_new_render_pass_librarytomake_new_render_pass. - Rename
make_new_sampletomake_new_sample_app. - Build templates by default to avoid bitrot.
Build System
- Build with VS2022/14.4 toolchain by default
- Remove
FALCOR_RENDER_BACKENDcmake option. - Simplify build configurations because render backend configuration is gone now.
- Remove
d3d12flag from VS setup scripts. - Fix missing includes.
- Extend header validation with option to ignore individual files.
- Add new cmake presets for building with additional settings for continuous integration.
- Use
FALCOR_SLANG_CONFIGcmake cache option to switch between release and debug version of slang. - Debug version of slang is only available if you build slang yourself and point packman to it, e.g., via
dependencies.user.xml. - Link
argslibrary directly in executables that use it. - Make internal dependencies of
Falcorprivate, add dependencies to render passes where required. - Split
falcor_depsinto multiple finer grained targets. - Silence finding
gitduring configure time. - Introduce
FALCOR_ENABLE_USDto enable/disable compilation of components requiring USD. - Use
find_packageto find a python distribution. - Compile Falcor python bindings as a separate module and place it in the
pythondirectory in the output directory. - Setup python search path to locate the
falcormodule when starting the embedded python interpreter. - Move some targets to
Miscfolder in VS. - Embed git version info in Falcor library.
- Log version string on startup, (e.g.
Falcor 5.2 (commit: ab4852274, branch: git-version)). - Copy
scriptsto binary output directory. - Use lower-case
shadersfolder in binary output directory. - Add
FALCOR_REPORT_EXCEPTION_AS_ERRORcmake option to enable reporting exceptions as errors. - Generate
plugins.jsonin output directory containing a list of all plugins. - Generate
setpath.xxxscripts in output directory. - Generate python stub files for the
falcormodule. - Rename CMake preset
linux-ninja-clangtolinux-clang. - Add support for compiling with GCC (add
linux-gccCMake preset). - Compile with
_GLIBCXX_USE_CXX11_ABI=0for compatibility with USD libraries. - Increase MSVC warnings to
/W4and disable some specific warnings. - Generally enable "shadowing" warnings which avoids non-obvious bugs and paves the way to use text replacement for removing hungerian notation.
- Add
FALCOR_ENABLE_ASANcmake option to enable address sanitizer.
Remove Legacy Code
- Remove
VariablesBufferUI. - Remove
CUDAProgram. - Remove
EnvMapLighting. - Remove
Perceptionutils. - Remove
ModelViewersample. - Remove
RTXGImodule. - Remove
CSMrender pass. - Remove
FXAArender passes. - Remove
SSAOrender pass. - Remove
SkyBoxrender pass. - Remove
ForwardLightingPassrender pass. - Remove
DepthPassrender pass. - Remove
TemporalDelayPassrender pass.
Falcor Python Module
- Falcor no longer requires exact 3.7 Python version.
- Rename Falcor python extension module from
falcortofalcor_extand wrap it in afalcorpackage that sets up the DLL search directory. - Fix Python naming conventions in the bindings of the following classes:
Texture,Testbed,RenderGraph,AABB,Rectangle,Profiler- Note: old bindings are still available but marked
PYTHONDEPRECATED, with the exception ofProfiler
- Note: old bindings are still available but marked
- Cleanup
RenderGraphbindings and write render graphs withRenderPass.create_passinstead of free standingcreatePassfollowed byaddPass. - Remove obsolete bindings for
DeviceDesc,SampleAppDescandWindowDesc. - Add initial bindings for
Device,Resource,Texture,Buffer,CopyContext,ComputeContext,RenderContext - Add initial python test that just instantiates a
Device. - Add new
Testbedapplication class for running Falcor from Python interpreter. - Automatically release Falcor python module handle using python's
atexitinfrastructure. - Allow
Testbedto run in headless mode (enabled by default). - Add a mechanism to detect if
falcorPython module is loaded from the embedded interpreter or not. - Attempt to load Agility SDK when using
falcorfrom the Python interpreter. - Add pybind11 backport of nanobind
ndarrayclass supporting both python buffer protocol anddlpackfor CPU/GPU tensor exchange.
Plugin System
- Introduces a new more generic plugin system, replacing the
RenderPassLibraryand allowing for new plugin types. - Add
PluginManagerfor loading/unloading plugins, querying plugin information and creating plugin instances. - Add
FALCOR_PLUGIN_BASE_CLASSmacro for extending a base class to be used as a plugin interface. - Add
FALCOR_PLUGIN_CLASSmacro for extending a class to be used as a plugin class. - Rename
getPassesin render pass libraries toregisterPluginand use new register mechanism. - Minor adjustments in render pass libraries to make compatible with new plugin system.
- Rename cmake
add_renderpassmacro toadd_plugin. - Always load all plugins at startup based on the
plugins/plugins.jsonindex file.
Cleanup Globals
- Tag globals to be removed using
// TODO: REMOVEGLOBAL. - Remove global
gpDevicedevice pointer. - Remove
RendererandFrameworkinterfaces. - Rename
SampletoSampleAppand refactor to not rely onRendererandFrameworkinterfaces. - Rename
SampleConfigtoSampleAppConfig. - Remove global
gpFrameworkpointer. - Remove
gMainWindowHandleandsetMainWindowHandle. - Convert
TextRendererfrom singleton to a normal class. - Cleanup
TextRendererandFontand enableclang-format. - Make
QueryHeapandGpuMemoryHeaphaving non-owning reference to device. - Remove global in
RenderContext. - Remove global
createRenderGraph()andloadRenderGraph()in Falcor for Python. Usetestbed.createRenderGraph()andtestbed.loadRenderGraph()instead. - Remove global
createPass()in Falcor for Python. UseRenderGraph.createPass()instead. - Keep device in a
std::unique_ptr<Device>inSampleAppandTestbedto better indicated ownership. - Add
SharedCacheutility class for managing shared global data. - Use
SharedCacheinFullScreenPass. - Use
SharedCachein to replace global SDF GPU data. - Make
Deviceown theProfiler. - Also use non-owning pointer to device in
CopyContext/ComputeContext/RenderContextas the life-time of these are tied to the device. - Manage multiple
ImGuicontexts. - Add support managing a list of images in the GUI context to get rid of globals.
- Allow creating multiple
Testbedinstances. - Handle multiple GUI contexts.
- Add image caching in GUI system to remove global clock image textures.
Cleanup
- Prefer using
static constexprin class/struct scoped constants. - Rewrite
T const&toconst T&which is the prevalent convention in Falcor.
Intrusive reference ...
6.0-preview2
Overview
This release of Falcor provides the following significant improvements and new features:
- Initial work on making Falcor available as a Python module in an external Python environment.
- Introduce a plugin system for handling render passes and scene importers.
- Remove native D3D12 backend and switch to Slang/GFX exclusively for supporting both D3D12 and Vulkan.
- Remove legacy raster code that was not maintained and far from state-of-the-art.
- Replace
glmwith custom vector/matrix classes with more aligned sematics to Slang. - Introduce intrusive reference counted
Objectbase class and replaceType::SharedPtrwithref<Type>. - Improved Linux support.
- Introduce
clang-formatfor automatic code formatting of both C/C++ and Slang source files.
Dependencies
- Update
slangto version0.27.14. - Update
nvapito versionR520. - Update
dlssto version3.1.0. - Update
ImGUIto latestdockingbranch. - Update
dxcompilerto1.7.2207. - Update
Agility SDKto1.606.3. - Update
assimpto version5.2.5. - Update
pythonto3.10.11. - Update
USDto22.11and switch tono-pythonversion. - Add
nlohmann::jsonheader-only library. - Add
pybind11_jsonheader-only library. - Switch from using
RapidJSONtonlohmann::json. - Stop including dependencies from
tiny-cuda-nnglobally into Falcor.
Project Structure
- Add new top-level
scriptsfolder for render scripts. - Add new top-level
datafolder that contains all the data that was before spread within theSourcefolder. - Write plugin libraries (dlls) to a separate
pluginsfolder, de-cluttering the main output folder.
Tooling
- Add
clang-formatfor automatic code formatting. - Add
.clang-format-ignorefile to black-, and white-list paths. - Enable
clang-formaton all ofSource/Falcor/Core,Source/Falcor/RenderGraph,Source/Falcor/RenderPasses,Source/Tools, andSource/Samples. - Add
tools/update_comment_stylescript to automatically convert old to new comment style. - Improve
update_legal_headers.pyto abort ifgitis unavailable and gracefully handle untracked files. - Extend
generate_stubs.pywith support for generating bindings for python submodules. - Add
pymacroutility to expandPYMACROmacros in C++ code. This utility is used inVectorMath.hand the variousVectorSwizzleX.inl.hfiles.
Coding Conventions
- Change the function comment coding convention for new code to utilize the existing tool support in Visual Studio and Visual Studio Code.
- Add coding rule that slang requires
1.ffloat literals.
Project Templates
- Rename
PassLibraryTemplatetoRenderPassTemplate. - Rename
ProjectTemplatetoSampleAppTemplate. - Rename
make_new_render_pass_librarytomake_new_render_pass. - Rename
make_new_sampletomake_new_sample_app. - Build templates by default to avoid bitrot.
Build System
- Build with VS2022/14.4 toolchain by default
- Remove
FALCOR_RENDER_BACKENDcmake option. - Simplify build configurations because render backend configuration is gone now.
- Remove
d3d12flag from VS setup scripts. - Fix missing includes.
- Extend header validation with option to ignore individual files.
- Add new cmake presets for building with additional settings for continuous integration.
- Use
FALCOR_SLANG_CONFIGcmake cache option to switch between release and debug version of slang. - Debug version of slang is only available if you build slang yourself and point packman to it, e.g., via
dependencies.user.xml. - Link
argslibrary directly in executables that use it. - Make internal dependencies of
Falcorprivate, add dependencies to render passes where required. - Split
falcor_depsinto multiple finer grained targets. - Silence finding
gitduring configure time. - Introduce
FALCOR_ENABLE_USDto enable/disable compilation of components requiring USD. - Use
find_packageto find a python distribution. - Compile Falcor python bindings as a separate module and place it in the
pythondirectory in the output directory. - Setup python search path to locate the
falcormodule when starting the embedded python interpreter. - Move some targets to
Miscfolder in VS. - Embed git version info in Falcor library.
- Log version string on startup, (e.g.
Falcor 5.2 (commit: ab4852274, branch: git-version)). - Copy
scriptsto binary output directory. - Use lower-case
shadersfolder in binary output directory. - Add
FALCOR_REPORT_EXCEPTION_AS_ERRORcmake option to enable reporting exceptions as errors. - Generate
plugins.jsonin output directory containing a list of all plugins. - Generate
setpath.xxxscripts in output directory. - Generate python stub files for the
falcormodule. - Rename CMake preset
linux-ninja-clangtolinux-clang. - Add support for compiling with GCC (add
linux-gccCMake preset). - Compile with
_GLIBCXX_USE_CXX11_ABI=0for compatibility with USD libraries. - Increase MSVC warnings to
/W4and disable some specific warnings. - Generally enable "shadowing" warnings which avoids non-obvious bugs and paves the way to use text replacement for removing hungerian notation.
Remove Legacy Code
- Remove
VariablesBufferUI. - Remove
CUDAProgram. - Remove
EnvMapLighting. - Remove
Perceptionutils. - Remove
ModelViewersample. - Remove
RTXGImodule. - Remove
CSMrender pass. - Remove
FXAArender passes. - Remove
SSAOrender pass. - Remove
SkyBoxrender pass. - Remove
ForwardLightingPassrender pass. - Remove
DepthPassrender pass. - Remove
TemporalDelayPassrender pass.
Falcor Python Module
- Falcor no longer requires exact 3.7 Python version.
- Rename Falcor python extension module from
falcortofalcor_extand wrap it in afalcorpackage that sets up the DLL search directory. - Fix Python naming conventions in the bindings of the following classes:
Texture,Testbed,RenderGraph,AABB,Rectangle,Profiler- Note: old bindings are still available but marked
PYTHONDEPRECATED, with the exception ofProfiler
- Note: old bindings are still available but marked
- Cleanup
RenderGraphbindings and write render graphs withRenderPass.create_passinstead of free standingcreatePassfollowed byaddPass. - Remove obsolete bindings for
DeviceDesc,SampleAppDescandWindowDesc. - Add initial bindings for
Device,Resource,Texture,Buffer,CopyContext,ComputeContext,RenderContext - Add initial python test that just instantiates a
Device. - Add new
Testbedapplication class for running Falcor from Python interpreter. - Automatically release Falcor python module handle using python's
atexitinfrastructure. - Allow
Testbedto run in headless mode (enabled by default). - Add a mechanism to detect if
falcorPython module is loaded from the embedded interpreter or not. - Attempt to load Agility SDK when using
falcorfrom the Python interpreter. - Add pybind11 backport of nanobind
ndarrayclass supporting both python buffer protocol anddlpackfor CPU/GPU tensor exchange.
Plugin System
- Introduces a new more generic plugin system, replacing the
RenderPassLibraryand allowing for new plugin types. - Add
PluginManagerfor loading/unloading plugins, querying plugin information and creating plugin instances. - Add
FALCOR_PLUGIN_BASE_CLASSmacro for extending a base class to be used as a plugin interface. - Add
FALCOR_PLUGIN_CLASSmacro for extending a class to be used as a plugin class. - Rename
getPassesin render pass libraries toregisterPluginand use new register mechanism. - Minor adjustments in render pass libraries to make compatible with new plugin system.
- Rename cmake
add_renderpassmacro toadd_plugin. - Always load all plugins at startup based on the
plugins/plugins.jsonindex file.
Cleanup Globals
- Tag globals to be removed using
// TODO: REMOVEGLOBAL. - Remove global
gpDevicedevice pointer. - Remove
RendererandFrameworkinterfaces. - Rename
SampletoSampleAppand refactor to not rely onRendererandFrameworkinterfaces. - Rename
SampleConfigtoSampleAppConfig. - Remove global
gpFrameworkpointer. - Remove
gMainWindowHandleandsetMainWindowHandle. - Convert
TextRendererfrom singleton to a normal class. - Cleanup
TextRendererandFontand enableclang-format. - Make
QueryHeapandGpuMemoryHeaphaving non-owning reference to device. - Remove global in
RenderContext. - Remove global
createRenderGraph()andloadRenderGraph()in Falcor for Python. Usetestbed.createRenderGraph()andtestbed.loadRenderGraph()instead. - Remove global
createPass()in Falcor for Python. UseRenderGraph.createPass()instead. - Keep device in a
std::unique_ptr<Device>inSampleAppandTestbedto better indicated ownership. - Add
SharedCacheutility class for managing shared global data. - Use
SharedCacheinFullScreenPass. - Use
SharedCachein to replace global SDF GPU data. - Make
Deviceown theProfiler. - Also use non-owning pointer to device in
CopyContext/ComputeContext/RenderContextas the life-time of these are tied to the device. - Manage multiple
ImGuicontexts. - Add support managing a list of images in the GUI context to get rid of globals.
- Allow creating multiple
Testbedinstances. - Handle multiple GUI contexts.
- Add image caching in GUI system to remove global clock image textures.
Cleanup
- Prefer using
static constexprin class/struct scoped constants. - Rewrite
T const&toconst T&which is the prevalent convention in Falcor.
Intrusive reference counting
- Add
Objectbase class for reference counted objects. - Add
ref<T>reference counting helper to reference objects derived fromObject. - Add
BreakableReferencetype, to allow a subset of API classes to break their strong referen...
6.0-preview
Overview
This release of Falcor provides the following significant improvements and new features:
- Initial work on making Falcor available as a Python module in an external Python environment.
- Introduce a plugin system for handling render passes and scene importers.
- Remove native D3D12 backend and switch to Slang/GFX exclusively for supporting both D3D12 and Vulkan.
- Remove legacy raster code that was not maintained and far from state-of-the-art.
- Introduce
clang-formatfor automatic code formatting of both C/C++ and Slang source files.
Dependencies
- Update
slangto version0.24.52. - Update
nvapito versionR520. - Update
dlssto version3.1.0. - Update
ImGUIto latestdockingbranch. - Update
dxcompilerto1.7.2207. - Update
Agility SDKto1.606.3. - Add
nlohmann::jsonheader-only library. - Add
pybind11_jsonheader-only library. - Switch from using
RapidJSONtonlohmann::json. - Stop including dependencies from
tiny-cuda-nnglobally into Falcor.
Project Structure
- Add new top-level
scriptsfolder for render scripts. - Add new top-level
datafolder that contains all the data that was before spread within theSourcefolder. - Write plugin libraries (dlls) to a separate
pluginsfolder, de-cluttering the main output folder.
Tooling
- Add
clang-formatfor automatic code formatting. - Add
.clang-format-ignorefile to black-, and white-list paths. - Enable
clang-formaton all ofSource/Falcor/Core,Source/Tools, andSource/Samples. - Add
tools/update_comment_stylescript to automatically convert old to new comment style. - Improve
update_legal_headers.pyto abort ifgitis unavailable and gracefully handle untracked files. - Extend
generate_stubs.pywith support for generating bindings for python submodules.
Coding Conventions
- Change the function comment coding convention for new code to utilize the existing tool support in Visual Studio and Visual Studio Code.
- Add coding rule that slang requires
1.ffloat literals.
Project Templates
- Rename
PassLibraryTemplatetoRenderPassTemplate. - Rename
ProjectTemplatetoSampleAppTemplate. - Rename
make_new_render_pass_librarytomake_new_render_pass. - Rename
make_new_sampletomake_new_sample_app. - Build templates by default to avoid bitrot.
Build System
- Remove
FALCOR_RENDER_BACKENDcmake option. - Simplify build configurations because render backend configuration is gone now.
- Remove
d3d12flag from VS setup scripts. - Fix missing includes.
- Extend header validation with option to ignore individual files.
- Add new cmake presets for building with additional settings for continuous integration.
- Use
FALCOR_SLANG_CONFIGcmake cache option to switch between release and debug version of slang. - Debug version of slang is only available if you build slang yourself and point packman to it, e.g., via
dependencies.user.xml. - Link
argslibrary directly in executables that use it. - Make internal dependencies of
Falcorprivate, add dependencies to render passes where required. - Split
falcor_depsinto multiple finer grained targets. - Silence finding
gitduring configure time. - Introduce
FALCOR_ENABLE_USDto enable/disable compilation of components requiring USD. - Use
find_packageto find a python distribution. - Compile Falcor python bindings as a separate module and place it in the
pythondirectory in the output directory. - Setup python search path to locate the
falcormodule when starting the embedded python interpreter. - Move some targets to
Miscfolder in VS. - Embed git version info in Falcor library.
- Log version string on startup, (e.g.
Falcor 5.2 (commit: ab4852274, branch: git-version)). - Copy
scriptsto binary output directory. - Use lower-case
shadersfolder in binary output directory. - Add
FALCOR_REPORT_EXCEPTION_AS_ERRORcmake option to enable reporting exceptions as errors. - Generate
plugins.jsonin output directory containing a list of all plugins. - Generate
setpath.xxxscripts in output directory. - Generate python stub files for the
falcormodule.
Remove Legacy Code
- Remove
VariablesBufferUI. - Remove
CUDAProgram. - Remove
EnvMapLighting. - Remove
Perceptionutils. - Remove
ModelViewersample. - Remove
RTXGImodule. - Remove
CSMrender pass. - Remove
FXAArender passes. - Remove
SSAOrender pass. - Remove
SkyBoxrender pass. - Remove
ForwardLightingPassrender pass. - Remove
DepthPassrender pass. - Remove
TemporalDelayPassrender pass.
Falcor Python Module
- Add new
Testbedapplication class for running Falcor from Python interpreter. - Automatically release Falcor python module handle using python's
atexitinfrastructure. - Allow
Testbedto run in headless mode (enabled by default). - Add a mechanism to detect if
falcorPython module is loaded from the embedded interpreter or not. - Attempt to load Agility SDK when using
falcorfrom the Python interpreter.
Plugin System
- Introduces a new more generic plugin system, replacing the
RenderPassLibraryand allowing for new plugin types. - Add
PluginManagerfor loading/unloading plugins, querying plugin information and creating plugin instances. - Add
FALCOR_PLUGIN_BASE_CLASSmacro for extending a base class to be used as a plugin interface. - Add
FALCOR_PLUGIN_CLASSmacro for extending a class to be used as a plugin class. - Rename
getPassesin render pass libraries toregisterPluginand use new register mechanism. - Minor adjustments in render pass libraries to make compatible with new plugin system.
- Rename cmake
add_renderpassmacro toadd_plugin. - Always load all plugins at startup based on the
plugins/plugins.jsonindex file.
Cleanup Globals
- Tag globals to be removed using
// TODO: REMOVEGLOBAL. - Remove global
gpDevicedevice pointer. - Add
getGlobalDevice()as a temporary way of still accessing the global pointer until the refactor is done. - Remove
RendererandFrameworkinterfaces. - Rename
SampletoSampleAppand refactor to not rely onRendererandFrameworkinterfaces. - Rename
SampleConfigtoSampleAppConfig. - Remove global
gpFrameworkpointer.
Graphics API
- Report GFX/D3D12 live objects on shutdown in debug builds (helps debugging clean shutdown).
- Cleanup resource format list to match what we have in
gfx. - Add conversion to native Vulkan formats.
- Move utilities for conversion to native formats to
NativeFormats.h(reduce d3d12/vulkan header exposure). - Add
NativeHandleused for passing native graphics API handles. - Add support for querying both D3D12 and Vulkan native handles.
- Move D3D12 specific code into
Shareddirectory (specificallyConstantBufferView). - Remove most obsolete handle definitions in
D3D12Handles.h. - Simplify
ResourceViewbase class. - Work towards not exposing
d3d12.handvulkan.hby default, only where it's actually used. - Enable shader cache by default.
- Add
Swapchainclass. - Remove implicit swapchain and framebuffer handling from
Device. - Add mechanism for passing a shader prelude to the downstream compiler.
- Pass NVAPI search path to
dxc. - Add
ShaderExecutionReorderingAPIandRaytracingReorderingfeature flag. - Add support for creating device on specific graphics adapter.
- Remove documentation of
FALCOR_GPU_VENDOR_IDandFALCOR_GPU_DEVICE_IDwhich are no longer supported. - Remove
FALCOR_D3D12andFALCOR_GFXmacros. - Remove most handle types and replace with
gfxtypes directly. - Use
gfx::BufferResourceandgfx::ImageResourceto reduce amount of casting. - Add device limits to remove D3D12 specific code.
- Remove global blit context.
- Merge all GFX sources in
Source/Falcor/Core/API/GFXinto the main source files inSource/Falcor/Core/API. - Remove D3D12 backend sources in
Source/Falcor/Core/API/D3D12. - Replace
[__unsafeForceInlineEarly]with new[ForceInline]. - Fix
GFXParameterBlockto own resources that are assigned withsetBuffer. - Fix
to_stringforShaderType. - Check for
Device::SupportedFeatures::WaveOperationsinGFXDevice. - Add additional
FALCOR_GFX_CALLchecks and improve logging of failures. - Replace static configuration of GFX device type with the option to set device type at runtime.
- Add runtime checks for D3D12 (
requireD3D12()) to throw an exception not having D3D12 available. - Throw when trying to create invalid entry points on an
RtProgram. - Pass
RenderContextto profile calls. - Add
Device::enableAgilitySDK()to load Agility SDK at runtime. - Add
getImageandgetDatafunctions toTexturePython API, allowing to get images as numpy arrays. - Fix depth clip flag in gfx rasterizer state.
- Disable slang conversion warnings.
Core
- Search paths in
Settingsare now always weakly cannonicalized. - Break into debugger if error message box is disabled.
- Add
setKeyboardInterruptHandler()inOS.hfor setting up a callback for Ctrl-C. - Add
operator<onfloatXandintXtypes. - Remove
postQuitMessagefunction. - Fix return code handling in
SampleApp. - Extend
SampleAppto allow for running without creating a window/swapchain (headless mode). - Do not create FBOs for swapchain images but copy final output to swapchain image instead.
- Rename
SampleApp::onResourceSwapChain()toSampleApp::onResize(). - Add
Window::setWindowIcon()function. - Disable show error message box by default.
- Introduce
settings.json, JSON config file that allows specifying global options by placing it in~/.falcor/settings.json.- Supports
["standardsearchpath"]and["searchpath"]. - Within these, supports
category = "path1;path2;&;@"or ``category = ["path1", "path2", "&", "@"]` - The
&gets replaced b...
- Supports
5.2
Overview
This release of Falcor provides the following significant improvements and new features:
- Switch to the
CMakebuild system. - Cleanup project folder structure.
- Major cleanup to make include files self-sufficient.
- Replace use of
glmmatrices with new matrices inrmcv(row-major column-vector) namespace to match layout on the shader side. - Experimental support for running on Linux.
Build System
- Remove native Visual Studio solution/project files.
- Add CMake build scripts.
- Add
setup.bat,setup_vs2019.batandsetup_vs2022.batconvenience scripts to fetch dependencies and setup VS solutions. - Cleanup a lot of
#ifdef FALCOR_ENABLE_XXXcode in files that are now only compiled if the library is available. - Rename
FALCOR_ENABLE_XXXtoFALCOR_USE_XXXto be consistent with CMake variables. - Initial support for compiling/running on Linux.
- Add
FALCOR_HAS_D3D12andFALCOR_HAS_VULKANfeature flags in CMake and pass them as compile definitions. - Replace
FALCOR_D3D12_AVAILABLEwithFALCOR_HAS_D3D12. - Remove obsolete guards around
FALCOR_EXPORT_D3D12_AGILITY_SDK. - Replace
#pragma comment(lib, xxx)directives with explicit linking from CMake. - Use CMake to detect if certain libraries are available instead of relying on
#defines inFalcorConfig.h. - Conditionally compile
NRDPass,DLSSPassandOptixDenoiser. - Conditionally compile
RTXGIPass,NRDPass,NGXDenoiser,DLDenoiserPassandDeepLearningPasswhen D3D12 is available. - Link
hdf5debug library in debug config. - Add
ninja_log_analyzer.pyscript to parse ninja build log files and show total build time as well as most expensive targets. - Add
FALCOR_PRECOMPILED_HEADERScache variable to enable/disable precompiled headers. - Fix build if precompiled headers are disabled.
- Replace
#pragmainline manifest with externalFalcor.manifestfile. - Make all samples console applications.
- Enable
/W2warning level and/WX(warnings as errors).
VS Code
- Add
.vscode-defaultfolder containing sensible default configuration for VS Code. - Copy
.vscode-defaultto.vscodeinsetup.bat/setup.shif it doesn't exist. This sets up the VS Code workspace on initial setup. - Add recommended VS Code extensions (C++, CMake Tools + language support, editorconfig, Slang language support).
Dependencies
- Update CUDA to version 11.6.2.
- Update Slang to version 0.24.11
- Update
falcor_dependencies. - Update
nanovdbto a recent version. - Add
cmakeandninjato tools.
Project Structure
- Rename
Toolsdirectory totools. - Move
Build/packmantotools/packman. - Rename
Buildtobuild_scripts. - Rename
Mediatomedia. - Rename
Teststotests. - Rename
Docstodocsand move to lower-case file names. - Consolidate packman dependencies to one global
dependencies.xmlin the root. - Move tools to create sample and render pass library to
toolsdirectory. - Remove obsolete scripts.
- Cleanup arguments passed to deployment scripts.
- Establish
externalas the new location for third party libraries.- Add git submodules for the following libraries:
glfw,glm,imgui,pybind11,fmt,args. - Add
mikktspaceas local files. - Remove the same libraries from prebuilt
falcor_dependencies, which now only contains the big libraries expensive to build. - Add automatic initialization of git submodules in
setup.batas well as during configure time (only if not present). - Move header-only libraries to
external/include.
- Add git submodules for the following libraries:
- Cleanup
.editorconfig, remove hard setting line endings to CRLF (use native line ending instead). - Add
.gitattributesfile with* text=auto. - Renormalize existing files in repository to use LF instead of CRLF (only 3 files affected).
Cleanup
- Remove
stdafxprecompiled headers. - Remove
#include <Falcor.h>in all headers in the main Falcor library. - Remove includes in
Falcor.h, onlyCore/andScene/includes remain. - Factor out global macros in
Framework.hinto separateMacros.hfile. - Factor out global assert macros in
Framework.hinto separateAssert.hfile. - Move definitions of
FALCOR_HAS_D3D12_AGILITY_SDKandFALCOR_NVAPI_AVAILABLEintoMacros.h - Remove
has_vtableand usestd::is_polymorphicinstead. - Don't use deprecated
std::iterator(avoids compiler warnings). - Move implementation of
Buffer::adjustSizeOffsetParamsto cpp file. - Move
uinttypedef fromHostDeviceShared.slanghtoVector.hto make it available on host in the context of using other vector types likeuint2,uint3anduint4. - Remove use of raw pointers for object ownership.
- Remove
arraysize()helper and usestd::size()instead. - Move
clamp,lerp,isPowerOf2,div_round_upandalign_tofromFramework.htoUtils/Math/Common.h. - Move
HotReloadFlagsto newHotReloadFlags.h. - Move
FboAttachementTypetoRenderContext.h. - Move
ShaderTypetoShader.h. - Move
ComparisonFunctoAPI/Common.h. - Move
fmtformatters toUtils/StringFormatters.h. - Add
Platform/PlatformHandles.h. - Add
Utils/Math/Matrix.h. - Fix includes for rest of the
Falcorlibrary, all header files are now self-sufficient. - Fix includes in
FalcorInternallibrary, all header files are now self-sufficient. - Get rid of including
Framework.hin any of the include files inFalcorandFalcorInternal. - Add header validation targets for
FalcorandFalcorInternalto allow compiling every header as a separate translation unit to ensure it is self-sufficient. Enabled using cache variableFALCOR_VALIDATE_HEADERS. - Define graphics API handles in
Core/API/D3D12/D3D12Handles.handCore/API/GFX/GFXHandles.h(common include isCore/API/Handles.h). - Define graphics API helpers in
Core/API/D3D12/D3D12API.handCore/API/GFX/GFXAPI.h(common include isCore/API/API.h). - Remove
FalcorD3D12.handFalcorGFX.h. - Move
RayFlagsandgetRaytracingMaxAttributeSizetoRaytracing.h. - Remove
Framework.h, moving exported includes toFalcor.h. - Cleanup
#include ""vs.#include <>use. - Update coding conventions section on include files.
- Fix
this == nullptrundefined behavior. - Add
RenderData::getTexture()to directly get a texture and replaced allrenderData["texture"]->asTexture()withrenderData.getTexture("texture"). - Fix
static_asserts inconstexprcontext. - Move static class template specialization out of class body.
- Add missing virtual destructor to
BaseConverter. - Implement SHA1 to remove dependency to openssl/libcrypto.
- Provide
DXGI_FORMATifdxgiformat.hheader is not available.
Linux Support
- Replace
.dllwith.sowhen loading a render pass. - Implement
MonitorInfoon Linux using GLFW.
C++20 preparation
- Move
span/span.htofstd/span.hand replacetcp::spanwithfstd::span. - Introduce
fstd/bit.has a replacement for<bit>. - Replace
getNextPowerOf2withstd::bit_ceilandgetLowerPowerOf2withstd::bit_floor. - Fix usage of
libfmtAPI. - Fix format strings (found while enabling compile time format string checks testing C++20).
Core
- Updates due to changes in
pnanovdbAPI. - Add
FALCOR_ENABLE_RENDER_PASS_HOT_RELOADdefine (defaults to0) to disable. - Do not copy render pass DLLs to temporary files when hot reloading is disabled.
- Fix misleading parameter names in the TLAS build.
- Add interfaces for specifying Slang source handling.
- Add unit tests for string based Slang shader creation.
- Add means to force all shaders to have some compiler flags on and off.
- Detect target platform and set
FALCOR_PLATFORM. - Convenience macros for checking platform:
FALCOR_WINDOWSandFALCOR_LINUX - Detect compiler and set
FALCOR_COMPILER - Convenience macros for checking compiler:
FALCOR_MSVC,FALCOR_CLANGandFALCOR_GCC. - Make use of platform/compiler defines.
- Add unit tests for
StructuredBuffermatrix types. - Add unit test for
ByteAddressBuffertemplated loads. - Add
Program::ShaderModulehelper to represent a Slang module stored as a string or file. - Add
Program::Descinterfaces for adding a shader module or list of modules. - Remove unnecessary
ShaderLibraryclass. - Fix shader reflection of fp16 matrix types.
- Add support to get current peak resident set size to control memory used.
Clockcan now loop the frame time, to replay animation.- Add optional
CameraControllerbounding box clamp. - Improve error handling of type conformances in program creation.
Misc
- The lerp function can now lerp non-float types (e.g., matrices or vectors).
- Henyey-Greenstein anisotropy bugfix.
- Optimize
RayCones::computeLOD(). - Remove
computeLOD()that used texture dimensions as input. This function is not used. - Add support for general Options (nested dictionaries, can look up in the Renderman-compatible way of "dict0:dict1"). The current options are limited to controlling the
usdImporter - Add support for general Attributes. For example
usdImporter:enableMotionis true by default. Can be overriden by also settingusdImporter:enableMotion.filter, which can be either a regex of shape names to which to apply the attribute. Or a list of 1 or 2 items, where first is the regex and the second is True when the Attribute should be applied to all shapes whose name does NOT match the regex. There can be only one such Attribute, which is a limitation that will be lifted in the future. - Add Attribute controls for curve tessellation (curves:mode, subdivPerSegment, keepOneEveryXStrands, keepOneEveryXVerticesPerStrand)
- Add an Attribute to convert disk light into a mesh.
- Add Options to control the default behavior of Mogwai controls (hidden or showing).
Matrix Libray
- Replace GLM (col major) with
rmcv(row-majo...
5.1
Overview
This release of Falcor provides the following significant improvements and new features:
- Improved NRD denoiser, especially for denoising path traced signals.
- Improved sampling of specular surfaces when using RTXDI.
- A new scene importer for
pbrt-v4scenes. This allows to load most of the scenes from the rendering resources page (https://benedikt-bitterli.me/resources). - Fully functional rendering backend based on Slang GFX supporting D3D12 and Vulkan (still experimental).
- Shipping with the following RTX SDKs out of the box: DLSS, RTXGI, RTXDI, NRD (note that they not covered by the same license as Falcor).
Dependencies
- Update
packmanto version 6.42. - Automatically fetch RTX SDKs (DLSS, RTXGI, RTXDI, NRD) instead of requiring manual installation.
- Update
falcor_dependenciespackage (recent versions of OSS libraries). - Add
pugixmllibrary tofalcor_depedencies. - Remove
DirectXTexlibrary fromfalcor_depenencies. - Add
fstd::span, an implementation of C++20std::span. - Link
zlibintoFalcor.dll. - Update Slang to version 0.23.7.
- Update usage of FFMPEG API (
av_init_packetis deprecated).
Core
- Use
std::filesystem::pathinstead ofstd::stringfor referring to file paths. - Add support for logging
std::filesystem::pathobjects usingfmt::format. - Rename
filenameargument topathin many places. - Rename
ShaderLibrary::getFilename()toShaderLibrary::getPath(). - Rename
EnvMap::getFilename()toEnvMap::getPath(). - Rename
Scene::getFilename()toScene::getPath(). - Remove
doesFileExist,isDirectoryExists,createDirectory,canonicalizeFilename,getDirectoryFromFile,getExtensionFromFile,getFilenameFromPath,swapFileExtension,enumerateFiles - Rename
getTempFilenametogetTempFilePath. - Rename
DllHandletoSharedLibraryHandle. - Rename
loadDlltoloadSharedLibrary. - Rename
releaseDlltoreleaseSharedLibrary. - Rename
getDllProcAddresstogetProcAddress. - Replace calls to
std::removewithstd::filesystem::remove. - Expose
std::filesystem::pathfor file path options in render passes. This allows to usepathlib.Pathon the Python side. - Add
decompressFilefunction. - Add support for loading
.gzfiles inTriangleMesh::createFromFile(). - Add
TriangleMesh::applyTransform()taking a raw matrix. - Take
std::string_viewformat strings on exception constructors. - Cast
enum classvalues to integers when passing tofmt::format(new versions don't support implicit conversion). - Fix handling creation of
RasterPassandRasterScenePasswith empty vertex shader entry point. - Add
IDScopehelper class to create ImGui ID scopes (usingImGui::PushID/PopID). - Add ID scopes to render graph UI to allow for multiple instances of the same render pass.
- Add a global input state class that can be used to check the states of keys and mouse buttons.
- Add functions for checking if keys, modifier keys (Ctrl, Alt, and Shift), and mouse buttons are held down, just pressed, and just released.
- Move the
Keyenum class to a new namespace calledInput. - Add enums for modifiers and mouse buttons inside the
Inputnamespace. - Change the types of the MouseEvent to be
ButtonDownandButtonUpinstead of types specific for the three buttons left, middle and right. - Replace
InputModiferwithModifierFlagsin theMouseEventandKeyboardEventstructs. - Make the
InputStateclass accessible from thegpFrameworkpointer in theSampleclass. - Add gamepad support.
- Add
GamepadButton,GamepadEventandGamepadStateto represent gamepad events and state. - Extend
IRendererwithonGamepadEventandonGamepadStatemembers.
- Add
- Add gamepad support to
CameraController. - Add
hasExtension()to check for file extensions using case-insensitive comparison. - Rename
getExtensionFromFile()togetExtensionFromPath()and return lower-case strings. - Add
FALCOR_ASSERT_MSGmacro for asserts with messages. - Add additional assert macros (
FALCOR_ASSERT_EQ,FALCOR_ASSERT_NEetc.) to print values when a comparison assert fails. - Add
FALCOR_PRINTconvenience macro for printing variable name + value. - Add workarounds for missing profiler GPU timing synchronization.
- Skip first frame to not include zero timings in captured profiling data.
API
- Fix binding both UAV and SRV of the same resource.
- Add a
FALCOR_D3D12_AVAILABLEmacro that is defined to be 1 for both D3D12 and GFX backend. - Move
D3D12DescriptorSet,D3D12DescriptorPool,D3D12DescriptorHeap,D3D12RootSignatureto be conditional behindFALCOR_D3D12_AVAILABLEinstead ofFALCOR_D3D12, so these classes are usable when using GFX. - Add
getD3D12Handlein addition to the existinggetApiHandlemethod to several classes so that D3D12 specific user code can use them to get d3d12 handles regardless of whether GFX or D3D12 backend is in use. - Get rid of the use of
ParameterBlock::getUnderlyingConstantBufferby using a mockedID3D12Resourceimplementation that allows obtaining the updated constant buffer data from RTXGI SDK without reading back from GPU memory, so we can use the normalParameterBlock::setBlobto update the parameter block. - Enables NRD pass, RTXGIVolume, RTXGI, DeepLearningPass, DLDenoiser pass to be used in GFX.
- Move
RtProgramVars::initfromD3D12ProgramVars.cpptoProgramVars.cpp - Move
getUniqueRtEntryPointGroupKernelsfromD3D12ProgramVars.cpptoProgramVars.cpp - Move all contents in
ShaderTable.cpptoD3DShaderTable.cppmaking it D3D12 only. GFX'sIShaderTableabstraction can be directly used byRtProgramVarsto implement its functionality. - Add device caps check for wave operations support.
- Extend
Programto allow setting type conformances per entry point hit group. - Add optional entry point name suffix per entry point in
RtProgram::Desc. - Add validation that all entry points names are unique.
- Cleanup of
Programconstruction and registration for hot reload.
Shaders
- Remove implicit setting of
defaultVSvertex shader entry point. - Consistently using
vsMainandpsMainas entry point names. - Consistently using
.3d.slangextension for shaders containing both VS and PS entry points.
Scene
- Redesign animation of curves tessellated into poly-tubes: keep keyframe data of curves in LSS form and only tessellate the first frame of animation into a mesh that is then animated and rendered.
- Fix mismatch of pack and unpack SVO hit data.
- Add mesh vertex animation support.
- Fix ambiguous usage of Dynamic in Scene data structures when referring to meshes.
- Add accessors to
SceneandMaterialSystemto query geometries and type conformances by material type. - Add image test for ray tracing program with
createDynamicDispatchand hit groups specialized by type conformances.
- Add option to toggle camera controls.
Materials
IBSDF::eval()now expects a sampler for probabilistic BSDF evaluations.
Spectra
- Add
PiecewiseLinearSpectrum,DenseleySampledSpectrumandBlackbodySpectrumclasses. - Add
spectrumToXYZandspectrumToRGBfunctions to convert any of these spectra to XYZ and RGB (needs to be expanded to support more color spaces in the future). - Add a library of useful named spectra that PBRT uses (illuminants, ior, sensor responses etc.).
- Add
SampledSpectrum<T>utility class for uniformly sampled spectral data. - Add CIE 1931 XYZ curves and D65 illuminant as
SampledSpectrum. - Add
wavelengthToD65()andwavelengthToRGB()utility functions. - Add a
SpectrumUI<T>class for drawing a spectrum UI. Uses ImGui basics +Gui::Widgets.
Render Passes
ModulateIlluminationpass now can composite various delta buffers.- Add work-in-progress SDF editor render pass.
PathTracer
- Add generation of delta guide buffers to
PathTracer. - Cleanup output buffer table.
- Update
PathTracerpass to specialize hit groups by material type. - Fix program specialization in
PathTracerto fix scene reload bug. - Add image test for scene reload case.
NRD
- Update the code to work with the latest version of the
NRDSDK. - Add delta motion vectors optimization pass.
- Update shader search path (we don't need to include
Externals/.packmandirectly anymore). - Expose
ReBLURandReLAX Diffuse-onlydenoisers andSpecularReflectionMvecpass fromNRDinNRDPass. - Add
Enabledtoggle to all passes exposed inNRDPass. - Add a toggle to switch between
ReLAXandReBLURin runtime.
RTXGI
- Add
RTXGIVolume, an interface to the RTXGI SDK. - Add
RTXGIPass, a standalone render pass using RTXGI.
PBRT Importer
- Add a scene importer for
.pbrtscene files (pbrt-v4). - Only supports a subset of the full pbrt-v4 scene definition, see
Source/Falcor/Scene/Importers/PBRTImporter/README.mdfor more details. - Materials are converted to the Falcor
StandardMaterialundergoing many approximations. - Texture support is very limited (only constant and bitmap textures for now).
- There is no support for curve geometry.
- There is very limited support for light sources, only diffuse area lights, distant lights and infinite (constant, envmap) is supported.
USD Importer
- Don't set camera speed if USD stage dimensions are bogus.
- Fix issue with USD importer computing the wrong number of expected normals.
5.0
Overview
This release of Falcor introduces a significant number of changes, including new features, improvements to existing functionality, and code reorganization. Some of the more notable changes include:
- The addition of a new USD scene importer.
- The material system has been rewritten to allow handling of different material types, and to accommodate future extensions.
- A new reference
PathTracerrender pass has been added, in favor of the now-deprecatedMegakernelPathTracer. - The
RTXDISDK for computing direct illumination on many lights has been integrated. It is available in a standloneRTXDIPassrender pass and as a sampler for direct illumination inPathTracer. - Render passes for
NRD(denoising) andDLSS(antialiasing/upscaling) have been added. - A new API backend
GFXbased on Slang is currently under development to allow future support for Vulkan, some additions for which are reflected in this release.
Dependencies
- Update dxc to version 1.6.2106
- Add support for D3D12 Agility SDK.
- Update Slang to 0.20.0.
- Add
libfmtformatting library (will be replaced with<format>when switching to C++20).
Build system
- Remove
DebugVKandReleaseVKbuild configurations. - Add
DebugGFXandReleaseGFXbuild configurations (GFX backend is not functional yet). - Add
msbuild.py, which builds Falcor usingmsbuild.exe, rather thandevenv.exe, asvsbuild.batdoes. - Pull compiler tools and windows SDK components from packman.
- Add agent-specific
build_falcor.pythat usesmsbuild.
Documentation
- Fix CUDA installation and usage instructions.
- Fix Optix installation instructions.
- Add development documentation:
- Coding conventions
- Error handling & logging
- Unit testing
- Add known issues.
- Add documentation for the material system in
Docs/Usage/Materials.md. - Fix outdated scene docs.
Error handling
- Add
Exceptionimplementingstd::exception. - Add
RuntimeError,ArgumentErrorandImportErrorexception classes. - Add exception constructors taking format strings for convenience.
- Add
checkInvariantandcheckArgumenthelpers. - Update code base to use Falcor exception classes throughout.
Core
- Add
float16_ttype for binary16 numbers on the host with python bindings. - Add
float16_t2,float16_t3, andfloat16_t4host side types. - Add convenience functions on
float16vector types. - Separate logging from error reporting:
log*functions only take a string and log it to the selected outputs.- Use
std::string_viewfor passing log strings. - Add overloads for logging with format strings.
- Convert existing logging calls to use format strings.
- Remove
Logger::logToConsole,Logger::shouldLogToConsole,Logger::showBoxOnError,isBoxShownOnError. - Add
Logger::getVerbosity. - Add
Logger::setOutputsandLogger::getOutputsto select the outputs to log to (Logger::OutputFlags). - Add global
reportError,reportErrorAndAllowRetryandreportFatalErrorfunctions to report errors to the user by logging and showing a message box. - Add global
setShowMessageBoxOnErrorandgetShowMessageBoxOnErrorto enable/disable showing message boxes.
- Fix bug in
GUI::addDropdownwhen using an empty list. - Fix bug with UI buffer allocation when there are no UI elements.
- Fix validation error in
ComputeParallelReduction.
API
- Remove Vulkan backend.
- Cleanup code around
FALCOR_VK. - Rename
FALCOR_VKtoFALCOR_FLIP_Yin places where NDC handedness matters (undefined for now). - Remove support for 5.x shading model.
- Add support for querying shader model support on
Device.- Use
Device::getSupportedShaderModelto get highest supported shader model. - Use
Device::isShaderModelSupportedto check if a shader model is supported.
- Use
- Enable debug layer check that was previously broken (do not hide debug message about overlapping descriptor ranges anymore).
- Add to
Programthe ability to specify which type implementations to an interface should be included in aProgramVersion. - Add
getCompilerArgumentsandsetCompilerArgumentstoProgram::Desc, allowing to set custom compiler arguments. - Better align API of
RtProgram::DescwithProgram::Desc(remove shader defines). - Fix clearing
uintrender outputs. - Add
RayFlagsenum and improve test to make sure flags match up with shader side. - Add
getRaytracingMaxAttributeSize(). - Add
Core/API/Raytracing.hwithRtPipelineFlagsenum andRtAABBstruct. - Move
RtProgramtoCore/Program/RtProgram. - Move
RtProgramVarstoCore/Program/ProgramVars. - Move
RtBindingTabletoCore/Program/RtBindingTable. - Move
RtStateObjecttoCore/API/RtStateObjectand moved D3D12 implementation toD3D12RtStateObject. - Move
ShaderTabletoCore/API/ShaderTableand moved D3D12 details toD3D12ShaderTable. - Remove support for local root signatures in shader binding table.
- Add
ParameterBlock::setAccelerationStructure(const BindLocation& loc, RtAccelerationStructure::SharedPtr). - Add
ShaderVars::setAccelerationStructure(RtAccelerationStructure::SharedPtr). - Make D3D12 implementation of
RtAccelerationStructurehold a ShaderResourceView that is created on-demand. - Rename
DescriptorSettoD3D12DescriptorSet. - Rename
DescriptorPooltoD3D12DescriptorPool. - Move
DescriptorPool::TypeintoShaderResourceType.cpp:ShaderResourceType. - Move contents of
DescriptorSet.cppintoD3D12DescriptorSet.cpp - Move contents of
DescriptorPool.cppintoD3D12DescriptorPool.cpp - Move
DescriptorSet.hintoCore/API/D3D12/D3D12DescriptorSet.h - Move
DescriptorPool.hintoCore/API/D3D12/D3D12DescriptorPool.h - Move
Core/BufferTypes/ParameterBlock.h->Core/API/ParameterBlock.h - Move
Core/BufferTypes/ParameterBlock.cpp->Core/API/D3D12/D3D12ParameterBlock.cpp - Move
Core/Program/ProgramVars.h->Core/API/ProgramVars.h - Move
Core/Program/ProgramVars.cpp->Core/API/D3D12/D3D12ProgramVars.cpp. - Move
RenderContext::applyGraphicsVarsandComputeContext::applyComputeVarsto D3D12 only. - Move
ProgramVars::applyto D3D12 only. - Make
ComputeContext::prepareForDispatchD3D12 only. Program::preprocessAndCreateProgramKernelsnow only generates shader binary code for D3D12 backend. For GFX, only the aIComponentTypeis needed to create agfx::IShaderProgram.- Move Blit render pass set up logic into shared
BlitContext.handBlitContext.cppfiles. - Move
blitimplementation from D3D12RenderContext.cpp to RenderContext.cpp so it may be shared between D3D12 and GFX. - Move some functions from
D3D12ParameterBlock.cppintoParameterBlock.cppso they can be shared between D3D12 and GFX. - Return shared pointer from
ResourceView::getResource(). - Wrap all uses of
DescriptorSetin application code toFALCOR_D3D12. - Wrap all protected member declaration in
ParameterBlocktoFALCOR_D3D12, because they are now D3D12 specific. - Move implementation of
ParameterBlock::createConstantBuffersfromD3D12ParameterBlock.cpptoParameterBlock.cpp. - Fix assignment of bools to shader variables.
- Add error check to buffer creation that size > 0.
- Add validation check to detect buffers bound as SRV and UAV simultaneously.
- Fix bug in UAV clear caused by not using both CPU and GPU descriptors.
- Add error check that descriptor heap is shader visible when querying GPU handles.
Blit
- Add support for blitting between float and integer formats.
- Add error checks to
RenderContext::blit()for unsupported combinations. - Remove unused
Blit.slangfile. - Optimize
RenderContext::blit()to do a resource copy when possible. - Update
RenderContext::blit()API to usekMaxRectto specify the full rectangle (instead of -1). - Fix shader compiler warnings when initializing the blit shader.
ImageIO
- Use
nvttfor saving DDS textures. - Add native support for DDS image loading, rather than relying on an external library.
ImageIO::loadDDSnow has original code instead of directly using the DDS loader provided by DirectXTex.- Old DirectXTex implementations have been removed.
- Compressed images can now be directly saved again.
Utilities
- Fix
removeLeadingWhitespace,removeTrailingWhitespaceandremoveLeadingTrailingWhitespace. - Extend
PrefixSumto support more than 2N^2 elements, where N is the group size. - Fix
PixelDebugwhen used for multiple shader dispatches within a single frame by not clearing the string hash table. - Add utilities for packing/unpacking unorm8 to
FormatConversion.slang. - Add
ImageProcessingutility class. - Add interval arithmetic functions in
Utils/Math/IntervalArithmetic.slang. - Remove non-portable
StringUtils::getClassTypeName()andStringUtils::getEnumTypeName().
Importer
- Use
ImporterErrorexception for reporting errors during scene import. - Add new
USDImporterscene importer.
Scene
- Cleanup handling of scene defines and type conformances.
- Add
Scene::UpdateFlags::SDFGridConfigChanged. - Use the new acceleration structure abstraction in
Scene.cppfor BLAS/TLAS creation. The existing raw D3D12 API calls have been replaced. - Change
Scene.cppto callsetAccelerationStructureinstead ofsetSrvto bind TLAS. - Remove
pSrvfromTlasData. - Reorganizing BLAS/TLAS for curves: splitting the single BLAS/TLAS for procedural primitives into two (one for curves and the other for custom primitives).
- Handling transformations of cached curves using the scene graph and nodes.
- Improve error checks in
SceneBuilder. - Provide analytic light sampling functions that take random numbers directly instead of a
ISampleGenerator. - Extend
EnvMapwith additional methods to access the underlying map and helpers for...
5.0-preview
Overview
This release of Falcor introduces a significant number of changes, including new features, improvements to existing functionality, and code reorganization. Some of the more notable changes include:
- The addition of a new USD scene importer.
- The material system has been rewritten to allow handling of different material types, and to accommodate future extensions.
- A new reference
PathTracerrender pass has been added, in favor of the now-deprecatedMegakernelPathTracer. - A new API backend
GFXbased on Slang is currently under development to allow future support for Vulkan, some additions for which are reflected in this release.
Dependencies
- Update dxc to version 1.6.2106
- Add support for D3D12 Agility SDK.
- Update Slang to 0.19.24.
- Add
libfmtformatting library (will be replaced with<format>when switching to C++20).
Build system
- Remove
DebugVKandReleaseVKbuild configurations. - Add
DebugGFXandReleaseGFXbuild configurations (GFX backend is not functional yet). - Add
msbuild.py, which builds Falcor usingmsbuild.exe, rather thandevenv.exe, asvsbuild.batdoes. - Pull compiler tools and windows SDK components from packman.
- Add agent-specific
build_falcor.pythat usesmsbuild.
Documentation
- Fix CUDA installation and usage instructions.
- Fix Optix installation instructions.
- Add development documentation:
- Coding conventions
- Error handling & logging
- Unit testing
- Add known issues.
Error handling
- Add
Exceptionimplementingstd::exception. - Add
RuntimeError,ArgumentErrorandImportErrorexception classes. - Add exception constructors taking format strings for convenience.
- Add
checkInvariantandcheckArgumenthelpers. - Update code base to use Falcor exception classes throughout.
Core
- Add
float16_ttype for binary16 numbers on the host with python bindings. - Add
float16_t2,float16_t3, andfloat16_t4host side types. - Add convenience functions on
float16vector types. - Separate logging from error reporting:
log*functions only take a string and log it to the selected outputs.- Remove
Logger::logToConsole,Logger::shouldLogToConsole,Logger::showBoxOnError,isBoxShownOnError. - Add
Logger::getVerbosity. - Add
Logger::setOutputsandLogger::getOutputsto select the outputs to log to (Logger::OutputFlags). - Add global
reportError,reportErrorAndAllowRetryandreportFatalErrorfunctions to report errors to the user by logging and showing a message box. - Add global
setShowMessageBoxOnErrorandgetShowMessageBoxOnErrorto enable/disable showing message boxes.
- Fix bug in
GUI::addDropdownwhen using an empty list.
API
- Remove Vulkan backend.
- Cleanup code around
FALCOR_VK. - Rename
FALCOR_VKtoFALCOR_FLIP_Yin places where NDC handedness matters (undefined for now). - Remove support for 5.x shading model.
- Add support for querying shader model support on
Device.- Use
Device::getSupportedShaderModelto get highest supported shader model. - Use
Device::isShaderModelSupportedto check if a shader model is supported.
- Use
- Enable debug layer check that was previously broken (do not hide debug message about overlapping descriptor ranges anymore).
- Add to
Programthe ability to specify which type implementations to an interface should be included in aProgramVersion. - Add
getCompilerArgumentsandsetCompilerArgumentstoProgram::Desc, allowing to set custom compiler arguments. - Better align API of
RtProgram::DescwithProgram::Desc(remove shader defines). - Fix clearing
uintrender outputs. - Add
RayFlagsenum and improve test to make sure flags match up with shader side. - Add
getRaytracingMaxAttributeSize(). - Add
Core/API/Raytracing.hwithRtPipelineFlagsenum andRtAABBstruct. - Move
RtProgramtoCore/Program/RtProgram. - Move
RtProgramVarstoCore/Program/ProgramVars. - Move
RtBindingTabletoCore/Program/RtBindingTable. - Move
RtStateObjecttoCore/API/RtStateObjectand moved D3D12 implementation toD3D12RtStateObject. - Move
ShaderTabletoCore/API/ShaderTableand moved D3D12 details toD3D12ShaderTable. - Remove support for local root signatures in shader binding table.
- Add
ParameterBlock::setAccelerationStructure(const BindLocation& loc, RtAccelerationStructure::SharedPtr). - Add
ShaderVars::setAccelerationStructure(RtAccelerationStructure::SharedPtr). - Make D3D12 implementation of
RtAccelerationStructurehold a ShaderResourceView that is created on-demand. - Rename
DescriptorSettoD3D12DescriptorSet. - Rename
DescriptorPooltoD3D12DescriptorPool. - Move
DescriptorPool::TypeintoShaderResourceType.cpp:ShaderResourceType. - Move contents of
DescriptorSet.cppintoD3D12DescriptorSet.cpp - Move contents of
DescriptorPool.cppintoD3D12DescriptorPool.cpp - Move
DescriptorSet.hintoCore/API/D3D12/D3D12DescriptorSet.h - Move
DescriptorPool.hintoCore/API/D3D12/D3D12DescriptorPool.h - Move
Core/BufferTypes/ParameterBlock.h->Core/API/ParameterBlock.h - Move
Core/BufferTypes/ParameterBlock.cpp->Core/API/D3D12/D3D12ParameterBlock.cpp - Move
Core/Program/ProgramVars.h->Core/API/ProgramVars.h - Move
Core/Program/ProgramVars.cpp->Core/API/D3D12/D3D12ProgramVars.cpp. - Move
RenderContext::applyGraphicsVarsandComputeContext::applyComputeVarsto D3D12 only. - Move
ProgramVars::applyto D3D12 only. - Make
ComputeContext::prepareForDispatchD3D12 only. Program::preprocessAndCreateProgramKernelsnow only generates shader binary code for D3D12 backend. For GFX, only the aIComponentTypeis needed to create agfx::IShaderProgram.- Move Blit render pass set up logic into shared
BlitContext.handBlitContext.cppfiles. - Move
blitimplementation from D3D12RenderContext.cpp to RenderContext.cpp so it may be shared between D3D12 and GFX. - Move some functions from
D3D12ParameterBlock.cppintoParameterBlock.cppso they can be shared between D3D12 and GFX. - Return shared pointer from
ResourceView::getResource(). - Wrap all uses of
DescriptorSetin application code toFALCOR_D3D12. - Wrap all protected member declaration in
ParameterBlocktoFALCOR_D3D12, because they are now D3D12 specific.
Blit
- Add support for blitting between float and integer formats.
- Add error checks to
RenderContext::blit()for unsupported combinations. - Remove unused
Blit.slangfile. - Optimize
RenderContext::blit()to do a resource copy when possible. - Update
RenderContext::blit()API to usekMaxRectto specify the full rectangle (instead of -1). - Fix shader compiler warnings when initializing the blit shader.
ImageIO
- Use
nvttfor saving DDS textures. - Add native support for DDS image loading, rather than relying on an external library.
ImageIO::loadDDSnow has original code instead of directly using the DDS loader provided by DirectXTex.- Old DirectXTex implementations have been removed.
- Compressed images can now be directly saved again.
Utilities
- Fix
removeLeadingWhitespace,removeTrailingWhitespaceandremoveLeadingTrailingWhitespace. - Extend
PrefixSumto support more than 2N^2 elements, where N is the group size. - Fix
PixelDebugwhen used for multiple shader dispatches within a single frame by not clearing the string hash table. - Add utilities for packing/unpacking unorm8 to
FormatConversion.slang. - Add
ImageProcessingutility class. - Add interval arithmetic functions in
Utils/Math/IntervalArithmetic.slang. - Remove non-portable
StringUtils::getClassTypeName()andStringUtils::getEnumTypeName().
Importer
- Use
ImporterErrorexception for reporting errors during scene import. - Add new
USDImporterscene importer.
Scene
- Cleanup handling of scene defines and type conformances.
- Add
Scene::UpdateFlags::SDFGridConfigChanged. - Use the new acceleration structure abstraction in
Scene.cppfor BLAS/TLAS creation. The existing raw D3D12 API calls have been replaced. - Change
Scene.cppto callsetAccelerationStructureinstead ofsetSrvto bind TLAS. - Remove
pSrvfromTlasData. - Reorganizing BLAS/TLAS for curves: splitting the single BLAS/TLAS for procedural primitives into two (one for curves and the other for custom primitives).
- Handling transformations of cached curves using the scene graph and nodes.
Animation
- Fix
hasCurveAnimations(): Return true if the cached curves have more than one keyframe. - Modify
Animation::addKeyframe()to avoid O(N^2) behavior when keyframes are added in temporal order.
Geometry
- Set
instanceIndexandgeometryIndexwhen creating instance data. - Introduce
GeometryInstanceDatawhich unifiesMeshInstanceData,CurveInstanceDataandSDFGridInstanceData. - Use single list of geometry instance data for
Scenecontaining instances for all geometry types. - Remove
PrimitiveTypeFlags. - Replace
ScenePrimitiveTypes.slanghwithSceneDefines.slangh. - Introduce
GeometryTypewhich enumerates all available geometry types andGeometryTypeFlagswhich is a bitset thereof. - Both
GeometryTypeandGeometryTypeFlagsuse defines inSceneDefines.slanghto ensure consistency. - Introduce
Scene::hasGeometryTypesandScene::hasGeometryTypeto check if scene contains specific geometry types. - Introduce
Scene::hasProceduralGeometryto check if scene contains procedural geometry types. - Introduce
SCENE_HAS_GEOMETRY_TYPEmacro for shaders to check if scene contains a specific geometry type. - Introduce
SCENE_HAS_PROCEDURAL_GEOMETRYmacro for shaders to check if scene contains procedural geometry types.
HitInfo
PackedHitInfouses either 128 bits or 64 bits (compressed mode)...
4.4
Dependencies
- Update Slang to 0.19.2.
- Add header-only
lz4_streamlibrary from https://github.com/laudrup/lz4_stream. - Pull
dxcompilerfrom packman instead of Windows SDK. Set to Oct 2020 binary release.
Core
- Add check for null
DllHandlereturned byloadDLL()inRenderPassLibrary::loadLibrary(). - Add parameter to
GpuFence::create()to allow for sharing fence handles. - Fix
d3d12ResourceBarrierimplementation. - Log debug info during device creation.
- Set
mCommandsPendingflag in the context inReadTextureTask. Fixes bug where subsequent texture reads would return nothing after the first call. - Add
dlldecltoReadTextureTask. - Add on a more complex version of
RenderContext::blit()which allows to specify reduction operations (min/max/standard).- Complex blit is only used when necessary, standard blit is used otherwise.
- This uses a new
Samplerreduction parameter which maps to D3D filter reduction.
- Fix issue preventing multiple Falcor instances from loading the same render pass DLL.
Raytracing
- Fix reflection logic for RT entry points to be compatible with future Slang versions
- Refactor
RtProgramto allow more flexible creation of raytracing programs. - Add new
RtBindingTableclass to allow user to specify the mapping between raytracing shaders and scene geometries. - Refactor how
RtProgramVarsis created, it now takes aRtBindingTableparameter instead ofScene. - Add
TestRtProgrampass and image tests for testing the new raytracing interfaces. - Add support for DXR 1.1 raytracing pipeline flags.
- Fail gracefully if raytracing is not supported on the current device.
Profiler
- Improved UI (better overview, relative CPU/GPU time bars, tooltips with stats, graph showing history, pause/resume, capture).
- Profile capturing and saving to JSON files (including stats).
- Add documentation for Python profiler API.
Scripting
- Make deferred script bindings be executed in order.
- Initialize script bindings consistently before
runInternalin bothSample::runversions. - Add Python pickle support for vec types.
- Extend Python API for
RenderPass. - Add pickle support to python struct bindings created with the
SerializableStructhelper. - Setup
__file__in Python environment executed by Falcor.
Texture
- Add a new min/max MIP pyramid creation to textures.
- Move
Texture::createFromFile()implementation toTexture.cppand removeTextureLoader.cpp. - Add
HDRimage format to HDR image filters. - Flip
PFMimages when loaded (they are loaded flipped due to a bug). - Fix grayscale image loading from
PNG. 16 bit greyscale PNG files were incorrectly loaded asResourceFormat::RG8Unorm. This fix disambiguates two channel 8 bit textures from one channel 16 bit ones, and assigns formatResourceFormat::R16Unormwhen needed. - Add ability to generate mips when saving DDS textures to disk.
- Add support for volume textures in
ImageIO::saveToDDSand fix associated bug that was uncovered inD3D12CopyContextas a result of the new feature.
Scene
- Add
Sceneinterfaces for enumerating all geometries (meshes, curves, and custom primitives). - Refactor/cleanup how intersection types and AABBs were handled in
Scene. - Export interface for creating custom primitives from Python.
- Updated scripting documentation.
- Add conditions for refitting TLASes when it is needed.
- Make
HitInfoa container for storing polymorphic hit information (TriangleHit,DisplacedTriangleHitandCurveHit). - Update
HitInfoto have aNonetype to be able to represent no hit more cleanly. - Add
GeometryInstanceIDtype to enumerate instances on the GPU side instead of plainuint. - Replace
meshInstanceIDwithGeometryInstanceIDin allSceneaccessors on the GPU. - Fix some robustness issues where only triangle hits were assumed.
- Add
updateCallbacktoSceneto procedurally update scene at the start of each frame. - Add an
Scene::Metadatastruct that holds optional metadata, set by an importer, regarding how the scene should be rendered.- Parameters can be queried by passes in their
setScene()method, as demonstrated in theToneMapperpass.
- Parameters can be queried by passes in their
- Move global
gRtScenetoScene.rtAccel. - Add support for dynamically adding/removing custom primitives.
- Add
Sceneupdate flag to indicate that geometry changed (added/removed). - Improve support for custom primitives: metadata buffer and indexing.
- Add
Sceneinterface for updating custom primitive AABBs.- Trigger acceleration structure refit/rebuild upon procedural primitive updates.
- Some refactoring of
Sceneto prepare for unification of geometry types. - Update ray query interface to ignore unsupported geometry types.
- Add testing code for scene geometry editing.
- Add a mesh-binding transform parameter in the scene graph for use by skinned meshes.
- Cleaned up some leftover usage of
glm::mat4 - Fix a couple places where cameras and other
Animatableobjects aren't using -Z for their forward direction. - Add
ISceneRayQuery, an abstract interface to intersect rays against the scene. - Add
SceneRayQueryimplementation inRaytracingInlineto intersect rays against the scene usingTraceRayInline. - Make use of
SceneRayQueryinSceneDebugger,VBufferRTandGBufferRTpasses. - Add
TextureAnalyzerutility for analyzing texture content. - Extend
TextureAnalyzerutil to compute min/max and range flags. - Replace custom
HitShaderParamsuniform with using DXR Tier 1.1GeometryIndex(). - Add scene stats for opaque vs non-opaque geometries for ray tracing.
- Update
Scene::rasterizeinterface to take cull mode parameter or separate raster states, to fix backface culling.- Update
GBufferRaster,ModelViewer,SkyBoxto use newScene::rasterizeinterface.
- Update
- Add
SceneBuilderpass to make triangle winding consistent in object space, which is a requirement for backface culling. - Update
SceneTLAS build to set per-instance triangle winding flag correctly. - Add image test to verify backface culling with CW/CCW winding and/or with instance transforms that flip winding.
- Fix asynchronous scene cache texture loading.
- Add
SceneCacheto serialize/deserializeScene:SceneData. - Add scene caching support to
SceneBuilder. - Introduce
SceneDatato pass data when creating aSceneobject. - Check mesh instance triangle winding flag when preparing draw argument buffers in
Scene. - Issue warning for non-affine node transforms and force last row to (0,0,0,1).
- Discard w-component of world-space position in raster code to match ray tracing behavior.
- Fix
Scenelogic to disable use of analytic lights in path tracer when all lights are inactive. - Add
SceneBuilderoptimization to collapse directed subgraphs of static transform nodes. - Add
SceneBuilderoptimization to merge identical static transform nodes. - Extend
SceneDebuggerto show mesh instance information, including the transform hierarchy for the selected mesh. - Add scene defines after loading. They can help the shader code to dynamically decide on ray query flags, creation of intersection shader programs, etc.
- Add
SceneBuilderflag,FlattenStaticMeshInstances, that will create a unique mesh for each static instance by composing its transforms and duplicating mesh data. This will increase memory use, sometimes significantly.- Has no effect on non-instanced meshes, dynamic meshes, animated instances, or non-mesh primitives.
- Subsequent
SceneBuilderoptimization passes, such aspretransformStaticMeshes(), can further optimize the flattened scene graph.
- Add optimization to
SceneBuilderto extract instances for groups of meshes. - Meshes for instanced mesh groups are by default merged into a BLAS. Use
RTDontMergeInstancedto disable. - Clean up TLAS instance description setup in
Scene. - Add
SceneBuilder::getLight. - Add scene stats for opaque vs non-opaque materials, make all stats serialized to Python.
- Add material optimization pass to
SceneBuilderto replace constant textures by uniform material parameters. - Add
waitForMaterialTextureLoadingtoSceneBuilder. - When a vertex attribute (e.g., texture coordinates) is missing, use a default value.
- Allow disabling displacement maps with new
DontUseDisplacementscene builder flag. - Add option to
SceneBuilder::processMesh()to return the indices per attribute used to generate the final mesh. - Add inverse transpose matrices of previous frame in
Scene. - Fix indexing into shader binding table by sorting meshes within mesh groups.
Scene Importers
- Remove deprecated
fscenesupport. - Allow retrying when python scene loader fails.
- Log error if
.pysceneis recursively imported. - Fix loading nested
pyscenefiles (not removing data path if still used by parent importer). - Fix GLTF2 animation loading.
- Fix GLTF2 point light loading.
Animation
- Add
AnimatedVertexCache, which is in charge of updating animated curve vertices and related AABBs. - Allow skinned meshes to use the transform from somewhere else in the scene graph for skinning.
- Separate bind matrix and world matrix indices in
DynamicVertexData. - Fix toggle scene animations (missed TLAS update).
- Improve
AnimationControllerbehavior when enabling/disabling it. - Update previous frame data for one more frame when pausing animations to get correct motion vectors.
- Improve performance of
AnimationControllerby only updating/uploading animated matrices. - Fix issue with animated lights not updating.
Geometry
- Extend
TriangleMeshutility class to handle negative scaling and clockwise triangle winding. - Flip UVs in
TriangleMesh::createFromFile. - Add
CurveIntersectorhelper to unify curve intersection code between dispatch ray and ra...