Releases: NVIDIAGameWorks/Falcor
Releases · NVIDIAGameWorks/Falcor
4.3
- Toolchain
- Upgrade projects to Win 10 version 2004 using SDK version 19041.
- Dependencies
- Update packman to version 6.15.
- Update slang to version 0.17.5.
- Use same letter casing for package name and directory in
Externals/.packman
. - Get OSS dependencies from
falcor_dependencies
package placed inExternals/.packman/deps
. - Add OpenVDB and NanoVDB.
- Core
- Remove deprecated APIs.
- Add support for shader model 6.4 and 6.5.
- Add utility code for
TraceRayInline
. - Add encoding/decoding of 8-bit snorm values.
- Add encoding/decoding of normals in 2x8 octahedral format.
- Convert palettized images to RGBA when loaded by
Bitmap
. - Fix issue with the search paths when an empty directory exists in the list.
- Add caps check for new D3D features.
- Move
Bitmap
init logic fromcreate
function to constructor - Add separate constructor to
Bitmap
that allocates memory but doesn't copy initial data. - Set memory stats when creating
Bitmap
from file. - Show hint to enable breaking on exceptions when an exception is caught.
- Add support for creating views for Texture3D/2DMS resources.
- Cleanup handling of null views to fix D3D12 validation error (null views now use the correct view dimension).
- Move creation of TLAS SRV from into
ShaderResourceView
. - Update
ParameterBlock
logic to not create views when binding resource to root descriptor. - Add warning when creating buffer larger than 4GB as this is currently not well supported.
- Fix size computation in buffer creation to handle >4GB.
- Add runtime size check for large SRV/UAV view creation.
- Move script writing functions from
Scripting
to separateScriptWriter
class. - Refactor
BBox
andBoundingBox
classes intoAABB
class that matches the GPU-side slang module. - Make
Profiler
a singleton. Program::Desc
internals no longer require entry points to be defined contiguously.- Decouple declaration and shader library addition for hit groups in
RtStateObject
. This allows any particular entry point to be referenced in multiple hit groups while only being defined once.
- DirectXTex
- Fix row size calculation in
CopyContext::ReadTextureTask
to handle compressed formats. - Integrate DirectXTex for DDS import/export.
- Remove legacy custom DDS loader.
- Calculate and store row pitch and total size in
Bitmap
.
- Fix row size calculation in
- Logging
- Add a new
Logger::Level::Debug
log level. - Use shorter log labels without tabs.
- Do not capture
stdout
when running Python scripts by default, makingprint()
from Python scripts forward to the terminal window.
- Add a new
- CUDA
- Fix the CudaInterop sample to build on VS 2019 and pull from
Source/Externals/.packman/cuda
- Update CUDA setup instructions in the README.
- Add initial support for cross-compiling Slang compute shaders for CUDA execution.
- Fix the CudaInterop sample to build on VS 2019 and pull from
- Shaders
- Fix Slang preprocessor warning when the emissive sampler is not used.
- Import
SampleGeneratorInterface
instead ofSampleGenerator
if possible.
- Scene
- Cleanup to use enum directly in
HitInfo
struct. - Add instance type field to
HitInfo
struct to enumerate what class of geometry was hit. - Display materials in the UI in case-insensitive alphabetic order, rather than in material ID order.
- Perform tangent space computation prior to pretransforming texture coordinates, as tangent space should be independent of texture transforms.
- Renamed
Scene::render
toScene::rasterize
. - Add
Scene::getSceneBoundsRadius()
andScene::getSceneBoundsCenter()
and respective Python bindings - Bind scene acceleration structure as root descriptor (workaround for validation layer not correctly recognizing its view dimension).
- Reduce scene GPU memory usage for the previous frame vertex positions.
- Use 16-bit vertex indices for meshes with max 2^16 vertices.
- Support mixed 16/32-bit format in the scene's global index buffer.
- Support 32-bit draw IDs for rasterizing scenes with more than 2^16 mesh instances.
- Remove deprecated
BuffersAsShaderResource
scene builder flag. - Add scene stats for texture compression and index/vertex/geometry memory usage.
- Add detailed GPU memory usage stats for the scene representation.
- Fix validation errors in BLAS construction.
- Increase the maximum number of supported transforms and meshes to 2^21 each, reduce the number of supported materials to 2^21 as well.
- Change RT build heuristics to place all static non-instanced meshes in a single BLAS.
- Add scene builder flags to configure merging of meshes into BLASes.
- Add Scene stats to show texture memory usage.
- Make V-buffer format dynamically configured based on Scene requirements.
- Add 96-bit V-buffer encoding to support large scenes that need 64-bit instance+primitive index.
- Make
Scene::setCamera()
search by pointer (also fixes Python API). - Emit
UpdateFlags::CameraSwitched
when switching between cameras. - Add curves.
- Cleanup to use enum directly in
- SceneBuilder
- Fix scene builder flag that controls material merging, use
DontMergeMaterials
. - Add optimization pass that removes unused meshes.
- Improve error messages when adding instances.
- Fix documentation error for
addMeshInstance
. - Allow configuring render settings.
- Split meshes in scene builder when computing optimized mesh groups (BLASes) for ray tracing.
- Cleanup tangent space computation and make sure
prepareShadingData
always generates a plausible TBN frame. - Add check that normal and tangent are non-parallel, to avoid degenerate tangent spaces for bad assets.
- Add top-down median BVH builder for partitioning the mesh groups.
- Pre-transform static non-instanced meshes to world space at load time.
- Add mesh winding flag.
- Move calculation of mesh groups and sorted mesh instance list to the scene builder.
- Split large mesh groups into chunks to reduce BLAS build memory usage.
- Perform BLAS build in multiple iterations to reduce memory usage.
- Add async/multi-threaded texture loading.
- Move texture coordinate quantization and material de-duplication to a post-processing step. This is to avoid accessing material textures during the majority of scene building, which we want to avoid for parallel texture loading to work.
- Add parallel mesh creation.
- Fix so that tangents are correctly set to zero if missing.
- Fix scene builder flag that controls material merging, use
- Scene loading
- Add more visible deprecation warning for fscene support.
- Cleaning scripts from using
.fscene
files. - Use parent directory of
.pyscene
file as highest priority data directory during import. - Use parent directory of
.py
file as highest priority data directory during script loading. - Add new Python scene file format with many new features such as programmatically adding materials, cameras, lights, geometry and animations.
- Loading Python scene files using the old
# scenefile.xxx
header for referencing a scene file results in an error. - Add
TriangleMesh
class to create and load simple triangle geometry (plus factory functions for quad, cube and sphere). - Add
Transform
class to setup transformations. - Add Python bindings for
TriangleMesh
,Transform
,Animation
as well asSceneBuilder
.
- Animation
- Fix pre/post infinity linear mode with hermite interpolation.
- General code cleanup and documentation updates.
- Add support for looping animation channels individually based on some of the options available in Maya (constant, linear, cycle, and oscillate).
- Add UI and scripting to control whether or not animations should also loop globally as well as how each animation channel behaves outside of defined keyframes.
- Remove the
Animation::Channel
struct. This construct is not really necessary and complicates things for no good reason.
- Material
- Add a
Transform
toFalcor::Material
, which can be used to apply scale/rotation/translation to all of the material's textures. - Texture transformation is implemented as a pretransformation of the texture coordinates of each mesh the material is bound to, using the inverse of its texture transform.
- Minor fix to material comparison.
- Add support for displacement mapping.
- Extend
Material
to handle hair BCSDF parameters. - Add
HairChiang16
using BxDF interface (eval, evalPdf and importance sampling implemented).
- Add a
- Environment map
- Allow loading/clearing env map from UI.
- Change the order in which the rotations passed to
EnvMap::setRotation()
are applied from (Z * Y * X) to (X * Y * Z). - Add
getDimensions
method toEnvMap
.
- Light probes
- Remove
LightProbe
class and addaddedEnvMapLighting
which is used instead to do image-based lighting. - Remove light probes from the
Scene
andSceneBuilder
classes (as well as thefscene
importer). - Add
EnvMapLighting
toForwardLighting
pass to get back image-based lighting from the environment map. - Extend the
SkyBox
pass to directly support the environment map.
- Remove
- Camera & lights
- Introduce explicit
RectLight
,DiscLight
andSphereLight
classes. - Make
Camera
andLight
take optionalname
parameter in the staticcreate
functions. - Expose
Camera
,Light
andMaterial
constructors to Python API. - Replace
color
/intensity
properties onLight
with justintensity
in Python API. - Fix light direction UI widget to not modify the value unless it was changed in the UI.
- Fix bug in
DistantLight
update flags on first frame.
- Introduce explicit
- EmissiveLightSampler
- Replace
EmissiveLightSampler::prepareProgram
withEmissiveLightSampler::getDefines
. - Add
onSurface
flag toIEmissiveLightSampler
to indicate if sample is used for surface or volume. - Implement
onSurface
flag inLightBVHSampler
.
- Replace
- PathTracer
- Update nested dielectric code to interpret material nested...
4.2
- Core improvements
- Default to NVIDIA GPU during device creation.
- Updated GLFW to 3.3.2. Fixes headless window initialization error on Windows 10 2004.
- Fix async PNG file saving.
- Fix incorrect assert in
HitInfo
. - Removed
inherit_shared_from_this
workaround. - Added
Threading::finish()
which waits for all executing threads to complete. - Fixed a crash when no scene is loaded.
- Remove
ConstSharedPtrRef
typedefs and useconst SharedPtr&
instead. - Call
flushAndSync()
upon successfulMaterial::loadTexture()
to maintain reasonable upload heap size. RtProgramVars
andShaderTable
code cleanup.- Cleaned up
Gui
API and usage. - Replaced
MAX
macros withstd::numeric_limits
. - Use functions.
- Logging
- Log scene load timee.
- Log to std::out/err by default.
- Adds
Logger::setTerminateOnError(bool enable)
to allow control over whether Logger terminates the program after a message of level Level::Error is emitted. This allows programs to emit messages for recoverable errors. - Set default logger verbosity to
Info
.
- Slang
- Update Slang to 0.16.3.
- Make use of scoped static const feature in Slang.
- Added reflection support for
int8
,uint8
,int16
,uint16
,float16
andfloat64
. - Added shader tests for
float16
andfloat64
buffers.
- Scene load
- Add
SceneBuilder
support for loading vertex attributes at different frequencies (constant, uniform, vertex, face-varying). - Merge identical vertices based on topology of existing index buffer.
- Improve validation and error reporting in scene builder.
- Update Assimp mesh load flags to avoid splitting large meshes (>1M faces) at load time.
- Update Assimp mesh loader to cull unsupported vertex attribute at load time.
- Improve scene load error handling.
- Add
- Scene representation
- Add scene support for non-indexed vertices.
- Fix mesh instance updates.
- Compact mesh instance data.
- Moved helper functions in
ShadingData.slang
toShading.slang
. - Optimize BLAS construction.
- Add resource names to the Scene buffers.
- Fix handling scenes with no analytical light sources.
- Clean up scene statistics and remove
renderUI
onLightCollection
.
- Fix tangent spaces and normal mapping
- Fix Mikktspace tangents to use face-varying rate.
- Fix tangent space orientation to match MikkTSpace.
- Switch to represent tangent space using float4 tangent+sign.
- Update asset importer and scene builder to compute correct tangent spaces.
- Update render passes that produce/consume bitangents to pass around tangents instead.
- Animation
- Add support for hermite spline interpolation for animations.
AnimationController:animate()
now returnsfalse
if there are no animations in the scene.- Replace
AnimatedObject
withAnimatable
base class for objects that have an animated transform (Camera
andLight
inScene
). - Check for camera animation data before enabling animations.
- Cameras
- Added support for multiple cameras per scene.
- Added support for specifying camera frame width.
- Fix undefined initialization for
CameraData::aspectRatio
.
- Materials
- Introduce a
Material::TextureSlot
enum to allow setting textures by slots. - Move some of the code in
AssimpImporter
for setting textures intoMaterial
. - Improve UI for materials (show textures, allow setting roughness/metallic on separate sliders, etc.)
- Introduce
Material::loadTexture
function to allow loading textures from files via Python. - Support sample/evaluate specific BSDF lobes.
- Added
lobes
parameter toShadingData
to select what BSDF lobes to sample/evaluate. - Added support for delta reflection/transmission in the new BSDF implementation (enabled if GGX alpha is below threshold).
- Removed clamping of
ShadingData::linearRoughness
. - Added
getBSDFLobes()
to query the available BSDF lobes given someShadingData
. - Fixed sampling weights for rough dielectric BSDF (now matches results when VNDF is used).
- Avoid returning BSDF samples with pdf == 0.
- Enable VNDF sampling for GGX lobe.
- Introduce a
- Lights
- Optimized data layout for emissive triangles in
LightCollection
. - Pack
EmissiveTriangle
into 64 bytes. - Optimize BVH node layout and access.
- Change default
LightBVH
bounding cone method toSphere
for better performance. - Improve uniform light sampler.
- Added support for DistantLight (directional light that subtends a finite solid angle).
- Removed API and usage of setting position and distance for
DirectionalLight
s. - Added new function
getShadowRay
toLights.slang
that generates aRayDesc
for a shadow ray given an origin and the light being traced to. - Add light active flag to activate/deactivate individual analytical lights.
- Introduce
renderSettings
onScene
to select what types of light sources to use for lighting.
- Optimized data layout for emissive triangles in
- Refactored environment map
- Introduce
EnvMap
which simply holds the environment map and provides aneval
function to query the environment map. - Added
intensity
property toEnvMap
for scaling the radiance. - Added
rotation
property toEnvMap
for rotating the environment map. - Added
renderUI
method for editing environment map as part of the scene. - Added scripting API for editing environment map properties.
- Make
EnvMap
part of the globalScene
object, similar to what we have withLightCollection
. - Added
Scene::UpdateFlags
for detecting changes in the environment map properties (intensity, transform). - Introduce
EnvMapSampler
which is responsible for sampling an environment map. Path tracers replaceEnvProbe
withEnvMapSampler
. - Added support for EnvMap tinting.
- Introduce
- TexLOD3
- Added anisotropic texture filtering to ray cones for primary ray traced visibility.
- Added indirect curvature to ray cones (two methods: Combo and Unified).
- Added environment filtering for ray cones and ray differentials both for primary and secondary hits.
- Added GUI support in
WhittedRayTracer
for choosing ray cone method. - Added so ray cones can function without G-buffer (spread angle, which was required by the RTG version).
- Added support for widening the ray cone based on the roughness of the BRDF.
- Differential barycentric bug fix.
- Path Tracer
- Add
maxNonSpecularBounces
anddisableCaustics
options to path tracer. - Added
rayCount
andpathLength
outputs for debugging. - Automatically enable pixel stats if
rayCount
orpathLength
are connected. - Support for pure reflection/transmission events, BSDF and MIS improvements/fixes.
- Sample lights only if BSDF has non-delta reflection lobes.
- Correctly handle transmission and delta events when MIS is enabled.
- Fix MIS weight in
MegakernelPathTracer
when multiple light samples are used. - Added option to enable alpha testing to path tracers.
- Use closest hit for handling false intersections with nested dielectrics.
- Add support for textured specular transmission.
- Add ray footprint support.
- Fix bug where
MinimalPathTracer
would not account for emissive lights. - Implement usage of new Scene
renderSettings
flags inMinimalPathTracer
,WhittedRayTracer
andMegakernelPathTracer
. - Move emissive sampler options to sampling group.
- Track per-ray type ray count stats in the path tracer.
- Add
- GBuffer
- Fixes
prepareShadingData
when reading GBuffer data by not flipping normals again. - Fixes
forceCullMode
inGBufferRaster
pass by forwarding the rasterizer state to the depth pre-pass.
- Fixes
- Utilities
- Add LogLuv HDR encoding for storing HDR RGB data into 32 bits.
- Added additional color maps to
Utils.Color.ColorMap
(Viridis, Plasma, Magma, Inferno). - Added
ColorMapPass
toDebugPasses
library for applying a color map to an input. - Add option to
ErrorMeasurePass
to average the error over RGB when creating a difference image. - Added mechanism to reset
AccumulatePass
from script. - Update SampleGenerator API to use
getDefines()
. - Uses nested padded struct in
SampleGenerator
. - Add fNumber, shutter speed, and exposure mode to
ToneMapper
. - Added
MinMax
reduction type toComputeParallelReduction
. - Added an auto-range feature to
ColorMapPass
. - Added
Add
andMultiply
modes toComposite
pass.
- Add support for per pixel time measurements
- Added
GpuTimer
class for measuring time in shaders. - Added
GpuTimer
slang module. - Added
time
output buffer (32bit) for time visualization inGBufferRT
,VBufferRT
andMegakernelPathTracer
.
- Added
- Mogwai improvements
- When saving a config from Mogwai, store it in the list of recent scripts.
- When loading a script from Mogwai, store it in the list of recent scripts.
- Do not add script to recent files if in silent mode.
- Improvements to capturing/saving render graph outputs.
- Added more texture material metadata to UI.
- Use
.pyscene
extension for python scenes to clearly separate them from render scripts. - Support dragging python scene files (
.pyscene
) into Mogwai.
- Improved Mogwai console
- Move console to the top of the window.
- Make console black and some more styling.
- Allow console to be toggled with the tick key (previously you could only open it that way).
- Allow open console to be closed with
Escape
key. - Use
Up
/Down
key to browse through the history. - Stick focus to the console as long as it's open.
- Make
Console
a singleton. - Using `InteractiveInterpret...
Falcor 4 Revision 1
glm
has been removed from the global namespace.- Added typedefs to glm vector types following HLSL convention (such as float4, uint3, etc.)
- Updated scripting API; some replaced items have been marked deprecated, but other breaking changes exist. See documentation.
- Moved
HitInfo
classes intoScene
folder - Improved py scene file support and added documentation on scene file formats
- Environment maps are now loaded properly in the Path Tracer
- Mogwai saves and displays recently loaded scripts and scenes
- Updated texture LOD support for ray tracing and new WhittedRayTracer render pass with example usage
- Support declaring root descriptors through
[root]
Slang attribute - Optimizations to internal scene data structures
Falcor 4.0.1
4/17 Hotfix
- No code changes from 4.0 release
- Reverted a dependency license header that was accidentally overwritten
Falcor 4.0 Preview
Development snapshot of Falcor 4.0 containing major features, fixes, and performance improvements. Mostly feature-complete, but not all interfaces are final.
Notable changes include:
- Finalized render graph interfaces and workflow.
- Library of various render passes.
- Full rewrite of Scene components with greatly improved raster and raytracing performance.
- Falcor scene files (.fscene) are deprecated. Cameras, lights, and animations can now be loaded from model files.
Falcor 3.2.1
Ctrl+Pause
freezes/unfreezes the renderer. This if useful in low framerates situations when the user wants to change an attribute using the GUI- File open dialog filters for images now include .hdr files for HDR formats (Bitmap::getFileDialogFilters)
- Added ability to force execution of render passes through a flag when adding the pass to a render graph
- GUI groups can be opened as a separate window by right-clicking on the group header bar
- Added support for sliders in the GUI
- Added support for buttons with images in the GUI (Gui::addImageButton)
- Added option to include a close button when creating GUI windows
New Samples:
- PathTracer: A basic path tracer implemented using DXR and the render graph system
Bug Fixes:
- Messages logged in dll's will no longer output to a separate text file
- Updated make_new_project.py to use Python 3 print()'s
- Python copied from Externals to executable folder after build to be used as Python home directory
Dependencies:
- Updated Slang to 0.11.21
Falcor 3.2
- Introduced concept of Experimental Features. These features are not included by default in "Falcor.h" and are instead part of a new "FalcorExperimental.h" header. DXR is considered an experimental feature.
- Render Graph and a set of Render Passes are released as an experimental feature. Most existing effects can also be used as a render pass.
- D3D Feature Level is now automatically selected by default
- Check Vulkan device's max supported API version if user requested a specific version
- RGB32 format no longer disabled on AMD GPUs now that drivers support it correctly
- RGB32 format support is checked when loading textures in Vulkan
- Added macro for suppressing deprecation warnings
- Add option to Gui::pushWindow() to choose if it should be have focus or not
- Add RenderContext::getBindFlags() getter
- Add Sampler::getDesc() getter
- Add Material::isEmissive() getter
- Add
alphaTest()
that uses Slang generics to select Sample method - Add scene_unit key to fscene
- Added
renderUI()
functions toScene
andCamera
- Add error check for missing file in Program creation
- Store scene bounding box in Scene, add getter
- Change OBJ/MTL to use SpecGloss by default, overrideable with metal_rough key in fscene
- Add frame reset option to video encoder UI
- Make video encoder retain options (do not delete the UI class between exports)
- Renamed getTriNormalsAndEdges to getTriNormalsAndEdgesInObjectSpace to clarify it's in object space
- Renamed getGeometricNormal to getGeometricNormalW to clarify it's in world space
- Loading of GLTF models has been enabled
New samples:
- RenderGraphEditor: A visual, node-based tool for creating and editing render graph scripts.
- RenderGraphViewer: Load scenes and render them with a render graph.
- SamplePassLibrary: Demonstration of how to write render passes that compile to DLLs, and how they can be loaded from render graph scripts.
Bug Fixes:
- Fixed reflection data to use row major flag from Slang
- Fixed bug in RtProgram::addDefine() methods
- Fixed bug in scene exporter that it aborted on nan/inf
- Fixed Vulkan image tiling flag selection for textures
Deprecations:
- Device::isExtensionSupported() - Use isFeatureSupported() instead.
Dependencies:
- Updated packman to 5.7.1
- Updated Slang to 0.11.8
- Updated Falcor Media to 2.2.1
Falcor 3.1.0
- Falcor now requires Windows 10 SDK version 1809 (10.0.17763.0)
DebugDXR
andReleaseDXR
build configs have been removed, raytracing features are officially a part of DirectX 12 on Windows 10 RS5RtSceneRenderer::renderScene()
andRenderContext::raytrace()
have been updated as DXR ray dispatch now takes 3 parameters (width, height, depth) instead of two- Added deprecation system
- Added the option to pass CompilerFlags to many objects
- Added Logger::Level::Fatal
- Added
env_map
attribute and environment texture to scenes - Added
Scene::setCamerasAspectRatio()
which will set all the scene's cameras aspect ratio at once - Gui class supports multiple fonts. Default font is trebuchet, profiler font is consolas-bold
- Added support for high-DPI displays (GUI only)
- Added a way to query for device feature support (see
Device::isFeatureSupported()
)
Bug Fixes and Improvements:
- Added debug checks when binding compute/graphics vars
- Added debug checks in resourceBarrier() to make sure the resource has the correct flags
- Added support for StructuredBuffers with VariableBuffer::renderUI
- Better abstraction of the alpha-test
- Use a priority_queue to help optimize descriptor-heap allocations
- Added a ProgramBase base class for better Program/RtProgram abstraction
- Fixed VideoCapture UI
- Fixed debug visualization in Shadows sample
- No longer call SetSamplePositions when device doesn't support it
Dependencies:
- Added pybind11 2.2.4
- Updated GLM to 0.9.9.2
- Updated Vulkan SDK to 1.1.82.1
- Updated Slang to 0.11.4
- Updated imgui to 1.65
Falcor 3.0.7
- Updated Slang to 0.10.31
Bug Fixes:
- Fixed a crash when rendering a VariablesBuffer/ConstantBuffer UI without specifying a group name
Falcor 3.0.6
- Changed max bones to 256
Bug Fixes:
- Updated Slang to 0.10.30. Fixes SceneEditor shaders in Vulkan configs
- Apply scaling transforms in animations
- Fixed interpolation issues at the end of animations